diff --git a/.gitignore b/.gitignore index 30c9d650..cf4aa3ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ **/.vs/* -**/x64/Debug/* -**/x64/Release/* +**/Debug/* +**/Release/* **/out/**/*.obj Debug-windows-x86_64/ imgui.ini diff --git a/GigiCompilerLib/Backends/DX12/Backend_DX12.cpp b/GigiCompilerLib/Backends/DX12/Backend_DX12.cpp index 3b0bd74d..7d0c3bb6 100644 --- a/GigiCompilerLib/Backends/DX12/Backend_DX12.cpp +++ b/GigiCompilerLib/Backends/DX12/Backend_DX12.cpp @@ -247,6 +247,8 @@ struct BackendDX12 : public BackendBase case TextureFormat::D24_Unorm_S8: return "DXGI_FORMAT_R24_UNORM_X8_TYPELESS"; case TextureFormat::BC7_Unorm: return "DXGI_FORMAT_BC7_UNORM"; case TextureFormat::BC7_Unorm_sRGB: return "DXGI_FORMAT_BC7_UNORM_SRGB"; + case TextureFormat::BC6_UF16: return "DXGI_FORMAT_BC6H_UF16"; + case TextureFormat::BC6_SF16: return "DXGI_FORMAT_BC6H_SF16"; } Assert(false, "Unhandled TextureFormat: %s (%i)", EnumToString(textureFormat), (int)textureFormat); @@ -760,15 +762,27 @@ struct BackendDX12 : public BackendBase { stringReplacementMap["/*$(IMGUI)*/"] << "\n " << VariableToString(variable, renderGraph) << " = ImGui::Button(\"" << variable.name << "\");" - "\n ShowToolTip(\"" << variable.comment << "\");" ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } } else { stringReplacementMap["/*$(IMGUI)*/"] << "\n ImGui::Checkbox(\"" << variable.name << "\", &" << VariableToString(variable, renderGraph) << ");" - "\n ShowToolTip(\"" << variable.comment << "\");" ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } } break; } @@ -778,8 +792,14 @@ struct BackendDX12 : public BackendBase { stringReplacementMap["/*$(IMGUI)*/"] << "\n ImGui::InputInt(\"" << variable.name << "\", &" << VariableToString(variable, renderGraph) << ", 0);" - "\n ShowToolTip(\"" << variable.comment << "\");" ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } } else { @@ -796,7 +816,16 @@ struct BackendDX12 : public BackendBase stringReplacementMap["/*$(IMGUI)*/"] << "\n };" "\n ImGui::Combo(\"" << variable.name << "\", (int*)&" << VariableToString(variable, renderGraph) << ", labels, " << e.items.size() << ");" - "\n ShowToolTip(\"" << variable.comment << "\");" + ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } + + stringReplacementMap["/*$(IMGUI)*/"] << "\n }" ; } @@ -810,7 +839,16 @@ struct BackendDX12 : public BackendBase "\n int localVar = (int)" << VariableToString(variable, renderGraph) << ";" "\n if(ImGui::InputInt(\"" << variable.name << "\", &localVar, 0))" "\n " << VariableToString(variable, renderGraph) << " = (unsigned int)localVar;" - "\n ShowToolTip(\"" << variable.comment << "\");" + ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } + + stringReplacementMap["/*$(IMGUI)*/"] << "\n }"; break; } @@ -832,7 +870,16 @@ struct BackendDX12 : public BackendBase "\n ImGui::Text(\"" << variable.name << "\");" "\n ImGui::PopItemWidth();" "\n ImGui::PopID();" - "\n ShowToolTip(\"" << variable.comment << "\");" + ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } + + stringReplacementMap["/*$(IMGUI)*/"] << "\n }"; break; } @@ -858,7 +905,16 @@ struct BackendDX12 : public BackendBase "\n ImGui::Text(\"" << variable.name << "\");" "\n ImGui::PopItemWidth();" "\n ImGui::PopID();" - "\n ShowToolTip(\"" << variable.comment << "\");" + ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } + + stringReplacementMap["/*$(IMGUI)*/"] << "\n }"; break; } @@ -866,8 +922,14 @@ struct BackendDX12 : public BackendBase { stringReplacementMap["/*$(IMGUI)*/"] << "\n ImGui::InputFloat(\"" << variable.name << "\", &" << VariableToString(variable, renderGraph) << ");" - "\n ShowToolTip(\"" << variable.comment << "\");" ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } break; } case DataFieldType::Float2: @@ -884,7 +946,16 @@ struct BackendDX12 : public BackendBase "\n ImGui::Text(\"" << variable.name << "\");" "\n ImGui::PopItemWidth();" "\n ImGui::PopID();" - "\n ShowToolTip(\"" << variable.comment << "\");" + ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } + + stringReplacementMap["/*$(IMGUI)*/"] << "\n }" ; break; @@ -913,7 +984,16 @@ struct BackendDX12 : public BackendBase "\n ImGui::Text(\"" << variable.name << "\");" "\n ImGui::PopItemWidth();" "\n ImGui::PopID();" - "\n ShowToolTip(\"" << variable.comment << "\");" + ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } + + stringReplacementMap["/*$(IMGUI)*/"] << "\n }" ; } @@ -945,7 +1025,16 @@ struct BackendDX12 : public BackendBase "\n ImGui::Text(\"" << variable.name << "\");" "\n ImGui::PopItemWidth();" "\n ImGui::PopID();" - "\n ShowToolTip(\"" << variable.comment << "\");" + ; + + if (!variable.comment.empty()) + { + stringReplacementMap["/*$(IMGUI)*/"] << + "\n ShowToolTip(\"" << variable.comment << "\");" + ; + } + + stringReplacementMap["/*$(IMGUI)*/"] << "\n }" ; } diff --git a/GigiCompilerLib/Backends/DX12/nodes/node_action_copyResource.inl b/GigiCompilerLib/Backends/DX12/nodes/node_action_copyResource.inl index 6e5dd8bb..c96bd943 100644 --- a/GigiCompilerLib/Backends/DX12/nodes/node_action_copyResource.inl +++ b/GigiCompilerLib/Backends/DX12/nodes/node_action_copyResource.inl @@ -142,8 +142,8 @@ static void MakeStringReplacementForNode(std::unordered_mapm_profile)" "\n {" - "\n context->m_profileData[s_timerIndex].m_label = \"" << node.name << "\";" - "\n context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count();" + "\n context->m_profileData[(s_timerIndex-1)/2].m_label = \"" << node.name << "\";" + "\n context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count();" "\n commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++);" "\n }" "\n }"; diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/.gitignore b/GigiCompilerLib/Backends/DX12/templates/Application/.gitignore index 2d9503dd..351a2dcb 100644 --- a/GigiCompilerLib/Backends/DX12/templates/Application/.gitignore +++ b/GigiCompilerLib/Backends/DX12/templates/Application/.gitignore @@ -8,3 +8,4 @@ Debug/ MinSizeRel/ Release/ RelWithDebInfo/ +.vs/ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/CMakeLists.txt b/GigiCompilerLib/Backends/DX12/templates/Application/CMakeLists.txt index fbf3c93d..3332fa15 100644 --- a/GigiCompilerLib/Backends/DX12/templates/Application/CMakeLists.txt +++ b/GigiCompilerLib/Backends/DX12/templates/Application/CMakeLists.txt @@ -29,9 +29,9 @@ target_include_directories(/*$(Name)*/ PRIVATE ./imgui/) /*$(if:DX12.AgilitySDKRequired:true)*/target_include_directories(/*$(Name)*/ PRIVATE ./AgilitySDK/include/)/*$(endif)*/ target_include_directories(/*$(Name)*/ PRIVATE ./DX12Utils/tinyexr/) target_include_directories(/*$(Name)*/ PRIVATE ./DX12Utils/tinyexr/deps/miniz/) -target_include_directories(/*$(Name)*/ PRIVATE ./WinPixEventRuntime.1.0.230302001/Include/) +target_include_directories(/*$(Name)*/ PRIVATE ./WinPixEventRuntime.1.0.240308001/Include/) -target_link_directories(/*$(Name)*/ PRIVATE ./WinPixEventRuntime.1.0.230302001/bin/x64/) +target_link_directories(/*$(Name)*/ PRIVATE ./WinPixEventRuntime.1.0.240308001/bin/x64/) target_link_libraries(/*$(Name)*/ d3d12.lib dxgi.lib d3dcompiler.lib WinPixEventRuntime.lib) diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEvents.h b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEvents.h deleted file mode 100644 index ec5f2ed5..00000000 --- a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEvents.h +++ /dev/null @@ -1,661 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: PIXEvents.h - * Content: PIX include file - * Don't include this file directly - use pix3.h - * - ****************************************************************************/ -#pragma once - -#ifndef _PixEvents_H_ -#define _PixEvents_H_ - -#ifndef _PIX3_H_ -# error Do not include this file directly - use pix3.h -#endif - -#include "PIXEventsCommon.h" - -#if _MSC_VER < 1800 -# error This version of pix3.h is only supported on Visual Studio 2013 or higher -#elif _MSC_VER < 1900 -# ifndef constexpr // Visual Studio 2013 doesn't support constexpr -# define constexpr -# define PIX3__DEFINED_CONSTEXPR -# endif -#endif - -// Xbox does not support CPU events for retail scenarios -#if defined(USE_PIX) || !defined(PIX_XBOX) -#define PIX_CONTEXT_EMIT_CPU_EVENTS -#endif - -namespace PIXEventsDetail -{ - template - struct PIXEventTypeInferer - { - static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_VarArgs; } - static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_VarArgs; } - static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } - static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } - - // Xbox and Windows store different types of events for context events. - // On Xbox these include a context argument, while on Windows they do - // not. It is important not to change the event types used on the - // Windows version as there are OS components (eg debug layer & DRED) - // that decode event structs. -#ifdef PIX_XBOX - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } -#else - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_VarArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_VarArgs; } -#endif - }; - - template<> - struct PIXEventTypeInferer<> - { - static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_NoArgs; } - static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_NoArgs; } - static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } - static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } - -#ifdef PIX_XBOX - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } -#else - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_NoArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_NoArgs; } -#endif - }; - - inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit) - { - // nothing - UNREFERENCED_PARAMETER(destination); - UNREFERENCED_PARAMETER(limit); - } - - template - void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) - { - PIXCopyEventArgument(destination, limit, arg); - PIXCopyEventArguments(destination, limit, args...); - } - - template - __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::Begin()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXBeginEvent(UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::Begin()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXBeginEventAllocate(threadInfo, color, formatString, args...); - } - } - } - - template - __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarker()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXSetMarker(UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarker()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXSetMarkerAllocate(threadInfo, color, formatString, args...); - } - } - } - - template - __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::BeginOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - UNREFERENCED_PARAMETER(context); - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXBeginEventOnContextCpu(void* context, UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::BeginOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXBeginEventOnContextCpuAllocate(threadInfo, context, color, formatString, args...); - } - } - } - - template - void PIXBeginEvent(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS - PIXBeginEventOnContextCpu(context, color, formatString, args...); -#endif - - // TODO: we've already encoded this once for the CPU event - figure out way to avoid doing it again - UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; - UINT64* destination = buffer; - UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; - - *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuBeginOnContext()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - *destination = 0ull; - - PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); - } - - template - __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarkerOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - UNREFERENCED_PARAMETER(context); - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXSetMarkerOnContextCpu(void* context, UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarkerOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXSetMarkerOnContextCpuAllocate(threadInfo, context, color, formatString, args...); - } - } - } - - template - void PIXSetMarker(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS - PIXSetMarkerOnContextCpu(context, color, formatString, args...); -#endif - - UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; - UINT64* destination = buffer; - UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; - - *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuSetMarkerOnContext()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - *destination = 0ull; - - PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); - } - - __declspec(noinline) inline void PIXEndEventAllocate(PIXEventsThreadInfo* threadInfo) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(true); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, true); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent); - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - inline void PIXEndEvent() - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent); - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXEndEventAllocate(threadInfo); - } - } - } - - __declspec(noinline) inline void PIXEndEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(true); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, true); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent_OnContext); -#ifdef PIX_XBOX - UNREFERENCED_PARAMETER(context); -#else - PIXCopyEventArgument(destination, limit, context); -#endif - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - inline void PIXEndEventOnContextCpu(void* context) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent_OnContext); -#ifndef PIX_XBOX - PIXCopyEventArgument(destination, limit, context); -#endif - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXEndEventOnContextCpuAllocate(threadInfo, context); - } - } - } - - template - void PIXEndEvent(CONTEXT* context) - { -#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS - PIXEndEventOnContextCpu(context); -#endif - PIXEndGPUEventOnContext(context); - } -} - -#if defined(USE_PIX) - -template -void PIXBeginEvent(UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(color, formatString, args...); -} - -template -void PIXBeginEvent(UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(color, formatString, args...); -} - -template -void PIXSetMarker(UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(color, formatString, args...); -} - -template -void PIXSetMarker(UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(color, formatString, args...); -} - -template -void PIXBeginEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXBeginEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXSetMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -template -void PIXSetMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -inline void PIXEndEvent() -{ - PIXEventsDetail::PIXEndEvent(); -} - -template -void PIXEndEvent(CONTEXT* context) -{ - PIXEventsDetail::PIXEndEvent(context); -} - -#else // USE_PIX_RETAIL - -inline void PIXBeginEvent(UINT64, _In_ PCSTR, ...) {} -inline void PIXBeginEvent(UINT64, _In_ PCWSTR, ...) {} -inline void PIXBeginEvent(void*, UINT64, _In_ PCSTR, ...) {} -inline void PIXBeginEvent(void*, UINT64, _In_ PCWSTR, ...) {} -inline void PIXEndEvent() {} -inline void PIXEndEvent(void*) {} -inline void PIXSetMarker(UINT64, _In_ PCSTR, ...) {} -inline void PIXSetMarker(UINT64, _In_ PCWSTR, ...) {} -inline void PIXSetMarker(void*, UINT64, _In_ PCSTR, ...) {} -inline void PIXSetMarker(void*, UINT64, _In_ PCWSTR, ...) {} - -#endif // USE_PIX - -template -void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -template -void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -template -void PIXEndRetailEvent(CONTEXT* context) -{ - PIXEventsDetail::PIXEndEvent(context); -} - -template -class PIXScopedEventObject -{ - CONTEXT* m_context; - -public: - template - PIXScopedEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginEvent(m_context, color, formatString, args...); - } - - template - PIXScopedEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginEvent(m_context, color, formatString, args...); - } - - ~PIXScopedEventObject() - { - PIXEndEvent(m_context); - } -}; - -template -class PIXScopedRetailEventObject -{ - CONTEXT* m_context; - -public: - template - PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginRetailEvent(m_context, color, formatString, args...); - } - - template - PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginRetailEvent(m_context, color, formatString, args...); - } - - ~PIXScopedRetailEventObject() - { - PIXEndRetailEvent(m_context); - } -}; - -template<> -class PIXScopedEventObject -{ -public: - template - PIXScopedEventObject(UINT64 color, PCWSTR formatString, ARGS... args) - { - PIXBeginEvent(color, formatString, args...); - } - - template - PIXScopedEventObject(UINT64 color, PCSTR formatString, ARGS... args) - { - PIXBeginEvent(color, formatString, args...); - } - - ~PIXScopedEventObject() - { - PIXEndEvent(); - } -}; - -#define PIXConcatenate(a, b) a ## b -#define PIXGetScopedEventVariableName(a, b) PIXConcatenate(a, b) -#define PIXScopedEvent(context, ...) PIXScopedEventObject::Type> PIXGetScopedEventVariableName(pixEvent, __LINE__)(context, __VA_ARGS__) - -#ifdef PIX3__DEFINED_CONSTEXPR -#undef constexpr -#undef PIX3__DEFINED_CONSTEXPR -#endif - -#endif // _PIXEvents_H__ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/WinPixEventRuntime.1.0.230302001.nupkg b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/WinPixEventRuntime.1.0.230302001.nupkg deleted file mode 100644 index 0033034a..00000000 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/WinPixEventRuntime.1.0.230302001.nupkg and /dev/null differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.dll b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.dll deleted file mode 100644 index 236c67ba..00000000 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.dll and /dev/null differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.dll b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.dll deleted file mode 100644 index 46a7e8f4..00000000 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.dll and /dev/null differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.dll b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.dll deleted file mode 100644 index 0e2f75c5..00000000 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.dll and /dev/null differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.dll b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.dll deleted file mode 100644 index a69e26cd..00000000 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.dll and /dev/null differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/license.txt b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/license.txt deleted file mode 100644 index 50976a56..00000000 --- a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/license.txt +++ /dev/null @@ -1,78 +0,0 @@ -MICROSOFT SOFTWARE LICENSE TERMS - -PIX EVENT RUNTIME FOR WINDOWS - -IF YOU LIVE IN (OR ARE A BUSINESS WITH A PRINCIPAL PLACE OF BUSINESS IN) THE UNITED STATES, PLEASE READ THE “BINDING ARBITRATION AND CLASS ACTION WAIVER” SECTION BELOW. IT AFFECTS HOW DISPUTES ARE RESOLVED. - -These license terms are an agreement between you and Microsoft Corporation (or one of its affiliates). They apply to the software named above and any Microsoft services or software updates (except to the extent such services or updates are accompanied by new or additional terms, in which case those different terms apply prospectively and do not alter your or Microsoft’s rights relating to pre-updated software or services). IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. - -1. INSTALLATION AND USE RIGHTS. - a. General. You may install and use any number of copies of the software to design, develop and test your Microsoft Windows programs. - b. Third Party Software. The software may include third party applications that are licensed to you under this agreement or under their own terms. License terms, notices, and acknowledgements, if any, for the third party applications may be accessible online at http://aka.ms/thirdpartynotices or in an accompanying notices file. Even if such applications are governed by other agreements, the disclaimer, limitations on, and exclusions of damages below also apply to the extent allowed by applicable law. - -2. DISTRIBUTABLE CODE. - a. Distributable Code. The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in programs you develop if you comply with the terms below. - (i) Right to Use and Distribute. - * You may copy and distribute the object code form of the software. - * Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. - (ii) Distribution Requirements. For any Distributable Code you distribute, you must - * add significant primary functionality to it in your programs; - * require distributors and external end users to agree to terms that protect it at least as much as this agreement; - * display your valid copyright notice on your programs; and - * indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your programs. - (iii) Distribution Restrictions. You may not - * alter any copyright, trademark or patent notice in the Distributable Code; - * use Microsoft’s trademarks in your programs’ names or in a way that suggests your programs come from or are endorsed by Microsoft; - * distribute Distributable Code to run on a platform other than a Windows platform; - * include Distributable Code in malicious, deceptive or unlawful programs; or - * modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that - * the code be disclosed or distributed in source code form; or - * others have the right to modify it. - -3. SCOPE OF LICENSE. The software is licensed, not sold. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you will not (and have no right to): - a. work around any technical limitations in the software that only allow you to use it in certain ways; - b. reverse engineer, decompile or disassemble the software; - c. remove, minimize, block, or modify any notices of Microsoft or its suppliers in the software; - d. use the software in any way that is against the law or to create or propagate malware; or - e. share, publish, distribute, or lend the software, provide the software as a stand-alone hosted solution for others to use, or transfer the software or this agreement to any third party. - -4. EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit http://aka.ms/exporting. - -5. SUPPORT SERVICES. Microsoft is not obligated under this agreement to provide any support services for the software. Any support provided is “as is”, “with all faults”, and without warranty of any kind. - -6. BINDING ARBITRATION AND CLASS ACTION WAIVER. This Section applies if you live in (or, if a business, your principal place of business is in) the United States. If you and Microsoft have a dispute, you and Microsoft agree to try for 60 days to resolve it informally. If you and Microsoft can’t, you and Microsoft agree to binding individual arbitration before the American Arbitration Association under the Federal Arbitration Act (“FAA”), and not to sue in court in front of a judge or jury. Instead, a neutral arbitrator will decide. Class action lawsuits, class-wide arbitrations, private attorney-general actions, and any other proceeding where someone acts in a representative capacity are not allowed; nor is combining individual proceedings without the consent of all parties. The complete Arbitration Agreement contains more terms and is at http://aka.ms/arb-agreement-1. You and Microsoft agree to these terms. - -7. ENTIRE AGREEMENT. This agreement, and any other terms Microsoft may provide for supplements, updates, or third-party applications, is the entire agreement for the software. - -8. APPLICABLE LAW AND PLACE TO RESOLVE DISPUTES. If you acquired the software in the United States or Canada, the laws of the state or province where you live (or, if a business, where your principal place of business is located) govern the interpretation of this agreement, claims for its breach, and all other claims (including consumer protection, unfair competition, and tort claims), regardless of conflict of laws principles, except that the FAA governs everything related to arbitration. If you acquired the software in any other country, its laws apply, except that the FAA governs everything related to arbitration. If U.S. federal jurisdiction exists, you and Microsoft consent to exclusive jurisdiction and venue in the federal court in King County, Washington for all disputes heard in court (excluding arbitration). If not, you and Microsoft consent to exclusive jurisdiction and venue in the Superior Court of King County, Washington for all disputes heard in court (excluding arbitration). - -9. CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state, province, or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state, province, or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: - a. Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. - b. Canada. If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. - c. Germany and Austria. - (i) Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However, Microsoft gives no contractual guarantee in relation to the licensed software. - (ii) Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable according to the statutory law. - Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence. - -10. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. - -11. LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. -This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, warranty, guarantee, or condition; strict liability, negligence, or other tort; or any other claim; in each case to the extent permitted by applicable law. -It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state, province, or country may not allow the exclusion or limitation of incidental, consequential, or other damages. - - -[Please note: As this software is distributed in Canada, some of the clauses in this agreement are provided below in French. - -Remarque: Ce logiciel étant distribué au Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français. - -EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d’adéquation à un usage particulier et d’absence de contrefaçon sont exclues. - -LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices. - -Cette limitation concerne: - * tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers; et - * les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d’une autre faute dans la limite autorisée par la loi en vigueur. - -Elle s’applique également, même si Microsoft connaissait ou devrait connaître l’éventualité d’un tel dommage. Si votre pays n’autorise pas l’exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l’exclusion ci-dessus ne s’appliquera pas à votre égard. - -EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d’autres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas.] diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEvents.h b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEvents.h new file mode 100644 index 00000000..1a9fdf0d --- /dev/null +++ b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEvents.h @@ -0,0 +1,1578 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Don't include this file directly - use pix3.h + +#pragma once + +#ifndef _PixEvents_H_ +#define _PixEvents_H_ + +#ifndef _PIX3_H_ +# error Do not include this file directly - use pix3.h +#endif + +#include "PIXEventsCommon.h" + +#if _MSC_VER < 1800 +# error This version of pix3.h is only supported on Visual Studio 2013 or higher +#elif _MSC_VER < 1900 +# ifndef constexpr // Visual Studio 2013 doesn't support constexpr +# define constexpr +# define PIX3__DEFINED_CONSTEXPR +# endif +#endif + + // Xbox does not support CPU events for retail scenarios +#if defined(USE_PIX) || !defined(PIX_XBOX) +#define PIX_CONTEXT_EMIT_CPU_EVENTS +#endif + +namespace PIXEventsDetail +{ + inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit) + { + // nothing + UNREFERENCED_PARAMETER(destination); + UNREFERENCED_PARAMETER(limit); + } + + template + void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) + { + PIXCopyEventArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); + } + + template + void PIXCopyStringArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) + { + PIXCopyStringArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); + } + + template + void PIXCopyStringArgumentsWithContext(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, void* context, ARG const& arg, ARGS const&... args) + { +#ifdef PIX_XBOX + UNREFERENCED_PARAMETER(context); + PIXCopyStringArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); +#else + PIXCopyEventArgument(destination, limit, context); + PIXCopyStringArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); +#endif + } + + inline UINT8 PIXGetEventSize(const UINT64* end, const UINT64* start) + { + const UINT64 actualEventSize = end - start; + + return static_cast(actualEventSize > PIXEventsSizeMax ? PIXEventsSizeMax : actualEventSize); + } + + template + inline UINT8 PIXEncodeStringIsAnsi() + { + return PIX_EVENT_METADATA_NONE; + } + + template<> + inline UINT8 PIXEncodeStringIsAnsi() + { + return PIX_EVENT_METADATA_STRING_IS_ANSI; + } + + template<> + inline UINT8 PIXEncodeStringIsAnsi() + { + return PIX_EVENT_METADATA_STRING_IS_ANSI; + } + + template + __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_HAS_COLOR | + PIXEncodeStringIsAnsi(); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEvent(UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_HAS_COLOR | + PIXEncodeStringIsAnsi(); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEvent(UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarker(UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarker(UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEventOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXBeginEvent(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXBeginEventOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_BeginEvent, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeBeginEventForContext(buffer, color, formatString, args...); + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + template + __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEventOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXBeginEvent(CONTEXT* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXBeginEventOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_BeginEvent, eventSize, eventMetadata); + + PIXInsertGPUMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeBeginEventForContext(buffer, color, formatString, args...); + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + template + __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarkerOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXSetMarker(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXSetMarkerOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_SetMarker, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeSetMarkerForContext(buffer, color, formatString, args...); + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + template + __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarkerOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXSetMarker(CONTEXT* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXSetMarkerOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_SetMarker, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeSetMarkerForContext(buffer, color, formatString, args...); + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + __declspec(noinline) inline void PIXEndEventAllocate(PIXEventsThreadInfo* threadInfo) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, true); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + const UINT8 eventSize = 1; + const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + *destination = PIXEventsBlockEndMarker; + + threadInfo->destination = destination; + } + + inline void PIXEndEvent() + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + const UINT8 eventSize = 1; + const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + *destination = PIXEventsBlockEndMarker; + + threadInfo->destination = destination; + } + else + { + PIXEndEventAllocate(threadInfo); + } + } + } + + __declspec(noinline) inline UINT64* PIXEndEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, true); + if (!time) + return nullptr; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return nullptr; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; +#ifdef PIX_XBOX + UNREFERENCED_PARAMETER(context); +#else + PIXCopyEventArgument(destination, limit, context); +#endif + * destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = PIX_EVENT_METADATA_ON_CONTEXT; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + + return eventDestination; + } + + inline UINT64* PIXEndEventOnContextCpu(void* context) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; +#ifndef PIX_XBOX + PIXCopyEventArgument(destination, limit, context); +#endif + * destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = PIX_EVENT_METADATA_ON_CONTEXT; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + + return eventDestination; + } + else + { + return PIXEndEventOnContextCpuAllocate(threadInfo, context); + } + } + + return nullptr; + } + + template + void PIXEndEvent(CONTEXT* context) + { + UINT64* destination = nullptr; +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + destination = PIXEndEventOnContextCpu(context); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForEndEvent(context, PIXEvent_EndEvent); + } + else +#endif + { +#ifdef PIX_USE_GPU_MARKERS_V2 + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + destination = buffer; + + UINT64* eventDestination = destination++; + + const UINT8 eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE; + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_EndEvent, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForEndEvent(context, PIXEvent_EndEvent, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + PIXEndGPUEventOnContext(context); +#endif + } + } +} + +#if defined(USE_PIX) + +template +void PIXBeginEvent(UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXBeginEvent(UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXBeginEvent(UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXBeginEvent(UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXSetMarker(UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXSetMarker(UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXSetMarker(UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXSetMarker(UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +inline void PIXEndEvent() +{ + PIXEventsDetail::PIXEndEvent(); +} + +template +void PIXEndEvent(CONTEXT* context) +{ + PIXEventsDetail::PIXEndEvent(context); +} + +#else // USE_PIX_RETAIL + +inline void PIXBeginEvent(UINT64, _In_ PCSTR, ...) {} +inline void PIXBeginEvent(UINT64, _In_ PCWSTR, ...) {} +inline void PIXBeginEvent(void*, UINT64, _In_ PCSTR, ...) {} +inline void PIXBeginEvent(void*, UINT64, _In_ PCWSTR, ...) {} +inline void PIXEndEvent() {} +inline void PIXEndEvent(void*) {} +inline void PIXSetMarker(UINT64, _In_ PCSTR, ...) {} +inline void PIXSetMarker(UINT64, _In_ PCWSTR, ...) {} +inline void PIXSetMarker(void*, UINT64, _In_ PCSTR, ...) {} +inline void PIXSetMarker(void*, UINT64, _In_ PCWSTR, ...) {} + +#endif // USE_PIX + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXEndRetailEvent(CONTEXT* context) +{ + PIXEventsDetail::PIXEndEvent(context); +} + +template +class PIXScopedEventObject +{ + CONTEXT* m_context; + +public: + template + PIXScopedEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + ~PIXScopedEventObject() + { + PIXEndEvent(m_context); + } +}; + +template +class PIXScopedRetailEventObject +{ + CONTEXT* m_context; + +public: + template + PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + ~PIXScopedRetailEventObject() + { + PIXEndRetailEvent(m_context); + } +}; + +template<> +class PIXScopedEventObject +{ +public: + template + PIXScopedEventObject(UINT64 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT64 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT32 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT32 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(INT32 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(INT32 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(DWORD color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(DWORD color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT8 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT8 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + ~PIXScopedEventObject() + { + PIXEndEvent(); + } +}; + +#define PIXConcatenate(a, b) a ## b +#define PIXGetScopedEventVariableName(a, b) PIXConcatenate(a, b) +#define PIXScopedEvent(context, ...) PIXScopedEventObject::Type> PIXGetScopedEventVariableName(pixEvent, __LINE__)(context, __VA_ARGS__) + +#ifdef PIX3__DEFINED_CONSTEXPR +#undef constexpr +#undef PIX3__DEFINED_CONSTEXPR +#endif + +#endif // _PIXEvents_H__ + diff --git a/packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEventsCommon.h b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsCommon.h similarity index 61% rename from packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEventsCommon.h rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsCommon.h index a9c21d97..ff26230c 100644 --- a/packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEventsCommon.h +++ b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsCommon.h @@ -1,29 +1,12 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; -* -* Copyright (C) Microsoft Corporation. All Rights Reserved. -* -* File: PIXEventsCommon.h -* Content: PIX include file -* Don't include this file directly - use pix3.h -* -****************************************************************************/ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Don't include this file directly - use pix3.h + #pragma once #ifndef _PIXEventsCommon_H_ #define _PIXEventsCommon_H_ -#if defined(XBOX) || defined(_XBOX_ONE) || defined(_DURANGO) || defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT) -#define PIX_XBOX -#endif - -#include - -#if defined(_M_X64) || defined(_M_IX86) -#include -#endif - // // The PIXBeginEvent and PIXSetMarker functions have an optimized path for // copying strings that work by copying 128-bit or 64-bits at a time. In some @@ -73,32 +56,29 @@ struct PIXEventsThreadInfo UINT64* destination; }; -#ifdef PIX_XBOX -extern "C" UINT64 WINAPI PIXEventsReplaceBlock(bool getEarliestTime) noexcept; -#else extern "C" UINT64 WINAPI PIXEventsReplaceBlock(PIXEventsThreadInfo * threadInfo, bool getEarliestTime) noexcept; + +#define PIX_EVENT_METADATA_NONE 0x0 +#define PIX_EVENT_METADATA_ON_CONTEXT 0x1 +#define PIX_EVENT_METADATA_STRING_IS_ANSI 0x2 +#define PIX_EVENT_METADATA_HAS_COLOR 0xF0 + +#ifndef PIX_GAMING_XBOX +#include "PIXEventsLegacy.h" #endif -enum PIXEventType +enum PIXEventType : UINT8 { - PIXEvent_EndEvent = 0x000, - PIXEvent_BeginEvent_VarArgs = 0x001, - PIXEvent_BeginEvent_NoArgs = 0x002, - PIXEvent_SetMarker_VarArgs = 0x007, - PIXEvent_SetMarker_NoArgs = 0x008, - - PIXEvent_EndEvent_OnContext = 0x010, - PIXEvent_BeginEvent_OnContext_VarArgs = 0x011, - PIXEvent_BeginEvent_OnContext_NoArgs = 0x012, - PIXEvent_SetMarker_OnContext_VarArgs = 0x017, - PIXEvent_SetMarker_OnContext_NoArgs = 0x018, + PIXEvent_EndEvent = 0x00, + PIXEvent_BeginEvent = 0x01, + PIXEvent_SetMarker = 0x02, }; static const UINT64 PIXEventsReservedRecordSpaceQwords = 64; //this is used to make sure SSE string copy always will end 16-byte write in the current block //this way only a check if destination < limit can be performed, instead of destination < limit - 1 //since both these are UINT64* and SSE writes in 16 byte chunks, 8 bytes are kept in reserve -//so even if SSE overwrites 8 extra bytes, those will still belong to the correct block +//so even if SSE overwrites 8-15 extra bytes, those will still belong to the correct block //on next iteration check destination will be greater than limit //this is used as well for fixed size UMD events and PIXEndEvent since these require less space //than other variable length user events and do not need big reserved space @@ -109,20 +89,43 @@ static const UINT64 PIXEventsGraphicsRecordSpaceQwords = 64; //Bits 7-19 (13 bits) static const UINT64 PIXEventsBlockEndMarker = 0x00000000000FFF80; -//Bits 10-19 (10 bits) -static const UINT64 PIXEventsTypeReadMask = 0x00000000000FFC00; -static const UINT64 PIXEventsTypeWriteMask = 0x00000000000003FF; -static const UINT64 PIXEventsTypeBitShift = 10; -//Bits 20-63 (44 bits) -static const UINT64 PIXEventsTimestampReadMask = 0xFFFFFFFFFFF00000; +// V2 events + +// Bits 00..06 (7 bits) - Size in QWORDS +static const UINT64 PIXEventsSizeWriteMask = 0x000000000000007F; +static const UINT64 PIXEventsSizeBitShift = 0; +static const UINT64 PIXEventsSizeReadMask = PIXEventsSizeWriteMask << PIXEventsSizeBitShift; +static const UINT64 PIXEventsSizeMax = (1ull << 7) - 1ull; + +// Bits 07..11 (5 bits) - Event Type +static const UINT64 PIXEventsTypeWriteMask = 0x000000000000001F; +static const UINT64 PIXEventsTypeBitShift = 7; +static const UINT64 PIXEventsTypeReadMask = PIXEventsTypeWriteMask << PIXEventsTypeBitShift; + +// Bits 12..19 (8 bits) - Event Specific Metadata +static const UINT64 PIXEventsMetadataWriteMask = 0x00000000000000FF; +static const UINT64 PIXEventsMetadataBitShift = 12; +static const UINT64 PIXEventsMetadataReadMask = PIXEventsMetadataWriteMask << PIXEventsMetadataBitShift; + +// Buts 20..63 (44 bits) - Timestamp static const UINT64 PIXEventsTimestampWriteMask = 0x00000FFFFFFFFFFF; static const UINT64 PIXEventsTimestampBitShift = 20; +static const UINT64 PIXEventsTimestampReadMask = PIXEventsTimestampWriteMask << PIXEventsTimestampBitShift; + +inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType, UINT8 eventSize, UINT8 eventMetadata) +{ + return + ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | + (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift) | + (((UINT64)eventMetadata & PIXEventsMetadataWriteMask) << PIXEventsMetadataBitShift) | + (((UINT64)eventSize & PIXEventsSizeWriteMask) << PIXEventsSizeBitShift); +} -inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType) +inline UINT8 PIXEncodeIndexColor(UINT8 color) { - return ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | - (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift); + // There are 8 index colors, indexed 0 (default) to 7 + return (color & 0x7) << 4; } //Bits 60-63 (4) @@ -145,12 +148,13 @@ static const UINT64 PIXEventsStringIsShortcutWriteMask = 0x0000000000000001; static const UINT64 PIXEventsStringIsShortcutReadMask = 0x0020000000000000; static const UINT64 PIXEventsStringIsShortcutBitShift = 53; -inline UINT64 PIXEncodeStringInfo(UINT64 alignment, UINT64 copyChunkSize, BOOL isANSI, BOOL isShortcut) +inline void PIXEncodeStringInfo(UINT64*& destination, BOOL isANSI) { - return ((alignment & PIXEventsStringAlignmentWriteMask) << PIXEventsStringAlignmentBitShift) | - ((copyChunkSize & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | - (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift) | - (((UINT64)isShortcut & PIXEventsStringIsShortcutWriteMask) << PIXEventsStringIsShortcutBitShift); + const UINT64 encodedStringInfo = + ((sizeof(UINT64) & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | + (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift); + + *destination++ = encodedStringInfo; } template @@ -239,10 +243,10 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& desti } } -//unsigned char has to be cast to a longer unsigned integer type +//UINT8 has to be cast to a longer unsigned integer type //this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier template<> -inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, unsigned char argument) +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT8 argument) { if (destination < limit) { @@ -263,61 +267,60 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& desti } } -inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +inline void PIXCopyEventStringArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) { - *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); while (destination < limit) { - UINT64 c = static_cast(argument[0]); + UINT64 c = static_cast(argument[0]); if (!c) { *destination++ = 0; return; } UINT64 x = c; - c = static_cast(argument[1]); + c = static_cast(argument[1]); if (!c) { *destination++ = x; return; } x |= c << 8; - c = static_cast(argument[2]); + c = static_cast(argument[2]); if (!c) { *destination++ = x; return; } x |= c << 16; - c = static_cast(argument[3]); + c = static_cast(argument[3]); if (!c) { *destination++ = x; return; } x |= c << 24; - c = static_cast(argument[4]); + c = static_cast(argument[4]); if (!c) { *destination++ = x; return; } x |= c << 32; - c = static_cast(argument[5]); + c = static_cast(argument[5]); if (!c) { *destination++ = x; return; } x |= c << 40; - c = static_cast(argument[6]); + c = static_cast(argument[6]); if (!c) { *destination++ = x; return; } x |= c << 48; - c = static_cast(argument[7]); + c = static_cast(argument[7]); if (!c) { *destination++ = x; @@ -329,37 +332,42 @@ inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& dest } } +template inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) { -#if PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<8>(argument)) + PIXEncodeStringInfo(destination, TRUE); + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +template<> +inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + +inline void PIXCopyEventStringArgumentFast(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + constexpr UINT64 mask1 = 0x0101010101010101ULL; + constexpr UINT64 mask2 = 0x8080808080808080ULL; + UINT64* source = (UINT64*)argument; + + while (destination < limit) { - *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); - UINT64* source = (UINT64*)argument; - while (destination < limit) + UINT64 qword = *source++; + *destination++ = qword; + + //check if any of the characters is a terminating zero + UINT64 isTerminated = (qword - mask1) & (~qword & mask2); + + if (isTerminated) { - UINT64 qword = *source++; - *destination++ = qword; - //check if any of the characters is a terminating zero - if (!((qword & 0xFF00000000000000) && - (qword & 0xFF000000000000) && - (qword & 0xFF0000000000) && - (qword & 0xFF00000000) && - (qword & 0xFF000000) && - (qword & 0xFF0000) && - (qword & 0xFF00) && - (qword & 0xFF))) - { - break; - } + break; } } - else -#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY - { - PIXCopyEventArgumentSlowest(destination, limit, argument); - } } +#endif template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) @@ -369,43 +377,15 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& dest if (argument != nullptr) { #if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<16>(argument)) + if (PIXIsPointerAligned<8>(argument)) { - *destination++ = PIXEncodeStringInfo(0, 16, TRUE, FALSE); - __m128i zero = _mm_setzero_si128(); - if (PIXIsPointerAligned<16>(destination)) - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_store_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi8(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 16; - } - } - else - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_storeu_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi8(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 16; - } - } + PIXEncodeStringInfo(destination, TRUE); + PIXCopyEventStringArgumentFast(destination, limit, argument); } else #endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY { - PIXCopyEventArgumentSlow(destination, limit, argument); + PIXCopyEventArgumentSlow(destination, limit, argument); } } else @@ -415,39 +395,64 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& dest } } +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + PIXCopyEventStringArgumentFast(destination, limit, argument); + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } +} + template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) { PIXCopyEventArgument(destination, limit, (PCSTR)argument); } -inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) +{ + PIXCopyStringArgument(destination, limit, (PCSTR)argument); +} + +inline void PIXCopyEventStringArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) { - *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); while (destination < limit) { - UINT64 c = static_cast(argument[0]); + UINT64 c = static_cast(argument[0]); if (!c) { *destination++ = 0; return; } UINT64 x = c; - c = static_cast(argument[1]); + c = static_cast(argument[1]); if (!c) { *destination++ = x; return; } x |= c << 16; - c = static_cast(argument[2]); + c = static_cast(argument[2]); if (!c) { *destination++ = x; return; } x |= c << 32; - c = static_cast(argument[3]); + c = static_cast(argument[3]); if (!c) { *destination++ = x; @@ -459,34 +464,39 @@ inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& dest } } +template inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) { -#if PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<8>(argument)) + PIXEncodeStringInfo(destination, FALSE); + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +template<> +inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY +inline void PIXCopyEventStringArgumentFast(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + UINT64* source = (UINT64*)argument; + while (destination < limit) { - *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); - UINT64* source = (UINT64*)argument; - while (destination < limit) + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + //TODO: check if reversed condition is faster + if (!((qword & 0xFFFF000000000000) && + (qword & 0xFFFF00000000) && + (qword & 0xFFFF0000) && + (qword & 0xFFFF))) { - UINT64 qword = *source++; - *destination++ = qword; - //check if any of the characters is a terminating zero - //TODO: check if reversed condition is faster - if (!((qword & 0xFFFF000000000000) && - (qword & 0xFFFF00000000) && - (qword & 0xFFFF0000) && - (qword & 0xFFFF))) - { - break; - } + break; } } - else -#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY - { - PIXCopyEventArgumentSlowest(destination, limit, argument); - } } +#endif template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) @@ -496,43 +506,15 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& des if (argument != nullptr) { #if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<16>(argument)) + if (PIXIsPointerAligned<8>(argument)) { - *destination++ = PIXEncodeStringInfo(0, 16, FALSE, FALSE); - __m128i zero = _mm_setzero_si128(); - if (PIXIsPointerAligned<16>(destination)) - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_store_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi16(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 8; - } - } - else - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_storeu_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi16(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 8; - } - } + PIXEncodeStringInfo(destination, FALSE); + PIXCopyEventStringArgumentFast(destination, limit, argument); } else #endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY { - PIXCopyEventArgumentSlow(destination, limit, argument); + PIXCopyEventArgumentSlow(destination, limit, argument); } } else @@ -542,12 +524,38 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& des } } +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + PIXCopyEventStringArgumentFast(destination, limit, argument); + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } +} + template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PWSTR argument) { PIXCopyEventArgument(destination, limit, (PCWSTR)argument); }; +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PWSTR argument) +{ + PIXCopyStringArgument(destination, limit, (PCWSTR)argument); +}; + #if defined(__d3d12_x_h__) || defined(__d3d12_xs_h__) || defined(__d3d12_h__) inline void PIXSetGPUMarkerOnContext(_In_ ID3D12GraphicsCommandList* commandList, _In_reads_bytes_(size) void* data, UINT size) @@ -594,12 +602,9 @@ template<> struct PIXInferScopedEventType { typedef void Type; }; template<> struct PIXInferScopedEventType { typedef void Type; }; template<> struct PIXInferScopedEventType { typedef void Type; }; template<> struct PIXInferScopedEventType { typedef void Type; }; - - -#if PIX_ENABLE_BLOCK_ARGUMENT_COPY_SET -#undef PIX_ENABLE_BLOCK_ARGUMENT_COPY -#endif - -#undef PIX_ENABLE_BLOCK_ARGUMENT_COPY_SET +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; #endif //_PIXEventsCommon_H_ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsLegacy.h b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsLegacy.h new file mode 100644 index 00000000..b5b08bea --- /dev/null +++ b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsLegacy.h @@ -0,0 +1,565 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// Don't include this file directly - use pix3.h +// This file encodes PIX events in the legacy PIX event format. + +#ifndef _PIXEventsLegacy_H_ +#define _PIXEventsLegacy_H_ + +#include + +#if defined(_M_X64) || defined(_M_IX86) +#include +#endif + +namespace PixEventsLegacy +{ + enum PIXEventType + { + PIXEvent_EndEvent = 0x000, + PIXEvent_BeginEvent_VarArgs = 0x001, + PIXEvent_BeginEvent_NoArgs = 0x002, + PIXEvent_SetMarker_VarArgs = 0x007, + PIXEvent_SetMarker_NoArgs = 0x008, + + PIXEvent_EndEvent_OnContext = 0x010, + PIXEvent_BeginEvent_OnContext_VarArgs = 0x011, + PIXEvent_BeginEvent_OnContext_NoArgs = 0x012, + PIXEvent_SetMarker_OnContext_VarArgs = 0x017, + PIXEvent_SetMarker_OnContext_NoArgs = 0x018, + }; + + static const UINT64 PIXEventsReservedRecordSpaceQwords = 64; + static const UINT64 PIXEventsReservedTailSpaceQwords = 2; + static const UINT64 PIXEventsSafeFastCopySpaceQwords = PIXEventsReservedRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + static const UINT64 PIXEventsGraphicsRecordSpaceQwords = 64; + + //Bits 7-19 (13 bits) + static const UINT64 PIXEventsBlockEndMarker = 0x00000000000FFF80; + + //Bits 10-19 (10 bits) + static const UINT64 PIXEventsTypeReadMask = 0x00000000000FFC00; + static const UINT64 PIXEventsTypeWriteMask = 0x00000000000003FF; + static const UINT64 PIXEventsTypeBitShift = 10; + + //Bits 20-63 (44 bits) + static const UINT64 PIXEventsTimestampReadMask = 0xFFFFFFFFFFF00000; + static const UINT64 PIXEventsTimestampWriteMask = 0x00000FFFFFFFFFFF; + static const UINT64 PIXEventsTimestampBitShift = 20; + + inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType) + { + return ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | + (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift); + } + + //Bits 60-63 (4) + static const UINT64 PIXEventsStringAlignmentWriteMask = 0x000000000000000F; + static const UINT64 PIXEventsStringAlignmentReadMask = 0xF000000000000000; + static const UINT64 PIXEventsStringAlignmentBitShift = 60; + + //Bits 55-59 (5) + static const UINT64 PIXEventsStringCopyChunkSizeWriteMask = 0x000000000000001F; + static const UINT64 PIXEventsStringCopyChunkSizeReadMask = 0x0F80000000000000; + static const UINT64 PIXEventsStringCopyChunkSizeBitShift = 55; + + //Bit 54 + static const UINT64 PIXEventsStringIsANSIWriteMask = 0x0000000000000001; + static const UINT64 PIXEventsStringIsANSIReadMask = 0x0040000000000000; + static const UINT64 PIXEventsStringIsANSIBitShift = 54; + + //Bit 53 + static const UINT64 PIXEventsStringIsShortcutWriteMask = 0x0000000000000001; + static const UINT64 PIXEventsStringIsShortcutReadMask = 0x0020000000000000; + static const UINT64 PIXEventsStringIsShortcutBitShift = 53; + + inline UINT64 PIXEncodeStringInfo(UINT64 alignment, UINT64 copyChunkSize, BOOL isANSI, BOOL isShortcut) + { + return ((alignment & PIXEventsStringAlignmentWriteMask) << PIXEventsStringAlignmentBitShift) | + ((copyChunkSize & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | + (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift) | + (((UINT64)isShortcut & PIXEventsStringIsShortcutWriteMask) << PIXEventsStringIsShortcutBitShift); + } + + template + inline bool PIXIsPointerAligned(T* pointer) + { + return !(((UINT64)pointer) & (alignment - 1)); + } + + // Generic template version slower because of the additional clear write + template + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, T argument) + { + if (destination < limit) + { + *destination = 0ull; + *((T*)destination) = argument; + ++destination; + } + } + + // int32 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, INT32 argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } + } + + // unsigned int32 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT32 argument) + { + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } + } + + // int64 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, INT64 argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = argument; + ++destination; + } + } + + // unsigned int64 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT64 argument) + { + if (destination < limit) + { + *destination = argument; + ++destination; + } + } + + //floats must be cast to double during writing the data to be properly printed later when reading the data + //this is needed because when float is passed to varargs function it's cast to double + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, float argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } + } + + //char has to be cast to a longer signed integer type + //this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, char argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } + } + + //unsigned char has to be cast to a longer unsigned integer type + //this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, unsigned char argument) + { + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } + } + + //bool has to be cast to an integer since it's not explicitly supported by string format routines + //there's no format specifier for bool type, but it should work with integer format specifiers + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, bool argument) + { + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } + } + + inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) + { + *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); + while (destination < limit) + { + UINT64 c = static_cast(argument[0]); + if (!c) + { + *destination++ = 0; + return; + } + UINT64 x = c; + c = static_cast(argument[1]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 8; + c = static_cast(argument[2]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 16; + c = static_cast(argument[3]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 24; + c = static_cast(argument[4]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 32; + c = static_cast(argument[5]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 40; + c = static_cast(argument[6]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 48; + c = static_cast(argument[7]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 56; + *destination++ = x; + argument += 8; + } + } + + inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) + { +#if PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); + UINT64* source = (UINT64*)argument; + while (destination < limit) + { + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + if (!((qword & 0xFF00000000000000) && + (qword & 0xFF000000000000) && + (qword & 0xFF0000000000) && + (qword & 0xFF00000000) && + (qword & 0xFF000000) && + (qword & 0xFF0000) && + (qword & 0xFF00) && + (qword & 0xFF))) + { + break; + } + } + } + else +#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlowest(destination, limit, argument); + } + } + + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) + { + if (destination < limit) + { + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<16>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 16, TRUE, FALSE); + __m128i zero = _mm_setzero_si128(); + if (PIXIsPointerAligned<16>(destination)) + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_store_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi8(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 16; + } + } + else + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_storeu_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi8(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 16; + } + } + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } + } + } + + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) + { + PIXCopyEventArgument(destination, limit, (PCSTR)argument); + } + + inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) + { + *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); + while (destination < limit) + { + UINT64 c = static_cast(argument[0]); + if (!c) + { + *destination++ = 0; + return; + } + UINT64 x = c; + c = static_cast(argument[1]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 16; + c = static_cast(argument[2]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 32; + c = static_cast(argument[3]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 48; + *destination++ = x; + argument += 4; + } + } + + inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) + { +#if PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); + UINT64* source = (UINT64*)argument; + while (destination < limit) + { + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + //TODO: check if reversed condition is faster + if (!((qword & 0xFFFF000000000000) && + (qword & 0xFFFF00000000) && + (qword & 0xFFFF0000) && + (qword & 0xFFFF))) + { + break; + } + } + } + else +#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlowest(destination, limit, argument); + } + } + + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) + { + if (destination < limit) + { + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<16>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 16, FALSE, FALSE); + __m128i zero = _mm_setzero_si128(); + if (PIXIsPointerAligned<16>(destination)) + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_store_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi16(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 8; + } + } + else + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_storeu_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi16(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 8; + } + } + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } + } + } + + inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit) + { + // nothing + UNREFERENCED_PARAMETER(destination); + UNREFERENCED_PARAMETER(limit); + } + + template + void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) + { + PIXCopyEventArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); + } + + template + struct PIXEventTypeInferer + { + static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_VarArgs; } + static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_VarArgs; } + static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } + static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } + static constexpr PIXEventType End() { return PIXEvent_EndEvent; } + + // Xbox and Windows store different types of events for context events. + // On Xbox these include a context argument, while on Windows they do + // not. It is important not to change the event types used on the + // Windows version as there are OS components (eg debug layer & DRED) + // that decode event structs. +#ifdef PIX_XBOX + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent_OnContext; } +#else + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_VarArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_VarArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent; } +#endif + }; + + template<> + struct PIXEventTypeInferer<> + { + static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_NoArgs; } + static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_NoArgs; } + static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } + static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } + static constexpr PIXEventType End() { return PIXEvent_EndEvent; } + +#ifdef PIX_XBOX + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent_OnContext; } +#else + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_NoArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_NoArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent; } +#endif + }; + + + template + UINT64* EncodeBeginEventForContext(UINT64 (&buffer)[size], UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuBeginOnContext()); + *destination++ = color; + + PIXCopyEventArguments(destination, limit, formatString, args...); + *destination = 0ull; + + return destination; + } + + template + UINT64* EncodeSetMarkerForContext(UINT64 (&buffer)[size], UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuSetMarkerOnContext()); + *destination++ = color; + + PIXCopyEventArguments(destination, limit, formatString, args...); + *destination = 0ull; + + return destination; + } +} + +#endif //_PIXEventsLegacy_H_ diff --git a/packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3.h b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3.h similarity index 84% rename from packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3.h rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3.h index 9007765e..b13e8bc7 100644 --- a/packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3.h +++ b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3.h @@ -1,13 +1,6 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: pix3.h - * Content: PIX include file - * - ****************************************************************************/ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + #pragma once #ifndef _PIX3_H_ @@ -46,6 +39,7 @@ #define PIX_CAPTURE_SYSTEM_MONITOR_COUNTERS (1 << 6) #define PIX_CAPTURE_VIDEO (1 << 7) #define PIX_CAPTURE_AUDIO (1 << 8) +#define PIX_CAPTURE_GPU_TRACE (1 << 9) #define PIX_CAPTURE_RESERVED (1 << 15) union PIXCaptureParameters @@ -53,6 +47,8 @@ union PIXCaptureParameters enum PIXCaptureStorage { Memory = 0, + MemoryCircular = 1, // Xbox only + FileCircular = 2, // PC only }; struct GpuCaptureParameters @@ -77,8 +73,19 @@ union PIXCaptureParameters BOOL CaptureVirtualAllocEvents; BOOL CaptureHeapAllocEvents; BOOL CaptureXMemEvents; // Xbox only - BOOL CapturePixMemEvents; // Xbox only + BOOL CapturePixMemEvents; + BOOL CapturePageFaultEvents; + BOOL CaptureVideoFrames; // Xbox only } TimingCaptureParameters; + + struct GpuTraceParameters // Xbox Series and newer only + { + PWSTR FileName; + UINT32 MaximumToolingMemorySizeMb; + + BOOL CaptureGpuOccupancy; + + } GpuTraceParameters; }; typedef PIXCaptureParameters* PPIXCaptureParameters; @@ -89,6 +96,19 @@ typedef PIXCaptureParameters* PPIXCaptureParameters; #include "pix3_win.h" #endif +#if defined(XBOX) || defined(_XBOX_ONE) || defined(_DURANGO) || defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT) +#define PIX_XBOX +#if defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT) +#define PIX_GAMING_XBOX +#endif +#endif + +#if !defined(PIX_USE_GPU_MARKERS_V2) +#ifdef PIX_GAMING_XBOX +#define PIX_USE_GPU_MARKERS_V2 +#endif +#endif + #if defined(USE_PIX_SUPPORTED_ARCHITECTURE) && (defined(USE_PIX) || defined(USE_PIX_RETAIL)) #define PIX_EVENTS_ARE_TURNED_ON @@ -168,8 +188,8 @@ inline void PIXScopedEvent(void*, UINT64, _In_ PCWSTR, ...) {} // Use PIX_COLOR() to specify a particular color for an event. // Or, use PIX_COLOR_INDEX() to specify a set of unique event categories, and let PIX choose // the colors to represent each category. -inline UINT PIX_COLOR(BYTE r, BYTE g, BYTE b) { return 0xff000000 | (r << 16) | (g << 8) | b; } -inline UINT PIX_COLOR_INDEX(BYTE i) { return i; } -const UINT PIX_COLOR_DEFAULT = PIX_COLOR_INDEX(0); +inline UINT32 PIX_COLOR(UINT8 r, UINT8 g, UINT8 b) { return 0xff000000u | ((UINT32)r << 16) | ((UINT32)g << 8) | (UINT32)b; } +inline UINT8 PIX_COLOR_INDEX(UINT8 i) { return i; } +const UINT8 PIX_COLOR_DEFAULT = PIX_COLOR_INDEX(0); #endif // _PIX3_H_ diff --git a/packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3_win.h b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3_win.h similarity index 77% rename from packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3_win.h rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3_win.h index 2c7d0a53..9fd7baff 100644 --- a/packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3_win.h +++ b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3_win.h @@ -1,14 +1,6 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: PIX3_win.h - * Content: PIX include file - * Don't include this file directly - use pix3.h - * - ****************************************************************************/ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Don't include this file directly - use pix3.h #pragma once @@ -44,13 +36,19 @@ inline void PIXRecordMemoryFreeEvent(USHORT, void*, size_t, UINT64) {} #endif -// The following defines denote the different metadata values that have been used -// by tools to denote how to parse pix marker event data. The first two values -// are legacy values. +// The following WINPIX_EVENT_* defines denote the different metadata values that have +// been used by tools to denote how to parse pix marker event data. The first two values +// are legacy values used by pix.h in the Windows SDK. #define WINPIX_EVENT_UNICODE_VERSION 0 #define WINPIX_EVENT_ANSI_VERSION 1 + +// These values denote PIX marker event data that was created by the WinPixEventRuntime. +// In early 2023 we revised the PIX marker format and defined a new version number. #define WINPIX_EVENT_PIX3BLOB_VERSION 2 +#define WINPIX_EVENT_PIX3BLOB_V2 6345127 // A number that other applications are unlikely to have used before +// For backcompat reasons, the WinPixEventRuntime uses the older PIX3BLOB format when it passes data +// into the D3D12 runtime. It will be updated to use the V2 format in the future. #define D3D12_EVENT_METADATA WINPIX_EVENT_PIX3BLOB_VERSION __forceinline UINT64 PIXGetTimestampCounter() @@ -324,8 +322,6 @@ extern "C" __forceinline HRESULT WINAPI PIXBeginCapture2(DWORD captureFlags, _I extern "C" __forceinline HRESULT WINAPI PIXEndCapture(BOOL discard) { - UNREFERENCED_PARAMETER(discard); - // We can't tell if the user wants to end a GPU Capture or a Timing Capture. // The user shouldn't have both WinPixGpuCapturer and WinPixTimingCapturer loaded in the process though, // so we can just look for one of them and call it. @@ -436,4 +432,78 @@ __forceinline HINSTANCE WINAPI PIXOpenCaptureInUI(PCWSTR) #endif // USE_PIX_SUPPORTED_ARCHITECTURE || USE_PIX +#if defined(__d3d12_h__) + +inline void PIXInsertTimingMarkerOnContextForBeginEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForBeginEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForSetMarker(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForSetMarker(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForEndEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->EndEvent(); +} + +inline void PIXInsertTimingMarkerOnContextForEndEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->EndEvent(); +} + +inline void PIXInsertGPUMarkerOnContextForBeginEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForBeginEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForSetMarker(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForSetMarker(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForEndEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8, void*, UINT) +{ + commandList->EndEvent(); +} + +inline void PIXInsertGPUMarkerOnContextForEndEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8, void*, UINT) +{ + commandQueue->EndEvent(); +} + +#endif + #endif //_PIX3_WIN_H_ diff --git a/packages/WinPixEventRuntime.1.0.230302001/ThirdPartyNotices.txt b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/ThirdPartyNotices.txt similarity index 82% rename from packages/WinPixEventRuntime.1.0.230302001/ThirdPartyNotices.txt rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/ThirdPartyNotices.txt index 70b55bbb..45f4d538 100644 --- a/packages/WinPixEventRuntime.1.0.230302001/ThirdPartyNotices.txt +++ b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/ThirdPartyNotices.txt @@ -23,6 +23,10 @@ The Microsoft Program includes the following third-party software: 12. Newtonsoft.Json (https://www.newtonsoft.com/json) 13. WIX (https://wixtoolset.org/) 14. Moq (https://github.com/moq/moq) +15. FluentAssertions (https://github.com/fluentassertions/fluentassertions) +16. .NET Community Toolkit (https://github.com/CommunityToolkit/dotnet) +17. LiveCharts (https://lvcharts.com) +18. NVIDIA PIX Plugin As the recipient of the above third-party software, Microsoft sets forth a copy of the notices and other information below. @@ -133,7 +137,7 @@ AMD NOTICES AND INFORMATION BEGIN HERE ====================================== AMD copyrighted code (MIT) -Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved. +Copyright (c) 2017-2023 Advanced Micro Devices, Inc. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -444,6 +448,7 @@ purpose and non-infringement. END OF WIX NOTICES AND INFORMATION ================================= + MOQ NOTICES AND INFORMATION BEGIN HERE ====================================== MIT License @@ -470,3 +475,105 @@ SOFTWARE. END OF MOQ NOTICES AND INFORMATION ================================== + + +FLUENTASSERTIONS NOTICES AND INFORMATION BEGIN HERE +=================================================== +Copyright [2010-2021] [Dennis Doomen] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +END OF FLUENTASSERTIONS NOTICES AND INFORMATION +=============================================== + +.NET COMMUNITY TOOLKIT NOTICES AND INFORMATION BEGIN HERE +====================================== +MIT License + +Copyright © .NET Foundation and Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +END OF .NET COMMUNITY TOOLKIT NOTICES AND INFORMATION +================================== + +LIVE CHARTS NOTICES AND INFORMATION BEGIN HERE +====================================== +MIT License + +Copyright (c) 2021 Alberto Rodriguez Orozco + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +END OF LIVE CHARTS NOTICES AND INFORMATION +================================== + +NVIDIA PIX PLUGIN NOTICES AND INFORMATION BEGIN HERE +====================================== +Copyright (c) Microsoft Corporation. +Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +END OF NVIDIA PIX PLUGIN NOTICES AND INFORMATION +================================== \ No newline at end of file diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/WinPixEventRuntime.nuspec b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/WinPixEventRuntime.nuspec new file mode 100644 index 00000000..4623c3db --- /dev/null +++ b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/WinPixEventRuntime.nuspec @@ -0,0 +1,20 @@ + + + + WinPixEventRuntime + 1.0.240308001 + WinPixEventRuntime + Microsoft + pix,microsoft + false + license.txt + https://aka.ms/deprecateLicenseUrl + WinPixEventRuntimeIcon.png + https://devblogs.microsoft.com/pix/winpixeventruntime/ + http://www.gravatar.com/avatar/df362936893270e6a1b53807fa90e8fa + Allows applications to be instrumented with marker events, for use with Microsoft PIX. + https://devblogs.microsoft.com/pix/winpixeventruntime/ + © Microsoft Corporation. All rights reserved. + PIX Direct3D graphics 3D + + \ No newline at end of file diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/WinPixEventRuntimeIcon.png b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/WinPixEventRuntimeIcon.png similarity index 100% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/WinPixEventRuntimeIcon.png rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/WinPixEventRuntimeIcon.png diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/[Content_Types].xml b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/[Content_Types].xml new file mode 100644 index 00000000..5bbc7780 --- /dev/null +++ b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/[Content_Types].xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.lib b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime.lib similarity index 91% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.lib rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime.lib index fc17386b..04198a54 100644 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.lib and b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime.lib differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.dll b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.dll new file mode 100644 index 00000000..0c16945d Binary files /dev/null and b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.dll differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.lib b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.lib similarity index 91% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.lib rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.lib index 9b46fbb9..6dc8a054 100644 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.lib and b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.lib differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.lib b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime.lib similarity index 90% rename from packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.lib rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime.lib index d5628599..7a909a87 100644 Binary files a/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.lib and b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime.lib differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.dll b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.dll new file mode 100644 index 00000000..0b1226c0 Binary files /dev/null and b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.dll differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.lib b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.lib similarity index 91% rename from packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.lib rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.lib index e3f6f641..cc2156f7 100644 Binary files a/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.lib and b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.lib differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/build/WinPixEventRuntime.targets b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/build/WinPixEventRuntime.targets similarity index 100% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/build/WinPixEventRuntime.targets rename to GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/build/WinPixEventRuntime.targets diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/license.txt b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/license.txt new file mode 100644 index 00000000..63447fd8 --- /dev/null +++ b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.240308001/license.txt @@ -0,0 +1,21 @@ +Copyright (c) Microsoft Corporation. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.dll b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.dll index 0e2f75c5..5d86359d 100644 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.dll and b/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.dll differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/main.cpp b/GigiCompilerLib/Backends/DX12/templates/Application/main.cpp index 59ba5806..febcb251 100644 --- a/GigiCompilerLib/Backends/DX12/templates/Application/main.cpp +++ b/GigiCompilerLib/Backends/DX12/templates/Application/main.cpp @@ -21,16 +21,19 @@ #include #include -#ifdef _DEBUG -#define DX12_ENABLE_DEBUG_LAYER // Gigi Modification Begin -#define DX12_GPU_VALIDATION() false -#define DX12_BREAK_ON_WARN() false -#define DX12_BREAK_ON_CORRUPTION() true -#define DX12_BREAK_ON_ERROR() true +#ifdef _DEBUG + #define DX12_ENABLE_DEBUG_LAYER + #define DX12_GPU_VALIDATION() false + #define DX12_BREAK_ON_WARN() false + #define DX12_BREAK_ON_CORRUPTION() true + #define DX12_BREAK_ON_ERROR() true +#endif + #define MAKE_PIX_CAPTURE() false // if true, will emit a pix capture for every frame the unit tests run. + +static const unsigned int c_renderSize[2] = { 1024, 768 }; // Gigi Modification End -#endif #ifdef DX12_ENABLE_DEBUG_LAYER #include @@ -44,6 +47,7 @@ extern "C" { __declspec(dllexport) extern const char* D3D12SDKPath = ".\\Agility #include "DX12Utils/FileCache.h" #include "spdlog/spdlog.h" #include "DX12Utils/logfn.h" +#include "DX12Utils/Camera.h" static void LogFunction(LogLevel level, const char* msg, ...) { char buffer[4096]; @@ -161,6 +165,17 @@ void CopyTextureToTexture(ID3D12GraphicsCommandList* commandList, ID3D12Resource commandList->ResourceBarrier(barrierCount, barriers); } + // Trim the source box if needed, to be smaller or equal to the size of the destination resource + D3D12_RESOURCE_DESC srcDesc = srcResource->GetDesc(); + D3D12_RESOURCE_DESC destDesc = destResource->GetDesc(); + D3D12_BOX srcBox; + srcBox.left = 0; + srcBox.right = min(srcDesc.Width, destDesc.Width); + srcBox.top = 0; + srcBox.bottom = min(srcDesc.Height, destDesc.Height); + srcBox.front = 0; + srcBox.back = 1; + // Do the copy { D3D12_TEXTURE_COPY_LOCATION src = {}; @@ -173,7 +188,7 @@ void CopyTextureToTexture(ID3D12GraphicsCommandList* commandList, ID3D12Resource dest.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; src.SubresourceIndex = 0; - commandList->CopyTextureRegion(&dest, 0, 0, 0, &src, nullptr); + commandList->CopyTextureRegion(&dest, 0, 0, 0, &src, &srcBox); } // Transition from copy states @@ -237,6 +252,21 @@ static HANDLE g_hSwapChainWaitableObject = nullptr; static ID3D12Resource* g_mainRenderTargetResource[NUM_BACK_BUFFERS] = {}; static D3D12_CPU_DESCRIPTOR_HANDLE g_mainRenderTargetDescriptor[NUM_BACK_BUFFERS] = {}; +Camera g_camera; + +// first half of key states are this frame, second half are last frame +uint8_t g_keyStates[512] = {}; +uint8_t* g_keyStatesLastFrame = &g_keyStates[256]; + +// Mouse state is mouse x,y then left mouse down, right mouse down +float g_mouseState[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; +float g_mouseStateLastFrame[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + +float g_cameraPos[3] = { 0.0f, 0.0f, 0.0f }; +float g_cameraAltitudeAzimuth[2] = { 0.0f, 0.0f }; + +bool g_vsyncOn = true; + // Forward declarations of helper functions bool CreateDeviceD3D(HWND hWnd); void CleanupDeviceD3D(); @@ -267,7 +297,10 @@ int main(int, char**) //ImGui_ImplWin32_EnableDpiAwareness(); WNDCLASSEXW wc = { sizeof(wc), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(nullptr), nullptr, nullptr, nullptr, nullptr, L"ImGui Example", nullptr }; ::RegisterClassExW(&wc); - HWND hwnd = ::CreateWindowW(wc.lpszClassName, L"Dear ImGui DirectX12 Example", WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, nullptr, nullptr, wc.hInstance, nullptr); + + RECT windowSize = { 0, 0, (LONG)c_renderSize[0], (LONG)c_renderSize[1] }; + AdjustWindowRect(&windowSize, WS_OVERLAPPEDWINDOW, false); + HWND hwnd = ::CreateWindowW(wc.lpszClassName, L"/*$(Name)*/", WS_OVERLAPPEDWINDOW, 100, 100, windowSize.right - windowSize.left, windowSize.bottom - windowSize.top, nullptr, nullptr, wc.hInstance, nullptr); // Initialize Direct3D if (!CreateDeviceD3D(hwnd)) @@ -372,8 +405,42 @@ int main(int, char**) ImGui::NewFrame(); // Gigi Modification Begin - UI - if (m_/*$(Name)*/ && ImGui::CollapsingHeader("/*$(Name)*/")) + bool UIHovered = false; + if (m_/*$(Name)*/) + { + ImGui::Begin("/*$(Name)*/"); /*$(Name)*/::MakeUI(m_/*$(Name)*/, g_pd3dCommandQueue); + + ImGuiIO& io = ImGui::GetIO(); + ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); + + ImGui::Checkbox("VSync", &g_vsyncOn); + + ImGui::End(); + } + + // update key states + memcpy(g_keyStatesLastFrame, g_keyStates, 256); + if (!ImGui::GetIO().WantTextInput) + { + GetKeyboardState(g_keyStates); + for (int i = 0; i < 256; ++i) + g_keyStates[i] = (g_keyStates[i] & 128) != 0; + } + else + memset(g_keyStates, 0, 256); + + // update mouse state + if (!ImGui::GetIO().WantCaptureMouse) + { + ImVec2 mousePos = ImGui::GetMousePos(); + ImGuiIO& io = ImGui::GetIO(); + memcpy(g_mouseStateLastFrame, g_mouseState, sizeof(g_mouseState)); + g_mouseState[0] = mousePos.x; + g_mouseState[1] = mousePos.y; + g_mouseState[2] = io.MouseDown[0] ? 1.0f : 0.0f; + g_mouseState[3] = io.MouseDown[1] ? 1.0f : 0.0f; + } // Gigi Modification End // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). @@ -474,8 +541,7 @@ int main(int, char**) g_pd3dCommandQueue->ExecuteCommandLists(1, (ID3D12CommandList* const*)&g_pd3dCommandList); - g_pSwapChain->Present(1, 0); // Present with vsync - //g_pSwapChain->Present(0, 0); // Present without vsync + g_pSwapChain->Present(g_vsyncOn ? 1 : 0, 0); UINT64 fenceValue = g_fenceLastSignaledValue + 1; g_pd3dCommandQueue->Signal(g_fence, fenceValue); diff --git a/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/Camera.cpp b/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/Camera.cpp new file mode 100644 index 00000000..01f8e453 --- /dev/null +++ b/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/Camera.cpp @@ -0,0 +1,151 @@ +#include "Camera.h" + +#include +#include + +#define NOMINMAX +#define WIN32_LEAN_AND_MEAN +#include + +static const float c_pi = 3.14159265359f; + +void Camera::Update(const uint8_t g_keyStates[256], const float mouseState[4], const float mouseStateLastFrame[4], float frameTimeSeconds, float pos[3], float altitudeAzimuth[2], bool& cameraChanged) +{ + // To account for frame time + float movementMultiplier = frameTimeSeconds * 60.0f; + + // If the mouse is dragging, rotate the camera + if (mouseState[2] && mouseStateLastFrame[2]) + { + float dx = mouseStateLastFrame[0] - mouseState[0]; + float dy = mouseStateLastFrame[1] - mouseState[1]; + + dx *= movementMultiplier; + dy *= movementMultiplier; + + if (!m_leftHanded) + { + dx *= -1.0; + dy *= -1.0; + } + + altitudeAzimuth[0] += dy * m_mouseSensitivity; + altitudeAzimuth[0] = std::max(std::min(altitudeAzimuth[0], c_pi * 0.95f), -c_pi * 0.95f); + + altitudeAzimuth[1] += dx * m_mouseSensitivity; + if (altitudeAzimuth[1] < 0.0f) + altitudeAzimuth[1] += 2.0f * c_pi; + altitudeAzimuth[1] = std::fmodf(altitudeAzimuth[1], 2.0f * c_pi); + + cameraChanged |= (dx != 0.0f || dy != 0.0f); + } + + // Handle WASD + { + + DirectX::XMMATRIX viewMatrix = GetViewMatrix(pos, altitudeAzimuth); + + float left[3] = { viewMatrix.r[0].m128_f32[0] , viewMatrix.r[1].m128_f32[0] , viewMatrix.r[2].m128_f32[0] }; + float up[3] = { viewMatrix.r[0].m128_f32[1], viewMatrix.r[1].m128_f32[1], viewMatrix.r[2].m128_f32[1] }; + float fwd[3] = { viewMatrix.r[0].m128_f32[2], viewMatrix.r[1].m128_f32[2], viewMatrix.r[2].m128_f32[2] }; + + float flySpeed = m_flySpeed * movementMultiplier; + if (g_keyStates[VK_SHIFT]) + flySpeed *= 10; + else if (g_keyStates[VK_CONTROL]) + flySpeed /= 10; + + if (!m_leftHanded) + { + fwd[0] *= -1.0f; + fwd[1] *= -1.0f; + fwd[2] *= -1.0f; + } + + if (g_keyStates['W'] || g_keyStates[VK_UP]) + { + pos[0] += fwd[0] * flySpeed; + pos[1] += fwd[1] * flySpeed; + pos[2] += fwd[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['S'] || g_keyStates[VK_DOWN]) + { + pos[0] -= fwd[0] * flySpeed; + pos[1] -= fwd[1] * flySpeed; + pos[2] -= fwd[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['A'] || g_keyStates[VK_LEFT]) + { + pos[0] -= left[0] * flySpeed; + pos[1] -= left[1] * flySpeed; + pos[2] -= left[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['D'] || g_keyStates[VK_RIGHT]) + { + pos[0] += left[0] * flySpeed; + pos[1] += left[1] * flySpeed; + pos[2] += left[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['E'] || g_keyStates[VK_PRIOR]) + { + pos[0] += up[0] * flySpeed; + pos[1] += up[1] * flySpeed; + pos[2] += up[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['Q'] || g_keyStates[VK_NEXT]) + { + pos[0] -= up[0] * flySpeed; + pos[1] -= up[1] * flySpeed; + pos[2] -= up[2] * flySpeed; + cameraChanged = true; + } + } +} + +DirectX::XMMATRIX Camera::GetViewMatrix(const float pos[3], const float altitudeAzimuth[2]) const +{ + float altitude = altitudeAzimuth[0]; + float azimuth = altitudeAzimuth[1]; + DirectX::XMMATRIX rot = DirectX::XMMatrixRotationY(azimuth) * DirectX::XMMatrixRotationX(altitude); + return DirectX::XMMatrixTranslation(-pos[0], -pos[1], -pos[2]) * rot; +} + +DirectX::XMMATRIX Camera::GetProjMatrix(float fovDegrees, const float resolution[2], float nearZ, float farZ, bool reverseZ, bool perspective) const +{ + float fov = fovDegrees * c_pi / 180.0f; + + nearZ = std::max(nearZ, 0.001f); + farZ = std::max(farZ, 0.001f); + fov = std::max(fov, 0.001f); + + if (nearZ == farZ) + farZ = nearZ + 0.01f; + + if (reverseZ) + std::swap(nearZ, farZ); + + if (perspective) + { + if (m_leftHanded) + return DirectX::XMMatrixPerspectiveFovLH(fov, resolution[0] / resolution[1], nearZ, farZ); + else + return DirectX::XMMatrixPerspectiveFovRH(fov, resolution[0] / resolution[1], nearZ, farZ); + } + else + { + if (m_leftHanded) + return DirectX::XMMatrixOrthographicLH(resolution[0], resolution[1], nearZ, farZ); + else + return DirectX::XMMatrixOrthographicRH(resolution[0], resolution[1], nearZ, farZ); + } +} \ No newline at end of file diff --git a/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/Camera.h b/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/Camera.h new file mode 100644 index 00000000..2180c6eb --- /dev/null +++ b/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/Camera.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include + +class Camera +{ +public: + // key states are indexed by capitol letters 'A' and VK_ constants like VK_LEFT + // Mouse state is (mouseX, mouseY, leftButton, rightButton) + void Update(const uint8_t g_keyStates[256], const float mouseState[4], const float mouseStateLastFrame[4], float frameTimeSeconds, float pos[3], float altitudeAzimuth[2], bool& cameraChanged); + + DirectX::XMMATRIX GetViewMatrix(const float pos[3], const float altitudeAzimuth[2]) const; + DirectX::XMMATRIX GetProjMatrix(float fovDegrees, const float resolution[2], float nearZ, float farZ, bool reverseZ, bool perspective) const; + + float m_flySpeed = 1.0f; + bool m_leftHanded = false; + float m_mouseSensitivity = 1.0f; +}; diff --git a/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/dxutils.h b/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/dxutils.h index 3959fab7..188a4b7c 100644 --- a/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/dxutils.h +++ b/GigiCompilerLib/Backends/DX12/templates/Module/DX12Utils/dxutils.h @@ -372,6 +372,8 @@ namespace DX12Utils // Block compressed formats DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC7_UNORM, uint8_t, 4, false, false, false, 0, 1); DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC7_UNORM_SRGB, uint8_t, 4, true, false, false, 0, 1); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC6H_UF16, uint16_t, 3, false, false, false, 0, 1); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC6H_SF16, uint16_t, 3, false, false, false, 0, 1); default: { diff --git a/GigiCompilerLib/Backends/Shared.h b/GigiCompilerLib/Backends/Shared.h index 08969142..7d8767f2 100644 --- a/GigiCompilerLib/Backends/Shared.h +++ b/GigiCompilerLib/Backends/Shared.h @@ -542,6 +542,20 @@ inline bool ShaderResourceTypeIsReadOnly(ShaderResourceAccessType access) return false; } +inline bool AccessIsReadOnly(unsigned int accessedAs) +{ + for (unsigned int i = 0; i < (unsigned int)ShaderResourceAccessType::Count; ++i) + { + if ((accessedAs & (1 << i)) == 0) + continue; + + if (!ShaderResourceTypeIsReadOnly((ShaderResourceAccessType)i)) + return false; + } + + return true; +} + inline size_t DataFieldTypeToSize(DataFieldType type) { switch(type) diff --git a/GigiCompilerLib/GigiCompilerLib.vcxproj b/GigiCompilerLib/GigiCompilerLib.vcxproj index 638b9e48..633f2a87 100644 --- a/GigiCompilerLib/GigiCompilerLib.vcxproj +++ b/GigiCompilerLib/GigiCompilerLib.vcxproj @@ -144,6 +144,10 @@ true true + + true + true + true true @@ -330,6 +334,10 @@ true true + + true + true + true true diff --git a/GigiCompilerLib/GigiCompilerLib.vcxproj.filters b/GigiCompilerLib/GigiCompilerLib.vcxproj.filters index 0715c01d..3f7b5987 100644 --- a/GigiCompilerLib/GigiCompilerLib.vcxproj.filters +++ b/GigiCompilerLib/GigiCompilerLib.vcxproj.filters @@ -74,6 +74,9 @@ Backends\DX12\templates\Module\DX12Utils + + Backends\DX12\templates\Module\DX12Utils + @@ -380,6 +383,9 @@ Backends\DX12\templates\Module\DX12Utils + + Backends\DX12\templates\Module\DX12Utils + diff --git a/GigiCompilerLib/TupleCache.h b/GigiCompilerLib/TupleCache.h index 15ae49fc..969058c2 100644 --- a/GigiCompilerLib/TupleCache.h +++ b/GigiCompilerLib/TupleCache.h @@ -137,7 +137,14 @@ class TupleCache void ForEach(const LAMBDA& lambda) { for (auto& it : m_cache) - lambda(it.second); + lambda(it.first, it.second); + } + + template + void ForEach(const LAMBDA& lambda) const + { + for (const auto& it : m_cache) + lambda(it.first, it.second); } private: diff --git a/GigiCompilerLib/gigiinterpreter.h b/GigiCompilerLib/gigiinterpreter.h index 422081c3..e5fc8c46 100644 --- a/GigiCompilerLib/gigiinterpreter.h +++ b/GigiCompilerLib/gigiinterpreter.h @@ -939,6 +939,26 @@ class IGigiInterpreter } } + template + void RuntimeDataLambda(const LAMBDA& lambda) const + { + #include "external/df_serialize/_common.h" + #define VARIANT_TYPE(_TYPE, _NAME, _DEFAULT, _DESCRIPTION) \ + { \ + m_##_TYPE##_RuntimeData.ForEach( \ + [lambda](const auto& key, const auto& value) \ + { \ + lambda(key, value); \ + } \ + ); \ + } + + // clang-format off + #include "external/df_serialize/_fillunsetdefines.h" + #include "Schemas/RenderGraphNodesVariant.h" + // clang-format on + } + std::string GetTempDirectory() const { return m_tempDirectory; diff --git a/GigiViewerDX12/DX12Utils/Camera.cpp b/GigiViewerDX12/DX12Utils/Camera.cpp new file mode 100644 index 00000000..fe55b468 --- /dev/null +++ b/GigiViewerDX12/DX12Utils/Camera.cpp @@ -0,0 +1,156 @@ +/////////////////////////////////////////////////////////////////////////////// +// Gigi Rapid Graphics Prototyping and Code Generation Suite // +// Copyright (c) 2024 Electronic Arts Inc. All rights reserved. // +/////////////////////////////////////////////////////////////////////////////// + +#include "Camera.h" + +#include +#include + +#define NOMINMAX +#define WIN32_LEAN_AND_MEAN +#include + +static const float c_pi = 3.14159265359f; + +void Camera::Update(const uint8_t g_keyStates[256], const float mouseState[4], const float mouseStateLastFrame[4], float frameTimeSeconds, float pos[3], float altitudeAzimuth[2], bool& cameraChanged) +{ + // To account for frame time + float movementMultiplier = frameTimeSeconds * 60.0f; + + // If the mouse is dragging, rotate the camera + if (mouseState[2] && mouseStateLastFrame[2]) + { + float dx = mouseStateLastFrame[0] - mouseState[0]; + float dy = mouseStateLastFrame[1] - mouseState[1]; + + dx *= movementMultiplier; + dy *= movementMultiplier; + + if (!m_leftHanded) + { + dx *= -1.0; + dy *= -1.0; + } + + altitudeAzimuth[0] += dy * m_mouseSensitivity; + altitudeAzimuth[0] = std::max(std::min(altitudeAzimuth[0], c_pi * 0.95f), -c_pi * 0.95f); + + altitudeAzimuth[1] += dx * m_mouseSensitivity; + if (altitudeAzimuth[1] < 0.0f) + altitudeAzimuth[1] += 2.0f * c_pi; + altitudeAzimuth[1] = std::fmodf(altitudeAzimuth[1], 2.0f * c_pi); + + cameraChanged |= (dx != 0.0f || dy != 0.0f); + } + + // Handle WASD + { + + DirectX::XMMATRIX viewMatrix = GetViewMatrix(pos, altitudeAzimuth); + + float left[3] = { viewMatrix.r[0].m128_f32[0] , viewMatrix.r[1].m128_f32[0] , viewMatrix.r[2].m128_f32[0] }; + float up[3] = { viewMatrix.r[0].m128_f32[1], viewMatrix.r[1].m128_f32[1], viewMatrix.r[2].m128_f32[1] }; + float fwd[3] = { viewMatrix.r[0].m128_f32[2], viewMatrix.r[1].m128_f32[2], viewMatrix.r[2].m128_f32[2] }; + + float flySpeed = m_flySpeed * movementMultiplier; + if (g_keyStates[VK_SHIFT]) + flySpeed *= 10; + else if (g_keyStates[VK_CONTROL]) + flySpeed /= 10; + + if (!m_leftHanded) + { + fwd[0] *= -1.0f; + fwd[1] *= -1.0f; + fwd[2] *= -1.0f; + } + + if (g_keyStates['W'] || g_keyStates[VK_UP]) + { + pos[0] += fwd[0] * flySpeed; + pos[1] += fwd[1] * flySpeed; + pos[2] += fwd[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['S'] || g_keyStates[VK_DOWN]) + { + pos[0] -= fwd[0] * flySpeed; + pos[1] -= fwd[1] * flySpeed; + pos[2] -= fwd[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['A'] || g_keyStates[VK_LEFT]) + { + pos[0] -= left[0] * flySpeed; + pos[1] -= left[1] * flySpeed; + pos[2] -= left[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['D'] || g_keyStates[VK_RIGHT]) + { + pos[0] += left[0] * flySpeed; + pos[1] += left[1] * flySpeed; + pos[2] += left[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['E'] || g_keyStates[VK_PRIOR]) + { + pos[0] += up[0] * flySpeed; + pos[1] += up[1] * flySpeed; + pos[2] += up[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['Q'] || g_keyStates[VK_NEXT]) + { + pos[0] -= up[0] * flySpeed; + pos[1] -= up[1] * flySpeed; + pos[2] -= up[2] * flySpeed; + cameraChanged = true; + } + } +} + +DirectX::XMMATRIX Camera::GetViewMatrix(const float pos[3], const float altitudeAzimuth[2]) const +{ + float altitude = altitudeAzimuth[0]; + float azimuth = altitudeAzimuth[1]; + DirectX::XMMATRIX rot = DirectX::XMMatrixRotationY(azimuth) * DirectX::XMMatrixRotationX(altitude); + return DirectX::XMMatrixTranslation(-pos[0], -pos[1], -pos[2]) * rot; +} + +DirectX::XMMATRIX Camera::GetProjMatrix(float fovDegrees, const float resolution[2], float nearZ, float farZ, bool reverseZ, bool perspective) const +{ + float fov = fovDegrees * c_pi / 180.0f; + + nearZ = std::max(nearZ, 0.001f); + farZ = std::max(farZ, 0.001f); + fov = std::max(fov, 0.001f); + + if (nearZ == farZ) + farZ = nearZ + 0.01f; + + if (reverseZ) + std::swap(nearZ, farZ); + + if (perspective) + { + if (m_leftHanded) + return DirectX::XMMatrixPerspectiveFovLH(fov, resolution[0] / resolution[1], nearZ, farZ); + else + return DirectX::XMMatrixPerspectiveFovRH(fov, resolution[0] / resolution[1], nearZ, farZ); + } + else + { + if (m_leftHanded) + return DirectX::XMMatrixOrthographicLH(resolution[0], resolution[1], nearZ, farZ); + else + return DirectX::XMMatrixOrthographicRH(resolution[0], resolution[1], nearZ, farZ); + } +} \ No newline at end of file diff --git a/GigiViewerDX12/DX12Utils/Camera.h b/GigiViewerDX12/DX12Utils/Camera.h new file mode 100644 index 00000000..5f78ec7a --- /dev/null +++ b/GigiViewerDX12/DX12Utils/Camera.h @@ -0,0 +1,25 @@ +/////////////////////////////////////////////////////////////////////////////// +// Gigi Rapid Graphics Prototyping and Code Generation Suite // +// Copyright (c) 2024 Electronic Arts Inc. All rights reserved. // +/////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include +#include +#include + +class Camera +{ +public: + // key states are indexed by capitol letters 'A' and VK_ constants like VK_LEFT + // Mouse state is (mouseX, mouseY, leftButton, rightButton) + void Update(const uint8_t g_keyStates[256], const float mouseState[4], const float mouseStateLastFrame[4], float frameTimeSeconds, float pos[3], float altitudeAzimuth[2], bool& cameraChanged); + + DirectX::XMMATRIX GetViewMatrix(const float pos[3], const float altitudeAzimuth[2]) const; + DirectX::XMMATRIX GetProjMatrix(float fovDegrees, const float resolution[2], float nearZ, float farZ, bool reverseZ, bool perspective) const; + + float m_flySpeed = 1.0f; + bool m_leftHanded = false; + float m_mouseSensitivity = 1.0f; +}; diff --git a/GigiViewerDX12/DX12Utils/CompileShaders_dxc.cpp b/GigiViewerDX12/DX12Utils/CompileShaders_dxc.cpp index 3503413d..7a7f35b8 100644 --- a/GigiViewerDX12/DX12Utils/CompileShaders_dxc.cpp +++ b/GigiViewerDX12/DX12Utils/CompileShaders_dxc.cpp @@ -101,6 +101,9 @@ static IDxcBlob* CompileShaderToByteCode_Private( } std::vector arguments; + + arguments.push_back(fullFileName.c_str()); // 1st positional argument is the source file name + std::wstring entryPointW = ToWideString(entryPoint); std::wstring shaderModelW = ToWideString(shaderModel); diff --git a/GigiViewerDX12/DX12Utils/DescriptorTableCache.h b/GigiViewerDX12/DX12Utils/DescriptorTableCache.h index f9888cc7..7c9acdc7 100644 --- a/GigiViewerDX12/DX12Utils/DescriptorTableCache.h +++ b/GigiViewerDX12/DX12Utils/DescriptorTableCache.h @@ -12,6 +12,16 @@ class DescriptorTableCache { +public: + void Init(int numFramesInFlight) + { + assert(numFramesInFlight >= 2 + && numFramesInFlight <= 3 + && "Unexpected number of frames in flight. See the comment above the declaration of m_numFramesInFlight"); + + m_numFramesInFlight = numFramesInFlight; + } + public: enum class AccessType { @@ -242,7 +252,7 @@ class DescriptorTableCache for (auto& it : m_descriptorTableCache) { it.second.framesSinceUsed++; - if (it.second.framesSinceUsed >= c_unusedFramesRecycle) + if (it.second.framesSinceUsed >= m_numFramesInFlight) { heap.Free(it.second.m_srvHeapIndex, it.second.m_count); keysToRemove.push_back(it.first); @@ -304,8 +314,10 @@ class DescriptorTableCache }; private: - - static const int c_unusedFramesRecycle = 10; // After this many frames of not being used, a descriptor table will be released + // After this many frames of not being used, a descriptor table will be released. Set via Init(). + // Note: As we don't currently explicitly free descriptor tables when resource(s) are released, we must use the + // maximum number of frames in flight as our release age to keep this system in sync with everything else. + int m_numFramesInFlight = -1; // Maps hash to entry std::unordered_map m_descriptorTableCache; diff --git a/GigiViewerDX12/DX12Utils/TextureCache.cpp b/GigiViewerDX12/DX12Utils/TextureCache.cpp index 8b7fc474..a8891222 100644 --- a/GigiViewerDX12/DX12Utils/TextureCache.cpp +++ b/GigiViewerDX12/DX12Utils/TextureCache.cpp @@ -13,9 +13,8 @@ #define TINYEXR_IMPLEMENTATION #include "tinyexr/tinyexr.h" -#include - #include +#include "DirectXTex.h" TextureCache::Texture& TextureCache::Get(FileCache& fileCache, const char* fileName_) { @@ -33,6 +32,8 @@ TextureCache::Texture& TextureCache::Get(FileCache& fileCache, const char* fileN Texture newTexture; newTexture.fileName = fileName; + Texture failTexture = newTexture; + if (p.extension().string() == ".exr") { // 1. Read EXR version. @@ -53,13 +54,24 @@ TextureCache::Texture& TextureCache::Get(FileCache& fileCache, const char* fileN { newTexture.width = exr_image.width; newTexture.height = exr_image.height; - newTexture.channels = exr_image.num_channels; - newTexture.type = Type::F32; + + switch (exr_image.num_channels) + { + case 1: newTexture.format = DXGI_FORMAT_R32_FLOAT; break; + case 2: newTexture.format = DXGI_FORMAT_R32G32_FLOAT; break; + case 3: newTexture.format = DXGI_FORMAT_R32G32B32_FLOAT; break; + case 4: newTexture.format = DXGI_FORMAT_R32G32B32A32_FLOAT; break; + default: + { + m_cache[fileName] = failTexture; + return m_cache[fileName]; + } + } // find out what order to get the channels in int channelType = -1; - std::vector channelOrder(newTexture.channels); - for (int i = 0; i < newTexture.channels; ++i) + std::vector channelOrder(exr_image.num_channels); + for (int i = 0; i < exr_image.num_channels; ++i) { if (i == 0) { @@ -88,7 +100,10 @@ TextureCache::Texture& TextureCache::Get(FileCache& fileCache, const char* fileN // `exr_image.tiled` will be filled when EXR is tiled format. if (channelType == TINYEXR_PIXELTYPE_FLOAT || channelType == TINYEXR_PIXELTYPE_HALF) { - newTexture.pixels.resize(newTexture.width * newTexture.height * newTexture.channels * sizeof(float)); + newTexture.images.resize(1); + Image& newImage = newTexture.images[0]; + + newImage.pixels.resize(newTexture.width * newTexture.height * exr_image.num_channels * sizeof(float)); if (exr_image.images) { @@ -97,21 +112,21 @@ TextureCache::Texture& TextureCache::Get(FileCache& fileCache, const char* fileN case TINYEXR_PIXELTYPE_HALF: { uint16_t** channelPtrs = (uint16_t**)exr_image.images; - std::vector src(newTexture.channels); - for (int i = 0; i < newTexture.channels; ++i) + std::vector src(exr_image.num_channels); + for (int i = 0; i < exr_image.num_channels; ++i) src[i] = channelPtrs[i]; - float* dest = (float*)newTexture.pixels.data(); + float* dest = (float*)newImage.pixels.data(); for (int iy = 0; iy < newTexture.height; ++iy) { for (int ix = 0; ix < newTexture.width; ++ix) { - for (int channel = 0; channel < newTexture.channels; ++channel) + for (int channel = 0; channel < exr_image.num_channels; ++channel) { dest[channelOrder[channel]] = f16tof32(*src[channel]); src[channel]++; } - dest += newTexture.channels; + dest += exr_image.num_channels; } } break; @@ -119,21 +134,21 @@ TextureCache::Texture& TextureCache::Get(FileCache& fileCache, const char* fileN case TINYEXR_PIXELTYPE_FLOAT: { float** channelPtrs = (float**)exr_image.images; - std::vector src(newTexture.channels); - for (int i = 0; i < newTexture.channels; ++i) + std::vector src(exr_image.num_channels); + for (int i = 0; i < exr_image.num_channels; ++i) src[i] = channelPtrs[i]; - float* dest = (float*)newTexture.pixels.data(); + float* dest = (float*)newImage.pixels.data(); for (int iy = 0; iy < newTexture.height; ++iy) { for (int ix = 0; ix < newTexture.width; ++ix) { - for (int channel = 0; channel < newTexture.channels; ++channel) + for (int channel = 0; channel < exr_image.num_channels; ++channel) { dest[channelOrder[channel]] = *src[channel]; src[channel]++; } - dest += newTexture.channels; + dest += exr_image.num_channels; } } break; @@ -147,7 +162,6 @@ TextureCache::Texture& TextureCache::Get(FileCache& fileCache, const char* fileN { newTexture.width = 0; newTexture.height = 0; - newTexture.channels = 0; } // 4. Free image data @@ -167,41 +181,124 @@ TextureCache::Texture& TextureCache::Get(FileCache& fileCache, const char* fileN } else if (p.extension().string() == ".hdr") { - float* rawPixels = stbi_loadf_from_memory((const unsigned char*)fileData.GetBytes(), (int)fileData.GetSize(), &newTexture.width, &newTexture.height, &newTexture.channels, 0); + int numChannels = 0; + float* rawPixels = stbi_loadf_from_memory((const unsigned char*)fileData.GetBytes(), (int)fileData.GetSize(), &newTexture.width, &newTexture.height, &numChannels, 0); if (rawPixels) { - newTexture.type = Type::F32; - newTexture.pixels.resize(newTexture.width * newTexture.height * newTexture.channels * sizeof(float)); - memcpy(newTexture.pixels.data(), rawPixels, newTexture.pixels.size()); + switch (numChannels) + { + case 1: newTexture.format = DXGI_FORMAT_R32_FLOAT; break; + case 2: newTexture.format = DXGI_FORMAT_R32G32_FLOAT; break; + case 3: newTexture.format = DXGI_FORMAT_R32G32B32_FLOAT; break; + case 4: newTexture.format = DXGI_FORMAT_R32G32B32A32_FLOAT; break; + default: + { + m_cache[fileName] = failTexture; + return m_cache[fileName]; + } + } + + newTexture.images.resize(1); + Image& newImage = newTexture.images[0]; + + newImage.pixels.resize(newTexture.width * newTexture.height * numChannels * sizeof(float)); + memcpy(newImage.pixels.data(), rawPixels, newImage.pixels.size()); stbi_image_free(rawPixels); } } else if (p.extension().string() == ".dds") { - gli::texture texture = gli::load_dds(fileData.GetBytes(), fileData.GetSize()); + DirectX::TexMetadata metaData; + DirectX::ScratchImage scratchImage; - // Only supports 2d textures of this type for now - if (texture.target() == gli::texture::target_type::TARGET_2D && - texture.format() == gli::texture::format_type::FORMAT_RGBA_BP_UNORM_BLOCK16) + HRESULT hr = DirectX::LoadFromDDSMemory((const uint8_t*)fileData.GetBytes(), fileData.GetSize(), DirectX::DDS_FLAGS::DDS_FLAGS_NONE, &metaData, scratchImage); + if (SUCCEEDED(hr)) { - //gli::swizzles desiredSwizzle = {gli::swizzle::SWIZZLE_RED, gli::swizzle::SWIZZLE_GREEN, gli::swizzle::SWIZZLE_BLUE, gli::swizzle::SWIZZLE_ALPHA}; - //texture.swizzle(desiredSwizzle); - - newTexture.type = Type::BC7; - newTexture.pixels.resize(texture.size()); - memcpy(newTexture.pixels.data(), texture.data(), newTexture.pixels.size()); - newTexture.width = texture.extent().x; - newTexture.height = texture.extent().y; - newTexture.channels = 4; + // Get the image properties + newTexture.width = (int)metaData.width; + newTexture.height = (int)metaData.height; + newTexture.depth = metaData.IsVolumemap() ? (int)metaData.depth : (int)metaData.arraySize; + newTexture.mips = (int)metaData.mipLevels; + newTexture.format = metaData.format; + + newTexture.images.resize(scratchImage.GetImageCount()); + + int arrayCount = (int)metaData.arraySize; + int mipCount = (int)metaData.mipLevels; + int depthCount = (int)metaData.depth; + + int newImageIndex = -1; + for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + { + for (int mipIndex = 0; mipIndex < mipCount; ++mipIndex) + { + for (int z = 0; z < depthCount; ++z) + { + newImageIndex++; + Image& newImage = newTexture.images[newImageIndex]; + + const DirectX::Image* oldImage = scratchImage.GetImage(mipIndex, arrayIndex, z); + + newImage.pixels.resize(oldImage->slicePitch); + memcpy(newImage.pixels.data(), oldImage->pixels, oldImage->slicePitch); + } + + if (metaData.IsVolumemap()) + depthCount = std::max(depthCount / 2, 1); + } + } + + // Release the scratch image + scratchImage.Release(); } } else { - unsigned char* rawPixels = stbi_load_from_memory((const unsigned char*)fileData.GetBytes(), (int)fileData.GetSize(), &newTexture.width, &newTexture.height, &newTexture.channels, 0); + int numChannels = 0; + unsigned char* rawPixels = stbi_load_from_memory((const unsigned char*)fileData.GetBytes(), (int)fileData.GetSize(), &newTexture.width, &newTexture.height, &numChannels, 0); if (rawPixels) { - newTexture.pixels.resize(newTexture.width * newTexture.height * newTexture.channels); - memcpy(newTexture.pixels.data(), rawPixels, newTexture.pixels.size()); + // There are no 3 channel texture formats, but 3 channel image files are common. + // Promote it to 4 channels and fill alpha with 255 (1.0) + if (numChannels == 3) + { + numChannels = 4; + newTexture.format = DXGI_FORMAT_R8G8B8A8_UNORM; + + newTexture.images.resize(1); + Image& newImage = newTexture.images[0]; + + newImage.pixels.resize(newTexture.width* newTexture.height * numChannels); + + for (size_t i = 0; i < newTexture.width * newTexture.height; ++i) + { + newImage.pixels[i * 4 + 0] = rawPixels[i * 3 + 0]; + newImage.pixels[i * 4 + 1] = rawPixels[i * 3 + 1]; + newImage.pixels[i * 4 + 2] = rawPixels[i * 3 + 2]; + newImage.pixels[i * 4 + 3] = 255; + } + } + else + { + switch (numChannels) + { + case 1: newTexture.format = DXGI_FORMAT_R8_UNORM; break; + case 2: newTexture.format = DXGI_FORMAT_R8G8_UNORM; break; + case 4: newTexture.format = DXGI_FORMAT_R8G8B8A8_UNORM; break; + default: + { + m_cache[fileName] = failTexture; + return m_cache[fileName]; + } + } + + newTexture.images.resize(1); + Image& newImage = newTexture.images[0]; + + newImage.pixels.resize(newTexture.width * newTexture.height * numChannels); + memcpy(newImage.pixels.data(), rawPixels, newImage.pixels.size()); + } + stbi_image_free(rawPixels); } } @@ -211,4 +308,4 @@ TextureCache::Texture& TextureCache::Get(FileCache& fileCache, const char* fileN // return the entry for this file return m_cache[fileName]; -} \ No newline at end of file +} diff --git a/GigiViewerDX12/DX12Utils/TextureCache.h b/GigiViewerDX12/DX12Utils/TextureCache.h index 8a3d2853..5e13bf1b 100644 --- a/GigiViewerDX12/DX12Utils/TextureCache.h +++ b/GigiViewerDX12/DX12Utils/TextureCache.h @@ -10,29 +10,124 @@ #include #include "FileCache.h" +enum DXGI_FORMAT; + class TextureCache { public: - enum class Type + + // A texture may contain multiple images + struct Image { - U8, - F32, - BC7 + std::vector pixels; }; struct Texture { - bool Valid() - { - return pixels.size() > 0; - } - int width = 0; int height = 0; - int channels = 0; - Type type = Type::U8; - std::vector pixels; + int depth = 1; // Or array count + int mips = 1; + DXGI_FORMAT format = (DXGI_FORMAT)0; // DXGI_FORMAT_UNKNOWN std::string fileName; + + // Layout of image types: + // 2D - depth is 1. images.size() == mips. mip 0 then mip 1 then mip 2 etc. + // 3D - depth is variable. all slize of depth 0 as mip 0, then all slices of depth 1 as mip 1, etc. each mip has half as many slices of depth. + std::vector images; + + bool Valid() const + { + return images.size() > 0; + } + + size_t PixelCount() const + { + size_t ret = 0; + for (const Image& image : images) + ret += image.pixels.size(); + return ret; + } + + // Meant to be used with volume textures + void Ensure3D() + { + if (images.size() == mips) + return; + + int mipDepth = depth; + int destTextureIndex = 0; + int srcTextureIndex = 0; + for (int mipIndex = 0; mipIndex < mips; ++mipIndex) + { + for (int iz = 0; iz < mipDepth; ++iz) + { + if (srcTextureIndex != 0) + { + Image& src = images[srcTextureIndex]; + Image& dest = images[destTextureIndex]; + + size_t copyOffset = dest.pixels.size(); + size_t copySize = src.pixels.size(); + + dest.pixels.resize(copyOffset + copySize); + + memcpy(&dest.pixels[copyOffset], &src.pixels[0], copySize); + + src.pixels.clear(); + } + + srcTextureIndex++; + } + + mipDepth /= 2; + if (mipDepth < 1) + mipDepth = 1; + destTextureIndex++; + } + + images.resize(mips); + } + + // Meant to be used with 2d texture arrays (aka not volume textures) + template + bool SplitByIndex(const LAMBDA& lambda) const + { + if (depth == 1) + { + lambda(*this); + return true; + } + + Texture newTexture; + newTexture.width = width; + newTexture.height = height; + newTexture.mips = mips; + newTexture.format = format; + newTexture.fileName = fileName; + + newTexture.depth = 1; + newTexture.images.resize(newTexture.mips); + + int arrayCount = depth; + int mipCount = mips; + int depthCount = 1; + + for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + { + for (int mipIndex = 0; mipIndex < mipCount; ++mipIndex) + { + int srcImageIndex = mipIndex + arrayIndex * mipCount; + if (srcImageIndex >= images.size()) + return false; + newTexture.images[mipIndex] = images[srcImageIndex]; + } + + lambda(newTexture); + } + + return true; + } }; Texture& Get(FileCache& fileCache, const char* fileName); @@ -59,4 +154,4 @@ class TextureCache private: std::unordered_map m_cache; -}; \ No newline at end of file +}; diff --git a/GigiViewerDX12/DX12Utils/Utils.h b/GigiViewerDX12/DX12Utils/Utils.h index e9f98df4..b5e7c03f 100644 --- a/GigiViewerDX12/DX12Utils/Utils.h +++ b/GigiViewerDX12/DX12Utils/Utils.h @@ -52,7 +52,7 @@ struct DXGI_FORMAT_Info DXGI_FORMAT_Info() {} - DXGI_FORMAT_Info(DXGI_FORMAT _format, const char* _name, int _bytesPerChannel, int _channelCount, ChannelType _channelType, bool _sRGB, bool _isStencil, bool _isDepth, int _planeIndex, int _planeCount, NormType _normType, bool _isCompressed) + DXGI_FORMAT_Info(DXGI_FORMAT _format, const char* _name, int _bytesPerChannel, int _channelCount, ChannelType _channelType, bool _sRGB, bool _isStencil, bool _isDepth, int _planeIndex, int _planeCount, NormType _normType, bool _isCompressed, DXGI_FORMAT _decompressedFormat) { format = _format; name = _name; @@ -67,6 +67,7 @@ struct DXGI_FORMAT_Info planeCount = _planeCount; normType = _normType; isCompressed = _isCompressed; + decompressedFormat = _decompressedFormat; } DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; @@ -82,84 +83,99 @@ struct DXGI_FORMAT_Info int planeCount = 1; NormType normType = NormType::None; bool isCompressed = false; + DXGI_FORMAT decompressedFormat = DXGI_FORMAT_UNKNOWN; }; -#define DXGI_FORMAT_INFO(type, channelCount, sRGB) DXGI_FORMAT_Info(DXGI_FORMAT_UNKNOWN, "", sizeof(type), channelCount, DXGI_FORMAT_Info::ChannelType::_##type, sRGB, false, false, 0, 1, DXGI_FORMAT_Info::NormType::None, false) -#define DXGI_FORMAT_INFO_CASE(name, type, channelCount, sRGB, isStencil, isDepth, planeIndex, planeCount, normType, isCompressed) case name: return DXGI_FORMAT_Info(name, #name, sizeof(type), channelCount, DXGI_FORMAT_Info::ChannelType::_##type, sRGB, isStencil, isDepth, planeIndex, planeCount, DXGI_FORMAT_Info::NormType::##normType, isCompressed); +template +T Min(const T& A, const T& B) +{ + return A <= B ? A : B; +} + +template +T Max(const T& A, const T& B) +{ + return A > B ? A : B; +} + +#define DXGI_FORMAT_INFO(type, channelCount, sRGB) DXGI_FORMAT_Info(DXGI_FORMAT_UNKNOWN, "", sizeof(type), channelCount, DXGI_FORMAT_Info::ChannelType::_##type, sRGB, false, false, 0, 1, DXGI_FORMAT_Info::NormType::None, false, DXGI_FORMAT_UNKNOWN) +#define DXGI_FORMAT_INFO_CASE(name, type, channelCount, sRGB, isStencil, isDepth, planeIndex, planeCount, normType, isCompressed, decompressedFormat) case name: return DXGI_FORMAT_Info(name, #name, sizeof(type), channelCount, DXGI_FORMAT_Info::ChannelType::_##type, sRGB, isStencil, isDepth, planeIndex, planeCount, DXGI_FORMAT_Info::NormType::##normType, isCompressed, decompressedFormat); inline DXGI_FORMAT_Info Get_DXGI_FORMAT_Info(DXGI_FORMAT format) { switch (format) { // Unsigned integers - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8_UNORM, uint8_t, 1, false, false, false, 0, 1, UNorm, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8_UNORM, uint8_t, 2, false, false, false, 0, 1, UNorm, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_UNORM, uint8_t, 4, false, false, false, 0, 1, UNorm, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, uint8_t, 4, true, false, false, 0, 1, UNorm, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8_UNORM, uint8_t, 1, false, false, false, 0, 1, UNorm, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8_UNORM, uint8_t, 2, false, false, false, 0, 1, UNorm, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_UNORM, uint8_t, 4, false, false, false, 0, 1, UNorm, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, uint8_t, 4, true, false, false, 0, 1, UNorm, false, DXGI_FORMAT_UNKNOWN); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8_UINT, uint8_t, 1, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8_UINT, uint8_t, 2, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_UINT, uint8_t, 4, false, false, false, 0, 1, None, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8_UINT, uint8_t, 1, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8_UINT, uint8_t, 2, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_UINT, uint8_t, 4, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16_UINT, uint16_t, 1, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16_UNORM, uint16_t, 1, false, false, false, 0, 1, UNorm, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16_UINT, uint16_t, 2, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_UINT, uint16_t, 4, false, false, false, 0, 1, None, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16_UINT, uint16_t, 1, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16_UNORM, uint16_t, 1, false, false, false, 0, 1, UNorm, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16_UINT, uint16_t, 2, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_UINT, uint16_t, 4, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32_UINT, uint32_t, 1, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32_UINT, uint32_t, 2, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32_UINT, uint32_t, 3, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32A32_UINT, uint32_t, 4, false, false, false, 0, 1, None, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32_UINT, uint32_t, 1, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32_UINT, uint32_t, 2, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32_UINT, uint32_t, 3, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32A32_UINT, uint32_t, 4, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); // Signed integers - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8_SNORM, int8_t, 1, false, false, false, 0, 1, SNorm, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8_SNORM, int8_t, 2, false, false, false, 0, 1, SNorm, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_SNORM, int8_t, 4, false, false, false, 0, 1, SNorm, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8_SNORM, int8_t, 1, false, false, false, 0, 1, SNorm, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8_SNORM, int8_t, 2, false, false, false, 0, 1, SNorm, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_SNORM, int8_t, 4, false, false, false, 0, 1, SNorm, false, DXGI_FORMAT_UNKNOWN); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8_SINT, int8_t, 1, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8_SINT, int8_t, 2, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_SINT, int8_t, 4, false, false, false, 0, 1, None, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8_SINT, int8_t, 1, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8_SINT, int8_t, 2, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R8G8B8A8_SINT, int8_t, 4, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16_SINT, int16_t, 1, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16_SINT, int16_t, 2, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_SINT, int16_t, 4, false, false, false, 0, 1, None, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16_SINT, int16_t, 1, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16_SINT, int16_t, 2, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_SINT, int16_t, 4, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32_SINT, int32_t, 1, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32_SINT, int32_t, 2, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32_SINT, int32_t, 3, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32A32_SINT, int32_t, 4, false, false, false, 0, 1, None, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32_SINT, int32_t, 1, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32_SINT, int32_t, 2, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32_SINT, int32_t, 3, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32A32_SINT, int32_t, 4, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); // 16 bit - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16_FLOAT, half, 1, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16_FLOAT, half, 2, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_FLOAT, half, 4, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_UNORM, uint16_t, 4, false, false, false, 0, 1, UNorm, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_SNORM, int16_t, 4, false, false, false, 0, 1, SNorm, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16_FLOAT, half, 1, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16_FLOAT, half, 2, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_FLOAT, half, 4, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_UNORM, uint16_t, 4, false, false, false, 0, 1, UNorm, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R16G16B16A16_SNORM, int16_t, 4, false, false, false, 0, 1, SNorm, false, DXGI_FORMAT_UNKNOWN); // 32 bit float - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32_FLOAT, float, 1, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32_FLOAT, float, 2, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32_FLOAT, float, 3, false, false, false, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32A32_FLOAT, float, 4, false, false, false, 0, 1, None, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32_FLOAT, float, 1, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32_FLOAT, float, 2, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32_FLOAT, float, 3, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32G32B32A32_FLOAT, float, 4, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); // Other - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R11G11B10_FLOAT, uint32_t, 1, false, false, false, 0, 1, None, false); // Treat as 1 x u32 + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R11G11B10_FLOAT, uint32_t, 1, false, false, false, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); // Treat as 1 x u32 // Depth - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_D32_FLOAT, float, 1, false, false, true, 0, 1, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_D16_UNORM, uint16_t, 1, false, false, true, 0, 1, UNorm, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_D32_FLOAT, float, 1, false, false, true, 0, 1, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_D16_UNORM, uint16_t, 1, false, false, true, 0, 1, UNorm, false, DXGI_FORMAT_UNKNOWN); // Depth Stencil - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_D32_FLOAT_S8X24_UINT, uint32_t, 2, false, true, true, 0, 2, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, float, 1, false, true, true, 0, 2, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_X32_TYPELESS_G8X24_UINT, uint8_t, 1, false, true, true, 1, 2, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_D24_UNORM_S8_UINT, uint32_t, 1, false, true, true, 0, 2, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R24_UNORM_X8_TYPELESS, uint32_t, 1, false, true, true, 0, 2, None, false); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_X24_TYPELESS_G8_UINT, uint8_t, 1, false, true, true, 1, 2, None, false); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_D32_FLOAT_S8X24_UINT, uint32_t, 2, false, true, true, 0, 2, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, float, 1, false, true, true, 0, 2, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_X32_TYPELESS_G8X24_UINT, uint8_t, 1, false, true, true, 1, 2, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_D24_UNORM_S8_UINT, uint32_t, 1, false, true, true, 0, 2, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_R24_UNORM_X8_TYPELESS, uint32_t, 1, false, true, true, 0, 2, None, false, DXGI_FORMAT_UNKNOWN); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_X24_TYPELESS_G8_UINT, uint8_t, 1, false, true, true, 1, 2, None, false, DXGI_FORMAT_UNKNOWN); // Block compressed formats - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC7_UNORM, uint8_t, 4, false, false, false, 0, 1, UNorm, true); - DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC7_UNORM_SRGB, uint8_t, 4, true, false, false, 0, 1, UNorm, true); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC7_UNORM, uint8_t, 4, false, false, false, 0, 1, UNorm, true, DXGI_FORMAT_R8G8B8A8_UNORM); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC7_UNORM_SRGB, uint8_t, 4, true, false, false, 0, 1, UNorm, true, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC6H_UF16, float, 3, false, false, false, 0, 1, None, true, DXGI_FORMAT_R32G32B32_FLOAT); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC6H_SF16, float, 3, false, false, false, 0, 1, None, true, DXGI_FORMAT_R32G32B32_FLOAT); default: { @@ -169,6 +185,112 @@ inline DXGI_FORMAT_Info Get_DXGI_FORMAT_Info(DXGI_FORMAT format) } } +template +std::vector ConvertToDoubles(const std::vector& src, double multiplier) +{ + const size_t valueCount = src.size() / sizeof(T); + + std::vector ret(valueCount, 0); + + const T* srcValues = (const T*)src.data(); + for (size_t index = 0; index < valueCount; ++index) + ret[index] = multiplier * (double)srcValues[index]; + + return ret; +} + +template +std::vector ConvertToDoubles(const unsigned char* src, size_t valueCount, double multiplier) +{ + std::vector ret(valueCount, 0); + + const T* srcValues = (const T*)src; + for (size_t index = 0; index < valueCount; ++index) + ret[index] = multiplier * (double)srcValues[index]; + + return ret; +} + +inline bool ConvertToDoubles(const std::vector& src, DXGI_FORMAT_Info::ChannelType type, std::vector& doubles) +{ + switch (type) + { + case DXGI_FORMAT_Info::ChannelType::_uint8_t: doubles = ConvertToDoubles(src, 1.0 / 255.0); break; + case DXGI_FORMAT_Info::ChannelType::_uint16_t: doubles = ConvertToDoubles(src, 1.0 / 65535.0); break; + case DXGI_FORMAT_Info::ChannelType::_int16_t: doubles = ConvertToDoubles(src, 1.0 / 32767.0); break; + case DXGI_FORMAT_Info::ChannelType::_uint32_t: doubles = ConvertToDoubles(src, 1.0 / 4294967296.0); break; + case DXGI_FORMAT_Info::ChannelType::_half: doubles = ConvertToDoubles(src, 1.0); break; + case DXGI_FORMAT_Info::ChannelType::_float: doubles = ConvertToDoubles(src, 1.0); break; + default: return false; + } + return true; +} + +inline bool ConvertToDoubles(const unsigned char* src, size_t valueCount, DXGI_FORMAT_Info::ChannelType type, std::vector& doubles) +{ + switch (type) + { + case DXGI_FORMAT_Info::ChannelType::_uint8_t: doubles = ConvertToDoubles(src, valueCount, 1.0 / 255.0); break; + case DXGI_FORMAT_Info::ChannelType::_uint16_t: doubles = ConvertToDoubles(src, valueCount, 1.0 / 65535.0); break; + case DXGI_FORMAT_Info::ChannelType::_int16_t: doubles = ConvertToDoubles(src, valueCount, 1.0 / 32767.0); break; + case DXGI_FORMAT_Info::ChannelType::_uint32_t: doubles = ConvertToDoubles(src, valueCount, 1.0 / 4294967296.0); break; + case DXGI_FORMAT_Info::ChannelType::_half: doubles = ConvertToDoubles(src, valueCount, 1.0); break; + case DXGI_FORMAT_Info::ChannelType::_float: doubles = ConvertToDoubles(src, valueCount, 1.0); break; + default: return false; + } + return true; +} + +template +std::vector ConvertFromDoubles(const std::vector& src, double multiplier, double theMin, double theMax) +{ + const size_t valueCount = src.size(); + + std::vector ret(valueCount * sizeof(T), 0); + + T* destValues = (T*)ret.data(); + for (size_t index = 0; index < valueCount; ++index) + destValues[index] = (T)(Max(Min(src[index] * multiplier, theMax), theMin)); + + return ret; +} + +inline bool ConvertFromDoubles(const std::vector& doubles, DXGI_FORMAT_Info::ChannelType type, std::vector& dest) +{ + switch (type) + { + case DXGI_FORMAT_Info::ChannelType::_uint8_t: dest = ConvertFromDoubles(doubles, 256.0, 0.0, 255.0); break; + case DXGI_FORMAT_Info::ChannelType::_int8_t: dest = ConvertFromDoubles(doubles, 256.0, -128.0, 127.0); break; + case DXGI_FORMAT_Info::ChannelType::_int16_t: dest = ConvertFromDoubles(doubles, 65536.0, -32768.0, 32767.0); break; + case DXGI_FORMAT_Info::ChannelType::_uint16_t: dest = ConvertFromDoubles(doubles, 65536.0, 0.0, 65535.0); break; + case DXGI_FORMAT_Info::ChannelType::_uint32_t: dest = ConvertFromDoubles(doubles, 4294967296.0, 0.0, 4294967295.0); break; + case DXGI_FORMAT_Info::ChannelType::_half: dest = ConvertFromDoubles(doubles, 1.0, -65504.0, 65504.0); break; + case DXGI_FORMAT_Info::ChannelType::_float: dest = ConvertFromDoubles(doubles, 1.0, -FLT_MAX, FLT_MAX); break; + default: return false; + } + return true; +} + +inline bool ConvertFromDoubles(const std::vector& doubles, DXGI_FORMAT_Info::ChannelType type, unsigned char* dest) +{ + std::vector _dest; + switch (type) + { + case DXGI_FORMAT_Info::ChannelType::_uint8_t: _dest = ConvertFromDoubles(doubles, 256.0, 0.0, 255.0); break; + case DXGI_FORMAT_Info::ChannelType::_int8_t: _dest = ConvertFromDoubles(doubles, 256.0, -128.0, 127.0); break; + case DXGI_FORMAT_Info::ChannelType::_int16_t: _dest = ConvertFromDoubles(doubles, 65536.0, -32768.0, 32767.0); break; + case DXGI_FORMAT_Info::ChannelType::_uint16_t: _dest = ConvertFromDoubles(doubles, 65536.0, 0.0, 65535.0); break; + case DXGI_FORMAT_Info::ChannelType::_uint32_t: _dest = ConvertFromDoubles(doubles, 4294967296.0, 0.0, 4294967295.0); break; + case DXGI_FORMAT_Info::ChannelType::_half: _dest = ConvertFromDoubles(doubles, 1.0, -65504.0, 65504.0); break; + case DXGI_FORMAT_Info::ChannelType::_float: _dest = ConvertFromDoubles(doubles, 1.0, -FLT_MAX, FLT_MAX); break; + default: return false; + } + + memcpy(dest, _dest.data(), _dest.size()); + + return true; +} + inline bool FormatsCompatibleForCopyResource(DXGI_FORMAT a, DXGI_FORMAT b) { // This function needs to be expanded to handle all cases correctly. Maybe Get_DXGI_FORMAT_Info() can be used somehow. diff --git a/GigiViewerDX12/DX12Utils/sRGB.h b/GigiViewerDX12/DX12Utils/sRGB.h index 9b2f4c82..312b34f2 100644 --- a/GigiViewerDX12/DX12Utils/sRGB.h +++ b/GigiViewerDX12/DX12Utils/sRGB.h @@ -22,3 +22,17 @@ inline float LinearTosRGB(float color) float y = std::pow(color, 1.0f / 2.4f) * 1.055f - 0.055f; return color < 0.0031308f ? x : y; } + +inline double SRGBToLinear(double color) +{ + double x = color / 12.92; + double y = std::pow((color + 0.055) / 1.055, 2.4); + return color <= 0.04045 ? x : y; +} + +inline double LinearTosRGB(double color) +{ + double x = color * 12.92; + double y = std::pow(color, 1.0 / 2.4) * 1.055 - 0.055; + return color < 0.0031308 ? x : y; +} diff --git a/GigiViewerDX12/GigiViewerDX12.vcxproj b/GigiViewerDX12/GigiViewerDX12.vcxproj index 72fa69dc..69cc9481 100644 --- a/GigiViewerDX12/GigiViewerDX12.vcxproj +++ b/GigiViewerDX12/GigiViewerDX12.vcxproj @@ -45,11 +45,11 @@ - $(ProjectDir)python\Python310\include\;$(ProjectDir)imgui\;$(SolutionDir);$(SolutionDir)\external\nativefiledialog\src\include\;$(ProjectDir);$(SolutionDir)\external\gli\;$(SolutionDir)\external\glm\;$(IncludePath) + $(ProjectDir)python\Python310\include\;$(ProjectDir)imgui\;$(SolutionDir);$(SolutionDir)\external\nativefiledialog\src\include\;$(ProjectDir);$(SolutionDir)\external\gli\;$(SolutionDir)\external\glm\;$(SolutionDir)\external\DirectXTex\;$(IncludePath) $(SolutionDir) - $(ProjectDir)python\Python310\include\;$(ProjectDir)imgui\;$(SolutionDir);$(SolutionDir)\external\nativefiledialog\src\include\;$(ProjectDir);$(SolutionDir)\external\gli\;$(SolutionDir)\external\glm\;$(IncludePath) + $(ProjectDir)python\Python310\include\;$(ProjectDir)imgui\;$(SolutionDir);$(SolutionDir)\external\nativefiledialog\src\include\;$(ProjectDir);$(SolutionDir)\external\gli\;$(SolutionDir)\external\glm\;$(SolutionDir)\external\DirectXTex\;$(IncludePath) $(SolutionDir) @@ -93,14 +93,16 @@ - + + + @@ -134,13 +136,13 @@ - - + + @@ -159,6 +161,7 @@ + @@ -181,6 +184,9 @@ + + {371b9fa9-4c90-4ac6-a123-aced756d6c77} + {6a151f4e-efd3-4a58-a6f5-e07ed189a6f5} @@ -190,12 +196,12 @@ - + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + \ No newline at end of file diff --git a/GigiViewerDX12/GigiViewerDX12.vcxproj.filters b/GigiViewerDX12/GigiViewerDX12.vcxproj.filters index 54939c34..70c6d054 100644 --- a/GigiViewerDX12/GigiViewerDX12.vcxproj.filters +++ b/GigiViewerDX12/GigiViewerDX12.vcxproj.filters @@ -100,12 +100,14 @@ DX12Utils - - external\bc7enc - external\OpenFBX + + DX12Utils + + + @@ -135,12 +137,6 @@ {48c7e155-5828-48cc-8cae-7915a191ffe3} - - {1f1793cd-1a49-4b19-81f5-690cd19f3926} - - - {19dbad94-614b-4e65-a9f9-f0c7b149e72f} - @@ -237,15 +233,14 @@ external\imgui - - external\gli - - - external\bc7enc - external\OpenFBX + + DX12Utils + + + diff --git a/GigiViewerDX12/ImageReadback.cpp b/GigiViewerDX12/ImageReadback.cpp new file mode 100644 index 00000000..19dac010 --- /dev/null +++ b/GigiViewerDX12/ImageReadback.cpp @@ -0,0 +1,406 @@ +/////////////////////////////////////////////////////////////////////////////// +// Gigi Rapid Graphics Prototyping and Code Generation Suite // +// Copyright (c) 2024 Electronic Arts Inc. All rights reserved. // +/////////////////////////////////////////////////////////////////////////////// + +#include "ImageReadback.h" + +#include +#include "DirectXTex.h" + +#include "GigiAssert.h" +#include "Schemas/Types.h" +#include "DX12Utils/Utils.h" +#include "GigiCompilerLib/Backends/Shared.h" + +namespace ImageReadback +{ + static bool DecodeBCnPixel(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int x, int y, int z, int mipIndex, std::vector& pixel, DXGI_FORMAT& pixelFormat) + { + // Calculate the subresource that we care about + z = std::max(0, std::min(resourceOriginalDesc.DepthOrArraySize - 1, z)); + bool is3D = (resourceOriginalDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D); + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, is3D ? 0 : z, 0, resourceOriginalDesc.MipLevels, is3D ? 1 : resourceOriginalDesc.DepthOrArraySize); + + // Get information about the subresources + unsigned int numSubResources = is3D + ? resourceOriginalDesc.MipLevels + : resourceOriginalDesc.MipLevels * resourceOriginalDesc.DepthOrArraySize; + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + std::vector numRows(numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layouts = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + device->GetCopyableFootprints(&resourceOriginalDesc, 0, numSubResources, 0, layouts, numRows.data(), nullptr, nullptr); + + // Ensure params are in range + const D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layout = layouts[subresourceIndex]; + x = std::max(0, std::min(layout.Footprint.Width - 1, x)); + y = std::max(0, std::min(layout.Footprint.Height - 1, y)); + if (is3D) + z = std::max(0, std::min(layout.Footprint.Depth - 1, z)); + else + z = 0; + + // Calculate where the block is that we care about, so we can decompress just a single block + size_t blockOffset = 0; + size_t blockSize = 0; + { + size_t rowPitch = layout.Footprint.RowPitch; + size_t slicePitch = layout.Footprint.RowPitch * numRows[subresourceIndex]; + + blockSize = DirectX::BytesPerBlock(resourceOriginalDesc.Format); + size_t blockRowSize = rowPitch; + size_t blockOffsetX = x / 4; + size_t blockOffsetY = y / 4; + blockOffset = layout.Offset + z * slicePitch + blockOffsetY * blockRowSize + blockOffsetX * blockSize; + } + + // set up compressed image data + DirectX::Image compressedImages; + compressedImages.width = 4; + compressedImages.height = 4; + compressedImages.format = resourceOriginalDesc.Format; + HRESULT hr = DirectX::ComputePitch(compressedImages.format, compressedImages.width, compressedImages.height, compressedImages.rowPitch, compressedImages.slicePitch); + if (FAILED(hr)) + return false; + + // Map the block we care about + D3D12_RANGE readRange; + readRange.Begin = blockOffset; + readRange.End = blockOffset + blockSize; + uint8_t* readbackData = nullptr; + hr = readbackResource->Map(0, &readRange, (void**)&readbackData); + if (FAILED(hr)) + return false; + + // Decompress the block + compressedImages.pixels = &readbackData[blockOffset]; + DirectX::ScratchImage decompressedImages; + hr = DirectX::Decompress(compressedImages, DXGI_FORMAT_UNKNOWN, decompressedImages); + + // Unmap + D3D12_RANGE writeRange; + writeRange.Begin = 1; + writeRange.End = 0; + readbackResource->Unmap(0, &writeRange); + if (FAILED(hr)) + return false; + + // Copy the specific pixel we care about and return success + const DirectX::Image* decompressedImage = decompressedImages.GetImage(0, 0, 0); + pixelFormat = decompressedImages.GetMetadata().format; + size_t pixelBytes = DirectX::BitsPerPixel(pixelFormat) / 8; + pixel.resize(pixelBytes); + memcpy(pixel.data(), &decompressedImage->pixels[(y % 4) * decompressedImage->rowPitch + (x % 4) * pixelBytes], pixelBytes); + return true; + } + + static bool DecodeBCnImage(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, std::vector& pixels, DXGI_FORMAT& pixelFormat) + { + // Get information about the subresources + bool is3D = (resourceOriginalDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D); + unsigned int numSubResources = is3D + ? resourceOriginalDesc.MipLevels + : resourceOriginalDesc.MipLevels * resourceOriginalDesc.DepthOrArraySize; + std::vector layoutsMemSrc((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + std::vector numRowsAllSrc(numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layoutsSrc = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMemSrc.data(); + device->GetCopyableFootprints(&resourceOriginalDesc, 0, numSubResources, 0, layoutsSrc, numRowsAllSrc.data(), nullptr, nullptr); + + pixelFormat = GetDecodedFormat(resourceOriginalDesc.Format); + DXGI_FORMAT_Info pixelFormatInfo = Get_DXGI_FORMAT_Info(pixelFormat); + + std::vector layoutsMemDest((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layoutsDest = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMemDest.data(); + D3D12_RESOURCE_DESC decompressedDesc = resourceOriginalDesc; + decompressedDesc.Format = pixelFormat; + device->GetCopyableFootprints(&decompressedDesc, 0, numSubResources, 0, layoutsDest, nullptr, nullptr, nullptr); + + // Allocate memory for decoded image + { + // Count how much is needed + size_t decompressedPixelCount = 0; + for (size_t subResourceIndex = 0; subResourceIndex < numSubResources; ++subResourceIndex) + { + D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layoutDest = layoutsDest[subResourceIndex]; + decompressedPixelCount += layoutDest.Footprint.Width * layoutDest.Footprint.Height * layoutDest.Footprint.Depth; + } + + // Allocate + pixels.resize(decompressedPixelCount * pixelFormatInfo.bytesPerPixel); + } + + // Map the blocks + uint8_t* readbackData = nullptr; + HRESULT hr = readbackResource->Map(0, nullptr, (void**)&readbackData); + if (FAILED(hr)) + return false; + + // Decode each subresource + { + DirectX::Image compressedImages; + compressedImages.format = resourceOriginalDesc.Format; + + // For each subresource + unsigned char* dest = pixels.data(); + for (size_t subResourceIndex = 0; subResourceIndex < numSubResources; ++subResourceIndex) + { + // BC images may not match width / height of the decoded format due to the requirement of each block being 4x4. + // We can detect this when layoutSrc w/h doesn't match layoutDest w/h + // Dest w/h will be <= src w/h + D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layoutSrc = layoutsSrc[subResourceIndex]; + D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layoutDest = layoutsDest[subResourceIndex]; + unsigned int numRowsSrc = numRowsAllSrc[subResourceIndex]; + + compressedImages.width = layoutSrc.Footprint.Width; + compressedImages.height = layoutSrc.Footprint.Height; + compressedImages.rowPitch = layoutSrc.Footprint.RowPitch; + compressedImages.slicePitch = layoutSrc.Footprint.RowPitch * numRowsSrc; + + // For each slice + for (unsigned int z = 0; z < layoutSrc.Footprint.Depth; ++z) + { + compressedImages.pixels = &readbackData[layoutSrc.Offset + z * compressedImages.slicePitch]; + + DirectX::ScratchImage decompressedImages; + hr = DirectX::Decompress(compressedImages, pixelFormat, decompressedImages); + if (FAILED(hr)) + { + readbackResource->Unmap(0, nullptr); + return false; + } + + // Copy the decompressed data out, but only as much as we need, since we don't need to round to 4x4 blocks + const DirectX::Image* decompressedImage = decompressedImages.GetImage(0, 0, 0); + const unsigned char* src = decompressedImage->pixels; + + for (size_t iy = 0; iy < layoutDest.Footprint.Height; ++iy) + { + memcpy(dest, src, layoutDest.Footprint.Width * pixelFormatInfo.bytesPerPixel); + src += decompressedImage->rowPitch; + dest += layoutDest.Footprint.Width * pixelFormatInfo.bytesPerPixel; + } + } + } + } + + // Unmap and return success + D3D12_RANGE writeRange; + writeRange.Begin = 1; + writeRange.End = 0; + readbackResource->Unmap(0, &writeRange); + return true; + } + + bool GetDecodedPixel(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int x, int y, int z, int mipIndex, std::vector& pixel, DXGI_FORMAT& pixelFormat) + { + // If compressed, decode it + DXGI_FORMAT_Info formatInfo = Get_DXGI_FORMAT_Info(resourceOriginalDesc.Format); + if (formatInfo.isCompressed) + return DecodeBCnPixel(device, readbackResource, resourceOriginalDesc, x, y, z, mipIndex, pixel, pixelFormat); + + pixelFormat = resourceOriginalDesc.Format; + + // Calculate the subresource that we care about + z = std::max(0, std::min(resourceOriginalDesc.DepthOrArraySize - 1, z)); + bool is3D = (resourceOriginalDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D); + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, is3D ? 0 : z, 0, resourceOriginalDesc.MipLevels, is3D ? 1 : resourceOriginalDesc.DepthOrArraySize); + + // Get information about the subresources + unsigned int numSubResources = is3D + ? resourceOriginalDesc.MipLevels + : resourceOriginalDesc.MipLevels * resourceOriginalDesc.DepthOrArraySize; + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layouts = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + device->GetCopyableFootprints(&resourceOriginalDesc, 0, numSubResources, 0, layouts, nullptr, nullptr, nullptr); + + // Ensure params are in range + const D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layout = layouts[subresourceIndex]; + x = std::max(0, std::min(layout.Footprint.Width - 1, x)); + y = std::max(0, std::min(layout.Footprint.Height - 1, y)); + if (is3D) + z = std::max(0, std::min(layout.Footprint.Depth - 1, z)); + else + z = 0; + + // Map the memory + D3D12_RANGE readRange; + readRange.Begin = layout.Offset + y * layout.Footprint.RowPitch + x * formatInfo.bytesPerPixel + z * layout.Footprint.Height * layout.Footprint.RowPitch; + readRange.End = readRange.Begin + formatInfo.bytesPerPixel; + unsigned char* readbackData = nullptr; + HRESULT hr = readbackResource->Map(0, &readRange, (void**)&readbackData); + if (FAILED(hr)) + return false; + + // read back the single pixel we care about + pixel.resize(formatInfo.bytesPerPixel); + memcpy(pixel.data(), &readbackData[readRange.Begin], formatInfo.bytesPerPixel); + + // unmap and return success + D3D12_RANGE writeRange; + writeRange.Begin = 1; + writeRange.End = 0; + readbackResource->Unmap(0, &writeRange); + return true; + } + + bool GetDecodedImage(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, std::vector& pixels, DXGI_FORMAT& pixelFormat) + { + // If compressed, decode it + DXGI_FORMAT_Info formatInfo = Get_DXGI_FORMAT_Info(resourceOriginalDesc.Format); + if (formatInfo.isCompressed) + return DecodeBCnImage(device, readbackResource, resourceOriginalDesc, pixels, pixelFormat); + + pixelFormat = resourceOriginalDesc.Format; + + // Get the information about each sub resource + unsigned int numSubResources = (resourceOriginalDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? resourceOriginalDesc.MipLevels + : resourceOriginalDesc.MipLevels * resourceOriginalDesc.DepthOrArraySize; + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layouts = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + device->GetCopyableFootprints(&resourceOriginalDesc, 0, numSubResources, 0, layouts, nullptr, nullptr, nullptr); + + // Map the memory + unsigned char* readbackData = nullptr; + HRESULT hr = readbackResource->Map(0, nullptr, (void**)&readbackData); + if (FAILED(hr)) + return false; + + // Get the pixel data of each resource + pixels.resize(0); + size_t destOffset = 0; + for (unsigned int subResourceIndex = 0; subResourceIndex < numSubResources; ++subResourceIndex) + { + const D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layout = layouts[subResourceIndex]; + + int unalignedPitch = layout.Footprint.Width * formatInfo.bytesPerPixel; + + pixels.resize(pixels.size() + unalignedPitch * layout.Footprint.Height * layout.Footprint.Depth); + + for (unsigned int iz = 0; iz < layout.Footprint.Depth; ++iz) + { + for (unsigned int iy = 0; iy < layout.Footprint.Height; ++iy) + { + const unsigned char* src = &readbackData[layout.Offset + iy * layout.Footprint.RowPitch + iz * layout.Footprint.Height * layout.Footprint.RowPitch]; + unsigned char* dest = &pixels[destOffset]; + memcpy(dest, src, unalignedPitch); + destOffset += unalignedPitch; + } + } + } + + // unmap and return success + D3D12_RANGE writeRange; + writeRange.Begin = 1; + writeRange.End = 0; + readbackResource->Unmap(0, &writeRange); + return true; + } + + bool GetDecodedImageSlice(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int chosenZIndex, int chosenMipIndex, std::vector& pixels, DXGI_FORMAT& pixelFormat, int& width, int& height) + { + // TODO: in the future, this should only decode the specific slice asked for. Lots less processing, memory allocation, and memory copies. + // Decode the full image + std::vector decodedPixels; + if (!GetDecodedImage(device, readbackResource, resourceOriginalDesc, decodedPixels, pixelFormat)) + return false; + + // Get information about the subresources + bool is3D = (resourceOriginalDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D); + unsigned int numSubResources = is3D + ? resourceOriginalDesc.MipLevels + : resourceOriginalDesc.MipLevels * resourceOriginalDesc.DepthOrArraySize; + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layouts = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + D3D12_RESOURCE_DESC decodedDesc = resourceOriginalDesc; + decodedDesc.Format = pixelFormat; + device->GetCopyableFootprints(&decodedDesc, 0, numSubResources, 0, layouts, nullptr, nullptr, nullptr); + + // Gather image information + int arrayCount = is3D ? 1 : resourceOriginalDesc.DepthOrArraySize; + int mipCount = resourceOriginalDesc.MipLevels; + DXGI_FORMAT_Info decodedFormatInfo = Get_DXGI_FORMAT_Info(pixelFormat); + + // for each array index + unsigned char* src = decodedPixels.data(); + for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + { + // for each mip index + for (int mipIndex = 0; mipIndex < mipCount; ++mipIndex) + { + int zCount = 1; + if (is3D) + { + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + zCount = layouts[subresourceIndex].Footprint.Depth; + } + + for (int zIndex = 0; zIndex < zCount; ++zIndex) + { + // Get the information about this subresource + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layout = layouts[subresourceIndex]; + + // Figure out if we should save this one + bool thisIsTheOne = false; + if (is3D) + thisIsTheOne = (mipIndex == chosenMipIndex && zIndex == chosenZIndex); + else + thisIsTheOne = (mipIndex == chosenMipIndex && arrayIndex == chosenZIndex); + + // If this is the slice we want, send it back + if (thisIsTheOne) + { + width = layout.Footprint.Width; + height = layout.Footprint.Height; + + pixels.resize(width * height * decodedFormatInfo.bytesPerPixel); + memcpy(pixels.data(), src, pixels.size()); + + return true; + } + + // Move past this subresource + src += layout.Footprint.Width * layout.Footprint.Height * decodedFormatInfo.bytesPerPixel; + } + } + } + + return false; + } + + bool GetDecodedImageSliceAllDepths(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int chosenZIndex, int chosenMipIndex, std::vector& pixels, DXGI_FORMAT& pixelFormat, int& width, int& height, int& depth) + { + if (resourceOriginalDesc.Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D) + { + depth = 1; + return GetDecodedImageSlice(device, readbackResource, resourceOriginalDesc, chosenZIndex, chosenMipIndex, pixels, pixelFormat, width, height); + } + + depth = resourceOriginalDesc.DepthOrArraySize; + for (int i = 0; i < chosenMipIndex; ++i) + depth = std::max(depth / 2, 1); + + pixels.resize(0); + std::vector pixelsSlice; + for (int i = 0; i < depth; ++i) + { + if (!GetDecodedImageSlice(device, readbackResource, resourceOriginalDesc, i, chosenMipIndex, pixelsSlice, pixelFormat, width, height)) + return false; + + size_t copyOffset = pixels.size(); + size_t copySize = pixelsSlice.size(); + pixels.resize(copyOffset + copySize); + memcpy(&pixels[copyOffset], pixelsSlice.data(), copySize); + } + + return true; + } + + DXGI_FORMAT GetDecodedFormat(DXGI_FORMAT format) + { + DXGI_FORMAT_Info formatInfo = Get_DXGI_FORMAT_Info(format); + return formatInfo.isCompressed ? formatInfo.decompressedFormat : format; + } + +}; // namespace ImageReadback diff --git a/GigiViewerDX12/ImageReadback.h b/GigiViewerDX12/ImageReadback.h new file mode 100644 index 00000000..45f366be --- /dev/null +++ b/GigiViewerDX12/ImageReadback.h @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////// +// Gigi Rapid Graphics Prototyping and Code Generation Suite // +// Copyright (c) 2024 Electronic Arts Inc. All rights reserved. // +/////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#define NOMINMAX +#include + +#include + +namespace ImageReadback +{ + bool GetDecodedPixel(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int x, int y, int z, int mipIndex, std::vector& pixel, DXGI_FORMAT& pixelFormat); + + bool GetDecodedImage(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, std::vector& pixels, DXGI_FORMAT& pixelFormat); + + bool GetDecodedImageSlice(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int chosenZIndex, int chosenMipIndex, std::vector& pixels, DXGI_FORMAT& pixelFormat, int& width, int& height); + + bool GetDecodedImageSliceAllDepths(ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int chosenZIndex, int chosenMipIndex, std::vector& pixels, DXGI_FORMAT& pixelFormat, int& width, int& height, int& depth); + + DXGI_FORMAT GetDecodedFormat(DXGI_FORMAT format); +}; diff --git a/GigiViewerDX12/ImageSave.cpp b/GigiViewerDX12/ImageSave.cpp new file mode 100644 index 00000000..e23022e7 --- /dev/null +++ b/GigiViewerDX12/ImageSave.cpp @@ -0,0 +1,615 @@ +/////////////////////////////////////////////////////////////////////////////// +// Gigi Rapid Graphics Prototyping and Code Generation Suite // +// Copyright (c) 2024 Electronic Arts Inc. All rights reserved. // +/////////////////////////////////////////////////////////////////////////////// + +#define _CRT_SECURE_NO_WARNINGS // for stbi_image_write + +#include "ImageSave.h" + +#include "ImageReadback.h" + +#include + +#define STB_IMAGE_WRITE_IMPLEMENTATION +#include "stb/stb_image_write.h" + +#include "GigiAssert.h" +#include "Schemas/Types.h" +#include "DX12Utils/Utils.h" +#include "GigiCompilerLib/Backends/Shared.h" + +#include "tinyexr/tinyexr.h" + +#include "DirectXTex.h" +#include + +namespace ImageSave +{ + template + static bool ProcessResource(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options, const char* extension, const LAMBDA& lambda) + { + // Get the pixel data + DXGI_FORMAT decodedFormat; + std::vector decodedPixels; + if (!ImageReadback::GetDecodedImage(device, readbackResource, resourceOriginalDesc, decodedPixels, decodedFormat)) + return false; + DXGI_FORMAT_Info decodedFormatInfo = Get_DXGI_FORMAT_Info(decodedFormat); + + // Get information about the subresources + bool is3D = (resourceOriginalDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D); + unsigned int numSubResources = is3D + ? resourceOriginalDesc.MipLevels + : resourceOriginalDesc.MipLevels * resourceOriginalDesc.DepthOrArraySize; + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layouts = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + D3D12_RESOURCE_DESC decodedDesc = resourceOriginalDesc; + decodedDesc.Format = decodedFormat; + device->GetCopyableFootprints(&decodedDesc, 0, numSubResources, 0, layouts, nullptr, nullptr, nullptr); + + int arrayCount = is3D ? 1 : resourceOriginalDesc.DepthOrArraySize; + int mipCount = resourceOriginalDesc.MipLevels; + + // for each array index + unsigned char* src = decodedPixels.data(); + for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + { + // for each mip index + for (int mipIndex = 0; mipIndex < mipCount; ++mipIndex) + { + int zCount = 1; + if (is3D) + { + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + zCount = layouts[subresourceIndex].Footprint.Depth; + } + + for (int zIndex = 0; zIndex < zCount; ++zIndex) + { + // Make the filename + std::filesystem::path p(fileName); + if (options.saveAll) + { + static const char* c_cubeMapNames[] = + { + "Right", + "Left", + "Up", + "Down", + "Front", + "Back" + }; + + char numberedExtension[256]; + if (is3D) + sprintf_s(numberedExtension, ".mip%i.slice%i%s", mipIndex, zIndex, extension); + else if (options.isCubeMap) + sprintf_s(numberedExtension, ".%s.mip%i%s", c_cubeMapNames[arrayIndex], mipIndex, extension); + else + sprintf_s(numberedExtension, ".index%i.mip%i%s", arrayIndex, mipIndex, extension); + p.replace_extension(numberedExtension); + } + else + { + p.replace_extension(extension); + } + + // Get the information about this subresource + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layout = layouts[subresourceIndex]; + + // Figure out if we should save this one + bool shouldSave = options.saveAll; + if (is3D) + shouldSave |= (mipIndex == options.mipIndex && zIndex == options.zIndex); + else + shouldSave |= (mipIndex == options.mipIndex && arrayIndex == options.zIndex); + + // save the image if we should + if (shouldSave) + { + if (!lambda(p.string().c_str(), p.wstring().c_str(), layout.Footprint.Width, layout.Footprint.Height, decodedFormatInfo.channelCount, decodedFormatInfo, options, src)) + return false; + + if (!options.saveAll) + return true; + } + + // Move past this subresource + src += layout.Footprint.Width * layout.Footprint.Height * decodedFormatInfo.bytesPerPixel; + } + } + } + + return true; + } + + bool SaveAsPng(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options) + { + return ProcessResource(fileName, device, readbackResource, resourceOriginalDesc, options, ".png", + [] (const char* fileName, const wchar_t* fileNameW, int width, int height, int channelCount, const DXGI_FORMAT_Info& decodedFormatInfo, const Options& options, const unsigned char* pixels) + { + // Verify the pixel data is appropriate for this file type + if (decodedFormatInfo.channelType != DXGI_FORMAT_Info::ChannelType::_uint8_t) + return false; + + return stbi_write_png(fileName, width, height, channelCount, pixels, 0) != 0; + } + ); + } + + bool SaveAsCSV(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options) + { + return ProcessResource(fileName, device, readbackResource, resourceOriginalDesc, options, ".csv", + [](const char* fileName, const wchar_t* fileNameW, int width, int height, int channelCount, const DXGI_FORMAT_Info& decodedFormatInfo, const Options& options, const unsigned char* pixels) + { + FILE* file = nullptr; + fopen_s(&file, fileName, "wb"); + + static const char c_channelNames[] = { 'R', 'G', 'B', 'A' }; + for (int i = 0; i < decodedFormatInfo.channelCount; ++i) + fprintf(file, "%s\"%c\"", (i > 0 ? "," : ""), c_channelNames[i]); + fprintf(file, "\n"); + + switch (decodedFormatInfo.channelType) + { + case DXGI_FORMAT_Info::ChannelType::_uint8_t: + { + const unsigned char* src = pixels; + for (int i = 0; i < width * height; ++i) + { + for (int c = 0; c < decodedFormatInfo.channelCount; ++c) + { + fprintf(file, "%s\"%u\"", (c > 0 ? "," : ""), (unsigned int)*src); + src++; + } + fprintf(file, "\n"); + } + break; + } + case DXGI_FORMAT_Info::ChannelType::_float: + { + for (int i = 0; i < width * height; ++i) + { + const float* src = (float*)pixels; + for (int c = 0; c < decodedFormatInfo.channelCount; ++c) + { + fprintf(file, "%s\"%f\"", (c > 0 ? "," : ""), *src); + src++; + } + fprintf(file, "\n"); + } + break; + } + default: + { + return false; + } + } + + fclose(file); + + return true; + } + ); + } + + bool SaveAsHDR(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options) + { + return ProcessResource(fileName, device, readbackResource, resourceOriginalDesc, options, ".hdr", + [](const char* fileName, const wchar_t* fileNameW, int width, int height, int channelCount, const DXGI_FORMAT_Info& decodedFormatInfo, const Options& options, const unsigned char* pixels) + { + // Verify the pixel data is appropriate for this file type + if (decodedFormatInfo.channelType != DXGI_FORMAT_Info::ChannelType::_float) + return false; + + return stbi_write_hdr(fileName, width, height, channelCount, (float*)pixels) != 0; + } + ); + } + + bool SaveAsEXR(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options) + { + return ProcessResource(fileName, device, readbackResource, resourceOriginalDesc, options, ".exr", + [](const char* fileName, const wchar_t* fileNameW, int width, int height, int channelCount, const DXGI_FORMAT_Info& decodedFormatInfo, const Options& options, const unsigned char* pixels_) + { + // Verify the pixel data is appropriate for this file type + if (decodedFormatInfo.channelType != DXGI_FORMAT_Info::ChannelType::_float) + return false; + + EXRHeader header; + InitEXRHeader(&header); + + EXRImage image; + InitEXRImage(&image); + + int numChannels = channelCount; + const float* pixels = (const float*)pixels_; + + image.num_channels = numChannels; + + std::vector> images; + images.resize(numChannels); + for (std::vector& v : images) + v.resize(width * height); + + // Split interleaved channels into separate channels + for (int i = 0; i < width * height; i++) + { + for (int j = 0; j < numChannels; ++j) + images[j][i] = pixels[numChannels * i + j]; + } + + // put the RGBA channels into ABGR because most EXR viewers expect this + std::vector image_ptr(numChannels); + for (int i = 0; i < numChannels; ++i) + image_ptr[i] = images[numChannels - i - 1].data(); + + image.images = (unsigned char**)image_ptr.data(); + image.width = width; + image.height = height; + + // Must be (A)BGR order, since most of EXR viewers expect this channel order. + const char* chanelNames[4] = { "R", "G", "B", "A" }; + header.num_channels = numChannels; + header.channels = (EXRChannelInfo*)malloc(sizeof(EXRChannelInfo) * header.num_channels); + for (int i = 0; i < numChannels; ++i) + { + char buffer[256]; + const char* channelName; + if (i < 4) + { + channelName = chanelNames[numChannels - i - 1]; + } + else + { + sprintf(buffer, "X%i", i - 4); + channelName = buffer; + } + strncpy(header.channels[i].name, channelName, 255); header.channels[0].name[strlen(channelName)] = '\0'; + } + + header.pixel_types = (int*)malloc(sizeof(int) * header.num_channels); + header.requested_pixel_types = (int*)malloc(sizeof(int) * header.num_channels); + for (int i = 0; i < header.num_channels; i++) { + header.pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT; // pixel type of input image + header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT;// TINYEXR_PIXELTYPE_HALF; // pixel type of output image to be stored in .EXR + } + + const char* err = NULL; // or nullptr in C++11 or later. + int ret = SaveEXRImageToFile(&image, &header, fileName, &err); + if (ret != TINYEXR_SUCCESS) { + //fprintf(stderr, "Save EXR err: %s\n", err); + FreeEXRErrorMessage(err); // free's buffer for an error message + return false; + } + //printf("Saved exr file. [ %s ] \n", outfilename); + + //free(pixels); + + free(header.channels); + free(header.pixel_types); + free(header.requested_pixel_types); + + return true; + } + ); + } + + bool SaveAsDDS_BC6(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options) + { + // Get the pixel data + DXGI_FORMAT decodedFormat; + std::vector decodedPixels; + if (!ImageReadback::GetDecodedImage(device, readbackResource, resourceOriginalDesc, decodedPixels, decodedFormat)) + return false; + + // Verify the pixel data is appropriate for this file type + DXGI_FORMAT_Info decodedFormatInfo = Get_DXGI_FORMAT_Info(decodedFormat); + if (decodedFormatInfo.channelType != DXGI_FORMAT_Info::ChannelType::_float) + return false; + + // Get information about the subresources + bool is3D = (resourceOriginalDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D); + unsigned int numSlices = resourceOriginalDesc.MipLevels * resourceOriginalDesc.DepthOrArraySize; + unsigned int numSubResources = is3D ? resourceOriginalDesc.MipLevels : numSlices; + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layouts = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + D3D12_RESOURCE_DESC decodedDesc = resourceOriginalDesc; + decodedDesc.Format = decodedFormat; + device->GetCopyableFootprints(&decodedDesc, 0, numSubResources, 0, layouts, nullptr, nullptr, nullptr); + + int arrayCount = is3D ? 1 : resourceOriginalDesc.DepthOrArraySize; + int mipCount = resourceOriginalDesc.MipLevels; + + // for each array index + std::vector images(options.saveAll ? numSlices : 1); + unsigned char* src = decodedPixels.data(); + int imageIndex = 0; + for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + { + // for each mip index + for (int mipIndex = 0; mipIndex < mipCount; ++mipIndex) + { + int zCount = 1; + if (is3D) + { + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + zCount = layouts[subresourceIndex].Footprint.Depth; + } + + for (int zIndex = 0; zIndex < zCount; ++zIndex) + { + // Get the information about this subresource + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layout = layouts[subresourceIndex]; + + // Figure out if we should save this one + bool shouldSave = options.saveAll; + if (is3D) + shouldSave |= (mipIndex == options.mipIndex && zIndex == options.zIndex); + else + shouldSave |= (mipIndex == options.mipIndex && arrayIndex == options.zIndex); + + // save the image if we should + if (shouldSave) + { + DirectX::Image& image = images[imageIndex]; + imageIndex++; + + image.width = layout.Footprint.Width; + image.height = layout.Footprint.Height; + image.format = decodedFormatInfo.format; + image.rowPitch = decodedFormatInfo.bytesPerPixel * image.width; + image.slicePitch = image.rowPitch * image.height; + image.pixels = src; + } + + // Move past this subresource + src += layout.Footprint.Width * layout.Footprint.Height * decodedFormatInfo.bytesPerPixel; + } + } + } + + // Being lazy about calculating how many 2d images a 3d texture with mips needs. + if (imageIndex < images.size()) + images.resize(imageIndex); + + // make meta data + DirectX::TexMetadata metaData; + if (options.saveAll) + { + metaData.width = resourceOriginalDesc.Width; + metaData.height = resourceOriginalDesc.Height; + metaData.depth = is3D ? resourceOriginalDesc.DepthOrArraySize : 1; + metaData.arraySize = is3D ? 1 : resourceOriginalDesc.DepthOrArraySize; + metaData.mipLevels = resourceOriginalDesc.MipLevels; + } + else + { + metaData.width = images[0].width; + metaData.height = images[0].height; + metaData.depth = 1; + metaData.arraySize = 1; + metaData.mipLevels = 1; + } + metaData.miscFlags = 0; + metaData.miscFlags2 = 0; + metaData.format = decodedFormatInfo.format; + metaData.dimension = is3D ? DirectX::TEX_DIMENSION_TEXTURE3D : DirectX::TEX_DIMENSION_TEXTURE2D; + + // Compress + DirectX::ScratchImage compressedImages; + HRESULT hr = DirectX::Compress(images.data(), images.size(), metaData, options.bc6.isSigned ? DXGI_FORMAT_BC6H_SF16 : DXGI_FORMAT_BC6H_UF16, DirectX::TEX_COMPRESS_PARALLEL, DirectX::TEX_THRESHOLD_DEFAULT, compressedImages); + if (FAILED(hr)) + { + return false; + } + + // Save to disk + std::filesystem::path p(fileName); + p.replace_extension(".dds"); + hr = DirectX::SaveToDDSFile(compressedImages.GetImages(), compressedImages.GetImageCount(), compressedImages.GetMetadata(), DirectX::DDS_FLAGS_NONE, p.wstring().c_str()); + if (FAILED(hr)) + { + return false; + } + + return true; + } + + bool SaveAsDDS_BC7(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options) + { + // Get the pixel data + DXGI_FORMAT decodedFormat; + std::vector decodedPixels; + if (!ImageReadback::GetDecodedImage(device, readbackResource, resourceOriginalDesc, decodedPixels, decodedFormat)) + return false; + + // Verify the pixel data is appropriate for this file type + DXGI_FORMAT_Info decodedFormatInfo = Get_DXGI_FORMAT_Info(decodedFormat); + if (decodedFormatInfo.channelType != DXGI_FORMAT_Info::ChannelType::_uint8_t) + return false; + + // Get information about the subresources + bool is3D = (resourceOriginalDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D); + unsigned int numSlices = resourceOriginalDesc.MipLevels * resourceOriginalDesc.DepthOrArraySize; + unsigned int numSubResources = is3D ? resourceOriginalDesc.MipLevels : numSlices; + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layouts = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + D3D12_RESOURCE_DESC decodedDesc = resourceOriginalDesc; + decodedDesc.Format = decodedFormat; + device->GetCopyableFootprints(&decodedDesc, 0, numSubResources, 0, layouts, nullptr, nullptr, nullptr); + + int arrayCount = is3D ? 1 : resourceOriginalDesc.DepthOrArraySize; + int mipCount = resourceOriginalDesc.MipLevels; + + // for each array index + std::vector images(options.saveAll ? numSlices : 1); + unsigned char* src = decodedPixels.data(); + int imageIndex = 0; + for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + { + // for each mip index + for (int mipIndex = 0; mipIndex < mipCount; ++mipIndex) + { + int zCount = 1; + if (is3D) + { + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + zCount = layouts[subresourceIndex].Footprint.Depth; + } + + for (int zIndex = 0; zIndex < zCount; ++zIndex) + { + // Get the information about this subresource + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layout = layouts[subresourceIndex]; + + // Figure out if we should save this one + bool shouldSave = options.saveAll; + if (is3D) + shouldSave |= (mipIndex == options.mipIndex && zIndex == options.zIndex); + else + shouldSave |= (mipIndex == options.mipIndex && arrayIndex == options.zIndex); + + // save the image if we should + if (shouldSave) + { + DirectX::Image& image = images[imageIndex]; + imageIndex++; + + image.width = layout.Footprint.Width; + image.height = layout.Footprint.Height; + image.format = decodedFormatInfo.format; + image.rowPitch = decodedFormatInfo.bytesPerPixel * image.width; + image.slicePitch = image.rowPitch * image.height; + image.pixels = src; + } + + // Move past this subresource + src += layout.Footprint.Width * layout.Footprint.Height * decodedFormatInfo.bytesPerPixel; + } + } + } + + // Being lazy about calculating how many 2d images a 3d texture with mips needs. + if (imageIndex < images.size()) + images.resize(imageIndex); + + // make meta data + DirectX::TexMetadata metaData; + if (options.saveAll) + { + metaData.width = resourceOriginalDesc.Width; + metaData.height = resourceOriginalDesc.Height; + metaData.depth = is3D ? resourceOriginalDesc.DepthOrArraySize : 1; + metaData.arraySize = is3D ? 1 : resourceOriginalDesc.DepthOrArraySize; + metaData.mipLevels = resourceOriginalDesc.MipLevels; + } + else + { + metaData.width = images[0].width; + metaData.height = images[0].height; + metaData.depth = 1; + metaData.arraySize = 1; + metaData.mipLevels = 1; + } + metaData.miscFlags = 0; + metaData.miscFlags2 = 0; + metaData.format = decodedFormatInfo.format; + metaData.dimension = is3D ? DirectX::TEX_DIMENSION_TEXTURE3D : DirectX::TEX_DIMENSION_TEXTURE2D; + + // Compress + DirectX::ScratchImage compressedImages; + HRESULT hr = DirectX::Compress(images.data(), images.size(), metaData, options.bc7.sRGB ? DXGI_FORMAT_BC7_UNORM_SRGB : DXGI_FORMAT_BC7_UNORM, DirectX::TEX_COMPRESS_PARALLEL, DirectX::TEX_THRESHOLD_DEFAULT, compressedImages); + if (FAILED(hr)) + { + return false; + } + + // Save to disk + std::filesystem::path p(fileName); + p.replace_extension(".dds"); + hr = DirectX::SaveToDDSFile(compressedImages.GetImages(), compressedImages.GetImageCount(), compressedImages.GetMetadata(), DirectX::DDS_FLAGS_NONE, p.wstring().c_str()); + if (FAILED(hr)) + { + return false; + } + + return true; + } + + bool SaveAsBinary(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options) + { + // Get the pixel data + DXGI_FORMAT decodedFormat; + std::vector decodedPixels; + if (!ImageReadback::GetDecodedImage(device, readbackResource, resourceOriginalDesc, decodedPixels, decodedFormat)) + return false; + + // Get information about the subresources + bool is3D = (resourceOriginalDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D); + unsigned int numSubResources = is3D + ? resourceOriginalDesc.MipLevels + : resourceOriginalDesc.MipLevels * resourceOriginalDesc.DepthOrArraySize; + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layouts = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + D3D12_RESOURCE_DESC decodedDesc = resourceOriginalDesc; + decodedDesc.Format = decodedFormat; + device->GetCopyableFootprints(&decodedDesc, 0, numSubResources, 0, layouts, nullptr, nullptr, nullptr); + + int arrayCount = is3D ? 1 : resourceOriginalDesc.DepthOrArraySize; + int mipCount = resourceOriginalDesc.MipLevels; + + // open file + std::filesystem::path p(fileName); + p.replace_extension(".bin"); + FILE* file = nullptr; + fopen_s(&file, p.string().c_str(), "wb"); + if (!file) + return false; + + // for each array index + DXGI_FORMAT_Info decodedFormatInfo = Get_DXGI_FORMAT_Info(decodedFormat); + unsigned char* src = decodedPixels.data(); + for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + { + // for each mip index + for (int mipIndex = 0; mipIndex < mipCount; ++mipIndex) + { + int zCount = 1; + if (is3D) + { + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + zCount = layouts[subresourceIndex].Footprint.Depth; + } + + for (int zIndex = 0; zIndex < zCount; ++zIndex) + { + // Get the information about this subresource + unsigned int subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, resourceOriginalDesc.MipLevels, arrayCount); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT& layout = layouts[subresourceIndex]; + + // Figure out if we should save this one + bool shouldSave = options.saveAll; + if (is3D) + shouldSave |= (mipIndex == options.mipIndex && zIndex == options.zIndex); + else + shouldSave |= (mipIndex == options.mipIndex && arrayIndex == options.zIndex); + + // save the image if we should + if (shouldSave) + fwrite(src, 1, layout.Footprint.Width * layout.Footprint.Height * decodedFormatInfo.bytesPerPixel, file); + + // Move past this subresource + src += layout.Footprint.Width * layout.Footprint.Height * decodedFormatInfo.bytesPerPixel; + } + } + } + + fclose(file); + return true; + } + +}; // namespace ImageSave diff --git a/GigiViewerDX12/ImageSave.h b/GigiViewerDX12/ImageSave.h new file mode 100644 index 00000000..df79e4bd --- /dev/null +++ b/GigiViewerDX12/ImageSave.h @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////////////////////// +// Gigi Rapid Graphics Prototyping and Code Generation Suite // +// Copyright (c) 2024 Electronic Arts Inc. All rights reserved. // +/////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#define NOMINMAX +#include + +namespace ImageSave +{ + struct Options + { + int zIndex = 0; // Which array index or volume slice is being viewed. + int mipIndex = 0; // Which mip index is being viewed currently + bool saveAll = false; // If true, saves all slices and mips, else just saves the current one chosen. + bool isCubeMap = false; // If true, uses cube map face names instead of numbered array indices. + + struct BC6 + { + bool isSigned = false; + }; + BC6 bc6; + + struct BC7 + { + bool sRGB = true; + }; + BC7 bc7; + }; + + bool SaveAsPng(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options); + bool SaveAsCSV(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options); + bool SaveAsEXR(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options); + bool SaveAsHDR(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options); + bool SaveAsDDS_BC6(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options); + bool SaveAsDDS_BC7(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options); + bool SaveAsBinary(const char* fileName, ID3D12Device2* device, ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, const Options& options); +}; diff --git a/GigiViewerDX12/Interpreter/GigiInterpreterPreviewWindowDX12.cpp b/GigiViewerDX12/Interpreter/GigiInterpreterPreviewWindowDX12.cpp index 70b3677f..f89ce3d2 100644 --- a/GigiViewerDX12/Interpreter/GigiInterpreterPreviewWindowDX12.cpp +++ b/GigiViewerDX12/Interpreter/GigiInterpreterPreviewWindowDX12.cpp @@ -76,7 +76,7 @@ void RuntimeTypes::RenderGraphNode_Base::HandleViewableResource(GigiInterpreterP { // translate the creation format for stencil bits DXGI_FORMAT viewableFormat = resourceFormat; - if (viewableFormat == DXGI_FORMAT_X32_TYPELESS_G8X24_UINT) + if (viewableFormat == DXGI_FORMAT_X32_TYPELESS_G8X24_UINT || viewableFormat == DXGI_FORMAT_X24_TYPELESS_G8_UINT) viewableFormat = DXGI_FORMAT_R8_UINT; // (re) create the resource if needed @@ -103,6 +103,8 @@ void RuntimeTypes::RenderGraphNode_Base::HandleViewableResource(GigiInterpreterP res.m_stride = stride; res.m_count = count; + res.m_origResourceDesc = resource->GetDesc(); + // create the new resource switch (res.m_type) { @@ -111,20 +113,30 @@ void RuntimeTypes::RenderGraphNode_Base::HandleViewableResource(GigiInterpreterP case RuntimeTypes::ViewableResource::Type::Texture3D: case RuntimeTypes::ViewableResource::Type::TextureCube: { - unsigned int size[3] = { (unsigned int)res.m_size[0], (unsigned int)res.m_size[1], (unsigned int)res.m_size[2] }; - if (res.m_type != RuntimeTypes::ViewableResource::Type::Texture3D) - size[2] = 1; - - res.m_resource = CreateTexture(interpreter.m_device, size, 1, res.m_format, D3D12_RESOURCE_FLAG_NONE, D3D12_RESOURCE_STATE_COPY_DEST, ResourceType::Texture2D, (std::string(displayName) + " Copy").c_str()); - interpreter.m_transitions.Track(TRANSITION_DEBUG_INFO(res.m_resource, D3D12_RESOURCE_STATE_COPY_DEST)); - - // Make a readback buffer - DXGI_FORMAT_Info viewableFormatInfo = Get_DXGI_FORMAT_Info(viewableFormat); - int unalignedPitch = res.m_size[0] * viewableFormatInfo.bytesPerPixel; - int alignedPitch = ALIGN((D3D12_TEXTURE_DATA_PITCH_ALIGNMENT * viewableFormatInfo.planeCount), unalignedPitch); - - res.m_resourceReadback = CreateBuffer(interpreter.m_device, alignedPitch * res.m_size[1] * res.m_size[2], D3D12_RESOURCE_FLAG_NONE, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_HEAP_TYPE_READBACK, (std::string(displayName) + " Readback").c_str()); - interpreter.m_transitions.Track(TRANSITION_DEBUG_INFO(res.m_resourceReadback, D3D12_RESOURCE_STATE_COPY_DEST)); + // Make the view slice + { + unsigned int size[3] = { (unsigned int)res.m_size[0], (unsigned int)res.m_size[1], (unsigned int)res.m_size[2] }; + if (res.m_type != RuntimeTypes::ViewableResource::Type::Texture3D) + size[2] = 1; + + res.m_resource = CreateTexture(interpreter.m_device, size, 1, res.m_format, D3D12_RESOURCE_FLAG_NONE, D3D12_RESOURCE_STATE_COPY_DEST, ResourceType::Texture2D, (std::string(displayName) + " Copy").c_str()); + interpreter.m_transitions.Track(TRANSITION_DEBUG_INFO(res.m_resource, D3D12_RESOURCE_STATE_COPY_DEST)); + } + + // Make a readback buffer that can hold the entire source resource + { + D3D12_RESOURCE_DESC resourceDesc = resource->GetDesc(); + + unsigned int numSubResources = (res.m_type == RuntimeTypes::ViewableResource::Type::Texture3D) + ? resourceDesc.MipLevels + : resourceDesc.MipLevels * resourceDesc.DepthOrArraySize; + + size_t totalBytes = 0; + interpreter.m_device->GetCopyableFootprints(&resourceDesc, 0, numSubResources, 0, nullptr, nullptr, nullptr, &totalBytes); + + res.m_resourceReadback = CreateBuffer(interpreter.m_device, (unsigned int)totalBytes, D3D12_RESOURCE_FLAG_NONE, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_HEAP_TYPE_READBACK, (std::string(displayName) + " Readback").c_str()); + interpreter.m_transitions.Track(TRANSITION_DEBUG_INFO(res.m_resourceReadback, D3D12_RESOURCE_STATE_COPY_DEST)); + } break; } case RuntimeTypes::ViewableResource::Type::ConstantBuffer: @@ -161,10 +173,14 @@ void RuntimeTypes::RenderGraphNode_Base::HandleViewableResource(GigiInterpreterP interpreter.m_transitions.Transition(TRANSITION_DEBUG_INFO(res.m_resource, D3D12_RESOURCE_STATE_COPY_DEST)); interpreter.m_transitions.Flush(interpreter.m_commandList); + // make sure these are in range + res.m_arrayIndex = min(res.m_arrayIndex, res.m_size[2] - 1); + res.m_mipIndex = min(res.m_mipIndex, res.m_numMips - 1); + // multi dimensional textures only get a 2d slice if (res.m_type == RuntimeTypes::ViewableResource::Type::Texture3D) { - res.m_arrayIndex = min(res.m_arrayIndex, res.m_size[2] - 1); + DXGI_FORMAT_Info resourceFormatInfo = Get_DXGI_FORMAT_Info(resourceFormat); D3D12_BOX srcBox; srcBox.left = 0; @@ -174,6 +190,14 @@ void RuntimeTypes::RenderGraphNode_Base::HandleViewableResource(GigiInterpreterP srcBox.front = res.m_arrayIndex; srcBox.back = res.m_arrayIndex + 1; + if (resourceFormatInfo.isCompressed) + { + srcBox.left = ALIGN(4, srcBox.left); + srcBox.right = ALIGN(4, srcBox.right); + srcBox.top = ALIGN(4, srcBox.top); + srcBox.bottom = ALIGN(4, srcBox.bottom); + } + D3D12_TEXTURE_COPY_LOCATION src = {}; src.pResource = resource; src.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; @@ -219,64 +243,36 @@ void RuntimeTypes::RenderGraphNode_Base::HandleViewableResource(GigiInterpreterP interpreter.m_transitions.Transition(TRANSITION_DEBUG_INFO(res.m_resourceReadback, D3D12_RESOURCE_STATE_COPY_DEST)); interpreter.m_transitions.Flush(interpreter.m_commandList); - if (res.m_type == RuntimeTypes::ViewableResource::Type::Texture3D) - { - DXGI_FORMAT_Info resourceFormatInfo = Get_DXGI_FORMAT_Info(resourceFormat); - - D3D12_BOX srcBox; - srcBox.left = 0; - srcBox.right = res.m_size[0]; - srcBox.top = 0; - srcBox.bottom = res.m_size[1]; - srcBox.front = 0; - srcBox.back = res.m_size[2]; - - D3D12_RESOURCE_DESC resourceDesc = resource->GetDesc(); - std::vector layoutMem(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)); - D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layout = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutMem.data(); - - UINT firstSubResource = D3D12CalcSubresource(res.m_mipIndex, 0, resourceFormatInfo.planeIndex, res.m_numMips, 1); - interpreter.m_device->GetCopyableFootprints(&resourceDesc, firstSubResource, 1, 0, layout, nullptr, nullptr, nullptr); - - D3D12_TEXTURE_COPY_LOCATION src = {}; - src.pResource = resource; - src.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; - src.SubresourceIndex = firstSubResource; - - D3D12_TEXTURE_COPY_LOCATION dest = {}; - dest.pResource = res.m_resourceReadback; - dest.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; - dest.PlacedFootprint = *layout; - - interpreter.m_commandList->CopyTextureRegion(&dest, 0, 0, 0, &src, &srcBox); - } - else if (res.m_type == RuntimeTypes::ViewableResource::Type::Texture2D || + if (res.m_type == RuntimeTypes::ViewableResource::Type::Texture2D || res.m_type == RuntimeTypes::ViewableResource::Type::Texture2DArray || + res.m_type == RuntimeTypes::ViewableResource::Type::Texture3D || res.m_type == RuntimeTypes::ViewableResource::Type::TextureCube) { - DXGI_FORMAT_Info resourceFormatInfo = Get_DXGI_FORMAT_Info(resourceFormat); - + // Calculate the number of sub resources D3D12_RESOURCE_DESC resourceDesc = resource->GetDesc(); - resourceDesc.Format = resourceFormat; - std::vector layoutMem(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)); - D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layout = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutMem.data(); + unsigned int numSubResources = (res.m_type == RuntimeTypes::ViewableResource::Type::Texture3D) + ? resourceDesc.MipLevels + : resourceDesc.MipLevels * resourceDesc.DepthOrArraySize; - UINT firstSubResource = D3D12CalcSubresource(res.m_mipIndex, res.m_arrayIndex, resourceFormatInfo.planeIndex, res.m_numMips, res.m_size[2]); - interpreter.m_device->GetCopyableFootprints(&resourceDesc, firstSubResource, 1, 0, layout, nullptr, nullptr, nullptr); - - D3D12_TEXTURE_COPY_LOCATION src = {}; - src.pResource = resource; - src.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; - src.SubresourceIndex = D3D12CalcSubresource(res.m_mipIndex, res.m_arrayIndex, resourceFormatInfo.planeIndex, res.m_numMips, res.m_size[2]); + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numSubResources); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layouts = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + interpreter.m_device->GetCopyableFootprints(&resourceDesc, 0, numSubResources, 0, layouts, nullptr, nullptr, nullptr); + for (unsigned int subResourceIndex = 0; subResourceIndex < numSubResources; ++subResourceIndex) + { + D3D12_TEXTURE_COPY_LOCATION src = {}; + src.pResource = resource; + src.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + src.SubresourceIndex = subResourceIndex; - D3D12_TEXTURE_COPY_LOCATION dest = {}; - dest.pResource = res.m_resourceReadback; - dest.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; - dest.PlacedFootprint = *layout; + D3D12_TEXTURE_COPY_LOCATION dest = {}; + dest.pResource = res.m_resourceReadback; + dest.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + dest.PlacedFootprint = layouts[subResourceIndex]; - interpreter.m_commandList->CopyTextureRegion(&dest, 0, 0, 0, &src, nullptr); + interpreter.m_commandList->CopyTextureRegion(&dest, 0, 0, 0, &src, nullptr); + } } else { @@ -507,4 +503,4 @@ void GigiInterpreterPreviewWindowDX12::LogCollectedShaderAsserts() const std::string msgHeader = "ASSERT FAILED: [" + a.displayName + "]"; ShowErrorMessage("%s\nmsg: %s", msgHeader.data(), a.msg.data()); } -} \ No newline at end of file +} diff --git a/GigiViewerDX12/Interpreter/GigiInterpreterPreviewWindowDX12.h b/GigiViewerDX12/Interpreter/GigiInterpreterPreviewWindowDX12.h index 110fad70..c5bffff8 100644 --- a/GigiViewerDX12/Interpreter/GigiInterpreterPreviewWindowDX12.h +++ b/GigiViewerDX12/Interpreter/GigiInterpreterPreviewWindowDX12.h @@ -46,6 +46,9 @@ class GigiInterpreterPreviewWindowDX12 : public IGigiInterpreter m_commandQueue = commandQueue; m_maxFramesInFlight = maxFramesInFlight; + m_descriptorTableCache_imgui.Init(maxFramesInFlight); + m_descriptorTableCache.Init(maxFramesInFlight); + m_SRVHeapAllocationTracker_imgui.Init(m_maxFramesInFlight, ImGuiSRVHeap, ImGuiSRVHeapDescriptorCount, ImGuiSRVHeapDescriptorSize); m_SRVHeapAllocationTracker_imgui.MarkIndexAllocated(0, HEAP_DEBUG_TEXT()); // used by the imgui font texture @@ -165,7 +168,7 @@ class GigiInterpreterPreviewWindowDX12 : public IGigiInterpreter // Call release on all runtime data // clang-format off #include "external/df_serialize/_common.h" - #define VARIANT_TYPE(_TYPE, _NAME, _DEFAULT, _DESCRIPTION) m_##_TYPE##_RuntimeData.ForEach([this](auto& data) { data.Release(*this); }); \ + #define VARIANT_TYPE(_TYPE, _NAME, _DEFAULT, _DESCRIPTION) m_##_TYPE##_RuntimeData.ForEach([this](auto& key, auto& data) { data.Release(*this); }); \ m_##_TYPE##_RuntimeData.Clear(); #include "external/df_serialize/_fillunsetdefines.h" #include "Schemas/RenderGraphNodesVariant.h" @@ -269,7 +272,7 @@ class GigiInterpreterPreviewWindowDX12 : public IGigiInterpreter // Call release on all runtime data // clang-format off #include "external/df_serialize/_common.h" - #define VARIANT_TYPE(_TYPE, _NAME, _DEFAULT, _DESCRIPTION) m_##_TYPE##_RuntimeData.ForEach([this](auto& data) { data.Release(*this); data.OnCompileOK(*this); }); + #define VARIANT_TYPE(_TYPE, _NAME, _DEFAULT, _DESCRIPTION) m_##_TYPE##_RuntimeData.ForEach([this](auto& key, auto& data) { data.Release(*this); data.OnCompileOK(*this); }); #include "external/df_serialize/_fillunsetdefines.h" #include "Schemas/RenderGraphNodesVariant.h" // clang-format on @@ -429,7 +432,7 @@ class GigiInterpreterPreviewWindowDX12 : public IGigiInterpreter #include "external/df_serialize/_common.h" #define VARIANT_TYPE(_TYPE, _NAME, _DEFAULT, _DESCRIPTION) \ m_##_TYPE##_RuntimeData.ForEach( \ - [](RuntimeTypes::_TYPE& data) \ + [](auto& key, RuntimeTypes::_TYPE& data) \ { \ data.OnNewFrame(); \ } \ @@ -506,6 +509,13 @@ class GigiInterpreterPreviewWindowDX12 : public IGigiInterpreter failed, clean }; + + struct ImportedTextureBinaryDesc + { + TextureFormat format = TextureFormat::Any; + int size[3] = { 0, 0, 1 }; + }; + struct ImportedTextureDesc { std::string fileName; @@ -517,10 +527,9 @@ class GigiInterpreterPreviewWindowDX12 : public IGigiInterpreter RuntimeTypes::ViewableResource::Type textureType = RuntimeTypes::ViewableResource::Type::Texture2D; // binary file loading info - int binaryDims[3] = { 0, 0, 1 }; - GGUserFile_ImportedTexture_BinaryType binaryType = GGUserFile_ImportedTexture_BinaryType::Float; - int binaryChannels = 4; + ImportedTextureBinaryDesc binaryDesc; }; + struct ImportedBufferDesc { std::string fileName; @@ -533,6 +542,7 @@ class GigiInterpreterPreviewWindowDX12 : public IGigiInterpreter bool BLASNoDuplicateAnyhitInvocations = false; bool IsAABBs = false; // only for ray tracing AABBs which have an intersection shader }; + struct ImportedResourceDesc { ImportedResourceDesc() @@ -688,11 +698,15 @@ class GigiInterpreterPreviewWindowDX12 : public IGigiInterpreter // clang-format on // helpers + bool LoadTexture(std::vector& loadedTextures, const RenderGraphNode_Resource_Texture& node, RuntimeTypes::RenderGraphNode_Resource_Texture& runtimeData, std::string fileName, bool fileIsSRGB, const ImportedTextureBinaryDesc& binaryDesc, DXGI_FORMAT desiredFormat); + bool CreateAndUploadTextures(const RenderGraphNode_Resource_Texture& node, RuntimeTypes::RenderGraphNode_Resource_Texture& runtimeData, std::vector& loadedTextures); + bool OnNodeActionImported(const RenderGraphNode_Resource_Texture& node, RuntimeTypes::RenderGraphNode_Resource_Texture& runtimeData, NodeAction nodeAction); bool OnNodeActionNotImported(const RenderGraphNode_Resource_Texture& node, RuntimeTypes::RenderGraphNode_Resource_Texture& runtimeData, NodeAction nodeAction); bool OnNodeActionImported(const RenderGraphNode_Resource_Buffer& node, RuntimeTypes::RenderGraphNode_Resource_Buffer& runtimeData, NodeAction nodeAction); bool OnNodeActionNotImported(const RenderGraphNode_Resource_Buffer& node, RuntimeTypes::RenderGraphNode_Resource_Buffer& runtimeData, NodeAction nodeAction); bool MakeAccelerationStructures(const RenderGraphNode_Resource_Buffer& node, const ImportedResourceDesc& resourceDesc, RuntimeTypes::RenderGraphNode_Resource_Buffer& runtimeData); + bool MakeAccelerationStructures(const RenderGraphNode_Resource_Buffer& node); bool DrawCall_MakeRootSignature(const RenderGraphNode_Action_DrawCall& node, RuntimeTypes::RenderGraphNode_Action_DrawCall& runtimeData); bool DrawCall_MakeDescriptorTableDesc(std::vector& descs, const RenderGraphNode_Action_DrawCall& node, const Shader& shader, int pinOffset, std::vector& queuedTransitions, const std::unordered_map& importantResourceStates); diff --git a/GigiViewerDX12/Interpreter/NodesShared.h b/GigiViewerDX12/Interpreter/NodesShared.h index 730ab451..c92aa99f 100644 --- a/GigiViewerDX12/Interpreter/NodesShared.h +++ b/GigiViewerDX12/Interpreter/NodesShared.h @@ -13,18 +13,6 @@ typedef std::array IVec3; -inline std::string GetNodeOriginalName(const RenderGraphNode& node) -{ - std::string ret; - ExecuteOnNode(node, - [&ret](auto& node) - { - ret = node.originalName; - } - ); - return ret; -} - inline bool ShadingRateToD3D12_SHADING_RATE(ShadingRate shadingRate, D3D12_SHADING_RATE& d3d12ShadingRate) { switch (shadingRate) @@ -114,12 +102,25 @@ inline DXGI_FORMAT TextureFormatToDXGI_FORMAT(TextureFormat textureFormat) case TextureFormat::D24_Unorm_S8: return DXGI_FORMAT_D24_UNORM_S8_UINT; case TextureFormat::BC7_Unorm: return DXGI_FORMAT_BC7_UNORM; case TextureFormat::BC7_Unorm_sRGB: return DXGI_FORMAT_BC7_UNORM_SRGB; + case TextureFormat::BC6_UF16: return DXGI_FORMAT_BC6H_UF16; + case TextureFormat::BC6_SF16: return DXGI_FORMAT_BC6H_SF16; } Assert(false, "Unhandled TextureFormat"); return DXGI_FORMAT_FORCE_UINT; } +// Returns "Any" if no valid format found +inline TextureFormat DXGI_FORMATToTextureFormat(DXGI_FORMAT format) +{ + for (size_t i = 0; i < EnumCount(); ++i) + { + if (TextureFormatToDXGI_FORMAT((TextureFormat)i) == format) + return (TextureFormat)i; + } + return TextureFormat::Any; +} + inline D3D12_CULL_MODE DrawCullModeToD3D12_CULL_MODE(DrawCullMode cullMode) { switch (cullMode) diff --git a/GigiViewerDX12/Interpreter/RenderGraphNode_Action_ComputeShader.cpp b/GigiViewerDX12/Interpreter/RenderGraphNode_Action_ComputeShader.cpp index 700a7d54..89359b08 100644 --- a/GigiViewerDX12/Interpreter/RenderGraphNode_Action_ComputeShader.cpp +++ b/GigiViewerDX12/Interpreter/RenderGraphNode_Action_ComputeShader.cpp @@ -298,10 +298,36 @@ bool GigiInterpreterPreviewWindowDX12::OnNodeAction(const RenderGraphNode_Action } case RenderGraphNode::c_index_resourceBuffer: { - const RuntimeTypes::RenderGraphNode_Resource_Buffer& resourceInfo = GetRuntimeNodeData_RenderGraphNode_Resource_Buffer(resourceNode.resourceBuffer.name.c_str()); + RuntimeTypes::RenderGraphNode_Resource_Buffer& resourceInfo = GetRuntimeNodeData_RenderGraphNode_Resource_Buffer(resourceNode.resourceBuffer.name.c_str()); if (dep.access == ShaderResourceAccessType::RTScene) { + if (!AccessIsReadOnly(resourceNode.resourceBuffer.accessedAs)) + { + m_transitions.Untrack(resourceInfo.m_tlas); + m_delayedRelease.Add(resourceInfo.m_tlas); + resourceInfo.m_tlas = nullptr; + resourceInfo.m_tlasSize = 0; + + m_transitions.Untrack(resourceInfo.m_blas); + m_delayedRelease.Add(resourceInfo.m_blas); + resourceInfo.m_blas = nullptr; + resourceInfo.m_blasSize = 0; + + m_transitions.Untrack(resourceInfo.m_instanceDescs); + m_delayedRelease.Add(resourceInfo.m_instanceDescs); + resourceInfo.m_instanceDescs = nullptr; + } + + if (!resourceInfo.m_tlas) + { + if (!MakeAccelerationStructures(resourceNode.resourceBuffer)) + { + m_logFn(LogLevel::Error, "Failed to make acceleration structure for buffer \"%s\"", resourceNode.resourceBuffer.name.c_str()); + return false; + } + } + desc.m_resource = resourceInfo.m_tlas; desc.m_format = DXGI_FORMAT_UNKNOWN; desc.m_stride = resourceInfo.m_tlasSize; diff --git a/GigiViewerDX12/Interpreter/RenderGraphNode_Action_RayShader.cpp b/GigiViewerDX12/Interpreter/RenderGraphNode_Action_RayShader.cpp index ed6faea3..8c051eb8 100644 --- a/GigiViewerDX12/Interpreter/RenderGraphNode_Action_RayShader.cpp +++ b/GigiViewerDX12/Interpreter/RenderGraphNode_Action_RayShader.cpp @@ -653,10 +653,36 @@ bool GigiInterpreterPreviewWindowDX12::OnNodeAction(const RenderGraphNode_Action } case RenderGraphNode::c_index_resourceBuffer: { - const RuntimeTypes::RenderGraphNode_Resource_Buffer& resourceInfo = GetRuntimeNodeData_RenderGraphNode_Resource_Buffer(resourceNode.resourceBuffer.name.c_str()); + RuntimeTypes::RenderGraphNode_Resource_Buffer& resourceInfo = GetRuntimeNodeData_RenderGraphNode_Resource_Buffer(resourceNode.resourceBuffer.name.c_str()); if (dep.access == ShaderResourceAccessType::RTScene) { + if (!AccessIsReadOnly(resourceNode.resourceBuffer.accessedAs)) + { + m_transitions.Untrack(resourceInfo.m_tlas); + m_delayedRelease.Add(resourceInfo.m_tlas); + resourceInfo.m_tlas = nullptr; + resourceInfo.m_tlasSize = 0; + + m_transitions.Untrack(resourceInfo.m_blas); + m_delayedRelease.Add(resourceInfo.m_blas); + resourceInfo.m_blas = nullptr; + resourceInfo.m_blasSize = 0; + + m_transitions.Untrack(resourceInfo.m_instanceDescs); + m_delayedRelease.Add(resourceInfo.m_instanceDescs); + resourceInfo.m_instanceDescs = nullptr; + } + + if (!resourceInfo.m_tlas) + { + if (!MakeAccelerationStructures(resourceNode.resourceBuffer)) + { + m_logFn(LogLevel::Error, "Failed to make acceleration structure for buffer \"%s\"", resourceNode.resourceBuffer.name.c_str()); + return false; + } + } + desc.m_resource = resourceInfo.m_tlas; desc.m_format = DXGI_FORMAT_UNKNOWN; desc.m_stride = resourceInfo.m_tlasSize; diff --git a/GigiViewerDX12/Interpreter/RenderGraphNode_Resource_Buffer.cpp b/GigiViewerDX12/Interpreter/RenderGraphNode_Resource_Buffer.cpp index 62a136e9..83c3bf53 100644 --- a/GigiViewerDX12/Interpreter/RenderGraphNode_Resource_Buffer.cpp +++ b/GigiViewerDX12/Interpreter/RenderGraphNode_Resource_Buffer.cpp @@ -56,6 +56,17 @@ void RuntimeTypes::RenderGraphNode_Resource_Buffer::Release(GigiInterpreterPrevi } } +bool GigiInterpreterPreviewWindowDX12::MakeAccelerationStructures(const RenderGraphNode_Resource_Buffer& node) +{ + ImportedResourceDesc& resourceDesc = m_importedResources[node.name]; + RuntimeTypes::RenderGraphNode_Resource_Buffer& runtimeData = m_RenderGraphNode_Resource_Buffer_RuntimeData.GetOrCreate(node.name); + + m_transitions.Transition(TRANSITION_DEBUG_INFO(runtimeData.m_resource, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)); + m_transitions.Flush(m_commandList); + + return MakeAccelerationStructures(node, resourceDesc, runtimeData); +} + bool GigiInterpreterPreviewWindowDX12::MakeAccelerationStructures(const RenderGraphNode_Resource_Buffer& node, const ImportedResourceDesc& resourceDesc, RuntimeTypes::RenderGraphNode_Resource_Buffer& runtimeData) { if (!SupportsRaytracing()) @@ -1113,32 +1124,6 @@ bool GigiInterpreterPreviewWindowDX12::OnNodeActionImported(const RenderGraphNod m_commandList->CopyResource(runtimeData.m_resourceInitialState, uploadBuffer->buffer); } - // If this resource is used as an RTScene, this is vertex data we need to turn into a BLAS/TLAS - if (node.accessedAs & (1 << (unsigned int)ShaderResourceAccessType::RTScene)) - { - // Copy the inital state into the resource - { - // transition the resources as needed - m_transitions.Transition(TRANSITION_DEBUG_INFO(runtimeData.m_resourceInitialState, D3D12_RESOURCE_STATE_COPY_SOURCE)); - m_transitions.Transition(TRANSITION_DEBUG_INFO(runtimeData.m_resource, D3D12_RESOURCE_STATE_COPY_DEST)); - m_transitions.Flush(m_commandList); - - // copy - m_commandList->CopyResource(runtimeData.m_resource, runtimeData.m_resourceInitialState); - } - - // Put the resource into non pixel shader resource - m_transitions.Transition(TRANSITION_DEBUG_INFO(runtimeData.m_resource, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE)); - m_transitions.Flush(m_commandList); - - if (!MakeAccelerationStructures(node, desc, runtimeData)) - { - m_logFn(LogLevel::Error, "Failed to make acceleration structure for buffer \"%s\"", node.name.c_str()); - desc.state = ImportedResourceState::failed; - return true; - } - } - // Note that the resource wants to be reset to the initial state. runtimeData.m_resourceWantsReset = true; @@ -1264,14 +1249,6 @@ bool GigiInterpreterPreviewWindowDX12::OnNodeAction(const RenderGraphNode_Resour m_logFn(LogLevel::Error, "A buffer may only be used as an RTScene, a VertexBuffer, or an IndexBuffer. Buffer \"%s\" was used for multiple.", node.name.c_str()); return false; } - - // Furthermore, RTScene access needs to be alone - if (node.accessedAs & (1 << ((unsigned int)(ShaderResourceAccessType::RTScene))) && - node.accessedAs != (1 << ((unsigned int)(ShaderResourceAccessType::RTScene)))) - { - m_logFn(LogLevel::Error, "Buffer \"%s\" is used as an RTScene, and cannot be used as anything else.", node.name.c_str()); - return false; - } } if (node.visibility == ResourceVisibility::Imported) diff --git a/GigiViewerDX12/Interpreter/RenderGraphNode_Resource_Texture.cpp b/GigiViewerDX12/Interpreter/RenderGraphNode_Resource_Texture.cpp index ebae2f20..df6869ff 100644 --- a/GigiViewerDX12/Interpreter/RenderGraphNode_Resource_Texture.cpp +++ b/GigiViewerDX12/Interpreter/RenderGraphNode_Resource_Texture.cpp @@ -207,196 +207,100 @@ void RuntimeTypes::RenderGraphNode_Resource_Texture::Release(GigiInterpreterPrev m_failed = false; } -template -std::vector ConvertToDoubles(const std::vector& src, double multiplier) +bool ConvertPixelData(TextureCache::Texture& texture, DXGI_FORMAT newFormat) { - const size_t valueCount = src.size() / sizeof(T); - - std::vector ret(valueCount, 0); - - const T* srcValues = (const T*)src.data(); - for (size_t index = 0; index < valueCount; ++index) - ret[index] = multiplier * (double)srcValues[index]; - - return ret; -} - -template -std::vector ConvertToDoubles(const unsigned char* src, size_t valueCount, double multiplier) -{ - std::vector ret(valueCount, 0); - - const T* srcValues = (const T*)src; - for (size_t index = 0; index < valueCount; ++index) - ret[index] = multiplier * (double)srcValues[index]; - - return ret; -} - -static bool ConvertToDoubles(const std::vector& src, DXGI_FORMAT_Info::ChannelType type, std::vector& doubles) -{ - switch (type) - { - case DXGI_FORMAT_Info::ChannelType::_uint8_t: doubles = ConvertToDoubles(src, 1.0 / 255.0); break; - case DXGI_FORMAT_Info::ChannelType::_uint16_t: doubles = ConvertToDoubles(src, 1.0 / 65535.0); break; - case DXGI_FORMAT_Info::ChannelType::_int16_t: doubles = ConvertToDoubles(src, 1.0 / 32767.0); break; - case DXGI_FORMAT_Info::ChannelType::_uint32_t: doubles = ConvertToDoubles(src, 1.0 / 4294967296.0); break; - case DXGI_FORMAT_Info::ChannelType::_half: doubles = ConvertToDoubles(src, 1.0); break; - case DXGI_FORMAT_Info::ChannelType::_float: doubles = ConvertToDoubles(src, 1.0); break; - default: return false; - } - return true; -} - -static bool ConvertToDoubles(const unsigned char* src, size_t valueCount, DXGI_FORMAT_Info::ChannelType type, std::vector& doubles) -{ - switch (type) - { - case DXGI_FORMAT_Info::ChannelType::_uint8_t: doubles = ConvertToDoubles(src, valueCount, 1.0 / 255.0); break; - case DXGI_FORMAT_Info::ChannelType::_uint16_t: doubles = ConvertToDoubles(src, valueCount, 1.0 / 65535.0); break; - case DXGI_FORMAT_Info::ChannelType::_int16_t: doubles = ConvertToDoubles(src, valueCount, 1.0 / 32767.0); break; - case DXGI_FORMAT_Info::ChannelType::_uint32_t: doubles = ConvertToDoubles(src, valueCount, 1.0 / 4294967296.0); break; - case DXGI_FORMAT_Info::ChannelType::_half: doubles = ConvertToDoubles(src, valueCount, 1.0); break; - case DXGI_FORMAT_Info::ChannelType::_float: doubles = ConvertToDoubles(src, valueCount, 1.0); break; - default: return false; - } - return true; -} - -template -std::vector ConvertFromDoubles(const std::vector& src, double multiplier, double theMin, double theMax) -{ - const size_t valueCount = src.size(); - - std::vector ret(valueCount * sizeof(T), 0); - - T* destValues = (T*)ret.data(); - for (size_t index = 0; index < valueCount; ++index) - destValues[index] = (T)(max(min(src[index] * multiplier, theMax), theMin)); - - return ret; -} - -static bool ConvertFromDoubles(const std::vector& doubles, DXGI_FORMAT_Info::ChannelType type, std::vector& dest) -{ - switch (type) - { - case DXGI_FORMAT_Info::ChannelType::_uint8_t: dest = ConvertFromDoubles(doubles, 256.0, 0.0, 255.0); break; - case DXGI_FORMAT_Info::ChannelType::_int8_t: dest = ConvertFromDoubles(doubles, 256.0, -128.0, 127.0); break; - case DXGI_FORMAT_Info::ChannelType::_int16_t: dest = ConvertFromDoubles(doubles, 65536.0, -32768.0, 32767.0); break; - case DXGI_FORMAT_Info::ChannelType::_uint16_t: dest = ConvertFromDoubles(doubles, 65536.0, 0.0, 65535.0); break; - case DXGI_FORMAT_Info::ChannelType::_uint32_t: dest = ConvertFromDoubles(doubles, 4294967296.0, 0.0, 4294967295.0); break; - case DXGI_FORMAT_Info::ChannelType::_half: dest = ConvertFromDoubles(doubles, 1.0, -65504.0, 65504.0); break; - case DXGI_FORMAT_Info::ChannelType::_float: dest = ConvertFromDoubles(doubles, 1.0, -FLT_MAX, FLT_MAX); break; - default: return false; - } - return true; -} - -static bool ConvertFromDoubles(const std::vector& doubles, DXGI_FORMAT_Info::ChannelType type, unsigned char* dest) -{ - std::vector _dest; - switch (type) - { - case DXGI_FORMAT_Info::ChannelType::_uint8_t: _dest = ConvertFromDoubles(doubles, 256.0, 0.0, 255.0); break; - case DXGI_FORMAT_Info::ChannelType::_int8_t: _dest = ConvertFromDoubles(doubles, 256.0, -128.0, 127.0); break; - case DXGI_FORMAT_Info::ChannelType::_int16_t: _dest = ConvertFromDoubles(doubles, 65536.0, -32768.0, 32767.0); break; - case DXGI_FORMAT_Info::ChannelType::_uint16_t: _dest = ConvertFromDoubles(doubles, 65536.0, 0.0, 65535.0); break; - case DXGI_FORMAT_Info::ChannelType::_uint32_t: _dest = ConvertFromDoubles(doubles, 4294967296.0, 0.0, 4294967295.0); break; - case DXGI_FORMAT_Info::ChannelType::_half: _dest = ConvertFromDoubles(doubles, 1.0, -65504.0, 65504.0); break; - case DXGI_FORMAT_Info::ChannelType::_float: _dest = ConvertFromDoubles(doubles, 1.0, -FLT_MAX, FLT_MAX); break; - default: return false; - } - - memcpy(dest, _dest.data(), _dest.size()); - - return true; -} + // If same format, nothing to do + if (texture.format == newFormat) + return true; -bool ConvertPixelData(const std::vector& src, const DXGI_FORMAT_Info& srcFormat_, std::vector& dest, const DXGI_FORMAT_Info& destFormat) -{ // We don't do conversion on compressed image formats - if (srcFormat_.isCompressed || destFormat.isCompressed) + // We do allow implicit conversion between compatible compressed types though. + DXGI_FORMAT_Info textureFormatInfo = Get_DXGI_FORMAT_Info(texture.format); + DXGI_FORMAT_Info newFormatInfo = Get_DXGI_FORMAT_Info(newFormat); + if (textureFormatInfo.isCompressed || newFormatInfo.isCompressed) { - if (srcFormat_.format == destFormat.format) - { - dest = src; + DXGI_FORMAT fmtA = min(texture.format, newFormat); + DXGI_FORMAT fmtB = max(texture.format, newFormat); + + if (fmtA == DXGI_FORMAT_BC7_UNORM && fmtB == DXGI_FORMAT_BC7_UNORM_SRGB) return true; - } - return false; - } - // Nothing to do if nothing to convert - DXGI_FORMAT_Info srcFormat = srcFormat_; - if (srcFormat.channelType == destFormat.channelType && srcFormat.sRGB == destFormat.sRGB && srcFormat.channelCount == destFormat.channelCount) - { - dest = src; - return true; - } + if (fmtA == DXGI_FORMAT_BC6H_UF16 && fmtB == DXGI_FORMAT_BC6H_SF16) + return true; - // Convert the source pixels to doubles - std::vector srcDoubles; - if (!ConvertToDoubles(src, srcFormat.channelType, srcDoubles)) return false; - - // convert to the right channel count - if (srcFormat.channelCount != destFormat.channelCount) - { - size_t numPixels = srcDoubles.size() / srcFormat.channelCount; - std::vector temp(numPixels * destFormat.channelCount); - - const double* srcPixel = srcDoubles.data(); - double* destPixel = temp.data(); - - for (size_t i = 0; i < numPixels; ++i) - { - memcpy(destPixel, srcPixel, sizeof(double) * min(srcFormat.channelCount, destFormat.channelCount)); - - for (size_t c = srcFormat.channelCount; c < destFormat.channelCount; c++) - destPixel[c] = (c < 3) ? 0.0f : 1.0f; - - srcPixel += srcFormat.channelCount; - destPixel += destFormat.channelCount; - } - - // Channel count conversion done - srcFormat.channelCount = destFormat.channelCount; - srcDoubles = temp; } - // do sRGB conversion if we should - if (srcFormat.sRGB != destFormat.sRGB) + // Process each slice + for (int iz = 0; iz < texture.images.size(); ++iz) { - int channelsToConvert = min(srcFormat.channelCount, 3); // don't convert alpha + // Convert to doubles + std::vector textureDoubles; + if (!ConvertToDoubles(texture.images[iz].pixels, textureFormatInfo.channelType, textureDoubles)) + return false; - if (srcFormat.sRGB) + // do sRGB conversion if we should + if (textureFormatInfo.sRGB != newFormatInfo.sRGB) { - size_t index = 0; - while (index < srcDoubles.size()) + int channelsToConvert = min(textureFormatInfo.channelCount, 3); // don't convert alpha + + if (textureFormatInfo.sRGB) { - for (int channel = 0; channel < channelsToConvert; ++channel) - srcDoubles[index + channel] = (float)SRGBToLinear((float)srcDoubles[index + channel]); - index += srcFormat.channelCount; + size_t index = 0; + while (index < textureDoubles.size()) + { + for (int channel = 0; channel < channelsToConvert; ++channel) + textureDoubles[index + channel] = SRGBToLinear((float)textureDoubles[index + channel]); + index += textureFormatInfo.channelCount; + } + } + else + { + size_t index = 0; + while (index < textureDoubles.size()) + { + for (int channel = 0; channel < channelsToConvert; ++channel) + textureDoubles[index + channel] = LinearTosRGB((float)textureDoubles[index + channel]); + index += textureFormatInfo.channelCount; + } } } - else + + // Add or remove channels as needed + if (textureFormatInfo.channelCount != newFormatInfo.channelCount) { - size_t index = 0; - while (index < srcDoubles.size()) + size_t pixelCount = textureDoubles.size() / textureFormatInfo.channelCount; + std::vector padded(pixelCount * newFormatInfo.channelCount); + + const double* src = textureDoubles.data(); + double* dest = padded.data(); + + for (size_t pixelIndex = 0; pixelIndex < pixelCount; ++pixelIndex) { - for (int channel = 0; channel < channelsToConvert; ++channel) - srcDoubles[index + channel] = (float)LinearTosRGB((float)srcDoubles[index + channel]); - index += srcFormat.channelCount; + if (textureFormatInfo.channelCount < newFormatInfo.channelCount) + { + memcpy(dest, src, sizeof(double) * textureFormatInfo.channelCount); + for (int channelIndex = textureFormatInfo.channelCount; channelIndex < newFormatInfo.channelCount; ++channelIndex) + dest[channelIndex] = (channelIndex == 3) ? 1.0 : 0.0; + } + else + { + memcpy(dest, src, sizeof(double) * newFormatInfo.channelCount); + } + src += textureFormatInfo.channelCount; + dest += newFormatInfo.channelCount; } + + textureDoubles = padded; } - srcFormat.sRGB = destFormat.sRGB; + // Convert from doubles to the destination format + if (!ConvertFromDoubles(textureDoubles, newFormatInfo.channelType, texture.images[iz].pixels)) + return false; } - // Convert from doubles to the destination format - if (!ConvertFromDoubles(srcDoubles, destFormat.channelType, dest)) - return false; - + // Set the new format and return success + texture.format = newFormat; return true; } @@ -524,8 +428,7 @@ static void MakeMip(const std::vector& src, std::vector& src, std::vector allPixels; + if (mipDims[0] == 1 && mipDims[1] == 1 && mipDims[2] == 1) + break; - runtimeData.m_format = TextureFormatToDXGI_FORMAT(desc.texture.format); - DXGI_FORMAT_Info pixelsFormatInfo = Get_DXGI_FORMAT_Info(runtimeData.m_format); + mipDims[0] = max(mipDims[0] / 2, 1); + mipDims[1] = max(mipDims[1] / 2, 1); + mipDims[2] = max(mipDims[2] / 2, 1); + } + } + } - // if we have a file to load - if (!desc.texture.fileName.empty()) - { - if (!FileNameSafe(desc.texture.fileName.c_str())) - return true; + // The file size on disk either has to be the size of the image with mips, or without mips. + if (fileData.GetSize() == imageSizeWithoutMips) + mipCount = 1; + else if (fileData.GetSize() != imageSizeWithMips) + return newTexture; - std::vector loadedTextures; + // Fill out the texture data + newTexture.width = width; + newTexture.height = height; + newTexture.depth = depth; + newTexture.mips = mipCount; + newTexture.format = format; - bool useCubeMapNames = (desc.texture.fileName.find("%s") != std::string::npos); + int arrayCount = is3D ? 1 : depth; - int textureIndex = -1; - bool loadedBinary = false; - while (1) - { - // make the next file name - textureIndex++; - char indexedFileName[1024]; - if (useCubeMapNames) - sprintf_s(indexedFileName, desc.texture.fileName.c_str(), c_cubeMapNames[textureIndex]); - else - sprintf_s(indexedFileName, desc.texture.fileName.c_str(), textureIndex); - - TextureCache::Texture& texture = m_textures.Get(m_files, indexedFileName); - if (!texture.Valid()) - { - if (textureIndex == 0) - { - // try as a binary file - int binaryDims2D[2] = { desc.texture.binaryDims[0], desc.texture.binaryDims[1] * desc.texture.binaryDims[2] }; - TextureCache::Type dataType = (desc.texture.binaryType == GGUserFile_ImportedTexture_BinaryType::Float) ? TextureCache::Type::F32 : TextureCache::Type::U8; - TextureCache::Texture texture = LoadTextureFromBinaryFile(m_files, indexedFileName, binaryDims2D, desc.texture.binaryChannels, dataType); - - // If still invalid, bail out - if (!texture.Valid()) - { - if (FileExists(indexedFileName)) - m_logFn(LogLevel::Error, "Could not load texture. Unsupported type or format. \"%s\"", indexedFileName); - else - m_logFn(LogLevel::Error, "Could not load texture. File not found. \"%s\"", indexedFileName); - runtimeData.m_failed = true; - desc.state = ImportedResourceState::failed; - return false; - } - - // finalize - loadedTextures.push_back(texture); - m_fileWatcher.Add(indexedFileName, FileWatchOwner::TextureCache); + // copy pixel data + const char* src = fileData.GetBytes(); + int imageCount = 0; + newTexture.images.resize(newTexture.depth * mipCount); + for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + { + int mipDims[3] = { width, height, is3D ? depth : 1 }; + for (int mipIndex = 0; mipIndex < mipCount; ++mipIndex) + { + int mipSliceSize = mipDims[0] * mipDims[1] * formatInfo.bytesPerPixel; - // otherwise we are done. binary files only load a single file - loadedBinary = true; - break; - } - else - { - break; - } - } + TextureCache::Image& image = newTexture.images[imageCount]; + imageCount++; - loadedTextures.push_back(texture); - m_fileWatcher.Add(indexedFileName, FileWatchOwner::TextureCache); + for (size_t iz = 0; iz < mipDims[2]; ++iz) + { + size_t copyOffset = image.pixels.size(); - if (textureIndex > 0) - { - if (loadedTextures[0].width != texture.width || loadedTextures[0].height != texture.height && texture.type != loadedTextures[0].type || texture.channels != loadedTextures[0].channels) - { - m_logFn(LogLevel::Error, "Texture \"%s\" is the wrong size or type", indexedFileName); - runtimeData.m_failed = true; - desc.state = ImportedResourceState::failed; - return false; - } - } + image.pixels.resize(copyOffset + mipSliceSize); + memcpy(&image.pixels[copyOffset], src, mipSliceSize); - // only one texture allowed in a texture2D - if (node.dimension == TextureDimensionType::Texture2D) - break; + src += mipSliceSize; + } - // If there is no %i or %s in the filename, break - if (desc.texture.fileName.find("%i") == std::string::npos && desc.texture.fileName.find("%s") == std::string::npos) - break; + mipDims[0] = max(mipDims[0] / 2, 1); + mipDims[1] = max(mipDims[1] / 2, 1); - // cube maps are only allowed 6 textures - if (useCubeMapNames && textureIndex == 5) - break; - } + if (is3D) + mipDims[2] = max(mipDims[2] / 2, 1); + } + } - // if loaded as binary, break the singularly loaded image into multiple images if we should - if (loadedBinary && desc.texture.binaryDims[2] > 1) - { - int dataByteSize = (int)(loadedTextures[0].type == TextureCache::Type::F32) ? sizeof(float) : sizeof(uint8_t); - int imageSizeBytes = desc.texture.binaryDims[0] * desc.texture.binaryDims[1] * desc.texture.binaryChannels * dataByteSize; + // I'm being lazy about calculating how many 2d slices a 3d texture with mips needs + if (imageCount < newTexture.images.size()) + newTexture.images.resize(imageCount); - for (int z = 1; z < desc.texture.binaryDims[2]; ++z) - { - TextureCache::Texture newTexture = loadedTextures[0]; - newTexture.height = desc.texture.binaryDims[1]; - newTexture.pixels.resize(imageSizeBytes); + // return success + return newTexture; +} - unsigned char* dest = newTexture.pixels.data(); - const unsigned char* src = &loadedTextures[0].pixels[z * imageSizeBytes]; - memcpy(dest, src, imageSizeBytes); +bool GigiInterpreterPreviewWindowDX12::LoadTexture(std::vector& loadedTextures, const RenderGraphNode_Resource_Texture& node, RuntimeTypes::RenderGraphNode_Resource_Texture& runtimeData, std::string fileName, bool fileIsSRGB, const ImportedTextureBinaryDesc& binaryDesc, DXGI_FORMAT desiredFormat) +{ + if (!FileNameSafe(fileName.c_str())) + return false; - loadedTextures.push_back(newTexture); - } + bool useCubeMapNames = (fileName.find("%s") != std::string::npos); - loadedTextures[0].height = desc.texture.binaryDims[1]; - loadedTextures[0].pixels.resize(imageSizeBytes); - } + int textureIndex = -1; + while (1) + { + // make the next file name + textureIndex++; - // Ensure that cube maps have 6 images loaded - if (node.dimension == TextureDimensionType::TextureCube) - { - if (loadedTextures.size() != 6) - { - m_logFn(LogLevel::Error, "Cube map \"%s\" does not have 6 images, it has %i", node.name.c_str(), (int)loadedTextures.size()); - runtimeData.m_failed = true; - desc.state = ImportedResourceState::failed; - return false; - } - } + // If we are supposed to use cube map names, but ran out of cube map names, we are done. + if (useCubeMapNames && textureIndex >= 6) + break; - // make a DXGI_FORMAT_Info describing our loaded texture data - DXGI_FORMAT_Info textureFormatInfo; - switch (loadedTextures[0].type) - { - case TextureCache::Type::U8: textureFormatInfo = DXGI_FORMAT_INFO(uint8_t, loadedTextures[0].channels, desc.texture.fileIsSRGB); break; - case TextureCache::Type::F32: textureFormatInfo = DXGI_FORMAT_INFO(float, loadedTextures[0].channels, desc.texture.fileIsSRGB); break; - case TextureCache::Type::BC7: textureFormatInfo = desc.texture.fileIsSRGB ? Get_DXGI_FORMAT_Info(DXGI_FORMAT_BC7_UNORM_SRGB) : Get_DXGI_FORMAT_Info(DXGI_FORMAT_BC7_UNORM); break; - default: - { - desc.state = ImportedResourceState::failed; - return true; - } - } + // make the next file name + char indexedFileName[1024]; + if (useCubeMapNames) + sprintf_s(indexedFileName, fileName.c_str(), c_cubeMapNames[textureIndex]); + else + sprintf_s(indexedFileName, fileName.c_str(), textureIndex); - // tint the image if we should - std::vector allTintedPixels; - if (desc.texture.color[0] != 1.0f || desc.texture.color[1] != 1.0f || desc.texture.color[2] != 1.0f || desc.texture.color[3] != 1.0f) - { - if (textureFormatInfo.isCompressed) + // Load the file + TextureCache::Texture& texture = m_textures.Get(m_files, indexedFileName); + if (texture.Valid()) + { + // We need to combine slices of 3d textures, or split apart slices of 2d texture arrays + if (node.dimension == TextureDimensionType::Texture3D) + { + loadedTextures.push_back(texture); + loadedTextures[0].Ensure3D(); + } + else + { + bool success = texture.SplitByIndex([&loadedTextures](const TextureCache::Texture& texture) { - m_logFn(LogLevel::Error, "Texture \"%s\": cannot tint a compressed texture format", node.name.c_str()); - desc.state = ImportedResourceState::failed; - return false; + loadedTextures.push_back(texture); } + ); + if (!success) + return false; + } + } + // If the file couldn't be loaded, try as a binary file + else if (textureIndex == 0) + { + if (binaryDesc.format != TextureFormat::Any) + { + TextureCache::Texture binaryTexture = LoadTextureFromBinaryFile(m_files, indexedFileName, node.dimension, binaryDesc.size[0], binaryDesc.size[1], binaryDesc.size[2], binaryDesc.format); + if (!binaryTexture.Valid()) + return false; - std::vector tintedPixels(loadedTextures[0].pixels.size()); - for (const TextureCache::Texture& texture : loadedTextures) - { - switch (texture.type) - { - case TextureCache::Type::U8: - { - const unsigned char* srcPixel = texture.pixels.data(); - unsigned char* destPixel = tintedPixels.data(); - for (int pixelIndex = 0; pixelIndex < texture.width * texture.height; ++pixelIndex) - { - for (int channelIndex = 0; channelIndex < texture.channels; ++channelIndex) - { - *destPixel = (unsigned char)(float(*srcPixel) * desc.texture.color[channelIndex]); - srcPixel++; - destPixel++; - } - } - break; - } - case TextureCache::Type::F32: - { - const float* srcPixel = (float*)texture.pixels.data(); - float* destPixel = (float*)tintedPixels.data(); - for (int pixelIndex = 0; pixelIndex < texture.width * texture.height; ++pixelIndex) - { - for (int channelIndex = 0; channelIndex < texture.channels; ++channelIndex) - { - *destPixel = *srcPixel * desc.texture.color[channelIndex]; - srcPixel++; - destPixel++; - } - } - break; - } - default: - { - desc.state = ImportedResourceState::failed; - return true; - } - } - allTintedPixels.insert(allTintedPixels.end(), tintedPixels.begin(), tintedPixels.end()); - } + // We need to combine slices of 3d textures, or split apart slices of 2d texture arrays + if (node.dimension == TextureDimensionType::Texture3D) + { + loadedTextures.push_back(binaryTexture); + loadedTextures[0].Ensure3D(); } else { - for (const TextureCache::Texture& texture : loadedTextures) - allTintedPixels.insert(allTintedPixels.end(), texture.pixels.begin(), texture.pixels.end()); - } + bool success = binaryTexture.SplitByIndex([&loadedTextures](const TextureCache::Texture& texture) + { + loadedTextures.push_back(texture); + } + ); - // convert to the correct format - if (!ConvertPixelData(allTintedPixels, textureFormatInfo, allPixels, pixelsFormatInfo)) - { - desc.state = ImportedResourceState::failed; - return true; + if (!success) + return false; } - runtimeData.m_size[0] = loadedTextures[0].width; - runtimeData.m_size[1] = loadedTextures[0].height; - runtimeData.m_size[2] = (int)loadedTextures.size(); } - // else if we have a size - else if (desc.texture.size[0] > 0 && desc.texture.size[1] > 0) - { - // make the initialization value for a single pixel - std::vector initValue(pixelsFormatInfo.channelCount); - for (int i = 0; i < pixelsFormatInfo.channelCount; ++i) - initValue[i] = desc.texture.color[i]; - - // repeat that to make the whole texture. - std::vector srcPixels(desc.texture.size[0] * desc.texture.size[1] * desc.texture.size[2] * pixelsFormatInfo.channelCount * sizeof(float)); - for (int i = 0; i < desc.texture.size[0] * desc.texture.size[1] * desc.texture.size[2]; ++i) - memcpy(&srcPixels[i * pixelsFormatInfo.channelCount * sizeof(float)], initValue.data(), initValue.size() * sizeof(initValue[0])); - - // convert to the correct format - if (!ConvertPixelData(srcPixels, DXGI_FORMAT_INFO(float, pixelsFormatInfo.channelCount, desc.texture.fileIsSRGB), allPixels, pixelsFormatInfo)) - { - desc.state = ImportedResourceState::failed; - return true; - } - - runtimeData.m_size[0] = desc.texture.size[0]; - runtimeData.m_size[1] = desc.texture.size[1]; - runtimeData.m_size[2] = desc.texture.size[2]; - } - // otherwise, we have nothing to go on else - { - desc.state = ImportedResourceState::failed; - return true; - } + return false; + } + // it's ok to fail after the first image, since for indexed files, the numbers have to stop at some point! + else + { + break; + } - // Calculate mip count if needed - runtimeData.m_numMips = 1; - if (desc.texture.makeMips) - { - int maxSize = max(runtimeData.m_size[0], runtimeData.m_size[1]); - while (maxSize > 1) - { - maxSize /= 2; - runtimeData.m_numMips++; - } - } + // Watch this file for changes + m_fileWatcher.Add(indexedFileName, FileWatchOwner::TextureCache); - // We don't currently make mips for compressed texture formats - if (runtimeData.m_numMips > 1 && pixelsFormatInfo.isCompressed) + // Verify that all loaded textures are the same size and format + if (textureIndex > 0) + { + if (loadedTextures[0].width != texture.width || loadedTextures[0].height != texture.height && texture.format != loadedTextures[0].format) { - m_logFn(LogLevel::Error, "Texture \"%s\": Cannot make mips for a compressed texture format", node.name.c_str()); - desc.state = ImportedResourceState::failed; + m_logFn(LogLevel::Error, "Texture \"%s\" is the wrong size or type", indexedFileName); return false; } + } + + // If there is no %i or %s in the filename, break. We have found the only file. + if (fileName.find("%i") == std::string::npos && fileName.find("%s") == std::string::npos) + break; + } - // only let proper depth formats be allowed for use as a depth texture - if (node.accessedAs & (1 << (unsigned int)ShaderResourceAccessType::DepthTarget)) + // Ensure that cube maps have 6 images loaded + if (node.dimension == TextureDimensionType::TextureCube) + { + if (loadedTextures.size() != 6) + { + m_logFn(LogLevel::Error, "Cube map \"%s\" does not have 6 images, it has %i", node.name.c_str(), (int)loadedTextures.size()); + return false; + } + } + + // Force Texture2D to have one texture loaded max. This can happen if you load a dds into a texture 2d, since a dds can have multiple images inside of it, + // that get flattened into multiple loadedTextures + if (node.dimension == TextureDimensionType::Texture2D && loadedTextures.size() > 1) + loadedTextures.resize(1); + + // Translate format types based on sRGB flag + { + DXGI_FORMAT format = loadedTextures[0].format; + if (fileIsSRGB) + { + switch (format) { - if (!Get_DXGI_FORMAT_Info(runtimeData.m_format).isDepth) - { - runtimeData.m_renderGraphText = "Cannot create because texture is used as a depth target, but is not a depth format"; - return true; - } - } + case DXGI_FORMAT_R8G8B8A8_UNORM: format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; break; + case DXGI_FORMAT_BC7_UNORM: format = DXGI_FORMAT_BC7_UNORM_SRGB; break; - // UAV with stencil is not allowed - if (pixelsFormatInfo.isStencil && (node.accessedAs & (1 << (unsigned int)ShaderResourceAccessType::UAV))) + } + } + else + { + switch (format) { - runtimeData.m_renderGraphText = "Cannot create because texture is a stencil format, but is used with UAV access. This is not allowed."; - return true; + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: format = DXGI_FORMAT_R8G8B8A8_UNORM; break; + case DXGI_FORMAT_BC7_UNORM_SRGB: format = DXGI_FORMAT_BC7_UNORM; break; } + } + for (TextureCache::Texture& texture : loadedTextures) + texture.format = format; + } + + // Do format conversion if needed + for (TextureCache::Texture& texture : loadedTextures) + { + if (!ConvertPixelData(texture, desiredFormat)) + return false; + } + + // Smoosh all the slices of a 3d texture together if needed. + // This happens if you load a 3d texture from indexed images (filenames with %i in them) + if ((node.dimension == TextureDimensionType::Texture3D) && loadedTextures.size() > 1) + { + TextureCache::Texture& firstTexture = loadedTextures[0]; + for (size_t textureIndex = 1; textureIndex < loadedTextures.size(); ++textureIndex) + { + const TextureCache::Texture& texture = loadedTextures[textureIndex]; - // UAV with compressed texture types is not allowed - if (pixelsFormatInfo.isCompressed && (node.accessedAs & (1 << (unsigned int)ShaderResourceAccessType::UAV))) + for (size_t imageIndex = 0; imageIndex < firstTexture.images.size(); ++imageIndex) { - runtimeData.m_renderGraphText = "Cannot create because texture is a compressed format, but is used with UAV access. This is not allowed."; - return true; + TextureCache::Image& firstImage = firstTexture.images[imageIndex]; + const TextureCache::Image& image = texture.images[imageIndex]; + + size_t copyOffset = firstImage.pixels.size(); + size_t copySize = image.pixels.size(); + + firstImage.pixels.resize(copyOffset + copySize); + memcpy(&firstImage.pixels[copyOffset], image.pixels.data(), copySize); } - // Make a resource for the "live" texture which may be modified during running, and also for the initial state. - D3D12_RESOURCE_FLAGS resourceFlags = ShaderResourceAccessToD3D12_RESOURCE_FLAGs(node.accessedAs); - unsigned int size[3] = { (unsigned int)runtimeData.m_size[0], (unsigned int)runtimeData.m_size[1], (unsigned int)runtimeData.m_size[2] }; - std::string nodeNameInitialState = node.name + " Initial State"; - runtimeData.m_resourceInitialState = CreateTexture(m_device, size, runtimeData.m_numMips, runtimeData.m_format, resourceFlags, D3D12_RESOURCE_STATE_COPY_DEST, TextureDimensionTypeToResourceType(node.dimension), nodeNameInitialState.c_str()); - runtimeData.m_resource = CreateTexture(m_device, size, runtimeData.m_numMips, runtimeData.m_format, resourceFlags, D3D12_RESOURCE_STATE_COPY_DEST, TextureDimensionTypeToResourceType(node.dimension), node.name.c_str()); + firstTexture.depth += texture.depth; + } + loadedTextures.resize(1); + } + + return true; +} + +bool GigiInterpreterPreviewWindowDX12::CreateAndUploadTextures(const RenderGraphNode_Resource_Texture& node, RuntimeTypes::RenderGraphNode_Resource_Texture& runtimeData, std::vector& loadedTextures) +{ + // Validate texture usage + bool hasMips = loadedTextures[0].images.size() > 1; + bool wantsMips = runtimeData.m_numMips > 1; + bool wantsToMakeMips = wantsMips && !hasMips; + { + DXGI_FORMAT_Info formatInfo = Get_DXGI_FORMAT_Info(runtimeData.m_format); - // track the new resources for state transitions - m_transitions.Track(TRANSITION_DEBUG_INFO(runtimeData.m_resourceInitialState, D3D12_RESOURCE_STATE_COPY_DEST)); - m_transitions.Track(TRANSITION_DEBUG_INFO(runtimeData.m_resource, D3D12_RESOURCE_STATE_COPY_DEST)); + // We don't make mips for compressed texture formats + if (wantsToMakeMips && formatInfo.isCompressed) + { + m_logFn(LogLevel::Error, "Cannot make mips for a compressed texture format. Node \"%s\"", node.name.c_str()); + return false; + } - // Make the mips - std::vector> allPixelsMips(runtimeData.m_numMips > 1 ? runtimeData.m_numMips - 1 : 0); + // only let proper depth formats be allowed for use as a depth texture + if (node.accessedAs & (1 << (unsigned int)ShaderResourceAccessType::DepthTarget)) + { + if (!formatInfo.isDepth) { - int mipDims[3] = { runtimeData.m_size[0], runtimeData.m_size[1], runtimeData.m_size[2] }; - for (int mipIndex = 0; mipIndex < runtimeData.m_numMips - 1; ++mipIndex) - { - if (mipIndex == 0) - MakeMip(allPixels, allPixelsMips[0], pixelsFormatInfo, node.dimension, mipDims); - else - MakeMip(allPixelsMips[mipIndex - 1], allPixelsMips[mipIndex], pixelsFormatInfo, node.dimension, mipDims); - - mipDims[0] = max(mipDims[0] / 2, 1); - mipDims[1] = max(mipDims[1] / 2, 1); - if (node.dimension == TextureDimensionType::Texture3D) - mipDims[2] = max(mipDims[2] / 2, 1); - } + m_logFn(LogLevel::Error, "Cannot create because texture is used as a depth target, but is not a depth format. Node \"%s\"", node.name.c_str()); + return false; } + } - // copy everything to GPU - if (pixelsFormatInfo.isCompressed) - { - // Make an upload buffer - int unalignedPitch = (int)allPixels.size(); - int alignedPitch = ALIGN(D3D12_TEXTURE_DATA_PITCH_ALIGNMENT, unalignedPitch); - UploadBufferTracker::Buffer* uploadBuffer = m_uploadBufferTracker.GetBuffer(m_device, alignedPitch, false); + // UAV with stencil is not allowed + if (formatInfo.isStencil && (node.accessedAs & (1 << (unsigned int)ShaderResourceAccessType::UAV))) + { + m_logFn(LogLevel::Error, "Cannot create because texture is a stencil format, but is used with UAV access. This is not allowed. Node \"%s\"", node.name.c_str()); + return false; + } - // write the pixels into the upload buffer + // UAV with compressed texture types is not allowed + if (formatInfo.isCompressed && (node.accessedAs & (1 << (unsigned int)ShaderResourceAccessType::UAV))) + { + m_logFn(LogLevel::Error, "Cannot create because texture is a compressed format, but is used with UAV access. This is not allowed. Node \"%s\"", node.name.c_str()); + return false; + } + } + + // Make a resource for the "live" texture which may be modified during running, and also for the initial state. + D3D12_RESOURCE_FLAGS resourceFlags = ShaderResourceAccessToD3D12_RESOURCE_FLAGs(node.accessedAs); + unsigned int size[3] = { (unsigned int)runtimeData.m_size[0], (unsigned int)runtimeData.m_size[1], (unsigned int)runtimeData.m_size[2] }; + std::string nodeNameInitialState = node.name + " Initial State"; + runtimeData.m_resourceInitialState = CreateTexture(m_device, size, runtimeData.m_numMips, runtimeData.m_format, resourceFlags, D3D12_RESOURCE_STATE_COPY_DEST, TextureDimensionTypeToResourceType(node.dimension), nodeNameInitialState.c_str()); + runtimeData.m_resource = CreateTexture(m_device, size, runtimeData.m_numMips, runtimeData.m_format, resourceFlags, D3D12_RESOURCE_STATE_COPY_DEST, TextureDimensionTypeToResourceType(node.dimension), node.name.c_str()); + + // track the new resources for state transitions + m_transitions.Track(TRANSITION_DEBUG_INFO(runtimeData.m_resourceInitialState, D3D12_RESOURCE_STATE_COPY_DEST)); + m_transitions.Track(TRANSITION_DEBUG_INFO(runtimeData.m_resource, D3D12_RESOURCE_STATE_COPY_DEST)); + + // Make the mips if we should + if (wantsToMakeMips) + { + DXGI_FORMAT_Info formatInfo = Get_DXGI_FORMAT_Info(runtimeData.m_format); + + int mipDims[3] = { runtimeData.m_size[0], runtimeData.m_size[1], runtimeData.m_size[2] }; + + for (TextureCache::Texture& texture : loadedTextures) + texture.images.resize(runtimeData.m_numMips); + + for (int mipIndex = 0; mipIndex < runtimeData.m_numMips - 1; ++mipIndex) + { + for (TextureCache::Texture& texture : loadedTextures) + MakeMip(texture.images[mipIndex].pixels, texture.images[mipIndex + 1].pixels, formatInfo, node.dimension, mipDims); + + mipDims[0] = max(mipDims[0] / 2, 1); + mipDims[1] = max(mipDims[1] / 2, 1); + if (node.dimension == TextureDimensionType::Texture3D) + mipDims[2] = max(mipDims[2] / 2, 1); + } + + for (TextureCache::Texture& texture : loadedTextures) + texture.mips = runtimeData.m_numMips; + } + + // copy everything to GPU + { + D3D12_RESOURCE_DESC resourceDesc = runtimeData.m_resource->GetDesc(); + + int arrayCount = (int)loadedTextures.size(); + int mipCount = (int)loadedTextures[0].mips; + + for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + { + for (int mipIndex = 0; mipIndex < mipCount; ++mipIndex) + { + // Calculate the subresource index + unsigned int subResourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, mipCount, arrayCount); + + // gather stats about the current sub resource + std::vector layoutsMem((sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64))); + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layout = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutsMem.data(); + unsigned int numRows = 0; + size_t unalignedPitch = 0; + m_device->GetCopyableFootprints(&resourceDesc, subResourceIndex, 1, 0, layout, &numRows, &unalignedPitch, nullptr); + size_t alignedPitch = layout->Footprint.RowPitch; + size_t bufferSize = numRows * alignedPitch * layout->Footprint.Depth; + + // Allocate an upload buffer + UploadBufferTracker::Buffer* uploadBuffer = m_uploadBufferTracker.GetBuffer(m_device, bufferSize, false); + + // map the memory + D3D12_RANGE readRange; + readRange.Begin = 1; + readRange.End = 0; + unsigned char* destPixels = nullptr; + HRESULT hr = uploadBuffer->buffer->Map(0, &readRange, reinterpret_cast(&destPixels)); + if (FAILED(hr)) + return false; + + // Copy the texture data + for (unsigned int iz = 0; iz < layout->Footprint.Depth; ++iz) { - unsigned char* destPixels = nullptr; - HRESULT hr = uploadBuffer->buffer->Map(0, nullptr, reinterpret_cast(&destPixels)); - if (hr) - return false; + for (unsigned int iy = 0; iy < numRows; ++iy) + { + size_t srcBegin = (iz * numRows + iy) * unalignedPitch; + size_t srcEnd = srcBegin + unalignedPitch; - memcpy(destPixels, allPixels.data(), allPixels.size()); + if (loadedTextures[arrayIndex].images[mipIndex].pixels.size() < srcEnd) + return false; - uploadBuffer->buffer->Unmap(0, nullptr); + const unsigned char* src = &loadedTextures[arrayIndex].images[mipIndex].pixels[srcBegin]; + unsigned char* dest = &destPixels[(iz * numRows + iy) * alignedPitch]; + memcpy(dest, src, unalignedPitch); + } } + // unmap the memory + uploadBuffer->buffer->Unmap(0, nullptr); + // Copy the upload buffer into m_resourceInitialState { - UINT subresourceIndex = D3D12CalcSubresource(0, 0, 0, 1, 1); - - D3D12_RESOURCE_DESC resourceDesc = runtimeData.m_resourceInitialState->GetDesc(); - std::vector layoutMem(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)); - D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layout = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutMem.data(); - m_device->GetCopyableFootprints(&resourceDesc, subresourceIndex, 1, 0, layout, nullptr, nullptr, nullptr); - D3D12_TEXTURE_COPY_LOCATION src = {}; src.pResource = uploadBuffer->buffer; src.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; @@ -964,96 +894,159 @@ bool GigiInterpreterPreviewWindowDX12::OnNodeActionImported(const RenderGraphNod D3D12_TEXTURE_COPY_LOCATION dest = {}; dest.pResource = runtimeData.m_resourceInitialState; dest.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; - dest.SubresourceIndex = subresourceIndex; + dest.SubresourceIndex = subResourceIndex; m_commandList->CopyTextureRegion(&dest, 0, 0, 0, &src, nullptr); } } - else + } + } + + return true; +} + +bool GigiInterpreterPreviewWindowDX12::OnNodeActionImported(const RenderGraphNode_Resource_Texture& node, RuntimeTypes::RenderGraphNode_Resource_Texture& runtimeData, NodeAction nodeAction) +{ + // If this resource is imported, add it to the list of imported resources. + // Let resource creation happen during execute, since the desired format or size can change due to runtime conditions. + if (nodeAction == NodeAction::Init) + { + if (m_importedResources.count(node.name) == 0) + m_importedResources[node.name] = ImportedResourceDesc(true); + m_importedResources[node.name].stale = false; + m_importedResources[node.name].nodeIndex = node.nodeIndex; + m_importedResources[node.name].resourceIndex = 0; // corresponds to the initial state resource being the first viewable resource + m_importedResources[node.name].texture.textureType = TextureDimensionTypeToViewableResourceType(node.dimension); + return true; + } + + if (nodeAction == NodeAction::Execute) + { + ImportedResourceDesc& desc = m_importedResources[node.name]; + + if (desc.state == ImportedResourceState::failed) + { + runtimeData.m_renderGraphText = "\nCreation Failed"; + return true; + } + + // (Re)Create a texture, as necessary + // if the texture isn't dirty, nothing to do + // if the format is "any", wait until it isn't + if (desc.state == ImportedResourceState::dirty && desc.texture.format != TextureFormat::Any) + { + // Release any resources which may have previously existed + runtimeData.Release(*this); + + std::vector loadedTextures; + + // Load a file from disk if we have a file name + if (!desc.texture.fileName.empty()) { - int mipDims[3] = { runtimeData.m_size[0], runtimeData.m_size[1], runtimeData.m_size[2] }; - for (int mipIndex = 0; mipIndex < runtimeData.m_numMips; ++mipIndex) + // Load the textures + DXGI_FORMAT format = TextureFormatToDXGI_FORMAT(desc.texture.format); + if (!LoadTexture(loadedTextures, node, runtimeData, desc.texture.fileName, desc.texture.fileIsSRGB, desc.texture.binaryDesc, format) || loadedTextures.size() == 0) { - std::vector& srcPixels = (mipIndex > 0) - ? allPixelsMips[mipIndex - 1] - : allPixels; - - // Set up variables to handle 3d textures (single sub resource) vs other times (a sub resource per 2d texture) - int arrayCount = 0; - int iyCount = mipDims[1]; - int izCount = 0; - if (node.dimension == TextureDimensionType::Texture3D) - { - arrayCount = 1; - izCount = mipDims[2]; - } - else - { - arrayCount = mipDims[2]; - izCount = 1; - } + m_logFn(LogLevel::Error, "Could not load texture \"%s\" for node \"%s\"", desc.texture.fileName.c_str(), node.name.c_str()); + runtimeData.m_failed = true; + desc.state = ImportedResourceState::failed; + return true; + } + } + // else make a solid color texture + else if (desc.texture.size[0] > 0 && desc.texture.size[1] > 0 && desc.texture.size[2] > 0) + { + // make a new 2D texture + TextureCache::Texture newTexture; + newTexture.width = desc.texture.size[0]; + newTexture.height = desc.texture.size[1]; + newTexture.mips = 1; + newTexture.format = DXGI_FORMAT_R32G32B32A32_FLOAT; + newTexture.images.resize(1); + + if ((node.dimension == TextureDimensionType::Texture3D)) + { + newTexture.depth = desc.texture.size[2]; - int allPixelsStride = (int)srcPixels.size() / arrayCount; + // Fill it with solid color + newTexture.images[0].pixels.resize(newTexture.width * newTexture.height * newTexture.depth * sizeof(float) * 4); + for (size_t i = 0; i < desc.texture.size[0] * desc.texture.size[1] * desc.texture.size[2]; ++i) + memcpy(&newTexture.images[0].pixels[i * sizeof(float) * 4], desc.texture.color, sizeof(float) * 4); - for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) + // Convert it to the format we want + if (!ConvertPixelData(newTexture, TextureFormatToDXGI_FORMAT(desc.texture.format))) { - unsigned int arrayIndexStart = allPixelsStride * arrayIndex; + runtimeData.m_failed = true; + desc.state = ImportedResourceState::failed; + return true; + } - // Make an upload buffer - int unalignedPitch = mipDims[0] * pixelsFormatInfo.bytesPerPixel; - int alignedPitch = ALIGN(D3D12_TEXTURE_DATA_PITCH_ALIGNMENT, unalignedPitch); - UploadBufferTracker::Buffer* uploadBuffer = m_uploadBufferTracker.GetBuffer(m_device, alignedPitch * iyCount * izCount, false); + // Add it + loadedTextures.push_back(newTexture); + } + else + { + newTexture.depth = 1; - // write the pixels into the upload buffer - { - unsigned char* destPixels = nullptr; - HRESULT hr = uploadBuffer->buffer->Map(0, nullptr, reinterpret_cast(&destPixels)); - if (hr) - return false; - - for (int iz = 0; iz < izCount; ++iz) - { - for (int iy = 0; iy < iyCount; ++iy) - { - const unsigned char* src = &srcPixels[arrayIndexStart + (iz * iyCount + iy) * unalignedPitch]; - unsigned char* dest = &destPixels[(iz * iyCount + iy) * alignedPitch]; - memcpy(dest, src, unalignedPitch); - } - } - - uploadBuffer->buffer->Unmap(0, nullptr); - } + // Fill it with solid color + newTexture.images[0].pixels.resize(newTexture.width * newTexture.height * sizeof(float) * 4); + for (size_t i = 0; i < desc.texture.size[0] * desc.texture.size[1]; ++i) + memcpy(&newTexture.images[0].pixels[i * sizeof(float) * 4], desc.texture.color, sizeof(float) * 4); - // Copy the upload buffer into m_resourceInitialState - { - UINT subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, runtimeData.m_numMips, arrayCount); + // Convert it to the format we want + if (!ConvertPixelData(newTexture, TextureFormatToDXGI_FORMAT(desc.texture.format))) + { + runtimeData.m_failed = true; + desc.state = ImportedResourceState::failed; + return true; + } - D3D12_RESOURCE_DESC resourceDesc = runtimeData.m_resourceInitialState->GetDesc(); - std::vector layoutMem(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)); - D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layout = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutMem.data(); - m_device->GetCopyableFootprints(&resourceDesc, subresourceIndex, 1, 0, layout, nullptr, nullptr, nullptr); + // Repeatedly add this texture to fulfill "depth" aka desc.texture.size[2] + for (int iz = 0; iz < desc.texture.size[2]; ++iz) + loadedTextures.push_back(newTexture); + } + } + // otherwise, we have nothing to go on + else + { + runtimeData.m_failed = true; + desc.state = ImportedResourceState::failed; + return true; + } - D3D12_TEXTURE_COPY_LOCATION src = {}; - src.pResource = uploadBuffer->buffer; - src.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; - src.PlacedFootprint = *layout; + // Fill out the runtime data + bool is3D = (node.dimension == TextureDimensionType::Texture3D); + runtimeData.m_size[0] = loadedTextures[0].width; + runtimeData.m_size[1] = loadedTextures[0].height; + runtimeData.m_size[2] = is3D ? loadedTextures[0].depth : (int)loadedTextures.size(); + runtimeData.m_format = loadedTextures[0].format; + runtimeData.m_failed = false; - D3D12_TEXTURE_COPY_LOCATION dest = {}; - dest.pResource = runtimeData.m_resourceInitialState; - dest.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; - dest.SubresourceIndex = subresourceIndex; + // Calculate mip count if needed + runtimeData.m_numMips = (int)loadedTextures[0].mips; + if (desc.texture.makeMips) + { + int maxSize = max(runtimeData.m_size[0], runtimeData.m_size[1]); - m_commandList->CopyTextureRegion(&dest, 0, 0, 0, &src, nullptr); - } - } + if (node.dimension == TextureDimensionType::Texture3D) + maxSize = max(maxSize, runtimeData.m_size[2]); - mipDims[0] = max(mipDims[0] / 2, 1); - mipDims[1] = max(mipDims[1] / 2, 1); - if (node.dimension == TextureDimensionType::Texture3D) - mipDims[2] = max(mipDims[2] / 2, 1); + runtimeData.m_numMips = 1; + while (maxSize > 1) + { + maxSize /= 2; + runtimeData.m_numMips++; } } + if (!CreateAndUploadTextures(node, runtimeData, loadedTextures)) + { + m_logFn(LogLevel::Error, "Could not create resource for node \"%s\"", node.name.c_str()); + runtimeData.m_failed = true; + desc.state = ImportedResourceState::failed; + return false; + } + // Note that the resource wants to be reset to the initial state. runtimeData.m_resourceWantsReset = true; @@ -1100,273 +1093,110 @@ bool GigiInterpreterPreviewWindowDX12::OnNodeActionNotImported(const RenderGraph } runtimeData.m_renderGraphText = ss.str(); - } - else - { - std::vector loadedTextures; - - if (hasFileName) - { - if (runtimeData.m_resource) - { - desiredSize[0] = runtimeData.m_size[0]; - desiredSize[1] = runtimeData.m_size[1]; - desiredSize[2] = runtimeData.m_size[2]; - } - else - { - bool useCubeMapNames = (fullLoadFileName.find("%s") != std::string::npos); - int textureIndex = -1; - while (1) - { - // make the next file name - textureIndex++; - char indexedFileName[1024]; - if (useCubeMapNames) - sprintf_s(indexedFileName, fullLoadFileName.c_str(), c_cubeMapNames[textureIndex]); - else - sprintf_s(indexedFileName, fullLoadFileName.c_str(), textureIndex); - - TextureCache::Texture& texture = m_textures.Get(m_files, indexedFileName); - if (!texture.Valid()) - { - if (textureIndex == 0) - { - m_logFn(LogLevel::Error, "Could not load texture \"%s\"", indexedFileName); - runtimeData.m_failed = true; - return false; - } - else - { - break; - } - } - loadedTextures.push_back(texture); - m_fileWatcher.Add(indexedFileName, FileWatchOwner::TextureCache); - - if (textureIndex > 0) - { - if (desiredSize[0] != texture.width || desiredSize[1] != texture.height && texture.type != loadedTextures[0].type || texture.channels != loadedTextures[0].channels) - { - m_logFn(LogLevel::Error, "Texture \"%s\" is the wrong size or type", indexedFileName); - runtimeData.m_failed = true; - return false; - } - } - else - { - desiredSize[0] = texture.width; - desiredSize[1] = texture.height; - } - - // only one texture allowed in a texture2D - if (node.dimension == TextureDimensionType::Texture2D) - break; - - // If there is no %i or %s in the filename, break - if (fullLoadFileName.find("%i") == std::string::npos && fullLoadFileName.find("%s") == std::string::npos) - break; - - // cube maps are only allowed 6 textures - if (useCubeMapNames && textureIndex == 5) - break; - } - desiredSize[2] = (int)loadedTextures.size(); + return true; + } - // Ensure that cube maps have 6 images loaded - if (node.dimension == TextureDimensionType::TextureCube) - { - if (loadedTextures.size() != 6) - { - m_logFn(LogLevel::Error, "Cube map \"%s\" does not have 6 images, it has %i", node.name.c_str(), (int)loadedTextures.size()); - runtimeData.m_failed = true; - return false; - } - } - } - } + std::vector loadedTextures; - // Calculate desired mip count - int desiredMips = node.numMips; - if (desiredMips == 0) + // if we have a filename, our size comes from the image file + if (hasFileName) + { + // If we already have a resource made, we know the size + if (runtimeData.m_resource) { - int maxSize = max(desiredSize[0], desiredSize[1]); - desiredMips = 1; - while (maxSize > 1) - { - maxSize /= 2; - desiredMips++; - } + desiredSize[0] = runtimeData.m_size[0]; + desiredSize[1] = runtimeData.m_size[1]; + desiredSize[2] = runtimeData.m_size[2]; } - - // (re) create the resource if we should - if (!runtimeData.m_resource || runtimeData.m_format != desiredFormat || runtimeData.m_size[0] != desiredSize[0] || runtimeData.m_size[1] != desiredSize[1] || runtimeData.m_size[2] != desiredSize[2] || runtimeData.m_numMips != desiredMips) + // else we load the texture and get the size from that + else { - // Release any resources which may have previously existed - runtimeData.Release(*this); - - // set the format and size - runtimeData.m_format = desiredFormat; - runtimeData.m_size[0] = desiredSize[0]; - runtimeData.m_size[1] = desiredSize[1]; - runtimeData.m_size[2] = desiredSize[2]; - runtimeData.m_numMips = desiredMips; - - // UAV with stencil is not allowed - DXGI_FORMAT_Info pixelsFormatInfo = Get_DXGI_FORMAT_Info(runtimeData.m_format); - if (pixelsFormatInfo.isStencil && (node.accessedAs & (1 << (unsigned int)ShaderResourceAccessType::UAV))) - { - runtimeData.m_renderGraphText = "Cannot create because texture is a stencil format, but is used with UAV access"; - return true; - } - - // Make a resource for the "live" texture which may be modified during running, and also for the initial state. - D3D12_RESOURCE_FLAGS resourceFlags = ShaderResourceAccessToD3D12_RESOURCE_FLAGs(node.accessedAs); - unsigned int size[3] = { (unsigned int)desiredSize[0], (unsigned int)desiredSize[1], (unsigned int)desiredSize[2] }; - std::string nodeNameInitialState = node.name + " Initial State"; - runtimeData.m_resourceInitialState = CreateTexture(m_device, size, desiredMips, runtimeData.m_format, resourceFlags, D3D12_RESOURCE_STATE_COPY_DEST, TextureDimensionTypeToResourceType(node.dimension), nodeNameInitialState.c_str()); - runtimeData.m_resource = CreateTexture(m_device, size, desiredMips, runtimeData.m_format, resourceFlags, D3D12_RESOURCE_STATE_COPY_DEST, TextureDimensionTypeToResourceType(node.dimension), node.name.c_str()); - - // track the new resources for state transitions - m_transitions.Track(TRANSITION_DEBUG_INFO(runtimeData.m_resourceInitialState, D3D12_RESOURCE_STATE_COPY_DEST)); - m_transitions.Track(TRANSITION_DEBUG_INFO(runtimeData.m_resource, D3D12_RESOURCE_STATE_COPY_DEST)); - - if (hasFileName) - { - // get the texture info - TextureCache::Texture& firstTexture = loadedTextures[0]; + // Load the textures + ImportedTextureBinaryDesc binaryDesc; + if (!LoadTexture(loadedTextures, node, runtimeData, fullLoadFileName, node.loadFileNameAsSRGB, binaryDesc, desiredFormat) || loadedTextures.size() == 0) + return false; + + // Set the desired size, now that we know it + desiredSize[0] = loadedTextures[0].width; + desiredSize[1] = loadedTextures[0].height; + desiredSize[2] = (node.dimension == TextureDimensionType::Texture3D) ? loadedTextures[0].depth : (int)loadedTextures.size(); + } + } - // make a DXGI_FORMAT_Info describing our loaded texture data - DXGI_FORMAT_Info textureFormatInfo; - switch (firstTexture.type) - { - case TextureCache::Type::U8: textureFormatInfo = DXGI_FORMAT_INFO(uint8_t, firstTexture.channels, node.loadFileNameAsSRGB); break; - case TextureCache::Type::F32: textureFormatInfo = DXGI_FORMAT_INFO(float, firstTexture.channels, node.loadFileNameAsSRGB); break; - case TextureCache::Type::BC7: textureFormatInfo = node.loadFileNameAsSRGB ? Get_DXGI_FORMAT_Info(DXGI_FORMAT_BC7_UNORM_SRGB) : Get_DXGI_FORMAT_Info(DXGI_FORMAT_BC7_UNORM); break; - default: - { - return false; - } - } + // Calculate desired mip count + int desiredMips = (int)node.numMips; + if (hasFileName) + { + if (runtimeData.m_resource) + desiredMips = runtimeData.m_numMips; + if (loadedTextures.size() > 0 && loadedTextures[0].images.size() > 1) + desiredMips = (int)loadedTextures[0].mips; + } + if (desiredMips == 0) + { + int maxSize = max(desiredSize[0], desiredSize[1]); - // convert all the textures into a single bufer - std::vector allPixels; - DXGI_FORMAT_Info pixelsFormatInfo = Get_DXGI_FORMAT_Info(runtimeData.m_format); - for (size_t textureIndex = 0; textureIndex < loadedTextures.size(); ++textureIndex) - { - std::vector pixelsConverted; - if (!ConvertPixelData(loadedTextures[textureIndex].pixels, textureFormatInfo, pixelsConverted, pixelsFormatInfo)) - return false; + if (node.dimension == TextureDimensionType::Texture3D) + maxSize = max(maxSize, runtimeData.m_size[2]); - allPixels.insert(allPixels.end(), pixelsConverted.begin(), pixelsConverted.end()); - } + desiredMips = 1; + while (maxSize > 1) + { + maxSize /= 2; + desiredMips++; + } + } - // Make the mips - std::vector> allPixelsMips(desiredMips > 1 ? desiredMips - 1 : 0); - { - int mipDims[3] = { runtimeData.m_size[0], runtimeData.m_size[1], runtimeData.m_size[2] }; - for (int mipIndex = 0; mipIndex < desiredMips - 1; ++mipIndex) - { - if (mipIndex == 0) - MakeMip(allPixels, allPixelsMips[0], pixelsFormatInfo, node.dimension, mipDims); - else - MakeMip(allPixelsMips[mipIndex - 1], allPixelsMips[mipIndex], pixelsFormatInfo, node.dimension, mipDims); - - mipDims[0] = max(mipDims[0] / 2, 1); - mipDims[1] = max(mipDims[1] / 2, 1); - if (node.dimension == TextureDimensionType::Texture3D) - mipDims[2] = max(mipDims[2] / 2, 1); - } - } + // (re) create the resource if we should + if (!runtimeData.m_resource || runtimeData.m_format != desiredFormat || runtimeData.m_size[0] != desiredSize[0] || runtimeData.m_size[1] != desiredSize[1] || runtimeData.m_size[2] != desiredSize[2] || runtimeData.m_numMips != desiredMips) + { + // Release any resources which may have previously existed + runtimeData.Release(*this); - // copy everything to GPU - int mipDims[3] = { runtimeData.m_size[0], runtimeData.m_size[1], runtimeData.m_size[2] }; - for (int mipIndex = 0; mipIndex < runtimeData.m_numMips; ++mipIndex) - { - std::vector& srcPixels = (mipIndex > 0) - ? allPixelsMips[mipIndex - 1] - : allPixels; - - // Set up variables to handle 3d textures (single sub resource) vs other times (a sub resource per 2d texture) - int arrayCount = 0; - int iyCount = mipDims[1]; - int izCount = 0; - if (node.dimension == TextureDimensionType::Texture3D) - { - arrayCount = 1; - izCount = mipDims[2]; - } - else - { - arrayCount = mipDims[2]; - izCount = 1; - } + // set the format and size + runtimeData.m_format = desiredFormat; + runtimeData.m_size[0] = desiredSize[0]; + runtimeData.m_size[1] = desiredSize[1]; + runtimeData.m_size[2] = desiredSize[2]; + runtimeData.m_numMips = desiredMips; - int allPixelsStride = (int)srcPixels.size() / arrayCount; + // If we don't have a filename, make textures to spec and zero initialize + if (!hasFileName) + { + DXGI_FORMAT_Info desiredFormatInfo = Get_DXGI_FORMAT_Info(desiredFormat); - for (int arrayIndex = 0; arrayIndex < arrayCount; ++arrayIndex) - { - unsigned int arrayIndexStart = allPixelsStride * arrayIndex; - - // Make an upload buffer - int unalignedPitch = mipDims[0] * pixelsFormatInfo.bytesPerPixel; - int alignedPitch = ALIGN(D3D12_TEXTURE_DATA_PITCH_ALIGNMENT, unalignedPitch); - UploadBufferTracker::Buffer* uploadBuffer = m_uploadBufferTracker.GetBuffer(m_device, alignedPitch * iyCount * izCount, false); - - // write the pixels into the upload buffer - { - unsigned char* destPixels = nullptr; - HRESULT hr = uploadBuffer->buffer->Map(0, nullptr, reinterpret_cast(&destPixels)); - if (hr) - return false; - - for (int iz = 0; iz < izCount; ++iz) - { - for (int iy = 0; iy < iyCount; ++iy) - { - const unsigned char* src = &srcPixels[arrayIndexStart + (iz * iyCount + iy) * unalignedPitch]; - unsigned char* dest = &destPixels[(iz * iyCount + iy) * alignedPitch]; - memcpy(dest, src, unalignedPitch); - } - } - - uploadBuffer->buffer->Unmap(0, nullptr); - } - - // Copy the upload buffer into m_resourceInitialState - { - UINT subresourceIndex = D3D12CalcSubresource(mipIndex, arrayIndex, 0, runtimeData.m_numMips, arrayCount); - - D3D12_RESOURCE_DESC resourceDesc = runtimeData.m_resourceInitialState->GetDesc(); - std::vector layoutMem(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)); - D3D12_PLACED_SUBRESOURCE_FOOTPRINT* layout = (D3D12_PLACED_SUBRESOURCE_FOOTPRINT*)layoutMem.data(); - m_device->GetCopyableFootprints(&resourceDesc, subresourceIndex, 1, 0, layout, nullptr, nullptr, nullptr); - - D3D12_TEXTURE_COPY_LOCATION src = {}; - src.pResource = uploadBuffer->buffer; - src.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; - src.PlacedFootprint = *layout; - - D3D12_TEXTURE_COPY_LOCATION dest = {}; - dest.pResource = runtimeData.m_resourceInitialState; - dest.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; - dest.SubresourceIndex = subresourceIndex; - - m_commandList->CopyTextureRegion(&dest, 0, 0, 0, &src, nullptr); - } - } + TextureCache::Texture texture; + texture.width = desiredSize[0]; + texture.height = desiredSize[1]; + texture.mips = 1; + texture.format = desiredFormat; + texture.images.resize(1); - mipDims[0] = max(mipDims[0] / 2, 1); - mipDims[1] = max(mipDims[1] / 2, 1); - if (node.dimension == TextureDimensionType::Texture3D) - mipDims[2] = max(mipDims[2] / 2, 1); - } + if (node.dimension == TextureDimensionType::Texture3D) + { + texture.depth = desiredSize[2]; + texture.images[0].pixels.resize(texture.width* texture.height* texture.depth* desiredFormatInfo.bytesPerPixel, 0); + loadedTextures.push_back(texture); } + else + { + texture.depth = 1; + texture.images[0].pixels.resize(texture.width * texture.height * desiredFormatInfo.bytesPerPixel, 0); + for (int iz = 0; iz < desiredSize[2]; ++iz) + loadedTextures.push_back(texture); + } + } - // Note that the resource wants to be reset to the initial state. - runtimeData.m_resourceWantsReset = true; + if (!CreateAndUploadTextures(node, runtimeData, loadedTextures)) + { + m_logFn(LogLevel::Error, "Could not create resource for node \"%s\"", node.name.c_str()); + runtimeData.m_failed = true; + return true; } + + // Note that the resource wants to be reset to the initial state. + runtimeData.m_resourceWantsReset = true; } } diff --git a/GigiViewerDX12/Interpreter/RuntimeNodeTypes.h b/GigiViewerDX12/Interpreter/RuntimeNodeTypes.h index 86beadf7..dc11daac 100644 --- a/GigiViewerDX12/Interpreter/RuntimeNodeTypes.h +++ b/GigiViewerDX12/Interpreter/RuntimeNodeTypes.h @@ -36,9 +36,10 @@ struct RuntimeTypes Type m_type = Type::Texture2D; std::string m_displayName; - ID3D12Resource* m_resource = nullptr; // Textures: Always a 2D slice of the resource. Buffer: The full resource. - ID3D12Resource* m_resourceReadback = nullptr; // Textures: Always a full subresource of the resource. Buffer: the full resource. - DXGI_FORMAT m_format = DXGI_FORMAT_FORCE_UINT; + ID3D12Resource* m_resource = nullptr; // Textures: The 2D slice of the resource being viewed (specific index or z, and specific mip). Format m_resourceFormat. Buffer: The full resource. + DXGI_FORMAT m_format = DXGI_FORMAT_FORCE_UINT; // The viewable format (like DXGI_FORMAT_R8_UINT instead of DXGI_FORMAT_X32_TYPELESS_G8X24_UINT). THe format of m_resource + ID3D12Resource* m_resourceReadback = nullptr; // The full resource, all indices and mips. Format m_formatReadback, the format of the source resource. + D3D12_RESOURCE_DESC m_origResourceDesc; // The desc of the resource we are reading back. Useful to decode the "untyped" readback buffer memory int m_formatCount = 1; // A float4x4 would need 4 float4s, so this would be 4 in that case and the format would be for float4. int m_size[3] = { 0, 0, 0 }; int m_numMips = 1; diff --git a/GigiViewerDX12/ViewerPython.cpp b/GigiViewerDX12/ViewerPython.cpp index d8b94334..f0e998fb 100644 --- a/GigiViewerDX12/ViewerPython.cpp +++ b/GigiViewerDX12/ViewerPython.cpp @@ -218,12 +218,10 @@ static PyObject* Python_SetWantReadback(PyObject* self, PyObject* args) { const char* viewableResourceName = nullptr; int wantsReadback = 1; - int arrayIndex = 0; - int mipIndex = 0; - if (!PyArg_ParseTuple(args, "s|pii:Python_SetWantReadback", &viewableResourceName, &wantsReadback, &arrayIndex, &mipIndex)) + if (!PyArg_ParseTuple(args, "s|p:Python_SetWantReadback", &viewableResourceName, &wantsReadback)) return PyErr_Format(PyExc_TypeError, "type error in " __FUNCTION__ "()"); - g_interface->SetWantReadback(viewableResourceName, wantsReadback != 0, arrayIndex, mipIndex); + g_interface->SetWantReadback(viewableResourceName, wantsReadback != 0); Py_INCREF(Py_None); return Py_None; @@ -232,12 +230,14 @@ static PyObject* Python_SetWantReadback(PyObject* self, PyObject* args) static PyObject* Python_Readback(PyObject* self, PyObject* args) { const char* viewableResourceName = nullptr; - if (!PyArg_ParseTuple(args, "s:Python_Readback", &viewableResourceName)) + int arrayIndex = 0; + int mipIndex = 0; + if (!PyArg_ParseTuple(args, "s|ii:Python_Readback", &viewableResourceName, &arrayIndex, &mipIndex)) return PyErr_Format(PyExc_TypeError, "type error in " __FUNCTION__ "()"); // Get the data GigiArray data; - bool success = g_interface->Readback(viewableResourceName, data); + bool success = g_interface->Readback(viewableResourceName, arrayIndex, mipIndex, data); // return the result PyObject* ret = PyTuple_New(2); @@ -503,19 +503,6 @@ static PyObject* Python_SetImportedTextureSize(PyObject* self, PyObject* args) return Py_None; } -static PyObject* Python_SetImportedTextureBinaryType(PyObject* self, PyObject* args) -{ - const char* textureName = nullptr; - int type; - if (!PyArg_ParseTuple(args, "si:Python_SetImportedTextureBinaryType", &textureName, &type)) - return PyErr_Format(PyExc_TypeError, "type error in " __FUNCTION__ "()"); - - g_interface->SetImportedTextureBinaryType(textureName, (GGUserFile_ImportedTexture_BinaryType)type); - - Py_INCREF(Py_None); - return Py_None; -} - static PyObject* Python_SetImportedTextureBinarySize(PyObject* self, PyObject* args) { const char* textureName = nullptr; @@ -529,14 +516,14 @@ static PyObject* Python_SetImportedTextureBinarySize(PyObject* self, PyObject* a return Py_None; } -static PyObject* Python_SetImportedTextureBinaryChannels(PyObject* self, PyObject* args) +static PyObject* Python_SetImportedTextureBinaryFormat(PyObject* self, PyObject* args) { const char* textureName = nullptr; - int channels; - if (!PyArg_ParseTuple(args, "si:Python_SetImportedTextureBinarySize", &textureName, &channels)) + int textureFormat = 0; + if (!PyArg_ParseTuple(args, "si:Python_SetImportedTextureBinaryFormat", &textureName, &textureFormat)) return PyErr_Format(PyExc_TypeError, "type error in " __FUNCTION__ "()"); - g_interface->SetImportedTextureBinaryChannels(textureName, channels); + g_interface->SetImportedTextureFormat(textureName, textureFormat); Py_INCREF(Py_None); return Py_None; @@ -581,6 +568,31 @@ static PyObject* Python_SetCameraAltitudeAzimuth(PyObject* self, PyObject* args) return Py_None; } +static PyObject* Python_SetCameraNearFarZ(PyObject* self, PyObject* args) +{ + float nearZ = 0.0f; + float farZ = 0.0f; + if (!PyArg_ParseTuple(args, "ff:SetCameraNearFarZ", &nearZ, &farZ)) + return PyErr_Format(PyExc_TypeError, "type error in " __FUNCTION__ "()"); + + g_interface->SetCameraNearFarZ(nearZ, farZ); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject* Python_SetCameraFlySpeed(PyObject* self, PyObject* args) +{ + float speed = 0.0f; + if (!PyArg_ParseTuple(args, "f:SetCameraFlySpeed", &speed)) + return PyErr_Format(PyExc_TypeError, "type error in " __FUNCTION__ "()"); + + g_interface->SetCameraFlySpeed(speed); + + Py_INCREF(Py_None); + return Py_None; +} + static PyObject* Python_GetCameraPos(PyObject* self, PyObject* args) { float x, y, z; @@ -645,6 +657,31 @@ static PyObject* Python_GetProfilingData(PyObject* self, PyObject* args) return ret; } +static PyObject* Python_IsResourceCreated(PyObject* self, PyObject* args) +{ + const char* resourceName = nullptr; + if (!PyArg_ParseTuple(args, "s:Python_IsResourceCreated", &resourceName)) + return PyErr_Format(PyExc_TypeError, "type error in " __FUNCTION__ "()"); + + bool success = g_interface->IsResourceCreated(resourceName); + + PyObject* ret = PyBool_FromLong(success ? 1 : 0); + Py_INCREF(ret); + return ret; +} + +static PyObject* Python_SetViewedResource(PyObject* self, PyObject* args) +{ + const char* resourceName = nullptr; + if (!PyArg_ParseTuple(args, "s:Python_SetViewedResource", &resourceName)) + return PyErr_Format(PyExc_TypeError, "type error in " __FUNCTION__ "()"); + + g_interface->SetViewedResource(resourceName); + + Py_INCREF(Py_None); + return Py_None; +} + static PyObject* Python_GGEnumValue(PyObject* self, PyObject* args) { const char* enumName = nullptr; @@ -850,7 +887,7 @@ static void AddEnums(PyObject* module) // clang-format on } -void PythonInit(PythonInterface* interface, int argc, char** argv, int firstPythonArgv) +void PythonInit(PythonInterface* interface) { g_interface = interface; @@ -890,15 +927,18 @@ void PythonInit(PythonInterface* interface, int argc, char** argv, int firstPyth {"SetImportedTextureFormat", Python_SetImportedTextureFormat, METH_VARARGS, "Set the texture format of an imported texture"}, {"SetImportedTextureColor", Python_SetImportedTextureColor, METH_VARARGS, "Set the color of an imported texture"}, {"SetImportedTextureSize", Python_SetImportedTextureSize, METH_VARARGS, "Set the x,y,z dimensions an imported texture"}, - {"SetImportedTextureBinaryType", Python_SetImportedTextureBinaryType, METH_VARARGS, "Sets the data type of a binary imported texture"}, - {"SetImportedTextureBinarySize", Python_SetImportedTextureBinarySize, METH_VARARGS, "Sets the x,y,z dimensions of a binary imported texture"}, - {"SetImportedTextureBinaryChannels", Python_SetImportedTextureBinaryChannels, METH_VARARGS, "Sets the number of channels of a binary imported texture"}, + {"SetImportedTextureBinarySize", Python_SetImportedTextureBinarySize, METH_VARARGS, "Sets the x,y,z dimensions of a binary imported texture."}, + {"SetImportedTextureBinaryFormat", Python_SetImportedTextureBinaryFormat, METH_VARARGS, "Sets the format of the binary file."}, {"SetFrameDeltaTime", Python_SetFrameDeltaTime, METH_VARARGS, "Set the frame delta time, in seconds. Useful for recording videos by setting a fixed frame rate. Clear by setting to 0."}, {"SetCameraPos", Python_SetCameraPos, METH_VARARGS, "Set the camera position"}, {"SetCameraAltitudeAzimuth", Python_SetCameraAltitudeAzimuth, METH_VARARGS, "Set the camera altitude azimuth"}, + {"SetCameraNearFarZ", Python_SetCameraNearFarZ, METH_VARARGS, "Set the near and far plane"}, + {"SetCameraFlySpeed", Python_SetCameraFlySpeed, METH_VARARGS, "Set the fly speed of the camera"}, {"GetCameraPos", Python_GetCameraPos, METH_VARARGS, "Get camera position"}, {"GetCameraAltitudeAzimuth", Python_GetCameraAltitudeAzimuth, METH_VARARGS, "Get the camera altitude azimuth"}, {"WriteGPUResource", Python_WriteGPUResource, METH_VARARGS, "Writes a gpu resource during the next RunTechnique"}, + {"IsResourceCreated", Python_IsResourceCreated, METH_VARARGS, "Returns whether or not a resource is created."}, + {"SetViewedResource", Python_SetViewedResource, METH_VARARGS, "Sets the resource being viewed"}, {"ForceEnableProfiling", Python_ForceEnableProfiling, METH_VARARGS, "If true, forces profiling on, even when the profiling window isn't being shown."}, {"GetProfilingData", Python_GetProfilingData, METH_VARARGS, "Gets the profiling data from the last technique execution. Python_ForceEnableProfiling needs to be enabled. Time is in milliseconds. CPU time is first, GPU time is second."}, {"GGEnumValue", Python_GGEnumValue, METH_VARARGS, "Gets the integer value of an enum defined in the loaded .gg file."}, @@ -965,32 +1005,25 @@ void PythonInit(PythonInterface* interface, int argc, char** argv, int firstPyth config.home = pythonHomeBuf; Py_InitializeFromConfig(&config); +} +void PythonShutdown() +{ + Py_Finalize(); +} + +bool PythonExecute(const char* fileName, const std::vector& args) +{ // handle command line parameters - if (firstPythonArgv >= 0 && firstPythonArgv < argc) { - for (int i = firstPythonArgv; i < argc; ++i) - { - auto wtext = Py_DecodeLocale(argv[i], nullptr); - g_argvText.push_back(wtext); - PyMem_RawFree(wtext); - } - + g_argvText = args; g_argv.resize(g_argvText.size()); for (size_t i = 0; i < g_argv.size(); ++i) g_argv[i] = (wchar_t*)g_argvText[i].c_str(); PySys_SetArgv(int(g_argv.size()), g_argv.data()); } -} - -void PythonShutdown() -{ - Py_Finalize(); -} -bool PythonExecute(const char* fileName) -{ g_interface->m_scriptLocation = std::filesystem::weakly_canonical(fileName).string(); // Read the file in @@ -1010,7 +1043,7 @@ bool PythonExecute(const char* fileName) fclose(file); } - // execute the script + // execute the script, setting the command line args too PyObject* global = PyDict_New(); PyObject* ret = PyRun_String(fileData.data(), Py_file_input, global, global); @@ -1066,4 +1099,4 @@ bool PythonExecute(const char* fileName) } return true; -} \ No newline at end of file +} diff --git a/GigiViewerDX12/ViewerPython.h b/GigiViewerDX12/ViewerPython.h index 57a227b8..4998bfcc 100644 --- a/GigiViewerDX12/ViewerPython.h +++ b/GigiViewerDX12/ViewerPython.h @@ -39,8 +39,8 @@ class PythonInterface virtual bool SetVariable(const char* varName, const char* varValue) = 0; virtual bool GetVariable(const char* varName, std::string& value) = 0; virtual void SetDisableGGUserSave(bool set) = 0; - virtual void SetWantReadback(const char* viewableResourceName, bool wantsReadback, int arrayIndex, int mipIndex) = 0; - virtual bool Readback(const char* viewableResourceName, GigiArray& data) = 0; + virtual void SetWantReadback(const char* viewableResourceName, bool wantsReadback) = 0; + virtual bool Readback(const char* viewableResourceName, int arrayIndex, int mipIndex, GigiArray& data) = 0; virtual void RunTechnique(int runCount) = 0; virtual void SetFrameIndex(int frameIndex) = 0; virtual void WaitOnGPU() = 0; @@ -57,18 +57,22 @@ class PythonInterface virtual void SetImportedTextureFormat(const char* textureName, int textureFormat) = 0; virtual void SetImportedTextureColor(const char* textureName, float R, float G, float B, float A) = 0; virtual void SetImportedTextureSize(const char* textureName, int x, int y, int z) = 0; - virtual void SetImportedTextureBinaryType(const char* textureName, GGUserFile_ImportedTexture_BinaryType type) = 0; virtual void SetImportedTextureBinarySize(const char* textureName, int x, int y, int z) = 0; - virtual void SetImportedTextureBinaryChannels(const char* textureName, int channels) = 0; + virtual void SetImportedTextureBinaryFormat(const char* textureName, int textureFormat) = 0; virtual void SetFrameDeltaTime(float seconds) = 0; virtual void SetCameraPos(float X, float Y, float Z) = 0; virtual void SetCameraAltitudeAzimuth(float altitude, float azimuth) = 0; + virtual void SetCameraNearFarZ(float nearZ, float farZ) = 0; + virtual void SetCameraFlySpeed(float speed) = 0; virtual void GetCameraPos(float &X, float &Y, float &Z) = 0; virtual void GetCameraAltitudeAzimuth(float &altitude, float &azimuth) = 0; virtual void WriteGPUResource(const char* viewableResourceName, int subresourceIndex, const char* data, size_t size) = 0; virtual void ForceEnableProfiling(bool forceEnable) = 0; virtual std::vector GetProfilingData() = 0; + virtual bool IsResourceCreated(const char* resourceName) = 0; + virtual void SetViewedResource(const char* resourceName) = 0; + virtual void SetShaderAssertsLogging(bool set) = 0; virtual int GetCollectedShaderAssertsCount() = 0; virtual int GetShaderAssertFormatStrId(int i) = 0; @@ -91,7 +95,7 @@ class PythonInterface std::string m_scriptLocation; }; -void PythonInit(PythonInterface* i, int argc, char** argv, int firstPythonArgv); +void PythonInit(PythonInterface* i); void PythonShutdown(); -bool PythonExecute(const char* fileName); +bool PythonExecute(const char* fileName, const std::vector& args); diff --git a/GigiViewerDX12/main.cpp b/GigiViewerDX12/main.cpp index 166547ed..4c4d2681 100644 --- a/GigiViewerDX12/main.cpp +++ b/GigiViewerDX12/main.cpp @@ -39,6 +39,7 @@ #include "DX12Utils/Utils.h" #include "DX12Utils/sRGB.h" +#include "DX12Utils/Camera.h" #include "version.h" #include "ImGuiHelper.h" @@ -50,8 +51,8 @@ #include "RecentFiles.h" -#include "f16.h" -#include "external/bc7enc/bc7decomp.h" +#include "ImageReadback.h" +#include "ImageSave.h" // clang-format on #include @@ -82,11 +83,6 @@ #include #pragma comment(lib, "dxguid.lib") -#define STB_IMAGE_WRITE_IMPLEMENTATION -#include "stb/stb_image_write.h" - -#include "tinyexr/tinyexr.h" - #include "renderdoc_app.h" #if USE_AGILITY_SDK() @@ -399,6 +395,8 @@ struct ResourceViewState float systemVarMouseState[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; float systemVarMouseStateLastFrame[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + Camera camera; + void StoreLast() { lastType = type; @@ -441,6 +439,8 @@ bool g_logCollectedShaderAsserts = true; std::string g_commandLineLoadGGFileName; std::string g_runPyFileName; +std::vector g_runPyArgs; +bool g_runPyFileAddToRecentScripts = true; int g_syncInterval = 1; bool g_debugLayerOn = DX12_VALIDATION_ON_BY_DEFAULT(); @@ -668,11 +668,10 @@ GigiInterpreterPreviewWindowDX12::ImportedResourceDesc GGUserFile_ImportedResour outDesc.texture.color[3] = inDesc.texture.color[3]; outDesc.texture.format = inDesc.texture.format; - outDesc.texture.binaryDims[0] = inDesc.texture.binaryDims[0]; - outDesc.texture.binaryDims[1] = inDesc.texture.binaryDims[1]; - outDesc.texture.binaryDims[2] = inDesc.texture.binaryDims[2]; - outDesc.texture.binaryType = inDesc.texture.binaryType; - outDesc.texture.binaryChannels = inDesc.texture.binaryChannels; + outDesc.texture.binaryDesc.size[0] = inDesc.texture.binaryDims[0]; + outDesc.texture.binaryDesc.size[1] = inDesc.texture.binaryDims[1]; + outDesc.texture.binaryDesc.size[2] = inDesc.texture.binaryDims[2]; + outDesc.texture.binaryDesc.format = inDesc.texture.binaryFormat; } else { @@ -719,11 +718,10 @@ GGUserFile_ImportedResource ImportedResourceDesc_To_GGUserFile_ImportedResource( outDesc.texture.color[3] = inDesc.texture.color[3]; outDesc.texture.format = inDesc.texture.format; - outDesc.texture.binaryDims[0] = inDesc.texture.binaryDims[0]; - outDesc.texture.binaryDims[1] = inDesc.texture.binaryDims[1]; - outDesc.texture.binaryDims[2] = inDesc.texture.binaryDims[2]; - outDesc.texture.binaryType = inDesc.texture.binaryType; - outDesc.texture.binaryChannels = inDesc.texture.binaryChannels; + outDesc.texture.binaryDims[0] = inDesc.texture.binaryDesc.size[0]; + outDesc.texture.binaryDims[1] = inDesc.texture.binaryDesc.size[1]; + outDesc.texture.binaryDims[2] = inDesc.texture.binaryDesc.size[2]; + outDesc.texture.binaryFormat = inDesc.texture.binaryDesc.format; } else { @@ -984,9 +982,105 @@ GGUserFileV2 LoadGGUserFile() return ggUserData; } -bool LoadGGFile(const char* fileName, bool preserveState) +bool HandleOpenNonGGFile(const char* fileName) +{ + enum class Viewer + { + None, + Texture, + TextureNoModify, // For DDS + Model, + }; + + struct ViewerMapping + { + const char* extension; + Viewer viewer; + }; + + static const ViewerMapping s_mapping[] = + { + {".exr", Viewer::Texture}, + + // stbi_image handles all these + {".png", Viewer::Texture}, + {".hdr", Viewer::Texture}, + {".bmp", Viewer::Texture}, + {".jpg", Viewer::Texture}, + {".jpeg", Viewer::Texture}, + {".gif", Viewer::Texture}, + {".psd", Viewer::Texture}, + {".pic", Viewer::Texture}, + {".pnm", Viewer::Texture}, + {".tga", Viewer::Texture}, + + {".dds", Viewer::TextureNoModify}, + + {".obj", Viewer::Model}, + {".fbx", Viewer::Model}, + }; + + // Figure out which viewer we should use + Viewer viewer = Viewer::None; + { + std::filesystem::path p(fileName); + std::string extension = p.extension().string(); + for (const ViewerMapping& mapping : s_mapping) + { + if (!_stricmp(mapping.extension, extension.c_str())) + { + viewer = mapping.viewer; + break; + } + } + + if (viewer == Viewer::None) + return false; + } + + const char* folder = nullptr; + switch (viewer) + { + case Viewer::Texture: folder = "Techniques/DataViewers/TextureViewer/"; break; + case Viewer::TextureNoModify: folder = "Techniques/DataViewers/TextureViewerDDS/"; break; + case Viewer::Model: folder = "Techniques/DataViewers/ModelViewer/"; break; + } + + char currentDirectory[4096]; + GetCurrentDirectoryA(4096, currentDirectory); + std::filesystem::path searchPath = std::filesystem::weakly_canonical(std::filesystem::path(currentDirectory) / std::filesystem::path(folder)); + + char pid[256]; + sprintf_s(pid, "%i", _getpid()); + std::filesystem::path tempDir = std::filesystem::weakly_canonical(std::filesystem::temp_directory_path() / std::filesystem::path("GigiDataViewer") / std::filesystem::path(pid)); + + // Remove everything aready there, to prevent stale things interfering + // Then, make sure the directory is created + std::filesystem::remove_all(tempDir); + std::filesystem::create_directories(tempDir); + + std::filesystem::copy(searchPath, tempDir); + + // Run view.py, with this filename as a command line parameter + g_runPyFileName = std::filesystem::weakly_canonical(tempDir / std::filesystem::path("view.py")).string(); + g_runPyArgs.clear(); + g_runPyArgs.push_back(ToWideString(fileName)); + g_runPyFileAddToRecentScripts = false; + + return true; +} + +bool LoadGGFile(const char* fileName, bool preserveState, bool addToRecentFiles) { - g_recentFiles.AddEntry(fileName); + // Handle non gg files + { + std::filesystem::path p(fileName); + if (_stricmp(p.extension().string().c_str(), ".gg")) + return HandleOpenNonGGFile(fileName); + } + + if (addToRecentFiles) + g_recentFiles.AddEntry(fileName); std::array cameraPos; std::array cameraAltitudeAzimuth; @@ -1086,7 +1180,7 @@ void ReloadGGFile(bool clearCachedFiles) if (clearCachedFiles) g_interpreter.ClearCachedFiles(); - LoadGGFile(g_renderGraphFileName.c_str(), true); + LoadGGFile(g_renderGraphFileName.c_str(), true, true); } void OnServerMessage(const PreviewMsgSC_VersionResponse& msg) @@ -1097,7 +1191,7 @@ void OnServerMessage(const PreviewMsgSC_VersionResponse& msg) void OnServerMessage(const PreviewMsgSC_LoadGGFile& msg) { Log(LogLevel::Info, "Server Message: LoadGGFile \"%s\"\n", msg.fileName.c_str()); - LoadGGFile(msg.fileName.c_str(), msg.preserveState); + LoadGGFile(msg.fileName.c_str(), msg.preserveState, true); } void OnServerMessage(const PreviewMsg_Ping& msg) @@ -1137,7 +1231,7 @@ void ImGuiRecentFiles() { // make a copy so we don't point to data we might change std::string fileName = el; - LoadGGFile(fileName.c_str(), false); + LoadGGFile(fileName.c_str(), false, true); break; } } @@ -1162,6 +1256,7 @@ void ImGuiRecentPythonScripts() // make a copy so we don't point to data we might change std::string fileName = el; g_runPyFileName = fileName; + g_runPyArgs.clear(); break; } } @@ -1185,7 +1280,7 @@ void HandleMainMenu() { nfdchar_t* outPath = nullptr; if (NFD_OpenDialog("gg", "", &outPath) == NFD_OKAY) - LoadGGFile(outPath, false); + LoadGGFile(outPath, false, true); } } @@ -1208,7 +1303,10 @@ void HandleMainMenu() { nfdchar_t* outPath = nullptr; if (NFD_OpenDialog("py", "", &outPath) == NFD_OKAY) + { g_runPyFileName = outPath; + g_runPyArgs.clear(); + } } ImGuiRecentPythonScripts(); @@ -1361,7 +1459,7 @@ void HandleMainMenu() } // Pix & RenderDoc Capture - if (g_pixCaptureEnabled || g_renderDocEnabled) // TODO: test with them both off + if (g_pixCaptureEnabled || g_renderDocEnabled) { ImGui::SeparatorEx(ImGuiSeparatorFlags_Vertical); static int captureFrames = 1; @@ -1834,15 +1932,6 @@ bool AssignVariable(const char* name, DataFieldType type, T value) return false; } -DirectX::XMMATRIX GetViewMatrix() -{ - float altitude = g_systemVariables.camera.cameraAltitudeAzimuth[0]; - float azimuth = g_systemVariables.camera.cameraAltitudeAzimuth[1]; - - DirectX::XMMATRIX rot = DirectX::XMMatrixRotationY(azimuth) * DirectX::XMMatrixRotationX(altitude); - return DirectX::XMMatrixTranslation(-g_systemVariables.camera.cameraPos[0], -g_systemVariables.camera.cameraPos[1], -g_systemVariables.camera.cameraPos[2]) * rot; -} - void SynchronizeSystemVariables() { auto context = ImGui::GetCurrentContext(); @@ -1930,111 +2019,16 @@ void SynchronizeSystemVariables() // Camera Logic { - // To account for frame time - float movementMultiplier = ImGui::GetIO().DeltaTime * 60.0f; - - // If the mouse is dragging, rotate the camera - if (g_resourceView.systemVarMouseState[2] && g_resourceView.systemVarMouseStateLastFrame[2]) - { - float dx = g_resourceView.systemVarMouseStateLastFrame[0] - g_resourceView.systemVarMouseState[0]; - float dy = g_resourceView.systemVarMouseStateLastFrame[1] - g_resourceView.systemVarMouseState[1]; - - dx *= movementMultiplier; - dy *= movementMultiplier; - - if (!g_systemVariables.camera.leftHanded) - { - dx *= -1.0; - dy *= -1.0; - } - - g_systemVariables.camera.cameraAltitudeAzimuth[0] += dy * g_systemVariables.camera.mouseSensitivity; - g_systemVariables.camera.cameraAltitudeAzimuth[0] = std::max(std::min(g_systemVariables.camera.cameraAltitudeAzimuth[0], c_pi * 0.95f), -c_pi * 0.95f); - - g_systemVariables.camera.cameraAltitudeAzimuth[1] += dx * g_systemVariables.camera.mouseSensitivity; - if (g_systemVariables.camera.cameraAltitudeAzimuth[1] < 0.0f) - g_systemVariables.camera.cameraAltitudeAzimuth[1] += 2.0f * c_pi; - g_systemVariables.camera.cameraAltitudeAzimuth[1] = std::fmodf(g_systemVariables.camera.cameraAltitudeAzimuth[1], 2.0f * c_pi); - - g_systemVariables.camera.cameraChanged |= (dx != 0.0f || dy != 0.0f); - } - - // Handle WASD - { - - DirectX::XMMATRIX viewMatrix = GetViewMatrix(); - - float left[3] = {viewMatrix.r[0].m128_f32[0] , viewMatrix.r[1].m128_f32[0] , viewMatrix.r[2].m128_f32[0]}; - float up[3] = {viewMatrix.r[0].m128_f32[1], viewMatrix.r[1].m128_f32[1], viewMatrix.r[2].m128_f32[1]}; - float fwd[3] = {viewMatrix.r[0].m128_f32[2], viewMatrix.r[1].m128_f32[2], viewMatrix.r[2].m128_f32[2]}; - - float flySpeed = g_systemVariables.camera.flySpeed; - if (g_keyStates[VK_SHIFT]) - flySpeed *= 10; - else if (g_keyStates[VK_CONTROL]) - flySpeed /= 10; - - if (!g_systemVariables.camera.leftHanded) - { - fwd[0] *= -1.0f; - fwd[1] *= -1.0f; - fwd[2] *= -1.0f; - } - - if (g_keyStates['W'] || g_keyStates[VK_UP]) - { - g_systemVariables.camera.cameraPos[0] += fwd[0] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[1] += fwd[1] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[2] += fwd[2] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraChanged = true; - } - - if (g_keyStates['S'] || g_keyStates[VK_DOWN]) - { - g_systemVariables.camera.cameraPos[0] -= fwd[0] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[1] -= fwd[1] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[2] -= fwd[2] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraChanged = true; - } - - if (g_keyStates['A'] || g_keyStates[VK_LEFT]) - { - g_systemVariables.camera.cameraPos[0] -= left[0] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[1] -= left[1] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[2] -= left[2] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraChanged = true; - } - - if (g_keyStates['D'] || g_keyStates[VK_RIGHT]) - { - g_systemVariables.camera.cameraPos[0] += left[0] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[1] += left[1] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[2] += left[2] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraChanged = true; - } - - if (g_keyStates['E'] || g_keyStates[VK_PRIOR]) - { - g_systemVariables.camera.cameraPos[0] += up[0] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[1] += up[1] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[2] += up[2] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraChanged = true; - } - - if (g_keyStates['Q'] || g_keyStates[VK_NEXT]) - { - g_systemVariables.camera.cameraPos[0] -= up[0] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[1] -= up[1] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraPos[2] -= up[2] * flySpeed * movementMultiplier; - g_systemVariables.camera.cameraChanged = true; - } - } + g_resourceView.camera.m_flySpeed = g_systemVariables.camera.flySpeed; + g_resourceView.camera.m_leftHanded = g_systemVariables.camera.leftHanded; + g_resourceView.camera.m_mouseSensitivity = g_systemVariables.camera.mouseSensitivity; + g_resourceView.camera.Update(g_keyStates, g_resourceView.systemVarMouseState, g_resourceView.systemVarMouseStateLastFrame, ImGui::GetIO().DeltaTime, g_systemVariables.camera.cameraPos.data(), g_systemVariables.camera.cameraAltitudeAzimuth.data(), g_systemVariables.camera.cameraChanged); AssignVariable(g_systemVariables.CameraChanged_varName.c_str(), DataFieldType::Bool, g_systemVariables.camera.cameraChanged); g_systemVariables.camera.cameraChanged = false; } - // Camera + // Assign camera system variables { // Make the projection and jittered projection matrix DirectX::XMMATRIX projMtx, jitteredProjMtx; @@ -2052,34 +2046,8 @@ void SynchronizeSystemVariables() } } - float fov = g_systemVariables.camera.FOV * c_pi / 180.0f; - float nearZ = g_systemVariables.camera.nearPlane; - float farZ = g_systemVariables.camera.farPlane; - - nearZ = std::max(nearZ, 0.001f); - farZ = std::max(farZ, 0.001f); - fov = std::max(fov, 0.001f); - - if (nearZ == farZ) - farZ = nearZ + 0.01f; - - if (g_systemVariables.camera.reverseZ) - std::swap(nearZ, farZ); - - if (g_systemVariables.camera.perspective) - { - if (g_systemVariables.camera.leftHanded) - projMtx = DirectX::XMMatrixPerspectiveFovLH(fov, resolution[0] / resolution[1], nearZ, farZ); - else - projMtx = DirectX::XMMatrixPerspectiveFovRH(fov, resolution[0] / resolution[1], nearZ, farZ); - } - else - { - if (g_systemVariables.camera.leftHanded) - projMtx = DirectX::XMMatrixOrthographicLH(resolution[0], resolution[1], nearZ, farZ); - else - projMtx = DirectX::XMMatrixOrthographicRH(resolution[0], resolution[1], nearZ, farZ); - } + // Get the projection matrix + projMtx = g_resourceView.camera.GetProjMatrix(g_systemVariables.camera.FOV, resolution, g_systemVariables.camera.nearPlane, g_systemVariables.camera.farPlane, g_systemVariables.camera.reverseZ, g_systemVariables.camera.perspective); // Subpixel jitter jitteredProjMtx = projMtx; @@ -2126,7 +2094,7 @@ void SynchronizeSystemVariables() DirectX::XMMATRIX invProjMtx = DirectX::XMMatrixInverse(nullptr, projMtx); DirectX::XMMATRIX invJitteredProjMtx = DirectX::XMMatrixInverse(nullptr, jitteredProjMtx); - DirectX::XMMATRIX viewMtx = GetViewMatrix(); + DirectX::XMMATRIX viewMtx = g_resourceView.camera.GetViewMatrix(g_systemVariables.camera.cameraPos.data(), g_systemVariables.camera.cameraAltitudeAzimuth.data()); DirectX::XMMATRIX invViewMtx = DirectX::XMMatrixInverse(nullptr, viewMtx); DirectX::XMMATRIX viewProjMtx = viewMtx * projMtx; @@ -2594,7 +2562,7 @@ void ShowInternalVariables() std::string base_filename = key.substr(key.find_last_of("/\\") + 1); const char* for_display = base_filename.c_str(); c_texture_cache_details_file_display.push_back(for_display); - c_texture_cache_details_pixels.push_back(val.pixels.size()); + c_texture_cache_details_pixels.push_back(val.PixelCount()); } } if (ImGui::BeginTable("Texture cache details", 3, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) @@ -2998,7 +2966,7 @@ void ShowImportedResources() if (desc.isATexture) { // Image File - if (ImGui_File("File", desc.texture.fileName, "jpeg,jpg,png,bmp,hdr,psd,tga,gif,pic,pgm,ppm,exr,dds")) + if (ImGui_File("File", desc.texture.fileName, "jpeg,jpg,png,bmp,hdr,psd,tga,gif,pic,pgm,ppm,exr,dds,bin")) { desc.state = GigiInterpreterPreviewWindowDX12::ImportedResourceState::dirty; } @@ -3077,40 +3045,38 @@ void ShowImportedResources() { ImGui::PushID("LoadBinaryFile"); + // Size if (desc.texture.textureType == RuntimeTypes::ViewableResource::Type::Texture2DArray || desc.texture.textureType == RuntimeTypes::ViewableResource::Type::Texture3D) { - if (ImGui::InputInt3("Size", desc.texture.binaryDims)) + if (ImGui::InputInt3("Size", desc.texture.binaryDesc.size)) desc.state = GigiInterpreterPreviewWindowDX12::ImportedResourceState::dirty; } else { - if (ImGui::InputInt2("Size", desc.texture.binaryDims)) + if (ImGui::InputInt2("Size", desc.texture.binaryDesc.size)) { - desc.texture.binaryDims[2] = 1; + desc.texture.binaryDesc.size[2] = 1; desc.state = GigiInterpreterPreviewWindowDX12::ImportedResourceState::dirty; } } - ShowToolTip("The dimensions of the data in the binary file"); - // binary Type + // Format { static const char* labels[] = { - "Float", - "Byte", + #include "external/df_serialize/_common.h" + #define ENUM_ITEM(_NAME, _DESCRIPTION) #_NAME, + // clang-format off + #include "external/df_serialize/_fillunsetdefines.h" + #include "Schemas/TextureFormats.h" + // clang-format on }; - static_assert(_countof(labels) == (int)GGUserFile_ImportedTexture_BinaryType::Count); - - if (ImGui::Combo("Type", (int*)&desc.texture.binaryType, labels, _countof(labels))) + if (ImGui::Combo("Format", (int*)&desc.texture.binaryDesc.format, labels, _countof(labels))) desc.state = GigiInterpreterPreviewWindowDX12::ImportedResourceState::dirty; - ShowToolTip("The data type stored in the binary file"); + ShowToolTip("This is the format of the data in the binary file."); } - if (ImGui::InputInt("Channels", &desc.texture.binaryChannels)) - desc.state = GigiInterpreterPreviewWindowDX12::ImportedResourceState::dirty; - ShowToolTip("The channels per pixel in the binary file"); - ImGui::PopID(); } @@ -3565,192 +3531,151 @@ void ShowLog() ImGui::End(); } -void AutoHistogram(ID3D12Resource* readbackResource, DXGI_FORMAT format, int width, int height, int depth, int zslice, float& histogramMin, float& histogramMax) +void AutoHistogram(ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int zIndex, int mipIndex, float& histogramMin, float& histogramMax) { - DXGI_FORMAT_Info formatInfo = Get_DXGI_FORMAT_Info(format); - - int unalignedPitch = width * formatInfo.bytesPerPixel; - int alignedPitch = ALIGN((D3D12_TEXTURE_DATA_PITCH_ALIGNMENT * formatInfo.planeCount), unalignedPitch); - - D3D12_RANGE readRange; - readRange.Begin = zslice * height * alignedPitch; - readRange.End = (zslice + 1) * height * alignedPitch; - - D3D12_RANGE writeRange; - writeRange.Begin = 1; - writeRange.End = 0; - - void* mappedMemory = nullptr; - readbackResource->Map(0, &readRange, &mappedMemory); + // Get the decoded image data + DXGI_FORMAT decodedFormat; + std::vector decodedPixels; + int decodedWidth = 0; + int decodedHeight = 0; + if (!ImageReadback::GetDecodedImageSlice(g_pd3dDevice, readbackResource, resourceOriginalDesc, zIndex, mipIndex, decodedPixels, decodedFormat, decodedWidth, decodedHeight)) + { + Log(LogLevel::Error, __FUNCTION__ " Could not decode block compressed image\n"); + return; + } float minValue[4] = { FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX }; float maxValue[4] = { -FLT_MAX, -FLT_MAX, -FLT_MAX, -FLT_MAX }; - for (int iy = 0; iy < height; ++iy) - { - void* firstPixel = &((char*)mappedMemory)[readRange.Begin + iy * alignedPitch]; + DXGI_FORMAT_Info decodedFormatInfo = Get_DXGI_FORMAT_Info(decodedFormat); - if (formatInfo.format == DXGI_FORMAT_R24_UNORM_X8_TYPELESS) + switch (decodedFormatInfo.channelType) + { + case DXGI_FORMAT_Info::ChannelType::_uint8_t: { - const uint32_t* value = (uint32_t*)firstPixel; - for (int ix = 0; ix < width; ++ix) + const uint8_t* value = (uint8_t*)decodedPixels.data(); + for (int ix = 0; ix < decodedWidth * decodedHeight; ++ix) { - float v = float(double(*value) / 16777216.0); - minValue[0] = std::min(minValue[0], v); - maxValue[0] = std::max(maxValue[0], v); - value++; + for (int i = 0; i < decodedFormatInfo.channelCount; ++i) + { + float v = InverseLerp(0.0f, 255.0f, float(*value)); + minValue[i] = std::min(minValue[i], v); + maxValue[i] = std::max(maxValue[i], v); + value++; + } } + break; } - else if (formatInfo.format == DXGI_FORMAT_R11G11B10_FLOAT) + case DXGI_FORMAT_Info::ChannelType::_int8_t: { - const uint32_t* value = (uint32_t*)firstPixel; - for (int ix = 0; ix < width; ++ix) + const int8_t* value = (int8_t*)decodedPixels.data(); + for (int ix = 0; ix < decodedWidth * decodedHeight; ++ix) { - float rgb[3]; - R11G11B10tof32(*value, rgb); - - for (int i = 0; i < 3; ++i) + for (int i = 0; i < decodedFormatInfo.channelCount; ++i) { - minValue[i] = std::min(minValue[i], rgb[i]); - maxValue[i] = std::max(maxValue[i], rgb[i]); + float v = InverseLerp(-128.0f, 127.0f, float(*value)); + minValue[i] = std::min(minValue[i], v); + maxValue[i] = std::max(maxValue[i], v); + value++; } - value++; } break; } - else + case DXGI_FORMAT_Info::ChannelType::_uint16_t: { - switch (formatInfo.channelType) + const uint16_t* value = (uint16_t*)decodedPixels.data(); + for (int ix = 0; ix < decodedWidth * decodedHeight; ++ix) { - case DXGI_FORMAT_Info::ChannelType::_uint8_t: - { - const uint8_t* value = (uint8_t*)firstPixel; - for (int ix = 0; ix < width; ++ix) - { - for (int i = 0; i < formatInfo.channelCount; ++i) - { - float v = InverseLerp(0.0f, 255.0f, float(*value)); - minValue[i] = std::min(minValue[i], v); - maxValue[i] = std::max(maxValue[i], v); - value++; - } - } - break; - } - case DXGI_FORMAT_Info::ChannelType::_int8_t: - { - const int8_t* value = (int8_t*)firstPixel; - for (int ix = 0; ix < width; ++ix) - { - for (int i = 0; i < formatInfo.channelCount; ++i) - { - float v = InverseLerp(-128.0f, 127.0f, float(*value)); - minValue[i] = std::min(minValue[i], v); - maxValue[i] = std::max(maxValue[i], v); - value++; - } - } - break; - } - case DXGI_FORMAT_Info::ChannelType::_uint16_t: - { - const uint16_t* value = (uint16_t*)firstPixel; - for (int ix = 0; ix < width; ++ix) - { - for (int i = 0; i < formatInfo.channelCount; ++i) - { - float v = InverseLerp(0.0f, 65535.0f, float(*value)); - minValue[i] = std::min(minValue[i], v); - maxValue[i] = std::max(maxValue[i], v); - value++; - } - } - break; - } - case DXGI_FORMAT_Info::ChannelType::_int16_t: + for (int i = 0; i < decodedFormatInfo.channelCount; ++i) { - const int16_t* value = (int16_t*)firstPixel; - for (int ix = 0; ix < width; ++ix) - { - for (int i = 0; i < formatInfo.channelCount; ++i) - { - float v = InverseLerp(-32768.0f, 32767.0f, float(*value)); - minValue[i] = std::min(minValue[i], v); - maxValue[i] = std::max(maxValue[i], v); - value++; - } - } - break; + float v = InverseLerp(0.0f, 65535.0f, float(*value)); + minValue[i] = std::min(minValue[i], v); + maxValue[i] = std::max(maxValue[i], v); + value++; } - case DXGI_FORMAT_Info::ChannelType::_uint32_t: + } + break; + } + case DXGI_FORMAT_Info::ChannelType::_int16_t: + { + const int16_t* value = (int16_t*)decodedPixels.data(); + for (int ix = 0; ix < decodedWidth * decodedHeight; ++ix) + { + for (int i = 0; i < decodedFormatInfo.channelCount; ++i) { - const uint32_t* value = (uint32_t*)firstPixel; - for (int ix = 0; ix < width; ++ix) - { - for (int i = 0; i < formatInfo.channelCount; ++i) - { - float v = InverseLerp(0.0f, 4294967295.0f, float(*value)); - minValue[i] = std::min(minValue[i], v); - maxValue[i] = std::max(maxValue[i], v); - value++; - } - } - break; + float v = InverseLerp(-32768.0f, 32767.0f, float(*value)); + minValue[i] = std::min(minValue[i], v); + maxValue[i] = std::max(maxValue[i], v); + value++; } - case DXGI_FORMAT_Info::ChannelType::_int32_t: + } + break; + } + case DXGI_FORMAT_Info::ChannelType::_uint32_t: + { + const uint32_t* value = (uint32_t*)decodedPixels.data(); + for (int ix = 0; ix < decodedWidth * decodedHeight; ++ix) + { + for (int i = 0; i < decodedFormatInfo.channelCount; ++i) { - const int32_t* value = (int32_t*)firstPixel; - for (int ix = 0; ix < width; ++ix) - { - for (int i = 0; i < formatInfo.channelCount; ++i) - { - float v = InverseLerp(-2147483648.0f, 2147483647.0f, float(*value)); - minValue[i] = std::min(minValue[i], v); - maxValue[i] = std::max(maxValue[i], v); - value++; - } - } - break; + float v = InverseLerp(0.0f, 4294967295.0f, float(*value)); + minValue[i] = std::min(minValue[i], v); + maxValue[i] = std::max(maxValue[i], v); + value++; } - case DXGI_FORMAT_Info::ChannelType::_float: + } + break; + } + case DXGI_FORMAT_Info::ChannelType::_int32_t: + { + const int32_t* value = (int32_t*)decodedPixels.data(); + for (int ix = 0; ix < decodedWidth * decodedHeight; ++ix) + { + for (int i = 0; i < decodedFormatInfo.channelCount; ++i) { - const float* value = (float*)firstPixel; - for (int ix = 0; ix < width; ++ix) - { - for (int i = 0; i < formatInfo.channelCount; ++i) - { - minValue[i] = std::min(minValue[i], *value); - maxValue[i] = std::max(maxValue[i], *value); - value++; - } - } - break; + float v = InverseLerp(-2147483648.0f, 2147483647.0f, float(*value)); + minValue[i] = std::min(minValue[i], v); + maxValue[i] = std::max(maxValue[i], v); + value++; } - case DXGI_FORMAT_Info::ChannelType::_half: + } + break; + } + case DXGI_FORMAT_Info::ChannelType::_float: + { + const float* value = (float*)decodedPixels.data(); + for (int ix = 0; ix < decodedWidth * decodedHeight; ++ix) + { + for (int i = 0; i < decodedFormatInfo.channelCount; ++i) { - const half* value = (half*)firstPixel; - for (int ix = 0; ix < width; ++ix) - { - for (int i = 0; i < formatInfo.channelCount; ++i) - { - minValue[i] = std::min(minValue[i], *value); - maxValue[i] = std::max(maxValue[i], *value); - value++; - } - } - break; + minValue[i] = std::min(minValue[i], *value); + maxValue[i] = std::max(maxValue[i], *value); + value++; } - default: + } + break; + } + case DXGI_FORMAT_Info::ChannelType::_half: + { + const half* value = (half*)decodedPixels.data(); + for (int ix = 0; ix < decodedWidth * decodedHeight; ++ix) + { + for (int i = 0; i < decodedFormatInfo.channelCount; ++i) { - Assert(false, "Unhandled Channel Type"); - return; + minValue[i] = std::min(minValue[i], *value); + maxValue[i] = std::max(maxValue[i], *value); + value++; } } + break; + } + default: + { + Assert(false, "Unhandled Channel Type"); + return; } } - readbackResource->Unmap(0, &writeRange); - // Use the min / max histogram of visible channels bool first = true; for (int i = 0; i < 4; ++i) @@ -3775,101 +3700,25 @@ void AutoHistogram(ID3D12Resource* readbackResource, DXGI_FORMAT format, int wid } } -std::vector DecodeBC7Pixel(ID3D12Resource* readbackResource, int width, int height, int x, int y) -{ - // Make sure pixel is in range - x = std::max(0, std::min(width - 1, x)); - y = std::max(0, std::min(height - 1, y)); - - // Calculate how many blocks there are - int numBlocksX = (width + 3) / 4; - int numBlocksY = (height + 3) / 4; - int numBlocks = numBlocksX * numBlocksY; - - // Calculate which block we are decoding - int decodeBlockX = (x + 3) / 4; - int decodeBlockY = (x + 3) / 4; - int decodeBlock = decodeBlockY * numBlocksX + decodeBlockX; - - // read back and decode the block that contains our pixel - std::vector ret; - std::vector decodedBlock(64); - { - D3D12_RANGE readRange; - readRange.Begin = decodeBlock * 16; - readRange.End = (decodeBlock + 1) * 16; - - char* readbackData = nullptr; - HRESULT hr = readbackResource->Map(0, &readRange, (void**)&readbackData); - if (FAILED(hr)) - { - ImGui::TextUnformatted("Could not map resource"); - return ret; - } - - bc7decomp::unpack_bc7(&readbackData[decodeBlock * 16], (bc7decomp::color_rgba*)decodedBlock.data()); - - D3D12_RANGE writeRange; - writeRange.Begin = 1; - writeRange.End = 0; - readbackResource->Unmap(0, &writeRange); - } - - // copy our pixel out of the decoded block - int offsetX = (x % 4); - int offsetY = (y % 4); - const char* pixel = &decodedBlock[(offsetY * 4 + offsetX) * 4]; - ret.resize(4); - memcpy(ret.data(), pixel, 4); - - return ret; -} - -void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& formatInfo, int width, int height, int depth, int x, int y, int z) +void ShowPixelValue(ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int x, int y, int z, int mipIndex, float cursorPosX) { // read back the pixel data - std::vector pixelUntypedData(formatInfo.bytesPerPixel); - if (formatInfo.isCompressed) - { - pixelUntypedData = DecodeBC7Pixel(readbackResource, width, height, x, y); - } - else - { - x = std::max(0, std::min(width - 1, x)); - y = std::max(0, std::min(height - 1, y)); - z = std::max(0, std::min(depth - 1, z)); - - int unalignedPitch = width * formatInfo.bytesPerPixel; - int alignedPitch = ALIGN((D3D12_TEXTURE_DATA_PITCH_ALIGNMENT * formatInfo.planeCount), unalignedPitch); - - D3D12_RANGE readRange; - readRange.Begin = z * height * alignedPitch + y * alignedPitch + x * formatInfo.bytesPerPixel; - readRange.End = readRange.Begin + formatInfo.bytesPerPixel; - - char* readbackData = nullptr; - HRESULT hr = readbackResource->Map(0, &readRange, (void**)&readbackData); - if (FAILED(hr)) - { - ImGui::TextUnformatted("Could not map resource"); - return; - } - memcpy(pixelUntypedData.data(), &readbackData[readRange.Begin], formatInfo.bytesPerPixel); + std::vector pixelUntypedData; + DXGI_FORMAT viewFormat; + if (!ImageReadback::GetDecodedPixel(g_pd3dDevice, readbackResource, resourceOriginalDesc, x, y, z, mipIndex, pixelUntypedData, viewFormat)) + return; - D3D12_RANGE writeRange; - writeRange.Begin = 1; - writeRange.End = 0; - readbackResource->Unmap(0, &writeRange); - } - if (pixelUntypedData.size() < formatInfo.bytesPerPixel) + // Make sure we got enough data + DXGI_FORMAT_Info viewFormatInfo = Get_DXGI_FORMAT_Info(viewFormat); + if (pixelUntypedData.size() < viewFormatInfo.bytesPerPixel) return; - const char* pixelUntyped = pixelUntypedData.data(); + // Make a string of the pixel values + const unsigned char* pixelUntyped = pixelUntypedData.data(); float pixelColor[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; - char str[256], *writer = str; - bool isHDR = false; - if (formatInfo.format == DXGI_FORMAT_R24_UNORM_X8_TYPELESS) + if (viewFormatInfo.format == DXGI_FORMAT_R24_UNORM_X8_TYPELESS) { uint32_t* pixel = (uint32_t*)pixelUntyped; float value = float(double(pixel[0]) / 16777216.0); @@ -3877,7 +3726,7 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo pixelColor[0] = value; } - else if (formatInfo.format == DXGI_FORMAT_R11G11B10_FLOAT) + else if (viewFormatInfo.format == DXGI_FORMAT_R11G11B10_FLOAT) { float rgb[3]; R11G11B10tof32(*(uint32_t*)pixelUntyped, rgb); @@ -3889,12 +3738,12 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo } else { - switch (formatInfo.channelType) + switch (viewFormatInfo.channelType) { case DXGI_FORMAT_Info::ChannelType::_uint8_t: { uint8_t* pixel = (uint8_t*)pixelUntyped; - for (int i = 0; i < formatInfo.channelCount; ++i) + for (int i = 0; i < viewFormatInfo.channelCount; ++i) { sprintf(writer, "%u ", (unsigned int)pixel[i]); writer += strlen(writer); @@ -3906,7 +3755,7 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo case DXGI_FORMAT_Info::ChannelType::_int8_t: { int8_t* pixel = (int8_t*)pixelUntyped; - for (int i = 0; i < formatInfo.channelCount; ++i) + for (int i = 0; i < viewFormatInfo.channelCount; ++i) { sprintf(writer, "%i ", (int)pixel[i]); writer += strlen(writer); @@ -3918,7 +3767,7 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo case DXGI_FORMAT_Info::ChannelType::_int16_t: { int16_t* pixel = (int16_t*)pixelUntyped; - for (int i = 0; i < formatInfo.channelCount; ++i) + for (int i = 0; i < viewFormatInfo.channelCount; ++i) { sprintf(writer, "%i ", (int)pixel[i]); writer += strlen(writer); @@ -3930,7 +3779,7 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo case DXGI_FORMAT_Info::ChannelType::_uint16_t: { uint16_t* pixel = (uint16_t*)pixelUntyped; - for (int i = 0; i < formatInfo.channelCount; ++i) + for (int i = 0; i < viewFormatInfo.channelCount; ++i) { sprintf(writer, "%u ", (unsigned int)pixel[i]); writer += strlen(writer); @@ -3942,7 +3791,7 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo case DXGI_FORMAT_Info::ChannelType::_uint32_t: { uint32_t* pixel = (uint32_t*)pixelUntyped; - for (int i = 0; i < formatInfo.channelCount; ++i) + for (int i = 0; i < viewFormatInfo.channelCount; ++i) { sprintf(writer, "%u ", (unsigned int)pixel[i]); writer += strlen(writer); @@ -3954,7 +3803,7 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo case DXGI_FORMAT_Info::ChannelType::_half: { half* pixel = (half*)pixelUntyped; - for (int i = 0; i < formatInfo.channelCount; ++i) + for (int i = 0; i < viewFormatInfo.channelCount; ++i) { float f = pixel[i]; sprintf(writer, "%f ", f); @@ -3968,7 +3817,7 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo { isHDR = true; float* pixel = (float*)pixelUntyped; - for (int i = 0; i < formatInfo.channelCount; ++i) + for (int i = 0; i < viewFormatInfo.channelCount; ++i) { sprintf(writer, "%f ", pixel[i]); writer += strlen(writer); @@ -3986,7 +3835,7 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo } // show the actual pixel color - if (formatInfo.sRGB) + if (viewFormatInfo.sRGB) { pixelColor[0] = SRGBToLinear(pixelColor[0]); pixelColor[1] = SRGBToLinear(pixelColor[1]); @@ -3996,6 +3845,9 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo if (isHDR) flags |= ImGuiColorEditFlags_Float | ImGuiColorEditFlags_HDR; + ImGui::SameLine(); + ImGui::SetCursorPosX(cursorPosX); + // to get vertical alignment in the line const float size = ImGui::GetTextLineHeight(); @@ -4003,12 +3855,12 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo // If the format is a normed texture, we wrote it as int or uint, but we want to show it as float. // furthermore, snorm textures need to be converted from [0,1] to [-1,1] - switch (formatInfo.normType) + switch (viewFormatInfo.normType) { case DXGI_FORMAT_Info::NormType::UNorm: { writer = str; - for (int i = 0; i < formatInfo.channelCount; ++i) + for (int i = 0; i < viewFormatInfo.channelCount; ++i) { sprintf(writer, "%f ", pixelColor[i]); writer += strlen(writer); @@ -4018,7 +3870,7 @@ void ShowPixelValue(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& fo case DXGI_FORMAT_Info::NormType::SNorm: { writer = str; - for (int i = 0; i < formatInfo.channelCount; ++i) + for (int i = 0; i < viewFormatInfo.channelCount; ++i) { pixelColor[i] = pixelColor[i] * 2.0f - 1.0f; sprintf(writer, "%f ", pixelColor[i]); @@ -4800,180 +4652,89 @@ void ShowStructuredBuffer(const RenderGraph& renderGraph, unsigned char* bytes, } } -std::vector DecodeBc7(unsigned char* pixels, int width, int height) +void CopyImageToClipBoard(ID3D12Resource* readbackResource, D3D12_RESOURCE_DESC resourceOriginalDesc, int zIndex, int mipIndex) { - // Calculate how many blocks there are - int numBlocksX = (width + 3) / 4; - int numBlocksY = (height + 3) / 4; - int numBlocks = numBlocksX * numBlocksY; - - std::vector decodedPixels(width * height * 4, 0); - std::vector decodedBlock(64); - - for (int i = 0; i < numBlocks; ++i) + DXGI_FORMAT decodedFormat; + std::vector decodedPixels; + int decodedWidth = 0; + int decodedHeight = 0; + if (!ImageReadback::GetDecodedImageSlice(g_pd3dDevice, readbackResource, resourceOriginalDesc, zIndex, mipIndex, decodedPixels, decodedFormat, decodedWidth, decodedHeight)) { - bc7decomp::unpack_bc7(&pixels[i * 16], (bc7decomp::color_rgba*)decodedBlock.data()); - - int blockX = i % numBlocksX; - int blockY = i / numBlocksX; - - int outY = blockY * 4; - int outX = blockX * 4; + Log(LogLevel::Error, __FUNCTION__ " Could not decode block compressed image\n"); + return; + } - unsigned char* dest = &decodedPixels[(outY * width + outX) * 4]; - unsigned char* src = decodedBlock.data(); - for (int iy = 0; iy < 4; ++iy) + // If the decoded format isn't RGBAU8, convert it to that! + DXGI_FORMAT_Info decodedFormatInfo = Get_DXGI_FORMAT_Info(decodedFormat); + if (decodedFormatInfo.channelCount != 4 || decodedFormatInfo.channelType != DXGI_FORMAT_Info::ChannelType::_uint8_t) + { + // Convert + std::vector scratchMemory; + std::vector convertedPixels(decodedWidth * decodedHeight * 4); + for (size_t pixelIndex = 0; pixelIndex < decodedWidth * decodedHeight; ++pixelIndex) { - memcpy(dest, src, 16); - src += 16; - dest += width * 4; - } - } + unsigned char* destPixel = &convertedPixels[pixelIndex * 4]; + destPixel[0] = 0; + destPixel[1] = 0; + destPixel[2] = 0; + destPixel[3] = 255; - return decodedPixels; -} + for (size_t channelIndex = 0; channelIndex < decodedFormatInfo.channelCount; ++channelIndex) + { + unsigned char* srcPixel = &decodedPixels[pixelIndex * decodedFormatInfo.bytesPerPixel + channelIndex * decodedFormatInfo.bytesPerChannel]; + switch (decodedFormatInfo.channelType) + { + case DXGI_FORMAT_Info::ChannelType::_uint8_t: destPixel[channelIndex] = *srcPixel; break; + default: + { + if (!ConvertToDoubles(srcPixel, 1, decodedFormatInfo.channelType, scratchMemory)) + { + Log(LogLevel::Error, __FUNCTION__ " Could not convert format \"%s\" to doubles\n", decodedFormatInfo.name); + return; + } -void SaveAsPng(const char* fileName, ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& formatInfo, int width, int height, int depth, int z, bool forceRGBA) -{ - // TODO: bc7 treatment + // linear to sRGB conversion + if (channelIndex != 3) + scratchMemory[0] = LinearTosRGB(scratchMemory[0]); - std::filesystem::path p(fileName); - if (!p.has_extension() || p.extension() != ".png") - p.replace_extension(".png"); - - unsigned char* pixels = nullptr; - readbackResource->Map(0, nullptr, (void**)&pixels); - - if (formatInfo.isCompressed) - { - std::vector decodedPixels = DecodeBc7(pixels, width, height); - stbi_write_png(p.string().c_str(), width, height, 4, decodedPixels.data(), 0); - } - else - { - int unalignedPitch = width * formatInfo.bytesPerPixel; - int alignedPitch = ALIGN((D3D12_TEXTURE_DATA_PITCH_ALIGNMENT * formatInfo.planeCount), unalignedPitch); - - if (forceRGBA) - { - std::vector paddedPixels(width * height * 4, 0); - for (int i = 0; i < width * height; ++i) - paddedPixels[i * 4 + 3] = 255; + if(!ConvertFromDoubles(scratchMemory, DXGI_FORMAT_Info::ChannelType::_uint8_t, &destPixel[channelIndex])) + { + Log(LogLevel::Error, __FUNCTION__ " Could not convert from doubles to uint8\n"); + return; + } - for (int y = 0; y < height; ++y) - { - for (int x = 0; x < width; ++x) - { - unsigned char* dest = &paddedPixels[(x + y * width) * 4]; - const unsigned char* src = &pixels[z * height * alignedPitch + y * alignedPitch + x * formatInfo.channelCount]; - memcpy(dest, src, formatInfo.channelCount); + break; + } } } - - stbi_write_png(p.string().c_str(), width, height, 4, paddedPixels.data(), 0); } - else - { - stbi_write_png(p.string().c_str(), width, height, formatInfo.channelCount, &pixels[z * height * alignedPitch], alignedPitch); - } - } - D3D12_RANGE writeRange; - writeRange.Begin = 1; - writeRange.End = 0; - readbackResource->Unmap(0, &writeRange); -} - -void SaveImageAsCSV(const char* fileName, ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& formatInfo, int width, int height, int depth, int z) -{ - std::filesystem::path p(fileName); - if (!p.has_extension() || p.extension() != ".csv") - p.replace_extension(".csv"); - - unsigned char* pixels = nullptr; - readbackResource->Map(0, nullptr, (void**)&pixels); - - FILE* file = nullptr; - fopen_s(&file, p.string().c_str(), "wb"); + // set the new pixels + decodedPixels = convertedPixels; - static const char c_channelNames[] = { 'R', 'G', 'B', 'A' }; - for (int i = 0; i < formatInfo.channelCount; ++i) - fprintf(file, "%s\"%c\"", (i > 0 ? "," : ""), c_channelNames[i]); - fprintf(file, "\n"); - - // Decode the pixels if we need to - int pitch = width * formatInfo.bytesPerPixel; - std::vector decodedPixels(width * height * 4, 0); - if (formatInfo.isCompressed) - { - std::vector decodedPixels = DecodeBc7(pixels, width, height); - pixels = decodedPixels.data(); - } - else - { - pitch = ALIGN((D3D12_TEXTURE_DATA_PITCH_ALIGNMENT * formatInfo.planeCount), pitch); - } - - switch (formatInfo.channelType) - { - case DXGI_FORMAT_Info::ChannelType::_uint8_t: - { - for (int i = 0; i < width * height; ++i) - { - const unsigned char* src = &pixels[z * height * pitch + i * formatInfo.channelCount * sizeof(uint8_t)]; - for (int c = 0; c < formatInfo.channelCount; ++c) - fprintf(file, "%s\"%u\"", (c > 0 ? "," : ""), (unsigned int)src[c]); - fprintf(file, "\n"); - } - break; - } - case DXGI_FORMAT_Info::ChannelType::_float: - { - for (int i = 0; i < width * height; ++i) - { - const float* src = (float*)&pixels[z * height * pitch + i * formatInfo.channelCount * sizeof(float)]; - for (int c = 0; c < formatInfo.channelCount; ++c) - fprintf(file, "%s\"%f\"", (c > 0 ? "," : ""), src[c]); - fprintf(file, "\n"); - } - break; - } - default: - { - Log(LogLevel::Error, __FUNCTION__ " Unhandled channel type: %i\n", (int)formatInfo.channelType); - } + // remember that our pixels are the new format + decodedFormat = DXGI_FORMAT_R8G8B8A8_UNORM; + decodedFormatInfo = Get_DXGI_FORMAT_Info(decodedFormat); } - fclose(file); - - D3D12_RANGE writeRange; - writeRange.Begin = 1; - writeRange.End = 0; - readbackResource->Unmap(0, &writeRange); -} - -void CopyImageToClipBoard(ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& formatInfo, int width, int height, int depth, int z) -{ - unsigned char* pixels = nullptr; - readbackResource->Map(0, nullptr, (void**)&pixels); - + // can we make this work with pixel formats other than U8? (like HDR images, i guess) constexpr uint32_t kBytesPerPixel = 4; constexpr WORD kBitsPerPixel = 8 * kBytesPerPixel; BITMAPV5HEADER header = { .bV5Size = sizeof(header), - .bV5Width = width, - .bV5Height = height, + .bV5Width = decodedWidth, + .bV5Height = decodedHeight, .bV5Planes = 1, .bV5BitCount = kBitsPerPixel, - .bV5Compression = BI_BITFIELDS, + .bV5Compression = BI_BITFIELDS, // Should this be BI_RGB? .bV5RedMask = 0x000000ff, .bV5GreenMask = 0x0000ff00, .bV5BlueMask = 0x00ff0000, .bV5AlphaMask = 0xff000000, - .bV5CSType = LCS_WINDOWS_COLOR_SPACE, + .bV5CSType = LCS_WINDOWS_COLOR_SPACE, // Should this be LCS_sRGB sometimes? }; - HGLOBAL hglob = GlobalAlloc(GMEM_MOVEABLE, sizeof(header) + width * height * 4); + HGLOBAL hglob = GlobalAlloc(GMEM_MOVEABLE, sizeof(header) + decodedWidth * decodedHeight * 4); if (hglob) { void* buffer = GlobalLock(hglob); @@ -4981,37 +4742,24 @@ void CopyImageToClipBoard(ID3D12Resource* readbackResource, const DXGI_FORMAT_In { CopyMemory(buffer, &header, sizeof(header)); - if (formatInfo.isCompressed) - { - std::vector decodedPixels = DecodeBc7(pixels, width, height); - for (int i = 0; i < height; i++) { - CopyMemory((unsigned char*)buffer + sizeof(header) + i * width * kBytesPerPixel, decodedPixels.data() + (height - 1 - i) * width * kBytesPerPixel, width * kBytesPerPixel); - } - } - else + for (int y = 0; y < decodedHeight; ++y) { - int unalignedPitch = width * formatInfo.bytesPerPixel; - int alignedPitch = ALIGN((D3D12_TEXTURE_DATA_PITCH_ALIGNMENT * formatInfo.planeCount), unalignedPitch); + const unsigned char* src = &decodedPixels[(zIndex * decodedHeight + y) * decodedWidth * decodedFormatInfo.bytesPerPixel]; + unsigned char* dest = (unsigned char*)buffer + sizeof(header) + (decodedHeight - 1 - y) * decodedWidth * 4; - if (formatInfo.channelCount == 4) + for (int x = 0; x < decodedWidth; ++x) { - for (int y = 0; y < height; ++y) - { - CopyMemory((unsigned char*)buffer + sizeof(header) + (height - 1 - y) * width * formatInfo.bytesPerPixel, &pixels[z * height * alignedPitch + y * alignedPitch], unalignedPitch); - } - } - else - { - for (int y = 0; y < height; ++y) + CopyMemory(dest, src, decodedFormatInfo.bytesPerPixel); + + switch (decodedFormatInfo.channelCount) { - for (int x = 0; x < width; ++x) - { - unsigned char values[4] = {}; - values[3] = 255; - memcpy(values, &pixels[z * height * alignedPitch + y * alignedPitch + x * formatInfo.channelCount], formatInfo.channelCount); - CopyMemory((unsigned char*)buffer + sizeof(header) + (height - 1 - y) * width * kBytesPerPixel + x * kBytesPerPixel, values, kBytesPerPixel); - } + case 1: dest[1] = 0; + case 2: dest[2] = 0; + case 3: dest[3] = 1; } + + src += decodedFormatInfo.bytesPerPixel; + dest += 4; } } @@ -5033,175 +4781,6 @@ void CopyImageToClipBoard(ID3D12Resource* readbackResource, const DXGI_FORMAT_In GlobalFree(hglob); } } - - D3D12_RANGE writeRange; - writeRange.Begin = 1; - writeRange.End = 0; - readbackResource->Unmap(0, &writeRange); -} - -void SaveAsHDR(const char* fileName, ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& formatInfo, int width, int height, int depth, int z) -{ - std::filesystem::path p(fileName); - if (!p.has_extension() || p.extension() != ".hdr") - p.replace_extension(".hdr"); - - int unalignedPitch = width * formatInfo.bytesPerPixel; - int alignedPitch = ALIGN((D3D12_TEXTURE_DATA_PITCH_ALIGNMENT * formatInfo.planeCount), unalignedPitch); - - D3D12_RANGE writeRange; - writeRange.Begin = 1; - writeRange.End = 0; - - std::vector pixels(width * height * formatInfo.bytesPerPixel); - - char* pixelsWidthPadding = nullptr; - readbackResource->Map(0, nullptr, (void**)&pixelsWidthPadding); - - // 24 bit unorm stored in a uint32 - if (formatInfo.format == DXGI_FORMAT_R24_UNORM_X8_TYPELESS) - { - for (int i = 0; i < height; ++i) - { - const uint32_t* src = (const uint32_t*)&pixelsWidthPadding[z * height * alignedPitch + alignedPitch * i]; - float* dest = (float*)&pixels[unalignedPitch * i]; - for (int j = 0; j < width; ++j) - dest[j] = float(double(src[j]) / 16777216.0); - } - } - else - { - for (int i = 0; i < height; ++i) - { - const char* src = &pixelsWidthPadding[z * height * alignedPitch + alignedPitch * i]; - char* dest = &pixels[unalignedPitch * i]; - memcpy(dest, src, unalignedPitch); - } - } - - readbackResource->Unmap(0, &writeRange); - - stbi_write_hdr(p.string().c_str(), width, height, formatInfo.channelCount, (float*)pixels.data()); -} - -bool SaveEXR(const float* pixels, int width, int height, int numChannels, const char* outfilename) -{ - EXRHeader header; - InitEXRHeader(&header); - - EXRImage image; - InitEXRImage(&image); - - image.num_channels = numChannels; - - std::vector> images; - images.resize(numChannels); - for (std::vector& v : images) - v.resize(width * height); - - // Split interleaved channels into separate channels - for (int i = 0; i < width * height; i++) - { - for (int j = 0; j < numChannels; ++j) - images[j][i] = pixels[numChannels * i + j]; - } - - // put the RGBA channels into ABGR because most EXR viewers expect this - std::vector image_ptr(numChannels); - for (int i = 0; i < numChannels; ++i) - image_ptr[i] = images[numChannels - i - 1].data(); - - image.images = (unsigned char**)image_ptr.data(); - image.width = width; - image.height = height; - - // Must be (A)BGR order, since most of EXR viewers expect this channel order. - const char* chanelNames[4] = { "R", "G", "B", "A" }; - header.num_channels = numChannels; - header.channels = (EXRChannelInfo*)malloc(sizeof(EXRChannelInfo) * header.num_channels); - for (int i = 0; i < numChannels; ++i) - { - char buffer[256]; - const char* channelName; - if (i < 4) - { - channelName = chanelNames[numChannels - i - 1]; - } - else - { - sprintf(buffer, "X%i", i - 4); - channelName = buffer; - } - strncpy(header.channels[i].name, channelName, 255); header.channels[0].name[strlen(channelName)] = '\0'; - } - - header.pixel_types = (int*)malloc(sizeof(int) * header.num_channels); - header.requested_pixel_types = (int*)malloc(sizeof(int) * header.num_channels); - for (int i = 0; i < header.num_channels; i++) { - header.pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT; // pixel type of input image - header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT;// TINYEXR_PIXELTYPE_HALF; // pixel type of output image to be stored in .EXR - } - - const char* err = NULL; // or nullptr in C++11 or later. - int ret = SaveEXRImageToFile(&image, &header, outfilename, &err); - if (ret != TINYEXR_SUCCESS) { - //fprintf(stderr, "Save EXR err: %s\n", err); - FreeEXRErrorMessage(err); // free's buffer for an error message - return ret; - } - //printf("Saved exr file. [ %s ] \n", outfilename); - - //free(pixels); - - free(header.channels); - free(header.pixel_types); - free(header.requested_pixel_types); - - return true; -} - -void SaveAsEXR(const char* fileName, ID3D12Resource* readbackResource, const DXGI_FORMAT_Info& formatInfo, int width, int height, int depth, int z) -{ - std::filesystem::path p(fileName); - if (!p.has_extension() || p.extension() != ".exr") - p.replace_extension(".exr"); - - int unalignedPitch = width * formatInfo.bytesPerPixel; - int alignedPitch = ALIGN((D3D12_TEXTURE_DATA_PITCH_ALIGNMENT * formatInfo.planeCount), unalignedPitch); - - D3D12_RANGE writeRange; - writeRange.Begin = 1; - writeRange.End = 0; - - std::vector pixels(width * height * formatInfo.bytesPerPixel); - - char* pixelsWidthPadding = nullptr; - readbackResource->Map(0, nullptr, (void**)&pixelsWidthPadding); - - // 24 bit unorm stored in a uint32 - if (formatInfo.format == DXGI_FORMAT_R24_UNORM_X8_TYPELESS) - { - for (int i = 0; i < height; ++i) - { - const uint32_t* src = (const uint32_t*)&pixelsWidthPadding[z * height * alignedPitch + alignedPitch * i]; - float* dest = (float*)&pixels[unalignedPitch * i]; - for (int j = 0; j < width; ++j) - dest[j] = float(double(src[j]) / 16777216.0); - } - } - else - { - for (int i = 0; i < height; ++i) - { - const char* src = &pixelsWidthPadding[z * height * alignedPitch + alignedPitch * i]; - char* dest = &pixels[unalignedPitch * i]; - memcpy(dest, src, unalignedPitch); - } - } - - readbackResource->Unmap(0, &writeRange); - - SaveEXR((const float*)pixels.data(), width, height, formatInfo.channelCount, p.string().c_str()); } void ShowResourceView() @@ -5431,134 +5010,155 @@ void ShowResourceView() case RuntimeTypes::ViewableResource::Type::Texture3D: case RuntimeTypes::ViewableResource::Type::TextureCube: { - int imageZ = (res.m_type == RuntimeTypes::ViewableResource::Type::Texture3D) ? res.m_arrayIndex : 0; - if (!g_hideUI) { - // Option to save the texture - DXGI_FORMAT_Info formatInfo = Get_DXGI_FORMAT_Info(res.m_format); - if (formatInfo.channelType == DXGI_FORMAT_Info::ChannelType::_uint8_t) - { - nfdchar_t* outPath = nullptr; + // Figure out what kind of texture data we have, once it's decoded (if it's block compressed) + DXGI_FORMAT decodedFormat = ImageReadback::GetDecodedFormat(res.m_format); + DXGI_FORMAT_Info decodedFormatInfo = Get_DXGI_FORMAT_Info(decodedFormat); - static bool forceRGBA = false; - static bool saveAllVertically = false; + // Images can always be copied + ImGui::SameLine(); + if (ImGui::Button("Copy Image")) + CopyImageToClipBoard(res.m_resourceReadback, res.m_origResourceDesc, res.m_arrayIndex, res.m_mipIndex); - ImGui::SameLine(); - if (ImGui::Button("Copy Image")) - { - CopyImageToClipBoard(res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], imageZ); - } + // The types that can be saved as + enum class SaveAsType + { + PNG, + CSV, + EXR, + HDR, + DDS_BC6, + DDS_BC7, + Binary, + }; + + struct SaveAsTypeInfo + { + const char* label; + const char* extension; + }; - ImGui::SameLine(); - if (ImGui::Button("Save as ...") && NFD_SaveDialog("png;csv", "", &outPath) == NFD_OKAY) + static const SaveAsTypeInfo c_saveAsTypeInfo[] = + { + { "png", "png" }, + { "csv", "csv" }, + { "exr", "exr" }, + { "hdr", "hdr" }, + { "dds (BC6)", "dds" }, + { "dds (BC7)", "dds" }, + { "binary", "bin" }, + }; + + // figure out what we can save as + bool canSaveAsPNG_BC7 = (decodedFormatInfo.channelType == DXGI_FORMAT_Info::ChannelType::_uint8_t); + bool canSaveAsEXR_HDR_BC6 = (decodedFormatInfo.channelType == DXGI_FORMAT_Info::ChannelType::_float); + + // make the option list + std::vector options; + if (canSaveAsPNG_BC7) + { + options.push_back(SaveAsType::PNG); + options.push_back(SaveAsType::DDS_BC7); + } + if (canSaveAsEXR_HDR_BC6) + { + options.push_back(SaveAsType::EXR); + options.push_back(SaveAsType::HDR); + options.push_back(SaveAsType::DDS_BC6); + } + options.push_back(SaveAsType::CSV); + options.push_back(SaveAsType::Binary); + + // figure out which is selected + static std::string s_saveOptionStr; + SaveAsType saveAsType = options[0]; + int saveAsOptionIndex = 0; + for (size_t optionIndex = 0; optionIndex < options.size(); ++optionIndex) + { + if (c_saveAsTypeInfo[(int)options[optionIndex]].label == s_saveOptionStr) { - std::filesystem::path p(outPath); - if (p.extension() == ".csv") - SaveImageAsCSV(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], imageZ); - else - SaveAsPng(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], imageZ, forceRGBA); + saveAsType = options[optionIndex]; + saveAsOptionIndex = (int)optionIndex; } + } + + // Show the UI and do the work + { + static bool s_saveAll = false; + static bool s_bc6_signed = false; + static bool s_bc7_srgb = true; - // Save all slices - if (res.m_size[2] > 1) + ImGuiStyle& style = ImGui::GetStyle(); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 0.0f)); + + std::string saveAsStr = "Save as " + std::string(c_saveAsTypeInfo[(int)saveAsType].label); + nfdchar_t* outPath = nullptr; + if (ImGui::Button(saveAsStr.c_str()) && NFD_SaveDialog(c_saveAsTypeInfo[(int)saveAsType].extension, "", &outPath) == NFD_OKAY) { - ImGui::SameLine(); - if (ImGui::Button("Save all as ...") && NFD_SaveDialog("png;csv", "", &outPath) == NFD_OKAY) + ImageSave::Options saveOptions; + saveOptions.zIndex = res.m_arrayIndex; + saveOptions.mipIndex = res.m_mipIndex; + saveOptions.saveAll = s_saveAll; + saveOptions.isCubeMap = (res.m_type == RuntimeTypes::ViewableResource::Type::TextureCube); + saveOptions.bc6.isSigned = s_bc6_signed; + saveOptions.bc7.sRGB = s_bc7_srgb; + + bool success = false; + switch (saveAsType) { - std::filesystem::path p(outPath); - if (p.extension() == ".csv") - { - SaveImageAsCSV(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1] * res.m_size[2], 1, 0); - } - else if (saveAllVertically) - { - SaveAsPng(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1] * res.m_size[2], 1, 0, forceRGBA); - } - else - { - std::filesystem::path p(outPath); - std::string baseFileName = p.replace_extension().string(); - - for (int z = 0; z < res.m_size[2]; ++z) - { - char buffer[32]; - sprintf_s(buffer, ".%i", z); - std::string fileName = baseFileName + std::string(buffer) + std::string(".png"); - SaveAsPng(fileName.c_str(), res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], z, forceRGBA); - } - } + case SaveAsType::PNG: success = ImageSave::SaveAsPng(outPath, g_pd3dDevice, res.m_resourceReadback, res.m_origResourceDesc, saveOptions); break; + case SaveAsType::CSV: success = ImageSave::SaveAsCSV(outPath, g_pd3dDevice, res.m_resourceReadback, res.m_origResourceDesc, saveOptions); break; + case SaveAsType::EXR: success = ImageSave::SaveAsEXR(outPath, g_pd3dDevice, res.m_resourceReadback, res.m_origResourceDesc, saveOptions); break; + case SaveAsType::HDR: success = ImageSave::SaveAsHDR(outPath, g_pd3dDevice, res.m_resourceReadback, res.m_origResourceDesc, saveOptions); break; + case SaveAsType::DDS_BC6: success = ImageSave::SaveAsDDS_BC6(outPath, g_pd3dDevice, res.m_resourceReadback, res.m_origResourceDesc, saveOptions); break; + case SaveAsType::DDS_BC7: success = ImageSave::SaveAsDDS_BC7(outPath, g_pd3dDevice, res.m_resourceReadback, res.m_origResourceDesc, saveOptions); break; + case SaveAsType::Binary: success = ImageSave::SaveAsBinary(outPath, g_pd3dDevice, res.m_resourceReadback, res.m_origResourceDesc, saveOptions); break; } - ImGui::SameLine(); - ImGui::Checkbox("Write Single Image", &saveAllVertically); - ShowToolTip("Writes all slices to a single image, vertically"); + if (!success) + { + Log(LogLevel::Error, __FUNCTION__ " Could not save file \"%s\"\n", outPath); + } } ImGui::SameLine(); - ImGui::Checkbox("Write RGBA", &forceRGBA); - ShowToolTip("Write out an RGBA png even if there are fewer than 4 channels. A 2 channel PNG would be written as Red,Alpha not Red,Green, this helps that.\n" - "Alpha is padded as 255. Other channels are padded as 0."); - } - else if (formatInfo.channelType == DXGI_FORMAT_Info::ChannelType::_float || formatInfo.format == DXGI_FORMAT_R24_UNORM_X8_TYPELESS) - { - nfdchar_t* outPath = nullptr; + if (ImGui::ArrowButton("##ChooseSaveAs", ImGuiDir_Down)) + ImGui::OpenPopup("PopupChooseSaveAs"); - static bool saveAllVertically = false; + ImGui::PopStyleVar(1); - ImGui::SameLine(); - if (ImGui::Button("Save as ...") && NFD_SaveDialog("exr;hdr;csv", "", &outPath) == NFD_OKAY) + if (saveAsType == SaveAsType::DDS_BC6) + { + ImGui::SameLine(); + ImGui::Checkbox("Signed", &s_bc6_signed); + ShowToolTip("If true, saves as DXGI_FORMAT_BC6H_SF16, else saves as DXGI_FORMAT_BC6H_UF16."); + } + + if (saveAsType == SaveAsType::DDS_BC7) { - std::filesystem::path p(outPath); - if (p.extension() == ".csv") - SaveImageAsCSV(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], imageZ); - else if (p.extension() == ".hdr") - SaveAsHDR(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], imageZ); - else - SaveAsEXR(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], imageZ); + ImGui::SameLine(); + ImGui::Checkbox("sRGB", &s_bc7_srgb); + ShowToolTip("If true, saves as DXGI_FORMAT_BC7_UNORM_SRGB, else saves as DXGI_FORMAT_BC7_UNORM."); } - // Save all slices - if (res.m_size[2] > 1) + if (res.m_size[2] > 1 || res.m_numMips > 1) { ImGui::SameLine(); - if (ImGui::Button("Save all as ...") && NFD_SaveDialog("exr;hdr;csv", "", &outPath) == NFD_OKAY) + ImGui::Checkbox("Save All", &s_saveAll); + ShowToolTip("Saves all slices and mips if true, else only saves the current one"); + } + + if (ImGui::BeginPopupContextItem("PopupChooseSaveAs")) + { + for (size_t optionIndex = 0; optionIndex < options.size(); ++optionIndex) { - std::filesystem::path p(outPath); - std::string extension = p.has_extension() ? p.extension().string() : std::string(".exr"); - - if (p.extension() == ".csv") - { - SaveImageAsCSV(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1] * res.m_size[2], 1, 0); - } - else if (saveAllVertically) - { - if (extension == ".hdr") - SaveAsHDR(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1] * res.m_size[2], 1, 0); - else - SaveAsEXR(outPath, res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1] * res.m_size[2], 1, 0); - } - else - { - std::string baseFileName = p.replace_extension().string(); - - for (int z = 0; z < res.m_size[2]; ++z) - { - char buffer[32]; - sprintf_s(buffer, ".%i", z); - std::string fileName = baseFileName + std::string(buffer) + std::string(extension); - - if (extension == ".hdr") - SaveAsHDR(fileName.c_str(), res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], z); - else - SaveAsEXR(fileName.c_str(), res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], z); - } - } + bool checked = saveAsOptionIndex == optionIndex; + if (ImGui::MenuItem(c_saveAsTypeInfo[(int)options[optionIndex]].label, nullptr, &checked)) + s_saveOptionStr = c_saveAsTypeInfo[(int)options[optionIndex]].label; } - ImGui::SameLine(); - ImGui::Checkbox("Write Single Image", &saveAllVertically); - ShowToolTip("Writes all slices to a single image, vertically"); + ImGui::EndPopup(); } } @@ -5574,69 +5174,86 @@ void ShowResourceView() // Show size and format if (res.m_type == RuntimeTypes::ViewableResource::Type::Texture2D) - { - ImGui::Text("%ix%i %s", res.m_size[0], res.m_size[1], formatInfo.name); - } + ImGui::Text("%ix%i %s", res.m_size[0], res.m_size[1], Get_DXGI_FORMAT_Info(res.m_origResourceDesc.Format).name); else - { - ImGui::Text("%ix%ix%i %s", res.m_size[0], res.m_size[1], res.m_size[2], formatInfo.name); + ImGui::Text("%ix%ix%i %s", res.m_size[0], res.m_size[1], res.m_size[2], Get_DXGI_FORMAT_Info(res.m_origResourceDesc.Format).name); + // Mip drop down + if (res.m_numMips > 1) + { char buffer[32]; float comboWidth = 0.0f; std::vector optionsStr; - for (int i = 0; i < res.m_size[2]; ++i) + for (int i = 0; i < res.m_numMips; ++i) { sprintf_s(buffer, "%i", i); optionsStr.push_back(buffer); comboWidth = std::max(comboWidth, ImGui::CalcTextSize(optionsStr[i].c_str()).x + ImGui::GetStyle().FramePadding.x * 2.0f); } std::vector options; - for (int i = 0; i < res.m_size[2]; ++i) + for (int i = 0; i < res.m_numMips; ++i) options.push_back(optionsStr[i].c_str()); ImGui::SameLine(); ImGui::SetNextItemWidth(comboWidth + ImGui::GetTextLineHeightWithSpacing() + 10); - const char* Label = (res.m_type == RuntimeTypes::ViewableResource::Type::Texture2DArray) ? "Index" : "Slice"; - - ImGui::Combo(Label, &res.m_arrayIndex, options.data(), (int)options.size()); + ImGui::Combo("Mip", &res.m_mipIndex, options.data(), (int)options.size()); } - if (res.m_numMips > 1) + // Z index drop down + if (res.m_type != RuntimeTypes::ViewableResource::Type::Texture2D) { - char buffer[32]; + const char* label = "Index"; + switch (res.m_type) + { + case RuntimeTypes::ViewableResource::Type::Texture2DArray: label = "Index"; break; + case RuntimeTypes::ViewableResource::Type::Texture3D: label = "Slice"; break; + case RuntimeTypes::ViewableResource::Type::TextureCube: label = "Face"; break; + } + float comboWidth = 0.0f; std::vector optionsStr; - for (int i = 0; i < res.m_numMips; ++i) + std::vector options; + if (res.m_type == RuntimeTypes::ViewableResource::Type::TextureCube) { - sprintf_s(buffer, "%i", i); - optionsStr.push_back(buffer); - comboWidth = std::max(comboWidth, ImGui::CalcTextSize(optionsStr[i].c_str()).x + ImGui::GetStyle().FramePadding.x * 2.0f); + options.push_back("Right (X+)"); + options.push_back("Left (X-)"); + options.push_back("Up (Y+)"); + options.push_back("Down (Y-)"); + options.push_back("Front (Z+)"); + options.push_back("Back (Z-)"); } - std::vector options; - for (int i = 0; i < res.m_numMips; ++i) - options.push_back(optionsStr[i].c_str()); + else + { + char buffer[32]; + for (int i = 0; i < res.m_size[2]; ++i) + { + sprintf_s(buffer, "%i", i); + optionsStr.push_back(buffer); + } + for (int i = 0; i < res.m_size[2]; ++i) + options.push_back(optionsStr[i].c_str()); + } + + for (const char* option : options) + comboWidth = std::max(comboWidth, ImGui::CalcTextSize(option).x + ImGui::GetStyle().FramePadding.x * 2.0f); ImGui::SameLine(); ImGui::SetNextItemWidth(comboWidth + ImGui::GetTextLineHeightWithSpacing() + 10); - ImGui::Combo("Mip", &res.m_mipIndex, options.data(), (int)options.size()); + ImGui::Combo(label, &res.m_arrayIndex, options.data(), (int)options.size()); } - // Show the clicked pixel { - float x = ImGui::GetStyle().WindowPadding.x + ImGui::CalcTextSize("Mouse Hover 12345,12345 ").x; + float imgui_x = ImGui::GetStyle().WindowPadding.x + ImGui::CalcTextSize("Mouse Hover 12345,12345 ").x; + // Show the clicked pixel ImGui::Text("Mouse Click %i,%i", mouseClickX, mouseClickY); - ImGui::SameLine(); - ImGui::SetCursorPosX(x); - ShowPixelValue(res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], mouseClickX, mouseClickY, imageZ); + ShowPixelValue(res.m_resourceReadback, res.m_origResourceDesc, mouseClickX, mouseClickY, res.m_arrayIndex, res.m_mipIndex, imgui_x); // Show the hovered pixel ImGui::Text("Mouse Hover %i,%i", mouseHoverX, mouseHoverY); - ImGui::SameLine(); - ImGui::SetCursorPosX(x); - ShowPixelValue(res.m_resourceReadback, formatInfo, res.m_size[0], res.m_size[1], res.m_size[2], mouseHoverX, mouseHoverY, imageZ); + ShowPixelValue(res.m_resourceReadback, res.m_origResourceDesc, mouseHoverX, mouseHoverY, res.m_arrayIndex, res.m_mipIndex, imgui_x); } { @@ -5695,7 +5312,7 @@ void ShowResourceView() ImGui::SameLine(); if (ImGui::Button("Auto")) - AutoHistogram(res.m_resourceReadback, res.m_format, res.m_size[0], res.m_size[1], res.m_size[2], imageZ, g_histogramMinMax[0], g_histogramMinMax[1]); + AutoHistogram(res.m_resourceReadback, res.m_origResourceDesc, res.m_arrayIndex, res.m_mipIndex, g_histogramMinMax[0], g_histogramMinMax[1]); ImGui::SameLine(); if (ImGui::Button("Reset")) { @@ -6107,12 +5724,14 @@ void ShowProfilerWindow() ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(255, 255, 0, 255)); ImGui::TextWrapped( "Warning: Profiling is affected by features in this viewer. " - "For more accurate results turn on profile mode under the settings menu to reduce copies, readbacks, and turn off vsync.\n" + "For more accurate results turn on profile mode under the settings menu or the checkbox below, to reduce copies, readbacks, and turn off vsync.\n" "You may also wish to turn on stable power state.\n" "\nNote: Generated code may have different performance characteristics.\n" ); ImGui::PopStyleColor(); + ImGui::Checkbox("Profile Mode", &g_profileMode); + if (g_debugLayerOn) { ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(255, 128, 0, 255)); @@ -6251,7 +5870,7 @@ class Python : public PythonInterface bool LoadGG(const char* fileName) override final { ClearWantsReadback(); - return LoadGGFile(fileName, false); + return LoadGGFile(fileName, false, false); } void RequestExit(int exitCode) override final @@ -6345,22 +5964,15 @@ class Python : public PythonInterface } } - void SetWantReadback(const char* viewableResourceName, bool wantsReadback, int arrayIndex, int mipIndex) override final + void SetWantReadback(const char* viewableResourceName, bool wantsReadback) override final { if (wantsReadback) - { - ReadbackParams params; - params.arrayIndex = arrayIndex; - params.mipIndex = mipIndex; - m_wantsReadback[viewableResourceName] = params; - } + m_wantsReadback.insert(viewableResourceName); else - { m_wantsReadback.erase(viewableResourceName); - } } - bool Readback(const char* viewableResourceName, GigiArray& data) override final + bool Readback(const char* viewableResourceName, int arrayIndex, int mipIndex, GigiArray& data) override final { // If they didn't say that it wants to be read back, we won't have read it back! if (m_wantsReadback.count(viewableResourceName) == 0) @@ -6411,9 +6023,21 @@ class Python : public PythonInterface if (isTexture) { + // Get the decoded image data + DXGI_FORMAT decodedFormat; + std::vector decodedPixels; + int decodedWidth = 0; + int decodedHeight = 0; + int decodedDepth = 1; + if (!ImageReadback::GetDecodedImageSliceAllDepths(g_pd3dDevice, vr->m_resourceReadback, vr->m_origResourceDesc, arrayIndex, mipIndex, decodedPixels, decodedFormat, decodedWidth, decodedHeight, decodedDepth)) + { + Log(LogLevel::Warn, "Python: Host.Readback() could not decode resource slice \"%s\" %i %i.", viewableResourceName, arrayIndex, mipIndex); + return false; + } + // get the type info - DXGI_FORMAT_Info formatInfo = Get_DXGI_FORMAT_Info(vr->m_format); - switch (formatInfo.channelType) + DXGI_FORMAT_Info decodedFormatInfo = Get_DXGI_FORMAT_Info(decodedFormat); + switch (decodedFormatInfo.channelType) { case DXGI_FORMAT_Info::ChannelType::_uint8_t: data.formatString = "B"; break; case DXGI_FORMAT_Info::ChannelType::_uint16_t: data.formatString = "H"; break; @@ -6424,52 +6048,24 @@ class Python : public PythonInterface case DXGI_FORMAT_Info::ChannelType::_float: data.formatString = "f"; break; case DXGI_FORMAT_Info::ChannelType::_half: data.formatString = "e"; break; } - data.itemSize = formatInfo.bytesPerChannel; - - // only 3d textures have a depth - int depth = (vr->m_type == RuntimeTypes::ViewableResource::Type::Texture3D) ? vr->m_size[2] : 1; - - // Get the data - { - // allocate - data.data.resize(vr->m_size[0] * vr->m_size[1] * depth * formatInfo.bytesPerPixel); + data.itemSize = decodedFormatInfo.bytesPerChannel; - // map - char* pixels = nullptr; - vr->m_resourceReadback->Map(0, nullptr, (void**)&pixels); - - // copy - int unalignedPitch = vr->m_size[0] * formatInfo.bytesPerPixel; - int alignedPitch = ALIGN(D3D12_TEXTURE_DATA_PITCH_ALIGNMENT, unalignedPitch); - for (int iz = 0; iz < depth; ++iz) - { - for (int iy = 0; iy < vr->m_size[1]; ++iy) - { - const char* src = &pixels[iz * vr->m_size[1] * alignedPitch + iy * alignedPitch]; - char* dest = &data.data[iz * vr->m_size[1] * unalignedPitch + iy * unalignedPitch]; - memcpy(dest, src, unalignedPitch); - } - } - - // unmap - D3D12_RANGE writeRange; - writeRange.Begin = 1; - writeRange.End = 0; - vr->m_resourceReadback->Unmap(0, &writeRange); - } + // copy the data + data.data.resize(decodedPixels.size()); + memcpy(data.data.data(), decodedPixels.data(), data.data.size()); // dimensions - data.dims.push_back(formatInfo.channelCount); - data.dims.push_back(vr->m_size[0]); - data.dims.push_back(vr->m_size[1]); - data.dims.push_back(depth); + data.dims.push_back(decodedFormatInfo.channelCount); + data.dims.push_back(decodedWidth); + data.dims.push_back(decodedHeight); + data.dims.push_back(decodedDepth); std::reverse(data.dims.begin(), data.dims.end()); // strides - data.strides.push_back(formatInfo.bytesPerChannel); // bytes to get from one channel to the next - data.strides.push_back(data.strides[0] * formatInfo.channelCount); // bytes to increment x position - data.strides.push_back(data.strides[1] * vr->m_size[0]); // bytes to increment y position - data.strides.push_back(data.strides[2] * vr->m_size[1]); // bytes to increment z position + data.strides.push_back(decodedFormatInfo.bytesPerChannel); // bytes to get from one channel to the next + data.strides.push_back(decodedFormatInfo.bytesPerPixel); // bytes to increment x position + data.strides.push_back(decodedWidth * decodedFormatInfo.bytesPerPixel); // bytes to increment y position + data.strides.push_back(decodedHeight * decodedWidth * decodedFormatInfo.bytesPerPixel); // bytes to increment z position std::reverse(data.strides.begin(), data.strides.end()); return true; @@ -6555,7 +6151,7 @@ class Python : public PythonInterface if (vr->m_type == RuntimeTypes::ViewableResource::Type::ConstantBuffer) data.data.resize(data.itemSize); else - data.data.resize(vr->m_size[0]); + data.data.resize(vr->m_stride * vr->m_count); // map char* values = nullptr; @@ -6850,25 +6446,6 @@ class Python : public PythonInterface desc.state = GigiInterpreterPreviewWindowDX12::ImportedResourceState::dirty; } - void SetImportedTextureBinaryType(const char* textureName, GGUserFile_ImportedTexture_BinaryType type) override final - { - if (g_interpreter.m_importedResources.count(textureName) == 0) - { - Log(LogLevel::Error, "Python: SetImportedTextureSize could not find imported texture %s", textureName); - return; - } - - GigiInterpreterPreviewWindowDX12::ImportedResourceDesc& desc = g_interpreter.m_importedResources[textureName]; - if (!desc.isATexture) - { - Log(LogLevel::Error, "Python: SetImportedTextureSize called for %s which is not a texture", textureName); - return; - } - - desc.texture.binaryType = type; - desc.state = GigiInterpreterPreviewWindowDX12::ImportedResourceState::dirty; - } - void SetImportedTextureBinarySize(const char* textureName, int x, int y, int z) override final { if (g_interpreter.m_importedResources.count(textureName) == 0) @@ -6884,28 +6461,28 @@ class Python : public PythonInterface return; } - desc.texture.binaryDims[0] = x; - desc.texture.binaryDims[1] = y; - desc.texture.binaryDims[2] = z; + desc.texture.binaryDesc.size[0] = x; + desc.texture.binaryDesc.size[1] = y; + desc.texture.binaryDesc.size[2] = z; desc.state = GigiInterpreterPreviewWindowDX12::ImportedResourceState::dirty; } - void SetImportedTextureBinaryChannels(const char* textureName, int channels) override final + void SetImportedTextureBinaryFormat(const char* textureName, int textureFormat) override final { if (g_interpreter.m_importedResources.count(textureName) == 0) { - Log(LogLevel::Error, "Python: SetImportedTextureBinaryChannels could not find imported texture %s", textureName); + Log(LogLevel::Error, "Python: SetImportedTextureBinaryFormat could not find imported texture %s", textureName); return; } GigiInterpreterPreviewWindowDX12::ImportedResourceDesc& desc = g_interpreter.m_importedResources[textureName]; if (!desc.isATexture) { - Log(LogLevel::Error, "Python: SetImportedTextureBinaryChannels called for %s which is not a texture", textureName); + Log(LogLevel::Error, "Python: SetImportedTextureBinaryFormat called for %s which is not a texture", textureName); return; } - desc.texture.binaryChannels = channels; + desc.texture.binaryDesc.format = (TextureFormat)textureFormat; desc.state = GigiInterpreterPreviewWindowDX12::ImportedResourceState::dirty; } @@ -6927,6 +6504,17 @@ class Python : public PythonInterface g_systemVariables.camera.cameraAltitudeAzimuth[1] = azimuth; } + void SetCameraNearFarZ(float nearZ, float farZ) override final + { + g_systemVariables.camera.nearPlane = nearZ; + g_systemVariables.camera.farPlane = farZ; + } + + void SetCameraFlySpeed(float speed) override final + { + g_systemVariables.camera.flySpeed = speed; + } + void GetCameraPos(float& X, float& Y, float& Z) override final { X = g_systemVariables.camera.cameraPos[0]; @@ -6972,6 +6560,69 @@ class Python : public PythonInterface return ret; } + bool IsResourceCreated(const char* resourceName) override final + { + if (g_interpreter.m_importedResources.count(resourceName) == 0) + { + Log(LogLevel::Error, "Python: IsResourceCreated could not find imported resource %s", resourceName); + return false; + } + + bool existsAsBuffer = false; + RuntimeTypes::RenderGraphNode_Resource_Buffer& runtimeDataBuffer = g_interpreter.GetRuntimeNodeData_RenderGraphNode_Resource_Buffer(resourceName, existsAsBuffer); + + bool existsAsTexture = false; + RuntimeTypes::RenderGraphNode_Resource_Texture& runtimeDataTexture = g_interpreter.GetRuntimeNodeData_RenderGraphNode_Resource_Texture(resourceName, existsAsTexture); + + return runtimeDataBuffer.m_resource || runtimeDataTexture.m_resource; + } + + void SetViewedResource(const char* resourceName) override final + { + // RuntimeTypes::RenderGraphNode_Base + g_interpreter.RuntimeDataLambda( + [resourceName](auto& key, const RuntimeTypes::RenderGraphNode_Base& runtimeData) + { + int viewableResourceIndex = -1; + for (const RuntimeTypes::ViewableResource& viewableResource : runtimeData.m_viewableResources) + { + viewableResourceIndex++; + if (!_stricmp(viewableResource.m_displayName.c_str(), resourceName)) + { + int nodeIndex = FrontEndNodesNoCaching::GetNodeIndexByName(g_interpreter.GetRenderGraph(), std::get<0>(key).c_str()); + if (nodeIndex == -1) + continue; + + const RenderGraphNode& nodeBase = g_interpreter.GetRenderGraph().nodes[nodeIndex]; + switch (nodeBase._index) + { + case RenderGraphNode::c_index_resourceBuffer: + { + const RenderGraphNode_Resource_Buffer& node = nodeBase.resourceBuffer; + g_resourceView.Buffer(nodeIndex, viewableResourceIndex); + break; + } + case RenderGraphNode::c_index_resourceTexture: + { + const RenderGraphNode_Resource_Texture& node = nodeBase.resourceTexture; + RuntimeTypes::ViewableResource::Type type = RuntimeTypes::ViewableResource::Type::Texture2D; + switch (node.dimension) + { + case TextureDimensionType::Texture2D: type = RuntimeTypes::ViewableResource::Type::Texture2D; break; + case TextureDimensionType::Texture2DArray: type = RuntimeTypes::ViewableResource::Type::Texture2DArray; break; + case TextureDimensionType::Texture3D: type = RuntimeTypes::ViewableResource::Type::Texture3D; break; + case TextureDimensionType::TextureCube: type = RuntimeTypes::ViewableResource::Type::TextureCube; break; + } + g_resourceView.Texture(nodeIndex, viewableResourceIndex, type); + break; + } + } + } + } + } + ); + } + void SetShaderAssertsLogging(bool set) override final { g_logCollectedShaderAsserts = set; @@ -7079,18 +6730,8 @@ class Python : public PythonInterface { viewableResource.m_wantsToBeViewed = true; viewableResource.m_wantsToBeReadBack = true; - - if (m_wantsReadback.count(viewableResource.m_displayName) == 0) - { - viewableResource.m_arrayIndex = 0; - viewableResource.m_mipIndex = 0; - } - else - { - viewableResource.m_arrayIndex = m_wantsReadback[viewableResource.m_displayName].arrayIndex; - viewableResource.m_mipIndex = m_wantsReadback[viewableResource.m_displayName].mipIndex; - } - + viewableResource.m_arrayIndex = 0; + viewableResource.m_mipIndex = 0; continue; } @@ -7099,8 +6740,8 @@ class Python : public PythonInterface continue; viewableResource.m_wantsToBeViewed = true; viewableResource.m_wantsToBeReadBack = true; - viewableResource.m_arrayIndex = m_wantsReadback[viewableResource.m_displayName].arrayIndex; - viewableResource.m_mipIndex = m_wantsReadback[viewableResource.m_displayName].mipIndex; + viewableResource.m_arrayIndex = 0; + viewableResource.m_mipIndex = 0; } } ); @@ -7117,13 +6758,7 @@ class Python : public PythonInterface m_wantsReadback.clear(); } - struct ReadbackParams - { - int arrayIndex; - int mipIndex; - }; - - std::unordered_map m_wantsReadback; + std::unordered_set m_wantsReadback; }; Python g_python; @@ -7237,7 +6872,6 @@ int main(int argc, char** argv) // Parse command line parameters int argIndex = 0; - int firstPythonArgv = -1; while (argIndex < argc) { if (!_stricmp(argv[argIndex], "-editor")) @@ -7284,8 +6918,12 @@ int main(int argc, char** argv) g_runPyFileName = argv[argIndex + 1]; argIndex += 2; - firstPythonArgv = argIndex; - break; // NOTE: all arguments after -run are sent to the python script! + // NOTE: all arguments after -run are sent to the python script! + g_runPyArgs.clear(); + for (int argumentIndex = argIndex; argumentIndex < argc; ++argumentIndex) + g_runPyArgs.push_back(ToWideString(argv[argumentIndex])); + + break; } else if (!_stricmp(argv[argIndex], "-nodebuglayer")) { @@ -7307,6 +6945,11 @@ int main(int argc, char** argv) g_pixCaptureEnabled = false; argIndex++; } + else if (!_stricmp(argv[argIndex], "-compileshadersfordebug")) + { + g_interpreter.m_compileShadersForDebug = true; + argIndex++; + } else { argIndex++; @@ -7324,7 +6967,7 @@ int main(int argc, char** argv) TryLoadRenderDocAPI(); } - PythonInit(&g_python, argc, argv, firstPythonArgv); + PythonInit(&g_python); if (g_isForEditor) { @@ -7362,6 +7005,7 @@ int main(int argc, char** argv) } g_hwnd = ::CreateWindowW(wc.lpszClassName, L"Gigi Viewer - DX12 (Gigi v" GIGI_VERSION() ")", WS_OVERLAPPEDWINDOW, x, y, width, height, NULL, NULL, wc.hInstance, NULL); + DragAcceptFiles(g_hwnd, true); // Initialize Direct3D if (!CreateDeviceD3D(g_hwnd)) @@ -7532,7 +7176,7 @@ int main(int argc, char** argv) { nfdchar_t* outPath = nullptr; if (NFD_OpenDialog("gg", "", &outPath) == NFD_OKAY) - LoadGGFile(outPath, false); + LoadGGFile(outPath, false, true); } } else if (ImGui::IsKeyReleased(ImGui::GetKeyIndex(ImGuiKey_R))) @@ -7593,19 +7237,22 @@ int main(int argc, char** argv) if (!g_commandLineLoadGGFileName.empty()) { - LoadGGFile(g_commandLineLoadGGFileName.c_str(), false); + LoadGGFile(g_commandLineLoadGGFileName.c_str(), false, true); g_commandLineLoadGGFileName.clear(); } if (!g_runPyFileName.empty()) { - g_recentPythonScripts.AddEntry(g_runPyFileName.c_str()); + if (g_runPyFileAddToRecentScripts) + g_recentPythonScripts.AddEntry(g_runPyFileName.c_str()); Log(LogLevel::Info, "Executing python script \"%s\"", g_runPyFileName.c_str()); - if (!PythonExecute(g_runPyFileName.c_str())) + if (!PythonExecute(g_runPyFileName.c_str(), g_runPyArgs)) Log(LogLevel::Error, "Could not execute python script \"%s\"", g_runPyFileName.c_str()); else Log(LogLevel::Info, "Python script finished", g_runPyFileName.c_str()); g_runPyFileName.clear(); + g_runPyArgs.clear(); + g_runPyFileAddToRecentScripts = true; } } @@ -7932,6 +7579,14 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) switch (msg) { + case WM_DROPFILES: + { + unsigned int dropFileNameLen = DragQueryFileA((HDROP)wParam, 0, nullptr, 0); + std::vector dropFileName(dropFileNameLen + 1); + unsigned int ret = DragQueryFileA((HDROP)wParam, 0, dropFileName.data(), (UINT)dropFileName.size()); + LoadGGFile(dropFileName.data(), false, true); + return 0; + } case WM_SIZE: if (g_pd3dDevice != NULL && wParam != SIZE_MINIMIZED) { diff --git a/GigiViewerDX12/packages.config b/GigiViewerDX12/packages.config index 28fc997f..e81fa556 100644 --- a/GigiViewerDX12/packages.config +++ b/GigiViewerDX12/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/Install.nsi b/Install.nsi index 7f851d94..aa9f3a43 100644 --- a/Install.nsi +++ b/Install.nsi @@ -11,7 +11,7 @@ !define DESCRIPTION "Rapid Graphics Development Platform" !define VERSIONMAJOR 0 !define VERSIONMINOR 99 - !define VERSIONBUILD 4 + !define VERSIONBUILD 5 !define SLUG "${APPNAME} v${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}" # These will be displayed by the "Click here for support information" link in "Add/Remove Programs" diff --git a/MakeCode_UnitTests_DX12.py b/MakeCode_UnitTests_DX12.py index 5d74a4c3..5dcb27b0 100644 --- a/MakeCode_UnitTests_DX12.py +++ b/MakeCode_UnitTests_DX12.py @@ -29,6 +29,11 @@ "Textures\\Mips_Imported_2DArray", "Textures\\Mips_Imported_3D", "Textures\\Mips_Imported_Cube", + "Textures\\Load_Tex2DArray", + "Textures\\Load_Tex3D", + + # Just need to make work + "RayTrace\\simpleRTDynamic", ] # ==================== GENERATE CODE FOR TECHNIQUES diff --git a/Nodes/nodes.h b/Nodes/nodes.h index 53f7695b..44dede43 100644 --- a/Nodes/nodes.h +++ b/Nodes/nodes.h @@ -291,6 +291,18 @@ inline std::string GetNodeName(const RenderGraph& renderGraph, int nodeIndex) return GetNodeName(renderGraph.nodes[nodeIndex]); } +inline std::string GetNodeOriginalName(const RenderGraphNode& node) +{ + std::string ret; + ExecuteOnNode(node, + [&ret](auto& node) + { + ret = node.originalName; + } + ); + return ret; +} + inline void AddResourceNodeAccessedAs(RenderGraphNode& node, ShaderResourceAccessType access) { ExecuteOnNode(node, diff --git a/README.md b/README.md index 5f07ad47..72a95dc5 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,8 @@ Introductory Gigi Tutorial: Make a box blur post processing effect. [Gigi Jam 2024 Lightning Talks (YouTube)](https://www.youtube.com/watch?v=m62ePwK33PM) +[Gigi Technical Overview (YouTube GPC 2024)](https://www.youtube.com/watch?v=MgCR-Kky628) + The **Techniques/** folder of the repo contains some examples to help get you started. The **Techniques/UnitTests/** folder contains the unit tests, which aims to exercise every possible piece of functionality. There are also documents in the **UserDocumentation** folder that explain the viewer python interface, Gigi shader tokens, and other things. @@ -64,6 +66,8 @@ Created by Alan Wolfe **Contributors:** +Adam Badke + Alexey Gladkov Berk Emre Saribas diff --git a/RenderGraph/Visitors.h b/RenderGraph/Visitors.h index 3bf44047..7c9f51ed 100644 --- a/RenderGraph/Visitors.h +++ b/RenderGraph/Visitors.h @@ -233,24 +233,18 @@ struct DepluralizeFileCopiesVisitor // make sure there is a %i in the source file name bool useCubeMapNames = false; + bool filenameIsPlural = false; if (copy.fileName.find("%i") == std::string::npos) { if (copy.fileName.find("%s") != std::string::npos) { useCubeMapNames = true; - } - else - { - Assert(false, "Plural file copies need to contain a %%i or %%s. Not found in fileName %s!\nIn %s\n", copy.fileName.c_str(), path.c_str()); - return false; + filenameIsPlural = true; } } - - // make sure there is a %i in the dest file name too - or that it is empty - if (!copy.destFileName.empty() && copy.destFileName.find("%i") == std::string::npos) + else { - Assert(false, "Plural file copies need to contain a %%i. Not found in destFileName %s!\nIn %s\n", copy.fileName.c_str(), path.c_str()); - return false; + filenameIsPlural = true; } int fileCopyCount = -1; @@ -299,6 +293,9 @@ struct DepluralizeFileCopiesVisitor if (useCubeMapNames && fileCopyCount == 5) break; + + if (!filenameIsPlural) + break; } return true; diff --git a/Schemas/PreviewWindow/PreviewWindowSchemas.h b/Schemas/PreviewWindow/PreviewWindowSchemas.h index 86080383..7135417a 100644 --- a/Schemas/PreviewWindow/PreviewWindowSchemas.h +++ b/Schemas/PreviewWindow/PreviewWindowSchemas.h @@ -50,12 +50,6 @@ STRUCT_END() // .gguser File Schema //======================================================== -ENUM_BEGIN(GGUserFile_ImportedTexture_BinaryType, "The basic data type within the binary file") - ENUM_ITEM(Float, "Floating point 32 bits") - ENUM_ITEM(Byte, "Unsigned 8 bits") - ENUM_ITEM(Count, "") -ENUM_END() - ENUM_BEGIN(GGUserFile_TLASBuildFlags, "D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE etc") ENUM_ITEM(None, "") ENUM_ITEM(AllowUpdate, "") @@ -74,8 +68,7 @@ STRUCT_BEGIN(GGUserFile_ImportedTexture, "The details of an imported texture") STRUCT_FIELD(TextureFormat, format, TextureFormat::RGBA8_Unorm_sRGB, "The format of the texture to create", 0) STRUCT_STATIC_ARRAY(int, binaryDims, 3, {0 COMMA 0 COMMA 1}, "The size of the image in the binary file", SCHEMA_FLAG_UI_ARRAY_HIDE_INDEX) - STRUCT_FIELD(GGUserFile_ImportedTexture_BinaryType, binaryType, GGUserFile_ImportedTexture_BinaryType::Float, "The basic data type within the binary file", 0) - STRUCT_FIELD(int, binaryChannels, 4, "How many channels there are in the file", 0) + STRUCT_FIELD(TextureFormat, binaryFormat, TextureFormat::RGBA8_Unorm_sRGB, "The format of the binary file", 0) STRUCT_END() STRUCT_BEGIN(GGUserFile_ImportedBuffer, "The details of an imported buffer") diff --git a/Schemas/TextureFormats.h b/Schemas/TextureFormats.h index 39891b60..3fb61663 100644 --- a/Schemas/TextureFormats.h +++ b/Schemas/TextureFormats.h @@ -54,4 +54,7 @@ ENUM_BEGIN(TextureFormat, "") // Block compressed formats ENUM_ITEM(BC7_Unorm, "RGB, alpha optional") ENUM_ITEM(BC7_Unorm_sRGB, "RGB, alpha optional. sRGB") + + ENUM_ITEM(BC6_UF16, "RGB, 16 bit float unsigned") + ENUM_ITEM(BC6_SF16, "RGB, 16 bit float signed") ENUM_END() \ No newline at end of file diff --git a/Techniques/DataViewers/ModelViewer/Arches_E_PineTree_3k.hdr b/Techniques/DataViewers/ModelViewer/Arches_E_PineTree_3k.hdr new file mode 100644 index 00000000..2b89ce62 --- /dev/null +++ b/Techniques/DataViewers/ModelViewer/Arches_E_PineTree_3k.hdr @@ -0,0 +1,37027 @@ +#?RADIANCE +# Made with Adobe Photoshop +FORMAT=32-bit_rle_rgbe + +-Y 1600 +X 3200 + <<<<<;;;;:;:;;;;;;:::::::::;;<<}}}}}}}}}}}}}}}}}}}}}}}}}} ;:;;;:;:;:9887878889:;:9889:;<;<;:98899:;<<;}}}}}}}}}}}}}}}}}}}}}}}}}} 76789:;<;:9888767877889889:987665567776789877}}}}}}}}}}}}}}}}}}}}}}}}}} 6789:;<;:98789:;:9876665676678767876545678765656676543456776543456}}}}}}}}}}}}}}}}}}}}}}}}}} 6565567898765456765434565678989876567898765456787676545654545654345455456765432345656}}}}}}}}}}}}}}}}}}}}}}}}}} 2343456789:98789:998767789876787654323456567898987654544454543232343234565432121212}}}}}}}}}}}}}}}}}}}}}}}}}} ߒߋޞ݈އߊދ߇߇ ߉߉012343234343456789:;<;::987678789:;:989:9876789876565454456789:;:9876545456787654343234565432123456543434321010/010  }}}}}}}}}}}}}}}}}}}}}}}}}} ߅ޅ݅܆ۈڊ٥؉يڍێ݉ީߖމߊߌމ߈  + ߐލߍߛއ߈߇ߌޙߊߒތߎ/0101234323456789:;<=>====<;:9898789876767876567876567876543432345676543234565455454544545654567654323454321011012321210/./././ + +  }}}}~}}~}}}}}}}}}}}}}}}}}}}}}} ܋ۇڅنؐ׌؊ٍ؋نڇۆ܊݇އ߈ߙކ݈ܚۇ܅݉ސߊޏ݆܆ۇډيڠۄ؄ ԅӆ҆C  ߐޞ߇ߊފߗ߆ޓ݄ޅ߄ ߋބ ߄ކݛ܆ۄچَ؆مڈۑ܈ۈڈه؏יօׄ؆مڊو؇׋։Ռ֞׈؇هڅۋ/.-,-./0101012321232123210/0123456789:;<;:989876789:9:;<=>=>=<;:9::9:;<=>=<;:989876545678765456789:987654321012345434566543212343456543434543434543234567876543234567898765434543210/././0/.-,-./       }}}}}}}}}}}}}}}}}}}}}}}}}} ЅωЊєҕӝԈՆփׄ߄߆ވ߅ߌߊބ݄܄ۄڅً؍ג؆׉֔Ջԅ$ԄӄҍъЊѐ҅ քׄ؄هڊۅڋه؉لڅ۟܉݄އ߆ߏކ߄ܐۄ܄݃ކ߅߈߉ސݍ܈ۇ܅݈޻ߏފ߆ވ݅܈݈ވ߇߇ޟݍ܄ݝ܍ۍڐي؈׆ևըԇӅ҅эбϚЇ-,-./012123432321210/0123456787654345678765456789:9876789:;<;<;:9878987656789:98767876543210/0123454567876543212121234321212123212345456545656787654321210/.-.-,-     }}}}}}}}}}}}}}}}}}}}}}}}}} ɒȉɓʇɃȅЅхҥӗԋՃք׃؄نڏۉ܅݌ޅ݅܇ۇ܈ۅڅٔ؉ٌ؅نڎۓڌي؃׊؆ىۉڅ҄х ̄˄ʃɄȅǃƓ!֌ׇֆɅȄLJƅƅśƅɄՆւ׈օ׃؅هڌیڑلڄۇ܊݄܄ۄڇهؖم؃׆֌Յօׅ؄ل + ߇ޓ߈ގ݆ޅ߄߈ބ݃܄ۃڄمؒ׈؄لڄۄ܅݄ޅ߇߅ޅݨ܉ۅڇه؉نڅۆܖݐޅ݅܅ۆَڈۊ܉ۃڏ ބ ߑ߆ޏ݌܋ۈ܅݇ބ߈߆޻݌܆ۉچ٠څې܄ۆڅق؄׃քՇԇӊԋՄԅӃ҄ ̇ͅˆʇɧ,+,-.-./01234321010/0123210/.-./00011222333445556667898765434567898987898765456789:;:9:9:;<=>=<;<;:987656789:;:9876565434567898989:;:987654321010123210123210/01010/01234545454543232345432343456765454321010/./.-,         }}}}}}}}}}}}}}}}}}}}}}}}}} ΄͆̅ˣʆˆ̅͆ΎψЅф҅Ӄԇӛ҅хГϊЎҧьҏӰԆՄքׇ؃ٌ؆مچۆ܄ ׄօՅԕӆԆӅ2ĄŊƇŊĆńƅDžȅɄʆˇ̉͆΅Յփׇ؅ ܅݄݅܄ۃڅ ֆՈԅՄք׃؄مڇۅ܅݆ކߊ  ߋ߆߈߅ޖߊޅ݄܈ۅڊێ܆ۋڅۄ܄݄އ߮߅ބݎ܅݊ލߋ؏ׄ؅ىڐۊ܈ۉچۉ܋݊ބۄڃِ؅لڅ݄ބ߃Їޝ݊ޢ߇߆ރ݄܃ۅڄم؊ל֊ՍԌӆ҄х.-,-././0/0/0/0/./01210/.-,-...///0001122233345456789:;<=>?@A@?>=<;:9876789:;<=>?>=<;:9:;<=>=<;:989:;:9878987676543234345678987898765432123212123210/0101210/./01010/01234543210///...-,-...//00012343232321234545654321010/.       }}}}}}}}}}}}}}}}}}}}}}}}}} ՄԄ φΉͅ΅ϋЅτ ˄ʅɊʅɋ ̆˄ʆɃȅɄ΄ώш ̃ͅˈ̈́̕΅σЅш +ք׆؈ו։ՎԋՄփׄ؄ّڛكڋ҄ +̈́%Ą4߅ߊ ߄ۅډنڈۅ܃݅ބ߇߆ބߏ߄ޓ݅ލ͐̉ͅ΄$ ߙ߅܅ۅڅنڏ ܄݃ޑ݄ރߌ߄ޏ݇ޅ߇ބ݈܆ۙ܏ۊ܄ۆوڄ߃ ܏ۉڂلߍއ߆ބ݆܍ۅڅهֱؔ +ۅ܆݉܌ۇ؅ׄֆՆքل؅׉Նքل߆ރ݊ֆՇԌ֓Ն֊؈׉؇׆ֈՍ.-.-,+,-,-./././.-./01234321210/0/.-,-./0123456789:;<=>?@A@?>?>===<<<;:9:;<;:;:987 666555444332123334455566777888999:;<;:98789:;:9:;<;:98787654345434321010123456789:987654321012321010/./010/./01210121010/01210/./0123456543432123210/0123454321010101234323210/0/.           }}}}}}}}}}}}}}}}}}}}}}}}}} ՍԊՅφ·͉̄˃ʄɇȆŇĄ̈́΋υ΅͎̆˔̆͆ΝχИф ք؆֚ׄՆԄӈԅՈօՄԇӄ҆фЅφ΄ͅ ӄԃՄԄӃ҆уЄτΆׄ؊ي،̄ˉʄ˄̆͂̄ˉɔʄ Ąń'ۄڃل؃׈֋ԎՆօׄ؅ل߄ފ߇ދ݈ޕ߄ߊއ݅"݆܂ۅއ߃ޅ݇ܓ݇ܔی܄ۋچۏ܍ ڊُڊۈڌٕ؄مڅۍ܇ےچۍ܌ۅ܅݈ބ ًٍؐڈل؈הֆՆփׅؑنڇۉ܌ۇܒݐ܈ۆڒل؄׈݉ޅۄچوڃۄ܃݄ކߊ߄ޅ݃܅۔ډۅކ ބۄڄ ՅԄӏԃՄ ߐޓߏޅ߅ߝޅ ߇ޅ݆ܚۅڊك؇لڃۅܤ݆܆ۃڨ/0/.-,+,-.-././././01222333434 5556677888999:;;<<<===>>>???@A@?>=<;:;:98765554443210/.-,-,+*+*)()*+,---.../01222334445556678899::;;<<=>=<;;;::99888776665434567876787676543210/012343212343234567876543210123234543210/./0/././.-.-,-./010/0/0/010123210123456787654323454343210/01234323210123432210/0/                }}}}}}}}}}}}}}}}}}}}}}}}}} یڅ͚͈̄Ά͋̆ˈʃɄƈńȄɃʅː̄ψЖњЙ҄ц҆ӃԆӃ҅ӄԇՅԃӄҌь҇τΆ̓Έ Ʌև#c +5 ݊ ي؄׆֌ ߆މ݆ދ߆ބ݄܈ۇ܄߄ܑ݅ۈ܈ݍ܆ߋ߄ބ݆ރ߅ ߊ߃܆ۆچوڌې܉ۤ܆ۊڊӆ҅ ׄؒهڑۊڐۄ܈ ׉ ۔܄ ׆ֆՇԍӄ҄цЅш҄ӆԃՄք׃؇ن ޒ݆܊ۇ܊݅ ߌކ߄ޠݍߎބ݆܈ۍ܇݄ڋكڄ۬܉݉ލߊކ݆ބ݄܊ۄ܅݈ކߚ߃ޅ߄ߖވ݅܄ۄڋنچۄچۏ܅ۄڊّچْؕׄڍۓ./.-./.-,+,-./0/0/0/.-.-.-,-...//00112233455678)999::;<==>??@ABCDDEFFGHHIJKKLLMNNNOOPPQQQRSTSRQQPOONMMMLLLKKJJIIIH+GGFFEEDDDCCBAA@??>>===<<;;;:9987766554443321 000//..--,,,+*)()*+,-,+*)*+*+,+*)()*)()*+++,,--..///001223344455666789:98789:999888777666554433222111000/012345676545678765432121010/./0123456543210/012321234545432123234567654343210/.-,+,-././.-./.-,-./0123210/012345654323432101112223344455667778987654321234543212323210/. !"""#$%&'&&&%%$###"""!                    }}}}}}}}}}}}}}}}}}}}}}}}}} ԆՄփׄ؂ى؅׆։ՕԉӄҍяńɅʈ˅͈͎̍̅Ώ̈́̅̈́̋˄̇͆΅φЅчҏӇ҇цЅχJ:  +ćƆńĒÅăŊƏœąÅŒ‡ +̄̈́؄قڍهˆӄ +߆ބ #߄ދ߈އ݄ڋلڄۆ܈݅އ߅ ܆ۇوڅ݄ޅ߇ބ݈ޏߊބ߃ ؇׋֋Յքׅ؅׊ֆ׈؆َچۉ ؔצ؋ى؉׃ևׄ؄ٍڎۍڄل؆ׅؑل؅׉֊׆քՓԅՄօׇ؊ًڜۃڅه؃ׅؖ׎؊ׄ ܔ݉ކ߃ ބ݃ܒۄ؉ ܄݄ފ߃߄ބ݄܅ےۗڍۄ ބ݃܄۔ډن؈ٍچۅܚ݆܄ن،ך֟ՇԊՔքՆԈӅҊӇԄ./010/0/.-,+*+,-.-./.-./.-,+*)()I***+++,,--...///00112223334456678899:;<==>??@@ABBCDEFGHIJKLNOQ))**++,,---.1---,,,WVTRQONLKJHGFDCB@?>=<;:9876543321100//.--,,+*)()*+*+,-,-,+,-,-.-,-,+*)*+,-./00011122333444565432221100///..-,,+++*)*+,-./0123454321234567898765432101010/./01234543210/./01010/./0123456789876543210/0/0/./0/.-,-./.-,-.-,+,-,-././0123456765456543234543210123210121010123432343210/0/0/.   !!)*))('&%$#"!                }}}}~}}}}}}}}}}}}}}}}}}}}}} ԉވ߄ވ݅܄ۄڂل؆׆ք щЄƄňĄ͋΋̓·ωЉυΔґՄօЅτ΄ ńąÄĄłƅ,߄! ŠÆ……Ä ÐĈ†Ä΄τЉхЃτ΃̅ͅ˄̆͌΅͕̉˃ʄ +ʼnĆōƈȆǃƌʼnĄ  ŇƋń*߆݅ބ߄'&ߋވߡބ݃܆ۄ܃݄߆ގ݇܆یڄۅ܇݈܉݅܆ۄ +ކ߃߄  +߇ރ߄ي؄߈ބ݅܄ۉ܄ۃڄքՃԌӆԋՈԅӌԄׄ؄ِڄلچۃڇۈ܄ۄچلڇۄڄم؄׆؄Շщ҈ӆԃՐ֋׍ӓ҃Ӆωыҏۄ܅݄ޅ߅ߊޅ ՌԄӄҍх҄ӄ݉ބ  ߇ރ݄܊ۄڄك؅ׄքׄ؎م܄ݒރ݄܂یڇل؍ׄچ +Ԅӊ҃хЄԄՃքׄ؄َ؄هڄي؄ًڈي؄݈׆օՋքՂԆҙӈ҄ӃԌԈ10123210/./.-,+*+,-./0/./0/0/.-,+*+,- ..///000111223456 +77788899::;<<<===>??@AABBBCCDEFFGGHHIIJJKJIHFEDBA?><;8653210/-,+**)))()()*)*+*)*+,-./.-,-,-.-,-./.-././.-,+,+*+*)('()()*)*)()***+++,,,---.../0123210/0123456789:;:98887776665544333222110/01010/012343210/.-,-.-./0123210/0/.-./01210101210/.-,-.-.-,+,+,-,-,+,-,-./01210/0123456789876765434567654543212345454321210/./01210/012345454321012321210123210/0121   !!"###""!!                       }}}}}}}}}}}}}}}}}}}}}}}}}} ؅وڄۄ܄݄ކߊ܄ۅڅن؇фЄτŅąńƄ ˆ̏̈́΃ύІτ΋̈͆ͅ΄͍̅ ҄ӄԃӄ҃х†H&¿ †ÄąŘɄ̈˄ȄLjĆ…ÄĄņƇʼnƆLj ̈́Ίτ΃͉׊Ԅӊ҉ӄ ̈́̅˄ʆɃȇɊȓɄ ąÆƒ +/̄ Ԇ݇2#ߋޏ߄  ߄ޅߌ߄ޅݙ܅ۇڕل؋لڈۄڍلڑمڄۅڑ އ ۆڅِ؄׃քՎԎՄԈӅшЄцҌт҅фЇφЉхЈυЈш҂Ӌ҅ӄԓՄ ۄܔ݄ބ߆ՆԍӄԆՄքׄ +" + ߃ބ݃܅ۆڊًڄلڈۄچم؏ ӄ҃ыІч҄ ׅ؋مؒב Ҋх҈ӌԉӅԆՅօׅ؊ه؈׏؄ٍڄل؉ׄ؆ քՃԄӅҷћ/0121210/.-,-.-.-.-,-./.-,+,-./012I3344555667889::;<<=>??@AABCCDEFGHIJJKLLMMNNMMLLKJIHFECB@><;98653210/.--,,+*)*+,+*+,-./0/.-,-./.-.-./0/01210/.-,+*)('&%&'()*+,-./010/./0123455566677788999:;;;;:::998887776655544333210/.-./012123210/010123210/0/.-././0/././.-./.-,+,-,+*+,-./010123210123456767 666554443332123434565654343234565432101010/./010/.-./012323212323210/ !""##$###""!          +      +        }}}}}}}}}}~}}}}}}}}}}}}}}}} ׄքՃԆфЍ؅مچۃ܄݅ ڔلΌ +ȉDžņʄʇ ΄͔̈́̇΋υЄӊ$! „ȏ ċňυЄτ΄͊ψЄσ·͂̇͋·͌΅̇ͅ΄υЄъЌϊЄфҋӃҊӆҎфЌφΆ͒΄τ΃̋ͅ *ԇ ݇! ߇߅ނ݄܄ۃ܌݉ބ߆߅ރ݇܈ ֆىׄՄփ׊؅وڃلڇۂڇۇ܅݅ބ ؇օ +Ӆ҇фҋӃ҄уЋф҄ӅԆӄҊӄ ͆ ӇԄՄփא։ نڃل؊ׄ؉ل؄֎ӈ" ܇ۈچَ ߄ څق؄׎ֆ ىڍۄ؆ Ӌщҋӌ҅ ̈ىڃل؄ ӄ҄ ڄۍ܅ۄڈٜ؄ׇ։ׄևՍԅՐԃՄԃӄҌф҃ӄԇՉшׅ0/.-,-..///00012345676 +55443332221010/.-./0/.-./.-. ///0001112 1100//..--,,+*8+++,,,-../0011234567789:;<<==>>?@@AABBCCDEFGGHIIKLMNOO(()*))RRQOMKIGECA?<:8653210/..---,+,+*+*)*+,-./.-,-./0/.-./0/.-././0/01010/././.-,+*)()('&%$%&&&'((()))**+,,--..//010/0112334556678889:;:998877665433221100/0/.-./0123454323454323432121210/./.-.-,-,+*+,+*+,-,-./.-,-./.-,-,+,+*)*+,-.-.-.-./012343210/012345676543210/.-./012345654323432121212343210/.-./0/0/.-,- +..//000111234321012343210/./0/.-./0    !!""'&&%#"         +           }}}}~}}}}}}}~}}}}}}}}}}}}}}}} ߂ޅ߈݅܆ۅٖ݅ׄքՇԈӅ҃хąÅĊņƄń +ʈ˃̖͆̋˃ʄ˂̇͆˅̅͘΅̈́̆Ƈ ƒÆʼnċƈNJɈȌDžȃɄȃDŽƄ҅ӍԈՅօՊԄՃք҄цЅхҒӍ҄ӊԅՅ֌זք׊؂ׄ֍ Њτ ԚՍ͏̄ˋʈɆȄDžƉń +„ 3߅. +  ݊܊݄ފ߇ޅ݊ބ܅ۇڇܐۈ܅ ֊Ճ֌׉ֈׄڅۄ܊ۍׄֈьΈϋЄъҚфԅՅ؅لԏӄ׈ +ӈوڂوڄۄ܂݄ކ߉ކ!Ӈ҆ +߃ބ +ل׆؄܄ ߅݄܄ی܅ Ո +؅ك؅הψ·όΆφȈӆۊ܂ۄ܅݄ކ݅مڅۅ܌݌օՉԇӇҍшґӅ҈؅4343212343210/././.-.-.-,+*))***++,,-../001223455566677899:;<=>?@ABCDDEFFGHIJKKLMNNO(PONMLJHFDB@>=;986532100/..-,-.-.-././0/./012101232121210/./0/0/.-.-,+*)('('&%$#$%&''(())**+,-./012334445432101234567 6655443221100/./012345432323456765434545432323210121010/.-,+*+*)*+*+,+*+,-.-,+*+,-,+,+,-.-./0/./01232343210/0123454321210/.-./01234565434321210/010/.-./0/.-./.-,-./01232123456543210/./0123454 9 !"""###""!          + + + + + +            }}}}~}}}}}}}}}}}}}}}}}}}}}} ߇މ څُƍʼnăņĆƄdžȅɆʅ˅̂ͅΊτ΋ͅΈσ΄͉̈ фҍцЄ ¿ŠÃ…ňƃŅăŅƉLJȃLjƉdž +˅͈̆̈ɄȌDŽȎԊՃԈֆ׆؄لڅۃ܅݊ކ݅܌ވ +م ܏ ߆ރ݄܅ۄքՃԄч߄ڄۄЄώ΅̈́ Ȇ … >     + ߋ ۉچۇ܈݄܄ۑ׈݄އׇ ЄуБшҏфЃϊ΍͆ ӅԏՆԃՆքՅԆՈ֙Ղքׅ؇م؉׋$ ߇ׄ τ΄  ߆ޗ݅ܚۇڄф҅ӈԉӆ҅хЍυΝ̓̄ͅ DŽƉńƈ݅څ׆փו؃لڊۄڊۅڈ ՊԎӅԄՃև׃؇ۋ܍݂ވ߇32345454321234543211000/.-./0/.-./.-,+,%--.//01123466789::;<<==>?@BCDEG$%%&&&'MLJIGECB@=:75421/..-./.-./01210/./././010/./010123234323434345654343210/00011223344455654343210/0/..---,+*)('&%&'&%$#$$%%&&'(()**++,-./00134678:;<=>?>>==<;;:987766554433322210/./01233344456545656 555444333234565434323232123210/./0/.-,+,+*+*)*+*)*+,-./.-,+*)*+,-././0123454345432123456765554443210/01210/.-,+*+,,--..//0011223344543234323210/010/0/0/.-,-.-,-./0/.-,- ...//001112234321232101012343 #"!             + + + + +  + +           }}}}~}}}}}}}}}}}}}}}}}}}}}}} ܍؊ׄɄȍɆDŽƅŅƎnjȃɅDŽ +̄ ӉӄԂՈ֊Ո] Ĕ +Ʉʆ˅ʅˋ͇̅΃ϏЂш҈ц҉܇҅ъ +ԋՄ܅ݓ݆ + ߅ތ߉ ߄ބׇօ׃آوڄ +Վ Ό͆ͅ +Ȇ ėň F  مچۉ܄ۅڅքՔԄՃքׅ؉ل΅͈΍͒τЂчӏԄՌE +߉ބߑ ߄މ݄DŽ ݄܏݄܄ۄڅمڄۅ܅ۏڃى Љщ҄уЅφ΅̈́ΈɊȔɄȎ݄ ׉ևՅԆ +φՈԄՄ ܆ߐބߋ߈123454543212343 222111000///.-./.-,-.-,-./0/./.(///00122233455566789:;<>!""#$%&'())**+,-,,+*)'KHEB@<9754310/.-,,+++*+,-./0121210123456544333222101232101233445654565432345434565432321010/.-,+*)('&%&%$#$%&&''(()**+,-./0135689;<>? <:98766544333210/012321012345654545434343234323432123210/./0/.-,-.-,+,+,+,+*+,-.-,-,-,+*+,-./012101234565434545456765654343210/.---,,,+++**)))('((()*++,-./0122344454323210/01010/././.-,-,+,+,-,+,--...///0123210/.- ...///00012101234545432321   "     + + +        + + +    +       }}}~}}}}}}}~}}}}}}}}}}}}}}}} ޅ݋܍ބ ݇܃݆ȇ˄̂˒ʇ˅ʅɄȅɂʄɇȃLJ܆݋܅݃ޅ߆V + ńƂŊĈĆ ȈɅ҄Ѕ؈ىچۄڅن܉݊܅݅އۄڊمڂۊ܅ކ݃ބ߇ *؇قڈه։օԄ ޅԄ +Ί ф ˈʆˇ ƆňƊŃƅǂȆ †#Ȅ +   +  ޏ ׌ֈ׉ӄ҄юՄֆЄ҅ϊ̄͋΅ЄͅυЅхҌх҉ӊڈلډۄ  ߇ބ݃܄7 ۄڄۆܕۚڊ ԄӃ҄шЉφ˅ +͋·ȄŎ†لڃۅڂۄ Ӌ҄Ӈ„#݉ކ߅߇ ڇلڋۄ܄݉ކ߆߅ބ1012345432345 444333221110/.-,---,,,-,-./.-...///0123432100///.////011233456677889: !!""#$%&'((*+-./01234454320.-+)(LGC@><96420/.-,+*+++,---./0123212123234321232123454345654345566676665554321234567876545456545676543210123210/0/.-. --,,,+++***+*)('('&%&'()**+,-.0135679:;<==;::9988776655443321010/./012345678767877766654345676543234543212343212101210/./010/././010/0/./0/.-,-.-,-./.-,+*+*+,-,-,+*+,-,+,-./012121012343212345556667656765434343210/.---,,,++**))((''&&%&&'()*+,./01234455565432321210/010/./0///...-.-.-,+,-,+*+*+*+*)*)*+ ,,--../0011210/ ...--,,,++**)()**++,,-. ///0001122232343232321232 ! + + + #       + + +        + +       + +  + +      }}}~}}}}}}}~}}}}}}}}}}}}}}}} ݄܈ۃچ݉ ߄ދԆӆˆȑʋLjƄlj1GȓDžȊdžȆɄʅ˄׆؆ׇ֋Նކ݉܃݇ބ ߄ل؅דֆ фԆ ̄ˌ̉ džƅǃȊ-  +  ӄ҄ф҃ӇԄх ֈׄ֙ՇԆӗ҇Љσ΄͂̅̈́̂ˈχЌх҇ч քڄ܄ن؃هڂل؄ + ބ݅܄ۄڄً؄  ܍؄ׇ֊א։ӄ҄̄ͅˋʉɅʆˆɅ ĄÉ ؄لڇل˅ʇˆʃɄ'ډۄ܃݊ރ݄ތ߄ތ݂ޅ݅܏ۋڃۅ܅݈ކ߅ގ݃܆ۍݒ212323212345432221110/.-,-.-./0122233444543%4445556778899 !!"#$%%&&'())**+**))(&%$#EB?=;:875432210/0123456765676789876765656567676543456567656789876789:998887654343432123210/01211100///.-.-./. ---,,,+++*)('&'&%%%$$###"""##$$%'(*+-/135789:;<;;;::987655433221210/./012343454345454543456543232101010/0101010/.-././.-,+*+,+*)()))***+,+,-.-./0101010/01232123456543456543210/./...--,,++*))((''&&%%$%%&&'()*+,-./01223343210/./.-.-.-,+*)*+*)*)('(())**+,,-../00011210/.-.---,,++**)))(()))**++,--.//0010121212  +   +  + +  +          + +    + + +  + + +        }}}~}}}}}}}}}}}}}}}}}}}}}}} نۇ܅ۊ ߆ ۄ4ƄǃȈȊĆΆՄ֊ׅDڋۆ ߅ + ݅ ܇  +߇ + ߊ ۄچ ݈ ؋ ʄˆ̅ʉɊĄŅĄ5ąÄ; + .   +    + +Պׄ؄׃օԆӅ҄܅݄ІϊDžƆ̈͆΄хևىڊه݄ތ߃ޅ݃܄߆߄ރ݄܅ۅ܉݅%߉ ׈ւׄ؆ك؈ׄֆՃֈ шЄцʅɄʂˆ̂ˊ ӄԄՄֈׄˌ ݆܇ۃ܄ۅڋݐ +ڌلڋیڂْڂۓڇۍٙ10123234343210/.-./.-,+,-./01232123334445676567899:; !!"#$$%#$$#"!!A?><:987542100//..///001122334567778889 :::;;;<<<=<;:;:::99989:;:::9988876787876567678789:9:9878789:9877766654 334445566677876665554345654567665544345678765434545432 11100/...-..//0010/.-,+*)('()*+,+***)))(('&&%$$#!$%%&'(*,.014689:;<<<;;:98765444332101210/0/012343432211000///...---,,+,- ..//00111223456765434323212323210/010/0121210/.-./.-././0/.--,,,+*+*)* +++,,,---./.-,-./010/.-./.-./010/01232321223334545676543210/.-./.-,"++**))(('&&&%%%$$$%%&&'()*,-./01234321210/010/./0/.-,-,-,+,+*)()*+*)('('&&%%%$%%%&'())+,--..///0/.-,-,- ,,++**))(('''&'''(())**+,-../00112223344543210/012101232121   + +     + + + +     +       + + +    +  + +       }}}~}}}}}}}}}}~}}}}}}}}}}}}}} ل؄ׇփ׆؅لڄۃڍيچ ݅ތ0ĊńɄʅ +Ϗ ևׄ%'Ȋ +ńƄɅʅ ԇՃքޅ߄*މ  +   ۄڃن ؄؄ׄ֌ӑ҇ ʆɆNjƃDŽƆ +4    0ӄՅڅۃډل؂ׄهڄׅ֏ Є̅˄ʄɃʄ˄̅ͅф҂Ӆ҅тІ؊ׄ؄Նۄ ߌ߅ ڄ5 ݊܉ۉ܅ُ؃ׇ؆׉͆ɅȅDŽɆȅÌ +֊׆֋*ҋӄԂՆֆՃ֋؄Ջ +لڃۄ܅ے܅ ؄׉ֈׂօ׆քׂ؆׆؆1010/0/0123234321 +000//..---,+,-./01234567888999:::;;< !!"#$%&&''(''&%%$#"B@?=;86544321100//...-./010//...-...///0123456667789 88877766655545456788899:98987 666555444333234345434455667676565678767656 777888999:9 888777666555456767788999: +999887766654321210/.-,+,+*)*+++,,,--.//0011121110//.-,,+*))((''&&&%%$#$$$%&()*,-/124567876654433232101210/./012321210 111223344556345434323210101010/.-./012101210/0/0/./0/.-././0/.-,+*) ***++,,--.../0/.-./0/./0/.-./012343432343210/././.---,,,++**)))((''&&%$$#$%&')*,./1234454321010/.-.-,-,+*)*)('('() **++,--../0/.-,+*)('&&&'''())*++,--.//010/0/0/./0101010   + + +            + + +    + + +  + +     }}}~}}}}}}}}}}~}}}}}}}}}}}}}} ҊчЅڊۄ ߄ކ߄ރ߄ +لϊ-ԅӆ ݄݅Fʈʄυ ԇՈ քۋ .  ׅֆՈԏքӅԄ +Ј·ˆÅń +΅!    ۅ ܆ۉЅ҇ӄԄ؉ل؆ ҌфЈ͇̈́̄΄ +ԉӄԄՅ؉ Ί   ܄݉#؇0 ܍ۃ܌ ن؆ևׄւՄԋӄ +Ό˄…ƄϏІӄ 2ԆЄψΈ؄׃ֈՉ؈ׄ֊ՄԠӃԇӄ҆Ӌ0/.-,-./010121232211000/.-,+,+,-./01234323 4455677889-:::; !"#%&')+,../00/.-,*(&$FC?:7420-+*))('&'''(())**+,--../01222334445434556667656789:9:9 ::;;<<===>?@A@?>???@ !BA@??>>= +>>>??@@AAA ?>>=<<;:;:::998876788998 9888776665434343 44556667889:;:9876567 888999::;;<<<=>=<;:::999887766544333233444556677888988777656789:9877766655544433321210/0/01 000///..---,+*4++,,--..///0112233443332211100///..-,+*))'&&%%$##"""!""#$%')*,.135689:99887665543322211000//.///000121010121223334545566678987 665554433322122334455566543434343210/01210/.-,-./0123212101210/./010/./0/./0/0/./.-.--,,+,,--.-./.-./01232321010/0/0/./01 000///...-./000112323454321232321210/0/./.-./0/.--,,+++**))(''&%%$%%&'(*+,./01345566776543210/01010/./0/.-,-,+,+*)('( )))***+++, +++***))((('()))**+++,,,---../.-. ///...--,,,++*)('()**++,---././.-././././0   +    +   +        + +     +  +       }}}~}}~}~}}}}}}}}~}}}}}}}}}}}}}} ΔςЋ ۈ܉ۋ܆݄% ċΆω΂τЄӄׄ؅لچۃچ<,׆؅ڄےۆ ߄" 4ل؂نڃۈ +܆݄ޅ&! + ݊ وڊك؉׃؄ Մ τ΂̈́΃τ̈́ąÃŒ72    + քӅ҄ۇل ܄݆އ߅ ۅ܆τ ч҄܄Ίو  ݉܄݂އ߂ތ ه  ܄ۃڄדԇӅԋՄԂӄ҅φ΄̈́̅ˆ…Å…ŌƄ˄Αϋ ̆˙ хҊц҅ьЋфҌӃ҅ ҄ ՄхЄσΐ.-./01212121210/ ...---,,,+*)*+,---.../.-./0 1112223334544333233445556778899:&;<==>@A!"#$%&'()**+***)'JFC?:631/,*)(('()$***+++,,-..//000112223344455666778889898789:::;;;<<==>>??@@@A@?>=>?@ABA@?>=>>>??? ! <== ! @?>=<;;;::998887665543222111010121232123234 +5567788899:;<=> ??@ !!!""###$ ###"""!!!  =<<;;:::989:9:9998876788999:::;:9878987654343210/010/.-,+,,,--..//0011121100/..--,,+++**)))((''&&%%%$$$#"###$$$%"&&''(*+,.02356899::;;::9987654321101112223432101012343212345456789998887654345676543432121010/.-./0121012343222111010/0/0/0/010/010/./.-,,,+++*+, ---...///012123454345433322210/010/.-,-..//00010121234543322100/000111210/0/01210/.---,,+**)(((''&&%%$%'()+-./11234445454321010/.-./.-,-.-,+,+*)('&'()*)*)*+*)*))*))*+,+*)('((())*+,-.-.-,-././010/.  #! +  +  +        +        +  + +  +  }}}~}}~}~}~}}~}}}}}~}}}}}}}}}}}}}} ҇ӆ҅ ׅ؇ق؆ ބ߇ބ݆քՅ.ʄ̈́΄τ͇̈́̅ڄه؅׈Pľ͇݄    + ӆ +͆"' + ލ ڈڄ +Ԅӆ҅фЇψɄȄ ̇;&    +*׋ ޅ߇ޅ݄އ݈ ؄ۅ݆ބՄԃӄҊ ؅׃։ՈևDžȆӅބ  ߅ފ݄ۅڌم* ܅цҊЄ҄ӈЄ@ńɄȃdžƇDŽ +Ɗ$ȇˏ ȄɄʄ ʅ˃̄˅ʃˉ̃˅˅̊ͅ ЄυΆ҆χф././010111222323210///..---,+,+*+,-./0112223454543F22233445566778899:;<<=>?ABCE#$%&''((''&HD@<83/,*('&%%%&'()*+,---../011212 3334455667878899:::;:;:9:;;<<=>>>??@?@A@AAABBBC BBAA@@???>>>=>>>???@??@@ ! !  !!!"""#"! !   +>=<<<;;;::;< ;:99888777888765678899988876554320/..--,-,,,++*++,-./012233457889:;=>?@ABCDDD"! ! =<;:9:;:989:9888999:9988776654323212321210/./.-,---..//0122334454443321100//..-,,++*) (((''&&%$#"! ""###$%%%&&'& '()*+-/1346898776554434543210 1110001110/ 0001122233343210123434566677765676545566676665434343332221012123210/010/0/./012223334321234322110121010/00011222322100/01010/./.-./0/.-,- ..///0011212343 2223334445432111000/0/0/.-./ ..-,,+***)*+,-.-. ///001112223212234544433212343454321210101000///./.-#,,,++**))(''&%%$###$$&(*+-/13466777654323210/010/.-,---../.-,-,+,+*)('&%& '''(())**+++,+,,,--.-,++**)))('()))***+*)((('&&&%&'()***+++,+* +++,,,---.--,,,+,+,-,-,+,-./.-.-,-.   *#   + + + + + + + + +   + +      +          +   +  + + +   +  +     }}}~}}~~}}~}}}}}~}~}}}}}}}}}}}}} ֆՇ։ׅ؄نڃۄ ڇۈ Մʄ †̈́̉ɇȅцҍ ވ;҈مۅ߄ + 4ˇʅ̅݊ڄَ׋ֈDž ‰Ä  2   + ܌ۅ +؄ԊӅԂӆ҉ц Մ֠܊݃ކՆԆ τ΄Ȍ҆ӄ ؆ +݉܈K ֋Ќ ωЊ$#ҊфÅ  ɇLJɄDŽƃńƅň·̅˄ ƄňČńƏȅ ̈́΃͆Ίτ-../0/010101232221110/..---,+*+,+,-./012321234%55679:<>@ACEG$%%&'(())(('NKGDA>:631/.,---../01123445567876789:;<<<===>=<;:;<<<===>?@A ! AAA@?@@@?@  !"! !"! !"#"!"! !"! ?>>==<;::998877767*8899:;;<===>==<<;;:998877766655444333221110/012357:>==<<<;:9:98787898789: 99877665543455667666554321210/.-./0/.-.--,,+**))((''&&&%$%&'(' (()*+-/134689: +98765433221210/012321234445545434567 54433212121012123210/01010/012111000//012322110101232101210/.-./0/.-.//000110/.-.-./010/.///00010/0121210/0/.-.-,+*)*+,,,---./0/01234343234543432321210/.- ,,,++*))(''& ''()*+,-/01234323210/0/./.-,-,,-,+*+*+*+*)('&%& +'''(())***+,,--././.-,+*)***++,,---,,++***)('&' +((())***++,+*)*+,-,+,+,-,+,-    %#!   + + + + + + + +  + +              +    + +  + + + + + + + +  +     }}}~}}~}~~}~}}}}}~}~}}}}}}}}}}}}} ъՋքՃԈօۄ!lj† ń ɆDžȄɅȅǂƇՅքʄ˃ʅ̄͂̆م   R + ܆ ԆЄτʄƇÆ ,    + +̄ͅͅ +Έ +̈́ ԇՅڅۄ܂ۄކӅфЄ‡· + ߅ ܇ل؈ل;߇܄։Մυ·σ΄̓̄͆·͇̆ͅ-҄ֆņDŽ +„ŌƃDžȄǂȄdžĊʌ˄ʂɄʋ˄͈̂Є/0101210/010/012323221100///...--,,,+++*+,+*+,-./011122212/334566789:;<<===>>>??@ABCDFGHIIIHGFDCA><;975443210123444556 7778899::;<=>?@?@?>?@A@? @@ABBCCCDDDCBBAA@AAB!B! A  !"#$#"#"!"#"#"!"!"#$#"! ?>=>?<;;::988877889:;=>>?>==<;:9988776555432100///.//00122345789:;<=>@ABBCC"! ??>>==<;: 999876655456567878 99::;;;<<= +<<;;;::9998999::;<;::99878777666543232101010/.-,-,+**))('&'() **+++,,--.--,+*)((''(()+-.1356899: +99865433221012321212323334445012343456544433222123212223334323434343210/01210121232101234321211100/./0101010/.-./0/./0100//...-,+*+,-./.- ..//001112221010/0/.-.---,,,+***))((('()))***++,-.//0010/ +000112233345434 +33221110001010/.-,-,+*)))(('&%%$$$%%&()+,./0112223210/.-.-,+,-,+*+*+,+* ))((''&&&%$%&&&'''()*+,,,--./0/..--,+*)((()))**++,,--.---,,++**)))((('''&'()())***+***)))()*)*)*)**++,-,+*))(('''&'''(()))*+,-.-.      +     + + + + + + + +  + +           +      +  + + +  + + + + +     }}}}~}~}~~~}~}~}}}}}~}~}}}}}}}}}}}}}} ЅюЄτӄ֓׈؃׈ք Ӈ҄ ɇȇǂƅƈʅȄ  džˆ͆̇ه   ,އӅ  ߇݇фЅÆ P  + +   + /ՇօՂօӈ҇Մփ׈؄لڅۂ܈ۂ܆م؂ׅքԄΉφ ފ݂܄ۆօڄ +߆ۈۉڎۂڅلڄۆЄȈnj˄̈́̐Ʉ>…ÄψɅ ą  ‡Ǎ  +ȅƇŌʊ˄ʈɃ-./././0/010/.---,,,+*)*+,+*+,-.///0112;33344455566677788999::;<<=>??@ABBBCCCBBA@?>=<;:986543221110123454567 888999:::;:;;;<<<=<=>?@A@?>?@ABABCDE"!B! !  ! !"!"!"#"#"!"!"#$#"!"!"#"#"! =<<<;:989:9876543221110/0123468;=@BD"#$$$###"! @@@??>=< ;;;:::99989:::;;<<=<=<;:9:999887676543454321010/.-,+*)(' +(())**+,--.--+*)'&%&'(*,-/2468:;<==<;:98765433234565432321234543321234543432321232123432321210/01210121234323432323212343221100/0121210/0/01010123210/././0/././.-,-,+***+*)('()*+++,,,-.-,-.///001223445566676665554323210/.-,+*+,+++**))(''&%%$ %&()+,-/0112121010/.-,+,-,+*)()('&%$# $$%%&&''(()))*++,,,-./..--,+*)()* ))(('&&%%%$$%&&&'''()*)*)))((('()*)*+**)))(('()*+,+,-./.-      + + + + + + + + + + +       +           +    +  + + +  +   + + + + +  + + +   }}}}~}~~~}~}}}}}~}~}}}}}}}}}}}}}} ʋˆ̃˄̇͂΄ςЅх҅Ӊ҄ ҇у҅υʄɄʄˇ̃ː ƅŅބ#Ɖʉ˄   ߄ل؅م ̈́  + ݅܅ۈ׈ ڄօ ʆ  *     ( ܆ օ ҇ӇҋӇ҇ ؅م؃׈ւՅ؅ +Ԅ̈́̇ ‡Ԅֈׇ + ۆ؅څf݅چنՅքфЃщ Ɉ͆̇˃̅Ʉ4ĆÃĉˉ΅Ʌ‹ † Ȉ ćł-.-.-././0/0/0/0///..--,+*+*+*)*+,-./0123344556789:::;<=>@ACDEFFFDCB@=;97420/.-./012334456789:;<=>=>?@@AAABA@ABA ! !  !"! ! !"! !"#$#"!"#"!"#$#"! !  =<;;:9876543322122345567876545'444332110//..--...//01134578:;<>@ABDE##$#"! @@?>>>=<=>===<<;;:9:987 888999:::;< +===<<<;;::98777666766554434545456667787766654322110//.-,-,,,+++*)())*++,-./.-,+*(('&''(()*,-/1368:==>>>==<;:98765545432343212101122232123443212321222333432221100/01232101010/0/0121234543432121210112234 333221000/00112101010/0/./0121100/ 000111222333212322110/.-.-.-,+,+,+*+,+,+,+++***))() ***++,,---../0/ 00011122233455676655434543234321000///./.-.-.-.-,+*))(('&&%%$$$%%'(*+,./0010/0/.-.-,-,-,+*+*+,+*)()*)('('&'&%%%$##"###$$$%&'''((()()**+++,-,+,-,,,++**)('&'&&%%%$ +%%&&'(()**+*)*)*)('&'('&%&&&'''()('()*+,+*+,-,+,-      +  + + + + + + + +  + + + + +     +        +         +  + +   +  + + + + +  +   }}}}~~~~}~}}}}}~}}}}}}}}}}}}}} Ċ Ċńƃň˄ ˄̇ ӆ҉ȇĄƅŃƇˉ̄˄ʅ' ˆʅɄ ψ نڄ݄ +  +  ߂ކф-#8„1     +  +݈܄Ӈ ؇ۅ ҊяЂτф҂юІ:ޑ߆߄ +؆ׂքՂֆ׆օ„&߅ލ݆܇݇څلՆЅυЄ̅ÆĄńƃDŽ Ŏ +ĊŎ  „ÆŠÄăńĉ+,-.-./.-./0/.-,,++*+*)*+,-.-./01234567899::;;<<<=<=>?@ACCDEEDBA?=;96420.,,+,-./0123456 7778899:;;;<==>>>?@A@ AAABBBCCCDE"! ! ! ! ! !"! ! ! !"!"#$#"!"#"#"#"!  !"! !  =<;:987665556778899:987656 5443222110/012345689:;<==>?@@AABBB!!"""! @??>>>==>>>??@ ! >>==<<;;:;<=>?@A@?>=>? >>>==<;;:9888765432210/..-,,++*++,,-./012223332221 0///.-,,+***)(''&&&%$$$##""!! ! ! 988765432100///00100//./01211010///.-,,,+*)''&%&&&%%%$!#$$%'* %).37:<=>===<;:9887665543232123432345654433211010121 000///...-./01210123210/0101210123456544433321010121100//../0/010/0/0/./0/0121234323210/.-,+,-./0 1100/..--,+*)*+,+*)))***++,,,-..///0001234321234543210/.-.-,-,+*)('& ''(()**++,,--./0/.-,+*+,+,-,+***)))()('&%&'& %%%$$##""! ""#$$%%&&''('&%$%%%&&&'''(()))*+*)('&%&%$# $$%&&'())**+*)('&%$%&'('()()()*+,         + + + +  + + + + + + + + + + + + + +    +   2       + +       +   +   +  + + + + +   + +  }}}}~~~~}~}~}}|}}}}}}}}}}}}}}} † „ ʄ˅΄ τ džȅW½ƊǃȌ̅҅ӂ҄х܆݅   0څօ +ۄ  0   +(    + + ؇ׅFʇфք!΄ چل ܇߇ޅ؊א ʄɂʅɄȄֈ ߅܈ Єσ·̓̅˄ΆφÅąŃč   + +  … +,+,,,--.--,,+,-,+,-,+,-.--,,+*)*)*+,+,- +...//001112334679:;==>>>???>>=<<;;:$9::;<=?ACEFHGFEC@=:863210/..-,,++***+,+,-./0 1112233443323233444567665443444556677899::;<<<===>?@AAABBCBCDCBCCDDEEDC!"! ! ! !"! !"!"#$#"! !"#$%$$$##"#"!  !"#"#"! ==<<;:::99:::;::99876543233322110//..--...//01 2334679;=?B"#$%%%$$##"""!!! ?>?@??>>=>>?@ABCD +CCCBBAA@@@?>>===<2;;::9877653210/.-,+**)''&&$$##"! ,+(%$#!  "###$$$"! !""#%&')**+,--,-./0011 !!!"#"!"##$%%&%$$###$%& '''(()*,--./0/.-,+)('&'('&&&'''((*+-/246789 88877665544332343234323433322210 11123444555654323 +22100//.--,--.../012121210/0121012101012323432121000///0123322211010/./0/0/./0/./0/010/0101234321210//..-,+,-.*///0011122333444556677889998876543210//.--,+*+ ***+++,,,-..//0 //..--,,,+*+,--../0011123456789 88765544432111000/012110//..-,-.-.-.-,,++*+,-,+*+*)(' +((())*++,,-,--..//0/./...--,-,-,+,,,+++***)))***+*)()*)('&%%$$#$%&'&%$###"""!"#$%&'('()*))(('''&'&'&&&%%%$# +$$%%&'(())*)('(''((('&%$%&'&%&'()('&'()*++**)))()))**+++,+**++     +  """! + + + + + + + + +    + + + +  +   + +     + +           +            + + + + + + +  +   }}}}~~~~}~}|}}}}}}}}}}}}}}}}  ‚ Njȅ… +ŅƄłą) „ ɆʄɃʅ ̈́Ά,    ބ&Ȅ'  + +    ܅ۈ +ׅ2͇̃͆ ԇӃԄӄ҆х͆ ܆ '҆݋܂ۄڄك؆׉ֈՅքՄ ΍͊ ƅ +Մֆ +ۄ܅݈܂݄ޅ߂фЄψȉ ‡  +  +)*+,+,-.-,+*)**++,-,---..//01122333455566677889::;;<<<=>= +>>>?@ABCCDE DB@>;97542210/010///...-...//0/01212323334456676566778 99::;;<<==>>>?@ABA@ABCB! !"! AA@@  ! ! > !"!"#"!"!  !"#$#$#"! =<;::998987876545483321100011233445544320//.../013579;>@BCE###$$##""!! >>=>?>=<;;;:9976543210/.-,*))('&&%$$##"#$%%&''(())*++,--..//00123443456789:;:98988788789 88877654433210/...--,,+*)))***+,,-/0123443210/.--,++*)('''&&&%&&'(*+-/1346789888776654343434322211010 1223344454454 +33221100//./01010/.-./0/01232323210121012101212345654321010101212321010/010/./012233434321232 111222334443210/000/.-,-.-...//0134456676665433210//.-.-./0/.---,,,+,,--..//0011223432211010/.-,+*+,-.-.-,-,,,+++*+*+*)(' ())*+,--...-,-.--,,,+,+*+*+*)*)()*)('&%$#$$%%&&''('&%$#"!  !!""###$%&'('&%$%$#$$$%%%&%&'()*)()('&'()('&'&%&'&'()()()          + + + + + +    + + +  + + +  +    +       +     + +    + + + + + + + +  }}}}~}~}~~~}~}~}}}}~}~}}}}}}}}}}}}}} +   Ä: ˆ ńƄDŽȂɄ ʅĄÄĄԅ؆ +߂܄Å  ݉҅ш +ņć&: + $  + +  +քׄք҅т҇ քՇԈՊ7݄  +ׇԉڅۆمن +څ̈́ͅ#ݑ݄ +Ո +΄σІ͆$@  Ä Ʉʄ +† Ƅ()*+*)*+*)*)*)*+,+*+,-.-,+,,,--..//00123345667&8899::;;<<=>>@ABDEFGHHIIHFDB?;8531/..-,-.- +,,,---..//0/01232343444555678999:::9:;<=>?@@AABC +BBBCCCDDEEFEDCBCBABCBAB! ! ! ! ? !"! !BCC!!!""!"!"!"!"! ?>???@@ @@?? !   !!"!! <;:9987766555443444555667666555454333222100/.--./013578:<=?@A >>>=<;:9876531/-+)('&%%%$%&'()*+-.0134577789:9899::;;::989:98989:;:9988788999:998876 +5544332111010//.-,,++*+,---./01122110/.--,++**)))('&%& '''()+-035789: 998877766655434543454521000///.//0001234543210/012332221210/./0/0123232323432211100/0011121012343232121012101234321212123212111000/012221112345434323222110/0001110/.-./0/.-,---../0/.-./010/0/./010/..--, --...///001123210/0/./.-.-,-,+*+*+++,,---..///000100///./ ...---,,,+,+*+*)(' ((())**++,-./.-,-,+*)*+*)*+***)))*)()('('&%$#"##$%&&'('&%$#"!  !!!""#$%$###""!"! """#$$%&&'&%&'()*+,,,--.-,-./.-,-.--,,++**))((''&&&%&'&%&%%%&&&'()('(      + +  + + + + +   + + + + + +  + + +           +               + +  + + + + +   + + + +  + + +   }}}}~}~}~}~}~~}~}}}}~}}}}}}}}}}}}}}  ¾ +„ ˆʆɇʇɃȄ5   + +   J   '߄؄̅ˆńĄ)  + +   ؇׆׆օ׃؇ق؇ׂֆՇԄ ׉ԉ̈5 ݄׆ӄԊ ݄ރ݄܄ۅڊلԅЅςЄφ ɅȃNJш ޅ߆݄ׅӇͅ ΄ʄ 1 +Æ#ʄɄȊǃƆdž ('()*)()()('()*))(('''()*+*)* ++,-./12469;=>@AB!""###$$$%KLMMNO MJFB=96310//./010101010111223454567888999:; <<<==>>???@@@ABCBBBCCCDCBCBCCCDDCCB! A@@@?>? @  !  ! ! ! ! A !"! !"#"!"!"!"! !  ! <;< !  !"! <<;:99876655444334 5566677666554545 443321100/000011122345677888776544310/-*)'%#""!"$&(+.1369:;<;:;;<;;:::98788899:9988878989876543210/.-,--./01232210/..-,+*)('& +')+-/1478:;::988766555444543456543212101110001112233343210/./0101232123432321210/01234343212323210/0121012101234345454343210/./0/0/0/0/./01210/0//000/.---,,+,,,--.../011223222110/./0/.-.-.///0010/.-,+,+*)() ((()))*++,-,+*+*)()*)('('&'('&'() +(('''&&%%%$#"!  !"##$$$%$#"!   !!"""#"###$$$%&'())**+,--.-,---.../0100//..--,+,-. --,,++**))((('&'&'&%$%&'('&'    , $%&'())*)(&#    + + + + + + +  + + +  + + + +  +  +             +     + + + + + +  + + + + + + +  + + + +      }}~}}}~}~}~~}~~}~}}~}}}}}}}}}}}}}}}}}   ņ ʆɏƄŊĄՅ   + + +ۈȅ*  օՄԊ8 + +    $ޅ ݄نڃۅ օׄچ؉Ԇ ˄ +Շ ބ߄ ډՄԏ߆ޅ߈ޅӊҋΆ͂̄Ʉ نۄׄوڃۅ؍׃օׅքԇӉ҄ӄ! *-Ç%&'('&'('&'&'&'&'&&'''(''&&% &'(()**++,+*+,-/1479<>@ABDE##$%%&'()RRQPPO NMJFB?;86421000//01000//./010123212233345 6667778899::; <<<==>???@ABCCCDDEDCD CCCBBAA@@?@AB! A@A !  ! @ @ !BA! !"! !"#"###$$$%$#"!"#$#""!!!  !!"! =<;;:;<  !!""###$#"!"##$$%%%&%%%$$##"!"!! >===<<;;::99987654343222110/. --,,++**)()*,/269=?A >=<<;:::99:::;;<====<<;<;;::989:;:98887776545432221110121010123456764320/.---,,,++**)))('&'('&%%%$$%%')+-0368987655545456766544322101232122333456 55444333222323 +22111001112100/0/010/000111001210121012321232123221110101012123212343234321010/00011232101110121010/0111222345456565432101211100//.-./0/0/000///./0101010/.---...-,,++***)***++,,---./01010/0/010/.-,-,+,-,-./.-,+*)((('&'(())**+,+*)()*+*)*)('&'&%&&&%%&%&%$%&'&'&%&'&&%%$$$#"!"!"#$%$#""###"!  !!!"#"##$$%%%&''((()))* ++++,,,--../ ..--,++*)))(()('()* +++,,,---. --,,+*))(''&&%$#"#$%%&&'&&&%%%$%&%  +    /.-,+(%" +     + + + + + + + + + + +   +                 + +   + +  + + +  + + +  + + + + +  + + + +  +  }}~}}}~}~}~}~}~~}~}~}~}~}}}~}~}}}}}}}}}}}}}}  ƆȅǃȄɅɇφ  +9 ̄)ֈ4;    ݆܂݇؈܄ +܅ۄچۄلچۄ Ԅ ކ݃܆ل֍߅ֈЄІӉ ۆ؅؄ԇ Ԅӈ +ՄʅɂȈÇ ÄăÄ„Ą# + (Ƅ +#$%&'&&&%%%$%$%$%&'('((())**+,-./0/./00234689;=?ACDFHIKMOP)**++,XXXYZYYXWUSQNJFC>;85321110001000/./00111210/0001122321222334456 7778899::;<<<==>>>?@@@ABBBCCBBBAAA@@ABCBCDDDEEEDCB!BA@@@???@ ?? @?@  ! B!!! !BA@A@ @??>?@@@AAA ! !"#"!"! !"!  +<<;;:::9::;;< !"#$%$%$#"!""###$#"! =<<;::9: +9998877766565432110/012469= !"""! :987889::;<=<;:;<;:989:9:;:998876554443334332221010/0/./001234667888765310..--,+*))(('( +))(('''&&&%&%&')+.1479;;<;:988765545456787655544345654345 +4433221100/0/0/./01210/0121232123232321212101234445444323432101010/012123210/01012345456545434321 +0//..--.../.--,,,+,,--.//00010/0/0101210/./..--,,+,,--.././00122332343210/010/.-,+,+*)*+++,,-,+,+*)('''&&&''(()*++,,,+*)))***+* +++,,,+++**))()('&'&%$%&%&'('('&%&%%%$$##"#"#"! !""#$%$# """!!!  ! !""##$%%&''((()))*+ ,,,+++**)(''&%&'())***++, ++*)('&%$##"!"#$#$#$#   " "#%&(234566766420.*'#         + + + + + + +  +                   +    + + + + + + + + + + + + + + +  + + + + + + + + +  + + +  + + }}~}}~}~~~}}~}~}~}~}~~}~~}~}}}}}}}}}}}}}}}}}  + +A"þŅ ʅ̈Չ ߄ + + +   +3  ߈5 +Ո0Ƅ    $ ߅ لӄ؆؄քۇ܄݃މمք +ք׈ ҅ӄֆم܅܅ՆԄӄƄ ыԆ чфч҄ӆЄω΄Ȅ ‰ĄÄ 1.ÄÈ !  "#$%&'('&%&&&'&&&%&'('&'&'('&''(()***+++,,-./1358:;<<;:876545679;=@DG%')*+,-[\]^__`_^\ZXWUQMIC>9520//001234 33322212234544332110111012233444555444344455567677889 ::;;<==>>?@ABBBCCDDCDCDCDDDCCBC!"!CCBBAA@?@   ! @ @A ! @?@@AAA!"!!!BAAA@  !"#$#"!  !  ;:::;<;;::988877788:<>? !"""#"#$#"!""###$$$#"!""##$# +"""!! <;<;::87665676565543321110//./0248= "$%%%$#" ;;;<=<;:;;<<=<<;;:99988987889:;;;= ?>=<;:::99989 88877666555443232323221100/0100//..--...//00100//.-, ---,,+*))('&%$$$###$%'),/257899877665545678765654567 +665544433323234543221012 1100///..-./012100///0001010112233454443434321232121010101232321010/012123210/0/011000111234545656543432321210//.-.-,-./././0100//0/./0122211221 000///...-,+,-,---.-,-../0123210/0011210/./.-,-,++**))())**++,-,-,+*+*+,+*)((('''&'()*++,,-,,,+++,+*)*)('&%$#"#$%$#$$%%&'&%&%$%&%%$$#"!"!  !"#$#""!!   !"!  !""#$$%&&&'()(((''&&%&&''('&'('((()))***+,,-. -,+*)'&%$#"""! !  !!" !!"""###$$$%$#$#" +   6778999:::9876431.*'#        + + + + +  + + + + +   + + + +   +         +           +   +  + + +  + + + + + + + + + + + + +  +  + + + +  + + + +  +  + + + + }}~}}~}~}~}~}~}~~}~}~}~}~}}}}}}}}}}}}}}}}   9ȅDž Ƅń Ɇ΄҅Ӆ) +% .߄ ׄ   ߄ ؄م>)   +  + )   +  +%܇؈ׄ/ڄكڈ؅لՈ ͇ۄ ׄ'؎ׄօфІφΆ ņϊ ΅τ ͈҅ȅ Ň !  +$#$%&'()()()()*)))((('&%&&''('&%& '''(()**+++,.-.036:?CH&())(&IEA><;=?BFIM()**UVVWWWXYZ[\\]]]^_0/^ZUPKEA=;9766544433322111000/01232211000/00112323456 +7788999:::;< ==>??@AAABAABBBCCDEDCDCDCBB! A@ABA@?? @ @?>=>?@  !B!"!BAAA@@?@A !"!"#"!"!"#"!"!  ! ?>=<<;;::988789:;<=>?@ !!""#$%$#$%$#"! <;:9899::;<;;:988878899: 998877665554332123579===<;:;<<<==>=<===>>>??>===<<;;;: 9998887778889:;;;<<===<;::988778899::;;<==> ==<;:987654343221100//001233455443211000/.-,+*)('&%%%$$$##$#$%'),0368:;;<=;:87554323444566788999::98765544433343434345432211101010/010/0/0/01012343212323434321012345434343232123212123210/01012234323456543444543233444543210100//.--,-./.---...//000111000/010/././.---,,+,-,-,,,+++*+,,--../0001232321210/./0/.-.-,-.--,,,+++*)))(('( +)))**++,,,-.-,-,-,+*)**++,--.-,+*+,+*+,+++***)('&%$#$#$%$#"!"#"!  !!""#""!!  !"!"! !"""!!"""###$$%%&&''('((()))*)('('&%&'&' ((()))***+++,+*)(('&&%%$#""!!!  !  !!!"""#"#$#$#  + *!$-./012346789:; :62-($       + + + + + +   + +     + +                + + + + + + +  + +   + + + +  + + + + + + + }}~}~}~}}~}~}~}~}~}~~}~}~}}}~}~}}}}}}}}}}}}}} %cž̆&   $ ܅ۄ݆ Պ#ۇ܇щ"  + * +G ;݄܄݅ۄڄ؏ՆЄ ؄ل Ѕ܋$҅ χ ΄ͅʄɆʃɆ + Ȉ ʇ̅̈́̄„ 9  + #$%&%&'('()()*)('&%&'()()G***++,-./0359=AFIL'MIFA<97679;>ACEFHIJKLMPRUWYZ[\\]^__```abba`]XQJC;630/..-,++**)***++,,--..//01223 210/-,+)(&%$%&'())*+++,--./01123455666777899:;<=>>>??@@@ABBCCDEFGFFEDDCD"""!!!C! +DDEED"""##"! ! ! !CDC!BA @A@?@  !B! AAABBBC! A! !"!"#"!"!"!"!"#"#$%$#"!!! @>=<;9865322100///012579;=? !"#$#$%&'&%$#"! ??>=<<;;:::98789878 +77665443332 3457;>@CF#"! =< +;;::9:::;;<;<=<;;: +;;<<<===>>?@@@AAA@@???>==<;:;<=<<;:98878899::;;;< ;;;:9876665567654323345678 +7765432100/.-,+*)(''&%%$%&%$$$##""!!!"$&)-159< :98766655543344456678 +7776655544343434567656554443212221110101010/010/0///0001112323434345454343212344433323454555444321110001001112221123212321000///./010/01210 1112234455666787776665667788899:9876543455544323210111000/011100/.//0010///.---,-./.-.-. //...---,,,+*)*+,-./ 001100/..-../012122345443332 +3344454433210/.-./.-./.-,+*))(''(())*+,,--./..-,-.-,+++,,-,+,-.--..-,+,+***)))()(''&&&%$%&%$#$#""!! !"#$%$# """!!!   !!!"""##"""!"#$%&%%%&%&'&%$%&''(()* )(('&%%$$#$ ##""!! !"#$% +&&''((()))*+,+++*))(('''&&&%$$##"!  !!!""#$%$%$#$#"""### + /!##!!"$%'(*,/1356789:;<==>=<;840*$          + + + + +  + + + +   +   +  + + +     +               +    + +   + + + + + + + +   +     + +   + +   + + + + +  }}~}}~}~}~}~}~}~}~}~}~~}~~}~}}}~}}}~}}~}~}~}}}}}}}}}}}   + H½ԅՇ +ۈD   + / +߆ ߄%  +3ԅΆĄ    # ׆քՈ фԄՆԅՄքׄ ЈͅօՄ% ކ ׆ ҄Їυцф҂ӄ҂фЅтЋ΅Ȉ ąŇŅĂņʄDŽ +  "R  &%&'()*)()))***+*)('&%&'()(()***)(('(()*,/48>DHMQ***SOJD>:754)5678:;=?BEGJMOQSTVWXZ[\^_`bcca^XQJA;631//.-./0012234456788999899888776789::;<;::99876 789:;<=>@A@?>??@@@ABCCCDDEFE"DCCC!"DCCBBBA@ @ @@@A@? !"!"! B!BAA@A @ABBBC! AAAB! A @@@AAABBC"!"! !"#""#"#$#$%$%&%&#%$$#! ?=:742/-,++,-./1368:<=>>??@@ !"#"#$%$%$%$%$#"! ??>=<<;::98776655545676 5554320/.- ./1369=<;:9::;;<<=<=>=<==>>?>?@??>>==<;;:::;;;<<==>==<;;:999887776 554433446789:987 66543221000/.-,+*)('&%$#""!! !"$&*.258:;;;:988765667788765676543456545454343 +44433221110121210/0101221234343432121121232345454323211100010111222321210/./00///012334556567667787766654343210/./01010/..---./.-.-,+**))*+*+,-,-,+*+,,--../0/011234678887655434321210/010/./.-./010/./.-,-././.--,,+,--.-,+*)))(('&&&%%%&&'&%$%$#"!"#$%&%$#""!!   !!"""#$$$#$%$%%%&&'(()*+*)*)()***)))('()*+*)*)()()*))(('&'''&&&%$##"""##$%&&&'&&%%$%$#$%&    +  B!%')'$ #&),/1356789:;<==>>?=;60*$ + +             + + + +    +  + +  +      +             +         + + + + + + + + + + + +     +  + + + + }}~}}~}~}~}~~}~}~}~}~}~}~~}~~}~}}}}}~}~}~}~}}}}}}}}}}} .Vǿ˄#   +  +  +.߆ޅ׈ TчЇɆ<    ! $ "ӄЄӅՄ҅ȅ Ȅ؅ +ކ݄܄΅҄҄Ԇӂ҄΄ ΄ŠÄĄ ɄDž„ '…Ņˆ„†   '&'('&'()*+*)*+*+,+***))(('()*+,-.-,+K***)))**+-./1358;?BFIKLLLMMMKHD>93/,*))*,./12357:>AEILOQSTVXZ\]_^\YSLG@<:765667776654345 66777889:;<<=<=< =>?@AABBBA@?>>=<;<=?@AAABA @?>===>>?@@ABBCCDCBBAB!BCC! CCDDDEEDDCCB!"!!! ??>? !"!"! + AAAB!!!"!!!CC!"!A!! !A@ !CDCCCBBBA !BBB!!!""!"! !"#"!"#$#$%&'('&%%$##"B@=9530.-,-/14679;<=>??@AABB!"#"#$#$%&%%&&%$%$#"! =<<<;;::98876567877766764310/..//012358:=@BB!  +<::987767789:;;<;;:::999:9:;;<<<;;;::999888999:9::;;<<<=>>>???@?>>==<=<;;::9:99876567:?@@@?=:62/+)(()+,.0247;@EKPSWXYYYXWURMHB>9531101123344556667676789:::;;;<=>>???>=<;<=>>??@@@??>==<<;::9 +:;<>?ACDFFGFEDCBBBAA@AAABBC!"DDDEEEDC!"!"! !"! @ A@?@ABA@A @A !BAAABB! AA ! !"!"! ! ! !"#$%$%&%$(%%$$$#"B@=;:8643221110001124578:;=>?@AABA@@AA !"#$#$%$#""!!! +?>=<;:98878787656667789:$99987654321/--,-.0248;>AD"###""!BA@@ =<;:9:;<<<==<<;::9989:; <==>??@@???>=<<;::9888776789899:;<<=<;;:9987655443332110//.- ,,++**)))('&'&%$$$#$%(+/369::9887654323334456543232343434543323322212121211100/0/./010/012122233454323232 1100///00111212123454545432101332321234345676567656543433322122123432322100/..-,+**)()('() ***))***+++,+,,,--.---,,,+,,,--, +++*+++,--../0001121100/000111223566777654322334543212323212323210/./010//...-,+,+*+,+,+*+*+*)('('&%$%$#$$%%&''(()))***++,,-. //001100/./././0121100/.///001110//..-./.-,--,,-.-,++***)('('( ))**++,,,+*+*+*)('''&&%%$$###$$%%&&&'('()))()  !! !&*/267643/,'#        + + +  + + +  +    + + + +   +                  + + + + + +        + + + +      }}}}~}~}~}~}~}~}~~}~}~}~}~}}}}}}~}~}~}~}}}}}}}}}  \Ȅ1 I +    3  ؅ۅ )6Å$ 5) +%     + \Ո +χE хֆІ΋υЃчτ υƄ ŇJ„ ʄф΅ʄυ̉ˆ lj  +  < ..--,,,--.-,,,+++,+*++,-,,,++**+* ++,,---../.-./01110//..--,,+++*)(('(()*,-.01122344543456#55443210//./036;@GMSX[\[XSNHA<7421012344455443234454445566778999::9:;:99:::;;;<=<=>=>>??@@A@@?>=<::9:<=?ABDEFFFEDDCBBAAA@@@?>>===>>?@AB!CDDCCC"DD"!"!  !"!! @@A !! @?@ ! ABA@?>=>??@A@??>>??@A !!!""!! A!"!"#"!"""!!! ! !"! = !!"#$$%%&&&%&%&'&%%$$#DC@>=;86543322211024579;=?@ABBBAA@@AABB! BAAABB!!!"#"#$###$$#$#"! >=<;;:9887899988765456667889.88776655443210.,+*)*+.05:>BF$&&''&&%%$#"! ?==<;<=>=<;:;:98 99:::;<<===<<;;:::9::;<<==<<;;::9::;;<<=<;:998 999::;;<<==> ===<<;:988776&789:<=>?@@ABCDDDEEEDBA?<:87654433210//./.--,+ *)(''&&'''(('&'%((()))(('&&%%&&(+.16:=7665555432344556 777666555444323223334456 77788855432112223332211000/0001 000///.../././0112111012323345432344332123212345655543222334 3322110011122133222344323221101222333212323334445455667767876765432121 001112233443432343332110001112232 1100/.-,*))('&'(()))*+,-,+* ++,,-.///010/./01345676544333454323454343322210 +1000///000/.///0010 111221100/.-,-,-,+*)('()()()*)()*)('(''&&&'&%&'&%$%%%&&'()**++,,--./0//..-.---,-,--././01 +2333443332321012110/./00/0/.-,+++***++,+,-,,+++,,,+++***))*+**)))((('''&&''(())*))((())***+*)))***+*)('&%$#"##$$%& '())*+--./000/000/00/   + %*.368752-(# +            + +     + + + + + + +    + , + +  + +         + + +            + + + + +  +        + +  + +     }}}}~}~}}~}~}~}~}~~}~}~}~}~}}}~}~}~}}}~}~}~}~}}}}}}}}} / +Ƅ ؅ل7ˈ΅݄$* +) 5  :DŽ2 + +MȅƆ! + +     +/DŽȄȇ͆΅ ńۄ܅܅ݎ)ׅ +ԅЅ ˄ʈƅ +ą ( Ąʄֆׅ̈́ +ˇ̎ˇ +),+++,,,---..///012110/01222100/.-..//000111000///...-../0//..--,-../01 0111234566777899:::;:9::998889===>>>?@A@?@@AABBCCDDCCBBAAA@@@?>?@AB AA@@@AABBBCCD"!"! ! !"! !"! A@@@?@A@AAABBA@?>= >>>??@AAB!!BAB!! ! !"! ! !"""!!!"!  ==<<==>?@AA!"#$%$%&'*&&%$#"A>;9653322110011233456789:;<<<==>>??@ !"#"!"#$#"#" !! @?>>>=<<<;:9:98766778898#7766554432221110//.../01368:=@ADFH$% $#""CA?>=<=>=<<;:;:9888777889:;;<<<;<;;;:9:;:98989:99875431112245677899:;<=?@ACDF##GFDB@><:9876543322211100/.-, +++***)))*)))((('''&&'')+-036899944323334455567654323454343212122232100//./0/010123234333222321212121 223344455434334432 1110001112101233444443212123344454556789:9 ::;;;:998778776654321212345432321010/..--,++*)))('((('''&'('&'''(()***+++,+,---,,++*))((('(()**,-./01210/011234556555444345667766656543344456545432121 000//..-.../...--,,+,,,--./.-,+*+*)((('''(''&&%&'''&'&%&'&'&'()*)('&%%%$$#$%$%$#""#$%&''())*++,-.//0012123345676 77888777665545556676543210///.//.-.-.-,-.-./.-,+,+ **)(('&&&'(**+*)*)*)*+,-.-..///00/ 000/.-,+*) ***++,,--.-,+*)**+,,---,  $)-00/+'"       +    +  + + +   + + +                +        + + +  + + + + +     + + + + + + + +   }}}}~}~}~~}~}~}~}}~}~}}}}~}~}~}}}}}}}}}}} +  ,фFƄڄ +& +  Չ (H  *"ӄ >   + +(   #!…DŽ͆΄քׇ, + އ݇̈́̄ Є̅Ɖ +)5܄Ά͇˄̄ +  +  ))(''()))*+,-,+*)**++,-,,++*)('('()**+,,-./0111223344432210 /.-,+***+-.012344566678899:99887654333458;>AFKOPOKFA=:765434543222334456789:;<=<===>>>?>==<;<=>?>===>>?@???>???@ABCBA@AABBC BBBCCC!!!BBAA@ABCCBA@ ! !  ! ! ?@???>??@@A@?@AABBBA@??>>=<=>>??@A !"!"! @@ ! AA! ?  ?>? !"! =<== !"#$%&'&%$#!?<8642000112 3334568:;<=>>=  !!"#"#$#$#$#"#$##""! ? >>=<<<;;::9:989876'5543310/-+)())+-/37:?CEGJ%&&%%$#EBA?=<<;:9 :::999888787766789:;;<;< ==>??>>=<;;: +99988999::9:;<==>?>>=<;:98989 876556789;<>?ABBCCBBA@?=;:86543210//.--,+,+*)(('((*,.0357:;555443454 3344556677787766554345434545455566343322210012234454433211101012221100/0/0/././00011101010101232321112232221112234343212223332321222123223345434323232121212323433322101010123434 55566677665567677898876678776551222332334543232100//.---,,,-,,,++**)*)))((''&''(()***))(''&'())*++,,,-,,,+++,,-,,++*))())+,-./00011000100//./0245676554433234567787654565656544332210/ 0001112221100/./.-,+,+**))()*)(''&&%$#$%&&'&'&'&'()('(''&&&%%&%&'&%%$$##"#$$$%&&'())**+,--./01210101122234456789878987766655433322233455567789::;;;::9887765433221001110///./...--,+*)('(())**++,--..///.-...--,+,+,,--../.-.---,,++***++,--.--,,+*+,+,-..0011232 122112233556543211/..--,+*) !%(+,,)%        + + +  +   + + + + + +      +         +  + + +            + +  + + +  + + + +      +  + + + + +  + + + + +   }}}}~}~}~}~}~}~}~}~}~}~}~}}}~}~}}}~}}}~}}}}}}}}}   ӆ4̄ц҄ل   +(  ф  :  +3 +   + +! "  +  "ɄƅňȄчЄщ҈.ۆچфЂчʅɂȄńăňĄ„ˆÂ„% + !ń ЄЈՅւՆ Ɇ Ä4 2  00112232221110/01 2211221110//.-,+,-,---,,+,-./01232 34455543210/00123566766655443322212234677764210///./00012233445556667 88766554434567789::;;:::;;<<=>>?>>===<;<<<=>=>?@@AAABABCDCCDEDEDDCCBBBA@?@A! AAABA A  ! >>==>>>?>?@ABA@?> +===>>>??@@ABA@?@@ @?>=>??@@@A@A ABA@A + @@@AABBBA! ! !!!BB!  !"#$%&%$%$#"""!! @><:85421101224578:;;<<===>= !"!""###$%&%$#"#"!"! @ ?>=<;;:98789:99876654322110/.-,+++-/258;=?@AB +A@?>=<;:9989:9898767889:99988999:98789:;;<;:::9:9887678 766555667889:;<=>>?>>=<;:876788876432100//..---,,-,,,++*++***))( )*+-/1368;<776554432211223432345556545434455543443 444333222110 1122332211000/01010121210123232123432121234543212122344455444321010123456677876767655566677777766654312345443322234343210110/.-,-,-,++*)))()('())*+,,,+,-.-,+*)*+,-./01122212456787767778 77766554434567899:::99988766554343210/.-,-,,+++*))**)()*+***))('('&%$%&%%&&&'&&&%%%$$$%&%$#$%$%&&'())**+++,,-.//012321 +2233344555678899::;;<;;;<<===>===<<;;: 99:::999:::;:::99877665678898877654321100//.-,+,+*+***)('('()**+,,,-,- +..//0012223210//.--,-.---,,++*++,-./0/0121011223321100///0100/..-../01212 1100///.///0      +    +  +  + + + +   +      +         + + + + + +    + + +   }}}}~}~}~}~}~}~}~}~~}~~}~}}}~}~}}}~}}~}~}~}}}}}}}}}  +"Ą„Єه߆    + ΄! h6A) ' - + 0     τ΄ʅ0 5,֊҆ #   +  цׄ؂ه-Ƅ  +3 +//.../012110/./01 +000/00011123344556 777654322123432100/.-../00112122333210//..--..//000//.-,++*+,-..///0/ 12345667676543210001123445566555455678788899:;::9988778889:;<<=<;<=>?>>==>>?@@AAA@@@A@@?>==<<;<=>?@ABCCDDEDC DDEEEDDCBA@>=<==>?@AABBBABA@A ! !  !A@ABCBBC!"#FFEEEDCCBBA@@?>=<<<==>>??@??>>=< +==>>???@??>>=>===>>>?>?>?@?@?@A A@@A@ ! !"!"!"!"#$%$%&%$#"!@><:87544310/..- +./2479:;<<=>? !""###$%&%$$##"#"# ""!!!""##$#"!  ! <<<==<<<;;::99:;=>?@A@?>=<;::999:9876421/.-,*))(*,/259<>ABB@?=:7544566778789998876 77655566789::;:99898767 8877889:::;:;<;:987767898765455679;=>ACEFFD@<96421000//...-,,+**))()***)))**++,.1468:; ::99877655443454433232343454555443234545434333222121210/0011010/010 111000///01010121222100///011233343434323432343433222112211100/0101232345554433212223210111221234543222112333221223322234555656767656 77766655 54443354322334565443211100/.-./.-.-, +*)('''(()*+,,,+++*+*)**+,--..---,,++* ++,---...--,-.--,,++*+,-./0010/ +0234567889:9877767778766554 556778899:99887765544321101210/0//...---,,++,,-...--,+, ---,++***))('&'( ''&&%%%&&'('&&%$#"!"#$#$%$$$##$%&%$#"#$#"!"!!"#%&()+,.//011210123456667 88899:<=>>???>=>>===<;<;;:9899887766556667789::;<="<<<;;;:99876432112344555433210/.--,+*+*+,,++*)()*++**)*+++***)**+,-./0//.--+**)('(())**+,,,--..//012333221/..-.-,--..//..--,,--..///0/0012 3322211100/.//122334 3332210/-, -./001235567 6665554443222110/  + +       +  + + + +         +            + + +     +     + + + +    }}}}~}~}~}~}~}~~}~~}}}}}}}~}}~}~}~}~}}}}}}}}} &Ɔׄ 0 + + 8   +ل M  +#  $ +% Մ +Іфф҅ +҅Ӆ1߇ކ݆!քՄӄІ)-$ &Յքӄ҄¿  ++434455667 6554433221112121012100///0122234345432221110/.-,,,++***+-.024567899:%;<=?@BDFGHGGFEEFHIKLNPRSSRQMJGDA>;9876 56667776655655667878899::;:;:;<=>===>>?@?@@AAABA@?@A@@@AABCBCDCCCBA@?>=>? @@AA !!! ABA@?@  ! ! ! A@A@AAABBBCCBABA@A@@???>==<=>=<<<;;;:9:;;<=<==>?@ABA@?@A@A !"!"!"#"#$%$##" >;864210///.014679;<>?@?? !"#"#$%$%&%&%$$##"! ?>>=>> !"! +AA@@???>==<===>??@@?>=<<<;::9987765543200/.-/0469<>@AAA@>;98765678787898987678987 889:;;::988767656778776655543445578:<=??@AAA@?=;86420.-,+**)%**++,++*)('&%%%'*.37;<<<;;::987654433434345454344433323433212 110//00112212 111000///012111010/0101000110100111232343432343210/012345554432122332221232334343232345456567877766777655444334455566555455544323234565434333445667743333323210/./0/.-.---../..-,,++***)**+,,-.-,+,-,-./.--,,+++,-.//00112 334679:;;<<<; <<;;::999876554565544343 22211100/./010/.-,+,+*)(''&&%%&%&&&''('&%%$$$#$#"#"!"!!! !"#$#"#$$$%%%$%$#"!"#"""!""##$$%&''()*++,-./0///.../01234 556678899::;<;:9887876545456778889:::9986531/.---..//001222111000/01000///.--,,+,,--. +---,,,--../0/.-.-..//0010/0123455656678765 66789988765554344455444332221122344456677767876665544323434   !"$$%$%&()+-/111/-*(%"      +  + +    + + +                + +  + + +         +  }}}~}~}~}}~~}~~}~}}}}~}}}~}~}}~}~}}}}}}}}} - ۅ (7 (   +- $ބA¿! ҄#  .   +1 ߄݇ Ԅ̄ʆ' ܄݇5΅φ +ńĄ   "?ք΅2 654567877665543322110001223343334445554210.-,+++,-.//0010/0/./0012110//.8---,+++,-/147:=BFJNQSUVWXXYZ\^00100/\ZZYYZ[\\ZWRMGB>:8654344567787 8899:::;:::;;:;;;<<<;:; <=>?@AAA@??>=>? @AABBBAAA@?@AAB!!!DC! +CBBA@???@@ABAA@@@AAB!!BBA?>=>??@ ! ! !"! A ?@@ !"! ?@ABA BBBCDDDCCCBC BBBAAABBBAA@AB AA@???>>>==<;<;<<===>>>===<=<<<===>=>?>?@?>?>??>>===>>?@AAABABA@@AAABB! !"#"!"#"!"!"!"#$%$###""!! ><95320//.//012468:;<=>?@@AA@? > !"#"!"#$%&%$#$%$#"!!  !BA A@@>=<;;<==>??? =<<;:98765667787654320/-,**))+.15:ADGIIHFB=83/+)(('''((()*+,-.-,*)(&&&'*.27:;<;;:98765443432343456655543434445565554332221234321232121210/000111010 +///000112210/0123434332223454443321210/010111223343432344333233221222145432123223332323334456 77666555444556788899:::9988777889877656533212345666210/ 110/.-,,,---./0 //.--,,,--.-./000//.--,-...--,,+,-./. +///00100//.-,%-./012345567889:;<==>???>>==<<<;;;:::987767666543234332121000//..-./.-,+*))**++,+**)))*)))((('&'''((''&%%%&&'&%&%$#"!  !!!"""#"!"#"!"! !!!""###$$$%%&'()*++,,-,-..//012344566789 +88765455667655433445667788999875433344544332334567665566788998765432100/0/.-,+++,,-..///000101122232122210//..-..///0/01223334567654 566777889::;<;;:::9:988766567876 554455666788899::;;<<<;;:9899:;<;:;::998766656 5544333455666 ! I "%(*,./011122457677889::963/*&!          +    + + + + + + + + +          +                + + +          + +       !   }}~}}~}~}~}~}~}~}}~~}~}~~}~}~}}}~}~}}}~}~}~}~}~}~}~}}}}}}}}}  Yú΅   + +  +# +  -  #D + ܄ՅF   ! +  3   ؈ȄƂDŽ̈́̅+ ۅ܂ۄڄلׅ Ӈ҂фƅDž ,F˅0ԅӂԈфʄń  '"65434455566567787654323234333222100///0122333432110/501357:==<;;;<=>@CEHJKMMLLKLLNOQSTUVWWVUSRQQRRSRRQPPQRSTVWXYYWTOIA;50-,+++,---.../0122334565678899:;;;<;<;<=>?@?>?>?@?@ABBCCDDD"E"""DDCDDDCCBBBABBBCCC!!BA@ !CBA@@?@ ! A ! A@@@ABBCCCBBA@@??@?@ABA@@@???>?@@@A@?@A@?>=<;<=>=>=>?>==<<=<=>?>= >>>??@@ABBBA@AB!"#"#"#"#"#$#$###"! >=;97653211000/ 014689:<=>>??@ !"!"#"###$$%$#"#$%$#"#$##""!!! @@@???@?>=>> ?>>>= <<;:9887789887653321235679:;:9876555678887776 +778899:;;;<;:98 +77765556667676655666766655432110/?01358;>ACEFGHHHFDA<83/-,+,-./000//.-,+)('&'*.26:<===:987665556545455566766655545456565543323232321211000/01010/010/0122233232112234554443445432321210101234343211234455544344433321012333445565676667789888778899::9998999889444543212223344333445566545554455544555432221110/0/.///0/.//0001210//.././/0010//..-..---,-,-..///0/0/..--,-./0234679;=?@ABBBAA@>=<<;:::99 +98887776667656543 2111001110//..//...---...--,++,,,--.-,-.--,++*+*+*)('('&'&%%$$#$#"! ! !"#"!""!! !"!!! !!!"""#$%%&'()*+,,-, +---.//001123221223556 777899::;<;;:988999:::;;<<<;;<;: 9987766565 6667778889898899::;<;;::99:::;;;<;;;::9876777666767676654565433232211011234555666765667889::;;<;::988766554556678899: 9877654332221 +234567766545667888999:;<;: 9877667778776 !!!  +!#%'&%$$# $%')+-.01233455443210//..//013467899851,&!         +  + + + + +    9 +      +         +    +       + + + +      !!    }}}~}~~~}~}~}~}~}}}~~}~~}~}}}~}}}}~}}~}~}~~~}~}~}}~}}}}}}} Yڄބ   ,# # D ݆[  +8) +   " ߆.ńƄ +…,߅ބ؉ֆ ΄τ( + $7ڄۅډ҅΄$ + DŊć"0//...---...///012345544333222100//0123334433321000//./0123345078:;<>?ABDFHKMNOPQQRQQPONNMMOQSVY\^aceffeca`_^\[Y Z[]_`abcdca`]\ZYXXXWVUTRPNKFA=964321112223343232334445 66778899:;;<;<= <<===>??@??>>=<=>??@@?>?@A@?@ ABCCDCCDDEDED"!BA@@@A! !CBBBAABBAAA@??>>>?@@@ ABAA@@? > @A@??>?>=>>>?@??>>>?>=<<<===>??@A @@??>>===>>?@??>>==<;<==<<<;;:;<;<=>>>???@??>>>==<<<;<<==>=<<<==>>>=>??@AAABBABAAA@@?@AABB!"!"#"!"!"#$#$%%$$$#$$%%&&%%$$###$$%$#"A=:7420.-,+++,.1479<=>?@A !"#$#"#$$$%%&&&%%$$$###$#$#"#$#"""!!!""##$$###"!"!! @?>=> !BAA@ +AA@?><;:998999;<=>>=<:98765433344554310/.--./137:;===<;:999887776654566789:::999::98899:::;<;;:99898765654434455655543211123332210120//.../002469;>ADH&'())(&IEA<963210//.-+)'&&'*.38=;;:9887666554565544545654345 +443334455567765544344554433232221110111221 +22333222110/0001121010101000111223221100121234345 +455544433321210001121000/012333222123433322212221112110 112223434543211000111212211101123345566778877766677877677889887 7666553234445655443445545432 22210/.-./001100/./0/00010/./.--,-.-,+,-.-..//000101110/.-,++**)(()+/269;=676654543221210/0/.--...-.-,+*+***)*)*+***))((('('&%%%&&'&%$$##"! !!!""###"""!  !!"!"#"! ! !!"""#"#$%&'())*++,-,-.//0011212#3445667889:::988777899:;;<<;;;<<==>? >=<;::9998887678789899::998899:99989:;:; :::;;;::989878999:9:9:999::;:988789:9876443 22100/./012334322121000/00112223345689:;;<;;;: 999:987654456764779:;=?@ABBCBBA@??>>=<<:876655444567654310.-,,--/0123456789:;=>>?>>>=<;<;::9989:;;;:98765432110  + !"$%')*+,.01234332110012479:<>@AA@@@?>>=<<;:;<>?@ABCBA@?=;97677766545431.*&"       + +  + + + +   + +      + + + + +  ! + +  + + + +      +            +   +         + + + + +  + + +       + !"!     !"#%%&'''&&%%$#"    }}}~}~}~}~}~}~}}~}~~}~}}}~}~}~}}}~}~}}~}~}~}~}~}}~}}}}}}} .4:׆ׄۅ   3 $ 7 +-  +,φ DŽN%  $  +  % =ŅÅŒ  + ۄڇ,ÅƒÆ 'Ȇه ׅˆƅ,…  Ä(/0/.-.../@...--../13468:<<;;<<<=>?@@???@ACFIKLMOQRSTUVXYYZ[\[YVTQOONNOOPQQRSTTUUUVUUSRQPPPQPPOOPRSUUVVWXYZ\]]^]\[YWUSRQRSTUWXZ[\[XUPKFA=96310///01 2234556677788989899::;:;<=<=>>???@?>?>?@ABAB!BBBCCDDEDDDCCCDDDEEEF#FEDC!"!CCB! A BBC!!CCCBB BCD"!!!A  ?>>>? =>?@?>?>=>=<=<==>>>???>===>>>?@@@???>>=<;<<==>>=< ;;;:::;;;<=<; :::;;;<<=>===<<=<==>>===<==>>??@?@A@?@ ?@A +@@A !! !"! !"""###$$#"#"#DDCCCA@=;8521/.-,,,./24679;<<==>??@ !"#"#$#"#$$###""!!! !!"##$%%$$#"!"#"#"#"##"""!" !! @??>==<==>>? ! @?>>=<;;::9:;<=?@BBBA@=;987889: 99876421/.-,--.02469:;;;:9988999:;;:9987898789:;:989:998767899:9876543221121 00//..///00110/.-,4-/1357:=@BCDEFGHHHGD@=:741.+)((*-15:> !!! ;97544456545654543444554565544567654443343212111221212221110121010/012323232123212323432321012322233343433222100112221232343232123234345678989743456 43211233445643 44433322101221110/0///../0100//.///0001121000//..-.--,,,+,--...--,-.-./..--,,,--,,,--./1357899:::;34443323210/0/.-,-.-,+*)('('(''&&%&%$#"! !  + !!"""#"!"##$$$%$$##$$$%%&''(()*+,---.//010/...//012121 +00011245678 9::;;;::989::<<=<;:9878 77766655567889::;;;:987765566544455567778899888776655443 456789:::;;;<=>=>>?>=>=< +;;:9988777876544434445667778778889 8765432210112334 5679:;<==>=<=<<<;:9876777888988999:;<;;:988766655432345667899:;<=>>??@@??>>==<<;;:9887 665543210/0  & !!#%'()*+-./013568:;==;:86554555667789 8877654434445944568:;==>>>??@AABBCBB@?><:753223456789:;;;:862.*&"               + +      + + + + + +!    2  + +  + + + +                + +         + + + + + + +  + + +   ! !"!   !!""!!  +   !!! !"#"!!! & !"""!!! }}}~}~}~}}}~~}~}~}~}~}~}}}~}~}~~}~}}}~}~}}}}}~}~}~}}~}}}}}}} *98¼̄Ԅۄއ% !  "R* ;  %2 !ׄG#  +     ;"Ą‡ÂĄŅ5 +ۅڂم΄%Å  + +*Å܄օʄɄ5Ä & C ))((()*+,./1246:=ABCEGHIIKOV\03688874310/.-T,+++,-.01234455566789:::97h`XQLHFEDEFGIKNPRTTUUUTTTSSRQQPOONNOOPQQRSSTTTUVWXXYZ[\^_aba_^\[YWUSQPPPQR QOKFA<63100112345677789:;<;<;;;<<<=>=<===<<;::999::;<===>>?>=>??@@@AAB ABBAA@@???@AABA +BCCDDCCDDDEDCBAABC! !"!  @?@ ?@ ?? >==> +==>>?@@AA@?>?>=<;<= <;;<<>???>>==>=<<;<=<=>===<<;:;<=<=>>===<=<<<;;:;;;<<==>?@??@@@A@@?@ABBCBBAABBCCBBAAB!!!AA@? @A@@???>>> > ?@@@???  +A@@?>>??@A! !!!""##$##""##$#"""EEDCA>:741/--,,---.02468:;=?@?@ !"!"#"#"#$%$$##"! !!"""! ! !"!!! !"#"""!! ! @@???@@ >=<= !!! >>=<;:98889:;<<=>==<;:9998889::;<<= >>>?@@>=:87545666532101357:<==<::99889:;:9898987665544456789:<=>>>=<<;:::99:98876655667876788999:::976545654321122344433221110/ 000/..-,,++*-+,-/023458;>ACEGHGFC?;62/-.047:=>:988777676655443334445566654567665543444546556677876545554443433344544433212123443332334443332111001233223343456 5554433445 44333444332234543232 +3344433322321210/0/0122333434543322212 2334433443332334432223343432321234345456777889899886555544432345566656787765434455543333210/0/./0121100/010121000//..--,--.//0//..---.///./..--,,-.-./0110/..-,,+*(('()*-/2369;=?@?><;:99::;<<<;;::98888765554 +33321001123210/00111000//...//0/.//..-.-,+, +++**)((()))*)()(((''('('&&%%%$$%$#"#"!""!! !  !!!"!"#"#$#"#$%$$##""! +#$&()*,-./0/011210/.---./0122211/.-,+#***++-.02345677887766789;<==<==>??@A@@?>=<<;;:9988988878787678987666765444579:<=>>>=<<;#<<===<<;:87542112468:;=>>??@@??>=<<=>?@@AAA@@@?>?>=>>>==<;<<=>>>==< +;;;::987776543455678889889'889887776644322210/.-,,,--./02345689:::98777888998765443210///./01345676556678999::;<==<:86543211122110/..--,,---.-,,++*!$&(()*++,.158 d "#%&&&%HB<85210001123568::;::9987766554332234567789:;<<===>?@ABCDEEEDCB@>=;9754322346676530,'"     + + +       + + +  +   +  +  + + + + + + + + + + +  "    +                            + +   +      +  + + + + + + + + +    + +   +  + +  + + + + +    !"#"!  !"! ! ""##$$##"""#"#$#$$$#""!!!   !  +}~}}}~}~}~}~}~}}~}~}~}~}~}~}~~}~}~}}}~}~}~~~}~~~}}}~}~}~}~}~}~}~}~}}~}~}}}}}}} ;ф׆Hþ܅݅! +  $ + + Є !+ څ؉Ӆ ń@   + ( + ++4̄̅ƅ$! ք +Ӈ +̄˄ ąĄ  ؅΄ĄRÅ ˅  358>?@ ?>>===<<;;::9:;<<<===>=>?@ ?? @AABAAA@@A@A BBBCCCDDDCCCBCDDEDC!BBAA !  !!""!  @@??>?> +==<<===  >???>>=>=<==<<<=<=>=<=<;;:99889::;;;::;;<==>>>=<;: 9998899::;:;:9:999::;<<=>=>?@??@@AAABAA@@@?>?@AA@@@?@@AABA@??> >? ?> ?@ !"#$$$##"! ? !!B@>;8531//.//13568:;<=>?@A !"#"!!"""#""#"###$ +#""!! !!""#"!"#"!!  ;::9:;;<;:;<<=>>? ==<;;:9 :;<===<<;:8789:;<<=<; +:98654321102369;==<;:887789888777666777889998887 889:;<<===<<;:;:998767876654343332210///.-,-,-.02468:<>@ACDDDB@>;:888:;:999876655545456 5554433223344565 4443445554443223332323432321232345677898767878889876554432221122234455443232121010/0101222334334432221121223332 +332232243333221234445554555656767788898788998656545676778899886543344556777666555444310/010///012332212100///00010/001234455665432101110001000///...---,+'**))((('&%$$%'),/369=?@ ><;975445678987777654333444332 +11100///00/01000110/.---,,-,+*+*)*)()('&%$%$##"!"!   ! !"#$##$$%%%$###"""!!! !"#%&(+-/02343321012100/..---,+*)))(()+-/245789:::9998 9:<>?ABCCBCBA@@@???@@@??>=<<<;<;:9877788989::;;;:998777888999876767898988764321 2356789::;;<<=<=>>?@ABCCDDDEEFGGGFEEDCCBBAA@@?>>===>=<=0<<;;;:::99:::9876544332211101123467889:::98765443 44432221100/002234 5667788899::;<<;;::99988777676554321110//...---.//0///.- +...///0012"$&),/135665543345 !  ! ?=;:987643233455666758889::;<<>?@AAABCCDEEDCA?=;974210001235678752-(#     +        +     +  + +  + +  + + + + + + + + +  + + +   +                         +   +   + + +      + + + + +   +  + + + + + + + #  + !"#$#"!"!"#$#"# +"!  !!"!  !  }~}}~}~}~}~}~}}}~}~}~}~}~}~}~~}~}}}}}}~}~}~}~}~}~}~}}~}~~~}}~}}}}}}}  ,ۄEĻȆɄن   +*7 ΄ / eΆDŽƄG + # + !    +Ԅ фЄb ؅%Dž +(MN#хͅ7¿Ԅ2„ 4) +$ +89997654321222332210/...--,3-/011345554321/\YUQMKJJKLMMNOOOPPOONMLLMNPQSTVWVVUTSRRSSTUVXYZ[]^^_,``aaa``_]YVROMMLMMLLMNOPQRSROKD=620//000//00123344455544334456789:;<;<<<===< =>>???>>>==>>=<=>?>=>=>??@@ABBCBA@ A @ABCCDCCBB!CBA ! !! @??>=<==>>?@@???>?>=<<==>? ?>?@?>?>>>==<=>=<=<===>>=<;::999::;;<<<;;:9::;;<; +::99877666788898887899::;::9::;;<=<;<=>=> ???>>===<;<;:9:;<=>=>?  !!  ! !!! @ ? !" #""! ;:;=?!"C@>;8630/--..///013579;<=>@@A ! !"#" ###$$$%%%$$##"#$#""!!! !"#"! !  :987655433233456789:;<=>>==<;:988765544455567889:=;;;:::99988899:;<<<;:98776654332110///0358@AABAA?>==<===98765444332345556656655434544455654433443321212343212123455566767888777676667787899988776544323334433343323212122121112233322100/001232345432321 +0001233433323232123212232334543444556555666789898 775565 +66777666556 9998877665 555443300/./010112232121212233221234343323334455566554322100//..--,,+++***+"**))***))(('&%%%$$###$&),048:<==>> <:97655567889876543222111012221012211100//..///000///./.-.--,,+*)*+*)))**++,,+**)(('''(''&&&%$$%%$#"! +  ! !!#$$$# $$%%&&&%%$$#"!"#$%'()*++,-./0012232100///...---,,+*))('&''()*+,-.//024689::998889:;<>@BCDEEEDDCBBA@?@A@@@ABBBA@??>>>==<;<;;:;;;<'===>>>=<;::8876677899:;;;:9865321112357876789:;;<<<=>?@@@AAABBCCCBA@?><;;;<=>?>>>=<<;;:987789:;<==>>=<=<<;:9::9989 8887665667654433445676766554432100/../02578789:;<<= <<;;:::;::998 9:;<<==<<;;: 9987765432 1100//..-,+* +,,./02344544332248<>AEIMRW[^147 +"##"!  +" =;97543445789:$9976543345689:::9888777666778:;<<=>?@AAABCB@>;85313588862.(#         +    +  + + + +  + +  + + + +     +                      + + +    +     + +  + +   + + +  + +       !!!   !!""!  !$&*,047:!"~}}~}~}~}~}~}~}}}~}~}~}~}~~}~}}~}~}}}~}~}}~}~~}~}~}~}~~~}}~}}}}}}}~ BB¼؄     +      P -݇7" ҅ˆńĂÅ!   +! +   +    ] + Ն͆Ʉ2 ń +ل҅ +ʄ$؅ć͆ԅц9ƅȅZ5310100011000/010/0/0123433222100_^]\[[]_aba_][YXWVUTTSTTUVUUVVXXYXW5XYZ[\]]^^__^^][XVSQNLKKKLMNPQRSUVUTQMGB<841/--,-..///0122334455666555444555667789 ::;<<<===<<<;<=<==>>>=>?@A@?>?> +===<<;;<<<=>?@ ?@@AA@@@ABBCB! A >> A@?@?>= +>??@???>>>=<;<==>?>==<=>?@@@???>==<<;:9:;;<==>==<<;<=>=<;<;<<===<;:;:9:98889:;<;;;:9:9:;:;<=<;<=<;<=>>>?>  !"! ! ? !!! @ ! <;::;<>@ABCBA?=;86420/. /13579;<=>?? !"""##$#""!!!" +##$$$%%$$$#"#$#"! !"#"!!!"""! !"! =;:9987889:;<<<==>==;987665545456778899:;;;::99899887655666776654322112468:<=<;::998789::;;<;;:999:;::99::;<<=<;:98767899:99987665665554323 222111000//0/.-,-.0134 5679::;<>?>776655544333433344454545543443321112223332101232343 222333223334432211123456787676767876667788988766554343444343232321 +2233322333212112223434545444543210101232123210/0 1100/00011222323445556667677788898888 77655544456776543201012222111011122344323211122233432323454345554333210//..-,,+*)('&%%$###$%'*.158:;<<===<;::9987656677788998767654321210/.-,+,,,---,+*)*+**))()('((''&&&'&%$#$#"!!   ! +""###$$$##$##"""!!! !!!""#$%&''(()*+,-/01211100//...--,+**))(((''&'()+-/02344567789: 987779;=?ACDCBBAAA@??@@AABCBBBAAA@@@??@@@?>=<<<;:::;:98 9998877665554567889:989:;;<<===>?@@AAA@?>>>=<;:87544455677765 666789:;<<<=<;:987667899:9::;;<;;<<<===< ===>==<<;;:9:;;<;:9 :99889:;<=>>??>>==>>??>>=<<<;;;:998876543455665544456667%9;<=@BCFIKLMNMNOOPQRTV-147:<<<;:98876!==>>?@BEGHGFDB@?=<;;::9887776667789: +99889:;;<=>"===;98631.-,--./023567641-)%!      + + + +  +    +  +  + + + +    + +                + + +      +  + + +  + +  + +   + +  +        !  + !!"!!  !  + !"##$%%&')+-"$#""!! ~}}}~}~}~}}}}~}~}~}~~}}}~}~}~}}}}~}~}~}~}}}}}}}}}~ :WĻ߄߈$$ %'K   = +?ل!ބׄ + +ڄ̄ʅńĆłƄ#   *8    +/(# $ ݅ 32օ΅̇87!Մ͆ʅ„Bý3O0//..//01 000/...//001011122233445443210/-VRPNMMMNPRUWYYZZ[[[ZZYFXXYYZ[[\.[ZYXWVVUUVWY[\]]\[[ZZYYYZZ[\\[ZWTQMJHFDDEHJMOQSUWXXWSMF?940.-./0 +//.//01122345677766678988999:9 :;;<<;;<==>?>>==<=>>@@A@@@???@AABBAA@?@@??>=< +==>>===<==>???>>??@ABAB! AAA @? @??>>>===<<=<;:;<=>?>>?@@@AA A @? >>=<<<;;;:989 +88899:;<<<=>==>>=>= >>>??>=<;:9:;;;<;:;<;:98767899:;;<;<;:9:999:;;<<===<;99898999888987665 67778889:;<=>=<=>?? ! !"!"! !! !!! ! !3 <:85568;=@A@?><;:987544321100///../0369<>??? !"!"#$#"#$#"#$#$##"!! !"! """###"!!!""#"! !!"##""! ?=;:887765 678:;;:9876554 56778777664321 235677789:::9 8876655566789: 9865432221232 33344332110/ 0112233345679:::999:::99888777888999:;:9887656544434323344432210//0001 222111000/.-0../012345544321000//01345789::;<==87655443454323334455545656565444334332123444323234323444332323(2100011233322211222344555667788999888777676778898788877765434343221112101232333444544334445654343210100/.//0011223212322100///00112344432211122343234344556767778876543445567678 54433221112 111222332 3332221112232321223234544433432323445556 7766544456544343221100//.-,+*))(('&%$$$%%%&'(+.2468899:;;<;<;:9876567888765544454344322110/.-,+*+ *+++,,--,+*)()('& %$$%%%&&&%$#"!   !!   ! !"#$$%$$%$#"#$%&'(*+,-.../00100//...--,,,++*)((()(('''(+*+,,-../01234567899:;<=>>???>>>==<<===>?@ACDCDCCCBCDEEEDDCBAABAA@@?@@A@@??>>>===<<;':9987778777899::98765566789:;<<;;:988776789:;:::;;:::989:;<=>==<=<==>>=<:74201234555666789:<=>=<<;:9 :;<=>?@ABBBAA@??>>==<; +::;<>>>=<<;<<=>=<:987789:;<==>??@ABCDEFEDDCCDEDDEEEDCCBCDEFGGGFEEDBA@@@ABCCDEF#"B@?>==>?@ !"#%&%$ %&&''(()**+,-.1368::98765443211154579<<;:;;;98877766789:;<<<===<"===<:8642/-+)((()+-/12356641,&!      +  + +   + + + + +    + +  +                      +   + + + + + + +  + + +   + +  !!!  !!!   +    +  + + +  "! ~}~}}}~}~}~}~}}}~}~~}~}}}~}}}}}}~}~}~}}~}~}}}}}}}~}~ &v¸ބ0  /!܄$ 8 +8   +҅҄(*$Ņń)քׄńDžDž=  - & > +,   + ݅<ޅ܅ׄ#˄ ) +F„݅ ݄߄&ĄƄ͆ׄV   34 5566543210//0101123334%33210.ZVRNKJJKLNPSVYZZZYXWWXXXWWVTSRQP$QQRRRSTUVWXYZ[[ZYXWWWVVVUUUVVVUSQOLIHIIKLNPRTUVUQJC;40,*)*++,--../01223445556678787776667778899:999:;;<;<=<=>?@?>?@??>=>>>==<;:;<<=>===>>??@ABC BA@@@AABBABA@?>>>??>>=>>>=>=>>??>>=>=<=>=>=>==<<<==>>??@@@?>>=>=<<;;:;: ;;<<<;;;:::9 +:::;<<==<<=>??@@@?>>==<;<;:9:9876655455567778999:::988777889:9887767877889::9876787677789::;;;<= +!! @? >= !  !"!5 !! =;865568=;:98654321/.-,+++,-/257:<>?? !"###""!"#"##"""!" +!!! !!""#$$$%%$$$##"""!! !"###"!!! ! "%'**)&"?<87543222123 456778887764323344455689:<<<;::99: :::998887877654543210//..---,,--..-,+*+,---,,+*+,,-.//000//.---./022332210/.,+***+,.0123433221234322100///.//0010/.--,,+ ,-./02456765543211012479:;<:9987655456543454545 6677665432111223212333432323210011223323455677876767876777666567 65554443322232343233432223321232343433344454343210/001223343321100//012122333432 +11122232223211222323 +2233444333454445678999876545455444322110121 2110///012345444344445432343444555456 55544334443321233222110//..-.-, +++***))(('&%$&).25665556789:;:9::;;;:987665456765455655444545433222322211000//...//000/.-,+*)* +++***)(('('(''&&&%%&%$#"#"! !  !"##$$%$%$#$$%&''(''&&&'()+,-.../"000///..-,,**)'&&&'()+,-./12334556566789:;<=>>??@AAABBBABBBAA@? +@@ABBBAA@@?>=<;:;;<<<=<<<;;;:::99887776654345455566789;<==<<;;:99899;<;<=>>><;<===>>==<<;::9::;::875432100//012345566789:;;<==<;9765444566789:<=>?@AABABA@?>???@ AA@@>=;:8765 +678899::;<=<;::::;:::;;;  !"# $'),02333211012!:9876789;=>@BDDDCCAA@@@??=<986543234456789:;<=<<;;:::9987531.,)'&&&'()*,-/1342/)#   +     + + + + + + + + + + +  +    + + +     + +                                     + + +     + + + + + + +     + + +           + +        + ~}}}~}~}}}~}~}~}~~}~}~}}~}~}~}}}}~}}~}~}}~}}}}}}~}~}~ $&LŸ҅,E ,#   + :  +k Ԅ¿W % 0"  + +%  " :*? 8=ن υBT3ԄބԄLJ̄ɄȀ& 4566654321101232112233455666777665544430\VPLJJJKLNQTY^cgkmmkiea^\ZXVTSRQQPPOPQQRRSTUUUVWYZ[\\[[ZYYXWWVUTTSSTTVWX---ZYWVUVWXXYYVND:2,)(()**+++,++* +,--../001234545 667776655456789:;::9998899:::999:99::;<<==<<<;;<= +>>===<<<;;<=>>>==<<;<;:::;<===>>???>??@@ABCCDCCBBA@?@@@??>??@@@?>>==<==>=<<<=>>??>>==<;;<<=>=<<===>>>>= +<<=<<<;<<<=<=<;<=<;<===>??@?@ ?>>==>>==<<;<=<;<<==<;;;::; :::;;<<<;:99:9899::999876554445678787888987 +6542111233434567789:;;<<;;:;<<<;;:987 88999:::;;;:;;<<<=> !"!  !"!! =<==<<=>? !!! !8 A@?>=:864201269;=>?>>>=<;:87654320/.-,,-.0358:<=> !!!"!"#"#"! ""!!! !!! !""##"!!   U ! = "$')*)(&#B><9877654210///0011223332112334568:<<<;97420//0234556556789:::;: 99:::;:9989:998877766678776567656665432.3344320/.///000111000//..-,,+++,,,--.//0/.-++*)*+,-,,,+*)()((''&%$%&&'''()*,.0222110/./...--,,++,,,-./012345788:/9887766677654443332123589:<<<;:9888776655445565455565545 444344554432 3445676556334443323334443210 111222333432121232321223456778889988776655544555666767678 7766555667654332343343221112 +33221000//0123444555654323223344455543332123232 +5422101 23445443323455667677766778877654 32112345567778877666778878887765445667766543445 44432311123336555433343445554434545667655455677887656665433220122322210/..-. --...-,,++**)0('&%%$#""! "&+279:97654446799:::;<<==<;;99898765543456565554433322233445 66543210//..-,++*+*)*+**)('('('('&%&%$#$##"!"! !!   !!!""# """!!""##$%&%$#! !"$%&'()**++,-.//0110///010/..--,,,-./1134455678 999::;<<=>>=> ?@@ABCDDDCBBA@AA@??>><;::999:;:;:;;<=>>=<;:999: +;;;<;;::998788776789:9:998899::;;;<<=<;<;<;::9876656=789:<==<;96420//../01344544455667789::;<=>>??@@@??>><;975544434678:<>@AAABA@?>>=<;::;;<===>?  >=<;;;::9899:;<>==<;;:999876 !!"###"###"!  !$'*-/0100/013 & <:878889:;=@EJOSUVTROKGDA?<;98654216223445679;<>???>>>=<;98653322233320/../023441+$ + + +  + +         + + + + +   +    +                                   + +    + + + +     + +  + + + +   +    + +  + + + + + + + + ~}~}}}~}}}~}~}~~}~}}}~}~}~}~}}~}~}~}~~~}~}~}~~~}}~}~}~}}~}}}}}}~}~}~ 5܄CºՅ +  >م ۅڅ,@   l߄"Ȅp +( E +  (2%' + + %߄J3Ԅʆ7 +P Ԅ)߄7Ѕ˄Ӈτ ͅ +Ȅ&  (233454433323334456 54322233454321/YUSRSSUVXZ\]\[YWUTTSSSRQONOPQRSSRRQP QRSTUVVWXXYZXVSPNLKJIKMOQQQPONMNORVXYVPF=50.-,,+*++,-.//011223334 33223344578898776678 766677788989 :;;<<<=<<<;;<;:;;;:9:;:;<<<==<=<;<=>>??@??>>???> ??@@??>==>=<;<=>>?>=<=<==>>>=<=<;;;::;;;: +;;<<<;;::9899::;;<=>?>  @?>=<<;:9989 +:::99988778777899989877656 777655544434544334456776654433323334 556677766676778878789:98999::9:;< ===>>>>>?@ !  !"!M <;:999:;=> !!"""!!! @><:875322357:<=>?? ??>=<:976432210..--./13579;=> !"#$#$##""!"!!!  ! < >=<;;<=?A!"#$%&&&$#B>;97789:98764321234454433323579:;<<;:97655544345689:;;;:9998887899:::;:98877678 +998877667787655444566543323445 +4443211011210111222343322110//...---,,-,+*)((''&%%$$$%%')+-/1210/.-.//02356789::998789:<=? +888776656555444566654334543454565432101 +22110//0012323212122333445678777678899876567876543212233444333223334543211001 21110001112234333445454333443444332212322110//...///01232100/ 001122233323345556676788877876654567777667776654345112 33434446543222334433344567876765 +44332100//0101221110/0//.-,+*)(''&$"!!#'+058:999887655544568:;98 +876544333234,3321100011223332233455677766655443322333210.-./ +.--,,+++**+*)('&'('('&&&%%%$#"#"! ""###""!!  !!!" +!"""###$$%&%$#! "%(*+,-./0233443210123457655545567899::;:9:;<>??AABCDDCCBBAB +AAA@?>=<<<;:9:;;:::; +:998777899: ;<=>???>>==>=<;:998767889:;;<;:9:; +:::9998889:;:9998765443221012334556789 +:;<<==>?@@AB A@@?>=<:87776789:;<=> !!"! =<<<=>>;:9877656565 !"###$$# """!!! !  !#&*-012 0.,++,./011  %=;;;<=>>>?@ACDFGFDA?==<<;;97543>21000/000123456889:;<<<;:97520.-,,+,,-.//.-+*))*-0230+#        + 3  +  + + +    + +    + +                            +    +   +     + + +    + + +  +  +  !!"###"""!!  + + +    + ~}}}}~}}}~}~}~}~}~}~}~}}}~}}}}~}}~}~}~}~}~~}}}~}~}}~}~}}}}}}~}~}~ +8.ƿB GL>"  N  t &*Ʉ@ N &,-0' ! ?ބ ڄ1¿ ۄDŽ36 +5ևۇڅօ ׅׄւׄׄ˄̀4-.0121235567 6544334443221/YUPMJHHIJLNOPQRSRQONLKLKJIJKLLMMMNOOPRSUWXYYYXWUTROLJIHHGHHIJJKLMNPQOJB;62/-,+++*))**+,-./00//..//01223332345456789988776777888767889989:98989:9 ::;;;<<==>=>==>>? >>===<;;;<<=>?>=<=<;<=<;<==<<==>>==<<<==>>===<=>?>=<;:9::;;::999899::; ::9989998889:9:;<;< ===>>>=<;;:9988777877677888999876655433445565434555454433445665543444567766778876787776544433345678999887678987776778878789:9:99887889:99989998999:;==>>===> !""!!!  !"""##""! ==> !3 =;:9987655568:<> !! ??>==<;:87654320-*)*.27:> !""#$#$#$#"##"! ;;;<8;;<=> A@@???@BD#$%&&%$E@><;::9888766566788876432234678!7778899;=?@AAABBCCBA?<:7655666789:9:;::99899:989::;:::9898776665 44455667778898776656555443 456787655443321012233221222110/.-',++*('''(+.1455420/.../1479<>???><;;:9989::;;;<==>?@  76554544433345434343456777656667766545 +444344433321122333212323 +21011222332111223210101 223344556787876767666765433221 +23433222334345434544554432233344432345 44556665544323444332221012432210//0100//01110/.--,-./ +0122333444344567778889898889998776654322346778887898655421212233 +566777665543233345#433233566777889::;;;:::;;<;:9888766554344332100/.-,,-./01 +22333221110/...-../0...--,,++**)('&&%$$&(,158:<<=<;:998765434468:;8876654333432101210/.//0///..---,,--.-,,+,,,++**)('&'(''&'&&%$#"!"##$$$##"! +""##$$$##"!  !!"##$$##"#$%&3%$" 753102!%(*,-/022322110/.-,++-.135788899:;;:;<=>>?@@ABBCDEFFEDDDC"BBBAA@@ACDEEDDCA@???>>>==<:99888998 9::99:;<=> +?@@AA@?>=<:;;;<<=<;:8 999:;=>>>?>=;::99::;<<<;:;:988778988877667889998776"5544433321012334334455567778877888989 +89:<>?@???>$?@ACDFGHIIIHFDB@?=;:9876677889::;<<<=>? !"#"!!! ?> ==<;;::;  7778889987 !"!""!!  "%),.000123320-*)**+,986544568:<=>?@@?=<;987654320//.//..//0124579:;;;::876420/.---,,,++*)()*+,,,)%       + + + +     +         + +                     + + +                    + +  +      + + + +  + 3 + +    !"#"!    & + + + + + + +   + + +   + ~}}}}~}~}}}~}~}~}~}~}~}~}}}~}}}}~}~}~}~}~}~}~}~}~}}~}}}|}}}~}~}~~}}~ „!Jöȅڄۅ ۅކ + 2  +'F  + +R K$a݄ "  ! + 0'߄ +߇ ۆ1eބ8ڄ ͇DžG҇35-.013454 568999876543445443321^ZWSOMKJIJJKKKJ#IHGFFFGHIIJJKLNOPPNKIGFGHIIJKKLMNOPQ RSTSRPOMLJIHGHIJKLMOQQOIA92,)('()*++,,-./01221011122334445556677676567678987 +8887766766789:9:;;::;::;:::;:;<=<=<=>=<===<;<=<;<;<<===<<=<=<;:;:;::999:989:;<=?>==<<<==>==<;;::989998989887656765 667788877666767899987776677899:::;;<;<:98765667899:989:;:9:;<==<==>? ! !  !"#"!!""##$9#"! =<:987666789;;<==>??@@ A@><:876532100248:=? !!""#$%$$#"""#$#"#$##"""!  !"! ""##"!A?><;:987654565678:;;;:9876778:;<>?@ABCCDEFF#$ #FEB@=:765 667899::989:99::9:989:;:9887889:;;987665677899:9::998787677665667876545654433344554332232210///..-,++*))(()*,.1479;<=>>>==<;<;98778899::;<<7765433344554343454545543 +22111222334323433223232223232110112322211101122122233344343344567898765443444543232322234554445433344566554321234545654543334443210100//00012334443343210121 22334456654345676665678899:::98776655577667 +542112456788 653211345665554432223343234544433344544433233434455656667778899::;;<<===<;:::987765432210//..-...//012121100/0/ 000//..--,++* +)'''),04789:::;;::98887778899987 665554445554434322111000/./0/...---,+,+*)))(('&%&&&'&'&%$#"! !! !!""!!  !!!"!"""!!" ###""!  "$&')+.14578764321/..//01234567889::;;:;;;<<=>?ABBBAA@@@AABCDDEFEDCCBBAA@?==<<<;::98789:;<=>?@@ABDEEDBA@??>=<;:;<==<<;::;;<<<==<<;<<=>>?>>=<<;:::;:989 8998876544456567 +66544333443456789::;;<===>=;:9::;;<<===>>=<;:::9 +888:" ԉ9ޅ="    +  4(J3΄¿ ') ه݅݉ ݄ۅHކ ބ܆Ą %56543110122344567887654443 10]ZVRONMMLLKLLLKKKJIHIIKLNNOPQRRQPPONMMLMMNOQRSTSRPNLJIHHHIJKLMLMMJE>5.)&&''(()*+,--...-.-,,,+++*+-./01234567776545567767876667778788999:9:::998766677789:;::999::;:999:;<;<;<;<=<;:::;;<;:999:::;< ;;<<<==>??>=<=<;:;< +=<;:9989998989 ::;;;::99: ;;<;;;:::;;;:9889:;<<==> ??@@A@?>?@A@??>=<;::9876667765432112335678765431100112234556778998876543455566789:;<<<;;:87655654345 6777666789: 998877789::; <=>>>=<;<===>> !"! ""##$$%%%$%$#$%%&&%%$#""!! ?>=<;:987889:;;<<<;:97531//025:>@B!"#$%$##"#$#"#"!! !!"3! <!"$%%$#"! ?><;:9876543222344432112233344556778:;=?@ABCE DCCBAA@@@A@?>=;::99876556678899:::;:9:9988999:;: 98777889::::;;<;;:::9988877788999:9899988999::;<<<;;:9899:::;;:::99887677788876655433234F33211000/-,*(&%$$%'*-048;===<<;<=>?>>>==>??>=<;<<<===;:8876543223579:;654556655443432344565544455566654434 555655543210 123323344433323454321011121112121221112334 33233344334445432101233221232343454565432233434554434565544454543 2223344332221 223455665654344431012345434555456766 77799865323456655422112235321223444566655565667776 +5544333455654345444555678876787 89:;;;:999887655210!10/.,+**+,-./011223332211100///00100/0 /...//00012211100/0/..-,,,-/14688987 87766556677676543210/././0/0/. +--,,,++,,,+***))()(''&%&%$ +%%&&'&&%%$#$ ##"""!!  +  !!"""!! !"!"! !#&),/13567887776531/.- ,-.146899:;:;;<<=>?>>>==<;;:9:;<>?@A@?>=<;:;;<<=<;:::;<==>?@@@?@ ???>>>=<<;;<;<=> ???>>==>???>>= <;;:::;;;:;<<=>==<;98664433444545554322232210//../01223334578:<>?@AAA@@?@?=<<;<3=>>=<;:987654322211013579<>@BDEGHHGGGFEEDC!@><;::998 7778 !"#"! 7666554433211234344556767898 +8876554455677788:=!%*.1210.-,,--../01234 !!!@=;98789::;;<;;;<<;;:988776543210///01346789: +97532100/.-,+**)))***(%!   +             +  + +  +     + +                             + +        + + + + +  +    + +         + + +      ~}}}}}~}}~}~}~}~}}~}~}}~}}}~}}}~}}}~~~}~}~}}~}}}}}}~}~}~}~}~}~ Y/ȾԅֈׂՄӅބ +( B(  >A :4؄قڄ @> ՆԂՄ`(5 '1 +  +  2 +-ڄۆ؄Ʉ,>4Å Ȅ ӄ4 ބ  ބֆ҅ӆ0¿ÄD+6520...0223445666777665554320.ZWTQOMLKJJKKKJKJIJJLMLLMNNOON.OOPQQQRRRQPNLJHGFFGGHIJKMNOPPOONNMNNMLHC<60,)'&'(()**+,+,- ,,+++,-./0012343444543344456787667789::9989:9898 9:;;;<<;;::9:;<<<;:;<<=<<;;:99:;;<<=<<;;;:9:;<;;:::;;;<<<;;;<=>?>=<;;;:9:;:;:9:998899:9:98889:99::9:::99877877889::;<=>= >>? ???@@AAB A@?>==>>>?@ABA BBBAA@@?>===<;;::999:::99765443 +211100//.-,+*+,./0011123456677889::;;;<<==<<;;:975321010124567889::;<<;;:9998887654332223334445556789::;;;<;;<<=>>>?  !"#$###""!"#$%$#"! >>>==<;:9888776543321000159=@!!"!"#"#"#")!! !!""!! =>?!#$%$"@;8543455666554434566779:<==>@ACE#""!AA@ ?>>=<;::989:;;<;;::9:;;=>???> +=<<;:998889:;<=>===<;;:9989::;:;:;:999::;;:::;;<;:9::;::99:89::;:9::;;;;::9989998999:99887776543233444345554433321/.-,+**++,-/248;=?@AA@?>=<<<=?@AA@=953112334457:=@BC! 87655666776776655565 66777654434556566788776532100//0 1122332210112323434343212323432212223332211223232321234343432223334545454545 4443322123454543234556678887776 7776677787878889878 766655566767877665456444544334567 665667789:9888776654566656789878999876543 210001110/..-/011232121100/00011101211222345667877765456567654432210/01000110/./ ..-.---,,++**+*)(()(('''&%$%$#"""!!!"!   !"!! !!!"$&),.0134456778887665 66677789::;;<;<=>?>?>>>=>>??@@AAABBBA@>>==<; <<<=>>???@@@?>=>?@A@@@??@?>=>=<;:9998877678999::;:9987654432112 334433322111011222111233455789:::8889:<=>?>=<;;:998776556788988765310/../0112101357:<>?@@@ ;:998877767 !   776667888 8878+765432111233569 !""!! ==?!%*,//..--./0012345677<<;:9877789:;;;<=<<;;:9877654321223456$420/-,+*)))*++,--...--,,++*($         + +    + + +              + +     +                               + + + + + +    +    +       +  +  ~}}}}}~}}~}~}~}~}~}~}~~}~}~}~}~}~}~}}}}~}}~}~}}}~~}~}~}}}}}}~}~}~}~}~}~ /Jʺ5ӄͅ $ N6 C݄ޅ +  +*/ڄ RۆÄ?  D + ) +0  +#*& $ۆ܅քń + :ʄ̆C߆"τƅ'݄U 9;2.,++,.13444334456676542^XSOLKKL +KLMNPQQOMJIJKLM NOPQRTUVVWXXY%XVTROJFCA@BDFHIKLLMMNPQRSSTTSRQLG?5-(&'()*+***)))*+,-./0110/.../000112101234544323456777678767898989889::;:9::;;;<<<==<<<;::99::;;:9:9:;:;<;:98899:9:9:;<=>>>?>>=<<==>?@ AA@@??>==<;:;:989: 999877788877678787899:9876767788989:;<=>?@ >???@AA @@AA@ <<;;;<<<;::99876553223445678:;<==;:89:; <<;<=>?@@A@@BCCCBAAA@AA@@?>=>>=<;:9887766678778778 76543223345678 9:;;< !"##$$$%$#"!  !"#$$%%%&%$$#$#"#"! =:877788876531025:?!#$%&%%%$$##"#$#"##$%%%$$%$$#"! 0>>?A"$'((%C>:75321233443344455677766678:=>ABE#$$%$#"! @?>>>??@@??><;:989:;<==>?>>=;::9:::99888:;==;::98899:;;<;:999:;;:9:;9878;:;; :9877787889 8876654455665444332123210/-.8-+*)()+/5;>???>=<;;<===;:86433345678:;=>ADHK&'&&&%%$$"! 654566545432111223456554432210121210001122322100112233444333433434433222123232321212332323210123233223 44344566654345432223455544333443322123 21001233234555667776655566654334433211011214455544343323344554433456678876555677877888998 +766544334456677789:97677866764 54422111222334544334567987788987765455566787 8887778889878765545 432211000112100/ 01112233322122322212100///0111000101 00011223445554544432223344567655432211223 45788876656665545654321 +22110//.../.-,,,---. ///...--,++*+ **)))((''&%%$#$ #""!!"""###"!!! !  !   !  "&)-034665432232211122334456789:988899: +;<<===<<<;:;;<==>>?@A@?>=<<<;;;:;;<<<;;;<<<=?@ABBA@?>==<<=<<<=>?@ABABBAA@ ??>>=<;;:;:9887665456678889;;;98754333567877876543210112221100//0134556789:;<=<<;:989:=@CDDCB@?=<6;;;:987643210.--.///.-,*)((()))()***)*++,,-/159;=>??88789 !"! +  ! 388877655566778 #$%%$$#""! ?A"&+.//.--./12456789:;86 +!"""! ><97667789:<>@@@?>==>??>><;:998887#66555455689::;;<=>>=:852.+(%%%&'()*+,-.-)$  +      + +  +  + +       + +      +      ! "$ + +                                          + + + +     + +   +   +  +       + +  ~}}}}}~}~}~}}~}~}~}~}~}~}~}~}~}~}~}~}~}~}}~}}~}~}~}~}~}~}~}~}~}}}}}}~}~}~~}~}~ ų6҄хB)  + +)   b  ̄, +P  +7   V7/ ؄Մ̈́ɄÄ  bτ ++$ՄфɊDŽG* = +2356787654321/.XTSRRRQPNMMLLMMNNMMLKJIJJKKL)KKKLMMNNNOPRTVX[]024554da][YVRNIFEEGHIIJJKLMNOQSUWWUPH>3*%#"##$%&&''()**++,---.//0/01232111212223322123334565678 999::9998777898989:;:;:;<;:9899:9:;<<==>=<;:::;::;<=>>==<=>=>>=<<<;;;::;::;;::98776765 4433223345567656765677899::9:;<<=> ?>=<= <<=?!$%&'&%%$###""CBA?>=;96530.,+*)*+-.02346654210/.-,,,-.-.-.-,-..//./0///.--,,++*))((()**)))*+,,---/013579:;;;::;:9766555678899::;;;<== !!!"""###$$%&&'&'()))**)))((('''&&%%$###"!!  !!"""#"! !)"""###$$%$$" =9766788876556:>!"#$%%%$$$%%&%%$$###$##"!  !!!""##""!! +!!"!!  !!""##$%%#C>;8654322334443456789;=?ACDEF###EEE"##"!@?>>=<;:::;<=  ;;<=<;;:;;<<<;;::99899::;;<<=<;;:::; :::998899:; ::998999::;999::::99887654322110123232:1110110/.-,*)'&&&'*/37:::9877666778899988775559?GO*+++*))('&%$"! 87667776543212221222343212321112232234543234 333221222323444332323232334432221 0001100///000123212323234344433321234 32211223343334445543222454333557887665678787889:9865567898866554568889:9887677876654 3210111234443345456777898776555678889898787655432343211100/001232322232121 0011100//000121233456545454543334454543322101 222110///.-,,+++,+*+*)(''&&%&%$#"!"!   !"!!! !"$&)*,./00110/.-,,,-.012111245567889:98899:<===<;:998 :;<>?@AA@?>=>=<;<<==<; <<=>??@@@AABAAA@@???@??>==< ;:9:::9998 99:::;;:9877789 888999876544333433455543332210/..-./02345667789:<>@BBBA@@??>=<;:::<>?>=< ;:98754320.-,+*)( )*+-.1369=AD#$$%%%$#"! 989998 !""#"!!! !"$%&&&%$###""!!!  !   !!! *7 "$&()))(&%$###$&),0344322467877656654321:9899:9:;;<=>>==<:97767679;=?!#$%%%FC@>;72.*'%%&'(''()*+,..,)"       + +     +  + + + + + +  + + + +       + + +   +     +  !"( + +                   +           + +  +   +        +  + +  +  + + + +  +   +  ~}~}}}}}~}~}~}}~}~}~~~}}}~}~}~}~}~}~}~}~}~}~}}}}~}~}}~}~}~}~}~}~}~}~}~}}}}}}}~}~~}~ ^¿˺%ʄ΅87#&܄ !Aò&.= # + w 1  ]   < +,(0Ѕ8 +8̇ˀ#ńN.ÿ,   %010/.-,TQNLKKKLNPSUVVUSRQQPPPONMNNMMLKELMOQRUX\_``a`00234567664fc_\ZZYYXWTQNLLMMNNNOOONNNOPQRRSTVVUOH?5.)'&&%&&&'()*+,--,,+*+,-.../..//0//01001112212223323433221223322333445666554445456788878898899989:989:;<;;:::9:9:9::;:9988777889998879:; +:9988898878999:9878877889:;<<=>??@A @@@??>==<;<;;::;;;:;<===<;:9:::;<==<;:98767776765665 43332232223456778765665567876566789:;<<===<<<=<;;:::;%97558=!$')*++**)(('&%$#""!A@>;74/,(%$#"!"#$%&&&%%%&&&%%$%&'('&%$$$%&(()))**+*+(,-./02346779876420//1358:<>@BB"##$$%%%&%$%&''())*+,-...-,,+*)(((''(())**++*)*)(''&&%$#"!   ""#"# """!! !"#$$#!>:7422234579;> "##$%$%$#$# """!! ?>=<<<  !"#$$$#""B?=;:8766655432332235678:<>@BDEDCA@>>=>>>=<;:9:;<==<;:8 7665569<===<<<<<<;;:::;<<=<;:;<;;:;:;;;9: :999:;;: ;<<<:: ::9776 556677889887654345665543210/.-, +*++-/012345567898 9:;<<>@EK),- ,*OLIHI%'('&$#"! 987766654445554 3321112334434443344322122334323 22100122212343434543 4445544344454 33322112333234433211223323332223332221122112110001211000/010112212322233432345433223344321 01122233344456545433234 333444555433322333345411555545456778789:8877666553100246787889::98899899:;::;66 +554332234432100///012333100012334565678988999:989876543322334322334 333210///12345554433345432212 10///00011221223345667789987654443444545 4443332234344434321100///01110/001233443210///.-.-,+*))(''&''(((''&%&%$$##""##$$$#""! +  !"""!! !$(+./023444544555435676&89::;<>?@??>><;;;<<=<;98899:;<;;<=>>??>=<<<==>>???ABCCDCBA@?>< =>?@@A@@@AACDE!DCBBAA@?>>=<;::;;:876667899987666789:;:9877789::;;<<<;<;:9877666789:::;;:9::;::8765445678:= >>@BDEEDCBA@?>=>==<;;;:;;<===<; :86310.,+++*)()))(()**+.38<> !"""!! !!!""#$##""!!  !"""!!""##$$$%&&'&% $###"""!!""##"!!     !!"#$%%&&%%$&(+.0244554443222345543210422234458;?AAA@>=<;;;<=<;;;<=>=<;:::;=?BDEDCCC!!#$$%$FDA?==<;973/,*)))*+++*)(() *,.-(#  + + + + + + +    +      + + + + +      + + +  +  + + +    +  +  + +         +      +&!&'$""# + +                                         + + +  +     +  +    + +  +  + + + + + +      + + ~}~}}}}}~}~~}~}~}~}~}~}}~~~}~}~}~}~}~}~}~~~}}~}~}~}}}}~}~}~}~}~}~}~}~~}~}~}}}}}}}}~~ I ?Є҄ۄم  Cڅ&#:ʻQ  o*i򀇍 A -+  / 8   Ԅ ̈́$2̅/!ۄքMޅI󀆊8 +"VTRQPPPOONMMNPRTVWVVUUTSRQ PNMLLLMNMMLLKJJIIHIIJKKLMMORW[^_^][YVTSQRSUWXYXWUSQPOOONMNNOPQQRSTSPIA7/*'&&%$$%&(()**+-./000//..-,++*)*,.012110///011212 334445444554 555667766554456789:;;::9:9:;:9:;;:::999:;:::9:::9877789998887765667776567788999:;<===>>?>=<<;;:;:9:;<;::999:::;<;::9998767766787665443323233444565676 5443445545454555443323345567765445689:;::;<< !!#$%&'()*+*)(' (('KF?:4/,+)**)'%#B@?AC#%%&&&'&&%%&%&'''())*"+,,--.01233456679:<>?ADFHIJ%&&''(()**+,--.--,,+*)('&%$$%%$%&&''()*)((''&%%$$$%%&'())***++,-./0110/..-,+,,+*))('&%$$$##"##$%%&&&%%%$$$#"! ;98778:<> !"""###$# +"! >>@ !!"!!!   "#$%&%$" <96433234454433223456654458;=@BD"#$.#EDCBAAABBA@@?>==>??@AA@??>==<<;:989:;<< =<<;;:::;<<=> +;;;< ::;; =<<;;<;;<;;;::;;<;:;<<988787656566788765444332210/-,--./000/012 +3334578:;<=8>?AEL*/24431/-+PKJJKL''()*+,---,*('%$#"!! :86543334543234323211223212322233444334333434544343344454344434323232 1110011221000112123223322212323 444333444555432322111210 +11223344454433454432345434443433345 666777887766878764323456778899899988756787654323332221110/01123433232234555666555444566654 345566778889:;;::999:9:9:::99876543445431/..//011123455665543223334343322101 +2333210012345667789;:9998767656545655433343432233321112223332221234 3321100///...-,++*+*)()('&&'&%$#$#"!   !  #'+.01100///010134667889::998889::98789:;=>>>===<<<;;;:9998876433346789:;<=>??@@@AB +CCCBAAABCCDCB A@@??>>=<;:99898789888765445667778:;=>???@??>>>=<<;<>@BCDCCDDC DDCBBA@@@AABAA@?>=>>?@BCEEDCBA?>=<;<=<<;;:;;;:8631/-+*)(#)*+,,-.012344569< !###$$##"!!!"""##$##""!! 6677877 !"!!"!"#"! !   !!!"""##$% &&'''()*++-.01 +00.,*)*-15765320]=;:9876 789;=>??>=>>>=<; :;<===<;:9/::;<<<;;;>>=<::9889;<<=;:753110/-,++*+++**+,+(#  + +     + #" + !     + +  + + + + + +               $(%$#$$ +                                 + + + + +     + + + +  + +   +  + +            + +    !"! ?}}}}}}~}|}~~}~}~}~}~}~}~}~}~}~}~}~}~}}}~}~}~}~}}}}}}}}~}~~} 0ĆÀѾ߅݄1   څن8 ߅ׄх)ƺ  ""φ+ ,"/؅T D   B $   + HF )DŽ'L(¿˅ˆ҅Ѕ$ !܅˅ބ ߄4?BURQPONNNOQRTVXZ[ZXVUSSR SSRPNLKJIIJJKLK&JJIIHHHIJKLNPRUWYYYXWVVUUUTUUVWYZYXWUSRQONNOOPRSSQJ?4+%  !"#$%&&''() +,-/00//.--,+*+*+++,-/00/.-,-./0122333443434445677766788776665455565667899::;;:99:::;;:9::;;:9:9:99::;::9::;:;::;::99:98877766677888766544455678998765445567899::;<;:;:::98899889:;<;:::9:;;;::99898789:;<;::988877788988766556565556667665544454445678:;;;:8766654334565532212221100/."///01234554433210/0135689::;<=> !"#$%&'(*+,-,,,+*)"('&%%JIHC<83/-+*)()('%FB><=AFJ'())*)**++,!+,,,--./0122334678889:<::;>@B#$%&&%%$#"#$%&'(()**)('&%$# $$%&'()*,.//0/.--,+*+++***)))((''((('&%$%&'&%$$#"!  ! !!! <;:9889:<= !  :99< "$&'''&$"!>:753223343445556 7789;=>?ABC"DCCDCCBBBA@?>?@@A @@@AAA >>   ?=<<<=<<=>? >=;:;;<=<:99::;<= ;:89:;<<<;;;<<==>>=;;:;;<<< ;;;::9998876656678765566543211000///00122210011222321'0//0258:<=;978;AIT.14420-*OJGFHKMN'()**+,--..-*'$" 876556567766655432121232110/../../001112233445544344343454332 334443334555434543222334543432223332122332101210111000112211000111233323345454344333223210/ 0122111345432233454 +443337 5666778889;::9987767 66655566677767788767 8877554332343 443334445667676 777654443234566789:9:998889888777665654443321100134!54445566532013577877554432112333210 11211011232 33344332110112334566789:99888987656554543233444333234433210//011000/ 0011233210//.-,,+***)*))('&%%&&&%%&''( '''&&%%%&&&%$#$#"! +  + !! ( #&)+--./03567541/-,+,-02589:;;;:9987899::;<<==<<= <<<;;;<<<=>?@ ?=:86668:<=?@AA@@?@A !!"!" DDCB@>=;:9 ::998877767789:99988877789:<=>><:86420//012345679:<=>?@@A@?>>=:74323469;=?ABCDEFFFEDCD CCBA@?>>>?@@A@?>=>? >=<<;;<<;;;<";:975321/.,++*))**+++,.0124556667789 !!""###"!455667776677  !!"!!  !"!!   !!""#$%%&&%&(+.01221.+('(-379:976443321/]ZXW?=<;::; +<=?ACCB@?=<=>??>>=<;::;;::;:9987655565668:<==<;<<;::865432/-,+*+,--+& + + +       +    !! %"!$&     +     + + + +  +  +   +  + + +         + + +    ! ('#""#$&&  +                                    + + + +  +  +     + +  +%     + +     +1  !!! !"""!BA@@}}}}}}~}|}~}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}}~~~}}~}~}}}~~}}~}~}~}~}}}~}}}}~}}~}~~} ф":İІ/ބ + + + ߂݅ =܈ ڄـļA%6;̆T 1$􃊏, ,  9$ +B   ЈDžB2̈́dۄG!I.%)QQQPOOPPQRSTUTTSRPPPQPONONNMLKKKLNPRRQPMLKJIIIJKLNPQRRST1UUV,-...--,+**))RRSSQKB7-%  !#$&&'''((()*+,--,+***+++,-.-.//011223445554333456667676788789998789:999:9:;:9:;:;:98776667677787766789::;:9:;:989877889:988777889:98788899::98765666555432223343434 555666556655654445666555666556678777655443210 112345678999:999:;<=> !"$%&' ()**++,,++*)****))(&%HEB?;8643210.,+*)'LIGEDDDEGI&'()**+,,--../4..//0012345567:=AEI&'(()))*+,--,+(&$"B@@B"#%&&''&%%$#""!! !!"#$$%%%&&'('''&&%%%$##$$$##$%%%&''(''(())**) +(''())**))('& +%%$##""!!! ! ==>? ! !A@?>=> !"#$$$"! <;:::<= "#$$"! !!!  "#%&''&$"@=:987532111223334566776679;=?@BC"""##$#"DDCBBAABA@?><;:99:;=@ !"! ??>>? !!!   + !! >>=>>>>?>>>>>? ==<;;<<;!:::;<<;::9887778:<>?>=:87789:;<;989: ::;;<===<;:8877766556678988999887654332223345 +43321100112134542110/!001123455678;CQ.24443210/.--.///.-.//0//.-+)'$"! 987765665544433344433344322344454332333454432100/0123434445545444333454 +3344455444343455443323232210123221212345455655545554345554443212 +1222333222123445665544555443336 455544554323476787667789::;;:987877766767654544322100/001234567678 77666554434556778899989 ::;;;:998899:99:::9876655456765445567 864334 556554322345565676543212332211121 2321100011345678999898877655433344543233232112221001110/000///.././0///00/.-,+**)('&% $$%%%&&%%$#"!  !  !  "&*.012357752/-+++,/2589:;;<<<;;: +99899::;;<=<<==>>>=<==>?@ABABCCD ""DCBA@@@ABC"!!!@@??>===<;:8767899:98 +9::98777889:I987788999887765432000124689:<<<===>>?>><:7542101368:=@BCCCBAA@@@AABBBCCDDEDCCCDDEDDCBBAABAA@@@???>>==>@A(@@?=<;:9865543110//-,+**++,--/024678777676  ! 5 !!!"#""!!!  !" +!!   !""##$$%'&'),.123344431.-,-./012356665421^YVSRQQ<<;:::;;;<=>???>><<;;<<<;;:::;<; <=>???=;:98767766556778889:;;;<;986#5,,,-,(! +  + + +   +    ++)&%$##"#$&         +   + + +  + + +  + +       +  + +  + + +        + + + +     ' + +                 +        + +       + + + +    +   +  + + + +  +            +  !"!@><;:;<}~}}}}}~}|}~}~~}~}~}~}~}~}~}~}~}}}~}~}~}~}~}~}~}}~}~}}~}~}~}~~~}}~~~}~}~}}~}~}}}}~}~}}~}~~} ЅчYчӄ'$ +ՄԄۄل݄҆хх߄Eƾ 2 < %끌b *6 2      @L&3KĄ  ΅τ3iօՀ    +0 +QPPONNNOPQRSTVWWXYZZYXUSPNMNML KKLMMMLKKLNPQ +PPOOPRUWWVUVXY-.//0&.-+***TQL@4*# "%(**)(()*+,./000.+*+,,---,,+++***+,-. /01110001234321243455567656777667877788989:9:98999888987778887889:;::98765456565456789:;<=<;:9 888766554566677787677877678987654332321210/.--./0/.../0123455665565 43222358;<;:8765544567788:;<;:98778:;= !!"! ""#$%%&&''(()*")((''&&&%$#ECA>=:96420//.-,+++**)('KFCABD#$&'()))((()*)((()**++,./0235679;@D$%%&&'()*) '&$##""##$%&'&&%$$#"!  !"##$%&''&%%$$%%&%$#$%$$$###"# +$$%%%$$#"!"!!"""#"#$%$$$##"! <<<;<=;;;=>@ >==>? !#%'()*#)('%#"A?=<:9889;>!"$%''(('&%%$$$###"EEDA>:75421/.-./01234456678899::;=@D$%$##DB@?>?@ >>===!"#"!! >>? !""!! !  >=<<===>>> === >=<;=  #>==;975457:;;:99:;=> :75468!===>=<;:9887654456789988776545566778899876555433233444322112(3456665544332221110/.---,-./015=<=>?@AA@@??>=<<<=>??@@@??>>>=>>?@ACDEDDEF$$%>$FDCCDEFFGGHGGGFECBA@?>>>===>>=<;:9887788899::;;::9876667788876 7889::;;;<<=<;<<;974321122233456665567875312247:>@CDDCA@?>=>>?@AABC"!CD"""CBCCCBBBA@??>=>,??@BCDDCB@?>=<<<;:9876420/..-,,-/02578875445 !   6432233456 !    !"#"#"! 5543211100012 !!!"#$$%&(*-/010/01234331`\XTQPPQQQ;;;:9::;<=>?@AABBBA@><:8889989887654 +320///0233456789997654445%-+'  + + +        + + +    +)%#!!#     + +    + +     + + + + +  + +        +  +    + + +  +    !  +               +                + + +      +    +  + + + + +  + + + + +   + + +    + +   +  !"#"!   !"! $ !          + +  + +  ><:977789:}~}}}}}~}|}~~}~}~}~}~}~}~}~}~}~}~}~}}~~~}~}~}~}~}}}~}~}~}~~~}~}~}~}~~~}}~}~}}~}~}~}~}}~~}}}~}}~}}~~~}~}~}~} K-̅ ҈ӄ څ$"Є ք,Մ Ʉ=,ú$& +I&Ȅ>- K.(# *   !3/ +8%_օ+ >Յф<8# $ +6'TSUUVUUTTSSRRSUWYZZYXVUSQPNMLMLLKKKLKLMOQRSTTTSSSTSRRRSTX[\.-,+,,++TPI?6/+)((()*+,---,+,-.-,,+*+***+++**)((())* +,-/001232332212345 44344433444565 66555445567899989876665566767877789:987667789:;::9887876565545566787666789: ;:9877889998987655443334 566676654445654566554 3211222100/011100///.-./ .-,,-..//0010///0023 44568;=?A!"""#""!;::;<!#%'((('&%%$$$#"#$%$%&'&%%%$##""!BBAA?<:75311/.-,+*('&%%%&&&%$$#FEEF$%%&'())*+,++**+,-./0124578:? !"""!!!"#$$$%&''&&&''&&%$#FEDCBA@?>===>>>=<;;::;=?!"#$&'''&%$GEB?<976665542112233345565545566789:;<=@CF$%$##"EDCBA@>=<==>?@@AAA@ ?>=> +>> !  ! +>==<== ;>>     !D  ;:8542359=>;878:;;:999: !! :9:;;:988766677888987665789 8887778886545443345667776655444332221100/.-,+*+.5@O.3565554332210 ///.-,)'%#"! 776 7787766555654343232223344323334454565444322233323454554323 44332334555432323233323321000111221000112334321221110112 11001112343223365 788899:;<;<;:9878766655654343234565544567656677878988899:9: 9877667788765656 54433445545443334 578998765445676543323444332210 +1123322211012 +334555443345568:86545566567 54321122233434344433221000//./.---,,-,+++**)( ''&&%$$#"!!"!!""#$#""! !"! !"$&' &&'&%$#"""!!  "$'),.123468:;;;:::;<=>?@ +???>>>???>?>>>??@@@??>>==<<;::9:;<;;<=>?@@@ABCCBA@AACDEFFEEEFFGH$$GFCAACDEDCBA@AAABBA@?=;;:9998 7655444321 2355788999:;<="<:976555420.---../..---.0369<>? ? >=<::;=?AC!"! ?> ??ACDEEDDCBA@?>=<9766678:<>?@?>>>==<<=>>>=<:8889 +888 !"!!   ! + 445  ! !  !"#$$$# "!! 4443 21123 !"#"$%&(*,.//00//...//000//..//..ZYXXWVUT::;<<<=>-===<;:;;<=>>??>=<;988878899988899875554432100/00123456789 /+%  + + +        ##"#      +  +      +   + +   +   +  + +     +  + +&  + +                                 + + +   + + +  + + +   + + + + + +  +     !"!!  +    + + +  + + +      + + + + + 88999899:}~}}}}~}~}|}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}}~}}~~}~}~}~}}}~~}~}}}~}~}}}~}~}~}~}~}~} ҆*¿ńɄ3̈́0څ2"/!܅ +܅фɅ͆$ͅTYû> + YԄ2   ,7'򆑛 5! Q' 9 5 3чɄDŽ"42ׄG-և{<* +O RPNMMNPQRRSTUWZ]__^[XUROMMLKKKLEMLLLKJJJIHHGGHHIKMOQRSTUVUVUUTSQPPQRTWZ]//..///.\ZWUSRQOKC;3/,+,-..//01112234567875544567654322345666555444321010/.-..//00/00012334568:;;;:98765544554433223345678887778987899:::9989::9876778889;<=>>=<;;:9::998899:987787654567767678788987666788767787666554 3334554443 4556677765443322100/.-,++**++,--.//0 //0112210///.-6,++***+++**))*+,--,+++,-/147;>!"#$$#!  !""#$%&&%%$##"#$%&'&%$%%$$#"!!! ?>=<:86421/-+))'&%$$$%%&&&KJJ$$$%&%%$###$$%%%&''()*+++,,--./01347:;>@BD#$$%&'()*+++, +++**)**)(('&'&&%%$$#"#"#"#"!"#$##""!"#"!!!""# $$$###"""! !G""##$$$##""!!!"##$$%%&%#B>:75556667889:;;:::;<=>?@AABBBAA@@?>=<;:97778:; :9876665543323454)34456789;=?A"#$%&&&%$#"DCBA@@?=<;::;<==>>?>=< +===<<= !   ! = ;:::;<<== !!   ! ;::99:;<==>=<;:98889:< ! :9 865212479; 9865566678 +78999:9986544567 +6656677888765432110/..18D)0689876543.444332221100100/..-,+*))('&$"! 998899876654 33443321124443 +21100/.../012233323434343454 5544456665554343434443211222333432334445 4332223344343323 211233221212210012 33344433322234543232343334443233222122122323455589::;<<<===>>>==<<;;< ;;;:::999: 9987888998766778 +99::987666767654343445554555667876554445677765567776556678767789:9:;:9:987 66554433323 22112334454433232323344456765432322122323221112233221123456654 5678:;;654565667665434543445432210/.-..--,,+*+,,+++**)))((()))('&%&'()((''&%%$##$$%$#"# ""!!! !! +!#%(**)'&%$###""! !!"""!!  !#%&(+-034555678:<>@ABBBA?>>>??@?> ?@ABBAABBBAAB AAA@??>>=;:8C99:;;<<=>@BDFHHHGFECBA@@?=<:999;=@BCCEFGGFFEDDDCBBAA@@?>>???@@@?@@A@ >=;:8754321121123 +45789::;;<=<<;<<=>?><;99::<=???><;:97420/.//12578: >>=<;:::;<>>? !!"! "##""BBAA@@? @@@??>>==<=>>>=<;;< ;:9::;< !!"!!! 766!"#$%&&''&%$##"!! 4  !!!"!  !!!"#"! !"##$$%&&%%$%$##""!! 65 !!"###$%'*,/01112332100111232110/][XUTRRRSSSR865568:;<<=>>==<=>@BDDCA?=<;:;;:::99886420/.--, ./02345678 776544578:6532111.*#       +     %$$ + + + +  +   +     + +   +  + +  +     + +                                    +     + + + +  + + + + + +  + + +  +  + + + + + + + " !!""!!"""!!!""!!  !!  +     +   +  + + +  + +      +   +  >=<986667899}~}}}}~}|}~~}~}~}~}~}~}~}}~}~}}~}~}}}~}}}}~}~}~}~}~~}~} +Hû΄;х̄˄ʄ݄' ,LԄՄ, օa*üU  Fքk % !Ά'過1  (3K&B +W߄ /¿؀ʮ)-%T # fUSRQRSTTTSRRRSTTTUVUTRPONMMLLLKJJJKKLLMLKIHHIKLNOPPQQPPOOQSVWZ\^^\YWUSQPQRSTTSRRRSTWYZ[[\[YURMG>60-,-././012333455544556667765554545 455677542100/.-,-,++,./01235 +678998889987656 56677889998878889989:999887 889998887888989:98789989:99988767655566555455565 6787655566776 5666556788898887666765444555455445543234543321100/..-,+++,+*)('&'((()*+,-./01//...--../01123579:;:98889;<==<<= "#$&'(('&$" >=>=;987766654333579;<<:9 :<<= !! @@@??>=>>??>=<;9764310/.,+*))('&%&'&%JJII%$$##FEDCBBBCE#$&&'''()*+,-.///000112358>EK()**)''&&%&'&%&% $#"!  !!""!" !!! !!!"""!! ! !!!""#"""###$$$###"""!!  @@?@ !"##$##"#$%$###"B@>=<<;;;:86545678776567789;<=>>=<<;;987543345556 54322344332122233323234578:<>@!"#$$%$$#""CA?>=<;<=>?>? @@??><;:::;<=>?? !   !!! >> ! ==<=> ! +   +=<;;;<<= =<;:98779:= ::;:9875434689::9998766679:::98878 999::;<;:987654445789:;::9998765322112210//..//0 ///27@'.3443221112100//.-,+ *))('&%$#"! :9876565443221223444543454343445433344455667765554555666544433223222334432343433345433344423 22332212233211210/ 000111223221234543432112233345543344433323 22211122232333434 5566777789:::9:;<<<;;;<<<;:9998999878899887776667678778765544565454433444567776655666778765556677766656789:;< =<<;;:::99987 6665544433223 221122233434565544434443332123334443321112210 12344333212345545667899:9 655654333444555444344333233432100/.-,+***+*)('&%%$#$%(*+,,,++*)('''&%$%&%$#"!""!! !"$%&'''&%#"!"! "$&(*+-/001234566543322258:<==>>>==<==>>===>>??@?>>=>?ADGLNPQNNLJHFE5FGFGGILP+.48=@BEGLRXaiu?GMSXZ\]__^ZRDiQ=3.-*($" >===<)>BE%&(*,---*'#C@=<;:86432234445789:<===>>?ABCCBA@@ABCBBBCDEFGHGGFFFECBB! +753200/01011210/ 136899::;=  !!! <;999:< +   :999 !"! 8887653223456 !"#"!  ! !"#"""##$##"!!   !#&)-022334321`_^\ZYYYZZYYXW;:99:;<==<<<===>>?@?><;:!98642110110//...-..02579<>?>=;9754320/---/1356788752.'         + +   +  %$$$###""##     + + + + + + + +  + + + + + + + + +   +  + +      +  + + +  + +   + +                                + +  + +   + + +  + ! +  !$&%$"!V  " !$%)-17MKIHGFFEDCBBCEFFECBABBDD"#$%&'()(((''(()+,../012469<>BEH$$#!!A> !"##$%%&'&&%%$ ###$$$%%$$###"#"!"#" !!"""##""!!! !!!""#$$##""! ==<;;;:::;< !!CCD#$%&''(('&$#!BA?>=;:9876544455677765443434 5554443223456 +777644456787520/.013443221 +0//0012443212458:>BE# $$##"!A>=<;;:;=>?@! =<= ! !  !   >>>??>=>>> <;;<=   !  ! ??? <;98778:= !!  ;9875323689:986434678999889:9989:;:987642/./258:::99:9987654310//./026>H(+-023431.,+,,.---,+* ++++,---,+)'( '&$#"! 9876787655655443456777654222344545445543432345654323456665554434455443445433222343223322234543321112122332 332100/01210010112223232 1222333223 44555434454345543 4443322111224433344565445 444567778564<;:989878787676676432345445679:::877789::9888766655545678787789 :;;<;;;<<;;;9876654443344555665543345666765432322345544343222343210//../0111001 +0///0134443 22211100122345567899876676656678765434554332232 3321110/-++,-.-,--..-,,,+**)))()***)'%#!  "%(*,,,--,++*+*)('&&%%%&'''&&&%&'&%$#"#$$##"!"###$$$#"!  !!"&! !$&(+,,-.02333211123332112346789;<>@BCCB\CBBAAABCDEFEC@;89C-BeDXglld]UQLJGEDGHGB;nk8@KW`fltFLPPMJGNWaikicZQF}oiecWFfNB=60,)%" >=V>?@D%-7HV`\M=-I>:8779>%*4;FLSW\^^\XVTSTUWY[\][YXYZZWRMJJNSX[\XRMJIGD>9544420,)&$" !! 752111221100/.---,+**++-.0123579;<<= !    987666788878   ;:98654567  !!  ! +!!"""###"!  !!! !  !#%),.01234332221`^\ZXWVA::99:;=>>>==<<==>==<;::;;<<;:9888999:98666543210/.-,,*))*.258999876554444321-'         + + + +  + + + + +    '&$"'&%###$$$#"#$%%%$"!!" !    + + + + + + +     + +  + + + +   +  +   + + +      +   + + +       !  +        +                             +  + + + + +  +  + + + +     + +  % +  ] !!"#%%%$""(A-:CEC=830.-+**++*&!=< &.5:=<;<<<;}~}}}}~}|}|}~}~}~}~}~}~}~}~}~}~}~}~}~}~}}~}~}~~~}}}~}~}~}~}}}~~~}~}}~}~}}}~~~}~}~}~}~}~~} ؅kCG҄х +˄%ÿʄՆ(ľބX˾ D$ֆʅ ׄυa   +  "$ND#=4) "DՅ + +F܄؄φ˄9XᏯԽ"ŷɪg鉝ҿս&1 6? WVUUVWWVTRQPPQ PPPQRRQONMKJKMNOPQQP ONMKJJMPSVXZ1YXVUUTSRQ(()*+,,-YYXVTPLD:/'" !!"###$%(*,..//01110112233445 4320//../012344555444677875310/023455432 3444333222346765567878887766567 655567654455676656 7788899:::987654567767888988899::;;<;:::;::98887 +65667766789 765677766544555455543433445667888776555455666554445443323 22110/.///00/.//01343212345677876565544321/,*)(()*,-../024665432345679:;$<=>???><;:8641-*'%#! =;75558:;:9755568:;;<;;:999:<> ! !"#$# $%%IHGEDEFG$%&!KIHGEB?===?ADGIIHF###"""!!"##$$%&' ()*+,-/024689;:998889::999:;< !"!"#""!! !!!"!"!"""!"!! @ ?>;  !!!"#"" " !"###$$#"CA@@>=;::9876656678876543210/-,+**+++,-.//00011233444343212344455565544210//./00110121000//013568;?B" !! @>=;;;< ===>==>>?@@@  ! !  >:: !! <;:;   ???>>??> ??>=;988;=  :74468:;;::98766679:98999:999:;<;:998875420//14689:98776555443332100/ 0111003;F).0122322100/..-1.///..-,,+*)('LK&'())**)))((''&%$"!8887765554454344455543445554321223332343234544455543455434333444343454321112322343232212110121110100122321212333444323445443343432123378766;:9:;:99:98898766677887 677788776667655654344332334434567787898776565677877789998899::;:9::998765454332345544334445544343210121010/./0/...//0/0123233443345677889876788 77754343321223232210/..--.-,--,,,+*)('%$#! "%(+-///.-,+*))(()('&%$%$###"##$#"#"#$$%&%$$&(+.000//013568998788987789:;<`=>>?@ABCDEFFFEEFFGGFEDCCFO3GcDYqIJo^PIGHGGGEDIR]bdfiq~GLQTWWURNMNPTUUTTVY[YPDsdXQHB=82SB0'  !BTA@???=;<>@?:76679:?%2F]<;::;;<<<;;<=>=;:98765443320/..-+**))*,03689:;:97531/-+455541.(   + +             +   !#  +))(%$$$%&&%%$"  "$%%$$#   + + + + +  + + + +  + +    +  +  +  +    + + +     +  + +    + +    !  +                               + +  + +   +    !"#$1#"!#))=,9JW//WK=1)%$$%%&%$',48:;=CK*.124431/-.0245897/&?6/+'# & + :!.',.---,' 0),$,.,*(('$!"1$*(-,%'#%))% + + + +     + +     +  !"!"#$$$#FEEDB@?>==}~}}}}}|}|}|}~}~}~}~}}~}~}~}~}~}~}~}~}~}~}}}~}~}~}~}}}~}}~~}~}}}~~}~~~~}~}~}~}~}~~} ڄ,þޅ* $Յ ʄ˄̀ý>ĸ2<τ;΅B ,5 5&2Z  *)M yՄ ؄  + +ӄՄU +*k󐥭􇘮ၓ˻ɱꂌůʽ􆋊ͳ

>>??@ACDFH$$$#"#$2#$$%%%&&%$GFFDCBBCDFHII$$$%%KKJIHIHFC>;::<>@AABBCD! +""!! !"#$$% &&'(*,/1223567667899:;::98789< !""###"! "###""! !!! !"##$$$##"! >?@@@?>=== @?$@ =<;<=>>??AB!!""#"! ?=;999:;> "$%& $#C@=:8754 334554421/.--.../0011221123344556530,***) *+,-...-./02210001233433344455665532110/0//.//1 001247:=@C"!"!B@?>=>>?@AA@???@@?=<=>>?   ! ! !!"! <>=<<<=>;;< <  AA@?><94//28= =;8667::::99865568:%;::99::99:< :99887766530./158:;::987778987766542123210///0/06>J*.00122210/000/.-,,+*)(())*+,,,+*(('()))'&$"!! 998876544455432123 43344544433345432112343323345454 655442344434455545456544345554322322344433322111232123 21123321101223321122110112120 123345554334 33233423211233344 455445666777777888766555789::::;;;;<<=>==<<<;;::999887898787776765433434543455544567677765678889:989899:::9876544455456788876565432221010/..-./...02577653210/./0//.//000100012345678776678::;999887677886 +55544554443443323344433222110011210//0010/.-",,,+++***++*))**)('&&$"!!&+.110/.-,,+**+++*)((())**)*)('&%$$%&'&%%%$$###$#""!"#" ###$$%%%&()+,.0011221112344556678 9:::;<<==>>??@ZABCDEEEFGGFFGGGEDDDFI(2Ec@OSUTVYVM?1M@BJ,5@P_;GSYZYYZZYWURPONOOPRUWVPHB=;ple^TLA5R=/%  ! A@?>=>?@R??>=<<;;;:::;;::;98;"*6>EHOX38:6WC3/:Q28gXKA@IZ696]PIJJH@;=GW4776664]J:0--.-*&!43745677899:;;9876654433210...15;!!! <7410//0245 ! 7666766655565432234566531///01232110/.--, --.../13467678 998887766654 333456! !""##"!   !"!   + !"#$#!!!#&+04542100122333211123 221a`_^\[[ZXW>??>=<<;;:;;<<>???=;9899865334543210.-+*)))*,.14 +.--.-*'" + +  +    +         !"##"! !!"#%%%$#"""!#$&'"*)(&$"!!"$%&&&&'''&&%#  % + + +  + + + + # + + + +      + +  + +  + + +  + + +     +  +    + +      + + +   ! + + +                     +       +         +    +  +  + +   + +    +   !"-##$%%%&&&%$###$&'<(244223/) " *4"*2787'6420.---./1343/)&#!?:62-)"$ + ]  !%)(&4*!#0 /&""! ).#   + +  +    + +  +    + +  !! !"#$ +HHFEDCBA??}~}~}}}}}|}|}|}|}~}~}~}~}~}}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}} ~~~}}}~~~}}}~}~}~}~}~}~}~}~}}~}~}~~}~}~}}}~~~}~~~~~}~}~}~}~~} ۄ܀ф߆A +  ۄلքՀIֆͅшԆ΅q + + (Xſ &0 +  + s$!ľ܄ɇʅ +G닜ýŰծ +ȵŶ8مX RTUVUTRRRSRPNLJKLMMMNNNOQTVVT)()(((ONNNOQTW-.0110.,VTSSTTUTTRPNMLIGDA>;9641/-,*'%$$&()*++,--.-,-./0112221233343332 +110/--./112122334566777899;<>? !A?><;9987787665332233344454445678898987656667889899:9:9988766787666765667776655445554343 444332112211010//.//0/0/0/...//0 //...-,,,+ **)(()+,./124531/-.-,+)&$!:9:;<== !#%')+,-.Q,*('&%$#EB?<;:9889;<=> >=>?  !"$%%$#"!! :9876642344567789;=??@@ACDDCBAABAABCDEEDCB@???@ABBCDEFGGHHIHGEDDFG##D,E##$$%&'''&%$IHHGEDDCCBCEGIJKKKIFEDEGHHGFC@>= +>?@!!""!! ! "##""#$$%''(('((*+-/02444556778:;;;::989:< !"#$$$###"""! @?@ !"!"""!!!"""###$$%%%$" >=? !! @@@A!"""! ><;;;<=> !#%& %GDA?=<:8764434 33211000/0112 +11122111001 22345544344565543222334567766554320/./12101100011100/.-,,- ,,,./0369=<;;::;;<=>? !!! ?>? @>=<;<=> ! ! ! ! ><;;;<=  @?>===<<<      @ ?>>=<;852037;>? ??>=<<<= =<:8779: 865568:;:::99::99:;:85200269<=>===<;::9:9875444543210/-*'%$#$(-5?G&(*+,-./0.../0210/.-,+++,,--,,+*)('&&'(())('&%#"! ;::988765432123344565454323343343222332343234454443222123445443433434565654566544343432 344433233233223212221110012332111222123455565434323433444556667888889:<;<===<;:9:;4434 33345667788898877876788878999:;;<<=<==:8987876555666776 555445666554543322100111010/.//0///0246899986433210/.-./0/.,***.26: !"""! 98321210001123445543100//..//0/..--,,,+*)(&$! "$(,.0110///...-,+*)*)('('((''&%$#"###$$%%%&&%$"""$%')*,.024567789::;< ;98789;=>?@AB CCDEFFFEEFFGHLGFFGFEFH'-6CQ_44bWPT2=IPPI@>BQgALYdklhc_\\\[ZXSLE@<:9kd\XY^YNA98880J4)" !""! @@??>>>=<;:999:;=>?>K=>>==<;:8777#&+./0039CIF<1(#%/AOY\/12236:@DHJID>955665^PB:2,'#! 998E99:<;> #%&'()))(''),16<@@><;>AEE@93.)% 768 #&(('%$$$###$##""!!  6654432122110/.--,,+++,-.//011100/.- ./012357:=?A@><:988998877665554322212332110/-,+*)+,.0135!""#"!   !"! # !""###$%'),0477532111001101233431^[WUTUUUTRRR>?@@?><<<==>>=<;:9789::976543321/-.0242/...///0 10//.-+(%" + + +   + + +      , !!!"$%%$#"""!!!  ! !!! !"##$$% &&%$#" "#!'''&%'(&%$##$$%&&%#!  + + + + + + +  + +  +  +  + + +    + + + + + + + +  + + +  +  + +  +       +     + ! +                  +           +  +      + + + +  + + +   +  + + + + +  +   !!"# ""##$#$$%$&###$&$-43+'*!).-'!!*8%,5=BB?<96751,'#! <854585.%$ +% + + #! '.0#&)*)&!0& +  + ' #$"  #&'# + +  +   +   + +   + +  !"#$ FDBAABBA@>=>}~}~}}~}}}|}|}|}|}|}|}~}~}~}~}~}}~}~}}}~~~}~}~}~}~~}~}~}~}~}~}~}}~}~~~}}~~~}~}~}~}~}~~~}~}~}~}~}}}~~~}~~}~}~}~~} څۄ,Sž߄0 + Rׄ؀B¾@m  &҄#ԄЅ܄M¾ +  #KՄ׀9 7!( + +K;2*")օτ6쁎ôãŧ̻£ԷF +)RRQRRSSTTSRQPOPPRRRQON7MLLLNOOOPPONLKKLMN'(((PONNLLNQT+,-.00110/.-,,--ZYXVUTSSR?QPOLIFDB?<9742/+'# ""#$$%'()))*+---...--..//00222100112221234454543212321//../245665443234 5568:;;= !!!" +##" >>> =<;;:::;;::989876654566789:::9:989:9 :;;;::9:99876543323 2122111233323221110/...///.../0110///0121/.-...---../0/.--,+**)(('&&&'(=)*,-../00012345556665432101120.+)'%#"!""#""CA=<;;:99865557889:;<<==?ABCBAABB@>;976667877789:<<=>=<;9:::9:J;;;<=>>>=>>@@BBCEFGGEDDDEEEDCA@?=<<==>>?>>=<<>?@AAABCDCA?>?BEGHIJJJI$$$HIJ% &'()))(((''& ''('NKIGFFEECAABBBA@@??>?@AAA?<:9:;;;<>@!"#"!!! !!""#$%&'()!**+,,-...///02468999866555678:< ! ! + >  !"#"#"! !!"#"!! =;;;=<:86568<@"#$EA>;865666553110///.-,,+++,..///012322112 +111234455654566556'5566678998889:;<=<;:730-*)'''()+,-./0123 +2210//..-,+,,-/0247:=>???@@@?=:889:;=> >>=>=<; <<;;; !"!"""! ! ? @@   +<<=<::;<   !   !!""!$ ;96459<>>>=<<<<;:8778: ;9754579989:<:9878:<:72/..158:;;;<;:989888751-++-.02333221/.-,+*(&&'),/1247;@EIKLM'O')*+,---...//00//.-,+)(('ML MM&'''&&&'''(('&%$#! 998876 5443212345 +66776555445 4443334543332343233443234 +33221112223454335444345554323445656565434332 3334432332321 +23432212221 23344454432112334666554555655444333454 332233344788878767;<;:::;:999: :99:: +98778878654455665445567 66677765556665677788778999889;;<=>>??9998877676665655566545456655432211000///.-.//..---.../0257665544321100100/-,+,/4:!!   7766678 554432111001234543222100//./.,*'$!!%*.021000111/.---,,-,+***+**)(())()(('&%$%%$$$%%%&''()))(('&%$$#$')*,.134679:<<=<;<<<;965568;>?ACDEFGiHGGHHIHHFDDEJPW/39=CIMSYak;@FLQTUSLE@@IWhzDFCwmk:BINRX^bb_]]^acaZIrN;/*+/7BGHFDB=95576_H6,(%#"! >>>==<;:; =>>>=<;;<>>? >=<;:987778:;<)!%+28=??>>BIS[d6:=?=9aUQW`5543]SG>5.*&$"! >;99;>#(0:HRb8?DGIJHECDKU`d_M=aWV]`_ZWY]b\P?2(#  '09:71,)'%$$##"!! 65420/.-+*('%#"!""#"!!!#$$%(+.0124579:;<<<;;!<=>@BCDEGHHIIIHGGHIIJKMNNNMLLKJHGF"EDCBAAABAAA?>>>?ABDFEDDDEDB?>=>?BD#!743!"""!"! !  + !!!  !!!"!!    + !!!""#$% &'(*-/122100/./0100/...///_^[XVTSTTTS>??>><;;;<=>=<:986776530.,*))),,,+*+-/2#5544433210.,*(&%#!  +   +    + + + +    "   !#$#"!! !"!    + !"#"!# !"""!! !#%&&''(('&'(-,*)(((&$"!!"!!    + + +  + + + + +     +  + + +  + + + +  +       +  +  + + + +            "$%&' """###$ +                                + + +      + +   +  +   + +  + + + +  + + + q !"##$##""!! !!!  %+ "&+-16;C&)+.121/*%"#*4@K)*'D;;!%)+/37::8778:;:4(='$(*)('# .   , + #).2 ! .%"&,.' + +? %,7!%(*++)'%$(/694(,)+143/-/373*  +  +   + % +  ! -     +    !!"GGFDBA@@@AAA@?}~}~}}~}~}}}||}}}|||}|}~}~}~}}~}~}~~~}}~}~}~}~}~~~}~~~}~}~}~}~}~}~}~}~}}~}~}~}}~}}}~}~}~}}}~~~}~}~}}~}~}}~~}~~~}~~}~}~~} ۇzم҅ۄ %yʄ ̄Z½¿)Nw?ӄ΄·$΄ ˄N½, + #-\    +vۄ +()¾ԄɄ(͆u܇½δDZµ̻lD +܇RSRPOOOQQRSSSTUVUUTTRQPPPQRQONNNP(()(((PONMOQ*+,./010/ +000.ZWUTTT) ('&JGDB@=:8530-+(&$""#$&()*+,-./01121100101221/-,---../00///..//02454344321123579:<=>==<< ?>>=<;;::9766554333445556676 77887766777899:998999:::;< +;;::877654345432110//0/.--.-./.&-,,,+++**)))((()))*++***+++,,+,,--..-,+ *++,-../0011210/.,*)(&&%$""! "DC@><:9887665678:<>??>=<==<;;;<<:8767787778:;=?@BBAAABBA@><:8789;=@BDEEFGGGFFEFEDDEDCCBAqBCCDCCBA@>=>@BCEFFEDB?;9:>BFHJ%&''(''&&''(''MLKKNP))('KHGFEFFGGFFGFECCCDDCBAA???@ACEFGFEDBA?=;9766789:;<=>>>??ABBA@??@@ !""##$%&&&''(*++,-../112467888643 45679: !  !"#""!""###"! =<;;<=>?@!% >>?@ AA@??>?B!BBC#%&$"?;8631///011121010012334565 66544333210/01222334310///1233445677887899987677766530-*''&'()*+-/01223210/.-,+*+,--..01358:;;<=>  ! @ ?>=<<;:99:; !!!""!"! ! <;;<>?@ <;:::; !  !" <<;;::<> =<<; !!! ;84102479; +::99889:::;<=:A;;;:987652/-,,,-./135554310/.--,+,,./023444323468=BFIK&''((()))(('O'()*+,,,---+*)('((()()%**+*))((''&&%$#"! ;:998887766543223434 55444334454323434 +5544555433233445 44433344554455655433445443334434545432 333222322234332223212121234 3321101123456545654345 545566 77633:::;<:988 876656667677765556655434445567876789=<===566655454454555666543232223321010/./12343211000//012333444332237; !"!!  +55443221112334454554445654323210/.,*(&%$%'*.123332110/...- ...--,++***+* ))*)))((('&%%$$%(&'())**+++*)((''(())*+,./2456789;<>?@@?>=<;9889<=?ABCDEEFGGHIP]=OkCSanv}EEGGGFDBAAA|qhb_[WTUY_ekt@GIFA{?DHMQSTUVWWVRMF@;ncTG93///-+NIKT5DRUL=eM>0($"! ;:::;<<===>> =<:99:;;:9987j89;;= !#%'()+,-.-+(&&+8N3>>6XF?AKX`\OD@??@@A@=71*&##&-1568:ESa57:@IQTSRMKKMRWVL>43:HW\XNFBCB@;4YND=70)%#!!"#"!!  9876558!""DK)37;>=:70ZVSQNJGEFED BA@@AAABCDEGHIJ KLMMN''((('NMLKJI-JJKKKLMMM'()*+,,-...//.+(%#! 841/./01 !!!"!"""#"! !!!""!! ! ! 6!"#$$$###$%&''((*,/000/../0//...--..\[[\]^_^]ZYWWWVUTS>??=;:;<;;:9876531.,++*,,+++- 7420/- + + +    + + +     + +        !"!  !""!!!""!   !"!!     ,!"#$$#"! #%('''(*+)()))'&%$$#"! !!"#$$$#!  +  + +  + + +  +,        + + + +  + +   + + + +    + + + +   +      !$&$ +                + +                + +  + +  +  + + + +  + +  +  o !#$$#"! "+ -B+6@GLOQQPPPR)(***)(&&&%G@:641/-/38<@F'+,)$C#&*-022355541-)%!<5,#&#%+&02,!3#  +  s +  % (!(-+# !+7!#&+01.,)((+/1/'#,1.)$"""!+$ + + + + ( +  """2/-)%!     + +  + + +  ABCEGHIIHFECCBA@??}~}~}~}~}~}}||}|}|}~}~}~}~}}}~}}~}~}~~~}}}~}~}~}~}~}~}~}~}}~}~}~}~}~}~}~}~}~}}}~}~}~}~}~}}~~~}~}~~~}~}~}~}~}~~} rĿфׄ ؄ـ:ׅ΄HĿ7 v3ӄ҅ӄ6„ń+  #"F .; +] - + )  G@9+ȿԅN͆΀ºĽ̬˱ݒξ齡ʡ +%ʸDz̺֐پ6ɸ´ǻ +:'( TTTSRQP!QQRSUUTSRPONMMMNOPQSTTSRPONNMMLL&'NNOP)*+,,,-.///..-,,-...-,UROP)*)#('&%IFDA?=;9764320.+(&&')*+-./01100/01233210/.-,*&)*,.///01234320//.../023467766554433221 245655579;<<=<<<= <; :9776556676 789:;:998777878998889:;<= +>>>=<;8632123345443322233222100/.-,,,-..-,+,,+,-, +***+,,,+*+,. /02221/.--,+,-/..---./1258:997531/-*'%#"  "$%&((()*,,,+,,+++*('&&&%$$HHGFGGGIIHFDCDEHJL'(=PQ(POQSSSQNJGDCCEEDA@@@ABCDCCBAA@?>>@BCB@><;<=>?@BDFGIKKJHGFFG HIIJIHGEDCBA,BCCBA?=>?ADGIKKKIHHH%&()))**+*)QPPPQ)+,...+*('MLKKIIIJKM&&LJIHEB@@BEGGFE8DCBABCEGGGFDC?;865577876777667:=ABA@@B!!  "$&())())()*,./012467765211123568:=?!"! !""#$$%&&'''%$##$%%&%K&&&%$"! @ !"""!! !"##"C@>==>=;8641.-.02211///000//0/../00233456777889::9:;;<==>>??>>=<:864322122110///./.-,,,-...---./000/.--./!0010/.-,++)'&%%&'(*++,,.00.-+**++,-,,++,+",.0245789:<==== !!! A@?>=<;:;:::;  ! ! <:889:<>  ;;  !!   ! !"! 767<;:999:;;<    <8522469:9765679;<<=<;:9 +:;:8520/00/ +0245420.--./1368998776543358 !" ! 21123466655566654445545676777654321.+)&" !$(-13332110//.-,+***)))**+*)(((' &&%%$#$$$%%&'()*+**)))*+-./00123467889:;=>??@A@@@ABBB@>=;;:72.,.39?GT2@RfDUf{T^iqwxsle^ZVSLD9d`e8?FHE>k``eiiebbj?LVYVRNKHC?;:?FKRVZ[WQGpUA:882R>1.@1Lbmpmhd[PAcG4-2ARWH4(! !"! !!!"###""# "! >=<<;;:9:;=!!""#"R!"#(/;FU[ULGFGLQV[[VNGEHOUVVTSOI@74;K`n;@IVboush\QLGB6UA97;??9-#$3+AX[Q@1M=3/../02R1/-,*'#?:75321/"&*./0/--07BLRQQRV\c:FXoDOX]b]YQJE|pe[RGs^KA==@CGIHEA92,)'%IIJ%$ %%$$###$%&&&%$ ###"EFFG$$%&'''((()*)*?+,-./00/.,*'%#! 851,**,./0234  !!"#$$%$#"###""##$$$#"""!!  !"$$%%$+%%&()+-0110/-,+*++-./...\ZYZ[\]^^\[YXXXVUTT>>>=<;: 99:;<<<;:9753345668887642/-,+*)())*-*0.+*   +    + +  +  + + + + +   + + + + +  +   - + + + 4$$%%&&&%$$%%%$##$%&'(('()*+,-,*(&%$"! !!  !!   !"#$$"! !"#"!!  !! !"#""!"###""!""10/.-)))***++**)))'&%%#"!!#%''&%$""!  !"##"   + +   + +  + + + + 0    + + + + + + + + +    +  + +          + +  % + +               + + +       +                  +  + + + + +   !z '2(3A+7CP^6  A )G$@ ȿ܄ ӆCƄ0¿ㄚ瀎iȳدcöʺܺh׊ѹ퀉̻Žýſ˽|$'>TUVWXYXVUUVWWVUSQONMMNOPRTUTTSSSRRRST**+,-..--,+))*+-.0122210.-,+V:TRNJIJ&'((('''(()))(('&%$EB@>>=;986431/,*)()*+,,,-./00011101 00///001112221 234456654455656'5554443322211234665322369:;<<===<===>??  ;9766789;<<;<;:9876677789:;:::9989:;<===>==<==>>?>=;875433323 +2210//..--, --,,,++*(()*+*)))**+*+++,-./00010//.-,+*))**+*)))('&&%$O###$$%&&$#"""###$%&'()+,-.023355655679:;;;<=>??=<;;<=?ABDDCBAA@?>=<;;;<===<;;:9898764320//00110.+*)(OLIFCA??@BABBA@@@ACEFEDCDDDEFGHIJ,KLKKKLMOPPPOOP(((''MMMLJHFEDBA?>?ACEHJ&)+,--,&--,+SOKGC@><:9=CKT-.012320.,+*)))(('&'('''NKIFDA?>?@BCDEFFG$$%$FA:63358:;::;<===<<==>>@A!!! !""#$$%%$%%%&'()*,--...-,,+,,-.//0259=@B!!  !!!""#%&'''&%$$#4$$$"!A?@AA@?><976679:<=<:643210/.--,,-/.-,+++,--.//012344556877888999::;<=>@ABCDEDDDEFFEB@?><:98887754432110/.--.-,,+*) +***)((()*+-+*)(()*!+++***)***))('&&&'()*+,-..--./0//.--,,++,,-./01345679;< ?=<;::988777888999::;< !  ! =<;;<=>???     ! !"!  ;::9::;< !  <;9876543347:<=<;=<<<:8654 310/.../01210///01245789:::9889:9;<;840,*,2=<;;:; +:::;;:98876543444321122212#100//023456787767788899889998887778;< !"#$&'''&%$#" 6543443223443334 33222101110/000//.---,++,.0233443332210/.../0112 333469= !"""! 788767776656543322321/,)&" !&,0210//..-,+,+*)***))(('&% &%%&&&'()***))(('''()*+,,--/13456789::;;=>?@ABAA@@??>=<>F+3;GViAO^jqtuxHOX`gjjgdb`^]ZXUSQPONMID=nhim9ph^\bjmln;BHJHFINTY[]]YSJA<;>BCC@>==>ACD?qd^WJ9VHGS28:<@CDDIB@=:746;@?8V?.%DBA?>>?@A@?>>>?AC""##$$%%%&&&'(()))*)))(&$#""! <:99:;>@B!">CBA@@@!%+4:??=83+&##$'+/1003?P4=GMRW[_^ZTNHDEKWcheaWI4I2($%&%&'d&%$$):,FZ[M7N=78:@E'+058=BJS]cjjjb]VUQOIC=8h^TH@9:CY;JPNHDBB@CHT[_[SE8YH=6-)'*-//.-..-,**,19BJLE90+)'&%$#"B@><:88;@E%(*++*)''()*++,,,+*)))*+,-/011/.-+*('$"! 30---/0123  !!"!!  !!!  !"$%&%$##""!  !"###$###""##$&(+-.//.-ZXXWXXYYXXY[\\[ZYXWVUT?!@??=<<<=>>=<;98754556787665433221 3331.+'#!   + +        + +         '&%$!E  !"""!!!"$%&'&&'(('((*+,,+*))''((('&%$$"  !""#/-+)(%$"!!#%*/&$#"!  !!! !    + + +  + + +     +  + + +  + + + + + + + + +     + + + +       #     +                         +  +   +     +      +  +  + + + +   +  '0;$,5;?ABDJ*06<@BA?<:987643210/.-+&"<89= ?:437=??A#(,,*)*.2578972*$ #%&&$#""$&)*'E=95,,""(!#$$"! $#+    >  % &),/132/*'# "'09=:6.$ + e + !./& #)/59===7511//+'$ :2*#-!+/-)&$#"#&.23/(""# +   + +  +  + + + +  * + + ;;;<<=>?>?ACEFGGFFFECCBBA@}~}~}~}~}}|}|}|}|}|}~}}~}~}~~}~}~}~}~}~}~}~}}~}~}~}~}~}~}~}~}}}~~~}~}~}~}~}~}~}}~~~}~}~}~~~~~}~}~~} |߄L҄^ž%~ IXτ΀¿0 2 +Q] S  C! +;'K +2ۄ̄̀¾ن؀职ݨ􊣵ɽ®􋎃ʀӿϸ̶վз2ƼǼ܄Ϸ_ ,)7Z[[ZZYXWVUUVWWVTRONMMNQSUVVVUUVX--,+TS)*+,-,*)'MLLN(*,./..---,+TSRSSQPONLJJ%&'(((''&'()((&$#EDB@=;98889874/+)(),.0121101221010///0121 23455665567887 66554443210/012455430-,.1455667889:::;<= !!""##" !  ! ;:9876679< ;:878898767899989::;;: +<<:97654321222100//...-,++*)('()*,-...--,,+*+++,---./012223431/-,*)('%$#"! !"#$$##"I##$%'('''((()+-.024577655667889:;=?@ABBA@??ACEGI%%%&&&'(()))(''),.24665443e21/-+***))QOMMNOPPNMNOPONLJGDBA><:852/.-+*)(OMKJIJKLKJ$$JJIHHJK'((PNLKJKNNMLJIIJMPQQOLKIGFEEFFGILO)))($OPQ*-/1110///.-WSOMMNNNQSTTQMJFC>;989/;;<>ACDGJ&''(*,/110/.,++,,+)((('NNNLKJIIJJKJIHGF GGHIIHFEDCEGIJKLKJJLO(((&%%$$%%%$""! !""!!!""##$$#$%&7'))*++*))*.145678:< !!"""#$%&&%$#"!>9743200/.,,+,,+*)*+*)**))())*+,-.0133321100/0001233345677899:;<<<===<;<=>===>>==<:87655532000111000//./ +.,+++**)**+**)()((('()(/'(()**))((()*+,,--...-,++,.012221001232111223332.1112345689;===><:98889:;::9:;=<;:;;;; ! = ;:;;<<;;;  !"! ! !"""! &= :::;::;< !!""!!""#"!=< ;962.,.27;=>=<<;T <853232234665421012343323345679::;;<=<;;:9899;<<:730..---./26=CHL'')*,,--,+++,,-.---,++,,-,,++*)(('&MMM&&&'&%#! :9876544455456656545665434454433434566654443322233444565455435465454543 +222334445545432334455667788877787 887778899:975445678999887776566655544545444552266776665445655555987678998765 4323455669:9989:;<=>===<<;:9::999:99::9321 2334445678:::9::9889 !!! <<=!#%%$#!!!"#$$$#" 5643323334443344554332 +33210001110//...--,,***+-.0110//..-./00112344579 !!"""##$#"!  + +6655678  998765432210/.,*(&$$&).2322110111/.-,+*)*).((''&%$#""$%%&'()*+,++*))**++,,-/010/..03566789889;>@ABDEFEDA@AK0D_@Sh{LSVVSPMKJIHGFGLSY]abb`^[ZYXWTNG@;F]8<8e]WSNJHGFDDFIKE>710/22430/)'%%&).37740/.036;>AGP2@NQPLLLMPU[WJ:0--/0[L>:0(#! !#%&&&''&&%&&'*0=J/=N[dilhccfnyGIGztfYI:U<,!0 !$)/9AFE>2)"  #*6CMME??L1;:cMA962.*'%%%'(''&'[&%%$$#"! ? !"$%'()('%$#EDEFG$%&''(*+,++***+++,,++*))('''()+-/000/.-,+)'%#! 630.-..0146  !"$%'(((&%#"!!!  !"#$$$###$%&&%$#"!!  !!""###"#$&(+/22210_^^_`_^\[ZWVUUVVVXYDCA@>==>??><:7421223455/-)()*310.,*(%#     +       +  + +  +  + + + + +       " #""#$&''%#$%&$!&%$$$#6$)((''),,+*('&(*,--+*)(''&%%&'(*,(()/-*)*+++-/11/,*'$"   !!!#&'''&%%$%#"  !""! !"""#""!!!"$      + + + + + +       + + + + +    + + + + + +      + + +  +    +  +     #%%$$ +                           + +  + +  + +       +  + + +    +    +  +  + +  + +  .!!!"#!#(8&2@LV04662/,*)(((''+059;;:87652.)%"?:7310159==:62-)+5B&&&'+./.-,-046760(!;9;<4/0;$*+'B74:EH?)1"" +/,$/.$*2:ADD@;50../1222/&8" !,6 !;-!O/ 3.+)'%$%&$$&)+'! %!*,*&&&'),/,$$ + + +) '/59;9668 " ń˄9ńĀuDžɄ$ۄR¿Dž(Ŀ* U&º񄌏  +1 #&!' 2! -׆ 9ʄˀ틧݃ĺ̷ľ悏ֽ쐪龛ÿ߮ͫ荚ŜʻYۄֺͫĵ¼ƾa4Z\\[YXWVUTTSSSRQONMMNOOPQTW,.000/.,+**))**)))(()SRQQPPPQRS***)QP'('&())**))(''&%$#""CB@?=<;986531.+**+-/012M1100//00/../0121100012467654445568999888754321/...///13568::8520/0245789::;;< ! >>=>=<;;::987789:;;:;   ; <;;;:::;<;::86410/.--,,+++***+,,+*)(()))()*+++,-. +/1321/..--,++*('%$"##$&((()**)*,-/01232100111223456776655443456876677888:;=?ACEFGGH$%%&&'(()*+-/13578:;:97420-,+0**)('OOPQRSTTTROMIFB>;841.-,*)NJFC@?@ABCDEFHJKKJHxGFFECAACFIKIFBAACEGGFFFDCBDEHKO),.//-,UTRQQTY/00]WQJD@@@BCFKPT,---,,++SPNKFBACDDA??@BDCCD#$&'(*-0233321/000/.-,++**++,-./00/./- +.../000/.-,-4,,--.--,++*)((&%$%&&%$"! !"###"!!"#$%%%&&''()))((''&')*+++,+***,.01223210.-,+++*+,-./000///00123344555668988877678887788877789;;;:9887655444322210//./0/.-,,,++*)(())**+*)((())**+++**+, +*)(()*+,,,+,%+++,-..-+*))+,.023554556789:;:::;<=>;; >>???><:98789:999:;<;:::;;  !!  !!! ;< ; ;<< !!  !"!!!  !  >=  :9: !"""##$$#"! 8778::85348< ;85212234567999765322234678:;;;:;;;:;<=<9633589997541-*(*0:H*./.,*))*+,---,,+* +,,,++**)('&'&&%%#!;;;::988766556 7665676656545434345433434323345665565555565444554343434445556789::9988876789:;<==<;;: 9998765566556544455666766654344544333888776676555543987766554345556678887878889: ;;;<===<<;:;<;<<;;<=>=; +:::;;;5666775445799::: !!!"""#"A<63357:>!##"!!  !""! 6655565434 55444544455543210100//.-,+**)))+-/0111223332232334457: !"###""!  9877827766556676555443100/-,*)'%#""%*.233443222110//.---,+*)))((() ((''&%%$$$#$%T&(*,-//.,,,-./123334568986544456789:::<=>?@ABEM0?UtLbyJYhu|{sia][[ZXURPPQPONPSVWXYZZY WQFt`W[caVJBAABEHNTWVTPNOVd;DIJJKLLKHGGFB?<gR?67@KQSUVVRLFCBEKSVQIEFNYiwBFIKLMJEnP6H4)&(+,(# !#$&()+.48;<:622=V;EHHHIE>88=GS`lrofZOKKR]kxxbH 8XMD=85321R0//-*(((+1;FR.3675_QC7,'$##$%&''&$#""$'1=E.=;974211000///0132100/&#(  + + +  + + + + +    +  + +  + +   + +  +     + +  $#%%%&())(&%%$"p)'$"!!"##""#$%&((('''(''&&&%$$&),--+(''()++*)(&%$$%')+/.,)*.263/+(&%&'(*-/130.-)'&'('%$$%&&%%%  + +  +       +  +  + + + + +   +  + +  +      + + + + + +   + +    +  + +   +    %"  +        +    +        +   + + +        +  +   +    +    +  + + +   !""&$4H0=K.8AILIC<85420/-./13556777666751)@2-065.'"!!"#&)-//-+*+.6!&)*+,,+*((''%#"#&))&@1'(4$1883-$9)&+-/00-(%##%)-.*%"#(/:C&)+,--+&:'  + + *&))**'! &/8AFC<3+((,2;CKLKB3 #(#W &+# + +  +)23&(      "    6 + + #*.530)# $'&$$$"   +  + +  +   +  ACDEDCCBCDDEFGHIHFECA?==?}~}~}~}~}~}~}}~}|}|}|}|}}}~}~}~}~}~}~}~}~}~}~}~}~}~}}}~}~}}~}}}~}~}~}~}~}~}~}~}~}~}~~}}~~~~~~}~~} օd?Ʉ لC¼ńȄǀ˽W0+ńƀ¾¼   + 11¿6 +(7# E #?ۄ* &ÿ̀򄒥߁煐ŸŹɴŸijοプ.逗ɹǺ̛Լͼ슙 ̈́Į纤痻ƿž趞- 3 +`]XURQRSSSRQ RQQPPNMNOPRRQPQ(((ONNPRSSQQQRRSTSQNLKKNQ*+,,+)'%%&&&%&'(('(('&%$#EDB@=;97641/,***+,.12211011100/.,+ ,---.///.-.0234566677531/01234543334 +344689::<=<<<=<<;:989:;<===<;:::87789; !  !""##$%%#"! < =<<;:8630.,+*+,-.///./0=11345666778875420,)'%#!!#%')***+,-./1356889:::988875432111221000/../000/.-/011101124543578::;;;=?@AABCDFFGHHIK&''()**++,,,-./01345676655310.,*'%IL(+-..-,+USQOMJGC>952.,+*PLHDBBBCCDDCA@=<@DJORRRSRPMIILQRST*+-.//121.*OKKJJIGFEEGJLOS,/1335689"887766555432110111246888777655566676544320/.///00/./ .-,+,-.0222101010/,++**('''((('''(()))***+*)))**+***+-.000//././00///002333210245544321223567 88875321001210//./0010/ 0011100//...-,,+*)))*+*+Z**+--,++,,-./0///00/-+(&&')*+,---,,++**+,,,.1220.+)(()*,-..//01356889;<=? !!""###""! ?=<=? -@???><:8656789:::;;;<;::9:<<<<   ! <   !!  #<<<= >==<<<== 6568 ! !!!""!! ;986436: !  !:98766678:;;;:8644468:<=>=<;;;:;<=>?@%>=<;<<<;9631/-+***)()/=L-11.*'&&(+.//.-,,+,+,---,++*)((('((('((('&%#" ;:76787656543334544334434 33211222454333443455545 6776667765 67766677765666555443321233434345677788899::9987666767888776778887889:9::99::998767 655543345676555434555667665444998878877654556665545679::989:;;<<=<<==>>>?>=8344320012334567899 !!! ;<>B$%$C<8557=C%&&%$#"   ! ! !! 543233455443210//.-,)+*))+.1344332223322344455444579 !!"##"! 7665566554333876554433232210/-+(&#  "&,1332210//...--, ++***))('&&'()&((''((&%$"!"#&)+--,,,--../000//136899:;::;;;:98]98658@K+2FR\[PC=@JYm=@@AA@IABCDHMSVTLBmVHDHV6CS]]SBgVNMS\dkmnmha[VUROMJE>:;DVnCLSW[ZPvR]:% "#$$%%&w'&%$%-=<>@At^CdM=3,*+0;EG@5+%$##""! !  ""#$$$##%,=S5>EO^sFQZ\XRJCzoihko;?AB@>tjbUD^?,%"""#$&%$###$ ###"!  ! Z! !!""#$$(+/.-//.,+**('''(''&')+/9*:NZ^ZO@]B2)$""" %2K8Nemopmjgghfcb^YWXZ[^bd`WFdH:5 44433320.,*)*+(&#! 741.-.13579: !!    "###"!!! !!! *  !"#$$%%&&'((''&%%$$###"""!  "#$$#$'+0354322110`^[ZZ\]^^^]]^_^^\\]`MIGC@>>@BB@?>=<:86543331/..-../0/.-,,+,+*+,./0//012345565421/,+++   + +   + + + + + + +  +         +     +  + +  !"""###$($%++*)(&%# ,*(&%d&&''&%$"!#&()"$$$" ,($""$'+.///00/-+*-12220./0110.-,,-/02        +  + +   + +     +   +     + + + + +  + +   +    $  +                      + + +   +      +  +  +        +  +  + +  +    !,8%1@P/46890''/:AC@940+%#+20)! '1=#%%&&%%$%%%&'*.354.&;+$#&/(3990%6,''+16;<==:620/-,*(% $.>'.37980A)) + + ? #*,)''-$.8>@<4+%'.6AILI@3+'*2=#$##$&'C4"0# !  + + + + 7 + + +  #!'0=&-130+&#>8669< #%&'''&$C=6-!) + + a   *352*( + + +  + *8>>>=;9::7320.-/1358971&0 +  + +   +   + @@?>>>?@A@ABCDEFFEEDEFH}~}~}~}~}~}}~}~}|}|}|}}}~}~}~}~}~}~}~}~}~}~}~}~}~}~}}~}~}~~}}}~}~}~}~}~}~}~~}}~}~}~}~}~}~}~}}~~~~~~}~~}  +,Ľ 6~¾ȄÆω ö:Ą?܅ ʇ6݄ۄȄ„ÀB $ "  ,""!  /; f.8  0þ߄'̄ʀ􂋒򂊕ƸԪɹಛۍ삇㽠邎ƽԵ _퇉߃ϭ̱о倌СM0C[VRPNOPQQQRSTUVWYZ---,,VSRR**+ **+*))(PNNNOPQRSQOMMNP)))***)(''&'(((''()+***)('%#ECA><9877788763/+(&%%&'))**++**)*++,-...-./02343444333221121100023555455543568;<=<; <>==<;< !!""!!"! !!"""#"!  !!"!   <;:9762/,*) ()*+,.012333455677788875420-,*)(&!'(())+,-//011234445566554445567654 3210001223 22333443211121123345+321112469;<=<<;:89:<>?@AABCDEGIJJJKK&&'()*,-,,-.0245420/..//0 +/.,++-/0.,+8,-,WTQMHB<50,+**))(NLLMLJGEI'+/23334544321/-,+)'&&&''(*+- /268::73/+**,5+++*ROLJJLPS*++,,-.//.,*OKHIIHGDBABEIO*-/134567787789:;<=>>>??>=<<;;;::989:987789;;<<=>?@@AA@@@???@@A@?>==>@@@>===<<<=>?@@@???@@AABA@?>=;:987889;;::;<=>??@@@?=<:875310 12233456675421/D../02456776531.--.0122233322233320/...///001222100//000/..//0///00/.-..//000/.--,+++,,,-.--,,+***)***)('()*+,---./.../0122210.,)(''()*,,-M,+,,..///0/.-+*)))**+,.012345689;>A!""#$%&'''%"93.++,.14689:;<<;:88789:;;;::9:;<<;  !!   !!    :::; + !     !   853468:; !"!"! 989< !""###"!  ! ;978:<=>>??>>= >=>6<:86556788864320/--.-,,+,-06>I*,,*'%##%(+-/.-,+++,--,,+,-,+,,,+++*)))('&&&%%$#"! :987767667788877654445665554545433455544333444566543222334343 444555444556755567877765545454555456789::9:::998887 88999::998776765789:987766656656555654345 +677765789:9987654 55544456777889:::;;<; <<<;;;:;;<=;;;:4345666567789:  !!"! =;864I5554311369;>??>=<<=;;  !!!"##""##$$$#""! 65432212211000110/.-, +,-/012234434443344457 !!!  4321123568898887654443222110/.,*(%#!!"%)-023210/...--,,++**)***)('()'&%&&'),/001123345567789;<>>>=<<;=AJS/59:<@CFKT_j:@GPYagjknrw{~@BDEGJMNNNOQQOJD=6VE<>L`:BIOPLHHMT^ff_Q?\B2*R-5BMU^edaZSKEBABGMU\bgmPs{@BCA?===>?@BCCA=:99:;:8h`YY\`a_\XPG?>AJVdo;=xqg_WSQPPLD=TCKQSQMF@?ER`c^XV\i=DHLOQK@hZTRM@1E3)$# $%%$##""!!  / !$,:P2558D[9FOUURMGDCEGHFB?<;>BBvcOC92Q?0'$#$#""!!"""# $$##""!! !""CA?=<;;=!&,39?EIQW^b]WPKKNQUYa8>DIMUfzEIEwocWKA>AIQOH=66:@KYj=FMOOMLLOQQOMLLMOPNKGEDEEkLdD:8864210/.-,,*)(()**+,,,+*)'%#!:5 +200135689:   !!!"! !"#$% $$##"! !" #%'+./0110 ][YXXXZ\]^ ]\[ZZ\]]^^`_B?=<;<>?><;::5210 ***+,./0245554431.+))(    +  + + + +  +  + + +     + + +  + +   +   +     !!""##$%%&&%% 0/.+(%  ,++,,*((*!"$$"(1.,+*+.01//0210.,+*,.2 !"#""! ! ! !!""#$&'''&&%%#""##$%$$###$$$#!!  "#$ #"!       +  +     +   + + +   + +  +    + + +  + +  + + + +  +"  +        +              + + + +   +    +       +  +  +  + + + !!$&&(,29#',28;<;<=ADG$%&&(+,-,++,,*&"(&4!',//,))-2:@@;1$2!$!(.58740*&"!!"&+058;?CH%''&$"!!"#%&?'&%"  ! :510245531,&! $*2:A##D>71-++,,)$$2A).132/(>,  :*!3J+.TE4(!"(,-,)$! #,4630.3<#),/12.%;2/-*! + + + +   0 + ( /'-0/-*&$%'))(&#!!#%%B6) $ + + j !&*.0.*&##%')-4#&(*.8D')&E?;5.'! #(,+& "&,4>$)--,+**,..-,***+,+)'%%&'J;'. +  + +    * +  ?=<;<=>?@AAA@??>?@ABCCDED}~}~}~}~}~}~}}~}|}|}|}}}~}~}~~}~}~}~}~}~}}~~~}}~}}~}~~}~}~}~}~}~~~}}~}~~}~~~~~}~~}~~} [H # +ÿɽ4̅z +C҄ЀȄ`Ąτbþ¾%3#  ,Q셐#! +##CńÄSľ*#8üބۀ臠˽ץ񄐖Цνµﺞ،<ꀎӥѺSؓ⁎ŷ±ΩʂϺʱ)  +0QPPQRJSUWZ\[YXX,--,+++,-..//.-,,+**)(PONNOPQQRSTUTSQQQRTTSRQQP((()*,-,+*('''()*)()*)!('&&%##CA=:899988777652/,*)()*+,+,-...-,,+,,,-./13454445554322211234689:987 656777656679;<==>==< +;::;;<<<;:9:;< !!"""!""!   !! $;:851-+)('(*-/000/..0246799840+('%$" !"$%(*,.///00111234655677654 333444220.,+*,--../012333456677656667665456677789:989::9889:;<>@BCCDDEF#$%&(()* )(&%%&'()))((()**+++,-.///0243/+)**-021.RJD?;988630-*('()))*+-/01.,++**))*++,-..-+,-/0123343210/..-+*)('(()*,+*))('JHIK'((()+,,++,-/256667876679;;<===>?@@?>=>=$<<;;:;;;:974100///0121100024568:;:::<;;;<=?P@AABBBCDEFIKMNOONMLKKKJIIIJIHHGECA>:878;=>??>=<:976542112343211001357765432210../012233468875321//01110//.-./0012333210//.-,,-.//./..-,*))*, +++*+,-,,+,+*))*+,-.//01232\334321101121.,)('')+-./134544321/...010.,*)**+-/02445566789:;>A"###$%%%#"!A=82-)'()*+,--0357877789:;<<<;;;<=> !  !!  <;;;  !!   !!""!!  !  !! !!"!  755568:;< !"# ""##$$#"! <<= !#$#"!!!""#"""#"""! "#$$#!;<!"!!"! <<!#$%$"! <8544554 67998742223432127A(-0/-)&#"!#%(**++,--,+,-,,--..//...--,+**)('&'(()))(''%#!=<;:987767654456554445454544565443322345434567765676 +56665567776555665543434556799988899987678788875678899:999:999:;::9889 88877766656665566788765443 22345443323 +445677677655544455;:98765566788899:;<<<;:9989:;:;<;;;< + 9 89:: !* ===;9875432233210/---/01000/.--,+)%()*+-0478876421369< "##"61-,+)(''&%&(*+,.013578: 54433443210/000///./0223334 5567655443 4566!!!  + + + 76655421//134567465432110/.,)&$##%'*.244433444210/000/.---,,,--,++**)*)()))&$#%),.12234434679;;?ABBBDGKLLLJIIHIIE?8fdl=DIKLMONNNPPK?_C/MM,.TF??GW8CJNTavELOQROI~ADFGFEC@se_c7>CEC>k\?SRX`dgmsn]E3Z,/599407IZeec_ZNB<>GUalpnlmr=AEEB>vk_UNG9V:,'&&&%%$"###(6O;QezEOUUNgH3T-=<:m`SKLSY[RCbG84431/.,,,--.00/-,+,-.//.-,++*'$!9876556788  !!""! !"#$%&&'''&%$%$###""#"""!""#$&'),/110/..---./00/\[ZZYYZ\]^]\\[ZYVTR<<<=? >>>?>=;:*,/121245655443330.+(&   +    + +    +  +            .+%!3 -,-/ !"$%%&''&&%$#"! "###$%$$$%%&&''()*,-/12343210$//0/.,+)'&# -'      + +   + + +     + +    +  + +    + + + + + + + +  + +  + + + + +  + + + +  + + +  + + +A  + + +   +             +     + +        + +        +  +   +  + + +  +5#,?(298667740,,/49=?<83126;A"$$$##$'*+,+)(&!438!&)+,.0//023/&6#')2("!$-$(*09E).//0.)IE$')*)('$?514"&'&"8/**/47:?EB5%,*5;:850("&.6=@=<>B$'((&$D=60+&% 3 -#1>J).22-K6#'+034542..5A&)('''&KF?7- ( + 6"*6"',.01112232.("4(##'*(" $"       + W +  '6?BD%(,15631,&BC'-/*D824:C%+17:84.(&&())(&$""! :2*&&+02-$2"     +  =;:;<;;;<=>???>=<}~}~}~}~}}~}|}}}~}~}~}~~}~}~}~}~}~}}}~}~}~}~}~}~}~}~~}~~~~~~~~}~~}~~}~~} [ׄޅ@N̈́˄ȅÿĆɅyľEń'τ܅Vʆ ȅɅF¿ɅĄ-   Mく# +  V .W!:5 Aτ?Ր󃊏Ծ싡õ̲Þùȶཥ󅔨А1»Ǭ߆˼üŻռ K%UTSSUVXYYYZ[]_``_]\]//.--,-...--,,+*RP3Q)***UVWXYYXVTSQPOPPRSTS)(()+,,--,+*)((())(('''()))*) ('&$#"CA><:876 554321/,**+,,-,-.//..---../0123322112121123332234445556665556667789:::;<<=<;;98 9:;<==<<<;;:9888998876556789:;< 9:987667889:;8"7531/.-,,,./02211011246777642.*%##$%%&&&')*+,-..//0/./012221/1221/,+)((())*+,-.//0123456678:;;:9876654432346765 +444333456789:<>?@AAABBBCCD#$%''(()((''&'')*,+,-.-,+,,+*(&&&'((&IGHN*-+KA:65431/,*)(''(*+,+***+ ***+++**)('''&%$$%'(((''')+-/013433320/.-.-,,+7,+*'%$$&()*++*))*+-/0112245689;<>?@@@?>>??@BCEFFEDB@?>>?>=<=>?===>>=<<<==<=>??@@?>=<<;:99;=?ABBCCDCCCBBCDEGHHIJLNNMLLMNOPPPONMKHEB?<:9865565542110110.---/01101123456 54431/...//..-.//.---.//0//.-,,,-./.- ./001/-+*)))+,+,-..---..//13566778765433210.-+*(((*,/0223433221//. -+)('(*-0357898767789:;;<=<;962/-,-./0121122334689;<;<<;   !  :;< : !   !!  !  ! !!! #!!"!! ;:;777889:; !!"#$%$#"!;::; !"#$$$%%$###"#" !A?=9647>"$$%$###"""! !!""#"""! !!"##"" <;:9875433234689::;:74322210/..1;%+00.,)'%#"! !!#%'*,-..--,,-..-...---,,,++*)(('&%&'''&%#!?=;:::99766566565667654566655445677766544455433445544433455656655654566556765456665 +6665544455456667778 77665566678767765444567789:::9::9:::;;;::987667677665655432110124554333444455665544566765566656 9:9889:::98876777889:;:9:;;<<<;<<<;  !  !! !!!  !""!!  !"#$#" =96310001345544433466543212210/.-,++**)(('('&'&%&&' &&%%%$##"""!" !! !!""#$&')+,.0135 !""!   4332234322210/../0134566654556655442223334579 !!!  086430-*('),/25777654321/-,*&#""$',27998765432100/0/.--,,,-,,,++,++,,---./145 68:<>@@?>==>??>@H2VC_wKOQQQPOLIECBBBCCB>tkefm:=?>>ADC@vnihn=FNOOOPQQPOOQTVWUNE;kj9?CFGJJDKQPJHHKPWWPGCGPX`i9@EF@nYIEK[gcUA1PHJPUY_ddce6:87h^TPPQPNKJJJG=bI8+$""$%%&&%&%&%$%+$###FEDCBBCBA@ABDE&.=S6CKRVYXZ^foyBKRZ_^ZUQP7NJ@m`\_fntssuth[RQZfnpjaYWX[[[XTPLJLOQLE<3./6?<1I:420-+*++,,--.-,+**+)&">74456788 !""#$$$##"##$&'('&'&$%%$$###$%%$$$##%(+02455421110/-,++,-.\\^^///0112210^\ZWV@@@ABCDE FFEECA?>>#.-,---1357999875320/.,+)'   + + + + +   +       $! $$! !"##$&')*)(&&%&''(('''&&%$#"!!"#"#2""!!"##$%&&'&%$#"!!"""!!"%&'())*+++*++,,-/001244432332100/.+(%!     +  + +        +  + + + + + +   + +  + +  + + + +   + + +  + + + + +                     +        +   + + + + +  +  + + +   +     , + +  +  +  + + +   -'9GP+.0#/-*('''((('%C<8:?"##""%''$A;87<#)././1341-&89#')+--)#@<;;7.#(!!,&.5=CGFB??D%&&$#$&()+.01.)%#!@@A@<3)#!&/9!"?6/*&",-#+.,)''*.33.&#&+/4: %()%=.%#)4<9- %@"$(,058756!%)*)('(,6D)01,$@93,('+17>BFEB><;70$$ '  ' (4&:3/-.010.,*('(+-+&!  +    + +   + ::;; + !!BB@??}~}~}~}}~}~}}~}~}}}}}~}~}~}~}~}~}~}~}}}~}~}~}~}~}~}~}~}~~}~~~~~~}~~}~~}~~}~} J$F˄'ƆÅEUt¾S',W《KP +N\ *'ބtO) ۋϜ퇖þě쀋焉Թػpѿ˨󁋒өNŕƺŻىпϸȳӄľ +FUSRRSVX[]_`bcc10_]\..--,,-,+ +,,,WVUTTSRPOOPPQRS*+,-...-,+***))('&%&'()+,*++**)(''%$"C@>=<:988776654321/-*))*,-...//0/../010122234445%66545787755579:;<;;;:::;;<=>==<;;;::9877888787 +6556777899:;;;:9:::;;;<;;::987555676655665554320//.'/024567654457;==941.-,+**)('((()*+-..012010/..-,+,++*+++,,--...-,,+++,--./011000-+))*,.0123222334322357887532112344567776543345545565%789:;<=>?ABBA@?@AC$&()*+++))*,--+**++*+,--,+*) '%FB@?>=>?BFIIFB@>=;8520.--,--../.--.//-+)'&%$%%$#! #%'(()**,-/01245788777677876'54432223433310/...//012234445678999;=>?@?><:987778889::;;<<;;:;;<<=>??>>=<<<;;::87789:::;:;=>?@ABCEFHIKKLKKJJIHIJKNPRSTTRPNM3NNMLKKJIHGDB?<98653222367876431/,*))+-03332100/-,**)*++,--.---,,-...-,+**)((()+-./0/.,*)())*))('''(()*++,+,,--.//1356765677667887654420../.-,+*)()*,/14543310//00/,))*+,..+'%%'),/36:<=<4;940.,+**+-/134566789:;;;<>940,**+.0356778899:  !!""!  ! +  ;:;;<==  <<<  !!!  !!  ;; !! !"""!! ! !!"! 99 !!"#$%&%%$#"! <<=> !#$$%$##""! !!""!?:3-))-8#),+))(('&%%$#"#$#"!<;< !!!"! <:8789:98754212365433320/15B(0452-)%$!988:>"&(+,+++,-,-,,+*))('(' +&%" =<;:98766655445444555443345664445566556665544467767876 544443334 56766543334565676667776665444556766545456788988776667887767876556665679:;<<:9:988765432345433455545566677787767 6678988989987899987887789:;<==>>=<;;<;<<===<;;  !""#$$#"  ! ;:F;;<===>>?@AAA?=:87898753210012355566789:987789:<=>=:8665433210.-,++*)(&%%&&&%&'''(())*)(('&%$#".##$$###$%%&&&%#! !#$&''(()*-26"#"! $876433455445431/,+*,/244433222323345443223468 !!! !!     7641-+(%##%(.2576530.+)&$$&+168 7644332210D//..---...-,+**+,-../0123456789:;=?@AA?=::<>??>=<;toq>@BDFFBr\?YA:=?=84330,'$""#$%%$$%%%$$$%&'(*/597542/,)((()*+ **+++***++**)('%"<9778899: !! ' !!"##$%&&$"!!"#$%''('(('''(()(('&+%%%$$%%%&&&%$##%(,0468:95/,-/0/.-,+,.011/\\/ 012455542b_[W$?=<=>@BDFHHIJJ$"BA?434433321/-++*)   + + + + +       & !!  !""#$#""!  !   !#$$%$$#"!!!   !"##$%$%%%&&'&%$#$$$%$$##"!! !!"#"! !!"#$%%'(*+,,./12110001*246766788875321001110//.-,*)'$!   +    + + +    +  + + +   +     +    +   + + + + +   + + + +  + + +  + +  + + +     +  +  +    +  +                    +     + +  +  +  + +   + +      + +   +  +   + + + + +*BOSNGDF'.2345677665420-)%"<3/.5!'*%7)$*3$)-120/000//04:;5)=1,)+1:D',00+F2!("'&"#1BN*+*NB7338#',-,(%"<82r--7#&G8-(&)/59=@BA8-#-)&+"*,++,,)",%%-)0.%"-8?B>9531.'! %,233100258:?@9,# #)/12358:;?E$#A==!&)**)))I:*$ +   : 53ER*)+.352+$ 77 "#%&'((%=/&  !$%$# @**3>GKKG?5-% "'+/12-$" "&''!$(**)('&&!,2)"       4 + +  + 77!"###"DDCA}~~}}}~}~}}}}~}}}}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}}~}~}~}~~~}}~}}~}~~}~~~~~}~~~}~~~~}~~}~} R 0݄" 8Eʄɀŀž7Ŀ ÄP¿¿ ˄ʀþ  -W"1΄9䆗& + 4*# ;'#8qʾ>29ſӀф񒭻¬αͿϻȮᑶ̼•ݯׄӽ"񂌓忠͵\ߚ¶ì˩ƹ݁ڷҊ肐ɹք̽й  2POOOPQRRRTWZ]`00//.../000//0"/..-...-,,YY[]\ZVSRPOOOMKHHHKO)*++, +---.-,+*))(''())*++**))(('%$#"C?=:87665 4431/-+**+-.010/...//01233212344434333445454 555667889::;<;:999:;<=<:86421 23445567898889987767776667877666778776788767877665421223210..-/13445565420///../012 33567643321001110/0122111210/.--,--./01100111234321000100/../01012212344433345434"56665433234667778899:::;>?ABCD#$'*, --.//.-,+++*)6(''(()***)(('&%%JIIHHGFEDEECA><:8520/.---.---,--../.-,+*)())*+,-../00124666776532334455567887778(766655667887765689;<<;:999::;=>>=<==>>?@B@ABBBA@@@?><:976432110/./0122210001234445567789:;<<=>=;;;<=>>=>???>==>>?@AA@AB!A@?>=>?BDEGHHIJKMMOONMLKKKLLMLLLKJIH-FFEHIIGDB@?=<:852/,++*)'%&'(()*,./.+)((())(('&%&' ((())**+++*('&&%$%')+ ,-//0122111010///011243210/.///.---, -.//00/.,+',,-,+)((''&$"!"#%(+/36:<<;::;;;:62/-+)('()*,-0469<>A!!"""!93/.-.0235678 !! !  ! :99:;:999;;:; + ;:;;<   + !!!  !   !""!!  !""#$%$##$%$#"!  !!"""#""!!! !"##$&'&%$#$#$###"! ;;=? !##$$#!?;86678887643)43210//0110//3>)142.+'$ :9876544358>  !" !  !#$%$$$%%%$#""##"! ;:;:98 999:;< !"""# $$###""!!! !" !!  - ;:99::9864323344456899887652.+&" !"##"!  !""#"###$%&''),05: 8754210/../13577654333445676554 55567 !!!   !!!       "6531/,)&#"$(-36899986420-)&&*059;;:97543210/.-,,,-/001223456789:;<>@AAA?><;:=A"(0s\JCHUfv~wk`WPOVcouurq:>FNVZWjM?hYM>\>./?/F[a\QKLU`ghjntxyoX?R6(#%0H3@EJOM@aLFFMU/48;BGLQWXXTNH@q[F6/,+)('&k%$$#"@?"-G5HW[VNGB?:3TGCH*1689ABC!! 568;;9643210/+'$""#$   + + + +       "!!!  !""   !#%&&'((('&&%&%%$%%&%$$##"!!!" ! !"$%%$#""#$%&%%$%&'())*))(&&&%$##""!  ! !!"#$%&&%$ %%%$##$$%&'()*))*)('&%%&(*,-///001233210132"10/.-,+)('(('&$"    +   + +    + +           +  + +   + + + + + + +  % + +  + + +              +  +  + +  + + + +    +  +    +  + + +    " +   +  +  + + + + ) ++ .A-:>:1*%D?=@$*023201232/+%<.&'3#/76/'$%*.12467741/02321,%;/'!#.7:757?I&F6*$'0;FLKE=5-('+4<@?=<#(/474,"7-&'&485.*+/589:>CFG@1 & #$(,/.$0# %+$1?EC=70*(*,,+)(*.3<"">4+(+2:=>=<===>?>=:9>#'+-./.-'?."$ + + + j (":/DV4::50+)))&# :51.+)%  %+,$ "#"! '-48;7.%!$-"#$'+/3540,'#;- h  !&.0,&!& "$%&),/.&)"+$&'-*".-+)+ !( +   + +   + !  !?=<;}~}~}}}}~}}}}~}~}~}~}~~}~}~}~}~}}~}~}~}~}~}~}~~}~~~~~}~~~~~}}~~~~~~~~}~~} 6= 'ӄ9 E¿GĽO +YùJĿÄ ÆÄ¿rC"ea􂊎7 13 *# / PO ¿ꃔ򁍝ལж熚ݺതՇ־خġ^ڳ㸋ѳr鋵⇖޼킖ǿȻ󈠲X̉ƼŪֵ㋚Ũķ߅˳݃޼!# PPQRSSSUWY[\^023320/.../01221/. /0110/[[[ZXVUTQLHEDDGKO)+-.//.- +..,+**+,,+)*)))(%#"""CA?><;:9887 6531.*((,/00//..-,--.//.../133223&23456788877667775579::9887665444578999:9:; <;;;:9998754 +31/.-./1245 +66655677667667888788765565667667765566776654322210///0100/.-,--.-,+,.147:::977765 433321100/.//.--..-++,-0234310/../12231/./01210/.-.///.../012100012 1123454322234 33455421112334%578876554458<;:&9:<;:86443332100/.,,-.../13469<>??=;:87 +889987655546767776542100/.,*('&&'())**,./145788654532/.0011100//01010//-,-.//00///0121000/0 11123332234567889::;:;<=?@@??>>@ABBBCCDDDCCBBAKBAAABBA@@AAA?940///0256:<>AEGHFFDCCDEEFGIIIKMNOOONMLJIHGFEDCBA@@?>=<;<=>?><;+963/-,+,-/00/.,*(%#""!!"""  !"#$##$%'(('()*,./$0012310.-,+,,--./00/-,**+,-./.-,,-./0//.--+*)*))*++,,,+*I++,,+)('(('$!!"#%&),/023457898630.+)&$""!""#$%%'(*-0347:=? ! 9531013456678 7 !!!  !!""! !!!"!! 8899:;;;::;::: +  !  !! !!!  !!!   @!!"!! !!""!!!  !"""! !"##$%&%#""#%%$"!!"#%&&'&%#!>=> !"!  + #'*+*)(' +&''&&%$$##$ +##"!! !!"I#%&%$" <:98789997666777667876421100///0.+$ 3G*,,+)'# ;87654433221226=#(+,+*(&$$$&'&''( '&%$"!><;9888765677665454445654455665543454445433344456554565655444544345434 56778999899987678876 5545666789::9878876543444344321223222334455587678887778777665456789886656666667898889:9:9::9989:;<= "#$$%&%%%$$%$#"! !!"""#"!!  ! !!! !"###"###"!   !!!71-*(%$"!!  !"##$%$#"! !""%'+049 !!   7654310.- /1246776545456667776654445577  ! !!! !"""!!!   17641/,)&$%(-25679741.*((+059:;<<;:976554310//.-,+,-/134335679;<=>@CGGEA;765::=BGLORTUVVUSQPPQSVWWUSPONNLG?jWHCFKRYbheUF@FYrDGC>wrlfekswxwrkd`j?KTWXVPG=m]L:P8/1B0BLNMOSXchcVNP\mvpfN5C.**,+)(.>/JdjQ4B5?P07@K[o?@sd[ZXTNIGHMT[__\YWTQQU\dlsw=?@A@>;ln?JMIDBAA?|~}nS6@+! !""!!!  r999888:=@BDFHJMNNLJJN/@`GkDPTRMIIMRWVOGA=pcR@4ZRO*1?IJHHJMLGDHVfppia[[ad]MB?>>=COZS@a[5COTRMMS[ZMpSE?70+(''&%&U%$#"A?",A3J]ca]XNDA?:]D4/4E];B>4O>53:L5?;^D2*'&)7P:D<]E89F0>??@AAA!!"!  + 78998766542-'"!  + + + + + + + + + + + + + + +       !"    "%(*+++)(%$$%&&&'(((''()))**)))('&%$#""     +  !" !""#""#$%&'))*+,,---,+++*))())('"!#&*,. +//001123456(5420.-,+)('&&$#""!  !"!   +    )  +  + +       + +  + + +    + + +  +  + +  + + +   + + + + + +  +  +    +   +  +                 +  + +    + + +    +  + +     + +    +  +    +  + +Q  !!)**0%.7=>?@?BF#EC?==:9;=!&.2223652.+***('$""%(+./0010.1344321100.*$<.%"%+16::>DFGFC<649"*14555442.(#>5*$%,,*+.29<6-((07&*>B0'#*5B&%B8332/+'.%&*/46630.+*+/4:@BD##$%$# :;$+-+(''&$GII?- +  d!"! #!7+A)//-(&&*/33-(%">5*(#" '((()++&%)3>ED?9548;7,#  %.61#1,$+/-**.33*9' P  + '4973.)#!)+" """. $"(" $  + + +    +  ?<::;}~}~}}}}~}}}}~}~}~~}~}~}~}~}}}~}~}~}~~}~}~~}~}~}~~~~~}~~~~~~}~~~~~~~~}~} BmI^¿Յ.7Մ…XӅ؅¿€ 1)&H¾ " . "50 A,ĿĻ󁆊̱ɳS̳⷇ɧTᓰ狓ǿ񀊒СDz{ӑƺЩ̯ԿǴ{愊ο󅋇ƭ캞˼ +&&RRRSTVY[ZYXY\01356542100///000/.--./012+0^[XWWWUSPNLIGFEFGJ'*,..//.,,-.-,+)()*+++))() **++*)'%$#DB@?>=<:987654320/-+***+,-///0123454567876656 54321011245567 88899:999:988877678987642/-+***+,-.12455656 78887766434310001-2233455544578::987668::8520/.,+*((()+-/01100/./013565432210/0123444566544332211001110.--. //0//...-,--./0 112333223332110123445432211223444322346789::=C%(*('%$%&())('()* )(&%GC?<97654 679;=?@CEFGFFFEDDDCBBBA@??@ABBA@? +@@@>:7431010/.-,+,,,+**))(('&$##$##$$$#$%&'(*+,--..-.//00/...-./012100/0121234 +3321100023433467:;<=>?@BCDDDCBUAACDEFGGHHIKLMMKIHHE@;731/-,-158:;::8778::878;?!!!"!!!   !#&*,-+)***('&%$##"!!!#$%$#" !#$%%$"! !"!;99887 66676667765321 0/.--,*&"#6I***)(&$!976654322346=#(,,+**+,,,+,+++*)(''()(''&'&'''&&&$#"! :98777667767654545434345444344545 6765544556554565 66544555443454556655667899::989877787776678:;;::9987778887778887776566655543 444566676655677766556587877899: +9989:;;;:::999:;<= !"#$%&%$#"! !"!"###"!!     66677` !!"" 4.)&$##"""!!  !!!"!! !!"#$$" "$&''(),/246679::988999742/.---./0247877656788 !  ! +""###$$$##"! !  O55431/,(%$%(-13457::72.++.37::987655544421//.--./00124579;>?@CFJT1=[@LSX\^bd`XX]dinu}BEHGDyul^K9S>1+'%##'().@=mehqyCFIHEDCCA?wqq;@DEDBA@>sbTKE?:=GRPHHTiz}saOGL[kjT9G1&#$%&&%'2N:NVL8XW3756Fc@GBqaZXWUPJGINV\^]bjmkfaadgiin;@EFGHIHEA@BGIF?cE]:,%"   p::986556895,(')***+0??><<= "###"! ;9887630-*'#   +  +  +  +        !  "$&')*,.-,--,+ *)(()*++,+ ,,,*'%#"!!!" #$%$$#"!!!  +  "$%%&')+,+*#)))()*,-.//00112331100.*&"!#"! !"$&).1345543210.-+*)('&%&'()++*(&$#""    +         + + + +      +  +  + + +  + +  + + + + + + +  +  +    + + + + +   +    +           + + + +    +   +    +  + + + +  + +   + + + +  ' +  +  + +   + 0"(+,./241--048;@F%')(&FB?:2'& )'-5C)/34532124651-,/451,))-257630,(H@962)./!2F)L>50.18>@=:=C$&$@:;9;<;/#%+03/(" "$# U + + %(! ""#! !&2)  # *-*%!  +  +   +   >=<<<=}~}~}}}}~}}}}}~}~~}~}~}~}}}~}~}~~}~}~}~~}~}~}~~~~~~~}~~~~~~}~} 2C2.߄ ++;&%.օ"núE7& ,2@ޅEþև5K/ ѿ + +%%ƥセꟹſ񔭺͸ݺçޫ꙲)ϲǯӪ󕨬亠ùǗ㵫Ƚ b㐶˽䏴Ƚ𑫴īƸö%)#0VVWYOXWWXZ]012344320///000///00/-WSQPONOPSWY\.[XWVVUTPLGDDFHIKM(+.1331.,**++,*))((()*))(()**+2**+*)'&%%$$#"!@><;;;:866654310/.-.../012345553212343234443335667787655433456655456888767778889:::99899887#666788899988765444556655430//.--./1234 555432211222123210/ 00222333221123'23458;;8531//...-,,,./0/.-,+*++**,.0110.//.-,,+,--.01234442122333434210 +/..--,++,,+,-,,--..//01000//. ///0012334432'11100/../12344455679<>BEHJHEA??ADF$%'()*)'())('%$$HFDB?:89;>CIKLKKLNPQPOOMK_JGEBA@AA@@?>=<:9::988753320-**))(((''&&&%%'''&&%IGEDEFFC@>==>AEILKJIHIKLNQSQNMNNOPONLJJJK&(*+,-./01100/...--,,-../000/...-,,-//0110.,,-.//0012132220///0112223566788899;<<==>>>=<;;=>@ADEFGGHHIIJJKLMLJHGFEDDDEDCA?>>?@BCB@=:7569=AEGHGFEFGHIJKLMMKIGEDCB@><:873653222457998765566640-*'%$#!! "%*/342/,*)'&&&'(*+-.-+)('''(()*++*)(' &&&'''&%%%&'))*))()*0+--,,+*++**)'%#"! <:!#%%$$$%%%$$%(+./010.+(%#"! &!  "'-352,'%&(*-034678899:;:99 !"###"! 9:;<<;:::;;<<<; !!   ! !  !"##$##$$$##"! <954469>!"#""!"!   #&*+*))()))((('&%$#"#b$$#"! !"$%&%$! >;8779::9998876543320//0122333220/-,)&!!6)22.*&#"!!754456676543237>#'*,,,+**)*+* )(''&&&''(('''&&%$#! :9888666778776554445566776676545554343334567664333454 5444334443454433344565656 +776556776654332345543344543234456 +777889::;:987 88876667898788877799987776665455432122233343234566787654565666678999:; :::;<<=<= ! = !"!  78 +889:::;<=<;5337999 !!!  83.)%##"""!  !3#&''%"  "#"#'-4;>=;:999;7421112356898899876766679: !""! ! !!! !!"#$#"! !   !55320.+(&%%%'),.15:94127:987665665421///1245789:<>BMX4DVnIZjyQYUKz_RRXclrwyvs>IT]dc\M@qf]SF1@,#!"#$%%$" 944 87iQcijkjhfdb_ZRIA?BHLQUX[YRI@o^RIDC@9X2CBS8HRXWWZ^ep=AABDECBDHJGDCCDEDCB?q_PJLQTY`hnpsw{{y>AzhSD@CO_vCBymdZLCA?3H0%#$'*C/;^FTXQJGFD=63?XsDEB>rhfl;@@AEJNLIFC?wn^M:M4$ ! 98776520049@FHJLLKKJHEG.KHvQab]UQPPOIC=<<<;;?EJKCnTC:=J]r>ztty{zxwteUOVgv{dG_@5138>>8.(%#"""$')+,,-/1/+'%$$%&'&%$$$#""!  !a =:866546 $(,/4E2HXUDfL>:G3IZ_\XRKDBHPQB`G:67669AP^20WOMT3@D?3QEFT9KSNAeJ7.,19?=7104;>=81,(&%%%& '(()))*+,--,,+**)(('''(&#     !!"$%&'('&'&%%%$$$%%$$%%%&&&'),/2210/+&F#(/220//..-,-./001110 +//\[YVTTTV<;;<<:9989:;< !"""!  *86532234678::864332-)$     +   +  +        +   !"#"'!! !%).2333444589::;;;986421/-+))**++***(' &'&%%###"!.,*+)%"! !"%')*)('())((()))('&%&%$   !!! !"#$%&')))()*+,../000134565431110///.,*))('&'(('%# $(,.//..-,++,-./0$122111/-+*('%$#! #          + + +  + +  +  +      +    + +  +  + +   + + + + +   +   + + +    + + +    +                +  +     +      +  +   + + +     + +  +  + +    +;*5?FJO.2/)?/)+/59"*29=<7-%A:5/& +    C6BFFEDA?=;95/(#"%*.147962-&A6.)''% .))021247;B#%&&'''&(+,*(&'())(&$>3*')-049>BCDGIHGGHGG$&H70'" # 3)473-*)'"$4E))'$"D@9458>A?<=BH&&$B<:>#%&'*-//-*'$C<1& + + +  [  !"""!  *+I1:950.--,'" !"%)++$8($0>"B?ADEDCCA8.*.9DKH8#*   + +  + # + )41%3#")4740*%!!%**!,5(1(!"!"%(-*!/    + +     +  +;:9899;<}~}~}~}}}}~}|}}}|}~}~}~~}~}~}~}}~~~}}}~}~}~}~}~}~}~}~~}}~}~}}~~~}~}~}~}~~}~}~}~~}}}~~~~~}~~~}~~~~~~~}~} R +d(zυHN¿I2݉'¾ۅz:#%ƿ招2 A +3  ̽#2 &¼􂅈؃뇐ʼ̙屚ܢơɧîظҨ6澔¬hƉ选Źij釠惌Ῥ + U VY.1576432235677532A110/[WROMLLMMMNPRTVY]011^YVSPMIGEEEBBEL),02210/-,+*))*,--,,,---,+*+++*++,+*)('&&% $" ???>=<:88765310/.,++,.0123443443234554456543210//.-.01344567877667899::998778887 666777877654344556676 555421/-*'&'()+,-./01223 2223221112 332334443334531/.-,+***++,-/011/.-.-,,,---,--./01011122345431112110/---...-,+*+,,---.-,+,-,,+,---.-./01211234544565 4345677764565569=@CF$%'(()))() ((''&%%%'()RQPOP%OPRTUTRPNLKJJHHHGGFDCBA@?>=;8543110//.G-+*('LJJKMNNNONKGDA@><;;;=@CDDEFHJLMMNNNMMLJIIIJKMNOONNMMMLLLMLJH$%'(*+,-.///..-.-.-.//0/010/01123456776677788:;<===>>>? ABCCDCBCDEFGFEEFEDCCDFH GGGIJJIHIIIHFDB@<740.,+-.247;>ACEGIKLMNOOOMKIHGFFEDCBA?>==<<:98 +9;=>?@AABA@*?<:62/,***)('&%%$$%&'('&%&'()))())((())***)('&%%%&%%#"##$$%&()**)))((()*+,-/0.,*)*+*'$"! !"#$$&(('%$##""#$%&%$##"""!!  !"##""!!&-21,*+-/012345667 !!!  !!""! :;;:9:::9: ;  !  9;   !"!  !"# "!!  !#%%$ #"!!!"!  !"$&'((()('&% $$$%&&&%%%$#""#$%&%$#" !"#%''&$"! =;::98376432223322210//.//01210/-)$+@-541.*'$"! 75445678:>>@@5656567778 !""! 840,(%#!  !"!  !"$'+/48;=95201221123579: 99888778889 : !"#$#"""!"!"!"#$$%$#"! !  !!!  !!  776430-*'%##%'(-29 !!! 999:;;;:976779B,LjWHA>:8;DTeooh`[WW\fotsqnkg`[]clrw{}|vhTEBJRO=P6,*++,.039BS5?BBBGMQV]gr=BFGD@xropr;>CEEAukip?FG@lUBEHJKLMLHHO;7^I\hic[RJC?;85550,)('&&&%$##"###"!  !G A@>=:987543!.?LPD91/05>L1=HMIDBEJJ>[@36?KSTSUYajh[I>@L/51M9-*)*,-.-*('(*+,*))*+-.-,*('&%$##$&'()***))((''&&%%$#"   !"#%&('&'&%&'*-03334567740+*-010/..-,-./0/ .-XUSPPRU:; "##! !!!##$$#"! =:742+344579<:630-*&"   +  + +   + +  +  + + +  +     23467889:=&<<<>@@?=:6432100/...-++,+*)('%#"!!! 1644678889863/,*('%#"$&((('''()***)(''(('&&&''(''(''())(&$  !!""$$&')++,-./0112 3456777654[32123566543344432210.-+*))'%# !#%(*,./124577887520/.-,+**)(''&&&%$$#!       + + + + +  + + +     +     + + + + + + + + + +     + +  + + +   + + + +     + +                        +    + + +  + + + + + +  +   +        +  + ;($-24:E),,++**,0341.-/3650'9+,8(6AGIHC<4/*"0$  2-DW14530/0110/.*&#%,6=?<82*D1#" 4" +"+7G,375.)%$'.33/+*,020+$ADGIHD:-$$*/,%F"-%&%&(,.15.! +   +U  !#$$"#!=0;A?92,'#!!*140*$CA?:3//038 %&#@?AA>:51,&!($$%"! !"  +  + G + " $'$ !%%( '))*,164+ +    +  + # + 6544468}~}~}~}}}}~}|}}}}~}~}~}~~}~}~}}}~}~}~}}}~~}}~}~}~}~}~~}~}~~}~~~~~}~~}~~~~} b @ vþDŽDžɄ ԄL ¼ʀ)BaF +s¼*@ ! <+÷> + Żցᣘ÷ּ߫ͭ瀌Ըԉ߁ɷǪtî¹倊ȑаqɻ썚˷؅Ǻ  n ,/38;<;9654543322ccca^\YVRON.OQRSTTTUVY.0330[WUROKHGGHHEBDK)+-/000/.-,*)*+./..-,+*++,,+*))('%$#"!  <:864100/.,+**)+.121110///00/-,++,-.--/013457888999:98 +77789998887 +655445566676543334 3456678877765 4345677654310..--,++,-/12233445543210#100149;<:8520.+*('''&'''(()+--.///-,-.--,,-,+**+,,,+*)((()+-.//0123456431001112234556655431/--,-./#.-,,,+++*))((()***)('()**+,-.---.../D000/01222110/...-../00//012332111000/.-./0001122333223589;=?BDFIL'''&%%$#$&(+.010//``__\YXVTSRRRQPOOOMKHGGF ECB@>;95321/Q..--,+)'LJIGEBA@@@BBBAA@@AA><<<=?ABDEFFHJMOQ((''(((MJJLMM&')))OKKLM'()()*++,-./0/-./000123 220//02221112100011101234433234454322245676532248<@ACBqCCEGHHGFDBCEFHHHGGHIIIJKKKJIJJJIHFFGGHJMNNOPOONLKJKJIIJLKIHHIJJHGD@<:854347:>CGJLNNMLJHGECBA@?>?>=<<;;<>>>@ACDEFFEHDDDEGIJLMMKIFEDCCDDEDDCCA?=;;9630-**)('&%&()*+,..-,,-//.,*('&&''('&%$$%%$#$%&&&%&')*))()*,./.-,*)&%&''&$"!!  "$$#"! 7  !"#$$%)/5;?B!@;740-./013334432234568998 !!"!!  !"!! 988898778:9::889  !!!   ! ! !  !"#" ###"!  !"#$%&&%%$#"!!""!!! == !""#$%&'(((''((''&$#"#$%&&%$#$%p$"! !#&''&%$"! =;:9986667655456542110//-,+,,-,*)'%##$$$'3E.20,*)'%#!6444566776665322469;?"$$#"#%'()*))()***+,-,++*)('&%%%&&$" :8765445667 667887765665433443334345443334543445456545444545566555446665545554422344554343445444545544334333212 34443334456566787767899876431123455543210012343344556567776 !  +::;;:;;::;<<=<;;:999:;<=>==<;;;<; <<;:;;;:99::98 5568 !"""! !! :9889"#"!  >>==>==6788878999679  +:51.+(%#!  !!"!"#$%%$" "$)/4: ! 8531/.../000///00037: :::;<  !"#$$##""!"#"#"!"! ! !  !!!""!!"! ) 77542/-+*'$" "'-7=!"!  !!! ;9779;<=<==>>=;989::>-R]Sf\yH;GmRioh_XUW]dikouyvhOz8CVkuwtoid]YWXVGdD94]L<1./7FXmEWblyDLRTQOMKHC>;<>ADFGGEGLRRItUB<==950UH?DJSZ^[VOEr[NHFINUahaPE@<99;:4ZOIFDAAFSa59=AEHMYk<>yr:@GHDA?3-*('&% $$###""!!"#$#"!!!  !""!""! "#""!CCCDD""#?"""#$&&'*3?*>XomV<0-/0XLC=72-+)'&&''&%##%)/21-)&%%%$$##$%%&%%%$% +&'())*++*('.&%%&&'%#!!#$%'((('%$$#$$$##"! !  !! 2 !$')**)))(''&&%%%&&''())(&$##$%%&&'''(() ,/24445544420.-,---...---YZZ---.- +,-///.-XWX #%&%$! !"#$##"""DDEDB@=:86706789: !"841.+'"  + +    + +  + + + + +  +        +         !#. BDDDCBA@?==>>>==<:7520.--,,+**)(&$"!"""!! 100.+)(''') ((())&$##$%&&'()**&$$$%%%$%&'  !###"!!$(+.022357888654579:;<;;;<<<==<;;:<<<;:9:;=??@@?>=;:87643221/.-,,*'$"  $)-024665431/-,+*))('''&&&')))*+*&)((())*++*('%$#""##"!!!"!'   + +  + + + + + + + +       + + +     +    + + + + + + +   +    +  +  +  + + +  +   +      +       +              + + +      + + + + + +  + +     + +        + +  +  )65A7@!";1AC=61/049<=?CEC9(:#1@EFC?<853232(7$0%$-8%1:AI).231/-,*&" !#%')***,054-C.#!#$"2'%.A(,-)%"z"%*28:84/(@1*'(*.4<@9+#!#(,++.3:<<:8631/4;94+$"!!1)%#!!)3!#%&(*1="#C> %)+)&$#@856;?!"%'(%"=5,),4%#3 +  ) !""!  35-@F>4/,*)&$&(*+++.10+%"$?=<<93.*)'"$# /,&   + +  +   .>;+("   + +   +   + + +  # + + + <;<557~}~}~}}}}~}|}|}|}}}}~}~}~}~~}}}~~~}~~}~}~}~}}}~}~}~}~}~}~}~}~}~}~}~~}~}~~~~~~}~~~~}~~~}~} c{Ŀ>Ä$܄Ȅ uü0oPÿ=F&  G@A:BC#%'*+-.0123444343320/.--YWUSOLIGEDDEFEDBA?<:999864433444343A2110.,+*(NKHDBA@>;99765579;<>?@?=<;<;;<>@CGJM(*,-..-,,,+***+,,,--. /0111001234445654322332100/.././../013468988765556788999;=??@AA@@ABCCBAABCCDE$FFFGGHGFFGHHIJJKKKJIIJKKKJJIKLMLLLMNONLKJJHFDCCDFGGD@?>F=<;:875667889:;;<<<=>??@BCDEEGIJLLMMNMMMNNONLJHIIHFEDCCCBBCDFGIKLKIHFED +BA?;97420.,+**)))'&&' ())('%$%%&%%%&%$##%&%%&'(()))('&$"!"#$$"  !!! /!!"""#&+18>B"!<:97641/.02343334456789:; !"!  !"! 97655679::;;998: +9 !""!   !  !    !!!=9657:<<< !!!"###$$$#""!!! !#$$##""#$%%$%&''(((''&&%&%%%$$%&'(''&%%$#!!$&&%$$$%&&$" =;:876777654210//.-,+**)))*+**)2,8J/4321-("7544455568:976555655569#%&%$#"#%'())*+*+*))((('&%%&&'(''&%# 876554445566765454545454556654455654545433345434332223455532223434443332122334456567654332233432211101112322344345667776545 !"! ;;<<;:;<<;;<<;;::;;<<==<<<===<<<=<;;<;:98 78887669 ! !  !  !! =>:9 +776656778878998877788777888O<<;962.*'%$#"!  !""!!! !!""##""!!!"#%(+/49= ;6433310/00110/.-,,.//1369; !"#$%$#"#"!"#"#"!"!"!"!  !!"!!! !! %764321.+(&%#!!*8"&''%$#"""!! !! !#%&''&%$#"!BA@?%9:rQWTNBoh8EPTTSSVY]cimry{iVLO]knjda`_\YWWZ\WOJEz`D31=O[_cmEFCBCGLOONKFAtge7AMW\_`]VL>^G94430RC81,'#!"(07APb:CQewEEB{uTomq>DJNLDmO9.1:EO[htxlXG><>ACEEB;78@FHJOVVOHHOZfllkjkjhd^VOICBEKMA`E745651.1;N2DVbhjl$m:?EFA;qmbRD;9=HWg:@BDDDEEDCCDN:_T~O^ee^WTSVXXVSOKHEDFKMI@jYKC=731.WRKC;:BOWWXYZ[VQORZ2;FORJ:R:.)('''&&&'''&&&%&&&%%$$$%%&&&%$#" ##$$$#DBAB!"#""#+:T3\D2'')*+++*)(''&&%%%&&''&&&''&%%$$$%&&''&' ((())**++*)(('(''&&%&%%$#" !!  !$&))(('''&''((''&%$#$%'(*+,-,,,-.//12456531100.-,WVUVXXY,--///.-,+-/00/-,,, "##"! <<<=H>>?><:987776556779::9::;; ! =83/-,)%  + + +    +   +         +     , !!! ::9864210//.+)'$"!!!  !X""###"##"!! /-*('&%$#"""! "#$&&&$##"! !#$&'( !"#""!! !"""#$%&'(*,-./011012221 011123445678999:;;::;<>?@ A@@@??>>=<:98765321//.,*)()*++)&%%&%$"!  !"#$%&'(())*+---./01,0.-,,,+*)('%$#"""#$%'''&%$$##"""!!      + + + + +  + + + +  + +  + + + +  +    + +   + + +  + + + + + +  + + +   + +   +      +                +    + + +       + +  + +  + + +  +  + +       +       +   +  + + + A030+#<: '-/.--/258;=@EJNI=1+-7@A=:88764346740,)F5%#/566;G((%$&),.//-)$=44%-48;<:5.$6'  ."  )5 %.;FN))&FB>~>>=:61,($#&**"-&%19>>>=<<=!$()%!@>7,"#-8 !=6229 B8.$ + + +  V %!:4O19<;61./13431/,*('),-*#:/'#.)%  )/.--..,(%&+'.0*&      $ + + + + + + + + + +   + + +  + + +  + 8889;<=~}~}~}}}}~}|}}}}~}~}~}~}~}~}~}~}~}}}~}~}~}~}~}~}~}~}~}~}~~}~}~~~~~}~~~~}~~~}~ ݆H-)V˄ąÀǿ½l½|= $h郏z138l" ƽ!e팚һŹ胞þҲ֩퀋ǩイõЪ큇ŭаӛ؍ټ˨z³;Ů_'7D/2330ZVRQQSW[\\[ZZYWTRPNMN+OOPRTVWXXY-.../0/WQNMLJGEEEDCDFIKL')+,-..//1$0/.--./0/-,+++**+++,,,+++,,,++)'&%%$#"!"!!!A?<:86432110/-,-045543123310/13567654331/-,,/2454445665543455567876556676554334556655456789988645656787655432,10/-,+**)((*.0257779;;<<973/,)('&%$%&'((*+, +--,--.-,++,+*++,./00/.--,++,,+++,,+++,-..--,-,+,-.---,,+ **)*+,,,-.00/010 /..-,+*)*+,,+**))()*))*+,-..//.,++,--./.--..-./01357878I7665311147;@FK(*-.0111000122110/.-,+*SPMKKJGD?<:9998889;==;::<=>>==>;97531I0/.,*)((MKIFC@@ABB@>=<;=CJNMJGEEFIOT+*))+,./.-,++-.00/..--,,+++*)QPONMNOR*+,-...///...--.--./0../0/...0121112346 78:;<;::98777654233456754434568:;;::;<=>>===;:;<<=<<=?@AA@A@BCDE DDCCEFGFEFFFEF&GIKMNOPRTVWWWVSQMIFEDBA?=:63/-+)(''(),-.037:=@CDEGHHIIIHHIIHGGGFEEFHKNQARRQPQQPNMLKJJJKMOPRRRPOMLKLLLJHGEDB?<;976434432100///10//00/.../.-,,+**))('&''((''(*,,+**))*+*)((()*,,,*)(''&$" !""!  6 !"$%%&(-27:<> =<952/.---/023345677668 !!!""!  !"###"#"!:76545678:99:;<=   + !   :752113468;=  !"##$#"! ! !#%''%$###""###%&'())('&%&%$U%&%%#"!!#$%$"  !#$%&%#!!!"$%&$":87778776543222110/-,++*))*+,,-,+++0:%+02332.( 7323 578:643345-7!%(*)&%##$&())**)(&&'())**++,,++**))((('&''(&%%%$#! 7654 54456776556656544334465455456 555443344545 43334566654334456544455665654543345566654433323444345554343433344322333445544454445566678776555665543322345443223455543222122345556788767877!#&()(%#!!!"##"!!  ;;:;;<<<;;<<<;::999:::;<<;::99:;<;;:;<<;;;: +;;;:::99887 6655578998 7765554479 !"#"! ! <;:767776787767899754467766655655555#55544456 "#" 93/,)'$#!   5 !!!"$%(,0478752137:;973/./00/-+('(*,-/248;>  !!"##$#"$%&&&%$#"! !!  !!""!"#$%%$###$ ##""!!"""#"#"#"!! !"!"#!  '88630.,+*'&$#"",>(-.-*(&$##"!!! +!""" !"#$%%$$%%%$$$(<=@beYRSZcnwrbNACRcpwwvutux{|{wtssrpmjhggfb^\^ab\RG>:9:>ADGGEAAABCEHKNRUTMAhb9JYdkmjc[SHu[F:8:;5P6&< '7[Ibnmgegijkkl}osqgbl@MX]TV5S1EV`\L8M@DZ?PZZYVRPRUVPC5^37f[3DR[`ebZPOValr960RHDBCFLQQPVc@ACD]CDEFJ4^QYkrnf]VROORUUROMLLEjYSQMGIW444677899:;<<;;:9:;;:99988898878::;<<=>???><9741.,+)(%#! #&)*,-./.1-.02466544543110.,)((()*+--.--,+*)*+++*)('%#   +  + +   +   +    +  + +         + + + + + + +     +  + +  + +  + +  4 + + + + +  +    +    +   +             + +   +   + +  + +       +  +  + , + +   + + +     +       + +   + + +  +  + D $:;2-.39@FB6(!+7@DDCBBDFHJJHFEDDCA?=<<<:768;;70(#!!"%()++)&$%'*-/22-#52*5<@A?;60)A2% ( + /*@B?74<&19<5L,')5;8+#,".67630..00,#.4-&07:=:3-+19@D$''I7'!*#"""$(+5+*.8#)+)*/59@$&'%$$%&%<,# +$-+#7145+ + + + + +   I":4T9BD@940,,-/11/-,,,(">951)$#$%$#%%!5*'&$ "+ -3."&07:>=940,',    + +  + + +  + +  +   + +   +  $;99:;<=<;~}~}~}}~}}~}|}|}}}}~}~}~}}}~~}}}~}~}~}~}~}}}~}~}~}~}~}~}~~}}~}~}~~}~ɀ~}~~~~~~~~~}~~~~~~}~ y[քlþʄP6Zÿ: +ſ/¿'SFB􆍓2sEE(#\# Ǽ4CIƿ򆒙ϺŽĩ߀ð׉·Ǜ鶡卲ŹȻ¹ހ遄ͤ𹤡􌱍ۑĿǼ¾λ OUVWWVUUUVWUSPOON=PQRSTUUU+,./12442.TNLMMLKKMOPMKJK')*,...,,-.0001110...///.,,,+,+,-,+)'&%$$#"! /!!! ?=;830//.-,+,-..---..-.0122/-,,,-/145666777676543210/./133322334456677767776 554433444344565 +455566789987766542001233200/.--,+-17< !! =:62-)'&&'''()**+,-.--.123455665 43210/.--,,--, --,,--..-,+,+,- ,+**))((()((''('))***++,-./000/.-,++*+ *)(('''(*+***+**+,-.///0/.-.02469:<;<>???@BBCEGHJLOQSUUUTTTSRRQPLFA>>AGLPT+,+USQQPONMKIGEDDDBAA@>;98654420.-,+)('%%$#FGHIGFECBCDGLOQSUU**+-.-,---,+**))'MLLKIGFG;IKMJHGHK'))*+,./24689::;<=>=>?@@@ACCBBA@@?>>>?><:8778764333456 556688877889:::;<=<<<;::;=>?@AABBCCDDDCCBA@@AABBCBBA@ BCEFFFEDCBAA@?(@ABBCDEEFHJLNQTVVUTSRPPPRSSROKIEB@<72/,+* ,-/269:=?ABCD;87530-,-.01345768 !!"""!  ""###"##""#"! ;9877655543223579; +:99889 ;;<   ! + !!!"""! *9655433236;!!! !!""!  !!!"! !"$%&''&%#""###$$%'()))'&&%& %%%$$#"""#$#"!""!!!""!  "#$%%%$#$%%%$" <85334554332 1100/.-+))*+,++-3>%(+.0110,("54555443469; "%'''%#""$&''( +)))**))***+**)(' +(()))(%!865656565656543443343455454565544455454345434345554322111234345676554567 6554455454454566554333223332334334 +5677888988 !  "$%%$#"! =<;;<=<;:9:9:::;;;<;;<<<=<;;;::;;:99::98787654334587665678)::;;::999899::;< "#$$#""! !"! 7 6556987876556576667666566555666566655566656 """ 950-*'$""! ! , !#$'*/3567753211135752-**,..,)'''(*-/258;> ! !!"#$#"!  "$$##""#!  !!"#"##$%%$$%$$###"#"#$#"""##"#"! 497542/.,*)'&$!!)4?#&())(&%$##""!"#$%$"  !"#$%&+==?^dXOPW`ipqi[MJTcr{|xusux{~~zrkhgghkkjfb_]ZUPIDBDHLNONMMNPSVYYXRI@t:@IPV]cgd\RJD?<:pdTG:WC=I/1.9V>MOCjUKKP[e]F_@/*/;O6Kcmjdabdc\UPQVYRQAcU`=A<9?IOPRZix@Azmb\YWTPMNPQOLLMNMNU`lne^^ejkjf]SMMNMD5M=9kNhvztkd]UMD@CGIIGEB>:okhe_WROLJJIGGKQUTTWZ[Y[`ilg[H4THBA@<7/(%#$%'*,./,*('&%%$$#" #$%%&&'''&%$#"#"!!!""!  !!"""#$#"!"""#"! !"# +$$$###$%&&(''(('&%$$%&'(()*+,++*)((())**+*)''&&&'&'%$#""#$$#! !"!!"#$%&%$%%&&'''&&'(*+++,-.//.-,+*+-/123334321.,*+.01/.ZYYXYZ-..-+***++*(NNOPQS67899989:::;<>?@@>=<;:(99::99988!""!61/0.+'&&%$" +  + + +  +  +    + + +         +!"#$%%%'(*+,-./246776520//+&" "',047643 20/...--,,+*)('$#! $%')**+++*)(()+/24555 (()((&'$)*++*('(+ #%&&&'((()**+,-./0 +/..-.-,*(&%#"!"#$##$$%%$%&'''((('(())+++***)()*,-./00123210001233455433200012356665421(22234677789;=?ABA@=:743234431.+'&# 1!$&())**))**,-/012234555666543110/.///...-,+*)'&&%$"   + +  +   +   + + + +      + +  + + +  + + + + + + + + + + +  + ++ + + + + +   + $ + +      +                + +   +  + +  +     +  +  +  + +  + +   +    + + +     + + +   +  + + +  + #79/)*/5;;;=?@?=:7652/+'%'*-/0/.--/14554/(!:!(.48<>;5.)%"!!@8-&.!(%-014;DFB<6238=?=82)0&12u)<.'(,5=6&-'+;B?:77862-*,03/#1)0 "!(,,-2A=4(&  +   +  + + + + + +   + + + +  +  + +  +  + + + &889:;<<;:98+,.024}~}~}}~}}~}|}|}}}}~}~}~}~}~}~~}~}~}}}~}~}~}~}~}~}~}~}~~}~ƀ~~~~~}~~~~~}~} fF!-+υAŇ˄ɀ *r5¾ 1 / # A삍  9, e Ķÿ*;ļϑ߱ؾĹͲ慇Հ𤻵Ļɭ޾ဓͿüζжޘс˦ƹ޿ɶڳʯ "NpT TV,-YVTSTTTSSRTQQONMMNNNOQRSTUUU+-/134556640,RPOPPOPRSQOLLM'(()**)*-02211000.,+,.022/-,,--,+++,,,++, +)(('&&%$#"!"!!"!  =;964310/.-./00110/.,**+.1468:;;:889986C5433343345776544334679:::8777888777899877654334443322233345666788898 7766676676776543211234310/012578!779<:5/+('&&())*,.001221.../2578764322110023444321.+++,-./00/.--,,-.//.-,+*++*)('()*++*)**+,---./000///012110/0//00/.-,,,++**+,-g,,,++,-./0112247=<:741-+*+/,.///,*)(()((()**TOIDA?>@BDFFEDDDGKM&%$$%'())(()"'&&''NO(*)*+,/02358:=?ACCDFHJLMMLLMLKJIHGFFEEDCDDCB@@@>=<:97898889:99888:;<>?@BCCBA@AAA@???@ABABCD*CCDDDCBBCDDDEFFFEEDBAAABBBAABBCCBA@>==>???>B?@@ABDEFHJKLNOPQRPPSX`ks>ACEFGFC@>=;61ZRKC=830-++**+,.026:=@BDFHIKMNNNMMMNNMMMLLNPRTUVVSOLIGEDEEDB@?><;:::97654468:;;:986544310/../0/ +-+*('(*+++*++*)*+++*))***+-,($"!   !6  !%)07= >;998887532212455668 !!!""  ! ""!!"! 887655579:;;<;:::   +<   !""#"! >;852/++.38; ! "!  ""!!"!!! "%'(('&'''&%$#$$%&'()('&%$% $""###"   "#%%%&&%#! !"""#$%&'%#! 8534677754210/.-,*+-..-,?+0:$)-/121/,($5598642223445 $&)*(%" "$'''&%%&'())*++*+**)('())**+,,+)'&$#!>:87654445654466554566655567656777654334 5554455543345 +4433223334544543434334554345443343232322234332343343456776667678987776766445554346654454445553222333456545554556 !! 9;<;:99::; <<;;::;<<=>>>===<<<<;;:999:::;;;:999::;:98666565445:98889:988:853210135 +7;!"###"!"#"" 5886776678 66677676677678766 !940,($!!""!!   !#%'(*++,-,-,+3*((+.132.+*))(()+.158=B"""!! !!""! !"###""#$% $$#"#$&&%$%$###$$$%%$$$%&''('&% +$$$##$%&&&%$#"!"!6 86420-,+)'%#!!#+4;A#(+,)%#""#""##$%$"  !"##$%&'''&'('&'*>4^W{yeXRPR\hqrka_fqtsolkiknrzBCEGFriffghiihe_XROLHCBDILMLJIJPY^`^[XRKEBDIOVYWTPMIEC@>;siZH:55BMZ\L8\Z3;?EJQX`kpiaagkijmpl^IiOJ+6@GMQTXZ^acd_VPOONMPW]]]fu@Azl_WRPPR]pCJFzeUJ=\B2'" !#$"#2M>a@F@jWB\9& !  ! ;:!9:=?@BBB@?>=>ACEFM66p[ywog^UOKHE+FEC@:`MHMXg;>rbXTZcd_XZcg\FZ<17E(RI=.&%&'&&%&( '&%%$#!!  ! +""##$$$%$$#"!""#""!!  ! + !!""!!! !"!""#$$%$$#$%&'())('&$$$%&'(*+,+*))*+,,+)()'!&&%%%&''&$#"""##"  !"#"!!   !!"$%&'''&$###$%&')*++*+,--,-:.--,+*))+-0233321/.-,+)()+,+WXYZ\]]]\]^//.,,++*)(OMLL'(QRS46987778878899::;:9: 99876 !"1.--+('''&#!   + +   + +  +          + + + + + +  +   + +  $)/48::8765579;>AB A@><9779;;:88^"$$#!!A@@@>=<:876433320/.,*('%#" 651,*(''),-,*)))+,-/,. "%'(+,.//124568989:;;<=>>=<;:98765443310/.,+*)('&%$%&'()*)))**+--..023443221122210012322245655445665543u223444332110///../012210/.,,,--,,---./0233579:<=>??@AA@=<=@FNT-0234331.,,*&">71*$ "$')+-/01112322122110;1246777630-+))())()(('&%%$$$#"  #$%%%$"  + + + + +  +  +  + + +         + + + + + + +  +   +  + + + +  +  + +  + +       + +      +                   +      + +  +    + + +   +  +  + + +    +  + + +  +  +   + +    +  + + + + + +  + 35PVI90,*,3649?A?<988;>BHM')*+*LC=::;<>?><83/-,)&%(+--,++,16::8641,(&'*.35420-*'%$"!@:0&!+=(+I<7?#'G4 $< ))*03/& #+46*12"$&)-153#/"!"'*-02346663.+6*-1556=;98777654:34321120-+)())RNHA>;:;<=@BEHLPS+,-/134433235678899::9:;<<=>?BDFFFEDCCEFGGFFGHJKLLMN OOOMKIHFEDCBABAAABBBA?>;:998656778876667!889:::87789:;<=>>?@ABBAAA@???@AABABCBBCBBAABBCBAA@?=<<<==>@@?>==<;;;??@@AAABBCEFHIKMOPOOPPOMJIHGFHLSX\`ehiigedb_][ZZZYXTNHB;51.+))*-0358:;<=>@BDFHKNNMLKKLJIHHGFCA?>=;;;:9989::977789:98876532112221523320/../0///-+**+,++**)(''())**+,-,+))*)((())**)&$#"!"""!!  (!&+069<==<;;9862.-.001246 !!!  !#$%%#!76789 :::99889:  :; +<;:::;<; :9876543223468:<>   !""!  !" +!!! =:: $'('&&%$$$%&'''&&&%%$ +#"""#%%#! 3 !"#$%%%$#"!;:; !"$$%%%$"! 964565566654210//..-I./000//.-,*)+1>'/4430,'#!! 6334544334$(,.-)%"!!""#%'))('&&&%&(+*)('&&&%#! =;:9987656765545556765454 55566432343434334345 444554334323343343432323456 +778887778787655434321112343 2223445666776554556788789;==;;<=>?@>=<;::;<<=>=>==>? + !! + ;976777889876542/./134544578; "##"!"# "!  776678878641/--+)'%#"! !  !"#$%%%&()(' (+17;;73/,+*+,.0259<=<<< 98!#$%$%&'()*))(('&''()( ''((''(()('&%$#"! 631/.,+(&# !&/6:?#&+-,*'#"!!"###" >> !"#$%%&'''(()*+/8E^C[=M^sv`L?9?@>:j_XY[ZTH=723:SwJOJC{vx>ACDFILI|Y;K2*&%&.C1?CA7XC6349=H[>=>>?>J???@AAABCFHHGJ+NTJk}|tkbYSRRPKD?=;9mjknj[RXg:vnaZWXZ[WNF<0L:218I/3ZF6*%$$&%$$#$%#"  !!"""!""!!"! "#$# +"###"!!!  !"#"!"""#""!"""##$%%$%%&'())*)*)'$"!"#&()*+,-...---..,*(''(''&&%4&'''&&''&%$##""" 30.-./1 33' !!""!! !!! 4!#&()(('''()*+,,++***))())*+,0++,-//012321100//000/-,++*TUVWXYZ[[[YXWVUTRQPOM'&''MMO23467876789:;;98889%::8654!""0+)()($!!  + + +   + +  + +  +        +  + +  +   + "%(+-0359<>==<<;:989:::;:99876 !!"!!50+))+,,,*('&%%$" M42.*)(''()+.0259; !!!  !"#$$%&&%%&'''(()))*,./1110002443466789::;<==<;:987766543345<420.+)('&$##$%&&%%%&'''(''(***)()*+,-./00135556655443446676656766676544334433210/.-,,+,--,-/k01234445434568:;<=?ABBCCBA?><;988;@EIMPSRRPONLJHFCCCB?:61*%  !"#$&(*,/1110../1110/.--,+('%$#"!! !""#$##$#"""#$%%&%$$#""!!   + + + + + + +     + +       +    + +  + +  +    +  + + + +  + + +  + +     +     +   +                   + +     + +  +  + +  +  + + + +   + + + + +  +  + + + +  + + + = ,!/!+6DPVQE6(  '08>BEFFEC@><<<;989?EL*-,'HDBA=858=@>82/.-,+,./0///122/--1672+%$%&%"=50021-%-F,/+%CAB"$&')+-+G0#"#%#)!.!/=EFEFE@94029D')(D3 $, )+-1:BDA<842/-.//,('*/38>E&()'F>: + (''NNOPQRTUROMLMNOOPRTUVVU*+-/221//1l221.RKGEHJE<79?FKNQQR*+,,.02220.,***+++-./000.,*))*,,---,++,,--,+*('&&&%%$$$#""!!"""!! ?>=<;81*# !#&)-134555665445766677887 66656676654466789879;:98765678 776665543234567I6554321/.--./123310013566 >:740/0/...0110/.---.012211221110/--/1479:+998778:=@@?<:877754344322235679;>@?>=>==<=<; :9875433201110012320..-,++-///0110/--,-,,+,,,-/0/.../001123334556I5444310122333223579:;?BDEGJLORTUVVWXXYZZXWVVUTSRQPOOQSSTUVUUTSRPONNMMOR**+***+*(+,-/00/.-,,,+,-./..-,TPJE@><:865554432223 +22112334589;;;>>>?>==<;: ;<<<;:;<<<;:;<==?CE*DDFGGFFHIKLMNNNMLKMOPPOMKHGFDBA@@>=<<==>>@?'>=;:7531012344544344456787666777889:;=?@A@?=<>??@ABCDFFDCBCCDCCCBCBA@?>>>???=<;:::98889989 +:;<>>??@@@A BCEIKLLLMO PPPNNNOOMLLM@ABEGFCBA@><;:97530-+,-./01245677899887642101223322234566554334454210$/.-,,--,-./122/+('(**)((()***++*($"!"!!"! 9"&,38::97554431000134567887789 !*""#%%%#!:986568;8789:8899:;<;;;::;;;:99889#8999::9887530//0136: !! ! >=<< "! ! !"#"! 9:878 !! #&'()'&&'''& %%&''&%%$#"""#$#"  !""#$$$# "! "#%%%$#"! ;6225689987520.-,**+.022210//.-*((*3B*021/+'$#!655654456 $)-0/*'$#""! !$& +''&%# #(+,+*))((()('&&''&&'(&$! =<9877665444567(88777665566777667776566776556655433345554 323323320/01343343344433444555443 22233223334545 +66555654443434434565432343454 34455665566778987654 54443332100//0123443234555667888765455678<;;==>??@@??? @?>==>>???>==<< !""!!     !"""! ;62/,*(),.1366569;?!#$##"! ! ! 211  !"""###"!""! 53210/-+(&$$$#!!  !!"###$3%%&)-145320//012210.--/247:=?AFHGCBBB@> !"###$$#" #$$$%%$#"! !!"#$%&'('&&'(())**++*)((''()-01/-,*(&&'()*+,++*)(''&%.$##"! 631/+&" &AR+L#$(,,+)'&%#"! !!!"$%(1>U9NoFPUUZclzFE~eDU=>R4DR_n{A~~{tonppmhgmuzwqmllje]SKOZdaXQPSXYYWWWXYXTMFFLU]_][[\WME?:9;?DF?dQLJFAAIV`cbZRSZaekwDKOPPNI@qg|ZH6PA8>]FWTD^=-%##$$$%)3C[;JZixBDD@rd_`^Q=P75D4IU\fnlfdilh]TT^jlgffgjs{|{{=xohn?JRUTM`CM)<:89: $,0+%#"!  !MCDEDDCCCDEEEFHIIJKLMM&&%I)=6qbx}wrng^VVYXM:YPS_57nm9=>ucN;ZIGK.=PWPKG?3O<0)&%&% &''&%"   !! !!!"""!!"!"#$#"##"!!   !"#"#""#$!#$%%$%%'()*+,--,*('&#! !#%(*++,-.010/,)('(&6'''&&%$#"! <50--,,,-..0221100111222344332 356  !""!  "#%'))*))() *+++*)(('&'(()))***+-/1233210.-,,,+++,+*UW-/110ZVTRQQQ)('11223568:;<=<;:9D8876 3,&$%%  !"## + + +    +  +         + + + +  +    '"&*.258=ADFGIJKLLMMKIIIGECBA@ABCB@><;:74321024(751,(&$" # !#$%&(*+,-/003332121100/-++*)('()*"++*('&%%%&&&''(),.//000/01233368779 888:;;;:7433210.,,--..///..-,*(&$!!!"##""#!$%%%$#$%&&&')++,.11221112220/01235655677556667765545543320.,,++**)'&%&&%%$$%&'(*+,-/123467666555678:<==>>@@ABEGFDBBA@?>>>=<<=?BDCBBDEGHHGDCCDEGJKJGC=70)"!#%&'(**(&&%$#%"!!"!  !#$%%%$$#"  + + + +    # + + +    +    +   + + +     + +  + +   + + + + +  +  + + +   +    +   +              +   + +    +     +  +      + +    +   + +    +   + +   + +  + + +   + ) + + +  + + G + + (&:%+,,/6>GN)(J9#'#"-7BK(MIHIHEA@AB@<;?CFC=<<==94.)-6<:3/.0354H541,''+27876784.(#! "&*+%8,(&# !'18972+*.26:D(-011/+%A;3(*!5+73&/ P!.(2;D&()&A8454+#!+25:@?;9<=:1*+3;<9888EIKMNO(*,..-,--.-,,-./01344310/.-,+++,,,+ **)''&%$##""!  ?=<;840//02455544433344345656654566677899987677765444566544567654 556888765556787 6554433455667]65443321000/.-,,**+,-02456 ;:886544568:;:86557899764332210/-../0246799987789;;<:86565Q4445567789:=?@ABDEDBA@?@BDFEEEFGHHHJMNN()+,,+*+-/00//0123221///,*(&$EB?=:6321100/. --...-,,,+ ,-./0124578:<>>=<=@BCCFJNNNKIHGILNPQSSTSSQPOPOPQSSTTTSRQRRSSRPNMLLLNRV,..-.../01010/<0_]YUPLHD>:86321/0146789:<>AEGJJIHFGGGFECBBBDEEDC@>;:99::8889A877765566544578:===<=>??>=<<;:988876543446676444567789;;;:99:;<<<=>@@>>=;::;;;<<<=<<=>>><<;:; +:998889:;;:;<;&<=>??>???@ABDFHIIJKJIIJLNOPPPQSVYYXVTSR QPONLMOQRSRQSRSTTTUUTUTSQONLJGDA=951.,)(&%$"#$'*,-//023578899:;<<;;::9988631/--./00122333200/011211122344334554211100123212234#33321136898522489865431/,**+,+)&$##$##! $*168741//000/"1356788877899:: 655689865568:;:;:::9 ! <;;;:;;<,>=<;:87654456665431112467778;> !!"""!   !  ! :89< + !""#%&&'('&%$#D$$$##$$%%$#"!  !"""! !"#$$#""!"#%&(()(%" >>??>=:7312478876531/.W-,,+,./01222110/-,*(&'.:&-011/,(#!988767#'*-.-*'$! !""###" "#$"!"$&()*)('('%$" =:876655566765677766676 +556654554343224543323445665434345454343432 +334443323345454445556767654434321000111211222334445556654345799 >    !""!"#"! !!"##"!  !!  ! 88752.+*7+,./0223347&#!!   !U"#%(+.2323358;=??=JS[clt|{th]VRQPNMMMH@71YUNF<61.,+*)*+,--,+++**)))('&%$" 3-()'WP[H)#&+-,)'&%$"??@!"#$%(.;IOSU\7CRh~JMJFGQaqBCCCDAftkiq{}tlnw>\;\jdZPJGC?<9eQ>8:<;649AHOUP>T9./4:51-+*))*+ ,,-.012344432$100///0232110///02334555 !"#"#$%%%$$#"!!"#$%&'()('&''()***++,-/000124676532100/.,+***+*)NM'+.11/-,++*+++,,-+*(()***4445789:;;;<<;9873,%"!  ! + +   + +       +  +   ! !!  !! !" #$%'!"#&)-//00149>ACDGHGGGFDB@@?@ABB@?===;9877665310/0248 !!"#$#"""!!">!!!""FEB>940+'$""$%&(*,035787766776432112565431/--,+*('%&&&%$"!!!  !#%')*+,./01233445568;<<=<;::;>??><:87531/.-,+++* )*++*)('''&%$#$##$&&&'(***)))*)))*+,,++,,-+,-,,*)'''&%$%'()+,.012 468999::;<>ADEFFFGIKJIFDBA BCCB@?@BCCDCDE,FGGFFEBA@>=:841/+($  ! + + + + + +      +   + + + +    +  +  + + + + +    + +  + + + +  + +  +   +   + 0  +  +  + + + +    +               + +   +      + +       + + +        +   + + + 24O= V *3:>??:5/*(()*+*)'$!#(.3:BHHC;3/,**)**)% '%! + + + +  .06G  +  + 2 !$%%(!-;G)*(%%+5@H&'''(&:8MNHFFFDA?ADFC?===;60,(&(.34346520/s.../026:<<:98874.' 6-&%)/03?$$A;:@FF?:2+'',8DA1%!+2*5  /:5)!&(4?&-.&6##))%#(4AGB92/,*-27:9644:D'*($"$&()+./+$2  + + + +   + + +   7184.(%$" 1% $(&& %'" + + +    + +  + + + +   +   + + + + +  + +  +  ++)~}~}~}}~}~}~}}}}}~}~}~}}~~}~}~}~}~}~ }}}~~~}}}~}}}~}~}~}~}~}}}~~}~~~}~~~}~~~~}~}~}~~~}~}~ 7mlׄՀ'҅ͅԀ]ąûքքqoY  }񆔚Rk ^ÿ7.̑Ŭ׀ıöɶ둡ϰ¸ɞ񘵉ԁ񀂃񄉌ԕֵֵعܳ⇌~Ɯ񀈓޻򋗞ʯΘ߰$C낙ԂփΥàк##F'*)(PQSVXWTPOPQRSSTU,-./00/.->,,-../0/[RKEA?>:79?FKMNMN'()*,.//---./01221112455420/.---..-,,-.--+*)(''&%%$##"!! !  ><;;962.++./0110/013565433345656678765311222345444566654324565443334553223343223332344433456554310/.-,-./...-,,-/000146,99<;98630/13579:878898654323334310269:;<;:9877555433455544456677889;;;:8765444332358=CIP,058::<>@AAA@=:50+((*+--./022100/-+)'$B><:74310-+))(('&&)+,./01233358:=@CHKLNQV/365cYSOMLLLKKMNPQQPQPOLJHGGHIJJKKLLMOOPQRPNKIFCBB@@???@)?=:865557=<;9742333567898766787776556788877889;;=?ADFGFDDEFHIKLLLMNNMKIKLOQQOOPOOMLKIGEDCBA@BBB@>=;86430/.--./24679;<=>>@BCEFFFEEGECBA@?@?>?BDFFFEDCCAABCDBA?>=<:99876678898876567(89:999;<==<;<=<;<=?AA@>>?@BDGJKMNPRRPONNMLLLMOQRRRSTUVUUTKSSSUVVUSRPPQRSUVXYYZZYWVVWWWSLD>:77653233311/,*()+-/38;=>?@???>>??><:8631/,+*%))**+,,./00/012211122332111211222345678:=?>;87:>BB@?@BA?=;:87630-+)'&&&%"!  O%.67541.,-/12210//02565323578:;<< !"""##" 777899:987545553358:<==;:#;;976679<>>=<;;;<=<97655431/.- 0367889:; !""##"!!   ! !" +! !!! <= !"#$%&&&%$% $##""#$$#"!!!" !!  !"#%$$$###%&()(&# ==>? @>;854456788765431/ +00.--/12321T0/-,,+,1>&-01232/)#!  !"! 766;"'*,--,)&"8 #%%#"!! !"#$##$%&&''(*++*))*)(''&&'(()(''&%# 9676567766776654567678766777655566645434543344434 33443344565433343344545433344555433444333234433322233344434543345654545 6665444556554421023321234544334567766766778876678  !  ! ! ! ! +  !""! i !!!"!! 9654457973.*(''&%$%'))*,,.04;B##" ;9765457654210.-/158< ;98557 !"#$%$$#"!! !!"!!    ! 654433321/.-,++*)(((*, +*)'%$$#! $+37:<<:77B78_Okwd}32>: !!"! "&-/:EV5;DCJKU]ensxxyohca__cfjkkmpuupj^TG;0WYe@Qgu>@BEFDAypje^WPPVZVK;_3IlENNI'D@==@DJPRPNMMOOMHB84//./.../.-*&"%8;xKNE$#*/1/,)%" %+;P5@9WDAW@TUFgWT5Mk%BIy~{vpmnt|@ymc`ejfWE::CO[^]^``[TPRUQJFHKKJLSZ^ced`YTPH;^I8248=G^?D?rjdbgq?CEHKMPRSLz]I90/8Kh>v^D3\[04983WJ9-''1FZa^VTa:ADGOW[_gj`M=406?EKR\ejjheccdfdZQOT\ft|zxz?AA@@CHMRUPBa=C%&987555676520/0148;  !"###"""! 9: !"!!! ! !!"#$%%%$5##EB?=< &/;&1>R5BJKF@;6aL8,)+06@O^_N=647;98::;;:8521/-,+)'()+-.01210/-,---../+.---.01246 !""##$%'((''()*++,,+)'&&''()('''((*+,++*++,--.0367766410...--,+,,--,)KGK*.000/1345544554310/.-,++457:=><:9:;;:999% ;4-'# !"#""   + +   + + +   + +     + + +  + +    !$( "# !*  #%),-/26!$$D=989;<=?ABCDFEB><:9899;<:99;< ==;8740-,+)'('=&$"  %,4==>??@BDFGGHHIHGGF GGHJLKKJHEDC)DCCCBA?=<===:4,'#  "#$%$#! ! ""#$$!  + + + + + + + +& +              + + + + +  + + + +  + +  +   + + +   + + +   + +       !    + + +  + +  +                 +      + + +  !    + + + + + + + + + +     + + + + + ! 7/BK9531246899:@EJ'MG?983' &.58889960.02/*')+,+,17:=>=9520*"2$%4%($@8436>#&(+./011-F2%-A'H5#*) 1'#041,,5!%&(-247<>7* "%).5;>=<:778:92,+.39BHFEG$$#"!$(.351'4  + +     +  + + +  5  !+$*)%"1%)22&!"+ +    +   +  + + +  + +        +  +  +  + + +  + + "!~}~}~}}~}}~~~}~}~}~}}}}}~}~}~}~}~}~}~}~}~}~}~}}}~~}~}~}~}~}~}~}~~}}~~~~~~~~~~~~~}~}~}~~}~}~}~ mT]=<ȅɆʀрȼS\ + 6 -܄`郐m#"> +¼¼公ڇɑƐ퇥ƿ퀉􃎛ƻ͙؛ɫၔ±ۿ܂焄䅈̳̿Ÿɀ郔ߵՑǼؤ툝𺠘ӈ̽Ђߵ󃝳ǜ跟ݓȽӿ ,",X (+*)(QRSSTUUTRQRSU,.035431/,++,.//0910[UKB<988:=<;::862.,,---. /0233221112334345665543432212233345543343222334432 100/000/0122210//0122322111234565420/.../0//../023445777 :963/-+))'!),/11011100012344689:87665556788898876555432211123445689:;;;:;<==>?-ADFHIJKLNMKIFBAAAC#$&)*+,,,-///-,+*)))QQPMIFDB CCCBCCBA?>=<==<;;;<<=>?@ABDEFGGFDCB@ACFHJLMNPPQSTRQPQQQRUWY[ZXW-XYZZ[\`dgiihebaa`]\[\]^``__``^\ZWSQPONMMMKIHGEvFEDB@><:9864331/---///.-.146789:97546789:?AFIJJKLNOMJFCABBBCDGILMNOOONNOPOQSTVVWWVSNJHJLORW[`157899:::86e^Z[Z\]^_`bc0dggfdbabcbbcehijhfeefikljgb_[YWUTRQOMJHFECBAAA@?=<;;:::; <<;;<<<;;<;:9::;;<=?@@@ACEGHJJIJKLMMLJHGFFGGHIJKKLMOQRSSTUUUTSRQ +STUVWVTRQONORUVVVUTQNKJIHGFFFECCDDCCBBA@<97 557:=?AAA@>=;:98520/.-,+*)('&&'()(('&&()*,--.//0011221123443334579=@BCCA>;86679::8653210012 +34664.(%#"! ]$*/3553.)&'*,--./13432223567789: !""#"! ;:999875201100137:: 99::9 899::;<;;<;::9876689;<<;96433444200/./146898789:; !!""! ! !!!"#"! : "$$%$#"  "##"!!!"""##$ #"! !!"##$#"!!  !"##$$$##"+#&(**)(%" >><;975568::9877764200/./01232101233321110/.,+/:$*./0110+% . ;>>==<;;;<;;;  !!! ::;:9864211356887520-*('&%&'()*+**+/38;9754323334*7544567789  64346  !!! !"#"!"""! .76697410/..-,+)('&%')+./000/,*)'%$#""!! "(06:C+?X:Oh}IQZaksiDGGX//TPQ0AXgpqmllqv>?ADFGGC@>;sqpnlkjhgedehlje]WROMMJD@AHTbmqrplgek;ADEDtof`\XUOKD@:429TNjfNf=V=.(%&&&'*2>M1;KY_[QBhYMIU:VdW:OD(;_=pW;TK,6BTj?JPDfK=?VB[imfXDdE/MN0>?@?>=G>>@BDFHGEGO0A`DXnOW\YSMJJNRPJB?>=scUMGGNZfmokcZO@4\USL;-'%$##"##$$$###"!"! +!"#"!!      !!!  !!""##$%%$% +&'())(('(()(()*++**+++,,,-,)'('&%%$$##"&!=9669@?>>?><99877889985320/.-,+*)*+>,.../0123100/-,-.../13699:<>@CDCBBCCBCGJMPPONNMLKMOPOPQTX[\\ZXW;VUUUVWXXWUTTSQNKHFC@?>=<:98643211/.,*(&$$#"  "#0$#! !#$&(()()('(),./1223320,*)()***,.024555457899::852/./1259=A!$&'() '%E@>>?@@A@@ABCDE-FGIJJIHGGHGFGILMNLKJJKNQROLHFCA?=<;;97541/-,+* ))((''&&%$#"#"###""##$%&'())*,.01233323345689:9876789:;;<>>>?@ACEEDEGGHGGF-GHIIIGEDB@?>=<<=?@@?><9520/-,+**))()((('(('$" ) "$&(((&$" - !"%'((&$  +  + + +  + +        +   + + + + + + +   +  + +  + + + + + +  + + + + +   +     4   + +  + +                         + +   +  +    + +  +   ,(6B&,16>F@($  #-&!!.7>?<;;>A"#%&(('%#! ?>==<;::9865335874/,('&&%!")18;<:7326#%&$ 4-,05776645"(*+,//-*)(%""#$##%(**)'$"?;631.,)%" ),A>,6+ + +  +%/31* 1) %.7-2!"<:$2H--(B5028?B?91& &)G,-+NF?=?BEECA><950)%$'*,/24:BEC<51122003564346789961+'%$A0($#.;$+/'6#*%7BEA6(7#$'",8G**I6$, '*' .$+$#&,--3;BFF@-+ )-.//28<@DDA>=><648"<91--19C'/464/("<0 + + + +  + + + + + + +<!#7(5BP/474/*'(+-,'#!!!<2*$!"'-59;:60(%"# + + +  +    +    + +  +  + +    +   + + + + + + + + + +  ~}~}~}}~}~}}}~}}}}~}~}~}~}~~}}~}~}~}~}~}~}}}~}~}~}~}~}~}~}~}~~~~~~~~~~~~~~~~~}~}~~~}~}~ !KBǿهڀ`х<ľЄԄ'˄o¾=煔.rd$IĿÄƀЈ̡Ƕι낑Ƚĩɗ񈌋꼞˟Ĩƾ𺕔ȼչʹɾFȹǹ턏ڡ괟g닖⽲ʾ 7*B-,*)SRRQRRSVU,-.023332/+))*,-/0001230R@67;@CCBCDDDEHLO(()*))+,--,+,-/12344433322333210//122210//.-,++,,+*((('&$#"!!! ?>=<951+'(*-/13443 5666543456555433322234544431122344321012320/-,-.02235776432221211100/0C//..--.01110.,-.0113445777899877665552,&$%),..--,-...-.024679::;<<<=>?@AA@??=<;:98988865454K3345788998:<=>===>><:8766579:;=<;82-,,-/1467789;A#'+.158951.,++-/49=?>70VOJG_EDBBA??@BCCEHLNPPOONMLKIHHHIHFD@;::;:741/.-/369=<:999::987631/-)&%&$%%%'*.38=BFJNORSTTSRQRSTUUWXY\]][ZYYZZ\[[ZZWRKGGKPTQT[15677899752b_^[ZYXYVTRRSQPOPQPPPO?PSSSRSRSQQNOMPMNLNMMLLJGDBA@ACFFECA??>==<::988:;;:99:=AEFEDDCBABA@?>==>>??=;:;>ACDEFHIKMNPQQPOOMKJKJJJIHGGGHFCCEIMNKJIIIJKKLLMMMLKJHHIJKKLMOPOPQSTW[ZVSQPMKIGEDGIKMNNNMLJIIGEDCCAABBCCDEFFDCDFFEC@>=<<=>=<;<<<;;:;<;95320/-*)()**))(('(*,-./...//0136887789:9:<>?ADGGB:3./111/-+*+,R-.0246630,*(&$""! "&*/5:<:60+''(*,,./../01234456667 ::9889:<==:7531112355447878:<;;;<;:999: 98779:::;<;<==;976556665 666530--.0258:<999887556789 !""!  !"#$$$#"! !"""!  "%&&%&''$!!#%%$$#""!""#[""!  !""#$##"""!!!  !"##$$###"!!!"#$%&'))(((&# :732479::;;;9742100///13321344433210..-+/9%,00110-)$ 2 "'**)))(%#"!"#&'()))(&$ 76:8524:"'+,,+* +))(('&&%%%&%&&%#" 97887778767778767887667875544465565434556655434556545554455544321112343446566766676665545433222111232223456 543345677765454566654,56677667887667654456765332211100011001234443234544322345666788  ! ==>=>=<=>>==>  9(87654333223469;;:86410.---0232100023568:; :8654445: +;;<;:: 5310/.-,-17!!  !!!" !730-,--./010/.--,+*(&%%&&%#"/ "%(*.269::9532100.-,++*(&&')***+++**))('%$###"%'+.4(NOjgXPTY\UF7,1>C:S::@O1<>AGQXacb``_^`fhhiko;<<==;8mmmlmo9;urnkifa^\]`gloo9===<:9::;;<=<<=?=>>ACDBABCEDB@@BDGJKJGFGIKKJHEFJMNJFFFD@wlda_hs@|m\S]luti[JAHSWYfn[@ApR92BYc`YTMIZxKURLMV`gbTGxl`N:[V8MXYZ`b\RE;56:CMSRE4QIC5(! #&.?P[g>XwAwi^SF<=HT]`[SNRYbo>CFGD>u;ADFHK'(OMN*;2UAR\XMGEEEB>pin=DE@q`W_9?;^JFKTZVNHGKNLH@bI@:5357:;70)$"!  !!!  6 !     !"#$%&''(('&'()))()*+)('&$+###"!BA?<85448:;;;<=?ABDFFDCDBA?>>>@BDEDB@@A@?@BCDCBA@@??>>==>>>=>><;9998656 !""!95456 !!!  !!!  !!"#&(*,,**)))('N'(**+**++,"+(%(,03322234556678765443110/-*((*67766788778 !"3$!"! "$& + +   + + + + +  + +    + +  + + + + +   + +     ;  $(+*% 71/.../10/012369;>ABBAABA?>=<:5;;<<==>=<<::;;<<=>ABBBCDEHJJHECA>;865568899975421/.-,+,,++,,-,+**,,+)'%$$%&&%$#"!   !"##"8#$&'(**($ + + + + +   + +        + +  +  + + + + + + + + +   + + + + +  + + + +   + +  + +  +         + + +  +   +               + + 1    + +     +  + +  + + + + +P $-@<0*.22,#   # " " $"  #%+078877656:<2?"""##" =<<<=?!#EB><;9510015777 "$$"! !!!  & "$$##$%%$#"""$&()('&&&%%'()'$#$&)*)'%E?<<:=A$E:.*/7<;4,""),.6;-&6802#6K-//+E.!$/32/351!,0#:N))KB<>AEGHFB?>=8-"1,6'131/048<>=83.++-01369<@B@<72-)&%&&>)#3:83.q(%0D-30,.5=A=3)E=6- 0.-431463-$%,00')$  +2:$5K(H>70'!!(0684/,.37>$'**&!?!"DCCCDE%),..);#" + + +  + + +  O #%## 7*461(#"##" 96:!&&#:/*0#!1$ #)-,)%$&'%#* +     + + + + + + + + +     +   + , ~}~}~}}~~}}~}}~}}~}}}}~}~}~}~}~~}~}~}~}}}~}~}~}~}~}~}~~~À~~~~}~} ~~}}}~~~}~}~}~}~ WƱn܄̀ͅӀ¿OʅOޅ)ýýĿBL* + pをA(2[O--L5ƪ݁ίĭŽعվ¯Ơ󐱽óǴŐƴ遇ǡ̒յȯ>Ѻ% @)L.-+***+*TRQPQRT,...-./010.,*))*,-.///0120N:+')-04:AGJJGDEHM(*,,*)))+,--,-.02323332210/./.-,,,+++*)('&&%%$##"""! =>>==<;9630-+,/1344321234423323323343233434431/.//123 +223332233345321'2211121112220.--,,,-./000259:97422454322346;96541-)(,26644324578:;;<;;:;<==>>=<;:;:99899898765678876520///001112246766531071367665321225:>BGNRRPONLIFHSh=A@=;9752ZOJHJMOPPPOMJFC?;8778899::;<>=;988:=ACDEDDEEHKJJJKKIHIIJKKIGFFGHJKLKLNPQPNMvNNOPQQQRSUVWWVUTRPOONNMKJJIIJKKMPSUWXYZZYVSPONMMMLKJHGGGHIIJJKMNOPQRSTSRRSRPNNONMMOOMJHECA?>>??@@@ABCEHHKLOTW[]^^[XVVVUVFWXYYY,+XXY[\]_`a246899::98543210//.//011000^^]]]//.\][UQMMNMLLMMKIGEB@?XAA@><730/...-*('()+/134421/./121/.01223310.,USTXWUTTQKFB?<:=<<>@ABB@??@BBBABBABBB@?><;<===<;;;:]875420-+**++*(''&&(*+,--.-,,-/124566678999:>=<;97764678889;<;;:999:99:987679;9644433344431/,***+-0233468:999::9779 !   !"! !!""" 9;!$&'''&&&%%$$%&%$#"!!""! ! !!!""!!! !"#"""##""!"#%&'()(&" ;;:99::99987765322210//0233322355543332211/.-+,4"+.//-+)%#"""!  #'*+*)('&%$$##$%&&&$! "$%%" 532368874211249>"$&')*+*))('''&&%$%$$# :987887654456565554 55544333444343344334543444333234334567 665545566677653232333223455678887643 +45556654445 4445544456654 555665556554322112101112123 443334556789988 989 ==>??@@@?>=<=>?> !    7566!#$$#! <:876765431.,*('&''()))*-/001123455689998778766543210//0248;5420.-,-/4887530.,+)('&&%$%%%$$#"! "###"!""!!#"#&()('( ''&&&%%%$#""#$&(*-29 ""!!"#"""#%&&%$$$%'((''(((&%#!  !! ""$###%')+03:BO.7:=<=BIJKMPSVX]acb_\YXYZZZ[^adfghijidbfmlic`^][ZXWSRQOLMOSZacghjhm:?CFGFGGGFGIJJHDCDEGJLH?od_^agp;?AEJNRRSUVTPKHILKEBD>837THnFNQMEweQA75?SeputolnuEEABDC}yslbSCi\c=HMOPPPSUVUVVXYWROPSWZ\^`a_VH:\IBDIIHLZipmaTC2*3LpKW\bfjrqh[KuVMVhl[GjUOPY6IVNFKQOMS\`^UFhPB8.%"#%)*,///>7Ta^TKGKWdjid`]ZWVX[_j<@@ADJMNMMNI{cWVSC.9#7765 6789: <;;<=!""# """##$$$##""#_$$###" <757;?ABDEFFFHIJJKKM''MM0K>YpGOWUGlVWj=ABBCED@tkdYF74CW^VG9/RMORSQ*1562,PJKNMG?70,*'%$#"!!  !"!! ! 42245!""!    !"$&'((('''(())('((()))*++**))**))((()**('&&%%$%$HHGC>931146899988876679;=?ABC)BBBDEEDBBBCBA@@ABBBCCCDDDCBAABBBAAABCBBBCDEFFEEEDBAAA@>;76779;=?ABA@ABCE#"""#$%%%&&'(*,-./.-+**)(*+),,-.../010/-,-/112344456554677541.*'%&),.6545556* !.!##! # + +  + + +  + + + + + +     + + + + +  + +    $)./.--//--5D*--+('&$"?84359=>>=<;841.+)())()*++,,,-..-*))+/1344322235543454456778866688:<==>@AA?>==>>???ACDEGHJKNMKIHFDCA@?>=<;;;;:;:9&754467778:<===?ACCBAA@?<::997898631.+)'(*+,.-/02579:;;97654345867788899:;<=>> !#$&&''&%#""!  !! ???>>>>=:6433344321/.-..,+--,*)%#!!!#" .!#%&&%$"!#%&%##$$%%&%$$#!>;;>>;::841/-*(*06;> !"$&(***+ *+-/000///.-.?@@?><97643332001100//./02344678877789:;<:85433467889#:;=?ABCB@><;:::;;<==<;:963220.,*)('& +'()))(''')*)))(&%$#" ! + !"##$%(+./+$   + +  +  + + + +       + + +    + + + +    + +   +    +    +   +  + +      +            +     +          + + + +   + + +   +  +  + +   +   + + + + + + + + + + % %'(),...03421/.--..--/12334566325::7320.-,++)('&%%&)-1365558"%'(''&&&'(((&$##$%')(#;41137< #$&),../010.*'(**&!7,  %&@*02/)F:-"!.;ADB><=BIN)(NM'()(ONMJFB<1&:27")-.///132233453/-.0368:<=;5*!1&#%'&%(2;?<5-!+B-47;AGF@7-B-(/<@6(7)&&<+(0*&).,*.354.$3'!4>:2+(*3=A@;86311246<#%%%(,/ 0-I700/% +    +  + X + ""###$#"$!2?H',1/&4(*6!$%%&''$@95-!+/*"  !"$ "" +  +     + + + + +  +  8   ~}~}~}}}~}}~}~}}~}}~}~}~}|}}}~}~}~}~}~}~}~}~}~}}}~}~}~}~~}}~}~}~}~}~~~~}~}~}~~}}~~~~}~}~ Lպ󁄃߀~倉¼ÿɄɆʀþƿ¿򁌗ɄX¿ ڄ9þ +ÄZÿ¼½„B@Yn僓?4R&-M (ZļRÿL䆞ハ򅍍ɷԱͬĎɱpĦԴŤ¼ؕ낛がΔϠʚʫԹ T B,,,-,-.010.,++,.00///02320/.,++,.///..01[F5*)* +-2@MND;9?G')* +,.///./0112122322110 +110///.--,+**)('&&%%#!!!  =< ;840,)),.00013432111221233111222100110.-,-!,--./123334554223576555443210//01010/.,+,,./0//-,+,-/269)6545:740*&&*/24431112333456767789;;;:::;;:9::;;;9:::;<;:;<:8777889:::<;;;9873/--./2579>ABBBDGIIHGFFGIIJKJIIJIIKMNNNMKJGDA>@HX3899;?BEFECA=70VND=:9:;;;=BDFFFGGEDEEDC@=:98879<=9;:;<==951-,,-.16:?DHJLNPOONLIGFEDDDEFFFEECBABBA?=>DJKJHFDC +EFFGHIKMNPQP RW.//0110`^ZWV WXXYXTPLIE>975j66679<:876679989:9754333441/.//.-./0B///013331^[[XTQOMOOMIECDEEGGEBBFPX_122dfg5689951ZRNR-28=>?@@>:8631159 ! >=<;;;:99:;< ""#"! ! ! !  ! +6677678889:;;!!  i !""!95358:;=>>@>;741-+)('&&$"!!""##"!!#%&&&(+-..//014687877666544454333200/02689778887756 544322100135 +687543321/- +,+*)(&%$#" "#" !#$%&'&%'((('&%$%8$#!""%')/6?(2:?BBBCCB??>?>==95/*'%$"! !!"!!"""!  "#$#%&''((('%$##""!; $-;S5DJF;YC9iea][_25655d\XTUSWOMGGDCB?;9:AITbim8;@DJLPNJHJOPMG@7]PJJMTb8>@?>@FLPRQPQRSSTWXXVSNJC>97:DRX[_bbXBYDH5Qr{uke``iv{xvxDGHIJKJFlVHDHLNMGDKX^[TQQQSUWVQNPU[]\ZWTRJ@7bO5GM=OH97@HTail:CKNS[ZWV[dhd]YWO>WIRdeRB9.hIDL[c8EU]fwFKGz_IA>9\H<:@GD8*$#$)B7B9]W/:JRPNOSX_gg]UWf=DDAAEKMKAb=B$9865554433456789; !!! !<< ! !!!"#"! !#[$$$#" ><=?@CDEFGHIIIJKK&&&'&%)C?anibacffc_^f;B?kWF5R?1-.233138A%(,.121/28?A;7434689;<>?@AAABBCCBBBAA?>?@AABCDDC&BBABCCBBBAB"#$#FEDCCDDEFGIKKIGGFFGHIHGEFFFHJLLJJIJJ'(***++,-../.-,*))(('()*+,'-./15:?AA=8420.-,*'%$"!"$&&%#! !#%(+,,!7& ""  +  +  + + + + + + + +     + +  + = + +   #!%')++*(''')))*,..--,-../010/012456787420-.3>%)**,0356430+'";2+&$$$&'()+.0112210110/+('%#"#$&&$#$$%$! %*/48;>??>==<97532111344310///00/-,15765420/ 232234567998S9;?!!!"#$#GHIIIHFECAAACDDDB?<840*%" "$##"!"%&),/1346:9878655569;<;9741..1468:976420/*.-,++)(&$#""#%''&&&')**('&%&&&%# !! !""#B"!!!""##$#B@A@><;:::9730134664103;BI&&%LMM'(*,+)%C<79$(+--./112210$1235677533222101235678897531/.,++,,+*+,,+***++,.01210.-.-../../14789:;:97554$678:=>???@BCCCB@??><:7520024420,*)(&% &&'&%"!!$&')*+*))*+*)('&%$"!   !"    + +  +  + + +   + + + +     +  + + + +  +  + +  + +   + + + + + +  +   + ,   " + +  + +                    ! +  + +       +   + +    +  + + + +   + + +  + ) + +  +  +  + + +$'$(%),.0110259<<;>?ABEFFEEFH%'(*,--,+*(%FA;72002579;?DJ(+.02320[WWXYYXVQONNMJE@>>?@ADFIKMORSRQRQPRUVUTSROKGGN`;EJKLKIFB@><;;;9740-UQNJGC>:742232220/../13568:<>?><<:99:;=@BDFFFEDCBA@?=>==>?@AABCDEEEFFGHIIHGECCEILLKKJIGFEDDBABDFIKLMMOPQSTUWXXXVSQMIGDA>841-+*'&%$%&%%')+,/37:=ACCC@=97651/.059>ACEGILNPSVXYY,,,+*UUWWUTTVW ,,X,-.//01_XRNMLKKLLLHFEFGH"GGHIJIHFDBA@?=<;;;98679;<;::;<<<==>?F@BCDC@=;841.-,,/258:;:8777dWHA??ADKQX[]\^^`bh579;>CFHJJIGGGEDCAA@AABCEF!GFFGFFFGGEDCDFHJMOPPPNKHFDBBBCCDDCB@??>=<;9859:<>@CFHIIGFEB?>>?><;=>@BCDCDDDEGGGHIJLLMLJIIIHGGHIJKJIHGF$EFHIIIHHHIJIIHFC@=:77898630/04789::;<==>?@ABBAAB@;4//02210(368:;;8667766778999:;<<;:88877789:;<===<;:::976420..///01100/.,+*(())('''%$##$$##"!  !"%&&&''(*,/2220..//.+($"! !#%')+++**,03577765444568:<=<:86434554469;<<;::;;<=<<<85457::74'/*))*,,+*)*+.03687520/158:< !"#$%$#! ::< 75457 !"""##$#" !"!"! < "#$$%$$%%$$#"!!""!! !!!"! +  !   !"""!!!"#%$#$%%&'()**)'# =<;;;:8531#357787655456678997652/-*+5 #$&),,*('I%# #&''&&&%$#! !#$$$#"! :85421112456554334432101248=D$&'&&%JIHHIHGGEDD"#$$#"!;:98887656776556876765544345444343444344555422234543334433433445556554432223444556899::9765544554334345444343 +223445665434322110 +.///.-.//./0012122233443344566<<<=<;:99:; !##$#$###""!"""!!! !!!"""!"! 999889:::988:<===<<<:888: !" <964395689853110.,+)(&$"!!!  !!"#%')))(&%%&(+-./134677655567F66679::99887679::9875556654445566789:;:87666789998899:::998887778887665 4210.+(&#"!! ! !!###$%&&''()*)())**('( '%$"#+=R/0114)5:@EEB@?>861/-)(''('%#"#"""!  "&(('&&%%%$$#"""&5R:GJIKORSORQNLKMLKIFC<6225:?DGIJKLMJECDIPY`ba]ZWTMIHILKD=;AO[gpt;CFHILOPNIC?<:9888:=@BBEKOQSVZWAON[]WND?=FdIZ\\_egd_ZXWUTSUXSAY?548>DIG<\JH^IhvzAINGr[QQSOF>:cH67EVa[LEN^2[ON/>HKOUUPMMQYaglswz>@>rdT?Q/:::99987654566566679:=! <; !!! !!"#"! <>@CCCDEFGEHIJ%&&%$%(.;JX04;HSTH:1,QLHE=3+()+.1:#)-159<>AC=\A57AHK>.&"#&+5;5)#!! ! ! 4223467:8679;< @>:9:< !"""!  !!!  !"!    !#%%%$##%&''&'('()* )(())**)('(('%$#DDDEEEB?;889;>@ACEFEEDEDCBA@???>==>>?@BCDFGHIGDCBCDDCB AACD"EFGHGFEFHIIIHIIJLMNPQP()*+-/0121112211101100/.-,,+) +((''()*+++*'+,-/2576543110/,*'%#"! !!"""#%)+-6-  #% +   + + + + + +  +   +   + + +  +   % !!"! =::<>?>=976663.)(()*-0357:=?@??AA@ADFEDCB@=97;I.7;:9742.*&$#"! 0.,+*(%" !$&'&%%$$%&(+.024310/,**+,--./0111234b322357876532110/.--./122346899::<=>=<:8520.,*%"! #%$$" !#%'(*,/134554;2233322468;62//001120-++,,---,,-./0110/.--,+)('%$%&'(''&'(''(*+,-./2-*('$" "$&()'&%&'KB71//38?CIKLKLLMNR*,-036899987653323344565446654 32123468:;;:8531/.-../011100/.,+)('&&%3&(*+-/1331/.-,*)**)(()+,..--./02334456678876655678;=<=>>=<&;::;::8765544431.+(%"!!!  !!!"#$%&''&%%#   5 +  + + + +    + + + + +   /  + + + +  +   + + + +     + + + + + + +  + + + +  +  +   +  +   +  + +   + +     +  +                 + +   +  + + +            +  + + + + + +   ,  + + +  +  * '('(*+,,+)''()'&%$!#%&'(*+($##',14430.,*&$$$%%!%-48: "%'('%##$&%#! !#%%#! 96555430.+))+/47:"%'(),/0/+'$! "$$&)-/1475%)' 0>HMKGDBACC?98>FIJM(((LC;;>>940-+/8AC>9536;<840.06=;3,("4(&/87-# +451)!$9,788;>?=9654333584&0 "%(' -#".&:DG'I,/*@1+,.,&" 6%(5;4(#)31))$*,.21.+*-29>BFIJ&'&E;0"' + + + + +  + +  + + +  !"A&"++$    !("$  + +  +  +         + + + + +      !!! + +  + + + ~}~}}~}~}~}~}~}}~}~~}~}|}}}}~}~}~}~}~}~}~}~}}}~}~}~}~}}~~~~~~~}~}~}~~~}~}~}~}~}~ ʷTǾޅ*ɳ#퀇߄0ýƄǀĹͿ¿ǀ¿҄Ӏ½C(󄉈 +J.6ü μ獚»쁐ɀ񁅀􎜧¾˯˺̻ˤӆĿͻրꮋٺ˃ܻʥ-iӮ̀턚ԲϿC w +&10/.-9.-*)*-//.,,*)'O()+--.//[RA3'#"#$%%&'(+-/1222118EP+**,-...-,,,.024323321000//..-,,,++*) +('&%$##! !# ;:::;;973.)%""$%')+--,+*++,-7.-.-+**))*)((''&$"! #%&())('&&'(('')*+,-./0010///0 /.,)'&')+.012S3454311234689::976557545 @9-""(0676656789766543334566778:;<<;:9(:;<<<>?@?>=<<=?AFL(*)OJ@60,)''((()-6D).36/557:>ACED@;975334566lkjihhhgda_\[[[\]][YWTQMKLMN=OQTW]269:841-+)(()*))('&$#$$%%HEA=;<>?=;::;=?@AACCCBA???>?ACEF +EDDCCB@??@BCCDEFHJKKLKIHHGUIKKJHGFEFFGHHHGFEDEEFKNNONLIFEFHIJJHE@<82-)$!?<;:9@BEGGFEEDB@>=<;::;;<=???>=;::;<=>ACA2@>=;:50-SMLOW[[Z[\]\\\]^`dinq:<<<;=@BDEFFEDDCCCBCEGEDDFGIJIHGFDBBCBBCDFGIJJIHFDCBCDDEFGIIIJJKMOPSSSQMJIJJIEC@>==<:9:;=AEGIIGFHLPQOMJFB?=;:::;<=>?AAA@@BCDGHIIHHHIKLKJKJIIJHFECBCDFF&EEFGGEDCCDFHJKMMLKKKJID@<99;==;999::998J77678;=?ADED@=96544320.+*(&%%$$$&&'&%%&'&&&(+./24578999;<==<;989;<=>=<:98643320/..-,,./01220/.-*(&%%#"!  !"#$%&$i" !#%*/59;;60+(%"! "$%&')**+*(),/22211247999:;;9653234568:=>=<:987889::< 989;<===;6-# #',16:< !! !"#$%$#! = ""! 78 !"!""#$#"   "!!!"!! !#%%$$%& +%%$##"!!""! !   !!" ! #$$$%&''((('&$! @@??><;976312467899:;:7432210.-/2566530.-2<#$""$(,,*(&$%%%$" !""#""#$#"  "&))($!621121235787678766432249?#%&%'''&%IGEEE###$$$###""!;:887876667 +66655676667666556667766554343224544433345432334343445665 +444555455434443323334579:98766566555654443434443334 5677666554 3322210/./0 //011233344567888 !  9:99:;:9:; ;;;= !"#$#"! 8!"!@=;:974310/-+('()+,-,+*,/110/-*(()*)))('&&%$"#%&'')*)( '%#!  ! !""$%&(*+-/1357:<87679:9852.-,+,.3::7631011223334568766689:98766678 75310.+*('&%$L%()(&&&%$""#$%')**+,,+(&$"#$%%&'((()*-22+# $''%#""!!"'+1: #%$$$#"!  !"#$=##$$%#"""#$$##%'''KIGA=650/.3797678:<> "'4R8AEHTanleaadhijlo9qme]WTROMMOQRNLJHFA>;>@JKPT`kphddfgl;AFIJFA;997iaYUVYXQMPY[]Z]gmq:;<<:7jl7:?EGECBBDFGGHIKIF@<9gb^^_beijh`\VVY_h8;8jggdbacegjklbZb?MW^iv|wrty~xl`[^elu~|iUEBObkcWUYboy~|vqomkfcelssoh^QCGLCgV4U>JPRPNPU\^XNHHGGJPVSFlURXbfheYH;h6AQalojlAEqL6.Y2>E6:S@G4JSSOJ?2XZb8<=?DO\cb^ZVSRV^hqthUCcB*87644456788899:;;= "##""!"!=< !"#""!! ;99< BCDEGIHGDDE8"#$%(8R]M7,(&%%)4&7A@80*KC<758>$.==>>=;;;:;>@CF$$$#     "$%&')('((''(),/133321010/.--,-./ 01344566887665N677765322355543321100245432/.-/0110.-*($ (&$$%'*."%()*++*))*+,,--+)())*+...--.-,+))*+,.//.-*./ !"""!! @@?>>><83-)%"! "#$%')*++,-..-,*%#&*-./000.-,++**)((''&:'()+,,*('%%&()+-///00/-+*($ 6216@EEDGJKJKKLMORVZ]/01100135,78887545666566545789976521000112234689:986421L3345566779<==;745653100...-***+,.13430./3799862/-,,++,--///00/-./0013567668:;i::;:98668:<<<=>??><;;;<=>???=<<;961+'$"#$$#"!!!  !#$%&'&#     + + + + +   + + + + *    +  +  + +    + + + +  +   + + +  +  + + L  + +   +   +  +   +  + + +        +                     + + + +       + + + +           + + + +  +   +  + + + +  + + +    + +  + %!##+4=;63246889; @=941.-+**+--*(&$# $$(+4:;421127$(++)% 82-,,.,($%+,,+,26867$(*)'&&()))*,-+)%#!:7454336751/++-29 ! ;:9754689:;<62;'06;CKOJEEILG>525;@FKMI;/%%.EH@3%3   + + +   + + + +  + + +  +  8 +2' #$! )"  + + +       + + +   +     +  +  +  +  !""! 2   !!""!!  + +54344 + + + + + +  ~}~}~}}~}~}~}~}~}|}~}|}}}}~}~}~}~~}~}~}~}}~~~}}}~}~}~}~~}}}~}~}~}~}~~~~~~~~~}~}~}~}~~~~}~}~}~}~}~ Gں탌!G¯ޅ)&Մa򄏖¿Å€ùV¼3VƄǀŀÿǻ"27 +/H؄'偍CG jQTKȿɶϵ߅킍ʵ̼Ƕγܢ{޸ƺ쐚ߣŸĶǮ)]ꂒ􊗥ө8)* -. ///0010/.-+*)5(('(*+-//*?.%#$&&'()***)*+,,--..-,.6D).11//.-,---.-./1235543211000/.-,---,+ *)('&&%$"! !# >>>==<;;<:864210//.,+*)&#"$(*,-.-,+**)((('&$#!!$&&''())*"+*))(''&&&%$!!#%')*,-...-...,,,./01012344432111234466653322233456 =81)# &+/01112210//01234568:;<<=>>??>===>@B_@=83/+((*+*+,/27?H(.5;?AA@?>=;;;<;;;87898 +9:::98668:;:;;;=?@ACDEDCAA@@=;2:9pqtvvusrpprvy{zy=>=;;=@BBBA@@ABDEGHJKNOQPPNJGEDCBCCDDCDFGHJLNOONNMNMOOMLKNPQRSTTSOMLMNNO5LKJIHEEDFKMPQQQPQQRTSRONLKJIHGGHGGFGFEDDDEFFFEEFFGGHIKLLLKKKLJIGFEEDCBAABAAABA@?@CFI KMNNKHDBABA@?>==<<<;:97788:<9743211/,++)((()('%$$%&'''&&'((())*+,,+**+-/1356789754 5443210/.,,-_,+**)(()((()*++***)('''(())*)('%$#! "(/5:=<6/*%! !#$&&%%'*+*))*+-0123566654211357654579;<=;:9866678:;;8655667530049= !!"#$$%#"!!! !"##"""###" 9; !  !!  !"##"! !!   !"!!""!""! !#$%%&%&%%$###"""!"""!!"! !"##"!  :9  !!"##""#%&'2(''&%$$$%%$#!  !A@???><;9753331.///000/./1100010)/.-,*-7"&&#!!$')*)'&$##"  9!#$##"#%&&#! :7431110001245677667667776531015:A$&'&%%HF""ED""!"! <:97655676544456565566565554 3222344321123454455442223332223344455545656654343322234 3445678998876545454333444565 666555443321 +00011000123454554567 ;;;988876677666789::;;;;!#$%$$###"!"!  <;9742/-+('&%%#! !!!"#$$##""#%&%%$$##$&'())**))(''&&%##$%&&&'&%$#"!"! !!!  "$%&(*-048;= "###"#" $ ;865420/1369;<:867:<<:99988899:9:;;::999::99776787656630,* (&'),+*)''),/0368 "##"###" =7321/,+++--,+*++**+/6="#%%%&&%')-37CGRW^d5:?DEHFMRSQNP[eovx?~}@CFLQU[YTJsg_RH93RG:0++,/1:G/8>>>==;:965441//-)MHFIJJJNTX,TNKIJNQR*))*,/49?BEB=7:=9jedgm;>@BBDGILNOOOMJGFGIIGDB?<:76688lddhklgc]ZXXZ]eknlfdk;?EN[efcbituj\ST\ekli`QD@L^e\PIMTgWZckrvxyywsont~o]KfCQ=@Q_]Y6J\dm|EKRYWOJJIE@>BECBGLGjRTcwCFD|ka]WPSkFOHmE4;MXRE=>DIOTSQOMIEEINLMS[ZQJKS\^YPICBD?3O=."899::9989:; <=>? !#$$$#"! <= !!"#"!!!  !!DDEEFGGFEEE#2$$$#! (5<7.(&%$##$*7IPI@<;;=;84.)$!!"$$"2110/.--,,---,-.///0011210/.--./123446779;>@@CDGHLOSSUQMJGE@=;:99:;@CGIJIHGEFFFDFGFGDHILKKGFDEHGK!GGHGFDEEGHHIGFECB@?@?@?=<;:9877887655667655566678:<==;:;;<; +::9989:9878-98889;=>??>?@A@=730-,+*)'&%$###"!!  "%(*+*(&$$#!       + + +    +  + + + +    +  +  + +  + + + +   + + + + + + + + + + +   + + + + + + +  +    + +  !  + + + +   + + +         +     +       + +  + + +  + + + + +      + +   +  + + +      + + + +   g + + +     + +  &*.2 $()*(.0/+)*17?CD#HJG$&)-14873,IA;7/)"1) F#!!##$%',.+(&$&),- #$%# !#&),-./3#&%###$$"  ! 7335: "$%&'(*,-...,*('()))'&$"  !?::<>=9630/0026;=<98="%(/8@?<752-/?+1,<"(0-%!"&)-00/-*'%%'***++,176/++0674.)%%'$( + + +  + + +  + + + +  2 +  + +  $& + + + + + + +  + + +  + + +  +      + + +  + & + +  + "!  !"""!!  "!!  !""!!"!   5.-+*) +  + ~}~}}~}~}~}~}|}~}|}}}}~}~~}~}~}~}~}}~~}~}}}~}~}~}~}~}~}~}~~~~~~}~}~}~~~~}~}~}~ sοJ·ׄ}򀇌ĵkƽ҅рȺ[^cglnptz@BBB@==@BCA?@CCAA??@BDGKLLMLID@}>>=:8:;>@@ACDEGIHHIGIIHHIKLMJHJIHFGEFGEF GIKMKJHDDGIJ˄.ڄـº}ĶýR Z-ꅐDE,j3h e󉏗䅙򇌓:;ɾ̶ڲϯ뉗񾟰􀋕ʸ¼TϧG͈Ɉţ;. !1.--,,-./0100/.,++,,+*) *+*NKC:0*('&%%')+,++,--,+,.16?K)*+",-01100/012345676555320001221/.-../.---,,+*+ +*)(''&&%$#!" ==<::;;;9876432344431.-+)(&&%%&%##"#"! $(*+,+**)*++,-,-,,+*$)(&# !#%&'()+-./00/01110..//11222112321110///01234689s=:51-(%#%)0688630.--,,--/013467778;;:9:;<=>>=>@BCFHHFCA><<=?@@><===<=?C%+17>==><:9888:;;;:89::8nm9kgdb`]ZXVUSQNKIGD@=<?@?=:88:<>ACDECB@=9410^][XTQPGOOONMMLJJKLJIHHFECA@??@ABCDEGHGGFEDCBBCDFHFEFGGFCAAA@@?>=>@ABCEHIIIJLOQ*1+,-,,,+UUUVVTQMHEC?=?BD@70+),5BMQRPNLKJLNOPOMMMLKL7KKLMNOPPOONNLKLMNNLJHFHILNPSY/221^VNF?;8788654321234343134554446665679:;=>ADED@? @@ACCDDEDCCB+@??>>>=<;:;;986558;>?@???>ACFGHIHIJKICAABBCE+C~vromihlrsx~WYdjrw}MOPSRTUZ\__`chhjhiim^jgc^YSMKNPSQRRTTWXY[Z^^abcedeeffihggeiiijjlklkjkigddeehegjkonjf_ZVVRNzmgb_\XVSPPOOONNQRRQPRYSSRRRQQPPONNLKIHGGGFDA>?@ABDGGECBA?=<<<>ADEFFGIKMLMOPQOLJHFECA@@@??@ABA@?<989=<;86664210012232112223210-+*+,-..,+*)'&%%&&&'(*,/12211123432 110-*(&&&'(*,,---,+*+,-,,+*+*)((''&$#%+4=@?;741.*#"$$%'*,,++)'&&')+-../0122334689887789:;<>?>=<;:98766898754211258:::;!"  "$%&((&#! !!"#$%$ #" 69!"!!"!  !"" !!! !!"#"!"##"!  "#"! !"!!  "#$%&%$#"###"""!! !"#$$#"!!  :  !"$%%&''&%%&&%$"!"##  >>==;962,'&*-/0245665544332"1/.09#))% "&())(&$"! !$$"7+!! !#$%%&''%"=;86332223210258788642123335;@#&'&'(((''%$#F#$#" >;999877887654555665655565556677766443222321 +2322234455455323332334565455667677767776667 665544333234566777677877655655454443454344544432344343221244554223432121011233321122344577767678876544567;976566776544344578887667899:;;  !"$%$#"!"##$#$##"!!!"! ;83.)''*.24443210/011-)'%$$##"##$%&&%%%&'()*))*)*))'%$#"!!"#$$$#$ %%$$$%%&'+.02468:= !""#$#"!  :98534689887888755665445666556689:99:<<;:9'::;:9740..039=B#&'&%$##%(+,+*))'# !#$#"!;8422110110/+)++37??@?@?>@A@>=<;;=@BDEEEDCA@@><988mhegjm9<@ABCCA=uu=@CEGJKJHLVZXY^`ZQMLOQQNMPPICCEEJRWZXSRW`jokebfovywuvwp`LABEC>seQCIU]N4PQ7UtJUTKA@GQXWRKDsUAEVhvCMRLzaZ_hwGPODrknq !!""# ""###""##$$%$%%%$$#"""!! == !! !""#"# "!  !"##$%$#"!"#$$#!!"###"!  !"""##$$%&/#5=19"%8.GRI9[A.&$ %%&&%#"!!!""#$$##"! !"$#! +   !!###! !! !"!  !"#"!!!"""! "#$&&&%$$& +'''&$"""#%'('&&&%%%$%%&&&%$$$%&())('&'''(()**)('())(&%%$HGEEFFED"CDDEFHIKLM''KHFFH%&$FEEEDDGIIJJKKL%$#FFEFECBC#&)+,,-012102456643X456677653210//...---,++,---,+**))()*+,,,+)((PON'&'(*+*)((()))(''&'(**'$" "%')+-.#$! + +  +  !  +     + +  + + + +  + + + + + +  +  +  +  +  +  : "',4;?>:50.---,*'%#"#$%%&'%%%&')**)r*,..,WWWVTRNLKHDA?=;:9730-*&"!'!#%&()(('%# ?=>=;97666788777644344210.-,+*)))*-023577765444334666420/..,,,-,++,,--.-7/140/0111/-+)&#!#&(&!*0210-,,+,-///-,+*+*5+,,,++**)'&&&''&%%%')+,-06<93.)%##%%%$""!!!"#$%$#"##$$#"! !#%&'(),-,*()()*+,,,,+*)*)(())***)()*)'&%%&(*++,--,/245566789857:;;<<;sorquw}䈏ɿûǽ¿û÷ϿFwmf^YRLJHGGDCEFHGDDCCDCCDBCCCDDCBA@@?=<;::97545789;=>=<==:865678;>?@@BA@@>;7321/-+))(('("'&$"!#%(*++,,+)(''&%$#"!!   *   + + + + +    +  +  + + +  +  + +  +  + + + +  + +   +  + + + +  +  + + +    +   + + + + +     +  $  + +  + +    +         +     +     +            + + + . + +     +   +  + +       + +   +  1 + #$,8%,8AK+-//01258:851...//-,+)&$##"&! >;731336699973/)%#!"*,/.---./176431-++-*5,/$*26;=@@?=;;?!###!757!#$##%&'%#  #&))($ >!#"!!#%&%$$$#!;8679;!#$%$$"=>!#&(*-.-,.4778<=9300231.-00+''&&*/4741039@B>97;AFHGEEFB8,&(+(%C9+!$-3*%%-A+21*$#)0441-'?+".9C(02,D5>14:E+32*C<=?"',-'<1*%4,,50/DJEBDGKD71/.($%))%!"',-+%!  + + +  + + + + + +  + + + ! + + + +  +   +  +  '/'*  +  + + + +     + + +       + +   +  + + + +  +  !!!  !"""#$$#  + ,++ +  + ~}~}}~}~}~}~}~}|}~}~}}}~}~~}~}~}~}~~~}}}~}~}~}}}~}~}~}~}~}~~~~~~~~~~~}}}~}~}~~~~}~}~}~}~}~ SȺĀL]mʻ[[ZZZ-..--/00.:;===???@dBEEFHǻ򁍙߄-½¾7&' +p턒' 1K;Q'!*ź7舩ƺԒݝ鍎녔ֽɸʣn̙§ğ̫\@~! -,+,+,,--,-,,,++)(NKC;2)"!"#$$$%&())**))*+,- /39@G&)++,./01222100011221000/...0/.-+,,,+***)))(('&%$#"! <;<<;:87664210/.-,,+*)('`&&%%$#! $*/1110.-,,,+*)*+-/257877766543221//.-+)'&&%$##$%'),,-..--..--.013343332211123443345 68>>=<95325>J)*)'JFB@>=<:75566679;<;<=???@ABVCDGIJHDBE%')+-/0359<==<;::=AEFFECB?=;:;<>@BDEC@>>>?@ABDEEDCB@@?=<;:999:;;:98886421^UKC?L@ABA?>>AGO.36655678877789;;;<;:742100`^\[YXWUSPOMKJIHGFEDCBAAA@>=<<=>@@??@?>= <:::;;:9889::;P>===>?ABCDFFGIJJLLKLLMNPRTW\0/YPJDAABFJMPSTSRRQPPPOMLMOPPQQRRQOOPPOPQR*TU*+,-0122/YSOLIGECA?=;:8753224320.,W,-.../00247:9:9:;=?@CDDDEFGIJKKMLJGFEDBA@?>??>7?@@@ABCDFGGFFEC?BEEFGHHIJKLMMNOOONLJIHHGGGHHHFDB@>===?!@ABCDEFFDBAAA@?>>=;:::9766777654434554321121/.---,,--,+**)*++,*/2433223331/.-,+***+,-./.-,,,+++,---,++,,,->./../27=BB>83/,*'%$%&'()+.0/-+)'$"!#%)-110..0233212366678:;=>? 5>:75445443347867 "#$$##"!!!#%&&%$$%%%$$$% +$$#" 536!!"!!!"! !!""! !""#" !"##!!!""! !"##! !"$&'&%$$$##"#""!  !"""#$%%$#""!  !!""#$%&'('%#"!  ! =;:876430+((+-.//13332)123444320///18")+($ !#&(('%%$"!!"" 9766 ! !"##$%%$" :7433457787555420026:"%&&&'((''('''&&%$#" =;9987677766556677767776665445567776544543212343223431 +23444556787666787 6545566554456 7788987765566655466776654334332343454210//.---./00123344566655654567877766788999887888777655323332345666789998889: !  +!!"#%%$$##$#""! ,:987766653334688778875420-*&#"##"!!!"#$%%%& (*+---.-+*+ ,+++*(''%$#""!""#""#$$%&&'(()*++,-./0122111234678$:< !"""!!! !! ;52112347<> <9766531123456678:<=>==<<<;:988:=??;61,(%)2>%'))(&%" "$&&$$#%*-01.-,06:BGS[bjnwBKRUVRTWYWWXY\[\^aejpv{}{uld`]]\_^\Z[[[XSQPQPOOONOQPOOPQDQPOOQSSPNNPRROHD@BEFDDBCDEC@?ADHJKGD??BFIJIHFDDFHHILMLJJMRUTTQLIFDA?>?@>:779=?CGMOKFCBCCDEDEDB??@ABCBBBEHJLKKKMNOOPRWY\[\_abcehjhd\WW\adfeb^^^```aaabdgk9<>?@ABEIKJGDB@@@?xt=HSSMFB@?>?GOLC=?GKHGIG?mi=Qbdbdimlihr}tib\KssBAiVK?c8;ER[`fo}BEILMMLLNQUTGb;ME6`BHHIKFnUTbmq?N\_TG=oik?ILH?obUCj6CRTI?@Lex}{?CFD}wo_SMC3D-%$%&# !""##$%$#$#"#""! ::;=?@ !"""#"! <::;=?@ABB!""##$#$#"!! <878:  52KUJ5@( !! $2IZ_a`XE2'$%$$"! !"""#$$$##"#$#$##$#""!""##$$" !!"!!  !!   !!  !  !"##"  ! ""#"!"$$$# $%$$%$$#$%!$#!!!"$%&&&%$%%&%$%&&%%%'''%##"##$#$$%$% +&&&'((('''&%&%&(''&&%%$$$%%&%$#"CC"#$&''())('%(*,..01245787778:;:632344321234445433210/-YW,-//.-,*))*+*('L&&&K%'()((('('(('&&')++)$!76"&+-./0210 *'  + + +  +   + +    + +    + +  +   + +  ] #&),,+**,/1221/.,)&%%&'),,,+)'''()+,-./.-,+*+*)))(()*+++)(('&#!:3+%!!" #($ !"""!?>>=<:986432100/.,+**)(&$##$%&' (''()('&&'''&%&'((''&'()('&%"   !"#%&4'(()*,.0365/+(%%'+/12454210/..-+*,-,,..//.---.-+*+,+++,730.-+*))('&%$# " ; !! +!"$&'&%$#"#$%&(***++,-.//..//0231/---,++*+,---...///012245Y41.ZXWVSST`j}ꎧfŹ¸Խ|qbZOX\^`df59<==>@AAABA@?7>=;9765322110/-,*('''(()+,,,++*)(((''&$"!  2 + +  + +   +   +  + + +  + + + +   + +  + + + + +  + +  +   +  +  + + + + +  + + +  +    %     + + + %    + + + +     +   +                +   + + +   8     + + + +  +  + +      + +  + + D + + + + #'/6:@BH(.24423576567::;<=>BEHJJMKIDA;63223443344530/00/../?00/-,,-//.*'&'()''&'''%##%&()*(&##$'**)('&%'()*-.-++.24432.,*(&%&&$" !#%'*-.,(%$$%&'%#"*$&'('''()))+-/0212344467874/,,/35653111345677:!"""##%())'&%$CA#+22/*'&&%&-30)$&+-++,*#:7"0<=;;>@?>>ENRQOMG@=:.AC''=0'  %,148>GK&(+,,,++-044)34'**+,(=,,6>A&1<>5+#<68#*-*$?80%8$-/("!(8DGG%(*)KF?5.+% + + + + + +  + + + +    +   (-%  + !+022+  +         +    + + + + + + +   +  343,) +  ~}~}}~}~}~}~}~}~}|}|}~~}|{|{{{|{|}}~}~}~}~~}~}~}~}~}}~}}~}}~}~}~~~~~}~}~}~~~~}~}~}~~~}~}~ oʲ¿»¾`ۄӄЀǸ񃍗Դgmou=>;:9974  d3232232.+&IFB>:j_WP偉抡ۆ ҄рĿĿ1Q)ん 4ԽƾπûúրƷƿ!þծ灇怄􄝰Ēãɱǖ񆌇܁٧󿢒 hӡҹ  B(}.',,,+++,++**+-..-,+PH;-" !!!#$$%%&'()*+,-.-,0:J+-..-,,-./0//0110///0123210/ ..//.-,,,+,,+***))('&%%$#"! ?>=<974567520-+*)'(()))**)'$!"',/1222343122233567678%755420///-+(&$#"#%(+,-,++,-.0111246887+6677789:877789:;=><95336;>@D%*/00/.-,+)'&&%/&&''(+-./0011/,*('&IFDF&,1441/.-++-047:;<=>??><;:;;<=<;97555667889<@BCCDEEDCBAABCCBA@>=;:988898630XQMJC=;?CEB>:632236:=><;=>?ADJ)069;>@BBA@??A?:4/VQMKLNPRQOLJIHFCAABAAA?>?@@?=;:977655689:<=>?@AA@??@AB@?>><:8-9:98865320.+*)()(&&$$$#""#%'),,,.036:=BEHKNPQR&SSTTSROOQRSQLFA>?><=BHMPRSUUVXXVRQT,.0120/...YUQLG@:642/,+,.0/,TQRSSSQLJKMQSURKINU-15888789*:98899:<>ACEGJORVZ\ZVRMHCBBCDDCBB@??>>>?@BC"BBBA>>?@@?=rf_c{]lyOZ_fksvw<==<;:;999:9::999: ;;:99:::;;::;:::;::9:9:;: ;;;<;;<;;;<<;:; <<<;::;;<;;;:;<<;<= <<<===>==>D=vsrnigaYQE|l]SGxeZOzmmxLMPZgxFOSVUTRQSTUTQQQPONMLJIHGFDCBBBA??@@A?<;<===<; =>=;:::864567>642112332223453235798532110.-,+*+-./02320.,+*))*+,--,,--+++,,,+$,,-./01110/..159:7435:?B?:52135652/-,++,,+,-./01233357789;= <4,*.6; !#%&&#"$%&''&%&%%%$$##$$$#@!328"$$##"""###$##"!  !!""$%$"!!!"!!  #&%#!  "$&'(''&%$###""  !!""!""#"" 77 !"#%%&'('%$###"!  <:B 952//02320/000112332100/03456665310.-,.5"*+($" !#%'))(%"  9779 !"""#$##"  ! :8787667*87556:7764332124567:!$%'( '''&&&%$$$%%& %%%#!=;:87656677766777655543433455544545545543345554223454431234443223445554555666555445667766668765676554445543234323422110//.-. -./0001223565333223343444332223222456678998776,54556777666789987889:;<<;;: !!! !!!   ! 98789984-%  !"""! "#$%%&'((* +-/13530-**)('&%$#$%&+%&''&%$%&'())*+,-.-,-,+***))(&$#"! "$'+-.010/-,++-05:;:::86567872,'$)253111368:>!"""! 865445445567998656:=@A?<:;=><94/./7%/5;<>EDCC;7;GXe7:=HOTTU[`_WOMLNPVXVTNJC@<=<;<>ADGKPVao;<=?AEJRTM>^D?Jc?DDBABB?pm=MZ^][Z\|^\Y^ionjiilqjLZBOgoecwQa^M{>|||=@HNI?;?GOQ@S3O+5JGNNMNKE@v[=1:UsDHDs\Sa=DDA=scH[;); !"#$$%$#$%$#"!!   ! !@>=<<<>@?>??@>>?BEFGHII$$$%%%$$$##"8DBBBA@@??=<<<==>???>>>==>??>:5;43:K( !#&,5BV3cSD5*%$#"#"##$##"#$#$ #" !#$$#"!  ""!!  +   !! !!! !"#$"  ""#"""!!"#$###%&'&%%%&''&$$$#"""#$%&'''&''('&%%$$$#"!"""! !"#"!!""!!!"""!!"##$$%#$&'&%$$'*-//.-+)'&&''(('&&&%%&''((('/())*+,---,,,./00/024579;<<;;:9987532221112333221!0001210.--.010/-,+**+,-,+*('''&&&K)%%%&'(''())('&'(),--+'$  %*.00/..-,.'  +    +    +  +    + +  +  " +    >"%')+--,+**))(()((()*+,,+*(%#$ %(+..//000/-,+Q*)(('%$##$$$"0*&#  "%!#%'&&'''('$0,**,./00.+**)(&%$# +"""##"!( #$%%%&&%%$%'&%#"!   #&),./011123Z210/0110-(#!%*---./00/-,+-8520.*%""  ! 965667633447;?<5138"%((&##$$#g""#$%'()*+-/358;==:62.+**+,--.-,++,,-.--./12223321123456gdjvЉ0 +Rٽ缠ϻSRQXco@ILNMJHGGIIIGFEC@><:87531.-,,,+*)))()((('&&&''&%$#"""!  +$   + +  + +  + + +  + + + +   + + + +  + + + +  + +  +  + + +  +  + +    + + + +  + +         +    +      +                     + +    +    + +   + + +    +  +     @  ###$ )4="$&.47669<;5.,+,-021/*'# !$'(&#%'+044321r2210012343223443335777677653320-*(*0354321//010/.,))*,-/033/*&$$%'''(())((''),/2330...121.+*-023210.,)(()*,,-,)'()+***,--+'%##%),-//.+)*,,-,++-0210.,+++*)))+*)(()*)'%# ! "%(,2;!"#%'+12,!.%6$''%#A;68D).10+D::D'(%CB$/7865588647?CB??@CGB-1"*:>88G3@=0LH%FEE!$*/+# $*01%*&)$20)(*)GD%*-07EPQH:+"!',-,,)&$B0,B(,)B3-5#'(&#C 8&+   + + +  + + +   + + + +  +/# +    +  + + +  + + + + +   + + + +  +  +  -+++*  ~}~}}}}~}~}~}~}}~}|}|}~~}|{|}}~}~}~~}~}~}~}~}~}~}~}}}}~~}~}}~}~}}~}~~~}~}~}~~~~~~}~ а5$?úޅ߀Ⱦž6>>=:743m+*))(''&%FA=;qowŀļ. 0 %Gނ%A +,>.̿ľ僙Ÿ€ſɼǿþʿ̾σѯs²ߺ־Ƶتֶ JŢܶ-+ &5 J0+*)***+***+,.//-M=*! !"#$%&%%&'((()*,!-.00011127A&*,,+**+-/0111000123334320///000///0220-,---,+* )(&&%%%#"!! 7=;:9::98876531/...-,*(&&%%%&&%" #&)+.0121112321000/. 02333444565678887765567778776543/+)''(*+++,-/2233467789:;< ???><:74247;@E&()('>&&%%&'((*+,.034578:::9887631/./13434346:=@BDDB@>;9766545689:<=?>>=<;:86679<>?BDEFHIGECBBABBA@=???>;5.)%ECDF%'((()+,,,+)'&IHGHGFDB@??@@?=<@HPVWURNLIFA<96323258;>@BDDEEDCCCD@BBA@?>=<;;:9:98889;?=:::987 889:;>CH&''()*+,-.//0/.ZXXZ[YUSSTTTSTUVW,,-D//.-WTRNJFB?<::7520.,+*ROLJIJJHECCBBCGJJHFDEHLPRTX[[Y[/13445789:;=>?> @BDHLORSQMIGFGGFEEDDDEFFEEEDC'ABGLW]mxNV\cilr:<<<;;::999:::999::999:9:9:;:;:9:;;:::;;;:;;;:;<;<;:::;;<<; <<;;;<<;;<=<=G>???>>=<:smhc\VQKCyh\RrkcY\enxBGKMORSSRQONMKJHFDBAABCEGIIGEDDDCCA@??@@?@ABA@?@??>=;:98 77898654310/./13323321012F100110.,+*)'&&(((''&'''()+,-,,-./17?@:3-++-28<>><:;>?>>>??=<<9410133/+()(D)*++*)'()+,-1441003564347:"$#" !"##$$%''&%$%%%$##"! !!"#%&&&%##$%&%$##$$#" 47#$$#$###"  !""##$%%$##"!  !$''%#   !!#$&'('&&%%$##" !  !"#$%%%$##"!! :9< !"#%&&'((('%$#!  !!!7543467656665443322234+333445554321/-+()2"**%"""!!!#&())&# 8777!"$$#"!!!"$%$" 9878997678$988887654457986547 !  !"! !  !"#$%$#""#"!"!!654489:72+'&&&%$"""!!"#$'%%&'()+,-.037>C@<97531.-,++**)((&$$#"!! i!!!"""#$&&&'()***++,,-..--,,++*)'%" !"""##$$%&'),15: !"##"!!:4/,++*('')+-03;&3?A@@DNVZXPE?>?@@=:74-'#  !"#$$#@<;;;<>D%(.;NarAGJKHIKOUXYYVTRQRNIIJNMIEA?==;99=:88:<>=<;:868:<>??>=<>??BCEEEFGHLNRTY^__```]XUTRQPQTVVUTSRPMJHGGJMPSTVTOIDCEE@;:987679?CJNMJ;414=JZgkfdacfiotlZPX;trs=EMRSNIHG?dI3D/$!!  !!#$$$##"#$#"!   !!"""##$$%%&&&%%J%L MN'&LLKJJ&%& +KK%&&JG##$#"#FECB>::'@TG/"!###*=X7>=7T:)""# +"#$$###"""#"#"##"!!"! +""##""!!!"!  !     !"#"!  !!"!"#$##$%$$###$%&&%%%&&$###$%&'&$#$$$###"""!!!"""! . !!!""###""$%&&%$" "%(*+++*)('''%%$$$&'(),*+,-.///0011001343222334579:87654321101233343 210010011210/...//.-,+,-..,*)('MKJII$%&''((()(&'(('&$#"#$%''%"#%*,,+**++ ( + +  +  +   +  +  + + + + +   + + +  + +     m!"%(,0220-*&$"  "#%(+-/112210/.,*))*,-.02445421/...-++,+*))(('&&$  !"$%%$"###! %+/1/-*(%#  "$%$$%&''&&&%#"!  "$$     $)655676300010/05441/-*(&%%$"! 54211200/.--./25554336:=??BC@== !#$%$$%&'(()))(()+-.1467752/...--.///010/..0221222379;=ALWo   CøԶ̰zrpqv?CEGHJIHFDB@><97420 1221/..--,,+*+**)))**)'&'&%$"     *  + + + + + + +  + + + + + +   +  + +  +  + + +  +   +  + +   +  + +  + + +      + +  +  + + + + + +  +      +   +             +   + + + + + + +    + + + + +     +  +    +  + + + +  + + + +  + +  "!!#*02/)!  +  )6@$(+-++,0456643223/,,-.-*'$"!"  "&/9@>;=@B@>==;98;@DE?{989>ABA?<988740,)&$$#$&+29>BDC>5/+'$##%',2796200//035532223420.-+)('(()*++)&$$$%%%&'(('&&'&$#$(+*'&'()*+,*(&'(*,--+(&%$"!!#$#" !#$%%%$###%)+)&%$""#%&')*./136:<:7543101121110/-+('&&')+--.-*%#"$%# !$&%#%09:75358:@D@617(=>@=730+%8+'+6?ACK-690'(-0.(EAC#G#=4+!$+4!->KKGA;9<@DHM)4DI?8882/.//-*&#"##!A@@!&,240-,*$7& +  + + +  +  + + +   + + + +  !!"!   '+" + + + + % + + + + + + + +   + + + + + + + + + +  + + + +    +   + + +   -,+)(  + + + + ~}~}~}~}~}}~}~}|}~~}|}}~}~~}~}~}~}~}~}~}~}}~}~}~}~}~}~}~}~~~}~}~}~}}~~~}}~}~~~~~}~ Yī탈+»ɿľɼƿ)ǿGFD?85249:9;=@ӄl ͳD򌙜 R7A(? ÿ¾¾焐˳됡ŻAƾ큉ŷ«¼Ǵ鈎̺󆔡Ŵ꒬ʼ #6퍞ͱ+hhH***++*)('(*+*G6(! "$%$""#" +###$$%'')*+"*))*,./1454201245434?',...---.01112334556543310/01110//000/.,+,,,+=*))())(&$! @>===<;:;:889878986421//.,**)'$! $(+/1345455321/-,+++**,/2454210/013565543457G88766772.)%! !"$$#""#%(*.25799989::; ?>;7666569>CFECB@=>@AB"t###$$$%&&'*-/1220.+)(()+-./_aceim89:<>@B@:41.--169:;;;<=@ABCCCEEDBAABBBCCDCB@><;97789;<=?@??>===??>;0(">;;=!%),-,++,-,+)('LJIIJKLKJIHGECB?;98889:f=?AAABEFFCBAAABBAACEFGHIJJJIHFDB@>>=<;99964200-)&# !#$$$"!! "$&()*+,-/02348:<<:654334479500/.-+)&JKIkEB?=;<=BHIGFGGEB~}>>ADGJLORVZ^`c1101456789;;;<>AEJNPSVXWSOMLKIFC?>?CEHNPUSX\dlsNW]fkpv;;:9887889:9:;: 9:::99:::;;:;:;:9:; :;;<<;<<;;;<<;<;<;;<<<;<;<=T<<<=<===>>>??@@@>xoc\XP~rlhb]YWVWWWURLHDBBCDFHIJJJGFFGHJKIFCA??>==>>==>@ACCCBBBA?=<;:9987555431.--/011001233110/./010.+(()**)((('&%&&&(((''&''()*,/36:CP+(E6( &2=AA?<:89998899:::92' !"!!!   !""!  !"#!  "$'-8#(*+,-,+*)'&'())('%###"""###""#%&$#$$&%$%&&&%#!!"#$#"!!"#$#$%%$#" !"##"#$%%%$$"  !#$$$#! !#%''&'&$#U"!!  !!!""!!"#$$$%&&%$#"!!  8778778!$&'((())&#! !#"!!!  764334578 7642344434L333444566653211/.,+*.;&+(%#!!!"$''&&%$#" !! 888 !"#%%%$$#"""###" 7657787654324666789777888755565455432258:<"%&''()*++*))(#''((''&&$"<;:8778987665445565433443444545544323554323455432111211121223355434345445667665432211223 22101221122345556556555443345554554343210/012112122210/012111234454556 + 9:9::;<=<=>  !B"!!""##"!  !!""!=876669! 877655677 !!>941/-,,*)('& '''()*,..//012466420/0/-,+**)*+-021/-,*(&$#"!  !"$&&''((()+-/012220-+*('&%%&&&%%&&%%&'*+-06?&+,*(%A7421/--..-,,,.4C.?MUUTU\6<<8d^19;855630./4:?=7_TRRRQK>6;I^;BKUbsynf]SJA;7keVJED@>DHR]6BIPV[_bilkkiinw}B}zvw{zungb^\ZXy]cgea\ZWSOKHFC@@><98:>?>=>EOTROKGC?<99@DIMPQQONLJGFFHKLLMKGCBBCEIMPQSVXVQKGB@?ACFHGEEHIIIGC=;:;86789988;CIH@;8656778:961YRPRSPG@=?EMPOFGHOV05@HPX\^aca^YSOMNOSW\][XRKFEJQVXVPJGGJLNRY_a^YY^baWG:-H<879=FR_9BRhKLOR\hcUG{kZPWq|EHGGFJUTHiC68;>:214@ !"#$$%&&&%$###$ ##"!! !"!! ! <=>!"#$ %KKKLLKKLMMM' N'((('(('''('&%&%%$##$##$$##$#""DA<7437@"#&*8S9DC:YEAEA3(# !#"! !"#"#"""!!  !"###"#"   !##! !""!!  "#!  !!""#"""#$%&&''&%$#"#$$%$$#"#$$%%&%$""#"! "$%$#$$#$"! !!!   !"$%%$#!  !"$&(*+*)'''&&%%%&'(()***++,-./001234567887776545444312111233433322210&11121/.---,,+++,,+TS)())***)('MLLJI$%&'"&%##$&))*)&$$$%%&')+./,)'()*)()*++ !   + +  +  +  + +  + + + +   +   + "  S8=;:<;7ij679<=?ACCDFHFE"!!!"#$$$%&(*,.03688:<>>=:644431014;@DOSacmx) pϱwh^WSONNMIE?:86554344343211234430-+**('&&''()*,,+*)('%$#!!! #,"   + +   +  + +     + + + + +   + + + + + + + + +   + + +  + +  +  + + + +  + + +  + +   +  + +     +    +   + +        +                  +  + +  +     + + $   + + + + + +  +    $)*++0$$ 5/!#!+$###"%4"(.5IF<1QB4,/?(+**)-65,=&!# %\$#))%!!&(#"*13,&#"*7:5//341+),3;C$)*(())(''*--':/6%2:@DEFED>7/E*' + + + + +  + + +  ! #  + '#"% + +      + + + +  + + + + + + + + + + + + + +    +  +    + 0/ ,+*)(   ~}~}}~}~}~}~}~}~}|{|}~~}}~}~~}~}~}~}}~}~}}~}~}~}~}~}~~~~~~~~}~}~}~}~}~~~~}~}~ ÷/AOĻźþýU􁐡IFEC@@>>=;9866P=@CFIMOPRUτ΀¿ý˸,64$D e။ȹǽǾľ¿¿׻Ļĸø򌡨ıUƛϿŸᢃ#(d kǾJ :')*(NIE?;62,& !#$%'&%$##$%%$$#$%&'),/0/.-,-,,-..---./010/ 01116A'+,.00/1123456 54321122210/.-,+***+*)(&%$#!! @?=<;:(96410/01234320.,*'%$$&(+./122211211210/.-.135679:::87545566644432111233445543441.+''()+--../023579:<=?A!!""#"! =:51.-+,048@EFFD@>>???@A ! !!!@??@3BFLSX[^_abccbaabcdca^[WUU-2568;9653357:<>?>=<94.)$" !"$&(+--,++,-0101121/.,UQRVZ][XTSSRQQOLIHHHFDCCBA@#???>==@BEGIKMNLKJIFB@?>>>=940-+*(&&'('%$#$$%&()*,,,-/1331/-,+**)('%'*/5;BI(+../.,*('')*,-010///.+QPR*,../000/^][YWVTRQPOLIF@:61.+)MLKIJKKJJJIFB>:537=EIJIHHGFGEB?>>|Nzz{xusuz~~~zrmmm6@AAACDFILNUXbit}INRUZ]`dgjlmpp999::999:9::99988999:;::999:9:9:9:;;:9:;:;:;::;;;:;:;:;;:;:;<; <<;;<<;<<;<<;;<<;<;<==<<;<;<=<%===>===>>>=<<=<<=?@BDEFEDBAACDEEFFFECBA?=:9:9765554565432110///-,+*(&$! !5""#%&()*))('&(.59998655542-(&'+146530./135677653.&- !!"$&*.48:<!%(**+,+*)(&%$$###$%&'&%%&'((''&%$%&% &%$#"!  !#$%%%&&''&%#""##""!!!#$#"! ! "!!"#$#""##"! !$'()))('&%$"!   !"!!  "$%&$!!!!" +!! :9:  "$%''()(0&#"!!! !#"998765333578876543233455543323#45665543210/.---3@(,)$  $'('&$$$#" :: !""#$$#"!""! 7665423454555433345 68876432210/./135(6:"$%'((()*)))('()))(('&%$" :75678899:98776544434543 2223332111012100112234434332 332233223212 +3332334434566655543332110/.//1245545554434 +5554333222321122332100110 //0100/012343444334565;:;:99:;;;<<;:;:99:;:::; !!! I!""!  ;;;8347998765454568731/-,**)(()))*)())**++*)))*,-.0/.,*++,,-,+,+)'$#!!$*28;===<;8641/-+)'$#$%%&''&&&(*,./148:73/,+*)* +,,,+,.//.-,+-3: (=V7??DFB6WJB<62.+,,++/2586/(! %0@PYZTKA950..,+++1>KV^17=CFGKPRQOMMIB:dWI=60.,,05;@DFKRXcn=DHIIMU\acceimlfa\XURPNOPTXYYYXXVUW]eiljgb^[ZXWXZ]ZQIGGGFFFEEECAAFJJGDCEHIIHHFECBBB@A@??ACCBAAA@?;6359<;85446<@@?==?@??><;;;<:9:;978:>@CDEFJPWXVSPMIGFFEC?<=ADGIJIGECBA@>;:<:87886c_e6jc`^ZXSJB@>830-+/=W9GRWYUG5G514=FP/69<@EHPW\YSLDBEJNNLLMJHILMNPSVWUTWYZZYWPI?4,)*++(+2<>BEIPWaoCPVRG>m`RF@BFHIGB<87:CPYVRUZ^bb\XX\^P9+GF(19bVYg9;?CHJGA:eRHILJ:H-!952...0247=A"$%&('%$##$$$#$###"#"!  >=>!"#$$%&%&''('('())((('''(((''&&%%&&%%$%$$%%%$ "!?<9668;= !#(/30-/450)$"!!!""###"!"""!"###$%$##""##$#"#"""!! !     !" !!""##$$$%%&&%##"!!""#$$%$ %%%&'()('%#!  !"###""#$$#! !!"""! +  !!  !"""!"$!!"""###"#$&'))(&&%%&&&%%%&'()*+,./01467899889;=?=975321//012334432223444333210/L0110/-,,+++V+++UTSRRR*+,,+*)PMLJHI%&&'''&%$$#""$&&%##$%&'')+--)$""#&'((('&%%&#   +   + +     +  + +  + + +  +    + + + +      + +  e!'-38<>ACFIJIHGEEDA>:51/ $(*,./00/.-./368999899;<<;<<;:85310.+(&$" !"$%%$#"! + + //159;>?>;87-88988875311/-+*)(&%$##$#"""! "$%%&'(((''%#!  $*,*+98987543320-+)%! 234556641//.,)&"!%).4753344664324kkkmmllnruwwx{||yvpkigf36:?@AEI')*+,-/1479?DK"OUZim󀏚 'tf\QF@=::9/87520-+*(''()+-...-,***+,,---,*)(&%#!      +     +  + +  +  + +  + + + + +  +   + + +  +  + + + +   +  + + + + +      + + + + +   + + + + + +     +  +     +           + +           + +  +    +  ,"!"%"+# + "'(% "'-!%''*-/.,**'"/( "&(*-05=E',///29>@ABDFHHC?;741/-.-./012332149?CEDB?<;9878:<:4/...-..>.-.,++.120-,.00/.-,+))('&&&%%')))(((''$ "$# !$$#""#$$##"!9  #%&'(),167521.+)))('$#$'*,./.-+*)('&%$%(+./,&#"$&('&%$"! !! :7;=96310-(#"!(#)-.,$  %, #%(,032/*$$&),,***(''(**,-0100245543.*$'+-/0/,' '" %%(&#"#%'*-1c6@(273*#>6,# !$%%" $-2/,-02440./12(',06< #$# 6.09"(+*%!!#&)*($3(#$&$&   +  + +   + + + + +          + + +  + + +  + +  + +  + + + + + + +  C211000/.,*)((   + + + ~}~}~}~}~}~}~}|{|}~~}}~~}~}~~}~}~}~}~}}}~}~}~}}~~~~~~~~~~~}~}~}~~~}~~~}~}~ WǾb/,|ſÿvGIJGECA?=84"JPRUYZȿK$N個'BLE􀄅·ƺǼɽOئ􂆄ɽ¿õ鈑͵\󋨾ѿô񻚟 ٳ:S"f< 1+&#! !"""#$#"! !#%&''(''&''(())*+,-,,++,#-.//./012211//17?EL*,./1110001222112344455432 1233210//.F-,++)))*+++*++,,+*('%$"!""! ==<96455320.,*)(&$$$%&&'&%&(+.02343344455434l6667877667878765323443234556676655655433223321/0244345688:<<<!!! =:7789:;<==>@?=841.*()*.38=@@=<<=>@!BB !"#G%&''()))+Y\aeilnq:::9okf_WQLKKKNR+/5;AEGEB?<;;;:98:<>>@CFD?<=?ABCCB?==>@ABA@@?<:7531-)&%$#""$'*,.//...022112356788:;=?>9gbabd33eeeb_^__\YXVUSPMJHECA@>==>>==?@BDGHGFEBA?<9752.+(%%$$##%&&&%$#"##$&*,,*)()**((())((),---,+-0257:>DK(*-0441,PKK%'()+---.///-+*+,,,-./24663111_[XURMJFDB?;61.+(KGEEGHGFFCB@>:646;rrw{}~ACxusy~/|y{V\^fmumQX\bfmosutr9::;:9898899989:::;;::9:9:;:;::99:;:;:;;::;:::99:;<; ::;:::;<<;;:;<;<;;<<<;;;<;<=<;<<===<<<=<<;<;<;<<<=<=<=>=>>>=<<;<=<<;<<=>?>xsnibYvdWNIGGHIK +JJJHFDBCCBABCCDE FEDDDCA>>>===>?@?>=<::;<=<;71-)('2&$"!!"##!!$(+--,**+,.1332468740-)'*067631.-/25<66552*(&$#%())* #$%&&'),06>!""!"$%')+*)''%$!!#%&&%$$%')('&%%&'&$" 8 !"$%&'&$#"  !"##!! !"!""!!!"$&())*++*)'$"!"$#""!!  + !!!  !"""##$&%#! !!"#%&%$""! 9;#%&').*)(&#"! !"#$" 99988987632345787643101223434697653222110.--4 %'%" #'((&%%&&$! "$$$##"!!!"! 8898865556534566789754445677531148988899=!$&''()*)('&'%#"?80.38:99875321345565434 +32212321112101112234443322344433211221 21113455443334 322210011223343 +4432223444322344333444344433323444321!2320/-...//...--,--,,-//00/0012334 +33443211245 :;;<;;;:9:989:;;:;< !"#"/! !?6/,++*(('''())***)('&%%'()*+++*++*()+,./144420..---,*-,+,,+*('&%$#$%&(+-.05;"#"@92,($$$%'('%&'&(,0378741.--/13689:;>:3-)(1%-6:71)$&'":0(%*6 !"##""! !  !%())*+-.02335:@@601=To>?=;=?@;:=BFGFFDDGLQROORUTQNNOMMMLIFEFKMOOMKMORSQLGEDEFGFFFGECA@?>>>@AA@><96579::;=?CED>747;=<9657;?@=:::9:<<<;:9768752/-UNMT[`ab6<=??><:;>@AA@==@BCFHKNPQRPMKKLPSRLIIJKIHECBB@=6ff68998546=B=/F68H,T@&%&-:O^3430[O@9>DNY1479;?ACAABELPPNNRVWUSSRQPMJJLORRPOQW]^\[\\ZRI?73/QP\>M^pEKGEEEDBFMOF=pp988oneVE92./.+'$GFK.@@CHOYchifb`]XL>[C9@SuLWZYRI~lT>^L=R<469:;<<<:87889. !"#$$%$$$#$$%$$$#""!  !"! =<= !!""$$$%&'('('(''&&%%%$%&&&%%&&%%&%$$%$$$#"! <;::;=952/-.000//01100112 3456654320/.,+WVUTU+,-,+USOLJJJK&&&%$!#$#  "###"#%')*)$! "$%%$FC@=;7 + +  + +  + + + + + + +  "  +  + + +  +  + +  + + +     +      K8?DKPUXY--,*OJD<50,+*)+/!&+021/,+**)'&'),-.02541/0356775300123210}.-,+(%" + +  "$%(*+,+(IEDEG%%IIHFDFHHFDB@>;9740,)'&$"#"! !"$&(('&#!  '"( !-)+} !<:852/.,+)'%" 2//0110.-.-+)&$#&+1579::9644320[[_eko:>=;85320110.-,+*+++---./1000/.,)('&%#!!J  + +  + + +  + + +  + + +  +  + + +  +   +  +  + + + + + + + + +  + + + + + + +  + +  + + +  +  + + + + + +       +   +  +         +                      +  +   +  +   6 + + + +     +3 +   + + + +    + 0@#!  !2&  '/46641-,,.2369::99<@BC#'(%DAD##%')*)'&(+..-,*)+.11/.0220//00110-+*+/02221245652.,,-...--.,*(('%$%'(('%#  !!"#%(**%  "$#!"&&%##"##$###"! ! -)(,0335"$%''&&')*)('''%#$&'&%#$&((('%%'()*,./1120.--/131-++,-,+)'J&&&#77 !%! # + ,70&$, ""#""#&*-.-/2564211//.+**+-//--/49:98864/)#&"&%1>)-*(''%$&+-'">? ><6,"%*,/48:7.&%'*)%!'.7 ###$(.5<@@><;96/%2&;)3651+NKLJ?1$5+!' +   +    +   +  + + +   + + + +    + + +  + + + + + +    210/010-+*)((  +  }~}~}~}}~}~}~}~}~}~}|{|{|}~~}}|}~}~}~}~}~}~}~}}~}~}~}~}~}~}~~~~~~~~~~~}~}~}~~~~}~}~} K;OƼ\Ǽǽſ^di:>ADG%(*+,-/121/%?DHJJӇX¿ՅԀ.j  jF€žͪö߂ù٩Ӽɽöûſ烗ûګݥ㾿$a + ļ 5˽%''%##$$'('&%$###$&'(' ()((()**+,--,---.../01210110//012:I,/1k0//012321101234433443221100012221/--./0/..-+*))*,---,++)((''&%"!!  ;8544322234334442/-,.0123334565556543434678887765667778863222345544545432322357888 ! !!! =;:98655456789:<=@AA@=:9765V67789:<=<<<;?@K?=;9741/-*%!!"%(+,-../245689:;=@BDDB?<;;;:99;<<:8nlljgfda^ZVTROOMLJGECA#@?<840-*'&%#  ! !! * !"$%'()+++*('&')*,/4:AGKMRW/35665433212321n345654321]WUSOJECDFFFDBA@>;61+'&JKMKF@=;;?CHMQRQSRRPNJGDAABBAA@}||GWgvITdmyBIMSVY]cfjn898989 ::999::9989::9:9::99:9:;:;;::9:;:::;::;;::;:;<;<;::;;<;<;<<<;<;<;<=<=<===<=<=>=<= +<<===<<<==<#=>>>=vrk_Qr^OIHIJKKIHFDDCBBCBBBCCCB CCDDDCA?>= +>=:9777899: 752.++*+*)('&;''&&$!$+0234653/(%)4>FHEDEDA=84114666799876678995,"+ !! !#%&'(*-27::< "#$$" "$')*+*)''('&$"! #!"""!#$&&(*+-..-++*))('&&%#"$$#"#"! !"#$&%&&''&&%%$$###"! !""##$#"  !!!"""! !"$')))* +)'%$#"#"!! !!  !! !"#$$$#"""#&'&$"! ( "$&'((*+*(&#!! !"##""" 7 654443345532152221245667887766555421110-++2B'*)'$"!!$'))('&&''%"   "$%%&%#"!  89:9887765675556677765445678878899986655567889977:!#$%&(*++***))( )(&B5,),04589887876432333444543434443212 33212322232211234344332332 100/0244333434543433345432221112322233232323211010112322211012210../00//..-.//01212110/.///0111234544455;<;:;<<<:9:97776678778:;< !"! ! !"$%%$#"!! =<:62.++,-..-,+)*+*)()**++* +-/01220/../0/.,,,+++,,+)'&%$"!!"#$%%%'()*+,+*((('&&'()*+-..--./1210//023335678:"%(('%":96310001246 !!!"#$$&*.038DP\_a342V@-#+'$!!#)6%*)'((('%# !%*5FRURPOPRV_fjmqsrld^]bmv>@A@=>ABDGKKF@=AINOLHDC@?ABCDGMQQOPRQKDBDHKNNJA;9::7m9<>??@CC?;qmp<>=::<>@ABCDDB@>=>AA>;;=ABA>;;?CFHHC=:86eZQKJGAAGQ[h778<@DECA??>?@CDA><;:@C@8dYVX[[\afifc_WOMPRRT\j>EGD@<=?@?=>?BABDGFEEEB>;;=?CHIFDA@@??>?=7.D+"4CKOOPU\g:=< 940ZVPPW4;;4/-ZY-00//27:=<smigjp8jaTGEO\b_]bk8oif]UPI;-LL,49;?FOSRNF?;;8679!"# $%%$###$$#$$%$#"!!"#$%%$%%&'(('''&%$##"#""!!  !  ! """!!!"##"!!"!!!   !  !"#$$%&%%%$#$%%$#"#$%&&%$"! !"#$$$##"!"#$%%$$#"! +   = !"##!"%))(''&&%$" !$(*+-./012578887779;<>>;51..023310/0121233465421/.../.-,<+T*+,,,-YXVSOLJIJK&&IFEEG##$$#!?:; !#$%&(*)&"!"#D?:4.)%! " +  +  + + + + +      +  + + +  + + +  +   J &+05#%OS**UQLF@:4/+($! !%*-0="%''&":5/,/7A$&'()***-1332/-+*+,./0b//..-*(%!  +  "%'*-033/---,,+,...,*PNNMKJHEC?<96320.,)'&$"""$#"  + + + +# "'*,04!!!   !z 96541.+)+-..-+++)&"-021+%""$(,05999;:::86321379:::uwxvzAڊӃꀓ + "5Ѳަz\LD@=;98865431/.-,,-..--./0%/-+)'%%%$$" 8 + + #%#!!       + + +  +  +   + +  +  + + +  + +    + +  + + + + + + +  + + + +  + + +        +   + + +         + +               +  +  + +        + + +  + + +     +  ~ + %+-0-   + + (131/../3:@CFIKJE?;9=;971(@0#0  +     + + +   +     + + + +  + + +  +  + + +  + + +  + *14321/-+***(%#$$   }~}~}~~~}}~~}~}~}~}~}|{|{|}~~}}|}~~}~}~}~}}}~}~}}~}~~}~~~~~~~~~~~~}~}~}~~~~}~}~}~}~}  2Ѿ¿»˻ŷVfr?AB!B@@??=:7544544321281235=<<<;:960,(&%%'))('')**('(,14568:=>?ACDDCBBA@?@AA@>=;:97544fc_[XURPPPOLHEEGILOOQOI@71*$!!  !#'-4>HNTVWXY-/12331012466778875445678997420/WOHCDEDCDFFEDCDDB??>=<;84112452/,-.3;DNSSNJGCA?>==;5c]VSNGDEJM }yvrrVkNbqGSX]bjn:<<<;;:::99898998898989::99::988899:9:9:9:9:9:;:::;;:;: ;;;:::;::99::;:;;;:;:;<<;:;<;<;<;<;;;<<<;< ;;<<==<;<<<=<=<===<=>==>==<=<=<<<=;qdSoYIBAAABCDEDBA@??@A@?=<<:72.,,-.00/. /03323420.,*+=**+-//,($#',--*'&''(+..+*.121/-,,-/0//00.--,,*)(()**))'%! !"#$%(-0368<O "%%# "&(% 112 !#&(('%# !""##$$##"""#$%%&(*+./.+))**)''$ """$%%%$##$&&'&&$"!#'*'#!#$"!!"##"#$%$#!  !"###"!  "%()('&$"! !!"!"! +!  ! !!"#$&'()*('$"! !!"#$'()*+,,*(%###" % !! 7885200245432210./13444578756656665421/.-+,5"'**(&$$$&(('%$%&('%#!989 ##! !  85467677676444336:8888776432335;!$&')+,++*)((&#=534689 8876543345 4445554432333223432223221122343222111234555443311122112123212233212322110//01343322212333221232101110//00//00///00/001222333232110001221110012223232211223444555689<;:9865667876789888767767779;=> ! <;::;<>@@;75211222100/.../.../00/.-,,+*)(()('&''(()*+-/13432111210/.-./1330,(%$$$#"#$%%%&')*)'&'''()-278751/...--,+++,1(11*$  =<::6,&%$#! ")5CNSLA1$.!0<<6-%! ?<734:")05=GR]f;CHMNKG@<;9qq:>BDC@ABA@A@?@CGHE@?CHJGC@?>:m9@EFDBA?;qs=?<:>JRQLGDCCEJQUTSTSPLFCDB?<9pmiaXQJGMUWW[_chmmkg]RNQSRJFHOW[[Z[[ZVRRW\``]UOPU[__YOHKRTVY^dd]WX_232369:987678:>@=;;963346:9857;BIIFFEA=pkggfddg9@FC<5kp;==:gZV]db]`2b]]ch79::8786c\_6;<=?A>7117:;95^VQPNT]dhfc_\\\[[.2684/.1e:CHGD?;78<93UD938IUY^3687432357;CJQZdigedb`\WTUX[aiq=BGMNKFDDDCEGGC>9g[RMMPPLEDGLNIDGU8?E&(('''&&&()('()(''&&&'&%#"#$%%%$$#$#"#"!! <!""#$%$$%&&'()(''()))(((&%$$%%&&&'&%%$$%$#$$$#"!"!!  !###""##$#"""!! !!  !!!""#$$%%%&%$#"#"#""!!"#"#%%$##$$#! !!"#$%&%#! ><989;=<:6977!!!#$$%%%$$#"! !"$&()*+)'# "&*,-/012236890:<@@9/++-15653211001122332221112456665421/..--.-,A++,,,+UUUTSRS*+,--,,USRPLJKLLJIHHHI$$#"!>= !"$$%&'&HA5,%!!" + + +   %   + +    + +  + + +    + +   < *2;CIMPRR)'JE@:52/+'"!"!! !#%)/=:8640-/39=BI(*,-,+++**)('g(*,,+***)'%#  "$&(*,-./0///000/.-,+*(&%#C@<9641000.+'%%'(*+,,*$ +  + +   + + + +  +  + #)/34346  !##$$$##"!!"#$%&%#!60*'(***+,-,+++*)''&$#"  '.7;;741,*)))+*%FDBA?>?BEIʀ%聉*M迖vXIA=864210010//011/.---,+*")&$# %   +  + + 0  + + + + + +    +  + > + + +   + + + + + + +  + + + + + + +  +  +  +  + + + + +  + + + +  + +   +  + + +        -   + + + + + + +   + +                                + +      + + + + +     +  + +   +  +$&     + +   (1:@&,1453/)&%$GG%'*,-++,*)))((*-.,)(+/20-*(&"B$(-/.+*($BD$&$#%.33/+))(),14567874/-,+(&$EC@:50+(,/0/36:=ACB?80.032-((-25(44200357982..159:7/*+01359=<5005!"" c"$%#"#"  "" "',-,-,)%C?===<;>#(+*% >@"##!:/,153146336:!"! 501!"#%$1,*('+05776410C %(('%! " ,!",03 "'-28?B@?=<:740./037; "&*+)%#2$''&"81+(')(%! "')&#&0!&#" $-0/,+++./3;@@<8Q5227!$',17=FMNKGD?;52/.+(! -&9HJFC@>>><70)J>1#+ +   + +    + +  + + + + +  + + + + + + + +  + +     +  + + + + + +  +  + +  +  +*  3221/./ +0//-)()*)'&%  }~}~}~}~}~}~}~}~}|{|}~~}}~}~~}~}~}~}~}~}~}~}}}~}~}~}}~}~}~}~~~~~~~~~~~~~}~}~}~~}~}~}~}~} Z ¸)iҿw~~BCHJ%%%')*,t:>ADHb5_삋6* c, +ļ_ƽź¹:󁅄񁋑ʿ񃇊򀎜οӾԹ +>#R9,ů #%&&'&&&%%%& ''()**+*))**+,--,+*)()**++,--.//.-++,-/01 355448?K,2343 22344455545432110//0110.--,+++-..-,*('&$""! =<;863/,-//./00100012344322334556665656789:98777678998521013433321123456 !" ;98778:?@?;63334566532_XUTSRQQRTVWVTOMLIB:3.($! !!!  ! @ !#$$%&(*,.159<@EINRVVVUTSTUW,,,-./0112345554334531]ZZ[YUPLIHFPGFEECB@?=<;:9742111345689;=<=<<<===>=;qiaYNiRD>'=<=@CDDB@@?==>?@@@>==<:86422310/..-+***) +*+-./12333210.-,*&"!!! +)(()+ !"! ! !#%&6'()))('''),/148:<"&((%!32121224!#$$#" #$$%&&''()))())(('&%&&&$"!!"#$%%$##$$%&&%#  %'&%#""!!"#%$#" !!!""###"!!" !!""!!$&)(%#""#"! !"!""###"""##""$&()))(%#! !"$&'((()++*('%$"! i  64699644544321110//1235689987776677665421/,+*-7!%&'('$$%&&%%$%%&&$"! 97546 #%%$!  767654333434688756787776773521110//14: "$')+,,+***)('&#!>=<;9731258:;;:988765432234543322233343212322121112223344332332233211221210///0/0100012121010111222334554333432210012343344455656 +7677766 <;:9987678787899:<>   !!! ;754554321112321210//.-./..--,+*)((*)***)( )))*+,,-./1356 5433443210B11124541/.+)'%$$%&&')+,-,*))(()+-/246664210/...18")*)'%" ><;9; ! !"""C@<ABCA<7eadjlmpt;=@A?uoosutrtx@DGIJJHEDB@?==AHKLJHIIHEB=;;=@BC@??AA@<8iedghdca^ZXYZTOLPW^a`XPMOTX]ba[RKGFFHLKGGLNRTWZ\]\\_a`^][[^``_`cfggfccgm9;::96`\_a112469::88;<;976653b122^TW_ff_Z\h:>>=tme`[VTV\h:6555d\X_d3321bd5:;72a22`[Z[_23bZW[]`13420025678:=@CGJKKKJE>989975/SKLT./..025:?DINSZ_cdhm9=ADFFEBA@BCC?;:=ACCCBBDCCCEGF@7aTLG<539FR[dcb`ac`VKGKSVSPNOPSX^h;?ABAGNPONQY`floniggih]J9`RB4( ';YCZjmjgb]ZXUOJILJE|n_K]1;0//000110.../024442136:!@<857:>CGL(*)('(('''&&&%%%$$$##"  !"#"#"! !  ! !!#$%&' &''((&$#"#$%()'$#$$%&&&%%$# ""##""!!  !! ! ! """!!!""!    !!""#$$###"# +""!! $ !$%&&&''(('%$"! !!  !!!"""##$$#$#$%%&&'(()(''&%%%$$#"!  "&*+;*($!!"%),///.../258889:=@?80+*+-03443210001121132211122344320/-,+*++UTSRPNKJKOS**SRPNLJIJKJHFFG"EDA>< !!#GD:2(! "%%$#" +      "2 + +   + + +  + + +    + + +      + +"(/6=BF$%'(((&# ,'!" "$%&')((R*+,-///-,++*('&%#"##$$$%$""  "$%&'*+++,+,,,+(# !"#$#!:521/.-,+*+,.00/,)()'! +   + + +  +, !$(,/121112345 !"###"$#! =;::972/-,,,+**)*+,,,+((&%$##"!u!!"#%(+/231-*(%"!! !"KQSUVUVނ΁܀$ <¤ʕfH:40/---/1220.,*))*++*)'&%#   + + + +  + + + + +   + +    + + +  + + +  + + + +  +  +  + + + + + + + + +  + + + + + +  + + +  +  +  + +         + + +   + +      +       +     +  +   +  E + + +    +  + +  + +& + +  +   '1>H*.11.+*6,-+'$$&())(&">=@DFFGI%&()(IDCFHHFGJ(,.///.,+*)(&').1210.+'$$%&('%$%&&%# <::=><<:853451-+/49<;4.,.158<<81,)(')+*((,.01479888;==;:88:;;:=>@A@?=<<=>7)1)  + ("2?B@>:7552.*())%C=5)-    " + +  +   +  + +   + + + + +  + +    + + +  +*  +  D20.-+)&%%(+..,+*)())(&%%%&%$#! "  + + }~}~}~}~}~}~}~}~}~}|{{{|||}~~}|}~}~~}~}~}~}~}~}~}}~}~}}~}~}~~~~~~~~~~~~~~~~}~}~~~~}~}~} g Sӿ)ſF־t|DC?=<95 GPSȆǀ¿þµB 85 A @˄ʀþȷɷƳƽ􄏙ʱ䂌怊ȨȶhڲԤоͽս) K=  /#ѱ &'&''&&&''())* ++**++*))+,- ,+**+--,-.--+)'(*,./00014555657@Q/23232345554334445446664321X223443211100/.---,+('*,..--,,+*)(%#! =;96212367767655431/-,+))('((&#$'*,,-/13467765566545544567787654345455432100245!! <975569:<=>)=<<;;<;9766789:9767:BL+18>BCB?<:987421.,*)*)e*++*)*-./0134678;=>?@@A@?@??><;:99876545432/,)&$" ? !! AA?<7669< "#$$$%&'(+-025;>@@@?>>?@?>>?><732356-541000.UQQSTUWXVMA5,'$#$&()**++*))''()('&$" !#"! ! !!!#%*,-/258;==<>BFIOSV+,+*) RSTTU+-../e000///\WSPMMLJIGDCB?<;:9889::<=:7567653/,-144579:=?@DHKLKIHHFC@?><8535778998jbapewQY`gquw;;::9::987788777898989 8899:98889 :::99899:989:9:999:::999::9:::9:;: ;<;;;:;;;:;;:;;;:;:;;<; +<;;:;;;<<<;:;;<;<;;<<<==<===<===<;< ;;;<<<;;<==<=<==<<===>=>=<=<<<=>=<==>==teTwOA==;;=?AAA@>>?>>>==<;;97789987421112221/-,*('&'+0575349=?>==AHQ,-+'?4-'#"""! #(+-.01358;;9522100137:;=<97432236:?BA>;88:> =;864332345689"&'''%!4112346 "$$%'''()**)('('&%$#$%&%&$!15""###$#""#$&&&%%$$#""##$$%&%$#"! "&)*))('&%$##"! !!!  !"###"! !#$$#""!"$&(&%$#   #&('&%%'*++)'%#  ! %<;85249<;::9864334321//03577765556676 54320-,-1<#&')('$#$%&&%$"   "%')('%$#! +"!! !!! #55786433342121100/13675567776531//...//.,.3=$(,-,*()))(%!><:8777897656:;;:::98877887655543345655433322332333212323322111345543321222111212221012 332112343210110011000/00/012 11122333212234 +334456677654 6988899877 ! =<<<;:9987678755677889:::999:;<=>>=<<==;;;< !!" +! >;63112232.1000//0/.-.//.--,,++**))(()***+**))*))**(''')*+***,.///023320.---,++*)()*))**+,-,*(''&%%&(+,,+*+-.///00021/3(/,)+2870-/7DPTPHA:67>LNE8.%E&-4=FJB7/+)(&#"##"! "+3AR0fe^VPI@=EN\5:7gdffdcgjhfjqtoid_\]]cp=>=>=<AMSQMMQWXVQS[n=;jb[L>ET[^cjmkjkg`\YV_8=9f\W^edcdeg7BCCA>=>ADD;^U_8?>m`ajjeg7:9664bb21ZTT[ad210ZPGCLW`c`\[`b__3540YY.;00//133249>@ADGE>9;CKNG;55665236=A@>>AHPTVY_eilmm9=>===>@ACDCA@@@ABBCDDCCEFIKMJB953/RA5.04:AJSVSMKLLLJFDHUg:?>=?A=n_SXmAB@?AGNSRT[dfaUF;;A@6S>/%B"#!9:)E[g9@EJPVYYTI?8jo@KNH?cHcC*:1/12234333110,15=IS+VPIC?<988866789:@%+/.-.259AJNH:1177/'%$#"!!!"""##"!"#"!"#"!"#$###"! !"""#$"!    !##"!!"!  !     !"###"! !  !"!!"#$$$%# ""!!!  #&'''( &#636<= ""EA8)! !"#$ +  $   + +  &%  + + +  + +  +    +  > &%+.00.+)()'#!H"$'(*-012345554542/---+)('%$#"!    %)+.0110122111/+%!!"#"! 2.-.000/-&  +  +  + + + * !$(+.012223g <9642110.,*)(&%#"! !"#"  !#%')+-/00.-,+(&$$" "%(,._^e阽㌡  +<ߴ`D93.+,//00/-,-@,,*)(&%$#!!"""  % + +  +  +        + +   + + +  +    + + + + +  + + + + +  +   + + + + +  +  + +   +          + + + +  + +  + +     + +  +   +               +     + +    (*("#%  $&  + +  #.95/+'"(/9!'-37<>?@?=<:620-)$#$&(((%"A==>><;>BA?BGHGDA=;<=BK()(('&%FCA?D$#A:88::=ABEG$$ECF'-2420..--.1540,+**+/10.-,-+'HCBDHL(*,//0-)G>2*&(/10..2674129G'&E?:/$)4:96415 $!<637<<;;=>!$)*'">7214#%'+/3431,&" ! ?;402444755:;78"" :91--1374,$ %-353114522/01"#%(+)$!"(.1+""%#! !$),-/267::7  !#$##! !"!!""!!"$&()'", ',*(&&&%%#"$,6"!!"#!:0),:#$#"$)/2126<=:0$ !+ ,3!$)/230)"58!(-*%:(2 + +   )-) + +      + + +  +  + +  +"  + + +    ! 200/-,++(&%%&(*)'#&%%%&%$"  + +  }~}~}~}~}~}~}~}|}~~}~}~}~}~}~~}~}}}~}~}~}}~}~}~}~}~}}~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~}~~~}~~}~}~} o8 " +Dſ¹+ʄú@@<8641 =;:::987779;B&,048<@DFGGHGFDA>:740.,+**))*+,-0.023445678998878889;=>??=:7641.-/2441/-*'$"!?;976 +56678;A#&)*L+-.036779;<>???>>>=<;975456:==<;:;;<>><850WOKGA=:8521346899865321.-,.//.,+)('(&%$$&(+,-.00011102479778;?EKPSTTTSSRR(()*;++,,+VUSRQPNNOOLFA<84123455542/.../0246889:::7433347:;>BEFED#C@<:>>@AABDFKNT`pRX_dilo98789899898999888989899::9:9:;;:9:9 +::99:99889:9:999:9::999:::;:999:99:::;;;:;:;;: ;:::;;;<;;:;:;:::;;;:;::;;<<;;;:::;<<<;<;<;< +;;<<=<<<==< ==<<<==>>=<<==<<<= >==<<<;<<=<=>=<=xnaOwVD=<=>>? >=<<<;::999::8787665530..1357=K-10-)LIL)-//-PA4*# &-37:=?@AABA?=<=?@?>?AGMNJECCA?=<;951/..,*+,-./000/.-+)'&$$&*-..02356 !"##$%$" !"$%&&%%%&&'('&&'&%C&&%%$$$%%$%%&'((('%$$%%#12"$##""#"""#$$$##$%'()(&#"!! !"#"!!"#$#"! "%''((''&&%$#"!  "##"##""!!!"#%%%#! !"#J$%&'('&%#!!"$&''%#$')))(&$" !" 85568::975334*212456786545676665433210.++1@(*)'')+,*'$$%$#  $(*)(&$##"  !! 876556776432210///011357K3113331/../0110.-./3>%*,-,,+*)'$ 9789::98899863368:<=;9887877665 665543321221232212232 +33323222332 1011100100010 111001100121 01110011122122112221234332110123210 11222334445545456765:;;7976=< 988889:989::;;<=>> ! ! % ?;63/...12334333222122100///...-,++*)*++,+*))**)*+,++,++**+,,,++,+**)(('&'()*,,+)'&&(*,-/135: "%&),*$$.7?FR_d^TOOR]6>BFGA4L>::;;:4*" $)0:CN]1246667::=AD@pkf_aitvsldbhp9:;>BDDFGHKLJGDCA>rik9<==:lgjJ9==:i_[blrrru>CEEB>z|?{zzwrlmrrmiin:;;::;<;:9;@BDFGECBDIOU\][YSMGDIQWXSPONMHB>>>@A>sib_dkjkpqmnlkgdba_XPMU_`TIEEGFFJU]YQIGJKLNQVbh\UQRV^eea[\bbXIBFR[bgkljjih55bTO^8CHJE?<>CGJE=nklc\][WWZ^cfhlmmlhfk88kff58;:ngg7;<<<:9876h`ZZ^b_UPW2:=95d48=?@?94d232a`133_WW^254/\/220/027;<8/NHO/7=@AA=723;EKJDAFKOSXUNMQWXUOLS^a^\[ZYWX[^ck9;=@DIKLOOMJGEDBBA@?>>>@EJMONLF?8e_[ZWLE<645;CJR_inlgaYQLLORTX_gp>CEHNRU[bfhiiaSHC@>9dSC9310///4?%-8EWkx||{yq_M=aQB8-$<9B36ZMKz^UbAWmyvbUSV\\MkMAAKdFiNfLlOA>=:2*&%%$$$# ""!!! !! ! !! !!!"""!"#$#$###" ###"   !!!"#!   ! !"""!! !! !!"#$$$%$#"! ""###"##"!"#" ##$$###""!"!! !#%&'&%$%%&&&$! !" +#$$$%%&''&'&$$#$%&&&%&&&&'''&%$$$%''&%&'()*)&" "##"#%(**)*+,-,,+,--.0368974/)"!%(*.0/.--../12210/...///0A/.-,WVUTT***)SSS)*+++)OMLKKMP((ONMMMLLKKJIIHGGGFDBABDC>6,# !#$$#"##%       0 +  + +    + + +   $!%)-012221/,)%""$%(**,.-..///.,)%#"!!   #%')-.0233280.,)&$$$'))('&'''))&# 1,(%!  +  $)-/0(///5554432111.)%!!!"""#! "$%&(+++*C)'$#%())(('&'&%$%(+/7CNawꍤ+  * ۲pL:40-.-+*)((''&&%$#"! m%$"$' +  !!!  #'(%"   + +   + + +  + +   + + + +  + + + + + +  + + +  +  +  + +  + + +   +  +   +  +  +   + +    + +   +$      + + + + +    +   +               +  + +    + + + + ( +   !'.2.'%&*2#%'(%%   '1  ""%')&B>:55@"$%%$A=?#&&$@:7<70-3:;3+))*)),5:81,*,,,-/1:&,'@5/-.17=?<99=;4)&)28>BDCBA@>7-)2'+,)%#%'*,)#@>>:6764358;<>@A@?;9;856! =9: "#$#" ;621585.+/"$"7 #%&&!5443..42"$!(#'"%&&$"(,*%"%(+.1.)')-.,(%*020.-,,+,-.04 "%'(*+*'%#"""!  #%'))(%!40--*""&.57740,(%&(*+,05;!$&)-/159<=?@:1)%#!2(%082%2  C*6?BDEE@5) 2*! 0K*';+(4'5BILJB5017=>2>) )>.F`4aP<*8( + +       + + +  +  +      + + + + + +"   +  +86544542+(&%%&)+*)))('''&$%$" !     + + + +}~}~}~}~}~}~}~~}~}~}~}~~}~}~}~}~}~}~}}~}~}~}}}~}~}}}~~~}~}~}}~~~~~~~~~~~~~~~~~~~ ~~~~~~~~}}}~~~~~~~~~}~}~}~} T󂌕&0ŽNLIB;3+!TZńǀȿW & 䂓rc.* ž󇕠̶郓ȭϿȸǼ߀Ĺ􌡥Ŀž􁌜αҴȴԙ񆙡񇑎ܹܺѹ@ J˶)*+,-.//..//../13543210012&1122210/-+'%%(,/23210147547A$)06=<;;:988pmigg3g4566654446785/SG>;<==<;:62,(%%%&'?(***)***++***+,-.0369;>ACDFJLJGHL)**)RRRQPQQ))*+,--.--+)))QNKHFDTGJLLNONMPPOLKHD@<851,*+,038;<;965346898899:98:=?BGMPNMMNNMIC?<;;<>>??@FNZkvSZbilq9898789:9998989889:9:9:9:9989:99:::99:;;:::99899:999::;:9:99:;:;:;:;:;::;<;<;;<; <;;<;<<<;;;<;<==<<<===<;<;;;<<;<=<=>=<<=>=<<<=>=<=>?>>= <=>?>>??>>==<=<=>?>xaw`d8;;<=?AA?==< =>><;:9998>99::<=?ADGGFDEGHGE@9422320.0231/-*(%&),02333222/,,./-+++*)+/245<4334320.,+,,.025641.,+)%! %,02358   !"#"!"""#$%$$$%&''&&&''(('%$$%%%&$%%%$##$$$# $'%"!!"""!!#%%$##"#$&&%#>"!  "##$%$"!! !!"""$)++)('&%$""#$$#! !"##"""#$$###""!!""!!#$#"###%'))('&%#"  !"#$&( '(**(&&%# 7Z667887534445446545677887666776532220/.--3!*0/-++*)(&%%$##""#" !%()((('&%%#" !! 76676422256422211/0256677/-.00//-,,./0100.--,,/:%*,++*'$! ;::866679;:9987677766543432211244321233211122234322332121///00///00111222110002322210//000/0100/./00011234432320/013455455434445667676655445665667:9)8877766655667898778899??>=878;;:  3!! !  ! @=9631/0222322233433210//..---+*)('&''&()*+, --..-.../0/.-+*)((())('&'()('&'(('')())*)(('()*+*)(()+,,*,.147=*7;72*B4.06<!(2?Qb7?FGC=::JV^che]WYa7>A?o\OJGFEDCBA;0.7CEFMV_deb\^7AFFEEGJJJLQ[^ZRJEDEJNOJD@@CB@AEFE#@<9kikosrs;>ADGIIIJHGJNMGCEHFDDFGFEFEBBCCA=rlm;AFJLLHA>=?@?>@B>smmv@>iQAAKQTWVOGFLSXVUc:99;@GJ?2]18>DGHILOOPMGHMU\`\OAqfbdffn?HID>;99:;:5ijkq8bc4f][]230RE>=L_79?ELUcmkX`\]\]]ZVTTTUVUSPLKMRVY]cj776k6:>ADGJNQOJEA@@DFFEEEFGHIFEFINTRMID;`TLA4'AC%*18AMZg;EPUUSON{JFFGHJLORRKE@=;9j^PA60,MCBJ.@\DX_YNF>6`VK<*:-&"!"%/KPFOF|y}DE{tzIY`ZM{\Q_uEMLFsnol[CaLDJ\=Ocwv_C41/XL@<=6.)'%$#$$##"#"""!""!   !!! !! !""!!! !""! !"##"#" !   ! +"#$#! !"!  !! !!! ! !!!  !"#"! !"""###""!!!"#"! +""#$$#"!!! !"#$%$#("""##! 324 !$'(('&#" !#$%$#"!! !"$%&%&&%&'()***)('&&'('&%%&''())('&%&'6)*,,+(&$$&('%%%&(+./.--,,,+***+,-/25781(%)/1)##%''),-./../021.-,,-.///000/...--,+VU*SSRQPR++,,*QNLKIIL2KJKKJIIHIJJJIHFFD?8/#&$)!##""!!!#$&'%" !"$'  + !  + $ = + +  + +     + +  + + +  + + +   <  +   "%'*,-,,-/00.+(% ( !#$&()+---ZY,,,+*(()))'&%$$#!  : "$&'*+-/01110/.-,XVQNL%J%$##""#" +" + + + 1 "#""%)/..-,,,2/-+)''()+,-.///00/.,*(%!"""!  ##"5!!$'),14300122.*(&'(*./369GSe) 8 + + &ߨl\..-./132.,,+w,--+*)(&%$##""!  !"#$%$" !""!  +     + + +  + + + + + + + + + + + + + +  + +  + + + + + + + +  +   +   + +   +     + +   +        + + + +   +                +  + +        +$.!%%" %% +  + '.23651./5 %'%82-,.1441/+(')(&')+,*'#CBDHJJL()-034443213650,,..,,--,+,,+)))*)&GBB#'+.01.)%%')(''(%EABI))D1$!#).026:;70)+24/*')/4553/*)+/212<&,-(FCD## 8:="(/7;:4112201341-,0464200/.+'$#""&,.'7!%*,./0211.*+-28;80&>64566;#*,($ %+.+$ !"#$!?>940/1467789987678:;;:899899987766554320///0112344431123334443221234556 "#%%&(**)(('&'+16:<>@BDEEB>941.,+)*-/1234311257899:;<<=<=?@?>>>?ABBA@>=<<<;:9877764333210/.,*'$ ;789: ?? !#$&'(*+-.011245432247;?CDDDEDDBA?>=<:976hgfeb`_^\ZVQLHE@:63547=BDA=83/,*())+---,+,./000/1234569<>@BCCDEFHKL'()*E+-,RMN*.1442/,*+-.WRMJIIHECA>===<;:;<>??AEHIHGHFDBAA@><<<=>?>>==>>?@@A(?<9789;>ACDEFFGHIJIFCDJVlRX\adgmo8887678878789 88788899988998778998989:9:9:9:::99::9::99:9:;:999::9:889::999::;::;:9:99::;;:;::;::;<;:;<<;;;<==<;;<;<;;<<<==<;<;<=>>==<=<=<<==>>>= >>>===<<<=>=>=>===>>>===>==<<>yiSvn1365420/=0022111/-,+*))**++,.---/021/--17=BCCDFGEA>:9889::99::61.-./0124541.+***(&%&()0**'(.6;=ADG%%HEDB?;831001-%"'+.38:  !!!"#$##$%$$% &&%%%&'''&'%$#"$$%&%$##$#""#$$$#$%$#!2"#$%&%%%$$%''&$##$$#! #%&$"!! !"###%'())('&%##""#"!!"#$###"!!""!! !"#$#$$$##$%'((()(&#!  !! !!"#$&'((()*(&%$##""!8789:977788876|535799877667898766777543310/-,+0@*/.+(&&'&&%$$#"!!!998!#%'**)('%$###"!!"" 65666554445543210/01257 5310122100/./00/.,))*/:$+,-,++*)&#! 9988998779<=:744677887654323220/.-.01223332121 +21100/.///0 1000101110/001123322111210//0011011343210010///12212234345456667776677667898877656778778 776665554556767 89:===<;:9::99 !!! ! !. =<;:9876543211222311122331000.,+**)''()*)(()*)))(2)**+-//0001122100/.,+)('%$$#$$%'()))**))**++***)))*+,--.//004<*>_?MUY]aca^\XWUPI?85/PIFDB@?>@BA>=DC7)!96:!'1>IQVZ]g7>??<97789989stsv>BBA@@=skgfhjnrsmknsu<>?>?@@AGJIE@?BFHFB>@CGHIHD>:79?FJLQWYL:VC948ACACKYUB;83=W5/NAAL.6;91RHCBHVb4546;ACCKPTVWVVTSRMILWacca\[^]XUZe8;===>ACA>;86fe6;=@ELQPLIHGFEEEDCCBBCCCEFDCDGIF=aLA:50*-6DZ:GRUSPNNPU]dgd`]\ZTMFq?95eca[RKLPOH?:;CPXY`illl8=FORTRMF>lT<*C&;OPHCEOa;?@@BDGJNONOQQPOMIC>pe^TFBNd|FHwXD9\JDCA>5($)261+(''&&%&&&%$$#""#"!"# $$$#"""##$# """##""!!"""!  !"##"##"!!!"! !  !!"!! !!!""#$#"!! !!! !"##"!   !"#$%&%$$$#$#"! 43112345!$(**+ **))('&%%%&%$#"! + !!""#$$$%&%$$%&'()( '%#$$&()('&&'(N'''('''()**(&%&''(('&&'''&&)./-,++***+,.025662+%!#+0-('())*+,-./010001243/+*,-.-+*TRQ S*+++*RNLKJIIHGHJLD9-#''*,../3 "#$%&%$%&&&(    0 + +  % +  +  +    +  + +   +' + + + !#%&%%&&')+-,)%! "#$%(*,-./0112331/.-.--,+*)((&$"!   + + +  !  "%)-0245678764310.,*(NLKIGDB@>:50)$    7 "$-)+ 51.,,-+)'%#" ! !"$##&)*)'&$###$%%&'4(('%#" !$')*+,,+,/123448D\% +   'ʖ-*)'%#"! !! !""! !"""#$$"!  - !!  +  +  + + + + + + + + + + + + + +  + + + + + +  + + + + +   +  + +   +     + + $  +  + + +       + + + +             +      +     + + + + + + +    !   g  3#+/02455430/.*&#   $(+-07 $(+)#=<>$*02101247;?CEC@=:;<<964200.+(),//.-,*'&(***,/120/.,,+*))(&&('&$#$%MMLNMLM)--,,+*MFCABCFIGCACFH&'('&IGGFCDHE@;979>F%HGI&(-2554434441+&&),-.,*)++''+14310//037:99;>BD@;:<=;720134469<=>?=:73/,-023321124650*%%*/3541/02541.,.24543432027;=>AHP***SRROJC==>:4+#2/2:$+,'!"$%%%&+-,)%$%(*(%#%'*,-.+'# !%*-/39;0". !"*52#!/*"")!&%/&!$.5!""')+,-/,+(%&-45530/0/,*-4 ! ""!.. #'+*'%%$##"! !"!!"#%$.#($,/.,**+.4:<:98873-(#542.($$'&! (,+/4555$+///,'":-%'" $0!!""#%')***,,++*'$!>94-$#-=M+,F1$/%## !   + + + + +   +  + +  +  +   +  +  + +V    + + + 4443321232111-*(&&&'&%#$#""#%&&'#   + +  }~}~}~}~}~}~}~~~~}||}~}~~}~}~}~}~}~}~}~}~}}~}~}~~}~}~~}~~~~~~~~~~~~~~~}~~}~}|} ЅYchþ½Ľ\e32/ + FSSżº½ͻCŽ> 犚q\º̀ū˹ɞޝ¼ϹιµƷԶ􃋃ߥ􂑥Ľ־聒ȸ엳ʫЩȀķ늢ֺQ?$LKܺ,.234456544565665445655433320/.5-,+)&$$'+/34420-+-04764347=FR,-+*+,../0/.--,,+,--./00/0113321///0211101220/-++,-..,*)(&%#@:6410/012322467776543210///0255320//00.,**)*++*(((),/00134432/,+,.0345554433320001233456787677 "#$%$$$###$%%%&&'(-6>CCAABBBA?<:9::85334567779:;:630/035678;=?BEFDBA@=<=?BEGHGFC@>>>?AA@@?>=;9764321/.,*(&$#!<==;:<>?A#%(*,,,+**+,.//0112334457:=?@@ABBA?><;;=<:9886A430-SKE@>>@A@?AI),,)E7-&%%')+-02355433469<@BCEGKO)+,+*)((''MMLLMN'e()++-/12343211/,PHA@CGIIHFECBCC@<:;>CINQSTTQKHE?963335799:;=?@@>>@CCBABCC@=>ACDDB?>?BEHHEC=:njrSvOdq987878989987889:989 +88999::999:9 ::999:9889:9:9:9:::999:9:::9:::;:9: +999:::9:;;:;;;:::;:; ::;;:::;;;<;<<;;;<;<;<;;<<;;<;;<<;;;<;<;< +===<=<<;;<=<<==<=<<<=>>===>==<<=>==>>?>=>==<=>==>=<<===>>>=>}==<===?qUlG;@CBA?<72-)''()*+-..-/256543223343258<:1,3?JPOP)(MILU..+MGEB>951//0///00.-,,-.//100/-,(&'+00/-,)"&1:>ABA>;97530.-#,++*($  %(+.26776 !!""!!"#""#$$%$ +%&'&%$%&&&%$%$#"!  !!"##$%;$##$%%&(('%""!! !"#$%#"!!"$&'()**)((&$#"""###""##"! "#$%%$#""!" ! !!"#""!"#$%&'('&" !! !$&''&'&&&()*,+'%$# .;:987668<989;;:98899987631/14789:976688777643I21.,**4%-.+)((&%%%$#"  !!"#""#'))'# "$" !!87556666543<24641011122110/.--./0232/,*)*1?'+,-.,+)(%"  :::;<;8558;<;8765678876554334323210//./012110012102 1134311100/01 000111232212312332223322100012332111001233210//012111344455456566676765677645 4456 :97788876655655677765667788:;:::;<;;:9 +877:<<;:::9:; P@ !"""!?><;:99:;=>=;974223310003444566678766777545543343467532/+***))**+,,,-.//010/-,+*)'%#"!"#$%&()**+++**)***+--..,++,-.0/..,+.3788!6Z>C;49EG?2L>1(%" !"%(+.363/,**(&.DUJ3",K=Q]cddgmqtuwvuwz}{xzyzyxusttuwz|{yvohhknprqmhghlqme^\\ZZ]_\VQMKHE>meec^X[bgnu<;9878::j^RFDHMNLF?<@IPTTY\ZWWXXVRPR\dfdcZK>AQahcgs<>@ACFJIF?AGMPPJDCBDDGLQUUTOLOQTUUUTSSTSSRSTTTUVYYXXY\_cjpsqmjgdbba`_]ZXX\`aaef`ZVTPKILOQPNOSUTNHECDCFMSWUTTROMMLLLKMORVZZ[\ZUUTTW\_djr{~xtuxrhc`accbaejqqopquyvlgghe_[\^a_XOIE@=<<;95YSLNJHDFJS^9?K\heYG7..21]`6?=^JT0L,5*-",9DOa663\PIMO\:ISWZ^^XUTSPJCBLTP@8=HNQSX\`\PLOZk<>??>?AEHFCBDDBBEHLNNKC9^L@8.'*<^?M[_VC/A1*.9CU:KUUNHD;hiomb[YVRTXWUUVYXUTW]ch9?CFHLQW\\QB7d^ZVMB<=ETg>/IPPMKKLNQSUSQNNPUZ[ZZ]iuta@D@!,)+.23443213!#% &&&'&%$$$'))('(+)*)(()))*+*)((''((('&&'('&$$###"   !!" !!  !!""!!"!  ! ! +!!"""!!! !"!     !N"#%$%%$$%&&''&&&%&&%$"! 32124677!%())('''((())((()*)(&%#"##$$$" !!"""#$%&&%&$$%'('(('&'(((''(+++*;('&&')++*(''))***)()))'&%$&*,,,++,,,/24553+# "$%(-350*((),./000//012440)),.-,,+)'QRRQQPNNOPS*++**SSQOMLJ1IIHHJKKMNI;*410-+.9 !730.1!$'()**)))('&%%).10-    +  +  + + '  + + +  + + +   + +  + +   + + + + + +      +  +1 !&'''(('&$!"$'())(*-/01110,'%')*+,"+)'%$#"  +F !#$%),.///12321/.,,-,*)('%#!0(# + !#'''()+ !! 2,'%)--+)('&%%%#  $*/13442.+)%!!###$&'(('')++*))*)'%%(*+,,+)(,0233322ly՘   K  +dɌZ<8532/*&#   %((((&)/.)'$!' ! + +      + + + + + + 5 + +  + + + + +  + + + +   + + + + + + + + + + + + + +   + + + +   + + + "     + +  + +  + + +  +       % + + +   +      +    + + +       + + + + +       + #& + + +  + (  ,(6;??>@DHLNONNPRTWY[\YSPQQQSRQQPONPRRPOLFACFHIIHD@?AFKIB>==;<<7,#%0=A?CM)+,+,.11-().3673-+*+,/158741012577654F32344434775689<@DHJHDB@?>=<==<988;>>>AA=8541..0332135772,)(((+05764431./148::<=<7543379;?EJLOSSOKIJKHC?=>?>==?BEDCCDGJHB?>=96468:94.*'$! ! *% "!!!#+2 #+5?>7,!27!%-&  #*6 6-&&&/ *012440.--+&"!'-+!#&(),040)&(-7!5(%+-++-.-)'* $&')++(&#!$&$ ""! "$'()("-$ ()493' "'./+'$67;82--,))+*)U)+--+)*-02!$%'+0460&8530+#%0',-+*))*,-..,))*/12336IT--,,ZZZ[,,---../0112221233210/./12210/..//.-++,--,+*)'&$D>93113 46889:98887776 77630/02320//0 1110001222334 3-&%)-/134334433345433435 "$#"#%).38;=@ABCCCBA>;:999:876776543 +23578;=@BDC=DEEDBA?>95212589:;::<=<<;986420.+('%%$$"!989= !!#'*-..///.-,-,++-/36789:97765556:778:::741-SIA?@BCDFILN()++PF<2+)*,/1334678:==<;=DLR*++,-../100/.,+)('&LLNNMLLMP*,.///.---WSPONNOQSUTQMLMMOOPONLHC@?=;9889889:.;<=>>?@ABDFGFDA<6//4=BCFFFD@80TMM[hJWbl89877787898999878989998989:989:999::9:;;:::9:9:;:;:;:;;;:::;<;:; <;;:;;;<<;:;<;<==<=<;<;<=<=<==<<==<<=<==<<<=>=>=>=>>==>==>=>==>==<;<;:851.+*+--,+++*('(('(()),/11/-)&&'()++(')-.046544552.,+,,-,+)'&%%#" &,01 3556  !!""##" #$$#$$%&&&%$%&%%%&&%$##$$$#"""##$%&&''&%$$%%%&&&$"! !!"$&&%$%'*++*)**)%##"#"!!!""#"!D !"! !"$%$##$'()('%$$$#!!!  "#%&'((&$#"#$%%&&%# 78 9854468d::9889:97655443335630,*((/(,,*('''&$"!!! !$%%#!!!"#$%%$! !##!! 6568877654567888/643320./11//.-,-.01221/.-++*.:%+./.,+*(&#! ;98767:<;:74345776667766554334323 +210//0112210121123332 +10011100/01234433212101343 23332332334456778987776766677656544887665 6667876654565566:;:9;:99:;:;;:::;;::9989:;;; !"#,"A=;::876544345567899988778765434467898887789::;<;:89987555667887652/-,,--,-./,+++,--,,++(&%#"!!"$%&())***+++,-..--./010//..-,-.08 &+-)"/\J^e]L:1.18>?<:78;EXjrurmdUG@DLMPOPTYaksxxtoligfggc_]_^]\ZUPQSTPLIJKJKKLNQRQPOLKIGB<;?FMMIEB62+)'+4DQQLIM1==:;@IRRE::BH?305;?A@>AEFCBEEC?:57CR_gjdYMGGFBBHLLNV^bcf4579:9;?DDA;53469::;:;;>BFGFDA>81VLDBMd?IPW[XLA=@@<8d_3=BA>=;fUS`9?>9f]]djgbb5=CC:998dZRNP^;FMTXXWUVUTROQRU[ahmnjfec[QEoT;N0@52246777643334445434432234335 !!"#$%%%$$##$%')*))('''&'''(''&%%$#"!   !"!"!""!"!"! !   ! !""#$$%#"  ! !!!"!! !!!"#$$#$##$$%&%%&%%$# 2100/12469 $())('&'%$###"#%%$"!"#$$$#$%%&'''&&')+)'%&%&&&'''(''()***+,--, ++**)))*+++*?))('%$$'*,+*++,/36874.'$%&%%&+24-('*032/--.0100012452-)*-...///.Q,*)(OMMONMLLMMLLLNOQR)SSRPNNNMMKJIIHGHJLMLI?3$789867;:7415=FLIB92.,/220,*-37=>BJMKHGLNLIKMPRTTY[^^[___^]XVQOMNMLMMLJKJIGC?;7558:;:;;H;>DECBBA><:998668;AFEA><9753347:=?;64544321024215<;:; =>><9765431012/+% /)! + +   *-..1/)&*03,!+! !*)%"%  &--$"&! !  ##! !" '.353-&!!"$%&+0234!"  !"!!$$#! '"*&,166-&#%&$ 72#" 4)(/""3-,04422 %%20%%!!$%$""##!  81*%$,%*/220///-,**,038<=:8883-&?-# + +          +  +    +   +  +   +  + Z0/010.--...--./000/.,++*)('%##! !"!  +  +  }~}~}~}~}~}~}~}|}~~}}~~}~}~}~}~}~}~}}~}~}~}~}}~~}~}}~}}~~~~~~~~}~~}~~}~}|}|} V􂆄j<ȿ􀈌G߭Y551 + + SVÿžƽÿĽ¼,;Ӏ煒悒jȾʀһǀ̔ľŹֵͼ銜»kf\WSOHC?:840,,*)&%"""##%)-2:DIPOUY`dhru}ľ¿򀎜ȻǾ̀̀ڼ¶ǿƠ߀鋢򑥺⽸ᇕ􈖙ڻ瀕øā۽iŦ.02321,34655778753259:;;::989::998876665210.+)*.4675%432235788999<::<>@?><<<;<;61.,-.159<==:9<@BCCDDDC@><:989:962026<@A@?=;8630///0.,**)'%#" 8779=!#%')+,.-+)()((*,/2579;;<<<:63\TS,03331//024566O3.TMIEB?;=DJKJIGECEJP*+I900236@BCCDEEGL),.000/0134544210//.---*)RT***TQOMK%LKIHHHJMOPPNJIIJLLLMNNORU+,WUQIA<8679;<;:);=>@BBCCCB?<;;;<>@A@=:62+E8]VpqiUiu;:98998788989898989899898898989:98988898898899:99989:::9:9:9:989:9:::999:;;;:9 :::;;;:::9:;;:;:;:;;;:;:;:;;::;:;:;;;:;<;:;<;< ;:;;<<;<<;;::;<;;<<<=< ;<<<==<<<=<===<<<==<;<<<;<<===<<;;<=<<===<=>>=<<<>===>>=>=>>>=>=<==<=sWpK?BGHE?;866887668::988876645664357973/,-/24540--0366432100.,+,-,*)(''((('&'+-,,-/14421/-)&&''))%$'-01.+().5:;<=<92,)'''%$$! (-//0122346 !!!"$$$%$%& %$#$%'''&%%%$%$##$#"#$$#$%$##%'()))(&$###"!!"$''$#&),-,,+*)&$"##$#"! !!" ! !!!"""! !I"#"!!!  !#%%#""$&)+)&" !$%" ""!#&())(&$##" "#$$#"!  #$#  ! :988766788986446765443220.+)+4"(++)'''&%$" $()'$#"""#"##$%#" 8999 75455223666630.--..-./13677531/.-,*+4"+..,+*(&# =::99:99875348:76 5567764455432:12211222100012333210112112332121122346654420/01121001232221232 1011001100123544332234334567765!7876455654567778777665455455686567766554/5678776545556665556677888889:;;:998887788:999:99::99889; !!!"#$%#!@><8543210...035668:;<;:999;<::8766788876555678766678 9;;:851/.---.-$,+,+**)))('%$###$$&(*+,---,---.///..-,+,07!4&#&))(#%H@SRMMR`nv}vja_^^aeeda[TOMNOPUY[[ZWSONOQRSVZ]^\ULFCDEFJQTUTSND:3\[[UOC50334-#8-$"$+9'7JXR?203:BJU\XUTUYXUVW*YRFGP\`^coDNRLCADEHKKKLORVZ`dbbachnniefgeb`|__\VSRONQRONPOKJOTWZ[]^`aabb^\ZYXTRQPNMLLKJJJHHHJKLMNRX\]][^bfhjopru}~{wuy~zwz|~}yvsoigge_YVSSUTQPQTVWUUUVURVYYUSRSYdnoomf^VZ^bc`^\\ZZWTW]`]VSSUVVTWZZXSNIFDCGNTSPQV]^adggfd^XJ:664T>-&$$#&'0 5DVcmw>BGNONNPQNJD>n_ROJIFFJNSROHEB@>:5-QTYVV_6AGLOMJHE>2USQMEHc?ISb|GErgccbZI??@?===?CE@93XVDBV8AHNNCcNNRUb=DEB?=>CFGEB>9i`[]geN=ARc9CRcoqmmpuz~yqkiggffeb]UJwY8?K757::9765434443210001212356 "#$%&(*-.-,+)'& %%%$$#"!!    !!! ! !!""!""!" +!! !!!  !""! !"#"!!   !! ! ! "#$%&%$$$#"$%%$" "#$$$##"! 1123679!$(*+*)('&&%%&%&&&% $$$%&$! !#$$#"###$%&&$#$%&&'& %%%')('&&&'&%&&')*++-.-*&$%')*+++**,-.-++***)('%#! !!#$&''(*-36775/)'''((),-)%%'.2/,,-.0011234550)'*..---.//.---,+)ONNONMLLMLKIGGIMQSRRPNKJIH8HHGHIHFEEHKI>, =;:98;@"$%"<8"$&&$""%(*++*)'%&)-0/-+)+   + + + "5445521#     + + +  + + + + +   + +  + "%&%%$" "#$7##!#&()**+*(%#"    +  F#'*+-./..-*&B::"#"!!"##"/*% ! #  <+.20/.--,,,-+)((),-/.-+)())**+++,03541+&# !"# """!!!"#$&'(8))(&%%&(+,--+($ 1,Xc̩9+  # JҎaB;984/+&$#$$#$$%&&'&$##"!!"    + +   + + + + +  +  + + +  + + +   + + + +  + + + +  + + +  + + +   + +  + + + +  + +  + +     + +   +    + +      +  +  + + + +  +                 +    + +     + + '&1/**.6?FJNME=76557:;:730///0158;=>=95455667:<=<70+))*+-389751+#5773.% (1."%+3974459866693)*19;8:@(03/)(,.01112469=ACBBBCFIIEBBB@>=<<=?@=:9988:;:?CHNSU[`fkq􂅉{z}unmpsttonptz}~|vsog^]_YQKE@@A@=<<>@BCCEFGKORPY[WPMMKR^hllke`QNOPNHC?<:85249;8422110.121/+(&$"!#)-.,+/469;<=;852*!, + + + *7?CGIJHD?<;;99:963/)B1    +  + + + +    +  + +   + +    +  +  + 21 /../.-+*)+.0>.,*(&%$$$##"! !#!    + +   }~}~}~}~}~}~}~}~}}~~~}~} +||{{{|}~~~~}}~~}~}~}~}~}~}~~}~}}~}~}~}~}}~}~~}~~~~~~~~}~~}~~}|}|} Aü+B +߄9¾ͨxDM*,ENſdʽ3W򈏓[ (˿ׯءŽһ킎ĩ״ƿž]WSNLGD@>973/+)&$! '  !"#$'),-2321/..011210.-,+-./34568;<>AAA@?=>BDFGD?;52.+*('((*++,**))**)'&%%%&),07@IQ^h톌ƿíׂŵ̰ꂌ߅¾񉞲ӽ脪ګ* +29iȮ#-/134335676689::;;;:9989:999876689:<1;:8630,)).48755788766679:<==<;:;@FNUZ[ZYZ\///.//010/0123 444322111000/-.-+)('%$C<5112244455664567765567889888765543233321011101345567641,(*/1112200023456u56!#&((''&$#""##$$&'),/2346641-+-1478:<=>@A?;7641..//0369;>BDEDB?<;;83.)''-3799:;;:;<>@AA@?><9763/*'%$!  ! <"&(*++,,,+*+,/2478:I986hb^ZVROMKIIHK'*,..-TNFEJNNMMKIHGHKLN((NIEC@><:;>BGLNOPPQQOMKHFGIN),.//01221#0///0369;:86555310.XWWVROOPPOMKIHGGHGHKMNMKIGEEEDDCEEECA@BCCA?=<<;:";==>???>>???>?ABBB@=4RDBjZVf8:98787898999889898998998898989 8889989998989:9:9:999:999::9:;:9:;:;:;:;:::;;;<;<=<;;::;:9::;;;<;<;;<<;;;<;<;<;<;<=<=<=>>==>=>>=>>= +>==>>=>>>?>=>yhhOFCEFD?9679;;;:t875565434568::975556663-+,0220.+*)()**)()**(''((''&%)4?FKKJHDA><;:::963.+)%###" '6CFC@==>ACA=7.)),/0.*%! !$'+02210/136 !!!"!!"!!!""#""#$% +&'&%%$#"##$#$#% $###$$#$$$%%&&&%%$$%&&%%&&&%$$$#"#&),+)'$$%&&%$#!  !!"#$#"! ! !7  !""!  !"#$%$#"  !#"! !"#""!"#"""##""!!  !""!  "#%%#!!""##"989998767787655444665430-*'%*9#&''&%%$#" !%(('%#!"#$$%%$ +%$  398643345423563200/.--,./123443223321/.1='-.-,*)'$! 989998876569::877766545566544433321112333210101211013210 ///01122100012123442211212211121223555445567776777656444876555666566543 444332101222345655544434455544456667789:9:98789:;;;:;498899: !!"""!!! ?>>?@@?@@@???>=<;:;;;:99;<==>>=<<= <;99:97677767677888999:::9:<=<<>?=940/00///.-,+*++**)('&&&'&&'(*+.01.--...-+,,-../0112479BDA=<;@EKLKSZ`d5:>CHHGCCHOSSQQSVYZ\]^]ZY]aceglprmhfdca^WO'[ZZZYWVUTQQONMMLKIHGGGHHGGHHHJJIIHIIHHIHHGNHHHIHGGFGGFFGGGIKKMNOPOMJJKLLLMJIIHHIKLNPPRSTVVSOMNOOONKIJLNQQPMJIHGGFFGGHJKJHG0IIHGGFGGGHILNRX]adghgigbZQGDL]p@A@=;889::;;;::;<<=;naTNPYcihjqunXJJ^>HLPR\iql^QGCCCB@??ADGKNQUWUQJC>;<@IKGC@p`c:sYGHJMD;2./,*KCCH*043200/08AEC@CKZ9>mN;;CIE<8:?FOW^egaYRQXaddfd`[YXWUX`h643468876786574]X_9EQYXND??@>749EZmtunaVQOOPOKEA@@A@<6]PFHSab]6J`kh_ZYWSOLNV]`^\]bghbR{X>T8'=8667787655432"3323356 !#$%'*+*)(()(((''(('&%#"!!!    !! ! ( !!"""! !""!!"!"#%%$$#"4!!""#"! #%%$$#" 44579 #'***))**+***)(''&'''&&%& +%%%$#"!  "#$###%%$##$%$ +&'''&&''')*++(#!#'*+++,,++)('&&'''(<&# !$',121/-*'%&'''()*(%%'*+,,,-.0110023464.'&*-/.---.,VTRQONLKJJHGEEFIMPQPOMKJIIIHEDFFFEEB:0&! !?:8;@FH$$#""!#%'''('%$&')++)((''*-1210.- 3  %+033346 +    + +  +    +  + + O +  + +  !"$%#!$'))'%$#$! !!  + + + +  + + +  + "'*-012210/-SMHB=940.-+**/)$#'(('%"  !"!"##$#"  #!"""!!! 654420/00/-+*)(' (('')+,+)('&&'))*+++*(())(&$###"!"#$%&'/)))+.010.-'=7?ڀ   ;cH>;950*&&''(''&''&$!b !""! !%(''%"    + +  +    +  + + + + +  +  +  + + + +  +  + + + + + + +  + +  + + +   + + +  + +     +  +  +  + + + +          + +                   + +        =7KSTTV,*(OOOMJJN)'JE?8310002455469:96543432231/-.1/+% 92+!  #&DOE7,$?7* %()($$#'+/0059=?!#$'*+)'(,155323578:;<;989<>?BEHJHFGIKLLKIpiea[QH>2-09C%$"  !"""!!"$##"!!! :2+)*/5989>A;.&'6$*,,-2;B@6,&###" !$&)+.0/-)$!&(&$#>45 @/$%(*%! $.#=)#"%).12/*&'+/12440,+,+()-2"&&$#y!,(&$ *)8DC91/11/+& '/1)+(,#,23+$ ! %3?DD@70--.//,(%##$$"3)" $--)%4<;6320-)'(-243225896,A-&     + + + +    + + + +    + +  +  +  +  +- + + 64320/.-,+*))+-//.,+)('&&$" !$  +    }~}~}~}~}~}~} |||{|}}~~~}}~~}~}~}~}~}~}}~}~}~}~}~}}~}~~}~~~~~~~~}~~}~~}|} ȿ>򃓣˿¾ФzT00, HXYʻڊV!$8Q󄅅]a 0&\]¼ԟ§ʹc󀈔é{50+&#  #)06?FLX숤ϴ܂焒͍ԾՆȾᅗ㺋ľĹǞϊý㶛Fk8£C/-,.146777654689:;<===<;:98789:;=??=;:98752/---.159:889:876799;=>??@?>?EKOSUY.//01122322210/01121O23444321000110012100/...,**++*)'%%#A8/)(+.012233323332224554568876665421112100010/036654222345530-.1330-/25: ;; !#$&'((('&&%###$'*-03555442/,+.158:F;<==;5-)')+.27:=@CEEDB@>;:984+F@#*4:>?@@?>==>>?=:9:<=<82/+'%#! !""! ;#*.0122344348:;K::95aUIBAABDGIJL'()*UOE=4--7CKLLLKIHGFEI*-*LEDCBACFHJM)++)'''()*+*(LJN+./012P31-+,,--.../1369=CGEA;620133321///..-+QKFEDFINRU++,-.//00.VSRSSPNLKJJJKKJFB@?>=<='>?@BDDCDDDC?;62^WLdbKcs<:87788877789989878988998898988899988788878889899988899988899989899:99::9::;:9:99:9::99:9989:9:;:;;:;:;<;:;<<;;:9:; <<==<;;<;;;<;;;<<<;<;<;<<=<=<==<=<=< =<<=>>>==>>>=<<==>>=<=>=>>>??>>???>??>=>=>>>==<==>={qTpSIHFA=;:877899765666544689877898421e/,+,-0479<==?@?<:9:974.'';-8;:8543/+)((*,--*&@6/+**)*.269:;=<;;@FGA?? !!B@=71.,+++,+++*)(()+,--../..---.123457862002345566:?"$&%##%&(((''&$"'JFkGLLLKIAn]OJMSSQQTXWUSRNKLOSVUQKFB=:;<>AB>8ibYTSMC:.#.+--04689866544210//.-+.07F,28@GJHFDIYr@>p_ROWcied8>CNW\`bb^YSOKHHJPY_\UQNKJKLJD9^Xbk9>EKJHFHJNNL~~FGHIHIIJJIJJIKKJIJIJIJJJIIIJJIHIJJIHGHIIHHGHHIHGHGHGFEDEEFGFEFFEEEFEEEFFEFFFEDCBCDFJNPTVX\jtwsomkijlrrk_SIIXm@GLONMKHB9]Y7HNJC=jXS`;EILLKKMNOQPJB8gl:?CDDDEHIJNRTUUWXTMFCA?@AACIKC8i=EIJGDDFLI<6\POPQMKW6?C@;77:=@AA?>BKPJC<5]O=&531`K]^ZUPKE@ADEC>:97532139<<>DJMMMJC<:=DNW_b^TGBACILUI?mg69:=>@EJMNU^bZ=B).E4DPTRMGDFLRVZ]^[YVPJGEDB=jUA`C.D:68;=<:98655544566567888 !!!"$&''()))&# !!  !"#$%&&''&%$#"!  +  !! " ! !#%&&%#! !"#"4#$##"!!"!!!"""!"""#%%#"!0--157!%*,--,--,,+++*))(2''&&''&%$#"  #%%%'((('%#  "$&&%$$$%&(((')***))('&#!$(+*)(&$C?<<=?A!"#("  #'-1/*&%$%%&&&()*,,-//-+*+--./0122/&;;$+//.-,---,+RPPPMLKIJGDCCEFILMLLKJHGGFFFEFEDD@9+49>@BCCEGIJKKK%&'(('%$%&&&'')*,-..,)*-24333221,  #(,/3   + + + +  + + + +  + + +    + + '  "%()('&%##" !"%%%$#"! +  + +Q  + + !"$&*,.000110/.*H:.'&''((**+.)!$((&&%$""#%!$)-,)%"! /+'&&'*-/141/010.--+*'$"A##$$%%%')*+,-,,--,*)&#DA@ +,'k6̋kPD=60,*)(&%$#"##"   V!"      + +   + +   +  +  + + + + +  +  + +   + + + + +  + + +  + +  +  + + + +  +  +  + + + + +    + +  +  + +  + "     +  + +   +  +             + + + + + + +        + %+GV/34343,H=51242//2653220./256751.*'%%')*+(">930/*    ! $'('%$'2A&%A5--5@EDB$(+39<@A@=840>,))*-263/,*))**(%42:B#'++*,.027:;¿Rwtk_WPJGECC@90*&)2>%*.0-,*'#-)%)&"6,(1 &())((()+--)#14 "##$%'''(*+,,/1/)$" "#%*,'7$&'&$$&*)!' +  %-/26861,-10--,+))(&)/3-&")5 ,%#$%" %"! $'$"/&,r(7:72.*$!!#$#  #'())($"*0674-$! $(+)!62 !"&*+-3:>9%!$.1/,'#$'+.03430/+'$### 7,#4 +   +  + +   + + #  + +  + + + +   + +  + + +  +   + a  + + + + 100/..-,,--,)''((),,+)(''&$##""!  "  }~}~}~}~}~}~}~}~}~}~} +|||{{|}~~~~}~}~}~~}~}~}~}~}~}~}}~}~}~}~}~~}~~~~~~~~~~~}~~}~}~}~}|} 0߄݀0˾Núʱ]00. +!LO߄z󁍕􂅆q%L.낇?lӳⲍ˽Αݓʺgּ|93.*'$"!"%+07APYe쉕憮񀅇ȉ·Ɯքdz>ÿ̧څȾո򀅂F+ <Ϻ55543334G678:=>>>=<;;988:<>@BDDA?<8520/0100367779::987776546@CGMRX023&210/..00//0//00010///..//../122100122212111/-,++*++,,+)(((&F?82002454446654433442110///10001112310//./13@201124563-,.123443247:!"!"%''&&%$$$%%%&')*-0366652-+,/2468:;<;;<<:84/-/258;=?@ABBAAA?=< :62--3:>@ABBBC4A><973.+)(&%$##!855776454321012348"$#B?H.7<@CEDCCBA.@?=:72XNC>@DIMO(*+,-*QKD=6.*/9FPTUVUNGA><<<>BFKJJL')*+,-.-,++,,-./001110//0210//.- ,,-/024455541W013699630/14675347:9841003799863/YUQNMLLMNKEA>>AGMPOLJIHGECCDGIJJID>:9873.UUWfqNap;:998789899988898987898989:9:9:9998999:9:9:9:9::99:;;::;:;:::;:::;<;:;:;<;<;::;;;:;<;:;;;<;<;<==<<==<;<;<<<;;;<;;;<==<=<<=>>=>=>=<=<=<=>=>>==>??>??==>??>=<<==q_sYKFEFFEECA@@@AA>;8776678889:<>@@BCB>71..012139AK*,.//00,$<;#*.0234H322356773-)&%$#A==@E%&'&&%%&(*,..--.)219 7420//.,+,.146  !"&##$$$###""##"!"###" !""!"%&&%$$#!!#$%%&'&%$##$%&()*++(&&&'))'%$#"!!!"#$$&(*+)'((&$$###$$$%%&%$#"! ! !! !!! & !"#$#" ;#%%$#""  8 &!""! !!#$$$%%$#"!! ;:::<=9889 765554455665433320/,)+6 "!  !! @54346 #%&'''%##"##" ! !##!6788643468547!!"!!6 3344210!112211124666520//.,*(*8%,-,*('$ 986787654468742356556 +5543332101232 +10///0001101010/0111221112212221112111221123433443232100010$121002334568:<=<865556655665433345565456654320///...024555667878889 878977644689999:;==<;:9899:9877889899:; !!"#$#"!!!"#$#""#$$##"!!  !"#"!986532223210//00123'44458:;=?A!"""#"B?<830-+)('&'())*,.012324678899::99:==;89"$$##$%&'((''())(&.-WtuhU@[>(8*%++XDOQQQNIDA??;7677id_YUVUNE>8/%<200/17 "#"#!?==;;=;@GK*3BINH>9=EJIKOMGDB@>=;;>ACFKPSQPLECDHKNOKC=9dSKJNSX\dsEGHIIJKLJKKKJJIIIJIIIJJIIIJJJIIIJIJIHI HHHIIIHHIIHHI HHIIHHIHHG +HGGGHHHGHHGFFGFFGFGFGFEFFEEFFFEiFEEDDDCCCDEEFHJMQW[^jkmok\KtYQR\6GYi=EJGCBCEEEFIIEB@@ABCDFHJLNOKD>96lhh9>@>wss:<DHKKJJJGCDFHHGIIE=eI3.:T9BIMOLIF@@BC@<;<=@EIIHIMPKJVhqTpkg_UOOSVZ_^WNGA=96cZZc;EIKLIB=AJV_XG2C0*0>R5?DDBCFKQX[]_]XRPMLLNNH?nggljY>J,HE"  !!""! !"!!! !#$$%&' ()))('&'()('''&&%#!!! !!!   !"!  !     "#%& %$#! !!#$$#"!##""!!! !!! 2334 "$')+, +***)))*)(('%#!  #$#"$&')*+*)(('''(((&%$##$%&''(''&'()))*) *+)'&%$##"'#%&'((&#;:;;:99;==<;:;=>?><:89!%((%$$%&'(*+,.1684.++,/011/../121/(?46!(,-,E---+SPNLKJHGHGFEDEDEFHIIIJIIHFC@???@>:3) 9= ACDEFHKKKLO(((*+***++*))*+*+,.../001234566 #(/ "  + + + +  + + +   + + + + +  + Y +  + + + +   "$%&''('%%$$%# !"$%&%#! +   !!&+/22334I2/+(#:/% "$'),("#*,,-+'! { !#"  !  #&%#!"#" 30-+++,--*&" "(-0/.---,*((+/1121-*'%$$#!@GYΙ?   ! "ݩlM?8421/-+*(%#!!  !"###"""$ +  +   + + +  +     + + + +  + + + +  +  + + +  + + + + ++ + + + + +  + + +  +   + +  + + +    +  + +   + +#  + +          + + +                     +  + + + + + + + +     +  + D 1EF>3'6$ =.55430*&$""! !A>:5342,% +x)/114>EGG>3,')/78;!#$#$(-1,&#&,/-.0.))('%$$$&()+.11/-)$"#&())'$#"=304:DQ_s큋 ,Itmhc\PB^C832%2=$'(&%#R$%&$! !!"""$%')++(# 743 ! >;;<76<#)-11/-,*'%#!!#&('#!!!"#$%%"!#@. + + 3 + (.-)&$%(,34-&#&22/-,-!$%#"#$$$''&"5%&"(+,+)'""#$!  "%'''(+,)(0<6/+,/26::5.("3--2&)*+*$&/63*#%!$$""$'*.12440-+)(()(&";65891"#  +  + + +    + + + + + +   +     + * + + + + +  + +  0/-+/*+**)(('')++*)**)'&#"  }~}~}~}~}~}~}|}~~~~}~}~}~}~}~~}~}~}~}~}~}~~}}}~}~}~}}~}~}~}~}~}~~}~~}~}~~~~~~~}~~~}}~~}~}~}~}||}|} 肏@пfʹλkw;6/ B@HO/s8 Ž苕:F!uՆրżðܠ萢ȻѼpռ_bd/)"  $*09BUdmtţ񋗟޼񇎏εڎ˶ϼϸ۽ͅێ&w.Ѽ +"4345554344469;<=?@?<:999:::99:=??=<;765379;;;::9778889;:989;>BDBCEEC@?@@@?@EMTVSPMLLNR,/0010///01///1123212334532343320///.--++*+&*)'&ID=5/,-/000123334434555654443323565`32221000123234543332234573./357789; "%),,*)(&%$##""&+049;:::9998532369<==<<<=<85210/..0379:=@CBBBA@@??@@@???ACBBBCDBA@>:4-&#$).01/-*'# 789:99:<!!""#$$###$%";5;(3;==>@ACEFFEDEC@<71RF>>BEJ(*,.010-UOG@:88:<@FLPPOOJ>1+.8>@@@CGJL'(()*+++,.0/---.../012320/012223332223222331/.X\YUSPLHFEBAEMUX.110/-+*SRR))POO(**RQOMMO))QOMIFFJLMLNTZ\]]^^ZUPMJD<40,RRTZ_ci\Wiv;887789888998788998988998999898989988878999898989998999:989:999889988899:9:9:;:9:9:9:9:;:9:;::;<;;:9:; <<;<<;:::;:;:::;;;<;<;<;;<=<<<;;<<<;;<<==<=<=<= <==<<<=>>=<<<=<=>??>>>=>==>=<<=>=>=>=>==>=>JvkZiUOOMNPQPNMLJHFB>===;99:<>CHKP+.134321-&A86:@DC;7:A$&),---../01/-.25654L56667779950+((**'%%'('&'()+,-,.//-,*$3!$%%##! :3.**++*+-03345  !!""# $%%%$$%&'&&$#@$%$" !!"#%''&$#"  !"""$%%&&'&&%%$%&&%$$%&&''((())'&&''))'%"!!" #"!"#&*.//,)'&%%&%$%#!"#$#! ;;; !"$%&%#!"#$###!569:::79 !"##! "%m$#"!""!  !"!:7665565455656665433456543210.+)/<$&%%#""!  7666566 $&&'&%$""#$"!!"!"$$# 7& """  31122234345544431/./0/.-,+)&" $7(,,*'$! ;:::98754431.-0698655432234321233210/.012210121010//01001234544322101 +23321000123 223345654321,2221010/0113444321124568:;<;;:754344323444554334554555656533323676 +78778889889;===<;987888999897668989;<> !""!"! !""#$$#$$##"! =;:< ""! 673444566655433234345568:;::;>AC##"! =6/,)'&#'()+,-.022468<>???=="*,)'(,//.,'$#$%&(**))*)'$$$.#!$(,/0/.,-=8cAKSZ\UJD=dOC;40+!1*'&(,.05#(0>KV\`ci:AIOSSRTWZ^^aikfdb_\UMIJJIILNMMNORSROKHFDCEGFDCDFDCB@<99;;qf`^]^bkp9:<@A@@DIMHeB1W\q[tKMLLKIKJKLLLKLJIJ +IJJJIIIHHIJIHI HIIIHHHIIHHHGHIHGGGHHHIHGHIIHGGGHHHGGFGFFGHHGHGFGGFFFEFEFFFEEEFEEDEEFFFEEEDCCDCCDGJOV^jqtr¬c>?YCZm=@BDGIHFB@?BEFEEHKLMMJC=9mkjllkkkid^YY[`a`_`cn>DJPUVRLEBA???=BIIDCEHIHEDCB?uhaO3:($FCA? "$$$%&&&%##&-26=G*5APYb7<=>?8ZHAFVdj8==7ee7:5]QKRgBKMG<;CFEHLMKHHHILLMNJ@0C9C[@PUSLEA>957;=@ELRSW_cegfeflql]ND@BO[chhaVORYVIBER_`UKIMEH7OBN7INJEA:1PBCRh=CCA?>=<=?ACGJMQUVSMF>r=N`miP]Y/DAE%%%$$$#! !#$$%&%$$##$$$#"""! !"#"! !"!" #$%%%&''()++*)('&%$$#" !!! !  ! !! ! !#$%&%%$!  $'('%###$##"!! !!"""!"##$##"! 112$)+--,+*)(())('>&&&(((&%'''&'()('&#"%''%##%&(()('&&''(('''(()('%#""#&)+++***))( '((('''&$" D !"$&)*+*($  %'&$#! <;854557; ! !!"$&'(),.14451-**+,-../01h0+% 9$*-,,-,,+,,,+UQMKJJIGFECAABBCFHIIHIJJJFA??<5*"5-/59>CJMLJFEGHHHI&()***+,,**++**)*,,-//-++-...03454(%+-,+(''),$   + + + + + + + +   +  7 + !!""!  "#$&''()((('&&()'('&%$$#     + + !),-/12564553/+&1' "&-($ !%)*)'!  >95220,'&&$"%+25221/....,++./-,)''),,,.49<*;8642,& 7:?GQ\t 4 !48!bēʋaOFA>==<:8631/*&$$""%'*"   + +  + +  + +   + + +  + +  + + + +  +     +  + + +     + + + + + +  +    +   +   + + + +  +       +  +                 +  + + + + + + + + +       + + + + \ + + + :'-3:=7.)$8)!   !).1458 &+.211258;:*29"$%&('&$! "##"!#&'((%"4447899:951//1565456>:4 + iDGM4 ^Aſazƾ˿ܝ˺󈑖胒ƸŽÿ٠r2*$! !$(/5:BQ`mꌝǿ򀅊˽ݗӝƿꇙȿ򁅊߿バ Ź˒九}YƯ12445567889:;=<<<::99:::<===<<==<=???=<9765569:;=?A@=<<<;;<=>>>==?@@?>@BB@<76>=;:9:;=>><:740,*))+-0369:::;<>?@BCDDCB>;:;<<;:86420.,)((*,/110//.*'$"!]#$'*,---,,*)'&#DCEHO,2589::;;:8788530-PHDCDCCEHKP+./,QHA<978:=AEEECDDC@=:9:<:99;@CDCDDDFJ'(*+,-/13443334443320///134434i5556654310..ZVQMIEAABGLPSUTRPPRTTS*)*TSQONNMKKJIGGHHJKJHFDFHIKOPMMPRRSTTRNJGA:51//26ugLYck8998887887778989899988989898989:::99889:9:;:9:999:::9:9:;:;:; ::;;;::;;:;;;:; +<;;:;;;:::;<;<;<<;;<;<;<;<=>>=<<=>=<<===<=<= >==<=>>=<=>=>=>=>===>?>?>>=>G?> !""!  !"###$%%%$#"!! <:::< 78788877753345679:;:8778;?@@?@ !! =840,*(('&'(*-.0355679;@%.9AEA7.,-//.-*('''()*+++***+++***+/-"2,-.-,,-../C;]i_OE@@ADHGFDEC?:9;?ABCCB?<=@CC@>@ACDDEFHJJJKJKLKHHGB?CGEACINSVY^a_XOD9`[158:5UACZ:BFGGFFJMH@834;@A@@??@??>=?ABCB>:4Y^AT^ce]PHE=\>S:,&%%%$##$$%&''&&&'((''('&$$#$$""#$%$"!""##%&''()(()***++,,+)('('''(%#! $ !"###"""#"""#"""! !!  !!"$&&%%$#$$"  !"#"#$#$#"!"!  !!"$&()*+*++*('&&%&&''&&&'''&'''&'&&%$%&'&%$$$%&(+,*(('()*)))(&$""%()('''())(''&%%%$"  !"#$#!  !"##$$" ?>>=;:::965"$',03431-+***+++,./1231,($#$'+,--,,,++,-,VRNLKKJHHJIFC@ADEFEGHHHIHF=1*$522137:<>?CF$&&JII%'()+-..,*))**)*+,,-.-,--./;"&,02 + +  +   + +  +  + a !"#$#"   !#$%&(())***(()))(('$ !!!  + > + ")3$&),,--,*'&&(&$ 2+&$$#!!#%*)# # " f !"! 751,*'$#%).2344433455521000/-+*)('''(*++)('(+,-/0--02234541.-)$ !&/pΑτ怉 +   " K޸yeVPLKJHFB=73-)&$##%!#$$"   +     + +    + + + + +    + + +   + +  + + +  + + +    + + + + # + +  + + + + +  + + +     +    +  +  + + + +  +  + + + +   #  + + + +  +               +    + + + + + +  +     +  #$=D8+#  '5 %'&&(*-0688534:AFIIGGGFC>931.+)''(*,.000.,+))'%#!620.-+))+,,)'&.< >;98:=<="*29<84109ID.4 + + +   $)-./01-% !*!#" !'&)"&#%'('&#"!!""###" 33"$%$#  !!""$%%&&&''%$$$! #&$ !$(,/15763-%20, -8$&'&&),)#!"##"""!  !""!+.!-2572*&%!/!     + + +  + +    + + +     + +  +  + +    + +   + 3 /-+***))*,*'$!!#%&(*+,)" }~}~~}~}~}~}~}|||}}~~}~}~}~}~~}~}~}~}~}~}~}~}}~}~}}}~}~}~}~}~}~}~}~}~~~~~~~~~~}~}|}}}|||} ЄDaW򁇈p˻F@6!!NXa>q4텋zƿ猕ȼ8 IǽǸOĭŵɶL=2*%    $'/9FWp߅βȿ튊􀒡侱װӱ焩ʀˬ󎥯¥עP¡B%iMȯZ22234445421369<;:;<<;;=>?@@@?>?ADEEEDCCB@???@?=>ACDBA@@AAA??ABDED@<:;=@?;8537AHHFFH(.1.,,.12110/.-.0110/./0/.5-,++**+,.123321/00.---,++,,*'IGHJIGD>71,*,/13432112234 32210/..//12o111233345679:<88 !!""!!""#&)-/13589;:8778876789;940+'$##$%'*/369<>@@?>>>?@BCCBCCBAABB@@???@@?><:99::83,'$#""! "m >=?!""#$&),-*&$E"#FF$IJ(-011ZRJDB@==>@DH%''NLJEDEFGGH',.+OHB<77;<=@CFHJLLHECA>:6531258:=ADFFDB@?DK(+-/013444531/../01345542212234799741.,,,UQOOPUYYXXY[[YXXW?VUTS)SSQNMLKIEBADHJLLJIJJKJHFB??@@BEEFHE@80.02589uYgo9877789878899878988789 +88899988998 9998899889998998889898999898889::989::99:9::999::9:999:99:::99: ;;:::9::9:9: +;;::;;:::9:;;::99::;<;<;::;:; :;;;::;;;<<;::;;:::;=<;:;;<;<<<;<;<;<;<;<;<=>=>=>=<;;<=>=<==>===<=>=>=<=>>==>?>=>>>??>??===>=>???>>>vk]xtt:9+851-)'K%&'')+.2556655651+&"!=>A!"&,00*#$,38778767878889986312589874/*)*))('&'')*+,./010/.,,,*(''&$" <8531.,,,--..///149 !!##$$$###$$$%%&&''&%%%&&''$!  !##""! !"#$$$##$% $$$%%$%%%&%&'''&%%&'))*)&#!!"###" $')+-.,)&%$% &'(('$"###$$$#$$"!!"!  !"!:8889;"##"!! 66766756679 978: !! !#$#""#$$$#"!!"""! ;8766777666776655654334422334+6520.,**-7!##"""$!9.&"!"$&()*+-..-/6="$%$##" !$"6411467!!"###"! 545796200/./"0013662/.--,,,./000/,)%" "5')&#!8786556787677752(!$,466655432233433321232210122001221-0010/../1100011357::999:987799999866654333233222322110/01//0011234579:99765566544455565345266433344566655545677788787667775568:987655679989:;::;<::;::;<<;<<:987644456779:;;<=>>>? !!"!  >=<=> !! ! :7679:;:;<=>=<<;:;3<<= !!"""B<5.,,-.1469;=B%'(+-.-+**+,,---,)'(**+++,./025652)@8:>BEEA<6;M-YYO9*).369=!$*5>>>EKKC4-5?IRWZYWW[e79;?EKRVZ]ejjf_ZUNB93447<;75;GKE?BFE>fTF:855658:=;:BNRKBCSca]bgfc][ckhaZX_nUROLMKJJKLLLKKJJKKKJJKKJKKJJJKJIJIJKJJKJ IIIJJJIHHI!JIHHGHIHGGGFFFHHGGHIHGEFGHHHGFFGGHGHGFFGGFFGHGFFGGFG FFFGGFFFGFEFGGGFEEFGFFEFEFEFFGGFFEFFEDCCDCCDDFINU`j{PSRNJFCBBCEIMLGDC?vm^OJLSXVQPU[aee`ZTPNNR\n@@to;EMLIIIGEDCA@>>?@ABCEB:bMH]YUt\o8<.%#""" !!""!"%(*+**,--+'%"!$*5G*0.'">;:@'2>KQSPLGKa6\MUWJ?=Kd=FR\a[F76?ED@=:7445543e58n8<5M1<.5G.<=CLQQOLLLJJKLLJHEBAADHKMOOOPRS0QFiDT:+%%%&&&'())(&%%%&&')*)'&%$$###$%%%&'()*+*)'(*+*)**)))**+..-+)(() +((())(%#!  !"##""%&&&%$$###$$$&% $"! "#"""!"#"#"##"! /"$%$$%&''(''')*++, ++,+*)('(('&%&&%%%&&%%$$%%%&&&%&&'&%$$$%&()**))*)(()*)(((&$$#"%()('&%#"""##! !!! M#%%$" !$'))'%#"EFHJKF?6.07 $*.0/-+)'')*++,.021/*&&'*,,+++,:+*RPMKJLMMKKLLHDCCDFGGILKHEB8';66642379=@CDE"#$&'&$%&(*+++,-..,+*+.-./../1221000122233  & ! + +  + + +  + A   + !! !  - #$%%&&'(())('&%&%$#"  +  0 +   !"(- ;6/)'&%##"$)1/,('P&'&  "$&((%"  #$$#"62/./3776798F75322211//.,*(%$%)+,,+*,--+)&$""$%%(*,-+'!#(-nȗ逇! +"e֞᷍~nf1.,+*(# (   3 +  +   + + +  + +  + + + +  + +  +   + + + + + +  + +  + +     + + + + + +  ( + + +    + + + + +  + +$ +  + +  + + +   %  + + +                 +  +    + +  +     + b ,/)    $)*%'.36750./4!$(,036:?BCA;85/&"%%" $-0)$%((#8.' *! %/2-&%0:625873/19ACEITc{N*9EB;3-)&%###$'(%##">91(&(,0/-,.269951-+)),2=$#?8$*+)('&%$###""#$$%&(&"7'!-2Z5_RG7A"! + + + + + +     "$$!+,',+ + !!  !#&'%%#,.&*,,-+'! !! "#$'++'&$!!'.572%!%%# C48 * $5""  $*..,***(()))(&%"!!#&'(((')+-,,-,%4  +   +  + + + + + + + + + + +     + + +  + + +   + + +   . + !#! + + :**)(')**))++($""#$&'*,,+)' }~}~}}}~}~}~~}}~}}~}~}~}~}~}|||}~~~~}~}~}~}~~}~}~}~}~}~}~}~}~}~}~~}}~}~}~}~}~}~}~}~}~}~}~}~~~~ ~~~}~~}~}|} .Y򀄆 R¸}?<71=HS^gH¾񀂂!ޅ#( ¤呒ȤȼLݼҼ>5/*(%" !#(/8ASdz􅌆ö턓佧‚õζĀǶꂉȼ𗵺oźѭkcʫ#2123234665322468:;;;:9::9889;=@BDCB@ ?@BCBABCBA$?@BDCBA@?>>@BA?==>?<:757;>@BCDFN.32/- ./0110//-,+++,-../01123413321//00/..-,,-.-..-,+*)(MIFA;61.-.//012223343322123432 1114679;<: !"#$(08>?<:;61.--+*-26999850+&%&()*+-/1478:;=>@@?>>>=;;=?@@>>>??@@?>>?#><72/,(%#$%%$#">96310/06 !#$##$&'(&%&(+/5:<;951-SMID>858!"#$%&%%LLJIJLOS,-./.,NC8336:?DHLPQRTRONLJGB=9:>?@CJ)+,-.//-)LM)-25667776799754210//.--/124678876530XPMNQUY[]\[Z XUTTVXWVX-+SQ*TXZZYVSPLLKIHGGIMPNJFB<7543111i[zMYcl9987878988777898989889998989898989:9899:989:9::99:9:;;:9:;:::9: 999:9:::;:;:;:;;::;:;;;:;;::;;;<<;;;:;::;;::;:;;<;;;:;::;<;;:;;<<;;;<<;;< ;;<<<==<;<;;<=<;<=<==<==<<=<=>==>=>==>=>==>?> ?>>>==>>?>===>>>= >vne[~?4@?=;8520.-.0356665431/-*)*)(&%#%),)%'/67889::;;;<<==?#@ !""##$$$#  !"##""!<;<<=   !!""!B@><;:9988667:= !!#%&&%%').3410/.-,+++*)))***,-.//..-,*)*+-07AKK>0%84115:BHGEBD6pQPzW>-D87=I+10))IRROOKDA>7YD6/,%:51.-/(16=D)2@MV]_^`fwEIHFPONNNMLKLKJKLKLKJKJIJIJKLKKKJIJJIHIJJJIIIJIIHHHIIHGHHIHGH IIIHGGHHHGHG FFGGGHHHGGGFGFGFEEFFFEEF EEEFFEFFFGGFEFEEFEFFEEFEnDCCCEFIMU\chostoiafsADHJKMMG?l]\fr?B>l]UND>?CJMOYo~{rmjlq>GKKHFGGEBBA@???AB?rfeH{KFKH}eVTWUJa7G?IRNB5-,--.-,+++*+)((('%%'+/.-.2:#/>EEJP]@DLNJJOVVPOTXXSONMG=;=A@6VO]8;97:??8c_\UPLC98B\ATWDfiFU1[[YX[\YRLGCABDEDBAABEHIFDFJLOTWXXTHrR:V>/'%&'&$$$#$&&'''&&%$#"!!""#$%&'()((''&%$#" +###""##$$$%&'())+#***+++*('%%$$###  "$&&&%$%&'&%%$$#"!"#$%%%%$""!!!  %'&#""#$&'()))(()))*+**))('&'''&%$$$##$$$%$##$%$#$%&')**)('((()(())(&$$%'&%$$#! ! +"$%$!!#"""!#&)*)**)'%$%'))(&#! #&)*)u***+,,-/130+&#"%)+++,,+,,++VTQOLHFIMNMLLLKHFDDFFFHKOPNE4"5356889:4003420011.(!!&(&"&.4422/*(% 1#$.48767;7E)-..biy‡  tyn^J>?C#%())*+("8/.4<#$!80,(# "&+,-2?IGB>;;>>?@?>?BEEDBABEEFGECBA?=98:=>?@A@>=>?@@AABCFGFIV4851^\\\...///./00/.- ..--/0001113544321012344310/.//.--,,,---,++)'%HE?80+*,.11002344433322233454212320//010/023466898 ! = ""#"$',49<;::8520.,)')-0357889840+&$/$&(*,./..147:<=>=<<:889;>@@?>=<<<=>@A@@@A@=60*%!W""#$$$">93,(()**,.26:?!"$&),/1456654320ZW+*OJH%&'&&$ !##"!"$$$%'*-/0111000.Y,W*RNN+-,+=**+**)(MKMN'()**(NJFEEDBBCEFDCB@@D&*045567655578899874100100121///ZPJECGOW[\\[\]]\[ZXXWVVVWXY- .-YWX]_^/0^[ZYZ.000^\XSMJMPOJ@7cda[m878789878878989898788998989888988898989 +88899888989:9:989:99:9:9:9:9:9:9:;: ;:::;;:;;:;:;:;:;:;::;;:;;;::;<;<<<;;;<;<;;<<<=<;;<<;<=<;<=<;<==<<<=>>===<<=> =>>?>>===>===>=>>>===>==>==>?>>?>??@?>?>=>ztij_`e44322210111220/-**+,.10+$A%-7>A?=<=>?>==<;97K67754678976521.*(''')+--,+++,,,/2-#:730../246:=;977767; """ !#%&'(((&% #!!!"""!"##$ %$#"!""##""#$%%$$%%%$#$&'('&%#"""#%'((('% +$!  $),+*)))'&''%$&''&%$#$$$%'&%$#%'(('# a;:87656797779;:99986459975459 9548!###" !#""!""##""#" >>?>=;85554234567645455664332/,*)*+*((*,-,+(%#"9#&*1761*%%).365444322233213 !  "$%$#"!!!  75320/+011100//00/.-.///.,*))(&#"+@''$ 888754567678876677752-*.9:6554 334211233210101012 +11222122210123345678898864544344344543 212111002210///00134566543344455543334456654543443344333433655455666765665$666767667667789::9::9:;::;:999889::98 988999:977988788999:<;;;<=>?!"#"#!  !"##"! ;;;!) 8998889:::;==<;:<!!! !###"!""!"!9&:R21RFC?:631/.../0/-,++**+**+--.03446>'%(*)(''&&'''&&&'(('$#! $3J167EWa8KRF>>7WIMT\37:=>>?DJPU[cjki_ES0J-B_;FMMJGHID>=ADDB??ADFEFFA92VJMXM:57>N[[SSZb_\al:9eULIQ`e^UMJLNQT\a37;?><97679'%%'$"!!!  3,(&&+169;;<<<;;;98665667771879=?= ;8665;:96336785/*Vcހ# +   EIͥyaZV)&#! "$#!!!#$##"!!! !!!      + + + + + + +   + + +  + +  + + + + +     +          + + + +  +         + + + + +        + + +   +   + +  +            + + + + +    + + + +  -$ #$  +$#!,6;90$)0,"".:"(,3:?FC:52.-,,-/00-**.4887667763.*'&%#?9/)+-,'%')(&'(,1/,''3#,145:===; 6gl{†'  +|eO?7<&-11/+'$!3.'$+5:8579:;>CECC$&%$$&)*)('%#?=;:  +   + + + + + +    + + +  + + + + + +  + +   + + H 0///.,,*'%%*---+*(&$#"!!#$$&)+)  + + }~}~}~}~}~}}~~}}}~}~}~}}}~}~}~}~}~}~}|||}}~~~}~}~}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~~}~~~~~~~~}|} R逇F÷?<7/ KU]cC݁,ľˮ倡؄fĪƻk`VKA90)%"   $/Ѻ-+5567899875568999888:;==<;:;<<===>AB@<:;>@A@ABCCB@?@@?=;;:9:<=>?@ACBBCCDEFGHIKMLIIJPY252^YXXXY,,--..00010.../0//0...00012210///00//.-...///.-,+*)(&%HC=720//01244332223s2110/011011000123567 !"##?:"(,038<>><83,((+-/024678:<;;:8641-*(()*++,/257789;<>??@?<:9789:9752.-,+(&&&(*,++-1356753.&<301134678::988:>"&+2542110.,+-/0.,*)POM')**)(&#"CD#%(+++,.255432343a\\^012234555310012210//-,++**))*,..,*PMKKI@9620.17C).11-0123457753212579:;;;:86421/XPHDCEK)-02321_]\]0-VSRQTX.--./][YZZZ[\[[ZZYY\]\[XRMKJIJ HHJWuK\ir8878987878778887789898988989898998889898988999:::9::99:999:9:9:999:::9:9:;:9:;:;: 99::;::;;;:;:;:;;::;;;<<<;;<<;<<;<<;<<;;<<;;;<;;<;<;<;;:;;;<=<=<=<= >>===>===>>>=<<=<==>=>=>==>>>=>??>??>==>??>?>?>?>?>>?>=>>=uneZ|oie0.-#.0134322210010/,'!#(.48;<;:99:<=<<=E<;;:96456777641/035444310/.+'" !#$%%%$%&(,.*":530/1367779;986569 !"#$#"!#$%%$A#"###""!"""!"#$%$%%&&%&&%$#"$&((''((&#""##%')*)'&%$"! "'+,,+*)(''('&$"!"#$$%%$$$%&('$! !;< 987869889;""!89:;:88657:;987568<:;!""! :9::;= =;952268::;:9986667877643455545568:96431220/./...,)%#"$&()'(,01+0-*,1310135777 !  #&&%#"!"!35432211000//./0233211/-,,,-.///-+**(%#%5#&$" 65676$7788766542//5<8654443222101222100010 11100111001210110 1112234579 896554 332234333444323322212233211000111233454345434445677787655665544454333456667667678778887789998889:;;:9877889:9888777667789"::;<<< !"#$$#"  !"###"!  ;<<:0;=>=<;;==<>DPUJ=2-+,-/112321/.,))*-4>LUWVK>85.($#""!| 5-$!&/7=?@><$8^AGFFHIJKLLLIECBoS=6D[8FUZOEGMPMIGHLONMKHFGFC?;?JOJC@><:7e]\]YRNKC<;=<;>IZfijkms~DKQUY^edab`\YUUSPONMLKKLMLKLKJKLLKJKJJKLKKJJJLLKKLLKJJKJIJIIIHHIHIHIHIHGHIHGFGHGGGHHGHHGFFFGFGFGFGFGF +EEFFFEFFEEF EFEFFFEEEDDEFFEEDCCBBCEKRY_^\`fl8=@DHKLMLJGDB?;7h`Z[chmpr>FHJPXYUQLB:?IOPPNKGC?<=?GdHVXSMD?BJNIAysfO9[RNPWXW_=vW58& "##%&')*)'$##"!!"#"""!! !):,6=J\6GPTYVONNIEGJLQW[[]_XKADNUN:*L+28>>3'"'5BD<6:GRTUTTVWYY\a]QJS3:?DGD<89@IIDA?<;<=?@@@ABCFLQTWYUOLNQNCjL1@0)&%&'&%%&(('&%$$$%%$##%%&&() (('''&&%$#"! "!!"$%&'()+,-/0/+()-/001110-+(%#"!  !"!!"#$&('&%##"#$#""!"#$ ##!10/! !! !#$%&&&'(()(()+++*(('''&%%%&%%%$#"#$$##$&'&%$#$%$#"!!"#%&&%&'&&%$%&%H$#"!"#$&&%$"!  !#%&$###%&')*('&''((()() *+,-,)%! #')()SSRPMMNKGA@EMRSRQNIC?>?!AEG?.0169<<:889:= """!  "$%')**+,.013444320/.///1210//14  !"$$"#$)0632333  + + + +i + + +  +   #"!  !"!  M  + + +  + ,+* !""!#$%%E@?? (&%$#$!"#$%$$#! 5.(%%', <:9;41/037<;;;<==>><::99;+:6332357779AOs +H Yͬ٩iYP$"    #!!      +    + + + + +  + + + + + +  +   +   +   # + +   +  + + + +      + +  +    + +   + + +   + +    +     + +                + + +   + + + ) +  ! + %**(  + + + +  +  6(,+,///0112/,+*@+&6$.8:0((-0/--146542.,.-+'$&-0-(&%$#!<66972..)$#$" )8A@>@DKW2#:?AGP[dk +-{i]UKD !!#&'((('%#! 51-/48==="&'(,121/,% #)-.-+)'%"!!#(;,685/(%(-0,'HD;,.(&(++,5'M5  + + + + + $. %)%4*-1640 !+?=<;:=<975420/147:<;::;;<=;97557972.+&CD%*./-++,/248;<<;;==<975552-&302579:;<<;;977<#'+047:<;;854323531/ZTOMKHFJ)++*MFF&*,.00159?@:3Cacee^UTVVX[.02310.,+,.134320/0/.//.---..-,+*RME@><758@J+/10//0135554!57899::;:986420UG:24AR046543a^].01.WNGLU.-YXY\./11_\\^//^][ZYZYWURQSRPPQOKJOYd}M^l977678878 777877889898789:9989988987789899989888998988899:989 :9:99:;:::9:9989::9:9:9:::999:9 +:::9989:;;:9:::;;:::9::;:::;;:;:;<;:;<;<;<;<<<;;<<;<<<;;;<;<<===<;<;;<<<===<<<==>==<=>=<=>>===<<===>==>>=<<=>?>>>= >??>>>===>=>?>>>=>?>??>>?@?@?>5???>>>wm`wlgb`0234555666542000.)%!"',026<<=>=<;<:8762..012210.,-/1232111/---)$!=;;<835;!%&!921222468877987! !"#""#% +$"!!""##$$#$")#$$%%%$$#"$''&%%$#$%&()('&%# "&())'&$"! #'+,,++*(''&'&%%%$#""!""! "##"#%&''('# _ ! 87789:  9"%(('# <;98997788:<<98988877679???>=<<==<<;97532336899:;;;::9667653456 5320///.02.468999741-++**)))*,-.,+,.022./28;= !!  "$&%%%#" 5455653210//...01-00//..//./10.-+'" (:%%" 755654556644665444567654554541--4>8534421 222111001112 10//01//0//01211121 001245678988987766433211221123223'44334421344320/1221//12112344454455432232344554 567899:<:988767888765564443456678766556776679987 +99:99899889:9 88778998756766789:99:; !"#""!"!"$%&%#"!  !"!!! _9 <;<>?>:99:>?@>;:?FLLGBBB>6_YVOLOPQONORUX\\dwWTKGIMMKJKLLMMMLMMLLMMNMLLMMLLKLKKKLKL KLLLKKKLLJJJLKJKLKJIJKLKKJJIJJJIIJJJIJI(JJJIIIJJIIIJJIHHHIIJIHGGHHIIIHHIIHIHHGGGHIHGGFFGH +GGGFGGHGFFGFGGGFFFGFFGFGFFFEFEFFFEEFGFEFEFEFEDDEFEDDCCDEEDDBABFLVYPKN[7=BFILOSVUOG=3TEM`:BEGHJLMOQPPMJJNQSRPONKGEEECETqFIC?@CyfYM?2SF:2)##(62hJOk[XKX]9--+*)'%$###"""#$$#"!""#$#"!"+6C'@8KI<87kg\RZ9CGD@CIJIC6RT7GPTPIB<61.)#J8Rfl9;;;=A:UFR37kcZSNF@L6IQNJGC?==?BDEDCF$IJHGIKKIF?7f9>;j\J3B-&&()*))(&$$%&''&'''((''%$##$%%&&'()*())('&%$##""!!! "$&&%%%&%%'(*-//./134432/*&$##!""!"$%&'()('&%%%&'&%$$%$#"#"!.*+"$#  !$&&')*)(&$#$&&&%%$$$%&'&%$"!"$&&$#""$%&&&%%&&%&'''&%%#""$'(('('%&&%%%$####$#$%%&&%#"  ! !"#" "%'&%%&'_()))''())((()))*++**($""%(('()))TSPNMLKHB;:,<0023369:;;989;>@BB""#%%&&&'*,./.-./0123234332210 /12322235  #%$##$%&',! 86   + + + + + +  + +  -  %'('%! !! 2 !"!  >   #$$##"""$"72.+)&%'$"')&"CGIID><=>>> (% " !"$$$%&&%#!0%%3#$#"!?=;4.*.4<;;= ><<> !@?><<>=;<=#<866679;>>AETmȉ鈎 !    %$弓١j]QJ"!  "%$"!"1!     +    + + + + + + +  +  + +    + + +   + + + +  + + +  +        + + + +     + +   + + +      +              + + + + + + + +     +)6(,(%    $) + + x + + +  "F[\O:/+&?62/&%:&)++**-277301220-+)('())'%(-341.,,*$>;:401120/-/5;DKWlt„ŅĄ Ç"^=w^F96: #%'')*-/0.(#)"-"$$%'()+---,*)*+,,++*(&%%%#$-A*-)''(H<5-#)! ?04ZC;<35. + + + +^  +,-#63,',$'% *9=2%%#- +  "$%&"'**%" #/6 >!)!&3/,'%  '/-)'$" !$&'%%'**('&'''$ 2 70&  + + + +  + + +  +  +  + +  + +  + +    +  + + +     + + @ 220-+)'$%)+*'$!!  }~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~~}~}~}~}~~}~}~}~}~}~}~}~}~}~}~}~~~}~~~~~~~~~~}~~}|} ֵ|/@IGB<5  !MXbh0ÿxȼ%Ճ؂Řι񃓥û|wrkd\SNFA82/+'%$$!  : &2?Lꃓ񀉖ʵְ҇䷚ş퇁󀌏ƿ𚈔ģҸ˽񉧺ɺ숌𕦪Ӹߴwƾ "q4556678"9;==<<<;:;<=>?>>>???>==?ADEDCBBBABCDCCCBA?=<;;=@CDCBAACDCBCEHHHIJ KJKMT08;95210/0.Y.012210/.---..-,+*,.1334565420.-./00/..---,++,.---,+*)('LF:*"',/0122211223223222101+24689:"'+1799:<;853332.-./0/147::9:;<<;:98677558:;>@BBBAABCB>:7310 //./011258::;:;;;:74/(!60/..034443458 #%')-00123478864331`[WSNIGHLS-022/*D6=<=>=>=<= <<=>==>>>= >>=>==>>>=>>?>>=>=> ==>?>>>??>>>?>?@?>? >?@@@?>>???>?'>xqi\ur9:<>?@?><976531*!9<#+01358;<;98\77787520121110//00/0010./0123321000/-+&">==:3-**+.389:;95348754455568!! !"#$%%$%$# "!"##$$%$$$% $"! !#$%&%$9%&&%$$%%$%''((''&&$#$&'''&#" !%)+,+++**)***)&##$&&$#"  !"!!! !"$'(('$#""!  "$&&$#$&'&&%$%%&&&'('(('%#"""#3" <;<<;987656898547:=<97766577887544334544554320.K-./0/0135789:==;720/.,+,./.+)(&%%%# $+156679 !""  "#&''&&&# e4335642210010///.../.--.../13431.,)%!&6#$# 756665444555654334556776655565443332/,,5;753210012110/001233210101222344566555654321 +00112332123443321//00111245667655543322233345444545556778789987886644433454567877667 654456788778: +;::9::;;::9988767678:;:;; !"#$$%&&$" <; ! + "###"!:9:<>><:9527J9T7@B?5+ID?9631/../1334556567677630/0220)! "##""#$$$%&&&%%%&&&%$##"<1*,6=:4#JLoys_KB;6ec``5?KU\\TJEFIIE@<96566e]VSRQNLOQOICCFB<:407GeLhikigfded`ZVSPNMMLKLLMNMMLLMLMNMLKKLLLKLKKKLKJKKKJJJK +JKKJIIJJIIJIJIHIIJJIJIIHHIJIHIIHIIIHIIJIHGHGHGFG FFFGHHHGFFGHGFGGFFEEFEEFFGFEFEEFEFFFEEFEDEDEBDDCEFD>:8:AFGGEC?;;=>?CIMOPPOONMKHFEDCA2=:8:<8aNFHOPJ=41.,:9`DL~FRSHu\G;dQB4P?.%"""#$$#""#$%&''&$'BAe;7f6;==@CEEFJNRVY\ZTL?9>JSMe6*-5@P\[\fqhQ=3.(L)18?Mbg`Z^i;??;dQC93-*+.28?HOSOE?BHVg;GPNE9[JDJZ562`UFD\>FGECHOOGA>==@EJLORPNKIHHHIKKJID=g]_a^Q@@ACCCD""! V!"#"""! +)&"!  !# !!! 853321!""##"!! "98 !!!"###"B?>==?B"!! @<878::8?K_} ! = +   ?̨na-,,+*)(&#   !#""!  #    +  + +  + + + +  + + +  +   + +  +  +   + +     ++          + + + +   + +  +  +     + +  +     +               + + + +  +  + + )       + + + o + +   $+DJD7+%!:989!(/4871+&'**(%"! !!=977873121,'%',+&$'9VuE„ÆB„M ;xdYROM# "%&&%%&%!!$%&%#! !#'*+,,++**(&$$##""#$"  1%"$''#8*0SJ)22,E4' 7,#'  + + + + + +7!7!""$%&(*+.0/-'$+(/)1128?9+ (694028 "#!7+" $((# !(2&.-&,!)0(*%'%$'-.($! !"%')+-,*'&%%&&(('&$4.132) +  + +  + + + + + +   +     + +  + +   +       )&(/,))*(&#!&(%""#!! }~}~}~}~}~}~}~}~}~}~}~}~~}~}~}~}~}~~}~}~}~}~}~}}~}~}}~~}~}~}~}~~}~~~~~~~~~~}~}~}|} ͭ􈘜d)˸NH=4-  HJ\h܂_'oſtQL腃龦ƅ¿D{l[J?9/)&$#  !&2AS]͂䆒兔Ŵ񀂀ϊ̶嬈ߖ̷㍹ק扫ѳ쳓쒱钴$Λ,00135788878:=?@@AA@>==?@??AA@@BBDGGFDBBCKBABBAACEDA?=<=?@ABCDCBCDCBBBAACEHJLKKMU39;:874fb`][ZXVW-/010010.,+++**++,-.0#11/..//0121/.//000.--./0//.-,,+++,+*)J;* *3420./0111212443234432101.248;"&,167420/.-+,.1245652.-/25677789:97555432)1355689;99:>@@AB@=;:;::<==><955679:<>>=:87P52-(!3*'&'*.1221014:"#$$&())**,---./0/XQPQSUTQOPQS08<:1K98CL'-367864530YUVVUVWWVRTNJO,2688668;>@?<:85210.--...-,*MEEHJLNQ**+-/2566544579=?><83122100//_]VPOOTZ./1345A654310//112332211234687543dd3334321a^\ZZVOIFGHEFPc~^inop98667788788898 +988877898787878998789899888987778887898989:::988899:9::988999::99::9:9 +88999:99::9:::9:::9:999:9:99:::;:9:;;: ;;:;;;:;;;::;:;:; +:9:;;;<;;<;<;<;< ;:;<<;;::;<;;<;<<;<;<;;;<;;<;=; <<===<==<<<=<=>==<<;<<=>=<<=>=>>=>>>==>===>>=>??>>>=>=>?>?>?>>??>?@?@@???@?>|xgv>EHIFC>;841,&"<40..2:!%(+.121123332343223323445443334320/013665322210/.-)%%%>-%$"$)-3: 5215:87654334433347  !""###$%$$$#"#$$$#7$#! !"%%%###"$%%&&&%$$#"#&)*)'%%%''%#$$"! !&)+*))('&%$$%&&%$#$#"!"!  !#%&'%#! 7 !"""$%$%%$"#%&&%""$'(('&%%&''(*+*)))(%""!!""! 93/29==<<:61037:;96554445665432013556531/.--+*+-/0001123568: >:630.,+*(&#"!! !! #-2221125!""! !"$&(&!71.---./158741/.-,,,+.,-./0110.+++)('$-D$!:65445566544321334667656677754420-+-6:98643332112332233233444567554332910//0110122122212221233223221012110/./01001112210011001102100///01101333323443 +222356778765656787778 887576889988::865667999;  ! 9865556665457 8779::;;;:99:;=!"""!!!"""! <<<:989 -;742359<=<:; "$%#!$.D^60LA??<731123454456455444:L3;7T=-$#$#o"$%&'((&%$$#"""###$$$%&&&'&%%%$">8788$K?LTZ]][WUTUTPKHIJIGHKJF@;:73_VPJFECEGJNMC8gzGKQf|rz~{maZVROMMMKJHHIJKMMMLLLKLMNNMMMNMMMNNNMNNNMMLLLML +KKLMMMLMMML MLKKLLLKKJJKLKJKKKJJKJIJIIIJJJIJIHIHIHIHIHGGHIHHIIHHIHIIHHGGGFFFGGGFGHHHGGGFGHGFGHHGFGFFGGGFEEFEFEFFFEFEDDEEEDDEDEFEEDEEDpEFFFEDDCBBBCEKRYVMe}HJHEBBDEFDC?;;;8787cWQ[9BILNNOMGBACCBCDB>7]NCBB?;>DLRUX_21-3Q>KD?EOSPJ~nlw~tdTA]L9M3% !"#$$%&&%&''())&# &-C<^COKECCGLOQRUUSOIC>;=BDAiSKD;48FOPH4II-=OP;K7>,AWfki7@JFA<:8lid_^ZM>35>KWe6[;*3[@JQSJ5D&C=::;>@@?>?BFHJKNSXYY\_\VTVWOG@d&('KJILN(RRQONOPMJHGGF5JNMC<<<;;8/E73336778:<<==>??!#$%%&''&$#$%&(())*+,-./01344454555677643112220$.!""$+!###!<964321// +  + + + + + + +  + +   !!!$&'(('%"!!"!"$%$$#! !!"! +  +  64357:;:8779!'(%)$+ "$$##$":99:;<<<:::A950-0 #$$#""%'''%" % "##%'!%()(%"=<832147"###$$%%$"!  !!!"! "#%&''&$#DE$)#"!BBB>>=:6469>E[ ,# "   >Ԡٖs77853.($ - + +   +    +  + + + + + +  + + + + + + + +  + + +   +  + + + + + + + + + + + + +  + +   + +    +     + + +   +   +  +  +   + + +  +    +                 + + +  + +   + + +  '    ! + + + _ '#+15899766641,**+)'(*(%!941,(%%)07=;0&G\>??><<>?@A@>=??>?CDCCCBBCDDEFFGFFEEDCBBA%@?@A@ABBA??>>@CEFHL,4;>==;963c^]]\YY-.//.-+*+**U+,...--.//0/../0///0121//./111/.-+**)J**)NA1''0;EHFC?:51.---/1122211221/.,++-.28< $),/121-(&')+-/246888640/24566543211101233223248;<;::9;< ;;:864358:;<=;:977897/%;2//1232235:> !"$&%$&&''()*++,-./131XQRV[d7:973_WK?66@Q168731/\ZVTRPNOQRTVXWVTQOOS-11-)O(,.00121-)'&%II&(+/00.+NGFKNQ*#TSST**,.012469>BGHC<769<<;:;;;:853356778 755432/XTV[04577543221a``aabb``_]ZWSOMNT\iyP]ip87877787787878787789878878789878889 89888999898999889 +88898889989:98999889:9:9:9:9: 999::99:9:9:;::;:;:;:;:;:;<;<<;;;:;<;<;<<;;<=<;<==<<= <<<==>>>==<=>=<<=>=>=> =>>=>>===>=>=>=>=>=>???>>>?@?>>>??>??>?>?>?@AA@?@?1>?>==>q`y_RNPS(&#!?>>;::83,*0="#%),/2543211/,.24545665<4311257:::866652/-+)'%$!7.*'%(.6::8656678630/1233322489 !!"#"+##""###%&$#!!!"$$%&%$#"!#$#"#$$$%'('%$""$%&' &&&')'$#%%#!* !$(+,,*(')+*'&&%&&'''&%$$%%$###"! ! , #$%&())%#!!  = "$"! #%%%$$$""#$%$$%%''&'*,+*)('&$"""! 9621368999:950-.3676543321222332000.,+***,./011234457:97650*&$#! "$%!'('&'()+.///.-,,)%! !"$'*.13476677640-,+*))*+-.//-,+*))((&# +?!=975556544421135654334454 31,%!-9743567766543211210100/010!112210//00112100011100112211122123443321121112322124421112322334556788776567799:99:::;:8778898778877888789:;;;;< !! :9876654334 55666567787789::;;<== % !! <:9878:< !"""$,?Z9FMJ>.A523455656654334669BV31VKHF<-%#$%&'''())*,-..0/.+)'%$#!!!"$%%&'(((''()))(&"!6@qDEC|oc[UQMG?:6557:;hVYo\uJIILTZXURQQOMKJKLLLMNMLLLMNMNOONNMNNMMLMMLLLKKLMMLLKKJJKLLKKJJKKKLKJKJKJIJJJKKKJJJKKJI JJJIIIJJJI HHHIIIHHHIIJIHGGGHHHIHGHGHGHHGGHHGHG FEFGHHGGGFGFFEEEDDDEFEFFFEEFEFEEEDEDEDEDEDiEFINV_hlpv|?@BFGEB>:647;=<;95bb58:@DFEDCCEFEB@?=8f\PD91245559:54JM=@==@AABDAyv|ELQVTMn[NyU_8'$#%'()('&'(('&%#"#2+AQ_;FIMOONQVVPMNOML]b>^QHA>;5-'*?^m^D33:>@A=,?>J3GYb3564fda^XWZ`ddYI?=A?8/+,04;GU]SB2(%+258>CHKG<5109O7=<<==?BCCCB?=<;;<=>AHOQNFBCFIIHE>bL8M5++,++*)*+,-,,,- ,,,-..0134686531.,*(*+-. -,***,---,,-./ +0.-+)'&%$%&%$##"#$&)+./.-+)'&%%$%%%$$$# +"!!$&%""&)*++*)'%& '''&%$%&&%$$%$$##"!!"#&"""!"$$$###"""###$$#$$%$##"!! !"#$&&&%$##$$#"##! !!  !""#%'**(%$%%&''),.+%#$&'''ML&'((&$?22 ()MKKKMO()RONOPPPNH@98>FNVZ\XRPLC4I600259:9:;===<=?AB!"$%&'((&'(*++*++,.00123234589;::9889975643 /!$ #$$$"!;867753+# + + + +'   +  /!$$$""!"#$$%&&%$#" !""#$#"!   + +  <79=@E'+*'"=6,# '4!$&%#"!A?<987668:<<==<85223 *$$'#"%(*+++,"&*.0+&##%'(('())N('$""###$%&%&'&%$$###!7359"$$##%&%$$%$#""!BACDCDFECBCDBAABGSeٌ.5 +  9!W۬wVHB=7   +     + + + + + + + + + + + + + + +  +  +     + + + + + +  + + +  + + +  +  + +   +   + +    + + + + + +   +   + + + + + +  +  + + +  +  + +  +  + +  +  +      + +               +   +   + + +  -"&# 5  ''  + +  + + +  E &L].-+OD;632/+%" !""#%$869<;961/[Xp՗Ƅ<…ń( $  v{rha,(%')'$!10 #%%%$##$#!!! 50)"$*#$""$%$&)'GEI).3771XTTPD:2M43 + + | + + )2!')+++*+/0+(()'&1IN9#4,%"5=2!!$"!,252/-++.3770%'-)!"!'! "##$$! %*,*%""%''%$ 4& + + + + +  + + +  +  + + + +  + + +   +  + + +     + + + + +    7 )( )())*++('&$ #),-+))'""}~}~}~}~}~}~}~}~}~}~}~}~}~}~~}~}~}~~}~}~}~}~}~}~}~~~}}}~}}~}~}~}~}~~~~}~~~~~~}~}}}~~~}~}|} tݿS2URNF:1 +  +ENS y˺چ$Ȯ^܋λǻC:0(# &1D_􃈎Րꪏ仕νʠ𼭕ɸ߃ᶓͦȦǤĿ]jqѨ˱¿7641..15788620147;;:9;:>CFGFFFDCCFGFDB?=?BDEEDCABCBA?>>@@??AEHJK)1679;;;:9:853eb]ZYZ- +./..00/-,,-,-q..0111000/../0120-+-00/-,,*))())S*,TA,&.=HKJIGDA?<73.+))*-/01110/.,++,.038=!%,485.'" $')+./024455442000111001100/011245789;<;<=>>?>>?><951/37:<<<=<;:9877640-("3121027; !"#!!"$$$&(*,-..//0110135jihg3f35fP;5=K-1223da]ZYYZZZXWWYYXTRSUVVSNGBDJQQG:7@%)-.,**)'%%&'(*-24552,KGJL'RV+,,VSSTUVWWY\/1469;;88:<=?=:9879;;84479:;:98650NEHS]1346679842&34432/XRKJLPT\hT_efkn777678878877888787788877678987776677878988898989898989898989889:98989:9:9:9 ::999::;;:9:::99:;;<;;;:;:;:;:;::;::; <;;;::;;;<=<<;<;<<<;;<<<;<<<;;<;<=<<;;<;;<<;;<=<;<= <<<==>>===>>>=<=>=>==<=>?>=>=>=>?>>==>? >>???>>???@?>?>?@?H@@ykXfQKHD>8415G*(#:24?%)+,,,.1332210.-/3678:;<:876655655445:>??>=<==:40$/-)#>6-&$)154323455420//12235689  !"##$%$##$ %$#"!!!#$%$#"#$%''%#"##$%&())(&&')**)*,+'# :!! %),,+)(())(&$##$%&')*)&$#""###"!"##!   "$%&'**&"!!! * ! ;!$%#!!##$''%$#""#$%&%#""$&*++*)*(&$"""! %93135689:9960/134676764234201110//021/000.*)*+,.0210012457300122,$ #&%#"#" !" ! !!""#$$"  #(-//1346787424576+442.+(&%&()*)(+-.00100.*())*((&%$" #-:<9877654222334343*2343332/,.49;43345553322211100121124 96533210111/0/.//0111/010/.//0012110../023442%32221122112112123334433223444568876555668Z7789<;9865689:97676667;86556643233567788::99:<;:8889:;= ;:8878754534556667899:;;<=<<<;:;;;::<=>>= *F37Y>0--/256545n656776566659>AEJMB1#1 "#"!!!"! 4/+*))*-/025#%(,4BT?ctcH7^Z^367643hfggaVOMJFA?@DMX`kPQ!PONMMNNMONNNMMMNMMNNNONMLLMLLMMLLM NNNONNMMMNNNONMNNNMMLLMLLMMMLKLMLKLKLKLKKKLKLMLMLKJIIJIIJKKKJIIJIIIHIJIHIJIHHIJJJIIHHGHIIHIIHHIIIJHIHGHIIHGHHHIIHIIHHGGHIHHGGHHGHGHGFGHGGHGFEFGFEFEEFGGFFEFEFEDEDEDCCDE DDEEDCCDDDCCDEDCCBBBCGP]jmmpr:;<<==>>=;;=ACA?<7_Yd:>@AEHIIFC@>=;pi_XVXY`^>C2QSRPMOSSNGEJWuFzl`\YBO98C-@SlIS\bQb?/$1)1F5FNU]/TD>EW7@FE@7V>,EBG%%(.1>Z74M93/+(,6GUXWSLA0""5Oe7878CHNQRTVVTTWZZO>*90/259:;=<;879<<= "###&('&%$%&),--./02211442111010//16:<:766545  ( ""!"##!<96433 3'( +  + + + + # +  +  !#%&&''( )**)'$!#$#!  s  + + + + "%LMLK$E"#@. #/ !!!BA??@CDDECA@AA?;99<<<92+'(,0.$ (%&).00.//025[ #%&&%&(*+,,)('()**($$&'((''&%%&%%$1+-6=!#$%&'(&$#""#$$$#" 9656;BL]y܅H&( +  j͙̈́TA6,#"  $%%&$#""   +   +  +  + + + + +  +      + + + + + +  ++ + + +  + +   + +    + +   +  + + +    +  + + + + +  +  + + + + +  + +       +              + + + + +      + + +  + + +  + + +     +  + + +    + O *!9D8&204!!"!!BABCA:40,*)%&+6Kd߀ɄȄƄ ĄH4[:~obXK!!"!Q !"! .*0!!"$%&$" 960-,-.44'.?#!737;@I*-SMIGKR\256eT673 + +  + +"032/++..)#"%-B(LC;534&,%'# +;*/5:/2 + %+41$ *"&&#,-% ),-,*" "/"'#"!#$"! !#""##!52/)  +  + +  +  + + + + + + +  +   +  + + +   + +  + +  + +    ` + %''($'&&)+..,)&&"#&&')**+,.0,#   +  }~}~}~~}~}~}~}~~}~}~}~}}~~~}~}~}~~}~}~}~~}~}~}}~}~}~}~}~}~}~}~}~}~}~~}~}~~~~~~~~~~~~~~~}~}~}~}|} N¿ㅔýMG@92q PY򄌎f>ɽIR􃄄öZꉦɺQK@3)$  #,:Kb͖Ͻՠ欍ֈȈӄձ𫛤ݲ烞􈓚ӹ˽󅅃-ţ໩þ…À¾5563002444676544552.-14689;=<=>#@BCA?>?@ADGHGGGDCDDEECBABEFFFGGECBAB7@ABFL''(,24556679987532210]YVU+,,,-..-,,--,+,--//-+*+,-0/0/-**-01100010.-*+*(OJC@@?>AEHHGEB?<:852/-)&%'(+-.--.01469 %-475/'!!$&''),./0012334432232/++-.0110012345567:<=<<=@BCDCAA?>?@ABB@<99;;::;;9::;:5.'" !"!228 $&%#""$%&''((('&'+.1210adffeccd1\ULIJNOMLMOPQTX[^^^][XUTTUUVVTSQOMKJJGCA@>7.*/@)/465443223348;<<;71.-,+)ONMOP>>=>=>>=>>?>=<=>>===>>>=>?>?>?>?>>?@?>?@??>>???@?@@A@@?e>!"!;;<;::99:::96689 :9899::987654420.,+056665 +6765544455432012332221.-2789455$86544687787656654432111010/0110/0/01221112333222124433212223367899777898 7679<<:767887654445544579876)54321223456789 !""! @?>>><99:<<;9766654323 467645787789< ;<<<<;::;;:99::;: !%+023345567@6777887667;C'-,OF@94,%###!645420.,*))*,-./012344384651-/9'6FWi:>?@ADFJLHA<;=?<6b\WURU[hx~W^YSQONNLLNNNMMNONMMNNNMLMNOPONMNNNMMNOOONNMMNNMMNML MNMMMLMMML +KKLMMLLKKKLKLLKLKLKJIJKJJIIJ KKJIIHIJIJIHHHIHIHIHIIHHIIIHIHIHGHGFGFGFFEFEFFEFEFFEEEDEDEDEDDEEDDEEDEDEDEDCCBACHOV[[frwrki4569;<>@CED>8fbdddfk7ib_`h9;;97jddgN2>>eup79;9753574\UVYXV^jnhcdlvFLNQRqdVJ?_@N3'$%'()*+,.//-,,-..*)1)K9FJIGILJHM_@F}okfdmsniThA568@Jb9:7dVH=4/7I]683Z^9ADEEDDCEIMOKE=6_`7==:7 5ggfefdT@/F5.,+*)())**+,-.-,*'&&&(*+,+*(&' ()))*++,./.../-,**)()(&%$$% '()++**)(''(''(((''('# #()('%%$$#"!*"#&),--,+*(''(**)(('&&&%%%&&&%%&&%$#"##$$#" ! "$$#""#"! !  !! 0 ! !#$$%&())(&$IKMLr''LI&$8./?$%HHJLNQQMIHGC?@>>AEFEFKQ*)QQPMLNQSQI>.A668;>>=<<=@C"#$%&'%##$#! "&*,,+-.//0///0.,+-///.-/12479986545566 + # 62// %! + 9 +    !"&)$*,-./-,+++,,.//,(%$$$#"##"!  + ]    !EGJLKHGH#?81..11.-.1347<@CDEFFEB@@??>=<;8741/.*&#! #$$#!,**+,./0/`13335678778999889; !#$%&&$"!  "#$#""$&('%#!>==AE#$%%%$###%%$#">856@Rs; + %J ҜnL9,   ! !""!  +     + + + $  + + +   +  + + + + + + + +  + + + + + +  +     +    + + + +  + + + +   + + % +  +   +  +                +  + + +  +  +  + + +  " +  Q&2>#%&&(*,./+'$#$%$ ;<;;:ALc~ׄȄ ƄDž*Ä ~[XYSH?: !## 412223640..43/15(";C=/+-0006@B=:;AHP-1256ZH@80*='* + +   % (**))*('(4%)G<:87=A>=06$-5 !4/3/   &4 "$%"/-381*!!,,.!)",0)#$34+#!.,."$&&%$#$')+)$ // 432132) + + + + + +  + + + + + +   + +   + + +  + + + + + + +  [ + #$$%%')**))%"%&(+-//,)&#!&''&%$&)+,)"  + +   }~}~}~}~}~}~}~}~}~~}~}~}~~}~}~}~}~}~}~}~}~}~}~}~~}~}~~~~~~~~}~~}}~~}~}~}|} Qž2냉d􂈊ʼTH=3 !PW*S»¶IϰCǿЉŁžgTC4(# + '0;Lᄘ⹟킲ϡ鍕¾ǺѽФ䄙͑·ކ΋̴Ʊ逥»ڈ̇Tx򄍅̽ Ӆ/85323445533345678642/,**-02468999779:9;>AA@ABCDCIDCBAADGIIGEDGHD><>@CEFHJ&'())*-011247889::71\[[[ZXVTV-.-YXW,.21.+))*+SNO),Z*,15997668852110011000/.--,,-,+-/-'B;88=BEGGFDA?=<;;:961,(),--/367#,483+$!!$'()***+,-./1//1220-/245689:;;:999:;=>>=>@AaBBBDEEFFFECB@>===><7443-$ "$$$%&%# !##""#&'))('&%&+27::888655542b`]XROMJGEDGKNPQRUWXYZ[Z[_aaab`[WTQLFB>=CGE;47@&*/598654579;97543330,*OLLLNQW\./][YXZ\[Z[\][ZZ[/0/]\\[ZXUSTTSSRSY//.-VV-0]USW047755665653b^\XW[_bb_]gbjno76667877787776788878788787878787898987888989998898989898898789:99898898889 :999899:9989:99:9899:9:;:;:::;;:9:;;;:::99:;<;:;:9:;;:9:;;:;;:;:;<;<<::;:<=<=<<=<;;::;;< ===<;<===<=>>=<===<==>>=>=>=>??=<<=>>==>=>>=>=>=>??>?>??>>?>??>>>?>???@@? >>???@@@??@@@?@?@;A@?@??@@>>???@?qZ{SJLK$EBABAC#$%',231.,)()+../13331236887776M799741/046424564330(#""$(%6*%$)15520//24310/..03678763359   !#$#"""$##%%$ #""#$%%$" #&&%""#$%''%#$$$%$%&)*'# !%#'*+,,*'%$#$$##$$$##%&&'()'#!"$$#"!"! !##"!!"$')'#"!  ~!!!"!7768#%&'((('$!"&'&&'''((('(**)(&%$&**(%##"! !!"!998743/-.0//01112323310.-,-.-,,-/010///./0/.-,,*''((()+-../0245-8:998:=@@@"%'&$FC;64443.,/44.(" #)3>DI%&&()('('&$# $$$%%#!== !""!!!"! 5""!! @>=?@@>;874/-/7;:877764578866556653331110//.---,-,+)(('%$(/4669989:::9:;99<::976 788;87 887545432221210..010/.//021232 3  76676677654468$65333456677899889986556799:;;:8644323 4578!!! @AAB @?<;;< ;:98899986443343455568:;;::99:;:9;:9988::9887789989989;<<==:8 )/13345677789888768:999>J.53XD/$! !" 65666H4431/..-+***,-.0112334311233/-4,L7EOVYZWWYXWRG?:g]TQRRQNPV]ynibYPML MNNMMNOOONMMNNNMMNNMNNONMNMN MMMNNNONOOONOOONMMLLMMLMNNNMNMLKKLLLMLLLKKLLLKLMLKKLLKKKLLLKLMLKLLKKKJJKJKJ IIJJIJJKJI JKJIIJKJJKKJIJIHHHIIJJI HHIHIIJIIHHHIHIHGGHHHIHGHHHGGHGGHIIHIIHGHGGGFFGGGHGFFFGFEFGFEFGFFGFEEEFFEEFFFEFEFFFEDDEEEFEEDCDEEEDCDEDCCDDEEDCDCBBCCDGKQ\][ZYXWYc6897ZC6459@HMQRPPS_8BB<9<@@7Y0LjpS58P5:73a^]ZTNJGJWgfUKVaelx@CGHBvg]`qtTf66(()+.232/.-,+*)(&"!'6,N=QZRJ^{wg`cfgowx}Cm993=O9G@bOMMB:<8*!"(383.-15/,14,B?+@Ub`[Z[WLNb<;eWOJHHEB;6=IPU`45ga[TMKU9DECB=5^YVWZYX]358<@BCCBACINNLIIJJKKLMJFDEF=IKLLH>Y49)'*,,,+)'&&'(*,/2442/,***)(&%&(*+++,,+*)***)(&&%&'(()*+-01221100/..//.-,++*--*'$"#')('()+++)''((''('*&""'(***)(('&%%$#"! !#&(*+*)(('&%&'(()((())'&&%$$%&%$%&&$##$##"!"&&$#"#"!   !!!  '0337 ""#$%'),($#FFHHHIJKJIK('F@$)#:3:"$JOMPPLGB@@ACDCAACCCEIJJJLNNMNRSQOMMG:+@:;;=BDDC !"""$''%$$##"! "&)**+.///0010//001369:;:99876578 + S #$!767530.,-///,()% +    !"#$$%%&')+--,-../02344420/-*'&%%$"   +  + 5 + #'()(((''&%#CA<61.,*&$%*-03689==<:77787766:77:44:"&((''()()(&FA<::=FMRV`{󀆌4+ +J  + .ԗbD8/# !H    #    + +  + + + + + +   + + + +   + + + + + + +  + + + +      + +   + +  + +  + + + + + +  +  + (   +       + + +      + +           + + +    + + !& + +  b/#-4799767541)%!:5101123;GW~Ʉ2ŅĄ„17 + + +zmcZOF?868/"$'*+**,1#"! ,)=@*%0/.-)'%$'2=<0)1:>BK)+..*J@8:GV_c`U=H"  %!/5.(4GB73677=BCH(@"&!/#""  $.1100-'&3 !6-&#! !%*162-)$"'$%$$!1.++,,,."$$$#""%))(''(()*+,)&$##$%''% , + + + + + +  + + +  + + + + +  +  + + +    +  + + +  + + + + +  +    $   + !"#$$%'\&'#(+,,-..+%! !!!"##!"$'''%&%  + +  }~}~~~}}}~}~}~~}~}~}~}~}}~~}~}~~}~}~}~~}~}~}~}~}~}~}}~}~}~}~}~}~}~}~}~}}~~}~}~~~~~~~~}~}~} ~~}}~~~}}}~~}|} Mրǻ򉒇 ѾƾMGB=5 |JX逇Gh&?  Ԅ#􅊎ڶG߈݁ȸ}me462+$!  + #(-4<ꃍ뺃薺ļֱәୠӀծհкʻ߼oݹͱ¿ÿ¹. ,?w@<;9898788778::<=;986420-,,.014689:;<;99:988;>@BCDEEEC?<;<>A@?ACFGE@>>@EI&'(''LM)-02221358;<82\XUTVXWUVXWWUSU,.//.--,UOMNQ)*+-../37897654431245421110/.-,+**)O*1671M8.-16>EEBAA@?@CEIKJF=51004:??? !&+**)&%&&&%&'),./0122343223346896423469<=?A.@@?>>???>;:;;=>>=<<<;86653,%#&*-///.,*)(&$"!"%)())*+-/022466542bba[VOE>:89;<=@CFGMT-01123456*42233221]YTTVPEADJMKE<32=>=>=>= >>?>>>?>=>?>? >>>??@???>>? +@??@A@??@@?@@??>?@@@?@?(@?>>>?{jqec0.-,+)('(('*5=?;755542/-/49;<;<;9754334320.+(&%%$;.**-04676421000245664310148: !  !" $%&'%$##$$$#$%$$$#""###$$$%&''$! !##""#&)**)'%"  #(++*'%$$##$$%%&&'&D%$$%$#""##$$"! !"$$##""#%&%$#""##  !! !! "!;"%()+*)(%$""#&'1)++*'%(++'$#$(*+*'$"!  !"#$$# 87752-**,.02X32136755532014530.-13587544320013459;::;<> !"!<:=>>=@!!!"""DA=73001//013555761,*,/7EQ+*) +('''((())('&%#! !!! !"!!!  AA@>;73116:98767754332220/.-,*)))+,--.000//121.---.0332/111/.-,,-.--..//.-,,-.//.//.-..-,**)(+/2576678< +=;;:976421245411100111000110-//01110111232235532399866766554345556788:<=;:876788779:98 643467999764 3234678:==<<==>?>;<==<;::;:9::9876444322235665579:;;999::999:999:;:9 87677767778"(045*677788899989;B&,.//+G5& !7789;6/,,,-./01251245449(?^BHIIFBGOV]juuKVWUPNMMNNNONNNONMMNNO NOONNNOOONONNNOOON +MMNOONNOOONOONNMNMLMMMLMNNMNNMLKLLKLLLKLKKLLLKLKKJJJKLKJKJIJIJIJJJIIIJIIJJIIIJJJIJIIJJJIHIHIHHHIIHIHGGHHHGHGGFFGFGFEDDEEFFFEFFEEFEFEDEDEDDEDDEDEDEDDEEDEDEDCDCDDEGHHRVXZ]^]TJB@=92.0:HS[0124>PamtkJ)=@.BGEEC?=??>BJTXRKJT^frtkiu{xmZSas{TWfLhBS810.-,,,++***)&##(FB3F^meZ]kmjpw=BLPyBM79IRH2%%&&"@!#$$)58*!!%9=rwgO4C0()04;BJRVK?@ACFFGHJMQTUSONLGCBCDEGE>sla:K2?21331.+,--.0245430.+)('%&()***+,+**)''&&''(()))***)*-/01210.-,+++,,*'''())*++,,,+*)(('&'('&!!&*,+**)(()*)'%$##$$&'((''&%&&&%&''&''&%$$%&'&&&% $%%%&&&$"!#''%$$#!  !   +1/004210/4!""#$%')(&$FGHIHIIJIJKKJJM('PC61:#&KJJKNOLGDA>?ABBABCDCABEGHJLMNMJIHJMNLIFC<1&=:=ADF##$$$&'''&&'(***)(()*,-/0100013434556689:999:;;99:  #% "#!7431121.././.*)*,4$   + "$%'(*++-/.-(,,*))***)'&%$#!  + + + ) "$$%$#DB?<6/'!"$',3 !##$%&%$#"?;656/%!#'))##!$&'&%%%$$##$$##" 744457 !"!><:;<<=@CA<86420/../0011//14431/,((+17:=ACEGIJLMH@=<;;:9:<;Z878:=><<<>???>;;=??=<:89;=>?ADEECB@?>==?CGGFEFFFDBBE$&''MJ&+/12110/134542a[ZZZ[ZXWVSQQRTVY-#URSVXXWX,-023787655410/1341//001//./4.,,04542/+E4./3:ACBBCFHEB>;9875542244348DNNHFHJKJHFD# $&''),.01223457898632331.**/5889;==<<<=>><:755679::;<;;:98651)! #(,-,--,*)('%$""$&)*)''*/49<;::;<=>@@>=950YK?50//.-.0027>EKQSRT.5;;9888754442<1_`_00WJL-31K=BLLA5015=FJKLGA#/8<<;;<;::;<<==>???@BB@>;62_\YXLWXZ\^0//]\XUQMIFEDEGIIHIJHFEA?@A?>@CGKLKIHIMNOPMG>6eh{Sckor866777887776789878787877878989878787787898787899:9898988988988999::98989::9899:9:999::9 89:::99:;:9: 999:99:99:;:;;;::;;;:;:9:::;:;::;<<;:;;:;;;<<=<;:;<<;;<;;;<;;;<<<;;;<<;<<;<==<=<;<;<=< =>>===>>==<<=<<<=<<<===<<==>==>=>>=<<===>>>=>>>?>===>??>>??>=>=>?> ??>>??>??>>=>?@@@?>?@@@?@@??@?@??@?@?+@@??@?>wb{pn8876531-%!%1;;74310-&%*./259:9:X<<<==<<;::;;;<:999888730.+,,$2.369989:;:512246542247862/266559 ""! !"!  !#$%C$#$&&'&$"""##"!!"#$$$%&'%#"""##""#%(,-,*)()*'""',.*&%%%$%%$$%&'('%#! """!"#"! !"##$#"!!!""#o$%$  " ;9=!!!""" "$$&'(()(&$###$&((''(+-*%$(--($""$&'&&%#! "##$#!66678<;;9657:;<=;:889;:755679:9; =<<;::;<=>?=97669=!"A>;::<=>??<:::8534446899:>><<<=>=:4.,---0:H(***)('&%&'('&%%%$##! @AA@ ! !!"!"""!! !"$#!>;87776421/,-//./010247765678888999666556888668=9765544555433431.,)'(+,./.+(''&&%$##$%$%%&)+/48986321//./1236 20//012 3445750-/4864445667877887532=334455445543345655667999:97679:9867899977877875320012344554324 566789;;:7679:;<;;<=>!"" ><::9 +:;;9876543245689::9 :;;::99889;;:;<::;;;:::9888777  "%+01@26>DEFDE#',3=HNI7F*889;;:9::9:99 !!#&'%"730./0172243146642IIjx{<;8kaUIC=84248;tpzeyPTQPOOPPPONNNOPOONONONOPOOONNONONOOONONNNMNOPPPOONNMNMMNOONMNNONOOONMMMNNOOMMLLMMMNNONNMNNMNMMLLMMMLLMMLMLKLKJJJIJKJKJIIJIHIJIJJKJIIJJIIIJJIIJIJJIKKJIJIIIHHGGHIHGH GGHHGGHIHGGHGFGHGFGGGFGFEEEFFEEFEFFFEFGGGFFEFEFEDCDEDEDCDDEDCDCBCBBABCDEIPecYNHEHKHFDDUB`orqkW<,-5GWUOH@>CLRQOSYUHCIQZltb[qBn[\cjquyGHKOVXQR]X^o;G3.//,('&#!""!;`_h_addgr=BHOULa5=&:9=@@??A""" =96656788;-7rGD|ytaVVS?V;&1*/C4Jc9<:5b]]_ab``b_REACEEIQUJ7-(#")DGJMQSRPQNLMOMHDCCC@==?CDC@gBH310-,-,(&(+.0134641.*((()*++* )&"!#&()**+,-/01210122110/-,++,./-+*)**+-.-,,,+*)(('&&'''&&%#!!%'())('&&%%$$%&'( '''&&&'''&&%%&'&%%$$%&%&''&%$$#!!"###$$##"!"!!   101325311564456 ""$%&')'%GGHHGGGIKLKJIIJM)**(E74@$LKJIILLGDDB?>==>AACCA??@BGKMMPQNIFFIJIGEDED>3("CEFDE##$&&%%%&%%&'''$)+,.0/0112233343334679:::;;;<=>??=;:  +* 7557776310-,,,-./!.,-.///0  "!#"!"$$#"  !$&')*,--,*(%"""#&''(('&$#!   _"$$##%'')+-+*'#4+"#&+-.1"'(''('&%$$$#"B@@! 7.0!(#*(!!!!"##%&'(()$++,--//-+($!=95556668;>A!! ?>:741.+*)<++*)&%&(()*,15520/159=<:51.auʌ   (74% +5r_*&#!       +    + + + + + + +  + +      + + +  + + + + + + + +        +  +    ; + + + !           + + +   + + + + +    &       +   += + + %+,(  +  + + + +  +R$.EKJ$$#C<2*&%#$'NTo˄8Ȅʼn,¿\ +qj`N<4---($"!,&;FED?0$,*% %**(+0,#!%,4BG96H+E66=CHJNU02]\`37;:56?<]>E   +79<44647=!$).4,3  + +  ?'$@<9/))*+  1 2//1232243+" "$$&)*# - +,00(,$'(*-/.-,0*'(+*&#"""  "#" 3 + + +  +  +  + + + + + +  + +  +   +  p +  + + + +  ##%%%&&'()**(''*&'()*++'$#  #$%'(%!!!!" }~}~}~}~}~}~ }}}~~}}}~~~}~}~}|}~~}~}~}~~}~}~}~}~}~}~}~}~}}~~~}~}~}~}~}~~}~}~~}~~~~~~ ~~~}}}~~}}~}~}~}~}|} F½9ǽ_B<72.  +*IX]aFž$R;Ĝ첒쀏*셒̰;.)#  + "'-1muϨͰγپ̵ݮ߭񂇋ޅϱɧŷތŷۂǀLDϿ <;<==>>=<::;<=<;;;>???@@ABCA@ ACCCB>99;<==9569<=?@ABCFHHI%(KIHL*05532101110.-WTTW[]]ZXXVRQTWY\\Z\//.,URRT,.0124677641-++--,++,.//13565432002467420+J<2/38::<@DC>8776544569>FO*)LD@BEHHFCBDDEEFGGIK&'(*-03565458987653.RJFEH).4788743&5789::87534567899:9877641-'#$(-/000/..-,*)'(*-/24556899:;;;953/ULD<87543321147:?BFHIKMMORUXZ./[WVWWVXYXUQONKIM,0VD?A?91.2:AFJ&HB;6=&.48;>BEFFFDCCAA@?<:8520\YWTQOPRV-/0110_]YU/OLJGDBAAACEFHKJE?>=>?>=>=>??>?>??>=>=>? @@?@@@?@@?@?@?@A@,?=tjS}lp::7420)!=C*39;862-+,+*+-/4;<;:88899898789;;;:96420/00*!:8768:;=94211232/,2::9!77:""! "$%$"!  !"#$%$$$#"!!",##$%%&&%$"""#""###%(*(''(('&%$!$+10,(%##$%'))'&$"!!!###"""!  ! !#$$#"!! "$%&&$!  !!;< !!  "#&'%##%&%##$%%&$ #$##%('##'++)&###%%$$$#! ;:::<;8546?AA@;62100011342.++-0487678899:;<<=?DILMIDBAA?AEECBB=2-.4;BIO(('''&%$$%%&&&%$##"""!! ! ABB!!! !!""! ! ! !  !"#"!":;  !""" +93-))()))&" !!! "%)-01/,---,--.//122356767765.7985334566544457888998752210//000100-,+,-./0245434468988899::755568764320/./1234334443556545#68:::=??=<;;<==?@A@>;976555679::86435778:;<;;;::;:::;<<=>@ ??>>===<;;;Y;9:99:98778'0321110//4AU;QqEJLIBpZCX400110/02223454221110/,)()*++*,0"(($511344334677779A)04,H(Cbmi[H8/WX1767@O_oLHNSRPPOPPONOOPPOONNOOPOPOONNONMNNNMNNONOONOPONMNMNMNMNMLLKKLLLMLLMLLLMLKLKKKJK JKKKLLKKKJKJIJKJJJIJ +KJKJJKKJJIJIIIJIIJIIIJJIHIJIIIHIHHIIHIIIHGHIHGHGHGFFEFFGGGFEFEFGFEDEDEEDDEDC DDDCDDDCCDCDEDCCCBBCBCFEUr]xzslg[IEOVYZZXTOJIKNPQRWXL>@LSYbVCNp}n`[fvACFHIGGHILOLJKQSN~ponbRTdgOVX<3.'$"B\S_gpxABCGILSJW\;441(A=<;;<> ? B?=B0UDkEDt]K<0.7B@4SF@AID56K[[\[YXXVUUVVVWZ]^__\TLJLLNMD;;=;>Q8CDB>72343a\YXUTXa9?;438>@@AGONKIIHGECCKV^\VVVGZ,2,+***+-.///1244541-,,,++,,-,**+++*)*++,-/0/0//.,**++,+***))('&'*+,,++**(&%&*'&$! "$&'&%%&&&'()**+*())*+,+*(''&%$#!!#%&'&%$$#"! !!""!!##""!!!     1.-.s2112343233322"$$$JKL&('JFFGGHJKJJIJJIHKQ+,'E=AHKKKJIIJJHFEDCBABCDCB@>>@DJLLKKNQNHEEHJIGFHKMNKB4)$#$&'())*,-./0/0123334323456679;<==>>=(.-.26885322//0011101T.,+, #"!$%$"!D"#& " *&$&*"$%$$"!#&(*++)'$""#$$&&''&&%#!!"#$%&&&'''%#!0(  $%')+-/369<>;;;:9:;:7542/-11%!! ! #(-0333210/.,+)(%# 96Z5320136 !! ?>;830/,(%#$$$%'*,,)%"%*,./15898413689748Il j %4 #.Çr`-(# !  +* + +   + + +   + + +  + + +   +   + +   + + +  + + +1 + + + + + + + + + +   + H   +  +   + + +  + + + + + + 9!%)*'#"!  "#""# #%       + + +           + + + + + +  "      + + 1 -!/F,//-'?2#)    E"'?FB7* 00!!#,>Rf̄ ɄDŽDŽÄÄćÄ9 ", +SeKWPGB>5(%+...-+(%"!"$&'),,% ).38/$-FQG=:AKQ)+-/0012356423774^NDDD<24@B/-% 2/7;@E%%&(),2+.*   +#;'&?0$# '&(K))***,../0-'#"$&''!&"$" 0-+)'&(-  !!"&**(&''&$""&/42--.&, +  + + + + + + + + +  +  + + + + + + + +  +    + +  +   + + +  +  + + +  + + +   + #&'%"#$$&(*)('')-!%'('$! &!$%$%'(&! "%')(# +}~}~}~}~}~}~}~}~}~}~}~}~}~~~~}}}~}~}~}~~}}~}~~}~}~}~}~}~}~}~}~}~}}~}~}~~}~}~}~}~~~~~~~~}~}~}~}~}}}~~~}~} xCɿxɸοDGE<3 FQ這 /Ŀ􂆅#P4T섗艙՛֙N퇗̾琻者æD4*%! "0lɱِ̰ӯҬ쳊㩖ꂂ烍󃊕ʾҖýʫ7ÿ(IC;===<979;;79>?;9:=FPSQLHEEFGHKO*-./4;?@>=>BGE;\F97=GS.234553/-.146665443323467776 52-&!"',010/.#/.,)(')-1589::85ZG=?EJNQSRQLFB@?=<;< >@ABEGHKOOOPONLLKLOQRQRPPSX]ZL=3.'#+;EJL''&W%%).15:@ABB@><;93+(((&&'()*+.245665542/ZXVTRQQPLGCBDGHIJJHECAACGKMNNMKGDDGLWnHYhnr878778887887 88778887788787887877887878987878789898789898989889::98989:999:;:9:;;:::99:;: ;;:99:::9:;;::;;;:;;:;;;:::;;;:::;;;:::;:;;;:;;:::;;;:;::;::;:;<;:;;<;<;<<;:;<;;<;;<<<;;;<<=>>=<<===<;;;<==<=<=<<==<=>=>=>>??>>=>??>>>??>>>??>???>??>???>=> ==>>>=>>==>?@?@?@? +@@??@@@???@AA@AA@-A@@@?@?z`a`e2/-+(#77&5>?<731/,)'&'/9?=;9:<:9O889:977999:<<;:853321.( 75567:;;;::97410/0/.048 !!6325  !#$##$%%$"!!"###$%&&%%&$! "$#"#$%%###%&$!;:%+.,(%$#"#%&(*+)%#""##$$$%%#! !#%'%"!  !"$''$"!;:"%"  "&&$#"! #$%%#E7!###$%&$"%(++*&#! !!!#$$#!;644588658:879:;8522358:;:99::9:<>?? ! !! ><;<<<;;:;G99964200134310//14579988:<>><;<<=?CHJHEB@<;?EGFHII@5.,,./015@K()'%$$%&&% +$#"!!! !"! !!"!! !"""!"!"#$$##""##$$%%$#!:426; "$#!! !""#$$##$%$# """!"!!""! q  ! !"##$$$#" 6531.+)''&&&%$$$%&''*2;;6544640---,,,-++,,++*-2555321000/24551-/1467641/..//012345665454331//.-./0012223L4676668::;<;976212565443221/.--,-.-.0112234433443100245789:;<=<:778:::=>?=;:7j9:<=;75554344567899:;=<;<=<;<;:99:=>? AA @@?=>>?>@!!"! AA@@?><:7543100//149 %,2444322;YEhDOSPKDlGK % #(,/)0011//012479:99877667899:999: #(*&::;=>)?@AE',2:CR\WH=;CF@8ZD7?R=[OX^WSRPPONOPOPOPQPONOPONMNOONNOONNONNOPQQQPOOPONOOONNMLMNNNOONMMMNMMNNM NNMMLLKLLMLMLKMMMLMLKLKKLLKJJJIIIJKJKJKJKJKKKLKJIHHIJKKJJIJJJHIJIHI HIHHIIHHGFGHIHGHGFGGFGHHGHHGGGHHGFFGGGHGFEEFFEFFEEEFFE FEEEFFEEDEDEDDDCCDCDEDDDEEDCCDDCCDDDCCCDDDCDCDDDC +DCCBCDEDDDCyDEEDAEg}v_U]fpofbbca^YSNLNNOQPG63Lenn`MSiibafkr|BFHIDy=EKKKGHJJIG{iiqzzJ;2)*($#$(8>?[n{BFKMOQQKsM4A'>:;<;:99:<>?>C24_{|jS=Q0%H2N4'+P\NQ01/M?BFEA??BHT^^WSTVUPS3:9jca`\SLOZ37:@FA;<=95dZTPG=79G8E>;;96315:@HNKECA@BKUWSOLPR:79**+,+))),///03>555421/.-,+,,+++,,+**+,--,,-...---/110110//...-*)(())*+*)**)(()(&%##$$%%%#  &!$'**('&&'())((('&'(*,,,+)((()('&&%%$$#$%&&%$%&%$#$##"!"!  ""!  200/0/00013444224100"#$#GGI%'(KHEEFILNLIJMNKIHLQ+-)?8@GIIFFGHE?=?@BBABDFDCA?==>CJNQT+UOIEBBD GHGGIJJJMLB3)'/&%$$%&(*++**-./24554432344469;:98889:<=?>>?@@@= %K)'%!&./,*+-1342../01232/--'  S'# %-.,)%#""#$%($'((&&),*#1#"*4!#$$%# !$'((''&%$##$% #!!  8!%&'('#8("#(,/11.+%!#%'*./122245443211354579<7*  ##!&*-//-*)(%!"###""!:8765332/+'&(*,-,,*)'&&),/35664345:D\'$ + 0#Lx~bV%"#!   +   +  + +  + +  + & +    +  + + + + + + + +   + + + +  +   +     + + + +"! #%&$"  #$##$% "   "     + + + + + +  +  + +   + + + + +   +     "  +d    + + + * + *'?+242.)>% +    +  +  !'.6=7+$#)*%+%7-HkDSceÄK¿%"ldXK938>CA945430,'#"#$%'(#&7?B7+0A@<=ACHN+-//+M'.3652_a35541QBAFLPTWVTM-!  5BH'*--///+>'6FF8)$   ")"" !(/1,('''%)50..,'$&-"&"!2,(& %! &,*%##""(/0-*'*- + + + + + + + + + + + +  + + +    + +  +    + +  +  + + + + +  + + \ +  + "$'$###%(+)'')*'&%(-#(*)(('#"&(*+&! "#$&))"}~}~}~}~}~}~}~}~}~}~}~~}~}~}~}~}~}~}~}~}~}~}~}}~}}~}~}~~~}~}~} ~~~~~~~~~~}~}}}~~}~}~}}}~~~}~}~} ĿͶUƯ=83 IR»M˾"r_;Ʉ톏ʛGƼ߀°^SE:1("%F°DzỬƼ򀈊遇傎㦸󇏔ېȜހ䁽žͯȈᄃڹ傌ȾᎮԼքf¿ ŭ +@A@@@?>==<= +<;;<=>>==<=7<=?@@?>?@???===?AB@@BBABBBCDDCBBBA@>?BCEG$%$$%&)-1211/-,+*)*+-0/+LIOUWYYYZZXWY/001/.-++,,--,+*(K(-120---/1233455565433455676421/,+)J@5257631369866:FT00WMGA<::;9778=ELPOLKKLNPRU-0369>BDDB=5XH>z?EMTY]^^/..//../122a[Y.000//00.,,-//-)#@!&*-.../121/--..//.,+*,--/1221/YRH:.2:99:=ADHKKMQU-/1331.ZZY--YYXXWWYYXWVVU&SQQRUVOC6,*)+/4>DDDEFGGH&'+3<951.,>+)))*-/268;= >>=>?>===>?>=>>?>>>??>>>?>?> +???>?@@?@@?@? @@@?@@@?@@?@@?@0?@@AA@@??>:9:9730//135789:::977;=?><;<===>> =>==<<;:89:99:;ACDDA<9:<=>@CEC=60-,++-4=DJLLJHFEE#$%%$$%%$#"!!!"""! !!! !" !!""##"""#$%&'%%&&''&&'&#<1.39=!##$##"#$$#"#"!"!  !!"!!"!"&'%#!640,**)((''& '(((,088644422136 886320/.--/1345455432223210001 2112111235 456788:;8655564210/...-../ 0/-,-.-../1334669:9889;=?><=>==<976789:976567889:;< >><;;;<=>??@A ? !""D@CCBA@??><8622>*6:8411343018O=WnBLNGzbEV,-"'*,//0133211121101235G44432333468=<<:6200/28G/?ScjieaXL?56>DC?BC@EJT0)?*aYvDILMMKKOJe8A+$" ?><;:;;<<=$;6R`c_Ps9C-& 8 ,6C_2D';:$2K/1VOWWG:.'"  (6GPUUTPMQX][UIA>AJX47dTNVa5dRDFT17981RGCDL6MRJDEIIC=<<<=;4_08?DKPMGADMQFdA+9/++-.---.//01344332100.-,-$.--,,--./0100010///--,+*(()))('&')+,.,*('&$"   !$%%%&&' ()*++*)('''(('&&&%%%&%&'&$%'''&%$#"!  !!! 220/010/--.025332f343335753123!#$#$%'MIFEEDCBDFHJJKJIGHMT-.(FDIMMIGEB><=>>???@CDEDBAA?@GOUWVSMGDEECDEEDDEHJK'F7,)'%##%&&&())*++,-.02455544455567899;<>?@A ) +@)&*.022110//1(! !++%!7$+--+*(((+-0"&*,..,'1'!$*/48;>? !""#$%%IDA!##"! 83+ ")+)(&"!&+89:<==<<=??><<<;9976446772& ',-,)'$!"$&(+,*)8&#!97776432110012246776541/059;==<;77?HL(+*'%H%.696XMW39:7g^XPGCO0784cdX9+%46J*+,,+**.*5 +  /563)  )   $ &'  +  $'''$"$)--)"",1%!&-0'(("(+&##&&#/"&*-*%!'*%2 + + + +  + +   + + +   + + + +      % + + +   + + +   + + (%#"#$%&'E&%%(-! $()(&%!%)*)%  !###$%# }~}~}~}~}~}~}~}~}~}}}~~}~}~~}~}~}~}~}~}~}~}}~~}~~}}}~}~}~}~}~}}~~}~}~~~}~}~~~~~~~~~}~}~~}~}~~~}~}~} ̼򀈑ͰJšz?8/CLS;p¿įD ׄ þ훻νƍӟޑиIľ녪Ѐ鎕bO;,$    +!4r랱Ӹ¼׾݇⌜܈뮅ٯة΀ˈξĸв烐􃍏ӵӷ̀ɯ!CCB@??@?>;;?@>==?BBA@?=<<=??>>==>=[>@ABCCA><;:;<>?BCBBBAA?@D$$ECD"#$%'*---./00.+)*+-110/12200011362)HLVYYZYXY\]^00//0.WTV,./.-/3650./144346545665V310/,,*OHB<989;><7337>?@@BFKPQPNNLF<3/1348FMP((NKK').582000.+)(()*,.037:<=<3:98766530,VUSS+,X++VUTTSSSRQPQT,--ZZ^\VPIA~Ven89876787787878787888998898878877877889989887778989899889989998898778889898 99889988999:9:999899::9::9998 +99988999::9:9:9:9:;:9:;: +;;;:;;::;;:;:;::;;;::;:;:;<;<;<;<===<;< ==<<;;;<===<=<=<=<=<==>>==>>=>>>===<=>=>?>=> ???>>>??>>>=>?>>?@@?>?>?@@??@A@?@??@AA@@@A@AA@@@AA@@?@n?@A@xgR|^VSOJGDBBC""#"?;;?"$##',/.-/26877666783.-/023468:::971-*$:35:<;8765442027; !! :851//048 !""!  !##$$"! !!"#%&''%#""#$%&(('&%$$$%&''%#!;<#*.,(&%$$%%$""$%'**&$$%%%$"!! !!#$"! "%&$#"!   #&)*($!;;:;9  !! !## :8<  !#&'%!====;: !6/++/258889:;;;89>><<=<==<;<;: 988999:989::8M7532358986676555687555676543223566678766565568;<>AFIHD@?AA??BCB@?@<2+(&&/BNLGF CABB!"""#$ +#"!!"!!""! !"###""#$$$%$&&%$%'''(())'% 1,.48< !"! ""! !!! ! !"!! !""##$#""! "$"! 951,*)))**+*)( ''(),2;  !"!!""##$$#!! !! 8631..002356654443100//...---.-,,--,**+-.0111335876548=>>>@><:8779987642111000//.-,+**+,-./01224566789:::9744214786556777544555679989:;;:99;<<<;;;>?@AB @AAB"#$IECBCGF?979:=CQ9UAWebN4E411//9+KvKUUIpKV$&,/01212112322110/./000111222434320/01121/.--,-/28A(CKD9Ggqc`effkonlno9;qrAHHEINPMvbdxM[Q~L~B@T@5200?=>lIIHHEBDFsI/E3(#! !A?=<<@*IDd^i,2*&3<91)%%#(A44UMORKAAIF<89?7(  $*0693^5>A?<98;=?@BD?<;<=;k`TA,9-,/1210//./36764223W210/-,---,,-.0123200//.,*)))*)()+,+*))***('&%$"##!"$%%$%%&()('&%&'&%$%%&%$$%&%$"##!  !!! 1220.-.011135651.,-/01222455322320//024521100/..//2443005 "$IJJIGFEEEDEDFHHHGGEDFIP,,MBELPSPIC?=<=>>?ABABBCCDCACHNP?@ABC"  !%,1234 +/,. q! "#" "$%&),/-*)-3 "$%%#C>633479967; #$%&''JH#""! /+%""w)&#"#$&%&(*.1210.-& '!#"!!3*,!%%$%%$#"#$$%$##"!=953442, $((%$% %''$ %&&&%%$Q"75556556655421137;=@@=<;;џ񃊎-!!>; oÉuYG;1*&"!!    +   + + +    + + +  + + 1 + + +   + +  + + + + +  +   + + + + +  + +  +   + + + ) % "%'%!! &$!             + + +  + + +      +    + + +   <    8 +!3*9A;(2T4:8.C), O'/H2>FG@jG'( ",&*+))4WEQT_ɄPʇń5„.&?W[G?CD;./8>ELSSLE@;30-(&$!"'#*AH>=ABDHIHDBC"#EF)120\]38:7egjcSDCR7A8[QY3T("%$E/.++'$%&;" + "&;1, + '#%&! [ "+," %-&(-)!"*00-*-&'!"! ! ,"" !!"$$! 7/( + + + +   +  + + +    + +        +  + + + + + + +  + + + + + +  + , "$%%$"###$$$%&%%$$""#%)% $(,+&"&"&(&"%(&""$&'# }~~}}}~}~}~}~}~}~}~}~}~}~}~~}}}~}~~}~~}~}||}~~~~}~}~}~}~}~}~}~}~}~}}~}~}}~}~}~}}~}~}~~~~}~~}~~ +~~ ~~~~}~}~}~}~} Dý I򁈌Iѱܿ]^..-AIP􀆆Ľ4ĺ[Eɿހ손⁙ΰϬ[ʫ؁eVG9/)$  ,\ڥĻĹ䁒ܺޝ٦Οฆꔈ˽֞âоʽ˻Ùiƿʹ +˱ BBBCB@@?>>?A@@??@AA@A@?=<=>?ABA@??>>>@CDDA==?ABA?@CEG$$#G&)-.)///.--,,.//.-.00/-,,,-/12.'IMT-//]]][,,,-,^-.-,**)++,-120.-,-024676567776655543111/.-)LHI&%?98<>>=<:757:>@?<8533458:;=>?@@=;@FJNRTVVXZ\\\[\.///.-,X,+,-1466654321011.VSOF><>F')***++*)(ONNP+---YXVSRQMG@81./4=>=>=>>>=>=>?>?>?>?@?>??>?@?@?@???@AA??>??@@???@???@??@@@?@@AA@@@A@9???AA@AA@vjYs`VQMKJKM''IFEEGGGH&)*+*+././0110011/,*+-//0290+(&#>4..047889:965542148:97"" 8401458 ! t !"""##$%$"! !"###$&%$$$##$$%&()*('&%$%%&''%#";::: &*)'&''%%''$#"#$$%%$$$&&$"!! !##!!#$&&#!!""  !"%()(%!: ;97668:  ><>!! ><;> <<$ ; !"#!63331.068;==:889:::;:8876 787665433321T233345766899:;9631///00.-,/2346875667999:=>==?ADEB??@??@BDD?:9:6.*+,.6?GKN'%FCA??@ !"#"!""##$$$%$$$###$$##$%%&&%%%&%%$$$&'&&#:/-0358; !"""!!!    """!' !!"#%&'&$"! !!"""  :4-'&'()++,-,*)(((+.3; + !!"!!"#$$###"""! 7420/012221 0..,+)))(('()l(')+-.-+)&# !#$%&*-/269>DHHGEA:556665434442110//.-../0//01011123345566557899;>>=<964456778:;986689:;:99:;<<:M;::;;<=>=;;=?@A@AC%-8EY8HViy}|wssvy{{zviS8B*&+5CX8CMSXPtH),+.021122356544433212123>22323443212213;I-9BLTbuEQYUInYA\C=@CCDJ,5:I98a}EDDC@gE1C-%%&'(-2358:?P^H$017;= """$(1L96VLC34JJ0#t-AB2())*6?;539C>58AJMH=.$!#',03ELG<0-4CQ^478@CFGE?<=AEILKIEAAEHHGD@<868ABBAAA  %"%,44329  R!!##!$*-0479:=@BCCCAA@?A5"&()*(&%%$#"!2.*$"(H,,-/865321,&!)-001322.*(%! %(*+,,)$!")!  !!!"!!!6664/'  $).02/($ '*,,++)'(!#$&&%$#" 1/0234$6311258< "GC>;6m͓ +  2"4.uȗْhPA82.-.)&$W&      +    + + + + + * +  + + + + + + + + +  +    + + + + + + +  + +   + + N !  !! "$&           +  + + + + + + + + + + + +  +     + + + + + + +  +    V ".)3>GJIFEGHIJMMI=, #2#+3781D& 7#$+3;HY7@GB6[L:'1!#''%&"$+D3?󊗢̄Eτ˄̂̈́ˆJňĄ‚  +fNCB@><::613645=&155327<<9:>=7c[U`9`G>>>?@BCCAAA?>?>?@@@?>@ABCEGFDBA@ABDCAACDA<;>DGGEFECCD#&*/210/..---..-,,,--...-,)')++-/22,%I*/0/.]YVWWV+,--,,+UTSS*+,,.-SOP()-134441145556654543K2232/,))*+,(B4/479=<<=:538BD?<;:9:;<;;:9DEB=99;>??@C%*.148==:746773,ROLLM&&&LKLORTTUUVUVX,Y,++*+WXZ^_UEkR\YMgr:876676787877787778778766789878788788878887877787878898 +7788998777898889989898 78898878989:98989 ::999:::988989:;:9:;:989:99:999:::9:99:9:999::9:99::9:;:::;;:;:::;::9:;;:::;<<;;:;:; :::;;;::;;;<<;:;:;<;<<;<<<===<;<<===<=<;<=<= <<==<<===>>=<=<=<<=<===>>>=>>>=>>=>>===>=>>==>>>===>??> ???>=>>>???>=>>>=>>?>>?>>>? @??@A@???@?@@?@?@A@@???@??@@@A@@??@@AAA@ABABAk@@x_z\YZXVUVY--)JG&)*+,,,+**-023343/...,*))+-,+)))(%"CA:2/-+*-2567998776798889768522336$$" 5  !"#$$#"""##"!"##""!"#%&&&%$%'()))'%$$$%%$""! !$(('%$%%%$$#""#R"#$$$#! "#" !$'(%"!!!  ! !#%'&">;:9: 94347 !:;=;<<=>> " <::7 :50)#(3;= :5115<<:9876656655677530/00//02455589988763210.-@.../0013578999:;<>=<<>??CGGD@>><;<=;:987647<:;<= !  7 !"#$'94Udijfa`ckwAC?qeS9@&!'0ANNMPJ39# $(+-03468 5321222332333223F443456642014>+AeGU\aff^RIiL4F64>(-/6?>5029K\nzfaZTPNMMPQQPQQRRRQQRQP OPQPPQPPQQQPQPQP +OOPPQPOPQQPOOPOOPOPPPONONOOONOONMNONMNOONNONMMMNONMLMMMLLLKLMLKLLKKLLKLKLLKJJKKKLKKKLLKKKJKKKJJKJJJKKJKJKJKJIJIHHIHIJIHHGHI JIIHHHIHGGHIIHGGGHHIGFFGHHGGGHHGFFFGGFGFFGGFFGGFGGGFGGGFFEFGGFFEEFFFEEDDDEFEFEDDEEDDEFEEDCDCDCCCDCCDDC DDDEDCCDDCDDDEEEDAQmjhoutpmlnoqrppuvsponpoia]\aeYJFKT^itzvkd`ULPXODGPRQUexHTYSRSQMKKIzzLr\VizhU=H)?@)DJsQRJsG_L3'%$A@EF=6201210 022347:=@"&7-2T:+%A&1/'#>9 3FIB;93,2DMD=;<;50*&+20)#!!736>&+/7CQ\bYG728<824FUXVUSX4<@BFKNQW[UHBIOOJDA=94ZOD?GQUPILW`[OC7)<411/-+,-,-.../0 0101443321/.5//011///.-,+)(''&%%$##!/+*+,+-.03 "#%'*/2346778776552.*'$""$%&&%&''((' +&%%$%&&&%%$%&%&((('%! #"!!"#"! """!! 0.06'200100255443/-,,+,.02333432221.+*+-./00. -,+++-,,././02446!$%JKKJFDCfDDDEFHHFDEKSPJGHJJIIJLJC>>><?ABBB@?BPWC/((**+--,,-...///000110./35456778::; <=<<=>ABCBA &!3101201/..,)) ] !(-1369<>?@CEFGHHGFF"""!  $'(*+)('$### 3-($$,267765328765530,*& %*-.---./-(# #'+/0/,'!!%*-17 !#$$#"""$#!0' #&+/000,%!%%#""! !"!#F# 10-+,++,/134567676768=CE?6ZN$" )%Cy_TIC@=;,)L     + +    + + + + + + +   + +   + + +? + + + + +  + + +  +  +  + +   + + +   + +/ + + +    +9 "#""'(#        + + + + + +  + + + + +  +    + +   +  + + + +  5   + +I + + 4==:7547?J()'C;- + (-('+)   K,I4>BFLMD91TC/'& #($+9KYf넓΄?̄?ȅȅKÄ [>cfRHIKJGDDEEEFDEJKJHFFGGB;649:1)(.6?IT\YOID8.04-$%*,+/:H-8=:57565f`VVh7bP;5AT^]YPD7&* -QYa892H(/!    +!   + + !  +   %-1,"!*,+)'* !$'*,03.$!',,($" -' "')'"$+0-&  +  + + + + + + + +  + + +   + +         ' + + + +  + + + + + +  + + +  + + + + V +"$&&$$%$$$#"!!"$&&%""&+(#"#$$#$$%#"&)'# &+ }~}~}~}~}~}~}~}~}~}~}~}~}~}||{|}~~~~}~~~}}~}~}}~}~}~}~}}~}}~}~}}~~} ~~~}}~~}}~}}~}~}~}~}|}~~}~~}~~~~~~~~}~}~}~}~}} ڀ"Ѵ魍M,-*rEHyĄG¾򁈉Jg逋ބ߀ƺü͵ج¸ށ񅒥̥ľ£70+&"  +"6xģèȻֿƵоτЀؼž٫ɘþȻSބ)İjŧ¿=>>??==>"@A?>==>>=>>@A@>??>>???>=?ABCBAABCCDB?<==>@;BCFGFGHGFFEECBD$'+.110/.--+()+++,-,,+++,++)'%&(*,,)'%J+00.\ZXZ/0/.,VVW,,TQRR*-033455322456656654431100/-++./-+)G=63565210/.,+.7>@@A@>?@CFKQ.21a`ae5lmkhggecbbcdc1a]X*+,../2579974d_\XTPMHA<;?DIKLMLIFEDC@?>><<==?A@BDEFFEDCBAABCDEFGGHIJLOV-..01123454_3220+KB>>@EKLMNLGFHGEDA=:74358;@GO.477533432330RHCBCEGIKN'(((NLLNPRTW,,XYZZ[YVUTPJB9dSPhWBYj898787887778787888778 7766788788878 778889888777878787899878999898989888998 +7788998899898989899888989889:99889:989:9 +::999:9:99:99::9::;;:9:9: 9::;;;::9:9:9:9:::9::;:;;:;:;<;;<;::;:;:;<;;;<<<;<<<;<;<=<<;<<<==<;<<=< ;;<==<<===<<=<=<<<=>>=<=<=<=<===>>==>==>=>>>=>===>?>?>?>?>??>>?>?>>??@?@@??>>?@?@?@AA@@@AA@@@A@@A@AA@@@A@AgB@nSwUMSZ_b3430-/0///01212124542/,++*)(&$%&&'())%@600148:5/+-/12444568:<<;:9963245454323##! !"###$###! !"#$$##""!"#$$$%$#$&'()))('%$$##" !&))'&%#"$%$###$%$###$$$#"""##"""#$&%#! !#"!"#%&$#!<<:889986567 !#!958=  ! +8;;;:87763100/,))*-1454333123212323577654445433210/...///0/0/012235776556788:;<>@@AB@>=5<>AB@=988:;;5,('(()))+05=E&((&%%%&%%&&'''%$##$$$%$#$$# +%$$&&&$#"#$&###$%&%%%&''&&%%%!3+-2579;<   + !!! !!#$%%%# !" ;3+'&'(()*,--,,-,+*+3#%#  !""#$%&$" 642101/02333221/-,++**-/13578754 56789% >?=<<=>=<999852/-,*&$"!"#%'*,..-, ++*)*))(())(1*++,,+))''(*,/02446:=>AEFDA>831259;;<=>>@A@ !!!"#"$3###$&''').?YgfWA>1MYXWY\b`GU2&(-17=>:4,@.% $'*-./013345K4455544311321016>K.9Ib}IP\hoqoiaXL}]?2-++.59=98=>8.+0AS\^eyIMPPPQPPQQQRQQQRRQRRQRQQQPQPPPQQPPOOPQQQPOPPPOPPQPPPQQPPPQQPPQPQPOPO +NNOONMMNNONOOONNOONNNONNMMMNNNMLLKLMLMLKKLLKLKKJKKKLMMLLKLMLLKKJJJKLKJKJJKJKKJIHIJJJIIIJIIJJIHHHIJIHIHGHHHGHGHGHGFGFEFFFEEEFGFEFEEEFFEDDEEDEDDDEEEDEDEDDEDCDDDCD +CCCDDDEEDDEpDCJosqruvwuux{{{xroomjgfjsyxz}}xq]HRkm\Zp|mh^K?DSWSTYZYY_fsCOXWPLHxlhqKNq`WZdosh\TNLIFE;WNw^yo>8=01343122233454445689;?"$(7MJ<57@CB>7..37<<5-.9;679740-2@SM5-2AJ<,$$,=NSA-# !#.79IWWPJILMG@<96_UUXXZad`\[^[N=.FM7/--.011/./25420025652000.++-.//---,+)(&$#"!-,+*)*+-0 $')))**,023335"4322210222,$  "%&&&%%&&&'(((''&&%&%&&&''('%"  ""!! !!""!! !!  +4432223443620..01100/00//-+*)),-/010.-,,+,/21.,+++-.-,--,,+++-7...//023457888765324:;?#%JKMLHDCBA@@@BDFIJHFFFHHGHKJECBA??>;:<>??@@AC2EHIF@<;<;99:;<>??>ACCA>@FC3+,,++,,+*)*,-.013442232124578965689:=>>>@A@@@>=U5322112001-,-, + "%)1 ?@BF%OONKIHHGFEw >94"%'('%GC@<62/*#  #%&(,25655678984/-,,.2554200.-,,*'%'*-0110.,+*(&$$%$$##$&%&())(''&&%%')+++,-././35 !":! )#  #'((('$$%$" !'/)&&%'(*+-+-,-/1557=<;<;987531/-VSa! &= ! - ,דoVPQNK%&$     +  + + +  + + +  + +  + +  +  +  +   + + + + + +  +   +  + + +        +       + +    + + + + + +  + +  + + +    + +  + + +  +   + + +   + 0  + ) !160$,31136:8%% !! +   ,&3H]6:AINPOIC<3S;%!$'" "")8AFRlԂ<τʆ ń)Ņ„I  "tdTMLLKKJLLKLKGFFDBAADJNNNPOLH;-7KMBCVf_RL@0%'12/023226;D)3;<752_^^UJGO_68cN?89?FI@71-,*((#2)C;PVWXJ& +%! + $, + + %0/-..#+)$$&*"" (11,((+-(!1++--.121.-.-%  + + + + + +  + + + +   + + +  +   +   + + + +  + + + +  + +  + + + +  +  + + + + + + + '  "%'(&$#""!!"$%&%"!""! !$$!_!$&%!" }~}~}~}}}~~}~}~}~}~}}}~}~}~}~}~}|}~~~~}~}~}~~}}~~}~}~}~}~~}}~}~}~}~}~~}~}~~~~}~}~}~~}}}~~} .AƽӯH௖Z00 QS>󈎉Ƴ̀Ŀİ5󄌓Ž򀊒»<袆𣧑ķ͞T퇔傎Ӳ?2&  + 'R›ϸźぢĩǬĮ؀󋓖̼e˺ýʻ܀2P679;<<<>?==?@@>;879::;=?@?>:568;=;:;<=?BDDBBBCCCBBBCCAA@=<=>?AF$#FFEECA@@ABG'*,-.,+)(())+,,**+,++)&FDEFGGFFE@=BN*,-.Z[[Z\^^-.00.ZXVVPJHM)+,0442245579:86554113420//.././111-)%";3220//0///.18DHGDBDJ*.13563_\^bddRfgfdefdaab1a]UNN()*,/258974bYTQQUWXXTNMU/21\VQMJKNQRUWVROM'*-//.XUUUQOKHIIHHIJKJIGC@;9<@ACDEEHLOPMG?737<@EHJHHJJIIHGGGHKMN)-01222111003770F0()06CJ(,/10/.---..,MFCDFGGIKLNNONMLJJLOPSVWXXX\]TK?61.VUXanTn:8887678787 88789988878788878887678887788788788778989877898989988878 +99989998889 899988988999898899:9 ::999:9899889:9:::999:9 :::99:::9:::9:9:9::9:::;:::;:::99:;:;:;:;;:99:;:;<;:;<<;;;< ;<<;;<;;:;;:;<<;<=<<;;;<;<===<=>>=<=<=<==>==>>=>=<<<=>>===>===>=>?> +=>??@@??>>?@?>?@? >??@@?@@@?@@?@ ?@@??@???@?@@@AA@A@AA@Ae@@A@@@AAABBxYj>AFJLMJECEIKLN)**)&IJ'(&%%IHJ&'%HI&'&&()*&?;>@E$HB93/.--.//1236:9862/./0/00135 " !  !"#"###!  !#&&#! !!#$%%&&%&(*(&%%$#$$$#" 7;"''&%$$"#%'&$#""!!"$''$! !"#$D#"!"##"! !#$#!?>>73477899987536= "!8348975:#% 9632258;<=<<<;:99:;<=;3)$$%(,02212467543232232S01223468:<<:863234323221134555333467:@@>==>??>=>>?@;669;>:2-.0.**++)(*0:BJ*--*('&&%%&%$#$$%$##"## ;:!$'))('%$$&&'&%%$#$%%%&&%&%$"6-,0467889: !!!"###" !"##"<91)(())***+,+,,-..-, 18 "$$##"#$#"<;973/-*)*-/0/.#/1345432101113456788754211235689  ;<;<   !""B@><;96300012234520/.,+,-,,--../.--/010.,)&"<:: #%()/8>FK'J=4.--/2468:<@E$#"!"###$$%&&'((''&'3UBIvL11VDNE98CQUOAXCEMOE0<+#!%),.-*)+./011345689<=>@@!! ;998764256436!%2LRONDFWWH95=A0C$+,+;J<30-2;9/,5@B944.'!&L8I$4<(29;;4`^]WQNNKJLOPU176558>EGEN`e\QHC?;52dcc`]_cffd`^ZVRKB4G3034 +1013320/035V42/.---,,,*)('$!...-,*+++-2 %()*-/0/-*))*.1356665531002212211.($! !"""!"#$%$$%&'&%$%&&&%%%&"%$!!!    54555423443222441.-%+,-./.,+)'')+.131/-,,++,.1/-+)***+)')*R)((()*+,.245678887775321024433555;DFFKNLHFCA@???BDHKKHGIIHHFHIIFEDC@><=<9:>ACC@==?@?=F<<;:;:<5/&""#EKaת郊    +' !  +2A<;=>;61,-././()'&)()     +   +  + + + + + +  + + +  +  +  + +  + + . + + +   + + + + +    +#  +  +         +  + + +   + +   +   +  +       + + + 9    "" ( 2(*;2'+")34.#)#),' + + + "&8L1;EJKKMNLFC@<==4$0*,/5;>>90#'((4@Qa.˅gÄ"¾ĄX@tl^PMOPNOSURMIGHIJHDBDFILLMQRTTOLSVLJOWXOB9/((-9>==>?=<93446G186436<8UJUc56`TNJGDDB>?ACEDB@@?;56HUG4?  +  #! '(  ! +  +  ",!#,++(%$#""$((*!%%$+8;4-'"!432/-.133210/-+("  + +  + +   + + + + +  +  + + + + +   % + + +  + +  + +   s +  !%((&$"  !#%%""#"!  !! !  !$ }~}~}~}~}~}~}~}~}~}~}~}~}|}~~~~}|}~}~}}}~~~}}~}~}~}~}~}}}~~}~}~}}~}~}~}~}~}~}|}~}~~~}~}~~}~~~~~~}~}} 񂈇,ـԱɶ㿠PU.0-  +  + +"J~󋢴 &ԲƄ҄DŽaſÿļ=󂌓TƼϰĭS׽bUI8+$!  #7ԽᄁÀεƻ˞ںóǽò꬈艠ጙ󎎉႔ʭքa½˺mg 65679;<<<>>?=;::99<>??@?><;:::;:;;;<=??>>?@>=?BEFGGD@@BFHHHGFEDBBDFFEGKOR**,-,+***,..-,+*KB>AEGGEDEECA@F*021_[[]^/0121/[ZYWTNMP)+-/0B345787665554432221/../232110/.,*% 8433212456;BGGDGN+/0012cbb1aaa`^\&]_a`0/\XSRS*+-/134e`_]]__[X\010/ZZ-.-+(*-144456678:<>>>=;9752110036874]SMIGGIIIJIJKJKKKJGECDHKNOMJHIIGEDB@ACEFIKMNMMMKHHJMR-12]K7+(*16899;;;<;83/,+-379;=?CEGFHM))R*+-//-TLGEF*GECDFHJLMKJKJHJLOS,-VND<4-*,0.WU[kQyReo98878876678788789878778787778887888777888778877787898989 8898877878989898898989898999::989::9::9:9:9::999:999::9::9:9:9:;:;:;:;;<<;::;<;<;:;<;:;<;<;;;<<; <<<;<<<;;<=<=< ==<<<;<<<=<=<=>=>=>>==>= >>===>>==> +?>>>==>>>?>?>?>?@?@?>?@?@@@?@@?@?@@?@@@A@A@A@ABA"BBA@ABAAA=cXAD#B9321.,,--,+,/37:;962/,*)*,-02257!!  !"##""! !"#%$#!""#$$%&&%$9%''%%&'(('&%%$"#%%#""!"%'&$#""#$$#$%&&%#"!!"""$$" !!!"E#$$%%# !"##"!!"! ;9<> =83369879:8879;;<>=? ;3035<&(":6> <<=<:::;=@=-!#),.121J000245443343122100013343334445642248<>=;85310122310/-./1234432233348=>==?@?->>;75568==::;==;89:2,*,16<:9:;:9::87j63000-)&#!!! !"%'%$%&(*-0134568=BDEE"##"!!"$$%%&%(Adqlm=M[ivucMCBA?:Y>0-,'.'%%'(''()+-/12345668889<<<> !I >=;:<>#0EZlBOWZ\adda_]]_`^YSLD>=>>:mkdVE:3,%A;A*9EQ^foaaa\WTRPPQPPQRSRRRSSR SSRQQQRRRQRQRRQPPOPOPQPQPQQRQPOPOPOPO PPPOOPQPPOONONMMNONONNNOONMNMMNMLMNNMLMLMNMLKKLMMLMMMLMLMMLLLKLLLKKKLKJJKKKJJJKKJIJJIIIJIH#IJIIIHHHIIJJIIHHIHHIHHGHIHGGHHIIHHIHGGGHHHGHGGHHHGFGGFGFFFGF GFGGGFFEEEFFFEFEFEDEDCDEDED CCDDCCDDDCDEEFFCKixqkmtxy|}~|xtuyxxutyvmny|{|zma`aacghc`\PGHRbmme`\[\[\ahgM?S=IMQZ_ZMMOo^Xcic[`kosvwvsokihhmsqgME-510355 !#$%(*-2582/0123:210..-,*('%# 1110002#&((()*++-034310/..0366766653211.(# !""#$$&&%$%&%$#$$##"""##$$" !  3466654333232>1.,-/0.++--,*())+,-/12210.,+-.//.---,,,+)))*)))(()*+,,.0245653210221/^11238?DEEDCBABCBCCCDC@;:@EFFEB@ABA@@???>=>ABB?>?A@??>AEIKIB@AA>;:99;=?>=<==9667783*'))*+-./0112"/.-.013431/./135556678:<=<;::97766!5#%) +!"853343332/*)+u #@BD"DDECA??>>?ACB 94/.- "C@?>>?>;8:33 !"$%$$$#"  "%&%";5.+**+,-./0221//.+(((*,010.-..,+*)'(*+-/0110/.-*)+-07)  "'.3-)'& &%$$$%(+-,6+-/2592,& CK_ܢ:  + % " 낚=86430/-+)&$##$#!"$%&%%%&%###$"   +     + +  + +  +  + +   + +  + + +  + + + +  + + 6 + +  +        +  8 +  +      + +   + + +  + + + 2 +   + +      + + +    +    $ 5;8:#.6?FC6'!""", d + + + -@ADGFC@@BDEC>83-('''$BB=2%"-8ER_ꃓτ +ЅM̄AɄ +DŽ„,*ynhSIHKOPQRRQLHILLMLLOMFGPVTRQSSKCCDEGLKEA;1))0<;<:9;@?,!/&/48@D@5\a68iZL?:BFA:>DFGJJIDB@@@AEKMJ6* E + + *'!$# !)$ O +  +!*)*!!+%)!$")*'!1*%%)+-3203772.00) + + + + + +    + +  + +         + + + + +  + + + + + +   + + + + + + + + !"##$$"!! "&)'" }~}~}~}~}~}}}~}~}~}~}~}~}~~}~}~}|}}~~~~}}|}~}~}~~}~}~}~~~}}~}~}}~}~}~~~}~}~}~}~}~~}~}~~}~~}~~~}~}}~~}} zǰ2̼羘g94+ +FFyȺ僑_Vξ⁈ »\Ź¶ۃ٠جǁߤP΃«д|lf3.'#! +  )Xխĵ;숓ЯĶפ֎ǯ޳âĽ녊򃗪ͱӁաʽ½̻;I؄ۀú¿ :<==>>>??><;::;<=<<<;;<=?@?>===<::<<;978;=@BB?>CFFFEDFGGIJJIGHHFC@@@ABCBDGKNPR**+,-..///.+LD?ABB@@AABDEHIFDBBL-/\Z[//011`]ZXWXYXUST*+,-./1223677644576432w2100/..//-**,/0/-)'&#! !" ;:=>BFHGHKNSWZ[ZZ\]`adfeca``^ZYZZZYWUUU+,,-/27:81\`123334430Z,,+,.012356678;==>???=;:986653221]3589<9632420.-,,28>BGJJGE8GIMNNMOU,YXUPKGFGFDCFJJLQOMLPRQMIDA>6)?6=<=>=>=> ???>>>???>?>?@?>>?>>>???@@?>?@AA@?@?@?@AAA@A@A@?@?@ABA@A@ABBuUi?>>>@@@??>=;=?@???>>?ABA@?>>?==@@?>==:9878;>AA=7441*#! "#&)/7;:630,+,...0124799 !! """!!"""!!!#$$##"""#"$&$#!!##$$$&'('%%$#$%$# "##$$&&$ ##$" !  "#$&()'$""#""!!"#! !!!"! "$$"! !#$"  !/ 769"">65; ?<974/.47756<>;:;:614"'$ !#&%%#*"""!!""!!! ;:97+'*./036753233223344432-33223345554432233343334431../../000//000/./010 11236:;:;?DDB.ABAA@==<6445?@ ??>=;7431/,($#" !$&)-146789;=>AB!""#$%'&'5W_=95dDLLJBiGM.6,3Y6;.,,.010/.-+)*,/368988::;X !!"#$$C==)E6N`ijfa]]```afmmeWKFD>82^f7hS@3* 61./3:K,.VaCavugmPXSOOOPQRRRQQRRQQQSSRS RRRQRRRSSRPQRQPQSSRQPPQQRSRQ PPPQQQPPPOOPPQRRQQRQ PPQRRRQOOPOOPOPOPONNNONOOPOONNO NNNONNNOOONNNO NNMNNNMNMNNMNNMLLMMLKLLMMLMLMLKLKKLKLMMMLKLKJKLLKLLKJKJKJKKKIIHIJJJIIJJIIJJIIIJKJIIHHIHHHIIHIH IIHHGGGHHHIHGH +GGGHHGFGGFGFGFEFGGFEF EDDEEFFEEEFEDEFFEEEDDEEEDDEDCCDDDEEDDDCDEDDDCDDDCDCzDDEEEBEb{mffmx}|}~qjsz}|{||qnyA}vqj\QSY_cc_]^\Z[^cjoke[OJKLNRULBBRkDMONOPSSRPKjTHSaeiqtuxwvssurqpkc[_x~WnDN. 6799853223443589"%'*-@IOZWG4).BROD<88>L/5`@% ! !!"'+"624413(1:BEFF>1/@P\59=B?5YIBI/?KG@/C?IQTW.159740[Zb^NQ\_[`43``374`\[[\bdS4?1222320 +.+(%#!9 &+,.1/,,--+**,/133210./001367876301321121101/("!#$$%&%$$%$$#"!! !!!! ++334331//0100122110//00/,(')**)))*+,*(()+-,+*(''&'(+--,,,***((+,-,+,. /1222332//.-/e.--,,+-.00/17@EFD@==?A@BDEF@5-08?A@ABA?><:;=>?=;97:<<<:99;=CHFEFGDA@?<:876789988775444589.$$%&),02355643211232245789879:;;;<===<==<;*"%')A &656642112320.--   #(/59;=>ADEGIHECU@???=96432#&$:= !  1 !##$$$#"!!  "&&$"#%%$"!! <986652/.00..-.0///-*'%%&)++*+++**(&'(+.1463+ !!$')**-15630-+**'$#%***.---141.,(%$!#+29K]ip6,5  ! B = q䔟<830/.-.-*%! !!!  !"!   +   +  + + + + + + + +  2 + +  + + + + + + + + + + + + + + + + + + +6 + + +    +   +    ,"!  + + + +  +     + +    + + + + + + + +  + +              + +  +  + +   +   + + + + + : -+;(,,*%5, +T($6DHHEA??ABBDIQOF9/+)%#8=">-  +08+Fdq҄^˄͂΄BƄ!Ć; 21~fOGDHNUURQQSRGCJPTVJHQ,WSNLH?69>CEEB?>:998??>=>>>=<;D<<<;<=>??>><;:;>?><:89::9;==>@@?ADEDCCEGHJKKLJIFEBAB@@ACDFHHJ*141.,,+ )(&KJIEB@@BC@=>AEEC?>G*.../aa`]XWYZ-..--,++,.1222455432333434d3334678973/,*#><=>;7559>@CG%KKJMPRRTWXZ]_`][[[YWUSSTQNKIHEFP19?CHG=0,16630VQ)+,.16:<=;63699:;<=>=;9;<;:987786431.,)'&(-246;@@<62689;=?@?>=<;:77889:;;:742`\ZWTPLGBBDEEDDDEDFHIA6.(%#&*/0//1320//0/1469=AFIJKLLMLLKKIGDCDDFIMPQPNMKHCA BDDB@FJJGA<4,&EBABDHQ[b`\ekOg88767 887778877887877767787878788878988778 9899888997787788778999878998889988999887789::998 98899988989989:9899989898989:9:9:9:::;: ;;:99:999:;::;::;:;:;:;::9:; <;<<==<;;<<<;<;;<;<<<==<<<= <<<=<<===<;;<;<=<===<=< +==<==<<==>=>==>=>=>=<<===> +=>>??>=>>?>?>?>>?>?>>>???>>??>>??@?@?@@@???@A@??@@A@AA@?@A BAAABBAA@@AAA@'A@@AA?rXwO@?><8:>BA<989:;<=>?@?><;;<<;;<9;753454469=?@><;:2,)$ !#(.2651/../0/.03568989 !"#$##"#"""!!"#%# ! !#$1%&&%$#"!  !"#$&%$#""!!! ! 9:= #$%&&&%#! "$$#P "  ""! !!! !""$$" !#"!! :569<:9;>B"!"$$##$%%$#"V#$$#"##$$#"531379411.-/36888642125642220///01122233454222356544323332210/010///.--/10<125899:;=@@=;;>>>=?BCBA?<<=@@?=<=??A@?=;;<==? !##%&&&%&'''&%$%$#!!!"# $$$##$%%$$$#"! 65679;<   !!   !!""! 6/+***,-.-,-4/35520-+))***)'&&%$$%&()))+,*()+,.0122210..0245545679:964699864333221234332245689:$;::86555779;<=<;9757::8887778889:;<<  !"!@"!@?>:6542/.--,+*),---.15;?!#%(-08N^VR7EMPQQRI8URURC,30/4?%*&9.*V,/224545778 BCEJ,>[?O_komjgecbfiiilhb\UG:5:8`TI917CI>.%@;:9:?J0CR[euORRQQPQRRQRSRS RSSRRRSSSRQRRQQPRSRQPQPQRSRQQPQPQQPOPQPOPOPOPPPONOONNMMNMLMMNNMLMMLMNMLMLLLMMLMLLLKKLMLLKKLMLMLLMLMMLMLMLKLLK LLLKJJKKJKLKLLLKKLKJKJKKKLKJIHIHGGHIH IIHIIHHGHGHIHHGGHGHGGHHGGFFFGGFGFFGFFGGHHGFFEEEFFEFFEFEEEFEDDEDEEDDEEDEEDE DDEDDEDDDCCCD CCDDDCCDDEDB^ĕysqllsy}|urqpv~~|rfp{~xh`c`]_fhbbfdXVdturxztjZKHLJEHPROR_}KHDGNOE|jQ?FUajlkq{}uw}}z|}occeWFCGFt\ALNC0@;Q:=%')5A9BBA5*%""$'5:fhVIKW_WB8>FMMHDGOYf_MDHX`18=[5)*)%  !!! d!"##! #,0.+))0@T4?A?;3.18<:526<;,4)2DORQRWY[[UKHNY^]ZUOJO^356665gdc_TA.A521221/./.+)'# +"'*-0233431.,-,+,.133221/.--/01367875211210+(%$$&''(((''('& +%$##""!!""!"! !" !!! 5433312!11000/.--,+++*(''))(*+*('%$$%&'('&%$%%&)+++*)(()(*-.-././0/ ..--,--,,,---,--,+,./0/06@EFDA>>?@Aq?2&#(09>@@?><99:::;;<=<:::8989#(+-.0234443210012321113445789998766789:::;<<<;:<!"#" !1  :9630/01223 +  !#%*/468;>ACDECA@?>=;:::63/+(%&.#'+.-$" -* !!##" "#$$##!!%%" !#%&'&$$#"! !"##$# ;988630*'&')))('()+,+% "#$$%&((&%%%'*.023310/,(&&'&$#)--*'"*&%&(.7COQWǞف%$  % ("  ٗeB93/+,010+&$"""!!!##"    +  + +    +  + +   + + + + +  + + + + +  + + + +  + + + + + + + $ + + + +  +  + + +  + +   * +   +(      +  + + + + + +    +   + +  +          + +7 &-$%')))((#$(+*  + X +!7)5?GJIGEDCDHJJJKFA<5+" $"7-$&+#$.-=K]yτ҄ Ї$τЄ'΅ ɅɅɄ ƆƆ%%y\SPJHLOQTVUTRMMKJOUXTQIAGNOJ?;>>>AFHCCFD98CNNMS]]VQI:-()&"$+-+.7N1/,.45-SVSE3%*4>FHGJQVQKMQQOQUSJG>?@5)%)'?/ """! 54(!!(,' "!'/+! (+' X +"$''()+,-)$!%+//-*'%'/6321+  + +   +  +    +    + +  +  +    + + + + + + + +K + + + + + "$$#! !"!!!  !#%&&#   }~}~}~}~}~}~}|}~~~}~}}}~}~}~~}}}~~}~}~}}~}~}}~}~~}~}~}~~}~À ~}}~~~}}}~~~}~}}|} kºނȴǾǺǾ깍z\0-  OŹ½-Ѐ÷թƺ󥂢ׄ.˳칚Ϫ灌ʸC5(#  "0q۽Ǟɶ쀁ûآȀרȿùɪق܀ƭ侮ƾ;Mń)¿ӅׅքN©½;77899;;;<===>??>=;999;=>[?>>=>==<<;::;:987655799;?ACEEDCCBABEFGGIKHFFC?=>@CEECDDBJ,/-+)))QR*,/-,*NHB>>??><@FU0_]\\\ZWVXZ.\./0/./02433445543334430/02466445789;==<:61-/*#!!6.-2;BCE%)-000243b[SSWWUQQSSRQTYYQID<5=(8EHGDA?<::;5+O)+.269;<;<=;:h97767874149;:99;;:9::87666431,&A<= #'.2/,+*+,-+'&*/26:<=<:9:=?A@>>>?ACFGD>6/VTRPNOMIGGFEFD?2&"%&)+04I56569<>>?ADGL(),.-XVTRLF;6;BHOUTQLGECA;438>FRO@0B78<>>BGPg~wfd_s:976776787899876788788877878787878987887878998889878987878999888989 87888988989988789898789998889899::98989:99:9 ::9::9:::9:9:9:99::;;:;:99:9:;:;:;:9:;::;;;:;:;;;<<;<;;;<==<;:;< ;;;<<<;<<;<;:;<=< +;<<<=<<<>>=<<==<=<=<<<=>>=>=>=>?>?>??>??@??>?>???@? @@???@@@???@??>?@@@?@?@A@A@A +@AA@@AAA@@ABA@@A@A)BAABBAABCCBkU??<856:??<88::;=>??><>@@??>=->><8665422359>BA>;:81'" "',263.,-/0//012358: !""#"#$$#! "#""!!!#%%$#! !""$&&$!"$'(&%$"!!"""##""$%%#! !!" "#!779!&*(&$$#""$&&$"""#""!  !##! ! !"#""!!"##"""87i:;> !#!<50+().2348;;978?$$ < $$$&&'&$$##"""! "$$#"! 9 "%&C8543466420//0/.///23443212321123322123332233233211001221///-++-./00///037;=;::<@"#@5036:?C"#$$$%$$#$&%#!!"%&$! ! !#" !$'''%$%$$%$#"#""!!"#"#$#""##$#"!"""#$"!77!##"  8[   "$&$4446<;4-**+-...--+,-/0/,++,-,*)'%%%&&%#""#$$%%'(**)*+.01233321400013567520258878:<<=@  ?><:852/...-./0/.012356 777877789;8776788778 789:`  !  ""!! A@=::;=?><::99:<=>?>>=<::;<;::8559A$'0Kc:>g2F^kfYME>Axsxxx|FGpea\OPXVNJMODeM=L>R?>=I7?mXXgZ;8A=31*i=[ROG@ESVTTOIQRS^39AA?EG7LBX\6  !!"!!"#"!!"$&&%#""!"&(&$$%%"(5CMQU1==>?@@A9* $)-05;=@A?@C@;9:X;:79=<==<<=>@DEIIB<95224201342/07>?8+?9@%)-/0010../023331110/.-/123456568768889988778::9 s !#! !))!!.:864541/.00  "#C?<=?@?<;<;88:>=3(""$,-+)'%#"##&!"""##!!!"!!##!   !! "$&&%"""$%(+)%!2110/.-*)))((%  + !#1212/*! ',26642/,+*%#)1:5(!' #(+-2C\hdd耋,*  >=)/yG<50,*+./,)((&$%%$"  !   +  +   + +  + + +  + + +: + + + + +  + + + + + +  + + + + + + + + +" + +     0 + +  + +  (    + +    +  + +  + + +  + + +   +     Q +        +  +  + 7#3 4%4<7/(%$$'*!#  :C:('  +_ 6FLMHEDFJLPPQRSVVN@1*)*.56+74"<0"',@U4BL䋬ЇJͅχʅ ˇƄ;„ylWSSQPQL;ZH0;MN+21+NLE:0+-9EKKJL+,OLONLOV//VIA=90153-*,+#/#& (#!7*+5,:".(% '*))%!$%&+ !$& Z + + !$% $"( )+%#  ',.-+*'%&,3 7,#   + +  + + +    !  +  + + +  +    + + +   + + + + + + + + + + + + + + +  K ! !   #$&%  }~}~}~}~}~}~}~}~}~}~}|}~~~}~}~}~}~~~}~}~}~}~}~}~}~}~}~}~~~}~}~}~~~}~~~~~}~~}}|} u˹.ΫǛ²U//,   +  qFJ¼05񁅇ƽZ܀哟áꨃƩι쑼ƻ﹔M?2'"   !3Z䶦ǼļֻՅ𷱥䉅罬ܸι󐓎鿲ьկބ͸г񎒈Ȁ¸çӫ¸ τ̀Ƴÿȣ66653444344557:;:99:<>?>"=>==?A?=<<==<<:74112469;>@@AABA@?@BCEFGEB?<;=@CEFHGEDI)+*):**)RRPKFA??BCBA???>>==?CN/430^]ZYYYZZ[/0/010011121356543234J23578755789:;;;:9:852263)%#>505=954678779;;<<:9 888510479::9888999::4*A314:$+0231-'$'-0001258::;96224675346;>>>==>@A?<9522441\WTRMD;2*('&%&'&&&'),/24556:@EHJIGGIKPT+TPNPRVWZYTPOQPOOQSRONPSUWY\VF6C*(,3DQ[`beilovkLbo:988766777676787787888778787788878 77888789887787878989899899898 +9998788899898898999889898988998989:998889:9:989:;;:9:999::9:999:;;:;:;;::;:;: ;;;:;;;<<;<;:;:; +<;;;<<;<<;<;<;<=<<==<;<=<=<==<=<=>=<=<=>>=>=>>>=> ?>>>???>??>?> ?>?>??>>>??>>?>?@?@?@A@A@??@AAA@A@@ABABABA"BBB@pUpI><;:;>>>?=:9;<@KTVTSSUWWV+,.+)&FA=9643226=>? !""!BA=2)('(-../138A%''!:<"$%&&%%$ ###"!!"!=<;;<>?@AABBB=730-.0211012578;<:86543100/0222100133211001113220..//121/.-,,---/23324789<@@@=974236888=D$%$%###$$%%%$##$#"###$%%$#"! !$%$#" !!!""!#$##$#"#$###"""# $$$#"""! 98##"!  V  #$$$%&&%# 96442/.-.//.,+))('''(***))&%%$%&%$#!"#'+---/2431120001223466788::988:;;::;< <;986421000/../013456543334566677676789889765678853235689:=<;<<<:867889:<>>><:86799876421001124669<@CDEECCB@>;:>"%'*-.6ADDR:@AM\\HZ37')@dDV dnsqkfeeegmpr0nmie^VQMCgG-#&/9CIGCPhbRS\fouVWVRQRRRSRQPQRRRQRSSRSRSSSRSRS RRSRRQQQRRRQRRRQRSRQQQPPPQPPQRRQ +PPQQQPOOPQPQPOPPOPOOPOOPOPONMNNNOONNONNNMMNMMNNMMMNNONMLLLMNMMMNMMMLMLMNNNMMLMNMLLLKLLKLKLMMLKLKKLJK LLLKKKJKKJKJKJIJJJIIJJJI JJIHHIIIHIIH GGHHHIIIHHHIHGGGFGHGFGFGFEFGGGEEFFGFFEEFEEFEEEFFFEDEEEFFFEEEDDDEEFEDDEFEDEDCCCDCDC2DDCDDDEDEDDDJ[oszzvlju}rUKR_xvf^bedacfb^br|iWT[acd\XlrazR_RK6>kHF~{nSFZmpnjisA?rpmigqAFD|tlZMLU`bYLJQX\LoI537:ENH9SW;>;:cC2.(WDPF[FKYhgZYXOQ3DF=::95]MEC80) """!"""##$$#"!  !#&*047<>J[2114776982XNO-/.YRA2'#'5P473[OECCFLRUXZ[XRKFKUZ`378877mj\KGOVSEseS8*#"#$%'(*+-/00124541/,**+,,+C,.13210/.--./0245544433223445431/+(&%%%&%%&'(((''&&&%%$#"!!"""!!"!!  345431///./.-,)&%&')*+*)(('&&&%%&%$$$#"!"! "#$$#$&')()*)**)))(()**)*+*)*)P(()*+++**+++,,,-3@FFDA@>===>?<0# !#&+28;<<=@?<8877877799;><:878:9:::88876433543;5:GW[WO7$E%(*-/0110/13454331/-.../..01232112345568777544456 ! !#*)'$  (997544433a + + ,.157889:;<>??>>@@@A8,"#+%,.-+)'%%%$$# "#$##"!!!  !    !"!  "##!5321,$ !! "%),/..149;<<84454334674268:=??;1$!(&0:BENW^iײ텊 7"   +) =䛶aE92-,-../-)''&)/564323433# + + +   +   +  + + +  + + + + + + + + + + +  + + + +  + + +  + + + + + +1 + + + + +  + +     !   , " + + +  + + + + + +    +  + + +  + + + +    +  + 4       + " 8  ,"$")33&) +$175* + v (C/;EKMJECDFGHLPONOONMJGA;61):# )--(0@=44;CKQ[irኝЄ ӄτ΅ф҄΅΄˄)DŽĄ Ą Ņ„ +\\TSOEEOVN6-1@@@ABCCB@>=>=>==?AB>=<=??ADEDEFHHJ'**QP;RTTRNFAACCCA?>=::;<=?K/2bed^Y\_aba/266433422112334443344566769;:::;<=@@>;61187*@71-.5=<:BMMKMOPPPONPQSVWY[[YZ]^YU+,.5=ABCB@><::<>?>>=<;:76677:<<<;;::8669;;:98768;<;:;:;<>=9/D404 *4:;8631-)(*-14899;>=<>?<722567:;853i1-('*058;ACFG@W9)#$$#""$&((')*,-.04<>=>>=>??>>>?>??>=>?>?>??>>?>?@?>>?>?>>??@@? @???@@@??@AAA@AA@@??>?@?@A@A@@BAA@AAABAA@ABABAAABAAABjDCo@AB?<<>BA<940048>EIKLPUWWX,./-+(H=730,+-.1455337:<:4,(&&(*,-./.-./37989 ""  !!! 59!# !$%"!#%&%# !"$&'&$! !#%&%%$" #$##$$$#"! !!"$$"  !"$$$###"!!!"! !"!  "##"!  !!  @!"A5+**''*+-.1;&*'C7<%)(&&&'y&'()'%$"! @A?<:75668:<<<=>?ACA;61024322112589::743210/00010//110112443211233233210//--...-.-./00345798852137:;==>?A"$&*)&#"" @>!$%&$""$!!##  !  "!  "#"""##""##""#"""#$%%#"""! 98   8887772556!! 8789!:8668730-**)(%B$$%&'&'''()+,.//+)(*,.146555311100.-.//101334323578:<<<:;<  =<976543211122212234565554554433211124576665467876531/-./0001257666778776J56789:;<;:878:8653110/../001369:;<;72.0456:>!#$&0?MVUQ>&8=/QmgAF*%*-/M012334567888;$;5TpytlfbcggdcillihjnrvrfR?`G/!(?]rl]RC:8?QmYYWSRRSRSSSTSRSSSRRST SRRRSSTSRSSR SRSSTTSSSRQRRQQRSRSRQQPQRSRSSTSSRSRQPPQRRQPQRQPPQPQPOOPQQPOPOPOP OPQPOONNNONONNON MNNNMMNMMMNNNONNMMMOONOONNOOMLLMNMMMNNNMNMNNNMMLKLLLKL MMLKKKLLMLLKJKLK +JJKKKJJJKKJIIJJIJKJJIIJIIIJIJIGHIHGHIHGGGIHGGGHFGHIHGEFGFFGFFGFEEFFFEEEFEEFFEFEEEDEDEDCCDDDEDCCDDDCDCDDCCDDCGcWovv|}q]elheOZT>FD:=Sifb_^`cdgic\\bgd\XWX^mw|PS\Vrpy|wonibfmrurs|Ayqnkim=CA{=>`6:/MLXA6PqxgS@L[ILF?HPC58GRUO7I'8DVAWdgO^SgpcUQb9:551QKUXPJ;(:45 !!! !"###""!!""$$$"!)8IV..Z/7:9?JV[[WM?-P^579?BA=9305>@@;1PKJILMGBDKRXSHFLQMHO183TQ]5788;9:;:;9 + !"" + +#)*,0345778;>?@@B@<;;930$(+,+)'%"!"$%##"""  #$%%$#""  !   !#"  !##"$%##'++%. + + + + +  #%%$$#!#&+/331116?:,":61-))/CW^``lܨ₉S  &#- + I WC60+((+//-)$!!$'+--.03534& + + + + + +  + 1  + + +  + + + +  + + + + + + + + + +  + + +  + +  + + + +  + +    2!#  + + + + + + +   + + + + + + + +   2   +     + + +  + +3 !+/-* 5I@" + ]&&>QTOHECEHIGFLOOLKNPRSPF4$2! )?LF>:0+*/=Qafb_h|芟Մ ք ӄԀ Ʉ ̄7DŽ3rDNPMQSJ=DHFF563'.-'+=MJHGEGJKMLFBCGLIC?<xt?FAoncSOUUYZWPIHC?@EKNMMU+QJIHFH(,*M()<&+2".EI=.!,$)& &,$%,/*#-%4>B/2*6;4*(1"'*&!  S $'$,00,&$!! !%""!"$! "'+)#!%(%!%($+#*.)D4*" + + + + + + + + + + +     + +  +  + + +  + + +      + +  +    !  +=  -8><1.4/  }~}~}~}~}~}|}~~~}|}~}~}~}~~}~~~}}}~}~}~}~}~}~}~}~~}~}~}}~}~}~~ ~~~}}}~~~}}|} {C<ι~GQ-/*dEIþȽѿ胇¼|ĸťʹډǻþVI>2)#     +Wě戌Ī὚Ş2ʷߎѻȻ脘釖Ŀаش͹Ŀ +$M.֡32233211134234434332233443555655543221/.0/...0368<>===>=<=<:99:<<:879:;<;<=>?ABBAEJKJKLJE@>>AHP*+UPNLIHIIGEC@?ABB@??@@GV_bcb__abca_/1442255310123454443457887667666899:<==>?@@;3/14.#>9424:>@CKNNPPPSUVVXYXURKC?IZ11233236=<;;<=>>=;84248;<<==<;:9:98777899:<<;<<<;81N;8 )3<;:86789<@CDDB@???>>@A@>===?BBA@@@ABA?;840,)+/5;>@DFA_8&$&'&''')*+,+)*-37;BN\0YOGCADINQRQRW^233db_-]ZXWURQV[][YVOHB91/4dVSTUQONxTzRdn887787787877787878787888788878787 888778788998788877887878999889 889888999898 999889998989 889889988989998999899988898998898899:9:9:999:9:99:9:9:9::;:9:;;::;::;:9:9: 999::;::;:;:::;;:;<;:::;<;< =<<<;<<;;<;<;;<<<;<;< +==<<<===<<=<=<<<=<=>>=<=>=>=>?>?>?>?@?>?>?>>?@?@?@??@@???@?@AAA@A@A@@A@@@ABBAA@AABBBABAABBBAB?CCAqO_C=<::;=>@BFHHHGC<4/,++,-.010/./125:9/&%)./.025 !"<:;:;;<<;:::9:;<;:<@AA?<86310124557643443221100/1221//012322343332120--.--/11012344247;=>> """###$+%##$#"DCB =<!""###$$$%%$%%#"$#!!$$"!  !"#"#"!! 99::::987 6677785567H !##" 877788752.,)')-1441.*('&%%&)*+,+*)(((*..--,,,-,-02232211000/01101236777899;;;<:88999:;<=<<;;;:988765554345456*5544568:9986665432211233456788877789977641/.-..-../0 2344556788765 +67887754330//1222358:83//12468;>ADG(2ARWPE7+&+7HVZVFa:%$'*,/2555444543224566655;)GmL`molfa`bbfmpnf^\]ZRH@6ZJ>9?wuxlU>;@4FG^Faoe4Id>.5CME4TLP-.17<>GU\eBVZVVQ>SHVjaMO_YJB2:01-(+/147  "##!777653466543106#0AK+6>>=8338::=>80(HGN08735889<=;6WJIGDFGLSYVRSUXZVRRX/121YK@?IW`22ca]P@.=-)++)((*+++*)((*,/220.,+-/233321//./0/036876554 32/(! !$$$%&&'&&&%$$###"""!"!!! J0/02221//01221/...-+*++*)*++)(&%$$%&%$$%'&&%$$%$$%&&%$$#""!!  !##$$&'(&&%%&''%$##$&('%$%&&'('()('(+,++0=A<9977;>;;;:;:7-" "(04[3002444876789986652112332331/0220/2@R^df`TT^[9H$&((''()))+,,-,-,.0110/.,++*+**+)''(+--..//012 !"!#$#!#(+''&%%&&$" %2;?@@==<<:8 !###$   "(+0347:<=>??=:3*(0; #% $#""#$$$#" "#$"""!  !G " "! #'()(%$$%$#"##"  !  !$&#-  + + b #,)% "',///16>"##EEDB?=;:76:?A@<:60,&"C::>A@BBӦڜ +74!1   J!iM90)'(*/.+)'%$$$%&'())*++,-,*(%  + + +   +    + +  +  +  + + + +  + + + + + + +  + + + + +  + +  + + + +  + + !    + +  + +  + +  + +      ) + + +      +  +=$/1,#(372&. K0Q8FLKHD@@CDHMQPIA??<4+%."#''*..2RG-227CKOKJQWUE427=@C?508FVis7^NXjlf_coxxqhgp>AA??ABA@|smhd]VOIDCB;BLQ+/,NJIHHK)*ONNB2$"% /'8?8&1$*%($( &/16&56330#,$/=5'&/+"  e + + + + + + + $ "'++()*,-+*+.+#!*2320+" + + + + + + +     + +  + + + + +   +   +    +$ + +   + +"/6:95.075 }~}~}~}~}~}~}| {{{|}}~~~~}~}~}~}~}~}}}~~}}~}~~}~}~}~}~}~~}}~}~~~~~~}}|} )rþéۊ~Ӷ¤˻]3/' +  MQɾ󋓔Z¿.WʹQÄԘֶْΘɾطȯɺWQA2'!  +  + 7ξײƼڸخֳȽȔӦͭ¾釥񒥪߂ꖜ³솋ę۶¿3¿hϖ-.- .-,-014663234422454332331/-./01/013368899::8668:988777866:;::;=ACEGJK%$$GHHGIMSTOLMSRKIGFHHFEFHECA@@ACKW^`bedcb``01aXR-11000233212443356668756688989<<<=@BA6>6-'$#>:>!?75=IRWXVSQQRTQNMONE4-7.@A98???>?>=>>94578:<=<<;::;9763125664457:;<==91))/7>CCA>==@CDDDGGEDCAABBAABA=;=?ABDEFHIJKMNNLIEA>:7656;@DCA>;eL7///../.--./0048=<===>>>=>=>=>>>==>==>=>=>???>===>>>=>??>=>>>==>? >??@?@???>=>?>>?@@?@?@A@@A@@@?@??@@@???@A@@?@ABA@AA@@A@@AA@AAA@@A@@ABABAABxSfF;<=;;>@?>>??<:9:<>>==?BB@@?<82000/.,+,18;98;959CI:.,162,*,.15888965556!""!"""! ""! "" !!!""$&'&&&')*'$" !#$$$# "#$#$'**&##"! <<>"%$   !!""#$"#%%$" ! ! ( !##""!"#" >>>8/('-00-1?)/.-,($$%&%''&%$#!"EC@><<>=;::<>?@?>==>==>@A@>;86665B4565655422431012244221001100/03544320.03443357764310247999:>C##"!! !#$%%$"!!A@B!!"#$$$#$%&''&%$#"!  0.5!##$"""##"!"#"! "97766788877666555455446654445656c730/../.-,*)+,--/0121/-*%! #(-0/.,**-/1211100/--///00/./0012123200/1231.---/021236776788[;98776789:::;;::9::976677666556778899;9899:9998877766533311002345678887899987543322210/ +02456765554222100134465331//0/.--.14689974"789<>>D3FB;9=@4->]ncAF(!#'*-/121234J3467778:;:78+SJcnoia^^dgjlkjb\YRG9R;-(*3CYjqngXDqgmt<=CLUY_jt}`gd\URQRS RSSSTTSSRRSTRSTUTTSSTUTTTSSTUS TSRQQRSSSRSRSRQRRRSSRRSSSRSRSTTSSSRRRQPPRRQQRRQ PPPQQRQQPOPQPPQPPQQQPQPOPPPQQPPQPPOOPQPQPPPOOPONOONMNNNOONNNONMNMNMLLLMLMLLLMMMLMMMNNMKKLKLKLKKLMLKJKKJ KJJKJKKJJKIHHIJKKJIIJI HHHIHHHIHHHIHIHI +HIIIHGGGHIHGHHGFGHHGFFFGFEEEFFGGFFFEEFFEEEFFGFEDEED EEDDDEEEDE +CDEFDDEDEEDCDEDEEDQr}p__l}vsfYVNKUcpusrsuvoe__ZTVYVIHWvoqvpgh|WXVPSRZhkb[Rxyljruvw|DI}wrqwzyqhoj]`S@?@B4@iUB6Q9AF5SN JG2&MbZR_>WgYVG]RKB;nXCHIS0&'('(*,/3678<  !"$$"!! 766530.+,/2453/*(,.>Q4;<7-G;C,5889:989:876324672+NP+MDZ?>1U]560PA0-.-,+++,,,-03431.---.01221&32.-.1579:99765665554441-& #$')))('''& +%$#"""! !! ^00..00/-,,,++***+*)(((''()*+('&&%%&%$%$#$$##""!!"#$#"!!#" !"$%%$$%&&%$$""#$##$$&&%$%%&''(''&&'''(''()('()))+,,,..05<=97789=A<8899;95-%"! !"(/32110/023457887886541.-.123331/,+-./0>T`bca^[^fV2%'('&&()*++*,-.-,,-0100/--,+**++*+*)*-,,-,)))+,,+, >!!!#)*'$&+,)&$%%$#!"#! #)4;<>@@@><;80. ? "!""%'&#   )/356457864565+&!.*"!%'('''&$#"!""$#g""#" "###!! !"""#"#((&$"#%()))*+)('&&&$#$&$  !"##$$%%'((&$!! * Y !%$!!!$(+-..058<!">868:=A@?B##C?9.# ;877=>;=FLP[ץ=5A# = L1:*핛U8/+*,/0//-,+(&%%')*(&)++'&#    + +    +   +  +  +    +   +  + + + + + + + +% +  )       + +     +     +  +   + M(#!"$:E:! + <:KPPIA?AEHJKKID>92(#*8DKKE:0RJOU+,1:BCGS_mՁ ӄҀʄʅʅ ą$ń Na\VG=?HWa]TS`cMCA95=ITXVVVYZSKGEA=ACA5]4aY>V]^`f[NPRkNGFXtAB?sqv=A@jpEQSKE=ng\U[]UKIONNLO-0UPMKLPQQJBFA9;0!"#$>."&!#"  ,;606#19-))90+$!=.!&%#   i + +  + + + "#$$&&*'*/)%#$+13.((,( + +   +  + + +    + + + + +  + + +      + + +  + B$3:::9759@2 }~}~~}}}~}}}~}~}~}~}|{{|}~~~~}~}~}~}~}~}~}~}~}~}}~}~~}~ ~~~~}}} 􀄇`ꉕ¸ǵͼ#ö^\/0,  !LȿD¿*R»̀။ǽ?=5.&!    "<ɸÿ׻󌍌ͳз̬ӀõҏÝӴލ샎ȡǴÿƷ +;½ж,+*+,-,+,--,*('(*,/0///.-././/./.-**+X,-//0//024434357779:866789976679:<>?@@C"$%%$%&ORRRTYSHDACGKMJIIFEDB@>>AMY]^`abb`a_[VW0332355312478877766689:;:;<>AA>:3,K@9678876??>==>>==<;;96578;<<:85568;<;9768876799644:?=<>>?@BBCCABA@ADEEDCBBBCCBBCCA>;<@EHIJLNPQQQPONMLHC?<:999rokbVOKHB?>=:7678=>=>>?>==>=>=>==>?>==>>>???>>>??>=>>=>???>>??>??>?>?@@?>?@?@?@A@@@???@ A@@@AA@@@A@A@@@AA@??@A +BAA@ABBAABABABC!BAAACC@liLDDFFDB?==<:9:>?=<=>GX/.0WOMOPMJG?889;;:889;>B@721220..-.036899632359!"!!""5 !"$$##""#$H#$$%%#"$&$"###$$$%&&'(('&&%$$#"! 978!%%  !  !""!"#$%%$%$#!  !!  !!###$#" ><:961-()/13=;:9::61-+($"!"#%(+,/112201211001245433210/.023334432110101211/..011235678766:876567789: +986577667789;=>=<;<=<:::9766676432223345789::99:%8766555433222323445554432334446656542091232211012100/135666898643456799C.71-299661N6('*+-.02455312223445667:MBtSafc^Z\bdGb[OC;3PA75:BIR][RPJ=1`cg;DJKNRU[et~LTVUVTSSTUUTTTSTTTSRSTTSTSSTSSRSTUTSSTTTUUTTTRSSRRS RRTUTRSTSRSSTTSRSSSRRSSTSRSTSSTSRRRQQRQRQPQ RRQQPPPQPPPOPOPPQQPOPONOPONOONNONO NNNMMMNNNOONMNMMNMNMMNNMMNMMNMLMLMNNMLLKKKLMLKLKJKJJKKKLKJJKKJIJIIJJIHIIHIHHIIHHHIIHHIIHIIHHIHHHIIIHGH GGHHHGHHHGGGHGFG +FFFGFEFFGGFEEFFFEFEDDEEEDEDDEDDEEEDEDEDEDEDBO~|mmrxsffpnkofY_hilszz{xqk^LGNY^\TH\l[eRUXZYVRXXVZ`hg_[Ugcs}}{}}|E|yy~BA?>w]IRZMJRDL9cB>5Q@9-;+%$2&),2H=LOQNIGC:SYeLu[G6&EMD/(()*)*+***,159;< !  +!#$##""78887^540./0/..-+)&&*90M5CKIA;:84138;>;768;:65679=;4YPL-;<0-3994.TRVXZ//[RJJU28?BA>;7dadhhaP:N5./00/0/.-+**+,-.//00/012235789::98765430*&')***)(((''&&%%$#"!!  3420/011233.*(''&%$%&'&&''&%&%$"  !   !#$&&%$#"! !#%%&%$$%&'&&''&&&''&&&%&%&'("*,,+,,+,/6<:1.0334679876784/*'%" ;!&-00/100220256887875320-,.0233.*%%).6DS^ceec_YWL0B!$%&'((*+,,.-,,../...---,++,,+,./.-,+,-.- *  %(**,/,&" "%&%$$#"! !,8<>?>><955L  !  !"$&&$ ",2357647:9894-)0!(*($$&)*+*(&#!#$#"#""!  "!  "!  !""!%$$%$%&')*+**)))+,,*('''&%$""!  "#$%%&()(('%%$# ,)(" !""#%'%f#%'))*,.00025:<;::99<=<97652) =;632695/0208CPeꃊ +<  " ' dR=642320-,*(&&'(&&%#'30)()*)(&! + + +       + + + + + + + + +   +  + + + + +  + +  + + + + +  ! """!    + + +  +  + +      + + + + + + +  5 +   + +  + + + + +93"G*.V>HLIEBDIKKJGD=3)#(!$%-9;787/'KMR.467:>BJWgxЁ̈́ քք#ӄ҄҄Ӆ/ʄʄ˄ʄDŽDŽ Äą„N 3ȁ{hXJJOVbj_TGGMMMRKAFLMNT[]]YUPE73:CHE>4Z`Dalfgkja^a^N?Ig>?BDDB>goDDBFKPOGD?aDANVVUW][SQV-VRPOPU,+))N8*05+(-#"0"!) ! $%2330+(#19?,>.""    + + + P   &%(" )),,+-(##*!#" 313553)! + + + +   + + +  + + + +      + + +  +F +&2:==<<;63*  }~}~}~}|}}~~~~}~}~}~}~}~}~}~}~}~}~}~}~}~}}~}~~}~~~~~}}|} ýÿɻٻ憚B3  + +  QLXȼľ'̾.τ{Ћ«Ͻ̕༟ۀĿzk1,($"  + +":Ļé񁃂޲ßʼn΀ü˘џج¿«􂁁գѼÿƿ?¿@Νq/..0101232223420/02210./1/-,-,)(&'(),--,*)&&()(()(())*,--./.,-//.037::;;:;<=?<;<;8:AFFDA@C$%%),+*++,WQIDABEGGFCCEGiDBEINVZ\_`_^^^`a246789854433210147;;97765357:<===>=;9862/P=11039=BFLPRSTWY]c4hZGA)?JHA;9;>@ACB?;9779:88;;<==>>==;::;:646655668989730./14:?@?><::>@ABCBACDA>==>@BCCBAACEEEGIJLQSTTTRQPPQTSPNJDA>;rib]XXYTPRVZ\ZVTSQRTRSTSRSVWWZ]^][Z_gmomiiigeegf]QLKKIFEE@:8lgbgkZDEP]b_TP]:FNSŠ_q8787797899878878788787877888788788777888787766788787888787878987887778999888788899988878878887778988898998999:9898989888999898 999888998889899989899:9889:9899:::989:9:9:::999::999:::;;::99:::99::;:9989;;;:9::;;:::;;;:9:; :99:::9::;;:9::;::; +<;;;<;;;<<;:;:;< +;;;<<;;;<<;<<;;;<;;<=<=<==<<===<;;<<=>==>>=<=>=>>>=>>>=>>=>=>?>?>==>>>?>??>>>?>??>?@@AA?@@@?@@??@ ?@@@??@@A@ ??@@@ABAAABA@ABBAA@@AA@@A@@@AA@ABBBABABBBAABA@ABBCCBCBCAACBAChUGGHIID?:875558<:88886653*$(4J-+),131+ 6;""!""#$#EEFHGECAABDFEBABB@===<=<;;;<;863369<<855544322322112(10/000//011366642454357:?AABBA?>>=<;:998765579=A"#%''%$""##"""!"!  !    >6544 """##"4 668875446642223332 1/01122234:667666789!! 545 "##" ##"#">4+&! !!#%&(,0246778863455445556754310012355423323332112110245679::8655444554468:;<<=<:998789:(9789::;:999;<;<<<;:766654543455689:;:::91;:8766543222345664466555689986655334433100/..///01v00135644454333423656>1Rf]N8G/+/2322244556899886422443225LQJgqja[ZbmmdZQLG?dG1$!"'2<=5VF:=AIW9ERVVXZ^cegjnt{KPUVWVVUTSTTUTTUSTTUTSTUTSTUUTSSRSTUSTSRSTSSTTS TSRRRSRQQQRRQRSRRRQQRRRQQQRRRQQQPPQPPQPPPQQQPQQQPOOPPPQPPQQPONOPONOPOOPO +NOONOONNOONOOONNOONNMLLLMNMNONMMLLMNM LMMMNNMLLLMLKLMMMLKLLLMLLLKKLMLKLLKLKJKJKJJIJJJIIJKJIIJJJIIIHHIHIIIH IIHGGHIIIHGGHIIHGFGHGHGHGFFHHGGFGFFGFGFEFFEEEDDDEDEEDDDEEED EEDEEEDEEDDCDC DEEEDDCDDEFDAM{pjrVQ|n\Y``bklhhotumiomUFMRSJJ[s||xxRRV]^YROW]]_a`[YVVVYO_ov{~zsp{CECB@gG>HKA3OC?,6#@J/5((*-/2)0,(%-2_jaZXSMSFe[D]=50@)#$$%&'(*++)),27"#" 88743666889886421/,+-..-+))*(&!9>5GMKID?93:IF<888753699<@AA=<;;:8884/01/165323552_^]]036774YOS\145khU9&!60/011/-+*)))*,--,-/11122244359;;:98666431.*)*)6('%$$%&%$$$#"!!! 221100012320.+)++)'$#$$%%$#! !  !"##"" =!"#%$! ! !! !!!"#$$%%&'&$$##"! ! !#$$$%&&%#"!!"&(())'%%&'&%%&&&'&%&((('!((**,/232-./../.++.2589962-'$#! !).//-,053476+4211.././/-*'+0;HRY_cddefZ>H48>!$&')**+*+,././00//-./110/.-++.00/---././   !"#" ,)# "%%%$"!$).6Oɧ䀇 +  j + ) %YEhF<98:73.*(&%$$$%%,1.*'$ +  + +    + + + + + +. +  + + +   +  + +  + + + + # + +   "  "!"$%"! !!  + +   +    +         + + +  +  + +  + + + + + +%8E:+ -?=RYQIEGQ\\SHA<7.C* &(!2'#*/2=(1;??=>AEKUdx玩؄<фф҆ ЄĀ̄ DŽ7†gycXOKP\q@?ACD:#! }~}~}~}~}|}|}~~~}~}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~~}~~~~~~~~~~~~}}|} ۂxľѿ»~=2 k!LNµրT􁄆Ŀ¿*CڡʔނáѱF9/'#!!!      !>żꀄʻЩ톅лֶӡⵀ̄޹۬ʣ󙚌鼍͹퀉ľˋϟͻՀҴÏθĿ¼6789;::;<=<;::87778886542110/-z,*)*,-,+)++)()))('(*--./---,,,-./0/,,,+++.258;744556655678764222332123454335888750)O.6;=<<>??;99:;;<==<>ACCA>:88;BINOQPLHECBCFKOPQPNIC?CLT SO[n988877878877888788788878787787888787778777877788878787787878789988998788989898 9989989998988998898899889888989:99:9:98989::99:99:9:989::9 +::9:::99:;:9:;:99:;:;:;:;<;:;:;:;<<;;;<; +<<<;;;<;;;< ==<<;<<<;<=<=<===<=>>==>=>==>=>=>=>?>=>==>?@?>?>? @?>?@@?@@?>?@@@??@A@??@?@A@A@A@ABBBA@ABABBAABAABBABrCCCBBBCCBCCBCBAABC@oPdNMPMHC=:96422354-+9(04676322320.-,WQLF@???>>A=66;= 411.,-/--,,.//049   !"#:$&&'&&''(*)&"!"""#$$$%'()(())(%"!! ;:!&(%8 !!  !###""! !!  !!!"$&&#!   !!!#%%#!=::973,##,8G()),/.'22; !!!"#$#EFHJIGC@ACGHEA@@A@=<==<;;:985678:8522455676542232101220/1100232331100243454458:AFDBA?>=:8656544467::;= #'*)'%$"! ! !""! !!!""!!   !5/)*06 ! 3346888654333210001112220/00012322110112224E567 !! 6!" 70.-,)&$##&+.02235776787644333456555654213544332110//1+0100124798778777::99::9865566678:;<=<;;:;;::9:::99:;:877678879988875 +677788<<;<;::8767875544566799:9876545420/...---.02101345431134556A=dcAI1.169; :::<== @;;<;=)B{avulecccba]VJxc[U=%@F)2:<95159::=>?@DLPSYgt{QSUVTTVVUTUUTTSSSTUTUUTUTTUTSTUUUTS TUSRSUUTUTTTS +TTTSSRRRSSTUTSRSSRQ RSRQQRRRSRSSSRQQRRQPQRQPQPPRRQQQPOOPOONNNONOPPOONNNOONOONOOONNOONNONNOONMNONMNNNMNMLMLMLLLMLKLLKKLLLKLLLKLMMLLLKLLLKKJKJIIJKKJJKJJIIIJIIIJIIIJI +JIIHHHIIIHIJIHGHIHHIHGHHGHHGGHHGFGFFFGGFFFEF EFFEFEDDDEDEEEDCD +EEDDEEDDDEDED@Rummq}QSyqiiwzrruuk`__WKGJKGCVr~|`T\`^lRQQ\^_^^^][Z[_a_[WSMkZV]ht}}upwGEB}fM>AO?B/69@/:fFH($%):08T:@/,'#&GE[]]ZF>eIMElP6P@2'%$$%%&(*-027 !"#$#"! 66411124z78766777677653210/,*((**(&%$##"!%"?7OTSRG10DNOX_VI?9889614:998537=DB:1VU-01127:85310100^\XQC43>==;:97543431.,,,+*)('&% $$#""!!'42333211100/...,*))++)''(&###%&&'%#"!I "$$! ""!!""#""! !""!!! !"$%%%$###$%'&$#"!!!"! !!!"#$###$##"""!  #%& %%%$$$%%$$#$%&'(('&''))*++,-,+*))*,./035799850,*&#""(+,,+),26788766641///...,+-1789BLTY_bceg^9=7?"$&)*+/000/01333433444566531024664112211222344345546<!'-/0 "#! "$&'()(')-2:>BCCBA@ !#$$!!"! 7 ""#&(% %,39840-,($" !!0+($  + +  + + + +    + + + +  +      + + +  + +O + + +  + +  + +   "   !"#%&&" !%%"  "   +  + +   + +   + +  +&      !  + + +  + +      +  + + + 'F@" s0aN_\TNLNNMMKD:[IB;&!!"  $%$')+-277653784^1AVeaZ^YB9@C@Jf==peag,"%.!#:" ' (:<:6&8+.(=+% +   + +  + + + + + / + +  ),*(!%'-2+":!!$$.+*'#14./0' + + + +  +    + +  + + + + + +         7 + + + +    "!*15;?ACF= }~~~}~}~}~}~}|}|}~~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~} ~~~}}~~~}}~~}~}~}~}~}~~}~~~~~~}}|} ԺϵϺɺ스ıU2. JQò󌍇ü)ꁅȀ{߃މՔıúQ@1)$"!! !!  +      !Aн̾ƽҪ֒NJn֤ȾӲݨۥĬի]ü¿OƿѨ􁉑835545568:;=<:<<::=>=>?><976431/-,+*('*./.-+*)'')+-./014421.,+++*((*,*)2ET142*G#%(-0/-+)('('&%FEFGHHGEEFHJLNRSQNLNMHIQ^fjkhfff3579985334554478765443346799879;<<=@A;4YMGEGILQY\\][Z_eea\0:@>6/.3679;;<;7420../02344322210001100/-,+,-./121/-/0-RP,2422;EF?;:::;;851/-+/36786238=?=;::>===<<= <;;<;;<<==<<=<=<;;<<===<= <<==>===>=>=>?>?@@?>>>?>==>>?>?@???>>>?@?@AA@??@?@?@ ?@AAA@AAA@A +@@AAA@@AABA@AA@@@AABBBAAABBABCBABCCBCBABSAwWiGGMLC<<<:85233451)(2J/1.+MC?<:61+*+**-027<>=97;@"! 831/,*))+19642/...05   !"!!!"""#$%8&%%'()'###"!"""$%&''((())'$$%" !!"! !"##! "##! !"#%'($! D!#$!:99751,)*,,-2=H+,%>94/4 !!"##EG%&&$FFEFGIHDAA@?><;:;;;:9778767 6310343467642 11233220///0238446656656789;; !@=B0[K^efgiigc]WIulopi\WZN;69?FE<:?B>:>C@ETRLLOS\j[\[XTUVUTUTSTTUUUTUUUTSTUTTTUUT VWVUVUSSTTSTVUTSTUVVUSSTTUTTSTTSSRRSTTST,UTTSSRSUTSRSTSSRSSRQQQRQQRSSSRSRQRRQQRRQRRRQRQRRSRQ PPQQRPPPQQQPQ"PPQPPPOPQQQOOPPPONNOOPPONOPOOONOOOPONNOOONONNMOPNONMMNNMMMNMNONNMNMLNNNONMMLLLMMMLKLLML MLKKKLLLKLMLMLKKJKKKLLKJJKKJJJKKJJJIIJKJJJKKKJIJIHHHIIIHHJJIIIJJHIHIHGGGHHGHIHGHGHGFGFEEFGFEEEFFFEEFFFEF DEFFFEEEDEDEDEEDEDDCD EEDDDCCDEDEFFEFEBV}ojmpwz{{z{wmghiR{BHIJHL]sseXQRRVjVRNNPOOYb\X_a[Y_cb^VROLf]]_jsvyE{zwuLLHfG7+-Wr>{jbNP.)(&%$$%&'+03567212334421123323876310/0134556765_3210/.,***))(&%$""! *,)DY`WG;BXdc]WA05::<;;CKEBHKECGKJF@=;9jZF>>?GMOQZ1]WTQO]564[B*"/5 !!##-#&% *%40$6G'J=9,$ + + +     + + +  + + S .3,"+21.*$+%!#(.0-(&(+,,( ".3"   + +  + + + +  +  + +    + + +   &$#-16:AEA/5 }~}~}~}~}~}|}}|||}|}|}|}~~~~}~}~}~}~}~}~}~}~}~}~}~}~}~~}}~~~}~}~}~~}~~~}~}~}}~}}}~~~~~~~~~~~}}|} ¾󁄁􆑛׾λꅌɺ[1  +S#Oľ k؄׀¾ ;½郦܊(SH7,%!   +#@²Ĭꆖܨꤕ뚃;μ򆌮􃉊ܜƼŹϯÿý!xǸ 0135765689:99::999;<;;:852/.-e.//.+('('()+-/01232101112323101221110/04>EKRW/0+LH%%&'(+-.,*'%&'''$DBCCDEEEGIJKN))QMJGECBJV_ek6655446768:;;:;;::<><;;:9853342a[URPOU/234678:;=;86433210+KG,3431/].[[YVUWZYVUUTTSPMKKJMTWVUVTRPLJJLNMJD?AK[]PHM/9ACCCB?>===<<853443236:= =;8668=?ABCDEjC{m_TSTSPIA>>CFFDDFEB>qggidb`^]_bflqwvqlkqpmkmorsw{zvvx||XVV\doy{qf[X[WUW\adc]XKPWZVPK~qi;:988998887787778787887878998878787877788878788789898787878778987899987888789889889989998988898 9998889988898989 +88899:999:9:99:::989::999:9:;:9:989:::;;:::99;:;:;:9:;;:;;<<;:; <<<;;;:::;<;<;<=<=<=<=<=<<==<=<<=>>==>===>>=>>=>=<==<<=>=>?>?>>>??>???>>>?@@??>?@@?@?@?@??@@??@A@AA@@A@A@ABA@A@ +ABAAA@ABBBABABABCBBCCB)CCBC?bZOLE=<<;:743113567=B<764.+.14553/+)(*,-046778:97687431/-,/1465666310/-1!!!#$##$##$$$%''(&#"#$#"$%&'''&'()'%#! 88!#" 9  ""! !" !  !#$&&$"!! `! ;741/012110/.5A"?=;73/3>"#""CE$$FEGIJKJGEDECA?<;::;;;:;;;:;:9879;;7544699852221122112322123"47:;:876559?BFJFB@?=;::9988777633434688767: ##""! !  !"" !" 541,*-16;965654200/01 01243110/...-N..--.//0//114984/+)&###"!$%&&')-2579;::86445454454443322355675431/,),044331110122101346788899:: :889::998::89988876678:;:965556664445666766554676665554456667779;<=?>>>=;;;::;:;;:;<= =<;98889887664443331100/.-.02345677898998768>K0;_6NE=7A@A(?fH\ggecc`[TLF}odYZ^\UMGEIJA742`05BJMKIMONLKRf[`]YVUUVVVUUVWVUVVUUUTUTTUTUUTTUTTSSTUUUTSSTTTSTSRSSRSUTUTUTTSTTSRQRSRRRQQRRQRRRQPQRQPQPQQPOPQPOOOPOPOPOPPONONON OONNNMMMNNONMMNNMNMMNMLMMMNMMMNMLKKMMLLKLLLKLKLLKLLMLKKJJKLLKLLKKKJKKJIJKJIIJIHIJJJIIJKKJIJIJIIIJI HIIHHHIIHIIHIHIHHHIIHHHGHHHGGHIHHHGHHGFGFEF EEFFFEFFEEEFEFEFFFE DEEEDDEEDDEDEDCDEFGCT~|sqqqs|{~|n`ak`Chh|IXn~n[K{@^R^a`XUVPYceccghb[VRMMLg_cjjcgyzvvuwHIuO85:W>KQ1,=U\c9\5+,X5BG8H60.+('((&'6M,-=R\srV_][*$%&'()*+./0247 546876678 "" 777520///033445433210/-+*))(('&&%%###"!!)*UCTTKILFA=75?;63/UNOVY[\[[]`YHBJR]cb^R@-=1.//0021100022014789:<;:988878752/-,,+*)(('&&%%$$#"! K54433212320.,+*)))*(%#! #%$###"!    !"" ! !!   !! !"!!"d##$%%%$#$#$'+*%! !#&&%%%&'),---..--.-)'''$#! &*+-/24431.,)&$##&(&&.;GMKJOTVTSQ?T=9?C%')+--./02211101211232012355322465554455434530 !%+/36%! "!%$###"#+6=BH%%%#"!"##""!! o!$%%&&'&%%&%%%$$"! !!;71-+*/!"%&(*++*(&%#"! -*!""! ?==<:9;<<;998862.-,*-1432110-*)))++)%!#)35,&) ')++*)('%"  !"""!!!4* &"! ""#!!#! %&&)-103:>D&%$)/6<>91)" ! "',//-*MNW\\\`]U).2210=0_oՅ& +@,   CTsOD:1/.,*'$"  !&# *   +  +  + + + +  +  + +    + + +  + +  '   ##$&'('$"!!! !    +  + + +  + + +  + +   +      +    +! + + +"$# `  /P8HQPNNMLGA:4c_UMDBEC:2-+-,%5*/32134578Eg։ۄ8ՅՆ фцхЄЄ;ȆDŽ"Ņą1څphkda`WTSSU`khc`\_c[X^ZNEGOF.DEX4@S`a```aefbb`O@0J'?_=IMMEqrAB=DMMKKMNIC@=998YE>BHGBGTXTSRQS]55P1! $2 */,/4 5!&"%  %$17II298/    + + + + + + + + + + ] )",)#  !#$$ '%&*---,,./+!#(/321+    + +    + +  +  + +  +  + + ; + + +   )-,+-26774%,! }~~~}}~}~}~}~}~}~}~}|}|}|||}~~}~}~}~}~}~}}~~}~}~}~}~}~}~}~}~}~}~}~~}~~~~~~~~~~}}|} *½邂ſ煙édϿ߅Z4   +"T̻Ľy?.ȷh蛰وĆ汣¯TA.$    +  0سĽ茜ڡÜΟ=ښ༩瞙ǚȌ䗨ŲĹǯλ¿_ƽí,3477789::9:::98889<<:89898764/**-156311//,))*()+,,,+)*+,./.../0257::=N13`ZWW\,NGEH&''%')+,+('&&)+(G???@@ABBEGJJKKLLKJFDDHT]_bg6775336898776789:<@DFC@=<<:7321110001b`_/0WT/8BHHDBBA<6a]ZWVWXXWSNHFMUVTQQPRQONOOMKJGEB=996146559>>@?<;5//012/-.21+G=A(1;FKOW_37:=ADB=:855>HKKKIGA:429FRXZ\XNl[NGCD|nmw{xt\wxvqnpnjgfgijigqpoploqsuvxxtrxz|Xdhhilruqlgbacfgfhlqohgjnuyvokfba_][YUl><;:98 788877667787878789987877888778787787778877888777878987898787787898987898889998778889 8899889998889889989898 999889998889:99888989989 898999899:999:9:9::9:99:::9:999:;:;:9:;::;;:;;:;: +9:;;;:;;::; +:::;;;<;;:;:;:;<=<<;<;<<<==<;<;< =<;<=<=<<<;<===<<==<=>=<<=>=>=>>=>=<=>=>>>===??>=>>>==>??>???>==>???>>?>>???>>?@? >>>??>???@?@ ?@@??@@AA?@A@@AAA@ABA@A@ABA@A@@@ABBAABCBCBCBBBCCBCCBCCCBBBCCCBBABAn[PMGB?>><7311127BNVYVN@879<<;85/(&())***.//13323565420-*+-17=966520,''-5 !#$#"###$#"$&''$###$%$#""#%!('&(*)(((*(" !! ;9998!""!87;  !"! !#$$"!!!#$&%"! !!"!! 78545421243/--./1247::43:==;;>BCEFGGIJJHDBCB@??=;<==<:;;::88878@7555433343114422467766654556776677865=FB?@>:7544578999:98897433324655543&  :987433446765651//46554r56753444200//0221100012221233111/.-,+*+,-.---.1334677654454666730*" "$&''(-37678994A44565455433344332234446887775320.-147873111220/1246665566777788<:89:;;:;;:9765456556554578:;::9::999766555333468765554654566679::;<==<;;  ""! ><<:9877765410/0010//..123555667887976G:JE;;H9&#%(,..*('$#$(.1.-,)&#!<<*NCZffccaYSQQPOKuVHFP[bfcSG@>DJKHHJRYXNEBDA9_Zdfe[VTUVVVUV +UVVUTUVUUTUTU +TUUTUUUVVVU VVUVUTUUUVUUTSTUTSRRTSTUVVUTTUTUUTTTSRRS RSSRRSTSRSRQRRQRRRQRSRQQRQPPQQRRRQQQPPQQPPQQPPQPQQPOOPOP OOOPPOPQQPPPOPPPOOOPQPPONOPQQPPOP ONNOONONOONONMNNNONNONONMMNMMMLMMNNM NMMLLLKKKLKLMKKLLKLKKJJJKJJKJJJKLKKLKJIJIJI HHHIJJJIIIHIIHIIJJIHIHGHGFFFGGGFGFEEF GGFEEEFGGFEDEEFE +DEDEEDDEEEDEEEDDEDCCDDDCDDEDDEFEEEFFECM~x~~jbrttx|ytng]SWMqrQbZUe}yzSPWF8NHV_`_WpUahkihffgfb]YTOJx_V]mtt|ykimoyHyJ89M7^5#5I4/J__e:9S8)5<6A2U-_S=.)'&%%%&1K=;5Gq?f_CF&&,1.,--/00124677 !"# 677876650+*-100/.-,+*) ('&&'&%%$#f"!'%C.42/.260'+4=Na`VKAA;34767514AECA??A=6459<:4.-0110.Z[/00/^_0134f`XP?'5.022331//02223578:<<;:98776531/-,,-,+*(('&%$#! .87410221/.-+)('((()(&$###  !  +77324554357 !"Z##""&)("!%$""!!"%&&()**('''%%&$"!12"&'+01.--,(&%$#! #'1CPW[SMQSQK6:)/8@F&)+,,,--./01/0/.0122231/01343332466766656787799764554  .95225'   """#! "&/8<>D%&&$"!"#$$"#$&)+,*(&&&%#  !B@=1.!*020//.*&C@?=;:<<:72..27:98999866675530.+'$# #$%%#"*#'$-/15;!#&(,.,(%# '.0/.*'"%-244-$5)^$! !*-+()&%"!#" "DFFFG%&%$$IGJ&&&'()'$$(+-2445;AC(/0011440-(%$$$%&).21..14:>>:75342/boʀ2(  4]'t$;qOB70..,)&"$-5971' "##!$  +  +  +% + + + + + + + +   + +  + + +  +  + + +  + +   - "#$&'(&#!! 2!  + +       3  + + + + + + + +  +   + +  + +T %#-&(   ;5GONKKIE@H?9S<36AGJKF81,(*-.,,.5::2*(**$;=i]ܛ܄!؄+؅ӄքjˈLJƅńÅÄe%؉oaa_]dngOITUTY]fqme\VSPKC:<4LR>JA=I\mlf^VV`lv?=h;*!56BIIHAbQgBLPQONMNOMJFC?;5TA:>JOOTYQFEHJTa3R."" 20)(545*$+2( $"!&D'?:($ + +  + + P  %//'" --0050+(     +   + +    + + +    + +    A  + + +  +  +  %/694/3640 ",}~}~}~}~}}}~~}}~}|}~}|{|{|}|||}~~}~}~}~}~}}~}~}~}~}~}~}~}~}~}~}~}}~~~}}}~~~ ~~~~~~~~}|}|}|}|} ÿ􁅇8􀅆Ÿ􀆌󂎔ͤǽPևšV1.    +!Qúÿſ˿J&-ºϰЎ²㬓݄I<0'"!      +    + +_¼羲ʝʹ籄ѵߚÑ醱Ҥ۹Ɂ֤½ʷǸ;¿* ïdz!446897667779;:86679987665430-+)*,.9-+(# #&&%%')*+,--./0121127=FOUY-16;:4-TPRVYRFDI'((&&())('),*F@AAAB.DGHGGIKMOPKHIKOV/12467877899878;=?@???>>:4112101]cd2467b\16985j576d[VUTRPPPQQQONNLLLNOMJIKHDC@<840/.,+)OMLJIIKNPPNMIC=?@AHR]i;BB@ADHLONJr[Hxw|}{}}|~~|yy{|tqnrrppwxttxwwx}Tfnopnmllgb^`b_]bhffhhkmjkoqkegpojga]Y i~@?>==<;:::987878777878 778877888778777887887877877888789989878987878887898999889898878889 8887898889998989899::989::9889:9:9:9:::99:9 ::999::99:9:;:;;:;:;<;;:;:;:; <<;;<<<;;::;:;:;<;<=<<<;<=<=<===<<;<<=<=<=<=>=>==>=>?>=>=>?@?>?@? @???@???@@A@A@A@A@AAA@@@A@A@ABBBABBABABCBABCBCDBCBCBCDDCcDCCBBBCAlaMJIFDEGFBA?<99;?CFDA??>?@?>=:50+(('&')-6?>9789;;7530.*(+/158:9885/(',0469  !"##" +$%%%#"!!"#$#%'))&#""%'('$! ! :8668 "#!; &9:!#$# !#&%" !"""!!!"#$#! !:753323685+'+2:@!"#=2/7>>;:9:?>>?=;;<>@?=<::9876677531158643469:87778754553v55479998753113689:<<:8654321/-+++**)))*)),.15686556444212410355433112479 9652/-.13321/./234565420///-,,-../011223320/0,10...00..0223565453344544468778::81+&! !"##$'+4 :656754322324545654322100245543210/02235776667/>:89:;;:99864555665445568 97755653445588765544577899::; ! !"$###! ?=<;:965420,**,--/122343123468;::K8PddZWTB-%'*+-+'# ;:;;;$*+'#"%2VGcqqoqo`OHEzi_UA13BR_]TH?=BIKE>?C?]>.*/?[:ADFPh +U[[WUTVWVWVUVUVUVUVVWVUUVVVUTVUTTTUVUTUUTTSTSTUUUTTUTSSTSRSRQRQQRQRQQPPPQRQPQRQPPQQRRRQQPQPPOOPOOOP OPPPQPOPPOPPPOPOOOPPOOPOPONONMMNOONMNMNOOONMNMMLLMNMNMLKKLKLKKLLKLKLLKJJJKLKJIJKKJI HHIIIJJJIIIKJI +JJIHHHGHHIH GGFFGGGHHGFFGFGF +EFFFGFFFGGFEFFFEEDEDEEFFEDEDEDEEDDDEDEDCDDEEDEFFCDjهzuxz{zupi__zPqemsywYFIUlzlZe{uqsu}US^>YP`cZYejhgefihfa\\\XVM|iUSezGG{lflvLzG4.B2;@/F&;G_GS>^O85,+LJ4>cWP<+%$&))*04/,5)0QO6L`mU?M3,'',.../133343456654322232/+('(*,--,+***+++*))('&%###$n#"2H,487/(*7JQOG8/6A=68>?;3.8FJGEHKB8:?AACB?=;8556411222113469;83ZSMC8)=412421012366789:=<:97654432110/.-+'%$#"!64332110///.,*('&$"!"$%##!/0000/0 2323456422245323532122344566688767765423210113568754d !!! "'**&!999 """!  !"##$$##!!! 121./ #%&%&&%(,.,($#"#'19CMYdaYYS=D-/;EGH%(+,+*,-.//00//.0455665455567767877666777657765Y  + #'*"!,+-02,# !  + !$%&%#$&(/ "$%%$##$$$#$%&''&&&''$ !CD#$%#=8"%%#F$&%C=;:986544555654556863452.-+)&"/,(&()+.01/-,)$#'*/5984.,-18BI$$#"!"%()(*+*))(,3;B%)'$#%(*--)E4%$"$$## "()'%%),-,*'$ !#"@BCBD&'(&L(**+-/23588665100258=ABE*59986542.)&'(%"&*(*,-1322563.18831-.3ʹ󇍑2 2   +  R0 n}J<630/0.*(&$""#&(('%##$$%$$! +  +   + + + + +   +  + +  + + +  + + + + + + + + +? +   +   "$#""!"! =  2             + + +  + +     +  +  +  + + + & 0<<52.   +  =8O[YX[XM>85]LB9)$4BIF?4+*.00+''*&4!"6'-08JtڄkׄӄՄ`ˆ,ņńĄ„ j_^ad`\^^YUNDDZx=mSHOW\[B24>Q[L>GWdmaRQRSYait?=a@)>:HKCc\kjrCLOMLKLNNKHDEECA:\K94AR01SHCHSb6S, " %.1(0!/&&$#4+& )'(9D2#'   +     X  "!" !# -(%!    + + +   + +   +  +  + + + + +     +  +  + + + + +  +   &.7@@<<5#!%%$ +}~}~}~}~}~}~~~}|}~}|{|{|}||}~~~}~}~}~}~}~}~}~}~}}}~~}~}~}~}~}~}~}~}}~~}~}~}~}~}~}~}~~}~~~~~~~~~~~}|}|}|}|}|}|}|}|} ýƸµĿ摬ʹΠ^7.  + + P·ϸĿĿûͽ聋žޡ։˴怳몗ʲ֤挍mN4'!       /ּö¬ɺݪӳĖُÀݼڙϵƛҺ˖Ƽ֔ȗŞ¿ɳº“¼ûЀǮ󂊏*8976789::98765579964342/,,/2220/.-.-,)($ !$(-2689;=ADCAABF%&%&*/4469960)HELTYVMKMOOP)-1/+('&%#$('C@DECCBBBCFEBCJPT*SRPLJHJR,-.^c3468.;<<<>AA@;5322/USX\^\\]_`_`bd348qf[YZYWUTSPNPRQNLIJNSWWSNIFDBA>;98532/UKCCCA?AB@@A?>=?GHC==?ACEJOPQRQJHPX[]_\RLPVY[]^^YTV_cgif^VRV2=GIEB?9c`emrv{y}}vvy{|zz|}{xv{~|}{uOsssrqrtxz||{|~[jnpqpprvtjdehfflpla^]_b[\fdORdje`]uCA@(?>>=>==<<;:::999:99877788877788788788787878987 888667778999878987877788998789988878989898 9888998899989:9898998889899889898899:9:9:99:::9:999:;:::9::9:::99::;;:::;;;:;:;:::;:;:;:;:;::;:::;<;;;<<;::;;:;<;<<<;<;<<<===<;;;<==<;;;<=<;;<=<;<<==<= <<<===<<=>>= +<<===<==>>=>=> =>>==>===>??>=>=>?>>>???>>???A@?@???@?>?@@@? @@?@@@AAA@A@A@AABA@@@A@ABABCBCCBBBABAABCCCBCBBBCBCCDDCBBCCDDCCBoZIIIJKLNKHGIIKQUUQ9PKHFDC@;752,'%$'+.6@I&$DBC!>952-,/236;:71+*-/0137 !!  "$#"""#%''&$#"!""#$%&$#$&)(&#$%#"! 876678:"#!  "$#!756:!"!;9!$$#!!"""#"!!"##"! !!> >610479<>9+!$,16=CA:4/.9@=:879:;<<;=DDA?>><<=>@?>>==<;>><:8877798654H686445567654532112210136997776554456897898889:;94/,)%#"#%')**(&%%')**+-0140/-,-//..//...0430,,1323430.-/137 93111/,,/230./23453?20//-**-000//011210/..02210//0/.-376445454455654455"%"6*%&%$#"#$$$%&*1!!5754432233322233456754222123101232345579<:886432 +3444568! 7753101689;<;;9655578:  !!"{##"!!@>=<;97531.,+,-.0343112345676?:\l^UWYQ:(%&&&'&#" ;889757="I'6YCYihekrgU{hk]8@50246884,)06;DLJ?8>FGIJHD>:89:::877865421/1453\TP[e_H.=10112323579:;<<;:975322210//0/.*'&%""#""! 898m6420.-,,+*)('&$#"!  /140./-((+-/111//1434640/...0/-/00/0/133114654200132443230/11001000.0113443110/./111320/1355446677786578;=>>@BA= $((";:9:9756 &&$ 542//00.-09!%&((&%%&''%#!")6@ELT[]]To9&)4>FK*--,-../1../.-,-/220121136553235665446776766642465457899   ! &.21,)(('& !$&'&$###%+<@!""$&&&')++)%" 5369<::<>>>@CE#&(PG=<<;:99:8679975541/038::7410/..,)(&#! 61,*(&##$#$%&$"#'($!!#%(+.00135118>ADEA857;>==>>97=EECB=4124 %"!!$&%###$%)'  '(&#%(*+)('&" ! %'&%#$%%%$%(()*+,,-../47984224:=;>@?=:H/7899767:92.--+,041*)+.0-MH,42!"-0.+1{  +728&;, "*TsI?85421.+,.-.25410011-+++($  +  + +  M + +  + + + +  + + +  + + + + + +  + + +  + +7 + + + +      &&$"! +  ( + + + + + + + + + +  + +  3 + +        +   +  +  +       +   + +  + + + + + + + + + |$=E9221)  <3FSQNR[QBoZLOB$%%/!:eg>37973-)?1-(+,1:#61S9AMh؄ڀ!τzDŽDŽŅ,¿2-ʀqfd^ZUT\ecTIDCMWWNECIPSH8:P[\UONNPRMCCKU[_a_`i;oho=p\][>Baf;HMLKKJNRRLD@BCCDA2O<+.I,ZURKLZ4cA&,H&#' 3>0* *%'# +%9(..%#3!  + +  + + +  + + + + + + +  9  "!-)(.42%   + +  + +   + +  + +  + + + + + +    T + + + +   +   + +   + +  * "&.5=AC9@!%&}~}~}~}~~~}}~}~}|}|}|}||}~~~}~~}}}~}~}~}~}~}~}~}~~}}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~~~~}~}|}}~~~~~~~~~~~~~~~~~}|}|}|}|}|} þ¼½ꉞĽ 佦]5/    OWžۀż\ĺ󁇉Yp¹Ҝҁ႐ɫjVA/$    + +'^ٔĿͺõྯ⿙م̰ʵ􇖩ϯ؇ݝ5ʀѦ۵뼤'ʄX劲듮īý׀QꃏŲ 879:;97668::9765433541/01010.-,)'$"!$+17=BDFHGE##"!!#%*18:8752+D9?=;:960\XWWWVTUVXZ[]^\[]b44e]WQOQSWae[RNLHC?>=<>>:756:=;776652-RLLOPPMHFGGIIHJMLLLJGFGJLLJIKJKMMNPRRPSZ`b^YWSPPROOPOOTXUQSTRQMJLOKHHJNQV`kryzz|}l|xz{vtz}{xw|[ejnssnifdc_XWYVRXWMIUfpeWY^YhCABBBAAA@???>==<;::9998 78877787787878 9887778777898787898989878778777878989899888989 8889888999898989898989:99:9:9::9:::9:9::9: 99:::99:;:;:9:;:;::;;:;:;:;<;;:;;;<;<=<;<;<;<<<;;<==<<=>=<<=>===>=<=<=<<<=>=>=<=> ==>?>=>>>?>>?>>>???>??>>??>?@A@?@@?@A@A@@@?@??@@?@AA@AA@@AAA@@AAA@AA@@A@AAABABAAABBA BCBABAABBCBBCBC BBCBBBCCDDCDDCDCCCDCMDDyZqJIJKONGCDCBBFKOQ)QPQOMLOQNG>731//026?L++'$#$$$#EA:2.-149=9520120--3:   !"#$%%$""###$$$%$y%',/+&$$$""!96556779 ""!!"""##"""! 747 !"" :9; ""  """  ! !! ;9632457873-&'-/10-,,+).;:988789:98999877764457898646676433323320//.02258;<==<85567765545420//23345420.,*(('&'()(''(()*+,-/12110/..-,,++,,,-/02420./35420.*'$##%'**+,/4520/00110!../136!"!5664221///-,,,+***+ ***)*+-.022/.03 751/0///0137 =3-+*'$#" +#$&*-/..26544212324456665443211354332122113448:;;:98641001223357 87665655358;::9878  !! t!!""!B@><:863/+++-1699989:9:9E=h|f>.55-(((&#! ? "!@>>?A"IM,;]CYd^SMHEJKt^X_lALQUYNiNLJ:Q@677[NA=1RR9'#""$')))().6862146755875225 ! 666655421120.--,+**+u*)(('&%&%$$$#"!  ! #..G0:8.)0>HHA6.)&%'*/1.+/3651..15:?B;/*+/6>A?=<8135653.X\12343b_[SI;.&?64689:;<<<===;:874531/-,*'(**(&%#!976531/-+))&%&'$""! ! +520//-+*+./,*)**,.-+,/00..//-+*+.-,/23444211479;;??AA@?A#%()*)**)*+*()+(''%%&%%$$FC>;>?@?<;:;<;:77:7554421342465668>>;8=G%D949?=83/5>F%%$!;8652//..,,,-/0//4 ''&'))'%#'"&4@DJRVXQ;D-.6=CEFHJ&(***+*,-,,,+,-./.0/2343342124567798887876556667 + +  + + %)***+,,+*,..-,+%%#"! "%*9>#())*('&&#97787679;=><=>B"$E@=99;><;>@BJ,356872//.,($###BC$))#9:FJI%.9=4(),+Vp⃊ ! +: +B$9╡R@8100+))(('),/0../.--/0.(!$     +    + + + + + + +   +   + + + + +  + +  + +  + +  + + + + )"#   #   + + + +  +  + + + +    +       +    + '     + + + + + + +   + +  + + + + + + + +  c$&FR<    $A2DLG?:8kg9>?pWE@GT4?DFI>Q<;7)B7) #,6'8DGCAFTbxԅ؆ +݅+ل ؄ +ׄ؄ڄ6҈ц τ΅̆ ˅ȇ Dž ƅ„.! necZTVWZ[]ZXYOFBCEGEA=/IGG/GSNRPIIOTUTTXSNVbd^am<>9aY]U@7=Nf@DFKLKMOOH;=FEB?7-E/6*RNQSXc\G4'$ "*17($' $(+) !&4+" ("  + + +  + + + +  + + [ +   *-1/.)" + + +  + +    +  T + + + +  +  h  + + + + + + +   "&,49:5%% ! "}~}~}~}~~~}}~}~}||}|}|}|||}~~~}~}~}~}~}~}~}~}}~}~}~}~}~}~}~}~}~}~}~}~}~~~}~}}~~~~~~~}~~~~~~~~~~~}|}|}|}|||}}}|}|} ſĽ麘邏÷̺򁆆Ľ銩Ԝ{M2- +U]րøɼ遞ٳٶݼuaG2'"!    +    !SʐijɣʩŴ₊˫С־󼭌ׄ򷬀튊ڗŴǿ⪡怈¿U録ǾҜľͭûĽĿ¿.%8778887778::8898977667667996445654111/...,*)()+/5<@ABBBCFF#$'*-49941.+PHB?@BCB?>;;==<=ACFHKMQTUVUNFBDGECEFHJL'())NMKKKJJIIJJLLR02/05;:5ca///.XTTVWUTTUVY\]^[[]_^_VKL]7>AAtW>5__aZQOS/782WR*--.01/,(&G>AMQMLKEB@@@B?;7887457;ADEEHKJIGGGJPVYYZTNJJLJGIJGEDB@?AHKGFJONRanpqwRYWSRSRPOOMNTO}yz~ORPNOQVVXkmikomfekk^ys|Nagdb`^[Uqc}@@?@ABBAABBA@>>=<<;;:98898787788878787877887898788877877887898 778788898898 99889887788878989998999898988898989 889988998989898989899:98989:9:99888:;:9:9:9:9:999;:::9:99::9:;:;:;:;::9:::;:; :;;:;:::;;:;<;:;;<=;:;<<;::9:;;<;<=<;< ;;;<<===<==<;<;<=>===<<===>=<=>= >==<=<==>=<<=>=>=>=>>?>===>>>? +>>>=>???>>?>??>>??>>>???@@AA@?@?@A@ AA@@??@@@AA@ AA@@ABAAABBA@ABAA@@ABABCBBBCBCDDCBC DDDCCCDCDDCDCDCCCDZjOLJHEECB@<9:?BDEDC(EK'LFB@@?>BL))*)'&%$$%%&&E;50..135687520/39!! !Q !"##"$%%%##$&&%%$$%'(''())()('$#"!;:7556778 #"!!"#"#"!""!!!429<< "#! 4$$ !""  "$!<8644457772)(.111/..,*(,5?CDA=9 89;:9878898656787871655567;=>=;74455456541//1221247899678976688642354542-*+.11//1-'')*,,-./0012110././-,@./33123453.+)%"! !#%(,0466688742.-1479!!! 6640-,,+**) ())''(((''(()))*+,-+)*.23124R42212347775444565432,&" "#$$#$$%'()'%+6 5668767654542111//02356777654332201334543379;::998653320/001334567$9<842003458533226;:8689888   !"{A?>;97655227;===>AB?<@*?G=2-..03651+'%##$$##$IIO3OsKY[WODyoloraDwIJIW^S_O}_I7R>0.5GZ6R{NYWKCBUosj_YVVVWWVVWXXWWXVVWXXWWVUUUWVUVVVWWVWWWUUVUVVUVUTUVUUVUUUVUTTUTSUVUTUVUVUVUTUTUUTSTUTSSRSSRSSSTUTTRSTTSRQPPQRRRSRRTSRQQRRQQQRQPQRRQPQQQPQQRRQQQRQPPOOPPQPQQPOPOPOPPPOQQQPOPQOOPPOPONNONONNMMMNON +ONMMMLMNNNMNNNMLLMLK +LLLMMLLLMML KKKJKKLLKKKJKLKKLLLKJKJ5KKKJJKKKJIIIJIJKJJKIIIJJJIHHIJJJIHIIJIHHIIHHHIHHIHGGGHGHHHIIHGHGGHHG +FFGGGFFGGGFEFEEFEFEDFFFEEEFEDCDEDEEEDCCCDDEDEEEDDDEEDDEDDEEDDEFEBAfqpmorsvyqoxoaWZ]\SGockphJ>_Wq^awyvj`addizLTRI~r]RRSgajhhgb`ac^\adcc`VdWX>>mvefzs]SFeD=,A%2>Y*;K[La>28>P.,39CQd@ECG>[RQE932395YRJOQWL6>*&'&&'*+/269:986677665/(, 7019851-,+,-,-..-|,+**))('&%%&'&%$#"  9543%$%,-J5??97:<98A8%<"/:;98657>@;531./*";4-33JIC?==<9668;;85336::832c[K=99+C??><:9:99::;:998>50-+*)(((&$"!7543100/,*))&$##"! 643331/02/-.0L1210/-+*,,*'#&(,/589:!$$$*/235458=?>@?>?@@DFFEGFHHGHLLIGHJLIGGIKIHHHFCBA@???@ A@ADDDCCB><=<;:975323321122210/./110.--,,.1.A00-+*(&$$#C=972/.-,,+),000//3?%&%%&%$##"#$#(6DC==EK;@+/5<@CFGF#"#%'(()+-.//0112542137:88987666767899;;976689767_  (# !!""!"$%%$&()++,..--+&! "   !!"##"##"#%*"&%!?=:6`44558;>>>==>@A@926E*031T:'"==@;35;!$#31!*&)3742.+(&&'('#!""! !%*,,,./..,+,/39>??:8876410.-*'&+/.,.1.UQGB>"('#$&&('*)(('%%)8!#! ! 0++-4.+%"!!#%(-1669=@C@:;@B@?;;A$&$"%&))KH+984573..33+:.267;AFIC8216?(69767442.T]~煌 ?9& + 3 A% :MS@70+**)'$! #$%%%#$$%$&*+&" $   )  + + +  + + + + +   +   + + +   + + + +  + + + + +  + +  + +   8 + +   + +  + + +   + + + + " + +       +  + +      + + +  + + + +  + + + + + + +  + + + + *  #'*" ="5V9CDA<2YUVZZG.L120Ą/Rl^TTUUX[RRYfcSHABEE?5NELNG-#69gpTACUaZUSMGGDCKY8><7bYL;35:JgHPONLIGHIEDIIGGF<\=57$"AK?@Q^]M<5*7#,!2"-7*1 &&1>()%($2,'2-)+,0+  +  +   +  + + + + + + + d       !0-% " + + + + +  + + + +   + + + + +  "##$#"#$$&'(<***+--,,-.0.-,.0..,*(&&%$##$'')))()+**)((&$$$%%#" U   ''"#+0" }~}~}~}~}~}|}|}|{|}|}|}|}|}|||}~~~}~}~}~}~~}~}~}}~}~}~}~}~}~}~}~}~~}~}~}~}}}~~~~}~~}~~~~~~~~~~~~}~~}|}|}|} Ժ򅌉􈗦ý֎C +-- +9MXׄ؀>Ż*P |󅇒񗤤㶟ٍ٫ҮgO<1($"!!  !    "Qlj٣ñϾԿǠ݁ǠѻК틢逊гβʠ넏Ű搬ƿŵѿ̧ƽ¿¿¼񃋍ٮ95543455344664576433345312554433221//.//.-+)'%%$&*.0269:<@CDHJ(.33.QMLMNONNKGEB@>;;<;;:::@FILOSWY..TFCEFGIIJMMM'('LKJKMMKIKNNNP+00/0a^ZVWYYZ]\UQQRTTUUUVY\^]WTUTPMO_oogYE2NKPRQQS^im763a//145441-H8435>DECFHJLNMNQPNNNKJJJHFEEDBA~xokrwyzMUWVZcfks}VX[\]_`abbb```][[]]YWWXWUTTQNORSPMIMMNSUTUXWTQONORONZlqkikdRQ_jfU]krojgeaXzeZx@>>=>?A(BBABBA@?>>==<<;;;:988998877788877788898787898877878787889987878989989987778 +9998899888988989898987898899989 :988989:999889:9:988:::9:9889:9: 9:::999::999:9:::99:;;:99:99:99:;:;:;:9:::;:::;;;:::;;;::;:;:::;;<<;<;<;<=<;;<;<<<;<=<===<=<=<=<<<=<=<=>=>=>===>=>=>>=>===>>>?>>===>>>??>?>>>??>?@?@?@AA@A@ AABAA@AAA@A@A@AABBABABABCCCBCBCBCBCCCDDCWDDCCCBBCCCBCCCBzb`PMJJJHD@==>?ACBA@ABBBDEFGHGFG&)*(''((&$#""#$">6222321..2530..0137< ! !!"##" !$%&%$#"#%&''&&&''&%#"!"!878 $%#!  !!""#"!"! <;=;8; ""!%$"F ""  !!! <88876650.134214:;9533498766641124323552224'566:==<:755433469:964542.+,1575341,,-.-.B02331///.,,+,.0..-,,,././233443334566530,+*)()*+.25655665531026 62/---,+*))))((()*)()**+++,,-.02234564554387658""3'#"!!#%&'')*-..049 633322100122244 455567754322343 456::999741345654565445556;98:;96565:;9765568   h@?>=?>=;976688::;= #D=:CY3038/&%(+,,+*+,,*(MJR4KrP`ebTbNR\`\MmJL8XslG50V-5?D7I2-4AWS_dffluxwrkc]YUVWVWVVVWXWVUUWVUVWVUVVVWWWVVVUUVUVWVVVUVUVUVWVUUTTUVVUUUVVUT UTUUVVUUUTSRRRSSSRRSSRSRRRSRSRRSTSSRQ RRQQRRQRRQPPPQPQQPQPQPQPOOPPOPONOOOPONOPPONNONONNMNONMMMNNMLM LMMMNMMLLMLMLMMLLKLKLKLKLKJKJIJ KJJJIHIHIIJJIJIHHHIIHIHIHHIIIHGH GHHGGHHHGHHHGHHGGGFGGFEFEEFFEEFEEEFFEDED EDDEEEDEDEDEDEEEDBdrslhjklmloonvyohaYPDBApJ:cI;FMF<4(@I.9;745FCBEIJKLJD=>M]\SIB@A?:6:CFEB;/T18:96553_TJ6#B##!<;<';::98876542/,*'%#"!7320.+)''(&$##! c55346410.-//+))'$#$*-/1/03;@"$'),/01015;==<==<=b<;::998988988765654310/.,)MGB?==@=ABDEDDE"#$$$#%&(*,,++*,,,-./00122211358974333469:::9888765445 9 %%&()*))(&%%%$"#$$#',.//011," "#!!   !"#$%%';976688:=<632345678:=@A?:8:9659GROH<,.08;98;DLO'%!= ##!$&-5888530.-,+*)((%"!"(-.,./022237766754455310.-,UQJFKM{OOQUUTRJJ)-)%&&%%%'.0135742"%&'()($#"!! 2446772..269JNK?]@26AED7K4?1J]N/ 2%.2'2 ")5#3%5@CFLWkۄ(܅F؅قڄLЄτ7ʄ˅Ɔ+„ocTMNPQQQUTRZ]SNIB:110M, A5*+!=;KA;CMNMME.. -NKJM7,,-+2M4e`5AKF@?@BCCDHOKKJJH?`KJT@-=F<;IVTLCD+%$,5?*6%! # 1$+ 9+4<3'+2- *+ #"42&-?A3$  + + + +  + + +  +   + +  +[  + "   **%"" $-'"  + +  + + +  +   +J  +  !#$$&))*,110../00//.,+-//././/0//11/./.,--.02)323454211000102321245577787654332220/.-+)( &%##$%$#$%&%$$%&%$$#$0#"! !! *&"!#"1  +}~}~}~}~}|}}}|}|{|}|}|}||{}~~~}~}~}~}~}}~}~}~}~}~}~}~}~}~}~}~}~}~}~}}}~~~~}~}~}~~~~~~~~~~~}~~~}|}}|}|}|}|} ½򋙠ž􃏘ʄ_µ􀇉ĸ~,.+#X򀈉Ⱦ(H½M*ʩьɼ邖ܔחx]E4($#"!!!    !! !   +   +"P΋ܱػ؜ºҾ诬ýϐϫΕм̀U巙ŷڅـüΉ˷ĊŴذ隷ú¼ˬՀſž嬫ÿӷʭA43135521/./2334310023310122233/,-/0/.--+)'&&%%'/:=<=>>=:99AGHEACFLPPMKIIHGHIHGECCBA@@>=<>>;;?FMTX]013[D?CFIMNNOPQQPPPMK&KJJM'QPNJP..VQOPRQQSRSVWSPSUVSOMPSUUVSLKMKLZ9vR_D?EPX_bffginlbZTV\dgcZQFBDF?57I/6:;<95a]\_ba_][^__c^UUWXSMJHnccfpxwrkgoxNWbr{xv{}^bc`bjolgb^[\\]_`a`_\\\_cgib]TORTW]_]WPOQROLKORSSRRSSRPSY]\TNMMOKSepqmmoi_Z_b\RX\^`ahv|lbedaW|B??@?>?>>?=>?>??@A@AAA@?>=<;:999888778788778887788988987898778889887878788787878977887888789898777888998788998988899877889989998887899988898989::99899988999:98898889 :9::9998999:9:9::889:::89:988::9::9:9:;;;:::9:;;:::;: 99:::99::;:9:;:9:::;<;<<<;:;;;::;: ;:;;;<<<;;<<<;<<;;;<=<=<;<==<==<<=<<==<<<==>=<===>=<=<<;<=<<>>=>=>>>==>>=>===>>=>>=>?>=>?>>>?>?@@@?@??>?>?@@??@@?@@?@@??@ ??@@??@??@@A@@?@ABBAA@@@AA@@AAABA @@AAA@@ABAABABBCAB AACCCBBBAABCBCBCBC +DDDCCDCBCCD"CCDDDCBBAjTNPOOOLFB@@?ADEFG%'((''( ++-.-+)%"!#$\&%>6211100/.-057320..16< !!"##"! !"#$$##$%$#"$&$$%&$!!#%''%%%'()'$""! 69<= !#&'%#!  !"#""#$! 96""B !###"""!  ==>:84/03442125;!#!A?>AFFEINNF=:9642/.q0356655543222100036775434447:;9765420.-02333433236665545:=>>;4110/../231..-.--+(&(+..-,,--.//00//024431/-,+*+++,-.//.0255325787421 +23554334455531120-,,..-,,+***,,+*$+*)*,,,+-..1344566898666201457.!"!=5,('&&()*+-00148:::99 421001112453122456688764234323542332256655V9:98876522014566777654567 :;:89756;;977653444667889;<  ! !v>?AAA@@@?=:88877865778889879ER5NX?.&! "#%&%$$%LIM4VFaoin[[PmX4GQFChM]Ro@K404E6HH6MBHR\BfDP\hjhhnphaYWVVUVVWWVVVWWWXW +XWXWWVVXXXW +XWVWWVUUVVW XXWVVVWVVWWVUUVVVUUUVVVWWVUVWV!XXWWVWVUUUVVVUUUVVVUVWWVWWVVUVVUVUT UUTTSSTVUTSRRRSSTTTSTSTSSTSRQQRRSRRRQQRSSSRQQSRRRQ#RQQQRRQQPQPPQQPQQQPQPPQRQRRQQPPPQPPQPOOPPPOPQPPPONOONOPOONNOOPQPOONMMNNOOONNNONMNONMLMNNMNNMNNMMLMLLLML +MMNMLLKJKKLKJKLK JKLLKKJJIJJKKJK +JJKJIHIIJJIJHIHHIIJJIHIHGHIIHGHGHHIIHHIJHGHGGHGHGGGHHHGF +GFFGFFEFEEFEEFEEFFFEEEFFFEDEDEDEEDEDEFGFDA`ononjf`[bgd`cb\]`YG>FAJ=@\diA=GMMIKVjsO<0'.G6CMTM=33B]cC*+8DJA64/D1".I6EH>6BW^]VNKKKJIFEEJIHG?56:<<>@:0VWSA0&(0.$=? !A>;8531..,+(%!8630.-+))*(&$##"!"!877h5443.,-*)',.26:#$'*,0468=><:;<>@BBBCDCBCDCBCCBBBA@@ABBCA9??@@@BB?=>??==<<;<<<;8842353,))RH8(%/AQTL5&#'1:EJJJGC@?BE# +""#$%&(())( ),0221243457998997555678789::96322#% "&'&%%&&$$%&%%%$$%'(&&(,/3461""#$$##!!"#$$"  #&'&#'0,+,011345874245652247;<=:43535C,X79))08=CFJIIJKH@:6:?EF?5-! !.%(()+..//+L&%$!;:;??<<;;=?>><76698420SD;:>IQPI@?ELV^[VPHHJ*/3;920031('.:<<>!#" &()'$!!"! ! !$&&#!"!1 " !"#!!"&(% 538$0787673.+/1-$6/7B$E==G*,.17@B71233f`݄"   +2 &fKA:861,&#"""$%&'      + +  + + + +  + + + +  + + +  + + 4 + +     + #%"O  + + + + + + + + + + +  +          + + + + +    +     + +  + + + + + + + + + + + %2#24! [ ?8PXOsLBC8I?);B33XDPAM&&+&64$.)035&<(3A23ELLVz\NAM2@KIHIKMKGGLNOONJ?]SYi^A@KHP[c^PG@@-3',D-,- %%!2054!1+4 /25874,+,**'  + + + +  +    +  + +   , +$'$!.1 $*+'! !!! ! !%%%   +  + + +    + ##$()++/1=EO'.1973.011.0/9?F@@;<9=:4-L=5535890.-(#!$)//-,03456888776886333555669;<<<=@@>?>>;988620.-,,*+))+++-,,-,--,,+)('((())**+,,---,6--+**,+)(((''((&#!.' "03.  }~}~}~}~}~}}|}|{|}|}|}|}|}||{|~~~}~}~}}~}}~}~}~}~}}~}~}~}~}~}~}}}~~}}~}~}~}~}~}~}}}~~~}~~~}~}~~~~~~~~~~~~~~}~~~~~}|}~}}|} þīɀǭ¾żɸ.-  + Q!MR󀆈8í !Sٷȱϫ쉡ևbSA2+&##"!!!      !   +9ƼţοٻФ؞𖮪ȯމ󤻜̛ں݀γȜɲ򂅀¾̂򀇘ϽȽ֣ź턆'삂|½ĹػʿǿڹXn5666554320//1345422452/.132/../-,-.-,+)('&%%)5>ELLHFFBA@@>C&))(JFIMMJHGEDDDC@?>>>===<:77:?EJKPV[/00/0/I>CFIL()(''&%'('&()++)NM)++VTPORTQPRUVRPPPOLJJMNPQQOJJJL]?RYGIQ]acfe^ZZ[[_a``\WPKA<:>IMN,7CHIKMOPQPMJFD@<;=>???<:<:mi^TH?<>>?>?DEA={>?EIJNY^^dn|}||xpr}`hmstqqmgc_]]\\\ZYZ\^__``agihbYUX^`_^]YUVX]aabcdaZURSVXWXZbfcYLDHPRNKLT^jttqpmga^\`b[LJWa`]\YWXaoz ue`][XwA?@???>==>??@@?@@A@@???>>=<;<<:987878889987898998887878778789878789898899878989998989888989 899988999889 899989:998999:99::9:9:9:99899:99::9:999:9:99989:9:99:;:;:;;;::;:;:;:;:;::;::;:; :;;;:::;;;<<;<;<;<;<;;;<<;<;;<<<= <<=<===<<=<=<;<<<=<=>==>>>= >>===>=>===>=>=> =>>??>??>>>?>???>>>?@@?@@??@A@@@??@?@@@?@@?@@??@@?@???A@?@?@@A@A@ABA@A@@@A@ABAABBABABBCCCB ABBBABBCBBCCBC BCCDCBBCCCBC BCCDCDCCCDCDDCCCAmUeTQNIEA?@ABBDFGFHJ2K&&FAF&)(&%&&%" !"#$ 70/110.///123443210.06 !"#"!"#$%$#$%$###""#$$#$&&%$"  ! "&&$##"""! !!"U! ! 8; ! !"""$#!!  <<7.)((*+**-/2%3343346765677756678864445564322357644567898899:>A@=952112430.-,*+-,./0135654420/0.-./12100/-..--. /.//.-./024 34442/.--/123 8410..- ,,,++**+,++*H+,+++,,-./0236435666555688799:::8777666 !"51/--,+.012344566546 10/0223366677543222014776456659887765321123457888655<98754335665"4;764454467778::: !!!  !"!m !!""!!! ==<::<<;:87775444578;=?@BF0Rj`I4($#;"" !DFH*>mVidTLjWMIKGFRVR^ltudJ0B22>,?NN=WJN9\@P[`_[hgb\XWXYYXWXW XXVWWXXWXYYYXWXWXWWVWWWXWWXXWVVWXWWWVVWWV XXWWWXWVWVVVW VVUVWWVVVUUUVUUVVUVWVUTUVUTSTUTU TSTTSTSTUUUTSRSTTTSSRSR STSRRSRRRS RRSSRQRRRQRRRQQPQRQRRQQQRRQQQRQQPQRRQRQPQ +PQQPPPOPQQPOPOPONOOPOOONONONONMNNMLMLMLLML KLLMMLKKLKJKJJKJKJIHIJJIIIHIHIHIHGHHGGHIHGGFGGGHGFGHGFFGFEFFGGFGFFEFEEFGFE DDEFFEEEFFEDEDDDEDDEDDEEDEDEEDEDBSlimmnpjYZaXPOTcfSEGLDIC0,:UZc_NHBGMHERPXB)8:=\~}~zlhzuPTYlkdbcdcbcdbcgidPFNvj|Rn[f.)CZ^^oPaKM/48<5M>B)H7DK\G6XE717JVQP[48DVgY<9JUSYUJJJUmxlY;I3+*,-,,,-18 73/*&&'(((*+,./01000///012210..0001100/..-,+*)('&$! !!"#$%'*0;Q=TsO\jxKLMLIFA?BCAADGIFBACB?>;87rwyrlihfbZTNLU_]NHLOICABIKHFFDDDCAAB=70QEBB><;<>>??<;:74443357899:<>?=95.RG=73589<!!$%&'('&'*168865333234358989:87779;;:8::743H "#  #%$$$"!% !!"! !%*033469$ "$%'(20..2433478411221014579:84446D/a;;008BDEFD?;<=<=?>><83-%$(+&.1224678752.*&#"#$&&%$"#$$$#""!=94.%!"$%&)+'%M(:(*,+-6;87:>B@70.,%!#'.5 &+./.,*($"!!  !#$%$$''&" _!#&&'((# "##$%*,(!")1787641.++..(,"))&%%&(0;CF=0-/1`XЂ4 ! (  2- N#ԓzN@6/+'%6&'(('(*++,-&!#     +  + +  +  + + + + + +  + + +   +  +$   +      +    + + +       +        + +  +  + + + + + + 5F=*   )SCPJ=7_J=75765<=:GRURA.##+86'2(( 7(2:BJUޅ +܅&܄:ՄՄ хfɄ,DŽDŽ%„$kYRMMOK@AF>88=IJ:0281/$&7:A@41.7<64>85!!'+@\nbWWUKIV]Q36[APOJIJLKJKhKJKNQM;\^4;lWQamu|AvaL<:$257E3>+&" &"%1/ ,2,*0(5?3'//3.&')/>E>2  + + + + + +  +  + + + + + +  + + + + + * /BM*19BHK&2$!  !$%#!!! >AA;6110-($ $*)  # "!  (" + +  +  "- !%$%),39!)U16AN^7@MXe68589;;>??;9<<;:978<@=;9<;<===?BA@?A@>;<@AA@??=;;<;<;94YLUc\RR^hhinhZRMJMXdoplqA@srpwO]TJEVXZ\\^^^adhh_YZ[\^_^\Y[\\]adedeiljd`aa_``^^`bdegklnlga\[ZZ^`ba_5_ZNFFMVWSTWaltvwunieaaacf^OKU\^__]agq}sf``ZzB?>@@?@?>>>?@? >===<<;::988987878887789878788878987888787787898 778889987878989887888988999877889899887898 +98899989989 899:99888989899:9:999::99:9:9:989:::99:9&89:;:99:::9::;;;99:::9::999:;;;:::;:;;: +;;::;::;<<;:;;;:; ::;<;::;;:;;:;<;:::;;:;<<<;<==<;::;;<<<=<<=<<<;<=<;<;;;<<===<<=<=<=<<<=>==<=<<=>=>=>=<=>==>>=>>>===>=>>>=>?>>???>?@@@?>?@???@@?@@@?@@A@?@???@?@A@A@AA@@A@AABA@ABABA@AABBAABBBCBCCBCCCBBBCCCBCDCDDCCBCCBBBDDCBCDCDCCDDCCCDDCCDCCDGCDzWwZSNKHFEFDBEHEB@CFGHHGEC@>C()()('&%%&'%;-*-121//023457:;998532227< ! "7$'&$$#"!!""##"""##"!!"##"  """! #&(&$"!!""!!!  !" !!""!  R! "$'%"699:;C@B%%D?9/***)(*,./-,+,--../134324K566777631124542/048;;;979;=<98:86:;;A$#=::85334310.,)*-/.,*)*+,/1244432110/.K/0/0/.-,-..-.../000.-.../03300/021../00/.///001454696688862/-...-,+,.,-A.//../1344467753455442022233235532476.*(((&',.0212356823446665424554221122212334456678644432774345677876542/0124555&54200597655678986577423442378545678789 !""" ! !! ! !""!""!! <;;<=;:9Z52357:;>=&I>N@C":89= !@@CGI*KPn`YG;VDM7IMQahpsiX@*:1248?*d^3AfJ\b]VWcke]YXYYYXZ[ZZYXWWXXWWXXXYZZYYXXWX(WWWXWWWVVWWWXWWWXWWYXXYXXYVVWVWWWXXXWWXXVWVUVWVUVWXWVVWVUVUUUTTUVUTUTST SSRRRSSTSSSTSRRSRQSSRSRQQRRRQR +QQQSRQRRSRQRRPOOPRQQRQPQRQPPQPQQPOOPQPPPQPOPOPONOOPOPPONONNNONNNMMOOPPONNNONOONNONMMMLLMNMNMML KKLMMMLLKKJLKKLLKJ KKKLKKKJJJIJKLJJKKJKKJIHHHIJIIJJIHIHIIJHHHIIHHJHGHHGH GHGHHHGGHGHGFGHHGFFGFGGFFGGGFEEFFFEFEFEFEFEFFFEDDEDDDEEDEEFFEEEDEEDBG|d`lxnb`bVGUqsXLFJDqbYVj{TnKvuV`dgQg3Q=i~Ib~|NwfLUTgicabbaabba``efw}IMr|RNPUWLpPV9TcOOAdeQ@BH%+46QH/8F?&2;Pb;%E9DGcAQ:GLJHE>>EPd:jA)3@IWeiljkcD,A73036: :1,*(&&'(++*)+-.../012344212(1000..-,+*)(&$#"#  #'+-,-03>[?M]qEP^m~QOOKGFDB><<=<::<>A@@BDEEEHJKIGFEEFFBCFFCA@@@AB6LJYdQ9+P3DPUVQNOL?69@=+C?;7=K-1\K>2'"""A;61,'":2.'&/3H5Lw]|WW^gpxupecgfkrplhfihipqne`chps|wtwvzronlsxwupjhhfdcbba_^`b`\ZYY\^__a`]^^^aeghmuupkhfghlpqtwzyuuvvwvxzy~|{|~ywqe\}h[Kp`KiYODAA>>@A@AA??CGFEDDCCDDCCDEEEDCCCEEGGDEGHGFDEFfGFFGFGFEGGGFCCDCB@>===;<<;:989:=CFEJV_fpsiXKA83/,(LJG#$%''&$$*/2677762..///.0579986799::85257:<:656664 @ *'&%#  "!)5"#"! %"' /((),472235764102343246556547:E.^<69:773019E),+)%"CFB3)'+*(+4896777899632/($""%&%%$# +$)40)+278;@:1,)(*1:B@:?$";931!) &%)1"$')&!!! !""$&((()+,)%"##!!!""#'')*++)&%%%&()*(''#!" $+27:;:742.../0*!%$%%%)/8BKOG:0C.25cՃ:U ;) )Y݉[D93/,++(&')&#"%)+,--*&" "    + + + + + +   + + + + + + +  + +C + +    +    + Y  + + + + +   + + + + + +   + +      &  + +    +  +    +  + + +  + + + +   .*6'" :AXG[:/&5-9)7:8DJQRI:'#)0(@8(A1=@=AQqބ)݅܄ۄMՄц̄͆1ʄń „ÄiXKPWNEEE:0:P]P92/3/NEA;DTM4J4QRe@GLPLMHGHIHHJKJIINMhQX68cR\v@<>^@B8P402;+-*DB0$!!'#.7$"),8!+'++)& !'-:":&1;:98;6!  +  + + + + + + +   = *!*5D(.4:DQ-*('''%""   !"""$%%$" ! !! ! &-##'(&$%"(    $+I:Pf648@JOLF==?>>?BB@><99;=>>>??@@A3*&!&! }~}~}~}~~}~}~}}}|}|}|}|}|}|{|}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~} ~~}}~~~~}~}~~~}~}~}}~~~~~~~~~~~~~~}~~~~}|} 创ȼ|񐢥žļļͰˉ.0  xNZȴ¼ƀƻ;CFJ&'+-+**)'$#$'((())+,-/2.MA???@?=:88:99?KY14787544556543211.NA@CGJLMMLLKL')((())**++***.2WHFGLSRKIHHIKLLMNNLJGHKKKMMO^kvsO[MU]]]b6:CKQUVWUH:]JAI/;==AJTXVUUSQNNLLOROH?8789;>>=<<<@A>81)N6DB>;6227=A@=95h48:8;EKG@?A@:geBOPNMMS\aa^\]^YUVW[ZTQTWTSVZZZ\\[[ZYZ[^bcca^]_`ab`]\^``beeec_]_ced`][WSOLIJMPRUWZ`ioqsqnkfb`afmph]`iliimpu{{i]ZZRvA@>??? @@@?@??@@?>?@?>>==<<<;:::999878878898 9887789778789898988898787888777878777878789898988878 +778887899898989887898988989998989:999:::989:9:9::99::9:9:9:9:99;;:;:9:;;:;:;:::;:;::;:;:;:;:;<;<;<;<;<=<;<=<;<;;;<;<;<=<<<=<==<<<===<<=<=>=>=>>=>=>=>?>=>?>>>?@?>>? >???@??>???@???@@@??@?@ABA@AAA@@A@AAA@ABCBABBAABBABABABABCBBCBCBCDCCCDCDCDCBCDCCDEDDCDEED[C|ej\SIEB?;:<>><>ADECCDB?<;=E)-.-+**+-)D9212110/025567886445:?=::; !!"#%&%$%()'%! ""! "! !""! !!!## !%'%#"! ! !"###!  !  ! ! R:88:; ""!"# 9765422;#%$!>:5521.2A%$C?:5.*+,+++,-,+-02310/045444211343211123466568=@A?=>AA?:98549;::@B:6663/.0/. ,,..,*)((*,-/11220/.0310100//000/Z.///..-,--.1340,+++,..,---..-./02322369:83,('*/2356765521335545444323334432234456644343321123-1/-*&"#*-*%%%'+./0,&!!#%'*,.012366632123456765552224776532234797677>::877555420.-./03467654557556759:::97885543435865 6579888 !!"!!  !"!" ! ?>??=:75U447:;:877&FojH*67:<>?@AEK,HszWpN<:L6CNUPJHKNL<.L@419AEK/raovmPNswMTRKS\ei[B]I\ZUSzty~qedsTdhb`cec`aceebbanyIJ{KQMMQ\a?E`]`QwsM\D.?F>=FI18S.*9Y:\<'%6`JSJ92?@BDEDEFDBCBCCB>84aZY_44`XTSPIBCEIMOL2ECOXW-\UI<2*%F&2BZpOZfqyJFDzxwsonlmpsrronkf#djpmiefjmkfcc`^^___^]^_]_eihfcaba``aw`^`cdeggeggedeedeea]_dghggkkhhhjkkjea_chkliiihjlkkmoqqooonmnqsrqsvuvwwyzzxxy}xwwpje^VT}she`Toplc^kmh[k\M?;>?>AABrAA@=:;>?A@@ABBDEFHHGGEEFECBBDECBBBAAA@@@><<=><<=>AGQ[fry~}yvpbVLD=4,(,0235689986300/.//13679<<<===:8557988976765 '  +%#-6 !""! " !#$#!! !P2(&&)01/.-/12332244212322556DPXU8=4:85440#' %'. )00*&&-C+4?GT݄̈́3߄d׆҅=΅τ'ʄȄT+ JHGLH907=GY^>)K@KNIX98NN5<;7hlbg?FKMB/@/:519dYSY`cplXNDDPa>JMHHIKJGIKMNKKIjLV66^Yb9>;n9=i@@><=?>?>?<:9=@=:79=A?;:9767787'868<>==;9::99:::9889;;=>?>??>==;:99757;=>>=<;<=>=:779<>=<<;:;==<=?@@>=>>>?ABA??@@AABCEFFEFJMKFFFB?<733b\WSMGEC9dWPQOHBMQLBeH;/! !#')+--..,--+(),,-.-.//13465421110.../0/.-,:++,,++,-,,,.17>DLV^bdfe`^XL@82,% }~}~}~}|}|}|}|}|}|||~~~}~}~}~}~}~}}~}~}~}~}}~}}~}~}~}~}}}~~}~}~}~}~}~}~~~~~~Ɓ~~}} ľǾ˳ҽľþʻ»ſЩ}[1    $Y@- ɺ¼' IľUĸ͹g񸅓˅ߑ煍⩙cP9.'#!   !!!  !! !  !    +  +   +kŀ䊶ʎجɮ悚݄ݘൄɸƴ׾쩐πԬ膛򋡐ܝ˺ľúƶӥ姷񒯺؀߀ʾ㺟Ďɾ 10//0//..-*+,+e,--*(&),--.046:?F&'(&GGEDC"&*,*)('()'%%&'%%')+-/387VF?<;;98:>GQ[d7864221--25673//.,+*JA@DGILNNKKL&''()*++QJGGIMLD??@FLMLLMLHDEHJLMOU_9p\H?EILMORUZ_``dcYIbD=<989755:BBAAADB7.*,5AJLJA868=;=ACAABFHC>BHKKIJ#LNRTSSYaddc`WRSW[^`a^]cc\WWWXXVTVWVWTYYY\]^_^]^adcaa`_bdedccd_\[[XUPJILMNNPPOS[gmlijhecdcaenvxy@ztmovy~BiLIM~D@@?>?@@@???@>???@A@AA@?>>=<<;;;::989898787787886788787888778878987878 7788898887778989898778789887788899889989899898 +9998989978989878 98898889989988898989899989::99:::9:9::9::99:9:989:9:::9:"99:9::;:99;:::99:::9::99:::;:;;;::; ::;;:::;<<:::;:;;;:;:;:;;::;;::;<;:;;;<;;<<;:;<;<;<<<;<<;;<;;<<=<;<=<==<<<;<;<=<<===>==<<===<<==<<<==>>===>= >>>?>>>??> ==>>???>>???>? +>>??>>>?>?>??>?@@?@?@A@???@@@??@AA@@A@??@@AA@@A!@@AAA@AABCBAABBBAAABBBAAABBAABCBABABCBBCBABCDCDDCCDCDCDEEEDDDCCDDEEED*AliVKEBA?===>??AAABCCA>966;F(+**+,)#=:<854+5556888534534: !!"#$%%$$$%&&%#$&&" !"! !"-!"" "&&! !"!!!"$%$" !"#$#""!!!##!!""#! !  !"! :;<<; $%" "!=;98879; !"!=:8600:$%%FA?>831368520-,-024331.../012256420..-047;:876554346:?@@=73//37788=A:2111/.."/.,+.00010//00/15545542/,+,--.02212001101/.-,+?*+,,05310.-,-../.-,--,*(+03688532.*'&&%%%&&'(**(%"!""#%(*,2657753212>46755544433320010+&""!"'-/254670'#"! !$&'((*-012344555445656555678743346:*89::::8654333210./011146765754569:6555676787445666789: !   i!!!"##"""#""!!! ?==<<96542137;<7/8<6C;K) !A=:>@BCF-TDQPCKUApv~JJG}Q0F@=>EO.0Y7TVDBPX[gwmNN^e^ZYYZ[[ZYXWWXYXYYYZY ZZYYYZYXWXYXWWWXY XXWWXWWWXYXWWVUUVWXWVXWWVUVWXWXW VUUVWVUTUUTTUTUUTTUUVUTSTTTSTTUUUTSSTSTTTSTSRSSSRRRSTSRSR SSRSSRSSRSRSRQPQRSRRRQQQRRQRRQRQQQPOOOPQPPOPQRRQQPQQPNOPQPONNPPOPOOONMMMNOONOOONNONONNONMMMNNONMNNNMLMNONNMMLLLMLKLLMLLMNMMMLK +LLLKJKKKLLK LKKLKKKLKKLLKJJKJI JIIIJJJIHHIHIHGGHIGGHIIHGHHHGHGGGFFG +HGGGHHGFFFGFEEEFGFEFEDEFFEDEEFFEEEDDEEFEEEDEEDDEDECGw[b`Kn=\nuyLrlddOSydzn_Y][NPiaEGYYRA7M8~latRN{{J[jifikjd^^aedefaNz|LkuJMLvyEUb^Cqf@J>8C07/0>PTL=')SH@G@9DDBcMSZcA6GSAQWRX[E.A&26;89;=>>;754gj7779>>???@@@??>>=<<<;<=<;;98:==?@@?>?@BFDCCDDEFFGFFEEGGHGDDHJNTX]bikigiih]QPLF@<;<:::6200222468;<;;;<===<8676655533Z   ,!&/6< !! !"#"-+))+--(&').3322331/024557=E*O>0-357889:<=;;??9,6# *##$+21...-,*()'#!  #" !!!#)(% !"  #" + "$%" !!  !"""! "#|"#%&&%$"!#&'&$%&#!"#$"#,233431221//386651.*.49=@D$G4"$+`o܄0/<" N~Y{Q:0-*&! ! !!#&')++)&! & + +  + + + + + + + + + +  +  + + + + + + +  + + + + +  !  + +      +  + +  +   +  + + +  + +  +  +        + + +     + + + + + + +   *(0&( !>4a30.6?4`}dV^981P- &,0#;6%&268>JG4F"߆܆1؄׀>ȅ*Ä*^UOF2H+BNRY^Q1GCAD39bfWSdL_RDAED89OH12?>9*%$[LDTbn>9]UUY[5CNMKMONKGGIMMNPL9VX7gHS697dbiiSH'287.PV>#'# " >**% ),%&##+)%1',1:(#+'03/45$!263!+#1)*'  + + +  +    +$.:%09?J))((%$$%%$#"  !"#"!  "#%%%#"" !   55!##$%$$&'&&%#0&!!), (**4:?DHNOONMKH##$%&$"B@B@?>>;865666532369:88:;:::98 9::99:;:889:9888<>=#>?@@?>:99;==;99:8765458<=<<=>=97789:b=>><:;<=??>=::85345678757;;:9856;<:<>><>?=<=>ACB@?>=>><<<=??=<>@=>CDDEGIKGBBC@<:cRFoE-?4+&!$')*+S,.--,,---,+)(()*+,++,,-/0.../03334433356654469<@CGMSTRRSSRH=<82,(%$##" ! !}~}~}~}~}~}|}}~}~}|||}~~}~}~ +}}~~}~~~}}~}~}~}}~}~}~}~}~}~~}}~}~}~}~}~~}~~~~}~~~~}~~}~~ ~~~~~~~~~ʁ~~~} ̀ƿŲŶn¿½ȑW/+ 0#U߄JŻÀ¾7ľ'") aۏ̬ۛM9*#"! !  !    +    !    $Q˜񀊟̯∎ШӶи銊̬¿놈񼟪ܰ鼪ĸ۝ޟ󃎐:ÿĽٿñ蹿]/../.---,+++*,,,*))*,-++,,/6;>@!" B@!""$''&'&&'A%$%')+-/1353WKGIMOKKSZZ[_00158875,)0660+**++(%EDFIK&'((KJM''(((**()+,,*QLFBBHJFCBDFJLJIJKJHFHLR\___a]LOc9?CB>9dSJGGF?6-GD(2;CE?=BDFDBBCDDC?952.+/7@FH?3-+),,**,(%%(4BHHC<648@BCvSBFǥv@?>???@?>?@?@??@AA@???>==<<;::9988987 887888787878787878987789887878998789899989 88988988789899899898988989898999889899889:999:98989:99:9:9::99:9:99:9:9:9: 99::9:;:9:9:;:9:::;::;;:;;;:;:;<;:;<;:;<;::;<<; <<;<;<<<;;;<;<<==<===<;< ==<<===<===<=<===<<=<=>?>>=>?>=>?>??>>???>?@@??@? @@?@@?@@@?@?@@??@@@?@???@A@?@A@@A@A@@AAABBBAA@@AAABABABAABBAABCCBCDDCBCCBCBCDCDCDEDEDEEEDDApoVLGDDCCEEFEDGJIHFC=855;BEDDB=8877950./24578889865564446 !""##"!"$$%$" "##!!  !!!""! """! !##! !###$$%%#"!!!""!!"!!"!!!""!"!""! !!"!!!""!  ; "$"=>  4 ?=:635?#%$CA@:568=DC;50,+-1202210/..023345654455778=78998658=?A=74101553594100.,++**)(*,-.01/.-..0012320-,,,+*++,- ./00///...-,-,***)))*+,/0145331/ ...-.-,-0664.-\,-,**)))('''(*+*(" "%&''%$$$!  "#$%'(++,*(&$"! !%&&'((%#""! !##$%&)+,-/0124667877678766 +5666777642136;=8999743210//010//146768778 65676435545565566556667  !!"#W"!!!"!!@@@?>;86424798<1^HVLd2  !$&.EVK`IPjDMMxOd{H]>447;>AGF3,?K?T-J[[`itVZYZ[\[Z[ZYXXYYZYYYXYXXXYYYXXXYYYXWWWXWXXXYYXYYXYZYXXYXXXYYXWWWVVVWY WWXXYXWWXWVVVWXXXWVVVWXWWXWVUVVWVU VUUUTTUVUUUTUUTTUVVUTUUTTTUUTSTUTSTTTSRSRRSSSRRSSRRQRSRSRRRSSRRSRRSRQPQQRQRQRRPQPPPQQQOPQPPQPPPOOPQQQP +OOPPPONOOONMNOOPOOONMNMNMMMNMLMNNNMMNNMMLMMLMLKLKL KLLKJJKKLKJJKKLKKJIIJJJIJJIJJIJIJI HHHGGHHGGHGHHGGH +GGGHHGGGFFGFGGFFFGGFEEFGFGFFEEFFEDEFEDED EDEEDEEEDED`PFTmwnTugqnjb`pz{FPcfa`cty_MKc_NKBBR\|qrPWIYeiebdffd`_cddde`WMMPyPP`WJ`Djp[H9TPSG2E7/28@<35L27:Y^CGjI1'*,)/[8;`}\OWUH;:82/012D[79:i`^[_aG8>MJ5D72476nTB::3%?;::999878752/+**)-D>==?@BDDCBBA@>>??>??>==>ABCDB?>><989:879;<;J<=;9;<;98oponmn89;==<<::;:9::99:;===<=?@ABDEFHIIFEFHIIJJKLLMMMPTUVURRQMIFBB><>><:998877766766754321110 + + +  ?*" "%'$$,1148!"!!#"!")&#"#(,*()+.22012441024:CEECB>49H)-/,($<0*(**% )( '+,(&(+,*((&''&#"'&$(&!""! !"#$$"!"%'**)'%#$'),24/' "!!"#!  !!!!"# !#$'('%#! !$#"&220.,,,.368741/)(&'.!%&@'#_v8 C "  + >T>3,*('(,/0/-*$""!! + + +  + + + + + + + + + + + + + + + + + + + + + + + + + +    +   !   %#0 + + + + +   +  + +  + +     + + + +  + + +  +  +  + + + + +     +  + + + + +  +  + ?3=3; 0=2;/9P5<;`OY9FR0T4 "%*((.#(0834=OpҐ +;ۄ݄ ڇ>Ԅ?хυʄˉDŽDŽ9Į=1>QWZZ^]K5HBMIEBDPX\b4:GIGFFUZF5Y3G@2/($(5YeRP\:?dY]][4AKNKHJKKIGGJKKMNIA88:lXa<;j`^`b@4*7,HJ6)"103+"(! .3(+<%6#%@R5+0/'  / 61/-.0#'# 8&    +   =-7>=>>>=<;988787*:<:;==;86764_XQMLIC{nVBq`NF@6.+'H$#!$%%')*)H***+,+++--..1334664247789989:;;:;>@AC@?>:62/.*(*)'&%$"" ! }~}~}~}~}~}~}|}}~}~}|||}~~~}~}~}~}~}}}~}~}~}~}~}~}~~~} +~~~}}}~~~~}~~~~~~~~~ԁဇ~}|} EĹԼ惌εù콢ϴ¿ޢm60 + O!Y_" 􂂀ĵþڀ±ù`e㮅ƍ닒ƬʢK4)%##""!""!"!  !     +   !    +9넝ܙЈ񀇙͙Ƣ֧ջ瑌ڳ׎̈́װǹ퓪ꉁ𭖍壉ðӀֆýĬȥյӎ̀·ùλ􀈋¾11110/0/-,**++,,+*))+,--,+**+)')29==;> ! ! @?#'('&'%'*+***+,+PG?728>HJFCBCFJKLJHFFEGP^dXG;54>W9>>>A?fH4+4:92+,027?A@???>=9;>BB?;984003:FU/W>'!&,-/237:?CEE@>??@CGKMLJJKLNNLJOT\er?zyAFKNPRS}aOGA>:;BMSVYZXVX[]_^]`a``_^^]YYYWWXXWVXYXUSVYYWUVWZZYYXXVUUUSONMJKLKHFGHGDDJVab]\[[\akquvqnnlfcdiry?BCAmHviCA@@?>?>>???@@@???@@A@???@@@AA@@AA?>>==<;:878878788777887788778789898788787878 77788788898887789898898 +998898899989 88989899989889998778989989998878899989998:989:9:9::999889:9:99::9:9:;;::;::;;::;;:9:;;:;: 999:;;:::; :::;;::;;;:::;<;;:;;:::;:;:::;:;;:;:;;;<==<;<;;:;<;<;<;<<==<<=<<;;;<===<<=<=<<<=<=<==<= >>=<<<===>><=<=>=>=>=>?>=>???>=>=>??>>>?> +???@@@?@??@??>???@?@?@@@?@A@@@?@@AA@A@A@???@@ABABBBA@@AAABBABABAAABBABBAABABBBCB +CCDCCCBCCDCBCDDDEDEDEDDEEDEFEDEDEHDDDyUkWPMIGHGGGJMQQOLHD@947=@=:9876434510222367788::86534535: !!!!""#"! !###%$!!! !"""#$$$#""#"! !"""#"!!! !"! ! !! "#" !! !"  "%&$""##!;644699635<"#"DA?<:>@?80./.,,/23468876557766554446899889:;=>?E#"A?;88865433468;7310/.-.--+(&'(*-//.,,,-/110 0-)***,+*+^*+,-,,..//0///.///.-,*)+-/1332/,,..//01110./1000.06:5+''(()'$(-02334420///---+-13..222.&!8 ""$)+,-*'')-.01124445 577644468998744566764345544 977754236;f988654310/012111441001467446865468976763433554222344334445677:88:  "##" ! @@@?><8789:;8:98D>R(!"#""$'8JKPV4>A@FIIO_{LPKHC>9fWNT]\TF@N]J1/B\dgr^[ZYYZZZYZZ[ZYYXYYYZYXWXXYXYYXWXXYYYZYXXYYYX WWXXVWXXWXYZXWWWXZZYWXXXWVVWWWXWX YYZZXXYXWWWVWXWWXXXWVWWXWXWVWVVUUUVUVUVUVUTUUUVVUUUTTTSSSUTS TUUTSRSSSTSRSTSRQSRSSSRRQRRSTRSTRRSRRRSSRQQRQQRRQRQQQPQQQRSRPPQPQQPPOPQPPOPQQPPQQQPQPPQPPQPPONNOPONONNONNMMNMLMNMMLLMLLKKKMMLLLMNLMMLLKLLLMLKKKLLK +LKKJJJIJKKJIJIIJJKJI"JJIJJIJJJHHIJIIIJJKIHIIJIIGGGIIIHGHIHIIIHHGHGGGHHGGFEFGFFGFHHGGGHGFFFGFEEFFGHGFEEFEEFGFEEFEDEDFDEDDCDDEDDDEDCAOu=Rjxx{`b;WG]LzOJMVjzVguZ~N[M]HMPp~WUIQ[adb`abc`]^ccdheYOPUTQMMNJ}v\;\?[WE8ijhkrf3X6('(+1D/W4\kWZ_\\S=<";9pjfii9>AA?BIMGDCCDCBA?=<;;<==<:;< +;<<:;;9::989:;;pklonm78opoop9988898lhghgedba`a``bdhnvyzz{vqqmgc`aefgmleb`_]XUQMMQPOQUTTSSWZ[[YVTRQQRQONLKKLMKJLNPONLMONMNNNOPOPQRQOLLLMNQNJII~HC;jeZNB9/I;9"*+0-:&(:;.+88& *%=8Q?53,.!++F@D$&().5e[bgfimp8<<==<<;;:::975553310//01000  + '!&245d "!"  !! #%%')(&#(*)))*,1221/.../7AF;.&"!*;&('&'&:%"#")+a,**%%')(#&/, + !$$#"%&%$$&&&%#"$',2: ?76!$%%&$=,   "$$$%#"!!!  +! +#,-,+++,18;<83/+)'&'*2;!$&%9"=]䈍 %U4 + ++ 'ۃR>60..-++-14652/+&  + + + + + +  + + + + + +  + + + +  + + + +  + + + + + 3 + + + + + +       + +   + + + + + + !    +    + + +    + +  +          + + +  + +  + + + +  + +  + +  + + $(0(- ).7C(.0.133:J_73.+&# :/+3;5.%&7?-)9:#81=3V:kabf89APfwZ;HS>Q2XX<1O9,,3^WKY?>hacf4:AFIIIHHIGFGKJKNLA9;?><99:6fb_[T>$5'T94'!@@AFJ>"'! %"!")1$%3&17@57745. %###/27214$   %" + + #7!*8EL)*&$$%&%$$$! 52135 ##"%++&"!!   !?<=?==>>>=> =<;;;9)7888:9BB><:8630/,.00/032!467664321121/.,,,-.-,-/00.--.-,-.0 12210../1341-,)$>80*#$    + +W  !""$.81,+)--(',39==; #$%*.037546998999:::89;>@==@C$DHKJGFFEEB;kbYMCr-E/D5)?67;<@EF%&'')+9))-013688;>=;99;<::;;:<><<==;:975776420.,++(''&%! }~}~}~}~}~}~}~}~}~}~}}}~}~}}|||}~~~}~~}~}~}}~}}~~~}~}~}~}~}~}~}~~}~~~~~~ ~~퀇~~~~~~~~~}}}|} (½µ΄ϷȨҿ˄O֨B:0 + !U м̀ſ@Ŀ*<[В蠃󃓙􆏕©ƱF6+$"!!"!!!"""!      ! !!!         /l䐞ť̬׺Ȏע̣ʂ˹半΢ֲЀĮᷞˬƼ뉒ͯŸ̛ۂ뉩hҸ¹ij̀ٸʺߧ&00/.--/0/..1320/-,+-.-,+++,+)(+5;>@=;<>A?#&&&%KKK%'()*++)&$HGC>9544>Ucf457;<:87995/'=B.3/--*('&'(%CCH&()+-+*)++)(9MKJLNLIGGEB@DFJPPHHSXPGIMLC?CGA7236I4;7eZQE5-++-25:<<;<<=><;;<=<<:654438AGJMRQ<&!'.:KXYTQYSTPLLKJIHKOTXYXTRRX]_`aadglqqmlo?INPMDvdSGA@?=;@JSY][YWY\]`bbabb``bcccdedb[XZ]^`_][ZYYZYXW;VVVWWWXWVSPNNMNNMLJHHHJMPRSVZZ[]^bltwtljljdekryADv_Swjy@?@?@A@ +??@@?@??@@A @@@?>==<<;;98987787787888998778877878 788998899878987788988777878 9989998889878988899989889898898989:9::99::9:9 :999:999:9899:;:::99::9:999:;:;:;;;:;::;::;;;::;:;<;:;:;:;;<;:;<<;;<;<<==<<;< ;<<;<<===<==<=<=<;<=<<<===<==>>=>>=>=<=<===>>=>=<=>=>?>?>>??>?>?>?>>???>?>?@@?@@?@??@?@?@@?@A@A@A@@A@ABABBABABBABABABBBAAB AAABABBBCCBABC BBCCDDDCCCDCDCCBCDDCCCDCDCDEEEDDDEDEDDCEEEDEJDwgROOJC@@>@EGGKOQQMGA>?=;988554453332/./232148;<95453004< ! !!"""##"!!#%%%$$" !"#$#""#&&#! ""! +""##"""! !"!5 !"$#   !"#"""!!"$%#!89!!"! :,)14 :C###!A@@AFOL;1024666555433544568 +679875656898:99:<<;:;<<:411137AF<72..//0100//.-+*+++*+,./0/,+,+***++)**)*,-.0110/.++,-.000/0/-.//-,,-.00//01223433211136544533323H10//.-+((''$!  !###!!"#" "#$%%&)-20-*'%$%%%##$$&(+-/1235753 765433321132!3335797555653234444 45776536:998754320//.0110010022135.43456777655677753443321244322332344696547:  ! ?>=X<<>?<:<<;5BKCJk5 ! !#'(LKYcj?NQS[`guDsr=ACB=mfecdh[FBNUNELRTJIUoXY\ZYYZZZ[[[ZYYZ[ZYXYYXXXYZ[ZZYYZ[[YXYZZYXXXYXYZZYYYXDYYXYYXXXWWWXXXWXYXWWXXWXYXWXYXXWUVUVVVWYYYWWWXWXXXWWXXXWVVUVVUVWWVVVUVUUVVUVUTUUTU TTUTTTUUTTSSST SSTTTSSTTSRSTSRSRSSSRSSRRSRRQRQRQPPQQPPQQPQQQPPOPQPOPQQRQP QPOOOPPOPPPONONOONNOPONMMNNONMLMMNMLMNNNMLMLML +MMLLLKKLLLKLKLKJJJKJIJIJIJJIIIHHIIHHIIHHIHHIJHGHHGGHHGGGHGFGGGFFFG FFGGFFGGGF EFFFEEEFFGGGFEEFFEDEDDEEDEDCDECHkWU]glmrp\CZAD]pO\]t]dwMCNU^sXLLvgyYiJUPJJKOPNPRV\a`^__`efdfgaWPQWUSSNIxmh_PF?;@z`Ybg`kDD]BWHE4-,3CSPGD;,)5JNM7&&+6FXZ4>?PZVcYD9+1OUQKD:E\8?:5ca88=>F\RLL@E%!! ;3,)7-NrK[nDGJKIFGHHGAw;:;;::;;9jefjg`\ck8;;;=>??><=;:89755530011 82^__M]ck]5.5DIHEFFHLLKMMHA;=@>>?<6bSKI@4,'&(K:7=A=D..:'/g%#"+(" '-, +/$#-31:2%*/,'""0$ 20$ ,$.'$%  +.>(09EF@ "#%%$%%%$8423530.27 !!!%+'# k5;<<=<;:99:9989;<<;;<;::<=<<;;;<<<=<<=>>?=98;>?>=>>=;:853468:>DFGGGFEDC@?=<;;@!##!9)3&':-($&*.('"$'),-/02d0]YTND:eO;P6+*('((),..02224568:<<>$???>=<;<;;:88632220//.-,*('&$###!!!}~}~}~}~}~}~}~}~}~~}~}~}~}}}}}~~~}}~}~~~}~}}~~}~}~}~}~}~~}~~~~~~~~~~~~} ΰȱpſýήD; ZW\([킈ބAA񁌋􃗫܄ꂅЭG9-%"! ""!""!!"!!! !  !!  !  !"! !   !     !     #I썙óĄ벗¹煇󉊁췙蠫Þإճ䶠ҏͱϪ둯ѹÿǽ̢ḿɘ40ɚ˸熠^4211/.--+*-1353111/-,,**,07AEDI&E><;:9;:99;<<@#$%&'&&()((('&HC?<:64447>Y5g468:=>=;;<9/#<*2,&&(&'('KM(+++-00//.--,*'$GKNNLLJKJFDFJLMLO[kh\]g`OJSS>1/378747?LYH1-/+'+26249<>=<<<;:;<:88:;:730///.13469:5*(.>OXa2]RPPR\0/.//.]/1. ,../14679>??BCEB=?EGEA>sbQLJHEA??BJTZ_a``a^^__abcaaceddeeca_[XY^bccbabcb_`a][[YWUUUTV\bee_ZVRPONLLJIECKX`[WUVX]`emwysrvurmimrv|sfcƂd~@>=>??@@?>?@?@?@@BA@??>>?@@A@?@??>>==<;:999:9989899889878789988877878 78778898898887778988988898987788877898887898988989989898989 88998988898989:9:999:999:9::9998899:99989:999::999:;:998999:99::9::9:;:;;:;:::9::9:;;::;<<;<;;99;;::;:::; <;;;:::;;;:;::;:<;;;:::; :;::;;<;;<<=<;<;<;<= +<===;<==<=<=<=<<===>==>>=<<=>??==>=>=>=>?>>???>???>=>?>?>? @@???@??@@A@?>??@@@???@@A@@@?@?@A @?@@AABBBAAABA@AB CBBBABBCBBBCCBCBCCBCDDCCDCCCDDCCDDDCDDCCDED CDDCCDDCDDCDEDEFEB}TeTSLA836;>?@CHNPOPKFEA:8;<;:9::9:8400222457:98887325;<;; "!""###$%# ! +"##""##%#"#"#$#! +""!!"""! !l  !"""  !"""#$##"! !#%$" ;759$'#<9-)02454;#%%$""!A@?CHK<1246788:98987666544566774479878866789 ::9;;74-)*.3:F@4/../011002562/,+* ,-+))((*)('(*%++*+,++,-,+++,..-.,+,-,))*+,-..+,//..,A+-002211100/1357765444322100//..011/-,))***)'$%&%#"#! !#(.2234576667522320-)(%  !""%(())(),./01453344675334643444310134433321112100/0112212343467778998865324545434335,755543215:996557510.-.022334547656579776667767754454354432223568962348<] ""##"!>=<<;<<;;<=>??@A=A66BQ$/1569;ZJCSXMd~sI.)PG1%4T3^R8(%"!"'54($$''&'99XZ\SFA982P=?CC=ojhhgb`ccZWbhfflolifeedceggedccddffeddcdffhkmjgghhggihgec`\ZWUSSVXWYWUUVWYY[\_`_cgfea\YVRMLLKJLMNMKJLKKKLLJLNKIIHECDEFGHFDDCBAABDEFFEDHIFDBB=:dR<,&$+)A(&2, "#%&'&&'(('&%&''&&&%%$"!4-@P]a\XWZ[QyYK9^MB@BDGHIHDCA@CCDDDFILLLKMLKMMMPQRQPOMKKJFFIJHFDDEEGHHFB@><::9765L  5!B!"# "!!  !#$$%%&%##$'*++.9GG==B;/,32$#%$"$(/5&"'(()*(&&&'%$#%%#!).30)(()/0!" "#$$"!")!##%&#!"$$%%$#%'())(&$! "#$$%&&%#$&#"#$"""!!#%)**'$! '$!"#%)-2:BB=;;840R-035GC;/>18"!! 32?&?"&5>=ACB=0->l ߄؅aͅɄ2DŽ(Ås=A=JUH470*;[B?8A@:>6?LN^YTC-T=L\c`ckjH4BVMCY8976`^794258=CC@ADHJIJLLD>>@=7=?bB.#%(!17/9*9-(371BQF)-%,3)  5;<1$$"=@;.,20-6!$$#"$+6(%!  5'2:AK'%$! !!"!6+ /867765789 ::;: %)("=97874244/-3777:=<989:99:88877888998989<=;89:9:<>?<<:8763222566554q5689;<;>AAA>:8730-..-./0/../...//--/-,--,)*++,,+*)('''(*+,-,+.-+)('#!7,$  1    +         !$   &)''&+/,C1(4.)),/013421103345459<';9::9:<<===<986423331/.--/0/.,+)(&$#""!}~}~}~}~}~}~}~}~}~}|}~~~}~}~}~}}~}~}~}~~~}}}~~}~}~}~}~}~}~~~}~}~~~~~~~}~~~~~~~~~}~}~}~}~~~} Իùmż̯B3   + +X뀅ĻU\ꆛ¿ȳ>1(#"##"""!"!"#"! !!"!  !!!           ! !  +5Áօ˭ܰ͵Ļҝ퀖ɪӺӀ³b N8766521.--//./12212341-*(&(.8E((E<898998889:;;>#()(''&KHEDB@;765532359Ke459::;BB?=:83-+,.1333468648;<<=@A@>=<:=BCFKOMNZ368757=A@>=<;;<<>BHIGGE>p`\aaVMGB=:9:>HQY^dedcc`YWX]ceedegihUihge`]]_abbdfedcccehigda``cgijlooonjaXUUTSRPLHDHPUUTQT[ahmsyyuty|rjnsqrqgWgy?>>=>?@AA@@@?>?@@??@AA@@??>=>=<;::9:9878787879878778899878999878999888999888998788898 998889988898898998789898998898998998898899:9 8999::99:::989::99::9:9:9:999:;;99::9:::;:;:;::;:; ::;:;:;;:9::; :;;<;;<;::;;:;:;:;<;<;<<=<<;<;;<<<;<= <<=<<==<<=<<;<<=<=<=<=>=>=>>=>=>=>=>>??>>?>?@?>>>?@?>??>>?>>?@@@?@ +A@@A@@@???@?@ABA@ABABBBAAABABCBCCBABCBBBCBCDEDDCDCDCDEDCDEEDDEuFEDEEEDDDEDx_SOC627:99:>ELNNKHFEC>=>>;99::;<<><::98789;;=>=;= 7469755657; ! !$$$###$&'$#78 !"""##$$#"!"&&$#"###"#"! !!"!"&! !!! ! !!  !#$%$#!! & !<;856< ##@2+4732327"$##"$#@=?@CGHD>;<>>;W:998657887778864322359;=;:<<83231.-/0/2662-)+--./0012331.,++*,-../--.--+*'&()*,,**,./.-, *(''))**+,$/001.++/552113321/12102420.-,-/000../..-,,-/0133212201100135656775a33555443-)&%"  !!#%%'()*++,++-.//002235676567656665333221/../01333211210/0100244567567765566655446654442369768::610///0122247654445665655676545665434579;85447;==X !!"##! ><<=<::=@AA@?>>?#-;D4;+,2579;C4GD9m?KRZkNRPJHMI;8=@>?EG=eYXefQJ\f\LDC;:HgX]\Z[\[[\[[[ZZ[[ZYYZ[Z [[ZZ[ZZZ[\[ZYZ[ZYYZZZYZYZ[YYZZYXYZYYZXXYXXXWXYXWWWXWXXXYZYXYZZZYXWXXWXWVWWVUVWVUVVVUUVUVVVUUTUTTUUTUTUUUTTSTSTTSTSSTSRST UTSTTTSSSTSSRSSTSRSRSRRSRQRQRQPQPPQQPPPOPPPQQQPPQQPOQPQPOPPPOOPONO NNNOOONNONNMNNMMLLMMNNMMLMMMNMLKLKLKJKJ KKJKKKJKJKKJKJIJJJIIIJIJIHHHIHGHGHGHIHHHGFGGFFEFEFEFGGEFFEEEFEDEFFFEDDEEDEEDEEDDEDEDDEECKuL[[dfRzYS.9P6MsL`okpuu_uRVaeRWzyswyxqw~JRSPLIIKJIRTVWUYaedfhg_RLQVMuZD:<<8bPD;I=UPxWJ`n`CC' "&*)'(*/42+$&+*&%%&%$%&&&)+.2.CZcQ46CH-Ibeba8;hX[3AB@CB@?GW^aK10BKKJJJHP[cluxwuspmlmpoomihc[QMORY\_ceghe`^`beffdeeehjifdefhga^]\aliSJU_gjhfb_`^ZYZZ[M\\\]_a_^^^]]^_`bc`]\]]\]^^_bb`abb_^^][YVTRQRRSSQOPRTUVUUTTVWUTUVVVTRRTSNMLJJKMLLKJ>HFFFECBCDCACDDCBCDCCDA==;85aRIKD4L?=0( #&())'')6&'>899; $'t&%%&(''&%%%"!!$&&&%$#""!!! !#"!!#"""!! 88741/5:998; ! ::<= !""" !"#%%&''&%$#! !#&++(%" !#&),,+.12135672%7%)*(')+'!!(-1Q20TKIKMM()*-..,*(&%$%&%%#  #&)/0*%%%FEHIKMOQRRROLF?<=>@CDFFHIHHJHFEHHHILJHGFDBBBCDEFFGFEFEDA@?=:1$"!!!  ()>"#%%##""!!! j"!" ""! !#$&+056,%&$#  !!"! $%""#$%%$$%&),+(%" "$$%,!$# !&%"!% "%%%&&$! "$%%%&')***(&#! "##$&'&&&''*+)((''(+,...//-)#!"!3 #),17=DCA@@B>4.0337;;6|ك +% +3@hL5qL=."#+011/*&$"  +  + + + + + + + + + + + + +   + +  + +   + +  #%")  + +    + + + + + + +  + +  + +   +  + +     +       + +   + +    + + + +  %)%$3-#C*5IJ8:""'6987!":/0##"%$"#.13& %'M+036:<<;97668:::8443.(&)-02467785323456655668997778::63115<9+(/6;<::6454223345$79877655677897554446778::9:::86654421210//1457786677557645652121110/...//--,,+)())('()**)*+(&&%#!;2,-'&    + E  + + + +  +    +  +51464/ +  #()*+-//0.-*&&(+-135679877620244567876641/---,,,./0/01/-++)'&}~}~}~}~}~}|}~}||}~~~}~}~}~}~}~}}~}~}~}~}~}~}~}~}~}~~~~~׀~}~}~}~}~}~}~}~} 󁉊˥灔򇞠'8Ĵ<- +   $^酁ހ#͝؃Π䀈'οȾP@1&"!!"#" ! ! !"""!!!"!  ! !!!"!"!      !     +"Rڍ˧ʔ΅†ľƨ囚ͧٻةԦٕŽ»»ǀ̵ۼ߀<;9865310//110158::9730/04;75421114BHKJKNT\a`_dee68:=CFFFD=CJT\aa``_\XYYXYWVY^baa`a_bda_`a^\[]acef+dcdfgfeedcc``cfikopkgeaYRQSTURNLLJOW[]cdfmsxvrrqromlje^YSv?>>>?>>>?@@AA@??@@A@AA@@@?@AAB A@?>===<;;;:98988898898899888778 7778887887 +89877888778 99888988899878987899899988987789:989789:988988778898989888988988899988989:9::989 :98988999:98899889:9::999:9:;9::;::;:;:;:;:;::;::;;;:;<<;;<;;:::;::;;:;:;;<<;:; <;<<<=<<<;;;<==<=<==<<<;<=<=<=<==<==<=>=<<==<==<<=<=>=<=>>?>=>==??>>?>>>??>>?> ??>>?>>>?>>?@???>??@? @@?@@@A@@??@A@A@?@A@??@@AA@@@AA@A BAABAAABBBAABABABABAABCCCBCBABCBBCBCCBC DEDDEDCDDDCBCD CDDDCBCDDEEDCDEFEFFEEDDE DECmaZRGB@=;>ADB=K.,OGEEA@CCBA>;&=?CEEEC>:8:<>>=<<:<931/-,,059< "$%&%$#"  "$#"""!"$$#"$'%#"!"""##$%#"""!""!"! !Z  !!#$"98: !!! !"$$"!!!<;<<<:51027<>6/04567646?$$FCE$A?@ADEA?CDCA?;;;:=>?>=;:87]889866534689;;;:8:9424620356777884+((-/1310221.+*+-,,-+++,.--.../.,+---++,-./0/---,++*))'%&')*)*+,-.00.-/1211000/0/-+*)(*,,+,--.0.+++-.,++,-g.../01112220/..///133110/00.+'$!"""#%&'''()*,./..--../10123346778877766665543432212210134433421014865455665578:755455577875663236768::8410///001366545545544555455677666765654v7:9744467998:778!""! >=;:99;>CE#"DB>C9T=>+069=??;<+XnS?L_m|EGIMHsh7`TF>0>,  %(-235420120..-...0146:;`;;=?!#%%##$$$%&&''()'%$$#"##$$"! !%&&&%###"!#%#"!"" 403 45:;;!" !#$"#&%%$#%$$ #! #(+))**,,,-...-.04579:;85/&$&({*(!74"*--.../10-SPNNRROT-./.-+&!"&&'&%$#$# $)*++,-,)),*$###"$$##"#"87974014688:ABFJLMQPJHEEDEGFC@AAADEFHGEDCCBADGFEFEEB? )('''&&%$"  "%%"#&  ! -:85210-+./nY-(  "3"&`[iM=/&" "!+.'$"   + +  +  + + + + + + + + + + + + + + +  + + + +   + + +.   !      + + + + +  + +  +  + + +  + + + + + +  + + + + + + + +     + + + +         + +  +  + +(  + +  + + +  %':%%-2/,,243,3!+)*.8A;330$!\eƑ.ۄք!Ն'ԄЄ Єπ "IJWcJ^:+ &,5,QNAGRE5NR;D4M6Q_lhdTEFPY\e799::5b]^d6:@>TU@=@>@DHJKKG?5\P@/!"&,+5%#$9>;6% + +  + + T  C9: /:;;8""##%**)-1,+*,,(%%&%%&'(()*-,,-+,..-,(%%+/3577521210122320001/3355543/,*)'#)/0//477642210124310/12123332245432~1135556641000///121234333454445974358::<;8543201234543542012210.--..,+**)(&&)++,,-,,*(":1&       + + + +  +   +  +   + + + + [    12102203   7  "(157:8221//0020-,+,/2331.-.--,.0///0/-+}~}~}~}~}~}|}}|}|}|}~}|||}~~~}~}~}~}~~}}}~}}~}~}~~}~~}~}~}~}~~}~}~}~}~}~}~}~~~}~~~~~̀~}~}~}}~~~}}}~}~}~} تɺԂ傍ƺ!HͺF6  ~M[ȽK掷ϫ肎ㄔ٦G?/'$"##"!""###"""!!!"!"!   ! !!! !!       ! !   !=yċҨᏳ؈¸뽪񆗜u̺îև¡¿¢u!CA?>=;9998897765439ADFE><>???@EMVUJ=98887778889;<@CBCB??>==96300024;Ofhf3465579::86/"78:&(&$"#*-+*-3663-)()*('&&&'&%$$%&$#$%T%ECEJRUSP9'FEB9/,,*+/C/4653ZI>=D)./++1799::9879=?CGEA>=:6651+*/2368989:755676787655894;==;:<>??@ACFFEEFJOQSWXVSVao8nked_WPHGEBCJV_b`YSPOPRT_UVW[]\ZYYYXWVSTZ_][[[_cdbaabdc__bcbbfjmnmmjd`[WTQRV\^\[\^bdgknorsuxy{~}{xqe_]\\[[Yp@?@???>?>?@A@AA@@?@A@>==<<;;;:989998898989898 +98878898898989898 +9898898899898899989 8889989:9988988989:989998889 8999:999:989:9:999:::989:9:9:::99::99:::99:;: 9::9:::;;:9::; +::;;;:;;::;:;;;:;:;;;::;<;<;<<<;<<;;<;;:;;<<;<<=<<=<<<;;;<=<=<<;<=<;<=<<= <===<===>=>=>?>>??> +==>>??>>==>?>?>>>??>?>???>?@?@?@A@??@AA@A@AA@AA@@A@A@ABABBAAB ABBCCBBCCCBBCBCBCCCBBBCDEDCDCCDEEDDEDEEEDDEFEDEDEEEFFEgibWMIIDACH&)-00,IA@?>U<;<@CFFFGGD?=>??><<<94/,+)+.1568: !#%$##"   "! !!"!!"$$"#%&%##""! !"##!!#$$##$#"!!"!!!"!  ! :88!""!!! {"$"! :;=?;3-/6:=>::81044337B$$#$FA?A@DGA<@H$E@=>CDC>9740.--/144333458878986788654346@?<879::<9559;963210.,,.//-,+))+,,+M,,,-.///..,+)(&$%%&&&''()*+,--.03651.././//.-..--,,+,,++,/0/--./00/-,++,,+++*I)*++,.010...///130-,+*)($""###$&((()()*,--,-02110../1342232234456656566654432232245665434434576 6546:86544338754225 8::952/ ./1455432235 6677666776788765%456777878:932455666798777:;;;!! Q>:8;>@ACFG'6>4*;./7>@?=B,KicPNRbsCKJjd:BC@@KVWXXRIrG?U]B5=?>@ED>HbQ^a]ZZZ[\[[[Z[\]\[ZYZZZ[ZZ[[Z[\[Z[[[ZYYZ[[ZYYYZYZYXYYZ[ZYYYZ[ZYYYZYXXZYXXXYYZYXXXYXYZ[ZZZYYZYYYWXW XWVUVVWWXWVWVVVWWWVWVWWVVUVUVUTU TUUUTTTUUTSSTTTUTUUTTSSTTSTUSTTST +SSSRSSRRSSRSRQQRRRQRRQPQPQQQPQQQPPOOPPPQPQPOONOPPONOPPNNOONOPPOOONONNMMNMNMMNNLLMNMLMMMLMLMLKKKLKKLKKJKJKJKKKJ +KKJJJKKJJJIHIHIIJIIJI HIIHHHIHHHGHGHGGGHHGFGFGFGFFFEEEFEFEFFEFFDEDEEDEDDDEDDEDEEEBOt\ct{m]sO/@Q:PcvDRULFuT[AX[LKZban~}gd`cLPQNNJGJRROMz[VXVY`fbV^JCDGILJB>7WPUWVb9DHDjBG('(&%%%$#"!""! """#$&'(('R()*,*4GwdYULGDPUMC;M4CFBCEMVXVX\[L;=CCCB?;>>@@ACDFIJHIIFEEJPRQQPPPQQQRSTSQPOONOoNNONORQPPMGDBCGMSUURQSTUSQOOPNMLMLLMNQTTRROMOPNOOLOSSOMLMNOMKIJIIKNPQRQRSSPMMPRSSTSSTUVWUUUTPLMLKHKNONQRPOOMKIGFIEEECBBAABBA@@>:6`P@1O;2' "&*-.../111221.,,-/011//..//12599789>!"$%%"!"#$&'&$#W$##" "%&%"!#%%#$&''%$"! /11/12347"%%%$&&%%'&%$%'(((&'(&# !%)+,,-8./14788652.+)&%(+-.,&"! "'*+,--,,-.-*QOPQUU+,0321/.+('&%&)+M../00/.-)&&$ !%))'$#!74554200/003578AJJGFEFHGDB@AGKHDEIPVUQNQTTMJIHGDA@@AC,+***)' %%$" ")+*)#"! *"',*!.?CD! !     +   $,011#($!( ! 6*""("%%&&&%"$'(*,*'%" !!  #&'(**$ $*&!! !#"!!  "%&&%%$&%"#&%%&(,.0/-*&# " !$&*,-5031368;L-8:4/M4<->?22?GDKUUc]FDABYf5886743ff5<;88U@b?@@CIMI>\@3,-./1.&#,(+++2')'9  + + + + + + + + + X )H:42*%"+-( %%'$$&,221363'$$$%" !##"""#$&'()++)))&%&*./..---.../000//..--..-,-0/./-(&&&(,.//../010.,,-,+,-/11/0.-.0...,.11.- /.,,---/12343%200344455668:<::;:7455312444776653320/.--+**)&# 80$)        + + +  +   + 7 +  + 100244   +   *''&&$#%# #())+08;84248830/--+)))+-}~}~}|}|}~}|}~~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~~~~~~~ǀ~}~}~~~}~}~} ٯ֑܀瀐ľÿӾȾjȴO@T]􀄂Ͷ˿G݈臆஖홑ӻ®Ɣ}7+%"!!"! !"##"! ! !"! !! !   !      +(MƯƎ돞ǽ݁߳ƷɹǬôíˡʀIJFCBA??><;;;==:989?KRSUTQLHCDLNPSW,O?9776677678647=>==<<=<;83//036;Magg456|9;;<;7-# "#$#"!!"#$&()+1763/*&##&'''%%()(%#$%%$$%%%IEHLNON>@((N,21./29M5;9653ZGBK*0434:>><=>?@@ABBA@=99:9759;6027;:899::888:8568::;=?BBA??>?>?@BDEDGHLPTWXWOEA@FOarywslcYPMOPRU^ii_WSTVXWXVTSRRUVUWXYWUSRRPSVVXZZZ]`cbba`_][^aa`chlkifdc_ZTONS[_beiprsu{zzz|{yy~}zvupc]^YQW_filue??@A@?>??@???@?@??@AA?@???>?@A@?@A@??>=<<;;:98987778987878877877878 9998889998989987788998899889998 99988899989899988898989988998988877898889:9 +88988989989:9:9::99:9:999:9:9:999:9:;9:9:;:;;:::;:;:;:;:99::;;;:::;;;:;:;:;:;;:;<;:;:;:;;;<;<;<;<;;<<==< +===<<===<=<=<==>=<=<===>==<==<=>>>=<==>==>=>=>>=>?>>>?>>>???>>??>>>?@?@??@?>?@@@?@AA@A@???@AA@A@ABABBABABABCCCBBBABABCBABABCBCBCCCDDDCCBCDCCCBBDDC +BBCCCDDDCCDCCCDDEEEDEDCDEEEDDEEDEEEDEDEFEWDDDEFDE`~bTLJOMDA$&$%-681'>877657761.29?BCAABF$$C?;75664/+*,/134449< !"! !!  !! !"$$#$&'%$"!""#$"!"""# +"!  !! !  < !" < !!!:993/39;<;;:7334302>%%###"B@AGG>:?EGBD'(NE5)&&(''%#%'&&')+./--..///-,+++,07867=BA=9769:733697686332454422210/.--./..,+,-+(),.120-*(&&&%&(())()()**+,-.03543/+,-,+,,,-...-++,,#,./000/01/0121121//.--,*+,++,,,--//.!-.131,)(%#! "#$'*+*(&(**+**+,- ..-./10/1454344556654443444320/011246654A34466576555212233457888 55565,5431125:73000/0256567654568889:99877767#6766666565467677878995246788999W !! ??!!!CB"/A@/B48?CHG@$8Y@K\>=iLPlWPbABl`k?EQ]_WAJ,=_]>16AOK@=x]^[ZZZ[[Z[\[[[\][ ZZZ[[[ZYYZ[Z[[Z[[\[ZZZ[[[ZYZZYYZYYZZZYYYZYZZZYYYZZZYXWXZZYXY ZZ[ZZZYXXY"XXYZZZYYYXXYYZZZYYZYXYYYXXWWWXXYXYXWXWVVWXXXWVVWVWWUVUTUTU TSTUUTUUUTUTUUUTUTUTSTTTSRRTTTSRSTUTUTTTSRRRSTSRSRQQQRRQQRRSSRRRQRRQRPPQPPOQQRP QRRQQPPPQQPQQPOPOPPOONNONONNMNNNMMMLNNLMLNNMNONMMMLMLKKLMMLLLK LLKLLKKKLLMLKJKJIJJKJJJIIIJKJJIIHHIHIIJJJIIJIH +IHHIIIHIIIHGGHGGGHHIHFFGGGFFGFGGFFFGFEEFGGGFFGGGFFEFEDDEEDDEDEDEDtEFZnwcCIP21B?gAEFAbDFlDQVUMED[ynfxkagq~JRQINRM|}PRR[`T}U>77>>=;:;<;:9::;==D$$$#" @@@C"!D##%'&$"CD#$#"!!#$"!"#$%#""$%&((*--*%" !2220/./165 "#$##%%%'+-,+,,--,++**())&$*'*--..--./0//0121//.,*(%"%+0/*'#!!$%&)+-.-+l./-SQRSW---.3665320+'%&%%&*-//122101232,)+,& &-1/($ :40033441//3589:AF$%#""! =:=?A#MPUYYX-143,*)))OOMLOM30.+*++,**(()+,('&&'.1//-+($!!'((*,&+@BA@>;1..*&+29>Fa׃&4=7#@FCP[@2-.-&! " + +  + +    + + +  + + + + + + + + + +  + # + + +        *$    + + + + +  + + +   + + +  + + (  + + + +  + +   + +  + +  + + + + + + + + + + + + + i )' $&($+G05V7%-U>;VA0.=)':0:$(/781$%'@8!'.65/.e( քυ_Ʉ˄ +ƄŅÄ)¿NhkdXE+,1!$B*,/,>'*K29:70*):Qb\KG_hSKEHNW5<:d^]`g59<9aTV`;><<;86642158>N_ee347999:;;9862*A;<<<=! !$')().3770+)'&%%&4'())&! ""BABCA?ACDGTQ00+/3:DJMRYb5875:C<[FO.5;=?AAA?= ?@AA>;87769:;_<>=>??@BBCDDAADGEBEFFHKMR,..WSUUUTPS,,-06:96dYPHFHHIJKOVZZXTMKKNPUZ_a]YWWY\_]ZXWVVXXYWWWVUTTRQRQKV\]^`bc`_`aaadeddfkkjhc`]YTPSY_`bddgntusqrrpqrrrvz||vpnnlimomkqx|q??>>>?>>?>>???@?@?@A@A BA@?>><<<:999:98988788898 98889988877898989899:9898889889 +887889998898988998988989989899899989888999889:9::9989 :99:::999: 99889:99989889:9:9:::;;:9:::9:::99::9:;;:;;:;:;:::;:;:;;:::;:;:;<;;:;<;<;;:;<<;<<<;;<;<;;<=< ==<=<==<<==<<=<=>>=<=>=>>==>??>=>?>?>?>>??>>>?@??>? +@?@@?@@@?>? @AA@AA@@@?@AA@AA@?@A @@@AAA@@AA@A@@AB CBBBAABCBBAB +AAABCBABAABCBABCDCDCDCCDDCDCDCDEEDCDEFEDDDEEDEDEpDEEEFGEDD}_xTMHDGHF?;9;D(/42-*(%!>?>9318?BA@AC"$%$$B=6//32+*/2223469< !  ""! !"$""$&%$###""#"! !!!"#"""! !   "!"##" ! !"!!! :<<:5028;9866643557>"HC?=>DFCBB@AEOO='"&)*()*)('&&&%%%&&%###&())(&%&&%%'*,++,1650,,./..---.035Z66643455321/001100//00--../11/.,,-,++--.-,-,*)()*,.12111.)&(*++)*++,-++,-./.--/32/-.132/012 10/10...-.--./'./1334531-)&$!"###%&'()***)**)*,-.--./00/.//01122211221101001012456 43357532332233344567:87422456424 :;<7210012467554457878$7766678998766777666765;8668:d !!"!  !"#$'089/?.03569#=fmPAGS^qGP\R_:EMNG?BHILMDgRUbbK74=MH7YcyMY]\\[[\[[\\\[[]\]]\[\]][]]\\\[[\[[[Z[[[\[\\[ ZZ[[\ZZZYZ YZ[[ZYZ[ZYZ[ZY[[YYZ[[ZXXYWWXXY[ZZZ[[Z +YYZZZYXXWXYXWXWXXWWVWVVWXWVVWVWWWV UTTUUTTUTTUUUTUTTUUTTUTUVVUTSTSTUTUTTSRQRS TTTSRRSTTSRQRSTRQPQPPQQPQQPPQOPQQRRQPOP OOPPOPPOOPONONONNONONNOONMNMNNMMMLMMLLLMMLKL +MLKJKKKLLLKJKJIJJJIJJIHIJIHIHHIHGHHHGGGHGGHHHGGGHHGGGFGFGGGFEFFGGFEFEFFEEFEEDDDEDDEEEDEEDDEDEDEEFCPxoXC6`[Q8CPNWPXM?ZH^bccd`QAJkx]Q\o{tvy~RSPNJ~zLwaNA84313:?BJNOL;8>>=;:!$)+)*.-(&$$""  #&'&%&(*+*#,3F2<68CD:1/1N><<>@?@AA@@AA@ABCBB@@@?==??=CLIEHFB@?@ABC_FKLGFFEFFEDCFJMOMJFDDFFDDDFHKKJIIGGGFDFIKMOPOPRTTUVUSROLIKNRUTSUTTWZWUOKKLMMLMPOMNOPPMJJHFEEFGFC DB>ofcYF3L:$&,6=<3/...--,.42/ 00123322/,+,*-./-*))+179:=??=>!#$$#!ABBCDC!""##$%$#DA>A"#$#"!#&X$#%&&%')*)'%$$#""!311334448"'(*)'(**-.//.-./001/*'&%&*/0.//.--.001244541/-/0-**,./.,'" "'+**/221/...//+QSW\/,S(+.13430.+(&%%$&+./13433540,)()--'&('+/.("83036750/27 !#%%#""!! <<> #KNR+-.1331)M'()(),/0256984015665456522334%-;CF$$%%#!  + +  1 + + !(45!&,0147>;::768877;BLXt刏#(2  &4# +9=dV?4--,(!!    + +     + + + + +    + + + +  F    $./"  +%    0 + + +  + + + + +      + +     +     +  + + + + +  + + +   + + +   k  !/P^\H0(1;ET5:W61<$)-,&!#()*+$4,3<8(",97)@Lڶ ބ#݄(څ<х4̅ɇȄDŽSAytiR<(77/ (.528.&<2@@@ABA3&-GR>4=MVPRUZ^h<<876c\\cjf^WV]d7hRA5-'#!$'(.13/!"! #!  + +J +  !!/$%'/44210./0121/,)$!!"#"! ! "$ !"#%&%""$$$%$&&%%&'('&%%$##%%$)/-)+*&$$%&'**('''(''&%')+,+)'&&()+..-,,+a)*./023223579;976521236778:99;<:842356555653557753210./010-,-...-*JC?7*) + +       + +  !  l147:/     +  &+0%~}~}~}~}|}|}~}~}~~}~}~}~}~}}}~}~}~}~}~}~ }}}~~}}}~~~}~}~~~}~~~~}~}~}~}~}~}~~}~}~}~}}}~~}}}~}~ gĎҷˣ¿}øĽԽP5    +LU򅉋ŧþ,ǽp؇ߛꅧĦڵ􏡥ȻĊ w=5)$"! !"""!!"#"! ! ! !!  !         !  ! !!   ,yϰ˒̹IJۃ뼗ԥǾöᆡǻ̧ÿ|d16/0231,MM+/32/_`^][Z[.00111/.0.+))+--.)C78:<:87788765667668;DVcf34433577889851*D98;;889=!%(()*/664/)'()'&&%$$%&'((&$""##B=;><<>CJRL3@;;:ABDA<:;9889<>?A@?<;;;968:::;>@PCEFEGLO*.34138=<840/354333/SMLLLNOMMNMKKPWWWXZ[]]XSTTVWWZ[ZZXWXWTVUTUUURQONNOQTUWZ\]^\\^^biheccefccbb``_`ejkgb\Y]`adjlknppnmpnllqtunffkkmrrrx||?@???@??>>>??@@@?@@AA@???@A@?@@??@AAA@@???@@?@AABA +@?>==<;::;:988989989998899878899888788898787787899988998999877898788899878889889:9899:99889899:9998987988989989898 9998778889898999:9898889: 99889989:::9 :9:99::99:9:98889:9:;:9: ;:::;;:::;:9:9:;;::;:;:;;:;::;:;;:;:; ::;<<;:;;<<;:;<;<;<;<<<;<;<=<<<;;<=<;<==<=>=<<<==<<<=>=<=<===<<===<<<===<=>>>===>=>>===<=>???>==>>??>??>>=>?>??>>>?>??>??@?>? @@???@@?@@?@?@A@@A@AA@@?@ABBABBA@A@ABA@AABCBBAABBBCDCBBCCCBCBCBCDCDCD +EEFEDDEEDDEDEFFEEDEFEDDEEEFGEFOEEFGYgNKINTKB:854?&())'&&&''&&#ABAB#$"?!$&'%%A3.144/,.223698:<<9758 ! ! "$###$%# !!"""!"! !"#$#"#$#"!"!!! d!  9!!"##! !$#""#"! =951230034455447; "#$#"CCA?@C#"@=;?D6+592,)'%$%''$#"#""#$%&%.&'((%$#"! """#&))&%%$$%&%$%(,04766777667;;8535324530/0/.03432 310111000/.-R/110.-*()*(&'()**,-.--,-/0-(),.11//02212444321122441/-/20.///0123355341-($" "$$%&'*+*,-,.--/221/.121C/./24520124545676655566445546665446774430021102323332234543357 &667764543496321248875433359987898978887766 98997788:== !AGF@%M=`393B*(C>&@a]k:AAqKSLCCHIxi@LPQTMtfJcngZSRO]N]uc;`eikPa`][\[\\\][[\]\\]]\[\\\[[\[ZZ[\[[\ZZ\\[ZZ[ZY[[ZY\[ZZ[ZYZ[\\ZYZZZ[Z[[\[ +Z[ZZXYZXXY[\[[[\[YYYZYYXYZYXYYXXXYYXWXWXWXXXWYXWV UUUVWVUTTSTUVUT UUVUUVUTUUTTTSTTUUTTSSTTTSTTSSRRSRQRSSTTUUTTSSSTSSRSSRQRSSSTSSRSRQRQRQQPQPPPQQQPPOPPQQQPOPPPOPPOOOPPOPO PPPONNOOONOPONONNMMMNMNNMLLMLNMMMKKKL KKLKJJKLLKLKJKJIJIJIIJJJIJIJJKKIHGHGHHHGGGHGGHGFGHGFGFFGGGFEFGFGGFEFFEEEFFFGEDEFE DDEDDDEEEDEDEFDDnYZNKIA7UGPFH/26nl|[kmdZS_{r[[[oc?Kv{ohzKOQSOOPMqqyhL=:9865]P]6757=@E<:HH?<<<>???@@@AA??><<<;<;9::;<;:;<:<=<<;;<=>=>>>?@A@@>>?BEGILORROHD@@CEGIIJNNKJKLLNQPMMOQQRTRQSVWUNGDEIKOTUVUQMJEDDCEEEJNPQQOORPJHHGGFDDFHFDDCEG?p_I`0"#$"$(.22114:?C#D5//.--/13-,00/-+P)&&'(*,**,-.//./0117>?><:: ! !"!  !$&''(()))'%')'%#"$%$$!63323345545!#'*)*+-./0//0243220./.-.//07112113320.++,./..+'&,1322/)##*01..//00010020TSWZ\0112123Y110-)())*,/11344453/,))*,.,-122.($"545446799:6569 %$"#%&%%#"! !"!!#%',./00/0/+'&(,+'),.0,+89665441#2=C#$%#""! + K  !(1/(((%$-7;<@A"#%)7JE.%(++-0-)'%#!!"$%%%#!!"$$"$(, #$" !###"! !"""# !! !""  !$()'&%'(%$#" "9&(&$ !$&'+-,-/21011006:;967989;;:<9H@'1S`WMFS69;=:998kdfbNOX_]F0))'%#!6.8!! !#$(##+(!!!+)*&D + + +  &")##"#$ 9(6=,&0.*-100/-+,,+%! !""$&$ !! !!"##$%&''&%$$#$%$""!#$#"$$#$$#"#$#$%$$$&''()+--+('%$&(*--.0/--/0012210033443358984/./359;;<952/+-.-///257997686322110--010...11+H;,7 + *      +  + + +    + + +  + 2 + +3479:G +  ~}~}~}~}~}|}~}~~}~}~~~}~}~}~}~}~}~}}}~}~}~}~}~}~}~}~}~}~}}}~~~~}}}~~}}~}}}~~~~~}~~~~~~~~~}~}~}}}~~}~}~}~}~}~}~ ٹºȷǽžeŲܶSA +eNX􉋉񁆇ʱŸ@.{ܾȵ畑ţA90($#"##"!"!!!""###"! !!"!!"#"! !"!!!"! !!! !! ! !      ! !!     +)e㻸ֽ͉ۼ̿ɾ뢞öϹׄрȸ삋Ψ׬ĺſĿـ0/.---+,0220/.[ZZ-.0002111/--..-,-,H;9:;:999853223467677:<>KX\^bd32234545532/(A::<>>?AD#%)-.,/420-*((''&%%%&&&'''%#BDDC?=::@DEHLMF+68DPRQ[ck99:87BZomWHiB>>?><:9;<>ACB@?>>=;:::;<>ABDDGNU-//1220../.159;:975113422322331/--0120.+(NMLKMOPPRTRONJHNX]\ZXWY\VORVWXYZYWXXWVWUSSUWWVUSNKRVUJWWWXY[^`a_^]]`ba`]]_^Z[`cedca^[^_bcbaaacfgfffdeknkhec\Xli|@?@??AA@?@?@@?@??@@?@@@AAA@?@A +@@??>>==<;:9899987899898999898887898898 9988898898999898 999888998889:988998989898988899899898989::98989:9:9:9899:99:99:99989:9:;:9:9:9:::9: 9:;::9:::;;;:;;;::;:;:::;:;;:::;;;:;;;::; +<;:;::;;;<;<;<;<;;<<;<==<<<=<= +>==<<=>>=>=>=>=>=>==>>??>??>?>??>?>>?>>?>???@?>???@@??@A@???@?@A@@@A @@@AAABBAA@@@A BABBAAABABBAB CBBBCBCCBBCCBCBCCBCDCCBCCCDCCDEEDDCCCDDCDDEDEFEDEFFFEEFEEFEGFF}[mNIKMJFB>:;B#:4A((&&(''(%"AADEC@?@BBCB?;4.-/.-//113589987788547: !""" "%&! !!"#"""!!"#"!!""! "!!##" ! R !!! !"!  ""!"!""!! <9977875114654223:!$%%#B@@>?@"$B?<:DRJ@A<-())'%%$! $!  #%'$!! !!!"#"!!"!!"!"%&(+*+,.0124654788877789766632001244223533654310120./15774100//.--+**)&&'')))+,-..//./33310101331143012220./121...-.011000.,)&# # !"#$%&&'''()))**+,,++./..,-/00.-./ 12000268756678876334456654665433465686432221010///./000/12223342126886754564343577543267875345677665:;<<;9778t7666858 ::96420/039=?@BCDM<6Yn_:1<(B]dU4B:31MK>Ve^E.Oi9?GLOONMJLUdmbM;bZP>0I[a_VOC>GT^j=HTZ\]WUVPJHJLKJHDA:=C=5467899:;<>?>=<<;;:9;=<<=>=<;;<=<:9:;<;;;:;;::;<<;:::;=>=?AA?>@A??@?@A@?ACGKNNMJEBDE5GHIIJJJMQUUUTTUVSTSRSTSQOOPPRUVUUQGzjdiC%&%FCB?>?>;""#$$$%$$###$$###"""#%()((('&%%%')($"""#%'*,,+)# 20034#%'(&%%&&(+--./02332100//0128100134431.+)(*,/0/+&%$&*/2211/,)+/010///124553/,UW\011223554321/,+-./0112345650++./#261(#<;84311689##$&((&&$DB!"#&+./010.//,))*+,,-.01766$(5;>BF#!     #'.*#+486:=D%&&$%/DSM;0,))+**('''(*+*(%$" "$$$&*/,!"! !""!   !"#$$$##$&$#!!! "#%$#"!"$&?%(*,---.0697764-+9FHINV_hrс I$N +  + /6 +;NK<750+&!#"      +  + + + + + + + + + +  +  + +    + +  + + 6     $1.&&!     +! +       +  + + +      "  +   + + +   +  +  + +  +  + +  s $?J; 0HM?"("3<5HSH^+7C!&+-..+)(,5?C:,!62,!&47*8=`m +݄pօ.τ΄YĄ/`O3+)!9MVHG;%@?/25;>COL>=CDDC?9/0FXXRKGK]gk7ii8:997VACKE3&""";-%*09#%B<< #$-3.*%" 42<$!.' [ + + + &.0-'#%09@%,59;9534/+*,--,,++*'% "&" """##$&''%%$$$##$&'&'&&&%$#"#$#""$%#"###"!!""$%$%''%$&'&y'&$%'(*+,+)'')**)*+---...048885567665568765568:;<;:6-KA=C(-2776764333443332221243353-L=. -    1   + +    +  +  g369   + +  ~}~}~}~}|}~}~~}~}}}~}~}~}~}}}~}~}~}~}~}~~}~}}~~}}~}~}~}~~}~}~~~}~~~~~}~}~}~}~}~}~}~ Ƃ߁˻󁋘Ϳb˻f>2 + Vkıcø {ٌӱ ˪Ȯՙگ裗eP4($#""#""#$"""##"##"! !"!"""!!"!"#""!!"! "!!! !! ! ! !""!        !!!"! ! !!     #FʱȕΩӾȟη鋄򃏛͞ûĮȩmՙøƾÿ¾}-**-.-+1430,,--,-0113T5302541.--+('+,I:8:;:99653137752467:BOWUTX]01000451--+&B;9<>?=>@CH'&*./---+++*'%''&&%&$FC>>?>=>CLQOKIJF)*$(7O2337:=9hb>\obPD?;9;@CDCCBCCCA?=>>>=<=?@??AA@A@ AA@@AAA@?@?@?AA@@?>?@@AAA@@@A@@@?==<;;:99:;:99:9878989898989889989988898898989989888999888989899878 7888988899::98989899::98899:::9889998989899:9:9:9:9 +:9::998889:9:;::99:998:9:9:9:::999:9 +::9:;;::;;:9: +;;:;::9::;:;::;::;:;:; ::;;;:;<<<;;<;<;:;< ==<<;;<<<;;<;<;<=<=<=<;<=<<<=<<=<=<=>>><<= >>=>>==>>>==>===>>>=>>>???>=>??>?>>>?>?>>???>>?@?>>@@@?@ +A@AAA@@???@BA@@ABAABBA@B AABCBBAABBAABCBCBABCCBBCCCBBABCBBCCCBCBCD CCCDEEDCDDDCDDCDDDEDDDEDDCDEDDDEDDEDEEEFFFEFGFBDEF}VDINLGDDA847:?DGD@@>?B>=??=<;;<><<;:=@<0,0//-)(),058;;;974135:!  !  #&%"!"#! !!""!"##""!"!   986  ##!  "##" H=;< ;679;7/05797316?"#%%#B?>== !BA=:@O1\LC4)'((&$$$"!!  "! !#!  !#! "! !"##$$%'(*,/138997536<<9987566863346667766431100/02357752121010.0/--,+)))(*,--.//.-.//.,-./..,*-10---+'%(,.-,,,-..,-1.)'%$"!2"#%''&'())()*++-.//..-..---/1/-./0/01342137:;86276655664454321233315997555655665210/./0/1101234433464223498 7776655567777457:7434566659=<;:;;;9898}57:9:;;<<><963/.,+('(),/389=<;FD[75VQdpe_^]^]\\\]\]]]\]]]\[\]\\]^]^]\ ]\[[[ZZ[[[\[\[\[[Z[\\\[Z[\\[ZZ[[\[ZZ[\]\[[[Z[ZZ[[ZZZ[\[ Z[\[[[ZXXYZYZ[ \[Z[ZZZ[ZY XXXYXXXWXZXXWX +YWWXXYXXYYX +YXXYXXWVWWVWVVWWVWVUUVWWWVUVUVUTTUTUVUUV UUTVUUTTSSTTSTSTSTSRSSRSSRRSSSRRQQRSSRQQQPPQPPQRQR"QQQRRQQPQRQPPPQPQQPPPQPOPPOPQOOQPQP OPQOONOOON +MNNONNNOOONMLMNONMNMMNMLMLMLKJJLJKLKKJJKKJJKLLKJJJKKJJJKKKJIJJIJJIHIIIJJJIHIHIJJIHIHIHIIIHGHHGHIJIHGHGFGHGFFHHFFGFEEFGGFEGGFE DEDDEDDDCDEDEDCDEFDARkaUM8TvLJMJP[^]m{iK;AbjY\[alqsf\iIJKhJ=8679gPA:?F[<97nb^26?CHMMF>jSQ]f\@I641*&-KX<*#%36*&$##$$"$=9RW_hea[`;EMSUTNLUeh^VPMONOOMJGGHID;6329EFB<<>=;:<>>@@>>=?A?>=>?=::9nln89::;669<=<;<=BA<<>=<<>?>=>==>??@DGHJIHHEBBCDEFFGIKM-PUZ_b^VROPRQQPQSRRRWZZWTVTJCABJRUVRPOPNKHHGGGI5FFIJKKH{aFT%"$'('(***+,,*('(+.31.,08?CDB@=3/.110/-,+,-/.+*+f,---..//5=EGFFE#%&KHI&'%$$$FEE#DA !"##"""#$$%%%$$'('$###"!!!"$'*)(&#"$&)+*))(&$$###" 233$*+)(')+++,./000//00..-.01134542345432/,**,.010.)''(()*,.00,-/024--10..267970,,-,.0122103545678645420/../134344564-('&'&"$&%!<=?>:9%94137 #$&&'(((%""#$$%&(,..00.,+ +**)),.//10 !.567;?!! #('%&*,1 "&'%C=*DRkF6,(&%(,.0/-+*,+($##"!  "$&),1 &$!&)& "##!! 6 !!  ""##$$$"!  !!"##%%&Z$$"!"##$%%%(*.012369:=FKHGJOOO􊑔F13 :7* +" " +~l>772.**( !$'(&"   +    + + + + + + + + + +     + + +  + + 8  +     )9.'            +     +  + + +     +   + + + + + + + + + +  + + + + +  + + k68OK%.0]=e<0#=AEbRT7'0O&&,016;;>BIK@(/$#$##0/:! ETބ6ڄՆӀ1„À¾T:-(/M4^V^ZN.2.2::9GUH/#)HO>==CLOPD>IZgkfcdl8m89gH1($##$@.$ $)7%">66!'*-23-'B58AE:$' !&  + + + +  ++-0531.G4#+0454/-4@C<62///010-,+++'!!'(&"#$#""$%&('&'&(*'&&&''%%$CAC""###&&$#"" "#$#  "###$%('$%&&%%&'&%&&&'&&')*++)*+-/037<@C@:53357:Q=?>>==:2,+.5:<=:7798543112333430023540N<)/&!"! "   + +  + + +  + + + ( + + +     6W + + + + + ~}~}~}|}|}~}~}}~}|}~~~}~}~}~}~}}}~}~}~}~}}~}}~}~}~}~}~}~}~}~}~}~}~ ~~}}~~~~} +~~}}}~~~}~~~~}~~~}}}~}}}~}}~}~~}~ ϻĸԾeýͲW3  +g"Tźqҹۀƽ F압ܟ샩ˡݳӷƎʭٺɕkaE0'$#"#"#"!! !!"!""!!"!!""!"""!"!"! ! !       ! !!!  !!  /¨Ǩ񯬇ĺͿЪ˩؄ֹڽև⼏ȶƶǑŃ㊣爫ԗþ½+-.0/,,.-,,-.../1003687776534653/-,,++,.-G99976686445655567:EQWZ]__][./0121-*%>66678766:>D&*++,,+***(((&%&'((()((**(&HB=;;=FNMLJHKMD/;6@DJLMJKMO-38===<:72-)KD>==>#*/320/1440,)')*-1431/-/132-/34223.UXade^UQRSTTX`cb`[VSUXXWVWiYXYYVUUUSRSRNORRQRSSTSSTVWYYWWXVTUVWZ[\^]]_`]\\^]Z\^aa^][ZZZ[^]]agjhgifhkjhhfa]\^de__aa`]|jA@>???@@?@A@@A@??@?@?@@@?@AA@@?>? +@AABAAA@?>=;::;::9898778987898 98889988988878989989898 98899988988989:9 8988998999889:999::989:989899::9:9::9::9:;::;;:;;:;;:;;:;:;::;:;;:::;;;::;:::;::;;;:;<;:;<; +<<<;;;<<==<;;<<=<==<;<=<<<==< +==<=>=>>=<=<=>>==<=>==>>=>>>?>?>>??>?>?>=>?>?@ ?@??@@???@A@A@A@AA@@@ABA@ABABABCDDCCBAAB CCCBBCCAABBBCBCDDCCCDDDCCDCDECCDDCDEDEEDED +EEDEFFEEEDEDEFFEEFFGGFEFEEEFFELCnWEEGHJJGDC?;<<=@A@;6338<<;854468:=?A?0+12-'" #+28<<;:77877520038 !!!"#!"! !"#"!!""! ! +  ! V:: !!!"""75; !##! ! ;8;=;889::87:;85446;;;>"$"BAAB""ABA?AGQTFDD<,&%%$##!!""#"!"$#""###! 7 < "#$%&&&''()+-035766998764445543467888988654334443457741G343321//.--..---+*+/.+,,***((),+**++)()($$'**)))(())''()(%" !"!"#$$#"$%'***+,++,---...-#021001333435126888787665466432221/05775554443236532344567987676776565110/1489986787655687766865544;765665666988<<:f:7764446531/++.0/.,*'(*.184cGJZ*8'A^lV`5(+6W@Qngr;6/WyEFKRX]cdZW^`RA`?RTjupd^]\]]\\\]\]^]\]]^_^^^_]]^^^\[\\]\]]\[\]\[\[\\[ZZ[Z[\[[Z[\\\[[Z\[Z [\\[[\[ZZYYZ[ZYZYYYXYXYXYYZYYYXXZZYYXWXYYXYYXYXWXWXWVVWVWVWWWVWVUV%UVUTUVVUUUVUTUUVVUTUUTTUVUTUTTUTSTUUUTUTTTUTUUTTUUUTSSSTSRTTRRSRSSRQRQRQRRRQPQRSRRSQPQQQPPPQPOPQQPOPPPONNOOPPONMMNNNONMNMNM NMMNMLLMNNNMMLMLKLMLLLKLKLKLKJJKKJJKKJKJIHIIHHIJIIHHIJIIIHHGGGHGHHHGGGFGHG FGGFGFFEFEEDEFGGHFEFEFFEDEDCDEEDDEBFtei\SF>BNL~GSRB>MaSijRQ87BSunh`S^kmeehkyGu{pP>63XGFPNMK:8A>;<<;=>>?EHECDHHIIIHEBBEFHKPTVSUWUTRRSRNOQQSWXY\ZVTTOJJLLKLORTRPONKKKHGFEGIKOMJH@k8F !91021..-,,---.000.,---,,-../01.,,.5@HGFF%&%HG%&&%##FFG$%%&%$"  "#%&%%%&(+,)$! !!'+*)&$#%'*(()('%$#$%&%###" $'(),.-...,)),..--//.,---.001135766651.,+-/1320-++-/..+)*--*(-.59;;656/'-7;:84.,-/11/0246/RS,/102458:81,,.0356A5/?*54+$""##"""!!$%B:887 !#%%%&'''&$"#$$&(+,.2211/-+*))+*,./-[$18;?BA>;%'&$%()%!!%)2"%%&('D=*HSE4*(&(*+--,,,--("!"&*,+***+ """! $#%% "'&&# "!!"!\ !"""!"#!  "#! !!!"#"!#&((()'),./00/--0440/1220YT_s $)#%  +. $5!+ +VUk?53220.*(&$$#$'&"       + + + + + + + + + + +  +    +L  + +  +  $.5-+*"        + + + + +  + +  + + + + + + + +     +   + + + + + + + +  + +  + + +    + +R B,,. 1KWBC"&E4@UHG%&$@S+),/15;;3289.!2)*/A+HWF1 1݅,؄ԆkȄDŽ ąÄ Ą &\G3*$"(32TM,75($0@48:45$$*6OKIC9@JKDDFIU^^[e6eUWM3'" 5()110.!-  "/%$3B/+KA0  #45 "$%"$*1N!-35741122347730355420,'&&&('%&)./-*'',55+())&%&&&'('&KGFGH$$#C!#$&$"##"""$%$" !"!"""!!$$#$%&')*'%&'(,.+)*+,-H+)(*+-/2676899888985577:=?@CA=:962244457:::99988653313459952+D$/$'"T   !     +   +   +  + }!"./   + ~}~}~}|}|}~}~}|}~~}~}~}~}~}~}~}~}|}}~}}~~}~}~}~}~}~}~}~}~}~}~}~~~~~}~}~}}}~~~~}}}~~~~~~~~~}~}~~~}}~}~~}~}~}~ ɮ񂆄žhĻrN4 +   + #]Ű ȺՀ8y˽ķ›БͶ̓ݨ挑耀˓ԷކðvgK2&#"# +"""##$#"!"#""#$#"! "!"""###! !!!"!!!"!"!"""###" ! !"!""! !!! !  !"!   +  !! ! !    +(X³뎞ѧȸ̱־̨셇쾢ܞϳމܭ႑˼͍Ȇ͛ްȂ׾¾̀CK +///---,-./0W1/..048::5/-/145431/.--,+,*F:66875775346875>S]\[ZXYXTV.//.-,K6.+-02431.-6BGK()))(()**+,-+++-.---,(LFB<9>GNNOKEC@5*'+167544673dg\/SrcH::889:;;:989?DFP/44569=<953357631/+''(&GG$'*031013420--/0134773Q>;E),-/245f^YPGHMNQ^dYNORRV_ggb[RPUWWTSTUVVWWUTSQRROPNMMMPRRRTY\^_[Z[[\\ZY[]]^^_^TUZYYYZ\]\[YZXXWXYYZ\^cnwzyyzwqu|vld^Z]baNwv}wA??@@??@@AA@?@ +???@A@???@? +@AA@@?@?>>?@AABABA@?>=>=;:9::988998889:8987779898998787898 +9899989989878989:989898899:9998898999898899:98898989898989989:98989:9:99:98:9:::9:::9:9:9::99:::999::;:9:99:;:;:;;::;;:;::;:;:; <;::;;:::;;::;<;<;<<<;;;<=<<; <<<;<<<==<;<=<=<<==<=<<=<=>=>=>===<=>>=>>= >>=>>>=>>>??>=>>?>?>?@?@@A@??@A@@@A@?@A@AA@@A@A @@AA@AABBABBCBCBBCCBBBABCCBCBCCBCBCDDC +BBCCDCCCDDCDEEDDDEDECDDDEDEDDDEEEFEDEFEFEFREEEFsP?BIJKLHA=:9=A@:3+,014698531256:AE>5/3993)!!'+2789<;<:87520.,28!"#$##"#" #" !!!"##"! !k :9 !! :::9: !!!"!!!  !"!! <;;;:966799;85344566404E(%"B! ""! A>?DIOI==C?2)&%###$#"!"$%$$#! 3466 "6210268:"$%#"#$$#$%&((()+/58878410023579;:8896311231.,-0379420113664312220/../--/-,. ,)((()('&' ('%%(+,*)))'&$" !"""$%$%&&'&&%$$%%'(+v,+,./-,---/11100134444224442126888786444565333221268666555457::76323422334579;:85445565322354577644368 976678766655776534973356556;<;;;:;[97530,*+--,($$#"#(.131)4:G^g,! A4_~wJH./3?6WjMR/.G=kHKKQU\j:CPND:8:<;qmonnu;=@@?>=";889:;<<8c4;979AJC<:9:;<==>???>?C@?1@ELMJIGCFHEGJKLLOQQRRPQSURORSTX^\[\]YUVVQLMOOLLMLKLAMLKKIHHIGHJeFL$?8N-.///,,.,,-,,+*(%$%$$#%%&(*++,/269::;;94/./.,,..-/1/..///.././1245651-3;AE$%&&%$%&&$#"!!"#$%$$%%%$#!!"#%''&'((**)(&$""$%%%''%##$%&(())(%$&&# !%&&'&%$$%(%"%&#!!"!!"!#(*-/0,+,,*()),.-++,-/111342343100.,.2451-,-/0010.++.-**.5:;;;:86+ -7840../37620069V@K/1/,+--,***,03445677898-"#+9><3&!"%%$%%%'&$! !! !#%&'%#""#%''(*.57432/,+++-./012310 + +7;?=<;858     $&(&"  !>A; ?UG0&&%&'())(&#"%'(/ "#&%!$7.("$$!')&#   !!  "#$$#! O!!"#&-132232.2851/,*,23&9315;AFL[q҅+KP /- +&5$J"]5/2454/*'%"%'%&   +  +  + + + + + + + +  +   +  +  + + +     !'23-+-(;   - +  + +  + + + + +   .   + +  + + + + + +  + +  + +#0=E;""G^R10##$.,KX:<$#<2P1/-/27A%'9"" 4.)%,-"&3'4RԄ҄ ҄Ѕ&Ʉ5ˆÄDR;/)%'*(+QK062/5:$)2E?('9@@F@7?GEFHLNEM[]SG4'%$,""64& (21 !1Z^("/ +  :-0+/$ '"*.178841//01356569:970%:!+-..,*+,-+*))**+)$'..*#"%((MHIHGK&')*''&&&%&%#"#$$## 6" ")1+$""$$$&&'):+*)((()-230/,(+,*+,-./12245568976:;<>=9567644544567:886665446542V@*) %  + $      + + ( +  +   + 4! ##0 *   ( ~}~}~}|}~}~}~}|}~~}~}}~}~}~}~}~~~}~}|}|}}~}~}~~~}~}~}~}~}~}~}~~}~}~}~~}}~~}}~~~ +}}~~~~~~~~}~~}~ Ǽ􃈄Ԁڿ÷ԄGǽȰuz,/     i$Uٱϼ>Ŀ6DŽ92aįˍщì雼ͤԷfR7*$""#$#"##"##""#"#$#"""##"##""!! !"!" +! ! !""#"! ! + ! ! !!!"! !#"!      !!      + +!3ѸξҼͺ݋ɖ˕Ը΅Υ޽ֈPౝݵ¿ɄƀS񁉋)1/002687533311232//0/06;7.,./01245432-)(**QD8468767g888?LVY[[ZYXWW,//.-,*E/'(*.-++,-/4997FH?>>?@?@?>???@AAABBBA@@?==<;:::988898987889899889898789888998 789998889988989898998989889998899988899989 8899988988989::99;:989:98989:9::9:9:9::9::99889::999:9:9:9:::99:;:;;;:::;9:::;;;<<; +:;::;:;;;:;:; ::;;:;;<;;;<<;<;<;<;<;<;<<<;<;<;<=<=<=<<=<<=>=>=>===>=>?>?>?>>???>>>=?@?>>?@?>? @@??@@??@A@?@?@??AA@AA@ABA@A@@@AAABABA@@ABCBABCBCBC BBBCCBBBCCBBCDDCDDDCDCDDEEDDEDEEEFFEFEFEDEFGFGFFEFNGFGGCh{KCIIHGGEB?><950--..004763221369984.+173-'" #),+.39=;:963/-,-1327 ###""!"! ! !"!!!  !!!;8 !! 9768  ! !! ! +!!>= =:87786778987553018;:C()$!B"##"D@>BILF:69CI=/($$#""###$%$$$##%|$"""!!"!! ::8::9998 !! !!"##$%')*+--+))('()***+,,.033210002423640-+++*+,16632555310/00/.00110.01210/.,+))(('('''&%&%&&'('&$$%%%'()(&&''%%&')+,,+,,-///.//0212455532 123455531258?5655443226987434865445434578:;::888777533355344567765667889766675322953335545=<<<:9: 88P963.'&('%$###"""#(30]zJA#5Xyj9:../:R:WY9LHZLkxy@KV`eebOgMRVL8XNNQSYhk}fqvg_]^]^]]]\\] ^^]^^^]]^_^]^^]^]]]^]^^^]^]]^]\]\\\[\]]\\\[[\\\]]\[[[\\\[\[[[\[ +\]\[[\[[\\[\]]\[Z [[Z[\\[[\\[[\[[[Z[ZYXXYZZZYYZYZZ[ZYYYXXYXXWXXYXWXYYWVWXXWWWVWXWVUVWVWXWWVVWVW +VUTUUUVUUTUVUWVUTUUTUUUTTUUVT SSSTSTTSSRSSSRRRSRQRSRQQRQ PQQPPPQRRQPQRQQRRQOPOPOPPPOONOONNONMLMNOONMMMLLMMLMLLMMLLMMLLMLLMMLLKKKLLKLKLKJKJIJIHHHJKJIJHGHIHG +HGGFGGFGGGFGFFFEFEEEFFFEFFEDDEDEDEDEDDED{EEDDCHmh\WQS\ekmfhi[M|?`KlISSHBH\`^`^[Y_mptxsqj^OC=7[K=9BMF>?=65<ENOJHDCCEFGGHHECCDe?89B@9mot<<=>>>?@AAB?>>=>=<=@?<<;:999<=88;;;>?<>ADEC@?>?@ACDGKKJGFE@?GLLPQOOQSPMKJLNMNORUWVWVRPPPONMMMLJKLKFIILMMMNPMFwplOS0#2$')).0#!N>:-++-,,,---,,,+)'()('''()*)(*.049=>;:;82-,(---./...,+-../0//.0247988878;>@!!#%'(''%# +""#$#"""##!+"#%((('&&(&##$#%(()*)(('&%&(),,+,+*'$$%%'*)(r)*)&'"!$%&'&$#"! !#(*&&(-00-*))*++,.010/-**,./13101353/+.14432320/./-+*18::9631+!!%*046437:/MHN)OI(/355666432.355454689970)&$'/9;3*&$%%&&%%%#! !!!"!  !"#$%$CA"$$%&&(/68631/-,++./0010110 ##,37:<;:87 % ## "&#%')#I ;9 7QE-%%''(()(&$'.589:<:8853338 ""%#  # ##" U!"" !%&%" !!#$"!$,34468:610/.+**/0L7.2?@@CLR]r˅冎+]<(@ +) Z\TR985211/+(%"  + +  + + +  +   +   + + + + +    + + 7 + +   %)+**-33($    &' + + + + + + + + + +        +  + + +$ + + + + + + + +  + +  + + + + + + + DW[W& #?VG!%9*@?%00B;PSJ&.4<@B>0=/67-"5..03;HLstМS1ބ߅݀Ѕ ȄŅ„]bD1-+/8CJNJLM@3UN(;,D.65-(-@?=;@IJMQPPH=2+'"6*#!(/)###! - " ;3LWL7%   + "(>>=;876Q5565566446778;<91YSOK31!'   +  +      +  +  + ^ +  +     !('+)&      ~}~}~}~}~}|}~}~}|~~}~}~}~}}~}~}~}|}}|}}~}}~~}~}~~}}}~}~}~}~}~}~}~}~}~}~}~~}~ ~~~}~~~~~}~}~~}}}~}}~}~ 僈ӹڽɾưŻ³]ĻĨúL2    +e&Zö뿟πATӿ܂ϟ쮌޻҂˂ϋȅן􃆝jV;/'$#"#""#"#$###"""###$###"""!" ! !! !""##"!"##"!"#$#"! !""! !   !    !         +(_ʠބԺźͭ⏓҆›ѯ鳙̦釙怔֋Лʸ466788765544699633247<:2--...-/245584,)*+Q;-/49:;;::95;(-,X.[XYZ]\X,-/-*L;+$%%&&(((&(,13:C*10UB0(&')*))-39;<9535:?@B#&)(G<652386-(*,../330//1b2>?ADCAAHRRPJFEFHKKJKF87DIHJKMKC??HY1/,-/0476531267412-'HC:/(((*0=L,382KDFC<:<=@CFD>?GPXVSSK}xv{HFaCEKPRSSROOQQQRRSRQPPRSSTSTX]`]ZY[][XSQOMOSSRU[YUVY\_aa``adnv{|wuuslhec`^^WU\XhsojA@??>?@??>?@ AA@?>??@???>?>>??@?>??@@@?@?>???>>?@@A@ABBAA@???=<<<;:989889998899887889987888788899988899878 7788898889998999889989998998899988989:99989:9889 899989998889 +89:9998899899:9:9:::989:98989:::89:99:::;:99:::999:;:9:99::9:::999:;::;:9::999::;::;;::;;;::;:;:;:;;:::;;:;;<;:::;:;<<:;<;;;<;:;<<<;;:;<<;;<;<<<;<;< =<=<;;<===>=<=<==>>=>=>= +>==>>===>=>?>=>>?>>==>?>>>?>?>=>>?>? @@@???@@?@A@?@?@??@A@@@?@AAA@@@ABABABBBCBABCBCBCBCBCCCBCDDCCCDCDCDCCCDEFEDEDEEEDDDEEEDEEFFEEDFFDDEEFE FFFGHGGHGFEFFEFFGGFFFEGDbiOMIHHIIJGC>82/./H034421247<=50+%(24/,)*-/11,&'2=;851/.--/1017"$#"!!!##"! !!! !""! ! !/  9>! !"!986679   !  F!""?<>@<;988999:9876788840/340/<(&!!#$#ED@@DJNI<4589<8-'&%#""#$$#!"###"+! !"""!!" !  <889988 !#!!#"!/"&&&%$#%'('%%$&'),-++*)+-,-/1464222310114775421012332 +111/.//..-.---,,**(((&&$%)*+***)(&$#$$%&&&''(()*++,...//..012100122211253/3874332234544533366$67766779:334333533345 9764445.65343336896675 44456 +>;:::;:8768P:62-&#$%#! !"$'-4J1/+PAA`A7T8.>0L;VhXc7PS:ZALHIRUVYemOE-`T[ZU]qBH_v}lb]^^^]^]]]^_]\]^_^]]^^]^^^_`_^]]]^ ]]]^^^]\[]-__]]^]\^^^]\\]]]\\[\]\]\\\]\[\[\\\]]\[\\\]]\\]1\[\[\\\]^]]]\\\[ZZ[\[[[ZZZ\\\[[\]\\]\\][[\[ZYZ[[[Z"YZZYZYZZYZYXXXYYXWXWYXYZZXYXXWVVXXWXWWXXW UVWWVVWWWXWWVXWUVVXWWXWVUUWWVVUVWVUVVUVUUVVWVUUTUUTTUVUTUVWVUTSUVUUUVUUUTTS3RRSSRSTTSRTTTRQRRPQRQRRRSSRQPQQQRQRQQPPQRQQQPOPQPQRQRRQQOPQPPPOPO POPONNMMNONOPPONMMNNNMNMMMNMNNMMLLLMNMMLLLKLLLMLMLK JKKKJKKKJKJJKJKJIJKJ IHIJJIIJJIHGH +IJIIHGGFGHGFFGGFGGFGFGGGFGFEEEFEFFEFFEDDEEEDEDDDEEDEEDB@ZXo`YTSbzz}_N?ZsDITU\VMMPUY[Za]T`kmovq[JA?=;Y79DLKE<5;PE4=K6F\;#JVzR2@+! 875<]jkhjbP<)528>?AOBdCPNJIKNNLLKKKHGFKDl5>KMJGKRYWURKFFEBAEFDB@?>==;9;mOC`:7:<=AC>88;<>?>>>=9k7879A?=>AACEEGGHJGDCC@AFKNMMMPKGHJKMNMLQTQOKGHIJHKPUTPNIDJNQPPPONNOOPONNMMOOMLJJOTPLKpAB68;Z[S=N72/,+*&! $$#%()(*+,+*)*,+)K*++*,,,*&$$(.39=8663.,+,,---..--,,+,,./111233368:;>@@???@B"$%'('%##$##$#$%$#Z"""!#&(**(#!!!"%&'***))(**)('())***+,+)'%&(*,,++*-//,)%%#!&(((&"! !!!#"!"%(,/00-('(+-/2H1-**-05763243//0./00023433211.,4:<;:5/( %3::53560,/0/..12233345445543554458840//0122594,*)(''%$#"! "#$%">!#%$##!!$&%%%$%'+4:973.-/134433'!  # r3;;==>;7$  )   C$-8DK:&"%((+./-*').-,'%%'),\(%'(*-/-%!+ #&$!#!(&'*./11054/!#! !#!!#&%#""$+0243131.-,**+,'%+'0$0>HMJKOXn$-7+# `+   dSSB954332.)$ + +  +  + +  + +   + +     +  +   +  + +1    "&(')131-#         + + + +   + + +  !     + +   + +  +  + + + +  + + + + + +  + + + +   + +  + + + + +f$4# ;44B%% 7-BL?A!27+C.1-.5677AIJKPJ:.(&%$3'--(""/& -"+12;X_ZF+  %9?@<=8+$%9'0-*)+./...//+*.(;'11/-28:763.***((*+*)'&(%##>+&:""&()'L'''((')+,(##%&'(''&%"? !!#%t&'*)()+,-./11230.,+)+.1433351--//13103753/,.01148;9653169;98766688988:99;:85449>;96J&#!#%λ¾괣X0*KOU;ʩwfڽ׃҅ʏƽ㈗ 鱞dUB1(%%%$$$#$#"# "!"""###$#"##"#""!!!""!"!" !!! !!!"!!"!!""! ! !  !   ! !!     +  7Ͳε¶ϼн͉ٲˊűקϋ˖ݒέAԧ䁢qQ9;:888755789;<=;53479;:2,,-,-./01246541-+TOD858<=;955G/420//.ZWUSTU,,,*C+  $*+*+17>FN)*+.YL://-,,/6:ABB@?=@FIJKNE9???>>???@?@A@@@?@?>?@@?@@???@?@ABAA@ ??==<<;::988898989878899898 9889988899989899888998989878998889889899889 89:99899:9:988899: +9:9::99889:9:99::9:9:9:;::;::;;:::;:::;;;:;;;:;:;:;:;<;;:;:;;<<;<;<;:;<;<<<;<=<;<==<=<==<=<=<=<=>=>=>=>>?>?>??>?>?@A@?@@@A@?@@@AA@???@AA@A@A@AA@ABAAABBABABBBCBABBBCBCBCCCBCDCCCDDCDCCCDDCDEDEDEFE FEEFEEEDEFEFEFEFEFGFFEEFG FFGGHGEyRcOLKLDKHD?941.-../22110/0396.)&&*24/*+05655540-*,,.-**+,-04 #"! ""!  !! !"!  9867878 !! !" ?==;;><9888:<<:9743557:950/00-/;#!!"$$DA?CGIKF?:7779:6+&&%%$#"!"#!!!  8: "%%$#$#$&&$$$%&&%%&'(('&&%&''&')(()+-.//--..//.-.-,,-././9.-./0135787544431///.-..-./00///...--+*,-,,+,--+)()*)&##%&'&&$&***,,-,,-.00///011101232235867766644212456 +533212335<7564333 677532215789643345678889:::;; <=<;;;:89K93+&$##""$$&(+.-/5AXcGl7@TPFdqnjj\LFQMC@CQd}fomd^]^__^_^^^__^]^_]]^]]]^___^^__^_^]^^]\]^^]]]^^^]^^]\\]^\\]\]\]]\\]\[\\\]^]]\\\[[\\]\][\[[[Z[\\]\]\[Z\\\[ZYYYZZZYZYZYX YXYYYXZZYYXXXYXW VWWWVXXWXWWXWWXXWVVWVVVWVWWVUVWVVWVUUVVVUUVVUUTTTUVVU +VUVVUUTUUTSTSSTSTSTSRSSRSRRRSSRQRSSRQPQRQQRQPQPPPOPQPOP +OOPONNNOPONOOOPPPO NOOONNNMNNNMMNMNLMMNMLLMLKLMMMLKKLLKKLLLKJJKKKLKKKLKKJJIIJJJIIJJJKJIJIJJIIJJJIHHGHGHGGHGGGHGFGFEFFEDEEEDDDEDDEEDDEDEDECKnfYWWbpaqmWRXc_NOLO[VPSBs_p]beg[NE>:520\M?GOWSHBB;4E4BGbF&C=[r{w|vV?=042,,<.O@Wgd`fh`P1"&,P=A2PyGIJJIIHIKLJC;o7no9=SHOKFFJNRSOMMHEDDDC?989qqnlosqYABOajmr;vtutu;;w@?=<;88:;;:9pp:=@AEFDEHJJKKJHqFGJLNTRRROHEGIHGILKKLKLRTOKNT[]\\YSRQPPOQRROLHHLLKLKLMNOMLMMKHF~hL_2"(..)&3&:_pVY6.++*+*('$!!#%()*+,*)***)***))*,+,-+**+15.((,+++---.000/.---/1246>>=@C##BAC#$%%$#"##$$$##$%%###""#%&'''%%$#"#%(*+,,,+**+,,--,+*E))**+++-.0.*(('%#"!!'+,,*(&"!&()+.//2630//./1432223444564210-,~04543227=<:984, 513 +6::6676435532122123345556543343443220-,,+-03752110.-($$%$$$#""#$%" !$&&%$$""$%%%&(('''&$$)-*IJ+/0/00146787  !! &"<:8544 + + -' !#*;SebQ9('+///-.*$""#$$###&+-,./'!%(*++)$H%)***)*+,)').+#'*-,)#%.1'! #$%()-21/16 !!!"!6 !$'("!$.40-+*)()+-,*.53-*<)&,39ADIQ`s.= |X!.LRB<;9752.(" + +  +  + + + + +  +    +        +  +  5  ! %,011/'        & + + + + + + + +            + + + + +  + + + + + + + + + + + + +   + +   + + + +U  "#%+2:A,?:A9QYSKJ?5)@K4<82124:CEC@2<"!$+3/'%*5Ir\SPل օӄՆ>τ˄Džƅ(„0 a]@0./8SbnucODRM<7:C?2424=956(D@N@ACC:0*%"5,$*.2.(%&(!*+5 0)=LNKPJ0!  1)7><CFK'NMMKK''K&))')**()*)'%$!!#$$$#FF%')+./..0223321110/012485553.,-.-,.001673038=>>><9::8889::8534789;8789841UC/9">M8/   %    + + + +   7    9 $(  ~}~}~}~}}||}}}|}|}~~~}~}~}~~}~}|}}~}~}}}~~}~}~~~}~}~}~}~}~~~}}~~~~~~~}~~~~р~~~}~}~~}}}~~}~}~ p熓ҫ뀇򄋇ƶŭ¸°þg胙ºɺɧ¾zW1   +   "W¼X򃀀Dz:ӄр~־¯勜Χ_E2*'&$$$#"#$#"##"##"#""##$$"! !"!"""###"""##""!"#"!"###"!"!!"!!"! !"!"!  ! !!!   !! !"! ! ! !     +   #<³˱񼮨ߩؓ񡿶ݛ󓧴ư鹉¸Dž򇉋`鄑ՓžªaLJ988:;;:99;<=<:::98:<<;:0*++,.0/..023431/XV,-);,04655%11000/-SGILNR+,SC.!!%+**/58327D'),0-S@0*+-,,-+%'*)*//,(')+-/-+-.,+6CSnAFEzbOJIGB>@@=:897:90***)**'F>:;?F)+-.-/222421iqw{zwzxzz{KTVTRSQPOQPLNQPPQQPPQRUVQHIONRY\YXZVKDAAEJKJMPPOOSXYYWVTNKONNSXXURRVZ_cdeciqlf^mzCA???>>?@ +??@@@AA@@?@ ?@?@@??@@???@A@?@?@?@@AA@AAA@@?>=<;;;:987898999888998989998898999:98898988989889:9998989899::98989:989:9 +::99::9998989889:99::9:9:989:::;:9:9::99:9:;;;::;<;;:;::9:;:;:;;:;;;::<;:;;<;::;:;;::;:; <;<;;;<;;<=<; :;<;;;<<;;;<=< ;<<<;;<<;<<;;<=<=<=<<===<<=<<=<<==<<==< =>>=>=>=<=>=>>===>=>?>===>?>==>?>>?@@?>??@?>>>=>?@??@?@?@@@A@?@??@?@AA@@?@@A@A@@@ABBBABA@ABBAABCBBAAABCBCBBCCDCDCDCDEDEDCDEEEDEEDDEDEDEFEF +EEFFEDEFGFEFFEFEEEFGFEFGlHIHGGFGGFo~OIIJMMLJIGD@8210/.-272-./.,+,,+*&$$%(+-035; 80+'$#$%(*,06:   !!!""!! !   9:<= ! 98869 !! !H ;9=?! <; ;:9:<<;975565676431--0/,-=#"#&'%C?@EC>92269;>=6-($%&&&%$$$&%$%$%$"! 76"98899 !!"##$$$##" !""$%%&%&&&$" $$%'()))+++)+-/..--,---+**+-,-.0L13774321.**-0//111254111///...///0/./0/.--,+)+)((''&''&&'&%$##%')*+.000110--/=01210/1344433223554355546667876545566763454444. 7543465357 53%8435558988:;;<;<===<<=<;;99::q  :3+&%###$%%)+*++,.14QVhUiTzxjYTYXVSL{ef>;aLES5CMSWVWUPKHFHKNLKLJHJJECDA=9icl8;BBBA@C#$$ >!$&&%#!!#$#$%')(&$###$&(*,..,'$%'+-/0/,---,,,+++,,++**+--,##)(&##$%%%).10-+*(&%$!" /3$'*.001222/..0321344578;:5210.+)))(''(+-/26;@A>:73/-#51467 (/027=>84123550.0122244343443220120...-/258963441*$$&&$#$-%%$!"%''&%&%#$%$%'(''&%@1'3 '/565422346765568!"! +) .+.034/"  ,*% (  ,:Q053XE;521/*'*($!"%%%$$*-.-+/.$'+,.,%!&'()**,,)%$"$!!39:97-'+7:2&!!!&(*-6:5#$#"# !""##! !%+./105:51)0'2;8>QRFE\v∍) J I* +; ;7^D>>=:62/+&! + +  + + + +   + +  ~     + + + + + + +  + + + +    $-463&      /  + + +  + + + 5  +     + +   + + + + + + + +  + + + + + + + + + + +  + + + + !"#&'=>G>ZHci`WL@>CAAA8TBH/77-B?G7/2/9CA8=:*$9P~ӝ݄ +>҄Jτ̅@ńÄÄ!2Y:47?YnsdONRTURF;?B:>?:774-@?4Y^B72*$!4/+)'*45441#!)&#-'+,>?D$&&B<>>?DGGHLNM'('N**HEJ&'**'G&()%" ""$%&'(')))*,/20055653g45444211466422553114676579::;96558;:<>><9898788668:989888@@><::;:9<:/*),.../01.UR,0/R>0247#2542/+L>8AILNTVE0%"&&" "&*-5=BGKN)*(OPPOOJ@>CIPSRRKEA<0,-//00,&%)++/0+')../00//0219^qtttsbSLFCA89DD==@CCCABDGJIGGIKE79CEFHF>3+)-/0234678<@ABBA=9::80%EHFB?;:848AIGGIHKNSRMMU]foyLPTvxPKIPWTPPOOOQSQNOSRLIHFGHHJNOKLNIEGJJHEx{ytru~7KORTUWXYYUNLMNPUPNQSUVXWX[`ac^V}T|@>??>?@?>@A@?@@@A@?@A@@@???@?>?@AABA@@???>=<;;::99::99898998789988989898989898999889898988898989898989998989:98989:9:989:9::99:9:9:9:9:9: +;;:;::;;:9:;;;:;;: ;;:;;;:::;:;:;;::<;;::;;;:::; :;<<;;;<<;<; <<;<;;;<;;;<;<;<;< ;<;;;<<<;<=<=<<<=<<<==<;<<;<<===<<<=>>=<= >>>?>==>>>=>??>>?>=>=>>?>?>?>>??>?>?@@?@@???@?@@?@AA@?@??@A@?@A@@AA@@ABABAABAAB CCBBBCCBBCDCDC DDCCBBDEDCCDCDCDDCDEDEDE FEEEFFFEEEFEFEFEEFEDEFGFGF9GFFGGEFGFFFGGGBcuQNQOLJGFB@:53442114100/-++,--+*(%!"%)-0320.+&!"%).369 6 ! !" !   987767987; !a"! < #!= <;:;::;:99::99987410..0.,0;BDF$HA;;=:883++3:>=0(#"%(('%##$%%$###$$###"!!    +9876579  ""$%'))*+*)++*+,-/ 00111/,,-..-*.---.//..010/0233/,)*-//147::6554565431/010/00.,++***++*L++*((()+//.--//03310///011/...//1332122122356654454566677766456554454A;85322687863322586577776444589;;;<<;<=><;;:::V  ;3-*'&&'&#$&'()*+-018NTkpc^`cf_WTPJA<@CrJK/,!25:FJE@@<9;Fdpvodaaba`___^___`__`__`_``___^__^^^]_`___```^ +]]^^]^]^^^_^_^\\]^]]]\\\]^]]^]\]\\]\\\]^]]^^]^]\]\[\]][[[\]\[[\[[[Z[Z[ZYYZ[ZYYYZZZYYYZ[ZZZYXZXYXWXXYXXWXWWWXWVVWVVWVWXXXVVWWXXWWVVWWXXXWWWVUVUVVUUUVUTUUTUUUTTSTUUUTSSTSTTSTVUSTTTSRRSSRRSTS RRSSSRRSSRQQRQQRQQQRRRQQRRQPQRQ POOPPOOPQPOPOOOPONONONNOPOOONMMMNMMNMLM LLMMLLMLMLKLLKKKJJJKJKKKJJIJIIJJIHIHHIIIHHHIHHIIHIHGFFGGGHGH +GHHGFFFEEEFEFEFEFFEEFEDDE DDEDDEEDEDEDDCCZcbov~pztYNWhvpd``TCtUUSl[L@:74^ZVURPQSZWUQA7=FJ6,HVMO[LS\H1$:$*?R7KXYWRJFJQ`iedhcHY5&)7VrCEDCDC?r]A7JgDUVQMKIHMLQPLFGJKLIGHHB?@BCCB?=?@@BD>qnnpqqrrtrnnq<==wppw?>=@B?;979:977:<<=AEFEGGDDGJJLiMMJJOPMLNNKKKLJJLIHKPZ[ZXVZ]`_ZYXXUSRUXWVWWTQNKJLNOPRQPQQPNNSTMAfLe3())-0//./10/.-+)'$!#(-16IRHNK<40.,**,*++)*,*+,-//00.---/1/,++-1320/,1222334335:>@AB""##$$"> !"#"!!"$$$##%&&%%$$#$&((('&$$$%$$&)+,..-*&%'+**,-|//.,*()))*)%$''##%())((-0/-,,+)((&%%# "#&-23212453/*),0232257895/,-/0*&''%$#$'+059>@=93-%45799 &1779:630-/24320/022344320./0/.,,/000124566652*'')(%$%)$$%&''&%%%&(((&$">4'#6+038;96325679:;:99:!!!"#$$##%$"  R+)%&&-0254%  + !"$&&%"!%*)''%!  !=JKLPPD91,+(#%,+$$&(('&'(,/.-,-/+ !(*+,)"!$((**'$"!!  !*)&&$'**)$#)-136<7-(%$#"02_'$%#! $' !""!403!$''(,110-(D208?FIGEHKՆ舍  0  I8":/ R[GA<840-($    +     +    + + + +  + + + +<  %03.     !       +  +  + +   + + + + +  + + + + +  + + + + + + !"!";DUdk_SJINQRKDA@90.23U33! #"#,.)&'# $.JˏVۄ;ԅׄ0υLJDŽDŽ Ą„HOBINcpnfhq_S\aXA6;KWQFDB8+F026H;0'" 4100../2531-$"&))6?54:-26' + ",.653.)&).7>=?A<(, 3E()))*($B3$#3G/:93/---13L40,,/01.-..)&()++*('()*+*$AABCDFGHJIFFJ()(MHHN)(&)*(%##$%#! "$$&*-.-/.,,-0134g3377324300022120026=><<;>@B?=<<;998:>=<==;98657:::;:999866<<7-E2> )0).,!&   +        + +  + p  " + +  !!) !$#! !""#""! ~}}~~~}~}~}|}|}}|}|}|}|{{|~~~}~}~}~}~~~}~~~}~}|}}~~}}}~~~}~}~}~}~}~}~}~}~~~}}}~~~~~~}~}~~}~}~ ü׈ϥпľÿĻ뉍_ǿs.*       +j([Ž򂆊ź݄߀ҷ̈́¯"ͱdžoK3+(('&&&%$#$#""##" #"""!"##$$%%$#"#$#"#"""! ! !""! !!!"!"!!  !!""##! !""!  ! ! !""!!! !!!""##"#"""##"!!!  !!      + +/P޺ìγҷɪ񘠀ńȵߺڼâɏݫσ􀈊遐¿ÿ݇>A@??==?<;<==;9779=7*%&u(+-.011.)PR*,--/.VE0/9,63.)&D<;AHKPZM2%!#%*,--*(+08<<>FJKKKJF?;<<;;:>CA;8668<=5110120'!+-,/.'#+02454231.+->VUNECDFEGJHC@?5ADEFFEGJGB>>>@BA=6/+,...-'!%07;?BC@=:973/(#858<:757=?CLSQMJECELV`ggox>GQRKIKOHEILORONNPOKLNNOJIGEDCCDEGHKLLK|z{{yw}LTZ\XPhB@@?>?>?@?@???@@@AA@A@???@@?@?>??@?@??@@@AA@AAA?>???><<;;:::99898998889898878998899898 +998898889989:8898889899:98898998889978999:998 998998::99898989 89989998889889889:999:::999:989::999:99:89:9989:9889::9:9:989::999:9::9:;;999: ;;::99:;;:;;:;;;:;;:::;:;::;;;:;=;:;<<;;<;<<;<<; <;;;<=<;:;<<;;;<;<=<=<=< =<<>===<<=>><<==<=<<===<;;<=>=>>===>?>=>??>=>?>?>?> =>?>??>??>??@?>?@?>@@?@?@???@@@??@@A@@?@A@@?@@@AA@@@AAABAABBBA@@AAABAAABAABABABCBBBABBBA BCCBBBAABBCBCDCCB +CCBCBCCCDDCDDCDEDCCDDDEEEDCDDDCCDCCCDCDEDEDEDDFFEGHFEEEDDEEDEGFEFGGFFFGGGF EEEFFEFFGGFFGQIE^lOOQNIFB>=<:643111234652//.,+))('%"!#%'&$##$##'*+,)$$*15875687987 !!"! !  \8778;<48 !"""!!"!!"!  !!  <;<<;;::;;::;;;=<<71//012101:>>E%H>:9:874.,1594.(!#(*)('%$-&&'&&%$##"!  445558999:99: + $('()*,,--,---+,+-021//00///.--./.-//.--./..,+,--.-./12333434786566656654211//01/f..--.---..-.-++)*,---.000365211.-/00///1110122232344422114422333433435731344567:989;8446+444378633445779734567523453256 <<;:<=>>===<<<: 94,(()'(()(&&'')),/10JItdefeejneUMNKBraaTZ.+:;hT(8:%8A;;=S|}vfabbba`aa` _```a`^^__^_^_^^__^^^__^__`_^^__^_`_``_^^^]^^]^^]]]^__^^^]]^]]^]^_]]\]]^^]]]^]\]^_]]]\]\^]^]]]\] ^\\^]]^\\\[[\[]^\[]^^_^\\]\[\][\]\[ +ZZ[[\[ZZ\[Z[[ZZZ[ZXXXYYXXYXWXXYXXYYYXYXWXYXXWWWXXXWVWWWVWYXWVWV WVVVTTUVVUTTU +VVVUUUWVUUT UVTTUUTTTSTTSRRTTTSSTSSTSSSTTSRRSRSRQQQRQRSQQQRRQQQSTSRRRQQRPPQQPQQQPQQPPQOPOPPOOPO NNNONNOOONNNONONMMMNNNMMNMMNMMLMLLLMLMLKLKKKLKKLMLLMLKLKJKKJKJIJIHI HJIHIIIHHHIIJHIHIIHGHHIGHHHFGHGHHHGFGIIHFEFGFFEFFFGGFEEEFFFEFEEEDE DEFEEDDEEDEDEwDGQxdnuzqyy}mIFbn{{vrbHj5JVRK@754_SWXSJ9=_YICQZz5&*bMfG>7L7  28Xlsn[QWVD9=KZ`dojPY1'(,%PyDDEFD>jM2'/ME[TMJKKIK~LLIEAABHOJDDC=>=:ZO4<;;rlikplbcp@=ojmo;>up;>=;8ld_5=BDEBCEFGFGIIHGGIJIKLOPNOPNKIFDBFMW[[Z[_aaa^ZXWWWXZZZYUTUVUTRPPOKKLMOPQPOQSRPEec!%+/022/$11.,+-,++)%"!%((('&(.///.-+,-..--.-,+F**+--..-,++,./21,*+--140,+,.01//../11023466557;>AC#$$$%%&&#  ! !"J#%%$$$##$$%&''&&%%$#$%$%(+,..-++)))**+,,*,..,,,./01221.+('%$'))% %*+,.-,,*+,+++(%#"I#%)022359842.+(),/0146678852-)*+'%$###"#'.48>##%%&%$$"##  ! %(+ %+.3:, !  &64.)(,-..110//-($$#$&&(,++,-/0.)'&&&'%!!%(*)'#!   ).,+(%"!#+2659? $)&..-+'"&-)-240+%#"$###%((*+/0$&#82148951037==;<<;;>A><;:57?A>II?=A, HPP( +#,]QB?92.*'$"  + +  +  +       + + + + += &+$!     +   +        + + + + + + + +   + +  + + + + + + + + + +  +  + + + +""1=iXLMOPRWYN?:=:3TFD84(2S:!%',)'%9iCۄ^؄GɅȅA„Ä8!hJMT^dq|sZT[]^N22FNY[WTD/F#3:70'! 7/240)!<7--:=J&PF?*(2J)((**&<'!71>60-..,,--./.{-+''(-2/,,*&%'*))*)'%&&"1- %$%GB@BFE>?I*)KGHI')MG$&'%"A:7 &)++)+./0/0110//2212367666410.,+-4==@CCC?<;:<<=?@?>;;;<;::99867K89;:899;:7.?:  +  +     +  +  + + + +  +  * + +!! !!!"#$#$%%$##%$~}~}~}}|}|}|}|{{|~~~}~}~~}}~}~}}}~}~}|}}~}~}~}~}~}~}~}~}~}~~~~~~~Ҁ~~}~~}~}~ ػ̾ȬŸúY¸ſZC0  + +QRǻZ󀆈O菈ˆzoX>0)%$&&''&%%$#$#"#$#"#"#" !"#"""!!"!"""!  !!!"!""!! !"!! !""!" +#"! !!  !!   !    #3ӷĹȺɭȬإٍǺהپƺƿ츀֖냀Ľ{ľ¿ƮЂ +??>=;:;<<:8:=<:89;<7*$""#%')+G*(&L'**IFH)./P:A/1-*LD??DHJMMA/+.5:==<;:<>?FMLIIJD?;;61049?A>97422236:754-" )/110-)(.67994124543?YXJB@ACINPQPKKOLD?<<>@CFIC?EGD@;9;;>?<73003320.,+09?CDCA?AC@3'$-1,$?<@DBABA>;;?DN^f6;?BHONLIHH GLLGMHDEDKO)MJGFIJLKIKLMNNNLIHJ}}.~~}qB@??@?@?@@?@A@AAA@@A@@AA@@@?@?@ ??@@???@?@"?@@@AA@A@???@@AA@AA@@@?>>==<;;;:998 9889888988898889898998999898989989898989898898898998798998989 +:98988999:9899889:9:9:99:99:::9:9::999:;:9:;;:;:999::99:;::9:;:;:::;:;:;<;<;<;<<;;;<<;<<;;<<;<=<<<=<"=<;;;<<;;<<<===<;<=<;<==<<;<==<==<= <===<<==<=<=>==>=>>?> ?>>?@?>??>==>?> ??>??@@??>?@?>??@@@??@@@?@AA@?@??@??@??@A@A@A @AAA@ABBABCBABBCBCBAAABCBCCCBCBCBCCCBCDDC DDEDDCCDDCCDEDCCCDEEDEFEFFEFEEFGFEFGGGFFFEEFbEFGGFGGFFFGGFFGGGFGHGF|OaQPNKHEDDA=9740045420.,-.-,,++)&#"$''" !"#&)+,+*&)17;5025556877  ! !   8899:;:5:!! !""! =>!""!" ==<:9:;AA=:::756651.+$"$$&&%&&%""$%%&''&$"!  !  !!"$#" 8658; !#""!  ! !!"#$% &&&%%$%&)()*)(*,--.00110110./2320 /../01441/.---,,-,.23445456647974200111//...-,,-. ///,,-,,/0.--.110/.-,--./../124432211//023443224 +55433677'554453247 <:::9:86609:8556543334467778755532111002 ! @@<:;<>;98E 7,'()''*)'&%&')*,/25=``chlopf[QLNKvM-D=C2XBB^4<7;<=FhMum{zmcbaba`_``_`_`_ ^_`___``__^`_^__^_^^]^^`___`__^]^^]^^_^]^]]]^^]^]^]_^]]\\\[\]]]^^^]^_^^]]^]\[ZZZ[[[\[\\[[ZYZZYZ[[[\[ZZZ[Z[[[ZYYZYXYZZZYXY XWXXWXXYXXXYWXYYYXXWWWXXXVWXWXWWXXXWWXXXWVWVVVWWWVUWWVVVUVWVVUUUTTUT UUUVUTTTSTSSTSTSRST SSRQRSSSRQR SSQQRQRRSRQPQPQRRQQQPOOPOOOPPONPPONOOONMNON ONMMNNNMMMLLMLMMLMLMLKKKLKKKLKJKKJJKJJKJJJIJIHIIHIHHIHG HIIHHGGGFGHHHGHHGGHHHGFGFHGFGGFFEFFFEEEDEDDDEEED +EDDEDDDEEEDEFFFEHicrddl~ou{gQRnxuo_brfXWVNIMFi68f^Z\TB@TkjSZvrd0D?TN@L+$!#,B4Res{mXRUOHRZRO`ko<@ACDCA@AB?9>;oS>Q38sr;=vllw<:8A"%''&%&%#""  !!$&%%$##$%'(('%$$%'*-/./0.+)(()+-..--.//..//01/0011.+)'&&''%!!%%%)+,,-*))+,,*+-+(%! "#%).24423441/.,+-0234567789871,)((%!"'+-13579972)B855567!-67645520...-YYV,/2334676532 3344421/02469-H&(((&%&''&&A4>'(((&&%##%&'&%!7('#.0368:<<;9559<==<=>> $##"! !!!  + #+!'%+.1/%# "   %77.*(),14653.02/($""$(*,.)&+.+'$#$%&&# $'))'&(($ ')(&&# !$(15 !&(%!)&N0462//221,**(&'(*-3/-*(*,,.220/0/1442259?A=9:::>CB?<==@BDFMNE?JQ&G  A1)   QCQC82//-+'! +   + +  +   + + +        + + + + + + + )   (    +             + + + + + + + + +    +  ,uKLNQUXYPF>;>;W5)#,(L72>!"&'&,G=nV'V܄ހ_12aZHJSbs}oX]d^J8BOG<==504-?!#=7682),=LE7A\V@0-92'* %3@IJ@2.2.+3841?EHDBA>;;;<>>@A@=>=<;:9:9899::;98<?=:660:9 +  + 0 + +     + +   + + >   873  !$  #$&&&%#"$%&%$$%%~ }~~~}}}~~~}}}~}}|}|}}|}|{|}~~}~}~}~}~}~}|}|}}~}~}~}~}~}~}~}~ ~~~}}}~~~~}~~~~ۀ~}~~}~}~}~}~}~ ׹ǼǯúYŷǹ½ýƸfN,    Sżĵ¼?Ʉ;7pɢ䟲͝v[@/)('(((&&&$##"""!"$$$#$##"###$%$$#$$$#"##""#""##"""#"!!!""#"#" #!!!""#""##"! !"#"!"""!! !!!""!"!!  !!"! !"" !!"!"""!  !!""!"!!!    !!  ! !  + !-¶±çɲ􀂎Ӻφȣኩò󁈋עKՆெ¾Ǘد473Ր ٿ㇊?===>>>??;9679:<;:756:5)$#"#%&%&&'()&L).,MB:;I,.^[Z\XUMC=>CGIMJ6.569?FKNJFFIJKH<5/**./-,.29@?<;446676569;97862-$"'1731-*&(.8;::86579:;@IIFB?<;EORSPLLNJD<;;<>??><;9:9889;;6.*&#%,3676769?CEFFEDGKE7'$+353*&$HDCEEFGEBDLSRHB@=?FQZf79=?BEKIEHIHFCFMMHCCEKLIGEDeDDJLOOJGHHOQOOJH}{{~||C@???@?@???@@?@A@AA@@@A@?AA@@@A@AAA@@?@@???@@AA@?@ +BBAAA@?>??@1A@@@??>==<<;;;:9989889888999:989889899988788878889889989989898989899:9888:9 8789:88899989898989 8989988999889:9998989:99:9:9:9:9:99:9::;:9:9 +::;:9::999;:;:;;:;:;;;:;: +;;:::;;:;;:;;:::;:9:;::;;:::;:;;;:::;<;<;;<<;<;<<<=<;;<==<<<=<=<==<<<==< ==>>===>>==>=< =>===<<===>>=>=>>>?>==>>>?>>???>>?>?>?@?>???>?>?@A?>@A@?@ ?@@???@@A@ AAA@@@AAABBA@@AA@@@ABBABBAABCCBCCBABAABAABBABCCCBBABCDCDDDCDED CDDEDDDCCDEDEDEEDEFEEEGGFEEF GGGFEFGGFEDEFGEFGGHHHGGFGFEEGHHGFGGGHGGFGHHGgI{`ONOMIEA?=:50,,-,--...///../-(!#%"  "##'/43/*).4789875112324 !!!"!!!  !! ::;<?88999; 89!!!  !!!  $$"!" ?<;::;989;;:::9887641/..-)/5>?=;<D =+!#$$%$%%%&&'(+.00Tt`rtkikj_TNNLJvFQ,C;czc\C-29=d83%(/45+1QUNLNMIHJJKIFGGGHDBDEGJMNONLKHAFEFC@>=@?=?ACEDA?><=A^,/jS:;=<>=pioronotrkkjlo:??>??;82%/'-/2379<=<96216:<==>>?$!"###  + + + #"567751*'+-0. "%'# !"  !! !"  $,,,*'%%-47740/0,)$""$%''%$$""!"!#$##'((**)+,$ " ###%"$)-,%!%,17 $'#&&#|/,)*+*((**,*(('&)))*-+,,-16:877896/,,.26;AFDCA>>CGBAEB==NMGOYK?Hc~ن[( W*,51D+1yG=<;5/)%" + +&   +     +   3  + +  + + + +     6        +  +  1   +  +  + +    + +  +  + + + + + +    + + + + !!AfR`^TTWTI@<<;7U08!96ZdG8%!&**)BDA/+1*%57*6GO+.785P?NbP&.   +')%=)P))+P>72+-09?DJ&((< 01--01Y/---.-+++,-)')*+-023100/-,,+)(()('(*++*)'&%&(1G4"$'&''HCHIGFGIGAAACE%)'%&&#"%(*+*,,,+,/1C33442/--,.36665345325;@B?>@>:;>AA???>=>?>=:8898779;=>>=;<;6U<" 'l     +   + +   + + +  + +  +  +@   @ ""#" $$ +""$&&#!!$%~}~~~}~}}|}|}|}~~}~}~}~ }}}~}}}~~~}}~}|}}~~~}}~}~}~}~}~}~}~}~}~~~}~~~}~~~Ӏ~}~~}~}~}~}~ ĻԀ݆üꆚBȻͽùʾƾjD10 +     OV¼˽¿ɧDZ؊hYE5-*)'&' +%$$##"!!"#$#$#$#"!""#"! +""!!"##"!!"#"#"! ! !"!!!"""!"!  ! ! ! !!!"!!"""!  ! !   !     +!;˷ʸúٽҿĽ؈Ʌž_֫΄Y:ׅ ??>??@><977889I::9892(&&&%$"""##%'()./TMGB>E,2`][XNC=>BDFJOVODFEC?;?A?=:8864/+'$&)*)(*3<=9;737;:;=>??@;3,')-22/.,-,,28<=;;<=>?ABBDDB?:8;?HLIJKLJD@=;9667557773)B=>==;(8>CEDCDGGHJJIHE@7-/6:888645542,(NKJKRY[YURRQOS\6=@CABEFF>779;@DFHKS\[QJGEDDDEC|xD}rkksrpr?IIF}|7LKQlcA@ ??@@@?@@A@AA@?@A@A@?@A@AA@@?@AA@A +@???@@@A@@? >>=<<;;:::99989::998 9998889978989998898889888989:9888989 8988999899889889989:98988898998989:9:9:9989 8999::99:99:9:99:9:9:9:::999:;;;:99:9:;:;:;:;:;:;:;<;;;<<;<;;<<;:;;<;<==<<;;<;<==<;<<<=<=<<<=<<=<= <==<<===<=>=>=>?>?>=>??>???>?>>>???>?@??@@@?@???@AA@A@?@@@A@ABABAABBABAABBAB CCCBBBCCCBBCBCDCDC DEEEDDDEEDEDEDEDEEEFGFEF EFEEFFEEEFGFEGHHIHGHHHGOHHGySeNNLJIEC?:84,'(,-...-./11350++(# !"%&(064.)(*.13751/.)*26 !!! C989 ::8889: ! !"""!!  "$$" <>?><;988:::98a99876435640///.-1555887971.-,*!  !!!##! !!! 978 5643567:    !*"#$$##"""#$&'(((*+,***++)*+*+,.//1323431/.- ./.-.//.,+-./0112445545 +44222112112U1123344430,*+***+++,...000123566300..-,-,--./1346777666774045'43236:8756667876567433453375667$6689866554433355433 ! """!"""!##;+""%'(&%&'B),/0@gw{wtke[QNMxFa6VzSsj?:1389:E=qjsod`_aacdecdddccbba`bcba`aa`_`__`a``aaa```_`_```__`___`a``a`_ ^^_^^_^__^]__^]^]^^^]^]^]\]^_]]^^^]^]^]]]\]\]]\\\[[\[\[Z[[\[Z[ZZZYZZYXYXXYYYZYZYXYXXXYYYZYXYXWXYWXWXYZYXXYYXXWXWXWVWVWVUVUUVUTTUTSTUUUVUUTTTSSTTSSSTTSTSTUTS RRSSTTTSSRSRRRSRRRSRQRQPOPPOPQRQRQOOPOOPQPPPO NNOOONNONOOONONLMMLMNMLML +MMMLKKLKKKL KJKLKKKJJKJJKJJIIIKKKJJKIIJJIHHIHHIJIHGGHHGHGHHHGFGGGHHGHHGGHHGHGGGFGHGFFFGFFGGFFEFGFFFEFE DDEEDDDEFEFFEEFEDMtr{yts}voux{{ypPR[aa]N@DKd]onnvLPF{qVMK<+))IO3=E:1Z6Z|DApfhdTUXSRcrut;<;hG?!$+/6(I=LGABEFIGDDDEFHHHIJFBBCGJHGFDAuCJHEHJJLMMIEDFEDCB>=<<@<49KG=:9nt>>>?>:87899:>#&''&%##$%&''&%$#%&%$""#"#$%&?%&$#$%&&&%$%&(,,*((*+,-/0/..-,,-.//0010/.-+)((),0-(&"!&*('&')($"&+-+)+030,*)(('&+1,$$(-//13457877787888:;:85335763,%#$" !%(+-*!998667:$/64256442013324432332000135566677655445544356324778898-%,510.)&'()%4.'0-,+))***((&;(&.7D)+,012469::;:8459=?>==>$#""##!  F (!;:95-$!%*,.05.##!  ###" M "#$&')('#!#'-/-/01.)%" !!  #')(()++,,,*(& %#)+/.*((()+0!$%""$$#l&&(-)"#!!"+,,++*+--,+,,+/-**370/1566653355/*,26:A@>AHIKHIMJHGFDB@DQTJEM]z z +( A &'- ' z¿PF>73/-(" +  +  +       + + +  +          +        + + +  +     + + +  + +  + + + + + + + + J + +  +Wgkd`[TOF@?<\3K-FeGbU`*)$%(((36w̏`'y݄<لׇ(ͅЄ˄'džĄ ArwVPZ\Z[cihgZTZ]`]ZQ77?EFB7-04C@LJLS_:=2SX]M:40$#% #+7O)'B;@>46844AKKJ&'&?& &#,*&(*+.,*+,-//-*)),//.-+(+0/,./0232.,,--,++'&%%(&!!))%$#DI(((&GHI%%EDG$JH$%$$<2<&)+,,-../0221100137:;;<:5588:@D?::989;=<:9;;:>ABA@@A>;;<(6(     + J  +  + +    * + +     "#5" + "%%%&%$!!$&&%~}~}|}|}|}|}|}|}|}~~~}~}~}~}~}|}|}}~}~}~}~}~}~}~}~}~ ~~}~~~~~}~~~~ ǀ~~~}~~}~}~}~ ƶ¡YļɸǺ򘦪ƼgH1      SSĴĴƿ􀂅kſ7t¿¢던ԉl_G3+))(&%&'&&&''&%$$###""##$%%$##$$$#$$$"""!"###$#"!"#$#""!"!!""###""!"##$"!"#"""! !""!!"""!"!  ! ! !"!"!  ! !     +  "<Ѽ˹ɿʰڽίǢϤ退ղҌĸٮ턔Ǽӹτý?F텗?@AB?:66:<<:8897789:983*'$""#$"@?"()*/2WMNB78CTVW3_K>=CFHIHIT2.KC<61*" #'-..-,,+-0..036<==?@@?>><<;79?BCDCA><97=A<8>FJKF@;;:6677531112466+8-8$)*-6CKQMKIHGFHHIMLB>=868;==:8779:8431/48879;>:556569>DIJD@DE5+)/9BJMQTW`aXSSQMJGFHIDV{wqmkjhju~|zvw}~HJLKI~yyxyyzz~suY`_XTVUX^`__`~}tB??@?@?@@?A@?@@?@??@??@A@@A@@@A@AA@@A@??@@?@??@@???@AA@A@AA@AA@@??@ A@@???><<;:98989899878988899889 +8889989989898899899:9898989:999:9898889:9889988:99:9989::9889 :::99::989::898889::9:9:98989:9:999::;;:9:999:;;:9: 99:;:::;;:9:999:;:;:;;;<<;:; +::;;::;;<<;<;<<;;;<<;;::;<<=<;;;<<<;<; +<<<;<<=<;;<=<===<<==<=>=<<==<===<==<=<=>=>==>>=>=> +???>>??>??>?>>??>@?>?>=>?@?@@?@?@?@@@A@@@AA@@A@?AA@@AAA@@@A@@AABABAABABCBABCCBBCCBCDC +BCCDDCCBCCDEDEDDED +CDDDEDDEEDEFFFEDEEFFEFEEFFEEFFEFGGFFFGFGFFEFFFGGGFGF^GGFGGGHHHGGHHHGFGGIHHHIIHHRPOMKJD@;:6,!%-/00.*(+123650,*&! "%*///2,#!$+-.0483)%'+.29   ! ! 8878 9 " B!%&$ ;;;<>=<;;:9889752255564565433222/..,,+/100243/.,)**#!"!"!  ! ;7:8876566335458876 ! ! "!  ! !"/#$%%%&%%&&%#$&&())***)+,--../001221230./111011107/..,.,,-../1210124544775554555321244456679832/,-.///.,..010.+)*,--..--..--17T 3 !44457557758::;989855312346898898630/04  !!"#" !8642.+))+0116; ?7.'$%')+--,E.13:RWcxk_YWXWTDY:7TwOX7//588?AA?<;=>==>z$$%&# !! +  )#$-15!<,##),./.-2%   ! !!   !"$%&&&%# #&!#*-.+&#"(-1/-+)(W)*( ! "&(" ## ,10+'&&%&%"!%++(')(F)+/00/-**.23.+--0/,+.0.' "3#%%#!"#&+,,-/SJG@AC>=IKEDSrˈ 1j $B$!2!rjOF?95/)$"     +        + + +            +    + +  + + +  +  + +  +  +   + + + +   + + +  + + + + + +   %;IUiaRKFCCDD5C,/KdsEKi'%'+**+>G4;݄'؄[Є̈́̄Ją/¿¿"oNCADWcfc[eTLYj{eRDBD?414.I@FQUVY[5p\J4295547=ELI@ADBDDBAA@AA@ADCC?<879:;<7;;=?=5O8(,$1     + +   <  +  + + )    k   ! !!  $%'''&# #''&%$%~}~}~}~}|}|}|}|}~~}~}~}~}~}~}|}|}|}}~}~}~}~}~}~~~}}~}~}~}~~~~}~~~À~}~}~}~~}~}~}~ ù̺ƀſøͣ¿Röρúdq+.dLƷû÷׾Hڽ[ʍ񢭡ִʅĹTF7-)((''(''('&'((('''&&%%$#$ +##$$##$$$"#$"# $$##"!"##"#$#"#" +###""!! !"!!""! !"! !  !!" !! !!! !         'jʲѾǼҶܠǽޠᄈ]³¿žOɋȶ¿þ2-vz񄈌=>@@;8<==>@>=<856899653)# !!!CCE$&LN.51L=AA;:===T^NJJLLNKKMQNG;1,'""$%'*+*&&'),,,0468:@@@ACBDIHA>98:?B>?EGD?<50-)&-3*"#&K<'&"/55=OXXWWVUTRPQTPIEB><=>>@DHKHB=8.&-?HNRSTVX\]ZUUTQONMLLNOPOKJ}ysonos~IHGGIIIJKL0}rqGXceea`^]]YXWXX~@? +>??@@??@@?@?A@@AA@A@A@@?@???@?@A@?@A +@??>=<=<::9898989889899888989889 +89988998889:9:988998898788989:9:989898988998889:9::99:999:::99::9::999::9:9:99:9:9:9:9:;;:99:;:;:::9:99:;;:;: 9:;;;:::;;;:;:::;:;;:;:;:;:::;<<;<;<<<;:;<<;;;<;<=<=< =<;<<;<<<=<= +<<<===<<=<=>=<==>=> ==?>==>>?>?>?>>>?>==>==>?>>>??@?>?@@??@@??@?@??AA@AA@AA@@@AAABAA@@ABAABA@ABABABABABBCCCBBCCCBBBABCCBCCCBCBBCDCDCDCDEEEDE DEEEDEEEDDDE FFEEFEDEEDEEF GFEEEFGFFGGFGFGFFGGFGGGHHGGGHIHMGHIHGGHHHGHGqYTPLGA7.0560)(,00-)()+,.32/.+%""&,47862,""&(+06983---,./36 L 888646 "$#768: "!!!""#"  !$%# <;:;;=<;:62276104687545420-/10---,,+++**)((+059<8+#!"!!!"! 989866632 3466578:9L7 !  !""$###""#$$%%$%&()*)''))&%(('(''(*+,,--/0///000/01)223222122311122001010/0125797543111367653210/..-I/331/,+*))***,-,-.--*))++**+,-,,..-,,-037  65557:9766567774597688633357531115  !"#! <4-'#!!#"A#%&((&''&(),-,,-./02:3U~bqeZVVTQPKtW\tOPp8615657NTeokb_`acacccdeedcdcbcbb```aa`aa`aaa``aaabbaa`abbba`_``__^_`aa`_``_^^_^^_``_^_`_^__^__``^]^_``_^^^_^]^]\]\\\]][[[\\[[[\]]]\]][[]\[\\[ZZ[ZYZZZYYYXXYYXYZZZYXYYYZ[[Z +YXXXYYXYZZYXYXYXXWXYXWWXWXXXWWXXWWVWXXVVUVWWV UVWUVVVUTUSUSTUTSSTTSTUTSTTSSTTSSTRSTSSSRRQR +QRRRQRRQQQRSRRRQRQQRQPQRQPQPPPQP OOOPPONNNOOPONONMNMMNMLMLLLMLKLKLKJKJJKJKJIJIHIHIHIIH +IHGHHHIIHGHGHGHHIHGFFFGFEEFGGFGGFEFFEEFEFFEEFEFEDEDDDEFFEFGEDqkqjZ@E[iiqxZ_|l^\WTRDBEy^SWUZdizvXX`gdVJCA?7333;BBDNi}ytkpj`epxxwv997];:!!$'64^CGGIJJIKMHGJJIGEB::BDEGIHFCDHHDb@DJIIHFEFEEEHJHC>===?>=vt<>>;om9;:;;<>A@=sjn<;:>>>>BHMMLWbf`XPHGHHLRZ]^[XZ[ZYY\adea[XVSUXXZYXWVVUROOPSVXYXWYXRLCe==,,=[@E0/20P/...-/10/.*(),-.10..036772)$!"%(((**++,-+,.-..-,++-..,,./0.,++-.-,,---./0110146346768@H&%%$$#$$%$D?:9>#&&%$$$%&%$##$%&'('&&'))'&'''&&%%%#"$')**)()'%&(),/0/---,+-//0121/-,.//-*)*,.,('())*,+)((%%*.0/)$#'*+,--.04544561)%&"!'03454323457:9899::E<@8*'*251./0.-..-.-+"5.,04 $,1467861./023432121//0/025565677899754542024<32355432/-...*(+,,(!&+-,)LC>;9=:56:>?>==$$%%  ""$%#! + + +  $%!$%69-,./022355,#  !   J"$$'+*&$!#%#$())&$) #05442111.--.*$ g"#" #'%!"$%$#"!!1.--+*&##"$)),../.,/(&24779<<:6254)##%)(&='&('*RPNNGCD>AUWOV^p񊐓 +%r!V*8(5 UJ¿EqSE:3+"     +  + +     , + +  + + + +  + +        )        +    + +  +  + + + +  + +  + + +  + + +  + + o !"?cNXNGEDB@>9XGOdyFFW()&))'.QjТ/0i݅#݅QΆPĄÄ…ÀkYI:*1CQS\^AI`mqaNBA>=:.@-0T?;?1(#! !%$&-?ORRPMFKG=AGMLII$$#5 :)+,.801-+./.-+("#)++/00.++//,)-2110/-,+,-/20,)((())'LK''(&EC$%B&'*)'F@D&&%&'(&IHJ'(((+0544>HH@82,,-.27=@?=;=>=;:=ABCA>=<;=@ACCBAB@!?=;;<>@BA@?@?:5.B%%(A& $ )   (   + +  ,  + + & + + !#$  + +  +  C  $"!  #$%'('%!"%''%#$~ +}}}~~}}~~~}|}|}}}||}|}|~~}~}~}~}~}~}|}|}}~}~}~}~}~}~}~~~~}~~Ā~}~}~~}~}~ 󂈈˅˪ʀӱ̼ɸĿP삗¸Ŀx\F/  T"Vɾùÿ5B݄܀⿩:܂ىUM8+''&'('&&''('(('('&&%$#$$#$%$#$%$%%$$#$#"##""###"""!"""###"##"!"##"!""!"""!"! !"!""!!"!   !""##"""!"!!! !"!   !     6ĭɪҽԳĻ߷߄½Ǹˀɽе¿;템M;;=??==<<<===;754432130)$$" =99A(+,033ZJ945ANK@C3500`YUVX[T;$#%$$%&()()'(***++*,13457:;8531246:<;96667862/,,)'('%#",689<<@CCBA?@EST=3444;BFGDCA?9,#&/7@MIB<51//0,$'7==Kdic`]\/221.,NB<:==98=?DEC<50'(;KIC@ADGLPSRTUUUSNKJIIKMORSQPQPMHHKNMMNNO4QQMLMMPSSRLL}FQ]c_WVWVSQPPQOyrB@?>?@??@??A@AAA@ABA@ ?@@AA@???@@? @@??>?@BA@A@A@??==<;::9:98898899989998998778989888998989:9898999898899::98899:999899:9998999889::989:9899:98989:988999898899989:989:9: 99:99::99:::98:9:999:9:9:::;:;:;:;:9:;:;:;:::;:99;<<;: <;:;:;;;<; <<;:;;;<<;;;<; <<=;:;<<;;;<;<=<;<<=<=<===<;<<=<<;<===<<<===<<>= <=>==>>=>=>==>=>=>??>>>? +>>>???>>>=>???>>>?>??>??>?>???@?@??@@???@@?@@@??@@@AA@AAA@A@@ABAAA@AAA@@A@ABABABCCBABBCBBCCBCCCDCDCCBBCBBCCBBCCBBCDCDCDEDDEED EEEDEEEDEEEDEDEFFEEEFEFEDDDFEFFGFFFGFGGFFFEFFGGFGFHHGGFFGGGFFHHGHGHHGHIHHIHGHGGGHGHDGGJJq~VLHLLD820240**,./.,,,)**,12+$$%)-4=@;71++&#)047977840.-/27734776h889:: """!768 !! !%%" <<;;::=<:;6/4897589886554553320/120/1220/..-,+('-9>?A"$"91*%"""!-!! " 96674675467679878@!"#"###"""$$##"#%''&'%$%&$%%''&%$%%&'))**)*,.0/02'0112345455443454443544455432210025545532343213443433212122/.-++-. -...,+**)((()*,-/.--,,./4 +C877998855576436543448886554432113335777643226   """#"#!:.$! !!  """$&(('3%%&%'*.0./07'/?kKOTVNPSPNOUIZWpo|<1046;RxiXplb`ab!ccedddedddeccddccdbabaaa`_aaabaab`aba`aa``aaababbba"```ba`_`_^_aa`aa```_^_`__`^]__``_^_ +^__^]]__^_`_^___`_^_^^^_]\___^^_^] ^]\]]]\\^]\\\]^]\[\\[\[[\[[\\[[\[[Z[ZYZZ[[ZYZYZYXY ZYYY[YYXXYYXYXY XXYYYXWWWXWWXWWWXWWXXWVWVVWV UUTSTUUUTTUT-UUUTTUVVTTTUUTTSRRSSRSRSTTSSSTTRRSTSTSRRSSSRSRQRQRSTSRQRRQQRRQRQQPPPQPPQPPOOPPQQPOPPPOOOPPONOPPPONOPPONOOONM LMMNONNMMLMLLMMLKLK +LLJKKKJKKLJKJIJIIHHIHIHGHHHIHHHIJIIHGGHHGFGFFHHGGFGGFGFEEFEG FFFEDEFFEEFFFEFFFEEEFEEEDEEFEEDDDEDEFEtFFFEEECJype[I\~\gqZUZVQUS@TVccehfb_\bfehjf]F5AHB>==JSWZ]nzsyohrsq?C|y>><;:kLC"##,0Yv{@CGHGFJLRRLIFEDDDA>>>CILKIHEACFGHHFGD@?>CDCDCA?|ztqtuvvqkfk:=v;><=B?;9osuv;;;:nhm:>CFGKMOVOk6@LSX[_^YWRRTX]^YWXYXRMNSTUVWZ^[WTSSQPQSRRRTTTVTSVWOa=J#c)-+7K4-;50012201211100..023/,-.,+-.//..-.159>96:=?>=<"!"#"!""###"  + /!).))!!>;<==?6   +  !"'22!&*+*)('!B%-+*(# /AA:776& #"""$ z8542/..-,16 6241)&"&#!! !$&GFMTKCABIS]__g}Äbp /*0(,]ȽbB655.#' + +  + +  +     +   +  + +              +   + + +   + + +5 + + + + + +  + + +   +  +  + + + +  + +   -T::??;?A?<>F:GJ^Zo~d-%%()/Jb(\ׄ(ф҄̈́ Ά˄ʀueMF?2acHfKSeTA=D@:><+56@CGKJGEAFHFHGB7#!'# !-358;ISIKHGMML)*LJ&&%%&A) + +5DG&*,.--/1651-+++)*)'&&+021110.-*)*-/00..,(''+,+,,++SPKFHIIJGA=A#%I%(%&*'%#EGJL&((%EBE%',.0258=5[J?#+5:=>A@;7458:>>3;9;=;758=>?>?ADC@@>><<=?>=<>>>?>>@@6T:%1%- )0      %     G"  + M &$&+278 !"$'''&#"$''%$#~}~}~}~}|}|||}}|||}|}~~}~}~}~}~}~}~}|}|||}}~}~}~}~}~}~}~~}~~~~}~}~~}}~~~}}~}~}~}~}~ ȈúˀŰĺʽQḭ́kt*. 'U·󂄅¿酎¸Dф/;Dtչ򉜚ڹޛPD0''&(())('&&'&&%%$&%$##$$$%%%$#$##$$$%$%$#$##"!!"!"#$##""#$#"""!!!""!""! !!!""!! !"""!!!"""! !""!!""#"!  !  !          *cȳѼɱղۚޱ඘㚘ǿᡈõŀſʰ?J?>>><99989:966641..011-'#"###AABA??>@ISF43569>?@@A@<1)/=NSJ@;=GHA@ACB>AA?;::>@@?=@FMK@61-0;9>EIJIKOQTUSOMMKHIMPSW`VUTUTSQOMKGHKLMMLMNQSRQX]SMMRUUWWQIGILMIDJSXXWSRONNQTYYT}}T{@@@??@@??@>>???@?@A @@@A@@AAA@AA@@ABA@?@@??@?@ABA @@>=<<;;::9:989 8899888998898998898998898899888989 +899:9989989:9 8899::9:998898899988998899898889989 888999:::989:::9::9:9 889:999::99:9:99::9989:9:9::99:;:::;;:;:;:;:::;;:;:;;:;<;:;<; <;:;;;<<;;;<;<;<<==<;;<<<=<=>=<;;;<==<===<=<<=<==<<<=<<==<<=>=>===>=>=>==>? >>>??>>==>>?>?>?> ??@@@?@@??@@? @@???@??@@??@A@AA@@A@AB +AABBBAABBABCBCCBBBCBCBCCBBCDCBBCBCDCDCDEEDEDDDEDEEDDEFEEDEDEDDEDDEFEFFEEF +EFFFEFFEFGF GGFFGFFGGGFGHHGHGGHIHFGH6GGHHHGGHHID[`OKJIGA>;96551.,**+.-'%'(**%")2;! ><840/1564356667730.-0357898 7544468989!"""!! %9106  !$%$!<<:9:;:;==62799878566545544312322211/00.,**--,-6"%'''&%&%";30.,+(&&&%&%$"!  766776787797555679 !$%%$"!!!g !! ! ""!!"""##$%'(+--,--+&%*-0122200113579:976678877877877877566766788976543433111233465324434532221102 13672120.-z.-,+++,..--/28 !! ! 4686556898776343354422237864676456777865 !  !!!"#""">4,%"!""!"!!"%&'&L%&&%&&'()+0468D-4Q~EMLIEPRH}o`^o~}KC03B]}W]jgbaa`aacbcddedcdddedddccbbaba`a`abbccbbbabbab`bbbabaaa__``aa``bbabaa``_a`_`_ `_^_`__^_``_ ```__^^^``___`a_^_^]]]^__^_`#__^^_`^^^]^^^]]]^^]\\^^]^^]\\[[\[[[\ +]]]\[\\]\\[Z[[ZYZZYZ[[[ZYZ YZZYZYYXWXXXY ZZZYYXXYXXXYZ XXYYYXWWXYYYXWWXXXWVWVVVWVWXWVUVUTUUTTUV +UTTUUTTUTTS RSSRSTTSSSTTSTRRRQSRSRRSRQQQSSRRQQRQRQQQPPPQQQRRRQQQPPOPQQPOPOPQPOPOOPQQPPPONOOPONMNNNMLMMNNMNMMMLMMLMMLLMML +KLJKKJKKKLKJKJKJKKJIIIJIIJJJIIJIJIHIIIHG HIIHHGHHGHIIHGHGFGGGFFGFGFGGGHGEFGGFEDEEEFEDEEEDDEEEFEEDEFEFFECDfn~qaEhk[}]GABMOJG}k`ZW\blxvohgnkfXFCU2faOB80I228\hlkhsz>??=<::;:a@H%6D0%(DC_u{>?>@BFHFGHJIHD=>?>@A@>@CFGHHJJHFCBABCEFDA>ww>?wrpsx{vprrps<=;67;>???$#""   +E+/-0-%"0%%#*$A943.)"  +  !)1'!$&')(#$00(!"(*%$$''#!! *8A?;8( "('J 10..!*,A!#(*%JNOG<9>MWZ_en׃቎ +v #: B 2:<¿V}N?:94,(%#  +  + + +    +   +  + +  + +              +   + + +  + + + + + + +  + + + +  + +  /)"<]a]6>>9gc8AC9i^PPblg:1%'1LxdtSԄF̈́JÅ"&&Iu{]OC0GMGry^C3-/8853XLD?>CIRXTMFEJHC6'%3:5)"%(*?EGGFOS*+*'&%;##" #(:FI%&%&(+.-.-///+&')()*('(*,..011/-*))*+--,*(KJ()MHFINQNIJJHI&&&DACADIKJGGHGGKIF&)MD1 1+,+)+/(B:;EE)1:<<==>ACAA?==;8]9988:<>>@DFCBCBA?>==<;;:78<=>?BDC6PLN0!<??>=;9e;;7320-)).//-)*+*%=8?H@:5224630,+*)+-/;:2.14671*$'061*(*.+)+*((')+&',/,*)+-/0/0.,-0014210//131./131-+*.24898;?AA?AFFGKH?:89:??<<>A<.+6EUL>;;:;>?>?@=97?O\ec`]VTTSPJC<720256862.,,./1753689::851--03799:;;>@=;:;DQQ:010/9==>?AFLLJHGGJL\MKILMLJFHKOSVUTROLJLMHFHKKJJKMLJKLNNPPLPVUPTTTRRUSMMPRQOLKJMRTVYYXWTRUZ]`bZQuDA@?@?@?@@@A@A@ A@@@AAA@@@?@A@A@@AA@@?@A@@@?@A@@AA@ ?@???@@@AB+AA?>>==<::9998999889988989888988998889889998989899889989:9::988989899989998899889989:999::9898899988899889 8998788899:9899889:99:99:999:::9:99:!999:99:999::9:::9:::9:::99;:9:999:;:9:::;:99:9::;:9:::99:;:9:9:;;:;;::9:;:;:; <;;:;;;<;<;:;<<<;;:;<;<;<;< ;;<=<;<;<<=<;<=<=<===>==<=>===<<==>==>>==>>?>>>==>>=>?>?>=>>>??>>>=>??=>>>?>?>??@@?@?@???@@@?@A@ABA@ABA@BBAABBAAABABCBBBABAABBBCCBCBAABBABBCCBBBCDCCCDCCCBCCCBCBCBCCDCDC EEDDDEDDEEEDDEDFFEDDEFEDEFHFEF EFEFFFGFFGFGFGFGGFG FGGGHGHHHGHGH GHIIHHIIIHGGg\KZXNFB@?>:840-,0++)(()+20% !(-5=?<:88883121134310233357 644566777!""!!! /!""811; #''$!<<;<=<;;:::9::;;:98787654542210/".0/./0:%()(($841/0/-++)*+**++***+,2+)''&%&'%$$'()*(#  ;98::78V !"  !  !!  ##""!"#$&')*,,..+*,//123321234566778;:8768:8899:;:9:;978:99;= ;:853101.-../0@13334579875567877665344420112223332//-,,--0799n3345656665566875334333235643697753347654 ""  !!"!!?4+'&%i###!! !"!"!#$$%%$$%(,159989=CDd]qJPQH@MSM;[_^x~OC05@eSo_gd^_`aba`abccddccddeffeeddedbbcccbccbbcccbbba`bcccbaaccbccbabbbabbbcbba`a``ba```a```__``a``_`^^_`a`_`a``_^^^_`_^_a`_`_^_^`aa__`^^__^^_^]]]_^]]^]^]]^]]]\\]\[Y\^]]\\]^\\[[\\Z\[YZ[\ZYZ[[ZZ[ZZZ[[ZZYZ[[Z[ZZYZYXY ZYXYYZZYYYZ[ZYXYYYXWWWXXZZYXYXXY XWWVWVVWWWVWVVWWVUVUVVUUTTUVUTSTSTSTSTUTTSRSTR TTSSRSTSRQRQPQQQPQRQQRRQPPPQQPQPPPOONOPPOOPPPOOOPONNPONONNMMNMLLMMLLMMLLMLLLKKLLMLLKLKL +KLLKLLKJJKJKKKJKLLJIIKJIJIJJIIIJIIJKJIHIIHIJHGH GGIIHGGHHGHGGFGHHGFGFEEFFEFGEFEFEDEFFEEFFFGFEH~c\^[`im`Dk:@FCsmi`hbJXr{vynevI@^5OfWNM71$FKbhkqqp~CDDDCB??=YW"0B:24pCDEHFCACDDCADEA><>>9;@?<;>?BCBDFC@?|>@@|ysmu=usy==>n^hqvqonmmn1LHT5/..//01122111/000111/-...*)+*+-0241,1=B:-'%%%())+-,,../../12110010.-**,,+++,-.../022000/01478:=?@D#$#G%&'&$C@?@!"%('%%&%%%&&&%$#"#%&&&'(*,.0.-,*)+,-,+*)))()++,,-./.*)/1//00.-.0110-+,./11/-++*+n,..+&!#'+--,+,,-..+%(25332+ '15/+(),03579:7457755665667677765750.-+*-361+(&" -85323411145556662/02224T32256789888;>8K))(//1320,'+2566764543200/0/*5$+,+//.,+*#$%$$()1321.-268;;9679;<<EMPF1N,13/PMJEMH6AT_`VRQGAQ7,3 +-:.,,67DFIMKKT-+)*(3) + DMK(+,.-*)**++)+-*&%''$$'%$$%&'(*-.)'&'*++,-,)(O)**RNLIEJ(LIJ%&%@5=FKGFEEEH'*%BDHE<-!?%*!!>D(09>=B=27<@FGDA?@=?@;9669>ACFFDB2AACB>=:9;@>=@AC>4TE(9'+'"<;85!(0/      +  &   $ +!$ $/  "$"!"$%%$$~}}}|}~~}~}~}~}~}~}|}}~}~}~~}~~}~~}}}~}~~~}~~~~~~~~~}}}~}~}~~}~}~ ջπĿȸȿĿNǾJ,,  j!Nh򀅅ǿ˅̀¿Vï*󃬵܅Ͼ쒶Q;+%&'('''&&'&&&''&%$#"#$$%$%%$#$%%&%$ %$$###$$%%$#$#"#$##$#$#""!!!"# ""#$#"!"!! ! +"!"!! !! !"##"##"#"! !!""! !! ! !!!      #Jʭ̼󊒀ɻپέԅր埾˽Ͼɽ禊Ѯ͆€Ƿ>L򇎌U<;<<=;989:951//.,--3;?<(553(!'132320.--*(&$'),.,-//1330N#"$28.(&##&&&'JK(+-0/.PHL(*-.,-27633345578864551010/04876688:=BFECFDCDE?:<;;AC???91%&5==<:99:;::<>BMRX_c_ZWVUOKJFA:.')*.133452-**-07=:7876795-+/6868:;?@=;<::;w=??=625557;<999?DCDFGJKFCDEHKJGFIKMPTSQOMGDEGFDGIGEFEFHIKLLMNLLMORSRNMNPOMORTVUTRQOQU\_c`\VU[adejn_k`BA@???@?@A@@A@@AA@AAA@A@?@A@A@@@A@?@AAA@@A@A@@AABBAABA@@>>=<;;:989898988:98998988899989898889989:9899888989998889::998 98998898898889889:999::989:::9::9:99:::9:9 ::9::9:;;:9:;:9::9:9:;:99::99:;:;:;:;;;<;:;;:;:;::;<;:;;;<;<;;<;<;<;;< ;;<;<<;;;<<;<;<=<<=<=<=<<=<= <==<<==<<=>=<===>==><>>=>>=>??>?>?>=>?>??> ???>>?>>>?>?>>?@?AA@AA@@AA@@@AA@@AA@@AA@@@AABBABABABBABBCCBA@B ABCBBCBCCCDDCBCDBBCBCDCD CDDCCCDDCDEDEFEDDEDEEEFEFFEEEFFFEFGGGFGFGFGHGHHHGGHGHHHIHQIIHHHIIrs]e_QICA?=<:852110./.,,,+,34.*'%%$%).3579!&%##"! 3110/0111003554&87656667 !!! !!  !"" 517 $ $%!99:;;;=>=<:999;;<;;<;:87556532)1///00/.--..--2@%)*)#7229!!@;51,+*())(()),-..-,-.,('))*++)%"!!    C!" !"!"#&((()'')*+,0101112420144334666776333246689::9989;;;:::9?8878764311/000/.011124787878:;;<:75554433456656763221224789 864344787655676665533343455669975667657775333224 e ""!4/,)(&'''(()))('&&)*(&$#"!#$$%&)3=BA?>A&BTKhGJvh^^^K2[h6XwZZ69IhTiib_```abbabcddccdfefefffeedbbbabbcb a`aaabccba``aabcccbca`abaa```a bbababa`_`__`_```a`aa`_a`_`_a`_^_^^^_aa``_^^_`_^^_`a``_`a`___^_```_^__^_^]]]\\\]^_^\\]]\\[[[\[\\[[\\[[\[Z[\[ZZYZYYYXYYZ[ZYZYXXXYYXYYXYXXXYZYWVVWWWXXWXXWWXXWVWVWWVVUVUUVVWWVVUVUUUT UUTSSRRSSTSTSRSRRSRRS RQRQRRRQQRPPQPPPOOOPQQPPOOPPPOOPOPQPOPPOOON ONNNONMNNNMNNM NNMLLMMLLLMLMLKLLKKJJKJJJKKKJKJJKJ IIJJJIHIIJJJIHIHIIHGGHHGGHHGGGHGHGGGFFGFGFFEFEFEEDDEEEFEDEEEDCDDEFGFFEEBYņxuyhZLC;mwDdWVVXi|LPDbS^n;Hu'6Gk[G:36Igvtmqwz||~}>>>?>9X-! "$#(.Z?KIGECCB@BCB@?ABBA?>>??=?=8o:=>>@@?==>?BDCA@?>>=sr;;;<<<:o8:g\DTIC?:77oqspb]^VI=:IJ6-=AEC86T`uf630//./1110001210/022/.-,\++*(+020248;<7.)(&&')+-.//..00///0111011-,,+,-./-+*+,-.023210--/022368:=B$%%$#$&'('#AA !#%&'%$-%%%#$$%%&&&')+,.0.,+,--+,,-.,*)(*,---../.-/00/10/0//--../.+)((*,.032+$%(*)*++.0,&*5/.,%+-.0//-((/5:=@:0/25654336766655333443431-,.11*(+($((+--,,..--,,-/.*,131025643002456778:?@R/0=I(*,.//,++9-0345799864321011-! &++,01.,.&:"%#&,/023221247:;98889::<"  $! +  !"%%, )#% &'%&$$%&!g"&$$# #"! #,17<>:7543/,*%!  /!%&('"$)+,07.KIEKPV\fw$ L3   +* + +"L†+ubP@71/-*&$  + + +  +     0 + +    + +  +     +    +  + 7   + +    + + + + +  + + + + +  + v ##"$'.:5R;KZ]_c9;/@4>K*4XE&/C5)"!&4HQOJNTVWVSR)('(($2 + + 8',,,+***(*++)*++*)'&&&''(%"B#&'())(&&&'*,,**)((&%(*y(FD#$$&'%$D!"82*7.(%" !CCC@8571' !,)#(+)! %,348=CEA?=;=>9:=?;82J--.E<-+' $2@M9 +          !#   !%#$$  +  !!"##"#~}|}|}|}}|}|}~~~}~}~}~}~}~}~}}~}~}~~~}}~}~}~}~}~~}~}~~~~~~~}~}~~}~}~ ϵ퍡퉛πѿû耀Ѻ¼¶M˿׼h6       #Pǽ%^ứҴҪԌʄԀgS8)$$%%&&%&&&''()((''&'&%%%$$$#"#$###$##"##$%$#$$%$%$###$$$#$#"#$##"""#"# ""! !!!""#$##"###"!"!"! !"!#"!!""! !"!!! !! !!! !  ! !!        + $6Ǚ⮾ìǼꌉ㕒κ臵DŽױȐ̢ՆƸ϶ޙ +ΆπȾՋ높==;:;865520/.,-29A;-QOC1!$+/1233*!$&# !"K)-1233567a@.3!.2-)&GDDHN+*(,/231RGDJT*QU,UTVUP/79:98778:<>>;74446643047567:8=@@J/4ecfid^ZUOLJFC>4)&++-.-04531/,+**.6;7341*),/268=A@=@BB<9;>?=>@B@;744557:;<:755787;>>?AEJOQQOMMMLKNONRMKJFCGHGGFFGILLMMNOQQQPMMNNMKMNNMQTTSVYYXW\gkec\QUbinnlunRSYZמxB@@??@@?@?@@?>?@ AA@?@@@AAA@?@A@?@@??@?@ A@AAA@@AA@A@@@?@@@ABBAABBA@@>>=<;;;:98899898998998889989888998989:989::9:9:989989899898989::99:9:9:::9: 99::9::99: 9:999;;::99:::999:::9:;::;;;:::;:;:9;::;:;:9:9:9;;;:;:;<;:;':::;;:;;;<<;;<;;;<<:::;;;::;<;;:;;;:;;<;=<;<<;;<;;<;;;<<<==<<<;;<<<;;;<=<;<=<<==>=<=>==<=>==<==<==>===>=>>==>>>=>=>?>>?>?>=>?>?>?>=>>>??>??>???>>???>@@???@?@@??AA@A@ AA@@AAA@AA@A@@A@@@A@AA@A@@ABBA@ABCBCCAABBAABCBBCCCBBCCBCCBBCCCB ABDDBCCCDDDCDDEDEDDDEDEDDEEEDEFEFEEDEEDEFEFFEEFEFFGFEEGF +GFFFEFFFEEFGFGFGGGHHIIHGGHGFGHIHHGHHHGHHIHGHIIH`IJKJE_yfXNIGDA?==<82/0220/.,-/00-.00-'#  )3"(&"!!! 60//./.-04313:5456797 B!!!  !!" ;41:;!%&":89;<<===;9899::;<<:888764432014410/W--./.,-,--.7#'*&;8@#'%=ru=;;0Qsoxkb`_aaabbba`bcded!effehihgeefdbbcccddcbcccbcccbbcdcbabaacb ccbbcb`a`a+cbbcbbbaaa`aba_a``__`a``abbaa`__`a_^_`_``aa`a`_ +`_^_^^^__`_ +`a`_``a`_`_^]^_^\^]\]^]]^^^]\[Z[[\[[[Z[\[\[ZYY[\[[[Z[[[\ZZ[ZZZXXXYYZ[ +Z[[[ZZYXYZYZYXXXYYYXXXWVVWWWXXWXXXWWWVWVVVWWVVVUUVUTUVVVUTUTTTSSSTSRSUVUTTSTSTSRSRRQRSRRSRQPQQQRQPOP QPPOPQPOOOPPOPOPOPOONONOOONMMMNMNNNMLKLLMMMLMMLLKLNMMLKKLLKKJJKJIJKLKKJKJJKJIIJKJIJIJJIIHIJJIJJJIHHIIHHJJIHIHGGGHHHGGHHGGHHHGFGHHFEFFGFGFE FEEEFEEDDDEEDEDEEDCDDEDFCGv}fBX>P^VDFT][\esLHIz^TcDGl_Masme`W_s{{rmqv|AAA?A<[' !"&&$;HBJGEGHEA@ACEFDEHJKLHB=<<>AB@@;8:<>>??>?>AFEAAA?u;>==rw;HEDE@wu:?KF=5dKCiOCHPRG@:>P_[>R>;CE`EHB@?AGOY[UVZcd^aeedee`ZWTRVY\\^^__YSTTQRTVVRTWXXVSRPBcaAB */1-)-QMom`TiKVYX/'-/010012112341.+*)))***+,()0336::773-.-('*./.-./0/01/014553132-++,++-/.,,---./2111230.0111235:B#$%%$$%&&&$C"$$%&'&%#!!#$##$##$%%$&'%%(*+,.0"0...-+**+-.-,+,,++,-.///00-+-//0110/./..-./-)&&'+--,-/.*++))**++*+-12-$%-,/.%!$+///.00./368<@6,.46643335652144311356664.+.01.*))#!$'),,,--,)()*-./.+*,012355431.J.256555;>Q1'/*'&+../..0/0103889::7522431/*&$&*,,-11/.&1-%(+0102454248:;:;98:<"" ! $    $ $%&')*E& !"!#',&)./0/) !#$""!!""(,%"! !"!  +;:<><:83/-+(%! !#!-004+!"""$*+)'"&-11087&',,agjl΄>%lj9&, + [^nN>620,)'&# +  +     + +    +  +   +    *            V +  +  + +   +  + + % + +  + + +  +  ! !!" $98>;eM9%#74HME3cZ(&,%Er;ׄ6τʄʄȆEpXYF,:(4?9.3@FBAIR\j732M>9F22F44BG@<<7=KRYTRLLOSW[[,+*(($0 ++(,++,-+)*,-..,-/0/0-(%%%&()()&"#%'((''(')-,)))'I&(&&C#0,*+'CA"&.+$6+S+?-%+24,)&)6@;"(%+=+.)('(,3;>99=DD??BBAAB?<;::>@ADEFGID>?@>?ABB@ACCCA=;8+<;(# -/MPA3A3=6'6  8 @  + + !"  + +"#$!!  !##"!!!"!!!"~}|}|}|}|}||}|}~}|}|}~~}~}~}~}~}~}~}~ +}}}~~~}}}~}}~}~}~}~}~}~~}~}~~~~}~~}~}~~}~}~ α耋遃懛Ӏɽ¸񂄄°ɼƻH쁐û?3   g T􀄈KຬAŠ̧Е׋`L7+%$$$%&'(())(''((''&'&'('''%$%%%$##$#%%%&%%$%$###$$$%$###$%%$#"""#""##$$#"#"!"#"###"!""!!"!!!"#""#"#" ! !!!"!!  ! !! !  !! !       + + &Kȸ䪻㜇ԮѸ”æļ˦ǹڀ ˄̀ºÿ [剖:8767531/01892*MML;*#$''$!&,.///020K=!@ #%&OT^455476]FB$(*,+,*FAFFJ++(*.574RBGLMU++OLMNMKO178:;9::;<>?=;97778654344322/.49:CFIJB?DD?;:=@DFIJJHR0565d^YVUTRPLFCA=5)'*.2320-,--,*()(',13/%"&')2689;>??@A?:89?DECACDB?70048::71/2467668=@CFHKPQPQOLKKJIIJIFCBGJJHKLJIIJLMNQRQONOQQPO*PQRTV[gkcchmha`\QP^eiostgROTY]gnnjA@@@?@??@@??@@?@@@???@AA@A@?@@>??@?>>?@@?@A@AA@@???@?@AABBABAA@@?><<<;;::989 +88899898889889989998889988899989878889:9:999888989:98898989:9:9:999:9:99:9::99:9:;::99:9::9:9 +:9::9::999:9:::9:9:;::;:;::;:;;::;:;<;;;<;:;:;;;<<;<;;<<=<<;<;<;< ==<<<;;<<<;<=<===<=<=<=<=<=<=<=>=>==>=>??>>?>=>>>?>?>>>?>??@???@?>???>?@@??@@?@A@@@??@@AAA@A@?@A@?@@A@A@AA@@AA@@AABBABAABBA BAABCCBCCCBBBCBCBBCCBBCBBCBCCDDCDCDEDEEDDEDDDEEEDDEEFEDEFFFGFEF GFFGHFFFGFFFG FFGFFFGGFGHGGHHHIHIGHIHGHHHGHHHGHHIIH#IIIHHGHHIIIGvjf_VME?:689865321/...0'/-+*'#(8%'%#! !"#!90./.*+,-././145543322555678  !! ! =5+1;%&# ; :998899:;:75445544431/01110..-,+-1++2A$&!7?#%'('$"#$$###!>:87420/,+++)(('&&'(()*+-,*.++,+)***)))+++*-.,*+,.,+))***(&')))(%"  ""$%#"$&%''()*+,--,+,,---../012344555441124798668:;;<<;;;<;98756768878:9987755322345642323443233466654347887:89323433234567565443579 76:::97   + !!!"#$#<2/J0110/...//0331/.--,*+,/6;888633.oSPy`N=6CKzZ\fXrNKG=Zzglidabaabaabbccbcddefghghgfedcbcdcccd ccbcccdcdddccbcddccbbabccbbcbcbcbabbbaba `aa``aba``aa` abaa``aa`_``__`aaa`aaa`_``_^^^___^^__^]]]^]^^]\ ]^__^___^^^]\[\[ZZ[\\[Z[\\[ZZ[[[Z[[[Z[\[\\[[[Z[[[ZYYZZ[Z[\ZYYZYZZYZYYXXYYW XXWWXXWWXXXWWXWXW XWVVWWUUVUVWWWV UTTUTTUUUTVVUUTTSTS +RSSSRSSRRQR SQQRQQRSRQQQR +QQPPPQPPQQPQPOPQPPPOOPPONO NONOOONNONMMNNNOONNNMNNNMLLML +MMLLMMLLMMLK JKKKJJJKJJKKJIJIJJIHJJJIIIHI HIJIIHGHGHGHGHHGHGGGFGFFFGFFFGFGFGGFFEFEFFFEEFEEEDDDEDEDEFEFFCYόnNd>F[[T]mlo}}z~Irb]vCB`[!,6aheq{rq~|uqrssvz}}}=:aT>B &''',0c}CDDDC@>?>?EHGGIJJIHD@@?A?=<<;tu?@?>@CCFLROHMSSLFJUB:B8If`SRM??[[SNG?55NaC8n?DBIYL=nh_QOZbkzADGHJNRRPQWZ\`a_\XXUW\\XSUUVZ\]]^\YWVUX\\\[XTRUWURMI@gOK7<1 -331.-('3sBN]tuR.(032110//..///0111001000/-**+b**+,+,,05:?>73200-*)*,-.-.//011/..1453342/-,+*+,,+*+,-./1100011/--..14459>A"$%$#$$E""$%&&'''%$$$##"! !"$%$&+...//..//.,***,-./../ +01112.)*-01~0/..---.-.0///.-+''()+...-,,,--,+*)(),0211/$22'.-,,,22.+.0+%)1679=8/3765322344//3211212443222121-,//.-(#!#'+--,+*)(*,/13321W2444221135657=2:E--*))+,-/01433421569;<;854442.,)'),,-/332/,/#,+,/03543468;?@==:889:;<Y! ) '/;#&'')(=)# !""%#''*('(('&'!',,#$( "%*,(&))$" $&'&''%%,86334421-($!  !  ##! !#!0232/"+.('+-($%"%)-056.&'(+-8ANҹ爐4Q&&// +3¿„Ä=¿w\MA80*$!!  +# +  + + + + + + +     +  + +  V   5    + + + + + +   +  +  +  +  + + + +  R!Y@:WE6))9PL]9251Nw1A,rڄ$Յ̄ ΄ +ʄƅ/Å. }T8G*0?=:FSPR[\XY`e4_N@@T21@3 $@B=IQKJSQMMQSTUWXWUT(%<0 + >M)()**(''').00.00/.-*''')'%$%#DF&('&(*+.384.2760+/9)t-JB642'&;:3/*%,9'"C(,)/;.!974/06;AK*,./136544:=?AB?<::79>@=:<=>ADEEFDBAAABDDEEC?=>?=:50)@1-M.7>JG&  &   + +   + >   !  +]!! "#"    !#&'%$"! !"!~}||}|}|}|}|}|}|}~}|}|}~~~}~}~}~}~}~~~}}~}} ~~~}~~~}~~}~}~}~}~}~~~}~~~}}~~~~~~}~~}~}~}~}~}~ ˰􁅄ϰ金ܺぉüȽſJǺַH8  +iX􃅈傂¾»обЧޘסhR7+&$$%$%$#&&&''())('&'(('''&'('&&%%$$%%%$%%%$%$%%''&%%%$%$$%%$%&%%%$$##$$$#$#"##$$#$###""##$##"!"#"""!" +!! !!"""#"#"##"! ! !!"! !"! ! !! ! !           +&n↔ꚈɀظлӺĪ⃯Ǟũ睅̀ļžþ3R863234682L9+# !%''&'+/32/--..-/,+)I@$))'HEU14123XDBGK''$KPNA12?EIHHHKJJJFHPLCH.2-*T*.006;=?=:88:<>?@=:::;:9850../01469=GLOTSOUO9:CFGDBCEBADO.211.UR/3222/[UQNIGC@<;:6200158=<84,+,***++-./.+'"#'')16;>@BBCCDA<>FFCAACDA>:622465310+,04789:;@BDFHNQSSRQPNKIIJKIIDDCCFKMJIGDDEJJLNPPMJJMOQOOONMC:FVdt}k][URWhj[SXgk[LSPObv~o@@?@?@?@?@@??@@???@@?@A@?@??@AAA?@?@@?@AAA@??@A?@%???@@@AABAABBAA?>==<;;;::98998899899:98989989987898:999888989:98889:9898998998989 8999:99989:;:::9:9789:99::99:::9:9 +889998999:9:::9:9:9:989:9:::9:;::;:;:9:9:99::9::9;<;:;;:::;:9:;:;;:;:;::;;: ;;::;:;;:::99;<;<;;;::;<;<;<;;<==<=<<<;<=<<;;<<=<;<<<=<;<<<;<==<==<=<<<===>=>=<=>=>==>==>==?>>=>>>=>==>??>=> ?>??>>???>?>>=>?>=>?@@?>?@??>>@??>>?>?@?@A@@@ABA@ABA@ABABAABCBCBCCBBC BDDCCBBCDCBCBCDCCCDDEDEEEDDDEDEDFFEDE!DDEEEFFFEEEFFEEEFFFEFGEEFFFGFGFGHGHGFFGFFFGHHGFFGFFGHGHGHHHGHGHGGHGHHIHIHIJJI6HIIIHIIHHskheXJHGA<>CB@;76413642221,*,,++(# )7!#%$2,+///00...+*,.0332332122147 4 !"!!  <723>?>>>=<<;;<;;99:87787533342100012320-+-/0//.-*,9##>5?I')''(*)&"#%" 5999<<966544211-,--,--++,,,./-+*)(')+,,,---+,--,+,/--.--,,+++.21.-,)'&$$! !#%$!"$$%*,+*-/--,+,,,-,))***)*+-//0114896544213456656678789:9;<<:9776667889:9::865688688:976641254323336779 73222345-457766544456534778 ,!   !"#"" =972./100134211/./-W/0221011///.003897565;@HR]CUK=_OhieNyZOBjNpnukcbcddbccbbbcccdegfffedddggfggfggfeecbddcbcbcbcdcbcdcddcbbcbbaabbbccbbcbabca`abaa`aabba`aabaabbbaa``_`___``a`a``a`a bbbaba```a`^]\]^__^^^__^]^^\\^]^^]]^]^^]\\]\]]]\\][[\]\[[]\]\[\]\[[\\\[[\[ZZZ[[ZZ[\[[[Z[ZYZZZYZ[Z[ZZ\[ZZ[ZZZYXWWXWXYXWWXYXXYYXXXYXXWXW VVWVVTTUUVVUVWVUTUUTUTTUTSRSTTSRSSSTSTSRTSSSRRRQSRQR QRQRSRRQQPQPOPRRQPOOPONONMMNNOOONNNMMNNMNONMMNONMMMNMMMLLMLMML KKLKKLLKKKJJKLLKJJKJIIJJJIIJIJIJJKKJJJIIHHJJJIHHIIIH IHFGHIHHHGHGHGFFEFGFFFEFGFFEDEEFFEDEDEFFEEFEFGCBtNJ<6wzdg|y~JQQQMC|ywnj!-0Zlhor~Cyrmmprv{~|ur9/0q>yptx>CHILRVXXY[]bhnmb[Y]\SPSWYZ[[V[]\]ZWTTUVVY[ZXX[\RD:aOJQOD@?FhR\2720.CF]g_s/'-,.///.-/000/0110123 2/.,***))*+*a-29=><7311.,**,,,--,/1232///25431/-+++,--...,,.-022135420///01125:?!"#"!#$$"!"$%&&&%$$$%%%#""!#"! #(,--/0,,-//-*()+*++-00///001100/,-022210//.,,-,---.//...,+*(*,,++,-,,--,++)*+,..-/022)0+3%/2201000.//)#(03796345544533350.17000/120/013420-++053//0+$!%)(''()*,.//233411223345554O676467)&((*--,-02131.233459<;<=<:657630,**-.--.0381<07)1//0043257788:>?>=;;=>>;/" " $'4 #:("!%(!!#$"""$#$#"$(% ,&*.3205/#&((')+**,2 *'40.+))&$"<   !"##"#%" %$!## U/130 (4>A<8*"!$/0% %/4)"*)&7IWg膎 {4$ >#Xt%6$8ÿÆ0}[QK@2.-)#$'(% + +  +  + + + +      +    + +   '%   + + +          + + +   +  + + + + + + + + +   /6:W>.;<5O46YFq J̄̀B:,$ORDJ][`ghll7=;=:1XWVJ= @ICHNV/[RLJKNQVXZ^`VOL&'5% + +-'+*,-00,%GI')*)*)*,,..-)))-,**(&%&'*)%H(6B>2)C/0E@!$ + -ZO=7;=.9:544772/.+,496.14&G'LFHJ'*-/279::;<=CGJIB=K759=?@BCAFHHHEB@?AAACEB@ADD9,%?2-33*%#%7/94=kBE7:  )      + + + +   +) +   9  1!""###!! !"#%&%#""##"~}|}|}|}|}|}~}~}|}~~}~}~}~}~}~}}~}~}~}~}~}~}~~~~}}~~~}}}~~~}}}~~~~~~~}~~~~~}~}~~}~ ²놎̻Ż聍ʿ˷¼@͹}?6   +)\Żp2Iӥܻ€ޒgP7)&&&%$ +%$$%&''(''(' +&&%%%&%%%&%$$%%%$%$$%%$%$$%%%$##$#""###$%%$$#"#"#"!"!!"! !"##$$$##"###$#"""!! !!!""!! !!!"!!"""!"!          +#LˠĦ咥ޘζڨؖӈãŭ𾔅ɽɛߧͱ㩵ɀƾþ􄋎h33445/G<62112/*&$#"$(,0354/-./.,*)**M@=#%).+(+/00/SB=9:=>=:=BDA>;=B@;<@;4544337:8?KU4<<:5-'I'+121]RMLGB@@?:99889:96545?B81.-/0012342-)+/16;?A@@A@CEFC?AA?=>CFF;2./+',2-))*,../3578;BFGILPQRUWTRQNLLMLMMKKKJGIJIFIMPNKIKNOPQQQRPPPMKJKMSUSWelrvvvrbTUUZYVVSKGS_]T#X_fz{_x???@?@??@@@?@@??>??@???@@@A@?@?@@@A@@@?@?>@???@ ???@@@ABBA @??>>=<;:::989898989:9 :98999889989:999:9 :9:9:::9889989:9:998:9888999:989:9 ::9:::999:999889:::99:9:99:::99:899:99:9:9:;;;:;;;:;;::;;:;;:;;:;<;<;;;<<;<<<;;;<<;:;<<;;<;<;;<<;< ;;;<<;;<<<=<=<=<<=<<=<=>===<=>=<==>>>=>>?>===>=>=>?>=>?>>?>>=>>>??>>?>>==>?>?>?>?>?@A@?@A@@A@ABA@AAABABBABBABABABCBCDCDCDEDEDEEDEFEFFFEEFFFEFGFGFGFG +FFGFFGHHGGHGHGHGHIIHHIJIJIIJIHHDZh_e4]OHHEGDA?<<99:;:888511210010+%"%*((+/5;;/'%*27645532.+(),-,,.010/1210025 +  ! ! 953< ==;:;:988789899877533232//012110/../0/..//-.6BJDAFFEGI%()*)(&#! 79:646 :86520-..--,*,+*+--+('&%&')**+,+*+-.-,.--,+-...//0111/0320/./,)(%##|"  """$%&')*+++**++,+)*.0,+*((*+,---.02443531001224432445667889::9::853244555666567886655578988::9;=;::;;: +989;:::   354 5545776654333235678845322 !!! !  ""!!!<2./112133222420.--.0022110/12242259;::9:=FGpwpYc?bPXEyALpm;>VMmsjcabbbcdb1cddefeffeefghhhgfffeddeddcddcdccdccbcbbcbcbbbddcbcddccb(ccdbbddccbbabbbabbbaaabaa``ababbaabbba``a_^_```abbaaa``__`_^`bbbaa`_^^``_``_^^^_^^_^_^^_^^_]]]^___^]^]]^^\\]\]\\]\]]\[[\]\ ]]\[\\ZZZ[\\[ \[ZZ[[[\[[[ZZ[ZZZYZYZZ[[ZYZYZYYZZYZZYYZYXYXYXYXYXWXWVVXXWWVWWXWXWVUTUVUTUVUVUUTUTSSTTSTTSSSRSSSTSRSRSSRSRRSR +SRQQRRQPQQP QRRQPPQQPPOPQPQP OOONNOOPOONOONMNMMMNNNMMMLMMNNMNMLMNMLLLMLKKLKLKJKJKKKJ KKKJJJKKKIJJIJIHIHIJJIIHGGHHHGGHGGGHGGGHGGFGGHGFFGGFGGGFGFGGF GGFEEEFEEEFEFE +DDEEEDEFFFEFFEEFEFFFUgebZPqqwHIPTLLWPDvE,2?4;k}}BB}~yussrpnpmjr>l@CEDFFC==@EHFDGFDBCDEA=>=pm8;DKPI8nk_BN_^3T4QOIGiVD5#%Yp]IP]nik`OMVgnqkYRPWZPJwU;/4FkHPLJNOKKOWZZ\^`ecacd^[ZZYXYXY\[[ZTSTRTWYZYUTUSTXSJoMA1N-F&+VOFA7F]XW/6=_jpL]=/$#(,-.../011101//001102344551.,*)((*+*)**)+.36;>:620,))*+*)+-/2456632342/.-*,--.-.//.--03200//00012236<"$%# "##%&%$#"##$%$#"!!"! !$%%&*.100/.-,+,,+,,,.01110.,-/0.--,+,-.-./.--,++*+--,+*+-c+)+.++-.-,,,/12/*"3-!,430101200.,+.11257765445557:321.00/00//-0332/,,01/265551(!!$$%&&')*.011102112X33234433342//,))+-.144113335214557536:<<;;86672+*01/-/03761&9?*//0/,26313577889:98635655d# * 0% """ "$!"&+-'"%$  " *.01272 ''&$!'17!%$!!70--($"! !! !"#%%%#!"" !$$ (-04664) !%%$&$$+,(.477A=3U. #")JXRPQ*+TSWVTSSUSOLMKJQ)? %DSO&*,,--+('*./-+--*)*+,)&&#?>!$+03+><6-6T7;#5.620I<*  CCBEDD@>??>=??ACDDD@@A@BDEDD@??>>A;3G.',*;3+'"+950&?CE2:#*    + + +   + :   + P !##""  !! ~}|}|}~}~}}~~}}}~}~}~}~}~}~}~}}~}~}~}~}~}~}}}~~~}~}}~~~~~}}~~ ~~~~~~}~}~~}~ κ憘ȼ¹ؿ˩݅¾ϳĽľÿū3Ȫףk6    +#'a{ɾӄҀž#7Ż˿㢺݊κyU5)%$&&%$$$%%%$$#%'''(('(('()*)))(('&%%%&%%&&%%$%%&%$$%%%$%$$$$#$# "#$$%%%$#$#$##$$##"#"##$#$$#""#"#$$#" !!!"""!!!"#"""!"#$#""!"! "!!!"! !!"#"!"!"! !!      !! !!       +  + CȺזۄ粌灃»˃сѨ󶰰ϻދʇ㇇Ķʒ򻹲åΧȝ΀¾¿BMWE976/!"&'+/+)&'*---+(+,(%&'*RN>4"*0/.0/-./NBB=0*3=GC?@===:?JC><:3(*12//235667898:::>=6758988:=?A?=?CISXSRUG58HJB51C287541,''*+-3^QLHFDB<<=<:;=??=:7641///2100243344436:::99@CGHA3/231044.'''('&)+/57:?@AA@AA@ ?>=<;<;;::99:9 89989889:9989899899989899:988988989:9 :99::99:999:9:98989898989:989:999:989:::9;:9 :::9::999:::9:9:;;:;:::;:99:9:::9:;:;::9:;:;;::;:::;::;;::;<;::;;;: ;;;::;<<<;<;<;<;<;<;;:;<<<; <;<<;;<<<;<=<;<;;<<<==<=<<<===<<;<=<==<=<=<= <<<=<<=<<=>=<=<<=>==>>>=>>?>>===> ===>??>==>==>=>=>?>?> ?@?>>???>>?>=>??>>???>?@@??@@???@?@?@A@ABAA@@AA@AAABAB AABABAAABCBBABCBCCABCBBDBBBCDDDCCCDCBBCD EEDDEDEDCD CDEDDEEDDCDEEEFEEEDFEDEEFFFGGGFFEFEFGFGFFGGFFGFGGHGHGHIHGHIIHHIJIIHIHHHIJIHIGJIIJJIHIIGdn`o=4MGIIFA>>><:75<><?=72-*'##$&%  &/79984354/-,--./032/18  ! :778; =;<=>"!=<;;:88868:8787765464320/11000/..///.g-,.19DEAACDDBD#%'(''$! 99:9;:52288655459:64451---,,+))++*,--..,,.-,,+,,.-../00011/01113100//1132//-+(%! !"#$$&3()()+))*,)''**+++-,,--.0137641/-+-/.//01110/01112568687630.02466656776779:;;:64537;<;989;";< !!!"##""#"!   7798 5666642247656555443113578:! 665443332 !B=73321011221121110002332210/01236:CA;57<>AA@OD\YPqJ^FSKKOPz?55Zuǀ}kcdcabbbcccbbcddefefgfghiihgggfdeeededdedeedcbcedccddeedcdcb1bbabbbedcbbcbbbcba``abaabcba`%a`ba```abaaabbaaa`__```aa`ba`abbbaa``_``___^ __^^_^]^_^_^__]\^_]]^]\]]^^]^]\]]\]\\[[[\]]]\\\]\[][[[ZZ\\[\\]\[ZZ[[[\[[\\ZZZ[2ZZZ[[ZYYZ[ZZ[ZZ[ZYYZZYYYXYYY[ZYXXXWWXYXXWWXXWXWWWVWV XXWVUVXXWVVUVUTUTTTUUUTTUTUUTTUUTSTUVUTSSSTTTUTSSRSSSTSSRRQQRSTSSRQPQQQRSRQPQP QPPPOOPPONNOQPQONNNOOPOMN +MNOMMMLLMML +MLMMLLMLKLML KLLLKLLLKLLKJJJIJJJKKJJIJJKKJKKKJKJIJJJIHI +HHGHIHHGHHGHHHGGFGHGGGHHGFGFGFGGFGFFGGFGGFFGGFEFFFEDDEDEDEFFEEEFFFGFCQ~wgcmiEvKKJGGCCHHD@?Et<'3@>DvQLGKLGB}|~vkovqdZZbjtd1! #$$&Ka{{?ADEEGGEFEDFGECDFEC?>>=sXDU;RWCZMKOVQ9PdEHW]X;1bylriK>,<2jTuG`s}wkRVqXLKJC[1;>!4\@BJQNIJNQTW\cidb\YW[_]XVY_\Z\[[YVSPONPT[_\\XRSUHfQB8;AL"'Psb\OlgRANL:5:8;E/( !$&('),..Z-///..--,..///0100112/-**)()()***+++,17;=;5.,+*+,+)),/1345556972...-*+0/--//-...,-.0330.,,./00013229"$%#"!"$&' &%#" !###$$#"#$&'&'),/1110.--../,+,.000.../0..--.0111.--,*)*,,--,+,-.,+**+*(')*,,,-./.,+***+,--./0///0221,% "*,,.11.//../30/24345675355.,,-/1110/12332/.-*+3858=:1+'&'*-/0.*)-/1521011451/1223352./22345754=565348988:;<;<=<8561+1552/263("%*.13222-*.010.-0332..022/26530#  .* ( #"!!($ (/3"! !  "(28314(&+%*"%!2.,**'$@ "  !"$''&&%" "$& + %#(/-)!"'*01'"&%"%'-49BÌC'L~ + iÄkb^/&4--+(%$!! ! + + +    +    + + #   +  +   (#&#"$$&$$ +  +     + !       +  +  + +  + +     + Y ).AB9N9S@F=@DFne+),MwܥNԅӃԄӄЅumPA?HF.Qf99865//330.04R&"(-1P^51'/23/*SUWRJMQOHBCHMR>  + + $?TNN(),,,-+,-/-*++*)'&&$>.'8(8:(4--277*6=(#?C@ACDDC@><<<>AHKHFB>AC4B0(#"&'#:GA?5LYD3&-/!#(&   +   ( + + + + + 0  b  !!! !"###"}|}|}~}}||}~~}}}~~}~}~}~~}~~~}~}~}~}}~}~}}~}}~}}~~~}~}~}~}~}~}~}}}~~ +~~}}~~ +~~~}~~~~~}}~~~~~}~~~ ɼȹŊͷG˾ýſǽ˔Q2- %#_8.I³۷۾ߪ +ұmZ=*&&%$%$$%%%&&&''('''()*)(''&&&%$%$$%%$$%&%$#$$###$$%$%%$$###$##$###$%%%$##$###$$# ""#""###$$$#""#"#"#"!"#"#$##""!"! !"!"!! !          4עڧ聃뎼̶ҳǓɨѦеżώǟαʪ灩땕ɂ̮٠֔÷ľÿ)`ķO2-(''(%#&&%(.-&!#),*++))*)'%%IFK())')'(,///..//+F>:@FLKRXVQL)07843 0*+/0/02467687\89;;76;>@@:57;==::@FLQTSPP=2=<<:50../.++.122123599888;==<>@BCDDEFFHKG=:9::;?C?5+*-241+%%(PKFIKM),/2256899=EPY^acbb^XY`fhgfdbb^X[fnurcUOSUUTSRTVWTRRQQTTRPPUVTY_`ZPGJRXTONPSUXYVXcpmodA@?@?@@A@?@?@ A@@@AA@@@A@@?@???@@A@@A@ +A@@A@@@?@A@A @@???@@A@A @??>=<<<;;:::989899989:9998889:9:98899988989889:9::989::9:9998989:989:9:989:::9:999:99::99::9;:9:99: +99::9:;::9:9:;:::;:9:;:;<;:;:;<;<;<;;;<;;<<;;<<;<;;< ==<;;<;;<;<;<;<=<<=<=<=<=<=<<=<<=<=>>>=>>==>>===>>>=>=>?>?>?>?>>?>?>?>?>?@@??@@@?@@?@@??@@?@@@A@A@@@AAA@ABBBABBBA BBABBAAABBAABCB CDCBCBBCCCDCBCCDDCBCDCDDDCCDCDDCDDDEEEDEDEDDDEDEEDE FFGGFFFGFEF GGFGGFFGGGHGF +GFFHHGGHHHGHIIHGHIHHGGHIHHHGGHIIHIHHHIIJJIIJJJHIIJI!HIKKKIGnuai5[KFJPRRLEFIOPIB:8>BCDF2DCDEHID>6/-+(%"   #'+04236660-*+,-,-.../028    >:7;=;9!#$!?=;9:;:99:9899764477666553221110/.,-.--,,--2=CBEHFEB@@!#$"!""#"987782/06 !24! 9;<9544322.%&+.013211120//011//0022110/01242101244220100//00//0/.,*)&&''I'%#!#%&'''))++(&&())((*--./0//11147640--,,-.-,-./0/000/02358877545564566674999889<=<;:<=:;==><99:<>?>979 !!!""!!  !!!88:?654345556667544454543332234336555679877!:9: "$K@50/0/1221322123332334321=23568974224:>JM{yeN=BTSLPJCcvUI2BFHFIHGD>:=Bm`lBBLRhd3% 3Oazh=C0;mK-UseP\dufj "BWlRYqyvmia_gfb[SGHNM\C)5+[DLIFJHGHNZac]VW\ZWWXY\]YZ\\YVTWXZWSUUTTVVY[][GoX=D*%),:ZK9*<]vu:SuNSg:XVB@@E?]&"$$"#%())+,---,,--++..0122022332/+)('&(('((*+,--/353/-**++,-,++.0211253//.+*,*-0.-..-...11.,,-..///00/03533>" !"#%'''&%$##!"""##$$##$$&'()'$$(+-/22/,*,-"+*-/1243210/-,-/010...---,,--,***+,+,---+**+&,--/110.+),02/-,.-)(+*&&')('(*-/250-25654//3553100//-.16775552.**.04<>8.)(,/01321/++,,+++,./121000///-04435564110/047965668:60157778:::;>=><83,-59;:751,,-,.0221240'(.1///257658797SA922  $!$  #"$#$*!"'&+.-(%!).221/ 0% #%!.---+)'('%!!!  + "!"$%%(*& v!#" ! !  !&*+*((')%#$),/," #(*'! " !#%)*/:EC|%<#$/ a ?& sÄ„ÄhĤcW)?0(*-/.*$&(,-'!  +   + +        + +  (!''*++)# +   +   +  +" + ~       + + + +  + + + +  !C"4XTH7,6HF?G?9Va?3'4oPل0Ѕ΅̄̈́nohUEAAELF2-8831^/69763KF,*QJde1-,,,./1/ZW[WJDELOUZL3- + *GOBE'''%&)-/1/.,'#&(>4@+-46J<= 1F[JO +Q,4OA1=EUJ9 ++>M9?OTPJIDCHGE?7/1436 9+0--1.-/4ADFCACC@@AACFIB1I7$'&#/#$:FB"3Q9:^C$53$),,%/ + + 2      ( +   ^ <  !" !! !##"!!!+}|}|}|}||}~}|}||}~~~}}}~}~}~}~}~}~}}~~}}~}~}}~}~}~}~}~}~ +~~}}~~~~ ~~~~~~~~~~~~~}~~~} ƽ̸邂y҉̻þFµs,+ +  +   *jµ񃒘󁌓߄݀ƾb»ͳ遜ýaP6)''%$%$%%$%&'(''(()()))((('&'&&%$%%$%$%%%%%$$$&''&&%$##$ +##$%$%%%$#$%%%$##"##$$###$$$%$$###$###""##$#"#"#!!!"#"#"#"! ##""!! !""!!!" !!!""! ! !!!    !    !!       +  +,~ݾɈڇ׳څ􃍎üԪ쯆䡃Ψٟ򃡮Žùƥ₪ݖϓÝԿͻᑻɣÿĿ.eƺ²+))%%,030..,)#$,0..0/1/*'#%('(-*'#$&&)+((*.01P<89=BEC;=GFN=HC2&%'*/16>::AC?620/1355-**-./245577689768:=@>947;;:866:5115=(,USX]I33H8O+'B72YTQOHHHFB@>=>>=98:=??>=<9884,%%),.,,0467789::89;?AAACDFIHIHHB5277675450122342/*MJDAFK))SQORTQRY__e7;CMSUURMJIGFHDNNLMMHC@GLNJHKOSQOLJJNQOOSSOMGHMQPNPSROKKOSY]YVX]`debgsqWC@@?@?@AA@AA@A@??@A@ A?@A@>>>?@@@A@@??@?@A@#??@ABBAA@@??AAABBBAAA?>>=<<;;::9:::989898889:88989:989 :9889998898989:98::9:9::99989::8889:9::999:9::99:::9:99::999:9:9:999:9: ;:;::99:999:;:999:9:9:9:;;;::;::;::;;::;:;:;:::;:;;<;:::;<;;;<<;<;<;<<==<=<<<==<<<;;;<<<=<==<<==<=<<==<===<=>=;<=<=>>=<<==>=<==>=&>>>==>>?>>>=>>>=>>>???>>>=>>>???>>>==>?>?>?>??>?@??>?>?@@??@@AAA@@??@@?@@@A@@AAA@ABBCCBAABBA@@@ABBAAABBBABC BCDDCDCDDCBCDCBCCDCDEDDCDEEDDE DDEFDDEEDEED EEFEFFEEFDEFEFEEFGFFFGFEFGGFGGFGFHGGHGGGFFHGHHHIIHGIIH'GHIHHHIIHHIHIIHIIIJHIIJJJIIIJIHIJIIJIIIJGIIHIhibc1-K?7446=FLPQRRMC@DJ')))((('%%&%%%C<640)&$! !*033364-*+-./1247998981/583.6:93!!!869;:;>== !"!;;<;::998998988::866797652121/--/0/.G,*).=EABCCA=<;::>@ !""!! :62.0"&$" "#! 52"&&"62320*%'+,,+)' ((*,..01112121L/../.122//210134320/.-..-,--/../2201/,++-.-,+***+,,-,)(),022/,+,.02210...,*+,/.-//00245(4410112443455334454333578889:<<=?< ! :9 !""#"! *!"! "!;7655332132135332221/220//124213567754 !f;9:@BC?820/,-/0345323325986534212244576644568('jjWWNEDEDCDEDCAzy{rrpp>g-"#%'%#-vIHw>CDCBFIJIJLIG}f[Q]?DD@A]dTHO:ME4%nh8)I>6=JJZQVB4S]wtjgb^VOOSYVPPVPIpA$:.!,RSQs5EPTRILW_f\WUPLRTUWWY[Z^_ZVUUUWUWXUVWVTUS}L99A6K"$#$)=,?s{nFbiNYEd?E,FVjA&$"#3/JTaJ;)))+--,+./,,,.00//./1210..--,)'()V+,-/0/.-,,+)+,-,,--.14651//4;:41.-,-,.100/...--,,---,+,-./00..//.036;!##"!!#%&%%&%%%&&%$$$#""#$%&&')*+*'(*,,/0.,(+-,--,,-.124)210.-.10.*+**,,,.-,,+))*,---.--,-...-,++*)6*+,--/0132+&$(-23/+&#(,.00/-042+&'()-50+.46651J&023442160/-/234567973.058?@2*),02112233320.,,-,+-013542*()+0442343247;866569:1.5759:;;<=850-/18<<;9668861-*+**,..(<&;HF>;?A;41*C4/)*--.W #! #"(! !"" 216:))%2 +%"421.*+*)('''&%#  !""#$%''(((#o&#!$"!!" $)().0"#" "$"!!%'+/18FGrlۇ슐  ? );1S¿¿DŽ@þbS& .#%**,..*# " +  + + + +   +  +%  + + +  2",+,-/*! + + +  + + + + +   +  +  + + +  + #8        + 0 + + + +   5DaOB0J0E`RV`euH5$/q $(1ׄAυ ɅɇʅV9%h[NJJHGED:0/696571() -& + + I^nG +5j*+1A`;>V&"=AQKGFCA=9:=B?67<4,< 762A,354,/8^?B;883169<>@BCCGHC@?@ACBEEB@@@?A;O0%%& + "GE<+@E5=,=%&1CGP   #3:E.1      + K # .  "#5 !!"#!"!!!+("#% }|}~}~}||}~~}|}|}|}|||~~~}}}~~}~}~}~ }}}~}}~~}~}}}~}~}~}~}}~~}~}~}~}~}~}~}~~~}~~~~ ~~~~~~~}~~~~~~~}~}~~}~}~} 񂈋ᳬ萱썒Ѐ̈́Ⲻּö򅍎񀐗>耈˿V,,  + U$Oĺu􂏕ȾрľƦ캀ӶTP9+'&&&%$%$%&&'())(('''()**)''&%%$$%%&&%%%$%%&%&%$%$%&%$#$#$%$#$###$##"##"""##"##"#"##$#""###"!"!!"#"""!"#"""! !         +#Zͬޓפģղե⬀׀ܗ﫽䴅轹ٯǐњ̀Є֟ʀ# +~\оž,-*$&-/02220-*'+0.+--*'$"%%')*.-+PFEFJOLI'+/2N328<@DJNMP\8HC2))+,././48677420048:=:1,.022357887889:<=>=>B=76878511225:7>+1/,VWT?2<3A[2.S[J;9BB@@>==>>>:899;=@=<;:;<<:.! %()*+)-15899:;;;<=>?@@ABBABAACCDCA?6.2689;2-12.,(%()IA>>@DL*--*((QRQOS-^aio=HLLMNMLLHDBCLDFGztw{y{~}@@>ADFEC?zEHJLNPPLJLPROPSQNMOPV]^^bffglplmr˯s\~EBAA@@@AA@@@?@@?@?@?@ ?@@@??@??@AA@A@A@A BBBAAA@??>==;:9898989898989:99::9:9:9:9:::9:9:9: 999:::99::999:9:99:::;:9:9::;:;: +;;;:;;::99; :9::;;::;;;99:;:;:;:;:;<<;<<;;;<;<<<;<<;;<;;<;;;<<;;<;<;< +;;<<;<<<;;<=< ===<==<<<= <===<<=<<=>>>=>=>>==>=>===>>=>==?>=?>???>>>?>?@?>>?>?>>>? >>???@@??@@@?@???@@@?@A@??@AABA @@BCBBAAABBABBABAABCBBBABBCCBBDDDCCCBBBCDDDCBDDCCCDCCCDCBCDCBCDCDEDE FFFEEEFFEFFFEF GFEEFFFGGGFGFGFGGHGHIHGGHIIHIJKJIJJIIJjIIIJKJJIEVJVY\VOKE8,+5H+-,--+)&%&$DC?; :::<<<;9568799889;:99865544431//./0J//...0/,,,4@A>=??<:9636:<@#!=941.05!"!""!"#$#!1#&'%"898640,&#%'(*,)+-,,,-./11346533101234456654321112221/.-/00/8-/1/.//269::95320//10.,,+*+/135420+)-000/.01110./0/..021/ +122234430./$0124555667654421136544467647:;;<<< ! !! !!""!!! !"##""!"#""#$###"! :86688  6520023310//000///./0122356675356796, =9334244102200355445556987886665554#33577]piR=fvZw{~~[-42M^[tofeeedcbcbdccdddef33gijiii4fhgeddeefgfeeedcdeedeefededccddcbcdccddbcdddcdcddcdcbc bcddccbbddccbbabbbccbbaccbbaaa`_`abcba`___``^^_`_^_a`_`_^_`_"^_^]^^]\]^^^]]^]^]\]]^]^^]^^]]\]\\]\]\\\]\\]]\\]\[[\\\[Z['\[\\[[\\[[[Z[\[[\\\[ZZZYYYZZYYYXXYYYZYYXWXWXXWUUVWVUUW VUUVVUVUUVUUUVUTUUTTUTVUUTTTSRRSTTSSSTSRRSSSRRQSTSRRQRQQP QPQPQQQRQPQQRRQQPOPONOOONONONMMMNMLMLMMLLKKLLKJKJKJJIJIJIJIJJIIJJJIHHIIHHIHIHGHGHHGFGHGGFGHGFFFEEFEFFFGFEEFEF EDDEEFFEFGFGFGFE^ruyz{ulef`RHGIGHHzJ5,t_WVQKD@CFH|}v{q^?, "$&%%*.8EEDA?>@GIHJJD=gV@7Gc?GXWLIF@=:2[XWO5/ !0N]1)BNJ9KqPYebXtib_]XYcfZRPSPKfsS7<<');?=QOIJSZ_[XRSUUVUTTQTYYZXXYZZ[YWTRSTV[\WPQNCCGd8B->D!)!&)**)+1+OUsoDVP|dE/8V\V;OOYbb:VZBJ18&'(*+,,-,-,+,-./.--.-,+,-..,++)(*+--.---+**+-/0/../368730136842/-,.../6./0///.-,-./134443222348 !!!##$%'('&$$%%%$##$$%$%%$#$'(()+-./0/---,,,--/0001344431/.///.-+++*,//-)%%(,.',,,-.---+)(&(***)+,,-.020)#$*.0/,++*)+-/T450-,+*'$&(,/1579/)364421123221110/./1369;;;9785.'"   + + +    +   #&..--+! + +  + + + +  + + + +  + +  +           % + + + +  G +%?OK;*G\LdrjonI!((Otj: M ߄ބ߄݀ʄ6ZO1KE?A@8224466Y2"&\Hahk:962.,XW-12^]ZVXTW\a^M9!  + #*a(&(...00+$:/#!/@'-97/-*%#"643- 5nbA -=g-,O9sZ57@GKB<9:60BI1))41,.6;><83689Q:9=@@BABCDEECB@?@ACFFB==9.-0D%&& 1>OD,:6P?)$86)//5;<%56"9         _   ;  "" ! !##!#" !,$}|}|}~}~}|}|}|}|}|}||}~~~|}~}~}~}~}~}~}~}}~}~}~}~}~}~}}}~~~~~~~~~~~~}~~~~}~~~}}~} ^û݄߀󎜕žߊܻоũѵDzaܻ񈒔òַl4+  + +  &_ʦ󀊖wuÿýó팼ȰJ6+)('''&&%&%%%&&&&')(())'%&%%%&&&$%&&&%%&&&%$%%&%&%&%$#$%$$###$$#$%%$$%$$#%$$#""#"!"!"""##"#"###"#"##"""# +""##$#""!"#""##$#"#"# "!!!  !  !     !!  !    !   !7ԲϚ޹ˢ֢ʠԀɴл񡇗ߎŸѷ̚ǔᡞЙĀ¾½Ŀ󁇆X1/155110210,((+,,((*)JECBAG%'*+++K7;GNN@8JXUE2/5;EPSW[`3?G8&"&+-.-/23465544;ACB=4./355689::877;;88>A97973017?H@@+522-QRJ5/E97KJWQ=34;<<;;=@BB8..368<@>=<=?AB@3$ #&'((%&1458756:<:;=<;<= <>>>ADDB;/-59m0+1-%#"!A>:204EQ*,,+,*&%IIJN-0`^blyELPOONNLGBBCrjp{|{|HHGFEGFFFFILOPPPLKMPSRSRSWZ\_][\agigfeb[kDAA@ +???@A@A@??@?@?@ABA@@AA@AAA@BA#BCBBCBBA@?>>><<;;:99:99989988988898989:98989:9:989:9:9::9:999:99:999:9::999:9:9:::9:::9:989::98:99889:::9:9 +:99:999:99:9:::9::;;:;;:;;:99;:;:;:;;:;;;:;:;;::99:::9;;::9:::9:;:9:;;::;;;<;;;:;;:;:;::;::;=;:;;<;:;<;<<;<;<;==<;<;;<=<<=<=<<;<;<;<=<<=<<==<=<==>=<=<=>=<=>?==>=>=>?>?>==>?>>==>?> ?>>?>??>???>?>=>??>>?@@?>>>?>?@@?>?>?@? @@@?@???@??@? +@@?@??@AA@A@BBAAABABCBBAABBBABBCCB CDCBBBCCBBBCDCDDCCDDBC DDDCCCDDEDEDEDEFFFEEFEFEEFGFGFGHHGGHGGH IIGGGFEGGHGHGH GHHHIIHHIHHIJIJKIIIJJJIIJIJJJLJIJJKJ giXVZ^VMJLC0%'2@FFC@?<:8556424531y69?"%('$C@=>>9.'$#$(/355442114787789::88:<< 3/1488:;850/567:<::;:;<=<::;;:;<;;:978:;;<<;:97544432100/-.//0/.//.B-/:C67::;>=:4368;=@@942.-3 $$$#$$#$%%%/1 $$%'&$" 988630.($%'(*,- +...02334223g22454347766;:8656444521000122101100134589877799:998643555654456665544431/..2677741//5887544433323200.-../13!434545533478878:;=;987867;=  !"##"#""#$""###"""!!"""!!#$#"! 98*789 97531000//.//00/2344227776;766  =3./1011123430036546779::;<;;<;:99989::9;&=NG4@I=jCn~tQ3./>mmfdeefefeeedd33eddcb2ddde3323fe3444hiki4gg34f334322eedeeffggfedddeee222d22eefggeedddcdddcdcccdede22dcccdcdddccbbcddcdccdddccbbcccbccbcbbba`_`abbbababa``ba`__``aa`aa`___`a_`a``a`_ `a`_^^_`_^^]^_]^_^]]\] ^^^][]]^]]^]^\]]]^^\\]]]\\]^]\\[[[\[\\\]\[[ZZYZ7[Z\ZYZ[ZY[ZYYYXYYZYYYZZZYXYXYXWWXYXXYXYYXWWXWWWXXXWVWXXWXXVWVVWWVVVWUUVUUVVUVUUVUVUUTTSUUTTTVVUVVUTUUTTTSSTTTSTTTSRSR(TSSSRRSRQRRRQQQPPQQQRSRQRQQPPOQPPQQPOPPOPO +NNOONOQRPONMNMLMMLMMKKLLMMLJKLLKKLLKKKLLKKJKKJJKJJKKKJJJKJJJIIJJJIJ IIHHHIHHHIHGHIIHGHGGGHFGHGHG$FFFGGEFEFFFEFFFEEFFEFFFEFFDDEDEEEFEFEFFGGGFJnqw~@@=fZ]dWIDCyRM$UXUSQJEEFGEFHCCKbQ&'&&&%#":VJFC@>;<~A>;;aKazDIFGNTN@<>aSZMA.&;=Tv~UN>"\wN8S|oXOjusthddbX^lpi\WOHQIf=&/>KoQ\YSUYXSQU[WUSOPRSUW\[XZ[\\YVVYZWWZ`_\YJweQCKQ?K;Zb17($*+,./.04TSeRXMI>mt_;7#FNJILO75;%#(**))*,++,+*)%,.-,+-/0.-/--//..,+,+**+..---.,*)*+)*-@..024863/..034100/./1./.../00.++.///.../34556655668"" ::"$$%&%$"-!#%$#$###$%%%&(*,-.-+*)*)+--//-,-.--.-./123432332/j00/..-+''-0/-'&),..--.//.,***(&%')+,,+**,/11,%$'),.,)&%'))*+../1220,)*,,(%'*-1567:8543320012342.-/010/147:< +;:91*-1.../h./123321///.//,*,-./00/./2322355425688766799679989:;9:8767:;97987885300220-.38?EII0,'**-/*$%*)*++(()&)+.% !$ %$ )*!$*+,.3"$ + + "'('!$"+0+c&%$+-4, "!%''% +   ! "$&$ !'v!('(+023,&&%'+-)) !##%'&&" "'*++-..2mx& (%$H< YKGF;0++$- $%#!!             # !/+-+$  ! + + +      :  (      + +   *8.(1*K6YdbpHn%%%7ܷz;U߄kхOÄGT_OOT**(A8:A:100U5.GEkx8862//021[[23\Y^0`^Y/5;%  + + +6+))'&$&NJ($#$;3FQ*-+,/31((+=01'! + + + ;_R[=*?bN*$9[]TK=9JPNOEDDD>DQZSD<3,0*7 '=/9736:9558;988668:=@CBBCDEECACFFDCEJIFD6SD7,/2%0.<4 99M>7810'EH4+,)')-$ (   +       4  @! !"##!! !#(,+}|}|}~}~}|}|}|}|}|}||}~~~}~} ~~~}}}~}}~}~}~}~}~}~}}~}~}~}~}~}~}~~~}~~~~}~~}~~~~}~~~}~}~~~} 󃇋ɀ˽پ耖̺ſƿ=ҽij耍ʲ͸m:/      + N#fȿビDZೃ̵ےL:,)((('&%%%$% &&')($#$$$%$%)$$%&''&&%&&&&&%%%%%&&'&%$$$%%%$%&%$%$#$#$$$%%$$%%%&&&%%$$#"#"!!!"!""##"#$# "###"""!!""# """##$##$#"###"   !!!    !!  !!  !    )mϵ؈Հ򔜩񗬵ɀЗҌ¸ۯ򯛠⌥䘔Ý颉ŀľ¾ÿþ󀉍ݹT.,.13/,,,-.,'&+..,SPOMKHCIV,---XOH?@KNJC=EG;/0;KW`346:>CD6,&"(---1578:>>99;;;>B:0143441/001345568;;;<967;?@>9?BAF+0)%EFRI69NfWCPMC<<>@@@BDFB>4),26;@BCA@BCEC;/" "%%#@?$,/,,./11134579;;:89:;==<>><5*,8=;;8*'//+*($Af7169?L*,+*))('(MFFHKIINQ[etCGHIKy{~v~FHHFFGIKKJHMPOMOPPPORVZ[]_[XYWZ[YZ`fhfb^XoBA@AAA@A@A@?@@?@A@A@?@?@ ??@@@A@AA@A@A#@AAA@AA@AAABBAAA@??>===<;;;:::98998988999888998998899::9:9:9:9:9:::98:989:9::99:9:9 :9:99:99:989:999:9:9:9:9:9:::99: ;;:::;:::99:;:9:;:;:;:;:;:;:;::;;:::;:;:;:; <<;;<<;;<:;<;;<;;<<;;;<<<=<;<;;<=<=<<<==<=<<<=<=<==<<=<<<=<=<<==<===<<<>=>>>==>===<=>==>?>?>?>??>?>?>?>?>?@??@@?>?@??@??@?@??@?@@?@?@A@?@BABBABAABBA@AABAAB +ABBABCCBCCBCBCCBBC DDCDDDCCBCEDC DCCDCCDCDDEDCCDEFEDE FFEDDDEFEFGFEEEFFEFFGGFFGFGFGFGGGHHHFEFGHHGHHGHGGGHGHIHGIJIHHIJJJKJKKJTKJKKKJJJKJJ~a`0XPHGID:5?EI('%D@><>AEECC#$#C"%%$%$#')&$">87;==;<:631//39<979A=;;:97310//22466789846<;;;::851210/././O.../00.1/'*6;:97553201124555778!#&$#$$%%'(!52! "##$&'#52.++*$$&(+-.121322134666777668889775456 997676554446X79:8787779:<<:99::9:::<99;;978;756:>=;;<:6222323444311232011.-..,./../001232212123468757778899<<;<=>>= !!! !!""##""$%$$#"!!"##!!"!"##""#"! 7798 ! ;7410/..//0001345689988656777 857; !""! ;;6/*+/110123567630168:;<;;=?@@AAA@?>>===>?A'3Ige[8-3U^^g;7/@ioheefeefe22de3e2223ededdeef34gf3445543Geeddde3fefefedeefffe22eee2feef322e2e2dde22eeefeed2edcdddeddedcccddeecbbc +ddcdedeeddc-ddccdccbccbabbaabcbbbacccbbcbbcca`abba`aa`aa`abba_`a_ +``_``___``_ ^^^__^^]^^__^]]^]^``_^]^]^]\,]]^]]]\\Z[\[\]][\]\]]\\\[[\\\[ZZZ[[Z[[ZZYZZZYXYYYZZYXXYYYXWXYYXYYXYYXXWWWXWXXWXXXWWWVVWWWXWWVVWVUUTUVUUVVUVUVVUUTSTSTUUTSSRRSRSSRSR +QQQRQRSRQQR QRRQQPQQPQPOPOPONNONNOONNNMMNMMMNNNMNLLMMMNMLMLKLMKJKLKKLKJKKJKJJKJJJIIJJJIJIJIHHIHHHIHGHHGGGHHGFFFGGHHGGFG FFEFFFEEFEFEEEFEFFFEEFGFEEfbwrxADBu\W[`V@b8+,6UROLGFGHECEDDCCDCEHGHIIJFEz)#&)($!'4nZ\ZWQE9?RMNRONMAABBGEECA9?&4MMFT_gik?Y~RS]gfEr|Ugbfs}{~UgZH,%.TADBKTX\^_a^ZTOMRWWX[WQNTYZ\YUTUTRUX[[XVWWLtDE(#& /'1C@q9.'&'+<&FB'\DO^dLPDMXSzM544JSA\1&9)=8+--++*,-,,-*/.,,..11121/--,--,,-,,-+*,+,,-.-,+)()*''))+ ,-/44/,--+.0/0/./0/-,,-'..-/124666778#&"<8: "$&&$#  "#%%$$$#$%'()+*,.-.--,+,/10,,+-/0012120/..///../.,*()*+.---.-.-..--.-,*)('((()++*(*.131(#%)++*('')*,-././//120.,*&!%(*12./8738:74332200012430/.../0126:;<=<<84,)-0/.-. /010112233430.,,.1/.0021012102445 6778789:<979865334422554568%99;=<621131,ROI4*+*+.0,%%**))($%**+/0W+(&$#!*1,&#%"&-3"! "&&""$#""%] "" !"#,'+>6)1.&!!"#$&'*,'! + + +   "!! ! !$&-(()*))++("%*'#')')"%')&$%$$#!"%)***),c´6P'=!  3 U¾ąȆ8øbQ%@7.(($#%#"!        %   !! + + '  + + +     #  F        +< +   )(><3"5ANypumO*)'@ɰ 4+F|Є&˄bcXKN+-,J75:>8*@#!*@_<97548=>@D@;9?CDEDA@A@?HCFHHECB@7O*(!*$C! 7+/5?43+3:6H()0#-         +  +     +  U  !" !  *)(}|}|}~}|}|}|}|}||}~~~}}}~}~}~~~}~}~~}}~}~}~}~}~}~}~}~}~}~~~}}}~}~}~}~}~}~}~}~  ~~~~~}~~~}~}}~~~}~}~}~~~} 灋򁇇üǷ°:ꃑ84 + +   IWoфπľHļK=/)'((&%$$$$%%&''))()'( &&%&%%%%&%&%%&%%%&&%$%$$%%$$$%%&&%%&%$%$$%%&$$$#"#"#"#""#"# $$#$$##"""##"#" +!!"##""!!!#$$#!!"!!"!    !!   ! !"!   !!    +    =ͤߚûŻɵ̠ñں߸ثƶ㳈˷٣ׁ¿ÿļ½T?Ǽ9+,-/.*&&+01,$ *.-,(NKHKGC)/0..-SPJB=<=>@?86=I[2455667;?@3+-023589;>@BB>;<=@EQ+JA@@A?<:840*%%-4:842599:=<98:7:=;=BC>="')+,LBGRJINJIIGHGFHJF;221124<;:0*/0-++)" "ECFQ+-.--,('&&OMJGDDFIP^k:?AA|zvzFIJJKKMONKKPONONOPTWZ[^^[WY\[XZ\\aff`]ZhA@@@ABAA@AAA@@@A@+A@@@?@A@@?@A@?@???@?@@???@@@AAA@AAA@@@AA@@@A@A@AAABAAA@BBAA@???==<<<;:::99:989899888989:89::989:9::998999::99989 899:::99:9889:9 :::99:99:9:9:9 ::99::9::9 :;:9:;:::9:9:;:;:;:;:;:9:::;:;:999:::9:::;:::;::;::;:::;;:;:;;:;<;:;<;<<:;<;:;<;;<<;<;<;<=<=<==<==< ==<<;;<=<=<=>=>=<==>===>>?>===>=>>>==> ?>??>=>>?>#?>>>=>>?>?>>>??>>?>>>??>>>???@@??>>?>?>???@???@@???>?@@?@?@A@@ABA@AABBAABAAA@ABBBAAABBABBABCBCBCBBCDCCDDCDCD +CCDEDEDEEED EDEFEFEDDEDEFEFGFFFEFFEEEFFEFGGFFFGFFGGGFGGFGFGFGGHGFHIHHIIHIHIIHHIHIHHHIIIHIJJHIJIIJJIIJIAJJJIJIIJIIIJJIIJKKKJJKJJJLKJJIHId_[UOGEFFDD&&IFCDE&GBF''(''')(&%!$"!"%%?8=@;8;= ""$$!82158::::::9: <;865310-)-4898646;=<;:;;8897689:;<;:::89:;<::987976630/2420,.///..,.//01/,-.---/-$',05?I=543100//49?!!78!"! "#&'&N 11 "#"$$%&%"4/-**+(#$'+--01235543236667666776896566676336769:(879;<<<:978999899; <::<=?<(;9;;843000100/101568:941220.+,//00011/0/03///0010121234568;:99;=<;<>>=<> ";:89;: #$%%&%$$$#" "#"##"##! 8869:9866:  <962..00124445665532576678889989:<;888:=5*&('$#%'(++*'! $),.00/01469:;>>44;?=>??AC+DCABB@@CCHX<<945?D>J_^~U`66;Td\lgfgff333f3$fgf2232dee2egfe23344gh3fg45jjhiig333fe3eefff3e222333fee3gggfff332 12e2ddd2eddeddeeddceeccbcdcdffddcbdfefeeedccdcccdbccaaab+cccbcdccb``aabccbaaa`aaba`aa`aa`aaabba```aa` aa_^___^__^^_]^_^^^]^`^^^_^^_^^]i^]]]\\^_^_]\[\]]^^^\\]\]]\\[]]Z[\\[[\]\\[[\\[\\\[Z[[ZZ[[ZYYYZZ[ZZZY[[ZYYYXXXYWWYZZYYYXWXXWXXXYXWWXWWXXWWXWVUUVWUUVWUW VVUUUTUVVUTUUTSTTSSTSRSSSR QRSSSRQQRRSSRQQQRQRQPQP QRQOPQQQPPPOPONNNMNONNMNNONNNMMNNNM +NMNMMLLMMMLKKKLKLLKKKJJLMLKKLKKLKJKKLLLKJIKJJIJJIJJIHIIIJIHGHIIIHHHIIIHGHGIHGGFGFFGFEFGGFEFGFGFEFE DDEFFFEFFEDEFFEEFGHGGENwusyDEz\XX\IDUC8WZ_UNJEEFCDMEEDFGIJONLKHEE@D1"$%%%#!-)gspr{{e\UC=@RdWJEB>?A_<@JHFJ]u~rHIA?OSTXcaea_dj|~u~zzRyF (548tPQKRT\b]VYWQMMLJNTWW^^VVZZ[^XTSSUXYZ\]\LvTL:$$'(&!9=OX1VN4+&&(.0*58:U`e|}vMXH=H-PHZEON:!!+,fJ0+--..053'(310//132-.-..-,+,)''()*,-*)-.)%&&(('')**++,.0/.+))***,/0/p01210/---+*+./-.0346768:>#&&";879=!$%$#! "! !#%$#$&&(*+,)$%(),+,./241.,*-...0001121110/..---.//.)),.*((,-.0/.S-./.-.-,*((&%'*+,+**-./,)(+..,(&)-..///0.-,-.01/-,*%$*..130022369<8542//12111221.,.0|17=@>:96/**-.-/1201//132243432,+,/0044343321/-.035568889:;;;<>>7565422000./-)*01./1466687/I8+*(%((,/.+),02432330.-*)&"$),*,-%#"".,&(0!#&')(&$$%%%+!  "%" +"'2,+/,++*+)),.'   +  + %#" !"#! ! !#'+,,+**('''p%%&/0(#$''&!$%'&$%&%"#&%',*'%)^w텐0 >l(A  3$6½SȄNnPE;5,(&%$#" !%& !  +  + +   7      )" + +   + +  + +  ?  + + + /(         0 .%&+"'LNg}Le?()0\ + &/Є"ɄɄ$Ą)!dNINS,.O:56;-'34-@esAC<74100/]182]d21234489763/0)" + + + DYLDCGMM>94'#%3?7.*'%'&2%/100=QUOGVYZU+,&%2679A@B?>BFTUNXf`\_]UU][]fwAvlh^_'%H01/58>B<587422447=@@DE@@CDFFC@@@BFFHKLE5J0-  +(.$22  "&9>BMIG49+#%/&)7,1(  +?)  K   +    +  +     C    &!!""#$# #"$$##$" }|}|}~}~}|}|}|}|||~~~}~}~}}}~}~}~}~}~~~}}~}~}~}~}~}~}~ +}~}}}~~~}}~}~}~~}}}~}~}}~~~~}~~~~}~~}~}~~~~~}~}~}~}~~~} B󊘔Ⱦȸʧ텋pĴ¸ހÿĴY3    +&^߅Ŀǿ􅒔;Ŀ"ܵրǑE1*))''% +$%%)&%%%&&%%&%$%$% &%%$$##$%$$$%&'&&%#"""##"#" #""#$###""###$#"#"!!!"!!"#""!"!"!!""#"!"! ! ! ! !!!  !  !    #Qػ㢹ܸⳡ܄㞴̀⩯鮫ۛ߰ϊƸňŻިԺ¾"N%).32.+')24,GE()%E@FKLNKF*11/,**)GEB>@@BCBS1568:;::<;7312247768879;===???BDCBAAA838A@3+./)&%%*.365589;<=ADB??@;7@DB@E(+-.3:ZBLUIHHGMSTPNNF:3432237=A@??<70*&&"!*.3@OSUVUMHC4**'EELLBD*,)((*,/55441,4;:;<=?2+/10--,# $A56D(,.-*(%&%%'((NLJLMV269;;={7toryxzIIJKJKMMLKJJORPPRVURS\^]XWZ`f]VTRMP^a[X\|EBABAABBA@A@AA@A@?@A@@@AA@A@A@ABA@???=<;<<:;;9:9:9899989:9:989899989::999::9:9:989:9:9:9:9::9::9 89:;:99:::9::9:9:9:9:;;;:9:;:98999:999::;:;:;:::;:;:;;;:9:;:;:;:::9;:::;:;<;;:;:;<;<; <<<;<<;<;<<;<;<<<;<;<=<<<;<;<<=<<=<=<<<;<<<=<<<===<<<==<=<=<=<<===<=>>===>==>?>==>?>?>>>??>?>?>>???>>>?>>??>>>?>>?>>?>?@@??>>??@??@???@?@@AA@A@ABAABBABAABABCBBBAABCCBABBBCCBBBCCCBBCCCBCDCCCDDCCCDCCDCDDDEDDEDDDEDDEDDDEEDE FEFEDEEFEFFEFGFFGFEF +GGGFFFGHHGF GFFFGFFFGHHHGH GGHIIHHHIH IIHHHIHGHIIJIJIHIIJIIJJIIHHIJJIJKJKJJKKJIJJJKJKJEIJJFd{k53.LDEECA@?<778?HCC%&%# <<;:99:85114863349>!"!  !#$%"84347::98789<;<:9887865543-,//1231058986787899879::;99;<<;:9:<;9:87765544365/+-/00/.-,**,-,,-.../10,+-027><620133347;?B#":569;P!#"30#$$$%''%"842.++&$'+,/241/022324 8777764359979<9:5578 !!;98:;:8651---/.,-././100542/./001.,,,-0/^-,,-..,**,.//0//0/02347755776577899:9:::<=<<  !#$%%$$%%''&%$$##""!!!"###"!!!"#$$#! !!! .<=;;< !!"#!9;93255455445689988753.*&&*'$#$$&' ((('%$##%(*-01=356799;?DB;:?CDEEDEEFFDCCB@ABDGJY7:9?Wm\>lYT?410,142112579971OK,11,,0-M>3-+**+*)%&-233589:82/102321/+,*'&+-(/%#!""" "! ) !$&&&'&&''&$! +  "#$%'" "!!$! "1$,3++**-230.,%  + +)**+)$!""P   +  $#!" "**--*+($"" "%$%)(++"$%#"#')"! (*&'.wЄ!y& * "iNÄ.ʅZ²c)$/(()&#! $    + +  + +    +  (  C  + + +  + + + +  +    + + + + +;  + +       c&!3B6&KGrGh*#"-Ga m&}΄ZÇ ;`KJO,03/B42/>-@kymP@+!%H-=0?414797774357:;=??;<=<@AAC@@?>@BEB<1M6$/+ #)  9@?@CIT3:>>@B@?@@;6226989988<<;?BCDEB@CC<992+*)).75-)'%$$$%*.7=>;94/'!#)++-7CN]aUNMHFIQ.K)"'JCLOEKOLDCFM,.01/.0787:=;:=520.--/,% ?;8B'+-.+&%&'')*-,)NNPMQ,3789={Mzvx|~IHHJKLMNMIKLOSURRX[WW_efegjlgWINMJQY[XBBBAAABABBAAABACBBAABBA@@A@AA@A@ABA@?@@@AA@ABBAB@@@AAA@AAA@A@ABBAAABAA???=;:99:998898989 +889888988898999898998:989::8998899:9::989:9:989 :::9899989:9:::99:9 :::9:9:99::9:999:989:9:::9: 99:99:::;:9: +99::;;;::9: 9:::;;::;:9::9:;:;:9:::;;:; :::;::;;:99:; :;;;::;:;;;:;;<;;<<;<<;;<<;<; <<<;;;<<<=<;<=< ;<<<;<=<;;;<=<=< ;;<<<=<<<==<<=<==<=<=>=<=<=<=>>===>>===>>>=>?>?>?=>? >>>??>>?>?>?@?>>?>>>?@?>>?@?>>??@@??@??>>>?@?@?@@? @A@@A@@@A@@@ABAA@AA@@AB CBBCCBBCCBBBCBCBABBABCBBCCCBCBC DDCCDDCBCDEEDDEDEDEDEFEEFFEDEFFFGGFEEGFFFGFGGHGFG HHGGGHHHGHIH GHGIJJHHIHIIJJIJIIIJKJIJ IJJIIIHHJJJKJKLJUKKKJJLKJIHnv=7.LGHIEBAAA<419<;=<:9997546742123564315<#&$" "#$$$#!;  ;88:9998898744455441./0//24567897677989:::9889::888676668988751,-//00110,)**+,../01/-2.,23:BC?8667766:;>B"$!8103631!#$#! 82/)%&&)+,,,..//.022657  ""  +7643469:B;89: !""##" !! <76/,,166543//111210/-,+,-+++,**)*(*,.+('&'),01101/.//01001212312335434555678:;= !"###!""#"#$%%$###$##$""! !$&%$##$#""!! =<<:998: !!"""# 88 7224550*('(('&%##""!! #%&''(*)(&$$$&&%%(.24368:9978788;@@AFHHGDDDEFEDCCCDDFIJM2:W3fTxJqPhp48On|_mjhfef3 fd333defeef3f44334h432ee2eefe3233ff3gff3gfef232322dded22343ee3feeddef23gfedd2dddeddcbc +bbbccbbcccdedcd +bbaa`aabbbcbaab +aaaba``aaa`_ ^___`_^`_^^_`__^^__^]^^^__^_^]^__^^^]^]]\\]]\\\]^]]\\[\\]\[\[Z[\ZYZYYZYYZYYZ[Z[\[YX1YZYXYWXXWXXWXXWWWXWWXWXXWVVUVWWXWVVVUUVUUWUUUVWWVUTTVVUUVWTTUSTUUUTSSRRSTSTSRRSTTSRSTTSSSRQSSRSRQPQPOPQPQPPOPOPQPPOPONONPOOPONOONMLNMNMNNNMMLMLMLKLLKKKLK +LKJJJKJJJIJ!KKKJKKJIHJIIJJKJJJIHIJIIIJIJJJIIIHGHGFFGHHGFGFEEGGFFFEEFEEFEEFFGEEEDEFEFDDEFE]hvz~IE|fM?h|OPQLFIJIJLJKNMHEDDCEHKDEDFJIJJBiU#!$# "BH@nagd_5\<6"H;GH@ABCDBDyyuplk<@ACA@C>>IE?FKNVWPNQUXWUX[^\[ab]\\]`_X]ov|N!9C#,hUr5Q_RRVWWROOMMQTUUTY_ZVWUUTTWVVVUWYRx>*>@919).-,*)''(+'`^&)T0B?D~;tnO*>F4.OV-4C+6_NE& *.10-./-+)()*''**(')((*,134/--,+)*+,-/1340.,*))),/,-021334320`//001112368668?$'(%#""!"$%$#""$#"""$&'&%$$%'()*()-/010/+&#" &*++,-,-0002331.+,,+-1100/..//,*()*+M*+-/010/.,+,,.-,+)&"'*&&(+-+*+*,-,-+&&+.0210/-.//.01230//10/11-*(/60-/128:551-/01-+../1100235896495001--/113h20/000110/0120.//257765443323787885789::983')03349@D?_H=51*+A*>-,-,,+)&%*,,,+.146;=;9533751347:93,&)..*%"! "$ "' ! !#$$'**+,(''$  +  !%(*)# &(" %".551.-/133.%   + (12)"!" #&)##&$$)  $##!!+*+)%" ;##(*+.20$)***+*&"(+*MZvH"3V -$(1„„ Ą+ʄ ˄ʄ*ƹn0'0+,.*&$#"( + + +  + + +    + +  =   + +   + +     + + + + + + +` + + + +   7      !4&90VgCUo=(>a$1P-Ӆ +΅τʄ7Ç¿kf]HKOS1/UD4+DV9985f2465676697310//145001268lk86.E,  +%+&D;D>13!%,#+,'()+-++PJKGEC@$'(+*)*''.*&*/2661148::9===A@:?OeWS/! +F5@"6>67;;<867668;<==BFA>@ACBADBA@>AA8K$'"  E>7  %)L1<824:;6/J7&!$3,+*I">7'!%!"#:*"     +y    +       !!! !!! #(*%4# $',0/-)(),($$$(*(!}|}}}|}|}~}~}|}|}|}|}|}~~}}~~~}~}~}~}~}~}~}~}~}~}~}~}~}~}}~~~} ~~}~~~}~~~~}~~~~~}~}~}~~~}~}~~}~} 邆フǺϿ˰ƾ淜øɿƹ4ſŭ᷷64 %ZҀ( iĹŰƾ*燜H:-*))**)((( %&&&&%%'$%%%&&%$%$$##$##$$$#$#$&&%$###$#"#""###"#"##""!"###$#"!"""!!"!!!"##"""!! !"#"!! ! ! ! !   !!"!   !     + $r屓ْ̣ᒮ㑝򅌍dz򘝡䷋泤߆ݴɓ򇖢ѩʳٽшţʀȒǾ,03/-+*,)&$FD>;EJE@D(*'A<+000/-TFBCILQ/6@ABDHKLJE@>:9=7+))+)*0:91,'$%&%).17?@=;9;BHKLKIF><;;BCCFINQMDBHLRWSHQSRQQX//-O<,#&2677658?=741/*##',6DR]2XNF?>:7:E(F."$K@>FFDECCCEJNQV..-169:i8;6/.+($'+("  "'-./,(')*()+,+)()*+.133579<@EIIFFJKJJKKJKQRSTRQW[\`hmlieccbYJIPS\ee`Y`A@A@AABBBAABABCBBBABBA +BBABAABBCCBA@ AAA@@AAA@A BA@@@A@A@A@@@AAB A@@>=<;;;:9::989 ::9988899889 ::99988989::8999:9:9 ::999:99:99: +99::999:::9: 9:999::999:;:9:::9:::9:9:;:;:;:9:;:;:;:;:::;:;: +;::;;:::;:;:; <;;<;;;<<;;;<;:;<;<<;:;;:;<<;;;<;<;<;;<;<;<;<<<;<=<<<=<===<<= <==<;<>=<=>==>==<<<=>===>>>===>>>===>>>==>?>>=>>>?>??>>>?@@???>>>?>>??>>>? >>??>??@@?>?>?>>>??@?@@@???@@?@@?@?@@@AA@A@ABCCBBABCBCBC DDCCCBCCDCBCBCCCDCCDEDCDDDCDCDEDDEDDEEFEEEFFFEFEFFEEEFGFEFGGGFGGHHGHHGFGHGHGHHHIJIHJIJJJIIJKKIJIIJIJKJKKJKJKJKPJJIm~s;:6-PMJIHIMIB;624?=<=<::9;==<:8;<<<;:67:<=!# !"###""! 98K98:;;98889::99868875552../.-03667877899988998875567787668;;:7630.*)+-./...-,,*+/0/3?6-35:ADB;89:9:>@??!""?8887541223 ,73/,*))'*,./012110234445545( 7 ! "#%&%%%"@;64547:98842.,,+('('&&$$%$%%$%%&%')(((**++*+-,,-.//./023223565675357::<;<>=! ""!!"#""$$$#$%%$###" #$$$##$$##$$$#"! <<, "#" 99 ## :862,&#"#$$%'(().3300/&!!""$&%%$&E'(,*)+/0136678644457;@DDFHGFEDCBCCEGGJLMMMScgUXhTUctyWL,AWag}Vfjhhgfg333443232233323454 333f233ffg3f343f3332f332223e223 4333f3ff3222ed23d22dddeedc2cccdccaaabdcd eddcccdcbbbab aaabaaabcccb abaaa`aaa_`a`a`a```__`__`a`__`_`_^^__^]^_^^_^__^]^]^^_^^^_^^]]\]\][\\\[\[Z[[Z[ZZ[[ZZYZYYZYZ[Z[ZYYYWXXWXYXYZZYX+YYYXWXXXYXXWWXXXWWXWWVWVVUWVUVVUUUVWVUUUVVUVUUVVUUTUTSTTTSSTSRSR SSSRSRRQQRRRSRQQPPQRQRQOPPQQP +OPPQQPOOOPOPPOOPONNMMMNMNMLMLM +LMLMMMLLLKLKLKJKKJ KJJIIJJJKKJJIJJJIIIHHIJJJIHGHGHGGGFGHGFGFFEFFGFEFEEEDDEFFEEFFFEFFFEDEjFGFGGDnuwy{EKFvXDFBIVTPPONLJIHJHHKIGIJGFHJHGHIEHNLKJIu:,<')#30.)&TGwuAFByvurkn>AABBHHCFGBBEIOPMMLMNPPRSUWYYX[]]\aaZ[Wp3&%($2tQSXZ[VUVRPTYWUWX\YUVWTPPRSTVY^]UOJ@Y=,NK1'" =9AJ(D57>B 4*NG"(CY80aMSXNHFA:o`J\E_YXSEd+B[KLK3J*;B*.BVjWC8GN1+?*'')*+,*'$#$')++**,+* ++-25421/-+* ,,,-/232---*+...0121//../021..-.01333234458="%&%#""!#%&%%$" !!"#$'('%%&'()+,*(',10/-**+)&"!$&'*+++,*)*++,+)+--/110110//-*((*+,--,+)+///.-,*+-.,)&$$')*(%%(+,,,*'''%##&)-/0110010/022110//00/,()/40,-057510/.*-02356434567753100///02224466554231/.,+,/0//2433587776532357787424443330+3;=;6cTA920220*&(&!"'('(''(%'/2467645899877799989::6,%"(..+( %"$'!$'+,,.//%! #&&'),01/*$"  + + +  $(*+)$!""!$&()& #&+10|011/-2*  )0-'! +##!"!!#$'(*- + + *"!'02022g"%,/.,)'%$ &++,,c񉌏    \C%!#F¿Å]ƺq/-(41.,**,(    + +  +     +       +      + + + #    +     !&31(,65]=L]]=,->L^9`_ބ +ۄ_˄8Ifr^LNO.51P9-216><:;;:8755766964563145423426=;:7f2G +  ,*'+?%$"4)3(@AJ'('HG(,)IKKHAC')..*++,..*(+/341001356789:;;;<>>>BB>?;G I89:<>;:<:8<@?>?@CB??@><=?@@BEGE=61(4!.)!% ! +*%(58S27;3.-)$D>AA@@AACB@DHJMMI?219FF2)&)+).:=5-('()))04468:89?CDJONKJF>:87;:=KVTOG@CDHOSSQPQT.10VA4.+-278:<=FE1.33,@8&.2GW.WPKD?>D@:>HM;&'.*H=8BEHKIKLKHFGJO*-5:;;<<867,)'$'%" #),,,020,-.,..-,--,,/1/246579;>CHEB3JGCCFHHGGHKNRUUUTUY][]df][]][WVW\ekllb[YĈu@ABAAABBABCBBAA@@A @A@ABBAAABABAAABA@A@ +AABBBAA@AA@$?@@A@@A@AACCCBBA@?>=<<;;:9:99::99:::9 88899::989 :98999899989: 999:9:999:99:9:9::999::9:9:9:9:99:9:9:9;:9:9:999:9::999:9:99::9::99:::;;:;;;:9:;:!;:::;:;;:::9:::9:;:9::;;:::9:;::;: ;;99:::;;:;;:;;;:;;::;<<;;<<;<<;<;;<=<;<;;:;;;<<;;==;;;<<;:;<;;;==<;<;< +==<;<<;;<=<==;<;<<=<;< ==<<>><<==<=>===<<=<<=<===>>=>==??=>>>=>>=>?>>?>==>?>>>=>=>?>>>???>>?&>?>??>???>??>?>>?@?>?@@@?>??>>??>>@??>?@?>@AA@@@?@AB +A@AAA@ABBBA@ABABBACCBCBDCDCBBCDCDCDDCBCDEDCDDEDDEFEDEEEFFFEFFFEFGFEEEFGHGFEEEFFGFGGGHGGHHGHGGHGGHHGGGHHHGHGHIHHHIIHHIHIIJJIJIJJJIJKJJJKKJJKJKJKKJJKLLKJ]Itmokf1XRNKO,-)G;00MH@@@?@=>!B""CBC!"""A>=;:"#" "##""!!! 866::98898885588978#754411001101/-/355457766886788766568@9::9754440-*%(.0-,--,+-.,,+*,>Q5#*09=<877:?=989:?!  !!963134&651..-+(()+-00/1311232123344346436567876534;:8 !!"""! "$#!>==<979:;===;:8753.,'%%#$&%%%$$#%$$$%&&'(''(& '')***+,,-./0024456778787889889::<=><> !! !! !"###$#"$$##$$##$""!! !#$#$%&&&'&|$"!<< !"#! #!;773-**),/,+*)+,,,.,+//$! !%''()**+.283**,-0/../0001246:@FFEGGGEFFGJKLNNPQRRSVOR_knu}[E+Fammopnjjih434!344334343334432334343343445445444544hh443334433443f23hg3444323fef33ff3ef34fffe2dede2ede23334333433321222dd2dd2112cc1bc2dd2eedcddeeddcbbbc%babb`abcbccbcccbabcbaa```_`a`bca``aa_`_ `aaa`a`__``_`_^_]^__`_^_]^^] ^]]^^]]]^^]]^]\\]]\\[[[\[\[\[\[[\\\[ZYYZ[[ZY[\ZZZ[ZYYZZYXXWXXYXXYZYXXYZYYXYXXWVWVWWV WVVVWWVVVUVWUSTUVUTSTUTTUUSTTTSTUTUSSTSRRSRSRRRQRSSSR SSSRRQQQRRRQPQPPQQPPOPPOPPOPOPQPPPONOONNPPONOONNOONNMNOONMNM LMNMKLMMLKLMLKLLKKLKLLLKJKKJKKJKJIJIJIJIIIHIIIHIJIHIJIHHIHGHGGHG FFGGFFGFFGFFEF +EGGFFEFFEEF +EEFEECEEFEDFFEGFFFC_j~w{~IQ]EHKJMOOSTUTPKJGLQRMILLIHHHJIKLKLKKLHXJ?PFG23+)!<;3*"$CQgLLdoxb52lif=Gxj?KAtA?_NCFUTKY\Fk`hhGGJP^ET]J1fkY;I=EB"CriW].;,1$;@('(*M./,)((&&())**+)(()**+,010-/20)&%''(*)+041///.,+)))(*-.00112/../102002100135774229!$&&%#"#%&&%&&%##!%""#()('%&(*+--)&&*---../-+*'$!"#&&'()(&''),G-//---)&'*-//.-+)*+.10.,+++,*'%%&()((('&(+*(''%$%'&'),/..//.-./..02121107.-,)%$+/122343110/.000/---,/224788765550,-0232112331334542.,,,-/0345556Q4332000120..-.0135>@<;eI7211232021.("#$$&*'%%&(+('07744534:<>A>:64887651.)$!%,.++#(# $/4+(0;<:-$"!!""!"##$$#'+/12/"$# +  + + ")+-/,%!'.+)%!!"'-021/./-"#-,(# "  !#%(%$&'%#%(- !"! + "!$,,>-./1- #$&+,%$%$! &(*+%$)eQ6'Y_Z¿Äńuƿuh[P#<61.1#(#    + + + + + + + +      5    ,  + + + +    + + +      + + + + + + +A + + +  {   6 "#&+-)1S@xQUZ];#.BQ\{$  .Wׄֆք3ʅDQÿ¿¿iaNOQ17[?0366799:;==:753f9?>8687432366788978:6d\6,')"  "4I40;BF6@=;&0NC)1*K)(&E@%++().3.+,*./+*++.10./38;98874443127971;# 2=6FC?@A;?E@==?CKIFCB?@AAA?>>AEI@1A'/+%+,,."+"$! #;)%13N/B4,&("%F<+!!    5    #  + +     P%$5(! "##%(&',-02.+'$('&&% }|}}}|}|}~}~}|}~}|}|}||}~~~}~}~}~}~~}}}~}~}~}~}~}~}~~}~}~}~}~}~}~~  ~~}~~~}}~~}}}~~~}~}~~}~~} 󁁁غĹľİبցĻ2퇕ô>  +   !LۃۀýNļŽԾ☳ľ +J:,)*((( & '('&%$&&&&$&&%$#$###"#"""""$$$%&&%#$#" ###"##""##$#" ##"#"##"!! !"##"! !" +!"!! !! ! !           #P񲛗ꆏֵܷГ烄Ӡ̟÷얙җҷϪƐ֣ɤ샻¼ú_ĽȾÿjLn̽*,--*&%$)41)(&#BI)))&)010/25;DSda_3;?7WJLOLJHC>==<<=@BCBDB?GNNNKF=/2AHF<(!$*-0472+(&')+)+0334478===><>OXT+,*()./[TNNPT-Q@4//2348:;BB<3*/64+"(9GNX\-SKFBBFE77DLA*>;=B*55QKORSQKHHIIMX16999862.-(&&%$#!%-.,-1364-+.///110/..133/--.136===<<;:9:::98989:999889::99:99:9:9:;::9:9:9:999:9:9::9:::9:9:::99:9:::9::99:999:;:9:::99::9:::;:;:::9:;::9:;;:;:::;;:;:';;:::999:;:;;:;;::;;<<;:;;;:;:::;;;::;;:;;<;:;<<<;;;:;<;<<:;<;;<<;<;<; +<<<;;;<<;;< +;<<<==<<<>=<==<<=<==<=<==>= +<=>=>===<=> +==>===>>>=>?>?>?>>?>>?>???>?>?@@>>>?@?>?>?>?@?@@?@@@???@A@@AA@@@A@BBBCBBBAAABBCB CCDCCCBCCDDCBCDDEDCCDDDCCDDCCDDDEDEDEEDEDEFFEFFFGFGFEFEFGFFEEFFGFGGFFGHHGHGGHHHGGHHGHHGHIHJIIHIJIJ KJJJKKKLLKJKJKLKJJKLLLK JKKClZ=9CPXX*TU*OF>8*-%$%%&&'))()('('" "### ::98:<<<:877998878877655432320//11/).022334554567788866797677442220/..*#),-./-8,**+1IJ2,,03126=A;8;?@?  !##!4/.-032/-,*('+.13321 22111233  6776555]999779::99:;:899888: !!"! !!"!!"""!"! !! 864568::8634995.)'%$$##$$$#$%$%&''('')**+,,+,,,./02233434357866779;=> !" !"#"!"#$%$%%%$#"!!  !##$%((&$"!!"###"! ! ><5.*+++,+++*,/,&# "!! !"&((())*))(%&(+.//.-./0123459=CEDHKKKLMMOQPQQRQQPKE]QkTyuZW1?U gohcpjgi4 hih44333443343223443454g444344343433343 +22eff344gg3fff3feff22f32e33gg343343f2dddedcddcdd2dd2dcddedccd cbccbbbcbccbbc bbabbbcbbaa`a`a`a`a`_a``a`_ +^]^_``^^^_^]^_^.]^^]^]^^]]^]^_^^^]^]]\]]^]]\[\\\]\[Z\[[[\\[[ZZ[\\[ZYZ[ZZ[ZYZZYZXYYZYXYYYWWWXYWWVWXXWVW VUVWVUUUVUTSSTVVUTSTTTSTTSSTTSRSR QRRQRRRQQQPPPQPPPONOOPONONOOONOONNONMMMNONMMNMNMLMLMLLMLMLLKLLMMLLLKKJKJJKKJKJKKKJJJKJIJKJI HIIIHHJIHIJIHGGIHG HHHGGHHGHGFGFFGF GGFEFFEFFFEEEFEDEFEDDDEFEDEDU\twFPLYOPOQRRPMPOLIJLK|JTNILPOKHIMMJIJJJD[1?* 2CJU2O@DACGGFFCCEEEFEIPURJFLRUSRQKAaE;RI3$53%$ PM@`NDWpYj\DSJY@[6NYEsE@>>Pee^bj6**48>>=;966788="%&%$#!"$%$#$$%#""#H"!%'&'&(,.01/-*&*-.///.--*''*,++,*+,-++*'%'*++***)*+)))&$')+---./.-./.--,L*'%&)(')*+***)((&%%%'))*++,*))-/./10014521/-..+**,-,*&*363422100/11120---*-34579 4+'.33223221j3455520-+,./111234544211100/..---,--/1462-,L9//2201354310//-%"%%!!&'(+)'-+,03567998;@A>:85566630-,+*# %)+) $.631"#+%&((&$!!$%%$#")/11/*  $#  +  + $&()++)&$##" ,0-61--,.*  #(..(" !$  *$&*+*%##&',3  "*8!;1+*,H"&)*&%$ "%%$ "&'*-+.2Evȃ?& j0  +¿˄0µo?25;>>76-% +  + + +  d       )) + +   +     !  + + + + + +      .R    9 !"#$(*)&=9MB_dW<1):KZg $"# $'-!ׅՄ*ʅ̂˄ɄÄUefNM/74W=8:;==<;:<;97789\8?;78<:856:966577gikh2Z7"&*# + E=A$&&=!7CH?I.QCN,+-,(LGA@D$%$&)')-..,+*,-./.06971-27:9862*;(!2*  RDEEFB<>@==FD@>?CD@>?AADEDDB>?=7, " $023)$(! ")%)''##/''2B+9!49)D%&2@?7;?6$#$   + + + +      C           7 'T%  + + "#%'+*(+//+'&$%&&&$! }|}~}~}~}~}|}|}|||}|}~~}~}}~}~}~}~}~}~}~}~}~}~}~~ +~~ }}~~~~ }}}~~~~~~~}}~}~~} ̧ν˼õ»ɳ®Д½ŷо0́Ŀ߽M< + A Mߏ73ϾmĽ¾нڣϝ埬D0)(& +''%$%&$&&$%&$%$$%%$#"""##$ +%$%%##"""#$%$#"#"#""# $$###$###"#"##!!!"""!"!! !!!"! + !! !"#"!"!!  !! !       +">އ𹘘񬋛ž玖Š耆Һ򿈮Λ짨ʂձĈ偉ѤƊӈ⼠ӚƿÿŽ*+,*&"#1??'"$A?FMOPV.125?Pe6f2200/XH><<;7;:15?ABCBDIGFHIGIMMMJH<15BHJF3&$(,111-'$'),/00047779;=>BJ*RFCBDGJONLEBHQS./)MM*+UUPMONI8/032201223:=2%'0330.9LTX[X))JEE%)L17FL20/4762;/AC7WU.44[NROJKT-368:972(&**+*)(')+)&(*.352-.346::98534578751-/047=<=;;;:9:::999:::9 889::9988:988999899899988999:::9:::9:9:9::998999:::99:::9:9:9:9: 99:9:9:::999:9:9::999:99::99::9:::99::;:::99:9:;:;:9:;;::;;:;:;:;:;;:;:;;:;;:; <<;;;:;::<; +:;::;<;;<<;<;<;<;<<=<<;<<;;<<;;=<;;<=<;<;<;<;<;<==<===<<=<=<<;==<=<=<=<<>>===<=>>===>=>=>=>??>=>??>>>?>?>?>>>??>?@@??>?>>>?@@? +@@?@@@??>>?@@@A@@@?@@A@???@? @@AA@@A@A@AA@@ABABABAABAABABBABCBABBBCDCCDDDCDCBCBBBC DDCCDDDCCDCDEDEDCD%EDCDEDDEEDDEFEEFFEEEFFGGFEFGGFGFGGGFGFGFEFFFGFHGGGHIHGHIGGHJJIIJKJJIJJKJIJIJIIKJKJKKJKKJKLKKLKLKJKLKELOJgm:4=X;<972-T&'+*%'&#&)*(*,,-./-**)(%! ! "#"#$ 9:;868 978778j9:;<;:8878<:885110//.//..--.,**,//11234333456688766653442//244/&&+..//,,-,*)*,8JF.*-/237=@9579<  ".,+,16033+'''(*+***-252010 101223556 9:9866656787666989:9899668@ !!"#!!"""!"#"#$$! "#4-,.25 !!!<2-*)('%&''%%&'&''()*)+,--,++---.//---./01233246667878::<> !"#$#$%$##"! !#%&&&'(''$%'#"# ?7/.--.00+)()++)'&#!  ! !""#%&%%')%',/1/0010012369<@GJLMQSRTVTSQQTUVWQHC[Zz^f[0AWbis}mj33hk555445455543334443334434345666555434h4344334343 ff43444hhh4343e2e341333fe22e333d2dd2eddcc11cd2ddeef3efeedeeddcccbbdecbcddcdddbab`aaccbabababb``aa`aaaba`a_^_``a^`a``_`a`_]_``___``_ ^___^^__^__^]__^^]_]^^]^]\\\]]]\[Z[\]\]]\[\\\[\\[ZZZ[ZZ[[\ZZ[Z[\ZYYXYZ[ZYZYYXWXXXYXXXWWXXVWXWWVWWWVVTUVVVWVUVWVUUUWVUUVVUUUVU TUVUTSTUTSRRSSSRRRSSRRRQQRQRQQQRQPPQQQPQPPRRRSRRPOOOPOPONOPOOONNNPOOONMMNOONMLNNLMLMMLKLMLLLMLLLMLLMLKKLKLKLKJKKKJJKJKKJKKKJIJIHIJIIHIJIHIHHHGGHHIHHGGHGHGHIGGHIHHGFGGFGFFFGFEEEFEDDEDDDCEDDFEEDEFFEEDQrjqJNI_JOQQSW[TORRMLOMLIHJIIKJINJKLIJQ1678CFCA?4C3,+,,( !N>h;?A?@vkh8<=@=;?>>?DFEDDHIIGGEJOOMJPYTDiI6+&,1$!!"" D]bcd[ORW]YRWXVVVQOOMOTVXYVYRHCF>dQ0AR0Z:+=cAQlGSL0AnF?>OBQW1/(LR>].=Z@/@D>IVA.X<>62+.>8.)+;&M@940.+*)'&&('''(()++,,-012/.*(()I*+,-/20//.--++,,+++*+,--,,...-,..,,/48@%%EB=<;98;="$%%$##$$$#!!!"$###"##$"F#%'*/01110.,-//00/.01/+**+,,--,,*''+,+'&')('(),,+(%$$((&')+,,-010..,**+,+,)&(*-.+'%%'**))*+*)*+*+,-//.03442/.,*))+-..-,+0331432034431-+).1244245689983))/110012112/13344432/./143331/./..//.-./--,+,--/8>=2M911.*%$+00/13332//01/K &(" ),,/*%&)+/148;;77:;<<;501000/-*()*'%()(*   + !$%$($2> :-%! !""#'&'*+')+,/.+ %%" +  +  (#%'**+,+)%#'-.%(10-+,,%',--+# !#!# ! ')*!$%&+1!!  "'$7(&5!''$"! !!!$%%&&(,/&)8Q熎4_3m \1%…>ʄYĻ;./A++(&!1  + +    +   +   ($  +  +   +  +        + +      + %  !$%'+,)&:BZMxwG4-;FSi=uvL؄7҅φ̀mZEG162W@5<::=CHC>?>;ri9:9754567976:5e785j7mig\4 ")($$%  &&B&('#3!@CDHNMAEL''(I@?#&&(&$''&',.-,+.00./.04433;B8+@-!! + + + + + ,DFHHA8=AEC@CA@AB<:98:?BDEDE=1-0);+(*6 !:*341T/3+'6>/AJ7<'7*3G%7H*/4#,A'%%2*1716)4!6'$%%/3%#  (  "   #    + +        #f"%"# ( + "$(++''(*))'# !}|}~}~}~}~~~}}~~}~~}}}~~}|}||}}}|}|}~~}|}~}~}}}~~}}}~}~}~}~~~}}~~~}~}~}~~~}~}~}~}~}~}~~ ~}~~~~~~~~~}~~~~}~~}~}~}~~}|} ȟ섇½􃐓Ҁ׹ဓɢʼ퍥ÿὔ1ՅſѷJ6 +  HrςſׅـĽÿĴý?ο¾ǧݶΑI8,)&&% %%$$%$#$%% +$$$$#"##$%##$$#$#$$#""!!"!"#"""#"! !""!!""!! !!"!"""!! !"!""!!!  !       0⻢ȱɷЏ;ՐҀ篗ơ󡜚Ǚň㛮쐝ƚ㳹ˑƪȺIʿ݄߀F̿(()*+++-++5?@;&!&%JP-1366:AKX_[TOMHDC@@ABAAAC>,+;BEGKKKGEFGIIKLNNG>6<&+-,H/&#'/432,(**-5:?#*+#937?@;9BNROTXVV/.PKNLNV*-+(L(VWWOCCA;62025531137CF8-/2349CP1=<8/NIHH&QQUD=>/<,38=C@J181!<972,,,/220.)(*.027;>AB>=EIA<9798777644325548>DE4'%Tf{HMM5muFPWXXZVQONKLOSVXVSTW[]_ccagqvrsxyz~eZm|wAABBCCCBAAABBBABABA@AB +ABABBCBBBABABABBABA@@@AA@@@AA@@??@ABBAABB@@@?>=<<<;;::9:9 :::999:999:9:99:999:::9:9:9: ;:9:::9::9:99:99:999:99:9:9:::9:9 +:99::99::9:99::99:9:;::;::;:::9:;::;;:9:;:;:;;:;:;:;:;:;;:;;;:;:;<;<;;<;<<;:;;;<;<;<;<;;;< ;;<<;;<;<<;;<;<;;<=<=<;<<===<<= <=<<=<=<==<<<=<=>=;<==<=> +=>==>=>>==>?>>?>?@?>??>?>>??@@?@?@?>?@@@?@@@??@?@@@??@? @?@A@@@?@AA@A@AAA@ABABABABBCBABABCBBCBCCBCBCCDCBCDDCDCCDCDCCCDDEEDCCD EEDDEDDDFEDED EEFEFEEEFEEFEFGFEFEFFFGGFGH GGHHGGGHHHIIHIHIIHIJI JKKJJJIJJIJKJKKJJKKLKJKJJKJKJLLKLLLKLKKLKDLNMwn:65D`:>6P;8@)*'))(*,+*,,,-/.+++)))&#! !!##" :99:726::<<<<;:8668:<;<;97:;97632330---,,+*+,+++)(+,,.12343123334446644554223100,,.-,.-('*+++)*8MH,%+.03;A;9747? !"!! !-(,.034-443 1001320.-,/34321/..-//0001355667@ 75498643345:;65668:: @ !!""" !! %((&#!3124566 ;;= =:971/,*(()(*+*)*+ ,+**++,,+,,-,-..01///24548:77:<;<<; !!!"##$%y&''&&%%$$#"$&&(''($$$A=92-,,-..-,+-.,)&''(((&#! ! !"!!"$&&'(('+.-.//0143457;?DJQRNOPPQRRTVY-.YIEHF{razy:Ef{fojh445454545444345 67666555445454443434f33g34323e343 23ef33efd22d2ee2e233edddeddd2dc dcbcbabccddcbcba`aaba`a```aa``a`aaa```aba___^^^_^__^^^_^_ ^^^]]^]^^]]^ ]\[\\^^]\\[\\]\[[\\[\\\ZZ[\[[ZZ[ZZYYY[ YYYZZ[[ZZYZYXYYYXXWWXWWXYXXXWX WVVWWVVXWV WWVUVVVUUVUVUUVWVUTTUUUSSTTSSTTSTTTS TTSSRSSRRRQRSRRQPQPOPQPQRRQPQPPPOP OONNONOPON ONOONONNOOONONMLMLLMMMLLKKLLKLLLKLKLKLLKKJJJKJKJIJIJJIHIHIHIHGHGHGGGHGGHHGHHGGFGFGFFGFGFEFEFEDDEEFEFFFEFFFEFryGMHv_RPJJNROJONJHIORSTLGGIJKzH~aGDHLRZMK]]:C6.)((()' )-M\@=><>?=<;?DGDCEFHKOIGGKNCnSP^H8J5AMB(1ud^\[VU]]a_ZVVWVSKBITZZZXHiISZ]E>b=H;8T<=5J=S6@Se[KBABJZuLSWdH;>BL~wji~~9EL?bP>?><;?#$%%$##$%%$"""#$$"###$$$#! #&'*.0210.,,-/4.00/.//,)((*+,-.*%(,..,+)'')+++-*''')*('(*++,,/0/.++- ./...+'(*($'+.-+*)()(*++)**+-.1213430-+++-0//.///-.1200146655645651,./0121224666563-.110../0135..14456751/000/---..,++-.,+,,+,,/2464^F70,,-..+& $.00022245421.(A +()&%(,/,&!#&/148744678886.)*+,+*(%%''&%&')* &) &,5840-+($#"$&'&%&%!%(*)&%')*,,-./) + +  +  + $+,2621)'+)+2(023-%#""$'#!$!!!''*!"""")!#!# +'2$$;8') !!#&(&')('+13//02/47)(<^Dz-J? -  l-.Ƅ˄ ΄+þ=3.7K,.&5$!%  +  + + + 0    2  + )%  +  + +        +    + + + , + +  + +  )   k!$0'(+)RVQuZM%3L^hoҭY%Fׄׄ8̄d + Bqj[162PA;;77;>,!) & VKGEDAAGGKIDBCEB=4,2;AACB3F-:?<-'?%(! /! '"-5+# !#*I6HR/46='%+1LF>DD9.%,34369>@ACLRTOIFGHGEDDDEGHEFIK>26?@@AFJF@DGEGMPPMKIH)/30,(A0)(',289<<948A"$%&% :22?$$CJUTRUVRQOHBGMJLNT.YSONMNPC<:5243345998;>@D9*,2:>K-7=>=96/PGEDB<>5'?/(+7>GQKMOE'.DC)*,.)&&'*/37:>>>:8:975582///-0=C@AEFEID>@CHD;:=>=;::98876657=AFH3#EMWZ\pq2`ZsALONLIEEJNTVZ^[URSYdgfjooxC@=??ADBl_hvBBAAABCBBCCCABABBAAABABA@AABBBCBCB CBAABAABBCCBA@AA@@A@ABA@@@?@@@AABAAA@??>==<<;;:::9:99:9:9:9 +:::99989::9899:9:989::989:::8899::999:9: ;;:9:::99:99:::9:9:9:::99:::9::989989:::9:9:9:;::;:::9: 9::;:;::99:;;:;:;:9;;:::9:;;;:::9:;;:;:;;:;;;:::;;;<;:;;:;:;<;<;:;<;<<=<;<<<;<<;;<<;<<<;;<;<;<>=;< ==<<<===<<=<=<<==<=<;<<=>=<;<=<=> ===<===>=>==>>>??>=>?>??>>>=>>???@?>>>???>>?>>?@?@???@@?>>?@@??@@?@@???@@@??@@?@??@@A@ ???@@@AA@A@A@AABBA@A @AABBBAAABABCBCBBBCCDEDCDDBBCDDDCCDDDCCDCDFDCDEDDEDE DDEDDEEFFFEDEFEFGFFGGFGFFFGFFGFFGGGHHIHGHIIHGHHIIGHHGHIJIHIHIJIJJKKKJJJIIJIIIJKKJJKJJKKKJJKJLKKJJKLKKLKJKL(N@v@DKRd8cH89C-2,.//140**.0)(++***)'%$" "#!! 97676//8;:;<<;+8;::999::865554200.,,+***)*)())(&'-/I./2542114422232334422110..-*+(&)+,-,,4IG*!*-027=<77898< !"" 4+(-.01#413444541/0112221/.-,+-../2354 !!662146641013797767  "!"#$"!!! 95214 $%%&&%%%'%#"  ;9:! @<8510/.--,+ +-,,,+*,,+,+-,-/.0//10256876558;;:;:99:= !"""#%%&%&'''&''&''('%$#%&&')(&$B:2/./.-,++,-10,**)((())&%"! !"$6#%(+,,.1113578:>BHPS++R))*+--./[QGDDHLSWjx_0U|Ztjnl53354565433434 555666555654445554434443334333443343433443 443433443323 23ff2233433343f332223 fed2223332e3efeffddecd33ed +eebd2ddeddcdcccbccbccbcbabdb`aba`aba``a`aaabaa`aba```a```a`aaa`___`__```__^^^_```_]]]^][^_^^^]\]^__^^_^\]\]^\[[\[]\[[[\\[][\[[\\[Z[Z[[ZZXXZYYXYYZYXYYXXYYYXYXWXXXYXWXXWXWXWUUVUUVUUVVWWVVUVUTTUVVVTTTUTUTU VUTSSSTSSTUTQRQQQRQRQRQQPQQP QQQPPQQPOPOOPQPPPQQPOONNOONOONNMNOOONO +PPMMMNMLMNM LKLMMMLKKL KKLLKKLKKKLKJKKJJJKKJIIIJIIIJIJIIJIJIIHHIIHHIIIHIJIHHHGHHFGHHIHGGIHGFGGGFFGFGFEFEEDEFEEFEEFDESQMHwdZVVTTWXSKJNOOLLOPPRMKORSQLDHHGFGbMMPGEOXimU9@04-%$#%'()(%]9=>>aTH=nnuu=@=99?BHLHHHMH?aBI !V\:K1$+LQ[]YQQZYZa^WTUUPHf?TZeVHb7$-X:OXLY1-49E/JB>QNDJGBGLNSgCHJKNWKS2KPsJK88=ILBw_5B''N[`V5PFWBCKkW143B?0UTY11&:7M_LQ?'1:LuKP.--,++*(()(*++**+,+)+2320./.*((+,,+=***,-.//001210../3:!!"#">=<<< $&%#!"#&'%$""!!!"#""$%%%# !#%*.-+++,.d010/./00..+(,,,01)')($!"&'&'((,.-*&&))(&((**)*-0/,+--,++,-++-.$!&)()+--/-,*)(''(((*,-/1331123332/../0/--.00/++.10///034443331-.0/.03456672.110/--/12374112455420/-,+-.-,+,+++,,++,+.4<:]C4//12.-,,,-+'!+10/125663/.+'$(*&'13.%<",134303546630+((*.-*'&&(%#$(--* #  "$&,0/+(()**&$$%')*)**)!&)&!%'&(-01,*'$  +  + + + !-/022-)&"!'+,,,//-,,*,0&!j!'""!(!"! %*%## " !! " U !&$03(#."'++)+--39.*>f҂Y!=cM, a`ÄCɄB̮CAEFP,L3'(- +  + + +    +  +  ,  + (&   + + +            + + +  + +     + +   + +    " !!!! W  /+''').BIOI8$AaN I0D vԅхЄ4Ʉb |>741NC>>??@DD@98<<<88;<<=;:=@A?;ifda378667_B322)(.3@@. + + + + +5%'%&=6+$DEIK'(%FC??"#C!$'&(&##').100282*=&' 99"$ 4;BEC>@HEGLIEBB@<3C&/;<:6//5=GNOOOSWTNKHEBDEEECEHIHIHIIJJIH<43=DCAIJA?GLKNNPU-/11/120+$:9746#(#B<317< ! !!:1/@**LIEBFHMKA:=GOQQVSIHHMNMQ[T:5205:=968;8679::::6..//!,,:ADNUSLGEDHRROGJGD$%&.34485127=>=<<<977567763149>?9-!#DCGEP[6PObjhkjowqlMY_dfb`enpplhnsv=>=<<;::89:9::9889:9 :::989:99:99:::9::9::9:99:::9:9::99::9:9::99:;:99:;::99:9:::9:999::99:::9::9:::9: 99:9:99::9::9:999::9:;:;:;:9: ;::9:9::;;:;::;;:;;:::;:;:;:;<<;<;::<;::;;;<;:; <<;<<<=<<;:;<;<;<;<<=<;<;<===<<<=<<==<=<==<=>>=<=>==>>=>=>>???>=>?@?>>=>?>>?>>>??>>>??>>?>>???@?@@@???@A???>?@???@@???@@@?@@@??>???@@@A@?@A@A +@@AABBAA@@ABABBBABCBAAB +CBBCBBBDCDCDCDCDDCDCCDEEDEEDDEDEFFEEFFFEFFEFFFEFFFEEFEFEFEFGHGFGHGGHHGHHGGHIIHIIIHHIIIGIIJIJIIIHIJIJIIJKKJJJIJJKJKLLKLK +LMLLKKLKKKLKKLLLKKKLKLKLMubEKT[bhaYY./140005653221*(**(%%&&&%"  !"""!!75442.045569;;;;999;;<<<;;;::;:9764330-/.-+,,++)('((%!$+.//.+.2343221122023332o1//...-+)'&'()))+:F2&&(.346:;::9:?!!"  4.,+,,-.//2403564310375311/,,/001432444/5456313588766  !"+##"! 8668 "##%%&'%%&&&'((&$##"! <[ @==<8520/.,--///0//000/00/.-,--,...//03354432443345676777889:;<<;:;;<==? !"#$$%''(((''(*!834;><<@@90/21/-,,-../-+*+++,+)('&'('%$##"7'%"#%'*-/1234557;@FLQVURU-./00\`XIDEKdpMmD7Prallk545554545543456556545434343434343433444344hg334343233e332"f32eef222ceedddee2123eededdededcccdcbccbcbaabcccbaaabbbabcbaa`a__`_` ba``_`_`__`__` ___``_^^_^]]^_ ^^^__^__^^\\\]\]\\\[\]\[ZZ[[Z[ZZZ[[[ZZZ[[ZYYXXXYXXYXXYZYYXXYYYXXYXXXWWXWVWWWXWVUUVUUUVVVUVVVUTUVVUUVUUUVVUTSUUTUUUTSSSRRSRQRSSSRQRQRRQRQ +PQPOOPPQQQPQP OOPONMNOONNOONOONNNOOONMNNMLLLMLKLMLKJKJKKJKJIJIJIIJIIKJIJKKJIHIHHHIHGHGHGFEFGFEFE%FFFEEFGFFGFF}QMLJs\VYZSQRONKJLKLLLQQOPJGGFFFGJKKyJ2;]YVnqpZ;36J)# !"#%&&()% .K79<<:lMrjlmkmnljn:;97ki9<;;?FFDFKFe??!,:]LN' !!  %%&%.NKSWTUXWUUWWVURQRUN?OF4s864817?S\{^)/:4G/AO89D@CGHRPUdiqBHEBDID;8@DY30B3o\LUkhOO$.BIH9@JKDBf819;?M((;=NCG/NqbN>=Y8??y]6@1C:3451-+))*+**+*B,030-.---..///.023430.,+,,++)((++,+**+,./1332101113;!"!  !#$&%# "!!##"#"#$&'&#!#&'-10.-+***+,,-.00/.--./1M+)*((+*&')*)((*+*&!"),++***'&()+(&'**+-*(('(***++,+($'+)),.--.-,,(''))*,./0121 0145200/--/110221.+*+-..,+*+)+343200122/-/1248;4.010.-//11255320..-,-./-+*U+.020,TI9/.-+,/1.*)(+-,(#$,22233520/.--*&""'&&+-,%<9 ,32121/0//.,*)*-/.,)')))%!#&(&%Z$*,,-/1.+)(&%'(''$$'(())*++*'#! '*$"'*,.,-0 +  + +   $$&+.0+!$,0151('(+,*.73 #$.7!"!0)$$'-0,& #)''!! ##"!$)( !!"W +!&-%",0-+()*$$ ""#(-,)&#'+.-+++*--3>㊒g  'lQq˄ʅH±쪮IIOQSRF:7   +  +  " + + +    " $  +           + +    + +  + +       ""##!!! "  +6,31*(*/FO:`I,(>Yhot߲&=@1/΄6ȅ„3@742L<:>A=<==;8998898;;;<==>855344479:V/$>74EGE2# + + + + 0$"B.A>AA@BBA@D#%$!?>#%$%(--,.2.@$#!8+# + + +  + + +25;A>@FCBCDDDCA?>?8+1("&39L4!'.""%%-/08:>%*(%&*%")'.+ >]2)2BC0,*/+%.+$#5)"+$2E5%!2"'&E/"   + + + +     +       t,% + +  }~}~}~}~}~}|}|}~}|}~~}|}~}~}}~~}~}~}~}~}}}~}~}~}~~}}}~}~}~}~}}}~}~}~ ~~~~~~}}~~}}~~~}}}~ ~~~}}~}~~}|} ξ臋񼻀ļ˺ī۬,㑳ܫs< +  +    !MhۋނŶـĽ3ۀÿᆕ ῔L9-*$&%&%$$""###$$#$ %$##$$#$$#$###"##$#"!!!"#!!""!!!"!!!"##"!! !""!"#"!!"! "#""!! ! ! !  """!  !  !    $`DZݩ佧Ľꫣ̴ާ财챉󂈎ѡζʮ߇捽ƱÍߊ߷ՎՅ¼#jſ$(.8::;;8998GZebad2]XYTIA?@BDEILHDHKLJHIE>667>C=;DIEGNRTU,3::887676-$! ;!$":735; !?<9.'+36:AA?CFJPO@9BNW.15_L+000/14W5348BQZPB==8209GPNW159<5YMFB>741230/472<0:DLS-.L?AEGLD9?ACG).36679>?BCDGLNMLA>BHV.\XUTUMDCCDDEE@1')6<86689864579;814=?>91("D?BEHDCENZ]\YX`ozS_dklkqtqpsr9<;qolc^WU^imqk~BA@A@@BABBCBCCBABCBBBAAAB CBBBABBAAABABA@A@AB +AABABBBCBBABA@AB AAA@@??>>=<<<;:9 +::99:::99:9: 9:::999:999:9:998::989::99::9:9 :999:99:::9::9:99:99::9899::98999899::9 :999;::9::9:9:999::;:9:999:;:;:;;:;:;:::;<:;;:; +<;;:::;;::;:;:::;:;:;<;;;<<;<<;;<;;;<;;:;<<<;;<=<;<;<<;;;<=<==<<;<;<;;<<<=<=<;<=<=<==<<<==<==<==<=<===>>=><<= >=>>>=>>===>=>==>>=>?>??>>>?@?>?@?>=??>@@?@?@?@? @??@@@A@@@A@ABBA@@A@AACBABAAAB AABBBCABCB ABCBCDBBCDCD +CDEEDCBCCCDCDCDE DDEDDDEEDEFEFEFFEDEFGFFHFFGFFGFGFGGFFHGGHHHGHHIHGGHHIHGHHGGGIIIHIHIHIIHGHIHIHIJIIIJJJKJIJIJKKJKKKLMLLMKJKLMMMLLLMLLLMLLLKLLLK2LLJKLMiVIILS^6751-,45./5102331/--,+($$%$%%# !  )<86654540./257:<><:;<;;::9899989::9872533210...,++*(('')"&,--./1/../44/..244564223221.,+,,)((&&('),8;/((+.07=>;85312564323212456310/../0.//1 0022344534323 +113468768:=>;=> "#$%&'()*(#611//12/--.0241120.---,+*,,,++*)?('&'%###%'&%#%(,0366579:@EHJMPV,-0114:eNGFGGSuGSDC[uxmqn5k654434555454554 3433444344556545654455454343454443344434333434 3344334343443434 34334333hg3232 3322332323223fe/c222dcdddefeeccc22fecdeedbbbccbc1bcdddbbbaa_ababac bbaaa```aba`_` _``_^_```___`)_`__``_^]]^___`_]]^^__^]^]^]]^^]\\]\[[]][\ ]]\\[[\\\[\\[\ZZ[Z[[[ZYZZZYYYZYX +YYXXXYZYYYXWXXWWXVUUVWWUUUVTUUVUTTVUVVVWUVVUTUUTUUUTTSTTTSSTTSRRSTRQRSRQRRQQQRQPPQQOPPQPPQP QPPQPOPONNOOPPONOONNMNOONMONNNONMNMLMMLLLMMLLMLLLKLMKKKLKJKLJKLKJKJJJI JIJJJIKKKIJIHIHIIHHGHGHFGGGHGGFGFEFGF EEFGEEFFFEFEEFFFEEFFCiTOJDngjibYQKOLJMLLKKKIGLSPOQPNLKKIJLIKQNl_(*+0btyhHO$*L1  !"!!!"#&(('%'B?::>>iYSBgjim:>rn:tb[do;?EBz7Hd? )@cv)$7\AP47jnD[fZX0,+)(('(+*))(&(+-.-,++,**-,++0345431/.-+,--,-,,./00/+++,/0/013457?$$"!! !#"""$&%%%$" "! "$$$&(''&$$&('*042/.,,,+*) +),//-,,,..01121.-.1/('(+,-*'''&())*+,,-.)')*,-/*%$&('()))***)')**+,,--*++((+--/..-012322100352/131236899640,***++,..-/0-%$.7510122322334771-/000/./002111221-+(*,+*^+,,,*),/-SNH>2-*)*+**,*+,,+)+,,(%!)0,,/256431/1/(#%&!%%&'&'%!",//00/*+,..+*+.0.+,.,*+-)$ B%%%'5;779423.'#!"$&&+-)%&*++*+,*))$"('(,.01! +  +     +!$)-/30!'0!9+1$05.&!!',',!#.'#"!!(." #%! !#%'(,,+)"#&./,)()!    !!1!%,--*(,.07 $%(((+,($%%),)%##)/3:݋*7?K#.ÿ„ƿΏOIHGJ'$"  +  + +      +   P      + +         +  + + + +    +  +   + !  !""!   'V!;-,*,)2N19/1DYchnz׶4- Cۄل-ффҀ¾ÿ hA83-DCJKGA=799798988876:A=;<=<9976797:B>I:"HROA)'" +  + + +&%" #%A84(<<;B#%C@#C74;B$).)G%?&! +     +5B>BADE99>A@BBCDMSN?%5325; .&71!=+$((A6336: !K!)6#)3 -@< +&@-X0"#?A(6?40(. + E;.?'F#'-$2*-/($1*%$!!    3   + + + + + + P    '      +_,(#   }~}~}~}~}~~~}}~}~}|}|}~}|}~}|}~~}|}~}~}~~}}}~}~ }}}~~}~~}}}~}~}~}~}~}~~~}}~~}~~~~~ ~~~~~~~~~}}~~~}}~~}~}~~}|}}} 򊐎󖐐ȀƸ¶λΡͦ+тØf=  +    Ciގۀ¾Ǻƿþ@ɲꕓȘA;/)$&&&%%%$######$$###$##"##"###$##$$#""#""!!!"#"!"!"!"!"! ! !""!! !! ! ! !""!  !"!! !      + %O󊎅ֽڔڔ׺¿֋ҿ܊遊ھӎ׉ᘢߖ诺͜Ըޓ赯ٙյ׀醍ﺪ񏩬ڂׯřÿʸò34789;?ABNYXTJFKOMKLKGEB=@EDDJJIHIKLIIJKIJGE9459ACB@GNOU/37:<@@=;;987/%!  ::: #%%FDA:2-,.5>ABGIMPPQH@J.4323TI5425213F48:DVTKHID;8AL[5ZR..VXVH;61-),012367551'$(,142+PLMMIBAEIN+05:;99;=>>EOPMNMOMHHNTVVTQQMJHJHEAAA>?7139=<9788525446635;?@B>7&778=@DCC6BBDJMSX]rHRXY`dfllkjfcjpqmhfga[WUYclma~DBAA@AABBBAAABCBCCCBCCBCBABBBABAABCBCCBCCBBCBA@BBBCCCBBAA@@?>===<<;;:9: 99:9::999::988899:9:999::9:9:99989:;:9::9::9::99::99:;:9:9:::99:9:99:9:9:9:;:;::9:;:9:;:;:9:;;:;:;:::;:;:::;::;;:;;:;;::;:;::;;;:;<;::;:;<;<;<=<;<;<<<;;;< ;;=<<<=<<<;;<=< =<<<;;<<<=<<<=<;<=<===<=<==<=>= >==>>=>>=>>=>=>?>?>?>>?>?>>?>??>??@???>>???>?@@?>?@? @?@@?@?@@?@?@A@A@ABBABABABBBABABAB CCBBCBABBC DDCCDDCCDDDCDCCD CCDDEDCCDEECDEDDDEFFEFEFGF EEFFGFEFFGGFGFEFGHGGGFGGGHHHIHHGHGHIHIHIHHIIIHIHHIIHHIJJIJJIJIJ +KKKJKKJIJJKLKLKLMMLKKLKL$MMe]ILLLOHEW/T^=:430.,,.0..-+*('$!  8776310/-/47:<::;9::98<;:97641/.-,,*)*)''(" &+.00/.-,-1121024556542210/./.*)+('(()*+)''" **%$)+07:==<:;=>>? !  :1-.-,+++--.//04 3344225224442024435 655 !  740,.478889377 ! !""! "  ! "#$$%&&&'&H$$&())'$$$##"!"""!!! =;97654454456677744345778:96444674212221100013432455533678<>!#$! !!!"##$%$h&)+&:31/-,./.,.02467;<9530./.-,,,+++**++,,-,)*)'&&&((&(,246::>AADGFDBEHNV,//02?XPVBDFIiPLLOWewp{Voqm66544455445654454566676676665565454555445 45554454343454445433443434333434433232233223f33fffeeddcd32d23eeef32112d +eedeedcdddcdcb`abababaaba``aabaaabbb``a___`__`_`a```__`__^__`_^_^]_^^_^]\]\[\]\\[[\[Z[\]]\\[\[\\ZZZ[[[Z[YZZZYYXYYXY[ZYYXYYXYYXYYYXYYYXXXWX VVWWVWVXWWVUTUVUVUUTTUUVWVVUUVVUVVTSTSSRSTSTSSRRRSRRSSRRQRQPQQQPPQPOOPONNONMNNOONMNMMMNNMMNMLKJKLMLLLK JJJKKJKKKJKKJLKKJJIJJI +JIIIJIHIIIHIIHIHIIIHHHGGHHGGGHGGGHGGGHHGFEEFGFFEFFEFEEFEEEFFEFEDEFFEFGGGEYtPNGrstfabXMFFFEFEFGKRWWZXTQPQNLNKGd_!/`OrwqNUB2"  !#&'''&"!W]<=@AA@{sl_XRFFKQMB>?ac6/!"$#%&')(%# "(($9YOXTUSQLKMQRSUXWW[VB`LAT9NA\kW15,93@Qm;h7HY/3WE`vWN;K[ijid`:[hP<@0/BWP]80vZNKFEAGdiC1D04f+:1A;utvj?EqDF/E^l"FZYAT[5>BY9M[iV>O2,+**,-+(''(()))('(+---.-/.,,.14533210/.*/0//00//00../..013569?#$$%%"!!"##"""#$%%#" l#$$$%&''()'%$%).-,/00/.-00.+&%')*))*,,./--./0/-+,--.30()./.+)()*&%'),,++--+**,-,,*))),,*)*++--,-+-.-,+-.-+*+-./--/121/35223>4889:5.+))-/.-+-/0023/&#+--//123356520.,13211011/00/..-,,*(''(*,$+VQ?0,,,+**()++*))(')*)**+*('02-)*/24120.)$$'' !#%'()'$#,.-,*,)*-.-)*+/,+010/./1,+(),02N$%&/640(%)+**+*('$ $'&&**'&')(')*+,,)$#*+/ !#!   +   &*.11/% ,%$#/,'&($"(20+.0/&# #'& "&' %--+++*)%$'*++*(c'#"!"! "$!"$"$()++-;$''&(),0.*&!!$$" !#!")143|هf $   !Htͅͅ*ȿʥNIDA@60: :A)# + +        !    + +           + + +   +   + +      * !$G";77++*.O;546>JYfgi @   +qÄĄ&k|;70LNWPGEG@72c45332459@EEGEA>==98:98eHA$I:P\XNJ/.  +  + + + +  + 3:%$%%%&JGA:50)-251)%/!-(??   + + +;X8BACB?;:<>>@AC?=@;(6*$1%/#4=1&.= 8&)/'6@,$*5@@=73M3:++2).SbT6.,*-')@B%$8'#BBD:$(@"#9D+75$+1 '&4#/3=/"      + +  +  &  *  Y + /,"F + }~}~}~}~}~}}~~}|}|}|}~~}|}~}}~}~}~}~}~}~}~}~}~}~}~}~}~~~}~~~~ ~~~ ~~~~}}~~ ~~}}~~~~~~}~~} √πƾÿ»󉙭ƵΤ䵰*»̢}>  +$wƁ̈́gſȿU¾¿ӸⱇE2+)$$$$#$#$$%%$#"""$%%$#"#"!###$#""##$$#""!""! !"!"!!! !"!"#"! !  +  !""!  !       "6µ䉉̾򢂩ȱ›ިฮμ仧؅ήǻǺߛ֘ւۖ򕜛˓솞˴»0ø=˺:<9:<>EPPKNPMF<.:FKMNKGEE=9FKKNMIGFFFGIKJIHHE:29E((GE)/2:=>@?=;;972("""  <<<!"'&#"C<0/5:=CJLMOUTV\VL,52./0?'5,04254E?;>=<<<;:;::9:99989:9:;:99:9:98889:9:99:9988999889:;:9:999:::9:9:9:9989:::;::9:::99:98: +9:::9:::99:9:9::989:999:;:9:9::;:;:999:;: ;;:::;::;::;:;:;:;::; ::;:::;;;:;:;:;;:;<;<;::; <<<;<;;<<;<<=;;;< ;;;<<;;;<<<=<==;;;<;< ==<<<=<==<=<<=<<=<<=;;<<==<==>>=>===<=>>>==>>=>>===>?=>>>?>=>?>?>>>=>>>??>>=>>>??>?>?>=>?@?@?@?@@??@?@ ???@?>@??@@A@AA@AAA@ABA@ABBBABBABABBCBBBCBBBAACBCCCBBBCB CDDCDCCDCDCDCDCCDCDEEDDEFEFFEEDEFGFGFFFGGFGFEFGFGFFGF GHGHGHGHHGGHGHIHIH IHHIIGHIIIJIHIIJIIJJKKKJKJ +KKKLLKLLKKLKLKKKL KLMLLMNMLMxLMNNO@{FGHH@1,683T82680+..0.+-.)&%! ! !"!!!::;:76776311211..6:::998677579:;;:9;9656677643111/-,**)*)'%#! $(,-q.-./22100234530.-.///0.,*+**(&'''()(+-,),0./3457:;:7:=;:=!$# 4.--./-.00/0/02 "! 643213323332334345556665665434   1,*-5646767 ! !"#"!  !  ##! 0!  !$%%&%&%$$#$%&&%$"#'*(&M%%$#""" <;987521221//23353235789;<<=?<<:654443443114685100135776664457:>"%#@ q!!"!"$$$%'*(A7310.+-.../0244;E=:8:630010/.0/,++,-,.000/-+*))*,)(-4;B#!A#%',-'CFKPSUXYeRn^dDEDKJkPT\^jeNdrsnl6665 44433445455665455543455456676767767676665 44545545444545455545654 55443443343"455444543334334345544434334443g4443234344332 332ee2eefdc21fdccdcdcc2e2efdd111dcbceedbbbccbccc`aaabbccbbcbbcabcbaba`abaaabc`abb```cb`a``a`a`_a`__`aa`_`_`^]^]]]^_^]]^]^^]]\\]^^\\[\]\ +[[\\[\[Z\\[ ZYYZYYZ[Z[ZYZ[ZZZYYYX ZZYXYXXYYXXXWXWVUUUVVWVVVUUVVTTUTTUUTUUTUUTTTRSSSRSTSTRRSRSSTRRSRQQRPQQOPQQQPPPQRQQPPQPOOPPNOPPOPNNONNONMNNMMNNNMMNOOONMMNONNMLMNNMLMLK LKLKLLKLLMLKJ KKJJJKKKLKJI JJIIIJJIIHHIHHIHIIIHHHGGGFFHHGHGHHGFGFFFGGGFEDEDDEFEEFFEFFEFFFGFEFFFEEF;GEMүUK~}sifiaTF~EJHE|}PSQORQPQOKKKMOzO]uzrrzzs~d`0# 5 !#$$$! 23A7<=@A}d_Y=JtzurjL?\MUG54 ! %'%"  '.-'@qNPPOSUVXX`a]YPBYJ BhrP86R0B?X7:gUT;g\[T6:F.#QrdYMe~XBgNJKM0=-'CLr__b^dl`8:3^PNcLFS=]WHTg]Y<;81/)62A(7-+,*))**++,,+*&"!'*-//---+++/1343120//../0/11023311211/,,.148;!%&'&%$#$&%$#$0##%%$""#$%%&'((**&%%#$*-++,-0/,,--.0.)&(&%')+--*()$"%),///,+,/0.+(%')(%&(++*),**+*'&).0/-+*(+.0../.11-)'(*+,,,-.,+,+**-/...---.242221/.0112/,++,/10.-**,--.240(!!'*-//002330($"(0420036/--,,*)**++)((**+,,.0XD4.+,-,+**)('(L)((*+**)(),/-,,+13/**/134574,,)"=%*# &'()*,)%*.21/0/++--+*,0114313354232005;! "(10-/1.*!&*+-,)(&$))+($$##$%(+,++*' !!##"!   #(,2246,$$" $35."l $(()*0!%-1/*,/0.*(()))%! !   +##(*((-/+**4&)(**-030'#"!!"! !$(-'Oʆ fN6  +@7D( +¿_ɆS²OHEB7' ).,F,#! + #   + +  +  ;    + +            +       +  +  +  %!!     #6 ! !!"14NB=+,)3:M49@@M]FAq >`ޅ܄wĆÀ¿?5\WWUOIHLG>4[1554e[[<@?=?>==:77877:98>5;2/-(2#9604664 7 +   +    W +       J  J-    }~~}}~}}~}~}~}~}~}|}|}||}~}|}~}~}~}}}~}~}~}~}~}~}~}~}~~~}~}~~}~}~}~~}~~}}}~~~ ~~~~~~~~}}}~~~}}~~~~ +}}}~~~}}}~}~~}|} 爔킊πʿ ͼط)ꆯʥD   "Doڇ򅘛¼d󂊊ƽV⍩鷮甆vA8/  #" %$$#####$ %%$###$$#"""###"##$$$##$$#$##"!!"""!!!"! !!!"!"" ! ! !!! !!"! !  !!       +   <Ԗν‡ò鮃úήǐ¶æᕦαې˳Ӱٮࢗ흭Ƭ釓`ڬ탅ۅƹ¾Ų°.!EEFKLMNMKLLKJHCBGHGMQMHH=,*6BHHFECEHHFCDFD*26:4,1<>=?AABB@=;98983'!!!4216=<=<>:$&(%#%"<7337=$)))QSV\b]^12/-,K$/,.2/YZOAA=;64568>9554212202598,$%GJLMQQ[b3`V1E`_W]aaekaTQX[Z_bba``bdceipfRF~C@A BBAABBA@AAABAABBBABABABABCBABABCCBBA@?@??===<<<;;;::;:;:::999:9::99:9:;;:99::9:::99::9899:99::99:9:;: 99:99:9::9:::999:;:::;:;:99:9:9:9:;::;:9:;: ;:::;:::;:;;:;::;;:;:9:;:;:;:;;:;:::;;::;:;;<<;<;"::;;<<<;<;;;<;;;<<<;;;<<;<=<;<=<<<;<;;<=<;<<;;<=<<<==<=<;<==<=<= <==<==<=<=>=>==>>==>??>??>==>>>==>?>>>??>>?>? >??>>??>>?@?@@>???>?@@@???@@?@?@@?@A@A@@AA@ +A@@@AA@AABABA@ABABBABAACB +ABBCBBBCCCBCBCDCBCDEDCDDCDEDEDDCDECCCDDEFEDEFEEFEEEDEFEFGFGFGF GGGFFGGFFGFGHGGGHGGHIHHHGHIJIIJIIJIJ KKKJJKKJIIIKJKL +KLKJKLLKKKLMLLMMLLMLMDLMOF[_ED@7)K-56@BCLS)*,1,(()&$$; "#"!!"$#!!";767:97554224530.59:767664/04798 6366545553211/-*)*(&%$!!#%()*-/.-.00/.../001110.00/-,++*(I''')3FA5---,044237:;;8658 %% 312210-.0/00136 !""587652/1236662231212444 4-.011333446654676!(  """! ""! !!!#%&.%%$%&$$$##&''())'&&'&'%$$#!=9; "!>:941211012124T545788<=;:879:;9998:=?;6432235664259<>@!$$ :9<>@?BB!#"#'*(D83110/,+-.../122586533232G32100//0.,-..--.---.,,**-05:=;9>E$')'GFJOPU6P^\aLHGhPMa__ailXmXop677654544454454567 87766545445445454554545433444545454 +544434333432332233223g3e22333223323322232deeedc122dcdddcc1cccdddcbcbccbcbababbabba`aaa``aaabba` a```_``a`a`a_``_^_```_```_^_^^^]^]_^]\\]]\]\ ]^\[\\[\]]\[\[\[[Z[Z YZYYZZZYZZYXYZZYYYWWWXWXWVUVUVUUUTTUTSTTSSTTTSTTTUTSRSRSRSRQRQRRRQRRRQQPOPPOPPOPPQPO +NOOONOPOPONMLMNMNMNMLKLKLLKLKLLKJJKJKJIJKKKJKJIJJJIJJHHIHIHGHGHHFGGGFGGFFEF EFFEEEFEEFEHFEFFFEFGFBOiSI~}zohjk^PHGHJG|LPOMLKFFMJ-AEikc`gh_]Y2* ! .%CB79:peedWRSYadhgfdQ7T5/?4, "" !#$$$%&''(+)1=NQTTQTZ_^Vc;D644=?PC3/F0/2:HHG59F?MB@GaL9<,B@49=:648k_^>b:L16Te8HTR %Qj{ykn\S>;1Sf;*1>`FK>>>;r^XA5B'BRVJ0+--++)*))'&'K)+,,-,,+,,++)%&03/,.02575451.)$#+/)#$()+..(!&/.-*)-.,-/..350+/4:96668:628?D**+.../.--.-,(""%%%),(#! %%$##$$%%(*)()(% !""##   + + +  +  )/48932(36.#!'+0 ;4'"&(()*-..013,*')*'"!!"!"#"$# + + #&((*/2/&#31+.0014-%!$#!#! !"!#'+(#'ф$*.?" )*7!,#3ɅȀǽF@90";$.19730)  + + + + +      + +  +     !        + +      # +   + + + + + +      F !!!! """!!"#$u #6ABFW0**M=7IFDDJM>48  ݄<}>3[YZ[VNILNE93`3586a_l:=<:99lh46=j1 >8M^`XKFEKJB?: + + + # +&) !"D?@>4//38;@?<<1 0' + + + 'cnw|>ACC@ADIG>\B(+#&2&#"(&$)&-"/"#'#!<55#$ /2#)"5DRXWYQEG;4"!96#:*)!#$$D50$'34+"&!$*:$,#)$# +      O  + +   B +  )**953/ ?    $(}~}~}~}~}~}~}~}~}|}||}|}~~}|}|}~}~}}~}~}~}~}~}~}}}~~~}~}~}~}~}~}~}~ ~~~}~~~~~~~~~~~}~~}~}~~}}~}~~}~}~} 凝ľñļϹ԰,ūM=  +      +"w¿z"ɹ뙏ըӡȍB2%#$%$ ###"#$#$##"#"#""!" ##""##"##"!!"""! "###!!!"""#"!!! ! ! !  !  !!  !!       +"7¹ݫô¬՞ԁԀƴ扦耐چҵޢṱ̸ҷŒԮ߹¶>䞥֚ڈšóυۄ܀󀅄нKLLMNNOSRRONOQR*,,-//.+KE?5+'/>BECAA@>>=ABBA>;:9884+ 77878989;=@?><>#$&&&%#:81/<&*++--_343351T,+KGCF(JGMPD5231158=DIJE<620-%,887524771,-16:2:C==<9;;<;732137:<:ADDB?=<=6*9@>?>=ADD<:5.46544559=B<*!&,/-/23794/3>INIHGIPRONPSSNRWYYZWX_afktp]TneBAABBBABBABBBABACCBA@AABBBAABBABBCCCBBABBA BBBCBBCCCBCBBBCBCCBCBABAA@???>==<=<;;:9:9989::9:;:99:::9899989899:9::9::9::;;99::9::9::9:9:::;::9::99:9:9:99:::9:;:9:::9:99:9:;:9:;;::9:::;:;::;::;:;: ;;;:::;;;::;:;::;;::;;;::;:;:;;;<<:;:;<;:;:::;<<<=;;<<<;<;;:;<;;;< ;<;;;<;;;<<;;<;<;<;;<=<=<==<<=>>===<<<==<=<<==>= >>=<>>===>==>=>??>?>>>??>=>>>?>>=>?>?>>? @???@@?>>?@@??@@>?@>>???@?@@@AA@A@@@?@@@A@@AAABA@ABAA@@A@ABABABCBAABBBABCBBCCCBBBDCBBCCCBCDDCDDCCCDEDDEDEED +CDEEEDDEEFEDE FFEDDEEEGFEFEFEFGGFFFGGGEFFFGFFGGFGFGHHHGFGFGH IHGGHJHGHHHGGIJHIJIJIJJIIKKJJJIIJKJJKKKJLLKKJJKJKJKLLLMLKLLMNMLLLMMLLMLMNNM*NMLLMMMNOAFB9-,17==::?L'IHF@B"#&&!; ""! !!! :7434445799636;:8453//2444543469:96776665454434310-+'&%%&&%%'&'')**,-.0/-.//.,+,+-/00//...-,+,+*)((***()/;B7-++-243013::6327"'# 71/00/-,/2434 7778632344620//../.--./01355232320/./23211262.00156  !"!  ! !!  >!##$$%%&%&'&%&%%%'&&''&$%&('$#$%!= !"#$%$?8776432003336^7:<:789:9:;;:9;=>?AC!!>;:;:979;@ >>?@!! >?!#" >>?"$$()&A4/250,-,,-,-///134323224210.000/131/.8/,-.-,..120//./2400149BGJIHONM]cPUvOHEnd_Vgew^fp6776545 6555444554566567875 4554455545 444544455545 44554555455545544454 +554445554543344344343283f333e332332ffefg3edffeef33dcddceedddcbc22ccbbbccdccbccdcba`baacbca`aaa`aa`aa`aba``abaa`a``__^__`_`aa_`__a`_^]_`_^^^]^__^_^]^^]]^^]]\[ZY[\\[ZYZZ[\[Z[\[CZ[Z[[ZZXZ[[[ZXYYXXWYYXZ[YWXYYZYYYXXWWYXXYWWVVVWWWVWVVVUVVUUVVVWVVUUVUTUTTSTUTTUTTSSST SRRTSSRRSRSR/SQQRRQQRQQRRQRQQQPQPOPPPQQPPOOOPOOPPONOPOPOOPOOPON +OOONMMNOONMNMLLLMLLMLLLKKKJKKJKLKLKJK JJKJKKJIIJJI JIIJJIJIHGHIJIHGHGHHIHGFGHGFGGFGGFGGGFFFEFGFFEFEEGGGFFFEEFEGEEGFEEFBGFBIo_Vz}~syrigYHFB~GJHLKIMPJzgAItxsnbe^bhjbSC>L!0-*'#"D6Z57ov@@c^c`ekbQ=f?A,>GB3 2'!#!$"!!"#$%&# /IQSX\^^Z[\N9NY\008GCUBX.:G=IPB6XP]acbQ*Of>IPTK=520``]UNU[I7>PLH76G@:'&@cmy|j[QY[QMeQ7(:K]b2^]JLSA\INM9=FXWOJ>MSf0,BV=68SA&':ZB)+C;L?2,*)+-.//0/00.*&#$%(),-./00-./0/../...-.1443223444531778<=?!#$%%#"#%%$#$$&(''&6%%$$%&()))'&&'()*,,,-+*(%%&'''&$# #%''))+,.//-*))**+,+(N'*,-,++**)(()**)(% !"%')*,,*(()++*.24761-*&"""$&),031223542/-+),.142.11-,*)-/-*''+,)()**+**+,*('(*$(--)& 3/4!()+,.1/-+)*+)NNPSU+++/0[OB60/-.--,))('&''&()))+-01.//,(+*&%(,230,.14553452,&%%%'*))--./,($%.0.,*)*-.00354225;>969>BA?<@FKj/./111220-,+,-  "&'%%$##!" "!# ! #$#!     + +  7 /'# "'(/3*#(*' " $#&))+-,/ +&)#$*+(%&%#  h  +"#!!!#'(%$##! !! !$'+0.%+l犐)7- S %7A¿ DŽɅ9΄QǸسC;2&$(09:84.+$#!   + +         + + O     +                  + + +   +  + + +    i  ! !"!  !#! #  "$  !  ! !&FmB;BQ2*(RLX@AKIYbM瀂"3?}WBaW]]QW]SLI?441[b587ml88m7;=9lkkS<5;XXQMEGBFLNH9,&' +   + =%&IJ((<8;8;=90"8 #* +    0tw{AAEGFHCDB4&5?8 !*,7(- *$(*"1.7:<4$7A%)--(024/*m/0$&0)'&$?JMU]OD809;33B-'036,!'.%7+1.,850, %0;,9&#"-"5$'  + '       + + V  +   + +  : +  + '(+./6.' I  ##&%%$&,/}~}~}}}~~}~}~}~}~~}~}~~}~~}}~}~}||}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~~~}}~}~}~}~}}~}~ +~~} ~~~}~}~~~~~~~~~}~}~}~~}~}~} 󁇌ŵ􁀈ꖗ̭ή(ˬL> +  + uBjމგɄ̀qõý9½䃻פŲ̪߫̒G>/  "$%&%$%%%$%$$$# $###""#"!!"!""!"##"""#"#"!"!"""#"! "!!! !!! !!  ! !! ! !  +   + !)莟ѹΥ̨ƻґܩݕڷے녗۶֏ʝф𲩃’ȫՁ𐆇ɞɼ⽔ı˨ƀ򪝝µٙʻƄ¾^̵ûLLNQSWX,,-.//./../..,*)''!5.+/9?ABA@CEFJ'+2:;89:747;<::=@@???=8544/%25864468>;769!),*('%#!:46 %(+/01126775^W,P>:78BHLQO?21110.,.3311,IH'%&.6995466204;DJGAGBDCABIHA:;9899754556652$ (,1344763125757<@DEAFJKLKNPR UX_a\Y]^olCCBAAA@ABACB CCBBCBBAABDDCBABAABBABBCBAAABBBCDCDCBABBAA@@A@@@??>=< ;:;:::9:99:9:9:9:9:9:::99:9:98999:9;;::99:9::9:99:9:::9:999:9:9:99:9:;;;:::999:;::99:;::9:::9:9:9:;::9;;:9:9:;:9:;:;: ;:;;;:::;: ;;<;::;;:;;<;::;::;:;<;<<;;:;;;:;;;:;:;;;:;::;:<;<=<<;<<<; <<;:;<<;<<;;<;<;<=<<;<;;;<=<=<=<=<<=<<==<<===<=>===<<=<===>==>>==<===>>>==>?>=>=>?>>??>?>??>>>??@@???@?@?@@@???@??@@??@@@?@A???@AAA@@A@@@A@@@A@ A@ABAAABBA@@ABBABBBABABABABBBCB CDDCBCCCBCBCDCBCDDBCDCCCDCDDEEEDEDDE DEEDEEDDDEFEFFFEEFEEDFGF GFGGHHHGGGIHGFGGGHGHGHIIHGGH IHHIIHHIIHIJIJIJIIJJIJKJKJJKKKJKKKJJKJJLLKLKKKL +KLMLLMLLMLM2NMNNLLLMNMMMLLLMNOJaZB;006?FCBC><@=B)/,&&'((#!  !";855434569:97579889642/*((+/.02455457666798634443221/-)())+++))**++)()*+++,.22111-+,,..-,+,+m,,+*)'&)46/.34343/.39;978:"'%!:30.-,/3468743/2! 557996664543730/.-,,,-...--.//10110.++**,,-/13775321/.0211365544466 !"  !!  !! "! "$$$%&&&%(&&%%&&&%%%$$%%!"!!! ""! @=;7620.11145Z6878776689;<=>>=<<;::;?#$"A?=>?!!! ?@!#'('&@3/00-+++,--...168643211221112201232;32111/.../000100100/01004;?DL-V{aZEhnOGjcg`O^at}muVnr77666544565665454 556665666765454445556545454544454545655543432343f3f3eeedeef3eedd22cbc21cccd2bcccddcbccbccbc bccbbcbcaaba`abbb___`aa```_`_`__`___^__^___^^^__^^^]]]\\]^^]\\]\[\\[[[\[\[[\\\[ZZ[ZZZ[ZYYZY XXXWXYYZZZXXYXXYYXXXWXXWWVVWWVVVWVVUUVVUVUVUUUVUVUTUTSSTUSTTTSSTS +RSTSRRSRSSRQPQRQRQPPQQPOPPPONOPOPONMMNONOONNOONNMNMLLNML MLLKLKLLLK JJJKKLKKKJKJKJIJI HHHIIHIHHIIHGH GGGHHGGGFGGFGFGEFEFEFEFEFEFGEBpr}KLo{wgVGDMJJHHGIHGO~K]{rZcrlbW\qjCQ-00/+$NWMdittbSLJ>:@;d5'#;U;,'%50/-'#"(  !#J_RWXZ_`ZVPONH;V508E>>8Q46(aZ[?PHPVYh?n;?CKDJOIEA5RHDAKYUONE70;B=KMHFADG<9GHcFKOSa^TNiB'+J?4TJU;[_g\Noh_G0kRHDtH@1Zk_tmeaXN0B=U_\PVYPR+@K-../12332.-/...+&#'(,122111310/...///0133212344533457;?@A"$$%%$##$###"#$$#$$%'''&&%$%(+,+*+,.///.,z*+,*'&%(('# "$%'*,++*++,---+*+*)(()+*)()*)')+--,,+'&#!%')*++*)+..+-33.*'$%('%! " !"#$%%')()-//-,+,.+**+.0,)))'%())()*))())())*(#%)*';$)*++,p*((()RTW,-/\SG80-,-,,,++)''&%$&()**--,.131.,,++*'(,.322.-03763251+(# (,,+-.0-)*'$+10.++.1121598889;<>BDFEDECEHM --.2564 + "&&$!$%%( !"#"!   +    + +  + "#" 61, !(.43%'('$)'$& "  #$&%&*/4*/%!&!301,"" "" $" 1  +!!  !!2"**''*7jW? +7D++ +jo.ąƀʿ?4''/:CBA@: /)## +  ) + + +     + +    > +      +  +        + + + + + + + + & + + + + + +  _      !""!!  "! !"!  !#! !!   %E_D@9WV:3RSNWE@JL`hc .A?օ1˄̀BdPS\27S\XK>32:8ebdk87ggj5666i7876/$4 #* )862 (&,36B)A#&($(+&#!(%%#)2.((% K%!)*% !'& -/S<(.36?<5/:%#4/4,073-@>;#@4+(+(4A8G@;;50"2:6-14/2'&   +       + [ + +    +  +     +   ,.181)$ %  !#$%'&)**+*)+.}~}~}~}~}}~}|}~}}~~~}~~}|}~}}~}~}~}~}~}~}~}~}~}~}~}~~}}~~}~~ +~~~~~~}~~~~~~}~}}~~~~~}}~~}~}~~}~}}}~~~} ң)nŌǹήҭA      p%ڃ򕨞ЄƄĀ݀؀ɻ¼ÿծڢF7 +*%%%%&%$#""$$"##$$#""#""""##"!!"# "##"#"#""!""!"!!"!!!""###! !"!! ! ! !!! ! ! !  +   /⺐Ś򝚙Ƒሃ򊖛ެȺֻ󅏒Ѵ曌̝ϸ׷׌ļߠֽ얘틇ձtïý,-,.1321/-++--./0/#9;76>FIL+46484/47632484-28:;:>BB@@>:6433*!5332238;>><;;::"*,($$&%!;627A$(,001344`0..YUH;/)+>LMPI.+13,'% >>JSVXVMKN*08:778788=EMSSKGH>BFCACJOLMLJJLRVWY`5740-/3565O.0E<]MN(IEMLJLKGMO)F>=AEFA>:;=>2)08<>;9789::;:524689;==72% #%(.2530-/10135;@@>>??>=<;;<;:9:;:9:;::989:::;:9:9::999:999:99:99::;99::999:989:;99:9:999:9:;:::99:::;;:::;:;:9: +9:::999::9:;:;:99;:;:9:;:; ::;:::;;;::;:99:;;;:;;::;;;:;:;;<;:::;;:;<;<;<;<;<;;<<;;<<;:;;;< ;;==<<;<<<=<=<;<;<<;< ==<<<=<<<==<=<<=>=<<>=>><==<<=>==>>= <==>=>==>=>=>>==> +===>>>?>>>=>=>>?>?>?>>?>?@?>??@?>>?@??@???@?@@??@@@??@??@AA?AAA@AAA?A@@@AAABBAAABAA@AAABABABCBBCBCBCBCBCBCDCDCBCCDDEDCDDCBCDDDEEDDDEDEDEFEDEEDDDEDEEGFEFFGFEFFEFGGFFGGFFFGGFGGFFGHGHIHGH GHIIGGFGGHI*HIJIIIHIJHIIHHIIIJJIJJKKJJKKKJJJKJJKKLKKKJK#LLKLKKLLKLLKKLMMLMLKLLKLMNMMLLMMMNNMNNMNMMMNMlOBE<128BCADFE@98H5>3+*! ""13764675445534445674323665431.+*(+00234434447766897886212110/.+)+000.+,++,D-,+,/1211-**+,/,)**,,+*+*)++**++,,+-)%'+)+//02/-/6<<67:71011/.-/220257548::;=?<:<<<=;9;<>@!#$"A@>;8;<=A@;::<<=@BDF$'JA50//-,+**,+*+,.367423212122112443334432/0/01-.03/034455436;AE4Yk\6;?DE@JGbhd\qloor\n6566655565566654566655565444545545677787788876665546656565454445545444345454454 5455655656654 343334344343343 +23332332323233f3ed2d2ccc21cc2d2cccdbcbddcc21+bbabccddbcccbbbcb`ababbaabbaabbabb``aba_`a`a___```__`a``^^_^___`_^^_]]^_]^]]]\[[[\[[\[]\[Z[]\[Z[Z[ZYYZYY[YXYXYYXYX WWWVXXVWWVWXWVUVWWVUVWUTVWVVVUUUSSTUUTTTSTUTSTUSRSRQRRSRRQRRRQQRRQQQRQRQPPRQ +PQQQPOOOPPOMNOPPNMNON MNMMNNMMMNMLMLLLMMLKKKLLKJKJKJKKJLKKKJJIJJIJI$JIHJJJIHIHHIHGHHHIIGHHIHHHGHIHGHHHGFG FFGGGFFGGGFFGF EEFFFEEFFGFEFEDEFEDEjkrf@UrvXCCFHDGuNq}u|jhrjaVar|'31.++(&8DN[W7?G66KQRT%)[f++*-,$#-43EPRV[\\^\VXVJ?[E;)%>R815NRXV[N=HTULMUSF>AD?6'## + + +   7    + +      + +  ?  +       + +   +     $   + + + + +  + +  +      !#!  !#C%#"  $#  "$$)" "" !  + 1 "# >L?/48?>6:8HBKM^\cd}Ÿ灄Z}: ' ߄ ݆Ÿ́F¾&tvNHMB*?WcW?12fmokjmlmqljfcf5645S:UcVPY_NJPLD>IQK + -   /465$+,03+ 7- +  3`||z=>AEDBB?;=7-%3))3'*-*').1--0-#$7 ,- &#'!06:*"4%3,#8,/@>-97,'C84;?>HP21/3*5%**# &3%31#!7')&.>6$%,&,9*,/$ 0-)=;DG+   9   + + + E +        &6)  "#$)./0//,').~}~}~}~}~~~}|}~ }}~~~}}}~}~}|}~}|}~}~}}~}~}}}~}~}~}~}~}~}~}~}~}~~}}~Ԁ +~}~~~~~~~}~}~~}}~} +~~}}}~~~~~}}~~~~}~}~~}~}~ ھ󘒋׶%E  +#LـՀ3yПֱ怷VB1$#$""#"!""#! +"###"##"#"# "!"""#""! !"!""#"#!"""!  ! !!! ! ! !! !    +    $Q򿅅۱ӹΉ̂烢􀋐˪뽋dzǴฺäݴӋ͕ꩾۭR»沧½]ϴWĿ20233100/../00./135:<864-#315$+468;6230+02/++,.+&.9=;;?B>:9;;852-"3.17727>=<>BAC#!>=>?=:=<52@A$+/..^\YQRPNG@;71,1HNLM=>ABFMQXZXMHIGLILSSRM@CHNQUZ.026634566200Q0B994/0/Q=@=>@IMD@CFC=9;=ELKGC>=AB>965755:85683%%),.143,0/235;@CEEFGEE@>=<@DECDGKPL>9ARUwBAABBBCCCBAAABCBBAABBBCCBABBABABAAABCB +CBBCBBCCCBCDCCDDEEDCCDCBAA@@@>= >=;<<;;;:;:;;:9:9:::9:999:9::9:::99:9:9::999:999::99:::999:9:999::9:;:;:9::99:9:;:;:9:;:9:99:;:;:;;:9:; :;:;;;::;::;<;;:;:;:;;:::;:;;<;:::;;:;:;<;;;<;<;::;;;<;;;<<;<<;;<;;<<=<<;;<;<=<;;<=<<=<;<<= >==<=<<===<=>= <>>=>===>>==> +==>>=>=>==> ?>=>?>>>=>?>>?>? @@@??>>>?@??@?@@??@?@@?@??@@?@A@A@AAABABBA +BBBAABBAABABABCBCCBBCBCBCDCBCCCDCDDDEDCDEDED EEEDEEEFDEFFFEEFFEFGGFFFGFGGFFGFGHGHGHGGHGHHHGGHGHHGIHHGGHIIHIHIHHIIHIIHIIJ IIIJJJIIIJJKJKJJKLLKKKJKKLLKLKLLLKLMLMLMNNMMNNMNMMOOONNNMNNMMOIei<46>CCFIHHC;@*9>8/& .1788769<:4..01354111/02321136763-+*+,044323444346679:;;;===:511100/,)).232344332333220.-,()+)(+--*)**)'())++*+,+U'%'()+/0/04=" ;=!@?B 9898412467420/1 $%$" 78774484/24567420/.-Y,,-/1122/-,**))**+**+,/0../0..1122677654530122356565/.002344   ! !"! !!!#$%%%$$&'&%$$#"" !"779 !#! "! !  "!998663222345544689:;:79:::989:;;<;=<<>>;?@@>><>==C<1017=:;:651/,*++,++,-/453334543322121247865455432112110-1356787468;>AM@eMQ668;@>8_Ks8irthrn55565665656556 555656556555656566788777887 66655566656566556656565454545665654333433432332234322333232d222dcd 2b122cdedddcdddcdddccdccbbcccbcccbbca `bb``aa`aaaba`___^`a`_^__`_^^_^___^_^\]\[[\\\]\[\[\[ Z[[[Z\\Z[Z[Z[Z[Z YYZYYZYYYZXWWX YXXXWWWXXWWVWVUVWWWVUVUTUVUTTUUTTUTSTUTTSTTUTSRRTSRSSSRRQQQRQQRRQPQ PPQPQQPPPOOPONOPPONNNOONMLKKLMMLLMNMMLMLKLKLKJ KKJJJKKJJIHIHHHIHIHGHHGHGHHHGHGFEDFGEFGFFFEEFEEEFGGFEFGGGGE`{nsmn~rGEIKJz||zpYHLd|sgtwnmv|m^A>12220-,)$#"%/MPC0D?:>AuD$=#'&''')#'"1/:sTXXWTRVXYXZ[\UD;PSP(_Y9E,GD2YN6SNfF6/628HEOpC;NBP_g=;l[HNcZCB9SDM;nJSYZ_ojlsYegzFFq]_j{jD[D^xSY*2SBCBC8+:Hc9H6.2?BBDIKLNOOQU*)*.23 +   ! "%"    + ::60.,)% &./2& %*./-)(" "%%'*-232*'(%&$&,*)$ $(-0& !*!#&!  + r !"#$#" && %25͉ZW8#4;pÅ+Ąŀß9,/8>>BFEB5#!"% + + +    +      +    + + +       + + +           +  + +  + + + + +  "  "! !!! !!!  "$$!!"!!#"!!% " h   "$$"  !  !$%.0P:>-..394,Q=R/]mfmȣ54$̅ ƄR¿%EXGKJO^mqT347mruojljl:8hcZ[[WQ<07K\ULQRLMW^QC+" +  20&)% !$>  + +   *Tvz>BCC@=@A@>>>=6*#)2, 97!"!5,2-6$$$-)1I,#)$.6:#"=4*-<4%$&!&%*28-'>A<@>D&%8 %        + + + *  + +  " + + +   +  (  +   /  +  .0,*' Z!!#%$%*+.22344335~}~}~}~}|}|}~}~}|}~~}|}~}} ~~}}~}}}~~~}~}~}~}~}~}~}~}~}~}~~}~~}~}~~~~~~~~~~~~}}~~~}~~}~}~ ꁌꀀɴ횞ß#证򈦩L      '퍱žՀſ܀ź*ߐʿ]N6  %""" ""#"!!"!" #"""!##$#"##"!"##"##"#""##""! ""! !"##"!!"!"#"! !! ! + !! ! !   !       0㱄˔ẟ͞եϿߪ燴РԀЙñÈҜһ򻨸¤Ͳֳ㺘لŏ½ٹžĸ 011011210//13336:=>>;973/%1(.)0.14488631.++/1.('-68658;:8788665," 635532#&&&%"=866567515:8,/?8@'(S-[WQLJD:3995209FGGE;2--. *#?75>P./.-,49>BDLNMNRPQNPMOPPPHLM=DICGMR+.15861,*.2.,-/*7>8B@>7^E/3CD@><8>ILHIIE=:9A:61010365475,#(,-*,12479;?FKLHINLHIEAEGPUKFFIL?.^?AAB CCBBABBBDDBABCBBABABBABBAAABCCDDCDCDDCCCDCBCCBBCBA +@@??>>>=>=<;::;;;:9:9:9:9:9899::99:::9:9:9:9::9:9:;:9:;:;::9: +;:99:::999:;:;:;:9:9:;;:9:;: ;:::;;::;:;: ;;;<;;:::<<; ::;;;:;;;:;;;:;<;:;;::;:;:;;<;:;;::;<;;:;:;;<<;;<<<;;<<;<;<>=<;<<;;<;<;;< ;<=<<=<<;<;<=<<;;< +;<<<===;;;= <<=<=<=<<= <<==<<==>>>=<=<=<==<=>==>?>=>==?>=>=?>?>??>??>?>>>?@??@???>?@?AA?@?@???@A@@AAA@A@@@AABABA@ABAABABAABBBCCCBCCBCBBCDCBCBBCCBCDCCCDCCD CCDCCDEEEDDEDE DBDEEEFEFFEEFEFEEFEGGGFGFGFFFEEFGHHGFGH GHHGGGHHGH IHHHIIIHHIIHIHHIHIJIJKJKKJJJKJJJIJJKLK +LLMLJKLMLMLMLLMMMNMLMMNLMNNMMLLMNMLMMMNMNNM=NNOQD4@WXGHMMLLJFMZa;A7(#"235324468640./12232/.-,/32/.0331-/157877651133411446:;> :30..0.*(-158:;=>><@@@=9::3-*((('&(&&*,,,--+**()*--+((*(,.--.-* &()-0/-.<#!?A@@?:88754310.-+.245 !"M" :54583324555530/11320//--.13220/.--,+),+*+-011210.-/1148733453122113566420/1014 !"##!!  "  !"$"""#$##$y#$&&%%#" "# "$$# !"!$"!  !"##$#!9887767:<;;;899778:;;=?>;9889>AD$%%$"A!B"##&:,,/4=?=:631//-/.,-+,-.1112242323<225776877732223441124445:>@?=>BEBCJ8TB>34447:8E]T?~{]vq665 665566556567665556556556656555656676787889876565665655655565455565565 4556655665 455544545654 3444545433343454334343f343232323ddd232de3fdcddbcdedddcdcb11c abcaabcbaaba`a`aaaba```_^^^_``___`_^__^ _^^__`__^^\\\]^]]^\\[[[\\\[\]\[Z\[\[\\[[[ZYZ[ZYYZYYWWXWXWXVWWVWVUVVWWVVVUVWVUVWVVVUUTU VVVUTUUTUTSTUUTS RSSRSTSSSRRRSR QPQRRRPPQQPPOPOPOPONNOONNOPPOOONOOONMNMNMMLMLMMMLMLLMMNMLMKLJKJKKKJJK LLKIKKJKIIHHIJ +IIHIIIHGHHGHIHHIHHGHGGGHGHG FGGFEEGFEEEFGFGFEF9GDKswx~hDwHJNnLA[=DXu|ssvlcfwqNF$977,,/137210+)*+)!&?Z42bIB"!"!  #/&+!,I[QZYWWZ\`\[UPR\cc^VRLJ9We/#ZC81UA.0@8]L-')EJsNIpKHXH3UBRSB>=78CAJ=0- T$0H5bwxbVK:G;T8kG609/" 9CIQVUPJKbC]aG+>FL4XJ2?*N/,../01343.X,,/..021+&! */..,,./.-.02334443324545568;>? "#"! "$#" !"##  ! #%%%$#"#&*,,-02/021000-,./100/.---//.,((*&"# $$$%&(**)()**( '&'&$#"!%(<%&(+*(**,-..-,***,,,--/.-.,./.,*'$%(('%%$'((./-,+)&'()'&$$$%'('&')*+'&((''&$! !$)& &1//,+q,030G4*&#&'*,,)())*(()+,)()*+--,+,.,--+*.120122+%#(-.138:6101335662(%).021-++-..02446;72338>CHHKNMOOMNMQ,164/-/00 !""   !!  + + + +.960('"$)+*#$#&',.,,,+)),++*(% #$"!% '&&2 "##%! $&"#! "&'$4%'&%%! "&*"!%2"783&#{ nÄńĀ2ݙ-6NQABHJIE=12=B''         +  + + + 9               + + + + + +  + + + +     A  ""  ! #&$! !##$"! !$# Y !! !##"!#$#!   "%'$!#%)&'.)A.-(((),0,8R<1kso3"*;ۄ=ЄЄ΀¾edQQU_mqiK1Ucjonon7lddf:=N0)=+4BV[TSTLFKZ\G1(  + + +    +  %8 4%" + + +   + 5E<@ABBEFHEC<78@CA=74/. 5= 4#.".'++=0,@S417( :/5.'**%#'(1$ , /#7H/#&($J0$   ,366640/8%48%"(,!6,#  +      + & +  +   + +   + + +   + + E   %[ "  %)-/034675314!~}~}~}~~}~}|}~}~}~}|}|~}|}~}~}~~}~}~}~}~}~}~}~}~}~}~}~ʀ~~}~}~} ~~~}~}~~#~}~~~~~~~~~~}}}~~~~}~~~~~}~}~~}~ 񅐏ͻι냌߈Ǫ%֢@    +"O舒̀ǯ÷.ڏɺijPA$ +"#"###"""!"##$#"""!##"#"!!"!"###""!"!" !!!""!"!!""! !!!"!  !      )ԭ؁ǿȤøڨײʷ䍚⁈ɽَżǞĩؤӣȓȕίԼ紶ݹʭ鄌֮Ł서žû復ŽQ233111/0/027;<<<>=;;::95.D*%)08'0014886542-,/21+$'3999:=<:875443.#41226 '(% ;:1//0119=:47:6:CK(+RPH;>=9;=7,(-=DEE>4144/("?:>E+00.-*(.8?FNMKOPPV/,S+SNMHFFEF>@KS*,./1450+++*,/-++..?6,;80TIDE@8A=8874:A@@EHD=>???@@@ABBC DDEDDCDBBCBBBAAABCDCBCDEDDDCBA@A@ A@??>==<=<;<<; ::;;:::;;:9:::9:9:9:9:99::9:;:99::989:;:9:99:;999:9:9:;:;:::;:;;;:::9:;:;::9:;:;:;:;:;::;;;:;::;;:;;:;:;::;;;:;<;:;:;:;::;;<<<;;<<<;;<;<;<=<;;;<;;<=<;<;;<<<=<==<<<=<;;<<;<;;;<==<==<==<;<===<=>=>=>= >==>>===>=>=>==>>===>=>?>??>? >>?>>?>>>???>?>? >>???@@@?@?@??@@@A??@A@A@A +BBAABBABB@ABABBAAB CCBBCCBBCBCCCBCBCDCDCCDEEDEDEFE DEFEEFEEFFEFEEFEEFGFGFGGGHGGFGHHGGGFGFHGHGHHGGHHGGGHGGHHIJHIIHIIIHIJIHHI +JJJIIJKKJIJ KJJKKJKJJKJKJKLKLKKLLMLMKLNMLMNMNMNONNNOK_YJ]gTNV[SPPPLGBH]51'!=951-/2445420/1245420//,+/00/-.035430+/2455664212445579<:;:7531/-,,.47:=;:;:=? <;;;=@;2-*''&%'((*++-./.,E+,,*)*(*./,+,/3+ &,-**+/8 !B@??A?8323211.)'--+04 750125j64444345665632420001010021/./.-.02455577874343125401453210213554 ! X !"!!!"! !!$%%$#$##"""#""##$$$#!! "#$$$#!! #'&%" !!! !#$"!"""! =98:987566899:;:987889:<>@B! "%)$B5..1<@=<:51.-,,--,,.../.../3422320024335 6567766543&4554:;88>ELJE3Vi4011225;NclAm`p65456556565 667667665656565677766777887888767677766565566655656565655654455666565455544555444554545455434 33444h443334323212edddffeeedddcdcddcdd32cccdcbbcbbccbaa`a`abb`abaaa``aa_``_^_ ^_```_```_`_^_^^\]]]\]\]]\\[\\\[[\^]\[Z[\\\[Z[\[[[\\[\[ZYYZYZYXYXYXXWXWXXWWXVVVWVWVWWXVVWVUUUV TUTTTUTUTUTSRSSSTSRRSRRSSRRQRSSRQRQRQPQQQRPOPOOOPOPPOONONNNOONNNMLMMNMMNMLMMMKLMLLKKKLJKLLKKKJ KJJLKKJKKJIJJIJJJIIJIIIJIJIIIHHGHHHGHGGFGHGGGFGGHHGHGFGHHGGFEFEFEFEDEFFGGEB~`LDKKEV7-=oO~y{usokfccC:LS$)132( 09: 70--+*)(% &/WxkS9.vZVXTQNLFBA*&10  +  #   + + +   1!-!   FT36@=@ADGB@;1.5@A<57=:3-$!0 $GH8+2*",(+H'0B25C@54((0BP84/,'0J=BB@;8=E<=PRCBD6-%'!"85!:>06E6. (7<2   +   +  + + + + ! + G +   + +   +    + + +  + #  1! "&(,/2455789;~}~}~}~}|}~~}~}~}~}~}|||}||}~~}~}~}~}~}~}~}~}~}~}~~}}~}~}~}~ƀ~}~~}~}~}~~~}~~}~~~~~~~~~~}}}~~}}|}~~}~}~~}~}~ 吢ý؀ɶǵ·-㷛H  +    Tέ儁Հ־醇瀈絳ԓ֯K5  +  $$#"!"""##""###$###"""#$$#"""##"!!!"!""##" !!!"!!"!!""! !"""! !!!  !       +    + 7Ƴ߾ࣕߢ½⥤ܣ爎։ኙȈɖԜ߉ΰŷͷԭ軫׹Ԑ˃ķE샠¯زBúþ21300246:97:<;:::7899;=9.=&$&'-&0.-//2344/-./0/,)/9:89;<:7654442&<: 7579 $" =2,+.0454@ADMJ;-'/;<8@DB?;=?:6.,020,# %++()*),($+20.29:;;<:!!"FGA>??@A@AABCCCDEFEFFFEDCBACCCDBCDDCCCDEEDDEEDDCBA BAA@@???@???>=<<=<;;;:;:::;:;:;;:::999:9::9:989:;;:999::99:::9: 9::9:::99::9:9:::;;:9:::;;;:99:9:9:9:;:;;::;:::9:;:::999:;:;:;:99:9::;9:::;<;:;:;:::;:;:;;:;:;;;::;<<;:;;:; :::;;:;;;::; +::;;::;;;:;:;;::;:;;;<<;<;<;:;;;<;;<;;<;<<;<<;;;<<<;<;<;=<;;<;;<=<=<<<;<=<===<<=<=<==<<<=<==<===>>>=<= +>=>=<=>=>>=>>?>>=> +?>>>?>>???> +?>=?>>>?>>?>???>>?@?@A@??@@A@?@@???@@@A@@@A@A@A@A@ABAA@AAA@AAABABABBBAABAABCBCBCCDCCCBBCCBCCCBCDCCBCDDDC+DDCCDDDECCDEFECDDDEDDEFEDDDEDDEEEFFFEEFEDDDEFFFEFEFFGGHGFEFHGHIIGFGGHHGGHGHHHGHIHIHHJIIHHHIHHHIHIJJJIJIJJKJJIIJKKJKKJJIJK JKKJKJKLLKMKLMLLKLLMMMLMMLMLNNMNMMNONNNMNMNNONNMNMNHOONNP}{CUXGHPSUVWVRJLS^1*:4==851/231200354269;95220010100./2566200121154362356876555432443249;<<<;:;==<879<<<93/+(()**+)))((*,f---,,***+0-,,1642$&23-()2>BAA@AC!:5211.12/*).2013587851147541126334556520//03543$4322123220121344535312 103554311122  ! ""!!""!!"%&%$#"! !""!#%%%#$$##"!!!#$#$%&#"##$$##" !#&&$%%#3$%%%$"<8778::997678:;;:;7568:<>"$$%%?7521;(*JB:3/,+*+,--./D001//232234336766533566677643467778:@<6;D)11IW_2441346:D`Fpen445656565656555667765565567676565678889787676665665655565656565654544545444554554445655545434 33444333434343 2332e33322323321233ffd23edd2dcbccdccb#ccbbbdcbb`ababbbaabb``abaab`aa``aa`_``_`aa`___^_``___``__^^]^_^]]]\]^]\]\ +[ZZ[[[\[ZZ[ZZZ[Z[ZZ[Z[ZZYZYZYXXXY +Z[ZYXWWXXYX +WWXXWXXVVVW2VVVUVVVWXWVWUUVWVUUUTUTTUUVUUUTTTSSRSSSTQRTTURSTSSRCQRQQRRSRRQQQPQRRRPQRRRQRRRQQPQQRQQPPQQPOOPQPOPNNOPPOPONONNMOPNONMLLMNNMMNMNMLMLMNMMLKLKKKLLLKKKJJJKJJKMLJKJIJJJIJIJ)IIIHHIHIHHGIHHGHGGGHIHHHGGHHGHHGFFGGGFGFGF EFFFEEFGFFEFEEFFEFFFEFFEEFGCIxuh\KIMDFy\,.6Q~or|ztZ=:V`KGD=4?L|O.8659-( !! !&&!88541+*))$-4,*!*9u_ja]ZVZY[^XROOPSSHHPUXWP@7_1;9TC_gQHNfaSMBX_[@SJEFz`djmxpwcSSG9LCaJ]AK.1*'2[e\^nn76:9;6=HW9Hofo@=D<30.03565420.,+,,+--,*.0.)%!!#+37422430.255456863445="$$%#!!! #$! ""! + !"$%'?),-01/+-120/00//.,,-,**+*++*)*-//0124420.*,.+'%%$##%&&'%%(*)(G'(''))*-+(),,,*()+,,+-.-++-.--.//.--++**++)'&'''(()'!#'))*,--,**)(#? "$%&&'##$$#&'$&-, 3( "##- 09>D<.<)"$%%''&&')+*)*)(())'),.0/,+./,()*+,---/0021.,++$%&).0130-/121125650(.3221146329:;;>@?@??@EFJLOQPPR\22//0.00-,/22  !  !!    +  + + #+.+&"##! $((  w#(,,+.035#$$"""#%&)21/--*!&%   +/  " "$%*$ &)%014G3ҍ8c W7"F'( + 8ȅ̅gȳHJNACILNNOME;=CG! -          + + + e     + +          +  + + + + + + + + + + +  +    + +    E !"#!!"  """(#"  "%#%&&$"! !"#J""#$##"""'% #( 7A?$''$#"%(1Q`1aѸ􁇈%E7̄˅ĄĄ_¾Ջx{kV`egZQF85jns;ng45W> -3C]\^LOZWYM8&%:=($'' %,B$ + + +  +  + + + + + +  +R@FBAA?BBBC=643466-/69:94)"9 *-34A)#.,(2-F>//.*+:(&$2&/-/*/3+,BM)/#)=@1,1A<2,(<=6)3*''C49>@LGCH7/1(#2&1,0k4A>@I= %3&-CCE!  +   + + + + + + + ) +   + + + +   C    ,    $ 7' !#$%&,.//14566=!~}~}~}~}|}~}~}}~~}~}~}|}|}~~}~}~}~}~}~}~}~}~}~}~~}~}~}~}~ ~}}~~}~}~}~~}~~~~~~~~~~~}~~}~~}~~}~}~}~ 掟͸ʾ˿ƿھꀞJ +       + +%Wǿo􁈊<9κʻѸ ճTF3 $$#"#" ####$##"###$$##""##"#"""!"##"" ! !""! !  ! ! !! !     #:ȩۮ恇и𸚷ϱͪȃə̿ʚݑ狋搥į񄏜Ⱦ׼̅郂ǸդԼሓמyϦϿ䱖lŽ003369;<><:::99875788:=9/A*))(*&2/-.024320010.,-/0662367630121.D2./11368A!8324677640(',01589:834::95662.)'&%$$%*,-15:DNUY[VY121.-,*(L'))O),+-/.-.-+*()*)))*+*140048672-*%&().322795.,2782*-1.,+%%**((*+),,-23/.3=BBB"&#! ?>CGE@>@AADLJMLA5,YWX`4DPb><<===>???@AAABCDDDEEFEEDCDCDCCDCDDCBA@?@?>>>==>>>=>>==<===<<<;;:;;;:;;:9:9:9:9:9:9::99:99:999:99::99:;:;:9::;:;;: ;;:::9:;99::9:;:;:;;;:;:;;:;<:;;;:::;::;;;<;:;:;:::;;:;;:;::;:;:;<;:;;;:;;;::<<;;::;;<;<;:; :;<;;<;;;<<;:;;<<=<;;;<;;<=<;<=<<<==<<=<<=<;<<;<=<<==<=>==<<<=<=<<==>=<=<<=>>=>= >=>>>???>=>=>>??>>==>?>?@??>?>?>?>>?@?@?@ +??@??@@A@@A@@AA@@A@A@@A@@ABBCAABAABAAABA@ABBBABCBDCCBBBCDCCDCCDCCDDCCDDCDDCDDDCCEEDCDDDCDDDEDEDDEEDDFEEFFFEEEDDEF EFFFGGFFFGGFG HHIIHHGGHGGIHIH +IHHHIIHHHGHIIHHGHIHIHIIIJ IIJJKJJKKJJKJJJKKLLKLKKLLLKLMLMMMLMMMNMMMNNNOONNMMNNMMNMMNOOOQJgoH;:;?CIS]a_URXdaJ<95211258878:;9764123431..1567530/10-021000//0113443112110/15769=<;:9::;;<;6379785/--,-..+++,+*%(-.,+-.--,,.+*+,*,353473/1/-+,-6E$A= @!!90010/14/-.001477654336963341165553433244456>410123343200452354543332012  !!"! ! $!#$$#"!""! !!!"#$%" "#%&'$#""##"#$'('%$#""!!"!  #&'&%&'&&%%&&%&''$! =<<<:876766567667789::?,G*8WE0G5Dra}updsEECV^@CsY6H[Tpc4XB25A3= -?J39I+$#  "'#"#!  =83464/'#$'# 459; "'0>[[W^_^db[VF@CFJIH@=7Nh.Uc3cf9?FA^[JzU[Hggic[TN`QNN]x\YAQKAg<;<>><=>AEGGGINOONMP+-010-/23320-.001) "" !!      + + "),(#!%$!!%%+022/1%&"'%$%1-$!$-1$"   !"!##%$'')/*@ڦ@ +O, +WÄDŽ̈́΄τNM:879;?HQTQGDHL>& +  &          + ,  !          +   + + +  + + + + + +     + +     %'$$% $*!J $$#$&&$##"!!!"#""$#$&'%$#$&$%)#4,* (.)0;8LNvjKfW ++>7y7ԅ҄[ą4'NԍzcW\fraLA89rpp:B0+-.00/+($'/2561-?&%276@).:8-1%  (%6-879 $(%42+H/50FAD@93D=200;O:7(2-%6!"#$>6562#!9%+@8. 8/$ *" ***.55*-',   +   + +  + + + $      w   +     ' "&))*,1321/1 ~}~}~}~}~~~}~}~}~}|}}}|~~}~}}~}}}~~}~}~}~}}}~~}~}~}~}}~~}~~}~}~}~~}}~}~쀃~~~~~~}~~}~}~~~~~~~~~~~~~~~~~~}~~~~}~~}~}~~}~}~ 铚½ϼǴ˾½"ě?     %ƀƽԂ󀂁eۂἲþ7ᐹǀֲ֤T? !#"""#"##$##%##"""#"""#$$#"#"#"!!!"!!!""#"!!"!!!"!!!"! !! !!! ! !  +           $K㏹􊡁Ӛʼ̦ʰɽ梂ҝ冗Գԩɻ¥ዛڸۮۣی˥ί؅ȓܨ߻م̼ڥfȷΌӽſѱǻ@88;>==;:99:;;<;;:8779;<80F,(*+)2+/,/1343200/,+*),27535222.++*M<,-,-/42)%&%$')**)(+/27:;3('-47899CIHD?:9BIFB=:9<>47=:7664)'***(%$(/5=KLOZ^a^b2661-*(LKIJ(+V,02**-.,,*('&))OO'*,16238;1/.?DHNO?;3*-c6>;<632**.+(-11/**..-++02.,,--)$)+($##%&()*+--.//11159@DB!"# !C??BB??@B>=EQTJ3'WZ^ai8EPy==<<==>?>@?@AAABCCEEFGGGFFEEEDCDDCCCB ABBBCCBAA@A???>?@@? +>==<<=>>=<= <<==<<;;::;:;:9:9:9: ;;9::9;:9:::9: +9899::9899:99899:::9:9:99:9::;;::99:;::;:;:::;:;:9::9:;::;;:;:;::;:;:;:;::;;:;:99::;:9:;:::;:::; :<;;;<<::;:;:;;<<:;:;:;;:;<;<;<<;;<<;<;;;<<;:;:;;;<<;:;;<;;::;<; +<;;<<;<<<;<;<=<<<;<<;<=<<<==<<<=<<=<=<= <<==>===<<=<<=><<<=<=>=>=>=<=>=>==>>>==>=>?>?>?>>>?>>?>>??@@??>?@?@?@?@ ?@@@?@@@ABB@AABA@A @@@ABAAABAABABA BAABBABBBAACBCDCBCCBBCDDDCCBCCCDCDDCDCDDCD EEEFEEEDDEFEFEFEEFFFGFEEFFEFGFGFFGGFGFFGFFFGFFGHHGHGHHHGIIHHIIIHHHGHHGHIIHIIHHIJHHIIJJIJKKJJJKJIJKJKLKLKLKLLKLMLM!LKLMMLMMMNMNNMMMNOONNNMNNMMNNNONONOSNNOOOQE;976:FOUY[]_g4)" 6432235889756789:965420246651,/5783.-,,+,,./00-*,./11210/20/02358::779::99::678541/-,,-../..00/.))-//./-,Q*)++-23/)6@>7253/,+*6'&?9 =754313554344455688778880.178655563269 555565421641232@4334445520146433100//1 !! !! ! ##!###!  "##$%'$ !"$$!   #&')))%#"  !#!!#%%&')**(%$%'(())()(&# ><:98655321357878=E?:?:27'()(''>/,+,,,-.,-39978642/01000./1233257764435-1.01248:;@DEGGD3NLJ3:@TVS;|oasbq54445556567766556777676777676778887787677767666776776777666777655676 +5666556665656654445654454553334344434323433233232223223gf8332deedcc12e2e2dbccc22caccdbcbbccdcababcccaa``bbb``a`a``a`a`aaa`aba`(__]]^]^_^\]]]^__^^]]]^^__]]_`]^]]\]\\_]]\]\[Z[\[YZZZ[YZYXYZZ[ZXYXXXWWXYXXWXXWWXXWVWVVUUWVVVUUUTTUUTTTUTTUTUUTSSSTRS RSRQQQRQPQQQRQRQRPOOPPONONOPOONMNONMNMLMLMLMNNMMLLKLLLKKLLMMLLKJKKKJKJKJKJIJJJIIIHIIIJIIHIIIHGHIHHG FFGGFGFFFGGHGFFFGFEFEFEFFEEEFGEEEFGFBV͖pZG`I2Z|}txvnpwss@JBX9ZqaqsH5-:E<]K>KP1945LIC/! "%$##"#$$#" :7541.,'"Ft3( $%K[Yc^Z^]^eeEA?;A>8O4V4hlc8C@<>E:pwIIhF#NdV>.D2<$"&*#-;%5JZ[]crv{MzWa\<825ea_jW7S>MMUVQPZLJSPc`_V^dd`>FBr[:76O<# )KG/A6pH4%HcXC(/*&+?8G"$%%$#"#"#%%&$! !! !! !!#!!"&((*,/.--,+,./.+,-,,-*+.//.a/.,,.2210.)''+-..-,,,+,)$$(*)%%*)(&%%&&%&&'))'''(+.+'(*))+,,--,,,+**++,,+*+*)**'&&)*'%)+)%>C%MNPP)*+**(&$%$"C@"&-$&%# !$$#%+20.)%$! #"#--&$%$$'&i'&##')))+//.//--./--+,.,--,..02200110/121..($',.+*,.023447991*4659@DA@@?>ACCDHKLKLPRSUW.2320-/34532.+.025P!###!!! ""#""! !"!  #  +  +  + +$*)'" %$  !))*13323%%$$*'&"#'.+ l   +  #%"$&*0'7ZT#bf $- +¾j͸φ:5215>GKMONMK! + P   +  + +      +   % +  + +      #    + + +  + + + + + +  + +      + + +   y  !"" #)$"'$$   "##%&'&%$$%$$#  !$%$(+)*& 566 !#2:@0[VMnf[xt񆈇(>PڀMygdhqsdWE6dabcfd;1+FZXRWVOQRKJ)2)/);.3875%+(C6 !*(0()#H) + -=9'  *&91,2>  +      + + +  + + + + +  +  1      ]   )+..   +    + +V!$#! !$%&)+-,,03455~}~}~}~~}~}~}~}|}}}|}~}||}~}}~~}}~~~}~~}}~~}~}~}~}~}~}}}~}~}~}~~}~}~}~}}~~~~~~~}~}~~~~~}}}~~~}~}~~}~~}}~}~}}~~}~ ؿ½ȻǾ񀆋򁇋λȾƼ(ٸꅥA  +   + "O̀ݼƾߣ怿࢒ʹ²N5""#"#$$#"#"#"#"!!!"!"#""!"! ! !     &O羷ʳïӋ͸ʬ攒捒ۮ緥́˪֩ãРǾי􂛀͞ƈȶ1ѳތ÷P÷Ǯ󄊌);79:8899989;;;:87667:<<91%9/,*('6,,/45553/-)K.885530.UMGDA;,'''&')*(*.,('***+,*-2572(""'076525CIGDC=>ACDB<==<<@@;7668934640$0<=>?@ABCDEDCDCBBA@A@A@?>?>@?>>>=>>===<<=<<<=<<;:::;;:9:::9:;:99::99::99:::9:9:::999:9:;:; :;::;:9:9:;:;: +;;:::;;;::;:;;::;:9:;:;;;:;:;::;: +;;;:;;:;;<;:;:;:;;<;:;<<;:;<<;:;;::;;;<;<;;;<;<;<;<;<<=<;;;<;<;;=;;;<<;;;<<<=<<;<;<<;<=<===<<=<<===<;;<===;<=>=>==> =<===>>>=>=>=>==>=>>=>=>?>?>>>?>?>>>??>>>?@?@??@@???@ ??@@A@@@A@A@@@A@A +@AA@AA@AAABABBBABBBAAABABCCCBDCBCBCBBCBCDCDCDEDCDCDDDEEDEFEDEEEFFFEFEFFEFFEFEFGGGFGFFGGGFGHGGGFGGGHHGGHIHIHIIIJIJJIJIIJIJJIIJKJKKJJK LLKKLLKKKLMLKKKLLMLKLLLMNMN OONNNOONNNMNNONONDMONOLr{GB>:;@FGJTZ`e3'B!!81-/39= 97467::53222343320,.43.+()(+*(,./,()-/00/011-,.146798779<:9:<;9982-*+,...-/00/.-+**+-+,-)),.,))++,7AA<:9145<=6;I$;7 ;8565763//0//34575355741/1553334545234563113335423420136632333311!!"" ! ! "#"!"! !#%&%$  "$$!"" #&&&'(&&%#! #! !$%'((()('$$&'''&&&())(&# =97655546876;C>9IGE$H<0.,,.00.-1531015642244201233321 2345554556%79;==>CH(O(PriFG&PujaR;]oxcl}mp55565676767876676 56677678887898998887676767676667876677767655654566545456554445544555445454 +34332343343432323f2f4e222d232211cd32eccbbcbdddccdbbcbccbaabcccba`aaaba`aba``aa``babaaabba```a``__`_^]]___^^^]]^^^__^]^^]&^]]\\]]][[\\\[\\[[Z[[[Z[[[Z[ZZ[[ZYYXYYZY%XXXYYYXXXYXXXYXWWXWWWXWVVWWWVVWWXWWVVUVWVUUUTUUUTUUVTUUTTTUUTUUTUUSRTTRSRSRRSSSRSSR QQQRRRQQRQQQPQPQQPQP OPPPONOOOPPO +NNNOOPPOOONMMLMLLMLMLMMLLLKL KKKLKKKJJKJJKJKJJJIJIIHIJIIIHHHIIIHIIHHGHHHGGGHGHGHG EFGFFGFFGFGFFGFEFEFEEEDEFGHD\lQTtjdWKhr6VyrksswzyAHH|h@H_kzm\KEC?AF2QZZF9L2:>P:1  9::;=!'*('%%%$"""!  984.-.0?S4%(Geb^Z]YOLH;LB4@;_1!%aANP^ndkngh{C?JNEJFYBM1/)%=S[a;?C@:mcO<25>:8[@6;liVDN21BH?30^[14^ET3K;@/U]Y0=;.09;/1\G=354*3+:LD.<0K>QZPJ&(3iH$$JTJO?O%+-00.1236554/.1141./012110/-*)*-/59*"!,45225989:9979864337C6"%(*)(,'#,$+(#&#%&%#"n&'$#$%$&'(*,.1110---+,-,...)),-../2353444127743,"##),,-/0134248;>9*4=99<>?@ABDHJGFJLNMKNP,01220///025531-*/6;=!  !##"!!"! . 0+'# + + + + + + +Q   +$*)&# "# $$! '/0.-2.S#$!# $1 1  + + + + % ! #!!$%'2'6. U2" .HƅŅƅ ɅkׄԄ7Ƨ׾F>856:?ABGIKN" +       + + + + +   +   + + + + + % + +   +           + + + +  + + + + + + + + + +     +    + + + + +  5!"#! $)$ $)$,(&,%  !"""#$%%&%('(a'&&%&&'(&&*+)4ME)'>ZYO<2Q]`M^v,% +ք ҄΄#ɇȀ¿rI~kir>ArYTPD9fFL(@VZVLGMNRSQ-0.J=34?FQH:.,*%'*/56''!!%  +   + +  # +/tMIEAEB95/#.-"'$: =+56>F=BE?>G'$,,(6/6#&  +.2 62' +"90+'-'*"62/)%".20#"44,&*&!'5<3& !/05')6  +    + 7 + + + +           + (*,$#    + +  !"#$%$&')%%(+.,+,-!"~}~}~}~}~}~}~}}}~}~}~}|}}}|}~~}|}~~}~~~}~}~}}~}~}~}~}~}~~}}~}~}~}}}~}~~}~}~}~}~~~~~~~~~}~}~~~~~~~~~~~~~~~~~}~}}~}~ +}~~}~~~}~~}}~}}}~}~}~ ⇎ɯɿž%™H    +   "M󘜌ʄŀ h͹.ן̛־ɾ_L3 +"#"#$ +#$"""##$##"#"!!""!"##"#"!"! "! !!!""!"""!   !  !     +   +7ڨѪ򖡥€㞁ئսٯނŶ޻ځն߿Կ̫j̺Ёּ˹;8:9759:;:976469:;<:4-"0)&&&(")-011344221(;G/6651XQMKIEA?5#! !$''&$%&&'((&'((())**.1.&$%',3542/8EMJGB<06BEC==:88789;<:1*6HPW]//256786UN-0034562,-//13.MJJNSRPNOPNMQ-12496/...L,8DPWb3L5,.11242-,'$$,4777:>?@:72& '&$"%%"$%###! #%))+*.38>BCAEJ$""#$#$HHLKHLLOSI539AAtohnDWyv?><=>?>>? +@ABBBCCDCDBA@ ?@@@??>?>??>=>>>=>???>==>>= <===<<===;<<;<;;;:;:9::;:99:9:9:9:9:;;:9:;:9:::9:9:;:9:9::;::9::9:;;;:9;;:::9:;:9:;:9:;:;:;:;::;;;:;:::;:;:::;:;:9::9;::; <<<;:;;:;;<<:;:;;;:;::;;:;;:;:;;;:;;<<;:::;:;:;:;<;<;<;;;<;<;<=<=< +=<<<;<<===< =<=<<<==<==<=<==><<==>=<=<===<<==<=>==>=<===>?>==>>>=>>>==>===>=> +=>???>>>??>?>==>>?>??>>>?>?@@??>>>??@@@?@?@AA@@?@?@A@@A@A@@A@@@A@A@A@ABABBABABAABABABCBBCCBBCBCBCCCDCCCDEDCCDC DDDCCDDCDDDEEDCDEEDDDEEDEEEDCDEFEFFFGFGFFGGFFGF GFFFGFFGGHGGGHGHGHGGHGHIGGGIIIHIJIJJJKJJIIJ(IIJJJIJJIJJJKLLJJJKKKLLKLKKKLKLKJKLKKLLML%KJLMLMLLLNMMMNLMMMNMLLMMMONMMMOPONNONMONNNOONuOPPONONPPOPOMhmOA9>@ACGLQUZWLE@==3*.59::;:7883244321/..%$)-,,,)()*'$(*-./.,+-/00.../0101/.0213789888:99:<;56730-,+,,/1/-,+*+)((),,..--26:96:AB@=DE0$'-24149668#86700..110..035;741.03323201476264467301521.-,/024433_ "#!  !!!!"""!!"!""##  "###" "$#!!%'&#" !!!"#"#$%'(('$%&#!"&&"!#$%&'''(('%t$%$%&()(('''%#;8767789;A@9AG8/6@CCCB9/++,.382/14321222110023322456534433222345689977:?EECCI*2WML[1:]`=12Jgkxsvhr67676678876766676767 8887887776766789899:98887767767766767 6787778787676555655656554466566545654544545454 +3344334434343232322323332223223d232332dcdeed*c22dccdcccbcb1baacdabb`baabaaabaaabaabaabbabab``aa__`_```^_`_&^^_^^]^___^]]^^]]]^^\]^\\]\]\]][[\\[\\[ZZZ[[Z[ZYZZXXWXXWXXXYYZZXW XXXWWXXVWVVWVUV +UUVVUVUUTUVUVTTUUSTTUUUTSTRQRSSRSTUSTRTSRSRQRQRRQPPQPQQQPPPOOQPOOPPOPOPPONOPPONOONONMMMNMMMNMLMMLKLMMMLMNLKLLKKLKLLJKLLJKKJJLLKJJKJKJIIHIJIIJIIHHHIJJIHGH GHGHHGFHHGHHHGFG +FFGGFEEFFEFEFFGFEEEFEFEEEFdGHEOϖV|we]o^EXhjk:yGaM[ruomcUMDHGA<8ehii?H{UTR91*"(1gHXcahlm9@CGEP_@@<:NCVSIA3\V6#"'F15A69JWE-%IZ4"9_W169A38NMO\SNE@?>5[\N-"+I.QDIWRK=UN;%%0===:,0ZJ5CLC001T),]9!  ")-.//123241.,*-//0-+/0025436510.039=6+%#'253447;>=::8664259?"%&&%""" !#"!""##$#!!!#$&&%%&&%'*+,)&#")..-)())*.----)))***+/.*))+++,+(.0/-,,---,,,+-+(()))*++)('&(**))('&%%%')+)()*+-,+'&&''')*,''**)%#&'#$$"&K&(('&&&%&''))'%IGDCC;3-*#*+)-".+B34C! !"'( !$$$&&&('),.00/0.++-.02-*.,)),..-.L03565793/584.$&"#+002334699:>A@29;6:==CFHIGGIJILPRQ(+.2432311330.0446514:<=E! ! !!  !!! !"! +   5/.,'$  + + +   &/.'#"##!%)'""! $(,.,*$ #&&&%$%$#& ' ).7)   +  + + / + + !!!((%'2܌@/60a6Ądф+ӄӄ[M>4:>?@ACCC?1!    + + + %   + + +  K + +        !         + + + + + + +  + +       +   7!!""#)& ',! '(&()#" "$##%=$%%&'''())(()+--*(+<:58+IF,#%?VWc^j7 & $ń*f`juAu^d_YLZBQWY]Y:,=EFJ*T0^E@IRMLJA:5--,)%". ./     + + + + + =qOSNHFD8.*%',G.31?/;D=?DG#&),+8?%!  +-(/+$.-/%+ -3%(-5,$&+60-(%$$32,$*")4+#!3- +R %A1*0)& (      + + + +!  +       + + '%#""# +      + + 4  #&$!%())(''&%'+--   "#~}~}~}~}~}~}~}~}|}}|}~~}|}~}~}~}~}~}~}~}~}~}~~}~~~~~~}~}}~}~~}~~~~~~}}~~~}~~~}~~}}~}~}~~}~}~}~}~ ჉ӹǽµȺĿǼקnD +   +$H~˼܀з)ȳHº҃׻߃\C +""#$$#"#$###""#$#"##"""###"!"""#"!!!""#"!""! !!"!! !" !          +!AӼզˀϘܙͳٸǷ㵟ŞЬַٓпϡḵ̌ט耦ԅؘӣ;ѽ ²ɂԵ]ƿ;;==;:<;9888999;988:-863'3-+)(/"&+./034221,%E.4_VTPKIGFD@><.$##$%#"!#''%$%&(((*-*&%#"*6:855:EKJC4>HFGHB?>EIFA>A?<:9:974/6ENTW./03644.-,.241378630,,-.0/H<;@HNQRQQPPLQ./3:4-QMLJ53@EIEDE5),--0/.,*)(*1455444 664231&%)# <!!"!  #'(),-16;>?ACEDCD$&&&'&MLMLORO<+.g;?wxz@N_kq@>===>>>?>??@??@@@AAABBAABBA@?@??@?>??>>>=>>??>??>==>>=>=< ;;;<<;<;;;:;:;::9:99::9:9:9::999:;;::;;;:;:9:;:::;;:::;::;:::99:;:;;;:;;:::;;:::;:::;;:;:;:;;;::;<;:;;;:;<; ::;:;;;<<;<;;:;:;;<;:;:;<;<; +<;;<;;;<<<;<=<=<<=<;<=<;<===<=<<<=<===<=<<<= +<<=<<===<<=<=>>>===>>=>==>==>===>=>>?>>?>??>=>=>?>?>??@??>>?@???@@?@??@A@?A@?@@A@@A@@A@A@ABAAABBABBAABABABAABBCBCBCDDEDCBCDCCDCCDCDDCDEDEEEDEEDDEEEDEEEDDDE DEEFFEEFEEFEFEFEEEFFEEFFGGFFGFFGFFGFG +HHGGGHHGHHGHGH +IIHIHIIHHHJIIIJJIJIIJJIJJIJIIJJKJKJKJLLK JJKKKJKKKLMLKLLMLMLMNNMNNONNOPOOONNNONMNOOONOPO2PQI[fWIDFGEEECGS\UF946:4./222;8999823540-,,("#)+)(&'&&''*--,+,-000/)&*..//013346989987787997310.,+')/37:85331000-,02351,8>==;99!#C2(-1586223679640.0210100036:<:887483.-.0233454112666A342133320121331---../2531 !!! !!!  ! ! !"!!".!  #$%&%$$# "#"! !$$##$$%'&&')&$%&%$%&#"!" $&'&&&''"###$$##$%&&%%#! ?>=<@DCBC806CGGFB80,+,,.1300210244208233223644767754212566677787:DKLLO=`>JPF<\W2E?V?Rkwy}jx86766767667676667877787787776776667676789:98887667788777676788787 88777676767656565656566545454554454555434343f3343323#23334gf3fedd2dee2233dcbcddd22b1ccc1bcdcbccbabbbdbbbdbaba`baa`ba __`_`_`a_^_`_^_^^_^^]^]^]\]]\[\][\\[Z[Z[[[Z[[[ZYZZYZZYXYYXYXWXWVWWWVVWVVUUVUVVVWVUVUTUUT SSTTRSTSSTTTSRSRRQQRQQRRRQQQPPQPPQQPPPQPO NNONOOONONMMNM NNNLMMMLLMLMLKKKLKKKLKJKJIJIIJJIJJJIJKJIHHIJIIIHGGHGH GHHGHGFFHGFFFGFEFGFFFEFFFEFFFGFGGGFXxrjiIu?Bkb)?DF]L5I`joqtqvse\_dC7:b>.>dNcneQ80()!+ <!!!"!  !$&*-+)% !$$"$%&'((''(('''1[xhd``T{j>GKIGiF7JE028.'=LM_^gqp=JSWFG5 =B;M42I2653=CZBRGD@=357SFCOF40?@-,D-,LKo&.:6EOZ< 6;R!ʄ ʄЅπ̾ZE?BCBB>97==.     + +  p    + +   + +      ,         + +  + + + + + + + +       + +  ' "'&&' '**,*#!!! "!!$%&'%%#$%&%%&''''.21/.'D.4/',JC%61B0BWcizɮ끇3 +':>F߄S҄8Ȅ?¿ k~rgiy}pdVPO5QV+.G7',*4/'7HKPQRNOLC>DE+$&=&!-F7FJ@-  + +  + +  + + + !DWKJHH/-#!, "*#-%! !0%!*'%  *+9 '-G1"/:'% 584F + + + +                R +    +  + '**+*'&&&(&%   + +   + @ ! +  !"%'(& "$')))&  ""#$ !##~}~}~~}~}~}~} |}}|||}}}|}~~}~}~}~}~}~}~}~}~}~}~}~~}~~~}~}~ ~~~~~~~}~~~~}~}~~~~~}~~ ~~~}~}}~~}~}~~}~}~}~}~}~ ߃ɧʽؼꀂĿϡ򄭹G    + Rзӻ{ѷ񰃳ԙծ]; +##'$$$#""""#!!!"######"!"""#""!!!"#"!!"##"!!"##"! !"!"! !        +  "4ɱ勯ʓ҇ҋ˵ʃʼ݄ĩɐ䆊ۯг̖цô֏嘡⭍ٴ⎄ۃՈ􉒑Ϧڄ黤Ǻ@׷篥¿K?:<><:999899887668878876784,6,/-+2&-0111220.R+,SWQNNLIHFEEA><7&!#$%# #'('$$&%##&%'+0-$!$'3;6445;GLF:=DA?AHFHKE@?<>??=@@A?2(C..//0/+-0-**/88534775332.,+.1/G7:GQUSRRPRVYVSUT,.MDADKL/6;=<764(#*//Z,&&**()+../.../10201-#"$$ ! !!!#$" #!$&),,.3689;?BA@CH'))(&(*PNMTO8P.:?@???>???@>???@@??@AA@@AA@@@? @A@@?@@@?@?@@?>?@@??@?>??>?>=>==>=<;<;<;<;:;:9::9:9: 9::9:9::;:9;:;:;:9: 9:;:;;;:;:9:;;:;:;:;:9:9:;:;:;: +;;:::;;:::;:;;;:;::;:;;:::;:::;;:;:;::;::;<;::;<<:;<; <;;<<;:;;::;<;:;;<<;<;:;;<<;<;<;<<<;<=<=<<;;;<;;<<<;<==<<==<<;<===<=<=<==<=<=<===<<<==<===<=<<<=<>= >>===>===>=>>>==<=>===>??>==>==>>=>=>===>>=>>>??>>?=>>?>??>=>?>==>?>>??>?=?>? >?@@??@?@?@?@A@@A@@A@@A@A@AAABA @@@AAABAABAABAABAABABBCAAABABABCBCDBBCDCBCBDCCCDDCDDCEEDCEEEDEEDDE DDEDDEEFFEDEEFEFFEDEFFFEGGFGEEFFEEFEFFGFGGFFGGFFFGHHGHGGFFGGHHHIIHHGGGHGGHIHIJIHIIIJIJJKJKKJKLKKJLKJKLLKLKKKJJKLLKLKKKLMLLKLMMLMMLLMLM NMMMNMLMNON ONOONNONNOONOPOPQPOOOPPOPQQR`TUUQPMC=AQW>0,.5721/.39:7760/32,)),*'&&(+-**(&&())&(,..-.,,-../) $&'(*-/011122..12.,-17;984334652038:<:97445Z2344003.)'6?A?;9:;=> ##A1+03475.*+38678414543581./00135775335875212456663146542.-.-04343-..-/363/--./0./1 !!  !"! ! "!! ! !#%&&%$#!!"!""!#%('%#&'&'$"#'&!!$%#"" !$%&%$%I$!!#$&&%&%%'&$""$$#"#$%#B:7DH&KE<0...,-/.--.01233022112544339<96458986665687;JOIHVbFW)=d=55:@YNy}wv656 7767767766776767677899876676667889989:878788788878776776787666766678766655655677666566655665655654566776565454 3444343334434333h443 d2333223334343ff2233e2edd22ed c1cce2cccbbcb`accaabbbabbcbabaaaba_^`_```aa__a``___^]]^]^_^^^_]]]^] ^^^]\]^]\]\[[\\[\\[[[Z[ZY ZYYXXXYYYZ[ZX WXYWVWWYXW!XWXWVWWVWVVWXVVWWVWUVUUUTTUSTUUTSTSSTTUVUSRSSRRRSQRQ,RRQQQPPQRQQPQPOPPQQPPQPPPOPPOOOPPNNOONNONNOONMMMNNNMLMMMLLMMLLMLMLLNMLKLMLKLLKJKKJKLKKKJIIJJIJIHIIIHIIHIIHGGGHGFGFGFFFGGGFEFGFGGGFFFGGFEFFFGFEFGGHFLZ[VT|h`UF:g;&Q8F.@ky{ouxwlilmp_U4H,QIQZlzoSIOZD18689;< "! "#$&&''% 3129 :8 "#&'),26;=Zwg\XXQ1@ENNQM:R2@3-3;?6%:6b]]8@NZl92D>T_]O69%G33STzaDE0%d`CG[Tj]VIkhH.*>5<"UiC90?AOQZ]II?WKW6/KP=GZ6'Q>C %&$,B0;]%6;5C61];FF1.E_\>la_WC11132/.--.0100,+,*'&%"$$%&))(+/3752./9:;;4'!"-75479;@#>:879>B"%&('#"!#$&%#""$&'&#$()+,--+++,--..///-*(#&,-*(&"!&))(('&0&''*-..-,(&(+..-(*01110/110.-...0/../.++**)*))*,-,+))((())*))(('('#$()()*)**&"#*.-***+)&!$),*'!:$%$HHIJKLKJJIIHGKE6,&&(*.($))&@2+" @<;91(B!-(*;WXXNSXVMHHMS@4$/!?69@NRF2.15' + +     + *BSFACAZ. )+/033&2   $D96!&3;:'&*)$) 11J8%&=7%(84>33.C9 ! ,8$$..24++#)$"%%)(  +4 #/ $$!=#%$ &77'?078% + s +     + +   +  +        + +  + +  + $$&(())('''%&)%   +  +  ! "$%&&'*+$!&+,+++)' !#$##~}~}~~}~}~}~}|}}}|}|~~}~}~}~~~}~~~}~}~}~}~}~~}~}~~}~ ~~~}~}~~~}}~~~}~}~}~~}~~}~~~~~}~ ~~~~~~}~}~~}}~~~}}~~~~~~}~}~}~~}~~~}~}|}~ 煉ȹýȶԲȳͰE<     LRʽ؀ǹLBʼɲŅҚ}V + #$$###$""#$$###"##"#"#$$#""#"""!"##"!!""!"!"!"!   !  !      +/ѷģŗÅׯݛ˂̼Ž񂐖ŕ빊ĉ”֧ˎ˫мɲМσꍺƙ›͐ņڃۄ!߈ÑԤ΄ɀƮiɶϽ9;88876789:99:7687776P78-,&-/04%+/23012.KFIKKJIIHGFGEB?;;80$#%$#$$%'# !%&%%%'('&$#',1.(('*3764679EKAIFFQ`O[@?@@@?@?@??@@?@A@?>>???@@??@@@A@A@??@??@?@?>?>>???=> =>>>===>==<<;<;:9:9:99:;:9: +;:9::;:::;:;:9::;::;::;::;;;:;:;;;::;:9:::; :;;:999::;;<;:; +:::;:::;;<;:;;::;;:::;:;;:;;<;:;;;::;<;<<<;<<;:;<;;;:;<;:;::;;<<;:;;;<;;<<<;;;<<;;<;;;<<;;;<;<===;;;<=><<<;<=<=<<=<=<<<=<<=<=<= >>=<<<=<==<=>>=>===>=>=>>=>==>==>?>>>=>>===>=>=>=>>>???>>>??>??@>?>?>?>?@@@??@@@???@@??@?@?@A@AAA@ABABABAABAAABBAAABBBCBBCBCCBBC BBCCCBCCCDDDBCBCDDCDDCDEDDEDDDEEDEEEDDEFEDEEEFEFEEFGFG HHHGGFFGHGGGHIHIHHIJJJIJJIJJJIJIIJKJIJKLKLKMMMLKLLKKLKKLLKLMNMNONNOOONNOPOONOOPOOPOPJOPRRO\v`XWXSE<>HPL;35<82//13699501210..($&'(*,*'(*++*'(*)(*,--,,,+(+43/,+*('(('(),,+,,+,-./2477521487669<;<<<;9865568651,).6:=>=933>@A!!"F604 9678667::""! "#$#2\]feaZ}o99;GFCADKx:,-@/0:),/46-&MWXj>G;299R[]R9I60,B<6;a\biFGX^9XHVis[EPLH8/=>9LT1C&0/@|V4FGGQG:;QF4TN@8dZL?&*4+/ ',6<(A/[c1%DN"UEFF=;%,+$?V@W-TSA1.022000/1210/.//,*(('&%&&((&'*,-,++17;?;3+'&)148>?A?<;99uм񂅈 += s܄ހ$0Y{DDB}ucXVC6 6B:PU`e^[QU_^VP\KB+0P7@@<5?GB77<91   + + ACIKJBS=%(&,,)),2K & 486@%+ ),-$$!! 013;%&7=%4&0;E3(.)$$#*3J +$>'(&'.%+'2-$,&# + 62":+*-' + 3&,+1& + +   + + +  +  + + + + .   ;    +  + $%%')&')'"'    +  e   ! + !$'(('(+,,'!"',.1 "##!!$""~}~}~}~}~}~}|}|~~~}}~}~}~}~}~}}}~~}~~}~}~~~}}}~~~}~~~}~}~}~~~~}~}~}~~~~~}~~}~~~~~}~~}}}~}~~~}~~~~~}~}~~}~}|}~ ɺ㊖Ħ׾?   +  (Yʾ¼Ǵй´䋫ųm  $#"#$#""!"""#""##""#$$##""""!"!"!"!""!""! !"!   !!!  !!     +    !Aݬٺػ׭ԗβƿÜ􅏖٩̟鏄޻߉鉄ɞԵኢƣɐԷĠúĨƱުü 887767558:899<99=;::778:88)&(.24>/10352PB@BDIMMKJIIFCB@<:787,$&$##"#$&# !#$%&'('''&'(+26942.**,47:;DPF9@EFDGJLLHDI;8GKJJMX1S@085/RKL).0.135445100210.,,./TKLMPPQRSMHD?88;8:HR.29=C`')**E6L07(',-0-(('"$&*/5<:5798695%"')*+)('$#$#!  !$)/.,--.027974:BJNR,/.+MKPVN@6j7>DEw@AA@A@AA@@A@?@?@?@@@??@@A@@A@?@AA@@@?@AA@?@@A@@?@@???>>?>??>=<<<=<;;:::;::99:;:::99;;;:9:9:9;;:;;:::99:9:9:9: ;;::;:::;:;<:::;:9: ;;:9:::;;:;<;:;:::;:;:::;;:;:::;;:;;<;::;<;:;<;;<<<;<;<; +<;;<<<;<;:; :;;;<<<;;;:;<; <;;;::;<;;<<<;<=<<<;<;<;;<;;< ==<<<==<<;<=<=<<;<===<==<=><=<<=<=<<==<<=>=>=<===>>===>>=<===>==<=<>=>>=>=>=>=>??>>??>>?>>?>>>???>???>>? @???@@??>?@@?@?@?@@A@ AA@@@AAA?@AA@A@A@ABCBAABAABAABBCBABBBCCBCBCCCBBCBCDCDDCBCCCDDDCCDDBCDEDCDDDCDDE DCDECDDEDE DDCDEEFFDEEDDEFEEEFEEFEFGFFEFGFGGGHGGGHGHGHGGGHHGHHIHIIHHHIIIHIHHIHI KJIIJJIIJJIIJKKJKLMKKKMKLKKKLLLKKLKLLMLLMMLMMMNMLMNNNMNM +NNMOPOOONNO POOOPOOPPOOPQsPOOOPQPPQRF_vWU^^QHKV`,J46@<6.+-142,&%)+..-*'&##&))*'&(*+++,-/11122111/4665787532.((''(''(*,01/1467998332258;===>==<:7667898216:<;;3.(5>>@ D$F,&+/-*()'(+4;86540.28731131.120/1462//164010157843/0.0.,,/124200121100../01M 4225430032320333324 !" "! ! !!!"! !$#$#$$%%%&&$! !"##""#%%# "###!""!!! !#$&&&%$%%$%%%$#"$#%(%$%&'&&'&%%%$$$#$&&')*(C8./0450/0/0001323322468865457;?AE?745689:998878?FKFB.GTXvo<34:CaN <4566676678767878 +9977888778789989:;:99:999787888987888778887888776665666776777666776567655665 +66655656545 +6565556554544554344434323434343343 232223323223d2232,1222eedddcddd221cccdcdbbcbcbccdcddcc1bdcbbbca`a`a`^_`_^_^]]_`__^^_^^^_^_^^^__]6^]]\]\\]^\^]\[[[\\[\[[[ZZZYZYZZYZ[[[ZZ[ZYYYZYXYYYXYXXYX$WYYXXXWXWWXXWWWVUVVUWWWVVVWWVWWUUUTUTUVTUTUUTSTSQSTSRSQRRQQQRQPPQQPQQPQPNOONOPPONOONONNOOONONNNONMNMMNMMMNM LKLLLMLKLKKLMLKKLLLKJKKJJKKIJIJJKIJJJIIJKI HIIHIIHHHIHIHGHGGFEFGFGFEFFEEFEEFEFEGFFFWؒWpx=Y;,2p~wgnr}|eGTppxobXHMZinlf^WA/4D@ :9;<=??@BBAA>;::979>! =<:8:769"#"!"#"?3mijf\z]2BMRFDF<6][Q1%,J<7/5;0(+146c\\f__]4QdYK_315[5H2:K55mY_68?<>N'AHeO>4"*20RH6=OP61*,@7Z8>IA??96];HPKNFQ9[^QV4sdM7)"R)!8S?=F$5?6`tV9?T"-;]^OOU`HdTC1*+-/1113510/23/,*))+***''('(*,.013559<>;::2%(27;?><=?AA"$$%$%$#" !$(&"!#$$%')+*((*+-/0/,()+-10//.--/.-,('&%%%')(('()*)***((+..220.00011.,-,,-.-/.---.,*-./.--...+)+++,+,+,--,+***))'$"$'*()*&!"%',//*"$&)''((&JKJKLLMFDGMG@:754559#&%#+50/05< """$%%$%*./0($***054213346555348?=>CHIHKJD?EMT-2433/%*456894004986.-1321124434621467P  ! !##"! )#$'(+0111//+)($   + + +?  %0&"$"&).0,*) %-('$&)#$#%&))("&+!%*6$.  + + + +  +  +   !(.:Mt􊐑 :E#XJ<" ^ÿрͶVOXUE::=8!  + +  +  +   +    + +    +          D    + +  + + + + + + + +      + + + + + +  $" !   #"  "$*'#$&)+*))('&%&*01.* 11AZQ_*)''0J@m݀S1 + Ʉa½{|F}nfTP0<'nTae`ba\\TIPPZ^IS EHRNRH>7.3=EHF@;3%    RMNJ?I/#131)')Ϛ & <<8=673&/+"(-"!(4*0"!#'"#;,4*$+.! 6#"+$S! +(-*,%(//%+8,# *&!6=+.  +$;82/+=0A4  + + +   + +         + +   +  "%&'''))**&$&!! +  + + +  #.)F #&'')-10./-&"(.  !"!~}~}~}}~}~}~}|}~}|}|}~~}~}~~}~}~}~}~~~}~}~}~~}}}~}}~~}~~}~}~~}}~~}~~}~~~}~~}}~~~~}~~}}~}~~}}~}~}~~~~}}}~}~~~~~~}~~~~}~}}~}~~}~~}}~~~~~~}~}~~}~}|}~ Ůʻʾ逋祍򎝞¶⹙ձ^?<"Sɾ¾߸Xiп˽ѽ㌫WD + +(#$$$!"##""##""!!####""!"#"""##""!"!"!"#"!"!  ! ! !!       Dݩބŀ˱оˆޟ˓Ǣм沩ؿڰ݀닀Ƿѱޝإ󂘗ǵ၎ߥȢT݄۝ȵũ¾ķ3퓀9:997678;;836978;;::879998(,*/14D381,KDCDDFFFHIHGFDB@?=<::;8*#$$"!!"%$$$%%%())***)*+,/37;>4+)(,7;;BLK8LLGFCFMQLV351h-,.0243/.11131.-,/--,+++,/1/EHIIHJLHC==><57=@M/9?:53V):=?FV670&'$&*-+'(-17=><<;;:;:9:;:;:9:99:::;;:9::99:::9:9::;;;:;:::9:;;:;;:;:;;;:;;:;:;:;::;:;;::;;:;:; :::;:;;::;::;<;:::;:;<;<;;<:;:::;;;<;;<;<;:;;:<<;:;<; <<;<;;;::;<<;;;<;<;;<=<=<=<=<<;;;<=<==<<<=<==<<<=<<;<<===<<==<<===<===>>===< ==<===<<<=>>>==>=>= +<===>>===>=>?>??>>>???> ?>>>?>>>?>>?>?@?@?@@?@AA@@??@?@BAA@@AA@ABAA@AA@AAAB@@AA@ABAABA@@AABAABBABA@ABABCBCCCBBCBBBCBBBCCCBBBCDDCDDCBCDCD EEEDEDDEED +EDDDEEEDDDEFGGFFGGFFFEEEFGGFFFEFFGHGHGGHHGGHIHIIGHHHIJIJJIIJKKKJKLKJKLKKKLLMLKKLKJKKKLKLLMLMLLLMNM NNMMMNNNOMMNMN ONOONONNOOPQPOPOOPOPQPOOPPPQQPPPQPfQRcae_UNPWV,K<:E"5++,-(&()'*//-,.+(%$$%')((*..,-25754455654566677786761-)*,,++.04899::9755798:?? =<;;::9785754634798=@AB!"#$%$7$&),00.*%$*0110369<400148961123.22443366563/3543520233210.,-.110112 01322>23335432/04 C !!  "! ! !"! "!"$&&&((&%$! !!""  !C"$$#""##$"! "$%&&$###$##"!  !#$$%''&'))'%$&&$#$$%'''))','=3/230110<122133445653346768=A@9557889:::9=<:<=:;<98:<:<=:;#%%$%''+b`mL)A>FQK;9`KA."%GI/)&-&%(/1/--0796ZibNPD`^?E;=3DIR5L+BC;o>4A=4/BBT/>?=~<78V_`TkO8U^9AHm@2;U>cCS;gq:63Ve?-EQ7\;f=SQAUUG@]07*'%(+-/223630-+*))*-,**,,+*/446 35757:=<5*&19@@@ !"$&&'('#""#%&&%$""#$#$&'%&()((**,-.---,*&'-//.--..,(***+*))*+)'('())''+131./../.--.00.-,+-,,,-,++,*(,0/.--,,*)(()('&')+,,+++***))'$##$''(*)%!"!%('$%''&$#$&JILJHKLJJKLE?8/-/23#110-+(1KJ977789!'.0-'(1-.2545l !#!%%'+//.$ -01565431122235:?=:;>4+'%')+-+#(356019=???BEHMLMMNKH'.1246753-08:9982//.12//246201233553.+IH1"  !"""!5 ''()*,**-..-+*(&%#"!   +  + + !*( #"'-/025'$!$&%+!! !#%!' $!/  %(1  #(   +   6   + #%)-9cNJ + H@ +H  4Ȅ+̄-ф҅1لAǯr]\WL@<8.  + + + + + + + 8 +  + + + +   5 + +   + +    *                 + + + +  +  + + + + + + + +  + + 1     ! "!"! &(*&$&(6'&&&(+-.,(53&#>@"('0F4Ilׂ N"~ՄυτƄid~qtHyni9+7(VC_d^W[^]WNSMO^dI)#gW^bWFB1+8=EJKIC:<5,:B#    CB[F2.+,.( 5(#), 8@9./'4/! $*%#$/)&"00%7(!"$:8+.+7> + ?$%"%&,"#!/62)9$.0&,=,,,!8@"47'&)9$0.$23)%6 +  +            $    + + + + + #%''$&))(**&!!  + +    +      #$'+.13320,/)#"#! ! !"~}~}~}~}|}~}|}|}~~}~}~}~}~}~}~}~}~}~~}~}~~~~}~}~~}~~~~~~~~~~}}}~~~~~~~~~~~}~~}~~}~}~~~}~}~~}~}|}~}}~ ۆ̹ƿµ􁉈ן݁ɴ.἟ɴ|       !Yqɸlɼאዉa? $# +##"##"##!!#"""#"!!"""!"""##""!!"!""! ! !!  ! !           +:ڒٜγȻԱ˔¹Ѻ֢д鵻Ȥ՛뉡ѸѠ߷悊́輹󳂐̄ɂ摦βǟ󢗀وļɺ݀ҩ냋 :79<;89;:7633757:::8668767'-),)(6.3KDDDCCDEBDGFCBBA>>=;9DGGJIEEFL)///--/1012/,+/010SGSSUW+PNO+178TGJB?@?ACA?AEIHMR^72SKGEC*!?CUZT18955-'*++-5?EFGJG=1-)+,)+,*%$%$$$"!  "%'(++)*.0024469??>===<;:;:::;;:;;;:;:;;::999:9:;:;:9::;:;: <;;:99;;;:99;;;:;:;:;;;:::; :::;;;::;:<<<;;:;;:;;=<;<<:;;<;;<;;;:;<;:::;:;;<;<;=<<;<;::;<;;:;;::;;<;:;<<;;<;;<;<;<;;;:;<;<==<;<<;=<<=<<<;;<;<=<==<==<=<===<===<<=<=>= +<<==<===<<=>>=<=>>>= +<===>>=>==>===>?>=>>>==>>>?>>>==>==???>=>= >>??>?@>>@@?@?@?@@A@??@?>?@??@?@AA??A@?@A@?@@@?AA@A@AAA@@@A +BA@AAABBABA BBABCBCBBBCBABBAABBCCBCCBCBCDCCCDDCDDCDDCDCDDDCDEDDCCDDEEFDEEDDEDDDEEDEEDEEEFFFEEFDDEEFFFEEFFFEFFGFFGGF EFFFGFFEFGHIHIHHGGIHHIHHIJHGHIHIIJJIHIHHIIJ IIJIJIJJKJIJIJ KJJJKIJJJKLKLLMLLKLMMLMLMMMNNMNNMMMONMLNOOPPO POOPOOPOOPPOPQPPQPQPLQQPQQPPQQPQQNa]c]SVRLILC@@""#$$#$$D*#'(*-*(%(,/027 5431113666425511651/-/1112552,+/44331475310132121/.-,-/.///25642132/0454321023!  !""! 4"#$#  !#&'&%&'&$" !! !##" !!##$%$$%%$##"! s!#$##$#$"""$%#  " !$&'''(''&$#%(&$&)+,)(**'##'$?8;:521011123232333434335655879:966755577;?BGIH2GX9z6:R8UbVcnq87879877788999898787899:9:9878 789899878878787767878877877677676 56667677767656556776545455444543444543334343343334334 +334334334432322333e2d332221ddded22ddd11122cc2,c2dcddcbbbcbaabaaabba`aaa`__`aba```_a``_``__`_^_^^_^]]^_] \\]^]\\]\[ ]]\Z[ZZ[[Z[ZZYXXXYZYXYZX.YXXXWVWXWXWXXWXXXVWXXXVWUVVUVWWVUUVWUVWVUTTTSTUTUTUUTSTSTSSSRRRSUSRSSRSQ PPQQQPPOOOQPPOPOOOPPPOPOOMMNNNOOONONNMMNMMMLMLNNMMLKLKJKLKJJKKKLLKKKJJJKJKJ IIJJIIJKJJIJIHHIHIIHIHHGGHGFGGFG FGGFFGHGGGFFG FFGGFFGGFFEEFGGDVym^Xe<9N~||~Fyo{J#8Jvst]SDFOT[itng`\SPqf9)OK'<:>ADDA=;<>??A@>;;<== :99778  !##1KI+NUM\^x5<4/( %"#'.&Ma"% !9W@656:@FuljM`]=$7QNC>T7G95YJ]RSTXLS^47lXNIJOG&/7LBG?;VT@8b'*,%)c8<:j?M2$SB<:A8HZpHl4_4*-&;6*(('()*,-220.+*)()**),10//49;9#$ 544557;>90*,5;A"""#&((('$!!!"$%$$###&&%$%%&'()**)(()+,-,,+,-.-*$(.,+)+./-B+)('&')*&'-1221000/./0-,./.,())*,,--+*,,)),-..-+)(''()%#',./,+**(')*'&$%#%(*+-*&%'&'&%$"<:86BHHGIHDDGJE>=91./3653133/+*5&,&@;@#%).44-'*95 #'&(((+//.,/112578520/0457<=98642/+''(*+./&(369:9<=??CJKHGLOP,.,.24567897689765621/*,0245731222457:.@31<3&$"$&%"!"! !!  + + )(+*(*-.,*('$$#!"! +    + + + + +   $($%  #+0250 %& )(*+(&' ) ! #$*4,1,('&& %8:/!!!! $#  A +   + %*/2B K\ # /!>Ą +ȄO΄0҄׆ׄل4ȭm\`SA<1&!! + + +     +  +  )   + +   4     +          +  + + + + + + + + + + + +  + +   + +  +  + + + +  + + + + +      "! ! >!!!$$#%%$%$$&%%#&(*/-,'66'X]*B.AKhK`愊-*EGw߄ހ:ÿq_v~|MGygG)2@ogY\YWX`4a`bWN\^05IQMF@:2/CR?')     '..4-75= -; !6&-FR>>,30-)#".%(*$%**")39,'()'#*&&#6-, 8!#3 &.$&$1/6*$ )*)8,8E*!".)#,,-"# .9'74 2 +         *     +  + !##$%$$'*&!        !$&+01/ +/331!!$!!""!!!"!~}~}~}~}}}~}~}|}~}|}~}~}~}~}~}~}~}~}~}}}~~~}~}~~}~~}~}~~~~}~~}~}~~~~}~}~~~~}~ }~~}}~~~~~~~~~~}}~~~~}}~~}~}~~}~~~}}}~}|}~}~ ûɲÿ¿˸񃈊mŸڄ+رǹ>     +  + I&U󃑖¿걲ľ +れɼЈ cJ6##$#$$"#""""##""!"""!!!"#"##"""!!"""!""!!"! !"!!"! ! ! ! !            + .Ɠ鄃߂ᦼ׮뀋砅ÿʂɭ˛Ʃ®젏瀍蜁ڪӂȲɦؚĀȾ逅ɸÿ⥚ÿ􄌒:99;;;<<<:86267899:9899323I.,,),09EEFFCBDEDEEDBA@??>>=<=?>9,!#$$  $+,*''*()***)'&$'*-1*%&')-4;?@FE9E'OA3;?HQW/P?DGEEEAAG*-0++)MN,/010-.33.M8?KP+/XW59WA;:;CHEDIMKKMNOSSUSJA?;:,4@J[lZK/75681+-17;:;6.,54-,-.,.+'('%#"&&$!#$%(***+-0111579>DLU]dhln:teP?BJPKJQ\[ wDCCDDCBCCCBABABBBA@AAACBBABAA@?@@@ABCBBCCB +AABBBCCCBBC BBCBABBBABA@AA@??@?@?>=<;::;: ;;;:::999:;:;;::;;:;:;;:;:;;;:;::;::;:::;;:::;;::;:::;:;;:9::;;:::;:;<;:;::;:;:;;:<;:;<;:;;:;:;:;<;:::;<;:;<;<<<;<<;;<;<;<<;:;<;;<;;;<<;<;;;<<<;;;<<;;<<;<;;;<;< ;<<;;<=<;<;<<;<<<=<==<<=<===<<===<<==<==<=<>=<=<=<>=<>==>>==>=>>==>>>==>>===>=>?>=>?>???=>? >???>>>?@?@?@@?@? @@@??@???A@??@A@@@AA@A BAAA@@AABAAA@ABA BBABBCBBABCBCBBCBCCBBCBC DDDCDDDCCDEDDDCDEDEEDEDEDDEEEDDEFEGFEF GFFFEEFFFGGFGHGFGHHHGHHIHGHIIHHGIHIJIJIJJIJKKIIIJKJKKKJJJKLKLKLLKKKLKLLLKKLLMLMMMNMLMNMNONOPOOOPOPOPOOPPQPQPQP= "  <<<><=>=<;::;;::867:=>>@BBC""###$%@<89:;:;8699878:9 !#$%'(%@fVQlfB*$0HN!" 3bq^$ (F^daL705eIFHFNVE7`/4/Y?MCdE;RS/787?68:_[8IGWe_9^d2&5BFBJJ*09Bq}/%&4ci7g>DB>JA4Bt3KLAgNaI[BOS743CM?B,  (;=5 :*'&&*,"50#+#/$$&--##/5125$*'*'&GN + ;> >;$&%#%&'!<17'4$03()$"&%!+6 + 'A16E;21&9  -  + + + +   +  +    ;     +   ! + +  + + "!'*$  D #'),.//.03434 "!!#$!"$$~}~}~}~}~}~}}~~}|}~}|~~}~}~}~}}~}~~}~}~}~}~}~}~}~}~}~~}}~~~}~}~~~~}~}~~~}~ }}~~}}}~ ~~~~~~~~~ }}~~~~~~~~}~~~~~~}}}~}~}~}~}~~}}}~~}~}~}~ Ϯ􅆅̺㵲τ2ةꂉƷXC  +       "[򉙘ſԱ}ũާٿf@  +"##"""##""!#$#!!!"!"!!!"#"!"! """!"""!!"!"!!! !! ! !            'ԠįϺԵ脪׊Շ䀥ʵힱܖ‚ˎšȷ߼퓻գ̠ؼݞ׃ө޷ݹɿ¿ꂆ;혐˹ĿЈ򴘗J½醓<>>>=;:=96:98:<;:9=>70I>950.6=>DCDDBACCDDBA@?><>?@A@??>:("""#"(>EA93.*)+)(*($$')*,)%%(*.4:GJB74<==>=>==<<=>==<===>>>==>=>>=>>>=>??>??>?>?>?@?>>?@?@@>>?@?@??A???@?@@AA@?@@@??@@@?@@AA@@A@A@@@ABBA@ABA@ABABBBCBBA BCCBABBBCB CBCCBCBCCDBCBC!DDCDDDCBBDCBCDDCCCDCDDDFDEEEDCCCDEDEEDEDEFEDDEFFEEFFEFEDEFFGFEFGGFGFGGGHGGFGFFGEGHGHHHG HIHGGGHHGIJIHIJIHIIIJJKJJJIJIJJJKJJIJJKJJJKKLKKLKKLLKKLKLKKLMMLKKKLLKKMMNMLNLMNLMN +MMNMNONONONMOQPOPPOPOOOPOPOOPPPQQPPQQQPPQQQPOPRQPQQPQQRQQP?QQQSSthZ2878/F<9/*('()()+++*+.,+-0121010045458988:88988877657;:9877889;;:=<<>=!"""! =<:=>>@A><<>=:9;=<:86;;pUX]X3+:4hAZ!$"+k4@OSwPVICP9*Uma[_M2HUX309D@F?8AA>@ESH=9;<;NFe36627Ye_M8N,JgmnpZ--NS.'KQ@(*0F7BYRy@e\,&+-.(%"! ##"%,5983139@#$""#&'%" /./39 "!7()8"##"#%%%#!!"$!!"" !$%%$%(*,- +-./-,,+-/./..---//,,..,*-.-,-0-)'>(-01110/-+('*+*)*-,+/.-,+)*++,+*-,**+*(&&('$%'&%%%'((***)'''()*(('()*))'$!1*02?//+F6>AB=0*&)06645665454441' "%$79<@><;=A=83(8!!! $!"'-20%$1552233/,/43332211/.,+*+,+**..046A3,)1:;@EFKPQKGKMRT.23442/59;:9568678500..39857554430341398I477<)6<$)*)'$$&&&%" "  ! !"&' ! %(**))+,-+(''&%$$$#"#!    + + + + + +  &( !'/$2%! #%$$"(# !"%$%,)$(0.&%"#%#.#%-10!(   + +   + +  /86@L[拎GQ3}U(O ҄?ۅRּdF + + + +       + /          -  +       + + + + + +  + + + +  + + + + + +    #$(+.1=MQS-> /CEA]ZKcT!7Jsͅu[zpmyIF`9130OS-0]2^QY0/**2@ @TTRUHFC7255?@CA?@??@?AA?@@BB@6&"#"!!"&-3;;9;5/,.+*'&))(+)))**+./373.+TRUK:7:AFJU594.+')+**)&'&&(,+,*((+(#"''%#  8 "#$$#"!$&)+*(*++-/37<<<=;::;;::;:::;;:;:; :;:::;;:::;:; :9:::;;:;:;:;;:;:;;::;;:;::;:;;;:;:;:;:;::;:;<;;:::;;;<<;;;<;;;<;:;<;:;;<;:;:;<;;<;<;<;<<;<<;<<;<;<;<;<<<=<;<;<<;;<=<= <=<;<<<==< +==<<<===<<=>==<= <=<<=<<>=>=>=>=<==>>>===>===>=>>=>=>?>=>?>=>=>?>>>???>?@???>>?>?@@@?>>?@@@??@?@@??@??@?@A@A@AAABA@AA@ABAABABBCBABBBABCBAB CBBBCBBBCCCDCBCDCDCCCDCDEDEDEFEFEFFEFFEFGFEFFGFGFG FFGGGHGHHHGHHGHHGGHHIHIHHIIJJIHI HHIIJKJIIJKKJJKJKJKJKKLKLKLKKLMLMLMMLMNMLMNONNNOPOPPOQPOPQPQQQPPPQP +QPPPQQPQRRQPQ-Hbqg08>.E>=/'(+***,-.-+*+-,*)(*-045577798777878789 8878:;:; !"" ;< !! >`?A@>>=;==<<<=;:98<=>ABCABG##%&'H0),*+,.2352121212112335434689685225421445830010/0.-,...,-02245  24331/0112212334465\   "!!! !!!! ""! "##"! "$$##"!"#"###!! ! "$%&$#"#$%$_%&&&'((')+,,+)(*+*++*))*+%2,1316DG=5110-,-/5;<9765543220-++-/02348?FFCTXStU4>2KYuJmVGv:7788789 88899898989998898898999::989:;;:; +:::;::;;::9 +888999889898988787888777888788878878767876766766776 766766655665445434555444343332333222332332fedc11d cdddccdcddcbcbcbaababbaaabbaba`_ ^`aa`_`_`_`__`__\^]]^^]\]\\]^]]]\]\\]\\[[\[\[[ZZYYZYZZZ[[[ZYYYZZYYXXYXYYXWXXXWVWXWVWWVVWWWVUVWVUTUUTTUVUTTTSSTTTUUUSSSRSSRQPRQPPOPPQPOPPOOPOOOPOOOPPONOOONOONOONMNMMMNNMLMLKLLKKKLLKJJJKJKJKJIJIIJJJIHIHIIHHIHGHHHGGHGFGGFGFFGGFFFGFFGFGGFGFGFHFDx}WZZTRQC~|{FKFvu@E@\95xa~}w{xAwTScmvrtnp{zppre`geO9+-35E;'#DDA?;;@>>"" 9: !!!#%#"#",CY?OZZV=56;4!"4(JKA9@GP`SEOW?\11eH88=?BBf9<8A@h9@@>89?J?=1VU8;R:;=U9K6NUM>F?6OB:\x7.4+"//ASP`Dz\cI?I>3BFCJ@pbTF:U#OJNIR@WdM09F7A(!ML=LCOTG;)&"',*+-*%!!##!$! #.7=95EGGIKLLLMOT-233489625:;9755640/257524::7543463046428Y:879?/;<$%''&$$%$%&%$#"!! 9% $%'(('()*,*'&'&&$%&$$$#"   + + + !$$"(.$!,$!".(%*!!-.-$$$%$!!%%#'!/11*"!%),,/! ~  + +  !  +45:H`BU! E7+ ;/҄Ӏ’gK!# + + + h    + + +   +                   + + + + + + % + + + + + + + + + + + + +   &R!&,-';MHa> 0)92').%-26%/7+)& !&!,/$ + +  /    + +    + + +     /   + + +     + + + +   %R + !   + +    G$(*-/1100/2! "" #%#!$1"~}~}~}~~}~}~}~~~}}}~}~}|}|}|~~}}}~}~}~}~}~}~}~}~}~~}}~}~}~}}~~}~~}~~ ~~}~}~~}~~~~~~~~~}~~~}~~~~}~}~}~~}~}~}|}~}~ ȣÿʵƿ½򂈈¾ö愠ȞÎf4   +   %ZƔ ZķǦ땮󕓹荵]=##$##""####"""!!!"!!"#$##" !!!"""###"#"""!!!"""!  ! "!! !!! !          "|ƹ蔈턀ܶ򀄃փśЗȨョľ鉉ݼˀۛŧќψꊔ̈́ũ͌񦬀ƾɷ½󀋓λ絡Ĵ򉘀ÿ􃉋 မ99;<<=<<==<:89862ZSF@BFM@8@,*=><>>=@?><=?>>=:<=ACDBCC@4&!"$%&$#%()(**&')+*'$%*/01-,-.,,-*-3>CA>17BA>@BDO-67WOKA@EJRK(-./.+OIYQ,ZZWV/40+.13564276^Y\XVOACEA===<:61/.,*/4;=2TNHHGB547GJPK(5;60/0,'%$(+,-.+'((%"%(&&'&&%" X"$$#! ""!#$" !$''&&(*,--/8?AHTbgV_pwpWd̴EDDDEEFEFFEEEDCDCCCBAAABBB@AABAAA@ABDCDCCDDFEDEFFED CDDCDCBCCBABCBAA@?><<<;;;:;;<;<;:;;;:9: +;::;:;;:::;:;;;:;:;;::;;<; :::;:;;:::;;;:;<; +:;<:;:;;::;<;<;;<<;:;:;<;<;:;<<;;:;;;::;;<<<;<;;;:;;::;<;< =<;;<<<;<<<;<<;<;<;<;;;==<=<;;;<<;<;;;<;;<<<;;<;;<<=<;<<;<=<<;;;<<;<<<;;<=< =>==<<<==<=<==<=<=<<==<=<===>=<=<=(>>=>>=>>===>>=<=>>===>??>>>==>==>==>>=>=>=>?> +??>==>>>??>?>>>?@?>>???>>??@@?@??@@?>>?@@?@A@A@@@A@??@A@A@ABA@A@ABCBABBCBBBC +BCBBCCDCBBCDCDCDCDDEDEDDEEDDDEEEDDFFEEEFFEEFDEFFFEFFGFFEFGFGFGFGFFFGHGGGHIHGHIIHHIIIHHIIJJIIHIHIJIJKJIIIJKKJKKKLKKKLLKKKJKKLMLKKKLK!LLMLLMMNMLMNMNNMMMLMNMONNMMOOMMMONONNOPOPO POPPPQPOOOPQRQPQQPQPQPQRRQRRRQQQPRQPRRS9POui &%!? ?@@?? @A@=<<<;<<>?AC!#$$$%&'NI.#*+..+-1476433564248::#!338013201365002248532/-.../01331../.-.132'B ! !! ! 7776"$$##">#%#"#!!!""!!"$$#%#$$#$%$$$%&'(*))*+-,*)*,+*)'''(&512/,+.,5??<74221/.,*,-/00358<@DE?[`hP1,TsL\acrVmq87898978889988999888988998999889899989:989;::9;<;:9898889::989988989898778987788788878898887778 +77766776667878876676777667677676765656545455544544434445444333445544343233432'33323eeffd2111cdcd3eddccdddcbbcbbccbcccab1aabbba```__^^aaabaa`^` _```_^^_`_^]^__^]]^]\\]]\]\[\[ \\[[\ZZ[[ZZYZ YXXYYYZYYYZXYXXYZYYXWWWVWYXVVWUVWWVVVWVUUVVVUUUTUUTUTTSSTTTUTTUTUUTSSSRSTSRRRQRRSR QQRQQPQQQPQQP +OPPOOPQQQPONOOPOOPONONNOOONMNNMMNNNMNNMLM +NMLMMLKLLLKLNKKKLK +LKKJJKKKJJKJIJ KJIIJJJIJIHIHIIHIGHIIHGHG FGHGGFFGGFFGGFEFGGHGGFFGHFFGGHGCxKKtsgZDiLMIG>;<:^/-FY_eguzHDUa|GHExuqnmlkgjwxBIDL^ffX2#" =8:"!!%%#! !! #5a4=X?1:E2,BC%  "(,,&3bf_kil^hlL[7*980P.4>IG6]]V7LM9;^@@>>=8TFXUN2k^V7Kcn?I2el=(E5840N(9F<\]ZX7:nF'VJNZI8bYZE4@d/3EQ,Sa<;5-0@"&)(&##%%&%$" "#$%(*,--,,,+,-+,***+)(*,...,')+-,)**(+,)---.+*'()+,)'('&'('&')**'(*-/.,*+++,--..-.-,+)(*,--)&'&" #&***((('()**)***)*+('''&%$#"!!"851# 8TR5'+-034985015534545632@K@13$)058402971)0#""'&#  ""$(*,,*/21//,,01/0/024110,++**,,,./14567973-1?EGHIJKOQOT.1112368775799843./1369:7411398423125776D78;:$5;"#$%&'&&&'&$###!30)'),/%" ! ""#''&$&())%"$)(&%$&('%$! + + + + + + + + + +  +   +##0'!!&$e*010/!3.0.0( ! "-)(--)!",+-'    + +  + + P#)$$<22CW_ 3 +.D 3]c+þ¾„R¿Ʉʀ;ͨsE$&        + +   +  + +  C +                +   +  + + + + + + + + + + + + + + + + + + + + + + +  +  + + +   '"&+,&LrOW:!&D]mAFFQcZ񅍍1-EW#*<ՄӀ+cvqvy~4!)5>8, + +  :!4 "* +!!  =;4>#:/074%0+.#&:"843;)* '/)%4/"$       + + +  +   7   *  + +     + + +  **$  +    + + + +$'*+.121.0. ! !#$$!!!~}~}~}}}~}~}|}|}|}~~}}}~~~}~}}~}~~}}}~}~}~}~}~}~}~}~}~~}~~}~}~~ ~}}~~~}~ ~~~}~~}~~~ ~~~~~~~~~}~~~~~}~~}~}}~~~}~~~}~}~}~~}~}~}~ ğ¿˿ϷҺ¿½ϟb4 +  &^ԟ9^˿㓛ȲX=###$$ "###"###""!!"""!"#"###"!"#"!"""##"!"###""!"! ! +    !!       #u끯֐ܸնꊗǀľӇ铜̥ߧ߶򰔣ܞ̣ѣ̢ՍϾ̾)üö_¹䊙:;==>>>=>=>=;4ZSKGE@=>@A??='+<;;<99;==<<==>;;<<==>CEFHFEEA4+,*)+)('''&(+(%%&$#'*-140+*-./.-//04<=7,.>FFCA@?HY`WNOIB?AH'*.010-(@B@AABDMY-*0885/*.-&#"&(,0//*&%'+//-+*'%#""$&$$#!!&*++,.//..4=BEEUbd_ck~uſŸFD EDFFEFFFEDECBABABAABA@ABBCDBDEDFEDEDFGFEDEFEDCBABBCCDCCA@?>>=; :::;;;::;;<;:;: ;:;;:;::;;::;:::;;:;:;:;:;;:;:;:;:; :::;::;::;;::;<; <;:;;;::;;;<;:;<;<<;;<<;<;<;;;<;:;;<<;<;;<;;<<<;<<<;<;;<;<;<;<<<=<;;<;<=<;;<<<=<;;<<;<;<;;<=<;<=<<<==<=<=<=<=<=>=>= <===>===>=>=<=>=>=>=>>=>?>>=>?>>>?>>>?>?@>>???>>?@?>?@???@@??@A@@?@@??@A@A@?@A@?@AA@AA@@@ABABA +BCBAAABBBABABCBCBC BBCBCBCCCBCBCDEDEDDDEEDEDEDDEDEDEFEFFEEFGFGGHFGFGGHHGGHGHHIIIHIHGHIHIHIHIHHIJIJIJJKKJKJJKKKJKJJJKJJJKLKKKLLLKLKLMKLMMMKLLMN +MNNMMNMNONONOPOOONNOOPPPOOPPOOPQQPQRQPQPQRQQRQQPPQRRQRQRQ[RRMs?<+@=5*'')*,-/0334764551)(15554421024578899879:9:;;<<;;; !#"!  ! !! !!#%$! ???!!A??=>@>g=<<;<<<>ABB"##$$%&&MN:! %.3-)/137678679889 ! 7752-.120.1532565311/.-./.111221//..///..-044 651131212_!!!  576 $##""$#"h###$#"##"  """$%%''))***))**(&$#%%$#@3/688>4/241*)'(,258;9421//..-./022338?@AFVNX_LYYZEU^ZSerw77789898898889998999:9 8998889989::9: 9:99988898999:; +<<<;;::99:9 +:98999:99898989898877887878776678787 667776767767656566554544455545554455455434445434323.233232d2322effg332111cceee3dcdc1ddcbcdcbccacbbaba!baa``aabaaa`_`a`_^__`_``_^^_^_`_]^/_^]^__^]]]^]]]^]]^^\]\[[[\\[[\\ZZ\[[Z[Z[Z[ZZYYYZYZZYWXY"XXWWXYXWWWXXWWXWXWWVUUVWVVVWVVUUVWVUVVUTTU TTUUTTUTTSSTSTSRQQRRQ +RQQQPQPQQQPQPQPPO NMNNNONONNNMMNM NNMMLNMMLLMLMLKKLLKLKJKJKKJJKJIJIHHHIHIHIIHIHHIGGH GGGHHHGGGFGHG HGFGFFGGFGGGFGFGGFEFHGGHCx{T|ruvdVBpzHNIh:*EVASWQIw__rFEDvntzFyhdkmnkgn`;AQSy6= !  !! !"###! ".bIUL<5;9??&$# !!!"#&(++$DiuHWVB=>l;Nc;2VFWUBL9DKF@BMO;I6DHMkNL6CdbVJ+.JS_;4;F82*F;C86DN`=T\^jBto]X>B6bfT`V6@N`LlbX18TL8?4QGeG#-#285(.A!%%$"%')'" $"! #)-% '/6@EE"#$%'$#"$*,*($8139>8562+3<@#'(%#$$""#%#"""##$&'(()*++,-,,---..,**+.-+*+-./-*,./,)*++ ,--.010/.*')*))(((%'(('%&)***+-.-,+**)*)*+)'%! !$&'()(&&'('())('('%%$$" "#<34/"#,(%,37:9652/.134665533DRR'906 #$'-/,-3/' 1" !"$"!" #&*..*(,---//0255200031-+*(**)++.0248889C:5139DJJFDINORX022112356443774310-299;:841/036721201344567[99;=?-;=%$&'''('&&&'(& 62.++'$$()'&"!#!!$%&$#%&'((**))&$! + + + + +  #"&5:4,("!+1 ,310-((((%!:,'%&*)*((',1   + D + &,($&'*4019Yz挒V ~ u= +K7TĄ5DŽʅsڄ*݄#š¯m*%  +     + + +  + + + + + + + 4    +  +             +   +  + + + + + + + + + + + + + + + +  + + + + +   +  + + + * `"%(->@sJKk:IBF8EqELNt2 + +ڄ؀ „€gguFZQ[dVF;-JOT294A +3(462,H<@OY/0.OJS[[SY2VKELMNJ'EK^f=%,::F     7).( #!#  + %;?(32$"$=&3 -"+ %1%7 ,"!%#!()&%)3&% 63-!&,4(! !(4=$+47?'D@11$&56&0*$08,<50#4* 6.9 + + F! + +  +                + +    + +  d!'$ +  +     +  + + "(*(',//12. !!###5!$~}~}}}~}~}~}|}|}|}~~}}~~~}~}~}}}~~}~}~}~}~}~ }}}~~}~~}}}~}~}~~~~~}~~}~~}~ ~~~~~~~~~}~}}~~~~~}}~~~}}}~}}}~}~~}~}~~}~}}}~}~}~ þ¾ſ¾ʻż´ƿ»¿㷸ϤV7  + +    +   .KſƸĉ҅ƭU  $##&"""#"!"""##$$#"#"!!"##$#""! !!"! ! "#" !"""!! !"!  !      #[؈Ҏ逜斞˵Ӿǿ˳ˀʖ࢓α֐ϽǬց̓쑐™ܹÊüú톋쀉Wõýɿ.󅒙<<=>>=><6\JCDDB?:45:;;?>%%679;:;<;=?>:9:=?ACHJIGGEFH=6420//01-)+++*&&'$%'''**,&%*+-./-+-/59-'4AIJBJMIGJJHMOJFAH)+)),--+O?GS[/14;9^]]SMKKLLCHME??<4/020/IABCCDA?:5u@IHHA=AILIFILQT25/.29832-//$#$(+/220,*-02210/.(&$!!"#$%''" ! "$',,,/12129>CBEUcn_Y}xĵĴ{EEEDCDEFE DDDCCBBBAB.ABAA@ABBAABCCDEEFEEFEEEGGGEFFEFEDCCDEEDFGFFGFFEDEDCDDCDEDCCB@@?>><;:;:;<<;<<;;;:;:;;;:::;::;;;<;;:;::;;;:;;;:;:;:; +::;:;;<;;:;<;::;;;:;;::;<;;;:::;;;::;<;:;;<;<;<<;:::;<<:;: ;<<<:<<;;<<;<<;;<;<=<;<;<; +<=<;<;;;<;<; <;;;<<<==< ;<<;;;<<<;;<=<;<=<=<<<===< +=<<=<<==<=<;<<= <==<=<<<=<=< +===<<<=<<<=<>=<<==>>=>>===>=>?>=>?>?>???>?>=>>??>?>?>?>@?>?>?@@?@?@@AA@A@?@A@?@A@A @A@A@AAABBBA@ABA@B AABBAABBBCBCBBCCDDCDBBCCDDCBCBC DCCDEEEDDCCDEEDDEDEDEEDDEDEDEFEFDFFEEFGGFFGGFG FFGGIHGFFGHHIGGHHGGGHHHGHHIIGGHIJIHIIJIJIJKKKJKJJKLLKKKJKKLKKLKLKKLLKLKL MMLKMMMLLMLKMNMN ONOOONOONNNOPPNNOOP%QRQPPOOPPPOOPQQPOPPQPPRQQRQRQQRRQQRQRQRRSRQQRRQRHo?;+:6.*,--/00035<856872/1237979;:78776898878:;;<::;<<=>;!""!  ! !! ! !$$%%"!! >@@AAA@>=?@?><>>;;<=<<=>?BC!"#%&&&%LQ@!!"'0..5677479977 .:3--/14562/,.2234456631//...///10../1..-..021..141./2(  21/...///0011186853%4455443 "" 65"%%%$$$###$#"#"! !!#$$###$%#"!" !"""!"#$$&(***))(&'(&&''&%C6453630,064,+)*-13575321021/-.00256;DC=@[oRQkilaEKu]wxw;89998998 88999899989889:9::;::9:98:9:::9:989:;::;<<;:9:9::9 +::999889889898899898789877877877878787667887667667667667765556 +555666555654455546644554454554445434343432323223d2c222c001ccddcb `bacbccaabaa`a`aa`a```aa``aa___```__`_^_^^^]^_^\]]]^^^]^]\Z[\\[\[\[[\\[Z[ZYYYZZYZYZXYZYWWXXXWYYXWXW +VWVWWVUUVWUVUTTTUVUUTSTTSSSRRSRSRSSRSRQPOPOPPQQQPON/MNOMMMOONMMNNMNNMNMMNMNNMMMLMLLMLLLKKLJLLLKLKKJKJJKKLJIJIJI HJHHHIIHHJIHIJIHIHGHGHGHGGGHGGGFFGGFGGFFGFGGGFEFEFFFGFFFGGGDhynx]K?^srsJPHBzwcgj~n^Vkqomp}$%###%&%!(--,( 514=;551*3< #(*$!#!!"!! !!!#$%&&&()+--,--,.00/./00.-.//00---)+,,*,,++.1//-.,)*)'%#%'(('*+(()+/,--,++**))()))***('(),,*(('%#"$$%%%&&%&%&'&()()(&&%%"#$! B1% /677:;:85/++.035789?GSS)*,#2 &+--)()$3" """$# !#(+.20*..1110/00263/..-)***,++-.2445:<=<:749>FJE;?CLPY01220/0014640033113534568:9740,.31/11.1345887R>BCD(5><%'()(('&":0,-,*'$!#%($ !"#$%'%""#'))+--+'%!! + + + + + + + +  $#$'&&+,*)'#($-2$"334,(''**#&("!!# &'$#"#&,-)(*,..   + +  +  + ")0.% &,,*/410DpɈ -Q2SQ+[ÿɅ`ׄ~վh.%      +  + + + + + + +, "  +   + + +  +          + +    + +  +   + +  + + +  + +  + + + +  + + + + + +   + + + +   w $%%)=^YE>Q[nQR;=WQfjр  + +! NфDƄĄ¿ocw}[WliWC4*&(./E81@ -3?-+C)ALJI381,QOBFM`aRC=MNKIIRXZ.O(<*    ""()$B%' $ v + *!%09#&%.=5##0#$!*)#6"" !#-$*$!&$ "! !%,!  7.'.007 '"%8,">#"@.& '+34$"& )"FG75    6 +    +        + + + + +  + + +  +!%+)  +     +   ! #'%!&+.73 "$&%0$$~}~}~}|}|}~}}~~~}~}~}~~}~}~}~}}~}}~}~}~}~}~}~}~}~}~}~}~~~ɀ~~}~~~~}~~~~~~}~~~~}~~~~}~}~~}~}~}~}~ %νߺ̾˱vĽƷƺḹǠõŷd9  + +   +  + +e -gʀ٭ŲƿўᾞͮaM $$#""""!"#"!""! !"""! !"!""!! ! !" !"!!!"!!""!! !  !      !X쑒ΦÒ͜Dž󭝉Ͱĕ􁋠۴еږٸӫбہ(¶ø􅆀Ƚ۾Ǿ^799<=<6ZNHEB@><::87;<>B:)15789:<<<;<;;<;89<@CDFIHHKNR*L;5202570)%&),)%&('''&$$$%&"%)*++)(()5<@-2ACO*GP,TJGDIMMONL*,,*)*--,QMVV133363XROMPSMIF=<=;865*FFB@8//5:DFDGIMOPLIKIFMLGGIRU.53019<6573,,(+,.1452124579<><50))*'"!#&''%#"#""!$'&'&')*++/15:?GFNchQTrl&xECDDCCDEDEEEFGFFFEEEDDCCBABABA +BAAABBBCCEFGFFEFEEEDCDEEEFFGGFGFG +FFFEGFEFGEDEFFGFEDCB@??>=<=<:;:::9;::;:;::;:;::;: +;::;:::;;:; ::;;;::;;:::;:;:;:;:;;:;:;<;;<;;:;:;;<;<; :<<<;;:;;<<; <<;;;:;<<;;<<;<;<;:;<;<<;<;;;<;<; <<=;;;<<<;:;<;<;;;<<<;<=<<;;;<=<=<<<;;;<;<<<=<=<===<==;<=<=< +==<<<=<=<<=<===<==<<=<=<=>==<<==>===>>>===>?=>=>?>?> +?>>>??>>??>?> ??>=>??>>?>?@?>?@?>??@??@@@AAA@@AA@@@A@?@?@A@ABABABABCBCBCBCBBCBCCBCCBCBCCBCDCCDDDCDCDEDEFEDEEDDFEEDE$FEFFEEEFFFEDEFFEEFEEEFFFEDEEFGGFGGFFGFFFGFGFG HHGHGGIHHGGHIHIHIJIJIIJJIJKJKJKLLKKLKKKLLKKLKKLKKLLKKKLLMLLLMMLMLMNMMONO NNOONOOOPO POONOPPPQP QPQQPPQQPQPQRBQQRRQQRRQRRRSSSRQQRRRQRSTMC^r6N;;775/05756>$ 84445566566778:;::;:9: +89;;<==<  !"! !"!"$%&&'&"!@AACA@A???@@@===;<<;:>>?@AAC"#$%&%%&'Q>)!!%*.--/0233784237 " 7327773246765573/--.,.0//-- .00.-..///124 +55431 /111 +  7753;446543254 !!!!""!""#$%$##"#""!!#%&b%$##"" !!"#$" #&%%&())***)))*(''&$>2.-*,*(-244/+.5:8620..26542//01247;>>ErrcO,$B"!"!#%(+1;!0-52,,+&$%'&$"!"%'*.0*&#$(,1532<$$%$%&#?&,..*$229>843-08"()#"%#BB, ?<; !!#$$%(*+,--.--/0/.///--./.././11133.*)&+-/00///-,*(''&&'((%%&&&'('&'+,.//.-,,+* +++*('')+*)({&''&%##%&%%##$''&&'(''&'&%%$),'D5,(&'+598:85431.,-,,134BPYZ+.368.96#),'#97/! ! !$$$! "#)-+-/../1223321./20,+,-00/034578:?AC@@>=<;>DFDNU-0211000243/,-03678742257998562/22112026646;:OFKN-46;5J #$''&&''":520.-*'$#" "&(*" !#$%&'''&$##%)*+,-*'((' +  + + + + +  + + %!'.**(('$%$"))01!50-+./)&$!!$%""$&(('&)($((&%'.1U  + + + + + +   $$'32&$.0369uPJETiiqmZC[okр2    4Sτ̀ͅ¿``iMESoeP9*+/0I4*CG'F&+LA@KNDB14,QKQRQMTO87@KNHKNW1;;G$"    *#%.,)!+0)!)  + + + $!#$**4&./.+> % !$$,++&!$$$))($$ '(#!(,.$*,& ++)(2'++)3 %/25#?$0%$%2/$@BEGGHKOU-,*F91-,/0/' %)(%$%#""#$%&%"!$'**))'%*5=;;.31.K@GONIKMQ-TO))*-//269c\XTTSPMCBFEB??>9651.NB6552/*W_9GVUU4530SJLPVUQRWS-4;@;75?BEC;6,),++(%(,)&#"##"  %((&'))*+,6=@CIU_#8eGMYZӾӿͿxFDDDBCCCDEFFGF DDDCCBA@AABBBA BBDDDEEEFGFFFEFFEEDDEEFGHGHGFFGGEFEFFFGGGFGEECA@>>==<<;::;:; +<:;;::;;<<;:;:;:;:::;:;:;:;:;;;:;:;:;:<;::;:;;;<;<<;<;<;<;<;%<<;;;<<;;:;;;<<;;<=<=<;;<<;<===<<<;;<;<<<=<<;;<;<<;;;<;;;<;<;<<;<;;<;<<;;<<<;<<==<;<;;<=< ===<<<=<<=<<<=<==<<=<<=<<=>=<<<==<=<<<=<=<==<=><= +<<<=>>=>>>=>>==>=<=>=>=>=>?>?>?>=>?>!?>???>=>>>??>>???@>??>>>???>>?@A@?@??@@?@??@?@?@@?@@@?@A@@@A@A@ A@AA@ABAAA@A@ABA +BBBAABBBAABCCBBBABBCCBBCBCCBCCBCDC#DDBCCBCCDDCDEDDCCCDDDEEEDEDDDEDDDEDEDFFFEFFEDFEEEGFFFEFFFEEF +GHFFHHGFEFGHGGHGHHGGGHGFGGHGHHHIHHHIHHIIIJIHIKJIJJIJKJIJKJKJ +KLJKLLKKLLKLKLMKLLLKKKMMMKLMMLMMMNMMNMMNNNOOOMNNNMMNNMONNONNNONNOOPPOONOONNOOOPOOOPQQPPQQQPQRQ PQRQPPQRQRQRQRpSSQRRSRQQRQRTSTSRG{ccFA@644339>%+)$:.1644776566789::;;:9:9::9777:;;::<;==><  !""#" ""##&((('$"! AA!ABA@???<<=>=?AA?@CDC#$$&J''ME1' ()$&)-.12/.,/6555434789;7548854567630.-,,,-..01...--/00./ 00013653  .3  !87865766555336412   !! "#"$')'%##""##%%$#$&$$" !"!""!! "$$%%%('()*O('%#:-*)&$"$)06889:9652/.,.4960...0149=A?I^mx_]2[mbbmlr{:899898889:::99::9:9:9:9:9;:;::9:999:999::;;;<<;;<;<<<;<;;:9::9889:9:::9898989899898899878788898987877678787877676556556545454 +545455455543434432332233323433232 +c23e3d2dd2cdd1c21bbdd1cdddc#abbccaa`_a`_aaa```a`_`aa```__`a``__^_`_^]]^ __^]\\[[\]\\]\ [\[ZZ[[\\[YYZ[[Z[ZYY[ZYYZZYZYYZYZYYXXXYXWXWVWXWVVVWXWVUUVWWVVUVVUTTTUWUTSSRSTSTTRSRQRQRPQ RQPQQPPPOOPQPQPOOPPQPONQPOOOPOOPOOONOONMMMNM NMLLMMLLMMMLML +MMLLMMLLKJKLKKKJJJKJJJIJIHHIIIHIIIJIIHIHIIJIGGHIHIHGHHGGHIHGGHHGGGFGFFGGGF EEFEFFGGGFUGFGGGD^z{fH|jSEFiY!';KF:NAloy}ooqvuir{ytvsvFHxadxurqv|KVECF8Z(::7788:;:76454569!"$%!%R97Do3KeUIO< *E?]IKJ\M@D4/:IZ]18=9?LN;Y,'GG:FKEJKHNKCe4AQP?gH3?M?>@HTH`^btiXXWX0JYBKWWH8jInA2#.//%6HHA:^CP}~O20TUiO>Rb\P\UXUQSYOF/!1&''%7C>+%$$#$&.9 #'"+/2881($#$&'#!$-98/+,27DGHHEDGB<9?GV///03120/0243/*,267864334446887740232141,/54479,GK(1201-& #$%&'$>655420-)'$%$" #&'"!!  "$%&%H&%&'*+,)*+*+ +  + +  + + + + + +  $*+*,.1)&i ":31112/+!"'&" #(0&.*)'""(/.)(,,!"#  +  + +/  !!'0:"2 !"   *8@>B[]j嵅.Jg+>M! hBÄtӄۄׅمڀΒdE!     + + + + + +  +  D  " +           + +  +   + + + + + + +  +  + +  + ++ +   + + + +  + + + + + + +  +  + +  !`"-`ae\E,WjXxTcuc腈-6%X Єͅ9„n]H-EIOQJLLMLECLRPOQMOV]35UBETPKILR\5@1--6  + + + + + ,&"$3-<2*- ,'2"$-3#""(22 *,#4!#*($+)#'%!0"**0% &#+$-*+95-.+)$+")(%5$<' '%%$9)5K@%59>.#.52/9/0.136,% " +     +       +    +     +     +   '"\ +  +  + +  + +  %'+,)')$ !'30 !!"#$$~}~}~}~}}~}|{|}|}~}|~}~}~}}~}~}~}~}~}~}~}~}~}~}~}~~}}}~}~} ~~}~~΀ +~~}~~ ~}}~~}}}~~~~}~~~~~~~~}}~~~~~}}}~}~}~}~}~~}~~}}~}~}~ Ľྯ컝郞ĶͻƳ¨ŸǛ9  +  2"Rޮ#㾧Žƾļû ÷ĢfH    "+$###!!"""##"!""""#""!""!"!!""##""#"##! !!"""!!"!!! ! ! ""! !!"! !!  !!!  !  !!   :Ӣݧί‰Є򐖊׹Ҹ퓧෻㩸׀ߋȁ𴩎Ȭٻ幬܌Ȼĺ¼Ȁζ¾¾ý􀅅<,05776dVLHFFDB@???8?>:789:998626:<=;98768;>??ADEDGOX-TPOH:*'&#"(*('%"! !"$&'' !#$%'(((1@A=KQN..>GPIEKR]34ZQ))SST+V-024haYMEGLRQNI1.=76885/-/R@4/2143XTZ3?@>:69;=>:895,T+-,(,-,.9@>>?A?864+(),)&%&*+'###&&$"""$&$""!$$'/8IXZPIMX`RBJFwîʹʤmFDCDDEGGFGFGGGFEEEDDBBBA@@ABABCDDEFFGFEFEEEFEEEFFFGHHHGGGHHGGHGGGHGFFFGGFFGHFFDCB@?>=<;:;;;:; ::;;;:::;;;:;:;;<;::;:;;:; :;;:::;;:;:;<;;;:;::;;::; +::;:;;<<;<;:; +<;<;;;::;<;<;<;;;<;;<;;<<;;:;<;;;<;;<<;;;:;;<;<;<;<;<;;;<<<; <;<<;;<;;<<;;<;<;< ;;;<;<<=<;<<=<=<==>===<===<<===<=>>=<==<=<=<=>==<=>=<==<>>=<=<=>==>=<=>=>>==>=>??>==>?>???>?>?>? >???@@??@? +@@?@@???@@?@??@???@AA@@@A@@A@@AA@A@AA@@ABBBAABBABBABBBABBAAABBBAB CCBCBBBCCBCBBCCBC6DCCDDDBCDCDCBBCDCCDDCCEEDDEEEDEDEDDEDDCDDDEDDDEEEFEEEFEFE +FEEFEFFEEEFGFGFGFGHGGGHHHGGGHGHIHIIHIJ IJJIIJJIIJKJJKJJKJKLKLKLKLMLLMMNMNMNNNMNONNONLMMMNNONOPOOONNO POOOPQQQPOONNPQPQPPQRQQQRRRQRQQQRRSRQRRS RRSSSRQRSSRSRBSSSTSnZaY,%=78=%+/2+$1.2676874357899:;;988:<<=:9<<;<<=<<=>T !"""!! !#""$&'()'#! A!!"!B@?@A A???@>=<<;=??ACCBDE#$$%&''&&OE4*%%'&*+%$+/20.058.8867765742210/--/.--++*)++,--01/0120-.0/00148434 24F!7658766423434*!!  !!  "#%''%##! ""#%&%#"!"$# ""!!"" !!!"""#$%&&'(?&";7111*('*-/39897201/.-.04740..024789L[mLcxI}l~orz9889 :99::99::9:9:9:::9:;:::;:9:9::;<;<;:9:;:;<;<;:9:989:::999:9998989998898889899888989988778 778988788898789888787878787676565654545544555434 3343332323343f3 +22332efee2d22d22ddcccd1bbcbcbcbcbbcbba`a`aabaca``_`_`___^_^^___^^^]\]\\]\\]]\\\[ZZ[[[Z[[ZZ[[ZYYZYYZYZYYXYXYXWYXWWXWXVVWVVWWVWWVWVUUTUVVUTTUTTTUTTSSSTUTSTSSSRRQRQRRRPQQRRQQQPQPQQOPPPONONMNNONMNNNMNMLMLML KLMLKLLKKLKJKJKJJJIJJJIIJJJIIJI JIIHIIIHHIHHIH +IIHGGHIIHHGHGFGFEFGFGFGHFRwkEW~wpkpoOW?ORk_V]^aivvptBDArmituny@CFEAEExhlxwohjyGMLyTI??A 987888755544454356789 %%#" !""! %AmKD/OUTPP?"@BSS7/1;R=`GH.Q^eb9=64:;>I]WAQHQ_q;3' !! k!#'-85$#()'&'')('&$"$.0-**2!#%%%'*/+(*(330/0361.<$'&%%&%GFEBB?==!"" "%&&),-+).1.,-/...*,0.--,0+),-.+,01/.**,-././/./00//-,-,++,*$&)+,,+,.00//.-,+,,-s.,**)&&(()*+*'%%'((&#%&$""###%&(,' (%2)'(./01/)%%$'-588897/)-;JUM'+13443*&"(!$$$)-,("""$ #! &&&%##" !%+,.0/+1311/-.-*'(+-.--./27:9:;=@@BCDEHMJFBAECDR/1/.../0344/'.3566532345676311/.4511457::.JM(//-/-;"##B;643442/-,)"&$ !$%$$" !#$$$#""$%''%'))().1(%$  + +  + R + + +!!%,((-4;/'('(-=95.*+.10-* ',(*%&"%"##!  + +C + &/0)%(14*#) (#"$#!$,-#!):FGBUedr$!M ,O0ӄHބޅCVG6    + + + + + + + +   5  "    -    + + +    +  +    + +  + +  + + + +   + + + + + + + + +  + + + +  +  + + +  + + + (2Qs`7ReAh_tzwl􈌍?* +g"܄Մ8Ʉi¿`pvO6JbVLGHJ36'>>=>FGECA:0/3=BA:86.,)+--27:=B?>@A?962('+/1,))&%&%$#!$$"#*41' %*19GMPOHDAEEDAHPmPmŷDCDCDEFG FGEDDDCCBA@@@ABABBCDEFFGFFGGGFGFGF GHIIIHGHGHGGFFGFHHGGFEDCB@?>=<<;<<;:;:;;:;::;:;:::;:; +::;<;:;;::;:;<;::; +:;<;::;<<<;:;;;:;<;;<;:::;:;;<<;;<;;;<<;:;:;<<<;;;<;< ;;:;;<<;;<<;<;;<<<;<;<;<<;;<<<;<<;<;;<<<;<;<=<==<=<==<<;=<=<<;==<=<;<=<=<<=< >==<>==>>=>===>===<===><<=<=>>?==<<=>===>>=>=<>=?>=>=> +==>>=>>>??>=>>?>? >@@?>>??>?@?>?@???>?@@@???@@A@?@?@A@A@?@@@ABA@A@A@ABBAABAAABAABCB CABBAABBCBABCCBBCBCCCDCBABCDDDCBCDCCDDDCCCDEDDEDEDDDEDEEEDEEFEDEEEFFEEDEEF GGEEEFGFEGGGHGHHGGFGGFFGGFGHFGHHG HHHIHGHIIHGHHHIHIJIIJJIKJIJJIJIJIKJJJKJJKKKLLKKLKLMLMLMLMNMNMNONNNMNONNNOOPOPONOPOQQPOONPOPOPPOPPQPQRQPQQQRRRQQRPRRRSSRRRSRS TTSRRSSRSR=SSTOBpBZ98*"")26892'932575674368998:8;:9<>><<;::<;;<<< ""!"!! "$#$%)))*($"! ! @AA???>=>=?=?@@BC@@CE#$$$%%$%&(NH+#&)00,('*./12267333476678411340-.210/*)(*,,-//24101230../0..//,-//00/33101232242/24e 5764665589:89976545554  "!  %&(%#$$##$%$%%%'$""!  !!! !""! ! !"B!!"##<1*.3793,%)42+.3456321120267420/1258?S|WBebkqXfjs{779:99:9:9#:::9:9:9:::;;;::9:::;:;;;::;<<<;:;<; :::999::;<;<=<;;<;:;:99:9:::9:9:;:::98989889998789878987778787887878776676676776665565656566566654456 5565554454545445434 534434334443434323!2232e33dcddd2dc112dc2cbc221bddcaababcba`abaaabba`a`aa`_`_a`^^_^_]^]]^]^__^]\\]]]^^]\]]^] \[\\]ZZ[[Z[ZYY[[[Z[ZYXXWWWXXYXWXYWWWVVVWXVVWVVVWV +UUVUTTSTSSTRSTSSTSTSSRRSQRSRRRSRRQQQPRQPQ PPPQQPOOPPPONNNOOOPOOONONNNMNONMNMLMNMMLLMMLMMLLMMMLLLMMLMLMLKLKJKKJIIJIJJJIIHIJIJIHGIHHHIIHHIIGHHHGHGHGHGFGHHHFEEFFFGFFEFFGGFFGEGFEQ|_NjjenrmoNGAlveouvox}zzumii`b:BCC@ADEIJA{pnkhiyFJG@9YB416796hi^<1,DQGKL?9B@:CXE@SM>;EACvVDUcIGdf8X]]Z2FC8NoG.NG^IIWW:N>T68-.%%.3.1o6"!!""#}"#)/-"! (,010.,2>mbMX;;-*&&,7?CCEGD>99"(%%)**'&--":1+-27860,9H%$%&&$F#!C#"!!"#"""$$"#),+,--+**,++((+*)***')*,-.+(*-.-+*+**,-%,,-,-/0/.+*)*/.()./0-))+,-/0/-,--...-,*&%(''&&&(+,+*(&))*)%#"# ! "%$)#! %**-0368862.,+,-18;941/0CQM(+/454331.,+*4"!"!%&(&%"! !  "$$')*+($$%$!#''+*)*+,,---,,+,++,/ 245:;;9:?EE@AEHIJHBDIIEU001./..-.0--0589.#/34567423457787766324,N366789::.'K)22.,*G.5732773/02200,' "%&%$! "! "!"%')''(')-1%    + *,10 &0;%'8-+('((+72+-,-020./+#!(%"&-! $('%!#!  + + +  + + + #&*(# $%"!&,5"+5*((*,.*&)6FHGL[g󐙘M5! FE +L¿Ʉ˄ʄπހΩDM(    + + +  + + + + + + +  1   #"  + R    + + +             + ! + + + +  + + +   + + + + + + + + + + + +  + + + +   + + +  +  + p !C{cA<^O[bM\yjFB<EE҄ τт΅Ȅ@¿nsND[gHEKJGJ2.*ENBLQWNJORPQTVPKJJ>=&,))()*+12-REHEBEQ030+%6& ,  + + + F!+684 0 */:?-) +9$1&2$&1-&"' +2 O +  !<2(.  +       + + +    + + + V + +  !%   + + + + +  + 1#%#&)**+)#$&$!.%"##%~}~}~}~~}}}~}~}|}|}|}~~|}}~}~}~}~}~}~}~}~}~}~}~~}~}~}~}~~ր~}~}~~}}~~~~~~~~~}~~~~~}~}~}~}~}~}~~}~~}~}~}~}~ ƿ־ƾϰԋλɽú̵𩤙|skguzK2  &lݳdľ󝺤h#    $ ##""!!!"#"!""!! !!"! !!!""!"! !  !      + ;ə溔Ξƨĸё΀‑𙯱ᇑǞÚ𐛅ȨͼрÙ´ߤ㱧Ľ̀⊇뀅ļÀɽꂇ ꁆDQNIFB@ADDA=?ACDD<545456757:;;:7775489::;=@CDEJQWY-/TE>;96(!!%&#  !! !$&),/27=<=FC6FVXTXYLQ.6;dPORVUVSOVXUWY\`WT`iVHD>;<8.IA>EF;501,,9GECB>713,+07;711620.-168<>AD@<89984/$#@'+-.,**%$%%%'(&#!&14,)+468AJLJE;8>B@<:FJiI[n˽Ƹ|}FDCDDCBCEEFGFGFGGGFECCB A@@@AAA@ABABAABCDFFGGHGFFEEEFGGFGGGHHHGGGHGGGHGHG"FFFGGHGGGECBA?>>=<;;<;;:;<;;;:9;;:;::;::;<;:;;:::;:;;;:;:;:;<<;:;<;<;;;:;::;:;<;<;<<<;<;<;<<<=<;;<;<;<<;;;<;<;<;;;<;<<<=<;<;<=<=<==<=<<<=<===<<<=<<==<<<=>=<<===<=<=<=<===<<=>=>===<=<===>==>>>===>>=>=>=> ?>>>==>=>>???>???>>>?*>?>???>??>??>>>??>>??>?>>?@?>>???@@??>??>>? @??@???>>?@@@???@?@AA@@@A @@AAA@@AAA@@ABA BBABBBAAABCBCDCBCBCDDCCDCCCDCDEEEDDEDEDEFEFEEFFFEFFGFEFFGFGFFGHGFGHHGHIIHHHIHHIIJIJIJIIJKJKKIJJJKLKKLLKKKLKKKLLKLLKLKLMLLMNMNNMNOONNONOPO'PPPOOOPRQQPQPOPPPQPPRPPPQQQPQQRQQPQRPQQRSRQRRRSSRSRSSRRSSTSRRSSTTSSVEgw9F2<@<70%;:78898658:88;<:::;<>;::;;;=<<<====  !"!!" "##$&()**)$"""!!!  AA!A@???@>=<<==>BCBB""E$&';O:%&)*,,./15331471/0038:974343/-.///-,..,+*+*+.01A343330-.//..--.00/--.-/465333-..02223 544/7665476787787533456 !!    ''$#$&'%$#"#$%%%# !!!"#$$"!  "!"""<69>;47661/135211++--//133799898557857337=@PjrvU*Ct@`WTWtx?989::9:9:;:9:::9:;:::;:;<;;:;;<<;<;:;<=<<;:;:;:9:9:99:9:989989878889888988998987898889876777676565665556 55566566565665444555434 34334433444323232321bdddcbbd2cccd111cbcccbcba```aaa`_aaa``a`^_`^_a_^]^_^]\\]]]\]]^]\\ZZ[\\[\[ZZZ[Z [ZZZ[ZYZYYZYX&YYXXWYWYXYYXXWWVWVVWVVWWWVVUVVWVVUUVVVUTSTTUTTTUSTSRSSSRRRSRRRQQRSRQQQRRQQPQPQPPRPPPOPPPQPPOOOPOPOONNNMNPONMMNMLMMNNMLMLLMMLKLKJIIIJJIJJIJIHIHIHGHIGHGHGHGFFGGGFEEFGGGFFFGFFGHHGUedoe=p{t]D=qjlfz}}}>wuuhjph_aJE7FHEFHGDFLLSdQffkt@DD@yo]QJKU!>=?CD@=;95122200//2651-.143334566:94NedW[d#&]CwF?;Z[*4K^IMC3566>LCXWW@94LE-HL@V8P8H>58I+'B0$ R !"$%%'+0,""$&&)*()*3:M0WRW+)(('.>#C"$C>99!"#&'&'*/,"<5/.37544.-7A$&%%&#A!!#$%$%%%&(++*++*''&%'((*+*,/110//-**)),-,+,,++,,,+,+)*-,*-00/+)&(.//0/,*,*)-.---++,++---..++-+)'%%'(()('()***)('()%#!""! 5'"$()-38965435621332/.17D*244312210//.+&#@7)" "##$##$"! !###$&*/61)(('#!$&&#$&&''(*+)'))*./0037799::;<@DGJJIIIGFJIHII*00010-,./4--,+,.2885'#1454565334567657854450*26698::.J()/64-ROD/.,++*,121-.0221) !"""$%$$"!!"#$$$%'*)*.132*"   + +.-02+/!$<-**)),+)/0.257954=A2)%  $" &$'#"#$##''$"  + +  + + + $%'#! (*6$/133588;81.4>BSa^e}ΏW & + BF)F2΄+фׄք)߄&(ˊA==3 "%&!    + + + + + + + + + +     " + +    + + +       + +    + +   +  + + + + + + + + + + + + +  + + +   + + + K !#.q^evz_fA';W*,%--*+-+*+0/4C6>?EM+..+NF92--)   + + ! 1@@68SA4+J'" $2",*(,3* 3/+&A&-3+#<,,+(1"" #)"%-,',#/+)3-(*$&*,(2-,$'734# '#//%1#+;'#"  .&) L  + +%  + +                 +       +   +   "%)+++*''(&%$$.! """ -,}~}~}|}|}~}|}~}~}~}~}~}}}~}}~}~~}~}~}~}~}~}~}~}~}~}~}~~~}~倈~}~~~~~~~~~~~}~~~~}~~~}~~~}~}~~}~}~}~~}~}~}~} žҹįүþМ߾%{ykc^`dh~rA. + + +  Od־߁lг½ĵÃИb  + + #$$##!!! !#"!##"! !! !"!"!!"! !!""!!"#"! !""!!!   !    !  + 5㻝􂄅ńʹѣβ־̀ɦஇ߁ƌəɶ󤛐ێ虬ŴNjۤġ՚׍Ɛܼʀ񁃈̻µƾ쁍؀KHD>==@AA>9:?EC@85:95457778:9876646;=@A@AEIKU_^/.SH<99983&!%'#  !! ! #%'+-/5=>3;<:DR-ZT-/.0/_SDHIEBFLNGHL]8ki98bZI54121RHC:35=845@@72>HHDCKDJM'397533225:?BA@BCB?;6-+,.00.)-7731-/2226>=;9653/3/%"%&&#$%&&#  #"  %),.1369=><8840/8;9=<;:;;:;: ;:;::;;:;<<;::<<;;:;:;;::;:;;:;:::;:;:;;:; <<:;;::;;<<;;:;<<;;;<;<;:;;::;;<<;;<;;<;<;<;<;:<=<;<<;;<;<";;;<;;<<<;;<;<<><;<<<;<;<<;;<<;;<:;:;<;<<;<;<<=<<==< ;;<<<;<<<;;==<;<= <<;<<=<<<===<=<= <<==>==<<= +>=>=<<===<=<=<<==<===>>===>>==>=<=>=>>>=?>???>>>=>=>=>>??>??>??>>?>? @??>???>???@>?>?@?>?@??@???@??A@A@A@A@ +A@AAABAAA@A BAAABAA@ABA@BBBABBABBBCCBCB +CCEDCBCCCBCDCCDCBBBCD CCCDCCDDCDDDCDEEEDDEDDEFEEFFEEFEFEEDEFEFEFFFGGFFGGFGHFGHGHGHGGHGHHHGGHIHIHHI3JKJIHIJIIHIIJJHIJJJIKKKJJJKIJKKKIIKJKLKLKLLLKKKLKKLKLLLMLLLMMLKLMMLLLMLMNOPONNONO NNPPOOOPOPQQPQP QPQQPPQQPQSRRRQQSTRSSRQRSRRRQSRSSSRSSTOSSSTSUTSSTSTSUZs;@Y_9-@*+(FI'E#$!>?=957::8799::999<<:::9:<==<<<  ! !""#%'()**)%"9! ! @@AA@B@?>?<=?>>@AACDDDE#"D#%&&%%'(I'#(*037<;300365874..0268565.***))+,-,)+,*)+,-../1132000//1331/.//0B13000./-,1544  0+010113335555454357 755677*522024468 7778   !! !&#!"#%%$%$$$#$$$!W!!!#%&%"!  "#!2');?643/01,+02342//.0///157998831/-/27:DcdqfMQQbZSs\~w?8889:8:;;::;;;:;:;<<;;::;;:::;;;<:;<<<=<<; :::;::;::;;<===<==<;;:9:99:::;;:9:;::9:9:999:::98889899898899:9989898987889888766677767676755655565666565565654555454333443434343432323223232322dddee2ddecddcbbab2ddcccdcccbaba`aba`a`_^^`^^__^]^]^]]^\\]]^^]][[\[\]]ZZ\[Z[Z[Z[ZZ[Z[ZXZYXWXYYYXYWXZYXYYWWWXWVWWVVWVUVUVWVUTST SSTSSSRSSTSTSSSTRRRSRSRRQRQQQPPPQPPQQPPPQP OONOOOPONONNO +NNMNMMNNMLMNMLKLLMMLKLMLLLMMMLKLKLKJKJKKJKKJIIKKIIJJJIIIHIIIHIIHIJIIHIHGHHGHHHGGGHHHGGGFFGGHGuHGHFGGFGGHGQkzuRWs\NG?kmu@@@;rhmAu:?dG=XY^FRJ@iFA;>kdO5I[AF3?<;i.BcY8289=5Z}{@<@K;99x^1;P*->12A2=\K),)')))+069<==;987>C%')+*$C:006743/+/4=##$%%" "#!"#$%$$'(&&(+-,,+))(('&&()-00/1320/0,**+-,*)*++,,,--,,++,-.**-.+'(*,+,022/+')+02-+)())),/.-*)*+,,+++*),,,+**))**+)'&($""#$" 5&%))')*,200124136:::61--./5H,/4776531/.+./3*C;950)" !##  #! ')-//*&%"#%&=$&((')))+,,356:;999=CEC@BEHLKIFHMNIK'.1-021/+*-/,++*-0366/$)24#5434666:7-686562..3889885G-GGEB@>=?O~oN'%/,C ¿7̅ʀvA@KE"&&#  + $ + + + + + + + + +    6 +  +   + + + + +     +   + + +    + " + + +  +  + + +  + + + + + + + + + + + + +     +  > "4YzeqxzPCH>EUkCbXy}Հ$  'C+_ׅ]„Ä„¾gjbg=C`YVM>3/*FHL***&H>E*L'*(G")%$&(+*())**)+7I0BFNT,SKEA:672 :"$ + 0/'24BL(.F":9& !.(*&%):918.+2.)B&'%&9$!125$,) )4+N')+#&.%# 4/$(1$"0%85  =M9 #&0# =1&*$!3$*3 -)] %  + +      0   + 7 +   +  +    + +  + + f +  $%" #&)*)'(*(#$  "(;84//}~}~}}~}~}}~~}|}|{|}~~}|} ~~~}}~}~~~}~}~}~}~~~}~}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~~}~}~怅 ~~~}~}~~~~~~~~~~~~}~~ ~~~~~}}~}}~~~}~}~~~~}~}~}~~}~}~}~} ĿÀ乲惎Ž½˸ȭΠؾttqlf]bgf|{V;) +       2G]ո݀"}浩˻ÿǿźф֧]Q     #""##""!!!"" !!"!!!"!!""#""! !"!""#"! !!"! !  !  !    0Ӧǁ؎ɪйɼѢʿ랜Ɓ󐆀ݎ㋍懊Ӕ苦懗󌢕㒱ɋ԰㊾ΑĢث܉ٗҶ㌎ݺxƼ򃆇Ÿ񀉑Z˸0EB@=<;=??>=;>@=:99:9465554578:749>BCEFLV]a]ZOC><98;<;3(&%&$! !"%)/3:BC58@>CO-///-EBCBCE@ADDHKLRTX`c\PSSKB8--OPQ;47:204302=IA9:AM+/22**02561/14:>BB@>>>=>;640033430.,2653/*)**+299844545-'%%$!I "$'&$"$##$&$$$%*-246647;;:::=;;<=B>3D=IP󍢲ƴůyFCDEDEDDDCCCDF GGGFEEDCBBBABAAAB +ABBBCCDDEFGHGGGFEFEDEFFFEFGGFGGHHIIHHHGFGFG%ECBA?>>=<;<;:;;;<<;;:;::;;;:9:;::;:;;:;::;::;:;:;<;:; ::<<<;;<;;::;<;;;<;<;<<<;;<;<;<<;;;<;<;<;:;<;;==<<;<<<;<;<;<<<;;;< ;<;;<=<;<;;;<;;<<;<;<<<=<=<=<=<===<<<==<=<=<;<<=<=<<<=>=<=<=<=>=<=>=>=>>=>>>=>>>??>=> +=>??>>>=>>?>??>?>?@?>?>???>>?@?@@???@?@?@A@@?@A@A@@@A@AAA@@A BBBCBBABBAAABCBACBCBBBCBBBCCBBCCBBCBCDDCCBBCCDCCDEEDED EDDEEDDCDEDEFFFEFGFGGFGFGGFGFEFGHGFGHHJHIJHHIHIHIJIIIJIIJIIJKJKL KJKKKLLKLLLMLM NMKLLMMNLMNMNNOOPONNOPONOONOOPONONOPPNO POPOPPOOPQPPQPQQQPPQQQOPQRQQRQRQRSRRSSRRSRSRUTSSSTTSTTSTTSTTSTSSTUVvNn;?OU@=HQ@5:IF;=$%#"# :787579::;;9:;:;;:;<<;;<<= !!""!b"$$&')+*)%"##""! "!AABA?ABBA>>?@A@=A@BEEDCB!!#$$%&&'(H1#'.37;# 621357:8750,,/38983-**+**,,-./-,(--.//11/./1000,-///01000/022235667!2 .21/022455*678566567665453465534697434721223 4466,  !!  !   #$"o#$$&$#!!"  !##" !#"""!!" 9*')4=711*(-0011011023120-/332122/,,,/1=>>===<;;;:;:;:9:9::99::9:9:::9::9898989889988998989998788878877676667 6677677665676 5666766655666565655654445454445554 343343334322333232d ed222dddcd111cccdcbababbba `_`___`__`__^^__^ __^]^]]^\\]]\ [\[ZZZ\[[Z[Z[ZYY[[ZZYXYYXXWXYXYYXYXWWWXWWVVWVVUWWVUVVVWVVUUUVUUTUUTTSTS&RRSRRRSSTSRRQQQRSSQQQPPPQQPQQPPQPPOPPQPOPO NNMNNMNNONM NMMMNMMLLMMLKKLLKJKKKJK JJIJJIIJJKJI +JIHIHIIHIHI HIIIHHHIIHGHHHGGHGHGFGFGHHGLolouhEoT[^aOCJFCI>kLQIIKuL.Ec8FIJLJ@DNLIJL^|`P@qnkcaT[VUR299ELzoqV:C4+819:6I<2..01.+,00-.-,+.26!")H637S>W~>.Y=`}cfW69b>9$$$" "!!"##$&'&'''&&(*('&())*)+.//./10-,--,-,.0/-,,+-.--,)*+*)(()**+/1/-030-+-.,,,-+'$%()()))('(+,+!,,,+)'%&$%##$!7/'%(+,,+*,03313138:5-0F),/5743334440-..)I>75541+ !!!#$#! "##679!&(*)(&$$"#$%$"#&$ " %')/1//2458:;;;=?CIKFCA@BEIINNLLN,033022/-,,-.,+,-/0499** +5543335544559918:85641/2667885F6GSSTOKHFB/-,('%'*++)(*--*(''$ !""!"#$$$'()*.57774,#!   U & !$%!!""%&(..0795./0,'!*+/#!#")# %"#",   + O  %#'",0eiyJNSWVNOMKeW@ L 7"ĄńĄƄDž̈́AԄֆE߄ \׾₉@985 0XJF3$&!+! + + 1&8Q$.$3:A7!7$!"(,8A3;9-11/ 17D-F6!*11("%%$0*$"'+5)"'%/"%# '!+(&4 0"59*13B&8&*4  4(.)4 F $&   +     +4 +    + + G   +  + + C +   "%)*'# $')(&$$!   #036531/}~}|}|{|}~~}|}~}~}}~}~}~}~}~}~~}~}~}~}~}~}~}~~~倆~}~}}~}~~~~~~~~~~~~ ~~}}~~~~}~~ }~~~}}~~}~~}~}~}~~}~}|}~} ȿĽ»ɣĊƽînwsrlhkfplH?&       MeΉꂓԻb竎Ĺć贙ɊϽZJ +#""###"!!#""# "!""!!""###$#"!!"!""! !!""! !!!"! !!! ! !   !        )߭۽ߣϿȭߏ𽪊ҾГ󔀀Ցښӥ񺧨܇ݘ뚓ֹ祎軿ҥ̿|̼睋ý򃆄ĹҀ B?<998:>=>>84.)'&# !03 ! !! !$*-.38??97<;;O//+./D18=?BABCEAJQRRMIGGGCA=82.2+7=>2.1301955;GKDFHV67641006:9668;>AC@>=:99876443243.11+*21-(()(&.469654;:+&%%%#! %'()((+*+*,,*)&!$-135346;=?@ACBBAB-6?CAɽFDCCEEDEFEFGHFEDDCBCCBAA@ABAABBBCCCDDEEFFGFGFFFGFFEEFFEFEEFFGFGHIIIHGEEFEFGHGGGFECA?@?=<<;;;<;:::<;::;;:::;;:;:::;<;:;;<;:;::;:;;:;<;<<;;;<;<;<<;;;::;<;<;<;<;<<<;<;;<<;;< =<;;;<<<;;;<;<;<<;<<;;=<<<=<;<<<==<=<==<<=<=<=>=<=<=<=<==<<<=<=<=<==<=><= <<==>>>=>>>=>=<<==<=<===<<==<===<==>==>= +>>===>=>>=><=>=>===>===>?>?>>>??>??>>==??>??>>>??>?@???@??@?@?@?@?@A@?@?@A@@@A@ABAAA@@@A@ABAAABBABCBBBAB +CBBB@BCCBBCBBBCBBC DDDCBCCCBCCDEEDDECDEDEEDDEDDEDCDDEEFEDEFGEEFGF)EFGGFEFFGFEFGGHHGGGHHHGFGHGGFGGHHGHGGGHGGH +IHGHHIHIHHIHJIJIJJKKJLJLKKKJJJKKJKKLLLKLKKJL KLLKKKJKLMLMLMNMNMMLMNOONNONONNONNMNOPRQPOPPPQPOQPQPQQRRQQRQQPQSQRSRRSSTS<==<<  !" !"$&((***&##"""!@ ! BACDBABAB>=>?BCAAC@?@ACDBA!##$&&'&KG0#(.5:<#"83367679:950-,/112980+*+-.-,,+-0-//--,++,-/01221243442200/1244323444225,65603553356676545545 52396874334455544453337:754233467666 !!!"# +""!!  !!"#$# !!!   ! !"G#"""8(!'/795.+)-2..10/1550/0//110-/1/,./03GbZ_bL>DCnpsk_};999:9:9:9:;;::;:9:;<;:;<; <;<<;<<=<;=<; +<<;;:::;;;<===<<=<=>==<<;;;:9:; ::;:::999:999:9:9:9:9::9::8:99::9889::9889:898998898&99889998988788878876777666787676777666766777677767665676656 +5665665666545454544343334434323223223222dcd222cd2dccde +dc2cbbddccb&ccbaccbbabbabaa`aa``a`a_`__^___^_``^__^_^_^^^]\]]^]\]]\\[\]\[[ZY[\[ZYYZYYYZZYYYZZZYXYZXWVWWWVUTUVVTTTUTSSSTSSRRSRTSSSRRSRQRSSRRSSRQQQRQPQRQPOPQP QQQPPOPPPOOPONONMLMMNLMLKLMLLLKKJKLJJKKLLKKJKJIIIJJIIJIJIIHIIHIHHIIIHHHIHGGHHGHHHGGHGGFHGHHHGFFGGFGFGGGFFGHGGvct{||~UJT^[LTSJPE=MOGEe=6RGUFMSXVU9Hf[PONSu}Vjng\NIW[XU;::6.6naHGX;"89PdFA833351-:IE1(;F2/69  &64:FUHf:kF"XFah@U2E4F^jZ[aeTg558:93Y[RBBaU]vBt=JLOH1TNGJMH:TDQkJ8RKWcD<>IC]3=ID;<93X9CV[khh4:OmJ?WMO9C,.=R3-/'1=F?7GE00)'2FKQ*'%" $!!! "''(**&! (1(*&" Y###$$$%%(,-.0;#%'*)'C4/158:41356=$%#A=##E$$$#$%&''%&'()))&$&&%')*,+*+**+,*,--,---.--)),,,/-))-/.-+)))*+*'')*'$'),./.-/0/00///./.*&$')))*)((&&')*,+,,-,*($!"$$$#93*%)-0./0*'-300-.178443.;K,456445532110-),/'71356531,% b!!"! "/4?F%&&&'&&%$$%%%"!##"!!#$)./1576357669>@CFFIJF@=>DHLMMMO,./0230/0//0/,++,../0488*#*34"5445679749;:31740443458W:GTTPMIHFC.+)$$#%)-,'&((()'&&&#" "!!""$&(-255/-*&! !  +  + + &"!"#" ',.,)&&(('&$"1"&!$$!$&) "  +J  +  "!#$"%$&%()\hv}{W^`ff`]Wby⍙ B PHp' +?ÿEф ф?ڄۄ^܅?878/..'$)% +   + + + + + + h +       +         + + + +   + + + + + +  +   + + + + + + + +  s 'FGinOwsG;)';_b`_퇏(['OjۅUʄDžJlrR^faglcTVX:/6<;28701)%/0,*8!$5(.*.3665 -C800/2GOT7@FA90.7:<; _M@-+0$/!%"$ + #%*5,:#: 0*=='/(<@479:*7,-)!$:49H+G$-,-)(*&')&&!+7$1)%+"#'($"&%,-;?0   @'/,. $/!%% -12 +  N +     8   \ + +   +  $  + + + E  !$&((*+(! $%%%'  ! )#.146430.}|}~}|}|{|}~~}|}~}~}}~}~}~}~~~}~}~}~}~}}~~}~}~}~}~}}}~}~}~}~~~}~~~ ~}~~~}~~~~~~~~~ +~~~~~~~~}}~~~~~}~~~}~}~}~~~}}~~}~}~}|}~} Ļõżʭýźŷåő˺炇{R<%   +H݉􈐀з1ŷ˾¾ĸǷѶش]L +####"" #"##"""#"!"!!!"##"! ! !"!"#"!!  !! !!      + ,¸ܳѮŐꡉņ޼Ԋڀȟ˖ˢ񀥰ĭ̀䥁ÔԎ뽮򲝶ŴùƼЀĻ¶Ľž?<9766=ACA;89:97899964314556;;:90/;DDHNTRLF??:89;@C@=BB96/*(&$ 4/04  "%)/488;@CA<0)'(G3346K438>FKACD>J[\SICBB@<8770HCNF99762037?A912;AHW,0:?:304:<:9778;>?@?<=;:9850.11551-/3*(+(!"(++1968;;CG:$!#$$!!##&*,--.1131...17875678@IJHJC;9;?/508===<<;<;<;;;::;:;:;;<;;:;;<;;;:;;::;;:;:;;:; +<;::;<;;;<;<;<;<; +<<;;<<;;<<; <;<;<<;;<<<;;<;<;;<;<<;<;<=<<<=<==< ;<;<<;<<;<=<<<;<<=<=<=<=<;<=<;<;<<=<=<= +<;<==<=<<<=<=<<===<<=>===>= <=>>>=>=>=>=>=> =>>=>==>=>==>==>?>==>=>?>?>?>?>?@?@?@?@@@?@?@@?@@@??@?@?@?@A@A@A@AAAB@A@ABAAABAABBABABABAAABCCBCCCBBCCBCDCDCCCDDDEDDCCDDEDCDEDEDEEEDDDEFEEEFE FFEEFEEEFFGFEFEFEFFFGFGHGGHHG+HHHGGHHHIHHIIIHIIGHHIHGHHIHHIIIJJIIJIJKJJKJKJJKKJKLKLLLKKKLLMLLKKLLLMMMLLNMNM +NNMLMMNMMLMONONOOONNNMNONOOOPPOOPPPOPQPQQRRRQQRQRQRRQQRRSRSRSTFSTSSSTTTUTTUTTUUWqr9?]fRNJFJQ/1&:/-:#?;<;==:66:;;:99::=<;<< !!i""!! !"$'()+,,'#$" !"! "!@A!C!BABC@=??@BCCFA<=>?@?B!"#$$#%%HGD0"%-5;>!=4357;62232102683.--..+**./0/--.$-,,-0002235545534235532112221134423 433456V603556663321213475589865443653346898986455540025566655 ! 4 !!##""#%$! ! ! !!"#$$"!#$$$##$$#" !"!"$#a !!! !""$>-).023.()-142//---/11210233/-.0/0245N[rqe:IYlefubw;::9:9:99:9::;::;;;:;<;<;:;:;<; +:;;;<;<;;;<= +<<<;;<<;<<;<=<<===<<;:;:9:;: 9:999:99::99:9::9:98999:9:9::99:::9998988989889888998 7888777877876765676566656555665554554543434323 223232232e2232eedd2 ddccd22dbcbcbabaababbaa`a`aaa``_ba`a `__`_`_^_^^_^^_^^^]^^]\\[\]]\]^]]]\[[[]\[Z[[ZZZ[Z[ZY ZZZYXWYZYXXXYXWXVVVWVWUUUVU +TTUUUTSSSRSRSSRRSRQ!PQQPPPQPPOPOPPPOPPPOPPQPPOONNNMNONONNONMLLM LLKLKLLLMLMLKLKJKKJKJKJIIJIIJHHIHIJIHHJIIIHHIIHGHGHGHGHGHHHGHHFFGcHGGGHGHxp~nhj^QJMWZ]XOJHMTIB[AIPSL8AHPT\^Wgql_XTYbjw_>peXTPRWefT@>?<.4L{mdE4-**.1430.03572//- .18775224"6<@JRD}l:U:NT@?R+RWhBN]_VO_ad8:<3ZWSK>=@fVsn?@;9:i3MQLADNH7BGFVVI:>`DJH;4Ce5^d>CF::D/P>yE%584%LNA\XAJ@BG<8=/2]]+%[ZP_AoC?eRPP1)''&&''$" %)*))++&!?$&$#"!!"$%&%%%&',29A"%'&#:41358631557@%%#@!#%$$$%%##%',((('%%%&&(+-+*+,--,,+)))+-/.-,+*(,..-,..'')*+`***))((()'%$&*./++,-/..-,-,--)$'*)('&&('')+,,++-.-,*&!!""! 92++*),/.072++.0--0463/,/6I02323554201?0,%$H=5343431.,)! $" <@$%''&%#"%&'&&''% "$#%'')+287657899=CFFGFFEBFKLIHJIN-1@0/00/1321-,--,--.0586(#/3444556754465237::5//2233454Q=FUSLKJFCC@*'$" "(,.,'$$''&&'&%"! $$"&&).10,'$&$""!#&!  +   +  + +  #(!!!(45.'"!"! 'L$)'"$%$ #! $+  + + $' F   + !'''+%#!%*`p{lu|{w~񕜝|t".HLȳτJڄ0ބd:;LM81+'*.  + + + +  + + + _ + +  +     +          +   +  + + + +   + + +     +   h1G^dv~G-8OaZ\s䇎# +! B-+{΄uq]dxwngNHIA7.19;=82-,16-(4%-43-"'+139=9CJG;738>DM=&D>86338AD3 3^N6# + + + + + $(/4*LC#0!,.&$* /8=#.76.,668 -,('&:0DB&&$$#;*,)"$+'"&&0,&"+#(%#/)*!# *"@% ')"30"- "'#-:7/4+9(J;#60+# + +  + + + +0 +      #     + ;       +F  + $()(''&%'($ !!% ! '$/214640/,}|}~}|}|{|}~~||}~}~}~}~}~}}~}~}}~}~}~}~}~}~}~~}~~}~}~}~}}}~~~}~}~~~~}~~~}~~~~~~~~~~}}}~~~~}~}~~~}~}~}|}~} ǽΪփ΀ծſƻü뵥̿ɾp7)       +g K摐쁇񀄁xŸŝތȊaS    #"! "##"#"!"!"#""!"#"!!""#"!!! ! !!!"! !#"!!!  !!! !"!!    0  CߙՖئ΃и֜ۧӤø؀䫦Ë⃱ł˵到ë϶Ƶ嚣拳߿ǎšސڀͺſø썗€ż¿оǾ888;<<<>@>;989:87633258;:6-8DKKLNG>712689=@BB?@DA80*%#'#5430223!&,/104HICEMJ6'#0476L37;7>IK@L*ONQI@<;;;:731/MFHGH>.3C@78<=8>FBESYX+179649>>:r6779;<=;;?AA>?@;744871-,.11-,'!%()6=?HHMP3#$'#"##$')*.248;;>B@?AB>8426?DHLNWZ:-47+0*]m<@KQٌĂHGEDEEFFEDEEFGGHHHFGFDCBABAAB +CCCDDEEFGGFGGFFEEEFEFGEF +GGGHHGGGFGFGGFFEDDBA@?===<;<;;;:9:;<<<;;<;<;:;<;:;:;;;<:;<; +<;::<<;<<=; <<;<<;<<;;;<; <<;<<;;;<;<;;=<=<<;<;;;<<<;;<=<;<<=<<<;<<<;<<<;<;<===;<;<=<=<<;<<=<<<;<<<=<=<===<<<;;<=<=<<=<=<=<=<=< ==<<<;<<==<=<=>=>=<=>==>=>==>>>=>==>>??>===>==>=>???>=>?>?>>>??>?>>>???>???>>?@?>>?@?@??@?@?@@?@A@@A@AAA@A@A@A@@@AA@AAA@BCBBAABBBABABABBAAABCBCBBCCBBCBBCCDCDDDCCDCDCDCED +CDDEEDDDEEDEEDE +DEEEFFEDEFEFFEFDFFGFEFFEGGFFGGGFGGGFFFGHGHHG +FGGGHHGGHHGHIIHIHHIHHIIKJJIKJLLLKIJJK +JJKLKJJLLKLKLLLMLLLM LLMMMNNMNM ONMNNOMMLM LMNMNOONNNOON OONONNPONOPQPOQPQPQPQRRQRQRRQQPRQQRQRRRQRSRSRRSSSTSTSSTSSTTUTTRTTUTTTUmSTUTTUdq7Bh@82124521)JBDF10A!<;88<=;;:99899;:< !  !! !!"! !!""#')+,--'##"!"#"!!"!! ?ABABAB@?@BCaD!@>?>?B!"##$#$%#FC=(&-2;#$=334996566325545201/-*(+042110/0//.,../013458632211//0--.-,./.1223M46531101.02047562.45456552125421255446897344345,32236877755432323568997!   !  "#"!"%&# !!!""##""!#$"#$$##"$(%""!!! "%&810;.+))-010...,--010/0120/./00469PorŵkvRe|WaqTxh;::9: +;:;:;::;::;<;;:;;;:::;;:;;<;;<<=;<;<;<=<<= +<<;<;<;;;:;<=<==<=;:;:;:9:9 ::9::99:9:::989:99:::9 +88899:99889899::9:99989998988787676777676557666567666765656665454545454343454323334323222d23!2d22d2223222d122dd1cccbbdcccbccabc5abbcdaaba`a`bcbaaaba``__`__^``^``^_]]^^^_^]^^^]]\]]]^]\[Z[][Z[[[ZZ[[YYZYZZYZ YYYXXXWWWXWX VVWWVVXWWXWVTUUVUTUVVTTUUVUTSRSSTSSSRSRSQRRQQPRRRQRPPQPPPQPQOPOPONOONMNMNNMNNLMNNMMMNMLMMLMMMLKLLKKLKJKJJKJJKIJKKJKJIIIJJKJIIIHHHIHIHHIIHHIHIHHIIHIHGGIHHHGHHHGFGFG}HHGGFFGHHGHHGHHFVsn{rUDWee_XSPRVSN>LMPNPHHLDECRh`mBCrbUXfotjH:bej_^iycYJA .@`G@O?PBEDA>?@=<=;840.-+)'''+**-/./025@dNQNI]Ci.QxNQ4[`f+GVG>]9\k8m7`RTNXE2CaV9nS6^sAB?{A_PJN>M;RE^LH[@7fIA>=>EGQ+DOg7@UMHJ #$?65345544459;C%%"!##%&&&'((()'()(()*)('(%%&&'***+,++.,+++*((*-+))+*(+-.---+(-..++,,++***(&#(+,,,--..-+)'((*,*'(()'$%'*,,-/1/-**-,*&$! "$A/.+())***.92)/3/,0541-*:+40/2344432221220.'A6,165//111/+)*% "$# 8>C%&$#$v%$%'''((')*"!(,,*-/166343579::<@EIHFCDBDHOROIFJ(.2341.**,01341*(/.++.-.0373'(356668567654666767763,*-/-,+F2AHNPLIGA==:%$#%D(*))&$&'&%&'%" ! "$&$"!%)))*(# !"!#$## " + +  + %""&&++''$ (&**.&1.#& ')( !! !  + +  $&,*  + + +  $'))05¿Ŀ(ʄ8τԄրF׷<36CILE-%?0?C;;DLQC5$Ea017$.&*(%"%("  + + ;450,QQ9"23@-,960(1&"9"1<:3+-)/%$42"@*;K,,&@":/'))"$3)&/".)!%)% ((!1* ?;$/72$."-763#%-% #)5<+)+: +'  + + +  +      U    + +     %  + p  +   $*+(&%$%)++'! #!&+/34550+)'}|}~}~}|}||{{|{|}~~||}}}~}~}~~}~}~}~}~}~}~}~}~}~}}~~}~}~~}}}~} ~~~~~}~ ~}}~~}~~~~}~ +~~~~~~~~~~~~~~~}~~~}~}~}~}|}~} ½þɮưщ׺øǨ臛ƽˤӬ򋗜sf$     "J̈䈊⺵V)OٽƾÿÙԅQ +  +#""#####"""##"##""#"!!!"!"#" !  !"!!"!"! !!!"! ! ! !   !!      !S觼݆żɹڀʱ⾣Ӆ™̼Ӏ⹧ݠݯ֭ŧ宖痊ӓ蒫̢Е醎뀮腓ÿ°̼ʾǿüӧ»99786679:99979984576765887;>975333468=BEEBBBE?/$&31///35/23#&'*010,.;AEFCC@HebM647441/./1,NPMMTSH92>KB:8=MSUL=?K/25z78:=><94136:=@A@BGGBDHEDC@??72+*.20./*! !$,7?DGK=%!)+'$%).../14:>>?A?<755886547>AB?:;CI>5;09(NW^n@ELRXkm}nGEEDCDEEFGFEEDDCDCBABBABCCCBCCEDDFFFGHHGGHGGGFEEFEEFEFGFGGHHHGGFGHHHGFFECBBA@?>=<;:;<<;<;:;;;:;;;:;;;<;:;<;<;;<<; <;;;<;<<<;< +;;;<<;<<<;< +;<<<;;<<;<;<<<;<=;<;;;<;;;<<==<==<;<<===<==<=<=<<=<<;===<<=<<<==<=<;<=<=<<==<===<<=< =<<<===<===<=<=<=<=<===<<= <===>>>===<=>=>>>=> +?>>>=>=>?=>=>=>?>?>>?>?>=?>?@?>?>?@@???@?@? @??@?@@??@@?@A@AA@AA@A@@@AAA@AAA@AAA@A@AAA@ABABA@BAABBAABCBCCBCBCDCDCDCCDDEED EDDDEDEEDE FFEEEFFEEFFEF EFFEFFFEFGFGFHGFFGGFFGGGHGGHGGGHGGGHIHIHIIIJIJI JJJKKKJKJKKKJKLKLKKLMMMLMLMLLLMMLMLMLMNNNMMNMNNMONOOONNOONPQPOPPQPPPOPPOOOPPQPPPQPQQQPQRSRQRRSR +SSRQQRSSSTSTUTSSSTSSST +STTTSTTTUUT@BCB@ABBA@?>@BCE#E"%&%%GG>%$('+6=5*,38787311258534/+(*-11125622/,-.0223342/,)*--%.020/-+(),.01.022431121256503865677 56446/,124$57434654124636635634556434U5523223577995313569  ! "##"#$##%%%"!!!"$#"""!!!"#%$"#$##"#$#""#%#!  C!=3,(*.000-*)*.0/,,./133233112100..039T^vĔSUYgrUpN\jv;99:;<;<;<==<<<;<<<==<=><=<<<;<;<<;;;<<<==>>>=>=>===<;:9:;:;:9:999:9:999:9:9:99:9899:9::99988988989987788787 667767776667676765654545445454543433343232323323332d22ccdd1cb1cbcbcdccbbccbbbcb`aaabbabbaaabbbaabb```_``_`_`_^]]___^^] +^]]]\]\[]]\]\[\[ZZYYZYYXYYXXZYXYYYXWWXXWWWXWVWV UUUVUUUVVUTTSTTUVTSTTTSTTSTTRSSSRRSSRQPQRQPPOOPQQPPQPPPQQPPQQQPONONONMNNMMMNMNNNMMMLMMLLML MLLLKLLJJKJJKLKKKJKKLKJJIJKLKJIIIHIJIJJIJIHIHG FGGHHGHHHGGHIJIG_ty]YTTUYXTPFnvxna[VQLHHQQ6TgFIILN@;N`e]Ibr?]JSesp_MJ|nj\Z^huq<.#EB 5IvQ@IR)C-URPYWVYOC?=78;=:3,)-,+,,+-./235435(dUOC{ClA/4cB7VWEGDF:j@Umhah7357c\UCMCR]A?jE-\{PRCW[F>iECI?K8IPNDA46N;bFRZ}@0DL6QplK>>?f^Y890:ALG\\L@n30)@C6OnWXKZj;8('%#-"12H&""#!!!l ",12/,*$$+0+'$#&*++))('&%%'.6<<: ;65345456667;F&$""###$&&%'(*+*+++*)+,+)''%%$&')**((**)((*,)((%$()*,./.-+),-.-+*,+,-,,,*((('&&*,,.-,+)'&%&'('%%%$%&')*,--.//,)('&%%$$!3* #*'()++*++,,01-/3551)@1982,16654532220+)&B:95()463,./.,+()&  "!''!!%'(()'&&%%$(*-0R0/-)(/3145332/257:;=ACCGIHFBCFKMORPNM*14443210/01/.21(%',*),-.0351)/5567677987664420130+,/-)C'9HKLLJHE>=>;&%"" "%''%&%'('$##"! ! !  "#','"%('%#"!# +  +   +  !"   $52$&+,,/.)"'/'" #)+*"%!" !#"!$     !#% + +  !' 379D)-19ATU[ezW1'"KE-¿„$Ƅ΄τ +τЄՄӀ[۾փ6/>(*%$$"    + +  + + !    "      5 +          + +  + + + + + + + +         1!7Ka}yJJMZdtPaMXh؉6. +   A'ه)х˄,¿Àb`rIEA?>BA>;-ETSJ@<950,,44"3=*,-0@3("1=<8.:G*:,4ALJ=33RE@97;@MJ$ !5X8'-,"31+1025.&! ! + +=:4(H*A%3 95"(."8%6@86;61.!)$'3'%@'9L11'12'!5&%& $)) (/%,.E#(+;6"G7,! "'#.0%%:$%-D36,2:  +    +     '   +     +  + +  +  !$(*(&&&))*,)%%& +/24654-+*(}|}~}|}|{|~~||}}}~}~}}}~}~}~}}~}}}~~}~}~}~}~}~}~} ~}}}~~}}}~~}~}~~~~~~~~}}~}~}~}~~~~~~~~~~~~~~~} ~~~~~~}~}~}~}~}~} ſļ慎ҬՀDzп̶ݯߙ內oD%    + +    I%EƂᑘíLJ̨žO  %""""###""!" #""!""#!!"""! !"#"! !"! !!! !         &~ʳ҆ͯǽ肔몞ގ潸Ɔɝ֑ٝԞ躵ųī䜒Ϝϴ诪ӅڵܪԞވӁȀˮĺ¿ǛOŸ:˾&=966433489887785323579975214;CIG>;7522146>CEFECCDA1!2)0!4/,+,21+.2 "%#$%)/1)0=EEA@=9,+?.365A+,00/0458:40,&*/,*(J)S[Q5H]QKHD:36305EP-+L=J-4;99848;<8713:?CEFCBJNJDIJuDAAA=5)*/51,..-($" ! &6=CF;)"$)(*,.135;>AAFKD>97348;779:@C74888=DB@F>>*T_b]8HOTROS]iw{`GFEDDCCCDDDEEDCCCDEFFGFEEEDC BBBAAABAABBCBCCDDEFFFGGFGGHHGGFEEFFEEEDEFFEEFGHIH GFFEDCBA@?>=<<<;<;;<<<;<;;<<;:;:;;<<;:;::;<<; <;;=;;;<;;<<<;<;<;:;<;:;<<=<; <:;;;<;<;<;<<;<;<;<;<<<;<<<;;<<<;;<<<;<=<<=<<=<=<=<=<=<;;<=<=<;<==<<=<=<<<==<=<==<=< ==<=<<===>>=<=<=<>=>=<=<<=<<===<<==>=>>==<==>>=>=<>=> +==??=>>>==>?==>>>=>=>>=>>?>>=??>>>???>?>???>?>?>?@???@??@?>@@@??@@?@A@??>@? @@@A@??@@?AA@AA@AAA@AA@@@ABABA@ABAABBAB CBABAA@AABCBAB CCCBCCBBCCCBCDCCCBBCDCDCCCDDCDEEDDDEFEDEFEFEF EEEFEEEFEFGFGF +GFFGGFFGHGHGGFFGHHHIHGFGHIHGHIHIGHIHIHIIJKJIJKJKLKKLKKKLKJJLKLKKKJKLKLMLLKLMLMLMNMNNMNMONNNMNNOOONNOONOOOPQPOPPPOOQQQPPPQQPQPQPRQRRRQQQRqSSRSSRSTTSRSTTSSTSTTSSTSSTUTRTSSTTTSUUTSSTVUUUTTTVUTUTSTUUVRK<619Y:79:<7438=/5)2D(# ;99:9::88::;;;<;<;=>??  !"!"$%')+.0/+'#"##"#""!""!A@?!y@@B@A@BBBCB@@B@A@A#$%%#DEF=:+$')+,+(*,)(/4695115:630)+*+./.036532..-014544210/0...---/0,++().11/0110220-065331145678@71656343./1367677534552247756545433355544321154545876654589998  !""!! ""!!$%%#"###"  !"$$##$$#$#$##""! N@2'%&*+//-*))-0--0455676432211/0.-.258A[pQa]JhnkaӠr<9:9::;;;:;;:;<;;;<;:;;<;;< ;;:;<;<<;;<;=<=>=<=<=;<;;<<<=>>>=>>?=>>>==<;<<;<;<;:;:;;:9:9:9:9:989:989:;:9:989:9:9989888987887787887767788778767676 +565556655565654555454445545545454343334343233f3 2fg332232dd1212111bc2dbbbccbbbcbbcbcbbcaabaaba```a`_``a`___`_`_^___`_^]]^^]\]\\[[\\]\\\[\\\[\\[ZYZ YYYXYZZYYXYXWVVVWWVUWWWUUVVUTTUVVUUUTUUUTUTUTSSSTTSTSQR SSRSRRQQPPQQPQOPQPPQPQPOOPOPONOONOOMNONM OONNMMMNNMLNMLLMMLMLLMMMKLMLLLKLKJJLKJJJIIJKKJJJIJJJIJJKI HHHJIIHIIHIIIHIHIHGGGFGHGHHHGFHHGHHGHHGHubz\ZVXZ\`^Zqawvkg\F>=LH?],*,;WA@QVQW30'>986742125:71.00136843/B6mF-@4Q8LGY;6Wchkk:3NRARIQYLFxdg\XhogVTYME:T>>KYRUUCEAM{c8[kYc^;FHRTu^7otOO|_05::7. 26WREBBEK^iA.\@gN1!(.%3/&>17-+$%'(&%$"#!k #&0522594'"%'&%&'*+*+-*)*)&$$'0: "";5225655667878C%##"!! "%&%'))+++./+)**('('$$%&%'''((())(&&(n'%$&'(((-0,($$&&'**+,-+-,,,+)(&&)*,--+*+,,-*(&%&''&%!!$$$&'+**--,,+**'%$$$#!0 "',+'()*.+-530032.*%+3?71,/56540+#;9<;;<8&%353/./,*)(&%! ! #!"#$*.,-+&$"$(,021+142112463553235<=?CHCADGHIGJLNO),*'*57533144210//0582%@(,**.2354,*3445645#787753111/.-++01VP00P$&=CGIJIFB/8!Y55*/ 4)(12+0  + + +!:(&2/7%/' C'%1!,-148:;8 (+#-''11.H?C63@F>112+$#2,1(,-!#")8*29-02!!-),%@?%"D94+#')49!:.)<&  + + + + +        (   + F   +     +  +    # $(*(()))/+(  &,/332.++-+}|}|}~}|}|}}|||}|{|~~|}~}~}~}~~~}}~}~}~}~}~}~}}}~}~}~}}~}~}~}~~~~~~}~ ~~~}~}~}}~~~~~~~~~~~~~~}~~~ }}~~}}~~~}~}~}~}~}~}}~~} ¹ɵɽֺıÿɾû׿糀٧ tP  +    &vƁ舚߆Fᶪ2`ѦɼʎW  ##""""###""#$#"! """#"""!!!"! !!!" !"!        !!  +     4Œ؅陟⦗ֈ׿܁̹񡜀řӋ̘ݍ갿Ůŝ㌭ͺ咴Έ; ڽʼĽ颫ڼǾij{ڬ:821000246889442124{69=>BF@9750..-132/03:?BCEFFE>;4(9.1!-"61/*),..-16 """#!%/6;ADH;4/,.06=AEF6+(+/224750-,.-&&G=7<8>EG==;8BQ--+,.5=97~:AB??=8@CFGEF@>@=9866575/*)($',130-.+&&$'/7?<2(# "%'*+)/7<@ABCEEA9327=A@?>>@@:+,38;>DKM:#:/+169:ENLILWaefi|FEECDCCBCCDCDCCCEEFFFGFFDCDDDCCB3AABAABCCABBDEDDEFGGGFFGGGFFFEEDEDDEFFEFGGGFFEEFGFGHIGGHHIHHGFEDBA?>=>>=<<<;<<;<;;;<<;<;;;<;<<;;<<;;<;<<<;<<;<;<;;<<;;<;<<<;;;<<;<<<;<;;;<;;<;;<;;;<;<;<;<<=<;<<<=;<=<=<;<<<=<=<<<;< ==<<<=<<===<=<=<==<<=<;<==<<=<=<= +<=<<<=<=>>=<="<===>==>>=>===>===>==<==>===>>=>==>==>>>= +>>=>>==>>=>=>===>>>==>=>?>==>>>?>=> ?>=>>=>??>?>??>?>???>?>?@@?@???@@@???@?@@??@ +??@@?@@???@?@?@ AAA@A@@@?ABA@A@A@AAABCBABCBAAABCBBBCBCBCDDCCCDDCDCDEDEDEFFGFFEEEDEEFFFEGFFGFEFEF HGFFGGFGHGGHGFGHGH +GGGHIJIIIHIJJIIIJIIKKKJJIHIJKKKJKKKJKKJKJKLMLMLMLMLNMNMNONOPOPOPQP +QQQRQQQRQQRQRRQRRRQQRRSRQRS TTTSSTRTSTTTSTUTUTUUTUVUTUTU2WKx>987:GW4:9:9,2.4%*$99;;98;;;9;;3  !!!"" "#$&)+-..,(%$#"""#! "! @ ! !!A@@ABAB!A??@@@AC$%%%$"C@>E=$"&$&(),-+,2556772*2751.,+*-0025466311100477540...10.,,-..//0/0247833344420//10//./0354465666783/5645322.0465335421355433222443624 34553334542434523697644557688:99! ! """! "! !""!""#"!!!  !!"""!"!!"#$%%$#$$$#!! !! !"&8,'(+-+4,+01//00376742221/-,+,.14?bfmrBjYndj[bsdzxn=;:;;:; <<;;<;;<<;;<;<;<;=<=< +===>>==>>>=<<<;<> ?>=>>===<;<;:;:999:;::;:9:::9:::99::9:;:9:9:9:999:::9988898998989887888987887 876787667677765454544543433343434332223212&deed21122211cd121cddcbaaabcbcbbbccbccba `aa`aa`aa_^^_`_^^^___^^^_^^^]]]\\]\\]^]+^\\\[\\\]\\[[\\\[[[YZZZ[ZZYYZYYZZYXXXYYYXXWXWWXXXWXVWWWVWWVU TUVVVUTUTTSTUUTTUSSTSSSRRSRSQ RQQQPQQPPQ PQPOOOPQQPPOPOOOPPONNOONMNOOMNNMNMNMLMMLM LLMMLLMMML KLKKLKLLKKJKJKJJKKJIJIJIHHIHHI HIHHGHHHGHGHGHGHHHIGMnvUSYZVZXRJ}8YjbYWIFKC:aZVVEMKLPKDJMUfrdfBVMRRPPNKJT\]XUMCFJ," ?=:?fGAHE11><741122459kEETLY@[F_AELF:)%.310/.*))*(&! ! !!! ;#&(*)'))((+..+,,/43/@0100..1349=?AEILJNQPP**,/35520/*&)+,--02245-*.11124561)-34$57885330/0//.--//TKSRE'-;=>ACCA?B@@=&$!#%&##"!"!  $%&(#!&))+,+("  + + +  + + +  +!"! "% *&'+,)(&!&- #%##  + +   +  + + #** "%$+0//4ALQZhS $O.2 GODŽ ʄ˄8Ԅل%݅ހДˠD;865<@#((%!      + + + + + + +            $       +     +  + + + + + +  +  ! /$PRsjf?fSh\yhfMHNOcrĶ,T+'I%҈̄ɄA1bcDBGHDFB=7W%:EB>=215/':46=/10/4/*//2?I?F-75<>>?=77=BB=92,.+%G1,0&' 1, + + + =,+3.4%1(#*3**00)-2 "/69:=8!4!%*')1D1&=21>B65="!/#7"40&*+(,,'$168-+?- $%!64,1.+<&( &'"*,7'#>5 %  +^  +  + + + + + +     2            +  +u +   !%((*+)(+&)) !"&*+++/-,)}|||}}}|}|}|{|~}|}~}~}~}~}~}~}~}~}~}~}}~}}~}~~ +~}}~~}~~ +}}}~~~~}~}~~~~~~~~~~~~~}~~~~}~}}~~}~}~}~}~}|}~} ͻ쇇ͩկ;׹Ӹ½ǾƼֽർʯǻ +ûuo/%          &_Ղ銘ֹWɨƾ츢ÐvI    """#"""##$$$#!*"!##"!!"""!!"!!"!!! !!!"" !!! ! !""!""! ! !! !    !     +e!Y󂎗ˡòඃ혋ޚ֋¸қͧ߃¨ҕ߱ƙξȽۻҝÌŷΖʴݶĹķվöċŬſǾ倔ׯ .0///..,.0013/368863345>QTB7310/.+()).13449=ABCDDC<3-)A/*1!"6131*%+/1024#"!!0F@,$(04435;7/-.-":?5.259CQRD77=<:DRQOY//8872247579::DB:74442.--*((&'#"#.84/././08DD4&#"&%! !'+--/6;?DDB=<82-29?HGFIFB@>;69<=AIJ36"1F9045;DLC?ASfbUVp^uDBCCDC(BCCCDCCDEFGGFFFDDEDDDCCBAAA@AAABBAAACDCBDFEEFEDEEDEFFGGFGFGHI&HHGHHHIHHGFDDCB@??===<<<:;<=<<;;;<<:;<;<<;<;;::;<;<;<;;<<=<<<;;:;<<<;;;<;;;<<;<<<;;;<=<<==<;<<;<;;<<<=< ;;<<<;;<<=;;;<=<<;<<=>=<;<<<;<>=<<<==<;<<;<<=<<<===<==<<;<<;<<;<<=<==<<===<<;;<<<= +<<==<<<===<=<==<==<>=<===<<<=>==<=>=<=<=>>=>=<=>==>>>=>=>>=>>=>>=>?===>>>=<==>>>=>?>>>??>?>?>?>??>>>?>?>?>>?>>?@@??>?@?@?A??@A@@?@@?@A@??@A@AA@@@A@AA@ABBABBABABBAB ABCCBABCABCBBCCCBACBCDDEDCDCDDCDDCDDDCDCCDDDEDDDFEFEDEDEEFGFFFGGEEF GFGGGFGGGHGIHHGFFGHHHIHGHHHGGHHHGGHIIHIHI JKJIIJIJJJKIJKKKJJKLKLLKLLKKKL MLKLKKMLMMMLMMLMMLM NNNMLMMMLMNMNNNMNNOPPOONOOPPQOOPONNOPPPOPQPPQPQQPPQQQRRQRPQRRQRQRRPQSRQRSRRQQQSRRSSUTSSTSTSTUTUV)UUVWVVVUUXAT?<99@>4D[7=;787(3+7%,%! 99:;:968;: !"!""$$%(),00,'&$##"! !"BACAB??AC"AA>?AAAB"#%%FD##BAAA7),*%"&'(,25566774154.06940-./044566621430221221..0-,+,-+*)+.000/02586544321/-,-..//13554355455532203464332/1554322301567413346523645664555542333238436965544433456776889=9  56!!  !!  !#"# r""   !!!"""!""##"!!9=!! @!G<-&&()**+-+-0101332354222320*),--16F]g}<3^zh{`eTX`2d}:::;::;;:::;;;:;;<;<=< =<<;;<:<<=<<<=>=<=>=<===>>>=>?>>>==>>>===<<;<<;;<;;:;;;:;;;:;:;:9:9:::;:::;::9:99:; ::;;:;::99::9:999:9:::9:99:999899889877899878778788778778767776667877655656565454354344323323223332e232332122cb1dbbcbbcba`a`aa`aa`aa``__`___^_^__^^__] \\]\\]^^][]\[\[\[[\[[[ZZ[[Z[[[ZYXYZ[ZYXXWYXWWYYXXWWVWWXXXVVWWWVVVUUUTUTUVUUUTUTUTUTSTSSTTTSSRSSSTSRRSRRRQQRRQQRQRPRRQPQPONPONMN OONNMMNNMNMNMLMLMMLKL KKLLKKLLLKLKJIJIJIJIJIIJJHIHIIHGHG +HHGGGHGGHIHGGHIIHHIGcySS]U~_m}hTZa_aaSRVKZO8;NSOLILKFJKKUWZ`_[_cff\TQUTPQOKMEP>?><:85,9lEk,9:73/-///AC, !! 866640.,-/0253145,WHJBiW;943D81P,El*:?93Bb]WS\nq\ZM5A[Wng]Cg`eWP\c@<@MDi9DQXfk[XLBCV_`wdTdA@L9eTnTISRESA^,4BEC;4 Wi8jaP$#"?pM]`IDO`/65=C411.i+(&&" %-691,&!$/-**,.0///022124,&$$&-3686210011//1266=###" !"""#''&&'+**+,+-./0,)***(&)*)'$$&&%'('(()*+,,+(&%%&&)+(%))()*+--*'(&#$(,,+))*+)(('(&%$&'&'%$&)(&&'('&'&&&()(&##!@/" #%%(**((+01137884/)# )%.-*-0/02342/+":9;<<>=<>7%$.321/0-*,+(##&$" :#&&(),--/0021143112-''-1-,47;DG,1K>:6:=A?AD>73 #%&%"&41$#&)**+(! + +   +  + +  ! % "++#!#")1/08  #% $#$# +      + !! ! (+* $(/(&)8FFC]Lג򥫫:! ,L ¾ÿDŽɅ6҄'ڇhZɀF=9675)2="&#    + + + + + + +      B          0 + +      +  + + + + + + +  + + + + +  +  + + +    ,-KOj{k03`o\qqWdSe8F)Opŭ1:gL `u΄R„&rn|BDJ?W*:7;508;*!%/+B!',09?2/&,21@3'1((*8,&*+$-&6 +%;!82 @+3*%#  +  +    +  B    ,         + + G     ! +   #&&&5...,'#  "!&+*,.*$!}|}|}|}|{|}~}|}~}~}~}~}~}}~~}~}~}~}~}~~~}}}~}~}~}}~~~}~}~~~}}~~~}~~~~}~}~~~~~~~~~~~~}~~~}}~}}}~}~}~}~}|}~}~} 񇍏èּݶݺѶ䓭¼˻ΝЙϿ悅|;)  +6!M^ϽۀୖѧǢăɣʾS   " +##""###"#""!"!!""! !! !"""! ! !"! !!  !  !  !      + +!7뎧ȹŢλ㒃۾Տն蹄ꅾ✄ԜШϦڅc󃉋̺лŶɹ󃓤$1210.,,*+,-0237:96657:<<931/-,-*,,((,-279:9@A8#!)6,)/37<@GE0'*36868?A7,%&1.369CHLUUPG>@@??FJS6;98996267759?CEEA>CFI=385344/-)()&#%($ !+6;41;>A>7.$&%"" !&)-157;9>=:55;BHGCCILGEIJIHJLLE8=#+8CE@99:CHEABDHNUXyPRBAABBCB CBBCBCBBCCDDEF EDCCDDCBCBBABABCCCDFEDEEDDECEEF EFFFGHGGHIHHHGHHGFFEDCBA@@?===<;<; <;<<<;;<;<<;:;<;;;<;<;<;;<<;<<<;;<;;<;<<;;;<=;;;<=<<;;<=<;<;<=<=<=<<=<=<===<<=<=<<<=<=<<;<<<=<;<;<==<<=<= <<<=>===<<==<=<=<==<<= +<==<===<=>=>=<==>=>=>>===>>=>===>?>>>=>=>>=>=>??>===>?>?>>???>>?>?>?>?@?>??@??@?@@??@?@?@??@?@A@AAA@A@?@?@@AA@@AABAABABAAABAABBABBBABAB CBABBBCCCBCCCBCBBCCDCCBBBCCDDCCDCD +EDDCDDCDEED EEEFEEDDEFFEFFEFEEFEFGFGFFGGGFG +FFGGHGGGHGHGHGHHIHJIHIJ KIJJIJIJJKJJKJJKJKLKLLKKJJKKKLLMMKL MMLLMLKKKLLLMNNMNMN OONOOONNOOOPPOPOPPPQPQQPQPQ RQRRRQQSRRQQQRSRRRSRRSRSSTSTUUTSTUTTTSTSSTTUVTUUUTUCVVVUTUVWsT<:>=+*2D]7831610+:&*&"!!:99::=;<<;<:<<>=> !"!!""$'*-//+'%$n#!""#"! A!"!@C!A@@?@B"D"A?<;@DDDC$%"B##B?@ADB4,(" #$$)3556569!"311/477400113232.-,134582110..00,--+)'(*-012203676420.+*+,./0124 +5422344102354013441/1320256875344456 3655434542355358755566555424676@79677666   !! "X  ! "##"""!""?76;?!#$<*%%&&((*--//146324534221122/+.025=Uzt[S@X[xtn~kSsFACi<;<;<;<=<==<=<<;<<<=<;<<<==>>=<=>==>?>>>=<===>>?>=>==<;;;<;:;;:::;;:;:;:;:;:;:9:;:::9:98987788787876776 +76766656765654543434321c2221c)111bbddcccbcbcbabbdcaaa`_``a`baabb```_``a_^_ ^]^]]^]\]]]^]]]^]]]^^^]^]\[[[Z[[Z YZ[Z[ZZYYZZXXYZZYYYX WYYXXWXWWWVWVVWWVVUVWVVUVUUTUUVTTUSTTSTSTSSRRSRRRQRRSSRRRPQRQRQRQPPPOOP OONNOONOONONNNONMNMMLLLMLMMLLLMLKJJKKKJKKJKKKJJIJJJKKJIIKIIJIJIJJIIIHIHIIIHIHGHHGGGHGHGHGHGGHGHHIIHPpCc9OXaqpkmellZ[TS(QEEGFED<:GKFCEGZsehowuvh^^ZYZSWQH@G %/'$"C?=:982-29;832.//3B;_,79<$'%8+/6750--//01331134 9=E=_N>4U*GNR6?$%.=1=SbXI;U=<;jL7dWhmwzwX?i2=:8:<==<;91*-3320.-,.,)&$ "#! @#%)-.00143011320//20'',149=?>#+/I<:DB@DMPM%H&(')./,)'+,--/+),.0../0./02103463,/55430//243231/12211/-YTQMF9&7>=:767>X,-.--+$#-/+')+L$   + >   +  +   + + + +    A   +       +      + ! &&# 3.,*("""! $,,+)'# }|}|}|{{{|||}~~}||}~}~}~}~}}~}}~~}~}~~~}}~}~}~}~~~}~~}~}~}~}~}~}}}~}~}~}~}~~}}~~}~~}~}~}}}~~~}~~~}~~~~~~~~~}~~~}~}~}~}~}~}~}|}~}~}~} ؽȡָꪊȪ⏩ʿõĵᲄخح woR    +"D؁焑²Iƹµ̥Ҁ卦 e $#""# $#""!##"#"""!"!"! ! !"!! ! +""###"!!  !!   !!  !   !nʹþ䨥݈֟ɽȏžѧΉӍ˩񾀛ȗ󜙔ֻꀄŦ֡戬ټ򁋌굸ĴI톐0dzƸ𖪭¼»Ķ±끃̱ 553/-++*+,/23578979<951/-,*,1/1447999=@@@=95,'&'$<0+-/../0/+,.11-++0: "&*147><.&-?8#&/5:@FOB/.4:=AENR:&!E:7<@>U7@D@<=<><><:9:AFHFD@?ADA/28;BFHGED?855432*'&%$#"""$1=4.<'E0%"*%""# $(*('-48899:9?BAGHHIKHIP,UI@ADDGLF:$.%)++-:EVP:175d>><=<=<;<=<<<;;;<<=<<<;:;;<<<;;;:;;;<<<;<;<;<<<;;;<;<<<;<<==<;;;<;<;<;;<=><=<;;<;;;<<<;<===<<<==<<<=<;;< +=<<<===<<=<=<=< =<<;;<=>=<;<<;<==>><=<==<<=<;<=<= >===>=<==>>=>=<===<=>>===>==<==>===<=>>>=>>==>=>?>?>=>=>>>?>>>?>>>==>>?>?>??>???>??>?=>?@?>=?@?>?@?@?@?>?@?@??@?@@?@?@@@??@?@?@@?@@??@?@A@A@AA@A@AA@A@ABBBAABBBABABBAAABAABCBBBABBBABCBCCBCBCBCBCBCCCBCCCBCDDCCCDDCCDEDDDCDDCDEDEFFDEDDEDEDEGFEF +EFFEEFGFFFGFFGHGHGGGFFFG IGGHGHIHHHIIHIHIHIJ IIJKKJJJKJIJKKKJIJJJKL MLLLKKLLMLMLMLLLMMNMMNMNNNMONOMLLNMNMONNONO POOOPPQQPO1PPQQRQPOPQPPQPRQRRSRRRQQQSQRRSTRQRSRSSRTSRRRSRSTSTSUUTTTSSUTSVUTUUTUTUUUVTTVUVVUUUVLWVUVVWVVVWUWY`A<64-054-7G+3A;5+4A','"!!!9:;<<>><=<<;=;<= ! !! "!$&),./*'%$##%$!!!##!!AABC!B"#!!A!! !AA><;?AFEDF$$CDD""B@BCB:)&"!$%&+35346!$6.045663420/11-+)-2655763320.2201/..,+-01144./0113 4677643-+-0124446760-024102 323103232/-/242367766432125/23433322443100044566433266554436874576897979787 z987 ""!! "!7!#"" !  """!! ?;;<= !"#$#>42/+(((+13458974144023444341-.25GN~b06bthtMmaPsd,:GSUNĂ<;;;<<<;<<<=<;<<<=<=<=<=<=>=<=<=>?>==<=< ===>>?>?>>?@>=<;<;:;;;:;;:9:;:;;;<;;:9:;:;;;::;:;:;;:9:9899::98988999889988899878899878878877787676767776676555655565565554455545455543443433434343344332233323222d3212bd21(cbcdcbbcccbccbceddccbbcbabaa``bbcbbaa`__`a`_ ^^]]^^__^]\\]\^]^]^\]^]]\[[\[[[Z[YYZ[YZYYZZZXYXYZY +ZYXWYWWZYXWVWUVVUVUUVVU TUUTTTSSSTTSSRSSRTTTSRQPQRRQPOOPPPQPPPQPOOOQPNNONONM NNNMMNNMMLMLMMLKL!KLLMMLLLKLLMLLKKKJJKKKJKKJKLKJJKKJ +IIHIJIIIJJI HHIIIHHIHHGHGIHHHGHGH GHHGIHGHHGGFGHHIIIDo}lZWYcbgtywsropn\LF^KKIGfa>HGA@EK_nnjnvtgdXWV_a^^\SC? ,.720E<<87:;;:9:970/+*)DTd-*/-,*)++(),-//,+***),11/.-0BqAdUD7V>I&Ma5+ +6=UHC@H??uwR>Tlqxjh~aE>ebtiqSLF=FMa>E@WtUTb9?D6L`TKGDo?<6X6RNGIu?d\8?6?#" 4`0&.J\D.,%#%&% "$$%(,1343/*(&$'%&(*,4 ! "#$!:/,0/2!/+.-..130+,1,*0.*+-+''+//2235449##!!"G#$(*+,-++,.0//12.,*)*+-+)+*(&$&()($!%&%$#%&%$&(*+*+*)**'%$$(*)'&)*&(*('&'&! "&),++,)(&%$%'%$&('%%$##A7,%$##%(-3--132137751+'$#)<)10/-+&"CBAABEA?;9:98:9750.1332.,+,+*+'! !"#"!"&(.41136865542113/..--35@E'B?(8+>7:>CAAM**)))(&&')*))+/0.-.+*043/./8011122322475.0432010-,111341/010,WTTQKFC3$4522457>A?<996"  "%&&$&'" #&&$"!     $,! &' + #"!&"G. $%#!! #')$! "  !"#"  +      ! #!#(+"#'$#.,  4".4138>GҌJ"Gy$ZG˄ɀVQþ֦H=1("''!#+(#  + + +  + + + + + + ^ + + +       + + +  +   +  9              + + + + + + +  + + + + +  + + + + + + + + + + );fls{B&0LhcR`AS[TfE18BFC҄-2 ;Ԅ$˅-Ą4{o_\QFACHFIQVQPQOSTGf76E]_`5553@>).-**-1ETXVXbcWTFCAFEDFB;," #16   +D*;.$/%)0   2&##($$>?2$1AFKC>IM8(#9:G>F4/("(,7$+'5A*&1!")3)((/ ()(('2:8! + + + )*1G + +   +  R  + +  + + +    + +    +          + +       !$O++,)'%$ "'**(%&$}|}|}|}~}~}|{|{|}~||}~}~}~}~~}}~}}~~~}}}~}~}~}~}~~}}}~~}~}~}}~}~}~}~}~}~}~}~~}~}}~}~~~~~~~~}~}~~}~}~~~~~~~~~~}~~}~}~}~}~}~}~} ԰ӷ񀐗퀁ǺǷɼ rsQ5 +  +#?닙gfȩݷɝʣ܎g   ###"#""#"#"!"""!"! !!"!!"!"!  !! ! !!    !!   ++캀´恔ŸڵѦ켴䤹ݺ挘ǵóՁ􆋋ƖžࡦՀ󅋊ź推ļÿ񂋒Ż 51.-./2334358;9672/,)'))(+./163.577;>@AFC<3//.++*)((<-255;<;6143220017$()''+/8B;(&/?.#)/3?DIK61:@FLOTXA=DLL=?K&((,+031)OQT^8FOLBBCA@??>=>@CEFDBCC8@H72;>AIIJ)*H<9;??83/)&$"! %/;>:9;.#%##""#"(,//27<9899:BD?9;BEGIGHKJ?735853+8.374:6].:;=:6875g;GLJMORPWtx_m_ i>>>???>?@A@@ABBACCCDDDEEEDCCCDCCBBABAAA@ABBBCCCDEDEDEDEEEDDEFFGFFFEF EDCBA@??>==<;<<<;;< ;<<<;;;<<;<;<;;<<;<<;<;;;<<;;;<;<<;;<;<=<<;;<;< +;<=<;<<<==<;<=<<;;<;<<=<<=<=<=<=<==<;<==<=<=<=<<<=<=<===<<<==<<<=<=<<=<<==<=>==>=<=<=<= >>==<<=>>=<= >?>>>===>===>?>=>=>?>?>???>??>??>>>?>>?>?>??>>>?@?>?>>?@?@?@?@@@?@@?@@@A@A@AA@A@AA@A@A@ABABBABBAAABABABABCBCBBBC BBCBBCBCBCDCDCCCDCDDCDDED +EDDCCDCDEDE FEEFEDDDEDDEFEFEFGFEGFGGFGFGHHHGGHGHIIIHIJJIIJIIJKJIJJJIJJKJ KJJKKKLLKLKMLMMMLMLMKLLMLMNMNMNMMNNONNNMNOONOOOPOPPOPPPOOPPPOQPQPQQQPQQRRQPQRSR QQRSRRRQRSSSRSRRSTSSSTTUTUUTUUVUUTSTUTVU VVUUVVTUVUUV#XRO=28?MUTWRE>=IP@0-5@(,&"##" 99.::89<=;:> = !!! !""!!!#%(+.,)%#"#$$$"!!"!@ADF"C""AAA?A@@BA@=?ABCDDEBC#ECCA?AEIJ>)%$!#&'*./27:"-,3652442/..-,,,-19;8433234323442152.,.00153.475544557874320//01344336885/0123//.1223200/2211-,.3222333447753256662466545532343345633543430.134346876633:9::9::9998769875775 +6 $$!87 !#!!""" L? "!!#%&'#"">2)((*,05787641110/1/)/,*+.36Nj^jeSdBLXN6+===<<=<=>?>>>?>>===<<===<===>??>?>?>>>==<;<;<;:;:;:;:;<;::9:::;:; :;;;:;;;::;;:;::;;;:::;::;::9:999:98899898999888999889889878787877676565 665554445554454543334344344f23e322212322cc22cdcdcdcdcdcbabbbaba`aba`aa` _^^_^^^]_^^__^ ]]\\]]\]]\]\[ZZYZYZZZY ZYXXXYXYYXVWWWVVWWWUVUUUVVVUUUVUVUVVVUTSTS RRRSRSUSSSRQRQRQQQPQPOPPPOPPPOPOOONNNONONMNLLMMMLMMLMLMMNMLMLMLKJKJKKKJJJKKKJKJIHIJKJJIIJIHIHHIIIHIHIIHHHGHHHIHHHGGGHGHIHJ}BUx~oeieegbaggbdWtbjfPKLQIzPOIO_fdltneha^]]TU^_M;#"[\+ ::866678:9:941/-)$?Y3(-,,,+))(''))*,+,++.08=:5112 r+>VXGI>^Q3;Z3' /:I7UBJj:7lkeY\_csfeAzkXAbyBAHOQFJAQPTOSNYbwGIcLIOKYE]:TVO/WD[__*L`hmO:=#$!3AV`QBW5=+%##" !"%$&)+..)&#%(&$$%''+06!""#" 600-+4 !1+4820022102663/,02/.,*'$ "$'.2489:#$#  !##%()+..-..,-/0--,)*))*++*+)'&$%$&))'%  $%%&&()*+-.,)*,++(&')-+&$%%''%##%%! !""%())*++)))%$#$&'$%'(&&%$#"=4)&((('()+.24302872+('(/9'330+'";89>AEHFC@=;:75565421120/.-,,+*(&" !#$%%$#?#&*.256788863451011376417"$'),&:47;>BFN)+)+0330//010.+/1/**-)-10;/000121002234630130---0-V-.-.120.--RNMJB><<1"/,)*,49;989788C"  #%'&#!"$&(*'#  y   +  &'!$)+#$$$()1',+%$$" !#$%# ! #$$%   + w + ! # "$" !/!! !!!@&0325;@DRt䝪](  R8.-qͅӄօ=?3ްީ@*%&19>E@4*(-.! + + + + + +  + + + +     >  # +  +   +        + + + + +  + + + + + +   + u + + + + + +  +  /WJWvQHT2ARF,"/Rbb=(2U9Fr! g zʀЊ^/@\>_aQFIGHIBCIIHK>NKOI`6[b;MSS]c\SUNJIH??GI6!-. $5 +  24')!/'!, -(#): =8:59;@J=:%F?5&7H*)-34+/$67731+46>&*5*)/ *.+(%!12')0I:2 + "*4.#+   +  + + +  M         + + + $  + +    + + G         ""T  +  "'9,*(('#"!  "##"""#$}|}|}|}~}|{|{|}~~||}~}~}~~~}}}~}~}~}~~}~}~}~}~}~}~~}~}~}~}~}~}~~}}~~}}}~~}~~~~ ~}~~} ~~~~~~~~~}}}~~}~}~}~}~}~}~}~} éұь˱˾ϸïغӯ +s_=       +  $j邓򁅀kcݲ躙ÞȉoE   #$##"#"#" ###"!! !! ! !!"#"""!!!"""! ! ! !! ! !   !!     + +  !Eб̼ɎǷ̿Ġ饒փ󙤢İ݈Ϫɽ܉ϥʿĀľž¾񋫮ڋõ100/.01321379;5-)*(('')+-15994,,4;=?EHE<1-,**,.-/52,$;:8:7856A>4226A&)# #(19:C4"&2=,)./2@EGC6=HHJMPQG"/7:AA4,9M*+)-035/'0=?DMNQOFCC@BB==?CDCDAAGK?3B4&,27?FN-.G>97;=7&/&+.0145SDN^46328978?>?@@AABBABBBCCCDCDDDCDCCBAABA@@@AB CCDDDEEDDCCDEDDEDDDED"EDDFDDFEEFEEFFFEEDDBB@@@?>=<=<<<==;<;;<<<;<=<;<;<=;;<;<<<;<<=<<<;<<<==<=<;<<=<;<<<;<;===<<<===<;;=<;<;;;<<;<=<<;<=<===<<<==<===<<=<=<<;<<<>=<<<==<=<=<<<==<<<=>=<===<<===<=<==<<=<==<<<=<<<==<==<=>=<=><;=><=>==>=>>=>= +>>>=<=>=>>= +<>>>=>>==>=<==>=>===>>>=>>==??>==>>?>==>=>=>>=>>===>==>=>>=>>?>>>=>?>?>?>?>?@@?@@@??@@???@???@@??@ ???@??@@?@ A@@@AA@@@A @@@AA@?@A@@A@A?AABABA BBBAABBBABCBBCCBCCDCDCD +CCDDDCDCCEDEDFEDEDEDEEEFGFFEFFEEEFFFGGFFFGFFG FFFGGFGHGGHHG HHGHGIHGGHHIIH IHIJJJIIJKKIHIKJJIJJKJJIIJKKJJKJKKJKKKLJKLMLKMMLLLKLLMLMMMLLMMLLMNNLMNONNMNNNOONNONOPOP OPPOPPPQQP2QQQPPQQRQPPPQPQQQRQPQSRQQRRSSRSRSRRSRQRRRSRSSSTTSTSRSSTSTUSTVUVVUVUTTTSUTTTUVUUVWVUVWVUXP{5,9_9=tl_WG?==7),8 (.-'#"! ! =9=:; 98!! !"#"!"$%'*--)&#"###$"!!""##!!B"##BBAA@@AA@A@A@<>??@CDAB%%DA@AAEF$&&?(%##'-110-.45670/23124430,+**-014;=85444210/14561./0*+.10.03874677543256446433201357765520//10./-.0//034121//.,-154221.1485P4566543553073556876675554411122231123789858777678657:977787878887685v#$"! #" 88 "#"!  "$$#! ! !! ""#$"9,&'(+03573122//000,.,&&-2iZJjYBN20=.*6I\N.OjFaP~p<;<&=<<=<;<<=>===>==>==>=<<<=<<<=<=>==<<==> +===<==>>==>?>=<<==>>=???>>?>?>>==<;<=<;<; +:::;:::;:;:;:;;;<;:;:::;:;<; <;:;;:::;:;;;<;:;:;<;: 9:9:999:99::989 8999::9898 988898887878787666767666555666565566565444554434343444gg322d2322dddccd0cdededcccabdbcbbaaabbcaaabbab``aaa```a``_`__`___^_^]]^^^]!\]]\\]]][[]]\\[[Z[\\[ZYYZZY[Z[ZYXYXXWXYXYXWXVVWVVWVWVWVUUVWVVUVUTSTSSSTTSSRRRQRRSSSRRRSRQRQRQQQPQP#QQPPNONOONONMNNNOONMNNNONONOONNNMMNM0NNMMMLLMMNMMNMLLLMLMLKKLKLLKKKLLKKKLJJKKJKKKJJJIJIIIJJJIIIJIJJIHIHIIIHIIIHHIIIHHIHGGIHGHGHIFSȏv[it`d`Y]VSUWOi8mNPXQQNNWSgsd]\YX[\VV^bZ/+QC6/) <=<998::99741241,%##&(*)*+,9^//+)*+-,+*+,,,++-/114 +6LN_IIN]=)$'RQ=;YmiB?BF?l6}NIJk@CBBC@=:8750-..11331.--,++,*(&" f #%%$"&,18=>:7976774/027:=;8$42*&#?6568:D?<=A8C+^" v + + + + +   + +   + +  +  + + + + +  C +    + + + + +      +       %J*)+'&'(&"  }|}|}|}~}~}|{|{|}~}||}~}~}~~}~~~}}~}~~~}~}~}~}~}~}~}~}~}~}~}~}|~}~~~~~}~}~~}~ ~~~~~~~~}~}}~~~~}~}~}~}~}~}~} Ȩܵߓʻ䑝΀عɲŻנγ킉 \?      Y$Sǽϲ狘ݱx̵ýؗ϶T  #$$#""""$$##"##""!"!" !""!!""!! ! ! !!        + )ȵȴΕ농Ĺ˯߸𘰮߇႖ؘ󀃞ੰӇ霑Γ֪󅏺ݟŷ`¾̼öſǽ󋊊ꐣ񅈋(ÿ0131/0//1266434430,)))&(*-16;82/,,3;?EB941.,,,+S+/2772,&;60,-2:;8<714:>G'K@AAIP'0?'!AC+,.19@GIB>ENPT+VM)17849634E-/,,144409FFDGMOLEDD??BC=?EGFHA8CH95<:&&+18BN+*&$"=<%D:;7/%"&&*/71)$$%&%$ !$*.248<==><888:8239>===9:CC0B793*+0QLU]^Wdf6449?E<=?@DPVSSW[o_Ye=<<<===<=>>?@AABBCBCDCCCBBABABAAA@AABBBABBBCCDDCDCCD EDDDCDDDCDED CDDCB@@@>?>>=<;<;<;<;;<<;;<;<;;<=<;<<==<;<=<<=<;<;;<=<;<==<<;;<;<<<=<=<<=<=<<<=<==<=<=<<=<===<<=<===<<=<=<=<=<===<=>=>=<=<=<=<=>=<=>>===<=#>>>==>>=>===>=>=>=>>>=>===>=>>===>=>=>?> ===>=>>>=>?>=>?>=>? @??>??>>?>@?>>>?>?@>>?@?@?@?@A@B@AAA@A@A@ABA @AABBAAABBAABABABCABCBCCCBCBCDCDDCDDCDCDDCDEDCDEDEDEDEFEFEFFGGFEFGFGGFGFFHHHGFGHGHGHHHGHHHJJJIHIHHIJJIIJKJIJIIKJKJJKJKLKLMLMLMMLMLMNMMMNNNMNMOONONOPONPOPQQPPQ RQRRQQRQQRSSSRSRSRSRRSSTSRRRSSRSRSTRQSTUTSTUVUUTUUTTUTUVUUVUV:WVVWXWVWVVVWWUWZBR88IWVQYX\hhZMH6$+5#)-+'$#"! ! ===; ;; !!" !"!"""$'*,-+&!!##"#!!"#""!"!!""B@ADCABAAABAACAA>>AC@ABCCA@?BEE#%'*+9%%"!" !#)--/16630+**((()*.34259;98;:641.,+-/1/*+=,.--/15422133314445566765423345664544222002213121121/.--122243N013856544554/477732356665334331000102332233458<867545777;7686457:9535667756!#" !! !  t"!! !"$#"    !#$#$#;3..-/354300/,,022,04.*+/gStyeILE;80K\7XNtpl{Zuh]}=<<<=<;<<=<<<==<<<=<<=<=>>=>= <<=<<==<=>>>=>=>=> +?@?@?>?>=>=>=>=>?>===< =<===<<<;<<;<;:;:;:;:; +<<;;;:;::;:;<;<<;;;<:;<;<;;<;:9::9::9::9889889898989889978 +78878877887676667776767776565566655666566654545454 3433444343432323ddeeddd2ed22ddcc21c bcba`abcbaba#b`a`ab`_``a``__```_`_^^__^^_^^_^]]^]\\\[\\\ZZ[[\][[[\[\[[\Z[ZYXYXXYXXWWXYXXXVWXWVVWVUVUUUTTUUTUTSTTTSRRSSSRQRRQRRQQSRRQQPQPQQRQPQQQPPPOPPOOONONOOONONONONMLMMMNNLM +NMLLMLMLLLKLKJJLLKJKIJKJIIJJIIJ IHIJJIIIJH IIHIHHHIHHGHGHGHGHPIIxzmvzxs`X`XPSSRSs=RTWSOPWSOH~}PTdf`WTZ^[X[e88DJR579:;978757#6310/+*++.0/06>2%+8(%%(**+---/-..,,+,.0136;;R"7HgS2 &&4DOEhCL-&%$%#!  #%%& */22.,(&&%%# $%+5 !"#2%$868$"&%++.14546422002100//..-*)(&&'*...1 "N %)&%$&*-.10.+*+,+*)(('('''&'('&&'))'&%$&(*)'$%)*)&&$((''&&+)&)*+,,---.) #(%"!##$%&%%$$%%$#%''%$!!!"$('$?2*$&')-+(+,0333562+)07578;B+0(C?B?:>?===>C-75'?=967889<9788/,,!#*,02351021    # !&,)"0  !"' #$"%(.'  ##!#'*)$$#"# &((( !" '     + + + + ! +(/69/9=!',$$&%)5;8:;A@<7gdadiahebiptsyCERTOHDIIFDGPa&""   +  / '7, &-'=)$A?-0:@=3;525!*;;*(@A%%2:;;F;45,4MBB@;$7>! '+4(+1#->F(A+ +  ! +0   + +      +   +  + ' + + + + + +  + +       + +  ?   +     9 +  + )*)&%%#!#%$"!  }|}|}|}~}}}|}~}}~}|{|{}~}||}~}~~~}}~}~}~~~}}~}~}~}~}}~}~}|~~}~~~~~~}~~}~~ +~~~~~~~}}~}~}~}~}~}~}|}~}~}~} IJÿĸļν䱎ѢB +       + #Fܔ􎗘ţdqĸޗ軪砪↦]     #$# ##""#""###"! ""!!!"!"! !"!! "!!  !!!"!!          AխȽǻ΀뀗“؈蠍Ȯ۩ѩɿݭֽƞø¾၍ÿýތ2󄏖=󅎆ʾ543124773,+///-+--,.014543/0.-2E+#+4AKPP*&#!><@"7-/*%!#%),(&""$$#'1*&"&*-.17::960049C>338:7:BD9)%.=@8JBIFHS_`PST]b65H`?:IILTVSYVGc=;;<=>??>?@@@BCCDBCBBA @A@ABA@@@AABABCCDCEDC DEEDDDCDCCDCDC DCCBB@??>>?>=<==<<;<=<<;;;<;;<;;<<<;;<;<=<<<;<=<<<===<;<==<;<==;<;<=< ;<;<<==<=<;<=<=<<<=<<==<<===<<==<=<=<<===<<<;=<<=>>=<=<<=<<=>=>==<===>==<=<=>=><<<=<===<=<=<===<;=<==<>=>===>?>=>=>=>=>==>=>=>??>=>>>==>?>??>==>>>?>=>?>??>?@?@@??>?/>@???>>???@???>???@@@?@???@@@?@@@?@@??@?>?@?A@?@A@@A@@@AA@@?@@AABAAA@@AAABA@AAAB!AAA@AABBAABCABAABCBBBABAAABBCABCABCB CCCACBCBBCDDDCDCBDDCCDDCBDCDDDCCCDCDDDEEDEDEDE +FEEFFFEDDEFEEFFFGFGFGFFFGGGFGFFFGGGHHGHGHGGHGGHGHJIHIIJIJKKJIIJIKJKJ +KKJJKJKJKLKJKKKLKLMLKKKLLLMLLMLM LLLKMMLMNM NNMNNNMMNNMNOMMMONOPPPONPPOPOPOOQPQRQQRRQQRSRQRSRRSRQRS RTTSRSSRSRSRS +RRTTTSUTUUT&STUTUUUTTUUTUUWWWVVVUUVVVWXWVUWWVWVUWVWSU^~xug3 !< "!!! !! ""!$)*+,)%###$!!#"#"!"!AB""!ABB??@ACAB@@A<>CCCA@@98?D(()**O,!  (++-27860/.-+/0.//37735676675431/,-//.,-/../0.-02011120233223540045675442422334543T45321233222011/14454347863133365655 7555454-1446775445433231342330111346643566787T99:6534548;:78::965876988 ##   !!  "#! ?!""$&$ED::<976740,,((.33-.0//20X~e^r7J8/37kFGMF]BZq@YgW`o=<>=<===;<==<;==<=<=<==>=>>?=><=>=>???>?>==>==??@>>>??>=>?@?>>=<=<=<=<;;;<<;;;<<;;:;;::;:;:;:;<<;:;:;:;::;;;:;<<;;;<;<<;::;:;:;;;<<;;<<;<;;;:;:9::9:::9::9::9:::988999898899888989:88899878788777676777676676565556565565 44555445543443444323343ge32dccd222cee221bbcdcbbaabbbababba_`a``b`__`^_^___`_^^]^^^\\[[\[\[[]]\\[ ZZZYXXYXYXXYXYXWXYWVXWVXXWWXWVUUVUUUVVUUUTUTUVTSTTSSSRQSRQSRRSSSQRQSRQRQPPPQP$QPNOPOPOONMOPONNONMONNOOONNOMMMNNLLLMNNMMMKKL MLKLKKLLKLKLKLK JKJJKJKKJJIIIJIJJIJIHHJJIHIHIIHHIHIIHHHIH GHIHHHGHHHIHGVčXfOTVZYLMTQONOofLTAONCLLR/7;>"$$"27N?#.0.(&$%%"""$%(*.2683+$" ! !!#)!!"z!%#!!(&,,,/0///0/..000.*'$$"$%$%$$')+.,,/--/1##"$$$%&$%'),/0-+*+,-.-+*(&%%%&'&#$())***)(%&((&&(**(%#"%'(*''))(+*(*,.*##%$$$#$%%'((%$##$$""##$"<67;$(**"6(%'(*))***-1334653/-7?;;=<>#&'IABDA68845887631..011.%!*/101/+*++*'$#$%#!"% 4(,%'+-26@B?:9641/4<=;628>F16,@:887899: +  + + + + + +   + + + + + + + + + + + + + :kIOe-?*$$%T43B?J/?L.?G>RͶ""  +@4Ň?ÿ¿¿{|GH:?ACA66<88;;H@5bjh<><<9"  + &<% ( +%/;('A 5#/!==9,*A! #3>D5+)7451/5@8,&=8?=@/"((+!+0..8(0!#)F$))! + + +  +  +    + + + +  + + +  %       +  Y   "  +  <!!*(&''$"#!#"!"}|}|}|}~}|}~}}}~}|{|{{|~~|}~}~}}~~~}~~~}~}}~~~}~}~}~}~}~}~}}~~ ~~~~~}~}}}~~}~~~}}~} ~~~~~~~~~}~}~~~~}~}~}~}~}|}~}~}~} öü +:    +&}𚛘ٵȸTǾ缨䩯΄Ĝe$$$$$#"""##$###"""!"#"!"!""! !"!"!!! ! ! ""!  ! !   !    !     JӅÈڐۛ½׀̝ܩɩՓ׃仿ܼãى߁ɴ菎ɾȽĽǿĹDׁ̹̀L߅ĺ762/01231/*+...,++,./0/-,033583243/[TUSSQX/:>>;534344302552476YLLU`66765aZY[]03+&5Q<.07;;=GJ1:994/.?**=D)+/-+*-036;@HHHIFBAFLLC;?D@;~?LQPKRPF5D)8/;H:/8CLLM(./'C<97<>6-,&!#""&-/-*(((&$!$*&%)'('(+273/)(*&%')&)/,'2:'@98+??=9]LPOX_bY^eQ]5:;8=:=ACGOLIKPZlM=;<<<=<<<===>>>?>?@???@A@AABBBAABA@A@A@@A@@A@AAABCBCBBCCBCCDC BBCBBBDCBCBCBCCBCBAA@???>>=>=< ==<<<;<===<<<;<<<=<;;<<<;<;<;<=<<==<==<=<=<<<=<=<=<==<<=<===<===<=<<=<=<<<==<=<<<=><=<=<<=<==<===<==<=<<==<= <<=<<=<<;<==><<=<==<=<=<=>=>==<=<===>=<=>=>=<=>=>==<=>=<>==>>==>=?>>>??>=>=>=>>>?>>===>?>>=>?>>>?>>=>>>?>?>?>>???>>?>>?>???>?@?>?@?>??@???@@?@?@?@AAA@@@A@@@AA@@A@@A@ABAAABBBAA@AAABCBABABABAB CBBBABCCBBBACBCCBBCCBBCDCBCDDCDEDEDEDDEDCDEEEDEEFEEFFEFEEFEFFFGFGFFGFGFGGFGFGHGGHGHGHHGGHIH GIHHIIHHGHIHIJ IJJJIJJIJKJLKJJKKKJKLKKKMLLML +MMLLKLLMMLMNMNMNNMMMNONNMNMNON +OOPPOOPPQQOPOPPPQPPQQQPPPQQRQQPPQQRRQRSSR SRSSSRSSRSRSRSSR +SUTSSTRRSTUTUTTUTTSUTTUUTUVWXWWWVWVVWWVVWWV&UWPA969@IMMJACa=<<02"0?$*()%"!!$$# => >> ! >> !!#$&(*+)&"##$#""! !!""!D"!A @>=?A@@CCCAB@>@B"B?*:?EH'(&$),L0)%!!',.--068740-+0331025676677574/..,,.-.000/26977786335640/0212331/.035531113432144345443334420111,022554467752356799446876651-24345445444565301234443323576668767468879988879888;:79;<:85458:9878    !  ! !""!  !"%%$A<98:89:7786765100.)&#-0-.23;sksg]CZ26AD?]Sa@E`;bf]ioj=<=<=<= <<=>>===>>=>>=>>>=>>>===???>>?>>>==>>>?>?@??>??>?>==>>?@?>>==<=<;<<<;<;::;;:;<<;;<<<;;::;;;::;:;<;<;:;;;:; <<<;;<<<;<;;:;:99::989::99989998788787878787667656665656543334323232 3ee2dded2dedddcbbcccddccba babba`a``aa`___```_^^_`___^]]\\]]^]\][[\\]\[[Z[ZZ[ZNYXXYZYYXXWWWYYYXXWWWXXWWVWWWVUUVVVWWVVVUUVVVUTSUUTUUTTUUUTTUTTSSUTSRSSRSRSSTSSRSSRQQPPPQPPPQQPPQQQPPPQPPOOPOONOPON +MMMNMNNNMMNMMLMLLMLLLMLLKLMLLLKLLKLLK +JJJKJKJJKKJIJJIIJIJJIIIHHHI +HIHIIJHHIIHIIHHIHHHIHGGHIIHIHHII[tWEBIJMOLLNLJ~8:ZUQRX]TPXXUOQTSPPPPTYSOSXZ\\`mf?:75,"988755788967667543/--,+,+)()**++,./0...131-.0///348:;968:<73004LGH>j1SKq?8!.SO`Hy[7cGBjj;Glx_@@SY`[M;4;5B?gYxsV745>&*+%@4(%'**,*)*,/23477330-2:ABCD"! $(&EFEB98841223332.++,02*(,../0/,))**)("%((#5'%%&+337=?<73237:@>;87:$10#AB>988:;H.0,*.22111//22232101123G2110*)---.12200/./00.-../0.--HB-/...,+TUSKGD>:97316732000-+++)*./024357$"8454438%('$  2)+1=#""! ;9;==)$$ %$%&#!&'!#(--)-+$$ !   +   "$%&&"9-.,18;04<)3"!!"%(*.634;GU, #0"~hÿ̈́ӄ ҄Հ:"ܪC76;CJMMJB;H)$# +   +  + + +  + + + + +   A    "    ,         +*  + + + + + + + + +  l + + + + + + ZhS_UM7E#'137J@Qpm2/?+KJBSj  +)")x#ޅ؄҄DDŽ_¿M~sE]21547755675V#1L=8;@E=;BCA<>AratB?=CFDF((134212=,,(%+1786.+/8>EFIJOLGDCIROFE@IF?=HRTTQPMJLQ<-:'K8:n;548C*0+F?;869950.,),9><7310--*&%#"'.,"%%" ")031/+(##H?:F*.8) 'L(&7>:75YNF:C[9a`\V/;=`gq;=DGHP9ANUY{p::;<=<===>>?>>??>>?@@AA@A@A?@AB A@@ABDCCCBAB +CCBABBCBAAB ABBBA@@??>>=<=<==<==<<;<;;<=<<;<;;<=<;;<<<=<<==<<=<<;<=<=<<;<<= ;<==<==<==<=<==<<=<<=< ===<==<<=<=<;< ===<=<=<<=<==<=<===<<===<==>=<=>= <==>=<<>>==<=<<=<<==>= >>==<==>>= >===<==<=<<=>=>===>>=>>===>>==>=<=>=>==>==>=>==>>==>=>=>=??>=>>>=>?>=>?>?>>=?>>>=>?>??>>>?=>?>??>?>>?@??>>>?@?>? @@@??@??@>??@??AA@?@?@??@?@ABA@A@ AAA@@AA@ABBABA@AB AABABCBBB@ABABCBCBC BBBCBBCCCDDCEDCBCCBCCBCCDEDDDCCCDEDDEDEDDFEEDDDEFEFFEFFFEFEGFFEEFFGFFGFGFGHHHGGGFGFFGHGHGHIIHIHIIHHIJIHHIIJJJIIIJIJJJIIIJIJKLLKJKLKLLLKKLKKLMLKMLMMMLM NNNMMNMMNLLMNOONONONONOPO PPPQQPONPPQP QQRQQQRPQQRRRQRQSSSRSSTTSRRSTSRRSSSRRSTTUTTSTTTSTTTUUTUSTUVWTVVUVWVUVWWUVVWVVVWVVXVVWVWWWZB^NC3g>BCFHB:<166=4&$0!,+'#$!##$"""!;;>>>=!    !! ! "$$'*,)'$#"$#! !""" "#!!! A@>63661*,0137>d\`qoN,5LX@UYyy=<<<==<=<= <===<=<=<===>?>?>>>==>==>>>=?>==?>>>?>?>?>>???@@@??@???>? >?>?@@???@@@?>>==<=<<=<<=<=<<<;<;:;:;<;<<;;::;:;;<;<<<;;;<<;:;<:;<;<;;;<; +::;;;::;;;:9:99:989:98898988998778878778767767 6756656766565566565 +655456544543454323232332e3eee21dd233cdbcbcbab +aaa``aa``_a`___`_``_^__`_^^]^]\[\[ZZYZZY[Z[[YXYZYYYXZX +WWXYXXXVWWV WWXVUVVUUVUUTUUVUUTTUTTUUVUTSRTUTRSRQRRQRQPQPPQP ONOOOPNPOONNONOMMNNMNMNONNMMLLMMN MMMLKKLMML MLLLMLLKLKJKJJJKJKKKIIJJJKIJIJJIIJIJIHIIHIHHIIIHHIHHIIIHHHIHHIHGHHJKH]hdDHGEJLNLFzw$-wX^VU[]TRQUXSN|Z[UMSTTPRWXWV\ij>74'";8:9::7688988:=;:67863.*+-,*)(&&'*)().0120001220110-.026778668;73/011$K8^u>RVdjBjVfG|Xh[<<*7M8778D')*L4&'))+-,,+*-12564120155;ADD"!B@?>?CGGE@;6310113332.*,+-.,,0-+,-+*)(+,*(" %&( (&+/9GJA89968::;<;<<%00'$A?>=<<;9C,740.251/242/111355442/-..11+)-...110/.---/22233120,/2-7=-,+,VWSMGDA;76411/2420/+,2.*))(*-.16545 ""#'))&%.5435879"$%#!!""#! ! !"#$##A965>F%*))(&$G#"!""!" "$&&)($!")'! $"%-10/-+'))  +    + "!# + & '!0*&"1!930/#$17B"(.03=-5@HTꔟB)%S&1;*¿„'DŽυ#фքEC E׆S?2hBGHGF>1.!"$ +  + +  + + + + +  + + O  + +   +            > + + + + + + + + + + + + +   N   >GPrcd]9!)9D4BGg~c,04JLJUm񐔖<BB(JJ҆ʄ ÄHĿ¿¿¾SmI13303563.OH,Y=A==CE@?=?C?G*..KF(,1321.?/14-/9?CGE745:AGGFJTUNKLMLDAEGCAAHQRRS*SQRN@04#(504219H,0,&C@A<;<92,*2:EA>:65531.+(&O(+,,.(#&&*.0033/)$>9>>=?>>???@@@?@?@ABA@AB@@ABABAA@@A@AA@@@??>=<<<==<=<;< ;;<<;<<<=<==<<=<=<=<<=<<=<===<=<=<=<=< +==<=<=<<<=<=<;;<= +<==>===<=<=<=<<===<<=<>=<=<===<===<<===<=<= <=>>==>>>=>=<<>>>===>>==>>>=>=>=>=>=>>=>=>=>=>=>>==>=>?>>?>?>?>>?>>>?>?>>??>?>?@??>?@?>>??>>???>>>?@@?@?@@??@?@ A@?@@A@@?@A@@@A@AAA@@@A@AAA@A@AAABAABBAABBAABABABCBCBCCBCBCCCBBBCCDCDDCDCDCDCDEEEDEDDDEDDEEDCDEEFEDEFEEGEFFEFFFGFEFGGFFGHGHGFHGHG +HHHIHHHIIHIJJIIIJJIIJIIJIJJIJJKJJKKKLLLKKLKLLLKKL +KKKLLLMLMMLMMLMLMNMMNONMMNNNOMNNNOOONMNOPOPQPOPQQQPPPQ PQQRPQQRRQRSTTTSSRSSRTSRSSSTTSUTSSTU#TTTVUUTUUUVVUVWVVWWVUVWVUVVVWWVVVWVW;VWWXXWXWXWYXhZNA68@CCGG>;L8;;>)'%4"'+&!" !#"!!#"!!<<< ? !  !!!#&)+)('$"!!!""#"!o@=?A@>=@ABA?@BB@?BDDC@BCAA@>>@@???B&/1+E/!"!#)..034442//257852579::88745783---,,-../0003455668777666223542.//./.(-/025421/1232234445221010013345677789898:h9:9885488797665653234554345430/0/02345777688877996644669:888798887679::97667"#75d  "#!  "#"!B<8449!#""#$$@<<<:523650276202456:8PbfTMJ_MqJXde{\rB\z`R_hv==<=>=<>=>=>=>>??>>=>=>???>?@@??>?>>>?>>???@@?@A@@?>?> ???@@??@@?@@@?>=<=<=<= <<<==<<;;;<;:;:;<;;;<;<;<<<;:;<;<;<=<;;<;:; <;;;::;:;:9:99:9:9:98 787778777878766767776676766676566556566656565565445544455443343434343222332232d33221112cc11cddcbd2cbaabcbbcabba `a`aabba``aa`^^^__^__^]^]]^^^]]^^]]]\\\]]\[\\[ ZZ[Z[[Z[ZZZYXYXYXYYYXWXWVWWWXWVUVUUUTTVUTTUT SSTTTSSRSSSRSRSR +QQRRQQQPQPQPPQPQQPOPONONMNONNMNMNMNMLLLMMLLKLKKLKLKJKKJJKJKKKJJKIJIJIJIHIHHHJHIHHHIHHHIHI|HIG^WnbPGEECAf:95\O^j`QUKX@NaE]2BJtqG[HoJM6TteU4qzdqwmb6R;D7ATB=B!"#""!76:99873/-591)D;""%;'+3441.'""(/44/+,+*-3 !%%# $"0-++.0002152(#"  ""$&%]$%&(+-011662/.238!%)+,-.,...,-,*))++,,*)&(+,+,-.-,,+*()*++)&')*)'%%&())*+)%$"!"$&)*-,++('%&&&$*"=<<::@%*%?9.'&)()+-+)+.1467862.1=@AF#$"C@; 9?9:<=G/5.&B==AB?;<<".4/))042111222013565421000./1.-//../0//..0125422//12//.D6')SSSPJGDA>;6441/0/0110/*&),+*)*,/126757#$1./1'"'06428;63875!""##%$%&%#$##$%E=9;;;=@BJ),..)KGEF#!!$"$!!$!%&&(-.'$%%$ !#"*+/00.-( + + +   !$# + "&# $!-,!#7<634(.".7 #2@:686>?g.ՏSA $*$@ +?τfل'1G}P>5 + +         "  +  +  +  +  + + + + + + + + + + + D  :vKWF8>M9Z=;7:>ABFGCC@>y=xovBC?;mhedowzEEu?CECACHQ9%$!%0' +$8+M*#-&+++9-007%1".,:B>14-9&0>(5(+BA(1*E+=!+?1=@4<=94) #$% + + +   "   +    + + ) + + + +  +   + +   G   ! 5   "  0 ,..,)'&$#!!" "}|}|}|}|}~~~}}~}~}~}~}|}}||}|{|{|}~~}~}~}}}~~}~}~}~}~}~~~}~}~}~}~}~~~}~~~~~}~~~}}}~~~~~~~~~~}}}~}~}~}~}~}~}~}||}|}~}~}}~} 󇑓ހ˾뺼ȿ끧y?  +   'J①P´ƽɏ{M $"""##""##"$##"!"##""!"!""#!!#"!! !""!! !!""! "!"! !!        + پ󸗾賏ŽĀǨ󀃇؂׵ҏڍڈʋב޻ĭ܀ҀѿĴúþǿ܀ſ:50-)%%'**'%''&&,13430/RKPQUZ]YTOY[WPR..,U-0///37:=;8546444c`__XPJHLSUPW\[YalbUQNU[262;3;2*F$./..0-928;;6AHKQRH847<9541/,*)(+0.)#%'((+013421.*(F$LK&)!$)-./I15<7=>64422D762_e;>IM>6\:BBIMNPQCMBg od<;:;;::<;;9;;<<<= >>??>??@?@??@A@?@@A@@ABBBAA@A@ +AAA@@@A?@A@???@@A@A@?>??><===<=<===<<==<<;<<=<<;<=<=<<<==<;;;<<;<<<;<=< ;;<==<=;;<=<=<=<===<<=>=<<==><=<=>==<=<==<<===<=< +===<<=<==<=>= <===<===>=>=<=>=<=>=>=>===>==>= <<=>>==<=>=>==>=>=>===>==>=>=>==>=>>=>>>=>=>=<>= +>>>=>>?>>=>?>=?>==>>>=>?>>=>>>? +>??>>??>>>?>?>>?>? +@??>?>>?>>?@@?>?@?@?@?@@@?@@A@?@@@A@A@??@@A@@A@A@ AA@ABAA@ABBAB@AABABA@@BABBABAABBBABBBCBACBABBABAAABCBBBCCCBBBCCBBCCCBCDCDCDCDCDED CDDEEEDEEDEEDFEDEEFE FEFEEEFGGFGFEGF GGFFGHGFFG HHHGGGHGIGHHGHIIHIHIJIHIIHIHIHHIIIJ"IIJJKLKJJIJJKJLLKLKKLKKMLKKKLKLLMLM LLLMMLKMMMLMLMNONNNMNOONONNOONMOPO POONOOOPOOPPOP OOPOOOPPQQPPQPQRQRQQQR TRSSSRQSSTSTSTS4RRSRRSTTSRSSTTUUTTTVUUUTUUTUUVVUUVWWWVWWVWWVVVWWVUVVWbVUWWWXXYYXYXXYZZQPNE:=?AL\ZWU1::8=58&5',*$!!" ""##"!9 =>> ? ! ! !" ? $(***)&$###"! !"#" ? A!B@B@=<=AC>ADEC@@BBAAA?>>==>BDBC'.*NG* &-//-.022-.236899<;;:767642694111/00232001223578:<99:;:853661/--.//.//,,,033320042/.124432111./-.01466887578976689:98877863676575o353345774321//.046664225678;98865445444578:99986887845469976754545:667<987 " G"":3/-069;>##"#%$!;779;70-230551.*/569;>_iFT}oY^JKT\LOaQCPiw;===>=>==>>>=>?>?>=?>??>>>?>>?>??@@@?>?@@@?@?>? >?>>>??@?@??>>=<<=<;<;<;;<;<;<;;< ;;;:;<;;<;<;<<<;;<;<<;<=<=<<<=<==<;<<;::;;:;:9:9::9899::9::9:98998999898 77888778788767667766776 776566655565 4445544534554 +3343443344323232c22d 222cdedccbbcbcbcb(abba``aba``_`_a`^_``__^^^]^]]^^_^_]^_^^^\^^]\\\[\[[[Z\[[\[\[[ZYZZYYZZYYXYZYYX'VXVWWYXXXWVWVWWWVVXWVUVUVVUUUVWUUUVUUTSTSTSSUTSSRRSSRTTSSR QPQQRQRSQPRQQPPQPOOPPPOONOOONOPPOOPNMNMNMNMLMMMLLMMMLMMLMLLMLLLMLKKLLLKJKKJKJK'LKKKJKKJKJIKJJIJIJKJKJKIJIIIHHHIIIJHHHJIJJIH +IHHIIHIIHIJcGhYgmdQHAZ\XHX[mcZROLSY_][ZZYVTPWWMLQRQQTWSOTWXWXX^G$EA;88669<:8754554322/-+.;7,,+,..,*))**,--0/---,,('((+..123466656433237*3F:'4''?oV6XW=Rc5663;BA:74SbZ|a/JkpxX`AH;0)%'&&'(*+(),147456622>:8;73=:68752///010253)-.,,)*,,)'&'&(,.//*::;##'9@DIL$FDHJB;:<:?*51&BA?@BFF@89>+2,(',2323223345564331/..///01/11/.../00/112332110//100/JB*VSNHD@=:88530/-.000..,)%$&()))+/12599<%  !!0+149;=:519;7234!"#%%$"$&%%%GGHID=637=?:?ED@GSK@>;=A#&$$"%)*""%'',+!!%%%&# $$&/.*+)%     + +  ""  "%!"7?$&)+!-!++0259>DNF93%"#  + + + + + +  + + + + +  +  I + + +  "  +   J            +4 +  + + + + + + + + +  + +  + + b   !KxRAOpeYBQ?9AJ|kp78H7/>f .+T+)? ɄȀÿ¿ ֔P;<<70,(7>92Af>IC=876=CIFDB1A>DD==AB?pkilgizBBEB>BCD@@BHg+&!! + +  !IM,2.+5"!'/0C5)AHI3=')#&3*G,F(8IN8&K)$7,:(&=52*#+4(:< +      . + + +    +o  +    - + + !#"  &$.-+*(&$" #%(}|}}}|}|}~}~}~}~}~}~}|}||}|{|{|}}}~~}~}~ }~~~}}}~}~}~}~~}~}~}~}~}~}~}~~~}}}~}~~}~}~}~}~~}~~~~}~~}~~ ~~~}~}~}~}~}~}|}~}~}~}}~} 퉕󂊉㊒ӿ郊Ļǭt  +     'ԊīD怀ƷѾꉄЩЇ玛Y    $#$###"#"##"!!""!"#"!"!"!""!!!"#""!!    $iîΗĿĀȟ󂋍웯޶񃋏ٿȔ©ЀĽȻž񁆈ځ¶641-*&$##'))($>'.184./.03588568b\Y\XOU..Y-.0///39>=:9878774efcaZVLGHNSRVYVPLR_]TRW[3747R,*'%(-,-/2B2:BB=8GTTSTD3:=EHHJLQRFDJNGIFNMGGKM)+0,*+/2/L-3!(G"$>=#*/0-'"<55652-+/9>@?<961132//3-))& !+/10//456:>6)$$""AD(**//$B;:;AGHO>4315;>?>4gi;HMJG>:FQBFPPHH:_c:;<<;:;< ;<=<<;<<<=>?@?@A???@A@A@??@@??@?@?@A@@@?>>?>>=>==<<<===< =<<;<=<<=< =<<<=<<<=<<<;<==;<;<=<&===<<=<<;=>>===<===<<===<==>=<<<==<<==<=<= <===<<<=>===< ==<<==<<===<=>=>=>=>===>==>=<==>==>=> ==>===>===<===>=>>>==<==?>>=>>==> ==>>=>>>=>=>=>=>=>=>>=> =>>>=>=>>=>==>=>=>?>=>>?>>>?>?>>??>?>?@??>>>?>>??>>>?@?@@?>? @???@??@@?@?@A@?@AA@@@???@@AA@AA@AA@AA@AABBAAA@A BAABAAABBAAB AACBBCCBAB +CBBCBCCBBBCBCCCBBC DCDDCCCDCDDDC DEDDEEEDDEDDEDDEDEDEFEFEFEEEFEEFEFFFEFFEGGFFFGFEFFEFGFFHHHGHIHGHG IHHHIJIHHIIJIJIHIJIJIJ-KJKKJKKJKJJKKJKKJJKKLLLKLKLLKKLLLKKLLLMMLMNMLMLMNMMMON +ONOOONOOONONOPPOOPOPOP'OPPPQQQRRQPRPPQRRQRQRRRQQRQQRSRRRSSRRRSRSTSSSTSSSRSSRS3TSSTSTSSTUVUUUVUUUTUVVUUVVVWVUVWWVVWVWVWWWXXXWWXWXXWXXXYXXXWWXXZL}PJA@??DQ6.*4@?95;=%*=.+%#!; !$# ==> ; ==<> #(,+*)&#%#"!!BA"" ??AABB@@!>?!?>ACCB"#""CA??AAA@?>><>??@BC$&()RG/$#(04320I.035787898;<<;;965789964643222003443578668764434354///011..,-//0132343321210...0254334667976324799787678521256678876456665553310/.//232245533344678889645666555679:9987:;6567434568656566753587635867 +87978Y !!!  "" <742.08 <#%%#!>;9:;874,,5:<:;7/19=?>P=WsoKT`ExFP]P_JO?BmKht>==>>=>=>?>?>?> +?>>>?>??@?@? @???>???@@A@??>?@???>>?>???@@?@???>>>=<===<=<<<;<<;<;<;<<=<;<;;<<<=< ==<==<<==<<<;<;::;;;:;:::9:;:9:99:9:99::999::9899889988877877798787 6778887787676566565454454343334323232232d22d22d2dcbabbbab`aba``_`a``a`a```_^ +]]]^_]]]\\]\]][\[[[Z[Z[ZYYZYXYXWWXXWWXWWVWVWXXWVXWWVVVTTUVUTSTSSSTTTSSTTUTSTSTSSRRSRSRRRQPPQQPOOOQOOPPPOOPONNOPPONONONMLLLMLMLMMLLLMLLMLLKKLLKJJKKJKJKKJJJKJKJIJIIIJJIJIIJIIHIJIJIIHHIIHHHIIHIH_IIIJHFcv\ddiab\WKB^{SYX]]XSRSXV[[\YY][WVYTQRSPPKNQQYURTWVZZXVYZ\O)E5H?;:<99:;;88545552000.,+*)**+*(')))++*,/./01/-,*)((*-/-/01122443102322213#QV;!9Ne9>K67Q_b2687?A?64N\4lAdCYuJMrXE;{EGFSo?B9pojG<6p`U5Q\HMG@EdeV==;!&%#"  <=<61./0.)%"  "&))%! "$%$#%*/.)*)(+--/ !.-27;9545.#!!  !"#$%%&%%%''(()*,,)+,*)+,+*),-.4: #'*+,-)--.01001000-)*--,,-02-++..-+*,-+*)))*)('()*%!"$%(*(+-+)(()**))'&&%&((#=>? %+)!2+(*+)'(()/37631135@@CFEDA>?A<:<;97342047410//23355300---+'&%&&$%&)-.//( #"#!').>HI')+,F8@D?>>A(53)HAABEJIJKD9:%)*(').00133344653431110/000/22/-./0812210/0]...[YQH;>OOKE?;6565542220.+..,-..-,*'&''(-025988+!$"!#%%"#%@=9=;599!$''&&'''&(&LLKICA9227<=?CDB;>JI@>BC$(%(6 "!)**+ #%&(-,$"&'!"## !$&        +  +  "%#* ;:!*+('$#,2(*78.0/IK򁖝F5 P # ,ƅȅ˄V؄;ٙ^G<9Z76:>%((#!$  +  + + + + + + + + + + + + + +      + 1& + +       <  + + + + + + + +  + + +    -'Hgcz@PV6R0:HFOw>=,.[N:]돖 <  IBЄ Єπ{d@><=9=93-)A\<><@?<:9BDECCIIDDEA?AA@?;=@@{{FDBBEDFEB?ABD1, $! + %, (O8")-42! ".8$8 2H(-G8*#5N)=G&(N-/,4B#*"6=7%:1,+/"'$"241   + !   + +    ^         =    ##!  S11/*&**((%# ! ###}|}|}}|}|}~}~ +}}}~~}~~}}~}|}|{|}}}|}}~}~}~}~}~}~}}~~~}~}}~}~}~}}~}~} ~}~~~}}~}}~}}~}~~}~}~~}~~~~~~~~}~}~~~~~~~~}}~}~}~}~}~}~}~}~~~} 聒Է¿ƺ±ֿͮ5        !]E噺´ˆ߈h ###"""#"""!!"!!"!""##"!"!"#!"!!""##!!!"""!  !         +  (ɬ̏͸̀џɆ񈁎󥏭ϡʚݱֵɵſĺが񃉘Ǹ //-*))*+,.P9Q4W[^156978;=;;8e`TSSLU/[XW[/[\.27=><;:99765ghe_VRMCEFMTRTVUPGbp_Y_a5;9R[LE&((),07W2:BFF>8BSSMJA:CHNOLGGNKFG**KMHGIJO*..2-'x*.10*85='(&&;7:#)-2(E>7:;.-,+1830>@763/6==6/("! ".5778769960)$76?>;D(,)'G>716AFMNLM:3589EG88379=<>=HP\TC6/IW9>thg<;<;<==>>?ABABBBA@??@@AA@A@AA@AAABA@@@?@@?@?@?=?>??>>?>=<=<=<=<;;===<==<<<==<<=<==<=<==<=<<<==<=<<=<;<<<==<<===<=<<<==<=<=<;=>===<==>=>==<=<===<===<=<<==>=>=>==>>=>=>=>==>>=>>>=><=>?==>==<=>=>>=>=>===>==>=>>=>=>>>=>==>>==>>=>>===>===>=>>===>=>>=>=>=>==>==>=>=??> =>>>==>>?>>=>??>>>?> ?>>=>??>?>>? >>??>>>??>>?>?>?@@@?>???>??@?@@?@?@?@@??@@@??@??@@@?@A@@?@?@A@@A@A@?ABA +BBA@@AAABBABABBABAAABBABAAABBBCCCBBCBBBCBBBC DCCCBBBCBCDDCBCDCDECDDDEEDEDDDCCDEEEDDDEFEEFEFDEFEFEEEFGFEFFFEFGFGFGFGGFGHHGGHGHGGHHIHIHHHIJJIJIJIIJJJIJKJJJKJKLLKKLKJKKLKLKL MLLMLLMLLMLMLMLMNMNOONMN)OOOMMNOOOPPONOPOOPPOOPRQQPPOOOPPQPOPPQRRQRQRQ RRPRSRRRTSQRSSSTSTRSTRSSSTTSSTUTSTSUV WWVVWWVUVVUVWWWXWXYXYXXYXWXXYXZXWXXYYYXYnRRPLGCBX5/,8@<98:=#-9&%"!;  !!! <=<<; =:;>@"$(,+*)&#$"!!"@>B"CA?@BB"!A@@!! >@AABC""!BA@?=?@@@???CDGE)./*@,.5.153237<9;99;::;:788:;@?75:<9:87946765211576661/052.03550-,,135530/./01100./002113542210/.../01201331047667757f567:9776632446766651066433210/-/3430/1332411014577654556568:;8682/354345553467865653465566566:9997T !!  !#":534404E###?968:9;;:83429@=>=?=;=A@@,VSYjh`69_VYh}m6DhIh>==>>>=>=>?>???>=>>=?>==>>???@??@@?>>??>???>>>??@??@?@@@?@AAA@?>>?>?@@??@?>= >=>>===<==>==<;<<;;<<;;;<;<<;<=<<;<<;<<<=<<<=< =<<<===<=<=>==>=< =<=<<<;<;;;<;:;;::;;:;:::;:9:::9:::9 89899:88998887778788877898878788788788767666777676665545456656654555454343 23323334332e32c2eed2cddeedcdccb11bbcb```aba`a +ba``__^``_^]^^]]]^^]]]\]]\\[\\]\\\[[\[[\[ZYZZYXWVWXXWVWWWXWVW +VUVVVUVUUUT STTTUTTSTSUTTSSRSSSRRTSSRQRQQQPQQQPQPPQPPQPOPOOOPNOPOONNMNOONNONOOOMNMNNONONMMLML!KKLLKJLLMMLLKKKJIJJKKJKKJJKJKJJJKJIIIJKJJIJJIJKJIJIIHIKIIHIIHHIJHIHIJI}JJIIvLZkrmtfMROSdVLLRPPOKSZRRTRKRWUTTSTUSSUUY][UPTWURX[^\]^\^ZU$>A++D;;9:<;::9779>DD?93.(())*+)+,**)'&''(()(*---,*+++,*)+-231//10,)+-.0249 *$IMJ:=Y7:;B35Q_P15642b=3[Ab74@CWdwBB?7132//14332112243240//.-*($###&+,-//0,! !   &,4AKN&'*)LA8:>=A%.5,HA@AEHHIIHHE:9"#'*((/..0247554443212210221//00---,+,0//0120XSUWTTSNKF@8.2DFB>862/2431221.,)*.-.10.(%%$$"#*057943%'38>!##$$%&((&$E@89928 =989<; #''&&''&'('MNLH@<81004<<=AA=4IUFCED%++>@*,"$#(*&$!%''$%+(%###!#&      + !$$! $ (074) 3>%0WJq(ӕ6 D%;:^̄=ԄӀvSIB<961:!(%" !# + +  + +3 + + + + + +  +    e       +      #  +  +'  + + + +  +  W +  ""@;MxZZxjC$(HMRSXf_K#2P8~qӌQY$- 9=݄Ԅ3Ʌt¿K[32?FFOD276=K>45:9985=E><<<7k?DDAACB@>?BCFHID@BCCAFIJEDB@@@7$%#)*'"   + + ('*!/" ",6(++.$3;G'!.6=,27<5I-F3/9N)@-((623,)*46I((-#&3)).9F1 +     ) + + + + +  ( + +  + ,   F +    +  + + + 5  + "$!#$#!  +  C,++-,-,)'%#$'&$!  "}|||}|||}|}|}||}|}~}~}~}~}~}|}|}}}||~~}~}~}~}~~}~}~}}}~}~~}}}~~~}~}~}~}~}~}~}~}~~~}}~~}~}~}~~~~~}~~~~}~}}~~~~~~~~~~~~}~}~}~}~}~}~}~}~} 䆔yԼιÿʼඬеĿꓓ6 +  + + (U遌G񳵾ڰv# + + #"#$#"#"#"!"!!""###"!"""! !!""!! !! !!!"!! ! !    ! !       0ҜȧŴıƿɀ¿ǩƅվÀ،ѸѣϿĘLJ큀ʀýȻ..1.--./0387^JAIQND979;<@BIQ++C4225EOVB2EKLPSABFBBBGMD_jSSiE >;;;<<<;;<;<=<===>>???@@@ABBCCCBA@ AABCBCBAABA@A@@@?>>>?>?>=<=<<<=<<<=<<=<<==<<=<==<<=<=<=<<=<=<===<=< =<<<==<<<;<<=<=<===>=<<=><<=<<===<=>>>=<=<=>=>=>=>=>=>=>>=>= >>==>>==>=>=<==>>>?>=>=>==>>>=>=>=>=>=>>>===>==>=>=>=>?>?>=>?>?>=>??>?>>>=> +??>?>>??>>?>?>>?>>?>? +>>??@?>>?@?@?>@@@?@A@@??@?@?@@@?@?@?@AAA@?@AA@@A@AA@AA@A @@AAABAAABABBABB@AABBABBAAB ABCBBABBCBCBABBCDCCCBBC BBCCDCCCBCD CCCDDDCCCDEDEDDDEDEEDDEEFEDEFEEFEF GFFGGGFEFGFGHGFFGFFGH +GGHIHHHIGGHIHIHIJIHHHIIHHIIJIIJIJIJJKJJJKKKJJKJJKJKLMMLMLLMLLMMNMNMMLMONOOONONOOPOPPQQQPOPQPQPQPQRRRQSSQQRRQRRQRSSSRSSSTSSRRRSTSST STTTUUTSSTTUTSSTTTUUUVUVUUVUUVVVUUVXWVVWV WWXWXXWWXYYXYXYXWXUYYYXWXXZbYVTPOJIY1,');A>86:9'54"%"< <;== !8:;=??> <<?=>!"$(++))&#"!"!CAA"BC!!"> !!A@! A==C"BBBA?>?BC?@B@?AD>>?B'**(D?6*(+,+18:758;:<>?:569;;8:977;=979; 9422135741--.265322210///369;83//0//011.-./0244430011/./232221254m34555676878:99767775344555445999778765544320..01/010.//143101222446976765556688;:63234445655420121577764554v787679887:8787 !! !""!>31359;99?"@;9;=>>CC=:7646<=>>?>?BEH3SUQdaC@CDOhF]L~zYLWLOc@===>=>>==>???>>??>?>?>=>?@?>?@?@@?@A@?@@@AAA@AA@@??@@?>??@@@?@@A@@A@@??>>=>=>=>===<<<=<;;<<;<;<=<;<;;;<==<<<=<=<=<<=<;;;<; :;:;;;:::9:::;::;;:::;;::999:989:987878 7778777887 877877877767654554454545432323223222feed221dedbcddcbaacccabcbaa`baaba`aa`a___``__^3]^]]]_^^]^]\\][\]]]\\[[ZZ\\[[\\[Z[ZZZ[ZZZ[[Z[ZYZYYXYX WWXXWWXWXWVWVUTUUUVUTSUTSSTUSTSRSTSRSSRQPQRRQPQQQRQPQPOPPOOPOPOONONOONONNNMNNMLMMMLLMMLKLLKLKLKKLKJKJKLKKKLLKJJJKJIIJKJIJJIJJIJIIIJJIHIIJJIJIHIHIJIJJIJHN|hHb;swtNGJJXWEBFKLELJOWXYKLNPVVVNLRPORSRRQTYY\XZXTVQGP(@B35L=@BEEHMHJJGFKUJF>3//0-,+'&'-.)'''&&'('&&%'),**+,-.*)n-12.,-.++//,*()*+.0379:!(:7WZFFS;524@S]F4b[KEC3`VKM9;ALIBmE[1PmUIo@eJQm[BJ9Fu`XWk{ZQ:VKVaX]7 .,"#+0234T221223344332200..//...,-11221.-,,VRNKH@;877514:83133120210/.--+*),.10-(GE#$"$)/45541!4( (2;;?!#$$%$%&&(($ >;<79 55897"&&&%'''(('IHE??:4/.37:==;:55D*-765,1G7',"*H=73CL.,"3(/K:13 +,(0.@8   +  +  + + +       +   +        !      1 + $!!$!""#!!!"  K+)&&$ '$}|}|}|}|}~}~}}}~}~}~}~}|}|}}||~~}~}~}~}~}~}}~~~}}}~}~ }}~~~}~~~}}~~}~}~}~}~}~}~}~}~}~~~~~~}~~~ ~}~~~~~}~}~}~}~}~}~~}~}}}~}~}~}~}~}~}~}~~~}}~}|} 烪ρށؿºλªĶĚ8   +    -򃆈G耇ͯR "%!"##""!"""###"!"""#"""#"!!""! !"!!"""! !!!"#! !!"! ! ! !"!  !! !      Qӥ쉅ϬҺʷ…ѣ̓ݛΎ𴎓Ǭ߀Ƽ󃌌ޖʶ灋ij8//2580\--]YY\b`_ae]\4<<>=;:<AF()RRS/564784/.+,=&3@#&%7*4B(-(J?7881-'%+676220-.033/,(#"#/R01..,)''%# 65>BHQJE;:@FI=CE>=;:3?@???@@ABBA@A@@@?>>>@@@ABABCDDDCCCBBAA@@A@A@?>>???>===>>>??>= >>>=<<==<=<=<=<<===<=<<<=<=<<=<=<=<<==<=<<=<==<>>=<;<=<<=<==<=<<==<=<= <==<<===>=>=<=> ==<===<=>=>>=>= >==>>==<=>==>?>=>>=>=>>=<=>>===>===>===>>>=>= >==>==<==>=>=>?>=>>>?>>=>=>>>=>>?>>=>>=>==>=>==>==>?=>=>>>==>?>?=>>==>>>=>?>>=? >???>>?>>>=>?>?@?>??@?>??@?>???>?@?@??@@?@???>??@@?@A@@?@?@? @A@@@?@AA@@@?@A@A@A@A BABAA@AAABCBAABABAAABBBAABBBA.BBBCBBCCBCBBCBBBCBCCBBACBCCCBCCCDDCCCDCBBCDDCDC"DDDCDDCDDCDDCDDDEEEDDDEEEDDEEEDECDE FEEEFFEEFEFFEFEFFFGHGEFGGFGF HFGGFGGGFGHHHFFGHHHIHIHHGHIIHIHIHHHIHIIHIIJIIHJJJIIKLKIJKJJKKKLKKLKJKKKLKLLLMMLLMMNLMMMLMNNMNMNOONNOMOPNNNOPOOPPOOOQPOOOPQ'RQPQQRQRQQQRRRSRRSRRRQRRQSRRTSRSRSRRTTRSTTUUSTUUUVTSSTRSTUUVVUVVVUUVVVUVUV WWXXWXWXXWVWXWXXWXXXWXYXXYXYYXZZWXXMcZQNMMS+22.249==;<:4&84B$!=;<==<9<9<<== =; ! !!"#'*+*)$!AA"BAAA"$#"!C!D!!!@BACFA>=@"#"!"CB@@ ?=<@@AACEEB<>BE?A(**&G66<51--3:><=; 848:9:<;:9755569; >70120335541104789752110-046554210/././..3434234421200//010132136555654346899;:97765578799887897421211//-/00/-/43/.03313752286667546515::8543112245520.0115898876236424757896689:9755"#!"##! "!83435<"&"= !@ >@@?<<:7568::99:;@DFEDAmrsM1`UehgjprQu|IHRVa~==>=>=>?>?@?>?>>?>? @@@?@@@???>?@??@@@?@@@A@@@??@@@?@A@@@?@?@ A@@AA@@@?>==>===>=<<<===<;<;<<<=<<=<==>=>>>=<=< ;;;=<<;;<<<=<<<=<=<=<=<<=<=<=<;;< +;;;<<<;<;:;::;::;::;:9::9:9::9:9988898989889878899987876765656545554544545454555345454343343223ed232d2ccc1bcccdccbcbbddb cbcbaaa``a``_``_`_`_]^_^__^_^^__^^]]^]\\[[\\[\][\\[YZ[ZYYYZ[[\ZYYZZZYWXYYXXYXXWXWWVVWWVWWWXWWVUVVUTUVVUUVUUTUTTSRTSTTSRSRSRQQQRQQQRRQQQPPQRRQQQPOPONONMMNNNMNNMMMNMMLMMLLLMLLMMNMLMMLKKLLKLKKKLKKKLKKKLKJJKKJJK JJIIJKIJKJHJIJ +IJIIIHIHIJIJIIIKJIIIJGiKH9?rnIDD?xB=mBINNJNTWUQSMIKPSRLKJLUWPOUa_\TVWVQE>A:\\N;<;51,N/5-2-N@;:@KLQU[[^H?8:HL:.*&&%$$##%&))-0./0/01/,*-0/.0/,,.-,*))())+.358;==-QKENO[N7?63\6a>UpwX]92M:`|[>CZOIR6OZTR]daL\J=O[ba\X~^[m\\dwgq\@6/*),28:!!7535|850('*''-,((+-)(%"  $*,04579<;96-# !"! !#$%()+-.0 ! 20022379840/05;=::; #%&+-,+--+,-+++*))'()P()**)((%'(**++**+,+)%#@>&-///0.)##%&%'*,+*'"#')*&&(*("#&# !H:++)'),-0*.110026@I'lJHKJHDEA;@<1+*+&(+*).10454211/.-00-/.0-1-61()&.,(#$%)',>K+00-RKK.9=>8:4)"BDDGGGFGG&)*)&" !''%).2233321 34455442100/-.?-+,.0.00-.ZWTQKC;3026642.-/.,-/0././.-,+++.-+-.-*MDD&%$$%+.11/0!186:<==;=C>;"&&'('%%&+(#!"!?=>?b]dA=[c=9>D]F +3 hɇ!ÄĀþ²ö6+$'HF/30)F(%E,38:7:?A=7:657<>>:ij:;s?FF@uwy?|yEPMHA/@>:5,())0*!!'(!!(513498:,$!#00#y  -%+ ,%"$'.' 2, 2DLG33# ?+6* /35;51K11?.17@69) + +     . +   6    + D        "#!  +   +  !&$# !!    ?.,)($ +$!}|}}|}|}|}|}}}~~}}~}~}~}~~}}}~}~}~}|}|}|}}|}|~}~}}}~~}~}}~}~}~}}~}~}~}~~~}~}~}~}~}~}~}~}}}~~~}~}~~}}}~}~}~~}~~~~}~~}~~~~}~}~}~~~~~}~}~}~}~}~}~}~}~}~}~}~}~}~}|} 뇌􅆍۽ͮ򁉒漢ϼí팉Ծ0       9".-Tͧ郓偉^ + "#"!""#""!""!"!"##"!!! !! !!!"!"" !!! !"!   wq̂ԹȯƳҼҹץ׭ҿŪֳٙȿĽ偅ǿꂏӾ쀉ʱ/3855\-01a0123441214=>=??=>=@C@7430\XTW/1ZW-/0/027:9987643342__`a[TNLMOT]d9AFP_ab32/+LIOG@B*-389H2CNNC0<@@AC?@@BFQPTTRI63;ACOT+++056325;4.--K*3?G$%>15A&16OGA;<7-*,0440/2343-'%%&(&&##(/,(" "#" !:=@79BKMM8.17===>? @?>>???>>??@ AA@AABCEDCBBAABA@@ABCAAA@??>=>=>=>><=<=>=>=<===<=<===<<=<=<==<<=>= <<===>===<=>>=>=<=>=>===>=>=>>=>>=>===<===>>>=>=>=> =>===>>=>>>= <=>>>=>>>=>?>===>>===>>?>>>=>=>>>=>===>>>?>=>>=> +?>???>???@? >?>>?>?>>>?>?>?>>??@?>>?@>>???>?>??=>?@?@???@?@??@?@?@AA@A@A@AA@AA@A@@BABABAAABABABBAABBAABCBCBCCCBBCCBCDCDCBCCDCCBDDDCDCCDCDCCDEEEDEDEEEFEFEFEFEFEEFEFEEFEFEEFGHGFGF GGFGGGFGGHGHGIIHHHIHIJI +HIJIHIJIIKJKKJJJKJJK +JLKJLLLKKKLKKLLLKKLKLMLLMLLMMNMLMNM LMMNNMLMNM NONNNOPOOPPNOPOONOOOPPOPPOPOPPPOPOQRSRQQQRQ)RRQRRSRRSRQRSSSRTTSSSRSSSTUTTSTSTUTTSUUTTU TSTUUTSTUUUVUVUVUVWVWVWWXWXVWVXWXWWX YXXXYYXYYXYXIeXQKHLMS7649746656457,!C&"=<<<;;<<<>=>>=;:=<;;= =<  !!""#%)+*($"A@#"!!"#"""!"""BA?@"CBCB??!!""!DCDC?>===?BBBDHD?BCB@:;%+-+'*&@;70*)-2:<==!68:<>>;8523577433310221 012323442121/00123550-..2/,,.,*16 42242/..--01211222356545554678878$77656536547756778877732233100///./13310136765655432259:97655422331w0/22354478753465565577976688876 "##""! >9:AD?8;A!! !@=<<>==?=7Gtrdet,D\4?NQZq{IYp>==>?>?>?>>??>???>??@@@???@@?@?>?@??@?@A@A@A@ABBA @@?@@???>?@@A@@A@AA@@@???>??>=>= <<==<<=<=<;<;<=>>>=<;;;<<=<=<=<=<>>===>=<>=<=<;<;<<;:;;:;:;:::;<:9 :999899898998988989888987878788876556565665654545444344434323+2223232232cdddccdcccdcbcbdcccbdcdcbbabaabbba`_ +`^^``_^^^_^]^]\[\[ Z[[ZY[Z[[Z YYZYXYYYZYXYXWXWXWWVUVVWVVUUVVUUVUUTTTSTUTSTSR +TTSSRRRSTSRSSRRQRQPRQQPPQQRQPPQQQPOPPONMNNMONOOONMNMNMNLLLMNMLLMLLLMLKLKLLKJKKKLLKJKKJKKJJJKIJ IJJJIIIJKIJIHIJIHJJIIIJJJFJ0mqd`ZUXT>GAwDJJMPTZaYTRQNQVQMNSSTSPPTabb\UUZZSDDm(IH;Cb>-++*W)*IFAAEJTC]80USGEB7820.+)(&%'%$&)()*(')*)'&(),,+,,+(%&'')+.1135520/-;9[M=L~eWSTRNPsm[WXR[CkYIMi?*8:3.)%"##$'&"($" H""!$#"$'*-./22132565557" 6321138:>!#%(*+,,++..*)'%%'('(*+ )))'')**+,-,(IDC%,00///.-(&++)()+*)'%'**+'"%'$%$"! #C0++)((,-,1./00148<&*(%%&'MIFFBCE?51,**'&'())+.034441.--/-,/237<#-'!8*!+* #$&(.A1M+00.*(+29=81*&"@CCFGHL%:>%)+)'('  #!#/23212233323344331.D-./01-+,/1,,-,YUQOIA51/132200/,'+-++**(()+*)+,++,,.,)&GI%##" !%)-.*+ + 6!B!##!" #)(())''&'+*$##">;98!;8 "%'%&&&%$##%$GGIJE?9556>:K-44',(L/45:=>@E?;::8>w{}~CNMLF>=?>7((@*'$?$.'&##'*/$8%43,+)$(!"%.0;-(#:C1--$""6+ +SM;332/.2LC5284:'AD0*1D%!)99/I,;;7)) + +   +   + +  +  +  +  +     + 8   +  #    + +  + " !# + +  C0.+*% $" }|}}}|}|}}||}|}~}~}~}~}~}|}|}|||{~}~}~~}~}~}}~}~}~}~}~}~}~}~}~}~}~}~}~~}~~~~}}~~}~~}~}~~~}~}~}~}~}~}~}~}~}~}~}~}}~}|} ҸݹȻƺŴºʀ不ѳ3 +  + +    +v!Z򄇁O큄՟ܗ笼־f   ##"##""#$$###"#$$##"""#"""!""#""! ! ! !""!! !  ! !     ­ȞڗۈÓƶ÷ԥ쏂Ǯ焙󀌔нƿĿ֏ͻ򈗌į34VRaf6<733467885858???CDA>?ACB<444YNST/40XW///037964421/11/0]Z]`ZRMMNPYg:DQ[ccZY0.,):7;;D+0048bC;LMG3$BFPX[B4/:P.>SPG?:HD@:564--597401641,'$""&'&)(*58;4)# #$$!!A?:89@?:>=53339E>=-42+)HE>.F**(++1FI;36F@:Q.69BB4SB?L^fZZ^k=<;:;< =<<;<<=<;<=<<<=<=>?>?>>?>?>?>?>>?@AAA@?>??@A@@@A@@@A@@@???>=>>><<=<=<=<<=>=<=<===><=<=< =<==<===<=<<<=>=>=<=<=>=<=<=><==<= +<<==>>=>>>=><>=<===>===>=>==<=>=>=>?===>=>=>>==>>==>>===>>=><=>=>=>=>=>=>=>=>=>=>?>?>?>??>>>?>?> ??>?>@@?>?>??@?>>?@?>?>?@?@>>?@?@@@?@A@@?@@@A@?@ABA@A@@A@AA@A +@AAA@ABABBABBAB AABBABBCBBAAABCCBBCCBCBBBCCBCCBCDCDDDCDEDDDCDEDDEDEDEDDDEFEGFFEEDEFEEFEEEDEEFFEEF GFFFGGHGGFEFGFGFFFGHHHGGHHHGHHGHGHGGGHIHIIHIIHIIHIIIHIJIIJIIJIIJKKJJIJJKLLKLKLLLMKLMLKJJLKL MMMNMMMNNLMNMNLMNONNONNOONONPOOOPOPONOOPQPOP QPQRRQQPRQRRQQPRSSRSRS!RRSSTTTSUTTVUTSTTUTTTVTUUVUSTSSUVTVUVVVWVVUVVWVVVWVXWXXXWWXWXWXXXWXWXYXAYYXYZYYXXZ[fZWQKKNIN;.3CA;5.011586->?$$;;986:<;==>;<=;<< ? !#"#$(*)'$$"#$!"$" !#!BABB@ A !@?AE@AB@A""EBCE@=@AA@ABBDA=BD=AB?@C'*,(H=42.*-/.147:87579:=!>843445860+.0,-01/13343//123410.,,.112y//14310/.21110..1345462241.+,---/11/0101575434879:::8856544665533202545435568;::744431/01/,./10/2344454115665444334654/5567644222011332221451326665357788424656665667V"##! 6427!!"!?;:>!A;;= ?>=D=]fVLfi,Lve;5{xk]N?<>>?=>>>? +@@>??>@?>@? +@@???@@@?@?@?@@@?@@@?@A@AA@A@?@A@@A@?>?@@A@@AAA@A@@@?>?>>??>?>= <<<==<<=;<=>=<<=<;<=<=<=<=<=<===>=>>?=>><<=<=<<=<=<<;<<;<;<;<<;;;<:;;<;:;;::;::;:;::;:9:989998899899898998787789888777888765655656665666544544543 233343322332d2cd2cddcccdddccddcbddcbbba bc```__`a`^`_^^^___]^]%__^]]\]\\]\\[[[\[\]\[[[\[ZYZ[ZZ[ZY[ZYZYXYXXYYZZXXWXWWWXWWXWWXWWWVUVVWVUWVUSTTTUUTTUSSTTTSRSRS RSSTQRRQPQPQRQPPPQOPOOONNMMNNON,OPOONMNMMNONONNMMLLLMLLMKMLLKMMMLLLKLLKJLLJJKJKKKJKLKJKJJJKIJJIJJJKJKKJJKJIIIJJIJJIIIHIHIlJJKKJE]]svp\=;LRY{nFA9455611-4HP3D730*($**'('&')))&%%$%&&%$%%$%&((**)*,/.+('&()*+-...01.,($4*$%-@DPC=Fdk[OWn[J0BA[Vq_UnND}d\SP`|hY>fQ<8uWASYYZlobqI}Pf6:$*IA320**.5A#""!451-,,0120($"##%'#! !!"$$"$$%#"$%%&%$&&'*+,//.133 644548776%"8751047:=<!#&(*+,,,.0,)'''())+-/.-.-+++,**+*))*+,-.*ICB$*-/0/..-,**.,*(&'*)()*)'%&&$#&%!! "9*(*)((-;5*++-0158?G''&&'*)M%HIHHB70-*$$***&)*+-02451//-,,,/137+2F32/.)$)"4362$$@@E,@UU.0/..27<:3.)$B>@AEJJO),." &)+,%'322112334221021232121-,,-..0./.,,173.YUUQI>30-/ +0112/.'9'*)'(*,++-*)./,)ME?:;9 %+++1.9?$)&$"#$%&&$&#%***,-,))+,-*%&'@58: $!=: !#''$"#""!"" "DCEHD=8677?J,3?EEC=; 7"()$ #)02 ,+*$!$(#!  +  "! !!$ !& &%," (6CCIXҔMD<[5Uŀ.܅߄^scUJ?9:.+#+*%  +  +  +   D     +(      #   -  ' + +      %MeDA~NH*1@&2T>$-iymm]XJDӍ!HS(+ń1wC9CII9%)213LD)&2;48?A?<96;97=@>@A89;yxuz@BCCGIJJHIGFKHGCA8,$##$,"""!,5"( d + +%0(%89/(4C/#%/'83BL6.A/(I9501;UH>3#?1$$H;-'0U>/7NAG,PI'/ +   +   + +*  +   + E +    L# +   + + + '  # +   1/--,& ' + + }|}|}}}||}|}~}~}~}~}~}~}|}|{|}|~~}~}}~~~}~}~}~}~}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~~~}~}|}~~~~~~~~~}~}~}~}~}~~}}~}~}~}~}~}| }}}|||}}}~}~}|}|} 鏎ꁂǿƾӸ󉋈񽚌ׅŵƏP    +    %OHϯÆɍЩΣ԰i" +  +  +###"# ""#$###"""#"! +"""!!! !!! !"""!! 1 !!! ! !    !   $ʫӟî釼Ծν曘̔ӽْٹխʋԥÈʾžǫL􂊏􎢣?к.045ehh::646:;99689@CB@B?>>>=?B:6472TTUX./VT[0//1563/..-,VVSQQQUTPJLGFGL\=Pabb\X]SDJJ44@CS.0381UEEFC?73JTOQ.M98E0R2FIF@GK(PIN'&.3540QA/2,*+F)-4:B)9(5%(<5DEB;<>68EE?<9430--*'&%&'%&'(/955,%! "$$##D=769;>>9<<;43442,9L)(%$GP;20302126;78$+.+'2?GKD8.UHCUjg\Hx>;<;<;<=>=>>==>?>>=>>>?>?>?>?>>>==<>?@?>>?@???>>???>=>>=<<<=>=>=;==<=<=<===<<<=<<==<=<=<=>=>>= >>===>>>==<= <===<<=<===>#=>===>>===>===>==>>=>>>===>=>===>>=>=>?>=>=>>>=>>=>>=>=>=>??>=>=>?>??>=>=>=>?>???>=?>>?>>?>?>>>?@?>?>>?>?@??>?@?@@?>?@?@ ??>@@?@?@?@@@AA@A@??@@A@A@@@AAA@@AAA@AAA@@@A@AA@@@A@ABABABBABABCCBABBBCBCBCBCDDDCDCDDCDDDCDEEDEEEDDDEEEDDEDDEFFEEDEEFEFEEFFFEFEFGGFGFGFGGFFGGFGFGGFFGGHGGGHHHIHIIIHHIJIHJIJIIJJIIJKJKJJJKLKLLKKLLKKKMMLLLKLMMNMNNMNMMMN +OOONNNOOONOPOPQPOOPPQ PRRQQRRQRRQRRQRSSSRSTSUTSSSTSTTTUTUVVUVUUVVWVWV UVVVWVVWWWXXWVWWXYZYWWXXXYXWYZXYXY0ZXYZXYXZ\UZ_[UTLMSG,63:BA<89854446."9:;<=??@ !! !###$%))'$#$##""#"#""!!@! !!@??BA +""!!#$EBBBABA@@?=>@==@CBA=>'+.)H>853110///03332578:<974551032.*)++/441221144403321456531221001220./20478623445544132/..010.000110346774457;\9::76445555211046668633469:75342000/+)+/0131..0102545541113554544567421553422212242125422434435447799753488765546778W9: ##"""8557<> !!! A!"B:9;<;;B>@DFIZ[sZ<,-168NH_-J[xy{]cxgzA>>>?>>?>>>? @???@??@??@?@@?@A@?@A@@A?@AABBABBBAA@@??@@@??@?@AA@A@A@@?>?>?>>?>>=<=<<=<<===<<<=> ===<<;<<<;<<=<=<===<=>>=>>?>>>=>=<==<<=<;;:;<;;<;<;<;::;:::;::;;;:9:;99:9:99:9::98989898998 77898878876676 765655666565434 34433223232221212e222dcddcbacbcba`baabba `a`a``___^^_^]\]^ ]^^]\\]\]][\]\\\[ZZZYYZYYYZYZYXYXYXXXWWXWVVWVWVWVUV4UUUTTSTTUTTSTUUTTSSSRTSRSSRSSSRRQQQRSRQQQRQPQPPPQQQOPOPOOPONONNNMNOOONONNNMNONNNMLLLMNMLKMLKLLKKLLLKJLLKJKJJIKKJLKJKJ KKJJIIIJIJIJIKJJJIIJJIJJJKKLLGuUmqqofekb\MrlCIIHGLUX]a`[ROLRUNTZQNNOPPOPPMQU^hjgYY_[Y[YSGLI;XA./?@'GI];qsG,)K<30/.))=I;05/,/00.-,,,('(**)**+)((&&'&%$###$%&')()'&&&$%&&')***++*)%B505$01*=Ig`{p`cd]D;Or~O[_T^pgHVxVP`xps[hRQWIGECPO\Ebt7Zwh\aZj9')'!E+=/:A8./08@!!! 1g//,++,-*'&%%$$""#! !!!"#$&()+/010,)*+,+,,*&%%&'(,.--/0234 ##;:643757!86644247;<=  "#&)*+,+/30*' **+,---,,-+*+**+*,-.,'DD$&+-.0.--.//,,+(&'*+)(**(%$&(+*&" !6.+,,))*/7-(+11147=:674224B/@MLGA=?1"$$$$, 1&$# $,'(% +$(% #%% "/&"  ! + +   "  %% #(,&/'!,@BA=€i .S6}yԅu 潨z^RLB>>.!#)'#"##  + +   _       + +            + + + +     ""%THhZH+ %82=:MehhJWna )D~ )ׄ +҄Ӏg;BFGFABD;5(A>'.//19??CFFA878=@:?C=:9;=>=><;?BKUXSEFKDAA@9052%5#!''8#=BA)-%+# o! +*50?72994&"9LQ17907A8+7KE.,:KDB3@145++))307-?P 3J?552@    Q  + +    +      + +     + + + + +   +  % .   +  C0.-)%*#  }|}|}}|||}|}~}~}~}~}}}~}~}~}}}~~}|}|}|{}~}~}}}~~}~}~}~}~}~}~}~}~}~}~}}}~}~~}~~}~~~}}}~~~~}}~~}|}~~~~}~~~}~}~}~}~}~}~}~}|}}}||}}}~}~}~}|} 邆نѶźDzֺȳ垳ºĦy2     + &M􄊍쑗;迯ٙՙԯ`# + $$## ""#"##"#""#"!"! !"! ""#!! !! !  ! ! !!   + ,ӵ퍡̻Ѝőıٸ᭤ܬҺӆ°ѴˬѤƼ쀇ͽͧ󊑐瀛Ĵ1a6;559:9668=@:759=?AA@@A===;:<;9663YTXZ]/WQQX0\_a20WRTOJIIJIHEHPLGGEBAH/Edebb_3]C3=A=GIH+-05@]Q9>>998FWRILLJ?+-/9$LF5BRKFHHB@@D?:83/0.+)&!#'-4)*.+"!!!$$"!D>54;<9476;>?05>9;>FPQQL?3866475;A?>?7=-4;CBCLRG6/QVUEAZ`VRu[><<;<<=<;<;<<;;:;;;:<;:;<;=< ==>=>>=>===>=>=>=>==>=> ==<<==<==>=>=<=,<===>>=<<>=<==<<=<=<=<==<<=<===<<<=<=>=<==<<= <==<<=>===>===<===>==>=>>>=>===>=>==>>= +<==>>=>>>?=>=>=>=>>>=>>=>==>>= >>==>==>>>==>=>=>?>=>==>==>=>===>==>=>==>=>?>>?>=>=>>>=>>=>>>=>??>>=>=> ??>??>>>?>??>>?>>?>??>>?>>?>>>??@?(@??>??>>??>?>>>?>?@???@?>>>???@?@?@???@@?@??>?@?@?@??@A@@?@A@@@?AA@A@@@A@?@??@@A@@AAAB@A@@A@ABAA@A@ABBA@ABAAABABAAABBCBABBAABCCBBABCAABBBCB(CBBDCBBCBBBCCDCCCDCCBBDCCDCCCDCCDCDDCDDCD EDDCDDEDDDEDEDEDEEEDDDE FFFEFFEEEFEFGFFEFFGFGFGGFGF GFGGHGGGFGHGGHIIGHIIHGHIGHIHHIJIIJIIJJIIJJIJKKKJIIKJJJKJJKLK LKKLLLMKLMMLKLKKLMLLMNNMNNMNOONMMNNNOOPPPONONNNPOOPPPQ PPOQQQPQQPQPQRRRSRRRSR!SSRTSRRRSSSRSSSTSSTSSTTTSSUSTSUVUTUTU>TUUVVUWUUVUUVWVVUVVVUWWWVUVVVWXXWXWWXXWVWXXYXWWXXXWWXZZYXYXYYZYYXZ[ZYXYZ[ZYZ^TP`ZVRLRSJQ+.01*P/65573000(>,>+) 68;;:8778=<;;;=>@ ! !""#$%)+&#"#"@"$##$"!5"!><:=@BB@A""!"!CDDBA""! >??==<)+-/*J?=7320M4567100126;;9851673.+*)(-01/011677545875544110123/**,012/0/27311235423320---01T35323336644458::52133576556843323367752238; 8887630/0-**+12001.*+/.-.-./222///01243570265431211101/064356632233343244422011355765565567788 !!"!:2258=B >><;A?89=@ !! ><;=?<;<;725@CIKIHI{viF5,0FHFL]75:fbpZErz|jB>??>??>??>?>>>???@ ??@?@?@@?@?@@@A@AAA@@@?AAA?@A@A@A@@ABAABA@?@AA@A??>>?>=>??>>?>=>??=>===><=>=>=>====<<==<===>>=>=>>==?>?==>==>=<=<<<;<<;==<<=<<<; +<<<;;;<;<<;<;<;:::;:;9;:::999:::99::9898989899889887898767766656655565556555444545434323223234332dddee2dddc2dddcebabbcbbccba`aba`a`_`a``___]\\^^__]]^^_^]\\\[\\\[\\\[]\[[Z[[Z[[XZ YYZZ[ZYYXYYYXYXWXXXYXYWVUVUUVWVVUUUVUUTSTTSRQRSRQQQRQRQ OPPPOPOPPO2NONNNOOONNNONNMNNMNNMNMNNNMLMNMLLLMMMLMLMMLLMMLMLMLKLKLLMLJKJKKKJJKJKJJKJ +IIHJIIIHIIJKJJIJJJIIJJJIIIN[lklnprsphZ\XEDKJOY[W]cd`QFHKKIMROLFJPOSoUqqcSY]NORUKJYM_UA@&=77.0K86AfqM?..R910.*'*,,-,-01010/.-+*,,.-,**(**('((&&$#"##$%%%& %#"!BBCC"#%&^'('%')#&04.4D{eufgSBPrDpXPP\Y=;K7dFehYNtzjggmW`XZ_TTPMYgg^?:MR>H6h(()%F>LE9EJE1/0/08?"!$# !! "0--,+))+-//..-+-,++*++,/,'+/11/00/-)'&#!&*+-022545#%#<;::769 64431247:;< !"%&%&))02/))*()+,---+,--+#*+,..,+*++..+((%$%'+///..0211/*)))*+('')+,+($##3+**/6/+))+)+/1357"&!!&*(%%&+.*'%(**,,+,/,,+*),+)'(&@<=;>!<56>"BCE$">;94-,a013:7321-,1%7RNHGE$:$%%%'7/!,)#$" *)"(-)#%%"" *, $ !*#c +  +    $$ #&&)%  !(.&./.#2>@P&K&GWń Ʉ.΄ԄK߅ *⭊v^PIDD?45,!     + + +     + C    + +    $ + + +; +   < #"Dt;d[T3% 22+.7$'1VOaI:anM@=;bſ¿„D=BCFIKLLJB;:6(#*/5>A?DEEC9.1679;=<;5g7<392($"' #36*&2#,!"$&` (D5=79,(7I)C101:5(6(7<4-GF<:?@3:46<5521;FD6&%/2#" = !  + + + #   + +   +   + %  + +  j + + +  "    + #&       /,,($  07}|}|}|}|||}}|}~}~}~}~~}}}~}}~~~}}~}~~}}~}|}|~~}~}~}}}~~~}~}}~}~}~}~}~}}~}~}~}~}~}~~~}}}~~}~~}|}~~}}}~~}~}~}~}~}~}~}~}|}|}~}~}~}}~}|}}||} ʽꂉĹѿյλ틢\5      'R醔RͻߞЩĝÿꁛD $$"""#"###$###""!!!"""#!""!"!!!"! ! ! ! !""! !  .١ՀĚįҒޓųҽ֖ܠäحʄ˯ʿ٩뫡ԧي鿯;­눵ዪڻյ 2134107>;966>@:888:=@BEEECB>:99;7665\TUV]^TORZ1``caXQORMIFEFFFECHGCDEDFP2QibZ_5eQ?5:BCBEFN)0;BG>+7<=BT\YOONDKLMPRIIQVQF*/0.-0/12/)8+J1-OM)M+)1=CJB>EHLFGNFA@A?@CC>72/-**)('"#"&)$&'" "##'&"977678>88719@3-4GNQ+XH431XON0>>ko`p;<;<<<;<;< +;<<;<<<;<=<=<=>=<<=>= <=<<===<<=<=<=<==<===>=>=<=<<<==>=>=>=<=>===<=>=>=>>=<=<==<==>=>>=>===<===>=<=>=>=<=>==<=>=>?>>=>===>=> +=>=>>==<==>=>=> =>==>==>>=>?>>>==>>===>>==>=> ?>?>?>>>=>=>=> ??=>=>>>?>?>?>???>>??>?>?>>? >?>>=>???>>>?>?>?>?@A?@?@?@@?@@?@??@?@@?@?@@?@?@@@AA@AAA@@A@AAA@?@@A@A@A@@?@AA@AAA@@AA@@A@@@ABABAAABABAAABABCCBBCBCBC DCDDDCCCDCDDDCDDCEEDEFEFEFGFFFGFGFGHGGGFFGHHGGGHHG HGGHIIHGGHHIHIIHGGHIHHHIIHHIHIIHIJJKJJKIJJJKKJKJJKJJJKLKLLKLLLKKLMLLMMLMMLKLMLLMNNMMN MNNNOOONNONNNONOOOPOOOPOOOPPQPPQQPPQPQQPQRQRQRSRRRSSTSSSTSSSTSTSTUTTUTTUV UWVWVVWXWVVWVW XWYXXXWWXXXWWXWXY +XYYYZYXYYXYZZYYYZKYXX[RYcZTNQUTQT+QEDJNRQ*/.1/.17(4:'*":9:94457;;:;<<>  !#"#%(&$" ###$$#" !"";;<;;>A99ADICAAD&**,..,('B3--00/-,/11134434533257741.)((('))(+/232124467795///131,),.-/1..023223445P344221000233202686766677412246742324667555897412356655789989876642/.+**,/00232/.-.2331../0123443223567543320233115445655423423321346644665676778756657 "!;43734>@?>>>@B?<;=<:88;:9;:646LzO\|Ggx|?=>>?@??@??@???@?@@@A@@?@?@@@A@@A@A@A@@ABBA@AA@@@AA@ABBBCCBBABAA@ +AA@A@@AAABA?>??>? >==>>?>>>=<=>=>=>==<=>=>=>?>==>=<<=<=<<=<<<=<;<;;<<<;;;<<;::;;:;:;:;;:;: 9::;;::;:::9:99:::989876567656 56665554455545434432333232333ed2c2decdccbcdbcdcbbcb```bbbab`a``aa`_^^^]]^]]]^]^]\]\\]]]\[\[[[\\Z\[Z[ZZZYYZZZYZZZYYXYXWVWWXWWVUTUUUVTUUUTTSSRSRSRSRSRQRQRQQRQ RQPPQPQPOPOPOOPPOPONOOMMMNMNMMNNNMMMNMNNMMLMMNMMMLMLMLKLKLKKLKKKLKJKKKJKJJJKJKJJIJJJKJJIJJIKJ IIIJJJIJIJIIJ`LJKJJJKKbqpknt|{{{vuqscRSZQJGQZ_`a[MIFJLNNMNLJKKJtVi|PTVYYMRVVPLNoYLK,@9580-7-K_ALSt !##!#$%%&+//-+-+))+,-,,,..***+-,,**,.,(('(''(*.//--.C/.,*++,,++((()*)''&&'%#933,,;D/()(((')/4:;AH')))KI$$%&F8-(%%(+.,**+-*%"),-,*)*,-,>D>8342211,'""#"?A*;JU/2348993)##GH%%'*,*$!$%&)*++"#))& +"44534431221/..01/-./.-*())*)(('(Q*ROH<64.+,('&)*(())**'&')+*)'#'+-0/252A0&+354:;777=CQ0013  !('&$$),''(&')+.1110/,+***'''&B;;9>@947=!BBGG?7562/-+,,,.032/00/17#=PH=A$B4$!#%#*( ".1.('&"$$&*$$+0,%\(++)#"%&#$'! + +  +  ! !"'"&&/%"#!$$#))"&&!1&($'Lm"G  +s* $E(ɄȀـu实[OEGF@9:4)(.355  +  + +        1             +  6WxTj[?K<-(?6+>?':erGQjA_~G'$/" 25Ą ĄÀ¿MHECFMRSSRLIGI<715F60/("#-9&&)G$!)$$# ##%$X  ,4_D?(%:6C>@/6<.*#0)AB;DAHKH:.;68>D?-5L6>)-:;!  +  / +  + +  +   +   +  + +   5  + !"   X"'   + $ +    +I&++(!!! %/ }|}|}~}~}~}}}~~}}~}|}|} +|||}}}||}~~}~}~}}~~~}~~}~}~}~}}~~~}}~}~}}~}~}~~}~~}~~}~~}|}~~~~~}~}~}}~}}~}~}~~}~}~}~}~}|}~}~}~}~}|} ž􃆊~ɲɶЈæƴƱw + + +   *Q#˄€;VϬϪàȰ΋öJ  ##%##!!!""""##$###"""!"!!"!!"""!""!"#"! !!"!  !"!!!      5ɜȹȪ㎷ߋƪῺ̖ʗ׾ΙNjŵ螅ʗ 򀈋Ʊǿ¶Ѵ舯팞x:654435899678878;8:=?BFDABC?=>?;8;:93TVX^`VRRW_`b3bQJIEEGGFGGGHHIIFGKHNV2E]aT1^RL>87;>?B%'.7G:F:"6=?T3]YQLHDONLOQKNR+,-221013.0.*/#H9/UQO*G05>K7016CK(*N@AJD@?=DD?6-&)*.,)&$$ ''"#(%$ !!!))";540/5748;79:7;:D,0(-.G6842BB97?>?FRXE94?>X\WHA@:4-+39NT4DB7;;<<;<;< ;<<=<<;;<;<<=<>=<=<=>=<=<=>=<= +<<=<=>===<=<=>==<=<=>>=<<===<<=>>=>>= <==>>==>?>==>=>>=>>=>=>==<=>=<=<=>=><<=>=>>?>=>>===>=>>=>=>>=<=>=>==>=>>>===>==>>>=> =>>=>=>==>=>=>=>=>= >??>>=>>?>=>= >>==>>=>>>==> =>>>??>>?>>>=>?>=>===>=>>>???>=>=>?>>?>??>=>???>>>?>>?>>>?>>?@@??>>?> ??@?>@??>>>?>?@??@?@?@??@?@???>?@@@?@??@@@?@???@A@?@?@??@AA@A@ +AA@@A@@@AA@AAABA?@AA@A@@A@@AA@AABBCAABBABAAABAAABBABAACBABCB CBBCCCABBCBCCCBCBCBBBCDCCDDCCDBDCDDCD EEDDCEDDEEDDEFEDEFEFEEFFEFFEEFGGFEFGFGFFFGFGFGHGHHGHGHHGHGGIHGGHIIIHHIHIIHGIIHIJIIJHIIJKKKJK JJKJJJKKLKKL$JKLKLKLLLKLKLKLLLMLLLMLLKLLMMLLMLNMNMNNMMMNMMNNOOONNOPOPOQPPOPPOOOPRQPPPQRRQQQRSRQRRRSRQRQSRSSQRRSRRSTSTTSTRSTUTSTSTTSTUVUUTUUVUUUVWVWWUVVUWXWVWXXWXWXWWXWWXWXWXYYXYXWYZYZQYYZZZY[[ZZYXYYZ]XZeYPQUZYWWUPPSPQSUS''((*28/<2K'!;:871388:::;<<;<< !##%$&#"$$#{$##!""!! !@=;>@=B"$###!BB#!##@B"BA?@9<>A<:@CC<8AG&'()),-,))KB/.//.137::=:641252./2110-,('%')''),/-,)(*)+./020122242**.144321c036632/023323576654458:<<867654432346535225676654564445456997655445543320.,++..--..1321021300/0/167830./1321248876322454665545875334676766688Q988;125636=>?=><=<>==<=;>;:9;;9:99:98=HQj^^dT>Z?HB*.2API{[Uh>LWOQTooA?@?@@?@?@A@A@A +@@AAABA@ABABBA@BABA@ABBABAA@@@AAA@AABBBA BBAAA@@?>?@?>?>>>==>=>=$>>>=>=>>>=>>===<=<<<===<===>=<===>=>=>=>=>?>>>???> +?===>>>==<=<==<<<>=<;===<;<<;<;;<; :<;;<;;:;;:9:9:99:9:99:998899899989998987 +667656665765566656654554543434434443343332333232323e222d2.c2111cbccc22ddccbccbaabbbccbcc```ababaa```a`a`^___^^]^&\^\\]^^^]]\]]\\[[\[[ZZZ[[\[]\ZZZY[[[ZYZYWXYYXYYXWVVXWXXWVXXVWVUVWWXWVU VVTUVTTTUTTSTSRQQQSRRRQSQRSRQQRQQQPPQPQQPQQQPPPOOPPNQPOONOOONOOONPONMN MMMNMNMONMNNMLMMLLMMMLKKLLLK JJKKKLKKKLJKKJKKJJJKJIIIJKJJJKJIIJIJmKKJJIJJJIJJNmvrmp=CD?=ulpsf\unWWHAOUUVTPSOUSRNLIKOMLMGI]DmzQQSNNYZXTBMXUUD886321-0,+:TTk>`L\=E?J2XU<**'++*, -+,,+-./0/0-,**)''&$$$%$$$#!## "&(3/0<6?C86<326-77340)BUfhRi\>G?yaI89BD`bBV?d]qi_wcX_biijKei?9418>AMmH.-Q6(8?SX-(;,-//148; !!! !!   U0051.2/,*++,,//1215!"89 !"!"#"!7535569> !"#%""#$&')+--,,* +,//-,.1.)(+*+,)('(''')--//,*,-,-+,,,)*,-,*+()--*(#()()'=4:"32@4-)&%(,,+,2@D%()+,,('&G?90-*'&)-+*)*)**))**%(++,))*-2>*;EE+56884,$!#%JH&*./,*(&%&%%(+-*%(+'%!%75644433220.-...--,--+*)''L')+,)'*OB<6588*&"!%&$$#%'(&%&(+/0-+,,,//4;92EK@,4DOQO NNJHJNU.048%! "&'%&&%$%'#&(*.11,,/-,--)(++)$::=AD=969?BF%I<30-.///010/1332465:?$3FD670.!,#*" 00/*'"#"#'*)+, ( 0-,#!'' $ +    +  #$#!$"#'!  %.0!/1-$ !%'$$'녙ZJx8)#҄рhG鼢z[KIHIC=;943635995  W         !  Q + +  + + +   +      # += + + + + + + + + + "!?VNnLA1B080! $1<^EBE,CNJLMc )/9 ICʅMÄPHIFH(-.*(KDFH?9GC75*'4<;=<9;9<<;9834867:79I7Yf[x@AA<;B>=:.6565*!22:!5$/%)14//! q"$ =>:2B:-3,TYD/&)*"#O7$0&?9FKL>8L?58;@AF/EE''AY)#2O,  + +    " + + +  + + +     + + E + +   + + + + A     + : #2,  + + + "*#! !  + ) %"'.%'/10/.+*,07"$}|}|}~}~}~}~ }}}~~}}}~}~}|}|}|}|}~}~}}}~~}~}~}~}}~}~}}~~}~}~}~~}~}~~}~}~~}~~~~}~~~~}~}~~~~~}~}~}~}~}~}~}}}~}~}|}~}~}~}|} ȿźӿöڎہĴƻȵτԵ͐˼<        8&Suȼñᚙݥ˯ܔZ    $#"""!"##$#"!"! "!"#"! !! !!! !  !!! !!!         @—»𳶙ԹΌܦشʧԾȬܤ􁖕̿󈋌ŹξɡׁpǴľ85552359<::==977;8:?@>:::<=7aTQS[bc]]]b]^becVPPOJGEFB@AHJMNHHGKPS2TXTRBFA4.-38:D...;JP@8+EP\1[VOOI9DJNQSST)(*/441060,.O/&:66WRQ(*D9A'>.,-3%**QLKJICEGCC>;80(/240+)'#!%$ !$"<724/-49845:A<7GD@*-)SI>738=H,,EA?EIJA:;4*WVIE<643/7=@CORX9<=>=<= <=<<<===>=<=>><=<==<=>>===>=>===>==>===?>==>=>=>=>>>==<<=<<<=>>>===>>==>==>>===>= >==>=>>>=>>= >==>=>==>>==<=>=>>=>?>=>>>=>=>>=>==>>=>=>?>>=>?>=>?>=>=>>?>?>?>>>=>==> +??>>??>>??> ??>>???>??>>?>?>??>??>>?>???>??>?>>???>?@?@?@???@?@@??@?@?@@@A@??@?@?A@A@A@ AAB@@AA@@@AA@A@A@A@ABAABBBA@ABABABBABABCBBCBCCABCBCCBCBBBC DCCDDDCDECDDCDEDEEDEDDDE +FEEFFEFFEEFEFFFEFGFEFEFGFGFGFFGGFGGFGGFGHHHGHGGGH +GGGHIIHHHIHIHHHIIJIHHIIJJJIIIJJJIIJJJKJKKKJJJKJKJKLLKKLKKLLLKLLLMMLLMMLLMLMNMNMMMNNONONOOOPOONOOOPPPOP&OPPPQPPQQQPPPQQRQSRRQQQRRQQQRRSSSQRSRRSTSTTTUSRRSSTSSTSST UTUUVVUWWVWVW#VWXWWXXWVWWXXXWVXXXWYWXXWWWYXXYXXWXYKXXXYYYXYYZ[ZZYZZYZZ[ZZZYZ[[YZ[UftZLOZ]WQOLKMKIPWVQLFDA@G(MI88C 85646679:;<;== !###$"""$#"##""##!! !B>;==@!#%"#"CB86;=77;>?@;>J&&((&*/,+*()'>2--,.467751/-033/+*(*++,)())+,,,*)+%..--./0,./+*/2446950-//130-032221//0278;9:862/2454345766754466764'55476467654551-+*,.12220.-*+---...0/0018421110024337:4//.-01321234553344422246565665456657798K!! "#:.-+29:==;:===<>@?=;;::8631369;:???>??>>===>=>>>===>=>??>=>= >=>===>=>==> +?>?>>?>>??>??>>>=>=<=<=<<=<===<<;<<<;;<;<<;::;:;;;:;:;:9:::;:9:::99::9::9 898878988788788877765676 55655665565565455434 +3433443344323232212,11cccdcbbccdddccbbcccbbbabcbaabaabaabaa__`_^_^__`_`_^^]]]^_^^^]]\\\]\[[\\\[Z YYZZZYYXXZZYXXWXWVWWXWVXVVVTUVUVUTSTSRSRSRSSRQPQPONONONOPNNPOOONNNMNMLMMNNMNMMMNNLM LLLKKLLKKL MMMLLLKKLLLKLKJJJKKKJIJIIJJJIJIJJJKKJJJQssvtw?AC@rrroonprqspYAGMLJQQROPPSTYWSTMOPNPTTXUSUPG9`\!5970--,-/04554433|31/.-,+*(())('((&&&%&)(()-023?==#" #!!'4j}]_ZObCSHb[`_}rA[jEWjhlkXnhYrl^j|efaT;:,>56Kq`L=070:7888;= !"#$%''('%'*++(()))((+,,*)&''+-,,,*)'('''(*,-...++..-,+-//-(''*)))++,+()*)'$<5'+622//,+)*,,/4=7?''),00((G=6.,,*&&-,C,-,)*++)&%&$"++((,.2F]D2.0231167# ! !#DG-9B'07852,$#$%IG$(-.-*'&''+-(')*(%""$2$34W3321///...//.-+,+**)+--,+)(&G7114::4)% :7<> "%'')+-..+++,..7?><6XDEGGGJQUSRSOJLQ[0338$"""#&&'+*'$$'%&()+-,'(+,.,()(*+'E:79AHHA?>DBBEIF<6540///-,-269;6437;=%<:4/$&! "0-$ +#*351*&""%)++,&0-,'%%#    +  + !!#($!)%('$ #&'"1/%$!$((+,!+W@6 +2kj†Ą0ʄτ Єх҅քY1d乲^FEII@86302105::4/)&# "&$ + + +       "   + + +  +       #   + + + + + + + 4AV3379k`A"CZ;0 7C.WT]rTl$ +/$s +1^Є&DŽ3ąÀSKMLO),-)FHIGFEFGEED7)-3428::89699==:;6gfijdfow|=>=>A?A;9;8.">;"!$'#"$ ,#&&%( "$.4"%(&! x  + AVAK5?=6`>'+#/)*6E=$7@/5=;AB5C>8IA8ESBB;,,DZ;2!:?  + + + +  + J + +     + + + + + +  + +   C       &4"H   + ! + + + O"#"  + %,)%!4'*+,-/465573./4;"!$}|}~}~}~} ~~}}}~~}}}~}~}|}|}|}|||}}}|~~}~}~}~}}~}~}~}}~~}~}~}~}~}~~}~}~}~~~~~~}~}~~}~~~}~}~~~}}~}~}~}~}}~~~}~}||}}}~}~}~}||}||}|} ÿǀ֎մͻϹ䗊ɾف°D       $Y뇐Ŀ翵ƅ䕵ނŀߓ^I +     #$###"#""##"!"! !"""!"""!!!"""!  ! !! ! !   !!   +!#Qӭ¹ɪſ͜ҳĂԮڼ̩뚪൛􍆗¾셔żն펣qȪ񂄁6659515<=86;><:777:@A?A=9;?CB=8:7dXSSX\^ZQQX[ZYZSHECCDB@CA@AEIHJDDEJVX[8AQ?994/0034<'/-3:mAG<'-@AI[XSFA;0:JP*+P**%&,43/12,.)2&62<_S)))*@=I)3,18B-*CEM)KECBBAB<3c/.039<,(*"$*# <74950.46-.7?:57673<68GIG?;@:;:1A00IFEFGDCJ)>7S?64330/*;>GH13/23>a;;;<<;<<;<<;< ;<;=<<;;<<<=<>=<<=<=<=<=<<<==<==<<==<<<==<==<=<=<=<=>=>>>=>===>==>==>>>===>>>=>=>>=>>>=>=>>===>>=>=>>=>>>==>>>===>===>= >==>=>==<=>>==>=>=>= +>?>==>>===>=>==>>>?>=>==>?>?>?>??>??>>?> =>?>>???>?>?>?>==>>>?>>?>>>=>>==?>=> ?>>>??>?>??>?>>?>?>???>>?>??>@?>?@@>>?>???>???@@@? @???@@@???@@?@@??@?@??@AA@?@@A?@@A@@?@ +?@A?@@??@?@A@A@A@AA@@A@AA@ABAABA@ACB@AAABBB@BBBCBCBABBABCBBBABABCBC)DCBCBCCDCCCDCDDDCDDCBCDDDCDEEDDCCDBCCDDDCDEDE FEFEGFGFEFGGGFFFEFFGGFGGFFGGFFFGGGFGGGIGGHGHGHGGGHGHHIHHGIHHIJI JIIIJIIHIJKLLKLLKJKLKMLKLKLMLLLMMNMLMMMLMMNMNOPMNO NOOOPPPOPOOPOOQOQPPQPPQQQPQQQRRQRRSRQRRRSSRSSSRSRRRSTTSSTSSRSSTUTTUTTUUTUTUTUUUVWXW%VWWWVXWWXYXWVVWVWWXWXXXWWXXXYXXYXXYYWYZZYYYZYYZY[[[Z[[Z[Z[Z[[ZYZY\\{z[RW]ZUTRONONKMKF@><8=II79$%83555447;9<9;<;=<< !!#"#""#"#$###$"""##" BA=;;>>!#%&#"#BCA>@C#CCDA=97789:ADE$GCH)*('L)1/-)+))(H<014220.,)().0w1-)'()'%%&$##&'))*)*+.//111220-+*+*+--.,/153268752./330/0001220/.1126679967:81/145335:;9887315643242243444675666436531.-/1320/,(*,//.-.-/02434337;:6310/--.01/-.2221223h4235666444688648867748"$$$#""#9/.--:=A<:;=;;9=@??=<842239>=<979CRSPbQTeK7.6;9q<,.4:EuL?>?>?=?>>>=>>?>>?> ???>??>>>=<<<===>?>?>>>==>=>=>===>?@>???> =?>=>>>?>=>>=<<= <=>==<<<==<=<=<;;;<; :::;:;:;;:;:;:9 +::;;:::999:9::9:9::9879876565566565434 33443343432 d22ccd22dccd(eedcbdbbbcabbabb`bbbca`aaa_^^_`_^__^___`_^]^]\]^]\]\]][\\\]\\[Z[ \\[ZZYZ[ZYYZYXYYYXYWWXXXWXXXWXVWVWVVUVUUUVUUVTUUTSTURSRTRSSRQRRRQRQQPOPPOPOPO!MOOONPPOPPPOONNOONMNNNMNNNMMMNMMNMNNMML*KMMLLMMLKLMMLLMLKJKKLLKKLLKKJKLKJJJKKJJKJIJKKJIIKLKJJJKKJJIIJJJIJIIJKIJJKKIUnoxy=>@weh;wroprttkjjmeTTLGJQSVX`c_WLNNMPPOQPUQUXSTY@98b(JD8467:AB;;>>HK> !#%$#$%%%/,'0IVPOVYTAB3=,18:]|HnR+UVntUOeldonvGtVfC@4(!I/:<@BD>89>@@CF=52-+,++.--.288;5359@A<&)1! >(*!(74.""&&$5.  !"'"     )$ ! "$!$!" "!"$+ (+ /׶L9`7- FՄ܅݄Dcݡ_HFGB;963342130+%"&'    ~     $  + + +  +     L    7 + + + + n #@H>Q?FQgc1'!(.T$!(,.M<7EATB1 +( -DŽɀ»VMNP()+K?@%KGEGHJKB??DB884RU26=<<>DFE?6dhjfq==;>>=>=A;?A<9:%$$@0)" !$(,&'+*,(&&"()" ($ +Z  5317h6/ 4B F4!1/DE0/>DBJGM/G4Cl" &@=MI"'     + + +  + +  3   +  + + 5 +     +  +     + + "*   +  ?  +   $/("!-+0//--0497<3,1<=; ##}|}~}~~}~}}}~~}}~}}}~}~~}}}~}|}|}|}|~~}~}~}~}~}~}}}~}~}}~}~}~}~~}~}~~}}~~~~}~}~}~}~~}}~~~~}~}~}~~}~~}}~}~}~}}~~}~}|}}}~}~~}}~}||}}}|}|} û䜌ѷ􃅄ʼ}ӓϽɿɼѷ᱓u> +    +      +#'ľþļgXȶʔﷲ׵켯äxa     +#"####"!"""###"#"!"!"!  ! !! ! !""  ! !    Y֯Ớ끏ͥǼˬ¶愑˚އ㎶ɤ݆ͣ–Ʒ󍜎þõƿѥօǭ43476139;999;;98<;9<<;;:=AAB><;;97:;3YOPRWYYXVX\_ab[UKIDA@>;;==@CEGEELU]@/3EN;64523431@/30TJDHD8'&3>P]ZPEOF>K*+,QP'J=C*0YK+,**6*76C5,)((+O3<'C*-18$PK'*T))GB=<;51--14:<1+..&$&!,3310'$-10/--X1MTJB@A?<5-5>>:?KPB@96=G?Q/+'KIN,4?)*+011129@?@Z]>8<45tep;<;;<<<=<=<<;;;<<<;;<<===< =<<<===<=<===<=<==<<===<<=<<<=<=<==>===<==>===>>=>=>===>=>===>=>?>>=>>==>==>>=>>=>>=>=<<=>=>=>=>>>=>==>>=>==>=>= +>?>==>>===>=>==>=>=>=>?>?> =>>>?>>??>=>?>=>>???>>?>>>?>>?>???>>>?>?>?>?@?>??>???>>?>>???>>>=>??@?>?@?>>>?>>?>??@?@?>?>>?>?>?@?>?@???>?@?@A@??@??@?A@??@A@A@@@A@A@AA@@@A@AA@@AAABBA@A@ABABBABAABBABABBAABABABABCBABCCCBCCBCCBCBCCCDDCDDBCDCDCCDDDCCDCDCD EDDDEDFDDE DEFFEEFFFEFEEFGGFGFGFFFGGGFGGGFFFGHGHHGGHGHGHIH IHHHIIIJJIIHIJIJKJJKKJ +KKJKKKLKKLKLKKLKKLLLKKKLMLLLMLLLMNMMLLMNM NNNMMMNMMMNNMNONOONOPPOPOPQPOPOPQRQQQRQR SSSRRRTSSSRSTSTUTTUUVVVUVWVUUTVWVUVWVWVVVW VWWXWVWWXWWVWXYZYZYZYZZZYZYY[[YZZZ[[ZYZ[[[\\\[[Z[ZZZYY[]Fb_\^]VRSUPQPKFEGIIC>:528>>?@@?A"#$$##"@!@@BDEEAABCA::;>ACDBC#G$&)(O+//,+(LG(SJO;+./,+('('*/1*&(*)%$'''%"%)++*(*/-00/10.-+)+++)(()),/025445776422422124455220131/0//14668953253787888742/0/223433100112357765466442/././112442.+*,..//.///01101212355334654577754321.--.0220112312112562256887789789876667667P9 "$&'%#"?1,-*(8@>9:;9;<=?@C@>8//5::;9884277|vRJfh}^9EQbeXQg:39:840W\flA?@@@?@?@?@@@A6@A@@AAABBBAAABBBCCBBBAABCBAAABB@AABBAABABABABBCBAABABABCBABABA@@?@???@??@@?>=>?>>>?==>?@?>>==>=<=>>>=>>?>=>>=>==>?@?>==>>?>>>=>>><==>>=>=>===>=><=<<=<;;<<;::;:;;;:;: +9:9:::;;:;:9:;::98999:99876677656 +55666565565654445454343343344322232f222eded22ccbdfddcdcbccbcbbaaabaaba`__``_```^___^]^^]^]\]]\]\\\]]]^\[Z[Z[\\[ZYZYYZYYXYZYYXXYXWYWWXXXWWVVVWVVVWUVUUVUTSTTSTSTSSRRQRQSRRQRQPQRQPPQQPQPOPOQPOOPOQOOOPOPOPPONNNONMNNNMNNNMNMNNMMMLMMLLMLLMLMLKLLLKKLKKLLKKLKKJJKKLKKJKJKLKLJIJIJJJIJKKHb`ivysrg]dm=?smpxzwqheiqolZJA}GLLNUV[^YPMJKLPSQQRQQPRIKUGJTCI@?S8:V==875115DSR2;BMPMH658TRI=1///268<>?><8542,),124555200-././.-.-,-./0234255688899:;;= !#%''$6:#,*&HIYP]}EF39)19AGF7403/4?@! "%'()++*++(*(''(*++(%##$%%$&((()*))+,,++,/1221./0../10.'"""&))*+)('$!94"((5.--0/067770)+,2='0)@952/,,++**,,.220--.,++)(,+& !&),?C2-,-,,-26786"!#"" .G-2;3.-**&%&L&(,,++*'&%%&(s&#%&&%&(()+--% "$##".44431010..-..,--../.--,++*'%IC>;1(*,,'%'& 9 "" "&),.+(''&+1<>93.XSOTTPMKLOVVQWRKS^1]168"!"%$""&'&&'((('*)'*)))(*---+**)'&)+%@9:>?@>><@BHKJD?960,++)+,,046765;@D3"!./ +&%)( -74*!%&% ,#~"+& &(*  + + *23)%$%%$",1%# %"#& #!"58 "#]䖅bA 0$3dńƄǀ%݄"_؊nWMMH>6785540--//.)"      \ $$ '"$  +  + + +   +         +  + + + + +  8!YG9j:ZT[D)8@NK>7C(%*+**'EeRd摚(* +g * ׄ$ф\ņĀ÷MLMOKH@:?D'(IDGMNLG?=?FFE:1-S/578;;@B?:966o9=@??@>>=>57?13:,-('1 3&'%%&6$$&385"$.2.)&# n +  !+V;K  +!),7*E 6(7B11AFD;J.NH?BJ,"I2JK<0   + + +   +   + + + +    +   ?  +     C  +  +  + !   + +   +E    %$ 443772/-038626303:9$&}|}~} ~~~}}~}}}~~}}~}~}}}~}~}}~~}~~}|{| }}}|||}}|}|}~}~}~}~}~}~}~}~}}~}}~~~}~}~~}~~~~~}~}~}~}}}~~~}~~~~~}~}~}~}~}~}~}~}~}|}|}|}}} ſ»ո邈΀兎숃ýɸϷǫʾ÷Òt5   +    'U+ں؅׀ϻƿؒɯ۔۾|"  #"!"###""#"""!"#"!"#"!"#"!!! !""!!"!" !! ! """!! !!           "^⺻،ںŲ󃑖ºǿ򀇒ꀅ؃ȗɃȥĈ؂ÿɆs̭23453_05879889<9;;898:9=AB=<89>?<9::4XNIOYWZZUXX[WSUSMJGFA@><2A'@6#***@,4~/F7,)MNLL<7%-9+1:BCA-,*+TJAB;561).9EC9./.-*%!,&*!"-:?<832-/4N]QKLJGE>0207:>FLXEB<9;@N5>9))-163;E&.2368;?<=M`VA)75ipy<;<<=<=<;<<<==<===<==<<<=<=<===<=<<;=<=>=<=<<=<=<=<==<===<<<>=<<<=>===>=>=>=<<==>=>>=>=>=>==>===>=<=>=>=>=>=>>><>>=>?>?>==??===<=>=>>>=>=>>?>===>>==>>=>=<=>==>>=>>==>=>=> ?>>=>>?>>==>=>==>>?>=>>?>?>?>>?>>>??>==?@>>>=>???>=>?>=>??>=>?>??>???>???>???>?>>??>?>?>?>??>?>>>?>>?>?>?>>???@@?>>?>>>?>? >?@???>?@@@>?@?@?@??@@@??@??@??@@?@? @@A@@?@@@AA@?@@@AA@?@?@A@@@AA@A@@@ABABAA@ABBA@AAAB@@AAABAABABBBABAABBABCBABCBCCBCBCDCBCBBCBCDDCDBDEDCDEDDECCDEEEDEEEDEEDEFE DEEEFFEFEFEEEFEEEFEFFEF +EFFGFGGGFFGHIHGHIJHIGHIIIHHHIIHHIIJJIIJIIIJKKJIJJKJIJJKLKJJLKKKLKKLKKKLLMLLKLKLLMNNM LMMLLKMMLLLNMNNLNNNMNMMNONOOONOONOOOPOOPPOOOPOPPQPPOPQPPQQPQQPQRQRRQR QQRQSTRRTSRTTSRTTSSSTSSUTSSTTUVVUUVUUVUVUVUVWV9WVWVVVWXXVWWXWXXXWWXWXWWWVWXXVWXWXYYXXXYZYZZYZZYZYYZ[[Y[[Z[Z[Z [[[Z\[\[[Z\]UV][ilaSRXVWSNG?DIID@><6239:4289630444542236::;<= !##$'$"!"#"!!"""! !@>"AB >BF#$#C""@!CB>;>E@?BA=><;=CECD%)))(()-250+-)MN*,+'NN6)&&'((*+),.041/+)*,,,(**,...,,/-/,(*(F)+*+-.0-,/01222122233365577565586634310/245543367743135687543101122212121223566448653/-.0/0354/-.043430./013443223464536620 1///0223443213~12345545478898756887888"""#"">),62(.;89;=;;>??<5488856;=61//.025GxgrSt}ubhsVLXRY7779987679CfvD?@@@?@AAA@?AA@AA@A@@@A @AA@AA@@AABABABABBABBABBAABBBABAABAABCBBABBA@AABCACBB@?@?@@?>?>?>>>@>?>?>???@@???>==>>===<=>=>=>>=>?>??>>?@@?@?@?>>?>?>=>>==>===>=>>=>===<<=<=>==<=<;<;:;:99::<:;;::;;:; +<<:;;:9:;;:99::9:::9::999:899987677768876 566655566565545454544543232eeddd2c22cbdfcbcdbc6bdaabaa``a`__`a``_^^__`^_^__^\]]]^^]^]]]\]]_]\]\\\[[\\[Z\[\\[ZYY[ZYZYZYXYXWWXXXYYXXWVWWVVVWWVUVWVTUUTUUTTUUUTTSTSTTS RQQRSRSQRQRQRQRPQQPPPQPQPPQPOOPONNONONOONONMNNMMMNONNM ONMMLLMMLMMMLMLKLLKKLKKLLKKKLKJKKKJJJK JJJKJKJKKJIJIJIJJIKLKKJJKIeTfoql[_cgoz?tpt>>>xmgghmukSZGpGIEJMLNLMLIOPMMONLNL=JAfO=`KK@9.(&%,NdAPOSSTWPLA.%"DCA=888=??A??A@A@DD@:/+'()-333551..000//0/..,.21453215h47899:< "%)(%415<'(%CBA<>D.--$/I'%QpPOMER#MFDN][cmixGsf~[QVjGK>$F)nC?> ! 9 !!!"!!!  !"!"! !!"#$$$%$%#!80.,-/25536646:; "$&(%"  "$%%##""!  ! !$''),,+,,-*&%'&#$%$!!$%( '&(*('''(+-,-00222/*)+.0..+$$$((()'&'"835&043>3234010/0970.49@),"60--,++)()*+-//0/-/-++*+*),)% #+9?73110.-.478:0! !"%")?.90,,+($%&(('+/.)%%&u'''&(*(''*,/0/.,%%'%$$+66422211//..,)*,..,-.+*)'&LFCA@4+*)&$$(&B7: !">>##$#&+...09D:,+'FEMVXVPLKOV^VWZSJLT^\^a4!"###B!$&&'&%'(')*&'')(*..*(&',-*()*&?749A?@@=@ACA==>8421,*)*,.3468:08/B.2/76674866moqx=><<=u<:d;7+7)>/'>,+'#.,$#&15>B@K.J?U=757$)"G,)$*:8    +   + +  + +   + + + + ! + +  H  +    + +    + +! !1  + &+#*+27850./28=6894,-4;9=>!}|}|}~}~}~}}~}~}~}~}|}|}||}~~}~}}~}}~~}}}~~~}~~}~}~}}~~~}}~}~}~}}~}~~}~~}~~~~}~}~}~}~} ~~~~~~~}~~~}~}~}~}~}~}~}~}|}|}|} ĸڍȫо˟かȼѺͰܑϟѫ7 +  #Lö;ż鄳ଫ逇Ԙ¹* +  +"####"#""!"#"#" !!"!!"""!!!"!"! !"!"! !    $dãҭΏǗ⁃„ح򁝜􊳴쇏ÿδʆjȥ1012c^]c68997788::88<99=?;:977:;;::85ZOLMSUYaYRVUTQTSKHC@>:;<>??DHLR\:TfcaXTPJS5+.--220377.27>GG32ADU2L#4,*RIFII9D,(715AFG*0.,RPB75.(,29==<6236:3# 0*#-5@%)...*)PS-.,*PPH><,.2.02=DDA@A<KC++0,(,&+/028=;;?>QTXTD092`fE=<;;;<;<;<=<;<<<=<= <<=<<==<<==<=<<<==<<===<<=<=>===>=>=>=>=>=>=>=>==>===>==>?>==>=>>===>>==<==>>==>=>>=> ==>>=>=>=>?>===>=>?>==>>>=>=> =>=>???>?>?>>=>==>>?>>?>=>?>??>?>==>?> ???>>?>>?>???>>?>?>??>>? >>=>??>>???>?>??>>>? +>>?>??>>>@?>???>???>>??>>?@?@?>@?@??@?@?@@?@?@@@?@???@?@@@?@ ??>@??@@A@AA@@??@A@A@A@@A@ A@AA@@@AABAABAA@@AABBAB@BBAABBBAABBABCBCBCBCBBCBCDDCBBCBCDCCDCBCDCCCDCCCDDEDDDCCD +EDEDDDCDDDEDDEFFFEFEEEFEFFEFEEFEFGFFGHGHGGHGHGHIIHIHGHI JJIHIJIJJIJKJJJKJK +LLKLLLMLLMLKLMLLMLMMNMMMN ONMMONNNMNONNOOONPNNOPOOPPPOPQQRQPRRQP +QPRRRQQRRQR QQRQSSQRRSTRSRRTTSTUUUVVUVWVUUV%WXWVWWWXWWWVVWWXXXWXXWXWWWVXXXYXWYXYXYXYZZ[Z[ZYZZZYZYZ[ZZZ[[[\[Z[[Z[[[\[\[\\ukao7Na740ZQNEFIIGGHA:33444--<;721024311377789:= !#&&$##""#!!"!!!AA!!""! ""@AC#$"DE#@?A@?@@<=?BBDB<;>@@BJ&'()('),13.,-,(&(+*KC#A/.('-,.0247::73245300,+,.10-+,-.0/.N,++)*))*,,-//22./11231341/,--,-,,.-./124330124333555433232232211122332112100.0133346642/---//0120-../0343321101453015867885125432000//1012214564345 778764344]:9::999656## <;;4./-*18=:9==:8544246:9830/.+,,)&'*IBfkhea{?AA@@@A@A@AAA@ABAABBAABABABCBBABABBBCCBBCBBBCBBABCDDCCCBABCBCBAA@?@?@AA@A@?>>>???>>>?>???>?>?@???>>?>==>=>==>?>?>? @???@@??>? >>?>=>>>=>=>>>=>= <==<<==>===<;<;<;:;::;;: ;::;:;;;<;:::;:;:99:::989876766676544455434323332de2e222dc2dc&ddccbcbbccbaa``aba``a`_`a`_^^__``_``^_^]]\]\ ]\\\]\\]\\[Z[Z[[ZZ[[ZZZ[[ZYZYYYZYZYXYXXXYZZYYXWWVVXVWWVVUVWVUVUUTUTTU TSTTTSTTTSRSRSRSRQRRRQRRQRRRQPQPPOPQPOPPONNPOPOONNNONMNNMMMNNMMNMMMNMLLLKKLKKLKLLK +LLLKKLKKKLK JKKKJJKKLKJKJIJIJILJJKKJKJKJg`onaSdkik<=t;;v<{yupjhgdXOZRFMULOKGHGHIIMJKMNMIOPKTgIEI%G>EQVa6>NRHJ;4.1FMJ@??ABCH&#'4i>2/10,231/1/.--...-,+-035520/1243356789:=D&)*'+'."!!"BABC<4,'0HRwa~fM^h,(6!.///15;? 2 !"  !  !"""! ;:6322//46559:65: !$')(%" 3347 $'(*+,,--+'&%$$$&%%%$$%&'')*)'&&'(**,,-/1000-,-{.00.-,&"%'()*('&!<65 18>5#343235:!$$ 35@@ ?5/..,,++*)*+-+-,--/.,+,,+*))()&"9KC89@B<8735662'$% (&+<*83//,(&'')++-,)&$#$&%''()*+,.1000/,+(%$%%343U10,,+**(''(*,+,+''(KGBCD?.,,&?!$$!@;; "%>459?#'+./2681+NN)*QMV[XSMMOZ3474[MLQVUY^1! !"C?>C&((&%$&')*(')('*+(('%#&*)**)'A868=>BG@@?84.,+((*/127;=>C,AKHD<82)& + +"(&.$  '+'* #!#'%  +  $&)*'! &%! !()!*#!$312/%!Jt!%+$ք3ʄ.Ą+Å „gPIF:3<@>@%&I&&K'ONKGA?=90+21+073765534d56lotqu<:;;;:6<;5CO2VL-I064"-8M+FJI+E( #   + +    "    + +  +   +    0 +  + +  + +?  "   + + '  +  U%" "$!   "!11518:961.18!#%#;//1659?!}|}|}~}~}~}~}~}~}|}|}|}||~ +~}}}~}}~~~}~}~ }}}~~~}}~}~}}~}~} ~~~~}~~~}~}~}~}~}~~ +~~}~~~~~~}~}~}~}~}~}~}~}~}~}|}|}|}|}||}}|}|} Ƚ惠øŬ섐Љƺȗ凎֧˹ʲ񃍞ܐ8   + +   +  + e(邌րa􁅇ԲܿǾϚдś½c +  ## ###"!###"#"#"!""#""!!!" !! !"""!!""!"! """##!! ! !! !   !    %cdz󃅈ހIJ®˼Ŏܕ񄂂ɴ씁を㑍󂊎㉡Ŀ厓Ħҁڼ䁖40]32[\2:::87898:>;79::9:;;9567;:9885^PMPMPY^]V[ZVUYXQGCBA>=<@?AMQ^4N,8 $$!.'(#%+*(&*,++,-,+(PI426@?300/>IFDC?9A^4?JTF1(-)%JP-.3;<<:9DaiMNNE<6.eqT><<<;;;<;<=<=<===<==<=>=<==<<<==>=><<=>=><<<===<=>===<>= >>==<===>=<=><=>=>=<=>==>=>?>==>>>=>?>?>>=>==>>>=>=>=>=>>>==>??>>=>==>=>>>?>>=>??===>=>?>>?>??>>>?>>>?>>>=>?>??>>>=>?>>???>>??>=>?>>>?>>=>>=>>?>>?>=>???>?>>=>?>>?>>?>??>??>=>?>??@>>>?>?>???>?>>??>?>?>?>? @??>>?>>>?>?>???@@?@?@??@??@???@? @?@??@AA@?@?@?@A@?@??@A@A@A@? >?A@@@?@A@AAA@@@ABA@@ABAA@AABAABABAAABABABAABABAB!CCCBBCCBCCBACBCCCBBCBCCCBBCCCDCBBCDCDCDED CCCDCCDCCDEDEEEDDEFEDEDDDEEEFFFEFEEEFEDFEEFEFGFFGGFFFGGFGFGGFFGHGFGHGGGHGHIHI,JIIJIJIIIJJJIIIJLKJJIJJKKKLLKLKLKKLLMKLMLLLMLKLKKLMNNMLMNOOONONPPOOOPOPQPOOPOPPPQPPPO +POPPQQPQQQPQQQRQQRSRSRRSQRRSSRSTSRSSSRTSTUUUTTUVUUUTTVVUVVWVUUUVWVWVVVWVWXXXWXWWVWVWXXXWXXW XXXWXYZZZY ZYYZXZZYYZ1[ZY[Z[Z[[[\[ZZ\[\[[[\\\[[\\\[[\]`QdU178750[QIJJID:853332,/>=;73340/2367788E"@?B@ECBI&''()))'%)-+,,,*'%&'HIKFC:.223899>72211.,.* +,,./044/*,/2//-*..-12:10200-++*,---0/.,--,-,,-+./1012221012112332232100010120133138444210.**,///0/011/-/.,.12652122210.-254449<73364543433142243454555655565656514X<:9887669#" ?7;8(.9;9;<=<2++05<:9:9662///-*++(*,2Kavy3X76MWh9454754787AJa@@A +BAA@?AAABABA +BAABACCBBAB ABCCCBBBAB CCBBBCCBBCBABCCBCBCBBDDDCBCBABCCCBCABA@AA@?@@?@@A@AAA@??@???>>???>>???>>?>??@?@?>>>==>?>??>?>>>?>?>?>?@?@?@>>>?>>=>>???>??>>==>>>=>>>=<=<= ?>===<<=<<=<;<; ::;;;<;;;:;:;:;:9::99:9:9876688767655665454455454344343e3332122eeddf2debbccd +bbbccbaba`a`abaaa`_``a`_`^]^]_^]]]^^^]%[]\\]]^]]\[[Z[[[\[[Z[[[Z[ZZYYYZZZYYYXZYYXXXWX%WWXWXWWVVWWVVUUVVUVUUVVVUUUTSSTTUTTSTSRSRQRSRRQPQQPQRPQRQQQPQPPO +PONOPONOOONMNNMMNNMLLNMNMLMMMNNMMLLM KLLKLLLKLLKKLKLLKJKKLLLKJJJIJJJK LLKKKJIJKJKJKJKKLLKiSeb`gfnhjuw<>3EKG+4D`aVI5P:5MLY87N9213679<=;875899:<=>?DC*IE2- +&%+/.,+*(')+-..--13341.-.023445687;>BG(()%2*.477>?@><==:43049QXM<15jWaqnzKHBaOMSOY7&1UKJvigP3?(+133=.0SIC=HIHB@:420---./009><$9  5/7 !"!!  ! ;;877:72562148658!  "! ,/0138 !"%(*-...-*''$$&$&&%%%#$$$%&''((&%%%')*+-,,-,,-./10.-+&6 &,+'$ ;7:%778/>6341. $#%%)<+95,.-)&((&*.(('&'&&%%%'''(*,,-,+-...+-//..)%##"132210+(*++**(&'()))*E)LGGEDJI;.-+$#%D?@C?>!DC?822116:D'*/13.*12/VZZONV0cZMEP/:<:4\IHOUSTY`#<""=>#*)'&$%&'),)'('''())&#$#()()*(E9899CA;3/0.,**/16=AL(-=EAA027$ +    "*$ %) )>#"&& #(!! +   +  =)&" ($$$! 2!&+#!"&=A+,+'"Qd 'J(5- +r¿̄΄Uۄ#.ߟ^E%)(*)#A7/13311/'    ?   ! $#  +    +       +   + +  + + V4Qq[P&A$'29885[NPIJOTY[UQVUSVUOMFB@CD>?DP`i=&E@?L@@*/LMC8/&7:/?=;:56A#29-A./DZ,3.JGK++QL,+F0/=N),-/0SF?9:9)#^(#-+1:@GPQ1%(,#1% 1"&(*+**,+*(+.)$?>::FP-F344+:B>BE===??>=>>=>>==>=<=<=<==>= +<<===<==><=>===>>=>=>??>>= >>>=>=>>>===>?>=>===>>=> =>=>==>==>>>?>==?>=>=>?>?>>>=>?>>=>&=>??>???>??>>??>>???>?>?>=>=>>>??==>>?>??>?>?>???>???>?>?>???>>?>?>?>>>?> ?>??>>>?>>>?>>>???>?>?>?>>>?@??@???@???>???>?>??>? >?@@??>??@?>?@@???@@@?@@?@??@?@?@?@?@A@@??@?@@A@A@AA@A@AA@BAAABABABABABABABABABABBABCCCBCCBCCBCBCBCDBBC DCDCDDCCDEBCDEDDCD CCCDCDCCCDEEDEDDE +DDDEEFFEEDEFEFEFGGFFFGGFGFGHHHGHGGGH IHGHHGGIHIHIHIIHJIIJJKJKJIJJKJLJKKKLJKLKLMLMLMNONONNMNNNOPPOPO PQQQPPOOOP QQPPQPPQPOQQPQR SRRRQRRSRSRSTSSTUTTUTUVVUVWVWVUVVWXYXWVWVWWYWXXXWYXXXYXYZZYYZYYZ[YYZYYZ[\[[\\[[\\.\[Z[\E[[[\\`[|z\d7797554ULLLMNOLF=76767+#;A775131/045569;<=@!&%"!""!"###"""#"BC"##"!B"""!!!@>@C@<:9>C#"FH%%%DF$%&&'()(%H'-,--,*'J('NH@@?:4,/8@B=;<>;763./0.,+,-/6NaBZ^i]7;J.>@6444678:?BI[ajA BA@AAABABAABABABCBABCBCBCBCBBCCBBBCBBCCD CCBBCBBBCBCCBCBCBBA@ A@@@AA@???@?>?>???>??@?>??>=>?>>>???>?>>?>>>?>>?@?@@?>>=>?>??>=>>>===>>=>>==>==>>===<<<=<;<;<<;<;:;:;;;<;::;;;:9:99:989:9 89989888778876776676555665654545434333230223332223feeedd23edeedccddcbbcccbbabccabb`aababba `_`a`__```a^_^^^_^]^^]]]^^]]\]\]\]\\[\[Z[YYZZYXXXYXXWVVWWXWVUVUVU VVTTTUTSTTTSRSRSRRQQQRQRSRRQQQPQQRQPQPOPONONNO NNONMNMMMNMNMLLMMMLMLKLLKLKLKJKJ +KJKKJJJIJIJKJJJKJKKJKLLLJeSg^i^`kdfotu?;vnlrnok`VOKLLJNSQNOPIFJNNKPOKQKOPKMMRYY]J^k[23=?==CEFA==;98742?ul`eCK/FL}OZozfSXW7Z3HZZg:b7G+(6iUB ??E4L@.3=;:952.,,-0122..06;:!$! 50 !!""!7 !!"#"""!:; >;5202647201213:=!#$(*,..//-('%$%%$$" "##$$%%&'())('%''')''+,,/.-,)$48"%#""> )274'<20246839'./-#97,&(*,-.++**..,))('''&%&))()()'((&(,7*.*&H>54630.,'&%*1&/30--,(%'()(++))(&%&'&%y&&'+,,-.//-./..*)+--*&%!$$1./5,320/.,,-,-(%('&'&'&&KHFEDEC@0''%$DBAADC@7>>:;6/1334:AHLW+./3520./YQOV22XLGM0>@63ZLHOXRW\1#8!$?9"(&$##%%')('&&'))'''%%$$(+(()'D:;57;AGH@<@A973.-..*.5>LQ-49;> :&! + +  ! #$#  ! #3=%!"$!$*   +   +   R $%!$% ", ##!$%!) !+34.)*--(?f˗> *2! 3t!n¿Ƅ̈́Є΀2 +]U*)+)(&%:545553.'   J      &"  )     + + + +      )    +& + + + + + +o + 0<2Gk+ׅ8ʄPƅŀñHB:@?>B>@FIK(&JDDHEC?70+&'(&*/1/253246759:9>8=BBD2BK;" # 1"#=-+2,0U&9:.#+! !%HAN17+C2!,$$'+13%w >$6$0<;B(@'0"J5!%$*" + + + + +   +        +  + +  + + +   @   +  + +   + +   0      '  +  P """ !!   $'2"#!8337!!7/,/)+$#BEHJMYb2J]543PT>:6''*,5/73-+,,)2>@B7:.7M@*4V>A?=5-?<*19<324(6<7N1,5O-41FIIM,(&)--A2B;=M7=BCD=;:3,(EHHW359>SIGJGIIGJ>TYstk<<<=<<=<===< ;<<===<=<=>=>?>=<=>=>><=<=>=<<=<=>===>=>==>>=>==>?>>>==>?>>=>>=>===>=?>?>>?>=>>=>>==>=>?>>=>==>>>?>?> +???>==>>>=>==?>>??>??>???>>??>>??>???>?>?>?>??@?>?>>?>???>???> +?>>?>?@?>?>?>??>>>?> ?>???>?>>???>?>?>>>? >???@?>?>>?@?>>?>>?>?@?>>>?>?@?@?@?@??@?@? @???@@@?@@@??@? >?@?@??@@?@@A@A@@@??@A@A BAABBAA@A@ABABAA@ABBA@ABA +BAABBAAABBA@AAABAABABBAAABBACBABBBCBCBBBCCBCBBBCBBCBBCBCDCDDDCCCDDCCDDCDDDCDBCDCCD CDEEEDCDCDCCCDED FDEFEEEDEEEFEEEFFFEFFEFEEFGFGFGFFHFGGGFGGFGGGFGFGGHGHGGHHIH,IGHHHGHIIHIHIHIIHIIIJJIIIJIIJJJIJKJIJIJIJJKKJIJKLKLKLLMMLMMLLNMLLMLMLMMNNLLMMNON ONMOONOONOOPONPPOOPPOOPPOOPOOQQPOQRQPRQQQPQPRRRQRSRSTTRRSSSTSTTSSTSTUVUUTTUTTUTVTUVVVUUVWVUWXXYXWWXWXWXYWWXXY ZYXYYYXXYXWYZ +YZZ[\[ZYZZ[\[[]\[\[\\[\A[[\[\\\_NT]320130/.SPPQPPLE?94:@8'*9586/02334258:;;<@!$$#A@"#"$$"#$##C@!"##"C""!"?AC>C"C$(*)%"#$FI&''%IJJ,/-/.-+LL)PNH?CJMC2.4435439:93//0..-/110/100011100.++***,-...,-+),,**+-.---++,...//00/.,-.../..-0:>832//020/11102221440U/0021121/..//.-,.10110...-015320221333/+**,,././135743410256665642111423442233343454c34469567887769!"!!%@37<=?AB=739==>==<@!B734+.3/,/,.0/;@;PLI|`=l(.KF75358@?@?>???>?@??>???@?@@@?@@@??>?>>>?>>?>?>??>?@@@A@AA@A@?@@?@??>?>?>>=>>=>===>>>=>=<=<;< ;=;;;<<;<;:;<;;;::;;;:::;;: +;:999:9::9:998988787887676656665666556654455545454434445444343434332233g3e222eddedfebcb1cdcccdcbbbabbcba `_a``a__`a`_`a`]^__^^__^]]^]]]\]\]]]\]\]\[\[\[Z [[\[ZZYZZYYZYZYZYXXYXWWWXVVWWWVVWVVUVUUVVVWWVU"TUTUUTTTRRRSTTSSTSTSSTTSSTRQRQRQQRQ +RRRQPQQPPOPOPOPO NNNOONNOOPPO&NNONMNNNMNOMNNNLLMMMLLMLLLMLMMMLMLMLJKLMLKKLLLKL KLKLKJJIKJJKJKKJKJJIJJJKJJJKJJJKLLKiZW]hGllddoos<=tklg^XVPRROUSMPKKJLOROOPOLMOOPKMMOZ\[dlR*57831.-.3FxNES[^GLKB42112357;<998:;:;:89;#!?:3* '+*)'$""E#%')*-./1469=@C%)'<1:==97 @?@>>>;5/+++/Lt|w!"+Z|wSKhob[?F!MZ?\d%"-1P@HI.$'&''),--.*),-41%%"!! 7136 !###$#"!!!< =  528;> !&)+-.///.,)'('&&"""###$&%&''())*)))+++*+*+,+)&! 34238  !'+./)#D/021599"(,.1/!4/*%%)+,-/.,*-,*)'&'&&%$#"$&)*++))).27><6334640+(+& &*# 2*940/.*)&(***,+*)))((&%')**(*././0//./00/,(++&  0/..!1310/-+,-.+#$('&&%$GFEFD=?C8$"%DA?@B@DFD7;=?CC<9830:EIQ-057<60-TTVQRU^^PMIFQ1<;:^JIJRTX\3$ :A"B==#$$"$%%&'&&$%&%$$'(&'(*(')'''I85179=@A=:<@;=>:42,*,/468:CG"5?! 14% + + #$!' "(, !#!$(##  + +     + !!$ & "!"&$+!4*)*(++*/&4:Xmݚj&\G\>m+Ä1DŽ%ЅτUD_Q'&###! 998864.'"#   +  P """$#"!##      +       +   + + + !f'!8U99O71P >6'&%%'*.*,,rjᒟ\ oׄՀÄŀĶʯG<@C8CD?@HFI''HCD?951,-.,..*-)+-03558998999<7:9mmpi=EFBH_S='.$#!-J11cCM4(,.*"!&G3L5)+-,'.&7391$ :1+(!'  + %??c1 + M@CZc10EE;;,(==>N5+;)&25$A`<+    + + +  +    + + + + + + +   +   +   A  +  + + +   +   + 9  +  )    + A ""  $#"(/ #&($546247=<31++3 '((@0018:=>#}}||}|||}| +}}}~~~}}~~}~}~}~}~}~}~}|}|}|}|}|~}~}~}~}~}~}}}~}~}~}~}~}}~}}~}~}~~}~}~}~~~~}~}~€~}~~}~~}~~}|}~}~}~~}~~~~}~}}}~~~}~}~}~}~}~}~}~}|}|}|} 񆆊ɼýȼπ݂ý÷юΰźֿ\4   +    + + %Rπ¼ƽ4ȵĎֻ̩஗ăx&# +#$#"##$ ###"""#""#"#"! +""!!"!! !"! !!"! !!! ! !""! !     "Vnpҽɽº瑝ޑɼĂԵϗӥƼҿŸ守ëο׷˫޲Ȼ텚¿лÈʽ84Za5^WV_55777986774796679878;;779986aPICGILXVRMNRRTQMGD=:@GEDHT[Z?b542/T8B)(&,-+J=f101,,17=CA?50/548FD15>A2*8.,9BG.6)79:18*1A-6|`RJ(NNQKO.0+?>@BF))-)LFC;/(#%&)*)*+033$1/,*(("%$%%%*.*&)+(!76.-0+.4975-1;=@AAIV:G?>>75:864542/68>FRQ@DEFH?93ZKXjx[k< ;<<=<<<==<;<;<=<===<<===>===>???@@?>?> =>>>=>>==>= +>=>>>===>>=>===>>=>=>>>=>>=>===>==>==> ??>>???>=>=>=>?>==>=>>>?>==>>?>?>?>?>?>>>??>??>>?>>??@???>??A@?>>?>?>???>??>??>>??>>???> ?>>>???>>?>>>?>>?>>>?@?>?>??> ??>=>?>>???@@?@?@@?>?@???@@? >???@@???@?>??@?@A@??@@A@@@?@A@@?@???@@@?@@?@A@A@@@A@AAA@@AA@A@AAABA@@A@AAABBABA BBABBABBAAABABBAAABCBAB%CCBBCBCDDCBCBBCCCDCCBBCCCDCCDDDCCCDDCDCCDCCBDEDEDDCD +CDDDEDDEDDEDEEEFEFEFFEFGGFGFGFFGFEGGGFHGFFGGFFGGHGHHHGHIHHGHIHIHI JIIJJKJJKJKJKJLKLLKJKLKKKLMMLLKLMMLLMMLLMN MLLMNNMMNNNMMNOOPOOOP OOOPOOPOPPPOOPQRQPQOQQRRRQSR QQSSSRSSRSTSRRSTSTSTTUTUUVVUVUUUVVUVUVVVUVVWVWWWVVWWWXYXVWXXWWWXXXYYXXZYXYXXYXXYZZYY[ZYYZ[[Zg[[Z[ZZZ[\[[\[[[\]\..[\[[\\]]\]\[[[]]^[fb]QHNSY--XSRSSQPKG@99<<2(-=6.128:75567779=B#$"C@@C##"$$$"!#$"""!#"BD"C"BE!9BEBD#$'**)%E$G%''&IGJ',**/0/.*IMLOOJGKIIC;/,*'067971,,-+**,,-//../01220...-*()')*+-..,++,,-+-,-)(((*,+-/0//.--,-../0/..-.046620/\..01100/.//0021001122202221.,,-/021-,-,+*)((()-341.,./30-//,)*,*+,-/03349;400./23455699543342p124223322345544234541346676767""!!@@87=>>><965?AA?<;<>==5/-.012//.+('.:97DHVs>YU9*63K4456:SbIEVhtDAABBAABBBABAAABABCCCBBCBABCBBBCDBBCBC DCCCDDCDEDBCDCDCBCDCBBAAA@@??AABBAA@A@@?@???@??@???@A@>>??@A@AA@?>? @@@AA@AAA@?@@?>?>?>?>?>>>=??>=>>>?> =>>=>>==>>>=<=<;<<<;<<;;;<<<;<;;<; <;;<<;;<;<<;<;:;::9:9:::9::889878767776767767766565665 4555444544434434334323&4ee2232fddeedd2dbcbbcdccbddcbbbabbbabba```aaa`a`_``a`_^^]^^]\]\][\\[ZZ[[Z[[Z[ZZZYYZZXZZZYXYXWYXXWVWWWVWVUUWWV WWVUUUTUUT SSSTTSSRSSRTSRRQRQPQRQRRRQPQQPPOOPO +POONOOONOONONMNMNMLMNNMMLMLMLLLKM LLLMMLLKLKKLKKKLKKJJKIIKKKJJJKKJKJKIIJKKLnKeUDscJkgaagnu<=rndUPKGGLLPQQMLIGJKOUVQNNMKNOONOW`dfiJ=`L"A;62-18G3167F97:<<9:;;;<::;;B#&*,./1/.,**++)&#"8!!"###"###$$&'))(&%$$##$##$ ":9/2455!))('%"A6/2-:G&-.//21)-*(%$%(*,,--*+*M('&%&%##"! !&+*,---035742+')++(%&'(&%'(&$#,'51/.,)'')-..0-+)(**))((()+--.01101l320-+)'$!! 772-3+21/.,+)),-*$&&&$DAAA>:83441.'$A?=>?EHC?;@LXa9A>;7[XZPR`6d3692WIT[S]_]WOLFJQ\e;7]ECDIMPX3&#;A$@:6=#"$%%''&'&#''%&')'%%()&&()((I;61589ED@;:?@@=;850-34126BDC/D!2#& +  7%%" " ""!84-'%$%"&'      +  l !!!(-#!'-,$'')+$#"=5BSyDh#@4+¿ǀ" /pTB579=;9'75/)#    T    +! !"#$ ### +    +          8   + _-7>G*MC&$&3#$$%'BN86Jb (O 8DžDž ńjƹ̲E?BEJ&&GE=62)&'*+//0.,*)-.29;98877:;;9:mfsvmEJJKO9/H@+%!!()MQ+A1/763,(% (!"$#  " #8`M350ABB+$;8$> )!'(   +  +"09  .`AV8''1?D9;MUC7+A,%AA@:35:C-0    +    + + + + + + + + +  +)  +    + + + + + + + +  + +    + + +   +    y + + +   #  #&&!'.4&$ //3-0=#A"%% 7.6:452&.45I18[2/1/05<T34526%/=O4aP+*MGHLQ-0/*A?AHDJN*VFB>81.'!"%(),.4420(!"3,*/'7#%&! ),)(+*+&.-4:60V'5;4T06;CBX:;BC;755586578768?DEBA@@EDC<2/^bggcm]8;<=<=<===><;<==<===>=>>??@AABABA@AA@??>?@?>?@?=>>>?==>=>>>=>=%>>>=>>>=>=>=>===>>>==<>=>===>>>??>>==> =>>??>>>?>=>>=>>?>?>=>>>?==>?>>>?> =>>?>>>??>?> ??>>??>>==>?>??>?>>>??>??>?>>>?>?>>?>??@?>???>?>>?>???>>?>?>?>>???@?>?>?>@?>? @??@??>??>@@>?>?@@?>@@??>>???@@?@?>?@@?@@?@@???@?@A@?AA@@???@@@???@??@@AA@A@@@?@@@?@AA@@@?@>@@@?@?@?@AA@A@ABA@AA@ABAA@@A@BA@ABA BAAABBA@@ABABABCAABBBCBABABBAAABCBCCBBBAABBBABCCCBCBCBCDCCCDCCCBCCBCDDCCCDCCCDDDCDDCEDCDCCCDDEDDCDEDCDCDEDEDE DEEEDEFFEFEFGFGFFGFGFGFGGHFGFHGGGHGHGHGGFGHIIHI HHHJHHIHHJKJIJIHIJKJKJKLKJKJKKKLLKLKLLKLLLMLLLKLMLMNMNMLNNMMNNMNMNONONNONOPOOONONPNOOPPOPOPQPQ(PPQQRRQRRQRQRRSSRSSSRRSRRSSTSSRRSTTTSTTTS TTUUUTTVUTUVTVVUTUWVVWVVWWXWVVUVWXWWVXXWXYWYYXXXWYYXXXYYZZZ[YZYYZYZZYZ [Z[\[\\[[Z[[Z\ [[]].-...]\]h^^..\\]]^`xdi4..-*QOORTSRPIDA=><83',44<78;:9877548>""DBDE"#""$$#"""#" ##""###"BCCDC@BB>?ADB>A%$$%')*)&H%c&FEFI'+))*..//)FJN*)KLJDCB@/+*')240.'),--/.,-/./0221102/,-,+-./113321000.001/---,,+,/0.-///0..---//.-++2651/ .-.//00//0P10..0221021110.,-/222/'#"%&%#$')**)'*+(&('%"#%&$'((),.-/31220.022344632445532C33221232435556644435677656 "$"#"@778>@???>@==@??@>><<9-()-03.-,*'.1674Q`uO]jY(/4W:344B`IbEbxorDABBCCBCCBABABBBABCBCCCBCCCBBCCBDCDCCBCCBCCCBBCBDCDCCDCD EEDDCCEEDDCCDCDEDCBCBCBCDDDCBBBA@BA@A@AA@ ?@@@AAA@?@?@A@@A@?>>?@??@???@@@??>?@?@A@?@?>? >>>?>>>???==>===>>>=>>==<<==>=;<=<<==<<<=;;;<;<;;<;;;<;<;;;<;:; :;;;:::;:;;:989:9877877787776667666766765565544545554443432233323d2d2dd2ed12d2ccdcddcbcbaabbab`__`a`_`a__`__``^^]^]_^,_^^^]]\]]\]\[[[\[[\[[\\ZZ[[YZYZ[YZZYZYZYYXYXYXYYXWXWVVVWWV'WWVVWUWUUTTUVTUTTTSSTTTSRSSRRSSRSSSRRQRSQQQPQQRQQQPQPOPQPOOPPONNPNNOONOONONONNNMMMNONONNNONNNMONMMNMMMLMMMLMLMLLM LKLMMNMKKLLKLKKLKKJJKJIJJIJJJKKKJJKJJKKKJJKJKJKJKKKLLKKKaxvXaviUebdehq<;vxl\RNIB@GINSUPPLMOSOR\]UNNGLHGHN\diiddMB;!#FICEcYa@&L6347788999:99757==>BABCEHQ[ZQIU4bcr9f,!"%).32.*9E,'%&+08@E%(**'>% )41++/5A@>@>941.+$&2)'&$#"(@JKvu@j{YtuFd]9=vEFl@fd\N,6<%%('&&$>777953.+($%(+-/2230++))**)+|+,*,.011121123551./-(%&&4#&%$#!1*"10..-+%$,,)"!CBB?<:94/+'$*+$ ??>>@GGAA=?`=:<@A:4cRPSPU]`_781ZVCPYTb`aVMPLMRab96^GDDDRVX2%&>=#F?5:$%&$$'&%&())()('')(&&&(*)I>9489@GGD>9>AA=;=;8530,6AEA/?=!$ +  3&&$ &- ,7.$ "%("&k," +   + +   + "".%#"/" $$##"$(%$!CEJMOo<44F$¿DŽȀ=b^Y)"! 336:<;95-($    , ! !$$#!  +      )             + u     + + + s#ACM8IR<"'?&!$%1K9I2Y~jt1!816%Є̀ͅĻͩMDHZ@7A?AABJ&%KMD=6,&%%')-1431//1536?>96848546gcgwy>JNPOJF72+1.'':9B-(;564IF8287*#)#3!#""##%+*"$-:O:@EJH@!H,(-$!  %  + +    'bB$AD,CK7J[N,C?(*J0H&E<9)!     + +   +  +   + +  +       + + q +   + + +   + +   + +  +    ~  +   + ""##%(($%"%<&%&('# ;1.106<=?'(!;9,4:7@AA:341/3@A'&A3/.09;=$}}||}|}|}~}~}~}~}}~~}~}~}|}|{|{|}|}~}}}~}~}~}~}~}~}}}~~}}~}~~}~}}}~ǀ ~~}~}~}~}~~~~}~}~~~~~~}~}~}~}~}~}~}~ +}}~~~}~}}}~}~}~}~}~}|}|}|}|} 释Ƚ򐜜ڀֹîϽȽ¯茚ک닒Ʉ¿Ǿƴ뽋1          "_ !,ͻ]iǽף߫ܵҗ3"     $ +$$$$#"##$#$$$##"""##"""!!"#" !!""!!! ! !"! ! !"!  !         G[`úŻʤճø΀׬ٟ黭۽ı߶ݐ͘컵ǣе,􁅉򋕡üٵŸχc삘ͼ3871[g6fRX7985543212368976678987886777dTKFJOP[bXQORUSQNEAL[895ERM'/329?;>&+040M4=7E154//;=A8@DF2 %! ,203=4=D64YS48411A@>@@BA;40-/`gm_NC=<<<==<=>==<==<=<=>>>???@@@AABBCCCBABA +BA@A@A???@?>>>?@@?>=>=>=>>>=> =>>==>>==>=>?>?>>>=>?>?>?>=>?>=>?>>>??>?>>>??>?>?>??>>>?>>>=??>??@>??@?@?>?@?> ???@@???>?>???>??>?>??@@?>?>?>?>?>?>>>?@@??>>?>???>?@?@?@?>?@?>???@@?@?@? @?@???>>?@?@?@@A@@@??@@@?@?@??>?@A@@?@@@A@A@@@?@@@A@AAA?@AAA@AA@@@AAA@ABBAAA@AA@A@ABABAABABABAAABBABCBCCBABCCBBCBCB CCBBBCBBCCCDCDCDCDCCCDCDDCCCDDDEDDDCDDEDDEEDEDEEEFEFEFEEFEEFFEFFFGGGEEFGFGF +GFGGGFFGGGHGHIHIHGHHHIHIHIIHHHIHHIIIJIHJIIIJIIIJIJKJKJKJKLMLLMLKLMLKLMMLMLMNMNMMMNONNMNONOOOPOPPPOPQPQQRRQQPPQQPQRQRQQQRRRQQRRRSR SSRSRSTTSSSTSSTTSTSSTTSUUUTTTVVUVVWV +UUVWVVUVVVW VVVWWXWXZYXWWXYXYXYYYWXYXXYZ [[YZYYZ[\[\\[[[\\[[\[[\]\]\.]^]\..]G^]].]./^]]_Mld123/QLMQSUUVOHIIC@;82&+=;;=>:568758;>A"CC$##!"#$#"""###"#"""B=@#DA?=?BHHED$&('(}&&%$$&%ADK*)*+**,-.-OIMO((LKC>BC@7--/11.++,,/.//,-011100111321..,-./01101122/.0132110..-,,,---..//0/3760/..00/.-,,.221..0/--/./0/2201121%/.--22+&'&**,033675566321489743300010.*/00.-01300/.1124343331223423322233355644453V445898986!"## <:879>@=<>?===<>A@?<89=:.-/30-,,()('*,496bgI|cc`,,2PR6214HuM^x~KAAABABCBABABDCCBBCDCDCDCCDDDECDEDDEDEEEDCDEDCBCCBBCDDDCCBBABA@ABBABA@A@AA@A@?@??@@@?@@@?@@@AAA@A@@A@?>??@?@@@??@?>?@?@@@A@A@??@@?@@??@@@???@???@??@?@@?@?@?>>>?>=>>>===>?>?>>=>>=<<==<;<<;<:;<;<<;<<<;:::;;:9::99:::9 878787887778767 66765666565665445434334322333e3$2d22db122dddeeedcccbbcccaaabaaabbbab`a``_`aa```__``_^^]^]]^]\\][\]\\\]\[\[Z +[[YYZZZYZYX WWWVWXXWWXWWVWVVWXVWXWVVUVVUTTTUTSRRTSRSSSRRRQSQPQPQPPPOOONNOPOOPNOONNNONONONNMNNNMMLLMMMNM LLMLMLLMMLMMLKLKLK +JJKKKJKKKJKLK\pnWnoh[gigfgtwnzthcVJMGDCHGS]WUSSSVY\_ee_YQQMLS\^`aikRFO8-%CELN@DJ>JADY_ZWRWUN:a674322388:=<976788?ADBAEJRW\\M:5;L:[gKK<4:%#!#$"#$%'&###('08;=E&))($7+-::4/*+,*%!!#$&7Xn]kIpSwdJ72^updI9JP,,1!)>' !'&&'')-/.-*()..84138@#$#"!!!   !"##"!! !"!!"#$$! B! !! 100,((),0367;> = $%(()&";:<::<"$&(*,.-+,M*)'$!;51133 !!#" 11211 "#&&&%! ,.2:$'28;75208/,&'()J$$%&%%$" #"! ! %+./17=;4*$#"$%'%'(($FI',)'2*5/)$DE'-/11223/,+**+)*,.-../1s0024431/.-+)'('&*))*($/,"-.-,.,%)(&$"EB=70-,*(''((!><;>>ACBGQTLQf>=:7123[RMMNZ]Z3?<1YTFOXTU`bXLOSOR^a33]HDGR^XV5'&!;>?=>===<727A##,7.#&! + #&"#"#&    (*(5/,$*( -&      +  + + + $(/)" '&#$$ "#%$ AISMI၍ ?L  + &7 ,ńąoӅ+ڄۀ-^oR&%$ 5/1579994-+)#     R  "# %&#!     $           =  +    + ,II4ZKPC ">;%#$'6\=& }}}||}|||}|}~}~}~}}}~~~}~}}}~}}~~~}~}|}|{|}|{~}~}~}}~}}}~}~}~}~}}~}~~~~}~}}~ƀ~~~}~} ~~~~~}~}~~}~~}~}~}~~}~}~}~}~}~}~}}~}~}~}~}~}|}|}|}|} ĸ¾оߋ쇆|炅ɲ᱗ݥþɸS0      +    -l˺ºHgǾ쨫ħħx " + +%$##$%###""###$%$#"!!"#"""#"##$#$$##"""#"""!!!"! +"!!""!!! ! "!! ! !!    !    +  >RWžп􁊈ŴŽ߁ą׀ɿȅ“ڽԾŽǕȆ۬ϿȃïŻ쪔񒕉˹녀58aW`76Tc:996632fdc35632bb46668987525dUJDCEGO\ZTQTQQTVTRMGF2?ISKNN;GOV8<;+*+.132P8@49131()#+0.&*%&*'7105XQZV\:643<=?B=60,T,48;nUXZ><=<<==><<= <<=<<===<= >>?@A@@ABCBABAB@AAABAABA@??@?@?@?@?>>=>>===>=>=>>??>==>>??>=>=>=>???>?>?>>?>?>?>?> ?>>???>>>???>=?>=>??>>>???>???>>>=>??>?>>?>? >>>?>?>>>?>>?>?@?>?@??@@@? @?@???>?>? +@??>?@??>@?@?@?>?>@?>??@?@?>???@??>>@@@?@?@@? @?>?>?@?@@?@?@@?@@???@@A@ +?@AA@?@@??@?@@@A@ +A@@@?@@B@?@A@@?@A@@A@BA@@A@@@AAA@A@A@A@ABBA@A@@@AABBBA@AA@A@AABABAABABABABCBCCBCCBBBCBBCBCCBBBCBCBBCBC DCBCDDCDCCCDCCDDCDCDEED&EEDDEDEDEDDDCDDEEDDEFEEEFEFEDEFFEEFFEDEFGFFFGFGFGGFEFFGFGGGHGGGHGFGHIHIHHIHIIIJIHIIHHIJIHIJJIJJJIJIJHIKJKKJJJKJKJJLLKJKLKLLMLKLLMLMMMLLMLMMNNNMNMNONMN ONPONNNOPONONOPPOQPPQQPPPQQPQRRQQRQQRQRRRSTSRSRRSRRSTTUTTSSSTTSRRTUSUUUTUUUTTTUUVUVWVWVW XYYXWXXXYXYYYX&ZYYY[ZYZ[ZZZY[[\ZZZYYYZ[\\ZZZ\]\[\\]\]\]\]]/]^..]..\]^/.]]//^UYfff133.RSRPSRONJHLJEA:61$)7<<:649:8:9:=@CC"#$!!#$$$! !###!""#$$###"A@!#@<>?DCD%'%$'*(h)'&$CDI'IGM*)')***,-)NP+*((IGJF@?C<835760-,+-,*)%&(*)),/1/,)-/.,+-.-,.0001100..024225510/././/-,-.010221/"11/-+,.1/.//./0/-./..-/001/-0001101>0/.--.,.0/49<957::;;988!"!! !#!=>60020//000///20113223322122325433323 555468889 ?>=:9>?<>><;9;>?@=630/.&(+--+,,**(),26:?JFj\i).1MbD1226MVS_hwqCABABBBCBBABCCBBCDCDDCCDCDDDEDEFDCCDDDCDDEEDDE DDEEDDDCDEDCBCDCCDDDCDCCCBBBABABBAABCBAABBA BA?@@???@@A@?@BA@@?@??>@???@@???@?@@???@?@A@@AA@@A@?@?@@@??>?>>??=>??>>=>>=>>>=>==>===<=<;<<=<=<;<<<;< =<<=<<<;:<<<; :::;:::;;;:9:;;::9:9878767 677766656655656665 44454545544343343232efed2e2dddc2dddcddcdeecbcb abaaa``a`aa` a```a`___^_^^^]\]]]\]]\\]]^]\[\[[\\[[Z[Z[Z[[ZYZYYXZYYYXYYYZYYXWWXWXXYVWVWVXWVWVVWVVVUUVVUTVUSTTSSTTSTTSSSRRRSRSRSQPQRQQRQRQQQRRQPQPOPOPNOPONONNNOON +MMMLLLMMMNMLMNMLKKLLKMLKJKKLKLKLLLKLLKKKLKKLKLKJKJKLLK!MLKKXjgQpdc_mmicirmd?zo`WSRPLMMGPZ[W^cacdge^TXRSTHOSTVXa`YLK~7[[/2.44-,/6:F\@>??A@FM*-,)'ND?;@"%%$##"!  !!""##"" ! !"!  !6.*),./24679:M0#%&*A<6\imk (< +>^t2-քτ΀ÀĽ˦OP=<:EDC@BIE?(LE8-)))&*,*3:::<=;?CBBCDD?7;;==4huyBEBCCJJE77Z&;9"' $*%"#+*3>+)',4724:$$!"#957110,37=#*'!;3*/88:>>8/,475:A#&=06;69<=$ }}|||}}||}|}|}|}~}~}~}~}~~}~}~~~}~}~}|}|{|}|}||{|~ ~}}~}~}}~~}~}}}~}}}~}~}}~}~}~~~}~̀~~~}~}~} ~~~~}~}~~~~}~}~}~}~}~}~}~}~~~}}~}~}|}}|||}|}|}|} 섅󀂃޾ȼ٢󘝘°痱{櫠²ͭT-  +          1僀ɷƿ݀,ƪբͦ$    # $$$#!""#$#$#!"!!!""###"#$$"#"!" !!"!"""!!""! !! ! ! !"!    !!!     n3JL惁ճʷ΄π͇ޤώ̬􀅎Ϳ¸؜ԃض􀄊ۢڅxʻ􍑏bg_W^5eO^7678fde`bc575_Z\133049:8865li_KC@ADLXUNJLKGHNNKLNY?6L.R/Q8FLQ<=6A/231.H1:?_,,0*'%6??..6LX$:D8F?5=M3)381;FKO^K?D@>DPY,,*|*./TMQ+093/TK?:F+X@4RE?!##&%),*/30*&#!<74+'()+16#&-/+''"$)&3.,YRa7853647==AHGEOLHGE%C(159;999::4.-0+2>EBaso><=<=<=>=><=>?!@AACCBBBABBAAABA@ABAABBBABAAABBAABABACBCBAA@A@@@?>???>>?>>>=>>==>>>?>==?>?>=>?>=>?>>??>?>? >=>???>?>>?>?>?>>??>?>=>???>>??>>???>>??>>>??>>>?> ?>?@>??>>??>>? >>??@@???@?@@?> +???@???>>>?@?>?@??@?>?@@@???@?>?>@?>?@???@? @??@@@??@? @???@??@?@ ??@?@??@@?@A@ A@??@@@??@AA@@@???@?@AA@AA@A@AAA@A@A@@@ABA@AAABABABBABAABABAA@AB +ABBAAABBBABCBCBBCBBBCBBCBBBCCBCBCCCBCBCBCCCDCBCDEDCDCDEDDEDEDEDEDEEEDEFEF EFEEEFEFFFGFGGGFGFEGHGFGGGHGHHHGGHIIH GHHIIHHHIIHIHHIIJIIIJJJHJKJKJJJIJJJIIKLK +JKKKLLLKLKLMLLLMMNM NMNMMMNMMOONOONNONOPO0PQPQQPPOPQPPQPQRQPQRPRQRRRQRQQRQQSRTSSRRQRSTSTTTSTUTSTTTUUUTUVUVWWWVUUWWVVWVUVWWWXWWXWXWXXXYWWWXYY[YZ[[Z[[Z[[[\[[[.[\[[\\][\]]\\]^]]^]./]./_^/.^___^^]^Wy50220.-+,UNLJGJKKH@;;0'+7=A>:9878:>@>AB!"! "$$%# !"##"""$$$#""!B@CEC>9?"##$&''%&)'')('(%&F?I('J('(''(**,,*(++6)(OGFJHD??9668961--+)(&&&+**,-...0//102/,03101222323412W313421010///.-//02221///1001200-..-.-..--./.--./-./000//012111010//..),169988987::<88!  !""! !"!48310/0123221212111242354432445Y445788: !"!! ?<<=A@=;:9:<><950152.-,*'(-/.,++-*)+,155A]OOk^?.02GE=L=5BrUhllE@@BBBCBBCBCBBBCBCDDDCDBCCDCCDEDEDEDEDEFEEEDDEDEDEFEDCBDDCDCCBACBABCCBBA BBAAA@AAA@A@A@ ABABBBAA@@@??@?@A@A@A@@AA@??@?@?@??@??@??>?>?>?>=>=<<=<<=<<==>>==<=<=;<=<<;<=<;;;<;<<;:;:989878876767776556556545455444544454433432323232322eeedd2dce22ccbc$dcaccbaaabbaccbaabaaa``aabaa``_`__``_^]^ ]]]^^]\]^]\[\[\[ZYZXYZYXWXYXYXWXWWWXVWWXWV UUVWVUUTUUTTUTSSTSTTSSSRSRSSQRQRRQQQRQP OOOPPOPPPONONOOOMNMMNNMLMLMLNNMLMLKLKLKLLKLKLKKKLKLTc_q]^`kpjiggdi??=]RUTSVXWKMZ[]]`aghddfbemg_YUZRMQSTR[_\a`XLKKRe=NOMI=30/111233676799;;=>BJQ,**)+)LGCi@H9~admSD0W"2! $$#"#""(/26=G%%')) )#!!#.9@<89=92/-(#!! &)-c^dzkihtepL@VF^',3& "'+.--+%"%)+++,/26759; $%"!  """! 420114:;=:<@A>#% !$''%'**'#:::;!%'((*,,)*.+)'%%#!!" "%#$#!# "'))**)(&%%)***'$$$ <$)-2483-()(*.126;><;:5,*&'*+,)((('&()-/,)'#"! ""&,3< !$%9!#''#""!"$#$&)+7'-5.%#I(.-.2210/+*+++,-+,.+.210/.11441121/,*')*..e&"&(),--++%!! 9;$*#$%IC8.+-,**)# "##BCACGIPb7==8689<99020VTWQSPDNS]:;970OGN[YX]`SNQWXNTc:7[LPYSPSV_CF@;A%F6=%$$&CEHBDF%'%A=?"%%"%)+*+))TQI:31.3=GD;56646::8<?OF+! .-,>*$8`Hgbx`בZ 2ALԆ7Ʉ8ńƀɦW==>FIDCCD@B('#1'(()+12,/:;<>@AFFDDCAEIB=:CIM),0130(/X7:323',-&%21.)#  "&+.*%!$IC27>3,"/"     .  +  3:aJ548EBI-'9,6 )    +   ' +  + + +  + +  $ +   + +  - + +   +    +  +   + +    +  " #>#%&)*2B&*(%$&&&%% 644/21(049&(''!5.2=;9?DHQHGIGHHEHFKVX8Y?INLV=CLRS88/;1,(,C19=:1DPH9#)$&.7&%&#!";/-1.('.02-5&&))#!!#(%6-1\I4:>>A923>FFFLMEA>;=&.289<<<===>>==;=>=>>?@@AB AABBAABBBAABABA@ABABCABCBACBCB A@A@@@???>?>?> ==>=>?>?>???>??>>?>???>???>>?>>>?>>?>??>???>>??> ?>>>?>??>?@>??>?@???>?>?@? >>>???@??@?@?>?>@@?@?@??@?@@@? +>?>??@???>?>?>?>?>>???@?>??@???@>>??>>>???@?>@??@@@?"@??@@???@@???@@?@?@??>?@@@??>@?@@A@ +???@??@A?A@A@@A@@@??@??@A@@?@AAA@@A@A@AAA@?@A@AAA@@A@AAA@@A@A@@@AA@BAAA@A@@AA@ABAAA@ABAABBBAB@BBA@BBBAAABBBCCBABBBAB +ABCBBBABCCBCB CCBBBCCCBBBCBCBCCDCBCDCDCDDCCDCCDCCDCCCDCDCCDCDCDEEDCDDEDDEDDDEFDEFEDDEFEFGFEFFEFFEFFFGFGGGFGFFFGGFGHGGGHGHIHHHGHHHGHGHHGHIIHHIHI JJIIJIJJJIJ IIJJIIJIJJJKJKKLLLKLLLKLMMLLML +MLKMMMNMMLM NLMMNLMMNNMNMNNNMMNNOONOONO POPPOOOPQQPPPQQPQQQRQPQRQQRQRSQPRQRSRSRSTSUTSSRSSTTUUTUVUUVUVWVUVWWWXWVVWXXXWVXYWXYXYXZZYXXXYXZYZ[ZZYZ \]\[\\[]\\[\[\]][\^]\]\.\.]\\\.^///]//^]/_^`Q764236320+LKJKMQKC?>8,&'7D?51699;>A@C@>?<@"#$$C@B!"#"!"#$""CC""AC>?@=D%%%'%''%&)(('$%(''GCIM()*(&J')M),+*)**()'KHHCBE<76699852.+(&%)*+,..,+,-/1O2--012232233234310124420///0/./..//0021230./021/1100../.--,,-/0//.-,-/00/0/01001 ///.--189:776 :7A   #$#"" 64/*-//../010/022001213212233434432212556776)7: ;= !$" ?A>>?>879<::5-&#)+,,-+)+,00*+)%(+1777Ve^?:7117Zatm>mWd^bnHAABABACDCBCDCCDCEDCDECCDDEEEFEEFCDEFEEEFFFEDEFFFEDEFFEEDDCBCCDCCDCCDDCDCDDDEDDDCBABABBCBABA@ A@@ABA@A@@@ABA@??@ A@A@AA@@@?@A@A@A@AAA@A@@?A@@AAA@A@@@A@ ?@@?@??>>?@?>? >=>?=>=<>>>=>=>>=>===<=<=<<<;<=<;<===<;<;<;;<<<;<;;;:::;;;::;::;:9:98787776778766656 55655544545545434 +33433443323212fee2c2dcdccedbccbbcbabcbaabbabca``aba`_```a_^`^^]]]^^^_^^^\\^]^]]\\[[\\\[\[Z[[[Z[ZZZ[ZZYYZYXXYZYYZYYWXWXYXWWXXWWWVVUVVUVVVWVWWVUTU;STTSTTTSSTUTTUTSTTSSRRRSSRQQPPQQQRQRQPPQRQOPQPQQPPOPOQPOOOPONOOONMNONNMMNMMNMMLMMMLMLLLMMNMLMLLLKLKKL +JKKLMMMLKLKLLKKJLLKLKLKLMM][ihks\msqoicey}|@YV\ZXZ^XQOW[]`caegdffce\;Hg[RRNW\Y[f]U`_YMI5yJC18EM=:J;;72135554556:;=>@DI'*+*)'m#"%MU/qsR]"8?7R`!"!"##"(.12:H$#&))'%#A+! "&&%%$'*+'%$"!*++(QcGXk^vbNNJ.@"%'*-22)&'(,,-,/462159;>"! !!"$  ::;=?6CFH$&'(')))PNI<0037;@777666476:??-?#*//2)36#!  !&&(#  3&"#!%+#!!&(&)"#(" + +  + + +   ,  #"$"%**!",#%$!,!!*#D? "W <¿¿R¿¿DžȄʅ`؄׀܎.*&$$&#!+)**,1-&"  t    !# # ! + +       I         + + + +     !iJUE4/*$!&HMYK/nPaOTk)9M8 7E@ɅŅ ńĄńĀʵ_JN>JLKJEABPMI#)'***-10/059;>@ACDBEDAB>'2C=:;GB8+*B+("'/5)&%*-(GJ+60("#B6/4/",/3-*&%)  !!!$#$%'+._..FAJ,/$ #2?    + '5OY94G9*,# = +  + +    3 +    + )    +  + + |    + + +   +   +    +   + + 5    "#$#'0-(0"(3'%$$#"=;79<9256+/75#!$<2+,9:&*?XJFDDM85A?3=>:ANL?:=MUL?=CDPSQJ}J*))+LJ-415WA137'3?JMG5#$((%)3*8-$+484)I-9??2:'#"$"!$'(J94Y/8?JH<79=@BBDKJB?@F-555:;@HL<89;;:BG=0+0>GD788H=gNG?<<=<<==<= +<=>=>>>??@ABABAAABBBCABA@AABABBABCBBCBBBABA?@@???>?=>??>?>?>>?>??>>>?>?>?>???>>>??>??>>??>>?>???>>>??>??>??@?>?>>??>>? >?>>?@???>>?@ ??@@??@??>@@?>?@?@@?>?@?>?@>??@@?@?@?@??@?>?>?>??>???@? +@@?@@@?@?@?@?@@A@?@???@?>>?@?@?@@@A>@A?@A@@@A@A@@?@A@A@AA@@?@A@A@AA@A@@AAA@@A@A@@AABA@@B@@AA@@ABBAA@BAAABBAAABAABBABABABAB +ABBCBBCBBBC BBCBCBCBBCBCDCCBCCDCDCBCDCDCDCDCDCDEEDDEEDDDEDDEFDDEFEGFEEFEEDEFEEFEEFFFGFGFGFFGFGHHHIHGHIHIIIHHHIIJIIJIIJIJIIHIIIJJIJKKJJJKJJKJJJKKJKJKKLKLKL MMMLMMLLLMMLMLMLMNMMNNNONONONONOOOPPPQQPPPQ RRQQPRQQRQRRRSRQSSRRRSRSSSTSTSRSTSTTTUTSUTSTU VVVUVWWVVWVVW VWXWWVWWWVWXWXWWXXYZYYXXXYYZ YZZYZ[ZXYZYYZ [[ZZ[\\[[\[\\\[\]]\]\\...///.//^/^^_/^^^__``//^^_`MJD?<76642.)KHGJLLGB?;5*%%,6:46:;;?B96645<=953,$%)+++,.../00011011-/22234442343245553110.../../0001//021121142/./.i--.+,-01010///0///10./0/-/67766767436   !""!!! 830++,,--///.../1000231110332444343578M79 <;:6;?"CCB=758::82/543.''')-//+(/210,+++--.57;>FnbY8@V329RnRZiJ{lWxDBCBCCDDC DCDDDCEDDDEDEDEDEDEF EEFEEEFFEEDEDEFEDEDDDCDCCDCDEDEDCCBABBCDCBCCA%CBAAA@AAABA@@ABBAA@AAAB@ABBBCBBBAA@??@ABA@@?@A @@@AABABBAA@ABA @AAA@@@AA@A?@?@A@?@@?>>??>=>==>=>=<=<<;<<<;<=<=<;<<;;;:9:;:9898987898788777876765665455455454344344334332232232efeddeddecddcdcdcbcccbcbccbcabbababbaO___`a`_aa`___`___^^]^^]]^]]\\]]]\]]]\]\\[[\\\[[\Z[[ZZZ[[ZZYZZYZZYYYXYYYXYXYYYXWXWXWWWVWXWVUVVU VUUVVUVVUTUTSTSSRSSRQRQRRRQRRQ PPQQPQPPQPOPOOPPONNOONONONMMNNMNMLLMMNMLLMMMLMLKLKLLKKLLKL KKLKKLKKLLLMMLTYWzvs|65210148>;::=;8;@DJ1??FLXQIDnCRbzKYo?NqqQxq6! %+-/4CJ%'()(&$"=0!!  %'##$$NYokrqF'#&(.55(&(.00/./134679:!""  !! "9;?A"@9<>AAB@ ""#!? #&&+2/+$:698 %&&))*)&""$%'&8 " &&#"  #%(**++,+***((()((*(&; &5>"#A;2.,+'$%&)''&')-/)&!"&()(%%&'))*(('$"!!'18=!%'#;)#%%"%&%"#$%'')-TG13/)%&*,,-1/01/)&%$(*+++-//111//001110120.,,+,--,+)*%()''),*$%'''(*)A<>60/./-+())&$ CCJ06554677740561ZZT\bXVWRINa14651ZNB@QVY]XSNQOPLKZ`YPNHILGMNVAAD=7C)&C@$'$CCFMPQL'LKEBD@AB$'''((MLLC82.1458:87578:?B=B1=3(1, %,2;# !!9+%# 3.)!"#$ ,/$!**($&"!- &'"   + +  )&$ $&'!!&!%$#(!$)% ,$JHᑓZrXi) + \ÿlͅф3ل1݊D6/.)&&%"(&&*+-($!      ! +    5        + + + + + + + + + +   !$`S?.6H(%-AO6HZEj\}flL똦%?  7DžɄņ ÄĀí^XPNT(LEDHS=+7)+,/-,15798:;>ADGG?4899<:8nAE@}>==;70?3;-:8"*)($?'C(+?35<2+&'60'%#! !(.;0+( !###"##""$&*##B(-3/,((.5>A$-A)?9*D< + +   +9QBTN9     + + 8 +  +  +     + + +    +  + +    + +   +   + +  !  J!#,$##""#$$"""!!";<7<>6563-0>!"# <2('58;?;8453402<>922035166:|}}||}}}|}|}|}~}~}~}~}|{|}|||{|}||{~}~}~}~}~~}~}~}~}}~}~}~}~}~~~~}~Ӏ~}~}~~}~}~}~~~~~}~}|||}}~}~}~}~}~}~}~}|||}~}~}~}|}|}| ɵ摸Ѹڽ劋ϫյ}Ҷǐܥڗɛǻ܈ûþ̦?    + +  )oޓ´̾þƿǹɴ!ǔЏ¦Ïr#   +  ######%#$#$#$#"!!""#"!"""!""!"!"""!!""! ! !! ! !     ! !!! !! !  !     %9:˿Ӿ􁋁ӔȒ們쀌ꍤñжͮȡЀ჏˼üõވ²݀UZ]XR^65__69h`VZlplfid`VU\ZZ`279::7gb`^KC?<FI@9DHA8/6+:%+:,762ZM@1.30./-+&0FSTWDAB/:J?/31/03837IRG<5;FRXS*I{M*,RK@@K/32G84<9'FFKGH5#%,3)$$ )8+ "-9-)($*.-/+!1"#% A%%DA6149A<2?:ABHKEEGN/:<96?BD;6757678@B2)1678862A?8bl><>=>=>>=???@@ABABA@ABBABABBBAABBAB@AABBAABCBBAAABBCCBBCBCDDCCBA @???>?>??>???>?>=>??>>???>?@>?>@?>???>?>@???>>>??>>?>>???>?>?>??>??>?>>?>?>>@???>???@???>?@=>???@??@???@??>>>?>?@?@??>>???>?@@?>?@?@@??>>>?@@???@@?@@?@?@@???@@@??@???>@?@?>?@?@@??@?@?@ A@?A@??@@@?@?@@@?@?@?@@?@ +???@A@AA@A@?@?@ ???@@A@AA@?A@A@A@A@?@A@A@AAA@BAAA@AAA@ABBBAA@@A@A@AAA@AABABBBAAABAABABAABBBAABBAABBCBBBCCBCAB CCBCCBCBBBCBC%BCCDCCDCCCBBBDCDDCCBCDDCCCDDDCCECCDCDCDCBCDDCDCDDDEEDDEDEEDEDDDEFEFEFGFGFGFE FEFEEFFFGFGFGGHHGFGHGHGHGHIHGGHGGHIIHHIHHIIHIHITJJJIIHIIIJJIJKKJIJJKKJJJKKIJKJKJKKKLKJKJJIKKLLKKKLLKLLMLMNOMMLLMMLLMLLLMMMNMLMLNNMNMNONONNONONNOOPOOPPOPOOOPQRQPPQQPPRRQRRQPPQRRRQQRQR STTSSSTRSSSTSTUTUUTTTVTVU(VUVVUVVUVWWVUUWWUVWWWVWWVVXWXWYXWWXXWXXXYZZZ[ZZZ[ZYYY[ZZXXZ[YZ0YZ[[\[\\\Z[\]]^\\[].]\.\\./\///./^./_///.//.///_/H_^FDD@:7772,*(OMCEIHG@96.&"#:@9@?==>?><;99=@B#"A@"B?@"#"<"#""B!!ECC"$#%;('%&%&($%()((*J@=E')*)*)'&')(''('')N%GGE?>AC<::629872.(#)++,)--.0011210023222353441256654323433322100.0 +11/0112.0123112111.///...- 00//..--.--.0+/.17:9986998568   ! !"! 940,),+.-,q-,../0001112023435553243469:<=<;:9;?>;:98662015:65433/('.0,053--0/2/2692+/011//6;>>?>>=>?>>>===>>=>>>=>>=>=>>=<<==<=<<>=<=<;<==< =<<<;;<<;;<<;:;;;<;:9:9899888989988978887866778777656565565454455434 3343323443(e2ed2dccddccc2edbddccbbcbbba`ba`ababb`aba`a``_a`^^^```^_^_a^^_`^^]]\]]\^_^][\[\\[\[[\\[\ZZ[YZ[[XY\ZZYZYXXZYXYXWXWVVWVVWXVWWUUVUVUTSTUUTUTSRRSRQQRQRSQQPQRPOQOP +QQPNOPOPONOPONOONOMONMNMMNMLLMLMNLNNMLMMMLLMLLKLLMLKLMLKLMLKLLKLMLMLNUQ|v?=tdjlB/R,.00,-,,,-/2/.20JGXN;110../004?-BB6G36:;?! ""# ="!"(-.'!=8 :#$%'&$$#!"##$!! 1213 -+))'%""!"'(((,+*%$''()))*,-(% &7?(,+($@=:E'&BA%)FB<@QSSMPJF?<=8:CIED,=;?:)./!$!! + 4,#!$!'242" )*"!*/+!%'#&! $#%#$ +  +   +     "#!! "&(###'$#!& (##Iԕ5<8 ˄8ЅҀ( >751,('' .,$%))(! ?      ! $!!  + + +        %     + + + + +  + + +  l"!,rR%+%%(CfaJvukXMLKAe7iy+:ބ"ŅŅĀƶgcVP+)MAEJW(#**2/,0/35864?AELF?/>1U5;>>:sm{li89+5%!!=B4NM,.!$$%$##1,84'"!! !(%%& -1$&(/18::=<>7<:9:@@=66E&GEJM. + +     + *  + +  + +    +- + +  + +  + + + + + +   + + +      +   +  +  +  + +   +!D!"""#" /.27:7;B:9?8650,16;!#!@=422552479|}}||}}|}|}~}~}~}}~~}~}|}|}|}}|}|{|~ ~}~} ~~}}~}}}~~~}~}~~}}}~}~}~}}~}~}~~}~}~~~~~р~~}|}~}~}~~~}~}|}||}}}~}~}~}~}~}}~~}~}~}~}~}~}|}|}|}|}| 򃆁̮苉쌉ս܁ڴz󄌅ő燡־öú͵ٌȸ} +       'eƇɼ܀ƿĿɏۻҜ́V   +  ##$$#$#"!##"!"##"""! ! !!""!!!""! !!! !! ! !  !"  !!      + +/v˰нԴʡ俦ҡܾ㘑죱ͨ޶ȷ¾􅈌هҽƿـPVZVPc5jaa7;6eV^knmiheaWU[`dhfe5688kfm8hU@=AHU__`^4660>RQMSLJNH27<97B53O3*<0656cLE9+,164301@=1,3JVUUBGM=@,A),,//6>8GOCB?;FN*+TU?yCHC?@=D+52TB?<>31XMRHM3 #-+-/-%''$:>$,./,&D$''FA :%/)-,+48<:21]-67@J?:<<6=>?@AAABBBABAA@BABAABBABABABCBBCBABBABCBCCCBA@?>? >?>>?>???>?>>?>?>?@??>>>?>???>?>?>>??>>@?>?@?@?@?>??>?@?@@@?>?@?@?@@?>? >???>@@??@@@?@@@?@?@?@@@??@A??@???@?@@???@?@??@?>@@@?@@@??@ ??@@?@@@?@?@??@@??@?@?@A@?@?@A@ ?@@AAA@@@A@AA@ A@A@@A@@AA@AB@A@ A@@@AA@@A@A@ABBBAABA @AAABA@BAABAABABABAABABAABABABBBCBBABBBACBBCABCCBBCBABCBCBBCCBCCBBBCBBCCCDCDCDDDCDCDEEDCD EEDEDDEDEDEFEEFEF +EFFEEEFFEEFGGFGGHGFGFFFGGFGHGGGHGHHHGHIIHHGHHGGHIHIJIIJIIIJJJIJJIJJKLJJKKJJKJLK JJKLKKKLLKLMLLLMLMLLNMLLMNM NNMNNONONNONPOON OOPPPQQQPOOPQRRQQQPPRQRQRQRSSRS TTSSSTSTSTTUTUUTUTU +VWWVWWVXWWV WWWXXWVWWXWVWXYYYXY[Z[[ZYYYZ [[Z\]\\\]\ []\]]..//. ///_0/././^/0/./^`_z}?BCG@950..-*K9ANLI@;6.)%$);ED=:>ABA@;335;A"!? B>@C!?>=!#"!!!@!###$''&&()'&%$%((()(%')&HG''(*)'('%%'%&)(''&&&JFA>?BD=:831,.2(-)+-,+++,--../00131//12243111/012357774454313440 1212201223200///.//../-..--01100//01100/39>=;0966  !! !"!"#"53-&),,+n,-.//./001110013537613653379;6698658=>:99722110///2,)))*210,,/122338;:;61.2311//776:3P/&,..ee|v^RRNuuBCBCCDCDDDCCDDDEECDCCDEDEEDE +DDDEEEDEEEFEFEEFFEFEFEEEFEFFGFEEFEDEEDDEDEDDCBCDCBBABABABCBA@A@A@AA@A?@@A BBBABABBBA@AAA@A@A@??@A?@??@???@?@???>?>?>=>===>=>>=>>>=>>===<==<=<<==<=<===<=<;;<<;;;<;:;:;9::9::9889788988787887877878777677576677666565455545454343443432332323323ee222dcdccdecccbcdcbbcbbabaaba``aba`a`aa___``__`^___^]^^]^][\ [Z[[[][Z[Z[[ZY +ZYXXZYXXWXWXWWVVWWWXVVVUUVVWVTUVUTTTSUTSTTSSTTSSRTSRQRRQQPQQPPQQRQPPPQQPPQPOPOPONONONONOONMMNNMNMLMLLMLMMMLLMLLLKKL +MLMLLMLLLMLKLLLMLMMLMMRQl{}@=ukihyQ!SfYY035d`[ZYRQTWUUcntrdQW9TN[WIy~]86L<6@=6XORL<5/)(%&&).43/38;Ld`]jtTX=FLoMCC;4LdrZOP?J+"&B:5;;t!:;A.MddVC:5ddYUW:K@9b^JC* !!#$$+9>=?H%CGJ&%%$!<3+$')!*"&"! "*13.+/10-/--16878<8;=958>@>713!" !"$# !#$%%#%!779> "#$%%# x "&)(%%%#(/+(+'&%'&#&'%%(&&##&'()+)+,,*)9;*#*/+&!:1.-+,.4=;1!!#$" "&))'&%$&%'('()+,-+)&&&%$(1:!!!%%!8)'(%%$# $% (,6',.-,/1010,+)**+*,...,+/3100/-+,.-)%'+.-./.,+,,,++*!&+,*('UOIB<3../+'&&%&'$##!> 3;8433.QE@=@DPRSUVRY^US[YWYPHLSX371ZYRGIVVP+*NIGMM]]^f^RJJLJFKOQ834"[;;FD7fZhtWZQ?'#:%# 63;5'$!"'&#%'(3CA?FM7F?7113406:;|}|||}}}|}|||}|}~}~}~}~}~}|{| +{|||{{||}}|{|}||}~}~}~~}~}~}}}~}~}~}}~}~}~~}||}~ +}~~~~~Հ ~~}~}~}~}}}~}~}~}}}~}|}~}~}~}~}~}~}|}|}|}| ⿮̿臏ٹøzʱ𽶴ߍǻ۽󽐂㼮ʫ󏚝C + +         ! )`򀎝sտʧθȂшj&  +  +%$%$##"#"#"$#"!""#"!"!#"!"!!"!  !""!!  !!       $*E謯ƿŤؤ¨їüك񝲮剜̳ހʾםſ)׀ꃀ»þ¼׈]ƶ킅ѾǼǀMRZVS_5a`_g78gW]mnklggd\U[`gb`dghefa_di_JB@@@HSe8;<;@FQLHIFGNU;07;7?/8.C/:\gR^4RJF6*/.44;:264+)04ISSSR[KHR7,/27@IA?SHDDBBG(,WQPDy@DG(''*14WLIGA>32YUTMG2#+--<$"" 996?)76+',"PWOD;41=-#"#%.021.]Z[:9G_SB;8;;AFHMOT9@><=C@<><<9+(60+*)-34]PLU4436>Wb=<==>===>=>>>?>? +AA@BBBAAA@ABCBABBABABBBABCBBBABBBCBCBABBAAABBCBBBABCB@A?>??>??>>>??>>??>?>?>>?@?>>>?>???>?>>?>>?@???>?>@?@?@?>?>?@??>???@@@???>??>?@?>@?@?@?@?@???>??@?@?>>@? >?A@?@??@?>@?@??@?@?@A@??@A@@@?@?@@@?@@@?@?(@?@A@??@???@@?A@@??@A??@A???@@@??@@@??@?@AA@@??@??@?@?@?@AAA@A@@??@B@A@?@AA@@A@@AA@@@A@?AA@AA@AA@@A @@A@AA@ABA@AA@@AABA@@@AA@AAA@A@AA@AA@BA@ABAAABAAABAAA@@BABBABBBCBBBABABABABB@BACCBCBCCBBBABCBCCCDCBBCCBCCDDDC DCCDDCEEDDCDEDDCCDDDEEDCDDEEDEDDEDEDDDEFEDEFEFEF EFEFFEFEFEFGFGFGFFGFGGFGHGHHHGFGHIIHHHIIHIHIH IIIHHJIHIJJIKJJKJIJJKJJKJJKKKJKKKJKKLKJKL3KLKLLMLLMLLMMMKKLMMLLMMLLLMMNMMMNNMMLMNONONONOMNONONON +OOPPPQQPPQPOPPPQRRQRQQQRQRSRQQQPQQSSRQSRRRSSSTSTTUTTUSTTTSTSSTTUUTUUUVUV"WUTUVVWVVWWVUVVWWXVWXXVVUVWXXYXXWWXYYXYYZ[[[ZYYY[ZZYZYZ[[\\[[[]][[\\\[[\]\[\.]...\.//^]]^///^^./^/00/0/a]^\_2AF<61,,,..A7BMJDC91,(%%.;JF;=D%$!92./8@@=@:=A!!! ==@!$%%$'''&&'$#$')*('&'&')*&$&('''(L%%H%&))(((&%JHDA@BDD@730/+,47.9,/-,*,..00.//.,..-.0///0101//-0245677677875433663223232221Q0343320./-.101110/001/,./0--.011120023332478  :9747!!  !#$"!430+,...-+,-,,..-/1100/1122456415632236307<:78:>><;<93/.,),*+-*(),+//5873311/3:@==<70.200-,121;Nd,'+-0g=Riۥv{Ub^G\j@C CDCBBCCCDDCDCDCDEEFDEEFEFEF GFEFFFGEEFEEEFEFEFEFGFE DDDEDDEEEDEDECBBCBBBCDDDCCCBAABAABCCCBBBCBABBCCDCBBAA@ABBAAABAAA@ABBAA@A@AAA@AAABABBBCBAABA@A@@A@@AA@@A@AA@@?@?@@?@?>?>??>=>>>=>??>=<<=>=<=<==<==<<===<==<;<:;<;:; :::989:::9 8899788777887876767656545454543343e322232ddde2eecdedcdccdbcabcbaba`_`a_aa`___`^]^^]^^]]^\\]\\][ZZ[[[Z[ZZYZ[ZYZZYYZYYXYYYXYYXYXXXWVVVWYXVUUWYWVTUTUUUSSUTSSTSRQQQPQRRQPQQRQQRRQPQPQPPOPOPPPOPOOONOONNOONONONMNNNMNMMMNMNMLLMMLLMLMLMMLMLMLKMMLMKLMLLLMLMMPQUnFyuniiqB$9cc_375c^[\VXWSVYWeusXLK[xVYRP}O87@GJHC50(#$"#&)3@CABG)N@C==?"#"A<5123430(/3/  9 (/1+().10..057625;<=#%#  !2#"  !##"!"!  @<==<;:;76:>@9/8>@ #""!!#&'*+)(#;4:?!!! "%$$# !"!$'%"$%%&'&$#%'(*.(%$(*(('&&&%%#"%&''()+)((*#>&'0/)%73,*'),1;%"9.%!"! &(&$&%(+)*('u%'+*((%%%'+0: %% =40)')'&&%$#!"$$'-8'*000//356520.*+-,-..-,.0/..+/210/.,)(*-,*).0.,,++./.,++,)! %,*'%%$JD@:0..,+-+&$F#"!9!142110-)F;78>@HMQRPUZ_VTUXWUQMQPW264`ZVE@V[UZVPKHIBVVZ_WPKHHJINMM59=<>E'FBAD%&G=CRRORLLLD@EHOLGLMLJJEDJMD5/.--16F&(&$$,75530023!!-4*9 0,( %/00,."$$)" #,)(" "-%$+-.)#    +  +$$ 4*+%2) !$&***! $ 2./4  )Am~6&>0ʄJڄkƞgR(17.% &"-+'%"    $! &             + + +  +  + + +   + + + + o$C). ;'(&%1:JM@DZ-095-&*#347')('D:/D8<5"3.)#&,3(#"#&!1>2('  ""# % +  ! 0  + +A  + +    + +   + ) +  + + +  + +  +  + + +      %    + +  +    +  + G  + + V" ' $',/03268<5358530-14:"##@<=-&6:7773-./)68=A:53/024887|}|}|}~}~}~}~}|||}}}|{|{|{|}|}||~ ~}}~}~}~}~}~~}~}~}~}~}|}~~~Ѐ ~~~~~}~}~}~}~}~}~}~}|}|}~}~}~}}~}~}~}~}~}~}|}|}| û抗ぎά¦冯Ľʱ䕘׋ـԵ̺Ⱥw>    + +      !0ɼ€ սֲч b  #%###"#"!!"""##"! "###"!"""! !!"!! ! ! !! !"!    #0חʿٞ؍͘ʂⲣ½ķšKúɻ<ڽʿƀPXVW_b5c^e588h[Xgnnlfff_\X]c`_eh6mka_aXHABAGLQ28?=*83,926KLO7UFOO=70+3787-1:@0+,;NLOOP<:B116=<>MCBNE=:;:>76:/+.**+-01YIKQV/O,2]Sjq=<<=>==>>?=> ??@@ABBCBBCA@ABABBCBABABBCB CDCCAABBBCCBCBBBCCBAA@@@???>?>?@??>?@@?>>>??>?>>??@??>?>??@@??>??>?@??@??@?@??>??>?@?@?@?>>??@@?@@??@?@???@? @@@???@?>?@@@??@???@@?@?@?@?@???@?@A@ ?@??@@@??@?@?@?@A@?@??@AA@@@?@ ??@@@?@@?@ A@@@??A@A@A@@@?@AAA@@A@@AA@?@AA@A@@A@A@A@A@A@A@AA@A +BAAABABAABABBAABABBCBBABABBAABBAAABCBABCBCBCBBCCBCCBCBBCBCBCDDCCCDDCDCCDDCDDDCCDDEDDCDEDEDED EEEDEEEDEDDDEFFFEFFFEFEFEFEEFGFGGFFGFGFFGFGFFGHGGGFGHHGHHIHIHIH"IHGHHIJIIIJJIHIIJIJJIJIIJKJKKJJJIKJKKLJKKJKJJJKKKLLLKLKLKKLLKMLLLMLMMLMLLMMLMMLLM +NMMMNONNMMNOMNNONNOPONNOPOPPPQQPPPOP QPQQQPQQRQ RRQRRRSRQRRSRSQQRRSRSTSTSTUTSTUV UVUUVVUUVVWWWV WWXWXXXWVWWWXYYXXYXYXYYZ[Z[\[[\[\\[]\\]]\].../]/^/..^^^//^/000///0//0/0aaV]TW3;:4,-..20*H@AGLB60*((+.5KJ<:?$E923548<:;?=:9>>;=B?BB"!@!#$&&$%%(('%%$$&*'$&'&'(((%###$F&&H'&FJ((''&%&IEEEDFFICC?.,,.036:7031-,++-...+*))+,..-,++,-0121223235558776555664343356665321221$0/.---01355321244200010/0.010014667: +!  D;6458   !  !"!!!8410150+-,..,,-.//0111211123553/53R;6259:7679=<<<:83+()()+*)''(,.059<963012049=?@8,(++)()167Bl9%,-/2a`[ZmdyTl~CBDCD EEDDDEDEEDEEDEFEFFEEEFEFEEEFGGFEFFFEFFFGGFGFEFGFFEEFE +DEDDCDDEEFEFFFEDDCBCDDECBCBCBABACBCCDCDEDCBA@BBAABABAAABA +BAABAABBBCBABABA@A@@A@AA@A@???@?>?>?>=>>?>>=>==<=<<<=<<=<;<=<;<;:;:;: 9988999898998787877767676676765454 +3444333432323d2e22eeed2deddcdbbbdcbcba`aaa```_```__^^^_^]]^^^]^^]]\]]\\[\\Z[ Z[[Z[[[\[[YYZ=YZZZYXXXYYYXYYYXXWXWWVWVWXWWVUVVVUUUVUTUUUTUUUTTTSTSTUUUTTUSSTSRRRQRQRQRQRRQQPOPONNNONNNONONNNOONMMNMMMNMLMLLMLMMMLLMNMLMMLMMMNNPOHzyqkmh3%)Sh345ebc\_ah`SP]aXSCwHOvWRPVMIw}F6ZU=BIBU4((@H6LnGAC9;ATAWA=964/Y05cYLZ_U[lu;;76=<;;95^RIER7AC><:7/($##"$/8AEEBADJ)M?0.5BG$%&%$$"@A>>;<=:;>><::;??;8/6<>!! #$))-.++($>>!!!%$$'((&$#$%$### !##"###&$"")++-'%)+,.*&&&(*&$%&'&"&))&(+) )1,' 4.'('),1:B=4-)#"!!%&%%&(+../-+))(('&'%'*.7=<941-)')('%%&$&""#"'+2C(,2220.1653/--.,..,.../.--0/-/..0//,'&(.10-/10.,,---,**++-*&#:$($D@?=95/,,P)***(&%#" : '+)*-/.+&@858C"%'LC@JPRPJJJEDBEKIHNN(NLFDG>1,+,243!$22-&0333531/ "%)2%3(10"$&*)*()$%!(1'#&''"( +..+   +    #3- '#%, %*, %$"!/(.35)=Nm,)Z >T@ń8Ȅ̄υL݄_]FE&+)#+7"#).&$$   !  "! "# "    2   + + + + +    + + + + + + !d -Q'!#%'EXKQ]RcjbHr[Ԙ5b + +~a˅ɄȀǬh^0VRRKGLI46535356;801:?96)K12Q?:;@95U[c-":1"',(?Q+/-#.B-*,%(+6(7))&%%$?!#@9/9;6=EL))((,+.-'"=4..8%*)'$+'+>:)""" (-(2-!"  !! +  ! + +   @  + +   +   +   + + + K    + + +   + + +  + +   +     6!$(++00/11.-/530,*-36>!#?=H6%297950/91(3620--/2654|}|||}}}|}|}~}~}~}~}|{|{ |||{{|||{||{|}|}|}|}}||}~ }~}~}~~}~}~~}~~}}~}~}~}|}~~؀~~~~~}}~~}~}~~}~}~}~}~}|}~}~}~}~}~~~}|}|}| 򀁏ʼ܀ݻ֨㳹{˝燙į–ƿ­<   +  +   + +      "0󀌌̺Հ¬òʯȮ劑Ąy&  +   + + + %%%$# $###"###"!"#"!""# "##$#"""#"! ! ! !! ! ! !  !        +"&ص󜔉¢Ɋȸ㳋ೣƬ͹ǽŸ戓Ͻڴ +ʹĿĀITZ`5452^358:5[bho:hg76:d]1015679mb]a_ZQT/57:@ECELHE>?EFIMKHD//9HHK583X462F0;=KDRK7I0%3552+.:70*)0HLJL+HCB)+5<;>??A@<:C=9@'TIBB=-DNPPA5 )$#! #545029;46DHID&+.1/KAG>d53:35*EG]32X753PEBOOE:9::AFFOU/36<==>=>=>??>>?@BCCBBBCBA@ABABCBABCBABCBBBCCACCBBBCCBCBCDCCBCCBCCBBAAA@@@?@??>>??>??>?@>>?@?>?>?>???@@?@?@@??@?@???@@??@???@??@?@@?@?@>@*?@@?@?@??@@??@?>???@@?@@@??>???@??>??@@?@@?>@?@@@??@? @?@@???@@@???@?@?@?@?@?@@?@@?@A@?@?@AB@@??@AA@??@B@@?@???@@@?@A@@@???@??@?@A@ A@@@?@@@AA?A@AA@@?@@@AA@AA@A@AAA@@A@A@AAA@A @AA@A@A@@ABABAAA@@?@ABBAABACBAA@@AA@A@ABAABBAAA@ABACBABABABABBBCCBCCBABCCBCBCBBBCBBCBCBBCBCBCBCBCBBCCBDDCBCDCCBDEDDCCDEDCCDDDCD,CCCEEEDDDEDDEDEDDDEEEDEEDCCDDDEDEEDDDEFEFEFGFGFFEFFFEEFEF EFFFGGFFGFHHGHGFGHHIHGHIHHHGHIHGHHIHHIHIJIIJIKLJIJKKJKKJKJJKKKJKLLKLKKLKKKLMLMNMLLKLMLLMLKMMMLLMNONONON ONNMNNNMOOONMN#OOOPPOONOOPOPRQOPPOOOPQPRRRQPQQRQQRQRRRSRRSRSRSTSSSTSTSTUUTUTTTUVWVUTUVUUUVVWWWXWVVWWXXXYWWVWXXYYXYXYXYXXXYYYXYZYYYZYZYYZ[ZXZZY[[\[[\[[[Z[[]]]^^\.\.]^\^/.^^/]]/^/01/010/000/`cFmVPRU172//20/.)B8?PQ?80+,)-/0;<::=?=8699<:69@A:7<:=@=>B!"#AD$&(&%%%''&&%G&*)%G'((+&&*&#B@EJ&KKL%I%'''L'&%HECEGHHFA7+,.p14567:50342,),.,''**),,++---/0212233322557776555777554457663441124320/./.-/4422556445547;51020../36677;<;;  ;6247:96   !! ##7761/,)+/.--,,/0./00./11311143-164428:557[6798;>:2,&$$'**&%$)**+3;;<:;;3,*.477==5+'(,'&(0:=F=*,/01a;z[I`V}_e\o?BCCCDDDCCCDCDDDCCEDEDCDEEDEEFDEEEFFFGFEFFFGHGFGGGFGFFEFGFGF HGFFGFFFGGFFEFGFFEEFFEEDEFEDDDEF EEDDCBDCCDCBDDCDCBBCBCCCBCBCBBBCAAACBCDDDCDCB AA@AABAAABABABABABABAAABA@@BA@?@?@??>>?>=>?>>>=>=>=< =<=<;=;<<;;<=<;::;:9:988778998767676765 +65445454454 5554433343232332 efegddedddcd ccbabdcccbcbKaabcca``aaa_`ba``a`aa_^^^_^__^^_]^_]^]]^]]\^][\\\[Z\[\Z[\[YZZ[[\[[ZZYXYZZZYZYXWWXXWXWWVWVVWVWWUWVWVUUVUUVUTUUTTUTSSSTSTTRRSSRRSR QQQRQPQQPQRQ&PQQQPPPOPPQROPOPPPOOPONNOOPNNNOONONNNONONNMNNMNMMMNNMNNNMMNMLMMMLLMLMLLLMLMLM +NNMLMLMMMNLMNL{|xroqS)Ni673d\^iQFOcSNIYVEscY>wGJKL\ME{CC98PP>AHq<7"O<)5.CA>5-)-/1=aSLQ@;GS^ZSfuzs9`-&M@aFF=:9::;:FVYQIU^aaL7^99K<[*HG?743274'*/-)&$%&)2?ADFB>>AF$"@%+EQ*&%$$%# A:1-$!" #.%'%')( ! !! !!"  $*,+),,/,.379978"%%$#!!! .+!!!"#"! "#!!!!""" @=::=@A>CA?:>>>?;<;7A  ""&(()**,)&&$!"'('()'&%&'''&&%!&)&$##$"##'++-)())-3-(&%#&(%(()( "%&(+,.4)*)#?2/*''))-121/-*)$#$#  %'$'),.--,/+))((*-.161 +/-)%#!#$#!"%#%'%(/:%)/140,0441.-./1/,,.0/-.0.---++.*(''*/2401/0/..-.,)%%)+-+)'< ;<:94/---++*('%#" ",,**)*..($;5259=FIHPOO*QHHMSSNHEDJT^bc]W\R;HUX\VMQYKBI\c^ +WLDC@BDJHE27:=!"$!= "$'$=A@;56 "#%&.,,%(/0463,)#'"1#%(,(2-+$)%'$ %2.(*~# )""-*)   3!%.1)%!!#'*"##00/-).236$+0Id5Y( yDžGτԅՀ[W慒UEA>#("'#22# O "#"%"!!#$##        +  + + + +  +  + +  + + !%/+!$%%D/nLBQItVVuo] ?*%PЅ΄2ƄǀŲmc`YSRKJO:$'@82;BBC/0#!2#5.*$!!$ #   +  + + @  + + +  + + + + + + + + { +     +     +  + + + +   +  +  j +  (*)--,-)*+01.,'(-49:;88?8%.89<8/17/'-BICDLFA?/4C',8820O>44B3==K>GD?#!8#"95=EBAJOFMK<8?;7<9:10-]]W064;983<:AA===<>COR+19>E@:10770(**,,)*+-/QFLSWMA@FD=> ?@>?@ABBCCBBABCBBBCCB AACBBBABCBCB&CBCBBABBCDBBBCBCCDDCCBBCDCCBBAA@@@???>?>?@???@@?@??@?>>?@?@???>>@?@@@???@?@??@??@@???@@@?@?@@?@?@@???@@??@@@??@?@@?@ ??@@??@?@@?@?@@@?@??@?@?@@@?@@?@???@@?@??@@@?@ ?@??@@?@@@A@?@?@A@???@A@A@?@A@A@A@ ?@@AA@AAA@@@A@A@@A@A@@@AA@AA@@A@@A@ABA@ABBAA@@A BABAABAABAAA@A BAABACBBCBABBABBABBCCBBCBCBCCBBBCBCBCCBBC'BBBCCDDDCCDCBBBCCCBCCDDCCBBCDCBCBCCCDCCDCD EDDCDCCCDDDCDEDDEEEDEEDDEFEDEDEFDEEEDDEEEFEFEDEFEFEFEFEEFFGGGFGFFGFGGHGHFGFFGFGHHGGHHGHGHIH IHHIHHHIJIIJIJJIJIJJIJIKJJKLKJKKKJLLLKLKKLMLLLMLMMLMLMMMNMMLLMNONMNNNONNONNONNOMOONO POPPONNPNOPPOPOOPPOPPQPQQQRRSQRRRQRSRRQQSSRRSRSTSTSTSTUTSTUTTVWVUWVVVWVWWVVWVWVWWXWXXWXWXYYXXXYYZZZYYZZZYZ[[[ZYZ[[\[Z[-[\\\]]\\].\.]]]..///../^0/0/000//b_e`SNNP]:0,20./,N86IPK?7/-,*,,.=GB=;:8425==88??:79689<>?<8=D%'''%##%(('$$&%(&%&)***&()$EBBH'&DE&%GHJ''%&IH%GGHIJ$F7,,//05*553413863,+,+('***+*++,/2/13233432334556667;886776777554112234432357334564245445544333123214688::=  ! ;;9:9655887 !""!91,+*+,+*)*+-//.//00123323421453357544345567::;=:1*+)&#%'&#""$&&*3684(((+6:89:6.*')(*+8BJO8+-022jcjKTo}bwvrCB BCDDEDDDCDEDDEFFFDEDEDEEDEFEEGFEFEFFGGFGGFGFGGF EFFFGFFGFFGGFGFGGGFFFG HGFFFEFFEEDDEDEEEGGGFFEDCCBCCCDEDDCCDDCDBCBCBDCBCBCBCBDDEDCBABBBABAA@AABCBCBBCBAAABBABABBBABBBAABAABA@A@@?@A@?@?>>??>???>=>=<<==<==<;<=<;<;9:99:::98988999888998988987878776766767667666566656555465454544455434544343343323323233edcdcbabcbccbcabbba``abaaaba`_`$__^^^___^__^^^]]\]]\\]\\\^[Z[[[Z[\\\[ZYZYZZZYYYZZYYXZYXXWYWXXWVWWXWWVUVVUVUTUSRSRSTTTSSRRSRQQRQQRQQRQRQPPQQPOOPPOPPQPOPOOPOPQPPOPONMNMNNNONMMLMMLMMLMMLLMLLMLMNMMLNMLMMMLMMMLLMLLNNON`s|vrlm<5Ff7::7^;DP<)7AP=850*(ONPT-<]tWNOGHONF:>AEkxBL`VN,28=@CKIKMLNLKC:6g:M<974012325Ov6+//-)''(*,3:>?=:;::=@;;>@>AA>:=>;=<<@@: ! $" %)*((*$#$#%,,*,*'%$#$$%&&%%$'.)&%%&('*,(')*+*'*.+)()'#('%(,,""##),-/! $%(%7//-,---.,+*)))*'%%$"#"&)*))*)()N+..121980*&$""!!! !!### #&((*3=$)..1.*.35/)(+./0211.,,-./10.**,,+('&')+,.01110/--,*'"'*,,+'>;41783-,*P,)&$#! ;<=!%(*,++.0+(!3679@EH&()+'LLINPMHECFPZZYUQWO8DWTSWST/UDIX/V[VIGBADHDF !$"!!#(((-32%"'!!#$(+-)+2++2.(!!!*&'+"(%!+"( $"$* + %+//,$!*",(' +  + +  !15.  '' $"+%+-2,%'-*%'GPe⑞;/$4Az3ĄkЄπͩmKA<;C* /+0+"'" -!!""  !#$$!    + + + + +  + +    + + +  + +   (19% #$"I`W@K`oVgc䜥*ng/,%\ۄԄJȄ.DŽƀŻrm[XTOKJP-)4J$$# 8!(0% 0%*"(2/WC/?/3RT4:8/S&61'0*++!%;9'62)(%#"",.29&AR8680176/+*+0NQ.3I:f6"&),-3011H010-'!="*!,E"&'& )      + + +  +  + +    + +% +  + +        +  + +  + +     +          +!$&,**)-0-)(%&-3344295#*8535212&+57:5,(''(*()}~}~}|}~}}}~}~}|{{||{|||{|||{{{|}|}~}~}~} ~~}}~~}}}~}}~}~}~}~}~~}~}|~~~~~~}|}~}~}~}~}|}|}~}~}~}~}|}}||}|}|}|}| ºͺŻ̅Σ񀄃}ڬ޷Ľø󈏂ĺԾ퍒ة< + +     +  +#2ɻƽӀֻijȲѭv$    +   ##$##$###$$#$%$#"##"!"##$$##"""#"# """##"!!!"! !"!!#"""! !"!!!  ! !! +!      +  )ʘʽ̏ߴ혗θıǹ܂؁ϩϷϾ򆔟½ +10.)&')/-+19<;KOTSU,(.1.QE8568910;A9689766679<=A<B:9C(1<<41/L?72<2;;Q9=EIRM5.&H.4=0.0/-0@D=L?A;12767C@??DHHK*../.QD9218<9766;AH')HD@=#3MRVB0#)))!?C'* 8 !$)%KLOKC;<@?D?5.8+6.[TZZ3?=GB18?=??<@CFEQ,/5EZM@6-IIQ).-XNHNL24/TFFLL]M9BKH=`fwK><=<=>===>@@@AABA@ABABABCBBBCBABABCBABCBBCBCEDCCBBBC BBBA@@???@>>>?@@>?@?@ ???>???@@@?@ ???@@@?@@@?@???@@A@@?@@?@@@???@?@?@@?>?@??@@?@A@A@???@?@?@A@A@?@AA@?@??@@A@@@??A@@AAA@ +???@AA@@??@A@@@A@ +?@@??@@@AA@A@@AA@A@@@AAA@@@AA@?@@A@@AAA@A@@A@A@@AA@A@A@A@@A@A@AA@A@A@ABBAAABBA BBBA@AABA@ABABA@ABABABAABABABCABBBCBABBCCACCDCBBABBBCBBCBBABBCBCCCDDCCCACBBCBCDCCDCBCDCDCDCDCCDDDEEDDCDCDCD EDDCDEDDEDEDDEEEFEDEFFEEDEEFEEEFEEEGFFFEFFEEF EEFGGFFFGF GGGFFHGGHGGHGHGFHGHGHIHIHIIHIIJJIIIJJJIHJJIIIJKJKLKLJKLKLLMKLMMMLMMMLMMMLMLMNNNMNMNLMNMMNNON%ONNONMNNNOPOONOOOPQOOOPQPQPQQPPQRRPRRQ +RRRQRQRQSSRSRQRRSSSRSTTTSSTTST#UVTSTUTUTUTUTVVWWVVWVUVWVWWVVWVVWWVWXXXWXXYYXXXWXWYXYZZYZZYYZ[[YYZ[Z[ \[[[Z..Z\][\\.\]]]/\..\.\]]\./.\/00///082---,*,5;>?86:7107<=:8:84234:;:9:=75.)&++*.8ICH0-./2baW{j]mFBCCDEDE DDDEEEFFEFEEF EEDDEFEGFHGFEGFFGGGFGFGGGFGFFGFFGGHGFGGGHGFGHHGGHGHGFEEFFEDEEDEEFGGGFEDCDCDECCDEDCDCBCCBDCBBBCBCBBCDDEDDDCBBCBBBABBBABABABBBABCBBBAABCBBCCBBABBBABBCBCBABCBBBABBAAABBAAABAA@AAA?@??AA@ ??@@@?@@@?>?>?@??@??>?>= +>>===>=<==<.=<<=<;<=;;;<<<;<;:;<;;::;9:99::9::99:::99:98:9899889878778876776677667656656655654544545543323+4422343322f332eedefgfg31dcccbbcbcbbcccbbba`aba`a``_(^]]^^^_^]^^^]\\]^\]\\\]]]\\[\[[\\]][[\[[Z +YYZYXYXZYXYXXWWXWYXXVXWWXWVUVVVUVUTUTUTVUVTTUUTTSSTSSSTTTSRRRSRSRRRSSRQQRQQSQPPRQQRQOPQQPONPOOOQQPPOOOPOQPOPPOOMNNNONNNOOMNNNMNMNMNMNM LMMNMMLLLMLKLMNMNNONNywvqjoLl<9SlUQFECJC98>;JJ@2#>@<1+(%$%KNM)AT[[OGPXRSCELW;Zif_dW+?9?KFJMJPKQWKG<4XYT50.03|434548C;0(-20*)$$&+29>713DPSV-.+L>/:O/K#!5"'<+8@==3(  !$$#!  !&&&) $&''$#"!"" ! !!!"!"&+-..-/18@EE"#%$#""! ! 7 ! "! !!! !< !C=>?<;;?<;<=<>9!$#! '% "!"$).-$>$+./0,)(&%#!"###$%%+-('&'(()))$$'*)((***)*,)%*&),+%# ")*2*A&-1%2/+./0/0.*+*(()($'&%$$$%!'+-('%#$%&),1.,-23,("!!!""$!"##"!$')+2<$/11//*+144-)*,/0431//0,--./,))+*++'"&)+-.--.00/01//.-,,,&'b)+-+*A5(%$,/))*),,*%##"  A4/39%+--011-,&9!"#%'*(&JKMS+OHHCALWVQPIMLEO-TH*-/3,'*./)*-(''FA#$) "%&""%"!$$&,60.>5('%%!# )%&2!(,2/!#$!"$& " ),- +     +,43%!%%%0)"'+-,)$($+&&-*3) *2.#FS_ * K…4¿Åʄʅˀ1xHTC<86A":2 '("N  #%&" ! !"$#    + + +   + # +   + + + +  + + +  + + + + d -7:!"$;Sp|Ke^NcaVk#C̄ńƄǀī{]VROJHO1M,&&))(32@;3%41--N>'I05<[+-00'&+72-$"#)#$$14/-$5/*#566.8;90,4;:<-/4:'BLI=?a@-)-4024172680/& 8<7<2%%---#(      + + +    +   + + + + + +  + + + +   +       +  + s  +  + + +    +   j    + + (++0.)(%"+21/0.1/,0.&"}~}~}~}|}~}~}|{{|||{|{|{|}|||}}}|}|}}|~}~}~}~}~}}~}}~}~}~}~}~}~~}~}~}|}~~}~~݀~~}|}~}~}~}~~~}~~}~}|||}|}~}~}~~~}~}}~}~}~}~}|}|}|}|}||}||}}} ö̿䋎΂תy׺Ȼҭ܁±οõ̸ҙ4      +   &dҽ˿żjĿ³ȷ.¥ʍdzc+ ##""$$$%$$%#$ ###$$###""#"#""#"###"# +"""! !!"""!"!""!!!"! ! !     +L߂ݚɔµㅜ͇ܿչ쌗ờ灒̿݁´5/&(-25>8/+4;:F()),,**(LJA7552.+.9;887789::9:>D?>DLJH[\KBECAA%-08841/M;:62E7>8Y?@.SOM4-6?07:2$#395;AE@HBB7/242:x&(355459=D&)IB?=2>LTN>.2&1.04/"$!#'/.&":>$%:5'*FTG6.50,V.018?@>;>A;89@EEFHN)-8DMC:1+IEDA=ID=HINT0/RKBDOYUJ@??:EYvNVH=>=? +@@ABBBCBBBABCBCBABCBCBBBABCCBBCCBBCBCCDCCCBCBBAAA@@@?>?@??>??@?@???@!?@@??>?@?@?@?@@@?@??@?@@@???@@?@?@?@@??@@@???@??@@??@?@??@?@??@@@?@@?@@@?@?@??@@A@A@AA@A@??@?@?A@A@?@AAA@@AA???@@?@@@?@@?@@@A@A@@@A@ AA@@A@?@@@??@ A@@A@AA@@@?@ A@@@AAA@@A@A@A@A@@AA@AA@AA@@A@AA@AAA@A@@@A@AA@@@A@AAA@@A@AAA@AA@@@A@@A?A BBA@@AAA@@@AB AABBAAABAAABABABBABABABAABBABAABCBABCCCBAABCCBCBBBCBBBCCBBCBCBBCCBBCBCBC +DDCCCDCCCDCDCDCDCBDEDEDCDEDEEDEFEEEDDE FFEGFFEEEFFFEFEFGGFFFGGGFFFGFGFGGFFGHGHG +FGHHHIHHHGHIIHHGHIHIIHHIIJIJIJKJJKLKLLKKLKKKLMLLMLMLLLMLMLLMNMNMNONNONNOONOOPONOPPQPOPPQPQQRQQQRQQQRSQRQRRRSSTSRSRRRS TTSSSRSSSTUVU VUVVVUUVWV WWVVVWWWVXXWYXWXYYYZZYZYZYYZYYZZ[[Z[ZZ\[\\]\\[Z[[...].[\ ]..].]^\]/././/0//./00/0I/001010100/000abfVQMJJD>:AGIMNIADRTJ>410-+&)1158<;73973;?<;>;88658;>>AD#(G%'('%%$&(&#F'))+))'H?&(IHB@B%&%JIICBDGFDDDEFIK&C.+.1333671+*+,/220-('))*(,132123330//037897788898;><<<:::730-..00/...---,,,-00//010//./369;;<<:;>:9656656:9  #" 81++,,*)*,,.--///255543531134N3453356652-*()+)$$%'(*//'$$%'-5=5..,-/4=BC?754*(**'+2SIX)-13d4unW_P{_`eyu\eICDEEEDDDEFEFEFGGGFGFGFGGGFGHGGFFFGFGHGGH JKJIHHIHHHGFEEDDDEFGFGGFEDCEDEFEDCDCCCDDCBCCCDDC"BCCCBBCCCDDDEEDDCBBBCBBBDCBBBCBBBCBABAB CBCCBBBCBCBCCBBCCBCB CBAABBCBBABAABABAA@ AAA@@A@@?@?>>??@@@??>??>?>>>?> ?>==>>>=>=>=<=<;<<<; +<<;;;:;;:;:9::998989878887876765655656544454343444343222e233feeedccbddccdcdcbccbab%cbbaabaa``b```aa```__```___]^_^^^]^^_]^]]\[[\]\]\\[\\[\\\[\[Z[ZYZZYY[ZYXXYYXWWWXW XWXXWWVUVWVVUV%UUTUUVUTUVUUUTUTSSTSRSTTTSRRSSRSRRRQQRQRSQQRRRQRRQQPPQQPQP OPPOOOPPPOPONONONNOON ONNONONMONNMNMNMNMNMNNMMNMLMLMNOO]gxotqjpy<:qABB@g]bliG;@BK6WK?cQMKHJrEGB0G:BBBEEA?3--/144334443,(,22/-+**(,3/)'5DJMPQR(%F4@IIAIJ>;?35AC#">4+ !#"$%$%" "#$$$""$$###!" !&,110-+/3;!#%&%$"!! !V !:  ! "!! ==?@><;=>=;=@=<<<>CAA> ?"$##*)"#"C%,/,'""#&,.0-(,1-*'$"$$$(+(&$%&&&)**'%&())(')+,-+)+*(&$((#!! '%7*0);/--+-.01-*-+*('&$''(&&&'&"")''%!#$&(*/$!"! !! !"!!"#$&(*/9!-4300-,./0/-",0/24311101/,+,-*()))('&&))*+,-,*./k--.../.+#%()*(?0$" ())*+*'$#"! "A5023#&,./121.,% ! !%($$&%#$%%'QSLGFC>IVVTZ-Y,*,003;?5/*-210-))/5-'%-01  !"!(&(/522?9,*)#,#!'#9$#1./$  #$# !!#&)+#  +$(-(  +  + +   .$# %)"#$&'"(#!)(-/,)%$-0+)(*($,CYAo + &, '<)Ʉʄ̄ ̄΄φ ЄՅxT~PB:65,%#).032+"#/3+! !!! !  !%&     +     + + +  >;9 ##=#m[|HQOoOQ_lh]''#, -Hم:̅9DŽɅǀǾrhRKLHGNS+'J+++*@7>FD.$*(3'<.&>1121/KB)-$0"&"#%&$$!5"3%(87)&#!6"0<8109@(M4<;'6A81)N6?7D;,1.-21)-.+ -(6:D/4'%(())&!$   + + + + +     +  + +   + + + - + +        +     + + + +   +   4    + 3+.+(&$ &/0/44 }~}~}~~~}}}~}~}~}|{|{|}|}|}}}|~~}~}~}}~~}~}~}~}~}~}~~}~}~} |}~~~}~~~߀ ~~}|}~}~}~}~}~}~}~}~}~}~}~~~}~}|}|}|} ȫ̿ґӪȵ{ױԶѫڐ”Ͽ˽ɳ񳒌/      +   )`ŷƷɀľоɸO   +$##$""#"###$$#$$%###%%$###"#$# "##"!!"##""#"!"!"!"""! ! !   !     "崛萖阅̿ζܾ­²卵۩؆ⳑķ↗䴫 ιր7433-28=?835B=ABH++*(MC3DC;@4)-+1655479:<;==<>CACHOQXXGBJKM"-49862020@8:4B>FBD?1'18FHFHLP.3\QJDCITKC@4)2644469B'+G==ABMOUH@432.:EBB..+%+464(!1&H@())*487( :3,-486:>E;?@:5;?EIJLG&.9EF<3,'JDGDCELGSQTh4/,(LN'/1VC:96FCiBiM?=>>=>>? ?@@@AABCBCBBBABAAABBCB CCBBBABBAABCBABCBBDCBBCCDCDCBBDDCCCBBAAA@@A@@??>>?@??>>???@@@?@@?@?@??@?@ ?@@@???@@?A@?@?@ ??@?@@A@@???@?@ ??@@@???@@@A@?@?@?A@A@@?@A@@@??@AAA@@?@AA@?@@?@AA@@A@@@?@A@@@A@?@@@?@A@?@@@A@A@@?@A@A@?@A@@A@AA@@@AAA@A@ABABAA@@AAA@?@A@A@A@ABA@@@A@A@ABBAACABAAA@ABAAABAAABBBABAAABBABABABAABBBAB CBCBBBABCCCABCCABBCBCCBBBCBBC BDCCDDCBCCCBCBDDCBDCDDEDCDDCEEEDDDCDCCCDEDDEDDCCDEFDCEFDDCEEFFEEDEEEFFEDEFE FEFFEFFEFFFEF/GGFFGFFEFFFGFGFGGFGFGGFFGGGHGHHHGGHGHGHHGGFHGHIHIIIHHHGGHGHGGIHIIIH IJJKJIJJIIIJKJKLKKJKJJKKLMMMLLKLMLLLMLMLNLMLLMLMMLKNMMMNLLMNMNNMLMNNNLMONO NMNNMNOOPN OPPPNNOOPPPOOOPPPOPQQRRQPQRQQQRQRQRSRRTTRTRRSSTS9RSSSTTUTUUTSSTVUVVVTUVVVUVUUVVVWVVVUVWWXXXVWXWXWVVVWYYWVWX YYXXXYZYYZYZY Z[ZZ[[\\[Z[.\[ \[]]].]\\\[[[\]/\^]\./..///.///./0/0/0/0//01000b^`[UNLJ617;:6>>89:714>#"D$%&&)**(('$%$%&&%&''))(*)(&&$''CCBE$?@$$GJICAIHDCDEEJML9634220++,01//./..-.-/.---/./0///1,00.-02359;:;<<;8678;<<=<;:7544678:; !# 4*),**)))*++,,,.0///./034243313555446534683.,)&&&%%! !$)))((&&)0433-,.136>BB;86782,((,.?JP+.2;5hgzv\xqxmdfrGDDCEDEDDEDE FFFEDEGFGFGEFFGHGFG FFGGFGGGHHHGHGGFGHHGHGGHHHIIIJKLLIIHHIHHGGGFGFEFFEFFFEFGEDDCCD;EECCDCEDEDCCCDDCCDDEDCDCCCBCDCDDEFEDDDBCBBCCDCCCBBCBCBABBBCBABBDBBCBCCDCBCCBBBCCBCCBCCCBBBCBCCBABAABABBB@BCBAABA@A@@A@ +?AA@?@??@@?@?@?>>>??>==?>=<=>=>=<=<;<<;<;<=;<;:<;;:9:989:9898778787876667765666555454 +54544454343233322e22eefeeedeecdccbcbaa``bba`a``a`a`ba` a_`a`_]]^__^ ]^^^]]]^^]\\]\][\[\[\\[Z[ZZZ[YXYZZZYXXWX WWYWXXVXYXXXWV WWVWUVVVUUTTUSUVUTTSTTTSTTSSSTTSRRRSRQQRSSSRQQRQPPQPQPQPQPPPOPOPPNOOPONNONOOONONONONNONNNMNNNMMNMOMNNONNMLMNMLNNMLMLMNNMNMNPul}irigxF~sDPUICFH'^;J;AAB@BB>;7iZ=]aHo?033+)!#%0114;DGG.Xa:<=?a`U;HRfI5Rb?:XlM@!""!#'&#"""#!"%! &/5520.00/3:"%%&%#! !! 45 !!"!"#%&#C?77:>??=;<>??@?<:?@==B>?ABAB"AA#""'*ID#"'/3)$D!%)/1.*(-111/.+)'&&&(--*)&%#"%'(*+))**()*+-,,,*+-*(%*,)#%s 1(*A01--+++--*+,++('%$&%&(('(&%#''"#%(+04 !! !!#$&))2=.53//00210**-/42...1220.0,++*('&'('%$(,+++,p/.--.+,//0...+'(&$C7,$! *-,('#""!!$#A88988"(*-0320,+,'$$!"%,+&'&"! #!#$MLH@<=FW-,242.04;=I-E+#%'(*1,'%-5-.268;! #!  !!!$*,/145:;/+,)% ",8:8!!#/,+$& $ !$ +!" "%*,'" $(" !%&,%  + +   + +  !#&!&&)%'&**.(//1@'(1)&%.2K.aӝ, +C6' -¿Äh˄΀$n=ͦhJ=:5""&&%*,20*(,0+! K !!"#  !#&%  "   (  + +  +  + +  + + , + + + + + +0C@"$*"Ff_sk[hXiZRe˟e + ܄ׄZʄʅɀʶjZEJBBP/QK(,,*%GNEJ$:*/1:$*65)&,7?&,#&$$#%%## 84"78.L'*+)%!'$$$&($%)0825#?B(()*@C;*.7Hk9%5?'#5H4.)+<+%42<3#* $#"%&'%!%)(%   +    +   +  +  +   +  + 1    0    +   + +<  + + +      ()&"#-  + +  +}~}~}~}~}~}~}|||{|{|||}|}|}||}}}|}}}|{~~}~~}~}~}}~~}~}~~}~}~}~}|~~~}}~~~}}~~~}߀~}~}}~}~}|}~}~}~}~}~}~}}~}~}~}~~}~}|}|}~} Ȭƿʿ튒س{̩Ҋߵ͸鱑Ų끕ŢЩÍ|0  +     + "/aŶȹ󂆅ɽtٿ햤ăQ"   "$$$$$$###$%$$#$$###$$$#""""##"##"""##$##"""#""##"""!!!""#"!"! !""!!  ""    )ꑻؑҮ쨳Ѕİ׿Ǣ髆˥¦՝ʼӵ񏻿­ͼ􀈘¾񀈉+߄ڀ꩕Z߀ǰ԰6442/179;826A=;:;ADBCDF@DDADK-.0<;;51.00H:;>CO07]TTKR4DEE2>4A@4-%"0ECADFCH=;>2/@DFDJRT-/B"/8AGIJE>;779751249B(OA;<=ALRQK>,*/-0E*.3<7&$""% (&>(!"$)+1418;330*39:869@A=87CDKFaCbb^Q?>=>=>>?AABC ABBABBBAAACBCBABAABABCB CBCCBCBBBCCCBCBCBCDDCCCDCBBBAA@@?@?@?@?@ ?@@@??@@?@A@?@@@??@A@ ??@@?@@@A@@???@@AA@A@???@@@?@@@A@??@?@@?@@?@@@?@@@?@A@A@?@@?@@@A@@@?@?@A@@A@?@??@@@A@A@A@@?@@@A@ A@AAA@@@A@?@AA@?@@@A@A@@@?@AA@@@AA@A@AAABB@@A#?@@@?@AAA@@A@AA@A@?AA@AA@AAA@@A@AA@A@@@A@@@?A@ABABA@AA@ABAAABABBAA@AAABAABB@ABAABBBABBABABBBACAB CCBCBBBCBBBCCBABBCCB CCCBCBBCCBABCCDCABCDCDCDCDCDDCCDEDEDDCCDEDEFDEEDDDEDE DDEEEFFEDEDE FFEEFEEDFFEFEFFFGFGFGFGFHGGGHHHGGHHGHHGH GHHGGHHIIHIHIHIIHHI HIIKJIJIJIIJIJKJKLKLLLML MMLLMMMNMMMLMLMONMNNOOONNMMMNMMNOOOPONOPPOPOONPPPQPPQQPQPPQQQRQRQRSRSTSTTSSTTTSTTUUUTTTUUUTUUVUTTUUVVWVWVWWWVVWXXXWWXWWXYXWYYXXYYYZZYZ[ZZY[Z[Z[\\[[\ [[\\[]\]]\\] .\..//^/..././0//0/01010/`[ZWSROA<;:8433BFAEIKMLG=6.*.10/.0,7AADB?<75348A$I#%&&'*+)(%$)%DE'())(G&&'('&'GG*F?CCE=?D#$HJHEGHEBDFF%&K<25335521/.--0371*,.0--1553221233124689;<;:<<;:8872/-+./..///0001/.-,,-./0/0///00234655899=>;::9::976589:;<<=<976447:;; ""6.(+,-,**)+*,-.,-../../01331233565455668;5,&%$$&%#$"EDE""##'.010,'%).5::AA@>857;;4+,-.1vR@(,01a~YwNIGdSEEDEDDDEEDEDEFFFEEFFFEGFFGFFFEFGHG FGGGHHGHHGFGHIIHHGIIHIIJMMKIGHIIHHGFG EFFFEFFEFFFEFGFGEDCDDDEDCEDEDDEDDCCDCDCDCCDEEDEDDCBCDDCCBBBCCCBBCCCBABBBCCCBCDCDCBCCBCBCBCBBBCBBBA BBAA@AAA@AA@?@?@@@?@??@??@@?> +?>>?>>===>=<<==<;<;:;:9:988998987878778767776565656545454333443f33ffe3ee22decdefddeccdcdcba``abba`aa```_``a`aa`_```^_^^^]^]^^^]\^^]^]\ ]]\[[]\]\\\[ Z[ZZZYZZYZYXYYYXXWXWXXXWWWVWVVWUUVVVXWVUUUTUUUTTU STTUTSTTSSSTSRSRQRRQQQPPPQRP +OPQPPPOOPPONONONONNMNMNMMMNONMNMNMONNMLNNM +LNNLNMNNLNMNOONnoijrw@CDBtfky@DnbT\d]2C=C>F5ADONE4;@ACGC@C<3d<^N\^BQO54EG/ HcE0# !%4GP\Ubcg8:74*1FI$"B<5/*%% #$%&'&'()(&  "%$ !"!#%! $-5442252458#%&%#!"!"!""! !5 "!  !"#"B?::<@>?<;??<@>><=@?==@@;C#AEDD#$DAHHHD#$)06(#F$(*/1-*(+221110/0/+*/0,))''%$&(()*,*)++*+,-+,--,.)$&)*---)! A=E7.021/..-(&*+++*''%%$%%'%'&%# "')$''%)0671 $  !!#&(.,3C874.0/3430,*-.2330010-,**)))*(&'(('(**,++-,++-/.-./-#'-/0.-)'$FB<4+$ ,U*'&%"!!#%%C<>??<;!&*-231/,,+(&%#&(*)+()%"!  $%&D=:;B)0/38;4469EPM6('(,7B9'(/36<@=9 $#$""%# "" ")---..'),)(*%& ;65-,#&(&& !$!$$!"")* ""%$))&    + !&&''%''+28/140/3*%,*.1C,L\@:(= +8%: +Q¿ĄDŽ)˄_چHeYC?9+$"#$"$$+,%)-.1.)"N!!  $        +  +  + + + + +Y('(ZA* #"9omHlBCB`%4>j5 )ل0τPɄƄɀǬgN@>DLSRP),-+KCEJ()@6+5:8*'(&-!&)11- #'&&(%"%!9#5,6;$.3#!2.*<1-40&'39<8B@C$&*%$01*N&U8)ELDK,RD2**27;?><<=>=;9:BDC@CCA7;BIS2;6:?970018/44<;=82..039EB:;9;;B*URHC)01:3?#$,4:8(*.7.&)%&?"&,0026)9@4(">7/8F409@:97=A<68I7FEC/&&'GABGHJLV/1XafOBD,0,-'%/K=>>A@?@@B AAAB@BABAB ABABCCDCCBCCCABCBCBCCACBBBCBBBABCCBBBDCCBCDCDDCDCDCCCDEDDCCCBBA@@?@?@@@???@@?@@@?@???@@@?A??@?@AA@@@A@?@ ?@A@@AA@?@?@?@A@2A@@AA@?@A@@@??@@@??@@A@@@AA@?@@?@@?@A@@@A??@@?@@?@?@AA@A@ A@A@A@@@A@AA@AA@ +A@A@AA@@AA@ A@@A@@BAA@A@AABA@AA@A@@@A@A@A@A@@BA@AAA@AA@AB@@AABA@A@A@AA@@A@AA@AA@A@@A@@AAABBBAAABA@A BB@AAACBBABABBABAB AAABBABBABABABCCBBCCBABCCCBCBBBABCBCBACDCBBCBCBCBCBBCBCDDCCDCDCCDCDDDCCDDDEDDCCBCDEDEEDDEDEDEFEDEDFEDEFEDEDDEFEDEFEEFFGFEEFGFFFGFGGFFGFEFGGFGGGFEFGHHGGFGGHGHGGHGH%GHHGIHHIHHIHHIHHHIIIHIIHHIJIGIIIJIJIIJIIJIJIJKKJJKKJKJJKKKJJLKJLKKLKKMLKMMNNLLMMNLLLMMMLNNLMNMMMOON,OONOOMNNMNNOONOPPOOPOPPOOPPQPPPOOPQQPPPQPQQRQRQQPRSSR SRRRSRSSTS TSTTTSTTSUVUUVVUVWVUVUVVUUVVVWVWVVWXXXWWWYXXWWXXYXYYZYZYZZYZZYZZYZ[Z[Z[[[\]\]\]\]\.\]^]\\\. ]/..//././0/0//0/0/00/0/010Q/10bPvVQQKB:9723-4A==DHKQRG?;750../.+'(-.6>A@?833683+,/00010.16991&)01212005533112332247=>;;>;89977873++,..-/0134531000/.0G.//00100011146557765589;7789989756688676899;::::;;74459<> <::;:98 !" 83**--+c---.-..00010113222454336967::2'""#'&###EFGH#"##%195.**)(-9>>7316:==A@8-*,,Dqd/-12e;pfxnZ@1FfЂD +EEDDDEEDEDEFEEF+GFGGFEFFFGFGGGHHGHHHGGHGGFGGHGGHGGHHGGHIHHHG!HGGHIHIJKJHIHIHIHIJJKLKJJHHIIIHGHGFGFEF GHHGFFEDFEDDDE)FDEDEDEDDEEDDDCDDCCCDDCCCDDDEEDFFEFDEDCDDCDCBBBCCBC BCCCBBCBCDDCBCBCCDDCDBBCCCBCBABAABBABA@A@A@@AA@?@?@@AA@?@?>>>??>==>>><<=<<<=<=>==<<;<;;<;:;::;:9 :::99::9898988998877877677677657655665655566555665445434343433343e322d2eee2ddeddedcccdbcbabcabaa`aaa_``_`___`_^_`_^^_^^^\^]]^]^^\]]\]\[\[Z\[YYZ\ZZ[ZYZYZZZ[ZY,ZYXYXXVVWWWXXWWYXVWVVXWWWVUVUWWUUUVVUUUVUUUSTSRTSRTSTTSRSRRSRSRRQRQPQPPQQPPOPPPOPPOPPOONOONOONNNOONONNMNMNONNPMN MNNMNNOMMMLNM NMNNMLLMMNMNMMNOS{^`ccaxFEDCsT`sq~ZT[ii\BM@7B'>WSVQIGI>FH@AA9W]m^W[MLGjUN_eEE@Too?;O#,=M]l`cmr;DC?BNTUH:>EEGNVPIFJID>1#3EGG#!B=3.+& + !#$$&&%')(% !$$"$%&! "$,1563744477>#%&%##""#"###"!"!! :@!! !! A@!!A!@AC"D?=6:=B?<=>BDAA>=>@@A??>B@EHCDCADFGGCCVB$%'.11)#$$').1-+)*/3210//04.,12/*('&$&'*)(()*'()*+++*+./00* ',)+1/*(##(242./23400.(%%*)((''%%&$&%%#"(5<" %)5:2* " ! "%)216?;83-1020/+../0234330-)'$('()))'&&&)++)+*)+,*().../..*)+)++(&HGD?;4(#"! %(%S$$!#&('A!"!"A=?!##.31--%%+)('%++*+-(*)%!!&$#";677=)16?O6+(.760)$"'('(&"#(),2C,(+7E>&&7 +5AD<=AC#**%(2791'(*,';>$)3010&AHI6::,&" "!  ' !"'+(#!#$"  # + +   +  + + + + +  +        +  & + + + + +   + + +    V    +    +  +  + + }~}~}~}~}~}~}|{|}|}|}|}|}|~}~}~~}~}~}~}~}~}|}~}|}~~~}}~~~}}~~~~~}~}~}~}~}|}~}~ +}}~~}~}}}~}~}~}|}|}|} Ɵ̰¾ľ⺱ћ򟸔νֱƳ݂ҷ󣳲ӸϾ̼⋠2 +   +   (hĭǵǾ ɷ򶞝ɇn#   %$%%$$#$$%#%$#"#"# $%$##"""#"!"""!!"! + !!! !"!"! ! !!"!!!   !    #aꁃûλ͔ҞǶǥ򆊀׸ʩĴ³¿َِ̻ʿͲC<8418;==:;=:97@FA:7+,??=978>BC?CH=DGGK-783/9F@3.03=K/6F)),15WSR4)?;=@C$:8F0!(%&/,<6.)+.3;J30898>KXWPTP,$#-6>%%%)4@VJ33-1*"=..*/1369))0($#"A@K@68;?<;895:;E2C:,(%@CG>=KNSV./27,PYRJCL--(+0)BKe;OO=<>?A@ABCBCBBABCBBCBCBBBCCBCBCBCBCBCCCBCCCBCCCDCCDCBCBC DCCDCCCBAAA?@@???@?@??@@?@?@?@@?@?@?@@A@A@AAA@A@?@AA@?@?@@@A@A@?@A@@A@@AA@@A@A@@AAA@@A@AAA@@AAA?@@A@A@A@AAAB@A@@@A@@A@A@@@AAA@A@AA@AA@AA@@AAA@A@?@AA@A@B@AA@BAABA@A@AA@@A@A@A@ABABBBABAABA@ABBAAAB ABAABBAABBBAB)ABAAABBBCBAABAABAAABBBAACBACCCBABBBCCCBBCBCBCBCCBCBCBBCBCBCCDDDCBCDCBCDCDCDCDCCDEEDDDEEDEEDDDEEED'EDEDEEDDDEDDEEFEFEEEDDEEDEEEDEEEDDFFFEEFEFGGFGFFGFGFFGGFEFFGFFGHGHHHGHGHGHIIIHGHHIJI HIHIJJJIIJKJIJIJKJKJKKJJKJKJJKKLLKKLKKKLLKLMLKLMMLLKLMLMNMMMLLMNMLMNNNMNMMNONNONONPPOPPPNOPQQQOPQQQRRQQRQRRRSRRRQRQQRSSRSRTSTUUTUTUVUVUVWWXWWVWXWWXXWXWWWXXXYYZXYYXXYZZYYZYYZZ[[ZZ[[ZZZ[\[\\[\]\]]\]\]...-.../.../0/0/0/0/00100100cat\SNJC9:;6207?A4;JMKB;8855420,,-*'(+3:9;=<;:?D%)##$$#!$(,)%$$%&'(('%&%#$$&*''%%FGJHB@BCCDEEFFEEGFEI&K&C850)*168754016<83,(09:4/+.14332346459<<>@?>73/3445667642/.%/0258763210.-.020.../011221235542678879765666556678877878;92899983379;:;;;:;:::99:;: "! 5.)+,y++,-,--./00/00/04520343345779;6+"!"%'$$$#DGFG$%&$+220-+*((,58<>;;8:::<=6/,.4KJ(/14Vwpr^S|2?OlvDDDEDDDEEEFFFEEFEFEFEF +GFGGFFFGGFG FGGHGGHHGHGHIHGHGHIJLMLIHHIIIHHHIKIHGFGGFFFGHGGGEDFEEDEEDEDDEEDDCDDEEDEEDEDDDEFEEDDDCDCDCBCBCDCDCDCEDDCCBCBBBABAB +ABAABBAAA@A@@@A@@A@?@?@?@?>=<<=<=<<= <;;;<;;<<<;<; :;:::;;:;:98988989887878887676556565654343343233232efffeeedded edccddcbcbbbab +aa```aaa_`a`_```_ ^_^^^]^^__^]\]\\\[\[[\[\[[[ZZYZ[ZYZ[\ZZZYYXXYXWVXWWXXXYXWWVWXWVWWVWVVUUVUVUTTTUTRRTSSSTSSSRRSSRSSSRRRSRQRQRRQQRQRQRQPQPOPOOPO POONNPONOONO NNNONNONMNONOOONNMMNNMMNNONNMNMMMNNMMNMMLMNLM~NNMOONPeMUW\mGEBAzeod\jdKJy9nXB22V?FYYVQJHIJD=CE@:6bX\RIUH@FC6qCH>:pg;@=eWTRfndjmYALX]>5677644565567976324..2/2688999;BQ10.)H8N[ZVH;>BC;0$.DFFD@=9531-'"! !#$''',,)&  "& !"$%$!".9<95320369A$%%%$#"$#"!"! 68<;<<>>@@AA@B!@"B?==:@@<==A"BkDB@CBC@BDECDC@EBACED$#%(*.20(#''%)-00/.,.0/0112430+0100*''&'()++*)('%%)+**+*-122-"$(''*)''$#*7'*,.0120/-)&%(')))(&%##$%%##,FC((:/!#&"#%+02705.-/232.-.01223343-*'$#$&'(+*))()+,*)(''*,+))-/--,/,**))(&$FCC@<4+$"#!""#"#&HA@@E#> A=<@%'-00.0'$*.,'#***+,,'("! %%'$!:332$68=KF0),0.)%*1;C>6+#*@IA<8; !'BB!&-,% !" $(+)-0'++*,(%&% 543 ', #!""$%$#" +!!  #,-)0-  '$`    $"! % '')+*21+%((4=#1-$5Hbw y; . &1 G ʄτ΀] QpK<4) ! !!&)( /2/&!V  "!  ! #$   1  +  + ' + + + +(+*+ >- !(Ry]^YMv{,F<5@9'+G!A2&5$(520.(()*%!%%# 5273.7-)-,%N-+"?*+9CA85'!(/(0424544%&"=8$'%<321DG=CH7(4=;$? !")"*11-$""  + 1 +   + +l  +         +  +  +J + + +    + + }      + +    +   +}~}~}|}~}|{|}|}|}|}|}|~~}~}~}~}}~~}~~~}~}|}~}~~~}}~}}}~~~~~~~}}}~}~~~}}}~}}~~~}~}|}~}~}~}~}~}~}~}|}|}|}|}~~~}} ֶֽƸ»炆Ω惪ӯyݲ›»Ȯ􀊑쎶Ψ.    +"3϶ѱƴŸǀԽȾ玚ȃ Ӡd + +  + +$##"#$%$%%##"""#%%$#""#"#"#!" ##"!!!"!!"!!""!"!! !!! !   !   !     +"Oґž̵Ɛ놟Ͽɴゐǽ˺üϿľټՂźú¼㉎=<@7:"# ;888977726=0'*8HSH8028>?B@@@??>733@EKP4885*0()(*0[QSR;8BMQH]0.79/C41-/5''E@/ &'%-):8/,-9>:) $"!:9A'G7;B@?=9?A>?@@@BBAACBC +BABCBBBCCABCBCBCBBBCBBBABCCBCBBCBCCBCBCBDCDCCBCCCDCBBCBBCDCCCDDCBBBA@@?@?@@?@ ?@?@?@@??@A??@?@@A@A@@??@ +A@@@A@A@AA@?@@@A@A@@@?@@?A@A@@AAA@AAA@?@@A@AA@?@@A@AA@AA@A@?@A@A@AB@AA@A +@@@AA@@AAA@ ?@A@AAA@AABA@?@A@AABA@BA@A BB@@@A@A@A@AAA@?@@AAA@@@A@@A@ABABA@AABA@A@ABA@AAABABA@@AAABBCBBABA@ABB@ABAABBAABBBABABBABABABBBABABABBBAAABABAAABABCDCCBCBCBCBABCBBCCB CBCCCBBCCABBBCBCCBDBCBBCCCECBCCDDCCDDCCCEDCBCDDDCDCDCDEEEDDCCEDDCCDEDEDEEDEFDDDEDEFEFFEFFEFEFEEFGFGGFEGFGFGFGHFHGHHGGHHG HGHIHHIHHIHJIIIJJJIHIJJJKI +JJIIJJJIIJKJKJJKJJJKJ KLLLKKLLLKLKKLKKLMMLMNNLMMMLKLMNNNLMNMMOMNONONMNMONOPOPQPOOOPQPQQRQRQRRQRSSRSQQSRRQRRSSRRSSSTSTS TTSTUTTUTUUTVUVUVVVUTVWWWVVWVWWWXXVWWXWYYXYZZYZZZY[ZZZ[Z[ZZ[[[\[ZZ\\[[]]]\[\\\]././//./0///0/00/0//00/000//01?00b[SNLD9:9:108>?7'CNPC:25697//0.,..*%/:7<==@?B#$$$"?@"B#$%&*)&y(&''%##$F#$&'&'%GFE##CABCCCFEEDFGIIJJI&(&G<0,201DB523302?A<;3+3<=9212244522578=?!@><:974346556435521/.0477767443210-,*,.-/K02203336566589962335743334463455545679:8899:<;:95337:;;:777896778:::89;9 ! 730-),,-,-./]2110144321442246899;7(###&$"""EFIJL%&(+.--*'('(*/89:?;<;8233866<>dR!+06pgjN>[V[s05klrEDFEF EGFGFFFEEFGGHGGHGHGHIHGHHGGGHHIIGGHIHHHGIIIHHHIIKLMKHGHIHIIIJKJJIIIJIIHGFGGHFFGHHIIHHGFEFEDFGGFFEDDDEFFFEEDEDDDEDEFEEDDEDCCDEDDDCBCCCBBDCCCBCCBCCDDDCCDCCDDDCDDCBCDDDCCD +CBBCCCBCDDCBCBAABCBABABBAA@AABCBABA@AA@@A@AA@?@?>?>?>?>>>?>===>= <<<>=<<<;;;<;=<<<;:;::;:999:;;:9:988989898678876788767676655656655665656655545455454344323fdbefdedccceeddcbccbbbcbccb a_``a`aa`aaa`_`__^__`_^ ]^^]\\\[[\[-ZZ[[ZZZ[YZ[YYYZ[ZYZZYYZYYXYXWWWXYXXXWVXXWWWXVWVVWWVUUVUVVVUTSTUTUVUVSTSTSRRSSRSSRRRSSSRRRSR SQQQRQQPQPPQ PPQQPPOPOPOPOPOONONNNONMNMNOOONONMMMNNMMNMNMMNMMMNMNMMMNOONZYVbmq|}k?IS[TP|rpQO^_[TV\WJIJLMG=4?==BjZTJLJ^9EVAACA<.-=ADFGG=5341,)$!V "%(+-/.)$!""!#('(''!!#!"-:;85442238?C$%%$"""#"!!" K83;<<=!@AACA?ADDDABGICCFEA>@ACA>HE#%('',11.(%)'"'-0110/011310-.0001)))(('(()*))'%%'),,+-00.,+'%$#!#$%$$(##+,.10,,*(''*)(&''(('$$$#%%$$%*85)/PM !"%)/:*1*-/20/-1244456443,)'$##%'(**,+*,+*+)()+++*./,--.,,+(&$HHFB?>=5*$ "!"#;(+:BE#@!!>=?&-/3302-$*,*$!(+*-,+'+(%$#%'%#;43#?>;"H5-,0+)9;-(5&#$$'#%" #B!##"!   )%*-./ "#""  + +/ +  + + +  +( !.  + + + +    + + + + +   +# + b  +        % +  +     + }~}~}~}|}~}|{|}|||}|}|}||}|}|}|~}~}}~}~}~}}}~~}~}~}~}|}~}~~}}}~~~}}}~~~~~~}}}~~}~}~}~}~}~}~}|}|}}|||}|}~}~}~} ѮǺ½ʰǷڀΧ䤳㺦߂ٿо儉м񈓢Ըق̣* +  +  +       +4%`¾¾-λĽս)˥ԩÄy%       % ###$%&%%$###$#$# +"##$#"!"#$# """##"""##"!"!"! !! !  !   !  @ߚӿڻʎ۲ӻ¼ųĀ焌ϾûʿŵĶ􃻘큙ϳȈ## 9!7745865.)/6=/1ITE?77;==?BB?=>=6009EFHIEBAFP099+22,7=8400,E88A-3X-/*I7>F>7.?>9:CLMKC(6=BA9!-,($'G=+?@5&#'6-3:=C?<5*%#%$!/2:05!##"B@EFKMKHHEDHMKA:BDQ..43.QKPLWSMAAI)*,#EV6BO9VH@AJWXHA=>>??@@@AABAABCBCDBCCBCBABBCBBCDB CCBBCBCBBCCCBCBBBCCCBCDCDCBCCBCCCBCDDCCCD CCDEDDCCBAA@?@A@?@A@AA@@@A@A@@?@AB@A@@A@AAA@A@@@A@A@A@AA@@@A@@@AA@@AA@@AAA@@@A@A@A@ AAA@A@@AA@ABA@A@A@A@A@@A@ AA@@A@A@AABA BAA@AAA@@A@?A@A @A@@AA@A@AAA@A @AA@?@AA@A@A@A@A@ABAA@ABBABABBAABABABBABABABBBABABABA BBABBBABBABACBABAB +AA@BABCCDCB CBCCBCCABCBBCCCBCBCDCBCBCDCDCDCDEDCCCDECBCCCDCCDDCDCDEDEDCDDCCDEEDEDDEFEDDEEDDE DEEFEEEDDEEFEFGFEFEFFEEEFGFGFEHGFGFGGHGGFHFGFGFFGGGHGHHGHHGIHHHGHHHIIIHIIHIJHIHJJIIJHHHIIIJIJKLKJKJJKJLLKLLKLKKMLLKLMLLMLKM LLMMMLMNMMMNMOMMNNOMMNONOOPONNOOOPOPOPPPOPOP OOPQQPPQRQRRQRRRQRRRQSRQRSRQRQRSSSRSSRRRSTTTSUT UUTUTUUUVUVUVVVUTUUWWVVUVWWWXWWXWXYYXXYX"YZZZYYYZZYZZZYZ[[ZZ[ZZ[[[\[[ZZ\\[[\.\]\\\]\]/^//^/.//0 /0/000/0/01011101brYQMI<;96348=?<(/>FF?5498;4,6/11-)*.669<!!%##')(%"%''(&&$CEDHH$%#C%$CF#EBCCBBBADE#"#$&&JI&&JB93/6=@IP=0*2727@@?@;56;?A?>:86669=AA!!=678743567564472/010/044664555301.+++,,,.1446754334577558;9510232221243455655455677887999875314799===<:988779;98::<<!"6131,,+-,,*,,,-.000100/034433233365689:4+%#$&#C"#$EILK(()*+*'&%%''),6::5657778988=BU@WK'00FfyO.?_~ K2=MrmHEEFEFEEFEFGFGFFFGGHHIH IHHHGHHIHHIHIHIIIHIHIHIHHIIKLKJIHHIIJIJIH:GHGGGFFFGFGGGFGGHHIIHHHFEEEDDDFFGGGFFDEDEEFEEDDEDEDDDFEEDEDEFEFGFFEDEEEDEDDDCDDEDCCDDCDC +DCCCDDCDDCDCDCCDDCDCDDCDDDC BCCCBCCCABA @BAABA@AAA@@@A @A@A@@?@@?>=>>?>>?>==>>=>==<>=<<<=<=;<;;;:;:;:9:989998898898877788878778876667766566566555654554343H2232f33322eeedddeddccdbccbbbcbbb`ababbb``aa`baa```a``_^__```a`_^^_^_^_^]^]^]%\[\\\]]\[[\Z[\[[[\Z[ZZZYZZ[ZZ[ZYZZYXYXYXW XXWWYXVVWVVWVWVWVUUVVUUUTUUVVUUTTUSSSTS TSSSTTTSRSSRSRQRQQRQQRQQQRQQQPQQQPQQPQPQQQPOPNMOONPNNO NNOONNONMMMNONNONOONMNMMNMMMNMNMNNMMMNNOONOUuV\`lUmoyKG7Umrb]1a\V[YRJJMNFCh9>9maQ`POSUOKYWE;F1^;fCR=[>?4$(IEQ= 256889;@A!=? !?>>A"CB"#C?AAA?@ADEA@CDEHFECEAADAB>?@CCD"&$L')(%+34-%'**(+-0--../123110.-./0--.-,)(&%&)*)'#$()++.0-,-,.+''$#!!"$$+)#)-//.+(&$',,*'('('%$"$%$$"$%(.-',O.0!#$.D..0444123344675450-,(&$"!! $(*+**+,--+*('*,)*+,--,*)(&%EBBBA=;91+$"%(%"#&1<%CF$#@CF<9< )03311.#&*)&!'-./,*)+'##!%&##80C?787)'.2-;:986317BBCDD@:FU279+*4.3:;6302.@9<>((J?=BEDWb@&A<66==#F-1.;?0)1.:6>?IOY7500)L43CB<;0BC9:?GGC=7.)*.1=;$,5;BRVWT0&96?B=>% 59756(*27?6<%/<8.2,%&%'''%#D*'09$&$%%%''&$%!A&'')IBA=AM.2480M9DTOEAD;HLU/+#B.=N;KLOHNZYQ@=>>???@AABBAABCBBAABBBACCBBCBBCBCBCCBCBBDCBCBCBABBBCCCBBDCCCDCBBCBCDDEDCDCDCBBA@ A@@@A@A@@@A@A@?@AA@??@A@AABA BA@AAA@A@@@A@?@@@A@@A@A@AA@@@A@A@AAABBA@A@AABA@@AA@A@A@@AAA@@A@ A?@@A@@@A@@@A@@AA@@?AAA@@@A@ABA@ABBA@@AABA@@@A@@@A@ABB@@A@A @@AA@AAA@A@@BA@ABA BAAA@@AA@A@ABA@ABABABAAABABAAABABBBA@AABBABBBCBAAABA@@BBAABACBBABCCBABBCCBCBDBCBBCBBCCCABCCBABCCCBCBCBCDDCBCDCBCCDDCDCDCDCCDDDCCDDCDCCDCCEDCDEEDEFEEEFEDDEDEEEFEDCEEFEEFEEEDDE FEDEFDFFFEGFEFEEFFFEFGEGFFGFGFGHHHGHHG HHHIHGGIIIHGHIHIHIIHIHIJIHJIJKJKJK/LLKKKLKKKLKKKLLKKKLLLKKJLLKMMLLKLLMLKLMLMMLKLLMN"MMKMMMNNMMLLMMMNNMMNONNNONNNONNOPNOPOOOPQPPQQOPPOPQQQPQPRQRQRQQRQRSRSTSSSTTSSTUTUTUTSTTSTTUV WVVWUUUVWWWVVVWWWXXXWWXXWWWYYXXYXWYXXYY[YYZZYYY[\Z[\[\[[ZZ[\\\..\\.]]].^^]^^^//.///./0//0 /0/000///01010010aV~RKKD<8357:=?B9(1=DC=989?&')$#%%$%&)('&&$EB@F%F%$C#$ED#$FC!!CCBCADEF#%&&$%&H<78?HKGDEB766;93<@A>=<@#IWGK(()'""?;7:??<:975<@B?;:867;;86-*,/44566675542//20,+***-7>91.//03552256521001001012343i554667766653322688989:::87889:;;::9:99:; !" 8;8/,,-+*+,,,//.00010101244324464335671)##%$$!DFH$&(9+*+*(&'((+.-275333679=><<@J8MJ',13QWE.7HUx-3IRKEDFFEFEEF GGFFFHGGGFFFHGHGGHIHIHIIHHHIJIHHIHIJIH +IJHHHIJKKKIHIJIJIHGHGFFGGFGIHGGFFEDEEEFFFGFFEEEFFFDEDEDEGGGFFEEDEDCCDDEDDCCCDCCCDCD +CCDDEDECCCDFEDCDEDCD CDCCCDCCDCDCDCBCCCABABAABAAABA@ABBAAA@AA@A@??>?>? +>?>>?>?>??>=>==>=<===<===<==< ;<<;<<;<<;;;:;:9:9:98889898989876765656656556545554554 33444323433343&2433fffe3fedecefecccddccbbbcdcbccbacbba`a`aa`a_^``_^^^_^^_^]]^^]]^]]\[[Z]\2[\[[ZZ[Z[ZZZYZZYYY[ZZZ[ZZXXYXWWXYYXWWWXWWWXWWVWWVVWVVWV"UVVUTUVVUUTUVVTTTUUTTTUUUSTUUTSSTTSTSSSR +QSRRRSSRRQRQRQPQPQPPQPQQPPPONOOOPOPPOOPOMNNONNNOONMOONMMNOONMMNNNMMNMNMNMNMMMNMNONONONONNOVƕ[[ajmpd}piurQ>d82cdbZ[[ROKGGICBr9iepXYNOQI=K_]a_<5>@><6/27>M<<<;;>A=433357:8338"C28815232335548996689:<;:8;;76,'26827@?:229.8'1343NNSQLHFDDB>9:5*DB@FIKHD?=951/,&" !%),.21..,'#" !#" %(*).3*%%""#.:>;821138=B$%)'%%#$#!! !7<8; @@!">!!!BA?""C"%#BEF?ADDEIDADDEFFBECA>C?A?BBFG%*(KGKJ'.36,K*+()-//,+-.../2210,),-0012/-00130+*)(F&%'+-,-.+-0-*-+(()(##$#$!&),-,+&#$'*)'))'#"!"&&$%#%%),)&(2LA  ##&;.2642546755568842.-*($%'((&%$&*+*)*,-/-+)&(**)*,,-+(&%$GE@=>?<84.(#""%+,($$-&:2+:@#"??@<79>'.13020%&,-'%+./.0-&'#!"!'"$ $?Q2+18-"#..%9@:8 :0% &)<*("5696%      "%&#%(,,,($-6 !   %$6?! !!%! "'-$! !3  ',30    f  !)'%/+%#%&),'5$2374fGW]尛~O¿Ŀ.̈́8׆ـ2 +FO94,$!$&'*##*(&""#&)" A !$##""!!!  !    + +!  + +  + V'*+& 2o1!%J]v7+/:Rc*-BQ  :( j̀|629=;=8A>>EL@/'7534//1,*'')+(*D"@@D48223/)2??A<=)'&#"-"'<5FC:""!"""##""#F"#"##"! &+11,+*)'&%"$#!  + +  +  +  + +  + +    +    "! "!% / + + + +  +  + +  '     +      +  + +   +   ~}}~}~}~} |}}}||}}|}~}|{|{|}|}|}|}|}}}|}|{|||{~ }~}~}~~}~~}}~~}}~~}~}~}}}~}~}~~}~}~}|}~}~}~}~~~~}~~~~}~}~}~}~}}~~}~ }}}~~}~~~}~}~}~}~}|}}||}}|}~} ~~~}}~~~}}~~ ͽĮ܄偈舻񾼞ҹɍƻ¶Հͤ芙԰_/   +      +(iÿʶŀ킍ý˙j  + $$###$%$#$##$$#$##""##"#"#"""#"!"!" !!""!! !       "9}ᐥ遁ż«׸ʿʝЮ̀¼ż½ǾλĽĀ»ۗ璤ȼߝܼżȸԆ 54664/153).15:DDE>:9::<7==8<85DDCDDE6D18987050*5>9325554.6"*MB=EEyA<3,(&+3?2$,9BJ+24LR/==>??FV.1.'HKDPJ==>D:JPJJHI+:>9GNaSFZZbb?>??@AABABABBBDBCBAABCBCBCBCBBBCBCBCBBBCCBCBCBCCBBBC BCCBDCCCBC DCDDDCDCDBCDCDCBBBA@A@@AA@@AA@A@@A@A@?@ABA@A@AA@A@A?@A@A@@A@AAA@A@AABA@A@A@A@@@AAA@BA @AA@@AAABA @@A@A@A@@ABA@@BAABA@AAAB@AB@BAAA@@AAABABABBBA@BBAB +AABAA@@A@ABABBAABAAABAAABAABABBAABBAABBCBBCBBBA@BBABABA BBBAA@@BBABABABABABCBBAABAB CCCBABBCBCCCBCBCCCBCBBCDCCCDCCBBCBCCDCCDCDDCDC DCDDDCCCDDCDCCDDCCEDDEDDDCCCDDDEDDDEEDCD +EEEDEEDDDEDEEEFEDDEDEDDEFEEFE FEEFFEEEGF EFFEFFFGFGGGFGFGGGHGHGGGHGHFGFGHHGGIIHHHGHGGHHHGHIJHIHGIHIIIHHIIHHIIHIJIJIIJJKJJKJKJKKLKLKLLLKLLMLMLMNNMMLMMMNNNMMLNMNMNONOPOOPQPQPQPPQPPQRRQQRQRRSR SSRRRSSSUTSTUTUTUUUTUVTUVUVVWVUUWWWVWWVW XXWWWXYXWWWXWWYYXXYXY Z[[[ZZZ[\[ZZ[[[\[\/\[.\.\./]]^/^/^//00///000/000//01010b|_PMJ;4477:;<:64:9676<@>::8C@:f68@===<;978;=<89;>>@@A?<;88:>?>5-,/157776334421121.,-**+.9845762111000136865351/1121221354222323445425642022268667576677898898998889;;<!"!!;:3,+-,,++./00--002112223323443448;95.+%$%##%##$''((*+,,)(()*+,--,-3888568879???@@??> =<=>>==>==>=<=<==<<<;:;:;;;:9:9:9:8776887677676565654445554323233233efeee22defdcdcdcbbcbabcaababa`bbbaa`b`_aa___^_^^_`_^_^^]^]\] \]\]\[\\][\[\[\[ZZZ[ZYZZYXY +XWXWXXXWXXWVWWXWVUVWWVVUUVTTTUUUVU TTUUTTTSTSTSTS +RRRSSRRRSSRQQRQRQRRQPQPPQOOOPOOPOPPNOOOPOOOMONONNNOON +PNONNMNNNONMMMNM +NNNMNNMNMMNOPNNSlY[OFGtZ_drlA?Tj6221a_^WRPLCBCB=kglmibVMIKd?O[hbKB(8=;633037:<<:::<@CEB<<==?@<<:9:9<>BC<89998668:889:<=<;;<;<[84(*5./9A;642>F=?B"%)MGPTQJD@?==;86-9MKCDGIGIGD>8420-)$"%(++,*,-.0.( L " %*-*)&!%% #-8>=720249?#%%&&%$##" !!:;;?!? !! ?B"#"FE"#EEFDABFFBGIEDFGEDBGCD@@>==BGJJKNNH?CJ'*-3,()*().10/0.--,-.0//-++*+.011.01//0/..-+*()))('.-,,,.//-+-+)(&')++&-"#'+,+'&%'(&'''%#"!!""!%%&)+(&%%&3H #%%0+7921446652379831/-)&%')*+(&%'),,+*)+---*(&&')**++*(%GFECB@?=;85.%!!$')'"$**5P<2%9>##CBB<68;%.2210/''--&")/0+,-,'($" (##FZ8!")23.*%#$%*-6<3,%#%5&($54= :44#   + %&%%()+,++"! #" !  "!&/  %-(&$,*#    + "+-     +  + +",&)%*'"#&()+''$%$'$.6D;4lQTȚ +0.bOW?DŽƀ!م ݄yB82#!"#&( "$$$#$%,("" W!#" !       +  + + + + K  5+')@28<;;MI)H;@BCDDC=;4;9<=997-/7:529>?60,0BC=9:?CA6E\+$86.13:035.1=S[Y?/687OSXRU0\UA6=::?GCx@<1)%%(/9( &/D&),1G)=6R64?K)-(97>@9@@<5/?.0* &('&(&% 30.,6G'))()+''$$!68=@FEY<?@@@B +AABCCBCCBCBAB CCBCCBCCCDCCCB DCCBCDCBBCCBCBBCDDCCCBBBCDEDDCDCCCDDCCDDEEEDEDCCA@A@ AAA@@BABA@AA@ A@@AA@@A@@@A +@A@A@A@A@@AB@A@@AAA@@@A@AAA@@A@AABAAABA@AA@A@ABAA@A@A@A@A@A @AA@AA@AAA@A@A BBB@AAABA@ABAB@A@A@?@ABBABA@A@BBAA@AABABABAABBAAABABBA@ABAA@AABA BAABBABBAABB@ABAAB@AABABCBBAABABBAAABBABABCABAAAB AABABBAAABABABABBBCAB +CBCBCCBBBCBDCBBBCCBAABBCBCCBCDCCCBBBCDCBCDC BBBCCDDCDDCBCDCDCDDCCDEEDCDEDDEDEEEDDDEEDEECDEFDEED EDDEEEDDDEDEDEDEFFEDEFGFEEFFGEEFEFGEEFEFGFEFGFFFGHGFGGGFGFFGGGHGGGFHGHHGHGHGGGFGH GGHHGGHHHIHHGHHIJIJIIHHHIIIJIJJJIIIJIIIJIJJJKLKJKJKLLLKLKLNLMNMMNMNMLMNMLMMNNNMNMMNMNOOMN OPONPOOOPQPPOPQPPOPPOPPOPQPQQRQQPQRQRRQ SSRQSTSSSRSRS +TTTSTSTSTSU TTUUUTTUWUVUTUTUVUUVWWXXXVXYXWXXWXYXXYYXXXY XXYZYZZYYZ[Z[ZZZ[Z\[Z\\[\][...\.[..^]/^/0//0/0100101010b[UKB55568:8;=>A@=>@BA@<:>DFDA>?=84675>@?;;:;? $$$A89:>A@>:44469;8<:3../0/235645433343/+++**066433564432121135656650/1/121235411222566773367887666767864579969;==<;;  !95.+--,,--./.-.121/0133321134435?>==>>=>>=>==><=>>=<;<<<=< ;<<;::;;:<:;:; :::9::;::9878988787876556665656545454433433343343>223eeedee32ddcdcdededccbc`bcddbabbbaaacbbaaabababaaba`__^^`__`_^^__^_]\]^\]\[\\\]\\[[[ZZZ[ZZ[Y[ZYZYYXXY XXXYXXWXXXWWWYYWWWXWVWWVXWWWVWVVUVUUVUVUWVWUUTTUUTTTUUTSSSTSRSSTSRRRSSR QRQQQRQQSRQQQPQQPPQRQPQPOPPPOOPOOPONONONNONNONOPOPONNMMMNMNNONNNMNNNONMNMNMMNNMO[wQ@KHO^e`vKg74322d_\TONLFBABobeiejZSWN?@KC[dP\G4;952002347:9fYh?<(669<<::<<=>>=;;;=@AAAB@@<8@CC>9997:;=>>=<;;=>@;>?><`;4+312>FJE8559;763APNFDEFEGFEC:4121/($  !#')+**.3781'!= !(,-%!%-" $.9@>84/36:A%(&%%%$##!!!9=AA! !"UAD"FH$#"GJIGNKEBGCEBCIHFFDGDAFEECBEGHFEIIJBACBCE()+-*(''(+.110310,+*,/-./,,+*,../,.2/.l--+,,+,,+)*--,+-.//.-+)'$#)-0*,? %+-**'(('(&%##$# !$%(--$#%$%.H( "$)-0#01-()1367741/-,)&%&(*,*&!"#)+,-++*,,+*'&'(*)*)('$CAA@A@<;;93+$"#&(%$*+-&)+$>A&#BB@=569!).//10()--*/,-*()-+'-&#! &1*K98--9>401/154-%','" "'0")#>=!! + +  + + $$$""!'),,)## #"$$! "%% #!#5 '/53$!#!2..#-1+ )%#! +  +(!&" + +     + !**"$'$! %)(*4(,,3#>4?C98=L.-iT!I¿¿DŽ/̄ ΄ц"քڀV;) "%%''"!$$%&&$#$0$c  !! ""!!    )  5 + + + + + !I{<"[[o*)0=eB**Mn) -!݄f̈́΀̽zL1(,)0;=7I.;5320.--*)(*I@BD?C:693'+4-837 7,#/.--0??C=9;=@>>;@H,Q>ACCCFE@A3:89>>;<2,+3743II4@L43(,274167*M6chh?;46RSD'PTO>;9:BLA0#!6<:;9;@D@x@<0%$$"$55/1:M)(RN+359N47<(+-*>>8='()+*),'$!&%!;?@#',,%#&JGD;:9==:@@ ???@@ABB@ABCBBCCCBCBCDCBBCBCBBCCDCCCBCCBBCCBBCCDCDDCDCCBCDCDDDCDCCBBA @AA@AA@@@A@@A@ABA@AA@AA@?@A@ABA@A@AAA@A @AABAA@@@AAABA@A@A@@AA@AAABAABA@ABABA@ABA +BAABBAAA@@ABABABABABABABBAA@ABAABBAAABBABABBABB@ABAABABAAABAABABA BBAABBABABABBABCBBBAABBAABBAAABCBAABCBCBCCCABBA@ACCABBBCBCBCB CCBBABBBCBABCBCBBCBCB CCBCCBABBCCCBCBBCDCDCBCCCDCDCDDCCBCCCDCBDCCDCD +EEDEDDDEDCDEDEDEDDDEDEEEDEEEFEEDEDEDEEDFEFFEFGFFFGFEFEEFFFGFGGGFFGHGHFGHHGHHGGGHHGHHIIIHIHIHIHIHHIIGHGHHIIJIIHIIIJIKIIJIKJKJKLKLLJLKLKLLLKLKL MMLLMMMLMLMNNMNNMNNNMONNNOONNOOONNNOOOQPOPOOPPOOPPOP RPQQPPOPQRQRQRSRRSSSRSSSRSSRRRSTUUUTU VUUVUUVWVVVWVWXYXXYXXXWYXYXYX YYYZ[[[Z[Z YYZZZYYZ\\\[\.\^^]^^^/]...//]//00/0/0 +10010100101G0011dbK37669869;<;>FC>:>@A@;=;;<>88=>=::BJKB=64:<=?A!#%# 998:;<>><985110/00.-./..24,34435552.-,+.485446787552122113552153../10/012234434645200025312477654556442258:878:<<<< 6.)---+++--,./12321133100135556:9+"F#$#"%%&',0.()-00/+((+142//)+3975433200261/;j"%),1L<./7r||-/6qEEEFFGFFGFFGFFGHIIHHGHHHGHIIHIHIIJIJIJJJIIIJIJJIIJIIJIHIJIJIJIHGGHHGHGIHIIIJJJHHFEFEEFGGGHGFGFFEFEFFGGFGFE FGGGHHGHGEDEDEEDDEDEEDEDDDEDE FEEFFEEEDEFEFEDEDEDDEDEDDCDCCDDDCDCDCCCDDDCCCDCBABCB AABBCB@@@A@AA@@@A@A??@?@@???>? >???>>>==>?>=><=<=<;<;:; :::9::9:;::9:999899987877787678656656565454545433443323fe2333fddcccdedddcbbcccba`aba``_`_`__`__`_``_`___^^^_^_^ ]^^^]^]]^\]\\[\\ZZ[Z[ZZ[Z[YYXYZYZYYXXXVXWXWXWXXWWXWWWVVVWWWVVWVVUVUTUUTSTSRSRSSSRSSRSRQRQQRQQQPQPQPOPONONOOOPNNOONNNPONONMNONOMNNNMNONUomPNKOVbb[Gk76g3hgaXQLMHBBABqqaQZ\[`L?IFFL\gU\7%6973312420355?9[=100./15647::;9::;:;?@BCCABC>=@CGGC=98<=?@@@?@??@@<:;>=9,.6;X@?BHA=<@>?O-+'(JABT]PIGEBMA5878BJKEABCEFEBB?9321/.)%! #&*+,/2462+'# j"  ''# ",%"  %/9?;844759@%%##%%$""#":?B""C!#"G$EDEDFHGIHIGENOIFGFBAEIHHGCGIDCJHHGINQLB>?DFDC'+-)&&(((*,010100-)&%'+001,,-,,+0--/--.0-,+,-,-///.(*,,,-.-,--**)(#%/1)$F")*)(++,)%#"##$ $$$&(,+$#&$%4F1" + #$*9!)--*)&/35#11.,,++(')))+-*'%%$')*,--,+++*)'&&&'j$FD@><;98662,($#&('*-,+*!?B'A;:$%@<>=858 *//./0+.10'),+**+--0/$'%%=-H6"7+4?>84345:?674/% ")3#&"!96765:;7    $&$'*,0-%$!!$#  #&)& &'* +1$@EE.+$"20",.)&  +  + + +!++!#$  +  +   !"!$%%**%//#5(+944BD>AJL[?d%sG=¿ ÄDŽƆcτ΀R0Cs: ###"$)'" !# #-)"""  < #"#  !'& +     + + +,*`m '>q4))-nwf*&(~xơ"'=?_KքԄ[̈́ˀųzJ0-,05<;7);97752/..+()+,IJA6;==?/(/0.2AFA?:676>NTF=CE@@CDAB18L+8><:4,))12/7=>;6)'(()48;>OQ1JM%"19+)275148.FI=>?FSMI54)844;:;@@@zC=/! ##5E>;8@(QH-;86H6@A&,,'$%*&B#DA./-?1$('&*('"3@AAF8[W0889?7C;P>Q7004:KEDGLUSZUio`?>>?@AABBBAABBCBCCCABBCBCBCBCBACCCBCBAABC BCCCDCCCBCCCBCDCDDCCDDCBBCDCD +CDDCDCDDCCDCEDDCBCBAAA@@AA@A@@A@A@AAA@A@BAAA@@ABA@@A@ABAABABAA@A@A@ABA@@A@AAA@AAA@AA@@BA +BBAAA@A@A@A@ABAAABAABAAABAAA@@ABA +BBAABAA@@@ABABABA@ABAABBA@ABAABABAABBABAAABAABAACBABA BABBAABBABAABAAA@ABAABBAAABBAABBAABABBAABAABABABCCB ABBCBABABBBCCBAABCBBABABABCCBBBCBBABBCCBBCBBBCB CCCDCBBBCB CCCBDDBCBCBDBCBCCBC BCDDCCCDDCDCBCDCCDCDCCDEDCDCCDDCDCDDCDEC2DEEEDCDEDCDDDEDDFEEDCDEDDDCDDDEDDDFEEEFDDDEEDEDEDEFEFEDEEDEFEFGGFEFEEEFFGGFGGFEFFEF +GGGFFFGFFFG/EFFFHFFGHHGGHGHGFGGGHGGGHHHGHGGHHIIHIHHHIHHIIHGHIHIIIJIHIHIJJJKJIHJKJKKJJJKJKJKKLKLLLKLKKKLKKKJKLKLMLMMMLLMLNOMMNNMMN2MNNNOONNNMNNNONNNOOONONOPNOONPQOPPPOOQRQPQPPRQQQOPQRSRRQPQRSRRSRRRSRTTSSRRS(TTTSSTTSTTTUUTTUUUTUVUUVVWUUVVVWWVWVVWWWXWWXWVXXYXWWXXYYYX YYZ[YYZZZ[Z[[[ZZ[[[ZZ[[\[[Z[ \]\[[\]\.^__]/../0/_0//0/010001110121?211b^V;<755865:;;?!"""!"#"#$%''((&%G?@DJKHB@CCBBA>=><@>:66:<;8;=TO@4/.1678:;"!989;;67543341/./.+++-/.*+.356579533445/.-00353444354321/021124741/1/-.././01112224222334564345520112443553110443433323245878988:<;:88 !7-*,-,**,.12/12333222133243476763#@DFE"BCE#&-1/.232/,('*1640/2.5<72102/-,-1 200???@?>???>>>?>=>=<=<=>=<;;<<<;:;: +;;:::9::9:989888998988788787676665677656556545445445455433433433443223eeffeeecdd22deeed8cbccdbbbaacaaa`bacbaa``a```a``a_^_``_`___`^^^`^^^]^`_^^_]\[\[ +Z[[[ZYZZ[[Z3YYWXWWXWWXWXXWWXXZWXWXWXWXYXXWWWVWUVWWVVWVWVVVWUUUVUVUTTUSTSTTTSRSTSRSSRRSRRQRRQR QQRRQPQPPPQPPQQQPPPQPPPOQOPOPPOPOPNMNMNNOONONMMMNOONMNNNMNNONNNMOMNNMONyONOONNOazzu\ZV\\cMv9k^^feaYRNJEAFBrysWX]QcdL@AC>P`d\]E,.23237666125;AGGB=8753/.,-/00..16:87>ACECABGHADG%%JOSME@?@AA@AB@@?=5)1>HF=87?BEGHECB=;721/-*& !#%)-.,.134/)%%# *) !$"" #$ ($""!!! $/>?688657=E')$##$##$# ;@D#"#GHDFEDDIHGFFGGEBCMQMKJJCBGGFHKGGGEFIIHJILOB=>=?B>?BDJ*..*%'+***,011/,+*((&#%-1/-,++,,---./...++-,+-/0111-*&)--,,-,+))*,-)--%@:9%%),,*'&#! !"""#'+++*'$$#$':F7* ##$""%)&) $%+6#.-+'*+.2682/-+*)))+++.---,)&'*(&(),.--,+*)*($ !"#$$GEB@<88752/+.(%%&'+,/.0& !"$":9#("A?=:46=*.00244001%&-,*+,/01,()+H0(3)'/698866:BF=;7769PA5;DB@>>@BC0;),2;=91-*'/4659>720.-+-,-14:)02FK+$6E3'1049975DPA==ENKBIPCGG9@E<35=@-,!4714<;;>=?C;.!!#&,=MD;;ERA(50.-?F&$&(,$#'13.$%;'"#$5/'%((($!!#D$$(*)-+)(*+&"%&$%'+..//*(!9;A==04<?#D=AB!""! "#"!###$$%'()((&$FEHJ&&%GJGCA?@@B@>?><<<853;>;788LbP98886?@@???@?>>=>?>=>=>>=<;<;;;<;:;:9:9:9::9898987898778778766676556545454455434344434343222333222eedccd edddeecdddbbbcba`_ababbaaa``aa`aaa```_`_^___^__^]]]\\]]\]]\]]\\\[\\[Z[[Z[[\\[[ZYXYYXXYX VWXWYXXXVWXXWVWWWVVWWVVWWVVVUVUTUTUTTSTUSTSRQSR SRRQRQQRRQPQPOPPOPONPO NONOOONPOOMNONOONNNMNNNMNNMNONO[mlsm`V^hL{lkc]WT_ZSLGDAEC|wsQNLSr^H8==?UYe_PAH/1.36659626>AEE@>9664211210126>DD=56=DEA??CECE$HFHR,*OIA>>=;;<><9865;;2$0?4223/<7;8477M0268X@<>51CEDA>;4@B=EHFFB@@AEHIFEC@;85/-/+& !"$&***,-.12.+)'$")++* "$$  &"!""! !"!#/;<742/16>&)('&'&%%$">?DGFEFGHJEFFGIGEEIJDDGKMMMKLGGICDFHFDCDB@<758984531097:@I*//*''(+,*+,,,-,)*--+*)*,...-,+,,-/../..-.-*+.//0320.,+)),++,*()*,/0.(#?96B %'&&&$""$%#&&),*)'%$$!&4@8,!!"%%%,#$.;#10+''-/04641-(')((++&).-+*(%*+)'(**-.--,*)('&$"!!CB@@?=;9774.&23+'%&(**+15&"! ##?;C)%B??836:$-0//0//0.&%'.0-1/,(5,4, (!+'&*06746>?62379*#$$%-8@=25675375.28%   + + (&()**" "#  '&)4,'',2/).0%#   + + + "+!#)     + + +  $')G82-)*&72#"1;89AGGL^s@9wƄńd˅6фPc HB-"!"#"!!$#"$$**,*&!  B    "#"#!  -?. +   + +x'(&&*)++,C9 !$,1)&1GV\3(.7 ($)'C6"'ЀʾcM=4126)DBHB<52863.+*(,*MMN8:59P>-#*%);?EB6-3&$!! !!&! $%('"w" "(*&!"$$%%%&$%%%"&&" + 0""!((**)#''$,,(%""!!$$$! +2  + + +   +  + + + + +    #"!!""!%'(*(*&%&$##&&'())-,./12/*),)((&##%E  + + +  +  "   +    *   +   }~}~~~}~}~}|}|}|}|{|}||}}|}~~}~}~}}~}}~}~}~}~}}~}|}~}~}~~}~}~}~}|}~}~}|}~}|||}}|}~} 톅ɼς삆ܷŮعծùɠڀιЙ∉ɩڏR +   + + +#3]ԫķ۽̈z$     +$$$$$$%%##""#$$$#"!###"#$%%$"!"##"!""!"""##$#"!""##"!"! !!! !  !       5Z̶ؕͿثΣɓ»ɾúÿôɿ񄉈Ŀɒýѽɿ󄖱ր}˽㒠팅Ķ8:; @4+3/3A/..()4===<::>???B+85AB<:5++%+76=<892S.0/,---/29'/@DG8-:K8**'-L<36>NR:8;DN9EIJ;7AJE<768652>?@ BABBBAACCBCBBBCBBCBCCDBCCCBCDCBCCCBCDCCCBCDC +DDDCDDCDCDCDDDCD EDDEDDEDEDECBBAAA@A@ABA @@A@AABAA@ABABABA BBABBBAAA@BBABBABA@B AAA@@@ABBA@BABAA@@AAACBABBABAABBBABABAABCBABABAAABAB@AA@AA@ABAAA@ABABABBBABAAABABAABCBBBCB ABCBBBAABABCBAABAB AAABA@AAABBABCBABABBABAABABCB +ABBBCBCCBABCBCBCBBBCAB!CABBBCBBBCBBBCBCCBBBCBCBCBBBCBCBBCBCBCBBBCDCDCCCDDDCCCDDCCCDCBABCDCDDCDDDCEDCDEDCDCDECDEDEED EDEEEDDCDDDEDDEFFEEDFEFFFEEEDEEFEFEEFEFEEEFFGGGF5EEFEFFFGGFFFGFGGFGFFGFFFGHGGFGFFGGHGHHHGGHHHIHFGGHHHGHGHHGGIHIHIIHIGIJI JJKJIIJKKJIJKKJKKJJJKJKKLKJKLLLMLKLLKLKLKLMLKLMLMMMLMNMLMMMNONOONNONOPPONOOQPOPPQOOPQPOOQPQPQR QPPQRQRRQRQQQRSRSTSTTTUTSTTUVUTUTUUTUVUVUUVWVWXXWXYXXYXXXYXYXXYZYZY[ +\\[[[Z[[\\[Z\[\]\/^^]]./^//.///00//0///00/01010122211001G2c`QcI<977:8;:;:>:=@B>4=<=<<;88;>=988C]0GA7?>>??>>=>==>>=<<===<<<=<==<<;<;::;:;::;:9:99:989889887887887687676556655654 544544555344433233224323e32c2eeecfcdecbcbcabaa``aaca`a```__```__`^___^^^]_^]^_]\]^\[[Z[ZZ\[Z[[YZYXYXXXYWXXY ZXXYWWXWWXWVW VXXWVWWWVVVUVUVUTUTTTSSTTSTSR QRRQQRSRQRQRQQRQRQ&PQQQRQQPPOOPPPNOPOPOPPONNOOONOPOOPONNNO POONNONNOMMNOONNNOOMMNNONPNLT]drnPXjMvgjngYP]ZSKB@BDE{qpVKFXcIFyDFC@=;8766446::4457;@CEA602:=@ABA>?A@;AKTXQ<;==??BKOQKC99<82!-,.-875=HL'R*-/0486Q;DRGGC>>ADEFGGD><840/0*$ !"$&&%&)*-1/-.,)&",*+. "%&$ "" "# !#! !"&/2-3/,)(++),-,-,+*+,-.,+))(*,,-.,+-,,-.../.+,2++00//0110///-&&,.++*+,/0-+&@6338/$%!#!"$(,/&!$&(('&#"$1?:/#' $%2#9=0*D*-,/240+)(*)*-)%'++ ,,)+-))%&+*-v,*(%""! ???=<<;98556+/2.+'$'*,-/15("! !#A=D)(HA;647?)21-./01/)&()22--/2.+>2608 (>/++-2753;':('2<82+()8F! "$! 2+,5  +    + +!%('(('(! #  $ +  $!+* #38#&3%((*#!   + #$$:2#j       !04&$"5:"$- (.%=09:fksHYf = 5 /p¿¿Ä@(„V̈́̀DˀW." !$#$#&!!"%!)..,)$%"o     "!!" !! ';% #? + +  &((('),*+%.!$.1(-)`kZ$@8M`ٞ T3Vۄ ڄۀ5ŻmVC-15(D>HLG6/8630('*+,OIM;40;E11I)(4,6<448.5/"~!"##'(%"&+.+ !%%&(*265/)!"%"#&) -")/&)+)&-*%-/1,(&$# !"#!!!   +  +  +: + +  +  + + + +    ! $$"%&'##%%&(*+---+'3++ !"%&*-.(%((&%"   + + +  + + +" >  =" +   +   + +   }}}~~~}~}~~~}~}~}|||{{|{|}|}||}|{{{|||{}~}~}~~}~~}}~ +}}~}~}}}~~}~}}~}|}~}~}~~~~}~}~}|}~}~}|}~}~}|||}}|}~~~}~~}~}~} ĺ􏓓敧֝Ѿĺvеڞt퀏ā立Ю䌓|1  +  +    + +%\|ɭż¾荓ȆS  2   +&%$$%$#$%$# $###$$$##!"""#"""!!"#" #"""#$"!"! "!!"""!!#"!   ! ! !!   +    (Bj޶ƵԶŬƶߺϹ€ʾƹ脛ޛĻǫz°܂򗟢쁐85!$A<<=:<:'.+.,''0=<;:;BI;?;:?>@@A@B@P6506+=;;/$'&386;;=4'502--.//125==9B?8,:B:2+),OE'*3LbE3//JGG9O95@H?6>4--2c48FB>C35A>0OY?,H6?@@@AABCBBBABBCBCBCCDCCCDCDDCCCBCCCDCBCCDCDDCDCCCDDDBCCDCDEDDDEDDEEFECCDCCDCBA@@@ABBABA@ABAB@ABAABA@A BBBAABAAABBABBBAAABBAAABAABBBABBABBBABABABCBABABAAABAABBAABABAABABABAABBAAABBAAABBABABAB +AABBAABBBABAB ABABCBABABABABCBBAB6AABBBABAABBBCCBAABBBAABBBABABCBBBAAABCCBBBABBCBCCAABAABCBBABCBBBCBABCBCABCCCBCCABBBCCCBCBCBCBCDC +DCCBCDCDCEDCDCCDDCDDCDCCCDDCDDDCCDCDCCCDDCCCDDCDDEDCDFEDEDEDEDEDEDEDDDEFDDEDDEDEDEFEEFEFFEFGGFGFEFGFFFEEFGGFGGEFGFFGGGHGGGHGFGHHHGGHIIIHHHGGHGHHIIHIH GHIIIHHIHIHIJIJIJIJIIJJIJJIJJJKJIJKKJ&KKJKKKLKKKJKLLLKKKLKLLMLKMMKLLKLLLMLLKLMMLMMLLMNMLONNONNOONONNONNOOPPOOOPPQQQPPQPQRQPQRQRQRQQRQRRSRSTSSST)SSSTTSTTTUTTTUTTTUUVUUVVVWVUVVWWXVVVWXXXWX VWWXXYXYXYYZYZYYYXZYZZ[ZZZ[[Z[\\\[YZ[\\[Z[\\\]^^]]\]\\^/^/^.00///0//010/0/001010001[01121121112111211221122gaGD?<:;;9;>;=999:?BMOGBEA7430$%1?<:<>FG%%&'%"$&$C>=?#":5:@#$"=A"!$%'''(('''%#"%%$%&%IHIC@?BEHDAB=>?;>=;;:8><<::8>V/*ME>74102/+,//.00-,.13643699885.-/0/,.01457651--..--/0246432000121000///.../...-++-./00/0//0 101131134330145445620.+/34334545445667769;<:999: .+14,++,+*+,-./010022324336683-">?@CCEDEG#(.354.*))+++)'',3+)'&*3320-++-03544l"%&(*-04<:035NZ9SnCKȁGFFGEGGGHGHHGHGHGHIJIIIHJIHJKJLKIJKJKJKJKJKJJKKKJJKKKJJJIIJIJKJKJJIIHHIJIIHHIHIHHIJKLKKJIHGGGFGGHIIHG FGGFGGGHHGFHHHI$HHHGHGEGFGGFFEFFFEFFEEFFEEEFEFFFGFFFEF EFFEEFEEFEFFEFEFEDDEDEDCCCDC +DCBCBBBCCCBCBABBAAB +AA@A@A@@AA@?@?@@? +>>>?>==>>>=>=<=<;;:;:;:987887876766676656565 44554545445543334443fe3332d22ddeeecbcdcdcbabbaba```__``aaa``ba`a``_`aa_^_^^__^]^]\]]^\[\\[ +ZZZYXY[ZXXZXYXXY XXYYZYWXYXWXXXWXWXWWXYVVWVUVUVVUTUUTTUTSUTTSTTRSSTTSSRSRQQRQRQRQPQRQPQQQPOPONOPNNNOONPOOPOOONONNNONMNMOONNNMNQRWih`]ofimrqd[XVRLCAruvktiTQL[R:MI@AHEKDV`OJ987V63.+09;>AA?<:8553311599755577C>7;IUP=69:>JOROSXVJ>4.,.(-35>0740:IL*251,0252SCEGRQI:@@@DGHD?;742/+(#! "$'+-0/011-)&#--.!#%'#!!! $&%#  "#$#""#(07=91.-.5B(*)(&%%$C>CFEGGKJIHIGIJKHMMIJFDCA>   *;;8A->Tny?<;:oo}xdi^sCN3*'%&(+0.-111/...,++'&%))*++**,--//..-,+-/,/010///...///-+'()+,.0/+*)%C6.288" ##"$,:5% +)  (;)01$%'+/10-*)*++**'(+)*-.-*%',;--+)'%! @<:;<>??A?<82.*,/--'$&)001279(#!#'"AD,(%D?:7>&)--,19.(+)+52000//I420#$81-.41035;$-#223,-0.,4?" !!!&'#!1'*8   + +"#$()**)&3"   " + + + !&(&.=''(*"."  K + )!.-2?B7/     5"+('- %-4$*!&;+1akxASfsĜ,A9-6nÄĄŌIτЀ331l4'" ! "'%&"!#%""%/1+&($    L##"!$!  $:(   +R + + + + !$('*)**0P"+86+(*MH)K[4D﩯`->3߄pЄ΀ɿcL;4=:>HOOC:8531*)GMMDNI;94C8&61*,2,2-8>53'*&2"%#""#$$ %!\%++ !!$,042455+"#$.#(*24/'(00(-255/)&&%! ! "!  4 + +  + +  + + _ + +   ! "$$#%$%&'&()**(()') !%-/04!)5CJ'%%&E@MH493B(%   + +  + + !      # $    +    +  }~}~}~~~}~}|{|||{{|||{|}|}|}|{|} |}}|||{{{|~~}~}~}~~~}}~}~}}~}|}~}~}~~~~}~}|}~}~~}~}|}~}||}}}|}~}~}~} ʺޑϮНԤۯœzڬ˹Ǽ䇕삏訷޾눞̶ʳヅ湙K         W+ù¸݀ˮ˦ӥ˪ѕ"    +%&%$$$###$$##$$$#"#&"#"#""#$#$###"!##""!"#"!""#"""!!!""!!!" !!""!! !!! ! !!"!! ! !   .V󜥵ǼűͬĤ¹˿ǀ鈑܂ӦΣ伍ƺƨʑ׎sƴ鈐5423255"+% ?=#1.0-'$%/9=<=ELJ6?ABA@BEDABG6850(6>:8*&(+,.6:>>?@@@ABCCBCBCB CDDCCBBBCDDCDBCCDCDDDBCDDDC9DDCDCCCDDEEEDDCCCDDDCCCDDEDDCCCDDDEEDFEEDCCBBCCBBDCAABAA@ABAAABABA@@A@A,@@BAAA@@AAA@AAABABBABBABABBAABBBAAABBBCAAABBABABABAB AAABBBAA@ABAB +AABBAABBAABABCBBBABAABBBAABBAAABBBAABCBABABABBABBBABCBBCBBABBABABAABABCBABBABBAABA@ABBABBBABBBAABCAABABBAABCBCB CCBBABCBBACCBABCCBCDBCBBCCBABBBCBCBC BCDBCDBCBCDCBCCCECEDCDCDCDCDCDECDEDDEDDCCDDCDCDCDDEDED)EEDEDEDEEFEEDDEEEDEEEDCEEEFFEDDDEEEDEFFEFE +FFFEDDEDEGEDEFEFFFEEEFFEEFE FGGFFFGFGFGF GGGFFFGHGGGHGHGHHGH +GHHIHGHHHIHIHGHIHIHGHHHIIHHIIHIHHIJIJIIJIJIJ +IIKJKJJKIIJIJJL KKJKLLKLKKLKLKLMLLMLLNMLLLMLMLMNONMMMLMNMNMNOQPONNONONPOPOOOPQQPPQPPQRQPQR QQQPQQRRQSSRRSTSRSTSTUTUUTUVVVTU VVVUVVVUUW +XXYYWWVXXWYXZZYXZYZ[ZYZYZ[[[ZZ[Z[Z[Z\\\]\_[]\\]\\]]/_^^010100121212211221112eZXGBDHD@;9=@?738>=;;?AHKGEB;3/.//)1?=;<@EI&$%'%#"##!>C#&%@:=B"!!?"#"#$$'(('('(((&'))(&&'&&$HECABCDAAC@C@>??=?==;;=;:A;=99J[.*>22330/,()**--((,.2241.116>?>6210/011133112.--,,-.1114442/0100/-,,.-0.,//+-/101/1/00/10011..123101100112321/.-1313231244456667:98::9=;!!0.48.+-,,---.../1001232344784,+# !BEEFHDH)0361)()(*+*)'$"#5;)(*,1/-9,-.--/35W?&'),*,-5C9//QlL1JtDAHGGFGGGHGHHHGHHHGGHGGHHIHIIIJIJIJKJKJJKJKJKKJKKKLKJKKJKJKJIIIJJKKLKKJIJJIIIJJIIHIHI!JJKKLKKIHHGGGHHIIHIHGHGHGHIHHHGGGH%GGGHGGHHJIIHHGGGHHGHFGGHGFFFGFFGGFFEFEFGFEF EFFFEFFGFFGF GFGFEFFFEFFEFEEEFEDCDDCDDCBCDDDCCBBBCBBCB CBBAAABBBABA @@A@???@??@@?>???>>??>>=>>>=>===>=>=<;<<<;:; +:;:;:;:99;:9::989:9:988998887787 +88877766776776676 5566556665554544545554343e32ec2d23ed +bddcbcecdcbccbbc`aabbbccaa`#aaa``_`_``_^__a`__]^^^_^^^_]]]___^^]^_^]\\[Z\\[\\\]\[Z[.\[ZZ\YYYXYZYYZXYYYXYYYXXYYYXXYXWXXWXXWWXWWXWWXWVUUVVU TUUVUVUVUUVTTUTTSUUT UTTSSTSSRSRQQQRTRRRQQQRQQQPQQPPQQPQQQP QQOPQPPOPOPONNOPOPOONONONOPONOPONOONNOOPOONNONNONNONOMNONNNMMMONML[\XWN_hpqjYPWWJABzs\]f_SSVUJSHZA54HJCNQFPCiH/;*12?:79;<<:874210-/23444335w37>BA>=9564565:A=9=KL41<>DLV/WLKPKA4'%&+*'+5:?A8>K,43#1;JY_/ZSPMKNO<6GQVVPSVOLIFBB@>?>=@CGFC@;740-(&#! !#"!$')+,/10-.-(%!//3 #(& 8$%$##!!#!"$""&*09>6.-.4:B')*&%#!?BEEDFEGKKJ$$GFD@!#->.6;8DRj;=CKSTQROKEBACHvgVJuQ95-)''(')./132100/--+-,*)('&'(()+-,/10-,,-,.12/./0/0...--.-/,(%&+10-*)&FD;3487- !!!%*2B"0,)& %&$$(=>:5'! + +#)'')/#&2'47$''4*&&)-0//,+++**+(**'',1.)).()-.--//,+'%#?;??<:;;>>A@<71('+,.*&$'-.12483')# #*M#!$+)&B>?<>&)++.2211/*,(*43021/'51.*$:40-.63..3;@'+72(&*0.0:! !  ! ! 6-*15 + +  +  +""%&')-,(')"!!"#" + + + +  '!$ &9-*076& " E ,,*6EO=)/)&'')'" 02 ,-)3! "&,0$.0!"7/2`oBNYZo':J3= ¿,„ń,Ƅzф'ڄڄۀ:ZP,&&)&%#!&''""%"#'+.*&#     e"!  /=   . +   + + + +P!%(-/*(Hn(.B5+&G[7%B`G獭2]+];Xτ&̅OijK<2,:EPRI91580*+MK?AFA79<=270=,$$24+54*4*D5)17&%# )) #)01('*&  '262/*)).0##.1431470+*(%%#! !" + +  + + + +   +  + + + + + +  !##$#$&)+*,+,"'*4 &%,3@%&(/78763/)('&+K9+&D,   +   + +    + + + 0 +     +    +}~}~}}~}~}|{|{|}|}|{|} ||}}|||{{|}}~}}~~~}~~~}~}~}}~~}~}~}|}~}~}}~}~~~}~}~}~}|}~}~}~~}~}|}~}|}~}~}~} Ķ銚ìƝ޳ΝʍvΫʻ׵쁆½瀂Dzʼ뽥ʻ,   + +    +     &Uɶƹɴ򀂁ֳϼвǘ˞ĦC    +   &$$$%$#$$$#$#$#"#$$#$###"#!"#"!"""!!""!!!"!"!!! !! !!! ! !!"! ! !     (J摡½ƲϾͼѯñŽƵրᄝ퇍鿗ԴۗýƫՎѼꖏtɵ銒냁˿½7/),225 $"$""A26.(&%')28HA379.+.3=?#%$=XV6/7>? @A@AAABBABBBCBBCBBCCDDCCDCCBDDCBCCCBCBCDCDDDCDCDDDCDEEDDDEEDDCCDCDEDEEDDCDCCBCBBBABAABBABAAABABABAAABABBAAABAABBAAABABAAABBBABABABABAAABBABBABBABABACBBBABABCBABABAAABBAABAABBABAABBABBABABCBABABBBABBABBCBABCBBABBCCBAABBBCCBBCBBCBCBCBBBABABCCBBAAB +AABBBCBBBAB ACBCBCBCCBCB AACBBBCCCB ABAABBCCCBCCCBBCCCBBBCDCBCCBCBCCBCCBBBCCBCDCBCDCDDCCDCBCDDCCCEDCCDCCCDEDCDDDCDDDCD CCDDEDCDEDDDCDEDDEDDEDEEDDDEFEDDEEEDEDEDFFEEEFFEFFEEFEFEFFEFEFFGGGF EFFFEFGGGFGFGGGFFGGGFGGHHG +HGGGHHHGHGHGHHGIIHIHIIHIHIIIHIIHIJIJIJKJIIJ +KJIKKJIJKJKJKLKLMLMMLMMMLMLMLMMMNMNNMNNMNMMNOOONNONONOPPOOPPPOPPPQPPQPQPQRRQQRQRSSSRS TSSTTTSSSTUTU:TTUVUVUUUVVVUWWWVWWXWXWWXXXWWYYXXXYYYXZZZYYYXZZZYZYYYZZ[ZZ[Z\]\\^]\\\.\\].^]^/^^^///^/`0//0/010121212212g}M@;EMLF?;==746;<;9=CA??>:81-*-26/4<<=""#%##%(%##!@=B""#">A@#!!"%%$$$&')*(')'%(*++)('(''JGEC>=@@AACC@@??@??<=<:?>???>?>>?>>??>==>=>>=<=<<<;<;:;;;:;;;::;:9:9 8998889998767667676 556565554545454454343 +232d2232dce decdddcdcddcbcbbabbbccdbcba``a`aa`a`_`__`_^__^^]^]^_^]]^]]^^]\[\\]\\ZZ[Z[ZYZY +ZYZZYXXYYYX WXXWWXWXXW VVVWWVVVUVUVUVVVUVUTTTUUSSTSSTTSTTUTSSTSTSSTTRQR$QQPRSQQQPQRQPQQPQPPQRQPPPOOOPPPOOPPPO +NNOOPNOOONO POPOONOONOONMMNNMMMNONOQ[]X_ksuq[TWUK@>xudcjdVRV[RR=RDm:?DMH;DSz7B!&JI.I?324587532412100443233235:@AC?82433559<<8;>-0ADCCHLPVMI('@5)%',-&-E4=ACCD#(-+@-;GT,+,WJGN02LERY0UFOTNLJGEE@>?DDBCHGGEC=830.,(%!"!#""#$$(*,.-,-.-+'"./132 %'$"" !"$$""$$ !" !$&-7?<4004:@#$(''(%@DEE %-?/?BBJZr>@MGFDHOUVYYXXUPRSLFDGjR(}_E4/.+(&&'(*.1432111/.-+*++-.+*(&&&'),/./025//1///100///...,+((.-*)'%$E?;80/5$$#)5D*%0..+##$&,?=63&# !&'+  #2;::.?"1..(((*-+.,**)'(*&+)'+,-)>$)+/./..//,(%"A<8:;><9::<=;73,**-/*&%&(+/257;1()$" )034,'D99;;@')*+-20022/-*(/5440*841+$#51/0/33/07=:"$74/())*4?5/-05   + +  + + #%)('*,)('/#   !'$ + + + +  $$ 36!(1<3!    Q $"''030  + '&'&+,6SF"69.*).:$IW]Uyԫ4s# 4 ]uфzåO87)<.I(+.4.%*3L$-1.$0%v"!! $'+,$"&.-%%('&.10'160/,(('#! #! #"#!   +    + , +  + + +   #&G !(,4%('.8F&(3.-+.48789886111.)&'LI5+?1!"      +  6 D "      + + }~}~}~}|{|{|}|}|{|}|{~~|}~}~}~}}~}~}|}~}~}}~~~~~~}~~~}~}~}~}~}~}|}|}~}~~}~}|}~}}}~}~}|}~}~}~} ö受Ͽͷό௶ʑzģ݆߈ݽŵɸ֎ɞu8    +       +p·yٿ¹M"#!   &%$%$%##$#$#$#"###$#$$#"##"""!"##""!!#""!" !!! ! ! !! !! !!        "Iuŗͽ۲û򌥆Θմŷȿ۷ſ􁅌ǸĀ½ص᪆ȪǜԎrŴ߃Ȃ90+09"8 '3.1.))&%(1:B&*?=DDEECEEA?I6;?=;=97;6/MGH)/6=B<0*-.*,/,-...-1+'=81>@6;;.*4D@&$,FN_P341=FHYZMA?7276; /<;7!1=@>FEy?3"'-77-);DE0,UIEIEG;4NhRb^TNGOVV/]^51/-*698411-8>J>''('%$'+--*)+-'&))%&$')"=48:6311Z>?@?@@ABAB DCDCCBBCCDDCCBCCCDDCDCD +CCCBCCCDCCDBCCCD BCCCDCDDCDDDEDEDEEFDCDEEEFDDDCCCDDCCCBBABAB ABBAAABAAABA +BAABAAABBBA BAAABABCBABBBABBBA@AA@AABABABBBCBAABAABBBAABBBCBBCBABABCABBBABABABABCCBBABAAABBABCCBBBAAABCBCCBBCBABCCBBCCCBBBCCBBBCCBCACB CBBBCBBCBABCBABCBCCBCB ACBCBCDCCBC +BCBCCCBBCBC BCCCBBCCCDDCBCCCBCCBBCCCBCDDCBDCCBBCBCBCDCBCDCDCCEDDEDDCDCBDCCDCCCDDDCCDCDEDDDCDDEEDDDEDDDEEEDEEDEFDEFEFE +DEFEDEDEEFEFEDEDEFEDEEEF EEFFEFEFEF EFFEEEFFEGFEFGGFEGFFFGGFFFGGHGFFGFFGFGHGFFFGGHHGHGHGGGHGHIGGHGHFGHIIHI+HIIJHGHIIHIIIHHIHHIIIJIIIJJIIIJIJJJIJJJIIJIJKJKKKJKJJJKKJJKLLMMLKMLML=MNLLMLMMLLLNMMNMNMNMMMOONNNONNONNNOOPPONOOOPPNOPPOOPPPOPQPQQQPQQQRQRQRQQRQTTSPRRSQSSSTUTSSTUUSTUTTUUUVUUTUWVUUUTTUVVVUVWVWWVWXVWWWXWXXWVWYYXYXYYXXWYYXYYZYZZYYZ[Z[Z[Z[!\]\]]\\]]\\.\/]^___^_//]_]^___/^/0101010122121121112211221122ga~U;49ETSF?><6657;>::AB<741670+058'*;@;"#"$#="&&""A=9@"!""<<  !##%&'*+(*&&)'$'++)')(''%IHC>;=@A@BCB@@AD?=g>>?>=>D?;=?>:898IL4+---,,++./-,.0021122232333114345530/01000/-//102442/011230/13542/-,,+---.-..-+,//0001 +00.01213321/0223 21.-011132456777::9:;:93400-)',,..-/..002U1467881,%"ACDGIFG)460+''*)(''('&&)+-//---.-*+0101/1?U (+**)*,081-03655GlsA\CIGHHGHIHIHIHHIJIJKJIJKJJKKLKKKLKLKJJKKKLLLKJKJLKLKLMKLKKJJKJ KKKLLLKJJKKJIJIHJJIIJJJLMMKKKIHGHHHIIJHIIHIHIHGHIJIJKJIHHIHFGHGHGFGGFGFGGFFGGFFGFGFFGF +GGGFFGFFGHG FFFEEFGGGEFEFEFFDFFFEDDECDCCDCCCDCCBCCCBCCCBCCBABA@@AA@AAA@A?@?A@?>>?>???>?>?>=>=<<<=< ;;<;:;<;;;:;:::;::9:::;:9:9:8988787898767654565454545544333433233edeff23e2ddedddedccddcdccbbbcbccdcccbbbaba`a`aa`_^`_a`__`_]^```__^^^]]^^]\_\\]]Z\]\]\[\\\[Z[ZYZZYZYZZYYZ[ZZYZYYXYYYXYXXWXW +XWWWVVVWWWVUVWVU VVVTVUUVUTTSUT SRSTRTTUTSRSR#QRRRQQQPQRQQQPQPPQPQQQPPQQPQQOOPPOPOPOPOOPOPNNONNONOONNOMMNNMMMNONNNONNMNNOONO[k^`^swvpZRQOH@:?fmnfuUFQfXD@KNK?>PVwCxJ0#[CR*23-,/267524414332455445548=?<8/'&(,+.138767&-FB=<:=DM(II((C7,(',.+//1>FJGDD5=MML170Q)*OLX/+,(*VRLIOQNNMKKGB>>CHHHKHDACB>8542.*$#! ##" #&')*++*,/2,)"..0/21"!"##%%"!$%#$&%$ ! "#.871-+-69")--+%?@AB&7T[KL2LVQ\_gs}KNQPQSVRKHOOSVWZ]]\YVTPKLLCvnIVA9400/*'%%%&(*0532110//.*)'%),,,+*+(%%&('(+-.01114/33/./011/.-.//.--+'&'''%HFB>;2-2! #*8O)C34-,1/!$!$.C830% !+*+#!$+H8O,;##.))'),-.,-,((**()+,.,+"$*-01-./-,+($!>>;998;89998430*()/34)#"&(*,/455-+*+*%%098)&#<899:$&*-/21214/))(,2/6*9320#"&=946611135;B %C643160+<<;89;2268   + + $&)+*,,'%-"#%"!!#"%"'$ + + + + + + + +     +"*;5%)38-!   "  + #$!%-+-%!0=/;8/,)12-65!!%  *!1/581.( $5" ;/-@#C107<@HC`r힢, 63 ¿¿€ÿʀրS-$&+54)$%'&)'(&&" %&!}     !! +,   + +%)'*-)'+S`'4-)**+)&D^[G%AJ;&@܄݀^įQD?MSTO<563.*&*FJKFQ:/:G<+*462*)6;G$G0 $;('   ##))''&'0./,+2420-++($"!#%$#%" !  + + + +    + +  +  +  + +  +  !$+4138!+0166:FJ-17567<94.2/13489;8655/+,-'JWG<9), @     ! +   + #+   3   +  }~}~~}~}~}~}|{|{{|}|}|{|}|}|~}~}~}~}~}}~}|}~}~~}~~~~~~~}~}}~~} ~~~}~~}}}~}|}|}~}~~}~}|}~}}~}|}~}~}~~}~}}~} 섈ɸ䊄愑򁗞ſ̲݂ŷǾĒлvѴʱŨ֩¥匥ٞԯμڇʩһP  +  + +  + 'Dɺǽúрx˸ľĿėէؑV"   !     &$%%$#$##$###$$###""##""!"!"##"""###"#"!"""!!!"!"! !"!! ! !!  !  !    #Bn◷Dz榚ªޛƺǼ싚źĴڀ돃򒙯Ǵƾ繙Ȏ䂋݁uż끔҈50+4!$ 52;$"B<017/)('(,.<*)>C'3;:?>94;*//..-+---/5/+7*%3:46<0/"<21369-<>2'4@FCIEv@/,@>1.5C:;2,XQGJJKNKHMN`_NR[\VTs]7G>84@160*,*"$-.C%%#!" #*+*+++,()+))%%&4+3793574/W:TVUQKGBBU:83/SLemdT@F[hdjhrvB>?@@@?@@AABABCDCCBBCDCBCDBCCDCCDCBCDCDCDCDDDEDEDEDED CDDEDDEEDDDEDCBCCCBBBABABABCBBBABBBAAABBBAABBAAABABAA@AAABBABAABBABCBBCAAABABABBABABBCCBBCCBBAABABBBABBCBACCBBBCBBBABABCBCBBCCBBBABCCBCBCBBBCBABCCBBCB +ABCCBCBBCCBCBBCBBCCBCCCBCCCBBABCBACCCBCBCBBC +ACCCBCCBCCBCB +CCCBCCBCBABCBBABBCCBCCBBCCDCBCCCBCBC +BCDDCCDCDDCDCBCCCECDCCDBDCDCDCDDDCCDCDCDCDCCCDDDCD CDEDDEDDCDEDCDEDEDEEDCCDCDEEEDE DEEFFEDEFEFEFEDDFFEEFEFFEFEFEFEEEFFEEFFEEEFFGFGGFGFEEFFEGGFGFFGGGFGFGGHGHHGHGHGHGHIIHHIHIHIHIHIIHIIIHIJJJKJIIIJIJKJKLKJKLKKLLLKLKLML MLLLMNMLMMNMNMMNOOONOONNONONO PPPONOOPPOOPQPRQPQQQPPQQRQQPRQRQRRRQRQRRSRRRTTRTTTSRTTTUUT UTTTVVUVVUUUVWVVWVVWWVWXWWVWXWWXXXYXYZYXYZ[ZYZ[ZYYZZYZZ[[Z[\[[\]\//]^_^___^^/_`0/000/0/0 +1110011010121112112jl{`^7IVMA>:64569?>87B>51./81*55.*/-2:<;@"!@!%%@;<979?@??>86=! =!#'(++,)&'()&&(*))'('&%JFDA>=ABCDFDCEDA@<;>B?>=?@?=>@?>:96;H?11T0,-0/04533355642323302443146878853///-,,..143430/..03321//2430.--*(,,,--...,+-.//011/.0 //10011/0224331/-0232322345434568998999:::;:9::9977<=61,+-/.,.1000/12343244437861(%%EFIG%,23.*()('()'(''')+)*))*+1.,./../06ffS%()((+,.22203777Sy^c?GHGHHIHGIHHIIHHIIIJIHIJIHJJJIJKJK +LKKLKJKKKLKLKKLKKLKKLLMKLKJLKJKKKJKLKIJKJIIJIJ KKLMLLKJIHIJJJIJIHIHGHGIHIJIHGHG +HGFFGFGFGFGFGFGFGGFFGGGFGHGGGFGGGFGFGGFFFEEFEFEFFEFDEFDCDBCBA@BBA@@A@@A@??@?>?>>>?>>?>>??==>=>=>==<=<=<<;<;<;<<;<;<;;:;:::9: 99:9899988987867778767765454343438fefeeffed2ddededdedddcbbddbcbdcdcbcabbaa``aabbaa```_`___`aa```__^ __``_^^_^^^\]^\\\]\[[\\[\+Z\\[\[[[ZYZYZZYYY[X[ZYZZZYXYYZYXXYYYXYYYXYWXWXXWXWWVVWWWVVWWWVWWWVVUUVVUVUUUVUTTUUTSSTUSTTTSSTTTRSRRRSRSRQRQRQQSSQPQQPPPQPRPPQPQPPOPOOOPQOPOPPOPONOONO NNONMMNNMNTONMNNMNOWihe}rtjUCIKG@hYijfmOHVfaPDKOSLILTn+,% ASp7<%010.,,,16322.464433553255443-+('').250,$)BE=978=?@ !A=5/++,/60-'(5<=BA;>DFI-5-)('-'LQU+UG:?IHHQVQQSNLF@??@CDFNNHDEEA=9741,'"!""!!"$%&&()*-010,(#3-+--/ )/+!&''&%%%$"#%$"!&08415@G&*+,-.*%GC@AB0DLBMUTQJSSOQQSRPSXWTPQUZ\`^Z[YXVTQNPMMC~qVq>365223-)'''&'*,/0..00-.,+)(''(*+++)'%#"%()+.//01210210121000././10.&!$&%IFB><850.- !(7@943-/B3#(&#+@3.+%6 # !"%108A>(,*8'#&&'+.---+***)('+)*)!:*0430-..,($" >=>;9:985::5/,+($&,67/( "#%%%(/21+/2/(#"',/*('B;;=@%(*..01532,)-,015,6520'>;<<57872149@?DA52143468B:75569;8 963356 + +   "'))**)'%*!$ !"%%" + + + +  + + . !.3" !12   &#%!!$%&,-.30+/2>:,0860,>2!/(!',,///.,,6#!2*?D?5*1EJEKOb핢\oS‰!ˆHχ$ل ݅ +:(wPE%.80'&%&'**))$&#    y! !!  !!)  + +))+([T3!(++')*)&Fg_H5V(" LՀǶYdDTNSI8-12/,I=LKIP6/   +    #        +  }~~~}}}~~}~}~}~}|}}}|}|{|}|}|{|}|{}~|}~~}~~~}~~}~}}~}|}~}~}~~~~}~}~}}}~}|}~}~~}|}~~~}~}~}|}~}~} Ͼȶノǽ̷͚߮怗ᆢέtСѱغ⌿ɩʃ䱜ޏ۽킀֝.  +  + +  +         )_̈ɷƽǺ􁊏¿À{ɮ۰𛣭]O" "!   !%.$$%&&%$$#$$#$#$$##"$$###$$###$%$###"""###"#$##""!"""##"!!"!"""#""#"!  !"!      AsФϾͳ£˚ׄĿ̹ùʼ톀倐򋓏Ԋ¾ýë֙ݩɳĽ򆟢oĺĵЏ60-6? 6*$+KJ6,(-+)-,,-/3G+>=3((0893471Z/=SVPJEEGa>;3/[U^9d\LERof5:qfW@>>?@@???@@@ABCAACABCDDCCDCCDCCCBBBCDDDCDCDDDCCDCCBCCCDCDCCCDEDEDCCDDCDEEEDDDEEDDDCDBCBBBAABBBABBCBBABBBABCBBAABAB +AAABABBBCCB AABAACBAABCB AA@BCAABABABAAABBABABAABBBCBCBCBABCBBBABBABCBCBCCBBCBCCBCBCCBABCBCCBBC BBABABCBABCBCBBBCBBBABCCCBBCBCBCBACCCBBBCBBBCCBBCCBBCBBBCB2CDCBDCCBBCBBCBBCBCBCBBCBCCCDDCCBCCCAACBBCCBBABCBBCBCB CCBCBBCCDCBCCBBCDCCCDCDCCD +EDDDCDCCCDCDCBCDDCCD CDCDDCDDDCDDCDDCCDDDCCDDEEDEDEEDCCDDEDDEDDDEDCCDE8DDEDCCDDDEFGFDEDEDEFDFFEDDDFFEEEDEEDEFFEDEEEFEEEDEEFEFFFEFEFGGFEEEFFEFFGFFGFGFGFGFGFFGFGFFGFGGGFFGHGFGHGHGGIHIHHHGHIIGGGHHGHIIIHIHIJIJI HIIHIIJKJIJKJIJJKJKKKJKKJJKJJKKKLLKJLLKLKKLKLMLMLMLLMMLMLMNNNOOONNMOONONNMNNONONOPPQQPPPONOPQQQPPQPQPRQOQQPPRQ RRQQRQQRRQSSQRSTSTTSTTUTTSTTUTTSSSTUUUVVTUWVVWV +WWVWXWWVVXWXWXY!XXYYXXY[ZZZYZXXYYZZ[[\[Z[\[[\\[\[\[Z\]^^^\_]]]//]]_//^^_///^//0/010001012122212123232fWdoOH4DLF<75269:<=<7??3/.,/0,5633/*--09;?CC !";;96757=<<<98<= @DFGFCCBA>>><978\>?,/.)+255565674145130012224665567 41/-//./233201014344644592,%%)%FHK)13.+,+)('M')((&%*0,***+-0+,0-,-.4M(%'&)+*,3102553]AefHGHIHHHIHJJIHHJIJIIHIJJJKJJJIIJ!KJJKKJKKLLMLLKLLLKKLKJKLLKLKJKLMKLMLLLKLKLKJJKJKLKLLLKJKJIIJJJIJIJLLMMNLKIHFGHHIJK!JJIJJIIIHHIHIHHIJIHHHIIIJJKKJIIJIHGIHHGHGHGFG HGFGFGGHGGGHGFGFGHGEFGHGFGFGFEEEFFEEDE FEEFEEEDEDCDEDCDCDCDCCCBCBAAABA@@?@?@@@???@A?@@?@?@??>==>>=<<==<;<;:;;:::;:9::989987888788877887776765654543443344f34ggfgg3332eefefddeeddcdc dddccbcbcdcbab`aba```a```_aa`a`___``a_^^^`]_^]^^_]_]]\]\]\\[[Z\\\[Z[[[ZZ[ZZZ[\[ZYZYYXXYXYX WYXXXYXWXXXWVVWVWXWV +UWVUUVUVWTUTUT +SUTTSSSTSRSRSRQRQQPRQQQRQQQPPQQPQQROPQPPPOPOPONOONONONOOONONMNROOONNNONNPNNONMNZpnmlrwmdOKME:pplqldQRZdZKH\\RJD=3*B=R^<6/,//.04:8862..*354412663Z1.(&''('()***-13()4@B>;9;@===<;:6,))&)/5=:*#)8219?C??@F(*K%#%$)+-/08^OW^HKSZUVSRMD>=@?;>GFED@=9420.*$%* "#$#$&(),0---&"6.-1*,-(!$$%#"##!! !6"1E''%# $+/0/./*%EDECEHDTjgAOYZXPYWPRUSUPU]_YTZb_\][[YWTOQOGKMqMS400132//-,)''())+.11/--,--,*+---/*!'(((*)*)(%$%&*,-+,.4/.13023/00/.//121/(%!CEB><:951/0! #%&(+.//9L, '('.=0)(#%#$$*>H-/)*)3"%&%$(,,-+*+*+*,,)$%$4$..01..0.*%$#A@AB?:98:950.,("!$'19<1% ##$#"'-.&&++%! %(&&)H($##F%&+,0254521+)+-+2/730.&#8>=72626648414346A  +   "#'))(&&%(!% &! #!  +  "" &($'6! +  #+($% #$#!).132116;<0+63/&"&"79*#)!#  ++)/-,,//B(#239"@;34=PE")R]]#F¿<¿¾„'ą`̄ʀـkG7$,2.%"%',.+*($&% I  ""    !!  #" 5     -++,15.tW'(')+(%=1Zqޅ&(X(S ]tل؀ȴ^LLOVPG635/)MPKMLG87=E>0/=:2*%I)+*+%./ !%     !5-46)/794432.($"" !!&%$!""        +  #"$'#.??&.544-35-02231368502;;9965431///)+)MD>=.0  $ +O +   +    !   }         }~}~}~}~}|}}}|}|{|{|}}}||}|{|}|||}|}}||{~}|}~}~}~}}~}~}|}|}~}|}~~~~~~}~~}~}|}|}|}~}~~}|}~}~}~}|}~}~} ô㇑ɾŕңĒ˿¦͚ʓɳĨĴë탍ʻ͊Ȁr       +  + + &Edz¼͸׀yɡ㛜pP  +   %$ $##"#$$##"#$#"#$$$#$#"# """#"!!"""!!"#"!"!!""!!!"!  !!!  ! !! + !!!     ! !@tϽٿ̵Ȭ˄ؗ҅ο˼ՀɼޅôݶڴĤ뷦Ƽ䂍Ƀv¾ɻʻʼ8/.4;=,(&.?855,)('(.675>)M2EIIJGC@@AG0760,)14/-)(+.1AA$(*+/2*+-(((#"**+,-')10++'%A1//43:@81U.47g]NQbk8e4og^;???@@??@A@AB AA@ABCCCDCDBCDCDCDCDCCCDEDCDEDEDEDDEDECDCCDCCCBBCBBCB A@BBAABBAABBCBABABBBABBBCBAABBBAABCBBCBBCCCBCBCBABBBABABAAABACBBBABCCCBBBCBCCBCABBCCCBBCCCBABCBCCBBABCCBCB CBBBCCBCBBABCBBACCBBCBCBBBCBCBCBCCBCCCBABCBCCBCCBCCBBABCBBCBBCBBCBBBCBCCBCBCCBCBCBCDCBC BBBCCCBCBCDDCBCBBCBCBCDCDCDCDCCCDDDCDCCCDCDCDCDCCDCDDCBCDCDDCD EDCCCDDDCCDEDCDEDEDEDEEDCDDE +DCDEEEDDEDEDDEFEEFFFEEDFEFEFEFEFFEEEFEEDEEEFFEFEEFEFFEEFFEFEEFEFFFGFGGFGGGFGFEFFGGGFGFFGFFFGFFGFGHGGGHGH IHHHGIIHGHGHIHGHHHIHIIIHHHIHIHIHIJIJIJ IJKKLJJJKJ KLKKKLLKLK LLKLKKLLKLLKLKLKLMMMLLLMLLMMNMNNOOONPOOONNOPOOOPOOOPPOPPPQPQPPQQRQQQPPQ +RRQQQPRQRRSRRRSRSTTUTSTSSTTUSTUUUVUVWUUV +WVXWVVWWXWXWWXWXXXYXYYZYXYYXXYZ YYZZ[ZZYZ[\[\]\]]^^^_^_^_^^__^//_0//0/01012212112R333222gfeXOPb@I?6348:;=:??:92//-++,164++,+,,.5:996479<><;:=?E#*-.,+*))'),*('&&$JIGDBA?>?>==>=>>=<=<<=<;<;;<;:;:::9::9::99::989:9899889978766656 56655545544554g33343ghh43342333f3efeddeeedccddcbcbcbba`abaabb`_`ba`aba`aa``b_^__`_`_^_^^]^]]^]^^]]^]\\]]\]]\\\[\\[\Z[\\[Z[\[Z[[Z Y[ZYYZZYZZZYXYXY +XXXWWXWWWXWXWWVW VVWWUVWXVWWUVUTUUUVUUUTUSST SRSTSSTTSRSQRQPQPQPPPQQPQOPOONONNNOOONONNOOONNONOMNONONMNJMNOXkk[ttnm[TMAE>q=xohScdETRYgWG7+,,,.3@A820.-2311134431//-)(V))()*++*-.013143469<=>@?<:1+('())1>9/8?=3.,& #&*3;6.#"#$#"#$*,%"(*' !!#"""#%*--+*,41.,./12.--)D33//*!&A;C@749:7662876940474/.1115  +!"&')(&%%%(#)'!$" + + + + + & + *:' + "  %,*#!( + "& !+323120$"+)*#-%".,%c$  -)(,()022'& ,!=:06FK%@NU_Rk%¿Ä^Ņ&ȄDŽʀkBm±gOB@H,1("#'--/0.+*$" "" !q ! ! ! )#     , ()**35cWL?#()**(%KJhv襰Jn@ !@օw˶TANTPPA95+/+N*RLH:FG2959C9(@2)('>&--/3#& $"+)!w "   ")/995325/(#$$"!"$$%%#"!"!  z +     ###&#":=073542-.,-398:8;:36:;756122/*+'%OH9-C$        + &   < + +  I      }~}~}|}|{|{|}|{|}|}}}|}|}|~|}~}~}}~}|}|}~}||~~~~~}~}|}|}~}~~~}|}~}~}~}~} ûžӧΫŹ᱘xĵؤî⃓цܶ0   + + + +  +   'Wǁľπtē۸F    &% #&$%$# $$#"#"#$%$$#" ###"""!"#"!"!""! !"""!"!!! !! ! !! !! !!!        HȭëٞҶ̿˾ź΀򃎏οȼԽݩνܿ惑🐕򑣩sȷɾǸʀ2.+0<8((/741240.2=G>::;?B8;EIGEA=??A*565&*$%,)),3756@D<9>>?M,+,*))&$$**)) &33#:PeT9+,0--N="/9738B:5=FR[I@:$(*(9I3 1?GKOPMF6#77A>/@+-'IJDD\Y@NX6LU)P3/FMH6UGQ51-><:OHB++0,(00Q)./($$"%)*-/19910-%>77-:C:<=6[.<33APOHM\k:=841.32UPUQ59:9bcj`KB@???>?@@?@AAABAAA@AABCBCDCBCCCECBDCDEC DDEEEDDDEDEEDEDCCDDDEEDEDEEDEDDCEFDDFEEECCDCCCDDCCCABBBCCBCBAABBCBAABBBAABAAABACCB ABBBCBABABABDCBBCBBCBABBBAABCB AABBBABBCBABCB +CBBBCCBACCBC BCCBCCBBCBC BBDCCBBBABBCBCBCBBCCCACCBBCCCBBABBBCCB DCBCCBBCBC BCCBCCBCCBCDCBBCCBCCBCCBABCCDCCBCCBCDBBCBCDBBBCBCCBCDCCDCBCDCDC BCBCCBBACDDCDCBCBCDCDDCCDCDEDCBDDECDCCBBBCEDCCCDDCCDCDDCDDCDCDEDEDEDEDEDDEDDEDDEDDEEFDDEEFEDEFFFEFCE DDEFFEEDEEEFE +FEEFFFEEFFEFEEFFEEFFEEDEFFDEFGFEFGEFGFFGGFHFFGHGGGFFFGHGFFGFGGHGFGGGFHGGHHHGGGHGHHIIHHHIIHHGGHHHGHHHIHHHIHHIHIHIJJIJKJJJKJJJKKJIJIJJKJKJKKLLLKLKKLLKKKLKLKLLLKLMLLMLMMMLLLMMMNMMMOMNMONOOONOPNOPPOOPPOOPQOPPQQQPPQPQRRQRQQQRQRRSRSRSSRSSRRSSRSSST"STSTUTTTUUTUUTUVVUUTUUTUVVUVVVXXXWVXYXXXWWWYYXXXWYZYZZZYZ[Z+\[YZZ[\[[\\\[[\[\]]]\]^`__^_]^^_]``_`0/0/0_0 100101100121221112322332323iQUeVENZ6DA:657;?<;;?7640..,*/4641*',-..1@!%%$">=<:888=A?B@=C#%)...--,+**+,*)'&$%KJHGHGEBCABC@CEBABBBA@AACDA@@BAAB??=<<=7AM<65481-,0530///0010001/./2..0001441/10224620*)*.01/./12332330/00.,'&)--+---00/-+.--./1000.1210/0/0/./232000/.0223356656676787889::999:9:987648;<<=::960./12234353345767589'"EFH%).1-)&GJGGKM()('&$&'(**+-13--032479nC!$')(')+.045658JcznekIHHJIIJIIIJJJIHHJJJIIJIJIJIIKJIJKJJLLKLMLKKMMKLLLMMMLMLLKLLMLM LLLMLLMMLLLML KMLKKLKLKJKL0MMLMLLLJJKLLKJJJKLJJKKLLNNMMLLJJJIHIIJKJJJKIIIJJIJIJHIHHIJJJKJKKKJJIJIHHGHHHIGHHGHGGHGGHHGHGHGHGHGHGHGHHGFEFEEFFFEFEDEFEEEDECCDCCDCDCBCBCAABCBBBAABABBCBA@A@@A@?@@?@??@?>==>>==>=>=;<;<;;:9:::9 8899899889998989989878766676566654544554543g4#h34344g33ff2e3eecfeddedddcddccdccbbc dcbbcbcabba`b` aabaa`b`a_``aC`aa`___]^^_^^_^^]]^]]^]]]^]]]^]]][\\\][[\\[[[\\[\\\[[Z\\Z[[[Z[\[ZZ[ZY ZYYZZZYXWXYXWYXWWXWVVWWWV UVVUVVVUVUVUTTUTTSSSTTSTSSTTTSSRSRSQQR SQRRQRRQPPPQ PPPQOPPQPQPOPNNONOOPONONNNOPNNMNNP[uuzmdfSIJEA>?yq_vWOYNdY,._J9KMHGR>5HKK>0,))*,24543.,*,./-.231/0/*',+-/0.,++,+(&+.--+&)//059<8552,#&("##%(*,-,))&F@#%)+'"#$!"%$!? #)220-+4AD?=?%))&%F?=AFD=:<>ABC@CECGKXH[dMYYRMYTSdhd`]_\WZXVU[YPPNHCz:^[..-./152/-*'%%&%&),131.--,+*)*+,+,-02/''-1211/,+-./.(%(+++03...-()*+-01/0/-+*($=8524;<622237$&&&%)'##+,& !!$&%-;+!'-.59*&"-%%+(% H=20-$&/.,!&&('+,++.+*)'#86)1310.-.-*(PPMJG@9>62;@80)!"$%+550)" #$"""',)$#+31" !!!##$',01*,7<0('%&''285',.3, %H7;A846<;549D@::954333693>1AC(*D3"-)"#+!)-.$ !!! K#$   +  +19;62//.+&$""$$!!##"!""!  *' "   "$$&'&&*,(/9+650)32.:@=989:4474245//1,&J@>=I       +  !  *(%! +    #! }~}|}|{|||}|{|}|}|{|}|}|{~}|}~}~}}~}|}|}|~~}~~~~~~}~}|}|}|}~}~~}}~}~}|}|}~}~}~} Ը戊ɱΡĐǕЧx⟔Ƹғ򎕛舟׾ƫՈő6 + +         ! ):ݏÿýɾrݽú󀊒⦧񚜙ż7 + !"! %$$$####$$$#$%%$$##""##"""#$$$#"#" !"##""!!"""!"! !!""!"!! "!! !! ! !!     +'Nն¨ņˮ̺öʻʸſWטþŽƒ㡕Ӿ膛־ܾµ>+*(+51*-:7,-/1304?<7637;=2CDDB>==@F,20,-F2D#**-498;?B?:<=96$+)($##$#! (!(")IY[C408-9S7*!+/05I7:DLKQD?="0 '$08?!!5>?FMNE3*(B>C7G+*.,KMIEKEK=LO($!>,33b3\PMHT2242027I14.((-0()0,)%$##()--059-F><;E@1)-141,,.6P;17OUT2=C>796443UJP2?O569S`rcsA@???>??@ +ABBBCABAAABCCDCDCDCDC BCCDDCCCDDDCCDEDDCDCDCDDDEDEDEDDCDDCCDCDCDDCCB AABBBABCBABCCBABBDBCBACCCBABBCBABABCCCBCBCABCABBBCBBBCBBCBABBCBBCBBBCBCCBABBBCCCBCCCDCBBCBCBCBCCCBBCBBCBCBCCCBCCBBCCCBCCCBBBCCBCBBCCCBCDCBC BBBCBBCCCBCBCBCBCCBCCCBCBBCBBCBCCBBCBBCCBBCBCCDBDCBCDCCCBCDCCDCBCDCBCBCBCDBDCDCBCDCDCDCDEDCCCDEDCBBDDCDDEDCDDDCDDEDDCCDCCDCDEEEDCDEDDDEEEDCEEDDDEDEEDDDEEEDEEDECEDEEFEFEFEF EEFFEEEFFEFFEFEEEFEFEFEEF EFEFGGFGGFFGFGFGFGFGFGHGFGGFGHGFGH GHHGGHIIGHGHHIHIHGHHIHHGHIHHIIHIJJJKKJJIIJJKKJKJKKKJKLK LLKKKLLKLKL KLLKLLLMMLMLMNNNMNNMNONNONOPOOPOPOOPPPOQQQPQPPPQP +QQPPPOPQRQR +SSSRSSRRSQRS TTSTTUSSSTSSUTTUTTUVUUTTVVUVUVUVVWVWVX WWXXWXZYYXXXYZYX[ZYZ[Z\[[Z[ \\]\[\[\\]\^]^^]^/^00_0/01010121221123122212233222333233322234gNmOI_[`9?:68;=>===@<7431221$30*&(,+*-;9:=;@>E@=E%&*../-, +**('%IJIHHG(DBCCAACDC@ECBCBDDCEC@>CEB??@?>;:9965/*+*)7,/0-.,..,**,./0-,--,-/101/-/1333213521--/.03344422110//.-(%).--../.--.-.//-.,././1001//0/10132020/.04675446657G6688789987447:=><< ;::72103553112344588783%EEH%+46674.&JFFJ'''**''&'*$,/2,-0111ioĴ##'(&&')-05946?@??>???> +==>>>=>==>=<=<#;<<<;;;:;::;;;:99::9::99899::999:::98889887676667666565444554554 5544433343*f433efee2ede22dddccdcccbccddbcddccbbbabbaab=aaa`babb```aaa`a```_```__`_^]^___^^__^^]]^]]^^]\]_^]]\[\[]\][\][[\[Z[[[Z[Z[[Z[ZZ[[YZZYYYXXZZZYZZZYYXXXYXWXWWWXWVVUVUVUVVUUVUTUTUUUTTSUTTTSSSTSSRRSSSR SSRRRQRSRQQPRQPOPOPOQOOPOONONNPOONNNOOONOOONOONMNNOONOOPZotsmpkVOHHDCEEqjwkjcG6):T8DMKHG8jFU#$MIB80+**+.021110,(*))*00..-,)*0../0.,/--*((+/0,)&),.26;@EHE;425310225@LG4$'47:>D=B$$% #! "$.::4220SXZRMKJLJMIEDEECBAABCBDFCBB@;8630-&&&-  "&*+,..+(%"%'('"!##&'&$&"%.330+++-4:8867>=:7512220-0:>@AB>>@DFFF?aLRV_ca^YVdgb\\YUTRSXUXVNFE~VlJ61+(())*-/0.,+'%$#$&&(,231/.+*()***+,-.010'(.1322/)(-/10-//,*++20/.*((()+,,,/-,,)'I>821399521056 '+,//3442 3.*"!&%#).87)&# ** -+'*:80*"#*.-$*&())*))+,*'# "# 6&/110/.-.,*)(QOOMA6CA89>"6, "##(12/..# "$$""%)($#'/0%" #F%&).0002441151-/=%$)-.)#(JA<@;=449746BF=;65467:54978744324122-)'PPB.<%    + +  +     S + (&'%  +   =  "##$!}~}~}~}|}|}|}|{|||}}}|{|{|}|}|}|~~|}~}~}}~}}~~~}|}|}|}~}~~}~~}~}|}~~}~}|}~}~}~} պž⁔엟Ĺл̿’vۙɪƽĄ栁􉐖۬ʲ쇞Ó`     + +  + +   + #$󎊓ijý݄sݭçƲj     "!!     +%&$%$$#$$#$$$###%$$###""#"""$$$###""##$"!!!"!"!!!"#"! ! !"!!! ! ! !! !!     !       +"`ҿ򉊠ИԲҋŷ¼ƽɪ»ýȀŽ¿̎ǽƺˍ숑ٽżκ򅘢oʳŹþ«*'')/009<2+12/2384/2428?A4EA?><=B*69-)(/;+;%+2659:AAB@;;7,,?$%(*)*(%!!"$" 7?H=3%1.>I3/$*.2NCGJFFTJB?!3 )9=6$8?GDPK@'s$+@J=V6(+.4+OLLJ?MD+)##>.-]MDOQPJMX6565+*1K&1,(+),-.0-+'  $%).0/'@8/&((UZR,/013;GH8.IT/4;;:47@973VKIZ9AJ,=6Y;|xA?@ ABA@AAABCCBAAB ABBBCBCCDCCDCEDCCDCDCDEDEDDDECDEDDDEEFEFEDEEDDEDDEFFDDEEDEDEDDECBDDCBABBABCBBAAABBBCCBCCCABCBCCBCCCBCBBBCBBBCCBAABCBACCCDDCCBBBCCBCCBABBABBBCBCBCBCBBBCBBABCBCBCBABCCCBCDDDBDCBCDCBCCDDCBCCBCCCBCBCCCBACBCBBCCBCBCCCBCBABCCBCDCDCCDCBBCBCCDC BCCCACBBBC +BCBBCDCCCDCBC BBCCBDCCCDCCBCDCDCDCBCCCBCCCBCCCDCBCCBBC DCCDCCBCBCCDCCDBCBCD EEEDDDEDCDEEDEDECCDCDED CDDEEDEDDDEDE DDDEDDDCDDDEDEDE FEEEDFEEFFEEEDFEFEEEFFDEEEFEFGEEF +EFFFEGEEEFEFFFGFEFEEDEDEEFEDFEFFFGFFEEFEEFFFGFGFGGFGFGFGFG"IGGHGHGHGGIGIGGHIIHIHGHGHHIHGHHIGHIHHIHIHIHJIHIJIIIKJIIIKKJKJJIIJKKJKJKJKJKIJKLLKLK +LKLLLKLLKKLKKLLKLMLMLLMMNMNOPONMNONOOOPPPOPPPOPOPNOPPQPQQPPQQPPPQQPRRRQQRSRQQRSRRRSSTTRTSTTUTTUTUUTUUTTUTTUVUVWVWVWWXWYXMYYYXWXYZYXXYYYZYXYZZ[Z\ZYZ[[[Z[][]\[\]^[]\^]]\]\^^^]_`^_]^^0/]//^0_0`a``0001101101021212112123232323k>v]FZ`\k:23:9=>>@=>A:45751'*20.,*'((,,.3;$&!:;; 97=<<>>@==;.-",+*,-,..03300/0//..-/12/.,,***+*,*,b--..27::73/03255435642110//..-.,')-./01/..---./.-//,-//./0./11/-.//..0101321210/02454556775566656656755349;:<[!;:<;545543011356::77:/#FI%'2877966-$FG%&'())''((**++,/0/++.3i#*(('()(,7=74nz]{iIJIJIIJ IJJJKJJJIJKJJKJJJKKJJIJLKLLLKJKLMLKLLKLMLLOMLMNMMNMLMLML KMMNMNNMMLLLKLKKLLLONNMMLJIJ KKLKJJJKKJ IIIJJLJJIJ KKKMLKLLKJKJIIIJIHIHHHIHIIHIHIHGHHGHGHGHGHHGGGFFGFFGFGGFEFFEFEFDDEEEFEEEDEDCDCBCBAAABABA@?@???@@@?@?>=>>>?>=>>==>>===<<=<<;<;;<;<;::;:;:::;:;9:99::9::98987877767778778777668766765656654 55445544554343ge33ffe3e ceedddeeec +bddccaccbcb aabbabaaabaa`a`bb``b``_`^^^_^__```^__^]]\]]^]^]^^]]][]]\\\]]]^[\ [\[[[\[[[\[[[Z[ZYZZZY8[ZZZYXYYZZYYWYXXYXWWYXXWWWVWWXVWWVWWVUVUVVWVUUUVVUUVVVUVU TSTTUSUUTSTSTSSTTSTSRSRSSRQQRQRQPQPOOPONQPONNOPONONONONMNNONPOcuwtqiZPMKEEJ@xx=~}4K{50?QMC98dU6^VBHFD=72.+*//0//.10+*&%'*-,('***/./0--,,+*)'()-.+&'+,/47;@H%IA:58435855=HG=/!,4<9=@:F&).(%$")40013682,SURPMMKFHFHHGDCDEDBBACCEFEB?<9631/))(),"%(*,.//-'%$%&&# "%%&)(((!!,=:2,)&&'(*,,023795100/..005<>??>=>>AGHIC9MJZ\d]\YT\b`[YTSQPUXUPOMN~EDi52.,+))+-.0/-)&%##""$%'*022.---*)+,)*)*,,-.1-*-132.+,,-11-./0.-../53.,**))*+,,+,-,(%E><75335331251'!$(28844312 %"!$". ""$(31)&"""%'#%'56-% $%(-+,&'())*))+($%##%9?-./20..,+*)))O(ME6;?B?=9/k#%&%',+13,(""%$"#'%! $*0+$""##%#""$(/12.0454769;A#%')-&2@FB:E@7@79:668@?;:73238932>6>:>@0-;;6/-/-*),020?$$$#!" "'*+)$$  +%& + ($%# #-(#  +  "*(-(" "+!-!#$! <0+24/*'/( =! +/'&#*/ !)$"2//;"&+'#<*`zϒz.u =I¿¿Y¿n¿ĄCŅ8̅΄τЀi +KlCU_X_0'+348;<@?A>,!!%###%" "  !$$%$""  "! !      -    ().-'#!6).+,Xk[~jǘ3 &! / + ффπĩ\[VRK?743-,/*OO+YX,5N!$.+& 5-8.*.)&!!   !  + +>  386300,()(('&%%&&$#"!!!##" } +   $#""$&%%++(%$0.79=85507:9453010240-+)'NJ- F    +   +   +  '*! +   P   + !!! ! "}~}~}~}|}|}|}|{|}|{|}|{|}|}|}||} |}~~~}}}~}~}}~}|}|}|}}|}}~|~~~}~}~}|}~~}~}~}~}|}~}~}~}~} ƹƪہ̭жȴҴyя˔Қſ֬ށĀ燄᨝ɬրރ5        &Gƺ녃؀rםνձ쭊M !"!!  %$%$$$###$%$$#"##$$#$$$#"#"!!!"!"!"! ! !!""!!!" !"""!!"!!! ! ! ! !!!       -LJŶ€żøȀþҞ졂Ȯ쁌úμɅxѼɾ³¼ϵр9649D<0)('-43-154019:46B;=?>@@@'59;2TSQ*C 6!',,LTNHGKUMI804"$+=?5-!3@NTTI;!s'&DR5E0K+.40/SGE>E=J%!A5*ONTZ[RONT1.-0,(0M,,.,,+)(,572+.+(!!&*-+)'F766.X[Y.89FYRMF97AY5872/1/5<2UOQMR42=A0;d\:?SA?@A@ABAABABCDDDCCDCDCCDDCCDDCCD +CDEDCDDDEEDEDDDEED CDEDDDEDDEEEFEDEED"EEDCCCDCDBCCBAABBAABBAACBBBCBBBCBCBCBCBBABCBBCBCBBBCABBCCBCCBCBBCBCCCBBCBBCDCCBABBCCBBBCBCBCCBCBBCBCDBBCCBBCBCBCBCDBCBCBC DCCCBCCCDBCBCBCCDCDBBCBCBCBCCDCDDCDC BBBCCCDCCCDDCBCCCDCCBCBCCDCDCCBBCCCDDCCBCDDCDCDCDCDCDCDCCCBCDDDCCDDCCDCCDED CCDDEEDCDDEDEDEDEDEDEDEDEDDDCCDEDDEEEDEEDDDEEEGFEDDEFEFEEFEFE +FEEFFFEEFEFEFFFEFEFEFEFFFGFEFFGFFGFGGEFGGFGFFFGGFGFGFFGHGHGHGHG$IIHHHGHIHHGHHHGHIIHHGHIIHIIHJIHIHIIHIHIHIHIJJJIIJIIJKKJJJKJKJK JKKKLLLKKLMLMLLMMMNMNNMNMNOOONNOPPOOPPPOONOOPPOOOPQPOQ RRRQRQQQRQRSRSSTVUTSTUTTUUTTUTTUTUUUVVUUUVUVVVWVWX YXYXXXYXXYZYZYZYZ[\[[\]\]]\]^]^___^^^_^___^//```a10110110121212332323332323VO`>Sc_aa^38<99867877:" %((*+*,,+*)()'&&IHJHGHFFEB?@BB@BCBBEFFGA@@@>???<@AAAB?ABA???>9675231266633431/./0//00/-+++,+,,--.35132544334321211//010.+)-/0210/.-...-../--/.--..--.00/0120122300/133433344453345465467655543458::==<# :==;;75743235679:<;+$$&'.466:5+&%5&).-*('(*.+,,,./.-+.2lL/!*++,++*,4<95=\ujgvKIHIHIKJKJKJJKJLJKLKKLMLLMMMLLMMMNMMMNMLLMMMNNOMNNMMMNMLMMMLMMLMNNNMLMLKLLKKKLLLKLNMNOONMLKKJ KKLLLKJJKLKKKJKKKJKJKL +KKLKKJJKIJIJIIIJIHIHIHIHHHIHHHIIHHHIH IIHHIHHHIHIHGFHGFFFEGGGFGFFFEFGFFEEFFFEDEEDCCDCDCDCCCDCBABBABABAABBAAA@@@A@?@@A@?@?> +=>>==>>=>>=<;<;;;<;;<;:;:9:::9:998989878 78777687676766655655656544554343323f3ffefeee2dddeedccdedcbbcbccbcbaaa`bcbaba`a`aaa`_`a``__``_]^__``__^]^]^_^^^]\]\]\]\[\\[\[ZYZZYYYZZYXYZZYXXZYYXYYXXYXW VWVVVUVWVVVWVUVUTSTTUTSTTSSTTSSRSSTSRTSRRRSRQQPRQPQQPOPPPQPOPOOPPPOPOPONMMNONUONMNNNOPOsvsgj\NTM@AGAF15=94,*,+,-/20--)%'()&$&')***((*+*(i),,+'(-1588=?GJKF?:83357749EE<2(#&*26>?=AG'),(" 27*-JG)25/+NLONKHG@=DILLLGDEEDFHHEDFHHFC>:642-'$ #&(*D #$'),/010-)(%%%""%'&'(%###%*53/*&""%).31020110-,,./0259;;?@<==@ECA6GJX^\\YWXZXYWTTSTTNJKvx>332.-,*))*,-020+'%%#"#"#%&*.0/-+*+-//-*)***,,,-+-+,--.-.0.112/..-,-,-11,,+,.,*,/+)+*'$FC@==>6/+/22321. "*2;!4683*)-/0-!4(',1/('"!#$"# (H42,&%%(*,-L'()()'#%(&##!?8!+122/-.,*(''O(OI?9>=;:94$ %'&&(0*c89/*!#'-*%'+'"#!%-1(%&)+,,-,*),11.234148:< !B"() ;?858;6317:399>:;<318850-/11.,+1<"""$"! "21- ()),)$#  + ', !$  (0(##'.*(    #,10( &0!(!  "05AA@4$! $%''%#""" "" !"#%% !   ! !!   ~ +Th&##  %,-*2Un~]b½¿Aa<+%:߀жbXUKK>495,*WOR.+3(((1--+ )>ACH0;9:4,SP)/$=)72259@ICAB@;;*%.)'''%&##" 1$ #9GK<31/4>HG*8&).JZHIJNTRJ>*$,&7;3-"8CCTSH;@r ('KE.?@@A@ABABABCCCBCDEEDDCCDCCDDCDEDCCDECDEDDDECCCEEDEFEDEDEDEEECCBCCBCDBBABCBBCBCBCBBBCDDCBCBCCCBCCBBCBC BBCBBCCBBBCCBCCCBDCBCCBCCBCCCBCBC BBBCBCBBCCDDDCBCBABCDCDCBCBCDCDCBCBCBCDCBCBCCCBCDCBCDDCDCBCD"CDCDBCDDCCDBCBBCBBBCDCCBDCCDDDCDCDCDEDCCBCCDDEEDCDCCDCCBDDBCCDDCDCDEDCCDDC DCDDCCBBCDCCDCDBDDDCDEEDCCDCDCCDCEDDEEED3EEEDDCDCDDDECDDCCDDEDDDEDDCEDDEEEDEDDEDEDEEEDCDDDCDEFEDEDDEDE FEEEDEDEFEFFEFFEFEFFEFFEEFEDEFEFFEEEFFEEFGEFFFEFEFFEFE +GFFEEEFFFEFGFGFGEFFGFG HHGGGHFFHFHGFGFGHGHIHHHGGHHHIHHGGGHIHHHIHIIHHGHHIIHIHIJIHIHHIJJKJKJKKJIIJIKKIKJKLKKJJKKLLLKKKLKKLLKKLKLMLMLMLMLMMNMMMNNNOONOOONONNOONNMONOOOPPOPPPQPQPQRRPQQRQRRRQRRRSSSRRRSTSTRSRSTTTUTTRTTUTTUUVUTUUUVUVUWVVVWVWXWXYXWWWX WWXXXYXXYYXZYY[YZZYZZ[[[\[[\]\Z[\]'\\]]]\]\^_^^__^^___^^/000`000``00//00010101 2112112112112223233223332332hZsQLXUTX\R0<@A9:D@=7.-1/..3002//..,.//592@B:<:5:836567:>!&(+,,)*+*)'&&&%JK%%%GDDDCAACEEDDABHFAB?;>@@>@@=:ABA@@?@BA@>R9:>FEC>::=?@A:57873242221100///..-+*+,.-+,,+--./01/024421100/0//1420.//.-,-00/,120/ ,-.,,-..//./.--,-/000/.0232230../23122322244334445654545565543567999=:;9;< !<=>;65623446778:94'$#%-35668*ABFDGG$(,*(&('*/*+-,/.//.3jDe&,,-9--..,.02Iv`t}odJIIJJKKJJJKJJKKJKJKIKKJIKJJKJJJKJJJKKJJK LLKLMMLMMMLLLMNMN MMMNMMNMNNNMNMMMLLMNMLMMLMMNM0NNNMLLLMLJLMLLKKKLLKKMNOPQOMLKKJKJJKLKLLLKKKLKKJKJKLKKKJKKLKKJJKKJIJJIJJIJIIIHIHIHIIHIHIHHHIIIHI HHIIHIHHGGGFGFGFEFEFEFEEEDEEEDEEDEEEDEDEDCDCCDDDCCCDDBBABBBABABABA@AA@AA@@@?@@?@AA@??@??>???>>??>?>= >>===>===<;<;<;<<;:9:;;:;: 9998988899987 67666877678676 5665655665 4544544544543343G433f3efgeff3e23eeedfeddedecdcccddcddcddaaabdcbaa`abaaabb`abaaa`abaa```a`_a`_`^^__^``_^^^_^]^]^]]\]\]\\]]\\\[\[ZZ[ +ZZZ[Z[ZY[ZYZZZYZY +XYXXYYXYXYXWXWWVVVWVVVWWUVWVWVWVTUTUTTTUSTTSTTSTTSSSTSRTTRSRQRQPQQPQPPRRQQPPPONOOOPONONNOPQOPNPOONONOONONOOONNNONOQNNOOPNkksrstZBfJVOaKN_aJPZYF2[6>bd>?J7Ceb+'FA@BED>7/,-./11.*-,( '*)((+-+)'()('(+-,))08<=>>?DI%FA:;62020-3>E>3,,*!&,2634?BHf=R^]ZZWVQRWUTOPPNPWt=@71/,**++'(),-030-)&%$$$%&&'*--+))*)*+/0.,*))**//,(*++,+.-/0-/02210/-*++.3**+.111.-)')'$A?@@BA=92*)121211&1604= =;=91+&)-5#$-00** $"!""(!%1.5)&!"#'&*-&N((&&'$%($ ?<5?(./00.-,*'&'''PJE8>A?984.!&'%&)-.,<:4( #*3,#%(&#"!$(" "#%&)*+/2371/243055/10$"(!#A7!3+1/+-019$3M螖YMWTRXYJ*4;<68C?<3 ]#%$!!! "#"!" "&%""!""!!"#"!" !"!      & .  %)-,/,f&Jfl" ! "! #&)A\Ynrq%¿|0FZ*/ӄYòeTRRT;,F4DAFSW/4AD//20&1 &76!#-*=4)$$%%%!   ,,-.,-*')),***)'&$#%$!#"!""#!  + + i    !!! %#%#""!#&&,/?&297554620431./-,)'NB% H  +   +      + $  &#   ]       !!'+ '"! ! }~}}~~~}~}|}|}|}|}|}|{|{|}|{|}|}|||}||~~|}~}}~~~}}~~}}}~}|}|~~} |}~~~~~~~~~}~}~}}~~}~}|}~~}~}~}|}~}~}~}~~}~}}~} ̽焔򂍑ㄌ¬ĿÃ˯tݜ֯䂟ㄚ۔Ļ񅚧ȁm     + +  #.\п󈡵ـ׷±цQ# + +   "#"     %$#$$###$##%%$!"##"#$##""###"#"# ""!!!"""!"!!"#"! !! !"""!! !!! !! ! ! !! !    # @զ˯и핛NJ˼»نҕžùמß撙񉚝ôk󀏐ñǼ-*4>A@977454+-/19?<@B@9?5;?E+7=;92-UP+21H$22558=CFDAA@;?-;))(('%#! %$#!!3HC?5./4>DH5#$%(/D/KFCEPTEE"'($77,2'AA4YPOP<@?@@@?@A@ABBBABCBBBABABBAABBBCBCCBCDEDDCDDCCEDDCEEDDDEEDEEDEDDEEDEEDDDEDDEDDEFEDDDEDCDCBCCBCBCBCBBCBCBBBABBCCCBABCCBBCBBCCCBCDCCCBC DCBBCBBCBC BCDCCBBDCBCBBCBCBCDBCDCBCBBCCCBBCCBBCDCDCBBCDCDCBBCDDC BCCCDDDCBCDCCDDC DCCBCCCDCDCDDCDCDCDDCCDDCDDCDCDDEDCDCDEDCDCDCCDCDCCDCCCDDDCDCCDCDDCDCDDDCDEDDDCDCCDDCCCDDDCCDEDDDEDCEDEDEEDDCEEDEDDEEEDE DDFDEEEDEDEDDE DEFFEDEEEFDEEFDEFGFFEDEFEFE GFFFEFFEEFFFEFEFEFFFE +FFFGFFGGFGF GFFFGFEEFFFGFGFEFGFFFGHGGFFGGGHHGHGH GHGHHGGGHGIHGGGHHGHHGHGGHHGHGHIHIHIIHIIHIJIIJJIJIJ KIKKKJKJKJJK +LKLLKKLLLKLM LMMMLLLMMNNMNMMMNNNMNONONOOONOOPOPQQQPPQPPPQQPOPQ PQQPPQRRQRRQRSRSTTSST)UTTUTTTUVVUVUVUVUVWUUVVVWVVWWWXWWWVXWXYXYXYYZYZ[\\Z\]]]^\]]]\\^]]^___^^_^//__``0`0a`a10101110121212232232K343223jVRXLY`]\WS^5=D>9>=73(.301/-/64211212244424=@#@7==;6420/5=%,,++*))(%&%B&$#$#DBBDFDEIDDFEB=<<<>@@=;>=?BDDAAA?@>:::8?>>>?>??>===>=>>=<;;:;<;;:;;:;:;:9::9989987876 766555655655654554343efe2eegfed 2ddecdcdedded)cbcbacccbbbaabaabaaa``a``aaa`abaa`a`aa`_a`_`_]^_^]]^]\\\]^\ ]\]\\]\\[\[ZY[ZYYYZYYYZYXYXYZXYXXXWWXXWWWVWVWXVWVWWVVVWUTUVVUTUUUTTUUTUSTSTTSTTTSRRRSSSRSRRQRQQPOQRQPQPQPOP +OPPOPOOPOPOPOOOPNMONOPONNMNONOONOPPUrxxvZGhhV`,CxJb6\Z[RD?>6197>dG)4@F>S+E@@@EFDB>83..1/.,--./-'"''+-/-(''(''(''))*+*(*3<=>9IaMXXSUTSSUUOPNOZab;130.,-,+--++*+-040-)'%(+,//-,*)*+,-,+++**+(*--*-..///..-..//11220+,-.2.+.23311/+)&#D@>=;>>;73.*//-/.1!')/15?<>;<;>"/#!$.2,-!"$@!#")<01'$"##*(++('N((%%'&(&FC4:%-/..0-+*(''()&JHE84.$(g-2'%'$1& #(&"$&&%"!"("""#%()++,172+133216@<5!#''(&#"<"%=;"!:50..572->I9975523<=8BA89;>=CD725;A !"!! 20!'+,**)$& +   $& '" +/$&  $$"21' %$ $#,/,.3A?9104-)!"*, %#$"i,5*'($"*.39=A 079$& 83;<1菢"- 5n¿.¿5ƄĀuӄ҄Մ م-#%PiOWa_[VQY07>959:2'F "##%##$#"!#"#! !$%$$#!!!#   - + ),-.-&Mv#  !#" !%'(aNrZzb*¿ą„/<=6adǧYXWU<1PN@I.:N/B :33.%## #9,#*$-%#$#%%%$"     + "`"00-./.+'&((&(+)'$%(%#"!     + +  + + = """! !"#$#""$&)+07@/7632321350/-,-NL76     +  + +  %&#"      +    + " ##+  }~}}~~~}~}|}~}|}|||}}}|{|{|}|}|{|}|}}|}||}|}|}}|}~}~}}~}|}|~~} |}~~~ ~~~~~}~}~}~}|}~~}~}~}|}~}~}~}~}~~}}~~} ǻǴݦ񒓗н˲ͽƖǠ鈘˪u׏㿶絭ѫ䇖ąھȇ;   + +  +  +    +Cܿ鍳ƿꆘԀxݿ˽҇ݠҭT !""     +"%$#$#%%$$$%&%$###""##"""!!# ""#"!##$$#"!!"!"#"""#$$$""!!! !"!! !!!"!! !  !! ! !!!  ! !          +4ϩΦ͛ׯʨݝĸÿKϊ͚Ԉִ̾Ⱦ󄅓ɵͶ炋ƯՀ%%.G<,()-7>MF*+5:;><>A=A:?J2:::;5-RNS000C-//68::CDDBB?;A-/%'*)'%# %'/ $%!"/:A4.*+;FEE#<#&.=VI:=CNXHL+=$)&65!-D?JbHEDPTLGLP[QWZ>ISQ[UNX8:536U00.H39=4D7;54-/20.-&HOA=4[QX[H-+)&&&'+.201295/VNSRZd6h059Z^2@>2JK`oCl@?@ AA@ABAABABBCCB ABBABCBBBCBCBCDCDCCDEEDEEEDEDEFEDDEDDEEDEDEDEDCDDDCCDDCCDCCCBCCBABCBBBCBC +BCCCBCBCBACBCBC +BBBCDBCCCBCDCCBBCBCDDBCBCBBBCCBCDCBBCDCCCDCCDCCDCDCCCDCBCBCCCDCBBCDCCDCDDCBDCDDCDCCBCDDCCBCDCBDCCDCCDC DCCCDCCDDCCCDC DCCCDDDEDDCDCDCDDCCCDDCCBDCDDEDCCDDCCDEEDCDCDCCDCDDCCCDCCDCCDC BCDDCCDCCDCDCDCCCED CDCDCCDCDDDCCDCDCEDCEDDEDCCDEDDDEFECDED EDEEDEDEDEDEEFEEDDDEEDDEDDDEDEFEFE!FFFEEFEEFFFEFEEEFEFFDEEEFEEEFFEGFEFGFFGFDFEFEEEFEEFEFFEFGFGFFEFGGFFGFGFEFGFGFG FGGGHGGGHFGFGHGH GHGGGHGGHFIIHGHGHHGGHGGHGHGGHGGGHIHIHIHIJIJJIJIIHIJJIIJIJIJJIJJIJJKJIJJKKKJKJ KKJKKJKLJK LLKLLLKKLLMMLKMMLMLMNMMMNMOMNMNOONNONNONNOONOOPOPOPQOPOPQRQRQRSSSRSSRSRRSTTSSSTSTUTTTUTTUTTUVTUVUVWVW YXWXWXXWXWYXYZ[ZZ[[[Z[\]\]^^]^^^]^_^___^^___`0/00_0``001010111010121213 +23233232223iPcJZwj[PUp[7FF:585112244//0410320./034686>DJFDD@;6579779$/,+,,*)&%$$%%&'&%""!ABBE%IFEFECD><>?>>=>@?;@DEEC=;=<::>BGIC9;B$%@>Aa@==95696665567679765.00.02121210/---/012330,,/11/12220//00-++,*-..-.10683131-.//..//./0033-/./10/0$11//./1233233232110221422357444322346d589889:9:>8695439614;;:;5-)(')3:86/)DDFEDGFHJ&'&%&(+,*+-/1126ldl$*+,,/./0-././jV{z~LIIJJKKJJKLKKKJKJKJLKKLKKKLLKJLLKKLLLKMLMMMNMMNMNNNMNONOONNONMNMMNMMMNNMNNNONNNMMNNMLMMML MLKMMOOQPOMMLKLMMMLMMLMLKKKLLKLKL +MMMLLLMLKLKJJJIKJIJIIIJIJJIHIHIHIIHIHHHGHGGHHHGHGGHHGFGFGGFFGFGFEEEFFEFFEDEDEEDDCDCBCB ABABCCCBBA@A@?@?@?@???>>>??>?>=>=>>>==>==>=<=< :;<<<;<<<=;<;:9:::;:::9888989887778778767776676 55546665656555655545454455443444344333ffg3f33egfdeecdd12eccdfedcdcdcccbbb`bba`aaba`a`bbbaa``a`a`__``__```a`_ ^^_^__^^]^_^_^]%[\]]]\\^]\\^]]\^]^\]][[\]\[[[Z[\[ZZ[[Z[ZZ[ZYWYZZZYXYYYXYXYXWXW$XVXXWUWVVWWVVWWVUUVUUVVUUUVWVUTSTUTWTSSSTRSRRSRRRQQRQQRQRRRQRRQSPQOOPOPOPOPPPO +PONOPOOONNONO)PQrqpueRjxvYp<5L?W^bQ=<:744238>B@61244-&#*+.2;9:@64/)% /!!&*-.-29!$$%'%',/.,23*$!! #&(''())&&$##"$%## #&-//24;0.-,+*.5998997689:788798662NHRSXYVUTRMLLROC_\-,+*))*)()-.0/.+)((%$&&%&(,./.,,,-,'%)*,+*)*++-0/../-.1.///.00010-,-03/0530...-*'$C><:;;;7210.+)+--2)'1:;50654422)(,006!AAH8*+#-412& #%$% '5'7*%&$$$!%),.'('N(*IE('#H&E7B(,--/0,)(&),,*OLHHCAC?:0$!%&''*4/! !+/"$%%%" #%&#!!%)"!"$'((*-/7<2'04425%$$$&'($ !!="&'! .*77)&35>801/4@=NWIFADC?9??>=<524.-E + + $#!"(!$0-2 (--+,'"& + '%' + *% )1(*  + %##01* &  +)!!.2.((*5475(2394*,"-%!$%!& )$!4-10#=/.349B$B!"48)( *2HS8ڞ.U#¾L¿¿¿)„¿MƄʄ)̄˄̀'܎|RUtj\PToU/==3,0'g #! #$%%#!" ! ! ""!#&'((# !"%*)!%    %  ) -0-,`--'Ql%# !#"##!#%%&XTso謹¿*¿…¿„g@ ހϳ\SQWF;N]_KV?*6357-!#(,!" '%&4&$""#%&&#        $$/00//*((('&$'(&%(+&%$"!!   + $  +  + `  !"##!!"#$$$ "##).4+01653123.,+,RK."        +  +     #('%%"!" +  + +  +    +  + +  +    $( }~}}}~~~}~}|}|}|}|||}}|{|}|}|{|}|}|}}}||}|}|~~|}~}~}~}}~}|}|}~~} |~~~~~~~}~~~~}~}~}}~}|}~~~}}~}~}|}|}~ }~~}}~~~}~}}}~}~}~} ɳºèȞ󄓞Į؈˩rķӉòſ򍚕ҷ⒢ɰϔݎu )  +  + '+ǹ쑩↓LԄπʩθΰ^!  """  + %$$$#$%%%$##$#"$$$#""!"""#"#"""$$$#"!! !!"!""##"""!! !"!"! "!!! ! !! !  !      ȻѦĺƿķ’ʉ˶좷偌邋ǠʹϷʀ;0,2+(%*/:I*,F5::9;<<=CIA'7;79;40VMRW16+$212;98;7,*=D?<;78BP331251-,--=4BAhNR`8K,'$(*,(..-+/46.SPRSO_m837>5\.7C>2DTj8w@@@??@??@@A@@BABABBCBABCBBBCBC DDEDDCDCDDED EDDDEDEDDEFEDEDDEEDEDEDDDEDCDEEEDDDCDCDCBBCCCBCBBCCCBCDCBCDCBCCBBCDBCBCBBCCCBCBCBC BCCCDDDCCBCBCBCCBCCDCCBCBBBCCDDCBBCCCDCDCDDDC DCCDDCCCBCDCDCDCDCCDDDCDCBCDCCDCCDDDCCDDCCDDCDCCDCDCCDCCCDCDCCDCDDCCCDCDDCD CCCDDDCCED CCCDDCDEDCDEDCDCDEEDCDDCDCDCDCCCDEDCDEDDCCEDECCCEEDEEEDEDEDDEEEFFEEDDEEDFFEEEDDEDDFEFE +DEFFEDEEFFE#FEFGFEEFFFEFFEFFFEEEFFEFFEFFEEEFEEEFGFGEEFEFGFGFFGFGF GGGFGGFFGGHGFGHGFGFFGGGH +GHIGGGHHHGHIIHHHGHIHHIIIHHIIIJIIJIIIHIJIHIJIJKJKKJKJKJKLKLLLKLML KMMKLMMLLMNNNMNNMNNMNONNONNONOPQPQPQPQQQRQRRQQRSRSRRSRSTTUUTUTUVTUUVWXWXXWXXYYXXXYYZZYYYZ!YZ[[Z[[[\[[Z[\\\]\]\\\]]^^]\^]]^^_^_^___`_^_/00_0 1001110001 00111222112123Z2343jB\P][ZPM`[]9@;14624643210/0-,../36986587:@L)'$?86==9924&-,+++)'%$$$%&&&%#!ABDDD#$$GECr@?=>>==??@@;;?DGEB?=?@?=?CDEG?12997776337559867899;:8<>==:567:?><86531/-././../..03314651/.///0/.+),,--/100265540/-.//..//0.///00//000/001/../1}2321223434455444345442224654478;:999:;::;;;<98;86=9126:=7.-*()4=;91*%EGFEDFF%''&'&(**+*,./149@zz*&,,*,-///.-01/0?Dz{KIIJKJJKKLLLKJKKKLLKLLKKKJJKLKLLLMLLMNMONONOONNNOOONOONONNOONOMONOOONNMNONOOOMMNNNMMLMMLMLMMOOQPOMNMLKKLLMMNMLLKKLMLLKLKMLMLKJKJIJJIJIIJI(JIIIJJJIIJIJJKJJIIJJHIHHHIIHHGHHGHHGGGHGFGGFGGGFGFFFEEDFEEEDE DDDCBDCCBCBBBCBCBCABAABA@?@?@?>?>?>>>?>=>=<=<;<<;;;:;:;:::99::98 98877787787676766676565454-333gi4333ghg3g23effe2edecccdddefedcdcecdeddcbcdcbbba`baba`abaababa`_``_^__`___`__^_^_^^^_^]^]\]\]]]\\\[\[ +\]\[Z[[[ZYZYZZYYZYYYZYZZZYXYYXXXWXWXXXWWWVXWXXWWVWWWVUVVVTUTUUUTSTTS RSSSRRSSSRSQRQRRQQPQQRQPPPOPOPO PPOOOPPONOOONONNONNOONNOOPOOPLtmSrt\psscp{kLGX]UBEOFA218>?ICWB:CGDCC@@BBBDGFGF=61.+++,-/./,($5%+.+))((''((*/10+(.=EFHH$')($A@>;765337<9:=>;8762-)&!-$"$)--/69> #$"#&'*---/-&###""#&'''()'''&$#"!"! #&)1523455D40*'%')057877886677656998779nOWVPXUQLIHMYNH_Z,)'('$%(&'('+,,.230,(&'),/0//.-+,+-,-/+%*+*)*((+*+01--/./100.-.0/.02//./21373/,+++'$FDD><8872//..-+)*-/-.8<:/2/!//5.+-10111033,1."3>?2"!""(0D20#&%''&%&'.3*''M')%$&&$GG:;!'*-0/.+''(++**ROLGEDBA;' $$%(+34$$'! $%&!"%#! #'!!#&'()+03 $$ =<<96:!5'+240+/7=?A,Q@>@@;708@A8.&()/8 # #% !"3,0/%)-/--(%#$ +  *,* !"!%/,* %$!-2+ !'  &".;..,540651E<21.66;=1+-68-(%%&#$).! &9-/5!-.121=G$ !$4$+((:K)pʍH@L¿s„+¾jńdĄƇn҅`YK_JRUYQK]XU05/%&%&#"""! 4 "!!"'(&$$"##"#%()**!   !! .111.-,qr\&$$" !##"! %&''4~ФBĊ$Ä6 *q3 ހнeQ=WVCUXYMWO>,(02-"$-'$ #)O!Q!$"##"#&&#%''))%   Z $$0-,*&%%&%$*+(&&&$#$#"" + + +  L + + + +  !"""#"! !" !"#$%!=,14-530.+)*.SF-'    %    +  + + +   # {*+'&%$"! +  +  +         + +   #}~}~}~}|}|}|}}|}}}|}|{|||}}}|}|{|}|}|}|||}|}|}~}~}~}}|}~}~~~~~~}~~~}|}~}~}~~}|}~~}}~}|}|}~}~}~}~}~}~}~} ͿѼ܃ǫа¹鉴侣zִٶ쇊чåћθҝû<   +   + + +    "/mͽ倊 *Ԅ<ׄՀŸƻ񈙞ꄳЦm&   + !"""   +  $$$$#$$##"#$""!" #""#$$#"!"""#" ! !"" !"#"! +"""!!!"!! ! !! !!! !     sÿꨟ຦̼ɺހſ䕟̊ʣ绖ܾlϹ󁋜ıͮKA,..,1:5E(&(+M<<:68;CMO(7>::<51.T+1157&*=5;<2:>BDDCE@?57&&&''$$"!"$#%%&"#/?1,(*GSK7#'$(;EC;?HPLHG%$& ,+'3"2;B=JTD:4q*4AH:;75WZ9>NC>?SEMZOSWXj[PSV^a65Y]`X[5G..0,3KLC::FC?C:947H4(*63DC7XWdBH;NL'))DB##%*33,KJMPXZh77:?<7-5<<?>;>?@@?BDC@??AACCECCA?@CA.-21001-&',155687;;9<:998876769=A?<=><9631-00101/./1122101///00.///-*)+,.01.//1114320--,,-..-10/.--.000//011./03420..//0001221.02332234333121235677977:98h9;<=:429=<92;=668<<;7/,++7:74.(%FFEDD%((')(*,-,+*+.113:@ucc'-/.,-+../-+/0/0EyʃPKJJJKJJKKJKJKKJLLKMLKLKLKLMLLLKMNOMNNNONMMNNMOOONO NNNONONNOOONONOPOONON POPOOMNONNNM&NNLMMNMMPQPPPNOMKMLMLMMNNOMLMLMMMLKMMLMLMLMMLMMNNMMLMLLMMLKKLLKJJKJJJKKKJJKKJJKKKJIJIJIJIJKJIHHHGH GHHGGHHGGGFEGHGFGFFGFGFEEEFEFEDEDCDCDCBCCCB.CCBCBBBAA@@A@A@@@A@@@A@?@@???@@@???@@@??>?>>>?=<>=>>==>=>==<=<<<;<;:9::;:999:9898 77887677766676 55656655565554554445554343ee2e32dffddeededbdec2cadcbdbb`aabbcbabbdcb%cabba``cbba`a`_a`__`___``___`_`__^__`_!^^^_^]^_^^]]]^^\_^^^]\^]^]]]\[]\]\ +][\[Z[Z[Z[ZYZZZ[[YZZYYZXYXYXXWXXWVWWVWXWXWUVVVUVVUVUTUTUTUSTTSRRSSRSRQRQSRRQRQ%PQPOPPPOOPPOOPONOQQPOPPOPONOOONNNOPOMNPOOONPNtksSdvVcmmki]P8KS_GIRFA?V\=O0@OQRCBDGDCAHGDEIJKLIGD?=4-**,.0//-*'%$#'*))%&'()-0-'&*;FFGF#&)'#@@<:643138:=<8326831,,(,3>AQ1;942).@0V7OKPQR+VPJHGBEFCDHGEEDCBEECA@??;==?>75452-*&!3*$(0348:9!"""$&(+,,/.(&'&%$##&)(&')'&''%%#$$!!$'+03234652.*%$(.45443457A943674663345F<266:E=2*$$(/9>&%$)( #!"#1#(,.-.*'   + #.) %#$+)*) $"+6(!$ 69$%1(#(.$,829852><@DDBD?=R$#"$%#$!  ") ####% $0A9$$+JRKKI<'C+5#)1&899=@QD62z/@DE9?603157B>2iJC@@KVY_cNSX[]0790^]V/8S0155%@-QGDA==?*:<:F<*)46,+@/8O8O9LM)MHA?!)*-.*MMOS\a1479AD;5/:A61RP9HBa<:<=;:961/0022110100/---./01//.//.,--./..//.0/,..,+--.//.,,.//0/.0/12210-./00.1212201110221123g44100346767988::96568:;:854==:;>5*,36;90+'%%FCCE#%(-/,+++)(*-1578;AZm)*---,,../0/,-0/03FJKKKJKLLKLMLLKLMLLMLMMLLLMLMLMLMMMN ONNNOPOONONOPPOPOPOPONONON ONNONNMNOOPONMOONNM NNMNMMMNNQOOMLMMMLLNPNONMLMLMNMMMLMMMLKLKLK +LKKKJKJKKJKJJJKJKJKJIJIIHIHHGGHGHGGGFGFFGGFGGFFFEFEEDCDCCCDDDCCB CBCBBBA@BA@A@???@@??@?>>?>?>=>=<=<=<;<;:;:;:989877878787677667654545545454443423f3#fefffd3ededeeedcdddeeddcbbccbccbcbabaccbbabbb`aaabaaa`aa`aaa`_`a`_`_^^_^_^^]^^^]]]^]^^]\]\\]]^\\\]]\\[\]\\[Z[ ZZYZZYZZZYZZYZYXWXWXWXXYXXWWWVWXWWWVWVVWWUUTUUTTUTUTTSSTSRSRQQRRRSRRQQQPPQPQQPPPQQOOPOPPOOPPO PONONNNONNNONO^{b^yccirdMOaFQ\c>-qFC7oEm^F7:;===;<@?@CJHEFIJLMLLHEFB<4-++--0/,))++" #'(&&&'(,-*$$(7EFDDH(*(HDC@<97436;;>;56954/&"(58=?D29$,)$[R0\MRBCIJ',XPQLFDFEGGJKJKHCACC>=?@>9657:94-*%!6-'-566; "#$&'),,-/,%%''%%&'()*'&&'''&'&%%$#&'&(*//.13442,)&(-1462345565633544431223<@NPLLXVv?YV++,..,**)'&&%%$%(+,..-,)()&''('(*-01-.--./00/.-+(*+,+**)+/-,-1100010/.///.-++.211125431/,+'$"C@<:;:994/0//,-.,,,-7(/7:663;)-/)60,( &)-'%%%$$.IK.!$$% ! !"%,7$-.-**'(*(&(),(@%$'N'K')(OJFB$#$&),-**+)))*)SNNLJGEEC/2&&%&+02*% %'!"%%# "%$#"%('##&'*5779>A<03?=#*0("8+"!(&$%%'$$ ""9:<:7<:3,)*762'&+8:'LB@?420110&""%)453:$(" ! &##!" "2  !'..,.($+    .&!(1%&.*,+"#%3+  ""%$>*(%'088=A03103!!352-0-,($$%%&,'{!*&$$"! *+-08= "$++!%+"30&35Cg„]Äi„rDŽ ƄŇŇDŽLJʄʄ=Є҅ԅO>HڊdOfrJ@HOdW-3/%%%'9  ! !!# "%$(***..+,/0'   +' ###%&"20-+"!KV%&$"! "##$%# "%&();|۶¾[¿¿ń:^8F(!?Մw̶cGH\HLPXN92:%+07">##:"85*  ##"&+($%'(*,+,)'(%!!!   ,(/(-!!"#0-..)(('((*+**&"!## !!!     5" !""#$#" !!""!"!"! ")/P.,+0,R?T +     +  !  %%&$! -***(&$"  k  +   +  +     !}~}~}|}|}|}|{|{{{|||}|}|}|}|}|}|}|}~|}~}~}~}~}}~}|}~}~~~~}~}~}~}~}}~}~}|}~~~}}~}~ +}~~~}~}~~~}~}|}~}~}~} 񂎑ߵ׆ӻɠƿˢyٱ򆄖ތ򼦻聋߉J +  + +     +  'bȬ􅔺༺ǿ½߀􁄅ѵµ͋δw-      !"#"#!   +  + $$$%#$####""$# +""#$#$##$"###!""#"""###!!!"###""#"!""! "!""! !! !"!"! !     !   !     &˷¶Ȼٰ󆊃¾ɮГlĿ13F)QEBGEDD>AA?<>CDH()'3<>=8254T-34206605?<<8:>=BFCBF;6=!" "   &$(!!%"!#(#%3=I9)*0HD<*%)&-AOWFIHD3$27G+&6977;8MI55s3OK;8:932YTV8AXmPCkfMhc]cPS^]\22=1OT37G./15852,/VF>?L)(+3@@;///.0,DI\86UP.*(ABLJ ()(&OQNPXb648>BF=334<;aRQ2HHBS@@@?@??@A@BACBAABBCBCCCBCCBCBBCBCCDCCCDCDDEEEDDDCEEFFEDEEECCDDED CEEDCDDDEEEDEEDDDCDCCCBCBCDCCDCCDC DCCDCCBCCDCCCDDCDCBDDDCCDCDDCDCDDCDDEDDCDDCCCDDDCDCCDCCECDCCCDDDCCDCDDCBCDCDEEDDEDDCCDDCDCDEEDDCDCDECCDEDCDCDDCDEECDCDDDCCCDDCDEDDCDDDCDCDED EDDEEDDDEDCDEDDEDEDDEDDDCDEDEDDDEDEEEDDCDEDCCCDDDEFEFFDDDEEEDEDFEEDDEDEDDDEDEEDEEECCDECDEEEDFEDEEEFEEFFDEEEDDEDEEDEFEFEDEFEFFEEFEFFEEEFFDEFFFEFEEDEFFEGFGFEEEFFEEFEGFGGFFFGFFFGFGGGFFFGFFGFGFFFGFFGFFEFGGFGHGGFFGGHHGFGFGHGGFFGGGHIGGGFGHGGGHHHGHGHGHGHIHIHGHIIIHIHHIIIHHIJI +JIJJJIJJJKJKJJJKJJKKKJJKJKJJKKJJKKLLKKLLLKKLMKKL KMLLMMLMLM +NMMNNMMMLLMNMNONNOPONO POOOPPOOOPPPOPQQPPPQPQPQ RQPQQQRRQR SSSRRSSRTTSSSTSTTUTTSTTUTTTUUUVUUUVWVWVWVVVWWVWXXXWXXYXYYXYXYZYYZZYZ[[Z[[[Z\]\[\[[[\]\]^^^_^_`^^^//0`a```__`0_aa01001 002221112232323G442223433htbiOKPU_d`37>04:=?<855310/0322148657?ACECFGMRPLJLIFCA+)/323.),.../562.,.1244335789=>==A??;9?CQ8)./0/-,-,/0/.24103cqv|JIIJJJK JKKKLKLMLKMKML5KLLNNMLMNNMNLMMMONNOPOONONOONOPOPPOONOOPOPOQPOPOPPOOOPO0POONOONNOONONNOPOPPOPONNNOOMNMMONMMOONMNPPQQQRPOMNPONM LMNMMMNNMNLNMMNMLLMMLKKLLLKKLKJKJJKKKJKKKJKJJKKKJJKJKJIJIHJJIIIHHIJIIHHIHIJHHIIGHIHGGFGF&GHGFGFGGFFFDEEDEEDEDDEEDDDEDDDCDCDDDCDC ABCCBBCCCBA@AAA@A@A@ ?@@@???@@>?> ?>==>>=>>=>=>>>==<<=<;<<;:;::9:;: +999:89998898 9898887778878766676 556565655565 45454445543443+223334gfff3fefe3feddcededdecece2cddcdddcddcbcbcba`ccaa```abba`a_aaa`_`aa`_`_ ^^]^_``_^^_^^]^]^]]^^\\^]\]\\]\\]\ ]Z[Z\[ZZZY\[Z[YZYXWXYXYYXVWXXVWVUVWVUUUVVUUUVUTTSTTUTSTSTSSSQSSRRRSSRSTRRQRQQQP QQQPPPOPPOQPPONNNOPOOPNOOPONNNOOOPNyol|j`nmqDIUX^f\FH,PPQE:6568997546:>DCBDGHJIIHDCDA?>:73/-,.,*+)*+*% %&&(*.1)# #3BGABG&()&#@;8633267; =757896352#"/(.=:R.,QJ*8BFKF>#%#&*0W.RJDEFHKOQLEDCDFBB?>?@?=;:9879<92/*$"7-,1678: #%&'()+,//)'''&$&&$%$%&&'%"$&&#"$$$'-(*.0123440*'((,1Q123154445232255221112487=La]Ze8e/,*(()')*,/0/-*))')--.1,+*((('((()*+.00--.,,,--.,+)*,-/+).-+.100121/0/.,**(.2124321.-*%"!?=B@:545310232/+++,-1=A /21375<916-1330:@+0(*-'$#DT.$*'$ #&.D(-*0/)$(($$%&'&E%:'OPHN(*P@GL($$$&)++,)(HHTSPJJKIHFE> #(')-323.+#% %#":!&%!"$&#"#&)7>;8257679)..*$ .%4$'$%#$"%%#   9 :0,)'*+,))&0@(KA72/,%&$$%%*013833!" !!! !"$#1 !"(.,,.$  + $!" ,'(1%))'"!0/}(% 504$)5F1&?;/C>=@2/4/3$)1'6,&%**,& #0&& %! *,(-2=!#),-% ''C4000= +/Y1FĿ¿„"¿¿¿ÄE-¿Ą4Ŀ„]Ņ`ɄȆǀjDRnZoYDCIOX\S+($ ! $!#V!# ""  !!%%'(.320.0.*&$   *a   "%('#:64350, $%5%#"""!!$#$'$#(((),Wor¿ÿþYN%:+D5ބ݀lTQ^OGSTX204.165)0#0EAK*-&! !$$"#%%))*)&&%#"!       % !"!"30*')('*/0+('%&'## "##!  N + +  ! "!!!# !"! "##"#$"&/>C@>?<7,1 $(!""!#'*+0.?GA,,;AA% $*.FM@?GP6;EF@.0I@.4>>9699MU=94I>8:89340PSdezbQDl8Mfgb\W\[Z132798862G-/15==#!2.E;L,++-.;J8A+27.,/$-.-,+,63.'*,'&'&%NRQS[0433>@F;43787dXJ[=M>z@@??@A@AAA@AAAB ABBBAAABBABCBCBCDDCCDDDFDDDEDDEDDECDCCDCDEEDCDDDEEDEDC DCCDDCDDBCDDDCBCCBCDCCDCCCDCDDCDDCDDCDCDCDEDCDCDCD CDCCCDCCDDCDDC +DCDDCDDDECDCDCDCDCD CDDDCDCDCDEDEEDCDCDEDEDEEDDDCD +EDDDCDEDDCDCDCDEEDDDCDEDCCCDEEDEEDDDCDEDEFFEDECCCDDEEDEEDDDEEDEEDDDEDDDCDEDEEEDECDDDEDEDEDEDDDEEDEEDECEFEFEEEDEEFEDDEEEFE DFEFFEFFEFEEFEFEDEFDF EEEFFFEEFFEFEFEF GFGGFEFFFGEFGFFGEGF +GFGFGGEFGHGHHGGHHGHHGHGGGHGHGHGHGGGFGHFGGHGGGHGHHGGHGGHIHIHIHIHIHIJIJIJJJIJIJKJKJKKKJKJKLLLKLKKKLKKLKMLLLKLLLMMLMMLMMMLM NMMNMNMMNMNMMNONNOPOPOPPPOPPOPOOQQPQRQPPPQQPQPRQRSRRSSSRSTSTUTTSTUVVUVUVVVUVWXYXYXYZZYYZ[[\[\\\]\\]]\\]]]\^^^]]^_^]^^]^__`___a_0001000`0101212221234344323gFiHmZVQPPOYcXZU.&:=>>==97432/0024669;511<@A6+),.2:H)('%I&%%&&&$#"$&&$G$$GFEEGHDFFEABGFEEB@=A>>A@AEFIKNUUNLJIABD4(.21.--4.134220-,+-/010/1456:?>;>>?<9;<:30/0011212322010/-0100/.-+-//.-.L-/,,)*,...-././00100/.///.-//.020/02110//00101110110123232357769;98::;:787775U:! !"#"! 6,+5<;60,PHHEFCCE%**(&$%'**++/:>ACHJ^Ɗ]04231/1.0.//.-24005AsKJKKJKKKJKLMLKLKLMLMLMLMMNMLNMNNNMNNMNOPOPPPQPOOPPOOPOPPONNONOOOPOPPPOOONNNOPNONNONMNOQR PONMMMNNNONMMNMNNMNONNNMNMNOONMMNNNMLMLMLMLKLKLKLKJKJKJKKJKJKKJJJIJJJIJIHIHGHHGHHGGGHGFFGGF +GFFGGGEEEFEDEFEDFEDEDCDCBA@A@??@@?@?>>>?>>>=>=>>==>=>=<<<=<;<;::;:98 99897678778766676565 +4454445445433323344343f333233e2ed2efdddeed1122c2dc0bccbcbbbccbbbabbbabbacbb``aaa`abbaa```aa```aaa`a` +_`^_`_`__]^]^^^]^^]^]]]^]%\\\]][[\[[\\\[Z\[\[[[Y[\\Z[\[[ZZYZYYZYXXZYYYXWXXXWVVUUVVWUUUTTTUTSTSSTTSSRSSRRSSRSRRQQRRQRQPPQPQQPONPOPPPOOOPOPNONNMOOONOOONNNO$MdvmqwigrxN@S^gcZP=]uyoAf6F:55467876>;::;72/.,))*,-,)&"$$)-.&! '9EB?!$'($D?99623467=<6239741-($"=1*,138:853/+,0320/.../7C*'*/38:;:/3:903B:A?0,-/#&(*,223/-&'#'% "#!#"%!!#&'*),,%!3-1/*1!%%"-#%$#! 9202.(&$$))%);D<0*)&# %5<>E<2230-:# %#""!!"$$"!$%!-2 ""('&)$! +  #!"" + #,!%, +,&"  !17%$!"3282553 $"  (!)&1&#(+,-2 ()+#"$$D<1;)5. p¿¾=¿¿<¿¿„†„"„%ĆƅDŽ~̄)Є ΄φԄ ؆' aOE^LIEEFIT\KKD  $($   h   $"!   "!"%&(*-23.--+%&% 4 !#$$#E?=85/-/!% oxL,("##"$$'$$$##&('*/1z1¿„„ƄlÿO;)&Ԅ҄τрȪpVUZNMX]d3&137642%89A9 /!(""$"%&)))+)'&$ "!     + + +  u"* 31-)('(*-/-)'&'$##!"$#"!   + +  !, !!!##!"#""#$!""!"%!#7M?>"  )  .   + + + +  +  1#"%%%!" ')((('##  `   # +    + +  +    + + + + + }~}~}|}|}|{z{|}|}|}|}}}|~}}|}~}~}~~}}~}|}~}~~}~}~}~}~}~}|}~~}}~}~}~}}}~~}~}~}~~}~}~}~} Ϥ猞ţǞ೎¸ַpɻ눔C  +   + +    +  +  3]ȹ̸Ƹ܀ܾՀ˿nǾȧżp$ +   "###    + + %##$$%$$##"#"#$$##$##"###"##$" !#"!!!"!""! !"! !"  !   !  !        nļŤӲӬʺdڪȾ󀄊˽߀􃂎ξꊕĔöĸøջô:0BC9B;;>669  $$!'!#$$2++;4GQLO--../24:9..694P/6C00-,24-,-+,,'(**QTX,/565<:4425686__L\;NFlKBA@?@@ABCAABBBCAB@AAABABCCBC DCDCBCBCCCBCCDEEDDDCDDDECBBCDEEDDDEDDDEDDEDEEDDDCDDDEEDEDDCDCDCCCDCBCDCDBCCDCCCDCDDCDDEDCDDEDDDEEEDCCDDEEDCDDEDCDDCCDDCDEEDEEDEDDCDCDCDCDCEDCDDCDDCDCEDCDDCCDCCCDDDEDCDEEDEDEDDDCDEDDDEEDCCEDFDCDECCCDEEDEDEDCDCEDEEDEEDDCEEDDEDDCEDDDCDEEDDCCEDDDEEEDEDCEDECCDEDEDDCDDED EEEDEDDDEEDEDDDEDEDEFECDDEDDEEDEEFEEFDDDEFEFEEFEFFEFDE FFFGFFEFFFGGEFGFFEF +GEEEGEFEFEF GFFGFFFGGGFGGFGGGFGGFFFGFGFFHGGFGHGFFGHFGGHGHGFGFGHFFGFGHGFGGHHGHGHGHG +HHGGHGHHGGHIHIHHIHIHIIJIIHHIHIJJIJIIJIIJIIIJ KJJJIIIJIJIJKJKJJKJKJJKKLKLLKKLKJLMLKLLMKMMLMLLNMNNMLMNNNMLMNNMONNMNONOPOONPPPOPOOPOONOPQPQQPPRQPPQQRRQRQRQRRSRSSRRSSRSTSTUTUTUUVUVVUVWVVVWXYXXXYXYYXYYYZYYZZYYYZYYZ[\\[(\\\]\]]\]^]\\^]^^]]]^__^__^^^_^^_`_``_``010111011101211122112332343444343344egjRnVUVVWNXaWNY$)8=?BA@=;:7322246879=1.,4;@GNI?<89>=8/+1+%9&('&''%&(%&%&%#%%HG%&IEEGLIEDDDBKLJGGE?9?<>>>@B?81-,.03233430121010/012/,,./0/0.-.,,-,+&')+-,././/13531.,-.0/.,,-012123310001/0002212/01210124675247689<;;877:;86547= ! "$""# 90-06;7.)LKIGDACHJ$%((&4&(+,*+,7?B"FFۋ0:64320023331--22-/6BhMKJJJLLMLKKL1KKLMLMLLLMLMMNMLMNMNMMNNONNMMMNOONMNNPNMNNOOPOOOPOPPOPPPQPPOPOPPQPPOQQPOPOPOPOOONNONONONOOOPQQONNNPOOMNOPOQSTRRPNNMNMNNNOPPONMMMNNONONMNMONONNMNMNMNMMLMMLMLKLKLKLLKJKKJJKJKIJKKJJKIIJIIJIHIIIHIIHIHHHGHGGGHGEEGFFFGFEEFEEFFEDED CDDCDDCDCDCDDCBBBCBBAA@ACBABAAA@A@ ???@@@??>?@? +>?>?>>>=>=>=<=<===<=<;;<<;<;<;;:;;<;:9: +999:8998989898778788767667765654$3354443234f343gff3224343f33efe2232efe5cdc2221bccdbbccbdccb1bbcccbbcdcabaaabbbaba`abbdbabaa`a _`aa```aa``^` _``a`a_`_^_^___^^___]^]]]^\]^^^]^\^\\]\[\]\][\[[Z\\[Z[[[\Z\[ZZZ[ZZY ZZZYXYYXXYZXYXWXWXWWWVVWWVVUVVWWVVUUVUTUVU0TTUTTSSTUSSTTSSRRRSRSSQRQQRRQQRQQQRQQQPOPQQPPOOQP OPOOONOOMOPONO5NNOPOOLj|]nvpbtuYViaeb_OI2-D9?A=AB56677989846;AHGFI&LsJHDA>=;:;=@A810+)**-/,+)$%*.*"3BA?A#&'$C>::5/3245:8629=;7/+,0?I< !0-?J)T**+/.*)''*..,*+*,/.,,-/035-*+))('()+*),.120.,+,,+++*++***+,,./.--/..//01//00221/--,,+,()+37.*)(&$FB?=;767650/--.10-./7A@E+7#,3<84637;7-/#?""9E<0 (.$>48,% "' &7'(# 69&6B#$$&/&"$&4%#&JBH(*+)&%%'(')*+)(*JCJLJJJIG>9!#&%&(-132,(!!*% $% !!!$#$%"'5D2?N+*$#,4/,,(#4)2!63"" "%$$#"" 3-./-)&#$(%$3?722-'"&>HE921010+"!""$&" $('&"$$!/1 "$!"& !%$' %)"#*+)!' !(7+% $$#@"$40>><38E@+ ##"!$&#  " &%#"#"!%'*,--10-+)&#%%!  #  +   EEGD;622/ #q/,$$$%%&(((''#$()%)/:k⧷¿ÿ0Ņ ńT¿23  +[(lɨqHUYRI[jV81;67680+!!!#(' %$#%)++*('#  $'!   +     +   23,(')&*,..))*)$#9! !!"""##"    + + +Q  "#""#"!!#$%$&%#"#(#""!  q +  + + +       +   +! ~%"&''&&$!     + "   + + +  +   }~}~}|}|}|{||{|}|}|}|}|}}}|~~}}|}~}}~~}}~}|}~}}~~}~}~}~}~}~}|}~}~}~}~}~~~}~}|}~}~}~}~}~}}}~~}}~} զ썙éȯǃn񀒉ةˆǒۋձÒ?      +       + ,J˙شûѹ͵˻nϼձᒢǎĸs(       !###"!   $'$$%%$%$$$#####""###""""##"!"!"! """!!"!!!"!!"""!!""" !! !  ! !!  !      +  / ŵûȭѻ㴷#Ƹ~򌏏͆޼씦̶Ե쀁 ſȀ@A7 <<==92*/58=6+)HEFEAH&'$%&%$%)--*(+5;>BCDz6=964233354554004./36~MLKKLLKLLMLLKLMMLLLM NONMMNNMMONMNMMNNMNMMNOONOOOPQPOOPQPOPQPQPOPQPOPOPPQQQOOPOOPONOPOPQTRSSQOMNNOPPPONON +ONONONNNONONMMNNNMLMLMLMML KKLKKLKKKLLKJLK JKKLKKKJIJIJIJIHIHHIHGFGGFGFFEFGEDDFEDCDCCBC BBAABABAABBBA@AAA@ +A?@@@??@@@? >>?>>==>>>=>=>==<<===<<;;<<;<<;:;;::99:::99:::989878878778766767677656665665445444554445544433343g343(fg33ege23ed3efdf33edefd1c2ecdd2cbcd2d11acdbabbcbbbaabbcbbcbabbba```a``a``a_aab`a``a`_^^_`_```__`__^]^]^_^]]\\]]]\]]\]\\]]][[\Z[\[\[\[Z[ZYZZZXYXXYXYYZYYXXXYYXXXWWXWXWUVUVVUUVU TTVUTTSUUTTS RSSSRSRRRQQRQ PQQQPQPQPQPPPONOOONONOOOPONOPL{\n~wiqwpA^n`haWUV-?:79=@SO8879::997669>FGG$&'&KIJGFB>>=;;950./159<<:79>;6600-/0$%""%)++/SJGIHGJHLKGGHE?F@A@@ABD@@<>A>7/,+*% :+(/49@"$&(((.53*()'%$%&''%#""#""#$" "-2/00--.@3330122233112246202562.,,-364<""!"#$%)..,'$#%+/.('(.100./0263,())*-/00///-,,,+*)*+)()+..-.--/0/11100.--.//0.-/.--*)*.22/'&&$"CBDA:943311230-.,+++>1%@FK$-6:33;;=:="$$$*$!#"9 #@"$%&(*+*'&%&&()*-+LHHA=@ACEHE9. &)**,2584&(# !$% #(! "! "!$(-;:L*'#"&-10/-+'"11$& )1##""$!  6521,)'$! "!!,9820)&"!$*:E5/5776..D$%""#()#&("#"!-1  !! #"""$ &&#+" $(#"*#)#) $ A'35G1014:?C86;838A!%&( $% ##!!*5!*,#"  !&=9?C*342HD?¿Ä'„½L¿ÿ„…#ąÀDŽƄÅƇ)ƄȂƅ ʅƆ ʄɄȀB8 +{^?SHHKOJS[R?2  "%$!#!  !! !!!" "%% #&!$).,,-/./-.+%##%%# *   p + :?ED:<! k..(&##&')*)())&%'"$*/zĜ/¿ąeĄ*W + +DkEV`ZNW\U.8@7;7024" "&):4 ##$*))'$!")&$%  +    /) ()()+),+)))&"(#"""#$!!!"    + + + +  + #"!""!#$$!!#"$&$,%# !"   +   !# +              X%%$ !$"  +      + + + +  +& +    +}~}~}|}|{|||{|}|}|}|}~~}}}|}~}}~}|}~~~} ~}~}~}~}~}|}~}~} ~}}~~}~}}~}|}|}~}~}~~}~}~}~}~} ٥³Ƶ휌ǝr׃Ԩ쇒Фλ숕퀇󄒓ĮJ        +    %-ЯÒ͹´Ͽ¾ބlпܻ₠ߘ񂤃ƸҲ, +    !   "###"! +  $$$$$#$$"#"##$###!!!"#!!!"! +!!##"""!!"!""!"!!""! !!!  !   !       #ٿнKȾŷ郆亣ĦͬϾ¿ـ=9;CIKHEAHAI+P,/-38:569<:88XS/21979:=64;;5588=;6/7;-+C<# # ! !/')&)#)"+9?:CB6@;6'$%#!%4AIISX?91//046;D@"-5:5Jn420*-^a96[PZA~vJHPb_TTR]^[b5775;3W]056@G067=DDD4$/-..2530-.W[160-CO631N),).-+++'&J+.102348:648<;6?>PO`9GLGiA@A@BAAAB AABAABBBABACDCCDCCCDDCDDCDCCCDCDCDEDCDCDEDEEFEGEDEEEDCDDCCCDCCDEDCCEDCD CDEDDBCCCDCDCDCDEDEEEDDDCDDCDDEDDEDCCCDEECDDCCBDDEEEDCDDDCDECCDEDCDEEFDDDEDCDEEDDECDCDDCDEDDEDEEDEDEEDEDDDEECDEEEDEDDEDEDEDDEEFDCDEFDDEEDDEEED EEEDDDCEEDE%DDEEDCDDCCCDEDCDDDEEEDEEDDEDEEDDEEDDED +CDEEEDEDDDEDFEDEDDEDEEDDDEDDEEEDEDEDEFE +DEEDEEFEEDEFEDEDEDEFEEDFEFFEEF%EDEGFEEFEFEFFEFFEEEFEGGGFFEEEFFEFFFEEF.GFFFGFFFGHGFGGGFFFGGFFGGFGHHFGFGGGFGFGFFIGFFFGFGFG FFGFGGGFFGHGHHGGHGGGHHHGHGGHGGGHHGGHIHIHHIHIJIIIHIIIJJIHIIIHHHIIJIJIIJIIIJI JJJIJJIIIJKJIKJJKKJKJ KKKJKJKJJK7JJLKKLLKKJKKLKKLKMLKKLKKLMKKKLLLKLLLMMLMMMNLMMMNLMNMLMMNMNMNNMNNMNOMMNOOPO NPPOOOPPOOPQP RQQQRQOQPQQPQRQRRSTSRSTTUTTTUTUTTUUVUUTUVWVWVUUWXWXYWXXXYXYZYZ[ZZ[[[\\[[\[[\\[\]^]]\] ^^]]^^]]]^^^_^___a``_``0_a`01222123234343433433444544kCyV[Zc\^[W^ZP0!1::9<@@DF@<953236=<./22.((+18BH:3118>ID.%&)?I$I%&(''(('$"#$$%FC#%HGFHEDJHEJGFFGIHB;CLKSRTUS*+*SQQJA@BCBbCC1(*,100042110-+,/0/.057996765556646646844213303,(')-/02334553344311211.,-...0.-.-,,/-*'%)+,-/../.s//-./.--/..01.././//01221232352321211/1455434320/046647667755< !!<60,+,/1448:4/&EEED$++)()'#%(-/*(.59:=A>K}'@><71!3555631263:;4JJJKKLLKLLLKLKNNLMLMNNMNONMNNONMMMNNNONNNOPOPPPQOPOPQPQQPQPPQPQPPQPPQPQPPQPOOPNOQPOONOPOOOPPOPOOOPPQRS +QONNMNNNOOPMNONONOOOPPPONNNMLMMNNNMMNMLNM LMLMMLLLKLKLKLKLMLKKJJJKKJJKJ IJIJJJIIJJJIHIIJIIH GHIHIHGGHGGGHF GGGFFGFFFEFEEEFEDEDDCDEDDEDCCDCBBCBABBAB@ABABB@@AAA@@A@?@?@?@@>??>?>=>>?=<>=<<=<=<;:9:;:9998988899898889877878787767878676 5566655565455454344333443g3gf3332fed3eded22233e2221222acdbcdc2cbc bc1bcaaabbcbabaaaba`a1a`aaabaaa`aa```a```_a`__``_^_^]^q]]^]]\]\\]]\\\[\\\]]\[\\\[[\[Z[[\\]\ZYZZZ[ZYZZZYZYZYYXYYXXYXYYXXWWXWXWXWWVWXVVWWWVVVUUVVWUUTUVVUUUTTVUTSSTSSSTSTTSRSRSRSSQRRQQQPQPQPQQOOOPPONONNOONO.PM{efkz{vusaFkkg\UE-@>966=E&&#A>;632.14:??<::==::<:891(4:78;73/66/.3 #"7!%&(KIEHEIMMKGGEFD@=BDBAA?ACAABABEEFA830/)&C4%-9?"$&'((,46.(&$$"""#''$$#"##%%'# "'.210,+.1545420/4/11200.0/24/.44.)(.?%# #%&###%%#&*.1-)'#$()'$%(+.3454220+'(.('&&'),-.//.---,.-+,.*(())*(*+-../0/.020/0/..,.+00-))-3,/,%$#!@@A?<;80.000231/.,-.I-?=)"!#/B3-#-.-0$7C#$! %%""!&)"; '''(+*(('('%))**'NLMK<8797;>6&%),+03695##!$!! !!   !"%-929D&$$$'.3//,*(%&% /'226= "! !" 4456.)#!!!#/75.+'%$!!,872246:9.4O$(&#!&#(% #"! 43 #    + + " ((!  +%&19" ((#!%03"!;5>.TR0-1;;620!#$"&0.!$$+)& + 9;#(+'"/! "()56A'265E + G*¾…†¿¿¾¿S¿Ä[DžDŽPƄVDŽbτOOvLFL]SVUT^S> !#''! !&!   ! #" %! """ !().-///...*$!#%$$$       18>=!`_/*)&!#$%(*)()(9%&($'*-ÿÀ$eY&HԀսWIOYZWXZHb->=94.(,%! !%->)! $%&&#!!%$#$!!!   9   +  (*)*'*-.+*)'&&"!$%$##!"f$#$&&%"% + +  + + !#&##!$!""$! !" $$""&&  + $  +      +     \$$%$  +  + + + + +   +    + +       + }~}~}~}|}|{{||{{{|{|{|}|}|}|}|}|~}}}|}~}~}}~~}~}}~}|}~~}~}~}~}~}~}|}~}~}}}~}~}~}~}~}~}~}~} 郏ޟׄ萖֟mƬϵңȾ鋔⏴v   +   +  +   T.lȿǰ嫒Ǟ}ѽͽ҄/Xʽáʶاn" +      !   ""#$%#! $$###""###""!"!!!!"!!#"!!!""##"!!"! ! ! !     !  ! ! !   %Ʋ½ɻրŹ򁋐ľ戚؀ቄ ã艟˿iҾʶƾـ4=JFDFHEDFH-1.38786205<<74+*043-;7::>421-15?A;611:D/)8>! # ""%!$"(+-$)!($$27;@@55-4/%!!4=5G49<)->?2C.+2/2AU/-3=O.X5=92-W-Z\UFLZUTLKKV`k`Q^lfa55g45^].7:>@=468DNC<4%+-/.261./-TOWc5,6530''0/---+(&FC?J/135633:;74;hOX8GKKpxA@@@A@@AB@@ABA@ABAAB ABACCBBCBCDCDCCDCDDDEDEDDDEDEEEDDCDEDDEEDEFEDDDEEDDDCDCDCCDDCCCDCDDCCDDCCCDCDEDEDDDCCDDDCDEEDEEEDEDEDEEDCDEDCDCDEEDEEDDEEEDDCDDEDCCDEDDEDCCDDEEDEDEEEDDEDEDEDDEDEDEDCDDDEEEDDEDCDDEEDDEEEDEFEDEDEDEDEEDEEDDEEDEDDEDED EEDEDDEDEDFEEDEDDDEEDEDEDEEEDDEFEEDDEDEFEEEDDDFEEDEEDEDDDEEDEDEDEDDEEEFDEDEEEFFFEEDEEEFFFE,DEEFEEFGFEFFEEEFEEEGFDEDEFFEEFFFEEEFEFGFEFFGFEEFGFFFEGFFFGEFGGFFFGFFFGGHGFEFGFGFGGGFGGFGGGFFGFGFGFGGFFFGFFGFGHGGGHGHGFGFGGHHGGFGGGHGHHG HHGGGHGGHG +HGGHHGGHHGHGHIHHHIHHHIHIHHHIHIJIIIJIJIJJJIJJIJJJIJIJKKJJJHJKKJJKKJKKKJJKKJKKJLKLLLKLKLKL MLLNLLKKLLKLMMLMMNMMLMMLMNMLMMNNMNONMNOOPPOPPOOOPOPPOPPPQQPQ +PQQQPQQQRRQRRRSSRSRSSSRRSSSTSTSTUUVUTVUVWVVWXWWWXWYXXXWXYXXZYYZZYYYZYYZZZ[ +Z[[[\\\]\\]^]]^^]^]__^^_^__`_`0121233223433444344434434Skvcnaoi^WV_S\<1;>>>??ADC?953454:A*/4/+(()29?KD3006;GO<&'+8C$&%$%&'''%%"#&%%#$%GCE$q%DGHHIJMLIEDJQQ))*)*,+U*RQJ@>=9568 >=:30/.0/3966<;8-%$%$$+1.--+%$'-.-*+2688<>alr?>>90.00034547635>>?>>>=>=<=<;;<;;;:;::;::;;::;:9::9898889878877787676 55655656654 +545545444343323fg33ff323eddeeeddee21222d2dcd22ccdc21cbcccb1cbcdcbb1bb11aaa001bbaa0aaa``a``a```_^__a`_``___`_```_^^^__]^ +]]]^\]]]\[\[\\Z\\[[ZZ[ZZZYZZZYZYZYXXYXYXWXWWVWVUUVVUUVVVUUUTTUUTUTSTTTSTUTTSTSSSRRRQQQRQRRQQQRQPQPPPOPPOOONOPO+NNONPONNOORcck|yxujVW>s9cOWdC>878;F[G678:976657?EI'((('&%$$D@><=?CDBC@C<3-550/.0.+('''& !$&,=C=;?##!?=9660-0592/1611/1543331-8!&(,+)%')LJEAFLOMHIGC=<@DGFBBDFDB>??BABDB=:74.&$>?=><:974/,--/1012257'#3:C47-5>?29C=9@A9BI?G(56&'$$/-*4@&J/#$#  #'")8(0-,:83*5>$$$?=!""!: !&&$$$&&&''&)())''P)PG45::883 $&*-3357."   !#!%&%*/47@HF"#'121B/,*'$!:"#!!#.,/)6>"!$'% 52731540)$*,4,)%$#!".1/2129?9369"!"%&%$#&#$   "%$'    #(' $!%#"$&7$6.184+1886/,,3;D?2:HC;!:!78 $'&+2*# 8448"!!#b ' %E5;%026]А8Bi€-ÅDžƄńUńĉĄ,Ƅŀ4Մք;J +Nǎ]]Sb]SQV]MC$ !!$%%"$!'## 3! $#! "%%%#"(--.0.(!#''&&   +    hbS*((% !"$()(((%&*...3꫼mą1d8?5**)څڄi¯WHP][ZXOA>(F!6*.3)'$#"#-A- !$%"!"$!! "#     -,(&*.0.,+(&""&'('$$$%##!"!#""#!& +  + + + D"$%&##"!!!""!!"! !"#(  + +        +   +   + + - &(" +  +  ^ + +   +      + + + +    }~}|}~}|}|{|{||{||{{|}|}|}|}|}~}}|}~}~}~}~}}~}~~~}  ~}~}~}~}|}~}~~}}}~}~}}~}~}~}}~~~}}~}~}~}~}~}~} 􂈓稈§ػ򈅌oˮ̻蕴Ѿ𑪺ĸр<     +    +   ! + !  !5ݙ籲ϕϺ໸񂅆ųǿxɷͽϺ˺آ|+      !        "#$%$"  + + $# #$"###$!"!!!"!""!"!!"!!! !!!            +!D©ݻſƲƹ񃐓°K̷핚Ȱĩꉈ#ζſۀ+551+>34g;41#2;<#H*&./6O/$13>;:452VVXPXTIS]TELOF\jomV]8k`d^O\a57>CC<987;86:0220(()(-6=EO=0057>LG$*+0?#%%$$&%&%$$#$%''&HEE#$%'%IIEEEFLP'M(PMQ*++,++**SPSSMIBCGHGHIG8+2;=964/../-((*,/2025789;9851-/(.230/04450)#$%('(**,+-../1113424560--/01010230+))*,-,,,---,,,---,,-./...01010//-.134334335320/230167784001256554339=@=;;:?><9740,,,29<<<;891+,+*'(++-0*$$+/-,-15559???>>>?>>==>>=<<>=<<<=<;;;<<;<;;::;::;:9::9:98999877878767655566545455444554 3444334433f3.e32322e332eddd323e32322c122edeedd222ddc2dd212c2 111bc2ccc1 c11bc1000b00a1a1000`a1`aaa0/0__^_/0_`0_``]__]^_^^^]^^^]]^]\]]\]\\\]^]\\][[[\\[\[Z[Z[ZY[YZYYZYXZYXWWXXWXWWWVWVWVVVUWVUVUTUVUUTUTUTRSTSSSRQQRQRRQRQQRRPQPQPQPQPOPPOOONONN_rrvwusdKRP@m\KW5!C>EZ=;;:9876879;865779>E%')*''(M%$"?><<@FEA><80&+EJD;72.,+'''))&!#&6@A??BBA?>:53/.39<=<8267;;9989;;660*.0-*+/.//00/2&,0.,*((*RIEFFIJIIFECBACDBCCBFEC>?ACBBA>?>950)$A4>"#%''').:4(&'%$$$%$&&%#!"#"!$"#'&&)*).42133651..14100-,,.,)+#*$)B=-:$=H)8B)-J$/=RH1.!#&"!+9.//9;6("/>#%%;9@"#"!! &)'%="#%%&KO(NKM()(N=15:97+"&%%),022#"#c #" "!()2668ÿÿ=ȇDŽ*ą (ÿB +ۅڀ̼fYTUVVK7;/%?2'-,)*5##"#"  "+###""!+/*''#  + +    -&'**/-++))''&&'&&$$%##!"##!!!  + L + + + + + !"!##%&#! "%#"#"!!"*$   + +-           + + +   + +     #%"#d( + +  + + + +    + +  +  +     +  }~}~}|}~}|}|{|{|}|}|}|}|~}}}|}|}~}~}~}~}}}~}}~~}~ ~}~}~~~}~}~}|}~}~}~}}~}}~~}|}~}}~~~}}}~}~ }}~}}}~~~}~}~}~} 稆ïщߎnȩվ䴜򇖧˄؂񚨟ր慔¾ܒx      "     ! F5˗žؔ¥˾ϼjʵ]d˽ĻΧТ龰8#  +        !!!  1   !#%&%#   #"" %####!!"!!"!!!!  !   !     -=ʙԺʄ̀ɿʿԀȹιř푛򁃁ú恑F̽ֹ˾؀B@:8@GQWZ.17=78343357:82XV,1479:<;97*%*/7?C@86679??6>)?#"%%"&$.00'/#-7>EDVF;<>, !#@)-F<=G**(;4E)(A16=4%/?E?nE830_XOKQb3<:^L`mRGd`dge76eZVUWV15;F2:SN.ISMJ08;=88;51476;aPX:HJ?N{BA@ABABBBABBBCBBCABCBABCCCBBCBCCDEEDDEEEDEECDCDEDEEDDDFEDEED EDEEDCDDEDCDCCEEDEED FCDDCDEDDEDDCDCDDECDEDEDEDEDDEDE DDEDEDEEEDEDEDEDDEDEEDDDEEDDDCDEEEDEEDEDEDEDDDEDEFEDDEEDDDEDDEDDDEDEDEDDEDE +FEEDFEEEDDEDEEDEDEEDDEED EDDDEEEFEEFEDEDEEDCDEEEDDDEEDEDEDEDEEFEDEFFEEFEEFEFEFEDEFEDEEEFEFFFEFDDEEFEEFEFFFEEEFFFEFEFFEFEFGFEF +GFEFFFGFFGFGFFFGFGFGGHFGFGFFGHGGHGGGHGFGFHGFGHGHGHGHGHGHGHGHGHGHGGHGGHGIHIHGHGHIIIJIIIJI +HJJIHIIHHIJIJIJJIJIJJKKJJKJKJKJKJKJJJKJKKJKLKJKKLLJKLLKMLKLML MLLLKMMLLMLLMLMMLLMLLMNNMMNONO NNONONOPOOOPOPQPQPQQQRRRPQQQRRRSSRSTTSRRRSTSSSTSTUVWUUVWVXWWV WWWXWYXYYXYZYZ[Z[Z[ +\\\[\]\\]]\ ]]^]]]^^^__^^_^^__```_`_``aaabaa10012123232343434f345S\?=;lZ[ZLN1"(>BB@==<;=@??@?<8.+2333-+-..4>E+P7228;G&)&+1AG$%%$$&'&%#$''(&$E#$%&&%$#HGDIH'()'()()*_-,+RPMNRSLGGFGHGJHB28=866872.+*))+--/123466:9632011.01012234440+%&&(*+,,++,-...//00/0331/./00220/23/*++-../-..--,-.-,...///./00/0002211122233100100017:?<5444556865679:;:9875422/03456579;::40/-)((+/-0+'(*-./.1557::5`A $%>0---./.,,/145329@JJBRLQKLMMLMMLMNMMNMNNMMNONON*OONNOOONONNNOOPOPPOOONOPPPQQPPQQQRQQRRRQQQRQ RQRRQPPQRQRRQ&RRQPPPQQQPQPPQRRSSRRPQPPPQQPPPQQQRQQSSTSQQPOQQPQOOPOPOPPOPQPQPQQQPPPQPONOONOOON MNONNONNONNNMLMMMLKLLMLKLLLKJKJJIJ +IIJJJIJIIJI +HIIHHHIHGGHGHHGF EEFFEDDEDDEDCCCDDDC +BBBCBBABBABA@AABAA@A@@?@?>??>=>>= <==<<<;<<;;<;::;:::;:99:99:998899987898988878767767656556543434334344344343332333223dee32dcde2de212d21&212111c1c11c1c11b111a0011a11a0abb`aa``0a`_`a_``_aaa_```^^_^ _^__^^]]]^^]\]\/]]\]\[\\[\[[[\[\[[ZZZY[ZZYZYYXYZYYZXYYXXYYXXWXWVWVUVUVUVUTTUTUTTSTTUTSRSTSRSRSRQRSQPPQPPPQQPOONOOOPOONbOPOONOOOPZ~j|v}wTJ^|mYQ:;'CJ>[;:;967767;<=<9899;>B$()+(((Q'$C>><<<@>@;4-+6KOQOMIB:3-''')**+('')8DCABA;6325;@@>=?<=<=<:99;;<>754-02/+('',++.//8#-120/.,(DNOIFEGIIHGEC@BCDB@AEDFCAABAAB?@?=;6,% ;< #&''(,44*%%'&%&&%%&%##%&%$# "#"#$*3960.0001-X21...-*)''-5>N+.,*,++1.,('-.,**)'&$! "$&)&" "'+.23/,(%%''(()),..---,,+)&$"#$'''&%&*)*)*,.210///1221110/.-,,,)+))&1/,++,F@=9:9i8;40/.-+',/451319"8BA"2&!.3/4=466-0=?028"#!!O(C*()0BK329 +.&""" ,<).3:7' #>!#%%;@?!"!! %)% &'(%=;$%NMLKK&'''L=0641" $%%$&'+1-&.))" !#&*7A<27#)-/21/*&&$!#$#!!"  +"0$($ #&'"776881,)+--+#%*+("(1) !"(%&365??@;9;!',/.!"55 %)'%(!   $+,7) "(* %+1)%2-)(1=!%$@2AI5-A><>@##>2433.&#0((-(6.)6 -&0;!#0&!'.''!!<4<'14/CՏm-…„B¿…ńƆ ŋ$džTĆƄÆƀπPmQ102]SWUD>!#! !!!" !' m #$--,-12+&%%(**-*"  +  F!/C## %(&#(,540XʀR2 '5zƾdWRYY<3Y"###$!!!% + +  + +           +      +   +  + +  +   "#"!%  n   +  + +    + + + +  +  + +  + +  +}~}~}|}~}}~}|}|}}|}|{|{|{|}}||}|}||}||}||}|}|}|}}|}~}~}~}~}~}}~}€~~}}~}~}~~}~}|}|}~}~}}}~~~}~}~}~~}~}~}~}~}~}~}~} 梅ꈋʭΉڲ瓔򎐑lԻ焊˨╵蛅ڳ㈖Æ􋣔ۑþ= + +  +         !    ! !! ! +3͟ƸցǺ߂ӳ􁅆Ķcж׾И2          !! ) !  ! !  !! !#%&%#      +    #"#"" !!!! !! !!!  ! !  )ʗα󀉈Ⱦͻ󁄂żϿژ잠덛ĸùǫ끕ݽֈɴ¼ʀ;;<?=<479::@,S1*,8B01@BD_l8;8\URIGUf=7es[jaRGP[_]j8;hFPV1\-0:M7J:f\[TPW16,==A=::<<<>D,0@5347>K4%+8EE%''$$&''&$')'&$$$%&Z$$$GF'&ILN,,+))++*+*+,+OIKNPQNHFHJJJHGE<= <:??A6/++,+./01443567513664431343767842253(%&')+*V--.--././/111/..001110121/002+,.01130./.-.//.-+--//0010/-.///0111001333443321001259>>==>>=>>=<<;;< ;<<;<<<;;::; :::;;::989 :9889:999887787667776 77766566555654545434343eff321232 12221d22d21 2111c122d1c1000a21`001aa`b00``00`a`aa``_^_`_`_^^^]^^\^^]]\]]^]6\]]\][[\\\[Z[[Z[[[ZZYZZ[[\ZYZXYYZZYZZYWXYXYXWXXWXWXXWXWVXVVWWVUUVVWUUUVVVTUVUUTUTTUUSTSTSTSRRSQQQRRQRPQRQPQQQOPOOPONNOPONONNNMNONNdyV>r]qeYN'A9DG(598:987789;;::98:<;=@#'('%&(&%$B@><;;=974+,:CGIIMTRSO?-*(&')*+.0+%(7DFBA??>932/2 ! <:98899 ;2-/1,'('&(+..,27(562030'8HQIEEFGFGEDCCEECABCFHEEFFECCBAB=>90)!59%())*32(#$%%$%%&$&%$#! !#$$% $%)*).693.--.//XT./[.-T-))(()/3$8!#%#%$:!?"! #&)+%"%$&%4 &%$%KLLJIN)'&LL:3.+ #$$&&m'*,-+43*6)  #$&/:6C$%C(26"4* 0 3.%3&$)&)6)"?>%+%"#-*6 933H-32>¿¿¿3„ĄÀń%DŽƄhDŽ<DžɇȀsN>H11SNQJDC !"  '& !! ! %'("+(*,./+&%(++//-'    &  + %k!#"!(.467nȅ<ȄʄɄĄĄ'¿R,DY˲PW^X;,O?F7.,*,03 @!  " ! %+,+.477:7-# +< + + + + + + "(+&$&)))*+*(()('$%$&&$c#"!      + + $'$  !@> "A!!?! $"#""!!(+(&  +    "      +  +      + + +  +    !%'  ,       + : + + + + + +   +    }~}|}~}||}}|}}|}|{|{|{|{|}}}||}}|}|}||}|}|}}}||~}~~}}}|}~}~}}~~}}}~}~}}~}~}À~~}~~}~}~}~}~}~}|}||}}|}}|}~}~}~~}}~}|}~}~}~}~}~}~}~}~}~}~} 󇍙槍¾ϤυӅkݽ딓̸劁̭Ї䆋ž޶ٍ3   +    +    !  ! !!  ! !!.jƥѽׇþڅ們Ǻ􁇇ҷi³ɼʶճ԰ӝ8  !       !!  ! !  "$%%##!      +!     ! !   OѨۖ煌ڿ˼ր􇁅Ħŭҽ؈˶i쀂ӹNLJKLM,-26:7466497:871/11237;:<8:;;0$)0:B<;@9;<69=:+'.?$!380+-4@KPOI01%.""(/RH'H=<*2,A?2(,/**94=I*'*10-+,,+HEP>21349E8/*4..-41MA>J0.-11/289541/25/UHY=HNKzTDA@BBABBBAABCBCBBCBCCBCBCBCCDCCDEEDEDE FEEFDEDDEEDCDEDCDEDEDDCDEEEDDCDDCDDEDEDEDEDDDEDEDDEFEEDEFFFEDEEDEDEDEEEDE DDEEDDEEFDEEDDEFEDDEDEEDEDEEEDEFEDEDEFEFFEEFEDEEFDDDFDEEEFEEFEFEDFFEFEEEFEEFEDEFEFEFEFEDEDEFFEEDFFEFEEEFEFEDFEDDEDEFEFEFGE(FFEFFEDDDFGEEEFFEFFEEFFFEEEFFEEFGFFFEEFFEFEFFFEFEEEGEEFGFEFGFEDFEFEFEFEFFFGGHFEFGGGFGGHGHGGFGGGHGFGFFGFGHGGHHGFGHG HGGGHGHGFGFGFGHHGHGHIIHHIIHHHIIHIIHHHIHGHIHIHIIIHIJIJI HIJJIJIIJI JIJIJJJKJJJIIJIJJKKJJJKJJIKKJJKKJJKKKJKJJKLLJKLLLKLKKKL +MMLMMMNMMLMLLMNM NNMNOOONMMNNONOONOONOPPOPPOPQPQQRRQ +RRRQQSRRQQR SSSRSSTSSTUTTTUUTTU VUUVVUUVVVUUVWXWYYXWWXYXXYXYXXZYZYXYYZZZYYYZ[ \[[\\[\[]\]]]\^]\]^^]]^^^_^___`__`___`_`_aba`a 1bbaa11bb123322323234l554455444irO@WG8e\UU\67-09<:8;;<:9>BA>;79=F0FM.04<<<>B)4-B7359A0)/;DI&((%$#$%'&L&'&'%%&'&$##&(GG*)LL',.,-+(*D++*NDILPQKEEILKJILL=6F&(Ej`PLLMLMNMMNNNMOMNNMMNMNNOPPOOPOOOPO +PPOOOPPOPPO QQQRQQPQQRQPQ SRRRSRQRRQQQRQRRRQRSRRRQRSRQQQRSRQQRRQRTVVUUTSQP QPQRQRQPPQQPQP QPQQQPQPPQ PRRQQRQQPPOPONOOONOPONONONNNOONNMMMNMMNMLMNNLLLMLMMLMLMMLLKKJKLKLKJJKJJJKJIJIIIJIIIJIIJJIHHIIHHGHGHGFFFEEFEFEDFEDDDEEEDCCDCCDCBBBCCBABA@@?@A@?>?>??>=<===<=<;:;;;::;:::9:::98999877876776556655665454343432234323332323323232121 0110110110a10a`00_00`aaa```a_`_^_`^_^^___^]]^_^_]^^^\]]]\]^[[[\[\[Z[YZZZ[ZYZYZZYYYXYYXXYYYXYXWXW XVWWWVVWWVUVTTTUTVTSUTTUTSRSSSTSRSTSSRQQRRSSRQ PQQPQPOPOPOOPONOO]`bLkq`QY7xSJWH59<<:767879;;9:9<;9;?F&'%$%&$#" A@:8:9613DEEE-3(IRWY[VG:-('&(*-..1-.:5/..17<=>!:<;9;! 8/*/-*(&%&),,-/18$.33234/5)8IKGDDDFIECCFGFBCFKGDCFGEA?B?@@=:4,%#()),/1*" "$#$%&&$#$$#"   '-,--.178:5^Y[WZXRTSPPRK(*-168<>?@(?>A?>DP,,,+*)+-1/(%&''%%%&%&*+%$! !# "')1(('%'').132/-,**+**+*(('%#&**'$&)+-0220.-./0/-///0.,,,-,,.-*,*'IL@67;=<=8300,---)'+7=<# $*+-2) -0-()&-07=C!;6$)(,B#4C<++$)+#"$&&%#"$(*0#-8A1#<6$&$%%>EB!: #()('$%"$%%&;6%%$IHHHJIKKLMLID;1$"$&&'()+-$+.,&,%$%'2+16:MBe=Ä8ńĄ ńpƅņ%ȄɄ`DŽDŽDŽm҄ څ#.H7E7,SQKHI'"!$%#"$%$ #(((!   "%%($),10)%&),,-/0,.    h&C2 $#'/9ŹɅ6Ʉ)˄YB2| +' G%.ׄ?ǯhb^DC6GC5*4!T31@,!!! O! -.,),38<@?2)  + +  + + + + + +  !"&'(+.*'&()(%%&)&%$&&$!!  !   + + !&''%AAC@AA=>>;>@: ""##%&%#! %-       ($ +     +    + +  +     + +    !""     + +   +   + +  + + +   +  + +" $}~}|}~}|}|{| +{{{||{|||}|}|}|}|}|}{~~}~~}}}|}|}~}~}~}}~~}}~}}~}~}~~}} +~}~}~}~}~}~}|}~}~}~}}~}}~}~}~}}}~~}~}}~~~}~}~}}}~}~} ⢌񂂄ҝϲ΁pٵ挞ㅕĶڂ䄇þƁ  + +    + +  +    +  !!   !! !!!!! !!!6䊊뾜⎏½ϗ߿Žڿٲxƻ˹𴜕ѮƉ8 ! !! !    ! !!! !  ! ! !  !#$$%$#!!         +  !!    $⦃̫πŴºӀ섐ֺ݁ծӦ烐円񅇅׺e􅙡ьҲIEHOR+026998678898761/20/15;:;=:8;=:+-4=<:<>;:958<6D$-># "'#141)/7DPNKL2.!/-G,*(2C,84E7//1:5j.++B)3JEA>CjJ=>;73_ZN?HUPSQY]ZbheZ7:0.15558;;>A>?<<;<>=>[6@AG/4YD35:=-(+5FI&)(J@B$&)MM''')(%%%&%%&'OJ(+OJ))+-..*)*+***NNNLLONLLKIMNMHMPL>,+-Q496624885685--1222103465461277565364346782##%)*)*)(())**+--./10///1-,*,,,+--./../-}021131032223443210/0///10133323442466466677647523575458=;9 =:5322/-,/24/)#"#$''+100120-*'('&%$&,-*)*,.14iFDA!"#B6'&+/.-.,//2:@@?EEG?^jNLLLMMNNNM3NONNNOONNONOPOPPOPOPOPPOOPPOPQPOPOPQPPQPQOPPQQPQQRPQRQRTRRSRSR'QQQRRSSRRSRSQRRRQQRSRRSQRRSSSRRRSSTSRRRSRRSSUVWVVURRPOPPQQPQQQPQQQRQQPQRQRQPRQRQ +PPQQPPOOPPOPOOONONONMNMNM NMMNNLLMNNMMLMLKKLKLKKKJKKJKJJJKIJHJJJIIJIHIHHI,JIHHHIGHIHHGHGHGGGFFFEEEFEFFEFFFEFFFEEEDDEEEDCBCDCABBABA@A@? >>?>?>>?>??> +=>===<=<<=<;<;;;::;:::;;:99:9:999:9:9 78987887778767765455445454 3443444334343232233322122323223232121121212121&222111011011bb10`000aa``b`aa0aa100`a``_a`___``_``^]^^^]^]^]^\ [[[\[[[Z[[Z[[ZYYXYZYYYXXYWXXWXWXYW VUVWVUUUTTVUTUTTUTSSTTSSRSRTSRRSSSRSRRQQQPPPQPONPPOOOQPNOONNNPNNNPOP|wpSeLU]qVWFJbwg>,79=<;9658:9;<:;9:;:<=B&'%$$#"!!?>A$QWU^YNWM68/$NW^f^VM;/)*((+-/221/7DKGCA70./198;;;=Y " <6)&-0)&&%&%&'*.23 ,0/2450=$,@IHJFBC@??CHFFFGHHGEEEC?>@?AA?;61)""')(,.20$""!"$%$d# 988:?,/../\167bZXUTRRSMLNO'),/4;:9773--16>AFJ'*,.,*''*.63-%&"!$'(''),(%#$''# ! !#" '+*/2-.--+***))*+++)*)&%&)*-./110/./00/.-,,,..,,.-.../+*)'#FBC87<==;83/0//0/-&#.6%%$&+,,-.F )+,4;; 87;>3#&@-0+5-%<5"1&&$!')&%$$#,=$&5:%D>/$%$%E>BA #$&&''%"##$%"6#"$$HFFGHJIHHIGDA5%%'()++.+"**&),#,/"#!!(.2=;:L+)/82* &))($""#''&%++'%$E@?*!*$")$&&94;<>1&(0.,+,.,!$(&!#,($)+8CD@AHM !&**!$"""  "" ! +  + '10./$ +  *! 0 -,*),-!! 171')10105:8?GG=(-+/+>2.:-! %/,&&%%"&-+.$ #(*,& 333',4>j爥¾ Ƅ +Ņ"ńĀƄzƄ DŽƀ[Ά&ӄՀ PB]C5XVSHQ/%%$%" "%&$%"! " #?$((! #.!!"!%%)$)'&(*.-E**)(+,,*/2.!  # D%R5$! !'((0488฻n˄*DžȄT¿V` (݄܀u[@H1<=E00(,;6877:412 *: ##!""+4"!/./#0>DQOQ\>:(5%<7 !<;6\>18,00C6T1BC341@@:4lH8?=:308eYLLRJLOS[ikoC'+-..,JD@4=FMT7.-YUK/:91)*,,TE?(3-2<77,(04421-?PLIG`=BMV_QCA@ABABCDCCBBBCDCCBCDEDEFFEEEDEDEDDEDEEEDEDCDDDCDDDEDEEDEEDED EEDEEEFEEDEDEDEDEDEDEDEEDDDEFEFFEEFFEFEFEEEDE +DDEDEFEEDDE DDDEDDEEDEEEDEFEDEDDEEFEEEDEDEFFFEEFEEEFEDEFEFFFEFE DEDEFFEEEFEFEDEEFE FFEEDEEEFFEEEFEF EFFEDEEEDEFE'FFEEEDEEFFFEEDEEEFEEFEFFFEFFEEFFFEFEFEFEFFEFFEFEFE +FFFDFFEFFEFEFFFEEFGFEFEFEFEEFEEFGFGFFGFGFGGFGFFFGFGGFGFGFGFGFGHHGFFFGHIGHGFGHGHGGGHGHHGHGGGHHHGGGHHHGHIHGHIHIHIHIH GHHHGHIHHIHHIHIHHIIHIHIIJIHIJJIJJJIIJJIJJKJKJIKJJKKJJKKKJIJJKKLLKLKLKKKLLKLLMLM LKLLLKLNMMMLMNM NMMNNMNMNONNMNMNNOOOPOPOOPOOPQPPQQOPQRRQQRRQRRRQQQSSRSTSRTTSTUTUVUVWWUUVVVWVWWXYXYXXYZZYZ[Z[ZY[[\\\[[\\\]\\[Z[\^]^]]]^]^]^__`^__`a``a```a`aaa`a`abbab11bb1212 323223322232345445]FzdUF;jgm:^V_^X[XZ8><;:89;:9:9:/GAI/9@@>ACM0PK<8@?+(,9FK'*'$GI&'&%&(()(&$%''&'&JL)*))L,,)+--,,,*OOKFCL*SSOLMOOONNMNNKF*-.06667437447704465244456436687556535432/#"#&')(**-,-,,,/000//...-*()**,..//0/*-0111001232243123322000/.0133322444345545678867895339:842446;=<:4//+(&'+-+)('&&(++-2312021-)'((1&'()**)*-/.1d`+ !#"=1,.-+**,,,-..,5=@>;<6:@dNMNMNMNNNOONOOONNONMNONOOPOQOOPPPOPQPOPPQQQPQRSRRQRSSRSRSRSRSRSRRSTSTSSRQRTRRRSRVVWVVTSQPQQRRQRQPQQQRRQQPPRRQRSRQPO POPOPOOPPOPPONNNOONMNNMNNMNMNNMNNMNLMLLLKKLMLLLKKKL JKLKJJKJJJKLJKJJIIHHI HIIHIIHIHGGHFEFEEFEEFEEEDDCDDEDCDDDCBCDC"BBBAABBBACBAABABAAA?AA@A@?@??@@?@@>?>=>>=>>=<==<;<;;;:;;:::;;;:9::99: 9::98998899878 7788766677767676656655565 454445554445454343434322332343 +2322332332321212121010aaa`a01001b000a`_`_``_^]__^^^]^^]\]]\\[\]]\[ZZ[ZZYZYZY[ZYXXYX +WWXXWXXXWVWVWVUUVTUVVVUUUTUTUT +SSRSSSTSTSRQQQRPRQQOQPQOOOPOPOPPPU}pbOZo]Q7H4hPR96;=;:8578979;::979;;=B$##"#""  $*/04347)+8;0%HO/XMB=2+())+.1145324;<>B:22327:>=<7"! !6(#%+0+'#%'(***/1&-1301-=+/$'HDCB>AFCBEGGHFGFDB?<=;;?>@>;5,#%))+,-.)" # !#$$$""!! 66:8@ #&%%#!"##%"7!#"###HHGGGDCCGF?2+$&()*),/-"+#&)%! *,$(&%/6775:L(/1-))',($#!#"&'%$$()'&$###D6%#$*&%@68:<3*")...,+-* $*.,%"""&/.#%8=@@:=DJF #&+0!$&# ! %&!   +  +  &1119%   4%##%!+*& +$":3')1,038BGEH)0/+1,'#',$#&' "#$"'$#"%+245. &%-("",./-D*.7DduÄÄeÆĄń.ń7ą6ńƄȅŀ2Ƅ,Ʉׄ؄ր _DeN@71ZY\e-?8ADAE?<&)$#$"#$!!/+/ !"''%"&#$$&%'+-'" %./+()+,../1331)  ) + g-L" ""$'''+,4A۹ȄɄ3̈́̄l ÄG!I-I +2oޅۀɘV[?5;F73$0"C31"$$"!!$"$#"#"    " %-62+&  !""   +    + + +?  + !"$$"#'&&'((+))'$#" + + + + H +!'*1 "CCCAGJLD=?==:686750Z,#5.-,-/+()/--!->AHHKPIB2()5;- $9H2NH?5<54+(&.3<=5*>?0MiE?;>:961VSMS\KFKVclc5>GGEGBEC;DEC=C>3;8IB15518D%+-+,NC92/ZT90;-*VD3O5>90')PED?.0+4:88-(02130>@QIGG5435433236642210-#"#%&&(''((()+--,+--.-0/..-..)'(,-,./.0/**-/0100/01110//0///0./0S//0001123345754567:8538=<:430027784-(($%&*++**))(#$(*/0,*,),,++)*('((***,273dD52?!B:643.,*+---/:;;;9:68;`tMMNMMNNNMNONNOPNNPPPOOOPOPQQPPOPQPQPPPQQPQPQRQPQQPQPPQRQRQRRSSTRSSRRSRSTS +TSTSSRRSSRSRSSSRSSRRRSTSSTTSRSTTTSSRSSRSTVWWWVTSRRPQSQRPQRSQRSSSRSRSSSQQQPPQPQQPQPPPQP +QPOOOPOPONO +PNNNONONNONONNNOONNM'NMLLLMMMLLMMLKKLLKLLKLLKKJJJKJKLKJJKKKJIHHJIIIHHIIHIIIH IHGGHFHFGFE +FFEFFFEFEED +CDBCCDCDCCBAB@BBAAABA@@A@A@AAA@@@?@?@?>>>=> +?>>=<=<=>>< =<==<<<:<; :;;:::;;;:9:9::9:9878878767667776676665665556555654544554555455544543332544434332333233443233323323233232223223332122232121112121211b1110'a`a1101a0a00`0a/0``01a``_/_``^__^^_`^^_^]\]^]^]^]\^]\[\]\[\[\[\\[[ZYZYZYYYXYYXWWYWXWXWXXYWVW VVUTVVUUTUTTTUTTTSTUTTTSSSTTS +RRSRRSRSSRQPQQQPPQQPPRQPRPOPOPPRQQOmqjVnmZM/!AE###"!! @BGR_392.)')+.10342340*1;;97<>=>;:95 !""#530*(*/,'%%&%()*.3$.3--3+>,5 "@A@FDBFFFDCDBC>>?>?=;=>@?=92%(-2.-)'$!   ;?@<( #&)()')-%&.#&)$""-,-/$.95,0:OA$5-*++()# !""$%#$&('%"#&$#)=67;=2.' $++,*)-*',02/($$)*0(/8C>:>DHHJB),"#&&!!$$$#3  + + + +  #()+/+# %)-& '*+'#".,&*8,,0@IJB"(/00/.2+%!"&##  )%7,6,5")%.()# - #0,..(/4:pd D¿€ńÄnƄ;DŽDŽƅǀƀ`Մփ؆׀(~]ZJ=:cVSLOB56=C<>7%,#"#$&"(%/##!"-  %'&'&&**')%!!*-*(*-22337761.     <j!)B:V %!"!!!!$"%((--5CɄ"·_ĄjO :-6 ӼYHB6KF5+-G2!m##! "#""#$$$#!  %.:$# ("  !"    + + + + D + + +   + + +  #'('('(%'&$$"""  + + +  + "%&,59 ACA@=AAFB9=;?92"$""" !##"#  + + e # + +      + +    + +    &# + +  + +     l    +  + + +     +  + "%&)}~}|}|}|}|}|}|{|}|{{|}|}}|}|}|}|}~}|}|}~}~}~}~}~}}||~~}}}~}~~}~}~}~}~}~}~}|}|}~}~}~~~}~}~}~}~~}~}~}|}~}~}~~~}~} 走ξɰʵٗȘ݇爯냗h£ۺꆞøή˅ȟɷʦ􆛗씯6 +      +        !!! !! !! !"!!! "F.ڽ̼ð߃Ϲôрö$ͶͿ"      ! !! !!!   !  !!""!"!  !! ! !!"#%&&%#!         +   +   jԊŽҷ÷&׹Ѽŕ愄수EԻU0577==8<88662.1.03520029;=>9+269<><27:>;?@<751/0/P320;$320..,*(%)+&,.),093ABA>L>*@,1?C# (P>QW A1A:.,10919#+9A>(lA@9=B>844^HF`XRM[cfa8BFDA79NG3QQUMHA9R8/-/2-*&8&**)JB6ZTWK6A~pp=k]XL=dYYQKPVSHAHjg018;741556874/&&/5@B;:A,51KC9=5',=CF&%#m%%%&&'))'FHHLNNPN*,+,**,+-.-+(NLGEEFIPU,*QNPQSTWUUTRPP@./1356=>=864344767520.03553544344243242100.,&!#$$&'())()')**+++.-,--..-(),--..,.-+*+./0./S0001321311000//0/./01113235634555;==97<=:64577530,%#$&'&(((*(&)(&'***+'%(')'()&'())*+1@@?>??>?>>=<==<=<<; <;:;;:;;;::;:9:9::98998787676 55566566555454545454343454433432323232323212121 b10011011010 1a`0b00010_`^_0_^_^^_^__^^]^^]]^^]]^]\\\]\\[\[[Z[[[Z[ZZZ[ZZYZZYZZYYYXWXWXWWWVWWWVWVWWVUUVVUVUVVUTUTUTSRSTTRRRSSSTSQRQQRRRQPQQRQQPOPQQNk`^dg{fW^1AC0ahI9:<<:8886679:87865678>C?> !! ?BS1:1-297''.*%%&(*MC835/*(*,,.142:940()236<>>:8556656#$ 52/-)$$@&%%$%$&--/13#13-11(<1&*#==BCAADFEFDDC@??AB><@CB>>>7))341..(" G:88<:76FKEHJTUTROGIIFKJIGCB$)37:52000/0:BDE$CCE#&+**()+,)'(,/-00-129/--//./1246420*&'(&'%('#$'(&$"%(*))*..,-130.,,,+++..//,-/-Y,-..12010-+*+-.-,2+''"?><87@D97842/,-./0-,/1184)-,)(((%"@(&$(/7 : 6:;'1&1$&,.,''('$%&(*0;-26&$$#'""%'PKC@@!$&""#%$"#"! $()%"#$$$!###GHHHGHDA7 #$%(*)(),#()#('%(!.H6-9=3-:'$?)2.(*))&""%&%"##&'&'&# "$$#2$$79!&"83=>863.&#)+,*(+* '+-,*,))((.6@@:5=ILMPM0$&'&  !#"%"/ +  + #%% -$ $  +!)5)'  ')%%!!%:*!6752>DDA$+.+*%'71-,0-(#2!(#417-$20$,4*7<%!+&&,1,l 2.0:'26:ȟÄRĄ8ƄYƄ'DŽȄdDŽDŽȀȄ[τ̈́Շօ>Mic/JBE<7[PLA9?EA:5=XN!!&&!!#"&"#&##$())+*)'"!$(.1,*-.137788753$     +(~$cU  "%%# "&#!&*'-3Bꐾ̄ʀf#*5@ yE̬P7>@T@35**!GF$ "#"  !"$e#"!" +  +   )$!#!(%!  + + + + +3  + $&%%')('%%$"##$#    + + +2/35=>=><:<==@>;;70 + + +             + + + +   ($ + + + + +    + m   +   +"       +     +%)+-}~}|}|}|}|}|}|{|}|{|}|}|}|}|~}}}~}|}~}~}~}~}}~}~~~~~}~}~}~}~}~}|}~}}}~}~}|}~}~}}}~}~}~}|}~~}~}}~~~} ϴ񇋋ϹĨŷ԰ωhƶ񇪫ȳ¹DZՠް焤兕d       + )   + +      !! !  !""!!""!.߮ϼ񈐔ÿ뀒ÿ퀆ӀҺjŸžɴμW!     !! ! !  !! !"!! "!!!"! ! ! +!!"$%&&%$!  !  !      +    Y׵蕙ǿȿȻ䀘ħ­оҀヒケijܾh¦󄕖Ŵȼ17:99=<:63542/++/52,/546><><2,59=>=879;==B@67/+0/.H;8;?'4541.-,(&''))+%$*#4,,ABA/GD-$J.5D0-?OJV;"88I8KQ3<::2.(,6L(&J<+QTPRMGON6=OTGBXXW7312U=BPW.:956:6,+*)"#,JCQ37;HOnCABBAAABBCBBCCCBCCCBCBBCBCECDDBCCD CCCDEEDDCDDCD +CDEDDDEEECEDDDEEDEDDEDEEEFEEEDEFEFEFEEFDEFEDCDEEDEFFFEEDDEEFGEFEFDFEFFFEFFEFFEEFFFEEFGFEDEEEFFFDFEFFEEFEFE DEEEGEFFEEFFFEFFEEGFFEFFFGFEFGFEEFFEFEFFGFFFEFEEFGFEFE FFGFFGFFGFEFGFEEFFEEEFEEFEFFEEFGFEFEEFGFEFFGFEEEFEEFFFEFEEEFEEFEEDFFEGFGGEFEFDEFFFEEEFEFEEFEFFGFFGFEFFFEGGEEEFFEEFFGFGFGFEFFFEEFGFFEFGFFGFEEFGFGGFEFGGFEFFGFEFEFEGFFFGGGFFFGFGFFEGFGHGHHGGHGGHGHGGGFGGGFG#HHGGGFFGHHHGHHGHGHGGHHGHIHGGGHGGHHHGHGGGHGHGHHIHHHGHI +HIHIIIHHHIHIIHHHIH IHIHIIIHHIHIHHIHIHHIJIHHHIHIIHHIH IIHHIJJIIIHIJJIIHHIJIJJKJIJIJKJJKJ +KKKJJJKJJJKJKJKKKLKLKLKLKLLKLMNLLKLMMLMLLLMNNNMNNONNMNNNMMNM&NOLMNNMNNOONNOPONNOOOPOOPPPOOONOOPPOPQPOPQRRQRQQRQRTSSRSSRSTTTSTUUTSTTUVVVUVWVWXWUWWVWWXWXYXAYYYXYXXYWYXXYYXYYYZYYZZ[[Z[ZZ[[\[\]\[\]]\\]\]]]\]]^\^^^``__^^^___`_aa`a`acbaababccdc1cccb23 2332322334333455545Qzl9fzlTQhZTKYWQKDU_V[[740/0218A>975$05=ABFG(1/'GC?2,+>=>>?>>>==>==>=<;:<<;:9:9899898887876866676565 65565565566543433343434343432323212211212122121b1010aa001/000/06/^0/0`_/^_/__]^___^_^]^^]_^^]]^^\]]\\[\[[[\\\[[\\[\[\[Z[ZZ[ZZZYXYXX[ZZYXXWXXYYXXWXXWVWVWVUTTTUUUTTUUUTTTSTSRSRRQQRRQ'PPQQQPQQPPQO_bS3nthO./jA:Z?J==;=:66646585876;/)-22-)#8672+'.5:@BDHRPIGF?==B&'((,0127845*#&-4>GECDCEA?!$()+*(,..,*+..2442//1212430./2/15666854/(&)*''*+)*+,++%!%%#$&'(('/22750.,.,/1/./-0//...-,,,**-.*))),+++5("&$C=649>C86543/,*//.+*-.'%,*'$#%!!)--?73*&$)14 <8:89>')1" (05/"(+)'(&$(*+09*22* $&%$!$$')(F>@"!&$%%#$#"#$ !$(*,$"&%%! !B:AD@DEE@3$&(*+))),&.&))++4%(E8;;75>&":&12-),*&!""$&# ?$'++**'# #"##<7!#:5: 7663/' #'%&&$!#"(*.,0+)-38::>;8=HKNWL&&'$"#" &%+#!  +#$"') & ++$0%.%&%!%'/%/'-#"!"# 4:69AD?D$0.&'''*-$.6-+##!",-#/5/.,*/- 1;1/<:5# .$/3G!#'$2 !%2=vǔ¿0ÆŀYɄȄ1DžXDŽDŽ&ńǀ:ׅـp-EWUB=dYME;FB@?:JOEDC%"#"!!!""&&%"#%$'%$ !(+'%!'(!+/.01003997753    O   ,$}{V !%'"!  "! "(&""++07F̀ „0;gٰU/ IKA2=%!:')%&##"!#$%$%$!")(# + M   + %'#"$*%#$   + + +   +"%((*'('(&''$&%""^  + + +   + + %,214<96652245$      +   +   +   + +  + +   +  +  +    + + +       "     +  +  + +  %(,4~}|}}}|||}|}|}|}}}||}|{|}}|||{|}|}|}|}|}}}}~}|}~}~}~}~}~}~}}~~}~ +~}~}~}~}~}~}|}~}~}~}~}~}~~}~}}~~}}}~} 挏ٿꉚâĤȀjƱ߀Ը޿Dz踛퉏ꁝ8    +   +  +   !  !""""!",Nݵϥ7ָɄȀϾ0ͬǵF      ! ! !!!"!!!  ! ! !"""#"!! !""! !"""! !!"#$%&''%"     !  !      + +     + BӸûĿ¼׼򀊎˹耔´񀕣煀ǣɴ􊠘ضúƿ¿-1낇ø8=<;:7664560-+-143/0379>@;<837;?@@=66<=;;?//1*14,\A<87>'57433/,()&&')0$'%.).IE:4?@0)6%.>E$!.QKLJ<#62A4&(->G2&1FH1mP@B?>?=58CFGR[[]dgh9=HFB?;9:@:.:FRLJ?;;XLF>5)*;HID?/MVZSKKNP:6*L8PPZXT4421,HFO-7?>65<90)%!!./G)8:7:HKwCBBBAAB CCBBCCDCDCBCBDCCDCCDDC EDDDCDDDED CDDDCDCDEEEDED!EDEFEDEEEDEDEDEEDEEEDEEEFFEFEEEFEF EEFFFEDEDEFFEEDEEFFEEFEEEFFGFFFEFEFEFE FFFEFFEEEFFEEFEDEFEFEEFEFEFEF EEFFGEEEFE +FFGFFFGGFFEFEFEFEFEFEFGFGFFGGFFFGFEEEFEFEFGEFEEEFFGFGFEGFEFFFEEFFEEFFEFEFEEEFEFFFGFEFGFEFFFEFFFEGFGFFFEFFGFEFEFFGGF GEFGFFEEEFFFGF GGFFEFGGFFFGFGGFFGFGFGFEGGFFGFEEFGFGFFGGEFGFGFGFGFGFGGGHGGHGGHHGHGHIGHGHGHGHGHGHIIHHHIHIHHHIIHIIHIHIHIHIHIHIIJJI HHIJHIIIJJHIHIIHIJIIJJJIIIJJJHIIJ +IJJKJIJKJJKJIJKLKJKJKKLKKJKKLLLKKLKLKLKLMLLMMLLMLMMMLMNM NMNMMNMNMLMNONONOPO POPPPOOPOPPPQPQPOQ +PPQQQRQQRQR SSRRRSTSRSTSSTSTTTUTUUTUUVWUUWWVUVVWWXW UVWWXWXWXXXYZYZYZYZYZZ\[ZYZZZ\\[Z[\]\\]\]\^]__^]_^^__`_```_`a`babbaaacbabbcb212112eddd232322233323334333456dTrdbdfhYVE8d]UVNMORNMJQU\/,-/.18@=6.C')5CFDDK,-.QDA906GJHF$$%##F##%&))%CKEHLJ(++(*(,,,*++,,**)(LG?>96835511245576897663210../221120%#&%()*)('(*)((')+)(*++,-**, -.-++**.11201124564354354467775665543345653467767<<=86:9989530.+'##H##"!!!$%#!"#%&'&''('&'('(()(**)*)*+1Xslq3:<<:>EF<0*+++,-.///0//18>:425779CQFMMMNNONNOOOPOQPOPPOPPPQPPPQOPPQPQQRQPQRRRQQRQQRRQRRRSRRRSSSRSSSTSSSTSTSSTTSTSTSTSTUTTSTUVVUTUTTUTSUTUWYXWXUSTSRSSSTUTTSRSRRRSRRRSRSRRRTSSSTSTTSTSRSRQRRQRQPQPQQP OOPPQPPOOONOPONOONNOONNNOMNMNMMMLMMNMLMLLMLMLLKJJKJIJJJIIJIHGGHGFEFGFEDEEEDEEDCCBCCCBCCCBCBCBAABA@A@AA@@?@@?@?>??>===>>=<==<==<;;;<;::9:;:99:999:9899888987877667666776766766656556556544354543433344343 4433433343223233232321212101001110aa00/0 +`0`aa_`//`_`_^_^_^^^_]\\]\^]]\\]\]\\]\[[\[ZYZZ[ZYYXYXZXWXVWXWVUWWVVUVVVTTUVVUUTVTSTTTSTTTSRSRSR QQRQQRRQRQQPPQORQPQPW\ECDKI@<9=<65%.1-,'#""##"#&'))$#$HD.'.455:740,/47673/+&$(06324442235 $()".I&$""!! #%)/3!,731,#"EA!&' 5DEHIDB@=; &,004563.*'032.#*BHHFDA@C#!"#'&''&''),-..04354235434543101.35798864.)'(*)())),-00/+(()$"''&###%(0653/.-.//.0-../01,//,+(&&'&)++,*))8* <=;87:?A;3652/0./.,-..1&*&&(&$#""+?$4" =8' '(0:6@@;+"&)A'V),#!&$$#"%%!"&((*(!#&&'&%$BAA>A@@>- %',,**,+/)0/+-/0/" 0ńȄƀɅ Ȅ(ɇ Ȅ.DŽɄ.Ȅȅ"DŽCυԄ؄x㓸NBHOZF>2-OKFDBCFEAB=?>> '$!"'&##'-#!$&$%!!'!$((f(#'')01113:644/ +   4'L>ugP!&*%  !!"$&($" #(%$%)/39VDŽJ̈́-̄ͅS&;c#.`{ٲY*HI?6$926$2&,%$# #$%%$ $(),(!    $#"!  $j       %+++(''(''(($## "#$"!  + + + +$'-5885511-,#!   + + /    k  + +  + +       + +   )  +   4   +  # +       + +    !"%26~}||}|}|}|}|}|{|{|}}|}|}|}|}|~~}|}|}~}~}~}~}~}}~~~}~}}|}~~}~~}~}~}~}~}~}|}~}~}~}~}~}~}~}}~~~}}~}~}~}~} 溬؆ٻƴރ֠ȶ靯죪Ìk߮Ūδàеʸ׾ߊؗ|    +   + &'       !! ! !! !""#"#"!"#!)ξ硧無ŷq큓肐ӴG +  !    ! ! "! !  "!""! !! !!!"##"!"! !3"! !"!!"#%''&%#!     ! ! !!!"  !           1߁၈ǭ±¹낌ż½Ⱦ»н庶̚᫨ԫʾӼdʺ»1;=;:445530,-033013798=@>66979>CA@;7:<=<93').062.V>;86>0875.-+*++- &"+-:EG9?==-,20BF$'B\HMC? (N?<*(E?O-gNB68@A47:BJDCNYk8tu@Aj9BBB?CL@<tdZaeum\`L;DARKKQEG;AI@DTQSRJL+9?;3+#%09?DDD(03-I=6+5GEBDI''DB@AC$'*)H?HFM)(*)(*,*+***)),+'))'JFGNJMUQR+++S**U+-WXSLKI?--8=>>0#%%%&##$$&'''(((*)*,*)&(+)()((()*Z\u3957;;@@=2,*+--...//.0002:?82//38;ONHN POOOPOPPOOPOPOPQPQPPQQRQ=PQQRRQRRQQQRSQQRRQRRRQRSRRSRSSRSRSTSTSTTSTTUUTTUTTSTUTSTTTUTSTSSSTUUUTTTSSTTUUTUVUUTUUTTUTU VVWYYWWTTTSSUT RSTSRSRSSTTS TSSTSTTUSTTSTS RRQQRSRRQQRRSRQQRQQRQOQOPPPOPOPPPO PNNNOOONNOONON MMMNMNMNMLLMKMLMLMKKJKKLLKLJJKJJKJIIJJIJIJIIHGGHGHGGFGHGFFFGFFGGFGFEDFFEDEDCDCCDBBBDCBBCBBABBAABAAB@@AA@AAA@?>??>?>?>==>=>=>=<=<==<=<;<;:;:9 +::9:9889898988878977787776777677667656754565455445534 33444343344343223443323233232212121221 2112221011101 01011001109_0`00`aa000``/_0__^^___^_^]\]\\]^^^\]\]\]][\[\\]]\[Y[\[Z[ZYZZZYZYZYYYXWXYWWXYWXVWVVWWVVVUUVVUVUTTTSTTSRSSSRQSQRRRQQRQSRRQRQRQQRRQQQPQSq2L`to{6JW9?1MC=<74546777887758988?DCHJG>56:9-.!',-($$"'+((+&"$(*& "G=///36;GO:3/35556210-&$.0364543477 $'":9 #.)"A!! $*.",341$ "I@3!%$GCGIJGFFECDEHIGE@?>A@>?;6.),2.$! 8220*,1249===:835;$)+253630-+&#")0+),&E$J'(*%D"$$')(' +#$)/./57656779320/12575<:9750,'&')*)('+.0/--+)(%!&)'&%''%%,1/-/30-++-.00/031000/,+)*''+-.-)-8+">;622;=CBA534410/.+*252#*)()%#! !!$-#.<87;-0;#&(*0(&2L1#" *&##&&+3<'56$48 ""&*&#&)PSI@F%%! #$%%%&(''#"%&'%#!AA@<><;;' $&(--,-211+37-/20%" +5/28&!8410.("!!"!!&1G6)0;5/49738CFFK.0 #"> &(&" $'## 4%$ "   #'$"% +%'6',*(%$'!#"4-'#%'+#",4F'OM*)>"*+,*15,('.00-0%6'+%55?=:3-/ #& 95>$!()%!"9$! &5G$¿ÀUÿÄcȅRɄɄɄ˄Ƅ7ʄȀ̀ўZELQddLO3+6;KEHI<<07<77=79801#&"#$$"(&$!#& "$$)&#%*&*/01.,39:711,#      %# KArWS!"#$!!!"!#$%&$"!')%#$'-29gńaфkȄƀ¿¿¿¿<$ R߀׸M!4;GKL!/0&& .$!!!###" #''++(   + + + + + "$/5$ "$##"      + "  %)+*)**&&'&%%%!""#!!" + #&,/020/*+, < $!  '   +     +  +       +   +*" +     +  +  + #$ +   +     +  "#%~}|}}||}}|}|}|}||}}}||}}}|}}}|{|{{||{|}|}|{ ||}}|}}|}}||}}|}~}~}~}~} ~~~}~~}~~}~}}|}~}~ ~~}}~~}~}~}~}~}~}|}~}~}~}~}~}~}~}~}~}~}~}~ ѸijϹƦ̈վλ򊕠iདྷ탑ƹƳ׾ҿ옟ľ? +      +  +  ! &   ! !!! !  !! !!!!"""## + T,̴ƾ̀ѽȭςƺʶH!     !!   ""! !!! ! ! !!! !!"!"#"!"#"" +!!!"""!!"!"$%&'%$#!   ! ! ! +  !         %𷅭趚׹˷ʺ±쀇Ƽ¾ȷ􍧦Ǧ濧ѫ【Ϩmñ񃏀¾9B<9:755300020/0478;:;?>:7985:EC??>;;=;93+%*112-0L?>::H81,-,++-)" !+ %'8?C7>6@*&7&-1/K5)2RMHD9?%0P@3J;)16'0M3fHL:,9B>.2?=<>DKfkg8@>6di=EELFFJCHGLGD:95/?<4/Z\\[WRX9=J/1*9?8ABKKGNX6<=<740,29?@@J-40E75,8FA??@G&$@@CG%')'>>KJ'()*(L+,+++***+*'%))'LIKOKPSSS*+*S+WVZ.]\SNPHB3,6:<=<@B?;77::85332237:65688630/-))(')./0.)&'')*++***+***)))***+(**+,,,+,,,-*()()),..//...-0132//0111246689888677<=< <7543w1.)''$%'&$! >< !" #'&&%&&%''&'*+,.,)('('&&()))('')*Ba5;<::<:;64/+(+,---///01125@?80..07=OZKNNOOOPOPPOPPPOPPPQQPQQPQQP"QQRRRQQRRRQRRRQRRQRRSRRRSSSRSSSRSSR SSTSSTSTSTTUTUTUTUT&UTTTUUTTUTTTUTUUUTTUUTUUTUUUVUVVUUUVUTUTTTUUUWWXYYXWTTTSTTTVUVT +STTTSTTSSSTU TUUSSSRSRRQRSRSRRSQSRRRQRRQQQPQPQPOQPOONONMONOON MMMNMMNMLNNM +LMMLLMLLKLKJK JIJJJIIJJIHJIIHIHHHGGGHGHFGFGGFGGFGFEDEDCCCDDCCBCCDCCDCCBABCAABAA@@A@@@A@@? >???@>???>=<=<;;<<<; ::;;::;;;: 999:::9998999878787767667656545666545554454343433343443 4433433543443 4432233322232323332232111211221211101001101``0`0`^`0__0__^___^^^.]^]^]\\]\[\[\[[\\[[[Z[[ZZZYYZYZZYZYXXWXWXXXW VWWWVWVVUVUUVUVUUVVUUUTSSSRSSSTSRRSRQRQQRRQRQPQRRQM@f[oE6/?>0F+2?<<85687788669:79>BCEEGG01?I#3"'&$&'',(&" #'+*(#9645/-274648610002341#%*.1555678879## <!&!6,#"###! )1!)45/#"D=4 9:ABDEHGDDEGDDFEBA?AA?=961,)+*!<9720-,*))+02468;<"$-1/37:<830/-+'&'(+'%+"$DIJJ&*,(&)*)*+*)'&&(''+/./242425665864/./2643:<<<61.-,))++,*/01.++--,&"%)('&'*)'(,/+.130-+*-/10123210.,+)***)+-,+-,&E@<5007:>>AB<55222/,+.3!-,,('$#"! *)0A=B803-%)!+2'&8!-/"$!"%4#/4*=)("%)''GAD@?>$%"#""#""$#$$&'(%#'$" @@DA?><:8#$&(,0132331,250--/44*!%'(7:9DO45/#'&!0/%,)$JH(KIGCF%='./*'$$$!!$*6/%442.+(#!!! -D=.+@?50422695714 "*#(-*=!# +-&""# , ,7dӤ$eÄăÅ7ÄŀȄ!DžƅRDž=ȄC˄ƅ"ƅ ń Ɔ +Ȅ:ʅjڄ؀`oQRURd/KC9::+CIN>>=5022137726:"##!!!"&#%"  $"$%&&H%%(*'+//0/56:=;412*$ F   )Kh!  "$#$%&%##+)%"$')0><8:<=?CBA@>?97;92K$,0/0.,XB>?>?H9.-)'*,+'!"&+$+/6@0>/8@&*?"&1BJ+,?\JC)2E&)L4*@%(*47B/hILE-M7?8.5gJDJKYad<==;^^c8?C?FXRJHNPAFEQ/ *1730<70-Z\UOF>L^FHR,6'@@JWK]S9331-19GF@:;:21!",-275535=AGCBBCBBDCDEDDCDEEDCDEFDDDEEDDEEDDEDEFEEDEFEDDFFEDFFEFEFEFDDFEFEEFGFGEEFEEEFDFEGHGFEFGGFFFGGGFEFFFEFEFEEFFFEEFFEFFEFFFEFFEEFFFEFHFGFFGGFGFFGFGFGGEFFGGFEFGFGFGFEFFFEEFFEFFFGFFFEGGGF GFGFEFFEEFFEF GFFGGGFGFGEFGFGGGFHFFGFG FGFGFFFGHFFG +FEFGFHGEEEFEFFEGFFGFFFGF GFFGGFFGGFGFGFFGFFGGGFFEEEGFFFGGEEFEFGGGFGFGHGGFFGGGFFGFFFGFFGGFFFGFGFGFFFGFFFGFFEFGFFGFEGFHEFGFGFGFGFGFGHHFFFGFGFFFGGFHHHGGFFFGHGHGHGGFG HGGHHHGHHHGGGHIGGHGFHHGHGGGHHGIGHGGHGGHHIHGGHHHIHGHHIHIIHHHIIIHIHIHIHIHIHHIHIIHIIJIHIHI +HIIIHIHJIJI(JHIHIIHHIJJIIIJIIJJJHIIIJIIHIIJJIIHIIJJIJKJIIIJJKJJKJJKJKLKLJKLJKLKKLKLKLKKLKKLMLMLMLLMNLLMMMLLLNLMLMMMLMNMMMNNNMONOOONNOPOOOPPNONOPOPQPQOP +QPQPQPQPRRQRRQRRSRQRSSSRRSSRRSSTSTSTTSTUTTUTTUUV"UVUVUWVVUVVUVWWXVWWWXWWWXXWXXXWYYYXYZYZYZYZZZ[YZZZY[]\\\[][]]_]]]^^^\]^_^__`^^`(__a```a`cbaa`b0bbbcbac122111c22232223334343456565ifeji13771kgUQK>VH?5><94308=SHP.3579792.18=?@E(/(=;7/9EB>==BGE>@BF%$%&DIKJ&(),+)*,,***++)'&%))OKKPQLS,,+,,,XTVWXVZXSOLFG6+1q9>@BA?<977;;:;::8557;<987641//..,)')&'*--.///.,)),-,,,.0.,**++,,.,,-+,++,,,.,-,(&'(')(*+*++*+,.-/..///001247865578Y67<@ "#!986542,&$! "%%!#%'&'&&('&&$$#$%%$&(')()(&$&&'&%&())''&(*).637;<=<;=;8/(&%*,,,-./!2138=8401/.8>aNNOOONOOQPOOPQQPPQP QQPQQPQQPQRQRSRSRSSRSRTUSSTRSSRRSSSTTTSSTUUUVUTTUTUUTUTTTUUUTSTTTUTUUTTVVUTUVVVWVVVUVVUVVVU TUUVVWYZXXWUUUTTTUVUUUSSSTUTUTTSTSTTUTU +TSUSRRSRSSRSSSRRRQRQRRRQQPQPQPPPQPOPQPOOOPOPOONNNONOONNNMMNMNMNMMMLKMMMLLLMMLLKJKKLLKKKJJIIJJIIJIIJIJHGFHHGFEEGFEDCDDCDEDDDCDCBDDDCCCABBCCCBCABA@A@?@?@>>>??>=>=>=<>==<;<<;;<;::;:::9:;;:9:9998999898899777898778778676676676766566555776675656545554543434343234343233222323232333212210100110-/0/^`___`_/_0/^^^]\]^]]^]^]\]]][\[\\\]\\\[[\\[\ZY[ZY ZXYZZYYYXYXXYXWXVWWVVWXWVVWVUVUVUTUTTTUTTSTTTSSTTSTTSRSQSRRSRRRQRRQSPQRQQQRRRLVOQYwg\J20'57?A>=<8566135676657989:<72/*()"9<><<:3/,(&)&&##(. $(/>JFA77;<;:641-*(*)(+(%)($H(K$N))**()))*-+**--)%&*/10.+./152/3651+,04//9<<;62453.++**).441/,+--("#*)&)(+,,/./,+.0.*+*,-.--06320/.,)**++),)*.*$C?8756688:GD>%1&7;>7"#A?%(#E*(JDBBAA"'((&'#!!"#""#$&'$#%  <>>CCB=97-w%'()*022677625:>635<<.! '+0B;=J1.59%#&%0)(*JAFHIJLH&'#),)%%$%%#!/9'(!0310,( "$##!!*C:3-9:411038@CH,8??*(#!! ! #%'%"##$&'&%$""5''(('(  + !) !*6*(*# !(l+-) $":0%./7>B'&(&?FK(-0-/;:2/12&))2" >=71+$-2))( %,3<6<3%*+("#"&-=ב<A¿„)ńńƀƄńǀvȄqƄ6˄Ʉͅ7ׇՀ[X)++-&XKA?31NC<1752.+&+-@67"$"!#!"$^ $%%)''**).227::88740.)&     )3&#!#%&%%&$%*%$$')*5AҰ&΄ ҅"҄π2@ +#I +eݿA61;K?;1 ','%!!! R!!%$)&$   + + +    +$#!!  + + + 3 !$&()+*&"%%#"!"$'%  + "'"#$#    6  +  k      +  ! + + + J + "#    + + +  +    !"~}~}|}|}|||}||}||}}|}|{|{|{|}|{|}|}~}~}|}~}~}~}~}}~}|~ʀ~~}~~~}}}~}~}~}|}~}~}~}~}~}~}|}~} +~~}}~~~}~~}~}~}~}~}~}~ ۮحŹ߃Ѐk̺큐烈DZ޺I   +  + +    +    !! ! ! !!"! ! !!##"""!#'cϷ‘󄍍큀ÿ_۷2  !        ! !!"!"! ! ! !"!""!!"!"!""###"!"##"! !! !"#"""! "$%'((&$" ! ""!!  ! !      +   $ݬۀȷϴ¾쀋ꉁ󉀠ڀ۰ڇ솗ëfʿ싗ƽ탚A?:9754310139:67:=><=<=>>?N5/+'$%(*'&-+%*)-:343.O0"1E'!5A3"5TPJ9E->+.?,/)KA0>>/MNJ@(,2eb_bi5XKNYc4@>B9AJQM\\ZHEFR0)1385481-UQMLMMJHHDO8N;2.HJQDKOk543/.7AB=19230 (/056134:BDL]BCBBCCCDBBCDBBDC DDDEDEDDDEEEDEDCCDDEDEFEEDFEFEEEFFEDEEEDEEFFFEFEFGGFFEEFEGFEEFFEFEF EFFFEEFEEFGGFGFFGGGFGFGFGGFFGGFEGF GFGFFFEFGFGFG +FEEEFGFFFGFGFGFEFGGFGFGHHGFFGFFFGGFGFGFGFGF EFFFGFGFFGGGFGFFFGFFGHGHGGGFGGGHGFG +FEGFFFGGGFGFGGHFGGGFFGHGFGFGFHGFFGGFGFGGFGGGFGFGHGFGFG FFFEFFGGGFGGHGFGHGFGFFGGGFFGHHGGFGGFGHGHG(HGHGGHHGGGHGGHGGGHGHGHHGHHGHHHGGHHGHHGHGHIHIHIIGHGHHHIHIHIHIHHHIIIHHIIHHHIIHIHHIHHHIJJIHIJIJIJIIJIHIIJJIIJJIIIHIIJIJ IIJKJIKKJJJKIJKJKKJJKJKKKJKKJJJKJKJKLKMKLK +LKKKJLKLKKLMLLMLMLLMMMLMNMLLKLLM LMNNNMNMNMNONMNOOOPOOOPOOPPPOOPPOPOQRRQ RRQRSRRQQQRRRSRSTTTSTSSTTTUTUV WWUUVVVWWVVWYWWXWXY2XYYXYXYZYYYZZZ[Z[ZZ[ZZZ[\[[\[Z\\\[]]]^]\]\]\]]^^^]^``_^`abbbcabbc2cdccc1c12cc232f323 +443443344456656Cfeb44499<:=^X^Y?D:57014;BMPOF)22235437>BC'++)B<96>@<9;>@!@857789:9;<<;834;<977420/.-+('(&'*+,../122/02231011.,+**,.///.--..-,D-,('(*('(()))*,++,+---..--./0013233454556:73/+)&##!  !$%&'&)&%%$"%J'&$%'&&((%&&'('%%'(*/69:<=??>?>@<2+('),***+..//0118;21010.:>>?>>?>>==>>===>=>= ><;<=<<<;;<<;:;:;::99:::9:99989878778767 676766655655676656545455445454554454543344343434344323323222323210111001010 /0/1000/`00__^_]_^]]]^]\]\[Z[\[[[ZZZ[[ZZZYYYZZZYXYXW.VVWWVVVUUVWWTUUUTTUTUUUTTTUTSTSRSSSRRTSRSRRRSTRQRRRQQQRRRQRN\\mIvxVM=T^1+5@B>=8765334435889998;=?>@>389:=H''&#*3C&(,0/,(%#$&''%"!1:60++..+++*++,,/791+&%').3422559= =$'"2/+!&/100+# #)16!.80'! I@330+6@?CDDEDDFNMF>=BDEC?=92/-))(!978:=:85.+(%#&&/&5<<@<9#$!:78:=<941-/./,(%(((++#C($%(+,++,--,*)('*022+()-1630/,/3200010-+,1/+79:9124220/1.-*+.320/,--'#&*+*)(,/0341.,...)'$(*-,+-6862/.-,++,-+*'--(%D>95589>=;99#$C;0/-.4",O**(&"!!!&&H@088//.>8&-A?<;('1 9.%4> ?"%%@**KDA?DE%''(%$""#$%# ##" >>=>?@>9.$%(*,(02234763/4;>6173&!+/<@;@-2-382#%)+*('KFEHKNL%&)&&(%$%"###!,,3 "$(834211-&"$#"""#@5.*., &'*.7>EK+4=BC''$!! !$'&&%$$&&%%%" /$(('&/ +  + 1! +!$ -0,!%&!&&/0*&9618!:.59B"+('CDKS+.0'.384?;7,))3!753223740)+-% 15:346F!(+&""+0L(e¾Å!ńLƄʄĄƆȄȄ+DŽ'Ƅ+ń:ʄɄNʇȄ'Ƅ˄#̄фπ>~X*(*..111DEID1@6[03.''"#$(-452* " !##$ +)*&+*),7852/.,(& !   X + + &,'! "!"$&%$%"%'"#$'((8@Δ҄$ӄ)̄΄̀J/ $"ހȼE:8,GN61#/:"!'%#""! ##$ +  + + +  "$   +    +   +  !$'()(%',)# $'%""         V   + +   +  + + + + # + +  +  "  +   + + + + +  # $&~}|}|} ||}}}||}}}||}|{|{|{|}|{|}|}~~}}~}||{|}~} ~~}}~~}}~}~}~}~}~}|π~}~}~}~}~~~}}~~}~}~}|}~}~}~}~}~}|}~}~}~~~}~~}~}~}~}~}}~~}~ 캪Ϟŕ͙҃Όgйᅏꄀ·׾Л®އF     +  +            ! !!!!!! !!"!"! !"!"###"#"""#"&l㣐żɼd༢>   !   !!! !  !!!"""!"!"! "!!"!!!"""!!"#"!"! ! ! ""#"#"!!!" +$&()(&%""! !!"!!! +! !  ! ! !!        +    ƀ‘½Աɽ·Ļ򅎎Ŷ܈쁀ģڽի3ʽ7탈¸8B<<9646431023589669><<=AA78==>@B>;;97:31-,--+-2ZD=?<:'-L\U(8=P8+)4U5# (Dpv;7D?HKNSmeYIEFGQ-!47583\SLFGHV[^YM@*G?+763JEFFEH\4200/19=.#700-',.34/367?FFYyCB +CCCDCCBCCCD CCDDDEDEEEDEDED CDDEDDEDDEFEFEEDDFGFFFGFEEEF DDFFFEFFFGEFEEFGGGFGHFGFGFFGF EEGFEEFFGGFFEFGFFFGEGF EEFFGEGFFFGF EFFGFFGGHGFGGGFGFFHFGFGGGF&GFGFFFGGGFFFGGGFEEGFGFGFGGFFEFGFGEGFGFG*FFFGFGGFFGGGFFFGGFFGFFGFFGFGGGFEFFGGFGGGHHGFFGHFFGGFGGEFGGGFGGHHGFFFGGHFGFGFFEGFHFFEFEFGGGFFGGGFEFHGHHGGHGGHFGGFFGGHHG +FFGGHGGGHGFGFFFG HFGFGFFFHG +FGFFFGHFFFG FGGGFGGGFGFFGFGHGHHGGHHGFGGFFEFFFGHHGGFGFGFGHHGGFGGGFGFFGFEFGGFHGHHFGHHGFGHGHIGHHGFGHGFGHGGGFGGHGHHHGHHGGHGHIHIHHGHHGGFIGGHHHGHHGHIHGHIIHGHIHIHHGHHHIIHGHIIHHHIHIHIIIHIHJIIHJI HIJIIIHIJIJIKIKIJJIIIJJIJJIJJJIHI JIJJJIIKKKJKJKJ KJKKKLKLKLLKLKJKLKKLMKKLKLJJKKJKKJK LLKMMNMLLM LLKKKLMMLLMLMLLMNM NNNMNLLMNONNNMOOONOONNOOMNONONNPOPOOPQPOPPOOPQPQRQQQPQRQSRQRSRRSSTTSTSSSTTSTSSTUUTUTUUTUVUVUVVWVVXWWVXXYXWWX2WYYXZYYYZYYXY[ZYYYZZYYZ[[ZZY[[ZZ[\[[[Z[[\][[\^^]\^]\^_^__`_`ab`aabaaacccbbcbddbcbdfe222c22234 5544555656Rrqd36777?>B=Vso^:L=555:=755;@C<7>?>>>?> ==??>=>>=>>=>=<=; :;::;::;;:99:989898887787878867676766756 565556556545455545554 5554455445543433343432343232321211212210101001010/00/0___^__/`/^]\^^_^_^^]\^^^]\]]\[Z[]]\[Z[\ZZYY[YZ[ZYZZXXZYXZZYYXYYXWX +YXWWWVVXVUVWVUTUTUUTUUVUUSSTSSSRSSSRSSRRTRSSRRSQRRSRRQQRRRSRRN]Z6JoKN5,Aqb >>=:85422105;<<;988;??+0<;=H)))& 4*#",9E)*+-140,+*'$ ;/26247751,''*)))-363-+*+*'*055899==?>"(%4,',756553+&'*/26 #171*"#C2/548=GIDBCFHLKFAAA>DA<=:31.*'%$;8667974/&&$"&(07??>;"#CD8125 ,.-+)+*(%$"!"++5=;54;7344(8)3)),>X,%"*2D(,++)2K7/3./:>!&&>"*HDACEIH%#FDEFE#%&'%%##;@#FFE>:=;<=<:8 !(,,.-0/1//14414:=4-.+'#"(3??B'110046'*-+-+&KGFIKRLLN))&(%%%#"!":-!$$ 3:710.-+#&$! 113365.&*.30-5?54 #&)$$#,PR*&2.258?LD9-()+2 ;72,+.:8꫻lτ΀ÿD &жG8.QH-3(IA$#"s!# $    "# + +    + P + + + &)&'&((*($ &$ "    +    + + +  + +  +         +/ $! !$ !   +0 + +  + + + + + + "&&~}|}|}|||}}|||}|{|{|}|{|}|}~~}}~}|}~}~}}~}~}~~~}~}}~}|Ҁ~~~}~}~}~}~}~}|}~~~}}~}~}~}~}~}~}|}~}~}~~~}~~}~}~}}~}~}~}~}~ ηDZʌҠꔠn׷áڿ񢂟ֺ񎙕    +   +  !!  ! ! ! ! !!"#""#$2쀊Ȧ誐ʿ݁ĽwʹٶL"   !   !!!  !!! +! !!!""#"!""!!"!"! !!"""!""!!!###"##""###"!""!"#"!" #&(*)'$#! ! ! !!! !!! ! ! !"!! !           + +۹Ɓۊ޻޽耏Ϭ񆛢ʻùǴȇ2僊Ƕ炃޷/»􈟪8@;954653013547::78;=;>BFH65=@A?><==:9633/+-)*-WHDB@=>7C+ ./+&%%!!&+(- &&)*7/=3:X=4F?BHi6=b^IL@33<<>=?BA737DI(.38965225;AN)?98>F?;@FA@ED&'$&%&96DDE&''))&()(('''('()('''NL(((**()**,-...,[XQUWPILNC2,+ +?C830+(&%$""! " !" !$'()())(%#$%(*('&C%%&'&$&'&&'%&((+479;<<>=<>@CC;1+(*.,,,++*,-.026722/1002;=rQOOOPPQPQRQRSRSRSSSRRRQSRRSSTS RTTSSTTTUTTSTSTUTUUVUUVUTVVUVVUVUVVUVVUUVUVXWVWVWWWVUUVVWVVVWVWXY\[[[XWVUWVVVTUTVUVWVUUUT SSSTTSSSUTSRRRSRSRQQQRRQ OQPQPQPQQPPPOPOONONONONOMMNMLKKLKLK JJKKJJIJJIHIHHIHHIHG FGFFGFFFEFEDDCDDDEDCDDCCDBDCBCCBCB ABBAA@AA@?@A@A?>?>===<=<;;<;;;::;;;::;:9: 989998999889987878767656566656544555454544554344434343344323332232 3222112112212111011011001110`^_/0/__`__^_^^^_^]_^^]^][\[\[Z[ ]Z[[Z[ZZ[Z[ZZYZYYX +WWXWXYWWWVWVVWWVWUUUVUTTUST STSSSRSSSRSRTSRRQRSRQRQQO~USH,zq^^6L5UI4&>=:8773538;=;;;:99;=>A@A53<;<"())&!;<0)8FB;E-7<:2/,-(!! <#HIGCDC:<91-,)(,11.,*++,('+GJ?" ;:;<= #*$1,/D:=<97563.,,-./5#181-(&#B/.617@DACGGEEFDBCFGE@;<951/+&"!:643.'##)$+-8@ "#4 98877554564/)(&&).,+),'))*,*+-.///.,++/342/-+-.0121,.)+123331/29:5551/+,//.1.00)/4878732.-//)*+.,)*-/0053.,(+./,))++&#%&(.3300/1110...("@<75587;???>=BC@?:7#"(..-,*)'&$&(! !"*%-7846.67704#@<'3 '#;-*.( $0E,0*&(/,3.236;!! $'%='FCCDDEH%EEEFEC#&&*+("39$#DCBA@=:;>=7'(*-/,../30-037659<72/%&" #(1>>D//0250/-)000/((NNLKJIJOO'*((&KJHF$$@ '%#$#%'"5:92.-,&%&$#! (18F)7=EBAS)&&!  ## ##&)**$%%#"!!/./-,(( $  +   3$"4'"&1!'-$*"+,%! .8E'&-3/7%(*'%'*($&'..1:9K(C;1,,*15410,-/775=U,J9!)/*)0?44A#!%. !""(4CD¿ńƅ*DŽ<ȄrɅɄdž%DŽCɄʀKȅ*DŽ9ͅ0ׇք؀h,,,+*/149P*0MK6=2'$+'$$(+,$!$)(#  E%&;94660)-/$     %$#   !#!!"$##&&$%%()+-5=орπ9I5+"Ϧ>4'PH:> ,!10 ##!"$!$ =   #"    + +  + j +  ##'''%$%$$$%&%#"   + + + + + 5 B       + +    +  + + +       c !$!  $% + +  + +  + + + +  &$(~}|}}}|}|}|}|||}|{|}|}|{|{{|}|}}}~}~~}}}|}~}~}~}~}}Ҁ~~}~}~}~~}~}~}~}|}~}~}~}~}~}~}|}~}~}~}~}~}}~~}~}~}~~}~}~}~ ȸȯ򂊐ƄڏЃڔïkĩؗ죾òӾ뿴ۜ󈝟Ƨ             ! !!! !"! #""""",TҚ㛄ʥ艘ĺ<¾ȄπþѾƽέB!      ! ! ! ! ! !""##"!"! !! !"!"!" !""!"$$###""#"! "!"#$""#$')*)(%#! !"!"! ! ! ! !")! !               #¶㞌­Ŷƾ̽⁏Ĭ畣񅈉ނȐlͿ<8557630235517<:9;9;<@FIGA<@DB=<=<;8456.+*&(.TADE@A?@A=9" ! -(!%-('$##%'234=:CH/81@>]-;A1K[5N'<89P3,?68;@Ad@CAFTWdeXTXQOKMOV(9>3/YKJJJGPWbh{=fPRM8@C=9cWSG_4;3+--'0BA316532**3;8BE8ecchAM6117;@?G>=?EKGEF%'))()?,EFCKH%()(&''%KK'()))()'L(())((+W('((,--.,VYROVVQKHMF2-*8=>BD>8678898789876/03762000/..-*'&(+*++,,+++,-...--./..,((),--+,/-.-,+*,--.-0-,))'*,-+---+,-,-.-.--.-..-01222358:;<=>:31/.-+*(''&%$#!!"#"!&)),*)%" #('&%%$%&&%&&%%&%'&%%&),/7:;=<>=>>=@DC9/)(+/-.//-,-+,/0320101013>L{YTOPPPQRQQPQRQQQSSRQQQRRQRSSSRRSSSRRSSRRTTTSTSTTSTUUTUUUTTTSTUUTTUUUTUVVVTUVUWVUVVVUUVWVUVVVUUUVVVUVUVWVUUUVVWVWVXVWWWVUVVWXXWY[ZXWVUVVVWVVVUUUTUVVUUUVWWVUVWVVWWVUUUTSSSTSTTSSTTSTTTUTTSRSRRRSSR SRQRQRRQRQRQPOPPPOPPNOOOPOOONOPOPONNONM%LLMMLMLLKKKLKKLKJKKKJJJIIJJIJJJIJJJIJIH GGHHHGGGHHHGFEF EEDFEDDCDEDDCD CDCDDCCBBCCBABAA@@@?@@@A???@@?@??@?>??>?>?>>>=>=>=<=>=<<=<;;<;<;;:9;: +999:99989989989998989887 6767767767676565566656555656656555654544455544454554545454 5444354443454 +3334343334322232321222101011000110/0_``_000__``^^^_^__^^^]^]\[[[Z[\[\[Z[[[ZZ[ZYXZZZ[ZXZYYYXYXWXW XWVVWWUVVW UWVVWVVWVUVTUVUUTUUSSTSSSTRSRS RSRSSRQRRQ NVYaMzzzxHXJPO?H)! @?<:6999<==;8;@?A@A<9;;<"'(&#A==9(32;CKN,9<;2-*-+&! <9!HLJFDE>0,886-').,**+-.('-:9;<87986:!("8889@@:867562..--15$,01343.(&A&&2.9FWECB@>?ABDJNJIA;:7432,MA8>940..+*''.%"*+)',35. ""!75635457610/+((&$*0112E('),+)+,-,./021//-,.1/-/0//.)*/1010*-037861/0,)&'*(),**6:<7:882..,+)(13.,///.0542.,,-))'(**(('"$(00.134300.-'C@74458647?A?;<>?:120/169=CR+N:3/$,,(%B;9/?"'"+($!%);Te+¿…aDŽɀnȄ#ɄǀŸ́ τ ԄKtP*,/,,0054)1SMMO+9' $))*+"#)&*! #"!'"5853761/-1(U       !!  ! #$&   """$$%''))*+6Kӄ ӄ/фՅ;DŽZg1Ʃ977,ROQQ+5+.*%%  "#   '(!#" + #$#!!   + +  + $%%$#  !#(*('#!!!, +  +    + + + !D     +    +   +  +       +I ! !")%'" + +  +  &#%)~}|}}|}|}|}|}}||}|{{{|{|}|{|{{{|}|}~}}~}|}~}~}~}~}}Ҁ~}~}~}}~}~}~}~}|}~~}}~}~}~}~} ~~}}~~}~}~~}|}~}~}~}}~~~}~}~}~}~}~ <ٿı́Υڃ۸ϵ櫿ȳ݇λ糹®񑕌%悅ǃE      +    + +  +  !    !  !!! !!"!"!"#"""#"##"&,耐Ґþ˽ʽ̸wȿƨC!         ! ! "!!!"!!"""!"#"""#"!"#"#$$##"""#$$#""#"!!""##"###"""!!"$')+('%#"! !!"""!!""! !!! ! !"!!"!      )խǖҼգ翧ɶѺǼ爛ꀓ소׻遅вfȻ񏤤н74479533466878:7;;:<=CIIEAADA==<>:5123-()*+00A86=CIIKND;4%!,'!"*)%,$'!"*116;HPB:UA;aD+B<@BDGDFE@E&GFG&,+)*$/=KFF&'('%F%%CB'**)'))'K()**(')*,+--,,-WTOKQRMIFD?52+0:=CDA;785564477886268851000/./.''%')***+,***+-*,-///-('&&'(**+*++,+,--..-...,**)$'+,,---*+,,--//11345:=< ==<;??82.,*%)((''&%&%$$$%$'*))**&"!#$$&%$&&'&&'&%&'&),/6:;=%>AACE?8-)*--,+./0.,,,./31/-.0/11;RPbSPRQQQRRQRSRSSSTSRTTSRSTSTSTTUTTSTUUUTUUVUUUTUTSTUTUVVVUUV WWWVVVWWWVUV +WVVVWWVVUVWXW%XWWVWVWWWVWXYXXY[[\[[YWWVVVWVWWVUUVUUVUVWWVVUUVVVWWWVWVUTUTTTSTTUUTTUTUTSRSRSSSRQRQRQQPQRPQ'PQPOPOPOPOOPOOPOOPOOPPNNNMNMNNONNNMMMNMLMLKLLLKJJKKJJJKJJJIJIHIIHGHIGHGFFEFFGFFEEDEDDDEDECBCBCBCBBCBA@A@??@?@?>??>>>??>>?>=>>><>===>==<;<<<;:;<;:9:98998898787676677676667656655565656665565565556565565454555455654555454445554345433434343443433433232333223212212223210101011010/000/$0/_`^//]/^^^]^^]\]]^\\[][[[\\[[\Z[[Z[ZYZ[ZYYYZYYXXXWYYYWXXWVXWWXWWWVVXVUVUUTTU TTSSTTTSRSRSSRSSRSROVZ=0u~ziBfbWR;=  !A@A<="  @98!"#DC?A@!%((&#"! 8/MH?@NQ,7<:1*'(,$>;>#&KE=?:+$(/5?6'*.,)*.,(&.4''+/45855 ><886750-0148!$&09>7.&>,(0>IFDB==@FFFIKKLEB>9322-(F1'1.)&&&("#!&-%&)+041"#$$#!97765669:81,,*)&$%29:7E,+,,,))(*+-011.//,./020..0///-**-/.024320266441..1004.%,8<60;<822---(+4422341/.10/120-+(&'')'# ! #&)/332/420&DC>89;>9567>A=9:956*.1/,,/-*((&" #$,>&/.:25996,*$%%7-&#%'$&8,.++,'$A94< $'&##((:)&-/1321/3721/0204?;93)#!#)7>E[-6632101**030.,,+**)LBA+,J)(N(JH%'('%"" %)!7;7462-'"#&'&$$" & ':<77,*37>!A"0CD@=;$!!"  #&#$!!$',0-(&&($##"#  &()*,%  !)+%('&<.&"'G9%'' 23)+j%."(5'K/-1@%1+$%'**(',-,+167IF+)+.120,(:7"7753.5155=AF/0+$:%0.%84415!!'%"&$"!%,BR 9„Ć$„fƄ>Ņ˅ʀ +Ʉ5ʄCȄʄ Ʉ˄!ɅȀ9΄ք؄ـ I#-31-/..10QFJWJ&,#$*0+(  $*(,  53/,1200.-#        "#$(&#E!!!!"%$#$')())6Ruſф+ԅׄ<фPƄ'¾E3 97$MONE(=8/* v  + ! )$!*)#" + + # !     ^ + %&&% "$%)()(&$" '  +  "F       +   +  + +    !"     ### +   +   + "##$%~}|}||}|}||}|}}||}|{{|{|{|}|}~}}~}|}~}}}~}~}~~}}~}}~~}ހ~}~}~}~}~}}}~~}~}~}~}|}~}~}~}~~}}}~}|}~}~}~}}~~}~ }}}~~}~~}~}}~}~}~ ήԠ쒼넬ϥhї퇟ƶںҝಬ󕲬ڃѮ> +   +           !  ! ! ! !! ! !!"! "!!!"###!"#!"]/Hߓ¸耋̾ȿ½}յ޼5   & !!!  ! !! !! ! !!!"! !" ##"!!!""!""!"#"""#"#"###""#"!"!!!"#$#"""##"!!#%(*+)'$##!!"! !!!"""! !"!"!"#""! !  !           5ň˙ܫʷлįՆ󒙛ĺꆀ̭䓖ѿj¹퍡냉ϻó369:75457889:9639<<=>AJG@AC@:;>A;00/2+$'+12-OA@74@GPZQGEH1!*'(''**&%(''$)310AMJLK*;FQ^,JEEV{375(39@3N12RQI;p:320;1W[5:pgU\8AJE@AEJHDFIDAAOSSd]?:@LRUQA9Cc93QHG>CIMXY^jj?JGFc_a_UPKPOI31F@G?0+4:<=GQYO,0/141/,-1;?H?AH%$&#DJ$D=#+,*+(2>MJH&('$DEEADLQ*)*(Z))(()***')*,++,+-,TXPJLJGHIHE@A,-? !#D4.**)*++)(&&%%%$%&%$&$$''()(%$K%&(%%&&''&%#%$%&'(('()*+04:<=>@=>=>DBCC?6,++-,,+-./10/-10231//0/10;GRTQPPPQSRRSRSRST SSTTSUVUTSSTUTTVUTTVUTUTTTUUVUUVUVWVVVWWWXWV WWVVVWWWVW4XXXWVWXWWXWWVWWWVXXWXXXY[]^\ZXWXWXXWXXXWUVVVUVWWVVVWVWXXWUUVVVUUUTUUTUUTTUUUVUTTTSTSSTTSRSRSRRSSSRQQQRRQQPQPQPPQPPOOOPOOOPOOOPPOPONMNMNMLNM LMKLLLKKLKJJKJJKKJJKJIIJIJIGHHIIHGGHGGGHHFEEFEFEDEFDEEEDDDED CCCDCCDCCBCBABAAA@A@@A@?@@?@@?>?>>===>>==>=>===<<=<;<<;:;:;:9:;:;9989:98898898998787878878 +9987787776766777676 5566566566565 +654545556656545453434323323232212221211101011a0100/0/80`0/^/.]]__^^]]]^]]]\]\[\\\[\[[[\[ZZZ[[Z[ZYYZ[ZZ[[ZZZYXYXWXXWXXWWWXWVWXWVWWWVVUVVUUVWUUUTTUUUTSSSTSRSTRQRQRRPYX70hv`DklT?4QA;@!!='&#!! >"! "##"!AB"$&(&%"" !81&KACDHV5>:.'%'*( ! 98@DFE=BNA/).6@6--.-+,**),?6./5:532=AB%)#1:%# R=<==<<9;>;4./156 )033,%F1':IIFDBCIPKGD##$GFHA931+'I5"%*$!'!#&(!$)**(%$c5'(*-)$"><;9679;=81.+-+'$%%9D;D,0/0,,*)++,,+,,.0-,./..121100./.--,(+.57:4136:550(2242033-(/9729<;852-26776521/0.(-251-)(%%$)* ""  &+*+.42.$@?=<789<<<8553."+///,+*+))(&'))#2"$*'!/#5//451 5(;! &3*#$ +*%4,*,,(!>"7:9%(%$#%%<>EIHEHCCFEEEDDF#%()%@(1#BBAB?==<<;4#(+-.11/.21.+)+((,@94/*)'&%*>H.475220,,,-5400,)+,+(MIH4*%.+()KJ%&%&$A:#(,9445 891,(#&$&""!"#/"&:;51-07D#"#%?@;;@9!"%  !"!"%%#"#$')+1,&'(%""$&!" %*(##& #)),"!)-4*'(1R'0$$23%#" &/!@>/9'-0)#$&'()+-((+566A>,%&+/31("'@&$;.0&*/3:8CID(0-/F>?>95332$*/##$  !#)5@YɀP˄ȄɀɀDŽɀ2цԅքՀ(sO--44.0--,03KCMX97".1-1+!"$$")04.! ! !$1460+/1./0.&  b        !   $#%''$  ""!!""$&%%&*()(6Iѭπ>̄ʀB68: 80|ᷧ?6GRK=*B?, )     + + & ""$-#! "&* +     +"&'%&%$(-($%'&(%! .    "     +   +  +   +       +!#!"  +    Q$     +   ! &%~}|}|||}|} |}}|||}}}||}|{{||{|{|}|~~}}~}|}~}}~}}~}~}~}~}~}|π~}}~~}~}~}~}}~}~}~~~}}~~~}~}~}|}~}~}~}~}~~}}}~}|}~}~~}}}~}~}}}~}~}~}~}}~~~}~}~ ⎊º†ԗ·߾邠Ϲf햦ܬȸ÷Ԅ      +   +  +      /  !!!! !!  !!  !!!"! !!!"!"!!!"#""",ԑλ²⁃þ¾μװ[޸/   +  ! ! !  !!"!"!"##"#" +#""##"""##"#"#"##$##"#""!"###$#"!!!# &***)'%##!"##""!""!"!"#!"##"!! ! """!   ! !     ?Ҹ޾١쀃ܼ݀ɸʫݓѿ􀟤򏋈޼끈ίaₗƶ7:853536979:88557<>B@@EFCA?<:>@>2-+1+'%-.-*L<78;645@JJLOSH!(*.-1,*#"&,))' ")0638?AI&@GBNSABDGDXa1F676<$@`J2VNd78T*;@GJGEGHGISTR\[KFIJPWRA6<@9ihL>=@KVV`ju;CLCLWGPTMIOT5'U`;JK2*05845563'3/1>=BHJGBCDEDEEDDEDEEEFEEDEFEDE DFEEEFFEFEEFEFHFFEGFGFGFFGGFGFGFFGFGHGHGGHFGHHGGHHGGGHGGGHHGGGFGFGHHHGFGGHHGGHFGGGHIIHHHFFGGHGGHGGGFFFG HGHFGGHGHGHGFGHGGGHGGHHHGGGHGGGHGGFGHHHGIGHHHGHHHGHGHGHHGHGHHGHGHGGHHHGGHGGGHGGHGHHGHGGHHGHGHHGGGHHHGFGHHGGHGHGGHHG HGHHHGGIHG HGHGGHGHGGHGHGGGHHGH GFGGHGHIHG +HHHGHHHIIIGHGHGH +GGHGGGHHHGHGFGGHGHHIHGHGGGHGGGHGGGHGGHGHIHGHGHGHHHGGHGHHHIHIHHIIIHGHHHIIHIHIIHIHGH +IHHHIIHHIHIHIHHIIHIJIJIIJJIHIIJJIIIJJIIIJIJKJJJIJ IJIJJIIHIJKIJJIJJJIJIIJKJJJKKJKJJJIJIJIJJIJJKJ IJKJJKKJJJKLLKLK +JLKKLKLKKLKLMLMLLKKLLLKLLKLKLMLMLLMMMLMLMMMNMLMMLLMMNMMNNNMNONONNNO POOOPPQPOOOPOOPPPQOPQQPPQQQRQRRRQRQSRSRSSTSSSTTSTTTSTTTUTUTTUUUVWVVVUUWVVXWVVWVVWWWXXWWWXW XWXXXYYYZYYZYYZZYYZZ[\[[[ZZ\[[\\[\[[[]\\^^^]]\^]^_`a`_^_`a`_a`aaabab!dcccdc12d22e3322e323334343334344345655656VG8:8FEC?@?;8<9WZhqF6;:6`a04;@:BNVF>N*+0331*'.57>?BD$&$EC?HEC),-+*(7DIL%&''$GCCFLNN)*(()7(''),*)+,,*))TV,TTPOLLKMPSN(I9+:"!"!93212313676731574210.0)(&'(*))+**)))*+,-01C-*('()**+*+,++,,,-..0/0.,+*.+%%&(()*)()**,-*,,,---.05523432258??<3*'I&$HH&%%%&'&''('%%$&%%$'(())'$#&&'&(&$&&())+))**,/28<>>???@A@A>AB?3,,./-,./0/000210.//.14>BKUPPQPQQQRSRQR SSSRSRRSTTSTSSTTUTUTTUTU TTUUUVUUTUVUVUV WVWVVWWWXWXWWWVWVXWXXYYXWWWVXYXWWWXXYY[]]^\ZYXXWXVWVWWVWVWWXXWXXWVUUUVVUVTTTUUUTTU VUTTSTUTTTSSTSTSSSTSSR QRSSRRSRRRQRQPPQQPQPOPONNNMNNONMNMNLLKLKKLLK +JKKJJJIJKJIH GHHGHGFHHGFGFGFEDEDEDCDCDCBAAA@@A@@@?@@?@?@???@??>??>?>>=>?>=<=<;<<<;<;;;<;;::;::;;;::9:99:9:99889877876767656 5666566565656555455454454343443334323232121221 222112121110101110/00/00//0//00_/^^^]^]\]]]^.\][[[\[ZZ[Z[[[ZZYYZYZZZXYYXYXXVWXWX!WWWXXXWWXWVWVWVVUUUVVVUVTUTUUUTTTSTTSSTTTSSTSSRSRRSRRSRSRSQU_dUEc}kYJq;]KP:Z-& "#%+(%""" !!"!@?AA$&'&$"! !A*>GBDBCR4:7.&&%(+9?A@A?> $%A@'.TI>;71.,0/--,,,-:<429>>516=A%-!1 $$A@A<8;>@= 71/36;%,161'"D:-1,## #))&(('('#"+(142,%E>>>;;::@>601...)%#&-AAF*.++*+*))++,--,+-.++-.-.1120/.-,+,-+*.5:;81137531(-242054/2(3;798877435546;8776420-.*/21/*)*'$%'(#$""#!#()(*%B?;:<>?>>?=<974127..110-,-+)(&&)+)%#!8!#&/!')4(60))2.#""&59* &(()>0,//(:" 3 #&&$EB"?@DIKGJFGHFECFFGF#&'%#:*4A@@??<===;+'X'(),./,,.-($&&&%%6630150,&%<*487335/).225320+)++*(NKL,'/2,()&L''%IB9D=8@!## "$##$#$$'+)+-,(&$#"%'$#!"##&# +  +  &$("*%/1$#'(7B#&B999&%7!$)0&+,($"!&*('((,/697@=1--*052(!&()KQ>(&'/53BHP'-/)2:0;>7@346"0?)58 ! ! %$&-3@ۙLYĄƄDŽ8˄ɀˀʄ˄ʆ$̆ɀDŽɅɇ˄8͆ Є-؅l%Gm+)563000-,1-BFNQ-*43+LG##')%*16+#)&"!### /24302011334.#      ,'&G! !!"!$''!! !!! ""###%$#$&(')-9FҢʄˀwɅƅHW۰C;0'@OC8-B 4+'"4 + + + ` "!" *!   .$   +  +   f ##$##%)))+,,*(+.)$ ,$  + !$  +  + +  \ + +    + + + +  + +  + + +  !"#  ! v    $ !    +  %$)&"~}|}|}|||}|{|{|{|}}||}}}~}|{|}~}~}~}~}}~}~}~}|}|߀~~}~}~}~~~}}~~}~~~}~~~}~}~}|}~}~}~}~}~}}~}}~}~}~~~}~}}~}~}~}~}~~~}~}}}~~~}~}}}~ ꀅĢ˖Ï؀ԝe򣘳Ѻͪ˯ׅ¸@  +   +   < !    ! ! ! ! !! ""!""! !!!##!!!"!!"#5MЎ惖ڀ聇ſ¼ŧeŮì-! !" !!  !! !"!! ! !! !!! "!!!"#""!!###"##""##$##"#"#"""# +$#""###"!"#"#$$###""$#$$#" ###$$##$$"#"#$')***(%$#"!!!"#""!!!"!!"""#%"""!"!"###"""! !!!"!    !       +H˩δܢٲêɻǺǥ½ٌĻ샠댳ߊϨ׃˚bȿۆҶ976412399:;:9674<;=?@BFEA=<;;AA5/+*2*+,+('IF=<99:/,6>?$(-,&,/---+)&##)*)!#'+038A0@)8PFMSF*==CBWY3\3/=!/WhR-E\hJ;]06@K42<530/9AECDBAEGCBCFHKNQZdZKMSIKQL@6?;Cft.8 "A4/011200362/-388652/0/00//)('*-+))*6'*,)./22322/*))*()*,*+,,+*,//00010..+++0)''('((()')))*)*++,-2310/..-./02;=/&)*(&#F$%%%'(&'*)'((&K'()()'$!$&&'')&''*/63*')**-258<<=>@@ABAAA@A?6/.//-.000101112332.---/35=CGTQ PQQRRQRSRRTTSTTUUT +UVUUTUTTUTUVWUVUVUVUVVWVVVWVWVXWWWVWXWWXWVXWWVXW +XWWVWXXWYXW YXZZYYXWYXWWXWXYWXXXZY[]^]\\YYXWWXWXXXWVWVXW VUVWWXWXXWXXWVUTUV TUTUUVTUTTSTSRRTTRSSRSRQQRQQPQ RRQQPQQPQQPPPQPOPOOPPONNONMNOPONMONMLMMMLKLJLKJJKJKKKIIKIIIHJIHHHIIGHHHIHHGHGFGEFGEFFEFEFEDEEDEDDEDDDCDDCCDDCCCBCBCCB AAABAAA@AAA@??@?>??>>=> =>=>=<==<<<=<=<;;<;;<<;:;;:;;;:;::9:9::999:9:99989889 8887878778 +76776777887 876676776676766677656 5566565655566565565455445544554445543445434343 22323323223232121221121010111a00010/0/00_/00/]_0/^]^^]\]^^]/]\]\]]]^\\[Z[[[ZZ[ZYYZZZYZY[[Z[[ZZYYXWWYXWWXWWVVWVUVWVUTUUUTTUUUTTTSSTSTSTSRSRQRRSRSRSSZ\`WD`scWJ@%?D0/1SXS8!#&*)%! "! ""!  #'(&%$#"$%38EAC?H049:.)&&)1$26@@@CA!$$DH*02-(&$=-,/-./..+1<78;=980*3?$*80?"C?@@>>B#! 3238:? ! ",44(! D@'*<@A@?AGINROJLQNC<82)IE?1!"!)$!&'4:1'$C??>=>=@@721400*&&)%)C&-1+'(('')++**++,+.,,./.00//.,,,*)(+-010597367313.,,/0/23322(/9<<:666434559::;:9851--'!/10.*)()')))&'&'&%  "!A=>@@>=;@DE=75311 161/../.-,))()))'&&%! "#-@ *485.%.#"'*( 3(*(&*. 0).4,A!$ < ! "%A??A?=:AIIJIHIHEBDFFHHH&$$"5*;A@?@==<>9"")++),**+))('&&#$$$,446:63/)(6.6833 55.,)16412.+G)KM(.3/*()''('%A78BD;2@'!85:4,&+9%#%#"%+/ !+2*3J&E?=D%49DA78;! $$%&#"!$%'*,,.*%""!"'(#"    )#-'-1)$'6;"-5G>'?h5*?)-##),*'$$%'%%%&(/36@H<7,/8&$+@(1I5  %!&)&(+1驳&DŽƀ˄͆ʄsʄzʅsʄƄR΄M݄ހ l>)130-00//+++IF*F& .QGP**'& (.," # !!"#$%54344436452-    2     1' !! "##&&'"  ##"#!"#$#%&$"$%%&)-8DڡeօGɄȀ3M,G Dٵ@;3'>I=7/()+3.* + + +  Q !!   #  + +   + E  + +  (!"#%%((,-,))-+&! ,+' $   S +   $    + +       +  !#"!" !"      + ^ "     +   (+!"#~}~}|}|}||}|{{|{|}}||}|~~}~ +}}~}}}|{{{|}~}~}~}~~}}}~~}|}|Ѐ~~~}~}}~}~}~}~~}}}~}~}~}|}|}~}~}~}~}~}}~}}~}~}~~~}~}~}~}~}~~}~}~}~ 󟄄Ļŷуֺc̋ƳŸ缭劳Ʈœþp   +   +   + +   +     ! ! ! ! !!#"!"!"##"""#!"W+އ⇡񃄆[ɄʀβźǷ."  !!  !!! !"!!!"! !!! !""#"##"#"###""#"#" ##$##""$$#$ ""!""#"##$#$$# $%&()*++)&%#"#"#""!"###"!"##"""!   !!      +  $E¥ɪא磍򆒢߾Ʊ͊ǯúᇊ񑮭 ߋд쏝ϴĆTɥ5675058:;>>;669;?<;=>EGB=<<;;=600040,2-'IJKKGC>;;5)47>AA*N(6/...+*'&$&$%&(!%).8;A76/#BFJTV3788BJSS;?./6!3Vi[?LoSF8B+CJHFMKBKJHCFAAFSSQakVLUZXUXD@@R]\`7ERFA=IMPMK?BTf5K\hpZT76-38:6549>@F?;=9mxDCCDCCCDDDCDDEFE +FEFEEFGFEFE FFEFEEEFFEGFEFEFGFFGHFGFGFGGGFGFFGHHHGHIHHHGGHFGHGFGGHGHGFGFGGGHHHGGGHGHGGGH!GGHGHGGHHHGGGHGGGHHGHGHHGHGGHGHGHGHGGGHGHGGHGH$GFFHHGHGHIHHIIHHHGGHGHHHGHHGHHGGGHHGHIGHGHGHGHGHHHIH GHHIHGHHGGHHGHGHGGHGHHHGHHHGGGHGHG HGHHHGHHIHHHGHGGHHGHGHHHIHGH#GGGHHHGHHGHGHGHGGGHHHIIHHHGHHHIHHGGHGHGHGHHHIHGHGHGGHGIHIHHHGIHHGHIHIHIHIHI HIIHHHGIIIHIHIHIHGHIIHHHIIH IHHIIHIJJIIHHIJI JJIIJJJIJI JIJIIHIJJIJIJIIJIIIJIJIJKIJJIIJJIJJIIIJKJIJJJKJKJKJ KKJJIJJKJJKJKKJJKKKJKLKLKLLJKJKLKLLLKLMLLLMLMMLLKLMMLLMMLMLMNM LMMMLNMMMNLMNNNMNNMNONNNONOOOPONPOQPQQPQQQPOQPPQQQPQQPQRQRSR SQRRRSSSTSRSTTRTUTUVU VUVUVVVUWV WWVWVXXWXVWWXYXWXYZZYXYXXZYYYZZ[ZZZ\[Z[\[\[[\][] ^]\_]]^^`_^^_a``a_a```bbbacbeed2fff43443343433434455456U566777668=<29>75;?BA?<9Cj4:cR0'Q8=@?>;463624".41/,!$#(.09G??=;<96=%&'(*+*%3)'(%#<&&%#$('+,,--+*)*))**)))*(&%""#%&&()('*1794+()-1427:<=>>@BC1>7212//00/110012388/--../26:BKUQQSRSSRSTRRRSSSRRSTSTUTUUUTVUTTUUTUUVUUVUVUVVVUVUVWVVUWVUVWVWXWXWWXWWWXWXYXXYXXWWWXWYYYZZYYYXYYXYYXYZ[\^__^\ZYWWXXXYXXXWVVWYXWWXWXWXXWUUUVUVUVVUTUTUT STTSSTSSSRTSRTSRRQRQRQRRQQQPQOPQQPQQPOOPPONOOONONNNMNONNNMNNLMLMLKKKLKJJKJJIIIJJIIIHIIHHIHGHGGGFGGFGGFGEEFEDDEEED CCDCCCBBCBBCBAAA@A@A@A@@A@ ??>???>??>=>===<>>=<;<;<;::;;;:::99::9:9:::98999899878787676767676676765656565454343 233322233232121010100/5]//_^/^^_/]//^^]]]^\\\]][Z\\ZZ[[[ZZZ[[[Z[Z[[YZYZ[[Z[ZYXXWXXYXWXWXWVUVU VUUUVUTTSTSSTRSRRTSSSRRRSTRSSRQWa]ZZLRmfPQ9DX2ROVK[M[3"%('# !"!#)'# !#&(&$$"#%%42CBB=#+364*$"#(-*8/5=AB""! #%#GJ,33-++*J3420220.1<=>B;442#$8CI/5=@@A#C@"$!"#"##"!;985557< !#1::6+$G@4/:ABABFJPOMHINNE:2-'DE>3 (  (.,-*!(=I*+MAABA@@ABA?841//.**)`& 9%*.*'((*+-**)&')+,--+...//0/,++***+-.46654339;<4/--./--12/32/.4<954523211256769:::60-+$+--/-*(+,,+&#+-$!":4304:88;>>@BAD@<7335(5760.-,++*+,)&%c#! #(/)4<68"0-)'"(,&?*!%&(,8)/*-/*JED?A !"!"'DAABD@;>CCFDCFIFFIGGGHIKHEBA,2C=;>><;<-"(++))*+)p()'&%$$&)5478730.*,-96/341/*'441-...///-,+IH&,1-,+*()(%%D>AC>3<%D;@B440.&#00+&%''0 "&,4J%<$!0879 )0,+)48:87--6B!-;KSC>"! %#  "#&""&'aʗ $tDŽ4Ʌ8ȄɄDŽˀ8̄1̄(ˆ$Ʌˀ^ӄ$݄/ k+.0'$*-01/,+2H%(A7#&L.1.'''&'$& $  "$#436778653/+  0      1 !""##$&'# " !""#" """$'(!!$%&().5Bք؀Ndy< ޸^C:6,4C>48",6(.0'0+0 +   u %" !!#!    + + + + + + +  +"#&'%(,-,*'(++&(.),    ! B 9  + + + +  l +  +  +   + + +   !"!  "   - "!$   +   %(""# ~}~}|}|}|}|{|{|}|}|}}~}~~}}}|{|}~}~}~}}~}~}}| ~~}~}~}~}~}}~}~}|}|}~}~}~}~}~}~}~}~}~}~}|}~}~}~ ؒèź؄bٹㇱñ㉶ȼ: +     '     !!   ! ! ""!"#$"".󉐉ğؾ苨ξzï5   !!!"! !! !! ! !!""! !"!"""!"! ""##"""!"##"$$$#"###"##$#$##" #$$#"""#"#"##$#$%&$##"!!""#$##$%$#%&(+++*(%$#"#"!!"""$$"!!!"###"!"###"###"""! !""!!!"!! !    !!    + "     + >˳ڟ㎋ޡ̺þ̻ƭҳɺ⍮¹ƿ҆􅅀愊̣كƙcނῖ킃⹼F686558;=@?;9787>>8;@DGF>==<;9612261),-)%GDGMNNFB@<37>&C?I@"<:-)%"%)++,+*+!&+.:@BC+9 *8A[YG3849DFNNMO?&/3[dZONRC^*0GMJGH6/,.?=773ilgEDCDFE FFEEEFFFEFFFGFAGFGFDFEFFEEFGFEFEFEFFFEFEFGGGFGFEFGFGGFFGGGHGFFGGGHGFGHGFFEGFGGFFGHGFGHIHGIHGHGHGHGGHGHHIGHGFFHGGGHGGGHHHIHGHIGGGHIHIH GHGHFGGGHGH IHGHGHGFGHGGGHGHGHHIHHGHHGHHGHIHHHGHIGGHGGHGGHIHHIHHHGGIHHGGHHIIHGHHGHJHIIHGGFGIGHIHIIGGGHGHHHGIJHGHIHIHHHGHGHIHHGHGGGHGHHJIHGHGHIHIHHHGIGHHGGIHGHHGHGGHGHIIHHHIIHHHGIHHGGHGHIHGIHIHHHIGHHJIGGHHHGHIHGH GGGHHHIIIHHIHIH +JHHHGHGGHIHIJHHIHHGHHHIHGHHHIIIHHHIIHHIIJIHIIHIIHI HHIIHHIHIIHIJIHI JIIJJIJJIJJJIJIKJIIKJJIHJIIJJIJIJJIJJKJIJJIJJJIJJJKJJK JJJIJKJJJKJKJKJKLKKJJJKJKJJKKKJKKJJKKJKJKJKJKKKLK JKKKLLLKKLKKLLKKKLKKJKLKLKLMLLMMLLMLMLMMLMLM NMMLMNMNMMLMNMMLMMNNM NMMOMNMMNOOONOONOOPPONOOPONPOPOOPQQPPPQPPQQPQ*RRSSRRQRRSQRRRSSRRSSSTRSSSTTSSTTTUUTTUUSTTUVUUVWWVWUVVWVVVWWXWXWXWXWWXZYZZZYZX[[[ZZ\ZZ[Z\\[][Z\\[\[\^^]^\__^]_`_^^_``]^__`_a_``babbacbbccbddeddeedd22322f3f3 44434445554565556567F`[^;;215@EFCA>>>@A=5G48?8?KQA5;2#2=!./+'%&"&'&.4JD:9:??>C()(())($6A(&$%H%'IH%&((**)))**)*+,++*)))(*--**//,*U,UTVWTOFFL'F:++401321//31/,.258332/02111-(),---0/..-.,.0002445374/('*--**)*++,--.-02532/-)(),02221/+++*++***)**,./,8-.--.130.,))(%"""$#$%#$"&,-/.*(,..*(),*)))())&$%&%&'))*)* (+331.19<>>>?>&ABCEC?71110/-./1212337::/,-0/026;@e^TQRSRRSRSSST STTTUSTUUUVVTUV TVVUVWVWVWVWWWVWWVWWVWXWWXXXWXYXWXXXWWWX3YZXYYXXWXXYWXZ[[YXYXYXXXZYYZYXYYZZ]^`_^]ZYWWXWXYZYXWX(WXWXWWXVWYYXYXXYXXXYWXWVXWWVVWWWVWVUVVVUVWUVVTVVU TTVUTUTTTUUST +STTSSRRRSSRSQQRRRQQRQQRPQPQPONONONPNNNMLLMLKKLKLKLKIJIJJIJJI%HHIHIHHHGGHHGFEGGFFFEEFEFFFEFEEEDEFEEDCCDDDCBBCCCBBABBAA@A@@??@?@>>>?>>=>==>==>=< =<<;;;<<:;:;;::;:9 7998989998778789878 +7878878878787678667 6677766767667677676646565 6555655565445554543434344322233211221 +21010001110101000/0/^/00^0_0/__^^//^\ ]^]]\\]\]\[][ +YZZZYXYZZZYXXWXYXXWVUVVUVUTUUTUT UTUTTUTSSTTSPWhbY_\I]nKFZg9/R4^J_-=e+#%##"$! ""#*+'&" #%#$%""$&@%0;? "&051$"""(,*%5)1=!"" ! "##$',32-**,@44023///8>>AJ<63*'065,2<>D"''#%%$$$"#%$!=!%<38:;!%$")5<>>5'$G;5BKFADIMMNJHKLF;2,PJF=0"&%#"!,239555.)&,C+EBB@?CC@AC>86321.-*#!7'*)((-0-03243/Q.-++--+--//.//.-***-..-269762-39:81,*.1,--/2101/493014100253436118;=;960+()(*0.,*)$#-0%1 ! 762./6447?$F>?@<:88=+0560.+)((()))('$$'(& $.(*;02!$653<%,,#:)#$&&')-"../*$'B5;85b32.*&'<6254.,(+:3/,+./11+*,+)'',00/++,,('$?@C>27'A63J@3/0/"#%31)'%%*!$,=+E=BI)-*3<57845"$" "%'**'# &'#(+..+&#"!"!#!%+*("   !&(+#7.'+3436' :D=65;1?*,)*,!"***&#'(-)16;>3+31446=4*%).1*)H;:&$05572(552;?750//@G>22DK4A'!* "#! $(""  SʤÀ̄8Ȅʀ@ʄɄhʄ>ȅ4ɄDŽ˄P΄πl1/##,2230/./-*,(%4-14+026+#*&%*"A#"#5537751("#  !      D!  ""#$%'$!"#!  $#"""!$()"$&()(*-6?Մfӄ҄?ʄɀ-8 ]0۸hG8<:.:E12@I#26#4(6 + +  +     + #!" "!"%$$% +     + +)#*&$(*,+*))**& -00'  +   G' + + + + +   +   + + + + +   +    #$$""$ ! "    _  +  +$"&%!!~}~}|}|}|}|}|}|{|}|}||~}}~}|}~}~}~~}}~}~}~}}߀ ~}~}~}~}~~}~}|}~}~}~}~}~}~}~}~}~}~}~}~}|}~}~}~ ⏁ͥݼϿˮ֏gγʻƳֳžҝƩ\   +           !"! !!"""#"!"!!#"#"#"(ӌ䅞󁀁źǶeε>  ! !!"! ! !! !!! !"!"!""!""!)"""!!! !! !"##$$###"#$#""##$$$##""##$###"#"##$#$ %%&&$$""!!"#$%$#$%&()++*(&$###"!!"""$##"!!#$$##"$#"$$#""!!! !"!!! !  ! !         ?ʽ۪춗IJ̷ܷǺπ􂆎ʲ˵Ƴȇƺ풠܀ʱgץ퇍Ƴ47688:?@@>99:;9?=:>=<97546232+*)&LKDFNQQMHDA;9CGCBIB!=9..-+(!'/"!+.8@@Q34;,/=bR5*)1BHNLJTD.#2!BF<.6E9BIKK()CB#BDANT-Z/OIRSYW[_TF@?=84994=2U^c][]V=T\[Y`H>4/2>CHIFCA>BC?;[:SE==?@>@;09>;!//'('&$%%(-3DN?::$"<#'*((()(F3F&$$%&%%&JIIK'()(')**)*++*+*))''**(*,-*,/.-,+WVUVVPLO(EHD?6&(232)2100110-/356111001/.-)')--.-./---..011024640+)+-.,)'(('()*)+,.,---,J-/122441,+,-,,-,+*-023346641337963-(&$! @>=@ !"#!!"#%'*+().0.(*,+*++*))*+*'('((*-;?0(+4;>>?@@?(ADFB;611530.01101232::40/../248:?suURRSRSTSUTTTSTUUUTTTUTUUVUVUVUUVUVVVUUVVVWVVVWVWXXWWWXXVVWVXWXWXXWXXYWWWXXXYXYXYYX WWXXWXXYXYYYX YYZZYXYYYXYZYXXXYZ]_ \ZYXXXYYYZYXWXYXWXXXYYYXXYXYZYYYXWXWWXWWXWVVWWV UUUTUUVVVTUTSTSTSRSRRRQQQRQRQQSRRRQRQPQPOOOPOPNMLLLMLKJKKKLLKKJIIHIHIHHIIHGHGFHGGFGFEEDEDEEDCBBDCBBBABABBBAAABA@AA@A@?>? >>=>=>==>=<===<;<;:;:89::98998999898998878787788787876767776667776677656 766565566656654545544545454 +33443343343222321122111211210101010010`0`0^//^_^__/^]^]"^]]\\]]\\\]]\[[Z\[[Z[[[ZZZYYZYYZYZYZZYYYXXYXYXXWXXXWWXXXVVVUVVVUVWWVUUUVUVUTUUTUUUTTSSTTTSRSSSXeaXacOLmOoihCIS8@@h>0;R5!'%""&! ""$**'&$"!!#"!"""#$%",5 !,6-+(%%(*)+O+-; !"""#%/80)&'+E;43110369=CPF;82,''++1<>""%'""#&&%#$$#!>!((>755"!"'*04.KFB?BJHDGJOPQNJJIH>5,(LE<0##-"),4<=;98548:83.)/EK@A@?AB>>FA=;97325.$ -',*+++,()-./2101./0210///../.-+,,-//0169855505343.*+,+//.22/003931/12032444356468:;;:83-+)'*//-+,)('+*(,":::889877339>B=;:8<86<,10/'-*'()'&&%'())('%$&'#!*<&5>1/014:"(('=)!&#%%&(-7(20+-.E118%#!%#%"#HHKMIFKM&%GFCA=;CIGHKIHGGEBB<)+<;=;;7'!'),*)))**)('$%%'&(((6@:9d74510,$H8653/*)(791,,'*.1.%.1.1.)*-.,*,/++,D=B@;3?%;.:D80/92 !$ #/!#,)&& ",1@NEII&+//767;596M#%$#!#'()(&$""!))&).0-*&#"" %&#&*+,)$! +   ()5 :, "+3419. $;<=902(3! %+%!0!%))(!!""%0581-.,0/482)*++&%))$+",8C99:2$5@B?F1(.0?OK;1.:LE6.' #"!"",("cYĄÀfʅ9ʄˀ*ͅI˅˄̄ ɄAʄɀ!օԀ;3& +044320.0/*)C*A81131(**!',%%( %$#%3655784/0  +     ''(*.%' !!"$$$#!#&&$" "#("(*&%&&'(+,25Aӄ|لր€*1#"-bܰcG:@E20F2HKK,-8:#* + l    ' + + + *%!! !!"$%'/"  + +     + ()%"%*'&)-/..,*))("40*   +!#"  P  +     +  + + +    +   #&%#&'#!  !! !!  _ !  +   &*$&$~}|}|}|}|}|}}||}|}|}|{|}|}}~}|}~~}~}~}~}~}|}؀~~}~}~}~}~~~}~}|}~}~}~}~}~}~}~}~}~}~ ־潵˼ˌoǵҾϬٶ཭׶윣9                + !    !  !""! !!#"!"""#!!#5ݗن􄊎ϻ˽¿Ѿѿĺx̼԰   !!!""!! "!!  !! !"!"""!""!""!!!"! ""###$##$#"#$#$#""#$$##"$%%&%$%&%%$$"!"!#$%&&&%$$#$%')*,-*(%%$#""!!!""##"$$##"""##$$$##""#""#%###!"!"! !! ! "! ! ! ! ! !     + D¡ʭᣪꁃπƮϯ뀆ټҿ0ϾǪҳꉔȷ\ׁŚڵ4698:?C6><;>;=>@=?@GHE@>=<:85688632+*(LFBCLOLMNLHD?DKC@EIP0A><;63.-0..,'.&#*8?>XC.84'6]G:'#!%6HNNCORM&"/%ETZ|XLIC5O6>4>D6;[OGECIPLGC'IGIPX-S-*P)(RRYTM=FI=ii>@=BD+6>59<9:HZ_YZ=48GhkeNFGPbMtC==@<;;?H7%+460gscFCDDDCDDEEEFEDEFEEEFFFEEFEEFEFFFEEFFFEEFEGFFGFGFGGFFFGGHGGFGFFGEFGFFHGGGHGHFGHGHGFFHGHGFGGFGGHGHIHGHIHHIHHGGIHHFHGGHIIHIIHGIHHHIHHHGHHHIHGHHIIGGHGGHGHHGHGHIHGHGHHHGHIHGIHHHGHIIIHHHIHGHHIIIHGHIHIHHHIJIIIHHIIHHIIIGHIHGHHHGHIH IIHHIIIHIHHIHIIIHGHIGIIIHHIIIHGGHHHIHHIHIHGGHIIHIIHHIHHHIHHGIGHIIIHIHHIIIHIHIHHIHHIIIHIHHIHIJI HGGHHHIIIHIIIHHGGHHIIIHHGGHIHHHIHIHIIHHIHGGGHJIHIIH IHHIHHIIIHIHIHIHHIHJIGHHIIHIHIIJJIIHHIJIIHIIHIJIIIHHIHIIIJJIJJIJIIIJIJJJIJJI +JJKJIJJJIIJKJIIJKKJ +IKIJIIJJKJI JKJKKIKJJKJKKJKKJJJKKKJJKJIJKJKJK JJJKJKKJJJKKKJLK JLKJKKKLLKLK +LKLLKLLMKMLKLKLKLMLLMMLKLLLMMMLLLMLMMNMNLNNMLLMMMKLMMNNMNMNNNMNON ONOONNNPPONOOOPOPOOOPOPPOPOPPPQQPPQPRPQPQPQQPQQRQQPRRQQQRQQSRSRSSTSRRSSSTTSTSTTTUUUTUTTVTUVUVUVVUVWVVWVVWUWWVW +XXXWXXYXXWXYYXXWXYZYZZZYZ[YYZ\ZZ[ZZ\[[[\\]\^_^[]\\^^]^]]]^%a_`^_``__aaa``^aa``a`aababbcbbcdeed2d2e3234545456567878hs>>944>AFIHIGC@ECB3_;D4WLaH?<',*++)&$%%*/4=L&EB%8#(*)(&))?4EEK&&&%%&&%&&'(()(()))*,+**(KN()**)**++---++,TXYTSURS/C=FE90$+223311220-0264000/./..-*'*,-,Z/0001244456630-+--.-+''&'')()))*++-10/-/-0233654,++-+++,,*,.2456<2+'&*.1-&%$!:8@@B!$"/(--+.0-*,,---.-+*+-.(')(('(('((*,0=?++-19:<==>@B'EED?1-0522200.03233861//-.0138;>z?USRRRSTUTTTUTTUUTTUVUUUVUUUVWVUUTVVVWWXWWXWWXWWXWWWVXWWXWXYXYXYYXXYXXYYYXYYYXXYZZXXXY XZZYYZYYXXXYZZZ\^_aa_^ZYZYYZZ[ZZYXYYX YYXXYYZYYZYZYYXWXXWWVXXWWWXWWXWVWVUVWVUTUTUUTSTSTRSQR%QQPQPQPPPOOOPQOOOPPOOPPOOPNOOONNNMNMLMLMLMML KLLKJKKJLLKKKJIIHIIIHHHIIHIIHHIHHHGHGFFEF$EFEEEDEEDCDDCDDDCDEDCCCBBCCCBBABBABABAB@AA@@AA@@A@?@?@@?>>??>???>=>?>>=>=><=<= ;==<>=<<<;<<;<; :;:::;::;:9:9:9898788787887788778787776767768766776767666776 55566656656656545434344344333233322321212210aa10&/0``0/__`_^^__]^]^^^]]]\\]]^\\\[\\^[\\[ +Z\[[ZYYZYZY [ZYXYYXXYYYXWXZWXWXVWVVVWVUVWVWWTUVVUUTVUTSTTUUTTSUTSRRSSTSXh_Y]_fLbbJ9tXT*,'Tku49B=3"#!#($!"$)+'%$##"$%# !"###>-* ;%877+())-//-H/"-5>#A!"!!"$),/(&)1I=72220/38=AFI?>@6$)5;<#"#$""$''&#"""!"#&,%9/3"#"'&FBCCGEEKPQRRPLJKIF<,&FA8))$4$'$'/..-6;:779::7663..5HFBAABB<=D@=>=<9494&")&0.,,.00,*)'+,+./132332/.--../../1697459585,/--/+%),05110.2632--./035553467989986863//,)+,0/+)++,(%)(% 76=959=@:<=5376441;848+2-,%('(($$##$$%')*('$#$$"#(%'-7;735:??A4$ +&'&'&*3'*1.0)%;5?=D$$%&&ECJOMLJIM('HGHFCCCDEDFIGFEB?AB>3$-9:=90 %(()*))''(&&&$$%&'))5H=<7774341(]C744/+)(,:6-&'&+/,++33,43,(*-,-///3.JEFC79K-90$C9307-$''&#+6#34/*)&%,0?IJK%+186<4;88<8%%'$#'( '('($%'*)++00+($#""  %""#(,())(&" $  + +   +('<,7"  *571976+:=s<53/"2!#+!&64'%$),((%)')192/.,22-$,3-HG+,&++!%!%'%&/>E=A,##.EHE5/16MCG-@=0&M;7*9<$! +  + + +   + +   $   *%" #$%')%  + + + +    + #''#'&'+0//.-*+++(".,& +# "  + +   +  S     %'(%#'%$"!!!    p#       +  "!*''+'~}|}|}|}|}|}|}|}}|}}|{|}||~}~}}||{{{|}~}}~~}~}~}~}~}|}ـ~~}}}~~}~}~}~}~}~}|}~}~}~}~}~}~}~}~}}~}~}~ ̕ĶǘνѽƑbê鴠ߒ忭ǫж˜` +  + +    +      !! ! !!   ! ""!! !!""! !!!O򌗕ၛƾ钞ځĺрĿhίt#   !!! ! !! ! !"#""!""!"""!"#"""!!!" +#""###$$$#$#$$$#$#$$###$%$%$#$%%$%%$#"#""#%&%$# %')*,,+)&$$#"#$$$#"""##$$###"""###$##"!" !!!"! !! !""! ! !       +!A٬ćĹ롒낄ų纲Ϻij`ϰ퀙ק˦˿ǴӯE8;;;@?14BAA?>>9>A@GIGD>>??<8777641-(HME@BFKOLJKKJIHLHCDJIMG(><;82-16)'!2?<\M1'-$6S>42)-.+@QPPTVTOY(/,FQXWRD30$:R59?B@=66=?@EIQ[KNOL>?acWI DHRcCN=D<=?B>95'?*650VwFDCDEDEEDEFEEEFEEF +EFGFFFGFFGFGFFGFGFEGGFFGGHGFGFGFGHGGHG HHHGHHGGHGGHHGHIHIHHHIIHGHIIHIHIHGGHHGH IHIHHGHGHIIHGHIHGHGIHGHGHIIIHIHHHIIHHHIIHHIIHIHHIHGHIIIHHIHHIHIHIIHIHI +JJIHHIHHIIHIHIIHIIIHIIIHIHIHIIGHGHIHI2HHHIIIHIJIIHIIIHIIIHIHHGHIIHIIIGHHIHIHIIHFHIHIGHIHGHIHHHIHHIIHIHIHIIHHHIIIHHIHHIHIHIHIIHIGHHHIJIHHIHHHIHHIJIJJIIH +IIIHIIIHIJIHHIHHJJHIHHIIHIIIHHIJIHIHIIIHHIIJIIIJIJIIJJIOJIIJIIJJJIIJJKKJJIJJIJIIJIIIJIJJIIJJKJJJIIJJIIJJJIIIJIJJKJJJIKKJJJIJJKKKJJJKJKKJ'KKKJJJKKJKJKKJKJKIJKJKJJKKKJKKJKJJKKJJJKJKKJKJKJKLKLLLJK LKJKKLLLKKLMMLKLKLMLLKLLLMMMLMLM LMMMLMLLMLMLMNMMLMMLMNMNMNMN MMNNMNNNONON#ONNNOONONNNOONOOQPOPOOOPQPPQPQPOPPPQPPPQPQPQPQQQRRQQRQQPQRQR QRQSTRSRRSTTSST UTTTUUTTTUVUV UVVVWVVVWVVWXWVWWXWWXXXWXVWYYXXYXYXYZYYZYZYYZ[ +Z[[Z[Z\\[[\]]\]^^^]^^]]]_^__`_`_aaab`ababbabbcd +cad2de22232323234354544545665677667C9fp9@<6>BHIGGJG?@DB:6T/2>8D'%*0,+('&(+/04<'*(#8 &*++'D(G15EG&'%&'(F**+++**)'MMP*+**+**,---,ZXVXWTVVQKVL>@ED:.)24343211..47651/00.00/,*+*,--,-,.///012455644310/01-,,*)(('''(('())++,-,/14G760/0..,++,+),-383,,(#"!#$$%#!   !CCED#""###)0-+*))*-**++,./.--.,)*U+,0331)(058:99=??ABAC"""#GE=4//255532223522=70/.02/038<@mDTSSSRSSUTSTRSSTSTUTSUUUTUWVUVUVWVWVVUVWWWVWVWVWWXWXW +XXWXWXXWWWXYXYYXYXY XYYXYYXYYXXYZ[ZXYZ[ZYZZZYYXYYZZ[[[Z[\^`a``]ZYZY[YZZZYXYZYXYXYYXXXWWXWXWWXXWVUVWXWWVTUUUTUTUTTTSTTTSTTTSTSRQPQRQQQRQQPPPQP +OOPPOONPPONONNMMNLMNNNMMNMLMLLMML MKKLKKKJKKKJKIJJI +HHHIHHHIHHGHGGFEEEFFEDCDDCDCDBCBBACBABCBBBABAABA@@@A@?@???@?>?>???=>=>==<==<<==<<=<<<;<;<;:;::;:::;:9899898899989887878787887878878767677767765655565 65655566554545454334434323232211121221 00110abbbaad cbca`babaab`_`a_^^__^__^^^\\\]]\[\\][\\[Z[ZZ[ZYZYZZZYZYXXYXXWXWXXWXXWXWXWXWVW VWWVVVUVUVVVU STUUTUTSSTRSSSTSUWcdY]deTUpSFF^Y?*KSPW)F. #$$&! "$$'(%$$##$#"" ;$(0%-73.**.12-+*I;-)."!""#&)42+*3(<:91011//18>ENJEHC0&.>AA!#"&&%$"##$$&$""##:21%(%>BBIMFGNVUSSQPUYLGA.GB;:6677"#(+#&++&'+:C75<@:752-(*-6=AEA@<8>CBBA>==8?:,#$F/1/0335220*,+.---.++.0/011220122010149953597280.-(./)+)*/110/272121//10355566579:;:7761-,/.0.01)'-0/,'&&*#7537867<@;<=945134-385)1-*-&'+)#! $$$#%&))(&&%$#"$*"#,6<10118D*&4/2')*.>1/*#%;@79>=@K)**(JEKQOKJJ&'&IJJKGDDFFEFFDGDA=?A?;-%/362 $(*(*+++))(('&$''&')4B<<>96634`82,H511,+)+072+$%('0,/--)-12-'*00/..11OFJE;7I.*2C'@58-)'!)+)'(186431,)&!.,323# 249<=:5>-7;:90!2),8/$+('))+,.272*).15,('*%+-,'!"'()/37A5<=;-*BC;300:I4=.1)()*%#! Hϕ5Äd̄ʄ˂̄8ɇS˄Jʅ̈́;˄ͅ˄΄5̄ˀ7΄ˀ[Q36-&,.454464./0/*%8"0OQ*.--"-&+   /(*+876754661,2&  2    n%'**!$$&$ ! ! %&"!&*+(&$#%'(&%-($$#&''(,17F̄8ք؀ՄЄ¿>s<@`PܵfI==HI66H3.-?8;CCGJIFCC@>><9:8541-(KC=:DByAM?E8EHI614?ADHNIPNSaXW\:\KJJEML>LdB>9@<'2.-)/72amtFDDDEFEEDEEEFEFEFGFGFGFGGGFGFFEFFFHGHGGFGFGGGHGGHGHGGHGHHHGHGGGHHGHHGGHGIGHHIHIH +IHHHIIHIHGHIIHIJJJIIHIHHIIIHIHHHIIIHIIJIHGHIGHHIHIIHIH GHHHIIHIHHGHIHGHGGHIHHGH IIHIIHHIIIHHGHI,JJJIIIHKJIHHIIHIIHHIIIJIIHHIIJIIIJIHIHIJIIHHIHHIIGHIIHHHIIIHIHHHIHHIHHIIHIIIGHHIHIHGHIJIIHIHIHHIHGHIIHIHIJIIIHIHHHIIIJIHIJHJIHIIHIIHHIIIHHHIGIHHIHHHIHHHJIIIHGHIIHHHIJIHIHIIJIIIHIGGHHIHHHIGIIHIIHIJIHHIIHIHJJIHIIHJIJIHI JJIIJIIIHIHIHIJIJIIJJJIIIJHHHJJJIIJIIJIHIJIIJIIIJ#IJIJIIIJIIJIJIIJIJJIJJIJIJJIJIIJJJKJKKKLKJJKKKJKKJKKKJKJJLK JJKJKKJJJKLKJKLIKKLLKJKKJJKJJKLKLJKJJKIJKKLKLKJKLKKKLMLKLLKKLJLML +MMKLKKLLKKLJMLMLMMMLNLM LMMMLNNMNMLM NMMONNNMLNMONONMMNNONNONO-POOPPPOPOOONPQQOOPPQPQQPQQPPQPPQQPQPQPPPQQQRQR QQQPRQRQRSRRRS RRRSSTUTTUSSSTUTTTUUUTUTTTUVUUUVWVWVVWVWVWWXXWWWXYXXXYXYYXYYYXZZY[[Z[[[Z[ZZ[Z[[[\[Z[[[\]]\\]L^_^__``^_`__`a`___``aa``a`baabbcbababcdddec12ee3dfef32223334344344534443554454545656677676667887786788Q_7A?5?BCJHEHEA;>HE@6L(78;=7::D:B#&),++*,(+*-005D))#"'))++#5>21D'&'('''&&%$$%&&((())(**))(('OPP*+)**,,*--V,XWWXXYVSPIQL@<;AC;+.5663124//6:93221-000/-*,--,-*,...-10100113464331//01/./.,.,+,*(&'((()++,.02457872/-110/-+,,+/550-&$$$#%,Q::6("!!""!!"#!!##$$#&(('&&&((()))+,+,--//.//-*--.10../3/-(')/34588;=@@BA@C##E$KG:1604663346548:40--112267?ESAVRTTTUTTTSSTTTSSTUTTVUUVUVVUV +UVVVUVWXWWV%WVVVWXWWXWWVXVXXWXVXWWYYXXYXXXYXXYXXZYXYXYZYXYXYYZZY ZZZYXXXY[ZZZ[!YXXZZZY[Z[Z[\_aa``^\ZZWYYY[ZZYZYXYZYZZZ[[[ZZZYYZYYZXYXYXWXWXWXXYXXXWXVWWV WVVVWWVUVUTUUVUTSTSUSRRSSRQR QQRRQRQQQRQPOPOOOPPPONNNONONO MMNMMMNNLMLMLLKLLKJJJKJ IJHIIJIHIHHGHGFGFEFEEFEDEEEFDDEEDCD +CCCBCCBBBABABABAA@@AA?@@@?@@@>?@?>>>=>= >>>==<<=<==<;:;<::;:;;;::9;::;: +9:9998989:9:9898989898788898778877878878787656766676767657656565655656545545434323232Y1212221122211211100abcefffeedeggehhjjlkmkhghhffhdbbddecbdbaaa`_bcaacdbca``^__^]\\[Z[ZZ[[ZY ZZZYYYXYZYXXYX+VWWXXYXWWVWVWVVWWVVWWVUUVUVVVUTTUUTTSSRTSTTSTTRSSRRU_Y[WUZZ~[R@`PF<%6@B8^I #%(%" ""!!"#$&$#$#$$%#  (/$ - &,<2&5:3//4:82($#!=968 """%-93,00=<::3-,..0.08BPRPQJ?21:CF$$$%%DD%&$%%$%" $%=11#(#>FJHIMUSTM>56,$?!!$)'%%#$%%'+)'.,)%*/?C:>#?760*&&%+33ABA=<:?AB?<;<7:<4)#@+,-1764336411011001//..-.///12443556::8415:8776..-,/,)0/&(*,03:,)12420113576669:;:8766/,+*,.153,'/.+++(%$%@5655249>??<:61025547")*6($%''$&##$%&&&')(&&&%&$#,: & 1)*$&$0(,-#71/").4'21$.-32(;?8=M)+.RIIJKIJLLP&&KKLL%HIHHGFDB>=<;>61-+&!**+*+-,**('(&&%'%$*5I:8=<7752495/)0/.*(,002+%&*&&+-.*((,-/,%1532-,/*IHXI=@-,:6)LB8:.'&$)'%$,1475.,+($",149N'( *,0157;8999:M)((+,).,.*+#)...1/.,*('('$$!' $()(&%%&('()#!""%     &/?* *)1-7=DF>8'1;?=3% #$. )%C-'1"(&))1-*)00X0<-1$,05$!"+,//5376@I@>>8P74)>86,1 + +  S +  +  +  "!$,440/*  +   y  +&++,.2223121#'$$*+*%#"#$$"!!      +   +;  + +   %-'&'('()(*&&&'$&&#""  + +&!"+#  +   '(+*))~}|||}|}}|}|}|}|}|}|}|{|}|}||~}~}|}~}~}~}~}}~~}~}Ҁ~~}~~}~}~}~}~}~}~}}~}|}~}~}~}|}~}~}~}~}~}~}~~}}~}~ ؽ聋˺¸dƸֳÎӱ⤧6   +    + +   ! !! ! "!!! !"#!!!"##!!""!!"#####RŸӿ±ZŸ߻g! !"  !!"""!!!""!"!!! ! !##""#"###"""##"#""# ""##""###$%$#$%%$$%%%$#$$#$% $$$%&%$%$#$%%%&%%##$%%'(*,--*(&$$###$###""#$$#"#$#$$$#"!"! """!!""" !"" !        +  K! "$&.4kf]UWxvuk_][XXY]WXdggk||AECA931,+  4Ƭᰛ샘˹򀇑ƶ☭ķ􏚕ؽ̹cԆ達ѰH<118CJMONNLMMOSRMJJK'IAP7>:978./85(",$AR^DF7!/)0:1&).,-8OKK]_dc]YE+I@XbZM<20-@VI780(XCA%'))**2*,*'('4:FP'&((G**8-5D(++)('(&%%&&%%&''()(H))('''NM(*((*+++,+TUUVUVWWWPGKOLJ<89?E;,/554222//6<=633100201.,-/..-,,-./a.01222354120-+,02/./142220.--++*,,0//1244686/-/021311,)-1,)$%%$#$#%'++'""!"!"!#$&$"!#$$$',1.'%'&')***,-/0I-,,000122/.(&&%(-/348;;>=>@CBADEEE$%KD4/2301464546429:1-./1244:;BIaHUTTTSTSSTTSUUUVVUUUVVUVUV WWVVWXWWVWVXWXYXYYYZYY[YZYYXYZYZYZYZYZYZZZYZ*YZZ[[[ZZ[[\[ZZ[[Y[ZZ[ZZ[]_aaa`^\ZZYYY[Z[[ZYZZ[ZYZ[[Z[ZZ[ZYXXXYXXYYYXYYXYXXYYXXYXWVW +VWVWWVVWWWV!UUVUVVVUTTTSTUTTTSSRTTSSTTSSSTSRRSRSSRRRQRRRQQQRQPQPPPQPOPPOONON OOONONONNNMMNNMMMNMNMLLLMLMLLLKJKJIJJIIJIHGIHGHGHHGGFGFGFGFEEFEDEEDDEDCCDCBABBBA@A@A@@@?@?>??@>? +>?@?>??>=>=>=<<=<<;<<;<;;;:;:;;:::;:;:;:99::;::99:9::99:9::9:9998899988988898 +98878878787878766767676767666565656566556545445434333432323321R00bbecdeareʭ_fiwSVZ\]`bbba`^]]\ZZYYYZYXXYYYXYX YYYXWWVVWWWVWVUUUTTTUUUTTSSTUTTSSTSSSTST[XWY_[ZpgRaRtOM +;@#+""%(+&""!  #%'$""!""#" #& '%0/$(3=)1A956=:6/(#!! 97!$/<:24?1558753/+)*-1;LVVYVNE56@FHFE%GCE$'*('%%''$$%##"%%?3=CHLLQOSWVPA:6'0$.3.'##%&'')*+(+-.((-.;ABE?972*)&#"'*,3DIA===>;7:96243+'=(,+/1233265411232444652000//00021345<;64249;<:81-/0/,-010-%#/184$+--233144577699:;98763/*+)+-10..+)''&''&#@><75153:?<966.*6665:&'*5'#$%"!"#$&()('())(''&&$)*.$%#)<'.*!3-! (/=,--".04((B@9>K(+.)HJHHIJKO*'&%IJ''%%KKIIHECC?=;8;:741,&',*+)))''%&')'$%&%*9IA5::7e8:958A79*0/*)*11.('')+%(*+,+-00/.('146711+HEJ-IE)4'.;LF==?)%%'('$$%(-/64-+*(&",414LM(+**/79889:;>G)(,-$0*++!**.///-.+-.*&('"*( $(*++)'()+-+'""  *   $6>,    ,,.@EHHD?2%&3>7O21 +  + + +   + +    + !'27662,"  &-..0/1531( + #! !-0)&%&%" !   " W      + + + + + +      "%&%%&'(,#$%$"#""  +$ V" $"  + "&)+++,~}~}|}|}|}|}|}|}|}|}|{|}|{{||}|~~}|}~}~~}~}~}}~}̀~}~~}}}~}~}~}~}}}~}~}|}~}~}~}~}~}~}~}~ }}}~}}~~~}~ ٷښij`ߓخŲ       + +    ! !!  ! ! ! !#" !!##!"$#"!##"#)ݚ«ՀοƷaɸřM$  !!!  !"!!!"" ! +"!!! !"!!!"#""#"##""##"#""#""#$$""#$%%$$%&$%%$%%$$%%$%$#$%&'%$%%''&%%$##"###$%&&%$%$ +&(*---*'%$# $$$%$$$###$%#$ %$###""!!!"#"!"!!!" !!"! !!     +     ` $&+1:{ű˺¸ˆɦZ\j636 &ؚ٪ֶ؀Ͻżǥչ¤,źòလž̽3繸ղ󄈉>CF3Q>JI@?78ABEGHHFCCGE>8<<8311/-*+UF888<<_sWJ()JIH$$71'*++)())'&%&'(&%&'(()('&'((()'&'%%')((('()+,*STQRTUSSTSLMNP,%=86=C::55632/-149<8210111000./0/210-/0./-/..2322255311.**.20/023321224212322310/0235920..012240),2.&'&%$%&%#"!! !"!!! "!$&%#!!#$#()38,)'(''('&('')*)-0//04./1/-('('*-1.-048;>=@BCBBF2I%KJ=6421123565535;801101136=@CLQQTTSUTSTTTUUUSTUTU?>?>?=>==<>==>= <<<;=;;;<<<;<;;<<;;;<:;;;:::;;9:;:;:9::9:::9:99::98988989889989888787898788777676776766767655565655656545434343334322232`33f32edb`eeel~|uSzoqfh_b^\ZYX]__\gd`rI|=79865563790)''*1M]\_\RMD7DJKNLQYNC97C0*%4@4'"#'&('*++*-00))-,-7BD=670)&)(&!"!%.@RJFB=:5:9721+0@E*/3341/124/2342134348:765634332100139723147:;:73/0242114312,$,85/-1,/15+-2158:44:76798620-*,*-.02/($&&$$#B?<@<:8<5798:1,6:9;#)(/3-&%!.!$"#(*))+)*)('&%%/&*-' ,9#%&)#"(3#4,&4082.,;A:@L),+OLIGKLGKM))(%JIK&J%ILKL&FDC??:46:965.' (())''%%%#%')'%',5AJC::>988969AB8H0/-+(.2/*$(*+-(#**)-/2100)+135553*%FHEFK1/?4@G=<>8&'"(((''%'+-420,+'%".732DM)(&'.5699:=>;I+,,-'/0)+ !*,.0.-,*+0/)#'%.& %*,*,-+.10.+(& /   +%:>9  ",(0DFJNHD9'"2QCA3"1.*(0 C$)*#(#// &)'$+3*O+.&,%%%)(*(&(++08739?@@HE6,241-I\dB-153EąM̄ dž7̄8τ̄Є̀ˀk̈́̀҄υрtVB21'$*+15131*#/456.C+7>)3!(/'('#''%"2144555241/)*+* /"$$!#%&((''%##&$%%',-%#$#$$&),)'($&++')&%&'*+03:RЀEԄ3ɄG$.ǯuceak{iDc[XPMDIMKPLIOQRPWSN\8Y+3:;PS_IIC>@BGEpXKOgƀ藳߽K=>HBRGFI0.P8@-  + +  + + +  +    + + H  # "5<876.+!"" !!    + +  '+,.,.52)    (2-*(&#  !!       + +     C  $+'&%('&')%%&$#$"$#!  6!< ! +  +  '*,,,+~}~}~~}}~}}|}|}|}||}|}|{||}|}|}|{|{{{|}|}~}|}|} ~~}}}~~}}~}~}}~}~ŀ~}|{|}|}|}}}~~~~}~}}~}~}~}~}}}~}}}~~~}~}|}~}~}~}~}~}~}~}~}}}~}~}~}~}~}~ վτۂзʺ`IJӺМߧ򁭀a +!      +    !!  ""! !"""#"!!!""#""##### MXϑ懝񇄃ʀƸΨ +4%!! !!! +!"!!""!! !"!!!##""##"#$##$$"""#"#""##$##"###""#$$%$$%%$%$ %%%&%%%$$%$%$%%&4'&&%$##"""#$%&&&%$$#$$$&'*-/.*'%$###"#$$$%%$###$$$##$%%%$$#$#$###$#"!"!"!"""! "! !! ! ! ! !           +#"!  !!  "%##5NĩӾƼǶDzڧథM`963! %ޝ󀆊Ͼѹ⮌εɺƻꌇ̩ųôcꇖǸұ뀂GFC6-7JIG<+9>>DHHGGCEFFA<9=91)+.+MW/XE<:98:ENIJNOQWVSRTV*)JJW_J <7/379:("%)CX^f&?89-:!O'>$#&?CFKAR[bifd[UH?WXXJ2+-1YUGCJM(3UMJMBG(-3/C*,***.4=(KD:9qr9DF6odem:pr95C?BLTPLKFNTW]BCIHCqh~BQ:ELA.#),)/.,ImFEDDEFEEEFEGGFFGHGFFGHGFGGGHGFFFGGGHHGFG HGHGHGIIHGGHGHGHFGGHIHIIJIIHHIHHIIHHIHIJIJI +HHHIIHHHIHIJI GGIHHIIIHHHI HHHIHHIHHIJIHIHIIHIIHIHJIIIHIHHIIHIJJJIJI HIJIHIIKIIJIJIIJIJHI JIIIJIIHKIKJIIJJIJHIHIIIJIIIKJIIJJIHIJJIJJIJI +JJIIIHIIIHIKJJIHHIIIJIJIJJIJJIHIJIJIHIHIIIJIHIIIHIIHIIJIJIJJJIJIJJIIIJIHHIJIJIJIJKJIJIHJJJIIJJIJIIHIJJIIHJIHIJJJIJJI HIJIJJJIIJIIJIIIJ IJIJIJJIJJJKJ IIJJJIKIIJKIIIJKJKJIJKJJKKJKKLKKKJKKJJKJJKJKKJJJK JJKKLLLKLKLLKKJKKLKLKLMLKLKLLLKLKKJKLLKJKJJJKLMLLKKLK LLKLKKLLKLLKLMLMLMMLMLMLML MMMNMNMMNMLMLMMNMNNNMNNNOOONNNONOOPOOONO NONOONOOOPOQPOPQPQPPPQPQQPQRRQRRRQRSRSRSRSSRRSSSTTTSSTTTSTTSSSTUUTUTUUUTUUUVWUVWVWVWXWXY XYXZYZYXXYZZZYZYZZ[[[ZZ\\[[\\[[\^]]^]]^]^_0^_^_`__`__``_aa`ab```aabcbcbcbccddbbd2322dd223223443343444345444545665665677766678F4P=?C=:69=BABDA=;GGFD>Q0QTOI4FD:<<"'))-% =G(,..:HXXB@KAC@C(())('((&&&'z(((''&$&'(('')'&&$'''KFI())**R*RS*RPPHDEJMM*&C93:BC::420/-.477:;441113120/001110./0//11//023247641/.++.//000.-../1322323443$1356./.+-1123-)-0*'&&&''&$#"""!!"!  h!#$"!#%(,0;8&%')*)(')(()((+,.--.0-/./.,),,)**++.6657997;;???>?> ??>>>==>===>=<<<=<;<;;:;;;:;:;:9:9:9:98998998989877877887878776767667766567767765656556545454334455ijmmnqpmoqpoljklkjhhhi33ghiihfedc`ekynRsm_[VF7-RGHCFEBLC?>;DH@?B?>=>?FFP_97>8@;T_^[`ig:imfht{aO|CnMI79;Xn{Y`bb_^]\[[YXYYYXWXWWYWWWVVXWWWXWVVWVUVVVUVUVVUTUTSTTSTQQaTVXcwqfwZ{DrO$15;#$'(#!" !"!""!$#!"!"#$$&)*!' &$ (6+"2220+%$ K !(2/=-;;:;:;88;94.(#&08CZ`Y,TF9?GHJGDC#$'*'&),+((($!!?<%)&:+,1>GIGGRXH936D>9(5:0% !%'((),+*.51+)-..26BC;4,((+-)##!!+@SQH?<6;<4336I,(,0./320/343./23244355535887567866647;933137774///143332255784,07313**334)-,.5:915706787441..)+.103.'''%"?>=;===@!A:9<!9&/78>'*(/32 ,*%"(# !$'(+*+**((&'-!8:2(*);#*$5& $ *6-0&$5=D5;78A@GK'+,PKIIKNKM')*)MLMLKKL('KEBBA>:96510* $)()('&%$%'('%(,1357*158<;9756?C:@'--,*.2/+)%%'*++E'('+++-)+.-./101/)(&GDG,,G:BA@@?<.)'$&('%$$%)+-.2/.'$#)1,4?''()*+.9::H/-!$20.#!%(-0/.-*+-/,'#%*/1'$$! ',)),,,0/.,,*"#+5+    +#5=D$ +$ ! )(8BIPLIB?6,=EC9$!:8.*/5#8-&+$& ' $)% %JN(00$NGDJ(NL&"+*.6;88649>CG+,2/,QTPd3?,27+Bҟ-ʄʅπЅ|̄̈́8τ%τV̈́τ̀τ7օ݄f.aI33.)'*.42450**7762.@'@?2.,,$%"$,"(12!!%.%#%12200/'"$)+)2  !C  ""$!!$%$#&'&'D*+*&'(''&&())+'%(+))+(())+,39Bӄ9ۄހ!ʅ^O8ȸ٢t^EaVDA?9-(@42//1).,((%)-*)00--0265:@#")$.,?F@>@J^VKR9J+J$   + +   + + +"    + +  +K ""(+8;52%!""#!   +  +(**&/6,)$! ! %30+$" ! %    +   +   +      !"#,(&%()'('('%#%%&#  s!   #)*,-++~}}~}~}|}|} |||}|||}|}|{|}|}|{|{|{{|{{{||}|}~}|}|}~}~}~}}~}~}}|~}|}~}|}|}}~~~~}~}~}~}~}~}~}|}~}~}~}~}~}~}~}~}~}~}~}}}~~}|}~ ׼ڬ񀏎ͮʸ`˩јɳ؊ļð=    + +  + +  +  !   ! !"!"""!"#"!""!"#!"""!#2א脖킅Ͼ׿¬¤lǾһƹ?!!"!!!""!  !!"#"!!"""! !##!!#$#""#$##$#""#$%$$$%%$%%$$%%%$%%%$%&%%%$%$$%&%&'&%&&'%%$$###$%'%$$$%$$%'+-..,(&%#""!"$%%%$$"#$#$$%%$% $%$$#$$#"#""#"""!"""#"""!!"""!!""! !! !! !    !      +  !! !#$*-[QD?8<5iq@GKLKVYT&&!"")Y]_lں߱ק؟ķų`34 + +ÕǨӼ‰ŲǾϽ˾ثé蔓οc焐ԩеHI+O4GLJG@2?=;HIHGEBDDB>=<6.()/.II--SE<@?;:=IKHIKMSVPLRTS*NLHPU5;436;<!! ! 2$'BV]f>IMS05,.P-!=$LEAPIGJZdegefeQPUZO5102/XSGBR`"&ASBH'(,00.LS-'**-.*)+I0d`e:?>:iRU]bnj:99FUXYROKPSM\aADB?sirJ[8FM@2'+()//1bqHFEFFEEEFEFGGFFGHHHGIGGGFGGEFHHGGFFHHGFGHGH GHHHIIIHHGIGHIHHGGHHIHHHGHHHIHIIH GIHHIIIHHIHIHIIHJIJJHIIIHIHHIIJJIJIJIHJHHI HIIHJKIJIJIIHIIIHHIJIIJIIIHIJHHJIJIHIHHIIHIIJIJIIIHJIJHHIIJKIIIJIIJI JJJIIIJIIIJIJJJIJIHIIHHJIIKIHIJJIHIIJIIJIIIJIIIJIJJJKJJJIIJJIJJIJJIJIJIJIIIHIJJKKJIIHIKJHI JIIJIIIJHIHI JJIHIHHIJJKJIJIIHIJJIHJJIIHIIIJIHIHIIIJIIJJJIJIJI +JJIJIJHIHHIHJIJHIJKJIJHIJKJIJIJIJLIJJIIJJKKJJIIJJIJIJIJIJ KKJJIJJJKJKIJKJKJIJKJKLJKKKJKKJKJIJIJJKJKLKKKJKLKLKJKKJKJJKJKKJJKJJJKKKJLLJKJLKLJIKMLK +LKKKLKLKKKLKKLLKLKLJLKLKJJKLLKLJKLKJK LKLLMLKLLMLLMKLKLLKLLKLLKLLLMLMLLNMLMMLLMLMLMMMLMLMMOMNNMLMNMNM LMNNOONOONMNNOPNNOONONNPONPPOPOPQPQPQR QRQRRRQRSRSRTSSRTSRRSTS$UTUTUUVTVUUUTTUUTUWVUVUUUVVVUVWWWVVVWXWWWXXXWXYXXYYXYYXYZZYXYYZ[Z[Z[ZZ[]\[Z[\\\^]]^_]\]]]\^]]^^__^`^^_``aabaababba`bccdbcdcdd2123e232323233343323434 +545554556567667878F9Wn>A@A;<<@?>AA?>HNEEA7E`GIG8M=:=C!%).)"E%G'+))-4AZ/I?LKAAB$IKMML')'('('((''%IL((()))(&%'%((MJHK({+++S**RQMDDMOMH'&A=99?( 8621*+279;;<5433220///13331/./00032023354676442/,,00-.0..,*++-/021356456555860.0.*+-/12+*1*&'(((''%#$#"#"l#$"!#&'*197&#&)((&()**,+++,-..--+)+,+*)('*+,+,*2:9;=@@:8968=@DEHHGKIG=5876986555656<93112457=@BEInVTTUUUTSTVWVUUVUWVW XWXWXXXYYX WWWXYYYXYYXXYXYWXYZYZZXYZZ[ZXYZ[ZZ[[[Z[Z[Z[\[[[ZZZ[[ZY[ZZ\[ZZ\[\\\[[ZZYZZ\\][\\[[\\\[Y[[\\[\\[]^bccbb`]\\\[\\\[\[[[Z[Z[\[[\ ]]\\[\\[Z\[Z YZZZYYZZYYYXYXYXWXXYXWXWVWVUV +UTTUTTTVUUT STTTSSSRRRQRQRPQRRQPPPQPPOPPOOPPQNNNON MNMMNNMLMNMMMLKKLKJLKJKJIJIIHIJIHGHGGGFFFGFEEFGFFFGGFFE+DDDEEEDDDEDDCBBCBBCCBCCBBBCCCBA@AA@A@AAA@AA@?@@??>?>??>??>=<=<=<<;<:;;;<;:;:;;::9:9;: 9::999:::9::9888989988898898988878788876566777666566656656554565554555455454kjklomncsnhi`iiorozZabdhi_zac}|tB9`QLVSB, $'*! $-0(/ '(*+.0..ET[LNQh=CJP]QX^ng\id}VT?FUNC93,[[OIJGQ|~dR[8_aa_\ZZ[WXXYZXWWXXWWXWXWUWWVWXWVVWWWVVWVUUVVVTUUSTTTVTSSTSTTSSPeWVaptkbsbPb)>"#%&#"""#  !#  %-+%.&,$#)&3/!!%"!&*$)$A:7;::989>=>;3*()0Kgk1/XH:?BHG$%%$!&()+)(+)%$ #-/-8)6!?FEEWWA949GA#"-53.%"#$'((*-,+/73.*,102249;0(%%)./$"" %=ZVEA<692.2T-++-31+'+-./15.,35765236433421056898<:=?<5436::960+0110210,6567880*56:8'2665488558:3//2476664/+++-//33+)$#!?=9;=:?!D#?> ("%03<',/---0&..(#i" "'&%#!$##'+,*+*((*32=00+ )*0#("2#$,1++)%F%'0;B9@EILN)*NIHLNJLNP'''NL('MMMKJH(OIGEDDB=<94.%!%'(&x$&''&(-779,5&73789:742?F41 031/&'%'10--++,--*($$&1*%)'" #**'&((,/*'++(#$"+2  + + + + +    27A(!(. $ ("-..2ANMLKMNC?DE=($"!770'6D# '4'&33+@BH*.**O>CGENH(($1><;765==7EI03-*KKWf7D(16-$֩ɀЄπi΄ḡ΀΄̈́Pׄր_A330.)*-22251,+9>850)9R:4."1&$%')1" $4&'!##$$#E#&(%$&0.-)##*-.%   9  "!#!"$&'%%&$&'&')*('+..(%*'(*+(%&'*))-+***+,+).038Jy܄6ӄ`¿ D# һƥگؾkb]X2*D517:+# #*2;4<7J(.41:34-% DHD??D[ǒׅ-WA/5  + + +  9 + + +   + +  1BB4% #!  +    + ('#55% )%   + "73';##+ !# K  +   +    +  +!#%,'&()())*'(&$$%$#(&$"     D   $!  "  +  ()*+-*1~~}~}}~~}~}|}|} |||}}|||}}|}|{|}|}||{{{|{|{|}|~}~}|}|}|}~}~}~}~}~}~~}~}~}}|~}~~}~}|}|{||}~~~}~}~}~}~}~}|}~}~}~}}~}~}~}~}~~}~}~~~}}~~}~}~}~~}~}~ ؉ȄƱ􏒅Ɓű^ո׳炈ȳ͎u      +   + +    !! !"!!"!"##"!"#0ʉ󄃅 ̾ۀ°Iڿɨo" !" ! """!!"#!"!!"! ""!"#""##$# $%$#$###$#$%%$$%%$%$%%$$% +&%%$%$$$%%&%%%&%&&'&'''&&%$$$#$$&&''%&%%&(+-..+(&%#""#$%%&%$#$&%$##$$#"!"!!!#"!""! !   ! !   + "! !&''*[hf԰ǼԽԽ晳ӵϺԱ˦_]13u˅ŊԿʜлƾ󌞡Ϋی˴⊑ʟc䄓􅈋वԸ4BHLOLIKNROIKP()N(GCEF"3354<@ "!!!#&$"  # "%&>XS[L0=O04,*3.07!GEGTQM<=[bdeej_fa]VS>4325.UN9K^m+38FD&+14*M0,(")**((**W<_``i<67gXacbs;;>FYiaVMILVWKPOLPGCsos}H]8EOF2.(JNKVa~GDEFGFHGFFGFGHGHGGFFHGFGHGHHGHGHHHGHIHIIIHHIHHGHGHIHIIHHIHHHIJIIIHHIHIHIIIJI +JJIIHIIIJJIJ IJJIIHIIJIJIJIJHIIHIIIJJJIJJJIJIHIHIJJIJIJIIHIIHHHIHHIJIJIIJIJJIIIJJIIJIIHIIIKJIJIIJIJIJIJIJIIIJJIJIIIJIIJIIJIJKJJJKJJJIJKJJKKJIJKJIJIJIJIJKJIIJIJJIIJI JJJIJJIIHIJ IJIJJJIIIJJIJIIJJJIIJIJKJJIJIIJKJIHKIJJIJIIJIIJJJI!HIJJIJJIIJJJIIHIJJKKJJJIIJIJKJKJIJ IIIJIJJJIIIJIIJJJKKJIJIJKKJJJKJKJKKJKJJKJJJKKJJKIJIJKLKJKKJLKJKJKKKJKLJLKLKLLLKKLKKKJJKKLKJKJKKKJKLKLKLLKLLLMKLLLKLLKLLLKLLKKLKKLKKKLLLKLKJKKJLKLKLMLKKLLKLMLKLLLMLLMMLKLMLMLLMMLMLMMMLNNNMLMMMNMNON LONMNNNONMMNONOPPNONOOPONOOP+OQPPPOOPPPQQPPPQQPPQQPQPQPQPPQRQQRQQQRQRRRQRSRQQSRRRSRRSSSTSTSTTTSTSTUTUTUVUVUVVVWWWVWXYXYYYXYZYYZYZYXYZ[Z[ Z[[ZZZ[Z[[\]\<]\\]^]]]^_^]]]^^^__^]^_``_```^_`a`aaabaaabbbcbccdddccdd2b2112332343334443434454544556556656776678878M9jA>?EAC@@@>>=??CPLGE@Q4LIF<(:69?B'0.*$IGJK(+,/18K[YIGA8=$CCCB%''((())()(&&'L())*)&(((''('('NJJ'**(RQQS+*ROJLLLD>4I&>?97""7560(-58:9995333110..031220///01132333567689642./022122210..-02344545764536<8/../++--//*.,%&-+)($#$&&''$%&(*,*)'&'(&#$%&%,4,%$&())'('*))*+--...,-,()**)('N(,,+-,0:<DGHIKIA7:7789;87795:A71112443;?CFK_GT UUTUUVUUUWWVWVXXWXXYYWWXXXYXXXYZY/ZZYXYXXYYYXZZYZZYZZZ[[ZZZYZYZ[[Z[[\[[\[[\[[[\[\[Z[\\[[Z[\[[ZZZ\[\[\]\2[[[]_accc`]\\\[[[][\][[Z[[\\\[\]\\[\\]]]^]]\]\\[[[ZYYZXYZYZXYZYYZYYZYYZZZXXYYXYXWXXXWWVWWVUVUTVUUTTUUTSRS RRQRRQQRQRRQPQPOPPOONOONOONOONNONMKLLLKKLLKJJJKJJIIJIIJJIJIIIJIHGHGGFGGGFFGGFGFFGFFE DEEDDDEDDCDCBBCCCBAB@A@A@A@?>?>=>===>=<<=< ;;<<<;;<<<;;<;:;:9: +99::9:::9:98999889:989899878778787778767776777676 5665556665556nqstqnmjaXyiXYWQVQKCLigRWf{ay{xmh[\`PXWS^/[VT))NKM*PD=7!-11,('%"0AGJR:AGWf]R8+??IJE@@GRVUUPKC=tiW[kdmd|kRX]_ZYYYXXWXYXXWWXWVWVVWVVUUVUUVTTTSUUTUTS0TTTSxe]U`tlkfwm;7!$(*%"#&'$&%##! !-/)=+1/)"&.$+,!#"!&'" =889<@@6;<= >84204Sjf1/.K<7>G&&$&%&'%((&(*(%! #$+5/>1.05&-+,& ?EJ\S68:Z?HB%&*/62)$#%&'**-/0035633..034236,)($&(/2/)#  "9TQF?74.-E,+))+.32.**,.11-)0.4666457644556.47?=E$MP)TIHJOOKJP*((MLK&L')(''%&IIJFFEBEA<:5 # '()''()'%&s)-2 '@O?A=5278864;9%+.,,+.0.-,*++'%&'+-)#"&(*+.+*,0-((%$*)-*A)>I+))#>0<4(((%$''&'*-32111.*$$+%)1F)*'*,6;<<>?BK!")//..-!#(,.0)*-f+)& )&,,*++.,(&%)*+)&((,'%&(%" %( + + + 3084( &$$-/4,)CMOOJGB?.'&#%85'1>Q%*' !,8+>@A@'$#EDMMGP(&)4?G>6004<@8:8871.QSX]2@&/80!+2/9UЙ¾„`ȄS̄a΄c΄B̄T̄!ф(͈΄˄̄҅@ք)ބ݄ {|<202-/.02020..3C=61.A1?8/&$"$(&0288 ,83%% $%&&((%%1/00.+'()*$% +  + &.""!!$&))&(''&%'')))+/0+'+*+-+-)(*+)+1,++**-,'+07>Nڄ لdل\΅˄ľ&6?u^õȡs_TTUTLE:A[TGHUt\}un_bcXQGCG:@>:E#B<;7552+&$"! '42/5%',5@;2#/-:84327=<:>9:50a^RVa\gk苤]GDJHD=>86*->.4OH((JG9ORRQFCBGMQPMLLMMJKNOR''LIHK8?D@@B?>!!!%%$$#  "! %'9YSOR(1A,,'.-335!6AHSLHL2A_cffggg`YTSC65370WNFFNfe"B*+05_S'-.("&&&(('JQLbaX0>6\U\\UN[:?5\CjYLFFJRZUMJVGHywu}Ji@FKE;4LHQWR{FEFGEEEFFGFGFFGFFFGHHHGGGFGFGGGHFFGGGHHHGHGGHIHGHGHGGHHGHHHIHHHIIJIIHIIHGIHIIHIHIJIIIJJIJ IJHIJJIIJIIJIJ IJIJIIJJKJJJIJI JIIHHIJJIJJJIJIJJIJJIIHIIJIJJIHIJIIIHIHI JJJIIIHIHIHIJIJIIJJKKJIJ IJKJJIIJIJJKIJ KJKJJJIIIJJIJ KIJKKJJIIJJJKJKJIJIIJIIJKJIJJIJJKKKJIIIJJJIJIJIKJIJIIJIIJIIJIKJKJIJJJIJIJJIKIJKJIJIIJKJIIHIIJIIIJJJIJ IIJJHIIIJJJIJIIJJJIJIKKJ/KJJIJJJIIIJJIIIJIJIIJJJIJJKJIJKKIJJKJJJIJIKJJJKJKJJKJJIJJKJKJIIKKKJJKKJKJKJJKJKJJKJKLLKJK JKKKLKKJJJKJK JKKLLKLKKKLJK JKKKLKKLKKLKJKLKLKKLKMLKLLKKLJLLLMLKLLLKLKL KMKKLKKLKLKLML +KLLLKLLMLKLMMKLMMMLMMMLLMLMLNNMLMLMNNNMMNNMNOMMNMNOOONONNOPONNMNOONOPPOPOOOPOOOPO)NOPPQPPOPPOPPQPPPQQPQPRQRQPPQQQPPPQQQPPQRQRRRSSRRQRSSSRRRSSRTTTSSTS TSSSTSTTUTUT UVUVVUVVUVVUVUWVWVWWVXWWXWWXXWWXXXYYXXWXXYXYYXZYWYZZYZZYYZYZY[ZZ[Z[[[\ ]^\\^^]^_]^___]^^```__`^_abab`acabcd +ee22233222343434556567767879898XACAB@DFCD>=<;=@KQKJBj>WKM;&=9?>F,0)'#DAH',0-**0@U.SA10B&$C?E&&'()*))**&&''%(''')))&K(('MIJLN'LIGK(*(MOQR*)PHLPNJC99N#4568;22,b/62.189:;87421000141*)-0.,-/.../012236779:952/220333433232013553213468421384//00/--.0.+)""&0.($#$%&"%*,3301-)*-/...-,,)$#%((')''))&)**+-.-+,+)((%$$%''),-..3:<=>@@BDEEDA>;;=;=CHJJE>764579:<<:889=40030356>?HLPQTTTUTUUVUUVVVUVVVUV WXWXWVVWXWWX YYYWXYYXYYXXYZZYYXYZYZYYZXZYZZ[ZZ[ZZ[ZZY[Z[\[\\\[]]\\\[\[[[\[[[\][#]\]]]\[Z[]\\]]]\\\[\[\\]_bdeca^\][]\]][[\]#\\]]^]^^]^]\]]][ZZ[Z[Z[\[ZZYZYZYZYZYZXYXYYYXYXXYYYXXWXXXYXXWVWWWV WWWVVTVUUVUVU +TTTSSTSTSTS RSRRSSRRSROQPQOOONPPPOPNPPOOOPOON(MNMNMLLLMMMLMLLKKLKKJJLKKJKJJKJKKJIJIIIJHGHGHGGHHFGGFGFGGGHGFEFFE +DDDCBDDDCDC +ACBBCAAABBABAAA@A@@@??@???>???>>??===>>>=>>==<=<=<<;;<;<<;;<<<;:::;;;:;:;:9: +9:999:9:9:989998999:99:9998887898988878 777678868767676765656oqrtttshw~hpKKI3,)*.P.7(*&S\2:E]om[WUKPVQB>Q^WOL%%F&JNOWZ,,+TQS(&'+***E>G"&)-+*LC76*!, $A$/8+!$1CA>K5BB;65<@GQH4PO%P?tqi4:GP8:^]lm[R[^^[[ZYXXWWXWWXW!XWWVVWUWVVWVUUUVUUTUUVUVUTUTTSTSSTaaQ^mjfbko1*AI9)BI/IC) $$%%'%#" " "))B7:70%&,"*$!'(# !  "$%($#'$"""96:BC;BG%'(#?>;9::951121.08993/**,+++262*"7<=:>6:BADCA##"$("4-/*)''+,+,$-*''($"!! ""#&%#''&$$'$#)A/033(/-$0$(()% !*)0G0657*),&?AAF#((''HJLNLLQ)OM'((MJK'('('*'KKIDCEBABB@9.(+,+)**))+'&(()/1@G3/49:8623776:E/_-(,/-/,**+'(*)++&/3,'$%++*11-.//+(($"(/0$(KAJ(*)I9:(1#)''$#&%&'+2:61671*#!3,+3!)()-+68<=@BG?$'--,*/0##,-.,$+0.,()&!)###//23,)(*-/-*))('%&&%'! !' + +  + 5107!#&0/+8$,IOPONkMIB?A4(%#&!:4/07DH" :3-24DB4*$>=?A:2:',!:4@2,)-08@?95?20XW\^^0H,030*",+5<>᮵T¿¿Ą)DŽs˄Jф̀̀΀+΄+̈́πX.!BH621.221411/,-3?D:71Q7I62%%%''+-05!%4+A$'%%')(%#&--/0-&*.-*$) +   !"!" !#&(''*))(&*(')-./-*&),-.,--.,*--1+)()),-,22;CYʄ օۄ7ބބVԇM„+¿&33 θө\Y968$%$$%A"( GJ#'0FTRFC>8:>=3-/1GLs{~jpݙH9DQPOKQO,$'*-$ + + & +   +      !&%"$ '7@>>+  +  +    + %/78"&*/)  ##"#   + + -,$ !$"  "!+      +T    +    %'*+))+*)$#$%%$!  $#- #"     %+-..1*}~}~~}}~~}~}|}|}|}|}|}|} |||{{{|||{|}|{|}|~ƀ~}|}|}|}~}~~}}}~}~~~}~}~}~}~}}~~}|}|}|}~~}~}~~~}}}~}~}|}|}|}|}~~~~~~}~}~}~}~}~}~}~}~}~}~}~}~}~} ~}}~~~}}}~}|}~ +}}}~~~}}}~}~ ǭȍʴǃ̭_̸Ũ녏ጋس䋔񄎞ʝǽ}     + + +    !!  !!  !"!!!! !" "###"# $"###1􈂄Āýƪ߲]􋧹³ܕ?%"!""!"!!!"! !!!"!"!!""!"""#"$%$$$##$%$%%$$$#$&%&%&%$% $%%%&''&&%&%&'&&'&%$$#$%%'(''&&%%%&')+.//,)'&&$%%%&%$$$%%&%%$%%%&''&%%$#$##" ###!"!"##"""!"!!!"! ! !!  !!  !!!  +#!!"!! !'+0XMNۿߔܿû퉈Ĵø-ۭ岆ܮ~D; 1Ɲ۫̽󁀃Լ¹óο̸І⃍󑣨Ȉմg䆊Ě:HEE?AAEFF8DID=AFIB<;9:53./2*BI')H7#KQUWTJFFNTTQOLMMLOQOJINLKJD?+(O''GA@!!#$%&&$! !!,&*'.POGI(&A))=&')5/88CGLN7B80JYcfgnf_QK_K7320_YQICKX5b3KEMZXIF41-*@<''()NC>Aec7;B;j^[XVV`8;:PTFYOKLGJTSPGF@~x~DCC:BEC@@7HGP[eHEEFEEEFGFGFFFGFFFGFGHGGGFGGHGGHHGFHHHGHGIHGGHGHHGIHJIHIIHIHIHIIJHIHIHIJIJJIIJIIJJIIJJIJJJIJJJIJIJJKJJJKJIIJIIJJIIJIIJIJIIIJIIIJIJJIJIJKJJIIIJIJIIIJIJJIIIJIJIIJJJIJKIJIJKJIJJKKJKJJJKKJJJIJJJIIJJJIJKJIJIJ IIIJJJKKKJKJKKKJJIJIIJJIIJKJKKJKJKKJJJIIJIJJJKKJIJIJ IJJJKJIIJJKJIJIIIJJJIIIJKKJIIJKJIIJKJKJIJ IJJJIIKJIIJIJIKJJIHJIJIJKJKKJKKKJIJJJIJIJ IIJIJKKJJKJIJ +KJJJKJJKJJKJKJJIKJKJKKKJ KKKJJKKKLKJKLKKKJJKLLLKKKJKKLKKKLLKLKKLLKKLKLKKJLKLKKLKLLLJLKLKLMLKLKLKLKLMLMLKLMLMLMLML MLLLNLLMMNNNMNMLMNMNMNONNNMMONOOMMNONONMMNOOPOPO POOOPOPOOOPPOOOPPQQPPPQQQPPQRQQPQPQQRQ'RQQRQRRQRRSRRSRRRSRRSSTTSTTSSTTTSTSTTUSTUTUVUVWWVUUWWVWVWWVVWWWXWWXWWXXXYXXWX:YYXYXXYXX[ZYZZYYY[Z[ZZ[[\\[\[[[\]\\[\]\[\\]]\\^]^^^_^]_^``_/```^``_`_```baabbabbbabcbccdddcccdcd22e22fef332345456 +766767766678M:H|GCEA@FGHGB=9;?@@BDE4DCA@>>==@EKJD:54489;;;<=;99842034465;EMRUPYUUVUVUUUVWVWWWXYXXXWWXWXYXYXYZZZYYZYZ[[Z[ZYZ[ZZZYZ[[Z[[\\\[\[[[\[\]\\]]\\]]\[\\[\]]\[Z\]\]^]]]\^\]`beeea_]\^][\\]]]\\[]^]^\]\\\^] +\\]\[[[Z[\[ZZ[[Z[[[Z[[[ZZYZYYYZYYXWXYXXXYYXXXWXXXWWVWWVUV UUUVUUUTUUUTTSTSTSRRRSRRQQRQQRRQQQPPQPPQQPPOPONONNNMNMNML KKKLLLKKKLKKKJIIJIHGHGHGFGFFGFGFFEFEDEEDCDCDDCCCBBCCBABAA@@A @@A@@???@?>??>>>==>===<=<;;<<;;<;;<;;;:;:;:;:::;:;:;:;:;:;;9:;:9:9::9:9:98787877889878767667pprtqrplg`Y}kᡁmhp~|trwNYEKiWIZR:2*;2B?\WU334;WNMC?323CCBALW)),-.-+TTW-//./,TPOTU+)'&'(('+,'$BD(MK)HDIE?79EJDD945=ISNDGT?H;78;*#6#"6<.'=28SX8Kt:NIVH6Gg==n_^aovSZ]][YZYXXYXXWWWXVXWWWVWVUTUVUUTVSTTUUTUUUWbO^k`gqorE"IwL\1e2-EF#&%%%$"!!##$! #$!!">60%#.$(& #'$  !$&'(&,2/.1,#9?>>AA%''#?AED=7F^c310R=>>$'%&%##" !"%&$"73)-&>448#)/1.,))&#! )\T;78=JC8*.//-)'''(,,--//-/10,+/432447??4./)&()-31*&#""#2IMD34,+*-,+*--3,..-++,)++,(.1133034421559;<><>@?:651452202/5//36,3><=<6986555-0/026?BB?=<;:60/3437;<4++-,*,+/22-">==:<7:?;<< $! !+'@77%))&%'')*'+(&$''#$%"!"!"#'*)&('&'%)(#))122>4.2"&$6& (%8*57,'*++% %"%'&&OKKKJOR(OMO'&''&'&%&'**)LJFBCE?BDA8$+-.-+,*'+,(('',6AI@CC+"-))')+/.((.(#(-/+&&$$##*-364,)*/2/-+*()'(('#!"! !%!  +//*/ "#&&*2$*) 6AMNMpPK?9M=*#""B=73/5=%E&7#-78./"!0)(-JC(&&%GA>;==F$'&3614-,112:<93/-]Y`5h70',/-,/%),6C^ᚵ¿ÿ˅˄]΄̀Ѐ ̄B΄:τ΄4̄̄̄3˄̈́̅π݅Q/>44.-23674/+-1<=/5*V>I;1/*+0*.2,+/ $(%$%&'&%$%),&)./)!$ '       >:%$&''')*)*+*.21-('(,0230//--.1/*(&(*,.,/6=F`߀׀' ^.Ѿƨjckyqh^f?I4=WG;JC0("2'87NOG(''+>79..#"#.,,,4;98; 96599+/63//4/+%$-0-/& "&-3-'*5(/*''!"%)%+<<(4S'2/>2$1E*+RHOb䋣N7BNIQYVY1)R09 E&"  P    + + +  +    !#"! $&$#0>B" . + + + + +    + + + 66#!#&,' "#(% *,$G!$#%"##""!!     + + +     + +  &&)*)*,*))g%%  !! %     +  + + +  "&)+,,~}}~~}|}}|||}|} +|||}}|}}||}|}|}|}|}|{|{|}|{{{|{||}|}}~}|}|}~}}}~}~}~~~}~}}|}~~~}|}|}~}~}~}}~}}~}|}}||}}|}}}~}~}~~~~~}}~}~}~}~}~}~}~}~}~}~}|}~}~}~}}}~}~}~}}~~}~ ņぉ΃_μ뉒􉕓Ӝ̆څʶޥG   + &   !! !  "! !""! !""!!"""!!!#""###$###$"#####2Ξۼ舃DZ¾䰞eմٕJ$""!!!"!!""!!"!!""! !" #""#"""!!#$#$#$#$%&$#$$&%&''%%%&&$$%%%&''&'%&&&'&',('''&'&%%%$#$$$%'()''%%%$$&()-//0-)&&%%$$$%%&%%%&&%%$$$%''&&&%$%$#$##$$#$# """##$#""!!#"!"!!"!"!" !!! !! !!  !!!   !   +! %(RMSKƯʼ·ɾƾဈƢ/鑹Я뷕H@#لվԌ˛݀¸»݅􂍒晭Թv񌜈ǬLGA7:BDGF@6FC:>BED996=;5::2+IHJ)+P/CKKMOLIMTURQQMMMNRSRNIIHDGGIC,***(II#$$#"%&# +&&)%DOCC.4G#"56ED+6/BB:DLGI[16-N(-N-+**E:ga:LD4:=mcY\Y;9:EV8P@[WSOLMKJK9f{~CGSZ>EB<:D4DM.:qFFEEEFEFFFGGFGFFFGFGHGHGGGFGGGHIHGHHHGGHHGHGHIHIHIHIHHHGHHHIHI +HHIHIIHIJIJIHIIIJIHIIJIIJJJKJIJIJIIJIJJIKJIKJIIJJJKKJKIIJIJI JKJKIJJJIJ KJJJKJJJIIIJ IJJJIIJJIJ IHIIIJKJIJJKJIJJIJIJIJIJIIJJLJKJKIJKKJKJJIJKJIJIJJJKJKJJKKLKJKJ IIKJJJKKJKJK%JKJJIIJJIJJIJJIJKKJIJIJJJIIJJKJIIKKIKJKKJJIJIJJJKKJIJJKJKJKKIIIJJJIIJJKJKJKJKJKJKJIJIJIJKJJIKJJKJJJKJKKKJJKJJIKKKJJJIJIJKJKKKJIKJIJJKKHIJJJKJKJJKKKJKJJIKJKKJ KKKJKKKJKJKJJJKLKKJKJLKJKIIKJKJJJKKKJKKKJKLLKKLKKJLKLKLKLKKKLLKLKLKLLKJJJLKLKLMMLKLKLLKLKLKLLMLMLMLLLKLKLKLKLKLMLLLKKLLLMMLNLMMLKLLMMMLMLMLMMLLMNMMNMNMNMMNNMLMMMNNOONMNNNONNNONPOPNONO PPOPNNNOOOPOPQPQ PQQQRPOPQRRQRSRRSSRRSRSSRTSRRRSTTTSSSUTTUSSTUUTSTTTUUTTUVVUUVUVUUVVUVVW +VVWWWVVWWWX4WXYWXXXYZYYZYYYXYZYZ[ZYZYZYZZZ[[ZZ\\Z\[\\\[]\]]]\]\]\&^_]^^`]^__^___``__`a_`__abaaac`acaccbcbddbdecfffd22d3eef3ge33223454657766676 +766778877878878e9gFEGD?AHLLI?779BF<5lYR-C@>GFD<8>ADC+'&"DFFHJ',./>UM:5&%@'MII'('&**('(('('%''(''(&JK'(LMMLIHHIMOMORT+*)MIINPLC?? >?>>?>?>>??=>=<===<= <<<;<<<;;<;<;<;;;:;<;:<;:;:;:;;:;: +9::9::9:99: ;:999::98899898987788787787877766776789rsyxsngdt^yxoeec`W_dWU[^g<8_ofm\OZa\lpUFr;A:|ON<506C`N=6@FMY30+R*RPOMNNT\ZXRNORTQR[./01-Q)+OOSPKII$ECEF<),9EFKEH()),,,J885-*/4930) '*%<=>/9KO[OOQQn~xvbnsRUho~hW]\\\ZYYWVWXXWVUUUVVVUWVUUUVUVUUTTUTSTUUTTUTUSSRaRc\gmzxyE(#KqZ6C56-7!!%&#$" #)+'$ ! "$###"# .$.&-#!#%'(',550334' 54;@K%! ?D&(L@9J_bc010'B:"%&$!"""$%%"" /"%&?437#(-/-,++)'$&#+XH;8;J?9+)//,*+**-.../002362/,,56988?A6.))%&',,)'$%$%%&0J(A8(.)*-,,/.50+.-..%'0*.*&./0100.**,10579:;?GG@;669::820/0/-/3*-88=956;<88;;95.*2:?>=<;;;:423779;;2,,.+*+++18* >@>99=>86'*90<6(>@D,-+*&&$&$)()&""&$&$%%#""!"')'"&($#%)('*,;!;/8;5!4$# !*'!12;3%')())%!$%%&&%'LJKKQ*MNMKL&(&N&&KHM)*)MMKDAFE@@?0*)+*,+*(()''&(&6GL=98::7679?C=:U0*' $,//,#('#*--&%"$!#""!"&$)-33.,/440/,*))(+-+%!!!&$!  &-&-# "*((..(/#*.=<533;&',9'27!5="$+'.(IG,1,!&(MF?B8)%%-8"2-412436579-J`e38\>@*.-()3!'1,ޭ¿?ʅ#˄=τфτe΄;ΰЄL҆*̈́ +΄Ѕ3τ/΄πހs?562+/58;7/*+.73RKMN%%'2'7AIF@ADHP][WSTMHKIPUXTOMKFQA-...-,-//--,+*'&$#! !" .$#(,7E7;?CH:7pJ-OK:IEA@AACD!! =:7598:::?==<<<=>>=?>==??<<::;:5464179767;:8;:;8765//..254244593.-.03213117:64,)+)%'+('$$%&+0223640.1./02231//2599+*+-,)))**)*)*+L)(# """!"##$%%OKN+8:???>=>?>>??>=>=<<==<=<;<;<; :::;;:;;:;::;:;:;:9:::99::9 ::99:9998898787898887887888999::ttuumblzǟ[UVRWNBd`ZVQZhZ\XXWXWYarG`[d]YCZ\dhMNQ>5[ZgXUZ`4;7=745=DF(,*PNIFECCEBBEBEFKIDCDDKNKGLLR\SPQWTPOPPRQOMG?BCB=?DKOLORSI>FFA8=45D$+&D?776*('0-..4"6?G^8@Q_bma8XBNWc[Ta|NXZ]]^]ZYWVVVUVVUVUSTTTUTTTUSk`V^mrtxoXD$Bg\G/=Z/ &6) &'$"$$"%,1)'#"* &$##"! <86#)%%()*,48431-)&!>;8<(*#?=!&'('EG^e02240+H;! !"#"$%$"!! !('=/09 $*1-*&+-(%'%"*P?9BJA7,"!+33/-/./10213546;<30+.8?>=A?60-**().0-(&%$$)0+8I$J++*'()),/13./1+-- )++-'&1440.,-,.20/4668:BF@:55;9;=5-55321548927:465999=>?;:699::698;;977789==92-'$**)'*09)!!>@B===99:$+).2@'@68@./.-**'##*(+(#%('%#$'&"""!"%&%$(%')*$('#"+8,#?,+4-!#! &&&:35*((&$"!&%$&##&'&'&POQPJMNMM'(MKLLJJ(('MNLJFFIIB>:"#**(&')('('&%(*;*I?667:;966:AEF*(-)')+,01+',*(()P+A$--,)').30.+,(')*"%(1-'()*12-&<(32";7&)-3233..++..5 ;0&" .878!*1/,067>@CEJF)$(-1-(#& !'*+'$ ')#$#"'&%()+2<95//)&('*,/+(%",)a +   '!*6% #,).*$+)(',+;NPOB:(' 621369;0O[[c:>D&-3-%%2 #%q¿RȄ΅Z΄τЀOф ΄̈́v̈́0̈́I΄ τ5΄фӀ#! OI983./37795.,/49>0.W;52$0+(#'/% -(#+0.,0g $ $!"$#('&&%#$#'%&&%##(*+,1,*('%',,( #,(" CDG$*''(&'''&'%%'((&%())+./4/,)*+-.244/,0///1,*()*+-/4:Cq +Հ [ !˵͏Ǽ깊SLKGF<5TQQHFN[NOONLMLMXa;TIMDB4HHQV;+$@9+'9 + +    + +    %-?C !!!#  +  2    3'"&,% !$&*+$ &#  %'" !!!!            +   +    ))--(*)')(&&'&&%(&%!!#$ '  Q     +  +  $%'&,~}~}|}|}|}|}|}|||}|{|}|{|}|~~}|}|}~}}~}~~}~}~~~}~}~}~~}~}~}~}}|}~~~}}}|}|}|}~}~}|}~}~~~}~}~}~~~}}~}~}~}~}|}~}~}~~~}}}~}~}~}~}~}~}~}~}~}~}~}~}~ ˵ؒФ\ƸϮ򒗔ԧǸ턧Ԡꇧԏ       +       !! ! ! !!"!! %!"!!! ! !!#"###$#"!"!!#"##$##$##$ +-钤›Шބ÷¼ĺѶR􈡰ؗB$"!""!!"""#"!""!"""#"#"#""#"##$$#$%$% +&&%$$&&%&%$&%%&'&%&&&((&&''&&&'&'&''()'#&%$%%$%%'')(&&%%%&&(+.00/+)''&&$$%%&%&&&'('&&%$###$$%%$#"# +""!#$$##"#"#"! !!""" ! !!"! !  !    "! #&()QNX϶ǾϾ냌̸悠ɳU뀃ꁆͺ脓ٽH9.+7٬ǘ蔨Վ֤؛킆񀋐ȷȼ偒Ď琊򂛝aنC9/8CHIGFDC>=A@C>:982--68GJFQ%%C,#1:@KKB?AHQYZWWVPIJGHMTWXPKIIEBGV9412224644653220//-+)(&%#! (..=9;FJI550+6G.2?BLFE5<<6BEB5Q]]_UQYRPB/`b`UHB@Q_:8=HS3.e:(O1,00>8I>=236ARG@>@A6da[ie3?Q`YLZ6:5M?=NI@szyk}@PY8BF>5g@7?=+)N=OGA@GC38EB@@BMHCBL*&*/89%<%=48'>BHKNLLLK&&((LK'&HFHA?DL'''MGDG'NJ&(PPQOT,-,UPMLOOIFJLJF@CHQ)(I=@>BDCE###"""!"""#CB@ !!@> !!! A@A?;??<=>>>==<<><:9;===?=:762025435674//.)')*+&-4330)+-*)/5//+*+-9431232013432320.,)+-46-*,--+**+,,,+**'('" !""!!#"$%$LJJO.59??>?>?>??==>>=<=<=<=<<=<;<;<<;;<;;<<;;;<;<;<<:;:;:::9: 9:::999:99898989878899888989:9tvtwtsmbYynŌlwrfsKB<5:8FYeY8@OB7VT\`YT`]4HL[TBHHOW1WMKKKJIIDACC;5FM\^V[.+U+V++SQQTRPMEII>>>:?DLGI(&))''(,***)%('MM(&1- "-B45L5;/S\a^XH[\_j]m^a^[YWVUUVXUVUTUUTUTTUSTTTUTTUTUU`kuuqy|~KA"2c`t4=K(,|A "##!$'"$29+(("!/0!$"!!%&#!%% #(-+2:4/-.*%$##@=&*H8#&**'***043112330Q;: "#"&(%"!#""#!#&%>/18&,-)##'##(% !&RE:GJC;3'462.123137:977::?930-.:EAC@93/-)*).23/*)('*.+(7$./+(&%&(!#-3587500%'(+/#'2/-+-388865::86;AA2?:8457;>?><=@B>;967897887:;9<>:31.'*&%*10#"!A@?@AA54 '/&-3$*:334-/,&"#)&('"%%'#"#$"!"!!#$##"+&%),$%#&$1(*3+<%46-$!$$1"/-&'&# !$&%!"%''(&'QPOM(('%%&H&(''%'(OMJHGHIMNG?7')+*((+,,+'()/C1+=7665 8868:HDB6&EEA:2,+6@)*-6>&&D*6"#)%##&+3.'#&' DLCKI&.9?;08 !1),;3,SdiYd2:@(./*%M-)&"(q¿ʄ̀MЄ-фπ6τsτ΀cބ40@;4/0556:;5,/22=5.2,9,8,('//$)/+)%(41-,2"#%%&&(&$$##!&($!#'&(*+**-.-*()($#'(&# "%-'  !    ?CFJ)++***+,+)('''%'(%')))--24/-]1+',341-.1.020-**)*+-28Dg2^ڄ؄<̈́h¿G8);ĩ֗ēnoe\lvDB<155;90IDEOG=GQXMTY^^TWeVDA*25*7FI>*5C6-GGNOJJSR*34<7,1048921225653022,/784/189,%0)$)0+'&,249:9975556675021..,)-/61./,'!"1!&6:>=<3CEPq·FM]`af`b8&::I ),O&      + + +  + +  + #! * + +  + +  + m     +  + -*!-.'  +"%*+&    ~  " !$$!!!!!!! ""     +     +   +   +   )+*)$%'&$%#!$&!! C    + +  +  +  $(&*%"~}~}|}|}|}||}|}|}}|}}|}|{|}|{|}|}}~}|}~}~}}}~}~}}~~}~}~}}~~}~}~}~}~}~}|}|}~~~}}|}|}|}~}~~~}~~}~}}~~}|}~}~~~}~}}~~}}~}~}~}~}~}}~~}~}~}~}~}~}~ +}~~~}}~~~}~}}}~~}~}~ ô⸧`ķݷ܁׶ۼހԲݏ򓰰J   &         !!  ! !"! "! !!""!#"!"#"## J-W읪֜ͨ󀈘ЀξĬſýêѨҒ5$!!!"##"!!###$#"#"#"#""#"$#$$$#$%$#$$%$%%%$%%%&%$%$&&&%%$$%&%%&'''&&'('&'&'''())(((''&%&%&'()(('&&&'(*./00,*(''&%%&%&&&%%$%%%&&'&''&&%$%$%$#$#$##$$"#"!""!"!"! """!!! !! !  + + +#!!$)+)(QEOQȿпaý􅏓ŏ鿩֭՝Ьnn66ܘԞǤ䥕đԵȮ焼μ˒e톇?,1;EJIDB?>=A>A;<>:0,.04N/4UO(J)$.5;@DIMHFJSWSRUSMIJJIKNRXYSOLKIHP@8=:889:8:;:88664431/.,+('$!$(99<;;CFR-*'+4<'J>8ID8124%5HI>6\DOZYWTNI;3ea\LDELU29:=16@*5,FR41-04>C5.07API?6<<01<_[3:KY[XSWXVMB;>Cm\j{GD[6B?6[e?=>EKFJ%%&&$%&%$""#"""!!"!!""!!!"!! !! ??> !!A@@?@@@>=@@===<9742393-.1346989473-3@3)()+1552002564633220///0321.-,.-6:?<2/.-.-./.-,)$#"  G!""#CC"##%IIFG,145;>@BCCDGHJJGGHGFFCBGCEH:01553327<=>?;899::;:99:ADGGQYVWVVVWWWXWXXYXXYXYZZXYZZZYZZZ[[Z[[[Z [[[\\[\\\][\]\\[\\]^][\\]]\\]]]^]^^]]^]^]^]^___^_^]]]^_^^^]^^^]^_^^^__^_`beffea`_^^]^]_^]]^]]^ ]^^^_^___``_ +^_^^]]\]]]\ [\\[[\[[[\\[=\\\[[Z[[ZZZYZZYZZ[ZZYXYYXYYXWXYZYXXXWWVWXWVVWVWVVVUVVVWVVUUVVUTSSTTTS RSSRSSRRRSRRQPQQPQPPPOPOPOOPPPOOONMNOMLLLMKKLLLKKLKLLKJJJIJIJIJIIH IIIHHHGIGGHGFGFGFEDEDCBAAABA @AA?@@A@A@??@@??@>?@??>???> ==>=>>===>=<<=;===;<;;;<;;<;;;<;;<;<;<;:;<;;:;:9:9::9::988899889::;yzurmc[TqzwwjYUXXZRM>IK?==;ING:@7>ACYG@AC@KW[b`ZV+OPRR22^^P[2/IQU30`7h[be^\`_d@BDMPROJKQRKQRWQQNGHFIHFJHEAAJSA>BPIMFD?<7^4,.;::Ddi]ZTRLJQTQLQMWXPLHHLMLHMN(++**,,*,.+*+*))*+($>6.((AE*%,27TP9548I]Hg[slXdP[\ZXXWWVUUTUUVUVTTUUTUTUTTUTTUUTUS{k}xjrK1%-ScqVG\T5Cg, !!""#$"!,8/*,$"$!5'*./ "!  !#"!#(&0=710.)$" !#%(++'(,280--.1991024543-MC #&&&$! !#%%# !#:/37&)*%"#"%'"'($C8@EE@<6'264322127@C;8;=@<20.,0;CGE;500./1/5230..++..+)B/1)'$$'++#$27769781 '*-/0%&''(+37:899<>?=CFD>49787573-/003-6=>>=.<:90798:=<8<@>>?>:7:;83437<;;<=844-&'(+++)!AAA?@DC>9: '*!3=" 6/29,/,**'$#$+'%'"#%'&#"= "" %$,'$'.&$'/75?/ -0)  #):%,&%'&#   $$%())(&()(()P)'&()'')()&IOLNKJHGHHKIH<+--,,**+++()1C.+C:7:987779=@ADF',*+-1./.-(*,()++*)*)# ,I+++*++(FC>?(42+(FJ+38/"(4/++.../9-'+0.-/-.031+*++ 2+# -857$2:207<>@ED?B##+.,&#"!!%#(%&& !,-'!  %)+)*.540021,)(&%%(*/1-*&#!!0&!'%##"# !  +  #'$%.5; + ((#1/04.%1:CEEEAp+,;<=A'*++./.-,+++)))(')(((''.,.63.0561.,.30130-033/-+)*.17Cc݄oˀ@1ͽδ⻠qZNLIOFE;BG;997A@;04.459M?87:9DQSXVSO'EKOH($DI@K'#8C<%&N-ULSRPNTTT435769734;;68:<=?=9;9:8477534461/('#" !+().AE<<;:668996;5=@:954565430&!-/10"!!&5+D2IcInjhҗχe]`X]tvt:!39D/.94!0;    + + + + + +  +  #  !# !* + + + + +   + &")-*$ "(+&#    ! ! #$%"%'&" !!  !!!   +      + + + +     + +y +  + + + + + $%('&$#!"### E    +   + +  $%&)&#%~}~}|}|}||}|}|}|{|{|}|}|~À~}~}|}~}~}~~}~}~~~}~}~}~}}}~~~}|}|}~}|}|}|}|}}|}|}~}|}}~~ ~~~~~~~~}~}~}~}~}~}}~~}~}~}~}~}~}~}~}}~~}}~}~}~ ӭ︸ʺø𚵶ڦ҆[øĤĺ怣ٸ  +      +          ! " !!!  !""!"#! + !"!!#"##"### /†¶ЄŀϻȼƽȼY􀓦µ֬͏/!!!"#"#"###$#$###$$###"###"#$#$$%%$$%&%%&&$$$%&&%$%&%%&%%&'&&'('&&(('''&&&'&&'&&&'& ''&'())())'&2'%%&''(('('&&&'(+-0//,)'&&$$%%&&'&&&'&&&%%$%&&'(''%$%$%0$"#$#$$##$%$$$%$$#""###"""##! !"###"#""!"""!!"""!"!  !!! !      &$ $*`ݿ􀇉à炀eһᾠӌ܂C;/ޥ򭉆ħŝԽѸꍠ폐ؿ셖ܽf臊˽6,6AHKD>=@=BG?=7@=;;:8765532//-*'&%*/>?:APO<%$&*.4H/9EV=)K)0%;LJ9_67\6-*2631E/;F6-.6JKD?B=70?6W4?W^\\Z\TG?>=@0JHJNHEG=,29EJADEFFEEK(,)(.&,&=53FDGA=<@IM&#%$')'JG%N)'ICJLKHBCGILMM&ILLLN--/.-+TSRNKHIGF@BDIJNW,P@ >>DKKN(''('%'&%&&&$#"#!!!#!" ! !!"""![?@@@A!?>??>@B@?A=9777:=>B""A>@93-;8/-010/0/.'$!  "#i!"""$HID#*338758>ACDEGGGHGFEEHGHCCCHI=6049995369<:7788:==<97<@CFIHZTVUVWXWWXXWXYYXXYYYZZYYYXYYYXZZ[[XZYYZ[ \Z[Z[[[Z[Z[[\[\]\]^]\\]^^_^]^_^^^_^_^^]^_^^]^^^_^^_``__^^]^_`_]^^]]^^`_ ``bdffdb`_^^]^ _^^`__^_^^__`__^^]^^^]]]\\]]^\\\]\][[\ [\[\\[[\\[[\[#\[[[Y[ZYZYYZYYYZZYYXZXWWWXXWWWVWVVWV$UUVVVUVVUUUTTTUTSSTTSSSRSSSRSRSSRSSRQRQRQQQPOPPPOOPPONMMNMNMLMLMKLLLKLLLKLLJKKJ IJJJHHIHIHIIHG FFFGFFFGFGFEGEFEEFFEDEDEDDDEDEDDCBBCCCBCCBBAABBA&@BBA@AA@@@?AA?@@@?@??@@?@??>?>?>?>?>?>=>==<===<=<=<;<;<;;<<;<;<;<; ::;:;:;:::9:;:<:;:9:99:998999::;={{{wmVƭrxfin^PKLG@O\RQO@FB@7o8::UpUK\TCD?97k;o__`X/:1;KC<0;UG:+OR;,./18'CW0]/-1\ZS]97c6FHFBB@@BGKXNJFAB@:?BDqBE>9746<<CNX\\d`IEMHQKF>CRQSUX,)%(())*(*,-..+,+'=06;227-G:;$  !"#!"74-+&%%%"2#(./!! "%! !"!!'13362+'" #&)-.+,-48?8-,1<=511355640.)@!#$#"!$%$$ 7204 #')#"#$$$+('.'?>=FD@>C,"& ,48;7115?FA==?!A:41000AHCD:335132464211.,/1/,9)5,'&(*-./#*357888:1'&''$$!"(,.2332379;?@DDFA5;;==285/2./316==9<447<389/8=>;;>>?=9;97:;9102258<==941-*,,('& ;>CADEDA?!#GD<=&?72/3@0.**)!#%%-(#(%"$$"!! 93'()%&)/+ 43275"/-% #++'"$%#""  !9?#''**$(,,+**()++*++(*'?LILMKJJFEEDB3#,..+)&&%'((1L.&?78>>:9:99:=BDC'++)a)*/4/.,(.+)((*)*--)#&()*+*-*)(%J;:<$#;SLC.,<4D+>7.'--371>90)',-+-/..40'&+""6)#09#%9?89<>9@FEB?&..'! #"''&'%(# "%1%  "%.//4761-1/-***''&(,.//$#%%!+-$%%"#$$##$!  + +))%-;;# + + + $/<+"33(%,8FFJC?7*%DF<8779C)+%(&1.B(%"$#(+%"%##(% $&9"+=@:<<=7-+...+@HUbhmlb2I*2(B?E04)(s ¿ƄĀ̀+҆sτ$ЄфdЄЄQцЀӀH422468:;>?<51*-=;90'A<;<500(#),.+.00/117"$)$"'&"!&" %)(&#%&'('(%#(('*.-,*'&%$# "&'*.+ "##   _     ~598#))--)+///-.,+)**)'()()(+,/40105;;82-,,/0.+-.120-++/04>_܄€½γγglXZdVJHID>?=?=>;9:976331-* 0*A6DBCGW?/## "/9?7DNT:B>%=/GTL9;ANRYROJ=7ehTBAIV4:633/9?3:81/1:4N(-7EC?8:@DAEJ@26<\->^2.Z\^QBAEG=w`hhxyKAO9@@f__5EH8{aHFFGGHHHGGGHGHHGGGHHGHIHIHIJIJ-IJJJIJJJKJIIIJIJJIJKJJJIIIJJIIJKJJJKKKJKKKJJJKJJJKLK JJKKJJKJJKKJK +JLKKKLKKKJKJKLKKJKJK#JJJKKJKKKLKKKJKKJKKJKLKKKJKKKLKKKJKJKJKJKJKKLKKJKLKJKLK LKLLKKLKLLKKLK +LLKKKJKKKLKJKLLLKJKLLKKJKKKJKJKKKLKJKKKLKJLKKKJKJJKJKJKKKJJKLKJKKJKLJKLKLK JKJKKJJJKKLJKJKKLJKJKJJJKKLKJLKKLKKJJKKLKKJKKKJKLKLKJKLKJKJKLKJJKLKKKLLKMKKLKKLLKLLKKLLLK +LMKLKLLLKKLKKKLKLKKLKLKKLMLMLLML +MLMLLMLLLKLMMMLMLLKLLMMLMKLLNMLMMMLMNMNNONM NMMMLMMNNMLLMLM LMLMMNMNMMMNMLMNMNONONOPONO POOPPOOPPPOPOPOQRQPQRPQQPRQQRRQRQSRQQRRRQQR)SRSRSRRRSSRSSRTSSRSSQRRSSSTTSTTTSTTUUVUUTUTVVTUTUVVWWWV WWWVVWWWXXWWXWXYXYYXYXXXZYZ[Z[[Z[\\\[\]\]^__]_`_`a__``a +ba`aabdccacdcdfe 222332333434345 666555666776767 888778788988988987@l<=>>AI''%(&&'%&%%LM''JIJEGIKHJJLLIHKJLQ-.,T++TPNMMJJMGBBDFJLTWUE::=DLN(()(''('(''(&' &'%&%%&%$$$#"!"! "!!!"!"!!"!! !!! >? ? "">AAA??>>!"#$<415@C82-27<<;631,(+)(*,/4520+*+0241--1353-/1/000-,*&#$# ###""###$%%#JG$*),39A><785?=<>@CFGkYWVVWXYXYXYYYXYZZYZ[ZZYZZZYYZZZ[Z["\[\[Z][[[]]\\]\\]\\]\]\]^\\^]]]^^]^_^^^_^_^__^_^__^^__^_^^_^___`_/`a_a``_^^___`cffgfc``__]^_^^_^^^]_^`__`___``aaa`_^ ]\]]]\]]]\]\Z\[\\[\[\[Z[ZY ZZYYZYYZZZYXWXXXWWVWWVVVUVUVWVUUUTUTUTSTSSTSRSSRSRRQRQQPPPQPQPOP OPOONMNNNMMMNMMMKLMLKKLLKJKKJJKJKJIIHIIIHIHGFFGF EEDDEEEDDDED CDDCDCCCBBCCBABBABAB@@@A@?@?@? >???>>>??>=>>>=<=<=<<=<==<;<=<<=<=<;<;<;:;;::;:;:::9:9:;;<<{{uk[{]td^Xhqr^RGJODC=niAJ7VE=?74@8CJ><9877edb26?86vfabdga1018ALC?98<69`1a28<=EI:@HNLOXPDPF798MXOR`hKB@:CWQEO1381+-+.1.10.)=3@G4CK'J>?=2+&>0??+218DS.VB9.ZfwVY[YYXXVUVTUTUTUTUVSQsn~qS!&$kVRUS@_1;4 !"#$$#"!+42)&&'(%!4(*.. $#'(." !! "! !%""$"! "!%(,.-,-1592-/1982(+34345300-'>9 = """!#!15!#&#"&*%% &.30#7>>@@BA<8<;77=903347<><95113.)%&#;;@@EGFB=?=??>"& 85212"0-+,)" #')%(*&$&%  A!69($#%'+66&.2126,*)$/(# ,5#,$ $" #% 6;@&(*,()-/.,*A,-**+&1HJLKIKLHFC@@*#,,*('&$&&(5(.'=347;><<;::<>DCI-+*(*./301/..)'S&&+-)$$%'+)+,,-&%#=#A "2LE'.28)M883/.22662"?<4((-,,*),01)'.!$7)"-<#$8@=::9=CFB>;1)HK=204@%,)'&$-2&*)&! (#3!-/(#! &.$(;*A"8=@6./25-YPST[Wa618)-0MHD$36+|¿ƄDŽ5΄=І^Ԅ\ЄW҄҅р0ӄ`τф_Ն"##0 {/16:89;>=?>1':6<8?1 5=<1++#$(*-+/374$" !%&%&%&#%&()('''#$(((,..,+**&&'%!!!%'),/.%!$# +   ,    s31  $'**,)*+...0/---,+))()),-26..04=@@;62/--*(')+111/./04>Z߄ހDŽa¿¿tְ̮֩g[Q\edQF?AH<98e^5=L7;G4K<442/809@1.190-),,,/1)'+),,%4I:4(120/,3--03/8[2:2=2%)(:@76>D2/.*.=8/7#"%c  &!*,),+$&%)$! #*26'"]nZXiif^C :3137+<  4   +  + +  +  + + + /  !#" + + + + + +  + + + +   !,/'%&&  !&()$"! !$&'#"%' "#!! x!!       + +  +    +  +  + + +   $((%&%"!     !#     !"!""')'#!~}}}~}~}|}|}|}|}|{|||}}|{ |||}}}|||}|~ǀ~}~}~}|}|}|}~}~}}~~}~~~}~~}~}}~~}~~~}~}|}~䀅~~~}||}|}|}|}||}|}|}|}|}~}~}|}~}||}}~~~~~}~}~}~}~}~~~}~}~}~}~}~}~}|}~}~}~}~}~}~}~}~}~}~ սꝊˉ]ءƁҼܨ􅉃ޱ胀ꇏ~!     +      !!!!  ! ! !!!"!" #""!"!!"##"!" +#"!"##*Ɠͼ􆋕dʱⶱhT(!#"!!"##"##$#$$###"#$$%$$%$###$%%&%&$##%&%&%&%&&&'&%%&&%&'(' ((''&'))('&(('('('())*()('&'&'()*((''&'()+./00.,'''%&'%%$%%&&%%$&''(''(&%& +%$%%%$$%%%$##$#$$%%$$##$#$##""#"###$#""##"""##" "!"""#"! !! !"!       + +$!!#(WUΣ󁈎ĽưµҾŻú׼󃈈郊濜݆E<!Ǖ¬􆍗󈈇㶺ۄ¿犜ÿԂߨӈd򃇌R0;EJJBCA=BB>23>9,))+-00NGVY% 3FGGFGE<>@MSUURVVUORQPSUUUWWWPPT*+**JFHLOMC>@@@?>>@A@>9:8:658640+.(,@CDDR_S&+H'$/?JTN+3/$4M]I?;?CTVOI@:`\G<?ehc5KL>eFFGFFHHGHGHHIGHGHHGHHGH +IIIHHHIJIJIJIJIHIIIJIJIJJIIJKJIJIJI JJJIJJIKKJJKJKKJKJJKJKKKJKKLLLJJKKKJKKKJKKLLKLKKLLJLKKKJKKKLJKJKKJLKLKKKJJKLJJJKLKL KKLKKLJJKKJJKLKJLKLKKJKPLJKJKJJKKJKLKMKKLKLKJLKKLLKLKJKJKKLKKKLKKLKJKLKLKKLKLLJLKKLLJKLLMLLMLLLKKLKKLLKLKLMKJLKLJKJKKKLKKLLKJKJKLKLKLLLJKJKJJKLLKKKLKKLK LKJJJKLKJKKKJKLKJKKJJJKJJKLKKKLKKLKKHJLLLKJKLLKKLKKLKKLKKLKKIJJKKKLKKLKKJJKKLKLKLJKKJKLLJKKKLKKJJK LLKJJKKJKKJJKLKLKLKJKJKJJKKKLKKKLKKLLLKLJKLKLLMLLKLJLLLKLMKMLLLKLKLLKMLMLML MLLMLLKLLLMLMLMMLMKLKMLLLMMMNMLMMLLMLMNMNNMMLMNLMLMNNNMNNMNLM +NLNMMMNNMNMNNMMMNNMMNONNNMNONNNMMNMNMNOMNONNNOONNONOPOOOPPONNOPOOOPQPOPQPPQOQRQRQPQRRRQRRRQRQR#QRRRSRRRTSRSSTSSRSSSTTSRSSSTSTUTUTSUTUTUWVVUVVVUVUVVWWWVVUVWWVVVWXXWXWXXYXY$XYXYXYZZ[Z[ZZ[YZ[ZZZXZZ[[Z[[[\\[Z[Z\]\]\]]]\]]\]]]^^^_^]_^]___^_`a_`b`ababababcacbbdccbcdde2c2d232343334433443444544555465 6767767667877878789989;9dh:DNQPNNMNQC54BK@Fp#@@?>F=315=@B@F%%#%&&%#(H$&-%5=;:@DEJJJLN')&''$$KJILMKIJIGJJKJJHIIGKNMMN*.,+)QSPLJGJLJHEABEFGLNTN<;;ADKO'4'('&'''&&'(((N'''&'&L%&&%%&$%%###""##"!""##"""## !!!"4 = ""?!!!>??@!!"$=325:AA;377:@=@=>=>6-%!$&1:54?=.*),.//.0/000.-+&'('&%#&%"$$#^!#$'-+*,48=>??>;@?=CEEECDFGFFDB@CLMB<54::=?>;846337439<=;=>@CHHQTVVVWYWYXWXXYZZYXYYZYYZ[ZZ[ZZZ[\[[Z[Z\[\[\\\]\ ^\]]]\^]]]^]^^^]]^_`_ ^``__^___`__^_`_^^``_1`a`^^`___`___^__`a``a``__`a_`deggfd_``_]^^__^_^^^`__`aa``aaa``_^_^+]^]]^\^]]]\[\]]^\]\[\[[\\[\ZYZ[[\[ZZ[ZZYYZZY XYZZZYZYZXWXXWVXVWWVWWWVUVVVUVVUTSRTSSTSSTSRSTSSQRQPQPPPOOOPONMNNMLLLNLLMLLMLLKLKJJKJJIJIJIHHIIHHHIJIHGHHG FGHGFGGFGFFEFEFFEEDEDCD CCCDDBCCBBCCABA@A@@@?@@???@@?@@???>?>?>?>==>=>=>>>= >=>=><==<==<= <<<=<=<==<<=<===>=<<===<;<<<;;;<;<<;;;:;;<;:;:;:;;;:999::<;<{|xhXpoǴRNFE?TSJOOM=i?A?;5;C>5/.3L\8.>B78;:6=6/,Q3OL*00-2MCAB=59UA2.67;7?15(5477=730+(*,0667;?@B?<83/2a\]06<<45ef\XWZ0/?;54//179862aa262e7D7AQJOE669+,7J//..R=66cyzWY\Z[ZXUTUUVTUTUTSSTVTUPtgxv{yT# ,\r+4/-,+!#')%(*-**,-02),224::.!-436541343-G57ABE$$" "#""$#!%$ " &01( (-(3?A?;?SF)&$77334<@CC!A@@? !>8311/2>JH<975-5639:9410+(+-B(+.))-)/26'&1//11002111499;:-/14502.018>>;==7248979>A@@A?9>=96;>8567:<;763355*'JKC<=;?EEB==?838%$ 83/011$-+*+'&$#&&$++%##G$%  #)&%"!"%,/0"1224/.,(0)%%!"%! &"!+#469#%*.+,/-*)*--*+*#*;NNLKQJGFGIB$)/-,,)'')%.+.'D<5689:49=@CA?B;0',-%&# $%"'"&&-- +&()''$ !$+0422664.2000//,-,#$(-//)()(((&"&'%$##! ',-,7E2 !%2961D6,).4CHA:3,F@5126C()+)&%'4,*#(,$@*%*76543*&%,"-<<13753.`aP[0+395C(+/OMA"2:7ÿĄPυn҄#Є8ЄZЅӄ Є ҄ φEӅ(҄J΅EЅ9ӄҀV_+2::;<=<>A1#/<3KH@C@?6]::64.274-'&*:J,'67.20.+,'&'D)D?!##"%80.0-%&=-$"(%)$+#(!*7,-*(&'"(.$&()%$#! "%(((-//1..+(%)QOO'*//+,WUNKJI&#/+&&!#%(+*-)QS)-,Y0=-5A792))*950?ACD@@?>><<88983/06=+%-?DCOkB2+D,+*04FPZL5!';)6PbYD=:8MPPI<65cMFGCB\6:4124?>:2a52-WNGBJMIQRT*(*%=11;:27HU**+/QIMOEFD{oFL]ei:;8iba[8EPS`HFFGFGHHHGHIHGHIHHHIJIIIJIJJIJJIJKJIJJJIIJ KJJIJKJKJJJKJKJJJIJKJJJKKJKKKJJJK JJKKLKLKJJJK LLKKKLKKLKKJKL!KLLLKKKLLKJLLMKKJJJKKKLKLLKLKLLKLKLKKLKLLLKLKKLLLKJKLLKLKJKLKLKKKLLKLKLKLJKLLKKKLKJLKLLLKLLKKKLKLKKKLLLKLLMMLKKLKKLLKLLLKLMKJKLKLKKJKLMLLLK LKLLKKLKJKJKLKLKKKLLMLKLLKKLKLKJKLLLKLLLKKLK LLKKLKLJJKJKLK LLLKKLKJJKKKL!KKKLKLKKLKKKJKKJKJJJLJKJKKLKKMLLLKJKLKKKLLKKKLKLLKLKKJKKLKKKMKJLKLKKKLLKLKLKLLLKKKLKLKLKLKLKKLLKLKLKMMLKLKLLKLLLKLMLMMLMLMLMLMLMMLLLMLMMLLMMLLMMLMNMLMMMLNNMNMLMNMNMNMMMNOONNMMMNNNMNMMMNNMNMNOONMONOONOONOONONOONOPOQOPO +PPOOPPOPPQPQPQ RQQQRQQPQRRRQRQRRQQRRSSRRSRRRSRRSRRSSSTSRSTTSTTVUVUTUVVUVVVUVVUVVWWVWWVWVVWWWVWXWWWXXVWWXYZZZYZYZZ[Z[ZZYZ[Z[[[\\[ \\[\\]\\]^]\]_^]^]__^_^__`_aa`a``aaa`baa`babcbbcddeddd221de2fg343433455454456789Y:989:9:9d;ac:GPSOMLNSL+4[LC9@+J>CBH7303<>BBCI&&%&$"!!6=E-.%7A>DC<36;AF;A@?>A=91,'.1/+/7/.+++*--.01/0.+*((&'((*)&&(())(%%$$$""#$+7/,.06@AB@AB=<=BA@BBFGFGD@DKRJ@77:;<@@?=985699; =@@DHFrKWXWWYXXYZY ZZYYZYZZZ[[Z[\[\[[\\]]]\\]]]\\]]]\\]\]]]^]^^]^_^^`__`__^_`_`_ `^_``_`a_`+a``__```aa`aa_`_`_``ceghhfca`_```^_`_`_`_`_`_`a`a`_^^_^_^^_^^^]]^]]^^]^]]]\ +]\\]\[\[\\[ZYZZYYYZYZ YXYYYXXWYYXXWVWXWVVWV UVUUUTUVUTUUTSSSTSSSTSRQQPQQPQQP OOPPOOPONOONOMMNMMNNMLLMKLLKJKJIKJJIJJIIIHIIIHHIIHGGGHGFGGF EEFEEFFEDEDED +CDCDCDCCDDCBBBABAAA@A@A@ A@@@???@@?@@?>? >>??>?>>=>?>=>=>>=>==>>=>===>=>=<= <==>>>===<=<=<=<=<;;<;<;<;:;::;;66C854;757CMYIl:;OB:;88939;=@2A2.126;GIJMRGF>70398<>43.79@46684655:116@87;>@?7?B>@>ADA@>>:6:4107<=:62^`YTV1B<32CC>FROND:@I_rRVYZ[YVVUTTTUUTTTVUUQ]pqu{v*2Gfnz>VS7-C-"%$"$&&')*)$$%'')*&EC;4,.1#'#0&$ 8:;<;;;#> *'!"$')*%*-01 0%(-/49/*+--3455411773/L>C"##!n &&#%&$ #'&!!$'',0B@>BE;16@8>>95330114G)-.+&+-002%%-.,-.++,,,//0741.54/341-5=EEA:779<::87518:76/$>>??B?=<449995,<@C?<>;9<=;<<9878<<7410130&@BC<=;89<:46C'%#(-&<41353<('%()))'$%$&*-&$##%!#!!!$*+%#" #(G3#+,;=A@?:42!!#$&+0" $+%4 !#)'(++)&(*,+***+("/1(PMHJHEG@B.$-.-,(&#%'))3*#=649;;9;?@@A9BH(-+()),-,.1040*X())(&$$'&&%$&)-,)*('%C&*($<')5+.*(AK2/316898*9&%%%";1(*.0/+)',-,0 $"23/! !#*A>8:<>BA6$+*$)&$&## #"#"%, &,/00)*)+/0542468255442-/,-0.-+8850-/')*)(%$''(%%""##! ),-6K- +!,3<2% 3yD1*,->AD=.''J=782,?(-(&&(330(J'%":0.+25/777 #$#/76178257cd\h46=BC&((MIE:&-<\„JLJ̄v΄Մ҄օ4҄]ф2х΅$҅?фЀ#фӄLلڄ/퐁X-5:=<<84113231/-+,-.3:Iք؀τɅ]8:ּߔmL@psBIC>BH89MJ550180-,1,)*2;Bh65-($%)%'-#$('* !"&$&%&)!"%+(&$(+,'-0,-,/200./+(-)&'*,--,*OPHEG'2).*%&'%$&.+*M*,.81+QTOQ/35:.+1:77NF>G1';7.AD@TJ735=AJAA<858:)04688;++*,($*((+,# '(%,40,%"*4_w鼅߅DSVXchd'1:FGN!7'" + + &%    + +   + + +  #!  #!& + + +   +  )*)$.  " %%#%"! ! '"''%   !#$&" ! #& #      +  + +   + A  +  &%$&$#%    j     %    + + !! $#"# ~}~}~}~}|}|}|}|}}}|}|}|{|}|}~ǀ~}}~}~}|}~}~}~}~}~}~}}ڀ~~}}}|}}||}~}|}|}|}~}}~~}|}~~~~~~}~~}~}~}~}~}~}~}~}~}~}}|}~}~}~}~}}~}~}~}~}~}~}~}~~~}}}~ Ϙʧ¿¿ڍӹԦވǰ^ν›򁄓ȶʳ񀄇ȳ«     +  * (   + + +    + + + !  ! #!  !!""!"! "##"! ! ! "!!"#"!!"!""# $##$##  -Бû艐 ɷǷ2ؿ聑D&!#"##""!"###"#$#"$ %$$%&''&%%%$%&%%%$%&%&'&&''('%%%''&&&''( *)((()*((()('()'''((('((()***()))(((''&''((('2(),/122.+)'''&&%&&&'&'&&&''&&(&&'())(''&%&''&&$$&&%&%&%$%$#$#$$#$$###"""#""##! "##"##$#"! + ""!! ""! ! !     ),/58ydދ׾үʼǰŽ¿ĶDzļ컚ѣں˰ո卛P91a՚Ѡ􁆆Ȯހõ툍X΃ܿ怗֜ݑ݀透@FIBECBA>897;>0+*(*/0/MFS7#3:AJNMNOQROPVX[ZSPPPTUXWZSTQNSRVXU+-03432^UOSJ?@AEB@ABDC@A>>A>;9:621139*@.0=;EOUR;07@jWGfF\l;3045?AA;bie7^FJDIHBIPO*)31E516OQXT?EPEGHG +HHIHIHHIIHIH IHIHIIJIGJIIJIJIJ HJJKJJJKKJIJJJIJKJ KJKJIJJKLJKJKJK LKKKLLLKJKJKJJKLLLK!LKLLKLLLKKLKLLKLLKLLKKLLKLKKJKLMKL KKLKLKLKKJKLKLLLKKKLLMLKKLLKJKLJKLJKLKKLMLLMLJLKLLKKKLLKKKLLK$LLKLLKLKKKMLKLLMLKKKLLLKKLKLLLKMKKLMLKKLLKKJKKMLLMMKLKKLKLKLLLKLLMKLKJJLML5KLLLMKLKKMLJKJKKLMKKKLLLKJKKKLLLKLLKKMKKKMLKKKLKKLKLLKLLKLKJKLKKKJLMKLKJLKKJKLKLKKKJKLLLKLKKLKKLKLKLKJK JKJKKKJKJKJKLKLKLLKLKLLKLKLLKKLLMKKLKLLK LLKLKKKLLLKLKLLKLLKKKLLKLLLKKJKLKLKLMKLLLKLKLKKLLKLLKLKLKLKLLKLLLKKLKLKLLLMLKLKLML MKKMLMNMLMLLM LMMMLLLMLMMMKM NLMMMLLMKLLMLMMNNMMLMMMLLMMNLMNMLMLMNMNLMLMNNLMMMNNLMMMNMNM NMNMNMMMNNMMMNMOON +MMMNMMNMONONLNPOONNONOOOPNO/POPOPOPPONOPOOOPPOOPPOPQPPQPPQPPPQPQQQPPPQPQQQRQRQRQSRRSRSTSRSTTSTRSUTUTUUUTUVU*VVVWVVVXXWWVVVWVWUWWVUVWVWXWWXYWXWWXXXWXYZX +YYYXYYYZY[Z[ ][ZZ[[\[Z[Z[$\[\][]^]]^\^]^]^^]]]_^]_`^^]^__`_`a`a`aa`abaaacabbcbcdccdedcded2fefgg3f234 34445454455656 76667778789998989:HYZe8HRPJLPUML;9>F<=D)BFEF73/15>EED#'('#!"#&8?*,,&9B@@%EFGLLHDDK(&&%'%IHKNNKHHFGHGJLKJJJKMKMRV*,SNMLLIDEA>BEE@B@?>%%$##$%%$"""!! !!"<@! !##555<>#$<48>E"@"#"!A=;<;5,*/0-)**,*(e*,-./+(')+*)***(&&())(*)'%$$#!$%.67131169;8:@@@AAA<5=?;>@>CCCFHGJSI?:8<<;>@??;=:89<==;89@cCLrZWXXYXZYYYZYZZ[YZ[[Z[[[Z\[[\\[[[\]\[\] \]]^]]]^^]^]]^^]^O```^__a`a``_aaa``_``aaa``a```__``__``aa`a`aaa``_ab``bb`aaabaa`a_acefghgca`a```^`__aaacbabcbbba``_^^__^]^^`]]]\]^]"^\\\]\\[\]\\\[Z\\\]\\[\Y[ZZ[ZZZ[[[ZYZXYYXYYXYYWXWWWYWVVW VWUVVVSUTUTUUTUUTTTUTSSSRSSRSSRSRSSRPQQPQQQPOPPPOPONLMMLLMLKKLKLK +JJJIJIIJHJIHIHIIGGGHHGFFGFGFEFD +EDDCCCEDDDCBAABA@ A@@??@???>@A@? @@?>?>>?=?>??> ?>=>>>?>==>=> =>>>=>=>=>>=<=>=<= >>==>===<===<=<<=<;<<;<<;;<<<;;<;;<;;:::;ztag}Ħ\feWk`d_bdagBPJKfOJd`VEHC=GF=;>;@MIEA<>AA9EA988:LRPKXJFOK5=FUNe^WPLG=?H>>@@B?679:>MJI<423;5008S..OQNKF@DIFLDD?=DHIFE?9AHGH@:773_XWX,6>8:548549=40Y376;<40[X.1:SsQ>>HBUgWe_]@=F>/3;;84]VcVYS@;R32/I>?=JcX(7=86688<#&&CCAAA<=<67541;<:@E=77D@BA<714557>%-0//+$)/23''11.*)**)*.226463102,/478772*+6A=;89:>:475316654/A;;:9>?><+69<=;7:?B@<<;;:==>=9;;<@B:63-(.6/99=@@?#',,+')-^,-.50,+--*'##&%%#%(+-*)'#!<%+-*$'*//0J=;'.225:5;653,'&%E@=5/,-,+'%',..#' "#%/=8<;;686>A:5 %*#'&&($ #!$$&#.$-122011027:;8223477655/0+'++.., 83/:1&((+&%&'('%%##$ "%+3I?#!#'/1/ ">=..-7ADB,!%-PD8J=GR.'$(*5872PUO+I54112-154' (&(/4773540163b`]6?A!$(*&7?]F@PND5:83;5/.3/1;83/**.3/73./,,4545F:5<5'.1@5DBA>=5--3.-++,*#$&(*50.%!!")#! $214220,/1/3.1/,388531-2513.+,,)NDDJ"%)'+&')&%).'(K++(.1*&JI&'.@`@/3;5BPBECG-+1(&,)+*FEI<;7*':$#!5+*'.36@A2)**Q0,-GDHY/3=@HHLPRSQTSRVXYXUSQNPQXX\YXRPNIOWTT+--/0_\WT^aC9:<=@@<;>@A@;89841110&C/.->BZ^:DS-+-23,<<<>C9O$='1[I]JC=GRUV@55<:]OA]gnAAkIPd5CCPEGGHGHIHIHHJJIKJIJKKJKJJJKJIIJJJKJKKLKJJKJIJKJKLLKKJJKLK3LKJKJKJKLKLKLLLKKLLLKKKLKKLLKKKLLLKKLKLMLKMLLLKLKKKLMLKLKLKKKLLKMMKLKLLMLLKMKLKLKLKLK LKKLKLMLKLMLKLKLKLKLKLKLLMLKLKLMLMLMLLMKLKKKLLLMLMLMLKKKLKLKLLKLMLKL KLLKKKLLKLKKLKLKLLLKLLLKLLK LLLKKKLKLKLKML +KLLKKKJKLLKJJKKKLLKKKLMLLLML +KKLLLKKKLKLKLKLKKLKLMLKLMLKLLLKKLKLKLKLJKLMLKL KLMLLLKKLLKL KLKKLKKKLKKLKLKKLKLLLKLKL +MMLLMLLKLMLMLMMMLMMLMMMLMMMLMLLLMLLMLMLMMLNMLMLMLNMLLMLLM0NMMMNNMLLMMNNNMNNMNNLMMNMNNNMNNNMMNOONNONMNNMMNMNMMONMMNNMNONNMMMNMNNMNNNOONNONO NNNOOONNNOPOPO!NONONNOPOOPPOOPOOPPPOPPOOQOOPPOOOPQ POQPQPQPPQPPQRQQQRRQRRSQRRQQSSRSTSTSSSTSTTTSSSTTUTUUUTTVUVUWVVUUUVUVVWWWVVVUVXVVWWVVWXWWWXXYXXWYXYYXXYXWYXYXYZZYZ;[Z[[\\[ZZ[\[ZZ[\[[[\]\\^\^]]^]\]]\^]]^^^_^^^___`^___^``_``a`abaacbabccbdedcfd2213223feg344g34 545444565556 56676667877787987889:7A\W_8FNNMPVNF>1QGA@>5BHEG51,04:A%(')($&# #.?&(+)(@I88>8D'NIEA@CG'&$'&JKJJJGH%&LJLN'LIGHLJMO()T)RPQNJGFB?;@BAAA=??=?AOOB43@F$$&&'''#A"##&&''&''&&&('()('&%&LIKLLNLK%&'%H&&%$%&&'%%""#"!!""!! ?!!"9226;B$C8589=<=@=>>>@CGKRG<99;>?@???=>MJ>99;;99?JfNgXXXYXXYYYZZYZYYYZZ\[\[[\[[\]\]]]^]^_^ ]]]_^^_^_`__`_`a``___a`a`aa``a``a`aa`a`a`aaabaa``acabaaa`abcba`aba` +ceiihgdaaa`_``a```aa__``bbccbbcb +a``__`_``_^]^]^]]]^]\]\]\\\]]\[\\[\Z[\\[\[\[\[\[\ZYZ[YYYXYXWXVWVU VUTTTUUTUTSTSTSRSSRSRQQQRRQPQPOPONONNNONMNMLMMMLMMLLKJKJHIJI +HGHHGHHHGHGFEFGFEDFFFEEDCCDDCBBABBA@A@@A@A?>? >??>?>?>>?>??>=>==>=>=>=>===>>==>=>>>==<=<<=<<<=<=<=<<;:;<:uwtucTJOV]Lln"'6B7.-/2&17/22.*+0(!+.0++.-2=1+,28?=5/45447;=83114663-$'#$&",-*#5#&#$'$*+8<9BV2>"9=956==>D"&%#"CDA=<;;987@?>A@<9851--37,?ADEGDC?><==&0-.+%B?>94@A@V!$%&'#,&" #&(&&!)3 %',-24655768<;;94321/176:66/+(%)-)*;852C*#* "&!0 ,@80-6?DD1&#&'B<4DOW.LE&*0:7930.0*F468512434 &#"043<8347>30fc3G.%"'*+H7;H#-.D͙%Ą ȄUͅ,ЅxՆhӄrЄрfф+Ԅ"R6oNJ+5;<=<97?70.025/*,/05@auPۄfj  ƝۘXLEEHL>be8h4754673.*,-*CECB>;75;F681*-Z,2GH;9AF@@G?D4576;RTB0108B@B@?q;7eNKJJHIONN(24,R=/FGZt@GHHHGHHIJIJJIIJIJIJIIIJJKJKJ KKJLKJKJJKKJKJJKKLJKJLKLKLKKKLKJKLKKKLKJLKKKLK*LLKLLJKKLKKLKLLKMKKLMMLLKLLLKKMMLLLMMLLKLMLKKLLMLLLMLKKLLMLKLKL +KKKLLKKLLKLMLLLML KKKLLLMMMLKLLLMMLKKMMMLLLKLMLKLLLKKLKLMMLMLMLMMMLMMLMMLMKMMLMLMMMLLLMKKLLKMMLKLMKLM.LKKLKLKKKLKKKLKKLLKLLKKLLLMMLLLKKLLKMLMLLLKLMKL MMKLLLMLMLKKLKKLKKKMLKLJKKLKJKKLLLKLMKLKLMLKLKMLKKKLKLLLMLKLKLLMKKLLLKJKLLKLMKKLKLKLKLMLLKKKLLLKLKLLLKKLLKLKML MKLKLLKLLKLMLMLKMLKLML,MMLKMMMKLMLLLNLLMKLLMMNLMLMLLLMLMMMLLMLKLMLML MLLMMLMMNMNMNMMNMMLMMNMLMNMLLLMLM NNOMMMNNMNMNNMMNMNMNMON%MMNNNOOONONOMMNNONNOMOOONNNOOPNNNOPOPOPOOPOOPPO POOPOPPOOPPOPQPOPOPPQPQQQRPQRRQRRRQRQQSRQRQRSRQRRSRTSRSSTSTTSSRRSUSSTTSTSSUTUTTU)TTTUUVUUUVVUWUVVWWVVVUUVWVVWXWVVWVWUVWWVWX"WXWXXYXXXYYYXYXXXYYZZYYYZZYYZ[\[ZZ[ \[[Z\\]\Z\$[[\[\]\]^]]^^]\^\]\^]^^__^_`__]__^^_`%a``aab``cbcbbbabbcdcadccdccdeeef23d2e323434554545556655566567778787889:9998:99::999:::=uSXUZ4@LQRURJ<29DBBHjGKLJ92/349B'+('%%&!(1F)&(('CC/0>B'%$&'&MLKK%H%KMLLL&%IDBGN*PNQPR*RQNKIICB?A??FDA@<=>AQOD;/9AGGFG$%&##"C"$&&&%%%$$$&%%&%&('&&M'MLJL'('MM&&KK'I%%&&&'&'''&%&&&%$$$###$&$>134778740017==??AB@ADAA93<;;::;<>=@EJQK>97<@A@A@>;7EKHB<8:;99;<@???>?>>>???>>?>=>?>=>?>?>>>=> ?>>>=>>=>>>=<==<==<=<==<<<=<;<;<;;zxkcSc{y[TSUSQJ8@FH43JKIQ9FifABLQ1:OoAs4KNP@6977;9ZH8YBEfWi585DbSDBE:5=FMVK8;CILJJFC<<:7=FDNLMUXJIGJD<:A_I74011,+2C^HHNA=CC2'.301247AIN=FQDFPO41:6346.8BE.8NP_:ja9]RX==MTdUZ[XVUTVUadoWQZ\Q^b^NQ^O6-0 '.)!$%#%(%%& "#%(('" "!&*$$&0>3 B:8?'5;/,-14/O?-220/0.)&,2111.13.++)0>A8. ,689=>=3322687760 '"$(, $&'$')(& 4-/!'! "##&49=K[M5-;;56;=>"""%%"B"DB@>@?98?BF!@;=EIFC=;:CJJFG%+./-//-15;=4$)41()(*-+*+.031000.--&%.00351-5:9833895-/036851165<=>;:8;345<<=BBB@=?=<;<<>0+:>>B>:42/,-2-JBCCDCAB@?CH*;6/+(#?>@?7((''(())-.*)('!(*&$&%$# !#'&%"!"$$"$$+')":04/+03/&%%1#(1 % /  (($',,+,*)''')+PMD501$''(*O?#,/0.-5/'/-(*,&%@:5:pAD@@J$%*--2310001,($%)-,)'$((&(&$#'**,'&$ *0+*'&&*5/A<1:')-18:<=3:!+/-'CDBBC6?=.##%++,3 &' $#*,-?<<;>:7:1' !,< .H515:@@8,!!'B?19KTXODF'*5<:75\1,R<87643762!"."'/#/%:70642j95I2)%*,(19:"&-0RˀHԅDӄՀOӄՅ+ӄՀ҅dۄiNUGD'0:=>C>*%864;L:B;8+%#&)** & "'&&%"%&/# !&-//-.-,+''&#" ##%*'"" $&75+!###$!((('((&## K !!  $($%'***+,,-)&,,-,.-/25;72018>?=<;:729851-*.1++-/69Ha"хƅ#½1p"ެbQNclJHBCDD=-5<@3 +   +  + + + +!  !  !~}~}|}|}|}|}|}}|}|}||}}|{|||}|}̀~}~}~}|}~}~}~}~}~}~}~}~}~}~}~} ~~~}}~~}}~}~}~}~}р~~}~}|}|}~}~}|||}}~} ~}}~~~}}~}~}~}}~}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~ ½񐥺пĐ톗dzƾYҡƶ끈Ŭފ!    +  + +  +  +  + +   !   !! !!""!!! !!!""!"!"#!!""#"!""!#$###" + +1ۿij焋дʿ±ŽQùƽȿŦ􀉉J'"##$##""#"#$$##$$#$$$%%&$#%&%&%%%&&%&&'''&&(' &'''(()'&'%&'()((()*))*)(())())()()*)/***+**)(''&&&'(()*++)(())(*-14430,(''&%%&&'&'&'('&''(***))'''&&'&&&%&&%&&'''&%&'&% &%%$$%$%%$##$##$$$###"#"#"!#%$#$$###"!"!!!""! !!!"! !   !  *   5KƴԽȄذԇŭ׾ƭȷƻШĽ²ȱȠŻͿ跀—g3&σӓԾ􀂂÷牋u򉋎ۆ㖔EJHE>?<778@6.@N(;BTZ,SPP!0DFILNPWUQUVPPQTV^QKQPPQQRV\`ac^ZRUWWRRVSTROMNOQX^E99:8457854545765453353-4J=$4JFTV4H$'375#(0/0/;We?#[->Z\AEGJOOJ1.5bXMJWooe\[`4;ECBC8464WQQLJPPOP,77-PK95=%&*,)94ETZ3;ELX;HHGHIHIJIJIIJJJKKJKJKJKIJLKKKJJJKKKJJK JJKJKJJKJKJKKJKKLKKJJKLKLLLKLKJKLLLKKKJKKLMKLLLMLKKLMMKLLLKLMMKLLKLLKKMLMLLKLMLMLMLLMMLLLMLMMLMMLKLMKL MLKLKKLLLKLML'MLLKLMLMLLMLMMMLMLLLMLLMLKLLLKLLLMLLLMMLMLMMLLLML MMLMLMLLLMLMMLMLKLLMLKMMLMLKLMLMLLLMLKLLLMMMLMMLMLLLMLMLLMMLKLMMLLLKKLMLKLKLLLKLLLMLMLMLLMLKLLMNKLKLKLMLMMMLLKL KKLKLMMLLKKLKLKLKLKKLLLKLLLMLLLKLKMKLKLML +KLKKLKLKKKLKLMLKLMMMLKLKLKLLLKKLMMLMML +MLLMMLMMLMLML#KKLMLLMMMLLLMMLMLMMMLLMLMMMLLMMMNMLMLMMNMNMMNMNMMNNMNNMMNMMMNMNMMNMMMNMMNMNMNNNONNNMNNNMNONNNMNMNOONONMNNMMNNMNNOONNNOONONONONOPOOPOPO PQOOPPPOPQPQPPPQPQQPQPPQPQ RQPQQQRQPQQRRQRQQRQR SSRSSRSRRSRRRSTTSTS TTTSSTTTSTUTUUTUVUVUVUVVWVWWWVWVWXWXXWWXWXYXYYYXYZ[Z[YZZ[ZZZ[[\[\[[[\\\[\[[\7[[\]\\[^^]^]^^]^]^]^]]^]^`^_`___`_`__``aaba`a`bacccbabbcdccdeefffee32234554544565676667678989:;ZOUQRXf5465<;86633431105=<>>@@ABCB?:8>><;<<<>"FPI?97;??@BA>:9>FB@;6566646:sBH@GPYZZZ[[YZ[Z[\[\]\\[\\[\\\[\]\]^]^_`_$^__aa``_``_a`a``a`aa``bbabbabaabaabbabaaababbabdcbdbabcab`aaehijjgdabbba`aba!`bbbaaabcdceddcccbbb`_``a`__`___^_^_`^^]]^]^]^]^]^]\\]\\\[\ [\[\\Z[\ZZZ[ZYYXXYWXXWXWV +WWUTVUVUUVUTSSSRSSRSSSQQSRRQRRQPQPQQPONMNMNLLLKKLKLLKLKKKJKJJJIJJI HHIHIIIHHHIHHGFGFGEFEEFEFEEEDCDC +BABBABBBABABA@@@??@A@?@@@??@?>?>>?>?>=>?>?>?>?>>>?>??>=>?>?>=<==>=<===<<==<;<<<=}~\^obpdGRfZWNLIC:86789;OU\h^E;m954GI>6afVUSPJ><:D08ebXWFA62:a@fK_hcogVUF@AQL1;GKL3<4>[XI=65;7CPL_cfeZGG906CSKNPHQXONSh:34[PUH@;FX72UHD<34=A=GQNI6203GHEFS3470NPK><{vPYYXVSkizFYmopj_Z;M8Y%(.,- "$#!#$'+0+& "#$&% !$%*"+ &'%.>7): !" >$*03-,+/62/+.21...-'%(../.04:1-&!&8D:811625<;860./1574685- +3!# !%+/-+,'',.*' 2/&&"!--$1=TKB1+6359=>"$#%&$#$#CD?>>:7?G#C@;8>HGFBCHMPMGQ$&*020..-044570*11--)+0300-*%'))*++-.)-279>8.067;3:<:0 ..243//-19AA?<<;:9;::8;?BA=@<;=>=43=@B=C((),+.336973*9&'+*&%%$CC#$''%!$*+,(##($!,/)(&&(!4;-475%(*.17:?1;60/-,('&"N(F:/%).25 "%$',+2<<<;:<98?@>?DC&**)#*(# ' *.*)/,/0236;97::5458:>0,1/022368=><96/0/.)*.-.,+*++09>+"#"$) 0,8; ! 2F! 3@/25:=<8##H><7@\\OFCF)2<:980,,'@<=96;:77&%0-5#=4*.46`6AM(&%+)$8=8$,5KԍĀ͆Hӄ[Յvӄ#҄ԅҀ5ՅՄ9Є-҄҄ڄۅF ШcJBDM.8;??02/015"<8=3())*,, )#$$%& ! !"%%%$%&%%#$$!')+030-./,++)%!$##$)4*'#!!#$&21,#  ##"!")())$$!" $'%&''(++,-*()-,+*u+--/../4;83105::<<:9534710-'(*+**.4sGXt,#ۄ ؄2̅e!2/wBJiXWO9BREC><<85433321074@EJTT>5[/,*990,NR@<=;6012:))IbL>A81,'*D/K4FLHQF:<301.4-.-59'0:'#*/2-) "(&"#).15300/-.//.020A9C:;'5!4 +  +       ! +  !##!#  +     $80'm +-,(().12) #$#! !# > ! +# $&& +    + +  +  +   '"  _   +     +  !   +   ""~}}}~}~}|}|}|}|}|}|}|||}|{|||}|}|΀}~}~}|}~}~~}~}~}~}~~}~}~}~}~~~}}}~}~}~}~}~}~~}~}~}|}}}~΀~}|}|}|}~}~}~}~}~}~}~}~}||}~~}~}~}~}~}~}~}~}~}~}}}~}~}~}~}~}~}~}~}~}~}~}~}~ ͨѱֱʮԹ]ƘݻB     +               !! ! !!!"!"!!"!!"!!"""#"!"#$"!"$###"####HJ􈛡ӼǿΨπʿȺĶŻĿ¾ܼtD%!"##$%$$###$$%###$$$%%&%$$%&'&%&&%&%%&&''&&&''(('(()'((('(*)(()**)G()((()(()***)()**++*))'&''&&'()(**+)('()(),/2420,((''%%&'&&'&'&''('%&&(* +)'('&&'&''&'& %%%&%&'&'&%%%&%%$$%$#$$$###$$###$$#$"#%#""!!"#"!!"! !"!"!! !! !  !! $!      !   .<д㲚Үꁏөׇݚذú˺յĮźЀ뀉в˽ŤϬƷ̝Ձо儊Hȩ􃈂ձA壏׎Ѯۦ.]KJF?:>:7=>8<9KJ8>*OKIOF3@JLNPNLRRNVXUQQVUbTPRRPPQQSY[]aa^[Z[]U.]YWSRTTSQRZN??@>=;;><998754410x2."7<6.0@=HVD'%*111'%.34-9@bC<#+2?]O>ADIQNAXYdYXINo;:57@HGEH'( )4AN]OD+/7=?;>BDFHGEEE#$$%%$%$$$%%$%%%$#$$$III%JKKLMLL&&'('&'&JKI&+*('%%MNIH&HG&LHL';78<9@G?69BDD#$'&&&'$&&%%#""A>72.//-.*((()1656212510+|/977:;:8=@AEA<;;75.0//.1005=?<=>>ABBC?:8?A;:<=<>??>FOB:859>>?@BA>===6<:7022356mwFH=h\YZYYZZZ[[\ZY[\\\[]\[]]]\^]\]\\\^]\]^]^]^^]]^^]^_^]^_```_J`__`_``_a``aaabba`aabbbabbbcbbabbbcbbcbbcbbbabbbcbccdcb`bbdcbbba`cbbacccbcbcegjkjgebbacabcbada bbcddedddccb!aa`a`a``a_```a`_^^``_^_]_^]^^_^^_^ ]]]^\]\]][[]]\]\]\[\\[[[\ZZZYZZZ[ZYXYYX#YWXXXWVWWVWVWVWWVVWVUVTUVUTTTUUUTSTSRQRPRQP$OPOONNNONNNMNMOONNNMMLLMKJLLLKKKJKKJKJIHIGHGHHGHFEDEEDCBCBA +@AABBAA@@A@?@?@?>??@@??@?>???>>>?=>?>?>>?>?>?>? >>>??>>???=>?@>?>===>=<=<;;<=}ȒdN-WzuIARgil`MG:\ae7:97>PNgqzVa[[eAH@85baTSM?7???FLGHGSX\>?C7AF\|:d\`aF5@CCD;fbf=BX_YCDN)$9/1IP@:@873359@FHNMCB@?:;DJ'))OA77B74>ATg;_76264YT;PfGHI5/52G?7<59KZYPHcD3+/39HJDGEN]J_?2Shp:YL;fPJCNYjbOB830AhB>=?0+5IIC6ANJJJUVH>?K-2-PMF?L'IBFFC#$G:3&(6:<@#))'DDED@B?ecVYXygbb|TTgodfjlI&8OH$GD !%%$&(+.*" !" #((? /"#?:9AGF@<6014:EFIHI%&$&((,.2,.--/2022-./-.+.1762.-'$,/r55:>;;>CA:43/47953&+696.#.4766=9>>?=>BA=::;<<<;;>@:$04/21/1/25,'$!D;525@$'&%/0*--&  $ .&$&$%%&'%#/-%%'!)%#%-"*$),%"!"#$'$*1/4%3&F=<2-&%+.!6'$  '%(()**)(('()&&CB$&A"&(('<'%-48< 60,)$ ?IA==979>@A?87=>;7542-42/../0//493')&$!! #&'/:- !;.  :9*049<;1=9HC?8>Z1USLGG,9=9:>2+(B;A>8==8('2*)$"",84346?EE&&)%@>C:$*6;_󹾿ŀπԀӀф&ӄIфԀ|߄(GtJCA@F,7:<044/64;<;8-++)),.000 !)&( %(#$"##&(&)$%$$%&&&"#&&"'&&)-0/.,.1++*($$('%%))%$#%%%'27.% ! !###"#$((*,-,,,+*(*& !! $ !  "((&&%$&(,.,)'+,))+,,+/0.4<312/2688:996210*/.)#&(*.2m|Oc @Æ=5Ta_@&=VzlD9HQNUN@=3NRS-/-*/=8OT]ERPSU460+*MG=@>8387359677?=:362%02B\+E@EN9*49771UOO15CE@213 ,3*&+$%"#'(-128810.-**-11*#&,'$*)5B'=#!""A?+CM2*8:B@JJ6+)11#!%#5.%("&2;51.E.$ !%)23-22:M:Q3&DQX.B80I73*38F?3+'#",F,++."$0,)$)1,.087/(*231+(1)$('( !#$)*))(ATÊP;:$P26AD;;?G2"3(  ! +    +       ! ""#! +  +   +  +<-2)(!"!""(%!%&''( !%#!#$""  !!!  !!   +  +     + +  + +    +   +   +  ^  +    +   +  "$~}~}~}||}||}|}|}|}|}|}|}|}|}~ʀ~}~}~}|}~~}~}~}~}~}}}~}~}~}~}}~}}}~}~}|||}}}ˀ~}|}|}|}~}|}~}~}~}~}~}}~}~}~}~}~}|||}~~}~}~}~}~}~}~}~}~}~}~}~}}~~}~}~}~}~}~}~}~}~ ựڹƵ뛌Z官عЙӀݺфB   +     +   +     !"! ! !"!"#!"#$#"!"#"#$## ++׵ɽ񁛬ʩ¹׾|ƼĽåQ*$"##$$$###$%$%#$$$%&&%&%%%$$$%%%&%&&%&'&'''&''&'''&(('('() +()))***)**)()(()B***)*++**)*))('(''((()**+)('(((*-0222/,)('(&&&('''&&''(('&&')++*)('&'&&'&'%%&&'&%&&&'''&&&%&%&%%%###$&%$##$$$###$$$%$$#$##"""!!""!!""! !!""! !"! !!  ! 8E񁟎㹐ۜ􅒝ӃҵԺȿӾƻ܀Ώ샌˱񬴣Ǔ辫¸Ƿ匘¦ʮѬ³臅ҫHN”٥킅˰̾s􃍖р递펒Ǿ󁈑񊑋킥HDA=;<9<>6-/#2844@EKHTI>),-,,3/26<30:Je$#a',6KbB@>IMB:4YRZ\SV++*+<:.O@=GL$>#*GD;AWYNgRA>GNWX4;>B3XM\33;=@HNaHHIHHHIIHIJJJKJKLKLKKKLKLKLLLKKLKLLKLLKKKLKLMLKKKLLKLKLMLMLKLKLMLMMMLMLMMLMMLMLMLMMMLMLMMLMNM NLMMLLLMMLLMLMLMLMLLMLMLLLMMLLMKLMLMMLMMLMLMMLMMLLLMLMLMLMMLMLLLMLLLM LMLMLMMLMMNLMLMMMLMMLNMLLNMNM +LNNLLMMLMMLNMNM(LMLLMMLLLMMLLMMMNMMMLMMLMNLLLMMLLMLLMLLKLMLMLMMLLMKLMMLMLLKLMMLKLKKKMLLMLMLMLKMLMLMLLLKLLMMMLMMLKLLLMLMLNMLKLMLMLLMMML MMLMMMLLKLMLMLLLMLMLMMLLLMMKLKLLMLKLLMMMLMLLLMMLLMMMLLLMLLMLNLLMLMLMNLMLLMMLLMNMMNMMMLLMMMLMNMLMMNMNM NLMNNMMNLLMNNM$NNNMMNMMNONMNNONMNMMMLMMNNNMNNMNNNOON +ONNNONNNOONONONOOONONNOONONOOONOPONNNONOOONNOPQPOPQPOP QQRQQPQQRQRRQRQQQRSSRRQRRQRRRSRSRSRRRSSRSTSSTTTSSTSSTTTUTUTSSTUTUTUSUUVVUVWWWVVWVVVWXXXWWWXY XYXYYXYYXYXYXXYZ[[[\Z[Z[[[Z[\[[[\][\\[\\]]^]\]^^_``_`_``a```_aa`a`abbcdcbbcdcdedeed23eee333233e34554445454556 +778877888789:9:;>MOMUTTf=CE8;6/1BD@JRRMHJF7303=DFD"&%/6>F%ID)O:;;9@B?FJIHLKGDP)&&(%%&&''LKKKNMIIIKLHGLIMOMNKKVUONKGIIEFIKKFB@?>?>@CD@*/28<;:= @ACDBDGGFHJ%&$I$$$%%%$%%&%KJIIJK'&K&KLM'KJLMKJHN*)((K(('JHKJH&OLNL::=A>@C87?CIJIG(&#"##&''&%%$C?;962.+*)()()1;?6/..1/,,,2/259:::<<=>?;;940.-$.001006:;<=>ABCC@;7<@<:=>;:;>?GMA6329;=>=<<;682.,/005:@@ACHFUR[Y[Z[\[\\\]^]\]]\^ +]^]_^]^_^]^ __^___^```_`a``a babbaabbcbcbcbbccbdcb6abbccddcabbcccdcccacbbdcdcbcdcbacgllljfdcbcbabcba`bbbcbcecba`_`_`__``_^__^_`^^^_^^_^^^]]\]\\\]\\]]\]\][[[YZYYZZYZYXYYXXXWXXWXXWWVVWVVVWWVUVTUTTSTSTRTRSRRSRRRQRRQRQQQRRRQQPOPOPOONNNONNMMNMMMLKLKKJKJIJKJJIIJJIJIIIHHHIHIHHHG +FGFFEFGFFFEDEDCDCB ABABAABA@@A@A@A@ ??@@??@@@?>?>???>>?>?>?>?>?@?>??> ?>>=>>>=>=<<;<}pjhxdBlY{LAhYFmewzI;ri66?K')*'H@87?80?@S\PS][[3l:HH>];b06GMJFDQ[gY@2FICBGXM@94QF122:5:JWcQ@HCFxg\XN=9=75CNNNPg[W:.3B=;>84574CL=GIWRSO\ZL;LMTQCIO@BDFM>MG'$=,,19C+&%&'&&KNKL),--IDFFoY_]9agAYi[cplPM5r3!$'01'>3.%&(-.$'.,'7"%52/.2!(0-!# $')*/20/4222!#'-00,))(0221/18(&34*).6.*3:=963+5.02-/15877766*!#!)++)! #&#!Y  ,,(%*+$PFB0;??A@BGGIFHLIJGA?AC;8EKF><91+*/6>?>"$%&**)+!+//--11133/..)')-.001x35778643<27;9+&!)5:=:;<@@?89<9<;=<==<:;;888<;>=935-051/002/*%#=>67:@#&./1,1*&$&$ !.'!$#>=?$'*'<4/$!&$'$#C"" !%'"'(%"!#'!(/0 *%@98.)%$.%./'% .38400 "&'&&'&()&""#&(*&&''N00%)8@>"!60,(#$7A:=;9:<@@AE%%*--/0.0252+')+.0-)'&&')'$&)-) ;9'5.'$%&%%%"!86(*@+*$*/376*79,'4.*''(+*,)&EA;:8.)+13312,#,4/79;@C5=@;9=CG\)''$&&"$% !/#%.79=@?;88798:99699210010214998==::874352/./3684366+-*('%%%$#%2$'05-%+A (C/)138A1&?)+ 7,$',"*-!$7:5K;11;[̻8ȄʄUφ΄фτ ӄIׄaӄԄӄ3ԆԄeӅOӄфj؄Q߄e:-QCFB@M/32!$5838;>=9;5)(&'.243  $)&$*#('$('$#*&&&%'&$&&((&&+,/0--((/.,+($&&&(*++(%%&%&&%('& "!"##"$&&&'''y,+,-./,,,-*+-.,,+-' !#! "  "###"  "$!!#  $%*--+'&)+(&),+*,-06;5/-+0/..-/0,-'##&)+29?BEKVnۅ< <dӄ΀D֕`TcQ-JBbG8bT>_Wag@5f[0/1533,/07;;]GHCJ1=6TNH" 61234?L+.IDC93("&>EIEB=<=@-<5(=:0(&070) AL*,-./12/,**2,(%%*% -->B78=76 J$20*E'@$'595407:B=++-+*&0)$%,6.*,&6) &#(5=<96<<52&=92 .$GE38:08BKSUSW]][YVXXWYZX`XNJLPQNNNSUTSX^a_^]\Y-WQNOPQUUWTVUIECABABBACC@:979730/495(;74D-61REFN3/-018C?BIA7AFXBZ$'/DHE=4]WTTUVT++.:?1SJ1AY0+%$,2?8:IXsZBGWXab8>DBdXQ]<4;KONMUIGHJIHIJKJJLKLLJKJKKKLLLKLMLLKKLML KLLKKLKKKLLLKLK +LMLLKLLMMMLK LLLKLMMMLLLMKL MLMMLLMLLMLLMLMLMNMLMLMNNMMNMLMNMLMMMLMMLLMMMLLMLMLMMLMLLLMLMLMMMNLMLLMLMNMNONMMLMMMNMNMMNMNLMLMLMLLLM NMLMNMMMNMLMNMMNNMMLNMNLMLMNMLLNONMMMLMLMMONMMLMLMNLLLNMLMLLMMLKMMMNMNMLLKLMMLLMMMLMLMKLKMMLMNMNMMLLMLMLLMLLMMMLLLMMLMLLLMMLMLMLLML MMMLMLLLKLM +LMLMMMLLMLMLMLLNML NMLMLMMMLLKLMLM0NLMKMMMLLMKLKKLMLMLKLLLMLLLMMLMLNMLLLKLMLMKLMLLLMLNMMLMNM'NMMNMMNLMMNNMLNNOMMLONNMNNMNMMMLLLMMMNNMLNNMNMNMNMNONNOONNNMMMNMNNNONONONNOONNNONONNPONONOOONNNONONPOOPOPOPOOPOPOOPOPONOQPOPQOOPOQPQPPOOPRPQPQ PQRRRQQQRQR#QSRRRTRQQRRRQRSRRRQSQSRRSSTRSTTRTTSTUTUVUTU'TUUSUTUUTTVUUVVVUUTUUUWVWVVWWVVVUVVWWVVWAXXXWWVXXXWXYXWXXYXYXXXYXYXXXZYXYZYYZYZZ[ZYY[[[Z]Z[Z[Z\[]\Z[Z\Z[Z[\ +[[[]]]^^]\]^]]]^_^_ aa`__`_`ba``a`a`abbbcbcecbbccee2de2eee2333e343434345545 4566655676768778778989889::9:T;;::k=UORSR[7:5(634KEEDIM3.VVJ1./5>FJ%&%'14?FIHBGI?<;9:=?<@<;<@?;F)(&'&%%&%&%LMJLKJ6KJGIGLJILKMQUSMLHJGEIKJKEC@@?;646>E*&'-0/266:;=>@BCADFHuIGHIIIHHGGIIKIJJKKLKOMJMKKLKIJILJJGKP*)'G'*)%&GCEM(LRK>;=BFED>>BINKJD%$BA@>"%&&%$"CB>=:631.*(('(,689:?>:;;;<<;AGJ?52/--.03678:==2]TQV378:<>?BDGKJh[Y[ZZ[[\[\[\\]\\\]]\^]^\]]]^]]]\]]^^]]^___^__^^]__^_`_^`aa```a`aaabbcbbccdccdddccbbbcdddcdc bbbcbdcdccbccdbcbed0bdcbbbehkmlkgecbbabdcccbbbcaacdcccddfeefddcbbcbab%aaa`_`__a`_```a``__`__`_^^_^`^^^_^_]^]\])\]]\]]\]\]]\\\[[Z[ZZ[Z[YYZ[ZYXWXYXYXXXYYXWVWVUVVVTTUUUVTTTSTSSRSRSRQRRQPQRQPPQQPONONNMNNONNMNONMMMLMMLLKLKKJJKJIJJIJJJIIKHIHIHIIHGHGIHHGFGFFGF +EDEEDFDDDED CECCCDCBCCABCBBBCABA @@AA@A@?@@@A?@??@?@@?>?>? @??@@@??@?@?@A???@>?@???>>?>=>>>=>==>=<<][BEAREE>9X:+(-37;@JQMV]oU54;fFJbG=HB4)AAJQTY9@`F75-11;A;3887@>X^RW6ZQTSY=m[E01?%&)++'; "$%%%'>f\[nmWGGBFA!2'-#$%&&&+-%1$.-+K7(,1!#"!!3&&#*((/02/-+03M73$+?+''+/112111/"0A9-+$# (,5989;37-,/-.125475983-#5$'($"!!#"1&,*'&))*%F@:$+=BA?AHKKLLMLPRJC@B;1;IIJHD@:2,,4=!!!#&-0+/6*34216556521.,036776589;:689<:4456>@@C;=A@<8:53::@>;2.*04;>9>@<==;434::><<<3+13/11./..'"6:239 &+4/-+.%%-6-&#(#&%>8:'1,'$:2.(# %"'$$"""!!!"&&%'###!!'"11;&53A03-+%"!&!+1t& /10 ?;!"#!"%$$%&''&''%#%&'&*())&G$9#%2AB$" 3,&%&47:=<;?@>CJ)(-/0220/,-,)(*-10-(''(*+(*-+('#%)#5,+'$#%@$D<;2%9.)&,054)365/31,*(''*),+*+(%"C67/0&5/2-//2:=?CCD=CA=8AD@$$%%$!%$   $,4=??CED@>:9;;=<:@70,+./,--13448:<:87420-+,,.037458..,)*)(&&'&"%&9**,!%2* f + <;(&-0;:% #(L>2 C[RPQIL2;9=?<4-MD>>>=;)0%<3(8"1:M>4;GAFE&+/*@>BH-""4:=XDžIʄ̈́υIӄҀ؀քՀLԆՀV߄߅&skIFC@H,+#4697;>)$CD:%$$'.22 $'&%$'%!!$&%#''&(((*)&++-+*,)(+.,)'$&&&)-,+'&$####*!""#%$$&'()*)((()()))()*))*,--///00.0..,-,../.1/03*& !$!$!! $%#$" ""%#""  !!"%())+*&((*)&&((+,-1793.+%$$##$$#$(+,%KGGN.359=ACGIO`L_Ȇ„@_7ƒraKFB@L7f>9;PZZKN;;fRPJHHA+-&()(HDE<8 $!>"(!'--7+*7)'(3011.+*+-,*'%%(%%'+: &'+%5J0)4*1+5$#"**/+;91.,'=:+/*8))&";&%),/285;?P;%$/N59\A.)/)036667%'>-$!&))$(&#-*@?7;'>6:9;*E8+!,0'1%'&%(,(&""  $)//A`Y8 G>&&B76BC9.)     ,   +  +  +  +  ! +" ""   +  +*&$'***/34235145,))+#%22343*"  ! ! "##&""$"b "$"! #"# "!  +     + + C  + +      +  + + + +  +     +  +       + ""  ##~}~}~}|}|}|}|}|}|}|}~̀~}~}~}|}~}~~~}~}~}~}~}|}ǀ~}~~~}|}|}|}|}|}|}|}}~}|}~}|}~}|}~}~}~}~}~~}~}~}~}~}~}~}~~~}~}~}~}~}~}~}~~}}~}~}~}~}~}~}}}~}}}~}~ 肃ҡɴĿ̰أ`۲ꅋûعᇉ½C          +     +        !! ! !! ! !"!"!!""!"!#$#"#"!######*ɥڬ܁󁅆ͺզɹ[ɻK*"#$$%%$#$$%$%&%%&&&% $%&&&%&%%&&&% +&&''&&&'(&'&&&'&'((('())('()))***)*))*+*))*+*)* ++*+,,-,,*)(.)**,,-+*)(**,/13330,(''&'&&(((''(()('''()*++*)' ((''&%&''&'& '('&''&&&''('&%&%&'&%&%#$%#$$%$$#$###$$$##"""##"!##"!!"#"!!!""! ! !"!! !!! ! !   +   7K_֬¹⁎ҷ󈈄ŶʹკہݜչʻǼ㵨˼ϴ˻ҫƘͼڶџހ􀉊Ⱥ¼þÿ􆃃􄈈􄋓Ҁ=:=877@62,&#?/;&'H= ,3@KNTVWSY]Y\]\_^]X\\`\QMKMPNKLOPNNPZ[[]^XWXUSQMKNQORSTWQEDDCDCCBABB@=9;;621541'<879R+GTPKH4.464:>ADLF=EBF\-f"$'.GXG79ENSD477iWJ6Opkjm4a;C?AKK>4_YVWTT)-03>>5-N1GY110/69B4):SZTNPY`i4:CD5QNTg>58NQMLHIHHHIIIJJIKJKKLKKKLLLMMLLMLMMLLLMLMMLMLMLMLMLKLLMMLMMLLLMLLLMLMMLLLMLMMLLMLMNMNM NMNMMMLMMMNNM LMLMLMLMMLLMNM NMLNMMNMMMNMNMNMNMMMNNMML +MNNMMLMMMNMLMNNMLMLNMMMLMNMNMMNMMMNMNMMLMMNMNNMNMMNMNMMMNMNMMMNLMLM0LLMMLLMNNMNMLMMNNMMMLMMMNNMLMMMNMMMLLMNMLLMMLLMLM6LMLMLMMLMMLLMNMNMMMLLMMMNMMLLMMLLMLLMLLMMLMLLMLMLKLMMLMLM LMLLMLMMLLLMMLMLLMMMNMLMLMLMLMLM LLMMLMMLLLMMMLNML MMLLLMMMLMLMNMMLMLLMMMNMLMLMNMMNMNNNMNMNM)NNMMNMNNNMNMNMNNNOMNMNMNNMMOMNNOMNNMMNNOONMONOONNONOONONOPONO NNOOONNOPOPOPNNPOOPPOOONOPONO +PPOOPOPPPOPQPQQPQQPQPQRQQQRQRQR +QRRSSRSRQRSRSSTTSSTUTSTTUTUUTUTUTUVUVUVWVWXWXWXWWWYXXXYYYXWXXYX YXYXYYZYYZ[Z\[Z[[[Z[\\[\[[\\[\[\[\[]^]\]]^]^]]]\^]_^^^_`^^`aa``aa_`abdbbcdcdedecdee223e33fe334343455445656556677678 77889898889:9:>;::;;;$)'$*18@EHD<9??BC@>?GC> @=;@G''(''%$%&KKJHGHIJIGKLLMKJGIM-*+OMLIGHIIGHFEEF720386B-##&,/14368:<=>>?ABDEEGHFFEFFFGGIIJKKLKJJFGGJGIHGFHIJKN)(JKMKHGE>?GQNNK>:=CEDGB@EMOMNHID@@@=@E$%%#EEE@>=8631./-,&%*75./14358732001244224101232420-/1/146:9<>>>ADDA::<=>0;<<<:<;=II=861.-/00357;;:XY]^i:;<==>>@CFIGHR[[\Z[(\\[\\]\\\]]]^^]^^]]^^]^^^]^^___`_^_^_^__` a```aaa``aa`a`abaab7dccddcddcccdcbcdccdcdcdddccbcbbcdedcccbcddedecbbcddedddcbehkmlkhdcbcbcbbcbcddcddef eeecccbcabcbaa```a`a`__^_+^^_``_^_`_^]]\^^]]]^^\][]\]]]^]\]\\]\[\[\[Z[ZY ZYYXXYWXWWWXWXVVWV WVVUUTTUUTUTSRSRSSSRQRQQQRQQQPQPONONMMMNNMMMLLLKLKLKJKJIJJIH:GIHGHGHFFGFGFFFEFFEEFEEDEEDDEDCDEDDCCDCCBCCCBABCBBCBABAAABA@A@A@A?@??@@?>>??>?@@@??@@?@??@???@?@?@??@?>>>?>?>=<7BC?/./[ZW:;:>??ABEH&*&G?620-.-*.-,8>+23RX.55:J?;A;27;;4ARNBFDJDBDK74/03/QY2419411Q++)16==46IGPY@UFVXMJ'<5-+)+0;@;>HGJPDI_jG1<>@OTaiiUHE6-2:AHJEMKA?=@D"$(&'('"8137<319@CEKKvoPe^?Z_WU[dVi88]C2 !"#%$&),&!, #')')H)!"'*&6'$-,././0+%&,-(IC!"""#'-/01433$37?2-z))/49;9<::3..*/..345798651)! $%% #*($! '%911-""!%()'C?A4-4AB?DKNPPMKNPPLB;AK??GHKLHFEE0=*+8"###" 0,%%+.4>?CBAE'(+10/1311.*&&'(/1.*(()*+**-,)'&'+/&-)%$%$$#$$GDB>.&$*-.2/&.641-1**+*+)(-)(.1-(%&>=97"*20/,306@A:-BEEC?=@?<=""'%! (   -68>AA@EFBABADCA=>=A<3.,-0.+*.0..189777101/-+)(+..124:4,.-**)(&&'%#,+97,(%!#$*; + ';1%#/7;3$&(L>7,?WQNP&J1::;DC5+OFB@=> !%-/'!70:!! %''7=>>@?FI#(/.%;9@Q0&%6::PI͈͆τЇQՄԀրAօӀSԄՀހ.VICAHOG1",<;:79/$!D:)%$())  $%%#"!  #%&%%%'()('**+--+(*,)''+))'&'),**'&')*!#$###$&(''(*)((*('(+w.//0110-.-0-.-+,.//23../.++)$#'-*(' "#%$%##  ! " !! !!##%$# !# !!#"%&(++((*)(('(((,*,780.+(%##" ! "%'+FMVWb67:<>@BCFLWvVZ؄4ń]F + +xVIKKuOC<811665:EDQT5?DP,/-.*,/,,,/1+S*3;3E=?=Y//0/RMJ>;;8;><;;>CDFHE%)37122+)46,(1&'C=;788"8;:&-#%$&(KD;&&&')(('(*+("!"%%+''')&&:> %&*5++0,"&*+#-71)+()&&&.":C&($+(&$:$',+%(96=A-<1<<32+#&*&(0.27-2@I0!)+-67DGF4-)!"'*.1-2/(%#%&  "&&A<-A;&2?526>5?$%=*       +' +   + + !  !""!  +     + $*)!$('-4665569;:6.),4**459:521-% "w !"#"  $%$##"  ! ! +      + + ?  + +      + + + + +  +              ! +"%%"~}}}~~}|}|}|}|}|}|}|}|}~̀}~}|}~}~}~}~}|}~ŀ~~}|}|}|}|}|}|||}}~}|}~}|}|}|}|}~}~}~~}~}~}~}~}}}~~~}~}~}~}~}~}~}~} ~}}~~~}}}~}~}~}~~}}~}~ ýβĿ½]񊞬śā񋍏ѕȮ݇쁇       +  !! !!   !"!! + !!!"! !! !"!!!"!#"!"#!##"""##"""##2ؠᶚʯق±Һǹǿƺi˿<)#$$&&$$%#$%&&%%&'&%%&'&%%%&&%&&%&'&%%&&&%&&'''&&'('&&&'('&'((('((('()((()*)*+**+*))**++*)))*+6,-.-,)(('((()***,--+*)))*,036630+)('&'%%)))('()))('())+*)'('((('&&&''&%%& '''&&&%'('&&'&'&&'''&'&%$%$$%$&$##$$%##"!###"""#!"!""! +!! ! ""!    +$ 7Nh܏᪶Ǿ̡񏥪ä񃃁²獮倐󀪾ӽμ򂆋憓ĴΥȶ㻨μЀǪԿâ·؀􁑗r􀈟ؙི焉 􁢬$><999?<4.'&E@C%EG>9%>JPQSWX\W[WPWVYY]Z][TNMKNLPWWXUSOX\[]0--VRRTRNKJHKLPSPBBEECDCBAA?>>==<85563.&879A&C;TEA<9:=8<>?CHE@?>F]Q>"';RKE4?LNQ>187UGHa=7jdje8B?>LSD3Z[]YU=W+-05::1.)3HU0/36>E79&#K,QRLI^33AE;><=@<88?J''&%FHL&LHDCFGHIGFJJJKJGHKLLNN*-QJIGGIJHGFBA=;301385@6'&*0/15227:899=>@ABCEGHHIIFCDFIFHHGILJ&MNLLKLKFECGHJLHIIGFIOJLKIJHCBB@?IOJJJ;6:?CFGD@CMMMOMJFC@@??ABCCAACC>?>9863/2.1/(&05664346:i4332220011233213210/-*-43478>:;>??BBC@::@?;:9;<;<:=MF=98650/113677;:ginojf79?>?@BDDGFGa][\\\[[\]\^^]^]\\\^]^]]___^`^```___``_%```__aa`aa`baabaababbbcacbaaccbbdcccedecdededdeeedddedddcccddfefedddedfdcdcdcdc +bdijmmkhedcecdcddeddcddfefeeeddcbcb aababbbaa`aba$`__`_`___`a`__`^^]^]\^]^^]^^^_^]^^^]\[[\[YZ[[[ZZ[\[Z[[ZZZ[YXXWYYWVXW"VVUVWVUUWUUVUTTUUTTTUTTTRSRSSSQRQQRSRQRQQPQONOOONNOOPONONNMNMMNMLMLKKLKJKJKJKJJIJ!IHHIIHHHGHGHFEFFGGFGFFEFFEEEFEDCEDECD CCCBCBBBCBABA@@A@AA@?AA@A@@@??@?@??@@@??@?@?@?A@?@@?>???>>>=??>>>?==>?===~lzk`YO>CEOONJEA@ufHbaah>HC95598757>;37;.5)9D*LQONNLN+3B@=?CF&)&C=6752/46?:1=EBDAE>-(*L((+RM.7418.GR+*98@A9CR@:UKA<8B:2UROObOc^^X:ND4564YZ359BO8+,()&$***(HA[,)+0EJ<=o=9DYNL>GLSaN?JSQOGADOFEGAFOMGAEHG$&$')'%$$!>:519 "&3``cCYj[TVTNC?4fH3!"#$&''(,)! 7! ! #$+..( ""#"5 $,,00294.1+',)''+'#9!&-023323=v89;<>;:8;@?DC@@:<5!88-- ,588;:6.,,-2:98;::?@>==9877;<878<987/00.10/)-,**&"=729",-04.'B"$+(IHJEAFD"'/.13++"&-*'%! - $#"#$$&)&&#$" !':*8?B";28?5& !4=2""/--!!#""   !%))(&&%$?0<#>!'6 !!! 2,'!'/20:%BGD>?@<98;$%%$$'% *8==@?@CB>?<9@%!(-(K80@T-+0337IͅHτ̀:Ն؅W؄0ԄgӄԀԀVnLDCIH1&%??<8M5,#"<1(%%$%`###"! " #"%'%$"#%()(&''(-.*')('(*-+))()***(%%""( !""! "#&' ))(')'%&')&(W))././020/.-0100,-,**+3-0//0.++*)(.2-,/$!#"#$$ !%$%&%$"   !""!!"" ! #"#$#"!"'#'"!"!"&&)*'&)'&''('(((*:710/+,&$$###!!&-\fkjjf7:?@CDGHJRaÀ¿¿0์d^_]VK88:2--2/.-.22,-/&/%1;&ACCDDDG',752[WRJNKNIK(&$$'),)M-+,01/220&F8767!-$!797 "%'"-59>22#&)''%'(%%!"" %$(( (*%&'.+!:93 (#"( 29"")+$+9'$6-"!"*&"=;:9D6A@A8&3)!"""<<##%3=).)>"14((&!-?21)27:@2(2744.+.6//3-571+''%(  + Q19<)8D5121-'' B+  +    +  +   +   !#$""!  + + + + +  +   '%$"*=/3651/1;:3-.:**+**+,+***+++*++,+++--.-*)('()(()*,,.,++*)**-027740+)('&&%&))()(***,,+*)( '''(('&'&'&&&'(''(''&'& '&&&'&%$%%$$%$$%%$$%%$##"!""#$"#"!!!"!!"""!_"!!! !!! !"!"""  !!      4Aذʽ􏗙嚪ú°ǬƯԸ¾ڿҹ¿񋨩Աۀ銥˩ijʱƮ΀ؼ刍셄=98:=>63LHHN&)I>2>+CHQWWRQVYOLDJPMKQW\]][\[YRMLNOVSU[XUU^\Z`bZ^XQNJOQPHDACHIKB@ABCDC@B@;:<>?=97675-'"669"'2QE:EA?>9;ACBBC@@=E^jc)#(5JOI@8KQVC266VCCVD<\[^oA=;MZI6XWY^[Y+,3:;60.X;LS1105?>:S*%7,MMGRS42:@7_RAWlq:JDCGKoCHIIJKIKKJKLMLMMNONMNNNMNNNMNMLMLMLMMLMLMLMLMNMNMMLLMNLM LMMMLLMMLM +NMMNNMMMNNMLMNNMNMNNMNMNNMNNMMNMLMNMNNNMMNMNMMNNMNNNMMNNNMMNMNNONNNMNNMMMNNMMMNMLNNNMLMMMNNMMNMMNNONOOMMMNONNNMNMNNMMNMMNNNMLNNNMMMNMMNMLMNMNMNNMONONMOMNNMNMNNNMLNMNMLMNONNMNMNNNMMMNMNNMMMOMLMMLMNMNMMLMLM NNMLMMLMMMLMNMNLLLMOMMNNMMMLLM NMKLLMMMLMNNOMLLLNM LLLMMMLMLMLLLMLM NNNMLNMLNNNMLM LMLMMMLMLM NNLMLLLMMMLNLNNMMNNMNLLLMNMNMNOMMMNMNMNMNMNNMNMNNONMONONNNONONNOPO PNONNPPOONPOPPPOPONOPOPPOONONPOOPOPOPOPOPPQQQPPQPPQQPPPQRPQQQRQPRQRQR QRRQRRQQQRSTSRSSRRQRSRRRSSTRRSRSSTRSTUTTTUUUTTUTUVUUUTTTUTUVUVVUUVUUVUVVVUUVUVWVWVWVVWVVXWWXYXYYXXXYXXYZYYZYZ\[Z[\\[]\]^]]\]\]^]]]^^^]]]^_5^^_]]^___``_a`___`___``abb`aaabaa`abbcbbcbcecabbcddcedeeceee3f33g343443345465656 77768878989:;<;:;;:QTVPQXW=J)B;5:KMJE@K<3/*KB:8;?%*)(*# -69<@D<319@?B<76B>B?AB>88AI''&$EIOMJGEFGFGIGGHKLGFGJ(PMMKO*JGGFDFIFF@9988410544HC*'(,.24557;;;AA??CDGHIKMKKLKGHIHIJIKKIKLKJGHJMKFDFJJLKKHGFFNJLHHLJEDB@CDMGCI;6:>>?=>@?<8:996324013.,,6<:5633531201|364323445761230/0-/147;@<;?A>BD?:79?@=::<;<<>ELD?<=9840266457:>x~zws::>??@ADDHFF^[][\\\[\]^]]^^\]\^_]^^^_`__]^__^^^__a```__`a`abaababcbabcbcbdbbbcaabceded*ededeefedeeddcdbcdfffedcdeffeeddccdffeeedcdDegkmlkgeecccdecebbcddeeddedefggfgefeecddcccbddcbbbaaabbbcbbccababbaa`_`bb`_a_^]_^^]^^]^]^6]]^]\\\[[[Z[[Z[ZZ\ZZ[ZZYYZZZXXYYYZYXWWXWXWXXXVVVWVXWUUVUUVUUST SSRRSSSTSRRSSRQQRQQPQPPPQOOOPPQOONONOMNM LLKLKKLLKKLLLKJKIJIJJIJIJIIH IHHGFGGFFGGFGFEGFDEDEDEDDDBCDCDCDCCBCCBCCBCABAABBA@ A@@AA@@A?@A@?@ ??@@@?@@?@A@A@?AA@@@A@A@?@?@?@A?>>??>>???=>>>?>>>zͳ~leMDEECCELLK^ZLIDBOIncmCC>920248656?HA53/GCG2:2]RIEFFJMUMHIIGSg:.054300115;7e`]3=@CGF>14.6`_8EB9WRU,.253+1/IJ0+4;788OKA6255+OOOMUG=;=37EYBGPAHOVX/07964554350+'IHU@?F)440-*,+8ORBB<>L@49HKCMZSIHIQIDFNIEFGIHJM)('#$'((()&!/0 ! "KEfYgLZthb\NCF?8]3-"# "%%$&++# ! !#%>+,! !"/#'-2068/-1,),-))((,J!9'.234/+6<0.37<3..266432;8410)#(&,5899855760*-01#$$%%%#8567=>#&899:%!8.!*)&D<)29@@><;==74:;:777;=;@CA>;<5"&;8)2)*058;;61+'.9<>;;>=673235597788>963*/012.+$*.**%" ;515#-,20,&! A"=/5@>B(&='2.,,+.+!"()&''%1 ""#$##%%))'$$$""#!%",:"%2./?C3&#!/91#"00/ "6!!" ,./&&&%%#:22C'%0&:!$"! 0w,)00,6C(.(-0132.,./*''&&,/,)(+*,/.+,+('(*.*$-*$#'&%$##""B!$&$0"8/20$-4100$>('(''&)+)*,41)(" %*'%)'0/6683258DEJA?@9:649M%$%%&'#&" #06=BA<?>==?>;60-.-526:744;:7:7460,*(-.-(%#&,,2+*)(%%% ##  "5(&%$""$"!#"# '?J *61+'4CDDEHIOVtO .K*߰}aYFB?C@=:7E=YS]9651*'),/+**050)(':78 !#C>89<:77@@8:=;5,%)%#: + + +   + +        +!#$#!!#" +  + + +    + +&%!(+.,.-)152-/370--1488=!&#"%$$#!$# !"%"!  ! +    +  +   +            + +        + +    '.&!  ~}~~}}}|}|}|}|}|}|}|}|}|}̀~}~}~}|}~}~}~}}|}~~}|}|||}}}|}|}|}|}~}|}~}||}}|}|}|}|}~}~}~}~}~}~}~}~}~}}~~}~}~}~}~}~}~}~~}~}~}~}}}~~}~~~}}}~}~}~}~~}}}~}~}~}~}~}~}~ Нÿ˻ƾÿӰ^ԡͿ¥Ѐ鉈ڂՅ"        !   !!#!!  !!! ! !"! #$#"!#"#"!###""##"!""###$$#$2ˆ񾩕ぐǾײȀҹôƸeǻϸû9*$$$%%%$$$&''&%%&%&&%&%&'''&%%%&'('''(('&&(('''&'''(('(((''(()))**)+++**+++*+*+,,+,+>,+,,--..--*)***))*++--,*+**)+.25764/,*(('&&(())())((())()*+++*)('(('('))(('''&'&('('&&%&&&'&%$%&$%$%& +$##""##$##"#"#"!"!"! !!!"! !    + +;PŜľͪž煕소ŭˮռ玩Ӱ틤¨˾򁊈̔ɲⶦ񀇌޶銡Ⱥᇉԁޓ񚣧:87;=55+?H*M,[@((2CKNRUXVJFB?==FGHHKGLTX_\ZYWQM@GUXRWYUY_^^_]Z^WQKHJNSNC78;?=<8985-(# <89 -=IN0BCCA?@BEFA><=-UN\\]5<9c]_X]kn;OM?FL`=JKJKJKLLM NMNOOONNONON ONNMMMNMNMNMLMNMMLMLNNM NNMNNMMNMMNMNMNMNMMNNNMNMNMNMLMNNNMMNNONMMNNNONMMMNMMMNMNMNMMNNNMNMNNMNMNNMNMNONMNMN MONNMNNNMNMNMNMN ONNMNNNOMNNMNMMNMMNMNONNNMLNMMNNMNMNNMNNOMNNON&MNNMNNNMLMMNNNONNMMOMMNNNOONNMNMMNNNMMNMNNMNMNNMMMLMNMNMNMNMMMNMLMMNMLLMNMNMNMNMLMLMMLMNMNMMMNMLMLM NNMMMLMMNMLNMLMMNMNMNMMNNNLLMNOOMNNMMNMNMN MMMNNMMNMNNMNPOMMMNNMNNMMNNONMN ONNMNMNNON ONONONNONNNOON +OOONONOONNONPOPOPPQPPOPPOOPOOOPOOPPQPPOPQPPOPOPOPQPOPQQQPPQQPQPPPQQPQRQPQQRQQPPPQQRRQRQQQSSRQQRSRSRTTRSRSSSRRSSRSSTTS RTSTTSSTSTUTTSSTTUUUTUTUUTTUVUUTUVWVUVVVWVVVWWWXWVWWWXW +XXWWWXYXXWXYXXY ZZYZZYYYZYYZYZZ[Z\[[[Z[\\[[]\[[[\\]]]\]\\]]^]\\]]]^]]^^__^_'`_a``__``aaabcbbabbaabcdcccbdcdccceedddedddeff3434344455545656565565676767778787888998989::99::9:;::;:;;::;;D@:3>;77;:?@<=79:8640443KH*(+-237:9%%%J%%$HJ''HHJLKKNMJKKM'HIGIJHDCFDDEJHCC836;:AEGHONIMMHFGB>s;=@>;23431023000//2:I@:788322543457655546:>9:8301//025?BABC=556=@><<<>?ELPID@?><9768:5466;=@@>?BBBEFHHOY]\]]\] ^^_^^]^__``_``a``^`aaa```b` a`baaacbcbbabcbcbbdcdededde&defeffeeedededdefeeeddefffefeeeddfefffe defilnnlhfecdedcddfededdedefgghggfeeedddccbc!ababbabcabbaa`ba`a`aaa`aa`a``___`_ ^^^___^__^^^]\[\\[ZYZYXXXYYXWXWVVWVUUUVUTTUUTTTRSRQSRQPQRQ PPPOOOPOPONOONMLKLLMLLMLLKKLKKJKJKKJIHIHHHGHGHHGFGGFFGFFGGFE DECDEDDCCCDCDC BCCCBCBBABBABA@@A@ABA@A@?@AA@@A@@@A@@@AABAA@@@AA@ +?@@@A@@@??@?>???>>??>?{yUJHADFBHLQMDISU]hNoie]XY^0a`[7?BAAA@DA82/PLU4BE9-OJHCFR^9a_d``[050QW118?<;85cYTR[283421)(^1WQ14.5.VW(G*1:A$&'&'P9?;79;4-(&NLJ..14++-++*)*+-0A>E;6DCBGCOSVWhlT[[LH>>:?GLRMK'+'"$'(()*%"! )).38:BQ*?5:#'+*%;"'%HE1&9@C&DD@FLICFT++*VVRMFIQ*-,03220220/.-,'="'2623/-5>@>;<;87:<=87<;88=@B?<;?<:=8-+-,352*2238;7:=?8-#-8;;9-'"!'289::?<76/*-022.&!$+,)%"!>4/3#*14,'%)**& 37$"%)")-)((&*-)*&(,&*~!!"!"##$(*'%$##"!"$&+3912*1F@-&!%2/" -. "2! 2240(+0"05!% 8053@M*'D)!$##%!= 2,(%%)A3/+2433-/10,'(/.+()*+,../,*&'*-+#)-*&$&'%!#">#'0.0$<0/(.--0/2)B+'''%%')**,3.*'C?+-&&6-(246236I+>B@LFD:31368N$$#%&!! 1& 16<@BC@530-++22.030379?=>>:3,$*6638847;8797473.)&).1,%!$,+//+,-('&# #! (.0#()(%$%'&#"!! *>B2 'A0,003DGA0(H=9AK47/GFQ553AQC3J?@@D" #&01% 8'0;##%&0*$") + ?08G΅4̄̈́ τ<ԄӀZ؅ՆaԄ ׄ(؇ք9քՄքՅ ԄSׄ؀q g`LJJ>$'1223K2/(52+,,+%!  N #('&%''%##%%#%'+*&)*'%%(/-)(())*(%"0+!"""%$%'())*++(()**+,+,..---.*))+*)&(*11..'#&)''+*('(&&)($&&$#%# !!"!!! ! "%)&)'#"%&%%%&('&%%&$&'&"$#('''&%&&)177533/1/0../(''(.89ACAACEEHIQb*؆r*1 ۦ쇱xSED:<=<>ABB:=EDFPC^[YRNNT*VPL.59632030)%"A;>%,-("?<=;=FL/MMROOK(-(CH+*.1.-*'NHECF')#$"#?#C='("(#A=1"$&!*79-9A$##'&%(,&%"!" !&"$'-%$&9/! '=.?7!3'#!(!+.($146>F/EA'#0%,'16),0663?<"''$" f!631 +).'%++-,8:;?13,,*,1352/ @&A86;@J=2!)&+( + +   +  +U + +   +  " ##  ) '* !%+*'&-24/*'+3"$%&$"#!!"!!  "#! !  % !  + + ?     +    +  + +  n    +  +   + + +   + +#   + + +  + X        %0*'"~}}~}~}|}|}}}|||}|}|}|}|}|}Ѐ}~}~}|}~}~}~}~~~}}~~}~}}|}~~}|}|||}|}|}|}}}||}|}|}||}||}|}~}|}~}|}||}|}}|||}|}|}~}~}~}~}~}~}~}}}~}~~~}~}~}~}~}~}~}~}~}~}~}~}~}}~~~}~~}}~}~}~}~}~}~}~}~ ڷѽȼ􅚬Чfґۺ٬ҋÌꀖȴE        +  +      !!!" !!! !"!)"!!! !"""!""##!!""!!"#%$$"##"#$""#$##$Jۺ帡ڴʱŸ¼ſ;X׾ǾĻ{,'$$$%$%!&&&%$%&'''&%&&%%'('%&&'''(&&''(''&'''((()()('((()()))()))**+++,+*+,,+,+,+,,,-...-+*+--,+**+*+.36663/,*))(''('())(()*)*,-,+*))*)))(((''('(('()())()('''(()(''%&''&'&''&&%$#$$%&&&%$#$$#$#""!!"#"!!" !!"#""!! !" ! !   # 4>Jѥ򾴺셂倚鉣󊈌㉿։ɯɺ肘ֶиܳԺ܇䄥̽ƸЀɹȵͻù􈺷߷ѽ򄆅׀풝܋66>:/12AI+LDJ:58=DFFFEKKND?>>>=>>CGNHKNPTZ[UWYVKUYVPPRMKS]^[XYUSLHEFIKF8;GMJB?@CBCEGFEC@=97;=:77:4,*# 98"2A=NC9>=BFDEIBA@>>:K[PcVZ&)6NZO5CD/He\T;7TETfEFCc]`<>;F]R=]LRUTZZ.28?60,N>AM..15>;6718"PWV[h65:2TV\gl_3=Q[JEIShKJKKLKLMLMNONMMNNNOOOPOOONOONNONMNMMNMNONMNMMMNNMMNNNMMNMNMMLNMNMMNMNMNMNNMNMNMNNMNNNMNNNMN +MNNMONNNOONOMMNONNMNNMN MMNOOONNNMNNOONONOOONNNONNONONNMNMNNNMNMNPNMNONONONOONONNNMNNONNONNOONMONNMNMNMN ONMMNNNOMN +MMMNOOONNMN OONNMNNONMNMNMNMNMMMNON +MMNNOMMMNNMLMNNMNMMNMN MNNMNNMNMMMNMNMLNNMMNMNMNNNMNMNMNNNMMNMNMNMMNMNMN LMNMNMNMNNLMLMNNMNMMNNNMMNM NNNMMLNMMMLMNMMNMMMNMNMNMMMNNMNMMMNMNMNMNNOMMNMNMMNNOONOOONMNMONNNONONNMNNNONONMNNONNONNNOONONNOONNONPOOPOPOPOPOPOOPPPOOOPOOOPOPPPOPOOPOOPPPOOQPOPQPQPQQPQRPOPPRQRQRQRQQQRQRQRRSRRSRSRRSRRRSRSSRS4RTTSSRSTSSSTSTTTSUTTSTSTTTUTUTUUUTUUUTUUUVVVUUVVVUVUVWVWWVWVWWWVWXWXXWXXYXYXXYXXXYXXXWXYXYXZYYXYZY[Z[ZZZYZZ[[ZZZ\ZZ[\\\]\]]\\[\\\]\][\]^]^]^^^]^\]^___^___`__aa__`aaa`__`ababcbcbcbbbdcdccdfffe2d22ee3443g3434566556566789:;:::;::FPTYVN15BEB>?CQY5<7T:<,QIIKE=BI('% '+047;A906D@>==;98<=;>DJGAACGKGHFECBDHGHGHEDDHHGEHPOPNKKIGO[PDEDB>>BB;;=9942522=J.(+,03522789:;<>=AEFGGHFHKLKM&'&M&'&&%&%%%&m'&J&MMNMJ%I''KHIGAGBEKJFA604::@=98?BEIJJCHLLIHDC?B@=@A?9451---/1///.04<>?:6743537=5466999:?6520143128=@@B=F=4429@=<>>?=GQOHB=@>?B<9<>84355wBACCFCFIG`M\]^]^]]^_^_^__``__`_``_`a``_``aa```a`a`abaababbcbbbcccbbbcbcedeede deeeffeefffefeffeffedeffggeeefhgggfffefgf eedfhkoonlhgdefeddeddefffdefghggfeddcdcccbc bbbcdcccaabba?bba`aabaa__^__`___`a``_`_``_^^_^^]^]\\]]]\[\\[\\[[[ZZXZZZ[[YZYXYXXYXW XXWWVVWVUUVUTUTUTS TTRRSSRSRSRQRQQP&QQPPOPPOOPOONNOONOMNNMNMMNNMMLMMLLLMLLKJ KJKJIJIIHHIHGGHHGFFGFFGFGFE +DDEEDDDECCDCCBCBCDCBACB ABBCBABABABABAA@@@A@A@@A@A@A@A@AABA@A@?@?@?@??>>?>?Ahۤs^OJGFOTXRFJJLE@?FQDjUMMQOIA<@QW[562231.261.1\\06885bXRLLQZ\VNcj[\^e<:e\b4>G>52/URJKKO1@G83.)+---,,6>D<;8QN.N*.10..]33TKP-+2O3AF62447FS?918++,%'CD<@HWF;33?(1A-PKHIIGIG)03:88<74,-.0-36796430-+)/L46<<2GCNfUKJ>>GE@@<@;LFBB;:?NXQ^/12,)('&%&'##%(C5+!)0X|_m`QdVSF:KUXIj+!2""!!"#%%! !0, "$# ! !&":.+-!"%(+2631020/001,.-,-.--.(C%1>7,'*(%*-/(!&+-499600*&! "#&+222577641G46=95+.498;;=?@@>;7:900-+'"",21;9:3/-/20/*%"")+&$#!;7&).-))2/($&$ #'),)(&$%'*%**)+(!0+!""##!!#()'$#"!$)!13'2:'2:2'!!$*7#/./.!!.#&2#!4.,5:2/395H)*()1<%%#%&%"! 5/$$*.,26772&'-1/,*)))+1+,,,+-/./++-+,.(!'..*'&'''#A?!"&)/0;%//&().**-.0(()((&%$&'()+2-(&>?/)*%#&&294/-2$1==-HI<112446!!'% '"!'*/4455;::/-,-*+,((.3.0357==;;:6/9:5.22+,5:75131.(&$%)+&(,+)()-,,,-++(&"  .+0+%&)+()+&%%$$!.:-u-6 *58".0-MDB)(>5DS;98QJQ255>SH6L:;@ADF#',3*#7*-9$#%).+&% " + .=BHQ)$&!;9:INO,.,,+'$%)%"&NP(*+))OHEBCFLKI@SZPPOQ10VPS,3:1+'&FFDBAC(37+0,&1#C###=;<8"%5&472',7$ !%#(.# #"%!"$65"5>#"648  4','/#,3),1;-#$*3/./1350 !"#$$! !!$&1+2E712),5202.1/91-/*+-8?6@ !!  + +,?3<7.<31( -27/C  + + +    + + #  + + + + + !###!"" "&))&!"+6/V0,!"%+(%*-,*,+...,,),) '$!   !!!!"y!"!"''&''%"  !       + + +   +  + + 9  + +    + +      ! +x          +.# ~}}~}|}|}}}|||}|}|}|}|}~΀~}~}|}~~~}~}~}~}~~}}|}~}|}|}|}}|||}|}|}|}~}|}~}||}|}|}}|||}|}|}~}~~}~}}}~~~}~}~}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~ ̧ѻ¾˽ÿZߓײ̻ҋ򂄄􅏠뢯倒̸D  +    +         !   !!! !! !"! !!!""!"##"  !"""!##"#$#""###$%$##$$#$/߽ۃƾϭ˱ú²[־ѷ¿ȼz90##$%%&&%$%%& +%%&&(((&''( +''&'(''&%&'()(()))**+(()))()*++,,+-,,++,,-,,,+, -,,,++,++,-..-,,,+*))*,-,,*+,+,/26763/,*))((''(()*)()*)*,,,++*))()))('('))())'''&&('&'''&'&%&%%$%&'&&&%%$$$###$##$$#$$##"!"#"""#""##!!""!""!!!"""! ! !  !     .7鰞ĵ̽¾Ⱦ銘섋ڱʹȴἿꐨóɾϱ׳兢ƽμɀҢǾì耀ÙĴԲݿ猦üľȿ郈Խٍ +3;B0/5*L*K<'*6ACGHCFIMOLGD=8;:54;<;9?GIJLQTSUXX\WURVSVSUPR[\]VLIHJE?A@36;GIDD?=DCCFGFECB?>;:;:65:2,)&$"<5 2DAAT=68;BHGGBBA@B?L/138A>983S(&:Oab7=3-+RLXgm1/;Q\QFFPTLLMMLMMNNNOONONNOPOOPPONOPON ONNONNNONONON MNNMMPNMNNNMMNONNNOOMNNMNNNMNNNMNNONMMMNONONMONNONOONNOMOOONNOOONONMNONNNONONMNNONNNONNNONONNMNONNNONNOONOONNMONONNOOONONNNOOONNMNNNONNNMNNOONMNONOON MNONNNONNOOONONONOONNONNNMMNMNPNNMOPNONONNONNOON MNMNOONOMN MNOONONNOONM!NNNMMNMNNNMNNMNMMNMNONONNMNNMNNMON +MLMNMNNMNMNMN1MMLNMNMMNNNMMMNNNMMNMNONNLNMNMMNMMNNNMMMONMNMOONNMNMNMMNNMNNMMMNMNNNMNOOONMNNNMNONMMNMMMNMMONNNMNMNMMNNNMNMNMMNNMNNMNONNOMON MNMNNNOMOOONPONONONONMNNNONOONONOOONOPNONNNONONOOONOPOPPOPNOOPOOOQOOPPOOOPPPOOPOOPOQPOPOQPOPQPQPPOOOPQPOPQOPPOQPQPPQQPPQPPPQQQPQQRRRQQPQRRRQPQ +RRSSRQRQRSRSSSRRSQRSRQRRSRSRSTTS TTTUSTSTSUTTUTVUTTUVUVUUVVVUVUVVVUVUUUVVWXW VWWWVVVXWXWWWXWXXYXYXXYWYXYY[YXYYXYYYXY +XYYYZZYZZZ[Z[Z[ZZZ\[\[Z[\[\^\][]]^]]\\]]\]]^]^^__]_L^]_`_``_a```a_`a``aba``abbcbbabaacbcccbaccbcdccdcdfeeff3233gfg333gg3332344454544555456655565665565678787899:989:;;:;AFD0@:5>9MKKMLFAEHN&!#''+2105@<.1F?;A@=:=@CBCIJF>>;@EECAEGIKJLKIGFC=CHFFM)OKJGHGEERXMEEC@AD@<<<:;323244B.&*)010156467;<<=@DEFFDHIKLLMMN'()'''(''&''&&''%G%%&''(&'(%GHAK'%EKJCDFEIJI@4257=EB;:85677=X:;65579::210046743:>??@ACDG<5735BA?BEGENSOIA=@AABB=>B@;<:8:@DEFEFECEHF>Ua^]]]\]]^_`_`_``_```a`^`aba`a```bbba`cbcacbcccbcdddcbdefeffeedfgeffeghffefgfefdefhgfhgfg:fffefgfgghhgfefefikpopmhhffedffefeedeffeeeffhihiihfffeedecd#edccdcccbccdcccbababaabbaaabbbca_`_`a_`_`a```_`_^^]^^]\[\]]^\]\[Z[[ZZZ[[[YZYYZYYYXXYXXYW XWVVWVVUVVVUTTUUTSSSTTSSTRRRSSRRRQRPPQQQPPQPOPPPONNNONONNMLMNOMMLKJKJJHJIIHI HGHHHGHHHGHGFGFEEDEDEDDCDCDCBCBABBCBBBAAABBBA@A@ AAA@AAA@@A@BBA@@ABABBAA@BBA BA@@@?@@AA@?@@@??@AB͡wUREB>JVTPIEF=9771SNNHV\VYXQNV^b564/../.382]]LFGHPSKHGDBGMTPNMNOLNR[c^XNS\7?7]ZUVKG>>CMS5;;63'RJZ6<5VPU0//.;V'%#$&&CD??C3.:NU.9=:?L'-+%#=532-'E?21.2:=:94KAJII,1.('OU120+PGC&0B26C707LL9<2)'&:GNAC<4*20.3729@HE?HKQJBB0A-.1/.11009JCDDA:?B>=;7699:;L.04:4598KN82.0.-/28?KSSKKOMIQ/225U*-+))%#()&')(=86,rLx^PPDGA7=NBL:AF$ $%# "!!'))# !$0 "!!"&$E"!*-/!$,21103560./16/00//.*%(*#BH/<<74*#&%'!",-0)$"""110378533;/;>QPF;9NQNMONKQONO,-0544/.*'%,-*RNSLC?!%'!  (/0-44334669988:97:;=>@?>?BEDCDEA98?@>9,( -7=@?<>?@CB?>?9;-#$&%(%$$$#$'74104211'""!$*%"#" #"" "*++(&&"""!%(&&)*'%'&!#!)..))"/ ! !!#'($3&%!""&&=.@8%35*%#!$&+:%.*/!  45 7$&,8:.#!%.25>2:)+)'+?6#&%$%&%$#!" !1$ 6:51+#%&-1..+*).+'-/.+(*-.+.351.#'./,+(('&&%$!!"))+-&2>($-)#+0/34))(((&%$%&((+-.'&@(-,*%+/()03-+' 4>='>F5201034%+!! $/.031238:63.*'*'!$ "!(...0578798:9:784412/1121.''%%"!!)*'&$%,+,,+*))'$#" 1/'6)$')---*(&$(&0;&!:& ")<($/&)D=?+)B5>N=5_1EO/44>UL7QB;BCADF&*46( 8,+2"%'+2.(&!5 6JL*/$:7@HM%#-?H=8?o υ τ>τIӆՀڀ,Յ׀nՄ*ք؄ڄ܄݅܀k_NJB"!""%+'$++<85351.1/.!"  #$$"%$! $''&%&%?# &'&*)()'()%&03+'&%%(*$" !,!!!#"!#&&&(&&(*W+$()#)$**&'&&)**'!"%%(//+**-/.+-)%&&*)'%$'&#%')$!("!" %""#"!%%%$$##&&& !"#%((&'-/.--,,-1)%%!!)(%%'''/5672/1238965872357:AEILJJIFITefڄր¿N ߬NL@>9BHED>::1...)B=@AQVQRPJEKRQ,,*((&&$%(">C><=:@BA>?>>AEKFDCHNJJKPXTURSW04-KEA?;9239=<)-+'&96C&,%=9=" !$1)0125% )6< %#&.0-"! #"##3.31/69""4-(%'++!)1*-(!!(''//30,/"+%1+*))Y%')%&$" "#%1$!48'" "%'/9<<587418"""$:8(@4.0&*$$/'1%$  + +  +  + + "  + %$#  +   "#!%,+'('),+# :>;869 "$"0')+% !172142/21/--,/+   !! ###""$&((''&"   !"\#$#! +   + +   +   +   +     +    +  +     +  + 1    +  $  "(~}~}|}|}}|}||}|}|}|}|}~΀}~}|}~}~}~}~}}|} ~}}}|||}|}|}|} |||}}}|||}~}|}~}|}|}|}|}~}~}}}~~}~}~~~}}}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~ 趇¸Ⱦž`דԆ􋋄߄耂ʷB       + + + + +    +      +  ! !!"!!###! +###"!!!#""#"##!#####$#"%$4ŹʧѹƼſZ½­D.&$$%&&%%$%%&%&%%&'('(''('(('&''))&%&'&((()())*)**+)*,!-,++,-,.-,,,+,,-,,--,++,,,-..--..-3,***+,++-.,,+*++,/36875/,**)((()))*)))*)))**+,,+++*)(' +(''(('((''()(''&'''&''('&&'''&''&%&%$$&'&%&&%%%$##%$###$$##"###!"""##"###" #""!!"##!! !"7!! !!!  !     &.mӽ󅔟¯´о膂٬ɸȸ˳܈¨²ǯއö芅܅ú׀թ͵íͽƶš٫̽鄈ޭ恠º̿ĺꃉ쟫膆㍉7@6,34*'G/+7>GKKIFGNRSOHCA;>?8B?;CCBDEFEBAAA>==<6683,)$ ?95=/EE4;H14=;BDJEDA>A@DXI[B]a'-1=MN2@C[d6;9/XXR[337;>PZMDGNHKLMNONOOPONOOP +QPPOOOPPOOPOOPOPNPOOPOPOMN ONOMMNNNONOMNMNONONMNMNMONONNNOONNNONMNONNMNONOONNOON OONNOONNONONNONONOOONONMNNNOMNNNMNOONOOONONNOOONONONONOONON ONOONNNOPOPNONO NONONOONNMMNONNNOONOOONOOONNMNOOONOONONOQNOPPOONOONOONNNONNMNNOPPNONNNMONONMNOMNONON(MNNNONNNMMLMNNMMNNNMNNOMMNMNMNMNONMNONMMNMNMNONMNNNONNMNNMNNNMNNNMNNMNM NNNMNNMNNMNNMNMNONNMNMMON#MNLNMNNMONNNMNNNMNNNMMMNOMNNONMMNNNMNMNONMNNNMMONMNNMNMMNNOOMNON5MNOMMNNOPNNNOOONNOPNONONNNOOONOOPONNMNNOONONOOONNONONONOONOONNO NONNPOONNPPOPOPOOPPOP OOPPQPPOQPRPPQQPPPQPQPQPQPPQPQQPPQQPQPPQQQRQRQRRRQRQRQRRRQRQQRQPQQRRQRRRSRSQRRSSRSRSTSRRSTSTS"TTUUSUTUTSTUTSSUVUUTTTUVUUVUUUTUVUVUVWVVWWVVVWVVVXWXXYXWXZXYYXXYXYYZYYXZZYZ[Z[\[\[\[\]]\[]]^\\\]\\]^^]\]^^_^%___^_^`^_```aa_`_aa`a``aab`cbccdcbcbbc#dcbbdcedceefeffg3ee22fgee332fh34333454 55455656567 +8887788987898999:9:;::;;<;;<<_X[[VV<12=F;?DFDS:89F6G?HPKFBBEJ%%&0)(--01:@0/AA;@??ADCE@AFHB;9;AGHDD%&''LMMKJJ@@DCDIKMLNOOPQ()('(('(''%GHK%%&&%'(%K%CF&'F%GCEFGHGHA5046<<@GGBEA89=>?@?>ADA:7942//1+--,.0?KILQEHMJDB<<9::;;<76568=;420235654:@?@@@BBE=98878ADBEG%&'(MH@BDEGGEDGFAEZ]^^^]^_``__^_```a`b__baaa`abbab`abbaabcbcbbbcbcceddcddcddeddcceef heffgffggghgfMgffeffghfhhhghghhggfeegffgihifeeffhlorpnihggdeeggfdedfgfdfefgijihhgffgfeeedeededcdcdcSbbcbaababbcbbaa_`ba```_``aaa`a___``_^^]^_^\]\]^^\]]\\\[\\[Z[[\\[Z[Z[ZY[ZZY[ZYYYZYXYXWYWWXVUTUUUTUTTTUTTS TSRRRQRQRRQPPQRQPPPONONNMMNMNMNNMLKKLLJKKJIJ KJJIJIIJIHHIHGGGFGGGHGFFFEFEDFEFDEEEDCCDDCCDDCDCBABABAAABAABBA@AA@ABA%BAA@@@AAABAAABACBABAABAAABAAABAAA@AAA@A@@@ABDEGt=HQ?=::CFH@<6457314c__i\RVV`el8:==:640/-5=644XOR]g3TKCGOTURNHFKJCFMTWMD?@AU32^WZ8B>@753>*B*DIB6WP93:SNKO*++3AG$##&$7D<;:42FWT)3=>@H(%'%BECM-32.OM'.;13<6,8QG225.(B<%E:=:6=<419! #BKC?DHMVH'5**2/..-//1300AGBG\QIE*?BGFDC?07870EMZE:7AIPPD=GPJW\]\]^^1-'&(())'P\wp__VALH5;HEQrC25 &$!!%*,)$ ")#*, ""!%DC<3*,-%./30187/.255/01112/)%?$&K)35?I7-,+-%!!s$"!#"  ,-.15553X=CCFJGEEFGHE:8'H]ac__288OEJ=;)(%%''&%&LB(>>69KI<35JUUXUOJNIF'./17562-*)('*UONNHA'044) !./2533478;::96788:<=>>===DDCCC>:9?@?90'.7>BBB;7>ACCCE97)#13-383024$$%!$0/*)-01/("$!%$"###"#)*'(*)"&&#!%'&'*))(&%$$$'./)($! !#%&>!%$#"%9'?4/.$$"! &-5" /."!!#"! 799'$&&'+((./17D,C(+))*E5%('&&%$%%$"!! 147:8.&%(h+12./-*)-((//-+)+,/1442.*!+/.,)(('&&$$$#'+'.+&/"#,+"#//13%2*'('&%%%&&'-,*)))**+)*,31+-4.,H49=&1C62-0133'" #+45530178:5.,*%''$'% "$**),002.-0;53.0/210'()./*!!%(&&#"'))*((('&%$$! 44!0'&*+0.+(&*),=.r"0;!.: +*3::9+)#5E:7?bׄԄЄ +ЄaՄ5ք׀ڄ ׅ_քׅՄׄӄ^للڄ#ք׀8$#{sWKF) $ ""1'&)5+4-3520/20/!! !!#$# #%$"''&$$&&&),.)(('&&$'(.1)''%('% # !!'! ! !#!"#%'&&()+*,,+,,##$'#%%$$&%&(&)%#!',-)()+0.+/-&#&''%%&('$$'+($!"!&&&(!"$"!" !"#$#$""$(&##"$$%'&'+///-,-.1+(&$$)'%%'56212259::88976899=@EJMPNJIPZxKĿ솲=EQ;9528:>93.,*+*'*QNR`ZNTRX]a1242,+,)'%(.'$%B@@CL&>:59?CDEA;9?A??AEGA?;?>M+)LFF)+(*'%&-!8#25.'A>-(*<837 &% .0//)&3@= %&*.%#"#!#,)++,',+2! 30## 2($,$,,#%%$,(&)04;1%u +,),;2+)&&**)))!"! " %"*(.5>0,*06::1+2;5C@? "",$%*%''\-;7851,-)'2/,*&  !!  "#"##""''%%$! ! + !" #$   +  + + + + +     +   +      + +   + +  + + +x +  +  + +     +  % &~}|} |||}}|}}|}|}|}|}|}~΀}~~~}}|}~}~}~}~}}~~}~}~}|}~~}}|}|}|}|}}|||}|}||}}}|}~}|}~}|}|}|}||}|}|}~}~}~}~}~}~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~ آ·»]ŋ䪁뀒Ȼ(     0  +  +   !  !!! !  !!! ! !!!"!"!! !!"!"!#$#"!!!# "!"#$#"##""# )ƻ뉐ۮôYԽ„Àʾ¿¿v;*&&%%$#$%&'&$$%'&&&''%%&''((' ('()((()(''&'((('())(*)*)*+***)**)*)*))*,+,++,+*+,-,--,--,-..-. -,+++,--,---,+-/369960,**(('()*+*)+,,---,+*)*)))("'&&&'(('((('((()*)()(('(('('%%'('&'&%&'&%$#$%$##"#%$$###$%#"#"""!!#""!!!""#"""! !!! !!!     #"##E*&3>GJLFADCBCBGHA=:;AJNQE=CHJHFDEFD@>AEKCFJJGHHFMTK@ITL;7><;9;>:;ABAA?>@FFGEDAB>?>?=;:7660*(!<99-FI>;:667<>BDFBACBGXRZGI_8"!/=_9/;FIGL<85PORvM6m9_l?;8LQC8]XZULPZ[06B9_SIJL+039B@6012G%??C@<===645865.;A%'M(*%,01236798:;;=AAADFHJHLMLNOPP((PPP(()()()(%&'$$()''$GH$$$GC=5148=GB=;?DFGFGA<8;;<<<;<99=<><97985321/.--*/:BEHKGGIHDDBA@?>==;99<<7:9421422556;A?@@?@@A9797;CCDEH&(((LF>=B2CDCBCFDA>>?<8;=>ABEFIHGIA``\]]^___^^_``__`:_``a`a``a`aabaaabbbcbbbabbcbabcbbccdcbdceeedcbdddedfedeffgf +ggfffggfgfghhhggfhiiggfeggfhgihgfjnoqonjhggfffgffgffghg hhijjiihgfffeded cdccddcdedddcbccbaaa``aa```aa`a``a`_^ _]]]^^]\\]\]\[Z[ZZ[[[\[[ZZYZ[ZZZYZXYYYWXWWWXXVWVUUUVUUUTUUUTUT STTTRSSRRRSRQQQPQPQPO PPOOONONNMNMNMLMMLKKJJKKKJIJIHIHHHIHHIIHHHGGFGFHGGGFFFEFEDEDEDCCCDCBBCBCBCBAAABBABA@ABBAB AAABAAABABABABAABBABA@@@A@AABCDEFyrca??=<6gi8@H9YFP+43898;5aOLIFCEHKNPY26750,W+293/ZNLOX01ZUQOTUVVVTSOIFDJT[OC?Beg<2baXP8@>5-4:,W4JWRA7[::0SOMO)+-/9F&&##F8P;953/?OMQ.:=C%&&&$C:51-0+SON+26883/SD>8:8(E>="&&&%%J2*.8KPOE'*(2.-..1221.+/:BCL;>>=BDGHEJ<;864AK:/.38??IP;PthQ=GRUKFYii_ebe:ib626234-/,*,,+TNO^]][MNF^=L?N=A0.G  !""!%'(' !#*-=/ &*'#C?:=764.--*+ %)-0///123246/02311001*'()K+43=:./472&!##,.*+*$$"#)023443FJMGFEFKOSTQJIC5LT\]Z]257QFGL)(HDE$$&&FG;0=4<34:4/;VWTMFBEJC@#*--44//-,+,+'KFN(B$&&15691#(40.-.1688:=?<;9725:;;;>=@DEFD>9;;58++4=CD@?;?DGBCC4& *7763//6799/&#%%&)'&$*/+&$$##$"  "#$*)$%$&,&!&%$#$'')-,*,+)(%##"*)&''"."!!!$%$"$%#'#*+%'"#,*$! )9#2 $%&#!  5.% !%)01-.03E?8$')),,I:)(&&('&$&%$$#!5' $&67-&%(131..*)+-+,00,,-21*,.-//&(/-++)'&&&''&(*+--&&&0%*1$$0.-1<'+'&'%%%&&'(+/1/*)(++.13+06209"47B'+@5-./027"' #!*0373/0-++*--(%$%)-/.##&%%"!"%$"!"'-(++)''&#&*!#(" "#!" ")),)($#!""#!46."&$!"&)+/0+*+(-62k&%3 !=''142:,)'98<_@,R,KV652@F9-ICCA<75>Zۄ҄ ф?фYՄSׄ؀؀7ֆ-ل׀ ۄ#߄!܄߄& +dOJ.  #)$)=*!466.1/**)" !$&!"$%#"&%&%%Y"$% #$%,*(*)'&'&%$'))*(#%%# #$ +,5 !"#!"!!#&'&'&(*'*++,+,+,,,f%&%$" #,*'%(,.-.//+()(('&%&$$'&((%$$#"! &'(($$""!" !#""$"$%'$&%###$##&&'+/-.K00*)(&&*%%&(532123678::9677=<;=?@DGJLOQWhȀ !ǬЂͩ<9420`b16;0R?B!)(,+,3-VJIEDBCCFGFL),*)%$F"','%I@ABD$&FHFEJJFIIHFDA>;>DJB=>;OQ/'QOIB+-*'"&- ?&9EB1(C,("9964!&)";0.+)&2;68 %'*$:<;"!! 3,)%&1)(!0%##*6'&!(#.".46,k"))/ #!"&&--*,"!%,!"&+*5<*:NF7+4<<3/FMQONG><<983/5<>CGSZTEDGBKLGA>>@C?AFKADA=<<>HUVKC@GC970(69<>@DCA>@>??EA?DHB@?=<;;98675,*(B99: 'ADCF08GB;7:97FGILDN+ZpPGPV"#4EA,386<;;=:9<9877754554//.]\Y.6<=ABAFJFFIFEELLDCC@=?A??;5324D69>@@@??CA8898<:68=>@?>?BFHFHIKLC;V_^^_6`_`a`aa`abba``ba`bcaacbacccdbcbcbbbcbcccdedcdceedededdefggfgfgfgggffgh ggfffghijiiihihiihgihggffgkoqrrnjhffefghhggffghhhjkkjihhghggefedddeddeddedddedcddcddccbabccbbbaaabba*`a``aa``_``_^__^]]^]^]]]\]\]^]\\ZZ[[Z[[Z[[ZY[YZZ[YYXWYXXWWWVUVUVVUSTTUTTTUSSTTSTR QRRQRQQPPQQP QPPPONOONOOMNMNLKLLLKKJK JKKKJJJIJIHIIIHHIHGFGGGFFGFEFEDEDDCDDDEDDDCCBBCCDBCBABBBAAABCAAB@ABBBABABBBAABCBBBCBBABABABABABBABABAABABCBBCGH{\nprIOPC8=;6-%BN3886:;83ZSQVTHBACCDMUUW\//,R'..LHH896H]TH@?>AFIHHA7;?<;@CME>=@c7CGVOKBIKJLEK..32=7X7j1--632-OML+036>(3*$$@-DHE8AZ12(2:@D#$&%$G>2*(*%)OJD.6692)(@51@F*010.,$J**('+.+)++-+,.7;3506/GEA)%A745;  )0-(?>>>=A;H3-'.-.-,-&''&04056=:98::7879H>::747=:>810//11/:MFA.+-23:CHMRQUPL^^68721:>6-)19433Hf]ZSNF98F>9WKHD1> !#&(.'3!$$'(2% "!"$""&+-)%%((GA:A=:<90!&+--+(+/1021/232212+(@;&8FI8,-39641-($#!&57575*-)%!%-5324]DJNJMNMQOHA=IPE?DFTZYT_76IE,*&DABB"#$DCF62:50213>*MD??@$'%!"&*,11..,+++(JF@@'.)&)./45:?1#21..116:9;=?=;:8767779<=??@ACDGE;8;;9994&#) 2;3=AB>4&+9;532325:;9( "!(&!!(&#$)% #$!!%!'(+!$)(&$#$&&'('),*&')'#"!$"#$##".-!! !%$! "#%!*$"$0&$#"!!!!6#4 ,0, " 9.''&)../-1<;3$5A"%()(*CF*)'&v$" ;0("%?,..--,..,+&)./,-02///560/,)/*)10,+++(&%&()+,(/+).,!1'0:"321-0$/-(%&&$%%&&%%&+120/+.++/2/'*4:637.51$',A6//-27;#" #-#,16:::5.+*%"##&(03."!!"#&(!"!,+#"! !(%$(*$"" !-4.6 ".+& #$!0//1'+6/(*5 #+"*02H=*'C:=N81*GHQ099?;1-OGCA="%&153*$"#&'?&*,)C,:&&(-7<!%$$&$%'#"%# %'$$&$%')),*'&$%&(*,,-...0.)+*))/)&%*/1/,.02477:;;75565;AAA@?AEHMJILW^u +7Bp꺉źqlACC:032.(5<&*,)-/,+MIFOPE@?BGFFK%%#A$$>:<.0.7C@93326=A@B<3355499C=:::Y-26AB@5:76949# $$,(=(%!%##634 #)"9:7-4D#"##%++%>82! #,% ,,)  -,',&$ #! ! %"," ! +!!%# *90- $$+57:86:34A?%%$!!')###J4340-* ' /)($  + + + +  +   + + + '!  + #%    +  !!"<#&('&'&'(%#$-6.&-.8>>;@%$-&!!!$!-'!!! '&# # !#%%$""  !$%&&$&''(%  !"$#"   + + +   + +   +  +  + + + + +  +  +     +  + + + + +   + + + +   !  % ~}|}~}|}}}|||}|}|}|}|} ǀ~}~}|}||}~}~}~}|}~}| }}}||}}}~~}}|}|}|}}}|}}}|}|}|}|}~}|}~}|}|}|}|||}}|}|}~~}~}~}}~}~}~~}}~~~}~}~}~}~}~}~}~}~~}}~}~}}~}~}~}~~}~}~}~ ܓļǵûſ񀄀c􏥻ȴØ䃏ꃐ΅ɽ     #   +  + +  !! !!  ! "!!"!!! !!#"!!! !"!! !"!"##$#"!""#$#"#$# %##$$$%$#$ /۴ܹݹ»ϜýƻļVǶ»ɿt#%&%&%&%& +'''('(''&&('(''()*(()'()(()(()*+++,,,*())*++*+ **+---,-.../ ..././..-..--./00/.,+++,*-./..-,,.149;94.+)(())++,**+++**+,,,./.-,+*)())())*)((()((())()('(' &&%%&'&''(%$ +%$$#$#$%&%$ ##$$$"###$$#"#""##"""!&""!!! !!   "! ! ! !  !     +" <}ٝⅮõðöưՐ񀆘艜ɶĦ˲Äƻڅýɷÿ滢댞񊊃ɕðؓۦ݆􈎆ǭžձ셝޶Ӹɹ䠞56\a6F 26;.,=DBEGKMLFG==QJCJF:6B?AFIEE;8758HRNFAD=34/)&*-4:BGA?:;=?>D?8>DCACB@=<7550*.-*#?<"6@6F=&9CI;53.LFTYF#*+bVKFdA9 )5LO04?Vo\=6eTX^vB:bUb;CELD7fe^XWPLRSW_^793PMQ/216@C>766*BT72U6;?1WI<054@ISSPGDCK_APQOPPQRRQRQQQPPQQRRPPQQQPQQQPQPPQPQPPOQPPOPOPPOPOOOPPOQPONONPOMOPPOPPONOOPONO$NOONONOPOOONOPOPNNPNOONPPOPPPONNNPOPONOPPONONOONPONONOOPQPOOPOOP OPOPOPOOOPPPOQPOPPPOOPPPOOPOPOOPOP +OPQOOPPOOOPOOOPPQOOPOOPOPOPOOOPOPOOOPOOPOPPO +PPOOPOPPOPOPO NPOPOOONOPONOPONOPOPNONPONONOONNPOOPPONPOONOOONPOONONPOOPNOPOOPOONNOOONNONNNMNONONONONNO NOONOOONPMNNONONNMNOOONNOON +ONMNNNONNPONO MNONOOPONNMMMNONONNMNNMNOONONNNMNONOOMNNMN1ONNOONNMNONONNNONNNLNNMNOMMMONNMNNNONNONNONMNNOONOPOOOPNONOPOPOONOONNOOPPOOPPPOPONONNNOOPNO PPOOOPPNOOOPOPOPQPQPPPQQOPOPPOPPQPQPOPQPQQPPOPPQPQPRQQQRQPQRQQRQRPQRRQQPQRPPRQQQRRQPRQQQSRQRQQRRQSRRSRQRRRSRQRRS RSRRQRRSSTTS TTUSTSTSTTTSTUTUUTUTVVUqTTUUTUVVVUVWVVUUVWVVWVVWWVUVWVVWWVXXWWYVWXWWYXWVXXXYWXWXYXXYYYXYYXYYXYXYYZYYYZYZZZYYY[ZYZ[[\ZZ[[[ZYZ[[[ZZ[\[[[\\]\[]\[]^^^]^^\]^^^]^]]^^_^]_`^^^___^^`___`a`_`a`babaabbccbbbabcbcbbcddedcdefeefeef32geggg4h44334345 +4545565655656787889998989:9:::;:;;:;;;<<<=B]ydO83038=>;BLc6;7M65OKLJE58FEGI#&*,($&(+/*1A@659:438::@><7:DK&%GEEFGFBHJHMGFIJLSSLKKGDCACABBABCCC?@@<=><9967861)6O)'<)',.1234655768:=<<<@@FFJLJIJNMMNMNPOPQPQ((('(()++))*+++***'+)'&'H:312:JA?<>@EIIHG@;89<<:;;<99::97663677621`]]\Y4>>>;=FLDBGFEEQSKGIHEEBBD=873556656:@A=?@AEC:989>KHFDJNFFIIE@@ADDCBDGIE@=979<@A@?<>@ADHIIHIEEJKLL?;a__^_-``_`_a``bbab`baaabbbaabbacbccdcdccdcbddcddceedcedefeffdfggffghghgghhghhghAiiihhghgfhhgiihhhiijiiighghijijkjjhhfglorusolhghhhgihhffgiihhhjhhljhgggfefeeddefeefeededddceedcdcbaab +aaabbbaaba` _`_^^^__^]"^^]\[\^\[^^\\[Z[\Z[Z[[[\[ZZYZY[ZZYXWXVWXWXXVWWWVVWVVVU TTTSTTSRSSTTTSRRQRRQRRQQRQQPPQPOPOPOOMNONMMLMNMMMKL +KLLLKKLKKJKJIJJJIIIHIIIHHJHGGGHHFGGFGFEEFEEDDEDEDDEDDDCDCDCBBCBCBCBBBCAABBBABBAABBABABCBCBCBCBCBAAABABABDHKnٙIOKHCA@CrbXY]ac453+%?F,DGF@;B>/03613=FKD>9=KZ<:-.=>4cSQPR++,+5<<6RL*1-.3)&&)1;,,*5)?EG%GA937"#"%)).0-&&$7&%%%))/01/.&=976;>Im]:<04_+357=:TNWZWL@IFD?6TG[_(9$2213#(,-.'!"$&$%!!"##$$&*00)(*-'GD;32;#$ 3<$).//%"(0553456420111/,O@;F1IP6+.2-*/1-'-.-'#!+8:::6,$)&*2122>;;>?A><:-'*EMLDFLW21.-88YKH'J"""$'*+$DFD+884049?D>>ABG%&&'%),.42/,,++)&ID<&2/)(+./47;4)24105767;:9:;98878545<9:@DBDDDF?898;<=:5.%'83&4>;:A@3.+*25;622657:8631)*$!# " "$"!"! &'()-+*%''&#$$$'+.+*,+(($"#"j!!!).,! !"&$"!"%0$#"*%#$(*,9:>%$ 43321344$!>4*(+--/0.242111.)=*'&%$#%%&&%()-10010.-.2/(&/799;A>96$(1C8-.0588"#?C$*!(.213;?<:51,)#%"#$((&!!("%%!")% $##&%#$$! #/'./(.#/+64$5,%:- .9'$-AYE,&J?DLa9.I=I0:>E>/QLGAB>=CDFOQ.0)>:?#''*47/(''-8$ ;'*.%@6,%((07?@>759MրՀ݅8܅Nք,لքTׄGڄjڅـ݀m{R<#!'9#,+<,'77521%'--13'% %$"$&#!#%&##&#)%#$&'+.++++'%$ $"%%&&((&"##"  !! %7  !"##$&&*+*+,+)),,---/101%('&$$&(*+++('&&)((**('%')*(&&%'(')*)KHID>#)*'$#',&"&%# ')&$()))(*.*(*'('()&'*.,+./022,,,+,2-*'+.)(-1.-,/24658:<940.18>DEBA>?ADJNMLKIEFKPUe; ƝJJA@A@?>pcYY[XU,-+$25!3781//341WSY[RRLMIGDHID<>B=A<3- <:?ADDJ/)E;=>;A899-,00.,6=@=86:AG-*#&20'LDC@E#!! '*)'<5$#"#-"8>C37G� &%**'! A5 & '%$!#'!!+/,+)"$'  .$""# "32 )#9F933?#*E='( "<!!$#.(-23,$*(&!-'44  + +   +  + + + + )$ -"&' +    "'32))08'(?1,% #$#!!"$'$"  "!#"!! "!"&)&''&&" !    + +  T +  + + +  + + +   + + +  + + +     +    +  +    0    % !~~}}~}|}|}~}|}|}}|||}|}}}|||}|}|}ր}~~~}}}|}~}~}|}~}|}|}|}|}|}|}|}|}~}|}}|}~}|}|}|||}|}|}|}|}~~}}~}~~}~}~}~}~}~}~}}}~}~}~}~}~}}~}~}~}~~}}~}~}~}~}~}~}~}~}~}}~}~}~ Ѕ蕧ϻýΤ̱[抟®ؽ싓瀗ꃖ򟫫Ѐɿ}      +   '  +  !  !( !!! ! ! !""!!"! !!"""! !""!!"""!""!!""#%#$##% +[̸ʶ޽¼˜̽ʼ¿XҷȽ.-$%'&%%&'(((&''()('()(('())((('('''()*,+,*+***,,++,,+,,,---.//0/.//---.00//0$10.,-,,++,-,-0/.---/48;:95/+*)(()**+ ,++,,-///--,*+)()(''())()*)((()()( '(()()))('&'%&()((('('&&%%%$$$%%##$%$$$#$##$#"""###""#!"! +"!!!"!!""!    !        $! =.O炑Ⱥ􂎔˿Ū༠πꂋމɸ友򃇍ϾȚ݈焆ֻű;򤕘櫰úǬ퉠񙗛­퍞п򄆆⁃񕜗 ^b@7X />?BFEDBKSQH?=DA@CHKMHFHFB=?3EK?;BB94<>EFC@C<5325;?A@F@582-0.+)*/29997889<951,(-/+# !6?<@U/#6FD26+7GW.%!$G]QHDOe%:!(?PWC5]Z:HHPH:b[YTVUSTUS[\e;80OP.767>B=-29,@T.7O7<>9\SB/67DNRLIGE@GW@QQQRSR QPQQRRRQQQPQPQ PPQPOQPPQP OOPPPOPOOPOPPOPPPOOOPPPOOONOOOPONOPPOOPOP OOPOPOPOOOPPO POPPOOOPPOPOPPOOPOPOOPPOOPOQPQOPPQPOOPOQQQOPOPPPOPPOPPPOPOPOPQPPOPOPOQPQPPOOPOPOPPPOPOPPOOPOP-QQQOQPPPOPNPPPOPOQPPOONNPPOOOPPOOOQOQOOPPOOONOPOPO PPOOOPOPOPONPOOPPPOOONNONONNOOPONONOONOOONOONOOOPONNOONONNNONOOOPONOONNNOONOONNNPPONONOON ONOOONONON +ONOONNOONNONOOONONONNMNNOOONONNOONOONNNONNNMONO NONNONNNONONON ONOONONMNOOON OONOONNNOONNMNLMMNO NNMNNOONNO NOPNNOOONOONNOPOOOPOPOONOOPOPOOPOPPPOPOOPOPPPOPOOPQPOPQQPOQPOQQPPPOPQRQPPQQRQRPPQPQQQRQRRPQ RRRQQQRQRRPQ PQRRQRRQRRQQR QQSRRSRRSRSRSRQRSSRRRSSRRRS +TSTTSSSTTSTSRTSSUTUTTSSTTUUTUVUTUTUTU VUUVVUVUUVWWVUWWVWVXWXWXYXYXYXWWXY ZYYYXXYYZYZYYZYZ[\[Z[Z[\[Z[Z[\\[\[\\\[[\]]\][] +\]]^^_^_^_^]^_^]*^_^^_^_`__]_``_``___``aa``b`aacabbccbbccbbcbcbceedeeded2eedff3ghgg43f334 344554454565556667 67888778878889:99:;<:;;;<8SseF5/.*+,/+)/Dc9987A>?CFG@?<98<:;:76740'CA'&()+-/004524567:8;;:@ADBCBAFIKLJJKLLMNLP(()(PO'))*+**+++*+)('('(*+-.-)(*Q;448?KF@;<@FJHEDA?:4:99:687787554434466331\^\\\3<@?=?A><@DHFORQJGK KGGFG=:878C77;@@@=>@FC9:99;FJJHHEGILIGDBCCDCDFEGD?<:;;7;>BA?@A@ACEFIHJLKIIPMGe_``___``_abcaabbaaacb"ccbcdccbdddccdbccdcddeddeedeeegfegfefghgffgghgiihhhih6iijiihhhihhhii4iijh4ijjghhhghijkijjiiighlqttspkiihhgijhihhiikkllkijhihgfggfdeefffeeefeeedcedeefeddccbaccbabababbb```_^___^_^]]]\\]]]\]]]\\\[\[[[\-[[ZZYYYZZYXYXYXXYYXYXXXWWXWXXWVXWWVVVUVVUTSTTSTSUTSRQQSQQRRQPQQPOOPOPPOPOOONNMMMNNNMLMLMMLJKJIJJJIIJJIHHIIIHIHGFGHHHGGFGFGGGFEFFEDED +EDDDCDCCDDCBCBABABABBCBBBCBCCBBBCDCBBCCCBCBCDHg[mOJKMNWPE;;F>je^[``de.,)/50;KLIEB?@?92YPME<979:AC:1000/.-,/16>"&%$$F:TY=NI`<8R-9BG%&(%$IC<8300/-2.6B@?;:2RE63>%.'%(*BF;''$%$+.-.1,05D@:D61@6CDF&#=%$$&#%&'$&+*&#%( "*'"&(-.//0(AH$(*/43457696237>21789:<:9650&#$+'.75''.10/35107B'CJL._pjWX[ZZQ_b\],,+/=6B[_UGMJC?74ISZn@@601"'),,*&! "$%A- "#%#!#*/)'*.*'%G9.:#)(<2:"&-474-#(461/23/00100-'#'.Q(8D2-2433/+%*253/,'# #,6;98.##.;X(,57:60*')/B(&"D#(131*'7XGRRAA@!#&'&#A?<1+244>'(#?=AFK'()('++-010,**('(IA>(571-*&,0242+340/12349;8667678;756=;8?BCCEDHD<:99;<;530 '"#),4?@61,'',,12013453897;5"$("'!!"%%!#)&,,/0"(-+%#G$&*+*'&&$ $!"$!!'(+!#""&'#! !$<)( "#%%%/4+/#!(+&" 2."""<.*,/0-225025!$$4!""F(++*'('())$### ;2(!(A03-*)**-1410233242001.0/*-/.--/,)('(*-**''-6*'-*+@A,.,-..:?*''+&$'&''*+'(,-/3.+../,+&-6:>BE%# ')0B7-14990H=B)(:%&+0/0-7AA80.5.*),*(%$&$  % ! + #!"$#$" ),-@")+)1 "-*&+@ !5G6+3TE2QHAEGS66+MF.=?F@2NDB?AA?BEDMQW2.%99#)+.472$&* +9"$2)-/+C>,"**3;>97975F9ׄ҄Ӏ؄؅ڀ'݄ڄن/څـ(ڄـ#܄لvgS2!)?+0*4, 8933*'/3<*)!!##%#"#"#$$%%%&$&)*)'%&&#"#$%&$$(*)$#! # ! !0, !!" ##"$$%"%%$(**)(**+---,1..& (($""$'((%'%&$!&&&)&'''&'()&%%'&(*(('MMMLG&***'=('$#&))&(*)&%'('**.()))+))*((*.,,,-.1/*-/-,0//..*,,.10..1134683/,.45:7>BHJA98<@E&*(&.@/'C'(($"$#*+(*'*&!"!"   "*&8B0:4F,(: $&*,($$ $ "&$#" 92&$+*2&'"'($-)*&$*# %" !()69>D>59<<>6?@><" *42)-+%#'.2B " +   + +  +  ',"   + #3$SMNNLPTJILI=691@?14443/).?EG<8<720--,+-024114>87?@?=@AA?>;86.)+*)$  "*16FHfP;6:E/$+(C+,#;ZEKF;QD3?)1RSRSSSRRSSQRQQSR,QQRQSRRRPQQPQPQPPPQQRQQQPPOPQPNPPQPPQPOPOPPOPOPONPPPOPOOPQOOPOPOQOPOOOQOPPPONPOPOOOPOPPO PRPPQPPOOP OOPOOPPPQPQPPOPQPOPPOPNPPQPPPOPPPOOPPOOOPPQPQOOOPOPOOPPPOPPQPOQOPQPQPPOPOQQPPQOPQQOPQPQPOPOPOPOOPOQQPPPQQOPQPPOP OOPOOOPPPOOOP OOOPOOPONOPOPPONPPQOPNOOONNOPPONNOOOPO +NOONOOOPPPOPOOONNOOONPPOPPOONNOONOPO%PPPOOONOPPNNOONNOOPOONOOOPOOONONNONNONONONOPOPOONOONONOOMNNONOOONNNOMONNOONONNNOOOMNONNNOOONMNONONOOONNNONOONPOOPOOONOONNNOONOPNPPOPONNPOPOPPQOPPPOPPOPPPOOPPQPOOOPPOPOPOPPOOPQOPPOPPQPPPQPOOPPQPOQPPQQPQQPQPQFRQQQRRQRQRQQQPQQQPQRPQRPQSSRRQRQRQQQRRQRQRRQRRRSRSSRRQRSSRRRQRRRSRRRSTS"RSSRRSSTTSSTUTUTTSSTTSTSTTTSSTTTUUTSVUUUTUTUVUVVVUVVTUTTVUWWVWWVXVVVWWWXXWXWXWXWX WXYXXYXXYYXXYXXYZYYZ YZ[ZZZ[[[\[\[\[\ Z\[\\[\\[]\[]]]^^]]]^^\__^_^^^_^^``_^``__`_``_`a`_abbaa```abaab(aacdccbdcbbbd2ddecefeedc2ff3ee2d333h4hh4343444355445444554556556656 77677788989:::9:;:;<<;<=;==<=Rd1/-,+((%'&$##)O=@f:3&QKH919CK'##J*('+))//.>G;7;90003477:=:<>K'(&%K$&%&IIJLHHGIMIEEJBC?=@>=EA;9@A=<989;=:86454.(G1'')*)2/2356778:;==A>BCEGFGHGIJKKLOO('((PO))**+,--,+*)***'MJ&)+,..+*+PA88CHJICB?=<8;99;7974655520323454211a_\UW[17;@<969?KNHIKKJKL`MRSOC=9688::96:BB@@ABFD;999=GIHIG@AAD@?ABBECHMNKLPTJ``_```aa``_``ababbabcbccbcbdcddffededbdedcededfeeefefggfhfffghghggghiiighihhihiihjihhjijijjijihjihhiii45j5ijkki4hiihijikkjihihjnrvvuojighhikjihjihhijllmmmkihgfgfgfggffefgfffeeedeefd$ccbbccbbdcbbbabababa``a`__`___^_`^_^]\]\]]\]]\[\\\[\\Z[XYZZYYYXWXXXVWXXWXWWVTUTUTUUTUSSTTSSRSQQSRRRQRRQP OONOPNPNNOOMNMLMLLMKLLLKKKJKLKJKKIJJIIJJI +HIHIIIHHHGHGFGGFGGGF EEEFEFFFEEEDCDDDCDCCBCCCBCCCBCBCCCBCBCBCBBC BDCDDCDBCDCBCBBBCBCCCBCCABBBABBBCHKmwoq=JE5;<5UH@fW>nj].../035@@89AEECC?;:3_VPLHCGEF=@EHLX22.YSMN-+0/ZSMF>V.A=FRa763`/ZWX=H@@EG>@>606EM;86200142,,?E%&&$A)IBDOJM6K[*3AEH$%#"#C?64012.,-1=BB>5*HRG%*.:4,020;6*"$'&$),).3217K;/*%A:CG&)%< #+'#')'&&'*%)$"),%$%',-.-,'$%&,*(*/0359MB/10,0/-((+.,.*,+),.10,*%%#(*FGKHP*-0+.K?@"+UAHK`eOP]30740-56VkXTCUL>A<2LX=TkL*;OF!%8#&'+-,(# !## -!#!!"$),(*-*,*'%@;D'$B=8DL-6876+&/2()-121//06.(%(-1[)1.08786/))/530..*)(#7:;:3%&*G4@><52.-4=""!$",110,1VCMf]>:>"$$#FB470#69B%%&$ ;=<5266!%0!%#,-,1452/.6<?04;:,S>4%)!#&*++)',8=:.'->::5.10)()% #%)) ##""###   07J=* &    *(,/#>O4'6;-L@:CEM\50/QV:9072(C@>DD@?BDLRS//*A<"')/==3$%8+9#**--.%5;')3><1/686Aׅ3ԅׄwۄ ܆z݅Jلللۀ\ۄ(ڄ9݄ބHl[," 5-3L-%?76,'/7=6 (, %%$%'(#$%(*)&%&"% !!#'%!")(#! "#"!! 2!'! !!!##""#%"&%%(&&('()*+,-,,.-(%$$$! !#%'&#$"$$$&$'&$%$''$#&&$&'(''(PPRQML&),-*)&&)/-'''(&'((,.,(((&))++)()--,,--/1),/--21122)-2/2..//0/05876833./0158>ADCGEBDACEDJMMKKSqЀۀ$Cەɱy=B@275.N@3YI1bdW+('''))25-,36987531-QJD@=;ABB;8:?AF&&%EB>!&+,*'#!!! !&%%"5?/&!$"+"H+'-/ ) r&&*&*/&!;%+->@35>" ")/0.%2*#%")32@((%  +    + #"!"%2  +   +.'%!  7-5I># "  $ $! %%'*)&)(#!   +  + !#&         +   8  + + +       + +  +       +    + &!! + +  /}}~~}~~~}~~}|}|}}}||}|}}}||}|||}}|}|}|ր}~}|}}}|}~}~}~}~}~}|}~~}|}|}|}|}|}|}|}|}}}|}|||}~}|}}|}~}|}|}}}|}|}|}~~}~}~}}}~~}~}~}~}~}~}~}~~}}~~~}~}~~}~}~}~}~}}}~~~}}}~}}~}~~~}~}~}~}~} ɼĿѺ¾Ӿٓ`кߡȝ큑ǽ    + +    ! !  ! !"!""!!""! !#"!!"#!###"!"#$$$#$#9g侐ؾ܂ǽӽÿº򃌕VͶ¼̿ì(#%%'&%&()('()'(())(()))(*)()*)((())*(())*+,+*++,---,,+, +*+++-,+,--.//../ 000.--..///12*100/...--.-000/../159;:950.,**+,++,,++,-.00/.,+ *)))('((())()*)))()*)*)))((()))''('&''')))'''%%%$$% +&&%%%##$$%$#$$###"#$#$#"!"#"!"! ! !     .,Fh󂆉샏Ƚ턎泼󆙗ý썳Ԙ¿ů탍጑ǭʓۯ񇔎ʹ񉘤󁅈넅򉔏勚!e^8b)+3@GDD?=FJHD>7AWRSXYVLE@HK@97)8;2347140&3==<:747325792/00.020.,,554<=@>@@?==<9633+''!; /.,*?Ld^N>'7)#%0>S*A6dCL98\5*664C`UD9>h[G?QW]`5:89b:E;43bUSQX\UQRVX[Zg871/1006JLm03.N'-3.'5;<85/)H*8HVK?>EA;@8USTTSTRTTTSRSRSRRSR +SRRRQQQRRQPQQPPQPQPPPQPQPPQQQPOOOPQPOQPPPOOQP OPPOOPOOPOOPQPOPPQOPOPOOPOPOOPOPOPPPOPOOOPPONPPQPQPQPQPQP OPPPQPPQQPQQOPPQPOOPOPPPOPQQQPPQPQPQPOPQPQQPQPPOPPQQQPQPQPPPQQPQPQPPQPOPPQPOOPPQPOPQPOPOPQQPONPOOPQOOPOPOOPPQPOPPOPOPOPOPPQPPOPPO*PPPOOPOOOQPPPQOPPOOPONNNOONPOONPPPOONOOOPPOPOOONNPOPOPPPOONONONOOONPOPOPONNOPONOPONO POOMNOONNO NNOOPONOOONONOOPNOONNOONONNON OONOPNOOONNOPOPPPOOPNNOPPPOPONOPPOPOPOPOPOPPOP QPPPQPPPOP"QPPPQQQPOOPQPPPQPOPQPQPPPQPPPQQPQRQRQ1RQRQQRRQRRRQRQQRQQRQRRSQQQRRRSQRQQQRRRSRQRRQQQRQQRQRSSRSRTSRSSSRSRTTSTTSST SSSUUTTSSTTTSTUTUTUUTUVUVUVWVVVWVVWVVVWWWVVWVWWWXWX YXXWYWXYXYXYXYZYYZYYZ[[ZZ[Z[ +Z[\[\\[[\[\[[\\\[]^__^]]^^^]_^^^_`^_ ^^__^``^_`F___aba`a`_`bacbabaaacbbbcccdccfdbddbcdcb2bcee2dddfeee33e3e3323343433343455545676766678878 998998999:999:;<;;<<<;@A@@<>=666:::;942102,*B-('+('+--/2324!5666867899=?CBEDFGGGKLMNMO(Q())**+,++,**++)'K')*,,-+,-SF=?FAAELOOQQTVTONG;98:;99:@GB??B?@:9::>EHGIF?GKHIFEE+GICBDDCDH>>HE@<89;=>@BBBECCDEGJMLNNTaOa_```a`aaa`aabcbabbbcbcdddcedcdddeddeddcddeefeegffeffgfhghihijihhijjjijjiihhjhhijjjkk65kji66llljiihinrtvspljijijiijijlmnnmmljjiihgghhghgfffgfffggf +gffdfeefeedcccbc bdcccacbbbcbaa``a```_`_``_^__^^^]^]]\^]\\\]\\\[[ZZ[[Z[ZYXYYXYXW XVUVWVXVUUTUTUTTSRSSQSRSRQQRQQPQQPOOPOOONONMNMMNNMLKKLKLKKKJJKKJJIJJIJJIIJIJIIIH +GHGHGGFFGGFEEFEEDDEDCDCCDCCBCBBCBBCBCBCBC DCDDCCDDCDCCDCDDBBBCBCABCDIqKBB\WTLJFIUN@B>E9OTZ19;-177:78<>?=;8741WUPJHIC=4;B=:8GJCA>81.,.6546.-2117=D#%'('G(512202BTO+1>EI&&$"GFFB96543//2;@DF?)AAN382234,*,30.&%++**-*..78304*)">>?CA$)$%').-(#'+-**(+'$%#$#%',/,..*"#!$$%$-/323;8//(&)*(&&))())*+,..-++&"'$>57AL&0.001/(E&(5DPUHEW`c37810,E_XQJDQABC6aI6@DDCED@=>>>==:32<9$%+(,02441/,089=9) "!$'#!!#''%$'+/1.!#%$"""!#"&$%%$# $%" '!!&$ <) +#$ &+/@#,!!&'$2<:710.06 !#"!! :3"3A8;%/.,+++(%&##%$#"@ 0$$@,72)&*/2389743440.0.+20+ -//0,++*)*.-&+9-*41(73&.+,-4,*'#D-*-,#'&*.,)''+-/1.--+)341/-3;>::/"$(&0>886IBGD?)D(-((%&1651+&.?:?=:5.%#&& !#(0202/.,($ !"#"#"" %:LE5( + ( !+9#!#0KE9.1RI80>FOR-1,-L/:2+)LA=;AGDBBFHOP[1/'#&&'.@De-+&> %"(+,)&!2 )4?9..773Aׅ'҄Ԁ܄ۄHۄڄ݄ۀ?لoڄG؄لM߀8!$.09(9<;6.-09"*!!&$$##]%%''&(*&%#%! !"!##$##%%!!!""/  !!!"! "#%$%%'('')*,,+-+)(&! &%!"&$#"# " !""$#1$&%#"#$#$%&''&PQRVVQOQ++-+),*)/)((+-+++,-/...''()+.1.,*-+-++.--12153.12110/./1//244491/71./035:>BGIJIECFHLOPPPSg)ľgߢLCBQHFB<:=KC698=2DJN+.0&'-,--.12453/-+(HHC?<=8538=538>H#$%&HJ'&',*`N>ACCL)C?=>PJ*0/M8?CEC>9;?6326=E'IIJLEMT*0,285.+(&!&&&' "#"$$&',''('$1C6 &,/,++)#! !%&&)%-/5!!"""  )))+' !%+#!'25**9>=!!.)+''0$''6'!4( + +    + !$&!!" )-    + ).(   (-DF6'! !   0  !!""!$&'(('('#!"!   + " +  +  + +  +  +   +  + + +     +  +   + + +        +  +   + !!" " "&}}~}|}|}~}}~~~}|}|}|}|}}}||}|}|߀~}~~~}}}|}~}~~}~}~}~}|}񀂁~}|}|}|}|}|}|}|}|}~}|}~}|}|}|}|}~~}~}~}~}~}~}~}~~}~}|||}~}~}~}~ }~~~}}}~}~}~~~}~}~}~} ӘĻ÷ʿŮ¾g֗ǵӀ􅤹 +      +"   ! !!  "!!  ! !""! ! """!!"###!!!"! """#""##"#$##"#$# R6·ȂΣݹۀƿÿ¿瀄πûƾȿſѼǶ3)&%&&'&'''&%&'()(()'()(()()(()*)*)))(()())*++,***++,.-,,,-,.--,+++,--./.-./00//.//00112/0//-.00/0..016;<841.+*++-,+++,-,,,.0120.,,+*)())*)())*)()())(()*)))()*)('''(((''(#))(('&%&&$%$%$%%&&%$#$$%$$$#$##$#$$#$###"#"!"!"" !""" !!! !"""! !! !    !    )1`wֿ̼〄ႂн؅׽Ŀ㮓ƾËЃǸ񄂄⋉ͭ´°ȋ߁􁫻Է󆇘呛䂗ǟ*݈U587N(14FODBAGCA@@=4Af\Vcd_PI:>C<37==9;;2+,8?68?:5227<9;;97654,*&  ! .5+'/F`cTS?:4487:;=HICCFLG%$GHGHIIEGIEEECA@?=>?;7<>><@C><=;9:9:;;>EFEKB=@DHEBDDHHBDEECCG=?VI?;87:;:<@CCE GGIJLLOQLTc`_a`a"``acdccbccdcbcddbddcefddeedddfeededfehfgfgghgfgefgghighihjijikjijkkk5kjkiihih5jkj65Bkj55kjihikj6lmlkhhjlqrs;tomkijjijjkkkjjjklkijlnnnmmkjjjhhhihhhihgfg.fgfgfggfefgefgeeffeecddccdddcdddbbdcdccbbaaba`_`a```_]^]^_]]]^]]]\^\[\[Z\[Z[ZZYYYXZYYYXXXYXXWXXWVUVUUVUUTUTUTTSSRSRTTTSRRRQQRQPPQPOONNNMNOOMNOMMMLMLLLKJLLLKLLLKJLJIJIHGHGGFFGHGFEDEDCDEDCDCCCBCCCBC DCCDCCDDDCCCDCCDCBCCBCDBCCCEEFHvqqR}HDL\keZMN<:BH:+T049..:7,<;=D<>=750.2453_ZXXKE>65;AB?AQQFOUSRT+.078/NIGH--I@>G-,NJD@9AFEFF>2..39H&%'('&E2B6465:?OMM-=FH%&%#GIKEC<==?<:9GG?43<9:A'-*('%$&%#"*.,)*06531.+,-)&B:7&/-2145-0236*,0/.+(.1,4)3782454<308::;@CCAAAB@?>=<<;:3-7B>("'&).2364/3+,0477;"!#" ""'**##/%&&,10. #&% #G%$&&$#$$#"%"!! 4(%$&& =& +$##(:%'5'" #'%   7./1337!!6##!!" :# =!9(..-+((''%!$%$"#A#%-!(4.8.),0378:98654.11,320'!-0.1-./'+2,G);1.54/"0!.3+)(%+,$.,.-*--./.,)"'),02///0)056258=64B-C& '&.8<.44@L$((4,/&%'-/./.(-KA=FE<,' $$)---21-///21-' ##$###" !-FL=9!!   ).-< !4KD73)8ZG+5GV]432(K3:=RG><:;=CCBDFONT3`,())(,84?,UH)5($+,*&$% /(59+(0524Aԅs؅>܄ڄބ/܅݄لڄ?݅ڀ݀[߄\Al* $-(.5=<52+)27- ! *( "!!$#"%$#$%"&(&(&&%$# !  "! #$""&$!"""$ *  ! R!#$#$&'&&*)'*+.,-%#"%+%#"$"$#"""  ! ##""#%%"#%%%$%&NRUVVTRS\\YWV/.-./+,///.*)220-((()+*+,.0/-,/0+)-0/.21/73//131/0/21.114346/.<3-++0688;AHLLMJILNNOUUYbz+= ^ԄӀľٛZIEI]aPJCD3.170%J*)/((31%02283671-('(((%DCAC=940,4;;67DB6:?BBG%'',.)D@;;%'B=:@'$;73507=;?<36:40-04?%GB=>;9:?QOM(*&,,'"#! !,*!"&,%0*'((+/=42%-0+,-+,()((&&',&$!,(48(!&'%%#!"" $!'+*1,946;03.+?,$#$'1+$)+)2-# +     + +  #&&'* +     #" +  + + +/8;>DHE;2)5:=?CDA?BA>@BFGEHIJF@@DOUOD4)*-14;9/27@C>A@AB?><;;::<9800(" #44+&1OoXS6%F6??MHP>,31m4 &Y=AYK<5,(.LOFDBTIFX7JWm<;;93e=OK@RJIKILTXYYYW[9953/1(0CIC93?D5><8=STSTUSSSTSTUSSTSRRRSRSSRQRRQQRRQQRQQPQPQPQ PQRQQRQPPQPQPQPQQPQRPQQPPQQQPPPQPPQQQOPPQPPQQQP QQPQPQPPQQPQPQPQPQPQPQPPPQQPQOPPPQPPQQQPPPQPOQPQQQPQPQRRQPQQQPQ PQQQPPQQRQRPPQPPPQPQPQPQQPPPQQPQQQPRQPRQPQPPPQPQPPQPQPQRQPPPQPQRPQOPPPQPPPOQQPQPOPONPQPQPRPOPPPOPPQQPOPOPPQQQPPOPOPQPPPQPOQPQPQPPPQPPPOOPOPOOOPOOOQPPQQPNPPOPOOPOPOPOOOPPOPPOPOOOPOPOPPNOPPPOPOPOPNOOPPPOOPPOOPONPPOPOPOPPNONOOPNPPPOOOPOOOPOOONOPO)PPOOOPPPOPOPOOPPOPOOPOPPOOOPOOPPPOONOOPPOPOOPOPOPOPOPOPOPPOPPOOQPPQQPQPQPPPQPQPQQQPQ +PQPOQQQRQRQ RQQRPQPQRQRRQRQRQRRRQSRQRSRSRQRQRQQRSTSSSRSTSTUTTTSTTTUUTTSSSTTSTTTUTUVUTTUTUVVVTTUUVVWVUVWVUUUVVVUVWWUVWXVWXXWXWXXYXXXYXWYYXYXYYXXYZYZYYYZYYZYYZ [Z[[Z[ZZZ[\[Z[[\\[[\[[\[\[[\\]]\]^]^]]]^ _^^^_^_^^_^_^_``_`_a_aa```a``a`abaaa``a``abbcb-cdbcbbeddceddcee2dd2ef3efdeefg3gf2324334hi43345456555656788898989:;;:;<;HC<==:5<=?CCD%KHIICIECFFHJLGEDCCFCA@A1;767;9?@===:<78;=:=99:751+66)'')+'*--020.033456769%:8::>@AAEIFIHIKM('KN('')'((('()+,,+*+*('))+)')NA??ALVQIGMQ.-UTPMKHD??==>;:99894.-,.---*+,,./[ZZY_]^a_^``fjg4;?FLMMMHFRWVLEBBDB@@?CFCCCFI@9;:;>FHHME>?CGHHGGKKCFFEEFG=>(KE=;<9;;9:<=ACFDCDDGGKMPQNY```aaabaaabab cccddcdcdccd cddeeefffe fefeffghhghgghighihhiihhhijjjijkjijiijjkjj5j555j5556566655jjiik66m6mk#mqt::tpmkjjkjjjkkkjjkjjklmnpoonmkjjih ghghgihhgghgf*efgfdegfeddeddedddccdddcedcbcbb`baba``_```_`^__]^]]_]^^\]\]\[\Z[YZZY[YZZYYYXXWXYXXXWXWWVWVWWVUUVVUUTSTRSSSTSSRRRQRQQQRRQQPOPPPONONNNONMNMLMLKKLKLJKJJIJJJIJJIJIIJIIHHIHHGHGFFGF EEFFDDEEEDEDCDCCDBCDCCCDCCCDCDDEEDEDDDEDDECDDDEDCDDCCCDEFEGHr_EGPlcye_pH[mOspDIIXeRDNE/X33\8>=??9::97448;:cYSOKB;9=?ADGI-/,10+*+/17:4.,,Z0684.8:3.66SB?C?C@65;>3-027K21VLGD][KMNT-71387=606;;;AB:6559B$%''&"870B?FD=@P,-/@GL'&&%%KG@<<:;@A@@AB?>B<-/'@ (,8+')-6,*&&/+%.5323684-154%%B<;@"%";?<95;$')**,.-.+*/,,/,-0331374+,1*'0221.23,//--%&*)).30..002+057&&,/3'EEE;:>EKA=C$%(#<0<#),'$''+-(&(-/-,-4630,+)()&C:<&)*/0./,/4352.--/.'/55'(38<8956:9+3898<@A?BA>>?A??>;7388>A=1"%-13387+)*-187?9 ##! !"!!*-&(0-&")...&(('('#"'(%#""$$$&#"%% !"" $&"())'%1# +!&"# /&'301<"!#&%# : "#! 634:98 " $"""= !!  %A!!!%)--)(&$"$n&&(%!%>0567844788973741*163.#%---2/-)/5.$%+/373,)3@)-2-'#!!.0..&$+.+*+(-10334/-*01148<51=@-B,9&)-7:1"3?T'(("#-''$*.+')%#&2NFGGF 4'#(+' $+++*,,*,/100334/*)-572' (&)(&&%#""#! !  5R?;)%% %!*  0#$:5'!6@755D53F+=I\3201,Y6FE5@76;:;BFGGLKQ34WN*+)&.TGDN+$&!)2,'%"#.52)&07,7Dڀ(܄ۀk݄ۀـ܀݄n3$Q)8!+#&"?9647)+0--/"!"&" " $%!%"##"#&)&%''()&%##"!! "!$# !#!!"##%"!!'(!!!  "$#"$'$&'(*+)+0(&%$*/+'%&&%&%$#""! ! !!"%$! ""#$#$$#$%KPRRTTX`^]a`ac\,,-/.-//,*/22,)')*+,,+,./.-/3.)-.-.11174//354322540111246.-30,*,04777:@GJMLJJKMMTW[`s1/ +DŽ+¿޸ᄋBEMnfui_m?Li^B`\8=@KUD7B>*O//Q03266200.+(''((D?><=51159:<>=$$!%%#"$&&+/,'%#D%,.($+-)"))C65;8:7/,37.(++.<%$D<;8KG=AAH&+$%)*,$!##$+,&#$$'+!428702@" '.2.+&'&'(+))(&%#$+( -!"  "#!!)&&' $"#!!%(' '+2+2!#,*&3631+)/$95&401'%:. %$    +   + + +  #%&(&     +   D4/*-.! " "!!"&'&'%$#.%&#! #%!  #  + + +    + + + > +  + + +    + +  +  +        '%(    1~}~}|}~}|{{{|}|}|}}||}|}؀~}~~~}}|}~}~~}}~}~}|}~}|}|}|}|}}|}|}|}|}|}~}|}~}|}|}|}|}~~}~}~}~}~}~}~~}~}}}||}~}~}~}~}~}~}~}~}~} ͼ»Ƽ˵ó_ǴꑳւŹɽt   + +   +    +       ! !!  !! ! !B !!!"!!##!!!""!!"!!"""#"""#$#!"##!#%#####$#  9ƾǿ·끃[̹μ°k(%'%'&'&'&()())((()*,,*++**+,,,++*+*+,--+*+,,--++---,--,-,.-..-/0?101/01110/.../-.--1001160-+*++,..- .--/3320.,,,+ +***)))()**)()*)*()(''(((''))()*(''&&'%&&&'&%&&&$%%$$$%&&%%%$#$&$$##!!""##"""#"!"!!"" !!!"""!! !! !""! !"!    *-2`傀向ꋞ򄆌Ƶ񃗧ҭ’ɟޅѷ۾怊öɯƩȷѬ넒ɮŤĮϺ󆊓÷׷ɗɵŚ©О惋󄓘ʾLJۂـ猛0փ973>&&7F9A?C?=9817@Onjkjf`VH@=:8<=6@DHJHEC?=@?CKIGEEC@@A@??BB?>?AGQMG;.-131250,3ACAFDCB@><:9:;:8731+% "2><0,@d^TR?+K\SUJYcJ;a#%#L:LTTLA3+8FE?IG1;M];N`;:;865eNPN=FAJGLMT]`]WVi;hWZ^=I<+WPkZ@.005:3456-=2FCB<2<@;A=;ATTSTTSUTSSTSRRSSSR TRSRRQSRRQQQR!QQQPPPRQQPPRQPQPPRQQPQPPPQRQQQRQRQPQQRQOOQRQRQP +QQQPQRQQPPQPQQQRQPQPQOPPRQQQRQPRQPRSRPQPQQQPQPPQPQRQRQRQQPRQQRQRPRQQRRQPQQQPPQPRSQRQPPOQQQRQRQQPRRPQQPRQPQPPQPQQQRQPQ PQQQPQQPPQQPQ RQPQQPQQPQPQ PQQPPQPPQQQRPQ PQQPPPQPPPOPPOQQQPPPQ OPPRQPRQOOOPOPQQQPPPOPOPQPQPPPOPRQPQQOQOP OPOPPPQPOQOPOPPQQPQPQPPPOPPPOOPPOPOPPOOPOPOOPPPOOPPPOOOPOPOOOPPONPOOOPOPPOPOPPOOOP OONOPPPOOPOPOPNOPOPOPOPOPOOPNNPPPOPOPOPNNOOOPPOOPPOPOPOPOONOPPPONPPPQPPPOOPPOPOOPOQPOPPOOPPOPPQPPOPPPOPPOQQPOPQQPPOQPPQPPPQPPQPQRPQPQPQQOQ RQQRRQQPQQPQ+PPQQQRRQPRQQQPPQRRSRRSRQRRQRRQRRRQQRSSQRRRQR SSSRSRRRSRRS!RRSTRRRSQSSRSSRSRRSRRRSRSRSSSUTTSTUTSTSUUTUTTSTTTUTTTUVTUTUUTTUUVWVVUXVWVVWWWVVVWWVWWVWXXXWWXWWWXWXXWXYXWXYWXYYXYXWYZZZYZZ[[ZZYZYZZ[[ZZ[[ZZYZZ[!Z[[Z\[[\\[\\[]]\]\]]^]^]^]]\]^_^^_^_^_ ^__`^`___`Ca`a```_ab`a`a`a`a`abbaa`babbccdcbcddcbccbededddcd32e22e2eee32fgf44g3 4hh54555444545456565656667 +6778878777899898:99:;::;<<;;<=<==MJ+1/-+%#(+)%'#$=W35_:PBHOX@2@DL$HK,*(+,&-19IE;::6188=BGGFGA;855<;;=>?<==A?<>=>:98:70*A9(&%*(%(*-./.01/265338:999868:=?ABFFDKLKLLOHGN'NPQO')PQ(*-,+,++*+**'&()*)))K?>>CJTNHKNS..,TRPNKGCDDAA@;:9<=6/--/.-+))*(*+,XY][ab_^^_fiic]]4@BWCHJEENSPFFEEFHIGFHFEDDDHB==:9>HIJNG?ADIHIIIKLGFFGGGE>>GD=<><988:9=>@@>?AAEDGINPRVOacaababccbbbcdeefd ededffheefffeffhfgfghhhghihg +hiihijihijikllkkjhjijjkkkl66kkklk5j5 66566566655j0567ol6k6kl68:;;;pnlmklkk5jkjkmlkkklmnpponmljkiiji jiiihghhhihgggf efgefeeefffdfdddedeecbaabaa```a```aa`ab`^_^^_`__^^]^^]^^]]\[\\[ZYZYZZYYYXYZYXWWXWWXWV +UVVTTTUUTUT+SRTRSSRSSRQQQRQRSQQQPQQQPPPOOOPONNOPNNOONMNMLMLLLKLKLLKKKJJKKJJJIJIJIJHHIHIIGGGFFGFGGGFGFGFEFFFEEDEECEEDCDCDDCCDCDCCDDCCCDDCCDDCCD EDEEDDDEEDDEDCDEFFGJrGEFDA8`=:mGYT_Vng]V,7>OKIF5*[46;>AB@;648;>;7:=5I:/-//9?A@=>DO,5;:<;634888:6213659UoDKH,)..J<=DJIA.*/,X).6DT65/XPD-)DKP,,*(+353?=?;=<:B89<9;?G$#$&DA=6??AD:DY121GON'&%%$%FFE@DA9::BC=@D???B@7*(&"""'(/-LB;=K(,-)))*-0+./../,.-/32147026,$/762227-/02.&$((),/.3=:;;31-+,"$)+&=63A:C('(.))42+"%'')"&4I953>HICNREN{^:[OTX?`W9r`iH&)))>5#$(($'',/,((,/,,.263-*)(GEJB;A*+*/0.'%)0/0/..-,,)/44:,2354;878=2-49:;=>?A@>>>BB@?;637>>=@A<1+'! ""&',114374+--149;AD,('"###&($#('(/1,),"#*-)())*,,(())$$"#%$##!%&$  '(-$%!%)**)E!/ $$/( &%%'')+'+& 82/1294.7:8@!"86 !"!!"!>!"##!"$$%##"!!#)+*$%*)'#$%%',/* #*!.8?>6787966687-,2321("'-/2.'.:3%"'+5;;1-23)2.0*&$#C/&4%,1-)#94'',*/21+48/+,.-03485/3H:6$*%!#(&B%(*^&&%%(, )()*+&%"*6PNPKFA5( $*,.-+'%%((/3200.,**++(*-.+()*184. !))-,*(&%#"!!!  '%!?C<<018/+#/6! ,+9<6+"'560:<*(=G1AP101//0ZFJE24.89<>DJMKKK]4[JIP3;3'GJ|]M3""$&+&''(!+ .--,&.4.9J քمHԅq݄d߄݀[ۄـڀb+YP?%%4 $A+@776>.$.,21:"&# !# #"$"$&&&%''$"""$'!#%" $ !##$#""$#!#$$!!-'4 !# !"$$$('$()()*+&(**+,*)*1,+)+,0/-,*+*'%$$! "1# #! "!"""##!" #LMQPTWZ]^cfghd]Y-2.-00*+152(),--+,++-./2/+-,*,0047510165654664431243/.20,*-024445:=ABBGHILKQU\aq5ހÿͥ۴zC?BC?9a:3\AO{LYTog^W--1@#!"8.3;?B;' &%J")-6B'&"C>6&%9@@# &(&,*+$%%$*#%('()(%#"%0667.7F&%#/20,*)'-,(*.&&%$$(##!"")! ,##$)+&)+&%#$#1-+)0p" #" '#'&%11&&=)6,/3$70 >2;)."!$      ; +  +  &)      +   /0+/42!!"% !B#! #!!#$'(&$%%(&$$!"##'&  !&%  +   + + +   +         + +   + +  + +    & +Q       ++#  + :~}|}~}|{{{|||}|}|}|}|}ـ}~~}}|}||}~}~~}}~}~}|} +~}|} |}}|}}||}}}|}|}|}|{| }}}|||}}|||}~}|}~}|}|}~}~}~}~}~}~}~}~}~}~}~}}|{|}~}~}~}~~~}}~}~}~}~}~}~}~} çǽĿù½ɺɹ}ᅎ◹퍫ίr +   +  + +     5!      !  !  !""! !!!"!!!"#""! !"#!$"""#""##""!!""!#"#$$##""#$####%$ $%1りՔ绣ȿֶÿXӼϻԷɱs'''&''&')('( )(()())()*+)*+8*,*++,,,**++*++*,,+,,,..--.-+-//../.-...//../00/0100111//<..20140-++,-.-//.-,,-/./03210.-,,,+++*)*)*)))**++***))***)*)((()(('('(*)('''&'&'&&&'&&%$ &%$%&&%%%$$$#""#$$$#"#$#"#!"!!"!! !!""!!""! ! + ! !!!     +/gfȜЩ®ı󌣠ՆӳɽſڴƸ䇍ÿ˿ź˴ǽŚʷó˝сǿ󆋑ȷ݃O䄇䃗[׃…97ZQP84@BDDD@:21199Zddkjg]\SC=6294:?@FKKJNLIGDDGIECBA?@@>=>@A>=?@AIIG@:58=6251-04:BCEECB?>;98;87720,&  (6AE@=ARa`WNIgeZ/IX42H!_"%L;8LZVLFJB?CABG=WP]nAJb8:868l:PMFX+HHGKNU^^[TgvbHR]8JJ7eUpu_R@6424655071>;>JIDL)&'(+,*15GMB>;4479;:AB?@98ABEKHHFFC?=E<9;AED@>>=<><9:=><:?B>=>G>:=?:99=<3+'K3)'$&('%*-,,-,010232246776755:;<8:<@>AEIIHDBAFL'JLKLL%%()+,+,-,+)((()*)*+J@<>DFKKDGKU,++SPSRPJFGFBCC???@=92011/-+*+))''PRTWY_^^dehehhhecg999@D@?JONCDFDEJNNMJIKGGFE@==;9?KKNDA??@HIJILPKGHJ^GFIE@@DD==?<:;<;::<=?@AABEGHGKOSTBbcbccbbcbbccbcccdcccdedededfeefgfeeeffgehggghghfffgfffhghhhghijihhi jiiijhkkjk5lmkll6k50k665565677766555kk556777n66kl79;;<;plllk6klmkkjlmnoqrqpnmmllkjjjiijihgihhggghhg +fffeefefffdfeefedeedbaaabaaa`ab`abaa`_`_`_^`^]\^]\]]\\[\[[Z[[ZZZ[YZZYZZZYXZZYZXXWWWXXWUVVVUV +WVVVUTTTUTS +TSSRSQQQRRQRQQP +OOOPOOPOOON MLMMNNLMNMLMLKLLKLK +JLKKJJJIJJIHG HGFGFFGFGFGFEFFDEDEDEEEDCDDCDCCCDCDDDCDDCD +EDDDEDDEDDE DEFFEFEFEDEDDFFEFHIqk`V]<8>@>?44;VpffhB87dW[ZTP3RPXC6\j;AED?<=;=70/1;E@30%7/,,6?DLNH@CGIQ,599;;7226:=;7431/2669-+T07;2/1,U.YSE<@F?;@60..-*%&%C<6.6048+771.,&%%*+$.151-0:LH>;76:nWDXQSM@67id\bP::i4;I#"-10*""%(%">/.0/8<5@HF"$(173..0146--,-+-0-)*41+**('*,0689975112679;6.,/.+,,*%&'!&))/051.**GA=:79;>;2$+)!/++,%+-.+/56/&B>9?$&)%7:!$'$$L)/+**-.,-0250-+*''AHE=;;AC?:8601;?@ACB>>:653632+54555693/.1;<<>A<&$""%%%$'+-/21'#$,-*/ &"+$-'*)+/0/+++&&($$%$%%"'$$ %())"&&$(0&"!-!",BG+0:*#&$!  =6544399<@?7@"#2',!! ?%"! "!!""$! %&))& 211 $'#%)(t'&%$&*1*$+$/'$,"-7617:9998:82-131/1+")//,-.83(#$(5884/).#*0-.('&'%#!=8#*0-(#61#'053.42++/111236.2=OI;)&"%$3F7J'#'6(&?:7&(//-*+)'!"#>FINLH=;0#!%+./132/-+-//++-,(&('%&*-*(**-43/)!"++,+(&%#! '0+$#+8B?;2?<3#0  +y &!/>?504/-23282@>LX6=S.0003c5LF;H588<>AIILHXfV>?G-@A/RKdmUK5*&&')'(%*$.('(,'#-539Sل?؅fۄ ۄu߄Eބ߀܀܀ ܄ +݄ceA%( 4:#9.&/+1..9()! $$$&'($$%$$' #&$#" ! !# $'$#%,$!#%! "#4! ! " "$&"#&'((&$#&)(***)/+**.-.0-/.1+(**($"$#!"#!"#$"! !"""!CIJJKPPS\afegimhab32.11-*242(*+**-///++.,-/0,,-+*-206/00/.1565:;75584242//21+*./2575327:>@DFIMORT[amX:΄.R٪Ԕj|ZOX:6::6<235Id]`dE77`TRPIF+@=F5+P`59;9663.-)$#"*-(#)339=<8;??C%)*+,-+))**,,*(('#%()-"!@#(,'$'#E&IC7/4<504@B#(&!@<:+56#--%!#!(+(0+###*$!!!"&'&'**"833,1;E""+3+*('***)/'&'&%," '(&('%#%(.)+80++346.1019-'))(!)&$1"!!"# " # "!(#   #-(7&"2,/+$;5.8) 9$  +     $$ "#" &$     "(*-460 , #!! "!$" ""!"&&$#"#''$ !$$'(&_#  $&        +         + +  +  + + +    +      +X     +   "3/$  + #~}~}}~~}~}{|}|}|}|}ۀ}~~~}}|}~}~}~}|}ڀ~~}|}|}|}|}|}|}|||}||}~}|}~}~}|}|}~~~}~}~}~}~}~}~}~}~}~}~}|{|}~~}}~}~~}}}~}~}~}~}~}~}~}~ ӳӽõú၏܄cҷԽѧ­8%  + + +   +  ! !!!  !  !!! ! !""!;##""!!""###""!!!""!""!###"!!"!!!""!#""""#$$ 3ӪĿùҳ瀂YƾԻƮ϶M*&&&''()(''(()*) +(*,+**+++*+**+*+,-,,./0/.#,-///...//../00//00/01101111,150-,--..//-,,,-./013210/-,,,+**++*) *)***+*)**))*) ((('()))(('('''()+**()(''('''&&'&$%&%%&%$$%&%%%&%$$$%%$#$%$###"#$###!!#""!!""###"""!!!""!""" ! ! ! +  !      *0`Z𪉥Ӵ򑩢Ġ񋚟Ϻǀ񒓇׽͸ʯ񂆀ϷぅǢľٺ໳ė̽޿މùϪзäñ濻࣑򀁈©뇎¯ノプ쌖4ڊ96M\g]H84<@AD?1)3:Db_dlkf`]YE@2255@@?CFIIIJIFEDFJFDDA=>??<;?A@>?ACHHIEC;=D>662.2.1E<:9:?:654-+*!#+259AGLR+./addh1.7FF4:/$Z&"LD4L\RGIED?CD:Gl[eg5>Tv:8798l?HL<;>B?AIUWWWSfyULWa7@IHEH[pY@30735:7<0;562/36;7B=3RTRTUTTUSSSRSRSRSTSRSSRRSRQRQQQRQRRRQRRQQRRRQRQRSRQQQRQRRQRQQQRQPQRQQPPQQRRQQRRRQRQQPQRQRQQRQQRRQQQRQRQPRRQRRRQQRQRRRSRRSRQRRRQQQRRSRQQRSQRRSRRQRRQQRRQQRQRQSR QRRRQRPPOQ RRRQQRQQRQQR +SRRRQRQQRRQRSQRRQQQRRRQRRRQQQSQRQRQQRQRQPQQRQPPQRRQPRQPQRRQRQQOPQRQPPOQQPPPRPPRQPQPPQRQPQ PQRQPQRQQQOQPOQPQQQP OQQPPQQQPPPOOPQPQOPPOPPQOPQPPQOP OPPPOPPOPPQQPQPOOPOPOOQPPOPQPQPPOPOPPQPOPOPQO PPOPPOPPOPOPOONOPOPOPOPOPOPOPOPOOPONOOPQPOPOPOQPOPQPOOOPOPOPOQPQQPQPPPRPQQPOPOPQPQQPQQPPPQPPPQQRQQPQQPQQPPQ +RQQQPQQPPPQRQ PPQQQRQQPQRRQRRRPPQRRQRQQRRQQRRSRQRSQRRSRSSQRSSSRRRSRS0RSRSSRSTSRRSSTRRSRSRRTSSRSSTSRSSTSSTSTSSTTSSTTTST USTUUVUTTUTTTUTTTSTUVVTUTVVUTUTVUVVUVUVW VVWWWXWWWXXWWXWXWXWXWXWXWWXXWYXXYXXYZXXXYZYXYZZZXZZZ[ZZY[Z[Z[\[\[[[\\[\]\\]\]\]^ __^_`_^^^_^`_```a_`_`a`a__bb`a`aabbbaaacbcbbddccbabcbeeddeeedeedfed22ff34f2444fg3433454545 6555666556567667787678778889878989:;<;<<=<==<<=J/#%$'-)%%%#"!#;P.Bc5JLOJ51;B?@>=<@;8<;BGDACBB=:><==<=>@?@<=;;:;;@==?;;:7=93>C:6:63,#1I/(%%'+'+11../1855325789::8:;;;@?<8:<=?DDCCJEFK((LKMP'KH&(*+***,,--+)(&)+-OA>?EHKI@BI**)(NNSRPNMLIIEEA>AC@<74512/--,+*((MLMNRWWY_ajljkokfff728?;;CBJ@BCCGJLOPPLLJHIK>=?;@;9:;;:8:<>?ABEFGGFIJOaufcdbdcdcdeefdeddefeggfehghhffgffggghgfihihjijjihhjjijjhijijjlllklkl6l65l6556567A65565666777666l79;<<:qnm66lnnmllklnmnlmnprsronmllljkjijijjjihihihih#gghghggfgffggfffdeeeffefeffedbbcbbdba`a`0___^_```^__^]]^^]\]]\]]\^]\[Z[ZZZ[[[ZYXZYYYXWXZZXZXWVUUVUVVVWWVUUVUTTVVTSTSSSRSTRQRQRQQQPQPOOPPPOOPONOOONNNLMNNMNMLMKKMLKJIJIJIGHGHGGGFGGGFFGFFGFFEFFEFEFEDEDCDDDCDEDDEDDDEDEDDDEEEDFEEEDEEEFEDEEEFEDEEFHHKygvJeBh?2ROM=KHQ]hVL4>?5YkZi=@GPT,RPJBOQR-/46135435789985661682+)*+.01//2300.+LDHE<8HVAZ72.OH0H82REJ9DID@58@99@;16=;20215E$"!DA>@A;XOQJDEKS.8F(''&%$%GA?EKF9@IEBCFEE>116/7=;56245:?97;>@Ga\KJO3XJJHE?9/$"&$&%)*<13-/D&,3+-500/0253/4;<=;@A;3=>0./6:9:<8>?2+)++(+2155247/69'')$':0$A=85//4[8.F!,052.++/.--(0/,-*,.79;9825@aVQPP[RG@WTHNDe"OP@.B"&*/." #%&$";43  324 $%B5=###&.55..034850)%+,(##'+*)*)'),))58:8887::9673,'*.01347487154556776353XPMLIHR/-O,/354.E940,%+/2-',0))#>;AOWYQ48#%#@5? $$&(*)*,/0//254.,+*)FJ,&=B/243144,&+*&+,*)*,066249=-10;9:97:;3/8>@D@B?@;;AB?956336;<@FFBA>;86943/8863:8;70028<>;>A-$$ "''#&*./3652+(-&((*.&' !0))++-2/.-.-)(+'('''*($'(. + !!%) + ".# %3$)417 $'%" " !!47=!" 9#&806!?0C'$=? ! !"#@!"),(&$!81./#('&%&*-.("+.,.(*"/2556228685/1441/0.((,,-263LD$'3:451+?6)*0.)'*)4*'%$#?8(0*$$0,732.-.//22104*/6DHJ>($A4'/(8<)'6HQE2*&)++-(#*EBKPKE??6& ! !$(*,-0/-,*,/+,-+%%'(&&*+)'()-123.*! $,%()'&$"! *475BHDE!%#!%  ')/DA3410,14-6YEOS,5C`0./35d8@?2)+656:ADDHEVkMIVbQF.87.OYL]58-<@<::4LQ164/(&" %$ !)'+7CF$CCA:DFD&')($&'&&')))()%)+&()&> """###$&&%$$!>8;=4.9B0@'$!:7$8,&?11#,/,,&&/+)-$"(% &%y&&BBI@98:> $)-&&+0/'+1/*(***%!'!&('!" #$%(%$&(,1GA669%<2.+'$#! " #$" "#!$" ! U  ### 2#/'*--81+#0)"(#,0)" + a + +      " "!!! "!""!!! 7543106 - # !$*587/    $$ "#""! $$$%('(S%$!#'(%!!#$)*&$" "!"         + +    + + + +     +  +   +   v   +   ',.#  +(~}~}~~~}}~}|{{{|}|}|}~}~~}}|}~}~}}~}~}|}݀~~}|}}}|}|}|}|}|}|}}}||}|}~}|}~}~}|||}}|}|}}|}~~}~}~}~}~~}~}~}~~~}}}~}}~~}}~}~}~}||}~}~}~}~~~}}}~~}}}~~}}~}~}~}~}~}~}~}~}~}}}~ Ǵʸſƻù傏퇊^너ָŬق슉譯烕􄋖8          ! +!  +   !!  !! !! !!"! "!!!"""!"!*"###"""###"#""#""#"###$$ *瀕šĿľþƥ톄żi˹ϻƯV+&&&(''&(()((())(()('()+,+**)*+ ,+*++*,+))*+ +,++,,,.///.//0/./. ///0100120-+.---.-//12341/...---,,+**+*)*)*)())*())((()('(() *(()))((('&'&'&&&'&%$% $&%%%$$%%$$#$# "!""##"#"#"! ! !!!"!!!"!  !      ((P͹˱¦·ͼȴ¸¼ĴǦʪ·ɼǶ䏟žֿ³ҭ˶ؙϸ˒ò瀱󀍓󁊙ـ܂߬ļ䃄󃇇䅖̅:匜й숀8eH]hekZC>FGGB1096Va`h7jf`[SA>6=;;??=A@DFIIFEEDFFGECA@AA>==513)/B??CA@??<=?>8;870*+(#*/3428FQ_/1+[igf/24)?O7;V[<! >S@;X^PLG@>7AB>G_178@Jd85557;8;EBa8;9977CC4,/4449BB6SUT STTSTSSTSSSRSSRSSRSRRQQRRQQRRRSRQRRQQRSRQQRSRRPQQRQRQQRQRQQRQRRQPRQRQRRQRRQQRQRQQQRRRQRRQRQRRRQQRRQQRRRQRRRQRQQRSRSRSR SRRQRRQRSRSRPQRRQRQRSR<4#.101.!"'(($ 2H+7;CSLTC26<>IJENOJ#'*+'06DMJDCDBCBAA=9:=<9;;79=:<>81,*+(#@C*&$G$)**020/01.c/124654378;999<;9<=CCBEB?>>?ACKIDEJN))''PP)*--.-./-*)''),.-.OC>AFGON@BJ*'&&L'PNKNNMLKIGCCDED@966543/D+*(MKJMOSX[_dghimnlki;6378:89JMG?@CGLNOSQNKJMLB=<<@JONJC?CCGFHKOMOKIK,JIDFEHD?B>9:9;:9;=>?AAADHEFIHLTofcbbcdccdcdcdcdddeeffefeeffghgggfgghghhhghgghhhihjihjlklkjkll5666l676565676765667*8766589<=<:9omm667nnnmmmnonmnnpsssqomlmklkj kkjiijjjiiijijihhgfffgfffgf +effeefcccbcb`aaa`a`_``_`_`__`_^]]]^]\[\]][\YZZZ[YZZYZYYYXYZZYXYXXWVWWWVWVVVUVVUUTTTUSSRSRQRRQRP OPPPOOPOONOM +LLMMMLLMLKLKJKJIJIIHHIIHHHIHHHGGGFGGGFFGF EFFEEFEEEDEEDEDEEEDDDEDEEFFEFEEFFFEFEEFFHJMsÃk`R[XIus>I?C@?;:B;852/.,,-02/--54/,)MLIKF><@K>X1Q(,-(&6-0A?@;<;9:635?C# BB=>?9M@=@AFX^.3<6ANBE?6,/*"#$$:71")3493&-*.07:861/+**08<><:B4+JHK1F;:@AA?<1*42800./0.<2&E-84<7;"?6,+0OF8DTK*,+10+*,0.21.2-+(*.//6977:=BBMVVYWT6<>.lPT\<-QK=.C,h(2. ! "#" "$=#(#!" #)%#$%&%&$7BC%-69+,.469402/-.)! $++)'%)*(%-643999<=:50,'*.34336854447;;9<;943.XWY,1875()-760+USSTIB<<$+*$(*,+$C?JW]ZG17!"!!8- "& $+*)+,/101054.,+/-F+0'?B,0872584-...21/2466743466%-0;8988:4658=AEFE @B?;=A@=9768;D=BBA@@?<<0426:;6;<750365=A<>B9!!%$#(+135573.!,'/""++/*5(#+,/.00/-*+''()*''%").2#"* #*': "!##A(*'%)&$"""!A !=785 ! $(F?64.42!"##"! 5!""((%%%#"!/-$u'+*-03+#'0+' "&&+".:9:61/340166520-))(,1230(%#%.4553*((&/12-$&&&'%''&'D:;++%#"72*"582,.0110001/+2<@E?>Q!&.GHD4 G>6(H3HQPU>.-30.*# :EBK(KEA>3%#" !#!##%(**(()(+*+++(%&%&((&),/0351.*(*$!*$$&$#$$" !  084.,&03/:N&/+7;T0-,/4745;6I,5/.4:BIKFPcHBB?&2?C@B8?K@M?#)+3,.,,+(55' "++-1>^لڅTބ,<\݅܀ ܄2݄܀o5 ~;*%#+&,3D@D5(+.+8:3:72'*'""" " ! "!"%##""""!!!"! #$!"#&!/-4 "! !! #""%$""$#&&+)&')++,/+'*.-33+-1,-..0.-+)()&%(('% !  BBDEEGMNPTUZ]bgkji;74331-*351+,,.11022.,,00,+,,.46552/2221259:?;:<;9655/1.0/,.0.1034149B5<.HH?>[NEKShM>CAURQH326%+--,:6'M.-'#""'*+(!"!! ?:?=A>=BG%%%$')*)+,)(*+-.-,*2.*)($"#""%&#""X(&# >?=>;567A1G)?"",8!1:3+/2-,(!$.+)$&%$%!$$$%#$$$:55779DE !#**&%)-'&*),(A%$%  !(,)(""'% !"$*./7((' +2)+& ! H!&/.2 + $! !#" 0)',5/+ &*1562"!2%+3,("# +  + + +  + +   +!"" !!$$  !$" ! #$##%&#%$" 8:;$$ 1122& ""%19<9*   ~#! #""#"$$'***%&$"%'&" !%%%$$! # !  +       + + + + + + +     + +    +    + b   +  +  #%"%. + &(~}~}~}~}}~~}}~}|}|}|}~}~~~}|}|}~}~}~}~}|}ـ~}|}|}|}|}|}|}~}|}~}|}|}|}|}|}~~~}~}~}}~}~}~}~}~}~~~}}~}~}~}~~~}~}||}~}~~}~}~}~}~}~}~}~}~}}||}~ ĸɹ½邏dӾچ񏝑텏5 +       +       ! ! ! ! ! !"! !"!!!"!! # "###$$####$ +Cגšſ¾ľϻ򊨯òZòԹ¶Y+%&&&('&()('&()*++*)))*)9*++,,*+++,+)*-,+++,++,,-.//..././/.0/...--../0//01129 0,,-.../0/-../01134430//.-,,,+++**++*+*)*)$*)))*)*)('(()))*)()))*)('''(((''(''&'%$$&&%&&%%&%%&%%$"$%$$#$%#""#"!"#$$##""###""#"!""! ! !!! ! !  !     7(&Fy턍ɼȱز´ԯżŞƹۼſø⳵܀܀ߩ󅖐ϝǠߴƷ慆ͅęϑʼ坍脇򌤞悇ۂی샄񻪌ܼ7fS]hljndNKKE4*989Y\ej7kf`\J@7;D;CEDAA@?@DEEDCCCBEDBA@A??>>>=>@DABFHHHGFEICB@<78,-6@FEB>?@??<:5;A:71/.*.0./24@R^040-5433412DBW<3Z$/77AM4K_XRLC@>GB:DMZ0_aq^UWVX:NB?AD90-77296D;,%*.($,:;767867=:75.%&%$#"F;'%$E$*$B'0111//30///126887568:79<:?=@??ACB<7;@??@HGKHLLJJP*+/1/011/-*&'+,--)D<@HK)QCAI))&%%&LNHKKMLIIMGHKGLE;8864310110-,VSNLKK()+-/255566qnponW57686BFE:=>BIJORSQPOQSHA@=BKOUOE@DCFFHLOONKIKKLKNLDEGKKECA=;9<;:;<>?@@ACDFFIILIlfcabceed +edddcdddfdefffgffhghggi-higghghhgghgiiijiiijjkiijjkjklljjklkll5lllm6m676767876766677878877678:<>=;9o76nmnomn mpnnooqstrpoonmkklklkkkjkjkjjkjkj'kiiihiihhghghgghgfggghgfgggfgfgfffdddcdc+bbabba```aaa`bb``a_```a`_^__^__^]_^]]\]]\]\[YYZZZYZ[ZYYXYXXWXVWXWVWXVVUWTUUUTTTUSTSSRSRRRQRRPPPQSRQQOPONOOPOONPOONONNNMNNNMNLMLKLLKKKLKKJKKIIJKKJIJHIIHG +FFGGHGGFFFEFEFFDEDEDEFEDEEEFFEFGFGFFFHGFFGFFEtFEFFGFGGILJAPN]XJPTGP^Lof_YO[^X97OW[`Ycg\Vc00377@@DO@<<99656>@=0'%+86//./,)KDHFR,,,/55316466798669<;<8:?9652/,480,-230-+SKIH:2.76:E9CIN-2:/7-*2EE<=E=861:HXRD<967538>E##$$DBC7"9>:9BU^+3=IM('%&0,HE<>A=1/2>AC@C<18<8,/'2>;>@?.85223235?NP>;D?B>>:8MF?8,$ :+),4 '07536656K@=>?F+.00,D57:9!)<:@BA;9974>FL)*&'%;)3AC5$"! 6)=$A6)8J1:30.,'+-/.21353.((+)+-/38!"$CKTU[USB:94PGdZG[gc:+e7!.0%!!"! !$$@9",-*,'!#((&%%&()(!:>C&.98&*/34885410./+$#)'%%&(+%%.(,359==9:3,-/0276679:6589899886:;:331ZVa0/9>B9.29;6/&#)/-WW,N$#!",)((B@M^YI;?:? A;'7!##@(()*+/0012450+).+H&/K9C.37;25<<50213325799621044A>,977869658:=>;>AB>949;=>=84559<8;8754324>??@C: !##"%),5787502+!#)-,# &$*-/00/,*,/.,'&&'(##"#*0/$"+  )'%#% -#%!''(&''$!1 ""! :74!+'C;5)::;!#""!< $%))&$$#@""2!.483,#)1*#C%6#1&'?3?;61/52311//23&&00/-01)'&)02456+)A-(10/)"$%&&%%),'%E:"(&IDA +182600102/1*.:;98[V60&/==3A"$;%FL)RQhSIFEK3F?;;9/8>W>?',51+,0.+/2.&$.1+6Dfۀv߀߄߀%ޅ!߄8dHX:2-2#$6!+9&7E8((/098861/ &)(%%%"!  !#%$%% "$"! !##%" 3)22  ! !## ! !! !#%"!##''))+(,*++.)%(..3++/-0./-..-.0*+-*/+#"#"! 1?>A@9:711.//,.---/33239;=???CHNU[`lk-ɀҗIANHTTJFH@HV@XWNK?LMJ52HPKLGSYKAP(%('&,*0<1/.*)*+*.+'$$!>9D>H&%#%***(,(('(*(&'',+**+-*(((%"#$"&*$ "%%"! @==<2+(0*+4+107!)!)"!.,$)2,&% '097,%""#" "&'&#!*10/7FF$&,2 ,*%(++"!#*)'$%$ */) !"+(+.,(%  !)51'%)%)%&%$2,%"#)%$&'*-!$%#&"" !#( ! "3"3&)0522#" ""50%4888 + +  + + +  #!    $# "# !!!""!" #%$ :8@$&'! 66( + $1>9,    #" "%$S!"!!!!"" !"#%(('$%$#!$'&#""!!#$#" ! "$"!# +  +       +    +        +     + + +6"  %~}~}~ +}}}~~}}}~~}|}|}}|}}}|}|}|}~ +~}~~}}|}|||}|}}}|}~}~}~}|}|}Ҁ~}|||}|}|}|}~}|}~}|}|}|}|}|}||{|}~~~}~~~~}~}~}~}~}}~}~}~}~~~}~}~~}}}~}~}~}~}~}||}~}~}~}~~}~}~}~}~}~}~}~ }}~~~}}}~~}}~}~ £˻ʾÿùǭ個^ع򃁄ɻ퉒7  " + (      !  ! ! !""! !!!"###!"! !!#""#"""!"#$ #O(ڢûĿ׳񆚥¿߂ˀƼͼھijN/%&&&('' '()(())()**) *+*)*+**)*,--,,,..,&*+,,++,+,./0/0/..-..//../.././0011$ !,,.-.//.0//00233220..--,+* ++***++***+*)***)*)*)((*+++**)('&&'&%%&&%&&&%%$%%%$%%$$%%$#$$# +$$$#$$$#""#""!!!"!!!#" !!"! ! ! !        *(KClʄзŞҥȺǡɛٻ²ùF刘ʻѴ齵惪ѽʠ˳рƽധ玲ɾ˺ؗ뀏ӤʩǪ탈󇋍倇󓢛ۅ􂅔ɾ®󃆐مꁌ$ɿů4dYbjmjgjbQL7'5;9>[^egklh`UE91EA9BFEDFCA@@BDDCCA@CBABBA?==>@=<>GAAEEEHIFDFA@?@DH-247?D@=;??>976AOD630,+/0.,.4>Te4470:/ZY339M4>/;:=??GEOKIGObbfyZJQQTnEA:?MR=73XXU5;=:89;9C=9637658B>BTUTUUTSSTUTUTSSRRRSSSRSSSRRSSRQRSR +QQQRQRSRQSR +QQSRRQRRRQRQRSSRQRRQR SRSRQRRRQSQQRSSRRRQRSRSSRSRQRQRSRQR SSRQRRSSSTSSRSRRSRRSRSSRRTSSRSRRRSRSSTSRSRSRSSSRSRRSSRSRSSRSRSRSRRSSRRRSSRRSRRQSRRSRSRSRSSRRSRQRSRSR SSRRRSRRSRQRQRRSRSRQRRQRRQQRRQQRQRRQR2QQRRQRRQRQQPRRQQRRQRSRSRRQQQPQRQRRQRQPPQQRRQRQRQRPQPQPQQPQQQPQQRPQRQRQQQPQPPQ PQPQPQQPPQPQ1PQRQQPQQOPQQQPPQPPQPQQPQQPPQRQPQQPPQQPQQQPPPQQPQQPOPOQPQPOPPQPOPQPQPPQQPQPPPQPPPQQPOPPOPPOQQQPQPOPQPPQPQPQQPPQRQQPQPQPQ PQQQSQQPQQQRRQPQRQRQQQRRQR QRQQRRRQRRSSRSSSRQRQRSSSRSRSTSSSRSTSRSRSTSTSSSTSTTSRSTTTSTUTUTSTUUTUTUTTUUUTTUTUTUVUUUTVUVUVVUVVUVWVWVVWWVVWWXWWWXWXXXYYXXXWXXYXXYXYYYXYYYZZYZ[ZZ[ZZ[YZ[\[\[\]\]#\\]]]^]^^_^]\]^^`_^^^]^___^^___`^__`a`aaabcbbbaaabccacccbcbcccbceeb2ddee222dfeed222333e343433443455544454455567566767676678777878998899:;;:;<==<=>=?==?930?@4'&$%)DX63b9-UO036BA@A;:;;823368885263459AA?=;720'&%'(.5K6&%$#$(%B&-../345342136795565469:;86:;>@B>@@@79;?EILPQNPRS]OGEDFKLSRFBCBBBGNPSQKJKKMJLIGFGGIKHEA?<;;:9==>>?@CDDEHIKagabccededdeefeefeceefefeghfg hhghihhiihhihihjijjkjkkjjjk llkmllm66ll6l6766766787667778-77679;=>><977nnpno7nono7oonoq9sttrponmlkkllmlkjklk)jjijijjjhijiighhhghggfhgfgfgfgghgggfeecdcdcddcbbabbbaa```aaa```a`_a`a`^_]]]^^\]]]\]][]\Z[\Z[[ZZZ[[ZYZXZXWXXXWXWXWWVWVWXVUTSTSTTSTSSSRRRSRRSQQPQQQRQPOOOPONOONMMNMMMLM%KJKKKLKLKKLKKKJJJKJJIJJIJIJJHHIHIHIHHGHGFGFGFEFEEEFFEFEEDEDEFEEEFFE FFGFFGFFFGFGGFGGGFFEEFFHJKzgtNOhlk]nj\IciO@/?]QMVbqN9==;6;H:9787:<4//462+#%*.)(5<>90%L+5677783/.1359976537:;850../021./,..151/..//-TVA94415;<@=:647EMKPDA>:869?AD$%#C=<955[?;5@PL(5FN&$%%'(G<7750//2=@CBB?3*N-,&%+/,%#%29<88435376/-5CHKMA824:9A?;;/%"4(+46 #&)+*'&(F:;G57D',+*&:+'/D834>GA=6323;564"" #:4+8; #" 7%9@JHB%)#)!&$&(+.-1-070,)++()+-9B&%$D4~TYVKK/C$Pbclcdd7Z8/A/-$8<&.753-&%"!#!!#!4-%+.-*&"&((&&(***&" #,9<2/135577401/.-,+! $"%)((*""),487561(0/334278:7588:9::;858952b_ZS\423=>?.033,+"@C"I&%,01.*)!&)()+'JWUKANF;=!;52$# $&')*-/011230-U++-MK=4D-703678784543347:;;;1//04,+"756697657;=9BDA=<;<<=AA>;6;<==<=51:?B@<985689;7;<;96347>>>@A< ;"$#$(*056996.62"*"%/-)3(, &,-/-./.,/0//+''o#"!$-1-'1!&$/$&'(*"&&"%; !'*+'(,&! 52"##" 47 51$*'E7!&/86 "" !!""$()&$$$#{72-+#'/8/%*2,DED)/"8/')$797214356-*,.3)(2-+--*&*/24554-(+4!(300)"$%'(&'+,'&$DFGGGCAD&>4&/02200/-.1+.699.>5::65!%GL)/D6#C:;?;;>AC><8420,,/0.---142169;>?ABEJQW^gͣTwɄCWMM`baR^_T@YeI=-5NE?IN_C24s;>>DPXQ-1101:@?A=;;749L.J0/2,)0.--..:Xe5486640DU3:69(E>=H///438NH;_dUQFDEB=>K8i05a\cx??9;iJHDRSQGRU`w^NQXUrE?>;;99TTTUTTSTSSTUUTSSSRQSRRRSSRRQRRRSQSSSQRSSRQRQRQRSRSRRRQRSRRRSRSQRRSQQRSRQRRSSSRRSRRQQQRSRQRSRRRSSRQRSRRSSSRSSSRSSRRSRSRRQRSSRSSRSRRSRRSR SRRTSSSQQS RSSRSSSRRSRSRRSRRS RRRSSRRRTSRS +TRSRRSSRRRSRSSSRSRSTSSRSSRSSRRSTSSRRSSRSSRS QSSRQRSSSRRSRRRSSSQRSRQSSSRRSR SRRRSQSRRRSSRQRQQRRQRRRQRQQQR +SRRRQQQRQPRQQRRPRSRQRRRQRRQRQPQQQRQ PQQQPPQRPRQQPQP QQPQPQQRQPQPQPPQPPQRRQQPPQPQRPPRQQPQRQPQOQQQPQPOQQPQPQPPQPOPOOPPPQPQPPQPPPQPQOQOQPOQPQQPPQRPPQPPOPQRQPQRPQQQPPQQQPQQPQQPQPQ PPQQPQPPQPPOQ RPPPQQPQPQQQPQRQRRQRQQQPPQQRQQQPQQRRRQQQRQQQSSRRSRQ RSRRSRSSSRSRSSRSTSRS TSRRSRRSSSRTTSTSTSTSTSSTTUTTSSTSTSTTSUTUTRUUUTUUTUUUTUTSSTUUTUUUVVU VUVVVWVUVVWWVWV#WWVWWVWWVWWVWVWWVVWVWXXWWYXXXWWYXXXYXXYXYYXYXYYWYZYYZZZYY[ZYZZ[[ZYY[\[Z[\\[\[[\][[\]\]]\[\]]\]\]"^^_^^\^^]^^__^_^^^```^__`^___`_``a` bb`baab`ababccbcdcccdee21122233233233323434434445434454455534454456565565677666777678877787787899989;::9: ;:<<;<;;<=?Zu=9-*,5;-#!"F[12?H3,Y@;5;87656402465646?=98<===<;?GJHIKKGGECDDGNPMLQORVQT*+)'''+.*HADNO))DG+*'%'%JHKIFHGIIIHDGD@D?:7767643100^XZ[\[-,./25668696778:p987<@>58;>@EHKMNLQS[OMJKLPQSOFDEAA?DNRTQKGKMKLMIFFGHGGJHFD?=;<;>=?>>@BACEHIJIUiaccddefddeeffgeehgeef gggfgighihijjhhijhhihhijkjjkjl55lkllkklllmm66676l6787<887889877667788877878:;=>=<:77poqq67npm77oppor9::sqppnmnmmmnlkkmllk0ijijjjihihihihhgggihihgeffggiihhhgefddeeedddbcddc +bbabaaababa!`_^^^__`^^]^^\]^]\\\[\Z\[[[\[]\[Z[ZZYYYZYZZXWVXWWWXXWYWVUVUUTTUUTUSTRSSRRQRQRSRRQRQRQPQ PQOPOQOOPOMMNMMMNMLKJJLMLLKJKJJJIJIJJHHIHIHHIIHIGGFGFGFE +DEEEFDEEEDEFEEEFGGGFFGGGFGFGFGHGGGFFGGFGGHGIHKNdqz۟DW|koq{nzL>GKTLE4OD@DaRFOFJNp?::4/676640/*P,-104578:;8;@@>8045661-2730110.-*UQNGA?=9;:#)H)/15:RC>=966:52-22?PRM>A=7;=;=@A=G%>61!=G^PJCNXLG+@N'%%$#LJ;32.+,04;@ADB;1-+'-019?<2.7F;=;211632,O%'(036.+03?;;C9=<4-& "! "&  ?A8+/,B3A)=6,$83>V2>037@73,++-/$!#"!#"/1 '$  !;,"=BC>5=&0"# #"#!&)*,&)-)()*((+++6&*("DUVSKKlL:N{aYgvI8L*BD!<<"%+-33*'*'$%#!7.0"*-*L?E')()*++)&#"A=K1<833364460-.--.-./($$))%&&(&&%" !+.1.+-'20354415889::;;;9::4983`]ZYW\4432e98202640*))IG"7 .02/.("$%'(+/,VQHCP*F18;:8:!"B#DG(*+/01212/-WPZ]H:9A',30)69723443226:;=<=8341.3A2*223401:><@CB>>9:=@CAA<6:7:9:9;;;9::733:@?;%6FEE&*-4;8::<535+% %"..'1("&(-.--...12//,''!""&00,* &'01$',&( #5 5!&)*)*-(#! 2 "" !!6/1.'(@+% *7224!#%&"!%*'$$&%$"$$# 64 (62&CE%)"<#$50(1*9:946743***+,*+10-.)'.4654410'*.&$,303(#%&&&'())('&J%&BDA=$'%>0 $/22/1/.-//655-2(.7=5B,)-$:G4.:2CHFFILD7-$. !%)++)''&&"##$%&$&'&&%$&&$#(-+,,++./-*'((*-31"    ;G!- $"#*' + .+=ME@8540-.4EY22<'M&-SW_v=;21S9;8CEE>NSWkWFHLLe@;;:BXD],#FH)/533324:G41/1024Dx܀ހ ߄߀)߄ހ߀ "@ >D3'"",+/=#%.1%"H40+0482289:8!=",/.%!   #! #$ #(&#"(.1%3    "  "!"%(*)+*'%('%&&(-,(),+--*-)'(/,'*,-/.,/-./00,00-0-*&&&%&$&%#! ;:>?@A!"$$(*+))(,+-036f565796../q//235662459110//236731344328;>?=;>ABA@<7450-,0.+,-032046;>>?@?EMRWclnMфP[ϊϖCUxccfqbmD3>ALGA1F>68LB9@:@Ml5CHKA8cbMM+((%#"%*-+++(!98&*'#"%+*(*($)-+('%$ ="#'&'&&')*(*//-(#'&&&$"$'&&''((&#GGD>65527997423,+5!$#(-?3+(%#"%" $.33*-*&((&&&%#)$15G=:6>C82,43/$  !%%$&%%!# %(&".&)& ")(!")$(& !* )"7 &"    '(#"   ,&D*-*-> +%?E2,9G(".&$  +  ( $&!   +  !!#$"!""#%!$%"@><>;=#!"!%##"  00.(/": "$7258+!!"! ##%&'#V$'$&(&$#!"$'(%$!!##! !%"! ! #"#! #&%!   + +$  +   + +    + + +   +    +  +   +    + +  B      &  * ~}~}~ +}}~~~}}}~~}|}|}|}|}}||}~|}~~~}}}|}}|}|}~}~~}}~}|}|}€܀~}|||}|}|}||}}|}|}|}}|}~}|}~}|}|}|||}|}|}|{|}~}~~~~}~~}~}~}~}~}~}}~}~}~}~~}~}}~}~}~}~}~}~}~}~}}~~~}~}~ +}}~~~}}~~~}~}~}}~~~}~~}~}~}~~}~~~}}~}~~~}}~ حиúĹʢ񈔘م܎Zɮȶ둇 +  +    + +  +    !! ! !   ! ! ! ! !"#!""!"!"!!## ## qȪ½ľ½Ǹ˼¼삇ñRٻı80'((()*+))***)()* +++**+*)+,+, +,---.-+,---,-,,.//00/./..///01 .//02400/...--,,++*+++*++,+* +++*+**)*)**+*))*+,2+)))())*((('')(&'''&%&''&$%%&&&'&&('&&%&&%%$$%%$$%$ ##$##$#$$"$###$$###!"#"""##"!!""! ! """!!"!! !! !      ,24_쏗ֲĩé򀄋Ǿ񄕢Ŀú¹̽ľʡ䁃ʺѴǼŶѩ®􌮨Ļ󵎂솨͐ۤϜⴳ¥􃝛偌勛臎򔏂ځKՍ􇆉든&/LDFOZZbbdD64./8BUZdnkgjgaRMB+C<;DECDEDCDA@BC@>@?@AA@@>A@>>BKJGHFBGIA=<>=ABHP%1:8;;UO@B9R[RNRVmdQPVSgC;<=>=>>8I<5/0221/2138A?@=94.)),=B=60;@KB30*)#'*,D#,,/./12112200111232335677787:>>??>BGHJL'NHADILIINOMHJKLNMLK'**(')**I@CLP+,HI*,))'&GHIIGFGGJLLGF?@@<8446887998532d_\^_ac23336665767889:::;;:8;?::;BGJHFHJLNPULNMMRZWZTEDFB@?DNRTQKLLLMKOJFEIHFGI2HFDA>===<=??@A@>@CFHKKDidccdddecedeefefgggfffggfhhghihijiihhihijjkjijjjijklmllj6l66ml67nnnl767767876788789877789$8889:<=>>;988p88p77788788qqqs:;::rqonmlmlkkklkjlkkkjiiihihighhigffgghhighggfeedddfeeddcb+ababbaa`a`a`__`_^___^]^^]^^^]]\\\[[[]\[\]]\[\[[[Y XXYYYXYYWYXWVWVVUVUTVUTSSRRRQRRSSRSSRSQRQ +PQPOOPQQPPO MNOMNMMMNMMLMLMLLK +JJKJJJIIIJIHGIHGHHG FFGGGFFGEEEFEFEFEFEEFFFGFFGGHGHGFGHHHILMl[PRcYdnxkyvul\ZMKFA;BFLLeUbeWJ|pnHLiY_QF:,+E(*>D=7__[R=>9?8(-!6EBBD?AB=<62783/WPLRU+)),/6:<=<;;?><:8:<<<5R,987765.*)+QPOLKEEE;36ACGI(.0%$**+5JDGEFN968>541:IE?;<:F@<=GDFCBE><7+E>[BBJR+''0B'&%$$&MB62/../37=BA@@:14C>J=9=CB=>>:ED601)*(IF'$;2)+-*(/B4:7=.(&%*.*'$#%$%#&#@>4'*LL:6!.-BHPQKK.'$#$%%&)')&'**''*(&%)..88&.(C?GKOPFGA19B"P\ZUFZ[BJ.%A159!#)31***''&$"!:+(;)-,GG&'()*)++&## =A&574434555/..,..-./.)GN,33)$!!((! &(*,+2/1555651,6;<<=<;;9::5883c]=YUZ^4532573-1-+.&'+)%% 9!)4700# !%,,--NEM]WI7:75==BBCD%(*.0-,UQXH:9#)*.56*27877555348;:;767776587A"-03565619:9@A@@@;<868=98<=(4DFG(+-7>9:99458301(#)#,"+&))('**,/122312-()$ ##&*))+$ "',,13$'++) #7%%"#+/,,*%"!!!""!! ?7/ 66.!&D8/-100113!#%%%&)&%$#$$'&$##! %' *$ $()GII,&B:)%/*(4<=7574,'())'--622&%*3464220+).&).,40.'%*&$%&()('''K(%FE@='&&%8 .2010/.00963.;+.6<38N==(64MB0.'(08:BFH-# !(79EMHEIJH=6%)!!())((&(**(($#%'%$%$&&&%'%&%$%*1/..+),.+(&%$))+2 $#  +  .!  !!%." + 4)+II?9962'(4,N9=3;3LOT^px>920FA71AJGINRdZHFHIZ@8::AWDc0($&CH/56654:I:1--347L=܄{߄aV߅ `݄ހaTBY+P>&#'))&&%$+D)"G6-),4<:6>C>9>EC #())#!!!  !#&#!" %"$#!+"%#$(5+" /5 !!"$#"#''')+*''(*'(,,***,,..-,)$%+,)+*+,--,--.12.0-.-+)&'()(()('%#!DC@AAAC!#$%'(*'*)++-/12135747:50134435556459243126488//33324<>A>;;>?A=B><88510//,+,-0123:;>?>>=?EM U^nDR v2¾̗ݾ[SNYT\fnejfnc\KMEDD=5:8>@<;7<=;67: 5C@?>@CD>953%,),2BV;VoMJOH>0R1886_MV6=C<93TR>0LWPPRhaQQSSb<>:9BUFjf532[Z^AHD<9>>=>>@D:K.(.1342$#(!W>96?@@BBG?7252032/3458:<:84**2>??ABEEEGF&+**K&(DAEKT00JI*.,,))'KIIIFHKKOMHJCCB94125x77675fcfbadegd66;;8:786568:<<<=><<=>=AJTUPLLNMMMQJGFGFFGIJGHD@@>>>?@@BC@??BDHLNCjdddedfffeegf hgfgfffgghhg hhhiiijiihhi ljjkkjiijijkklm6k67mnmm766767877888777888998999898877889$8788:<>?=;9q88788q978889qqrst;;vsrqpn6mnmlklmmmllkllklljkjklkkjjkihgihhiihihiihhhihhiihiggege deedddcdbcbc abcbabab`aa_`__^`]\_]]^^]\\\[\[[[\[(Z\ZZZYZYYXYXWWYYYWXYWWWVWVVVUVVVTUVUTUTTSRQQQRRSSRRRQRQQQRQRRQQQPPQQPONONNNONMNMNLLMMLLLKLLKKLKJKKJIJIJIHIIHHIHIIGGHHGFFGFGEEGFEEEFFEEFFEEFEFFGGHHGHGHGHGGGHHGIGHGHHGGHGHHGGHIIKOt~gίn`F[^i\WSYW^OZwulQCADSoi[L=KYfOyfTDHQHQHE@88PKosynU95YEA=59%'0=P*JFCB>=6.,-/[QJCFKOOO'+4=@@@=;<;>;97889;=4OJ0@BC>:55567487.-SLDCIL?9(>FC==;3,KT=PDC^u:.218=986CKOOf@4>;@G1XI-,*NH#)0-*'($"!" !61.!,#$/'1;7DB?AB;47>B?@:69;?>>B<6?+??;631535=:7637:>===9<)4ADI)-19=:96788776523)$2"($#/*')*+,.3112221)%" #$"#%%&+'%,-/-,((!:"%";(#!#,.+,+&# "#""#  =01 #%$:586*&')))614/'&)/17750/+(()-2+.62+&'+'$$%()'('%&'$%%FB'(%)$8-2///+/4340+?%(2:305;O,'!%.5*U/:4="% #))'&'('((''%#%'$##&('&##%&(/00/.+12.,(%%%! ! !!$! !! ,-  "6"6U>>50*EF2&>JJNP`[FDEJY:978?SBaY*('HIP495836@>60.778PK߄ ߄(߄x:oh(WI)"(+)'!@+(&*1#?=*$08@C?E=8>B=: %%%" ! """  " "$$/#"'#  "%,)# %(7'.,+  "!$" !##&())'&$()&"&#!#$&##&%&+.(*.E,-./00/2.00)%#&(((')(')'LNRQJJGHC$%''&())())*,-./14467986;79:8:6575194o588<9/2423228?B=8:>>?=B<==:9553/..,+--/28<=?@=<=CGPZg$Uo{͙r̫laGQUbXSUTPXLOee]K:99D[TMD2;BPEwiXJKUKTEI>9=J6QTSR@**K8.(")$+; 71-,*+'$!"$FE>9?@@?>@C@BLPOLLMNIFFB==9585!%FD?=EAC@<>(00)C:0*.011000147C6;6.'-+-D6<,,.5$Ik9?=W))%)28QM8Z`NOK:YQ./760WN0M91]W_st?>:6J`Q>0BNSQ[[UROUfxxrm{Llcacb11a46ABBCCE>9<@==FPLUTUUTTUUTSTSTTTSSTSTSTSSSRSQRSTSSRSRSRRSSSRSSRSSRTSRSTSSRSSTSRS RSTSTTTSTSSTSTSTSTSTSTTSTSTTSRRSTSSTSSTSTTTSTSTTSTTST SSSTUTTSSTSSTSTSSSTUTTTSTSTTTSTSTTSTSTTSSTTSTRTTSSRSSTTSTTSSSTRSRTTSTSTSSTTTSSTSRTSSSTTS%TRSTSUTRRSTSTUTTSSSTTSSTTSRSTTSSTSRTRSRSRSRSTSRQSSRSSSRRRSSQRRTRRSQRRQRRSR QQSRRSSQRRSRQRQRSRRQRSRQRRRQQRRQ RRRQRRRQQQRQRRQQQRRQ RQQQRRQQRQQQRQ RRQRQQQPRRRQPQRQPQRQQRQQPQRPQQQRQQRQRRQPQQPRQRQPPPRRQRQPQRPQRQRPQRRRQRQPRQRQQRQQPQQRRRPPQPQRQRQRRRQQQRQRQRRRQRQRRQQRRQRRSQRQRQRQRSSRRRSRRSSRRRSR-STSRSSRSRSTTSSSRRRSSSRSTSRSTSRSRRRSTSSSTSSTSRTSSTSTSTUUTSUUTTTUTTTUTUTTUUUVTVUVVUUVUTUVUUVWVVUVWVWVWXXXWXZWWXYWWXXWXXYXXXYXXXYZYZYZYZZ[Z[Z\[ Z[\[[[\[\\\[\[]\]\\\]\^^]^^]^^^_^^__^_^^___^^^_ ```aa`aaabcbccbcbacd1ceddbcdccdc2d212 3222332323 444334443454445554554555656555656 766777877787887898999:;;:;<=<<==>Br4R0+-00//)$$1:?99V6PUF0,:EOQQPLKJON).&0GDGC<6345652376675513:8;>>BGGA@=952211558:9836816*(;B@AAD>948DM/%)(%""F/+'',/000/25634335545767788877889:889879<>>AJMLLJJNRPMQ('*,+.11.+*N?<=IT.,HJ+--+*,*PNMKKNLIJMKJFHB;430032325553gddcfjgil79;<9:;:88678;;<>>?Av>@>=CEJLNKEFKLIIDGIOT]dh\PQMFC@BJSTNLMRNNNQKGGFFDGIIHHGD@AB?@@AACBAABDHLK|ledddeeeffeggfffghfgfgghhghhghhiihhhgiijjijij kjjkjijjlkklm666566566777nn7676676787678898898*99::99889;=@@>;:9q8p899r99889899:;;<;trqponmmmnmlkjjkkjjkkjijiiijkhiihiigihghfeefeeed bcccddcbcccbaaba`^_^]\]]\\]]\[[\]]\[[[\[[[ZZ[ZY +XYXXYYXVWVWUVVWVVVUSSRSRSSSRSRRSRQRRRQRQ/PPRPPPOOOPOONONNNOONMMMNMLMMMLMLLKKKLLKKJKKJJIJIJIHIHHHGGGHGGFGFGFEFEFGHGHGGGHHHGHGHIKLMKkbLXa^URoiNPW`fhtrhf]EBHaOWRXFFL=^L8)-C0.1LRE9JEQCGFB6*HC?F.)79E'$HGJE>>:40(EEFGD>?=@GSSR-38>@B?>>?><<;6569985.(+-)($)0:58868:567RMOLOW.7>9@CAA=;>&LRNHD678=PAFFB4-3:>@=9=>9FJ8EDNO,00138CJFBDD@975797667<>=:9>>@>>ET;HM5-+$U252<0DJ;D:4< ;"!(0/'+080)*&! 87722 )@C#)/=1?=#)*,/4-*.+,)# "$!!!%&%&%#! <.$ ?;?&(."$%))''-*-+*,,,---)(+46B@@$'*,,,-+*(K>52/;/32,/53,295497915823273134675691)9-06637889?DAAD>33;M@=:56;?A=:3/<;952545;A?;868568;8;:9='48A&+/4:<;;8998565874.1-))+*+,.0323' !$#$&%&(-1/) +.(,!(%   ' *# &*)'"!! # !75478$&E:)..-.5#$$&)'%$###%'*(&&%/v..)+.)# 22!DC+("#'$.+*;9194*&&'-061/*&)35:8820+'%$"=,220+'),)'%%&(''(&'&''%$$-,*+,")3//-)1441+%,!%0-2<-+&NG$%'+&1^h('?5-% $2#+&$%').ENMKHFF@:& "'('(&'''('''&&&%$$%&'&&%%&&(*%(/21./030..+'&# "    #$(*.,2 +/0?P=?;->6 $,,)F<$8/(PQ^tx?=4/>NE1%8ENQXYIEEM^nqmkvJg[UQP(*S.198669<5./89>[܄ +ބRބ݀6߄5ހ(7'!aS+&*-)&" )-(*=%;;B=88:9'%)%!!!"'(# .   "($&&)%""+5. w! !%$$%%&)*')))+/,,/(##%+0,.//01010./010.1.*%%#"%$%$&'))UVXVUXTSQ&&&'%&)r()*--.02365987:;<:<:77975614357;=?:35432126>@<;=B>>?@=;>=;866310.+)+-17;>=@@=>BFMVb!4(h€¿ЕàcMVXTNNiaHILT^[]ka[WO;<>VCIBG<=D8[SJ?;K0./>A8/?8;.01,& =4.1!'(0324/(&&$"46773467$#&*%'!"%0&+$    $#!#" #d"!F)((%3#)"87-0(" + +    +  ++%( %&- $ "#"""#$! "   !$*! " #!#!  $#!!!%(%%'#"#! ""!"$ !! !&"  !! !!   1 + +  +          + +     + + +      +  +  + + +  +  +  +! + ;~}|}~}~}~}~~~}|}|}|}|}|}}|}~}~}|}|}~}~~}}~}|}~€Ӏ~}|||}||{|}|}~}|}|}~}|}|}|}|}|}|}|}|{{{|||}~}~~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}}~~}}~}~}~}~}}~} ȿž\ֳյ邉7"      + +    +       + ! !   !"!  !"! !"#$#"!#/زᑍ緐ƿ½̾ŷžԬſħP˹»E1() *))**))(**+* +,-..,+,+,+*,--.00//..-.../..-,-.-/001 !!0..../-,--,,,+++,,,+++**++*+***+,+***+,-,,+**((*))() (('&'(''&'&(''&'&%%%&&$$$%%%&&%$$%$#"#$$$#"""###"""###"!!!""! !! !! !  !  !!     +*4:t¼ӺϹŲ݀ѥжǗࣣȼ񀁁ȫ·ꀆĸ´Ҹ˯Իɬ󔡣ĻΧд瀑Һͷ󋕏ÿ󶕄ꎨȋ퇁ͩϔāſʰɗꂀ႐򍙣獐򕞝񃉍󋓙炉߈M췂i[[TNHB?A2;SMKJJC;E\glmYc`ZTG-77@BDFDFBBCDBA@ABAA@A=?>?@@?>A@AEQSPMKIHDDGF?=:896;EB@GFCB@%/3,G950+&1026126==B5;6/)./0/M,0-)36/Z3>?rA,&*.3=S9C[SLD9(H,,2:1Z]L7M12]]nvz>;54TPT>,BVU]\UROR`?EljnCzf[YX]e36625<@HA<:;=>A@D-TVUVVUTUTUUTTSTSUSTTUTTSSTRRSSTTSSSTSRTTSSSTS +TSSTSTTRSRSTSTTSTSSTSSSRST*SSTSSSRSSRSSSUTSSSRTTTRSRSSSUTTTUTSTTSSTRST STSSTUTSUTSSTSUSSSTTSSTSTSUTSUTTTSTUTST SSUTURTSTTTST?UUTUTUUTSSSTTUTTTRSTTSSUUSRTTUSTSTSTTUTRSSTTTSTTSTTUTUTSSSTTTUUTUTSTTSTSSTTUSSTTUSTTSTTSTSSTS +TSSSTTSSRRSTSSSTTSTSRSTTRSRRRSSSRSRSSSRRRSRQRSSRSSRRSRRSSSRSSSRS RRRSRRSRRQQRSRQRQSRQQRQRRRQSRRSQRQQRQR&QQRQRRRQSRRRQRRQQRQQRRQRSRRSPQQRQQRQQRQRPRQRSQPQQR +QRQSQQPQQRQRRSRQQQPQPPQPQRRRPQRRPQRRQRQPQRQRQQRQ'PPQPQQRPQQRQQQSQRRQRQRRQPQQPQQPRQQQRQPQRQQQRPRQRQQSQSRRRSRQRSQRQRSRRRSRRSRSSRSSR +SRTSRRSTSRSRSTSRSTRSRSSTSTSTSST SUTSTSSUTUUTVUTUTUUUTUUTUUTUTUVVVU VVUUVUUUVUUV UVWVVUVVVWWVWVWVWWVWWVWWVWXWWWVWXXXWXWXYXWXYXYXYXYYXXYZYZ[ZYYYZ[ZZYYZY[\[[[\[\[\[[\[[]\\\]\\[\\\]]\]\]\]\]]_]]]^]^^^__^^_^_`__^_^_ ``__``_^_```a+`aaabccbbbaaab0bbcaacddd2211bd1c11c2bdc22212 3233e232232323343 433444333444545 65655666555676 766677878788788878878998889:9:;<;;<<<==<==?>>>??W6RB0/2/q(6&F@;8`@)+QD/6?IOOMOHD')$GCFHB=658730147:><962679;;6346995437=A98946=9BE@?@@D@<98IC.,*)&%FE/.**./00113632663565799698<:8;:8;;8865:89@BFJHHGFHNPOR)()./-+02201.)E?EL-,EFPSTOQ,+ROMM''MHKKKIEIB>:?//001133212acbeihl78::?@=:<<;889:9:;=?FCJBA?>CGGNNIFIKMI?DEJQ]05dVURMHEEJROMLLOLNOQKGGFFFHJGIHHGGGDBAACABAA@@GEJKOfd=eeffgggfgghggghgghghiiihiiihiihiijkijjkkllkkjjijjkijjlmllmml7678767878889998Z778988:999:98987899:9:9:889<>@@?=;9888999s999::999:;<<;:s9ppoononnnmnonmnnllmlmmmllkklkklkjiiijjjikhiihegfggfefeddeedc ddeddccba`aa`5aa___```__^^_^_^^]]]\]\\[[\\[[]\\[\Z\[YZZY[ZYYZYXYXWVWUVVWVUVVUUUTSSTRSTTTSTSSRSRSSRRQQRQQOOPQPPPOPONONONNMLLMKKKLKJIJIIIHHIH IHHFHGFFFGGFE FEFEFFGGHGGGHGHIHIHIHIJKNMglgXbrrunODQZYY`qjcAWBMLA?JjnXMF6SO_Vi6HKT]d9uHDV13BTLB:9.AGV0466DEE$&&HGA<<<:4+GEFOOGE@EMV-,05:@BBBA@@@C>810/443/(&*-34574/-.,--USMHEFILUe6:XXMOXLK@BLO:=JNF:DJFC=8:=D<44461128:6741152.==?E'),+-,,*NMA;215.4.++,634811544351043540238844351.5-2753774;FCBD>96=><535:;==>==?;)80<:63787;A>;85574;;::7::*79?%*/56;:985434531-+!!) $(+*+*,..+)-33&#$%$$%&&)+/3#!,.+-*(("+# ! * +*#'% 1!  "$(0.<6,07""=6,(-2$&(&%$##%&y-2,3.('/4,('"-'-*,$"*+%>853-;5:1+*')03+./)*219<7630+(# 5#*24/+'&)*(&%$$&(&%'&&'%K*,,.0-E:,1-()242,);!!"&07+!?))%%%'$0\IAB>:3+'+(54321)$-@IMI=,&((('(%$%&'&'&%$$$%$'$#$#%%'&&*462/./.,-0.*($!  !   (*t.0P + 4$+GE>:0"6!%.)JK<"=')PYn||@9/.DEG3$6LP[ZLEBJZ;BhckBzaYURSV,0/,/46;620/38;AaۄۄdޅU|3߄ +߅\R"+u[:,,.*'$.-()G/!=2(058=?;999:7/3368>"A65440026::<=?A>@?@=;=<:9:85642/.//158=;@A==@HJVg?XÄ¿Ăyb_PYfde_H?IRMPXd]V6jL:AA67>WYLDA7TOYYFQ=CMV2Z;8J'#*74/()"/4@ $'&/,+/0*'&('$!979@AAA=>CL)&%'+.0/1/././.*%$$)(&" #$%('%"$#$#ACA<;?@@GV,.EF;9C9:129;(*22)#/4..(%'$-%!"$ !"!# '##3"-0,,+$! ,-+')/01%#-+ x$ $!%224%%!    #  b /,$&)'% +"%/,)1.' + +  +   +  % !$(+2 $!  ##!" """#  &*$!$( "+)"!!"  s !!!!!)&&(&" ##  ! ! !"## ! !'#     +   $     +  +  +     +    +   +      + +  B +  ! +  @}|}~}~}~}|}|}|}|}}|||}|}~ }|}}~~~}|}|}~}~}~}~}|}~}~€с̀~}~}|{||}~}~~}|}~}|}|}|}|}|}|}|}|{{{|||}~}~~~~}~~}}~}~}~}~}~}~}~}~}~}}~~~}}~}~}~}~~~}~}~}~~}~}~}~}~}~}~}~}~} öˢޱĿėY野聎8         + +  ! !! ! ! !""! !""###""  +ҡϚݩþǿ¿ºδȀĽJ˸;9,) *()+*))*)*+++*++,+++,,+*+,-,--.///.-. --,+-.01 "# '/.-,--,---,,,+++,,,++*+**+*+*+ ,,-,+,*)***)())(() +'&'(('(''('('%'&&&%&&%%&&%%%$%&%%$#$%%$#$#$$$"#$$###""#"""!"##"!!#"#"! "!! ! !! !!! !  !    10/SPݽ갟݌ѵքـٮ򀃄킆Ѭȳ¾Ƶ׳¿ޥ펜ր灄Ȱþ퉤¼䞲ûŽ풓.揶ϯ7Ӿ끌놐釋􅎅󓷶ҵ텀ꃋ񑒉dݖ쿇ڀ@HWZYXU*373MNJIPQOJdgih]gb_U@-5;ABEEECAAAB@?AABA?AA@?@@@?><@ADIKPRKGFFFBCEC?<:;@(GDDEA=B&)./NA621/034148:=3*--26]24/*/54Z5^=zb0'./;8INDa[E:\.9@=35:TW\MF,511mxz<7>>@FG9WVU TTUUUTTUUTSTSTRTTSTRTSTTSTSSSUSUSTTSTSSTTSSTSTSTTSTSTSTSTUTUTSTTTST +STTUUUTTTST UUTUUTTSSTSTSUUT STSTUTTTSUTTSTSUTSSTUUTUTTTUTSUUTUTUTUTUUT UTTTUTUUTTTSTSTSTSSTTTUTSTTSTUTUTUTUTSSTSTSSTTSTTTSTUTTSTSTSTTSRSTSSTSSSTSSSRRRSRSRRSSRSSTSSSRRSSRSSSRSRSSRSSRQRRSR +SSSRRRSRRSRQRSR QRSQRQQRQRSRQQRRRQRRQQQRQTRRRQRRRQ RRRQQQRQQQRRQRQRSPQRQQQRRQQRQRQQRQQPQQRQRQRQRRQRQ RRRQRQRRQRSRQ PQQRRRQQQRQRRQRQQQRQQQRQRQR QRSRRSSRQRRSQRQRSRSRSRSRSRRSSRSSSRSSTTSRSSSRSSRTSTSRSTSTSTTSUTUTUTTUUUTUUTTTUUTUUUVUTUTUUTUVTUTUVVVUUVUVVUUVUVUWVWWWVUVVWWWVVWWVXWWVVWXWWXWWXWXYWWXYXYXXXYYXXZXXYYXYYYXXYZZZYZ![YYZ[\[\[Z[Z[ZZ\[\[[\\\]^\\[\]\\\]\[]\]\]^^_^^__^__`_^```_``__`__``_^_`aa`babaaacbcbcbccbcced222112d2d2c12edd2112323323223433434344545445445556567678789988998998:9:9:;<=>>>?>>?8QMW6231120-$/00=9778768<=75420159<<=9441<;5789;?CBA@?@@B?;:BM;/-)%%$#C(&H%))+,+-.,+/43330113895441475346:85475:9;@EDEEFEABED@DGGD'+,+)+.12201/-**/.HEPXNIPUS+*PQ('LOMKUOJME><:.//011221011c124gj89<<===:;>><99:~8::adedeffeffgfghhiighghhhihhihiijjijjhikjljjikkklklkjkljjklllm7mn766676789898989:989:998:>82/RS1;64:A??F%(+(DBBDD@7.VZ11[UY_f6688:98=950-/-<.B=8=Q+,536?CB=?:63121+,0-4CA@AERP:*WJJ+..-**)%AH@768=<#!= '3=420+,/2-EB=$((&#"! ! %2/+(*((!4.,/:#$#=048987 '+-11,/),-)*&!$$!"#"$%#$&$! $"9("9:>&)3"%%&('%**+,*,---/.*'(..8++'";A7<98@GYKNBW!"&U]4?I0K[Q2'! &,3/,+)%%((*)&"#ACA:0%-9$')*JF#""%*+-/*&'&+/1332446675.M?P189=.#G(/8>8-'*&)1885831=A;889:;9($')$%*,-2//120/498895I$&(!(,Q)ME@A:#&'+-..,*OL=1/6:*31O*.99-0215521122656613557/3/,3535456547;BECA@8;:A>;548<=?A>>?<<+.A0;967;;<@?965744;=?<68;+/7>&*0869:898565313477+"$3$"&)()+/.*$)0-(''$##$&'(*.1*(*.<'+('+(!,$!2# -1 #"! ! " ! #$%5"3467%& 64)*!"""#&%$#$##$$$*53-4.$#.0-/0-*+2 "&.'9@>4'*:78Y/,,/2,,*)*,055;9653.*)$#3$/...+(&&)*&'(#"$$%&&'&%)/---3+$D".+&/340,'3"%%%&/,08E+1*!!""*<1(6FKHF:""21007521FFID>EBA;%#'(())($%&%&&'&&%$%$ #&')-044.,),-,(%#"# ",($?@0\= (3-HM<3M#*0,$(0DFI7.()+i~~>54F5FEJ75LTX[LBBLYkqpktD~`UPNPS.453/72>5,/237;Ee}V$BFSZduaP1.-*'%!%*'5"$98.)/:76741*"#(+)#"p!! #""%''&$"$&(%!#+3%-4  "%%'&%%$#&%#'&&$,,24,)-0/.0.0019414/+,)!!""#"#"##%'R)+-[_0111/-,+*+))(***+,--//13466988>?<<:=822357<@"A:;863235:9;=?AAA@B<;=>:9>:877k42111557:>>?<@BIMWg1ZſӜÜjlmv>Bvmjhl]GKZUJ[USTJU^=AEC:4?E>^XRQ0-HMHR/P+LISYG6! ,*'*,(##BG'+)&)-,+0--...-($EJ()NJMPU-,,+-110..+*),,$ '-*%!!##&')),)%$$ CFCB>9@CB?ALNL(&'+742-,3D,!$&&$ !#%$$&""!"%#"%"$$ (,+')6! "+/,((#!,))'(10&=1.%,( "%#"!*(#     "N'$+$0 /+!!$/- +  * $#  + '%-#0 "%#! $&#!  !" &  + + )*$%" +( 0!#  ! ! $&((''"%$)%!!!!"!  $$!!"!"%$   + 1       +   + . + + + +  +  +  + + }  +       + +!}~}~}~}~}|}|}|||}}}|}|}~ +}~}|}}}|}|}}|}~}~~}}~~}|}}}||}~}~Ā~~}~}|}|}}~}|}~}||}}|}|}|}|}|}}|}|}|}|}|{{{|||}~}~ ~~~~~~}~}~}~}~}~}~}~}~}~}~~~}~}~}~}~~~}}~}~}~}~}~~~}}~}}}~~}~}~}~}~}~}~}~} Ӿе۰Խ򁃇dܩӼ쇓¬8   + + #!            !  !"! ! !!!!!!!#"!W굝φ̖߭ǹ߻ý遊ĸ[ɿŲν@,())())*+)))+**)**++,++,,++**+,,,+,++-///./...///.-. !"" -,---,,+,+**+**+***++*+*++,,--,,+**()**)*)))( )*))(&()('('( )('''&'''&$$%$%&%%&%$$%&%$#$##$#$$$#$#!""#""!"#"""! !" ! ! !      + )'+8kƻֿı恍°󀅇ƿ􁑒ҼDZŻ٬"胃ûŷن河ɹՋ¾ネݶº‚鑞츖ꥐ􃏜흾匓ꄏّըĂ򀆋ꚬʌ-3-7ADLVLY\cjkgbfb^OC-6=ABEDECCCABA>@A@A@?<><===;>BFEHOQKFBCFEDADC>>AK2?DGEB=#')+OG=52.125536:?C%%&0B?=,d^o69/)*/34S`ytP/67>=B*`_hQIBDFI@3.<9\^V>K4./7txA;;?>==??>@gL[D3200-.4;;&.75<>W4/RIG3S4EJFEJCAAD"%9HNEEGF:67=H<887966>DG?55621534249>><;<5638717<=>>?>?@A?=><:AG&(**,*+*,0.-.---19;42.201214233573899;=;>ACFD?@CCDKONGG'&F&',0221000131.NI+/TOSUUUT*ROQOPNUYOKOJB;5..0210/001245579:;<>==>>@??><<;<>:=BAABED?AFBENMHKRMBB@DMU_^VUYXXWSTT,VPNLNOPOQJFFGFHHIIJHHJJHEFEFEDB@?BAHGKPEcdefefgfgeffhhgjihfhiihjijjjhkjkkkjkjkkllklml klklkklmmm676676678878778 999:::988989:9989(::;:::9::>@AA@=;9988999:::;:9:;:<<=<;::98 opppopopnnonlmlkkjjllkkjkjjklkjjhhgghhgfgfgggfeddeeddcdedcddccdb-aaba`ab```___`__^_^^^]]^^]^^]\]]]\\[[[\\[YZ[YZYYZXXW'VWXXXVWVVWVVVWWUUTTTVVVUVUUUSSSTSTSSTSSRQRQPQPQP +OOOPPOONNONMMKLLLMMMLLKLLKLKJKKKLKJJKJIJIJJIIHHIHIHHGHGGGFFFGFFEEFFEFGHIIIHIIIJJIJIIJJKKJKLLNPRRP|^n}wIqeki[VQT\cde`uupVHD=I\RG?db3gMLH[ASJIUW^sV?:43'>!,;GDC<63-OS/+&17@ACGJMSOIHFGFIA<84697ifb1432..366771002("3><:840/032246499421-)QSQ[]VPNMKKQRXYYVRS07929;54888<@83/24331069:7=<=@>:940'31<357IKE%*5@FB?>9713651.,+/7>>==:/>;DSV6#$&)++)(>9A>969!8%.--+*% ($#C8=$(+))&!@ !&**+,0)>32,,4$)&;(/33<;$*,/3/*0,/,)*&# ##!"""#&'&(%"""<.#708(1&$#&(%&+*,**-/.-0/,++,.7%(.$==7;77A@LZMPCD&A79UE5[=9pZP?$!("+41-.*#$%$""$#%'&$C6/+ $'$#"$$$+,-20(-1/,2752249;2/,)*-38883'&('5>3*$$$*08:9366;>=367982-/,*"$&'(*1002/13677:;4M& %* '0+,RKDFA=@B%-45?<:9?*27<@A<:76:;@ABBA??;/-<:2:868;<=?:638;8::<9988/+3<(+26;<<::5345457:92+1"&"*  &(),1-+++'$&(%$$#%&'+./-('+#%&(()-+#"! '$>'+0'",#!!  !"#$$B0% !"!!=67$"* <0 ! "%%#$##$#'.3/41*',&+,.450&")h! =<;B!<2*885/+143/04$%149698660)$&$(:!(-'%*('&$(-(''&$"!#%$'(&++*+/2+&)10)*643/,%5!!"!&,,..?,-7><7?&G2>BFE,!&*+390=>CFIDBDA?8'#&&)()(&&&'&$%$%&&%#%&%#$%%#%')(,22-,()*)*)+)&%&' ",+'ER&&2H^S+ AGVI@98:81$ 0/NOD+2%#*5w}A632<98689<:;<@AB@A<:==9;<<;<8765?327589:<;??BFD@BGKMICBBEIABFBBITD(1@#"C%(*)I=61/2203987?DH%'',>DD/-)=Kx:9='')+Y2.LaroB6:@??\XXWYTJY2dYTLIa=BvytDx[WXVTY\i;9:LJFE<=GNGGG=IZVUVUWVUUVVUUTUUUTUUUTTUTUTUTUTUTTTUTUTTTUTTST UUTTUUUTUTTTU VUUTUUTTTUTUTTUVU TUUUTUUUTUTTTUT UTTTUUUTTUVSTTUTUTUTUTUUTUUTSUUTUTVUUUTUUVTTUTTUUVU TTUUVUTUUTUVUTUTUUTU&VUUTUTUUUTTUTTTUUUTTTUTTUTUUUTTUTUUUTTUTUUTTUTUTTUTUUTUUTTTSTUTSTSTSSTSTTTSSTTSSSTUSTTTSSTSTSTRSTSSSRSSRSSSRRSSSRRSTTSRSSSRRSRSSSRRSRSRSSRRSRRRSRSSRQQQSRSQQSSRSRQRRSRRRQQQRRQRRRSRSRSRQR QRSQRRRPPRQQQRRPQRRSQQRQRQRRQRQRQQRRRQRSRQR SRQRRSRRQRSRQRSRSRSSRSSRSRRSRRRSSSRSRRSSSRSSRRSTSTSST +STTSSTSTSST UTTTUSTSUTUTTTUUTUTUUTUUVUUVVUTUUUTUUVU VUVTUUVVUVUVWUWVUVVVWVWXYWVXXWWVWWXWXWWXXXVWX WXWXYXXXYXYXYYYXYZZZYYYZYZZZYZYYYZZ[ZZ[Z[[[ZZ[\[\[\[\]\[\[^]^_^___^^^_^__]^__`_`_`__^___`__`aababaaabcbcbbccbcccbbdcb1cb212d2332232334344334345454545677677677767 877877787798989989::9:;<;<<;<<==<=>==>?@Y`SK421,-+0 6 -/D6=8>.MFJ<-3;BBDJD?>@$&7IKB?GF?::;ABC@A>:=GKVG63438:68===<<<;9545507>?>>?>?A@?==?;@B=:==0>=BB@CHDAIOLJPKDCBHQVXZMLRTVWX[^//,UPQQSQRJFFGFGHIHIEFJHJGEDAACEGGKQ`jefgh%ihijhjijijijiiikkklllkklklmmkmknnmm7mlm67676777678789:98999:99:999::;<;;9:;?@BB?=:9:;<=>=<;;:99988pqqpqononnnmlllmklllkllkklkjkkllljji)hgghggghhgggffeffeeffddededeeddccdcbbcca`ab```_`a_^^^__]\][\[ZYZYYXYXXXWVWWVVWVVUUUTUUWVVVUVUTTST SRRRSSSRSRRQPQPQPOOOPPPONNONNNMNMLMLMLLLKLLKLLKJKJIIHIHIH GFFGGFFFEFEEFGGHHIJKJKLMMNPPNtgmupa[kYULJNTILOWc`aYRVM[g]PA@9Y\`KQ8;6=KJWtA{E|^B6;KP?;DEIGA:;730ZW^+T5?IMONLQ-23=9,**23@D>::9621/002569:7522/LHKGFGIEB?BECHPU./66753,261126>8G8-+,/+%*/0021$$@"%#'2=#(+.0*'-.3-/+%!$#"" $&&'('$!#$.+%;=:,#('J%',*,*,-/-.1/-+./446@-F?:7926 (IgYPOF4J"(-,-)&&&'-.(&&&%#"#$$%%),+,/1/,.33-+1272/*J5 #$&),..8$3:LA$1H,49PH3(!("02310A=::2&$321*)A#9FM1;y=<75MGIKLJ?M,\QNGCR6>nusBzXRQOLSWa742C>9:009?;@Gj@U)4<cĒNC/-+%"#%)#-*. 729.$*030/2.+*)&)&&*'"""" $'/%" ! ""#"%%&$#$T&#%16'4525504! ##$(`+1001113164/)%"%&'%%#$#!! #%%&(,/1366778622/-/.14/+---,./.16229?<;>:4437;>>A88;h>>;<>ABAD?=<;99;;::997856;9;<<=:9=AEJSf)ހ¾Ǯ˜­um^QeTRLHKK@EHOZUSPKSKU_RI;85ZadQR22/5@=DZ3^6aI4&'47,,6:A@822.,)OHO&B)/376667655531..2,)'&))G<76<><;E;JOONd6cdd^`_\ZQ:*=ACACDBCDCA@AA@>??@@><<;<=CB><<>JNLIC@BGB?CB?H;??;???>?@9hUH732./*-%5<&0/T685<@B<@A=3>G94/,.,0>AB<9<>@A@>==@G>@@FJJGGKMLQKEDCOWXXQEGMNOSXY_320.ZVRSQQKFFGHGJIHHHIGIFFHJJHIIEBDEDFLPymfgefefhfgghhihjjijiijijkjiijikklkllmlmmmlmmnoom66l7mml66n766777887878789::;:9:;:989::; =?ACC@=;9:9:9:;= +<;;::9889pqppp8nononmlmlmllklmmlklkjihhihhhiihhhffgf efffddedddcdcab`a`a__``^_]^:]^]]^]\]\[\\ZZZ[[ZZZYZZZXXWXWWWXVXXVVWVVWWVVUUUVUWVXXUVVUUTSTSRPRRRQQRQQRQPOOPPPNOOPOONMNNMMOMMMLMLMMLMLLKKLLKLKKJKJJIJJHHIIHGFGFFGGGHGGHHHIIIJJKJIJLLLMNOSUUyajyikn|eW]TLSZ_dF_ZWfsdjxdllccZeT`ZV]EC>9_aAI^ejofc_XRBB6+8ag`R@<9675542111_d25FIGGGDCDGFIFDC<73/0/PLM;2./7?E@CCJ+38>2+.9CCHF=9:96423400119;7551/*UNEBA@?>>FIR1662[PP(./2673423224454+'.13938<5/7::.+)"BI)*MK&%/46BGKJLDCA=<>@@??AA@<0924<@@G<:9342; =!$$$)9bQE8U7=O.<<8AZW3KL;./!!$'$  %$&)'&((+)&!,. $.4)&74.,.368:-&$&((&)(.17788=>2155,&! ).265624698768;<;<986/00102..1314665650,142T4&-/- &+.-+*+)()&?@8>()/9;;5,D?B4!! %%&)*,--+'J;*'/8<-20/046543<+16423430831/.0(--38*0=*1:=CD;:>445=>87=@A@AB@@@=8)-8>3%478=>=?:99<:9;;8768:35&6&*37<<71*028985885354*;+0,.)''+--0,%#(('')'&&"#&(*+-/, (+(0"# +--0  '%)0,!! 59>=>;<4)@&$!$&&$#$""%# !! %"! #%#&/336051'+22.+('.';/6-03.>2c2>(1""/:4,1742<6)&-40-3;6.%&((,-):%//-'&%%',-)&&'&%$#"#$'-./2010/241).02810+%<""*++))8$"@:)%.,%G-!&1KJ1$&%%*,/0B$BBD?A?=;6!"%&%')(()&$$#$&$7#""#%&*'"!#&,1.*%!$+&!%()-2)   # /1($B40.! 29R-;#(KQF8<:95$9/6952.K9/J*:=><64/BIHMLJK)WTNEM25AB?CGAYVNLPRU`l72?F<812:K;BJuG3 R J6$!VC1/*##!"$5$-:!3.46+**--.4#('%'$'#!$"!"("  !#!!&"$#! "$&&&%%')%(9*6453204-96_  !  !"&%&)%(12001467146/*&&&'&'%%#!!!"#%%&)+/46879:;96433424110///--,.3U68<@<763;@??<45889<>?A! @@>@BA?<<<;:<:88788:889=@AB?<9;?CHSi +¾1۷ӑxrqr~iWXQGJQPS8SQPZiY]m`h^RUP_KSTNX=;:7][9@LRQ`TNNKE44*#)HYTI9661210/-***TV,*8;66643376531/*&$ !<>@1)*,3692/4="&',$",.52*')''(%&'$%%$*,*&%$#C?854562343169:#('&F>A"!!!#$!$#"!  ##$!#").6P7!#,02/1*)'#%(*'&&()'%&&%"")#$&(',  "#$ &#   +# F,&"( %/ "! ("!# +  + +   + +   !!"%!!! ! "##"$!"!1 B $ $ $!s$  "$)+# & !!'($"&&$$$# !"!"$&%%%!    +  C  +         +  + +  +   ( + $}~}~}~}~}}}~}~}}}~}~}|}|}|}|}|}~}|}~~}}|}|}~}}~}~}~}~}~ +끈~}|}|}|}|}|}|}||}}||}|}}}|}}|}|}|}|}|}|||{{|||}~}~~~}~~~}~}~}~}~}~}~}~}~~}~}~}~}~}~}~}~}~} нĹ՟䶣턇]ū󗦱鄌ƹ       +  + +  +  ) !   ! !""!!! !! #U˼닆Ϻƪ󒓌Žʿ¾Ϯ»ɭüQ˶˵򅌈ĵ>,(()*++*)*+++***++,,,+--,,-.-.--.-.---./0100000100/..!"$#!-,,--..-,-++,+,,,+,,++,,-...-,++***+**)*)+++*+**)***())()'(' &''&&&'''%&&&%$%$%$$%%%$#$%$$$"#$""#"!!"!"!!!"! ! "  ! ! !   *),I@?A@A?@@ACBAA>>>?@?=><<<;>@>?KRJKIBAGFGEGS,\J4!4!&)KB>7332332664>F()+++*,8BE8C3>RiAB>-D=a*0+N\p=NCEHM1]SOOODDIKE3IC2BMD;;5WP09=@A<@@Q\OSUSV41^a`45:??>FMR>`YXVWYck89BKH>:@DEHKAl5VWYWVWWVWVWVUVUUUVUVUVUTU%TTUUUVVUTUTUVUUVUUVVUUTVVUUVVVUUTUUUVUVUVUVUVVUUUTUUVVVUUVUUVVU TUUVUVVVUUUVUVUUTUUUTU)VUUVUUVUVUUVUUTUUUVUUUVUUUTUUVTUVUUTVVUVVUVUV TUVVUVUUVUTUTUUUWVTUTU +TUTUUVUUUTUTUTUTSTTUTUTST STTTUUUTTTUSTSTTSTSTTTRRTSSTTSSTSRSTTTSTSTRRTSTSTSSSTSTSTS"TSSSTSTSRSSRSRSTSSTSTSSRRSRRRSTRRRSRRRSR SRSSRRSRRRSSR QRRSSSRRSRSRSSRSSRRSRQRRSRSRRSRSRRQRSRQRQRSRSSRRQRTSSSRRSSSRRSRRRSQRSSRSTSSR SSSRSRSSSRSSRSRS +RSRSTSSSRRSRSTSTTSTSTSSTSSTSTUSSST STSTSSTUTUTSTTUTTUUUSUUTVUUUTUUUTUTUUVUWVVVUUVVUVVVUVUVWVUVUVUVWWWVWVVUVVWVWVVWWVWXYWXWXWXXWXVWXXXYXXXWXYYXXXYYYXYYXYZZZYYYZYZYZZZ[ZZZ[ZZ[ZZ[Z[\\[\[\\]\]\[[\\\]\\\]\\]\\]^^^]^^^]^]^_^^___^`_^___`__`_`a_0``0`abbaa`bccbbbcccb112121112221122212212e32 3233323343434343434545665676766766777878878878897878889889:98:;<;;<;;<<=<=>>===>==>>>??>??@@??INI:74/-(-.:;%234M;>@*?=DKB984;M+'$!(&&/=FA@BGE<767<;=>;:>A@:65759;6328?FQD:/-/54>AD?>=:>?>?>=;:;IE2-*'(KKF@>CES?ABF&,.23///.-+///0.0520148510358754353235798679:=?>??BB=E&')*(-22231002+K01.+,,-*+WWURQPUVRRMPNC9555424222111357768:;>AGGHGFDDEFDECCFCBQAB=>??A?@CJIEFKMQHA@CP[ZYNDEGIKMSY\^3420/YSROJFGEFGJKJIHGHHFDAFKLKJKIIIJHLOdggffg9hggghijjjhhjkkkjjkkkjjkkklllmml6mmnmnnooonm7nmnmm66lnn777878878878789::;:::99:999::;<;;<;;;:::;;;<<<;;;9:9;:;<=<:9889987p8poponmkm/lmmmlmmllmllmlmmlkjjijjiihiihihghghgfggfgffgfffedcdcbaabaaa`a```a``_^_^^_^_^_^]^^]]]\\\[ZYYZZZYXXXYYWYXXXWVWVWVX +WWVVUTTUUUTSSSRSRQPQRQPOPQPO NNNOMOONONMLMLLKLKLKLKKKJIJJJIIJIIIHHHGFGFGGHGGFFGFGGGHIIJJKLMNRSRnoqjzltbcaWODCQb_dUPoaIPS[rtd^rqfmkzkgioqt\QRXhRMX[_HQVLF?>3`;;[`bl?;9g^\.13244256358;AAA=<;;;>@?@?;8526;P:75435438<6:=BO3<>64M%JF@EB;89:52.-11443575342-+QG==?:9:?E@FGIS1ZVNLU[O/-2694300.2;9:?=;A;:1,+%$EGD@HIK)+3;69CB>D@:99::=?>@><>?=<09,27J(*'*G8#7)$%$$""%((*041--%%'*72/358"#,0(;=@ &$! !! 3*+23A(-&<-(,-28#'+00*+).-)+*)'#!$%""#"$'('&&%"#%$/&:@A ("'&#%(((,-*+---/.0.++.136265"':.310>%(@//scQ-.9E?=CY.+$CW@DCO3(3&>;K  !"$   #"#&('((%=.,5('-B*/:4+08::;50&"#"!%*.2116=;00/5+'# (0334676:<::;9:;;964.)+0/2420169866530480.6$+.+#,361-*++*-/'"=9#))1760)IHFC:!"$''*)+/0-)N?*&.9),--/25635;10424464531214453/-Q,.0=5=7'47;EA:>:.36::89?ABCCC@>?=7$-;!64/47:>@>::=>AA:56886:6(2%,69;83,-6558:9663564".0')*,*))-,/2-##&&'*)&&&%#$),+*+-!())9"" !%&1-# #!! "$$##!#!92352,% !)3!"#@%&$#$%!!$&%%%$$2  "%+0186004.2242.+-/*!.0,1,$;54?,/')-36;86:<++0672+=:2'&)-0.C-(;++/-($%&$&-,('&&'%$#""#+./02200120+-0..520.))"(4!2:7)#(*')$()(1D70'!$//2!!@"B@>::93"&'%&%"#"#$#"$"!""###!$%"$/3--)##('%%%-2' !"00!7O41)1JZ,* :969=42773$12)8C;22.ID)3<>>653ELEKNPIJ-+RSQ-02899AIO9ZPNNQS_i649A;3,/37:CJ= 8{#0iI71,&# ##3F+-+1/24.))'*2#)%$&)(!  !!! $/%"%'$$$!$%$##%2/ :985498?,1/.  !!! !""%&%$&%$$)11/.2366351450+**))&('(%#"!##%$%(+1365669;<8:999643301101-+-120148>;754=EAA;4666;;>@B>!! !"B??>;;<<<;;99878:;:97>CFDA@==@FHTС(-2>ě݋Țwlwhee[VKGQ_ZaNF_\BJPRhex`UhdYa_mwy]Z[_^gPDGIVCCOQW@FJA=77.W36OMP\953\OP)*-,..,,-+-03762..,*+.//.,'$! $7(*)**./145---5?',*%!464/50*'()''#"$$'&%'(&### >8113./.2844557"C=79@G>! !# %#$'!%($%($!&"!-0.)146 '%%+)$)(#!"$#')''%#$$"!#!",)#5!! "  %%" 7)$&! %+ $ %#  +  +  + +    X "# !# !! ##!!""$#%$"  !! #  6 %'&$( " ! /%!#+)$%% !%%$'))''(&#!!  "&()&!!""&% +    $ +   + + +     +  + +        }~~}~}~}~}~}~ }}~~~}}}~}~}|}|}|}}|||}|}|~}|}~~}}|}|}~}~}~}|~~~}|}}|}}}|||}|}~}|}|}|}|}|}|}|}|}|}||{{{||}~}~~}}}~~}~}~}~~~}~}~}~}~}~}~}~}}~}}~}~}~}~}~}~~~}~}~}~}~}~ ؖی䀇܇Zع񆠮 + +   +       !  + !"!! !! /ijػŅ˿ͿľѺɩſLи¬僎¿ž@+)))*)***)*++**+**++,-,-./////...-.1/2200/ + +) "$$# -.--,-,,+,,,++,---,!-,,,---.--,++*)*+*)**++**++*))()*)"**))('('''((''&'''&'&'&%%%&%'&&%$$%$%$%$##$#$#$##"###"#"!"#""!!"#"!"!!"#"! !  ! !   *)JCm׀ŶȻѨ큀̧덧Ÿ¾ѲȲ¯ǾƦÀÿϨஓ쉘큉ìĶݱųž契ɋŽǾнޝ֤܂ߚ쀉ꉙ󀇌ㅉ߅ӆꓠͺù󅈅p툙FJMKFPRKHB;EA58\Y.031a\ZVUNM*,=??@ABA??>@A?=?==>A?<<=?>=@AA><@A?@HRC>HKMIGKLIP*/G9) 4&(GBA99874014857$$),,+,--2=EDc4AKZ@EA3H%Z,01(O`~f@EHN[b_c_^G9BD@9'?'7DF;=H?107>?C=8A9bSLRVW_3ZZ0306A=;EQVN4SNRRW`p99C=;F6=;BGK?e7VVWVWWVWVUVVUUVUVUVTWUUUVVUUTUVTUVUVTVUVUVVUUVUUVUWVVUUTUVUUUVVVWUVUVUVUVTUUVVUVVUVUVWVVVUUTUVVVUUV WWVVVUVUVVVUVU VUVVUVVUUVUWVUVVUUUVVUWVVUUVUVUV +UUVUUUVUUVUVUTUVUVWWVUVUVUTUTUTUUVUUWVVTVVUTUTUVUVVUUVUWUVU VVVUVUUTTUTUVTSTTTUVTUTTUUTUTUSUTUTSTSTAUSTTUTSTTTUVSTTSSTTSSTTTSTTSTSTSTSSSTTSTTTSTTSTTUTSSSTSRSSSTSSSTSTSTSTTSSSTTSSRTSRSTTSTSTTTQRSRRRSRS TTRSSSRSRSQRSSRSSSRSSSRRSSRRSRSSRRSRRSRS +RQSQRRRSSSRQRSRQRSSSRQSSSRRPRQR3PQQTSRRRSRRTSRQRTSSSRSRSSRRRSTSRSSRRRSRTSSRSSSRRSRSRSRSRTSRSSRRSRSSRTSRSRSRSTSSSRSTSSSTTSTUTTSRSSRSSTTUUTSTUUUTSUUST#UTUUSUTTTUTUUUTTUTUTTUVUUTTVUVVUUVVUTUTTUUTTTVUUUVUVUWVVUVUWWVUVWVW XWWWVWVWVWVXXWWXXXWVWXWYXWXXWWXXYXXXYYYXZYYZZYYZZZY ZXYYZ[ZYY[Z[Z2[[ZZ[[Z[[Z[\\Z[[[\\[\\Z\\\]\\\[[]]][\]\\]\]]]^^^]]^_^]^_^^___`_`__a`__`a`aababcbb0aaddbcbbc2122d212123223 222343444343434345444544455546545566656567666776 767778787778 9998898989:99: 99;::;;:;::<;<;;;<<<=?>?>???@?ADGKC73/-)2.79 ,10,LGa.B<745344735>;974327717?BDFD71.:AA>ACA@?>>??=<9@H<)))IKJIFB>>CIEIHGL',.005831.*(')+,,0540-.15.-0579>67986322689779;=>@BA@BEGH'P((+//021112-&03/.,--)++-00SKNOPMLPM?978899:6431/.458;78:>@AFIKHFGGFFFIHREGEEFE@@A?ABA@DGFFLMUJB@@Q[[[NEEFEFIMSUW054331_YUKFEDEEIJHIGIHHGCADHIIJKLKLLLN`pfg*hhhjhhffjjjklkjklkklkjjkkjklkml7ll6lmmnp87o nnm76766677787899:::;-::9:99::;:;;;<=<;:;:::9;<<==<<<=@BDC@=;::9:::; :;<==?>=<:::9888qqrrp&onnonomlmlnnnommllmmkllmmlllmkjikjkjihighghgfgggefgfeeedddeeeddedbca```__``_^]]^]^]]\\\[ \\[ZZZYYZYYXYXWWXWWX WXXWWWYXWWXV#UTTTUTSTSSSTRRSSRQQQRQPQPPQPOPOPPPOPONMNOPONNMMMNLMMNMLKKLKLKKKJJKJJIHIIHHHGHGGHGFGFGGFFFEFFGGHHIJKKLMNQTSwbOxsjf`ZYVhbqydpt_caiM`cdbc]^bggpr^So7k[FfswtfOQG@?84d`Yadhbbj|qhg20034347664249552_a^W/-,/269==://9"+9=549=<>9679-7:A,4<;:9400444679:;8676/*ME;:>?;;:AHROT5[D:CNMPM49=A@>940/5779>=;<;?>;>CA/106>A<#577B<:@:768840,+0@<=?;6/D. %/8IQOD:=&)39 !%&##!"%',,('$!",-#95=A"(# "##!8,.B5:!*#/'&)+38'++-.**)-/--(%#"$(($%&%$'''&$#!"%"9&6A!!1!#(&&'&$(--1././.-.+*,0051153@':/66C,':= O{bL?@CN?]V1<!#MMP/L*>-M(0&"$$&"  !!$$#&&')(''C 9.%(51&&#("(84--248;650*(!!&+5:3/096.003%'"<&-/32477::96886466ca^KGQTX-_161.158878730-201/<&+0"'.693,)+--.01+"=:'3742.&GH%CD>9 $'(+,./-*OG/)0$*&*-46314675446676402431452/,**1.6>C/232;ED><906;<::9=ABCDEC?>k;3$5>$>2)4648@<9::<<>515756851*.$-9;81)*3466;?<442952//0"+*+-))*,-24-'$%$$('&$%'%$*,)*%$ "&))#"%%!%%0*# * :'!#";")'# "&&9 !""$%%%##$#"'&$$$&$>0".2.09+/8432//...1/(!,,*0&E<89;+$*2+.;:48:2(1468+/L@:.((+03//)<+3-,(#$&%'.)%&'$$'&"##(0../210/15/*/-.,32/-*+$39';:84"=)*.(+-'#-0/.!#75 >;85600!$#%%&$##$%&!"#! "$$$!! !#%&$"$$"$+0'&+))''))'-$ (21<+=74235=99302! #"$#"!#$%'(('%$&&')1.0/0//45/-+,,-..,*)()()%%&%%'(().031/3789:<<:;:886312121/./01/24;8767?EDE=8::567:<>= !!"$#EC@:9<;:9<:9:9::;<;:>CEDBB@?G@EKSAfބ3Ȅȅ/¿ץ滽b|K{und`[WT`\jks\c|iV\VYDWZYX\USVXX]_OE`0WO>W`dcYFOD;830[WPQRZ_W\si^\.*(')'),,--++.++,QNLA!" !$&)*'$#'%(,2470//1&-07#(++/857201.*(+*(%%(&'((()*'$$$!973030--.47849$pC4+2:;A9#&&'%#!  !$%$&&*(%'*(")&#!+*&!%-,("$")$!'#!%!($#$ %*//'    '&#$!9*!#(!/+!$ !$'" +   + + +  +    #  !#"%$# !$"!#$EA>0,458= # "#!    "!"($ !!!#' #,*%$%!%$#$%)*)())($" !"!%*&!! !$\"     + +   + ! +    +  f   +        $ + +  }~}~}~}~}~}~}|}|}||}|}|}|}~}}|}|}~}~}~}|~~}|}}~}~}|}|}~~}|}|}|}|}|}}||}|}|}|}|||{{|||}~}~}~ +~~~}~~}~}~}~}~}~}~}}~}~}~}~}}~}}~}~}~}~}~}~~~}~}~}~}~}|}~}}}~~~ ʍаՇ␁탐[ⴤ큃ȓ +  +              ! !!!!Vǥβ萎ʺ¸ĻȰͽȿ©ĸOǵض°'+))*)++*+,-,-,,-..///.///.-/103 +1 +$ "$%# ...-..---,,+++,,,++,.-,-,,,-.-, +++*)*+++*)*))()*))(#'''()(('('((''&&%&&%%''&%%$$%%%$$%%$%$$%%%$$$%$$#$$#"##"#""!"#"##"""!!!"##""#" #"""!!"""!"! ! !  )$#IS|掌񂟱ܠŔͼ˯ƿӭǠمĶԻ־¹М԰ƺ񆑝߀Ʀʾƻט؏ʀǽ˷𑛄ϥɺĬκ߬ﱘ燍򒑑ن킔Ÿ򚛈。k2MLJIKMRNKKBEM=?e_,/101]VQMNE3=>?ACA??ACCNUF>AFNH@AGJTW.HB4 ;+'?9749:8403769@(**,0-+-/07@G=T:Ml?FG?MMO\_dahjD8>A90%#0<<;@AOL?9;AGA781`UONTW[30U*%.cb:<:=IWP9YJPPSZh;8@E0JIQ+@EF=mBXVWXW VWXWWXVUVVVWWVWVWVVWV WVVWVWUVVUUUVUUUVUUUVUUUVUUUV#TUVVUVVWVVUVVUUVVVWVVUVVVWUVUUUWWVUVUVUVUVUUUVUVVUV UUVVWWVUVVUVWV TUUVVUUVUVUVUUVVUUUVUVUTUVVUVVWUVVUUVVVUVUVWWUVVUV"UVUUVVUVUVUUVUVVUUUVUUUTVUVVVUVVVTVUUVWVVWWVVWWVVVUVUVUVVUVUVUV +UVUVUVWVUVUTSTUUTUUT UTUUTUTUTTUUTUTTTUUUTTUTUUTUTUTUUTTUUTUSSSTTTSSTTUTSSTTTSSSTSTSTSTUTSSTTSTSTSTTTSSTTTSRTSSSTTSTSTSSTTSTSTSRSTSTTTSSTTSRRTTSRRSTSRSSTRTSTRSSRSSRRSSSRSSRSRRRSRRRSSSRSSSRRRSRSRSSRRSQQRRRTRSRSRRRSSSRSRSSSRSTSRSSTSRSRSTSTSSTSTSTSTTTSTTSTTTSTTTUTSTSTUTUTUUUVTUTSUTUTUTTUVUVUTTUVVVWVUTUUVVUUUVVWUVUVUVVWVWVVWWWVWVVWWWVVWWWVWWXWWXXXWVWXWXXWWXWWXWXYXYXWX-YXYYXXXYXYYZZZYZZ[ZYYZZYYZYZ[[YYYZZ[[Z[Z[[[ZZ[\Z[\ [[\[[\\[[\]\\\]]\]]]^^^]^^]^]^$_^^^_^__^^_^__`___`__`a```ba`a``aaa`abbaaab1a1 ddc12c2212323 +2343434333434554554565655667676667766787899888988899::9:::9: 9:;:::;;:;;;<;<;<<;<<=>?@{;JEP60/-*5.46?%-,057=9!@ENI>76-1R-%",.(%3FLEJHB<8;94769<;7>>>;523:?BA?88=4,7?EFB?ABB??@@??@>=;:9@<5%)JEFIGEG?>=:9>>ADI%%',+)((()**,,+++,,././126414456848;:<=??B?<=BGLKGGH'),*,..0///10+%.11/--+)(*-12TKP,YRPQI>99889<;:8543a235:79ACCB@>;:;;;<<;<<<==?>>==;;:::9:9899qrrpqppqqponoonmnmmnmmnnmnmlkkjkkjijiihiihhihhghhghhhggfeedeefeedcbbcbaaa```_`__`___^]\]\[\[ZYXYYXWXXYWXWWXWXXYYXXXWVWVWUUUTSTSRRSRQRQQPQPONMNLLMMMLLLKKLKKKJJJIIIJIJIHHHGHGGGHGGGHGFGGGHIKNPQT^kdTOYS{JR\qfd{f`e{m]^ZMXnolkijufQZ_dhjoeW_lliCFbp^Ezr@8039;=D53>$(*,@:8;?:=8.13@AL66;60&A7710=KL?'CK%G<=<138;740*2@?BB?:->/1+.0=81;D,=H}kJCF3Q@HLO8 %=93W;7*2KJ+##"%!!"$'&')..++'&'&%*Q77@?79A'=)-5 *30*-./35566*(*&!+07:5..62,.14(!=*1M121659<94258844dcc]LNSTSWZ`b024668:9410+)-./C%-!).361+)*+,.0231&9C/:90%$=!&!?CAC#$(+-..-*(H3+1$% *)*.363314963347863214541871,**214:6G75076:=>:98;ACCB>?@@>6*=A$#?E4669=;;<:9<93499455426/%19;1(,0148;<=<735930,'5'/.-/,+*+.21'&&(%"$%$"$##%)),.+ $%)*'(($ !&%*(#!!"1!!0++!<89:9 - """$'&%$%%#"$#$#(%##  9/.-221732./+**/230+l%,+.,HF=AD%,#-6/(""*1698(.78:6,073,)(+021-'+50*+*(''().)$!!$"#"9#*//+-3110.32/2.../30.+)A #3:%!->9J7>%,*(+*%$(.,,("$#A:95/10)!""#$%$#%$%%#$# !#"""! "$%&%"#$%%/4($'+.(#$').-"(0(9)"0(.-$6753230+(*,)'#&%$'(),)+'&$5=;0(,+,))/284:81 %")-5!(%##  $##%('&&&#"&(%')0"#&#.%$,65++1+%'%"%$ (%%$! &%#$    &$ @!$ !#  +9-&)%&. .   +   -''# + - " "%$!!"#"#HCDA438659;@A "#!!!   !"     #   ! !! $" "&"%!$,,*'#!%&&$$$&)*+)'''&$#!$#%'%%#!       + &  +      + +     +  !  +   .    +! }~} ~}}}|||}}~~}~}~}~}|}}|}}||}|}|~}|}~~}}|}|}~}}}~}|}~}|~}}|}}||}}}|}|}|}|}~~~}|}|}|}}}~}|}}|}|}|}|}|||{{|||}~}~}|}~~~}~}~}~~}~}~}~}~}~~~}~}~}~}}~~}}~}~}~}~}~}~}~}~}~}}|}~}~ ݂ݪ¾ޤ愖⅊Yıꢞ󃋀ݐo    + +     !    +8ʟㄡ᱆ƯλȾ׽žͰƻKĽӰ偍))*)*)**++*,-,++,-+,,--,.-../..0//00112 + #%%#  +-.,-.-.-,+,,---, +-,,-.-,++,+ ***++**+,,,+*)*)*)(**)('('(()'&%%%''&$$%%$$%$%%$$$%%$$%%%$$#$$"""##"!"##"#"!"""!"#"#"!    ,)KnÚ܀͇βƬʼҾųٯ󇆧ɺӺĹ蒗­􇈁׿̀ƍʔŰч͈ưҁ˿ȼϙꕀſ¶؁ǮǨ齯ތͮĘ愓됕󈑖ꉌ፣χ邗ѹڌƩ懆p)QKDK]YWPK5;E:H83.-../^YRJI1!8??=?A?@?@?>=?><<=<=><<>>>A?>AAADCEINHDDFIHD?EJHT2.;EKIr]LJQQWc:9;G>ARV*8FF:6BWXWVWXWWVVWXXWWVWVWXWWXXWXWVVVWWWVVVWVUVVWVVWWVWWVUVWWVXWVWUVWVWWVVWVWWVWVWVUVWVVUVVWWUVVVWUVVWV)WVUVUVUXWWVVVWVUUVWWWVWTVUUUVUWUVUUWVVVUVWVVUUVUVWWUUVWVWVWVWWWVWVVUUVWWWVUVVVUUVWVVWUUVWVUWWVUVVWWUVWVUUVUVVWVVUUWVVWWVVVUVWVVVUVVUUVWVVWVVUVVWWVWVUUVUTU VUTTTUUUTUTUTUUUTTTU TTUTUUTTTUUUTUTUTSUUUTUUUTSTSTTTSTSTSTSTTTUTSTSTSSSTSTTSSTTSTTTSTTSTTRSSRSTRRTSTTSRRSSSRRSSSTTSSSRS TRSTSSRSTTSRSTTTSRSSSRSRSSSRSRSRSRRRQSRQRRRSSRRRTSSRRSRSSTSRTSRS RQRRSRRSRS#TSSSRRSTRRSTSSTSSRRSSRRTRRSTUSRSSTTSURRTSTUTTSTTSSTTSVTTSSSTTTSUUTUTUSTUTTUTUVUTUSTVUUTVUUTTTUUUVVUVTVVVUUUVWV.UWVVVXWWVVVWVVVWWVWXWVWVVUWXVXXXWWVXWXWWWYXWWXWVWWWXXWXWWXYXWXXXZY +XXYYYXXXYXYZYYZYZZY Z[Z[[Z[[Z[Z[\[[Z[\ ][[\\]\][]^^\]\^]\]^ _^]]]^]^_^^^_*`_^_^___`___`__`a`a``aaa```a`a1``aa101cb101212123212323234334345444545444555455656656765676788776789898889: +9:;:9:::;:;<;;<;<<;<==>=<<==<>?>?>@?@@?@@@CWEN60..(9-188#)/10Q;M3'=BKI?;6-8)*),-'"/BHGDGHA>A;8:;9<8441.-$0EIEDC@>??<@A>=<<:6895675,J@?DEE@?B<7m99:?HJ'((+*+.-,+**+,,-.-./1232220/..124688:9;>??;BGLPMKJLMNNMMKGGEA>@ABCCA@?>>???BFNIECCER[[VGBCBCDEFIJMV.257778e]RMHGGJJHGFFIIDCHIJKLOMQRXPjgihhgijiijkllilkllmlmklmmmnnn77mnnn7o88qop878877677678799889889898889889::;;: +;;;<<===<<;<= +>BDDC@><;:;<$=>??>==;;::9::99989988rrqqrpqonppnoononmn onnmmnmmlljkjikiijjjhihhihhhiihgghfgfeffedddcddcccbcbbbabba`_`__`___^^^]]^]^]\\]]\\]]\[[\[ZY XWYYXYYXXXWWXYXWXXWVU TUUTTSTTSSRQRQPQQPQQQPOOQQONMMMLLKKLLLKKKLKJIJI +HHHGHGHGHHGFGHIIJKJLOPSPoǷĢmZhnBvs=>DEpXEgmbNFjFG^`QZVTCW]bn^hym_ZS`\ccoj_Yh}g[^GCa|Sec[/+1<86+3659:XC70/5@7@:YLQ43=7>@74>WpSI;86867:?EGBCEEB@>85*%0B'' "'%(&!!#$%&*'#40"$"#%&%"5#!%'&"113./ %)A0/%!(/$+,/4153.,,*$! '%#%%')))++(%"#".#<"#0;,,*)*'&-0-,-/*//01.+.2431534?'E72=/-%7(3QT@e,6DQ2+>+!.>81[3?)@V8,.!%&""&')))+*$!&(%$*NFGNHAAE)*(8)!$'&/0(-0488/&.6&*0697--1/*-14.!7=/3/,036545/0368643ac44`c\NSV\Z^b34377873.-,,.2304(%.11.-+---/1412-I:@160>=9.;B%#>;,26::8757:984365343527.'488)*34/3:<<:9549;20(!#//-../,++,.%!%'('$"!""$##)+)-0/7"##),)"&(+&$)*(")&$## '%$%(#(- "7778643/-*'0777!"!"##"%%"!!""$#&&$$#" &,30253x0/-,(*//024.'-01%BAAJ'03,/212+%#%59-+78:<551,,)(*//1-./13-**(+*)*+*)&#?!#&&97.11+,122//0-/4/0-021.(D!"6;=(/!+BG2JP6>)%%+(#)565-( *$!:7/-- ""#%%$$#$#"!!!""!"#""$!!$#$&&'-0,+,*,-+%(,,1%"9/>,356/</9K/&?K729EOY^])'*(!,)&<1@NC=8<:86999;::;=>?@CDGIHGHHEINZǣ  BNӄҀם׸hvxK|t>>ABp^Cbh]LFmC=QXNRNJ@MSRYLWf]RIFSMUT]ZOMYjUJP=569=;=@!""#"!  %"  !#!($   !  "#!$) "!$+,-&##&&'"""%)*+*'%(&" "%%$#!<             +    + $  +?   &%~}~} ~~}}}{{|}}~}~}~}~}| }}}|}}}||}|}̀}|}~}}}|}|{|}~}~~~}~}~}~~~}|}~}|~}|}||}|}|}|}|}~}~}|}|{|}|}~}||}|}|}|}|}|}|}|||{|}~}~} |}~~~~}~}~~~}}~}~}}~~}~}~ }}}~~~}}}~~~}~}~}}~~}}~}~}~}~}~}~}~~~}}}~}~}~}~}}|}~}~ ýۛ½ӿθ̇Zۼʛ{!*           +  !!      Ԃ㋄ڽ󖚝ǽýDZ怎ü󄐕ӯȾl̪0()**,,,+*,,*+,--,,--,.--,,+,,,---.///1 !#&&$! /.,..-,,-,++,--,-,---,-.-,,+,+++*+,*+*+*))()*()(()'('&%%' &&%%%&&&$% &$$$&%$$%%$$$#$##"""#$#"##"#"! !   ,'+Wvj񄂔埢̭͹⽨߂ʳ怙݁ʿôĶ񿕈ˮƾɾȺΗԃĴ史ɲڀ¼þȹ󢜈çʚ񺅀ؠ򑉀؝ƹПꁙ򀈉Ԃ䁚쌐؋֏􅃇膖ν᎒ƽ݈x񑛜삤Ւ+NE@GQVRTI*473Mm41-,XYYXRGK();?===>@???>=>?=<;<<;>;<>@>=>>@@@CBDGG;6@SWQKHKHGN`.6FM +*N=775;879)^$+,,/0QNF;^n\MMVbltzZ:86-'(&09:DO>ETOOL?88==[OQXYUV`42('*049:9BLrfXPLNRR_77lAD?D:0)BE:;FWXXWWYXYXYXXWXWXXVWVWXWXXWWUVWVWVWWVWWWVWVVWVWWVVWUVVVWXWWVWVVW +XVWVUVWWWVWVWVUVVWWWVWVXVVUVWXWVWVWVWVVWWVVUVVVWWVWVVWVWUVWWWVW +VVUWUVVVWWVWXXWWVWVWWVWWWVWVUWVWVWVWVVVWVWVVUVUVVVXVWWVUVWV +WWWUWVVWVWV'WWWVVWVWVWVVWVUVVUVUVUVVVUUTUUUVVVUVUUVUVVUTUTTTUTUTUTTUUTVUTTTUTUTTUTTTSTUUTTUTTUUTUUTUTUUTUUTTSTSTUTUTUTUTSSTUTSSTSSTSTTSSUSSTUSSTSTTSTRSTTS#TSSTTSSTTSSTTTSSSRSRSUTSTRSRRRSSSRRSTSTSSSRSRSRSRSTSRSSTSSTRSSSRSSSRRRSSRRSTSRSSSTTTSTSTSSTSTSSUTSSTTTSTSSTUTTTRSTTSSTUTTSSTUUTTUTRTSUTUTUTUUVUUUTUVUUUVUVVUVUUVUUVVUVUVUWVWVWVVVWWVUUUWVWXWVWVWXWXXWXXYXWYXXXWXWXXXYWYX$YYZZYYZYYYZZYZYZZYYYZYZYYZZYZYYZYZYYZ +[ZZZ[Z[Z[\[ +\\[\\[[[\[\[\]\]\\]^^__^ +]^^__^^_^^_ `_`_`_^__`_`aa`aaa`a1``b1a10b1abba12cc0121212 3322233232 33323433434443434545454567678777878778788988998889:99:;;:;:;<<<;< =<<=>>>==>==>?>??@@@???@AA@A;;=BC;97;43-.-)&)%/>GHDBA>===<>?=::<;899=9+PYH??A@CA?<98p8:?DH%'(()))***++-,-+,,-+-.12000.//.02775366898:?>@@?B?DGCEFKL)-.--/./.OK.021//+('((()((-0+STXM@987879:99:98l8:999<@ABIILJKIJLOSPNMKLIDBBCBCDC@@>=>>AGFHFGCLDNY]XGACABCDDFGIKSZ047;95c]WQLKLJHGGFGGFEIMLJHIILMNQTYUiihhihijhikihjjjijkjklmml6nonnnm77n7p77888p78777678788989989888989:9:::;:;$:;;:;;<===<=<=;<<<;;<<>>>==>@CEEDB><;<;;:<;<<==>@@>=<<;:9rsp89rqqpoonnopommnnonmlmlllklkkkjjjkkjjkjjijhgghgfefedcccbbbcbbaa`aa__`_`_``_^]^]\%[[Z[[ZZ[ZZY[ZYYZYXYXXYXYXYXXXYXXXYXXXWXVVVUVVUUTTSTTSTSRQSRQRQPOOPOPOONNONMMNNMMMLLLKLKLKJJKKJIHGHGHHGGHHGGHGHHIIJLNPPuYz}uEBGLTSRTjSB?CK6>Vadbb~mXXHXbjfgngg[HMJZf^_^[[]_a{xz^S\H6=C8\NX6ENG@<90VPHHSih9:?A>?>=:62\VQG?5447;?D>ABCFI@758989;98554125/245428975Q>30.24=^XQUHCR/8AH=43>DtT=<:9675663457872:<<;:59A>;9=:67<533061("".K)'%HHA;7;94458:;>?A;7&420&=7-+/5&!79 %(&&'"!##!"# '$1 "#&'('& !"(+,%"# :452,5"# 4+%")/3$(+++**21.-'  $##%%%(()*)(&&)%2* "*&+*))*'(0/-+.--2340--136/04.4=LR43<20&+(&TxI>0Y525DKE0$!}=3.L5-+5D)#"$ !&)&"!#""$'&**)%#%%%&MFA@BFKO'C-$&."'/&)-064,)*4.'*2;<4040)*.0-!>'255,,3524433644542232/./0TFQ]VZ\_3457752^Y.-.144[+#.,220/,-/./1440.'D7N-/":9 $$A8BDF:.B@<80IB%#@3?28:57559=;853233855/<0&580.49528==:;8669:8.5*'.00//.,,+($#%\(&!##%$',*)++'"#$&,+&-!(%""(%"/'" -$%+# ;6513.&# "(++$/#" "#"$$" ""##$'''$&#"!%.8.32/2.,-*)0003301/0*B=:BL*350//14/+&%(&+18686494($&)02/+020450.)(++-,*('$$%#"$($:)20-.0/--1,-/131,.2.,I&"/68#:42-3IU0793+%(!'/31/&0D!68884+-#"##$&#"?$%"! !!!"!"##"! !"#%&(*(# (7;83/.(',5# #!r#)*-046-)358'BO>,-8HWahJ)'%"+)3?19B>@@<7552J>DKKKPR,)!*07;:AKt]KC>>DIU36g=>7;0$:DQ8l=V4*%$'$%#0 :",),-+)) &.#$#$'""$!!&&$$#  "$$"###"#$(( @K?:9<::86433h46553{!!  ""&$%##'%*)'('..+*0171+)*,,,-/02344e45310/000447530/-.2/$23468989;98863301401/0-/6?BB::><=;889<879:F<=@?@CEGIJIIJJHKP\̀¾¾۠毠KEKMTSTWgL@;=I6/ODI+5=9520+LF@>DYZ21321201.+(IEC:2)(*,./.43 1(-2('063:C$&@#03.154782(&)(&'++)&'&%&'#$%$#!%'&'<.&'"&%0HDAB95D'-380+(/*  +   -& "%+.    !!!! !$##$$""" 7,4=8<=> !"#" ;8!"7 $/ $( )% +    """#'!$(%$''&!&(&('""!!(+++$*)'"$!$&#$#!#$!       +        +   +   + ~"      +   -~}~} ~}}}{{|}~}~}~}|}|}}|} +ʀ}|}~~}}|}|{|}~}~}|}~}| ~}}||{{{|}|}|}|}~}~}|}|{|}~}||}}}|}}||}|}|}|}|}~} +~~~~}~}~}~}~}~}~ }}}~~~}}~~~}~}~}}~~}}}~}~}~}~}~}~}~}~}~}}|}~}~}}~~ ׷͐þϰ䷁񇛜̿Y燎٩|       +      !!   !!  + Oį쒜Խ˨̻烌γ6Ϳƿ**+1,,++,-++,+,,.---.-..,*+,,+.--..//10 1 .!#&&# / --,+,,-,-,+++,+,+**,+,-.--,**)+++*+*)***)))(('()('(''&&%'&&%%&&''%&%&%$%#$#$$$#""#%$$##"#""##"##"!##"#"!"!!"!    11_~څȮ露Ŀ鈅л޷񂑡ĩǰȽþ㱞Ҷ򄃁ȼԨ–ŀ̸ǴЋڽꆧìüᷚʖ¿ÿDzܱͽֳ̔Ȩ􅏕瀋߈섐ԅً狥哞Ҿ匌Ĺ󅋍v؊팞롐,>?@CKONP@*1/+Fe320-,ZWSMGD1<=>?>?@=<>=<=?>=<;8<;;;>@??<==>CCBGMA-2@UXTQKIRKR1,;@V#%*H;442;86>CEL>9(*+-.---.12123:-.@:_;>C@C4]>',./20ROGg7]SV./9vwjD52.')(*457A=:HLGMLg5>=YMKQ.[W^35.)(01CGF@LiXWTNPRZ59j=@??:4%;A:AJWXXXWX YYXXYXWXWXWXWXYXYYXXXWXXWWVWWWXWVWWWXWXVWXWXXWWWVWWWVWVVWWVWXYXVVWXVVWXUVWXWWWVUWWWXVWXWVXWWVWWXWVVWWXWVWVVWVWVWXVWWWV WVVWVVVWXWWVVWXWVWXVXWVVWWWXWXWV WWWVWWVVVWVWVVWVWWXVW6VVVWVWWWVXWWVWVXXWXXWWWXVVVWVVWWVVWWWVWWVVVWVWVWWXWVVWV WWWXWUVVWVWVWXWVWVVVWWVUUUVUVUVVWVUUUVVVUVVVUVUUUVUVVVUVTUTVVVUVUTTUUUTUTTUTVUTUTUUUTUTVUTUUTUTUTTUUUTVUTTRTTUTSTUUTTTUT UTTUTSSSTTSUTTTSSTTSTSTSTTUTTTUSTSSRTSRUTSSRSTTRTTTUTSTTTSRTSSTTSTSTRTSRSSTRRSTSSTSSQRRSRRRSTSRSTRTTSRSTSRSTTTSTSTSTTSSTTSRTSTSTSSTSSSTTSTSUSSTUTTTSTUT UTUTSTTTST=UTTUTUTUSTTUTTVUSSTTUUUTUTTUVUUTUUUVUVUUUVUUUSUVWVUUVVUVWWWUWVUUWVVWVUVWUVVWVVWVWWVWVXW>XWXXXWWXWYWXYWWXXXWWXXYXXXYXXZXXYXYYXYYZZXYYZXYYZYYZZZYZXYYYZYZYZYYZ +[[\[ZZ\[[[\-]\[[\\[Z[\[\\\]\[[[\]]]_^]\\\]]]\]]^]^\[^_^]]^]^^_/^___`_`__`_^`a^`a``aaba0`ba`aa0010bca`11b0111bc1c11d2123f3223323223323233323243 +454344454345456665556576 7757876667887789887889 8999:9:::99:;<;:; <<<=<<===<<=>=>?>??@??>??@AACXG;2.02;( .3B*--)W-2,6<6EIK?86CK++'()%&07D@D@?<@?>57=99<;89;<9.-3@=8300BBCFEBCA?>=><=>:9;:9984A@GPI;;?><<<;6446;@CG%%')*,*+++))+,***++,,,/-,-//./././01255456:;:9;=>AB@?==@>AEFCK),./0./,IJ-/3111.-*()*OK(++*TXVJA98778:;;9887m9;=>@DKJJLJHDDHGHKQROOMOMLJFHFIHFDBB@?@?>HEHEDCDJVZRGCDCBBACDDFGGKS\58864c_[VSOLHGFGGHEHKKJIJJKKMNRU[]Ski9gijijjijjkjiiijiklmlmlnmlkmlmonnm77no887778899977887877n787889 88999:98889:9:;:;:<<<=>=<==>>>==>ADFFEA?=;<;;;< >?@?>=<<;;;:9:99:9r98qq88ppp8ponpppoonmnnnommmnnmmlk lllkkjjjkijihfgedccacbcbbcbbaaa`a```_``_^]^^^]]]\\]\[[Z[Z[[Z[ZZYXXYXYXXYXWVWVVUUTTUTSTSTSSRSTRRSSRPQQPPOPPOONPONMNNMMMLMMMLKKMLKJIJIJHHHGHHFHHGGHGGGHHIJKNPPlvWpKAIRFBKML+/1`S9AEO\YMAHDZfZEB@fzd]ysx_PIMVqtuk{jO`fO8//a`e5MDHQZeGEDB-PPNTW]_ajdaY-/576>CEC2PNOMD7-274778AEG'18: :#*&).4I74:79BE>CS32/7?@CHHB5313:<7456530.+/5014.5697.E79363;7_KLFIC=L-=EJB>8N67CB=C887?BGL(,),=%  %.&%)+-//-+12&%,6<8242*J+,+*)28642U46101433431123263RDOSPAEKPUY_bcflc\[UZ\]a243Y""2&30/-UV././/10-QG;D*/&9#B$(#30?'I<;()))IFN/%!%- $)!*352/57531343454112312461+,+T77;324bS+.18A<<@>=968>BEH2XB=;92*A%HC>:2774857=@<;<756883,RI@*77059:4+>>$&&&$#  #$#!!"#"!%*(&&%#$!#//221.4-+-+.0133503/6I>;=I&17700--10.,$ +2<;73795+"$-31*3413454-''**-+)&&""%'%$%(E'12001,*-/-0-.22+,1+&>'393>->G * )9IV1K962$ (,,0 *? 7542.) !"#"$$!#!! ! !"##"!!! ##$(,$'8:972)/+,# !##.O/131025*A$>/0(`f_9(% )('11+7@GB57:9679601138884 " #%%$&'%&%')%')(',,...034.*)))*+-//0133e457878>979:85431-.00-.,102458:<<;;;84422:44/.--4:=:58;>==:;:<;T;;9;>#&'%$DCB@=<;99:>??=CEEEIJLMJKLPR_<C'քD¿ͺlWJPPD=EFD#$+^T;>:HWSIAIES_S<:7Yzq\Rkio[MDFI^_aZh\FSWD1+,[TT)=56;@N9:;9(AC@FJLROYWYN&$'(&-232'><>>8,$&**,))332!3().-2;B:@K+)%,2369;4'#"%*,&$%()($#"%"%' $$&#4'((')$--J5;6:4.?$,3633.-<)") !! ! (5$'11+,$##%,--%&$%#"#$"$#"!!!!++     +     " $ )(%%'2+4"+%&% +   G #(-   ! '""! 3""!!""!#")+%.55)038<>BBCEJD<;:?@AB"$#6 261-&!& *+,/ +   "0##%!"%E:"*&%&%%$#$'*+, 1,)'$$#!$#$&(&"!2,"!!"       + +     + + +  + + + +  + + +   !#   F   #.!~}~} +~~}}}|{|}~}~}}~}~}~}~}}}~~~}|}}}|}|||}|}}|}~}|}~~~}|}|}~}~}~}|}~}~}|}}}||}~}|}|}|}~~}~}|}|{|}~}||}}~}|}|}|}|}|}~}}}~~}~ ~~}~}~}~}~}~}~}~}~}~}~~~}~}~~~}}}~}}}~}}}~~}}}~}~}~}~}~}~}~}~}~}~~~}~}~}~}~}~~}||}~}}~~ Դگ»Ѯ҂b偋׾񆔚ӹ񈊂y          + +   !  !!! +,샑ĺτǺ¼ܦʴ넌̶tƼÿ9**,+++,+++,++,,,-.-..,,-+++,,--../00  3"$&&$ ,-,+,,+**+,,../..,**)*+*++**+.*)*)(()))***))*)('((('''&'&&&'&&'''&&&'''&%%&&%&%%%$#$#" ##""#"##""##" !""!!!     /.^S}絰֊ѷտ݀Ⱦĥ󋀿ٺƼꀏڽӄ쑮ĵ߀ϿԱ̛ɬ²῾ٞ遝ʻºںŠƾſü¿ꉠ屎܆Կڱ䤻ՂꊓՀ܅ׅ򉢝ɵߊĥ{ߒߖ$HGIDENPPM@*123HX_1`XY[XVME119<=@@@?>;<>><<::;=>;===@<>>>?@BGI<31CO1&DA6464787>FKCB&)),0/--.01000.Y2&?5ct>A|v:A',--042J[64PON,07;wm[4/.)(),,43/3?Y_WVU0QAB5WNNRV.]\Y169523DrdYZ[AeVSTQV\596?@?@AA@AA@@D?8953/55)%0,@*,,*J,3+7C:?HG=<=:6464..388;;::9:97:AC?=;95;=:86759>DEF%&)+ (*+*+*)+++*,1/..//0/10//10045567::889:=A?AB=@@?CLMHJMO),,,*+II/../,**+NKR++RQVSHA:76789;<:9888;<<=BHSTSOLKHEHFBEJNOQPPPNNJILMKKEDCDDA?BEGEDCCFEHJJIIFECBBCDDEFGOY2564322a_]XSLIIHFFGHEDGKKNMKJMSV]Xomjjjkiijjjlklkjjik65mlmllmlmnmnm7nn777o7877887898998:9:9:;:; <;<;<<<==>?>=<==>>==>ADFFEB?=<<<;< >?@@?>=<;;:;:!9:9:::99:99:99888qqpqpo88ppqqoononmlklknllnlllkijkkjjjiijjihghghhgfeddccbccdccbabbba `aa``_`_^_`^_^ +]\\\]]\[[\[Z[[ZZZYYYZZXXXYXXWXWVWWVVVUUUTUUTSRSRRRQRQRRQPPPOPPOONNONNNMMNLMLMLK +JJJIIIHIHGHGGGHGHHIHIKLOJ{^ag]WR+/1-))(.9827?Y[GFPYO\_o?coeWpti]a]RUKLP]aeSWPUbd}yVGFB@DFE;60.($EI\6d^Y\W^d\[YLKMV179;B?=1GFGDDA;216239:<@A"-9"!%,(*02$>6>56531.-(PRSGD$).02*<681-/-OKFBJJLIE%2H'(FGI=?B',6976665566210+.,'+/1157;8342/214=.>7=768?CHGM^??<;5/CLME?9.356846=A>;>;44:3NFVTG,:638:898<>;9:858884'#$+.100//-)(&$$$%#!$$$"#!$'*,'#!#!!$%$)'(&!& '+"" ,#%&,/)#/'2+!"861,&6< !$%&&%&'% !!" !%%#"$%%!! ""#'&#"$"! %&.00/2-*,-,111645,,()C?>Be$(58630221.-+$)7>:86631('(-.+/2/41343,)*,,-*)'%"#(%)&&,&)/1//0//.).0..00**.(<(#39<<>BR#25:DKNN;3.m"%!!(*-,!%3:<69;653.  "!##"##""!"!!"!!!"! !!!"!  "&+ "4897*:6)  "')'KY24bX( 19#!1,.&.fbO,&"!*&!%2FKGIKF89/D;6,(5A] 4w7 %n1\9/+%('! ).-*,-+#&*++'# !# !$%#""##!!#%$#"!""$(A8@EDH>8:;7685343124862   "#$&)'))%)*').,*,,, +-R//20152-+)(()*,,-.//224566:;ABB><:87740..11/-..-0/16:;<9<9874476543003113579;<>=>Z==;=?!#%$###EEDA=:::<<=?BBBEILNMMKLQTa'b܅.̇ˀܒԉɓӚz[WL&%$$##!$,0027MTBBJUKVYf;W^\Kbm`VWXMPGCHRU]MJFJURceG:9514871/%&" <=E(JLLPLQZVRQDCAE%(**00.&8565560((*&&(+.,/ !1,38<@B>@G**-6<> =:7*$$%(,,%$-!# 88810!)(($"##7855<@@>7%438>.-,  ).&(/+,/,-,-*'&!$$! %&$"%&&!%* ,    +    +    ## $ &* +  +2-0!##-.. + + + |  "(%!  + + $"!# ! !#20!!# ;1'%,00.*+7A<5*+9@BJF"!) /-3071,#'  %&%"#*,,*-   +   ".!#$; %$ !$)*'''%%""$((+.26+*)&! $# "#$!#(*(%&# +&55* "! !    % + +  + +n  + +    + + +  + + +  + +  +    N  +#&  '.+}~}~}{|}~} ~}}~~}}~}~}}~~}}}~}|}|||}|}ـ}|}~~~}|}|}~}~}}}~~}~}~~}}}|}~}|||}|}|}~}|}|}|{|||}}|}|||}}}|}|}|}|}~}~~~}~}~}~}~}~}~}~~~}}}~}~~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}}|}~}~ ϷƜľ˪݃X̯˷; +  +     + " !  ! +/ځNJɷрſٶж큉ɶ¹Tĺ¾怇p:,+,++,,++,-,-..-..,,----,-../0...0/#  #%&&$!-,--,-.---,-,-,-,,--,,,+++*,.-...,++**+***+++***)'())***))**)('')('&%&%'('%&&%$%%$$%%%$#$#$#$%#"#$#""#"""#"#"!       2.SMG݁ɀϹϷ۾ۻЯҰĶ􌞐̿􎠫ـ򈗔݂țЌَ惠ȾƶƱɼͻƊΫƳ켰倘Ž¸¤㞸ûŻƣܿ؃謩❍Ǟɀ苒ꄛڃڐƾЂؽ򌌈z􄉚슺艘򐉀(IEIEMS*+='2HEKW[^aYYUSSOA%%,7=>>@>>===>==@@=<<@@;=?>?>A@EC84AXXPHN/VQ2;)DEFF(B=76847986BEE(.*,+.0/-./,+*&J.%.>4=?A>uqo_KM,..-48)[86,ZKFU5:uogL10/++4./:,,6Qnjc[]QYGWXMVXWZ`Z`39=:5@F=.0:=7\QQYZ_4967==@>2;=?>;VXXXYYXYXYWXXYXXXYX YYYXXWXWXWWWYX YXXWWWXXYXWXWXWX WXWXWWYYXWWXWXWXVVWXWWXWXXWWVXYWWVWWXXYVWVWWVVWXWWWXWXVXWVWVWWXWXWVX WWWVVVWWVXWWVWXWXWVVWXWXWXXWWWXWWWXWWWVWXXXWXWWXWXXWWVXWWVVWVWWWXVWXWVXVWVWXVWXW XWXXYXWXWWXXVWYXXW VWWWXVWVVWVWVWV WVUUVUUVVVUUUVUVVUVVWVVUVVUUVVVUUUVU SVUUVTUUVUTUVUVUTUUTUVTUTUTUTSTUUTUTSTTTUTTVTUTUTTTSSTUUTSST +SUTSUUTTTST +UUTTUUTSTUTRTSRSSSTSTSRSSSRSSTTSTTSTTRTSSRS TTTSTSTSRSTTTSTTTSSUUSTUTUTSUTSRSTUUTTSSTUTTTUTUUTUUSSTTTUTUTUTU TUUTUUTTUUUTVUTUVUUUTTVUUTTUVVUUVWWVUTUUVUVUUVUVVVUVVVUVWWUXWWVWVUVUVWVWVWWVWXWXWXWWWXXWX#WXWWXXWWYYXYZYXYXYXWWXWYXXYXYXYYYXXYIZZYZZZYXYZZZYYZZ[Y[[Z[ZYZZZ[\[Z\\[Z[[\[[\[\[Z[[\[Z\\]\][[\\[[\]\\^]]^^]\\]\^]^]^__]]___^^^_^__^^`___``_`aa`__`a`a1`__``01a_aaa0011aca1221211101112212 +33233233243433444343353345444345455656565665755666767776778788778989989:98:9:999:::9;:; <<<;<<=<<=>=>=>?@@?@A?@@T7:5336*(( *>--''A,1*4)@CJEC>84A&*./0.'.6G=>>9=92657:=:899:9989<8959>BCCC>??==<96678:JEDJNSJACB@=?<;8659?AFJ&$%((('()*)+,-,-,./.0/../01210//345565746799@D?@=>??@EH&GG&'(*--+*DK,-..,,,.-,,+OKS,-RLSNF@;989;<<<;:999<===AEKPVSRPPLKGGECCDKNRPPPLINPOOJKEEFABCMIEECCEBlDIMNNJGHEDCDEDFHPT/231`d3feec\SPLIHGFCBBEHKONNKMQU\_opjiijkjjijlljmjklkkkm6llmml67mmnno7n7oo888nnon7788898898789888999:98899:98:9:9 ::;:;;;<<<;;;<=<>=>?@>>>==<=<>??>=>CEGGEC?><;<<==<=?AA@?>==<;:;;;:;:(989988pqrrrqqpqqrqppooqopnnonnnlmlmmnmmmn-lmkkjjjkkjiijjjhihhghggfggfgfegfeeeddcddedccbcbbaa`a_```_`_`^^__^\\]]]^\[[\[\[[Z[[[ZYX%WWXWWVVVUUUTUTSSTTSSRSSRRRSRQQPQOQQPPONNNMNMNNMMLLLMLLLKLKLLLJKIJIIHIIHHIHGGFGGGHHHJKNMRg\UaIt{v854bVSQJIGGLU/6:87862OBDF@@?=;382;:>>@"%3 !&'.+-2G,MDCN.44-19CGNMMOL@/043/198033132'FOCL@B$+--,E7@A-'&&-+J=JJH;?,@'()DCC>C$*./496572445457--,%+*,0689833.))('(1`5;<99CA?;475,3;/*+#6/"?.:27@"!"%$&%'')+.()((()$'-&&**()( ##%,.*,("9432/3.%$12"%&)''()+*('(%$""$! #!&(''%%"##!8/($%+;$'.-(%)'&(/-,,--11321/0271)2--5'N>2:&>1$%-4;="&&s\>]5p:`VM&+?:]/aI$HG;BDCF*2277',+-2*,421764211330130/2122540,++,669079>E419@?<<@?>99;?DG8?.=@>;8`L9CD:5I443665=B?<<5/59D@S/)H-<9:67::;<<98:56875.;7*034323/++($#%%&$!#$#"##&))'"!""%)'#)+)&$!*#$,!!%)-*"("2*(:4/("4 ! #%''%%%&$"$%&" !$()&##&$$#!!#$$$%$! "! (*0,,22-,.()012200'FLHCAF'%/75340342/,&#$&*2575771/&(,0)"14026442+*+,,+()($#$$$/(-/---,+*'.6.*../0..)-,C$(,?@B=*5125;+STZQ-/+&"%"),!&07==796330& """ ""#"! "#"#" #" !"!%$#5:6-/3+" #)%/142b]U,'#6$!1,(7$+ba\D(%#%#%/!)Db`]WXLI;BG965236434568:9=<>>@AA?<>=!"""EF"FHHGB<<<:9:?EITH61:G96.))(.(NJNT261./YLHKDAA=AG$),***(&;16973012*,(1,10.0 >:  + + +        & $    !     3Ƨعÿƭ½ƽ킃ͷO¿ǸY"--,,,-,,-,,.--,-.--.-.-.//////  #''&$ +..-..-,-..--,,-,,+++,+,--.-.--.--,,+*++*)*+ ))(***))*)*)('((''(''&&'&'''&%&''%'('''&&% &$$$##$$#$##$$%$%$#$# $###"""#""#""!     34fXK񚚭Ŧ·ܸާɼĵ܀ٱͻҎ훞녘ǸüƷ석€ýɽ̹逞ǵ퓯ͽɿبŽƿҽ؁ʛ񫝙󀀀懗”ޭ叇􊤟邓낒ڵķ񐙈ݼɁ{"*>ELFKUQS9+9BEEV]V\XUPLLMD&'.9>= ?==?A?=>AB:A??@AB@??B@>=B?98K^ZIU1/,V77)MJF?!?=<<63986AOC&0/-/.+,1-+eP929=M:>BB=yrmdS.133595194/3/O',4wsg\A54/-11/<5&);S`b][RKi=1UUSS-\aY562;A\VK?CC943ZSQZ069559=?@19;=CWXWXXY,ZXYYYXZYZYXXYYYXZZYYXYXXYXYXXWYYXWXYYYXXXYYYXWXXYXYXWXYXXXYXYWXWXZXXWWXYXXWXXWWWXXWXWXWXWXWXWXVWWXXWXWXWXXXWWWXWXWXWXYXXW,XXWWXWXWXWWXXWXWWXXXWWVWWWXWXXWWWXXXWWXXXWVXWXXWXXWXWWWYXWWXXWXWWXWWXWXXWVXWYXWWXXWWVWVW XWWXXXWXWXWXW XXWXXXWXWWVWVWVWVWWVVWVWV"UVVVUVVUVVVWVVVWVUUUVWVUVVUUTUUVVVUVVUUVUVUTUUVUVUVUUVUUWVVUVUUUTTTUUVUTVT STUUUTTUSTUTUTTTUTTUTSTUTTSTUTTTSUTUUTSTTSSTSTSTSUSSSTSTTTSTTTSSSTTSSTTSTSTSTTSSTSTTSTTTSSSTUTTST UTTSTSSUSTSTSTUUSUTSUUTTTUT UTTUTTTUUUTTUVUTU VUUVUUVVVUV,UUVUUVUUUVTUVVWVVVWVUVUVVWVWVWVVVWVVWWVWVWVVWVXWXXWXXWXWXWXWWWXWXWXWXXXYYYXYXXXYYYX +YYZXXYXYYZYZYYZ[ZYYYZZZYZZZ[[YZZ[Z[Z [\[[\[\\[[\[Z\]\]]\[\[\\]]]\\]^]]\]^]_^]^_^^_^^_^__]^__^^_!`a`_``a`_`0`aa`a0010a111bbb10111c1cdd2212 322333232323334343454 +55445565556565667878789988988999::99:99: ;::;;::;;<<;< ==<===>==>=>>?@?@?@AAA@AAA@A@A@bC>86:2$&*)2<--*)>:;<5>CJ'+/02'19@@@A@BF@=:;9886;:67:988:<:315=A?>>BB>?@A?;><<99:89<5IHILNSJFCAA==;;:757;CEH%$&'''((()*+*W,,.///--/020222322203246656679==BEKMSQMQVQNLMNHFCBFLMNPOKNRRRQNIFFBBBNULABB@>BINNONKLJIGFECDFOS^0^]]`ddhjie^YTPKIEBCCEFJNONNORU[bFnjkkkllkklkklml6kllklllmnmm66mno88oop8788o8889998989 ::999::999::9:9:::;<;< +===>>@@?>>=,<==>>??>@BEGGEB?==<<===<<<===>?AA@?>=<<;<;;;:;:9r989tq999q9rrqpoqpppnlmn%mmkkjjkjilkjiijiihhhiihggfgghgffeeedcdcccdcccbaa`__``___`_`_^_^]]^]\[\\[[ZYZYXXXYXYXWXWWWXWVVVUTSSTTS RRRQQQRQPQPPOPNONNMMMNMNNMLMMLLMLKJIIHIHIHIHIIIKKceOt[DIP|gdgc]Xk>:?24:A?E?7H`PLSbjdcZc{IlWWTSilgqSofUIKX_d[X[`FDC:81*V/2CL:idh7974ci^OOJFDFFMU037571,N?<@A@CB?<>86AE$'+16> !&',,.NC92,'4@?;6;BIHMOOE5WJ/1+&/63212./.'LGBC>E&/2,*G@@63(L'/4/MJNOHC)D*+*%B>@$&++,.42.--0/06582/,+*,)+06:<940,*&$ACA=! %#"*!! #'),*3*%%' "+++,++-*"#%')+)$"&%68<78+*#8230!%&(*'$&%(''&"  !""!#%%##&'(%"!#$4(!!"$2"+0.('+''*.,+,+.112/0-027.)2*00-5-9B&6.0)27:75?I8m`822QSZR2P)3>315C<" ! !!! "!!#"$$#'))++(&&&'$$'+0<<96541,KFGA-:"(*%'),-*,0++,27736943122/./26770J-0-(+(/41(%-/+++.376YICF%%""#%$GF@@Q\ce`Z[-*E&(''&''*,,-,NNGH-5.C&,'=:B?BBFFEA7CG+/06786+)!23*04.253/2313212223444361-0-,7763DCJ&/6:?><?<9gK,--/5E431466<@=;86583GR0.NJ-;9:97;=???=;<7:87/=8"+34433.,,,(&#$&$! ##"#"#&&#""%'*)"(('%"/$")*)(#$$ "6(0"4:9.& !!! !$&&%$$$%!!##$#$"!&('$"#$%%&$ !#%%(*%"'&##(31--10,&+)+,3/2--IKLFCD%$+3;36126422,#"(1+-0/253/-)+0.,&8421331,)()**+)(($$&&'./02./.)&"&11.11.,,//'.R2$;FDBA1*$07;"%EK./(%#'!'-*-!/53:562./2*! !"!!!"$"#$#! !$$$##"!!"!! ! " # (89,5. !  + $" 0'/452`\VK1 #!% +%^a[U9+*&$&%$1+/GV[XUN@W0'DGE>#LRJ**'.1HF7/55--,KCFM*02027;><,05@@*tI$D +;tC2--' % 11/.'','+)+!!# !$$ #$%#"$#" !#!!&&>?AA@B<86676556530/14432 !"$)***')*,+-,1013/25352/*(((*+,.,,,-../0248:>?CA>BEBA?<<963/01//..-/22356678677=C;3576436657989;<=@A@?>>=D"BCCCEEHILIDA??=?@ACBCDGLNNPQ +SXf&s҄̈́̄睈֩x`]mee[TN]6/4'*055;83?UFBIV_XYT\npv}A`JKJHY[Uk_B]YH@CMQTOLKP822,+&$L+,=@As>9#50-0!!#!),*$2!-&&+)&''('&%'# $"!$'''##    !&!!  ! + !%?3('+'+ " + + + + + $&%$%# 0'%" $#$%!""!(7*''*)$&6EHF@<9 +12,+  "#"$%!,,  +   !#"#"&#$))''**'""')*'2)'))'%A.'" "$$)+'&## )10-$!#!"""!   + + +    +   + + +  g     #%%#"!  6 & +   +  #~}~~~}~~~}|}~}~}~}~~~}|}|||}|}~р}|}~~}}|}|}~}}~}~}~}}}~~}~} ~~~}|}~}|}|}|}|}~}|}|}|{|{|}|}|}|}||}|||}|}|}|}~}}}~}~~}~}~}~}~}~~~}~~~}~}~}~}~}~}}~~}}~}~}~}}~~~}~}~}~}~}~~}}~ ն䌊̊Z˳股􈎝÷ȋ       +     - + +  (      ! +􈟸ȹŽüѼ򀆅ѶрͼǾůϴK,,.---,-../-.-,..--.../--/00.0<  ! !$''&#  B-.----..--,-,,+*,,+,-.0///--,*+,,++**++**+,++,++**+++*)***+)()' (((&'('%&'(('''&%%%&%&'$"$$#$$$###$%$$%$%$$$#$##"#"###$##"#"!"!!! !     87cWOʀݼũĹѰ쌔끂쀉逑恉Ѽ¶󊟙׼喳ٷꀂ̤ÿŽ‵Ŀϸҹ­־ƸʀʟùĿý͊Űޭ𭔂ڋ睈膚덡ա񄙖˸º㆔屐肉:+A989?EU/H>GCBDRRNVVPNLIC7&+-6?=?AA>=<<>=>@@AA@DGABE?>>?B@AB@>;78S/PI520,-66QVQE18@?@:8>66C!>,1/.--,,.))+/-U:2=HG-:B?B?@F-=*CR]hdaH[^84-+-004RP03?SIBMKGPa30-.XZ\7=6359=A`4>=<=>?>>>?>>?>??>??@??@A@AAB@AA@@@;WE?9<.&',-02*)0RM-=>L:9709@ECI&+0-1-+;@DBDCDIF>:96889;:7577:9653249A>>=>?A?=A>:8:>;9=>:::4EHNHKSLGAAAB=<<:865;AFHH$%$&&&((++,*))()),.01/.-0/.001133102234677876:@>AAE@BFFJK(N&((()++,NDK+-,,*PNLLMQRMFMPQONRNH;5458;=>?>@A@?EJKNWSNKMQNMKOMLJDjFHFLNMLPSVUUQMMKGDDJOTIEGA?@@@?>= >>@@>@CGHGFC?=>>=<<<==>@@BA@>><;:::;::;:f999:99:rt99rr8pqqqrqonnnonpnnmmnnopoonmljkklkkjjkkjijijihiigjhggghgfeedegfdfedcdccddbcecba`a``_``a__``_^\^_]]]^]^\]]]\[\\\[ZYYZXYYXWXYXYYYXYYXWVVUUTSSSTSSRRSRQRQQPPPOPOONPONONMMNNMNNNMLKLKLKJKKJJIJIHIHIIHHGHHHIIJIsOudEIqn~TCj]ST@6U/2;C+,8;=E+1/)26 #(*-/-KI=2+4FHA9;BDIPQI:^LJ'2,&'3130-,&,?896<'14,+NKH75*,212/O>N31S-<,/-&DE$(*'(-11-0-,.,,33/8:61++)+,-3:872.-+'KKI86=F,:;BD@=??E;1///)/81*6;1,& "#&%$"":6#(*+')')'$%,23('"!%$!$()*+,/1.#%&%'++(%!"!679;"00$!%$'&.!$&,))$$&)&$  !#"! "'(')+($#"$#:1( !$#-'.-(++').2-,.+.02310/046*-3,4-81$?&+=4*(%+5:<>9;HFoYFC94MSh7[>2106WI'; ! ! ""! #"#(++,+*'&'&$#%#%-9=;95311.+00N<3!%&&JCKHIN()QLYge6<762/312,)1367D "",3+#"##" #%&&(+,(*#" !!"&'/*CQSWa^NY_-BFJ&))'%&++*(LJIH-94EG+);*1?>EA?<<9@I1302<9;76$#//-2/.23./324522232466021/00*4564+KMHF3:;:<<:<>;;?D=8cF!%&(0I1634659>>;5779*1p11-NP/=87:9;>???=>:;;62E?<$+36531---+(&$%'$" ##"#"" $'+-&&'%$ #'%'"(&' !2#(+,C, 1"$#! !!#%&$#""!!#''$$$%&$&&''&&!"%'('%!"('$*',,+11,$'+-)--*/.&HNKGE%$*67:77443874)$%-31-,+.2/,'&0/.404544111+'&((**(''%%&''-40-,-/-+$#)+-4742--.0*,A(45BGE0(*6!!@C%(/()"&.!**)22/..,,!! !"$"" ##$$"!""$&"$$! !""!"" +.*!%$ $"&))&/030//[~[G #%$""  &XUKE:0*)*(%2:#,5ESa]Y=II-)%# #%)FE(*2?=5<<C^,7< O ''[7AN9/0$.'m#3+,(&*,(*!" """$!! !"#!#$##"#%" %&##$$=?D>>C97565946852/-13430+ !#&&(&**+-,-//-*/20../140-12423852*('(+,+.,,-.0-/01169;?GDA?>DCBA@?=;545230//224332245678;@B?!# 33-)$*9:314<:<@B=2L96"$!"!!0()')!"3/-!# '&''A1@)*E#,0/ !!"-1. %'%#')%"#"%"$!"      "#"%!   !%D6)$"#20+& + + + + + + +   %''$"!" !!0+&++-0-)4@C$($!    '3;?E?1: ? + &''&!""  %#! !')""    """! (-+*!&)(('&()%%(+(0++!)'(($B++!$!"%#&)'%!###330'""$"$%%$# !  + + +  +   +  +   + + +  +  + +      &" e       ~}~}~}}~}~}~}~}~}|}|}|}|}ۀ}~}}|}|}~}~}~}~}~ ~~~}|}|}}|}~}|}|}|}|}|}~}|}|}|{{{||{||}|}|}|}|}|}|}~}}~}~}~}~}~}~}~}~~~}}~~}~}~}~}~}~}~}~}}~~}~}~}~}~}~~~}}~ ǺĴɠϸ녃Zֺꏦ¬ɼ$  +        0 +    !HۚŵǼ½¾Ͼͳʾnӯ׿<0+---,+,../.-,,..-/-...///  ! "%(('$ $.../.-,-,,++,-.-./0//.-,+*++,+*+,,,++,++**+,+,,***)))**(2'((''(''&&'((&((()('%$%%&&&%%&&%$""%%$##$%$$$%$$$%$##"#"#"#"#"#" !!!"!!     ;thZᕘľ߽пĺ˾ЀГ׾þƱٓƪƾǥýέ퉦Ÿɱ̺̀깚Ǒþ¾ȼנ𕁊گʙʁ烖爍݆푙헜⧸Ǿ테򁒫󐎐뀋ҶҞĤ憀ı+@?89B8ERLG%#D@EEPVSSLJLF+.005;;=?A=::>@=>DCEA@CFEBCB@@AACEFFFEC?;6:U,B[55.M087,WD5)-=A@B?>8A)$%+//-.,.--*-0,H6&3H''-4C?CEC;hc=9g247998:83231./,+/^[R?H>7567.6>9HE0AG[hdb?ZQ451213435?KWlQAIPKS\E^\.X[]6;7657=>=>@?>@?@??@@@??@@AAA@AA@A@@EC;8*))+.%16**/AO'MC2=;;7=PJDF%(-+12(=AEEDBADFD948<;9:97644966621469:?@?>AB<;85668@@@?@?>=>==>>>?>@@?ACGHHGB?>=>=>>@@AAA@?==<<<;;;<;::;:;:::;;:9:9:99:s9rqqrqqopqppooopppommmllkl +jikjijiiiji hihgghffeeffededcdcbcbcaaaba +`_^___^]^^]^]\]]\[\[&ZZYXYZZXXYYYXXXYXYYYXXYZZXXYYYXXWXWWVVTSSSRRSR QQQPPOQPQOPONMMNMLMLKLLLJJLKJIIHIIHHIH@fuVlCA;rrm{tfb:e_a>869?EBISYUKNVdYEGH^wbodfk]ZYLLHSUZ\QOSDP[S@bbbf61XU'',<1-.0/-,+)),)-)52169&73*+'BB@=8./RM/,XT+0,.>.30'%&)-/124789521+,*06017:41-.,-04:876---%CFJ:u,>874331-0/,+6:.481/( ##'&$"#"! #+-+-*)*&$((-511&"%##'&(*,-.0)#&)+,*+'%""9:85 .3("838=&/3+(%""#! #$#&)***& "$$9,'!!! , &+*')(&*/1/.0+.011000264',1,2,6B.;B7#&!!).6<<;64?@jMY6-4!##$"!""!#$#!!  "##!"#%#"$%&&(%##%'*'#! $((1/(!#10&"++,-/.q.*(#&$DE$$)26;577764441().4210/,+,*)('*,3380/1422/*&%''()'(&$)(((181-.,'(&%(+.43211/.3+R.$1OK&LQT050.03;B;T8@o&D(4( V\<1-$+'&--+&*6.(*!!#""! d!""$# !! !!"$%$$$#$'::?<;<:9646657541/123002"!!!'&*,./1030.)05210022..13147983+*)*)+,//-../,/00037:=CAB>?ADDBBEAC>?<6554234565412136789;DD;798<:8887688<=>?@<@?EGDBAA@@DE$$%LJIIHEB@?A@BFMQQTW ^τ&S=̈́ŅiRska5]ZW81,+-209DIICEMXR@?BSgPZRPUIHF<=9DHNQCCH:BMF<[WZ].//14/#$ <1+3l;_XTMW`_/WMOQLJB<;DC=D@   61772;$0($":7;4-/=<946:=D??3'?<)" &%%&)&!)+''& #><%"EC#(##) !!! ""%,1#&-!$# #    + +  7""$#%" VA/3;/$$2/).& + +  +  +  "$ :=%# $71?:CB?<6%$5$ %    +      +  !MôɸƽûŸɭbɿǫʳW1-,,,-,,-.//.--/.--././000   !!  "&))'%  .///.=---,-,-..//0./0.,+,-,+++,,+*,,-++,,-++**+*+++*)))**)(()(*)'')(&&('(('%&%&&&%%%$%$$%$%$$%%$ %##$$#"##""##"###$$#"##""#"""!"!!    ! @ym]̺־Ѵɸڪܶ政݁Լڷۊʹƺƺꇍļ耠ȿâúȵ􂊉شʼݳ䝼ÿźƶۿׇ—ݼ΁ߪꥎ¯灐݀끗ڋ쎝큊뎍珏扒ƭţ߇ˡ僌Ν%-?<7BLB?JIDIF? &HN\0YKEIG+/059888::7;?ADDDB@AEGCAA?ABBDCHHIFC?<:9824WYZZYZZZYYZZ[ZYZZZYZZYYZZYZZYZYXZYXYZYZYYXYZYZYYZ[ZYZYZZXZYYXYXY ZYZYYZZYZYXY +ZYY[ZZZ[YXYWXYYYXWXXXYXXWXYYXYX YWYYYXXYXXXYYX YXXWWXYYXXYYYXYXXXY(XXXYYZWXXWXXYXWXXXWWYXYYXXYXYXYXYYXXYYXYX YYWXYXXWXXXWXYX WXXWXXXYXWX YWWWXXXWXXXYXYYXXXY XXXYZYYYXXXYXWXWXWWWXXYXWYXXWVWXWXWVWVVXWVXXXWVWVWVWVWWWXWVXVVWWWUVVWVVVWV WWWVWVVVUV WWVUVUWWVWVUVWVUV(UUVVUVVVUUVUVVUUUTVVUVVUUTUUVUVUUUTVUTUVUVU +TTTVUUTUUUTUTUVUTTU.TUTTUUTUTUUTTSUUUTUSTUTTUTUTTTUTTTSTUUTTTSTSSTUTTTUTU TUTUTUUTUTUTUTUUTUTSTUVSUTUTUUUSSTUUUTUUUVUVWTUVUUUVUVWVWUV"UUVVVWVUUUVVVWWWVWWVWVVVUXVVUUVUVVWUWWUVWWWVVVWWWVWWUXW XXWWXXWXXWWX-YXXWWXYWXXXWWXWWXYXYXXYXXWXYXYYYXYYXYXXXYZYWXZ +YYZZYYZYYYZYZZ[[ZZ[Z[[[ZZ[\\[Z[\\\]\$^][\]]][\]]\]]\\]]]^]]][\\^^^]\]\_^\^_ +`___^^_`__`_`aa0`00a0aaba`a1011001002212212123222323323232232333454554545554556766555656-767776667787778778887778788898899889899::99::9::9;<;:;:<=<<=<>= >>>?>>>??>?>=?>?@A@@?@@A@A@@@BCYBA961/+,.(%0-(,5LO-H=;<=88FBDHEGKHA?=>><;<<68:>@CG$#"$%'',1++))+-)(('(+..-,+.005=8;8604656888::=?=?CHLORRO**+**MFMV,,***PP()*PKNP*USTXRF754358=>=;;=?@EDEHNPTVYTROMIKNMJMOONTPKEHIJNPPTTUTVTTUTQLIMSN?==FHIHHHJMMOQNMONQU\[SOMPPSW^c34nomf`XR#LHFDEHLNNQSYjpmlmmnmnomnmlmlnml67n6786o7o8q8988989:99:9 :9:9:99:;:;: +9::;::;;;<=$<<=<==>??@@A@@?>=>>?>=>??@@?BDGHHGC?>?>>>=>>?AABBA@?>===<<<;<;;<;;<;:::;9:999:::;::9rsssqrqqpqpnppopoopprrqnmnm"lllmkkkjjjijjjijiiihhfhhggffgffefdedcdcbbbcdbaba`_]]]^]]\\]\\]][[\[[[ZYZYXYXYXYZZY XXWXWWWVUTSSRSSRSQPPQPQPQPOPPNOONMNLMML KLKJJIIHIHIHGHGG=XuIXC>AC{n~lv:c+-F>grBMZMSUVVSC68EL\iVOQVskoYSQKKF8KHLG7COH2]i987=INBGMG=5.(7LJ>xdNIBFGKSYXOFQQLB?@ETRNW),36197640-,+'(('MNECM9PN"4D#((&(--+,POMIFEBBECAISN=]QL*.-&/D<973)..,'N*(4`<8:2:$14-+&72AC9000R17/-(/21:)40)''*+19>@BB<4244<646559@>3/--.+5;983--1-F@CIB:A"*079=856202211.,0:57620(!!&%%%&"%" '$&+/-0--/)''$$%+3)&,*(*')(-+-(!#$',.,,*($$ #)% !34 +9B%'%!::;* %,'#'()())*)&$!#"7.$!&6!(+'&)'%(-.---+125/0/0073*/0-2*-9?;6+ #*5= 964/:% !#%&## )#'-/02/+(&$%$$&').343/,,+X683397311/0/232[F>CR\6>>;0//+*$&$#"!!!"'$"$%#!%%,,.022+"!#$%-31*7.MS63.^`?,8@GED'(%(')'$>71=-9.7#*%#<37?C:9:@;".4200349?92 *),25110514350522565./2/.*5727PE?>>=97^>5=43='235668;:83458264/TK+4C>::<>CC@@AA;<.@G-+(+/34420/-,((&&&'&%$#"?..!%)*#)%&%%$&&! "%%".,'  .$(;!$$!)71!"!j#"#"!  !$$$%$&%"""##%((*'" &+563*"+'(*-+.2,)/%$##"#&039659965532+/06344010-)"+' *288//+121,)%:'''&$(&)./4623-' &%$/0011121/1/'8$)2:DP&*,(633;"$#"'.+#%!*2*&,'"# (4:/+-, ! "## #$#! "!"!#"#" 2,#  '!6/) $$$! & "/0142+K/0S%$%$$''&$ =CM=6953/.'(4900"&+9TZVJ.K*('&$%%(1@MX`N@=<@DL=.%$GQU/500/27=A69CT"hx4_e=1,$ ,+($0/0++3*(*$%&%!!!"!!#&! "$%$"%%"'569:89>;753556431/244134  ##$&*.02653/+25221/1287:;:3+,++,-.10-.---/01356:>@=><<=BEEAEDC@FAB::67766764222367876:@@757==:::76879<=>@=?ABGGCB?@=>@BE$$LMPMNKFB@A@BDINRTYcǻ( kh΄φ$Ƙt\OJ}pt|=k0-94Yh;AKAGJIMM@4/:AQWJIMMdZ]JDE>=>3DABA0;A?-Q\31/5=A69=7,'$'7:5m{bKF>DFKNPOG>HGC=<;(+$#!%#+#"!$! "!""# ((+-&#(!!$#  + +   #" " 2N-''#/'.!!$" + + +  + 7## %#"  !"!!"$>,"*3:!)(%  +  + +    !17#!<>###"%   !!!!$!$0(&&,$*&'(*$'"&)),%$//")))(&&@%" !#$%$%''$!""$ D!6/ +%#$%&))'&%% "$# +        + +   + + + +     + + + +    +   "' + +  +~}~~}}}~}~}~~}~}~}~~}~}|}|}~~}~}}|}|}~}~}}~~~}~}~}|~~~}|}|}|}|}|}|}~}|}|}|}|{|}|}|}~}|}~}~~~~}~}~}}~~~}~}~~~}~}~}~}~}~}~}~}~}~}~}|}~}~~}~}~}}}~ ϧγ݆⃌԰Ԁ]׼񏒞˿E!   +           0°ʿ넋دNŸſf/----. .00/..//////...000  !!"!!  !$'*+($ (/../.-+-.---./011//.-+*,,+,--,,+,*,.-,++*+)*+*))*( )(('''((('(('&'&%&&$#$$%&%%%$% $$%%#$##$##$$#""##"###$$#""##"!   !Cykb쁥й鍥ϩĵ郈̾ꂬֻ̽õپƲͻ؎˴ٲ񋐉퇝ǿ€˹¾̺¾Ź䂈ʮŧȾۼÿƻ°׫͡沛Ω͒󅗘ʵ눚͸琏Ϲȿ޲ȅړꂂԽ6,C2>=>@A@@AB@@?>@AC?<>ABHIGE?=<9?.E-443..:6HEAAF8  -8=FGBDI&).1+'-...(@:>CAMH)4%JGG-13=@<@=:>?trq886:::754430-.-.`cUQF7,6;3;HDK*E0/8FZ\b^DP=671/3V5GP`'fXPNINOXB51/XU\487765:>=DN3C[ZZYXYYZ[YYZ[ZYZ[ZYYZYYZY[ZZZYZYYZY ZYYZZYYYZZXYZYZYZZXZYZ[YZ[ZXYXXXY ZZYZZXZXZYZXXY XYXYZYXYYXYYXYXXYXXXYZYYYZZYYXWXXYXZYYYXYXYYYXYYXYZYZXXYYXXXYYWWWYXYXXXZY$XWYYYXXYZYYXYYYXYYYXYXXXYYYXYXYYYXYYXYXXYXXWXYYXYXYYXYYWWXXYYWWYZXWXZYYXXXY ZZXYXYXYXYZYZYXXWWXWWXWXWXYXXWXWXWVWVWV WVVWWVWVVWWWXW VWVWWVWVVVWVWVWVUVWVVWVWUVTUVVVUVUVUUVVUUUWVVUUVVVUVUVUVU VVUTUVUTUVVU VUUUTVUUTUVUUVUUUTUUUTTTUUUTUUTUUTTUTUTUTTUTUUTUT VUTTTUSUUUSTUUTUTTTUTVUUUSVUVUTUVUUTVUVUTUVUUUVUVVVUVUVVVUVVUVVUVUVWVVWWVWVWWVWVWVWVWWWXVVWWXXWWXXWVXXWWXWXYXYXXWWWXYYXWWXXYYYXYXWXWXYXYXYZYZZZYYZYZYZXZ[Z[Z[\[\]\[\\[\]]]\]^^\]^]^^^]]]_^]_^_^_^_a`_` baaa``_aaa0`011010221222112123223322323443343454545676766777877898889888999:9:9:9:::9:;;:::;:::;;<<;;<;<;< ==<<<=<=<>=>?>>??>?>???@@??@AAA@AABABA@CI8>97:1//*#"(50).>Q*RU/<;6:BFKJJM-.5;3.=FIG?@@9;<:;88778876777663/-/14@A?>==>=;:<;;9=?=<;64#!GJFDGE?=?=<:9DG<;=@BBGH#%&&'(+)(+*())'&&((*,,--153244689;>96366789:89<<:;>@BDIKOO),.**++*MAM--*+*)*QQR*PLPQ+VVVWVM;53234::89:<>BEDDHMV[_aYVTSOLKNNMOOMOLMJKMLgMNMPQTUWWUVUWUSNMOL>?EGHHFGHLLNQOORSU[a\TNMNONRX\^chmpmfa^XQKHHHJMORSXfpl6mmo77nnno77mnnn7mn766677nnn7o +po89q899rq89:9:9:;:;:;:;<<==>>=>=>>???@?>??@@A@BEHJIFB@??>???>>??@BABA@?>==< +;<<<;<<<;<;9:;::;:N9899srrsqp8opqqopoqprrrqppommnnonmmlkklllkkkjkiijiiihfhghggfgfefeefgeedeedccddcbbaaca-`__]^^]]^]^]^]]^]]\]]][\\]]\\[[[ZYYZZZYZZZYXXY ZYYYZZZYZZZYXWVVUUTSRSSRQQQPQ PQQQPQPOPONMLKLLLKKKJIHD<^cAZGKCDBslojd^^9Otc`QTW)I)NQ->BN\Y`f~siTSTJGF7X`6-M9BIA=8:A>6;B@@?C71-.0N]J?glM~{>?GS\ZTPTSSHIKS/-)&,2:=97<:523451-..,*DE);PK86526VR35.3QM08I50+LC',4B$+69=9770+-/,021,61441/$8=%((&%##"!'$&-/.1--0+)*''(&(%',(+-.-,2.0*'))(+---,($# "#!!"#%""(:$%A>=#:1)"(5@)"#'(((+)&&#$#0+%&#"%8$+*'''&%&,.,-(+034033237-)/-21*:CG95'#-6=4-%9;xs4.d:7:=>::79?BF/C@>+8==<88dA6768;H-/4779:;72346561.QJ+7C?<<=@BDCAAB?/CU,35+/365111/-+*'$#&'%$"#!,/4.,-"&)"& %'%&((%2'$$!1' 9( &#!! ""!! !"!"!  !#$&*)% "&)&**)$ (15053) "$!";,0011)C#$$"#+3363452275/)*/8:376.200*#!,-!(1-/510)((%$%%"&&''&&%-442263)#B%#'21002001/2.<)7:?L,+1**%3%$8=## !++'&*2+/5-*%"+870,*% !# #$#!"!!(&  &(#"! "!'%#"$ $.1/1/*g02ZTO&%$('&$#!!>HEA;1(-1+2A>C#7'%-;QSUL4:-('# $A+?JW`RJF@DDO;.'%HLU03110/4;?ENNv  $;.A$!{fB1+* #.-3--(+,+,,+/ %&$J!#" !#"!"!##$#$&$%# #6;78=<744453.6935454262  #! #!!!$%(*..230*11110.23788998/-,,++//0///0010/139=AD=;;<<>>BBACEEEBB>?><<9856656655689x=@47=><<;=;;;?@?AELHECBA?3NT/+D2=D;86;EC74:6/497501'##)'?L@:gmR|~|,=39;()#+2*"# %!4)0()2+($"!-('$#)?>(( "85 *6"!=6#&&$!  "! !#+(#(&"#%! " #  #  $&&  /DE&2%% (,#2-*&       !"#4**/"#       "(! !!")'   ""#!$ 2(&"D)&')*'&#$)+-%&&%))&%&D)&$%%&&'%!"##"!3."*&%%&'))('&&$&1 + >       +    + + + + +  +  + +     + + + +   ( $   + + ~}~}~}~}~}}}~}~}|}|}|}~}~}}}|}|}~}~}}}~}~} ~~~}|}|}|}||}||}}|}|||{{{|}|}~}|}||}|}|{|}}}||}|}|}~~}}}~}|}~}~~~}~}~}~}~~~}~}~}~}~}~}~}}~}~}~}~}|{|}~}~}~}~}~}~}~~~}}~ 󃀄޻ȳ㍊׶򁆂`Юڊɖ?%  +        +  +6   :ƽǪꀄ̛ҵ¾ľȿ׫þJѦð//..-/..020////./00/$ !!"""!  "$(*+)$   -,--,---./01100/.*+*+,+,$--,,,+*+.,++,+++,,,++*)*+++*)*)*))()()(())'&'(''(&''&&&%#$%&% &%&&&$$#$#!$%$#"""##$"!"##""#$$$#"""##$"!"#"!  !! !  "#C?@ABBBGHFC>=;8E-C4343.3>6HEDEO,--,+.()-*&6#8TI>EQ)I'JDH/(Pp;k=>:[vtnnokj998855885/+-+Ua`a\>-66/BCUeu?8H6395Q10@Nah]WXR9OV<22-,Y/6848769?>?f_LYZZZXZY[ZYZYZ[[ZZ[ZZY[[Z[ZYYZ[[ZYZZYYZZZYZ[ZZXYZZ[YXYYZYZYY[YZ[[YZY[[YZZYZ[YZYZ[Z[[YZ[YYXYZYXXYYYZYYXYYXYXYXYYYZYYYZYXYXZYZY XXZYZYXXZYXZXYXYZZYXY XYYYXXYYXYYZYZZZXYXXXYWXXZZYXYZYYXYZXWY'XYYYXXXYYXYYXXXYZXXXYYYXXYXXXYWYXXXYXXYXYYYXXYXZY +XYYZZYZYYYZYYYZZZYXWXXYWWXXWWXYXXXWXWXXXWWWXXXWWWXWVW +XXWWWVWWWVWXWWXWVWVWWVWVWWXWWWVVWVWV UVWWVWVVWWVUVUUVVWVWVVWVVWVWVVUV WVWWVUVVVWVVWVUUVWVUVUVUVVVTUUUTVWUUUVUUUVUVTVVUTTUTUVUVVUTUTUUTUUUTUUVTUUVTTUT#UUUVVUTUTTUTUTUTVUUUTUUVUUUTUUTUUUTUTUTUUTTSUVVUUTUUVU +TTUUVUVUUVU VUWVVWUUUVWVWVWVVUUVVXWUVWVUWUWVVWWXXVXWUVWVVWXXVWWWXWXYWXXWXYYXWVVXXWX*WWXYXYYYXYYXXWXYXXYXYZYYZYYXXZYXYZYZYYYZYYZYZ YZYZ\Z\Z[Z[Z[[Z[Z\[Z[!Z[\\[[[\\[[]\[[[\\]][\\\]\\]]\\[\]^^^]^]]]^^^_^_^]^`_,``a__``___``_^`000a``a```aaa0ba0a010`0010100121212212323322332323433434 554545556465666565656 +76766776767887778789878998::999::99:9::;:;<;;:;;<=<<<==<>==>>>?>?@???@ ?@@A@@@AA@ABA4gE<<=<640$$###3>',3M(+-5?0-3>F(JRGEI3@A04DFEAAC<=@B>9:987787:72..15?<9@?=;:;A><;<6&*')NEC??9AOF@??ADEGJG$&'')('**)('(''')+.-*,,-2/46495689655853563356769<>@ACGHLQW-++-/,MCN.-,,++)MNP)PKPU,UWWUWN:83135?:866:<@EEEGLU[_c_Z[ZXUPRUPOPOPPKKKOPOOMLKNNRVXUUXZ[YQVWBADDFGDFGIIKNMORPYah`VQLMMNNRTTX_gknhibc^UNJIJMQRTWkFo667nom77678o7n7l76767opqqrp8qo7orq89r989:;:99::9::99:99:::;;:;:;<=><==>==>>?>@@AA???@?>>??@ACFHJIFC@>>?>>?>>?>>??@CCCB@?=<=<;;<;:::9;?:;::9:99srr9r989qrrqrprrqrsqpoomnnmmmllmklmlmljjjkjjihiihihghgfgfeeedddcedbbcb a`__`^^]]^]^]\]]\]\\Z[Z[ZZ[ZYZY[YZ[ZYYYXXXWWVVUTTSTSSSRSSRRQQRQQRQQQRQPOPOOONNONONNNMMMNMMMLMKJKJIIIHHHAdBKTOVNEqle_[cjok?KTdgFM=BG)3FFFEMc]<=>??=841.,(I/34635CML'(((*+'LQONMMDCHKIAA:L?FI,9EBFKD9.-.)/5/,)'-TE57<=:'5463-$5A849/2,NV03<;DA@E95)HGI-6;><889<=2,..38:5138A":62/.7?=81-0+@58?=9>@<$247681+)*,)-22+3.22/.!06!()'&"#!&#'-0.2/./*)*)('()'(*'&(/-,020,**)(+,-,+(%%$#%" $%$$!%%)%&*7:015>51++($"':%/ "&*..,+(%'&0&!($++)+,&%(,,*-(+.3/-1135:+*/*2*J)&B82" %-4:2)'=6^}JU5<#(5&L>5R3C`2Y; S,2,E$##"""&%$&'*)#""$(+/.*)6''&$%$$'*/29;0**,25434610-67-*-//0371.PIIP*/50/.*" !$(!("!!$#&*-1122/)-422,)2422.0++V[/9>DCG$&&')+*(#?97=,:5K=$%G8;88=B;<@BB(0.#%15;=>ACCCB@C6?+120502788./0/-*+&#%&*&#%!' &+,+*)+!$ .#%'+-+%!!"+"#" 2&! " 6<)"" """!Y "(,*($!#((('('''45/1396',* 0',0./-&$F#"").2..3431403-*-5865642/01*% "64*($ /30(#%<$!%%%&(084115+'A"$&120-00//0//P%#,6:0%"/4:MXc7):*)-&7"$6FZcVPPK5DL4+(#$L(/1.11019=Ci7 w P/^32]ԆH2-+"!+ -%#&,.)/-.-%%$$# ! J!"# %!#$%$"#"&#$"$":88644534.1;3463445561 +!   !!""%$&+,/38/*00231-156898;8.0-,,,6..-/112221138=AD>:<=>A@ACA@CCGIEC@AABA=8887899779<<96>>==??@>a??>BHLIGEBB@@@BCACFMSVSSMNLDA@@BHOT\`SׄmXItoi`\bhld5#&%&)07A<2SOYJE};;CI('#)SG><@@BJ#!!%)*-/-+,,+--,)&$# 9%'(&$%168:AB@>>5268501.9048#,6/050' ! %5+#(00*&"""*$"("%:D&$*)1-+/%#443"! # #$*!#($!(&" "#!"      !% -!  1I,5  !)!0/.  +!   " !.'')  + + +   + 7:!"&  "&)!!! !"#"# $" 8*"9)%''('%((*)+)"!%('$%  $$#%%%##"##$"470,")&$&&()(''$&!%  +' + +    +    +  +   +        +  *!    + ~}~}~}~}~} ~}}}~~}}~}~~~}~}|}|}|}~ }~~~}|}|}|}~}~}}}~}~} +߀~}|}|}~}|}|{|}|}|}~}|}|}|{|}}}|||}~}|}|}~}|}~}~}~~}~~~}~}}~}~}~~~}}~~}~}~}~}~}~}~}~}~}~}|}~}~}~}~}~}~~~}~}~~~ »۽ӵ􍉌񃋗W򀂅ȨǰԱݗÞʫ       +   ƻưރֱűŋ¼­˼ɷȽ˨Qٲķ)/,- +//.../000/..0  + !"""!!"%)++($ ,,,-.1/,+--,,.-,+--,,---,-++,-,,+,**+%*))('()*()((*())('&&'&''&&'(((&&'''&%&%&&&%$%&$$#$"#+""!"#$$""$$###"###""!"#$#""###!!!    !    #'K9Yѽήʩ΢ų˲Ƣ򆋓ҿ˾ׯ܍Ǩ̿骨ՃЀ˯˱кȱ敡ľʿŁ͵ʾť䔰Ƹݱ။ϻ٥Үφ쯯ՙ􀉓􁄆󏘉ظ׾熁燛ĩ텋쀅ʯɥ %E9@>HMS+R*)@?@DCG?AKNP@954>A9&&48<<=;;:<=???>??>@???BDFCB@@BB@?=;6PQK4244-0;5^UJG !%9-1>CEN+.2.+(('(*$7)'G0.K>>/K)IEV1CO^jPo?k_x}sc`RH]j867637861YWWUX[cbL@PrTfA?5083[-3L[d\WacF4fI30/.,16778:76>=>=>?@?@?@???@ABABABBABB@g=@B<75,%(%%$*;.-0E+++:@=24>EO))>59)+..0=<;8<=<=?A;999:7.&%MLD?><<=AFG>:<@A@BBED#$%%(),*('())()'(+-(()),0/114768;;44553003146656989<AABEKS[`2c^[__`ZWWVXURRROPOMLOJLPMNLOPPRQUXV\[X`^KGFDDDEFEGHJLJMPRZf6dZTPMMLNOOOSU]dhhkiih`ZTPMNPSVVhAnkm7ooo8o8778oop9qqq88pp87898889s9::;;:;:;;:;:;<;<<<=>>?>>>=>>>?@@AAA@(?@??@@AB@ADGJLJFCA@?>??@???>>@ABCDCB@?>>=<;:;::;:;:9rrsrp89:sttrqrqonmmmnmkjkjijih,gghigggffdfdeeddecccdcddccbabbb`aa__^_`^_]__^]]^_^^^]\[\[\ZZZ[ZZ[ZZZYZYYY[ZZ[ZZZYYYXXXWWVUTSRSRQRRQQPPONONONNNOMMMNMMLMKLLLKLKJIJJIHIHBk?<>HRSI~si`f`YWaag|9-9;:.PU?JDZVD86Kdo:Z`XMDEEC?KUSKUZJKOMCDB7>ZZHVRYOA;.WU.[04BHHFFCCAAA=60//3<68;<:7:?=FL''&''ONNLLKJ>@F@?>1HCN.69@ED=@:91-2/,<351,/,G83>>98 *141-G<<4.01*PY64<:=8>I52IJG-467744667530.-.364217>B?>63/0=A8321,"830/*.8=%86:;;2.++*)+..&.1540-!0,<'(%$!"%'!'11/2/00+**++,+*)))(*)+,+,..*)+.01180**('$%%#"&)'!%$%$+,.+''11)*),+()2*>(" "$(+*(%&*'"96,"" /#'%%('%'),***%-01,./0046,.0+- ><$?5'"0,+15"4+.81esR46(0S+/4=O7P>5Vj2U1+I/EX6$#""!$%$$&))%#"%++*+)(&%&'&%$%+15=<-*+.274110.+0148/-../13355-%GJ(+-33-"#""!!$"!("!%%%'*)**-//.0,%*252+&+.+0-'&(/01M5B=K&'%'))++'E>9;>/8/:C&H=;=98BB=>!# %+'="/:;57@;4,!#(40762/-,.415877;<53;0.8593]H70)Ha568=;::=??D%C !569<;9638#.7'#?&/6745<:55675681YKJ.6B=;:<@BBBAA8,036/,055763'21/--*&))(&#!'%&$"& "$&,0++ . '(+''#E&$5=9 40!"&& "4# $!! """   !$('%&%$))'%$$&-51.0378- 0,&-!"#E"#$#$$++1+,24341*+*55866976712+&%$$"36++-',*+)'''&&%# !$&*27111/)% *$0'52/.--.02/+:04;=BBJ.1'*"-"  ## !-4"'('+,1* */3*& !  ,)+ %"9/$  $'+  (#&($+$-=P=W1S[f^QME:FQ)&&&#%$"44407>HL=.6.(9J@FI(=%,=25EcOM62)%+$; )KAT]WRZ[;-X?)&$&&)-//231-4=BlՐ:6I4@ +J7 3&7J91+$ !$#,.()-,0'%$ " !  $#$# #E&&#!!#!!8962133138:5247556352 !< !! "%%&&(,/45414131-/359991-/,*-.0..,.011159CDCEGEEBBEAA@=?<<=:78:;;>;9AD9::<=??AC?>=?BH&JHGDDB@ACDBBCIQWWUOOPLIDBCELSZ_7wΆ Άㅑ~f[Iumbg`]\`\^o5#*)("?G486DC;31AW\g1KSOD<@DA>49MN=<:://2,-.%;3:"),21.)+&$ !$"("'%!" 1%%02+* +''! $'"@E(&,()%*1# /21N #"! %#"%%#%##! $   + "! !"$!%7B2$!)"$+7,"  ++ .  $$  +   1%!   $&##)$ "! ##!$"% ;+ 2H&'(*(&'()),$ #''%$ !$$""&%##%$$$% :00"+'%%%'))'%$"  % + + + +  + +     +  v   +  +   +  +    !  +  ~}~}~~}~}~}~}~}~}}}~}~}~}|}|}|}}~~~}|}}|||}|}~}~}~ }}}~~}}}~}~}~}~} ր~}|}|}~}||}|}|{|}|}~}|}|}|{|}}|||}|}|}~}|}~}~}~~ ~~~}~}~}~}~}~~~}}~}~}~}~}~}~~}~}~}~~~}~}~}|}~}~}~}~}~}~ оѱӂ؆뀌ބ҃V½ſмî鷿H     + + +      +CɲӣĴϿɼȱIɿպ1.-, ////....0110/.1  3 !""##!  !"%)+*'$ .,--1/-+-/,+,,-,../-,,--.---,,++,+,+**+***('(*))((()*())(&'&'&%%%&&'&%%%&%$&$%$#$%$#""##"!"$$#$###"""##"!"$$#"!!   ! !"!  $-Hn[˵򗛍ڹ⻳ѷд􇏢Ŧׄü˼ʻǧªҮيθ¦ߞ̱ԻǹȭᐕǾ¹ŹθŹïɈƿ֜톊ϑܧ淹ڬ߬عׁꃆ뇛񰟿̃򁇋ʵ늍,H@KIVWSSKKI:C@HGEC>;NMF57>B@3/57;<=>=<=>?==<::;===<>DDEC==ABA?:<<+@02133,-11TMH$#%&>(.;BH+--12,)(()&7+3,%212X+2B(MP2+9-37YZBr^lxjJD@7BZ^gpk5565_XWUU,Z`^MKOECQVMRXJS/3EB>F^[9AEC/(7KP9La]XWbmBST9/,/.375597456>AG4LZZYY[[ZZ[Z[ZZ[[[Z[Z[[[Z[YZ[[[Z[ZZZ[ZZ[[[Z[Z[YYZY[ZZ[YZ [Z[YZXZ[ZZZYZYY[ZYZZZYYYZZYZ[[[ZYYZ[ZZYZ +YYY[YYZYZZYZZYYYXZYZ[YZ[ZYYYZZYYYZYZYZ[ZYZ YZZZ[YXZZZYYZYZ[[ZZ\YZYZXWXYZZZYYZZZYYZZYYYZ YYY[YYZ[Y[ZYYZYZYZYYYZYZYYXYZZYYXYXYYYZYZYZYZZ[YY[ZZZYZZZ[ZY[ZYXYXXYXXZZYWYYXYYYXYXYXYXWXWX WXXWXWXXWXXW +XXXWXWWXWXWXWXWVWVWWXWWVWWUWWVVVXXWWWXWXW VVVWVVWWWVUWXW UUWXWUVVVTVUWVVVWUVWVUV2UUVVVUVVUUVTVVUVUWVUVVUUVVVUVUUVVVWUUUVVUUVUTVUUUVUVUVWVUVWUTUVWUUUVVTUTUUUV UUTUUUVUVUUVWV#UUVTVTUVVUUUVUUUVUUVVVUVUUVVUVVUVTUVWVWVVUVUUVVWVVWUVW VXWVVWWWVVWWWV +WWVWXVWWWXWXWXWXYXWXWXYYWWXWXYXWWYYXXXWXWWX$YXWWXYXXYYZYYZZZYYYXXZZYZXXYYYZYZZYYZ;[ZYZY[[ZZ[Z[YZZ[[\[\[[[ZZZ[[[\[ZZZ[\\[[\]\\[]]\[]\]]\[\]]\[]\\]]]^]]\\]^]\]]]^]^\^]__^^^_^__`^_^^`^^___`_aa`0a``_`a`_`0baaa0`a00011001010112121112211121121233322234343323444345445445654556655676566676656767778876778789897999899989:9:;9:;:;;;:;;<;<;<;<===<=<<=<===>=>?>>>?@?@@@?A@@@A@A@AAA@AABAABCBBDD?BC;97').)&%#'-*1>N)(?EF:57AHIK<7:A#*+-3>=>A;:99:::;8895331,,279>@?>:9<;;==;;?:;;:@=7'&*(%H>;>BHOW010^^bdda[]^_\ZYUTRPOPMKONOPSONKIMVWW\]hbRMLJIGECDFGFHGIMRVc6g^XTQNMNONNORV\\bfjlkjf`ZUQSTX\Mpm7l677887768o78ooop8787op8p8oppp9qp888989rsttt:9 :::;;;:::;;;:9:;<;<==>?>???@A@+?A@@@ABBAACHKMJGDA@@@>A@@@?@?@ADDDCA@>?>?>>=>=<=<;<3;:;;;:;;:;;:::999:9qst9q9:tusssrqqponnononnnmmlklmlkiijihhhiihhgihjhgffeededefdcccbccbaa`a_`__`__^7]\]___]^]]]\]\\[[Z[[ZZ[ZYZ[[ZZYXYZZYZ[ZZ[ZYZ[[YYXWXWVUUT +SSSTSRRRSSTSTSRRQPO +NONOONONONMLKJKIJIHGls2;=Ezyspgdbc\XdC<4,UQRZ6;655,-9BAEQRT\eOEJKN@uu=6CJAFLKI\_i]CCWiz_ZW_]@61*.]_47@EB7a]XZNHGBBJW25:=;6XPQSZ_22559?BFHEE?@@>=7/,2=BB>:=?;87;:@HJ$%&NLLJDLIA<:;7.-@?I.18833+!33>9-+6?$679@E51/--,-00$+-/00+8((9$&%#! #%'#(10/2-01-++)*,-,+++)+,-,,*'),/0060,,+)%#"""'+*!! (***,)+***2*##"%&!!.J2'$"" "%(' !#>1-*,15 $')$$$" %+,)++(*/0,./2150,0-,''L<#;4'22169"$ 905?22aV8=,9G8,3B:=;:;#?;"$:#,# ,;42=>:52" ,36751/+,0*2877:=:65G;B\;8^E7-+4G237;968;@?A/>!#079;=:87.#,=(,)(/4646897768655ZTKO.8A?<:C4XPa[A81$4IKMQL%$$"=96229?E<:<1/@IEIQ?C%(6528MUq2595%'/7,CZYTV\a6FJ-#"%&)...11--.8Cl//A'U$N>5*&# ,&060+)+++.&%$'!   "!#%$%&"!%#$$(#"#$(%!:42156452321244350!  "%##!#!%'*25563820077<.+-+),-,,-,,0/000/158=9659;;>=A@:;>?@?=<=>@BAA>=?@G&IHGFECADECEBDGOSVSRQMPOLIGFKRX]" aJ¾l[|vpjgdd]WY73/)IFFF(-)+0)'1;89@DCJXGto83;D>@GCAT^bT<;KWncG@   &   +  +    FӴڏԨ»⁖炀ҹ˸Ѻ󁉋ƺŽʹIӹѾɹ9,,, ./ //..//110/ +2    !!""#"#!  !"&),+(#!  ...110--1...,,,*++,--...--.-,--..-++,+,+***+***)())(('())('&' &'&%%$%&'&'''('&%&%&%$$#%%&%$$$#"#$#"#"!  ! !"!"!  %+NvŰ͸өŷ̬㆓򁊀¾ɶ̛β尥͹ȷԭǖѐ¶οǨƭ؃߾üȩտڀ¸ЀȳѳĚڃ̀͞׾כٻ섒ڼш¯с􂊌脚틧󀃈ۈַŹ 숙 8M?LNQTTIEFC1A@BCCIIFNH>HFCA:-#33688:989;;:<=<;;<>><>?@AA>9;>BC@<9EOG43210++*+*H>#&&L:%.8FP-.-/2-(*++&8- #'20428)5B))2,9-259QkxUprg`b^`^\\`jdi76i_VYVVT+,TKOWH@HUMQYQ4*2JPHJ=9C:qARAZ0,PN4T`YQTjW;U@4/--3:756:856:@>CZ[Z[Z[ZZ[Z[\\[[Z[\[Z[ZZ[[ZYZ[[Z[Z[ZZZ[\Z)[ZZZ\ZZZYY[[ZYZYZ[Z[Z[[[ZZYZY[[[Z[YYZ[ZZ[Z YY[[ZZYZ[ZYZZYZZYYZZYYZZZYYZZZYZYZ[ZZ[ZYZZZYZZYZ[ZYYZZ[YZZYZYYYZZYZ[Z [ZYZ[[[ZZ[ZYZYYZYYYZY[Z YZ\ZZ[ZZYZYZYYYZYZYYZZZYYYZZZXYZYZYXYZZZYZZZYZ[Z[YYY[ZZZ[ZYZ [ZZYZ[ZZZYYZYZX YYYXXYXYYYZYYXYXYXYWWYXWXXWXXYXWX8WWXYXXXWXXXWXWWXWXXXWWWXXXYWWXWXXWVWXWVXWXWWWVVXWWWXWWXXWXWVWWWVWVWWWVWVWWVVWXWXWWWVVWVUVVWVVWVWVWVWVWVWVWVVUVWVUVWVUUVVVUVUTTUUVVUUUVUVU VUUVVWVUVVUUTVUVUVVVUVUWUUUWVUVUUVUVUV UVVUVVVWWVWWV1UVVVUUVWVVWVVVWVWVVVWWVWWVWWVXWWVWWWXWWXWWYXWVXVVWVWXXWXXWWXWXWXWXXXWYYXWWXWXWXYXWXXYXXXYX%YXXXYXXXYYYXZZZYYZZYYZZYYYZ[ZYZZYZZZYZYYZ[ZZ[ZZ[Z[[Z[Z[[[\[ \[[\[\\[[[Z\\[[\\]\\]\]\]\^][\\]\,[]]^]]]\]]_]^^^]]]^]^^^_]^^^]\]^^]_^^__^^_^^_`_`_``a``_`a 001a100101000101 01112211123232344333434345544456565545567657877787899989899:999:;:;<;;<<<;<;;<<<;<<==<<=<=>=>?>>??>>?@A@AA@@@ABAAABvDN;:<>BA$(,-07D'%HH?>@B?;:;999:::85443520.-1:<><<==<@?98B?2"$(H@?>7>B989:789>ECD"#%#%&))+*((().-+,.-162./4874388:8953169<@>???>;:89=>@ABJM*,+OKV/..,-,*)**+*()R,,VVWVG<732255755677:<;<@EKU\ZZZ\_bdccegjheda^[YTRPOQMLMQPMJLLPUUY`d\SSQNOKHEFF/FEFGHJMR[ge`ZXTTPPOLLMORTSZ`ehmqomg`ZXX^k`ol7m78op7788oopppq8oppp89889q99: 9::9:;;<;;:;:;:; <<;<;;<;<;;<=>?>???>?@BCA@@@AA@AABBBFHKMJGCAA?@?@ AACDDDCAA??>=?>==>=<;<<<;<<<;:9:stt9::;v:trq9rqpoonnmnommnmmjlljkkjjihghih>fhfffdeeffeddedcccbcccabbaa__`___``^__^_]^^__^^]^\]\][\Z[\\[[[Z [\ZZXZZYY[[Z[Z [\ZZXYXWVVVTSTSSSTTSSTTTUUTUTSSRQPQPPOPOOPPOOONMLMMKJIIDdn\EFDD~stwwqh`b{CDELFA8.JIS-TTXO1;GR]^[YTSJFIdgIA9BHF@Vbi]UI?2(>4C%/>>64;DHG;f^[`PLMJJQ]6;=<<7d]^Y]134979>BCCDBBA?:636;@AAA@A?>96569 ;;#$(1.-0+02,**(((,-,-+*--.-++-,(%(),-.,-,,*($$##%(,("##! +-0/0/3//12*%$! '6'$$%'$""#" !#,&!"#,!*/.))'#!$+*)/(*.21+--//4-*2.+$5'>E<3,2339:#';738";C^]ULMZJEM\\B-R94 $%!#"$%%'&#!6;,00/)%$%''&$%(-52)+'')-0-+-2-*/533+$*-.//383-RG@?C(/.-/11)#-,"",$%)($ #&'')()*/-(),0.2.&%()""#% !'(QWO,,:F'()*+)&D>;;;7F3-hCG%@<;<;9: < &#<&(*80:@:740#,58755//0+3:::321YG99A4<8-=6.,.?025564:;@@@>#-2;><;:9::5E3>I+01/0325898765^ZNO.9@@<;??@>=0B3=<;73/+-*((3,000* #!%$(,0/,)*(,&"! !+7&(($)+%"A!$#$":5+$%%!# 1/$"&!#, !!!# $%#!"$#$$#$"#%)36310683+"!"6-*,0-)),-451120/.12.(1:=86655692-#$(431#380+,)(()))+)$%'%$&-0-...(%%$#*44/..#/./1[JC@@GCWOE.2)!%',5  !&&$1.)23331'#" #%%-*!&$! #'&"', !';P_SVSHHDDCDEHTNM'%HC9;740:6:=-&/CBGPJ.#(9A7<=8@6b8D4B!56)JYSMLcM-K2%"#$*0/-.1/-.6Bg"n[?h}\5 >&SD8+)'))1.1.,)&&),*'!$#" e!! #&&%'%$&'%'(%!!'% 4/11,241211//-/432 !!  !"%K&'%&##&&(),1198<15678/,+)((**+*,./01201346<@=<;<@AA@DEEHIQHGGFECDC@?>@@>9;9;=;@@CA?=>?@ACAAA?ACJHGEGEEDGHCBBDHMNTTTPOQQTPMLNPQhŪ-#%'rYOzxzwpg``q==;=93-&>?F&HJRK-5@EPQPIDA<;@Y`D=7@EC=>9BC6KW^OE6,#+"1$58217>=<2]\Z`RLMJJPW155431[WVRR+,,.++,0/0.,-/-($#%+.---,/.-*(&(++/21246:722.$)+#"04!%%)*'"$',-, %.')#!&4%&)58<#"!&'++')7>>0& #$' 1+##o " $($$%"+!!  "#!    + + !!&! +8;6)01$ !")"#$//%  +    "%"/'!!   +   28."!"#   +  #'#!  "!" :-#%)"(# '!#$%%"&&)())#%$&(%$%#( !)  #&&%o#$B@67%('&%&&&%$&%#"    + +       U   + +          "73-)','6)  ~}~}}~~~}~}~}~}~}~}~} |}}}|}}||}~~}~~}}|}~}|}~~~}}}~}~~}~̀~}|}|||}|}|}|}|}|}~}|}|}|}|}|}|}}|}||}|}~}~}~}}~~~~}~}~}~}~}~~}}~}~}~}~}~}~}~}~}~}~}~}~}~}|}~}~}~~}~}~}~ ؄ܦ􀓏뉝\Ƽ㋔ʇ3      + ! #   Jѹƽ¿Ϫſ»гSټí~8.---0//0//.0/0000/02  "!"""##! # "&*+*($!!  //-/.-+-.-,,,++,---,---,,---,,,+,,+,***))**)(**(&(&((''&'((('%'('%%&&''(('%$$%&&%$$%&&%%%$#"$#$$#$#$#"#$$#"#$$$#$$#$##"!!!"! + ""!!"""#"   !+-Jxټ򀍡􅓤ͽ󎣨恐ŽĿ¼Իϭ嶭ӅʺϫùǚͼЊ־ԺħɚøͿ˧ÿȼ˩ĵɆЎδЯ̹ր臆ʸ⁆䀆邒ՉֵѿͿԩ<5JQN^.Q>FE<-@<:;FLLPK;EKGI@:,"4689788646668878::;<=@?ABB@><69=>><)HT564/,(')-0P;@&JJ7$+6LZ.**.-+)*+*#:7"',0--.A)4#+*,.>-6898[q_tw@:754566ja^cnuoc]VRWW,TKHRZC=8ANTXUEK7CNU>Uzu;riCK=0)/ND1lzsolc9F<633-2;<5589669?>==>=>>=>?>>?>?@@?@A@A@A@@AM@ABBBCCCABBBFdq@C=C=(0--,!"'0,6EU/M7HE9c0417=>>=<CKSVTQSTTY^afhikmnnfhfb]XUWTSOMPRPMLOQQPR[dbSSSRUQPONKGEFFEIKNUab^ZXXWWWSMLKOPMNTW]`grrsqkcac`ull7nn78o877npn8pprrppq89rr89q988999r:9r::;:;:;<<<;:::;;;::;;<;<<<=<<==<<=>>???@@>>???AAA@ABABA@ABBCBCEJLLJGCA@A@?@A+?ABCEDDCA@???>>??>>>=?===>>===><===<==<<=<<;<;<;:s::9;9:rr9rqrpoonnnopmnnmnmlkklklkkkjjjiihhhgiihgigihfghgfefgfge +decbcdcaaa` ___``_a`a^_\]^^\]\^[[\Z]\[[Z\\[[Z[YZY[[Z[Z\\[[Z[YZYYXWVVUUTUTTTUUTSUVUUTTTSRQQPQQPQPOPONOONMLMMMKMLLKJJIIEd_iJLIGBwwvvppkm7@G@777786:DHD9g\TYOMMNQS^6;:973echbc68:89:>AHGBBA?<74:B<<=BB@>?@>75348?ABDEBDFHJF3+3/3-$%/69648<;??;DO5"@)2>?;A"?=: &-.+/,//)*)()-+)+.-,-..+++,-(%&)+,+)&)%(+.($&#! #+-121<92131/-)#'# "*." !!"" *(8!3&.0+--'&'+)(,&+/3,(--/13)(.*(&?E<>90$-567;=">.023AB"U_>6@WJ5L9-AO:@G;4OY6T<`J &# ""##%&&#!0/(0110.&!!!""%),1.--('+22,+,1200661("'.00/376_ZUMG?F)-.,/40.0!#'$$$%&,'!$$*&")+./.,,,00&"!"#)' !"))+1L&-9"%',-*'F<;::<5%2)=%#;>:7:*75:448=>@BD,9;?B26==>8_POB?,.4954248;:9787573_QM\:?BB9<9989;>>BEDELLLHIKKJGDFEECAADA=;<<<;<>FB8<=@FDCCDD@@AA@BAABIIFECEEEKJEABDJKMPRTPMPQSUTSUUF=EЀoYME{|zznlkj39?8/()1,-),)-KS+47:EICA=?GOCEG?@8?FIA;jpp>E:CE=?P>:4`X))$#!G2;733359;=92d]SYNLKMQTY27631/\^`YV//1.--1153/..-*&%(/,,+-.++,..)&&'),0.../25652"" #%**(&''%&'%+1", (,''#/%"",4 $#""$*-,"(*791)#'  +  + +     +        +%$#! + %#!7,-..++7)($##$'$#%(')),#$'(!('''D81&%#%! !$')''&&&%&$B98B'('d&!# %9'$#$"          V + +  +     S   +   *1421+--D-  + ~}~}~}}~}}}~}~}~}~}~}~}~}|}|||}||}|}~~|}~}}|||{|}|}~~~}}}~}~ˀ~}|}|}|}|}|}|}|}|}|}|}|}|}|}||}}}|}|{||}~}~~~~}~}~}~}~~~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~ 减ۜ񁏖`Ȭ2    +    ,ʹň儊섑ÿþб߄􁅀ȿ􂇌ӱNDZdzŹч{0../00///0//00.0111    !"""##!  "&*,+($ "!  .//.---,-,-+,,--,-...--,+,+,++*+)*)())*)(()&('('&'(('&&''(&%&'(('(''&##%&%&%$%$##$%$#$$##"###$ ###%$#$$#"! !"#"#"!      &+)AdӢݑɱ䄓ººòͱ믅ڪކĬƖېѶؼÿӴä張ūǙѿ聋ƽ؀̫Ƃþĵ濭Ǽ耀ѣ얋ӄݸݻ玜م팗還溻¹򀀀턇ꀉ+43TNZ3WNHPM?2=78<@DGIFGBJNKF;(%5899::9978879>?>A??@BA@@=;8<=>C.@07774/IGN+2,JPOJK?"*8O.,'))).0/*!5 &#&,+,-,7-?*-*(+'/9::=5ne?387@?k9c9khtB>2'/,=D{rqxj[M=33446;:4577677:>B\ZZ[[\ZZ\[[\\[[[\[[[\\[\[[[ZZ\[Z[[\[[[\[Z\Z[[Z[\[[[ZZ[[\[\[[[Z[Z\[[Z[ZY\[[Z[[[Z[Z[[[Z[[ZZ[\[[[ZZZ[Z[ZZ[Z[Z[Z[[ZYZZ[[Z[[Z[ZZZYZZZ[ZZ[[ZZ[ZYZYZZ[YZZ[ZZZ[Z[ZZZ[Z[Z[[[Z[ZZZYYYZ[YYZXZZZ[[ZZYZ[ZZ[Z[Z[ZZ[Z[Z[[ZYZ[Z[[ZZYYZ[YZ[[Y[Z[[[YZ[[ZZZ[ZZ[[Z[ZYX YYYZYYZYYYZZYZYXYZYYYXYX YXXWXYXYXXYXWXWXXXYYYXWXXXYXXXWXWWXWXXXWXXXWWXWXWWXWXWXXWWWVVVXWWXWXXWXWWVVWWWXWXWVWWWVWVVWWVWWXV XVVVWVWVWVWVWVWWVWWWVVUWVWV WWVWWWUVVUVWVWUVUV!WWVVVWWWVWWUVWUUVWVVVWWVWUWWVVVWWVWVW +UWWWVVWVVVWVVWWVWWWVWVVWVUWWWVXVVWWVWWWVWVXXWXWVWVWVWWXWXXWXYXWXYXYXWWYXYZXYXYXYXYZYYZZYZY[YZ [[ZZ[[ZZ\Z[Z[ +\ZZZ[[[Z[Z[\[1\\[\\[\\[[[\[[[\\[[\[\]\\][\\\[]]]\[\\\]^]^]\]\]]^ __]^`_^_^^_^_'^_`0_`_`_`aa`_`_`0/0a0``000aaa001`00110121 21221222123232343 4333443444345455655456776676787877789897889:9:;:;;;<;<<<;<;<=<=<<==>=>=?>>>?>? @?AAA@@@AAABABCBEDIkCCB:8>><;>>BE?CB.-)**'CBD@C?=$$="%$F%&'('')%&((')*,,-*+,111-/002574794644378534679=<=A<=<>>BCDKKKIJ&*,UR/00/0/.+*P),++,.,++WWUG:854446753479<=:9>CLTUOLKLKPTX]eihl7:rrqk,gfcb[XVSQQOQOPTVUSS]WORQSWTTUTSOLIGHILNQY^ZXYWTQOMLJLPQXX]fnrrsqoorrnn78889878$po88oqprqrqq99sq9889q899stu:;;:::;::;<;<=>@?@@@? @AA@BBABBABBABC FJLMKGDCAAA@A BCDFFEDB@@@?>?>?=?>?>= >=<===<=<<;<;:<<<;::s:9rrrqponmnmnmlmlkkkijijihg ffgefgfedddccb abaaa```a`__`___^^^]^_]]^]\\[\]\\\Z[[[Z[ Z[Z[[ZZZ[ZYYWWVVUTTUTUVTUV WVUVVUTTTQRQPQPONMMMLKLLKF:LQOGUPHEA}}|wwuz<9@MX@7:C@6954/C:;FOSZdT_qVGHUVHPWN]>@C;>GIGORNRZS\]FcUI:J0?BJH?:;;<877;CGA9g\V]SRPPUX`7>>=<9875355652259>CDADA:99>?=::;=??;;<;40148=ABCA=CDHHB51/,03.39;8423<>?:;GM2%%035;8@-(+'5797.1 02665796687-KT3-M,-*3=;60H6*'LDF52<:9:@@BDF-:>CA?4>?5Y[b61B//39700.7999787665aQLX686:?BB<4>\89:;9:3'$$*.067,.-'($!'$'*)&-)*..,.,,+)$//%2' &(&$!"%+!$#!7210'(.* +(&'# !$%%') 26> 7""#$###$$'&#$',11/./.28.$%$%')($! 023/-"%&*,/0++67654565475-*-2673+&$((+,.0+#""%)*'# !%((5&%,-,+)*&%(,*-,-.00)(NO*QRMH[2-3.)!%')**(*/04721!(,855="3.(.) "&"# $#"  """#!'),-(!) + +"$$*)V0X..,*''&%$%(LLYZTKC<86,'(:D+ 0@IJD6V8/115<`44c_j<6'#--MR,*-/**-*""" !#/!%))($"&&$$'&+,(*'-23.2/+(0?  !"  !%"#%#$$&%(*)---+,8646783/.+)))+,**,..00.-138>?:755489:;?CAE%'NMONMMLIFGDCCCAA=;AB?>9<;?EDFGFFDBA@?BCCDGHECBDFGKJIFGIILNPQSOLJLQTY][Xjl4( ݛ{\MHB~wytpqt95:>J4+.35*0-.+=54&133.-"  +  +   # &!      "% !"  !25. ('")1()$"*(''*(**,%')(" **%>?E$ %!$"k&('(''&%%$D;8A%%"&())&#(:&&$$!!!!      +   + +     + +   +  + +  +  +  + #'+-00,;!  ~~}}}~}~}~}}}~~~}~}~}~}~}~}~}|}|}}|||}|}~|}|}~}}}||{{|}|}}|}}}|}~~~}}~}~}~}ɀ~}|}|}|}|}|}|}~}|}|}|}~}~}~ ~~~~~}~}~}~}~}~~}~}~}}}~}~}~}}~~}~}~}~}}}~~}~}~}~}~}~}~}~}~}}~}~~}~}~}}~}~}~ 鋎Ӡ䃙لq˭¤넍ǶŸX #     0   + .Ղ;􊝷Λ٣¹Żſ腒½صj⾨˻?00/.00/01000001  !!""$$" !#(+-+'#!"! -,/.-,---,-,---,,-,,,.-+,,-+*+***))( )('''((''(&'''( ''())'(('(&%$%&&&$$%$#$ +##$$%$$$##$#""!"!#"""##$$#"!"!  !!!   &.O;b܁Úúɾڹ氝˿Ӽ¾¾;Ś೏ξĸ؏ĵ׌ҹœݺݺÑŀƶȰ߉ſ½ù녉㉡裥觖玛؉섘۬s낚雚쒓ѶۂЊ灂냇焘ꐒ̿􁃋䂁պ˷߀"􁂋00\MZeQMFKM=5:9;AA?ABDACI&F=:'-5878<<==@A;??A@;=>>:A@>=;;:<sirt:;;::97556874bhlmc\W[RHB?N^U:3,;DM^FCZX`:?7=67jlmn<@=3P34C8bZ^]hi?_/16:<701645789>QV[Z[\[[[Z[Z[[[Z[ZZ[Z[ Z[ZZZ[[ZZ\[[[Z[[[\[\\\ZZ[Z[[[\[[Z[ZZY[[[\[[ZZ[Z[ZZ\[\[Z[[Z[\[ +\Z[[[\\Z[\[Z\\[ZZ[[YZ[Y[[[Z[[[ZZYZ[[YYZZZ[1ZZ[\Z[[[Y[[YZYZYZ[ZY[[Z[[Z[YYZZ[ZY[[Z[Z[[[Z[[ZZ[[ZYZ +[YYZZZYYZ[ZYZ[Z[Z XZZZ[[\[Z[[\\[ Z[ZZZ[[Y[[[Z[Z[Z [[\Z[[[ZZ[[[ZZ[[ZZ[[Z[[ZZ[ZZYYYZY ZZYZYYZZZYZZZY ZYZYZYYZZYZZZYYYXXY$XXXYYXYXYZXYYWXXYYXXWXXYYYZXXYXYXYXYXYYYZYX WYXXXYYWWXXYXWX WWXWWXYXWXWYWXWXW VWXXWWXXXWYW VWWXWVWWVVXXXWVVWWVWXWWVVWWVXVVWVWVVVUVWWWVVVWWXWWVUVWWUWVWVWWVVWVW'VVWVWVVXVWWVVWWVWWVWVWWUUVWWXVVWWWVXXUVWVWVWWWVUWXWXVVWVWUVVVWWXWWXWWWVWWVWXWXWX$WWXXYYWXXXWYYXXYXWYWWXYYXWXYYXXYXXYYX YZZYYYXXYYXY[ZZYZYY[Z[YYY[[\[\[[YZ[[\[Z[[Z[\[\[Z[\Z[[[\\[[[\\\Z[\][\/[\][[]\]]^^][[Z\]\]^^]^\\\]]^]]^\]\]^^_^__^^_^_^ ___^`__^_`/_^_```/_`a``0a`aa`01a12101101212122123233322323433344434554554545545656766676767778878787888789998989:9:::;:;<<<;<;;;<<<;;;<===<<=>=>=>>>??>?>@?A?@@?@A@@A@A@CBBABVDC]c:FFB5111+1"7/6A%*1IKOO?CBMH0*!"%!BAADC@H%)#$GD%''%%'*)*..+(-**()*+*)+-..,02-.3658;8144625323665426>?=9>@@BDIKM)-,QP-/0/..+PPJ),+,..--,-,YK<853213744557;<9=<==>==>?@@@AA?@?@@@ABAAABBDCBBBAABABBCDDEILNMKGDBAABABBCDEGEECBAA?@@@AA@?@?>>?>???>>=>===<=<=< ==<<;<;:;::;)=<;::9:tssrrrqooonoopnnnllmnnmlmlljkikjjhjhhjhghhgiiihffgfeeededcbbcbba` __baa`]__^^_^ ]]\\]\[\][Z[[[\\[[ZZ[ZZ[[Z[[Z[Z[[[YXWVVVUTUWVVWVUTRSSQRQPONNMMNMLLLKKLHu>/Ua```>EF}ur?wo>D?=NQO704233;@DEiTFGOYVLLD>>??877==;?>>>=BEJHB:677@95@==85/29=><6<:4=??A/-./.0002)330/0!386;44<<"! "#!(.,+-*,.*+,,-.,**.,+.12-+,--'&()*+++(*(&'$#$%*()'%%%#$&*,/0-540342-,)*,))*4+&%+%$"$"/*"!)!,-,++((-/-/)+141+++-,/.(.0+$;$=895*+768679:%%9/(4'+&qdU4GKCFVT*H0/6>O50:O-1^,$%&'$!$#4+-&(('+)')&%HCD!(-,-**/2/22*.//-#+20.-0.-30/2677678cUL-56/6898556454* ##"$%)&'"(')(+/.).++  !%-)O221F&9C$'*(&#C<>>@A=#2-F'":799!!%((+$$"!(;A108;:'1677547742Q?U=;-F30..:86^=4#(NOF-69:;:=@B@A0:@C>K946WZ_793R018<770,5998887766bPLX5;6))112GX57;:<91$##(/4463+,+#%*&#-,(*.-,.-,--.-/'%.$+0$4&.###$(3"" -"1"!*')*($! "! "#'-0.2887 ###"#!!$%$')-21/../.-3'&)&*+)(&%%$$#1.--))."((++0876466772531/2531,&'0/*'(-.)%$$%'(((&&+!"#+/*'),''*+,--+,/))*&'(*+OY843/+7)'(((''$%'*-/01 %%76AE40*,* !  ""#" )!)3-:90(" +&&(+ + +  %$&(,UZY,--+*)(&$$&&$KUZXKD;:2'&!0A9!'4?P?:PHR3:3912_dde7;4(?*'24[QSV``;R&'+.4.)),--146K3WVm {]! =" fOH;3%"$),//"91XVX-,0,*((1"&! %c  "%).("$%%&&&(++2+03131.-1.   # $$$"###%('''+,-34:9294..+**)++)+-,,./,./19@>9632013459=AA$&&&('MPQSLKGFGFCB@?ACCA>J>:<95??E/(,,+(/7@8BOLH>=BA?D[QD?<<@ZRDAHUQHF?;9:@RkO=4QGBM],2A=96668896427<<81.[][STPQV\e4977731YZZ/0.Z[[/,-//.0.'&--++*)),)(*''')*,.,**)-064/*))+1-(3.+)("#$%#'"#(+-&-!-.$5335&&(*&><+..9FC71,%$#.=##5+ # )$ -&&&"'&"'&%)!  "   + G96%('!"*'&#&,  + + ''$ !#$%%&&?52#!!""    +  1 ! (  +  +   !% #" 1(1(&#&%"9!31($'+)(*+,++&*,() #&<CF=>:;?D?<;<8(.2699:<D@=?@=@@;=>?=@@=89:8::AG,I66630^]GPZ\\LRYUI<% 9?,5))()'(/+A$"%'#%+89'**(&',3;==:=?bnt;:;89997568876kilob`_YKDDGSX5)",DD\MF5JWg:;:;6fbjesB?<:795PI_VIVwKeY/5=>===>>=>???>?@@?@ABABABABBBCDCCCBCCk/9@K516,41/'!/2@I,(EP(;0GCcgm<=;8@=<==?CE1'#""?=?@@BAG",&;;D&%&&&(()+*.0/+,,./-,.2/,..--,,//0332289:5454268864259::777:<;>?EFHIP(*RS-/-,,.++*)-./,+++,,-./K;7421368447669<:<>CMXSNIECCA>@CHPSVW`557<<<==>xqiifc`_ZVZYZ[XePIKJOUTVWZZYYYVSQRQRTXUSRSTVZ\ZZYTOLLMMOQRRYdknt}lrq88677678qrrq9qp9pqqr88qq9r9:9suu:;:::;:;::;<;<<<=< +;;<;;;<=>>=<===>?@A@ACCBDCDCBBBCBBBCCDDFHMOOLHDBABABBCDFGFECB@@@??@@?@@?@? >>>===?>>=<=<===<:;:;<:9srsrppqoomnoopooonnomlklmkjkjljjkjhhiighihjh#ggfhfeefeccbbccaabbbcbb``a`aa`a`a``^ _^^]^]\]][[[\[\[Z[[ZZ[YZZ[ZZ[[[ZZYXWWVUUUVVVW +UUVTSRRRQQRQRQRPPQQPONNNMNNMMLLLFj:5NMsl]END??GQOzsBD?PO?>HRbWZQDPciZaXJEABK^OFAORLOTPvia7RZL74bR\8:77?;445>DHD>7da[XZWVWZb589::74ch`ai435767::799;:9:9;;<<967;?ADDGIKILGC911632737654/478:86300..28AC@E6*I=OGG@DH#.64762,**SOE@EEFHNIC9 $"!)/../+-*&')**+,)+-*+-/0.,,/-('(+,-,+*+(''""!"())&%(%$$')*,,+0.245/-.)**(),5-))+*)((%###"32,'$'4")(*,,+,.(/*,/2.+--0/0/)0,*?,$;683.49572239%":.%'@-.aq\6%JCH@=0TCKh_S0 CQ8H&)# !$%61:$&'%#)()*-..)0..43/,&"%')*-,.661/46688414W.2::48777677:84- !  !%'"!'*)050$&(P2701C1;"%)('HB;<==>?>.4$%";9 9@!$)#9,%""5@:%*/8:&%412/-[XSG;<3<<,O80.,4;7[?1"/N[KQ78985:7:597>AC?`/GWX_RVaY`3179842P6776558856bRPT2;=72\SQZ957787/ !%+0789;96131%""" &--,/0../.*(*---$!0&!(#":" !+9"#! %,/,)$"*((*+,'$"%"!  !"$(/11.)+.442!'# " !$&*))/3300154,)%(+-,+(''((&'%$! 810-0'&+,6:866568754./1472/($-342'&&%##$$')&(-*"!#++$%*(),+-+-.+++(''(+.2752*#()))' +&&)*'*-25%87@;5*(' $'!!"96'0796,/<;1"  + + +$%%%).VZ-,,*)&$%%#%NSXVIDA<.'$(4>'79QF=/>=?EEFHJIJKKJIGECCEJHEA?AEJLJNPRQNNNLNPOHEJPU\gYFI݀¿烌lUvAF<:3+.147HK<:CITNOI&%$ .'+5/$!$!  +  ] + !" """#"  7 #"""!!#" + + +  +  + 1!% $! + +  +  % ""682) !(%*"!%!54=24&'('%''*#&#)-0+?-=AE;=E?C#"&'&c#!5#%%%$%&&%%F=9<"((#8537&#$$""$%&!    + +     +    + + + +  +  +   + + :    +~}~}~}~}~}~}~}|}|}|}|}| }|}~}}||{{{|}|}}}|||}~~}}~}~}~Ā~}|}|}|}|}|}|}|}|}|}~}~}|}|}|}~}~}~}~~~~}~}~}~}~}~}}~~~}}~}~}~}~}~}~}~}~}~}~}~}~}}~}~}~}~}~ ٭ӷѶ鈉|п놘탅³' +   +!    +  \ŮƳ룁꼗ꁂļ¾ǿʸ׷V𾧤ñŝ>.000101210//0//211  ? ""!  !!"#$#""!  !%*-.,'$!"#"  l--/,-../.-/---..--..///--,,,-+,+++-,,***)))())**)))''(*))(')'())'&&'&&')())()()('&%&'&&''&'%$%$&%%$%%%"$%%%&'%$*#$$$"$%%%$$#""#""!!"$#$$%$$$###""!! !!!"! ! !$+Q~Ϯûઈʽɿ򁁃Ŀ;Į͘ꄩѷ׹ǹʀ쀃ճʨ½ͻ܉ɽüȺ͸ׄһȾ픕躡ʁ󅻱߮иُ򆚪ފ㋒濴ȹ眅Xꅅ<)).YP]]RQID;379BBDBDA<@?:<<89;?M,L7762/`d\QZ[bP:XXD#!&/+,BFL()))-+'$%  #=#6$((''(,3@><;?>?>?@?@@?@AA@ABABBBCCCBCCDBCC>Cv?N6.;,56.*&<6CK)C32-K:LE:6l8;;59E$#&$('0JHFBCE>9;::9<9899:<;97212133437975578:<::9@=8969A?A=;BCKO'RQR,,,-,+.+*,0//)+,++*--.J?8630346566757:9;=DPZTOJFCEC@?;=BFTHKSY\f69:=@>>yuqmhieb`_^][hRLLMMPOQTWZ\]ZYX[[YVU[TSPOQTYYZ[[YUQOONPPQOOZbfqRv999878878o8qrqrqqpqrq99s9sr9:99:9:;:;::;< ===>>==<<<==<=>=>=> ??AABBAABABCCBDDCCCACCCBBCDDEGINOOKGDBCDFGHGECBAAA@A@?@@???>?>>>==>><==>=<=< ;;:;<<;=<;;: s:9tt9qpqqppnp qoonnnmkllml9jkkkjkjhiijiiihigihhfggfgeeeccebddc`bbccbcca`aaa```aa```_^_^]_^__^]\]\][\[[Z[Z[Z[Z[5ZYXXVWVWWUUVWWWXWXXVVUTSSRSSQPQQRSRRSSSQQRQPQPQQPPPOONMMLLLJofd`S\ZdKptnBNQSSQRGkosvwAJNPJEFF@?:747@CHB:64`VRVORZej569:722b\[`3234446:<@=>;9A?<;:;989<;:===<99:AILORPLMLKEI2KU0332148932520337<<2-,259@EA,H=<9=>9>C#,4=>7*'(MK'(ID:49KSLS.VN*I63+7&-5575378304./179"/!7&!/+'2,*00<;=75233,)04.'42001&A35/2# =7 !$#"(.,+)*.-')'&&(+(+.)-//0-+-..+(*...+)+,)'&""!#&&((')&##&*+,,'((./--./*.,-,-5.,,,+*)+('&%$$!553))-!"!(,/112,0+-21+,82,040/40,L3#:68346;76468>%":2''CA)Jj3Dd<*O=L99cpKJU)B&CR8*$"!..355!&% 729!##""%"!!!#&$!&++-,++/./1..-)% !#%**+2421356994/0,-/7>9752256:86564+$(%'&# "',)$$!! !#!E*K0321F,;E&&&HE><>?B@<.4*A!!89=""&*!+$2=:2+.25>).MLHFGEAA:=287+294../96\@1"<@PCB6>::<4S2>DC@CE?_270,.SMU]ga_38ibYR5:87469:66dSPiSa=A=89D+136331+!7 -356689887. %0'*,+.10///-+-+--%&4/&'%$&!/&3""7!$$'-1++#,''('(*+'%" !!$)*(&&'*/0 %" !%+*(,241/1464,$$(./)*&'())(*)(%##!"!10 "+18:976679543..2570-'*2277(" "##')*%"2/)"#',)$'))+--,)*+.,*)'&)+(&(75/44,)+ ((&('&$&&',-'&,. ;6A=2-'#D  $( !=@9179?.7;/ !t  + &'$$'..X^],XV++,*&&('$"'XQMJE83-,'%((%'.GF9=B9Ha47940V[[c;=k7850(%9D=EUE2JIQ/98,*..0338Aƕl[==uFI*!( *'18 3'!+"0620`23/*+0'$$!"#~ !!$&%#$'%#%#$&.!,160210,,.)-1 ! !!$ !" ! ##%'%&%#)*-.223X2//-+*),-.011/22-./39?;85312201023556:>>C$%%)*))WVURPPLJKIGFFTEACDACBDFIIMOMLXHDEJEB?>ADGHHMTWUTQPNOPNIBEKR^^F|耀ԀxlikLvzq?FEGGFG?agjmm8>9888.1:BG<88@S?==>U]L?BBLLMP]T;;\I{wobZOR52>N1-+2646=@?;9;<::6523::<9410\USWQSU\d22310,-UROS,)),+*),,,()*(.-*)))'&(**+-..-+++/15798676714%;F(*)'%'*)# #%)"!$(-,).*%#',''*"('$ =855)%)5<9?#A83#  ! $#!"(#"]  !  {  + + + "".#$+QH%$8*") 5A'$*"( +     (   # +  +  + #- #" (#!   +    + "!%++(&)&%!#"% %!5"$(4,*%+)(*&>%,2/-/2-A"  :6=?@A?@??=>AA@>>>;;=,O&4262]^WXR`bb`IIR: 0"0??BE%%'&'&$>6?9%2$&*)))/7>=:;=Ag=mlppmlorn576778:8t`WVYPKHKD/;4(54;CH?F4<7M4:988dcclvs<;<34:JU]A:\`Zh:A9545379:??>>???>??>?@@A@@ABABCBCDCE>lpB=6:15/-.'B8=KPF,[32B+D>7ij:=98@JF$%('*BKECDHE;;:79;<<:;:965647752213889778;;<7887:86565@?4.($%&D>?@?@AFA:BNNMH%'$%K&&%##"',..,.--,,1/03421510.024652478;<:==;<;77768=??>@@BEEK((*RQX,*++,-)(',+-*./+,+++SI>943466555866779==<==<==<=>>?>?> +?>>=>>?@@ABAGBBBCDCDEDDCBBCCCBDDEEGKOPOKHDCBCCBBCCBBDFGHIGFCBBAAA@AA@@AA@@@A@A?@???>?> +=>>=<===<<;<>==<; :;;w::tsqq8pqpppnnnm"lkllmlljjjiijhjiiihhjihhfggffedddedcba`_^_^]__^^_^]]\\]]\]\]]][[[Z[Z +[ZZ[Z\[[YYX.WWXWXXYYXXYXWTUSTSRRRSRSRSTTSRSSRRRSRPQPQPPOOONMGhla_xmaalUxqFNSURNE>MLjlux>MLLTMLRW_cYB6DGJ@EEMblgX]W`_P^vFfOIHlm~Hwq5CA=/2AI@435?@@?<;==FKKIMJHGGE68423Z3/0138:1,-258BGD;4-/6877F?+EI@CF>;=@%+6BB2)OQF:;BIC;7;>BCGKFALB9;-8$+26765;95.4.0-.9!!%.>#6::3/23V'?:63*H@:,)',-(A:75343/-.77.)7=:5*584*-%#!: %%#+/++)(-,'('&')(&)-),.//,++..*(+.010,**)(($! &&(&%(#"#'(,--(()/-+++,(,+--.2/--,*&)*(()))(#:70$'5 %%)%"&.,*(*.+/21-1/.4.1.2511O-#748956>;969:"*#:996?4%V?R,8/'(=<77ZV8BEECDE?U3K==>8`YZb`[h9^NPb8:87369994iWNS_9?=76T=;4;#&# &>)133574154#-%*'+++/21/-//.+,,,"8"% !#&&%;&$+/ +1$"& 4*-*''(())),,,+**'$#!!!#'%$%')+.2$$$"# '-*-101/.0232&%&*-.,+(%'),,*)'(%$$$#,3-479868678552.0363-+).125/($$"  '%,1,(%$'*'&'*,-.+''+,+,*&&),+-46034,)%&'%&$"')*,*%&+-6 ><88-)(! +"! ;>8;6AED=)(5'    &&$%&,.UWYXWYYZX*)(&''&$XMFFG;300+ #%.9B4?+-)A/6541Y[]cpo:778:5'&->JV<7PTR^392-,-.246:VS$ +@? $(=ыC0&(0)/;A9!? '240]_32,+/3/&'"!!$! !"%%&!!""$#$##!)&545310/30.265306! $$"%$#%'"!!"#%&%%'&&)*,21473/0---/../254230//029AChgnq9DBAMFBJPXWTB4;99::<55647==855175hdWSSUV--0.*))NKIS-+),,)*+*+''(&*,*))&'')*,-.//,,.-2521544342'('),N+(&%%))!!"#,1/(" &'&%.+.1+-.,)+,#*'7:3)',23,((+-.04/,2+"%3)%")" !"!     ".!3P'6 " ,8897.7%D"    +   + +    .  +  +  + +  + + + &%+ #" -!!"#  + + +   !#"$# # 6--08)"+*&(C9'020022.=.**+%===??=>ABC>>A@:B0O%5+05^XD8K`ebb`UH+4#4<>B@FA>=AB>;633356(!4"%'''+1:><<;;>Y<8ihlpmtron8:857::XDBAFHIF>30 4)=E>ETK933;AZB=aaWT=?>:6207;;:A6\[[\[^]\[[]]\[\\\[\[\]\&][\\][\[\\]\]\[\\\^]][[[\\]\[[\\^\\]^]\[]\\[[\[[\[[\[[Z[[\[[[\\[ +\[\\][]\\\[\[ ]\\[[\[\[\]\\[Z[\[\[ +\ZZ][[\[\\[\[\[[ZZ]\[[\\\[Z[\\[[Z\\[[[]][Z[Z\\[\[Z[[[\[\\\[[\\Z[\[\[ \\\[Z\\[Z[\\[\\[\[[[\]\Z\Z[\[\[[\\[\[[[\[\\[\[[[\\[[Z[[[ZY[Z[ZZ[Z[ \[[Z[[Z[[Z[Z[[Z[Z[[[Z[ZYZYYZZZYYZYYXZYYZYZYZZYZZYZYYXZYZYZZYZYYXXYZXYZYYXYYZYWYYXYXXYXYZXYZYXXXWXXYWWWYYXXWXYYYXWWXYYWWXXYYYXWWXWWXYWXWXXWXYXXXWXWXXWWWXWWVWWXXWWWVVWXWXWXWWWVXXWXWWVWWX +WWXXWWXXXVXWVXWXYXVWXWXXYWXWXWXYXXYXYYXXYXWX,YYYXXXWYYWXYWXXYYXYXXYXXYZYWXYXYYYXXYZYXYYYZY3ZZZ[ZYYZZZ[YYZZZ\ZZZ[ZZZ[ZYZ[ZZ[\[[Z[[[\\Z\[[Z[[[ZZ[ \[[[ZZ[\[]\ZZ[ \\\[^\]\\[\\]\\]\]^\[\]\]]^]]]\]\\\^^^]]^]^]^^]]]_^]^]]]^_]]___]__^^^`_`__00_``0_aa``000a00`000`0`011000101211212221232 322232233323423222334343334344345455456565676767878977888789988999:9:;;;:::9:::;;;::;<=<;<<<=<=> +?>>>?>???>?@AA@ABAAABABCBDBCBCCBDCCDCF8dnCD91*0)%%$ 9D**N+J,2L0ID95n6995>BDEJ((*4KD?ADF=<=>>==964566765653321479::5768:9743896679A@3*!$$!B?A;?BAjFA?ADGGFGGHILJL$#"$#%).0.--*/31242.3411453121147?;;:=?>;7488;><=AACEHFGI))+PPTM+,+.,)NN,*Q')(,-.--VJ@842246j57;;zx}wtrm8wXRONPSOPQSUVXYZ\_accef^YVRPSTSTUX\ZYXXWSSOOKLTX]`|u;;;::q88pq8nonn8qqrqrqrqrsqrqrrssrtt:t::;;;:;<<<===>+==<<==<<==>?>@>=??>@?>>>?@@ACCBCCAB@ABCBCCCEDCE HKPQPLHEDCDBCCEEGGHIGECBBBABBAA@@AABA@@A?@@???>?>?>==>>==<;<<<=<>>=<;:;)uu::srsqrqppprqpprpqponnmlmmnmllkkkjkjiijihjjihhffgffefgedccddeeccbbbc bcbb```aa`^^^`_^\]\]C\\\Z[[ZYYYZ[[Z[[[ZZZYXYXXYXYXYZYZYXWVVVTTSSSTSRRSSSTTUSSRRSSRRQRQPPONNNMMMNF[TRQW\oi[PyyOTROCn^`j{|qzADKMJRRPSKVNDqwFHPPNQW^[ffmrWP<987:<===?B=?<=EID>>@DH<26696][12/+.65'-45:EHD995127<>9=0&#'EG%A<8B*05;;,OM,NI)/,F<5<>:?ZFC@C>;6/(-358;>B;4+.4645B'#(.!#B;2.21/>B>62,!7AD9>366&=:86660320890+;G9,?6/4.!)'$??8#%%-0,0-+/)')&%&''$(,&)*,-,**,/*+*.1///0/(*+'$##''($#%$ !(),/,'(+/-)(++).)*-+/--,-.+/-'&'&%&!:3*.;""#&,)#!%(*&"$&&(151*7502.-+6741H+$98680.78926:%*"! #%&0X>8,#%=.Se[TQB6fc=K.0%$"7'#,#&9>! <72.3$$5()&C@97:#&)($E$)15-/-+)"$(*,($<18?E"$&&#%)'#!$)-,./' #)-.0561/*').#8$-)/0/,' '$&$@(2630S5E&$FDA?;>@CI(.4.>"!  %(2/"(%',61-0,334/(**)+'$%#!&;60862-,153[>.&GYOYRN884Z]46@>7ZT\_Ua8N>J78:56469;856ZQR^8;;6446:2N64"..(B10241//,&09%+,%(++/22,+11.**012:&4?E(%$&''"&%37%"+0-!$##.-)(&((('*(+,*++('$ !#$&!$&&',4!&&!$ &')2/-,/0122/'$$),0.+'#(,10-,'))&'%$ 1/5-4:877:98545/2455.+,-011.+)''$$" 2"+,*)*(''(&(*-..+$%)+*,(,*),183-58-,&/$#& '(((+**('''+ =<;7/'&$#"@;+#0DHHJD;0  + +  "&%%%$)+)PLSYY^]ZU++(&'((H7649;71+! + )55?ME15,&A/7Z21/YZ7vqo9e591+(45Q96RWQL5872-,,0466Nw4!pmD5(!,5!">4-670.c12.+01211*#!"#  !"# !!## !!!"#$,)2550231520346856679777 "%$$#%%$%# #"%'$$'&)*))+*235.21R17200.--/00012c3430/22?C>95323112357632214887;AFFHK'*,,WV[[XUQ+]HHEDEDBEIJ2LNRTSSRQIBA??ACBFKRWWXZYYVTNLEEKNSZe6˄ɀ¿ؙ}ntgZNHMHG=h[clwzry>>FIAKILRKQNBkm<>LJEJOPMYX\cOM7Ae7V8@@FI=t\NR85#%2;=1-.-.356>><;;==<63676;A>5:30&'$@B$'+04553U-!-))(&=:i?@;A(8-4''(#$"%'(($'E<=C&('#! "#$ %     +  % +  + +    + +   + +  +~}~}~}~}~}|}|}}|}}}||}|||}|}|}~ ||} ||}}|}}~~}}|{|}|}~}~}}~~}~}|}~}~}~~~}|}|}|}~}|}|}|}|}||}|}||}||}}}|}~}|}|}|}|}~}~}~}}}~~}~}~~~}~~~}~}~}~}~}~}~}}}~~}~}~}~~~}}~}~}~}}}~}~}~}~}~}}~}}}~}~}~}~}}~~}~}~}~}}~}~} Ӻ–ιοؽbĺƼģĴؕs"     + +   ' #  -򖰵퀐񂓚¼ǽ»ǾֹDʱ:6#000//0//0021011100012212210123/ !  !""!  "##$%$"!!   !$'+..-)#  !"$$$"  +/.----..-..//..---.-,,+,+E***))(()()**))**))((''('(('&(()*)))*)((&''&(((''(('&&'&'&''%&%$#$$#$%&%$#$%%%$##%%&%%$#$$#" ! "#"#"""!!! !! ! !  #N=Z苋ҿ태ЅȻ偎ƾկ脃ቴĮ񀃀ʺވϳ耓۞к̲ĄـʿƼžóʼϽ¾ہʽ¹ſnj݌°銏€ճԶ삉߃瀇ư熎չѷ䊉钔˿ʻև9ᴭ1&*Y]ZaSDIJ:/6947;5::77:7-+-047898:6567;;<=>=<<<97:;:;=<;>AA>'20(4KGbgcUBLZadd`WL.&<.5:BFJD;4496;A?<203&+5@#$')-3>@=;:;<=;8`cnnrrtq8776:COQ=O;?*Sb8h381a$6=>=voorB?>9;UR>6.^NBD?;;866:9<@RS[[\ ]\\]\\][[]]\]]\\\.\][[\]\]]\]\\]\]][\\][\]]\]\[]\]\[\[[\\[\\]^]\][ +\[\]\\[[[]\][\\[\ ][[[\[[[\\[[]\\\]\[\]\\\[[\[\[[[\[\\\[[[\\[\[[Z[\[[\[\\\]\\\[\[\\[\[[[\[[[\]\\\[\[\[\[]\]\[Z[[][[\[\[\[[\\[\[\]]\\[\\\[[\[[\]\[[[]\\\[\\\[[\[[[\)[\\[[[Z[\\[[[\[\[\[\Z\[[ZZZ\\Z[\[Z[[\\\[[Z [\[ZZZ[[ZZ[[ZY[[ZZ[ZZZYZZZ[ZYYZZZYYZZYYYZYYZZ[[ZYZYZYZYZYYYZZZYYXYYXYXYYYXYXXYXYXYYXXXYXYYYXXYXXYXYYXZZYXYXXYXXYYYXYXXXYYX +YYYXXWXXXWXYXYXWXWXYWWXW=>==>??>>>?>?@@??@AAA@AAABAAABABABCBCGDF`tlEA60-,'$$#"?'4.+'78ml7538>DFH&()-AE==DHA;?:86746997662443245`655687;866225775768<4('$"$$DC?>A>:=>>@CBCDJIJK%%$%)+#!$'+,+,-03112/00..2236454158<7557==@J?;@E]]UMHFFFDEIECDC@@CAABHNV\`glr;>?ACBA?@c^WSTTPQSSTUUUV[_cfdfiea^YVUSSPQSWWX[ZZWVTTPOSV[Lvs:;;;:::9rqqppnnn8qppoqsrrrssrssrrr8rrrss99::9:;<<;<=<=>?>>==<=<=>=>?>?>>?>?@AACCCB CBBCCCDDEFFEEEDCDCDDEDEGIMPPPLHEC!DDDCCDFGHIIHFEBCBBCBCBABCCAAABBAA@?@??@?>?=>= <<==>=?==<;:;::;::;;s:9rrq99qpqrqnonoonmmnmmmklkkjjijihijhihihgfededcdcdcdddcbbaaba`ba`_`a_`_^^]]^]]^\^^]\\]\[\[ZZY ZZZ[\ZZ[ZYXYYZ YXVTUTUTTUTTUTVTTSTSRRRQQPONNNLMC?M?LTKNI|uvzGAUW>kaguCMKGFIMNMTNROHt\j[WN[_V[l[VqeZ[cDm@HT^]QRKC@r\;964=DHJCEE@?:@EJLHA@B=:8jl9;>KD==:3__14LV/168310+)OSX/1/Y--045499;;=<;:964669<==;88320.3@><>CI<)O/03^OMNQ\+,*+*7?=?CCEA71148=956+%&**)(H<:%1157/ A="%$',-,'>;D?ALB@:B;974 (,24:<&&91*,2759"(%+'##5213/142(%+.!*&%#"#'-)6259462328>3,.8D2#;98 (&'$B<6A> #.2.1/-0,)*)()**%++'+*,,,**+-(),./00-++,,)$%#%+)(%$&#!"&(./.(',00,'*,*+)),+-+*+*.+--*+*,(% ?=::$%'*-+*,*%&(+("#$,-.*2128133736@), 244A(#-89587%$ %+(.%9hoMJ5>l4/X^HOSMO_FaUm.0O:$#!-'0-(/=!! :3-54(*,*)ONJ''(((H&%"(,,.-&>A&(+#;530/3?=>=D&%$')(+*-,-,(#"',015576/,*47-  $$)++/*)'$ !!#'*(#%-*)%&*JBDV--.XAEHEFCB@=AJ'(377#$#" "!),#!"-83;.'#+210%#&()'%$&')'-744/WY.232T<.)AJR\TH.7;^2839>DFBx[7?T8=?=2ZUV^S\iO;Z85875668::93YRP^8;921/:73.+B1641O45650+%2'+,.1/''()242.*/0*+.2$$;5**)%##%%$!("'.,"" ',01231#" *+++*''')(*++,,+,**($$!!"!!"+#$!$"#$*.//,/11|13-)%%%(+)+((*./-..,*&'((&#/*59679;9632238765/++.--*''))&%&%""! '((&((()''---,* &'*+'(**-2:2,86,,+<,!"#%%$&&'&'&'%)- 8?AA3')*&%;DD9+3AGLMIB8 +  &(&$##')('EISWZ[\W+((&()I542:B@8/ $.39FJ3=%+ H\4a/1,X2;<6;qjhk>86/0KG5,'TB9<7542/.449G9s^Z##  e2dI8)3&#!-4-!0+._`/.+--0/0'$#%!!""!   #%)) 364352-034475659987 #"! !#&%""#"%$$'&'&'*+')/12,,.421/+-,..0317669A2/23BB?;87653{47323533753367;>@EGK(,-.000.0aPPJHGGCGJJKJIIJORVWUUUOMHCAA@ABHPUUWZYZWVURLJLKLD +΄ʄʄˀaa_SRKxyzE;II8hbhr{AHEB?AGDFGEKHEp]cXREPRMNZNI`XNLU?e;@HSUIJG=:nW6/-)3::8;876gi989C@774.VV,0HP*)++&#%$"BCJ')'E#!"###%)**,--+(&##$&(**('(%#! $*))+/7/"?&&+SCCFGJ#&'+../-&"!#'+*$#1+,%"%$*(+),)*4*)%'$"" !# #!# U)&!" # "( <@43%"@66(.2,.8'8.<( +    +43,) !     + +$'48! !"!!"& +   +!#!" 9; 4#(27=8+$'A#($',254aE$&5%)*)!;9:A8=I8+?'%'%#$%')(&$B=HJA59:9:749;860!135;906=@?;=954@>==>@=@@887599989869=>A*131.7?NXZIENTW`d_UNA268%27B@8965:A;::<\;::2b6mqqsr:<;^19@W^:56811<>@@@:=>A>?D[Z[[\].\\^\\\]\\[..\ ..\\[\]\\\]]\ [\]\]\[]\]]]\]]]\\\]][\\[\\[\[]\]\[[\\\[\[]\\[\[\]\\\]]]\\]]][\]\[\]\\\[]\[\\\]]]\[\]]^^][[[\\]\\[[\][[[\[][[\\]][Z\[\\[\4[]]\[\-[\[]]][\[[[\[Z\\[[[\\][\]]\]][]\[\\\[[\[\\[\]\[[\\\[\[\]]]\\Z[[[\\\]\[\\[]\[\\[\[[]\[\[\]\[[\\[\[\[&\\[\\[[\\\[\\[\\[[\[Z[Z[\[[ZZZ[[Z\[ZZ[Z[ZZ[[Z[[ZZZ[Z[[[Z[ZZZYYZ[Z[ZYZ YY[ZZYZYZ[Z[ZYXYYZYYZZZY[YXYZYXYYYZYXWYZZXYYXXYZXYXYYYZXYZXXYXYXYYYZY(XYZYYZYYXYXYZZXXXZZYYXYYXXVWXXYYYXXZYWXYXYYWYZXWX YWWXWXWWWXWXWWVWYWWWXXWWWXWWXYX WXXXWXXWWXZXWXYYYXXYXXYXXYWXXXWYXYYYXWXXWYXY XXXWXXXYYYXYYXY ZYYZZYYXZYXY XYZZ[ZYXZZYYZ[Z\[[[Y[[[ZZ[Z[\[Z\[Z[Z[[ZZ[[[\[[\[\]]\\[[]\[[]\]\\\]]\\]^\\] ^\\\]]\\^]^^^]]]\]^_^^^]]^_^^^`_`_^_^ _^^_`_^^^_/00`_ +//`0^``a_/0 11`1001101b102110122111211121212232321222333223343234434342344434454555444544455545654566556556565666777656767678889789899989889988:99:9::;:;:;;;::;<<;<; =<==<<<=>===>=?=>=>>>?>?@?@?@A@ABBABCBBBDDCBBCCEDCDmmB=860)%D%&%C&71+%7Q+'B/A;7mh6;839BDBG%(*1PB>AC?74345349::75522562354221033765125336:65766:8)+$!'$GCB@>=F<;=>ADBCCC#$$&&,.*)''%&*+***0.-4/--+.//0434656:89656>?<;<988:;;@?@CDDE&('UMP,++--+**(&(((---''**SN@75432247859><<<:6>FZ]TKHEFDEGEEFHHEyGHGEFB@?@@EJMWZ_hqwABCDEHCqlba^ZSSQUSVTUUX[^cfhigfea][ZWRPPSTUY[[YZZXURTXKftfrstv<;;w::rqpoomoopoqp8qrrqqrrqrsrssr9rrst99:;<<;;<;<=<<=> +?@@@?>>==<=>?>>??@@???@@AACDCBCB DCCDDEFGHGEDEEFGIMQRQMHEDEDDEEDFIJJHHFDCDCBBCCBACBA@AA?@E?@?@@??@?@@?>>>==><<=?>??=<<;;<;;;:;;<;:tss99rrsusrrqprqpoponnnlmmlklkiijjkijjhiihhhfgefefeeddeedcefdcdecdbbaaba`_`_^`^_^_]]]___^__]]]\[\[ZZXZ [ZZ[YZZZYYYZ\YZZYYWVUUUVTVUTUTUVWUUUTTRRSTSQQQPQOOPOOPOOQEQTWMERDJF@HIIDLIH@I:nxINLGKFIIKMMINLGGEnr?GGKXoXK[]T\Y^s]X@ABE`qYCBGE84:;398=@CF@@;=:mjmm8:;ofgYXQTPWGJK,159?BC62/+**)**,,05668::;:971-15439;872//++-.*.58:BA/HT/0RKVFCE(%*477;94()(*'(LB4>&/266,8 !'&*.1k2,D?NE=E8=8B#!:<1-076= <49'A+-`Kq]7 NLE<9JYcMH4;QWK=%BA #$#$434+2#"! ;-0744G)---+*('(+)*(*LD=:8&*&>>H&%C921.&";LMPPKT/1323-.,-&(&&+0568899775(-.+"3%+)'142*(+)##$7)432*MMUP-/Z9GCFFEDCDK'&024.> "&"5-/.;1-,3540#&('&$#"',%!(8/../02]`XC+):DOTKQY25TT7887@BkOCA37.18;:YVYZR][J=J568745678:<5^RP]7<<42(0'"! -278237:5/0*#>5A,725402+)&%/431),/)-0/0--# ),+)'&%"#$#!)&3$"$"$%',1($"+/.)*++*+*)+,*)(%"$"!"!#.!"##)-,,/11120*(&$%$$%()++,,*..+'%)**'$!4'46569;5534568863/,-(%)'(%%&''(&%$" $$&$$'))*()/..*&#%&+(''&(243*2;,)+&4 !$&%%$%&&##$%$& 4>@$7&+)! +9A6.4.!    '(&#"#%%%&!@(SWYYX+*)(*(>.4,3=>77.!).2:FE6J$/4W_<434+-6;>:phnsLAC5AU4.$)O6@:6669257;D;GP_U#~(h*7J9.&! 76(" (3'1--^Z-3-)*.-,-." "$!    "  "#&*'#66853171347774332C! !!&$"!%&%%%"!"%'&(&&'()(30243.+,+++..11/577523,01AB?:99:877687773546676312/344;=@ELQ..12273\[UROKFHEGHKJJIMNRVYWXRPNKFEB?CFNQSTVXXX[YWTMMH]X{9ۄڀ¾n`\LOG@FEBAI@;9G2erzAFC>B>A@CH`FBFE?DCkl:?=DO^L?MPFOLQaxPO<;<@VhQ=4<8`13,49>;1-03/5379;>685:6gfjj764f__QMDFBH;=C)**-102(%&"!! !%$"&)*(" !##"&'%&#!!#'*12$5C%&G?D77: !$#&)*-,-,1, #&*'$ 6-"+"#%% 0/6/(.$+%(&&3% %$%+&'(!($2)'!!#(<=%-,& +5=,+ 20,$   "+# ,-/-,3!!##!!   +,-3,7#$$$%"#&$ +   + + + ! #"?>:)#,5;369!&=<''(&-1S?.& $ %&&98>2+5&%(&#$$&'()%C<;A%((!!$!"#"     + +  % + + + D      + *   +}~~}}}~}~}|}~}~}~}|}|}|}||}|}}}|} ~~}}|||{{|}|}~~~}}}~}~}~~}|}|}|}|}|}|}||}}|}|}|}|}~}~~}~}|}~}|}|}|}~} ~}}}~}}}|~~}~}~}~~~}}}~~}~}~}~}~}~}~}~}~}~~}}~}~}~}~}~}~}~}~~}~}~}~} 儌׼֮ļ̾ь\ȹҿ̿􀊗Þ            jܳ޾ȷſÿ􁄀ɪüX¾λ̱ЇJ3248753320001 0011100121000101232 ! !"""! !  !#$$$##! " !$'*.20.)"  "#%%#!/".//...-./0/./..-..0/,,+,--,++,,-,+*)()+,+))(()))*))()**)*)('('('&'&'&'&%%&'(''&%%##""#$%$###$% &&&%&%$$$#"!!"##$##""! !!! !E8eѷ϶˵ɲɳ򆌈Ƽɳ͹б듰μÛһ񀉎ܿ¿Ȩ百ƿƾǻʾʶƼɿ˺񑪪ܯɧٞꀈ⁔ӽ⁆뇁󀋔老Ȩ슎'魿ڀ'&+0\2`JNSH;:;=;93145, )/98::498;:;;9<;>@=<;>:CC@@?<>==::;7<<;K+-13H/:=DUN=GIMY``YUF<6>$+((...4:HNB?FA=:/)%;E&(),-5>==:99:q<;971148qs7>=99917>@@Awr=DScZRX874S07?C;=>>=>?>>>?>>?@?@?@A@ABAABABCDCCCEDAOr@@631&&(%&&DH2+0,4P+-J5EA;986==9>BBDF&((,LE<::88:98:?DFECG%(%'QLT,,**++-+*()'+,-.*+,*-+L>7554456767;8:<65>K^]RMLKHDGJHGGIJGHIKJIHEDFA@@BFI`NX^do<@BDMD}zsmjf^ZXUUUSVXXZ\_afkjfdccb`\XUVSRSVWXY[^\XYXherpss9::v;vuusrqqoopponopqrqqqrqqrssrstt:;<<;<==<=>=>?@?>>>=(?@??@@@A@AA?@?@@BBBDCCABBBCDCCEDFHGGGFEEDEEFGIKNRQPMHFEDEEDDFHIKKJHEEDCDDCDBBCBBCCBCBABAAA@ A@@@??@??>>=@?@??>=<<;;<;;;<;;vusuusssttsssrrqppqpqoononnnmmlmlkkkjjikjjijjiihgf"eefedeeedefeddcbbaaabbaa`a``aa_`__^_^_^^\\][ZYZZZ[ZZYYZYZZZ[ZZZYXVUVUVUUUVVUUUVUTUSTSRSRQQQPQPQRR}^NFMLGJJGLWm[WHx:<[UHGHJMEBCDIKQ[TMKLEIFD=E=KYMSSVUPPY]ZQIPZLNRPFlg;i=?B8>E?BJGFHC:??7o:;ACFIGB?;tlim;>>l]j]\el?<;C<137868BGG@4/00,(()*15687788:41266448971/1521-+6437D=6/27=D?5/3+*('%?:(/27:91)--)$%,284*@A@=@?9)-19>E;<'*4;:77747=8"&()A$("?:5-)029=AC>BD#:3530=6:994*"'.9C)--72?",6997878G%;-(4/*+3fybM0C6D;=GYKR679ebFcPN@!(0%467965 "!! #A.0/$  & + (2?6)015AGJGG8) (",1)$&!  '&%#""$%$###&+XZ+-,)*,)544'(5;260# '77;RIJ6R)#'2M`i>:74-29<;>om;EP[PFP1.+H+2:<5367768>Dߞ_D?*UC5B :P NC2)&  88$!&5- 23/0/,0.+..+*+.% %#?  "'***/3780.381/5942/2 !!!$%&"" #"#%'*+)(*3/4 2,)+,-..043340,02@?<;:;97:=<:;;;7869988644100.147;?DM)-/0:4ddb^ZUOKIFGHJKMLMORSVVVRPPOMHCDFPPOQRSSWZ\ZXWNg{rx_"׀¿tZLPKEEDDGN`KE4X,0EF<;<>?98:?<:;9mkil988dYcWQYb96173),.--,2751'"#" !#$&&''&'"#"!"$%# "&#" #&+4,&$$$">97>'&#%#$'*,/+++0,%!$(-' ",&!#$&'! "!+-+'*+"#',#!! $&!"" # '  #d#"# "%4*  $;B=4$0"(!")5.3 !;:)9,*  ` &(&9<520+%$$$%'%(,("+ < "#"#%$!    *&+3&!!""#$#"%  +  +  +  ! $7?:=;/#*5707<9:27%')()+,"$&#$ =;=7=6p0.B!&%##$'&%%$B=9C$''$!"  #!"" $  +  +      + q      +   }~}~}~}|}~}~}|||{|}|}|}|}|}|}~~}}|}|}~}~}~}~}~}|}||}|}|}|}|}|}|||}|}|}~}~}~~~}|}~}|}|}|}~}~}~}~~~}~}~}~}~}~}~}}}~}~}~~~}~~}~}~}}}~}~}~}~}~}~}~}~}~}~~~}~}~} ŖСò锨ɿޯ_ˢ<   +      + +5       n¡ŻѹǽþϭӁX􀀅ľԿ=118777542200101201 012122333456 "!1 !"#""!!! !#$$%$#"!! !! !#&*/21.("!#$%&$!///000.0/00110/.-..++,++,-+,,--,++**) *+,*))()))**)***+*))*++*)()('(('&((('&%&'&'''&&$%#$#"#$%%%$%&'''(&&%$""!!"""#$$##$##"!! !!! !  #KŰӵũ»ճ􂅍¹򈙡톍񄍧Ժīмɀף 䭏ƶ¼ļ»˿»񎩴ȽȹȸҿԘȾׅޔeăܛפ넓÷󀈏󅌊ճ個􊆍ɿлԁB˷؀%/#,2YZYOKIA>=9>A?;52.%,/345769856<4:?8A?<>@>=GE?@>@A?@A;;><;I//QMP87CILZ`XSG=:998;;98Z]3:989@==??:Q`NGDGDHTPE762.216LMMW]@\:/A-6c5>?9:53;AA@?==BQlfcR?:8./3;BB?B@?Ds[^\^\\\]\]]\\...\\]]]\]^^..]\\]../.]]./../7.^]]\\]\.\]]\.\\\]^\\]]\\.]^]^]]]^]].\[..]]\]]^]]\\[\]\]\]\\]]^][]\][\]]]\]^]^]/]]]\\[\]]]\\]\]\].\]&\]\\]]\[]\\[\]]\\]/]][]]\]\\[]]\[\[[\[\]\]\]\]\]]\]\]\\[\]^]\\][]\[[\[\]]^]\ ]\\]]]\]\\[\'][\^\]\\\[\\\]^\\/\\^\\\[\\[[[\\[[\]\]\]\\]\[\\\[[Z\ ]\]][[]\[Z[\[]\\[[\[\\[[\[[\\[%\\[\ZZ[\][[Z[[[\[[[\\\[Z[[Z[[[ZZZ[ZZZ[ZYZYYYZ +YZZYYZ[YZ[Z[ZZZYZZYZYZYZZYZYZYZYZZYYYZYYZYZYXYZYZZ[ZYYZZYXXYYXYYXYXXY-ZYYXXZYYYXXXYXWYYYXYXYYZYZXYYXYYXXXWYYXWXYYWWXYWYXYWXXYXXWWXXYXXY"XWXXYYYXYYXYXZYYXYZXYXZYYXYYZXYXYXYXZZZYYWWY XYXYZYYYXXYYXYXY(XYYZZYZZYYZ[[ZZZYZY[[ZZ[[[ZYYYZZZYZ[ZYZ[Z[[[Z\[Z]\[[[\[[[\[]\[\[\[[\\[[\\[[\Z\]\^_]][\]\\^^^]]]^]]^]^]\]]^^]]^]]^]]]\]\\\]\^]^^^`_4^^_/```0^^00`a^_0___a`_/000a`00_000/00ba010b111001110101110121121222121232121122323332323 4333443454545456654566655456 56677666567676787778987888798878988898:::99:9:9:;:;<;<=<=<<<=>= >>==>>?>>>??>? @?@?@???@@@??@A@AABABCDCDCDDCDDCEeyAA9./%*,&('GE/2728M.4);)F?=@;=B;99:JB||smkic_\YWYY]]`acfhhffggfb`\[URTSUTVX\__^Y\msop89899tuutttsrppqqonppq rrsrrrsqsrrttutu::;;xy=<;===y=<<=>??@A@?>=?>?>>>@??@AA@AA@ +ABDDCCBCCCDFGE-DFEGGHKPSSQLHEFDEDDEEFEHIKLKJHFEEEDDEDBCBBDBCB,CCBBBCBABAB@A@@A@@@?@@@?>>>=<==?@@??><<;;<<=<:;ttsur:tr:sqsssqpprpppooonnmlkjkjkjjkjihhiggfgffhefeeefdededcb +aaba`abba^_-^^___`__^^]]\\\[ZYZ[[[ZXXZZ[ZZYZ[Z[\[[][ZYXXWVWVUVUVVUVUTTTSRRRQPPOPPPSNZ`TZWLITSLJR`Y^pQA:EHSYUIKMHFGHFGJRTcgTSQQTM?D@9MX]OMJU\VV\[KC@7BCOL:lmq75=J9AH>JOOJI@8;:ncj8>9565767562207;630/-5?<>E=7121.-,-$E*)5?9=@?>6,.02&)/57/)MA?;<:<60/93,)2$)582024359:$$&%!?GD!!A9..88<@AC=<:$788-ED6B=C>910-4=EJ',?B-<),7271+$ 889458:!,00-/2/+*'%(**)//,--/,&&(&#%*,*152,'*+'## !%+--&%&%#&*++,-)&*0.+&+1+.**)(-+*+,+'+('(*'*+''##=&+*-/6/+-'&(.4.32,0)(*/)-/238;:@044'A<9E/1166:78HA7,(2-)-2}uf^918<5Bh5MD@ce6B\VOU:+&,!*D7@@?L$B !!"!-.753>V5@IcF$)&%%%''OUYaZZ\YRUSOTUOVYRH?C*46524/+-.3.-./&#")15769878762/#&&&%(160-($&)/03@EHHI$'*C;(D="#$$#"9!" 575.514!**45*/*'..+.+)*",:CV6TDN^Z^O2(7<817'-46?).23954575<9+/++350+,//5)8D"9%$*-+,+)()(%%'%"*!'$5-##)*'#$ ...-*'*-,,*'%$$&($!"%$$'&$  !#&(.%,,(-///1*'('%$%%%&&)*.1,+'%''+,-)' "+13256545:77783,*&.-),+)('%$3%%%&('$$$%$()'$(,,-0-,*%!&''('*,15312<42*.'5#- "$ +%&$##$$$%$ ;@=5-' !! "! !!)-/6%&.6BNPE68<8$ + ''%"!""{##!"88"*,++.+)***8C6.).04;3$4:>GN:K1*,*.`5=?872/5;;=><c;ʄƀ}aVOB@KG@7:=968::;AEEMOEIJNOM?@82CIOCB6ffdh222]V^b`]SY2,2-.+/.*$$,1-$"+)!!%%('((('#"!""! ""!$(&$!! #*(+3/($%$! "4! )+ !"'(',+))/.)$#!+1)# %$((*%""3+(#%#'#" #)'!"$%("!!",+#(!%!!%+ <!j& "&'$)&$  *$JC@>&#"!%A.*$7(14%.$  +""!( % '?+/47?:?A@9<96:=7;<90&% !$#$#"! + + +   + $.4556## !#%#"$     "2#7)2?>>5!"&072:634=!%&))'*"'$ B<;9>"8+*%&!   !%!!!""'# 5       + + 8     }}~~~}~}|}|}~}~}||{{|||}|~ }|}|}~~~}}|}|}~~}~}~}~}~}~}~~}}|}|}|}|}|}|}}}~~~}~}}}~~}|||}||}|}|}|}~}~~~~~}~}~}~~}~}~}~~~}}~}}~}~}~}~}~}~}~}~~~}~}~}~}~~}}~}}~}~}~}~}~} ̫ѳĴϴ͟Ōۋd٩蓱Å8                   +=酡芝ۓҨ˽Ռ󂅅ŬۄPͽP51001246888775421 2100022322232 +22! ! !"#""!"! 1!#$&%&%$# ! !! !#&*021-(# !#&&%#   //0./01000//..-,+++,,,-,,+,-+++) **++*))(*)***+,*)*)))''(''&&&''&&'(''('&&&''&&'&&&$#$$#$$##%$%'&'''%%%$$##!"!"###$ +##""!""!!"!"!   ;˶»ϾƷȾ¹ý˸ϸ򊙦ۊȼ˽ºʽ׿ʥ½Ԭۗõ쀱ĸ½žͽǿڦ¯־ۻӞɹ㊒Әص뀈۳􍓒肇ր끓˾ľ􂃁тĽ򊕦򉄟*ճɶŷڀ#&4+3dURSB<<;ACCA@=82$"),,069=8:;9=>??;=C=<==BAGIB>>>==?>::6:DV4_I:>6ETZ\Z^_`\UPW\\WHGCF4<^CHKTUSSV^__]R?35'*)&&/6;>?=;7888:883.1799:;7?@7caaORKG?IWVQ77.N1@FQ\cCbF*:44;?<987:?;E<9;?JafY^UH?545@DC=ArC]]]\\\^^]]]/.]^^\]^^\]]^.]..\\/].^/]^/]/]].^].^]]^]]/]/] ^^]]^^]]]...]\]]_^^].]\\^^]]]\^^^]]]\]].\^]^^]^]\]^]]^]]\]\]\]\]^]\]\\[]]\]]^]\\\]]]\]]]\\[\\\]\[\^]]\\\]^]]\]\]\]]^\]\]]][\\]\]\\]\]]]\]].\.]\\[[\]-[[\\]\\]\\\]\\]]\]]]\ ]][[\]\\[\[\]\]\]\[\\\]\\[\\]]\[[\[\[\\\]\[Z[\[[Z[[\\\[\\\[\[[Z[\\[Z[[Z[[[Z[YZZ[Z[[ZZZYZYYZZZY[ZZZ[[ZZZ[YYZZ[ZYZYZYZYZ[YYZY[ZZZ[ZZZ[[[ZZZ[ZZZXYZZYZZYZXYZYYYXXYYZZYYZZYYXXYXYYZYXZYYYXY XXYXYYZZXY XXYYYXWXXY ZYYYZXYXXYXXYXYXYXYYZXYXYXYZYXYYZYXYYYXZXYXYXYYZYZYZYZYYYXY +[ZYYZZZYXYZYZYYZZ[YZY[ZZYZYZZ[ZZ[Z[[[ZZYZZZ[\[Z[\\\[\\[Z\]][\[[\[\[[[\]\]]][\]\]\]^]^]]^]]^]]\\^]^^]^]^]\[]]]^^^]^^__^^__^_`_``_`0/_`ba``___` +_0_a`00011010 11010110012121232233232323434343455455456656655676766677678787899889989989::9:99:;;<;:<;<<;<;<= +<>=>>===>=>?>?>?@?A@@?@AA@AA@AAABBBAABACCCBBCDCDCDDEGW?C<10+,)&)(GD&26872@BED$%&(.FD>9=@A>>':3,((%'%&$#&>(+.)*)%#*-..10.--+-044100//././/2=@=;;>?=@?=;:<;=AFDD&())RMP))*)('L'&''%((*,,,N?8654457788767983==>=>?>I?@@A@???>?>??>??@@@A@@@A@A@?@ABCDDEDCDCCDDEEEFGGHIHFEFFEEFEFGGILQTTRMIFEEFHJLNLJHGEDEEEDDCCCDCCCDDCBA@@A@@? >=>???@@??==<;<;;;::;:vttuutsssrpqqpqnomnmmmlnmmmllkjkjiihhhg ffeefgffefeefdcccbccbabbcaab`_`a^]]][[\\[[ZZ[[YZZ[ZZZ[\[\\\[ZYXXXWXWVVWVWVUVUUUTSRQQPOQPQTLdu_VSYXUOQJHOZZYghYYZ]T_XWOOPNHMOMMQUTY[XWOLMJEObX>RYUSKNXUMIRVKGEC?qm`byPKICTMQSEHJGAA>;;4Y[d7:@@@??8ld`chgp==84><7224463561-6<@A>95224;8::53130.+)*%'23570365:C?>@BBF?92062JG=;:3,(((+)+57:<==6115313786-F5;862)%%&)-(,8$-58 ;1-300598#$!A?8?$#D7,374=CEB==1"%">!7?)D!"<98725<>>ACEGJP,+ABJ>"!<97"%!7&%',.*).4=+.0541/.20-*'418G,YML0_bR4/:BGHLNGJOJ[697866M.+"*'.64cXXZb6WD?Y135\\/56642-QOS1:9:3-/01/>;6(A7#,)-#*-23568745749;02*'(0+(&+2261=F)+'(,,+***,)'('%%"- #--0($(&$$ (+*((##&)*)(.-'###""!  !+#-0./00/)((&$$%%%'')),1/.)(**-)&*(#5#,11/3543587675-*)*0-*.-,'&($$$#%'&%)+$!&))%''+,),('(')''*&(-232.0971/,-D2!""#$!')'('&&&$##$% C:;9'  ""!   "#19+%*)7IQSRTSPLA<@FHI=945-2H6<9/&1=FN9Q< //28<9632486@99;@J]dVXL>6--/6<:31326;8B4JL/YL=,)##!" 94#%&)5#,6236-*/*&.,,+c(%!!+" ! #0+'#,-)++-142.&! ! $&&$%%%"%'&$#$$&',**1.1.2+)**)*+--/221343.0685774687;;=B?<==<:769432310/359?A$0UW_fjlmljhZZWTSQPQPSSQMMNPTVXURPSVUNNOMMNTZ\_\cʄȀaUIID@>B;7=CA?HE>=>>8>>=99=<8===ACBCGFHIDDHC=DUO7HRII@CLJB>CE>><:8fhZYpMGC=LD@@48=:564340WW^34988862da^afdd5c]ae\SQT273.,*+&&$"!"$(()+**%*'%$"('# !!! #)--,($#"#*(++&%$%#" !'&(*!!%"&.)*+,,0-(#!$!3.'&($ !#'((u)####$%"/#$ &%"%"#&'&"#!"*' !'(%    !%%#'! & "!->@<81#6(+C$-->%;+';/* '" #!"! $5%7>1/01023467767665553312101100112101233213323335Z !"!!"! !##$"! !! "#$%%&&%#"! !! !#&+121.(#  "$&&%"  010/111/0//0..--,./+,*+-,++))**++*+**)))+,++)()*+)()('&'''%&&'('((''&'&!%%%$#$$#$#$%&$%&%&&&%%''&'&%$$$##"##$$$#$$$##"""!"!""!   ?ǷȸɿɻѮ񅕟Щقîνļ̯˿ǹ˼ͪ䭻ᘷżՒƩܿϊɾ¹½¼ȿ뤪ȶºȓأȀާ끂􅋏炈뻣󀇆ڱ抖؄󈄊ĸμЁۺよ񋈡4۷܀$#''44UKMH=58>IMG@>;) $),.49:===<::?GG=?BBE??;9GHB=>=:;<<<;5?VXaN?6+7HPRWVX[]```Z]ZWKDFJ4>T@>IVYZZ\bdbb^U;8)$"7$)*'$)17=>><<768}89875,,48:;;8:6\cl`QWVHEPYW\J80.+).@BOd^<0X'=/44?:7<74;>@@7o8APbWVZSK?==>AB<85;ABCF:`Z\\^\]]/^]\]]]./^^/]]/\].]^]]\./\.^^^./ ^^^]^.]//] /]]_]/^]]^]_]]\^^]]^__]^^]^]\]]]\^]\^]^^_/^\]!^^]^]]^^]_^]^_^^^]]^/.//].\\]]\^\]^]_^\]^\\\]]\]]^\]]\.]^]^\/\\.] ^^]]].\]^^]\]\]\\\/.]]\]\]]/^]^\]_]^]\\^][..]\]\[[]/\\\]\]]\\]].\]\"]^]^\\\^]\\\]\]..\\\.]]\\\][\\\]][]^^\[.]\]]\]]]\[\]]\]\]\\[\[[[\[\[\\[\[ ZZZ[\\[ZZ[\[Z[Z[Z \[ZYZZ[[\[[[ZZZY[Z[Y[ZYYZZZYYYZYZ,[ZYZ\ZZYZZ[YZ[YZYZ[Z[ZYYYZ[ZYZZ[ZZZYYZZYYZYYZYZZZYXZZYYY[YXXYYZZZYZYYYXYPZYZZYYXYYZZ[YZXXYYXZYZZXYYZXXZYZYXYYYXYZZYZYZZYYWYXZYYYZYXXZXXXYXYXYYXYYXYYYZ[YXYZZYYYZYXY +XYYXXWYZYZYXYZZYYZYZYZYYZZYZYYZZY[ZYZ[ZZZYZ[ZY[ZY[[Z[Z[\[Z[Z\\[ZZ\Z\\]][\[[\[[\[\\\Z\]\]\[][\]\\]\\\]^]]]\^]^]]\]]^^] _]^]\\]^^]]^^] ^]^]\\\^^]]^*__^^^__`_^_a`b``^///__`aa`0``a`///0`aa0001011a1100011011010121222121222122212 3222333223232323 234334443434344456555656565665567667776678 998:998998988989 :::99:;:;;:; <;;;:;<;;<==<<==<>=>=>?>?@?>@@?@A@A@ABBBABC BCBCCCDDDCCDFK=CDA83+'('('HFC059?KV56N4I<7487;85@CBC#$&'+DH:995522110121/.10.02/047432223223256534;EE>3.)$'''%)$DAB>;A6-)*('&&'''&'*--.d/-)(*./02/1031033-.--,-/.0337A=76:;=><;:=BDJ'&&'QKR**(*+++)(I()('*,,+*-.S=:644435778867996?O^-UO`SSSOJJMOJGLIHIMPQONONIFEEBADFHOUa9delu|EED~tmjeedafiecb`dghgfhgfdca_ZWTVY]bfogroppnppqprsst#rtsrqqqpprqqpqpqqqsrsttruss::stv;;;<z=>==>>>@??>>?@@AA@?>?@>??>>?@ AAA@@A@@ABCCED CDDEEFGHIJIHGF HHJNRTTQMIFEGFGFGHKMMMJHGFEFEEDEDEDCCD'EDCDDDCCDBBBAABA@A@@A@?@?@??@AA@@@>===<=<;<=<<;<<;;tvwvv:rsrrpqsq3rpponnmnmmomlmlkijijjjihighfgghhfgfgfffggfffeddeddecbcbabbbaa`a`a`a ``_`_^[\[\[\[Z[[[\]\^^]]\[ZZYXWWWVWWWVWYVWWVUWWUVTUTTSTSRSRQPPRVRi[SQX\[\WORYNL\ea^YSOKSPLSfd]VWTQUUTUMKSTOTUMSehcTFB:@AEEGKBKNP]XTIKLHm[ZmqGVW?A@;fhflln;8ma^ZYVY4=CjPC8ECE><219:759547ADH851/3/*-4341/01-3556<7<64<534631/-0/.-,*'/B>3&+5-3539?<>FH?94155:31337766:6+A$%%"!>"'%#5*183;@CA<=0'('"">0F#A98898;?A-=&F-/"' *2,($"<78201),.*',.*.,*)./(&.-),..,,)++((-+().,)(((%"&)%&%&+($#*++,+&&+0/-+-)'++*+*,*))++'-+'('%&('%$%"),&)-0,,+(*/1/00,./')+4534327;?C4229467G'9;995788<14218.)+/hgf\^^CNgaDK@N89*-&W.AfR?6647&A6?5ABBC>=:15@C2-:== */6`6J((%%'&&(NPWT[[ccb]^dceba]XOA@J.301/*/0,.TRU-,.258R;>  !$00*$6'!'('*#"$$%###*";0193/6NSAHPU<8??@ACAB@;BHND!! !""!<8:=>!!""%3'#''(+:,43330.,++'B3)(2>O-OS_aP14'!  !"### " "! "'(+*'+*FGTI;>?1,1=;;% "*6FD0'I 0*02;6552.579B92i9@L_TQTH?2006:;60+037;:?>=>@?>;99743342234259@'FGOX_gmr:8i8jd`^WVTRTUOLKKPU[WVWY\^YTUNMMQVY\YZd$߄¿dOHKLHGB;?B;9AE>;85404238B<;9;<@7=ACJGD<>ACiZZkn?OR7d3@B1422035592ZX056545652X^`cgk97f_[XZVU079VC6,314.,$$(+)(*&&)./3%#"" %)'&(%)%$*##$'%#"!##$#"!"1-&$"%"%)()04-*&"%"*/'%$! '##&&$! !!#%$!"'!% "%!#$&%"# ) )%!#&#  &(++&""  #/<=7<;(.6&)'-2"52!#!!, "%$&(#! 1'/5<:0$!%303 "".  + + + + +   + 07-1:C8!!'+.-.6,9:0=%&((&%'. '"%G<<=D$A3+"!"$!!""$%#@765?''$! %(#### "$#$$&&#!Y %!!%  +   z + + +  +  + +    }}}~~~}|||}}}~}|}|} }|}~~}}|}|}~}~}~}~}~}~~}~}~~}|}|}|}|}|}|{|}~}~}~}|}}~}|}}}|||}|}~}~~~~~~}~}~~~~}~}~}~}~}~~}~~}~}~}~}~}~}~}~}~}~~}~}}}~}~}}}~~}~}~}~}~}~} Ϯεƺ’Yݴ䋷߀d!          "   +       # + 7nߒ숎쫕ûŷƽ뿫ſ?ö޳K6001212356 56643211211021212123434   !"""#   !"###!"!! !"#$%%&&$#"!! !!""#&+132-)#  !"%''%" 011/.0/0/.,,+,-,,,-..,,,+,,+,,+4*+,++))*)*+++,-.--++*((**)()*)(&'''&'()**))(&&'(''()' +&&%$%%%"$$%&&%%&%' &'&'&%$#$#"#$#!!"!""! >:¿ůǼ÷ľܪ˰Ȁᆪ̷²ʻź¾ª½˽ĥӰϞɁތ̷ęφꊝʼǻ¶ʼÿл־Ŀ֥֗څ¹ܺ讥倄Թם͉턄ֲ܆򉣛􋘑쁌ཡ׷0ƭ»Ѐ%$$@12\MS\L@@ADFEA?8%!'')),089<@?67;ECB@>CCC@;7BHB?@@9:<;:=8HURSHN>#=HNOSQRTTZ]bcbZVKCBI:\DWFBMZ^\acefgeaS+7#0DJ&G)+.32+<=<;758R9::75.R69<;=;cggrka[]]MIX.\/+=30**+/HWgU8..;$7*4:BD:8:66?>><<:==>???>?@@?@AAA@A BABBABCBBCDDCDCCDEi:JCG@;0**((MIG@276:@M,/K;I:9:67BB77>=BF$%'*4I?9:9EB621122112421221/--//133343/034541243556?GB3-))$"((%&"A>@D/3&&&((('()')+/124*2/,030-/--2/2326/--+*+,-/5557=:6449;;;<>A?;>AK&(N*OL+++*)Q))(O'*w,*)*R,-Q:743544588:9886939HZUPLNNLMMQOMLMMJIHKKKMOQPNPQOLHHECEFFGMW_PXbdjtyCEK}ytspmjnfedaddeehhdeghffb]\ZZ^b~vd[rp&oopppqrrturrsssrqqqrpppqqpqqqrssrsutuvuvvuw<=>?==>=>?>??>>???@@BAA@@@?=>???@@ABABCD EDDEEEFFGHIJIHHFGGGFFGGHJNRVTRNHF GFGGGHJMONLJHG EFEDDEEEDCCDCDDDCDCCBABAAABAA@A@??@@A@??>==<<=<);wxw;:::tssqrsrrrpppoonnnmnlmmlmlmkkjhijihgh&ffghghgigggeedddededdcdccaabbcba`a``aba$`_``^^]\]\]\\[\]\\Z[\\]]^^^]^^\\\ZYWX +WWXXYYXXYXVWVVUUUTSSSRRSRRQRRRUYYJHNQRRRT[h]__X_^PNRSIKPRVW\U[XUYUTTONKJROOWXWX`[a`G4/>OBDFLMUVS_[\NJ@lZ`dv{FKMH?8IP=68997^h91_4:@BC?>>;9856974da`\VSOMS2ICZEQ[M>:;<88AFE>AHB;=:=;333100/64344364-.25>A@78@C@81,//.0...-(%9C4+')2149;?<43BHA<5346;>:::,+3+)$$0;:<>>;50//5788891(BB;%#1,7&B69!,.12=!<64726@# "$&%""" #$!.&3:8A=>?;@1(''%!*- )F""<88638?@1!+3)"#(2-)+&55=%)020,))+&(,+*--&'0.-./.-*'*,**..-,,)),+*+('%#'($'%%((%%*+/-,#%+..+,0+(*((++.+('))'+)'*)&''&&%&$*+),.0-,+'(/.,01-1EA4.161/206;CJ03/<78;!*713;456470216<5*-5?Y_\b_GK,?Y19>FA<T"-LR=/''4/M.97@DIIIC@83::1/86K@@DDCDIMFHEAA<4246/149;9;499;B?E@@=<:;A=DFBLKI?<5]S\`swAHGC81:B3.2541X_5,W/2564211/1431_ZYWSONNM,=4J8AL=3.//,+2982252,,**'!"" $"!!! $$!!"$)++##)--*$ #$## !#$#+4)" "&'((%#/3.,&%%&**&&'"!'%'&$"! !"! ",,( "*" "" ($%&$(*!   "%).0 !$165>:,% .8&-"0$(+-1.-'# *#*7GABGNORTNMRRMFFC@?:3-,;?AEKJGCAA    +      +8%-;@=!&%#$0+"   +  + + )%"+17<<4 #,+...21;519%))(&&();=7>=>=F'A8:!"$&$'$"!"$"=564<#& &&'!"!!$&)0$%&$#%%$%%&'$!I (% ""%%"  +  +  + M +      +)   }~}|}|}~}~}~}~}~~}|}  +}|}~~}}|}|}~~}~}}~}~~~}~}~~}~}~~}|}||}}|}|}|{||}|||}~}~}~}|}|}}}}~~~}~}~}~~~}}}~}~~}~}~}~}~}~}~}~}~}~}~}~}}}~}~}~}~}~~}~}~}~}~} ׭ŹǻÍZҼª"      <      I                   + '   "4⓪ꈑςʽ풨ûƺؾ¾@셂ƴ®݈D20001245556667887632322101121112221 23443454 +  !!  +!!!""##! !"#$###"###$$&%$#! !!"""$'-232.(!  "#&''$!   +231110...-+,...,,.--,+*+,+*,*+-,+*+,*))(*+,+*+((()('()((('''(()'&&((('()'&&%&%%$%&'&&&'&''(('''&%%$$"$$$#$$$%$#"""!"!"""! !!! ! Iiź·ʺüãʮد􆀄չ̲ף޾˧ƨֆԀ뀇θӔֳ͵뎗»ڀõɀĽʇƬ۾݀噉Ⱥހ퀃綝犚󀃃󀋏ӻˀ󍟝䃐⼷|C펓ʲúĀ%$$:-2PGPVJ:AJIEC><=)%)()()085:>@9768789>C@DA=<9CA:<<9;><9:8?CHIVRG)8IJLNPQRRU[`ee`[OC:=?Y`EXNFP`aaeffige`P &+4@KN*-/055'1:9745:\;;8673+57:<=6<97:@:ABEE;OdVV`;G>-9?F=<<@;;?@A~=/.../]///.//././/./^0.//]./^/./^/.//_^/L.__0_]]^.^_0///]/_^//^^/^^/^_^_^^/]_^.^/^\^/^//./^_/.]_^//]^///.]^///]]/^/`]^]../]^^]^//\..\^.].]_]^]^^.]^]]]_]^..\.]_^]^]^^].]]]_].../]/\]^^^]]/^+]]/^.]^__/.]\]]^]]///^^^\...\\.]^_^]/..^^]\^]]]^^^]^]]./\\\/]]^^/^^///] +\]]^^`_0\.] /\.]]]^^\] +\]/^]^^\]]\'[\^^\\]\^]^[]].]]]\]\\]\\][.]]\]\\][]]\]\]]]\[\[\ ]\\][[[]\[\[\Z\[]\[[\\[\[[Z\.[[Z[][Z\[[\[ ZZ\[Z[Z[[\ZZ[ZZZ[ZZZ[Z[[[Z[Z[[[\Z [Z[ZZZYY[ZYZYZ[YYZYZZYZZ\ZZZYXZYYYZZ[XXZYZYZXXZ[YZXYZYZY[YZZYXXYXZZYZXYZYZZYZYZZXYYZ[YZZ[YZZXYZYY[Z[Z[YZ[ZYZXYZ[YZYZZYZY[\ZZZ[ZZ[ZZ[ZZZ[[\[Z\[Z[Z[\\\[\[\[\[[\\\[\]]\[\]\][]]\]\]^^^]\]\\\]]]^]^]^]\\]^ \]^][\\^^^]]^].]__^]^]^4].]/__^_^^_^^__//```_^`_``_00/00``a``10aaa000100a111010121100021212323 223323334345454454454565 +6655566567676677676767878789998899:999:999:;:;;;<;:;<=< ==<>>>===> ??>??>>??>?@?AA@@A@ABAABABBABCBBBCCDBCDCDCDDCDEEDDEA1HLHA:5.+('K%LD3:17:Q/5LA';>C<53<77=?DGI%''.CF;775;956433422013334430112//0342143430154566CHD;.'($#%%''"A?E07-''L&M(('**-.13221/1320/,-2101011242.-+,--1125:<:57::>?=?;::?>;? >>>?>??@?>?@A?@ABAABBACCDEEEDEDEEEFFGFGHJJIHHGGHGHIKOTWVSMIGGFGFGIKOOOMKHGHGFEF"EECEEDFDCCCDDCDDCCDCABBAAB@A@?@?@@A@?>>=<=<+;<<<;;::ssrsttstsqoqqpoonnmlmmonollljjkjihghghhhfghhgghhgffedeeeddeedbccca`aa`ababbaa_`__^^_^]\[\\[\\\]]]^__^^]]\[ZYXYYXWXYXXYYXXWVWVVTUUUTTSTTTSSSRSXumZCITMVXQhb]]ecefVT]UPWWNTYZUW]VVWZ[TRRONNJIKYhjqstll\@7P^HGYSOURPX`\VH=GwA<>;AGwgklr?c^i69iOI]eR,8BFEB>:86323444c`ZYVVVWf=@C==67B?;?;7405:>>@C=<7610-2.//.013665821..31184.,-,)-0/3/-'(:4'*/-*5;;>8,!%6JC=72327;:;90,L,%*+4>99=@=4-.4769:;9.GE?70- %0;%$44).116=98:=2*-*)'.7/E#"?9:6229=2',""%"#02*( 8#&""+05432557./)&&,,&(0--0//.*'*,-,/..-+(((*)*)($$&)'&%$%%!#+,/.-&(+.-'+/.)*)),+/.)(('&*('*,((('$%%%+,+.,1.-,()/+*-,,4%'A.28424/108(45/#5:C+813<942/.*%%??514=5^\d9G$"#/7 4=92!*?=aF77AC/9#!9&HJJEAEB@>5576>" "E'>?9''&'$EK*'#$&&*,*%*+**S\`\UV.1\XNTX`42TNaddilg\W/.0(,74'#! $/350.-,""( !,& '+,('&#!&5!<:7/  -1--:42MW^N3"()+7AKD=?LQI?!!!932/0557:88;>##C*85*#8!&"*4)J+NE==D*'E:"1=DL_UF59JBDCCILLD@K5:;<;95c35F*;>7)HOXZ\`8_N_01366:76234/NKLJS3:73667:96129;<=<986687689::;6238:4M]cU9:BP162<4H-2/**,/0,))**('(&&#" ""- $%#(,001-%'),%9/(*'&((''&'()++,++,(%'+'%Q&%$%&'$"# #*-%/13*&)(&()&&'&&'('&(.+''*,.-*++.%%-13541458984,.(.---+()--+(D''%$''%$#$$#!&++*& ##!A:+-37392*.393.-,BBI;GJA(#%" &&0(-1'$('$"  $+0@?4)68=ADFGFHLQUVTQE836:JRAQC9CQPPTUVVTQM;"*- "c"! $(*+.JLU[VKDIHBDCA! %:>#7$1;;:17304:0236:6L`NLS26-!+0::8552469Cɞ 6 + {TF92,(%!"==7'*"&)5 .)1360+,2++-+011V+*# $  !.1*"1/.&56"#$# #$"$%$'%$#((%%&-000232001/077.)(),--++-/123016019<9676866776457558999:;8789776k8C62148>DJW_]48w{tolha\RMJLNNNPTTX\fhgf`XWUUTQ^oQЀ߭vR=?C97985:>=><;=HUX^bhbURJ71IV@FMFC90:h;8;8;?ocgce9YT`23^JEV\L'.77410/-,+,,..0\XRMLMLPY15:25/-84040,)$+03214//))%$ " #!#! #" &.0,)&# !""!#"" -)!%%)&&5/,'%&%))()'!5!(#$%&# ! #""+-)##("!"&$&&$%)!  !#$'!#&!O68@#'  !2#!'2&#300+*,)(&  3=%(%'**.00&&)('HIIIFD!$@<59;@#!51FOQUTLB=!!   + + + +  $";AD7'0*"#-1(    (,$%" '1>8/#%0)*--0460/6'+*)(('I&&'%'",3<6=AKH><71& %)-0-667=@A@A>:335:AACA@EB:<=;;9:<8778:28BNNM4BNKKOSTRRVZ]da_KD68?:T9JTLNW`cffhjhgca@./9>O*,..0881 136779\:97797.149:;8h`2;6a]a`UY./1/?=5./.*&:K;'!(,)%+E&.9CI8:7::;ACC_0]/./]/^/0/0//./../`0/]/0/..///^^/^/^__^^_^/0_^/^///^^/^]^.]/.]]^^/^]^/^/./]_^/^^/^__^^^_//./^^/_/^].//^^__.^^__^_^_/]^././_//./]/^]]]/_]]./^^]/^/^//^./_/]]]^^///0^_/^]^]._^]^]/^^_^//^//.]]^]/^_]^./]^]//$../]].^]]^]]^^^]^^]^^]\...^../]^///]^ .]_^]]]^^]^].^]]^^\\\^]^^_]^]]]...\]#\]^^]]\]]]\\\]]\]^]]]\.]]]\\\]\\]]\].\ +.]\\]\]\]]\[\[[\[\[\\[\\[\[[\\]\\[\[\][#\[\\[\-[[Z[[\\\[\[Z\]\\[Z\[[-Z[\[[[Z[Z[Z[\ZYZZ[Z[Z Y[[Z[[ZZZ[[Z [[[ZZZYYYZYZ +YYZ[Z[ZZ[YZ[ZYZZZYZ[ZYZYYZZYZ[Z[[ZYYYZZYYY[[[Z YZZYYYZYZYXZYZZ[Z[ZYZYYZ+YZZYZZY[ZZZY[Z[ZYZYYZ\\Z[Z[Z[Z[[Z[ZZZ[[[Z[\[ ZZZ[[Z[[\[ZZ[\[\\[]\[\\Z[[\[\\\[[[\[[[\[\]][[[\[\\\]][]\\]]]\]^]^]^_^^]]]^]^]^_]]]^]]^\]]^^___^^]/^ ]^^___^^]/^_^_^]^^__^^_`__``a`_``0`000`01012121212122212 322232232223434 +55445544545 655665565556566776567 87787787789998999889989899:99:9::9:::;::;:;;:;:;<=<<==<===<<==>>=>?@??@@??@?@@?A@@@ABBBAABBBCBBCBCCDCCCDDCDCDEDEGG?RO@A810)(NML?*8617W)7,C/9<;86:?=:8AEGGH&%+@F<886<@954463110/2346873000/11242334233436556=DE@3*!%$$%(%@=L)'%&%%&%%%(++-00//-1/220/.02311010/222/-+,5971159<>?><=>><=:9;8;>>?BCAIWRMLP**O(('MK*,)&)*',),/-R?75343346876789<:6>OQMLMLMONNPOMPMKKMLLJKMNPQQWYVVSgRNNLJHK[MDDIIJOS[dg}~B=;nljkhfa]]^dikllmnklmIY_oopqqpoppoppqrrsrstuvutssqrpppqqrqrss9srtuuvwvww?=>?>?>??>??@?@@@ABBA@@@>???@A@ABBABABCDDEDEFFGFFGHIJJJHIHGGHIJMPUVWSNIGGFGHGJLOOONKHHHGFGGGFEFFFEEEFFEEEDEDCBABAAA@@AABBABBA@???>>= <<<=<==;;<;;uuu9sq +ppopponnmnmlkjkkiiihhghiihhgggh fhfggfeeeddcdbccbbbab`bbaaa```_^]^^]\\]]\]]__``__^]\[YYYXYXYWXYXZYYXWWVVVUTSTTSSSRSRRUZ}[UVQVPQ^^OW_b\OJONDINRPSLHRWVTVXTSTRLKOUde^WT_llkmjvvjmRO\woOJNUWZSOQUUSVCog9@C>8<9/5;?:933215540.00../167526:464.19;:5:BA?4---<1+SDDHJ::;<0(,,(&28!6%%#=8<:79?2**)6..0,$).+($"((/453017=:.-+((,,'&-(*.-,*)'*-.++.,,-(&-200.+((-,)*'&(% "()*,,%(-0.)*.,+.)*,*..+**,&*'&')&)*($$&'))+/01.-+(*1+)))*.9F8030/01),7H402.;28!=-6117641/-+*/?<458A8{g`cD#$$#c%$4,P?G?0^>JPK='?P1=B3FHHCDHHA>843*,6!&! !$$*;XEJcccmeU;ZlA7H;-.A6/0/.]b`]a`SCP`_1450W372/5:;;<>:883-'(*&(0%(!#&$&&$!50++ !!%# 1"+-.07:P[\Q38G-,2:BCAMLKMA@=?;21(%2699659.;5.+%9 &/)HICC=LLD>ORJJG5<\899l^QPa_3T.C")!/100/0401-10233,-""%  (/+&/-4 ! !!#$%%$%%%&'%#$$'(''*+(-641130/.6-*()+***,///0//3206<976669:99976665588879;<=AAEGFF@><<:979E=534458@B@?A5`[26G?B5WYURSROOYT/1KB^2S+58:4.-,-*)*-.-,+WVMHHQ1-++*-,588DD=:69-22,*)-,+(('#&(,*)*%!$$"$"'"##!##%" #"!!!#'('$*-'**#$(%$"&)((# !*720*(&%$&')'$")#!($$%&"" "$"7,.26)**. # !!$%'&$$ "  !!( !#+ !!!#! I99>( B-'-3 -1,'+0''!10/,-3465/,,&&##)5D27FFFNG<)@I*$5,$%-&$&$#FMKKJH;.6FN*()"8!#! %$$%&##"   +     #8AB:$ + ')&01.-! +  + ((#"$ -::-#)42-)57122%,F++*OC;:FE&6%&("4.5:;@B?7%"$"%'''$#$# 8565:!(#"%$%&&$!%'('&&%# !#&%((($!%$!&EOMK6!!#-o3#"! +     + + +  l   +  + + + "&(+2*%*'   }~}|}~}}~~~}~}|}~  + р}|}~~~}}|}|}~~}~~~}}~}~}~~~}|}|}}|||}|}|}|}}||}~}~}~}~}}~}}}~}~~~}~~~}~}~~~}~~~~}~}~}~}~}~~~}~}~}~}~}~}}}~~~}~}~}~}~}|} փƦѽ¾ӹðճ炆c˼҂ʭӕ?!            *           - &      +    +  <痧̤ƿԲǽ􀇄غFѿÇM521211220122355567865333221112112444!"! "!# $#!! "#$$%%##$$###"#%&&'&&%$""!""#)1553-'#  !!#&()&$!% !!  12/...-.-,./.0--..,*+*,*,-,,*+,*+*++,,,-.,-,+((())()(''())&(**) *'''(()())*)()((&&&'&&'&&&'((''())(()(&%%&%&%&&%$$" "!"""#"#""! !! !Cpضزρӻ؀˱򇬵බѷѣӽۼ􁃈ֺæ¼ŷ½ôüÝܵ䀤݌癡țޝےՆϲ功김и䁁شղήჃЂ̾8зʠ焄,8*3P%EM7;BBFA>BB:'""&--/44=AB>BAA=47:?CB?B@@JDFDA81687565*(7?'-29:6e5965871.39<<554-00[[_^]]/042K>?4,*))15%#"".(+#")2=G=96997=45/1;EaW/JJR]P&3E=EIORQ9DE=^.^///_///^/./0/0_0/0`/_/0///^/0//__/_^___``__^__/^_^ +//^^`^/^/_/ ^_/^`_^///_/Y_^^^]]_./^^//^//..^/_]///^_/_/^_^_^/^///`//___^0//_^_]]0`//^//^_^/^^^//]]/^]/^]//.//^^/]_/ `^/]^___//]^//_/^/_/^/^//.//^/`^^/-./_//^^///.]^]^^/^/./^./^^].//.^]/.^^^//]^]^^]\\.^.]\^]]^^^]]\..]].]]]^+]]^]]\\\]]^^]]].]]/^]]..-]^]]^]].]]...\]]]\].]]\]]\\\[\\\[[\]\[\]]]\[\]Z[[Z[\\Z[[\\[\Z\[\[\[[\[Z[\[\[Z[]\[[Z[Z.ZZ\[\\ZZ[Z[ZZ[[\\[Z[[ZZ\ZYZZZ\[ZZ[Z["ZZ[[[Z[[Z[[ZZZ[ZZZYYZ[ZY[[Z[ZZYZZZ[ZZYZZYYZYZ[Z[Z[[Z[ZZ[[YYZYZZ[ZZ[ZYZ[Z-[ZZZ[ZYZ[YZ[[Z[ZZYZ[Y[[Z[[ZZZ[ZYYYZ[ZZZYZZZYZ[ Z[[Z[[Z[Y[[[Z[Z[Z[ \[\\[[[\\[\\[\[\\[Z\\[[\\][[\\[\\\[\[]\[[\]]]\]\]^]]]^\]]\^]\]^_]^]]]\^\]]^__^]_^__^]_`^^]/^/^]]^_(^]__^^]/^/^]]___^^^___``_a0_`000`_`000``0 10011a110101 0110111211122121232323343433454545545465 656665665556 55677677766767 87878789888789989:9::9:;:::;:::;:;;::<;<<;;<;<;<<===<<<==>>>= >>??>??>@?>?>@BA@A@ABAAABACBCCCBCBCCCDDDCCCDDEDEADEEFE@1CKJF;5(/0K?@:78>:?@:4;BBCGM(*6GA>@<>B7310.003405671,03241126424455577?D@8-"%"&$&?BG,GN&%''&''&)*-/.,+--,-/-.034-/.3221031-*+//8A92446;<>AB?@CC@==;687;=@BBIONM(**''),+**()'J)+*()-/,E;64212455867687<=7:FMOMMMLONOPONPMLMMMNLLLMMNQYZUXXZVSSQQRSLEEEFFFGJNZnkr}NLHIEA?<8qojea_\dhikmnrrvx|Ukonnpqqppqppnoqqrrssrs uvuutsrrqpqrt:9s:tt;wxxtwy?>@??@?A@ABA@@@??@@BABBBAABBBAABDDEFDFEEHHGHHIJIKIH,GHIJKMRWWXSMKHHGHGHHHIKMPOOMJIHHGGIHGGGFGFFGFGFEEFEEFEFEDDDCCBBBABBA@AABCBB@???=>==>===<=<=<;;;72BA<@;?E=65-195:=@8+)%,,/8@>:-JJIIJN<4DM(&5@%18 $" $!< $##"$&$$$&"##26;<;<9?;;=7+.,+)):?2K%>98:<= "B2()*823730<1.'! *-'%&07;970246,.,)(--((,#'-01/(&*,,)+.,+,((342/*'&(,-*-(*,*$%)'*+'"%*00)-/-+-*)+).-++,+)+(&('%)(#%%&'++*+/3-.+)*/)*('*,,-/01/0/.""G01*3):78'/+4043-1-,*,('0?1/476YeP7$&# >37,/-OEC2Z^aE:<5YvX9}D)&>>?C#.HZ`_MQWqR:.SH;87<:d,HvdX9GB=164022]NHQO7G@:36:1^26;9;;<:6'!$)+#($#%( #%&#D!:2+)#2 #$"''%"( ').3;CMMI5+C(*26>?AHOLNE;HHKE:, $.698636='&EA0:3..+77@#@EF7;77>&-,)F*,9IRUA9B?FDDWWLHH84Ibkia]PP65c100E970WMTUXWYZ4441287755660QJKMW3=5:95:;:6-7:9:998762313578:::95.4;OSTC8/*3D?A/8843/.../0.,,,++**(((&%%&#!!5!#&("#)-%"")48)-"#$ !%'%$&$# !!$&'&&#%()*((&&$ "3530-+(&"#31%520//-)&&%&&$&,+*'##&)()))*)-/1*$/36637637::././-*)&&'&$$''((E'%')*,,*)*,'%+&&'# 4">"+.$%'>@3)055-,MKNTXQCPLF?0%+( # " !$ "$  "-36+357=BDCBIJKQSQA>82;EK9%94<=FHH3?Oe~V 8+G NrRD>40$&(B;;4:)(%&=40#00/031562+043344$-$"! "' )  !#+-'!-/2 36 a"(# ##!#$#%'('&'&"%%&(*+)/432-0-*(''(*++..///.15149896678;;;<:8865655678:>CFEFFGGC@><>?:76s8899@PQ`ir}DB=:4/.+)TVVTUST\djjighhfdhC` +׀JK?BEJD=FICHLHB??CF;:C>>@C>?HIHCADCHJGKeg]XWSXe[YQZ\_XPAAW7\7=02<>1+(-BFBD1432>9:8C67'5.(%###?+G:2&0,*'**''&G4/4?.FF='&%*-,14;@CE=<654769A@CHC=CJFIJD:/27679*)-166FM=:5Ydhjmlmllg;D,'')+./697>.7(.4:8^8766873006;;9e63+TW.0`b33147%3:97.')4) ""!4<#%%(09;697898<@3>54A\kVFINTf\F.5BFFHMUS=KNP/^_^_/0//00/0/^__/^/.0_/0/__^^]^^///00/^^/__^/^__/ ]_^00`_]//`/ _0`__//___./_^///00__^^//^/^_//./ ^/__^^0_0/^/^^^]/]^//.^__^^__]///0/!]_/^//_/./_^//_^^]^/^^^_^]^^^///_/^/^^_/./.^^_]^/ +./^_^^//_^/^^//^]^ //^^_^^^]^^]^]]^/]]..]]^^]]/.^..^]]^/]]^].^^_^]^...]].]\]^]..\]]^^]$.]].]\\]\]]\\\]\]]]\]\\\.^\\.\\\]]\]\]\]\1]]\]\\\]\[.[Z\[\\]\[\[[\[\ZZ[\\\[[[\[\\[[Z\\Z[\ZZ[Z[\\\[ +\[Z[[[ZZ[Z[ZZZ[[\[Z[ ZZYZ[YZYZ[ZZZ[[Z[[Y[ZZZ[Z[YYZ[[[ZZYZYZYZ[Z[[Z[ZZ[Z[Z[[Y[[[ZZ[ZZ[[[\[ZZZYZZ[Z [ZZZ\Z[\[Z\Z[Z YZ[ZYZ[Z[[Z[Y[\\Z[[[\[Z[[[Z[\[\\Z[Z[[[Z[ \[[\\[[[\[[\[\[\]\\[[\[\]]\\]\\^]]\^]]][]\]^^]^]\]^]]^]^^^_^]^_^^]_^/^_^^^/_ ^^^/^_^^^/_^_/00`0a0baa0`a000100101010012112111221221123223234343343433455545656565677767677876778778788878989899889:9:9:9:;:::;:::;;:;;<;<;<;;<<<;<<<===<=<=<=>>==>?>?@@???@AA@AA@ABABCCDCDDCDEDDEDF|GJ0?OI@6'1,B?@?D-745@X&6+?PC:9=j997688>DCB>C?<==;8668::=EMRM***(M**+,+(MINM)*+,-.ZA:42323345788879<=;9>GJLJLMNNPOOMMLLOOQNMJKMONLRWVTVY\X7\SLJIEEEFFCCMUYcjp|NOPOKIFDB@{phdcafghikosv}RVkhonoopq)rstuttsuvvvtttrqqqsrrs9;::;:tuwxxwwyxy<==>(???>???>???@@??@@@ABBCBA@@@??@@AAABBCBCCB CDEEFFEFEEEFGHIJIH IJKNSXYXTNJIHJLNPPPLJIIIHHIIHHHGFGFGFFFEFFEFFEDEDDCBBAAACB?>=>=<=<===<,;;;wwuususqqsrqpppqpppoononmmlljjjijkhhhiiijijhghggeggffeeedddcdcdcccdccdaa``_`_^_^^_^_^__`_a`aa```_^][Z[ZY[[\[ZWXXXYXVUUVTUTSSSTUWT{zXMZj]PZgrWNKPTGCFFB?@PKGKGLNQUSPLGKJPSOo|B{oia]SHAGOSGL]PRJLT^XcXgRRSRK>65[c9<=<92_[Z[YRP`854eadlZRR0:@<51447<8,[11/^WVWUUY/3B:<7=?BE@87IIA84204CB=77:9GA<8695:930<>A@:1..)',>9;+@GGIA@E:@()(B="+5:!*%!"A;@&%$$&'"#&(##$"96:76><<<>;7,.++'GCI/J%A:8<>>!"?2/7/91045F>93)'$&&'''/9:<;7687-/0,,0-(+/&(,-/,')-++&(-,,,+(**)(#! "(.-,)*-)$'+,02-$&*/-(-/,+/*+,*..,+-,*-))+*(('$##%(*+*+.0.-+)*.)(('),)).-//20-(8P-101%<9;##.6548174212.#)?82128y|eB(9.8CCLG)?_9D] 99CkD2,AV/L9/8I5>9DcAYriopv`U>ua?BYFJ<5//<=MCI_3JyA#"$)(,&*.6@6625(1/23;C***N;$1GHJ;3;8FNV4[OC:<>GNX^\XQd56523139%,ZRZ1`RRX267.17865444e[QMMV153;95774.07::8887664203468899645=16449P/^YYSW58/((+++--+,,---,,+**+(&&&%$$!%)! &%#,& #*,+#&*")(&& "&)('*()('&%$%&$"#""%')'#" /4621.-'#(4$20,..-+(%#$'#%,,,-&! #*,,,-,*+/-*#25965567572+221.,)#!#'(&(('$&&((*-.,(+,*)1&%#69:)2/,*/97//33/*BEMPKVTGSRMF9"#$!!""! &%  !! $,24$)1259@DDHMMQUP@<6/962%%07(')KX]]^^]ZWO(& #"&c#(*+L$ /3!DD#" !  #'0533013479*2(%1K\9"1@CSE/(6:9=BJH8M& + + qnB 1XPD9/"+'<9978$)&&1=!'85326]320/002304-(!!# L ! !!$)-&025113$# !7&%$#)'%&%$""#$&&(.24110.0/:,+)''()*)+,-.0343688767789<;::978:8864235887=AB@CGKHGFEG@;<;9:9:9427=DMVaku~BBB@<75200b[XUTV\agiijmpoEEX};ӀȿNCFQMEOU[IECGK>;<><:9F>;B?CFJPOJGBGGOQKai7ka^YSND;0))KU47873+TRNPRPKV2/+UUW\OHI*01.*'+,,0.&M**(PIKNMMR+*714045158:488*-.1('%""()+()"!03,(/.,..*&%21+'%$%'44.)),+5/**)-*-,''+$+1.+..)()00*+)""#(/*-0--+*)//0')&&!.114-01)-)""#&"$#$! -+0+"  '!!  @! "2# !$"$ "DH>*%!'(.'&:"*5!!)<' + 6#/&)%%>,6HAE@D61&H7*,?,,&##$#1D;12>EN/)J&D*($&"*;%:K(F;68<4+ 622H<9$ " !)   +  #$)/(".7<2-'.232./*!!$* )-/&(&1:=&B6-)**38>FED>J'&%#% 94; ?77=#%& "&'$##$%H@:56>"&"'&#%#!!###%'&$$"" "#$% &&&$""'!##"%3><=78!",    +   +    +  +   !#&,./94+42.&}~}~}~ +}~~~}}~~}}~}|{||}  +ր}|}~~~}|{|}|}~}~}~}~}~~}|}|||}}}~}|}|}|}|}}}|}|}}}||}~}~}|||}}~}~}}~}}}~}~~~~~}}~~~~~~ ~~~}}~~}~}|}~}~}}~}~}~}~}~}}~~}}}~}~}~}~}~}~}~}}~} Ũʺ²犤aȐƃ򈅊涳   +  ;                       +          C        + +  '  <߀̈́腓ž􇆌ϺFû򃎖¾ӱG6543101223K223235556678;:765432322211446434313!"#"! ' !"##$$$"""! "#$%%%$$%%$###%'''('%$$""!#$&+2664,%"!! !!!"%'))%$"  ! )000.//...-./..+-.-,...,,.-,-++,,-,,-.-,+* ))()(&'')*+*))()((('%&%%%&'('()))*)*))()((&&''%&%&&%$%%%$$###""!!""!""!"#!!#D鈐žϦ얥μᯩĭȯ勌㇜џ𺆄˨޽ἳݿƽòǮεŷـߟ쀇źׄɾÀĸʷ¿űо܀ӕ挅ϳ߯ړ˾ɹ᧔ۭܽԛĮԧӸƾݩ͹é텎삎рϷ󉚡8Ɐı//6).1& >E:@DGB>?=@<0.*/379=@BEE@=7124599:BJEDIKIIFF?547673(0.-8BIPSD(OXICNRUU[e6icfQD?:@FD9899-*-0XehjkjijfLU0&,,//+5;8:>4 -.88Y9348756205;::384,K+U`3432145I+//3-)*9 ""#$;=&&.<<48478;7F7BD48Leib?HTi`OA2=KHGIU\5@7/ +^///0/0//0/0/0/0///./]//^///_`/^/ 0`__^_/_//^/__`000^/__^_/^_/^^_^__/0_/_`/+]/_///__^__`^^^///0/0__^///]/0//0^_//___^/^/#__///0^_/0^/0__0^/_^//_^/_/_///_]/./^0/ -.^^_^^///./n_/^__/^`^//].//]^^0///.//^/]/^///^0/^/^\..]./]_^././/.//^^/.//^^^]^__]]]___^.-.\]...\..]...]]../.^^^.\\]]../]^].\]^]/...]^\.\\\.]^]\]]\\\]]\\]]\\]\\].-\\\.\]]/[\[\[[ZZ\\\][\[[\\[-[\\[[\[\[.\[[Z[Z[ ZZ[Z[\[[Z\\\[Z[[Z[\[\[Z[[ZZ[Z[[[ZZZ[\Z[Z[[[ZZ[YZZZ[ +ZZZ[ZZ[ZZ[Z[\[[ZZ[ \[Z\[Z[ZZ[Z[%Z[[ZYYZZ[[ZZZ[[\[\\\[[ZZZ[\[\\[\Z[Z[Z[ZZ\\ZZ[[[ZZZ[][ +Z[\[[[\[[\[Z[[Z[[[\\Z[[[\\\]Z[[\[]\\\]\\\[[\[\]\\]]\]\]\\]^]]^]\]\\]\\\.^^]]^]]^_^]]]^`^^]]__`__^___^^^//]^]_0`_/_^^_^^/]^]_0`_/_^^`_`_^`_`0/0`00`b0101112101101011121211233322232323334 3334434354 5445545554454545655665556566676 7776765777878887788989899989:9899:;:;:::;<;<=<=<=>==>=>??>>???>?@??>??@?@A@AA@ABBBABABCBCBCBCCDCCDDDEDDEEDDEDEFTEF@./BGC5/1B@?>AE'65471D3(B)>5khj;>;57479AAK*+AEA;>?B>623323212112411/250022212004876867533CR>.*)*))&D?@JKN*%()**,+**))(*+0/-,+++)+*+123.2/-,,+./2:=7867:8;@ABABD=<8;>CDA>=879;DKKP+)*NN'&()')MKKFN(N()+Y@;5212354577699:;<=:;EGJJIJLNOOOMJLKLMQPOLMENNNOPSW[^]\Z[WSOMHFFFHD?JGGQV_jvILPPNMLJGEulggjkkllpu|mqmppoooqpqppqrtuusstvvwvvutrrqrttt;t<;<;vxyyw;x{>??>??@???>>@?AA@@??AABBCBBAA@?>??@AABBCBCCCBBBCDEEFFGFFGFGHHHIIIKKLJJIHHIHIJKLOTXZYSNIIHJMOQPOLJJJIHIIIHIHGHHGHG)FFFGFFGGFFDDDCDCCCBACAABCDCCA@@@?>?>?===>=<=>>=<<;<wvtsqrrqpqqppopnono"lklkkkjjjihjijiiijikihghghffghedededdccbcceddccbaaa_`_^^_^^``a`aa``a__]]\][[[\]]\[[[ZZXYXYYXXXWXVVUVUUTUTTSTWY}\QLKIa]U`X\eKQJHGBIHJ?uELN_YNQVUSHLPWVOWTlzp\XORFytvv?@U`KCFWVQY`OUSY^SC=>@<87;=3^`789mcUR[563`Z32QS2:>>76458DQ6VY0203-),.++9B?<79HJ966<89>=9II\[UDILA/3;;82E%056=SG62/1:4-:;466./,19IHGKHILC>MPWXVRSLPKF9/15=>>'A@@.-MOZTLOL:;,6; #$.'#$CA#+'$&)(%%)($$%$!:968:=>;=<5-.)'E47?2H#=846=B!!:-/6320/3():5-(%%%&/,*-56<>4577,.-+*/.'.0*.2440,++-1,//,,**((**#!#"%++,&&*%-24/&).1/+,.)*.+,.+1.,.-**.)*-+(*)'$$%)*))+,.-,+))-((''(,)'-,..012;EHL,16% :#3999::;0.21.�<2-18LwiGUJ393FhYbQB7C4"3=RAM8U=L!aV9,Des0Sahjd9|jTh;4\\o_mQLjN@@7A54+,++J559#4-/12>&JNQG.&5AB:+:r3AJXaRH=7@EELQS[\WX\]1/05*24#(JS-ZRKM`4635:6467415^UNNW248;7663/0568:19864530.24666999689;9:>KS3C݊dC> jX (X eLE=0'*<<:89: (&%($, *20^[^57511,10301))$ %!" "!!   !/1")2/0687$&"! " !###%%%"&%%%('&''%%%',00311//1-23;--)('*-,)*,,,0.//2423889766789:9879898;87445467779@@>=;979jc[VZ_cdhilpsqq^+ sʄǀÿVKEC@TOGTNX]BGA@>9@@D;m>@ASPGKPQPIKOTSOSN]kkbQPGMBnkmj:6EP?8E@CG@4-,0./16:/VU///][RQW0/*RP.-HG+01/+)),-8D,HN)**-)')+*(/341.2:;---42GoJ))+(($#&,62'1*$(7;3+/39K0+'(33*(*155G=EDA147* )*((;!%%):1(&%#'%!-.*+(! #&30.10/2/,9:=::994:62'!",)+5<>6451%!##""# " ) !& *     %-,2! "%$#"#'B?-7, % +9-54('"%#/"+) 4?6'->I01588"GC2>1:?:F0/:*&$GB5=?<7713'QE1<4</A(#6'''/;+HW<7D6-!*:B/!9:/  + +!$&'6'-/$ 6,(&+13444764(&%+,-%')$$!/9?G;4)$*00379BDBAA^A!!!%/6=710@#%#$(%$%%%$%B<79@$%&'%$"!!#%%#$" "#$$$''&%%&%!&%"""     + +     L +   +  "!31.#795:76."  + +}}}~~~}~}~}~}~}}~}|{|||}|΀  +ڀ~}|} ~}~~}}||{{{|}|}~~~}}~}~}~~~}~}~ }|}|}|}}|}|}|}||}}}| }}}||}}||}|}|}|}|}~}~}|}}~}~}~}}~}~~~}~~~~~~~}~~~~~~~}~}~}~}~}~}~}~}}~~}}~}~}~}~}~}~}~}~} 逊ġош鴣ι[þƻǰ5     +                          -       /                5~힬邶ꍑ򍔱ĿЫĿιQź̿Ʒ򂌕ŽZ<7644211223345445688::9864433322224343 "#Q   !"##$%%$$#!!#$%%&&%%&'&%#%&'((('%$$$""#$##$'+2763,&"! !! "#&)*)&#"     /0 /0.-...-..-,-,*,---..-,,,+)*)***+*)((***+*)((('&&''&$'((()*))((()))()('&&&%&&%&'&&%%%$$##$#"""! !""" ""!Bj˴̽ʢ씺ѶռűԵβ끸;¶һݶـϾĽɸʱпЁԆǶûɀ¹Żкʾþ񍤭¿͹َ̀˅Ȋ衚̶腦ȃ֕Ԕ󧣉㶅ϳ˾õ끊㶈ҲӾ؁遃׬ħ߀΄ˀʿµ􏣛B򀆎ʫʿ1.,+J#<>:><=>CC;6&()*-5;>DBBBA?;98656:848::?GIGGBD@98;96-/1/&4FIN)B1,,L,DRWX.6972hXEAEJNN33@J5*'2"Dbgkgddc/21,012-)5998>-(,/4Y5147558538;99i9hZDK*.2331141A*,++&$+8-6 .>%.<'J/519986:;A8BMQHLddLELYhXQJ==>=>=>>>?@A@@@ABAABAABCBBCCCBBCCDDDCCDDCDEDEEEFEDEFEFFFEF\35EB553<>=;>@B2614^[/*R$;5cgm59?9`=<:>AI*+8GD=@>>:;524313442123313100264/.2342677564664456A@@=8=@EFFB;88:852223456887989<>?=Z;@IKKIIILNNNLKJLMLNMOPPPNLMNMKLNRZ``[Y\b\XPNLJIJILLADILQWbjx~BGLMOPONL{vpoooqstt]Mkupop"onppqpqprqrttstustuwwyxwvtsqrrsut;<xyxz=y=>=>???@A@?A@ +AABCCBCBA?@AAABC DDCBBDDEFGHGFGHIKLLLKI'JIIJKMPTYYYTNJJGGHHIIJKNPRQOLJIIIHIIIJIHGGHHHGGGFFEGGGHGFEEDDCCCBCBCCDDDCBA@?@@???>===<>==><;<<;;;tsstsrsrqqrqpoqponmlkklkjjiklhijkijiihiihgfigfddeeeddededcaba`_`__`aacba`__^]]\]\\[[ZZYYXXXWXYXWVTSUYSrowWQRMQPYb`m_QLCHIHHA>CKN<=HQWWPQSSQNNMLNchtuaLTQJBsohiDYTBBN\_ONZRU_[ZRF;9<7464;@:47;:6eXPPTa22\PX0,-EIE=O;-3501-2@?;@FF=79>EF742b`147b0145221=D@95219FO8OT-DUPVUF=/0573TH.,0=RQA6559<C;16<4--,.'"940,+'('+))-66;>7788*-*)*,*%-0,/..771+*590/0---*)1.%!"#%#%(&&$)*# %*-1-,01..,,,)&)(),(/,*.0*+-)***)+*('&')+,+,+.,+)'+.&''((*'%*+--/006:AK)3:#2, 4&7==:=<80+85+%'/821387xmEgQ.0?4"2E\FI=P>,I6GS)3 vchkHC..FJ8Ux|]I(1773\lvL1snK;=RkLN[Jx\6zm[\qL'4DVlA.0>Uf[CSRZA9<:52+adT7C !#%'$(/23/]ZUNKLKT.ZXWWV,F1-125MVSN?33544554,+2E)/,)SQB'-9JKASRCS0+*##!/UWG8;GTUTVRLNSOOF4+179><@71%0(-,((Q@7=982.2=((LQO= ,?A=-9:AIZ\PKD>FNHLOPNNXfcX\./26&.7#EO+-TMGH'46698763542ZOILS]28:8651-/*'#5A8:86420/122458775:)8,2N*342-+22/A8464-*1=#,*,-./..-...*(&%%"""( (06.!(4)(## -320/,  "$%&()&$#!#&$# %:@=8+,/'3%3.,*&)()*))!#)**,.,'(.*)*.../))",13355452-)/33,.2.,'%$&"!!"#$(++(&''*.09.,*)#/0 &5:70/22396,201QRRL7LUWVVTQH8#'%$&&&'&%%"!)# +  "!  + %) #%49> $$#!FA.*,.-*!,BJSUPMH"""* $*)+N*N=$'"$"  A# );*1-434234;3:FE98.4@?@A?@AzneaabdehkoqZPmֻ\ i΀yPKJEGFPTP\PGD:@BBA97he``:?>-&"&(%D:"!")98+#$%%').2.+(*%%(*,;6556;?58?33,+.06=<<42'!&&-$+$%:MF51"")"&&$,"! ! $' %&#$ #! "%'*0##&%&&"B@,A4'&5()%3&K&*0J>BG..-5!0>>505>cWM-#J@-%(28*-7,I7EH:3@2 ).9'%%*5B:,64<$## :A9!" A=71.,+5;;;:9$.994*"!""#$$%)1/$ (+%37(667.$%2;@ !"$&.5.(*"##&&%%$%%#>747=D#&&%## !!#%$#! " $&%&#%*!"!. +   +  +  +  +  +  + +  + + +.12.,699:73*}}~~~}~}}~~}~}~}~}~}|}{{{|||}|}||~Ԁ}|} ~~}}||{{{|{|}|}~}~}~}~}~Á~}|}|}|}}|||}||}}}|}|}|}~}|}|}~}~}|}~}~}}~}~~~}~}~~}}~}}~~~~~~~~~~~}~}~}~}~}~}~}~}~}}~}}~~}~}~}~}~~}~}~}~}~} ≌ȳϻ򒎇׈ȷ\󀆉źǔ戈մ2                               '                     !     +   $ +    +!L瘮Ї˜݄՚ٽ˾[˾ތa?:875553222333454544556557799:9765433235660!"$#$!!  !!"#$$$%%%#""##%'''&&&'&%$$%(+''%%$$#"$##%'-4883-&#! ! !"$'),*&#"    !!  L/-0.011000/-././.--,,,+,+*,..--../.-,-,+***+***+*))(***+,+,+++*)))()))(('&&'))()*)**)(((''&'''((&'&&&%$$##$#$##$#"#"""#"""$@ŪͽžԾͽݮůʯȸÿdz󅑦̟ܿóԷϾ؁ąɬꅇ큓Ⱥׇחι̼׀ʿŹưƺýž兖웏ƽ¬ր֜Ж㾲ِȕ̮𤢇ƺ𰥟򮈃Ȼٟۧ̌ߺެńʫǓǷȾ͕ϵɺډܮĵπ̈́츌ߊ􆃄߅സ˺A큇ڰՀ&.)-#C/$878<<:6674/-&.FJN'=@0,(.&+675;:511,NEK'#D84$('%9D%034670.,02//11*)6898;? *()Y+05426959<;9:797bN(*-.01133.>-/')((37)2! /8 9>;?F126;857==;BMOGQhmO?KVi`QMHDMLIMLYFqw>/ 0/00/0/00/0/0/00//0/0/0/ 0///0/0//00/000/00/0/0/0//0/0/0/0/^/0/0//00//0_0/00//00/0_///_/_/0/0/0//0//0//0`0/^0//0/_/0//0/0/._00/./0/0/0///0//0//000///./0///00/0/./0/00//_//0//^/_/]/`_/^/_/0^//^/./ ..^//^].^/./.]./^_^_.//^^^///]../^_`_^/<]..].///.^/.].//.]/.]^]/.]]..//.\]].\..[\\\.[.]]\\[-./.]]..-./.]. \.[\\.\]-[-[;\..\[..-\]\\[\\.-..\[..---]..-Y\-][Z[ZZ[[-Z[\[\\--Z.--\[\[\[.[--Z[\^[\[\[[[Z-ZZ[Z[[\\\]\Z[[[ZZZ\[Z[Z[Z[Z[\[ Z[ZZ[Z[\[[[Z[Z[ZZ[[[\Z\\\[[\[Z[\[\[\\[ZZZ[[[\[\\\[\[]\\[[[Z\]]\\[[Z\ +[\\\[[]\\]\[\\]]^]]\]\\]\\]\]\\]]\]\^]\\_]]\]]_]]\]^^]^]_]^ ]^_^^///_^^__`^0__^_^__^/]_^_```/ 0//00/0//_```/!0//00/0/0_/0``_``a``1000`010`0b110100121212121211212333232323443434333434343454545655656556665556667676767878978798889899::999::9:99::;:;:;;;<;<;;<<<=<=<=<<<>=>==>>=>? >?@@???@?@@?@ A@@AAA@BA@AB CBBCBCCBBCDCCDCCDDDEEDEEFEDFEFGM"BC<3/;<9:9A>0924C43*T.A97<;:=>le:89=FM*+4GG=79;;<8432221233101332/00311124224654332335567:H;$''=:?EJG@EM$((%&(%%&)+*,.+,+)-.1.-/+(())')))*-4:9423147:;<===?A?@>@EHFKPW**,,.-)+)))*O()*,+..B=52124476988779<=??;>FKKJIJKJMNLMOMLLLNNNRSRRPPOJJNPV\kZWX]d`aYUQOMLLPMBCHGIJTZdjr??>?@@?@?@@?@AAA@BCBDBB@??@@ABBBCCDCBCDDFGHHGGGHHIIJKLLJIIJIKLMQVZ[XSNJIHIJJMOQSRNKKIJJIJI HHIGHHHGGGHGHGGHGFFDDCDDDBCDEEEDCAAA@A@@@???>=>=<=<<<==<;;vv:;::ssrqsrqpqqpqpopoonnmklmlkkkjkkjkjmjijihhiihgggfgfffeede%ddccd`bab``aab``_`bbbccbcccbb`__^]\[\]^\]]ZZZ[ZZYXWYYWWWVUVWVVVUTUV[Zejd\Vd`W`lhZudHIFFIGHBE^YQ@;EMPMOSOINU[_SMahgjuj]LX[H{m`mk>RZK]f`^QIXXY\X`dC=6/0X0@;CJgB74a]TNRQV_^Z_5DB@AG48BLUbLB8:4;LSSVPVG9?AAEC:=@<0Taa\q2365/537?;989@QV8139EVlPCFWGHA?SX8RM',:41456,DL\`V+2+7C@=@BGD?6,5:;=GE8**1307A>CHJB5+04:4;9W9?/Bh7@2,@>>'+8D=<&$#&IE&/*&(%(('*)"?=::@AEH>8=?@=204GF779@B+#61663/1;=79=1)(+1-$:61**&''++),69D?6:87,11)*.,%*/+-*,4-,.&*0),641*&/2($%$''$%,/*$&)$!%)-/0-,163/-.-),)'(-,0++-.)*-**-.**+('&(+,+,+-1,)'&(,&'&&&+&',*+-..,2=G()0)5)(:,):A97>:63,7,##*9:456;Bbi>6X?8@2$6@JFMTBO&DDP<-@)6Bj:Qf:BL%5A?6XXbXC043.TTYG>9SGHJS\Y00`_VTN=5ERLO[=R4+*.0.QX[B5CN]a[NRNNXVUWMA.6:<>?< 6,,-+'J)0M3;&7.0:+/-)K@$"7?<488ENYWMLEDIHGAE?MJS3_ZZ^134?H%%B&(*,I@47343543552XNJJPQX4734321/*2:Z&78:6310234536789>;H24,P00/-/1.LN,O'**J6#",,-,,--//-..,'%&##!"%+/51-2%!"%07/$"!"#!#%&&###" $" %7 +.4',!31,+''&)**,&!'('(*,('.+'-.++,++"-41465131+-L24/*-,+,+(),-!"$)))%&&+.-/+*%&!0.2!/760,.4389%)128LTTI2LRVVTZXOE&$+*&&()'$$!!&   "!$!  #& ($%!!""&' i #(*)*(+)D-   +$ *,.3=./133/0767=GG=@W`E4?GWM?<:6A@;@@NEw,T =(T5Y p^VLE9/(363//52#*#"1$350.13266`V2///23,(!"   !"$(/#+.048817< #" ""!!!$$##%#$$%($$%'''('(),.+/262,-(()-*+--../.,/333436986665656535787::;:9;:988764468=DEEFJNMMIYHEB?=8><6;@@BAEHOSY/17<@AFGwrnmkjjkmo{R|_3N)Ҁf[UKRSLWbZN_N?@==B@@<:OLI<6?GKIKMLGGOTUHE\]UTbYQFJQ?kb]`^6HN?FQLG=8DDADFGN2/,((G'51;=S8.-RQIHOQSVSOS.:886?,0=90)4=AN<2,-)0>BFIGOA6;>=@<2471'EQTL_+-/-).+/200137DJ,$&*5AR<36J9832GF0GB'#" !08CGC!& (1-')*.+($'*+,23*"&,(##+(,010* "$%*1841.!7!) 0Q))& !&*)  #'+%!$" )+ "'( " !!  !   "',%"#)%"  9=$!9*$*(-/1-0(", '@ 4A"/8/-( 7333/809*(,;%a4&#$*.(./.9?',7'8%*#&4(+)6:::B@>?3%&' *!&&#$/8A@780.230-0.42;&EB?B"#$,'$*"#!##%%#&%"<413;9<$%"#""!!)  "%$! ##"$"#$%%'#' ". *+/& +        + + +  +   +  + +  '13,,/789>:1$ + +}}~~~}~}}~~~}}~}}}~~}~}~}|}{|}||~ހˀ  + ܀~}|}~~~}}|{|}|}~}~}~}~~}|}|}|}|}|}|}|}|}|}~}~}|}~~}~}}~}~~} +~}}}~~~~}}~}~~}}~}~~~~~ ~~~}~~}~}~}~}~}~}~}~~}}}~}~}~}~}}~}~}~}~}~}}~~~}~}}~}~~~}~}~}~}~}~} ؏ļ坮싖ZҾ߄۾ɿ½T"             +                                            ++ +    +8v咧艐ӆſ΢־ˬžrοĵΌI:98987654332234445635554568879:97765532666-!#%$$""! ! !"###%$$%$#""##%''('''(&'))(''&&%%$$$#$%(/6994,&#"! !#%(*+*&""!     !!   10010/-/-.-',,++,+-/.-,--..,+,,+,**+*+)**)**+,,-,,,+*)(()))(''('&%'())**+**+*)*)))*)(' ())('''&%$#$##$"###""!"<ڊ˻Ǧijɜʚ̔ѿظ̱įӳ¾ہ샍񁖋ºǶȸęݵء̑假ʴˌʵ⏇ǵ̀ҺԺоżƾĺͻаԭ޴Ҝ뜴ݢڠ͇٪ꦱҴޕֱ鞞˘Ώȯ󹛙֪Ιʃ聐ҵՀӁ瀉ľӀ߬̾ɻη񉘙FʷԀ&(-?;!P$.8A@@>?=<93&%'+2;:<99<;<>>AB=8;A@@BC@>;8:;@C?=:11/330-).>DHJ$+-)*009996,1/)&" #%$>3,1#$*+!5/@QD2I.248;87<=BANN@KokS=>>===>>=>?>>>???>??@?@A BBBABBBCBBCCBCDDCDCDDDECDEDDEEEFFEFXGb =A:32DA@>>BA/7346`*+T?T??>4=;;li==:=CG*2/BK=:89=>9534212543102203212134113545465213446f5EC,!'M>?DC=?AF$GGFDHJDKNOOO),./-,Q)PO(-o,,-NB65445577:::9:9<>A@<>CGJLJIIJLMMOOOMNMMMNQQPQRQRNKJNRWXTTY]^_`_ZYWVQNOKMLIGIKQW_ckq>==<>>?@?@@?A$@ABCCDCB@@A@?AAABBCCDEEDCCDEFGHHHIHGH IIJKKLKKJIIJ LLNSY\\YTNKJ KKLNPRSQOKJIJHIIHHHGHHIHHHIHHHGGFFFDCCDEFFFECBAA@@@AA>?>?>???>??>>?>>>=Q<<;;;::9:ut9ssr88qqpqpopnopnmmlllkkkllmkkklkjjiijiigggffgfgfggffefdefffeedecbcbcba`aabbcddcdbcbaa_^^^]^]\\\[\\[[ZYYXXXYXXXWWWVVVWWVX[Pk[^bMNib[X\aMVKMSMMMJJIQZMHHMXVVQHFGJMKMJLQ[]WOEMfZOR__LDZdIvf\dHAC?DSZPLJQ\SYXQT[VJ?9I=9?IL@L9732^THIHLQWX08DIQIA9:ADMDDFZVDFGDJSQFKSLPWPOXTIKEGHOOgaEpD;f67femd8>mqBO?>69?135;59EDIXRLVJ-'0//-*+'*++FH-/,1ALA4225;>??65@A;=B8:510079=;;>:,'&/9:>GPL93/,++'08.=6>CJ_5U$!%(14*0B#!##CJ2-(-,+)),)"@:732.01?EBBEG=:1>?BJ=E@-#<745556:87762&)-:+&G7,*+&#*+,*,28?.EU28ABM92",Tf427otWHI)0+PQHZR+3.Qg~L9ef2*emA>\9]VR4+2CcWHOe[qW:995ZU00WWb8/^O.#)+VVXWYYZZZ[\ZQOLOTUTSZ\\KVVOTZ_\_ab\VQPOQWZTM\0a``]\ZXWT3:QMSZP:.20059PSX*.97389ENTTNJGJKDFDD@MMQ[ZUZZ_148&*,+$"%')'&#$%   "!    + !!!%+ !&***(*'%< "   *'9F;+<+/134/.58=@=@<;<=C@h)&#.4 +, +C$-XX\Ii_[XB:957CGB=<@H@C@<>HC92-93.29>4C1-++RKHJJKHLO*2;@C>70077B789HG5798>EC=COLNWPNXUJG?@AEDUT>e<2V-0[[bZ16`f=I71((-$&'+#'558DB>E=$#!37#'$&16.#""#%%%'##,,)*-%($#&%&')%%'& %$%+12%  #)6K%@'!"'&+#!'*'%'*%% $)+1&/, ' V !#(+%&#&'# "1?%><05-$)+1 !/$&!:44(')$9@" #;C0*&4827'&$7@FD(#9>W@BCA?>?@@::89=>=:>==37?7;AA<@CFE?:98;AA84?!CBB@>><;5 //4;3!"%028#+39<:968@BB@97++"& + "$.7<<74134/1/1-769A@>@@E$%(*-3%%#"&&$&&"2-//33!&6##""#$ #&" ""#$"#$#%%6 73! *$          + + + +   + o    +  +!)63 *3556>A90! +}}~}}~}~}~}~}~}|}{|}||}}|}~~}}|{|}|}~}~}~}}~}~}~~Á}|}|}|}|}|}}|}}||}|}|}|}~}~}|}~~}~}}~}~~}}}~~~~~~~~}~ +}}}~~}~~~~~~ }}~~}}}~~~~}~}~}~}~}~}}~}~}~~~}~}~}}~~}}~}~}~}~} ɴп鎘gٻߩ̃솇ؿȿI"       +                                                    %  /      I゜ύ©Âÿžƻ튑׾Eļ󐻍ﻱԃS89899:;;8645211445657678:;98876532 4 "#$%$#"!!! !!"#$%$%%%#$&((('''(''%&'(***)(''%$$%(08:94,&"!!"##""$&),+(%#!   !!! !!!  !  11210/./. +---,---.0-,1.--,+-,,***)*+++***+-,,,++,*)*+*)()))('''&%'()***+*))(()*)( ''%%%$$$%%%$$#$$#$$"""!!EsĸƺѪ⇉˼Ҹïڲؼؤ폅ށܲķŽ¼ͽöӀ跋Ӵ̃ӧꆢ䂄ٹ½ҋ̵Ղ΀м¸Ǿƻ㑴¹»ۣ鼜؇󚈌ė󠽸㾙ѽȋᯐʂǺ奁킀󀅈ۣ뾳ۼӳݸç¨ـׂǀϳ;̷¾ሔG׀%,5+508 /@>=>;<:;7/''+?@4;;<><66=D=<AD?956=C?9;33+.4420/2?,,***)+ *699:4.1-"!#$%%90?9+')5%)*+.1002/*O,,L%+0/,)8:8>?=> +??>>?>>>?>?@???@AAA@A @BAAABCCBBCBCCDCDCDDEDECCDDDEDEDEFFEFEEFFEGFU5@902*%@9?CF'5215VO,+E1E>5l:9>87>68<@D(/*>PA;538;;6100123311320135123464434651242256556646>E:%:'/E?EA?>BJ(*+-,.,+.-,-.--0201.,+))-,,,+,,)(+52//021132589BCCDEDABFIKI&&KCKLNNLLR)PUSSQMOO')PRQXZG>876554779::9::=>B?>==BHLKJKKMLJLMKNRPMMMPOQQSSRSOMMPVWSfRUX\`dc``_]ZVTPWVLJJLOSXY^cktIUwfZvwqqqrrqrsrqqqprqrrrttusrtvuxwxyxyzzxxvutuv;<<=>>=>===<=|???@???@?@@A@AAA@ABABDDCCA@AABCDEDFGGHHI@HHJIIKJJKMLMKKJJKJKJKLOTZ]\ZTMKJJKLKKKLNRSTPNMKJKKJJKJIIIJIHHIIJIJJHIJIHFFEEEDDEDEEFFFEDBABAB@??>?>>>?=>=<=;O::utttu:99qqprrqrpnonmmlmllmllmkkmjjjkkkiiiggghfgffgghggeeffegffeeedeecdca`aaacbcdcdccb`___]]^___^`_^^^]][[]\\Z[YXWXWWVVWVVVX\^^z_ZXbQR^`_aQV]LLKQOLJNDFAReg\[WNIDCEMVVPIQPKONNILOI_LPWZOq7HXL=_^iC;9DPWWQHPLNP]_WLNQNANmf^MWHYUIVUELCDEF3.2ovww?wvED<91)*PO+3557?ASQQW8.+683-'((,0.&)//YV.KRB61/167:-1LH9;?463079;;956:7*&(/69?GPE/1/'&%#'21?67.24797),12.26332-+(..*.00-=?3--)%)),(',,-+*)%"%+10-(&+//+-/0/2.-.0/1,*-,*+***+))+*%$%%++,+,,0-+)&*+%('%',&#(',-/03AF3=2)=8A>8%+F;59;4.(+.&'-&&+6;<07A&4<=4.18<.)%,.&7=HUZIISTRRT\\PL9)00*%#&)())($&('e  + + !"    w*.!"!%.$#(*.Q((HFEC !"#3$ 7,$*:D:.>+-2/4-,39A@HI@6\TB7>DXWRBAGKE=:>A7Y灃 $4> %3Bv0`EXU~R?.) 80156$#"$?2-"23.Y3/31.1*.+01&,"   !  "!$.3&'!31732223"!   "#$'%#$#$())()'&&()++-*00220/4465541220018;1-)*,,)(+*+,.--/11313335575556764333479899;:;:;::;8768>?==AEFKMNLLLIIHHCDHGIIHFCDEGLNU^E|Owtv~~}~il?߄1Ʉˀſ։YSOVIKVWWYINPCDDHFCFI?A=JYXPQPKGB<@FNRLGLMHGCA>EEDUEIMSEb1>NH9]\_<639AHED>H>;:DD>77;9.,21(39E977;32.HEHNQTTPK05)0421335;;>FE@2;EMfVN?+(.dnmk9lj>:.+)88#$$(03DA@H(""#&KK%79+" !!$ 53&)-"% %&('&""%% "',($$'"$)+%%!  %$&"#' $"$%##"61%" !!' "! )+$"("#''#2B-;>/!A"!*%I+<0@#$-;('53L6,+%# 75=)DF0,@0!&!(-H9B7# 5CG5#!8?)-:&*<' ;*#" %&!8;#B<4<6%! @BB<:::<=A&+'&1>;8"!%#&' &'%%$ 3+)+001!' #"#!""921""! ! "#!"$$%!5 (2  &)2 +     +   + b    +".5+.7747648<:964((:>)*1?=6>899:89;:8:;:5:@@96;==>>==>=>=>>?>?>?@???@AA@ABAAACABCCDCBDDECDEDEFFFEGFFGFGGGFGG>];p0/'=;<>@AI41/4W-.-L6D948;9?8::979=DL))4MG=536:82003201121212454323457541221366456544368;C9'?AFK(*,+1-012...--0010..00/,))**,-0-*+0--1/12445569;98;>;==>BACDDECCDIJ'')J)*OMJKNKJJIJIMONPP*QTYU@=655564479;99:9=>???>;??=>=>>===>?>?@ABBCEDDB@ACCDDEFFHJIJJKLLKMMMLLKJKKKJLNOTZ]]ZTNLKLKL PPSTSQNMLKJ HIJIJIJIIJ +KKKJIHHGEFE DEFGGGFECCABA@@AA@@?@?>?>=,<<;;:;:;uv:tt:99:rqrrqqopnnmlmmnnmmlmlllkikkjiihghhgghgghhgffgfghgeefdceccbcbccddde dddbba_`__^_^___^ ]]\\[[Z[ZZZYYXWWX[\Tr}}i^YYX]\YVQMRMPLIHMOdMBHGPVVjyz]NFCJWaUJGRIDGP[a`XOHLQPXST@l=BHCu[hipnj8FJLZH@QZ[^[ZWWTIDGI@QNGJGEQXMF;ZMKPR\/.3D?GJ?@>:<=EABGQe?D>454>?CD|BC52NKVTP+.0,7;901,6A>>?:559/##$198;CEB,&"$$%).824-?6HON@325/0.$&);90=%IFB=E*('-+%%&-,#!=2039D?=@804=<8.?=2/2#>-%C;:8598755=><6<36EK>235/861-)&'9<=65;:5/01421.(/31-.013.,%*-+0323420-.,'+))0/+*')**$#*((,+($+0.+,,-.2/.0//2-,..*,+***)'*)%#&&+,,**-.,*)&)+#'&%(,$#+(+,-,/8A35+E325:=)/M9/376.$ #)0*#(35698SpR8XNOc2C5-fJCkBMEEG/2CM6>a<$H9SAQ`Q7L0f\]@?]J6ILU5/9K/3?5Hp7LFLMxnK@7[]CJ45MfAVRE2451169:-]fb]c3.UbX^DJFEMXB6=DWZ_I=JYOA:AH0^^ā 9 ?+01  MPUa + % b.'655445:'"!$=-$5/,15170/10--/24,&  !!  !! P #%*3&*.13244467   ""! !"%$"#&$$$'*'))(),+-110131100112343333:7-/,+)*))*,--++,-1Y2411454445654322147988:::;;<:;;99:>A<<<>ADJMOORQPNNWSONKKJGGHGGHKQ[n~Nlkov|}ZV1 $G ܛu_VTSSZTUOIHLHLDBDGIVB=@ISLEEKF@@FLLIEDAEGHMGF6`79>;fT]`gd_19?4/181@;6997@F?92PIGLNV,+,;79A564022;8;>4`_;WTLN~IZ[ev{mJNc:71+-/97::f32&#:9@B? $ *.9?<82$ "%*I=9B/;2% #%"44*)) !!,'%&% !" $&#(084*! "(&#$!%""$$%$#%&#!"!"(,   $* !)! *"$!1A2#7/0A 1+$G,&<$,%"!&#:$& 9(09/%1@73"(>/!+*-&"#* &=&(*T)EE/0%99(+'8!30  #&=DCAE# 7=7?'3-1,!%%##""!  A>989:<528;:;99<<@A=AA>;=BC72CAA;=B?@C#%!0&15*7212$ ,/+.2769>A;88;:1' &&&# .3/& %56431002/1352246;=:88;?49(&36?B6<$)+&)*'&$"!2*&'k-3$$###!$"!!')7!"#"! ! !"!!#"$*="! .(  + (. +    + # +     E   + +&.2366537@FB<1 }~}~}~}~}~}~}|}|{{|}|}|퀂}}|}}}|}~~~}}|}|}~~~}~~}~}~}~ԁ~}|}|}|} ||}}}~}}|}}|}|}|}|}|}|}~}~}|}}~~}}~} ~}}~~ ~ ~~~~}~ ~~}}}~~~~~~~~~}~}~~}~}~}~}~}~}~}~}~}~}~}~}~}~} ñв銏ʁ^ʓ끗ހҿ־ + +                                                         !    /   %     + +䅕ϩ刅¾ťFĽȳӆ877667::<=>=<:763234667665765889:<:755@ !#$$%$$""! !"$$&&'('%%$$&('((()('&&&'))*+++*('&$$$%&'+3:<94+%#$$')+,*'%$" !  ! ! !!! ! !!  210/.--,.0/0020/...-,-,+**,+:,-.-,+*,-,,+))*)***)**)('(()))*+,+,,-,+,-+*)))('(()*((()))' &%$$$##$$$%$##""Bkyȵ򎥻ǗǸԲƥѮůþ깏ۇûįƱͭӽϸӀɭĭȭ®dzȸÊՄ̻ڀǮŶĺƯſŻŻ˙йȒ̺ݿ臾əԮ𨘭ŒبǴުڄ۷˗̞퉼ĈȮĨýѿñŀĿ󀢙熄䀉Ըǹſ鍚F۳򂂁ſ,,((/.2#*94476;;658-8@/$),8<7:57768>:998986866=@A?;96:")-0210177983/43,(%$&;(/  &*,/.)/1-*(G#!$+)*!*<>??=?$+-.01137554554:ijfdj6hd22484/1,70202,.F.!" !(K:+71H+GO00R332//064=>=>>>?@?@?@ABAABBABABBCCCBBCBBCCDDDCDEDEFEEFFGGFFGBJJonc*F?>=88>D)/.0V+.1U=D=?97<><;526<9@L+%+CI?7574351253112113347535440./0344456665526:8:?C0%GBDC@@GFJM(*),-.23/02/33353.),..//-./--,*,:3/-.27445:76662488:<<9<@<;<>BJ'(L)QPMNOKJIHFEFJKMOQSQRYYB<675775579:8899<=?@A>:7AIKJJLLKJKJIIIKOPQUSSTRQPQSQRVY[VQUUSUZaehiif_aidZSSUSY]]YX[`fvtvx~yf?nnopprtttuvvusrrsrtuwvxustvwxy{zxyvy{{z=wvw;;<>?@??>>=>?>>?@@?@2AAA@?@ABBBABBBCDEDCBA@@AAABCDEEFEFFFEEFGHIJJIHHJJJLMMMNLJJKL NPV\`^[VONLMLMRRUUTQOMKLLKKKLKKJKKJKJKKJJKKIHGGGFEDEEFFGIHHFDCBBCBBBA@@@A@? >>=>===<<;$:;::st:rrrqrrsrqoonnnmnmqnomlmlkkljkjihihihiigggeghiiiggghgeedccedcdc,deegffgfeecca``_a`__``aaa`___^]\\]\[\\\ZZZYYXWWY^^{lc\\]cb[YVUUUVVRKNNIL[oY[eUQaXZK|GMVcgqaFIGFNZeoj2^OSNKFGD=h4gm\LPc8;6l56=VQAKYC=96?BB?CZ]FE`{ubV_]fqBue053.[SMO07KXgp`;;@IS?,61(#+,MS./-0>ACGLC6/,01430/4772044:TA7D=QJ;4469:4)3JI:93.//@;7=B=547+%&(---/852*%!"&).+0-/&798575.*18 !$),,:;4A$7<<B;536540&F8.4%E,H<6./5;84/19BB8A=;I%B947022/0/-+27=<:8;5-*,,(,,&,700730//1*)0)/00-*50/-)&***+*-*&&,/#$,,..+&#*.-,/---..//--31/..,.***+)(*'$#&'--/+),-*)(&((#%$""&!$(%(()'',8^C28))66('9308:81'" &%%$ (11368SkQFZVIX0AmY];Q-R);7HC>kdCLI5DZIL?kBW4^dgE4V}7*3=k@?BC-*C0CY7faL?fBbaRp9V3",D=7020034-*1BR3,YX[_d301KO.TTP$ @,O,0310-./32123eZSLINPRPVZXRSVQMNNTVZYZYWS\0\F:N/ZZ^431T<%EFRSTSSJKNUSK1dTVTWQR*A>;;9<>?943-,TIEEC?F*)058766552142/02242/021122234:C'S-27.-0*DLS**+-...132010.;2OP+./..+,++-,-+)2!7:54 #"!!#"'(%'-=$287877986552..+&$"!! +;760/*$!#/&.0.+.,'($#''%&()(+++$)31232*$-2343441/10/+&')*,,+,/2.)(G)+--+)-.0/+&&##$ 607A$59717.>.',*$*4#)>A$$&*Z\ZXROS[\YQM9.0*)($%'**,(#* + +  !%#     +    #%'(()"$,UYWTT)QO(&$"! ;*$1.?BC)*I./-*)*/-5=BIGINKD29BPSQNAF]YH>BK,lmМ.D?+*  +M4_f07xLψc%<853/.58!! <1(415136840,*-2.27))#7 ! ""!! "&%'.0"1056246497c% !$ "!!"# !"""##!&$&'$&$###&*.10/02/0/..///1643435;;..-+)))(+-.,***+/121320-24434643g2233667::9;;<;<><;=?B?<=<;4W-]`[LOY031`237II:AM;5?I'G?:6.05;BHIA355?FI941,JQSS-2@LJ8::442/7999AQXAC]tjUSY[^e8ZR%('&NIKK,+=GZ]V557:D5!$!#@C#""&3459:1&"!'&+@5.?,4,!!$($#55''$ !)(!$&&! ! $'%'"#"&"$$"##! $*)''&%!!+$  '>*#''%7@3,97/;/P99#,1'!76(--%9,*&PE,4>66)4O"/+"00A.%:#9<6C"5%$678>AD# -,0 +96)"! !"B<9779::9;=?89>::;<@ADCDA@=A"?-#1!?@B$#!0 "+"")4+!+"&)/214;@;769;962)*/'+&#/1' + &1794/32106/*02<;;:7136=81#K==:?:7-*()&)+,&"!7.+*)&,!$%$#$$"! #"!!"!"! "!!"!!"!%-4"$%+4 !!-/ +& +    +;  +     L +   4:9:65;FFB<6  }~~|}~}~}~}~}}~}|{|}}|}|}|Ѐ  +|||}|}~~~}}|}|}~~}~}~}~ׁ~}}|}|}~}|}|}}}|}~}|}|}|}|}|}|}|}|}~}~}~}|}}~}~}}~~~~~~~~~~~ }~~~}~}~~~~}~~~}}~~~~~}~}~}~}~}}}~~~}~}~}~}~}~}~}~}~}~}~}~}~} ⺽֛ۉ󅗩[ߤκȹλ5                                 +            +         +       0ڃ􇗌؆ſ½񁁈+¼݄Ǻ߁IJ1N56564579<=??><;86334345676665677888:;;:9861   "$$$%$#""! !"$%&&'('&%%$&''()('&&()*,++*)('&%&'-4;?;5,&$%%$#$&(*+--*'#"!"! ! !" ! !"!!  !! %1100/./1//0/..00110/..-.-, ++,--,..-,+*+ +**)*+*))**),++,-,+,,--,,,+*+))())()))((&%&&&%%###""$$#$$$##%$#$G:Xƾů˰⭚ȽȹՀ¸ƥկ֔҆ϣ펯ͨ͡𿛶ſƷԧЀ牆ʿջ׽ȄêމǽŵĸĻëƽʴƿſȻɜIJ̪μİ곯Ț񋓪݇ǔˇ홳̏ɩԲۤ댃˹݌ȸ͔Ź̕񃑇ӴչĵüŻQϿǿ񖝘Ͻ¿鐗ž(&$%57 )-)-334736=B5=9''*+.699740.662889942*-98817<71/,,//2<>?<$&-463610-*.%*4/*,10B7#$" " '-+-1/-*'%+# $&%&G:!.:=>@@==>>>=>??>?@?@?@@A@@@A@A BBBCBBCBBCCCDCDDDEDEFDEEFGFFFGHGHGHbsqbQHD@>888>;>@>?A=BGJOKR**SRNNKKJGGFIHIJLMKNZVC<8866766689:;::<=@CCA<7?FIHILMMLKIIIFHJKOQRRTU@SUUZb`YTVVSRTW[_dijfgngc^Z]\_`\Z\_ab=ssx|@]Rvpnoqrrrtwxvut uwxwxwvvwxxyyzyx=z{||{{x<<<=?@?@?>?@AAA@@?ABCCBCDEEDCAA@AABBCDEFFFGFGFFGGHJ IIJJKKLMMNMLLKLLKLLNQW]a`\VPOOON OQTVVUQNMLKKLJKJKKJJJKLJKJKHHHGGGF HIIIGFDDCBCB AABAA@AAA@?>>=>===<;;;<;;uuut;:tsttpnppnmooppnmmllkkljkjjiiijjihiihggfffdfcccddccddfggfggfcdbaa``aa``a`aa`__^^^_^^__^^]\[\ZYYYXXZ^cl~ngueW]cdd_Z_]YPRUUNOU[OZgbpr]LS]TGFQe]\fbJ>GMJYih^XTQMOHJ@:935>@;i[b9<>:8:=N\HDU\NRRMT\^ODCHD=CMGDGFGIJJB<<;959BCKFA>EXYF=EFGbLFRJRUfji^gWsSxPf@bOZ=B8`Y^AjW@5:Ad`lZ??[;8@>=;6()3DECBAAFB>1-*/164.5;=:2-14<77;@<3+-#&()('-43+%%'&%,/.1$2*! D2,)/>$$&),0/676AF9985@%#?""#"DGC$%# #$GA@=?:641-.-"C=51!;F@51./33993.4@E?<::FHB>83///1144046;>:8872.,./1/''.45441/.00-3/231+27.1/+'+**(()'''+-#$,131/.1452).-.,/-*,**1/.00+.,**+**-)%$&%)--++-0-+($&' $" !% %HFG&FEGM6;D61:>7*.831.10+(!"!""&+.,-16nSLdSN\OJYRJPeI7>*Lc*!;=]E`9;=@N@OI.TGP&0&)(/i`K"eb>98=/I*;T98\U~ps>965,+QL?ADDHC*0677578743433232231000.022360HX1]37.*ECN+|--/-,/23130305L)*--./.0/-,*-.+G$ 89330." ('''6",.89748:99671.210/-'(%##"!==;8(#("!!3"*.+-,&'&$'"&)(()j&,/1---++22112401.,-/+'(((&)+++/0--,,-.*+/.2/)&%%%"')/(,391119>*./%*+%!'4!###(*WXWYXRS^_XUL<-,2/*)$'()#&)  ! +    +    !$%))'3!#.ZZ`W+(MLM&'$'B H('ECCS0/-/--*-1157>BEERE?27FOMONJAQ^YMLNP:csF>7 1 S C&% '95539;;;786!&! !"!Q"""$##""#"#$$%&&%'#'+.1.130.000/./-02223436@;1/,+)***++-+,,+,/013220/2452344453T45567889;<;<<=<>DD@>?@=<>BEHMPUSU\XYYYQMMLIGHKPW?vvadgknpwJjd$ &/)43ޅzjai[MUZ]^YUWOPIHLQJKORIR\UcdQCLRJA|@HTLKQR?9BBBKTSKIEB@CAC;33.-673`RW2242346@O@@EA5.-11+2<8586558810242/076>9735EI:6;>@SqJB{}MINU|`jiclWtXwI^6QDE,2-PO[8TH7(1<\MYN00E-'+''(( "(44332/31-" ""%037,;6<;*-"#$ ,,)!!$)%""##)!$$("#"'&%"!!# !(! %)# ('#!! 38:957<($,""!!! " XB2/=2.=32@8,/<&%+7!!6+8&!''/#200*/B<,1(/!1#!./k?7C#1;C:;0 )$& #)).1 !"&$'$$#="AA?><:AA!;88:645<<=>;@AA?=@BB"=0 , #&&#)-5#"3*'.(&227=>;758=:51020'"-0/.-13..' /-& #+0566/53/-0/104=?:9;4267?8"U$'!, ! ! /"    +   + + 7    P     + + 268;:7;FGDA4# }~}~}~}~}~}~~}}}~}||{|}|}}}~ +|}~}|||{|}|}~}~}~~؁~}|}|}~} |}}}|||}}}|||}|}|}~}||}}}|}~~}~}~}|}}|||}|}~~~~~~~}~~~} ~~}}~~~~}}}~}~}~}~}~}~}~}|}~}|}~}~}}~}~}~}~}~}~}~}~}~}~} ֱյ􁕔[Նщξƺŷ4  + +                           +       +           (              + +  ,򂎯Ɍ¿îKʹxĿ½ѩծw4433354689<=??@=:86553357$657889<;;1  "##$%%#"!! !!"%%'''(('%$$%&'))*)0('()+,,+,*(('''&&').5=@<5,'%%&%%&')+,-,*&#!!""!"! !"#"  !!!""!  $0./100/...//00..-.-,-...-,---..-,+,,,+)())*)*+**++,--..-+--,,,+*++*))*))*))**)%'&$$%$"!!!"" #Gַ¼ֿр³ؿϲôź˼ځ҆Ό狆ϖջՀ޿سǂ鐘郋ѹȼ»ŵͿʼ·ɿ̺倀ʈܷĽů®ςȪڪ˘܀ퟥӗ܀نɰڥސЧۃ򀆊ɩúŸш½ļؽ񂍕Հ׻փ¾񋓕ꔖ؁ ۀ%$"#6? +N44#00723>A@64#&+13.-5431..2124140.('1548355120-)..4;A!!&!,662771&#%%;)%*/,@3!)*&$%',+&.//*"%((DM@;OF?'0::;=C>,T23b234663133448rx:h7ided5:;4--)9=A<732D&"$',/F/*/2@ISf7534:70388;8?@GPdWO29K[QY]XR[^sd]UXNYME21010001010101001110011001010011010 11101110101010101000111010101001101010101010100101010101000110101101010101011101011010/000///010`00/0/0/0//0//000/00/0///0//000//00/00/0/ 0//0//00///0/.0/0/ 0///0///0/ +.../0///.././//.///../../../././//..././/./]./.]//. //./]]^//\].\. \\].\...].\\.\]]^]../..^]\.]\.[-.[]^]]^\\..\\]\]]/.]].\].--]^].].].\]]]\]^^]/]/]]]^^]\]]]/..]![[\]_//./.^..]]]^]//...]^]]^\//]_^///]^^/^^_`^/./`__`_`^/$__//^^///_0/.///^/_00//`00//`/00/a0/0/0 /0100010011010011010100010011012101012112 1222322212123232233232343 +443444343345445454545 45554566656555665667566677676676667766766787878878978978899988899:9::9::;99::9:9:;;:::;;:;;;<;<;<==<=>=>=>>=?>? >?@?@?@@A@?@A@ABAAABBBCBCCDCDCCDCCCDDDEFEFEFGGFFFGFGH`sr]MMGD!>@A&'7974,/+M0B8dtmq<67<;::;GO)&:87::=:<@?>=A@@E?INJT*),*)(POOKHIJEHJJFEIQL@<77687778;:;99:<;>AAB?8=CHJILLKMLLJJHFEFIKOONQTUWVXX[ae\YYXTQQTTV\cgfiq1qokgfhf_]`cffc?rstx|5[Xuwmoopprrtrvwxxxyxvvuxz=zzy=<{|}?>==<<=>??AA@@?$>???@@?@@?@A@AABA@@@AAABBBCCBCDEFEECBCDEEFGGHGGHIJLKJIIJKKMNMNNNOONM&LMNPSY`ba\UPPONONNNQTVXVURNNMMMLMKLLLMK7LLLMMLMMLJJHJHHGFEFFGGIIIHFFEDCDCBCCAAABABBBAAA@@?@@???>==<=<_;<;;<;;<:;:vtsuqoppoooqpqonommmommkljkkjkjijikjjihhjikjhggeefedefdddeddedeggghhhfeedccca`aba`aba_adfdb`_bbeea`b`_^_b\md\d\Sejffg[Zg`HESVHXVZcUWzZYX[V\rXS>>TXEHBKWd`^eedVPUNONUQM@69>BHFA>@=>=:8?B@HFCOVQES^eY]ZVDHL?@IG?CGIKLHHE<8848?I=BABJSZHF=>GF|V~sZNKPvRTy{@dNS:A?9skfGoR64T;8f[630MH:B63/*K&)1>BDHP@12306887:8=CC@C@?dNBVRT3UH60-27:65%,,*K50559766<=1$!2:"'.-0584*$$'&%*-/8(2C@214"+6A&$%$)(*-013#)C@71:$&#%$%'&&)($""#&C<:8:73.*)(+ !$!';8678;;863057:8238<84/,)/.0,*(/123-+/02.,144895,/,*&)*'%)./&'.+$.*-/33:=50+/0/./.-/*+0,+.-.1-+,-*+0'#=:$),/2830/+'' !#  <<66.0:<+ APF-2:2' &I375QQpSmKB]^;eq<0AhWWM..&-9-*.'#%%*@'.58VJ;?-4/'46355,$'.222.YWTLJMNQX14+GOR[JP10c[RXX[\Y]^[YZPQV/043240TF4(9L\-06DDD0'#)?PG==)ONPSVSNJJHEEFMQKC:4IKKHHIJHDBAD<)-253,$  6>BFJPDBFIFEDDDRW1YSMIMUPRZYLU_VLIJF"FM<9;<;56500SO?284-)'(+%!$%  0 !   + +          ($&!%$$&+)1_"+\_1U,QLNK'+' &"=*(%,;@J[23-.1/*.214377?ESG@+2DRFKOLEKNcUPNMEUhȃDF&'3#:92d +ŎdIF;2,/1")/!5-Rdad2*+1002/14'-(  !  $$"""$%#$%+":48943:5;?<:957     "$#!"%$$#%###!#"$#%'%$#'%%'%.0-12120/.0/223025<61/,+),+++-...+,.0.03021044544432334455334557779<=>=?>@EG@?@@><<>@BEJOSV^_ac__YTLJLMNSWFvabdflqzHaX\s*S·»}ybW[QK]a\][RPWRCANNDRS\`PNbLRQRJN_LL;9NM/05,,9<59;76756611303:E7898@FM??9@B@=>416 "### 3& ')7)/. *71("<88:A?<9;;874892+#+v*,.-)%&% "),/390/253212.:=#>:524;8:B>62# }~~}||}~}~}~}~}~}}~}~}~}|}|}}}~̀  +|}}|||}~}}||{|}|}}||}~}~}~~ }}~}}|}|||}|}|}|}|}|}~}|}|}|}~}~}}|}|||}}|||}~~ ~~~}~~ }}}~~~}}~~~}~}~}~}~}~}|}~}~}}~}~ +}}~}}~~}}}~}~}~}~}~}~}~}~} 낇ޣΫ˸ů؇珗eү㊥Òé4                                                              (ºźԿſȶoļǶؑȯ?32133556899;=?A@?=:99535676778787888;;; ? !"$%&&$"!!! !"#$&&'()(&$%%'()*,++*))((*++,,,+)('''(')+19BC?6-(&'(*--.,)%#"!""!"!"?!!! !!!""!"""#""#$""!!  !"""! /...0/./ ./.../-,-.-.-, -.---.--,+*+,+)*+++,-,,,---,+++*))*))**)))'%%" <98`eŪWh78=:[ϸẍԱȼرȼøԈۀӭְ熕ʀ넓Ȩ䷜™ǻ憐か˻Ԁø¿ͽƻŶƻν«섏ʵǿ澷ۻįꑍɬǫ󷕛򾤹čʍʼn댤ηƇ͢ꏈܸЬǨɿ΀ʵž肄򀃄牃탂Φ܇ųý􍎒h݋⁏-)%$'- $(M6#.196:ACB7'(/20.103444-+-2.-.11.,.3M0/3/-0,(0136 $$#!7*235551% #&%=$+/0-?+#!'8($(())'*.-%==ISM>/?-0:==>=70W4^6765435348;1-/&?FFEB<8/(&46/U(=065?NOY=>9495249:<8=PJM\Y7J;Q\PSWV]ajabcB=>===>=>>>=>?>?@>>??@AABAA@AAA@BBAABAB CCCDCDCCCDCDDEDEEFEDFEFEFGFGHGGGHJXyu_RQ$#"!"$C$):86-..0,?N9llkh7;<:A758AK)I3IJ?6232444301234440//142100266522446655899835:<;:<+JAA?=>I??BGMT+)''('())+,,..014231023654404121/.\/0223668:9<<867678;>=?ADEHIHJDFTSNQ)+***SLOLGFHLJEFKRKA=9879:9;<=;:;;:<>@@AFG<9?EIJLLMONOOKIGrILMMPSUTVX]af^\\[WTPPSRV\a_dkqponnplfggijjeGtux~~}0>>=<=>>?AAA@?@A@AAAB(CDEFGFECBBCBCDEEFGGHHGGGHIJKLKKJJKLLMMNNONMNPSZacb[UQOOONNNOQUWYXUROON1MLLMLLLKLJKKKLLKLLLMMLLLJJIJHHGFGFFHJJIHGFEDDDEDCBAABBBCBBB@@@A@@@?>?>>>=<<=<;<;;<;;::;ssrqqppqpnmnnm"lmljljkkjjljjkjjjkkjjjigggfffefeeefhg feecccbbaccca`_`adgd\d}Xeurl__`]^c^V]fSROCJQQMKMLKOQS\PVS[ekfR9;@IFImomgc`g]IBEXY^]XSEBUL9:FKLIXZG;99<;97?GEH[PSIHcWmr_O>LMWW_pxVcgH^SZ:AA=rgp=D.4849MJ;52T2/14..+),.;F<@e\D0i\)0:7767.12)M.RI$.2*);678;998?=2)&"!&758:>9,%$&%%$(1<.E>/5948?>E''('-+,/520>%>;1-8%((*%9962#&$""##?9502/*+&#'*"&(+,,9*086//20)&&$$"?0=.2.6<7fuYN5p_?;[^d3VY`_mQAMCH]UO69=VC'*EY01O6,..D^7D8N=~qQGund]>W=/4C?0!(0*:4.-6/''&!*37ba`GN/'B'246:475..))*+,..ZYTXY.2,@CJ.R8M[^YCU[1413310.00//,,*W231WSC*!8NA+,BH@/'4.>(5=;W1.))'&##%* 1      + + + +     +%/3)!!$'&&'%!6  !&,0_UT)PQ(&(*!%%!&' @$:+318D7JR784-1/-032417HCENJ,>2HQEFMJOQVPUT?/IL\ 6$TJ %%0bMI-!!(;/\__\.-..5//+02, -,"F %&%#!#%$%#)<686649347;?< ! !  ! " "##$%#"#""$&'%$$'&(**.++31/33020-.153135;521-,,...0120--/./000/470122432123235333565445667;==>@CEIB???>>>>@CC;=3154758775;AI;8478641369mm=DEWMOHG_x}Vhr_K3>@KMXhrQ[`?LHK1533a]b47#&+(,<6,&&?&" !"%&.6..GA0"ME"'$ !"063+-626!./! ')+%( '$$%)&$$" !$ $(" #)0!!%)! !$'(*,$ !##!!-!     + &%!'"%)$#%"(#;C61!F:('25DH:=;A921+"''))("$$#"84//:>30#&&$$%%%##%##!v!""" "" 1+96:;*   #96 20(',+&!    +   + + +  +  + +  + +         + 7677:EFG>4 $ }~}~}~}~}~}~}~}~}}}~}}~}||{|}|}~ + !|}|}~}||{|}|}|}~}~~}~~ހ~~}~~}|}|}|}|}|}|}|}|}|}|}~}|}|}~}~}~}}|}|}|}~~ ~~~~~~~} ~~~}}~}~~}~}~~~}}}~}~}~~~}|}|}|}~}~}~}}~~}~}~}~}~}~}~}~}~}~}~}~} Ƭճüƀ[ʔՂ‡۟ȤͶw'                                       b                 + +  'ꕮ󅌑˾»ĸ뽱ヌĶųħrǸ˸ýÉT:52233466789:;?BCBA@>:765467877999==n   !#%''&##"! !#$%&'()+*''&&')))+,+*))((*+,,-,+)'&'(()*.6>FGB7-'''&&&'(*-/0-)&##""#"###"""!"#!#"!"""#""###"!!  !  0100.//0;/00...-..---,--,,,-...---./-.,-++,,,++*()***,,-,,-,,,-,-,-,+*)+++*)('&%&""<_GЁƹߛ彚ҸöϕǶß݀پ¶ЈܸڎҡŗڹȰǬ틟脄õȀǸ˹ʽ÷ù焔ɸӥ߼㼥ؑɊº˓Ӎшť͏昀Ưܹ膡Ģ褧ޗ罀뉊܊􂃅бׁŽѺŀº򔥳񋊃ʋ嶡˾fѯۀ'&'%%/%J?C#"-4@?=@E;+117>874345974013+)+30.013130/12+,0-/173-!+'8#,./322(&"$%$(%1;2*:&$! !-.(&&),-&**$/ 59@VT`^47)15?>>=>==>>???>>?>?@?@??@@@??@@@A@A@AAABABCD CCDDCCEDEDDEFGGFGFFFGGHGHGGHHGGHJK}vcOMI''&%'F"..)9W4/41O0775:l989cB<9:;HSN,ELC4/.075.0/244454111240.1256665233478449624875992%NDB@=:V?<>=CI),--,'((+***,,-231113112030/1--.210/./--.0244777965655997?BBFKJA9=EKKMLMNORPMMLI^LJJIKOOQUV^de__`b\YVSRRRVZ]blqqppswurrppnn2`wsv|{m,n_pqpprqrssttwwyyz|}|{ywvwvxy||y~?==>>?AABA@@@A@@??@AA@@?@AB CCBCCEGHGFDBCDEFGHIIHHIJKLLLKLKMNOOOPPOPOONNMNOQV]cdb\VPNOQSUYZYVSQPNMNNNMMLKMLLKKL&MMLMKJJIJIHHFGHHJKJIGGEEDDDEDCCBCBBCCCBAA@A@?@@?><=<=< ==<BL[T\_W>knq9CNku=LMDFSNFIMLVQHISGDBC@:95AV^CAGXVobTSTeSe|TpAQNFCD>W`Ms{stA@z{xql~lWVIAW5.3C[b9Led>A4015*/1KT,9LM**/*YLIN>7E.AC44:?H%BB!$(()968:=<==@92-/**%*;:7-+''(+378?5#A (#@D(KE*262798:931>IA=97B*/3(5,C=;&##" :221..2,.'#&,C/,gh:DK@643359:@@CEC<:=::702@C>:;<<3/89**,'..-,++).)'564((+3028800./)(*(,272)-(,$"--02.+,*,,(11-,22032.2-,..),++,1(& %%#% ! -! #66,'#$)(4C5# &4?.9>'49;8)+3.(*0/()&! A<16&0/8=P?8:y[eQSUC-g>)@SDH/O;k8;_p[F>EHN1DUhI0/8-(4:6ufd@;IThpJR5/jc\\OxviE;.)'4+#%#!3I=2agl`Z551N8'189;;6222')(%%(,021-/30-+-,GU_cWJZ-200142YHXT\10124320\[.O*/E00CM=/O3;7C# ##28BFO]`\VOPHGJMLEOVP;?>;::640//)"%%%"7*,+$+5?ACNACDLIKGJOKOe5[UPDKMFDJPNXPMP('++5;69:;26673XNFBLZQK1-46755589644243243111/^\0.U1.,VWSTR.)0//00/0.11000,-/..1//10/11/POSTTG3RONE@14+160+-/54""2?8:6**-.0<#!>:0,)16972--'&% "/D%"1&4;%*0!!$//-*!$&&&q#'%-+&,12.*'+/+/0,0221-,--,*)-.'((**()-0--//,,-02.-+*((&(*&". .5/98-/-+)*42(1 #!!#$#&'()+,URUVX[XQKF<6/#!"%(' + %*     + +   + +        $87A@!&)&'$"$"!!!%--YYYWWT+'&((,)(% %+(=<*C<,3?LHJ38/..-./45636DJFLO&37HOCDCFMYkaOY?;VMS䄄O)4/*K Uu*0*U5( B%;aJH=+ 9"."0.,/V.+/Q720.-45/-/&  !$"!!&%!!%$!$'#?:<;71D44669: !    !!""###%%$###"!$%#&&()''),**01102112021634944300/0/.02210-../0102671/0332313335533466754342367:>AFHICABBAA@??ACHIHPZ_adhkmlfc^[Z[0bdiiqwxp[c3˼醐m`b/'B>@:AEO^i蔅{y}qYUW\\YYVRRHIB:;B65069:3\1;>:79ATY2:;32<837<;DE;;I;7324352?PbEELXSlfUVZd]fuR_5>=7593J]Itxvou92\^f`[gf[KJ=1B) &4IL-;LR20#% $-8FF,)>6#: ((+ 15 >316'"++- $)/+-%$&')('"%$"#"$!$"/,!$!#"!!"*$ $ # !9#53!..!$"#&$ " ' !"$'#    +   +  #!) #%%##*'#(D00"0*&4($$M6;2-6)=!$-&*+">"3@/$ (/*2@0$":/,%!"((2'&#>:9'$,4>?'3F?<97NJ?#&%%KOQK@#".&%&%!!"! ".7BEA3>! "$"<1::< !""#$""A?0&-9/#5&/,-'.11;DC@@<;87:<806;4!&%!!  )*,6-./6330T7;77H'C=5*03//6;8?745%)&'()!%%$#<4//4?5- #$#""#%'$$# #"!##!""!A@ 3 8:985T  !  10577+1,+"      + +  +  +        + 45:@EIF? 6( +}~}~}~}~}~}~}|||{{|}|}  * |}|}~}|{|||{|}|}~}~}~~}~~~}~ށ݀~~}~}|}|}|}|}~}|}~}}}|}|}|}|}|}|}|}~}}~} |}}}||}||}~}~}|}|}~}|}~}~~~}~}~}~~}~~~}}~}~}~}}~} |}}}|||}}}|}|}~}~}~}}~~}~~~}~}~}~}~}~}~}~} ⸹ݱ׹ǻ򏑔Ⱦυے]Ұ칒䃈ŻŻ}% +                                          +         + +$󋓚雕⋇¹㸴ɯ²lͺށȷÑG:532343567778;=ACDDEB?;;766689889::g  !!#%&('&$#"!!"%&'((***)(('(*+++,*+*)))+,-..-+)'&('')*/7@FF?6,(''&&&')+.01.*%$""###$##"##"*!!!"""##"""##""!!! !! "#"""! +1111011//./0...-./..-,,- ./..-,,--,+, +,,-,-+,..-,+*+++**))*(&%"!#6Ԅɴ̨𺷷ú򆛺ôƽܷߌúռۓ󄘺ֿ¾ꍵƩͶʞɾ݊ôƺʻބԽ¶̾ƀʧܻ޻Š̼ѶʻҟоРÎ赛明᭐Ɋۛˬﲬµ녊􅄉媁Ķ΀׶󖩱􀁄󁓆އѾܼѽ◓pր%%%$#0"JCI5'7 >?7"/35==98479<;7313714/)%!%+,,/..0/+-,237*3C<( #*/0/.,,(&"'(%(#$,JC9$*"1"#&+..**'6 30(-``_7G1/78:>?58;575d677747641254=5hk7jff79::,1/CDLDIF<''/60XA0.3>;P84068457432:;?:;GPS\O.:COKQPJJP[l}peQQ_UKDJ0001100101011010101010101 +01011011101 0011000111010011101010011010101001010100101211101011101011100111001110100101 0100211001010001101011011101010111010 1000101010101001010110/0100/0/0/0/0/0/0/ 0/0/00//0///0/0//0//0/0/0///00/0/./././/./././ ./././/./././.././/.///.//.././...]]///]../^]^.].].^^_/...///.//]^^]/^^^//./.^___./.%//_^/].///./_/..///.///.^/^/^//_]/.../_^/0/./^/___/00//0///000_/0//`/00///0//0100/0 +10001010010121211122121212323232223232232333433323434343434454 5544544545656656 +7656655675676787867788789998989:9::99:989:;:; <;<<;;<<=<<=<=> =>>>???>?>>?@?@ABABABABCDCDDDEDEDEDFEFGGGFGGFGGFGGGHHGGHLAzdNOK%%(%!:;0()7M7021/;7DH8748:6=;:99FQON=BA:201330123342233121/02113533556538755;;<9348<93,NB>A?KMBCCC@BIL')++-./+((()*+-,-/112332..0/1010/../1135556889:989:8<<>BHJPEGPNKM)'N(N)*))*(&LNPKMSI?:767788:<==<==<;=?AFKGF<>}@?@@@>?>>?@ABBB@A@AA@A +BBABBBABABCBDEFGGGFEDCCDEFGGHHIIIJIJJKKLKLMNNOPOOPPPOPOOONOOPRV^ceb\URPOPQTXZZXUQPOOONNNMNMMLMLMLMMMLKJJI +HHHIJKLJIGEDCDDCCCBC DCCBBA@@@??>?>=-<==<=<<<;=<;v:ttsrttqrqqpoonnmnnmnlllklmmnlllkljkjijhggffeefeffhgghihgghfeeddcdeeedcbbaaacfT]{wy>??><4(NPKP_spsphi^\]^]UVXUW]TDIPNFKLMNPS`mhGMHDMQOWHNaZ_omWMF>BCULSNOJMVSPW_W[\VKEBOMMA6aFaioccVr_SVzynkEQXQGNJJM[K{cbm[Q]qkS^rfhTDBFFV==86>?0=F%6I=9;AJ$"@= %')=87;<<;9@91+(*-'(89;>!$=1*+,(397:-'$$)#G&&)GH*,,8>DA976@$$BA?"*07,/,%$%&#" =7758:64//,,#;787/1<;,**&'(.-,.+')(1=8+*,.--1BQZ>MB1MFBK982=>1AP[<.$VScD8Z&'-022TE;RT960O%.M^676oWybWHC642.-16579olpC5?0-0B93+'$&H20,`jf_682/SP573266/)'('',+,../-/00\ZWWYTZ2]T]1-13/UWZSPVX_0024653][]acQ.(95IE:80554482BE?44ECCJXZVTYQEIKNPU]V;7:33440,*(#!"**"$'#,3>6&'*  $5<588.(*437F#"?:0)-/787-*)%#!$$$"9'","2!&-(' (**(%&&'%$'&(!%04i3-%+,)07224111+(+)+,+.($%')*,+-/.,,.-./21-,***)&$*)(%')0:B012/)'*2,,0! !#%&)'())+*TZZUWZZSPF>=%!$%$ + ,    + + + + +  + + +   +  (   +  =?B%) %'*+##'"#!b! "  #$.*SU-YWU-*(''!+&(#"+&B5*(%/,A0/-35/./-.-45736CJLQG&,9FCEC>>FP_l^ZJEXQPƒ/ F35 8!d-P`{dKHA%#1%%-37.+)+.+01/.-45/0)+'!!!"!%#""&&'&!"$'%" ?98<7>@6754 46:=     ! ! !""#&%$%%%$%%$'**1+-32/121*13304:5511..00.02110//0.///4643/.12343335c67887674346678B@=<=964]]\/6:;:G<@>?=;D>=EMFJHC<<:=$D=?!!# :>>:9>?C!!$#$$#A@ADC434,+$),*()&/1+"$2237B@=?D?6:;::=A<'#$ %+-43,-10>E8812I&#C@/7@85232231/$)&&('"('%">30,/71#!$%$#"#$&%%$!"" !##! BDCA "! 8=622+     ;4*'.(-,1-+#  +    +  +    +     ! + 2;=@C +GGA8(}~}~}~}~}~}~}~}}~}}}~}|}  |}|}~}|}|}~~}~}~}~~}~׀}~}|}|}|}~}}||}}|}|}|}|}~}|}~~}}~}~}|}}}||}~~}}}~}|}~}~}|}~}|}~~~}~~~~}~~~}~}~~~}~}~}~}}}~}~}|}~}~}~}~}~}~}~}~~}}}~}~}~}~} 掠󁇓˵φ˨؁퓕]􀅆꺏ݧΊžԼͮ!                                          +  + D񊐉̽Ӝҁؽ܂ĽԸ̱۸qѿ򅔻Ķկw>>6456433455458;<>@BBFEC?=:9889::67! !!$'((('$##"$$%''(*)**(('(**+.)()*,-...,*(((''(+08AED?6.)'&%%&'*,.01-(%##"""#"###"""!"#$$#"'!!! !#$$#" 32210001//010/.--,--.../00//-,.,*,-,,+,--,,,*,,-...,--,,+,,+*+-+,,,+)(((&#"!6⅑̸ǻらطӵ󁉜´ǹǀ侀ߗӭǧ佚ĸǶΝꅔ ¸ʷČۀοлŰԾ¶Ϧ؝ѓ˸ȸҭЫ߁퍟ݥĔٷͳ򁖕ݧИ˺րȮ󎰭߂ꂉ򁈉𲵸ϹĿ딃݃jư􃈍ýـ&'%$"2=>EOY# -8=9!.147741137833563236,*("!#"++''(&*)(28+-69!#),13/*#$(&$(()'&)+FD<%3+!!### (-+('>!"1-%&4]GCL47709><15;;56c89:465/.0125?7b457ih7<:4/1]@I'JSQ.(14YS35*2+#.:,474353129<===>===>=>=>=> +??>?>>?@@@?@A@AA@A@@A@@ABBAA@AABC +DDEDDDCDFDEFEFFGEEFFGFHHGHLGHMq};\RMH%'$?1.7/*)5B0123/N/DB:?<9:63<;:9@J(H4CC@94115873344344422012354443597879;9558877.G@=?ID>=BNMHDHFGHK'',.,,*+*+(+*+++,,01.-../01../0123220013233456898889::;:9?DEJAJN'LOMGK))*(**++*+*+TSUN@;876989:?=>?BBBFCFL@=DKJJKKJMMNNNPQOQSRROMKMLLRRW`c\ab`^\]]][YWXZZ\ejiipv}}9<`bzwuyvZ-TlNossuutsttstsuwwy{||~|{yy===>>{<{{z{z|> @@?@@?>?>?BCDCABBBABAAA@AABAABAABABCCCDDEGHGGFDDDEEFGHHIIIJKJKKKL KKLMMNOPPQQPQPQPPPONOPSW_egc\VRQPQRUXZ[XURPOPOOOMMNMNMMLKMNMMNMMNMKJJJIHHHKKKLKHFEDDDCCDDCDCBDDCBAA@@@?@??@???>=>=<===<;:uuttsrsrqpoopnnopomomllnmnllkkmmlllkkjifgfgijjkihffggedddceeffedccbbback\T{=::;:;><6+Ubenvvnn`pxi]Z]\]\RWSYakkCJTQKJNOYVPQY}LKV[[JB}u~CEHJPUPP[jmf[S\fe[G\__TLHDD=74g5:axx][j}ibbfXZscNA?C?;A[7:9@>9LHCE5BU\VM:,0/255/-8/-**2;=D'3)(+-364.G>:;892:;<5',0-/3/$&'%!"#2,$(*/2/Bl]Q:>?G^W7?hgb+K^QCH5LRDGKD>=UK]6A@&*/kkGVCCB'+442PE>k`423Sa+2(OMqL6:3598-R*33-./1+14676&>8,((+6LX]Z[ZTPURPW\XPEILMQTPC3+=65674-*,)'"*/)%+)#*!0.7?AKXHZSLNTUTQM36610SRT\YUJ=:=:9%/,U2;;63369985YNHBADE+51576663578664431122--0^_\]13/-Q[MKR.TQPO..+**++,../1210/.[--//0/XGOXY/VVW,LD%%?H(&!5%611310$'0(+:E"A=4-,)595.,+,**'%$$ 2*"%$-#4 6$()%$$*(&%%%'(''3%0.-.,-*/2.023-*.+(*'))*-(&')(*--../-+,-.130,*()*+(&()& 9G8/400'*.('*0! #%#((***(++RVb\QWYZYPI@%#$$ /1    +  +   ("   +  !;/+/! #++!!('"!!"$ !! "/+I&'+TQ+-*$8$%*-+ M!'A<*)% +7*141/-,,,47865>KLR;%4DQfeTFofHU!5 +6-!-( X + ` M[B\NG@)!!%*!0!65-2/0/*(1100/1,"+)&:!"%#$"%'(+)%!"$%$&#<;9:@=658?<659776:!  ! !" #! #"%&$$#$%$&''&(+*0(/3020-0369731/,.11/01212//0020042471/34422124456668799898646547:>DIGIJGDDCCGHHIGGHKPVWZgovzxwtm;KQb_ijqzxUh?wހ˾tu3.+***,*&@NWdlnjf`nsdYRZXXWPPJQ\hkKHPOHIKHKGCIOwxFDJLNBA{@=:=@C>?FVVSMCRXVK7db_34;<9;6BPMNGA<9;51/\068:9GMI?>AAIS/TSHFORFEET[\B?33:612F*+*-.*:738(2?@95*!#%!$ &  !" 2)1725))'#(/($!&'%*)&%!"&-!''&(-.+! "#"!(,%$" ,!#!%#!"!   "  "$# + +   "$" #&$ >73%(',=8")>FB,4*!#.1'()&"$319! ?>-0(,.!## 'J$$>7#$8&8D&+/MD- " .$0 (+<-")%&)&5!!!"  7=>>:9;<;<>?D$#!#$""?BD=<>?<>@"#$#EFBBEF9 +1.251'")>GIFFD?9?<9;BB=68;9;>:0!)!!  '*2?2=957=::84$&&$"87=B?9/'"&#!7"*)%#$&(('$?63.+*+$"%%$$$##$&$%#"" !""BDAA"!3;1-1~2-,1!" : :)288422)!"    +   + + +    +  " J  " ,4B=:BHHB8+}~}~}~}~}~}~}~~~}}~}}}~}|}؀~|}|}|}~}|}|}|}~}~}~~}~ր}}}~}|}|}|}|}|}~}~}|}|}~}|}~~}}}~~~}~} +||}|||}}||}~}~}}}~}|}~~}|}~}|}~~~ ~~}}~~~~~~}~}~~~}~}~}~}~}~}|}|}~}~~~}~}~}~}~}~}~}~}}}~}}~~}}~~~}~}~~}}}~}~}~}~} ŝԏҫaۢǹ佶ѻ# +                                       DƼʇѫԃ¾ÿ˷津į½̶5ɺ拢ȟˌ@95657543469::;>ADDDCA?<9:8  !!!#'))('%$$$%%&'()* '''(**+-,-,+*%-///.-,*)(*)+.4+WG+.6:47:=8\7::86[88855/T0356:;44357776:9]00XAOMR^B%(..Z;#=GK^F1`A=<=6564.0:<=>9APTfP):8IHPMEA>JO^[\bk^[MG12112111211221211121112221212122121212121210011210101010121012121211012110101212121011001012101010110121001110101101 +0111010100100011001010110001001010101101110/0/0101100/0/00/000/0/000/00/0//00/0/0/00/0/00/0/0///0/0/././././/^0//...//.//.//^//./././/././././././^]/ .//../^^/../^/...//./_0/_/./_/__0/ +0///0/00//0/ 0/00/000/0101011010121212212322232323232343344334545454566555755676777678787898989 8989989:9:9:;:;;:;:9;;;<<;;;<=<<=<=<>= >==<==>==>?>=>?>>>???@?@@??@A@ABCBCBCCCDCDDCEFEEFEEEFGHGGIHHHGGHHIHHIIIN_>7ZOPJ("91027),/27258874220133642655533168:6326:;;;:778<<7548:,F?>KR>>>ADHLNNMQIILKJ()((),15//.-*+**,--..-./.000/2245424344301468::;:99;;<<=;AGCJRQQ**()'K'O**)*,RT-XD<8988899<>?>??AACDFEBGND?@HJJKJJKLLLKMOPRSSUUQNQMNNRY`b]a``\[]^`_^]^_]_jicajrz5i~|{e%kgrqttutuuttsuvuxxz{}}U~||z<<=>=>>=>>|{>>>?@A@A?@@???ABCCCBABBBAABBBABBBCBBCCBBBCCCBBCCCDEDEFHHIHHFEEDEEGHHJK1MLNMLMMMNOOPPQQSRQPPPOPOPQTYagfc\USQQQRPQSWZ[[WURPONMNNMLMNMNLMLLKKJJIIJJKLLKKIHEFEDDDCCDDEDDEDEDCBCBABA@?@???>>=>=?=?@862da]a_LTa]MD=>HED?<==GIO\YYUJFAC>;687AHSTVKCHJMSXRZeWQSZTX__im|YP[XIX\knV^zAf\JNr]tN]m[k}{NDb`q^TWG7@qV]68;oTGGF]5877><7MJFHjO1LJ@6-+,+*,'''%'%+4==AG5,+259992AAEIK'*//7<;?C!!!D%(J69799:;:A8/+(%"!'57:>'3-I5,..2786&(DAE>=8:=@;?@")-0*)'" #''&$#""889764332-)$49:8=?=+#!"A=<"$@=@;\7<3),4MCAE4+%)'.21/8?=99798512,*(#$)+.,,&#")1>;-/33''.5-25)$%!!%,1*,+))"*,22107D75215202+(.-5D6.% $.&!$#*-/.+,/.*//25+68+79>1$7@935*)2+'$%7A *;=<2&580.-*,,'#&+,)/8=MncTC9=IRSkAif?D[`SPRRRLBE86$+,NT[bXVTUY0aY\31\Y//130/.\YYWWZ_1/b^\]]a`\P3$6-@AE>4-,.17DOKT[]XUV_``^\TMQSSNQUBC?9DA@?:60../-%/-,.-'!!--4?=AUN`UFMZ33XO\5621ZPNUa[/Q@B$='1,T1<862397675XLDB@AK*/-5:666466765553221/\U\`[[X^0ZYVRDF(-ZVOJX0.--.-,-..1/.\.[W-.\\TQ)-,U+/*KP*JF'*'#<5"%5810-+ ,+;BD@<40,275/00--*&&'%#",'=!&+%$2$(-6%(&%))'&%('+(":.+,3h.+,,54.,20-+(++*)(&'*)'(('()+,,.-,--01/-('***)(&%'+ ## "7>.10..&.. $)-!&%&'(*))***(*+YQPY[\UFI+,' %%+ )   +  + + +  +    +)(   +  1*!##)'<#'($"$$$## 6 ###&+('$$'()(++@7"+.28&  <,2=9J6%N;677:3//,)*48885?GC;76@FSoPNXaV[̇= +&  U.% )M'? ?W=[LH?)$%((%=!&.+062)-/,00Z123*)&#!!#! !$&%&((%%&L''$""&)";98CK88995:;;:978<:8#   ! !#!" !!#%$#$#''%&')+*)(,0+276302G46;1/-,-./../01/..//11211491/1534443455656758889;869789:=CEDHIGFEFGJMKJKRTSU^jry~{zFydenoweyʼntn0+&$%(*,./-\ecbhk^ZfYde^\XY_VOV[ZWUO}IJNJFDHMZQCUwCKIDBjckCD+-/*'%MJIONAKUQE=89B>>9796=ACKIIG>;79540228=DEF=8;;?EHDFRFEJTNQZ[dfoPHT|SFXOYegA9USaOGJ8*0]JO-,+PA985G(+**/-(6729MB(40+&#"&,#!#&$%!/5<:6!!$%"&+*2"%%''%" %"),&)##(&/& "! $&'"#$" &*&"!"!*#"'#     ((  !"% %#""  B=5*#%.44=,@B&(44)'( 1/+$' #(%++*.;@18-+$,,&"-*41!!-68#,#c2 +  + 8"""'(!485 o! !###$!$09?B?=><>!D>>#!??"!"#!!!A??>??A!!ECCDCEEC6 ++21, #0<8?FIEA?DECEE?;==<::=+*)%-+)(!h ''+=7E>07A$#;5B%&$"<56<:=<510')%!)    + +        569DGG +@/(}~}~}~}~}~}}~}~}~}~~}||{|}ˀ~}}|}|}~}|{|||}|}~}~}~}}~}~~}~π}}}~}|}|}|}~}|}|||}}}|}|||}}|}}|||}}}|}|}|}~}~~}~}|}~}~}|}~}}}~~~}}~}}}~~}~ ~}~}}~~~~}~~~~~}~}}~~~}~}}}~~}}~}~}|}~~}}}~} +~}}}~}~~~}~}~}~}~}~}~}}~~} ~~~}~~~}}~}}~}~}~}~}~}~} ہɍ񀂄灗كʧ^븖˱շ¾$                                               I迸ԃЃȿ¿ւͯɴıIݼևՂɠqA66866766543467779:;?!!DGFCA<9  # !!"#&())('%%$%%&'()+,,+('((*++-0+**+,.0//..-,***,-06=EHE?6.*(('&'(,/220,(%$#$$#"#"$#"$$%%$$##$#"$#"#$$%$"  + 2310010//./.--.00/.-..-,,--+++,---../.-0//0./00...,,,++.-,,,+++)**(('+JĹ􃑒DzȿĽ¤¸Ļ艍ڧͬ߂լڴ阷񄕔現ü̴Ԣ胕кѥڊ͈ĨŵǼDzýȽϹ߽հ힄يȷѿÜ͹򧉊ʈU输ҩŔᅆĩǘմƽ􉂀낄κ̦Ⱦކւ𕑝@р%%&$ "/.JYR%/&(*/1/.22442/157638:,1365334773(!&))($(%%$''()'#"#%)+''0-EFR70=6#$"%&"@:(%$',>!BC26887::<67:;;;5e45410-14488=9np477755:>:54[FPOUP3",0.Q(HNF:-FKGDHA972126:=>;BMObE-24DIMCGHGJHN`lXXZ\ZXP2221212112122121212121221221112211121212121112112121110121212101012121222121012112121 21112122121010122121011121212101212210121211101012100111212100101010101010101010100010/00010100101/0/0 /000///010/0/00/00///0//00/0 /0/0//0//000/0/0/0/./.././.././/././. /^..//0_/.//./././././0`/.///./^/0/./ 000/0`0//00/0/00///0/001101100010110111011011011101101212122112112212221221121232322323223232233323434343343443343444344345 44554545456545 676566655676 877676776787 8889889988898 9989998989:9:9:;::;: ;;:::;;;<<<; <<=;;<<==<=<=>==>=>>?@ABA@@ABBBCCB +CBCBBCDCCCDEDDEEEDEEFFEEFFEEFFEFFFEGGFGHGHHGIHIHIIIMOA5\PPL+802348M,039C/80/1E)BEC<=GD989::>GV((>HF@<6998821212443557636322145894388875566:;9578;/F=F/B=<=ADCAKM-(OPOLPU((&'(*0//+*))*)*---+-//100124433444246644335:;9:9::=:=<?A@?ACDFJKEEISKAAFILIJJIJKJKLKMOQSVVSQSPNQSY^__ba\YZ\^adddfg`jqg``ekt}w4dgu%;{qqrusvwvtuutuwxwxy{z}@@~~}=<===>>>?|>@@ABA@A@ABCDCBCBCBmDDDCDBCCCEDEEGHHJJIIFFEFFGIJIJKLLLKKLMNNMLLMNNOQQPQPTRQQQPPPQRRUZchhd]VSRRQRRRTX[[[XUQQPQQPOMOONONONNNMNOPOOONMLLLKLJKJJKKKLLJIGF EFEEDEDEEEDECDBBBCA@@?@@?@@??>?@??>>??>= <<=BB=sstsi]YUqukc]gd`^_pqhXVTSMIPLLJJIUC7b:YIB;G?BE@}?Tl=kUXpc``WVUSZXPRLKVcTMCAE:<<>??J[jdWNQLFHNNKIGLC<9TO\aYxe_ZULQWXZTs\jZzJwaqIIrBDDvGMJbZKU^Y=9@5G4QO2>D:a2_R16722312D9,+,A+:;9;420-&'$)&'''/7<BD%*+-6<==CE!! #($&H69;<9;?;436?=B>#(,+'('%&(%!! :77=5252.)'(=.8@!<'"!!!?+!$&!>=7.6%&0.F;.(*)(/4038885595.-.,-/,'+")=<87++43))/742+ ##)(*) !**.-)%+=;7465314.'++95/.30 $6)!"%/020-/0.*+,+0I/4/9:@4):?F381.)>2.86@'-;:7(#771/01..+"""2+)&*4<;_dSGFSC6KU<\mM`H87_>+WP:24DK>K%M)+SWRa[OO?5;R8,51`gR;^B22HOV8@o@+,123!'&#$%$(4/,9^7599.LPQ)/13454376791.'>$"JY\VZXXX]c\N42/[13462-4550.-[[01d3a_\beaQB0E0=<;>(1;;;9;955679,).-/0% ..4<=9ITbQFRVZ3.0/2472.OMK[_S+H#"")-QP-5754399633RFBB?A(+-.3=625257697363232YWZ[XPPQZ]YU*$%#L.00KNV10..0-/./ZXZ-YZZZ[.]YUZ^\TTQQS*+@J))(%*)''$?4+""3<3/(%)16?EC>740/30//3/.+%&(((%%! +$5"&*>.*%"(($)'&&'&')#$;/,03-'.058731,*()**+(%$%)))*''&')+,,*,.01C0/.(&)+***')//$-+13,/-0/'.+5$(00&%''&(*,$%/-,*)TTZW[ZMRA::) $ + (90    +   $#* + +   +! !" !"&$"(()($#$%##"!%&*+VV&'&%%%'*&"B!;&//44  8 =><0B=50**+16896;HKX=""#3@F::9?C@BS^JMQX^لl.8+ +OHJ4  $LOP;[II? &$()),6"+#+/65,,53*,.01346(+*%   !"$"!$#$$$"##&'%"$',%>7<)=89;;;:8<78:;9:!! !"!" !! ! !! !#$#i%(('(()'+*,*).2,065533-0//4451570-+++-./-010//00013300283024554443455655679<<<99<::;<>BDCGGFFGHJMPGRLQZVSTZajt}pgbkpsUSzXԳzr/(#"-240`cfhc_ZVjjb[U`^XVWifcVUTRLHMGFDEER|}|=0Z-=:=8BCIKG?KW1VEGPDGQLKFEPQFHC?HJB@679/187>OF8@GC/*,%4'AC)25.I)N>#(($$%#$1* "2&&&*# !#"&-#  "%%%;675&'&%)+0!$&'&&%"%#%+ &!&#%# '&!  + &# + + ,"!" ) !#%' " '#!"#$!7=3*+2'/5%8E*;(3 3. (-"-.0-,21-/# '5/%"67D.0-16 "/!  + + + 3!&%014 !!"!$$#$ ,;@<@@>>AFC5$"="""$"#$$ <="F$GFDGJG9.&'" ( !"#2;6?FA7>HHGGFB=?DD@AC8.0!/0/*##! # %&$1@9AKQdL6*8GCOHGEAFHLX`Y\VMYSS2112112221112221221212121122112221121121112212111212112212121211211121212121212112121212121 212121112112 111212212221 +2212121212121212120122121212112221010111010101012110010110101011010101110011101010001000100100/0/0/0/00/0/0/0/0/0/0///00//0/000/0/0/00/0//0/0/././././//././/0/../0/./0/`/ 00/0//0/0/00/0//0/00//0/00/00/0101012101 212112221112123223332232323434433343444545554454545 665655565556767676767887878989 89989::999::9::;;:;::;;:;<;<;< =<<<=<<=<=<= >==>>>??>>>?>?@?@ AA@@@AA@@ABABCDCDCDDEDEDCDEEEFEFGHFGHHGHCIHHJMD5^OQL%913657B+0369Q63/3W3HEBH<=??E>98;@O+*6IHA?>:76422334333431/001249::6554546523277449;)%-B@@?@DAACFJNNQ(P)('('('(*-.,++--+++-,,--//..0113256645465877752569:98==ADEFK@GONPTTSO)*RLIDEGJMPSwSV/RD=:8899;<>?@???ADFJIIINSOG@DHJHHIIJKKKLMNOOPSUSUTURQTYa]\c_\YYZ]_afjjjimticacfmt/?pl}+0wv~ppqqstuvwwwvwxwwy'z|?@AAA?>===>>>???>>???@@ABABBAAA@ABC +BCBBCCCBCBCEDDDCCDDDEEFFGHIJKKIHGEFGIKJKKLMMNMNPOQQQRSTTSRRQQQRTW]eije^VSRRSVY[\[XTRQPQPPPNOPO NNNOONNOONMLKLMKIHGGGFEEDEDDDEEDDDCCB ABA@@@A@@@??>?>?>>>===wwvrkZTU]qg`]ebcgbZX^UVUMHGEKINUOMPHHEIWYci9qrto756>EGIMWTPNMA>DMLUWZWKIF@GLRTRRJMI\|xcls[WYCL`ebKZfPoF~xsQ[NS[RSOKDeWQNTb\=-O:-O/>570QMMY1892,,-.:2QU).<96697<3-*')0-//)07==AF81,05:<=5NGJO+,.4ADA>EGA %(D%G69:?<;;<9.+++&%%,768{",J3/)*-2696*& ""$%HC:9='+((07; 9B>")*)%%% "'(&#:7:759432/-&%&!!.@ #=% ? >;!#?;;91(",#-+"$@71340/53/9? <5781+*-+-0,-,,*/;>653+085*077.) !$$((&&,,-+,.)017;413278.0-83,.7&$%# !!04*"$&/-22./11-+,*,48D<-2:*D*+9350C6,!#("6*3914,"273011.-,+(#,)*+.5:Uk^NIU`S,OR^V*9VU;:=ECLA:HJP*ZVSmXTWj8?B]D.2@9eVT;R W4$209A-10I=&$#&&032550+4976<:8327658"&&'*,;,),/1&OJEN*S0134668877543)&ENX_0]UZ_e_[155.+-7:91/2431"0/ada_a\__R@7,943493$CB@A@KURN[YTWXUPPRV[[[VG>=AIGD?;966575+.,,*%-03;:5DXYULDEH_34,S174-QPN/1NE!!#&1.SU,5776359950RF@=@BJ+.,/954822436764530a\PXSNLHKONL**"##GZ/.YW..[X//V0/^[WV-WVVYYZ^YSSTZYWVUPLEHP,)-(*%'''F@60)" .:5/& "5:7=>?@;3350*"#'*)%*.-)&()'"(B7(#+4)/,?+'"'-*%#%%q)'3'0-34,*639:531-(&&**)'('')')+,*(+,,+)+-/3.-/.&'(,*++,42'#9/"7.6/-)00-2*$'+*)"&('%&*( +11*'),^U^ZTWOLH8,#" !-<;     +    +   % + +    """#""!#%(()$_$#!!"$ #(((%TX-,**$"'('# 7-732&3'5<3/,:CEDCF?5-+--39839DIYA*(8:H?=<8>BCMWNPPJ\چd+K$ +(## C/| M6WIJD+'),,+0"4#4"6626-..-51..0/5",+&"   ##%"$$!#"## ""%$##)+ #;;:;;;9:;<:<<;: !!"!!"#" ! !! "$##$$#%#%&'*)'+++.-07-1557987330/-./025779 81,)()--.-/00///13443325885156543345765546779::8:<>>?@BFDBGGFEGHILNQTUUTW]WUXZ[aixSXgegtyRj]7^Ϙ݂{7-& !&.0342cehieZVUVn_YU]\[`\VW^RRQJDCDKDHNHJLEEA~zBKIKP,GGPHHDHBELQXD@IK]WeUKIMPJFKB:52_ca[-',48:=>HFBAB:8;A@JLNJ?=>:==>@@A:?ASts|[gjOKS?FVYUG`n}?_:;B?+4, =$+$($?A=D$')$ ""*%>@ '&$%(&(!#$$&,$ "##" :8;9#,,(%*-)+, !&$"##!*,+&$%#((#'$#'" ! ! !!  + +  !'" '!# "#"#" 1>;1-5:!)>(:).+/72!82 "''-'$--1:2+31.0;"'+>5"8/2" #!$$" +   + +)&.1 """#$$#$#"!$-7?"A=>AHE> ##&'%"#! ! ! !FGEGFBDC9,&"''$&%/987DDABDCBDEA<6235F##7#'$534!0) 78&&&%#&))'"9.(%%&0'#"&!!#"%%$#$#!ED9B>6.+-22-,;;; >:9 =;9;T999<::=;678:88762,##,     + + +    + +   +   >:AB ?C8-" }~}~~~}}}~}}~}~}~}~}|{{|}}|}|}~}|}|}|}~}~} ~}}}~~π~}}~}|||}}}||}~}|}~}|} |||}|||}}}|||}|}}|}|}|}|}~}~}~}|}~}~}||}}}~~}~~}}~~~}~}~}~}~}~~}}}~}~~~}~~~~~}~~~}}~~}~}~}~}~}~}~~~}~}}}~~}}~}~}~}~}}~~}}~~}}~~}~~}~}~}|}~~~}}}~}~}~}~} ҽ菇ˤ\էښʵȾ(                                   + |х،ѸɀĻ۸¸÷ڿưDֹՆʎ@=2014467789855565778:;!#,!     !!!"#&*++*(''%%''(*,-.-*0+-.011/.-+,033210.++**,/28?FKG?5,*)()((+-022/+(%$#$#/$$$%%%$$%$$$##"##"##$&''%#"   210122211022101112221020//.-,.//..././//110/.//...--,--,,+*)**)(('*5ڊ뽺񆚚ѱ˩˸ɀɴӺل񆌛ޞҟ҇֍膌⃍ʼۃ˾ͻ˿Ν܂ҵε쾜񙭰܆пȸǀ㶗ѿᐐ۵֤׳ƿ儑¤ဤ١늉ᮐ¶έ𪾾悏Ѷֿ·x鉑ō Ȁ$'(')2?PSd20$"+*()*,+*(),0-../00341*&(+01;7 !!$''-4'BHZ!*70*!!4&"#!=>1'&+-33.$248:;<;:77:9656x78433890;9=9e57;8jlh7::95QBTTOG,' ++(<-=SK>H9/(=JLNNH:/.25=>@8BJN^J5'?CBCLG@;DIFLZX]VLZYM32212212221122212221222321223211222112211211222121211212122122232121212112221 +32211212121212121 212121112122212211211212112121122112122112112211121 21112121112212121112 112221211202111212112221210121011212122122011010101011010111211001100101000100100110 11101010101010100101011101/00//0/0/0///0/0///0/00/0/0/0/00/0./0/././0/0/././//./0/.//././/00/0/0/0/0/0/0/0/0///0//00/000///0/000/0/0/0101000101001 +021101211012112112121222112212112 322332332323432343 434334443434454 55455445554565 66676665576656766767878789888788778878 98998889998989::9: ;;:::;:::;:::;<;<<;;< ==<>=<=<<=>=>==>=>?>?@?@@@??@@A@A@AB CCBCBBCDCCDCDEDEFGEEFFGFFFGGFGGHHHGHIHHHIHHJHHIJhE5/PUM$?14236>&0047G64-/.DQB?GC;>DD?<59=H(+/GGAA@<64256321124542//..3544;977444277987324564BCFJBKNLQQMLJNUUJFJINKEKKOT]KA:988999>===???>??>??A@BCCBBBACDCDCDDEFDDCDVEFHHGILLKJHHHGHJKMLLLMNLMNNOOOPNNONNOQQRSSTTTSSRQRQSUW^fmke]VTRRSSTUW[^^YVTSRQRPQPOOPPOMONO PPONNNMMLMLLKLLMNNNMMJHIGHHFFGGFEFEDCBAA@@@AA@?>L=>=>>=>==;vvu:stttrrrsqppqpqppqqqooppqnnmllkkijjkijkmlllmmnmmkljjijhgghiigghfefddcccfWBB=781nA@@?@<;urlj\TPTodbegpwx`UNPX_XSY\KQ_ROOLPJMc\XOJSYXc|AvW__VJRe8][UTdXXiJ^RXfulm_QC;oe^\]`f:ITRJNW^\RLDB?GUieVOLCB?:DSY\[\cs`zH^pKWf~_Ip_\bnE[SKQJteewop?8:F@9jidaTH>CW/PCH+---?83-QLLP0:8)KLL)71R''3753586<3/.02::50),5=>DC51/28'*%'$9;;99<;:4).0/.,+1679 'E2)',34345.$")$!478675%('+/48==29?:=DAG)$?@"$&()'̶.310/630/+'((#"?" (?(!> =<<=?>;92-,.;)/(*2#60365484/=! 2693++,*-,&),,/28:>:5081,28:.+$" !!$"#'''#!$/1/()+,103523.+6:12/.1.36+*&)&$2FA) $-.00/231-,-702/.&$'),'&',,+,<0+C#-'A)5935/&583.-.--,01%"./++,-.5.GvcOMW[HHeib`E7?^[+Q93;BA@>>GGH@IOWX\XWvq;rNRT-1G/?;$,YUJ)805GQMK1-E EHJILNNQR+--,+*SRPMMRQNP*)'D"$(&%%"!&&$+R,2335774576362/GCHU][O]14476662/00567322120020`b__Za_\eZ<*).>+0586?LGBADT0VZVW[ZXWWVQMLPTVZ\\Y@27CCB=65311.-*%,)&%!,*//;?8ATTXFFDF[6---/64/SOP5/# '-01Y-U1641]6::73WGC@CLO-1*RXX+14/22025496d_YMJH)+))(LI?;65GRZ]]ZZ/]]]0ZV]/\\RP.YVW.[\[XTRURPVVTQMMO,0U-)+I*))KB>:2/* %141"$=A96;@@<5544.% %)+)%&%*,)$ %B>9-,6'-0,$=2(/!,)$"",/5",/63.(++,872,%#&*+($##&$%&%')*,K-+*,*,0-*,+((*,,+/55.!%<2**;:3/*.001%/0.# $''$*(%!,6-%'*/04bXYWWRC6($ %,<     + + "#-  +   + "#$# $&##$#%" !%&!'(*)G)*..XXP()&%$W8+8<6/,1IE68* 4AHEGA4)',.47917ADS?(,487/:@>ERNRPFXȆ@2 I'j+Q H3-KOE0&***+0 !!-# (<3170,-330-,./3+)$#"1  !$#$#!#"!%#%$# "#"")-&)!38:<;>8:;>HJGB?:<;AKYWLB>89:4ABCFEBACC@;;1,')/2!5<<"# ""!"#"'%FDC:6/'$%4<>>>= >>>>:><>64;88:<>:666558763-+,0$$  -    +  +  + +     +  +  + "D BFA:/ }~}}}|||}~}~}~}~}}}~}~}~}~}~}|}}|||}|}~}|}|}}~~}}~~ˀ}~}~}|}|}~}~}|} +~}}}~~~}}}|}|}|}|}|||}|}|||}}}|}|}~}~}~}|}~~}}~}|}~~}~~}~}~}~~}~~~}~~}~~}}~~}}~~~}~}~}~~~}~}~}~}~}|}~}~}~}~}~}~~~}}}~}~} ~}}}~}}}~}~}}}~} +~~}~~~}~~~}|}~}~}~}~} 􀁈Ͽ쎨񅫧]ջغ爾«ͲҺĺ$                   |ùՅѠ翦䅋Ţ廦Ŀÿ̸¿ֽNƷǬ~яB5211224468898776878 !"#$#"  ! !  ! K"!!#&),,,*('%$%(()+-..-+*++../020/.-,-024210.+*)+-/38AHLF?4-*)**)*,/132/+'%$###$$$#$#$$&&%$#%'''&#! #24552100011122321//000/.-0./0/ 1320///.,.//..,,+*(')**)))7ԾǼӟī̽˸ո܃Ʒ¢ð˝ꐳ҂假ı˕˲ϴฤ􃤺ƶ͆鉕ȸɶĿźø諑ŀ޸Ϧ􂋙ǿƼشֺטպׁ쀀ɭ𤆾琉끄񁁂ڨϻ儏׷ǚ۾õ¸zꀕ䍗3+()+,*0=HP2V (+'00)'&(**%(+,*(&)+,.1/03-')**,144.)*2< >8:#%"#,3)CATL-2B7% ?%?CB90%"$,.))&&7659;==<749866898532984;9?;43798pim9<:6_CL[WL5'(:6!+)B808EF?,MI5/KRWQF&:5514>;@9@KT[F3B:>@JgP>EHGHROYSKT\B2212121222121212121122121122122112121211212121212121212121212212121212121122211212111222121212112121221 2121121121121212121212121212121212121101012101101000110011010010100111010100011010100010010101010//001010/0/0/0 +/00/00///0/ 00///0//00/00/0/0/0/0/0/0/0/0/0/000/0//00//0/0//00///0/ +000//000/0/000//00/00//0/0/0 +10001110110 1001101101001 011100110101212121212121223233223 223233232323434434334545456566565655666556767767887888787888989:9:8999:99:99:::;;:;;:;::;;:;<<;<;<=<=>===>=>>?>??>>>??>???@?@ ?@@@A@A@AABABABBBCBCCBCCCBCDCDCDEDDEEEDDEEEFEFEFGFGHGGGHGHEIIJHIJF[I4]QPL$?43268<)4334:S6/./T.J<7C7:FSC?8i;FK))5LFA=843444223100/]11127776745654457699552579D@>:,B??>?@DFFGEJNLMP)*)(*'''('((**++---...--.///00144344566447887674689;;=AEIENPPSPPMJIIEDFHNPMMNJKJRF?987879:;>@A>>>?ADDGFGRWTQJCFIJHIIIJKJIKLMNPRRRURRSTW]aZ`a[TTSVXZ]`fjnrxwrromnqraYc75sMjfqqrrrtvuwxyzzz=?@@?>??@@@ABCDDCBBAABBDDEDDDCDDDC +DDDEDEFEEFEFFFGHJLLMLJIHHIKLMNNMMMNOOPPOONOPPQRRQTUTTSTTSUVW`hnlf]WTSTTSTWZ]]\ZWTRQQRQPOOPRQPPPNOOOPPOOPQPPNONNNMMLLLNOPPOKKIIHIHHGGHHFGFFEFFFEDCBABBBA@?@@??>!?>==<;;::tuttrrrppqpsqqrqqqpopqppnlkkjlkmlllnnmmnmmlljijjihijhgfgffgedcbcbdaDEC=;?A@?{x|uln89mgb]XVQYrwqoxwgbe[Ufdab`MTMMQPMJLV\KmeSA?@HHTNblgec>clji\kqe_VOO]jihXOC=:qdZZZ4?LTQMONX]daRBFJGG\c[^WFBGGOU[_e;KDJPnlIQYT~]e\UUPoZxPp^sk?dXPQRW_m9C<7^UV\[PJP/000-,,*02.LFKQX056,MM(+50)&%053429:B70157=93,).4>=AA:7439;=:.C;4<><:B<8011.8'/'#(#?,,21482-:!934780.1.23-,,.119;94/.@/)*+) (&#!%$!#%$"$*()%(23+)((,*/20>600+,+/20(9=/.()%)0;C' !,.60,00/--.413=+" !  $!#&'$9GAAOD>'5=;:-%+('HG%$'0.'(/4)((*,2:9m{eOLJoELdZ8r7OGiV13:@IPPGB@?R38Q40550OMO-+$'2210.-,/333\477440LIDHS+/2.MLIKZ2U-231[X352`3.K./-/.# !:..PWZ\_[[__001\^/\XUTV-WWW-ZXYVURONHM[XTRONZ.+2.-O*+)OMIE?;8)#*1$ %I%B@"!A:2,!+20,(%$ %# !$"!!9N$9):&//'()'%y2*)%&! (016-04.)*.,)0570,*(*-$ !#&'%$%'('))+,+,++,*)+**(*,,+/761-%20.3;660'/025 "02/-!! %(+(%$$'12+(*.0.-XZ^\ZPC823 + &/      ")(  + + +  $%$  !!$&%$! %'"*)-,'&'*,[UW-.)$B.1>:2# /% -9=8%B:'$BJMH=1*+,+-54925AIQ9$1039C]F39;=@MGOLEQ cA(V  +  ttM4]OMD/)+(,-," !#6#2 6-,5(+1=//,Y031!+&#!!! !"!"#"! "$*!""#$%0,(&35998:>>==>@@>>> !#"  !!"#""#!"#"""!"##$###&%&%''(''(*031777:88:655103245333246=30,,+-,+++,./--/12234329;::636564566788657798::9;:;>ADIMHLNJDDCCDFIMRUZ]`h``debbellk{cXhzkb ע><8.*-036kloja`23a]WSRSNSgkfjyvdY\TO]XUTUHSIGKIICDHlPIcXN@>?BAKHWYTSR2O[VTLZZPMHCDMWVXFA51.ZTKIH)2;><;@>EKQOF:=B@?PYOQM?7:;@DGKP/=9BA!$&9; &"!#"%$)(.& #%'+& #'&)*$!""$#6+*1"%%%"#%(!"#&%%)%/4'$$%#$!%#!#"#!    ""'$&"%0($ ;:=D=//.A-/C:$L#1-=5$'/6!+0%"-+-286-0*,>(23C2#!!!M7 *." !-CB!$??AC@!   < BB:!"!"" " +46!#'LJ%$# @"!"! "@?@ABCCACBB@CB=?8'$ -)&'&4=?7>@EEEBBBA>>?BBBCGE=-##! "#*2:;5100<$&3#!&'"622 !#!  $$#?$&'$%"71-05 "0210:"7#%!?=#$#G&01<>?A@=AA !AB =::8999998;:7542.3;8431/9 **''" *  +     +C# +     @  + +  + ?EGD:*}~}}|}~}~}}}~}~}|}~}~}||}}}|}}|}|}~}|{|||}|}}~ }~~ +ʀ~}~}|}~}|}~}~}|}|}}}||}|}|}|}|}|}~}~}|}~}||}}}~}~}~}}|}~~}~~}}~~~~}}~~~}}}~~~}~}~}~}~}~~}}}~}~~~}}~}~}|}~~}~}~}~}~}~}~ }}~~~}~~}~}~~~}}~}~}}}~}~}~~~}|} ||}}~}}~~}~}}}~}~}~}~} ȃٶ۽Ъꐞ쉭[զðôϴӳ   +                   ·݌̷ր¿ѽ̮ԹӸkĻƹΎ󊜇ˠO?43011123557788888; "#$$#"   !!!  !!"!!! -"#"$&)+,,*)'&%%'((+--...,,,-../10/-,-.124321.+"/23:BKLG?4-)))*+*/1343/*&%%$##$$##$ #$##$%&'&%%%$#$&'))'%" !!43450/0022112432000/.../0///..00/.//0010122323100/.,-.000/--,,*)(()+)*,2퀇˵ĺׯѾɫ݀񂀌爢Ėހ茩³ءʻ͘尐Ҍ뀇킄̻ؓ򁓻󂇈ʹɮȹ탏ą䏔̹öķйĸżӦӮʙˀں׀ҡÜ倀͇݁ŀ×ŦŭϜſ􄀀򄄅쀉ǣ謩۵憤ƹ܀ϼ̿³Ã쁓鉐>=68;6?6?BH,1)!3>>,.'%$$&**+).,+('+.,!%**).1%0852)*+/7<@4B(%F&3+FBNT8""!=""HA8*5"'-/)"$%9965;=>>7486447]:7543968<5!+LB-#3BOP2NUI:;S[UF:7876=;A;,:?@PhIBFIINITVLQX94121232121223321232212322212121231121211221212121212112121121321232 12212223321212212221212121212112 1122212221212 1112221122212112122120112121112212 11212111211212 +1211211122121110121 0011011100010100011101001100101110121011001101011010010101001000110 /110011100010/001010/00/0/0/010//000///00///000//0/000///0//000///0/0//00/0/0//0/00///0//.///000/0/0//000//0///000/0/00//0///00//0/0/000//0 +//00/00/0/0/010101100010101010122211122121112212122212123223232234323343334333443434334344345554545445554545655666577655656767678778787879989:99::999:99:999: +99::;;;:::;<;<;< ;<;<;<<===<<<=>=>>=>?>?>??A@@?@A BBBABCBCBCCBCECCCEDEFEFGGGFGHqIIIHIHHIJIIJK?NE4`RSO&?43499C-10257L6-,/.>*B7=AADFEDG(((FMC=;86742550/.,/011321.3565599234874558640379LA<8#B=> ?EGJJLLLMKOS() +')()**+-+./...//02014466469==<79898877676HILNSRUQLPLMJEAFJGLPSPNSZH?:757788:=?>>??@?CDDEHV\]YODFGJHJJIIKKLKMKKNQQQXVUVUY_d`caZUSRUYZ^^cIhjqvzxyzussvo)aa~ՒrDTbirqqprssstxwyzzz=z=xw=<=>>~@ABBCDCB@@?=>???@?@AABCDCBABBCDEEDEDDCCDDECDCEDDEFEFEF#GGGHIJLMMNLKIIIJJLMNNONMNNNOPPPOPOOQ=SSTUUVTTTUSSTVZbjomg]UTTTUUUX[^^]ZWUSRRSQQPQPRQQPQOOPPQQQPOOPO)NNMMOQQQPMKJJJIIHIIIHHFGGHHHFFEEFDDDEDCCCBACA#@@A???>>?>>?@>??=>==;;;::tsts:qqsqsrsqqqrrrpoonnmnlllonnnonpoomnmmmljijijjikkijighhghffeedcdcccJJFBBBA=wrrnkme479412\WWWgqjjqf^fjv]{ePJHNGF>_oij=@8WJ8AU|kYZDHh~rkdt>urlm;g7ujAs[RE9;CC?:^^e>HSZUMILMSW_m]ENRFHQZfiP^d`b[aYYZjtKSSoqo{H`Ru]QabffyNxupv}VCc;bb]aco`a89B80488=82-/79<8=A<:778;89-?<AA868646-5544531...%&!="#8'< ! =?>!B86.00+9-,$"'>84/&,4:3/94<>9203266.0.152567228>*#" %,)#%##!$!$)*(%""#%02-+),,,)(1734+*-032-460-+.):7+:&!%)217/+6..--0-+/2&$$%)  /4% *+11=90-:?>=,$('IK(-1/30('/5-&,..5:>L}dR?BrEWh;`]GdCeLGB]<@*ZcBJD4CDFM.--V^BJwHxBCB/1:@-=,+J6()AI4"T B]]jf__`f5g212322032221223ebeeede344471A>"#!$*/Y[ZYUX/10Z3253+A?;B(01cbccdb]XX25343hc_XYZ]\Z^/,-\ZVUP=.8<>-&,774EEMFJKT.PPZZZ[URSRLMLPSVV[\[J')46130,,+/11.%0$%%/47:=EBPQJIA?F^40R0254NIMO$ B+26231.0.2443[367542VMGKWW.3.KEDCK),N/44XN.51104,C/.- $:FH&)NURZ_Y[_a/0/Z/0/]ST[YUSUUTUXXSQJOFGR[YXRQVTR400Y./UN)OKCB?6$&" :'G#$#B:/=,!0541)!'"#&""" (+'$,0 0&%K.,/'7%*&&$#'+$A+12/0/31.-3511,'(-75 #!""#'&&&'*)*+,-+*)*-*)+,-/5730/&%$)45780#$"358*%2./ "((&&&%$).,,*-..-XXY\WUMF>e    + +!%,   O   $'%$#&$## $#%++0,'(*)+,RW01,H949D;/&<0"%5?D)CI<+2IOI;0,K43820ANR7%-$.9;M_>68>BICKKEIra6X .6 O9;K3`PMF0+*(--1  ! -"'4,45235042\0/0+-%" K "!"%%! #$"!#$#" !%'8.'#14799::?>?=?>?=;=>" !" ! ! "U !#""!!#%'''###$%&%'((%(+,,335697=<8;7884234158976;>3//-./.-,.-/--/01032334<<<;9155657d89:78558:;;><<>@CHLJNNJGFCEGFHMRVW]`cafkihhmuK\WSm`|~H@>942454jghdddZ.01,(*QNPPbkcclbY\^dVq[KEF~HAB;R\\[589YA49J^RKN>C[j[USZ2^_WV1S+\S6]KE:.0441+MMO18?D?<;>AGILXR>BB"$ %  "$%'+-1*!%('+$%%%#&'#  "!/,,/;"#!#"$" "$,*+)#)/('&" $$!" !$#     #! &# :-A+>.*$.!%49',+$+./464$+>(E&)*%#(+) 0 ,3>@LHECFH'M&%$##""###"#GFGHIII#m + + 69<<;;"!;""# "!IJIJFD@=>#%$#"ECA<=?B@=@ :9762%%%$)'-(,0736>@BC?=>=:::?@A@DDC4  +"*+9<:6.-0A$6 #'%5/12##'$$# ! #%%$?$''%%#;614;; #0..+22 ##>4%!$#$$ !)7?=AF@ADF! > ! >89<:6587769;7603//688742741!43-,'"    !   +  + '   + + E   +   9ABE>3(!}~}}||}~}~~}~~~}~}|}~}}~~~}||}}|}}|}|}~}|{|||}|}}~~}~~}~Ā~}~}|}~}~}~}~}}~}|}~}~}}|}|}~}}|}||}}}|}}|||}|}|}~}~}~~}~~}|}}}~~}~~~}}}~}~}~}}|}~~}~~~}}~~~}}~~~}}}~~}~}~}~}~}~~~}~}~}~}~}~}~~}~}~~}~}~}~}~~}~~~}}~}~~~}~~~}~~~} ~~~}~~}}~}|} ||}}~}~~~} +~~~}}~~~}}~}~}~}~}}~}}}~} 渚腎䰚²ˁΦӷ҂񉫨\پ˧î׮>  +              "  =ɻ၏Ї秐ʩὦʹ>û渉ߑ퓧ꁇJ75433222445568:9:::* !"$H$#"  !!"! !    ! !!"g!! !###$&(+-.,*)'&&&()+/./00--,---/110/-..3455520-,,.135:DLNH?4,)))+,,02542.)'&%%$$$#$$%$%%%$$$%&&&'&%%$%%%&'()))'$" !!! ! 22002343210/ 0110/0//000110012032321100/0.-../-+*+***+*,5Ƽǐ摕ԗǤȔֺ҃򛸸ƾ²ĻȀî߲ℤȫ悋½ͅ܆аΫȸžƂڈзƸưǬƸҟρټNj۳ለ򔐀螰ϕӄۋן袲􀆅ڿ̷򆌂րݜ􀁎ٮӊʮѽ򏎐m􀅋EADC@F7CFFA!-:>B=?8-)"" "#"%""$$%)(&++'--.00)+,,-+&''(/;=6GGH(,)#DMTH,!A?9"!$%!AB8+:C=942"4967:>?=7885565c76478716;<@958:777ci;=;kNJ^bQ=+%%%?C)JI$,5G)9ISPHKJUTC6638:@;?=4IWfD1'1/6DN?bR;CHIMGPUTXP^312223332 333223223233323232323212321232322323232 +11122212212321212123212123212121212212122321121121221221112212321211211121122121212121012101011010110101011011010101100101100010/010/0/0 //0//00/000//0///0/000/0/0//0//000/000/00./000/00/0/0//000/0/00/0/0/0/000/0/0/0/0/0//0/0/01010 101011101100010101011212122122122121212 1221223232 32233232232343434434344433454454 54555454555656556656765677667667878789899889:9::9::9:;;:;::;<;=<<<==<<=<==<=<===>>=>=>?@@@??@@A???@@@AA@AABBAAABBCCBBBCDEDDEEEFFEFFFEEFGHHHGHHGHHIHIIHIIJJHK|JF5_`/'%B235;=%+)-278B21/0/S5RD;8;@AE@>46:FM(&=OJB@<;;851.../-/0146530044126768543555446669@QD?:-)B>>@??EEH5JKKKLKMOP'(*+++**()))*++,,-,-.00/.-/02111356685:<9=<;:9579??<>HBHLKMPNQSRSOIGKIFIGQMR\0QA766567799><=>@@@BBEDL^`_YSNCEHKIIIKJIMMMQNOONMSRTVX_fkfhe\XSRTY[__`dhlsyvz{yyz}j%ug+C9~~mbsstrtttsuwwwyy{{||{<=>?@ABACDDBB@?@AABBDCCBBBCEEEFDDDCDEDEEFG`FGHHHIJJKMNNNLLKJKLMNNOOPPPOOQPQQPQPPRRRQSSUUVUVUUTUUVWZdlqmg^VUUTVVVZ\_`^[WUTSSTRRQRRSRQRQQOPPRQPOPPPOOONNOPQRQOMKJJJIJIHHGHGHHHGFEFEDECDCCCBA@@@??>?>?@@??>>=<;:;us99:tssrsstsrsqr,qqqnmnonmnoqqppqonpponmlkjjijkkjkkjiihhffgffeddcH?OIDB@>upuvrhk64375/.2cehnk`ihhojzhnNRXTT_uiYz?d>gIXZm>ecXEGJ_kUR;Ctrks?=B?9`RKB`=HFCEC9p=DIPPPOLNSRNWY\MOIBG`_e]hli[TX]XV^owrpCsYNTTPrb_n{}uyFgp>L[YQDC?BB@3577=>934573TEFR[[ZTR/--360*HEF&183-),&+84..-01376587625999:7401388:@;4102335'0.1748 +558388<%$>:/-47:89762/149/(6779;?%=-$#&)3579;/%!6,$$(*,2981339?"A:8204-3)*#"&?4/-+-/82/884:?3///54-./8<2798739*  !"!%(+!&"&%$""$%''&)&'&*020//.+(%'*1'%*0001//*(+,+57'0(%&*404026...,.,++'!'!4!%%$$)5./2:0,6=>=.#-12%-)+-/0&%),+.212777>gQGDhcgfEq]b9>21n:767g<;YDIBEHGGGJ**RTYaMiLklP)03342//11]Z\^bdg33459;.?49!#(-/]_//]001222)A?8<")-a`cd][YUV.1222`YY`[Y[VL+,+,XSTP='.:EC5-275?HSHEEK,-'MRUQKFEGLMMQQVUY\ZT)"310.'()(**' -)&',)18BGAHLIMcߊ9F3_ 2S%G'M|L5\Y+#2*++1.!#!(!1"@951132443-+,//&.*&#!!  "! ! !$"#!$""!"#$#$,<<;;=<< ! ! ! !!""!! #%"#$#&'%'&##%%&&#$%,+*,1-2536:798:<<7465253:68A!81---,--././--/01121215>==:;83568788:::<;9<9::;:=<=>AEILIMOMLIFFHEGHLOTWZ_bagnlllsc`fR{ltk~Xb©&ًOC<7556eckni__/-,/,&%(RX^edYcc_f\jc`hLU{wQNKTibPi5P7^@JK\1MRM?CETXFD.4\^U]0/1/.RIA8L0:6235.Z248==??@ADECILMEGC=BWX[VY^]J@=?<@JW```q;^glI=A@Ad[YiwzqowAydb28B=;452675+,-*--*'+++*I=8>GFEBB# #%!44;!&"%$ !#&%&+*&"$%&'&"  "$"""&!  #&$ !"),##"&**'"&%%"#$  !%! "$""   +  ##  %%# !F:1,+><@B(N=;%&_D7 -%*',,11023533-I:+ > !   FFIG@?=9: #$%%D?<=916342&%,)%+3,+*--3661*(-266;;?=ACB=  $(,5<;9527=F%77!%&802513"$()'%$$DG%%B@"&'(($>:6586;71)+(&(.3#$!5="#$### **8?>:>BAAEDDDC=>@>>:;>;75866657653510,59;779!0787(%   %     +     + + +=  +  + +   + :>D>54.)}|}~}~}~}|}~}}~~~}||}|}~ }}}||}}}|}~}|}|}~}~}~~~À~}~}|}~}~}~}~}|}|}~}|}|||}|}|}|}~}~}~}~} +||}}}~~}}~}~}~}~~}}}~}|}~~}~} ~~}}~~ }}}~~~}~}~}~}}~~}~}~}~}~}~}|}~}}~~~}~}}~~}}~}~}~}~}~}~}~}|}||}}}~} ~~}}}~}}}~}~}~}~~}~} ƴќåʝ솒aͦ۝ꍩܲ1  +  +              +    :zԹ솋Ř悋οͮͿþ۶ڽA÷¿Չ嚯߯E;6664332144568:;<;:: "$%%$!!"""  "!   ! """#""!!###%%)+-/,*('B()+..-02.-,--.02220--/3456642.,-04563+**)++-05541.)&&%%$$#$$%&'&&'&%%$$$%$%%&')+*)(&#" +!!"   )011311222331010001122101122212323120223101000/...--,+***,,-,,++,7Ƹȫ߅􂎘óΤߍ뉔ׯ¿ƀĹʤŢةƾ킋˵ſĹ׀ƿ롚θڲƻՂҮŻȥܽգ鉃ĴЮȨЄצ߶Ą擎і҃Śʎ×튦һ􈣲յÞ򉆅жɨЇúضڛٻ̯̽ڄؑ񂆈LGHHUP@93*'& ! !'-13.,.0/.22)'*'&"+2/--30+433100+-678O;J/$:@$)KA'#/*-'G;77.<-LHA<=#(+./38<>=6665884[367577249=>9698775gk;=74NH`_I3%###&'*MK)+;*=FOUMTVSOC865586:@?1AVkK150,1:I?SO@=<=>>>=>==>=>>>?>?>>>???>>?@@@?@A@AAA@AA@ABBBAABABACBBCBCCBCCDDCDEFEDEDEEEFFGFFGFGFGHIHHHIIIHIIHIJIIIJJIJyHD81-V''%3/4;B()&-186<\43.-,B0Q@A9=FDEBFEEDHOVSSPMGIIILLIKLRX^N>88666578;>;<=>@@ABDTe_Z[XWOBFGLJJIKKJLOMNPORONRV\hhhmi_YTUUWW^`_`ekuvvxx{~~4YʡoCUQ{}hvuwusstttvuxwyzz}}}?>=<=?>@@ACBDDDCB@@@???A@A@@@AAABCDEEEDDCBBCDDEFGFEDEDDEEDEFGGGHIHHHIJLMONOMMLLKLMMNPPPQRPQPRRRQR3TTUVUUVUVUUUVV\gosog^VVWUWXX\_ac^[XUUUTSSRSRSSSQQRRQRQQPPPQQPPOOOQRRRQNLKJIJKJHIGHFE DCBCDCCBCBBBCBA@A??>A@??@?>>===<:;;;:8s:tttsttsstrrqsqprqpnpomnoqrtrrrpqoponnnlljjjkllkkkiigggfedfdX`NCA}{;<;li4546533/66jhgfccnchpf|q^[Q{JUKNKNXXRi8k`M\iU^uto\bL[j\?cA>leh;b@HA]MK>b?JG>=F9:=?DIKNOUXPLMQceggTFERrZ]]kv[ZSQPJJV;=_ce^dmaKILSLijzgc]b7=;22LTK7?GH>CGDE;556567612352I?`uf]JA7S*+22-NKI$'143.-0*/94.)*/34665773,/89:;864049;=<1+),2573F./8=49#.5285889!@@<;:>">=723;86'+$@#=0,-*/.51,8<885==300034-.2;6-48765+)### $"+$"'()%'(%%&##*)'(33*++/72+((""&')*(*++,-.+,3%1&%('1/61581-1-+,-)-"#30+.6=5/6F;&-;=A0#62*8+!)/00'!)-*40/0376SgZOMj4kWIXQ>6DaJZH26NB|`5]>5FT")1E8*+SPTX:da>2KA9EP]LJb;%+N<'9BL6GH?K_ri1409B@2.+&'))..*'#! )(&A./:A-640/1,'&#%*,'6&6//.54486782P)**.1B%/ "#$$$# '+-/-+*'*%,,-..744645*,//+#"%7;72%'30&4 84/))-/ "(,)%#$(-+* )+,,YXWUTUP+'+)3)   +  + + +  + +$&"  .*#$'%"$#$$ $'+(()()+*OR/0)&62@F8#42-"5=HOFJMLG8--+*-/474):Lb?&# &0?2HG41:CD=DDLP$/$ c9>>O%)/D HK5.)L &'+00 $!$; (#C88049616/,,./ 3.(#! "!" #B%# "! #"%#%&%0;.)#33457;:;:==<;=>=  !!! "! !#" !"#""!###'(#$$'%$%'()*'(()-0.4113179:=9:5768:;975:>C91/00.+*-.1.+,-/11100>F=<<9<:2569887;;===;=<;:;;=;<>@DJIINRMMKLIIGILNPTX^`chlooqwClׁwkoHMv`]dĽ*у^Dp98qq567e_-/,.-+*%--]___\]d[cf^vcVUL}|C|xPEEFJNHD[/[UJLXFP^ZWJNAMYN3M40VRR.J/52JBC6P1:812<,/435:9>?GKDBDFUYTXK@?IeUOR_mIHB;937C-0MSXONRL89$E8.95'",:+2*+$?./!'2 *!4376!65$*(,016'*5#013*6GQG (.2982985/I/&&('%$## !$D "$)$!  + !"""! ##!4(#8BECD;8;<:<"$$EABCEL4  +(.;?@9791:!':1>%?/457>!""'++*('I$$$@:;&'('$=856527877)+,(%&*09?$>??"%$$# .-+2CEBA>=B4-+**+,.2663/-*&'&%%%$%$%&&'&%&&''(&%%$ %%&'(*+)('%##"!! !  2133533312221221110211223323553442120110//.-+,+++*+++,-,+)'&(YʶǷ싸µ̀ȿʨ 끁¹ɀր׳֡ʳżֹʵIJв˿ó̶˱ǮźƭߜԘ׀ڎ˸ᤆϯƀԐמȪÕ˵諷ͤž̵񙣦񈏐Ͼ􃂂ּಹ嶤ͷݑRNQPM(A"'#):<:3+7294.B(;?3*=$!!HONIH&(19/(*/5:<9646:64i3567566419664898976h:=85YRgX?/&$##$(+L@$-8)BGNTJOZTLB7898959<>37VhS484.14@?GLB>CLNFJLU\TI32212223332223233222322333232323232 +3323223323212323332333232232 332322322232323232323232323232323232323232 +32332322232323232321212121212121121212212 1112221121210121212112101010100101010101 0111000110010100010100011010/0/01001//0/0/0/0010/0/0/0/010/01000101110010 101001100101210101 01122111011221211221 22212221122112323232223233232223 +43343443334343454545454565 65565565655567656 +7676677766767 878777887887878988989:9:;:;;:;;:;<=<<=<<=<===<==<=>==>>>?>??>?@??@A @AABBCBAABABCCCBC DDDEDDDEDEFEF +GFGFGHHGHGHIHHHGHItJIJIIJJK>FB;3,W-,)626>F(+)/0569L42*/.P9P?FD;=99;@F''+GLE:323/.0/011./14133322017;87566766587:=><8?MGE;,'C?=CDECEHIxKLLMNNMMN())+,--..,---+,+--.01210001002345677<;;<=@?<;<;:98>BAGHEBIMOPLJMJHGGFCILJMW[G<76466778;=@?<>>>@CKZ_ZYZXUMJGHHJKJcKOONLMMMPRRPRTXbcdmjb\XVVXX\`abektwtux{}t<ً3J"t{qvwwuttututvwwyz{{}~}>>>==>>@@AACDDDEDDA@?@@A BBBCCDEFEDDCDDEFFEDEDDDEEEFEEFGHGIIIJJIUJJJKLOPQPOLLLMNOOQPQRRQRQRQRQRRPQQSTSUUVVWVVWVUVWX^gorng]YVVVWWY]`cc^YVTUUTSSRRSSTSTSRQRQPQRTSRPNLKJKJIIIJJIIHHFEFEEDCBA@@AAA@AA???>>=<;;<:;:tuw;tuvuutsstssqp qprtttsqsppomllklkjjjihgghfffeffghimj^n~zx999524343h:74:7ofcd`ZbxbWa_]`]YOBPT\LPUXeZop@xqgn}iT[hb^_oveYcu9^`_f|km_bZRI_9JJA9C98;?DHNPOTXYY[\WhwpfSQI[hONYPMTTNKKNV[;5gww\^ec[SLRLv]lh_Tj@DKEFFOR55BFCDFB>961212;:1-T[]MM:W<7CDHPJ+2-NKJJG)/51-*OE*50&$#,57859;74/2578822/.39:>>4-*,/32-?-,06147=9494235;==;3),138:952/)(2$8,599;?>E;.)'$&288;5-(&"<$3678! @9;669?23:6A$$$"#B:> '$##520+(/552/-'$(((%! !$/JA<<;968= ;8734:33=B@BB;/,-,//30-794628;900.,01,-495/452/* 'A,(+'-$)$#$#(,+*+*&''%%+.*&&-4''&)7=632% %,22*'20/.0++,%1$$$%2471674,--,+,,.* #&3&-+,*+=A9C'L*(145*$<4D>&*/2-1-%(.-0+*+*1Fb9IA02D1-5A`:9DNPAB2_D-PPNORSL^r5ZjOM:5QR;@H.'+#DdH:<3!A>A^wgclhkQGmFvmeX_AGl8dg73_P87>bZ.14352,E948F+/020_101333]SXSJH01]_XZYNXOR3331,IN/231./,RQORQB>@A:+:CI=0&&4FGJH?IKI;5765366@JJLMOQSX[_a_7"1*.-/.,*)("".,,)"!04;DDEQRYYSQHJLY81U0UOT,TY/21399<847331`YR47875ZPKEHQQP[.==@@?==DHGQ\``]03460+C23D,ND\Y`c^Z`b\][Y]de52ZWXXXSRTSQOMRUTONKKKGGD:ARUV3V0//WTZ/0/-,+(HA>82%$%!$HQLMKH<4>BC=3'$ 3402(&# :''A//$$E230/+*'H'(-'*-9/.08279879O7I)(08>%06"#$$%$" #'*+))*)*%'+0432-5740,/'&$"7/760+(/3,A89995/.++1! &%)!%%*)*+*+++,+*VUXXZT +4/1., S  +        + "' .61-) # !"""## "#$%')),*)N-0*&>;FA.!2(' 6>FNDGTNB2(*,,/,275,.M^G)'% %*2.9A73:BD:?BOUՊ4  /$ #+.I#( QI9.'L#(+-25##&4"2'B8@801064/...1,,*""$##"""!!"#%$%''&$/:0,$/3377;;<=<<;;;?>:;><;9: !!"" !"""###! ""$$##%%$%&%($$%&(('(('''(-0.441.587987:7877548968>B73//.0/-,-/-/-,-...06A?<;<::7768788::;<>>>==<>>?A?>??AGHELNLLJKJLLMOQQTW\`ainqrt|NyXYFmfnzjƿ:ɯ}xxqp5441--,,,[2-,/.]YYZXU^q\R[TW[XWM@FGLDHLM\Q][4_[RYbOEJVPPRbdUFN\-KMHTaUXNPIF@R.872+7).348;=@AFLLOOPKWbd[LICQ_FDMC?DA<856>B,*RagMHJICA`P][UIU16:57:>D-+34235542.**(&,+%#DFJ?;/J/,68;@;!%!:5467!$"94$"$%%#&)'# !$$"#"!& #&""("! " %# #"!"&#'#,%!   #'&&'" +!(%&$)/&"/4"$,A:;2.A:8,-43+&,8#%#%/%,4,0#B)33255/+1@5=1,!'%!"* +-1EMB8=AI2(A(@?:58(*J+HT-)H?&("68!$"$!$$ ""B" !#"!=670)(!>A<<;4;57$$$"-. !32./.# '-(%*.'*+-.(./, )+-0369=AEGD"  "+*)57<>66-.0<' 9#<799?!""$+,-*&)&%#D>8$&''&?9525988@ &%(($"%+0.7ADDC!"!#%(2-A>DEB?CE?B@?CGE$#>??>=98:865478723221./-&+787!4637#   $(()&" +     *'    +    +   6;>>=8}~}~~}|}~}~}~}|}~}~}|}|~}|}}}|}~}|}|}}~~}~~}~}~}|}|}~}~}|}~}|}|}|}|}|}|}~}~}|}~}~}~}~}}~}|}~~~~}~~}~~~~}}~~~}~~~~~~}~}~}~}~}~}~}~}|} +~~}~}}}~}}~}~}~}~}~}~}~}~~~}}}~}|}|}~}~}~}~}~}~}~}~} ժϾۋdԫ󊪺̩ă +          + + kijǹģMǻվݒלþ۲F>777665543324467 "%&&%#!!"$$$"!  !""##"!#d$$#"##%%&*-.0.,)(''()+-/13410/./0121120//25787520../3674-+++,-03662/,)(&%%%&%&&&'&'&&&%%&(''('$$%%%')*++)'%$""!!!"#"! !!   @234312320132311222023222456455434220001222//00,,++*++,-,($%Bd灅åɧџ̓ٺ팮Ѭȹ˸Ŀꉧë稵󈃜񊍄ȫ̺Հӵڥ틄ջžɲۍø¼ѽΰՀӻԻǩЗՖ鈰Ȁֈ顃ꗳ݀͘ڙ΀Դ遊޶לԉ˶񆄃ȴ؀攕톌ȥڳ⽹ွƥ²􋌎sĚTTX/NFB'' '8>988;89;M+D3:DE8%GC8FJC?7./)D. '# BRPP+2-287+-)+067556866q2299679655/028989776=>=<<<==>>=>>==>=>>>?>?@?@? @@A@@A@@@A@A@AAABBCCBCCBBCCCBCEDCDFEEFEDDEFEEEFGFGHGHHIHIJJJIK?AC=70,,,& 03:H'('+1358@`0/00[BHa6G???=<:=;>DM))DIF:03300/0.11/.12/34210357742545657:8<<::97IPHD5**$?>=@CDEHJHIKMM%&%NO'PP'&((),+./.-..--,,-.-.02432211223455688979;:9<>:?>;;@EFCGJJHIKJHDDEDFADNQKLZ^F96566677;<=@=?@?=>CJU_XW[XWQNIFGJKJJLKMNMNNNMJOPQPST@\cghlha\YXWV\^`^cek:ytsv|}w-tSm3[uxxxw;==>?@@ABDEEFEDCB@@???AAB%DDCEEFFEDDECDDEFFFEDDEEFFEFGFGHHHIIKKJKKKMOPRQPNNLLNNOPRRSSRASSQRQRRRTUVVWXXWVVVWVVXY`irtph]XVWXYY\_bcb_ZWWUTUTTSTSTTSTTRSRRSSRQ RSTSSRONLKLK%LLKKJIKIIIHGGFEEFEEEDEDCDDCCCBBABBBABA@?@@??>==<=;<;wv;u::utstqrqqrrsqstttsttstsspppmmn oonklkkiihigigghhmsh~y~qpoo9666564445lsB:7;>~fjl|^OdhqxYLPTHW[Wxu\Kz|JG=AkFuqqGvG>c`]QbwdXX]]_\iqy{iOMY]OMPBe=FGA9:?FFIKLYa^cecfckafti_IQF338>A90,NTXLL)Q;?KRPFT,,SMHT*%-0+RJ?@H90+)039;:;3*))"566789! =;9>8<:<35;4 '(,,+&CC&+#A#G753.437322+**%$#"#"'5JC;=956A#!:66713+.69:<><3.+').3.-:;23/27710/,.+'+/2/.03+%'+.%,(1.0,2).,..--,-+&'(/20+.4-&#)3,)&+9H75:4&&%).22,-761-.47:/),)-),(-32-/+-*-,1/ #&'2/#%*'0+%9EKF?1*3643'";7&?.445031),,*,..,,6AD[e[OBiMNEHPSDFE[86496..$OhHKJ,WCF!)ECEGINOTSVY[^^U/;6,**((($$&-/.(% '569DFHJLWeZKFHII,7QPU211WQW2//66::9<75_bSW47885/RHBFTXSWW?::<<==>C=;JX`^0.-,+L7.3@N6FUJR\`d:n^W\df5b1440ZZZTTSRXONSVQLLLIGEDB@CNQ[^U[\TPQ]/--.+*'H@>85/ %!.V)PKJA8=@D?>4&%)$),.&%*,#!7'(<,"+'(;231,v,*(()1'"180066689:4/1O-,'/5?(4!$#$!##! #$%'))($'&%+45310363042,)''(#$*..*,0541715773*, "!''(()'(*+,-+--+*OT[cY668'$    +      (# ('!*0,.% +>84 t!#"#$#  &((**)',1/P@AK8'0"  (+;DMDEJH?+&(-/369803I\M/(%!%+*%%;96:>?:3CK`Z i\iM?Y%N:1*'")+.8!#&+A9,:[1;/3441-10/47,-+"!"! #"! $&%&%&&&'9=3,!3315x:;;;=;;<<>?<==!#" ! ! ! !"!!"##"$#$#$$$###$&&%#%&&$'(&*((*.3613673467513335/2:;66BF92/.011/--.00+.11..26;?;<=;88799:9::===>@?@?ACBACBCGJILMIIIKLLPRSPSTX/bbjltryK|XMyv}q^.˸{wtol5210/1.-,,]e90+/3iZ]_lWN_]foQGNJBKKMdZJA|}~ssEC<??IQNSZYXWZYXdYO?7AE?9;>G=:9B==>$&-IRJP>IIE@>6;<4dbS-5?7671255.O2224540/2?:***+0*##3; >;6<" ;:1/>" %&%!"&"!!#% (#!.0)& $ &((+-*%"%&$!!"'!  "" $"!!#& !-$ "# ""#$"  "#!(+)%&%0!%%$ 3991+@13,.37,-,6"+5 "%3&.-$--2333,"&&2J!;/# 5#"(/19O/Q++&.2 $(('!)%*''57)1/'A.164 "&&# 2 !@?BC! 676.)189272)%321/'"+*#*"&(((())3/0)%"!#&)*..358;&"#&),('3>B@ *#- 0>27?CH)KB>GJH$A"$%"?>?;;;9=678:94431/,,,*+58==5=<623:# +,+'%  +     + +   +     +  2;AE= }}}~}}}~~}~}~}~}|}~}|}}|}~}}|{|}|}}}||}||}}~} ~~}}~~}~}~}|}~}}}~}~~}|}~}|}|}|}|}|}|}~}~}|}~}~}}~~~}~}~}~}|}~~~~}~~}}~~~~}}~~}~~~~}}}~}~}}}~}~ }}~}}~~~}}~}~}~}|} ~~}}}~~~}}}~}~}~}~}~}~}~}|||}}~}|}~}~}~}~}~}}}~~}~} ӘߔؿÀc͊ʽíƖ3  +    + +   f߅숐ĿDzƶ˭ĵTպղڰȼ>7557764555675 "$&&%$"  !"#%%#"! !  """#*"##"##$%$%$$#$$%&'(-/0/-+((()*+-012321/0113(420136888642000156=GNOI?3/,+++.25774/,('&'&&&'&&%%&'''((&%%$$$%&&'*,++)'$$"!  572#11334322323124434556644323221121221/,,,+-,))I`~腍ݿިȼۡ脛ɾ綧ȹѾڷؾ끙ƶͼůĀ龯󁆁˯݁İͰ͹ꗤ¼îܲȀͬҞ狕ѻ耎ø킐Ʒ˵҅ò̀ϱ³۷畋廊͸̤ǎՃЊҵʭǀʎꀉ󁍎݀Ω߽Îƶة˶ǵtƂ?aW[1-)Q+#/<9:<@?>AAA@@?<09==@>=8>?<>!78:775237:= #;4?4134:<72H.*;7@E43G/6ED16K5;.!,*(3*,-3916851,)-2/0023:93.2<86;>8541015978887<<>7^elA1'%# !EHI<1?9D%.>HEHUUTT?'/97:=BE>;U]R=78/3;<=0DAGIFK=ACRkDH533323432323232323!2233323323323233233323323332323323232323222323232433232332322232323332322333222333222332323423332323222323232 +33322333223 233232323223232332323222333223222332333223232322323233232323323212121211121212221212122111221121 2212221121121212121010110011101010100010101010100101010101010101001010101010010 100010011001101011101010121221112112112221232332223434343434545454565 6665665665556767676787878777887778998989:9:;;::;;: ;<<;;<;;:;<;<;;<<<=<=>>=>=>?> +???@??>???@?@@@A@ABCCCBCD EDDEDEEEFEFFGFFG HGHIHHGIIIJHIJIJIKA@EA:2-))&'93=E&)&).369:411121R.87MN=:A>DC:?EM,+5HHC:864510200/./34.10213213741258979::;;=@;WRFE80.*IA@BCEFGIKOOP'%&&'&'&(''('')++*,.-.---.-./236343243344568:7:;;>@:@CEDCGCEKNNKMHHLJEELPPMO[[H;7867689;;<<=>>>?@??>"?@ABCDEFEEECBA?@@@ABBCCBCCCDFFFGGFD EFFFEEEFFGHHIJJKJKPMLMOQQRPOONNOPQQSRTUTSSSTSRRRSSSTVVVXYXYWVVWWWXZaluwri^ZYXYYZ]bbdb^[WWUVUTUTSTTST SSSTTSSRRRSSRQRTQOMMLMMLKKKJKJIIGFFFEEFEDCBCCCBAABABBAA@?>??>?>===<;xIKDVWOBE=<28:BG<>96;<847<>@=5-*)(TM?JGHWVPFMUXVJEA8G*//KJHLQUKJ)F(38832330/46964,)))04;<6%&',0123A11/.,$A:<7;21:?EIK&C;67?<58!*'635914+-19;;=>5.*%%*21.9<655=B9611.2.)+01,+-.-')%02,8,710+1+/*+*)-/1-()+,+$$%,++),792+04%438=9;6/,11203CD448;;7//)+*%%%(-.,**(,)&  #"$++!!$+5..;0055.'5;:>+'2,"/5310.43,-'(*-2./9F?}`]I?q^PAGRRCHE2_7DB84NK5@5odP;/J5#&*''MNLN'P1Una@$!DG+J?K>M3=&%-2`]ZYW+&"!"!"'&%C>!">=;:"(M)+.*PNKGB='-28><@D8:D9 /B358@EEDDHGHFLWX\_^K#4 %!%,,*#:'/0.*'%049@DDGGGPQOGNJFK-PL'184/SV12^366:97cZ\][/798962WICKS[TV-<9;@@>>;@@<?BKMGC-(,38>@73I&TG1*)"$+,)!68<>=?77;Ld`܊ /+- +'K;N" ' 7b!S=3+'*(06"$%'$0,.<=313179148:$.-'!  !"$''%&'()(E> 0,"7559=<:;==?=: !" "! !!#$'%'&$$#$%$$$&(%((&(+&')+(+.1015333563633542156747DF:2-./11/../1//012/46/9:;==<;:;;8:9;;<=;<=<-U-0413=DD@ABFTKSk\[^_a[YSKICDP^E@IB<>>=;@>9::.09:4AC=1943,1227-0.-01,'*,,-,&!::2AA>E@;48=BF>7/&13537;=431"%%"!$# !""'"! *$%!' ')+-0*$""%(%  & ( %!! &" "$&# ! ,%#$  ""$##&#!! !!"%$# #E68.)F=4).65,0.8"w*,"(8,%,-/,*'0<1 #'$"" -;03)7)!7) %28 !#%$%" 1# "?><<8   +#'000+# $%)*"%,")#'(.05421(#%'()***(-69>@A3!  '+-012==9/40+041$)%!<>$$D$'(+)&FEFGA"'))*&#;/,4;:9;7:7:72330.,,+1018;?>>=633+# t,+*(#   + + %"  +    2 + +   +1;@B}}}~~~}~}~}~}~}|}|||{||}~}|}~}|}~}|}|}}~~}~~~}~}~}|}|}~}~}|}|}|}|}~}~}|}~}~}~}~}~}~~~}~}~}~~}}}~~~~~}}}~~~}}}~}~}~}}~~}~~~}~}|}|}~}}~}}~~}~}~}~}~}~}~}|}|}~}~}~}~}~}~}}}~~~}~} 퀆œℏҜָ̯˒揓_􀈛¶Ĺū0        ]񅉎Ѳ⃋̻Ϊά$вɶɿ̺ᵾβٓϟ=565756-5 !#&&&$$!!"$>#!  !""##"#"#$$##$$%%&&%$$$%''(+.01.,)*)))+-0233210/1234*3124689964210//25>IPPJ>4/.-+,/37973/+)'''&'&'&'(A&&&%%$$$%&'(+--+*(%$##""###"!!""#"! 63421343233325657775644312323321010.---,,+,-./,'(*F逐ȼ㹚㇈Ÿէˀ魞ӹȱܺι򉐔ν倄̯ʯʤ̼ԯʻ惏μ껚ё샐܀ֿ󁐇ͻï¡ֵƺѺ󐯣ձ綘ܛۻꄃӀļ䳣ƻ򀁌׀ɿɶν²ų荗錆ʄ7W01-*/-#34889=<;57;@@<<9B?@"% 5.3665779=@!6<>0422355;=-=*.D6;<5!4<-.BK34O>6 *!")>7,;,028;5897)!%3,,,*0392/25964::9852155898L::=622b?0'%" !&JH5-#="%-0@?CUUST=8* %59;CI@:d\S>67.5?ATDFEHMCI.L@LfN.2232234343 +2333423434343232323332324333234323323222323332334333232323323332232332223 233344343232 32333223432332323232323233323433223223 23233323232323232323222332332332334232323223223332 33232322333232332321233223321233232221232112122112121212121122211221112121212101212121110101010010110100110 110010100110101010110001100100100/01001010101/010101001010101101011010001010101210101212211101 2122112212112122211121221121223232323332232323243234333434333433343434345434545554555445454554445656 +576667676678777878 778889899898998898899:99:999:9:9:::9:::;;:::;:;:;<;;;<;;<<<;;<<<==<==<<=<>=>=>>=>>>=>>?>>>?>?>>?@?@?A@@@ABCBABCBCCCDCDEDDDEDDEFFEEEFFGFGGHGGGFHIJIJIJJIIKJJJBAG@93-+++(&7=FJ,-'+07;7W4134/YCDBILgFBDTYY[XTQNMMGDDHIMNQRROMMMOOQVTTVSWcgepkb^ZYYXZ`^_cemruqrtqc4Zu;T lutxxy=<=xwxw<<=>=>??@@?>>>?@@ABCDEF"DCBA@@ABBCCDDCCDDEGGHGFEDDDEEEFFEFG HGHIIJKKKLLKLKLMMMORRTRQOPNNPRRSUT STTTUUUVWXZZX[]eoxzukb^\[[Z]_cfea]ZXVVWWUTTUTUSSTUTTSRRS RRRTUUTTSPNM LMLLKLMKLJIIG HGFFDDFEEDDDECBCBCBABBABAA@@@?>??>>>= +<<=<<;>?k8;9uoh\YVUZV`v|SHf_hcduvrf:9HBCE=986>=8=66@@<98=@C9.*11++%MVMGPQNOJXQC9:;AH).7+M)))FKGI?%4:61/221066320%(*+/378-!!#(-03-5*),9,"9;=8?73=?CEH&D;68:@=971(4 %+%;,.565567?5,*)./7;97/.+);,%+'(-/10-21-475:8A<=>6")+)&#!3()6?:8621,',86,*/,'&&$#&''(4'$" >=<"'!329?45-,.:>>?:5*$"$'/+)39535:!:324575--/2*)-00 "2'8909J:10.2-0*--,023,)/,(&!! .73,*02+&)/7208;873222/388EI4679:5#%#+(##&)0-)&%&13#46 "$!$%+2068%D2<$F*/;=0(:6(;./0-03+)&&))-.05ECZgZGAvfJlJRPNII<4L;I;;ZMA1#9XVD2`'*'CSYVL@BGMSSE?> %J%P43@6)$5599-*=sJ$*"=B'.37::4+'$!$./,OI>=B"$%)% ")13/21133/ZQ5A")03111* ,))&&$#$',,57B'++,*RPNEILA0009E>BCPDA?.6:@=9<@hEGGGIC:;@CCCEFE@?CLRWWVS3.-*&,7931.0110+)(%0,6;=?ABBEEIRIORHO`VH%(541_Y_21a`287d^UY_46999872UKHPU\YWI<:;=CGFA>:B;>GFFF7?;=C9=;;KPLBEPOPe3]Z012221.VYWXYRQRTOQOLNLJFDDEGDJMKYZ_.SOV//.-,,-)?*$"+# HSPLH@2;EF@:1&&( 274 /E)&"6%572?$%<#"!:00-++/3$&Q4-35;857914+1010,<28(39"%#'&($8!'"!#*E##+62056321%77/+.///0//-*& !(.13-)#'#?;322'*4:,(++*''+./.-.,*)&VM_ %8  + + +" #1#1("'  !! !%(&'$#!""'N)+**()*,'!D,#.3#)"67;IKFD.%(17@D91QPF2**"'-1@8;;?B8@+A9Fao  +N ); +/5[+W0" +qY?4,% )/54!'(#=!6).47;Q26493)595/-)'# !$"  $%%$&'*/I<0-&859=;=8;=<;=   ! ! !! !! """#&%$&&''&&&%%&&'((''(*,*,00132/0349<:46353733978=960./0/.//.01.0032291/;:;<;<:9:<8;9;;==>?@?>@BDFGJHFHEHOQKSQEIGDFEGKRUVYW]ceekrvgey|{}cayº½Ϻ琋}vcdkh111/.-/53145Y,--bcYRQNMWTZkpPB\SZMLYVYF++?9vAFEJUO]gVHUWiNbbGJZMDB@A]Z\Id@;EB:ID@@:B.S[/17:@CGEIJIMQNktho`_aPTXUG=L^Q:Q]H=CI?F-44.'B@>AM>I%(A:8944f]U0J<*.(/238630.13)/*(12--,-,/( "# >MD=A@<>8CA6.0-15%1/524."&" ""!" "'&$%!'! (()+.(#!!$'""$ %"!!$"  " " $"! )  $' "& ' '&* ""296+)JB0D/64612%# 0(!,) 4'2770(%&))# #' ++30""(,)$#" + +"!"#$!<0 + +   + + +  010,-,#$"&'2+)(#)'&(-12124/&%'(('))("!"+18B889 !%(+..016<046-3?8+&$!@=E%#EF%*)E@=@425    $++(&!  & &    +       + + + 62B~}~}~}~}~}|}||{||}~}|}|}~}|}~}|{|}|}} ~~}~}~}~~~}~~}}|}|}~}~}|}|}|}}}|}|}~}~}|}~}~}}}~~~}~}~}|}~}}}~}~}~~~~}~~~}~~~~} ~~~~}}~}~}~}~}~}~}|}|}~ +}}}~~}}~~~}~}~}}~}~}}}~}|}~}~}~}~}~}~~~}~}~}~} Ҏ􁇆΀͸툛ҾɟҘ⚞_׮⻭úijƬ/  +  + + +  +   +b֭ʾҟӷְɺ5ÿԿûϗƄ=<4556766 #& +%#  "$%%%"   "#$###$#$%J&''()*-242/,*+*+,-144543212123565323579996530/./25?NUSMA621/-.048:73.+(&&&'&''())*)'&%%&$$%&'(+,.-,*'%$#$#!!   534542444567776765442231/,+,+,,***AjشþӅŒƳϪʹŸԵ׿ŻӺุ̀ǺŶքָǺ˶ı編;Ԁ͹ޣ̙ӽɼ׽ſΝΟ􄋅ځرƳȼ̙ۨNJѤܫȂϹԫ탃ѳȼƀɾƯȾ񂀁ƿȿ胊􃊍ش¶з~􀄔򁆄灌f]2,-*4)0766:8:77521147813(,I<;<3' 9=.'5M?>I9D6 !'+44/5/349<9=<1)')*'+,0112/.[24;53956973/5668887699;62aG:/'$"!!"&NF4'(=B%)+9BARWQF:8774999BH?CpSX?1538@CIGFGHKE@8MJLaT/343434333443334334343232343223223323232323234323234323232323232324333232333222323 223332333232323222333233233223 23332233233232 323332233232223223332322233232223232223211211212122212112121221212102211212112122212122112121210110101 000100110110100111010010110110101011000101001011010101011011010110101011212101 021101112111212121212221222121232233222322232323234333434443434434334443454454545665556565656 +76766677667678878789878989899889::;::9:::99:;:;<:;<;;;<<<;<<=<<=<<=<===<=>==>>=>===>?>>>@?@?@?@ABABBAABCDCDEFFFEEFFFGHGHGGHIJIJIJJIJDKJKB@D?96/.())&!?E&+/++0589=10270-Q0KC=8=@;DCLO))=KIA<45246200/12013222578:94256:;::77977HNLH?(#D?>>BCCGHJIKKP&&&'('()+)()**+++,./.--,-/122300../00/12134676765556769:>;:AGCFFHHMMIGFEJNIEEKKPUSW1g]L;77787689<;:<=<;@A@EQXXTTSPNLLGCBFHJMOOPQQQNMMNQSSVVZbhipkb]YYZ[[^]_chlvrppl\"H0[dxioMuwxyy=-{{yyxyy<<===??@@A@@???@@AABCDFGGGHFDBAA@AACBCDEEFGIHHFFEEDEEEFGHIJKKLMNONOQTTTSQOOOQRTTVUVVVUUVUUTTTU#WYZ[[[ZZYZZ\]`jx{rhdb_]]^aeffa\[XWVVUUUTUTUUTUUTUTTRRRS0RRSUUWVUSQNNMNNLMMNMLMLLLKKJIIHGGGFFGFFFEFEDDDEDCBCBABA@ ?>>?>===>=<;;u:uuvuttvuuv;42J6>FGT^POhhTskSSPZj]URYPVTePJLDRUOOhmbNGB9<>BGPWYTWhbUSfbhsrl`jAk[Y^]UNKTde]RJIb69@=<<6c^bSJOWZ00SPS[QL9oo3CKKD?ESQNC=?@>:>HIKD71/.7;8,C%/1-,(.XTJE?=FMUPA<59@H.3.&J'()>KEE@,::73232/-45750'&)0057+3/#&%&+'B1**3:*'C@@;A7.<>"EI&G:8;;!?;:62 "%*(;//654589A7+/004:>;82.+#-*+'.?)*11/31+-0294<=B"9!*1*$#"8630002763/,465//2.,*'!:=D"&/L"$%;77?@E<9;;260/1:B$'<:1'#%)-*'3842.033006:570,.1-)452 *4D=816G@<22402,.//1951.1.))%$'2<76;:.+101-.663)++*+-25-5;67<>>?%)#%($&$!**))%#,3 02$.03F';564'+))+;:<1&:9,>2-+/0/*&$#,,**./5A:HcVKA0&(=@>:ACCKMIGCBBBABCFHDAFHGRRPQ?,---56541.13252&(%+"4:=?BCACGUhPMXIHb/LIIST*-XY1b`Z]534a^`287;99983ZLGMTZQO=24<=@@B;:.DDF\|  +w6*'@/&!P42{YE8/%#/4"!%&%(! "0:72,19235/8478)/+'# !##%%!"$&%$'&(@@2/)3578::;==><<==   ! !  !"##!!""#$%$%&%%%&&'('')+))-2.0/347533448942263797;!>7.-./11/13326614<<<9:;889<999<=>???AABCABDEGHFJILOTSVTLIFEFFIOQSW]_hhgjqjttZtÅqgyT{w0D¼("a־̑omid_gfb]0.//02.Z,,+URSXYZaY\beh\HTORUX^_HP,&%=3;@@IQFC_njVHfXELGR^SKEKDHETFBC;HICCSSOA95/47:>BEFHM_XML\W]fh_QX:YKKOOHC?HQMIB<CD$$:68@881^a+5<;625AB@85640--3464*%$"'(( 0!#"!&JG@9506:A?43,-46 #1-:31,&$" !"! !&$(,)'$'#'&+/,!!##%!"!#"! .!!#"%(/"##!!% % )$" "$' %&&*## '62-)&B'*07;:9;%!+! .- 9"" 190)! =2-@B7'$5?491.&%,F&2%*    "#!!>6! +    + + + 231-.-' "!'(&'')+'-./54331.--+++,,'#&))3533%! ! "&(+.-/1>L94;/.D!/*,68;>#EEAC'%%ECD$)(+*)((#<10:?D;8' &)),),*.,0(#&%'(*)#)""%"%+'#&)/4<$$! ! ;:778:;8:6569421,.21347@C$5/   ')(&" +      &!J)      +  +    6?}~}~}~}|}|}~}|}||}~}|}~}|}|}~}~}~~}~}~~~}~}~}~}~}|}|}|}|}}}|}|}~}}~}~}~}|}~}~}|}~}~}~}|}~}~}~~~}~~}~~~ +}}~~}~~~}~}~}~}~}|}~}~~}}~}~~~}}}~}~}~~}}~}|}~}~}~}}~}}~}~}~}~}~} 뇂̜ƢѶ`𹤘ܹ̜ƴɽ̵:  +            f񍓩ث϶򃅂׳Kķ᧳ª憸B85458665-!#%&''%#   !!#$%&$#"!  ! "##$#$##$&%%&')))*-2341-,+*+--134665320468533568::;962/../38BQ[]UF<76211269:83.*('&'')(&''((()*)()'%%%& ''*-.--,)'%$#$#$$"""!!  %4555443437877767665323245442100/./--+-(){ɲЀǴԠ仯Э̭ŵҽμâ·øݾₖ󆉀ֿ̾ҳǧ󾰰Ǽ±Úȳ؊Ƚʹ󀇂ȹ⃃Ӏ˩˿ǭùՇ΅׎첈ǔӃޘ󙫀˾;ٲµ׀ө͵⼸ڨЀ΀揖􃋌􈒐W^.-+?-988<>=;?A@?A?:==AC@BE$%$"  9+5@?@;::AD=<8965568<6.G-&:6>B6(9>3./@KAO>5 %-796+9-46=@??@;-**'$+/3.,-00_2653693775542347786676846_>5+(%!""$&OJ4 9+?#",29GBSXND;8;;<97;?H>@lDOB.15;ACIFDGKLJ9HLGNhZI5334343434343 43334333433432322333234332323434323343432323434344323 234332334323 2333433323 4333432344432343232233323232323 233223332233232 323332333232323323332122123232323223233322132121212221212 1212112112 121221121121210121021002121010110101001010101110 1001110101001 01101110001001!01001011100101011011101000101001101010210010110010001 +21121121101 011121211221 2121101221222122212211121123211212223221233232223233234343232334433444343433445434544554545554545656655655655666556757666776667776767 +88678877798 +977878889989:9:9 :99:999:9:;:;:;<;<;<;;<=<<<=<=>==>==>=>=? +>?@?@>?@??@A@?@A @AABABBABBCBCCCBCBCDCEDEDDEFEEFFEF GHGGHGHHGHGIIGHHHIbJJIIJJJKKLKKJJL@??@987,I%('$!#&/0,)-3596S547/TO@O;.BBHB<;@FAIL+*2KKE?542.2000.133410224343747;:7559:8036?AKKF3"@<<>@BBHLIKMM&)'**,+**+++,.0/.,.-,--/0222543322247368885567889;788:@DDGKIHJKKJDA@AECEGLLOLU0bO<:8876788:<<=<<>C=BEQVQOPPOLMLJEBCFFILOOOPPSSRTTR8RSWZbihoh`^\[Z\__affgozsmja")o>;}lmguzxy<<=>=> =z{zy<=<==>?A@A@#AABDDEGHIHFDCBAAABBCDDDEEEFGHIIHGFFEFGFGH.GHGIIKKLLMMLLMLMLMOONPQTUVTRPPOQSTUWVVWWUVVUVVU/VVWYZ\]]\\[\^_`fq|tmkfb`adfhfb][YYWUWXWVUVTU +VVVUTUTRSRS!RTVWWWURPONMONMNNLLLMLLMKKJHHHGGHGFECDCBBBCBCCDBCAAA@A@@AA@??>>>===>>==>==<<;;9;uwwuuvvyy<;>BE?@<1//1:9.''041-0(KPQC@!:;66!#$)*:138868;=B514228:;;<3-#%/0A36:%*43013215053BB##:",2)'('!! 7//1825-*672124++(&2-.5A*I#%"73279B857:57.+134.316-&$',0+*4933.022.,27/3(',--'1,/)28C>>33?05325+,&*.01469183+,%#)6$8)$*(()&%&,+)+//8A79aVO@=cjOMZWR`e7Cf318B:1Q?D C?GLJELOKJ@1-3@1LB,)+EmrDOBS!4+:jMNEN.KelQad]I:kN|QI.YY+P<254!)/41`/X@3:<"#;!"$)0/,-0/-*(&B84-&# #*8@'.-*()*TONKGGFB/'14897CG@?A9,.0DAEPJGDHGIGFDDCEINNKRRMUP127885143221176&g$!-47=BD>@DVeV^TLI\YKJI-3TOMR_ebOQc45^_`36:=;::94-LHJV^PS9-;E?<>>DB@;A==DD>=@A?=,./03736545630@JZ6610-./1/.TUTSRQPKLJOJHG@CIIGJPX^3.X./3241//0.MC>:<1)& )"  !COPGEBA>0=B@Gc (5-&AYEZH90*!8!##&! "//&=1&84;84458379 --(%  $#$'&$##&''('&"$)9=8/,!233659;=@<>>=    !   ""$$"$"$##$$%&$%&%('&''(((*%''(.0/24223443132242324477>!D;./../001021014247345<>97897799:9;:<BCDMHBD>PXQO]URPMMKFBHHJFKN=HF@CG>:LMF>>98<<@@BHJENQPPk[SY`[LJSXGEHFGIMKGE[A=;:657=4-)/5.1*G2I2-;9.  !"C 7      +!411/+,+& %*'')%&*#*..1:43164540-,+*.23/23/63$$" $# d + "',.++.>O=?930?=0,+"5226CFE7:I%%CEE$'+-,***$327AI<=&$-)',+.++',('*+'')+*) !#&$$" #!*/<%$  !9;:9887254<844--22028=B"5+$   + **&% ! +           #$  f!'  +        ,3}}~~~}~}~}|}|}~}|}|}~}|}~}|}|}~}~}~~}~~}}}~}~}~} ~~~}}}~~~}|}|}|}}}~}~}~}~}|}~~}~}|}}~~~} ~~}}~~}}~}~}~~~}~~~~}}~~~}}~~~}~~}}~}~}~}~~~}~}~~}}~}~}~~}}}~}~}~~}~}||}}}|}~}}}~} ~~}}}~~~}~}~}~}~} ﶐􀂃҃ӟ盳_䰝ൿŽ̾¹ϵ9   +   +     + +   pߌܢۜ싗¼ǣ¿ѰĿ3آʵ׼ڞpC65544;"$&''&$! !!!#$''&$"  "#$3&&&'&%%''()))+/3330,,+*--/2577754434678754468;<<:6204;HXfh^NA=;8446:;;83.*(''(())(' ())(**(((''& '()-//.-+(&%$##""!   + 646435887763344554321/./.--*(*A¼䀆򀀊ԨȔ苆ضϰбľ҂߾𸥦ȃư˼ʮƺՀٲϿ»̻dϢ鼧ƮⱵ̾ĻDZ큀þ¾Ůީ̭ջˆے͢򂠠׻Iכ˺ې멏͛əڏ򀅂Ⱥؿ÷؀̷ʮʰ佽²dzҪڌۆހI׿᎕L-Q+?"%16:=??=>@=<87:?=??>@D$$%$#""?4+8AA>>@AAB=;:7679<@76+N=57II6`VO@0+3<@BACBENPHBFLGMdYM34434344343444344433434434344343334 34333433433343443434343432333434433343434344433434344334323434343434344433343434343224343 223233232223232332322323222322322232232323232121212122121212212122212111221211122112212121011121010110001 01101010010100011100111010101011001110200110010101012121211221222112212121112212211211221212323232322323434344434545444565655456565656767677676787887 88787888989898 98898899:9989:9::9:;::;;;:;<;;<<;<;<<;;<=<=>===>>=>>=>>>=>=>>? >???>?@@?@ABBAABABBCBCDCBCCDCCDEEDDEEFFEFFEFGFFGHHGHHIIHIJIJIIJKLKJLEG:?<892)I%&!?#%*-+*+0697M741,FDK4R?@HB:889CEGI*,+ILHC?73200/0./54441125444543:86595345;9424=GEH<+$B>:?BBFHKLML&'('))(*(*(*+++,--,/1.-./-/../.1235446576574466545578989<99<@DACECDGKOPLKC@>?CIIKKHKV]L;97677888;?=<>:@@=AENQPMNNKLMJIFAAFFFHJOPQQQST[YWWX]_dhxjofa_\[\]^_beeilqsqd"1jƝArn~sbqwxwwx<<=>??>>>?>=>==<=>?>?@ABBBAA@@AABCCDFGHIIHFDAAABBCEEFFFEFFGIJIIHGFEFFFGGHIHIHHJJKMLMMMNNMLLMOPTUWVTRQQPRSUVWWXXWWVWWUWXYZ[]^@]^adglxvsolgfehijgb][ZXXWXWWVUUUTUTUVWXVUVUURRSTTTUTUWXXVSRPOONONNMMNMNMKKIHGGFFGFFEFEDC DDEDDDCCBBBA ?@@??>>?>>>===<<;<<;v;v?5667miifXS\Zg{@yef^QP9FC@X`859_JXYKKddj[[\^KLQSQRPNTRIU`WZ`SSXUHFLNPZUCEJKPPVhfb__gD~hesaMKTZ[UVV[h`fgd^rULHHHFR== .BH<,()+,-.---:>D$&B88;=B!:96<##$*)935:99<=AG:2720567771*#6')CEBI*+0300/.04264@> "6 &//-..)'(%;787221/551.54+*)(!511A;":>BB;92;:7003711,*-.0+102(%$%,2+,6946..12/-3<72(%'+(#42237=$E$:461300-,+(0-.125<374)-''0=!9'( 5:;;1/056=0-,--.768:46432,01:6782(&"',-+*,1-&'" ! +#!!&(,-2;;4855;-:A11)&+1-++,.1(&',4-6D:\^RKD@ajOPOU^c^;B8H-CD=6U7M'Mu2<:\SCA14SH#VUMJKRYXROE=9/:7 6'!%):b@5+&&=P?iFG>yf'Uyljq?ABtc|9UTUSSQNJIC>8/009&0`__ZE9A#F?5"%(-1,,00/.,,+*,,+))(((MG%%&+.+))**ROJGFGA<1#*).77?8DD@EFEDFEGHEEA=ACJQNPVNM8*:;:87513132136)%&"(3:?CHE>:5H>.<=5:86:420,,7A7",5<%'%&&%'&$+# -"+(+1((17<0.-12.,'+/,.0-*)+,.0.,-20.1-$'()&$""%()--++.-*01,,.,/.*($%KN +)  (# + +!) ! +  + !(''&#  "##P"$&')%&&!#$*C,%40!)-+8HK@4+&%)0(%09EG-WHC5$#,12378:422/4459/-)'#  "!""#""&%#"%##$$('%#'6B11&421367;<=<<; z ! "" ! ##!!!###$"#$$%%%&$$%%'%%&&')(**'(*-1101124677661../0557667=B900.01100155335284146;;:79978879998<=>@BDEEEDFFKEMOMOSSXTPQOMKKLILORX_fkomo^akha||gk˲¼¿˝{qgh4502530028;30Y`i5200)--.ZV^^SQUNT]3`QURJJ/;:BHBIMABED<;ABAJF8<@BFGJ[UTTS[;<98A/NLFCE&@A?C<><846440/159=DD89@><3320.,,+.6,&&C!"%+$!%))'%!)%<@B<;-/C@BE84525 (+''.#!%'"!*" +%7.*#& $#+)!!!"$%%#%(()*" /207  !"(!!"$"  &    "!!! "  !)!%#/50.**;F3348>C;!'& ,)(8--$'+,A:225;) +'30.--.(# $)*),-''(#./,2122546830+'(*0844722"#&$$" !"" !$*,+*.6>@%;58B731*0::<<:BDI>5E)'BGEA%'*+))(%!836@H;>4!**+,**+-1.('),.0**-*-'&$#&%%#$"#!#-2># : <;= @<89884<:662111368:A#62()$ +  (-&% #%     %!#"! " (  +    +    +  #+}~}~}~}~}|}|}~~}}~}|}|}~}|}}}|}~}|}|}|}}~~~~ +}~}~}~}~}~}~}~}|}|}|}~}~}~}|}~~}~}|}~}~}~~}~~~}~~~~~~~}~}~~~~~~}~}~~}~}}}~}~}~}~}~}~}~}}}~}~~}~}||}}}|}~~}}~~~}~}}}~}~}~}~}~} ﶛ󀀃ݯ΂⎨⋅_Ԫ୿斵׻ϻôγ!  + +         yɂĀɽ鋮зҮſƿ0Ǿ߆望f;@567!$'')(%"  !"$&''&$"!  !"##$%$$##$s%&&''('('()))+/2541/,+*+-/1588875435788875568:==:5323239@Oanm_L?;::98:>>=72-*(()*)())(((')**)))(('''&'(&%'),/00/,(&%$$%%$%%%$$##"!! (788987556556543320/./.-.+'(D߄֩μ̕ˀ̱Ũĭş򪀵ƳøĿؿӀݙɷ׻ډ􃉔ʾ巴·Ľ삃ǀƾ샑ޝǧۧ𙞜ʔ̆䡝Ɛ킃뾹©Ŀٴ̿˿ÿ툄Հýſľ񆈃κӺµҬѬ 싔Ё򐤧玒+D)BF!(/5:B?<@A>9788>@?=?@A!#$"<(1AB? $>@C8;;878:=?:K+D87:?MC+#-2 .#CK31% #5$279@AAA=3,-,+,,..2542.,,1/150011373668:7;;62::N71&%"!"$JJTD#()%"%#':96BDEKLHCEJJUe_4343454 +34344434434 3334443434343443344344334343334343233344344432333434334443443433443434343432333443 +4334443344344343 4344334433432334333443433424343344343434334433344434434334343343334344343343334334334423344343434343433343432323 +2333223332323223232332323232232333222323232 3222322332312121122122312221221122121112221222112121212212212121 21122211212112212101210010101 210001221110121211101212101 +212211211012121212 1112221122212122321112221123222323212 33322322232234332343433234334334434433443554345454544546545<6556656665666766656756766777677767677767788777877897677887878989789898999:9:999::9:;:::;:;<;<;<;;<<;< =<<===<=>>==<= >>>=>>>=>=>??>?@?@?@A@@@ABBABABCBBDC DDCCDCDEDEEEFEFFGFGGFFGHGHIIIJJHHIIJIIJKJJIJLKKJLKU:<=:960IGDACA%,.-.-.393>1-+&E*YD.D<<874=DE@FBEDFKMPRTPJED@?AEKIN]\K:77688778<==:=:?>=AGKNOOLJIIIGIHBCHIIHILNNORSTZYXZZ^hl7msk`\[Z[_`$ghmqqk.xdÎ3zztUmKyy<<.?>>?>>=>==>>>??@ACCCAAA@AACBCEFGHHIIGFDCCCBDEEFHIJJJIHHGGHFGHI'KKLKLNNMNNOMMMNPPPQTVXWVTRQQRTVWYYXYXXXWXYZ\]^_`behko}uqomlkjlnlhb]\ZZXXWU VWXWWUVUTSSTVXZZXVSQQPPPONOONONMKJIHHGHHGHGFGGFEDCDDCEDDDCCDCBBABA?@@??>?>=yx<<:<<= <>===><9<21989?GE:256:B!=:>>""$**916=<9:<@G9031154662,)cH>56$+/0020-.119>!;>!7"%+1./0,**%7:972/-+011/44-*('%9.-59"7:A@>;4670`Y`5O7H,(UOIGLRYWVRN(%-*).6SS@BG7IH@DRM>-Qb1cOfcoJJjUn9SRRPPNRVZ\YSJ>74.,,.,+4'\_\WQFCBB9:8 &)$,-10.-,,,./1102343.,*)+,,SOQRMKIECA@;4 $!$)1258742?B37.7=;?IABLMKPHG@29<:867643m44-(&"!5=@FJHHHEGK[/M^_MX.KOUNIPOVRY\O[94242b_49998861QKGV]RTQCFCCEC@==B>;=;<<>?>EGBC>:8?<8059743321:M]122.-,XYXY\ZTSQUKGXSMKHGGGKPR[5500*-.-,+,+,XFSG7))+!'$(JOJFD?DNIEA9)-.)"=<2(1.-<6!I@9*,*2,($(6&$*:BO.5QE5)(47/6;:=DEPf]y 5$0m@S2!8W$YTE<1,((?@=510 !"%!*"):.!87423.756749-,(%I# ! #&)$'&(#"##($-*%!#4B-2,574588<>A?!  !!"! !!!"!!! #! "$$#!!###%$#&'&($%$$$&&%%%()),,01.20454778996300./03669BA90122210026433514304689:88776669988;=@ABDDDEEFFIJJKMOTT+T[XRPPPOPOKKIOT\chrX`kj\MnwaWZ_ч¿ſȿ%ƖDž|pg_Z472355213640^8@:V1832745-YUcTMQUf5?HGDNDDHGC?FO[gP0>ITKUfeTYQOUZgaRiiCNIGA@ABHIKHJYWBOK@68BG>9>79>%&?A50:<9:524:879::9:5/25B8<>87>5:"0 6'5*#"%$&*&-&3$(.)%!# &*)  &!"$' $*&&))*,!! !0*!$ ! # #$  &$!## !$% #$'+ ## %$1//*-R?120<=>B')"#(-1/5,.%#:5339=B?BB=& #$! %)"--$4J-?->;?)(G<1E%767678:<>@?5) :?>;6*%!  ! !"!1--0/-.-,*)$  #$$",/"%!&$(0*).43588732+***.7634/-'!#!!"" "$" #'+...-,39E#4>C291372-56<8?C8A*'$&$FG'*('((%":43AI==;,+*)+*)'&**(('('(*)/0/1.,&+'$"$#!!!&4@!#" :;;<>=:97<60?;654200479=$#7)0) + + &+('&!#)$!   " !!!!#)"       #  }~}~}~}~}~}}}||}~}|}|}}|}~}~}}}|}|}|}}~}~~~~}~}~~~}~}~}|}}~~~}~}|}|}|}}~~}|}|}~}~}|}~}}~}~}|}~}~~}~~}|}|}~}~}~ ~~~~~}~}~~~~~~~~~}~}~}~}~}~}~}~}~}|}}}|}|}~}}}~~~}~}~}~}~}~ ƞū]ШѐٵйIJ˰! +         !E׎ŻԲȿ+ǧڣ慈ڷyF9>"%(**('$" !!!"#"%&'('%"! !"###$%$$##$%&%%''()()'*+,.15631-,+-.0259:987545799874679=>=:769=EScjfVD:679;>ABB@93-+(()**)()()*)(('!&'*.00.,)'&&%%%$%%%$$%&%$##! ! ( 7;8876664332220/.//.-,+%9ׁ׵ðڗ΃򼳬ȸѾϼـʥôʼ̿ʴüۻݷۛҏӅ􅍖ހʼίɽÿè뀐Ľ󄍔٥횣ΕܝĬ֕燅Ӑۡق󧐧ٷ猒窄۾ļ爉ļ;ÿ܀Ļ肅͹׵–Ϸ臐͘σ&AJ*  ,-3==;=B?879>??==>@ABDFFFGDD!:0?EE$$B>A9>;:79?(G<::9AUF4#&%,90/8"R#"6%(",36>>?<.&+--*),025511_1//2135100/16547989;;76;9N:2%$!!"#BEXJ7+*(I%.$@GEJTQJC:97CG375=EU=+`N?82 0GC9?FDJJGEFII\f]1544343434 +5443443433434343434344433344543433444333434443433344433433443434433444334344344434344433443443434343334344334334334434343433443443433434443433344334344433434343334344343434434334334343434334433443334433343 4333443443234334343233323232233323 22323223232332323323233323322332332233323212121212 1122212112112 10121212112221212101221211121 211012111221212201212121221222121/2121212112112121122212221121221221222112221222123232221232444333434443344344334434334443434554654445665565656565655676767678787899888988999:9:999:99::999: +9;:::<;;;:; <;<;<;<=;;;<===;<<=>= >>==>>>=>=>?>?>???@@@?@@A@A?@@@A@A@@ABAABCDCCCDDDCD"EEFEEFFFEEFFFGFFFGFFHIHHHIHHIHHIIHIJIJKLKLKN==<9;94-OLC?A>#+./00/1756KR)BH-+K1HAB==>B9AHHGK**)APHDB9002112114314203526:>==<;:300148450.=B>EJ7*E@NHEDEJMOO&(()))**))+&(*+*+Q*,-++*./...///0034324233554687;===<:::9;;:<=CCBD@BCFJGJJMMIKIEFBGFCHY^M<9978::88<;[=@>?AGJNONJIHIGFHHDBKNNMLLNOPOQTWUX[]`hmnpui`\YY\cd``dfhkpr^%irka{bwo啇\g|==<=<<===>?>?>=>>@AABBCCABAABACDDEGIKKJIFDCEFGGHIJJKJIHHHGIHHHIJJIJLLMMNNNOPPQPPRUWYXVRRRSTUVYYZ[YYXYZ\]]_`ac"eehkpwrpnlkooongb]\ZZYYXYYXXWVWXVVUT UTTVXXYXVSRQPQONO +MLKJIJHIIHGFFFGFEFEEDDDEDEDDCCDCCBAA@@@AAA@?@?>>>=<{=<==<=>===z=<7472+TQI=M)6G@3/00(&.5:51/-45-2;2/1.36981816DD@.9?9::@33:>==>>GD#)+;29>=;?=8B>650162/66.*'$ FG=.4 &./.000356A> = 7!$*.../.*$=36;4-/./311132,&&% ,,/28';>A?!<034;744512)(+.:=>;61+($(.(,4:6<> %7,(2<7/(+++('%+5%;5H>D914211575/.3--/06<7-%&$ ",@,":#&?"$>978ACA9886763--.+()),0(((DC&*/;320+)***+)"99:7; &+"$*&4347- *8,,.43223887A//3*316&D8WQPNLLIHNLXaabDH@LOQ7k:6G8I6/VD<7QHPHI\76;FIHHQRV360/fniUSC?DD?=?=426332133448=M^a00..,---XZVURV[RAV_ZOMKJEFKNLT22./S./.-,++-YM]L=0#""!=MJKEAALMIF@+'61% "77/),.:M7/4=)-,%21/,50(&"*/370%+2;::??;8311/;?:>6>"&*%#%,...-)("1#&<>2'2:850)!!%)(5-0.,,+,**++,,+41-,0-%&&+-.*",$#&'$'1,'**,-/26-$!#$&&  +   !/$   +  #"! $%$&))&''%#((:+'..;460D87:DC=5,(&.5#(*6?M7"PC4.$44,2;9??=@??  ( "# #""  """!!!##$%%###%$#&(%'('&'&''(++1232/4336376664521204426CC:113233112433435543457:986568758977FH'.XCFC?IC=JG>@AGE@GCD?::>HB:D>4DG>;>DRGI67HTVXUUDMgjXPURK\hPLJEG>DEEC?DDJ\C;638DG;=556755510:<:73036;::3924/.59:>876.*(('--&&##"*+)))'%%&# G@GA=766?>5G(71906$%#!<>8&2#.) #  !(#(7;4#&*%%"% $$)** "&$#&('.,#!&*(')(',& ,/&! "!"# "!!#!)!'! " """""%& %!# "..1011,-0/8??@+/#()+"( 0#'$,&'1#9224:;>$(&%FEF52$.0 &$+=+7&$5>!07?JI+ *$!/276<=@A<8:50.0,!%1?C?8  + +  !! !!840.11-,-,'%  !#+,)+!''-0+(/1355752010//65453-*""!$%& #&(../30/5>&"B>4=":@81,/0:81@=>KJD'I$$'))(((&!722=EB@7-!+*()('''#"&)('%'',0-00+*+( $!" !  %*6DD! ;<:;7:?<,;C=6664//3669"!3:/<." + +   +**(#!))&#  + $  + !! $'"  M + +       ~}~}~}~}~}~}|}}|}|}~}|}~}}~~}}|}|}|}}~~~~}}}~~~}~}~}}}~}||}}}~~}}|}|}|}|}~}|}~}~~}~}|}~}~}~}~~}~~}~~}|}|}~}~~~}~~~~~~~~~~}~}~}~}|}~}~}~}~}~}~}~}|}}}|}|}~}~}~}~}~ 꽑Ǻۂ󂑑\ʪņûʯ9    + + +  +#RƜ˹™½ұ/ÿx؀H8%"&(*)*(&"  !"""#$%%'('&%#!""#$%%&$$%%%'&$&(^))*))+,,-046640-+,.0368;<:754479:76667:>??;:99<<<@GTagbQ?7556:?EHID<4-*)**))('(('(()*++**)(())(),010.*('&&&%%#$ %%&%$#"!!  67778876752220020/.--+,.A~߀Ҽܕ܂âȾƹϧ̸ξ˵ёڱ􆓾ƹܞĞՁǺڋ»ɦ􁂇ղ牃˴ùӔĵހĴقݪɨآֶȃЇŐûķ˹ùʿʻϱҠƸնզɂ̊(C=$ "$#!! (.04;;<@:968<>==>?ABEBCECBAC@C36GH'#$C@!><;9;;B'OF$!%)(+5-6&A*"0/!#129=8&F).-**,0234322d5200243021,0465488::96885F:2$'!BDDDKSJA'+LM2%>DKRWNHE;:9M6-627HUR*RL<65).EC@@FELL9DIHI`eYG44434543345455454345534343443434345434 +343343344343454343434344434344344334334434343434434343443434343435433434443433544334434 +34434345443443344343443443443343234443433343432322332323 2332332323323 2223322232332321222323232 122122123221121212 12221212212112121101221112221112121211211212211121 0111221212221212122121211121221211212112121112112212121211222122212112 11222121123233233233232333223432434333443443334554455444545554565656665655566656656556 76667667766767787878 78889989988989:9:99:;:;:;;<;:;<;< ;<<==<==<<===<=>= >>=>>=>>>?>=?>???@?@@?@AA@A@@@A@@ABABBBABC%DDCCDDDCDCDDDEDEEFEEFFEFEFFGFGFGFHHHIHIHIIGHJIIJLKKLLKLLKLKLPc@:9667.(OD?@><'/1//23546:KM)+.,M8J?=EHHJ')*7MH@<;2023221233473058425;<=:>;5/./02362/cE>:OO9+BAEDAJJHKMO(*()**++*)+',-/--*-.-++,---.-//00131223965775435998;;>A>=<;9>FDAAACGGKHGGJB@DEHJFJJHNW]H997799:98<:=::>@??@EHJOIILKHFEGGCEKPQOOPQSRQP:QTTTVY_hmqqrh`\ZYdjgdfehlnut,=ksrfJԟЛ^fg|w{=>><=>=>?>?@@?@@>??>>>?@ABACCCBBBAABCBDFGIKLKIGEDCDDEFFGGGHHIJLLKJJIIIHHHIJIJJKJKKKLMNNOOPOPQOPOPQQQRUXZZXSRQRUTWYZZ\ZZXWWXZZYZ[]^`abcce_ecfefjpyvsnllorsnic^\\\[ZYYYXXVWWWVWYYXXVUVUUUSUTUYZ[ZXURQPOOPPPOOOPPOPNLLJIIJJJIHGGHEFGGFEDEDDCDCDDDCCBBBAAA@ABAA@@@?><>=<=>=><>===;<;xxyxxwvuurqrppqsqppmmosnaB@>usnonpqq}qt~xws9;:8wsba{A95=D<955h`_^^^USRe[LFFF@qHU17fUEKGDDE[VLJFGJLMKNP?GHLQPYTEDJOO[KAMKK`e[KTZ\OS`ZU^XUShfc``aWPIQVWYSNQFOPJ^NRIFJNNOLMLIGGMJ@CKNIJEDHG@<>;1<>=@DDBBDO?2368<90]b74/.05502669N5QSORMHMIT/NS,KIIHF(7CA<:91,-RIG #2CB966.'!*899/+-6107820/.17>?/:0:PVD&5@:<=<44674.0;@===0+)"A?@ 6#+/0-++)#=2892,01/46200*')'$'",=*;85;86.0,253/4335)%%"79(6:660*)')+($!8 %""(.473,4//4+'*-&+/002/66461023645B?+SWQLVb_FOIR]cXKN4_^EF+]LTi\=L97N>URG=H[4B: :JM[gWeNPKUL:e0[Su8059G.-9T5T27D,Dm8Q`*BHBJR>/.0-+($!# "'#IMNPSUY^afea\\_0YDAS\^`YKHE99$#(-.../.)+---//2/1/0/|-..WWVTQJFA=<;2+I8<6B#*11273.18@CE&>@CKIC@@>>@EFCCFDBBCFGFG<86.4:983,-5:;;=B1$'&!(8ABILKJGITY4?cMQY27`MHFGJMUIY\O`7UTX`29;9;2QGHQ\^YML=@BCD?9:756;=@$)-*%".--.-**&$ +#2=73%%374/& ""$'),-,*))'&',,--34/+*,'%+,++,*%$'((#%,((+*+/)27/AB""$)  & +  + + +  # %%$)''&%%&&%4*',/./4=6(<<$.4:@EA:6,)'5(('/BOK$D@2/)3215;;@@2;AAC [e׌ %+"2f)L | jE931-'#I?73/.! !"$"#&/-1)?965768403497#0+%$% $!!#"!"(')',.(#!"##%*'&SA<4>8%:8<9398:><> !!"" " !' #" !!!""$##""##$#$)(%%'&%$$&%%)(),)(,312003447542600424537747=D8.1001/0226455466423479;76888778969<>@BDCEGFGFHKIIJLMSUXW[VSPQRVWTRPPRVZ`gElhd^dJbp#ſŹ¿J٧E@?sojigijivrhiviic1344jiXWk91*25-+')TQSUVTFIIWvSFBCD5~qBH&+RJ=A<<9;NH?@>>CEEBEF5<=>A=FE:=BBCO@?HA?MLL?JOKBDMIDQLKEUTPORRG?9:=>@=4()("CH)(##"&&#%('):*=A??97<;D(?C%=778;#&$"!"!<23 *)# !""#$&!.!+AK9$-'&%"!#',/5% #$%'%%&&%,+&$',*&)*'*$#%!"#$,$" " "#$ "$$  +!$#""$! ! $-11/6@8-3-5>B92681% 1%-92)&-.' '0$69;CI:=24160%:02B!!%&#$327&&%)) )05:>BEGHLJEAAA $6&%7BEHC1)& + +  !!6996432.,**#/ !$-/.'(*00-/010269667511013.0'# %&'(+! %&+01.+.7A&.G59@#'E5/-.24:2=B8E'<;?F#)+))(()"823=ED=46&*+*)&#&)'$%$#"'(,+0.)-0*$$"%$"# " ""!#)3A!  ! =>;=@B>05:"?;86:84576;?<38;=835+!  (*((&"#((%$p  ' % )'   +  + '  +   ~}~~~}}~}~}~}~}}}~}~}~}|}}|||}~~}|}~}|}|}|}} +~~~~}~}~}~}|||}}~~}|}|}||}|}|}|}~}|}~}~}~}|}~}~}~}~}~~}~~}~~}|}|}~~~}~~~~~~}~}~}|}~}~}~}~}~}~}~}~}~}|}}|}~}~}~~}~}~}~}}~~~ 㯧쀉Ӣ򁌓aߗհØƮͭ=  +   "0뉞񈅈ޙǶčҴ¿þ*䏎޴ݛ׽ɸH>= !%(*++)'# !""##$%&'('&$##""#%&&%&'&&&%&&())*J+++,-047971.,-/1259;<;855469:97768;>@@???@BA@AGTae^O<6578:@FLNJA70,*++**))( )*+++))('()*,/11.+('&&&%%%$%)&&&%$""!!    75532100//./.-,,Q`ŽҾ䅄̬ɛǸ̽ʵĮŶ킍󇁁ijŹ󁁁˹˺܃¾ϲえݾκŹ։ȓż爣𜮶ШޅكÿрžΕ׍ᵓܨኵϊܘƴ򄊍Ӿг놅׀ƿƿùȥӒ¹Ψႀх+$5 $$%#"!!!$067::==:89;=<;<=?CC6439FPI&$>"=<>=?>='(<6/<>@G$FO3$'')+02/37+##+8.4.("#*/25)J(./.,,03011024_410/2420/0-004659:;:84;9`>:2*"!"ED>HOA;%8-&*$*>ENQULH?>:?M/189;IS_7>C:5300?A>@DEMVD?KGJgcUC43454544544545454454545445434545454 34544544433343343454543455445434543434545434343434344334543454534344434343434 3443334433343 43343444343433433443334434434433443234333232232323232323233232332323232323212121232121212321212111211122211211221112121221221212221212121012122211221122112121211221212122212122321222122121212123221232223222322322323232343334343 4434443334545455455454555665445656555656 556667665666767676678787898 +78988999:89:89:9:9:99:;:;;;:;;<;<;;=<=<<= <==>==>=>===>?>???>? @@@??@??@@A@ABABBABCBDCCCDEEDEFFEEFGGFGGFGGHIHIHHIJIJ +KJKKJJJKJKLMKLLLPF@;7652,((G? 7%,./-587357K/+//,T@CFIHHIKJHGEFGFDKPSRQRQSUUSSSQRSV\bjnrsda_\]fkfgkijikrr)|j㍑yƎ][z=>??>?>==>>=>>?@A@@? @AACCEDCCBABBCDEFIJLMKKIGEDDDEEGH#IIKMNMLKJJJHHHJIJJKKLMMLMMOOOPQRQQPQCRSVYZ\[WTSSTUWY[Z\\[YYZYYZZZ\]^`aceeffefghkq|vspmnpssrkf`]\[[ZYYWWWXXXYXXWXVUVVUUUVXZ[\ZXSRQPO POONMKJIJJJIHGFGFFFEFEFFFEFEDEEEDCDCBAABBAA@?>=>?@?>>==<=xtllkrjionytsbds}yvwpzzagf8520487647jd]RKebfaXWKGlO<@DIY1^RFFTHIFGLNQOUWQMMKORCGIGDISGLEIMKVEHWdj`h]DMUUPOKM\ORV]]]ed`QMLGRURPNKG@9<9DPCA<=ABQM=46216=;?61_ZVRU/.231/,TY3WNIFAEAFPN.+,UKGHEBA.>?:51))*&K&'/6FC?95/&(26862.-.,(3876425:B@6A:AMMHA4<87<<26:=?ADIA9;":>E?>>:;;746;65+2155/1558E2%'  *14793-,%&&(%%&!! !! $2D ;:6*-2,02*$+/.11178782//163='<P+7SiUfZ0LA+4L0D=:*9C(:D><4RGNH%%IC&+...)%/1;?EB8=?HKIFE@BA@DDCDGB7548@A;10)-5795/2999?=<;?=9667:=?B=>CEB78<:55534567644:SX\.10.//]_`]RE@PVTXXSOQOTPMILU^^0.U1]\^XYWZcTL\H=:53$#$ 'EKHE?A@LLGFA+#.2-$"!'+ 7#"#+N-G..$'*+&(%=4E@'$%&+1/+*,039834463&9@;1E4=$(./+(.,../,,*#"0 (-05.-060%BA#&$%)*+-+,,*()+*-.02.'*%/$(01-(+-$6#++)'""# 4)*-%#!!"%J ! "!    + +  + +%"%$())&&#)*G.-'/2+1;.% !#+3?BF?91/'+8!!)+3DOZ3490,)% //238:AJ:6CAF_dzg-x:R);P xH950*$"#>6'"%%!#!08-G65896:54546801&&(#  ! #$&$'()*'('%%"%)'&&&UBH8*26468;88<<<!!"$" ! ! !"""!#"#" "$$##"$&%$#$&%%%&'(&&&%%&%&'('())*/242110136552/23/12236m7=CE7./1///.1244554:5534567767997879:878<>@BDDFHIIJJHIJKMOSVZ\QRTQQW\TTVUVWY`fGjcp}~fa/b˼0術=srjiflhikgslo__fojhgaeiY`^3.)&(+)(&)OPQHDZSYWUYH@^I;=@BI&NG><9?L@D?CGHQ>BNSUQQJ:CGEBB;=HDGMPLMRTNBA=7<=999;:60317<=<8:96:7793..10,/643610541,2@10++00>;1+-(%&,+/($HGBDF%#$(''"@A(D998463:E?$!"C>74682$&#!2#/+(# !!()"-,1;@<2%*%%'$!%%&).4,%'),*&%/%"$(&"%'(,$$%%'3+   #  $# "#! $ #)%#" !!* " #-131>;@'3A3;;/E>"+5?0)('#)'2,(*+1. 0$?BK.L?7:'8"-;.<0'-!"4,8&2 +  &,03:88;=<:89<>3+5=AE=5G;6,'-($79 "!6387/**..-%:260,$ !+/3.$)+466772(665682)%$(,.' %&()08( "&.*13:BPB)15C%>252025<58>4F(E=;(&%***())$;58=C@8./1(')*(&&%&&(%#"#$)+-/+),-+"$)&#$" "#$$##(<>> ?ABA;1+8=;==;898=7545:>?4 <<=8:9=AC>@AC@A@<497/=JHL%AB;?><<8C,B912;;E%DH*7%$,12+(,' &&%**07.232.)'/+GH(.320/./021/034111253011.-..05669::828oS973- ?BDHDN3<813<*''46?GMQTJGB@;;O2.:=>IS]O967244+@=<@DDMYUCLJKkgT:4 54545544454554445444345644545544454554455454543443445455445454454543454445455544554 +3445344455434543445445455445545454545434454544454545445454545444345545454 3455545444543454 545434443434334454333434334433434434334343343444334334434 3343433443443334432343323334333433323234323223223323322332233223232132321212322121212 111222111212212212 1121221221121122122211222121211211211222121211123212122112 1221221112111232122323322123232223233223332323232343443434334434344344543434545445444545554546665765655565565566676766567677667678787767 8878887778 9:98887898889 899:9:999:9:9:99:9:;:::;:;<;::;;<<;<;;<<;<;;<==<===<=>==>>=>=>=>>>=>=?@? @@@A@@AA@A@AB ABBCCBBCDCDEEFEFEFEEEFFFGGFGEGGHGGHHGHI HHIIJIIJIKJJLLLMKLMLKLLM_A;66630)*'%*#,/)--29:534I4110-19I:=E?BB=BIGEECACEDGIDBBB>@B@EHEN_bM<<;9:<;???>><:E?=<>CGFGJJJHGHHHKGCJRSUUTTUWU3TVVTVYZ[dmmrtgc`\^bfdehghffnm,V\cq^zZr=>@?>?>>>?@?@@@AA@@@???@@@BCDB)CDDEGHJLNNMIHFEEFEFHIHIIIJKMNONMLKJIJIIJKL'MMMNNOQPQQQRQRRRSTSTX[]][VTTTUWYZ\]]\[ZY)[]]^_abdfghfgggiltyspnnnqttqlhb`]\\[ ZZYYXYZ[YYWWV%UVUXZ\][XURQQPQQQPPOPPPOPNNLKKJKJIJIHFGFGFEFEEDCDCBC BBAA@@A??@???> ??>@@?@@??>=<CC;32-+478<@CGA@?ISQ.+0UFBIF?F8?;5..--,,**,4=FG@:5.)05585.*'(-,5:9857== =9C>ACH'(1:::@A6<<>GEGNB>>>E&H%C@%$&.%;59==9?C#%%/103= ?>3*$ "G31<(,04512369:>;<;"#.2/.&++)(##954::4254/+0101./&!#2@### &)"9545852034F?;:?4'"#*2,/1.,:;9<3),63/-3.-,)(**(/-,>M'9,678<4/)*+./31(&!21!"/7?)%6?D:<<:;;914035-2400-02/5;2,/*#&/542541.+%',-(+93*('!!"##"!"$0%!#"7(3!0>3&#(-.024::86-/--4/AI62JYYORG=;GcOPYZgXP0SHBU>D6F:/*8OAQ9M=1]`@145AJHD;88:1UPD7EGG&('02;=66:9CCIIIKGBDDEFCB;3+36/#%4787309:;BKP=)-*)&!->AHHGKMILQMPQPPLTUWVZSTZWNRUOU`f\PLU368=<;9:2VKJQXXNHEIE=;:?<97<;::887879977F`101/\\[X[UHDGU0/WVUPNPPNILGGQ[\/.V0.Y\ZU[^bQQ\ME?946$'&!& =8&9(3,m..*+/69:71+7078@>1:.=&'.//-),//10/-'*%3!&*213-+'GA#('#"$+-+))+,-',-,,0--.)+%*/1.++*)),.&#!;5),&)&#$$$"$# +  + +   $# #%%&'&%!%S@*+'!(*+3-2&((% *',5>8CE=941)+:"!*-4BNZH1-.++( .-.48:CPO9EEEcfwDw(3 r)"I> "~F730*' $!!!%%# -"  )=34>9::72734:;)3)%%$ !!$&"!#.)('&+)*(*,(&#$(&'OnN>1 !77<;68<<;<:! "#%# #"""#"#$#"#"#$$###"$$$%%&%&&##%&''&&%'''((--.+.4321/,./0452/02/1214429EH;132/0214455754<57567:99:9987999<868=IQJKDGDDIN]AM^[DKBE==:FGC@CEXTVG?@=8>?:7879874369;:=9C<57468:4120.059575333-'&$#('),.160T+(&&'&&%=GCDC=F$%$$&GE>;3213663>H=# #?96x9838%'#! &/0*%!  ! ""##0+,14"$&&*) '(',-17,)**/0,*&$'(&#()%'&,!.!"!!"#)$  (   + "#'!%#!! !  %(#!$ &.604/'&-:4399F>2*$/"%)#%/3'+@&<&93 %$7?;*.%#C'.+A;#&!*!&$,5    %$)'&%&+-%#0?BA(*A@98<5-(348;515 6653//,"$&1:;60--.%<:-"..1$$,0)),)007;:;711213346410+%## '')-7:+ +!%/.,./-044897508<>=A=69<7=EJB:7>$&(-+*))#=67<@=4.,0,''()*(&%)-($$%%')++,*--(&%%)'%%$#%%%$%%$1A! ! @?@>A?501:#!<=;98;9945007?? 8;<:6999:=AFKJHB>83.,++**))*++*+++*++*)(()*)*,/233/+('&%%%&' &%$""##""!!!   !""!   876443320/1/..--+)=ǧ̻͡􁉍䵱݅ƿ˺à􂒞䇖Ӹ;Ĵ̼˽샔ѻιˀíٻȺɀ֘нႅĵ˺¼ؽ˨¾׶몽ܾ㥭վ׆Ș퇙ǡϬւμȿվ̷Ŀĸ˺㾞ȴǸܟ,􃅊+)&""&&&$%&%%$#%,;?<;<>9;>B@A?>809H)/1210100220.23_0/156400/-./0-285798637lJ:5.+#@?BCHI=C>$+,.8:?HPUQHEEC=3N9,:;8FQSTK4,27=,6>>=EANZRFIINjaRC5444545554565 44555455544453455445454545544455454 54454445444545454454454545454554545455445554344455545444544455454545455545454545454 +5444554445454545545444554445454543454343434343434433434333433443344334443334344333434353432333432342322323433323 21223332322323222323232123212121212211212221121212221222121211211222123212321121123212223232 322233222323233323 43433343334343433433434 5455445445454565656565565676667676676676676787878899898889:9989::99:9 ::999:9:::9:9:;:;:;< ;<<;<;<<;==<<=<=<=<= >=>>>=>>>=>=?>?=>>>?>?>??@?@A@@@A@AABABBBCCDCCCDCDCDEDDDEDDEFEEEFGHHGHIJIJIJKHJKLMMLLMMLMLMM=C>68744,')()#"74(*,-48865A4/00--ENFGHA?A;8=FEJJ()*.KDBA==432249887425;9420/3542235-02/,Y_D?9'@><@EFFIAHJKKFFDDCB@@B +BEHELRYH:98"9<=>>=<=>BFEFHHIJKKKLMIGIORTUXY9ZYYWWXZ]hnqvuhebdijiggilgegki(xoaqfdӀb[Jw<=>>>@@?>?@@@ABAAA@ABCDDC>BCCDDEFHKMONMLIGFFEFFHIIJIHKMOPOONMKJIJJJKKLKMNNNOQPQQRRRSSSRSTW[]]]YU5WY\]^_^][ZZZ[\]^^`bcghiggihhkmuwspmlorutqkie`]]\[[[Z[ZYXXXWXWWUVYZ[]]ZWTRRQQRRPQPOONMMKKKJJIIHG FFGFGGFFFG@HHGFFFGFGFFFEEEDDCDCCDCCCBCAAA@@@???@?>?>>@@@AA@?@>>>=>>=>=<;wwvuvuusstruva`zutvytywij_[foh||wUM`mwB=r[k\SW^`a`3546872334^[oOOLBMFYPNaWZP^cea`RCLKHLOPHHIKFDIILPROKLABMWNPLEHJKfi\``b]YZW`iinfdac]Y>;LOLHLECMOMLKKJGDA>?BEJMHIEHLILNLDCBHMFFE@B<=LUL<18:FG?==>@9df069557:01XIMT/0953/0.YPNLHA:;><@&&%'=D=HH++(E+?7>?2:?BGELMFBBAF#GG! !%#&-'=7>AA=AA?@%8435A ??5+&!?6,:B*.1562348;76;;= "#,/%"%&*+($#7356..48763510//.&$(*//8;D""=#$ 40,./2115:C?42@3&"$+3.1478<$9,378-)-**(())+/47.26;5-22792114)(()!#'),,30%&-3%'G6@D::A:;8:88:4A:78-0713//2/4<8.40,,//,.1/**.((.***/3+*)*,!#$"$(+.3<>92'3#/&;,%")./3739520,/+).2884.]WLLBxdD@UZ_S[e`JLFG^>II9P?>O>EB?4.MH\_U>3DI=E7#.=Eg`\3N=XAWKk>dOO4E72!&2L5?QDUBNE8$!&+)+-,)&?87778403+)# "$&,3951+1O\YN'AROSSOPXKJIMUONQUUT*,,0/-+,VC>F@A9246=B?DB<994WOPD7A'4ABEIKLD?==BKPD.)-*)$6:DGFLPWQQKLR2TIJTXUWL[baUMRRRae_XNNU_6=<<891TKIPYYKDDIJB>><::;=>BCA@>;88779>=<=<:9;=@=>;797;a3\YZVVYSQYGUW.01ad^YWNMIEKHHOSZ/]X\WTY.[\[[PQZTKGD:>3%$-)LQKOKEDFHHF=/)2322-)"+'1=&@K/1+,B58L-,'(??6@GD00n-0-,).59:4)(3-D1AA11*<'&//10*).**31.*"&#4'7625*,)'%%('% !,//'**),)+++)).40+*$).0.4-'###+*((**&%. $&%$$#' +  +"!!  +  + #h%#$%%$!#P;+(#'&(--/ '3(!#..19=C@:884-%;))+-?JOPC-%(-0!&012:7DRJ=ADHc`i90E  %- + +; rBpN953.," ! $"#%$#!*$-=7<>78842343792*('%$  !%X# #*(&&%'+,-,-+*#')'%KWE2&14;;788<<: !$$%$$!##$"!!#&$##""#"$#$#$###&'%&&$%(''&$%&(()*+*+-2336.2442131/.0/243355:?E933110/15657856>76457;9:;9:;;:;<=999==?ADEEEJKLMOONQRX[[\\STRUUXWUUXYWVX`e;worYrchwkavl{L Eӝ՗zwtqs|rfib_fhdstoTL[ag;6gSeWOTWWUO')'(*)&'(,TN_HOLBJBRGERNUKORUQPF>JEBFGEADCG@@BCEIHFCE=?FKEKHDEC@RMFIKJJINGOSOMHLLOFH01CC@=A:6<<9875678765898;79878459720.37555130/8=7,#)+45.,+,0-PT'))%')+%&E:BF$!(&%$%#D<8::3249<><87 @8898:&*&"")0-)$! "$"# "&/)34/)%)(&('*,36.(,+/./&$(('$''## !)&'&"*5 !!"  " ( )%#  + *%& !%!"!! #%!%F25.0,LA+(9<=4$7))&"+!-")   + 4CC:0@<>:549+++085268877,'0,/,$'(-4277200-H@B2&+$159<;<500,87:9:;;514552245475,"""!"'#!%+**/59.!+.,.3746106#7,-6<:<4@HG=6;944;C&,++)(#<65==A<:A2;; !"DECA>77404127:> >;=97;<<=?67<71-)"%  -203.**+)('!  $x$ )*  + +    +   ~}~}~~}~}~}~}|}~}~}|}|}|}}~ ~~~}~}~}|}~}|}|}|}|}~}|}~}~}}~}~}~}|}~}~~~}~~~}~~}~}~}~}~}~~~~}~}|}|}~}~}~}~}~}~}||}}|}||}||}~}~}~}~}~}~}~ «ٷ\?ӶǷýؾz  +      +  z̪Ϳُỡ¾ú/돭}صl狊ߑE   !$'+./-,)$" !!"#$%%&')*,,*''&%$d%''()(')))*,+-./-++-,,-0599960//1347;<<:867789:;98<=@EGKPRMEAACL^kjaOA;::;@DHLIE?=951-+*++**++,++,,+*(())*+/1342.)'&&'(&&%&&&'&&$#""###" !!!  !!   !""!   ! 985432121.0110.,,D໸ĬݕͽijӢ󐛸˼׿꿜Dzވǽ儊ᾱߑɷŰνՉDZϿـĴ͹Ѝك߀Ǵи¾ꭺξ򊀽ωܢ陒Ƙ͍ɹŨܿб킚®ĿҼѦ􈊎ƻ脗̲͸̼ɽఞ󅌆ۄ䌨++!&&'(#&%'&#*6;<:=979=BACA>?=:=AA??@@;9>@><5/AN#%=BD;47DF$775;C'.+JM07/'861$&+#(-1,*2&//26:5CBF&-011103/243.-20].03883142/.011037567545gG862+$=DFJN;4'$$)/6==AKSYLECEC@;C73>;9CPM>U6+)7?5/>>=>=>?>>>?@A @AA@ABABBAAB CBCCCBBBDDEEDEDDEEEFEEEFEFFGFG FGGIHIGHHIJIJKKJJJKLLLMMLMLMLMLGYB77;256++'"%#440+*+.67897\]/3,RS.KD>B<;=9;BHHIM))(CKEB?=973223458;7568867301e26631/23244.UV6;(E?=?FJIJKP')--//00/.0)-//.0/.../01/28433343425688698989569=:;;<<=?=>?AHHGIIJMLMNMMMHGLRRTTUWZZ[Z[]\Y\]f9rvsedeeioqp'rnppiioh*jQ>Ÿ۽XRa;<==>?@@???@A@?@@@ABBCABBAAA@@@ABCDDDED6EEFGILNOONLJHGFEGGHIJKJKLOQQQPNLLJJJKLMLMNOOOPPRQQRRRSTCUW[^^_\WVUXYY[^_`_^\[[]^^__`bbdgijijiikkny|tqmlmruwtqkifb`]]\]\-[\\[[\ZYYZYXWWWVY[[\][YUTSRRRQQQPQQQPPPOOMMMLK +IHHGGGFFFEG FGGHGGFFFGFEEDDDCDECDDDBBA@A@?@@A@A@AABAA?@?>?>>=zw;:uuuwtuuutsssw}nixppt~qm_][}evwXUN]bctC>c_`]YY]__c514784211`\FAFVwbe[o[c]YMPbRXXVG>EFHIUXJIKOMIDGLC@BA;HHXWN?FKI]7j_U_cr\YZSPq9lkcmw<;lOIIJI;ELLOPNLMDH?<=EHJMIG@HEHHNHFEFIC?DDFIHS]ZD<=9>IE@C@A;6]YR/66561WW\NRR+2<;:3..YQLLBLHAGFHJQH-.M>:>H&<@<71/,/--++05@KGA80(+19544-((,04> :<;A&*((?GCGW'"*=*C9CA3?@AFGMFD>??"$E#" "$"'.J>8;A?:=!B:D=:8:B!!A@4.(465-6#,-1543768773<=;? >#$+(@G%&,-(%%:55412<:<89>20/01+)**.6BD#BA=:"?5+,./35/056<=?<"5)"%,6.29 ;"7-469/.1--)++---05*0/:601101--,-&&'! !**,+43-*,1%)=.8;216330/38D87567,/6242.114E8+1,(+/10022/+,)')++)+*&&+1*##$$#"%(,4<97;9',7..6.'$+2/36/4311.,))-3:<4/f^ULA9Bm?IYX\Wblc/^VZ[Y%C@S=GEB=>;6SRoFVBB=4/pJG/:^aOA1BJRSfG@nMJ*>TAG>8J'')KT*% /9),-,*NOQRRTVYPXK>512+,:?ERQC=K\`_M9LQMS\Q9PLGDIPTWVMI%///.+SJD56HFFB@BEJKHGG@9:96/R*1;DEIIKRUUQUZO8BKKLKIFDEFGFCCFEFFD>782'61DMA9BFB@@HOL0",,+(!*6BNILI+TOKJ&*)%',.VRIRZ_WRRRO\^]\TRTWZ47<984VMGPXWLFEHGB>B@;878;@A>9897;;5:=AABIBB??AHA;:?;8OWPN\UZ[XV4MX-[Z]OQTOTUPMHIILRSUY]Z\ZW[/\[[ZRQZWKKLDE>+! !AC:67752+4*$-++;HI;Q2# .5* -5621ALG;ACMdW^އ h +VM"1k*.g[:77..* " ! %%'&%C? 47#>;67136445149;//*(&$! !"%(%&&''')'')V+.0.,((('()%EJė,'33358768:: "#%$%$$%%$#$%%###"!#%"#(%%%$#%&$$$&&&''&$%$&(*')***()(*-434447243444211/.0/0!149=E824211214566877<54367=;<<;;=<_=;:9<@@CDCDEGKJMQQPPQW0\[[SSUUX\^\_^]^YZbf=`jPKZ͖]`o΀Ѧ|wx{~~~y}kqb]XxgtsXTIRWYf95YVVWTUUSQN(%'*+(&&(PN<:>HaTYI^OYRQGJ^KKGG?R(PTLZW,.PB><=<09;9;<9497:544::9:66162337312353133586;A@1+,).:702-0-*LME&'&'('DBE?EC ''(%"!@;68/9;7<:<;@8!!<1,0=%&""+0.)#"! #!"(0/3@(*#+* ('',/51+&().,%!!$"!&#+&&$%*&&"!+ !6!! $#$)"! "%$&)&"!"##  $! '(   833.($*D'-::<6>I>3(-,. #$" ,/B&2'&"D./")7>/)(,1-:*$<,' #"  /4999;<<690# $)63&"/:@E;*7=9:=3#3,'%+56860+.-+" 0/21037<===;51110)F#$(1488:@BCAEI>+299:986557964575441*$# &.&%/2-,.484 (2./-51.+ 97/8AF>:;<:DDBA<:9?@&'+*)%<66<@?4.-0/*&'&#""$%))&*+*))('&((%)+.,01++(*.4+&&(%$9?85@<@C?=%5>?>A8<@;=<:7221297::8<<<<>85:9111+,$  + + 2,750-,+&''   + )4 !:$(!       + + +  ~}~}~}~}~}~}|{|}}~~~}}}|}|}|}|}}~}~~~~}~}~}}~~}|}|}}}~}~}~}|}|}|}|}~}~}|}~}~~}~}~}~}|}~~}~}~}~}~}~}~}~}~}~}~~~~~~~}~}~}~}|}|}~}~}~}~}}~}~}||}}|}|}~}~~}}}~}~}~}~}~}~ Ϯ﮵Ʒ۹ѷ\뼜˥ê}'   :煆Ĺ፷Ūƿ;۲諧ԹՕӨ}@  !$(+.//.*&#! "#$%&&')+--,*(&%h&&'()+*)(**,,+,..-,,,-,-/4:==92012458;===:7778::;;:==?CEKKHE=9851-**+,**++,---,,+))* +/24440+('%'&%&%$#""###! !" !!!"  !  !    721./1//*>bӷ򋑠򃋍̵ժہ»ŷѩ΀ɶɴӐ̼ϴ·Ưھ񆙭˼߁ŹɻˑՀȺƹȽЭijკѤlj훭ò͟޺żɰſǶۀƺƭƬİˀĶ޹О慠ꂅـ+0  $##&&('$%$&&%"!)7;>2>@:59A?B@?@@@=@AA?A?;;>!A><11L%G@GB42@FF678FSWUJBCB>=>=68<:;?OT@MB1+5?:6;?BC=CKFALHVcXT]b5454545554545 +4554445554545&4454544455455544554544455455445545455545454454544555454545454 54545544455454544455454545554554545455454545454454554454555454545545554544554545454344434545434334433434 3443343443443334434343234334343 22334333432322323 43323323233323232232321232323232322212123232232323232323223232343443334334434344433434545454655445 +656565666567776676777677676767878788878 998889898889 89989899::9:99::9:9::9:;:; +:;;;:;:;;:;<;;;<;<<<=<<<==<==<<=<=>=> ?>>??>?>?@??>?@@A@@@ABABBCCACCBCCCDCCDEDEDFEEEFEFEFFFGGGHGHIJKJJKKJKKLKLKLMLLLMNJ;I<5;6353.(AG$.5650+-24389NTE.-OX:A79<7465595343665400333565641///13470.7=2)?BGQJMLL'('(*,.24420,10200I../0/100112333233435689:::86679669:::9===?CFEGHIJJIJKKMMHGKPQSSTUXVX]ZZ^^`cep;wqeecdejklmmosmmom7yKcvQTwhhp=<==>>>??@A@A@?@?@@AABBBCBBAA@AABBCCDE1DDDEFFGIKMPPQNKIHGFFHIJKKKJMOQRRPNMKKKLLLMNOOPQPPRSUUVUVZ^`a^ZX[Z\]`_``^]^]__`b`acgikllmljklpyyromlosxxusjihfa^]^]]]^]]]_^^[[ZYZYYYWWY\_^^^YVTSRSRRRQQRQQPONMNMMLLKJJIHGFFEFEFGGHGHGIGHGGHGGFFGFEEDDEDDEDCDDB A@A@@A@ABBBA@??>===?68;=:81,UGAQ.RI85GLNMK42N>;:?(=A<71-+/.-,+/6CKLD=1((.6153/+)-4:= >EOKB;>=D%FE! "##-1>/.---+6CDAB?:7="#! @6/(7G;,B$*-/361125;":;=;== #%+.*(($+-%#%<52435><;55;52111(('$)2?""=>=;"@61-1387.-.5$%$#D0&"%,3.19"&= <2025/13,.*../*).4,.-65/3300-+)%$$"#)')/'03++/7AE507;1174300.1;64467../481-05670*0))+..+'(('(**.461%*%"!)464,8=;4+-5""452&3/&)9:*&,213516857/3+).24+$*PgMGK:Od:LUYYVjbEC6FR9N+F*UMNJG=??4N[eBK;>cm<=LEQ79I\CHNhiw@HY9\i@Z8E=!!3*%!!)9E'+++*+WVXVVUXYWXRNLKKMOMG&E>CSUWC2KSQXV[T1JHGDMWX+&'-000.,>-9;7;;. 14(9;>CGCBGJKC8(+/*'"4AKNVUYS+*J%''*.*-UQEHP\YUYSRZSRXXZXXW//4974XRKMXWMHIIE@@B>?=86:;<<@E@?4865 "%%'&"'''&&%'&%%%##%&&%$%&&$%%&'&'((*(&$%&%')()++,*(,.,/45653445515632/2514447;@D92100/01X4556655;54348=;<<<><;;::<=;=>ACEFFEFEGJKLPQRUV]1a]UWVVXZ[Z[[\a^^cf6jcspUg\xwyꁂE¾Zҏvwt`XZgiWWQGQZ-TXbjcSWZZSPMRQ'%&+/0(&')R0=ILgoPZ]PGMTKAJDAOKJAAOGBDKOB@`p9PAt|CKCNHMCERUVTHGGIN>??DMT[\K\UPQKMMABO*.XJCDA638778976759678:=:;978653542102/+-63,6@D@2+#,0(*,./03/+*@;%%'($>838>##$&)('($ =609 <9.)9??A<'$:0.+0'&"#-23,) ! # " #( 06!%.*6&%0:',.>;C%&D1!7;$0!  + +  ::???@@@<<6457688989:=/+.21=?+7;:=9<7.+&$-99# & $*./0<>?;:8832/12-'!%$%+*-46:>?AC>,3<<89:7568:9896410/0,'$"(.0,+/34.$ )149764+96,/:CA:?::B;9>AB@>:68@>5011.)''$$#""%&)')-**),'&(*'#*-/1800-,,D>)('%$0>B@> <<:::;:;<:943237=::<@>;8= <<><7;71.00-* + + + &(042.-,&%%" + "!$0/&$$'!  + +    ~}}}||}~}~}~}~}~}|{|}~}|}~~}}}|}|}|}}~} ~~~~~~~}|}~}~}~~}~}}|||}~}|}|}|}|}|}~}~~}}|}~}}~}~}|}~}~}~}~}~}~}~}~}~}~~}~~~}~}~}~}|}~~}~}~}~}}~}~}|||}}|}|}~}~}~}~}~}~}~~~}~~~ 㦻¼ÿĺϹ򝰱\œἦ󑕖ýӺ{'   +  +  5׃ћ큊µũÿϰó*ȽϹиD< ( !!! !#'*-00/+'$" !""%&&'(+-/.,)'&')*+,Z..-,,---./39=?;6002469;>>=98779:<<;;<@EJOWZWME@@FUkvulWFA@BDFIJGDA:563/,*+,+*+,--./.--,))*+ -25431-*)('( '')()(('%%$$#!!"""!!""! !!! ! "! !  !!  !!!  ;:54221110-/GϽ膈̸Եɿӌ ζɷײǿ»܀ۿ»ꓯϼ߀׽ꗖȺđŸϹ퓲󀇃̀􋙭õ끅⊐Ҁ׻ƹĹ섔ԸΟ⼵󂙘̸Ӊ섯ñโóɥ¡ގퟺØٲڭȿȹθƼ툁ˀع¤̷Ź߫վ섉񄖝耇2󗌃>(* '$)$&%""!"##""37.6@@A71<=CEDBAA?@ABA@=<@?@@?<6.@)#F&<2:D*7579!)/,*B6+1/* -!&(%#/2*$.341,..//HAIN((.32221000/2/.-+e-26852021./400015833664aD54.*!-BIE45CM-,-.9>D?NWWSG?@?=>>=>=>=> ???@?>??@? @@?@@A@AA@@ABBAAABCBBDDCDCDDCDDEFEFFEFFFG HGHIGHHIIHIHIJIIKJJJKKKJLKLKJKKLMNMMNLLNMNKEMHHFHGGDCCIJHIFIHEHNIMVW]L;:9:::88;<:;:=FA>>ADGDFHFFFGHLJLMIGJQQRUUWUWWYYX.[]_censuoicceeilnlnppkjnntBT_XA}uhbMx<=%>??@@AAABA@@A@AA@AAABBBCBCCCABA@@BBCDE6DEFGILNPSQPMJHGFGHIJLKJLMORSRPNMKKLMMMOPPQQRRSSRSUUUVWVdWVWZ]aba^YWYYZ\^`bbaaa__``baccegllnnomoooq}vollmpuzyurljigb^^_^]^]^^_`__]\[ZZYXYZY[_a`^[XTTSSTSRSTRQQPOONNNMMLKIJHHHF +EGGHHHIHHHGHGHGGFGEDEFEECDDCCAABBABAABBBCBBAA@A@?~}==<;>CHKMNONNLEHE>E./LD<5<5.8<;=DBE8/SN19A>4(D-)+,/-8=>;83.+IBU+I>=;5*;>:40+*--++,08F'KE:1/.,0384.+%169=!<=:8;?@H,@GLJJ),089<@<3:CIC<@AG&%E! $&&(?*&(*.5>EG>@D>>8=!" @>60+";+4?&*-3673236!9997>?!!!%(/$&-"(*'&&@63552;;877;541., %%&*59!$A@!#$";52648;2-/8)+&#B-%&(5612"##'">90.10.55*+)1131..,'+,/3342/300+&&(5',&('&1/++09B$528;1374430/10351/1**/12/-388=8,+#%$-10(# !&&',058+*')'%.=(@$+--$"$,'37,.* .;@($.432314777.1)(*+-#*hgOPQ@DxEF@>?<779>AE?>>AEA[eC88525P41_V[`^_UIY]YWT[]X\[GLOOKIPTRWWWXUWR\1ZW^cZTYTPLIGDG;+$,2 *CDBOPPNGA?@<;-%%(22./'"$D9,$E98E+**''1,4141/(+5>:-)#%*014^B:>J*<%'*04541-L%344/-)%(6+3))'"$&','>()$##'''*&'('---/)"/.3./41//2.---*./-/-.0-*!4/-$.,)  + +       + +  +  ( '(! !"##$F5+*!#+/+)48!"+171?FE?5-/.+,1,*-.*)0EPMGR2,-3/22:7835C?;CAN]Q`򐏑 [)!+ }U +C +KI/M5640-& 8;6&$"#%(%!!/8+0.723276686422282+*'&# $# !!" !%+%#"(./-,-+-.(%$&)"&=\+'9689 $&('%))'))*)($%'%&'&&('')((&&%&&$%''()(')&)(()))+---.-26456512321540//12.1527=@E<120110.0355644<64147P;:989:;9:;9?GHHIHIGHIIJIMNQUU\cda[Y[][]_^[\]`^^bfmDyQRL_teifwލp޲{ssl_a^aePLW+,)MY^[NNWZVN'MMS))-/0.),,+.56[b_TOYLHIFEHGXECDKKB=EAAEWHBzBf~JHT\VXa^FMHZEZHKZ@DAKHQab`E<;LNCD[M;=KQWUBB7424698::9789605:?><>:9=81,252210/-/95.3"#50-',("',+,0/1)$FD)*-+$,!"#$&''&$ 7/>!4--/8=;A9%$920/- #"!%03.&!$"!" !"(13731""#&& "(,+/4,%,.0,$$/2,00*)#'&$$#- !!"#&  ##! " $$!!  % !!"  +%* /4+/2&,G%.0386D:*%- (/";0($"")/6;=')='"#,(@ 11(I;LNLB.10 6%1-   + +  + <@A@?@A@A>;735321154347%$#+6(487;.%%*+77 !!7($&)(,15560-./03/0,$-48:>;/$<;3<=>;79=;8:7641/.-+' "! !#&(,&# *348:%=31* =7/-2BD?"?;?<<!<9?B>:=730..(+"  + +!#$/20/*&&&"!  + ! !"/2"  (#'$%C        + }}}||}~~}~}~}~}|}~}~}|}~}|}~~~}}|}|}|}}~}~~~~~}|||}}~~~}~}}}~}~}|}~}~}|}|}|||}|}|}~}~}|}~~}~}~}|}~}~}~~}}~}~}~}~}~}~}~}~}~~~}~}~}~~~~~}}~}~}|}~}~}~}~}~~~}~}~} |||}}}|||}|}~}~}~}~}~}~}~ ϴ]¤ܦވŸŴĬz%   +  5¸׀¾¼Ǵ/ºց׽ܑG  . !"""! !#&+/010-)&#""#$%%&'(+,00/-+)'()*+*+,x---.--..-,-.26=?=9423479:=>>;8789:<;::=@ELTZ\UIC@BIYp{xnZJDCFGIKJGC>8563-++,,-,-,--/1/-,,))*+++-15640-+(((''())(()))('&&$%#$$$#"!#""!"""!!""" !!! ! ! !!    !"""!!! 9842211100/Pp̵ȳ󇎋˽òڥܧŠٟ«ˬƹǵǼչ¼վ풗ǀגлþވ򂅁Ӿ󀀂򀆅ƺýκٶؠËŽķڠȀ֝ޒŃÔƭ晔ɻҕ֟沊̱ƾʻǿށŻŻſ݁İҐ̻˽ʽÚ烊耋􍖚׎ 셋($(')()'($#$#"$%$"(-,6=??;:7:>BAB>@=ADFFA@?@@A?=:;:D64;@<84ENYU]@:9:7H:AGE?FPJEFCTb[PGX5655656565556565666556555665556566565655665655656564565 4566565655545454545455445456545565656555666565656545656545556565654565 454455544545456554455454455445454445544455544545445445445455455455454345454454343434334343443434333443434323222322233323343233232232323232323232323323332$333223332322232223332223222322322232323233323322323323232343434333434333434443434545454 55444554454454565556556565567665676677677677766776787788787877877787887888988989:9:9:9 :::99::;;:;:;<;<<<;<==<=<=>==>=>??>>?>>@?@???@?@A@@?@?A@A@@A@A@ABABABCBCBCDEFFEEEFEFEEFFEFFGFFFG HHGHHGHIHHHJIHIJ KKJKLLKLLMLMLMLMMMAjV<7{45.&KEG+044413-034=LHSGOQLPE;:>@A@>?CIGLQ(+,9IJA=@=8242/044A@<:1079;<;6678343:983:7?H<5<3JEILN*(+//1//1148;<96:96867675545324554678975668769;8:=;:99<=<=BIFBEHFDHIKRLMKIIGFILGMNSUI<99:9;:9<=;;;>FA??AEHGEFEFGJJJKKKJJJNRQSVWWZYY[[[\_^eprulgebbeghhjknnlmq7ALwc8]\ʗoŗgd<;=>>>??@@@A @AAABCCCBCBBBABCDFEFFFEEFFFGIKORRQPNKJHHHIJKLLLMOPRSSQONLLMMMOPPQQQRRSSTUVVWXWXXXWWXZ\`ccb]YYY\\_`acdbba`abbdddeimnpsroqqqtsnlllrw{}wqli'jgc__]]^_`_`_``_]\\[[ZYYZ[_`ba]YUTTTUTTSTTSRQPPONNONMMLKJIIGF EFGGHHHIHHHIHGFEDCBCBBBAA@?|{=DLPRTTPOMJEDEKPLMNKLKHDAAGIFB>=;=IQHDSR?7><4/).,--.28<>=74/,*WTJFCFBCJFKH.0MBB;=*9==63./1.+**/9G''B9.12/14840+*39@!!<<7:83>>@HIDJE>A>G&$B!! '$.,-2=6XZE;>98\ibiHXG7iWTB@H5bP,@]I5H*#$(U^)(-*OIKNJK>7/+((& !%+13433689BMMM+ULF?<;CDI22%+,**)*26AIKE7/<5&MQQMINPOONNMKGC?>=5+"0--<>CCFC:>:65,/,+(%%AMPLNW]VIH),*,2[.WQJGGPXW/]RIMOUb]UNKWVW5:7`SIJQKHFDEC@>@FA?=>@;=:<=:9;855<@@=;799=?O4L>>921E_bYW_5N=?RWXWWW[][^O>SLHAJRTQUXWWPQUU^2^`c[U[VTLHNCGA2+!4#9P@ENOOID?@A?4("%%-521(% =<0>;69@2Q$H-.*#7,.#)+,62)/9=5&%#$)/23@>>)(8#(,1/1320*E.5541-$."$/"#&$$!%,($5$*)*%+.*)(&#),+-+&*21,/32-/---+1/--.31+..*#!.+02-L1   + +G  +     $ )+ !e! " "# :.,) $0'?""&-364ADD;3*+)()2)%,1/*+@O\UX掑z<KL*A $ZJh?431.&#853!!" (6/4&+,-96225676431316;#,,'$&$"!**U(("!(+,.-)())#$%+))$)%+@6))!53777 "&((&,,+-+,,,((('(')'))*)()'&)+)((&%&&'()')**('(+-,,14425520577835322102428<9;<:;85103362.---/4941=:8)"#"!"('(/)'!!"'+3!  #,36/"#%;B?:8=>;;:<;842/.*" +'(+-1.%(&$%*3535?C A;2468FC:52;=>'+)G<6692/-,-,)().'$%'(%(()'%'00)$%#$#),+'%%&'+-:(6)&#.ED@>C%5')8>>==<=ABE;);5/+2785:?<<55;:?"@BEA=A;8412(*&  *!'./0,)''&#    !+& + + +)''T# +     +   +(}}}|}~}~}~~}}}~}~}~}|}~}|}|}|}|}}~~~~~ ~}~}~}~~}}~}}}~}|||}|}~}|}|}~}~}|}~~}~}~}~}|}~}~}~}~}}~~~}~}~}~}~}~}~}~}~}~~~~}~}~~}~}~}|}~}|}~}~}~}~}~}~}~}|||}}|||}|}~}}}~}~}~}~}~}~} ſ삌ܷ\ű獋ʿ¸Ǡ#  (   + +'    8뉘՟􆍓̸ķ̷.쀌ׁ譠зőD !!!  "!" !!"$'+0143/+'$##$$$%'')*.021-,**)('()*++,,---.--.//./..--.16=A@=755478:=?@>98899:99:>BFOY_]RFCCDM_x~s_QJIIJLOMHA:6351-,++--.01/,+,+**,-.15863.,*((') ('&%$%$%%$%%$#"!"""#" !!"""!"!!  !!  !""##"!""!! 330222.-+OXӰ׻ձϵѶüЖڋѬŻڹܷįǾлӺӓɿȽՖԻ󂅃ޚÀ˸ۼ񆖛ܽ⥷󂒇ϿԵϑ䁀ݝոՌԝʆˊ䆓ڶГóІÿѹ԰ȃ}ɼϰؑ䃗󃊏э"䄍!)+"'+),+*'))*&'(($" "+*/6<<<=;3:AEB=<;CFO$#A??AA<=?9:G&&'77B')*08@+-(-(>J;!)@..(43)$"%.3/1188%11%N^YZG=307HB0AG?JOC7?HXbXNIP65666556665565666566656565666765656665665655565656566656565655565465556665 6566554565656554565 666565565556656667665665566555665656 5565666555656565655566656566656565656545445655665654545 654455656545445556555445565 6555445455445 +445554554545444555454454554545554545456554 +5445554443454 54445444343433444334344334434433344434232243 +44333433223433223433323 222323223223223322322232322232323232343 4233433323434342343 +4433433433433434334343343444343454 5444554455545454556555654566566656665556567665665666567676 7676676767678787778778788878898 998889889899:9:9:;;;:;:;:;:;<;<;<==<===<=<=>>>==>?>???>?>?@@@?@A@AAA@ABABBBAABCBBCBBCBCCBC DDDEDDDEDEFEFGFFFGGGHHHIGHGHHHIHHIJJIJJKJKLMLNMLLLMMMNMNL@qoB8746443)(BB$(05641-0249IHLP(QL1OC:BGB>;>EHIJP)),1LKJ9E~`25/GGLLS*)+..-.//016:;7><==;:979898887686658<79776788;98<<789:=:::<=@BJGFLFIGAFLNLKGJFGCGJFGIU[L>;99:;;;<;V?J@>@DHKLJHGFJMNNLMLLLINQRQTVVWYZ[_\\`^bisvpgdecfheegkoolo9;X=E~Fqv~`^n<<=<=<=> ??@@AAABBAABABCDCCDDCCBBBABBDFEF+GHIMPRRTRPMIIHHIJLLMLNOPSUURQPMNNNOOPQQSSSTUVXYYZWXCZ]acec_\[Z[\_bcdeddcbbcdcdfflppuusqtstvuonmot|yrljliea`^`__`<_]]][\[[Z[^bca`]YTTTUTUTUSUTTSSRQPOPNNONNMKJJJHGFEFFFGGHIHHHI +HJIHHGGHFGFGFFEED BCDDCDDDEDDCBA@AAA@??>>===yx<<bZfr_Q\dke\cdjj[\f42.R[887:754112fc_azk}fOWSNLLFBCQ^USVM_NLLWhtHOKKEjWQhlLIrLWHG_KP]]\OKQXWTagLP@?=?EFDGBC@A;99?DRTSOKEHDBBA?BVQLLGFJJHABFIA@?>=EQQIBsa@=@BAFJA=4/--9@<:3&$+240/.3;<<430/,+O=CIPBADDHH/0(=?9?.77:8201343.-1:F&MC3.7565671.()/5@"!<:779@==6/&=@A6>C)-3681379@@>>==?""!#$+0/)<09>!#'@97=;5>=<96742.+0(($$(-5=G@;!#$H:4125:601/4@DJHHKDA=;10/0-,'"/D)NILQRQGDY2Z]bdc\UQPONVTZ1YOPSR.TRLKORP0::dVNIMOIEA??=<>?B@>;<999=@/A##"%134@?>,-:#&(223754-O-44943*$#&,+)'%"%)&%#)$'%%321+'' '&&)('&06--2111,-,,,//0..00-+*'%&5#"01UC  + +    #      %'! ^  !!!!!;.&+(0"0)7#"(.277AB?9.*)%$'-(&*3.-'3ERTTB7-(0A:)6;7>E:08BR\WPvΑ +%85 +T%)M-1b/0CxI61/,&#"2/ #1./.,/!<5369433224337.,+$&" !,-''' !$%&)*$''&"')))/--,.A{P%$27979#''$,,././.-,+---,+++*,+-,*)+,-)(&())*)')*&)++,))*.-./7448320.355440300.15357?E910..1211244557?7468;<;9;;;<<=>>?@ABCFJKJKKLLMMNQNNSTV[bed`^_]``__b`baad57It@edUycwj|cYSq\؂r¾ +׀yxosXmvv:FB6VWcs[UZ`^VPW[[XIKS)&#DO10/1.-,)))X[XYs`xys^KRRMJJD?=GPJJNEUGFGT\_@KGIFfTH]\DFiBJ??N:=JEC==DGEESV=F7<96<=;>99461//24<>=<;78544454C=:;7466712361-,,/29<8/6>00PJ1,/1/25,*$"!#+/(#!#'$# "%'(##"# 8.64-?"4:'#'.5$&$*@%59F:2+(.25850-+*)%)-12345;=<,6!#"87201655387566%75!;$0+0=$&9;:<1$)-/7;;<= @;::5",-$"+**.0-,"'34.%/2/$!! $(,-..1!#::8:>>?=;<;7883/*!,053681-*(#! ,7/2=>;1,:!CGPZ`ZNFCDHRhwcTOLJKOPMH@95352.,,+,,./00121/-,,,+,-/168751,)))(('')+**)**)('&%%$$%%%&$"$%$""!""#"#"#"!  !!!  !!""#$###"#"! 2320+Ca¼Ƚ⁍ӹʿꀊĴ츞۟ǸзʿʿĺƴϻĻ͸բƀƽٳԿꊦÿ򀃄炇񂈊߇ɳ̀Ŀꊘӻ׷ʷлηߝȖ¤Еٖ͂ڎĠѭǯܜȯˁǚЫŢʭȻ֎܀пّ!ǀ -1'+)+0+(()))()('%$ ))+08;==<39:FJA7=6;;7<@LH<6<.6?'6A.0()$JCM-"*,71/++-,%),.,11147 (.!>N\YOH?::99?;7;9>9;67Mc\PK;5)3FJBAD@JKJ<3JbjORMF7656566655656 55665565666565565566556555666566565565 6556555655656565665666566556656556665656665655565656656665656566655665566566655565566655656555656566656565456665556565656545556545656556645454445444555454455545554554 554554455434543444343434343443344343434343334433444343343344333434323232334323343432322332232323 2233233323233434333433343334443443344334443343434345454544545545455545455565565656565656665676 7677767767767678787878787887788898989: +99::999;:9:9;::;;;:;:;<;<;<<<;<;<==<=<=<<===<<<=>=>>>=>?>??>>?>??@??@?@?@@A@A BBBAABBAABCBC*DCEDDCDDEDEFEFDEEEFFEEFEFGFGGGHGFGGGIHHIIHIJKJKKJKLLMLMLMMMNNMONNNOK;xuP;9561211-??%&.432/-.586GJN,()L=O<@??C@<4-32AHB=;=<:68;:;<8??@=?==<>><:;98;::8::;96569668:;=9;879<<<:;=?EKGHOLJGEIJHIHFGEGFGGFGLW]M>=;9:<;:=<<=;AE>?@CEINNNJJNNMMMLNOLIMSSRR8TUXXYY\\]]]cluwnfeeehkhdgloomu;@|MYbxmg[Wv=<==>=???@@@AAABBBCCBCBCDDEEECDEFFFGHHILOQSSSROLKIHJLLMNNOQRTUUTQQOPQSST UVWWXY[[ZY_[\bdfgc^\\]]_cdffeddeeeffdghlotyxvvuutytqnnqx}zrmjmkec`___```abb`_^]]]\\]]^bedb^ZVUUTUUTUUVTSSQQPPNONNMLKJJJHHGGFFGHHIJJJIJIIHG HGGGFFGFEEDDDEDCDDEFFEEDDDCBABABA@?=>><;wvyn}`ez@DKGGEEAgbrj^aa_VX`kog^e552,P3789957633fe^UV_X\d`WSUNMFIRKQXTWXMMHLMK_bOQQLKVIQ|VNn`WM@=?BJYVb]TSYMCC@>=9:?GEEBADKI:789FOKIIFACCDCHC@CKKEDHJLIBLMHB@A>@JI<=?DF9ARHHTMBKU>;8.-+/6>762.)*.1,.16:<;611/0,+MKKCAED=:>04)B,+3,/..43132107.',597: $#"$'$?8.)#'+,+*..-/7318%*':/5 +#4D?&9:!@56:;(("8)! 2-05^RPp[I1'[1RRSGKQL7BDDMVYXYZXVWUNA;54:@IOIKGGIIRMOBJD?:?ED#/+%&";"&?-W<<1>)NJOPSTWSQLLKIDA<1J8' ,GJHFJCA;=71#'("(,1+,&$$KIBSaZU[0b^MMOOO,XXa`[_/[YUVTQLMO1:;3MLJTSKD@?@=:<:>?>;:9;<=999?BD?=>=<9:==:8;=AFSdWA63245CVV\4W;-DPVX1YVVRSQPPMHFRURMQU-ZYRPV\U[^a3\U[bQMYNJHJB;3'("'/CCILNOIHABFD:0!'%"#!G=0::E?734$OP70280%6/'GB89);:,G$"!#237?>7(7?#'(.03522/*)38663/#"!"""'0,&(*)'&*&&$""230-(&"''+'&'1--.301.*))+.1.-0/00.)'(+* !0+QS: +   +  !!%   + +  +  ! !#"#! !5&%&3'##-"+40-:DB95.))(&))&+,2..),DXTIH8/#+?D97:5@A>4-C[aOQv$* L L:g#'+OF]:2-+$""#!-/ ./.-'904301233411227'--&%(("&,)'(*%#!$%&''#'+$ (')-3/)'(3pRJ$&87<;8877!#%"((+-//0///00110..,,/0/..-.-)(()%'())*'+((*++*,.,.47238421034233.../146447=D700//2300325529;4469;:g==?<<>===>>ADCCEIJJLLLMNNNQPQRTY\dhc`___cedbacdebg7;aDfUwZ\ov_nIH󄆇YĆȀ ڮʯ}zdfw<>D@A<<9`^pfY[\THKT]\TMR+*&#E-0022.0.+,YZXQSZO[]XOLMGHCGJEJPGJKGHDIHGX_IMPMIXDGthJHbRKB95337AALNJJNC=;764245=<<845:9.--,4::;:7465648512684357762;;50/0,/87+.057,.=73;:08?,('! #%)$"" !$ !!%''%#!### =>@407:436$#2.6C#)(#!  '12) "##!"# ! #%#.-0-(($(''*+(,)/40+-+2&! &('$+*,-/63//*&$%*'(## '#$&*##%$!  !"W#' "(("!#!$$#%%# !&-&"##! !   !  (%# + 41.75$%)-*-.CA>)0$ $#/' %&#!">:261@ #80>654.5#+?AB''./ 91-16699864:;9>? !$'+/0,%29.!!!0(012=&2*,TJ2(-046.4<:(-,-4:>>=?<:;:2!%,42/,,/,.*+%.40,/:9 !4"* 659;>>>=<9:861/* + 133283/*,**"!36.:FA>B#GA66745=?HGBF#C>::96225#,,'<96>;3,'&'%#&$'''$%%$%'&(&,-,(&'&$#&**&$&(-4>LB.$#"##/>?D&;!*5:;!<;=;;8762..:<;79:;;54;@:?BF#B@FG95>3-,,'# !"),11,-(*-*! + +  $%  ..""$    &%#"   + +$  ,4}~}~}|}~}~}|}~}|}~~~}}|}|}|}}~~~~~~~~}~}~}~}|}|}|}~}~}|}~~}}}~}|}~}~}~}~}~}~}~}~}~}~}}}~}~}~} ~~~~~~~}~~ }}~~~~~~}~}~}~~}|}~}~}~}~}~}~}~}~}~}|||}}|}|}~~}}}~}}~}~}~}~}~}}~}}} ʾᢐ򄋏aյĽø“ɘֳ"  & + + +  +"eЈ¼ѸŹ̸»D¾ꅑҜأۦ`A!>   !"#"""!"#',04664/*&$"#%&%&(+-02210.+))(**+++,-++,,-./..,-/28?CE@84568;?ACA@<99:::;;>DHPZ_UJFEGM[t|cWQNMNPPMH?85332/..,,-./122210-+,-,-/2688750+)))((')*,+++*()('&%%$$%&%$$"#$$#!!##"#$$%$$###"###!  !! !"!!   !#"#$$%%$$###""! 32.2PⲼك⴮ݳɴӵ̨ǫ⬡и܀ηẐ¼̳ƾͼйۮŎ뇠ǿֽ㾇뀆Ž̮񁅂耊􁉍ņ˴Ї耸퀄ðش덆ЇۂéȮӝƛζ欕Ťҫ܀̳IJʰׅɐļˈ҆Ւȵԟ铇ηƹ菍„舒؈ڇ횡됓鿀#64)+*,0-)*,(**(()'&$'+%'27<;;:;4JL@:=G@8:>@?@>=:946?:B@74>3+)6?/4)%"JHDA'+0605/..*+03&/3324$,AUJFS[WKB<;:==<;8;;;9995Hf_BB6@2/ILLG7?IJHQ:NjlDHS6766556565565676767676566556665567656 55665656555656676566565664656565655565666565666766556656566656556 +56655566565666565665666566556566656 +55566766656556665565655655656556656665556565565 +6665656665655565546665566656565565556565656565 65566565655656545565656564654555445 665444554445456545 4454544554545454534 54455445554454534344543434343434344343433433434443343343443433432323444323432323232343234343343332342233234343343343434344334333444334345454544554544545445444555456565656565565656767667666766677678787878:98988989 889:9:99:99:9:;:;:;:;;:<::;::;;:;;;<<;<<;<<;<;< =<<<===>==><=??>>>=?>>?>>?>?>?>@?@@?@BA@ABBCAB +CCBCBCCBBDC +DDCDDDEDEEFEFEFGFGFGGFGGGFHGGHHHIHIIHIJJJKJKJKL KLLLMNMLMMNMMNOKlsq[>87630/20FC#$*931-136:;IMQ1,+SO4LBmtJD@?BFILKS-,*6OSKL<9469=CED<:==><;>898339n\XX.SBFJOOSQ++)+,-./010,4789BAA?ACA@>?<><:76577676698:<::999:99=>=>'@?@@@AAACCDCCCBCCCBBDDDCCDEEFFDDCDDDFFGHAIHHHJLORVUUSOMKJIKMNMMOPRUWWVUSQPPPQQRRTVWVVUVWXZZ[[[\ZZZ[\`egjfb^adehggfJggfijmqy|zxyvtuzvqoru{yrmjkkgda``a`aaabba__^^^]\\]cefdb]XVVVUVUUUVTTRQPPPO)NLKJIIIHHGGHHHIJJIIIJIKJJIIHHGGGIHGHIIHHFGFEEDDEFGGGEDDDCBCBBCAA@@??>=>><<;uwwyt{wwkfWp@EJFp}ADxicmi|f]a`i88jdh53-,^5666356433bgWOYs[jtTR^WSNNI[RXXelfNNTfYUWK[z^LOQPNSPRYraLiob[@GHH`QUSUKA=<8AEB?;;>FBAADLQH8ll7DECDEGCCBFEFFGGLOHJFHHIDEHABFOTUUFIKGPODNEGGJHIKL<8690-4><./56.-/0--/57:;840.-,)OHFDDG>44?08*C;;J,8:5.*+=?31/+5ABIM;,;.'066;952585=:3%(#I><88=?@@??=;@:7338:;;:6/%:76;:>*/3341243441589;!!$+/.-)%#86;B<@>;<59;635314200.,/00-2:E?=A733.+.16991..8$('!4.+)+74,5#$52.+)).20,0/17<6391/,.7;B" #*)$"&(*$&()$-,%$%)#,95#901.+)))/21-*25:(*6/1.../2560)4+&,25176!#&&)'%$#&$;4+++)*.2:41/8"(&$#40!"$8F;2=&-"5 %'!3% !.A"<< GmaOUTEBEAGAMjg[B`)TO):6,9sG>81ATKEW*)&,*RTNORWTTLLHJFC=82L4&!GHFFHDB@=/#- C19V'+&2&CCJJKORU-.HGHILPZZ[S^e5652242RMR3>=3PWQU"SKB?>??@?<:@<999::>>><::=AA=>>::DB9>JU]TI:6135DIOPNKEDBBB<0&,,!!?5'4HHC*6+QC0:X6;4@q73?2.X6719('&"#$459?92'>$$'),-08440,-8;7732+6#&%%0%/)+..&&''$"#)!%()''(&(&%%!+,.//111.+(''+/-/1./-))*-,%&#B62//.00.03122/;76659:=<e?CDEEEIKNKNMLPPQQRTVTW\gf`a__`begcdfded47DEL]cmVmudTP) ޱΡs}{unh[n;@BClty;>qbbf`mWLMOX..VSV,*%%T100/,./.--XaRMPfRZhOLVNKHHGVNQOYaYGHMXQT\IUlXINRNMOKIIjujUGZWQH8=>:I.-=##*$$%9))A#"(" %7=:*<4&0"'"!9 !&"1,0478=<6:BA;!#%&()+0 2<2%1$.0-!$*52+& '24)"*32C\I+>;?>((9*/4//4<',.%/99:;<=@=>?89562/,'"/01/1532-,,+"(43556789./.-17@@B>HJ&('%$%#628#--'=B<@:2*&&&''&%$(%#$*)*($&(*(%&$$&-,$%%%*6AJ@3&%""$*:=D%4(#/::875563.4>?@58:<87;>=AD$$BBHI09:30,-*&" + + $*/0/-*)*))$   (%!"/"%9%'* $! !#     #(-}~~}}}~}~}~}|}}|} +~~~}}}||{{|}|}|}} ~~~~~~}~}}}~~}~~}}}~}~}|}|}|}|}~}|}~~~}}~}|}~}~}~}~}~}~~}}~}~}~}}~}~~~}~}~}}~}~ +~~}~~~~~}~~~~}~}~}~}~~}|}~~}~}~}~} ~}~}}}~~~}~}~}|||}}|}|} ~~}}}~~}~~~}~}}}~}~}~}~} uţ큐jзʩĽԺ?    + +   C"bᄅ̲ۚʻ󁅇aǵžɡϜਖN  !0"! !"!""##""#$',168850+'$%%&&'(+-/12220.-+*+ ,+,-./000110/Z036>CEC=8568;?BDCA=:9:;;<;A=AA9865;CDC??=;77=8D928 )A0#-1+'B%)MPQ())+/742:6321031,,3435 '#FH!(,-.-154h7795,&%))+-00-.0/.21344548600-.2[B615.,'E@0(),*'(),/=^QPYZSJB>:;<<728=A;;;75Hd[b7;:P8=AHBC;BKCIGUfnLDWR8676565656656565656565656565666556565565665656556565656 57656566565676576565556!56665656565665666555655565666566656 +5666555666565656565655655565454545454 54554545545545445454545445454334334343343443344433434343443434343334343343433234343344343434343343434 +343444344345454 545445544545565655545 655565566565656556656567767667767676676676777877787878 78988988999889:9::999:9:;;::;:;;;:;;<;<;<;<=<;;<<=>>=>=>???>>?@?@@???@@A@A@@ABCBBCBCBCBCDDDCDCDEDEFFFEEEFGFGHFGH +IIHJIIIJJIJKJJKKKJKLLKMLKMLMMMNLNNMNNNONHXjvfC9679734.%$%!$432264:=ACQI./-UR;TBuFEJB}GGHJOU/.+1KJM?3@?6:>?AC8:BF=456:98924;}cXS[\2PIIPR+,,,-.+*-,-.//.1235669;=@@BCBAEEFB@?>>=987667:989898999::;;:;>>=FIKLMIKLHGHKNPOIHHJHGJRYaG>==:;;<;>?;=AFAA?ACFJNLKLLLIJKLNORQNMQUUVVXY[\ZY[]`]adsui"cfgeiifhnpstw<7esChiWqpL`^>?>?>>?@?A@ABBCBCDCDDCDEFEEDDEEGH7IJIHIIILPRUVVTRNLKKKMNOPQRTVXYXWUSQPPQRTUWXWXVWWX[[\]\[\`eijieb_``adgijigffgh0ijnt{}yywvx}xtpsx~vqnkmlhda`aa`abddbaa^ +]^bghgc`[XWVWVVWXXVVURRRPQPPOOONMLKJJIIIHHIJJJKKKJKIJIHIIHHIHIHHGFGGGFEGFGFEEDCBBAA@???>>>==<;;;y}kp}{xjkkk?@FQH>9:AD@DBEQPAg`a9?DBFFGAEJNBBDDHJKJGHKJIJIIEBVWZIHGM^UOGKIC><;=CUUDMOF9/3;726><51/(,-/28872-**('&$HKHG@C&&(89+IGJM1231348HB622.6@EGG64>;859753738957? <=98>=*DOLN,%"+=>9D@<25>955?E@?<;; $$"<>%)$OC:66=>>97:8;?73157::85/$B@CJ"@&/1622/4256436::= !%%+//*$@:32=:8:6564=;314416411020/0.112-024792-./3751-37F'&!40/(,<7/7 $&61,*(+264+3258<52921.)/7B<$9*&#"%$'%&#$%'$2/$('0#$/+*""#"$,.,*%04A0)611.1324861)0)'-18345 $$!%$# "!95.,*016<3/4:%+&" 8,<$:B<=%"9%'@=?<625D?ZNSUPJG>DGRrn^JCA40?DGJLRYWU0**.>974Xd<BKOMMOROQSVRK?75<<>EJLOF?>B6E3<967>-i@LBJgTECLg`aOF*  $%(-/PYXPJLIGDB@A:/E0.@BBBEDFC5!O@87AIJ]QWE3M@35>1LJNOMOP(L&$$JP-[[QQ[i56b_b^NNSX7<5R_YXRMA?<>?BC@;?>::78:;<:<=>;79:<>;:=A;9;;;BOTSZA=757ONM1>0DEB67?9FO:;31/U9#;)CFB%#48:;25K>&')&+F.3560.02686370)1*.%&1/$,*01&**+$ #">5*/%*(*%$"*"* .-+,/1.)%***)-/20.*)*'--&*"'IEFC +  + +    +'))   +   ! ## k !"$$"#!:+#!' .&*IA=BB>3,(&&))$&,0,,,)*?[Z\487L4:=@<;4;C;BAO`gMAtߓ(4#!44017 _8_'½ŠM40.*''&" !"$'3,01$<1[5155h73246:/*-%#))*&$**&'''$!$&&(!")0)$&'++(("$1bREGA";;9;9t !"$%&&)+,/01/211./.++**))((()))('()))())*+,,--,24546375235675434453339?@BDG[JMLNNONPRQORRWVXZfe]\]__beefijhji55aTx|QucXcJwZTAU إ}xtec`a5=5//./1<7*383*"%)$!%,-'##""!!&%'#377745%&";>DE*+*#!!$0-#!"*00/#!(#"!%""%"$" #$.947 *+).)'#&/)((-0,-)(%#&2/)&%,./.-.++/(%"##&%#+*,2+#$'%%! !&$!'!"$"!!$! ! ! "'     !# )" #  """/(.31./(,-5MG9+(%"+ ;%/1-".$.7! 1)(*'&,"-$$57(K+'>.8$+0% ,+.48=ADD$#$#& 18" #$2#%9.0*&"&1.)'1 (+,#&J:AAA@A?-,! !*03-'( *.69:9;=;<>?:.&+/3+#$) '5"%#*9-$!'836'( # 5=>:69751///)+)++*-392+("$.(("( 00342440,4>A9IDA95*)&&%'&%#'&$$$#%'&$$%'$"%%&(&%(+$$%$%,8?>C-*&"$'67;$5"& #88975565:@BB5<::8658<@AADGJEHMG7?>3262-)'  &-/0.,&*+1*%  + +  +,+z!),"%+&)-+ !# (!!#   +      %'+(}~~}}~}~~}~}~}|}|}~} ~~~}}}||{|{|}|}|}} ~~~~~~~}~}~}~}~}|}|}|}|}~}|}~}}~~~}|}|}~}~}~}~}~}~}~}~}~}~}~~~~}~~~~~}~~~}~~~~}|}~~}|}~~~~}~}~~~}}~}~}~} ~}~}}}~~~}~}|||}}}|}|}~}~} ~}}~~~}}}~}~}~}~}~}~} ͬ̽f淸؍ƽ¤9 +        o兘ۀԿĹȹ¿÷Ź1یўsʷ괳E  !"!! !!!"""#%$$##%(,289973,)'%%&'()*-/14221.-,,,++,,,-.//10/0011//00105BFEC?;9:;;<<57?>9>?@=949BEA@A<92:R:54=!'&6D2/')D&)&%*+5/.-:>98973544611/343!%!@&'!$./2./3785467960.1*$!,c0/,/50.10235658540*-5S3683.+)%C,8%+.**)).;RKW_[PE@:8:77767776777667676667776766677676766677657676467656566677676566676 766766676556767676676766566776656656776756667766676676676767666565656555665755656656565656555665665656656565654565644565 445545455445455455455544554544455455445454454534543434343434443343443334344334344343434343433434433344343434343334343434433343434344434343443443434343454544544554554445554456554556555656556565665676667677767676767888787787878787899898989 +:99:99899:9:99::;:;:<;;:;;<<;;<;<<;<;<<;;<=<==<=<=>?=>??>>>??>??>?>>?@?@???@?@ABABAABBCBCBDCCCDDDCDCDDEDDDEEFEFEFFEFFGFGHGHIHIHIJJJIJKLKJMKLKLKKLMLMNMMNNMMOONPONNMJ^^wqN:367732.&&'#"2214439>CCOUG++SSC[E9EHPBwFFDENS./0/LIIDGIKHHC86;;@A?93GHECG@BJI@7429<8;828js]SSW_54KGOORR+,-0-,/-,.01*23/2353578;==??B@?<:89::6788658:==99;99<;=<8;<=>AHGLMJJDCECDFIKIEGGNIFJRY]E??=<;;=?>??>?@ AAABABDDCDDCDCCCDEFFGHGHGFFEEFHIJJIJLOSWXXWTPMLKLNOPPRSUWZ[ZXURRTUVWXWXXYZ[[\]]\\\]]]`eillicaabcehjkmkighjikkklnu|zxxxzusw{}vpnmokhcba0dcbcb```_^^]^afjigb]YWWVVXWWVXYXWVVTSRRRQQPOONMMKIJ IJKKJLLJJIJIIJ IJKJJIHIGHGGFGHGFEEECDCCBA@@??>=>>===<<@D?@GA@>9?OH4e[b7>EC?:<772/)1888<>9:74908:CMS+&*0655>=@98><73<=D<98;"$$!:9CB()>75588934;@@@742247971.%"A>D$&+12410044::73?AA@!"$%.40'A:7/-+453127/8935:624670/0//24731,)//.2:<439751+,4C&'!5/*'+85,8>##%% 41.-*-596-5156831:/2210%07:/-$"-&&'"%%4D'''0&"4:4/,/*13-*$-6"3-613034/3856*/)(/4:3429 !%&$!"! 8610762,-,/9&+(!<9+0%8E99%*#+0:1>'@;50>95E92.5@MLRTWYPHBCNMsxeFC]5,'kV(->@C;R-RM`J]MI9E?@8]WMN08993RW:94SxVga]Z\[Z[ZK&#eQD:;5K@1`V/AMOMMONLLORYXLB<<>BLK<-?%6,267+"XUF=.OP/VTG+DRFL3H/TXSQOSRPN%$$%*-XWRR\\]ZY]ZLNSTY47M`[WSNEA>==@CA>@>><:;989:88>@<8757<<:;;8:<>>KHS2?@;236KZ040110"1!9>()-YVVSSJTSWWPTUUVPLNVW]\_bbc^ldG_OKVLPPJJH*,($+@NMNLH?9G.Q;:(8:0?2-?@@J%7::55.P@@**(*K'/76*O-,71/4752(046) 52./1*//0+$#%'&<%% )"#%&"3-)'&*+--*((+()'(-0-**,,*,+-+(&JGHFW$  + +     +   !!"  "$$#$!!6!&&#')@=BG?81+&$$*,$")/,+*+0@WS29>4GRD8;=979=C<>S`jTLkL?@??=?=?ACEGIHGHLNONMPQQRRPSQVV[]ei][]^`cecdciifi52pGRMblPXYubdHŬN¾Ӣl[}L|tkgd258AA?qucqkfg`XX][RKU+//a1[Za41*XWa^].-/---._b]SWLPMNKPRkaJM~LINWOZRVVMJLTSMSKinoj^NHIMJA=BHJQQJ47;<>@EH>:88H>855622:42/)-62(PHN,2<=<7737;=A651343425766645110-.479568;<2..-...-3?302%('#'$&).-&!9 #!!'#$% "! 269!! '&#/;A%'%%"#&&%$$!!'/30(*.+'&& "#%!"%(/6<"&('&,*,('.+'&++0*)%%#%--,'((,,/+)+/--&$""!"#",). %&$#" #$$! '##    $$!" !!!&  "    !, ""%))-171.+,21KJ>('57'$ 1?!(%6(F($&&*')4#":)%2:4E":0A/+,28@" =)3!4$!& !!$(239*4('&!!/.(%)++=9DBCBCCAAB?2&8+($# ("81,89768:89=@E@1%$/1$) ",+,("4(/ !$(/577::9831/0*$8("+))(*")'!$$)%!"( $+6;6239841 @B<:CEF@?C?0169@'*AGLRSPKJMT\lt`URSWXWTMD;/6423111/./00134420.,,,./47;=;61,++*)(()++,.+*)(' &%%%&%%$$#%%%$&&'&&(''&$$#"##!"#""!!"! !! !"""$%&&&'%$#" 5540UAý㽷󅍗뿩µàĭæϷңžº¿ľľº􄗡󆘹Ľ֗˾ꁅɾ¿ƹŷŶܭżǁÀ炋ѹ늊͸ׯ㧠Ҍł摵ΐʣԅÇ쇀̑ㄉ٫󅼢˧ʀـÿ󊼸֪ʻഏ߀Ǒۜşԁ߯֋ۀ؞ǫ͒앗ك꿅ꋞ􊃉焇#߀CB>%((),.,-..-+**)')'&  )&(6=:;:7;=<=:>=;>98CEB?@=9.%F4)"!#1.5''#',&#&*D(--/>=1542.2.27242434$"=D'+!>*-0005887456852141/%$]'../1010121536764/*/1P0175/*'%#6#*,&$%'+;IM_^YK@=87;:I@+*:@><69DM]LBRD:?TOJDE9@EDIGC[cpYMT8876776767887667 66767677767667667767677676566566765656 777676676667656767677676777667666776667776767677676676767677767666767677676767667766676767656767656565565667656555656566565656566565566555655656665565665565566566656 556665556565 65554555656556555456554454545554445 444544454545434543434344334434334433434433434443344343443334343344343 +44334334443443334343433344433343434434434343343434345445454455454545554454555454565 6556555655666565567676776787677878777878787787789989898898989:9:9:9::9::9:9::9:;:::9:::;<:; <;;:<;;<;<=<=<=>=>=>>>=>?>>>?>?@@@??@?A@ +A@A@@@AAA@BABCBCCCDDCDDCDEDDDE +FFFEEFEFFFG"HGGHHHIHHIIIHIHHIIIJJIIJIJKKJKKKLKLMNNMNOOPOOOPcVpt_?4433551+*'&!-/3302:>CA?fSG)RRI,SFDLLE{?@IFKYY.)5FOHHFIEBJH;>=>=>>?A>;?FKJJHIKGGGDGFDEDHFFJHGJNV[F=<<;::;:=>><@?ABBEGINOOLMLKKLNOQTURNPVY[1]\[]_^_cbcjwuhfebgifjhipuy<9@h:EЩ[v^o[n{w>?@?@??@@AAA@AABBCDCD +EFGGHIIIHHGIJJJIJKFJLOSWXYXVROLLMNPQRSUVY\\\YVTSRSTVUWXYYYZ[\\\]]^]]^^^`dkmolhdbbdfimonmkj&lkmmsv|~zxy}{wvz}}uponolhdbHddcca``^___^aeikhd_[YYYXXXWXXYZXXWVTSSSQQRQPOMMLKLKKKJJKJJKJJLKLLKKJIJJJK JJIIJIGGHGGHIHHHGFGFEEEDCCBA@?>={{w`{PRIs;?CCBEECDECDByxkkqwplp:8877lhk:93`adhg88;;978ggkZQ[Ubee\\WXPRRbbTQ`UOgmVQJkfO\ZPwj`QerZKRQTPXNNPF@5=RUcURL>;9>?;==@C@?B><9?FTBec_h7=EFEDC>CJF@=ADGKKHCGKHHLHEBCA??CIFECEE@@<:;@=>769;60././8;=8??4-*'(,-/6654/69-(,-'A>AE%*-(53,&C&+389::889765435;?FH>;FC;5:872-)0986;>;:568*8:A6AI(,063694744;@B?>6<98:9!%% =8C8=K>7436:97C?41+*085-:!$#$!711.,29=6.527:43<.$'<@0+3-'"%$"!"!%$5"!)*432!"!<95717851*771(%0-/),..5=84*.,(/2822114$&(&$ 7:9=;8=@-%)1.,>$!$!0! &9?96:&@693(3(( <:<81&5/.2=?[QVY_VBCJP_v`DH9N9J1L?9IF?0QS27<98-Tbt9GAF?W7)2fDQTkR\<;I>md_u`Si:[=EI)ac=hRE?kZ-*UIA\TG::=7e`WW`e4435S66c\l\ic_^\[ZWN<Y?QFjXaUCA5bm[1FNNJLKJMMJLQRTPCB=AA=AE?0)4<;8579;=@$>1$+-*+,./-.9XC7>:JNX>BCKNNOLJFA?>7,G"$GA>$1ETDVWGIMJX1US<_QK@E(TWTUNMPUUSQ'%$'+ZUSRWZPNLLPURNR213LW]UONJLF>>>@A@?AB=;8788:=?><876689;8<>=>JMOVC:;620<-14631+-7-1=B*]REPSYWTRQPSQSUTSV\]c_b\h_DSISSPQLKFC2$/#$/4HMNMJ=2?CCB>. '*.(#!$u1+HPMT*?.1F8@?.:8931*SNC#'MPLK.76/+WR32438440"3?8/++,,/+.11/-&%'##:)$$&(.&!"2#3$&,+'',)%!##+'&+ +,))''NMIII#! + + + +    + +      ""!   ! #O! 5"&%+;=HE;1+)%"'(1,)/+,(-8EUM=K@6:SPG>A6:<;>><:" """  !!!" !"##%$$$%((&'('('&''(++,++*+,-++-,,-,+.26641130120301214446456:AF6110///.12233647878<@=>>@??ADHJLKIINO@OPRRSSPQRQRTTW^fg___Z^abeccggg346oTwѡl_hJhXFo툆2ÿ!רywJ~NE{i57:;<@B?@By>>;kl_^di`Z]0//11`[^33/X\_a^1/1/..0\^bRLSLYZZTTQSLLMY^QN[QK\`NJF`aHTPHlw[UIYbMBFEJHOGIJA;3;HJRIJB764:941045223.,',09-OOKQ+3;=;5536:63154454316;86841021/15:8659;6630030/+''(&#!#"$***).0&! r " &### $( 4046 !'&/#&&'%#"""!!&)00&%,'##!" "$! $(/#*2$'+&&'#&$%(+,**$)'''#%$-$)5+'*,*,.***#$!!"%!+-*-"  ""%),)$!!"" ! !  $%!      ;   " U  #! +#%!""" B--34;6++04'*.7)1 )$>;7E61;%2,08A<%=3) %%'& #! !:35*&5,$ 23,,12*3./0ACEFEDEFEA"@&1&9,6.##3;6/4314678;::?>=8+%"$"!(.-' )-*'$"! /## &%.%)+4878633..+&.-)(+ )&!$&(& 0% #7:;9239?<73@<<:=?643477527##%9CI@:921-&%$&('&()%$"""##$%&&('%"##$$&%"%&$&279@-()# & "%#   $>9/:;@?9654867998<@AFDKFNC-<3=<8930+'  $(,,+"'-.*&   + +)0-6 %")++5%"' %#!"4-!'(%$! 2.! "  +       + +,+*(}~}}}~}~} ~~~}}~~~}~}|}~~}~}|{|}|}|}|}}~ ~~}~}~}}~~}}~}~~~}~}}}~~~}~}|}|}|}|}|}~}|}~}~}~}~}~}~}~}~}}|}~}~}~}~~~~~~~~}}}~~~~~}~}~~~}~~}|}~~~}~}~}~ }}~~~}}~}}~}||}}|}}|}|}|}~}~}~~}~~}~~}~}}}~~}~}~}~}~}~} ܛſ厉Ωȷ􏘙_穬懎ηĺ׻ +    + +  >ȹɤ󊓥ƿƵˈ㚑ƭĴ-耇۸^跜o   !! !""#"#$$#" !!##$%$$$%&')-18<=<82,*&&'((,.034454221/-./.c//01123233321247>DIID=899=:4/+*,,---,**)(((''&&%&&%%$%%&&%%%'''(('&%$"#"#"#"###""! !"!!""#$%'''((' +&#""!"!! 5533\m煐􁅊իÛԁ䓫ҴÛ»¹ŷ􃠢ʷђμ߄ϷƳ¾ȴ־̻϶⎄ϵ߁ҘʠٿƔ͎ċ܆֯ߣȞܳĉŔӹޫٸʺ΀Ƽջ˯żǴƒ׎Ɛÿ󌏉ЭһܳǬΟہɒږ儏݈ 耈CD> *((,..01/.-,,*)'''"(%'3@>>:;@?=A?B?@B=GK,B;(./0/3667888720+324.'c#(-1//1/222326763-'/1T/02/,-*(&=#(,&#!#(UB228;A<47HNOGRXB49JINTNB79>ADGbgrSJK`4767666767676667667667776766656767676776756776767766676767676776676777667676767676 7676667776=77767666776766766766777667767767767766677766676667677767677667667676677766776756676776767677767767766776767 656577667767767656676766677656765655667656655655665665567656 555665655665654565545655645654545 45554455454544555454545454554445434233444544433343443443345434454445445434434334344433434334343343433344343344434343454433434345345444555445544454454545556566655565656567656765676766778878787898788878 +9889:99::9: 999::;::9:::9:9;:9;;;::;::;;;<::;:;;<=;;;=<<;<;=<<=<<;<=<<===>=>"?>?>??>>?@??@?@@?@???@@???@@?AAA@@AB@BAABCBCDCBDCDDDCDDDEEDEEFEEEFEEFGGHGHGIJKJJJKJKLLLMLMMNMMNONNOPNOPQjJhukI75616520+&&",.53/29>CA=Y6U)-RR;_RHCBAxzBBFS]QJS=FANLCFGEIPGG@CB7:KJFELLPEJI;>:8<3::75iwx5<-QUR:/EHKOOQSSUUV,,.-,,*-.1241/423326546567525458673646766<>999::9:==;:@IJEIJLMKMLIKGGFFOIFIFHMRX_J>;;<:>==??<;8S4+m}iW|>>@@?@ AA@AA@BABABBCDDFEDEDEEEFGIIJKKJIHHHIJJIJJLLLJKKLOTWY[ZXSNMMMPPRSTUY[]^[YWVUTTVWXXYYZY[\\]^^_]^__a`ahnpnjdbdegknpqokmjlllmopuy}{z{z{|Jzspoonkgedccdeeeddbb``__`afjljga\[ZZZYXZ[Z[ZYWWVUSTSRQRQRPPNMLLKLLLKLKKLKLKKIIIKKJLLKKKIJJIHIIJJJKKJKKIIIHGFGEDDCBA@?>>=>=>>z}z`y|NKIKKJFC{uDHGJBCEEzjomidkr:;:9ml6:7d[]ddr856::97gfqkUPORRcnaRWQNVcbTOQWS^iSZp~ORfQ[OSKLUPJDFCAEA>@L^bccJ;??=A=4=>@C:5@98?CEI95599>879,ACK<=?'+18658::869=HAA@87:97?KMC=9CGDN>7546:96:7:;60-(()28/&&%&MFFC@$#%'(&,.,-/5798678;:8:;883001**(5@:100*.0///+,312+)'()(16;61,+*.76655654/2/053+640'(184,: !$#$ 6-)-137:7164;2160.%+")(:$'$ ?>"%;0&0; #$''% =<<8AA;4/& =/&)./+*-,1=43&()#-34112-)!'('*!": !=%?0(1=7:/28"3"*B@906C;:85.1"&55@C9"33/2:322b?;=9>:>m5M?B^I9G;=9W>K2AI:V``u\=Ecc:U3.5T]>928iDDDNMCEB>?<^\N*ZY3[_IA>>?\bb5521b54S3flj_Xf`\YWQE7N\CB;nc^SIID=JB;;>MUDADKPTNKNMOQQPHB5+%**-341+2@BA97?EB> %%"!"$$"6d`;99QEG7>JKLNRLLKJA763Q,!DC!N04:8@0WYTNQ4YN9SQL44(OTTYQMNTRNOQOH+I+YTUSX-YSPMQ0,)*.0;]N][RLJJKC>:=@AABD;@>;:98<>;=<>=96577:?A?IQUSG7<200/IUA,6./<.33:7.5/8@D@O-ZYUVUPPNTTQSTUZZ^]]^g^TFNROOPPHE.!1"($0BABKQI+9ACD??1!.,'!#'!'?ONNP9J6'-9@;fA?8BSGA/75220S.4922/01-0>C"/ ++.+*..-,*))!"9%))**-,#*(#4%'*+**0,'))(")#"+,,+,))'(ONMKJ$" + +  +   &  +   "% !""  ! "!"" :"#!*=?JA7+&%!"(,<0" ')-+%*:FJDJS=14GJNQL@1468=@\blRIY 8Y:]& + p!e=F8㯖U700+0,(# "$&%"<$6.1$@<2223hhe644=C604(-)0.*,-+-3+,')(".0++/58024(*'%)#*,-.ay|,$=F@'6<>@=<<@CDF#"#"!#!# # !!"#"!"!$%%#%%&($'$*))*'(,,&)()+++-.,,/5535224355341212:76756;?DI91012232242326369889=AC@@@?@@ABFINPPNMOPQRSSQSTSSRPSVTZed[]`^\a`adac2531=IJxgveiZj遅ľ¾ 嘶[{s|~GA@ABBA?wn>CBC:8:9g^aa\V_d2323b`/22]UX]`h2//11/0]Zb\MLLIM[cYLNKKT`aSOPVPXx_MRat}KIZHTINDDKGEAD>>=GRVXSB686785,0036-*/*(-./4*MLLP(0<=:77645/*/03465235:93751124124@987776830..11*+)#"!$,+'%))('(-'!"#$""&(&!!&($<76:><!"# !#$% !  %)1*! %&"!" " "*/:*(,"')'$&)(&$((-(**$%'&"$/2+'$/0/9,()***(%'$%%# #0..*(  "%"" $!"  +   +  &% #  ! &#(#" ""%/),5;<-.4-9E=00,3%0'&"2  "'%;.#%6+%,%!-*!%*12C3#&9="9!37" :''#*("$" ! 27-6:!64&#! -03-(44326@FFGIKKD%:4+( :41+''%&$"%+18+).4;><;<;=??<50&()((1341&'22/# !:/ +#&'(134584485.'&!3*,-'*($$("'#"69:=748?;8842+.>9<<> ;8637!",UJ>:7559:;>BHFFFJF<38=:996-*   +!)1,%..,'&  + +!,-/,'#**H1.&!! +! 3!& B + +       ,,,+)}~~}}}~}~}~}}~}|}}~}~~}}}|{|}|}}}|||}}|}}~ +~~}}}~~}}}~}~}~}~}}~~~}~}|}|||}||}|}|}|}|}~}~}~}}~~}~}~}~}~~}~}~~}}|}~}~}~ ~~~~~~}~}}~}~~~}~~}|||}}~~~}~}~}~}~}~}|}|}|}~}~~~}~~}~~}}}~}~}~}}}~}}~}~}~} ᯫκᄁ󕎅ŭ򁃃_ɹȷȽûҸ     +   #}Ĺ͊᳋ʾмƻ֣Š䊭ɯɽ&󆇂Ă~⠶<   ! !"/#%&%#$###$$$%%%&&&((*-18===94/*'('(*,/145654310/u..---/01222344544547??7;ECIE@ABD@=@D$D=897,<=ND9/'(&2(&>F0)%('')'!)':9,*/025652236305@:/5A$'+$;*-//0024<>7762.&0451-^(! '/11/033237852,L.eY013-'**)7?#$*&##%':UX^XOD;5005@T:2AA7::88GOMM\[A86FCHMTQ?8:=>?>?>???>@??>???@?@A@ABCBCBC BCCCDEEDEEEFE FEFEFFFGGFFGHHGGHIHIIIJIIJJIKJJJKLKKLKLMNMNOONOPOQKcbqvY:6532541.*#%(M87218=>==F9720+QB/WM<;~D?DLSS+06?6BTMKGKJKJMGHA>DRFAIRKJBC@===:>4;9;>===}ueZ}zq{PLJNMHpnHHB@INKsjlkq`cj:=>=qo97fdg;>lsr675fic_em]QIN\VhgV^WOKNRXIT_afecaMTbcbKs~LPEBFB@@=??KEHQWeY_X;?C>=>8=A?@A8AB9:=>?D8`[[^/:@C?FFA=EHLLGGHFGJFA>@GEDEDDB<;:9678:;5121-.25<;6>:4325-*/46;=::9<7.,+*LOG?DII(.05*2126<;8:9576986622;AG=.,=<)'/310,,5770089>79843043//042121*$!$&'/:D<71.,-24545433,0114:5770--41.*7 $!#8'5"<=8::23/1572.-""#!-%''&!:9"=!;& //8 #$#),+(#"?=9B?934"!>.$'/1,,0.2:53$&'$+344651-"'()(!76;9!4%?682=8"2./955,F:/:<:4:8629"% 21729:2015:>V^SMZcgLIHK[jc[T9.NE,=b>TKF;7;/`=H<=dA6=6>>GF<>>9ZTUe)TWM+agOMCfG9V\285d5f5cgfmNR\bWI %6O=e@>oc`][XTKIA?GG;STNKQL>>LYNPLJLNL4Hl>J_Tf0HIGF=:;CCC$EAtspX@86D8Fa];G6HK-POOQPKJLH@3-)=+*OY5:A>@@X0WN970R2:OO@,/+$RRTQTOOPKIJLNL[]VUXX00VXTS+**,1.7bNZWPKJIRI?;;>@DAC<>>=<;;98;;98:=;;<;7135:>JRWUL?HK;O031/XXSSTRQPORRR[T[][`\RDJSUSNPNNKL% 5 2&&H;:FRL97@B@@C=)0!&!$!+),KQR[8KRIFN:;e;CH:-0$4&&*C57=;54I,0.-.199GR4L86460V-46/-./02E4&,#.0"$)('(()*++)#,!%'&**(('-*,2!-*,*(&&**4)*'%%'+)(*+*+'GMMNH$" + + +  + + +  +     &(    ! "! +A?!"" 'ABE>2)# ",<*#/3&'''(:EFFUT:22CBHLQN<346;EWehPKNۇ61*9H(?0" 6 +56Oªo@41-,.*$3$# #%$$#-($0( @9.1juwx;479;8 '-#-70/-1.0/0,.'')5-)0734-.,(**(-#--39d,(?C=#&"9=>?@??ECC'EE$% ! ! ! !!$&#%'&&''%&&&'(&%))*(&(((*+-,*+,-005626644534435455:321456:BH9324234635679776:?BBACFGLPSSROPQRQSUTRTSSUTSXZ\h`Z\\]]]^_`]^1211>]YO{f|~NabaRۀ¿گbW}ruwirIFDCDBmo}BA:s6<>?c`cch[_a3577db20ZZ]68cme02/Z\UTZdTLFLYRdaQWQONOUYKRXW\^YUFO]TRC|kx~{EG@>C?<<=??JCFLRaRYR8:<753./0013(21++,++/(IHHJ&3<::995350-460341-35:9036238742386356462220/-**+&$#$!"'),)&,+''&(#"#"$''&%%(& 9A;25:8 "& #"#$&$"#"!G#%)$"! *"+:1.1:$(%"!%&!! $ & &(" #+& +)##! #""" !('!  #"! !$%''&#&* ##$" #!")#    !"&!    (!%"# (/+)4'%>2331/-'(%#&%!/943:6((5=988;<>@>=;50,)(**+-/24687621000///.../12112466765546:BJMJE>::;@EIGC@<::;<=>CFKNQRTTWZ_qs`\]^`a\VLB:77665432234345431./.025<@@=92.++*),...//.-,+)('(''&%%$%&'&((('((&%%$$###$&###""#"#""#$%$&)))***((('&%$$#"! 686lֹ󀒞뇔粐Ծʱܻ씇ϱ󖖌聒Ŭȼøż¾εɺŹ˵ѩܽβ銤ʹüṷ̂ǿ𖒖񀃀ק˾ǽ瀀´ʀ󂋏öڃ腁팿ୢʗ솈֨¶䓌㭟ӂШ녉櫊؀ȳܑŠٝ񂙏ޞ͜ѷι䧸⦈߉ɱˉ׷ƕЪɳՎ胨ވဂ倎Յ뜘聻ъޅ򅈇&“БE>@-,.-1/./10.++)&$#((/9>@:9EFKCABD@>BDG&C;6*AH6DHC>;032<&==/+%()(&G#'+=8.1799<<;;73521=3*0;D(+,*D*./.../2:>:4211)24742,'%&''&*.25458752+MY-jX43/+')),'D!%(&%#$&*8VX\UIA=2//3=>==>=>?>>=>>>?>>?>??>?@?@@@???@AA@A@@ABAABAB +CCBCCBBBDDCDCCCBCDCDEEEDDDEF GGFFFGGFGIGGH IIIHIJIHIJIJK LLLKLMLMMNMMMNOPOPOPOPOUiYh~mI;7613173."#H848617:=@@=7960,PC1UD8AGCzCBAER,044667QPMA?ADEHGGGLHIKNEIHCD@B?>=;@779AH?;:;::<;7:=<;<:@@=<969OV1yJngaxuu>?@?@ABABBBABBCDDDEEFFGFGGIKJKKKLKIJHIJJKKKLMQTX\^][VRPPPQTTUVX[_`_^[XUUVWXXWZYZ[[\^^^_`__``abfotwuniffhmqttsqnmlnqqsx{}ɽ~~zsqpmlifeefeehiigfdaa`aadinolh +c^[\[[[]\[\YWVUUSSRQOOONMLMMNMKJKKKJLLKKLLKIKJKJKLMMMLLJJJIIHGGFEEDBABA@???>===Tud|~zk{vRy{|}~qr|x=CHGAiged_bs>E=8qmpwEzuBvjgm^X]^bl8ieRJMMQMZ`u]PMNUSPM]iti_X_UJxsp{vOK@7;AD??DACCGLLOx:98C?A>CC??>AI<658;>?4]UU26?GHNPMEGH>=BFHLEFJIIMIFBEDFHD>8>DEFDFDA;662326>:583/*&M)<2AONQ,1-2651018;::866764-+'*8B?2',97)'-.-,'-49827AB953# =72.-15412231,,039CD?9/4652,)54!:84&6!778;71-.16(! %1/'-8$!"!%-#.818 "&!$+00)" <53::33?!"@-')-/))/-.547?)&$'5:87830$%'*$"*',+,0.%"=81"!$!91/ 0>67FAB=:654:$'9103*780,166WCE@In?74:88>:A<4QCQ0303`M9'()7:/U55D:dQJ;Un?6Z9LH6gCA6clY@BCK)OSC+?]DAC9;:N^4755bc5etTEGT&"5>f96bgp_VNH>=EJFA<3H@7PKQHRTULD@2{O+$AHLI63|>ZE5GZ4QKIJIBD?<;:;!O;0AIT:BCZ7Q- C1[58GI?>;L$NPLQXZVQMHEGLPT]ZQVX^^\X[XVV).2/63QUWPKGLJNDD>=CPGD@>>>=?>?><<:97:7788;664537BPNKGAFE?;79C,324-.LFOOSW[QKPIU03400-UUSTPPNQTU[QZabS=GHUOYUMNNFGPN#$07# +>A;A*QDA>HFGH8>9&")&, !'/E2L4%0B=(:8:BHBB=?*(%%+%8<:;75MW0-X,2I(7)&/4526310232/1//.Q5(*',*#$ !&(+)+( '5 "$#%&)+)&--,"/./+))',&(.)&( )*)**N9MMMJ%!   +   !$  +! "%)'" " #! !!3C= !#%@A@:-'$&:%.41$%1>>JRN1=.BDACKXK7649D\deTLP3% ~6DV<20*+'' 5)%$#"#%((&&(!0+ C6.8=?yr><98? $'')&':4/()+-,.-.-20368042..-.,,++/'*.;D92-!#<@%#::?@A=@CDDEH%"  #" !""!!"#!$$%&%'')'&*))()))'&('&)*)+-.+-..//4757448423735224441459:>BG633211/244455578767:nk>!%!''%# #""" !&"% (2-&4:3#%%$#$% #"&*"!%)" &0'$# !&%$'&%#! &$' "" !#%! %!# $"$%"          *&&$#(.'-;F3/034ACA5,-9!7:( ! +"#%6"""!% )"'8*  2#$)$<*&!58"/)&<$ /5-""$*/543$8%"# (07048+)38"$#)&="":8<21+&"#&*%#!*#/25/8==8-'K35:98:+G'2,".^;$53355/.& .'!-3%4/<<'2#(. 645885+"(#"-' '$!$4968?@=:94.149=E@9?@CCA>?><9 &$:>B<5/236.,''-80-*%%%$$&'(&#"$#$#"""$""!!#+641,',+%!' /-35:@C8391:!#$ " :>===:6779A:DJJ>,61;57/.41'(11   1(##-.11%'#  +#) $%(240/& #&$".93!&  # !"" * +6  +    (+,.)}~}~}}~}~}~}~}|}~}|}~}|{|}|}||}}|}}~~}~~~~~}}~}~}~}~}~}}~}~}|}|}|}|}|}|}|}|}~~~}}}~}~}~}~}~}~}~}~}~}~}~}~~}}}~}~}~~~~~}~}~~}~} +~~}~ +~~~}}}~}||~~~}~}~}~}{|}|}~}||}}}|}~}}~~}}~}~}~ }}~~}~~}}}~}}~}~}~}~}~} ùĻ؂㔤Ⱥ󃌍]بǼʺǿĸ¾ɶ@ + +$ + + 4þΫǮſʷĿ׿¸,咠םߴK"# !!! !!!"$#$$%&' +&%$$$%%&&'(+'(+06:>@>92-*))++-036777641/0/..-./011122456T5668>HNNHB<;??BHLOORUXYY_stb_`ace_UJ@855546432246756421/0025;@B>:40-, .01120..-,+('E&'&&%%&%%$&'''((()))''(&%%%$%#$%&&$#%$$###"#$$&'(*++**)))(&%%%#""! ;8KɸƵ؁끄󂁂꺞ʥШꇠ򈋍񇡻ñ³ȸӼ»ʯǡ䇧Ǿɾ¸͹񈆘ȯǻù􂋆ͻ􌎈򁄃ѻ퇊©଼ʸ˦ߵϗ͛ʁіߩƒ͔랉ʁ۾ΎۊȾȍ駪ˠȃ򌈸ۏժߎ϶ھؗ蚯˓Լ냂񇌎΀瘀簓Կ͂ܓޅύ핕ýሌ+킉ᆖ IA?2+*+0/.-,-,,-((%%!'(1;.(H8:IALFF)33@<4&+'))(&&;"%&4;369=>>>=D8004=GCOVW4A;EHEF;:TH9@:HdgcTKB687 88788787888788777878778777876878767678787676766777676787877767778777876787767878787876787876778778767678787876767678767676677677667667677767676766767767877767666777666766767667 66776767766676677676667767676765565567656655565556566556665665565 65565566566656545645545445 +454445545454455454555454454545454455434345454545455445454544544454544454545545444554455565455656565656556 565565666556 76776676676677677767767778777887878787878 7889888999888988998998989::9:9 :999:9:::9:<:;:;:; <;<;;<;<;<=<=>=>=>=>?>?@??>?@@@A@@@A@@@AABAAA@AABAB CCBBCCCBCDCDEFFEFGFGGHIHIHHHIIIJIIJJJKJJKLK LLKLLLMNMLLNMMNNOPOPPOOOPPS_Ncs|YB;4123<31)"?6*965;?@@A:579-WWF>>=A=?==8>=?=>?ADONOLIIJHHMEJKHCEJDBACDKTWHA?<<?Y$jȃ܄yqZEI>>?@@@A@AABABAABBABABBBCBCCCDEFGGFGGFGIIJKLMLLKJJJLKLMMNNMNMNPU[]`_^YURQQRSUVWZ]``_^[YVWWXXXYZZ\[]_^_```aaabcdksxytnhhjmruwwupnnoqttx};ysqonkjhfggghjjjifdca`acjnonjfa^\]]^^]^\[YWWVUTSSRRQRPPONMNONNMNLLLKKKJLMML KKJJKJKKKLLMMNMLKKJIIHGFEDDCBBA@???>?>?k_b]xwtq}}lwtxrqmxt{ADDD{khcadg:::ojmmxpnl>>mgb`_^_b9:659CB958;9:<2ZUU1;FIGKPJHMH@@BEHKKJKJKNHHCCCDH@>=@FFGCA@><840139>?@>?848;:8=97=:2/*N*1134<;3/1,&MIGL*UYTNM*1.4<6/.08775311031'%&%2@A7/2:2*(*+)()7>::5= ?=532($NN7=I@#.9413992379>>BA811.18@?878AIOF=643465377310/2341+*&"CC>B"!(.//(/04<<6:>>>"# "&*+'&G0'%%$$9767751*(**-//.%+,+),.>%?;51/22/00/-31--.3=@ <7-+,.93.44# ;+?E64<60-++*/()!"!-6&'%$"#&###" 9!23829!""A$,2"??!# &!=>""%<,+,01)-./4608B-% %2:7:/.8')*+(!*3/54/,4801"$#%##"/(#692>EF>735@88&+=43/(890.3104-leMO_jcKGKXrnfJ57PX7G\7gKC<;7W)8$8RFBA9X;>;88/D?+/16175.i9daZ_:33?C/,TF!GCJ56CQ6JSa\WWR92W5(OL2:9H=HGe<@<567fkaTrjcW$$5+JWf54UUa^SHIGN?EHGMNLDo\3UONNGMSNTPDC1Q79N5*;Gh{:e_FnaULJLIGFFDA;58@%#+@@EDQTpD5RHaF].+QR&(UUJ1NC<.%8'&0589=4;=GM?@@??>=<<99777699=>=?E-240/MJOQSUWUJGNV.1331]WUUZWRMOOPUML[``DHWWPCNLKOHDL/D +&3<*# (8A?NXMNMOKE<5=6-4+&/6(/ *:20+1Z?BS7>C?>FD=)>LH,$;92;:1JV/0..2082(('(6345434876630/+?*,,1<1)?5"$%%*(! #"#%$./1.%-/-('5+"+*'(,(!''&+*''()'+)F7PQML("      !#" !!#(&! !))$" "#"9VB0#%)=??4(""&-&(006(!#%,:6CJK-;:AFB@79RE5:3B_b`QLX;L5 "`P!7 N8%ޤmG7.++',".(&#"%'())%&%$57.*=X<=E=y~A:99B"$%)&%#101.+)*,/--39144/+-214/-/0..2.-0C?d+)" 4'&"=BCBDACFIJH$! ! " !~#%$%"%%"$&%'((&(*)(++**+-+,+*)-,-/.-/29674578538355622723367>?@DCEFHKPRTSRUVVUXWWTRSWUSSUZ^b\\\]\\\Z3^0119[=^}yzepUPτ>ÿe_powohqw}vgsrztofuifin788:ldd``ab743c`edmjie98f`ZWSTSU11-,3PJOR[RTWw[OQUVXSV\b`WIFGrmongntpoxCNJB>B@PHCEFIDB~B926:84530,,&32*(*+)**#C>@&/:=;:94397113567667667640236910//43523330-)()(,/-,*,*&)-.**'&+)$$> %"""'&" #!8667=GD?< %#&,& "!! %$"" !!24%(6, *'&()& ! $$&$ !#*160)$$$&()&((+,($" **$$ ##"'% " $#!    + +  #!! "   $*)# % 53).6442206=:?:,+/ ". #(3D'NF1J<;52530.-+'  !##%,,9!*&3(778/3. 5.) $& *,$ 19877:==;94/.267>FFHB>A@:: 8 !$;4///""1,*/>=91,&%&&(((%""$!$#!"!#%&$($!(0,-.(*(&$#"#' !2046:<>;0.07!$##C><;@>=8867=7;GKK2286.%&',1)%,)    +4--+--,'"(! + + ".,#*0,,42*%$& /8! R  !"  %&%%"         +/-+}~}~}~}~}~}|}~}|{|}|}|}|}}}|}}~}~~}}~~}~}~}~}~}|}|}|}|}|}|}~}|}|}~}~}~}~}~}~}~}~~~}~}~}}~~~}~}~}~}~}~~~~~~~~}}}~~~}~~~}}~}~~~~~}~}||~~~}~}~}~}~}~}~}|||}}|}}}|||}|}|}~}}~}~}}}~~}}~}~}}~}}~}~}~~}~}~}~} ְľفР킉^ã¼ĺ°šɏõ; + +  +      瀎ߵᾬǾ꒨ïƹ;咘јJ !"" !"""$$%%%'('&&&%&()))(((+/5;AC>:50,+**+/3689986421/.///011/1125567787788=GPSNH?=<>CHIIGB><;==@DHLQRRVY[YZpqa`ceggaTG>9555444233579875211214;-@AA=71/-,--.024430.--,,*((('&''&&'&''&(())***)('&%$%%&&%$%$%')),-,+**)('%$$$#"! 8C燆ٻȂŷƸƻíȝǫ놈ŀĵĿľֻ°¾􋚢ȷƚĵ􂋏Ķľ«ـ׶°ͽſ⇌ɵսȳΫ®ޥ䞧ߜҤᔕʓְ灢Կۻ׻Ωþʹѓ̺ґԫˆ訙탕ހοɝơȱٷѰ峮♧ώ܊ꁗ򅋈򈇆$닍퇊L@@:$(+00///0.,+*-*)(&$!&3:41-;EGABDC>?CDBCHH>*?@>>==CB1'.67:;%**,-+$*--/133586138'*.0476a/,)//.0/,P/06762-T[XV>14.*%$#-8#%(%$&#$%,EV\ZK<:0-+/4856>=1>[]]OMED97787878877888787787878778787887778787778887788878877788876787877678787687 8777867787878788786768787887878887787877878 7778978887787877787778878887877788878787787878787688768778776767676766677677867776766767667776767667 677767666777676767767676677765676 76656766767676567675565656 54656556665656566656566555654565454555654555455455545554445554454544454454554454445544544554345454345454554545455454554554545455545455455545456566565666556566566656656556 76677566677676 77766767778787 887877887877789898 9887878998889899:9 ::999:9::9,:9:99:9:::;:;::;;:;;;::;::;;;::;;;<;;;<<<;;;< ==<=<<;<==<<<=>>===>=>=>>?>=?>>>?>>=>?>>=>??@@??@?@?@@???@AAA@AAABABBAABAABBABCDEEDDEDFEFGFG+HHGHHIIIHHIIHIIJIKJIIJKJKJLKKLLLKLLKMMMNNMMNOOPOPPPOPPQPBOai}fMC62566352'A=I736@A>?B9T48PX2N@1ZIL>}CA>DKT012,-.:GJD@;<@C@=BHEA?<76BHJG=?C<;@@<7vvb07/26.6965PQPSVUTVY,++-%111.//...--./02356545579::977;6:<9:7=@=;>=@@B?ADEHNLMRLKMJOKHJIHEFFDFGHIGTXI?<<;<=;<>>=BAADDEFIOPKLKLPPQRSSVW[[\XZdeeedddedh3gheikvymlillporoos|:1>j2]t7yVT^]?@@??@@@ABABCEEFGGGHHIHHHIHJJJLLLMMMLKJLLNNOmPRVZ_cb`\VTRRRTUXZ]`bb`^\[XWXYZ[YZ[Z]^`aaabbccceejry|{tkjkosx{zwsqpoqruz~Ѿzurpnmiiggiik-hgdcb`biorroic``^]\]^_`__^\ZYWVVVUTTQRQQQPONONOMONNONNMMLJKLLKLMLKJKKLKKLMNNONONNONMLLLKJIIGFEDCBAA@@@???mzedYvsnvoz~wumno@@@=ACDeejkln:>=@@><>;D=95343790-TT2=CFFHMLMMHCABCHLLKMLOVMGEAACD>;?CCBEDCCA?:55699>9?GF28AC89;;923/,,TP-117;<5661'/)JR--ULJLK)031)FE&27533321,!%$'3E>4-12-+-*--&*? ;=69<>:38<6-.):ERK'4:0*0;;3477"'!30640?$#@>=E=>D=844655399::5350/2120,'#"HA>>@'-0001/2796-15<43489012.(2.++,1="<54-)',<2+688$ +""$02&21,',-+/'$"-!#$&&% -0$'%$" "$"###!+-61548BB@=#'&%&#$$""$ ?>"%'<2-.62/;126E4.1%"!.:8,(08)+)*)"/:% DE;335A@:$+52:-.:30/-)' [gRYgmdOIKXvnaVFC/M-LP:\ED8==4;9?SU\{EJ^Wz)6AKUFD02/.A=<;<<<;;;:855478ABF@=ABA?A@F@@@>PONL*"!  + + + +  !$  " $ ## !"" -!"!1998) #$0?BD%(+$##)01/.+*,...27520-)(2676134/03330s\$%! $ &&&'AHIFGJHJJ$!"!# !"#$%&'%&%$%&&(()(''*&))'('+,+++,.-10./14856956547766464674558:6@C:54244655667846;99;=CB?>?BFDDFEFJNRTVTS[Z[\[[ZYVYVWSVW_aXYYZ[_]^[*XYa16DR=Svwz}Ehz[hn hfXoymgy{vnyzqq}knn|~ssxn78748:?s_bffef3455eefa]]ac_XXXTP*.,0417:USVP[bQVgdUUyW^~QTUOFA<~rjjlt|vqhsBDEEENYOLTFCDKK=x{|C::;:898653/-*&1-*(''#&&!!==$/7<<88478742346786759A9420036/-/022545532.*++,+/+.32%+35,(('(#% "D?"#!$&&"#&$" :: "@=:;6$%"22 ("& #"  &0:4%,# $)%"(()1+*/+'##'**(+()*'$# )%##%x!##"(%"##    +    $$$!"!$        %)(!#! -4+3@E?3027JEA7,)/*&.#! %$%C/+ &%"-) *2:5-0C1/4.+AT#").8F#)72C!&+-$$1.(7&) :";3476"=5!!#)#&$#$""86#-4.&%/(-)'&C:!38967,27<:;98/&>'""BD?<7665632210.!7#/,+"&) $"-(#& %$0(%!',&*13<85;75894//0248=BHE;:3*')&'%%"###"$#!"!""+*-(&*-+)++-&%$$!$%,! 433837:3)-77/ !"$G@>?CE>;:55:42AFH8413%/!)7 +'"%40-/04,"&,&  !  & "&%,,+45/!# $*!2==;25!0#!!!$)&%""!8,   )   +  + +  + ---+}~}~}~}~}~}|}~~}}~}}}|{|}|}|}}~~}~~~~~~}~~}~}~}~}~}|}|}|}|}||}}|}|}~}|}~}~}|}~}~}~}~}~}~}~}}~~~}~}~}}~~~}}~}~}~~~~ ~~~~~~}}~}~~~}~~~~}|~ +~}~}~}~}~}|}~}}{||}|}}}|||}|}|}~}}}~}~}}}~~~}~}~}~}~}~}~}~}~} ۷ź󆋈彜ʭa߼ƾëή@      + +  !Cӑ́ซɽò󎦨ÿ˵Ȼ"ƼւƿޤL !!""#%%&')(()(''('&&'&&'(()*,.5=BDB=91-+++-1379;987521010001//1235567899889@FIKMJDA>=??BEINRRTVWWVWlk_`dhgh`SF=877654446569;:7531136:@DB?:3/..-./0345520-,.,**())(('''&'()))+++*.)''&%%%&&&%%&%%$##$$$%&(*+-.---+)('&%$###"" ;6վ²膅ㄓҵʽ˽Ǽ޷⹏˿´迲Ī﭅ɀɷƻٳ؀Ѵ԰܈ˣ񕲡򗗏̦ϟⅴ尧ɡ̡ɌʬҾԢ蒸Ȁ򤤵ŜІ݋Ȅĕߡ冏䅊۹э퀨멦ɤڟٺῥϧЂ􃥠څ(ߌ񈆋B=C<((,/012200..-.*(((%$!$044?0>$ECDGDB?ABA>@A87M;AA&4,;32,097AG+.*&%D:'#"(/84>5>?@@>:;C;!(47=?@%',,-/E$-.0123486479),/4564a-+*//.//10+35441+XVZL=52,*&##2/$&,/)&$%(1P\[TC:4/,+/366;>8AF65>L3@5[hZ4<@IKHF>@=YZC4?Zi_ONDT:8887878777887787778787 88877788897878788878778778678777877678778777878787787887877878778788878787787888778788878878788778877878787878788877898 +7787878877878787787877788877788878777878787876788787888787876766767766767677677676676776 766676777667656676566656566556565656566565655656556656565454545455454544454455544545554545545 4544454544454544455454554445544555445554 55445554545545445454565 6556566655565656567676 +776677677678767667878 777887877878789988898989:9:;::9:99:9:::;;:::;:;;;::;;:;;;<;<;:<<;;;< +;;<==<<<=<= <<=>===>>>=>?>???>=>???>>@?@?@AAA?@A@ABBAAABBACABABBCBCCBBCD CDDCDDEEDEGFGGGFGGGIHJI +JIJKKJKKJJKLKLKLMMLLMMMNMNNMNOONOPPOPPQQQPNC_gswNP;6661/23-961629;=;?9@84H\4O@2VUSE~CDA{BHJR001.U4:79C?;<<>?B@<8?97Ku~7@9+2*T2;84VNMNSVXZU,,-*&2/-,.,-//--,-02244367577:;968;:=:899;;9=>C??>>@>><<>=>@>@DCEHMQSPNLMMNOOPRVYYB]\Z\dceceeikkljjjlpurmklnqtwstrp}q._RΟzkHmhQwz@??@@AA@AAAB'CBCCCBCBBBCCCBBCCCEEFFGHHIHIIIJJJKLMLNMN MLKKKLNNOP~RU[`cbb^YTRRSUVX[^accb`^ZZYZZZ[[[\^`abbddedddfghqz~zqnmpuy|}|urqqvvy{wsrpnmkjijjlmnmkjgcdcdhnstrmfba_`baa_]\ZZXVVVUUSSRRQPPPOPOPOOPOMMMLLLKLMLLKLLLMNNOPOOPPONMKIIGGEEDCCBBCBBA@@@AA]g`ys}rvjguqsmrxpwy{FAE|z=:pebehehqpdgda17:9468=>WMJZ\lZYciURRUVY\_X[QKGH{qoyBFFFD>DAuBB?D@CFJPVYI>VT=?@:AAB?GC?>?;98;><71\/>983,+,2;BDCLPKKLHCBDFGGHIHFJNJFE?CJIB?>DEBADFGKCA=958:<67AB++16757620,./2+O+026=<797000)Z2UIFEEGL)0.LF>>F377121.,(&')'*7J=/$"?"$! ,*#*684767;626::2+QMMNR#(421/3>>4434"&"#2!4@"$B@=C@BE=665545488::644/-422/,("!#6/:@!&-.04302522-/58>;A;!"!>@<-+,*+('+:G=9;::1-/.0321)%&()+/8D@ ;88;:542/+4-)*+2C+(D7+(')/)(3285)*1 +#'/.$%$1!%%)'))*B.3E)&E@C$&#"#%D*051304=<=AG%%%$"#$""&E<91=EIE935A!?%)444(.2,&'$&9UV\cfhTHBMnfe^JB6M3FRIA?1IE@5625g0X8G@:4:-O8:8U.-065[B<=TFKWjwBG[CIJ31?4G]9L-RMQ@?K96/\E0L*",BA;39:/37ie_gchlfE5'<5F;1LH59CIC=na9DRdE7RvJK:/UU*.[URALLLJFDFI0a57O61JT3C9D:LKRLKJMONNONNRNF>8;=5jEqnAQ^'LWR42*)+,,+,++('+'@.16:899A7KORCaXW.PX$:>/.SMJ!RSRNOLJJKHIJKKLLPSYT[\UT//]-12532\Q\TQMKNM4<0NFEMIRI@>>=><:9?2.&I0475446;<950/WT->:&04:&)@1"':,$$>  " %.%)&> $!""%# * !$%$'(')-)*P=KNKOL"!  +  '    + !"!$!! ""!" f4682'%" A&&)&B),18,,+)*30-0.0032/+047;545002402Qw~-*' &!E%)')FEHFIHKJF#!" #"$$$!#!"$&%&%%%&$'&)((&'+)*(()***),,/-./.0/257t5879898666756748:98::;BE:45377964776657;:;>ACEBCBCCDFEEGKNOTVVW^]]]_]]^][VUTWYYXTUWZ^beac^Zdf6tyYTry|Qa_[h숉ހƿ܋gcumvnrmftor}mouossym>:=ol54ifaghhhi7854f_\[_]\ecZ]YU*/2/*+06:YSR`^lWV`bQOSOPNONHJDB@Azqiko=???>=CCFFEJAEFGJMM>8NK;<<7<;;:@<853/+(*--)&G$*'&#  &/798;:678633554435525<821.176//-2335447:411/,-+*&%/4!"&')'('$!"&">!""#&%$$%$$#C&A9257:8! 400.0".$%"#!;:99:($"!"($  &))*/.+,&""#%%('*(*)$## !$$!$  "#%+ !" )$!"%    + %&'#"%!$#%'*(""$'$!   +  +   $*+) # +-5>@A5/,1F@A=-'*$'$#)&& ! ;-&#)+.&#"0&*6AI(+8+,*  *.)1,1&$(/#($# #:926h6885&&&"(!%$''!A8'*.4&*;$,".3=86*468789<06%)&!9B:124454443240)7!7:0,-*  !)('$.))#( %"(;:755345513688:6;@D>CB<9 !A #%(%$G>H=92122%+ 3-/76=3+))''%#!$&%$"""!!"#/62''10.*(%')&$"!%(**#$:316577*/497 !!GJCDCA9E=98936=FA:1)  %2$(/&18%*/.," -.) $- +  "3+-.46*% !.)2 ?4:838!!  ' ""!""()&%! ;7%   +    (    + +  ,)*),*}~}~}~}~}~}~~}|}~~}}~}}}|{|||{|}|}|}|}|}}~~~}~~~~~}~~}~~~}}~~}~}~}|}|}|}|}|}|}|}|}|}|}~}}}~}}~~}|}~}~}~}~}|}~}~~}}}~}~}~}~}~}~}~}}}~}~}~~}~~~~~~~~~}}~~}~~~~~~~~} +~~~}~~~~}~~}~}~}~}~}~}|} ~}|{|}||}}}||}|}~}~}~}~}~}~}}~~~}}~}}~~}~}~}~}~} ҬŲ܀􈎊ӥД]ڼ˽̱B *         !3ꙑȝǤ񄆅ŵђܷ棤²ǿ¿®˽ ؛쨬Œߕ߭b=   !""#"#$#$$%$&'())*)()(''((('''())*)*,/6=BEEA:2.,,-/048;<;:854221001000146789:;;999;BNWXSHB?@DINOJFA@>@ACGKQSVXUTTRVmGF~la`aghh_RG?:8656.789:=:632245;AFHD>72/.//02335551.,+-,++*)+*)''())(*+,+**((&%&&%&'&%$###$%%%(+-..//.-,('&%$##""!! :@VՃǷϹ񀀀逊󻕐°ٚο˼˶٩ʣ۫Ȼμɰۻϻ惂ꀇοDZ֦݀̽󆘦ᑧ懩Ծ̀Н܇èΜس߾쵣瘱ʤ莙݀ՔƿńŹΉ֣߀ݸԮؗƑύ݀脋ą˘ۯɀʭӐپŹϽΟɚӶ݂͒敟߄/T:8B@6*+,-0//0/.-+)((&%"!"+5;@;#EBCCDE#C@?=>:?>(,@@>@B=)5V^UJ=7--,*938>A=8;C67;XJ?*bjLV<>NMIIBGCFXM8;]h\PRBT:87898 7878887877889878778877878887887878 778677788788788878787887897788878788777877887878777887878777887898887898 788798777878788877798878887898988787878 77787877678787787878788788788877787878787877876766776676767767 6776776776667 +67666778776 76676667765676767656765676655665656565656545455545454555454445445454455544554455455544544454545445454545 45554445554545455454565656556565666567656676676667667676776688788877887877878887878988989::998999:9:9;:9:9:;99:;:;::;:;:;<<;;;<; <<<;<;<;<<<;< ==<<=<=><=>===>=>==>?>>?>?>>?>??>? @@@?@@@?@@@?A@@@A"@@@A@@AAABABBABBABBBAABABCABCCBCCBC +DCDDDCDDEEDE +FFEFEGEFFFGFGGGIHIIHIJ KKKJKKLJKLKJL MMLMNNLMNNNOPQQRQQSUXiluNVI:98.-002 #?41-24;CC;68d@OaRI;[aVJDBHDB@AGKY/.,U.A8KGA?76;:?>??@<9==HA:B@<9<;@;><;=?CKLLHIOOMPOHMJLKMMEGIIQNQX]MFBAA?=>@?@@@=?BDGJKOPNMMKLLLMOQV[[]][\^`bcffgklnpmnpz}rnjhjm6psvttw}81T`yvlVMMOLxg|@@@?@@A@AAABABBBCCCBBCBCDCBCDDDEFFFGHHJIJKJKLMMMNOMKKLMMNNPQRQPQRU\`ceda[VSSTVWY]`cefcb][Z[\\\^]]__abceghigefggoyxqpqvz}}ytssvxzpj~xtrqonmkllnononkigef7bgosvtqidba```bbccdb^][ZYXWVWUVTSSSRQQPQPOOPQPQQPONMOMLMLLLMMMKLLKKLKLMNPPQQRO +NNMMKKJIGFDCBBCBAAheasouqoeyrtzvm|vwvs@;=ocedni;@;9mkhcnmkt:fotri6=8;668hVNULLOYZcdk^[TXcYWPQUXNFIIIGFHIIIGPKC?DCD@=CCDGKR]c]dcK?=>AMHLBD@@?;::9<:822/0;;:2.-,.8BFJNPLKMHBAEGIGFFDAFHHDHBEKHB?BHFEGIFKLFB98=A>;9587')5?A76<920/244,+469>?=;6,.-*VD28=<9?E.72.S>CD,011/.*%(/.+))9@>:)58! %*),,433948;0,6=7-'PDDPMB*4.24;E<251073)78# ""?>?FGGD:3312575878;954./644-+"#$#93< &-0/23.2224/-23;><>A">:-*%'**,*'+:E?<8551/,,-310'&')*,.7A>!<:< ;674227.*,+0B+?D;-)(-2,+3695+((+ "#-+5!&+/,'&$$=078CI=5;=C<@CA7+/0.0039645:@F##@"$CCJ@8;BF᭾=:"@74?AET>7>DG@<885ba4:>7.9=jC9D<2DE8423UEDHPlWdoARHdhHGXG/H5=2U1OI:3VOXGQ>>F'CAJ8]QZJVIE?b\^]lyK57WNV<98F,NEK0RZQ1)4YvRF;;SFVI815LW2kQ^PG3,))*,--*+,' ,! N8:9:\D[SUS3V=YTV#%8TYPC'3%JQKRLDHHKMMQNIJSPWV]\VR\2`1443222Q[UQMNNQOQOMHEGDHLIHB;<<9789>;=<::877969>DCB?BC@DX5aNPPJR0[.FFRV/0.1`^`^^[WZVSSOEDNKQU9(HUE"$:XXM84%I=25,/16GEFI]Q7PIF85AKD/@' (+.MH)(1 A:"6&.J271/37DDCH?@D@B#--(65?@5[RTXXZ0,P>C)%5.035632.9<822.02>:40@(0#)$=5,$#3"! !!*$$"#79%0 #$%'&&&'))&",+%&%&*)+-(SKIRMEHD+ +  +  +   + #"""#! +  &.!!#"!! 25,$'!!(AF;/#r!$,2/*,6(*4J?6$W^GL48HIFD;>>DYN99Yf\PWe♕ <>!H?6)" Hc'k#fĽabM5.+"#%"#+%"!#&),+&%*E(3A83,ELEA==A=@?=?;E%%%F%1)6/,-)(/031-0E0314/.32:515400226UsD41*"LCBC61&-LKKLRPMG$" "!"#$%%##!"""##$&&&%'&&(,&)+*+-,*&)*-.+..---188667;789:58897796896;9=EG<8666886668886:=?@AA?@@BAAJE@?GGHF?BACEHMSSMQWD988+',!#),$ 2.3(-%*,($)*$&)+(%"31247;*"5.(/!!#')52 #3>3/:)-;80353566($%/.,*-!B!/3885;<75213. ""(#+)'-9)4,' *0#2-**))%' +*% 27172-12569=<63=E=954354733/.1.3731,(&&#!"#'%%$##!!"&/1,&+...)%#%'*((')*')8$C56936 >!03== "EFGHHEBF@<<;1/219;$ 08$ 10-$!".' %(<2"2+-$#,4/'72  "#-/06//' ),#;69:8:1"  "$! G(+'"" '#       + + + 0+)/)#$!}~}~}~}}}~~~}~}~~}~}~}~}|}~}|}~}|}}}|}|}|}|}}~~~~~}}}~~~~~}~~}~~~}~}~}~}~}}|}|}|}|}~}~}|}~}~}}}~}~}~}~~}~~}~}~}~}~~~}~}~}~}~ ~~~~~}~~~~~}~}~~~~~}~ ~~}}}~~~}~}~}~}~}~}~}|}}||}|}~}~}~}~}~}~ }}}~~~}}}~}}~}}~}~}~} ڵźѥ\ԽķϾ׫խ듔¶A +  +     +    +#Hǽٱѵʸ͙幍ꀙǻѷż!̃νЖW  !"""#$%$%%%&&'()*)+((('''((()*))*+08>EGFB;40--./15:;=<;9643311013579:;<<;<<#F@ADBCF#A >?A=D/*5;B:7:XX:BwrKX;=MMHJHJH>SOJO]_WSRBa98989898989989887889877787887878887878 7878778887798788787889878 7887898898877878788987898898989898889898987878789898 98999898988878 788789878878 77878887787787 8878777887887878878787 +877877878878877878778787878778767677878787876667676767676767676767767677766765676656-55665655655665556565556566556565656665556555656545 65544555456545454545454545654454565556656665656 56565566566556567676667767 +6766766776788776878789898889888989:9:9:9:9:9:::9:;:;:;:;<<;<;<=;<;;<=<<==<<<==>>=>==>>>==>=> ???@>>=>>?@?@?@AA@@AAA@@AAABABABAABBCBCBCDDDCDCCDEDDDEDE FFGGFFEFFG!HHHIHHHIJIHIIJIKKJKLKJKKKLKLLKLLLM +NMNNMNNNOOPOQQQPPQK;ikgKUTF=6+,/26-+./,+05:AA>8V7EK6[P@0\ZRINOPF>?GMX.-/0.=9CLFJ@778;<=A>9<>?MoI?H9*,FKLWf3>ZLRSSTUS*-)&-4-//0///.-//01456654689:=7889;><9:?;;:@A=t:pitok]uOFVu?@@@AA@@@AABCDCDCDDDEEEFFGHIIJKKKJKKKLMMNNOPPPONMLLMNMPPRSRRQRV\afggc^XUUVVZ\_bdfgec`]]]^^]^_`acdfgijkkiiihnxvssx}}xuuwz~qrm?~xttrpolmmppqqqnkiggfgnuxvuleccb`aadeedec`^[[ZZYWVVVUTSRQPOONMLNMLKLMNNPPPQQQRQQOONNMLLJKJGGEDCDCDE]rg]soxxyt}xqwzuywxz}?xpt:<:hkmjs><;;mllimpAqBMAA>hf373546f`ZSJYdi^hheh[LLWMNMNPSOKLMMNKIIHI[IIBDMECCFIILJKNLOb_FB@?BLXDOOKIA@862,8:755037981-,UX7@JPSROLLH@;BIGFDBDEGEEEFCEIIACEKLIKJEGA>74157875::91575>@I('?965249736497:640/356.("#!!!"! !'02-00,--.1/.45=!C?@@4/)'')(()(36;9;40-,,.20.')+(&).8D;A=7=!>:92-591**,3A"5/3,()/11,+%')$#%'11=%()'"A=9;0.0)550-/03332-)+/+.12677889;=:=A@=:=835:@A@:447=;9B!%:1.)##! %,2:Ye]_hgSD>EWlsaQR8D0@IY]6;BH:A4d9S6aHWM/*('()*-.00-( ,6?=798>KT_OJ1AT\=,)0@2-KYA>HSPOUJGLMMOLIKJMPVVZ[XU[\`1051[Z1Y\_RMJAKPJGGCBDDCDBCHB?<;:778:9;?<358<===A>?=??;:;<;?AADD?=BXdOVRRTaXZOLT_22/-/c\WZ\Y[VUURPYMBHP,'*:OPKE>+ ")4-& *+5;'241CH#ELWFGQN@8@HC3#- $.,QSD/1 #M5'5O+P;,16J>CAE?I2@C#&,'4,@BA=5PS,X/..2?;#%Q[15:6217?;;7668>924/C%#&'$&#.)4!"$('*(=&!&&$%%()&&'))+*%':5"%()(,*TROOP'>;<  "  + +     !  !  "$!(!  %!$$""!v26("%# $4AD1&+.(*1/)-7.+0LQ36jfEG47GHDEBCC:RQKM[^VSVm,V!&*\,cHI%$]Ŭ^b^E6,!"&%&!! "&(,+'&C',0$:5-#FID@FEE?:9<;C""%'%0*1505.)**.0./1354-.3/431353.349S|D02*#'>CAS`-5MINNOLMH"!#!$#$%$$#!!#$"#$&&('(&&&''&)+'(()+.+'')(**,-,-//06995:966953:::;;;78:>;8>HH>88878;877:8648:;??AC@BAACDDFFGHIMQTXZ]^_]^^_^_a_^]^]_1YWWWY[^cdhf56q<|tYPnv,^bg}QKNЃÄ¿݉wj^{kmwv}}tzxm~xsusuuvws;plm455achfmt6533^ab`ee:e:A886\W+.-..1`^]YQX_^V`]Z]QEEKCFCECDA@ADCECCAAAPEIAEMGEDBECECEECEWP=<:89GO=DDEC<80.)$/.+()%&&&$! !DI/5:<>>=;:81.3866434453102/456112777><8<73.+*,-,)&'((#()&*1(+(#"))&#!$%"&&($#% :84-+232:#&1/(/-"&%%"#22-25!&$! #,%&)/$" !"&,(%%#(')$# $#$%& %#  +    #"!#!! ""!#"!"#"$''&$'#!&%#'"%"  + +     (''   -44:CC4-),7EI<24!&!%00 &*!&("$!31$:+$2H+61;#)B$'!(1)&$ 513)#!0# (0((-7%)*9@-;1"#&-"!'"!/39023'<73;<5422025472//-1;56)!(404..22+)((+,&!  7)4%/0  (,1'"&) &&.4;44<2/367886627:??BB@>BCF$$(%DC%DGG952*261,,+*,,./-.2,((&#"#$$#$$#"%&'')'()*)&%&&&'++,,&"(81...037;>@?=:75432100244578;c=?><>HU[\UKB?DJOSPKGDBBCFKNQX\^[VTS]wJNNlbbdjlj`PFB?;978887:===><87689@IJJF?7320023468863200../.,+)(*+)()))**+,++,++'!(''&'('&&%%$$%%&(+-01211.,)'&%$%$"! !"! ?=8A@<::V^8]tuJ;A;GOIKMMJ?NORZ\LQUPA498889899989888989989899898988999798989878987878998787898878898879788878988987887898989898 7887878889989889988898788898998899898989989898988789889899879889 899898988:99:8788898 99888999878898 9887778778789777878787887887787868887788788877878778778787887888776776778867887 8787887877888787767676767 67766766676676 7667666776767676565656676 556555655565 6556665456656565656456656545655655656566456554545655656565656565656776665656567676677766766676677787 6677788667877876788787887878988989898989:999:9::999::99:9:;:;:;::;:;:;::;<<<;<<<;;;<<;<<;:<<<===<=<=>><=>>=>>=>=>=> ???>=???>?@@@??@?@@@A@??@A BA@ABBABBBCBCBCBCDDCD EDEDEEEDFEFEFFFGFGGGFGGFGGHIIIHIIHIIHJJIIJKKLKKKLKMKJKLMMMLMNMOPOPRQQRQQUC`heIRV_>3.-/2431611-06A>SD5?>?@=:=:;=?C?@<=CGKOONQQNQOGMKGECEDCERPJOS\[JD@?@@B?@B@AECFHILJRWTVVTPOPQQRUYZ]^_aZ\aadgjhiloqps:?r'ppnnmpoqxzB@;8mmVwizkv^g8670./2780/,,-7CQNPOOLMI@<=FFGGDDBDECC?1',.*-*)/5:071.4330.1!9+QC:9;B(3::9!<+$" $&),08;@$=?+MBBDJ*-B>9:56::;D=:79873047:0)'&#$$&###)13243/,.14/0589#@!;<7.')**+(+,(*257:40-./.010.-.*+&,7B==869 ;596,3=5,+'"=.2',*+.23( $&!%''$&) ($8:>!&%A=?76;229/,),,/,/,&)(..+&)+.666499564144589238:>C?8434::;;7=B=C@-.)-3;=0#&' 9#73;"#"7!$%$$$!*+*#.>1;E@&%<8:?"&7,-  -*-*26@Vg^`fe]IEAWxtkQI6/D7?=609GJBDD;=6;f]2-9>50Nh999?;<;3@@<8VSWkXIN@n?_nHO3M2?=xU2:D=:DA89ecGH80H8k6AU/J@YM9_F8C9o>(AxNJQALT365:fUAi]1itEM]]S-,+WYUOTVE2B><@?<>=^ZgcOI1%Jf:859@EDAC:!>SW=OPE>=B?4(1%!5*K]RO<,CP::JQ:541:)DCB?ECF?BC*07$?BC;>3++,.-643E35Z/286301?=7773:=764+76-%&(+=!(8..363%&&%(+$&($"&%'('&&(+-)&)(&&))*-++MRPPP'&==A!### + +   +  #& !  ##& !-* #(%!!!.61" # ! %3>F*1').-,(15323KT/SkeB196CJEEGHG;LPT\[OLWWm9\ +)/}|$!a/N&̜~\^be:)$%%&#!""$!#')**()//6*#'@0 FHFAEA=@;89=>"#$'$&*2810-((*(,2.1134/-0..23010..6:98;>88:;<;7;<b~ZRqqm{chKy\<_ÿ{|j^Xpvs|yr|uw}ynxsvnwtt~B?;nn5kd^ge`cjg55>4efeiccl=<99?4,-1--211hjdTYpkaW^REFkM[ELHLGFDBCEFID@FFU`ADCJKCEGGFD=<:>;;BA?;<92./567855365//,*3520108;8=>=<:4-/./,,,(*,+%$((&'$# &$"EC! ",))&#%$$ #53/5!! "' 8566$$!!60,)(0"%! + +!##$0)-/2'%#&%'.,)/*)&'$$ '#!" $ #     $#!$$""!!!""" ! "$$!!#""%"!#"%"&$  +    !'$ *75:CD>10*9MJD1. "! '+$(' !"7/ *3#!! 1.1@4+.&D+>D&%#! <("! ##56()$:%4&%".&4+"(4 )F,%)#,)1,$;0;E$(@=/9;:698.0/-00.1383773;+ +;"9701.01/101320,$  $5955  +$#)4-+&'"$!$'&+=85680.4:6765388;:@@@CB@DH%$&H&&G?F=3+(/30*-,+(++,/.--,+)$$&$#"#$$##"$%%%'%%'''&&,)%$"&*--'#*6-46=;>?;9:=A#"!C?"EB>CDABDBA=:1506*#/2/8G@>.%*)$ - " &+!"59$23-().*"  8G=8! +'1'+*,--62&(+-)+!".&%" ",*'&&!%)$   +/.--}~}}~}~}~}|}~}~}~}~}|}€}~}}~~}}}|}|}|||}}|}}~}~~ }}}~~~~~}~~~}}~}~}~}|}|}|}|}|}|}~~}}|}~}~}}~}~}~~~}~}~}~}~}}}~~~}~}}~ }~~~}}}~~~}~}~}~}~~~~  ~~~~~}}~~~}~~~~}~~~~}~~~}~~}~~~}}~}|{|}|}|}|}~}~~}~}~}~}~~}~}~~}}} Ѭûۃ˓Ϧcڿ˗ʽ˵ȼϝɘ" +  + +    + + Ľ臖ΜĪÿȓգ캠ż􇒎¸ƹ￴լ΋śZ! + !   !! ""$ &&%&'()***++*)(()))**))**,07?GIKJC81../148<>@A>:7532223444579::;<=?=<=DQ[_]QGBEJPTSPKGDDEIMOUZ^_[VSUcOQMf_aeloj\OE?>:989989=@A@>;999;@GNMKC<63423567898531//...-,++*,+*)*+,,+++*+*)( '&%$%&'(*-01 +0-*('&&&%$#"!"#!"!>gµĿŷ냌鐛涣̪ʻŶղ򘭦ųƹöȺ½ı􉓑҅˵ʻ鎰ղҝƶ؅ʼƀջļ̸󂐕ǾûǾµȻǽѵ􂂌ӷǨʬݘㄜߚπ䔧׺ׂɫ˼܄ᰀɑЃށˎʬڇ̫۟逿㶹ѼśۄڃǪȧ̽ҕЈˑրȢӾѿኴҁµ˼ҴĪޜ۰􅁋ր,DCCB=7%(**+,.00-,,)('''&#! '5A8%"%)+,*-6?OcZ>3,++(+<@29<=9:A<:=;TS9erm@:=8EOHHFPIBRTTW\=FRE>6:898898899989889889 8998898889989998998889998899888998889878878898787888787897898998989898988898889998889899:9898987989989898999::99988878889:8:9998899889998999898989998898998998998 +998887898989878788878987878889899898987878789878 78877887878787 887877787878878788778777877877877687876767776767676 76766677667676765656566556565656 556665655565655456655665656565656565566654565665565565565556565565665656767776567666766676767767878877787877787888788898788989898998899988898889:99::99:::9::9:;::;::;:;:;::;:;:;;:;<;;;<<<;< ;;<=<=<;;< =<<=<=<==<<=<>?>?>=>>?>?@?@AA@A@A@AAA@A BABBCBCBBCBC DCDDCDDDEEEDEFFFEFFEEFFFGFGGFFHGGGHIIHIJKJJKJKLLLMMMNMMNMNNMONONOOPQPPQPQQRQQQ:WihTXVhN8013/978743/5779<@=<<6S1<7J7a[ULBGEG@PGINW[00/]@INK?==<<9;??:8<@=;?>@>;;:=<<@DOz{E\RF/.,OLWe:=UMLORSSS,+)'610552034210,.03213211024267;7::98:;;<;==>?@?@>@ADMNQOMJHHBBDDA@AAA@BKDDFGTREB?>=<>>?AAABFKLJMNSVUUWUSRTSTTWX[]^ab]\`bebgihjjknp)xAqppoptrsrt}D<;QIl廚sta[uZ>@@AABAABBCBCBCDCD&EDEDDDFEEFEEFFGGGIJKKLLKLLMMNMNOPRQRQQPOQPRSTUW]cjlmid]ZXYZ\`chjkkifddccddeeefgikmnpqoomnnuzy{|z~gifxwusrqrrsrvwvspljiinu|}ztmgeeddeffhhffdb_`_]\[[YXWXVUUTTUUTTSSPQPNON&OONONMMMLKMMOOPRSTSRSSSQPPONMMLKJIHHGGFEFEEEDDDEpwtdXYcd~tsyrwEx~}oy~ywy?>x<;tkmngejt<>w=DzD=or>CdhAD958;7=>?otd][]u\SUTJGGGECEMKNRbQLLTYPYZTNOODEGORROVgnZKDADECB@@?>AJD]NPSJxca`\[7@957-/25:8221/5?LGEFQPLOKD=>EGHFEABEHFDAADKJGEEHHOOIVN><6416GE>>E?;:>7mVKKW00-3ZDGL-27;>92/.ML;5CK:10C28ERJGI>:9@$)--,++*'&%((2;C;.)&*+*(*.34/600;<433398=:BC@646?B0-640/1+-*(&%,.00+,,'$'.00.**+*/./4492.128=;8698949;78>?A<,,*-A ;0* " "''&"9;;;!" #"!!"" /&'27+S^;QIFF@F:jpQ[X2<<=S-=6N_=:9988A==5STCZ`V5hPRH0F3;A1>D<_,6j/E>=A>g38MJ7B<EKl'SUMOSPKHNHGEFKOILOORTS[Z_bd`__c3[OQUQ>:KLMFGB@@GBACCGHGC@=<:97448;?D@?>98::899:9:AEA<75;>CEB@=(3ERMNNWLJUV[]a``3caUT][YS[aTJ@?=GC;9B&2K+11;?>*7NVG4LIE>DA4$-$9+=aaYU+&"*YX2$HA:D!365)D>:IH0A;)3?H5@<7=:73*F.3D53<%"6..4J8531:?;944<>53+'D0>&($>3#&&6-:$"$'$(,$)*$6 #%$'*)'+-+(*)((*)/.*(MPOP)(L@@C$$$# + "#!!$)#  # $"'   ()#$)&#" 2:-! !#!&3A;$!+!)..*)00152GF.[id:/41@KCBALF@QRUZZ?@RLmw$= T9 + < \'oþƇɖfa`uN/&&'#&#%#"$!$&&%')()-&4 &$1&GHD?;?:;6E;=>CA"%%F1582+)*)('*//,,12/-00/020/60.-2;UDD8/#&%IL^j34MNORQOPL$!'#"%%$"$$$##"%'&'''&((&'',')**)))()(**)-+*-,./38<>:989946987799878=79<A@CDCDDDBBFGHIKMORTX[Z[]_a_`a```_``b3f]`_^_cbcaek:7;NsLO4jmInOq_ րՁ{ziYY`^}srwpuz~|}|Buwykzu|{z|=;q86mhjkfcdi57j7}AA@CJFFGSGCCJLISQOHMOEHGMKGCGRXJ?;;==999::8=E=QBEKFvfd`YQ03-,-#""#%"!&'',3?=>?DA=>94.058;:7236741.06<:623:A" $'(&" 98,(.2)$!5$(2>:54*'%* $ # 61+',"!  + '*+/,./455''&'%'*++.))'%$$!  %! #"     $ %&% &(!!&  "   !##%!         !'(  -8;FBA70M6RHB5&$,$& ",0"-)((#' ;;(-/ *"&*" #..#46/>.0)#!!&!0:&""+)**33$ /# +!! '.*)?)7,$!0*,'&:21498765990%/--/,,-0%/;'+#3"!>/+++1" #- 2 (2() +-1+2(#,"$&48;56862064521474689:==A?DHKFGHK&D@@?=>BNYbd[NGEJNUWTOJEFHMPRY^`b]XUVfPSM~aZ_emoiXMC?>=:;;<;=ACDB><;;<@HNROH@9758:9:98511//...--,++,+-,+,+)(*)('''&)*,.013110/,)(&&%%$%$#"##"!!! !"HmϽö灄Կÿļ烉ìԩӼ̻ꪸʽֿΡɜ눝䕭ȺՀ삋½ɟ􇖓ꃀٕƶߌ۾ǻ粴¤׾Ԫͽ½Ȁ̻ĵʿѸŧ׻֫ힺ𜮇ԣ˴ǟŔǣ攟ل⟏Ŝɿ̹ᫌ๔»ٙނݟ읥ݐȣѬ򋍄óɷՀͲ†ԧĽĨ°М꘧ה퇎2󆇇BCEBA<0&*,*+./.-,+**))'(%$!'8>>?@"#CA""?;8-%)EJOCA?A3+F3E-,N;[WI70//?/4054645,6;CIEQ92C***+.-C=&.-+#(-27::9P.AY4479972_0-3120012125430./ZY@451,*'&5=:>@::=ANK8`on?;::BMHJCKD8UOQN^9?OD;?;9898998:998989998899:8989998889:9899889898 788898889878887998 +9989889899898878989998878899988899888989 88899898898989989:9:9:998989:99::999:999:9:998989 8:8998899988989 8988998889888998989889988988898889877898889898889898789898789898788878878887878878998789887878887787887788878788778778788878787776767867676787776 7677767776766675675667776 766677655655566565656566555655655667565656556665655665 665556556665 65565545565665656565556565656555656567676 +776667677767676767677678787877889777888787787878798989::8 989998889989:::99:::9:99:9:9:;: +99:::;::;;:;;<;<<;;;<:;<;;<;<>==<=<<=<<= <>>=>>===>=>?>@???>>>???>???>?>?>???@@??@???@A@A@A@@A@AABCBBABCBCBC DDDCDDFEEDEFEDEEEFGFFEEFFFGGFFGGGFGFFHIJJIJJIJIJJKLKLMLNNMMNMNNONNOOOPNPPPRPQQRQQRQRSO;igWMRce9644;=;<:622998??>>;981X87[?5]TOFDAFFRUNLS]047`4IJMB===;75:<:;;<<:>?RvQQG-/3TS\j??1ILKRROR++)(8304643312/3/33522202314579;987=::9:;<;99;;?BABABA?ACEEB@DMWE@?<><;;=>AA>BEHKMPUWYXXXUTVXWWWY\^`ba^^^cec`hhijfggpzplnptuxvtt#?D@@Y}C~zzkt`Vk[?@AABABABABBC#DCDEDEEEDDDEEEFEEEFFFGFGHHIJKKLLLMMNONPQ +PQQRQPQRSTUVWY]ekonlga[ZZ[^cfjmonjigeegegggfhjlnoqsrrrqpu|}}gieywwutsuvvxyzxuplkkow}yqigfefghhjiiigcba`^^^\[YZYWXXWWUVVUTTSPOPONPOOPPONNMMLLMMNOQSSST SRQQOPMMKKKIHGFEFwl\Z[{tytv{GEF?E|zuztxxu;<=Awvvkl=MOB9=E=<59=::>CFEDCBFJJHGEHEGJDJVJHHGDC><:;54:MLCBGB:3C),.++***)'"#%,;B5(!75$!*-34/1-/542.:%<*I?87B**48;;!>.$--5=?>CFL'>:AE??=B>C>94:74:9:8:997520.1141-+020'"?"#*22Z124.,044/463>"!#$'#E?'**,+,)&'(1766961/10/.120($!"%*5D>=68=!:2466,89::!#4# +3)%*%2!%$%#>;?<975522/..((29+*/,.360.+-4E;72./..-+)0//+*&%$&((*,)+*)*02543763034668:>7,')-F=0- ,*&*367=88-.+((*(-'&NLOUOJHC@ELK?=<858@FLL,V6eMUTRVWW?4Yqn]cdEN2a]lf\KCA5/937?'9CEa:6qQ^c?dGPX?>c47-,/./0/220469<4107W;P:]HJ95GOCbd9=<@MQOLNONFFEFDDHLHGHLOPQVTY\^^Z_fi_LNTWKBENSTT>=CFDDDEECFFCA=<>;86<@FJGTSOL]VTR[]\cei[KOZ\X[dXQF@CF@?86:GMNT_\SXVUN@:23>.'.-.<;@,JIZACG>;C:,C1-/6/+Sb[YK'H`R7(&,?"BW50@8JI::<<>?',@#0;&'(8=*JF:@#-&%*)-)&(&%?/, $">"'+)()++,)1)*MRRQQ)(EFIG$$&$! + + +  +  #%#'!:4" !%"+!1':""#'%%!^! 5:'! #$ +&:!2)$!-/.**/,/39B>/Xll<422=<<95/3522727bUWZNJTPHH@?>@?=@FJFCFNSHLGKT@IPCDDC=;4./38:8646::98699>@8:C><>?::6545202=;/+:5*,HKQ99,12-555-#! $&2E+/6"1")1'!=!,(, !$+ .3 19877861102/0474357:;ACFDCGJKG9JD@2 +=2 !'(%8:.()&''(&)"#- ""! %,,((*)+* $!# + +  ,22/-!#'(}~~}}~~}~}~}|}~}~}~}|}~}À~} ~~~}~~}}}|}}}|}|}|}|}}~ ~~~}}~~~}~}~}~}~}~}~}~}|}|}|}|}|}|}~}~}}|}~}~}|}~}~}~~}~~}~}~}~}~}~}~~~~~~}}~}~~}~~~~~ +~}}|||}|}|}|}|}~}~~}~}~~}~ }}~}}~~}}}~}~}~}~}~} ҫɪפ㎛샐^亷磩˺¿ɷ˫ž&       !/ͻ퉆”ֶ˿뇌ԿՋťū¾Ļȭ$θ컘űD + !"!!!""! !"! !"#$ %&&&'(()+,--+,+*,***-06>HORNE=631147<@CFEC>86656656789:<=@BBBA@AJWejdXKGIOVXVRMHJLPST[ab0^XUVgFRTM{]X^gm8fWJCA>=<;==>@CDDC@><=AHOTTLD=87668:;;<:7533200//0.-,,,+,,,-.-,+,++*)))*+*)++*)('(*-/134320.,*('''&$$##$###"##$##"!"#""!!"Jsѵںīֽʰðֻо۾ɺ͟Сǿض܀ŷХ섂ܔϪùĶǹϭ·Ĥȹýむʸƻ၉րفؾɣǹϵגՅ΃䇸ά߯DZ؄ư㽱ϸ߃򵝋󐄋֨ͰĩƯۺʸ򉃻냓⭰߾Ǵ΀もΓ𺳇ֻ򋲜ՁŻʀŽвވӿĸᔝ͇֒񏗖𙑌V瀉FHEFD=6")**-.-..,,*+))'(%"!$",@*A2?P/.1?S_U;$ #+802:>93>@;8:>ADQ-3F'('+//)>!//.%(+2887*@BJ/548;:73^22422105201/310,/^I642/+)(&=>=7??CWO8[mqG=98DNIMHKG?WMIH^?7MGyI9:9:989989 :99899899889898988898899989889898789988989898988998899889989988988989:9:9 :999::9:::89::99:9:9:8999:9:99:9:9:9:9:99:::9:9:989:989:98988998999899899989998898989898989898988898989898987898787878788878787 8887778778787877767677876866677767776767676767656565656556 5655566656656 5666565665665666556556654665565655655656 556656655676767767667667767767766678877787 +8788878777878789:898 +99898998989:9 :9:9:;::999:;:;:;:;;:;:::;;;:<<<;<;<;<;<==<=<==<=>=>=>=>?>>>?>??>>>?>??>>??@@?@?@?@@?@A@AAA@A@@@AA@ABABBCBBCDCDDCCDEFDEFEEEFEEFGGFFFGHGIHIIHIHIIJJIJJIIJJIJKJLKLLMMMLLLMMNMN +MNOOOPPPOPQRQRPRQTK`q[]wH954E5;=<83299;?>A@=\>5^46_F7][MEKOPPJOQOQYe9:i5KHKOA;:>;8:;??<<>==?;>;=;986=?TxqAB>*YWPQ^f9KK<6,TRST,+&'8//02332432253101012223531234577766998:99968889:;>@DEDEFBCBBDDEDEBBFGECBBITWECA@?<=<=??>>@FGGILRWWWXZVWXYWUXZ[]aebca_ehf`ikhighhn{unmpqsuz}{=DDADTZۢyTrTrskj@@@ABCCCDCCCDDCDCDDEFGGGFFFGFGGHHIIJJKLM NMNNNOPQQQRSRQSTTUVUVUWX^elprpje^\\]_chlnqrpliihgihhhijnnpqtuvvssr{~K^jkfS}zywvuvxyz{yxurnnpwvmihggh'jkklljhgfcab___]\[[[XYYXWWVXXWVTTSRPOPOPRQPONMNMNNOQSTVUoSSRPPONMLLJJIIHIHIIIHIHHGFEFFEGrwvxl^Gv{zv|r{y;;51/29=/5;>74;@DGEFJKJNMF??BCCC@BEFBGLQVI>IJGQVMFECI?7e673BJLE9:K?eP;ADECB@ATNF5Y6M*05:83//'IEHI'+WLHE$(82JBCBEA'0,,030*('($$1=B9*!4:;%"%1782513!4420:'<'GE569F&58;9=5 "/;79>B>ADHI;8>C<2=<83976;:;;:9:8820.0,24.-+(%858#--,33/-.0/,1517=! <>0'+,*+**)'$/64571/-.,*+/21(&#%$)7B>>6: ":0021/7<! 90/3.3-"!$!#%%#"#"""!" <8:;3/24,**() %1512/&!!")()(0133./*,-.020/.--,&&*++.*+***+-/3363420558:79:6-'+=4(0!#$!',)('"'$'')')+'+.' /''9%5"+-%!235;9-!!-; ">?;>A GQ{njcOAScg~s[F.Y9J_0QI7PLJM@@7)B/K4N+I1+Q51^PT?469@=5U>Df1USK*8>G;M@=71Z<=>h>P6MWME82SUGCN`deW/[HL6F>83<,Hg7M/IAAxF=@c4#%'(((''%" $'WTKED@?@B@99887@JNKFD%RPWYb[Y[PB:78SIZMFRihOfek:ELRRQ\;?Qf_zQL--D6G=YweWESOPA(/3A4.1003K7:=8439^E;3_PMBL3B?]CTbV+6RKGPPRODFJIFKLIIKJNMKMQRU]`^^_a_MDMQKE@HRb4@@EEEDEGGEDCBB@?>>?CDPCENMOPK>ABQVVIURRSWWSUVZQENRPT[cZPLB>E?=<87BCLQZ]XYZYI<:5, D=!3'-D;A@90GSO@I>1?92*,&05*QUQNSH!D[U,4$*?O9<0Y?LE0@=;&3-A==:?88Y;<+(/0A>8DC+##I31504=???<9>?4KGQ5>&"*4!))M@;'-('.-*%(&(*'326#$&"!$'')*+*)>)PPUSPRPHIJKG&'%&$ + +   !' *&8@4  *"#'-#"%('&"! "!! ":/&(%-!:! $",1.+-.(149F?.TilE820>JEF@EC;WMJK[A1LN罗SF/J $/ ++-¾ƀťpnI.'#.!'()%""%$&(&'&#A+#.(HH@:ABAB@JJGGKR/1U*9243*(),)),-10--.-02,-*-+*'$*5\x=6.!LOJSfm40/(%$LKHF# (!"^#%'$$%%&%'&%&&&'&(()+)))(((**)()*((+,))'***,-.135678:5677;:99;987;;8::>GI@?<986879==;:;?ABDCGKJGHKLKLNPRPTWWZ[Y\^]X]][\ZZZ^heacedgijki3798=zil~fZcEQcb̆6|vsxi^{~~}|zBx}~y~tyt988ptnkngnoqpvjjjcc^78866=<3225474433`\WRPVF>C?@BAA?DIDIMP\]YJBDGA=BGDDKLDLIE?KL>GUGGQH<>;9:CJ?:PF>@?filkm40,:40)%#"')!(03-*.38??BCA>?<5/037:96786249>F=5>=9BKA<=:>72[/0-8::4*);/ND1<=>:610>?;0V/@"%$"!7732=510&%720+,'!$"//""%0! + !%('+/33)'-0+...'-+*(,)'.-..+**'&#" !!! %"!   !    ! !"      !! "%KNIHE6,2ABQL9(0*1'#,*,.%&$)*'%-2%(! /$5+,+!&'1 !#8#,*0+$+-%&,6571%2(('" (10/'!;&,  55311,-...)(()(-152243-/-0,()"&(1*"&12+54?,.+))(.")86G))(!( 3@.+$3.2($%1"/%%!&"+%+1-987:6:9004217965889877<=>EGDDDFE95;<71.29H'+'+--+.//,-,,-+)((*-.8.065684(&(&%%##"$%$"#(,-/1+&!*-..9:8-8877ABF=27::AGOHB=3/2.+)((127:BDBCDA6,,&  +(.&*(#00'.()&! :>:66*  '86 + 0 90<5  &'',''+(! %)++,*),-#,).0(   +  -040--+%&'*'}~}~}~}|}~}~}~}|}~}|À}}}||}~~}~~}}}|}}|}|}|}|}}~}~~~~}}~~}~}~}~}|}|}|{||}|}|}|}|}~}~}}|}|}~}~}~}~}~}~}~}~}~}}~~~~~~~ }}~}~~~~~~~}~~}~}|}|}|}~}~}~}~}}}~~}}~}~} +~}}}~~~}}}~}~}~} سØ쁃働ᡙ䂐腀󅍕^ϯ۟¾ļѮǻ( +     +      !ʮȁϤۯ霵°񆟆˲ƐºƳ1񂎇۰ǴC  !!"! !"!"###$%%'()+,,,.-~,.-,++*-,06BJQTPH@733458>CFGGD?;976679:;;;==?BDFDBCHVdih`QJLQV[ZWQLLNQSV\cb1a\Y[pIUUM?A?BDDEC?><>BHRWVRH@;878:<=956422010//.---.(/00/0/-+,,,*)*+,,++,**)(('),-0344532/-*)'&%$#"$%$$$"""#$##"Ltﱴ񌎉􂀂󍉈쿲ƮӶڀʿη􈕖ɸƻŷѽھظ鎤ɹڂǞ󎹀∊فƹͥ뀌跃Яꐵͫ¾Өù˸˨ҷѢƻĴɺ¶Ŭdz섀Ûީ遖ՕĚƿȯ؃ؤ򴸬Ƭ쇏ˣ޻̧ͣÿżͼ˼뜜Ɏ́Ïގ򍬿ݹֵͺ瀍헙´وЀ½н﷤ڴ÷ԩɲʻ̶˩゛Ύֆ򀀂=ÇLHFIG@7# (---.-./-+++*)*)&$%&$$7CCB!!!"#A@;$'>EPH@A>@;'A6B+/1,?J^]P*(&(*:7;CQH=JH98=>;E.&>'$''*/00#.0/'-,+94$?BF+2558<<72^56533035222-,.+..Z<030-+))%=A?1$),+%2CN^F%*0,.0480/9<<:<<87AA?_J8VlmF;77DMKPIKGCRQKH_D:TH9M9:9:99:989899988988988988998989988898889898999888999889:9898899899:889989989 8999899::9:989 ::98898:9:9:9:988999:999:9:989:9:9:9':;::999::99:9:9::9:9:9:::9:9::9:999::99:999::99::9::9::999::9::;:9:9989:9'::9:998999899:999:998998889::99:98899889 89988989:98798:998999889989889998988:9899988989 +88998899878989899898 977899988898787887 8878887778 778887887887787887787887687888777888676767776676676766676676767776766767676667666766766676776765667656 77655565565565666556655655656665665656567676767767776676766776676676767876778777878878877788789987888787898997898989:9::999:99:9:9:99:9:;:;9:;:;;:;;<:;<; :::<;<<=<<;<;<<;<<;<==<=<= <=>==>=>=>=>=>=>?>??>?>??@??@@@?@@@?@A@@A@@AAA@@AA@@A@AAAB@ABABBBABBCDEDCDEEDEFFEFGFGGFGHHHGIGHJHHJIJJHIIIJLJJJKKKMLKLMLLLNMNMMMNNNOPPOPQPQRQQRSESsePVth?7;=.:>>:30;<=?<@??G:7f]aZK;/_WMS[UXMELIP[gpoo[AOMKF::;<9:=;?==:>6=;9899;Bq{=:*UTLP\fsOWSLE.VY**,*(;63221223113421121/334555674668877677765698757:;<>ABDHGGBDEDBCCECEEFBEDA@JRTHC@?;;;<=?A??@FEDDHJNNOQQUYXVVUZY[]_`abbcfmhcflliihinxpkkmn!oquwy?G>AC?@hi:899=?u]TVOVKENXRKEEOJITUd[PLLNSMRPNOMMWWVPGJ@PNHONJGD?EC;MURIFAA>=>wqrlq7534A?;5239?>5?CA:67?FGDBEIHLLG=@DDCFCCEEDKSUEKCcWKHHDDEACCid|;Y;>IG=9BI;MMFU,SNLFA8ac/;)006764346011=45TN5/580+E>C>#!&4-/010--&&2$':A7'1$%186/641=<64538#?3(C38?D&/6<=9%!-:"<@A?A668=<<<:6>84/3/072115457740.0/-,)&!!"@B"#$,32133///20-0327>$#%$@*9').*))*)-*)2005-+),**'-.,$!%@<=6!;! 6,2* )#$##"  ! 7<62214*&('%" "(//44& ""'$#(2232,+00,()//1/(())&000/-+((.1.10/-*13476:<6,%*75,8  %')(('"!*()+)(./+02%(+&($- ,9/@%++%!3548975&,/ !"";:@>#HWtd_Le^[p~peD.ND9c5*M;AIJF>@OS'=wHIGAAU6c6@:BBTL34<7P?)+'+4'(((,-+)%! <9 #MJDEB??@=9?B@:BGA>:;*O]bcSRLD/--bkD+^BER_N22bC(T([q9^]=VGCF.@0/,2)ax6PQ5N9DP<'2=D50325;:AQNGHKJHIIHLPOOLIMQSY[]]^`bfVDGLG>62376BPOJGGOQQVPU[ZNJKQUQPYY\UPDFHA?AABGFFIUXWX\[OF;5O&#.4:*+>;@K6"8QOBLA:A>4-".! $7)TUJMV@."+.C[]I,!%;X+X0LG>*:7<6,*3E?B857@/&/5I=9@JMH+"*+A":@>@=4<<4`U\<>-&8;;)%%(Q*+*)//&"(&%*,&!! !$)'%%&((*&+,*&-TTSSUSKJG)&#'&   + + +  '!&2@>0 %!#!  %(#"%)(%"c#$"!!!#$ 6%+,%'/:-!%*-)**)(363L@.MfjD62/@KGJDFECSPKH]E3QOz–6*P K `7+9765g77:<=:9<@A@@?BEFHIINNOONORQRQRTUXYZ\`\WWZYXZYY[ea^`ccdeiik5;78<;AWsyu}VnRImPj½ـsosrkjZ}v}Ft||z}vyy@@=:0>EE>;:9879khhdj320290,'%%(-+(395/*+2:?>>BA>?=8037869656417<@6?9RK>@@;9>898^Vn6I0173.)18/@B>E#?88592X`.4#$! "$%##$+$&<6'!%&"!3+,)"$  !/"$*, #%'+(,//0'',-*,./-1.,(+)(-*))*))('%#"', ! !$%A$!    !  #   +$   #6RLDC3B79FPG@&)$1("'**"'4: )J)*($$,9$$$F))*&#%+,.&-57@5)##" 2 " ')5!6-0%+40!+1#&# #%#&4*   ''('''&(+)---(.1+*)."+110)'"-2!/%%'.+6(927*1#2-' #;;*+1'1""'" d4-*%!" )70(:'"7;535335648<<:857;>BDEFDEFH>-:;51/057%3**-///0,///,*+*(*'(*4<*,-.6C5*,)&&%##"&(-263*" $'$-950..655;8=DD:859;==DHJEA4451/1138445>@BCDB93,(8!*',5  +.2*3*&**# ;:/.4$ #7:+  )14#=7.b++/)'(- &(+ +!#---+#*,'E;>!) + +  13410-()*)+'}~}}}~~}~}|}~~}~}~}|}Ā}}}|}~}|}|}|}|}}~}}}~~~~}~}~}~}~~~}}}~}~~}}~}|}|||}|}|}|{{||}|}|}|}~}}}|}~}|}~}~}~}~}~~}~}~}~}~}~}~~~~}~~}}~~}~~~~}~~~}}~}~~}~}~}||{|||}|}|}~}~}~}}}~}}~}~}~}~}~}~} ƯÞ柬焔^쿩Ѵ¼Ŀ޷Ϸ&       %Gȹ°Ǘ֯θ劷ҳྤڲþ¹ӿ۰ǣğI   !">#$#$$#"!!"""#"##"""#$&'('&&'())*+,//1/../0//-,,+,-,-07AKSUQLC:7I>AHQ[\YQC<:99:=@@?>:865421100/././-//000110/../---,,*+,--++***))*+-1455542/.,*)''&&$%$%%##$$$###$$$#"#$%QsǤ慉㾺㼾ɰȺȰýƷӻʳЄ௒ļ˪ܾĻً᳜ԁέʽž丞Ƚк©γĤɽij焍©܀˜Ԓ۟ΌŖ߆ǚגꁢꌪ띷ĴǢ̘йĮ߶ޞ䦨Ҟ䙟ȐѧɂـùѼπĬ񜍍͔ڳǫ͎ȵ̰¡ҥ񖓖킘曛􌏁ʋ0HGHJGB:+&),-.-,+,+)*)'%"$$.BH$#!!!" ==2@?KE@?>AB #C:A*12M>Nb]U<%,#-1593?GCR(;7<=:G+@A$#E'*.11)C/1/,0+*0G>BI).3558;;845874424424/-/-*./Q6..Y**+*)&/IA)4'))(,>JE>,%-,*-3=6)1;9C:8<99?DFd<DGOKOKKRTFH^H:VM\P:9:::99::999:99:::9:;:::9:9:9:9:9899:898989:888988998989:9:99:98999:9 :99::99:::9:9:9:9:999:9:9::9:9::99:9::9:99:9:;:9:::9:9:99:::9:9: 9:999:9:;9:::9 :999:9:99:999::9:9:998989:9899898999898999899898989889989898988989889898798889898789878778987 88988878788878 777877787787676767 +66677767676567676767676565665656565665676 766576665676667 667767787667678787677888787878999888999889998989:::89:999::9:::9:::99:99:::;:;:;<;<;<<<;<;<=<<=<=>=>>=>>>=>>=>>=>??>>???>@?@@?@? @@A@@AA@@A@ABBBABBCCBCBCDCDDDEDEEDEDEEEDEFFFEEGHGHGHHHIHHIHIIJJHIIJKJJKKJKLKLMMMNNMN ONOOOPOPPPQPQRQQRRQRRS=joJHRcrI6>44<=>:5/6===<<9?:;;=<<6<;?@>@<886::HrrE:*TLO\fjFWJN_:-+'.:0(2=543354234202023423453567:8:::8788986878:<989;::>@CGGEE@ADDBBECDDEC@AEKGLSZICA?=<;<=??><@DCCCFHIJIJNQPSRPSVWX[^a``aedggfelmljjkq{rn"mmoppoqtwB{{A>>trr@nftlR@AABCDDDEEDEDCCDCDDEEGGFGHGHIIJKLMNOOPPQQRSSTVUUVVUTTUUVWXXXZZ_fptxurkc__adhnqtwvsokjjkllklmnpquwyzyzy|NdopgWUVTO~}{zz|~zwutXxwqmmmnoqrqolljgecccbb``_]]]^^\\[[[ZZYXXUUSRRQRRRTRRQPONOOPQUVWXYWWUUSQPPNMMLKJJJHIJIJJJIGGGIttvqbb_XZRSRR~zzfhmjjwzzw|BB?w>{tpvp{{Bvn=:mp;kmmhov;pi5<>:gptkWUfk^IHYUHFEJTQSRRURMKIKSK?DSOIONMJEML@FJFGIDw~>>DS]^XQLJG??:69pi89789D@9548>?>8BEDACGHIKG?DHJGKHEGEEFFNBPJHLH@BABB>>IfNRQN35;=<9H:]ILJQ,00.N738;>S045997544/XRRYI:56A;LOH@9>AA>??>>977;=<<6-532/50384103486631220/-'# "!!#$&)/221.0-,.15021.3;!!#$:4&$%&'(()'*+(1-/1+*'))((1.+#"$)&-:8948 !800.,.A=;: ?#%2+6& $$&"!   ! 7<;4224+%$#$!"%*)&/.$-  !$$!$/4310*,+.,+11.,)*++(//.+(('')+0.000.00242-%':32:< "!"&'%#" )'''**-,)*%$)+-+$9209=$&+*$438616!-59: !"#;8A:"EJ~wk\Ig4TSkn`4F=?:R$=C`*8XG?YZOH5b[Y^UY]R-?GEDA75XS8BB>`:Ee@FA6:5.0ZX]e_1U?KVOO;/AG9E50;/NmscV;a@$!$*.,%"782*.44878410&':>B?<=C>4#%.3s:658mC4OXQIKL,5;OBdC;7R"598CNMLMNMHHHIMPNMLKJRYVXYX^^Y^_KPMGD@@JFLYKA@DDGHHIKGDECA>:>;<>N@>>@DPRJC@==:846979:::??DDE<6552>IEAADJOSNHHRZZTURTSVQTTUWLEIGA<;=DHFGPUWQUZPJ>5K4.-9?COF' 0QFHC;==30&5 6.ThVRT]G'*,,1RTA<"+=4N7[FID;A<$0G@EDB=:8>9H/6-4<=G-J$#*6W;61C?>>/997e\^`K/2<#$)*%$)/*('.)&**&()*"!!$%'&$'-,.29G-VWPRTIMLJKIH&&%'$  +  + +  + k#  #+%5B?8!  +!'"( $'!#$(&%#$&$""!## 2 _!3'"-("$ &'/)%(()396M21ObbC403:DELFIILTVHI\I6USљ + ., v*')"U |^^g|P--%&++,+&!'*))&%"'&1+)LDGLEDIBKLEEU[WSJ*3565*)*-,,-,--,(./1/,-(%&%)+BƼvt7&#MGM]fa17/1="(!&"##$&$##&&(''%&'('((),+,+)+*+++*)*))),*+*+**-/1455533677877989::9;>:>FI?;7667889;:98:<==>@BBDDEHLNQPNRSTTUUXXYY\[]ZWTYYXZ\Z]f_^ccdedfhFri]zHodOZbrDy}tpab_Y\OMLL{yyz}nw}ys|}}st>>:o9rmmojquus>me87fi7bdebgi3aX+./.V_b\NLXYQCALICABGNMOMJKFCC@?D<5=HE@DCDB:B?6:=:;>;kp745@FIEA?A@9:613da33222;2+''*./.,041++-39>?=AAA?>836897:8565136>5@<9=:8::9732:ZFKLD,,..,(6+H9A@@  4+-597D! !%%! !$!?=:=1+''/)351/)()'&"&$%"& '+ %')))+-,0,,,.-,-+$*))(,')-*(')**()%"#$ i !!" #   ""  -ROI?/@03BC;##!", !)& $'(7,&*!3&81&2#(3-&#,*)& .' "2./5256.!$#$#//"#"7'7%$"1-2060 &0'- !$!')2>>3,,(.0,+,.,.,(7"$",! ,#5<51#%:**7+*5 '*%!#%)"7"+""!(48799734449;:9878=CBDBBEFCFF7;620,+2.6@3*+.-/..02/,..*(&(&%'7*('+2<=5-*'('# "$""$%$**000'###(3.**,235412;BB??9;<>=A@@B81462...59647=A=@A:7,%1  $+/9/ 2.1,&&(!  ;;89>,11& ",#<7:5*# "-/.,+(-&((' K -,,+)))(H?@@- + !58432*0.,,+(}~}}~}~}~}~}}~~}~}~}~}|}|Ā~}|}|}|}}~}}~}~~~}~}~}~~~}~}~}}~~}}~}~}}~}|}|}|}|}|}|}~}}}|}~}~}~}~}~~}~}~}~}~}~}~~} ~}~~}}~}}}~~~~~}}|}|}|}~}~}~}}~~}}}~}~~~} ~}}}~~}}}~}~}}~} ԧб퀾鄓„]ܴòبÐ'       &.ξóذְ׸㸐޸ȌĠ˿Ŀ퀐·ᵋD  ! !"!""#$#"!""#$%%&&&'(''())*,/1100/./0/..-,---/007ALUXUQG>;87:>BHJNMIC@;9:9::=?@?@CFGFGGHP^ktthWTYbh31[SQQSSX]24jfcag@R[YN;_bm:960SIDBDDDBEGIKeHFEA@BHR\c`YL@:::;=ACB@<:966443221000//./023310//...-.0.-,+-,,**)*+++.13657641-,+)((''%$$%$#%%%$$%$$$%$%&&&%(ì뀄üҵѽ̶ղŰ̥󏭬ȩŸƼ僨|νµƸдƼꥯ늢ڮöµٺؾƻؿ»ζƻDz᧧၀놁Ӹݡӭͪیǻޡְ«ꉠ޾ĵοʒϽٰҼ߹ӒдҠƣ볃ʭȵǀ˸ķį˭ҹžҀŲ⃃懌藓6چGHFHGA=3"('-..*)*,+*++**'&$&(&%6AC#$!"!??+K=GJCA=A(-#/PB>)03M;=@@&(9B%>B#(./0''22.05*$=8(%)-.,5<-+4<@D@8446=CHZ2G]ggD7594.=HJOMKPODJWM4SS[U99: +9:::99:::9:999:::99:999:999:9:9 :998999:99:9:999:9::999:9 8989899989:99:89:9:99989:999:999:9:999:9:::99:9:::9:;:;:9 +:::9::9;:9:9:9: 9::999:::;;:;:9:9:99:9:9:::;;:;:::;:9:999:9:9:;:::;:9:9:99::9:9:9:998999:9:9989899:9 8889:9989989:9:998989:8989:89 +88989899989 898899989899899988998889899989998 9998898878787767878788877787676 7766566777667677677767676765676767656667676767666776576776765677766676766766767667767678767 67867776778788787888788776778878878798798889898889989:9989:98999:9: +99:::;9::9:;::;;::;:;;:;:;;:;;;:;;;<<;;;<;:;;;<;<<;<<;<<<=<==<<=><=<<<=<= >=>?>?>>===>?>?>?>??@???@@??@?@A@A@A@@A@@@AAA@@ABAABAABAB ABBBCCBCABBCCBDCBDCCCDDCDCDDDEEDEFEEEDEFEGFHGGFFHFGGGHGGHHIIGIHIIIJIIJKJKJKKJKLKLLNNNMNOPQQPQQPRQQQRRSSRXAUqbKNZgZ/809<<>>8/1;<=8:7@=>8aPOX^VF6YNLMNLQKNX`[OfkfeeGSZWE<<=@=>?;<>=><@B@B>=98;=BwqFI9-NOUdc@M5Q5.8-,;4,+.7212334233423123355443587788789:98;<::;:;::;:::<=BFJKJGEEBA@CBDDCDECBFJGKM[RG@>>><<=B@>zwyu|tuquphkwgrglm;ljfhm96jddbXQNeeSCI`aJFKPSVOLMNLOLLJMKAU[KKLFzqt~EOINSOC~DDGX`afOVYMDKM<7>=87:<=>C>:67=@@>4;@=:79@BCCBBFFGLHBGKKFJEDFHVJCA@FGBFD@@A=9::DTAAFH[4::;;8XIGJI*8:60(KEFBES023667453+QRQN=YlX7=IQEC;>@B9 )16431-+)$#''&;HF7'&&,,%+6:3+00.412236:BC653BJ(*075. '/9A#>??=9=;;<43268:<86;8426347742566552/02+0+&$e "!8C#$*.11/+/-**,.-.++3;? 34)""%'*)')+-160570/,+/216/+%#"%)&)98;549<3,--#4@:8:?>C)>@<* %,+-!  ?B575///92&'''$"!"%".,''&&(&$$%$!)500-.'$*'(-,,***-,.202-)(%$(,.,/02.,./24/--#%226:"#" > %'%## $"&&(()(&'')+.,+%4&2>B$&(&"6*-25"+'##" #$;:46D?6W98@CWPPE_iL?0<:1\X_:,VXLBCNW;IPOO?OzS5SXXPHV6.-.OP6dS=,M@@=2,%'+.37>=9=<.A`O^o_CAZULRXI07P?\.=6!  #%C:=30E'(()*)+X8*#8?/,5[k(OJ2-/3.-257!-6=<888_D'D]UFQK:>3/FI;68PV>=@EIJLIQPHHGHLLJKGJNTNMSZ\aPGQ\NWSIHFB?KSVVGFDCCDFFLTHFFCB@?<:;>?>>>AJKEC=<>??><76899;:;?BHB=:634=@<>CEEGOSOMQ[VYSQQUNRTRPTLD@=<@AGDF@GQUQTVVJD8,*02&1@AOPB@$YLJF=?;5,!5"31VNJSgdM:?#3" &%XI8 .-D3_:HFC-6$0-0:B@A>;>BRE4493BOF-,B+,5/<34@@A44::;/,,-LGC'%'&)&%'''K(LL*(+(&&##!!&()(''&%+.-/44*RT-RPMEOMJKKJ((&&%   + + + +  !/ +#?>><LSjGw^?FPPWNWҌ󀏗ހ¿hwla^[PIXKR|{tv}s{~{|}vzy|{<::97motmwookqg`ftekbfb7d_\\\/+/2/UTVUOJJ_XMAEWRBCFMNQLGFFCECA>>;4HN?@B?mhkrn;B9=GC;n:89DJJK=EJC83898386455>84209>77768:4..,3J8;@AN+.+)('?9::; &'#<;<;:A! !%$" "8<;:-@TE./2802,*(%!"*) #'$27  '''()'+*,0+,-+))**(-,('+'),,'$))&$&"!"#!,  "" ! "   +  #$    #   + +   *VOI90#!7-/?&&"4%%*&&$'(/,45*20$!&!, $$"2'&*$ +80,"$#5!'## /,"# #'4/0'48)!00.32' !,6"&((&!)J8#75/*(3##%(85(+&)&#,.*,,,06924,4:2(01)*0) +!+   ;$ #"4?1( + 0"".' ($,%)0%""&1665;:4543776856;@;;?CEL?:?F=B>40-+*6>?=0.-,++,.49/--+*(&%$%'((*,/891/('(((%$" !""#$&*.2-(&"&)')-.--2757:DBC<::<:><9890*,..24:63/2<@=??@61) *-89,#<2r2/&'&! + :54+984 &-.//+-..&!%"),-"%)))*"!$%% .662-)4/.-,*}~}}~}~}~}~~}}~}}~}~}|}|Ā}~}|}|}|}~}}~~~~}~~}~}~}~}~}~}|}|}|}|}|}|{|}~}}}|}~}|}~}~}~}~}~}~}~}~}~~~~~ ~~~~}~~~~}}~}~~}~ ~~~~}}|}|}|}~}~}~}~}~~~}}~}}~~} +~~}}}~~~}}~}~}~}}~}~}}~} ީâԽ񉐕䣺]ĮړĹǗ' + + +     ̱ļÿ߶뻦ɻ؉ƃ˸ҵÿ̹ƢѾ!   ! !"##%%%$%%$#"""#$&&'()*+,.013321010/..,--.///15BNVZ[ULD>::=AGNQROJF@===:<>@@ABDFGIHHHLZmy{wcY]d5630YTRTX\`356jggoEX_^P=dj:=<80QGDEFEFGJNNNKIFBDHP\ad]&TG@==>ACDEC@=:87554213321/.012223421110./00.,,,+++**+-/147986640.+**('(''%%$%$$&&&$%%%&%$&((&'Jǟο¹Ƿªфҽ¦˸쁜ū̩ʻƿƼܯ銟ҀѸѳŒ̿ѳڰ폦ȵǾȺý¿½ij¿Ƿض½ÀéǺȾŬ녏ҫ󄊅Ѵáέ䇗֍ؤϾ̱Ƨ׽ïǼ襯Ѫň朕𽅖췬܅̛ڗξݴྰZ¿·ĮީѳĒȸԲпƹϽԅ݄Y㊔냇IGHGFE?:"!-*,..,,-.,--+,+(&%&('  2;>@!! @.':DIEDAAC6+)-+LC,03J:Qg_V>!.-'+/.7/&/9?@=58495"(BC"CAB#-1/',0.,4:)5BFD*.10126:>;32\6:867664150,-'+-T80,*(&)+(%*G@!&)&!,E?89+(''*/1>3*,6;@@A;49=PW^MNJJQOILJP4PZNS:;:;;:9:9:9:999::9:9:9:9:::99::9 +:::9:::99:9 +:999:99:9:9:9:9:99:99:9:9 ::999:9::999;:9:99:::99:9:9:99:9;::;:9:99:9:::;:9:::;: ;;;:::;::;;:;:;::;:9:;:;:9:;:;:::;:9: 9::9::9:9:9:99:999:9::9::99:9:9 :9::9:99:9:9::999::99::99:9:9:9::9:989889::9:988989899889:9898789878889987897888988878887878887887878878787877787676767677677767 66676766767676777666766677667676775567766767666765676676767676767776767676667676778778787887887878787877878#9998798998889989988999889998898999:9:9:999:9:9:;:::;;:;::9;::;::;:;:;;:;<; <;<;;;<<;<;<=<=>=>=>=>=>>=>?>>?>?>>>??>?@ ??@@AA@A@@A@A@AA@A@@ABABABABCBBBCBC +BCCBBCCCDCDCD EDDDEEDEDEFEFGGFGFHGHHGHHHIHIJKJKJKLLLMLMLMMMNNMNNOPOPQQQRQQRRSRSRR>JdhQNUb`971:7:@>?=A@>???=;<=6{rMVVK-RX8ANG7Bj;QEQ@/\,-26032243432224212211344589796799<:99888;;:::9<=;;=DFIJGIFDB?>@BBDFFDFDEHIIM^QE@>=;<<<>=<;@DEJMNLLNMNLMOOPQSUWWXY[\^_abcddfklmnvyojigllmmopuztz|9|uv]eDg\\lg`q?ABCCBCCDDDEEFEFFE FEFGIIIJJJHIKKJKKLLMLMMNNOPQRRSQSSUWVXYYXWVVVWXXYZZZ\`jrx}|yqhbcdhlsx||zvsoponmmnqssvy{~LNMJQTRZlsrhWUYYVO>{z||vrqrtvwwusnmkiheecceedcaaa```^^_^\\[XWVUUTUTSRPQQQSUWYZZ[ZZWUSQRPPNMLKKJJKLKJJLKIJIHHJaliZYUSQVVS~||{~uzz|tnkr{{srv|@@>>CGptpt}xr:lnjhmmx:;skegp99BA>5b\^UJH[<=;?B?;@DB>7D?QIGNV3;;=<<1ROT((14442.-/ZIFP-11$4FB634-UUN5XYWGP:NWD=;G?:598630.-687:;<;6427347744876650,+.-1)%##!/8 #AGA3,*')('&&,7717<61..05560)$# "$$)99;=9;!2/41"?A:9;=:5;4:7("&32., C=9537"&$##!$$((''&&&%$,-.+(%9#*4?A$%'%"<794%4:64 $?$%=;@3?ED|jTK:MO'KY;A6KQI.WD*?LH[DHKE>O6nYU48=:9@:3H7@BB:BGZMRVR71N`lM`_LDGFL<1:D>;:<@<>H>>9`JH\L@Q?@6U^\ICRKF=5?[KVPNJH3:=8EtO.EDC@=A\@X@TmUYAH@A>>?>>;<<;4'J7P_YVWE6LKGMOF>_shVNT*,7-9<95;<7BDFC@J*&()&++,V7/82A;7JS+/O/1003..07!%H8>;;fI>7?TXGNOMJ;E,BY7_RB,12q'DILORJIJHJJGHGHNPL;PSXYWNNRXUZRMMIECHRUSLEECCEDFINIKKHCABB=<<=>??>=AAE@;88<><:79::;:?CC?7688>:>CBA>?JJIIMTYZQPRR[UQTQTG;79BDNKGD;DNPNQSPKB2B#(3'+?BNSM2'RKIGEE@:/$3#,/4VQNW[`D/J)6L3 &(;G>2*!;;K]eADE<5%3aB/=BAAA;R+./7,E03J8,1̒˙f`kzy>1'-)*.1-&")(*&'(()&&::7=FG6*MHGGHFOSQNMNIRYZ[T67D93+))..+2.,-,,+--,--,*,),./Ⱥ}u@6<8&PT/-0-'.=)&3(! %%$%%&%$B&(('%''()*)()'')*+*)++))*++--,,..--024678776423346667988:<==JB;:9:9]:;86;=><;?CDDCGHGHJLNOPSSVWWXZ[YX[\[[Z\_\Z]cic]a`bcdefhmrmsw>codPQFXOJUSW󄌋 򁏖}noa_UTRTNN~x~}|{{v|~xuvwz}v;:86899:<:?B?JNFH@AFD=54;852$45138/,*++./+)-231*168?B>AC?==8458746835874/.1376310/00A=?FM+0/,))!<;A#$"!  #H;8@ ! ".+#!"?F@*EGF;B-7:.,,'+#(+(  '$2!%'/ +")-')*)',.+,*)))&%'**)&$#&"%*)%$&&%%#!%*"# %)' %#  +  +  !$  + $ +! + )XQI95(4215#+--0#"('4&*,(#/2+! ## $(%.(.21 "/7>-64*&&%)$!  "!)$%#<)(3(!.!"+21,%/&##0).('$#'*%'H;(%!#$!%2"8+.B65,:420.,/.,,--,-,/43".40-1()(%+,&!1@>1/6 +""$%""9"$#'41 + #3#+*$%&$%)0.)"E4357;4454654566:72-*4@A:1--++,,013033/*())%&&')+,-./-/*&%$%&%$"#$%'',.-)""!!'%*-,+'%.1138@CB:9;8" 9410-,(%  655=BE,0+  ' +8D045+a!%,-/0++/ ' / +!#&,!&(& -(  + *7:73+3431.+*}~}~~}~}}~~~}|}~~}}~}}}~}~}|}|ŀ}~}|}|}|}~}} +~~~}~~~~~}~}~}~}~}~}~}~}|}|}|}|}|{|}|}|}~}~}~}~}~}~}~~}~~~~~~~~}~~}~}~~}~~~~~}}|||{||}|}|}~}~~}~}}~}}~}~}~~}}~}~}~} ƺνݺĊ\μ˜¯ĴĹ̙ƫ%        +     %PлĿФǷ̮ۛ熹ࠚ¼!ۭE  !! "! +#"$%&&&%%$#$$%#$&&()())*+,-.002332111000/.--//./16COW^_[SH@<=>EKNRSPLHC@@>=?B@ADGJIKNLJLWm?@?pbag5664`VSV[_c5687mjuJ]gbS@j9>A>9/QIFHJKJLORSQMGF$EHO[dgd[PEBABCFHFFD?;987665322331/0234221212100.-+++,,,.1358::8641/,+*)(''&&%#%%&%%&&&%%%&&&'''&&()($PƕŽֵ͵νе↖þ¿ԀǿƸҲϥߣ߽ΔȾ¾Фϐޏۀľǽƴ¾˲ӰӯĿǯ눆ݱڃ͹²ީ寺Ƕü퐶—ƪҁϻ֒ڡ‘»ŭ۹ʹەІ߮ߍӧ󓧲״̯Řʽҵ؀򷳨Ĺμஊὸǿʇʽ㼺Ї婷kڋւ󅒈ڂ냌􆌍IHEFFFA;.../0...01.-.--**'%&()" 7=D#CA!A(+@>KGC>?D:04)-QVK*0/?3Oh`V7.8.(*(/9>;98<<6269-A%?"!?"##',-+,#+/9,6=20b7:878863140.,'-WL7.+'&$'))&0N=!('#'=M6<3((,&&,49-(*5:=6<<6?C?A8.MShhaB>8;B_n{^LIFMLJOST<>TSK::;;::;:99:;;:::;:::;:99:9:9:::9:::9::9:99:::9:9:99:::9::9:9:9:9:9:99:9:99:9:9:9:9: 99:::99::;;;:;:;::;:::;:;;;:;:;;::;;:;:::;::;:;:::;:;:;:;:9;::;;:9:::;::;:;:;:;<:;:;::;:::;:;:;:;:9:9:99:9 :::9:9:99:999:9:9:;:;:::9:9:9 +:::9:998::9:999:989::9:::9 :::99:99:::9:9:98988:998989988988978898988989998898988878899898889899887878787778788788778777888778678768767676667677676766677656676667676667767676766677686766777676676775667767666776667776766876776776776787888788878887878798798 98889899898989899989898:9989:999:::9:9::;:9:9:::9:9:9:::;;;::;:;:; <<;;<<;;;<;;<;<=<<==< ===<<=<<;=<=>=>=>===>>?>>=??>>>?>>=>>>?>??>>>?@@@?@@?@A@A@A@A@ABBBABABABBCBCDCDCDCDDDFDEFEFEEEGFGFGGGHHGGHIHIIJIJKJKJKJKJJKLKL +MMNNNMLNNNOPQQPOQPQQRQRSSTSRSSRSTTkXUU]WM64<5<@@<4#5;9579998TUVMJXR89Z[SV]QRTSMNJQNlppi@JUTJA;>>>:>C<><>>?<==;xLd10BSV^8O:<;LeQMX30.1:8012423442323313332433377657898::;:9;;:9879::;;<>CHHKIKJKGHGEEDFIHHHEDKEHKSICA>?=;==>==>@?CBDHKIGOOONNNPOPRTVUVX[]\]_aa^2`bbijfmtsihihjikkmnrurwzqmg{{z_`7;><5/66:9D@><:=?DC@?A@<8;=BED==BAEKIFGKHHJKIGDMMLFF@::?EDCB@?>A@2^RUX678A@:42//.87126730**HK,8=?=@:/11VH:5W_MGTF7INLB=@917#.9=5460.1-.--:FFD:&(+/,+4120-65)30566=96).,38@*))//+'.38>DH==:51400.-.9=<:;<>96435015544898630)*-.0*&&%%#A#!"'+.-+.3.-024-/3599:!47!3)AA<:993&.,&3-%/10  9:8/0*-)*)'#"$''$!'3/.,#"($#$(%*,-3402.,)'*1&!"*+)'&'%$&(+-0-/./2,.*,(*(-2332-"#.<5013/,*(&/"""#"!%()%%&&()+*,,('#:#)8B= !### % 9:-(!";; 6" $%={gVKL>PtYR@B(J4LyCUDPO_SLJD2G41783G@;5;29::0AG\6QSPTNNk6iO_ATWMKHH?Wf6I/:8)$F<08;/9_VEIY7eRf9D(738?=:<;;7(9>CVSH@?\lA@?`jm7QBMEDXYRHT?*+'6 =<"18<==;@A><>EFF;9:;>=7;:66:::7:===<;A>8<=EIF?<8>=>>K[^\TQOVTPUYN0749=CIKJH?AINOTXTPH/>'4?41#:EKNK31 LJGGDCD>3' (& GYWYWT[8V_)/5SX(0BG=+5/1SN_9FCY!)6&3!7BAB=?@;9DD.0QUNRXMNQPNNMNFade^89B@6.),.-(.2+,*,*,+*+--/*-.2Ģ}BD"$2PQO*5&+(16,-7!!!#%&&'&&%''&'&'((&(')*,*''),+*++,*)*))***--+,.--034688775755745;98958?9;=8798489<;7668=;76gie`[a7c6YRSR,++2,+QOTTMFNkqUTGRTKHHGLHEJMNOBDGGMRJEF@@@>wz};BEI?>=@===EBFEADA:}bd58:81+/.1160,)(+-0,),11/,/29@A==A>;<97685446655:9:562,*-2300..,.-'NILL++',+&$"! (( !#$!  9:#)**)+$ :82.LU@7F7)5651+*%"#,,+"! !%(. !(/4*()'&+*)''%))&%%)+&""!# $%$$$&&$! ("!"($! &!  + +  !!4! " %VRG;46,5H:1#$(*D$*&,,90+)$(&" '3,+).*.; ;,:&0/'(&&$'! !$"$$4*%%/3 /1#*$--+%"$" *.'-&"(&")!4)"J/?(B6= +*--0.-0**,-,"'0-&"!/9 !"7;=- &# *-0&,   %I!489$0%2# +$&+"'##%&)"")'#0!#$H6.!37<7763673457:88:;=?<@ECB@C=7635277942.++-/,142.3<;21-,)(%&'&+.,++/00&%%&(("%%!!$$%%&()(&$)&"&)/2/'" %')+8CFC<::=94761(&),2;<98/169:?B><6(%&06<:%63/0-+,'    &58>>;?#>@#56 %%.0A+858%-/0Y+,.*&"))# =$ !"+&(    &)*3700732.,),}~}}~}~~}~}|}~}~~}~}~}|}|ŀ~}|}|}}~~}|||}} ~~~~~~~}~}~ }}~~}}~}}~}~}~}~}|}|}|}|}|{|}|}|}~}}~}~~}}~}~}~}~}}~}~}}~}}}~~~~~~~}~~}~}~~}~~~~~}}|}|}|}~} +~~~}~~}~}}~}}~~}~}~~~}~}~}~}}}~}}~} ԚԼɟ宷Ѱǩꈈ\ѵַץոŸÿŻȿ̞ٵ&  +               !#Qɸȍѿȼ͂菎ºĸމG  ""!!"##"#$&'(&%%$%%$%$$$%%%&'')***++,--.03445431221/./139BMZ`d`WLC@?BFJNSUROHEB???CDDFIJKMMMOOVk@DC|kfk68973[TY^bg7:::vtQcmfUA8=BDA:2SKIJKNNQVWVRNIGHOZelkdZLHEEEGJIGC@>:9:8887554533 +22565453343232210/-,,,-/158;<;98640.,++)('&%&'&'&$%&(''('Q彬ƶͭɼľƺ⁎¾ɼıµ̻¹Пڇ⾮ԞͿľӧɸ뱳݄Ʒ۹˫ՀàǸȿ狊큋ςֿӻƧ¨瑳ùŶ菉倮ª˻ܻȪ˹ӳؙњӼ咍ݠⴱ컘Ґ»ǼΎڝŦǻ؇DŽ铌з׍ɉʯƙͪ鸾פߐ݂6󃈇KGHIID?;4 .0,*,-/.,0/.--*)&%(+ #67B"E""%-%?>ECA?/6584-,HU'*.P09R7bY:'75"*+5$1;A@248+,-##; !"@$%'%),,%,63HD@DH-1343/249?=41_9:79988402/0,+.TA3,)&#$&((+>U43+(&&E>7:.*,/+0372)(,4=?E@<4DDC7-CSXkfZE=89KmcumQLHMRGLTW4DKmO::;:;;;:;;:;::9:;;:9:9:;:9:9:9:9::9:9:9:::99:9::9:9:999:9:::99:9:9:;:;:;9:;<;:;:;:;: ;;::9;;::;;::;:;:;<;;::;:;:;:; ::;;:;;:;;;:;:;:;;::;;: 9:;;::;:;:;;:::;;:;<:;:::;:9:9:::99:;::9:9:99:9:::9:;:99:9: 9::9:::9::;:9: +9:999:99:9: 999::9:9:9:9:9:999:9:989:989898989998988998989888989899989889878898 78787687789889877788877888778788878877787878878767 +6777877677676767676667665676776767667776767677676788767678887787887878778788788787898898 7888999898898989 +899:9:999:9:9:;:;: ;;:;:;:;;:;<;<=<=<<<=<<><<<=<<===>= >=<>>=>>>==>===>>>?>>>?>>??>>?>@@?@@?@A@ +AA@@AAA@A@ABABABABABABCCCBBCCBBDCCDDDCCDCDEDFEEFEFEFEFFGFGHHHIHIHIJKKJJJKJKKLLKKLLLMLMNMMMLNOOPPQPPOPPQPPQQRRQSRSSSTSSTTUE6fbYXe\L<9=>;JE<4#2;;5778;:FXPGEKHFX52\\RLNOPOLCJRdoif5NZXIA=;78;9>;=@>?>?\44b;[^h>A@>;@ABH:434?>7767357525345578655546677657:889<=>=;:;9;;<>=>@?DIIKJLLNNMJJGIHEFGHGCFEEJOHD@@===>@A??>AEFDEKKHJIJLLNOPPQRTTUWZ7Z[\]__caaabbhipxsjkjjhikkklkoouwnJDa@daXhwABCBBABCDCDEFGFEFGGFGFGGHIJIJKLLLNMMMLMMOOPQRSUVWXZZZYZYXYXYZ[Z\^_bjs|vnihintx||xtrqrrtuvx|~TVVPSTSOVXVUbt}xkXQW[`^WP|zxx{} }{ytqpnnkjiigfeeecb```^]ZZXYWXWVVVTSSTTUWZ\] ZWVTSQQPOMMMLKLKLMMLKLLLJKJIHIzsghjcee_ZZWSSUVsjulsytrp|~ulwquwp~EFDA=usqv~mkpt=@umgeddfhjggdf6ee^[--\ZUMHHgVQFCNKMMNWW[WY[[[PSOUMTQUQJHMKGGGKPWQJVPHKIKKRQQNI;db[T]7;<5148>:?C>=8:=?CD@=<@<;<>CDBx>A?IKDJJNIIKIGGCCBCBBA?@=FFECA>@B@4_fa00/AD>:6100./2246;7652+-3::89;8951*D94FEDJ06:BHC9:2107(-551630.1.+++8GHC;-*-2-+/+/.)-/.4234789@A44;@%.-(,58$.5769<@:950/21-.,1>?=;;8:96204--343799952/*,--*(&&!#%&!"*-0..+0/,,,+''(.0.4551&  #$%$ *77<4,122421.357+$#$!!#$'36;>9<9156"2A?:8873(&&)7.+930! 7 ;697.+$')*))'&(*)&$(00-," !%$$#!'&-../++**,1/-)'&*%)'+-.03/,.--25+.'**(%,/3571+,14.+,/+012+/#$! !$$% 3<$(+,,(*-*($6(;ED#')&!#<3/%##! <8$C==?A:?;:`H+HRb0SSKTD7QX3JJD?6HA_251FWLUSDL3'VRYM45:8s_BDQ@6<-AB4>E=HX&"589(-?SGDA@;V>5::kZXbmkk=p\NnI;^5??-(250)**20S0''&OQG9BA@ADEEFHHCILONNKHC???9;>@>AC>?AD=:<<<;<:8;=77:<<899:=38;@GJGE/6:?>L\]`^OKRVOTO70648;@KJIKMENOQV\^\K4K6 8;4!4AFLD/)-GGGEHCC@6)!#&5VWP[c]Eb=02Rc:[%#49"#)+j:CQhDD:Q9D?<>@@@=@?B52;/O)?D072,F$3<%/* %;P462/H!$#&*L%'E&*),-.&)(!!$!#%"<:!#!$)(%:(C')*+TIKRSTOLIHKMt+(('&"    +    !(*,!8%C=#   +  + +  %!"%#))!#''())($1%%2"&) "! #*,0/+&132-$7MN^TP=5./@`ZkeLGCHPGNTX3CW՛<(`*?*df^=¿Ȣta_vpU7/1/)50($$'&!"$$'&2><88=<;G+.UWPIIJLNRJMOagd^/@FDy70--)*,+.*+,+-,++,.-0-//7H$$F-ONP--0.()*(-" %&%'*(')('&*)'''*,*((+++*++)*++**,,++*((+**++,+,.,15476778897669767;9;=B=;754457<>;7689DA=>=?@EFDEA9gle^j8:92-,06133.+&(,/1/++-0,,.3(,,12,&)#!$!,-(!"' $-, !%).(&$! %'##"$('$##"$"  !"!#%'%"    %    !!"  +$#  3QSI<7;'EA-#.#%% +#0#),.5*/$$4)$(# ((8 ("# ))#.1*'3:$'"(!!%" !"! 3()+2,.&.%*.&%)$2#+$*%+%,1,,%84'.:,+-%(&)%20*(.)#!/$#.<117?;9!:2-E+!<$+* /2:6*2/$.2!!- +)#% #!'! #-0/&'>:2469:866676:79569;78;=HJCA?@:0-.0@P=97/+,,/../221688862/+((($&*,++,(),0*(((&$&%$%'$%'(($###' %'+13-+ $(*8EEFC85<<561 %%)*1998:;478:?DDD7%5! + ",1:5 21101-.)! 7<8BHA0D&8H*: &4N87,1#*,/+--0#.!$# ! E 2$&"( ("  +   4/16<:41.(+,}~}~}~}~}}}||}~~}~~~}~}~}|}|ƀ~}|}|}~~}}|||}}~}~~~}~}~}~}~}|}|}|}|}|{|}|}}~~}}~}~~~}~}~}~}~}}~~}~~~~~}}}~~}~ ~~~}~}~}~ ~~~}}|}|}~}~}~}}~}~}~}~}~}~~}~}~}~} ♣ջ϶􁇄¥ͽ毰n޼矂úƳ­۹Dzr' +           %5ǟވПЮðƺץšϖ@!   !""" !"#$$$&&&'&%&%%&%%%$&'&&'()*)*++,-/0135776421100012359CP\hjd[MFBADFLRWYWQMFDDDFFEFKNOPOORTYi@FIEzmn89<;5/XZ]b59=>>>}WinjUB;AFGD<2+OKMOQSWZ[ZUOLJLYepqj`UJHHHIJMJFB>=<:==;:9:757544678766565654211/..-..048;>?=:741/-+++)(&'('&&&'''&'%&''&')**))(('&&%)uӴކȬǵ ƫ􇙽ϺЀȮ􀂒ñȿȧɦӜžܿõԳ튯ƺȫʬôϿƼº񅋔쁉ά񍏏ɰչªɸ󅌇ʿ쉍݄Ϩȶ륙Ȳۖ췦▊ʹە§ǧ񾮷˓Եֵǫ׀Β큝иÓڀдĺľɦϝ߻˸ލ؄ѻׁީn񂆈ňׅĭLGLJHE@=7,//,,/.../01//,,(&)+ ""+7C$%%#-*EBBC 4)+ :!!"'((&(((,8'JACA%156741348@:21898Z760/1/-/`G7.+&$##%((/NX($.003/(84+)1/-5:<.++.5?9B=CAFE?4>GPWdbLB@58Gf`o|_OIJSGLUTHFM9Y;:;;:;::;;;::;;:::;:;;:;::99:99:;9:9:9:99:9::99: +99::9:9::9: +9:::9:9::;:99:9:;:;:;:;;;:;:;:;:;:<:;<;<;<; :::<<;;:;;;:;<;;<<;;<;<;;<<<;;<;;;:;;;<<;<<;;;:;<;:;;;<;::;;:;;:9<:::;;::;<;:;:;: ;<::;;;:;: ;::;::;:;::;:9:::9:;:;:9:9:::9:9:9:9:9:$9:99::999:9:::9::99:::9:9:::998:8999: 999::99::9:9888989898989898989989887987878787778878778787887878787787768877677876767677787678876677767667787776777677667676768767676787877876678777887878787878978989989989898989:89: +999::9:999:9:99:99:::9:::;:;: ;:;:::;;:;<;<;<;;<<<;< ;;<<<=<;<<<=<=<<<=<==<<<==<=<=>=?>>>=>?>? +>?@?@@??@@? @@@?@@@A@AA@?@AAA@@AA@A +BBAABBBAAABCCBCBBCBBCCCBDCBCDDDCDDDCCD CECDDDEDCDEEDEFEFFEEEFFFEFGFGFGGGHHGGHIHIHJJKJIJ3LLKKKLLKLMLMMLMNMMNMMNNMOOOPOQQRQPQPQPQRRSSRRSTTSSTSDWTTd][gcXI?BB8CF=8(+;@8;:9:>G33SDC6BP5,UTJFGOUNICGOSf111>YWPB998787:9:9:9:<<=@?>877:79:545556567;8877:778677;988::<;<;<::==@A?>AILKNNIGLMHKOJIFDBEDE@@CDDGKIA==><=??W?=>AFDDEKHJKILMLNOMOPQSTUVWYZ[]^^^abeeffnq{qkknmklljloslntukMyB{oPZwtnGABCDCCBCBBCCDEFGGGFFG HIHHIJKJJL"KLMNNNMNLNMNNOPQQSRRTUUVWXYZ\[[\\\Z[]^``ckv~{qmknrv~}{vuvvwvxy~VY[XRVXWSOUY[ZXThx{iYSX_a_YOJ}~|}|yurpoomjkikieg-hghgfeedcba_^^][ZZYYXWVTSSUVY]^``__\ZXVTTRQOPNMLMLLMLMKKLLNMMLLLKLKIHIGIwyxoksuniad[Z[VQ~jlpgqwtyH~z}pKJG@DEFwsw{upoos;;=7hefcfhigaaf31ZY,,,ZWSKGDJECGRVW\_thac]cWQNOOV_c\RMKJGLHGBIKNOX_ZFDHIMKOIGYIrdbcliD>835CEA=B><<:;=??BB??@>??AAB>p>?EOK@KLMKKKJFFD???ECA?ABEHFCDKFB<3\`//3:CA><740-,/8:9;AAA<7/.03538;8423.OC;,KGV7D;@T<>41652$*(+00311/.**+7FE;;5.,//,+),.'+235--1599.=67<@&/1)*12%/7559?C:;:652254.9D;99>=:761/3/16647:8852/-.0*)&"! !$&($%,-./-*-'&$&"#"**/...3.#"$$ ##/9! 6-.)),)--043)!#"!!&379=9821#:@>84675.)(-7.,;62 "!69;=88A>2/'(*&('&')**)(/3,)-*&$$***-1*(/,-/++(),0.+'&,0(%*173571.1/02*! *(((,/21/,*+11,.43,,173$"# # "A0;C&&),/0/.)$ 6!(<"##$(&#!!72#;%%%" ! !#"##@:7948:Luvkb`YJaY;ZMK14<*!>]H?]cYG=O_580@=VKKG>758E:4?>CGFCV):JVKA/Te=696ZUP.M\]RTjBAbj>=?=MA8ZW=J@@7D+=`[VSA7LQ>/PCJ5 =:RNE;ALO_:\dO>%?NWBCG??:9-I20TWWXaaZVMhVOX8[PFW11.$&&'&'*+,-/.$4)63O51X0;AZEDNEKOG/C8B0B;3A42JY;LJHNPPNNQOMLIHFFKLJJMZ`c^_TRLHBABDLQKXZAAACDGDINHFFKILNKKIGA9BD?;:;<<>ACDB:7;::<>>878:9895874::=EFLI=*4=DR`^YYVONROP3;>?967:GEDHURNUY^]aYO;)8"0A:++>E4'4<:DGFJKFGE6CW*,!$&'1Y:ACB;=>&?)1:A>??A;_:DW43C2L:5.,L@%/#460HOQ1779:8(= %&&#BKN-)H%%H&&%## $!""%&%"%*%( C()*))TTIQWTPLLLOLu*()&$"   + + "#(!')&',9'D<%  + +  + +  $l")&#'&''(&$7+.:! $#*&0*1/42-&/;GKROB;7-0?^VdpWIDDPFLVWGL^蛛6I4$C%ˀ|gausaE351&./'#%'"" "&.#$:45+3=($HHB@@DLIJHILP`.-,6FD=5.-+(*+-,,,+---++-.0100@DOL&8QXRQang1.,*)'!# #&&()+*,,((++*)'*+-+,,,-*,-++,-,,,-+,+**+()*)-.-/.564:;72794796::9585767998745747<<;778<>=>DADABDFFIIHJLMPRVWX[\_`_]_a``^][_ajcbbedbdffHilonopvqEqWuozWS\|vz$ž󀄆|pvsmhce[[\WU||}H}vypFu@>69:;mkqwwqljjo645/XXXUUVTRQSW-+OM&&'RVWQOKNGCEJLLOUgZOQORHFABAGMPQGFCB@D?=s:>=;:BKK==ABDCFCAQDqknkrmC<6.+48704.,,'(-/..-+,,,.138>@zA=;=918::8642154//-10/.01442003/-*%JS)$%*/,'&#$!  '&#%)(++' "#%%!$$# !4/.%B>G*4+/:-*"!"" *)"!$!'+*!(,$$$! !# ' &%! ##"&''&!!!! R    "#   '#   +!$ + $MQJBBA4D;#;0."#6("58/$ '2% /&'%$!!$%%&,&-)"-=!$ " ''#-.,+1/.,9$$7?" "%% ) 0+ (""%`'%6.'($)&*'/.*!,.(#',-7!28+$ &3! &-/217721)93.3$;10?+5%(*(" %()*15-773)"$! +(- /!!& $'%#"'$$*7 45478868::9857558::7;DKLIH>=:2,+-2;>8EC-++-.1-394115567431-*$,0+'&&&(+.01-&%'%'())$$%%%#" "" ''(/141# &-9DB@A<77:33#'*'%(,6225@95=?BCFB:*$#(0%")'/223513/%  :>?AE5$*$('15 +@,685,![&/,-,.*<%4# &!+&/2"())+(  ()&" + +  462<@<520.0,}~}~}~}}}|||}~}}}~~}~}~}ƀ}~}|}|}}}~}|}}~~~~}~~~~}~}~}~}~}~~}}~~~}|}|}|}|}|{|}|}|}~}~}}~}~~}}~}~}~}~}~}~~~~~~ ~~}}~~~~}}}~}~}~}~ +~~~~}}|||{|}|||}}||}~}~}~}}~}}}~}~}~}~}~ }}}~~}~~}~}~} 鳕ѿϨ٦ʽⲯ񀋡]̫åáſƽ۰Ůl   +  +           #ˮ䅏өʬŤ؀ԍŻ!悜軘A   ! """!"###$%&%&%&''&''&%%&()**,,.--//2356675554322346;CQ`hki_RJCCEIOU[_[UPKIJKORSQRUWXXg>ILKDws;>>;70-.048=AAA@I_ptmXC?FKKF>5.)(QSTV,..[UPOOZjv;rhXPJIJMNONJFB@=<=>>=<<:97677788:867787776755310/.01357;>>><973/.,+**+)'&'(''')('(**++*))'&&%%$$Mӿ퉡񀀄Ы޸ɦ􈈍IJžȰ¸ŴŽó̪º­ǻܥ܄Ȁľ䈓Ͱ۽èȿźɴĿɿ݀􊏏˄ز랦©ܸǾܴ⠛빶ռڀӺȳޓǽķȺζӖ֢ϚȀӔڸ섁񀁀û˫⦆М۽ԧ⃝߼BҢ_JIIIHEC?:$"1/,,--../220/,+(%(*#$,)A'&%%/$?I:?C=$7AC7/),D[LN>DZNY8aXA) +2)'#(0(*-44/-A?2'35y#'%&'(+*-(EP7@ )45574249;<103987888452//.,0^?/)%&##"$*''S7/'-256%%72.12/39;5-*009=:7@>DIE:;>FQWaaC=?58?NWlwXMLHODIVZN>S>2;<;::;;:;:;;:;:;;:::;:;:9:::9:;:9::9::;:::;;::9;:;:;:::;:;:;;;:;:;:;<;:;<<;;<;<;<;<;<:;<;<;<<<;<;;<;;<<; <<<;;<<;<;;;<;<; <:;;;<;<;;:<;:;;<; ::;:;:;::<::;:;;:;::;:;::;:;::;::;;::;;:::;9:;::;:;:;:;:;:;::;:;:;:;::9:9::99:9: +9::9:::9:9:9:9:9:9:9:999:9:9:989988989889998998899899898898787877887887878887878787887878787876767678788768878788878877898788778887887789878 788899988899879898989:::99:::9:9:9:999:;:;;:;;;:;:;<;< +;<<;<<<;<;< ;<;==<==<=<= >>>=>>=>=>?>???>>>?@@@?@@??@A@AAABABAAABAAABBBCBAABCBC DCCDCDDCCDEDEEFEDEFFFEFFFEFGFGHGHGGHGHGHIIIHHIJJJIJJJKJJKJK LKLMLLLMMMNMMNOPQPPRQQRQRQRRSRSTUI]`^[hnbUFIICAFC;.&;DABA>>CL/790I5>E7,.YGFLW[PG@OSN\1327M\U@<7768848767889789<;=@=C|FN]aY8\bfh|}|utA>@@CJKJLIHEKHGHIFECDCEDD@@BFKTNFA><>=<>?A>>@FEDDFGHGHHJJKLNOOPPSSUWWZZYZ][^`aehfmvzqllmklnomkmtmnqqg`mofm^gdqotolBCDDCCDEFGHHHIHHHJIIJJIJKLMNMNMNOOQRSSTTTUUVXY[\\\]^^\\[Z\]_`abekwvrnsv{}zyy{{|~T\^^XUZ[ZVROOQTW[^]YVYm~}jXW]bc_YQLIIIJKMV{xvtrqomlkkjjihjiiiggdcddba_^]]][[ZWVUTUVX\_ba`_]\YVVTSRQPOOONNNMLLMLMMNNMMKLLJJIGHIvxqowslg[ZWRTOy{{pmrnffrz~ITIHKKSQEzs{pskqpp;<88ief77;6.ALC<>?<<=<;<=BAB@;;?EA@@B?p@?;8968333:;;<>6420,*-1/.79741432KDC85>?B&-1-)(-&$.2/36?=547972796+.98759:768324127436886520,-1,*$#"!"(((%$,*'*)+-+.1680399=A?="#,*+#84=&(! !!5/62++31.,-.*!"!&29<>:<<45029::42696/+,45)&>725#:;559<@@1.%'(''&'%)*(%$+0*+.-,)++,-+-/,0+01,+)+-.*((*/1-*/19;674475/%!#)+*.31312--*,+'(/!#"!"7$$%3%!')=73#&)*),..*%3(!A&'&%(''!#,%&%&'!%%$%!!$#8:4&,6@ttpjgX[]\TXN3DDY.5b>EFV@57>@JFA@8BKOJED;88RWNcD4/7@HB:B@04DKE>@QSGG9511VO>6V?:PGYp8@ncJI@5BOE8F<:966]QTRZE\1J>XG?ED-2A5DF3MD@D:-AIXLC]0/.FHA>;BHC76?4BI>2XQSNSXXeG>OQNNNGBLTMDCD@AB7!.2?GJHFIK;#8SVG]5N7-76>JC3=HPCNKOAC9T??:0]2U9_PNJHIIJJOPMPPOMLIJHKMPV[`a\ZOIDAAADDDC`SEBEFCBELNLFJSQNKNNQNHKLFBA@<::?A???:898;=::9;?=:8566:;:;BDEGD.5>@K10WRS/11YL4BHFBAA<@=B>GGHUZ[\XPQA-C(2@3$;I&,8ICGJJHJIGE?4,#,) -'6HR[_`1O AF0D]\?Q2+&&%b??>B:XC%@&5.3;4K3EQ,@^?91-V1F0A'58 /_\d6n:::92(K&%#CHJ262.KA=EH>B#""## !$%$$/$BD%**()'MKKQTVNNHOL))'%%"" +   +  + +  &( %0)+ $5,:%A=*      + %.!#&#%%''($$ 8& 0"#!t!##)%%*+160&&,6EEJM977-08GN`jSFGCJDHVZREe7@N]? + QW* ˧mbr{nX=;7/,.*$$)#%%! &. &' 3$)." D97IIGU+,+1@E@0.*)'**(,)*,0//---12245FԾDGOMC-UZ[^poi`]010##!(,()+,*-,+++,,+))-.--/-.-..-,,..---,.0/-.*+,,/-/12786977375556576764365679@C@?@@ACFHIInJILNRSVX[^___a_cb_``_bfkhedffhgjkkoxtttwnNtfSpYckeltڐ\Ŀʗ~yyrje\\XVYS{}BIA??=EF>sovlmflhc420.WVV.-01XQQPNMO((()WZYNNKIIEGNKNHU^OXRTbXEGDAH\QBF@CCop:79===CC@C?>?A?LKECCF>?z@;?>96<7963321330//0./0/13210///--)ICEA'-+*&"##'$$$(&$$($$%# "# c$$# !!"548/+030-')1'(*%+*/.&& ! !$!!W%$!!!!"%"#%%&##   "!"  !  !$$  !        +   LMMHH<DHJKCC:3.,+-1224O>0.-../19:616=:8587862790,*('''),*++'&%&(+('%'*'$"!$&%&+001.%'2" :98!#!90+10.+.+.,1-423?BCE@8;. + "'2#2/35544310*!  $/5>AC#y2+')CC*8  G1446,:! + (*./,$)'+";+&6  ?AF(Q*++( *"'+") !# +   .37;:910.2.}~} ~}}}|{|||}~}~}~}Ȁ}~}|}|}|}}~~~~}~~~~}~}~}~}~}|}|}|}|}|}|}~}~}~~}}}~}~}~}~}~}~}~}~~~~}~~~~}~~}}}~~~}|||{{}|||}}|}~}|}~}}~}~}~}~~}~~}}}~}~}~~~}}}~}~}~} ʍ翽怀诺½٬л\ⶤлŖŷذݯl   +      + + +    %3̮귾ּλ½ƿľĸ"𦊧łC#   !! !  !#""#$#$%$$&&%$%%&&'''(('')'&(()*++..,./024577678754565233457;ESbmomcWKFFGLS[_a]VQNLJKNPRUWVWWY]\e=IPRMCwA?ufUNMMNRTSNIEBA>>@?@?>==:98:4;;:;;9::987643310/148;>@A?=;741/-,+)))*)'&'('())((')*+,++*(''%$$#"%z񔔂ǿܲл泳ÿ큦˳덨˽λǼâ̿Զ֫ݺ܄Żùɀʺбθñɽ¿׿Ż⃆򄍉ϳ㤝Ŵ󋜱Ļ贄ۂÏƷ𩫜鉄Ŷɷәѳۻȼ󈑽һι޽ԪѹŹЏެؓИ۸ĶѮɶխƮྵһ˴ƮôӟքA͊KJJHFEGA:-/.-/..012.-(%(-*&6 ,"%$+)B +$4=-4/$99)3<0.//53 ! %&%''*N:BNW@?!056363148<=2/-788865d5//-*V/H4+%$"!#"*7C0$$+/%22=7%*64366B=A;1,,04=<86<:EA@8G=COWVU@<<2;=MVXiNHLJPFJSaWJQ:5;<<;;;:;;;<;;<;;:;<;<::;:;:;::;;;:; :;;;:::;:;::9:;:;;:;:;;:;:;:::;:; :::;<;;;<;<;;;<;<;<;<<;;;<;;<;<;;;<<;<;::;<<;<;<;;;<;<;<<<=<<;<;;<;<;<===<;;< ;;<;;<;;<;<;<<<;<;<;<;<;;<;;;<<;;:;<;5<;::;:;<;<;<;;<;;::;::;:;:::;;:;;:;;::;:;::;;;:;;;:;9:;;:;:;:;;::;::;:;;::;;:;:::;;:;:;:;:;:;:;:9:;:;: 9;99::9:9:9:;:;::99:99:::9:::99899:9 :999::99:9:9:989:99989&88:9998989998988998898889899989889789898887789878889877787787788878797878778878877887787887878767676878767888777887788777878787887878788787778898989998997989988898789 :99::999:9::9:9:9:9:;:9:;;:;;:;:;::;<;<=<;<=<<=<=<;<=<=<===<<=<=>>==<=>=>!?>>>???>=>?>>?>?>>?@?@??@??@??@A@?@A@@@AA@A*BBABABBBABBAABBCCCBCBCCBBBCBBBDBDCCDDCCCDCDCEDEFEFEFEEFGFFGFGFGHFGGHIIHIIIHIJJKJJJKKJKKKLLKLLMLMNOPONNPPOPQQQRPQQQRSSTSTUTSTUUUYMT[SeshcQLLIBEF?3'4ADDDCFIJP8;;S3;DA6-RILSZ_TNFORY\2566JbWL?;865767:867;8598>9>>=;=<=>>;?;;<=?@DEHJFEEDEFGHCDEEDFFDABBHLUNEA<=?HEBCFEEEHHHIJKKMMOPRQSUWWZZVYYZ\aefhny~lkkmnpnpsqjmlnus>Pgy/WYM{F?CCDCCDEEEDE FFEFGFEFHGHHIIJIIJJKJJKJLLMMMNOPOONMNONPQQRTTTWVWXZ[\]__`___]]]^aaccefnz~utvz~~}}~S\bdaXW\`^ZTSRTVZ]a`]ZW]skZZ`efbYRMKJLMMNMKUYY|yvurqoonlkmjkkkjgfggedc`_a_^\[YWVVXY]`bcdb_^[YVVTSRQPPPOONONNMMMNMMNNMNNNMNMLJJIIIHHLuuq{ife]XYUMM~{{~yqoyufgm}}MKAKPVXRIkqqnvyr}?B=h9jk;998e_[Z[]YTU./.0c]MIJIJIMRWRKMUhnRQQNOKNPUTVRbDFI@IZUQUYOKHHGGCAHGA@>=DD==DAA?;:;@CA?@?=>><r=AJIC@GFJGHKMJKGDCCFEFCBDCFFCDBB@<4aUP]18>DA=>86.3288675/--.TU./.19853351,SJCBEBHJ18CII:*,,6%'00021./,*)+-5CD82-$#*,01.1.)((#)-1439:-;1:D'/0('('*34446==68:9778:;6//10,2236722425:60/6:8665//1-*"$#""$=<;)/,(*1/-05>1/< :!((%&*(--/+'#%+$ 2.890.0/0111+!!!!*U6>B:57;431<>;:9:@:5.+12/(%;RX2]I)8LHOIAHLEf(9GUKPUSJ31[`_SFD]@C;4IO^:.bhbQM:NH6J?6/=J=6;FBN_3L1MI?7@?UF6XReWL;E::DPYMXa-0ECGENLA>77:><2VA;Q[7^ZTSETOH@EGJKGJIFKHE<;=II7500>EHNORRD1:CD>09;^a7$ $"%3[`%=-YMD`aE26?B@39;OcSU_N6AP?aH@;Me/WAB>=>CKJGIEDEDG?D09:Q]\3Q&;6'FF4C9"-)!#7==967=(&?)7%'0@BA<0:4/41L:=4./0:7X01B_^6kn9682230/,TV4832-5>K?5;: !#$"C?"$"+1?&;>(+)$FJOONPUNHKML ))'%$## +  + !! #$"$.%,*6%D=1% +!"    + +  $#/7#' #$%''&B#.-!""!"$%+&'#!')%"('0.+#,)0@D?C542)06EJM_GCHDLEHVb\NhP$p( + { J  +*ͯq^n|nM?=6+/-) #)(&&$%(*0%'&2"(&!6358?D?@;?@IM)++,9J>5,*'%%(&())(+/-,,+30073ɶQFCITB[^$\]oogbbm50$)$,40,),***-+,+))-*,,///.-/./000,,/11400---00.121368964545656655566557658:E@=:668988;;7;9><>?BBCEHHHIJLNSSTWYZ__Z^^acbbabemrhghjmnpquvrxxy|{>thZWvDJ[\z#ڔzwlge`[][SV|{~wFB:EFHKJClpnikjfl463Y1Y\1010YSQQQSQNP+,,._]PNLLHGIGIE@EGX`IIGFFCDDGIHET:tv8;3;}HEDGIB>?BBCA?FD@B?>DB;;?;:8520201./-)+-,,//,(,*&'*.039A@}>:<=8684743242542/-0020-/033.-+*+*&ID?G&()-+('$&"%$&#!#"!#<@"! &$!<6413247$(.0/"&*# &!+0 ! #*+%%&%&''++' !!""!"$ "!$(%! $%%$#!&)( + +  ""#     !&+(!#    CKPJJ7#H;<>2%/#$* (%#--"'.' #($!&0-)$'# *-2%&%+(#),)7$(&)*)%+11)$$/ ),3:<8,)(%& % %&.3'&# %#4/9-*% ")+4)/3#""%#/!++0-(/,4*,(-/11042/32/&$%14%*/2747<7+/43,!&66)++#22#!"!)3((0(#) 4& '22'68<8779557:=:7<>;95:;>?ABABG@63/)*-/111?31/14635:543:3--,/5@IJKA81-,)&')*+)*+0*''('&$&''&!!$'$$"(/.23%(/<;:9;$))8%&,4200/.004-.17?$-$-0!.%(.0,)'* *-.*.(*" "+'7(@A'NR++,+(#! 76 #!#($   !(08:981)-.,}~} ~}}~}}}|{{|}~}~}~}~}~}Ȁ}~}|}|}|}|}}~~~~}~~~~}~}~~~}~}}~}~}|}|}|}|}|}|}|}~}~}}~~}~}~~~}}~}~}~}~~~}|}~~~~}~}||{{{|}||}}|}~}|}}|}~}~}}~}}}~}~}}~}~}~}}~~~}~}}~} ȐպíüˡŮ\K󷬱̺ķǼٻ׽k   +         !#Ǵ܉˝࿮ú󙰐󋖎» ¿ÿúƾûӕE   !"!!!"""! !"##$$%$$%$%%%&&&')**)())(('((())(),-,.-./11356689:755666566679=FVcotqj\PKHJOV`de`ZTPOOQTUVXZ\]_a`d5/.,,-.11210^\^6?DD@q`USRTWXXVOJEEC@BBAA@?@?><<>=<;2=<<::8633433348=@BCCA?;720.--+*))'')(''((()))((*+,+)('%$#%M愋ܻ݃ׯþ̾Ŭɿٸɿ΁ŶȎʽɻ푍ʬꀂѾʽƼƀȽ½ƾ胕ڝ􈇆žĽøۻ©ĺڋĺͳپ겴Ǵ߾ֽ늗ΪʿƖ̾ąǘܪΆ𙏓ʬ߅ǼԽڀ־فȎ»ŷڨ֫ªֺ˄7ڢځKHIGDHHA;-&210//11334320,'%(+.+9,!):*+EO0 0,4?0,=!=0391-%8#&%()*F8NTUP#%03435//45:9494`53657743//+*0Q;3,%!#)8@CB,*-'47?5,040298TS>4.-,08;958:=C?=7BADO]UJ;<:08BR_Mf^IGGPJIOl^WVF6<;;;<;;<;<;<; :;;<;:;;:;:;;;:;::;;;<;:;:;:;;;:;;:;::<;:<:;:;;;::; <<;<;;<<<;<<<;:;<<;;<;<<<=<;<;<;<<<;;<<<;<=<<;<=<<==<=<<=<<<;<;<=<<;<<=<<;=<;;<;<<;<;<;<<<;<;<<;<;<<;;<;:;:;<;::;;;:;:;<:::; ::;;::;;:::;:;:;:;:;:;:;:;;:9::;:;;;::;:;:;:;:9:9:;:;:::;::;:;;::9: +;::9:9::99:9: 9::9:99:99:9:9:99:9::999898:9898999898999888989898 78878887787788787788787878788877878887776788787&8777887788878787887778887888788777887787987887898889889889788898989:99:9:9::9:::9: ;:9::;::;:;:;<;:;;<<<;<;< =<=<=<<==<<=<<<=>=>>==>>>=>>>=>>>===>?>?>>@?>>??>???>@?>>@?@??@@?@@@?A@@AA@A@BABBAABABBCBCBCCBCCCDCCDDCBCCCDDCDCD CDEDCDDCDDFEFEEFEFGFFFGGGFFHHGHGHHIIHHIHIHJIIJKLMLMMLNNMNNNMMNOPQ PRRRSRSRRTSTUI\WQ\slj_KMJBCEA8&.=BBAEHNPL8<;:96KHEA|xuHK;\[^jpqoqv=<4=7GJ;88:;:<<=<=<88Q;<@?>?>>@B?==?@A<>?>?@@?@DDCFIHECGFCBFEDDEFDEFDEEFFGJIFB>?>>A>@A?<@IHBDFEGJ@LLMNNORRRTTVVYZ\^^]_`cbehwojjmlooprnlqqtyr9qTc;K|d{XsznACCBBCDEFGFGHIJJKKJJKLLKLMNNNPOOPONNPRTUWVWXXZ[]__`ab`b_^_`abdeggkq~zx{~S^ehhaXZ_aa_YVUVX\`bc`]Zaxk]^gjhcZSOMMMOOQPQOMPX[\XW{ywussrqpoomnnpnmlllihfihgeecb_]\ZXXYZ^bbeecb`]ZWWUURQQPOOPNOOPONNMOPOONOONNMMMLJHIKgz}zsl``\PL{||{pswlmuuGMHFRVPWyljnuEFD>97ifigafde^[Z[Y[ZVTX/./26_PNKFMMNVUSPVTSSNXTVRQRMLUQKOFIIIP)RLGIKHKIIJGA@CIDIECDD@?@@:>@=BIF?CGLGDB?>A@?=;8:?BCAt?AFE><@AGGIKLKLKJIHJID@DDFGGFDBDD@4__YKQ.AC@;>9-*+-66453.-+.SS0214;854574.RQG?CHG76GSF82--0',310330/-+++-9@A89.%&**,200,(('%)+068=:*C9P?D)+#&)%%011//0670413/1/./0.,2219:9:945758;9799:975/*-0,)''&$%#77:8&2?:5:6516983;>8@&%%&((++*'CB/9%#! ;3/9:3+400.01( "",;!!:9;<631BB?93284,))30-(#":<4./4/034/-))&%%'+)%#""%')&&%%&'&%%.,)-)*'')+3544'.-*))***((&$%$#%+/9553,+-).(/411.).43226=J.'+,-)*-9=!85 " #)& 9>&*C&]Wu{poMXk]TUGD;9558A6LBHCEN=JF@LPONG9-C55A[MPIBF>BA=9?ACRK4>FLIF@DGHIF2aATSJL:6OW\RSLJV7=@24^SaLZhdXRG>ZH/+8>D@@4/BZ.W4UGJB?D@34*CD*REUO,bc??/>GDG4_854EF8>?L[0^[JA`;5_9:?BEH5)NTVMGFGGEEMQNKMQOVPHRYVZXSQRRUY`J>CDAGBDDGDHMPMNJIFHJJC@BDEGUq|k_TOHA@>><>DC=??>9:;:8:>>;;:>><:986&4$21)49<:877*< 0!'%'3B?<7P3?Q$6X<921/9<5^WHR_c8<9o8:;:612331W/67204P=HTbV==!"###! <(+@"$%' -+A405!+7      %,65*!#!#!!"$$&&"!3#Y#" $*'97&"%$"$&'-*&#+.3?I@;/20'+8HS=\VBBBLHJQla[k X !Q3 + h 6iM'̩u_g~fEA9./0-& (''&)),.,%&&5"#*."6;=98CIF@;CJFGM*1<.5<85.,&###$$%%%'++)''.-/0/QӾOFD~zEB3X]bklhiko72)/&25->+--,-,,+-/..211/,0/../0001/./323./100121133468:6456546656665687[:@@?:66799699779?>;=@>>ACCCDHIKJKNPQRUWWXY\_acbdddcceoymnlpqtstwvw}@{aWETj_gݐxrfeb[X~DGCCJKFPrighl?>;610YW[XW[Y[URSSRQSONS-,,.3\QOKFKIJJECBIJKKHNJJHGGCAIaDAErp9::;AEA?@A?BACECB?BHELEBCB=:984573451/024//-,,.--,,*(('.5;?B@=?>87736555434321/230-0.1242.,$FKG@E!.-*%('! &#"#" #>="# "&$! "!991+-04($27,#()$%$#,&<+.!!!#''#&$%$&##$%!"" %'&%$!!%$()'&%)#! "$" "!"W'( + %$    !,#&!##")8LSKN49765423;?>9=?<>:4?ECDA<:;;<@F5*.0-3030204:=<<753563/++/14Ddr]NA94-+()()./),-,&''&$%')'$"%&$""%+&,1*$&*59><>%(#+'-13531//0354/13;2!* +#)$&05543633340," GWgsxxreUNLNU^ekje\XUSUTUX[\_bd224:HSZ[RFADGFB>5459?CFIHHJVpv^NNSUQG<41/-./134322125?FGF>jZVX\XSMIGEEDBK@@@?A?@?>>==<>>?==;966534568=ABEEBA?<6200-,+*)))()))((())*)))*,--,+*))(&&$$%SӿӶ֫ᬡɹ»ȱŹĀ̟˴ч¼˼̾ûŻ܆怒ǩʽëþʴDz慁񈃙ġ󅉽¶״ƽⲰ򉇂דӺƼϤԜ¾Ȝ዆ݺÜɦҎւԾ屦ӢͿŗ劋޷؀îҶ˪ԢѼ𰷄難Ϯؠ5쁆HFHFA8/2102321027532-)'(.//66 +,(J0??AE8!&5D?@>5+-=P8JP)RPY3hW95>+4BRW#)56,.;$=;+($',!&'))&GHMTW+&&04332.266777:68766h8531..)R`@8/)% '@@>A6&+('49=0*14.0=>=>?>>?>?>?> ??>?>??>??>?>??@@?@???>@?@A@AABA@A@A@AAABBABBAABBCBCBCBBBCBABCBCCBCCDDCCCDCBDEDEEEDEDEFEEEFEFGFGGFHGHGHHGHHIIIHIJIIHIJKLLKMLMMLMLMMMNNNMNMMO +POPQQPQQPQRSSSTSTSTxUVUXOXPTmplpOMIC@FA<2*?859<<<;99978?;9:@RUQIJEB=@B>?B>???B@@AAA@@AACCABBCGIKIHFEIHEFFCEEEFFEGGIMFA?PA@DCA>@MKFFHIIKJKMPNKMOOPQRSTTUYZYZ[]^cccdgexznjilmoqqpruwsw{p;O܋Glv_@BBACDDEFEFG*FGFGHGFGHGHFHGGHGHHIIIJKLLLKKJKKLMMNOPRQRQPQQQRRQRUVVWXXY[\^_accdedaaaccegghknt|~ONOS^gmnh_]afec^YWX[_begc`\h~nbclpkcZTPNNQRSSSTQOMMQX^_]X}yxwtstrrrqpmnlmlljjhiigcc`\[[[]_bdggfeb_]ZXVUURQQOPNPOONNOONOOPPOPPPONMMKKJJIIJIJMx}mc_Z\S{||v~tonkqktxu}k~ENMSLqvAtosjhhcb31\\df\[ZZZXVU-.1/01eaPIMDMKMSW[VhQSNTVOR]W[aK[MKG~BHMONNGGIKONJNIDDEGOLEEA@?B@@=@;DA9ESK?GJKEEEBEC@>@?><;::ADA>{r|>=>=<?AB=@?1\U,47696/2-+),/458?<87572.WN70(&)ST5D2)+*+- ,/31.//.*)$()*563.-)"$%)*/00,''%%(),35A0;:9KC;9;;252142279==?==<847959:;988:973./.-+)&%$"$-/!#$-=40743112<44967>B!$%&,$=7/;5(%!<92/444.6/.,/3)!$#.?:";;;<72:>?<72,//,)(33)'!693./1+4622(%$###%+,# ! ##  #%&""$+'$(((&(*149 !76*//,(*)%#$#%'++#!+57/<;7:;3(-/1((4:1/32,)(/((-/)'(,*,363<8 $36<49870@058G(&$ 268%#CFFJJ>A;-04C%%&'B &%%"%$#!C<7:(-UqvpoPVu]I5G=:8^XOa]1/GNCM74BLOF1?8>LONNZ002U.<`LMC>A:$K^PGB=?>?H2G:0UJSR8/S1PEHH1e:GHDEDaM71"M0L0.0M?>699R41UU66dZGX9OFJOPKMNKA>AN+T+*OLLICDGB./<*("(=oB9'5BIG30A"4=rs/A]*=$95746eH+34TH@@OIU]\DO9F/PNi2\5lE,GM]WIDDFFEGEFHIONTRCQTY]0^TOOQU==IDECDLEB?>LJHMTPRLlKLQPHCFG@CeIle`SOJDAA=>>=@?=?9=;9;;==9;?;::=@A=:CG8<:?CIZQQf6L3?DBAHJGGIHIJKJHGKQU[[Y\RF7H8 3=0:B!=     + %%)37! #"$]%" ,9*!"# !!! !,1:=!"%&+.((%'38LTK9.11('4PT6`kWC?LGHKnf[V-? AJ@"u!˸bb~OC92/52,&)+)(+/0.->)&<-)-4&!$"!DIJKF@HPLLRW2S*/872+&#&" !#$%%%'&#$+**+2T`XOKFC=@B>0UZafghgn7-/.'0/-//0/.,-/...0./00040.*103002./1133431//33133322487767676897976875798788;;>B@9589987;:888@>;=??@BCCDGHHJLMNNRTVWVYZXZ\bdfdedfesvopoorvwvw{~G^|rPgxujgekb|x|v~vypH}IFKIiqwq;gil_\YVT--RQYZSUTSTRQQ*,-,--_]QKKCIEDFDII`LLGOOFGSMNM>K>>;j79<>@A>@BDGFAFDCDFGOQHGB>;;:96607407@5*044.31.0.-,-*)(('-7=>A>=;:73463454354344-/0-,0/2432++,+##G@/E/,,+&((!A> ###$$ !"#!!%# !#!74% ;8$-  #%!&$'$9**!%,.))-0),,)'#!#$(%'&%# !%$''&$$##"" $ !$!# + + + +  "" + ! #)$%(-,!!%% 7IOMO553133265678?<>;/:@DG$D<798<9554579=ADFFDB>;7531/.,+***)*()*+++,-,,,--,+(('''&%%%&&Wi̻Պƹ鮞΀湜·Ǿ􅐞ŵ׀ѹ̼䇚ߖ搯ʺå֪̀´οؽź؁섈棢ھޥ팧㥌¾ʧТܧĽَŽĘޚھ̹͛ÇƄȧ枖˯ܸ˩݃瘶䂺܀ك҈ְ˷݁؟ϲؿۆڀ뀄̼ŰҪĸƲʁɳ쥲݀䇌P熌傋܇IHHGHFC<5-*23034114;521/,'*..13F%!(48@:@I&0HBADMC//>T6N+(MVX/eKS$**57AP\6,@:2/2<92-#!" %01"%*(KN(DH+,("13320056764497]34.0+)0T:2+(%! (;RJ?A#%(*26FD-)-212:M4V>1013;9846=7BA;=.6?M\dT>7;:16BUf<]e{QGOGNH]`QCp`<;<<==<;<;<<=<;<<<;<; ::<;;<;<<;:;::;;<;<<<;<;<<<;;<;;<;<;<<<;<;<<;;<;<<<;<;<=< +=<<=<<=<=<=<=<=<=<=<=<<=<=<= <<=<=<===<<<=<==<=<==<<<=<=<=<<<===<=<<<;<<;;<<<;<<;<<=<<<;<<;;<;<;<<;<;;;<;<;<<;<;<<;<;<<<;;;<;:;;:;<;:;::; <<;;;:;;;<<;<:;;:;;;::;:; :;;;:::;:;:;:;:::;;:9: ;;:::9:;:::9:99:::9: 99:;::99:99:9:9:99::9:99:9899:98989 88988899989898989898877787788877878 +78778787778787878 +788878898989898 9898988989899989:9:9:999:9:99:;;::;::;;::;;;:;;::;:;;;:; +:;;<;:;;;:; +<<<;;<;<<;<==<<=<=<=>=>===>==>>?>>=>==>=>?>>>??>>>?>>???>?>?@?@AA@@AA@@ABABABACBCB CCBCCCBDCDDCDDCDEDEDEGFEFGFGFGGGFGGFGHIJJIIJIJIJJJKKKLKJLLKLKLMNMN OOOPPPOPQQPQPRSRSTSTTTUTTUUUVUUYSKQOdvns\IJE>AB?4$6BA@>CDFFR;9^TKEL83m8pqmpg]]ef`fiiupv>RYZRDCA><:?;>@=?><<>?DAESPSLJHCCD>pxA??DJ@1V\33489<65.+4D@766788798787::6:;<><=77:>;>?>A@BDC@?@AvCCAFHLNIJIGKHEDKGGIHEFFDEDFIFJNHEA@AABBCA@ABMKEHKKLMMNQQMMPOOPRRUUVY\[\]^^_adeefguyplmnqqqspsyww{z9KlfmeRACCCBCDEEEFFHGH&GGGHGGHHHIIHIJJJKKLKKLKLLLMNOPQSSSRRRQRSUUVWWX[[\]`adeffefdddgiijkklouMOQRRU_kqspg`eijgc^[Z]afhifa_knfjqqne[UQPQTUWWWURPNQY`db^U>zyywutttvtttssrpqpopoonmljgdc_^]^aegiiihdb^[YWVURRQQQPOPQOPQQQPPONMLLKKKIIJIJMa}yyd^f[VzGIILztrw|utxwuMKE~}{qjyttHAHzxzqwutlgkcd9726;5c_[\ZXWVX\[\UX\4sQJFTDLRSWYiZPLLPPPQQORRJQMLBAGIOKLJDFHIKHMMHE@DIDFUSI@IIECMG?IJFJCDBMJGBA==><=<:98>B@A@<42-U2@BCEE=2.OD(169::8<:9=:::73556/,VD++KFEQW074*+')2%+-..-.**))(($&*,724/)&))-/02.++)',-3=EG,BEHBB(0/.4044884336>?8940.0++223;:;:@><;968:49997379874,++/,)&&$!",=4-40.,.,00486:##")&!<83.1121//-+//(!!,30::<: <;98=876.2/2.*;9)(%"6<3-/4<%150(%&&&(.4%##&%#$%'(&"$%"#&)"!&&(&*042395/4+-+*'&$""#$""',5-*2436792%&(+,0-,90584553))..''#&'552965:6505?AJEE:54;I)))&!07/$E?C=FI9;6/218%%$%%"#%$D$$A@D@?"%MJkwuqWBr`G>N9JCF/HNQ2BKELC9:DR7BENJQQ>IC?;:\]SQKKE?COKGDU&8J*47789>ZR@E5S65:)S950NI?4.OP`M[`OYiXLbL)'II((QMICAEJT--)IFEHKIKKG=9%$!LM,+=iPKIDCA@,@AR8- 50Q59?Z8Q.75QQ>?OMJ[SIPH.S?U6[UMTBJJLJIEFMYNNO@FPSVUP?IJJGKZOOOTBLOC<=@EGLMOUVXZXVXTRQKJ_PPzlobXRMLIBAAA=9=?AB>=9<;:88<;9:C-;>@EJIJILNOOIA;3:F-;>ZJ3Z\;7;MJ5?33.#,',Se7<: ('"#()094b7/JZ#)D6:33O3>58745638?<97i;7]abh443982[[_44SWa4V B=>8=$'&"709$D',)*,&#BNZONVJ6044/&',*))-++*3($;5307&&P)TXURVSOOVWPSTQ[UV*4330''&$""!#(&)'$%)*0.2NVWNIE?=?:gr><?@DGHHJKKMNOSTVY[ZX[]`ceeddfisvrqqrtwzzv{CQ~`eVmy΂sjrlj´VWW_{FD?{txx~E?Eqmpufjfhb]_YW1/,/31\XTVTSRQSVVWOPR0kMGCK@EDDEF\SKGGIGqBEC;C=<569:>>@A?BDGFCEHDBAEMGJVOE<@>=;@85:9692/,752..+*,),,*))((')3:<>~@<;:56:63344343565121,*01/.0/+')**$#!>%/,)!6/"""##!##&$%('%"! "%5+731>@ $!#!&(*-0--" #$#$&*00,-++*,'"$!! $" "$"%$#  !!  #! $ + ! +  &$(%' ")'#&"*+$! $!&.BOPO8+J;*/%%&"&)#'&(&$'!#(',-"&(" #351.**'#&+&#"-!&$"#()&/4#& 46;-#-$) -)4+&!-'7>&$&!!&40(#&#" &! 3.#*( (# %",!)+%+4&!1%-1420,+.18//-363451'*+&A473,(""&.&-(*+'&#.)$(%)#00+$,"%#59>$+*22566449D;<>36:?CA873.-,-(&(*+,*(%(''##%$""#)())$)'($"*5@B(,0()02436430/0235672.;JLIJH?7E;#"#(,$&(.432247773-' % /9C3$A>##62 &# ;G(,),L('=" + $$G O,2 %$(##2%.'(('&%#(/.,+L*&@BDJ$#"%$!>=B%$6;B#7# + +*4,2>4$11+} ~~}}}~}}|||}~}}~}}~}~}|Ȁ}~}|}|}|}|}}~~~}~~~~~~}~}~}~}~}~}|}|}|}|{|}|}|}~}~}~}~}~}~}~}~}~~}~~} +~~~}~~}}~~}~}~~~~}~~~~}}}~~}~}~}||{{||}|}||}|}~ }~~}}~~}}~}~}~}~~}~ }}}~~}}}~}~}}}~}~} ķヒʓܪ͹֣ɂݿڄaзڛˬ¿˲ܽ&    + + + +         +  "y°ѽț¿ǴռǾľǞˈ֡N+ "#"##$"""#"!#""##"""#"##$%$$$#$$% &'()*+,--,,,+,-,.//0//013689:==<;r::<;==?CJXl|rdWTW^ip;:mdb\Z[\ace4579;=ETaebWGGKMKE>:;>@EHLOOPa}y_UXZWRG>841136:;:8647@JMLH?3[[_``a_YTPLKIHIFDCBABCB.@ACCCB?=;9978;?BDHIHD@<83200/.-,++,+***,,,++,-.--,+)('&&&''&&&(Uǥ󈥣폀°猗Ŀ걥™ƻϺÿ냙ǻЭ遖めĴճᄦɹ쁃ڊ̼ǀƺŶ߻􃐑ѶĽŽûïʷѪ׀սƶŚ݅۴úå¸󮈢տÁϺڻθ薟ÿ쵀ʹϭѾϭ폥ʴĄ݌΁̕ؽӰԛξ욗ƻŖ귱蝌͵ڀǮ䏱ƽƺްԩմػҾ򁄀숔޿׀GIJIIIG?70)!+..220/4;1320,))-,-2D+"'+=J,'3?A?CEKE,/8K9R-LQ-T_`:1 <7D39PT[)+&8<6+2).>8"17((.8A)(??KDF-.-%+242/.57942474b5764647-.(,\?6.)&# )8,,+IB"')44;[=.+)*/59Q6M62.04;930668B>@;'6@M^gR<89627GXbC\^uUJMHMGVbIKpQ=<==<=<=<=< ==<<;<<<;<;;<;<<;< ;;;<;;<;;<<;<;<;<:<;<;<;<<;<<<;<;;<<<=<;<;<;<;<=<==<=<=<==<=<==<<=>===<<==>><===<<<=>=>=>=<<=>=>===>=<=>==<==<;=<<=<<<=<<=<===<<=><=<=<=<=<<<===<;<<=<<=<;<=<<<;<<;<<;=<;<<; <;;<<;<<<;<<;;<<;<<<;;<<;;<;<<;;<<<;<<<;;;<;<<;<<;;<<;<<;:;<;:;<;<<;<;<;<;;<<;;:::;::;<;;:;<;:;;;:;:;:;;;:;;;:;:;;;:;;99;:;::;:;:;;::99:99:9:::9:8999:;:99::99:99:99::989:9998978898788989898 98879988787778889989878889898 778887888777878799889889998989888789988898989::9898989:9::89:9:9:;;:;:9:9:;:;<;;::;;::;:::;;::; <<<;<;<;;;<;<=<;<=<<;<<=<<==<<=<==<<===<=<=>=>==<=>=>?==?>?=>?@??>?@? +@??A@@A@A?@ A@AA@BA@A@@BABAABAABABABCBBCBBBCB CBBCDCCDDC DDCCCDDDCCDDEDDDEDEDEEEDFGEGFFFEFGGFFGGFGHFFGHGH IIHHHIJIIJ IJIJJJKJJJKLLK LLMLMMNMMNOONOPOPPQPQRQRSQRSSTSSSTUVVWDAST^roulHKH@@DA7&0EAC=ADEGMc4[TNH<889nouztl[_a\VffenrwyKXYZL@DF@847@GCEB?<@HGFCVZRNLJGEA=t@?@@D?8,X3;99;;:529A>346445685654 786998:9::8:>>>=<=@ED@@@AACBCDCBAHKMMMIGHGHDCDDGGHIGEGDFHFGKKHCAA@ABEEBCFMOILQONRQQQPMONPQRSVYXXYZ\[[[^]`afgeirtoopqssossqxzy}}8kVJ{_bvCBC DCDDDEDEFFFGH IHIJIHIIHIHHIJJLLLJJLLLMMLMNOQRSSSTSRSTUVXWZ[]_`cdfhhhghhjjkmmnnpqwURPQSUWY^ktxwoegmnkha^]_chjlkfcqpjqtuqf[VTRTWXZZYWSRRZcffc\R8}|{xwwxyywwvussrrqqrsponkhddcabdfikkkifd`^[ZXVUTSQRQQQPQQPQRQPPOMLMKLKKJJM{vrc[]^UQCTRL}|{MEzxy{NNQL}uuwkjhuyz~|rtyvvyqu=iij:k;=54=?dYZ\[\XYYV\XYXY07kTNRc>^E[\[UGGKMMQPPPRRNLJIOI7FGIHFGBGIFCFIKHIBBHNTUSVKL[\SNZUHJ?<5:>BOAACC?;>:><=>>;8=@=xpu:;D@=>HQLKKJJLQRIGMJJK@AEDGIBB@?A<6404<@EEKA5+CA&-44335@%$F!!C>46;83423.RM>.UNLLTP/<4.+*.:(.///.-.--,)&&*9=@::.%%&(04581-,*)126"(F*A@DCB&./,4136975312243/'QL((,4/16516>@;942551675/34521/(('*(##$# +/+?913/-(()-+169;70(*+.-581&$$'+..//0.*-+0.23(&&%(*')/2/0((&&$#"&'%#$$&'),021.2403262+/12-)%$B78;:>2)*+/-(#""/1,0--.7.,$3!454/+:3?)++$ 16+$HG?JBEH<:..18G#%%B;DCBC"IEB;:?FFPIj}tnXaoO;C:g5R6EJVJ2IIFZS;9[KFGKKNRJ7;EJH?-IbcKXWPFHFK>6d4-IMZNEFLDBOXR1bPKDfX\KI%:.),01;!?E=B93M&dvUNAFe:CYVIHB?BL/8K_I490(JFSEFE5V3D88478K2NOUT29Y9.GI@>8179bhV`WH4G+)'%$(+**RHEINPR04.NF?>CFIEFF7 3TkI1KA9*JH@IKF=,<9GdY;NFBDD6]b446FOOLIFB_RPKM7UTY\b7;YEM])LLL:;LILFGEIMTMLH5=KKLWO@CDGDDGGLLG7@RV8A@B@?CIPN_c`\YW\[XNUuRvynQPLUbVOECB<>AH?>@BB;977;=7682?LC>4ADAA;@I_ek;7-(>94Y088:8454]K0p9;;=6\__`be48973^Vb8MVXd22B*1)2%E#"9:#(6)A, ($%D9JPQLAELK))(''%   + + " #")(!*,)/1>V<4f88:9:4,'K'(+/340*%%-+'+.--,,-+.,-01/2242122246647555447;;99568869:77:>>?>?:899;9::98}9;;>@>AEC@>=<9<=?=:99>>9=?==B@AEEDFGHHJMPSTVYYZZ\[adebbdekswrtrsvww{zwEgN|Wbuh{n鍏놃qmqskeQ^\VSH}~HFIH}~~wys}~xvlmsppmbi7aaa5]470/69_WWWUURSRPWTUQP*2eMIK\6N:JHKPCCFEFHGDCAB=<;9>;;;<;;?=BFC@BDG$FE?@GKOQOMEDLIC>J?582.(')-:0...+*+),)('').5;>=8<7658;43422266005101*.2/22/-)(,)%$"'++--/'!,*$! &%%%!!!! 10*==:7B?!&&#&)%%&,+/.,#!!##%%(+*+.,&QK'$"$!"   #   !  &%"((#+%(* %$ &$$$(%""''&*?SMK8BH2!!!3.#%+%('%0//&'%('(,(!&)+%.;8'12.('#'!9&%-'$$'$%,307,-(9510)#$+6C0($6 ,) "&*2$(" (!&,$.+) )/+0.(#5.,0355 "3.*)012-/-/?.!4&'74-53,## (+)+%" 22!'%$##2))&(--511 .$'3774(#0030337:A;9=1199>E?02373245762");A(,-/-./6;;INPKHHJIC;EnQpo_A=9AJ@80-,(),2*)+++%$$"%%! "'2+&#'&(")1ELP.',/0079986650/003225@LQPRI?=QM$-1,-7& $+544235:;3.-.)579 9D&1:¿ϡܾϱƹĹÿ۸ƁR" !"""#"$$#$$$# $#""#$$%%$##%&''()*,,-./.---,+,,,./00012356::;<==<<=<>???@@?AJZn}j\X\fq==uoia\\\a12358:=>BQ_gh_OHMQPLD>=?BGMQSSUg{aX\^ZQF>96447:=><:78D@KRTMD:1]`eed^YSONLLIKJGEEDDBCDDEDCEEFDDDBB@><<;:=ADHIJJGD>:630/.-,,-,,++,..--.///0/.--*)(''&%&&'&&'&W~郇ҷ닄ļ԰߀«ƩͷdzϽƿ±ijӼͰуϹƸɶ滢ꐵߎöӳۈ޺׀ƾ󆂓˵˺ʲļҙςϼز񳵉ۆ̣􇌗ƒ䐭ո®αŮФ⵹ùμ̽Өঢ়͹ˆд۰󖠂ȫ䤈󿀿ފĵ˼Ռ̀ۀ߀ĸ軽ͱѢ闶ͮܟ¿ɿͿѴŗƎX턋쀃ۈIHKMMD@?4*!!+/0/0/3750332/*)-,)/=-GB1ET+:/LA=BENA39<49&+(EJPNP-.1) /02005463/374g2786646-))-N;0+&" %9@4&@K4)02.BK2-*&'(19Y/E>7,3::86572;=:9-5BFOZdZ=59309J]Z@\qqSKNCJHXbPS>==<=>=>>>=>>=><==>=>==>=>==>=<==>==<=>>=<=>=>><<=<=<=<==<=<<=<<<;<<<;<;<;;<<=;<<=<<<;;<;<==<<<;<;<<;<;< +;<<<;<;<;<;<;<;;<;<<<;;<<<;<;;<;<;<:;<;<<;:;:;;<;:;<;:;:;9:;:;:::;;:::;:::;;9:9:9::99:::99;::9:::;;::89::999:98989 89998898898988988898987898987888988777887889878789989878889899898899:98899898989989:9:89: 9::99::99:9:99:9:9;: ;;:::;;;:::;:; :;;:::;::; +<;<;<<<;;;<=<=<<=<<=<=<=>>=>>=>==>>>==>==>>=>=>?>?>?@?>>??@?@A@ABBBAAABBBAABAABABCCCBBCDDCDCDEECCDDDEDDDEEDEDDFEEDEFFEDEEEFEGGFFGGFGHGFGHIJIIJKJJKKKJKLLLKLLMMLMMNMMNONNONNOOPQRRQRSTUVWVVR:UV_jou{\HHBBD@:,*EDCBFECC@S^[RWP;::;mruwtiX\^U\a]ahqvzSUWTABD=?@BCABAAAEJHIHGDDBEGHFFFDCDEGOOICAKBCDDEDLMINNMLPPNNOPRPRSUUVWXYYY[\^^^aceklllsrmioqmmoqrwwxx{z>\vkS^ABDCCDDEEFEFFGHHIJIJKLMMNMMNNOPQSTSSTSSTTTUTUVWYY[^^acdfhiijjlllmnpppqqszVWQRRTWX[\^kv}wlipsrofaabelpqokgwupv{zpf]WUUVZ[]]ZXTU[djlhaXQ'}{z{z{|{zxyuvvuwvvutromkifdfilmkheb_]ZYXWVTTRQRQRQRQRQONMLLKLMLLKLKvrf\WTTPNQUQK}HF}wvsr~JD{vvu}fhlqppts{zxytmlklhoqhkgij5ldaif`^[\]_^[]WWZZWZdljaUKENQVU[YPONMLOTTTSRUQOMJIDCEJIFCEGDCGMKD??CKRWWMOKK\ZOPHGISF889>AECA?;L=B?8:===;95615?>B<:@B:=93327;AEFF=50PR,2576326&%E"#D914980267-J>3+)-XQTV3=9.*-4"-6453261-05,'(,=ED@9*%&)(0216-+)'/77< ,H*B>AEI)04/4050670++001'II&(,0/2+.3467:><941421446375771,'%$4$%""! 7! )<900+&$'*..4;?C&%%&%$@? #(''')!84,2(,-02-!#-:<<=<;>(A58<<5+-11839++'-4<65:8:243$C?3D%FE;?801.7A'"?@==@@??CC;:=AFGNb{mnXiQPg:D_FB/:Y?:KIGH=`HDK2FA::7XS97KNHPd.64=TqbT:;F>BE>L2DUWOPRF7IUI/>BMGB:2?HKMC2"HX=7==>83C8ELM[5B]\TMEAFD>OJJGKPFDE6YSH0=JLM.U:4*: @,VNR,WRKD<835UUM9-(()('$"&#$+,+-)'ML)V2/.RKC8<>BDEHC,1CKPEVWWTo2H%Z0#@D-2@'?LAD?@DB>7j93;@GKUIC>HNDI`GU[\VWb4:X4+D5GE@BB?AGHFHW`e[WXSQQPWytunKFFFPQTXNIEJJK@:<>EJ@;6867700>PKE3%2B8$#$$778-87R>!*'&47>5127::88417eRT548<8\]\\ab33561][55JUTXa71D>F7-;E#!$BD?3$/,)$%%?4CNUGAIK-)())# "    !&1 +$#*$"!' +(>=?=>><<;;>>;\<<<>A?>=:>?>@==?@A@CCDFFIJKMNPSTVWY[\]]ceceghjrtqoqqoqvz|FyO~uw~~nSgwmkjkgd\]XTLI}yu|GC||~z}}{zvztqsmifgg_c`]aafd2d]^ea][XXWXVSUPRTTOQYecZOD>JLHFLJFFEEDEFEDCA@=<;::9:;>>>=BECDGIIEA??HORRHIDCPLBC=<:>5+*))+---+(6-50)**('&&#$#)36:||x;783225532332120..623/-/1/3-),+%('###'**+)*# 48 $%#  $%#"&("#$".'"<7>A$( ##!"" #('$!!'+'+02!#!$"$#"&,,-%DB##%&"!!!   + +  !#'&    +  $#"  "    !  % "!'&(('!" "!"#""#&% "$%')%K81( $&!&"*,*))#'/(%'2+#+$''##((*#$+#!"!, "('1 0/(% !! *#,$"&"*(! (*'*$&+(**%! &&( 209"72.&**+--0-"+0&:==6A27/0$"& !""!<"#*# %&"$5$.0.0-6-"38707171221258>;9) 934BA942000535/'.)40-/.+-1325DMNFCCA=<>Hp}lka>756>=>@61.478.()*.0'$!"! +;3+ %((+3::@*.1147:;<99887510239DR[[WL>8K>%,/;G'U6 )$%2523338431// $*,30/;F;.$0($0. + @J''%'0403' %&1! &-&""&(?%#'D7?(()-)?=<=BA""$$!==$&1=9=D' %"##" +#/:0*..}|}~} +~}~~~}}}||}~}~}~}ɀ~}|{|}|}}~~~~}~}~}~}~}|}|}~~}~~}|{|}~~}}|}|}|}~}~}~}~}~}~}~}~}|}~}~}~} +~~~~}}~~}}~}~~~}~~}}}~~~}~}~~~~}~}~~}~}|||{}~}||}}|}|}~ }}}~~~}}~~}}}~}~}~}}~~}~}~}~} ϯȻֹ仑üʏƥֿʼ놃󃆇bͭ୓֪ƿȿز㸰*      +     $.ĿۯϿ掦ϏִѹঌۍׁԝG  + !#$%$#$%$#"###$$$#$%*&&''(()+,,/.../.-+,,-+-//0/0246888:=>???AABA@@BJZrpa]a7=??>:ga]]_02367?>?@CGKLLKHE@<7421/.-..-,,,-.0//01010/.-,*)('('&&&*덡ꉉѺƺݠ¸Ĵኈ溘»ʀƾաǿټⵦŮɩªղ߆喻ٮ½Հ󍏎©ကԸʺ€僁ȵ»񀅇ǹýҁۘށψܷù՛жưǼ͚ʬѱڊްղǥ玖ȀƌϢɱ҅۴ԛĭ؟×װࡻҠʙҀﵵǯκǴԩˀᷝý㝹ͬ꾟ş̀>삌郆ŁĺڀJJKHEDFG@8'&1853..0611440,(%*)'/41$-SH-IWR5#@KEAHGH?67>HCIJN+*/.\<+&:=JJM,2cYC*(!$0$-.*046>JH4&-5''HMFDQ1/1+8,/2.14362/171c2766431,,2WC5,'""!=JED80D%&4587ME/,!%*(+E4R><2.27<=894376H@==<=<=<==<=<<<;<;<<;<=<;<;<<;;<;<<<;;;<;< ;<;<;;<<;<<<; <<<=<<;<;<;<<<=<<<=<==<==<=<==<=<=>=<=>==>>=>=>===>>=>=>===>>>=>>>==>==>=>==>=>=>==>>>=>>>===>>>==>=>>>=>=>>>==>=<=>=>=<=<<===<=<=<==<=<===<<<=<=<=<=<==<==<;<;<<=<=<=<=<<<=<;<=< ;<<<;;<<;<;;<;;<;<;< ;<<=<;<<;<<<;<;:;;<;<<<;<<<;<;;;<;<<;;<<;<;<;;:;<;::;;<;:::;:;:;:;;:99:;:;::;:::;;::99::;9:9::99:9:9::9998989:9989:98:9:9898988998989898789898998989898998988998998889898889989998989898989989:99:;::99::999:9:9::;:99:;::9:9:;;;:;:;:;<:;;<;<;9;;;<<<;<;<;<<;<;<<<;;;<=<==<<=<=<===<===>=>=>=>>=?=>??>?>@??>?@@>???@@A@@?@?@A@@@A@ABBAABABABAABBBCBABCBCBBCBCDEEEDEEEDEEEFEFEFEFEEFEFEFGFGHG FHGHIHHHGIHHHIJJJIJKKJKLMLM +NMNNONPPOQPQSQQQRRRSRSSTTUTUUUTVVVUWVVWUYIOS^kmrvKHDDGD=4(BHGKJCDECR\1.ZR>996ortjdVTWWVV[Y\_injCSWTFAE@3DNPQTQIEDDIMLJS`VPRSTNKHBEIHEFHX^RB6JK@=?A=.:A?98::;97787754566777989989::9;::<<:;>:<<<>=>@A@?AEKHGFFFEEDFEEFCEDDEECDCEFHQUODBCDSCBDIKHLJLONOQVSQRSUSTUUVXYZ[]^cccdgilmmszvmoqproqrmrwwx{zIg\b\}Y~^}CCDDEDDCDDEFDFGGHIJ,KKJLKKKJJJIJJJKKJKKKLMLMMNNMNOPPPQRRRTUTVVTUVsUVXXZ[[^accdfhkknoponpqrrsutw~RWZ[YVSUVWY\^^`hwypuwytlfefiosutpl{w}~rg_XXXZ]``_^ZX[eoqnh^VR:R~}}}{yxyzz{yxwvqnlkjjlprsrpmkfd_\[ZXVUUUTTSRRSRSQQQPONMLMNMMLLLKMqni^ZUNNMHKSYQL~MK~wokgy{tvwgwcY]Xm{mnwyomojeZ[k?MMH?54.,+P)-04207I%$"#@2).0-+/54MB931.)'3,K#+54--='07544364156)&()4A>98%!$%'034:.,).:=> A*B&CBEC=%.2.42221;.*-..-,1/,.2355,.669;A"A83052055113462($$"#$#*-!%44/2*$#"(*+18:<%&&'&D;2@&&%%$#A;;62+-%&%$,23(!$ %!&0;AE@=60+'99==51311<$=12,085331.4?@-"%*),*0-)"%+%'*&.,((+.5$936*-169-/-!"92&*+(''')+(&')**&$%)+,/-($# %(++*('&256: $1*'+.*)&%" !&$"(!!0'!$++'%*',$8017!C<1?$#D:>900/42G<8849A>5+'(+5<<@FEX`xjfXqw/F83kFB83;OCSJN9:;FULFNOA4:V^CDLPLOPFIO&rjwMEOQHAID9/HLecVOE9>RB:HVZQC?1/00S?;=DB;6TZ)0BLMY4cCgQRN9g[[QNH/=>DCF>,X6N?OQ;FDl"2N8J3A<#+C=GrTF7UJ6:8a]aHG)('#" "89"(+-)()(,32,-+NE>::<@@<5$73DhTbFMNWBM28H=AE11F6=53QB?939FJJ4==DBPLLGCNOWWPWbH?D8I5V=@+OMJGIMAFMKJLING/XH?ICDPIF@BBCCIJHFMC3'd`7FEBDFEDB@B>GIQPMPSGKXsvxT?BAC=DILNNacPC?97:>FD=;992/4=CEEB6)>LLGJNGBCDEIMQSSTPNKMPNKJGH]ksqleM,R272D@DA9&! $'B:1>)69F1!F),TC812,755741<87aW]3;8T(0.Y0/.--./133XIPOU462=N(>4=FF$&,.TB&' *'''G33-GIBEJ.*('&"$%  +    +!,73 +"%&'# #(#)&*@)$$*(' FB' + + +  (" !$&&0 !$##"8*  ,%#& ! .+ &":(&$&)&&!%$00)020>JQL3)*"'7D?5KddGFI>FH^iVb{՟m5Q_NUHt ʀѦfhxH=412-)!++(*)%'''5<;7,-0.^gld_TSVVRPROTU_f_89:9-.2-"/58<=844124668PbSIFHID@;69>>;:9>3)!+)+043.&&&'((''(%$&'(''()+),,-...0124423334668:5788:89<<@C@@?@ABAABA@@===>><;=>@ABIMG>>>???@A?><>?>@<>A?ABEEEFIKLLMMOQSUWXZ\^_`cdfhhovunprpsptyw|JoIRVmcdJ|oojddb\UY^UPOK}zt|}{uroiztnrrifgc`WU]85c`bca_]_e_XTSVV*SLRPPRX\7fUC8KsCUDFGGMCBAEHIJD??<:=977;>A>?>CFJIKIIF@=JJJIEBHB2.'$&+/*$"%,0.+('(&)01.0136:=<==<::;;:6655GR]`[U>0C/$ ));F+<(2'(35003=5423.6"1$)&-,21ABG:!.A.1? DG&'1$,3X22* !$% 40("!%$'($"+()G@C$+(69#$9453!9%'"#/3 "-2*.1}|}~}||}~}~}~}~}~}ɀ}~}|{|}|}}~~~Âہ~}~}~}~}~}~}|}|}|}~}|{|}~}~}}|}~}|}~}~}~}~}~~}~}~}~}~}~}~}}||}~}~} +~~~~}~}~} +~~~~~~}~~~~}~~~}|||{}~}|||}}|}|}~~}~~~}~}~~~}}~}~ }}}~~~}~~~}~}~~~}}~}~}~} Ń½β۳񾗽˼󀈋ʼnۅ޼돝^纤Ǖƻ±޳'  +     ! !!©ȶ&򊴽ʓܺC!   """###$$%%$%$% +$##$$$%$$$%$%&''()***,../00/-.000/3567669>?>?BDEFEEDCCABDL]zugag9=A@=7300023458BKV^]UH<6568751-SNLLKLKJ,IIHFFGHHHGGJIHHIEEBCBBBEFJMPPOLHD>:64220/...- .---/00110 +.-,+)(('''(''&%%Zļ㈒ƻ듈̵ԽҾ󄄆Яʀưɼ¸ͳ˹チ稱̧׼궢»ǶُžDZ⑚큎ijǷрĽǾξπؿԿȀî˼ч̗ǧŌޟȬ纏¶ѶИݷʮǕɮǛҸѿČƨ̠Ŵ樛ϲկ؊ٙҥπʻ腂ީÀԗÿʤɻٵˀ¤ɨüԊ֬ȭحۻݲ削⁁䊅>ȳӀNMKFBDKJA70,28611-+4235/((('('+*612-TF,FGS8--#!8K7K:40353;><:32.KGBKKIJS^UC955-1@P\WN`vfGQNCGL^fPXCL=<=<>>===<=<=<=;<=<=<;<=<=<;<;<;<;<;<;< =<<<=<<<=< ==<=<<=<=<=<=<>==>=>==<===>=>===>=> =>>=>=>>==>>?>=>==>>>=>?>>>=>>>?>=>>>=>=>==>>??>=>=> =>>>=>>>==>=>>?=>>=>=>=>=>=<=<=<==<=><=<<===<><=<==<<<><<==<=<<==<===<<<==< +=<;;<<=<<=<=<==<===<;<<;<<<=;<=<<<;;;<;<<<;;;<;<<<;<;<;<=<<;<;<<<;;<;<<;;<<<;<;<;<;:;:;:;:::;;:::;:;;:;;;:;:;:;;:;;: 9:9:999:99:::9:9::99:98:999:9:989888789898998989898798999889998989898989898:8889:9::9: 99:99:999:;:;:;:9:;:;:;;::;:;::; +<;<;<<;;;:; +<<<;;<;<;;< ;<=<<=<==<=>=>==>=>>>=>>?>>>==>>???>?>>??>?@?@@@?@@?@@@A@@@?A@A@A@ABA@A +BBAABBBAAABCBCBCCBCBBC DCDCDBCCCDCDEDDEDEDEFEF EFFGGGFHGFGFGFHGHGHGHIHIHIJIIJKJKJJKKKJJKLKLMLMNMMNONNOPQPOPQRSRSSSTSTUUTVUVWVWWVVVWW@ZNXekk~ZFFBEC?8&=KLKFFHDHM`20]QD><4jqbTNPNYQORU[TSbe`fHLPKDBA:CGKKLIBCIKKIGBRVQUVROLJFJHEIOYPIYWFCDCC54AB<;;<=<<:;::98897:;98:99::<=;:;9:=;;>=>=<>>???DDFDEEDFEDFEEEDCDCTFEKMICDCBCDDDCCFPPLMLMOSRTVSSRSSRSTVWXX[\^_adfchklmjqzunqqsrpqpmvwvtwOjCqbPkaCCD +EDDEEEFFFEFHIJKJKKKLKLLKKKLKKKJKLMN OOOPPPRRTUVWWXWWVVWYY\\_`bbcdhjlnoqqqrssttwvx{VZ^^[WURRTVWYZ]_acdixzz}unijnrxzyss~~sf^[[\]`cba^[\dputoc\VTTVUUSO9}}~}~}}{yvsomllmrwyxwtpjeb_\[[ZXUUUTTTSSSTTTUTUSPPPONMNMMMLMKJLtuoibZSVOMLOLIPTVZSMQR~unhervzMDCritYZY]owjlwvmmpje^kqmpjlfgd^^_\d]]\\02330VTXY\_``h[SNS@IHNQQQNOKPLUUSQQPQNKLHKECDGILIFFGHLLQRGHKFEBIHLI:4??<>@IRHHRL@<;997899::=<:402::>B<3it=CB?CDHKHIJHERWURRKIHFCCA@?<9;@@9153./68B@<71(*(Q',.00/B&&G#%@+05794796C?97>@664,B"-133-@%06343211//."&)(->?81'$%%&-027/.+/> > %='A>DFD*15/5444.2,'+350264447=>?1/778:=@=74496020,*+-'.(! 54,0+#)'-13>=:"'(%'CCE%*)'%#$$!"".-/5/23035*&$ &(%'/<@D?<67E?9A732050-=:<#91.-37;1/024:"!3&)-..,02-)()))*()*)+26$*8342?"< 54#!!$ 2(,.+*()*,+//03;64.&/'+*" =C$(%')+(%&+11779>3+&).1*'*$""'!% =-,$/#C)('!:4,:"AD:A'G6363/2/47@4-&%+,+(*#'3536:@Wd~ie[uW1J>>ALL3*TL?IPL49,Q>fL5OLJQOQRK4DSXNb`L9ANNG=_,L^[TMD?@86UVA7?CL9OF;F<:IULIDG<8EJ@N^@:;cZYFJ^XTRLB@><@A96ESOFGEA>2"(=*H+&64;<@CRE_HDMrW@UV1,*+*+)($ !B926AQ)NN*,-/0/+ULHA1:J=<]8CCDEOKQJCMRQLINUc3/61;S=MC'OMJIH@AINLOK+4>W>2,.QNFEB?AA@IWjAsS?>???>=CHNf:aMD@=>@A>>>7236;?@BCA9$':BGG<@CEJLNOPPRPPQQPPNMHKXjmpnjR>,=..%0FLGY.R;GD97MNKJJONIHEA++;*1^? 0:=;@?9'/"*J;/$&.90>5'DA<3>2444713=;8:::741@5;$S...-../23.%_\[JS268U<-I3#5DK''+)&77N((('A./,.EKJ/,*&#$*(   +/$&JC!&&'!$')"*3)6G@ +  +  *#%%'-  !"""!2$88+&) %.*4" -$3%!! '.*' !69/53108FB4+'( +9A>CJ`kSal8/,!q3CB:gAЏjft_?9320+%*/-*'(*(+0=>81./+\g\OIKLTMNMMPJPZ_Z[7465211+1/26::71389:896RVMOOKHDA=vB?@ABBBABC@CA?B@??@=<=>=?B?HJE?@>>?@ABA>>FECD?BEFEEGFGHJLLNMNPPSVX[\]^a`ce3kwulqrqttuxxOqXc|hxtjaŐ*Q~unije^ZZXUWWXZTONO~x~OEE{momlx{ljqmdefcaYahgjcigkd^`b^c]]XU,,--+LJORTZXZbUNIK:ABEC@BDC@CBIIIGB>>:9;8<;>==@=?>2*1/,-+38-+21+())*+**(&%''&" !)),202nx::413233004209?>;8300..10/,*''**'"%&%$('*#8'%'$$$!"$$1+$#%# !))$!#"%% #"(&+.-!$!#""!$#%',,##$#$!!$$# "$%&#' +   '() + + )*+%#)#$   +  + "   $ $("$,!"  .;PFD;O0+#$*&&0+"*-*"/"--+!"$ :',*)../2.")/1':4)!'($3'0.+(" !11%%&-"0*$(""+3,(%& $(#)5% #6//$%2.*'$ #+'# !"  "+*'+,C/%)  /00!!!:40,!),,.)!.%7(73#3-0$"&'&.))!<<%2!"#"(%($ &))($'*3,,*45322+).1142"&6)=A851.0-)1571291":/2//051.,(,+,((/6:<2/08G\9eC0--,*)*.4;R/N<1+))*+%#! %+,*)*(  %)&+027:;<;<>>>@?>=<<67CRYb]WA1!+-2/>!9$,'2665498662.""I- "''*.=BAD,.;+5&@JN)B2*.U121+ #$ (+'"+$%&(#%,**-,+&$"#, @@>0:#')6'% !(+21}~}|}~}~}~}~}~}ʀ}~}|{|}|}|}}~~~~Ђف~}~}~}~}|}|}~~}~~}|{|}~}~~~}}|}|}~}~}~}~}~}~}~}~}}~}~}|}~}~}~ +~~~~~~}~}}~} ~~~}}~~}~}~~~~~}~}~}||{}~}|}|}|}~}}~~}~}~~}}}~}~}}}~}}}~}~}~~~}}~}~}~} ƀо̼Դ老ѨԀв텅򄅍]ٵқש˿¿ŽȺͭê$ +        + + +    ! )˨ҷߏҵ󀁇݂òƿÿŽԸܼG"    !"!!##$$%%&&'&'&%$ +%%%&$%&&'(* +,-.02210//0{1245667:==@BEGHHGGFGGFEGQa{SPHxg24;@B@<842113567<@BFIXjx{ucZ\^`YOEFKPWZ\\a~hfheYKA:9=?ACFHDBCKV_c]QD:98:;850+QMLLLMMLJ LLKKJKHFBAEFHLOSUTRQLEB<9534310./.0013311210---+*))()(((''&%XԼڈ̲񐟔ñ򅇎ЩŪŲʥŶ÷¢Ʊ鄛ö㐎Ļþ¹ї־ʲ갓л􀈂ȶ̀񇖚򒁽»󉇂θ€Ƿú̽÷濥ҞµλÞ¶ʖٓʎƷƬٓܧހ޺ۺɈҮП«ŨĆɽ˃냡Є˩͍񥆳¼ҶϸnjĺпʡĬŬȩڞ՝ȽއĊĺի̻ȣ灐׀B냈窹̀LMGCDHLJD:0--4852.(*.3/&$&&)*'*2?1&(+NB.0*/+,'(Kc`T7%&)/4./546998;EA6E(&+JHE&)/2/A>)2326470/0662f665402/(.2E6+'(&%CV0PNE")'0:QDJN0+.0(IO1Q931687<:975',9IPJMNKOQLI9/0*6JR[ZPo~RFPLFELcoVTG:>===>>=>=>=<'=<=<==<<<;=;==<===<==<=;<<==<=<=<<=<<==<;<;<<=<=<=<;=< +===<<===<=<=<>=<===<>=<>==<=> +===>>>===>=>??>>??>=>>>===>??>?>?> ==>>>?>>?>>>?>?>>?>>==>?>??>=>>>=>>==>==>>=>?> ==>>>==>>= +>==>=<=>>>=<= +>=<=<==<<=< ==<<=<<=<=>>=<<<=<==>>=<=<=<=<=<<==<==<<==<=<<=<==<<=<;<;<=<;=<;<;;<<;;<;<<;=<<<;<;;<;=<;;<;<<;;;<;;<;;;<;:;;;<;<;;<;<;:;<;:;::;;:;;;:::;::;:;;;:;:9: 9:::99:::9:99:::9:999:9::999:9:99:9 +899:::999:9899989989:99989!8899899988899888999899888989987989 :998998999:98988988878:9:989 8999:9::999:9::9:9:;::9::9::9:::99::;;::;;;:;:;:;:;;:;:;;<;::;;;::;;;<<<;<<;<;<<<;<;;<;<=<<;<=<<===<=<=<=>=>>=>===?>>>?>>>=>?>=>>?>= +>@?>>>???>?@?>?@ A@@AA@AABA +BAAABABABABAABBBCBBCBBCBCCCDCDCBCCDC EDCCDCDDCEDDEDEDCEEEFEFFFEFEFGFGGFGFGHGFFGGGHGHGHIHIIIJIJIKIIIJJKKKIJIIKLKLKLMLMLLMMOMMMONNNONONOPONQRQQRRSRT UTTUUTVUUVWWWVqZMZmhuoBHADBD5(/FIGDFGHLMZ30]SJM>3__YZ`^T\]KLQXUO\baY3J^RB@@::@FIKKHFFMNGCBR^XUTRQPMIGIQRP30FFH\N5AD@=>@A?=?>?<===;=<9;>><;?==<;::;;<<<=:=@@?A>CCCEHHEFEDGHFEEFEFFFDDCEGFMQHDCDCABBFDEFOPLLMMLNOQPPRQQPRTVVWXXYZ[Z^\bdejnonqyvmqqprqporxyvnQ`FaYcOBCCCDCEDEEDEEFFFGFGGGHHIIHIIHIJJJKKLNMLMNOOONPOPPQSSUUWXYZ[YXXYZ]^`acdefiklprsuuutvuwxz{~ec]OTZ`cb_ZVUVWY[\`ceghkzvpqsy}wxtga^^_aeggda_epwzwl_ZZXZYXVTN.|zwssnosux}}|{uojca]\[YYWVWVUTVUVVWVVWXUTSRPONNNMNOMMLKzojf^UPYOJP`XUVWV]TTTUP|wztlupyHXOlg^^^U[hodeipkhjnjb`zkeljxhbghebekcba52340[UVY][]]Y`\OIWOXILSRWNKTOIPVSNQPNKKKHG>DJWOMGEHIGMIc[YOIFGC>DCACB?14<=:6;=\a^XFAA?:55799:;<99523<6>C<428;?ADHEHJHGFGGHPTSIGFCBECAC<689>@=637ZT(0;>94.'%)()*+-,.:J&%"!96:68:7865J7.#C1/+398C<313B%-3443110-.+&$%.7;;:0)'())-,13.++4@=: )7(%%%>$28806665+.0-.3888B?778>#"929<=@EBC<:981*-/160%# '/!6-,&"#18<:?D$)*'('BE$(&&&$%$!!$214133+##&*&+6@B??98;A>:5,1/,/,/C;>#>4&+35964667 "#)))/415;3,+#)*)(/5603"')#2-;$-/0#!)$*-+(%%&)++,++0:6.2.+2&!"&$%&&$"! '%29:<0'(.287<8*,1,%%"2 ;'3&)4.&,$!##>:-4&7F:;&'?1..12361)&$&$ ! '.232420jcTl]VACEXS6/RVKHOL>>\;NQG6A5cQb[VPJCG)QMBDa9ONq9CFC>A=moujfca_]56VN/4]_U:NbRNOA=>97:8>;PGgP?"%-?;?+A6%&NdT)&('*))&(%A=J5(+2BRRO)*-/\1[XSGC=7;>=634QSR/KO3Z,CB.>L3:ALQ=I0I0/96C@CKbb:7=IDEBFAPPBNQNFCCM_7KC`O^i>/>3NJHHHEHLKGJ+A8;?EKDIJC*2@CEB@EEBBDCCA>=?AEIF>=>DLWi|SGCB?>=<=>C>).$*%b?>: ,-58!%)/2B<3448d6><;789:;ij59-5*,,-,-,/02/K`N[Obg77APW)6 &84421% ,-*)*,,./9 ;646,(TWQOUSLUVJHHJHEQVXR)5D>H7&,,++*+,*(**)(('(()'%(+,+)--,,,-.1/32221252234688:8<=>BBC@@@?BCA?=?>===;=<@A?HKEAAA?>?AEA@AJHFCDGFGEFFHKIJJLNPOOPRVXYY][_`_bffhkuumpqnvuwwzNn[wYkıOߐ|zthdl]TVf]ZYWTYSTRTSKXPwwsqphkuulhhjbacfe`]uebiguhdfifbdj`^Z/+,,*OFHOTTVTRWTIDIBK>?A?DA>FDBJOMEB>><=>;<5?DKFEBADDDECZVQHCBE>7<;::83().+'%)*B@<7-,-+(%'))&%'&#$ "*%-0.,/778422012002212;<9101/,/1/0)$&'**)%$'EA %&!  !*#"'$$%""!0  !%(-4+! 0!###!!! "( $% $#$$ %%'))'&+'!"!#%')'&""       !$*'(    + $,,'%"!!&#!%!     +   +     '( OMFC5G26%')3*.1+)-)$%6&*63'%*/)#,,()=/5-*,9?*" . )($$"3,61-(&"%.*%&7!0/B#&(&$%"<:DA?;8660001,)4+$% "7#!8"!#'$*+,)&(762 @#@<7-,)&(*( '$$"(4//+0%)+(, !"!$02&z##!#'(&)'#""&1'+6'.4!#32212-/12/1 )+*)'';861--%).384:91!*23..43.-/.-**(-.263.*-2:I_mD61-+,+(*/5G_5L<01,.+'##'%)*(% +%+-28::<:;;>ADCCB?>9;;HV_]VC3%) +1<0;;6+'$%37978<861+ 5"F>"#!&2FABA,.8+''FM).-+--///6. 6 +H)%!$&(E&+*(+*+(HM$-B6>7EH((&83 +!&"'""% 8/}~}~}|}}}~}~~~}}}~}~}~}~}ʀ}~}|{|}|}|}~~}}|}}~~~~т؁~}~}~}|}~}}|}~}|||}}|}~}|}~}|}~}~}~}}}~}~}~}~}~}~}~}~~}~}~}~}~} +~ ~~~ ~~~~~~~~}~}~}~ +~~~}}~~~~}~~~}~~~}~}||{|}|}|}~}}}~}~}~}~}}~}}}~}~~}}}~}~} ܭÿµġӾǣ^î׿̻ǴA   +   +   ! (PƟ瀃ί򃗮叹ȴʏTѼ҄>ރX#  !!#$$#%&&(8'&%%&&&$$%%&&&'&&&'&()*+++-.112233422211012235569;>@BDFJKjLJKKQc~KSVVL@758=BCC@95324466:?EIKVjzsddfgaWMKNSY^``inkneYL?::>BHKMMHFJVbfbYL?;<==;83-*)NLNPQPNNNMLM#LMNMLIFCCEIMRVXWWVSLE=975422210110012345531100-,+,*)(()(')(''%%%Ql뉉ҴʶͧܶϿDZȶѦƯѿ˷ձۜĭцɽ̙ú؀ɼ؀򅒏逓͹傎րͷ¾Ù➫ʞƶɲƂεȅϭ艹ƿź߂Ӏȭǟ܅듇ɑԇͿȽǧʏܙڛ暀Ȁƽʹ록Ǡ䮅ӈĿĽȭȾĺŬՄ؀ǩ†Ļֻ̿λԴ쁃͂셋,񁈆̀FJ=BFLLH@;$"!..0244/)*.,'%%%')("&HD/(+>>=>>>==>=<=>=<= <=<=<===<=<<<= <==<<=<<<=<<=<==<<<=<<<>=>=>==>>=>=>=>=>==>>=> +=>?>>=>=?=>=>=>?>?>>??>>>??>???> +???>?>>?>>?>?>?>>>?>>>?>??>?>?>>>?>??>=>?>>?>?> =>>>===>>>=>=>= <=<<==>===>>=<=>=<==<= <<=<=<=<==<=<=<=>=>=<=<<<===>=<===<<<=<=<=<=<;<=<=<;;<=<<;<;<<;<;;<<;;;<<=<<;;<;;<;;<;;;<<<;:;;;::;:;::;;;:;::;:::;:9:9:9::9:9:9:9::989 89:9898989888989:999:999:99899:99::9:999::9:9::;;:9:;:9:99:::9:;;;::;:;:;::;<;:;<<;<;;<;;;<<;;<<;;<<=<<;<;<<<=<<<=<<=<=<<=<=>=>= >>==>>=>?>?>?>???>>?@??@?@?@@?@?@?@??@A@AA@A@ABABACCAAABBBABBCBCBCBBCCBCBCBCCDCDDDCCDCCCDDCDECCCDEDEFGFEFGGFFFGFFGHGHHGHGHIIIHHIJHIIIJJIJIIJJIJKLKMMLMLLNMMNNONNNOPPPOP QPQRQRRSSRRSTTUTUUUVVUUVUWXWXW]Y^QRejk{{VEAABD0'(=GGCEEGKKQ00.ZMR\9P_cjb_^OWHINQVRUeXY9LUK?A@;:?DEFFHFEEJI@>I^YYQMNOMKIG}FPBRJEQwV7kBJE?ABBBAB@???@@>??>>===>>>@?>>=?>=>?=<=?@?@@@AABCFEEFGGIGFHHFIHJIIGGHEFHFILVWICAIDCECEDEGKNJMQOOORSPPRQRSUV8WWVWZZ\]_feijninyuooqportpx{~:6khfwnwiR>CDCDEEEFEFEEFGFGFFFIIHIIHIIIJJKJLMLNNNOONMMNLLLMNOOPQQPQQRSSTVWXYZZ[\\Z[\^_`bcdfhikorvvxyxxwyz}~afihaYRRW^cgeb\ZYY[\_cfhlpq{wvx}}uhb_`cgjllgcgq{~{tf[Z\^]\YVROM!~zwuttsy}vojda^][YXWVWVWVVWXYZXXWUSRRPOOPPOPONLKLhxnhgbTWYWOL\bYYUXS_XWT|sqsrltpQ|NLvlX[\_Zcedb`jpifknkdgmhijejbh~gacdbfgf4261UWW[[\^c]Y^ZOZe\nMLVRTNQFJTVUQLQPNLJIIIFEPYNCCJIJKUO^WSDEDBDBB>@>=558BUL98@C=?;9965::8?B:<9457?BC?:688>>GJLNHFGEFFGIJIHGECGFFBA?=@?CFA:88*+*7992-+)$'&,-/.,/>F$##D1519>84:60L%-<49.2-*4;G=/03#*/35420.-),(%!$)386;4+')((**.0,-01<<79F?>< $!<87>!!#C#?;<9/(*0/("%%!"31.! #))5?DBCE$()((%?ACBA!%''$!03:96.((&#""$*.*+(1:DC=>886:;/0.0.-/..9;##9,)36!"# ./674:=0+*00/+,255/6!$$)!/<%$+ 3"&+,))&'),,+./-,2;@"=32.0(:''$''()(!%*,2<"A,&+04@9 <6980(')3 74!(#(1;F?6B!#""=2.,2E>6"*(92/20352%! .5574//,&*,.0(B~dXUlOV=YT"IO4+NRVTSRJXKSD7VWCDPPJ,:SM57?ej[O414Dke0JF^Z==,CNXPDNNSPHAH>.D;BGD<=GNJ@@eZZOYiVDUX2@/84bb[OL<>XBUF5?@;/I5ANYRVT-3=3YLDG-%SC4.5%'=FLMP*+VUY.Z\N?>;:;94004DU9X>CA.>/6?^WY@8F!$92Slio;4DMHLGA>EJHHJNG7>M_>K?2=MTU:b,ONNJJKKKHDEC:8cI7SAkZTKGE>A=7;DFGIFDB46>?@??BBABBCB@>=>ADHCFD@DJUmjWLID?>B=>AEMpFdPMLLLC3994;:?EICBBEFDHM<,;>BEFHHJPPOPQRTUUYZVSTPXfmqnVC2F(+MWPZXOJ*5?1/CMNOQTPJC;.H8G-TWK&278585?X^\XL+;JG;?5'00[nj9@>=;:A>BCA3@#"71>7'#&2#L&3)!%6356659=;9<;58;9m7*'(!)(***)*+/.B/Wg]\b78Z?Z+-'3JS.M#')L2-8D;6-(6==CE*)#&**&   # &EA) # !$'%)2*'0 +(?B9 """"!!8( 1? :;&+4.>1  *-11*%()&$'#"?F:80264=<3& !&98>;B0h=?GA>=Mbrebn%7 +" FKi6I0Ȁєe_vZ@8544!(-,)+++.-3;59C-HVZ[RPQIUIGHIJIN\QN/;?6-//,).22469778=<67Igd`VPOOJGFE}=;-43:JcD+160//00.,.--++,-,-,)***++*+-,///0/.,.10/1333479<;<>@@@==><=>?;<<9:==??IIBA=D??BACB@@GHFEHIIKMKJKKLLMPQRRQRSTWYY\``ebdefgkxtnprrsvz||FI~oZoqȴiÿ|wvggfbXQ^c[[VWQ\VYVWRM|whmmokookfcjk`^flicenihfaiagxe^`a]a^]/*.*JKFLRUWZTPSQHOSOZ@?D?A>D?ESSQKBB?>=>=<>>@LOE=>BCDDKGWPN?A><<994743)'(,81$%+/'%'+)+)(''&)($')%%# $&+//,**025266772/0/0124533141100/.+(**+.+''( &&%" "" &(' %*&"& - !+.:0# "!! $!'"$%###!%%+,+%%,#!$(%##  +   !&&',##$$$ +  %.,$%   +    + +        '!# %"^QB:7G-5!13*)-.300),6.3(52%&./+-) ';>70( );3)%02!!'-1+$*(*)$%*!(!%'&##(-+$%;15/.:4(./!!63/('/' $!'+./0&#1#!'-"$$'1D0!,*+)$%'""#.334:9?!>=3)*''%!"))!$ *3'$#5/2!,%(48:($'$!$!"#&#'2%""#(,/556755222/,,'#!9-!/"G>=:74.-*&)157:521#%+-0-.1/-00-+++*,.0534/,18E`\H<71--,*+.3<_6<;4- )3579<:72).+@D6  *?GFE6+1/# +#>PO*/..--20443# +   D"%%%'*),*&)*)R* $9I?@C'(;(7&0(& #)}~}~}~}~}~}~}~}~ʀ~}~}|{|}|}|}}~~؂ց~}}}~~}~}}~~}~}}~}|}|}~}|}~}~~~}~}~}~}}~~}~}~}}}~}~}~~}~}~}~}~}~}~}~}~}|~~ +~~~~~ ~~~}~~}}}~}~~~}~~~}~ ~~~~~}~~~~}~}||{|}|}~}~}}~}~}~}~~}}~}~}~~}}}~~}~}~~~} ųɾŲ٠ς]޹ڈҁĿ·ȹȺ|               +  ! ! ! #7Ǯ焂؆׶썘ɻ偹ʥ¾ȰǷZ!   !!  !"!#%&('')()'&((('&%%&&'(&&'((')y*,-/022566654542220246789<=?@DHLNOPOPPOOONUf@OW[YRE;8:?DHGA;6566779=DJOWi|mkmmj`TORV[`ddouroeWG>;=AHOPPPKLUckl`SF?=:51,)('PQRTTQSQPPPNNNLIGFFJOUZ^]^YVTKD>74432124223322445765566310/.-,,+*++*)))(('(&&%$$'̵ҬʨЯѱƭ̸෫ˀǹλýȸ޵Ǭ邬ɲއĴꬎż׷쁌Ԁʸļƺ툊𓃉끋׀ο솇ɷξǼ־⯻˦߶ijˀ㔴˘˩Ƶî˹͞۰դõ㺕̜ɑ繧ͫȵЀҾþ؞’ѥȤʿлэ壀պȷİ׫ŲЫεÀǫӦȷ̳ɽIJ߀רݡčϪ¾팊ꀽ󂀈Ҍȁ셀쇆¿ـ@C8COK<71(!)$,+,.)0/(+0$%'&&$)# :M>$)9=9.FOK&2EKADDED946BM-GHZ2-/N-G**+-)(*)'*-.C6:7678509:9757!%"=85?D&(()LG.$+0/2630*/4844g6540..*+1J8/+($#.O66eQ* +FM>NfB5/4;#0IQB;B66:7876781)EYUOPPPGFPH=31*(AQW_ZbBqELPD@FNcskVK_<>=>>===>?=>=>=>=>===>=>>=>=>=<=<==<<===<=<=><==<<<=<===<=<=><=<=<=<=>>==>==>===>=>=>=>>>=>=>=>>=?>?>=?>?>>???>?>?>?>>??>>>?>>?>???>?>?>??@?>>??@?>??@???>?>?>? >??>?>?>>?@>? @?>>>???>>>? >?>>?>>>?>=>$===>===>>==>===>=<<<>===>>==>>===>=>=>===>==<= <<==<==>==>=>=<=>>=>=>==>=>=<<<==><=<<=<<<==<=<<<===<===<=<=<=<;<==<===<=<=<<<;<<;<;=<=;;<;;<<<;;<;;<<<;<;:;;;<;:;<;;;:;::;;;:;:;:9;:9::9:9::9:9:999::9:9:98989:9:999::9 89:98999:9:::9:9:9 :::9:99:::9:;:;:9:;9: 9::;;:;:;;;:;:;:;<;<<;<;<;< ;<<;<;<<;<+==<==<=<<<=<<<==<=<>>=>=>===<=>>>=>>==>>>==>?>?>>?@?>?>?@?@??@@?@@@?@??@@?@A@A@@ABAABBBAAB CCBBBAABCBBBACBBBCCCBCDEECDEDDEFEDEDFEFFEFEFGFFFEFFFGGFFFGHGHGHHIIHIHHJJJHHHIJJIJIJKKJKJKLKLM NNMNNNONNNOPOPQOPQPQPRSRRSTUUVVUVVVWWVVWWX[TQXQ^jkqzoE@AAC7()3DIGJHHKJN600\NO]W-\_fb\_TWPKKTVXQY\a=ARSDCB>9<@BCBCCBB@E@@DZXLNKJKIFvyBL=FBDZN5AIP@@?@CDB@@?@@A@@BB@?@AABA@@BBCECBA@BBA>@BCBDCDCEHKIIGGKIJHJIIJKJIHIJJKHIMQVXOC@NFADCCCEFMKHLNPRPSTQNQPQRSTSRRQRSUWYZ\_bbbafjmurpn&rooqqpAyw6Xr@oRklZvCDDCDFEEFEEEGGFGHGHGGGHIHIIIJJJIIIJJJLLMMONMNNNOOPQPQRRRSSSTVVWYY[\]]\\\]^^_`cefhhjjmqtyz|{{yz}Yekoni^UV[aikid`]]]__dhlptw}||¹shdacflmomhhr~|na]_a`a]YURPON|xvxz}~voica`]][[[ZYYYXYWXY[\ZZ[YXVUTRQQPPPQQPPOONNMMMLLKKQtinii]U]YRMZhiX[VPWS|mlgnmhfxqx}{eaZ`fcdadbZmolhjhmhiioemrmghgdcdeej`W[a2/VSVYXX\^WWZZO^hIXHPURQXQDRNKMNRYQONLJMLE9CONGKGJJROHCBDEEDA@ABF?>:B;<;8<82763BB:>942=EDB@=<<:==FC>JONNFCECC>;>@@BMLHB@B@FEEFA;?=5400/1+*-)&'&(.471,3FGGH:/;8<>859.#?#4?,5/+JK/;=4-6<%+/4300.--.**%$%+)075-*#'(()(-2,(*,'$7A6@-785.8992/384:A?97<;;:$!!94;A"#@C@>>A;4/4/3::0)"2.2) %$"!&&&*#">94.0+26EJI&&(E&+%'AC$&E;#(&!;?0/7 <81&(-348/+,,(-'.<>?;<>82-3/4,*+)/,-A:?":1&)2559!#">.1 84862633/))*00,:$#!9& /6*(0"##6!$''$*')*.,+,-,/017#861+.$(&+**(*-1/57:;W_[J[TZXA?B9GI>ccXNBR7,AWL=9=;8CQH2$#EJK7(8-2M5NIcrXmTD4<8bK7H7*%LI@4,5:IGH,PO*,QKACMWGBAA>>3.,*)(OJL=5F?2IA3BA@N^NZNX9,'9]YdP/hb]\KOHMC4GK@CIJB2=IPCPX,@QSB\^1MJNHJSNKNIFEC.h;3:?5LWPIGACA7@JACLKGEH:@<:;:<=?@@CBACDABCGHMOHHGJVYYRKEDCDA>>AFNelYSUR)7=DDA>>AHJHFGIGHJRWHB?CCCEHHNNRRPRQRTWYZWVUU`hmmWI4N25H_`^YRNA2/553FNNQTQME9*>;I-CO`54CB538?SVXSWZ-BL]@1 #)^ek<:;?\A>?@BB;,/ 0$&D* #!/HXV?(/!+5744999<<:88p66*'/$!"%('&(*+<$/43\Xdg01QTZ/>,AK-5JD%+S%!?B/047;55F^"##*(    ! + /61$&!!%%&-((5+ !!  '!"]! 1' 6&#D6-5)3N0"$+0("' '%'%%(($.B@::5644<4*!"!-<;A>G2]9CG<;AMbon`i A +H TC77 ' XÛr]jzzE9544%!*,*++)-,0# (=59GC&USTPLUMTMKIONPMVQW77>:111,),.01235946CacONHHFFF{~@?*39BUsA,38:02313431312213430...0/.//10//10/.-/11-///121359:9:<=<<::;<;;<=<;89::<<>A?ABCCGFGFHGILMNOMKMMNPRSRRRSTUWXYZ^a`^\\bhkvrrqutuxxzDL_d_ZS^jgᓖ􂉎z˶þuumekcZR\ggY[VPYUnogmpnqlkh_nkddikojkimalid_cc\[_^]bZSUU(&IGHLQRVUOMOQIWVAN=?@==FD?NMHGCCHABA@>?C>5>CC??=:897:42,*.3<8-10169'$(%('&)'"&# **%&# "*10-+*++.0/87178630...20+,-//761.-,*..-+*&*)&%#%"#  #$!!'('&"&&)+'#$#$!9<%*,"%(! "  )"(#!!"%""%$)+(#" "(&*%$#&  +   )/-+%%&!  ##()##$!"  +      +      ! 3S>6=@1.3$"&?37/2.1A75(&+7,/+/*"%.* ,@62'0H"(,(0"1<2*5.31#'') *!%+#%#&'!")!7+'1;%!/<$$$&+!;5.' * )# /!+ *&  ''&'$$03(@0  7).$28,!)(*4363,.5>2.//,**#$$(!')!+5)1(1!%/,2. B7.,&*$("#$ #" %) +.),,#2864855:612/++(C$ !/#499771/,%+5029:557(-***+,-../.,+./.0.36:<646;HLNC:630//--02;VVA;:6")220-+,1310/4367@B4.+---034:;?><<EHKLQTTSUUSSRT\lBPZ_`VH><>BHKHB<9978:;>DMSYfyzqturf]UUY^eijx{xugVF=;?F\KRRSQOTcpqi[LDADDA=83/,)''RUTTTUUSSTSSROOONLIHKJNV]ceb\YTOIC>:8422013344676789;:97643210.---,+**)('(''&%$$%Nı̥޺ҡԴϱ¹ǶڪǦǦŽƻ鼝񀁊ۀȿ̲ϱ»က慆Զ݂偃튇犍ͮ³лᰭ옊ʌ£ź̲ٞ去ﳼijͦijثˤꯙͩ񯤅Јʧ؀Ϳɾʇŀ֝ՋǠڪސ߃ĩÿӹǒڮȷᨸЂ㈇ؿ޵J퍏⁌븇̴Հ58=C=766+%(('*,+.,-.*+*#)-.*((3#=) *21=5=UK)+FJFBEG@859?MTECT/-+;$2#-!',()).''$'&.;<86755:8:879A"/59C"%&%#EN)0!)-0351.+,4556c542.-*J/XA5)''&);_7cHAaYA764-?$DMN;7542225688:0EXXVTMHMGHL>1,/),COYYV6?`EOOECGQequTSQ:>>??>?>=>===>===>===>==>==<=>=<===>=<=<==>>=>=>==>=>==>>=> ?>?>>>=>>>=>?>?>>?>>?>??>?>???>??>?>?>?@??@@?@?>?@?>?>?>???>?>?>???>?>?=>=>=>?>>>==>===>>>=>= >=>===>>=>>==>===>=>=>=>===>=>>==>= <==>===>=>==<=>=<=<=<==<=<=<= <==<<<=<<=<=< =<===<<<=<=<;<;<;:;<<;:;:;;:;::;:::; :;;:::;;;:;:9:9::9:99::9989::9::9:9:9:9:9:9::9:9:99:9:9: +99:9998999:9:9:9:<:;:9::;:;:::;::;;::;;;:::;:;::;<:;<;<=;;<;<=;<<;<==<===<=<=>=>=>?>=>>>=>?>??>?>??>??>?@?>???>>???@?@??@??@?@ ?@@@A?AAA@A@A +BABAABAABABCBABBBABCBCCBBCCCDCDCDDCDCDEDEFE +FFEEFFEEFEF GFFFGGFGGHGGGHGHGHGHGHHGGIHHIHIIIJJIJKJKKKLKKL%KLLMMLMNMNMMNNONOOOPOPPPOPQPPQQQRRQSRSTVVUVXVWWXXXYDF[T[]lntvU=@@>8,)7KNKKJGHGF6YVOHNa3JOUYVWRNNJJUQQLPceh7ON=;;<89=?@?BBC?=??=?UKIKIHHGDB{x{{DDE:a64;85756;66??:;948CFH?>=>@@>=>:BED@@A?5-*+/100,HFGH'(132" 18LF+2;9;=973)&LBF=;+KMN$442215==AFCCFFCC$C$H$&%#%$%$Bb(hbZSOPF?B=:LRALJ6FCDCGMKUK?D8qk81;@;@=AI;>:Ef[SQDLE@IXGM;@>^6GEUK;IHSI]K:@A/2EXF!(YEP;5R@6/^RM4/M5J:0XU_cheRW%(:5=DFGC',RQPRMT[caPQJFA@=50+(7WN@86&FSb`8@UAB=J1D>5.9cEK:-'-cX=CHOJ8IG>?D9B4=FWHTA.-5=g5R//UGFDMLKNLFBEE)BC>06/MUHEFHD@?A=FONLHFFE@<>;;<==<=AACEFEFFHQYJEMLRPOKGFC>=@A=>CEI^\HDKPCSUQSYKBKKKIIKKJJRSIC?BBDFIGKLNPOPQSUTTUW[ZX\^RUJB3Q8 "=ehj3aRIEI,@>BFKOQNKF8M8=I-5G_63LLE14AHOTWXaC>UX (L`nO=?b==<>@@?B6B'17.54&*#=CNcovZi  +(p =;3"+6IC& (ȅʀӟadkZ9740(",,***()()$:9529G%6HIKIHIDHJIQKJHK\`c2?9,++,)+./0024652652;YPKJFEDDCB}|=147aw0/46;i0135776366555676533564327853324333554223455456678::;;86779;:8685798:9:;>=EEA:8B?@?GIECINJKIJLKLLLNOPR@TVXWZZ]\^[Z\afowrrstywzzyDEHOqQ|wwUüXйžz}trjcc]X`dfh][U[VWXK~nyfkdippdgmfjokiikrqllo;q792b^[_^Z]`_ZVMO&%EILNOPSSNOQNCGC?BCD@=>B=tHF?CCLIDDC@@?B95=EDNBEM@C?<8:==<;:684<5/248862678::4%&(''$"%$$(##+)%%%!&133,+**+..-/013665030.,((.0/2123011,,-/,*+,+&  !! !.-.-!!!+(%$&(% .%-''5?A&)-'$(4 " ##$% !""#!## #"$%,,*  "(*(+'+%$%# !$%+.+)(()!  ""( $&##!!      + + +  +  +  +   +     # !  /T@AID.*/#! !!EB+-,&9695(3(0+.+$"(,4#3 -&*()//3-.+#7<51/,,&!$)-",+'$&$&+*2.$'??!# % !&!" <0+*!$"#*$*&'-) $%)"("+$/$$ +&" -)).154+1+$$&%%#33465?EGH9>;61/*" .'"'-- ".(&!(%#3!$91#%(&%$"!"+"'#";87334;8572-*.,'!!!!498553.)(,,4;::6533/*-+++,+--/-.243438AG;5<;BAA=:72-,..*,017JE1,050CD?AE9.332214659?@60,,*-.1168:>;:>>?ABC@DFCII?C80$4 *KPP&G:3-0$$+158772'2 !*&4J$!00)$-5=AAH+'78+CR;.0H1//11325)%$" ;P%!4 !$'(*(+*)%$#/+#!14A$830&2;# 7(.""2$&)  }~}~}~}~}~}}~}~}~}~~}}|||}|}~}ˀ}~}~}|{|}|}|}|}}~~}~~~~~~~؂ԁ~}~}~}~~~}~}|}|}|{|}|}~}~}~}~}~}~}~}~}~ }}}~~}}}~~}~}~} ~}}~}}}~~}~}~}~}~}~}~}~~~~~~~}~}~~~~~~~~~~~~~}~~~~~}|||{{}~}|}|}~~}~}~}~~}}}~}~}}~~}~}~} ɢ„⽢ܳ􀆋ဏe幢ͅԃϹފֳǾԁð۵½ť|/ +        +        ! !!! &P߇䃌վĹɤļ􀄌񀑣ʷųꄁŁP $!   !! !""!"##""##""##$%%&('(*+*)))(''('())+,-./24789;99877655688779:=AEHLQTVYZZZXTUW_lCS^hf]PD?AFLMKE?<::;<@FPVXaszz|xod\Z]`gknĸxhUG>=BIOSTQNSbptpeSFDFIHC=750-+***V-YYYWZXXWXURQPPNMLOTY_fjhg`YRKEA?=97443226579:< ;;:86530/0/-,-.-,+*)(''&$$$#"H}ɽ꟏ႈ㹘̕ʾƯʿŽòŲȳٸ󉠾ɾ̯􁁆ŹŻ¸ϬŻķлǿ焁ھŹеʻŶϕʾśکⷣѶ۵ó˵Ͱߡ޾Κֶǐ񦟗ȾФɅ۷줾Ҋ끉Ϛœۑлȗ⒄ـǹ҉ѐܻӮ̵ɣ׬ۺĕǿżżĺڀĹ˫ξ³߾ɟфN􀂄牏ӽ킇ﳺԽ3;@<-49(++*((+(.,+,.($'.23-,'0'!1 1@7947^J0*@AIBHI<548COREDPY-)."(?**5!"*-)) FF;A>:46789::88!)C@"%&%&BD*)H0 '-/251/-/2438]55//-)*1MAC4/XXYRMJEH>6,(+K.AQYV[<?>=>>?>=>=>"=>>===>=>===<===<=>>>==<>>==>=<==>=>=>=>=>=>=>=>?>>>=>?>=>>??>>=>>???>??>???@?>?>?@??>?>>@?@@???@?>@@???@@?@?@@?@@??@??@@?@??@@@???@?@?@?@??>?@? >>?@???>>?> ??>>>??>?>?@>?>???>>=>>=>>=>==>=>>=>>>=>===>>==?>===> =>=>=>>===>>= >>==>>>=>=<=>=><==<=<=<=<=<=<==<<<=<=<<=<=<<==<<<=<=<<<=<=<<<=<;;<;<<==;;<<<;;<;;;<<=;<;<<;;;<<<::;:<;;<;;;<;::;: ;;;:::;::;;;:;:;:9:;;:999:&99::9:99:9:::99;::999::9::9:9::99989::9:99;999:99:::9:99:9::9::99:9:;:9::;:;::9:;:;:99:;:;;<:;:;:;;:::;:;:;;;<<<;;:;;;<<;<;<;;<;;<;<;<=<<<;<;<<=<===<<==<<==>><= +>>?>==>===>?>>?>>?>???@? @??@@@?@@???@AAA@AABABBABABCBBBCB!CCCDCCBBCCBCCCACCDCCDDCDDCDECDDEEDE DDEDEEFEDEFEFEEEFGGFGHGGHIHHHFGHIHHIHIGIHIHIIIJKJKKJJKLKMKLLMNNOOOMMOOOPPOOPQPQQQRSRSSTRTU +VWWVWVXXWVXMQW\Xbqpqk9?A=90,7LMFFGGKFE2aNHHT48b*JFPKFRJoJZKGIMMOajcdGRD=;<978;;=@?@@<88=?TVKKKJIGGGDzvw}@E@7LB[-47F;::?>><==@A><@?@@??@?@B@CDDBDCCEDDDFECHIJIHJLPPOPQLMMMNPOPPRPOOQNLPTMRYZMDCIMECFDB?HRLIKSPOLMLKLKMMNNPOOONOPRTVWX[_``abepynlnllmmnpD?x6FDG[~f|CDCDEFEGFEEGFGHGHGIGHHIIJI$JJIJJJIJKKLMMLNOPRQQQRQPPQPOOOPPPRSSTVUWXYZ\^`acbccdcdcefhghlnprty|_lt{{uh^^dkoqpkdaacglpu|Ȫrhgilqtvtospdcgihhc^XVTCSSSQ|zrmjgd`_^^][[\[\]^^_^]^]\ZYYUUTUTTSRQQQOONMLMNOQQQ|pgghofi]X[]Y]bee^ZX[XPSymoyx|spy{rv[RRhd^Wbgknlg6kknkmlsy??gq;ldgkhfhbZR/.,UW\\ZZ^a_g`UIFEFJIOUSQN?Br?FALPTURQQLIINHMWVKSLHIFBCABEDBGJBBILJD@P]2^OTchZ\UXBH>:965778613977CEC@>@>BFE>>?<=BGGIKLMF>:BDDEHJGB975138>@:>;3QJG0:>96)=C>G.-662/191:/&7849:960.+$A>-(,IIJ(7=A61;?"%-3/166541.'++%-*5<=5&%''(((+&!!+7<2:?./(: &()4993/8:<72756AHB?2/5: $3:>DCEDD<6>@;84+19;34,%77;50.)&'+20+/.-.)*47882=?BCC?=AB@= 7*'944%#/7&*%(''&$!'20""")'!%&#!%'**8)%-/0 !'$(())/224:4@!!B4($(,.54)*&*$")/)6 8++//06="<>''&%%#<.36*-? #(*'78+(,)0*$#.($ 31+315>87;chnsY>;E7<_ET@x?_Z]I9JYg]SSX8VXYZA6:=RSTNMKE66C@4?hPD>@[@qa`LHG>>RBDVR[I/?KLFLOUN,KEFLZRVB<7?HI@>BRTXTKPAEK)D0NE67<4V6FON:e8=c@KJ@G6)1?FL0J;>G@?,4:.KB.B7,BN:HM.`iZ40:mr6A7$CA?(+-RRJGZ1\EVTMGIKIB;.3>E<_:Lk66;:bE=M=K,HF5.,HScmH14-X`=BGSBEA?;?3;9?KSF3@n=3S=,,,A5MIGJNJED?=@BC3bLPY2J5GCGFEFA??BIKHKJVFD>;=<9998878<@CDEIQPHZ]LBDTWPIHDCB;;?A=@6/N9) +Vlnn8h\RGE=%BBCMMNLHC8K5AE*5GZD5ONFL1@BIRV\ZY"7TT+C<#,AeI<=w8>86=;@DCBG%!HL>5`+;s870]: #))% *:@;688:87]4M43,<"'(')5/ @BEN33Z8',GX.6\[N/430\YV9#78&$:=;! =+"!'( %/3*(/2 + +  +  ' # $^#"2&.),WG5)6O/5,2' 5-%"  "%(-)$ :>?:5723)!9 .8=:A+.F;FBQ*.+4,-02645354337863547:8889<=98777888<969::867:<69=97789879<7=DE>65=A:;=;;9@FD@BJFHGGILIHIJLOQPPOQUUWVXZ[\^[Y[afjvnputxyx}}HCJYxSO_xoľּ˛xwuujnb\^_]acff`^\_ZW\1t|a^^qngblpqpke4glpmnjzjr87Zb3\Y\][SG&##INPQQPQTT^VOEBA@B@CE?=:3nAD;ABFFDDD?<<>;BIG@G?DC?:878;:9<=768872+38917??5401'-*'%""$$&$!#&$$&''002,)+)+-.+,,--.1/1132-*).1325541-/-))+*(%)($943"&&$$%,)/ &#$'!"!!#!'+$378$** '+ $$#" %&  ! !#" "##!T$##,2*& $*)-**$&(%  !% #'**+)($&'#$#&$(!!""!!! $%%'&%!!)'$"     ##!  +  +    +         !T?HHJ5#!(!3%$G&667) ,5A:3/51..0" -/0.+*$!$!&9+$!"+%=46*('! -!%.,5*$)*%)-.-/)(,4--$!"%% "..1.&&" ",#*%4 3"&&"%+! "#!&,1.$7>'1421A#D3?>736973)#8&96##',(% %%+3'27 "+ " %)"#41"+$2569;720+),--8&114"4261--(+-28979732-*+*()(),/1249?=??CFLG1,.'!4 4QTV-TG=/0$%$(124651(0%*%4C."3|2,,$&.7;A?=#45' +@4,.Y-0+)/.3575*&2.)H(U,+%C  "))&))+(&<0"   !,!";+<#>8-##"=<< + }~}~}~~}~}~}~~}}~}}~~}}~}~~}}}|||}~}~}|}~}ʀ~}~}~~}}|{|}|}|}|||}}|}}~~}~~~~~~ׂс~}~}~~}}~}~}|}~}|}|}|{|}|}~}}~}~}~}~}~}~}~~}~}~}~}~}~}~}}~}~}~~ ~~~~~ ~~~ }}~}}}~~~}~}~~~~~ ~~~~~}~~}~~}~} +|||{{|}}}~}|}~~}~}~}~~~}}~}}}~~}~}}}~}~}~}|} ʹɹƼ쐎`г·ęƻ˵ɷǭ(  +      !!! !"!!!% ¢ͷߐµ臰ĢګT"  ' ! !!!""!"###$$#$#"##$%%&&&()**,,,+**))((()()***,--.012589:<:;<;9888777:::?CHJOSV[^^`_]\]]c8GVdikcWIBEKOROHA=<<=AFPUZ_p~~~tia]^dinrͺxeSD@@FNUXVSS_nvtk\NHGIKGB:3.,+,,./ \\_`\YXWUQTW_fmqnie`WPHC@>=<969:=??@@><;:864211/.//./-,+*))''$#A?98Fֶȴ̮Ҹ􆇀ٴݫϽڲŻȷþžͷ耀ڂϹöľȰǵـƹĸ¯̯׀ſܷ釁¿ѝź𺐔м޲ʖꕚ釁л…ȝֵŷźƾƫԺɼ؈˪Ū退󩫻ݹŧӝظڪڿ융Ϯ禣ݐĚ٩ߓ׼ɽ𶕜ꞖԀͺü¾݀Ŷʮƀ޵ӿ׀Ш˽ᯥKړχ劋򀁊ٯ>G99/3+F3444/11.0-,.0'),*45/)-QA3&:H5:27RR:(6>F=HH<747CLNEFLU-',$4*(,(-)**%:;CLB>>847:;;:<85 +/$$&'(+*++*D+B(20464/+.4326d64/.-)1ZG9,')%$4@8Am8H859EwVf1A;//'"HK?55.+,/54459HQ1;aVKZZRGIE84,'LG,KVZTc>;PHNFDHIQrwrc[NT?>>?>?>?>?>?>?>=>=>?>=>= >?>>===>==>=>=>=>?>?>>?>>??> ???>??>?>?>?>?@@???@?>?@?@?@?@?@?@?@ ?@@@?@?@@?@?@?@?@?@@?@?@?@?@??@@@??@???@?>???@???@@?@???@?>?>?>?@?>?@??>??> ?>>???>???>?>?>>?>>>==>>>=>>=>=>>=?>?>>=>==>>?> ==>?=>?>>=>=>>>=>=>>>=>==>=>>>=<===>>>===>>===>==<==><=<=<=<=<=<=<==< =<<<=<<<;<<;<=;< =<<=<<=<;;;<;<;;<;<;:;:;;::;:;::;;:;:;:9:::99:9:9:;:::;9:9:9:9:99:9:99::9;::9::9::9:9:9:9:9: ;:;;:;:;;::;:;: +;::;;:;;;<;<;<;<<<;<;<;<;<;<;<=<=<=<=<==>===<=>>==>=>=>=>===>?>?>?@?@@@?@@?@?A@ABA@@A@@BA +BAABAABA@ABAB +CCBCCBCBCBCBCDCCDDCEDEDEDEFFEEFGFGGGFFG HHGGHHHIIHGI!JHJJIIIJJIIJIJIIIJJJKKJJJKKKLLKKKLMMLMMLLMMLMMLNNONONNON"OPOOOPPQPQQQRQRQRRRSSTSTUTUUUVVUUUVKWXWWWYYXZ8KV^]^kqkwRlE?:4,/3;=889:8:<;<:::;<;;<=>??>=>?@?AABDCFECEHEFGEFIIIKOQPPTQPSSPPNNORTTRQONNSPPS\\NGHHHEEGFGEUTYPPMLOQPNKMKLLMOMOPQQPRRSUUVX[``_a_dtwqmmmklnovF~v7F_HfXCEDDFEEEFFFEFFFGHGGIHHIJKMLMNNOQRQRTTTSTSRQPQQRRSUTUUVVWWYY[[_bdfgfgigfffggilnppswz|Vboyzocbhmsvtmgdejnsv}˱rlknsx{zwu~|niikllga^YVUSSRxrnjifdca__]^_^_```_a_^\[[YXXWVVUVUUSTSRQPPNNMMORzcjyehipmcf`bfdV[bda^[X\`WT}}zvhxzrjk_Wryj\Vbjjljlnjjronu~duxstoqnaejied^WY0./[W\XSYb4[^[SHHGFLIOTSQRHCBCFMU2UVRRMLSSSOHILOFEEFGDCFDDKRF@HI?;>GUX^SHRa\TXG>6=97887852147<:993?IC=BCC:DKMEBEBADFDBGRJFBC?CDCAA>744/./.5;773'LGD-7886*?D&'1256586;6J?%11379851.*B:;.052+&-AA>37@# %0335762/.,''/@BA4%&&"" %07;;6467;@<>76<>BA!&&"69=BBA??<<=<96774477=8C'(%#&(*FGD<4676950,0303-00,+++,/8=A9:820."-98761,-/8@7:?49-/,*2,27625:23<:25323:111/+*48)!*.#*/,%'-'(3% /)!,*"# #%'-14&+3/."%'()*,135:6@B D5*'(-/2- ! '5=5+2679:!#%&$#$$<015*-=B$')'89+'*(/,0.&0:;9$-23/.((AUXfmZ1EB02D6XSNJE9?TdWH7AIOTE9IUgM;6HFGDKUn$;^?ABA5F:?ALRB=EHNPYSPQGHB3MU?W./US@^76c44:Q@<;*D;EI>]4?T^QH-47HEI>QHE7Q4>5KS\M<*.=NHRPPF34679$)&OLJ[0QQN##FGIRSUOA39A1;I8;5Y#"GX5R=>?M`G;/=GV96)017C:ANVPE;>9;A7:==<<88:9;<@FR[kpb`UPPaWPNJD?><8<><;>AIF==6=;>AGJINJHJMORSRORVW[RLFC<5R:( TknsmeXQKQ;0CBILMMF@:I4!!)BNXO*NPHT/:DGXY]Z.Q0KGC\bP'!'AFR7:7<879iBBC@;b:&7XB>^+ mr<71Z:%)*%?767;5Z9;;94C7O52I#"(('&$;;:7H0Y[N*5N.NYcZ-01010.[G.%)#4E=>$-#"!!! ).2!)( $,/*+,0 #'  "v$";-#$1).O+-/%.6Y;@"'#)0#  %.5!,C97DE<42/! 46!5=?;F./@:?@Jkqpfi˧)"==*NN 0]؁qkhsT63/,"*+&(())');><;:;<;;:868<89>EE;668:8N95DD?@?ACFEEFJHIHINLMNNQQSSTVVYZ[_\Y\chsxstvy~LMrVhxH`0ĹŻź;񸖝swtwqfhbdih]aefedbabgcd|}tnrh^uznecnqonhjkjkpposy^nkhg`b^SY[[ZXUMI$"&PMRPLOR,QWTMEFCAC>BEA?A?>?@>BE(EFBB?=@@CA=?@D<<<=<88988=D94<9,,/496:3-4@946+($)%%%$$%#""$%'%$'&-4.+---'-32--.-,./.-292-,/./12221/./)'&$%'$$!1/+#!!"'-&%%# #!$"5*!$"*#$$ ,,("*"$$!#+,+! + $$! ,&!"'$% "$&*0+*""$%(&K%)+,*(##&)'#!','(! &%)#"  !!""%''&$" $ (%&$# !%*$"!!# %  +    +    +   , "     !W6:AD5&$($$="!C9-)'%.304'!141.$#+*,*((++-*)2,*'%%.71( &)*,%'-:+!(%&%)1@+4!")%%"$(+!!$'-/1+'&"$(*+24)#!"$'#,2'! !%!!-%)#$".52+220< 870%'-6=<8,#$!-,!"!&2) %%#,"!$,(" ""$$-;4764/,,(,-/-#'/8 '-9875)/-)10313873130/-*+-+,))++-,06AJYc\WHABPGA@=61/,*-/,,..4/&'#+HMEO\=587454479:=@>?3/()&*-13497579;?B?<;@DI?611,&:" >SX_[RC:68!&&/35730+/,7?911-6 &,;>@;30++AD1$6&+*.[,)+R4464.G"<33FPY/*%>  %#A)++*%"/"*'79/45;D:!!"!<* +}|} ~~}}}~~~}}}~}~}~}~~}}|||}~}~}|}~}ˀ}~}}}|}|}|}}}|||}}~}}~~~~~~ۂʁ~}~}~}~}|}|}|}|}|}~}}~}~}~}~}~}~}~}~}~}~}~}~}|}~~~~~~~~~~}~}~}}}~~}~~~ +~~~}}~}~~}|||{z|}|}~}~}~} ~~}}|}}}~~~}}~}}}~~~}~}}}~~}~}~}~} Ⱦʿآ刐􅓛f侩ĉۖپζ肉ǻ'    +  +    +    !!! !!! ! *PϰǸ퇒ǸꆕѓM    !!! "! """#$$$%$%$$#$$$&%$&%%')+,,-,,/..,-,++*))*+++,--...02479;<>>?>>=:99;::<>ADGLPV[``cdecb003:HZgqur^OHKQWWRJB???AFMV[^k<}qeabgmuyҼycODADJRXZWX]ny|rdRLKLLLF>70..-.0132cd.,WXTQTY\biswyvng^VNGDC?==<979:;;<>?BDAA@>;965421101/00/.-,+,+*))((%GqÀŲ̵Ѐͨ􂈃ȿ炂Ϭęʼǫò񅩿Ⱦɹ¼Ͽ 烯ЮȁϿɻóѿ¿ÿ˿ǀͿ˴耄ۻꀅ₅řþίȭ˶²ա؇ЪØסȢ͜ƀƨմö΅ޙ伔պ˨ʏိӎτиɀľúʾĹԭݣπİփվ딥ڿцܽ뀇ꃅ넎֮ +먠C=:6/.29;::<<;7852753+(/./63/=S<*" 4<>)1HZL (MNEFIT.D/,$)"$)+'',*94?#':A?9;;99<:99 *3*&(((**)'&3+=)30573/.16425{52-,,*1Q@3*&%%'4;:?f4IG:AIyU^H?112&#,C?7,&&1647566:=I[2_RKU]SFOB61.+:K8X[UQ7=gKDLFAEIUrunpdXH?>?@@???>???>>???>???>>???>???>??>>=>?>>?>?>>?>?>=>>>=>==>=>>>=>?>?>?>??@??>?>>>??@@?>??>>?@?@?@?@??@?@?@???@???@@@?@?@@??@@?@A@?@A@A@?AA@A@ ??@@@?@@A@@A@???@? @@@?>???@@@?@?>???>?=?>@?@?>>?>>??>>???>???>?>??>?>=??>???> =>>?>>>???>?>?>?>=>=> =>>>?>==>>=>=>=>?>>>=>===>>>=>=>=>=>>>=>>=>= >===<=<=<= <<<=>===>=<>=<=<==<<<=<==<;<;<<;<=<<;;<;<;<;<;<<;<; ::;;::;:;;:;:;:::;;9:9:9:99::9::;;;::99:;:9:::999::9:::99:;;::9:::9::9:::99:;:9:;:;:9:;:;:;:::;:::<<;<<;:;<;;<;<;<<<;;<<;<;<;<=<= <<<=<<=<;<==<=<=<=<=>=>=>>>==<==>>=>>>=>=>>?>=>>?>>?>>?>???>??>?@?@?@?@@@A@A@@@A@AA@ABA@ABAAABAB +CBABBCCBABCBCBCCDCCDCDDCDECCDEEEDEEEDDDEDEFEFEFEFGEFGGFFGHIHIIIHHHIIJHIJIJIIJ +IIKJKJKJIJKJKKKLNMMNMNNMMNMNNONOPOPQPPPRQPRRRQQRRRSTSRTUUTTUVWWYXXVXXWXY?T[f[apmos@?=63.)AIDDEEFDBL?QVOKT3_9,(KPP[RJDND>CPTQXlhbiFMC<9877986889@>@>@?DVUKLHIGFFCB>srvyx?FGixEC<;:17:<<;98999;>?=;;;::;;=@@>=<=?>?>=?@?ABACDDEEEFFGGGMMLOPNPPOQPRSSURTVVPQPQQPNW[NIGHHGHJJIIZ\VVRRWWXTPMLMMMONRTVTRSSRUWXX[]a`a^cqtrnnmfjruE{;6чX[XPmDEFEEFEFGHGHIIHIJIJKJJJKKJKLMMNNPQRSUVUTUVUTTSSTTSTVUVVVXXYXZ\^`cfggijljjijjjlmpssuvz~OPQVetuiels{zwohjpsty|ϵroCoux}|y~wmmoonke`\YWVWWVXVUVTRON}vrplihedcbabbcdccb`_^[YXXXYWXWWWUTUTQQPOONMOSпsqijqqfaib_fYS]dd^^_ZabWMvoe[xki}xcbputZZdmmmkmmllrnmqmhjumnqgibffddf]]14.b\XWNM]34Y]ZQDA@:NRRPORL>CIHKPW,QVTQOPSQOIFJJFI^MDGHUYGEE@?@=AJ?=>@PXNIUXNIE@d4;::982521685798?:ABCGGCA=JPOMIHGHGHDBIZKFA95=?>:K76414646<;:::30-++08<;;)D(&(&.-61212,@>$04689623,&:98-+6@) :%FB9F%'%*124561,&$%+17:?@+#% ,6615<956873,*-//849D?>?B<=>?6574.BHA<43314-*0/0../-*'+-0+,2525677548:>E:24:>BB;:$#$(('B8435?91200--3//)*)%''&/1:7<42622+'5542/,)*%#=8F>14*187787341136:63.+'-336;;!7('/,%"!'6*/!%.'.+'.+#"#$ (.*,377,,/13"9&(&'''+,.288>@A!2)%',,/('!!)/ 0%),/:9@"&$#%-5+*:"$'&&9<+',(0/8;5 "" ;.-$2/')'(RYVfqPFD:2 IaVr;;AkUNG7?M>CahE=g_LDIB>KLRLGHR>:3aCRYSSB)=FUVPK@CIZI:@MoP?18BEBGRB.B]O.E?JMB,8/@+JIS0^B?PND@J>OaJ8B>JIbC9BNX.J1//43<8GLMP[NVU#507/6 D'*U:2DC$5R\;Y]<<$&39^GFC)0&"CEJL,-=IB+BP^N337;;>AJMNO'O2ANW7OQNIIEE92ABB??KOECDCBBD@9;;<=;::<;>FN{yojfTPVQISRH>IC::=;7;<;e`5J;$9(4357X6=<<8aFA,98cM-%,')%20:;E]620#A,]T\`22..1\N]VL:5>9BCE !%..+($##!$! - #6-  (% !,,&*)2  +   !!!5(&**,J"3109;Z<;,#($ !''1>&G<6?G@25,/:*@?=9&/S>:B=69?Mnnnss}$( =G >m$B_=,:¿ʗsumy?50*$!)*&&'(((*5*79317#>' :A?IF@@G=:?FFGQb\XX66-*'(')))',*.423157Fb^NIDEDCCAA>vs{|{=;9cwB:201'&%%&((())*+-,+),.,+,,.21g224574566888;=<<:9?>=???A@;<>>=<=DD=::;:9:<<95CA?A?@FCGFEEEHGFIIJMPSRSSSUXZX[]^]^afsw:}{MMPMm`^Oږľ݀ɸ¿ܸ́zxuyujekgfmc]chjdgjhmoiϯĨUzozojxijuxvchorolikkklojhkg`bidb`WWSVWXZZSN&&$SPLLFGQ+-NSTLDC?9GGFC@BA8>DCCBG$@DC@>@@?B?;==:9B@;=<:DC77:32305;/.-,47-+5711/-H&+))(%#$!"&)%&%%-*/0.1..-.464310/0/2?3-+))/110/00,-+))*('%$!#%"#%#%! +("#&"!$)&1-&0"# "#'(* + " #! "%%%! '%&)0)"%#&1*)-#!&(+'"#&-***+#$(*%$#+0,)##&$(!! "# " !!"' !"%%"%"&! !$ *&     +  +  +    + +    ! +X75AE/)&!$,0@#$)?/,&","%<@$%:6*"&$!)(.+'&/!#$G#-/-/#%*00-+#%'/&()=+#$%"&-%..5"15%'+&!'-)!%)"/#&'%%0//18(-# !"""$*$$ *1!"#!.")5,,123=9<9"4)-$- 2$()'/)"&.' ")&&-//,,03333).0!:=>:7./*#/././:;4363101-(*,,,---.-.6@mpha]IDJD=DA7/84-./.*++((-038E<7J>:74024699:=>==:501/12451864466:@@>??DC;6470,@' 8GTXVXOA957!%.6443.)(26>>!''3"1=DH"B-%>COC=9()*,T.P+.0[2-&#*2V/ AS.1LI(+!6'+,2/)@' '(F-'>%#$@8>@""!<1<51 +}~}}}~~~}~}}}~~~}~}~}~~}}||}~}|}~}ˀ~}~}|}|}}}||}}~}~~~߂~}}}~}~}~}~}~}|}|}|}|}|}}~}~}}}~} ~}~}}}~~~}~}~}~}~}~}~}~}~ ~~~~~~  +~~}}}~}~}~}~~}~~~~~ }}~~~}}}~}~}~~~}|||{zz|}|}~}|}~}~}~~~}~~~}}}~~}}||}}~~}}~}}~}~~}~ }}}~~~}}}~}~}~} ٞ繹󈖌dұ׆͘оչ߼"         !! !"!""! !#;¤ި֯ɾ󉕙ƿɀ¹ÿÿÿŽĻŵ󑵓ˢW#  !  !!"!""#$%$$$%%%&%$%%&(()*,-./0/.-,++,-.-,--.1457;?@AABA@?=>===@ABEHLQV\_degj55434;J]o|~ueUPRY\[SLGDBBGMV_ajvjbdjszǥ|fPFDHPW\]]`p~{o\OMPQNKC;51/023465421.,+VVV]how|~zqi_UNGCAA><>>=<:9643322211121/..,+++*)''O^{Ӻ׽ȸǻʥӧ򡋜֭݌®ͼ˜ĥ鎀ش˽¾µϿ󃀃׶ʿ̯ͳʻˀǼհȃެ򃅊ɾ󂊎ݕ싂ᥤꬖʀŹֵɌůͷʅ¾Ė脏ƤƟʡüڶě߂晢č釜ĉ󿷳鑩ƱЛɦżÿŷ̰;Դϱڀˊ󁑕ᒔۘ E>D/#8B?B==BD@>;:9;83&1.$2:FB&L.""8F;7-:OT;/=@BKD7885=PLGHKQ3'83#;&))*'$9/>"!)&<>>?@?>>???>?>?>>>?>?>>>?>>?>>>=>?>?>?>?>?>>>?>??>?>???>?@?@@@???@?@?@A@?@@A@@@?@?@@@A@A@@@A@A@A @@@A@AA@A@@A@ +AA@AAA@AAA@A@A?@@?@?@@?@??@@?@?@? @??@@?@@??@@? +>???>>???>?>>>??>?>?>>??>?>?>? >>>?>>?>?>?>>?>>?>>>?>>??>=>?>>?>>?> ?=>>>=>>?>?> ==?>>>=>?>?>>>=>=>=>= +>===>>>==>=>=<==<=<=<<=<= <<<=<<=<<<;;<===<==<<;<<;<<;<;<<;<<<;;<;;;<;<;<;;:;<;;;::;:;::;;::;:;;::;:;;;:::;:;:;:9:9::9:::;:;:;99:;:;;::;:::;:;;;<;::;:;<;<;;<;<<:;:;;;<;<;<;<<;<<;;<;==< ===<<=<<<==>=>==<= <=>==>>=>>>= >===>>=>=>>>?>?>?>?>?>@?@?@?@?@A@A @AA@AA@AAA@BABABAAABBCAABABCBBBCBBCCBCDDCDCDCEEEDEDEDEEEFEEFEFFEGFGFGGGFGFGHGHHGH IIHHIHHIIIHHIJJIIJKIKLKLJKLLLKLLMMMKMLM ONNOONPOONOPQQRQRRSQQRSSRSTSTUTTUUUVUUWVVVWWWXXWXXXYY[XHUf]YlsmyR:5104*>HDDDBC@FJ?NcXVQ.0M0.(O2XQ[KBFGDORV]epdcFLE>99:89767:8;?=>=<<;<9=<<=<==>AA=?FD>>@?>?@@BADEFFGJLNMKJLKIJJNPTURVTQONNPRRQU\PHGHGILKHFJYWQSSTXXVSRQOOQRRSWXWW)WUUTSVY[[^_`bcetsqnmnllsyH|D[}fl^fTBEFGHHGHHHIIIJJKJJKLKKKLMLMMMNPPQRSTTVVVXWWWVUUUTUVUVXYXZ\\^``behjknoponmmonpsuvvx|RSSSTZgv|mmszysorux{~ɾٺ}squ{~tstusoib^]ZY(ZZYWWVVTSQOL}xuqnkihgffeefgedb_^]\ZZZXZZYXWXVVUTSQQQOOOQqh`puokmplieba]]SS]bd_`_`c\wqmiii|xyomaY]nmefpqkqqonoptnongjknslicgceedfc_\[.]YXY[]Z\Y\Z\XME@DCILPONLA@JMLNVXVUTSPNKJJIGHKFEnrG?IRQICBBEAFB;<>FHHROTNOPFC4gS5659871651347876A@GCCIEFUDSURSLKNOOOIDHKDFA82334415=<=>;=DD>720.*)%.8>:6*).-,+,.3))+,*#"$050475/-(:><%'5=52F)"A9=%))/633452//.,(&&+7?FC5" 219;50023:787-('*-5;;823,*-.1-(+6:=:85-.0-/275==9@>@<=:>;:0134-4?8743-,1+(/-,,.21/-,**'*-0-0//42569AE?04<@CCBD%&(%??;,,5:<934/.*,01/(('&%!$(+64?4"#,1$#93430+'% &0$'*93'0458575332..+4861(%+:9658=$$#$#$517-'5?!&$$8<*',(02=?; %%&"8..69800?.)adbefOCDK9F7#`RlD83`TY>:=JEGPhR8LgUK;5?FKPNK7CE;L:h\j[^S2@QWUX]LLHNH=8FZQH24>ADGKETN\R:5H9f^RIMLC;FUJ!l7T]@E?HIIF311X177;4J1?JYWRQQ]MXA1WmA=0^2N[DM*(+.[M77>@ABFA=BEHX\.K5,/+..48!%=-9B!H>V7@?" ##&)+-4,/+,;iV7*-CGGDCDB>>?@?;8:;<=<><;>@F]ojvfUDHGGSZQ`TG87::79;:9CHFFP>HFFICAAEILLKMNOOTLFFIGHHHKJIGJMNLKLMOSRPOJHF;6WF0  .Spmd`_[RLG4!1?PPNPG?D-%1?OPZRJ,29H@*/7?S_bheb<9XV^[\Y#0"(X588j8<=Ac:C*N?>a- .jk:9f\:10/T=&$2&JO<0:TDD7:7:\F&$##!>8@Oad1Q!> 9R[^452-/0B/JMO<2;ADHG"+)235/.24/-*))*&! * -5! ")$!1,),*1     " !p!9.%&3)R:!&2?H^97% "*")9HE8=AC536",%6?94;+)E:;A><8>Nnpltn6?nW + &'0  ~CƖvmjV5,'##&)&%&%&&,2%2@:821 8#?>GA<@A=DDHNW]QJ23,(&')'(%$&))//2435D`WIDCCA>A@??wrt{u7?iq?72//(%%&(%(&&)())()(*+*))'++,-.0/1121497>57987679;==;>>@BCDDDABA@ABCEGGFFECAACDDBCGLD@@@?A??=;=FCAA?ADEDEHJMORS'RVYZX^^`bdfvxwyx}LSgm{mkabjɿ½フwo}{uwvpkhhjhjcagkmjnpsvqͷ|yysxysshaetskmtrkmnljllpghgbeccda^VXUTTUXVRPO&LMMMPRQOLQOSSJFADAFEDCBA9:DGDBEECCCB@>;=>=<=>;8TX<;?EB:5554253.0/367;64131./&NA*)),*(#(&$%#$%$$-+0/.3-,:/;;8;5445561/35..-*)+,--(*0.0-**,.)!#%"  "!*,%*'$2,%*!$!%(-*   +"&"  %"#& #'()&'#"%%&$ !'()'$#  ""+*,(("%&'  )%%"#!!&# #&#!$''&$''#&!        +      +    +     ! 6S;>>?,'&+!) 2(9'! 8/2!*&'.>.+9-'!$',+)#% 0#82604/'/..15))&(%!)2,)""$%)'0/6.# +93,()($ &+)A&- -)(3"&(,"!%('%%$#$+$(*5 *)/#%:/ "&-+)-04BB -  #'  + + /")"0&*&*)* $&"&)',.41.,1*<6;<620%-0.,(-563343/...,+)*+/1020/02;Rc_nx\J:<:7CKDPE9,+-,)(*))2534<,64580-.146768:;;>81011322554126779>??A@=9577.*D.   +     ! !   !" !!#""!!!$ڼǤߟö÷ǾƿýՍM! +  ! ! !""#$$$%%$%&%%%&'(*+,,/01222010/...//.-+,,./1227;?@BBCECBA@?@AABBDEKOW\`f58:88756>Nbu}m]XX_a^WOKFDHNW`ei~~ncipzurήeRIJOV]abapyiWRSSRLH@:544678:9/8862/.-X[`fp{|rh^UNIEB@???ACCCEHIHGEEDC?<8756521100///.-++*)(%OR»ըҼķ»ɀ®´ŹɰƶדꍤƿôªëҺԙ󄣻¾̦ºҽŮǽɿӴůͬǼʻ灊Ͽ퀁͸ࠑńݵֹ¶󁅈Ħǯςھû̬ܻͶο܏ۨꙣ׸שϼʻޚ֧͞ǥʰÏΧ󠤆з󄞝υǠǤþл̲ȸͻﳂ˘ìՒҠ˻ρYó䄁󀎇H??=H4;DF?AGGBAA><<8.$$,4@&=DHC#-PAF;*EbI>8F@OE9756?2>87:7=2.02)),,)"FEF3,>+0-94-1275453c0.+(-3S?2)&%$$0=f:Z*+0,;KUtWI8+.-'"$$$ '.13/(%%588>EU``TUYLFMG61.3+-?_VMJb?5QBKNDKFFWxooocYKA@?@@@? @?@@@>???@?@@?>???>>???@??>>?>?=?>>? +>??@???@?@?@?>???@@@?@@?>???@?@?@A@@?@?@?@?@A@@AA@@A@@@AAA@@A@@@AAA@ BBAAA@AAA@@A@AB@BA@@A@AA@AA@A@AAA@A@AAABA@A@@A @@@AA@A@?@A@@AA@A@AA@?@A@@??@@@??@??@@???>?@?@???@?@?@@?@??@??>>??>?>?>???>?>?>?>???>>?>???>>?>?>?>?>=>?>>>==>>>=>>==?>?>=>=>=>>=>=>=>===><<=>=<= <;=<=<=>==<<=<===<==<<<=<=<=<<;<;;<=<;<<;<<<;<;;:;<;;<;<;:;:;:;:::;;;:::;;::;::;;;9: ;:;:::9:;:;;;:;:;;;::;:;:;:;;;:;<;::;:;;:;::;;:;;;::;<;< ;;;<;<<<;<=;<;<;<<;;<;;=<==<<<==<<;<<=<===<=<=<=>=>=>>=>=>=>>?>>??>??@?>?>>?@?>@?@?@?@AA@@@AA@AAB@@AAA@@ABBBABABBBACBABCBC DCCCEDDDCDCCECCDEEEDDDFEEDEFEEEFEEFFEFFFGFEF GGFGGGHGGGFGHHIHHGGHIHHHJIIIJ IIIJIIJJJKKJIJKLKLKLKKLJKKLLMMLMMLMLMNMNNMONOPOOOPOOQOPPPQRRSRSRS TTTUUSUVVVWUVWXWXYZGKQchKarqrq34//4,5JCAB?=>>AD@=?BA@A?AAADEEGHJMKIJKKLMHKIHLLLNKLLIMNOPRZRHGIIHIKHGIWUNOSXXVTRTSQQRTSWWVWYWYYXXUVX___`cdgxupooplloxGFRR +uEFFEFFEF +GFGGGHGHHHIJJJKKKJKKJKLLLM NMNNPPPQRSUUWYXYXVVWVXYYZZ]]_^`cbehknrtttrssqrttvyx{~QTWWXXWW\i|ttyzwx|}˽}zƸuv|~x{zzsnf?_\\\[ZZ\\[\ZYYWUSRO|{xromkkiijkkljijigfd``__\[[Z[ZYXXUUUTSRRQPQRNiljhmmjhiiggic``]_UWegiddii`Slhcgkijy~tseZ^g\mcelinrpqnlqujkgcbnlobb`chdbdda\NM\_^\YY[\][Z[YYJABHDAECA<9>C;47'*)(&#)8:65/+)$&-//2,+++*&$$3737>91+! HSO3.:3+2@#!B@"+-+.2/.3652-++*))26:@:, "'7!4::6//7<927+CE%$)18:,-31.,,,*/2:@;<;>722+264/3737487;:579025522B97540030.0,-..1...)'&$',/+,*,61;9:@B>36>=B@=?A=1,-.+005>? 8>72./242--0,)$$&)45791491$"51+05))('.4/2;&1(/337130-2-,.'*/22*',934154/#%+#$!,+4="'.'(% 4!,)(;&1/..)3=() "+/059,4 '#'+0*)/359?45<88)  %%)1,,>>") ! 8! !8%(-8*-:?"#!3.4.&4= &$%99&"$!*.>"##%#$#@=,3;90.<6-vnh^mX@XE:;7-:_>gfe[XSRQSNNKSPJZIdB848DLMZC@PND8PEIXf^XVMPVQTSNSIIAK63XV>S8?IBDEGE8a9H?AN1^kTMG>9@Zn/?=7[IDJFFJFD4XX15688:G=8OI+#^VQ.XHGCUIOXA5BVZXILZYX6-7<;?BDCEGKS\][TA50-*,*(+5;+,5B>@4'8@AGV\T?$-($08DXZ_^dXFFQXUZaI":W^9rl:>V;99?Ab@0->,>sHdchheU662367U))(<6m;<4V>K8k6>7ZYRE;"$&,ei425/#8\`\255\\b2R-41721?KOI)")#1%*13.05510.++*% &" & #$:.&%,%!.++**0#     ! !!"!5( )D)C %$0CGX=*  "#&)6DI=:<6272!!/D:22@.&<4>C:>:=Nqjholy(DV79HZ#D ˀӣ|zVr}1-%""(#"$$##."),<<8.1%!) #D9>DF<9>FILOCA+36,'%)&(%$%'*,/1226SfQFCCA><==;<;pltzwog;8!j9420/+'&##%+*''((()++(*+*($)*,*)+1,//341266424578779;=@@CACAA@CC@DA?BCCC?DEBEDHJKPKEXACABBIGBBCHGGDDDFFHIIHLMLOSRSTSTSUW[]]aadfvvvw~IT~F|zO蚙U³DŽÀz{yuz}xwvtrolggnmnhjtswuvy~wj}zsqvsr|sof^dogvnmrjmllkihlndfc^\a]aUURVYTQUUTOFEOPPNMNPRRPPQRVICCID:EEDD@EEGFECFBBBC@@=::?==>>;;L97@<84458=E8A50/2@80/.42337+QGO+-,.,,')#!(%'&##*.2/232451648166=67;620/25,&'&(,---20.)&),'!"!    "0AC*$/)!$..*#"! ##%!  &&%" $&$,."&)!%%$"!!$&(,'&%&! %#%$&% #'!!!+%%#"#%)%#!! "$"##(&$##$ ! !%  +         +   " +" + !  !ISBB9D1$4& 1"9><42,..1.-).,(.*6"#')1$ .+%!/*&,32//+,.+-.).'' +01#.!)#$%')!5 -'$)6;.'& !/= %"-##+- *&#%&- '"!""- "*!#(#'-,+3=;: %$'+-+-/3;CCA9& + +  + + + + +//&0#*%0 + (03/-/-)*#!,!@,0.$/5//-,0,-113--*..+))+-102/0/,,*7CKmgXE=826ME^aTJ0.,(&*++-12,)$)+040...158845978742000/3493-26479=<>FB=765/5*@. "MMORNGC<80.6580(#"&'*7<9"  ';@FGI=/l3*(%$((1 +"M+-$4!0&L)0(;:1%?D## ""$#;=C#.'%}|}~}|}~}~~}}}~}~}~}~}~}~̀}~}|}|}}|}}~}~~~󁴂}~}}|}|}}||}~}|}~}~}~}~}}}~}~~}~}}~~}~}~}~}}~~}~}~}~}~}~~~~~}~~~}~ }||~~~}}~~~}~~~~}~}|{z{}|}|}~}}~ }~~}}~~}}||}~} ~}~~~}}}~}~~~}~}}~~}}|}~~~}}}~} ꥭӿ󿫴޴ư򂉑񃘔݀eճѣ꾶¼ةӽ½ſ̾x    &B +         !  !!! !"#!"!!!(.׫Ъ򀁀кÿǾõȿوI&   !  !"!#""#$$%$$$%%&'&&&''&''))),-/01244322111/./.--./00137:=ABDEEFGFDBABBCCDFLPUY169<=>=;9<=;9952/..ajt@CFEDynd[VOLIECBCDFGIKKKLLKGDCA?;98876542110/..--.*)((&Cxֲս̀۽ƿШӖـƳ̺Ŵٽƽª봓񐘏ٶƿŮހһȾƿǺĵ܀˼숛ңԷŷ‌󄞵݃ێ©ēƒҕĽʨׇޙñͼ˜裀̲ԎֿǕݢװթ륱ǹѷƝ偉˵ӐݠՅ򤫢ՋԵĹٻ«ǻȴӕɣ݋󶗉ط֥Y񛚪۲ŴH&,:.).4;AC?=?=9;8+65&248"&!"BG3 /KCLK*>3SKAHFPC8579AMKFNNU6220E(,.!$20-:"&(+.C#>:967;>872-,1/%+-*&KGA,.+/082//273653^1..)-`J9+'$$#'4NjT4I/*2DO[;Q:.*,$" "&& (,00+($!-7:DMOPVWZLDGM8(127,1IYQLS88[J=FKHMDH\rnim_Kd?@?@?@??@ ???@@?@@@?>>???@?@?>? @??@???@@@?@?@?@??@?@A@??@@@A@A@A@AA@A@@A@AABAAA@AA@A@A@A@A @ABAAABAAABABA@A BA@@AAABABBABABAA@AAB@AA@A@@@AAA@@AA@A@A@ A@??@@@?@?@?@??@?@?@@?@??@@@?@?@?@@?@?@? @??@???@??>?@?>?@?@?>?>>>?>?>?>? +>?>??>?>?>?>>??>?>?>=>?>?> =>>?>>>=>===>=>=<==><=<;:<@@=<=<<==<<<=<===<==<=<<<=<=<=<=<;<;;<;<;<;<;<;<;:;<;:;:;;:;:#;;;:::;;::;:;:;;::;;::;;;:;::;:;::;:;:9;::;:;;<;<:;;:;;;<;;<;;<<;<<;<;<;<;<;<=<=<;<= +<<=<=<<=<<=>>==>=>=>=>=>=>?>>???>>??>??@?>=>??@?@? @@@?@@?@@@?@?@A@?@??@A@@@A@@@A@@@AAA@ABBAABBABBBAABBABCBBCBBCBDCCCDDCDDCDDDCCDEEEDE FEEFFFEFEEFFEFGGFFHGHGHGFHGHIHIJJJIJIJJIJJKKJJKKJKLKJKLKKLKLMNOMOOMNOOONOOOPOPQRQQQRRSRSSTSSTSTUUTUUVUVUVVVWWWXXWWXYXXYXYYY[7JbeWZjqnuM5003/.C><9;;99;=@?>AD@]aNJIHIGFCCCD@rmny<:9;C?i16:<;87;F>7789 :=>??@@>>=> ?>@??>@@BCBDHHKLMLI]JLJHHKKLKIMMLIKKLJJOYQECFIKIJIFKVRNORSTQSQTTRSQTWWWVYYX[ZZYWXX\`_`cghxvrpoomou|F`hpPzMFG +HGGHHHIIIHIJIIJJKJKLLMNOONOPOPOQQRRTVXXYY[[\ZZ[ZYXYZZ[\^`__`cdeglorwwvwxxwwxyz|}OSVZ\\\[[[`m}z;~¼{}}xsjb_]]]^/`^^^\\XUSQOUWZYX|zytsqnnpnooppolmjgfdb`^]\[[[\[YYWVUUTSTRRTWPpqmiirligggeifhdc_bb_dmkhjljb`lhfcijopvtwp`b\ickfhknhmimkiuujgdhvsjoa`bgfaa2aae_Z^]ZYV[VXYWY\YXLJKA>?UXWTOKGNMMQTUTWTQPMNIJSIEIHDIJHGC>AEIHFVC88>A=;7,041.786;;B>?7568236673C::11.132-+'&((++(,*+($%,00112:7=A=>??65;<;;@A>6299A;639;<6994./0130-,.0,&((1334897+'&-+!(1+'*(4:#D;",0226.//2-+.*&"*,.)(153351$#(+/63442** ),0,,*#$ 6# 432/6313622>!!=%"'%+//+.7+(2@6=8448<;:49:40$!$54/*10.%"6! ","#',3:A%$"#"=2.4/$4>#(#$9?,&$#**6!&)&$#&%":<9918D?0Fgnp:>Mg/D1NM8@dklGJJL:78X8NUA,4?1YIKP^IJ)+L73+)+,,../0+'KYPF27B]`.NIX\UI5-5:?CDDBLOPUYZ\UMI@<=226;?>698+,1"! "$"!#$%',,@c*-&4;DQPDN0;=DCPOLUND..-+,-)%!! "" !FIKLILMIHIKKP?4T4',M?18C@4/1:>@CBB??>@<:8;:>?;<:CE;<73588<>=@<=@CDFDEHHKJHIJIGFGFJICDGFGJMPPPOKF>*@XX5<.&/)(Va][^ZXTMN?*;?PWPF515!>E<>?RXZ9"! %+5JZ[[b[E9bbeojV3  -^2RZ[dk77:?;98m@8]+2C]d. /`a_ZVb;db555./51.8W9;91[6Iop?>512`GJ!%$,k_O'&c^\d36bWd55`Q@0%BFE&$"*.0/+-)$%#    '#!+#3/&&".%$.**-,3 $ +    !! ""!q:/%$5J?'4&%$5;B)6   !%+0.4AB?5/15%$6A516&)D5.9ABF:<:@??!%&54-'''&('$#%),,+046^eLDAA?>;<;khls8546<6^,/.-+'#"+(&(&'(())+**,++)'*++)**+,-+-/.///.//1224575689<>>==<=>AA@AC?BCACDCBDECDGKSLECEGIFHEEHNLJIIKMJJHKKLKJLNOPPS*TSUTTUTVUY[]^`ddrstxPgjLg|Jn"ķʿûՂ~yx{wttwtunnjlnsuty}}uuȺzxuqwtuswvxuhheqjrnlmkfjegccnmbb_aki^`TSUZWRQ)QTXTRTQONMPNPOOQTTWKIJ@<:KKIHEC@ECCDCA@DCAA=@>>EA<;H70126457374/03&IH+,,-,*)&)&(&##%"!')-03149310116%.,""5:="8110451.+'245$*(%-,%*,%(!A)%#,,-+4/-+%'!%"+7- ! ''!#%$+!5%#!$*#57,&"%))()%""##%""2&''!")!)e'#*%$$14/.<@<3$!&*,//.+257?=??;4,.HH,.AIIKMJFA;9(!%3;81#!$ 09=  + *;BDJC1)LLOWUB_7>AHO**,0.-,T1(;6<!DJIC?K,HG''' 5(+)#:/LR0/'$%B-( GF1@B@E#&A;E&'@0%  }~}~}~}~}~}~}~}|}~}~}}~}}~}|}|}|}}~~󁴂~}~}|}|}|}|}~}~}~}~}~~}~~}~}~}~}~}~}~~~ ~~~~}~}{|~~~}}~~}~~~} |}}}|||{{{|}|}|}~}~~}|}~}}~}~}~}~}|}~~}}}~~} ђـ׷氯҂ͭ݀싘熏^ƨצ탐ǷΩӽ˼ͽw    HphlS      +  +   ! !"!"%ϿѼ٬ĿĶҵÿƾǺƿ𵃳ʮH "   ! !!" !! !"!!!"##"#""$$#$%$#$%%&&'&&&(((''()(),/01454334673310/020/012468<=@DFILMLJHHEFFEFIKOU.4:?ADDB@?@CUnjcfklke\TTV^dnv}ʵ}qr}goeTTZdklntq`ab^YTKC>;:;>?@ABBA?=;752137>CHKKIE?si`XQPMKHGGHJMNOPNMKKIHCA@>=;:88987643221000..--,)'Pxټɿ˱̫ĩƪƼ񋖀þŵνƵñܰ֍Ŀ¹˚ѾĮй¸Ωǀ˼п¾ͳԻĶ؄ɶ궭Ըžҟѹ긁Ɛ߮ےֲ̜Ќϵ㭩ݯ麏쪑ѳôߡ׭ݿ݉Ɇ󵑁ɴܾږÓʁϪޢᛰµ­ůʺƾƾȀѽ҉ãݩȝȸ԰̶˽ր3ϊ㘿̀;#;I3(8%653?@?@A@??@@@?@A@ +??@???@@@?@?@?@AB@@AA@@@?AA@AA@A@@AABA +BAAA@A@@A@A +BAAABAAA@@ABA +BAAAB@ABBBABABABABABAABAABBABBABBAAABBBABABAAABA BAA@ABAAAB ABB@@@A@@A@A@@@A@AAABA@@AAA@A@@@A@A@@?@??@?@ ?@?@?@@?@@A?@ ?@@?@??@@@?@?@???@??@@??@??@?@@?@?>?>?>?@?>>??>???>?@?@?@?>???>??>??>?>>??>>?>=>>==>>>=>>?=>>=>>?=>?>=>>>=>>=>===>==>=>=CAgz=<=<===>>=<=<===<=>=<=<=<=<;<;;<<<;<<;<<<;<;:;:::<<<;:;:;:;:;:; <;;:;;;:<;;:;<;;:;;;:::;:;<<;;;<;<;;<;<;<=;:;;<;;;<<<;<;<<;;;<;<<<;<=<=<;<=<<==<<===< +=<>==>===<=<===<= >===>>=>>=>>=>===>>?>>>==>>>=?>)?>>>=>>?>>?>@@??>?>>?@@>???@??@??@??@@???@?@??@AA@@@A@A@A@@BAA@@@AAABAABBAABABAB CBBBCDBBCCBCDCCCDE DDEEFEDEEDEFEF!GFGFGFFGFFGGGHHGGGHHHGHGGGHGHHHGGHIHIHIHIHHIJIJHIJIJIJJKJK!LKLKKLKKJKLKMMLLMLLLMMNMLMMNNOONMNOPOPPPOOPQQQRQPRQRQRRRSSTSSTTSSTTUVUUTUWWXWWXWWWXXYYZXYZ[EM`eTOaovor9331+):EB@:5OF:+1=e2\-0ZH5/1/2cWMEDLHGSRR_^385GPQFA>::?==>?@@BEHGd_OMJKLGGF9D?9o:=<;9;<5216<=;9???A>><;=?>=@A??@CABCFHKTSNKMKJHIIFEGIHGIJHHFJIYMWNFDDHHGHFFISPOOTVSSTQRQQSSTVVVWWVWZZ\[[YZ\]`achhrwvrilnpv{}ClJx_ypFGGFGHHFGHHGGIGHIJJJIIJIJKKKLLKJLLMMMNMNOOPPQQQRRQRSTUVXYZ[]]\]^^]]^\\^``_`abcdehkquwyz||}{{}||NRW[^`ba__^brùszǿyogb``abdccdcdba]ZWSRRSUX]_^]YV~{vutrtuvvwvurqmkgeb`__```_]]\[\[ZYWWVUVUTSUYtwvrpkrojgceehhdedecghmrmgbjkbcd}ukeebmmtwlsvVOXZkfkmnnicjljor=segejtigdc`bdaa1433c][[XVUY/VTXYY[ZWNEBA?MVWUOKHGMRQQTSUWVTORYJKOIKb|IMTPFDEDFEB>=<=NGBHALOOD@F=O\68::6026>=<;8<=9:C:<8749?EB>BHQMV_[V14_SM==;:><:?@<<:--+*')-2681+(+(&2032---/++(,=A7069332.)G://55>$***/'(+)/242;::9226/1104=G;$!(/0:88948:<98067/,(%&++59:1.14452.-17:>?>=A@A?8:85*,-++*')(,*+)&+213;7/&!&&/68*).19*)!-0216,-,0($$!!)(%#$/>111))0.0>$,$35$%")*/.%!$!%**(53;"A48516<#'#8;,('%./<.\Hcos6,_\LE;WCX6AQj=:_[NW]X[R/C^^G?W7DAWUQM5UOJTQE7/V\QtX_Z^VTTNBEga,a_E9G>JADBG?H2<6TMV958JLfA==DSB@$T4XE@GIHFKH7:5?BJRIUFldX]7]=NM-!D1VQDYH3,IZ[cCEeKA0$&)*$+)+gU1*4.)'+[RK;5;<<;9>G=6;GQD<:?DADIOW\^OFHROHEPeX@=;::;:A>88534643$+6SZ[Y[NR`YarkW@E0NZ_^_5m9:a8e+3Gi;A<44hajN$%;X]T!'gc_ge24[_744ea]C<<$/&&#&*( '$ + +  #"*!),-+'+"&0*).+1!  +  &""!9,".HF-!!&&=55'9  '2/)+9IC/840 #<>88 (B6305;==5=Rg`^aiWJ )M@̞3O $#þ՜Ɓs\Yp6%#" " 6,!%?64(  GC@=;@95>8;E@$'n#020*'&$$'%&%'(*,059daLEBBA;::<;::94h5656343-*'+,*'$#)&&'((*+*(')(*+()(+,++**)+*++---10/..0100243567;?<<<9;;<<;t<>>BAABDHMHBBBGFCECDFNLMMOMNOOLNNNPPRSSSTTRRUUTUWXWXZ]^addnuw|Fz~zNgX䛜灏ƿԀͻ¿ꏉzzysvxxupmmru|}|~rorë¡{vwswy|rxu]W``rnusrqjcggccg9k`a_df^\ZXUWWSR*,+-[UTSROLP*MNQSTWWUOGC@=HMMIDAA@CECBDCEFFFBFK?BFDEY{{w}DALE>=>>?=:6644?83708990.2->M*,,.,''&'%%$"%%##+(.10*)*1/,/1<8=FA?!=94+--,,+*-+'(421(#()'$$!)+ "% "$!2-')--.& !((*(#"$"%(+  &&&(%'(+#  #"%' !$##""'(+*)'(&  #!&%(&'##%!"$$%"!$'"!!"""%""!$ $&$< %!  $) ! " +!  ! $9+:EE <8*&0),*:"!63+2547/%65%$-'#..+*/*%-+&"68-C0I713--/,"#8354% (!*$%$'!'"/+7+#*%9!!%.#".-#"" $ $("'!7903.!(%!&$( $/.4#$3)1/=;90*12.-03()4966:AFEH:*  )'$%!&(  (01.10130//1.2.9"4"$0'/.,-014402/--.,1;0,0=3,7UG6&" %JEKKJOD@<0$!(89:'$ + 2"6>A6% + +2?@BCDFFFCA>;8669@HMPQOKE?oaZVQMLLMMOPPRTTTSPLIGDB??>=>=>>:986631001001//,++Pkȷӱٿ슖NJɽĹײ˺ķ؀ɱսܓü¼ⴐľȶ̺Ⱦɩ̺쇇ʽ̸✻ùƺ󄍐־ѳ숓¸ǯฤຌĹԫ݀֐㹮ۚžмҁٱȋ½‘댣эǼϦȫݶ뻗¶ʞݍҼׅዓô˸º˹ɭʵݭղ׭񂁉ʬ͸<ʿ끌邋袼?.K8-D+,.1/5B-,9*;(#(''8*< !##E7!9EG?:;Q-L54>JG9218CLHGVG*453-&'D8F:*$&2- %'()$%* 95,8>@H;1&-+,/.-)RMF/&@(+..40.0342452i10,.1P<-'%$#$1MS;5.-2GFIR25M(,./&)6;(..4.$%(#&'4JFHALOg_HPLK1,6984:XWTZ94UIDECAIIBHOUol`g[S^@AA@@@A@A@A@?A@@@???@ ???@@@??@@A@?@?@ ??@?@??@@A?@ ??@@?@@?A@AA@A@@@A@@A@ABBABAAAB@AAABBABA@ABAABABAABABBBABBABBABBABBABBABBBCBAAABABABCBCBCBABAABBAABAABBAAABAABA BAABBAAA@ABABA@@A@AA@A@AA@ AAA@@A@@A@ A@@@?A@@@AA@?@@@A@?@@@?@A@?@?@?@?@?@?@?@? @???@??@@??@?@??@?@?@??@@?@>?@>?>??@?>???>>>?>>>?>?>>??>=>??> =>>>?>=??> ??>>==>==> ??@y~rxB<>>= >=>=<>==>===<= ><<=<<<==<<<=<=<=<<=<=<<=<;<<;< +;<;<;<;;<:;<;<<;;;<<;:;:;<<;:;<;:::;<;<;<;<;<;;:;<;<;;<==<;;<;==<=;<=;<;< =<<=<=<<=<<=<=<=<=<=>=>=<===>=>>>==>>===>>?>=>>>===>=>?>?>?@?@??>>>??@?@@? @@???@?@@@?@ ?@@@A@@A@A@A@AABABCBCDDCDCDEDDDEFEFFGFEFFEEFGGFGFFGFGFGHGHGFGHIHHIHHIIJIIJIJIJIIJJIJIIJ#KJJJKJJKKJKJJKKKLKLLKLLLKLKLMMMLMLKMNMMMNOPQQPQQRQRSTUVUVUVUTVWWXWXWYWYXWXYYZYYZZZ]i\d\TXjvhtQ953((2H?9>ET?9<91Xf\W4aD++V/6i^QFHPIES]QZaf96:RSG@@>>>=>?BFEFHIHc`RONPMKJKJJIGEA99@@=;;)<;845:<88A=:99;766998889:::;;=?AAB?>=>??BBCEDDEEHOPOMMLNINIHG#FGGEFEFGHHINTKDCBCBEDEEJTPONQXTWQMNPrfgfljieaec`cbc4421[WVXYTY[][X[YYZWUJEHGKHNTQLLHHQUSTWUVWRSSRRQLIvKOKHJJHFJFCDCADKKLJOSPH?CC=+8<:76316@C>=<<>>=A>78:==?A=<>J[DBVjjcn`LPIAA?>CA?AA>@D@A;9>D?=2*+,)'"$264/*+-,+3262//24/-(,;8:;??70/+)DI@DA;>A:3.+-6<8/6:8:$%@ # 2<'$<! $$# "#$CA>A00;9/ccieaV_VL8/9)iK<=?2:@5`KNUOdG@PQXP"WB9787641/45:!"!!"""#&+0@&/"(!@59P9@>46PS.-),-,+*)((('(IIEFFEBACCEGBIL):G-.\UKT5a[N;GE9940MG134489>?>>AEOA;?:682446=A@=:<@>=>?@?@@@CGHEFFDEBBBGFGGJMPOLE9;J8g\JE65* !$\Z\][VSNNL>4:ATSR>D?"0+D/I7CY[Z[?8;&-;T]XOPYZYcpgV@/' 3MZ`a_]douuh68>>B=Q/7\V[TPbjZWa8;:.0#&+20.("& + +3#%  + + !  %!&'!('%+&(3& % +   !''!  "m2'"9D+&#$#3303!/  00.,48MI4;62 !!&=<:<'%<42312<<6>IShhall'DsV'zP4*) "{f]d~V/&!( &.;o&!"!:@718(: 'RLD=?E;7?C=<:9=9=99876879<<<:;;=>ADFB?@?A?B}ENLLIJMLUMMMNMNQQQTUTTTSSTUWXY[]_abbbgnsy`pxHS½¼򊚛ǽ˷~{wsvz{vqorw}wxylljvrtrwuutbhf`ienkjnohifefj57:9j`bbda^[Y\WTWUU-,,,TRTTQNSSTSSUTTVVVLFHEGDHKFBB>>DGCGIGIKHJHIJGDEv~GIDCFCBAB=<=<89<;<8:>:7.0/+,.-+*'%')*&%$$&&%''#(++)+-)),5C//3<6+- !!!#"'(*&"$!  #$++ !!"$$'%$#&$"  %#& !$"$$ !#&(,)(&(##'#'%(()%$%%##%&&$"&#%$"#  B -00*!!    + !%(& "&$! !  + !"%  3-#+"$ '#(#3%43'('<+/&!(.1//3*!"#"%0#2"&&($%! #)*-2+00,,.0:5-341+*,#7:.7-017?CIG@5,%  # !$#  %%&+2/.--/0.-.../,02!'#2-'-22.&*K'(.,3*.+'))./45327;B612526:?=;GK8:=?:8;?SH/**+*(..(&($''(.0/,*-0-+./0/10/26610001011524589=::2*,3,WM=8) GCGGHGC=<8+!"&469),,('$9DDC*%! 5C@::GIHQ[RC2%5FJKFFOX[YN*Q+/03/6=@G???>?>??;9755311010//..++Z[󼦩¼쎕ڿѹĞɻƱͿò¿ʱƟˆ˾̢οƸïνñýƾŽ򀊌̳ᅕº؃ɤШę𳸸ɏƑš΃»킗؊껒Ͼ°ƻ矰ǰہ镂Ͼő⭌רݲ¢ѻǵϿ㊋܀̀ƒӝ闼򕬬üʽƻſԸٗɐâԹ¢ξŁĖݜ篗нԉ᯿׎D3(EG&%)7C<10)(@9&"*799-'.<=<&'$@'*@G=3%**,13/-1442320d-,)1aJ7*'%%$(7GC>5(1HHDS7:U<',/3"-D#'001//)&&#&/:8CODMXhQAPOC-.9>:4I[SZ43WPF@D>@HD?HSo~pfd_]IB@A@@@A@A@@@A@@A@ ??@@@?@@?@???@A@A@?@?@A@?@A@AAA@ABA@BBBAABBAABAAABBBABBABAABBABABABAAABABCBAABBBCBACBCAABCBAABCCBBCBBBCBAACBCBABBAABABBBAB ABAABBAABABABABABABA@A @A@@BBA@@AAA@AAB@AA@A?@?A@A@A@?@A@??@?@@@?@@A@A@A@A@@A@?A???@??@@@??A@??@@???@??@?@?@??@@@??>?@@??@??@?@???@@?>? +>??@???>>>?@?>>>? >?>>???>>?=?>?>>?>?9]}}§y?>===>==>>=>=>=>>=<=>=<=<=<<<===<;<;;;<<<;<;<;;;<;<:<; <<;<;;<<<;<;:;<;< ;<<;<<<;;<<;<;;;<;;;<;<;;<<;<;<<<;<<=<<;<;<=<<;<=<<<==<=< ;;<<=<<<;<==<=1<<==<===<<=>>===>=>===>==>>==<=>?>>=>>===>=>=>>>=> +?=>?>?>=>?>?>>???>>>???>>??@?>>???@>@?>@??@?@?@@@?@A@?@ AAA@@AAB@AA@ABA@ABAAABAABABBAAABBAB +CBABCCBCBCDCDCDCDDEDCDCDEEDFEFEFEFFEF GFGGFFGGGHGGGHHGHGGGHIIHIHIJJIIIJJIIJIIJIJIJKKKJKJKKJKJKLLKLKLMLMMLLLMLMLMMNMMLNON)OONNNPPOOOPPQPQPQPQQRRQQQSSSRQRSTSSTUTTSTUVWWWXXWWXYYZZYYZZZ[[9Jghb_`plmg@;1%")8?HNLL<=JC:KhXQ2_?-/V46m`QHHLHCM\RQ\^f73QRPC?=:@?@?CHGFCFJ]\VRSTONOONMMLIE>=AEA@==A;;7:>;;DC@<=<;;889:;89:;8:<=?AABA@DEC?>??>>=>=>?B@BCEGHILMLIKJIMIKILMIILJGHIJLKJJPUJD@CC@BDBBHQNLOTZWSPNOMMNNNPQSTUUWZY[\Z\Z[_^_abirnllkkkqtxytttGiVerwxBEFFHGHHHGHGHHIIIJIIJ KJJJKKJLJJLLLMNNOOPPPQRRRSRSTTSUTUTUUWX[\^_abcdfegedddedfhhikklnrv|OSY\bfilkjiil{Ƹjzrlhaaclwlȭ¯zrmkljklnmlnllke`\YX]bfjijhc]U~}{vrokjfdddcdba`_`]^\[[[YZXVXVVUX[}xy~{wwwy{ljb_Z^cadhfbgpmoonb[bhkdi`~{omznpwmejodh]ghfhlaa]`e^esru@?AFDriddebbdbab`bb12114b\YZXVZ]aZYZZZ^\ZMC>GKLRUSROHHRVWWVZXXYa^XVUTPVRLMLJOGIJIDKIFGIEXSDDJHJMGBDE>5=8966303A>;=D>BEGHG?ILDP`[SMKEAFGBC==EGCDC?>HD?;:AF61/*))#)8640.3100/385/360&HG#29;AEA5//)%LA:=>76#++*($"/-06216:8425.+++,/A:$%+/402:;9<822:85013-*)/0/-456.196:853359AED@>D>>9!?<<8;;7;?A>989;7368;95/3///-.11/'$&'),)*.3+(')+*++(+,0+*&#'(%)-)-,,#<27?CC6+,.*''(('&&&"'()++0232334("--6;0&+31:"&;)11+'.%!!!"%.,#**'# 5&)*-7513BCC;%;15< #&)-OPD866>71,0.+,22/()1A""#"=;77<#))912669;2279=024+'.66345BE=.,%"$6;3 1!)-*)2/=#"#%#-+>%!2.*.%#5#)$=<=$&#)-48B#%'&%%# @C;:--3.*h[pj:hV8_@J3\EdJKPDahdfFKNJ[NWWOTS'RD6"BTLXTOXMTSI@*I3H>KvI_hgd_INO.]'jHNRFF=<8+WTRTPIP[ !!""#-41+-#h88XEA-31:?>KLD@\7)S$,',VV+**+TQLKGIFFCDDEDFEJ'+.@Q753\3hWHNKhu-YHYbp?RYf5?6128=<:<=<;>=?=<;:=EE3=;>AFEGSN?;9>==C;7A==:67<<=89:=<?FCBADDDEFEJMHHJLNLJL*9L@@=3I" >VZXPUkbMXp<;83V60,Tle<.!(82-%!22.5!#.$  #(+:.582/4/2;74=Gaxldgj;kN  3X.DzNHJEx0 +eFJr؂~uouz:,#"%/774##,("1C5-9& :%(VLA8>G??CBK(#920)'$!&')&*./.-18TWNHJICA@=:;=><9426:73.--)*()+%#)'(')())')))+)('*+,/.++-///-**,-11235779><;889:>;<88877;<;:9:9;<>@C??=??kb^_^[\[ZWTSVU+,+,/XVWXSQUW\WWXWWYXYPG=DFGJJFFE@>FHFKMOPPRZURQPQNTOJLGEIEFFC@C?=@@:F@42;58>6100+',+,+*'#")'$%'#())*(%%+*((**))6718DB>95/-/0,/-+0100-**1-*"!&)! #  12!$$*0.$ >;256-&! %!&)'$!#! *! "!$$%)&"#&"! " $!'#%$! 0"#&(+(&#$  #'$'*,+&%&%$"$%'&% ! !$!!&#$!  &$# 24," %!$&"  "   # 95#"%%&"!,)'+ %!%.#!'($#)**+)&+0&.."0#/<500---'%!56-%-+0.6==@D:330(&(  + 4'"&!")7786510,---,-`,-*,4+%//?D"<*%2656E *,/03551253343554313::+510/66;F?1,).-.2)%.,-,)*.,.**+-,,/0022/042./1346964769789,:/\UF=1/ -ECCHFC=?;;$!%0372/6+, 1@HN?+9' + ,>>=4@FKQY+N5-.  5EKNOMBFQSSJKT/12.#)  %8A@;BSG7CR.,)$53 2IJ-,)'/10.*QNS/,'/:BMUPN)=EOQOMJKA"  }~}~}~}~}~~}~}~~~}}~}~}~}~}~~}~}|}}|}}~~~~~}~}~}|}|}|}~}|}~}|}~}~}~}~}~}~}}}~~~}~}~}~~~~}~~~}~}||}~~}~}~}~~~}~~~}~}|}|}||{{{}|}~}|} ~}}}|{{z{}~}}|||}~}~~}}~}}}~~~}~}}|}~}|{| ƴœƸ뜗傈᠄Ͽ꿯ഷ̽ކcãĹ忨ǻɿ־ɼIJA 7_Խ   +      ! !"!!!" !""!&GʻľʞٽȽĻɰK$ !! ! ! !"!"!"#"#"##"###$$###%%$#$$%&'(('(((*)*+**+,..1468:;=?>;<:98877678:9:<@EKQWXZ][YURQONM*.27=DINQPOLJIWuxts}yue_UJINSXkwjY~vyɽzxqh`XRN2IIHKORTRPKGCAABFNUY[YUPKC:f_XUSSSUX[```b]\VTOJHFB@?>==<97665321010.,Rÿ«ަļŴ­߸܀׼瀋˽Φʼƶڀ»ꡁŵýغƽ¿΀ùĻº϶׷򃈈̮挍怉ڀܹ愐ǷЫ沃ϾôɑŠߢاہŦķµɧ𘬡隢̺椫ڄˤӧؒļ󦭂Ϸۺ󁈕ѕ܁䋕᧹ɕʵ¹ĹǺЃǼŤ󽉙ЀꔹQܓӱ΃|=M1>F>6#=H@,/-$,C<3?BA?18<04&'0D>3;FJ<;0*-?=437@JHFI).050.((Q?.NO3"':/('%#)DC8965/9>@+)!#LJT_SD795,;(/*)+00///021e,*S2U?.)&%%&-:]J9+$AFGI`A7M3((,5"2:").2//,-+*('+02FQIKKSTC>IM=.4;847VT[06\NKC?F?BDD@LXrzof`\TeBAA@@A@A@@A@@@A@@A@AA@?@@A@A?@@@A@@AAA@@@AA@A@A@A@A@A@@AAA@AAA@AAABABABABBABA BBABBABBABAAB +AABBBABBBAB CBCCCBCBBBCB +CBBCBCCCBCBCBBCCCBCBBCCBBBCCBCCBBCCBCBABABCBCBBBCBCABBCBCCB AAABBBABAAABAB AABAAABBAAABBA BAABABAA@@A@A@AA@A@@A@@AAA@@AA@@@A BAA@AA@@AAA@A@A@AA@A@A@?@?@?@?@??@@???@???@@?@?@@??@@@???@@?>??@??@?>?@???>??>? >??>>>?>??>>?>??>8wF>?=> =>>==>>==>>= +<===<===<=<===<<=<=<=<<==<<=<<;;<<<=<<<;;;<;<<;<;<;<;;;<<;;<;< +;<<;<;;;<<;<<<;;<<<;;<<;<<<;;<;<;;<<<; <<=<=<=;<<;<=<;<==<<=<;<<===<=<<=<= +>=>>===>>>=>>>=>==>>>==>@>?>?>>?>?>>??>?@?>?@??@?@@A@?@@?@A@A@A@@BAA@@ABBBCBABCDC DCCDDDCCDEDEDDEEFFEFEFGFFGFGHGHGGIH IHGHHIHHIIIJIIJIIJHIJIIJJJIJJKJJK JKKKLLKKLKLLMLKNLKLMLLMLLNMLMNOOONOPPOPQRQQQRRQRSTSSTUTVUVVUVWXYXZZ[ZZ[Y[[S9bhiieikmkR;30&'0MLGMF<=E==HeWGWXP92^enl_YMFFMVULWU_ncAPOB<>==>?@CEDA@CGZ[VSRTRMOOONONLIC@AFFCA?EAC>:@@@CGIC@@BA@>???@???>>?>=>>A@CDFDDDFDC;AAA@@ADABEFHJLIKKHIFFHKLGJNKMNMLONMPWYMDDBCCDDACLTLLNPPWTPOM2NOPRTTVVVXYXWZY[]^`_`dllgchgjntwtlo7A[meaFFGFFGHGHGGHHGHIIIJIKJKJJKJKLKLKLMNNNOOOQRSRRSSSTTUUVVWWWXXY[^_`cegijjjkihihhjjkkmloqw{MPTZ_ejnpqqqprIJ׀vrkb^`eiw}vgMͿxtrqsrrsttsrpmic_^afloqqlhd^V~{yvsplkigeedcba___^]]\[ZYXXWVX~{~wtr|rgc\_\abcgefchrppsa\h`aca`Zuy~{zvrcjf[clq{rrhjfd^`cal{w@?ADA>pjdiihgfc`a_`11--14`]\[YXWYSX\ZX]`aWICKOJOVXWSNJLRVXYY^b]b[^\UZaMPRLPPHGHHHMHJEBHLKFJA?97?<>=?GGLEB?JPFBA>AED>@AB?=B@ED@:AD?77;>:32-20G'"*44421558,,355400,)+&&2959::42/*'R6+.O-7#*+*,)$(322-*1540030.3246<( +-.3105/13223F:2560.+)+)/,57916689420367>?C;8;977@<<=9;>8868614665..2+./-01.+'"$%%&%'*.)&&))((*'()+&%&"$$$'+*+)*#  "$($$'*'&&'%##%&'&&'#&!#$$*/./475-%,.73('.4&>/1,! #%  :7#,'"!"!&.7772-069B&(&%B6$,76.--,',*/8*+2;;0;:6<[Eb~qgRRIBS@9M`bD.7_Z@eOFULRadcVMQ=6QH2L>\^[]\WM\ALB>8*[ZT:;W^5ZTIDD5L:!2:E*8?=8<<0+RY^WRWQ4854d^SDe; @RQ:/06;617E7TNLKFLPINPJBFEEDKOJE@:113448:654*19!$%"!$.**Ra4[Z8=-3:>7KI@HYWA4/&9>MTUTTTVURNLJJIJKJIIIJK%'*,-=633447kZ@EOGK3W^Y?Ne+63@j>Ed[25.49:9<=<89;":;E2<::469?BDNJ?;=<;<7:ADEJHFD>>9589;=<@=;?@@?ACCFHHIJILKMLKIGK.,WbeZQC-3 6f[ZYUUOGLGJ%3>BC2-QH)0.+?MI-^UehNW[:&91f_LO^as<8iN8E9.CW^kileP[eiejl:8>B;:dB@;fimko;95_I3%<"?_ahok8b]ajedddaM! +)')   !  "'#!$/'1/    '+8A3' i,4&)B7(*0/0:'")" *61//4;.)25)##"#99< $?42.-6148:5@Khqjccgv d< # !bD7=V؋@EE>D?IVL171'&&&')*)-00,.26QXPMKLIC@>>?@@=;757;962.3.0-*-+')+-)))*)**+)))*)**')*,+-,,+-/..,+*,-./01012489978:886769<7:<;=<;9;??ACFA@@<=B<;97><98:20.,.021*()**))%%&)'.1/,0+*0.+&)()()..2//-482//,-/,(+,0.-/-0-(%*(%"$)"$ !  $"%&&#!@5+"%B%)" !%%  $## !!"% !"!"!,!!! $!$##%!!$!#$' $"%(%(()(&'%'%"%&''"!"!!!! $  &#  &!#! #'')'%"!%!  $  + + 1R)AME>'/(".!+:8'5. :-)3,/:<<2+-(%*"322440+7 ..0'17 .*?1$&+/56#2/'%#%#!5454303//601)"!/,+234>5 "& %+,+*/,*& (+.,**263/'7!4@/(*-2,%'* 2/03/2516:6024548;5/'< + +  +(1&,#"!++"9<;:8899631/./j01//.5- '8-0>C4%(4*&1E)0A; .,/24253312523<(1/.(),138B=2-.--.)*1249751-.+)+*+*,-/03/,00.-.0125:7886782$"ITXPF5!  'LBCEFEB=><< %*-";1!+'>=LP9?@" FE7=LP\0*R@3<% .BJURUM>ELLIOO-,04-I0?F>4LN<8O+..0$!(.8>P.+!L10.PRSQW.,(C+ "9BLSQ+HGIQNMLKK;|}~}~}~}~}~}~}~}~}~~}|{|}}~~}~}~}|}|}|{||}}~}|}~}~}~}~}}}~~~}~}~}~~~~~~}~}~ }|||}}~~~~}~ ~~~}~~~}|}|{{{|}~}~} +~~}}}|{{z{}~}}}|{|}~}~~}}~~~}~}~}|{ 䗱ؤȑݡʍԼ潾ي`ᴛ컬ä瀀Ӹǽį> +  .zˏg8C!SE   +     ! ""!"!!" !!#""'8òɶҩټų킹̷˼þƳ񀐴ߪT&! ! ! !"!!"#"#$"#""# %%$%%$%&&'()*))**+,++-,-/2478;>>@@A??=<:9:99=?DINT[`eca^[YVS*+04:BGLSUXVRMK]{Ⱥfui^URT[cysa}th`[UQOPRVY[[XQKFBEKRZaca^XPE>8dZYXXX[_cgilhd^ZUQMHHFEBAACB?=<::98655432211001///1X۽èකӸѸ¥Ư¹󅓛΀ͷͼ;ļ¾ġлƴ݀ȾƿſǷބڼԴȾĭҰ݀օٿ퍋ͷ텏ȸ϶𽫺檸Ѵܜ턍ɧ̯λހݳٍЀ˾ѬדخĽ󙍍ӏ݉՟㿫ɷɾل˫ʿĺܾレ܀ׇ֠خ΅³ߣ5>K4H%7LN?4'FD1H9@BD@78%6H'I%?*8;5;HE7+3;11<868?GBCD.--1,/+O6>(BXP4$2.3)'$"#L=3;71/2>!'+106;M\R18;0F-1-'-31.01130/0/]**41M6)%%%$',H^E1)4IFFS;2M5&)'(0)7@*,331*+*)**(1D+))NJNJ:EEMJ;**0/4?^Q/76TLG??BAEFABVgcdlb\]UAB@BABA@@AAA@A@@A@@?@A@@A@@A@A@A@A@A@A@AAA@AA@@A@A@@A@@A@A@A@A@@@ABABAABAAABABABBBABBABCBCBCCBBBCBCBBCBBCBCBBCCBBCBCBACCBCBCBCBCBBCCBCBCCDDCBCBBCBCCCBBCBBCCCBCBCCBCBCCACBCCBBBCBBCBCBBCBBCBABAB!AABAAABAAABABBABAAABABAA@@ABABAA@A +@@A@AA@@A@A BABAA@@AA@@A@@AA@@A@@A@A@@AA@@@AA@@A@A?@?@@AAA@A@@@AABA@@A@A@A@@@?@@@?@@??A@@@?@?@?@?@@??@@@??@A@@??@?>?@?@???>?@? >??>?>>>??>?>>?>`ƯxE>?=@>=>?>=>>==>==>>=>==<==>===>=<=<<<=<=<<<=;<==<;;<<;;<;<<<;<;<=<;;<=<;<;<;< ;=<;<;<<=<<<;<;<=<;<;<=<=<===<=<===<<=<==>==<=<<>===<=<=<<<=<<===<> ==>=>>=>?>>=>>>=>=>=>=>=>>?>=>?>>>??>>??>=>>>??>?@?>@>>>?@?@A@A@AA@AAA@A@A@@ABABA@ABBBAABBAABABBABCCCBCBCCDCCDDDCDEDCCDEDEDFEFEGEEFFEEFFGFDFG$HGGGHHHGHGFHHHGHHGGIJIIIJHIIHIJHIHHIJI2JIIKKJKKJKKKLKKKLKLKLLLKKMLMLMLMMMLLMNMMMNNNONNMMMNOONOONOPOPQOPOQPQQRSRSRSSQSSRSSSTSTSSTUTUUUVVWVUVXVWVWWXYXYYYZYZY[Z[[Z[Z]XQicnlfgqke?<:&!7LG;N=8:HFBAVPDXPW?1^Xbc_VLDEJMOVKSVZdc7LPJ==;8=A;<>EWZXPPRTLLMNNPMJKF@AGGFA@ACEC>BDDEMUMFFEFFDDEFDCEEBBDEDGFJGFHGEHHGGHHJJKHIIEFHFGJJKKJHHIFHHFHHFGHIHHIKHJLIMSWLCCBBDGEDFTXWQSSR]USMLOMMNOPRRUWVVUXXY)^ac`cgjjfcefins:ii48V\zqJ@EFGFFFGGGHIIHGIHHHIIJJJIJKJJKJKJLKKLKMMNMNNNOPQRQQRSSSTTUUUVVVWXYYXXZZ\]`behlmnmpnoomllnlmmnpsv{KNRV\bhmswzyyxzѾn~wnhjoqxiϼzxwwxy|{{yvrolfdgkrvyvwqi`ZUzwtspomkjhfecbab`__^]\[\\Z[YYYWVUMVyxsqmgf`[^fhfebeeefeprp_hxe_]XXUv|bfiijz|}xihei_`acgljv?>=8:658=84[X243659@AC9BEC>A@<@=BPNEEA;C@99;=>A@ABA>5@;32472$?$67684114<,++//0440,,%)893586465,*U989-+5%++*.)#&.-/,)4662230/10875.%'1.12/)0/49635A:4870,)*,.1/878343341/--.069<66798;D>:8378387<965252-//10-.2(,-,-)'*#"%$$&&',-*((,+,),()*./.+(+))-462/-'$#!""8$$#(())())%'(&)&''$&!!"#)/./35/)%#0/<38/+%#)/7,/33.$$!  ! 9<434!5+<;7; #&+)()($&0:62/057278472351/4(-0-1986;<8228//1690#&,,.30**(9:<>);=66212/,)%*%$+"%(&/00(3B%$!#&'#&"1""2'+'..+5%$:90# &)/8$&&('%&%#=?"?2A?<"I@a}wSC\^[WKCBQrKGeOkCaO>2^T``]STXa27A7/1BGP@KQROUS7>88L@6PFIMN,CMG>18G?PUZ5l'/:JU>=A,H&R,HC?-458:=?HORPLQ)POSSNIOZOJKOOSWWPPSR@269797113'"0"$"""#.8%!+)-95B5B^2997EIEHMWR51 9I'PTRQPTTSOKJKJIKHIJLKMJ&'('0D6a`37gZK>Oc@[UVWe2TRQRIR`C2GA^C>/28;<58:88@3==;6458;>;79?@:DKQWVPLC?=>ABCCDGIIIKMRLKFZ`ogfdb\dc_ehml9<<:Y<+ 'V60OE1^g5JXn9:;=5/*>"5F,U;@d6@@pkn8l9;rnhf]DF1%"QTcirpjZ]hfebba\7 +%/0!%  $#! $!"/%');1   %/@;%{0 /H/"1-/5$ -!%  ,)*-%,,11& !$(@3$%941,-306868IY[_f`^gmJy1V!6JFb݄ߡ, H-#b Ȳ{x@0,,=8.;*&%0.,+>3(98>-`%MFPQOJB?@DADG>FCIVP+951()'$)-(+,-.-/8QYUKJLOD>?@?A@<=:5:>=;41/011,0/..25.*+*,,-,..---*)++,,.,-+~,,-./..-/..///0/.004674464333667876578:7:@=@BE@>>;;*++#"$$'%##" ! &!! # #$$#' ## $!#"" !"&"!!%!$&"&&('$&$'$!#$&%"""!!# $)#"&*&(" !$ "" !!" #&"$# !"#&!"     )U%?MK1&4+31*'#3D-/8,;#9+#05BA9@7#%2.-')$)-2366"4&) %&&><8&  !  +!%/"!$+,"<=;979996200/,-,./2//+#003.$'QQPPI:,1;D??BDC@A@A/#'+.7=>4#/"(2->@BFMUZb4554320/.037<@HRZ^a`ZVVeelme\\g~vi^X\fo«|Ѯjssھthb_[XY]`ba_]XQKJLR_fjjg`XMB95)fa]^behlnrrnlc]WRNKHGFGGECBBB?<:99865563210--,0F𶢮ǿܾüøþ⁃ʢ˨ɻɸмóŤǹ֫ȌūþĹ·̽òŻɷнüǿԶс¨ހ㺦ăתƢǪϴ⨸өғ섔рɍչְӘѳǤഇЭƯĮͫẫԀ샅¨񓗝ޞǺτ޼ފܤ¸˽ıɸ½곳ˁUܸؾـ 9?;D&AE#2H2)0-ND#D8.=ED10+?$&(9+))6504'%('//;K$.;*('')0@'+*''KIF82DAEA3(+/25?-W193TH?@??@@>??@@?@?@???@=>op헆{~~?>?>=>>>=>==>>==>>==>=<=<=<==<=<<<=<=<;<;< ;<;<<=<;;<;<;<<<==< +;;=<=<=<==<=<;<<;;==<==<<<=<<<=<<<=<===<==<= <<<==<==<<<=<=>===>=>>>==>>>=>>?>?>>>=>=>>=>=>?> ?>>???>?>?@?@?>@@?@@??@A@AA@A@A@A@A@AB@ABABBAAABABCDCCDCCDDDCCDCCDDCCDDEDDEDEEDE DEEDEEFEEFEFGGFFG HGGFGGGHGFGGHIHHGHHIHHIIIJJJIIIJJIJJJKIJJJKJKLKLMKLLMLMLMNMNMNONOPNOONOOOPPOPPPQPRQRQ/RRRQSSRSTSSRRSRTTUTTTUUUVVUVVWVVVWWWUWWXXYYZZZYZ[TV:dZmthcvjfUC8!%LTCUJOP60[[^`aPIOIILFSRPPTXaa=QM754:9<9:<;98;BXWOLLQOHFHJIGF@yEBA?@CAA:ommmkfiligeeb^]`0130030._ZXUY^`a_^`behor_O\KHVY\[UPKMMQVX]^a[ZUSRTQOHKRMELMRLJ[NFEEGCJC=7:;:9:=<8:9.[159<:7<;89B>8<=DH@CEIC=BASQJE? <89:88;<:@<;>BEDA:94=;8006;4$$8666440:@,,,/00242,))0;7;:<9324-+,F:7++:&-/,.*&(+,-/(37731523104.83&0854873757:7244//42/'(,,/-,401,11/20.*(*,47;978:8<'G<73641524206162.1231+..(*)%&((&"##$((')-/*&&+++*+&)*./.*',,,-31/++'"! "9 $%$++/-*+*&*,()%&&#%!"#$+612694.''-0<"5.-+%&*2/3345,'($"#" !&%#!!:00 .+=::<<  )% !"=26<&'$"!&/.32673)*,552430-2100"#? %)*$!=..04 023+294.-+,-'%*5/#/!:%!/;6.$% *#'<$&#@B%%$#$62/-&061=# ;/!!*+29C&'('&&$=>E#;.AA7`[YWR]ka4;7HTG1BIGI6YHW/_KO>2F)P=.(EK;HOXB:BA5/>K=NH40.Y?1HGA74g[HJcLC1_9JTRPQ*,,U+,VRVQPOKPWPMMLJLOOQSQPI<62431350'"'0!""&,.7G%= 3M;O:>Y657=AFLINRMaE9@PYKTRRQRPPPMNNLHJGFIGGHH$%$$'t4b15f@/9C,3@U[WV[WQSRNQRaUId>\T`;aIM:9:n:=89W767754586::;>>?;89>A>@FC?DGJOYZUF79:9<@;?==?=>?DCCBDEEEJNNME03#A\eZaVM@+1>[WRTVROMNNH?192:RRVa:HW?>EGQ2.]cXf_U.""-KYU\kcfvzs:\F_4-F8SWeffgcc^]WFU`ij8;:9Z1=LEG2+Lh5[>anujs9f87UG", ;3>?]C>sjnl:;;;kbaXY:#!1Q`dl8m^aaigfgcYI9'('))%)" "  #  4'%-1-"  ! +  "9E)! ! 7&#16$',)- #$+ + '%%-)++!"%'9!&"6.*)/.-443>QZ[]bZUfl0o Q_NLHoJ?nкeHD|@ĿÄDڄۀƎu~a>- 68535,(,2/-,7:*:2;<*'JOQRSGCIDDD>IFDEGOUN087&&%((+)+-/-,0;VVNHHKJA;;>=?@><=9qy>:964202.122215/.//0012/0010-.00132//0101320012/0-/0110211556657443211345678;::988;;@D@:8::;<;::DEEDEDFMHHEFGIKIKLLKMONOOOPQRUWZ\`ccglotwOSkhrY=򁇉î¹}wyz}}}yuszrorsmhe]\\~}xwzquoursnkm:6gfhgd^bd_][ZWRRV*+.*+.,+YXYTUW[\VUWWZ_ircRXECMMMNKIFHGIMQXX]XUQOMNMKDGMJAEBD@@OA<;994:51,./-,-.*'))#F$&(('%('#"'$"$%))&)(,+),,;720,+(('%&)+*-)(*+,-/1-*! ""#  #""" ! &. ##" #,'+,,*$$&"!2*-$#, " q#'(%#$$#!#&#"$#!&%%&$! #!! !%! !!!+&%#%$!'$&%#'$($!%&&&!"!O ("'&'('*!%&*)!)! %"   + !!    !7Q&?JM5,).3,,+D=1/;>(&(00-CA=:0"  + + $/ ,$"+ $ #'%2%%%'/5>;;888:75532.-+*-,,-)@/3 *"$-8B@?A:9=<:<=?/(8$88C'=-5046g6934K/..,+*-/-0//10/,)-0315:4-149>HJE4(()*.404100..0344334459;<93"0JVPTKA2 +,C@>ADCBAEF?1#("#AADL&5:&&++1FJCKE8 (:@MSS`aY-JFSPXOROKDB;/=DKN),.+>))+-I(?)BLUOZ,K(&9*  !)F31ZTVT,-..TNLAB! +*;EQ*UHKIPQOPLG7{|}~~~}}||}~}}|}~}~}~}~}~}~}~~~}~~~~~~}|}|}~}~~}~}~}|}|}|}~}|}~}~}|}|}|}|}|}~}~~~}}~}~}~}}}~}~ ~~~}~~~}~~}~ |||}|}}~~}~~}~~~~~~}|}|}|}|{z{|}|} ~}}||{{z|}~}}||}~}~}~~}~~}}~~}~}~}|{ ս•߹ȱ˷Ҭ¾ъ񂌒ށaᴣ˷惎©зųɿ   '  UOӅ៏쉧^    + + +      ! !!!"!""!!!""!""!!&2﵎ß䅴󃆂ļŶƆP'#! "!!""!!"##"""$$$#%$#$#$%&'('()()((()*+++,.-..-./..0235:=ACFGHKKJHEEDCA?@@BDKQZ147889:96668:=CNX`fljibas_pywsh]^[X\ejuf^cpҴqr~xMntkhedcehhhfa\WUTYbktrni`UJ@922eegnuxyzzxolcZTQNLJHIHIIFC@A?<;898865554211/,VFOž꺶ٿǥˣ󂟴ܸܾϸø͟Ʋ³¿ǥՏŻ·ĽǺǸͶλݘ˺햢Ŀ»Ӹ㭵ӭ񄊉ȧװӾǂε״ͪۍʋɚۆى𨱓ֱفڶ޷ӫҽꋷʿӧƨ‡ʆ̏ľ৐ƾˀ鲤𜍦ǡɝݛЀՆ埊Ľ˺ȏʻ݊㹥ڟٷ埁ƫW߀ڰ֯Ϗ #KHQ;>JH $$. 3<2'B<"C2- #"$+7DC220NAA844;F?@@H,/-45WD /9%-*GG265(%%" BUE13783 &-=%(6 'bX68<&)*-..20-.38;5321+c.33M3+'''%#46PA42;EAK/0T8/6-#(,,-;V++),*+'%(9G&*+SOHJ>927=C;<4-.368JUZ5;WOD<=D<8??@UdelfYXSX`Z>A@@BABAABAAA@AABAABBA@A@A@@AA@@@BBAAABBABABBAAABBAABCABCBCCBBABCBCCBBBCBBCCCDCCCBCCCDCDCDCCCBCDCCCDCBBCDCDC!BDDCBCDCCDCCDCDCCCDCDDCBCDCCDDCCDCBCDCDCDCCCDCCDCBCCDDCDC DCDCCCDDDCBCBCDCBBCBBCCCBBCCCBBBCBBBABCCBCBAABABBABCCBBABBABABAABBABABBAB ABBBAAB@ABA@ABAABAABABABABABAB@AAABBAB@ABBB@@@AAA@@AAA@A@@AA@@@A@AA@AA@?@@@??@@@?@@?@@?@A@@??@@@?@?@?*@?>>?Dt|~˛t˲A??>?>???>@?>>=>?>>>==>=> +=>>=<>==<<=>===>==<=<<===<=<=<=<==<=<=<<;<==<=<=<;<;==<<=<=<;<==<<=<=<===><<==>>>=>=>==>=<=>=>=>>==>=>=>>=>=?>?>?>?>*??>?>>?>?>>?=>?>??@???@@@?>??>?>???@?@@??@?@@@A@?@AA@AA?@@A@A@A +BABAAABBAABABCBABBCBCCCDCD CDCDEDCDCDDCDCCCDDCEFEDDDEEEFEEEFEEFGFFEFGFFFEEGFHFFHGGFGHHHGGFHGHHI HHHJHIJIHIJIIJKJJIJ KJLKJKJKLKKLKLLMMLM +LMLMLKLMMNMNNMNMMNMNNMONNPPOPOQ PPPQQRRQQRQQRS TSSSRSRTUTUVUVWXYXYYYZZYZYZZZ[Z[`ESZlxlZulkkI5*>;5=5,+145636>NGRQPfD03X[]fWMH@EJFRWNQRN[[6II;8489<<:89;8:FWTNKJMNMCBBCFFFE@>t{A@>=<>@?=8=?AMFFFDDEFHJGIHGHJLLIKLMOLMMNOPPTRUWTUSUXWVW[-W-.^[Z-//,---TQRNPRNMLJKJKMNPPTQJEECCEFBBMXTSWVSVSTURPQRRVUSTWWXWXXYZ^]^_cefdjrrkkhhnrx}pnl3Cn3OGCFFGFFFGHGHIIIHHJIHIJIIHIIKJJKJJJKLMNMNNNOPPQQQRRRSSVUTUVWWXXYZYZ[\\]^^`bcginpswyx|zyxxwvuuuwvy}JMPRSSSQQRTW[afpylzzpikigiswͮr}zк}xvtyyne]VQO|xwvvusrpniigefdeccb`^_\\][YZYZ^\fvwvnjkginopfflj`^`en``f\WZ\UWV{y{w{~{}mltxrlejypqqq}=:stnnmjjjghgeb2`1132346783\[aa\_aebbdhjwweDMO[]YQHDJOPVZXXTTPJJLGSMOCoy}}EGOWJ@C@A@DMTE86@??A>64778=A5:J@C?<;BJONIFNHAFJQGD@876677989646:;::;<>FC?8559638@><<46:;.9',;588:82:8-*.644893**),61348:624/.00G5,,D),,+.+,*''-1/37523527343/;7+9=646200/140.13/(-/1,%'*-,.533/21020+'',/79:69::9;I=;544101230/236/.3240++-'+))*+*(%'$")(&)+,'&%*++()(-,,-*)'+((+.+,*,$""!"! #$",/01./*'**'(&&'$$" "&,9644:5-%&),8$60.+%%+*/8/0/(&'$ "!""!! !";66#:<69:! <$&'%$( 55-8: #'*-1.+++'&)*,-% $'(--,+,(%'+./00,'+%&%(/2#.2/,-*)(&*,2152(0/&/-&&76'..:=!;"%$#;A1.0+47488(#'049="&((%# $@S@-\8XVTNQbbVEJ>>=:2FKR>:/=JeUV[YJI5YN/B6Z56cTT9U\:UMA9;@;YH:7Hf`^]UE@Fa2SA:;@0KTOC*+YXJJZ7@-K>B161FNA77J\5,HFBBM?S=F6,20110PK734\XPLLL1FQjB5-VVUV+*RMPSNJGIQRNLKKMLKIJMKOSTSSNFE?<:8863.)'):D#!,9C,-&$;+^d?8[:2>@B;BILMTWZTQ_BAKOSQRPOPOOONKKGFHDDDEH#!!,934eQOCNV4,nAWWTVVQRNC1X+VB\\ZMn[Z9;M96jq:6620225465556517>B?;9<A?A?>A??=AEABDDECDGKNC.4/Tdbi[QE3? +,I\TVWUPPMNKL29*?VUY_\&VM:LMQ'-Aj\Ui]L.'Vea\clo=aF2@; 32FYbbchfb`^b^3AZbc5g:oX%'9JPK7,Zl6S7(7nr?>>:7gT@,"#,p4BD=qpkp;:q9lc[cF%;bemjjh^]_lfhaZQ0'-5 $/+   #  &!"! 7, #" ." +  C<!# (."$4+#)&'1 #7$/.(%"""(*''#"&(/8=#(;2,'*2,*013EUT][TTS`wԟOK&"6Wd擬T,+%?73,H(b|{tx!%\+ࡤ}uO1"8716.&%()*+))/8/899N4)*JPQWJHC=BD>JJADFENK,75)(%((---),-,0AXTJFEHHG:879===<::ox><862315503355-01//23321432002112144344556564674665545786<:;6564675676758:;<=B><:;::;965=B@ADCAECFFACFHHKIHHMKMNMNPPSSTW\__^cklls}P\QuK聎ƽи؀䝝}||}}{ussuzlmogbba\^^rw{|wsnnypuspw95kmgec`cc^]\[X,T+*,,--/{02/ZY[YTXZ[XXW^ev|l?FFMKLHDBEFHMORSNOIDDECMEF?pvxs<;AH=7:6867;B6-*-452.//,),)##%%&*,%'.&*)$%*-/0,*/-)/3921,(&'&%$$%&'(()*+)-*&## &"%'''#('"+'#%%" !$*%(*,*)&)&$&&7)$#5 #""''##$"# ! %(#!#   $ !!!  #"# "%&##$! ",&&#"%$"%%&%"%$'"!'&'$   %$ %&"$#('$&#   !      4N7AM6 @9-'!%43,"65+;1!@@:972 1"42-*&,54,$*$"! *,2"""%4..0/&&2,$ 0 90156"2-A$ -& (;521.$ &2(!&",("+$ $!&!(& #% #"''$$%#)(6%:98864683100454478:8987;:=BA@B<50*$$!  $& 1++!$#&*.,)-!$69=999;:786410,,-()*'' 2(( $*!H)>A>>>8<:.#A"4*==70?91!(>42dj721,+,+-,.//+-*(.230+,--0485,./'48>HH1.,--2232/2..-1533565446::2  BUUZOF7%* 8EBDEDBBBFCA%((C@DKF<1#221,QECNC0 CWUMU]\0J8)4& 1DOLKQNLGEH@-@FH&P,S=*5-*+,--/../././/.02236:=AEILOPONMMKHGFECDFJQX048;>BCCA=<<=BJQYckpgyvkghdb_]`el~Y^aYJ@724w忦wkno{{jzqlkmnpqpmig`\\clw}|ti]PF?854469>xqh`YROLLKJIIHHGEA?=<;998997666432310/\GĶ̸Լ³Ѽƀ왶ӹΈѰþս׀ɤȴȿ܎ͻǹ÷Āôļɼ̹ߢϿኒɽ·蒙¼½٘ѷă솋퐛˻跚܊К塞鄧˦ьȯ²֐ʹ˜产ħԥЙݿǽ񙩢䍈ˮ⧄􀆚–‘ُʻ΀՛թ¼ƶĸ¼¡׋лŵÝٰ਽ʄ˓ɋZǷ󁆇ˋ낁뒰ФB:ST=GM;)%A,11,F%'E+(?GC:5K:)+;;"(%##$+.!(!NO?A884N422.336=TT.;7SI=:ACC>@>F^dji`SSMWgN3BBA BAAABBBABAABAABAAA@AAABABAAABAABABABBAAABAAABBBABBBAABABBBABCB CBBCBCCBCBCCBBCCBCCCDCCCDDCCCDCDDCDCDCDCCDCDDCCECDDDCCCDCCDCCCDEDDDEDCDCDCDCCCDCDDDCCDCDCCCDCCDDCDCDDCCDDCCCDECCDCDCD BDEDDCCCDCBCCDCCCDCBCCCBCBCBBCDCCBABBBAABCBCBBBABBAAAB AABAABBBAB +ABBABBABABABABBBABBBAB AABBAABBBABAABBBABA@ABA@A@A @ABA@A@A@A@A@AA@AA@AA@@?A@A@@@?@?@?@?@@@A@A@?@???@?A{l}߯ۍ̡D?>?>>?>=>>=>=>>==>=>==>==>==>>=>=<=<=<<<===<==<=<<<=<=<==<=<=<=<==<;<=<===<<<===<==<<<=<==<=>=>===>=>==>>=%>>==>==>=>>=>>>===>>>??>??>>>??>>>??>?@???>?>???>?>??>?@?@?@?>??@@??@@@?@@?@?AAA@@@?@A@ +A@A@@@A@AA@A@ABA BBABBBABBCBAAB CBCBBBCBACDDDCD EDDDCDDDCDCD EEDEEEFEFFEEFEFGFFGGFGHHGFHHGGHIIHIIHIHGIIJKJIJIJJIIJKJJIIJJKJKLKKLKLKLMNMNMMMNMMMNNNOOONNOMNOOONOPPQPQPPPQRQQRQSSRSRTSTTUUTUUUVVVUVWVWYYXY`ZYZ[Z[[[\[[\BJZhspYnlkh_FOPE;4YNS166657;N@KWg7L65bUUaWIFBJRQIPOMPRT^d=LM=9:<<:868<;;ETRONHJMODAABCAxrr~}<99;=@;lp;;LDB@?>??ABAABBBDEEGHHIJIJJLLNNQSSSUUXZYZ[]/[//``^^011//0//1/.\][[XRSQPRPOPQTQJIJIIKIJUUPTUYYXWXXUVTWWXWXXYZ[\\([\^_`aadgjelxspnkmos|~qp6;k\x=[A\EFGFFGHGIHIJJIIIJKLMMMLMNONNOOPPPQQQR7SSSTUTUUUVWXY[ZZ\\]]`aabcdegjnsvx{~}zyyxz}KOSWYXY[_dku}q}srurnkjmwdlqpe]VNL߻|vyzz|{wlaZVSQPQSU||zzyxvtrqnlihifgecca`_^]\\[[^`Z}xsulomkknmreeda^``dcedgZYVTSVyu{}qvltttojgz|kkpwy:;xsolijlhgif211103324;<;E5_aadga`_ecehnuo^MURWUROD|CFIKUZYUOLJEKLCLKO~ypqFJFQ[HAIDABEF<8:A@B?DOLGA9775;I@=AGEE><66;;88A75;96;;.'*2965::88?23C;49651-))(/;48=<<6261.5]JKH9I(./,/,,)%),2<467533548/3//:.+1733/)+0,/42,.-.,21..)'*-+.544//.14.)%(.3:<;9:8F76335202220011301213.+-2(.*)))(''%%%)*')++%%(++*+*)+)+-*)'*(*,2//,/+),&!""$$"$"%*+-*()+)(&&&#$!"%&+:6/354+%&)+4D821+%)/151..,)&(&$$! 79!878: 9< !@?:$(/ !+6;#"6-)./675I>I,TM.;1.,[TD>PI9M<=94EH\LC3TN00DICIFEIJH3.4015.469A0PS??V]FRgIHV,XUUSTQIKNJFJUQ*QLFACHCHGHDDGGGHJKLPPLIHFEC=8784?C &C'0+''8+?:_5R31;<@G6;DSPQQC9WE2HNPOTRRSPONMMKJIHFDBDFB Yej`LOO=EE./M3VSNRVRNOJ;MNUR9K4\JZ]7S7J@;8;46565>@;76734?JGD>BCA=?BAA??FGABCA@CB?>?CA@BDCBDFEFH9:9TdfkbWL>*7 Fc[XWTRROKC>01D,ZVSS`=KX>LI,044iaIpcY2=-%"Nhj^[fs:fN6A&],;R]bgbedeb_bA-R[egcmmcX*'G7l`-)dn7V$/]l<=>;lh_]TCN>LA?ns:;:;Pq`RWi|š =3U,nb¿Ʉǀܜ͊spIFG>5/QIJ*,,+*+-8+3  ==<@@;;99;:<<@BA===;<<99A><@ACEDFFFCFFGFGHGGJKKLMMPQQQRSW[^\`lihltLSsVUhš-Ā򊗜珫ù࿨Οzzv}~|}yyyvqrptpqpreb^]]_|x|xztrl}}znkmrp68qngfcdda_b_--+,+.-,.3450Z\Z[[WWW[W[alxvb}FLGHDFG@y@BCCKOQPGEC>DA;DBHqqkjBA=AG:8;8568:1,/3120./,-41/*##$$(2+'(*(+&('*1336502757/($"#$#$%&&)('&')'#$(&%$$$$$)(&&,##31(,(&!!"%+(+20-)&+'$)G:;=.: !$!  %&%$#%$% #$ $" !!q $"$  !&('&$%$#"+$%"#%%#$$%$#$"%##%%'$ # #!##!#$%$$"!   #"!!  ,E)?ED83$4;7/&($)6<#!/!-!%>:55,?,1%*.!*(+375'&/"2'')( /# .$3-)0$,27!"8.50'40"//,# ,+3-,.()$&)+#$!& )& &## #%/#&&"! !"" !#$&&&)<%)9;987651131.195521-05155622469<>>>A><;9630,$ ,) &$&(#."+488<;;<996431/-,+)(&&" ,54/%%'%' 9$>>9;<9::2'4.30 ,2/67!5&>654600...588672.,-**4=95/12/./2.-.-33,57--+-.3442020-,/323673223456*$ $@TZ`VL@/! 5LIEEDCCC@95&$,DA@BN+5;#.-PJ9XJA( DIJJGECCEHMS\govz~ZquooljdcgjsGY/0/*"77?Id|˯ssv||fyspmotyzysojfdlv}l[MB=;::;>ACFFE~ujbZUQNOMNKKIHGECA?>=;:<<;::7675442210OļĴϻ쁛½˼ϽųȳҼ˷ǰ߄àȼ˹ìƭǴŶβ׀öչųöº¿Ʊ˹『̿¿ɼú̾ȲϽ۱γĶ㈀ܮȁܧɺ湶и嚔몊ۃלӞ燐ׂ»Ɵś弞ꃏ̂֋ſ¿۸욦ؘ۝Ń͉λ܀¼⒆癌ÿƺ»ùՀů돷Čȿ͚ٲۍ僋ԧ࠸˸ሣׂߛȷ ĬӴ*/K[LOP@",F161,FC"&4LNFE(0446T+'! #%.3(#&==# $&$(+??>=$' *% //#55<9F(/40-*01,-1553/221`<=R1((($>&(0*+076:CZT17/RE:;?ABBD>Ic\ggYROMXdLLCBACCBBA@ABA +BBAABB@BBABABAAABCBBAAABABCBCBCBCCBCCCDCCBCBBCBCCDDDBCDDDCDCCCDDECDDEEEDDDCCDEDCCDDFDDEDCDDDEDDEEEDEEEDCEDDEDEDCDCCDDDEED,CDCDDDCCDEDDDCCCDCDDCCCDCDCDCCBBCBCABBCDCCCDCBCCDCBCCCBBCBBABBDCBCBBCBBAB&AAABBCBBABCAAABBACBBBABBABCACCAABBBABABABAB ABAAABBBABABBA@AA@AA@ABAABAABACBAABBBA@A @AA@@A@AA@ ?@@A@@>@@@A@A@???>?@?@@>S{quH?@?@@?>?>>?>?>?=>=>=>=>?>?=>==>=>=>=<==<=<=<= <<<===<<===<==<=<<= ><<=<=<<=<=<==<<<=8<<=<=<==<=<===<=<===>==>===<=<==>>==>==>>===>=>===>>===>=>==>=>==>==>=>==>?>=>"???>?>>???>>???@?>>???>??>?>>>?@?>? @??>??@??>?@?@?@?@@@?A???@AAA@A@AA@AA@@AABAABBA @BBBAABAABABABAB CBBBCCBCBCBCBCCBCCCDDCCCEDCDEDEDCEDDEEEDEEEFEGFEFEFEFFFEGFGGHGGGHIHHHIIHIIHIJIHIIHGIJIJJIJKKKJKLKLKKKLKLLMLKLLMMMNMLMMMNONMLNOONONNOONOOOPQQQPQRSRRRSQSRSRQTTTSSSTSSUTUTUTUSTVUUUVVWVWWVWXWXXYXXZYZ[\[\dY]k_bjqjjSZLFG/JLQ07;;:>>M:CW89Y:4jURYYQHEQTSBJQNKIHZf6JP>78655899;=>BSRPMEHLPEA@BAA?@A=qpv|xn89;@=>:;;=<<>@?<=9iba_nβx˾ui_YWUVVXYZ\\[}}{vurponlkihggfdb``_^^\\]`V_~yvrpqpojjgzwjb_]_^^`phedVS\VUUW{up~|}zznktijh|zqhrzxz=??>wmXjmmknkhd`20///23<<55gc^1c_^^ccb`ipcQSSTSPOKC@KGEFPkuRRSHAFHEGHC?^o>ABJM@FSLFI=967;;<>@HRACCI:<@=BDINNNBJJGFMe43cMSGJ<4/46533455567753555;IDFA?@;548;AEE37;87;:/..00/28:;;6<>@<666/.1?12!,,,*),,(*/36841//1/.)/+.8&,1633/),0,,/2+013/41-($%&)*-632.//22-'%+26=><::=99;H:8455347423203312235//,-+,)')+*&$%$&*)'),+'%),.**''**,-'''()(^)-+,+,%"! !!%%$$#'+*,+),,+'%'%$&!#$#+871773*&&*.2?720.)-."& ,12/++'$#!68876734}:=:9$)$$!#%&#"!'(&$$#"!"'(( $'&*#+--++.1*(*(&*(! " #"&-,-.(%''((*-+,0.)#&+,36-$0)%+)))',3=<>FC?92*($4 .8!?50'',4229AA"!,>5("" -1;*ysH5oTT[fCr\SA<]9g@A=YQR9W6KdfbXRXB?KID0FPUR\ef]@DI=IEHOGDNFAi^I{IXSX*XNbN?F4lI8]>6TclBFBLN>6=E<\,,M1=\T3TGLTUPLIJGFHLEDKQN*+SKJIHEG?DEFFEHGEINNOMJNKJKHIHE@;8&+(#',*$3L=A9E131:AT2/9VVKF@C744>FGHEG?FDC@>:5;A?;:;:9:9:>=@@>?@BDBGEDIHI @`db`]VH7O!&UaXTVVUTND:3*44VYNPcK;\LFT"1:-QmOteXE*52'D]kZUn;<5M;F*#.BYadbdddcb]:-UX\ajjobaW E+=;j=(4lh8e7&Pj9>8kgehY9Y'E)%iz;=;;tt=sn76[,%+\imkc8heGjffj^MD5?341("$ +% %    $$.( !%8   +    "##!%$3$5(",<0*2 '6 (-,$"#&%',%"$)1=7 %7-%&+,/-0-9QKVWNKKL`u^ /$(Sy\B.,+6#+**%)<8R죄MS_ uzx{]YF;<)EHL(-/..0/;'1=(*B-*UHFMQJEAKJG>BDBAB@LR*8:+**('(((+/15;OOHE=CHL?77:789;:7iluxoh32154_]g10+./1/.---,-,++-.11/213453546799;<;9<===>?BB@ ?A! !!! "#"a#"BBDBCCDAAEIFADDADDABJGKIKLLGGHIFGHHIJJKJJLMNPMMOPRTRRUZ^]43fjq|HVQX}tuހޅӼ϶¾ž]~yxvy{y{vyutpqnno{sqoe\b\_`_yw{spkzyrjnrpr8;<9pgegeefdb[V,+,+3301_^Y-WVVUYY]anviS{PIIEACD?=FA??FYbHGHA<>?<><;:|[j<:8>A4;B:7:2/-,0.-.-,.-07,./2$$''(+0/./)/0016A""A6:14)%"&(&$$$%$$%&'(&('(+0(('*+$%''!''&'+#"&((&#! !#$'.(-./,'')$$'0,@5(%"%$"#"#! # !'!!$! $!" ! \  $(+('&($%&2&%#%%$%'&$%&#$$#%$%($" 6  "! " !'(%$ #!     + + +KL/!D-3:9(C3. 3">'(#3..")+;<<615$#'%%%),*1770 #( +%&,'(1*&9.(<&,).-%8*#('@%6' 2<@&(%**#0&+5+--4*/*",*)&!!  "%/"/- % #&&'% %)!3+28:74110//1/-2836235743033234888=CDCB?D@?@.<=;5-$ $"&)'#" !# 05599;986330.,*(''" &8%21&%*9!!@@9'-89767535;::<<ABFGIIHGE?umc\WURPPPONMIGEEB@@?>=<=;98654445guǼŶ½ðħεًĭѯ䃍¿ŸĻϨڂƴŦ°ȇȺϺŷԀÿʿºʷƷ¾ƾйŻȾց׾ѿШƓ䗳¹㻴ʸݗر֓ªМҋ򂇄̽ˬޫ锘틚劮״⧓ю֌򗩊艄٦¾¿Ŀɛ̺þ紵ʔʟʿ赃aɬѺєijۅ؀ⲛÄ$/8QSSXI?64642&9S@$ +OQ)>;R.#IF?5783/& $!8;=B824>MSD>)06;:1F3 $$$-4-%'(; !!"$"%+)B>A$$;#0$" .6V5#)040-//0*.365.+015c@69+*+#@''+>@658:;[bIQH1/($'-574CT.(&*6"#%()&BBL<238BN?:-N)175=K`-74XOG9A>>A<>DIa_e`QMOUUdU9EBBCBAAA@ABBABABABABCBCBCBCBCDDCCDCDCCCDCDDDCDCDDDCDDDEEDEDDCDEDEEDDEDDEDEDEDDDEEEDDDEDDEDEDEEEFEEEDDDEEEDDEDEEDDEDDEDEDEDEEEDEDCEEDCD EEDDDEDDCDCDDEDCDDDCCCDC DDDCDDDCDCDDCDDDCCCBCDCBCCCBCCBCBCBCDCCBABBCCCBBBCBDCBCBCBCB CBBBCBCBAACBCBABCCBABAAABBABABBABABAB AABAA@AAABBABA@AA@A@AAABA@AA@@@??@AA@A@A@@@A@A@?@$?@@A[ڲˇzznQA@???@?@@@?>? +>>>??>@>>=>=><==>>=>= >=>=<=>=>=<=<=><<=>=>===><<=<===<= <===>===<=>=<<= ><=<=<===<<<=<=>= <=<===>>>===>=>=>==>>=>>>===>===>==>=>>=>?>=>?> ???>?>??>?>>?>>>??>>?@?@@??@A@?@A@A@@AA@@@AA@AAABABAABABABABBAABBBABABAB +CBCCCBCCCBCBCCDDCDDCDDEDEDDEDDEDDEDEF GGFFGFEEEGFGHGGHGGHIHIHIIHIIIHIIJIJ"IJJIJJKJJJKLKKKJKKLKLLKKLKLLKMMLMLMLMLMNMN MNMNONNONOOPPNOPOPONNOPPPQQPQQPPQ0RSQRSRRSRSRSSTSTSSTSTUUTTTUUTUUUVUVUVUWWVVWXWWXYXYZYZYZZ[Z[\[\[\\]R<`ZeYfxoh_N9?G+NRT17:<;<=JEDR9:c>2eYRU[UHCHUQDCNMHKM^ifHQH779878998>>>KPLFELJOF@BA@?@?@?tlr}{rm87=@oej;FN@<=:;99;;;=?==::<<=>@@A@BBCDEDGGIHHILONOSWXY[0100022341222323432444b`aaeoh`XY^YYXT\e__]^be^^ZYWWXX\Z]\^`becbcdefgglklkm9;:;spps~wvw ;mkrqiheeb_211/./296Qb``\`ab]^a[PX_bWKuLIISRQMJEHEADGMXVP[ZFAACJPOBIB::612-&%%&.559:;<94-'(-12255/,./7A@GBA9770,0-@DB3/=$*+(&')(&(+0,11.+-.03-,,/4*05;0,*),/,---*/251202,&%%))-532.0.03+')-36:>>::;:8;C984763355300041.0323.)+,+*))++)#$%$$))%(,+&%(*+(('%)*++))&&&%'**,G,+%&#!##$$&',1,,*'(*,*&(($$!!/683464,'&,/2432/-*0=.4",6:4/*)'#!778  !<>96<>&#!! ,+'%$#$""$()"$(%#$&"$'! !'(!'# "!" !$''"(-.+%'(%%''(""&$&%,/(#*&$#$# "/9!A<73637<*/! &%+4>5,*&*-/-.9:>#:*&+>"=FDB=579;Ei}B$TeS\@Gd]*2Uag(LJ5+?RDW0_5L6[.S7+UFRD@L?@FDBCCCBA?<<>EN),+RMGB?@;:ADABDHHJE?<@AAEFHMMJHC6*/'.*!$/3:RAIY16>GSVP-:URA9CNgI9UTLONONONLNNMJGGHEFDC 6dX?8KPO:_ZV),-/--STVTPPPNK4kAK7eLHDZ634-I==?=@A@CCEDCBDCDB959?EJG;:FHJHGB;8EA<8998;<<<9DCBEHECA:;;=B@A@EHHLP7M_cbc_XLB41(,#.\VOMVXVSR>3R0>TWLTc`?[TML:5;.2eJndYS1*(/DScZQv868ZA/0:+ -@[cdegbabfG(NUZ[bconfcL&%[9g-Vok55W:Y36=9746lT;i18N0A=;=?CFSZS8:2')))(((*+134CID>>FHNA7887889:?:jhowshb1.27f\a0)/.12./**,**)+*-+++,-/100/0133449898879;9;>A???!"!!#"$%##$#$IIJJKSPOOQVQSSOSYUWTTUWSUQONNNLONPOQQQSRPOQRRSRUVWW[0332gkt}ISQ{à鄚ЄĹ˨܀ðſ̶}{{z}{z~utrqmorqrog]mi`bfe\ysonkqmfksqjq689:7igmjeea_\V--++*++20J`^\WWVWUXZVQYch\LoGEDHDDDCBCA:78>GD:8dg899\96568855.,--,--0.,,-.10--*('4-)4/(/'/2744-8EJ%5(/+'(%#%'&))&$#&)))*+')'+((*(!" %+$*##'(*)'##&&%&%#!"#(..2/.'%%!!&$/57)%.!!! !" "'# ! ! ! #!! "$'**'''&')/'%#%%#%&&&#$#$#"##$$!  u  !"(*%!&)    +   ! @S'3:/:&-<617:$<,'?C+%I+(7D@4.0) !)+-,/2-,52('$&'$# &(/)*$&0.0,!*-33,)+#3 ,@?;7.!#"&+')(('!(2'#:<6878887640/.+)&$5,'(&/.-!! :9;868975$?$+=.)&2:4597766::<;9:::;8/*.59@;/,9<;:72+(3.+*,.+,--0.984694//-0026520477:>' + 3HSVWQLC7)"HC=/@DPQ(&4"@)/+*&)P=/N&)-!\11/020^[UTQPC" 3NRM,)(@;HILME |}~}~}~}~}}}~~}~}~}|}~}|}~}~}}~}~~}|}~~}}}|}|}|}~}~}~~~~~󁛂~}~}~}~}|}|}~}~}|}}~}~}|}|}~}~}~}~~ ~}~~~ ~~~~ ~~}~}|}~~}~~}~~~~}|}|{||}|}|} ~~~}}}|{{{|}~}~~}}}~}}~}}~}~}~} ˚ںƿ°蚷IJúνდކ郍쀛eנ趲܂մԷ㈆9  + +!")U룔ˮіߵrC   +  +  ! ! !! !  !"!Z"! !!" !"""!"""##$$"##""#"")5˾÷ǧҧÿ6h]$! !"#""!"#"#"###""##"##$$##$%%$%&&'(()()()*+*++,.---..-.--.0134455898;::<:877554is÷µ􇣮䀌ۿ񁂁рĻεĬꉜôûùεƪêǯ̭㎝ŤȻ̀ĺIJſï䊍р򃆂˟βđƷùſƹꄀպ񅄄ŁЭѣЎ㼰ɹ㙢žߙⶒˠ腁вȾ쳬۲ȺХҲɦܴ꼸ǿԲÌۤވԞӶɾƵӛ򊑈ɅҾκÿĽžөķƻ̰ԢԻ”a͈ӊ̿分߭ Ҡ! &97AKXVQJJ2,-."$KQB,4H*H*)H+GMCF4?@33'&! +:8>5+%/BQD9)25::31P."&#)50$%'%2%'(&'*,&?;7.* $ !-..?)24-+00-+0362-,459`:J0-+!A$;!+/1106;BjYTR6,# &*-.4:3I@)*('&!#)'# ;?>???>>??>>?>>?>= >=>?===?>=<=<==>==<==<=>>==<=<=<=>===>=>==<==<=>>=>=>=!>==>=>=<==<=<<==<>=>==>=>>>==><=>= >===>=>==>>?=>=>>=> =>?=>?>>>?>=>>?>?>???=> ??@??>>??>?@?@@???@@@?>?@???@?>??@@?>?@??A@A@ A@A@@@A@AAA@ AAA@AABBAAA@ABAAABBBAABAABBBAABABBABBBABCCBBACBCBBCDCBDCDCCDCDEDDDEDDEFFFEFE +FFGFFFGFFFGHGHHGH +IHHGHHHGHHIJHIHIJHIJJHJIJIJKKIKJKKLKKLLKLKLKLLLKLLLKMMNMLMMMLMNMNNNMNMMNNNOPNOPOOPOPPOPOPPQPPPQ$PQRQRRSTRRSTRSTTRRTTTVSSTTUUTTUSTTUVUVWWXW +XYXXXZZXYYZ\\[\\\]aP_Usy[_ssmcPt9G;UST\56789<>QKJe<7C1caXUX[EFFKOODELPTSWej;MO;78998:98;>=?MJFEMFOBAAA@?B@B@=rp{zrpr8;@>ij7GK@?<88989:;;=<=9<<>=>?A@ABCCBDDCBDDFGFHKLLOVVWY/000/]10112333254423447;:toCprpu{rrtq<|pmkheedbb`a_abcdccdfghjlmnn87:=<<;soq~zxn<>LJ>AHFDF@B878;;<>=AC@=8214//336>BA?CMBEB@C@HNE>?H?56@76127;;HB6567;;55=9>@DQF>@>6668>?IE975254),,),.178:=A:4/)*15467520.)3@CB?>886.,01XQ=8;I(-.($'(*(,/++130-,-12*(('*19:4&&((*/,-,,*.35.41/($%&)*.643-0.-/(((1469=>98;76;B87564/26530004/1/102-)*((('(+)($$$%%((&()'$&(+*+))(+,+1/+)''*+0..+-'&$ =&%(#"$%&/2,++,)((+')'%##"!,101247,'$*.--)+/.06+)'#&6! 741/.,*$. #!!!! =405.-" " "(*)'')-%!#'&!%')'"!"#34$))'%#""#%%%+*%#'***)*()'#*+& "'1-( & !*="1--8?6,2%&#&&11&'0)( !&+2:*(4>#=-:$#" 17<;4738E:wA)?^\RG<\>:V[]k?6Y-H<;TL\D7fkZ[RLBAMX:+0^\]]VHG>HAG?BI:9E876@TYLX:55.---ZSXYURPOLLOS=W0*OZ347eR,JD8G=A@BDDDA>@??ABB>AFJPR8!=__fcWQK@U$ .U\SLSQUTPB8-2CLUS`adOUVULJ)90)N@jcWN2 0HZYQKUof35aF?< +&1Q_gjhfeagb9;OU[ahnpjo`F81EYT.8lgi798n>;8698[>:-r7?G@w:=?<;;tmh56.?@8^::97k6IP^a]V8!&,8A>3--  +%*!$$ %&"$  %1"%&#!,      +    !""$+"#)F>43"$%$ +  +-)!"&021(:$$"3E#% 93+'.,).*08=INOF?CG\Ug{ Oۼ:;/,$.#%"226,򢬱851m 1.ڀټuqxyYt39.NNNP,,,+*.2@65H+'1&RSPOQRACCCBD>>@BHHMZ[3<<)'***(++(./.6D@;n=@?@@>>@@:;9=?<:6667DA55966724++-//11./.,+)&')&&,)+-,(&(-)-,./+583++3*%&-''#$(++51)%&'-/+,.)**(0)#&%#!! $$+' %"%)-)$!&&)('$$ $-10,+%#!!$&D@1-19""" %'"! !! $"!#&'**&%&$#(/&$$&%"#&'%!""$!#$ %  + )$!%#$  +   "  +  "K%%;61+%8#!454<$ 6,$ 0,9&!=>44-+#"*3!2012.'("(!'""$(7$7"! *.(!6051)#95:/+;#;2,++%"##$;c414#". !"#!"!"!"" ("-!! #$& #"#"-1!&-**+../,*''(48722-#'%)@,,,+++UVUW[[X//0125;8;< 4'+%)#.#%$+&#,*?=9:97975510-+(%$(%%& !-*%*!#?9=<:9788655&31680;:140426697425668:7218=.12//4?=;92:0+,+,'(---/876:?83/(/.1542/258;=' +/LRYSJE>4=@D?:@@EFC9.$ 5@DHNRY]e689:99765568;?ELSY\aec^]]agq]s933(6""0))*1CRɭ˸{k]wfYQOPRTWXWTMHB;61.-VTSRPOPQOMJIHFEEDCCDDCB@???><;9866lMɿƷ׾ֱ˽Ƞѵ̀ī˩Ͻ¹ǸɼƲ寇ǷȱĽʽùԼ派҆ùŵ񗐏ላ§ۀӊ̬ϼˏ݁Ƌۗԟ鿰ħ卖貒ߧɽߩȶűゕټփώу֔͟ÅĂʾ´Ɗü԰Ӿ¿ɭ֝˺οʬ򙺀ٖGӲ􄅊ʛٸ- %<&>BELVPPQ@84#0QQA-7CABHJScgdOKMQ^X[`V@ACBBABABAABBCBBAABABABABABAABAAABCBBBCBBBCBBCCCDCBC BBCCDDDCCCDCCDED +ECDDDEEDDCDEFEDEFEEEFEEDEFEFEEEFEDEEFE FEEEDEDEDEEEDEFEFEEFEFFFEFEEDEEFEFEFEEFFEFFEFEDEDEDEDEDEEDEDEEEDDDEDDEDDECDEEDBCDDDC DDCCCDDCDCDCDCCDCDCBCCCBCCBCCBCBCCDCDC DDCCDDCCDCBCBCBCBCBC BBCCBCBBCCBBCBDCCCDBCBBBCCCBBCCCBCBCBCCBBCBBBCBBBABABBAABABA@A@A@A@A@A@?A8@A@AA@@@A@AAA=\\}uùxmjk٩D@AA@@@A?@@?@?@?@@?@?@?@?>?>>?>??>?>??>?>=>??>=>>?>>==>>>=>=>>==>=<=>=>=>==>>==>==>=>==>=>=<=>=>=>==>==>>==<==<>= +>>=>==>=>=>?>=?>=>=>?>?>?>?>=>>?>?>>>?&>???@?@@??@?@@?>?@??@@??@??@@?@@@?@@@A@ A@@AA@@AA@@@A@A@AAA@A@A@@A@A@ABABABABABCBCCCBBC +DCDCDDCDDCDCDDDCEDDEDCDDDEDEFEEFGEFEF GGFFGGGFGHGHFH#GHIHHHIHGHHIHHHIJHIJIIIJJJIKJJJKJKJKJKKKLMLKLMMKLMLLMNMMNMMMNMNNOONNONONPOOOPOPOOPQPPQPPQRQQQRQRRSRRQSSSRSTTSSUTTUTUTU VVUWUWVWVWWVWXYXXYYXYYZYYZZ[YY[\\]L6c]jcrwreT?>B@0RVW/27789;PP@^<7K85fZV^eUOPVSLEJXXYW[cnsJD9569;=98:9<>>PJEDOTL@ACA@@BBBA?upx~wrss9BCkf7AF?>@:88:;9:899:;=?@@>?>???@BB@AABAAABCnFHHILLJNQPRSSRTU[Y./0/2332`2ed6;<>{z{}ECECCIF@~|zvsqnlkkihhggiiiklmkk79>;vuuqtzr|g;Zq\9HEFFGFGFHHGHGHIHHIIIJKKKLLMLMNMNNOPPPQQRQRS3TTUUVVVUVVWXXYYYZ\[]]^__`bcdegikjklnoqstux|PRUSRRQTVY^gltznƺSXf>Nar?CC>uojfdjj̼ȼ˹}q˽ütonmnprrrokhb\WSPM}{z{ywutsqomlkjjiigfedeiZټ{vppsrkkhgyvtksl`^`^^_alwhT\ia`^eZHIEKQ|ulxzsyjebdeddgopps99<>=:hks8hfc10[[ZZ`]VRVVZVYZ^hfYVTUVWY`bKIIH@SKPONH?tz@GKJILLLHEHCCCALSG;<;@DENZSN;6=?=>>==;>:851.4768=;:69ADNOAMAD@B>B;CA<6+583/1>QTNqH4567' !# !  "" !"!;9821""!"!"!"#$&'(&" #'""$('%"% #&&$&(('('&&(('()()+*'(++-.)# "$$!5(-&45.+0:@;9:9,'%&%)116;:=40224=7O?7BMW+Q2=0>E3CcF$Nqd`ZLFaI`ooMV998`YTbE=5<5468`U6*a@=8X4:F:DC9CENE:0=JMLPMDKI310804Z7,,7JBWO>7;@630*M7792+Q0VUTC2N04;003V@<:(F-489==@ADJFBCB;?MPQKA>A<8=82/.,NLNNRVUTTb3357:A?8NR\Q1+2%GF;3@PT2<5T4TTE@CNQF>Th-33/VSRPPNMMNMJKGDCBCGB 1>TFK-,--RW\WSSQLOPM_D9UC3:`ESi8-L7;V-36EFEBB>>@@BAEHFA-(979>ACCABD@=@=<;;:=<;>A?EMH@A@B@?@CC=;?;<:2/HBZ__URNI=7!07gUBNNNJIB9.2EGRXadRQTWUNF(61+::]fYrO7:;S`YLCK__03dM=I"+0,'RY_4gcbeejX,GUX]`ciiglW@0(AVhA>qkfekon9;6:;fg>>0p<2(#[?>?@><=::ok4C7F2 Ffu8785iGI_bWA "+/29=477%*. ! + !$(*$  + &/'"$ "   +  $#%p: ' "$,$86.$ !  + + )#"'+8=7%96*'*4C !#>4.%'/),-/58@OSP><@G^Xaw LJ +1^Je;#1-"'#!)&>ǘ`30MkɄ{Բ}z}`>576+ORO(*,*+,.@;-F,'7,+VONT\PIKOJE@CKHIJP[bc=1'$&)+-)),+-/3HB99IRL;78::;=9nlsxpefh4:;a\,(0365,**,*))'(())**,,++,,,++-003344422023533555797998;999=;??!!! ""##F$IJ(*,0dilqwz|B@A@?CB}}=vwvuuqpmhdaa_]]\[[[\[]```2497mnrsziEdd}ՀǾ获􀄆Ծ˽οĿ~|zyzpoplllhoxk[ajdddibUVQTZz~nmhijiijmlmk659<;9ejq6d_\/-TTSRWTNKOPWUVV[feZZ[\ZVS^]GFEC;G@CDB?9nq;@?=;<<<:8;8:97AE=353799>C@=/+2424541--)'('&*,+.431+()+21+6-0.-./*/+)%&'$"#1@AA`;*)(*02-..*+*&%$ "")$ #!&!")$"&(%"#&)$""$(&'$$" !#B0!", #"  #'"  !!  ##!#&'')%%)&&)+&$&'&$%&%$!$#$ !"!! <" +  &$'!"   + #%  'O "'<8+14&8.90+ /&-&2,:45/,%)0.3/,-230-*" -!$+65%!%"2%.:531)(;0/?=*2 62.5#52#2$!/$  " "" !+#&"!%&'' %(%,$'(++/102//..)+3574,*-*'-($ A>AGIIILJX-,---30$,5=4 %&*'('#%& (6#!?@>;977677641/+)%&"1-*- -( -(- 6;?<:;:7894>+5+ 3(-A$!8"0),689772357;8:><9$#0.-15676320.0..++,--.1439B<332335567/-0+,)" +4KRPGC>9.")M?096/$ 57BFOPA@??<5- %(IRG@)#"=FA619HD!$K<02 ;AG&NMLMNVC0:?EIMRPRU@-@ +#8L&-SRPOUZW.-(*-MP/0[.$=./121.0--SR(( & &CQ)))'J*2BGB/|}~}~}~}~}~}|}~}~}|}~} }}}|~~~~~}|}~~}}}|}|}}}||}~}~}}~}~}}~}~}~~~~~}~}~}~ }}}~}}}~~}|}}|}}~}|}|}||}~}~~~~~~}|}~}~~~}~~~}~~~}~~~}|}|}|||{}|}|} +~~}}}||{{{}~}~ }}~~}}~~}}}~}}~}~} Я߽Ž̶Ϫ׿ꆃ܅c޽⼴㺌󇛤􈍃ƿųóo    + %Ez۴Ϳ+\$          !!! ! "!! !!"!"! !!###"#""$$###$+7焖Ϻ臞¾쿏P$! !""!"! !" #$$##$##$%&%%%&'&&&'((***))*,*+,,,-./0/.//01012435779:==>=>>@ACEIOT\37;>AAA@@??<9;>CLU\bhlmpmjhmvX[\f®NA9'!&(&7N]dà|׾ҳo`rb[YY]__^^\VNE>830-+YWUUTRSPOOMLKJJHGGFGHFCBBA@??<;;99jxľŦDZ߽ʻĿȢٻƽƜ׽ɵϭǚòȵΖîɿ;ǴԸҺ̲ÿȿ¾ߞݫҵȻ➄ڄŃʿêМ˗ۀլ݀ƥбԔì͹Հ뽋ȭҞǺƴˡ뼏Ņ܂®±ߣ񀅫̅π܊ͩʵӳƒᗖŤُÐ˯ʪ߽үɸ̃żٵٟ醈Ӏ׬ ʀ"(8)50>MNUNSXB3/4SK@$*05LI1 (1N&&)MB,://#,))38:.$4=9PO2(267256J23!$'+&(%A(7$('%%&&*&> ?%$!3&& +/8%221-0.)+262/-1<6am=)!3J&94:+/.++19;Q/UR9-$#$',**1<8"",06AB4999771D19\T_\C1NM-604I_231YHE;;@:?@??@@??@?@?>?>>??>? @??>>>?>>>??>??>==>=>=>==>=<>=>===>??>==>>==>=>?>=>=>==>=>==>=>=>>>=>=> =>>==>?>>>=>=>??>?>?> =>>>???==>???>>>?>?@?@?@?@?A@ ?@@@?@@?@???@A@AAA@A@@@AABABA@AABAABBCBBBABCBAB CBBBABBCBBCCBCBBCCBCBCCBBCDCCCDDDCCCDDCDEEDEEDDDEFEEFGFGGFFFGHGGHGGHIJJIHI#JJJIJJIJJJKJJLKLKJKJKJKKLLKKKLKLLMML +KLMLMMNNMMNMNOPONOOOPOPOOPQQQPPPQQQRQSSRQRRQSRSSRRSTSSSTSSTSTUTUVUV +WVUVWWVWVWXWWXXWXY[[[Z[[[\[]^]`Z[_tsjssvkVJDF@ONDCN_O@>AA@@ADDCAxpr~{urqs=C;39DE@?B>899:998!7;;9;>?@??>B?=?>?=?@??BBA@@ADGIKJI[KJJLNQPPSWYWYY]__^_imorstx}HHJIJOIGDCCCB}{yvtsrpmmnonlklmll8<KXh=DJLIDA=<;;974214:;;<<8976=;?E>333:B@;6ACE)P.0/3;M>@NP95638<@=AD==?A<3167<:31<>?9:@@;89>@.')"%5=775++.()5:5*$+6-$"/8778:862,-00I4*)'0N)(B#F#'*)-/++1/.+478&$1<86431.05-*2,-1.*0141641,&$%*)+41/,/+*+*,*.135621311042/,020./*)-)(,,0.*(*(+-*,-+)%%&)'*+*-/,')//+**)',(%('%&$#%'(&+&)%"" " !#$"""%'$)(&'&''%($# -0..102'# &'()"$#!(@.$$%5:>0.--220,>(  ""##!!  !! ":###$!""! "#%%!""!$#$#"#"$%*""! $$"$&'&'))())&&)++',,+,1-'$#'&)&#$-03!*$.7:9>.-))0/(*.6;?:24118DC>2--CF$#DA61.'-0,7@JyCUMa^VN;VKXTJ`i;84\6%:7B[<8Db`]TJFMUUUPgUT]X^RP7.8;6//Y2/1/,T/TMHO:->J7;14RSGK+IC+47:=?>?BACCBA=FKMIICB@EKH?>54=8558411.)0,2+,73fF28JQE$.G:1K5PZMCT3LTF>>C>D=>>?@>>>BADJJA;<>DDCDC>5BC2"98 &"&6B!"!?@BCBDDLMPWZ_djntxy@@A@AFCCB@==y=90443558:A;,.3667651-+'&%%'*0112322.*-+**(#'',./*'0--8 ""$-?43@D0,+'-22-/0+)%"!"# %&& ##! '- !& !"  $"&!!'%$$%"!"5&#1/!# #" !!$#!#!  !o!!"$%$$$($#%%$#%%" %&#!""!"  8 +     %  + $$!"!% ,M)4-:71.$4+60*7=! 8  %2"%9740)&)../.=0/5/3-/!$)#"/1&1,%$511:43/22/*)! 70 #:21"&.)!,B7- %"%+""#"!##%$*+%("&%%"!% (&$+/-&)*+.--/-/-.-)/232/+**073)'!&#""'%!$%"'#))&* 7)$25* %#'1&%#&"! )4 !# AB=;67676440,+(%$31'*.$0...!BA 89?<:9;<;7456":' ()E,(&4&!!(585511467779;7,0-/-22/03140.//.0/0/...345=<5112776772.30-7-( />JPLE>=65  ME.,DNN=EJDB<0)ATKB(??D8209@ #?0 5=80CHHMNRN+2@SMJQTUT+*+-L/-/%N_,: &,11010,++*P6( + 0OS(P')&&,CB3}|}~}~}~}~}~}~}~~~}~}~}||}|||}~}~}|}~}~|~~~~}|}~}|}|}~}~}~} ~}~~~~~}~}~}}~}~}|}|}}}|}}~}|}|}}}||}~}~~}}~~} +~~ ~~~}~~~ +}}~~~}~~~~}}~~}~~~}|}|}|}|}|} ~~~}}}|{{{|}~}~ }~~~}}}~}}}~}~}~~~} ܞܹػǧЪ׾󅑑ꋛb܇侧ĩ񎈁یʘv + +  * 6kʼn}_I% GNs) +  +  +      !"! +"""##""#""#$$+S򶝏Ǯү㐲휧޽߇)!!!"!!!"!!!"!"##"#"!"##"# $%%%&%%$%%%&('')***+**,,,-,-///00010//001221221232444689;==>(&8)211.0.(-240/-96[M`)8I&%J:;(01.++7;?X`]A1+&""'+**.>>??@??@?>??>>>?>?>>>?>?>===>>=>>=>==>>>=>==>=>4?=>==<>=>>>==>=>==>>===>==>>===>>=>>==>=>>>??==>>=>=>?>?>>>?>>?>>?>??>?>?@?>? +@@A@?>??AA@??@@?@ A?@?A@@A@@@?@ A@AAA@@@AA@@A@A@@ABABABABBA@A CBBCCABBCBCBCBBBCCCBDCCBBBCBCDCDCD EFFDDEEEDEFEFFFEGFGHGGHHGHJHI HIHIHIJIJIJJJIJJJKJJJKJJKKLKKKLLKLKKLKLMLKLMMMLLMNNNMNMNNNMMNOONNPOPQOQPQPQRRRQRSRSTSSRSTRRTSTSTTTVTUVTUUTTVWUVUVWXWXXWWWXWXWXXXYZZ[[[Z[[\]]]^YRbpwmqrvpUNEFFCWSX4:;::KB8:9=@=;>??AOQKFLdYC?ABABDDCCC?rny|vsrs>@A;F>=??@A9798:89987689:;<::<<=>>?@>==?>?=>?>>>@ABDFGEEHGDEFFGHIIKKLNMNPOTV[[eba``cchlnqvABDEDKEECBCCCBB}zwutrpppromnnklnv=xxztnneqjLr8`o\AFEEFEGHGHIHIIJJKLLMLMN OOPPQQSRSTTSSUVUVVWXYYZZ[\]\]]__aa`bccdfhijkorsvvwy}}~OSW[_adeffeedbdgo{pvy{zvqxENWb7AKSXYRNIHHK{Ěӯ{oрx®yqjd]YVRQQ}|yvustrrqoolkjjlaeŵ~xtw}uttpvpmvnh`bc__bgibeqwfYgmeehaULORTUUWUPsnnx|}{rnnkebadhcgmml8858666556if31001\VXXTQTZQGOWUZXZa\WZYac[_\JEGJGPRQPI@CCEFHIKIILJFEKI>CDDBF<;;CEIC;:==?B@<<:88876989<:9;;:78798=G=3656:3211:0)/222?NG=DJF76669:>=@?9:<=:439;?6/167>5;>@88>;6/*)'(5<<6+(%#,1551.L*-)$)4:9:;<9720/22B.Q)(/F&&#C#&.+,-.,.04";7.!/>=64134,21++1,.1-*///061/,"!%)*.520,/**--+*.10012/01./00..00-+.//*.*-.*+,/43,,.*.0..0.+''')(,,+-,)'(,++)('%'%$&%&%##%,,.0.0)&%%"!'&%))+-23/+%&-.-*)-(&"!! #0103158,&'-)/2&($#$2+0)()37;;,'&10.,*""-  "%#"! !"! !#! # "#!!!"&(*-$!%*-$'$#$'%!"!+""!$%%()('&'-/*))()(&((&&(&$!"(13 %(%-7=8"136$)45-,*7??4++-8;99=71%*8@HB4*23932:@"#DJtRfeU`WRLLSTJU`l<;_YV4@;1,-A/CJH<8-J=/486<99;]XNP+/,RWTO*03<6X]UAPH0DH)I607>EEEHEBDFFGEFMC>D<@AIKKKH@0/28B??BDGHLKJ*I4P;T0/151(FZ294\R;S9HQW\B8AF87==IeXV=630,VXUTMMLIIJFBEDB?1d^\]WI9\X<88QD3YX\-VPUXTRQRNNMOOP.E:]W<@=RBM2_=QE7@T-H?>=CF@FGHA9IHE<9A?<<;7:@B<9:;CBB?@?@DFGGC>><@ABCCA?CHAD5=..AKdaYMLJ46.!3UN<@JIGB?3.9DELbYIPWYSSM=+,0,2Mg`L0/0aMZIHCH1.,Y_I5=+ $.JONTWR_]acgW4_\SPV^fcba<[F)>W\/bmheidho9;9ig;:E7v>9Z0e; ?@<;;9:7nl^8FH8-,]pljgi65K<;MRP),,+.1226MGMK0-//X_bZTMGGKMTKPTUSQX^adX4;1+,*-/.-./18OQF@JeY@9;;::;:===:llyvniji899,3269887-,-,-*+**+))*,..,,/1/0013<43113345565898757666556779979<<<>=@@CDKHJJKNQUXZ^a66799?;>;;8;;=;98998:9539;38655;2127887103578730-*(&&&+,043455320.0,+-($*'*+'%#!)!"##$.?807:6-+**...-/,&# %%&#!$(')"#& $%$ "$## ! 2!#&$%#$"!#$2"=! !.-! !  &$"$"# " !" !#"!#&##$$#"$$"!#$""!""!""     +       + +      !&"-I1;<1:32/,/1*28>##853 $) &4%"*840,)),-/*43513+,&)11#!",#$#*)+)1 #4.-(,28))?)$=5 (9 .-"&4),"04/,!&7+%&%$"#()#$''%%(,)"!!$0$!(,11262//225103-*-),,2454.$#" !&(-0/.$.0"'(&*$'). 0),#!$#?@>;754122.+*'#:0//,&.,'&!A??:8<<;:;;897964)!30#&'0&*6#+" /12424724782+9881086322,0540./066411136799643257677522306)* .9RSK@?<(!(D>.4==<74).79>QJ?DIIC@5&9RP>%#JG9)) 357<>6}|}~}~~~}~}~}}~}~}~}~}~ +}}}||}}|||}~}~}|}~}~}|}}~~~~~~~~~}|}|}|}~}~}~~~~}~}~}}|}||{|}}}|}~}}~}~}|}||}}||}~}~~} ~~ ~~~}~~ }~}~ ~}}}~}~~~~~~~~~~~~}|}|}|}|}~}||{{|}~~~}}~~}}}~~}}}~}|}~} σɝƮҦ슂뎔񆑈ܩa‟㨙ʪۀŒ惉Ȼջx +   ++2ԙǃgu|᧻[VY\             ! "! ! + """!!! "#"#""#$$#$#"#"#(@Ƙ…̫ѷĭűǽü¾킡D' !" +!###"##$#"#"""!""!"#"###$#$$%$%%$$$%%%'(()()*+,---/0/0100232223323665799:<>=}qzrvȢtkifgiity~yrίvvvyxvtpj`UMF@;642100\[[ZYWVWYYVSSQQQMKJHIGEDEEDB??=<=ʱҀʹ˴ϴǮìļʸƿ׾Ų㓯·ى݀ȳʴþñ̶ź®偋½ž÷ǁæ僃􀃉ÅӽحᇝрҷޛǺ㍛矒뎃ϻꏌ܉褆֑߇˚йúׇீ̝̓ή̴橄ᵶжʩ܀ֹݶ祆م迋Ⱦ˾¸Āäõа˒пګޒңŽÊH ,,5*?UXMLSYN5916JG,%1)DI>#'SNK(**&<=:*+9)#2=9"-#.Y3,'+22.41A3.3),914%*)%'*),! ,(,&8!$*): )&4'122/.**011/-0;3U8e2J'HF@<%10/-,/;??>???>?>>>=>=>==?=>=>>>?>>==>?>>>=> =>>=?=>>?>==>?> =>>??>==>>??>!??=>=>=>??>>>?@>?>>>?>?>??>???>??>?@??>?@?@??@@?@?@@??@@?@@@A@??@@@??A@@@??@@?@A@A@A@A @AAA@@@A@ABAABAAABAAABABCBABBAABBBABABCBBBCBCBBCBCBCBCBC BCDCBCCCBCBDCDCCCEDDEDDDFEDEDEEDDEFEFFEFEFFGFGFGFFGHHFGHHHGGHI HHIJIIIHIJIIIJIJKLLKLKLKLML MLMMJLMMLMLMNMNONNOONONNNPPNOPQPOPPPRQQPPPQQRQRRRQRQRS TSTSSTTTUTTUUUTTUVUVUTTUUUTTUVVWVWVWVWVWWWXXXWXXYYZZYZ[ZZ[\]\]]`oFlxisqqsWLJCEG3US08:8;=?>C85agTB<;3][YVTNT[`aZV^[Y^WXheqIE7:>>>;<=@=EGKPJI]]JA?BBCEDDDBAuot~wqutx=CC;wx>@BB>8779965879888:99;::9;<9;>>@@@A@>>>==?@BDEFDEEDADCDFDCBEEDEGEDFHKQQ\WQPPOQSTVYd57:8:=:<<;<=<==y{|yxuttsqoopppsonnoqw|{y~vmi[C_V{9SFEFGHHIIHGGHHHIJJJKJKKLLMLMNMN'POQRQRSTTUTTTUTTUVVWXXYXYZYZZ[\]^^_^`a`cdffhjllmqutvzz}~JMRW[`ejloqqponkmr{mu|KU\dn;?<=AA?=86678896:;;>>=<<9899<<998:643...130+0EC88ZK<;:=?7768:;=9::6:<347;<462/021:8316>=4/0*$&)5A@7,),((-343/--L?>&.8;7:9;753..0.A2/U,/C)(%"$(,,,-.-/48&I3 /9?<33.2.*+++-1-/0,-42326/.+##(,*/34-*+(+,-,)-0./01-.0++*--.1.*+//.)()(,.22040-//+-.--./,(&''&.,*--&&(+,.,,*(,+,-+-03258>CD8//-*("$,+)7=9888;1-11.-/.)$$ "!%+..119;0.+/(&3,*%"(5%*5+,16973:204-/0&,2#"&*## $#$% " !!!# !!"&$0*.$ #&$'*(*% " &(&''496/))*('&'((%'$"%! %(()1E**7E8.(-02*%(6@C8008>32---!#456B&&"D:5A%%%'UnI8b_]^ZKLTMYMOo9:`V114M29K;?lnc\QAFQNW:(RWc_ZOJIA1R5=KN=3D9Aa/03;`D2@_XUQIN^;"3=CT:<`fLI\SK_LML9XEYUK74<:eb[V6,/@_L!Y5?O96UHICA6522YO3+QDG^@89/)7;67.1>53T-).PZ[,7?6TG91,S4SU2a3JB37>??@CCCE@J-F=F9:)6AHOKMK:+)/47:8IOUY_6/Z[-+WMTWVUTUOPPPOMS@SSXhA;SG7`R4K;=RARW3$BDHGJHEB>HKGHGOI@@@93?E::9:ADJCDDEGFHGDB?;;;@CCC@CJE=25)<eaL20-_V[LJGDb/,XZTBD+%1DLKSZZ^Yaef71SYXQNU[]bgOIaI,:&E*Ukijfhk789oo<;<;pmlhk2(3AB44dmifdf88M7W0"8>86:?4   ,(%  + ; #  +    ' 3%,'))&$!#+7=A%)+""/, ]-,2,!"$-BDDMGBCCBEEEDEJ((*+,//10024456llmjkjhEgeddehhjiknqz|z{yv~KkTnm͈¼PͳŻ؄+ſguvstrpijkkj`djehlg`Z^a^]]dbxwnlmkfdd`ahlif55365761/1110-)*PRMKJHFHLFGQX[`YX\`a\Y`UWXRAvzg<@?AA@H<;:9:::898765=436:<3.0/214947335531,(())((',-16776410001/(&&(''&"" "" "1,'*C7-./24-,*+,,+))&!  &,'&$##$ # "$!$,)#$  !!2*($%!$$#!#!.%%C#"/ " !'$ #"!$!!!! !##"%!! ""!$! !%%# #$!#!  $&     + +    > +        $&   %"%%& $1D) 8=9:8,*.+7+,A!":4, ' =;52-#&,)0/.665-*)#, ))!%&63" 1,-,&-7% #$-!"6=*'4,)2))(1'34-32-+#+* / &) !+"#""0!*%+*#(&%;/."',,-x,/..1211,20(1(*#-0622/ 3!(* *1*.$  %%.$!& >973300,+'%##22-"/.%!)&-.,=?;5=<=9:98857%111?&!1) & HCL=972G =B?10+24;?FJMO35F-$:KLQPQR*,-WX/.>L.*'%7X.0//.WTPMN#BOQNNK+*.&=}}|}~}~ }}}~}~~}~}}~}~~~}~}~~~}~}}||}|}~}~~~}~}|}~}~|}~~~~~}|}~}|}|}|}~} +~~}~~~~~}~}|}}|}|||{|||}~}}~}~}|}|}~}~}~~   +~~~}~}~~}~~~}~~}}~~}~ ~~~}|}|}|}|}|}~}||{{{|}~}~}~~~}}~~}}}~~~}}}~}~}|}~~}}} ߯ͽ;󽬪֥쁄ઝׯቕ󈎄a͚ٳ򅇄۾ߍƿy '   9 [Ƅﱢ荞؞ﶀјT$      !"! !""! ! !! !"!!!"!"##$#"##$$$#"""##*Jö􌥮߀ɸйǝʿ痫򀅊¾Ľù٨R" !!" ###"###$#"!!"""##$%&'''(()*+++,.-../0110/1313334343234534556679;;<>=>@BCCGIJJNQ),.26>ENU[bfgjhhea]`hs}PS\fq{~C6/,-7AD>3.*2=FFbŧ{y|x{|}~sγvnf]RJC>;7765310]ZXXYYYXZ[XUTQQPNJJHFECCDDDA?>=@ǾвꀀëзƳ¹ĹźȺѾþҺǻъ籔ǶʹĴπµȵĻü»ʘ݉Ⱦμǒ·ƫτж׷슣Ʃ񿑑͹҄섄™Њ⼚ӑǡԀͳ߿1·ד۾ӂÎΟѱ҅ۻɘ˾ē栥ŵɍʄλѐۀآŖӁ網폿恿簉Švѵцû뿃ջ㮽ҿ󀇍ڂֽP6&,'&0GZRLKSUH8@?-(AF,",+AD/#RPD(*('6,44:I91#%68&/7IW01&&-+,06XB9*(&3E.56#''!!&'- "-+$)*FA*%7=.11//---/2014;cEA`FD?JF8A)21/++3;AOUiE/0)!##+-))0? >>??>>?>>>?>=>>?>>==>=>?>?>?>?>?>??>>>=>???@??>?>>?>>?>??@>?>@?>???>>?@?>? >??@@>?@@?@???@??@??@??@@?@?@@@A@??@@@?@A@A@A@A@@A@ABAA@@ABBABAAABBBABABBAAABCCBBCCBBCCBBBCBCCCBCDCDC ECDCCDCDCDCDDCDCDDDCDEDEDEFEFFEEFFEFGEFFFGHGGGHHHGHGHHIHHHIKIJJKJJJIJKLKLKKLLKLMMLMLM +LLMNNMNNNONOOPOOPOOOPOOOPOPQPQRRQQQR QRRQQQRRRSRS-TSSRSTSSTTSTSSTTSTUTUTTTUUVUVUTTTUTTUUUVVUVUVWVVWWWVVVWWXXWXZYZZZ[\\\]\[]]WA`wrgmdt_IJFBFA/R-798;:===R9]ZNH>54`ZUVWUZ^1d\LP[XSXU_fd@F;8<=<=>>?=?WPLP_QBACCBDCECBA>spy~utu=>I9kw~?ACDC=6777669:998789898:89<;9>??ABBC@???=>??BEGDDDCBDDDCEBCDBDBCDCCCEFHMNJGFFFGKKPc`bac54fcbd21ffhikjjkmmnmmmommmqponppxz}|~yucWEy^gpauEEF GGGFGGHHHGHIIIJJKLLMNMMNNOOPPQQRRSSSTUUVWWWXXZ[Z[\[]_aa``aabcddfghijlmoprtvw{~~IKMRUZ_fmqx{}~~~|{{hjp{⁑adkr=DPaox|xohdfif_{ϵ{uogb_[ZXVTPO}{zxwvuurpnnopad~xkswmomkmjcdhggecefha_fkl_`ccaa\VX^RNQSxpprw|||tvg_i`dbc`ejjmm79788865Z7755100Z\[UVUUXTRTZZ^bbc``bbVX_gllhtzIQTQMMIHDMIKLJKKIECDFFHSUHGE@9<>EF?>=<@B<=:::9;;9:=;9=?:|;>857<@>:98;9431258/(,/<:15?<:;:=64678;9779:5602;BA=7:7653>F8339:1.68/*++49400.++'-366501FGI*,7;6886342-.10?2.Y/2A&'%"#'*.-/08'A/(5:>:1,+1/---+-/,-/,,/,004,..'(-.,.22-+*).-,,)+.--,..0432122532-*/1/(--.,.24352,-.,-0-..,)&')((,++,(%$'-0.0.+-1054/12/235222-/-+)('*&(+/48>65;22),,+/+)$&"!$'-92/27?<31/0.370)$$*72:+033:?@A98678< 159)%--0( "0'%)'#!!'*'(%$ !#!" '$%&#"! ! %-#&%!%$&#"&$%%$'(''(-41/,)(('&$" '"!#%)%$#%%2.$()),)&+1=?C?A$%:151/*!!##62FHDA>?I&BAbM>hW^b]@OPGPEWB*2CC}XY^YRPPST0HI8?@_ZeXV]D5[HPQJFBb`8F5>Ahi`[[G81`fS5E+9/:_]RH9;QERML`1\U@;_0GCI;12*=+9CGF4=XO]M@*1533B,L=2E6=K'(ICF;@A?=@ABBCD\;TZQHN>=B>?;CJFJLE:/.24121396WdL;>-2337)%;b4@ZYQH::U@M<:G<@65%NOMNKIIEHJHHHLOJDBB?:<::88;;@>@DOKNHFB?><78<>=<=?FI90K1)3*MAIQMLM=P94FQ'YQQ@<>2]N),VZSmPW[aa`aN2"? 1/0PaN22&Lb`PHLIh_]XYZH&(+!:KLNT__\]af9ODWXWQRYRU]W=edT)4MJ1Ifihgj5mnn:=>7,86=6Q2np?<;;tokr839(!'1* CiigfcgmjOV9   (;;66;<,    ,+"   ++7"7# +! +    +! &;)&&*$))##%05A.)1)& + +  (#49 #"$0@/*G:/*+--,+,5<>MOND@68EJL[TO+} f4倵x;/3,->4*.3=9WFcpmv唗J~3($m¿(ɄN˄΀Ƥ}oOE=683&B"&&&(),,*<(AB83-))NOMSTQQQ*YWLPVRMPP]_Y78.,...,--//3[MDL`O<799;=<=;:98nmuwnnn87>:3.0-*+,,*))+-.-./.20020/3412001211224896876798779:<;:;<==?BCHGCBBBA@A>@MIIKM((QPLM((RSUV[Y[]^]^abbcabcfhhjonqswyxv{ybuk~򘙛¾Ԕϥ̶j~}|~stxvttsqongafincefdfggabi]YZ]~}svibjcecb^dfhii55455411S220/*(*PPNJKHHHDFLX^bebdbegdWWX^ehjnp?AAA?@@=;?:<<;;:9877987;<4573.1177342.00,.,,+,-+)*-,-462340,/251+'&)(%%$#&(!!/)"'.+-112,*+**,)''%"&,-+&'&%$"(, "% #%" !!" !$%#"!.,/"&!" u#$2'%F$#,!!  #&"$"!" "   ! ""#!"%#$$$#%&&" $%& "  !#"#! ! +            +  + !%$%!  ')&# #& +;*$<6:=8$--'0& *2.$$)(,'+%2640/-"1$"$"$ #0$""?)+01.*-/2).!#%529205&1&,+'L$ "573.0%16'**' $$#!.+(0## "(%.(&(/,0*.0-*-///0/;$7>817./2-,(.3/32*! ,4&!. ()&% .#%!$$0"4#@4!#?8321/-*'$"$/)&$.3%-.6$)0<;59:<;885899547'0'52,,14-5&0-!8866314025678<>;67741422/024857:C?>;73000-/2320//37-(=# &:1=GCBA2;$-0FDH534(L>"FGBYBILNNOO;"%9KC@=@C5  !06:?IHDCGL-52@BB>?D@BG@*JK;  +%1GNQQS)UWY000($%*&4"#PU1.-.[UQV*&   &JOLLINSN5?}~}~}~}~}}~~}}~}|}~}|}~}}{|}~~~~~~~~~~~~}|}~}|}|}|}|}|}~}~} +~~}~~~~~~}~}~}|}}|}|||{|||}~}}~}~}|}}|}~}~}~ ~~~}~}~}}~~ +}~~~~}~~}~~~~~~~~}|}|}|}|}|}||{||}~}~}}}~}}~~~}~}~}|} ԅǭҷĽ۳ƴ汬IJӵ䁑bރمƽļҹ̻t  +  + +     - S󣿕ĀѓŌlS*   + +   +K  !!!"! ! ! !"!"!"###!!""#""!""##%#$$#$###&"ǿڰſóބ¾že+!!!"#" +!!""#"##$$%$%$%%&&&'()+-./ +00102334434344546566678:<;>>>@BCEHJLOP)*+,-05;CLT^ekptwxytrqryY\[\_bjsySRJ@"/>JPM@519IQOgǯx̸wl^UMFB><<;975300/[Z[[[\\ZZUSRPQNLIIGFDCDDCCA>>vƹįɩѺ䆓ɽ֬ľÀӥ㇛˹Ǜ†ԶՀϻ»ϻҶػϾλ˴ʾɸøƿㄮĺाêϭ섍׸Ʃܹր޺νƜѩԫҺ߃ă׎үΎՀ❡ʿƴجϴ򕝞Οφ▓ƣ޺埀̅߀Ŀˆڕ𤀚Ӯ݇ڸ¯ͧƾøݮʹտÌӤ̳ݹ܃ЅǰUJC/4'&:WXYJLSWB7CJ908-&/6,<5:QP*+))>*+2<)#:!.%/7)2<==?>=EPTOaeaUM?K`RYZJF;:CCCDCCBCBABBA@ABAABAABCCBBBCBDCCDCDCCDDEEDEDE DEDDFEDEEFFFEFEFGF +GFFFGGGFGFGHGHGGGFGGGHGHHGGFFGGFFGHGFGHHIGFGHGHHGGGHHIH GHGGGHGHHGHHHGFGGHGFGGGFFGGGFGGFGGFGGFGFFGFFEFEFGGEFEFEEEFEEEDEEFEFFFEEEFFFEEFEEEFFEEFFEDEFEFFFEFEEDEDEDEEEDEDEEDDDED EDEEDEDEEDDDEDEDEDEDDEEDEEDEEEDDEEEDEDEEEFEDCCCEDEDEDCDCDDCCDDCECDCDDDCDCCDDDCDCBCDCBCBBCCBCB ABABBCBBABABAABABBBAAABAB.CEF4i[[IMYrw}vn͐~݊͡C@A@A@?>N???@?@?@@>???>??>>>??>>?>?>?>???>>>?@?>=>???>?>>>? >?>>?>>???>?>=>?>?>?@?>>?>?>?@@??@@?@ A???>>??@@?@?@??@?@@??@?@@@?@?A@A?@?@AAA@A@A@@AACA BBBABABBABABABCBABCCCBCDCDCCCDDCDCDCCCDDCCDDDCCDCDDCDCDDEDCDDDEDCDDDEDDEFEFFDEEDDEEDFFEFGFGFFGFGGFHHIHHGHGHHHIHHIHIHI JIIIJKJJKJJKJK +JJKLKKKJKKLMLMNMNONONOOPONONOPOOOQOPQQQOPPOPPRQQRQRQRQRSQQR)STSUSRRRSSTRRTSSSUTTTSTTTUUTUUTUUVUVVVUUUVUVUUVVVUVVVWWWVVVWXWXYYZ[][\^_EB+P,669:7:::AfiNQN<763k`YYX`bdbTDPYURXOScc6D?9:<<;6_mcTNE^UBCCDCFEEBBB@vqtxsvv=H@lw{ABEB;4467879:;<;;:;|::899;;<:<=>?BBCEEDB>A??BBC@DECCBBABCBCBCEADDDCBBDBDKFBA?@BFDIWUUVW]\YVWYZZY[[^aaadeghggijjilnpoooqzy|xz}r]?:o{_dGEFEFGEFGGFGGFGHGHIJKJLNOPOQQRRRSQRSTTUUUVWWVWXWXYZYZZ[\`abbabcbbcddegiijmooqsutvz{~IKLMOQTW_emv}lpqsrsy~csz{@GNZj{wstzxlͯð͸}ƹ|slieb_\YYVTQPO}|z{zzyvrpoptmjc¿vrszwsqkhb`onjggddfcf`^hkga`cdb\WSTMPNyyunls|yvvphja__befoono7999:;86cki43000.`[WXWXX3]TUW]fidbd_[YcijvpKwA>OQQONKGLGWMKJKJGGEDJPFISQFL=77;>?<89:=:7;=9:;76;<<;898:;678774,/0./2367:25?834698942344*-5EJICC>>:813:A=69E?.,=8.FEQM.3037-,*/05642.;9?%(1559:7454,/20@5.UX0>((%$&(--,.0/038K92"/;6<8/+,2/***)-/,-+(*),016/0,()+0-/40++**-..-(-100021154122000/.-32&/032-,15576.1.-00-..,(%%)*'*,*+'$$&+,-/.,*--15554069><@?24-&(),+),,+,/9==8/1++.0.01,('((.47722;A>1--0.+/*'$(>4:4*/39?>9739:6A"?15:'$,,//369./.%%0(+*2.**,/..%%1)3%&%)',/'&&"*%#"!!%&#&)'&%#&./4$%$'#&% !((''-'##%%$ "$ "#,3#* ,./-!&'(*).+.99CH*($./+,/,)((0'$=B%&CFB0-C:[g8;^TcbWGMQB=:Lfl`ZG'*=;AIO?C`:W[OSGLPOJ;7MTZUYUVC92+LCB>7B5.;;40H;Z3IVVZ^\OKMGDFNd}Og<5[WW2=>CBA=A=FEFQ7Ag^6\bCJIB\17DMF2B]IDEF6+($#41OFGeOWI7R,;.9/X2?Xe<4A0R.HJ;3/8\?>94:FH@Mg5MCI>8=?DBBBCEEH>XYNOPCFH9AA)4FIKKNL4*235676675,I<[(/355*,/Q91TWWU\/*<7D4@:958).M8%,SQPPQOKGGJHFFIILKHFHC>678899<>;:C=+SUWR1:0VJ,-ZbPgQRW]`^_`O14%1.;^O1A)CWeVPOPa_[[XWI$,+9/AKPV`\^b\af88*c) !$-1:%+>3  " + "22!!$)1D1QD3,)*)+*)/7>5drv|=>@;2-,+)+***),..--//.21x211132132240101135579778779989;>=;<=?<@B@>AGEGIIMLKGGHJIGJKNPQSUTVXY[^_`^acghlllqpsrprtvEI䗘􁇇初ɻﺤ÷ʷpljǾ~{us~{uqsppqmlb`ikkedgiigfa_UX Yzxrtogla^`cbdljgh35421Wa^/-)(*)TNILLJJ(LOY[dikihhc]W\`dupJu=:GB@>>>87-& &%-$(5 ./',%)**) ,-11400$ *#"!$ '.#+.154+)*'&',@G,9"20/!"! """#*$61/1!&$ /"&"+! # 6)0'($&2"%&&&-""#00,1+'-0101/020216@@AI9B,#,+AFLI)1(G8#IN$%(JB&)1HXIECAHEB???2 # + '2:@IGJHBIN*)>DC?>FA>0 5KMLIJJPQI}~}~}~}~}~}~~}~}~}~}}||}||}~}~}|}~}}|{| }~~~~~~}~~~~~~~~~}|}|}|}|} +~~~}}}~~}~}~~~}~}~}~}|}}|}|}|||{{||}}~}|}|}|}||}~}~}~~~~~~~}~}~~~ }~~~~}~~~~}~~~~~~~}|}|}|}|}|}|{|||}~}~}~~~}}}~~~}}}~~}~}}~~}|} w먋ι㷣ޮග񊈁טģ抈􎇆kš튌°Ѵʺʸ;     Y"*u߅̺҆Ḟႏ从cSfb?C   + (      ! !!!"! !""!!"""##"#"$%$##$-/Ưþ虯¾˱ǹC%  !!#"!!""#"#"#"#$%$%&&%&%%&''((''')**++,+++,./01001001334567789;;=??@ACEGKLNPQ*,+,/259?FR[cjqv}^cgppsx~mZ_`+&! $0BS\YN?:FT]YJpYԴ˶ŹsfZRIEA@>==<:853121///.Z[\YWUSQOOLJGGGFDBA@dӹѶڽ©øϺùĹƾĹǀɫֱެ·芙½ӣѼ̳òŹúŹƿдǼӹǶѻ޼˼ľξ¾ļíͲ߀ʡ詶̞ʅԺ⣇ԿвŤϺͿŘڜ߂ؼۃܱҘ雷٩½ĸڜԹՐȰ񇤤Гųݙ燐ʉ׀ңϘ΢Ѻھ􎜡ǴكM濵󂇀ߊ򅅂ҽԿ،\R0D-0 &/K\[YSJTT;@MK>&(E5>3/"EO),)(?/3+5(%,'+,-.+;F\V0]+070.6/RGB8.%*C)%9)!( /($&" $&&$(.E#*0/./+))15>>1`:57iF&%%$%+24.+-5;@NX5S17A&!$(,..6OcU'>&'#)212.Q?'&47175/JHT/-016?GiyeNB<>A??=BKOU]abZPK>S[TeVGE/@DEDCCCDDCBABCCBC DCDCDDEDDEEDEFE +FEEFEFEFFGFGFFG FFFGGGHGGGFHGHGHHGGHHGFGHGHGHHHGHGGHGGHGHHHGGIH GGHGGHIHIHHHGHGGGHGGHGGGHHGGGHHIHGHGHHHGHHHGGHHGGGHHGHHGGGHHHGHHGGHGHGHGHGGFGHHHGFFFGFGGGFFGFFG +FGGFGFFGGGF,EFEFFEEEFFEEEFEEEFEEFEFEEEFEEEDEEFEEDEDEFEDDEDDEEEDEDDEFEDEDEDEFEFEDEDDEDDEDED EDDEEDDDEDDEDCDDCDDDCCCDDDCCCDCDDDCDDDCBBBCCBCCCBBCBABBCBAB6CCCBCD=?m{d\JCc|aulГdqxЩ܀D@BBB? @B@@?A@?A@͎EA>=?uA@A@@>@?@?>>???>>???>???>?>?>>>?>>??>>?>?>??>?>?>>>?>??>??>?>??>???>??>?>?@?@???>??@?@??>?@?@?@?@???@??@A@@?@@@AA@@@A@A@ AAA@@@AA@A@ABABA BBAABBABABAABCBCDCBCBCDCDCDCDCDDCDCCDEDCDECDEDEDDEFEFEFFEFFGGF +EFGFHHHGGFGHHGHIIHIHIJJJIIIJIIJJIJKJLKLLLMKL#KLLNMNNMNNNMMNNMNNNOONNMMOOONOOPOPOPQPOOPQRQQPPQPPPRRRQRQQPQRRSTSRSSTUTSSTUUT +UUTUVVVUVVU +VVUVWVVUUUVWVWVVWWWVVWWVWWYWXWWXWYXXYYZ[\]^^^a;\szikkgJNFCD4'O,99;>?;9;pmxuut>CFouzCCA@>246887888:===:=;:;<==<86l544423120^^]YZX.ZOTZZbifffc\\adf`WyMQSOPNMMS_PXMJGIJHGIJSNLOMKG><85;B@<;85=D>@@@B@@67<<<97;?8::5468:;<>A?96:6674/0./25>:237DA564575301//-4CJE<9;=9:53138;99;?:/+8;-&JB->1;62.*&+366510@7.,)'),+*(&')*/131()22,)'(+-% !'>75-"(/9:6::543239929704.-.1>D=99)+02/950-+)&(**&)*.=( '-.6?5,)'-%('&+!$"$&+$('' .,'!$%%%""#''((''(""$$""!#  #$%%$56!&/#$$%'(*&-89>B$959<93/0.1.62>?B@9JWOq@A;27>=>A@AAD>FAfCP<7[_dVNHPFTO?5aF=sQE5G&!.1BQF8OPRK4P?Y/?GBM4=FDh5+34@@9R3HI10.-9<>[2)ELG/=@@AC?=AA?FONLOUPAHB?EB+.EMKJJH>4/02363547+\5H,*Y+;1,p]NLV=?(QT/<CR`RN`G7W<98===>>651>M=1547:36IEFLGII40T7@>3QVT@<3P@'3T\XaQPX[]]__\J7>7 *1VP.A3:PZZWRP^^^\[XS-$2B 7HMQa[\`b]bfW7ZYWRVTOS_Q?[^dO "3M_@=TYd6pkol;=77c<@83!1^;A><;mijhdU>WP=!6efkhcabhhE:  ->@@;4=9!*(   #) + "438!"6*$  + + + "%(9#)$(18!9& $8J9!!* + /08!!%-5ReR@1)*,+*)-26?HMNG=<5KWO^PGhL)(-~qI+&9UQ',2"723%$5VD?;=&NSxjst补ҟ#. ^ąńDŽ˄˅(υЄπٓ~tPN?64'=$$%%&'&(+4O=8-$$*))MOLKOQKKEEJIIBGLLVXX68,(*-/0-+-7~}Y=2cU;89;<><:87887hj|pmmm8;>jqs}~>=:73))+-*)++ ,.0-/.0.02$123236322458421243545544455677988:<<=Y>>?DGCBB>>AA@=@CEECECDDDEEFGFGIKMNPQSTWX[^bbcehhhimrrtqlqrx`{exÚ݀ńㅗδŇȬϾʿtspojùX~uv}tttvpqnjidaikjgikjghbXW{zxyzpgigcaga`moi567668531`//.-*)PPONLJ%HFS_agmkjmfZW_bgdYtEFF@??ABGI?E<=::=9;;:?:8:99502/-030,,*'/5022130.&(+**'(,-*..,+,-,+*+.+(&*&'&" !!"#(0-&'*51(((''&%! +42/,,0*)# "'%! !%"#'0-".!'#" !"!%%/#"#! $#3&D"# !" !  #!%"#$$ !! !!" ""#%#$&"#%'#&"#"! "# $#!  !#" n   +  $       +   + +"%  " &!" AB"":3@<14()## 4;>=8%'#-52".(+.%%'.040/&& "''" *  ##1 $%'1+#*6->#"  0%3#/14*'$'(,'5%<'"$ + +&$')'&('"#"4%$".,30*-.030/1/.19:68:9/72.20274442& +-)<!8,$$'',+/"',& 4-,,,++*+.2.,)+.&%(+!8";;5?@?;;9::7787676646562+&'0800;%- ++.57669>>33453441487:89:10112/265215<951/.-23340%#,:+%&(-0'*;9;B?B@+$6!.#'CLK53*A0'GMHQDDHIKLLMM:)+B?#*"*=JMNJBGDEBA?< '"-8>LDGJGDIN;'A@@<@@1A:'CIOLHFJPO}~}~}~}~}~}~~~}~}~}~}}|||}~}~}|}~~|}}}~~~~~~}}}~ +}~~}|}|}|}|} +~~~}}~񁛂~}~}~}~}~}|}}|}|}|{||}}}|}|}~}|}~~~~~~~~} ~~~~~~}~}}~~~~~~}~~~~}~ ~~~}~~}|}||}|}|}|}|}|}||}~}~}}}~~}}}~}|} ғ襵ئߪٿ􋊅Ĝ틒녔ӉfёͶ傓ۻ̾˻Ϸ!   9!-eŸ홓嘦cyv}Є!VO[c!"N%E]rx]P]SIDd   +  + %      ! !! ! !""! !"#"#$$$#$$###$#$%$$$#$%'ďǻε׶·熇"%   !"""!!"###$#""!!""!###"#$%$&&&'&&'(''())*++,.--,-.//.///00//0122345556656887677889:;;<>?@ADFFIIKNO)**+-/237>DMT\clxiq{z^hm62.*+3FZf4]MHSdjdULg۱ſźwm|qaUNIECBAA@?<;8634321/0/.\^ZXUTQONLIJJJIHFCHӬƻū̷㽜ſǿĹʽ¨ζ»˯˞ګǨɫ􉗭ͿݦпǽëĺĻ»Ľʡŀƽ°Ƽ̾Эƾ¿ýªƯԁ俜ǘߵط˩줐߄ռѸļ˳酛ދݘ˺ʘڃޢ㋅芭ȿΜŲ܀˺򀃥ڰԘθ񈕩ƀᗻոŵڰɚðۋξgዠ꽬ۃ䷧مעއܦƲӏbU@ !H'9Y\YZQOTMCBBCDD3UX`[U5@xt~quWShّFD|BFLDB@AA@?@}}xCA@A@B@??@??@ ?@@?@@?>@?@?@?>???@??>??>?@???>>?>??>?>??>?>?@>>?>???>?@?@???@@?@@???@?@?@?@?@?>?@???>??@@@A@@@?@@?@A?@ A@@?@?@AA@@A@@@A@AAABABA@ABABABAAABAAABBABAAABCBABCCBBBDBBCBBCCBBBCBCBCBCBCBDDBCCDCCCBDBCDCCDCD CEDCDECBDEDED +ECDEEDDEEED!FEEEFEDEFEFGFEFFFGFGGFFGFHFGGFFGHG HHFGHGHIIHIGHI +JHHHIJJIIIJKJJLKKKLKLMLMNLNNMN#OONNNOOONOOOPOPQPPQPQQPPQQRQQPQQRRQRQQPRQRQQSTSSTUTTSTVVVTUTTSTTUVUUSUUTUTVUVVUVVVWVWVVUVXWVVXVWXWWVWWXWWWXWVWWXYXYYYZY[\[\]^]]^^LIe}okohFKIEE((',>=:9:74357QGEE7A=8741gbUNLQWXTPTXUWRWdj;KD<=<<9<<>E|eiVGBifNBCBBECCBABBA>qo}yvrs=>=<=>=?>==>>??BBEEFILNOKMJGGFIEFD@BBAABBCDCBCDBC@ACHFFDAC>AGJIJLPIOSRSPSSSTVXY[^_^_1235667nnopnquzxwztb<.dskd>EEEFEEF +GFGFHHGGGHGHHIIJJJLLLMMLMLNOOOPPQQRSTSTUW XXXYYYXZ[\]__`bdccbdeceeeggijjlmprruvwz{}KNPQSTXZ\_cjpxu~܇jU\_akvPq~ٰǺ{vʿxsromjheb^[[YUTRRQNMML~}{|{yvuvlxtqplic{x|yryzyogcmpdgdfhfedd_bejkfdaaa`[[Rpnyz}tlknjadhlpsxw<<98:79557AC>=<8577782/114CR86?87386243/13445@EA:51132673420;;=CH@:01CB1(RG.;3@;4-&F*563350@AJ'(.978:8205/.10J8-*.-5E%%%'),,,.0-..6D71.77161)(+-+$'*)+.,.,+/23.46./*%(.0.110*,-,/.,*,01046639<:<>@;<<9:<<779879845<:;:431.01.1/*&'(*(+,(%''&'')..0/--2+.-,-/+(**(+,*' = "!A%&)($!! A4?-+''(&%%! &-,++"'#!&#$#""52"%371/&(3A5+,3-)% %'$ $&%$$"*+$"#'&%')+('*((&%'(&/.#")'',0,# %'" -"&$''% %$ %%## !$!%+*,)'&"%%&$$&%#""# ""#$$%'-&$# ($!"&%%"$.34wo?<_bae[VH>;AEf_dgZUEMI8HJ747K3@\V`L[SDLJISIVUZYPHD>DFJOG=9B>92515%YW?9BC0_LinFO^9=3VsMKB=>?A@ADAC=80GE6gia[ZXJF@;6AA?QD<79SEAC5)54&5A5-%)HGL>8A>:<<<>>A@IMIKPSFKGB@A;84FMKHLMI>("'-6746-3/N(4GR.4EiQNS:-BYXY4;07;?6=75J]1cVY[[WKFL[WM??ESHFf_6P8IE3"ZK"(RSQPRVK;HHJOLIGLPMNKBEF98994/7;4:=@==>:;9;==??9544E$'39i8ieg[/SNG3"Dfhe_\a`cI=( # J> !#0  +&26!!"%->V\E45++.-*,166>ONNB72:PPPaHOq¾ +¿ÿ¿8.p Ki3B)EG,*&"9AX+deFo'sbOtgGeKτೈ~ܸң1V7ÿŀ̀ܭ񡚊yMOE=7!'%&$)'$%%&=11/%-+('&&POIGFHKLKHFEEKJPY\08/*,--++,.?xaA@mN::;:?<;878899kiiyqnno79@hlsyx<>=8A)'+,++,,-/-,1/.-/2311223345432445644537644342444675566:<>=<<:>>@AFABB?@ABB=CCDEDD@EGFDDFHJKLMQRU+,-0223eceiilorpliikBTlꄚЀÅ꒪ŗה~~ͩŹû̽}|uupmdyt|~vyvvvomjicfhmmhhgffee^W{}}zyrlhmibedhknql6786554111///.--,*'MOKHED#FGR_chiglnf^U[abWSBV\OJB@@BIKF=M<<;8977669345570+430/-*,*),56/230.%#',++,)(+,(+('!$,/010-++**+(&%!"!%7@.+1)*&('$&#!"#!)/1-*('&&&%#! !,($(+%# ,+51 ,%,'!1"! !%'0" # !#5'!##$-"! !!"!" $ ##" "#"% $$$"&'%'*)%(('''('%&%$$#!"$#$$!!! !*)&#       +       (%"$HB$"7;:<55)" $&=7:<41$*%&&!+!.+0'1-$)'*.+0041+''!&%**%$ 1(#$$3*35"'0 '&!  #%=930.+#!!!!*#-$(2#  !'# $"* $&)#"'"+-2(%-+)-,-0./.58468:285122-*#2753754)  %+01)6&$(!0+*#-0%& 94.*)+8--//-'$&-+(#%39=?>>?>7:;=:99978645768:! "*/**>5)$&+55547@>,3005320489983:;1112.+25034754312014243*$!%3"*/2.579<=!(D$2" $1;>AIJ"+@D&2 "5$+;GOT]XY+TS++3%'' +#&,.*R+PMNB"=93! 'DMJFAEHH} ~~~}~~}}~~~}~}~}~~}~}~}~}}}||}~}~}|}~~}|}~~ ~}~~}~ +~~쀥}|}|}|}~}~}}}~򁜂~}~}~}~}}|}|}|}|}}|}}}|}|}|}|}~}|}~~~~~~ ~~~~~~}~~~~~}~~~~}~}~}~ ~~~~~}|}|}|}|}}|}~}~}~}}~~}~~}~}~}|} Ệܱسʥũͺ򓋓탆񂂂ߨ`泱ȶչԾ¿撴*       8" 2ȅڡœ̗ĤΣą!DutZNQqsPȒcidJ   +    ! ! !"! !"!""##"##$$#$#$#$%%%$&&*E¨Ʋʭ¸ú렳戋ΩuڅۑK( !!""#!"##""#""!"$#"$%%$##&&'('''()(''( *+*+-.-../0//0//01//01133346898879:;;<===>@ACCCFHKLN())*,-026:@DIPU\ftekqzpYjt@@@:59I`7:8_Xd;|u`ק|}ʶ{tkʻuiaYSNLJHFDDA@><:;98654210/_b]ZXUURPMMONMLKKKIID׺͸ʀ偍Ģٝɴ̾¿ƾ´öƵʵ٤˲пܥнѿҸºļƮˤɥ¶ÿĸƀȿͯɣӼŲ΁عܹŗӽဣîçĻꛢļᄿſ§ς߲ۂ¼̳󸭵ڻ՛ڦ͸ɵɎʀǮêƀȪܷٖշ낂Žˇȇ߷չ텦ξפѮΩ򈂂ťe_J03-+S^\XZSTV:;HH@*(!UO4"$(''SR++QM& !8!$$8#4,$#'".;=GLYQ8./)-775N<0=C=!)*/+#7!+*)* " "+)>'&$%),/-&*.9C6TZ0B"$f%$$(&*/0**,4:CV4;S3)Q:&!%,.-0<`VX8E&(((.341X;+1#.;5.&HQ[...13;CSe]HHF@BDC@EOPFVd_WN:7FXNVx=L?PFDECDDDCBCCBCCCBCBCCBBDDCDEDEEFEFEEEFFFGF GFFFGGHGHGFFFGHGHGHIHIHHHIIHIHHHIHIIIJIIHHHGHHIHIHIHIIHIHIHIHIHHIHIH IHIHHIHHHIHHIHI HHIIIHHHIHGIIHHHGHHHGHHGHG HHHGHGGGHG.FGFGFFFGFGGGFFFGFGGFGFGFGGGFFEGGGFGFFGFFFEGEFGFEFEFEGFEFFEFEFEFEEDE FFEEFEFEFFFEFFEEFEFFEEEFEDFEFEEFEEFEEDEEEFE DEDEDEEDDEEDEDEDED CDDCCDCDCCCBCBCCCBCBCBCBBCCCBCdDDC9cISȍamO{tZgǛdǜЧHC@A@@AA>p̀fAA@@@}ɀA@@??@A?@???@?@???@@?@?@???@?>?>???@A@?@@>??@??@???>? @?@?>???@???@???@@???@??@@???@ ?@@@?@@???@@?@A@A@A@@A@AA@@@A@@@AA@A@AA@BBABBAAABBABABBBABBABBAABBCBCCBBBCBACBC +BCCBCCBCCBC BBBCCDCDDC DCDDCEDCCDCDEDEDEDEEDEFEDEEFEEEFEEFFFGEFFGFFGFFFEGGF GGGHHGGHGHGHGHIJIJJIIJJIJIJJJKIKJ KLKKKJKLKLLKKLMLLMMLMLMNNMNMMOONOONOPOOOPPPOOOPOPQQPPPQQPQQRQRPPQQRQ$RSSRSTTSSRTSTSTTTUUTUTUTUUTTUUUVVUVVUVTVUVUVVVWVVVWWVWXWWVWXXXWXWXVXWWXXYZ[[\\\^^]^^awJu~rsqKHMEC8,%0BA=6145677FD?B9@98774eYNIPLV]WORZVWTXahlHJ?<9<:==>QvmdXVfIDECBCCBBBCAA?tooxwusq@vnz{BDCEU>387:99:;w<<<:=>>>?@AAA@AAC@AADEEEILQPOQPNPPNJJKGIIIGEDCBDBCCCA?@DKGEFBBBCEDMRMLRVLMPNRQSQRSTVWXZ[\^a1245m89qqpor|~|zwfTt~}|YrsnCFGFEFGHGHHHGGHHIJJIKKLM)NOOQOOPQQRRSTTUUVUUVXXXYXYYZZZ[[]^]]^__`bceeffgihjklmopsuvwy{|KMPPSTW[\^`cglt}ru}f\ipps|TWUV}بʵ~vɹ|xwtpmjhdc`]Z[YVTSQONMM~}|zxwy[{{wurohc^`}rmqmmhdefi`cbegd_fnfgjhfdcdcbcc[U{}}vsprjahkjptww@?>B9cbh6237>BC<@92/07:9:9798:;865327?@>=:@C;89::9:968:@<:758:568987:58<:;7231.21/1.*'''))+*)(*)''%(+,.(,(&(&$$((&)(&% @=9=7>!##"! !&&(&%%$" " %-*,5 1$,.30/,247-! (#!"! #)$"(*+,+*)..+*/0.*,-.*)*))-,-.),-*+,(*'(+''&('&$##'&(($&')%%&((''(((&)(%'&%%&$&(&'%#"$#! "##%"###&/"(2"(%"##!)148;94565331*0#$-(57&>9D@77#HCrg:eM`]c`WD?00Mea`]Z]NQF3H;?@33?EFXN^]VLOMFA>TVYYOMQ@OQIHB>6@==28<::A8B]RPK;BDXAw@TV.D8HkOOGBAB@FD94.2Y_L%ekqf[\ZA<51JB7b99!EQOLMOFHFJHJNI>HFG>E?:.M92=8Q97\B@1*WZNTyB+'-*(%"$%/,&&('BII/4?@;;??ADEDKLJQTFFGCA>=A<=DIGFFGKH;3029<:99<$::,E2/<$INDJC.ECZ02;<99@9:53T=21GKL2.+/1.WUQI 1E?ELUZUOEDGQTB?QLWjXFPTSSXUFKPQQPMLLKKIFLNORT5UHUTA_VbeCPWHBD%STSQRUJ8AJJ(''NMLOLOOACD@6>>;67GX?<::kjfa*HTQE-*$[ic]]5`VJD14BCAB<=?#!'(% +4-  +,-(    + + ")7/"#$#0$"    +  "+"25" '5 %5,%(D=;" "1 /;>"#(/;F.(,,-+,--/0/.0/01231021323344467456;8588678636977697579;><=;<<:A>?A@7:==;;9977764879=<#5*./#:2;8$)/+86857>=.03133367892685-543126+822832--.12345/(&%)%'-7157<=:<9J<7.:>>K':! (9G>)8DGINNLIGm:=3#'?)A4<8;;BIA!*9EF<'  %'&?@BABCCGHILP()**,./05;>ADIMQV^m~`gnv{nv~ctDMOLFBLc;AB;6?@? @???@@???>???@?@??@?@@?@??@@?@@@???@?@ A@@???@A@A?@?@A@A@?@A@?@@AB@@A@AA@@@A@ AA@A@@AA@ABABAABAABAABBABBBCA +BBABBBCBBABCBCBABCBBBCDCABBBABBBC BBCCDDCDDCCDCCEDCD +EDEEEDECDDEFEDEED EEEFEDEFEEDEF GGFFFEFFGFGGFGFGGFHHGHGHIGHGGGHHGHGIIHHIJIIJKJ KLKJKJLKJK +LLKKLLLMMLMLMMMNNMLMNMMNNONOPOPOONOPOQP QPQPPQRQRQRRQRQRRRSSSRRRSQSSRTSRT +SSTSTSUTTTU TUUVVUVUVUVUV WXWWVUWXWXXWX WYXWWWXXXWWWXYCZYZZ[ZZ[[\]\]^^___`bM^~mwQEOGDG7#3AIFA678=74=Q7<;=6<977fYQOTMVYURPWBT\egBKD<;>==>=Slgb`aEDBABCBCBAA@?;skvysqv{|ovw{BDFJ906776888;<:===>A@AACDEEDCEEEFHGKKQTSRT+QOMKMQTSMMOJHFECEECFHFJFIDEBDFEDLQHIOONMMLMLNMPSQUUWWXZ\`c35l89rrqurt~{{r^.upUvpeIFGFFFGGHGFGFGHGGHGHGHHHIJJKLLMMMNNOPPQPPQRRSRTUTUVVVWWXXZZYYZZZ[[\]^]]___`ccbcdeffghiikjllmortwyy|}IKNQRTVX\_`bejov|qv{w}ar~W]]YSX^^ʮϧűvij|yvsomkhfda]\ZXWURQONN}|{|z{{e}z~{yunib`_^}slksllfca^^^ceh__eljljigeeddcbXHD~ogmi^bkmqstu<=7497866787j541V310ZWW27,UVTPQWX[acec[b_eVLtqFQXVROFHGGEDFGDDDFEDCBGHJEG=7c]ZZj35<<;5152446<<98;<;=>>:;968;AB?A:AG:9<98:7=965977721144777:6596542689<>;6655536.+19;6?C<35HJ50)+.2<==82**.463320)&$%*.858841-31,03N;3/23A(**)(',,,//,/49F6//9:6>71124.).-*---.,-2..253'')&&&,+677164230.,,256;=;9=>;=>><>=<68<5>><6::46:683,0.,//..-)'&&)(+))(*(%%%('')*'(%()("!""#&(%$!=;?7;! ! #%#$$'#!""! '&/ ! .!+.9/.-**//(""!!"*43773-,+'%&)'*,.065412;962/*)()))+.//2,.5]401/3.,.,01./-.,,--)$&-)&'*+)++*+*)&!''$'(%!"%%%)#!!#%%&"!*"3!,$#*$ &154552&""0"#%!-&'---/97*0?&[c^eP]bc_aPA?U2ZfX\cb^;OM3DI:BAHGdgXPQGIPHPYX`cHHGLNVMA;?10?C>=SKG@EjYQV=+8@OQLWH9RPIfMNGF>34)0YS8F74G9bbY?522S:4]9*E9'5(<104N]043:2&[;39>9;;]6TH5ARGL@5.X_[BQ'% !$(%$##$! #&%GE:".2<:?C?<329=DFSEEE?<9:;:?=9>>BCGHHF?67787:??#Al::1U'9@1XiBK49R239987=>16>EKE3*QCDK+*+//P('Z>9/CMT^TPG>:KJ?998cZd=MSRRTREJMPRRQPNLMGKMMMQUVAMZOQPZODS:@AHD=80C=@C;6445778:==83339=/;CDL@;FFFGDCF<>U2+<0OFF=OK/'DQM$-TSPWXYWUHKO5=?2+S%:>9HPQ^bYah^]ZZ\I""5H=5CKU`_]\_cLf5_MNOROOM[hc>5SfTZ[I8#8;(X=`mnm:=7ifnb^hhkH;iDV?<;jdg^0;9;;87888676leqtrnp{uzozrsz?A?A,(+--++,,00010-0/101/0/112234665675878=;:;967899<<879;==;8:;:>BBFBDADCCCB@HKDFIKIHIFFGIJJKJNNPPQSTUY-0b22fdfpkjprnkgi?_ڀ􀄊􃒪왹𱭯~Ģųȏ}wtmigeeǽ}|~xwuttllknkkcbionoligfgefdcWD@}ytmcjg[cginmnk661/411//120].,,L,*(MHH),$FIMOQY`eiilg_eacRJvo@EEGFC>C??<;;;:9:;753359:7930XSONX),21/'$'$'')--+))*(++*+..+,06636023,,.-*'#'%$%)&''$$%&%&&%%##%##$%'().2/(%$&'%)%!$'% #)% "00 $((($! ""! "!%$  $(A,#!&(4 !""!  $#%#*'"!%%"#"   !#" !!#$()'%((&)()&())%&' $&'#$$"$&"$!!! )(,%'O       +  + + !%$!"$ ;;6<,4<:89,%$17<36;98*&!&# &#"!%'370-.')+'+0059(((*+/(""!% "*)'$$3+(0&(('/&+/(4'(!+,# - 2.-$4+% $*&)'%"" 41*#  +  ,.($*(,.*%$(*702323023131-0/313751&%35%(+2 %' #$ / +) 63$?"#(+0+)&!'&5.6%:?=;=?79;<=;;;98846776<=;,05,..3.'1!/2!:@&+671304598/92066<;63,>68;3.,,/112233/)'&+'!(.0;,)37;><<@1/D#?;=4B:4C>!@BCJJJEEJJJGKJM'9 6/287;@BCBCCDEEG&'()*+,./16;=?AGKNRU`kubmxw|XvGT^b_VUhAJMJDHPSxճ̫±xjzsnlhfd`]ZXUSRNMKKIGFBA>;::97nnifc``\ZYVSQONOMMI²Ÿ;郅ϻչ¼ʾѾ鄍̾Ŷ˾ɹﻫ°ȷǀ鱛ϋپͼǺ½ʺžŲʼȥŴŻûÿľ렎óスˤؕ橲ñëĚξĽծ¹ˡ´Ěؼ̄Ğƾʺʠ݂̫쳱ǿ؍ͬĻݛ֣˶ʼمꕄ窄ն̃м௷ĽҌ׾շή¿ð̇ŏ¿ӏ넓ʥȳ8ԁꁆڴۅ4PZM+<"!%>a_YYTSIDKC5)#,PCA98;/GC5463+I6A$'"!$+G9-&-*-3..3$'%%22$"&&+)0=B;aA9"%#h#%((*/.-//4;G-:3F3*?>+$ &')+.6GWRF5C'+*((5/+FABB86/'",*/1/7538CHVI>>=@C@>BBDOPX]_XPO0=MUMXjVIPOEEEDEEEDEDCDEEEDDEEDEEDDEDDEFFFEFGFGGFGGGFGHHGFHHGGHIHIIH +IJIIHHIHHHIHIHIHI JJIIIHJJIJJIHJIJI JIIIJIIJJHIJJIJJJIJIJIJI +JIJJIIIJHHIHIIHIHIH IIIHIIHHIHIHIHGHHHGHGHGHHGHGFGHGFG FGFGFFGFGFEFEFEFGFEFFEFEFGGFEFFEFFFEFFEFFGGFFEFEFEEEFEEDFFEFEFEDDEDEDDDEDDED +EDCDDCCCDDC BCCCDCCDCCDCZEErZztlskndbmudpkbcmvq҇tĎIBBBAACOr̃ͮB@A@ +?@@?@@?A@?@?@?@??@?@?@@?@?@?@???@?@?@???@?@?@A@A@A@??@AA@A@??@A@A@@A@@ABABA@AABABAB CBBABAABBCBABBBCBCCBCBBBCBCBCCDBCBCCDCDCCCDCD +CDDDECDCDCDEDEDEDDEDEDDEDDDFEFGEFGFEFFGHGFGHGGGIIHHJHIHIHHIHIHIIJIKKKJKKJKKLKLML MLNMMMLMNMMMNONMNNOONNOOPPNOONOOPQPQPQQQPQQRQQQRSSRSSRQSTRRTRSSSTUTUTUTUUUVVWVVUVVXVUUVWVWVW +XWWWXXXVWWXYYXYXYXZYXYYXXXY Z[[ZZ[[Z[[[\^`a`b?8~vkYAMLED=-5EIJB9597429eU<;:<:6436XTYZSQVQPSWYWTZVal:GI@=;;;=<ŰRHDCACDBB@@AA>yppt|~CEEE14544455688:989;q<=?>?AB@ABBBCEEFECEJNOOOPONLMKNQSRPUUQOOPMLLLIFDGDKCECDEDEILJJNLLJLMMKLLMMOQRTVYY\adghnprtuuuw{yuhWlM}yx9JDGHGHI%HJJKJKMLMMMNNOPPPQRQQSSSRTTUVUVXWXYXYZ[\\]]]`_aabddeeggiiikjkllmnnpsvwy{|GHIJMOQSVY\]_`chmsy~u~}pbv\dec^chgɭͰ²y­}zwsrnkjgfca][[XUUURS}~|~c~zztogb_¹wtvtnmohnjiebccaegigillnlkmifhffgfc_[Z|~HBA{mmogjmnnlors;97:99<656kik33]T200\YWV+0XROMSWYZ^`a]X`a`TI~t{OPVOKOHDACDFHIGFFEEHFKEBDB=g`_]Z[gg`_VT027;::7:;<;>@>=>>::AC<<<67;9>;74766765478;;9;87;6367966311/35773<4/59=:;::75JS;631789<;5/(%,2011.+&%$'(/756331.33.22S?5023@)($$'(--{0220412=50-88.0++.13-(..-021469811360)*,*'%.+3352843521/.647>@?<==;=A;68740370772021023141,+*(+-*+)'&#%&%'(&%%%&$$(('(('&(%"! "$#"#')'#<:>:>!'$#!!#$#%&'&'%"# !$#("""/! ()0/.-'&'1." %')")+)(+)%" $'+32'(/4+/397(" $%+**.-41205<1/48:D8//,.***$(++)$$%$#&$#%$#!!#'((&"!%('*)&$#$##!#$(((:#!'%4#.%#5"!" !$.0544553,/.,'%%#.1%((*2>;7;Dl]\7Y>hd`aACE4G\aVbekKEXPCGGA=9831\K7G5eaQJ<]e0+.:6<6hAB=9<=:KGOA@JIA869;B@7;>KAYDRE*8:C3/7fA  ###""'(EEA=3A?9="-(!%=>AIG.,1578<<9;>>FGDGEHCA:854997?GuEF11#/>F[FNKIS1367:6<29:E5>>06/m/.<0HF213.2cD37DIY]YIAA?IEA:BIGabVPNPNPLGLPRRPMOMNOEKKLLOTTX=[MDL5UXS=PD=A6(VW*! Uq[-TRO+*TRT)(NNN7?BAAEHGFF@E?<;<624567878851137-%$.58=7HFEIHFHB\HN:B9WOJD_>2)GNT?*AXX[SSOMKGUI>7$%P,(:DCJQ]dal:_\ZVZ[.)%KG+8Hb^YZ\^\e;B"*.FLMDNbknK-N`\^h[HYN."SI`ggi:7Y^ie$]M`gh?5iCB2=k^_3C'6DII/4ZgefaO!6>/ + !?BAC?>1+,&  $*0( +"+  +*!  #&$ # )% +   + #%!2#")! *#&"/>7/"!+!!! "%$"%-18.),,,/,(,,0:9?EIC110/.+**+KIKLGEJEDEEHFELJT[174,*)))+2ǭ&PD>=:;<77668766pdsuqqnvy?ytqqw~BC=2%+,+,.-./.,-/011/1010011455444238;;;::<867897;;9=><=<=::;uqhilegkmkiknj52/4325../`_`--TN-)*RPLI#(LHFFNYbejmoe]`_[PHswGFIECD>>:;;==<:;::8:9<87640WYXSNNXSPKBA$$((+,+)+,+**,)-,-15610272/3121++,))(#&%$#'&^''*)*)&&"!%"$&)+***++&(())%*'"%''!!"$#"1;%! %'&&("" ""&#""# &)D/'"$&1 !"M$!!%'!# #$! !   !#!!#$#%*,+())'+-*%%'&#%&!&(&!)#%"$# +(+)* +     $       " #+($!F56 4'?979#&(,78=08:>,(2) $)+)"1*$"35&4*'((#593&)0+3:)*!##)%!&+&+8,0-40($ $6+& " .%#6/'#/4#0 %$%$#"!0 &"  1 + + + +  +1/( -,'(&).56%&+--].20..1.333411*%%=#",(1 '%!)$ A$**! 5##%-.,%!"&# !&%68899;9>@@><9;9;;377968;;>(8/)* 13.!*$!;=(71 <84667458(047579:;<6:7544/+--.//00/-('(+  (),'337>?>A8I:6%%$EAA;L/ 4=J<1&9&..6>JQP^0JECCJJ +.( + (CGHJIHFM,'&-4-9JSU18EEEMB0>.**CLMR-)CJSOF>@ABDED$&'*+,.--/26:=>AGJNQW\cdjyao~XnFUer;:l9HU[YWX\_븆Ͽİxl|xtsnkic`^]ZWVTRPMMJHEAA@>;998iggb_\ZWSRRQONRc˲ûϼꆅԸ´ǯӹξοɷ¾ÿнžǷοÿȧˈ÷Ǽÿÿȶư띪ÿǿ¸Ҁϴ饠䀓վゅ꣠ɬʢþ쾀ѭ¶ϤܺȜШΫӰѥƫ֨Ӧ׌洒·ڊ̼ӎܫа򈬠Ж˒ЀȦڷӲݭȿס׵ý{ĸ﫞įΧ聅߾҂вͭC7VZ6 1<+!Ff`ZXTOCCD8%9>QUN?,#)!,IP)()'.8B')"&$-#%#03%CIUC92;4B?574.6,=?C98:*(SF8-",*))+/14"&%+871+&%%$,><2@?8! "b%$&)/2-*/8;BP4:OD9.I9,"$%(*)/:KON@>D&(''+4/&KO@648&A"%%/+388<=GIJ<=9;CF=?AIMU[Z]XPFG/?QPYUTXH^fFEFEDEDEEDEDEEEFEDEEEFGFEGFFGFGGHGGFGHIHIHHIIJHIHIJJIIHHJIIHI +JIIIJIHJJJIJJJIJIIJJJIJIJJIIJIJIJKJIIJJIJKJIIJKJIIIJJIIJKJIJKIIJJIJIJJIJIJJKJIJIJIJIIJJIJIHIJIJIIHIHI HJHIIIHHIJIIHIHHIHGGHHHGHGHGHGHGHG HHHGGGHHHGGFGFGGFFGGGFFFGFFFGGGHFFGFGGFFFGGFGFGFFGFGHFGGFGGFFGGGFGGGFFFGGFFGFGFGGFFGGFFEGFFGGGFGFEFGGFFGGFFEEFFEFEFEFEFE DFEDEDDDEDDEEDEDCDDCCCDgCCDDDE5FWY_k^ovmĤimbFlmG}orLy郝ԱCBAABBIzu{wi8AA?@AA@@@A@@@?@@AA@@A@?@@@A@?@@A@@@A@??@A@@?@@AA@A@A@?@A@A@AA@A@@A@B@@@AA@AA@ +A@AA@AA@@A@AA@A@A@@A@@@A@@AA@AA@@@A>BA@AABBAABBABBAABBAABBABBCBCBBABBBCBCBCBBAAABBAACCDDDCBBCBACCBCBCDCDDCCCBCCCDDDBCCDDCBBDDCDCCDDCDCCDEEDEDEEEDDEDDCEDEDDDEDEFDEEFEFEFFEFEFEFFFGGGFGFGHGHGHGFHIHGHIHIIIJJHIIIJJJKLKJKKJHKKKJKKLKLLKLKKLMKNMNNMMOMNNMNNMMNONMNMNNONONOOPPPOOPQPQPPQRQRRRQQQR +SRSSTSSRSTST +STUUTTUUUTUVVUUVWVVVWWWUUUVWXXWWXYVWXWYYXYZYXYZYZY[[Z[\[\\]]]^^^_^_``abcb=[b_ELFC<32BGE=6233111T_O?5424132UX\ZVNOKSQTXVSRWape>H@888:;@eQGCDCCEA?>@@??>resxrpox?@miqv~CN=355 35443588566;<<<=;=??>B@AABADDBEIJ\KLKLMLKNPOOQQQRSSQPNIIIFHDKEDBCGDEHLLKNNKIIJJIKKIILLOPSUVZ_afgjoqrqrsvxsj`^ytb2ՒqeFFGHFH IHGIHHIHIHIJ$KJMLKLMMNNNONOPPQQQRTSTTTUTUWWWXWYYZ[\\[\]]\^_^``bcceeeghgjkjllmnnpoqrtvyz}}GHIJJMNPRUX[\_achkpwtj^yUVVbloomosrͦ{ٮԀȻdzyķ}yvtroljgda`_\\ZYVTRQuc}xxwsleayxyqponnooiggdelxsrrusronpkfhhhid`\_[\WWO{xyEAx{wmpokpcidmmo8;69::946igdg62[V422_YUSN+SSROVQ[\XY[[Zbb[WJGMPTHINIA?GFGFHIHHFA<:;A>5ge_WXagY_dl1689::8:<==@A>@=>:>@:9?B?DA>AE<=>;9:9;932989;@87;:>;99687201/1./1...06773:7-16>EC??A:72-,/6%)&%')//.121400A7),7;4:635673-00-120236500/1.+)-*))++97547545310/3./6:6643310/..+))02(MLM*-.+.,*,('*)&()()('&$%%&((&$#EEB"%&&('&%'$##""! "!!%&'# : "%""!!"$#'%&'&''&(&!!!*,*($"!&).71)' &4-!# #%$$%%%&%$&#)%-0048;$$'*)$"#)+)&'((+*,5:8./+*)+**-++***))'"!#&(,094.,)-+&$ !('( &5+0!,)3/ #"/5433453.( 0-+,0&($(&(,7B CeV[la=Zdcc=;=KPY`^aiQQR^TJ:B8A784->UZQG.e=cUUVVPF]`RPeXTcWC1JJDFHHK8IKP=RF?=Ug'55KNrWPGF\.'Q4ZQECKXMKRM7135N4!;hYFA+P>*:D;4=[<=78L:6KY[YSRKF9357<<0443[#86cJ>?PM6EI3aQ>!)0047;789>>%*(I;3037787:?AEGDDEFJB,-19:;?B?EE@ECDHFFE>R)>K)FRNH?D//KCNKA0KabaZTPPHCCDAB5=8 .>CDH][cl@dY[VUTJB1%*[]6$D_[Z^YTZ48h<E!2@BEWehi]:HLYba^L9S&(4E^bdmqP\qjcERcl76.5-;U^Z5]C.,/?A, S\fbZ$!;: 'ACCB=:+**"&684$  &+    #,!#%!!!# -%  +   !!#'0#1'#-${$044*"!(,"#(&((/0.#()+/3+)+38ABBEA<47%3FIOHJVUþ¾/Ŀo@¿3("]-K'+BB-"!R%77.=<-#,0 YK./K>:DfsHt얳èhAIA.*-8o{yudw~,[~dDcҀڑuOSD92*'141+('*(''&AG<1*))+)**GIKNIDEBJEGLLJHNYgZ36-''&),<;;85467669pcqvoolv=?}mlqt~}82)')()*,,+,--+,,//1/.-./1/110/0021/37668798878:669989:;;<;89;;6=>=<:<::=921021.]]ULJOSJQPT%)*,-*'*++*-/,-*-0792257141/00))+*)*&&% !'')),**-*-*(%!#$!#&#%#$'()(')''$('!"%+-+;'(*%'-+$ %&!  $##!  !#$,#! "$'!#%'#"$&"&#!$&%! !"%%##$!!$"! # &*'%%$%%$&##" %%?AC!"" !"!$ "563& +    +"##   +      +  !  + ! !$) B46@;!898227.!)*&''')%'+ +("$-5$+:,(%'3"+*' $,(&+''4+""(&!# 5 $$...()$!+5&#" 1# ,+)(*./-,.4589435796$%(.1347797/,247630'"*!2* .!.&$%#. &6/#()#('! &%..- '#&+ !6<:9:0"/&*-,%?$*7=>:88>4/22.$-037945<:8@9500/*),-))/.10,()--(*1//*.35:??>>5C#/8CDA4/ 63@=/ 7JKKEBCB<:984'"+&,.28LLR]7RGFBFH>+ !A> +&BGJLGAC',L# !&;NTS@$38@HHC8)3 %;EJQR7GYSM0BNS)"" #4:9$>'&% 1>CB<}|}~}}}~~~}~~~}}~}~} +~~~}}}~}}}~}||}~}~}|}|~~}}}|}~}~}~}~~~~}~}~~~~ ~~~~~~}|}|}|}|}|} ~~}}}~}}}~}~}~}~}~~}}~~~}~}|}|}|}|}|}|}|}|||}}}|}|}|}~~~~~~~~~}~}~~~}~~~~~~}~~~~~}~~~~}}}~}~}|}|}|||}|}|}~}|}~}~}~}}~}~} ڤĜǿ̾ͽϹ̀萘ݏ˔􎜣`ίݵٱԿüùç׿p + + "   j%BUrѐ˺Ѫٖήۅ͗돊Ս{1$ʥtk굇t     +  +!! !!! ! !"! +"###""#"!"#"""$$##$#$$%$#$$#$$&%%%&%%$$%&',MéÞ舒假ױŻƽDZr% ! !!!"###"#"#$%&'&&&'())(())*+***+,,+,-,,,+./122453457788:99;<<<;;9:<==>?ABCDEFFHI%&&)+-///147:;?CILORW\`celuYg~쁉hqUiEHFGQamppsurѺ©Կl}{vrqjhfheb^YWSSSOMIFDA@<:975fd`]ZZWSQQRTXký¶¿䂋¾þɱŞ€ȼȾŷǽ۶ɵŻξ޽ή¼Ưºźýᅓз鋄ԷԿ߉¯˳Ήӹ±ŴùىشַǪʏ瞊ʔ􉅔ٻοΛʺϭ¾ЏŽʮ򯠡ϴў頨׻ތ𭒎ġˑӌꊽſӟ֝ݢ􁄀½ʽ茫ÂϺ󌯌ŶꁀԺşʽҳɀи̩/EB^P#%=9#'Fa^YRUI;>;(1CQRRLC,!!+'/+4LP)*)@-C'($1)%!"7<*9F'<)(:9)@486*64P67/57,#DLD3(&+-&)/..%%*01.+*(&%/:1;'78!"""`%&%*0-++/6AJ-9P8H@4K2)&''))+5@II?:=E&&(&+0/='NA38$=;=HQ*S688@GKND8;:?A:=E@KXYa\WWOEC-DSQaWHSH9=GFEF EFEEFFFEEFEFFEFGFGHHGGHGHIHHHIIHIHIHIHIHIHIJIJIJKJIJJIIJJJHIIJIIIJIJJIIJJJIJKJIIJKJIIKJIJKKJIJJJKJKJKJIJJIIJJJIIKJJIJIJKJ+IJKJIJIJJJIIJKJIIJJIJJIJIJIIJJIJIIIJIJIJIIJIHIIIHHIJIIIHIHGHHGHIHGHHGHGHGHG HGHGGFFGGHGFGFGHGFHGGGFGGGFGGFGGFGFGFFGFFGFFFGGGFFFGFFGFGFFGFFEF GGFGGFGGGFGFEF +DEFEDEEFFEFEDDEEDEEDDDEDCDED?CCDCDAVq}vftfS^}nISIY[nwoӜeyoږˊ`eeljoܠVAB!cƏߧAA@AABA@A @A@@AA@@@A@AA@AA@@A@A@?A@??@@A@??@AA@@?@@@AA@A@A@@AA@@AAA@@A@A@@A@A@@@A@AAA@A@ABA@A@AABABBBABBAABBBABBBABCBBCBCBCBCBCBBCDCDCDCCCDCDDCCDEC DECDDCDCCDDDEDCDEEEDEEDEDEEDDEDEFEFEFEFEFFFGFFEFFGEGGFFGGFFEFFGHHHGHGHGGHIHIHHIJIJKJKKLKKJLKLKLLLMNNMNONMMNOMNOPOPQRQRRRQRRQRSSSRSTSSRRSTSTRSSTSSTTTSTUVUUVWWVVWVWWVUWX*ZYWXWXXYYWYYYXYYZYXYYYZYYZ[ZZZ[[ZZZ[[[Z[\[\]\[\\]^__^__```_a`abbc\K~lbLHLH?=:5>D?5,T,/324?VXF6751a]1-[VTSPOMUPNQRPTST`ckDA68656h{ɭ}JIECAA@>>=>?><hcTRXW_4^^aa1799::9<>?@BA<<;<<@@::=@@@?4'-9>;>;50460../.31./21//1/21-01.*+,,76321010.+**0.+/200/.+')(*,*(&+.&(O*LKN'**+-(%)('('%'&$$"$%$')&#"DD""#$$%&$%'$$"t!8 ###!?> #"$$$# !##$'%$#%%%&#"!&&1024&  "" #&(6:)"()" &+**&%# !"##%'+,3-#6320.2!$)*&%#" "&%))%&&')'%"$$##$&'))&&&('&## "(#!!$*+*+*$% !#!$" .(1! .19+ ",553332101.&-+/(';61-/9""!gtXaje__VXd=51^[QZ`gaSd\\UOGA6>8?KH4ZUWDN3]R\RZTWM;YVDZSXLS2QX\TTEMM>ILM>CDG(dp--38aJ>XLNHJ2,P=[ONTVOQUVQ3.R3f6:]:_;0@7>WaL;483E@,F88=DGJPFEAB85354330541+0/GA-:GCI??O5G;1AAE=:?@85441116>DH++0489::;=@ADDHJD5168:979@BCC>??DJKHEGD3--26554:WD(0H&DOCLQPL3J=4351914A1394..E?B=4QI2:=ADHFHI3NK?1LLRIAW4)I>GJI.2BYe[YZYVH>LE2>(@--5E=GVVbp<6dYYUOGb325+0ZaH&&DZ[\VTWYb:;_++46J, -A,TM\N?BEC- 2Sid!(-C5  + %<@@<@0$%#(666/" + + %+ !!$$ !!!0 )     j!',"0,,2&-+'&&#"*#&-8%&#(,23,$&,.++0+6DBHFDC<44"7IHSKBPV0¿„…aÄ2½3¾f)+"AU,-=D6#.+=&7(<+.,(3H6<^rK;!4!U^P`޲_RudOBHfX[^YNjrH@Aܚ;@Àӄ ӄ؄׀˼d[XJ;72*/21*(M&&'('.?@5*,+)PL'%IHHFDBELACIKILLM[Y^61()''+~ݰ~HE?<:8655455347nbkqihkn<<>ddprvz+u91*%%%''()('+*)+)*,,,+,-.-+-./././0.0023574687877889:9877998:@AB;DAA@ABBCFILJKLMJJJIIKKLMLLNNMKPRSUWZ^_bc^__^ej_b\b{PUv~լ土逇ڃ¡wƞxwz~|voǴ~îگ~xyunkec|{ytsstsmnqosux{{yvtqrngcffee`YWTRN~A@:lpyqlnlhjedejhg45ef32.X\/ZZ/1,*-.-.UOLJ)-LIJIJMY`eglddljf\KIHHGKKJI@:;7<>DEC@>><<:8311122\ZNLNIN*OTRN'**--,*,.-/21-,,/288334643/+/.))*)'#$%$#%(&(-0)+,+,*)%"$" ###$&%&'%%%&'&!"&!"%$+&).100.&  !$""!!! $#0&(')/2 "r$"%%&&'#%($%## #$!" $##"! !" !$""#$#"$#$%#"!""C#>>@!#"#%! 54 ")&    #!  +    +  +       %!' "8I4;@=7625>"95.36:7/<72+'#!&%.-0%)0,2,/+/)32&6.1',+04//%+)&'(%#(;43(!,'))* *.&&*.((,,*)44-"!14'"!$ %##!"'"%0.)-.&"$2 $*-...036778;=9,),.021.37861/1356312/ )",-5+-*&$% )"-( *#*$%(!/-(&/$))1'8<==<<=@@=;;;<::8:98;87:=!/-%+623%%##&$.)"8>4!=>98:4:364*0224865899>8:9.(*,+OI=#+01.*-11:$55:7-$*068??AB+90'8>G@7A#2,8<=#$4FOFEHHE92<7$*.#/+6FFO[2-QFCCC?M #'"CE+  #>FIGEBCL/0D ;KQWFB*+=JJ/&*<  2BE)@7JKNEAFN/*0$) !35B6)+/* + 3DF~}|} ~~~}}}~~~}~}}~}~}~}~}~}}||}~}~}~}|}|}~~}}}|}}||}~~}}}~}}~~~}~~} ~~~}~~~~ +~~~~~~ +~~~~~~}|}||}}|}|}|}|}|}~}~}}~}}}~~~}~} ~~}}~~~}}~}}~}~}|}|}|}|}|||}|}|}|}|}|}|}|}|}~~~~~~~}~~~}~~~~}~~~}~~}|}}~~~}|}|}|}|}|}~}|}~}~}~}~~}}~}~} ޶à俐궺𷿸ƺ쎠̼䃛eµ̝焍ɤޮÿԻ̻x    + +  n /qոȎ⓿倲ؐ܀ßΉOцۡ͘M   + ! !! ! !! !""!"!" "#"#""!!""##""##$###$##$$%##%$$$%%%$%&'%%%&%(<س㒥'ް¿˅b;ڵԿ7% !!! !!!" +#"""##""##$ &$%''%%&((**)*+,+,./021234565446679;;;<==>=<<;;=???@CDEFIIIM&')*-/11247:<<@EIMQRVY^bfnvR^o}VlLTVZbs¡Ʒִۀ­ukǿ|vxqnkkhfa[ZUTTQMKJGCB?<8754ea[YXVTUUX`˿ʾ冉ڽ셆ӽȰڈɽ䅫ۥ܉ǀǾƽºȺòҽµȲιɷɿ耗ñ󋖔ɬꚔ󆐓쫵܀Ɵ驝ṻ͸Ÿ̫у¡؝زûȎ݄ɤ啱苯ϟʿڀۼÓűסʿ햒¾Ϡʞɏԧ핵܆рːþŖϹⲵњİᬽƵ尯"ԫǸ^`]HP:('C!%")Lb]ZYT><9*)9PSPPNB'+3,;#7HT)*&3/M&$9 #(".576FLJ5>2>7FH64/-3_O?)73G@;SK=-$#.,+,/'#''&)*'*))A=D)9."#$$_#$),-*(*/4CN7/5@W69VN)''()(2:FD;67=A"')(,.+>QJ<6-4I&.D,=_43:@MSZG=99698CDCNX]aYUSL?D1GRYbTMQELBGF#HGHGGFGGFFGFFFGFFGGHGHHHGGHHGGHHFHIHGHHHIJIHHIIHIIIHIIIHIJJIHJHIIIJIJIJJJIKJJJIIJKKJIJKIKJJKJJKJ +KJJJKKKJJJKJKIKKIIKKKJJJKJJKKKJKKJJJKJKKJJKKKJIIJKKJJKKJJKJKJIKJKKJJJIJ IJJJKJLJJIJIJIJJIIJIJJIJIHIIHJJIIJIJIJIJI HHIIIHIIHHIIH IIHIIIHGGHGHGHGHHGHFHGHHG HGGFGGHGGGHHGHG FGGGFGHGGGHHHGHGHFGGGHGFGGHG FGGHGGFFGGGHHGF HGGFGGGFGGFGF GFFFGGGFFFEFEFEFEDEDEEDDEEEDDDEEFDmFFDDDEEEDEECGIJGDECas|{hATa|ؐPkfkzSmC|lr—||_{bBBCBC>̈́}ÜÒdozܦCABBABAAA@@AAA@AAA@ABABA@A@BA@AA@@A@@@AA@AA@AA@@@AB@@@BAA@A@@AA@AA@@@AAA@A@AB@A@@AA@AA@AAABAA@AA@A@BA@@ABBABA@ABCAB AABAABBBA@AACBCBABBBABCCBBCBBCCBCBCCDCBCCCDC +DDCCBDDDCCDCDCCDCCDECDEDECDEEEDDEEEDEEDDEDEEFEDEDEDEFEFFEFFFEFEFEFEFEFFFEFFGFGFFG FFGFGGFGGFGGGHIHGHGIHHI +HIIJJIHHIIJIKJJJIJJKJKJKLKLJKKLKKLMLMMNMLLLNMONOONNPNNPOONOPOOQOPPOQPQPQQRQQQRRQSQQRQR SSTRRSTTSSSTUSTUTTUV UVUVVVUWVVXWVWXWXYXYZYZ[YZ[[Z [ZZ\[\\[\[\Z[\]]]^_]^^]^^_`_``a`babdcfgSiXF?97/6>8+&)-05/@:?WPA64YX]/.XZUQUXUVSIFSRLQQYba>C84333hr^z@FFE??@><<===::q]cpolkjt@?vkkos|~MTB102443354677656799:::;=>?@?@@@?ACD^CCEGGFGIHKKLMNNOPNNPOONKKLLQNPQOLIHLQSPPOORSRNMNMNNONMPQRSTVX[]^acfgjkmsqg\W[pl___W`}\>IHHIHIJKKKLKLMLLMMNNMNOOORQPQQSTTTVWWVUVXXYYYZ]i^]^^^__^``baccdeffhillmnmnqrststwyy{|FGIJMOPQTVY[^_afhkot|ju耒jcmopw㷰ίȴxĹ}|xtrnjiigb_\WUSQO|xtmeccchib`|{xtuyvnov|uwuoppplnpkeeaVSTSM}zuzDCidb5H9^QRPUZ474]Y_39==>><;?@>?B<9;A@@?;<<@<:;:<<78;8988645579;::876696622444326695110.59:9458-+,.,2;8@AHHB92./5:;:6.&(,--,,01%&())3::=;:648//10,BEEHL(*,--/,0/254352890,/880/32.24..3./532253721232.02.(+*+64113111.-,*-+*,.-,+(OK'J&*)(',-''*+&'OKJL&,*')(''&$&IDFD"## +&'%#"CDAE"&(%$&## ?"% ! A<9> !$#"#%!$$&&% ! !'053)" !" !#!$;@/%!%"!"!!#%% $&"#!#)"&&5876679%,,'%$!""%&%$#&-+'$$##   "$" !"#$*,274%!&+'3.2 "!##&(#&+0""(/33220371-)!,'"%!(:**(!<#%$$=qXYf]afX[_BH3SUXYb6fZ_\`URH7DD2HCLF_@BG^_UM[NJ_\ZSE]QgaWPNBIMG>Q@KZ9%;RPmQ[A:SUMO;P79DZ\ZWHLQMMA44?]S;B<@TEIFBCHMCDC<6Qf9P59;>4GF?EC@<;:458=816671S+5GQ/?=MO9>BN3bTZXNY@(=GHC<4/.?0087:::<=??==>A>/58;=>CIS)2;AEEDEEEFFIIC>4134454%!(0$KJH43\7EBCEU18A8T6D==ZRJ216WJGILJKPOLMOMOOMJINGMKKMOZDZLSQ4.3J2=NXE<@[R1H.W]ZYYWWI-5TRR)(SIGGECHIHFIEC=CNM7/TZUUWY.0887413/ 9@CBD$5:>@DEILAQJH5&FPJB4(9CGCGH-GI>IFBHHRXV43)&%&.pјu;?@=76632446426n]cnjgffm9=qhkilvw;5*!#((&'&'')))*('++)(*+,**+-,.-.--...1211014234346786757753889;=<=:==?AA@?ACGLHGJIHIJJIJIKMNMMOPOOQRRTVXZY\[ZYZ^b[[[`uzimuzap4Ƅ\ꄚȇ懄ֵš~êɵǾԨ{|yvrni`__^bc^]zzytvzuuru{~xzwrsplghjfba_URURN|C@:p{vkkmpnlfegfij59dd42ZXY/_^01--/.,ZROIM*)GIGHHIMT]a\W_jntaLMeHMONJB:;8>BHGE@=@><74[YX,60ULLILL+-,TQR*,/132/023244-,0678733350**(*(&'(&(&&$#%%%),+,*)()-+*&###"""%$'%%&&#&'%&#$%! $ )-2.'!!$$"!$#&$!i # #!"39:;= !$%$#""!%'(('!! !" $ # ! ""!"#!!!! "#!!"!FE$D!$#$!""!"$!B$  >89:1103)*&$(    +    6  !"     + + +            %&I45=69=369%,3133883855*(&$"$ (&1&"(#1#$%44.*5,+732.%3,:5/+*$(*%+ &0!(*=,1%!**(+!*! %0/.,$''&&!-&""#2)'&$#%% !"(7# ! ""&%" #/,/0,/&5<<3,#.#!)*./---0210165')-1014++)/358622133572,! 30'5&''"*,)."%.$ -$! $+ *".(%"@98;<:=BA==A>>=<=9;4;7789=.8*/,+%-& /)$?ICAA<>8(,@:76003524456:::4:A?.)MSLKML&)/0.-+,&.4745&*05=@DI;@1-7DA8) +./6;$2//HEFHIF>"9>@(*($0(67?IT_V.FFA=08+*25,0@H2  2AIDB=3KW0' +:GNOTG5-:*D3L,D -AIE$DGHKAGL.,*)= 1 #.;JHFC;- DE}|}|}~~~}}}~~}~~~}}~} +~}~~}}~~}}~}}||}~}~}|}||}}}}|}}}|}}~}}~~||}}~}}~~~}~~~~~~~~~~~~}~~}|}|||}}|}|}|}|}|}|}~~~~~}}}~~~}~} ~~}}~~}}}~}}~}~}|}|||}}}|}}}|||}|}||}|}|}|}|}|}|}|}|}|}|}|}|}}|}|}~~~~~~}~}~}~~ ~}~~}~}|}|}|}|}|}~}|}~}~}}}~}~~~}}~} ɀϘƲĄձ׽ۆш݀оa⨭ԱϺ᎝ۼȴƺƶD   + + +k\|]Z`K& !B뀟ݮ̷ݰƛфɢƏ뚨񺷁i,팤ǰŸʟH!   !! ! !! ! !"!"""! "##""#""##!"#"#$"#%$$##$%&$$%$%%&&&%%&&%$%&&&*vþ仕ǹԀچvA# ! ""!"!"!""#$$$%&'(*) ***)**,+*,-,-//..0/012324543355689;:;<=>=>>?A@ACEFFJKMO(*+-002468;<>@BFIMPSUZ_clu}HKMS`u򂌘k^jr~ٯ§xqic~|zsronnjfa[XWWUSRNKHFCA<;:7kefb^]^]]d¾ͽİ쇆θijżǷȃͪ蔪žĻøѾıҿʷԿĽʼϽ˱ǵȵ酌ͧÖƼ鶫ӼķƾՉϵТ莌˷ɷɑ˚싙Ľρ߷Ʋϔ§ʱϖƺա򤭥݀ǹÿȽ抾鈋ͧݑ½´󆍑ƕɖ埀ꦯ̲מΣݳܲ׬ۀ^`d^TL)-7*%#.X_YZ\J8:.%$NVQQNI1 6--0&>GI*(@$C'&?+)%.*GJCRUO8&<:J75+0KL5KC4;1F$0@M@3! '+02/2# $$('),,5?L,33 !"$$^#$+0,)),.9H/.;2MO4=ZI.+)),/8?E:2.59=>&()+-+KUD;0CA<40Q.J12;9@R/4C99@;59@BIVVbcX[OHAG,LS^_RKJC4GHGHGHFHGGGHHHFGGHHGGGHGHHGHHIGH +GHHIIHHIHHIHIIJJIIIHJIJIHIJJJIJJIJIIKJKJKKKJ KKKLKJJIJKJKJKJKJKJKKJKKKJKJKKKJKKKJKKKJJKMKJKLKKKLLLKKKLKLKKLLKJKLKJJIKKJJKKJJKIJKJJKJKJKKJIJJIIJKJJKJJJKIJJKJKJKJIJKJJIJIIJ IKJIJJJIIJIIHI HHIJIHIIIHHI +HHIHIHHHIIHIHGH +IHHGGGHGGGH GGGHGGIIHGGHGHGHGGGHGIHG +HGHHGHGHHHGHHGGFGGHGFGGGHGHGFHGGFGFGFGFGGFFGGGFEEEFFEFEFEFFFEEEFFEEEDEEDEEFEEFEdH}|IHA^xjwN~XiS{xMsb]WCjjuaniurj̤}zwήBCCB;d눉̟}☦zAB ABABBABBBABA @@AAA@ABBBAABAB@A@@AAA@ABA@A@AABA@@ABA@A +@ABAABABA@ABABABBCBABABBAABAAABAB CBCBBBCCBCCBCBCBDCBCDCDCDCDDDCDDDCDEDDCCDDDCDDEDEDDEDEDDEDEDEDEDFFEFFEEFFEFFFEFEEEFEFFEEFGFGGFGFFGHGHHGGHIIIHIIIHHIIIJJJIHIJIKJ,IJKJJJKJJKKLKKKMLKKKLKLLLMLMMMLLMMMNMLMMMNMMNOPONOPOPPOOPQQPPPQPPPQRQQRQRQSTSTSTSTUTUUTUUVUUVWVVWVXWXWWWVXXWXXXYXYXXXYXYXYZYZ[Z[[Z[\\[[[Z[\]\\\][\\]^]^__`_`__`a`aa`aaabacdccbUFiklJB94I-=>A;8310.B74UUC0.*V.-..YYTXXUNNLMOLIJMQ\\7B?633hZ\b:>?CA=>?>;;==<=9i^_ln8igl?>=??@>>@@@BEFEDEDDDEEFGHGHJMNONMOONPQNMMPSRPOPTVUQQXYXYUQQTUUTSRRTRPQRUUVUVYZZ_dcfebejmcaXV\df`b`f\DiqMrIIHIJK LMLLLMNNNMMMN OPPOQQQRST UUVWWWXYXZ[Z\]]^g]]_^_`abaabceegfghjknmpprsstuuxxz|}FHIKNOQSVY[]_behknrx}bgnxӀqyy}st˹־|vq~|xvqnmjgca][WUSQwpkijnmljbzvrst|~|xqyztqspmnkkomqhde_TTSTO}|yzFByzrehg_b]_edlqpqljp:8h3445h3655301`WTTV-YROUVNNMLNPQVXWX^fRJOTSJFDAAHKQLIJHIKIE9fWY4M1VOOOXb6<60^`49=A@@?@B@AB@;=@BB?><=;<87758<67=<;<<89589::99;::85351246762457522//598847;537910/8>=FH<3-/8<@>;6-&(+,+.+..%$$()7=9997225,065YPMKEM*+,+.-+1.254472."%,,76/345676..2//0/.,,0332-12-./-(-/.;6410.0/-,++.+)***)*))LM)(+*)'--&&*'JLHIJ%'+&$**'))%%%#!!"$# %%&$#FDCAE$"$ !!! ! "%'$!!!  $&% ""$&%!##&&((**$$#$#.7;6/,&((#"$&)*(##! $1971&$!! ! !!"&.$1/47! "!" "!"$###$''&%&$# #'(%#&2542./0.1 !$')(%#!!""$ % !$%%%)-/..01-*($",2! ;@!!!Fl]]p^ec[WYPO@KWYYc67Z\_[UVF3ON9KF>;7A9_@KILe7TLa^]cE>O[O7M_WTWO\_QJIEGPHPOKP"-bTPII.lQQOD;:_QIeYQ>3JBF39N@BKKAF-5@TDFBAKBEH@FKWX9;<:[=:/>C7<>?>39;8=27;=;B/AFYQ/7HG6D/RS@GD[Vi[MUJ6K0&JKFG8;A>>=>>AA@ABB;68;<:===8`;6O:M.89@DECCEGEDEB6.-016<%-X?*1I7-:195565848UV:V\9A;/C6)(0-L+-316E,GF>1;CB97?HIINIDJ`LPKHHILNMLJIHHJMLHIMHNNONOK0MEXZ574>=BYWSAS]^N?5RRSUZZ\]HB0SOR)+IGBFFHJFDB?A>>JKGD8.XSRU+M-570,T;>>>/"3;9?GEJHcD;04GHKC5.*;>D9%F/LTQU^\]29FT?5.-*1@5IEHFjmu;a]XR5,.3BCHNLPR[V$5IUXNVT?\aec34T`bee[\Xg9MRh:`+0RjgN&JX``Q]Xtr7ZTc5^M=:OX7Ycbd[Q0E3591HaBGKB<6 +  2=@EH5%# 05441- $%   )&'34+##)"0.%1'!''2! + +   #  |&.9#&9/")!# ,3' !&).3#! #3+$#+*&&,-5EHTWLLB<7;%@LTUHCJPÿOń%¿„M +€¿ӭԁ8-(7A/YKSK% 17)#I-(%-,#=5&@)+\2$+%8JUڣT8=./:(.#,@cdBL?[hݩV ¿Ȁ{権TE:3B%/--(&"! 0%!;<0#$ D$$##JIEHHGCBADE>=@DITR.4/'%&^giuŔ557:866641335353e[^jg3bae;;r`cefr{:5'!''$%&$'&(&%'('('))())+**)*,,-0\/0./01110/234445445468;<<<=;9::;?A@>?DFBEECDFHIIJIJLNMNNPPPOPRQRUZVXXVVY^WYUX_gheihmtJk󠡄 {탎lkcdü~׸һſϯ~zslgeeihhha}zywv~~}{zvxtrqokmjmfdd`VVUTPE@uw~tmmlgkgdieinkolgi52\-./1`/0./.+,XOMKL&IGFIIDFHJOSUW[`ddhVHRVVI@;9;BFMHA?=??960YPO,>(IIHHNR+.+(RT+,17775776795/38<;76442/'$$$'*&')&'('$%"&),,--,--.+*)$###$##$$'&$%" #%#$"%($"&'" #'(/,"#%&%!! #)$&&# !$")(D>@?9> "!"%((&' ""#"!! )$%$"!$" #!!# !#$%GF##%$# $# #!@C@@B "a00244  0      + + +    + +       "%+?77E7><622,0$-4428154/*+#,(&#$3"&''6**445:&#-3+)5/,-'12+((%%*$*((+4,*(*7)))$! 5,&7.*&"%%#'+-"&/"#!!' "%"&,-(  !*&" $$"/+81)/*,$::67*+03833...11363-.112184,8+!)+.4533258643.#8+#*+-3# &%"#"!#""%" $/,7798:=96889<<;;=6<;:8741*42# #/-++.,% 9=<=AAEI94'<6810.33576865753<<;90(OKIJ$?(--..0)!I3534"&-/9B?HDR1$';>A9" +%,7-.#=DDFJFH"*3A1$+$638:X\`2OHC@)"/07=:=>C5 (;@8=8+@FOJ5CJOPHHCR-5>O,E+FK66CJG9DCZU+?=I(B2%&7>%DJJNF;%0@}|}|}~~}}}~~} ~~~}}~~~}}~}~}}~~~}~}}}||}~}~}|}|}~}~ ~||}}}||} +~~~}~~}~~~~~~}~~}~~}}|}}}~~~~~ꀅ}|}|}|}|} |}}|||}||}|}|||}}|}~~~}}}~~~}~}~~}~}~}~}|}|||}}}|}|}|}|}|}|}|||}|}|}|}||}}} ~~~~~~~~}~~~}~~}}}~~~~}~~}|}~}|}|}|}|}|}|}~}|}~}}}~}~}}}~}|}} ӿӷ˱ࠍ׽񼼳ι廾ެ׶r¾Ž텏޼ߋ㏦˿ҵI   hC~މpOcY+}䍀꘨޻ݎÙ𮕥ސϡV[ݘ~朅Ԋy3 $   + + +   ! !!! !!"""!!"#!#$#"#$$#$$#$#$##%%$$%&&%&'&%%%&&''*/Ƶۺ˺⏢껀􅉌( !!! !! ! !"!!""!!"""##$$$%%%$&''&&'')+--+++,--,,,..///100133234X5568:<;;<<>@@@A@AABBEFGEHKMO)*++./3589;>?ACFHKMOPSYahszFHHJOVjx􌡶}j{δ޼ӹʸzqk½}{wrrokgfe`]^XSPLJEBA=:rrmjfhjf_ȺҾů˯Ǫцĺъ伬흶μļøػ˶ż°́ùԾǹ񃕒ɾ˻ɸȿŵ烌ķϸ۽ⷋˎҫҶσǴܷ糧χ·ò›̎ȡڛӼ²ꈓ򧙇ʉ¿ƺߕ凊ԉ؜閰Ƕ쿅¾톌̿قڒ񆍋삦⸼ࡤʌǹݦѫŲⶓƑ逭8اЀfdcdhf%#:-:9  /WZW[V98.)/[VRPLD"791%#47ER+%.2((%7"%,48S?MY5*(75A5ZZU?4S77946M"*1FID' %)1,2 369"&$(*.4M.#14!!!$%&`(*/-&),+/E(1C.?U?4/,1?7@%()+++UL>-=D9E<;ka`hm9mgl=>DGJIGFGHHEHJOQONOPNONEPRRQRRRUVWXY00142/[XXYWYWWYXVYY][ZYXZ[_fhfeihjkmja[]fkjdeeg]9WHJJJKJKJKL MMLLMMNONNNOP!RRPQRQSRTSTTTVUWVWWXXXZZYZZZ\^]^^_c``aabbcbbddfgggillmmpprstvwvxzz}GHIKLMQUWX\_acgkmorv{dlqx}|􋞰僜qԴӵӹzt¿|vttnjfa`\YXUTdztqruroiieysoomnxx|}tuzxsspkjopikkfeabb]TUTRU}x}C}Boahie]\\_gqknokor9lfj5i5f46451^0[UVVU--YRRSOTPLQOJRTNOXYK|OSWRIE>9BLPVLJLLNNGA<:YZ6?2\SUPW`5<566559AECB@ABBBC?>?<:995?97;<8:<;<=?:=<358:;:9856555312532/128:7853:675/16858<;439;;4nN20!<8<65<@@=82;MV1729D77d>8D=A<8JVbZPUQO=])%$?HHDA?0/8<86 &+]A:304KQ2<::AB@BA?CIGE@4///4$43 +E5;842W606S44;Y1b`LN9W96N7D35E71(FE249GJG>;BKG:A??HDEJGF@C)LILKMMNKKIHMNJONMMKNQQMR022,KR[4bBC;NgVGKPPI:N)SUTST`d[4BMNP))I>@EHHJFAA@>:=AADD>=0YW[]TO/214?5\,?99<>:6;9GBFLFS./$BCDHE," !28A'!(FNRN[YW7-CQ=LA/))AA7C9Albqul_^\B5$5?GSTWVSZ2+ )1IBLXL?[[\51.Scgd8bdlmki9^q6aC/ascILZO1BSornm79::9eR>YKIiiicZ@$2S3CJ6!PFIHGNP +4;=D@%# +76652&   +#+ + .#-5 $::8' >$ - .."  +   +  &$"6+%47 %$'4.#$+$)*++(!%&''*"&+06>DPPYRE=:=*INZVECBY ÄĿ?Ņ?¿¿= ¿7LU~I$%*)8aF@/"- 2AI,%?C)OS@*A<+%$"-)1+.v\n?-$%$E7HgWe,U:~WT><ÿ{Ԅր뵮ZNC:1#"0)50'#")(&:7.#"#""$#%%$GFE??CGdDC@B?BEPRS11*&)s^qmA2523246630323566d^^be5fcd8:7`ddew8'%)&$%&%$$%('&%%&'($%(''))*+)(,,-..-1130/110./2256545668:;<<=;88:==@?!""$" CDGFFHFGJMLMNQPPMLOQRVYVUXXVWYWYTYaigcffjtKn^联󉗧䈭ބqzrӼθõ̂ɼwrporoohhgø~}|yz~}}~y{wsqvwnnniiehfaYZXVUAy?{rhmmkkiedhpjkonpm5c^_0`2_00/1,U,SMNKJ&%KHGFCGFFLLJQTQX^\OVX]TH@:6=HMSHCA@C@8623RO-2)PLOIMO)-+-//+.7=<:8999:96368;65642/("(%$)*(('%&'($'&#(-/10/.,,,*)%$%$"""##')'(%#)%#" "$& #&&" !#&,)'&&  "'#%&##)@-'$''' " #)))+"z)'! #! # +%%%" #"!!#" #! !"G%$!"#" "!"!!"= " "545{        + + + +      ) + +  + + +    + + +      + !"$%,479G<@;4...1'.4358//30(&!!% !#  ),,$%!1)!)/3(&!(+.-3971-/44-(*&-'#%%&&1-&/!9),0*'#.1'&)%(&$' %%('22('% #$'')(3(!#""!)0&*45,0.1#3"+).:/,14323-$,2312!*)*+2202013863*  #!-)+32').($$!!$#$!"#"# &7:<=?@?<;989:7@@>>:<=;8: /.45%&*7*"%''$*?=;:;HNJ)3826/)*024664454/.015843*OLOLFE),+/9.N(61131%*11?:    )4*8DBNGF% .>0@2n,*'0,7YPacZIFF0 +!)4ADFD:C# *%1>/)=AE'3GPOMPVVVO'HV*F*8NF4:D5'=?B@@ADCCEGHIKMO()*+,.058:;>?@BDHKQQQRU[bjrzAEGFGKP]i{؃ᅟ뇋ǮΧ˱ys|ywoib]XRPJFC@=uvsnknZŭŽøƺ쇈ֹֹѶʻ䉝ù舡뽬ŀĸ˴Ķрµچ˸˽󁎚Ƴƶ͹ㄈù쒱¬рлʜξŤƹۿ˺Šˠ轏һοĀױɶŷ賄؎ͷÝⷳõ풍蔭ۥƕٺĵۀ񐒡ǵϽŞþ򟷓ڢ۠ ‏ƺȖߟ֐糛&谳ѲǴޱ]eecgc.+#+3.?;0# @^XSYU6-$'MYSSPI*/WF)*&,@T+(B2%(&@)&":4HDBZ35.00K5P0>S:=B>289:FV]\^\b\XNF>ER[eOMC@?8JHHHIHIIHHHIHIHIHIJIJIJJHIJJIIJIJKJJJKJKKKJKJKJK JLKLLLKLLKLKLKLKKKLKKLKLKMLKLLKKLLMKKKLKLLKKLLKLMLKLLLKLKLKLLKLLLKLKLKLKLKKKLKLLKKLLKKLLKLKJKJJKKLKLKLJKKJJKKKJKKJKJKKJKIJIJJIJJJIJIJIJIIIJKJIIIJIJIJIIJI HIIIHIHIIIHIIHGHGGGHHGHGHIHGHHIHHIHIGIHGHIHIH GHHHIIHHGHIIHIHGHHHGHGIGGHHHI GGHHHGHHGGGIHGHHGGHHG!FGFGGGFFFGGGFFGGFEFGGGFFGFFFEFGGGFjEFFEFFCrgYG7dd`oRRVsaiu>VGTelMauą}et|CBA`nz^ur|~myźDCBCBCABAAABCBAAB@BBA@ABAAABABABBABBBABAAABBAAABBA@BAABAABABABABABBAABAABBAABAAABAABAABBBABBBABCBCBBBCBBCCCBBCCCBCDC +DDDCDDDCDDCDCCDCDEDEDEDEDEEDDDEDEFEEDFFEFEEFFEEFEEFFEFE FEEFEEFFFEEF GFFFGFFEFFGFGFGGFFHGGGHGHGHGGGHHGHGHHIGHIHIHIIJIIIJIJIJIIIJKJIKJKLK LLLMLMMLLLMMLMMNMMNNNMONONNMNNNONONOPOOOPOPQQRQPQPQQQSQQQRQRSRRSRSRRSTRRS TTTSTTSTTUTTTUVUUVVWVWXWYXXWXYYYWYYZXYYYZ[[Z[[[ZZ[[Z[[[\[\]\[]^^^\^^^___^_^_` b`bcbabbbcbde_6}zZDE<874208IBD>2242<;QTD620-,0.011XSWYPPQONKNKMNSWVg?>:5FGACcM?;@DCBB>?=>?>??<8ie`^knpji9A@_emqwIQL:10.*,/21234688;::9:;=<>?@BAAB@?BFFGJHIHIKKMQPMNGMMOVTPPOQRTUX06346544312]ZYZ\[[\^a^]^__`ekhhikkr;7kdchmtnkloo^xoSJIJKJK4LKLMLMMNMMNNONOOOPQPQQRRQRSSTTUTVUUVWXXXYYYZZ[\]]]^^`faaa`bbabbccddefghgijklmoqrrtuwwwy|~FGIILNPSVY\`cehlmquy{`ekpvz报ㅛ놖쇋óáǭɼ|wſ}ztokfc_\YWVauþxqnpijkieĺwrqijj`bsxslptqlnkimkggjgb^]^\YSQSSyuz}~B}@~sigde[cb]deioriipqlhl6fi57843`a[VUQTUZ1ZXZVV,OMYQGNUSUXURUUSRK@=@BC?BHHDBAABADF?=63+%D#*211042%$%,.5<9:963473633.14<==$**+-,-004435835<:80)2?<96../,+/-+0...-.10./53/./-**.183.,+*)))(''*)(*.-**'&%'(***('//)+*+***+--+0)'(&&(($&$CAAE$$$%% +GDCDAC#&((&$&#"#"!#$! #!!!-A""#";776++0'$ " $#&((($"""$18<979541.+-6-+-( "$#.432& !.5/++.*&"!!!#$#"! #$!!"$#!!#$!!")(&*()%'&)'%%"""!!! $"#&"# #&##%% 70.-++.-./!'$!".3%*$##&)(&%)'$()'  %7979>8eY\digicXPEVT4UY\TabbLG]SRLB=5=T:4?AA_VMB1T7NQH=BMMRWibRW[bYSQQROHDCHH@=K\maHA,?=QcWBC;WcK6KF<:IF4R^FJIc?N\RA[UOHGGHLGIFDG/S2-?DLJ8+0F<<>=>><:5@=51,65]OX/R\/7G7>=F2-<+H2@IBRTKQUVE\&D2DALG'FE?7Z.5IBI:i_[9HDBB=BA4S?O6$98AEHHFFNMI;4L/&RCD?<84baZN@b>6:/S2T3G_:j9SV0<=>MLZUF3QRKHD86:8<>GOD?FKH1KIJHLNLKJGKWWJHEKNLP7E4R:eX7b9?:H`V;=@?52.1VXYVU[\^;H0RQ(K@@EFGFHGEGB>=@>93CHF85#%>?BF773,03-5L#5;JQ\LIDCc¼ʀ ^fÿi`:8gqw⣀3L'#$69/ 6 7M\28B,n4C 96E5&-%)>&$jaa10�?(#)$/:@-AǕ2uCZ+¿ĄL҅Յ؀ΖСtRH:4/)''+2*)% #!)':;1&$$""&$%''FCDC=ACBEB?CABEKQP[4/+*CG=@zhO92430165411324674a^\Zeijea3:9Y_fm{=10)$#$"$'(%' +&%('(&&'(&*),-/./10/022321001000134634655799:;<<@<9;=>?"$##$""$#"#CCDHIJKKMPNNPOQQVYVVYXX]/+XXZ_fmiehjpur^ე}uóyѱǯɽ؁zxrnrlmmkhɽ~{~y{yqs~{y}xvxxtqrokkigdaZXUTAz>ysmmjnisnfihjmsrqmjfef2ac1220/XXTOLIKJN+MHIDF$DDPLEOQSZZX[Z\SQG<:KOMLJFDCEB=884Z[-3-SLLKQU.028;;58>@=<::9:<>64887325321-)++--(%%#"%''%%&%)-//-.-,-+))&%$%###$$''$#"##"#!$#! !(' "%%&*% %# +# """#(#%%# "!!!%&.2+ ##&'&)*"&&$# !  "!!"!#*%##! !! !#"!##"!!"""# "! !"  "# #3414567:44        +B + + + +        + +   + + +   +   +  "$$"=48>B>@;2.%01134/655'$.''$ - ,*& -(. !-+-*%'(,-95,/151.,++)" !,-84*)! +7.#(-3&)#!$#"*#&+;'(6($0,($$$#&$$# "( !#$ (#("*!# -"**'+./%7$ '(0330)*#) 610$!!! "#+",!*.265323:::3+,!& -0,& 2 ,-&5;.1! ++-.'*''$ !  & $*;9::?A@<:76@?=<8;<:<<:9%,!7&>1 8 "&3,! @B@<:CHL0;"771)*/112556853//-('/5;3/6.*-,---.>0*(*.47%!/-47>GE3)058=.&!*9! .9@CE:$''8Aq:5$%:!,"0bPR]UKEG<  -=CGFBEK>#-/;@*%4>HM=;LPNOWYQSAGTRRM:.D:6E8 +'@JL*+*-/YE+6<*MVZRK@@2/+}~~}}~~~}~}}}~}~}~}}}|}~}~}}~}~}|}~}~~}| +}|}}~~|}}|}~~}~~~~~~~}}~~~ }}~~~~~~}|}|}|}|}~}~}~~~}}}~~}~}~}~}}~}~}~}|}||}}}|}|}|}|}|}~}}|}|}|}~~ ~~~~~ ~~~~} ~~~~~}~~~~~} ~~~}~~~~~}|}}}~}|}|}|}}}|}|}|}|}~}|}|} Һ賛ӟر܄񆊇ᲹʽƬcށ޹ȿ݀丕Ǹ߀مýĺӧ-    $ #jӃwxo$i€)9x璆ҳۑԐ͊񔖌zkX87j|Ɂ̨䝅תM)   + +   "  !!  ! ! !! !""! !" !"#"!!#"# $#""##"##$#$$$%%$$%%$$%%%$%'&%%$%'''%%'-2ǹ߽ͳێ턉ǻةK"!!!"""!!""" ##""#$#$%&%&'''())**++-,,+,+,./../././/0./000//2333233357767789;<;P>>AAABDCDFFEFHHJMMOPQ))*+,,/37:<=??@CGJPUVVW[`gnx@BCEGJLNRWaixwꎮրӱ£ҺȻ˿xqkc]XTOIE@=:88kddmλȿ˶񂂀׽턎˿򌞮ƿ甊¸Żĸ߷úȀǩǹ߀􀋔ʌɫĹѴǻоƮۀťƽǪħʳ䢽ſܫ҂֓ԭ⵾ۀւöވ׽ſѥʹȊ쨛Ԧ򌒀–ȼۼķڂՉ΄آތ¿ǨӌÑԀϛۆ󐭐ֈԵׇ5ʗķڶѳ㺫פ߀-]ggbfP04)*1'C2/*.MTSV<&"66]VUSO9 CQG;:" 4M+)&<%'$#1"#,5<@=X*152+:<4c`A:FZPC@126%0IYLC) $.+-5:-033%,+-5?)! "% $$%e',,))+/;(.O,1D.OGM:(%$$&.8*=75.*-2JAA&,-)&=O702;4//?5I++&OO>+61C;>=;8A<=R^`ZY_^VPJE@MVlaHFMJBGJHHIHHHI HIIIHIHHHIHJI/JIIJIJIJIJIJJKJJKJIJJKKJKJJJKJJJKKJJJKLJKJKKLKLKLKLKLLLKLKLLLKKLMLKKLKLMMLKMLMLLKLLLMLLMLLLKLLKKLMKKLLMKKMKMLLLMKLLMLLKKLLLMLMMLKLMLKLMMLLLMMLMLLLKKLLLKMLLLKLLK JKLKLMKLKLLLKJJKKKJKKLJKLKKJKKJ IKLKKKJJJKKJDIJJJKKJJIIJIIJIIJJJIJJIJJIIJIHIJIJJJIHHIIIHHIIJIIJHHHGHIHHHIIIHHIHIHIHIHHIJIHIIHIH +IHIIHHIHIHIHIHHIIHHHIJHIIIHIIHHIHHIH IIHHHIHIHHIHGHHGGHGHG HHHGGFFFGGGFGFFFGFFGFqEFEDDCFFFHpڣ̩CE;7Bbc}wZG]}]9?ohu?N\Xx׈fp{q͔~{aϚxmː}ψDCCBBCBCBABABBABABCCBCBAABBABBCCAACCBBABBCABBBABBABAA@ABABABBAABABABBABABCACCBBCCCBDCDBCDCCBBBCCBCBBBCBCBCCBCCCDCBACCDCDCDDCCDDCDCDDECCD CDDECCDEEDEDDEEDEDEDCDEEEDEEDEEEDDEGFEFEGFEFEFGFGFFGGGFFFGFHFFGFGFGGFGFFFGFGGHHGIHIGHIIHHJIHIIIHIIJJIIJIHJIJJIJKJKKIJKLLKKLKLMMNMLLLM LMMNMNMMMNO NPOOOPOPOPOPQPPQQPQR QQQSSSRSTSRRSTSTTTSSTUTTTSUTTUVUVWWVVW VWXXWWXWXXXYZ Y[ZZZYZZZ[Z\\\Z[[\\[[\]\]\\]^___^_^__^``_``aa`a`aababbccbdcTdccfeeejT^ohBG?588'HHDSC>99:317JYF6//+.40242,-,,*SUNDGOMNLMQZ[;=:68;BCE~IF:<<87g`_kpnggp?CibkoyCHK4221///02423278:;;:<;==?h>@?@CBCBBDEGEJLJIGIHJJIKMLNPQNOOOMMRPQMMNPRTTY22365233233/V+XZZ[\^[]]^_adggijlmt;FIFFDBCDBCB?A><:;=@><<<8:8;53226998@@8311587686655432//3100102220./1431/20,,,1:=?BBFF:1,+3?>941)%"(/3012-+#!#1=9<;926843'48=C$*,//,.110//43/7CB?/0486?5*.,+*,,)++--)-21/03/.//,')).51.,*('''(''+&'',+)*))()))+*'(,,'++-+,)+.,)-&&)&$%JF#EDBAAGD#'%HA?=CE!&'t&$$&*''$##!$#" !* ;9;8=UmX`hlkhaZM9\N8NQ`K[`cN=VMMKJ@71M8k9;b0ZRM@.CZ0>?EE3._6m;XMXd7hbdbfdTLDQUPDCFCC:-Y]bO6ML<7FTU1[afWM?\17>BD@@@:69576;8-L>RXSYe^GbEJ/4B.,,,1C8AJQNH9,[QH;S=:48#5!:=[]64=37BFDCDBB<5bTS8DJEVY*GK)%!!.6L5$1MFC>;61]RINARqgpaRGB4-<=Q,AW]@.=HX7N=/96NQOLI>@G87.M368=@GDB[7)EHGGIJHHJJHLXQ1UGHJLMTR=J<)9a]5IC481BI2S*43GDF'QYXQQUV9E8R(('D@@DGFEEBB>>:2-4FGCD66@AFB;7;3-3D/;==3/9469?ED;DCBJ8E8;AKS\6?<:<>EVYRB?9MLD@@@/6*.3Amlerve[_^N!. $4FSY][XZbd6EQESLZF ?XZjq>=$Pf``chliccdkgg[ihO)2TRYNPD00LW7:po<@eM5EBGgihe]I8a96NF->HEDM7  )25@(88:61 (" + + +!/"DB'#/E:)" .>3&     + #-%2+, # 0)$0"""'60"",')(& ('-CMNIEMQLHC?5AL`]BBJPw>¿ńǀ:ƅL„?Āþ`5GTwPk|gKꋐغg7! )%( 2$@KN7)9!6.LR7,!15F+*(HdcwpC4R1*4!':1!@:E.15(#09判WmdžFӅրǬOJ<0/-!=|=59+'%%'!!$4A3'#$!$(&')(#""!!BG@;=ECFCFKRR41,)15<>@xKC223203643342133610\Y[diha\b7<_]dm|:14%""##$')**))'(&)('%&(*),,*++,.-023123411225544657999;=;<>@C##"&#!"#"##!@!BEGILLIKMNOQTVWXY[^a/.XW]bjrljmru~rXã\戟lwlwĥzսzǾ~wljiheddƾxzzwz}vy|{w~}zwFvtptumllied`\ZVy~>=;vokfajfotddeouxnonmhgjea5d3f^]WVTOKH?I+,&$'FD0RNJOUY[ZTZY^^YSODRNLMMJFEHFB@=1QRT2-TLTRO-4:=@B?8?>9;;<;<:586511376420++),'$"!#$$%-,'$"$,./..-,+*))(&&'%##$%%&''%$(&!! '&'*()+# ($ !% "$" #,,-.-/!#!#%%#$#%%"##*#!! " !#!"'$#"! !! ! !" "!"9!!  !$"##!"@;8:52387766683| +  + ! +   + + + +    + + +     + +      + + +#!&)'5B5;AA?<74,5-!,,6'126)*$$#% (:/,*&"#1"%%3 9",&/59587:8.+%+,' 1.5-**#$,4636-+/!'.%0;'$-+'##$""#!! # %!"""&&)1/-  +!#%('$.%!)$#$ +.3!!#! !1+-&&"+%/4 %"+("&!+E80&!"+#16"!(-* '))'' "!" !.%7:88:=<<;:57C9!567:;;?9%/(&=7,) "%-%#( @DA:>DH08'8-+,/111364752.+(#!*<=88-.99<8317.((1$010$#.),/8CC9R//:<;:(,"$,8CJ'+ +>HC34*@A974)'#(6_YR]^OFHH6 +9CFEDEIC +6/;9C)&:DVZ& 6JIKPSWQLLKQONGVS>01;47')4%+UV01L7$5-:RVTQL4.I#&5+ }~~~}~}~}~}}}~}~}~}~}~}|}~}|}~}~}}|}}||}~}}|||}|}||~~}}~~~~~}~~~~~}}~~~~~~}}~~~~}|}|}|}|}|}~}~}~}~~큜~~}}}~}~}~}~}~}}~}|}|||}}|}}|}||}|}|}~}}|}|}|}|}|~~~~~~ ~~~~}~~~~}}~~~~}~}~~~~~}|}}~~~}|}|}|}|}|}|}|}~~}}~~}|}| Ȼ꿜ۼӨ԰灇񅈃ĿȻހ_̸õűʜ϶惂޿ȷл§0   n'd`I>3ůёS70;-`RR‚ZăцэϒڏȂɄܑڎvƝ۾ÀǦa        !"!!! !"!#"!""!!"#$##"""#"""$##$$$%%$#%&&%$$%%&%&%%&&%%$&'''&&'')bĿؽӱŹ㋾vȾýℂX!"!!"###$###$$$%&&&'(*)()++*,--,--. 1011001123212g34545655569889:<<>?>>@ADCFGIIHIILMNMNORTSVX,,-.//036:=?@BDDHNQW\_`bemqxFKLORUY_flr{p钳ߋ񈋏ทɶļͼzsmd\WRMGFA>;74ec_]cɼó˸²սԉĿ׋һω½țƸ倸кƷļ񀆅׀䃋÷¬ýƯŲĽŸļǿ񁈇灵ı̹̀ƾȾ߿Ѭ˸״޸˭ӃǺƊąވϐوՐȱļDZƆω爚ѫЖϿݹěΐ򂖇©՗Ѐ񭬊ģœ󇬯քɸܐ婺͸ҷµԮΡཌퟖՀ3ɺظȥ̢ր0Nh_^cR@*30+H8 5HJ;,="%VUVUTK(#>@59"&Q*(&?#'!#:"!%,/99*3#89.=;K((*2XVN02M<>;7/3708Z^_XW_ZSMH>CRXlWG:@EC^IJIJIIIJIHIIJIJ IJJIJJJKIKJKJKJKJKLKKKLKKLKKKLKKLLMLKLKMKLKLLMLMMMLLKLMLMNMLMMLMMLLMNMMMLLLMLMMLMMLMLMNMMLMLMNMLLMLNMLMLLNMML MMMNMLLLMMMLMLMMMLLLKMLMLLMLMLLLKKLLLKLKLKLKLLKLKLKLKJKKKJKJJKJKKKJKJKKJJJIJIJI JJIIIJJIIJJHIJIIJIIHIIHHIIHIHIIJIHIIJIHIHIHIIIHIJJIIJHIJHI JIHIHJIIJIHHIHHIHHIIHHIIHHHIHGIIHIHIGHHHIHGH +GHHGGHGGGHGxHGHHGHFHGGFEFFPEbpBead?k`mϘTqz4Wv~iYh~TXZ}njbգu}{ȑǢtҗYǔtjn~}|䀊CBCAABBCBCBCBCBABAABAABCBABCBCBCBBAABCBCBCBCDCCCBBCBBDBCDCDCDCCDCDCDCDEDED EEEDDDEDEEDEDEDE DEEEDEEFEFEDEEFEFEFEFEEFEEEGFEFGFEFEFGFGGEFFFGGGFFFGFFGFFFGGGFFG HHGGGFGGGFGHGHGGGHHGGHIHHHIIHIHJJJIJIJJIJLJKJK +LLLKKKLKLNMNM NNNMNNMNOONNOPPPOP QPQPPQQQPQRQRQRQSSRSTSRSSSTUUSSSUTTTSUVUUVUUVVWVUWVVWWWXXWXXXYXXYYYZZZ[YZZY[ZYZZ[Z[\\\][\\]]\]\]]\\_^]^]_^_``a`abbcbc ddedcdeddeT9yht?>=796ILS6LA==;;0,1DTG340/2225321--,.TPODEKKHMONX[c>>74;BFGCED<>@GHEFC@?A>=?@=7:niekuplmt=@uelqxBFG464322124655326;==<<=<>>?@b?@@ADDABCDFHGIJLLKKIIIGJLLKJLJKJOSOPOLJLMPST^/33201112331/0..ZXYZZY\\_befjnnps7<9jmptxtrqoo1ivlJJKLMNMNOOPOOOPQRSRT UVVWWWXXXY[\\]]^___``aabccedefghYiijjlmmopsqrsvuwy|~JKLMNPPRUWZ_bfjlrwy}]cehlruz䁏ጬք݁r~lyqƻzuo{÷wqlhb^\YVTQO~zuhb_^yytkmgda``mpk`bjfgcaab`bcee\ZXWYYUTS~w{~|A{|~vmjf[ZZ[Xconqpdiolc`f6oghdabc`_ZTTSSUZ.---,YZ2;STV\WUPUJ{|M[\\WSTHUSQUTWTSROLH@4WPU68e]ZYZ8CGLKJF?HLJGFCDDABA>><;<>???<:<:9566;7472+'.<>3457-)(#!!$$"##(&()&%##+$!!"%("!! "!$(+(',.152+.+'%''$%#" "&$'''### !! !"!" 001,.!"..&'", ('/85-&%('$#!%%!$&&!/,19?5ah`efoqlZRIG[TKNVdV`TbYBQIFEJF/%K9k;[]]XOBA;YCCFEKLFB@:Y<]NWc<787_6i[LBOLT>ANJA8CB<<_P@@9?]VG=dTVXR7[M4YO5JLK>7G4BF@Q3EEQO>=KFOMD;YY.)!/+F/E*5CLDCC;:==;601*M/7&XZGUP:6+:I73O9E83N:,&:3/*F<,-/F:B@=8SKdPF7*YECS]^7:?EE@=?C;Z1;4`HN;ewg_'$2411;;L>UWIJFD@=94]R>f<`E2B^`\VVKEdK=0/:GHHLLKNJMLJLI-?ZOOMHMQYLM?1BLU3NQ87K?DE/8DQGMD8IMUVVUI=4EUQ)*J=>CCEDCEILLHC><<7326?>DAFIDED?;3,F/&.J//*MD8/9-9B0&3ERgbapl]abW=\ #1AMV\]Y\cY)0INMMJWY,=YWnh9$'D3c_dbjj^_bfif]Zf^US5QQO`^P--?MaccnujQ9;R3[cffg`D4OZ/BVA 6GCFL8& +" (/# + +06:86-   2   '&' )"&&E)(%>I4+$% <=0 +   + +.%**'  "00"2#!!%!?<.!5')'#"*HLLGEJLGC>68GOeQ@7>UfɅeƅ.€¿Ƈŀ¿܋?(RHz9Eḡƹ|02Fc;.",.!1+,a$%&"'#"0.f;72~K]Ed/jMv;)05a-130<5Ҙ&K¿Մ܆܄߀OA900,>DG,;,''&&!0<4&&#$''&)'&&"""$CA@:=DA>BDEPQV31**4=BA?D?333<421445331146502`a^elhcbf49i_fny<52$%$##&')++**'()+*)(*+,---.0144466765467565655656556::99@?>@A@B@E"##"!!!"!"#"!!!"FEFGHJMNQTX[[\]`b,..[`fmsoonqw@RϢ:C匧yz~cp^wojbzwupkhdĽ~¼ּzujfecźuyy{wvtz|wx{zxupnggfbbb_\U~~~>vvytmmmfdhhagtxzwnoonife4ifgda\\YWSMKJIJN'&$$$HI'1FLOVSWSUOU_aa\USGTPPRQRNMKIEB9.OKO00YTUST3><<;::96643456662000.)(),)&'*1-50&%#(*/0//.,**++($%&$"#$'&&'%%&$"&&""#"$('*++'$! ))-'!'.2!#%#!$$$%$$#!#   !(#"""!"#  :@< #<438;9967750 $#"  + +h +   + + + + +    + +   + + +   +     "%?@9==@A>2.))50*+/9.5-70!&"""%$)9///,( ! .$%##'(%## 11&-5!6;3)")&+! $'# 1*"$#3.$"50-.-2+0$#&!"$&$)"!() &"'%!-/$##!'$"&&(!!+&/*$ (*2.## .4') 6?3/)#)'+&5/'!%./-*+%$2%'!!","($"$"" ''!"#"::8>><@>?<797):8<;:2*2991(*/...047:<93-()(%(,5395<>:;:84.&;4"!86-&/3=A<52$"*9<:H12-*14%1743$&DSO40@?;=5#*-!'4KZTR^UHLLB(-9@FFGL>/5584??">BXU$,#FFLNUREIILONFFSQG5 + ++0=JD3+EHKU[O8%*<%IMQTTN*,>A/:%}~~~}~}~}~~}}}~~~}~}~}~}~}|}~}~~~~~~|}~}|}|||}}||}||~}}|}~}~}~~~}~}~~~~~~~~~~}~~~뀊}|}|}|}|}~}~}~~쁝~}~}~}~}~}}~~}|}|||}}|}}|}|}|}|}|}|}|}~}~~}}|}|}|}|~~ ~~~~~~ ~~~~~~~}~~}~~~~~}~} |{|||}}}|}|}|}|}|}~}|}|}| şܩܰ߼ί˽Ю­龶΁òĪd途ڱȭŧ۲灒ʽ̹ݹ +      nD~n-R돓隦qwnc0'(ydۇǯ䥭疯эĚѾÿ꾝̦ҩ(  +    + .     "" !" "#!!""#""!""##"#""##$#"#"$$$#$$%$#$%%%$%%&&%&%&&&'&&&%%&&'('&,'ƤԿ݊ĴLY#!"###%$$$#$%$%&'&'&()*+)))*+,--././0./0110012234i33446677888:;<;=>>?@ABDGFGFIJNNNMMOUUTVZZ./.011223569=?@BDGINQW]cglnsx~QW]bejt{dkuDZƷʽӽѾuld^ZXQJFB>;:6532`_ZZ]½˺ū߾Ʒ⎢򚦲Ǹ런Ŀ㹐мǿ傐ΤʲՀ󂍑􅓰漵ⶥѿ̺ǿѷ·ľ¶ɽDzտץϜДƴƼ뀅ѾꑿIJʼݏʛ̿І椔Ë»ݐݗɵޠ˙ܴ˰޵੓ǒΪóӒ̘Ƹѹ˾ſ߄ÝܗŻ˘׾󃋄Ā٘鵔܆Ӽ÷ç̘֛ԉ3çȺư甀>*KZRSdl_:-9 1PR0%MYM4&3 5MZZXYC3(%;&+UR((F '"!!-! '05D>;43$(%%-9hE]2ZD=@6.1+%1E\\\XVYTOIB=DS^jRDFGB^DJKJIJJJIJJKJKKJJKJJKJJJKLLJJJKJJKKJJJKLLKKKLKLLLKLMLKKKLKKL KLLLKMLMLLLMLMMLMLMLLMMLMNMLMMLLMMLMNNNLMMMLMMMLMLMMMLMNMMMNMMMNMMNMMNLMNMNMLMNNMMMLMMLMNNMLMMMLMMLMLNMLMLMMLMMKMLKLLKML KKLMLNLLKLLMKLKLKLKLKLKKKJJJKJJKKJKKJJKJIJIJKKJJIJIJJKJKJIJ +IJIIIJIJJJI HIJIIIJIJIJIHIIIJIJIHIHIJJIIJJKJJIIIJIIIJKJIIHHIJIIIHHI HIIHIHIJJIHIHIHHHIHIHIHHHIH GGHGHGGHGGHGGH{GHGFGFHHlpzrl恐܍ϩdROw_Єv;]qq>9=OtQIsbSFwx&ߔ{|ilnšrwǀ܊}܏yooͯohz}JCBDDCCCDCBBCCBCBCBBABBBCCCBCCCBCCBCBBCCBABBCCCAB CCBCBABBCCBDCBABABCCBDCABCBBCCBBCCCBCBCBCCBBCBCBCCBBBCBCDCB CCDCCCDDBCCDCDCDDCDECDEEEDDCD EFEFEDEFFEEFDEDEEEFEFEFE DDEFEFEEFFFEFEGFFGEFGFGFEGFFGFGFGGFGGFFFGFFGFGGFFGGFFGFFFGGFGGFGGHHGHGFHGHIHGHDIHIHHGIIHIIJIJIIHIIJIIJJIJJIJJJKJIJIJKKJKKJJKKKLLKLLKLKLKLLLMNMLMNMNMNNONONPNPQPQPRQRQQRRPRQQRRRSSSQRQQRSTS0TUSTTUTSTTUTUWVUVUUVUWWVUWWVVWWWVWWVWXWXXWWWXXXYXY[[ZZ[Z[Z[Z[\]\]\\][]\]\^]^_^^^``a`a`aa```aaabccbdbdeddedfdddfdhCPryH>?<=7/PP4?B;<=;4++?_M;6*558ED4231--,-UXRJKOMOOLP[\8B<57BCFGKH?@ACHGGHCAA??BE==<;rfoz}tsw?Azdqqj|AF6:973444779:7427: <<>??<>AA@@AAB9CEDDEFDEFGIKKJLMLJIKHFGJFFIOTOLJIIIJLNPUX//.///.///232010-Y-/013478:9_]Z8:6cZV`CIJLKIGCGKHHCBDA?@@>><<9;:89:9::749;>CLI:6135998;:977542/132102242320055532430125;::BEFCGL''+,++*+...//23.6>5$139011,)*))*+**+)))(**,/2///.)&--+31,+)'((&'$%*HFJ''&IFFGFIIHM&(0/))'(&*+*-/-/'*+'$%&$&&#CBDDD##EGD<7? "!"""7;!(-./)-7=879#&&%%$??>C" :@D.'('#./.+##! %*,%+."++/0((("&6 4)*%*:?7397/3+%"#&" !!&&%%#,!#%%$&#.*+ ()%(2//1..1)&%$()'&%&(%,,*)'%!!!# !#'%$(&'&&#"! 2#.$'"+.>J=1*()'%%"% &'#('# "')_i_fin9kZQHP\\X\\a4b[`[5L>5ANQ5&VKg\W[TTCW]BK>PKJMS5AJ?A2=GEGHMH<_UAG,&91>9%=IMDBA5;=>170,R7RlC""#9XFFEJBYJB3GkC8Tcj-2S*;F5T;553:9BBBD@3Z3D>Ceb,F;O7-)$15Q-,5-RXJHFEA<82ZM::IVL23=tJLCfkCc1!"^R[USQSNFDHJK>KGIRDB923=KF5G34TQ'()A=BCB>=AILONHC>><:965877>F?AD;HG;.D B>.)5=B?=_2#A4C;MK@@9D97FFGIA<74@BSh]`@KLQI/9R7(0F@jfZaaad\ZV? (3=KX[W[e>CMQLJQVALOcl\$,Fg`Abgii3c\`hlhbM][F]3*"CT^clhI1>EHYiehZ<;ORNYdeie?:aU0IQ. "6B@DMUE"  +13/7-)7787   4,    " *&&+B-&)4*:/% ./D?. +     + u6'+**  &"(/ !4+'O3:A/*+%4JJIHFFFC=:3:JTeK@?Jf¿˅ȅ ɅWąX…Àÿрi|W=d/>6%LEr٩R8+I4 0 5;FL8MA4'&&&7'?/!$Sen1K#/6.I),7$( '}A2)7eQWj ʄɀ񭼗WB;52+'EC-3/&&(&#-C8-)''(22&%'%$$"$CEBACB?CFCGOR/5.)/:>ADIA344233355432l36:3334h_dmpghi79o`mmkq43(*)&&'*)+--.-+*,+,.0210131124669:88;<9779:9:99;<99<;97:979<<;@@>>?ABAEG##"!!! 5!#"!#" !"#J&(*,,.0./2a--.\^fnpronpw?ٟ'Ƅeڅ|ixnd]T{slf`Xzxsjeƽ辦}xvpdc}z}|~~z}|x{{ywyyuqoopmjcda```[XS}|{rxxrbghin|{w{tpmjiabe5idgd]a0/VROKLMRRNI()+*(*,GNVfZMUWVYbca]YLwOUXZXWOPOGC>61POM020YUR[=DDFDC@=BC@@<;;979966469976201//00./-*'*++/63'&$)+/0011.,,*(&#$%##!#&)')(&&'#" !)*$$%$&$!')*&32 $$*+'!"%$$<8:5;>? "##$"#$"$%%%$  $!  $!"" "" %# "!";9=::?A?BA@@!"  ##"$//5664662-2))"$!## +        + +  + + +         +  +  +  "+   7=9>?A!>2-'.4414378571% )*9&/3-.'*,4## *'$"())) 0 +-6 98:8-*+(! $"1&*$ !-$ !),$1+'*&* ) ))/ $" "!%#--"#!"#'!.$ ' 5B''  &"2&%06)"$!!-#!.1* **&+ ($+/, ';&'#D7<%71*0()'(&##%%$$!#)! "%"!<;88=?><:>:9=#9,6B(>888=,!/%.77,!$( $$$,&+%7;@A<5<,*=:-),-,**06:A?81+++(()+.//3=77;3?=2'762$!,8>;9S'1+;4A;20-9/+<=;;1-"$)>UOV:DEIA(/A)"/7\ZLPNaJLFGB% *<@BHR) /5;737;$-1JUG+E@0JQTQIDGMTTI:KJ=M ":IQVP,#)>KLKA)(=:9COQTS, ,L< 29}~~}~}~}~}~}~~}}}~~}~}~}}}~~}~}}~~~}|}~}~~~~~}~~~}}{||}}}| }|||}~~}}~~~~~}~ ~~}|}|}|}|}~}~}~~~}~~~聡~}~}~}~}~}|}|}|||}}}|}|}|}|||}}}|}|}|}|}~}~}~}}|}~~~}~~~~~~~}~~~~~}~~~}}~}~~}~}|{|}|}|}|}|}|}|}|} ﹓ѷɹ񴟥ӎ򆇄ȰӮ̄Ԯ_귲ꇗ;ͥ+    + +?@?@BBCDGFEFHKNNQRRRTVXZ\]0122455779;>CEFILMRV[bjqw|Zakt{r눛ۇ克ͷ̹ͷŵһ{nh`WRLLHGC?<:66521//]\YZ{ýȽ俍ȶ쌧ǼỒȲοǻƶǀ聎Ľļ˾ºۿŴÿ˿üͻ̲؀¼¿ŻһƴՀ鋙ֱ̋Ⱥ˸͖펷㣆媕霩܃ªڽ倴ҮȸɘʿʱӦڵԄЪٟ棲󦈂ƢȲöדԣඛиͼ´۞څ‡ᖄߍ׼Ȱʖǭ¾䖕ôБ¶̴썤¼Ũ1֬П׼ݼϻɮـ-&BXUC+646D)'7EUUGBO=*--UXB&'7'&##%&,7AL-=&.9GL@JMKFB?gjR?.9L7-8L\PH(!!1:#8-/-1%(.N3 !!$&&,]+)(,.3B4V6L#,.KF?2/33>$:%+81,('*6CR4KP0-V0)*&"":.<%(('*3DfD7`J?:<816/0)@[ZZZ\UKIF>;=NaeJ;AGE'B=YeWKHs[}osdgpVxv~ړlêq`rmtFCHHEHBCBCCDCBDCDCBBBCCCBCBACCBCBCBCBBCBCCBBBCCCBCCCBCCBBCBBBCCBBCCDCCCBCBABCCBBCCCBCBCDEDCEDCCDCDCDEEDEDCDDEDDEDEDEDDFDDEFEEFEEEDEEEFFEFFFGFDEEEDFEFEFGGGFGGFG FEFFGGFFGFGGFGFGFGFG FGHHGFFGFGGGHGHGHHGHIHHGHIHHIJIJI JJIJJIIJJKJLKJKLMLMMMLLM LNNMNNMNONONOONONOPPPQPPQRPQRQRRQRRRSRTUSSTSSRSTTSSUTTTUTUUUVEUVUUVWVWVXWXWWXXWWWYXWXWXXYYYZZYXZYZZZ[Z\[\[[[ZZ\\\[\\\]\]\\]]]^]]]^\]^^_^^__`_a`a``ababbbabdcccbcddedegfffggbKn~X@@>?:6.T37599<75+.7]\A1.?;5BU96511`]^[UVPOTWWSSR\eiEC<9?IKQKI@BEDEGHLLDCBCGI?ADBzot|z{DGtrxpR=FG=9778:;==;:7;9=%;;>?@AACBBCCCDCDCDEDDDEFFGEFIHIJLMOQQOLMNTSKKILLKMLPSTV.0..01235576579:;@Al9:8ijnprqqlig;Yn}JKKLMLLLMMMNNONOPPOPQQRSTTUVWXYYY[ZZ[[[\]^_`babbbcgfghiiijijjkjlmnnnoqssuvvxyzz|KLNOQRSTUWY[_aeimqv{~mt}{vrzṟsϻ~s±}ǹô}wtnkfca]ZWTSQONLK{vroh_zvwvrmjtrlhj`kljcdggaaa`^]_``_`\\YWZ\U{xz}{~~u{}[_jljqnolkghncdf8nb_db]c22^XWVVUVUY\56.1929V7Zcg^bZKTU[_]YVFxMZ]__]VVWRLE@=67:;73ddc:DIIIFDDBIHGFB@AABBA>?=<>>=<;:8<;::89:99:;?>GK>6/05:8787433341.03211432201./2442153.148D;89318202OFDDHKN))++--,,/.-/-/1.:@,&125/021**()+*()*-,,*/,125,+-+$#)*,1/))(MLH(&IHJHHGJ&KHCEJKLMIJ%)/-)---++)&(+*-(('$#'&##"??A! #%&$>>!!$(*)(&%*+)"! %%+/-29=D#%!? !?423@##>;>*&)-/1-/)'$#"%%"$$*-#'+$!&%!)464,)&&6:=?3/68'# #&!!"#&&((#"' ',%" & (*/''+**$)/./0')0'(!#+/-.--,.,0/0,(###$!""" #"#%$%$&##"!%!"!   !00.'-6EGG;3/('&%% "'()(&)*8od\ckjlh^IV[[W_`ahlib`X./E5V[NDL+V>cWYVVQRLDGSKFEGHJEKTIN>J7NTkq;8h_bZRTW<'D?JLDBJV1GM^P60/FI7@FLJDHIDj9MI@/);*26NNPJD=98=5,@23.NNR=.<8/,..,+)]HAH&47Y66*$5,.OE2C.L?2&PT86K+-7"-,QMI=_7?AA;4<8T;OVI9JE?2BMRLFIJHHNPLJN33:NWX.40TN6:&6ZJ7MB70G=P@SSQSQLN74OQSRMA=0(CM<-*J@@AA=9?AJMONGCB=<<<>=98874DDAHJHD:*4(&752JG8=<=k?7 5ZabGA1idRG@>QWW]]$?MRLLRT&0;]O;:bgJ`dige2]\5jb_LO?,.;?)!>__ehn_9!+GWRSa?;=\DQ]`ebR!+_bR/ES%%5!0NQVR* + &=<'$  ",/$$(-/"  ")'("+/3/.-OR6* 3D7+ +  +% +  #7'(%#  ",6$323 ,N.&A4,(*'"&!!0IHHIJA;=<635EV_E8@R+ńǀXƅ/¿k¾¾ɄȀ@QЍpq-%%>AI8NOZc؛    +:533?-* !,$%%!%3'!&C 7270+:&+~g<4/-") %0'!#+ˊ7  5#7рɸkF=83,*%G,-'&&($#%BB/"-*&0<('&%%IGGA>@?@CCFEFHOUW71++5CILH@4673111684555:=379;kekwytrtz?AlmpiF3T=6/0.-,+//032323231346775778779::<;<<=>;<:9===;;=<::<=>=>=<:=>=>EC>@?AB@ABCEFG%%#"""!"##$1%&&')*,-.0/38_./.\_fkonoorwAqexhsm^~pf]vmd[{u̽ľ쾬³yuroi`~}|u~vxztqsrrqllljhfaa_\\_Wzsy|jr}{zzvpgeeY\^3kcae`Z^/.XROLMNOLOO-,'(+&-H1MZ[T[XSdadfb]YFxM[^ab[RPPGA;72--/0..Y\\5?BB5B>==8789:<9665677530/.0122..,*()*,*34*'#',0/.//*)p&$%&%$$&&&(&'%$##! "')#%((.#&*)'" !!!()(+($&$$%>:;=DAC! #$'&$#&$%%$$#  # !!  !&!$!<@: =?A>>=? C@;>BABC?= "#"" !,,,*, "!!!   + + +  +   + +  +    +  +               +  &&&  =97949<::>?;:<&!(9==$ ;9&&&9*!.(&, ,(')*&' :;<40.*'(+/0..00-:84<=96/!% /-)582989b4)#DQX;3$XXL>4><<=::8/*'&v11V:EGLO?,7%"2TWNSPKK@JID* /IKPNA !IL716|}~~}~}~}~~~}}~}~}~}}}~~~}~}~}}~~}|}~}}|~}}~~|}|}||}|}}}|}~~~~~}~~~~~}~~~}~}~~ +}~~~~}|}|}|}|}~}~~~}~~聠~}~}~}~}~}|}|}|}}|}|||}}|}|}|}|}~~~}~~}~}}|}~~ +~~~~}~~~ }~~~~~~~~~}~~~}}~}}~~~~~}~}|}}||}|}|}|}~}|}|} ௾ϴ뀏ùℎځĜ؀ƻ`ϑ件눀ڑ㉟҈Ƕȸȼ    HJvĞ۠ƗL!3Lׇﮭ׮לɊ󋺨͍}ȒΈֵȘƬ½ײf#|^   + !   !"! " !!! !!"! ! #"!""!###"##"$$#$%%%&%$$%$%&%&''&&&$$&'('(('&'((('''(''*"Ϫɨȿ풤ͷʥi¾򂎒量Ļ؄& ! "!!"""#$$$###$$%%&&'('')*++,---,--..0/10022334334577678889:;>T@AAABCDFFHIINQOQSUVWZ\/0234579<=>EHIJMOSW[ajs}cju~䅘ꈡよ׺ԾìƳzpykc^VSMLJHGD@?>;97431/..ZY[~þøѾ􆍑޶Ĺ۰׾ķՀʫ˼Ĺĺο󂇄ռˬս˺ƹ׼ȿοӶ޸ƾĻξـۖΣѻɄԼ؀”˽π플ߤߥԵ晵ڿ¸Ēɷӟݘ叅Ȥʎùצ˽ķĽпʎ뷋֊ݶȿխˇǭŮ΃ȿ½¾¯ϊۿϼá搱مⵑѲՎ硞㌭/̋ǠĴ䭶Ǥ>&)*+Fa`cgf7,&'JZOJCD3$2<%(3>OM+- R3K$+=%)##"/'%*D?W,2&*C4'BH3BMFBZnb:6-FI05CZVL@63=:02"-03+'!"$$)-/+b%'(.34*4?;-++(H>7.2>?EJ7**2+(',-8I+13S10C+*(# !66'+'*-/8JkL;[D;555445=>ARZYZ^RF@A;;:GaY?<;::;>>?;<<<>:<==>ACDFEEDDFGGIIJGKIHHIJLKMMQJUSTVX[Y[Y]^\XVUVWX\Z[`a255457898:;<=>@???>>?=>===<==>?xp<;8mikjlmlib]T=eFKL MLMLMNONOPOPPPQQRSSSTTUUUVVWWXWXZ[[]]^__`maacbccbdeegghhghghjklmmmoprstwwxzzx{}JJLOPQSUVYZ^`cgkpu{~sz瀊{uv{s͹|Ǵҿt;|xqpnkifa_]ZWURPNLLKwolic{zvwwsqupoxlfjmjfaelmfcd`_]`_aaa^]^X[\URO{wvw|~{y{trwhlusprmmmkq8igilmd\[`fah3b]XVUUTVXRSY_^546757_626_UGX]_^[ZU<=QZ_c`^\ZWROHB?98;B>6;A@DDGGHGGEEHHEDDBDDCBA=?=<>>==:77;;<:9888:=>>;=KF=32484376214441015312335301.269734852545BEAJF?/,'%+3@;886-$'+-00.12-',18@?73610062/0PMKL>IJFK)-,,-,,0..-,//031+523/31-.*(*/.*-,20-.52774/..-'')&)-,((KVJIFDIGEJ('IILN),()((%'+(#$'('(&''$$$:@!"#A:97:>4*+2+&&'-:99+%" !+.,00;6.-##'&&)& $# #01.)''$08<@3.82%#+-')'%%%&$$&(%-)!)7-(  %*#018160-',+,'*'(*!2550(+1.311/-++'&)+%!)(/33&)*%%/-&*" %""%#!" """   %*-)".39.2&&,27=?871,)$&'%$%..)'&*(P_VXbc_mj\PWYUWdc]`9_fYZ?ABE{iGK@8IZQj^aZUTSYUZKAKKUJHONXSQ6G[9Aa><_ZZPNWEL:K,N:>,EG13@?FPHJOFE=E?=D>E?FKFIX2GDPe[UfS0)=L3P9?/HA@_FO0`:1.,06<9>709750)R@S`<7+--..."6bMD3B=k@08?+PG4BQ3/-,Q26R0=(),K40JGR6DKDQ:21@@9GILCwG//*(',11-(6aCF6I#?IDB?=:6_XHQ731/-)<;D0)-44494/a\WWVMMIRMJIIIMQFDST8>4W9\F27CB2S'RRJJKIJOYJFIN_9KFG.BJ=3FJL([84M=0U?4CHI9JNE:A2TFLOSTI?5;R8PA&K??@C@?=?DLQQKCC=;9;=@@AB=8ACEEJIHGCA=3M:6*-.J258o=tHN=1ALF>=%AVS7FFHHEEEDID;,PMKB\J29V?:R\feYM!PgbOF! 5NMQTQ  />:3.& + *, +*(  + 3 &"20.CWF#*)@>1%  + + +    (%""!!%2!$9!*"1M4*?/(%'('),210@HHHK?76<532>VV=:hSFȄʄrɅ0ȄńL¿ń6DžDŽɀ}^?mj 7)(!.Q9^9*69e{ϳ7!2"21 +2 [~!/"0$(A)?,%3.%+E7LDgFdK*0&+&O,16Gu¾ׄրܯN>840((#$#!),'"!9=5&"*+&)<*'%'$GGB?>BFGIHLFCMM]W460-0HOPG=88654336878:9;<9??=tppx}|zEEuorsQ<83102110012365545556677798:999;::;<<=?@A???@@@BAFJIEDDFGGKKLON')(&'V(())*+)+**++*,--//0235gY/..^^dfhjmrtySVٓs쀋r~iwg{fqf]|qg~ĸѿú~vpmjf~~wy{vqswupomkijljfge`__Z\\VSO{vwzrqzvqnhl4\[]ahe^^`a[`/ZWQNLLILMGGPSM)))++/O-+/WRLggfc`^V>>AA@?@;=?@@=;;9<>=<:58667744/--/0320.-+**+*&*40*$&*0++.+(&))(&&&(%#M$'%%"#%'$"$('$%'$()"(&"!" #$"++'"&%$#$#$%:@DBBC>9"#&'%%(%&" #!%#$! "$ "!! #!$%$ #  <<<<:>! >@BA#%!"" !!"!!/166 +  +W!! +        + +        +      ! ,315;<9C=6.1222::57"7:/0 #$&E:%+&'*0,:360-+-2/0& &%,%&))1..*2#6C""3/0+)/$&!# %*&'*$%'" ""!$&"%1!"'40(3*!%-#(2%"##$/ 0$ !>*"#&%!%&" # ""#7(. ! ($ (  (  +,+*)$%"(&$"""$% ''#-- )??88::9A94*.6"-#3(**,)(*+1<=?:31,)&(,0236309:;9><:9762)?2+&&=(05i9mAA+.;=4/8JE/?;<=9:=?C7BHIQU4%% (PEKMNKG:MKLC)D@2,9AI7 ,7;9:?D+ 3GJ !;JIFTSRG?%OHMF3' !>;)FILMRUN<#:."#@),>JRPH)>=>?AABEFFIJNQNRSSVYZ-013567:0&!4FB&53^]K&?9'&%"7$,$O]PQ4*-2)-4--#$4%-$! $!#($&+,'^$(*-2B0%0I-+&+G6017B((F1012,)+0;F-018]0`81&" " %'+(&821:V5G=G?9475<=:@BHUZVTSF9>LaO9D<@4FJKLKJKKJKKLKLKKKLMKKLLKKLLKLLMLKLKKMMLLKMMLLLMLMMMNNM NMLMNNLNMNNLMNMMNMNNMNONMNMNMMNNONNONOONONOONOOONONONONONNONONONMNNNMNONMMNNMMNONMONMNMNM +NNMMMNMMMLMLMLMLLMMLMMMNMMLLMMLMLMLMLKLKLK!JKJKKJKKKJJKKKJJJKJJLJKKJJKJKJIIIJKJKJKKJKKKJK +JJKJJJIJKKJKJJIJJJKKJJKKKJJJIJJJIJKJKJKIIJIIJJJIIJJIJJJIHIHIIIH{G?A`jjpbȏݷ|jtba`X2U(hxaچ]PU|ygzaoqqkgud~{zœhy|o\|uf»_aіFkICD +CCDEDDDBCDCDCDCBCDC DDCCBCBCCCDCBC8DDCDCCDCCBCCCDDDCCCBDDCDCCBCBCCCDDDCCCDDDCCCDEDDCDDDCCDCDEDCDDDCDEDDEDEFDEDEEFDEFEEFEF EGFFGFFFEFGGFFGFGFFGGFEGF +GFGFGFGGGFGFGHGHFGHGHGFGHGHGHGHHGHGHHGGHIHHGHHHIHIHIIHHIHIHIJIIHIHHHIHIIJ%IJKJKKKJJJKLLKLKLKKKLLLKLLLMLMMMLMLMMNMNNOPOPOOPPOOQPOPQPQQQRPQQQRSRRSTSTSSRSTTTSTSTUTUTUUTUVU"VVVWWVVWVVXWXWXXXYZXYXYXYXXY[ZZY[[Z\[\\\ZZ\\[Z[\]\\\]]^]^_^_`_`aa```a b`aacccbdcdcdedfeeefeffggffggfghhb8k|LCA9:63)*))/7>AB-45SQO@5F>7;FE=:63af3244ef^acb^]bgo?KICANVTRJIIIJJLLNPQJHIJKIHGI{zIHwyVcDA@ABBA"AA??>>>?>>@@A>ADCDEDFEHIIJLMOOOPNRQVRUVWXXZ[[\\\^`_]_achgfegddfij57:<==<=@?@ABDCEEFGHHGEFEECBA@@>={ru>;87kjgfggh^lyujQIKKKL0MLLMMMNNNONOPPPQQPRRRSUUUTUVVWWXXYYZZZ[Z\\]^_```a `abbcbdeefffgYfhijjlmmoqqrssttvwyz{~~IJLOQRSUWY^aeimrw~v~~syྡྷzӶ{ٿһ~wqĺ|xurmkgca`\YVTROMLK^}{wpngdwsustusuohipjkgfgmlhefddabc`^b^`^[\\TTR{wrt}FHz~fqlgqwuurgpnp:7bghmhYY]gfaeb]XUTVVTUVTTTa5<7456ackg_^cOTVYXURtCTZ]bb^ZZVPLLC<36?GB>@?<>CGGHHGFGHIGEDACDB?>=?>>>=;::89><=;:9966;;;::HE>443743642255531132224463456;=>;765IMIGMQHB=D@HNC;@@GG[0dHPTY[BFaD1/.4^43@@nZ/4;"96.,-A# :LOBDE8>996:<@72[KU:C1.,/0//'+2W[LA,9673$SONJA-261VT7,+PCOQ-%%$X2MKG+4FO=S3?C@DJGDIL(..,+&(423.%(5A0<27IFCA=92S@`AN1/0(1bB9&1=S;8>5PU88=MJKMNHIGIIMOJLQDS4F/L[GCA>+KLQZPIDDH6I@"*@@?;@@;30ROSII57i9;\S`8>LJC:#24MHFJGFEEBBBCD9@-2EKJQY\@ 8.+#0^HMW^`cVW]^aN(!Jc\dP;;DMZ]F%-?RPQW-%4La^#;MVgeg2dVZl8lgG'$&,EOWH@WWX\beaaC710ER$9BP2=Yce^F.C`d^6%27LMNPSK:@@! +&+-%  +&" 68' + +,"!&+*46PO7 + "5E95      + &%$!&-(C 9  #9&,+2+)&,-363669BGBAB928=838CWL5@>Wńǀ9τoÄ/ńOʄɀǻClBS9 **5#82*,'8=ݕ-"@0%$ *2%RR/!9((8'2!-$o %)/6)#( :p&(:1!+N\cF2RO #"".6FOct #¿ ۄ܀凼WA;0-(& &*++!!955*#W1+'+31+'%$GI#!#$HNIHMJIJPUX2:50.CQPK?<;9766457<;99:<=??C}ts|}z|DBzsusDL852121112133435t687:<:9::98:<;;<=<;=@=?==?>?BBAA@@ABCCBCCCDFGLOPOMOKJLQT*+,-.,+,-,-.///000/11222132223456oaY.-,/ceddfjsr{r֫ueqj{nqc~qɯ~óľپ}ysqji·z{zvrsutqnljjigghcab_b_\]\UUT~~EFxzftvzzimhh41W^_dcZ[\d`[]ZUROMNMJMKIJHT,0*(*,SX\YSU\Q\[][WNl?OZafdZUSNFEC93,+0:98;<89<@AA?@A@?A?=<:<=<96687666210./31220..)')*)))2/("&)-,+-+'')((&&%&##"#!$&(((,+,(%%)+&)(&#%#!!  !#"!#)'("&$%'"$}LE@B=4#%'&$$&$$%$%! !$!#"!!! !!!  ""!! "" >: >=<>?=! C@>@ ?"" 8;:673&*+)',,(*0:;@>51.*&%&,013568;::=<7786683+)CEH@?04c56RII%)::3'$*B<;=;:89799y::.2&);BDJQQ4&#KD+&;<;?0HA $3=OQTL=?P+VP20=G57FHFKPSLE&%1$/5 +DKMJ/1LNH}}}||}~}}~}~~}}}~}~}~}~~}}~}~}~}~}~}~}~~~~~~}}~}~|}}}~~}|}}~~~ ~~}}}~~~}~}|}~~~~~}|}|}|}|}~}~}~~~ꁜ~}~}~}~}~}|}|}}|}||}}|}|}|}|}~}~~~}~~}~}~}|} ~~~~~}~~~~~~~~~~~~}~~}}}~}}~~~~~~~}~~}|}}|}}|}|}~}~}|}|}|} ˋՠ·ȃƨݶ͂跌צՃբ̄Ԭµɸb㎒㧢фпM !  {$㓵їwMoӳƥֲԂ̖ʽޢӉ޸㐢Ɲӑ덨l         !   "! ! !!""!""#$#"#"#%%%$#$$$##$%%&%$%%&&&''%&'''('''&'&'&'('''(('(())('(((**+*)*,ݽй挟Ķo+" !"!""#""##$##$$%%&%&'((()++,+,,,++,,.--..0l.-11/000222123445556788999:9;<===?@BABDCFFLMORSQU,,,.03569;@CHKSX^cit{p}ꅌ߶ɪԴ{ӻ~tja[VT~yume`]YUQPOLIFCBA?<8530.-ZX[̹놅夘킄緆ԻƻȿιøŜͺ܌ƿ´Ǿǿ߀ŰŽû̱˻ـ˸Ƽ¾ijʫ̸ȿ߻րˀ׵泀۹̸ȻߏָӁۚȳϻƧǹ؋󬀆ʵҿļ׊ѫųɩڅ،ʬՇ݉흞żöҚǰąԻԹ¾ѵࢍۙӂôݔ쁔ƥš׫·€νȽ孻ӄ䗦Ĵٜ׺ϧ3Ӊ։Ы卩ߛݚy'8(",7\a^_cfX'%&;ZVB8>FRG#CHG;&4I09%J1Q7C%()&$!&+22>FP)#'&5D+-N-05KFSbe4+UV@Ahc6]@C܎RmqIJdk[lwx_^qoyzӰԜvkqԘԑmۑok{m~͘~DDDEDEDCCDDCDDCDDCDCDCCDCDCDECCCDCDC +DCCBCCDCCEDCCCDCDCDEDEDBCDDDCDCCCDCDEDEDCCCDCBD ECCCDDEDEEFEDE +DDEDDDEEEDEFEDDDFFEFEEFFEFFEFEEFGFGF EGFFGGFGEEEFGHGFGFFFGGHFGHGGFGHFGGHGHGHGHGHGHHGHGGGHGGGHGGGHGHHHGGHHGGIIIHIGHHIIHIHIHIHHJIJIIHHJIIIJJJKKKJJJKKKJKKKLJKKLMKKLLMLMLMLMNNMNMMNNONNMNPNNNONOQPOPOPOOQPPOQP QQRQRRQRQRQQSRSTSTSTUVUUVUVVVUWVWVVVWVVWXWVWWXYXYYYXYXYYZZZYZZ[ZZZY\#[\[\\\]]\]]\\]]^]]^^__^^__^^_``__a`ababcbbbcbbdecdeeefffgeggffghfhgghhihhhKiVGK>9833*/5/./85:;7ENNC=K@9:=<::88653544b\X[a_^_`foqEJG@IWONOKGHHHJKNOPQHGJLJIKKE}{|DFG|vyLLCBCC{AAEFFGEDB@A@ABCEFEFGIILKILLLMOSVUWWVWWWYZYXZ[^acaccddggghhikmnpmqq<<;<<=>ACCCEEEFFFHHJIHJKJJIHGEECBB@>?xtw>;86ilhefhfc`p^UEKLLMMLLMMMNNOOPPPQ'RQSSTTUTVUWWWXYXWXY[[[][\]^```ababcaaabc_degfedffggghijklmmpqsrtuuwyyz|~GIHKLOPSUWZ]beknu}x|{uի̫ϵĸ~xtnĺywsnkhfa_^ZYUTQOLǾ}|yvtmg|yxxurnpnhfloigcmjfgiebacc_``^_^_Z[SRqGA{}d``[nxlnolmt:8lcbeol`afc`b_`ZYXXXZVTWXXVa/30^a]YWd``fTG|jzTYXUSjLQZ]a`[WXRLMJC=2;CG?<=<<>;<=;;;:89>>CH5#$$)+6:87+2(-/2+,,-44.(+038964:6203..0*(NLIJMO+.,,-,+/-,00.11,.233:8721.+()+*((+*')*+**,/,.-())+),.,)'&&'&RNHK&JI(*((IDGE%C#&&$,/,,(,.($%%0034.-.-*" #()*&'&&(#!>> $&$(+-477; #"$# !84!!" @?87123/-14*#%).330&!%# !(#.1(('&%,04+$&'6:<65)* &*8:,(.61*,* -+*++.-(2)1736!:70)-/98! 7&34-+/8!0 9&)/.2930*''292*./+*%'-,3,2+'-?5$!!$69'##'$&$" $*07/707/4)$79==0% ,73235??7($"!/,07&'"$$&SmOK`jX8kZia_[[_cbfK``1[SPK@4^]PhPbF*.KANMK>9^TX\9D`AutB*VXUK:C.,G-AECDFFEIF<2-1/-,+02123-$3acREH466R:2VKPEB2`W;80FePED( 7FWIKD:'G1R8RXBB?CC=>j`-/1-+'0012.(,<705,GFD?:2L5182//,I5YXK2#:]YZTUWRVUIA>*&=NKJJHDNMRPJB:S_YO21.I?20_-4>:BE6-A=ZJ5KHQ;D>PMMLTQGC;84@G-*H??;:?;9AJNPRGB?;9:;=AB@?ABHHJINOIHAACBB>82AX522\\puJ[C<8K@5(GLQQDIIGECABBDA=]D3VQKLVUB@)7%(+RM:Xglne]_^b[7=4a^bcX[I/9W\K0!AQPTX>"I^<8"=^gbiRRadmoP$A$@MO[Q6TYVVXY\el\H*1>%5I6:@_baT-1[haU0$)HLKLOP> ">@, %/3(&))( +(,  %+#+./?:,29;84;LQD:C8gŀZ˅ɄfĄĄƀuk&D>% '0$!'<"A$ *7`} +#*bI HF=1#"$!E.*&", 7!.$+03/%II9(4_e7G09#/ofeqDrᦳoÿ΅̀کfGC1+*#"$!! %"!$$/24.*5,')++**('&%"#$&KHGLOIHJNT\]884.>QLKFA:8756568=C=;<=d@ACE?wuzyx@@Bsso>>;631./22233110553457978:9:=;9;;<=<==;>@=>>>A???A@DDECCCEEEHHJJLOPRSRRO)+++,,.00/023546567545568o\Y-,-.`ebabiorS~Ȓ<;;;86437344422/./20220//,(*&%"),+,$&'*,+.,*))''&$$%$$%'&),/,(&(*&&$%&!##!!"$  #!#%#$)'$"!"% !DDBAED"$&'&$!%##&$"  ##)()%#!#"  !"#"#!"!  FD?A <9 !=;=:!: !!#$"! "#  -0  + +             + +     +      + ";*):B6#A5?8844599=*;80)&%!71.=.=)&-851.2212'),&"*+(!6-34%2%@?#**)$#""+()(-+!#$%&$&% $('!++/-*%&' 2,# ##!   .1)!##"4("#+%-*"#"& "#)2.$*++# &)+(')%(&!"!""$$#$% ',&#  $56777:8"526&'4C&;5)5(&!8!%&("/$&$+$!/999BA:61+!!'.++(*.+(.7:?@72.)& #(/43346<?97//26740+9O1//VVjnBM3/-<1$4=FF:?@;:8557:74O9*KCBFOL:("A=1HSX[SMLJRO+*&LMRSGC/%MNQ9;KPXU:!,7;E9)CGFIIJLPT@.$ 0 $/HIK@%GRNA}}}||}|}~}~}~~~}}~~}~} ~~}}~~~}~}~}~}~}~}~ ~~~~}~~~~~~~ ~|~}|||}|||} ~~}|}}|||}~~~~~}}~}|}~}~~~~~~‪}|}|}}}|||}~}~}~~~遚~}~}~}~}~}|}|}|}|}|}||}|}|}|}~}~}~}~}~}}}~}~}~}~}~}~}~~}~}~~~~~}~ ~~~}~~~~~~~~}~}~ ~~~~~}~~~}||}}}|}|}|}|}|}|}|} ȵ۰ǽן·Ԁł΄݅ӿȼΡƷaݴ񴵮šƫ+    E΁ȦՒ՘ʧ࿂ĭх񌝹“⇵􍋠هҙԄ˞ᕂުʃ)    ! !! ! !!!#"!! !"##""##"#$$#$$%%$$%%%$#$%$$%%$%%&&&%%%&'(&&'''(('(''('''(()()()(''(()***)(0TϽ߼̭ºU½KށƭG& !"!!""!""$$###$%$$#%&&'&''('()+,,+,./0110/2312g3434556888789:9:;<;<>??@ABCEFGGILNQTWW[^0/258;=@CHMT\blzyҠ~׾}rϴ|voi_VQOwrnle`\YUROMKHECA?@<95331/-Y]xüȮӸڻ䢃𕨲좨ɸϿûØ񐢡ϼû·˲ü¬ṉ̀Ŷô􁆀ŨջǼáҴРdzɼ̨ʀց۱͏ӶŲЀ֠ɏ͹𜨭ćέʜɼǀ˻ҋӎ⑔ǷʪҨҹۃ¾ܣҍހֻڿͮ׹۫تЂ舶Ŧή߇֩͞ſŶۿΞÀƼ׻ˮУϋ޴ڲșᑋ3腳啈䁆ˀ,$$'C,/.356R1(%#%'%%(*%:'++1Bdf[];:8669;>@DEKVUUJ6A@@?A<>UKLKL +KMLMLMLLMMLMLLLMMMLMLMNMNMMMNMLM NMLNNNONONONMNONOOOPON OONONPONNO +NNONOOPOONOP +OPOPOPOPPPOPO NOOPOOPOOOQPPONOOOPOOONONOONPPPOONONNPONOONOONOOPONMNONNMNMN MMONNNMLMMNNMNMLMNMLMLMLMMLML +KLLMKKLKLLKMLLLKKLKKLKLKLK JKLJJLKKJKLKLLKLKLLKLKKKJJJKKLJKKJKKJKJKKKLKKLMLKKJKLKKKLK JJKKJKKKJKKKJKJKJJIJIIJKIHJIIJIJIIHIH8mMZmmbtr{^nkl`gǐyGJe~ND>DJAjjisbp~ihfypm}mxhvnvadtqsmʅيIDEFECDEDDCDEEEDEDDDCDDDCDEDDCDCDDDCDDDCD CDDDCCDDCCCDCDDDCDBCCDDCCCDCDCDCDEEDDEDEDDDEDDDEEEDEDEDEEEDEEEDEDFEFDFEDEDEDDEFEEEFEEFEFEFFEEFFFGFFFEFFGFFG +FGGGFGGHFFGHGFFGGFFG +HGGHHHGGGHGHHGGHHHGHHGHHGHHGHGGHGHGHGH IIHGHHIHHIHIIHIIHIJIIJJIIJJIJIJIJIKKIIIJKJJKLKKJKKIKKKLLKLMKLKMMMNMNMNOOMN OONOPPQOONOOPQPQRSRSRSSTSTTSTSSSTTUVVUVVVUVWVUVWWVXWXYXYZYYYZ&YYZYZZ[\\\[[[\\[\]]]\]]\]]^^^_^^]^_^_`_``a_`a``bbaabcabcbbbdcccdefedfffeefgggeffghhghgghhhihifN[JGD61.1192*SQ/4LNAHVLC:E<647:=:8:633eeebaTVZ\WX\]fpuIIB?SPMOLGEGGJMKLMRMJKJLOKJGz{B@EG?BuyGDKCECBDDFFGHIIGHFGGHIIJMKMOMQQRPQQWYZ]][]^^^_```adgghhijkkjmmnmntttvvyz~?@?>ABBCDCDCCDCDED'CCCBA@?>>=<}sls;987lnjhplh6{bLgLKLMMLLNMONOPPPQQRTSTSUVWWWXYZZYZYZ\]\]^^^``abbaccdceagghhijikllmooprsuuwxzy|~JMOPSUW[^chlsy}򂌗z큌Πɩĭʹ|uokƽzwtqlhed`a]ZYVVTRO~|zwxsndZXzzyywtqkjhorlccnmkjheabdc]]`_][^UWTSvrwFAzvekf\ml`ilqrsm7jegoxm`efe_^`a]\]\XWYXWTUY]ZX\UU[VctchhI=NNUYWMcLMY^``\TQIJMLJE9:BB@DEDCFGJIFFHGHEIFD>=A@?@?;<:;<:9:>>?<<:;869:61=BCD94486587334322115776876552223223265657=C@?BD3'$%(,96:?,;(++/-./.63+(,34;953:5646401,(KFCCEL)-.00.-/../.,-.%#1/-050/./.+((,)()*+)*++**+-),,**)-'*+*)(%&JD?AGK&HFH'&&%')++,-+*)/513-*++*).3232.10+%2944;A**)((&%%"BC! $(*,)+00/>! !$#$#$"$'!"##%$$!99376-*,2(#$)0765#%' )-%%&#-((%(-/&%+5;632)%00'&1*'..0/++%""478:87/'.-=!:67$<7.)+08699=;846:86B7560-.3-,!(".D. *9%,&'*-!!(671/8!/%"#";=2!(/38:7.8,45=1&)*&&&+37:.*1%+'/;::0&".)""  ! gcNJahl8p>qdb^]b^cebgf6[RNOL0>^Vb]`X.??>D]8a`^ZW[VQ>NDHLC8\V5WVWV>538@?cf^LLEBN.A,MNCDC@HE?HITL=@>@JAEE>?>>:->C>[:4--.1445565-!/1`OLID11@6YC82H-<))/;NLI:1DGRZgii`Lj9-0.,(,2225)+(JIN,FDDA;T;>=38.-(*1OWZU#9/GJJJIJOXJ:W=Y+N-FLN:8L?>;/T(Q17C>EJU=JEIKAB4*PNQOBCECO`H.+Q;=:9@=;?EGONIA>;:47:@@B?ADAB<97:953[ZOZKX[H5;:2.4>EKHIKJGBA@AED@8ZMIDFEPWH>@2'(,AC,L[dlieafj`G=-][Ya[\`ZF4?I-M->MQYT<%=&0IA6  +    + +"%#''#&8 ")BD>@<.89:9=8>RF:ЄOȄ"Ä Ä"Ä?ɄʀĿk",@F3.,%&++@4&-<>>?A@>@??=?A@ABEFDEDGHHIJOMNMOUUTWUW[\.//..0/02134466544422233346oh\X,+-.`edbjmq>lߦH|qzpypk~Ţvϻ}˾Ŀװƾ{xsqgûb]|wu{|woqwspppmjijhdceddbe[\YWC?wyuioljمklkmnnh2`]ckqi_cdea]ZWTUVUPNNMNLLLOLIJFGMKYeUX[C<LTYYVL`HIX_caXNJ?@EFE=24;86=?@?@CDD@E?B@B@BA=767776413113411///233010.*&')&")*+-'%',,,-,)('%&&$$'('''(,,-'&%$"#! !"#%"!$!& # $$"#*$%"#$$%#!?;;<=E!!"%%##%$$%# + !#)$###"  %# !"  !!"!  "!!!  A?;<0($%''6.95;3"! #26740-1,*(!&)#,..001"32."$ X"#$ #"!%&.( %"!'#%$%%&)*$$+!-*!$"  -$&#!(+!"' !" $$ $!  "(,442/$:" !#+..- "$%%'&&""#"&#%()# 4 5$ ## .+%-'8878657A3$7%:8 /12#$/$&!.-!$$$&*("$% ;<@>46735:'4(+))2/+,15==:3.)(!$+2561567699?A@;-,174512.231/SSGXDLP>,3, #1;B?AA@=8635985.KC?9;=HLA1,!05$?JR[YTNPVP9+ HHJPIJLB0 )1++7:A>& + +296FJKHIIQYC!'7=D<'>CGFFFJMPNKB9= (!!& 6MME4MOI>}}}||}~}~~~}}}~}~}~}~}~~~} ~~}}}~~}~}~}~}|}~}}}~~~~~~~~~}|}~}|}}}|}~} +~~}~~}~~~}~} |}|~}~~~~~~~~~}|}|}|}}|}|}~}~}~遗~~}~}|}~}|}|||}|}|}|}|}|||}|}~}~}~}}}~}~}~}~~~~~~}~~~}~~~~}~~~}~~}~~~~~~~}~}|}|}|}|}|}~}|} ǑڡڻʻףʷΙؼѬϱ׿Ľ̿nބļ򄙛򞜡񘨱սоꇉs   +    +  *x֌ީܤ󊝂ņሀƥ̄ѾƇˑ˓ǂβȇإҵɉ筑Ѵӻ + +   +       ! !!! !! !!! !"""#"#"!##$##"###$$$#$$$%$$$%$%$#%$%%&&%$%%&%&&&%&''&'(('(()((('('''()))(('''())()))*;ܽθ㉝ƽ񁅇¿9򍎇t6*!!!"!!!"#!!"##$$%%$##$&'&''()((')*)*+,-,,-,./100/0124332323335676677:;:99;;=<>?>>>@DEGIHILQRPTX]`2368:;?CHKOUX_gozu~󀇑胋޺Ⲏrջwqle^WP~}|vmd`_\YUSPLJHCAA>=<;<764220/WXHǿ͵ƾ֭񄑊ƩǾ́ļǾƪȻƾϷ߁~ƹϬ״ʻDz讍ε˛ܲʦŹоľ誠񂁌۸ĊξĿֶԜƺ¹ۿٽ’‰ǨҀ˰Ȭ˘͠û˿ѯ↌Ŕѿ󳽰ꃯףҬɯ̃ͼƾ਋ҟ؛Ց٭ˇ銋Ԑǂإ͡ҧ籴ĺ˾ܝտ΄Ʌ˷ށВߊ鼶ѴȷЀM"AW]^]]`d`M%! ,GTJ:+JQUP/FOPL$.P>(3%FhZKA?#'&# +-22@E=2$!@:11B=6<9$T49i.$3H[[9AEVNUUOA?JH@=@=KVD81345@8157;=7784efhcdd`ZUR\^\^``nnBHG@IYOPMIEGJHLMLNQSPHINRMKHA|DFCBDEG?DzyCMREEDEGGIIGTHJLLMKLKLJKJLMPMNOPPRSTSQTXWZZW[^]_^`a]]_bdcbdeffccfdghmlmfillnlossx=;r9:9sr99978:9:9C8999:9qv{lcn;:7mnmijwry?=@?@@=;;:::<;=:8:=<==;9:95777/8BAD>768735445655425775345333565687624677:>BB?CG5*&').3,0,*"#$.//1/87(&.44<:6375545124-PNOFHL(+/00/-*,---,*,*!&0(,.100...,(),)'((*''*)(,/0..*'))*(+**&'&'NK&'FG)&JK%)'%&),-.+.*)/60.*.,0*).3123//-'%/6 8;%+%#$&%#"!!!"#$)+'.,01/>=9!#$%%!#! $&''&%!9859?-,,1&!)05877$+ ',.4*($'((&'236/(2+%1+"%-'++**0/,#&,,= 88<9/-242;965B981**)42968=7:9;AH:4+*.)#")#%" (/4 + + !971091+:3+$))-&*%-2##$$72487*+4.:2991%$'><5*%%(,6322,,3++.31&&#!# ''?NbKEfk94>ESgb_]aZhc7\c8^VTP>7F=[b_YhQG2KVS\jj^ZRUSNIHDJKKEO_\ITDSTAU06hHcc]^P=)U:9JIIEF>EA/GSTQ:b?EIB;CCGEEMKA57;]ZL:;J<0SUEAH6-0@QTY^`\WU0/*""#4W:BH2:?D;.CSZB...001676.0;5HDI51.&%G=3.G/5@2PF$>@H=@OQ0'VPQSK44=6D<26H185^QLJ0($*-,*(0424,()"7RPBDH2[BP.;E.0NN:-;CR0,TEUY_98K>D?1BO0ECT:8EDHS=7,PLMNCAJFHJ0.-L=?>4<=AABFDDC@<69744`\[8#_\TF-020(1:>CGHHGCE?ADIG;3<65' $  0#*L /AA!%?L<.  +  +  + $& '$D  #*@C53,*'%*,057:D;ACA95E@99:7AM@9hDKǀ,τ"Ά̀ŀɀӴj(3#K8_=3G%4+'@6( E@."<% +  *4 &31"74$B $+%L4!qW("!$"2BJGWKVa竳8t +¿FԄ!݄܀oOB3+##$%.BIE>A2/*-A30+,%!$'+*%')(MOSMNNOOKGLLLMPVeb8961APJHB;7::8756:BIG??IMFC@=tzBB???AA8?oq=IN52//0//0/0//02200102357899:99;=???=(>>?@BCDDBDEFEFJIJJKPPPNOTUUTUWWY-+T+,,[[.P-//..---./00`gldZ[/.-^cgegqsJÇu􁉐{nu|tit}fȺǺ}zyxridea_{w}|rnsvwysqokkmib?hhcbec[[Y|DAD#%%2;87494=8!5; 1*'%&6785?-'+x.,1;;30,-*)$%"'''#*30%0#-.$04$/0-.%%""#!"" $*-, 2!&($$#%%#)'"51($&%!#$+,2440)&*!# ! $ $# &!-(+'(&#&5/++ #!%'$1.!%#( %##!# !#$!%))%9%24(' 2,-%0!";39787564&=(7$ @;<%87;$"''/#)-$"+"!!*88:;24:71'6-/.(052014>?>72-02/413647:37:;@AA@9/098632-0/.0USUV0RTJ;" $,38>@@@9;446::0*4-39=EO>8*#1%4KY[SXWS[VH7CFOTDFHC@/16<@,;@9! 2EEGFHMQH-0>H@+.@DDBDCHMLMKLK1#*''FNI$&BOLG}}}||}~}~}~}~~}~}~}}}~~}~}~}|}|}}}}||~~~~~~~~~~||{|}{|||}|||}|}}}~ ~}~}}}~~}~}}}||}~~~~~~~~~}|}|}|}|}~~}~~~}}~}~}~~恘~~}~}~}~~}}~}|}|}}|} +||}}||}}||}~~}}~}~}~}~}~}|}~}|~~~~~~}}~~~~~~~ +~~~~}~ ~}~~~}~}|}|}~}|}|}|}|} Ǣ䘻Ǥǜדßիҁ󉗅Ǣ󂄈˷gზȼ傒ƾض +   #I냇ǰیʇƷÑϬ⑸՛Äߛ˖ҥšΉãݔғ&     (    !! ! !!!"!""!!!"""!!""#"#$$#$##$$%$%%%$%$$%%$$#$&%&%%%&''&&'('((('&((('(('()())'()(('ʮ;늗k¼ƽżѮ񃪐>("!!!"#"""###$%&'(**) *+,++,---.01245434455566778::;<<=<=??@BVCFIKNPQSX\^adj79=?CEHMQVY]afnu~w󀌜}퉋0Ƨ޸w˳ulb[V}rkgffd`ZSQPNKIGFCA=8975321/..-+QS]ŹŬ挙Κ̀쁋ϯ݇򠰹Ʒ緜þӽú繳󃐔JԳĴĻڿӹʼý῀فɿ̆՚ְޕҟ»ՀǃԽư÷͛ǙľĽۼȽ⪝ٳÓجʺêχ尦ʫԒҿ̌ȣؘϋˢƒ‹ټܰʯĸ~у߰䴿ڙٴᢽևԮˀQ5# /,H]__]]`a^?#.QPF)BOTWA+EQI<#>NA+#4"`4RCD?#$##9#0=FL)!>7'3.6?<<77#57iM#.7KWT9=cdP@ !(&,!$=)%!$!#/,.45+,'!"*d-2<$8*,$--@F=4568A)F4773)073.:#,+)*236S&"0,-2 (0&%*)-7BZ^A;?=7556<VLC9k:>{8LKMLLMMMLMMMNNLMNMNNNMNMNONONONMNOOONONNOONNOOONOONNONOPPOPOPONOOPPOOOPOPOPOPOOPOOPOP OPPQPPQPOPOPQPPOPPOOPPPQQPPQQQPPPQQPOPOPQP QPQPOPPOOPOPOPPOPPPOPOPPPOOOPOQOPNNOPO +NOOOPOOPOPONON MNNOONONNNMNONMNMMMNNNLNNONMLMLLMMLLMLMLMMLLLMMLMLMLLLMMMLLKLKMLMLKLKLKLKLLKLKL KLKLKMLLKLKKLKLMLLLMMLMLKKLLLKKLKKLLMKLLLKLKKJLLK#LLLKKKJKLLLKJKLKKKJJJKKKJJIJJIIJJKKJIJIJJKL{tlxh|wwcdoxcitycC^V[L8Nslomc=BFkHoo]`IEOAdUdZ`cNƛfVRQxgf7hpΰ{vnʁչЅzu͏FE +EDEEEDEDDEDEDEDDEEDFDEDDDEEFDDEDCDED EEEDEEEDEDEDDEDEDCDDEDEDDEEDEDEDEDDEFFDEDEDDDEEFEFFFEEDDDE FEEEFFEFEEEFEFEFFEFEFEFGFGFGFEFHFGFFGFFGFGFFGFGHGHG HHGGHHGHHHGHIHGHGHHHIHIHHHIHIGHGHIH +IHIHGGHIIIHIHHIHHHIHIIHIHHHIHHHIJIJIJKJJKKKJKKKJKKJKKKJKLKKL MLLMMLMMLMMLM NNMMNMNMNNOOON&OPOOOQPPPOPOPPPRQRPOPPQRQRRRQQSRQRRQRSRSRSTTTRSTUTUUTTU +WUUVVUVWWVWXXWXWXYWXXYXYYZYYZYZZYYZY[\\\]]\[]\]]]^]^^]^^___``_`a`a```aacaacbcdeedffeeffggfefhgggihhigiihihjiyO^PBH=;99A83ZZXZVV7CEJW_J?<:7758<>;996heffmd]WY`dcagblqwHHB@ZTOLLJJKHINMNSUOJJORNLGD@GGDCBFGFFwvQNCCDEEDFGHIHIILKIKLMKKHhJIIKMLOMNNQQRPKMNTXWUWWVWXWXX[[\\[ZYXY[_b_[Z]\]][^^cijgfbc_^a_``aabbdd3fghikklovwgco:7ljlkikts:JS;HKKLLLMNNNMNOPQRSTTSTTVWVXXXYYZZ[\]\\]^__`abbbedddefeffggghhjjjlmonqrqqstuuyyz|~NQSVY\`dgkotx~| +ہ჋߿ѧмxoɺ|xvsqmkgdd`][YXWVVTRRPMxż|tpoqsndTVUR}|~lhfppgaelkqieba_]\Z[\\XUQQSQzuxxtnlfvFFD=CEualymeoomot:6hhghec_da`\aed_\XVWWUVUV^d`_4::786146604<>=@<:5668976865323744334557;>>@A<74479;=@DA>EI3*)')-10/.('==# !#:;69<"%%"$## ;;9.72+)-%&,168:7"!,45.'-92BF9:-&#'+-52:0.&(.)!*'"$,)(/93**(+,0+> 5461(820.:!=2.4163*)))-5857;99469:2*! %!" !#&"%&$&"%$%+5<<2/1..4$#""!,)-5'!)1'160/82/03001310/566. 584+*&#!"%',.3.+/2-''##&" +lP6Ahrp96S5eie]^`eg8cW;_/TQ=7N0EE^][_WACKOYd`ZXSLUTBBJJQSLHL[LQOSYWN0C@5TYa\OR++JBKJ?A@U74FC/"72:@1K.NA^YRW)P\A8B4B/"5;@@-3/N;4/*"&)7/%%%&+(&(-.**,/02-&((KSV/CU6>!%4U0-.5S\_S5QA3@,K52-TNKHJMKFA8:6?GJV\@/UI1W-993NI-S`.LDEIHGKHG7MDQ<9/5>`KZ?REKPN+GF=<4DAD?8C>FG0H(NMLQM>HE==*--??F=5=DB??FJQSHB@@AB>==CDB@7EHHONQPPMLIHFBA3*9448]aLPdbYI?1+(#)E<=FKEFDC@BCMO-R02>@BMQA:2K8:/%911QgrofegoncE&4XMVbNQXY^c`L,$?G()XYH" $VU%b;*/2J[^NL^c\E.#$;TZXY-MSRRSWV\^b_\c[;2B1:;P]_J!(?_`\@! 6HMLJJNNH% + 381 &27<#*.+'(/$7-   +"( %O73=;$'HL4#     +  +$ "' "8  !(;>,'++&%)*139@GD:677LG?5c9F̅ЄUЄЄB̅ZƅɄƀƀߕ[I?*S02` FpI&(F8,'-  d7-"!7&i>   -.++:( '7'?) *TM'% ='WB+/&0 Q+#,0 %);.5-Y2:Bo*87¿ɄQ؄&݄߀tID4.))0+(FHHHD<%+*-9=1+(&$&$'))*)*(OLKLQPLFIMOOMTRabc;724PLF@><<:75648AJF@BJNHB?<;{{DC??<>=?>mnPI3/0/-+,.//--,/-+,-./01223556678;:;==<=<9<;>=;9:;;<=>?>AACBCEEFFGKNMKKOOP5NPUVTTQTSSUTUUVVUWXV+UUVW[_a_gjc^_/.]aehgjrvD^$}opdn}fyȹ¿ωż{vsstqkcfcb|xv|zwtx{x|urrnmmifggda`^[]Z~EB@;@Bys~xqop63_`eigfchgd]^^\WUTSSOKNNOTVPP,0.3[XWTOUKECtwJSWUSKW@LX_\[UM><@JLD;6505799=!!" "$$%&! ""%(&$"%$$ %"  !#" "$%$$#"%#$%! "?!!!" "!#!!    +  "'"   +     ! + +       + +  <+'AFB".<=;678<;"92!2('*%)78560 %(*/72/.+&+* %'**'%'1'-+,00,($'+/+"#!"" *%%#' $*#&-*)#$!!$!*&*g # !,! #   +  &!! $( ..-1(+ !"#!"$' &39;/,#$!#!  "" ! $* ,'5!%/. +3 733565741%1'3"'!&<.4'0)-.3(*)%%"#!#"%*777::.84#".391-49623:>DE:332462348986.:==@=AAA<:::775*%0-.2UYABYUK=12.2:?_?BCFGEHJLNSTX[^chln:<@BCHJOPRW\_cdhmqwyilnqruwvwx}zၘ݆򅋋9ҿֵ}ɡ~гscZznb[VSRQNMJFCB@?=<<:741/.00/..+*NLGջϸ숑տ÷ſƫdz¿ºƿȫӿݨȯȿ灈⌆žij􀈎཮ՀɮϸƸţ󂇁׿Ʊľ¬ˀɶʸÿԌ΁‹̟ҲԀፚñ؟퓰СΤֈĽտ犃էÀˎ񣿨꼯ɖɴ晬ѷ񡢣ì٫թʀтͬьƺֹͲĿӹ֦w늁ڗџѫݠ񂆱ÿނʀSI"&(/Z__^_`_a[)",IK;3JQPU8%BH(5=+JJ@&,!@4,G;H=="&>(',DP;3D2,3&8.545"1n^;+1==TW:JjbL3&#)5"Q3%$ "#0,09?-.(")u-4JC.17,1,IC5236:N*?59=80322?J.,%&-351C)0.*53(#,)'+').7CU\=@?:8646;<;FYE@757;~4MLMMLMMNLMLMNNMNNMNMOMMNMN%ONONONNOONNONOPOPOOONNOONOPOONOOONOONOP NOPOOPPQOOPOPPOPQQPOPOQPOPQPOOPOQQQPPQQPQPQPQPQPQPPQQQPOPPPQPOPQPQPPQQPQQPQQPPOPQPPPQPOPOQPPQPPQPPQPQQQOPOPPPOPOOP +NOQOOPPPOOPOPPPONMNNONNNONOONNOONMMNONMNONMNNMMNMLMNMLMLMLLMLMMLKLLLKLLLMMLMKLMMLLMMLLMLMLMLLMMLKLLMMMLLLMLLNMLMML'MMNNMLLMKLKMMMLLMLMLLKLKMLMLLMMMLLKKLMMLKLMLKKLKLLJKLKJJKJJKKKJJKKJJJKKJKJJKBFp_|TneGnu{Syi_WOIT:<=R9FIf>I*mekfjxxu=^Gzaiqvno{Gyib{hk`{tvG|^ĵ|ųÊtŒrEEDEFEDEEEFFEEEDDEFDDEFEFEDEDDDEEEDEDEEFDEEEDEEEDECDEEEDEEEFDEEDEDEFEFFEEDEDFFEEFFFDEFEEEFEEEFFFEEEFEFFGFFEFEGFGGGFEFGGGFGFFG FHFGFGGFFGGFGHGHG HHGHHGGGHGHGHHGHGGGHHHIHIHGHIIIHHHIHHIIJIIHIHIHHIIIH IHHIIHHIHIH IHIIIJIIHIJHIJIIJHJIJKJJIJKLK LKLLKMLKKLLMLLMNNNMLMLMNMNNNMNNONMOOOPONOOOPOOPOQQPPQQQOPQPQRRSQDRQRQSRQRRSSSRSSSUUTUVTTTUUUTUUVTTTUVUVUWVVWWVVVXWWVWWXWXYWXYYXYXXZZZY[ZZZ[Z\\[\[[\\[\]\\\]^^]^__^__`a``baa`aabbbccbccdcbbdccbdeccdfdddeddefgfggfgfghggihihgihihhjhijihhhK\FG?@>=9TX\X^Y[+-;F@FeQB<<7447>ADBAACDCDECEDGFHHIIHGFFEFFEDFHFKJJMNKJFGKLRRTRSTVSRRTTRSTSRPQSWYXYPNRTQR\c\\Y\][\JZWWVTUUWYXZ[Z\]^acejn{pa]j8kgeggfjpo1`\=JJKLLKMMMNNMNNOOOQPPQRSRTTSUUUVUUVWYXY[Z[\[]]^_`^_`bccdceefgfghhijkkmnnopqqrtuuvwx{{}PRUWZ]`cehlosw|rxy{|܆邊ѻݻթ׺yȹ|xsrqnjife`_][XXUTTSRQPNLn|ulhgfgeaOPQQN{yx}~|olhbrph`bhehgda`_^\YZ\YWUPRSOJ~tsxzuotfp}AABvADuoqhuzplqoqu<:njgdga\_e^Zahif_`TVZZZb_TUWjj8g5aP__WUSTQ{ronmRTMPJ:LP[^^_ZRKJLRRMGEIEEGIIGFKKHyIHCCBFDFCA<;;;9996658;99;988<;;=<8795:97049??D><97566547643246543348<;932:=;56899:::<@CA7)-.+16894.)'.MJ22--,..,)*/16533<9725.KD<;@IL)*+--+,/010+*)#(1+*-1431-0.,)*-+(*'))'))&+-/*+..0-1241-,+))**&*+-.*())%&/2/.(+--*&)-*850-0&>!:63/.*%0336417+%&*))('#"! "*4*.-,3.-/,)2 $!>?>53<##$&&"!3" "1445--82EJ75-'#$(13/3'&$.+$"",!#,76 "!9.//1--(>A54:*,4-//8 ?+&-051("&/4934275+/*&' ! #"!$" &!(-0.3779237;:.(2518'$""!"#'/-)%#!"*8/-0*((/**1310,363.9<@;-%',!)!!$),+,30-*'#%%#!"!$%&5=E^Ghq>;9T48[td_fef6eV7dWQOH1G88;bfcOXALKSURXV^KUVXJINPSQPIQPSXU\\XT\K<^=Gp^T.*SPBMOLC=;6B<"B_?9<\5_?8a;C;DPMSYF@4BJF?=I4M-;2;4>RH\G75@3.R))#3FFIKKICI>53/4*"&&+//(!$GI]Q>>=\+7F9\JH2?D=>_6('E@9C8P>HT2H5VH.a9A5*#&$" *9G<)'&'',0,,,/012+%+;1TH '-06?NET01K*>(-1/TNLIJMMHE>,13fc[(&%*,+'?EY.53VFQJCAJUH0KECJGGHGHI1,MQ>C88OX;C<8bZK>N9D-@1?K@8DB=D.R>LILNOGIGWTL-,B@J@6;?<;;?ITWQEC@?A@?@DB@@DJIIMLNOORKKJHDBD*=<56baQ577^B9--$"9D=BTVC:1NC*%220.J]murdblo_V2!TOP`QGRV^aaicM.4:0$`P4.(a7g,Z>0'GZWDRa_M=02JU\7(BWTPMVWZW^`_aa82E+F;>L[_S%:_\E6  EJLKLOOKB +/8& /889#&/-#  +#$# + /   +PB!%*=B&2PI1  + (  $ +" $")#  '/! ( '4;((+(&&(,15:>BQ[UF734=Q@<2/3?ׂπZ̈́|Ɔj˅̀áՔYI)#GU$/:!@&<14% ) +  6$ ,&)60 +(<9=) 0- '!"_, +.2  ! ##!/). *(+( )910- +*,6XRԅX΀⽑SE52..-@EIGKEB'+%)A2,'(%$!$).&))()KMK(MLIJELMLPRYa[9730CKDG?A>:842334?HGDAKJCB?=8ryB@<;:;?7@juR;.---+)++,+*+)))+*,-00.-,0123445869:889;<;><;;;<>@?>A@BDDFHIGIMPOKHJNPNOQQNRQSRQSOMMMNNONMMNLLNQSU\_\^ke`Z[-Z]`cffiquBԅ¿}qnnpƯ|gwͷþñztnokkji\abbc}{yt}zvsw|vwsqpopnlhgifeb]^]YQ}A>>q@Artvrq86ebbfjgchibZ^aa_YWNQSOPWVPMJZW.S-TFRSNJJKK{wtvuVXMKC3GNY^][UK?<@HGB=;>;=BEDBBFFBCB>>>B@@=91-./.-,**+.10110/.1.-/0,-.+,+*&'*,,/)+,.,--,))(('%&'&&%%$%'()$!$$" ##""#&(!"#/- !"" "$ "*('$')*,&<6/29AB#$%&%$#'''& !#$&$" $#!!&# "  !"!"#!##%! #"!#"! !$!!##!# " !!   %-  +     +  +  +   !"1-@D%$#.#6D<8><HKA731153368654:>>=@=??@A;::8755"23-0YXG2/.O5,&3.09>;<@:47;DA7.&&,37IL<4);1##$=M]d_RSY[RJ"<9>NA<@@ILMSK/! C7%" + E:%>#)??1>HG:# +:B*5ED? 'II}}}|||}~}~}~}|}~}~}~}~}|~}|}~}~~~}~~}}|{||}|}||}||}}~}~}~}~~~~~~}|}}~~}~}~}||}~~~~~~~~~~~~}~~~}|}|||}|}|}|}~}~~ち~~}~~~}~~}~}~}~}|}}|}~~}~}~}~}~}~}~} +~ ~~ ~~~~~~}~~~ ~~~~ +~~~~~}~~~~~~~}~}|}|}||}}|}|}|||}}|}|}~}|} 擼͡ʽĐո؞Χ̉ɱֱܣ퀋׽Հ恆ΪԻ÷_􄙓ֿ󆖓ɭʻδ, + +    +  2Ňѡ򩤥ӥ׀țҒ잯̗ij𿺃҆ɏڒ+   +   +      ! ! !"! """!""#"#""#$##$$"$%%&%%%$$%&'&&%&&'(((&%&'&'&( '''()*))((()**)()**)(')-6㫚臞Ź쀃ꍕjƻ¸ֱ~P%!'"""!!""!##$###$$%$%&&&''&&'('()))***,-,.//12322245668899778:;;<;:>ADEGILNPPRUXXYZZZ]_cfgiilosqssvxxy~X]cjrx~yミ鈘3ʲ˩ڱxeZxi\UNJIHGEDA?=<<9876320,+*)()(QKLg˴Ҳ돖۹Իѩ뿯ڌͲǿ¾˽¿ȸƴȾǽȯ̺²¾ȸʻ慍Ǿɺϼ󅄅퀃·ĺȶŲβ̾Ŀ;ǀʶǑºɼǷմ݆풽鼧ހˍ۳峑̫ƷՔΩӶ𝘘’׸ᏽ鉢ː̗ɗӈ񛙂вȱ܏Ա񍪷əؠ󞚞ܻ҆ʀ֚ᑈʭȾȯ¬~Ѱ瀆ՆݽʷԢ⼬іҚ舢ѧ侒ȀTQ9. 3+B]_`^_baaH**AKD$%>PNVR9#%I%9OK8!!-11LA%J=?%@ )8GD1+4 !3@5-.%2aS1*2;BPN7Xl\D' #%A<(" (/*38E/&$$&c.6C6/5#--)G60317A*C6HN>41./:O-4-#&262M?>"(67.&$.,+)'-5;AZY5@=EB?;]Y[^QZUTIKU3LQ[^<8;86579=?><<864m66fge\eb^_acjp?JEACTLHJOGEDBIKIKNNJFHHGIE?:rt@A?zy{AqCn}M:79;==><t?AA?@AAABDDDFGGFFGDCECEEFJLJIGFFCJJJLMNNNMNNLLLKKKIIKOQPQPGIKLO]c[OKPRSVXYVUVTTWUVYZ[\[^`aeiqra\Xf5gcaejglm@.JjKKKLLMNNNOOPPQ +RQSTUTUVVUVXWY\\\^\]__``aabcedeefhhgiijlllnnqprtwwwxz{}~ORSUVZZ]^acefikmortuwz}qw|~煞ㅗɱƫΫ徟zǸ|xurplkgedb_]\XVTSSRQPPNL~yrne`_`_]\LLON}wtu{tuklbone^cgdba`_^]_\YZZWVRQRRMKKqpnoqnktfgj{CDE=v|{fcntvogkomssmdhgjf[^[^cegccg4dYXY\\ZWSRXci3aXUSUVTY\M@kgjSSONSOAUVZY[]YMKNLPURLHIAEGIIIJIIHIJCCAEEFA?;9;::;98:799;;<;77<;<<=;4::>?9/38<=BB@9425642655333556569A?7312661/1899549=>D@<1311137=:52-2>8621-+.0+))-0464377769411-RORPRXXY.00.-/10/.))) +/-+/3454/0/-))-+)*)),')/+6983.3.-/44331++*')+*(&)*)*)*&(")/4210-**.)/;643#%:9:96951-'-2255+*(&(+*))'"#!! !&'%)&)&&13/6!!"#<;! #$$""!=!2326<9,*.-9?3$" 13241,86CF/-'#"#/,/+!&#$)#$$%!#/67;! 51510,0-<4))91.401+7!?3:4221*%&(&,+30-0/8//*$ ,$%#%$&.2239 > A<7;/,*6=,'+/*/'#!!#&,(#+3!=,(!#$!&,20--45/63=!;:095-20&$$&&%(--)'$('&# -*'./-J7@6<=6>B5OG>P53S@-ST,=<9;;:6TN6>2&" ,SCRSi=8@6A1-3CZ9J94CCAB>=/(*LHIIJO\DV,,?:I>86;;=@DTZUUHGC@??>BEEDGIGHGMNJNLNJJIMGC;0>=765d^CXRC47/1!%"7<4FG('3"/,:Yfljgbkj\YGFFH^QDPX]_^]bf\ROK(5Z?5>1 'G6KQ:(JXRPb_I'(>?GU"]a#2SXSSSVYXY`ad`)&M:?EAK[`[?*FVD@'/FKMKMOLJ0 *7.)87=3 )%/* +*!$  %# +  " + !C4!*;:&AUD)     )  w %%('-!%8! /('#!$%6;"()(,%'+.2. 0*#$  ,?+ *8. 5!! e( .060$D&:C'&"`қ`~¿+̅ˀ`>821,FDEH@F=6-16 .08;&$&###%&)+))+)$$L&'JKKFNMMOOSZ]5<62:LE>=?9730333;DC<:BC??;74mo=<:qpr=k@g{J0*+***+))**()**())++-/--/010131255::;<=:89=<9>?>>;>?A??BCDEEDGGGKOPJJJGJKLLW\URKIMNJNMLJJKJKLIJKKLOQRXXY\df_[UU,YY\_ddjoHSڥ{pՆr{rjĴwʰٷۮ|wsokhhcce\]_aw{s|{unw~xspoonoqnhhhed`^^[VSS}{wCBA;t|zt|zvorpnddgmlfkhdbba]]`1[QPOPPPOMILRV*OHGGLJHNRI@pny[[VMLF9PRYZZYSE==;DJHD@>:@EFGGFEDABB;;:7/,/0.0--/-123111..200232+/.11-&)*+).--***,-*'(((&&&'$#! "('$#!!! ""$##&&%*(% %$!'#"!  " !''%#('(*%CBEHNURQ*,,(''*)(% "$%%#"%## !'$"" !!$$'& $ $$#"#""#"#" !""$%"$#!"!8    +    + &+   +       + +  %  + + ##1@G&&-8,((G>;=><>9)0!4&)% 3",;>>?996930-'66101[T7KF9*) )/28>>;IC?==?w=:<,D$*5HVE7,75 -JY`ZWTZXML1*+3IA8>DHOPMPTLA=4&B-*3&-'23-<<;GF5++9BI#>FDCCFHFGNNON4-)(1BHF% -B}|} ~~}}~}}}~}~}|}}}~}~}~}~}|}|~||}~}~}|}|}~~~~~}|}}|||~}}}~}|}~~~߀}|}|}}|} ||}}}|||}|}||}~}~~~~}~}~}~}~}|}}|}~}~}~}~}~}~}~}~}~}~}~} |}|}|}|||}~} ~~~~~}~}~~~~~~~~}}~ ~~}}~~~~}~~~~~}~}|}|}||}}|}|||}}|}|} Ì꧗Ǚπا쯪©ȭɹ̬˫օ忳͘iϼζ˽ںӵǣ2       'zʽӼηֳɤͱ҃Ǘیɴ˳ҁȬꩃǂt'  +. !   !  ! !! !!""!!!"###$"""!###"#$$#)""#%&%$$&&%%%&%&&%%&&&%%%&'''&&'''&&''('(' )**()*((()*)(+*()))-Cꜗ쒟ƿ̉¾e»̥J(!"""#"##"!##$%$#$$%%&&&%&(H)**+*++-..//./112443446789::;<;<=>?@@BABEHJLNMPSTTTU[\\`bfkkm89:<<<=>@@BCCDEEFDBABBCDGHIILLNNNOSUZ^djmv~MQV^djnuz~낕㈥⃋Ըŷũ쿚xf}maXMJJIHEC@>;:99763200-+*+*)('''&JKLŵ簤ɵē仰̂¼þȸƻ˷ȿؾŹȻ􆋒úŻ´ɺҁῷ¸ʻ˿˱ñѻʿ¶ץźſȾ͚낇鸱㇆ӧŠ߂כ۰ǣİ€̰İϾ¯ϰޢׯ̞ёϺƜּϰ؀ӨУި뢗ʇή咸멚ߚї̶ۜפϑϻɩĽɱѹ؁ίؙͿƴ󃎰͈ꕓմ̩8וҤϣ䝒׵㟗ǀXTI$ .M^``ba_c`&A5ALD+ +PRTZV>6."BVJ$%#T2J>KRF>%?+&* &7C*!(&3C4!- ,+.[7+27HNS`LNAFYL>8>OdR@8473qacMMMNNMNONNOOONONNOOONOOPONOPONNPOOPNOOOPOOPPOPPONOPQOQPPPQPQPQPQQPQPQRQPPPQRPQRQPRQPQQRQQRRQRRQQPQQRQQRQQRRRQPQRQQQRQQRQQSQ RPSQQRRRQQSRQRQRRQRQQQRQ;RQPQPQRRQQQRQQRQQRQPQQPRQPQQQRQQQRPRQQPOPPPQPQPOPOPPPOOPQPQPOOPPQPPQPPPNPOOOPONOMMOONOONNOOONONMMNNMNONONMNNMNMNNNMMMLLMNMLNMNMNM NMMLMLNLMMMLNMNMLMNMLMNMNMMMLNMLMMMNNMNNMMNNMMLMNMLNMNMNMMMLLNKLMLMLLKLLMLKKLKLKJJJI39@Vufnh|Z[~Ɇckx{JKHKFBPDKf\>@R38=A=tSaD9A}Q9e篬r\TTgS0hesѪ|}hJ^V]DYi{a~rIF(EFFFEFEEEFFDEFEDEEDEEEFEEFFEEFEEFFEFFEEFEDDFEEFEFEEDEEFFEDFEFEFEEFEFFFEFFDEEFEEEFFEEEFFFEFFFGFFGFGFGFFEEEFGF GFFGGGHGGGEFFG +HGGHHFGHHHGHHGGGHHGHHHGHHHGH GHGHGGGHHIIIHIHIHHIIIHIHIHIHIHIHHIIHIJIHHIIIJIJIIJJJIJIJJIIIHIIIJJIIIJJJIJKKJIIJJJIJIJIJKIJIJKJLJKJJKLK LLLKLLKLLLNLLMNLNMN MNOONNNONONNNOPOOQPPPOQPPQQQPQQPQRSSQRQRSSSTSRTST UUUTUVUUTU%VWVUVUUVWVVWWXYYYZXWWXWYXXYYXYZYY[YZYZ [[\Z[[[\\\]\]\\\]]^]]^^^]^^]__``^^__`_^_`aaabababccdccbcbddcbdefdgeeegfeggghhghhghigjhjiiijijEkjojgo:GEA5WVXZ^]--KFMYBVVb68977656<@A=8954435c`\WWZX\\Y^fiBA>;JODEGF@FHIM?7GGCDBB>snnt|yvvu|qumkJ8778:<<;:;<=<>?@ABAB@CDCCEEHHHGGIHFEEEFGIFEFCFGEDFGHJIHJIHHEFGEDFIKKHKGFHKMLb[RPNRTTT[[Z^_`^\[\^caaa4^adiqj]XYc2db_dzylnA/HHKKLKMNNNOMONOPPQRRRSSTTTUUTSUVWWXXYXYYZZZ]^]_^``aabcedegfgghkkmnnppptstvxxz~~OORRTTUVYZ[]]^^___a`bcdeggijmqvvxwy{fjqw}񆘭扣ށҸпƫ̮~˺|wusokigdca^[[XUSRQQQPPNKwɲ}ysnh`]]\]WWKL|{qu~qqulimamj`]ce_\[[YY[[WVXVSQOOQOOQNzx{qlilklukgcrCC?=DFddnuq]_dlqseeigef`XVZekdecd4bZX[[\_YVVWW]aga[ZPQUUWSFx~mh|QRPJMNLGQSYWZ\YLLOMKVTNHHAIJKKGCEIKLJFDBFBEB@<:=<<<:899;::9::89>=>?@?8:;>>B?7354359;;=<878:=CJJE:87453447;945;3.64.*..*),23:;7354300/0300[YUWX-Z.-.-/.10/+.-&&./.-/3230.0/-*,///.++1'*018962452,/133/.,*')+*)**)&CH())-&(02301,(-/4;:714.+357=92(&0 98*;6<=..(# !)+,)!+/&,'&$'#%169 !6774.,0,0&+9$=570.*9 A2?;520,"" !'*-0,040 &"&$'$"16468=:=7583&""!&84*&$" "! $%%!/*8 )(,.1.2-!%:85,20,,/.'$&'%%,.+'$'%'(#!)-.25-CgJ0Xn==;Clm+_ahadf`]YO;:6PR0;VG_Gb/??TSGZTTLSg^>BQWJ9GX[ebbRV[WRTVVM[T4 *9H`0\X[,POMI;HKEI=0@WHA@87@?A888575?@]>$MXLAHDCKJAEA58@C4?C5/:CMLRAO7>5??;?>@6147?B>A9UPE8?ZQO6[31+&"#(-,,,/-/3H%(*;5C@>:4/TNSTD9]=<7I<@>DG5^46[^W624;41F2BCNBYJKIGBCCFFFEGE5PEdHb5M**@@OlMQKP\7DZ\F\AEA@?>183Y6GBBEEKJ5F*G?IF=5<>BHO[XRSGEDC@?BAEFDGJIKHMNKLJIJE1A@GEA1N*/DQ]XD98,-,$9(+4Spolj_ehZVa'5EbMGJUX[_[Z]b`[U9":M6=:2."!7+/KNdH'DWN^hI(5:82BEPL**DWXUTTXUY[_a_5Id4S@IVa^U'"3HD@8  7FKMNMLNH #,8179=?;#$.% +  ()")+!  +  $ +) 6.AG+VW:  +  +.& + +  & )0$'#&! !5',."0($'(:6$'"'+%'+/2>EFT@?37NB7.5H_N=2-11tˀ5ӄ-ͅv̄<ӆЀƽc=>:< +A:lG=~c2,0 ;/'.  !> *43ao78 #,4 4 B%79!&# # / "(% $-+#$,%$/"1$7A=:997hehmsonomuluioF/+++)+,*(*+***++,,,-./0/00133444679;<<;;=<=><@?BCDB?DDEFCFEFGHLMIEHEFHKKGYRMKIIHJIMNMONOONOPSVTVZX\\`id]YWW*VY\^nrjuUr"U󀅊zlqw~ryhr`}mƬ¿׷}wtpljhdc_`]]}x}s|yqmvyvqmnkgjnihfdc_^]_YVXXw|CB==B?>:81.022/..//21100/.0632465.0.//.&*+)+*,/-,+,,)'*'&$#$%$#!!$'%""#" !$'(*+(%%(&'/0+! !$$!"% # #&#$(((%Y&(*-+,RSRTW,R*++(,*)('"  "$#$"!$##"#(&&%! " ""'%#!#$# !#"!!" "$"!8>%&    + + +    +!#" + + + "%  +   +            + #4)5D&&$#@F6=>:=>:65- )-!.'4(1" 0-&/+,),92 "+.' .0654*-1/-..,(20!&-)*)#" %$"&"!*#! !". &0) ##"%%!($( !% /+'%!!/-## $) ! !$ 3.#"  '!#4/)6 '$))# 3! "&#"$"$0021 !-,49:501021445/"3'A-8*""(7-,'+3*47*-#%"""!7#2233378(53<93-59=;>=<<<;:4#.(.//0632/acE,P97;%  '015;?>@@J>396.5*@"&8DOM=1+!%Dba[WPUUHEF )H<89@ELNJIJMQOIA' ,7)40,"26H*-=6BJ2$*$.2=60AEEBFGCGINQQ&2@#9(0=HI= -}|}|}~}~}~}|}~}~}~}||~| }||}}}~~~~}~}~}|}|}|||}~~~~~~~}|||}}||}~}}~}}}||}~~~~}~~~}|}|}|}|}~}~~~~}~}~}~}|}}|}|}|}~}~}~~}~}}~}~}~}~}~}~}|}|}~}  +~~ ~~~~~~~~~}~~~~}~~~~~~~}~}|||}|}|}|}|}|}||}}|}|} ƣҭ◱̫ۗ쨓䷽ζèئϡらײϴ瞲]݁ꃍͺʤѻ¸ʽîƼ + + +"   +  Pːه}B׵Ӡ…ȥݳ΄͎ѻت띣Ж֡οօ߀w!  + +)!    +!! !!!"!!"!"""#!"""#"""!!#$%#$&&&%&&% &&&$%&&%&&%'('()*+*)())*)(*+*)),)׀鞍¾؅´Ϸn¿ռO#!" #""#$###%%%$%&('()H**++,,--//001233435679889;==>??@ABBCCEFFGIJLMPSTTUVWUU[ZZ[[_acd23ehi32334G334324321323589:H::22566$(120)053E9MGTHD/%%-++*+.59EVYG6657884:7?IJURPOAHNMA?AU^Q=9:56>U6MNOONONO POPOPOPOOPOP"QPOPPPQPOPPQQPPQPPPQQPPQPQQRPQQRQQPQQRQQPPQRQRQRQQRQRQQRQQQRRQSRRQQQRQRRRQQRSSRRRQRRQRQR QRRRQRSRSRQRQRQQRRQRRRQ RRQQRQQQRQRQRRRQQRQRRQQRQ RQQPQQQPQQPQ+PQPQPPPQPPPQPQQPQPQQPPPQPOPPPOQOOOPOOPPPOOPOPONONNONOONON MNNMMONOONMNNMNMNNMLMNMMNNMNMNNMNMMNM NNMMNMMMNNNMNMN MMMNNMNNONNNLN MNNNMMNNONMN MNMNMMNNNMNNMN'MNMNNMNNLMMLNNNLMMLLMNMMLMMMLLKKKLLKLKKLKKKLKKJ:6YP_k~xLSqaFbӵ]ljce5PVGMwfQE?75;B=q\]Cm>`h_b\KkJUq1@\zp^ise_AyP|_Zcr{eehvho^XGFGEFEFEFFFEFEFGFEEEFFFEFEFEFFFEDEDFEFEFEF GGFFFGGFEF GFFGFGFFEGFGHGHHGHGHGHHHGHIIHHGGHGHGH +GHIHHHIHGIH +IJIHIJHIIHIJIJIIIJIIJ HIIHIIHIIIJJIJIIJJIJJJIIJIIIJJIJIJKJJJKJJIIJIIJKJI JJJKJJKJJKLKLMMLLMMNMNONNONPO PPPQPPQQQRQPPRQRSTSSTSTTUUTUUUWUVVVWVVUVVVUVWVWV WWXWXXYYXXWWXZYXXYY[Z[Z[\[\]\\\]\]]^]]^^]^ _`__``___`aaabbaab'cbcdcbcccddedddedefefeeffghfdefhhggghhghijjiiijkkjmPetDBFE7YUW180)-*EL[0EX\83653428<=>:86daba^ZRTVSVWTVST^a;?;8?NE@AGA=?@FFDJ@:LHDDFCA@AA@BDCEFFEEGFG^IIIKKJFEDBDCDCCDEDCDCCDFEFFEHEDEEDGKKJIMOJKLMPc\ZZZ[]Z]^_abcdfhebacccaccfnrc\Y\diiebi{Mxj[nnJKMLNOPPOOOPPQRSRRTSSTUUUVVWVXWXXYYZZ[[\\\]_``_`cceffghjkkllnnpssuuuvxy}|~~]KKNNOOPPQPPPRQQRRTTWXYZ[]afmoqstwz~ejptx}򎡴|п̼˴xԾ}yvrolkgdda^[[XUSRQQQPOMLĩ}yvpgfad_[YVTyypripiefed_jd][bb]YZ\VTVVSQPONOMQ{zxplmkhstgjs~@?;<=BxegniY[ckhihfbdabbZX\dgkffa_a`ZZY[_d[YYVX_`eeiUQTW\\WGvqcvPPPIKMHHQTYXYZUNMLFJUTNJGAIIHFDFGHIGHGFFHGGDA<8<=<;:8:889:9;;9;@@BA@?:==<<9148<=9:=95367336321247799:>=:4168;::52513667;>BGI@88868643453.00-73..06/+/34;6/.21222112/ZVSRUYY[./100251.11,$ &-10/14994684.+02/*((,3*/5-260/11/.111411+*'))(()(++&DD$*+)!0:8531--239 70+7" ;9840-)/01/1)&$!"%''"! *08<>? 82;D#""!3#"GA4//7;8<<6+$ ".;:3&616<,.)! !%/&$"(*/&$#! !$14;!!75'$"*356B:22--2<>>1+0/,+(!#!'%$"(&14/ #&$ *$)74685632()/+%$'%$%(('*(''$  !"%&) )002/()(#"/@?86-.-+++*(%&(&%$..+*&#)'$"$,,23*`\U,_>@;ji^5S@;k[g_VVYQC\7TJH00[8I2UMGjECVR`ONVd`^A9024Y_gh^Ya[LTZHT]UIG,JE:IWRR`,QPOQGEKUOH8:XTRMGDFFJE?:37337:_nW``TDCCELHBDF7>?GD*.>:J?)3(G/3:I#8A997?33;G?HU[NBKDGE[_b;-*''&?GTKJRN=2-QMB7?G8[cBJ1CE65;7_9.I>BG,P`E1Y4HI&EC!'++,,-8!-:'*!?>>70VKCE;4Q3B2;2YP//R/524,VDF>45;7-6EI::=26gbgd941^VVXF,NGE?9+<9>OLHGHDGHFGGEL6?VV9C87;5D?=>=::T7]+CCD?;87AEHLURJMJCC@?@BDGJGCGJJDELKKMHHIH@)6;538;8364Y[MSU=><+'.>@BFEDENC7?>0A.+13CLVSF7//?&,(,1Hgqhkb\^TL.'IIIORUWZe^VV\ZYM:&O95B50;.8&$:'FMTJ?GAHfI&31:*=TM@,2*NWWTVVWYX_``K3l5LCDRX^_I&--@8! + ;IMMLLOM4(1<8!0;=B?5  # . ")+  + '*  &( +   >5YR3   *.  + +p%+%! *"35?0/!!#*5:/"#!$%%$+*2;?HICC5;EC748LXL921/4D։΅̈́4ӄԄӀԀPфЀǟPMegr-Y&0/-9aǗ7;@#*-HY="(  0% $=iZ+.%0A*(#/ + +). $"% '+ *+K9Vj璴`Q¿; Ä|ބIҔG;87,JGJ&( /<>:97ebfrsppoyvtukM1---+-,+ ,-.-,.0/0011124768:;=<;::>=??@ABAACCDCDCDDCFCBBEDGJIEBGIFHGIIVOMLMKLMOOPRRRSY\ZWX\\]]aaemka]Z[Z\]_aeqGw|{饦ÀށՎu~nl}vn˵¨}|xpoknhb_\^yxvvq{volrtrmmljhjiefca`a_]^Z\z{@?:;=Bztvt|{{ytonjkkhddjhjdd`]][TRNPTXNNPLMRRTUZJHJLPRQE}xi[^[QQL@BKPVVY\QB:97@KKEA>;FGFDABDDDBA?>@CCB=92-010/--.,.0001003655677231//-(*,-+''*)))++&%&#"!!"$##"$('%" %')**'%)&&('&&'(./'! !  "! & #$))%$()+,+,,,*UQMORVVW+,/,---'# ! #%''$%)(%$'*'#!# ' "$!"" ! !$!$"#!#" !# =>&#!      ! + (%"!   #     !         +    + + 1+-:'(%@B:$.)'@3>8103/$2+(&3)+**=%$0*2'(-774!.0560-20'.2%.3/''*("(%'+"""$ #*(%/,*(%#$#%!19.53, !""&# # "#%*,&$,0' %!#!-./ #'! #!&(&',3!&"$ 6!)"-8&5+.'&($!)#10!&#$!30420*,.$! # $2532422314435"%56 + !)5&"%("% &*3%) #" 1.01/+-735::50-0:==@GB;?:4300/37;>98=>?8:=<;<:896,"!$.20.1/NL>EH/)% #179=<;;@3(//'6'%(*6=GH=/!*!7XaZZPMNA7 147=>MADHOJDGKHD<&:),8-). + ,7?1(0-3I2! (/=;,6CEDFDEHGNOQ9"L"5,-8@GI1 +}|}~}~}~}~}~}~}| }|}}}||}}~}~}~~~}|||}| }}}||}|}}}|}~~~}~~}|||}}|}}~~~~~}}}||}~}}~}~~~}}}~~~~}~~}|}|}|}|}~}}~~~}~}~}|}}|}|}~}~}~}~}~~~}~}~~~}~}||}}|}~~~~~~~}~}~~  +~~~}~~~~}~~}|}|}~}|}|}|}|} ԹϢŕ϶Ӿ̬ҳʑѬf޸ٶͽоl  !12зɖדç¸Ͳ܋ЩޕКǝ؂󚁁ӁȐ˂ϵ汻֬ ֖Ī/  + +      !   ! "!"""!! !! !!!""!!"#"""#"""!!"!"$##$%%$%$%%&$%&&&%%&&&%&''&&&%'(('('')**))'()'''()(()(()))**)**4UȠ݋ٯſ񓛔¿غ̿k¿ʹف(!!"#"###$%$%&')8*+,---.///0122346679889;;=<=>AAABCCDDDFGGIIJLKKKLOPPOPOPQ PRSSRSUUUTSQQ)(**++--..13679BEJOPTWX^er}x{ۺ丗|uǴӼnrf]WRONLGA>;7666521..,*)))('('&%JMɭ큛սϿ놈ͭĿـ͕Ӭ݇̿Ǿſ˺ҹǻ¾ξ̾ñƸ󀆑ՀŲ佱Ǵސȷ׿ƻ̀ͻŶӿ½ǽפҀ凼輯ڳ٣ʽγȯ¶Ѭȥ򇙢ЋȞƶ»ҨŦŦ𪄀ߵ˓鑤ì‡Ȍ㉌􂋐ȾՐަ堚˛“夊¥ŻǤļбέفȨកƮ騳˿⼊֖ʓł̍ϺԚӨ؂ι-DTA6(>R``]\^bd7+Q[QG-3TTZXU9 "$,10.+01Q6]X8*%(322+*07>O\LE56:8857<;>GMZJPLDMJJ?BBWSE:9826>.?MNONOOMONONOPOOOPPOPOOOPQQPPOPPQPQQQPPPQPPQRPQPOQPRQPQQPPORQQRPRQQRQRQRQQRRQRRQRRRQQQRSRQQQRSR SSSRSRQRSRRSQRRTRSRRRSTRQRQRQRRQRQRSRQRRRQRSRRRQRRRSRRSRQQRQRQQQRQRQQRRQRQRQQQRQRQRQRQRQQQPQRQQPOPQQPQPPPOPPOQOOPQPONOPOPOPO POOONOONONMNON MOOONONOMNNMNONNMNNNMMLNNMMNMNMNMNMNNOMNMNONMNNMMMNNNMMONONMMOONMOONONONMNMLMNNMNONMMMNMNNNOMNMLNNMNMNNMMNNNMMMLMLMLKNLLMLLKLKKDC?IrJalbSU[pMY^MNPVQ]@_US?I6Bo`Zsi=R`ELjo_^qoQLU[m>?=>==@?@@A@BDCFGGIGGGECDEGHHGHGFDCA>=A@CCABCACBCEEEIHGHGGIMONMRQNTUVYn`]^adfbccdeeegfdefddcbccfhrpca`bjxtlntESY8|aFLMMMONNNOOPQQPPQRRRSSTSTUUVVWWXVYXYZ\[[\[\]^__bbbceffhijllmpqqstruuvvxxzzz}|~~~}GFFGGHHHJJLMNQSTWXZ]`fmpruwz}[_dimosw}􇔞ɴ忤Ƕʴڽ}xvpnkhfda`[[WVUSQQQPPMM㻥yvqnfahfdc\Szqmitu^`_a_]gc^\ba\XZZ[`\SUVTQOQNNNx~xtwlnijcu}sypyt>>9>@nk^ZU[`feegdb^^_\_f]]^kmi]_Z]`[XYY\][Y]cXYZ[XSSUTUVZ^ZFpcwJNMLKJNFJQTUVYYUKOJFMVVNHGEKHEGCDGKLMKIIHHFD?>::<=<:87:9;;::<<;=AACAA>8;975514679896;?4545545.003679:::644673225566257568:<@EqE=753310440107<98-+,/0-'-1.1/./41301113/YUQQV.,-00200341142*!$,2755;>BB<9741,0/1..+-/*+,.4510-43/300/,0,,*)*'%('('+0.*'169630-/2193/0:$!=><9951,',,-11*' ")(($##"&(-2;>#!28:388;%%6 %"=A<1./695::>.)! $9744-636=-,'!(*# ")-# #$*"! ,/9! 98 -'%6544730427;;@<+&&%%%&""+.7"!280,2*!"'-#-4130)%7! $&&('(+.-0054)*++&'(++#!0(1;.&" #!((',00/"(05;CA=5+.-**('''&+)(%00-)# &''&"&(/09qXS=^==pvxK9I?K<^sfTVaj-=>7\D0@87<;X6jjFG<[YZWV6b3YM,25GQb4a0\[MQZY^ZRISR[B55;BFa,RQPMGBMON=>ERTNQMSHCJHG@4A5356507>NWL%1PMCCGT54CE<$6CM0+;1Q,5;HJ'A>>=;<@;?KONV\]6c<<95>YRH02.+=2R[MC@TCZSQGX@'S>K\<:0,&=$.6EU0MW4$#C?!'+,*,3%-+,"$C5;6-SJF?VXXD4160.090DZ4302.BGO5bKFF21OMaL78f788a598<:75CD3NHM:)+)()(NSFEDGGGF4BfO0U<9DO6Kf87PE<:,Cj7MQ?1K74)7=A>>;34E60)@C?;BC8;E>JUSIKJDBC?@ACFIF@BGGFFMMKLKHJJI2+3IA897525bJF00R232$"D>ADHFGFNF6:81@3IAGMJNLH>>,5f0.*-2?gwejh`YUGX> " >HT\WU<\[[HDEMUD3<,EB?;>335ASV]aX7ZL$)3:.$X\W315WWVXYVWW[a_U*D.FF>MS[]WH4#7* 5FJJJLMP 6B>4!8;@=< +",# %" +  -  + 2<7VYK 14 + +o!!!1!.!8*B;'"%0<2,"!%$%%&-./8=I@BB9@?A8:

    421.4J΄̀"ׄ ׄր[҄рȢܘ.7Xa91WF%-/m?A=D:!)#2D$!C+  0!'2Z0'  ! $5+)  ,%0&&.%!)#E8$b»ÿ ܆ڀig9B=0LNJ&&67BGG$78+$'(#$&%)-5/,(SQOJILKIHGEKGFKPWY^94/6F@12:72.,,.)/97CFB@A>;5eaal=qoqqyuyrK3,.-.-,,-0-.///.0.12244342368;;:;::;<><;suovsx{uonhipje`kll_a[^`YSSSVSQPRYOOPNLJIKJKKRXVEymNVWVQOM@DMQRTXXN=;77CNMEA?=CB@A>?BFFEDBCBDB?75..021.,+--/1233235656687120.,,(++,*('%+-')'$%"# "$%''()'%&'+('&**++k***('%%%(*+%!#($&!!$%"!!$$&'+)-,++,,*SPLKQ,)*,,.,--,&!%($$)-00*))($#*('$$! ! "$"%&!"!$""#"" !  !!!   +  +  $"#  + $      " # + +  (j       + 8+)":&&EIM.&**2'2A<008A /"#!->;&) 1-61*$(00//'+3032.',,4# )##""$%% #++()(+%!'$$ ! (,&'&! ( $'$$&*/./-(#%! ! +#' &*,,&2#%3"""#&4$$! %.,6'" '" )*.!&$0&"&'&1,53!"&$#06/./0033 'B02#")%4-$ 1)4%!%%)20/1,('*5;6...-3?7@IC9=:43100269=;46<>9:?=;;<::86-+(.//-0T?:**D#  ,-49<:;;@5(**&5,=7;=:@==3.!  .TeY\WOJB2B$ #0?DB?,GGH9669=2)+#<80/0! (;BFJ<$B3*DHE""?CDFGEGFKQPD 30-)3;EJB2}|}|}~}~}~}~}~}~}~}~}~~} ||}~~~~~~~}| }}}|}~}}|}|}~}}~~~}|||}|||~~~}}|} ~~}}~~}~~~~ ~~~~~}~~~}|}|}|}|}|}~遥~}~~}}~}~}|}}|}~}~}~}~}~}~~}}~}|} ||}}}||}}||}|}~ ~~~~~~~~}~ }||}}}~~ ~}~~~~~~}~~~}|||}}|}|}|}|}|}|} ՘岥ع»ặ庮섑ɏڰɻψʭý\􀌥ʫ߫ϼֽe $   +   #5v􂽫؀τnоƱ̲˿ݏ뤦󁢄܀ܽʃۈܡ}!   +      ! !  !! !"!!! !""#"!!!#!!#"""#%%##%$%&''&'''%&%&''&'''&'())('())**)*)(()())()*)(*)26Űɝ߇廗ӠuͷwJ'#!"##"###$%&&&'((())++,,,-./ 23356567679;<>?@?@@BCCDBCDCCDEEDFFEFDBBEEEFFEEEDDEEEFEGGGIJIGGFHJ&&%M''(()+,-./13468;?CDEFIKNSX]_fnuv?@AEHJOTXan~|z|yw|򗬰Հĥۺwɾ}˺~izmaZTRMFB>;9754530//,*)))''(('NLE¤񆝛Ҭ텇˭՘燌ÿĽýıɴǹƾʵԼ·ϻ˶̮ݎȿϿӸÿ·װƶˢŽ·ʀ۹փՉϰ٩dzāŀƷɪݍµϘɽĽ͞򀏉蒄бȂŲŜղ˞㚎﨟ԅ֐Сҟ΁Դń댛œ֝чȯ冃קýƦǼij×Թ׊̈́ȱ٭;¸͜ɷ׮ɞǿ$9FJ,%6G[^]\`b\'A_TO>NS[YVK"MQ=# !O@G3NJGA9=9*$""AAC'!#.DI/,&-$+A1*+188INIXtsZ5O;8&75,+&'#$*)5-F:$$##^+'*3A$$D<3242-CPGEA30+36@? &20,*,+N75B:5^P5/(-551-,1:RZTFD9967769<=BJPYLMKGLNJCBG\L::955<7?GNNONPOOOP OPQOPOOPQQQPQQQPPPQPQRQQRQQRQPQRRQRQRRRQRRQ RQQSSRRRSQSRSSRRSSRQRRSSTSSRSRRRSSRSRRSRRSRSSRSSTSSSRRSSSRSRSRRSSSRSRSRSSSRSSSRRSRSSRRSRRRSQQQRSRRSRRSQRSRQRRQRRRQQRQRRQQQPPRRRQPRRQQQRRQRQQPQQQPQQPPQPQPQ PQPQPQPPOPOPOOPO POONOONONOPONONOPNNONOONPONONNONON MMNMNNMNNMMNMNONONNONONOONMN-OPONNNOONNOONONNONMONOONNONONOONONOONNONONNNON ONONNONNNMMMNMNMLMNNNOMMMNMMMNMLMLLMMLLLMMLLLKKK>W6jf~pYZ/}ya{ѡNSL`ysSOAAnR|D4eIf2QlMS}ngktYsE]:Ltid9gTafczfkmn>_[{\Up^_ozmt&qidJGFGFFFGFHFHFFFGFFFGFFGFFGGFGFGFGGFGFEEEFFFGFFEGFFEEEFFFGGGFGGFEFGEFGGGEGFGFEFFFEFGFGGGHGHGHGHGIHGHGGHHHGHIHIHHHGHIIGHGGHHIHIHHIJI HIIJIIIJIJJIJKJJIIIJJIIJJJIIJKJIJIJIJKJJIJJIJKJJJIJIJKKJKJKJJKKJJIJKKKJKJKKKJKLLLKKLMLM +NNNMNNNMNONOONOOOPOQPOOP-QRQRQQRRRQQRRQQQSQRSSSQRRSSRTUUTTUTTTSUUTTVVVU'TUVVUVUVVWWXWWXWWVXWWXXYYXWXZYYXZYYYZYYZ[ZZZ[[Z[Z[[\]\[\]]\]^]^]^]^`^^_`^_``^_``_aaabaababccdcddedecddedddfeedefefefgffhhhghhihgihijijkjkljklllkkqH^nONAZUX20*FGGIPTXU8UM643152588>;631_\]`\YWXVTV[VUZZdg=D>@OR?AFLE@>AJIHR\UOJJHGB>wro~{yx~zS<9::;=;>==;;<=???AA @ADECDDDGFCBnCDCEEEDCA>?@BC@DEDDEGGGIJIKMMNRUWVUVVVWY[]fdcdddcgfcdeddcedcefeeceehltofbfhv@xsu~Bb:BkLNMNNONOPOPQQRQQRQSSSTTU.VVWWYXY[\\]^^^`aabbcdeffhijmmonpoprrrstuuuvvwuvwxxwwvvvxwvxyzz{{|DEFFGIJJLNORSUWZ\^`elprvy|~Z\adgjmty󀂁Ե۽Ǻóyϸ~}vqpmjgeb`]ZXVTSRQPONMoķ|tqkihae^abZStpoecb_e_]gcZZca\YZX][VSOTUROOMMM{xu~{lhjhkvnqogrw?>7@?aY[Y_ihf`efcb`[Y\dg[_dgd_\]\^^^_]^]^`\\ZWUPZZSTYVXWT]]EmKMMMLKOIHMPTVVWVSNFFOSPIFJGFHIJGGKJLMJHEDGDDA>9:<;::98:99::;==:=@?>>==8::73513664.37;=0,,-))*.48;;<:9:97733222452431130/3>@BEFG:1//,0331.,0-',++.-/,'-0120//421033531-WQRW-,+-/-/.01/1.1&#+49:999=??86864-11.--+*+*(--25//230.3012.2,*&)*''(&(&$'/311.,6:;630+21178519$<<=<8:8/(&+0/21'#!''%!%'-')*19:A$6857=>99?! !"  ###BC62-167164>-$"&%2451;65=,.&#!+1'! $'#""! %-665 8%((31.,93,13740+.%!"! %"+(+1)')+&,!&33*%>,11 $$%&95.3835947<=0(('$$%$%%"#"+50 (%!%)####)(+/63",+*-*('%$$#%'(''%$# $&$%*0/Hh/@TmBxvwwE?=@X!Ny:dVd8B/Yrd8+G7:56S;XK[UWa_[V^3aY\eQ?848>Y``]XSNSYSSMQVVTWC,6;8RXUJFHGHJFF9=EISTL?@88>0CEAM8>>D=??=?=AL8034/\18569AD?EA3?G<=6V7F:[aR3.TF@R.DU/F=D3J07?F32G4 #N93++/.K//[LL<5\:(%%" $()))'<+7=B$&;Z=7/QF>4&(D0S:.1)?9@Q6G7.13@57H5E14OX[:5=j`OU[bJe648633395aXL19?>=;A?DKMJGEBGJH5\VS3;NPJJ]7L?(:EACEHDABDGEFLMNMJIJKIE0)348:==598PZ775V=)!26CFLMLYXQAA@528-FFMIFOHA=?5)(-+*49`wlid`\[WQ@ !7JUXZCIZ_XI<8NQ; )2H?E6HD:#,?ER]dWFF,1*56#@TTG>(J[YWYWUXZ^`W:7-AI=FRW^WPQ@$ $- ++=GIJLND(AB>, 2:B@>1 /- ,&)$#   " &+   ,66Gb[D 1*" + +"#$/(""!)&)=7" $074++$"!$%%)+,/6;H?A@-$Zekm¾¿ÿ¿ҀB>6NKF$ /5:?GIKD,<7)**&'$&*+2.*))OLLKHGEHGFFIDEORWV35/5GG317=4.++0/08BFKDDA>96khftzxstr{}K/-..--+..-,././//.-/1233454654678:;;::;==<<<>>AB?CB?@BCCABBABBCCDFHDBIKKKMPQXTRRSUUYZXX[Y\[^_\\^\\\^_^cjgecddj8qoryAk\⦩ꁍmmlhm|ԁlgjgwhĺ~ꆴvwllkc^zztovtklsrnlmknheea``][\Y[^zA?7=>idjo}{{}~{ujcblmceinljeda_^[ZYYXWWTSSNKHOMJKLKLOPWWCvOSYVQNNFEIMSTVXRG<6:EKGA>B?AAAB@BDDFFDB>=?><73--0//.,,--/1124423224556021/+,'*,+'$)+/-%"! "&)++-,++*)*))(('%&&(*()'%"#('&(**" "!"!!##$!"$'')(+***-,.,)'NKLP(%%&('***%"(*)(*/.-)),+($**$!"! !$#!"!" $! !!" "   +    ! + "( " ! #  +          +  )  +       + +  + +  )6!2C*KJJN))&(:-C":09#+,84'+ 1(21252.-35.2:-!,///-*',0+-*,,--1#%$$! !!# !"%**& #"%&!!"$#-*0"-'$# ! "$!-! " "$$15&%("*#' +!'$('4*(!5!" ##.$ & "' %$)/373*./5&5/+( ! %%*241V/.-1**!4/0()$%/&!!%")+11+,#201%75!2=<84--;25<><:<5341/149=:66:?;9=<=:730 &-24/51BL130J-&37<<(*>74/52'$.=JQ@22"#.AD8/3DDDFDFIKMNF( +'.%-7CJE>;*}|}|}~}~}~}~}~}~}}~||}~~~~~~ ~~|||{{||}||}|}}|} ~~}~}~~~}~||}|}}~}|}}}~~~}}~~}}~~~~~~~ }}|}}}|||}}}|}|}|}~}~~~~}}}~~}}~}~}|}}|}~}~}~}~}~}~~}}~}|}|}|}|} ~€ ~~~~~~~~}~~~ ~}~~~~~~~}}}~}}~}~}||}}}|}|}|}|}|}|}}}|}|} ʋˉҹ츬ϽƄ؃¹ӱμԾԕֹѸ\䅛ֽɲȿ¸ɡ:          +   +K܈֌☐븷ԏِ癙k񏫋͈󑆄þ㦖홃ʸ嘖޵ď"!$  +  !   ! !!  ! !! !"!! !!"#"!!!"!!"!##$$#5$%$#%$%%$$$&%$%$$%%$%'&%''%''&%''&&%&('''(''((''(()('()*)*)*))**)''))**))+$һ֩նխzľĿƳ9'##"#"###$$&'''((()%***+,-./0111233244567788999:;==<>==>>?%@@>??><>><;<<;=;:9:;;<;<;<=<>??@@ACCCDEFGJ%%&((()+,--/146769=?DGHJKMQUW\chkpsz|~QZeq~¼⍽u͸񿭣~{ŹxǦwj^WOHC?>98776420.,**))''(((NQ\ƥⴡڼ򈆃ǵSþӢρ½ƽļɿָ§öûǮɹȴþùǸɽĴӸĽ¼̿ҺǴм¹ʹ᠁ր϶ۅꓕ͹̝⥊İ؏έϻ䂒ɲɫ˽æ킑Ąݱޖ̣ƃϜ딺֗˸Ĺ䚸ɢʂѰʼnײף租ȶɀז܀ׇǽ݂򤢫Ҁн⡂Է튈ÿǽ﹭ā˚3ݼιʝϘͷـ5KC) N#+:Q]]^cdR 'RXSK:-.Q[^XV/$)"%.YS@#4";BC(=@E:660&"#7,O2+:622( !J1,<1-6FSHEksl*9YPHEC6+ ,'($%'#?H96- %s,(&/=*,?;30554I(;@<1+*7D>='//-+*,':*4D2@V791*375107:V2XOC:9661/89;>@DNVNOKJJLHDAM[=8=848AiDPOOONNOQPPNPPOOORPPOPQOPQ PQPPOPQPQPPQRQRQRQ PQRQQRRRQRQRSRSRQQSRRRSRRRSSSTSRS RRRSRRRSRSRSTSQSRSRSTTSSSTSSSTSTSRS TSTSRSTUTS#TSTSTSTSTSSTSRSUSTSSSTTSRTSSSTSRTTTSRRSSRSRSRRRSRSSRRSRSSSRTRRSSR SRRRQRQRQQQR +QRRQSRRRSSRQRQRQRQRRPQQPQPPPQPOPPPOPQPPPOPOOPNNPOOPONOPOPOOONOOPPO'NONONOOPOONNNOONONONNNPOPNOONONONONNNOONOOPNONNNOONNNOPONOQNOOOPNNPPOPOOPOPOONOONOONOONNONONOOMMNNNONONNNOMNONOONMNMNMML MLMLMMLMKL~@744501\]`ZURSVVXXZ\]goDB?H`DDHNKA?AKKEJVVOLLGDC?yrovwwv}~vR>:=<9<;=>><;==<>>@A@AAA@AAABEEFECFFDDDEGFGFFFHHGEHGHFJKKLNLKLMNPSUWZ\Z\[[\]^fd`adedbbca`_a``^_^_abdegkqsebbfjwvrsvy{tSQ?KLMMNNO QQQPQRRSST)UVVWXZYZ\\^_``aabbcccedfffghiijjlmlmqpoooqpoopnonmomnnoomnnoppqttvuvzz|}EFFGGHJKLNPQTVX[\`aflruy}js~ʽιoĹȲ{vrnmifda][ZWUSPOONLKwvnkhf`^^[Y\VNrojdbf_ah[\f_YYcc`[UTROTUQPOKLK~Ev{gcbsutefnpqzB;:CDdfbbhlid`fd`bZ\\b66c]ZVXZ][Z\`1`_[[YUZYWUSOZ_USYXZRS]\MK|QPNOLGLMLQPRTUYVREEGKOPHHLGIFDEFJLJGHFEFGJFC?=9:;=<:989789;:<<:=?<<<;758:78:637<;55:46/-/39;99:;:8767:98632125594651110155;EHGD5/+.-1+,-,-0*$)))*,-)%,4120/0311025460,VRQSS+/10220230,)($*199768=6;864,,*+*+2/$  """!!'/+,15:9"9 :;<=.)&0()./=+'!!! !  *19826 )%!&7310@4.1/1)-8.(!$"j ##/ &'%#/2*#:47!'&'**,*.0,(0;5%**''#!! !%)!($ ",22%$)  (("$,&&,$+3>-*&$"%)-! $##!#%!$-2.I43&ey>>psaKm8:1ER@mj:kcW]44_VR[YPBD:4CL`]_cSSRLNRMOMMUQ<:A6P5*20:/@IDE@@CEMM0C4E=>:NSALHF?>C>:40W002=[YSOHK?:@:3+??:EM97MDm]9?(%B(***Q=F4&,4DER-(('%")(('%<6)-8?"*<<4,MGLIEIDP-OQ;=AA/G66F5M9'UVA+4[1?>JKPIFD?>AADFDBAACEHLLMLKKKLIJIG?2.9?@:85TO=::eR-+F>EKFPb`SC<=?M40>DJJBJHB?LM)((*.,3Hv{pkkd_[SRF=3NWVRJDS^]TXKBQF08?=1JCCF! +JBKY_<(/2:?I 3U[VF6 0WZX]\WTX^]WK.%$=GE;HQZUIM[T + '(!  0AGIPQ: 6??:#6BE?< 94! + ' " )  " *921W[P<4#" + +!*  ! ( !'& (&4!#!!#260)$" (**+*.6B@C?@BC=98AO6.3/.2?ЄYՄڀԅ҆рӀĆX":9#(+,'TV7>jmSC,K3HT77)1{( + + P9'4+ J#+S*#(,5"). < .3;$$&*7D>,!{^¿¾ÿ¿ C¿̄΅фЄ.܄߀֒X9L8+$!267:ACLK'I 6=,(+)'&))-00)')+$&DDHECBCECCELSRW^811AW:7;A;1017425AJMIHD><:vrms}vxt|zI2/10-/-/110.././//025534555457988<=<:89;:<=<:<@=;><=>AABBBAAACEEGHJJHKNMPRSTZXSSVYYY[\[ZWZZ[ZXUUVX[_\[hebbceemmlqv{~hDれyuzwlqz_Զ}ʄ~yxqlnib|{vpmwrmnvrpijkhebb_a`[[[X]aU}C<8>@kqx|yz{zyje`c78hggekmld][Z/\\WURQVQPMJFOTLMQMOLPSTMSXXXVOIMLKMNPSTXRG88<==@CAA@><<<><:41,,-0/-*)+*-/12220011233/-/0../**-10,./*(#""%+--//..-+))+++,+*)((&(&(*((&"!" &((' !!"&##!""$$&$&'))*+)(,-+,)&LHIIG"%'%'*)'" ")+)'(.10,(--'%')%"% " #"##" $ $&$#  !$! +   +      $)!  "# + +  #   + + H'$ + +     +    (%!/&>$1+#" '-!=:";5/32+)1/(!##&1.02)**&*-()''.+"% " !!#'&(!*,!&&%!" )0/)& #6%"""&$.'8%$( * #(('(:1",%$$#-! # ! "! $# #!0*8*-,0565235022, $!-233./27650.8'!!-"$#++ &+41 %9'40.$&#&$%;;. ";'/<@<35)6:674<,)58>>8>;53A>"#;fncZYTOLA?2-CDGHEEGLKE8!.+#.8EC8?J7}|}|}|}|}|}~}~}~}~}~}~}~}|~ ~|}~|}}}~}~~~~~|{||}~}~}}|}~~~}~}~ }}|||}~}~} ~}}|}}||}~}~~~~ည}|}|}|}|}~~쁩~}}~~~}}~}}}~}~}~}~}|}}|}~}~~}~}~~~}~}~}~}|}|}|}~~~~~~~~~~}~~~~~ ~}~~~~~~~}}}~}~}||}}}|{|||}|}|}|}||}}|}|} 베ڶ֌㧠ڲԤŗ԰ʿ܀هʵéȠ\̸źķĶƺș,&  +  +   "փ̵߃է}S̚ìݠԡয়􋢋Dzьք삔Ǩqg[h Z!Q[TDG8   +   (    ! !! !!""!"##"#"###$##$#$$$%%$$$%"$%%%$#%&'%&&&'&&%%'''%'('&(('''(''()))((**(()*)()))***)()*+**)()-ȱ—ߌ֣w½־v&$#2$$%&&&'))*+,+,-,+,-.//01133234344554567877887788989:98998 +77666544665789:9<;<=>>?@@AABCEECEHJ%J&'())*,,-./13689:997420.,+))('R|ƫƪϻÀµͥ¼ƾĿƾƷǴžIJù²ǵúųù߻̼ĹӼ󅑒ΨųƸרø¸ž㘪󂸌ӱƛӇƽŸƯƥؠތϿơυǀɘ筐܍ےч©ƦلÊ˭ꡆѿ[΋ǡڣǜΏԷ¿¿̄ʀ¶ΗΓۘζѤ΍ݮŮ⼗ơҳ׶ʰ^0'?S +TW7-HX_^a\A&2`ZRI$#GY]^W0+4ETP35+('+T'J7=BH>.)"!M*5-&0=)9(,!"$E#5-1=DOMEZog&5U_U-?4( .*'"()E'895! \$''2C.(:333457F=7?72.18JCN,0.++&D92#65/MX.63044147CI0/UH;8144006<=JOBAORNIJKLEECTW9H>:7=?aLPOPPPQQPOPPQPQPQPQRQRQRSRQQRSSRSSSRSTTTSRRSTSRRTTRSRTSSTSTSTUTSSTTSTST SSSUSTTSSTSSTSSSTSTSTSTTTSTTSTTSTSTTSSSRSTSTSRSRSSSRSSSRQRSRQRRRSSRSRSSRSRQRQRRQ PRQQPPQQQRPQQPQPQPPPOPOOPOPQOOPNPOPPOPOOPPPQPOPO NONNOOONOOOPONONO NONNOOPOOPOPOPPOOPOOOPOOOPOPNOPPOPONPNNONONNONONMNMNMNMLMLMLLLMLMH>׳Mtl;nwqf_ӧhhafZq~H>@`8ESUIML]SVT{WZXrgPpficy_RaTscoda|.E|hF}wctrltt̏|qsHKGywgnY?GFFFGFGGHGHGHGHGFGFHFHGEFGGEF"GGGFGGGFGFGGFGGGFGHFGGFGGFGFFGFGGGHGHIHHGGHHGHIHHIHHGGHHGGGHGHIHIHIJI HIIHIHHIHHHIJKIIJIJIJIJJJIJIJKJJJIJJKJKJKJJKJIIIJJKKJJKJIJJKLKKKJJKKJJKKKJKKLKJKKLKKKLKKJKLKKKLKJKJKLJMLKLLLMLLML MNMMMNNMMMNNMNOONPOPQQOOOPQPPQPPQQPQQQPPRQQRQSSSRSRRSSSTRSTSSTTU +TTTUTTVVUUVWXXXWX:WXWWXYZYZXZYZ[ZYY[[ZY[[[\[ZZ\[\[[\\\[[\\]\]]]^\]]]_^^^__^`_^`__``aaabaabbaabbbcededdfedddfdfgfffgggffggihjhhiijihiiijjijijkklklklkklklmklcmr\@PO:0'(-D>LTMSXSQQ4QK4534357<>@953341_]\ZZWTU]XZ^_`fjAD@EYTDGMNKFFEC"DGNNQNGGCDBtmu{y{|P>9<<;<;<;<):<<<>???@@AABACDGEEFEHHIHHIIJIKLLMLLLKKKMNTLQOMMOQVUW[XXXWX[^b^^Z[^]^]\\ZVXZYZ[[\]`c247sga^befjkknqtnAvI=KLLMNNNOOPQQRRRSSTUVVWX"YZ\\]]]__```abbbccddefeeffgffghhijijiihhijjkmmmonqrrsuuvvxy{|}DFFHGHIKLNPQSVXZ]adimsx{~nx賦ұ܀üx~yvsokiec^\YXTRPOOLKJ}tlhec`_]YZYS~tjfecea\`a[\[_d]Z^ee`[[\XVVTSTTPPNQOIN}u}zk_e|{sjfmsy|?t?87:<=:974787655432348564006759776980040/11/-+*.0+%))+--/,(-2120.033101246/TNJBAN+.0132152.'''(03897336==?7342,,1.,*,)),*.0276..396/013/21.,*,-,*)*/0./6;821-53/++(+1/.1:60.2 42/0+,($"!"%(.(#!(%(-*34<>#%8"$!=<8?#>A#"# "#$$$B::2/+,,-(,64+$"!!!.7.068C-,1\,-)+4<*& !" !!&-87;5-)!*58-2=91/,*().)(%  ( $% "### )1$4(2.-&+./2++48-#&)$#!  !(###"#"%$"#%%$'2-'*2!+.1.&+)(#&#"!"!-3)%%#"!'0(jc[*s}>wlp2awmti:=Kgmd`:N;PrC:P13FV]XUTFMTSQKLK6BG>)@5WIHV1A39AGCJHF:-P7@_VWURUJ5;@D?9>:<4-S2VTAOTLIE8;<75@EDo1F'M2A*.;'*OIFB=<>JF6--0M'0563TR-/.0-]UVK[+2Q0_3ZJHAAI85;5IUFW=4UPSY,DV9BDT9S(#!&1C-F3T5+*('$"&''&B8<9;?C" I]<70+,,VKB.K-/WA(4[YLJINb;A=>7-++/,@^3@AFQ\aXKa<6G4BH68BDIBEEIFIGP-R=iVXAW_PXCQ\_T;;SUSVFJ?3OPOH/+Po7)MDQJ-T5CEIKOMLDB?=@DAGFGJKGEFEDBDKHEBBABFGNOMMKLKLIIHJIIB>?E<96W>==<6^C"(&<7DJFAJRQE:/=@[29EEGFIKC%,;:2I*,$29pvngjea^ZX=D3!!0FWWTOZZYZWTED,D:9/*D?DQa62;N\B22=/P? >^ZLS8(<]Y[[XW[^^\T<:,:EH<>LXRGMZmC",.8 '=GKOL, ?A?31@EC> +.74 ,#  % +" + " "(45/ATN?B1  $ d $'!")&* -2  %(3-$" &++16(*:@A>?@C=<;HM2=6117B΄π؄քڀ фfτЄӄՄ+΄Ѐƥ}/D#-1+'+I_FX?ѥ7/![;QWs{ѫ_ [G!0!;(  '5(,& 8 +4E%1 1*!3'3#"*-,7iR/ͤ|x¿݄ހj9*-**)*+.00*())%$IGFEFFFHKILUVW\_;:6?XO=?DDA<;9966?KPMFB>>?vnw|w|~F2/20/0-/000//0/'/0225568667776;78;:><<99989899:=<;;::;>AFEEGHKPMMOMOPRSVY[YVTUWWXVWVUSQQRUX[,+-a]]^`cbeggkqx|R񁈏ʀͽwunyp~nz½¾õ|ysrsl̿~|~{twwppmpxrpt{yrljkecb`_a_ZZY\_\\Bv<@>ro{Vxtllhf134iphcgmhe_^]1^ZYVWTOPRNLJPSSNQTRYUYYXY^YSVTOLOLMMHMQUVQF9=:<<:87671.3:441N34561Q6 $(4;3,6@B8.'/3I)088;:<<5#1.(7#-]e_VWTPJFB*. '*"  :'*FG>C!&ABGGDFJMMKA+ */$&/@?7>HX}|{{|}|}|}||}}}~}~}~}~}~}~}~}~}| +}|}||}}}~}~~~~~~~~||}|}~~}~|}}|}~~ ~~~}|||}~~~}~~}|}}|}~~~~}~~~~~Ҁ}|}|}|}~}~~~}~}}}~}~}~~~}~}~}|}}|}~}~~}~~~}~}}~}~}~}|}|}~~ +~~ ~~~~~}~~~~~~~~~~}~~~~~~}~~ ~}~}}~~~}|}|||{|||}|}|}|}|}|} ŀĊ̨ѣݹ˦쿷ּ͞Ŕēѵ砵Π߳ኗѶƵξ᳅^݀ҭ²ͽݾĩ +  +  +  Swܴ닍\3JƠĖ͢ջ܊ɴ҆ˡ֛̍٤╓ɞάƒ؃ߑrՀHRGn~d   + +    !  ! !! ! !"!""!!"!##"#$##""###"#""#$$$%$%%$$$%%&%$%&&%$$$&'''&&''((''(('')(&()(((''((()***+*)))*())((***))+*))**.Qе􀀄ɦ$ƺO(#$$$&%&&'))*,,---..-).//101022212223343334432323442234344423343432245678;:;<=??AAABEFFFCFJKLLN(QR**,,-//038:<>BEIKLMOQOQPV[]^bgms}]fkt|{z~«q|М}{Ӭy¸vnDZoaRJFC><;97510..,+('&%'PD˵ڴҼ̾пԲ̬¾ƾ½¿ĿĴ̻ôمŽ€úҿ¹ºзϭ鷬ɻ²ɾɾ׽܌ӭ񾀿κބ̚ЛĺҾ܂ĵúɡҸ៘̄Ͻ݀˵Ӎ€АԀ啃̽¯ü۽߾调òϗܑƨفرӃҶ݆ᵾ½Ԁ«睠І͹ӆ¼ɥDzɫƈɿҷƾşó܀kfG,NgT0$@W[^^Z9&NaYS; 2UZc^J:;73)KNA*;'&MQ99;4AE1,! !=/B#)$C+38*+--'"D(/7@AJMIR^R9;P]K6@4&!!-)(%"+.B;7A=0i"$&9%.=215356<4572-.8>IWJZEFUFFKKEGHHeN;R<9=@:]9OOPQPOPQPPQPQPQ#PPQQRQPQRRQRRQRQQRQRSQRQRQRRRQSSPRQR QSRQRSRSSRRS RRSSSTSRRSRSRSRSRSTSSTTSTTSSSTTTSST STTUSUVTUUTUTUTSTUUTTTUUT UTUTUSTTVTTSTSTSTSTTUTTSTTSTTSTSRS TSTUSSTSTSSSTS TSSTSSRTRSTSSRRSRRRSSRSQRSRSRQRSR'QRQRQRPQRQQRRQRPQQPQPQRQQRPQQPOPPQPQQPPQ/PPPOPPOPPQOPPPOPOPPPOPOPPPOOPPOPOOPPQPPOOOPOOOPONO(POOPPOOPPNNPOOPOOOPOOOPQQOOPPOPOPQOQPPPOPOPOONO POPPPONPONOOPOPNOONONNNONNMNNNONNMNMNMNL@YptBFkU?\I:|ҊxNXqcpEor[8Em=TmB}\ASXwY[RWEGf=mWooIJT_svo9O^tIGFWt{m}AjlցЛ팕 ݏzl~DHHGFHGGFGGHHGGHHHG HHHGGHGGGHGHGHFGGGF GFFGGFGGGHGFGFHIFHGHGHGHHGHHIHHIHGHGHIHIHIHHHIJIJJIJIJIIHIJJHIJ IHIIJJJKJJIJJKJDIJKJKJJJKJJJKJJKJJKJJKJKLJKJJKJJKKKIJJJKKJKLLKKJKLKLJKLLKJKKLKJKJKKJKLK$JKJKKLLLKKJLKKLKLKLMKKKLKLLMLMLLMLLLMLM +LMNMMNNNMMNPNNOOOPPOOOPOQQOPPPOPPPQ +SQQRQRRSRRSTSTUSTUUWVUUUTUUVUVVVUVWWWUWVWXYYXWX YWYZYYZZYZ[\ZZ[\\Z[\\\[\Z[[]]\[\]^]]^__^___```_`_^`baa`a`aaabbabcddcdcdedefefgggfghhhgffghghhiijhikjkjiikjlkkmn65lhQudJ=N?1+..LNWVNQUS,--@V<477677::>866683[__gcXZXZ[[[b^dlxGA@MbEGJNPLMHCDFFKSNHGFFEusv~}}NI=9;;9;<:=!<<<><<=?@=?B@@BDDDHGGIIKKLIKONMMNOXPSSRQRNNLKMKIONQRNSVRRSTUX^a\ZYYY[YYXXVVVTXXZZY[_ad4oh]Z[^``adeimoj>>?<<=>98><;8=<;>6787766449655455665545435524435>:0=@>9>=677314512-(+,)%+-+.-/+',1/2//223045693'I>:5G*+/131021,+&$&,4/349==A9683/-/-++1-/11//056.,142233424/,,,./.,..///07<824/597-+'##$&/0,*'%)()+2&$" +()$(7/&)+,35;A$#8&%"A?@GHVULY2LI@IKDAd-qmo]XL685:D?BD<;?B<7694?7H=KKMF1M<=0,-R*M*46<@(,2TT+SO5VNC*,KJ,)MHD-;65:A;E8_j)A@MT2)+,+(+9F4`N;H0 %.JT.$ "''+2$#IK:456:49?GPT-+(IQ?@U5)B1+TGC630*(*)((*-,,(&+37L>S_`e]8:YY3P=CFPONDDCBDG(=\5SIM]]EQ^\SE0KQRJbAG.=ZJ>($05P(I=9K:OH>=?IJLD?4?@?FIEGDGHEEFKB>BDFGD@?AFLNROLJMKLJJGHDIIC;@GB:CG??:9/S3 (9-FHJD9FKEAPA@/3>IBGEGGC401:;($,N/1q}8eggeb^^D6G6C7$&-:RQKWVTXU_VE:&$J/7GKHCGTJ8"AQ8'1+)Qo.)GYVYQ-+G\ZY[X[^[ZWJ,$+AJC7DINKNVdqYN- +  +;M; 7DKLG" 4DA=& #:BGE0* $07' +*' ! + &" !"-4/4B9*$=>- # !   #'#" / " %$, && %,3=5<+.?:8>?<=CAYG2J404;BЀ܀7τ%̄҅;ԄՀȫȏi#6):+y1JV8' @g)n惄{;%>@'"+F2+% #  4? +Td>"= +'$>,5C,13'&5p`!,@cyYrn👁{pғÿƄ¿¿ՄfnyJ7C1%"()FIROFHMI&(%1A/,L--./3,++*-(HKOXRMPQRQTX]\bkvC;?>@@ADDDKJNQLOROPRSUW[ZWUTTSVSRQTQPOLOOOPSVXUS+]XWXZ\]]_bafjmwY̧܀|{~цplų_mpejkt}}z¢{ƻļӼ~xstrnϾ||~ztwxppwsrxvv~|uplmgcgf__a\YZY^bZSS{{zuwwmoylmsqkhgjhifeikkegbd11b_\VVTQOQOKPOUYQVYSWQ^`UV\b_TWRJLRIMMKNPRUTI>AJGGEDEF?;84558>?><=979?>=84-*-..,*'(+,---+)%&*.0245342./33313/,0-//-***)*,**()()*++-++*)(($%''',&&*%"'(""!! "!"$ ""#"" $#('&)()$&&%*#5.+&8!"$%%&%#"%%(&')+*,+,2.)'*'$"&"""! !"$% "##$$#" " !"$!   +     "!!*('$&  + +##'!" +    &&!     +     +  + +  +       830=JQP7GGGH5C:7)*&581#7)&*,(**)&7!",520,*1,+*&'.!.25-,0)$&#!" %(0/%*%##$#!;E=:0,%" !" #!&$#)(( !"%"$$$$*$! &'2+/&5) (-,-$!$%&'*"'"! #- #(&   *#*16=9&*3/(!68?>;45311-$2.&)-0 (.-*$7>?6?%(!0((%.+&0#,13//.'/2/+476>=8;9<<<:9<1.17:=;646;@>B><<<88:;871461/8=;2=94722)E&48:0'5EQ}||{{|}|}|}|}|}~}~}~}~}~}~}~}~}|~|}~}}~~~~~~~~~}}~~}|{}~~}}}~~~~~~}}|}~}}~}|}~~}~~~}~~~}|}~~~~~~~}~ˀ~}|}|}|}~}~~}~}~}~}|}}|}}~~}~~~}~}~}~}} ~~~~~~~}}~}~ ~~~~~}~}~~~~}~~~ ~~}~~}~~}~}|}|}|}|}~}|}|}|}|}|} 䰪ϟӕс翸•Ѳ׳ŨҐ󠟿ȶ֮żƯ侟^񃊔Զþ߽ѯp +  + +  +  '8Msǣ墻ȉɶ°<*,kϧӆ쓷ބ߆л賒񦟧ļҒϟ{B     !!  !!"!"!#"#$$##"# $%$%%%&&%$$%&&&%%$%%%&&'''&'%%'&')('))(('()(''())((***((()*))*+*)*,+*.ZŤâþَĆbþſ/%&')*)*+,,-.-..--.-.///.-./././//.--../00/..0011000132113355564346657878:<<:;;<<=>??@ABCEEFFEHJJLN''()**++../148:<>ADFGHIKKIJMPRRW^gq|[`bhp}ļƀ閫׼ÒѶ˸ztonnnljgôn\RJFA=;;8421/XXXRRLKOSͯ퀅̯ǹƿ´俚Êɻƻĺǿ³ټ식¿·Ųdzŀ̺֬¾żغɽļ¾Ʊ˺ƼƺٿǮهȾǡŸ嚴׸׬𑵫²Ğޠ܀ݒɀӧީǗ·焌Ƕ逻DZԪкӼߡͳ޻ߤސفգ̴ø̬ׅͫ橶ꖒÿĢѽKñû̻÷漿ϹϹрdfaEBi^_-7S[_`Z/!X]XI!OWb]I52.=%:LM.A,%6X.:5654;*&"%31G%64-?)+A/%@88$5>DDCMOSJFD?O`RFH0%!!(($*%/0690;70" h"$(D'(9//55686354*+),]T*6227647D$+/G978981--/8FSUJ_J5PDEFHGJCOcEFH<:B?>FMPQPQOQPPQPRQPQPRQR QRRRQSRSRRSRQRSRSRSSSRTSTSSTSSRSRSTTSTSTTUTUUTUUTSUTUTUTUTUUTUUTUTUTVUTTTUTUT UTTUUUTTTUTUTUUUSUUTTUUTTSTSTUTTUSTSTUSST SSSTTSTTUSTTSRS +RSSRSRRRSRSRQRQPQQQPQPQPQPQRPQPQPOOPQQPOOPOPPOQPQOOOPOPOP OPOOPPPOPPOPNOOOPPPOOOPPPQPQOPPQPQQQPOPPPQQPOPPOPPOOPRQPPQPOPPPQPPPOPPQOPOPOONO PPOOONOOONNOONMNMNMN@[csnsfq\ifi|\v}meryV_U~|?Vu}eKAG[vzgWLCmwj[Qve_[{R“V7EIu^k]TEpDj{\Rlyulfokqlݏ~ٚ 禁u佼pGIHGHG(HHHGHGGHHHGHHGIGGHHGHGGGHGIHHGGGHHFGHHGFHGFGFGGGHGHGFGHGHGGHHHIHHHIHHGHIIHHIHHHGH IHGHIHIIHIIIJIHIIIJIJJIJJJIJJJIIIJIIIJIIJ IJJIIHJKKJ +KJJKKKJJKKJKJK +JJKKKJKJJKJ +KLJKKLKKKJKLK JKKLLLKJJKKKLK LKLKJKKJJKLLKLMLLLKKLKLLMMLLMMLLMLMMLLM LMMLMNNMMMNONONOOPOPPOPOPPQPQRRQQR SRSRRSSTTSSSTUTTUUUSUVUUTUVWWWUVVWVWWXWX WXYXYYYXYXYZ [Z[[[Z[Z\[\Z\[\\][]]\[]]]^_^^]^^_ ^___`_``___` aa`b``bbcbbcccbdccbcdcedeeeffedefgfegfhhggghihhijiiijjijkjljkjjkklkklklml7mmmlkoeiQBAO:2RRWUWWTSZYXYY5SF8799:9;:?=99988ghecda]Y[[_`_`fmoHE@JcTHKMOQQNEEEGKVPKKJIDC{w_ty~yIA<;=;9:;::;;<<;;<;;==>=@B@@ACCFFGHJKMONMNOMNMNNNOOOPQOMPNNOMKJHMLNNJOVOMOPSV[`[ZYXYZZYWVVWHYZ]_ahg[YWYa`achmuw<<0~KMNOOPPQRRSTUVVWVXYXZ[\]]\[[\\]]]\]]]^\]]^\]]]^^_^_acbcdedeffghghhgijjikllmmpqpqsuuvxxz{}~~EFGHHHIJLMPRUW[^`cfikoqsvxz|}osw{합̹ÖҺ||{{yutƶ~xtronmieb_]lyphhgb`^[Tuifihhdbaedc]]mmX]^`^[XYX\a`\ZWRQSMOUL{vzwz|CCrtu|}spp_b]aisqigccioood`ba_[VUZ\bga^bbY[YYYSKLSUTROP\[WUUW[^e]RXV~SVVSPTSJLNMOQQTVUKEOOQOJJJCB@><=>CFHGGJGEC@:;=<:9768887;835688>@ABBBA=<;<89??=9><674455775325554565554435545527857<<87FA78826532241/+),.+&,,,0//+*153;759:<79;521(HJ=>L)+5222-,*'%##./.67666;@=8.43/.,/0,*.++,,)*-33,+./0552657/,**,..///2224:>;9:;=;""! DEC=83/(%*/,'%)'%$((!!")476**7:A.=E;&*.-($$  #%(,$!" &#+56312*!)56<8<1/('&#"+-+%$"#%%"%($ !T"#!!!#"!" !$#$'()' &*)&(-+*&%),$"  !! #  !$,*%$ !"%(" #&)($'%"$)*'$$(!$!#!#)YraHEy{}]V>t9FTcfa[O.5DQKM;4?WRUZM>8`_1/1Z\ZQRQKVQJQKI=M2G6SYQ^e[@FDH=AE;JD=R9015AHGD!60%KGE: B?=>:6$..3<:>A ,.9<61\OKHD>63<;VT?W@*57C?6?, #*-,92--+-++)*'))+''&%#$(((4:,+ISJTeQQ`X\MLNKKFEIHD85,J9CWKNNWVDJ@?NPMB9D3A3H0F"C6"(K7;6GEBE@DA6`RA?@?GEDILMIJHALB,A:EF:EA=CHKSOMLMLMMKFGHG@C;9ABCA-BA<=72?*$)>@HKKB>BCB5LK61=OEEBGG0' ' %13& *  %   #"##,16610*9E5$$ +e &#%,"!71 $& "# %1<@5B29669;;@=GZ@<@32:>L΄"ӄ|مOڄ +ӄf΅ՄԄՀɐnC>#."A40>S83VZ<*',=QAuspv|zF7/..0111000/0110210334477443447555668:98:<;<;;;<;<>>?>@@?BDCCDDIHMOJNTQQRTWXZ[UUQPQSQNOOONNMMOOQTVUUTZYRSSU[YYY_`gi5@bрن|ƽż{Źҽ¾ż}|xtqĽ~yvuvuunl|qtvvspllijkheba\YYUX_VLIz~{xjes~|tmnrssjghikkjghghic_a^Y\Z]\UNNTROPQT]^[Y\YXW^YS\_TUUOLQPJLLKKMNRTQFCLMNLFFC;867668>>==<@?=:5,,..-,*'*++*-+(),./35688674312.1564172..,-,*)))&')**())()***+,*)'*'**&&)(&%0) !$! !!! #$"!!"&%$ "%$+(&)*+&$#! 5:/.8$q"#$!  ''**(+/,)#+-)&$&&!#!  ## "$'&"#"%!  #&$  +    + +  #"((&" + + "'$($ +    #    + + +  !    + + + +     + + /:4.0MQU7Q3&G$)2;<84,+2!C+2$%*'* "1.31*!20/10*,*&-)&*''%&41*684!$#%!#%# * 4/& %&&!.0:)$!%$""""0 $:!(%"#'" "2, $(+%!E*)" $ )!'))(*(#!  -*(  2:944)(7=E;;;8:74982$",#&&++"&#(9>7+"$$&5* 1#$ --1)"#%)VH9566?<9=>@=A=7B6"2.:=3:538=>C??==<:;<7763-101:<;6$88670*2(/6;9.,355*;:+$0?9:4/41"'#%+&1!D`WUTUUNJK::>,D<@,9:GFHHEJ;3/4#";GA=<9?@?8- +(!!$QM +-1;1E=EGJONIC<( +0-875>==@ABCDDDGGGKLLMM''()*+,-.024677:<>?@BCFDACEHKOVcpy_l{򌘗y̲˥³}ήz{~|und|j\RJC>;9654cKpdm}S[ʨ󁒔Ⱦ¯ßȏȽĽɾ÷±Ʈ򃄆ѼͿƟǶʤٴлǯɿƿաгЇƕӶƂܾệûέǴԻƶӼٞŶ˱¸ټņþ¶񫐛ý䍋ׁǹ꠷Хž•ǵ섟֏߷ѷىǷοʼȱŖϽİƳŕ(ι߀ŷﹼټָ̓ƪЀfcaL&10'*]c\Y(G$%J\\]TL7W[U85T`_I.B)<.'AA9=E"*#Q@ID;D;90%$"#0(62+)<"40(9+98552.=BBDMF>G'-L3677810-.1>PXOR_I7D?B7?DFAVYCTC<:AA;ISPPRQPQQQRRSPR QQRRQQRRSSRRRSQRRSTTRSRTTTSRQSSRSTSTTTSTUTTSSSTSSTTTSSTUTUTUSTTUTUTUTTTUSTUUTTSTUUTTUTTTVUUUSTSTUTUTUVVVUVVUUVVUVUVU TTUTUUVUUUVUVTUUUVVUTUUUTUTTUUUVUTU VTTTSTTUVTUTUTTTSUTTUTTUUT UTTUTTTSSSUTRSSSTSTTSSTSSRS RSSRRRQSSSTSSRSR QSQRRRQRPQ +PQRQQQRQQPQPQQRQPQQRQPQQPPRQQQPPQPPPQPPPOQPOPPOP +QPQPQOPPQQPQPQQRQPOPPPQQQPQQQRQPPQQPRQPQPPRQQPPQPONPPQQPQQPQQPQPOP +NOOOPOOONONONOMNMNMNL73`UVYWVUXYX[`afFX88?;<;=@B>?==?;lihchiba_^d_bdflqDIAAZcIKMQONLJCIIIXOLMLGEDwuw||z|~GC<<<9:99988789:;;=<<==?@AB@BDFDFGHIJKNONM]LJLLKLLMONMNNLLMLKKMMPNKOTNOMNRSZ^\]\[[ZZY]^[ZVYWVVWW[]_`jb]\Zbhj79>>@DGHJJKHGILGGC@;<=<<<:8:8766369;>=AEEB@AB?<=?:=70QGKT'+0,-/#%&" /3648744/178725522051*+--,,+-/37520/,*.62577/..'&.-2412238=60)%%"',$$$(&"#""*673**)6@/9>1"242- !!'&'*/*%/+)$("(..+,561##$).?2247110+#-,6-"$""#$"!!"$#!!"#"!$"!"#$%&&$&&21$""&" !",$"  #%" &$$'& "&$# !  "%%##&#%$#!#&"'*()$##9iaf5CwGlIin8O'Riac^VGM:>5j\L`70OKK7-@SOKH@X9353/0Z_ZRRTY[SHUQDRP72OH5SZ]TQARGAB?4`DB=5,NA0.7I;v22.85>AJ2P-7?IJGA=@<58<=;AD8<=I@=6R*/=-156,2A72)(":L&-,+!,&$"&),.,++))QNJ+"$+0-& '#9.$".L0--A;/N%%:Z2L9_Q==>FC5,/3G>@N<#%l7/?D>U4)""&()()*,,+**+*&""! &$"$&%('QO*DFISS1IJHIIIDDF-6CEc,JQKLO[OGQU3.SJ6A9SFLE8._%?A<")CDED2,28;A@ABA@AA@GQPIEC?DLN4>@B3HE?@EKPOKLKJKJLJGGIGA><=AET*<@?=82P9"/CJJJ?BC=9,K2.ERJBF99B(;5583("FA4?jkohc_\ZXYK=AQQV\ST*5SUURTPYEB>10:BTYK8LLLJEIDA9;Q8 K."1'Qm@?':J[(+D9MWY[\]ZTJ$*=II4LCEIP[TSR: KLNF+ ,>FLA%$=E> ';GI2"++$( (%   .!,"  +  '+(+25&7# &  +  ''$'& }0!"+ !)9@<:E3 -/5,39::MUM5-.T>X\ЊI3&CV4+E.:͒t03Q%/= /=I2*wP).- + )7-"*M"%1% /G<,%,&+ZE3?2fV$Q(6QPY¾PAƄDŽ'ÿĀ¿ӀR>735+RLPNPOJLMNNQRT:J015010136242140[YWUX[WVTTZVYbelm@@9=upmp{}zB4...-/00//.--//0.//0002335332456556899:;<>??<;>>=@@?BBDBCBCDCDFHKMMHMQNQRSUUYZUVSNMMMKNOLOMOQQQRPTRUW[TTRPUXW-.0158;8C!17661*A* + 0888-371,!;'!6@969-,2,%%+)(*&3ZW^WTQLJJJ>27CCILB:K!8@CDECH210)#',EF???BA?@:7$/5/>X0! (4%%7AFIJJE@4 $/-"627??ACFMWalv|fny{vwy|ͳф~拪Ҫwlffhjkmleyj\PHB97mNƧȵ񀍔쁈¼źƵƒ¾ý²ƺŽֽ𚦣Ͷ¿ǻſʽՀԾ򃅀ž۳Żɀ̸Ӻҷ°ƑҎ݋Յ៕üœߥʺƀӵڞʻ획ȺļͿ珗ƾǩЫ᱓ԅѠĂ㟡Տȗӂխ󬏀Ȃɢǿʳ仉ζɾǿЕ׀܃ڬկǼ˷եûƻݒʮLҴ̿ȐϺѶ߫ʸΡ߹ʀbbaW&0!4`]h#UX77R\ZI)&TVPG5G^bQ&/50A%&-68/U4"@"5H=?8HJ70#!!T,F8("4'*N3CA>[EL\D<9>BZDTQRQQQRRQR%SSRRSRSSRSSRRRSRRSRSSSTSSRSSTTSSRSSRTS +TSSTTTUSTST!UTTTUUTTUTTUUUTUTTUUTTUTUTTTUUUTVU%VUUTUUTUUTVVVUUTUTUUVUUVVVUVUVUVTUVVUVUUUVVUUUVVVUUVUVVVUVWUVVVUVUVTUVUUTUTUTTUVUUUTUUTTUUTTUTTTUTUTUUTTTUTTTUTST +UTTSSSTSTTS RRTSRSSTRS RSSRRQSRRQQRQR SRRQQQRQRQRQRQPQQRQPPQPQQQPPPQPQQRQPPQPPQPPOPPPQQQPQPPQPQQPQRRPPPQQPQQQRQQRRQQPQ PQQRQQQRQQRPQPQRQPPQQPPQPPPOPQPOPQP QPPOOPPOPOONO POOONONONNNONMNIYxM~hUqPwgYpeyTXwlIgXܴ*3CC@?1vxdIZ`VxjhcgfgBQ}qvj[U;.AWOBS]oKha}jntuytڢup|wvrsrvrpHHJIHIIH +IHHHIIHHHIHGH-GHIHIIHGHIHHIIHHGHHGHIHIGHHI=HDLMuzIHBBHHIHHIHIHHHIHIIIHIHHIHIHGGIIIJIJIIJJJIIIJJJIJJJIJ IIJJJIJIJKJJKLKKJJKJKLKKJJJKKKJKLKKKLJKLKLKKKLK LKLKLLKKKLLKLKLMLKJL KKLMKLLLKLKLKL,KLKKLKLLLMLLMLLMMLLLMLLLMNMMMLMNMNNMNMNMNNMONONNONONOPOOPQPPQPPQQQPQRQPQPPQPQRSTSTSSRSUT +VUUTUTTUUUVWVWWWYWXWXXWX +YXYZYYZYYYZYZZ[Z[\[[[\\[]\]\\\]\]\\]^^]^^^___^__^^__`a``_ab``aaabccbcbcccddccdddeeefeefggffgghihihhhijjikijjjkllmmlmm6l7nn6nnnm6p^CoXJB9;71RTYWX]_^^_cee9TI29><9?A@@B?=<<:jafljdd]\cad`djryLC@PjSJMNPMRPBIIFTQOMKHFEwtv~wxzIF;<=:899898:889<<>>?@AiBACDEFGGIIIKLLNMNOOMLNOOMMPTOOOPMMNMKJHINPMQVQRRQTV\VZ]ZY^^]]^\[ZYYWWWXZ]_chngcaf7:<>@EJLLKA;DNPQRSRSTTUUVXYXWVWXXYYXYZZ[[[\]^]^^_`ababcceffgfghikiijljjkklkmmnnoonnooprstwwxz{~EFFGIIJLLNPQSTUWYZ]]^acfilmprv}}މѧڹxмĿ{spmkvŹ~wqonŽ{pllknpikjle]``YZ^a[Z[ZX]``YQOPNRRRPHKzCFC|{yyqopp]]^]ZV]geiigfc_^Va`[]\]]]\`\bZRQSUQNKNVRNPL[^`_]Z[YX]^YIy}RSUTTRQPPOQTRRUWWQORPPLGHFBCAA@CFIIKLJIGJLHGB6@=<==;;98;766879=>>>CEEDACDA@@=89;<97874423445764468656434677656632133299::778663/2...++.+&,.//45./4;@?7741,.2/-//)-)&)12.011+,**1366:15$&23-/223239>B97BB= %$,...*-,& $,0)('"3!!7-$$46221-11*5;2/:"#!A>=B::?<>!CF@:721$ !%)"$$&$"&*! )10100*2G279+=.0,'%%#!!")252-41#("&,-,241,%%0/8-(47:-.,$--*4+"!f!  !&$ ! !"""!##%#"",,30$"!!! $  !$*$ ! '%') !% "%!!! !!  $&%'(#$'%%"#"#&))+'R`6_EzBd,mdoj8^KHnkg_ZT[.8CF>4LGHECFPG?GCB940/2DK==>B4-17<;?>JK8o=42==;6,J;GY\6@ACHEFFC@?FD=314).=.25-HKEE[ *9HMITOC:;<3MH?.8)82J1AGI_3LSP`Q9.>% 5G(1B37.^IJ46H76e;6a,[P'#F/AI<+/[U`[OZ/!\A6;FE<8;2-R6O* %%%&)MMH@1,;HDC"#%#$(*L;6I*MOHIHHIJEFIQD;FJ32SJEOOLDD?[H1JHM@VIJE62hU9SQ1E!HOUO759;:@@A@>:3:fGQIKHD?=?D98?@DED3C9@AA;7-C*'#!:2C):<484,BB55;^hnih_ZZ[]P?:QVTTU]K..7FRRDOSKFK.*0@@bMEILMDGD>:$M7%&%2>+[v@`2*HG7$(0I\ZX[\\VK/6CK;0;11DK8 )2! +&$""  /"  ,'  &)->%7#!%3  + $ !#!'4$$ /! !5:?;?=5+'17:4995RCBT<43xViNFupe9 *"'/-02,DSL.-'2& +&JG+*-.&.:BT7!0$A+!$&"+, ?3_ی*ÄDŽ%‡q҄р9ҕWA902.(FHMLMONLNQVTS/F:*010.441263210/XORZWRRNOVQUW[bil@76IdK??>B?HD2128OMIFC?==wqoo||wyD8-.0-,/.,-++0**-.-.-//110142645897:<>?>>BBCEEBBEGHEEDHHIIHEEFEFKLHNSQQUUUVXTWWRORQONOOPQPPOQRSTUUW[[UVUV-../036:>Kրx˸~{ₖs~չø򇭗Ź~{{zø~|zsmprmnpqmorpnrrrmhdb^aa^ZRQIIHnkjmlgkmlqwtrolmbjgbc`^`]^`\aYTTWZVOJMWUQTQaced_[YZZ[[WL}}PNOOQOOPNMOQPPUVUPNQNNH@A?;=<;9@==73/---,-)*-)*(++.23238;=<:<;8772.122/020..++,)*+*()+,)'(('(()(*.0//0--+''$%&&*'%%$$" ! # !"!!!!!" ###'),)(,+(!+0.*'?;714 " &#'$()'&%(,/-'+*+''&! $%!$$#  #"%$' %)#!    + +   +r !#!#")(%# + +#  + +!  P +   + + +       +  + +     + +  +0@0K+@"F>FA#;,)>;;8936%)&).4%'&!'.-))"!1*0+-***)$$((%'#&" %("'%$# #*$ #!!$& "/0') ! '(6 !"..#2-!$  "&#$!)'# )' /!(L!%)2*,)3+  % 0"'!9 .&$ -.32+46""$! .0,$ + 0!(,31335872461&&&+&#('%"##51#572".&'#8-3*'5@E<*).349:;893-#:*?:=<<867=2.56;38:85:=>A=<=?=;;<;8665317>=*3/7:92-&3 &)355176*A!&",C=880%3./',( ,)!'/NV_\[RLJKOC32BGHHIN5,9=<@74<$"+2N@;?DE<=;5.7 Ga4C*& /BBFJLIB9)2%"-5=BL}|}|}|}~}~}~}~}~}~}|~~}}|}}~||}} +}}~~~}~}~}}~}~~}~~~}|}~}~}}}~} ~~~~~~~~}}~~}~}~~}|}|}|}~~}~}}}~}~}|}}|}~}~}~}~}~}}  ~~~}~~~~}}}~~~}~}~~~}~~~~}}~~~~}~}|}|}|}|}|}|} |}}|}||}}}~}|} Ί̿ҨΑ躨̭׸ʖӿdzô㈃Ӳп܅Ωĺfׂ拈̿ɻǺҿɢͯ   +$ Dߌ๜òylȾy/2%2ጵ敋РיǵڅُϵĥH:9$L+%$=1`B6     +      !  !!!"""!!!""!!""!" ###$$$""##$$# "##$%%%&%%%&%$%&&&%''&%&(&&&%&''&((&%'('()('()('(*)(()((*+,))())**++,+9጖ƀۤĶJ+&(''&'')'''&&&'&%%&%$%'&'&'( )*,,++,,-...01321222445335676764456566678:;<;;<===>?ACBEEFGGJNP))*+,++,-,,-//./11345779=@CDINV`loqt{|dknrvvqmjhffksܾү܉{wpruⵖqi`XSX[`cdb|~~sh]RkĸųȼĮ¼ļºåƶǏý¿ǾǀȨ򾷴̺Ȼ½ĶȢƧߪ̄ͺҰƹƭƾپ˲˽ĺǰʸĵųںր醡ĮŽȉʶҎ슛ગſìǹ٨苀ҍۃ˶ıӉ眩ĸɼۣ晊ٔҌӓ뉀ƍǫ˦Ʊ˞„̔ƳךЅ읒§䟄Ÿĺݟ䱤Ǽɿ¼ʼʎ賦ڮӍ´ډֽ¼ӮǷ҅8‘֐̦־ڄˀa`b]N,I[l9Kc^O#$F]WK/7MRJ( (Lbb9%:++(4.'-PG G7'L@9'9LB5& C/'<*)0%=1@QO42582#$+.:CDJK8H1/3dD!#$"&&+4:0( -.:7{'-3+O83/0511A2-E33>D")*)()A3:9GC,1---;D<31,3-6E#%*,D3127441--1=LJON^IJD9?SCAF?DZ?XUE<;B=Y4QPQQRRQRRQRSSRRQRSSRRRSRSSRRSSUSTS;TSSSTTSTSTTSTTTSSTSTTUTTUUTTTUUTUUUTUUTUVUUUVUUTTUUTTUUVVUUVUVUVUVVVUTUWVVWVVVUUVUUVWVUVWWVWVUVWWWVVWWVVUVWWWVVVXWVWVUVVWVWVVUUUVUUUVUWVTUVVVUUVWVUVUVVVUVVUTVVUVUSTTUUTTUUUTTUTUTUT UTTTSSSTSSST +STTTSRSSSTSRSSRRRSQRRRQSRSR%QRRRQRQRQQQSRSRRSRRQRPPRQRRPQPQPQPRQRQPQRQRQPPQPQPQRQRQQQPQRPRRQQRQQRRQQQSRQRSQRRSQQQRQQQRQRQQQPPQPRQPPQPQQRPPQQOPQQPPPOOPPQP NNOPPOMOPOONONPQQONONOM@LJQyfIsudabqurxaTYI>iRVz|}i@>b0p{m{F_Cq`\mz^=822;âur[ae{cNPZf!mXPf`nEcVefn{hz{Ġ눉y}hnZi~JzIJJIIHHIJIIHIHIHIHIIHHJIGHHHIIHHHIHGHHIIHHHIHHJKIHJHHGFrV_M~glvpupHHHIHIHIHJKJIJIIJHHIJJIIHHIJ HHJJIIJIJJKJKJ IJKKJJJKJJJKJKLKJLMKJKKKJKLKJLKLKKKLKKKLLKKKLLKLLLKLKLKKJKKKLLLMLKLKLLKKLLKL MLMLLLKLLMLMLLMMLMLMLM&NNNMMNNOOMNONNNONNONNOOPOOONOPPPOOQPPPQRPPQQQRPQ,PRQRQQRRRSTSTTSTTSSTUTSTTTUVTUSTUUVUWWVWWWVUWXXWXWXXXYXWYXYYZ[Y[ZYZYZ[Z[[Z[\[\[\^]\]]\\\]_]^___^^```a_``aa``aa`aaa_abbccbcccbbdcdceddeeedefgffggghgihijjijijjkjjkll6k6l5kmnmmo77m7m67ooo7679U^bQJ=<;aYX[`\_^b_bbef7DS87>?>AAA@?><==:5`hgk^ZX\_g_[^clrCGASeZHKHPRTUCFHERQNJJHED@vpttuw{PFR9;><:<;;<;<:;;;==>@ACCDEDDDFIHIKLLMOOPRRSQRQQRSRRSSURSRSOOMLLIHIMSQPVRTVSTV[UTWZWX\][\YXZZVXZ[^bfmqqnfpA@7621+.1-,+)),)('055439<9236/326/+'6951253423:?:7=>B?""-29;542) #&(#1 ! @5(!0-)274280+0-,<8."#!@@>=8,#+57BE>1''%$$!'*$%!"&%!%""#"&+0.,,0+:69<2%01+%&(%##"&)'-./6:30# +-0*/2,,(#'04*"12*,0(!)+'-..'#"""! '("  "!!  ""#$,.#"!## ! 4*#!"%+#!#$$%+ #$*%"" ! !  !&&%%%'+('%  !(**++6an5Yqy@B>kjdk9m:/Lhbg\[c<>T>kM;EAHG>?I]VJHM9?>:51^XSYNPOWQHSURPOD4FO@@R9JW8@?A04@?JQL5NUGJDC<58<@FLB?6,4_8>]P7NG+MK<+fi?S2'9%'07;=ABKKAD?G9?;9<<:=94<:DU5 =2-/I(J2P1*6J4JU^:C7><;JJKL>B.4TI`1@C >1/5?7>B6=HN>YV27I&5@D<26;64N3+ $.;?!#% ="?:IIJHFIHFB/86ZB5XoJ7IGDN=3=X94IGN@]LD?jH>e^A=Q7(==@@==@?@@2)6qDn2KIHFCDGD;85?;?EGCCGKJLONLLMIIIGIIHHD7?.631--ROLJE<;*4B:04/c#D4.+LUVJ?b.%.J8UaHFGIK>ADD-;\C*<.8 + Bapwr-$?1K0#0TZY[[]\Q?K,2)Z-'3UkLSs봖&-C;/ .=CP#!+PU'70 L,kVO. !,9%":*$!1 &'&%-7#$':g'++$ * ,C3?Qmɬߠӄ¾ٟȽCWfn¿þOńsÿ¿Å6Є&݄KQhE=31/LIGJQNPLOPTUTS,6@)-23343202300..*KQORIHHKMPJIOU[\784J`S=>6?CKI3026OOJEEA=?=soruxx~J7+-.../-,-***+---./101224669:<<=@CZEILKLOQQPPOPRTSPPNPNPNPKKFFGFGGKQMNSRRVTTUZVTUUQRTTQRSWSPQSRTVTUWYaYUSU\010358=AKk˨󀊑Ͻ腈~ո|p}~⾫ɽĽ࡜ijľ~vyqpuwnotolqtoq|ysklljc˼c]ZHJEG|snikihixyvz|tqjcb^fi`]ZYY]^aW]TOPSSSQNRUVUiTM[d_\^][][_\S|NQUSQPPRPMNNOPRTUTRQMJEACA::5/*)*+-+'&('*+.-04678<=>=9<<972.,/110110//+o*(')*(''&'))**,---**+,(%'%&'*(%'&$%#! ! $$ #(','''$'(,/1,E51+2A"$"$+*)'%),.,&))*('&! "#"%)& !#!!$!  !#!!!  + +    # + "$'"Z +  ""%!   L  +        +   + + + +     + + 2:5LM))6DB'&$"'#1("521!.%! 5(#94"*.87645:9991&:(H&9<;>;;=;41.767;>;:=@?@?>>?A<<<9;9864,3>7*..49>73,= /28614$(''$$A=;;5+-*4-&'#+!0SYY[^WXOQOPH86;A?A@H/% /8<5/S$$.*HP>@ADC699;"5D+!  0L^dZ') 6BFIJJG?/+#18"5>DL}|}|}|}|}~}~}~}|}~}~}~}~}|5}||}|}}~~~}}}|}}}|}~~}}}~~}}}~~~}}|||}~~~~~}~}}~}}~}}}~}}}~}}|}~~~~~~~~}}}~~~~}}~ +}|}|}|}~~}~}}~~~}~}|}}|}~}~}~}} +~~~ ~~~}}~~~ ~~~~~}|}~}~~}}~}~~~~~}}~~~~}~~}|}|}|}|}|}||}|}|}}||}|} Łתݺߛ׾ف辤υΩҔͽɸ仰¿Ѕվ耂ͨ[҅ŻȿǷt     #@n/)Daވϝ++6>b)/d嘋膹٭낔󱋠շœոՆ񓀁֒ەՄĪ͔y_7Q\ULU"JM)*ͅk6     !    ! !! !!" """!!##"" !""#""!""##"#"#%$#$$%$%%%$%%&%$&%$&&%& ''&'&'&''&))'((''()'()((*))*))**+,+*+))**++,)*/ݢ߼ZF,$%%&&%$%&%$%%$$%%&&&'&&'''&'()**+++,,-.-../00172221223444346665444545656689;<;==<=>?@ABCEFIKKMRT***+++*,,,../123457:?DJNQUZaghhkns}heb`_]][ZY]dr~ƴ{߳껇m{rjaXNvmkmqw{}||yxuѵúųƴйр¹ͭюýȽ»µ¾ɾ􀂃ŵʀԁ̨ˆۻ䀃ɿžŷáпƲŮþʾǬźõ۾׼ڮôĿ꓎ϰɱ϶ȱǘΦԼШŕɄ̾ҿưðąνݰ퇥ճӿӅ²ؔᠯȿں㎰ѐĸǧۦԁ˃ꇗ糿LjӉƣ﯄˰Ǚ{Ǻº慕ʬ诀о¤ٶബݿ멵ˀ`acbY@ #7YP7]YdZ9/R4$,HVUA"BSbE&-48>)):-N1*5F"DL:*1?G9'!)..G5#00+,&GRF"#-5("$(+9>FQYOQ/1c]I*!#'&+888 %+:@`''6-H74-137+/>PB26DM-,&'')786?LC-.**8MJ516&28G$%*0O660.1001.,8DMJLQWJHB;BI?CHARMBRNG>?B=2BQQRRRQRSRSRSTSTSTSTTSSTUTTTUTSTUTTTUTSTUUTUTUVUVUVUVVUVUVUVUVUVWVVUWVUVXVWVWVWVWVUVWVWWWVUWVVWVWWVWVWWVWVVWVWVWVVXV +WVUVWUVUWWVUV UVVUVVUUTUVTTUTUUTTTUTUTUTTUTUTTSTTSTSTTTSTTTSRSTSSSTSRRSSSTSTSRRSR'SRSRSSRRSQRRRQQQRRSSSRRQQRQQQRQRRQRRPQQRQRQRRRQRRRQRRPQQRQRRRSRRRQQRSR SSQQQRRSRQRQQRQQRQRQRQRQRQOOOPQPShXPOPQPOPOQPONNOONNO66kmwoVK;SESt=;IN|jn1jzh\tl@:XZQB[?keGGIHIHHIHIHI HHJJIIJJJIJJIJ IIJIJIJIJJIJ IJJJKJJKJK JJJKJJKKJKJKLKKLKKKJKLKLLLKKKLKKKLLKLMMMLLLKMLMLKLMMMLMLMLKJKKKLLMLMMLMLMMLMLLLMLMLMMLLLMLMMLLMLMLKMLMNMONMNMN +ONNONNONMNO!PPPOOPPPOPOOPQPPPQRQQRRQQRRQQRRQRSTTTUTSTUTTUUUVVUUUVUV WXVVXWXXWXWXYXXYXXYZZZ\[Z[[Z[[[Z[Z[\]]\]^\\]]^]]^^^_`__```_`ab +abccbccbbcdeedeefeefeeefegffgghghgghLihiihiiijjiijijjkiillmmmlll6mn8on7npnn7877n77m8oYJ^WQB:<3YVXWQV\cZ]abdd8QO95>==>??;:71baa]^][]f[][^anuH>GdcFFGKNTOAAFERSNJJHFEAzpon}vvw~Nf=>B?;=;>>>===>>>=>AACDEGHIKMOQQTVVVZYZ[ZY[YXXWVXVVTVTUURQONNJJIIMR2PTVQUWWXW\UXWZZRXW\][ZXWVVVXY\`dipqw~ru<=@BEFIIB8VOPPPQQQSQRRRSSRRRTTSTUUUVVWWWVWXYZ[[Z[\]]]^__aaabbccdddedegghihhhghhijjiijkjklklmmnpprrsuvxzz}FGGHIJJJKKLLNOQRSVX[]^`bgjovz|||yxx|}}{|ۀɽд녃Ôɫ}søŭ÷~v~~xnoopwrte]egicc[_b^]^_\][URRQOMEGIKJv~DEEHE=rtmrsllliYbljVYjjnlmihjlkhh]ba__[Y[\YZSMQRQTTUUQONZYX]_`][_d\|yUWWQONNONLNPPSRSTSQRPQMJKICDBA>@GHHIIIHEHJD?;979<<989;::;:;:>ABCDGEDC96:::149475+ZMAEOT'()D#'(-01255:865389<=5553*--+*,---)+1896=38:;4895:42-'398503221/3;=;:8;?;#(:8552,!'420' % "#"2* +42//75.5345.;##C>:>;;>,(-.>8*H=>!!"''$%" %'$$'""#&(14273/2423#*3&#*Q'"!"$(*(&)*/5/'"#,.+"'.,)'$%//,'+,-0+'&/+)'+,,*! !""!" *+!!  "!"%#""" ! ##('$'+($$$& %"$#)+)!""$(!! !"&&&'%'&"!'*$%'%""%,'+'XMmg&Ez63A3=PWHEVZE7CCEKNA==/1,HLLE>;=I;KM;:32Y\^PQlCK_ZPCI=?6=L::(74*)I(,T*RJD=EEAFAG>:33=C=87@>?8\;7]fOJG8&c9NJQ;2ALYKP-<0G<6BU%59DGJFHD691@JIA?>54=A<-2GP9;T:8"><>FIFEE<'-"")39/>FC912FKJKKGFD2gdb5TIH:=H9I?7:?PDIHOC[4J4;:7BMZQ4AEG@;/=)'%*(9ACHE?8*4/.2SOLHHI@,4C@311$C:*6Y``ciid]VXWRI9AIGHKQQXR4(?I9:U=DF3.i^QNLKCAKIG8HVNB79./ $SikwpFJ^>-F( ;WW[^]\XC2 /9BM@4EORYNONND' ;1+JHQD! 5-;?, +'9J, !  2(  %, " " #5( + #*4:78!!BA1 + + "%% +## *$*3)+."!!$+',,"/ )127;C662,4;04=6DE8FD?8:CPB߄߀рԶƀɒƳދV>H?b'<-ወޒJˎߡ0BFV[2SaSI}rR531gR3#STJ ;=)+ '&'& + #!.+'8+!&(/+)6) 0 ++&21&WP?LDLCkVPgCŞԓG",ɯCDŽȀ̄ʀsME5./(HFHKFGKQKRVTSP+=:,,55431/0122--*'LJIHJQGLLQU`f=3Aa]><9CIe؀wܹutԵ|ưƺŽԱɷ|ywyztuosvqqqtsrsroppmjcec`]LIHMHB'|jsmt}umiggccZ_][ZYX[\Y]VQOONPPQPQOPZZY]``^[_bWVXYTPNPRPKLNOQPQRSRRMMHCDB<;9:8:@@?@AA?:;<71-*()+,+)')*,../.469::===<6994210+021001/-,)())+)(((*,+)(')+-,--.,+,,+,*())&(((&$ !!## #%"!&'+'&)'$ )+20&L<02>A)"%$%(&,*('$)(++&(,,%$" !"# !%#!$%$ " %" !#"Y       +!! 83/{ !!      + +       + +   +    + + +   0%;<.N&*+0C-@B&/0.2C#==C%#2C&&#(%'3.%*(1$4 -0-$&)&(&)&($"'#! #*)("&-'" # *.$!-0# $&! #$!!&' -./))5$(50'"'#  *#  "!*$  ) "  !  !.06()) 3#"(#)#& )2%'):$!!"!'/ -!!575==::7- +  ',/24221":680''"''!!%50559*0$!$(+% .#*.3::54::9. 7#=99;=?8@@;88;8-8:<89:>@?@@=A>=><<:855)074G"(39=>61&,'0::4-!&##(CB?<;90'53'%$,!*KRRUYYSPIUJEA7&+349:>>@5 *6.6G/69"%VOGEEF=:C@<(;B<3,'>T[h_58G(' + :AIJGGE3%!*8-'6>CI}|}|}|}}}|}~}~}~}|}~}~}~}~}#~}}|~~~~~}}}~}~~}}}~~}~}~}}}~}~}|}|}~}}~}~~~}}~~~}|}}~}~}}}~}~~~~~~~}~~~}~~~~|}~~~~}|}|}|}~~}~}~~~}~}}}~}|}}|}}}|}~~}~~}~}~}|}} +~~~~~~~ +~~~~~~~}|}~ ~~}}}~~}~~}|}|}|}|}|}|}|}}|}|} 漥Ѓș̞Ь꾰߬ϳꈽ˹Űٲɠɿㅞgŀ퇌źʻʿȳ=    +.S0#'*(422āȵQ"20#-ā#(Nlǭ·RۻלפÃ싁P^\Ų΃٥֍ݐھցjԘ׭ʀ !>xmױݙ*ֽp;     S      !! !  ! !! !!""! !"""!!"#"""#"###$#"##$##$###$$$%$ %%%$%%$%%&%$%''&&''(''('&'('&''('()() *)***)))**)+)* +*+*)~*+)3KзʺԇІǶ?킗c(" !"# $$#$%%%&&%%&%$%'&&'''())(()*,+,+,--.///00/11212331223346554654432345556789;<==<<=?AAACEGIJLM'R+***++))''()*++,-.12357;>CJPSUVX]^^\dkwRSRPTXezՄ|svžٹϴưrg_XPyk]WY\bgmtwݪ~{ȷ¾€ԵԼ鷳҅¾πÿɺɿÿôѮㄇǶԵԶփýĶʾ ˹Ѐ¿ij˿«ƽǺħ߿񐺃ӌ޷܄ʔӿ㹿ƫķϿҡؚѽĸظ𦁊ʼ¡ո〄֗䃮ʚ‚׳ծȪ؜ǕڑһΉɬ׶ཋϧڋʨͿӡȽ˩睤ßȷVط괇⇥ø·Ïѥǭ媔‰À^^`a[V2 #N/XX^]]G'&4ASdT( &FYQ/0-,D`>)+ >D@D[F#)2!!)37<>F/-Z731XH+#$%+=88!$"&8H`'*.,C551/0=4*8NC/:H,//&))A774KI?0,+,>I:10656H'""-2A92/-/..-.0@IHNLWPLH>=EEAGEHWJJQLE??C=1OQQQRRRSRSSSTSTTSTSTSUUTUTUUTUTTUTSTUUUTVVUUUTVVUVUVVVUVUUVWVWVTVVWVWVVWVVVWVWWVWVXVVWVWVWWWVVWWVWVVWXWVWVWVWUWXVWXVVXWVWXWXWVWVVWVW VWWXXVVVWVWVWWXXVVVWVVWXWTVWVUVVVWUVVVUUVUUVUUUVVUVUTTUTUWU TUTUUTUTUT4UTUTTSTSSSTTSSRSTSSTTSRSSSRSSRSSSTTSRSRRSRSSRRQRSRRSRQSQRRRQQQRRSSRQQRRRSRRSSRRQQRRQRSQRQRSQQRRQQRSRQSSRSRRRSRQRQRRRQRRQRSQQQSRQQRQSRQQRQQSRRRQRSR PPRPQQPPQQWoWTRPOQQQOPOQPPPQPONNOONPPPRyl[Yc`ījdtq|F7eKQbHLju}¥hm0HLh>6.*/7zjKN_PiHJJgKmdho`G=::<;?A?<=73`]Z`cc\V]_ZUZ\jnFDA]hKDCHNUOE?EGPUOJIJFFC}njl|xtuKD=@><;<<><<>>A??AABBCFHJNOPRWY\_bacfgfdfcea^]\[ZYX[[RSSQNKIKJIIKNOOWVSTWWYchUUXYXRWWTTY[ZXWWUVY]aekopwvknqtvy}>3`GLMNOOPOPPQQPQRRRSRRRSRSTUTU1VVUUUVUVVWWWXXYYY[[\\]]^^^__```aacccbeddeffeghhhfighhjjjkjklnnpqsqruuwyy{|~DGFGHIHHIIKLNQQTVYY]^`dinsyquurrs߈Ӷټ̶|uʾᲥݸȺ}vŽ~znnnoxrihɼefZ\a^\`\\_ZSOQNNKJLHJLFEAELHCOJLF@F?poionjknfjoa^Z_`hjiklossmhf`j`_`^]YXVSOSPPQWXZWPRPQLO`]]`a`^[^ecspQRPOMNPPNNQPNPPRSUSSPQLHIGCDDA?BDGGGHFD>>=967:::=<::9;:<===>BDCECEB@?;=>;:9:47;997764523557998587654467535243678452013255<65:<;7686>=6843123-4002780+7899648850864:5.]JJTRB>DE;'/*-/63149;984368><2452-42--.0.2((/982><:?74;7562/'.8983131010799?!<7:32"7;2;980*.77)/#",3(")*/% $#",2236=62<24CD##"?66:79703@<3#8:7 %"#'%'%"# '&$$% "७/--.59(#$#%,$"$/*+++%'&+.-&!!''"#'%'$&&&(%+*+((.423-*'&"!! ! !#  '*$$"!#""##! " !""--+*+++*&+""*%'##&'&!! "%##$"#(!")(%"%%//.&P2kc#WBfI+KrAijJOPHL?5NXSH?2GKPCQW]QPTU89MFKF94;EA>@RNKCAGAEF>;:;78?:95CHD>66=CA@C-[VC<;B;62@D:06AGh=S,NLEF@B?HLH;8B???4@=;::630ORZ4*QQJE=*KO-00A:34a6<;2\_54167;?K4DY0ZT_9T8VX\5;:W!?,E+C/FA6KZ).@2MG1*2*4PHKHQUfY2&$:6N]UE6?PI:98-./=FL$=;439=?b@JF!3@>ABA?6-@$".35B8%#.FMLHGDH^E%BQA?4L3?>=3`VSEDIAH?Dj6[1AFe9RT1O4./?ACC?;5177VERXNJHHHJCAHDAACE>+,%G;,+W`-W~QCUFKS'$Nu„sVYbHJ$(TBńǀˀuGA70/+$HEFHJLPJMTSPO+7>3,6750/0.122/.+(MHFILNKDLOKMRUba@;=\eD<;=CLH;4:DTZQLJHFDC|spvzzw}Ip80/.100/2124465678:;=ACEHJMPTW\cjmvzy{zwuwtppplgb]^\TUTROKIJHGHJLJHMNNRVUS\bVUVVVSWTRRWWXUUSQRSWVV[XT[Ybhhlnrw}P홦ʀľۆӿ`ɲɷǾ覒o}{yĽa~{wyorvqpwrstnnopnkeficbbZUNOTOKWOQLDIB}~vz|y~~xwtnkkgdbZe_\\[[WTSROOJJLR PPOMIL]\\_dd`]afcXZVTPOQQNLMdNOPTTQNMGBB?99::9;<>=?=>%'*+)#'!2#/*,0(<-. ",))$%%'"#(# &(*%' *1.& &*&#*/0)),-$ #!#")'%!& ! %# #" %-0!,!"#3 $!!" %%'$#  /./' /0+0*+-02  "))## !%0-,"$.,$!#! && 3'#)798884+ % +   *35353-6+(+&$-# !7682592+ 8/%&4&(''.76853...9>;:9:;@;9?;:9:=63;>;9:;;<>@=@@::<=8503,+13J=58=@:6-9 + "|,532*<C#!AF@?=>7$23/&'&"+8+HQZ\Z[TPJLAD0  $)4;BHD; ,,-M>42*IORTNNCABGF-BA>.5  + $JP\[F-QS. ,=DIIIG6%#$4<'2;@C}|}|}|}~}~}~~}~~~}~}~}~}~}~뀃~}|}||}~}~~}~~}~}~~~}}}~~~}||}}}|}}~}~}~}~}|}|}~}~~~~~~~~~}}}~~}}~~}}~}}~~~~~~}}||}}}~~~~ ~}|}|}|}~~~}~}~}~}|}}|}~}~}~}~}~}|}}~~~~ ~~~~~~~~~~}|}~~}}~}|}|}|{|}|}|||}}|}|}|} ϝӆīҗܷ͚߱ώή⋈ѬцЬꈅ鿬ζƥ蒝b߅؀ԿĴ²) + +   + + j5(>D_//,Ӻ0 $-ԗvO1WϠݻúa<٩ʕ۴͝~!1B/򖸢높̓碊֫ɲz~ӭ𰆝K'.Ǻϔڨʚ㣝xK +     ! !""!!!"""!!"##"!""#$$$###$##$#$$%$$$%$#$&&&'%%%&%%&&''&'&'''('&&'&'((('''(')()()*)))*()+*))))**+++)*,++*0iɭ˼!Ȩmļþº^)$#"!"""#$%&#%&%$%%%&''(('''()())***)*+,-...//00123234566543434455546899::=??BDDEFGGJL&''())('('&&')+,,-.1348728BB/D0*5)  6B3)=:H[:.-*365:>OTT73SUB6 $$,=1@)(5P`$,.E=2163,9@E-OC0>HW4/)+*=568+M?0-.4PA31157B*$#'/)C=3/--+-..7JKIJKNENFBI:ATRSRSSTSRTTSSTTUTTSTSSTUTUTUTTUTUTTUUUVUTUUTUUUVUUVUVWUUVVUVWWVWVWWVVVWWVVWWWVVWVWWVVVWVWVVWWXWVVWXXVXWXWXWWX WWXWVWXWVWXXWXWVWVWXWWXYWVWVWVWVVWXWWXWXW VWVWVVVXXXWVWVVWWVVVUWWVVUVVUVUV UUVUVVVUVUVUVUVUUTTVUUUTUTTTUTTTSTUSSTSTSTSSTS!TTSSTSSRSSRRSRRSSTTTSRSRSQRRSSRSSRSRSRSSRRRQSRSSRSSSRRRTTRSRSSSRSRSRSSSRRSTSSTSRRSRSRSSSRRRSSSR SRRRSRSSRRQRSSRQQRQ +PQLWQ PPPQPQPPPQPOPOPPOI:3/WFJMOYUOLb^Z\4>==?A==;652dd34a]_[b]Y\\gq~HAUjQ@CEHSTJCBDRTNKHIHfEC~tjkxzvzQ;>?=>==>>=?>?@ABCFHIMNOQTWZacijknmnnlkjjhcb`^[YVTXWRQPNJHHJKJLLPPMVVSUUTVc]YZ^[ZUZZWVUTUTWZ]`dib_d^degilptup>8BLMNNNOOOP QQQRRRTSST UVVVUUVVWXXXWXXYYYZ[[\]^^__`_`aab4cbcccdegfffgghhghhiiijjjkmlmnoqrssuuvxz|||}BBCCEEGFHJLMNPRSUWZ]`cfkqtw{||{{|ſls凒ʾɵȸ}wusѾxsu|Ԩvͯ|ó}x¿|xulnmnĽef_`dd`^]ZYXVNMMONMNKNJECCEMOQRDDDBB@@xghomlqvjc`]^`gb[\cegnomgaeec^^dd\\[ZXUTXUSRXZVSTRORNU_`b`_^[\]e\FuxMPPRPPPQMLNNNPRSTVSRONKHHHDDEB@BFHHGGC;89:;>?=:;=><;;===?BB@@@B@@?;<=<<::36;:978744325678754666454554344426873452257:7:;?;6312///03/,078.-434<65674-356=4/R>>B;16<:#*,(2486389;9833:;>?7;5/.30--.1/.,0::734+4<53994793-3678211//31+&+74//,'&. ;787;80-/+%-9" "'5(.,/"):($!38:988534/38@>==4,3845;82,$=;@; #%*(#"!#&)&(&$&&$!#! "'.11+.+*),!D;v;ob8ABB@>>;:<=@H;A>>754dR>D875'HZKPQXWK>>9K-*ONHD=BCC=BFIE=><<<=79900RPK?"*KPKHB7>>74C5257>`:74cZ.19@69Z1UA9HIFJGPFJAcI>Y<%+NT7(>C21G4,,AI4bc$27GH?MILB(#4B=3J2]R2B5PL66:3UO4>8,;NN779j\6:7bD9M'1-28>>?:530*#++.*,FMLLJXA9B?W0A58=4B=/_RYK?EE-.1__^]XYRFIKG,,RKBEL9#(Lfih`75WXO6$)TYT`__U386;EM>*CIMKMMNMN5  +8AHLMD. -DB) $3'>I2 ;. ! #  +&,>  -;9("4:.$  +$+1 *" %**3-+3<" !/#-$"%"-/../4085-25,-9DGINNJG[VPP-4<62/3343302422/+*(OP(*OMNPWSSXYciwA=XjK9<>ANOD=>F[\SPLJHEA~wtw{y~y@1224654755889;<>>ABFIJMRY[_eiptx}~zxtrokf_ZVYWQOMKHGFGFGHHKKEKLLORQP^ZVVWTUTXXSRRRSRRPPQRRSTURQZYadfhkouz^€ᄎzvv{ƿŶ⦙|pc|uǻ~{¸}wysuwuquqonimllkiddgee`\ZVV[[[ZNLJHGDEyz||~rklqnonkhde`a^`bbYVUSSOQLKLQTPMPNLNIQ[]^^_^\_`e\JVWVTQPQRMKMZMLMMNQUQQMLHCB?9:<;;=6.,,+-/20,,-.-,,..03456:9887::<<6775311,/310110..,-...--,+,--,--/0010320+*(&%&''$##&&  " " $''%&$)$$$%'-06,'@-.3(  %'++(*(*('$$)(*,&-,'#$" !# $$" !#(""!!#         $# ! 1..) + 7l0,.) +    + + +  + + + +    +     + + +   + +      + :72:(>(2%)"%INPPNPKADE>"?=254 7OXWR&-FG<"7ADLMMB%"!"-8*"6=?}|}~}~}~}~}~}~}~}ꀆ +~~~}~~|}~||~}~~}}~~~}}~}}~}~}~}|}}}|}}}}}|}|}}}~}~~~}}|}||}~}}~ ~~~~~}~}}~}|}~~~}~~}}}~~}}}~}}}~耂~}|}||}}|}|}~큺~}~}~}|}}|}~}~}|}|}|}~~~~~~~} ~~~~ +~~}|}~~}~~}}~~}|}|}{|}|}~}||}|}|}}|}|} ݲܭê갛̛֛裾▒ноΩƈӷͯ円ӹĵԴxݻꔏƿـϾȷ~  +Вiv^Fk¨`ϗόЁz11&iXL[vbƨ邳ݼmɋn1"<ຈأɺحЮջܧr@D]7...v퐻ꫩߕ7 (" + + !   !!""! !""" !""!!#"""# +""!#""!"""#$#R$$#$#$$$#$%%''&%%&&%&&'''&&&)((''&()('''('''&''(('(('())()*)))*))*)()))+*+,+,+,U¥Ǽ݆Żɤný»>( "!!! !"#"##$###$$%$%$%&&%%& '(''((')(**+*---.-///01110/012112135666544565776678:;;:;<>?@CCFGGHIIJJL%%&&'&''%&''(()*,+,./248;ACDDDGHFFGJR[iw}||^o者Ȁp}fhw̡q\vlcadipux|yqf]OEBdxھ¾郀θˢჍǀþ¿½ƼDZצžϷȳǾͰ̷Ԗý¯ƽҲ脑¼ιŮĮ¾߁ԃݜƟˣǢůıȻǾ颐Ȭ˶竀ţ܏ҮÝʽ灈ڢŝಔϻȠѐ߈Ş军לٺǓލǸĥɨʍۼؤĵ晆ް倐ƿɹDѦ𒀠͸̝ſՍњæʽˣY[Z\_gZ62**,5&%ATS[YXOIF1$(IX[K= 1R*),/KV^Y& $REHE!"13,.BF8""41/:,#'H@EI.7*Y3) &+/// L@Q929KT>+- (&,<,<6'/'7V#{"(6@8/-6903G@JFG2CFUOPWRH@?CD;;RRSSRSSTSTTSUTUSSSTTUUUTUSTTUSTUUTUTVUUVUVUVUVVVUUUVVWVUVWWWVVVWVWVWXWVVWWVXWVWWXWVWYWWVXXXW VWVWWXWWXXXWXWXWXWXWXXWWXXYXYXWYXWWXXWWXWWWVWYXWXXWXWWXXXWUXWXXXWXXWWVXYXWXXW XWWWXXWWXWXWWVWXWVVWVVWWVWWWXWWVWWVWVUVUVWWVVVUVVUWVU-VVTUUUVUUTUVUUSSSTUUUTTTSTSTTSTSRSSSTUSTSTSSRSRTSTTSTTSRSRRSRSR SSSRSSRQQSSTSRSRSTSTSSRRTTSSSTTSSRSRSSSTSTTSRS TTSSTSRSRS(RSRSSRSSRSRRRSSSRRRSQSRQQSQى|QPPOQQPQQPQPON>>nvηnIC]^\P`mn}yrd{qbjnj`bIkJSC>TJTtqef7+QgU$:dUP9@<5nAFpSB4+mFjxAyq\ĖeuxqeÍghŦɰѐ+āzY{|p\ٲdGLKJKIIIJJIJJJIJKJJJIIJIJI2JJIJJICE@BKKJJwv͕_fb{L_rq:ZSEFNbheKJKJKJJKKJJKJKKJKJKLKKKLKKKLKKLJKLLKKKLKLKLKLLKLMMLM,LLMLMMLKLMLMMMNMMLMMMLMMLLMMNNMLMNMNMMNNNLNMNM NLMMNMMMLMNMMMNM NMMMNNNMLMNMMMNMNMLMMNMNONMNOONONNOONONPOoNPQPOOPOPOOPPPOQPQQQRRRQQPQSQQRSRSRRSSSRSSTSTTSTUTUUUVTUUVUTUUUVUWWVWWVWWVWWXWXXWXWWXXYXXXYYYZZXYZYZZ[[ZZZ[[[ZZ[\\\]\\\]^^]\\]]]^^]]^^_9``^`^`^`aabbba```aaababbbccbdcddcdecdeddfeeeddeefgfefgggfghhghhhijkkjkiklnnmm67m67lm7oo77nn7878op8787pqr|ZTkpH>I?:2,QKNMMWOSPY\Z`f3BKEH1;A??=>???=:9763fgd^_]`_\W\dovIGPdRFACJMWN:;UPMJKIFFypru|z|c>DG>A<<A??>@A>><:;<:;992478656424334468525564142343232325785667;9:57<;D@>>=>@9;83601-322/*-/170-34;=836;0.475;44O=5/6736 *-+*,633367:77627<@?:263/232-//2..*,4644683@?;=41771*08874..-/2(&-(-/+-!,:781.45:8/..#$%-6"!$$!'8*0,+#$*4.#!)668744123464<==52.+$#"(*6:!"'%"''##')&&$#!#!" # !(+'*'))#8/587#+--23.+*$&&###&!$++% ""!##$(/)%%#"# '5.*"%!#%##!!0"%# ! !"(! ""! ",#"""$#!##"# #&"##!!#$ !!""''$"$!"!!".1)lL4>3q?b=1CDto;=C.:@5]~ohd8L&!314'K;:.>MPSQb34K,L6/SXP5;PHYYVRTUNMPJIH>GBL>=:AAGJ@+4X7Wi_JTVVNFD8EDAEHLGIJK.D_@-8KK/AIGIE7:?4;6>2Y1TJTAD-5=*RA4_JEJG=?2.+,SUF@EH@FEDAHA5:9:772/:43XUPB#+LMIE298?E1D58.D>7K6J?BPW02XK1IJ-R6@3+#-X='G=27BI5/MZAF$%-9QLJ65"*5P1@QGKSN7>K;9_\P0:50*MK9TVMLLb8`7AK8QP92;;@BAB@?>><7+#((,((ENPNLK366@.:0365662TIXS?BBC5H@AR_2H@8R<.ZQBU73^K;k>XKNdJPIILKKNKMG@F@C>ACK=@IECEDFFJIKIGHIL@3E&,Rbi\)::CMMC<.EJ:&"=B?EH71&( -..F\WNMJD2)BDA>7.C#3@>1efr_jeYVTUH[^`\35EBAZ_]Z[W;+4]#H:(2=>\WYT^cXMHF?.2S)RGQ1- )5_ce`Y,@JPUB#?][\acc2&A79;GF4?EIKMLLKRD$! (=CIGE>60 (:A5%  01=F?9- /( + + "$  -$%&9  &)5)#"0;,  +$&$#:| &"$1*1/2 -6;&."#)."$2"!$--301+,56633*,59IFINHB>>DPׄ1ބ/߄=҄Հڀ̛bw{Ν瑩|oSB-MEJ,$%",!)v涹ÄȅȄwÅɄ8م[薈M?EISI89]UPLJGDDztv|~rP4794966689::<<>AAFIIMRU\`behmqtvyxzyxwqsmgc_[WSLKJIEFGDBBCBCEOGIJEBIJMMOMSZVTPQRRQVTORRMOMNNOOQNMRNNUUZ\`cehmnx̄̀~~}wx̾Ľx}vngvkļzxùvyv{vusvqmhllmifbdbbga][WW[Za`QLIPFx~}yy}~|nlrsorqronmkfg__hh_]ZSSPRLLNQSIOOMLMHUV_b^]ZZZ\bSTSSRONLLIJMKILKLOQPPNLHDDA==<;::>=<8/+.-26642/..0.01376648664687:85552/..)+-,-.0.,.,,-,.0.,,--++-+-///1022410-,)'(&%""#"'%! !#!$%' #%(*'#$$+105,(:)#  )&)*+**()&"&+,,)#),&$"# # " #&!++')!! ! ! +   +   ! !!&(  + -*.-(    + + +   +  + +     +  +  +  + + +    + + + 0&$!F'=&!#N(GF$''!%4F?<:!+)  +*,+8R'&&-)(!,+(&')$$%"%$"'!$"'* -,61%,+,($"$! $%'$%$& 1  # *,#)",(3($#$%   ()!   '"$&)($#&$$-&#%!.&(!$"/'#!!"*!%$$(% %1.&" *,)))/-!$(&(1689;76751(,6<:40%"2,>=.230 &!")23*(.,(0#"?'$?%6('63969<;;?>A;7<9<8;=C58?;9<<;<@@AA>= !GRVRI19??) &AELQTU("$/1%49=}|}}|||}|}|}|}~~}~}~}}}~~}|}~}~}~}~~~}~}~}|}~}~~~}~~~}~~~}~~~~}| +}}~{|}~}}}~}}~}}}|}||}}}|}~~}~}}~~~~~~}~~}~}}}}~~~~}}~}~~|}~} ~~~}}߀~}|}|}|}|}~~}~~}}~}~}|}}|}~}~}|}|}|}~~~~~~~}~~~}~}~~}~~ +~~~~~~}|}}|}|}|{}|}|||}|||}}}|}|}|} 买ҪҬ™ּضͲㇻۯ̒øҵ٤Ѿٗͅ鈂Ģķݽȵ[ּ珎Ͽ䋌?  +  C|w)*' xӉȝdžꠒ磴潿ʎ楰SӒb"..f縄њˌ̠Ղ!Â^謘?UƋG5/+61#6t㍮뫓ΥҴ΀ܺ-!6(A#      !   !  ! !!! !""! !"""##"##"##$#""##""##"#$$#"$$#$%$##$$%%$$$%&%%%&%&&&$''%&'&&'&('&'&'('('''()('(()(&''))**)*+**))(())+++*)*'%;t뇯þƻźª̮d¿½ƼĿL" !! "###$#$$$%$%'%$%&'''('''()* ))*+.--,--.//00//0/12211333455565787888:;<;;=>?ACEEGFGHHIGI$#%%%&''(()()*+,/149;?BA@?>?AACGOZgr}}xspqtvz{~Ubr׽ԀmvҜ|yy~|cxoe\UVX]dmpnng\SzLټȽǿ¾퓩Ưłűҧľ¸ѹ¦쑤ɽȸȿϽʤƙзǼɶξǽ³ůįȿȩǖϙǺƞĻơžſȎӓǵ򁁅űξϷׇȆ¨͵㪣٣򹚂𡥄πƥŀ¤Аسޕߵ͸缾ˉވЈęۡȀƥѮƠӿɩȦͤ1ó򽂼߿󹠫ЊлS^[ZX_aD2>463'GTUYXRNNG,!>NZUGI5GY623.?928U/M;/05EE;5/00>0,+)HY0773.()*,-7GHGQRC?CFFEC=;DAKPXPZPFACFC2OSSTUTTUUUTTUUTTUTUVUTUUUTVUUVUUVVUVVUVWVVVWVWVW XWWWVVWWWXVVVWXXWXXWX@YXXWXXYXXWWXXXYXYXXYYYXXXWWXWXYYXXWXYXYXXYYYXXYYXWYXYXYXXYXYXXYYXYXWXYXWXWXXYWXXYXXYXXXWYWXWXWWXXWWXXXYWWXWXWWXXWWVVVWXWVWVVWVUV TUVVUVVVUVUVUVUVUV UUUTUUTTTUUUTST +UTSTTTSUTTSTTSSTTSTSTTSSSTTSTSTSTTTSTST STTSSSTSTTSTSTSTTTSSTSTSSTTSTTSRTTTSSRRSTRSSSRSRSRRSNuċTRWUTRRQRRRQRRRQQQPQQPOPPOQ;G{ĊΓZTfm}NSUNVj^|pufeGiW^وd?`EgLMjrWM8UKa,`mrf>II7FZ<0=L=E.KnC_XcgvzIA^~}w˗~qrɘuZn__i憼|D>@?>>?@ABBEEFIMNOQSWWZ\^bdcdddbd`^`^]ZWUQNMMLKNLKJJJHHJLJHLMMLKVQQPP2P[]VSXWWTWWURUXVRQPRTWWZ[ZZXXX]\]^bhjllolqKMMNNOOOP +QQQPQRRSTTU +VVVWVWWWYXZ [[[\\]\]^^^_`a``abcdccceefffghhijjjk"lmooopqrutttuwyy{|}~ABBCCEFFHHHI JLMORTX[^bdfhjikks{o|ȷuw~zê{ƽ}wpkŽ{vqnsngeciia^\XVUUSOPOOOMKMJDAMURKOGDFCCLM{rojopwvpljb[ZTRRUY:qhedfmoqupg^dlmece__[YW\[UVV\XNOTOXXW[^[YZY]bU{QPOLMMNOKIIIEIMNQPPPOPMIIIEEFB@=AED>:;=<>>:<<:?@=?>?@BB>?<;==;;8624:7455644/`334641343213453322342597699<=@>:ABEKEA:73863:?A2,053250/004-*48<@;498-4445884H>/-032 ',,.+'/423023869:38<==<7;60223-,.42/-.58878:/0.+60.55.-1764/+-++-',480)+5>0.0/3:>;<71+0,+%&&+8<" !&4),))" '%, % *,78:72347626;98649:+  !"$,03($(&('#'%#)+)$"!#$&"! $-*.(*+++( >21<:!{ #'.+(2)$(%".(!!'&"-42/,($###%/)##!!!!)($&%& $"4!$)($ "(+##')(-#!!$!!% " !"# $#"%  $#%%#" #!'&&'*%!" %dc_5V.y?PD&3otrfo:iF4M-Gddde4]@c=9?FO>)95("+KLLK@698=<@;;8514/0,.+76943=K\YICLX7N:@G:.\F)B:'+*`BL0:DHUK<4`=-BD-??]ROIEA34+;><3JGTFWC,H?4*O/[632,FI2<;R=PL\VKP]\43i@>976798===>==6-.**)+=KNS22O;>FWSY2/274O@KUE=AUdFBFOb=.HY]O.P/8AR*/TS=<6KZ9QRLGMOJJJMICAC@B@FMJ8DFFFEFGKMKKGGJIH?;9:*9<<4O6>AIJD<6-I@3#*G@GH?6U1 ,.,:[WRQOH@i-@GE@;6M%B80G\dr\^fb[UYO\f]aM56:6>T^`\R@.?3B&9>(A$QPP.LaZVMFF3+9MKME.0;"Ha`]]I<4Q]Y9)M]^^^ZQ9;54: 53E8kHX?Ow',((>--Bݷԕ2Ɇ1Ȅ +Ʌƀր)ۢwY9E53,FHCHMKLLLHQX[]\Y1?/PSf<86468884/2.+XYZWVY[[[\Y^fooKlbC?=?DRFIm\UOKIFEEzttx~cV545456578999;==<<>>@ACCGGE@?IIJJMNVUQNOOMLPNMLNPOLKMNNOMMPNLPQTX[`dgkpt񦩪ꈙxĴĿrqiƻkztnȀĿ~}y{x{{xtqnmjlkigedeedgc]Z]b]Y\UTUPLRS~z~zvuolhdb:sstqrxzyxnjejpogdb[YTRMRRPQPSOJMQNXYY]_YWXX\`RWTSOOMNPNKKGAFHIKLMNMMIFFC>@A<;79<:1+04355110.013443120356546677897;8765.+))'')'),-,+-*V-,.0-*+,+)),-/..///0/11,+,'()+*&(((,&!#&"!!#'&%!&)+*'(#(.//0,(2+")'(()(*'('"(+*))'--%$"# $ #$# "'##!$     +  + ! " "  -*-.'W      + +  + +       +  + + + + + + + +   + + /-0,K&.)?BD?D%B(+'869::*6 "& , 07/2,5;:3F(*&'&,("  '*+)'$% ! *$ 546"0+", %,-&&),.,,#-')%&''$"'%")& &'$ !&#) "!(!+&&%!".-&!%.)$ /&%2"%"0'(#-"# %&* .""&+ *%0(-,%&..5#(*+,.00334545,$!(58;"0""'3,1,'6?3.1;>$$%(6 -32$("&-!83')&17#7<;8;=:;<@=98;8:8>C?/;=<<<;@@=742/#254,<04'2?=?4!3ORNO6+ 6AB!3CKNNM?#!#/.&6?}|}|}|}|}}~~}~}~}~~}~}|}~}~}~}}~}~~}}|}||}}~}~}~}}{| }}}~}}~}}~~~~}|~|}| }~~~}~~}}}~}~}|}~~}~~~~~}}~}~ |}}}~}}}~~~~}}|}~}|}}~}~~ဆ}|}|}|}|}|}|}~~}~~}}~}~}|}|}|}~}~}~}~}|}|} ~~~~~~~ ~~}}~}~~~~}~~~~~}~ +~~~~~}|}|}||{|}|}|}||}}}|}|}|}||} Ш㮠ɏܥ¾§ڣ̉Ͽ۳ͷǝƐӆȞ߂ҢۢZĿк與ꉀɾȲ&!   + + +,ʔdm"+oŹݳzR尅閷ɟΐ􅐅s"(1S$Ӹޣӆ򻂗ӣڇåŽӊ8;04ZVEYaqի٣ٓv7e;$! +  !   !! !#""!!"!"!! !#"##"!"#$"!""#$#$%$%#$$%$#$$%%%&$%%&'&%&%&'''&%''&&%&'(((*)))()'(''(*)((()++)()**))#-:Qŀꁇ¾چڿú­dŽҘ& !"#"!"!##$%$#$$%$$%%&%%&&'&'()(())(((**+*+--,-+...0/./0/11233434655655665798::9:;<<;=>@@CCEF###$$%%&&'&'''((*+,.138;=>==:77:>@EMXdnty|zrhgginrrusuyZhr˳wvuםrigmvu{l~|vog^SNJINV^cghiάռ횥ĺǧԀݼ⾍ÿĿü¯μ¸Ǵο戮؏ϽʾԾżڨ𧸳ڱĻ񒍑튡ʿʷȯƱ%¿­ľƊՁڪҽ򞣓ߎ乫ـϽĺѳǍʅ­俯݊ǰƧŸąֵ̈ᣝ􃓌ʽǺ獡ΌùƸؾĹɪݗą뉤臎ɽƼأśb͗ŭŎ᪴Ք㹼櫠矲пҲSZ^ZY[\S+AV09#+GUYXUQPLE<,FQXCCN/'R'24HJVZG3,]8&P@!")72%478$'1&+B* / -F,;R.E'Sc0 "&*),+1QI.E3* '.919;11'2RV"k &(/-'(323>FNNBC6@G_416]?34@0-H623:Q99?QkK~>sK7SA."d#9cRQ_RtMYGP`t_:?@>=::ogbdd]][[^Z[^dgswOXkLNKBKST]XRMOMJHyywVcPG@==?>??>AACDCEGJKKLPQRRTUTVXWXWTWVSQRPPNKJHGEGGHHJHHHGFHIIFIHLGLVQONNNTXSQSV*WTWWVUW[ZTWWUSTYZ]_f\Y\`_adhnoonPZELMMNPOOPQQPQPQRSTUTTW VXYXXYZ[\[[\ ^^]]^^___`__`_`aaacbdcdefgijijjjlmnmnooppqstttsuvyyz{|}AABBCDFFGJIJIIIJLLOPSWZ^_abccbcdffjp|tм惓Į}}׵̻|Ѷ|uný}ytprkkgkic_^\XXUURNLNOQMIHGHJSTW^\LBCyv~uwurppnlxn_WURZ[ab;skkmicgmnpdbeijdcg_`]ZZ3\\[ZZVMKOMSYWUW^[\]ch_LORSSQPPQMLNHAINMOOOPOQNHGHDCCB@@CE@;@A>==?;?A?ABBCBA>3???=@>;><=9;<;54848138;7522`_bc46400231033442328?<:>=<>BEAHGIG@933455;HD<3+17/0/..-171+49@@82:604629:;O3+/1-4$*.-..'*4415444649826?@@<:87354/2+(+: >!""$2,+')$&+#) !$(..68:4:@77404/+((#9C:"!!$*% &(*$$!&&'%&+/!!&%" !#"#% +*,,'<76$F!!2$&&' (*" %"-4302)).(%$,)#!/1"!%-%"# "# > *" $&'#  %  %#! %! #&)-.,./ !!"&! $$%$# "(&'&&'# "[4020@lV+#Wzo=o96^>2>D5Yshd<:K>d>>E-2AnUXcg8d]2Y=518;T:D=8IHI26fVJT51FD:PRRTWA7:;'493.1485@I??R8CT+OKPH=BJPH'03.6/WPHTcIJ!MFOUDBE5<-5=J=4L7\KL=<+3[<#-(-XF3QR`.9;3.RN;F)04-MA>976E@9;330-2+6335*F7IO17:B[29-33AMH2ATNNLEK9A:5526<=;:;;=IK8@8S5H_5V2402/_F+RJAADThFEHIGEGIOMLKLMOB;<@R227397AAHJE=6]AID'3?@DGA3,>3Q-2VWWUPNH;?IFC>8.D%_9(;>clkO`aa[]RXeed]I:EEFSZ^^RD0G_2',@4Z6GVR- ELXH=B@;:JNGF&3$,V_``Z];&LWR- 0S]`_UW)181,?KDCA>>:1$2;.157 .2@F3 <2#   + %!24@ !1&. "$%54 +$-47-0)5>N&!'D($-#2!%#$(*152"+--02/*(03@GOFRF?@HMhހԄրӘv]?8CPd˪Ƴ/#-4+4:3.G[fL).-ZWC++3$)" 2/X&<*_m5O3,)N0JMՑۣӺlx;/ #! $ 2+ "&(4%Ck',:L]h+&;xd0L?EڄŎzrEǀz3C,#!+1.!Įπɀ/=ڒf_mP@7:03.SLRMMQLLLSZZ]UY[>()25'($2%</4*94/14A@#&%9%-.'(3(259<(+$% <=:=?;;9;;;3869:>>AD6>:>>::<@ECDCEFC9588E-,1.21:9-$- 9#CDFHFB<-277871%/".7Ub\DVWYQTFLTSTL:0967DKPQI<+AQ*&4,H*8EC7@PB798+.>B=: BOQOKF!2?98DOOGJ#&4)0>}|}|}|}|}|||}}~~} ~}}~}~}}}||} ~~}}~}}}|}~}~}~}~}~}~}||}}~}}~~~}|}~||}~~}~~}}}{|}}}|}}||}}}|}}~ ~|~~}~} |||}}|}~}|}~~~ ~}}~~~~~||}|}}}~}|}~~~}}}||}}}|}|}}|}}|}||}}}}}}|~؀~}|}|}|}|}|}|}|}~~}~~}}}~}~}~}|}|}|}~}~}~}~}|}|}|}|}}~~~~~~~~~ +~~~}}~}~~} ~~~~~~~}~~ ~~}}}~}|}|}|{{|}|}|||}|}|}}}||}|}|} ڥ橿挦ڤÅձˍسؼղ܍֋ӜѦځҧ⓵Ӿļaǵȷ䆆½˽ñ/       %㧧ve#$੷gܑԼË󴝭z2A}7,'e˷䃡ߥ뱸šř܁éߧ¥?-)<* D+'T2M@fC.' #(NG5ďuڼaבU17  !  ! !!! !! ""!!##"! !"'#""!###$$#"""$"#$###$%%%$%%$$$%$%$#%%%#$)%&%%&%%&&'%%&&'(('&&'(((''&'('&'&('&'((('('(')))))'#F拰򁃆ô􀀁ݽzʾĻ?%!"$#"##""##$$$#$$%&'()))(()*'++*,,,...---/..00//0123465666575778668:9;;===>@?@ACECCEFF#$%&%%%&'(+-/13668:9765349?FNV_filmlgb]abcgjklnow_ktyӬ{ڣ~i`]agiknu~zorqllibXQICBEIQXcˑ׷}xzӀιǾ艚μͯʀɲ߼ҹΕ¸ǾǸǽ¸ƾ׶ǽÿ؀ĿžǾͯ΃ڸƧ則つ䌞ȼʸۼѝĺތ҄Ƚ҃́ߡټ܀зاƳߎ˨܀ֱƨ֭DZɾ̞ờʣ܃̄ҺǦٯ̌ȇƛդ罛ı⠉򠥮ǎαڽȵʏ􋇄볢ɿ¼؊ꈛᆎߏź¹½}ώŰӾ౲Ƨ󌳩ѬIJ՟晩̴뭀篫ûXT_YYZWW2:`S!)9'KYXUQJQZ3.ESIHND"NN"25AFEH6 QL@S0%1;)$/1>'&$-B'&7%(+%0:JOK/E!H_N!## &'0NK.D51%#&-=0<<3)'4Q]+ %)&'/223ABNYO>3GKb647[G95K/U8022;F69;.3="%)*A@G//2+,*(*/8JLLUWF@C@?CB;:=@@KXXTRI?BGE9]UTTTUUTVUVVUVUUUTVVUUVVUVUUVUVWWVVWVUVWVWVWVWXWWVXXXWWXWYXWWXYXWXWYYXXXYX YXYXXYXYYXXYXYYYZZXXYYYZZYZYYYXYZYZZXXYZYYZYXXXYZYZYYZYZYZYYX[Y XXYYYZYZYYYZY +XYYYXYYXZZYXY XXXYXXYXXYXWXXYYXWX WXWXXXWXXWVW VWVVWWWVVUVWVWWWVUVVWVVVUUVVVUUTUTUVUTUT UTUVTUUTTUTTSTUTTSTUTTSSTUTUVUTSTUUTUTUTUTUTTTUUTUTTTUUTTTSUVUTUTUTTUTUUTSTSTSSSTTTSSTTTSSP츥TQPRRSQRRSSRSQQRQQQPPQ[^ޏuXqj}Pe`aq}hpqV|V`Z`Oorjaiong_9E<11MCevmqmO{vNEJMLN}vOKKWB5:7e`K3k?gFX=QKb]t~rp}cu{]P]ZTW`fXblULMh5KTJJKKLKKLLKJJJKGjXuOMj`ZgX[I{i}ខ}yvymaszqSszdzj\l@FKKKJLKKKLKLKKKLLLKLKKLLKLKLMKLKKLMLMLLNLMMLMMMLMLNLMLMLMMNMNNMNNMNMNONONNOONON OMMNNMNNMNMNOONNOONONON OONOOONNOOON ONNOONNNONNOPONOOPPOPOOOPRQPPQPQQPQPPQRQRSSRRSSSRSTTSSTUTUVVVUVWVVUVWWWVWVWVXWX +WXXYXYXYYYZ[[[ZZZY[Z[Z[\\[\\]]\]]]\^^]\\^ __^_^^__a``_`@a`aaababaabbabbbabcbabbcbbdecdddeddeeeffeffegffgeggghhggghhihjihijijkjlnllmnnk67m676777o7678887778898tzVḭYTMILwKKDD=A6`YVTSYX[djfmlebh?U\Rhs>@C>=?BA@<;8hchf^][^`ga]fktxnTJMNLNDdWSPNNKH|ywGOM>=<=<===>??@?@ACDEFG.HHIJKLKKJJLIKMLKJIJIGGFCCEEDCEFFEBDDFEEGGMKLPPN,QVSRRVVUVWUWZ]^YZ[WTVZ`gdc\_`bcfilqrnlc>JLMMOPPQPQRQQRQQSSTTUUTVUVWWWXRWXXYZYZ[\[Z[\][\\]]]^^_``__bcbacdeefghhiijkklnmmlnnmnooopqsstutuvyzyz|AACCCDEFGHIHIJLNPTVYZ\^^]\\]^`flt{wȰũǶ|ywy}혈ۼ€Ƽ|̳ztp}{uspnlumonfd²djeb^_]ZYYZVSQOOPIFKOMLQPY[Pzuuvlmqoposzw{uoaVW^hd\Zgnknqxnegneacegklfec[\^]^`]c]\\VNHJLPWXY\_b`]`f\H|sptPTUSRQRRNNNCFKNMPONOOSLFHHDCB@>>@@=AA??@BBCFFCCEED@@<=:=>?>=@?@@@A=@=7;923:9;6/47844362c`b 153/13312434445;>C>>><<;=C>ECBKB62146;;;530.55.2.///580/9:<=84<846868=3B72364D'--0-)%0554944587:836==><8<7///2/./3.,,-2755655<55<96983-197=41/3/*'/;<<:=@<2A6413/++:#!#"$&2,/0)%(5*%! #-./:97> =7433.+&"580/3&"$!"":<69M5:4GDNJQNG7A5=71KB99942799E>?I5MA;"7KKI=?PRG9#3;4&30O@U?7%D*.2-QFFDI=HMCE5@4:.5?D2SNNJ%((6P*/.Z5(F7/'F86<;/'/WOXWG5AKKBJI@6>84,00.J80.S;;?7J2K2LNE)*PUJ@C;A67G@58:=<2799<@BIGGH>*(1@CGSbE946QT31125V:9/MC@CB9=J@O]KHAW2U/:SZ4AKKLOV74PT-RJCIIIJPIHG>ECCGJGJK@FHJLHJGKIKIMKJIDCB>.ac969Y8=ELIB;^CWN)$.DEHC7SD#&=q0JT\XSSN>>IHG@>9E$<4BGVI04=D88BB>:>E  '804:. +6/'/24 4- '3  +  +.."'?1 1'*#! &'' 5< + '(3?:.':CT*&*G7&+8#!,!&"%)+.9<-',++/.'&(.2BMOHIC;47.RLKGGMLMQYV[]XUV3CHEYf688314676210ZUXWROOSTYXV`bjnmL><$;?A4@kUOKHGB?|vut<=<1..0/0y1223358::BFHHJKKLPPOMOMNQQQSUXZTVVTQRSSVUVW]^aekrv|˵넎Ըwh}wplŽ|zz~~xx~}zwuqmjnnjhedhmfbab__a\fg]|qejvyicoywxzzqqvppqsuyysnj^]YVVURYTRPLGFIMSXYY[`_][^d[N}}STSRRPPRLIG@DJMLMKGFFJFAA@<<:87785278656667<:889987622144422545446497//&#-*)%%+//))).-WWV+.+()+*&()***+--//100+)*(+++.((%#'! "#!$#!"""%$#'(())+$ &+*')"*")$)((-)&'(%'&"%**++(1-#!"" $!$#!#$%+#!"   "!""!#&%$ !! **,&   +  %##!/    + +        & +  +    + # +  +  + +     +  + 113-+G<101KJC#=?-(*%799!-3$ 7,$9386413,)$-*1(!"$$###&&$# $4#77(+,(*2+'%%("(*#)((() " &,3,)*$" " #%%" #!! "! !"&("'# $#%!%!!#&,.1,'% #&'&#**#$### $+ $-+/+,& %!("5.&% (&,,.055:779-+/38B)" $.+/"$ :2154(#( )2*7,4' 04(5:;>D(#13#<=7;=<988<;4;9;>>?;>ACFDC@;==8)VT2/4O17BJG?7R5G<%;>B>1J8 * 9ENMHHA13:9973-0%1.:T\`BIZXUTMEQPRUN8:=EGGLHVQA-1N-%,54*6@+)?FLTK$*  *+$:}|}|}||}}}~~}~}~}|} ~~}}~}}}|}~}~}~}~}~~~}~}|}~}~~~}}|}~|{|}~}}~ +~~~~}||}|}~}~~~~}~~}~~}}~}}}|}|}}||} +~~}~~~~~~~~||}||}}|}~}}}{}~}}~~"~~~~~~}~|}|}}}~}~~}}}|}}| +{}|||}}~~Հ~|||}|}|}|}|}|}~큻~}~}}}~}|}|}|}~}~}~}~}||}||}|}|}|}}~~} ~~~~ ~~}}}~~~}~ ~~}}}~~}~~~~~~}~ ~}~~~~}~}||}}}|}|}|||{|}|}|}|}||}}}|}|}|}|}}||}|} úհͼٔ޵ݬɺ᫁ἌΧܻӅ‚؂˲ꆁЭҿ²\ֻȺ釂ž؅ij~. .W{؏֭k-#J펱׺𺠚Ḁ̇̄抛ִ葕E.A 2ո͋،ՕὊ֔ׯ􀀮Ǻ굗qm_E.<+QSP+]~j~=B(52<*Nq댄Ŋڳδ{<,  , +   ! !! @!!!""!!!#"! "!!! !"!!!""!!##"#$##"!#""##"#$%%%$$%$$#%%%$$%%%$$%&%%&%''%%&&(('&%&'&'()'&''&&&'()'''()(')))+H}ʸĵ룽vöĿýߖnL#!!! !""##$$###$$#$$$%&'%%%'('''('(''())(()*+*+,,-.-.///00123455576658667 889:99;<===>?>?ACDCDFH$#GH$%%%&&%'')+-/1223323122347=FMTZ_ba^]ZXVXZ]\]abcfmvcjx·~~޽|zة}dZUU\^aahqso̰oedcfaYTLDA>=?FUٽႀʻѹÿȼ턆ܶƼ͹۰Źܖ¼ŸʦĿʾɺŶȾĀľ퉆ջـͲ˿숖ұůքǺǧơʳ¿»ՊܷҏݿLjƐ햬ܻҷ݀˾̌˽ȿӕ醴ú٫ռӷ鳭䞚ӥϦ틍т홀ԁŸݢӎҷۀ׹ՅĿ÷˟ǬǕѸѣݠ䫭鄑ռɓЗµȾú߭ɗͻ鍳ȳ«ø£Ť̩ŋ߲҅پ􇳻UOX\[ZXXU*Mc528?VRTQW\>0,*>KJTT(1]>(2DLMA#+(C<&"B+#+(-&","!"*7>KE`L47Me= !!,[FX=65#+,;3<=;)*9R_4c!#3&"1.-4=DOXW@:KKb85nVD>@S/Q3-87>;69@3;"#LG@<8000.-**+6D&OT^QDEB=EAA;9:8=OXV]QEBEFA6BTTTUUUTUUVVU VWWVUVVUWWVVWXXWUW!VWVWVXWWXWVXXWVWXWWWXYWWXXZYXXXYYXYXXXYYXYX YY[ZXYYXXYXZZXYYYZYZZYZZZY[ZYZZYXYZZZYZYYZZYYZZZYYZZYXYZ +YZZYYY[YYYZ8[ZZYZZYYZYYXXYYZYYX[[ZZYZXYZXYYZXXZYXYYXYYYZYYYZYYXYYXYXY +XXYYXXYXXYXYWYXWXWXVWYXWWXWVWYWWWVXWWWXXWWVWVWVWVUVUUVU+WUUUVUVUUUSUUTUUSTUUTUVUUVUTTTUUUTUTTUTTUTTUTU +TUVUTUTTUUT,UTTUVUUTTVUTUVUVTUTTTUUTUUUVUUTTTUVUTTVVUUVTUVUVUTUUVUUTUTUUTWTUUTUTUTUUSSSTUρQ[g~WRSQQTSSSQRSSRRRQRRQQN\[y`MO]e\P}W>͖TTPXXvqgI|\rRHK]O)-'IA[g_}TU|:\PUFLLPhw2/NM|@:c8PFR5E&Q,QIE;G3-AXzB]knwۊիq_{hN5nmжf5LKLKKKLLKKKLLKKKLLELf}g`ym`Vhz}UY^IX9AA ūSsLKKKLLJLKKKLMLMLMMNLMLLLMLMLLLMMLMLMLMNMLLNM LNONMONMNNMNOMNNNONOONPONONMONO POOOMNNNONONONONNOOONONNOONNOONPOMO#NONMOONNOPPOPOPOOOPOPOPPPOPNPQPPQQRQRQRSSSRQRSSSRSSTTUTTUSTUTTUVUUVVVWWWVUWVVW +VVWXWVXWXWXYXWXXZZXY [[Z[Z[\][Z\[\\]]]\\]\]]^]\]]]\]_^_```_^_`aa`aaa``abbbabddcbdcdccddeddeegffefegggihhhggfghghhiijjjihjkjjkkjjkjll6ml55j65667nm76n76788778877877888989xpa[UOI<>8d^EQI>B:3ZVU\][^nggijickpIWRAqyGC<=@DB@=;:5fhcgibda`bemlnzRk_DFXLI0,7VUSPLLHFF}yu~}AI:787<788899;<:=;<>?A@A@BDCDDDEEGGEFEGFFFEEDCBAABA@DEC@ABBDEGFFHUQRPMOOPOTVTWWX)YWYZ\[^\[^a`^Y]jib^_`abchooqonTDqLLMNOOONPRRRQSTTUUUVVVWWXWWXWXXWXXYY[Z[ZZ[\]\^^`ba``bbcccedeehigjk$llmmllmnonnpqsstvuuvy{{{}@ACDEEFGHIIJLNPTVWXXYYWWXY[^elsyx~ýƥ||~־}xronrxyڿy˫}yrž|ysporuwrrjd`fd`aa^\\Z[YVSQOMIIPTPLMVUaStz|ynnmqnmz?>|t}jTYhdcSTbdkoiqjhi5mc]^,_ihcc_\b]Z]^kb[^^ZSMIINLY___e_\_eXxszRRRPPNKIHJMMKONLOOMLJJHCB@ABA@;?@BCDDFFEGFBCFCB>>>;A@BAB?;<55=57;=<:41368556dac`1344124333576654334:@C>==<>>AB@GHAB;985:;:885?4101-/..04;9-.6:=><7?;878869+=63819E #+,'))4873426887<:39?AB:6<301/0--,/,)).04523<7=64<8267/.098:4,+/-+-2>70-?"@?!DC;=<:8<>80:<30+'&(7$"!@$'208.'$-3+" (),96;=;>653/-*'"-.+)*(%$#! :<:97:"#! "$($&&&*-"&,%% /*""'((""")*%"2)&(-+-% &,/*16/'$"!! '# %2)")3/#!! " %%!  %,-+//6(&$&&#%(&*" $,+.*'&(%$/'!*3'""(! "'%"#)&!&e5SHL@l^W/!" gmj_WF^T'>-_im=\-B8/0WM4b4AdUZ^`SQOKKMLJIJLMUQA941GSRJSNTJX6W7I^f4_XFN?LBD<<;;A702Y400822K0.49-DAA<2FO9\.AFJMF>>;@@2IG;<;<8@69<;:75H703KKIEHMO2AY>98L77LV/C6322061;OFSUINK<371576NS13O+&E\%'&/]46,1>IB4CWFL#25$WQTVZ;TGLJLOQHBEFC@>>=6/03+764451Y;%D+IH0,\IC9?./JC91RWEE,/7>BCC@AFE:)5==?DRV4E>:75\5^D:L2PI?ABOCB+H8\=8]3[50MLINX[MU,4ROOLI@WTPGBC>:HHGNKO@DHGDLILGFFKIIHAA==_Xf343?1=@DGI>\R[N4$BLKIE>XB)&N5CVTV[SRBALKFDFA/=>0OƄL؅؆xdZRLB34/cYAF;16,&EBCJLKMYQQSVXSVZ:DD6cg:6./37541..+PRNRRNSLLPT^]akxKiW74C::!)TSOMGGA@C|xt~:?===>?>>><987779=>=<<@ABDHGEAIHJJIJNONSUVTSTVVVXWWYWVZ\YXQQX_adhimvy|h쭫Ӿ섆¥|һwg|ytmĽ~|vy{{ztnmnolidffhba`a_\[bbk_ABxtek}v`arqstr~xol7qpmnqyxsrkbe`\\YbXRVQMHEEFLMZ^\^bZX\aVSRROOKMNLFCEKMKILHBB@AA>>>9857896148;989::<=<98998542016322144656524-(+!'00*((*-01,./YYXR) +,*'(*(&&'(*+--.0-)*+***,-(&$ " !!!" '  !"(%$(*++*+%##&%!!"! ,+.+(,)*'&%(&"&,./))1)"!" #"$"*'*" # ""('#$$"!#&#"#  # *.,++)  +  7  + +  +   /       +  + +  +   +   + +    2)()(?73;JLAA93'81#29<"4(0!)!$,55.5/-0.+)$!&+%"!$"!#)*#*$9!3*.14+,*'&(((%&))-+"%,,',(+$-+&/4-*" )""*0 ! +  "$#)!'#&+#%%--,,32!!  *#' &"&)-%#%#$&(#!"#",)-10)*#(12)#6.#% (-21332493& (*+*/.&$56'!0!<8.33-,%#(#3-/; 5":<;BD>(.#(B@@>;2@==96;63A?=B?:38=;8?;@>=>EB?>9<:8TRW-009,6;AFI=TDI=&/?{A@?:O9 =&5IKMRIE45?<89;7$*($@2Ka]\KRWTSQHTOMTPG9=BJHBQPB42P?7"Z=CDK3KKG&((0+5B6/ADF< 2QOKDFB>8:;)5DFNH(-B2" "+-}|}|}|}|}}~}|}||}}}~~}~}~}~}~}~~~~~~~~~|~~|}~~}}}|||{|{||}~}}~~~}~}~~}~|}||}|||}}~{~~|~}~}~|}~~~~~~~||}||}|}~~~{{|{{{||}}~~~}~~}~~~}}}|~|}}~~~}|||}| +{{{||}}|}ˀ}|}|}|}|}|}|}~~}~}~}~}|}|}|}~}}~}~~~}~~}~}|}|}|}~}}~~~~~~~ ~~~~~~}}~~~}}~~~~}}~~}~~~}~~~~~~}~ }~~~~~}~~~}~}|}|}|||{{|}||}||} +||}|||}}||}|}|} Ʈٰ˄ܻ߿ҤڭɎݚƻٽ܅金ɻZԫʿſȻźͷD  $$M湅Ď**0$);°¯󭩡Μȗ̕߃ю߲H%9zؕƉÈ˱ϥ샗䠆ڶɣڞ’ܢvK`$8'4ː]:;0P,ooRW48딙ᘄɏ`/   =    !!  ! !!!!"""!!!"""!"""!"#"""! ""###"""$#"#$$$%$%%$%& %&'''&&''&,'''&%&&&''('&''&&'(('()(''(*)')(++-Cĺ싣ႀнľ}ĽƸѾľj$! !!!"#"#$$##$$$%$$%&%$%%%&('('''('()*+,-.-.-./0/0112334555678877887888:::<=<<=>>@BDDCDFIH$G$$%&%%'''%&()+,.//0/..-../159?FLRTUWWRNMOTVUVVVWX\]`iw]cg~ywqlpͯ{zwЪyaWPMOSVY˹{gZY[\XVQJC>:8:k־ε鳙Ӽݨߗ뀇öƹǻƻ·Ǽȶʿ̿ϸ񎠰ÿʾʼŽ݁ɭւ۽ŹDzֽ̮ͯöȷԌ̄ʩǽՈŦֿкԫ̾ʽ˾ػ􆅅ǹῊـ˾ӦۗҀؽƵȼ퐶ɘȴ܌ѭ׼ƙՀ򻂏߽ˀķưۓаȱܲҿ愄ȖᨫԻۡҾ󫵝ľ򉕓遄뼝̪ң膦ʻҳĖ²ǀ*ֲֵ⺛ϿGIOY]\ZTWI)NQ)8D!'LUXWV]F/B;9?>NUA%"L['+'3EHJ3&'QGCN"(282&A/( %&P2-%8()#'8==&E-81:]_3/-)$4PX538$+2/2:8:+.9L^=`""$B5-.*87BQYZ??NId97kQD@B_^=3/84=9:??7I(*HI>>50.--.../3AJL+/ZGAACCC;:::8>VY[X_LBAHF>8PUUVUUVVUV UVUVVVWVWVVWVWVWXWXWXXXWXWXYXYXZYX +YZYYXYXXYXYZYYZY ZYXZ[ZZYYZYZYZY[ZZYZYZZYYZZYZ[ZZ[Z [ZZZYZ[[YZYZ[ZZ[ZZYZ[ZZYZZZ[Z[ZY[ZYZ[ZYZZZYXZYYYXZZYYZZZYYZZZYZYXXYYXYXXXYYYZYXYXXXYXYX WXXWWWXWWXXWXW VWWVWVWVWVUVUVUTUVUUUVUVUTTUTTTUTTUUUTUVVVUVUVVUVUVUWVUVUVUUVUVUVVVUVUVVVUUUTUUUVVUUTUVUT%UTTSUUUSpf{ןVQTZ\\RSSRSSSRQQRRGcJP_a_zrm]m`~UkenRIU?{@UislE?1cgc|gwa}kzπnvlws~wSmsn4>LKLKKLLLKLLKKLKJLLCYaˏrem{[b\ց]vVIL?;=>Vy~|WsMLLKMLKLKLLLMLMLMMLLMMNMMLMMMNMMMNMMLM#LMNMLMMMNMNNNOMNMMNMMNNNMNNNMNNMNMMNMONNONONONO NOONNOOONONOPONONOONO PPOOOPPOPOONPO NOONNONOPOOPONOOPONO PPPOPPOPPPQQPQPQP%QQRQQRQQRRSRRQQRRRSRSSRRRSTUTTSTUTTUUTUUVWVUVVWVWWVVVWXWXWXWXWXWXYYXXYYZXYYXYZ[Z[[\\[\[\]\]^]^^]^^^_`_^__`_`_```a`baaabcbbcccbcdccddccdfefeffggfgfgfghiihiijjj5jjkjkljkllk6lmll6567n777p7oq89898998wzlvm[WLC:585\kKWN<@?2\X[[^b_ebaahkcfk@NNL98@@@ABB@A?=76654ikh`aabcfinwyIL^`GDNPJ305FOQQMJJGFEztoz|~y?D6:=74344456778788:<<=@@@ACABCBDEDDBADJBAA@?@?E??BCC@ACCCEEFEBRWRQSSSTRX\YZ][][]]^_a]^^`fh]gie]\]]__ahkkjkrPELMNO1PQPQSSSRSRSTSSUUVUUVWVVVWYWXWWWYXXYZZZ[[\[\\[]^_`abccdefeffggijkkjjjkkklklnoooqsstvvwxz{z}~ABBCDDFFGHGHIJLNPSTTUUTUTSUVY_ekqx|~}{vtuz~puy̷ġyuuvvuʱ}ysmihkԾ󈖣zҭ~}ysmxwurs|}vuvmggc`^_`[]]\ZUTNNQVWUSLPbQSCyw{>@wponpB?t\SZdVTXa^`nwspgfj27h]\[cjlhbacYYXZ^_``^YRMLNTLHU]\^a_chVvpwTTSRSQPQNINJGIJKKJHKLNMHMFCCDB@>>BEFGGGEFECED?BCA@;==7?@>><>E?@?>;T<509:676:911ag77idba_1335652477569:89743567;@;<>8:?@@BICB@:;71;:943672330.1414797,/8;3:4.34%55-"%3H*+,+$'.36532387558749==;639301/.,-.1-,-20452.5;>?3;739801433850.*'&',20<=>C?>ABA795425750)91/+)(+3"#"! $4/5&!#-!1.&#'),.9688;;312.*$#%&%"##!!""A98:669 #!!!$+%(())' #/'$"  #" &(4%#$$%&%!05,('0+#$!-240-(" !'  $$+/&*-'-& " "## !"'*,&%% )& $*"!"" "# $$$'''#%*+%-?,$%%$"&+1)e6[9p>?1VY4)5'Sda`]`_TT^TRJMJQQKQI>>B@9RZPMNKFD[MSSBi=<5[[IID?AB;>@3P140.9=4/RD/.7+=FF0\_E;J6?A=*MG9A@;4;A=<;EA;306699'P/Z=JGDCHHA0;E<65=.0./.1MH0343+TSUQXRM:;88;0C66/I2!2=A@>?B4/08;a9423762NBKKFGD/,MJJI/PA??ED<_19:RGP_NUF-LIJKVP_0\WPPOLSVPPKE@UQOWSRGDVPIFGF;HB5/@JsjmfS\[heUX_\[[T7@GPTIKIH>1Z=8[j:BI8EJJR@-427OKKGAMTcZ$@2,.1+Xc[W]QWXNBHB+1Y[Z]A'1IPE952169@HNKGBD263 $ 4?ECDJ0%$(7<* 5?).2 3) %- + )  %BC #17!#)'',%4A(# ##-:BF21A;M+*WA620CE) $!!%&!*#&##$)+:+''*,/(%&')/IOTPVF==IPos +g܅5ل׀Њ{A CHiJITKIvϹՀֶĕKkV"'/FH7?EȻI<,Wgڃŷڮ7s"9 +:!C%  + #(/#('( ,-HB;@!!(M@/+"%Bcnjɋŋ„L¸鑍wфݶꠑh;<@) (.5(1ƄFɆʀEք߄yo^OME>3+**WjEM?040$CACFLOPSNMMTWRUX3>=<-/5223543221+))()QPNJGHKPUZ`lkBF^\=6<>7#&@OPOJFEBBB}zs85*/0.,))())),+*+,-./135557779:8:===<8;<=;97598<=<>>BCFFHHJGAMPOOPPRUSX[YX\ZZXZZ\Z]XYYZ^[MQWYY]_begfjoqsxτӀĴ|Ţý͸}se~~{xrmfĽ|yx~}tsqongc`a`b`^aZ^o^aQIIDAABA~njs}mikvskrz|ynkh17spnlqxzvoiiaca^\ZZYTPJEEHLHKXZW[]\`cU~USTQPLLNLCIHHIGHID>;:<<69867765G437;>>=<:<<;=;67997320+00.,+-4132300*&+)(+,-)#*Y`22a][XU+++,,*((*($$'**+.0.,,%',((*(($& !"$"!!#  ! "$'&'+))*(+#! "1#*-+)+,*$$#%&$(+++'%.'  !$!#!%**)"  "$&##&&% $ !$""  !".(''&)'  s  +  +  +  +  + +  + + + +    +   + +  +      1.C$99,0#%1+M=;5,*,51$ ?3&)!%',$21./.3/)&&&2.&"&#$%&$",. ,111023,.4,+&'&()&*& !!+1*('&"!/)*+#7 +) %)#.'!(!"$ !&!&'(&)'&$,1..$(.&#!#&,"("'-)$%#$$&&$!'$!-%8$ '$(-00"1/)!=.%$ $$044114%#$: .',+'()9760+"" #' 8'%58.5/9:?=>03 OD@@@>:86>A@AA+<,$6A?A8'Q71TeFJK/!5=3 # #}|}|}|}||}}~~~}~}|}}}||}~}~}~}~}~~~~~ ~}~~~}||} |}}}||}||}(~~}}~~~~~~~~}~}}}~~}|||}}}|||}|~}{}~|~~~}}~~~}}~~}}}|}~~~}|}}~|{|}}~}}~}|}|}}||} +~}~||}}~}|{|}}}|}|}|}|}~~}~}~~~}~}}}~~}~}~}|}||}}|}|}~}~}|}|}}~~~~~~ ~~~~}}}~~~~ ~~}~~~~}}}~}~~}~~}~~~~}~}~}|}}}|}|}}|}||{{{}||}}|} ||}}||}}|}|}|} ٹŏ؉Ήؒ׵ҽۣ߾ӞѸڶ񊑌ݶبرՆ캩к\ꪽ܁⿾҃ƾ꯹߂Ž1    )Nl炫zÕs)dP.'WӋ曗deǿԖ񂫭拢lؔ2=fCƮ˼仯ہÆҘ󷑎50昈ʂ{^h|6Anl}̤틫V) +       !! !!!  ! !!! !"#"!!"""!!"#")!"!""#$###$%$$$#%$#"#$$#$$$#$%$%$$#%%#$&'&''&&&''&''(&')('(('('()'' )*+0ܹƵր¹׽ºð_̬ķԃڶ>)!"#"##$$$#$%%&&%$$$%$& +''&''&&&)()*+-..021/02364555678878899:889::;<;;<>?ACCDCDFHE##$$%$$%')))+*++,,-,+*,-15;BGJMPMMJIGEGKPRRQRSSSVY]gyiymjhcafvƼzsq~Ǭ}aVLv^USSRSQJD>945®}̽ƻ״Ϳýܡ޻ؔ;Ⱥ¹ڪʀȻɼĿýνŵοζ刖ļ¼Ľνξωؾʶȸ̿ǰҽ½ɹʾĸʱΣʏԀ⶟ԾɈǶǬ섄黻ӱͱѯᎀ𳋟ճãҿѶˀɷϿİ쩹ʜ՚КǑǮĿ蘆DzőϹĄԎӲ𽈝Ƹҥ狒жٱɉȥߜşӵ񩤩쩚щǻؖ큄跨tץ«޽Øé󪏝ܾƅçýưןͧNj:FPS[[WSWYC5^@=@!5V[YSWU6-8@72?WN%(/SE.63;>D:+IU.,H9/*9; #D*&$H..)&!4.$&4:(2@-.F9S/+& 6$/,0VP0-:&$+6.3=9:,538P?e"#AC*42?5G/XSC%.8P:851/.,...05>JJP,,LCB?@pnxV{͜`li}swvʇg>LPOnlzVp~XlNcZgH<89;PF_dRBjcVl.VKDw8M4;L1L78060AY~vlf{|xߺi̎unqt̲ỵ9LKLKLLLMLLLKKLLLKLIA??>@@>;5986664e]^]^_`ejqsAGUbTEBHVKBDFLNMIGGEEzokxyvuA:B6@?2332011254668:|<=<<>=>@@A?AABACD?ACDB@@B@>=ABBAADEEFIJIFO\UVYWWXU]^\_a^^_^\\^``_\\\]46eZWYUY[Z]ihfdwW]KLLNMONNOPPPQRRQRSRSSTTUTTTVVVUUVWXVXXXZZZ[Z[\\]]]_`a`abbcbdcde;gfgghiihjijjjijjlkmnnnoqrtuwwyxy|}AABBBDDEFHIIJKMMOORRQPQRUW\cjpuvvvrnlmrv{|ηá}tϼ}xsnjef̦®䁎zf~ywy{{zutolù}ysvt{yuzrllgķca_^^]\_[VTTZ^][ZSLPOADz|@FCsvzuu{@>ui[VYZVU\^_hpvsq745jn]\Z[ca^gemh`_ZUWZZ^^ZSQOSTPNJW^^_bhkR{ujtPSTRSQQQNJNDGGGIGCBDJJIHIECECD@>CHGHGFDEEC@B@@A@CA=<@XSBC=9;@BC?=CZ81:98969604fellef4314425774899>:;97:975567>D><945ACBG(CGDJJ62<;64658734,+3734114,2;89;;7:1+3:63/#84/5:O$'++*).136541255247727<9942:41/00/,-2,../0476447=?6640451/30263,(%""&4B==:>D<>331/11270).3/*)(+6:$?:<"4))&#&,$7.'&*)!%;88977222-( #%#!!"#! !!:<:##"'&'&' '!++(!&"!"$ 10)6:"#!"#$! !#!"+-+&%&'*!")")/30( ! (((#'$#"#0(("##"#%"0"-#%&&"#"%2/"# "$" %!+(+- "&$!#)"!(+/*--*,+# )&#!$1.71`9RO:id^Y`46M<5ee^VJIS[a?NSRV;WC>dN=0?OY207:FHcZ^POX@IRYJMHXO>IBPPO57;&"ICPK?KZY^UTYY\OW]R@4C?AFBK;BRWVFQW`SNMP9SVG65HK8laYGLB:G@AGGWa2FC=;CB-Q676@GA/O+S\B5M9=>E1+J@G=896CA>@FCC7,;(-6PE62)"DHKIB<_0M56U6BD?fW>;36CLG>=TJSWD(.;+L@23S9ZTRKWc8/;=??<=2)',FSA26:1FJ>Q[UWL>RECG8H?<>Ha\<;6QPT1[N\GL&FEH?WaMIOW[^6Z\ZSMGDBJIG?1)<=MPC/MMPJJKIJGFEFA;;3Jai5>R8CH`05W5)-4POOH8I62s;1IDJKPVQWK=FGGEDC=+G&6T9oiibPXZbfVT]][UR>CHQUUD>@4.9Z>=;>w9?DECEA,6-1TZQCHLQfWO73 !@^[TUEZNRW@61'EUZ[T11G=H7 1**5?DKKHEGE+"G' %!  !>CEDH@  %):8;+ ! $-% 08 (  ! # +  !.-8  "83+)'/")'(9, "%'!."@B05F?&(,[A850IN'$!$%&( -!*).-%&$#)*"$(5BQWZ_UF?CMX +1)8F߄7քل߅BJLm8QV\>4Xt՛мٟ]NM5LN/69#B '_s%*#+!4&.*<8>)E_"-GZy(3OXAV-,k>ބϞ)P+$ .   + +5(&'%"32)-2*"#7.HVB19DbD().(BCE`M׼䍾]®p{ii`㮰eMIO0"1 + *!)$ B#Zj鱲Ȅɀ1˄6ք݄+abNC521KE@CW_WII223%HEGHLRQNLNLOVVUW[8?87--15331310.(,*('(%KFHHNKSZaii;@UcP=799;;:99=<9955D:<===>BEFGIKOKGNWSTWSTVS[\[Z[YZYWXYYWWVTVWP()TVY]Z`c__cggmz\W̶ãŸö|w~wndUvvtuxyxtomigŹ~|w}|}|zvxsgd_cecb`^Y__PRJLI|AAztquutnluxrptzs623gokrlhnnrwquplkf^\\ZYVSLHFGIILIVXX[]bdRzQTUSRONNKELEIIHHD=737754543676428>@@?<9<<;9:7767:72./?7**%#',./-.3@*(.,,.,-*'0__fe]Z--+,**,,+(+*&'&(*+.-,,-.../*))&$)'%%"%&(*&%! """!!!###!!" *(')*()""$ %,?"(*,+**(&$##&%#&*))&&/'! ""!! #"#$%&*,*" )$$"'+##&$$#!"!!#!#! &*#  Y  "  + + +    + +     +  + + +      + +  +   + +  +  +  +.'(">953>'/$ >960().4:#+/,/ -#5'!%)/"#5.1))/ ',3))%.($'') +"+)$)-0.**+-/).2+!! #!' ,/-$+/2*''&-.&&&7/* "!"(0% !%&$.&(! " '%)#$ !&.&!/.73$ !"$.)" ')*$"%""%!!"%&( 0#(!!1*+2&"#-*+3$%/0&"1,**'./$00031/",3! (,$/2-//)92/, )#!%23$"'%'5/=0088969>,;>=>B=???=78'DW_1:F26;=AHV)-H'*DHG@/9)"95=AFKIJ@5>=<:984 0*C0_\]WEMENQFHONMHJ6;AEII<89/$,K799>r6=A@=>:$*"$BD>4:?FWG$;'  0NPII8J@CA,$+=HIB %/,9& +}|}|}|}||}}~}~}~}}|}}~}}~}~}~}~}~} ~~}~~~~~}~|} |}~}|}~}}}~~} ~~~~~~~}|}~}}}~|}|}~|~}~~}~|}~}}~~~~~}}}|}~~}||{||~|}}|{{|{|}{|{|||}}}~}{}~|{|{|}|||}}|}|}|}|}|}~}~~~}~}~}~}}}~~~}~}~}|}|}~}|}~}}}~}~}||}}|}|}|}|||}}|} ~~~~~~~~ }}~~}~~~~ ~~~~~~~}~}~}~~}}}~~~}~~}~}~~}{|||}}|}|}}|}||{{{|}|}}|}|}|}|}|}}} ˺ĸݐݹՙ±ݱԧҧ۪ᷳ᳉ʊʥš߅իźҀb޳ՇķӨÿH!  + #0  :g֮_uX?[ie",e藖mWbxgùs(*!Hͩ ͐՛ر来ݜΪОܸޗb. 7 4m|裕홊`dNH҉˯ąޘР:*#       !  ! !! !"!"#"!"!"##"""#"#$'%%$#$#"##$#%%%$$%%$%%$$%$$%%&&&'&'''&%%&,%'(('&&&'''&''(('((()))((())3.@ձ–з퇝¹ɷȾįÿOĺĨM#!!"""#$$%$$$#$%$$%$$$%$%%%$$$%%$$%%&'&&()))*))*,,,--.///0012211223323456567899;988:;<=<>>>?ABCDEC""###$%&()++-,-,++*('())*-04;@DHIHGCAAABCFKMNMLNPQQRX`k~pzeb^\Y[bp~tpkjwǾbUJyzoYNLMNLHC?859uz¼оٵľစٹżüܥǪҔļſɼઍɺɽĻƹƼоοߋüĽͽռļɿҷͻǼî񏘙􀊔Գñвƾ͸½ú¶ƾӽͽೌԟӽ̓檄񇅗ļ¹Ƚѿ˸˜ĽЬ´ƺϻ˳湽ưѶ半ӾنҰ̌֬ʄߓ¿ِǺǚ׋րٕŪԻɒꀌ࿳ǟ杌聛‘鯏֞ȲŞȽҶпʬ׌˝ȿ݄톸ƿìβຼɪìŃ䟴ؼȸ،̾乣̶ޞ(?JR\ZYSOQPF=?%)!$('&I[_W[[-,=EEOJ,OWC*$M\)+?Y' 7?(*23M=M4RJ;KTW44;iRFEQeP81/?;52A>;JI0/86741341/+--RqO6SGA^HPKD4:=S"hTj84->I{~ZF9Ot}lnskku&ÓdH}~]f?RҿmNLLLMLLMKLLKL;DDNެꙡr_׋̏tVqsr`rZj\nuLTFM{{~bQPMLLMNMLMN +ONMMNMMMNMN MMMNNONNONMOMN OOONNONONOONONOONONNOOPOOONOPOPPOOOPPOPOPPOPOPOPOPOPOOPOPOPO NPOOQPOPPPOPOPOPQPQPPOQQQPQQQRQRRQRSQRRRQRRSTSRSRSSTSSRTSTTSSTUTTUVUUUTVUUUVWWXVWVXWWX YXYXZYYZZY ZYYZZYZ[[\[\Z[\[\\] ^]]]\^^^_^*___^_`a``a`_a__aababbbaabcbbbcccbccbddeecbdeeegfghhhghijjiijkk5klk66mlmnkm6mm767898998899988899xNm]eRI?>u]<4ebS`MS@:A411a`\_^X_``\eeabf:IDUL4:<;;;997hcdce]YabfhjwpvOe`J=DKRLHEKLKIDEBCztk{}tpr}?>?A@>AA@@CCAAABA@AAA?=>@LAAACBEDHKKMMOOKPa]]\YZ]_\_^_`^[_a\\\[ZZYXWUegWRSQPWWW`jgd4jrhvLLMNOOPPOQQQPRSSRSTUTU VVVWWWXXWXYZZ[\]^_`abcbbbcddeeeddffgfghihiijijjjkklnmoprrsuvxxxyz{~~BAABBCDFGIJJLLMNMNONMMNNPSUY^chnpqonljijmotvx|ڀ{vvúοyqǿ~|ywtoifg»ѿwgqooqutppqnjg`~vwz}pnvkhhǼǺff^^]]Z]\UY[[]^^YPKCKDAEDxpsngfr??mph[Z[\UX`dajptr;:psun`]Z_febddjeb_^X\Y[b^YUSSWWTSRQZ^^^giTor{PSUTRPQNHDIFGHEFJF@@EIKHCDAC@?;HP:076::8:536mnmp76631546887596:=67;99986657;>8986;?>;BI=C;;=75<<:;;50431,261+3334+3=:==>9>524958.$:<;9>A=:;:;586796:6.,/0/-+)*27A;5;A2,-*$%-@,%+/-,0/6313221.,)'!!(+*##"""$$"'$"$  %$%#('*#$$"!"73"#%5  #+%%&"'.(!'$#+/-)!!).4*($#"'-/((&##! 30!#$'# #%$%"&# !!!""*%'"*)+&!" %%'-*))(" '-' "$&!"%*-4\^I]sd`_^jPF;8G?b\TGJOVaXB/J<7SCN64X93Q1/757=?KL^QPV@`QLLKEMDB?KA<-*56NJTVLFMLFC9:EFWXYROZL7@DABDPLFRXV^QTVjaVL@`(NGFFGIHHYVMB?>CKDB?89,820/71,/22PLNWM035VRXK>8ING@CB?@=999;2g>5E?/PK.;52F0IFEIn^K03D\Y1Y1WAR>RH:6[5314+6;+"(,ZWT12]OLGGDD>>LF5V5G9W/MKJKMMLIEH=7:2$iik?9EZCKIIB0C2>4NZN?MURLAO?--. %'VcXK?UX[]\F+0+OZTND1FF?A>$,&-:DLLJECB>1--  /BJFJI&./6*2<*5B&%01'!6/ * + +) +! 03 MQ/ *@.- %+.7=$)l$0'/$9:0KA,!)%'%#+*'%0)#$" !%.MLS]\bWJCHSs߄܄%"Ҷr;%5AC0GXDadڶϳÌLNQE94ԔӟK<%(85.A=CF-51!!+3<!8Lw[^ͷ +  + &$ . '"1%H-#) %)8;CIyl) #*+[-;I]A']_dzڽ¬Ԡ018YׇӸtnj%,hE-@W{死ʄ+Ȅ"ʄW݄jlTUA937lU93piV_HK507)%%JMNQRKONOOWYYXX0;1>8(/133/21.///+,*PLNOONLRW[cgrhoRiaE7;?B;;@JKJGCCAAyuq~}}~43*4**++)'')(*))*-./1211346897999:>><;;<;<<=>=;99D<>?@?DDILKMNPNKNYXZXTTVZY\YWVWUjUWUWWTTUUURLSWSSWUV^]Z[]_b6X¿؄׀󈗢Ľ;нϛrx{~|xsjaSslmnqsplkkiea\}y|~~z{|zvzvgebaddc`YUOVQLMNxqy@Atvrqyuvps}xuz~v:8nv{worgimomonpjklkcb___XTOLJLLJNMMWXZ[bdS~SUWURPOKC?GFJIECB:106;:6121321-1;???==;==<;;8476641//) !"$')08+(/-00-/++0dhgf0..+*+*+,,*(*&&%"'--..--/000-&()%&%"!%# # $##%%  !"" !)')),()""$"#'/,+.'+N)&#" #$&$(-**+*/&!!"##%$"#"# %($!!  '$#"&)$#$""! "! % !$ #!   + +   + + + R +   + +   + + +    + +   + +  +    + +  +  +,!1E=866C3,$#-%870'),183#&!,"&/+&%1().5***)%)"$*(01*')*&$!#,--)(/&"" !)'#+.,4+-,85+$8*%$%#$#!+)$# ( -+('.$(% "!!!"( %$(.'(&-%")((",.,2*!"(5 (*'(!"&""!"%*("'$10#+"4*%1, ,'),.%1622/,)&&2&'%!* 2324D0(#/01-& 1,#"<"!"!$IFE'(H>?=?><412& 2$6#AA>=@DCB>@735("[^f8H069:6DC?7>, +FUNE8LHKLJ67ED@6'84/3!}|}|}|}||}}~}|}~}~}~}~}~}~}~~}~~} +~~~~~~~}|}~~~} +~~}}~~}}}|~~}~~~~~}}}|}|}}||}}~|~~~}|} ~~~}}}~~~~~~~}|||}~~~}||{{{| ~|||}{|||{|}}}~|}}{{|}|}|||}|||{|~}|{}|}|}|}|}~~}~}~ }~~~}}~~~}~}~}|}|}|}~}|}}|}}}|}|}|} ɀ~~~~~~ ~~~~}}}~~~~~}}}~}~~~}~~~~}}}~~} ~~~}|}|}||}|}|{|}|}|}|}|}||}} ˺ӻśޒݖ˟γڶ͍ذװ⊙̠Ŭôgİܳ՝慌ôĢۃ􄆈Ĺ´ȼ@  *%$mݙűs־ч5!!PXF]S@SPKc)7XZ)7oL~†ćХߚ焧ܸҖNP )(@ɼܼǵ޽ԧ׶х|ʹؙȅc3.2齊|v]HQ׎θٜǁᤘa2'6#       ! +    !"!!"""!""#""#""" !"!!""!!##""$###""$$"$%$% $%$%&%$$%$%&%&'& %&&%&%&')' (''((('))))(*)*0䮉󄞬Ҷ̵⃕ҭ]ºڴ]*!"#$%$$$#$$$#$$#$%%$#$&%&&''('#(***+*,.---/1012113222112111323455567899:78::;<>>@??@ABDBAABCC!"#$$&&)*,-.,,*(((&'')*,049?BDDB><9:=?CDFJKJKJKLPPRZetrxd\ZTQPT^kxyhe`ckzgSG}ppweQJHGECD@<89}vvy{α怒ʽ޹Ʒ׿էǶړȻú̀Ϳ־¿Ķýѹм˷ý񡳾÷Ƕ¸©䗟ϼʶƬͺêŷ照еĵʟՀɰʺճҺ޲Ѿ΃ֽ¿ȿڋĻà钆⣅ݪ׋ΰѲАʲԌɃ䡶ͷߧ̉帢ѪӸϚԽߦʸÏƕ̼郆쁊ѰѸ¸᪭ھƼƨПǦ%֛ˣοÌ(2DS[YXWIHLTI?>M& 8U`YY`O!7RVF:#3PR&%=`*#754I>D"HT?+P@8548N2) N&+(%:8R;$%72-9@o^@(-""*&3(f;"%:/"(4"80.:38F__5Z%1 /90)01HIA;UA;RWh25;gUJHSZL759?A68>=<)*2R>C844673-)//?CEGJ,,&>C=>4+341Le^^a_oWMGLE35XVVVWXXXWVWXWXXXWWXXXWWXXYXYXXXYYWXYYZYYXWXYZZYYZXXYZZYYZYYZZZ[[ZYYZYZ[Z\Y[Z[[ZZ[[[Z[\[\Z[\ZZ[Z\[Z[[Z[Z[#\\\[[\\[]][\]\\Z\]]\\]\]\\]^\\[\\]]\[[\]\\\[\]][[\\\[[\ [[ZZZ[[[\\Z[ +\[[\[[[\\\[Z[[\[[ZZ[\[[Z[[\\\[ZZ[ZYZZ[[[ZZ[[Z[ZZY[Z[ZYYZYZYZYYXYZZYZYXXYXXXYYX YYXXXWWYXXWWVWXW XVWWWVWVXWWVVWXWVWUWVWWVWVWVWWVWWVWWWVWVWWWVVWVVWVVWWVWVVVUWXVVWVVXWVVVUVWWXWVWWVWVVXVWVVVWVWWVVVWWUVVUWWV$UVUVHJrfc_m-uwuˀΡǁWWTSUTSRRRST=9[ORNngq]cpUoeJKSls?Qxx}\[YXP^<4dZ]caGMhKfpPxwc|q95AENScMGITpt]7kqZ1BCkuHaZNR]ozjVMc{`moydmwgvʼij{c݂]A-i|lXXyqF]JLLLMLMNMLMLLMLMLLL=gмxhltpxm[qsPuRukwբxq\~[KKMNM +NMNNMMLNMNMNMNMNLMOMNM ONOOMNMNNO MNNONNOOONNO0PONOPPNPPPOPONPPPQOPPONOPOPPPQPRPOPPOPPQPPPOPOOPQOPQPQOOPOPQPPQPONPQPPOP OOPPPOPPQPOPPQRPQPOPQQOQPPPQPRRQ:PPPQQQSRQRQQRRQRQQRQRSRSSSRSRRRSTSSTSSSTTTURTUSUUVVVUVTUWUVUVVWWWVVXVWXWWWXYZYZZ[YX[Z[\\[\[Z\[[[Z\\]]][\\\^=_^\^^_a_^_`__^_``__``aab```b``abbbccbc`cdbbddccddeeeddeeddffdfefhgggiiighjiiijklkjijlkj556l5l6lml676nno787787778898988899988998mnZ[ZXOFEAo{Z\VKM;:;>>B?<;:8cbcig[ZcgagnpokK`bL@CBMQJHBHJJHEFDED{tmty}tnr{C=8925655o543433568;=:;>>===?@>@@?@BA?@A?@CBBDBBACHGFGHHIKKMOOQSSNP__\[ZZ\\[\Z]]^[[ZYWZXUUSQQT]\MLPJQSUVfk41kbKHMMNOOPPPQRSRSTUTTVWAXWWYYZ[YYZ[\\]\^__`baa``bcdcdccddeedfeffgggiihjjjkjjlmmlorrssuuwxy{}}ABBBDFHIILKLKJJIKLNORV[^bfilkhgefffklnqtvxy}}ہywwtplpzøwoºyxvutokgd°x~tfrjiilid_}sijgchfca_^Z\\TTTX[_bVPHJOLAEnilmfil{?<:ri^_YTRfb[^jwts;;qliiifcajjghgjd\Z]USUZ^\X[QMOUTUUOR`_^ddT|ux~PSTQMIJHAJLLONKGH@=@HIC?@GA>==;?FFCCDDEDEC?BB>A@@==?70/2-!01%12;985078::9;9:??=97@AA@99?>@C42784759;;.5:7+.2>:=>?<6374664, "A::9D)+/.,+,255320/15239749<99:6:2/110/-.,//01-,.35313/.620,)--.%%',/--1=9759=7579;:>64:7<5.-2200-().5;669<0-00''*58/*/,,-0030120/0((()  !"#$ $(&" #$%!!''%$" ,&46'("#6&(+&"14$&) +.2&,*#&.1.$&/$!&,)$'%""/0/1$'! $,&##*('-,*-/!$(,(#%%# (#"$%$*'$"%**+)EYh5:eR]]6?R4:7Ya_SIFLQVNPC2JlB?RV`SCH@:192::=DCZ\XPNSRFF=A@I8@U>lU3\HI_KVTUMC6:8CQOI<=9KUVC;FVUJMNXUSWXU[`]EOf9?dZPHOPPON@Q;XGKB3I94'>JJEEB=5<886>6<*32Q/$(519:520B#$>,0381OI9E4;EQUUFN><$$0S91O6\Q5C:E6eX[KWP`15bE$/7=?=<>A5]I:.Zktmlb88:;7j_6?;<@E5(22 + 7FCFM8$9?0'38)E& %702+6" 1* / (,! + )ZF(?%+  *'+8FD""",/&(7/.BLQ&&,XIA?EE9((%** !'&#6#& !$(%$!%>YSY^]jULGOcۄN݄2۪Ϊj0-*$+8H@\?`z{ֱtՔܘԉ\nǼΈܲS$03%") 702&)/$+#9kPh㠔huL-6  $,=;==;;>>>@>>>?A@ACEEGIHJKMOPOKKTUUSPNPQTTQRPSQQRSTUT#RPMPTPPVNVYYV[Y-.TĹvktwuple^Uvkfhhfb^Z{v|}|{zwtwxigaacfi^XRRUXMO{|x@=;vqr{rnnwou{v;305>=3.06211106?><=>>=<=:9985654/,(!(#$''/010/1037nl63//.++,+++,+'(&(%'(../...0/0.)%*(#$#"##%&"!$#%)"#"#"## !)(,--( ! 0,+*2!(+*)*)&!%!#''&),))+)-'!"!$#%%  ! !$%"<'! !%"""##"%!" ! ""!        !   +       + +   + + +    + + +       /7$>.43!%4$$587.(&)-1,,$);")+0+"&"!/..('*,''! %*;*4&'0%,,-(#!('#$*,""-,%'(.,*--,01/!(4!:1+$''(&%(+ #$!)#(#$&%&#!&"!  &'-$&/'', $%"(7#$"!$&))*(,"" &"%.75(-$',,!41!/"5..$-'02$*,/0/023*5#$!).)#,/0124$'"/( ))).'90)+(%! "BAHDKA??A=:69:6 (+0$9&>?)/#$ 8/5C@GEB6EA>?@@?20(#AXX`KQcZ@D=OQLJLKFNIJLN?AABBABBB!##$%&')*++*))'&'(*-159<85557[S!*HZSA,D!#PE206((.+8:BL&-MKA657840//39A<:C=I%D>>>9./825V\Z`fahWNIM>6UVWWVXYWWXXXWWXWXYXXYZY ZZYZYYZYZZYYZ[ZZYZZZYZZ[\ZZ[5Z[[Z[[[\[\\[ZZ[\[\[[\[[\[\[[[Z[\\\[[\]\\[\[\\[\\[[\[[\]\]\[\]\]\]\]\]\[[\[\\\[\ ]\\[\[\]]\[Z[\[[\[[\Z[\\[\[Z[[Z[ZZY[[ZYZ[ZYYZZ[ZYZZZ[ZZZYYZZY XXYYYZYYXYXYYXXYWXWYXWXXXWWXXWXYXWWXWVWVVVWXWVW +VWWVXWXWWXWVW VVWWXWWVXWWWXWXWVXWVWXWWVWWXWWXXXWXXXWWWXWWWVXWVW/VXVWVWWVVVWWYYTUX=WVFYoi~ֽã⹇tpUUSTSTSG8Q^K;=`h~hxcpf[NEYK`4t>ŨtL`x`Z65I[EsmMcAt\X|NQuCFOONOS}pkroP;6,//]a_VQL\\[Wbd[Wa7HS@IE8;;;=<9ibe4dbc`_[biithHUaRB@@AFPK@EGHKGFHHFFuqpyyvxH>:9556455543422478:;c:;<;==<>>>@@ACABABBDGHHHGFFFJJJKLKKNNMNPSSQKOYYXXYWZ]VWXYYXYVVXRRRQOMKMU[RKMHKRSUYf56NT^KLMMNNPPPQR STSSRSTSSTTUVWXXWXXYYZZ[[\[[\]]^`_`_`@abadbbcddedddeeggfhghhijjklkmnnnopqrtsuuuwzzz{{~~BCCDFHIJJKJIHIKLNQVY^adfddb`abcfhjmnpprtvvxy{rolhfkt~unν~vtqrqnkjʯqz~xpdrhf¼ukp¹ghýfheddc_]\URVYWWTNMKF{oollgkmrzq8phbWROaiXX_ntr::tqdikiijhjfgjijgd[VUSUTZ`]_]KPWZXTOTLVc^ceWvxwPSQONIHAKONMPPOHA;:FIB@?FE=?<:9>CGDEGDDDEC@BB>CAADD<72#"+6<:;967842543451355861/15//,&*,37128=2,1.')(16-$(+(,/03131--/'()%!"$! 13!%&"!$'%! ! 2,/2 #$$! !$+/-*(,20""$!$.3243)"!'$$!#1)!! '&"!#///./ $$".0/**&!"(!$*))' $"(&$$%&).+,-%.4/Or9i7]QY\fGE9:7K^`WPKKIPILNJIR@PJJ`]D>DAHG79AA>>EVWKOHC?8GFCFIBADfb^RK@WTWTQEH5=0239WSNNNVSWM+9A.6BOXWOUQSPQSI<<540;9[.VMHJIHJB84914D@9@+D1V=D3>89:?ITTMA@G?@>:P0?75[.OVDR>?1=FNCLWW.CH8;;9AD<833:<862I5P.GQC?@%/2Rh1GO5BD()/1c:'?ERJOxrGC=57QDFMVH/03.TWR1IXXAI@LT.;H3,@^H9SRN90JN:<5STEZNZ]^TZ7Xf817?E&9@S7!638:@C=0LM/"""A0@N;HI=POQPDOMJH9=C@6&.##$Fg_LJZKHT5DV?">JVYNJGLJF/(9"%?FNNJAF91 0>AGE$*DG5#=% 1!& 8!&&7&942?='! 2)+- *57P8  +  !! &%$ 2"9a%!$+(#,GM0(&+NE<>@@<&&.*(!(&&)0/' % #%"$#(IQQZb^cTLHW݄ބ- n܄ڀܛٶd`JR]B,CVXJHP_n>YKfĜٹ‘ͮs@%A+%+ 6!G* #6@>8C!IlS<~otdꑲƩԙM,J/)6%B2IM:07!"!,% &#%0'&SOB=>??@ABCB?>=BBCEEBEHGHGLNMJCFLKMLKINPNQRQQQRSUWSUUTSQONLNMNTLOVVWXZ,-CFƄȀ»٤~wîehighd^Uujedy{|y|zzyyuuvjefgecaUQRM~{{s:tosojhvqpz{=FIKLNLK@701=>5/.55162117=?>??><;;;89747420,"$#'9&&+-,02211012gnoi630/1-++)))+*'*(,'*+/./-,020.+&$)%! #$ !" $%$$!#'! %+**/-"! !8,,-$'+)+,,)(%"%'(')*)+.,.%"!!"#&" !" "!## !(#"! !  !! !        +   + + +?  +  +  + + +   + + + + +  +       + %5<"7.22:**$$.56/,))',(*+'&+!*$#30!#!%#!!"-,$($$!&%#%&"#521+& ,+-+*#)(!'*$ !! -+(((-,,(! &-/.'+()'''#'.*"#" "(# %$!$  "$"&%)$(!("$) $()$#$)4*3!!!#2%(#%-%!%=:!'"#&+#'*' *1$**59 "' #2' .1.#"3. 03$-&0-.)./3"$,02(.0 %("$,#%!&&% ",#'9("*% "*#..=%'!?E>??@?<<<0:1!())&&>>@DA43+/%-6A\AK?B>==j7Z8@K':>;5%}|}|}|}|}~}~}|||}}}~}~}~}~}~}~} +~~}|||~~ ~~}}~}|}}}~!~~~}~~~~|{||}}}~ +~|}}}|}||} +~~}}}|}}~} ~|~~~}}}~~}~~~~}~~ ~~~}}}|} ~|}||{{||~~~}}||{|{}{ }}}~}}|}~|}|{|{}}}{|}~}|}|}|||}|}|}~~~~~~ }}~}}}~~}}}~}~ }}}~}}~~}}~}~}~}|}|}|}}|}|||}|}|}|}|}߀~~~~~~} }}~~ ~~}}}~~}~~~~}~}}~~~~~~~~}~~~}~~~~}~~}|}}|}|}|}}|}|}|}|}|}|}|}||} ֱнɵƜӦȎύѶˍנ̭昱×Ϻڀ޲ԥXѺǰсڿȻȽſ   '+5u˚ć梐󔺋)'".'2 Q-!R="n׈ʳЇeӪ)&}A㪐녂┘ȰܪǾهȄLjF7߂wyT`m(]ʪ˜͛ӫ{*  +    !!! !  !!! ! !!"" !! ! !""#!!"##""!""#$#"#"$##""#$$#$%###$%%$###%$%%&%%%&%&'&'&%')&''&&'('())'&(')-ߘͿǾܺٷk￵j($"5#"""#$$$#""###$%$$#$$%$%%%&&&''((()*()*+++,,-+,,+-,--./ 011012245556778:988:8898;<::;<=>>>@A!"#$%'''))(((&%%%&&'(+/259:::87412359<<>?AABACDCBELWgtorkGES]euw^TURRS^mtpVyjdflqvwusmlv}o\KB?>>=<<_|t{Ъ޽탆Ĝ¿¹ћ߽ᗩĽķ¶ϼᩫ烓ľƼĽж܈žӿʽIJ̼ʹ½Ǹ򎨫¹ĺ凇ϰʷ봓˩Ĵįɀ׭Ӫ˾Ϸ繮ʽϷʽξܿ󣂋څۻ۽芭Τ٥ɛɮ̪ǏؿƾƼѴꅾ㍆ȸڀɚς˾ꕟƔ𞽊갨䍐򫟽ŘžԞ豃؜´脃ϪȱѱÿžȘźצ̛Э£̸ߘͮ٢ Ͽ⎀/.@SZ]\KJPOSGB3MK.!#%7:O\Q(J[`EOO$IBO'8:$5P-0Q-?KEA4 -1@ +Y='&("6E#!%.,+,:4.% 66.F6T3W$6!,299.)E@EUM/8QS:468QOGFLMF8:B?<3;;?R'KKJA968883227>DC<@E9>=E@95213=0>[X^dke`RLJDFJWVWXYXYXXYXZXXXYYZYYYZZYZYY[YXYZZYZZZX[[[ZZ[[ZZ[ZZ[ZZ[[\[\[[\]Z[\\[.\[\\\[[[\]][[]]\[[[\]\\\]\]\\]\[]]\]\\]]]^]\\\]\]]^\]]^^\]^\\]]]\\]]\\]]\[\]^]\]^]]]^\\]]\]\\\]\\[\\]\[\]^]\\\[^\]\\]\\\]]\\\]\[\\][\^\[\\[[Z[\\[[[\]\\[[\\[[\[\\[ZZ[ZZZ[[[ZZ[ZZ[Z[[[ZYYZYYYZXYYYZYXYYYZY!XYYYZYXWYXXYYXWXXXYXXWXWXWWWXXXWXWXWXWXW XXXWXXXYXWXWWXW XXWXXXWXXWXWXWXWXXXWYXWXXXWXXYXWXWWWXYXXWXWUWXYWWWXXW0VVWXWXXXWWVWYSLaUWJK3A\UqY>cg||Y\VTUTUSTTUTST^/HSH=OV;]:gK@gOJQLBET>WqdychTrH8:b6v7'1=XjpQjgkZPLSPUZ_sT\ZbYfUl8'vUh_HYP;Rs~s\q酀^ovQ{~^T8HMGLLOONMMMNMNNMNNMLM=Eɭyڻkzz£GJxnfqUHPsxd\`\p^SLLMNMNNNMNOONNNONONNONNNOPOPONONNOOPOPONOOPOOOPOPPQPOPONPPQPOQPQPPQQQPQPQQQRPPPQPQQQPQ RQPQQRQQPQQPQPRQQQPPQRQPQQPPQQRPQRQRQPQOPRPQQPQPQRQ PQQQRRQQQRPRRRSRQRSSSRSSSTTTUTTTUUUVVTSTUVUTUVWVWXXVWWWYWXXYYXYXYZYZ[$Z[[[Z[\][[\]]\\]]^\^]]^^]^^^]^__`_`_`b_`a`bbabbaababbcdefdedfg(fggffgfggfgihghhgihhihiji445jkjlkk556k5j6 m7776667676778789889:98899989:9998PTT=k2Z>;iOMGEgjFVJBA=82-bbZVXWL[^`]`fa]_jBQ49:G>=@:8acdia]YY_aahqn@S]YHB>;@OQBBDEIGKKJGtrrxwC]NB<554235445644689::;?BABDCDDEGHLKLKKJIKMKJKMLLPOMNNONJGMSWUTVSYWSWWWTTRRSRJMMPNKJOTZMJKCNQSWZi7CoJCMMNOOPQPQRSSSTTSTSRSTTUVUUV#WWYXYZYZZ[\[]\\]]\^_^_^``a`aacaccded4efgghihiijkklmnonoprqqrrsuttwyyzz|~~~BCDDFFGIJIHHGHJIJLNQUY^_`ba`_]\_aefhjkklmnppqrtz{~xhfqxz~zwvtxv˼uolnmkkìowyxqkbtg}sppheekkefgefȿVVXUVVRONSVXTzpoqniiirv<9ppeSPUhWLVdmqou9xiinighkhhldbeb^YYWXY[]\]^VMXYZS[]bSKW\cdPyssPRNTWLEHNNONQOK@B@AMLEDEDDB@<=?@DGDFEDCAEC?BC@CCGF?6,)$5I%ILEHV68D;fq;:888::ror9<<;8820779;;9567:868<:9;8773998685.00,(,7853135@88<=6;993/2''('IBAA&'*,+++/488652144139748<89:77./.-/+/0.*+))-13.,/44521-+44/$ -752../..2<:747;9656615-220010041--*'),3.*1; 3+-+'%'21(&,)&012633.-*(*+12- " !%"!##! #)&#  #$+'!"$%$."  ""!'&#  !!(-,**((2)!%#+4425&&"$#% 6 85 #/.,-+/2  #,*)5& *4+%#"$***%$'"!'&'"%*)-4l_cnZPQXYZD:;EZYZbUGAFKFFOOSDRbJAZfF;ABKFCCNQHFC<>?>19Y*2VJIF6M@DgeQO=RUXRIE@,QHEORMI?QLN==9?H=?4?HLD@2B.B407E>81;BKXWRQRPFHLC6+P>H,EYJ@:>PC85?=IBNA9HS905P.8MDA;AS0IEGJH6D3NPPG=B@@820U>=$3FKLDEI=^TW?P9T9XE27FH[MY8FSU\SE]9+-FK>D<2)B?E'A;"5/43G2@GC&F'$%ZTH2e9H84.45?V2**.R+.8/24VL@i<.JNHTB9LV^6-;1>8OLJ>a9I8deQC9:6XO1>CBLSQPiPMuãgL671518PE I"5]G.-6.8R@55.#"",6)&B/& PI?*`2 )><*)B>01rضÅěVԆ]דᒍTB=-()qD">i{τ-΄Gʅʄu߅J4 +{Q6\+L55eTQHGmpJYH=<72-+Y[UPRQHTVWSWZXUXZ6>!#%1035/448665410TRRVRSPQY[_fka;Q^UC<514@D;?ACGEHHFBwt}?>3//--++,-,+,,,.14666588899::;<<;=?>?>@BABBDEEA>?CABCCACEDDEFGE?=ADGIHIGMMMPSSQOOQSRORQQQNNMHKJLNCNTUWXZ.9uü{v§^hhe^YSujb~yz|vxx~yzyzzigkffda]Y[]\Ww>?=@>><8;:8995422.&!*/5-3=*.92aj63/0046jkl54420/*(+)*,-*'''))*-///0021-+*%#'#!$'&!")'"%&(%!"!#%+&)+*!$# 3-,,%'+---,*)%#%('%*-*+./-# $!#!    '#  #  !!"!$""  +    + + J + + +  " + &  +   + + +    + +  + +   527D5/,/04'"#)31170'"&('&,*+".4#.6#"!&"!!*-'$" //%)'*#76**+,-+$%#+$"('%#$%&"!%&!" " "&-.)('%!% $"'0$&!$&#)%&&  %",(!  +&)'1+$ "!0'-!)(,) 2!*% " %$%&'%!!$$'-&"*"7 #!,((($>"6944%#//5!%!11-$4-+$".)!,//4# 2""-"51' !&2*$, 78&&.,".3#%(&#(* "&4@-3)@>?<973+$6Z\7a?=9<@<:Z9&,++!JYUliG]]UBOTNOMOLLGIKXT9/0$%>0'GLWXNV[MEGKEB7BGG@((3=- +BTTKL@E1?@D5?MB@>=69?!}}|}|}|}|}}|}~}~}}~~~}}|}|}}}~~}~}|}~}~}~}~||}~ ~}~~}||}|}~~}|||}|}~}}|}|}}~~}|{||~||~~~~}~~}~~~}~~}}~~~~}||{{{~~~|||{{|}|{{{|}}|||{{|}~}}{|{{zzz{{|{{|}~}}}|}|}|}|}~~}~}~}~}~~}~}~}|}~}|}|}|}~}|}|}|}|}|}|}~~~~~~~ }}}~}}}}~ }~~~~~~~}}}~~~ }}}~~~~~~~~~~~~ ~~~~~}}~}~}|}}}|}|}}|}|}|}|}|}|}||} ڈϼƽűҚֈ˯듹բֶնЦω纜Ȑ«õ޺`ɯ¹ȸۂȸ®ȿĴ.! + +4 urK@썛Γ<0 oݮĶȺШԠþg;/ٴV{FCI-Y|iϦτ¼Dž鯺ͻߠؐꯦʷ弇ȀԶ6?=䤤ؓTjfڒιm᳷ʮݢב֥p)   ! +  ! !  ! !!!""" !! !"!!"""!"#$""#%$ %$$#"#$$$%%#$%$$%%%#%&%&%&&&'&%%&('&%%&&%''&'&'('&&(*'()'*)* 1އƵ񋨛ɧ߽^Ṵ򜛶׮E(!"""#$#$$%%$%%%&&''&&'(((***))*++,--+,-.//../01234455678987779:9::<>=<>?>ACC""$$%&('''&&%$$$%'(),/478998410..146:::;<>>?>??>@EP]kqwy{fid}wv|PW]jy~|kTMKHGITdluq|mbabdhjjjifdkz}tiTE@<<:9=x̵񊔚غ۴¸򃀁鿛ǼŐྮݚɽǻ򀅀Ţ탎пƷ̽νʱ舠Ž¹Ѿʻʧúͫ󇘛ҹ⺔쨩ЀɱϹͿߵɕʳŶɰȸԧοĪܑŸƳȹ£∙ɵ鹣х۽˳ϩݑؽޏ߬֗—񏀠lj˝Β쬬ЈӰ֣ۚ܈ӻҋӢϮЈ×䰹򉍁۴֘ߺل—¶ƙ޶ާȫþҰ“҅ٷťͧȫƏפԖм)O40IXZZICRNTPI.DOH#$!%FUUE+T_Y7).I5,GP8$>22K92A\RBHR90(J83 &->E8%?7L"#)/,-523+,6+I.@/a!4 ))0;5;8OI7/3OY;673FHCDRQ>=;B@:29:D]IT_J:3575523:>AA@@HF:>$E?62./684CW[aflf^OGE5EZWXWXXWYXYZYZY ZYYYXZYYXYZYYZYZZ[ZZ[ZZZ[Z*[[\Z[\[[Z[[Z[[\[[[\[[\\[][\\\[\\[\[[\[\\]]\]\[[\[\[\\\]\]\[\\]\]\\]^%]]]^]\]]]^]]^]]]^^^]^\]^^]]]\^]]]^]]^]^^]^]]]^]\] ^\\^^]\]]]\] \\]\\]\]\\[\\]\\[\]\\]\[\]][[\[\\[\\[[[\[\[[\[ \[[Z[\ZZZ\[YZYYZYZ[ZYZYZYYZXYWYYYZYYZYXYXXXWXWXWXXWXZYYXXYXXXWWXYYWXWXYWXXWXYXWX YXWXXZYYXYYXYXYYXYXXYYXYYXYXXYXXXYXWXZXXWXWXXWXWXWXXXVKTYY_VTR:Gрnڠ̈́~쪪jUTUUTTTUTUSTTUTLPSSRDId57LIQQJKQRQPQRC?|wnq]lrzQ73Fx~|sX[Fmkq^p`nwFKoco]H?=V[PXG_Ie_dpamQCtLvuwxiwwZDIqŘج}˟wԝiz{rc>kpO9FTSJDONNNMOKPPPQMMO9fye}sg~ܠmwtڵ£d|iDHN=JzVbjĖ`HMNOONONNONOPONONOONOPOOOPPPOPOOPOOQPOPOOPQPPQPQPQQPPPQ RQQPPPQPRQPRRQQRQ +PQQQRRQQQRQPQQRQ RRRQRQQQPQPQRRRQQQRPRQRRQPQQQRQRRQRRRQSSRSQQRRRSTSRSRSTUTVTUUTUVVUTTUUVVUUUVWVVWXWXY +XYYYZYZ[YXZ[Z[\ ]\[\]\]]\\\^]^\]^_^_^`_```aa`abaaabababccbcLddcdcddeeeddeefeefefgfgfggfgfgghhgghhiigiiihiijkij5jiklkk6k55km6k6nll67767667878789:9:9:dk\Z8ZMU_YQNKHciURME7>=80bYZYZ]\X^`bbihf_n=L:68SKC?;CABBB==:6edegaYYY_\cfmxAPV[PB>??;@D>8/*)4A$)OJMGHK:;B;os;;9988npqq9::78:54789;:27:88858;9:98878:<:8::=4)DC>AA@?>9860/.275/:865@<;;<:98541++0,(MC@B%)--*(+0268652244238847<988260.../,,.-*,*,/3304;65300++41)!"-971-+,2/.2=:78;:<;94114244013..43***%&),)0694-.-*')'(&%&+-./00.*++*+-146:0(" $$#"!$"!$$'# &(/),%&),!"%!,"!!2 !" '&"    &#&%.*-% +38/+%<$!404:/45 !#!22031%.../!!&" ! !$%#+' ( $-&)+&&'"&,$0dkkYFQZ[.@II:R[]4a8>LK@@JQQNJBDBW_K@BDB?EBFGLLRQJEIBF>LH8EKYRYUAIdYI5TRQKK@@MF>KMQPJ;4FQJMKIQJNLIC@CEEA:D<:PM:>H4CFEGVJNOJAEI<@DU/BZ?PKLN7ABHF?761-1,.:8;=8;FT0RKLLE>3I,EFE@CD6:8S*0./KKHD:E7BWHQ.$9.BBB/Y-B\QOM=CG>/4;&=.B:>LJ9?KD>2LR*J.CJGD%SE>.<:;CVY:8#Z-.-5:DC]he\NWYUMT^Jba.KIKLEMHUT):54>H@;5SQJ>BC9()0D:E;AGFDC@BB?<=iO4&HJQRJI/AH>)GEELUTUUhPI4ISQQOQ@$963=@hdXqkdolSSY\ZWWVTTRWldY1_!4:11H3NgUjgajeYSZ`ZF=DNWP79JM8$&$$D^e^]UX?)IOSO&AQ[QPKOK5+:'9#7CIL:6A@FB7!5;3  + +,>A26! @HH1 :0!+ #,6-%( ) '$  '&  &# !73)%BM3*('8>==FB4-'+)%#%-<)09+"!! $# %+*7IJRZc`ZJEU[!ބʷۼtџUj2T,0(7?QlbMztmУҷӶѫJ`>F%+,$'.*$ #dyu{:%68)2%D2 "0@bIA.&7 +@96.<)'/RWG-DP*XoDVKB-r /?³HϺLAǭeBKH.DשHk  Ox&"AݩvŰ˄(фπʀR9eT2NDLYZSPLHflZUMB3972+ZRSRTVUSUWWWY]YV^2<(##;875055676131.USTVSOPQUU]chh7KUYI:5238E<>ACEFIIEB~F%980.-*,-..---/0456658698;;;<>@>??AA@BCABBGFD@>=>>=<>=?A@@A@AC=:;BEGHHGMMOQRQNOPPPNKMOOOIHEDJJNGLPRW^m=D>969;?<<::;;?>==@=;899665/0/("%54848=35>8mn641334ihkj4430/0+*,+--*$(++)+*,.-../0,)'('%(&$$' &0.&%**&'&&&%!!! ('%#)'(&%" 8/,, &(+.-,+)(&$$)(%)+**,)+# !" "  &" !#! !"    +  + +  +  +     + + + %!     +  + + + + +     +    +   6=B8)-10#.+"/438!+*$#(-**&!"-1'!#"!" $%(),-'#'"& )(&)0+0-%5.%/+)&% ")#&%')%#($%$#'$)'$ !!""")($$$!#,#%%#!$(#2#*'&' #!%%!""&"' .!&! *(''("!#%"%# '1-)/)#')* +!''$ #&&*  ,077440/!2-*&)-01('%+)$+& 6%#!0'"3#.'-%3%-!#!"!&/4%"*!+'272/18?B9@?.;89=A?;B20,!!'('(>>:/25. 72;1:AA>?;==98:_G+:>GJAA(t8;.977JBE@DA.$ }}}|}|}|}}}|}||}|}~}~}~}}}|}~}~}~}}}~~~~}~~~}|}~}|||}||}~~~}|||}}}|}+~~~}}~~}}||}~~}|}}}~~~||}~~~~}}~~~}~ ~}}}~~~}~~}~~~ }}~~~|||{~~|{|{|}|{||{|}{{|{|{{|{}~ }}}~}|}|}|}~}~~}}}~~~}~}~}|}~}|}|}|}~}|}|}|}|}|}|}|}|}~߀~~~~~}~}}~~~}}~~}~}~~~}~~~~}}~}~~~}~~~~~~~~~}~~~}~~~}|}|}|}|}|}|}|}| ܒżýĶҳԖЊƚϾ׷ΩѾ肛Ք녃ҫºŮŮfÐ˪愅â˾ƺĶF      5*rVoT_ë}Ջ66ƊѠw‰J*)xﲹ,=ۭR@sQ9Cʲԙю酀璙ᇀʃ^ƷʷޕҺ/(%1 *>󿥮Ǿß̂YʜپƵ2  +    !  !!!"""! !!!"!!!"!"##"#$$###$##$#$$%%&%$#"#$%%$%%$%$&'&&&'&''&%&''%%&''&&''%&'('''()*)))*){õս逞Ђߘ]̶ذ˽h($"""# "##"#$##$%%&&% &&&''((('(6***)())*+,,,++,,-,,,-.//.///10110132135544465766788688799::;;=>=>CDCD"#%%$&%$%%(+.14798762/---014588779;;=;<<>CIWbmpmozdc|phlvQUbqvsaDM[ejvqX|pc][]_`adca]YaqyyoaOB=:86;X~˶퀀ƧͶŻ􃈀㾟ȽܽڶΓԼúĽ񈑕úġ͸ƿ̲ͳ¾ՀĿƸɽ³ӵ็Ե˱ꁄӵ;ױĀ;ֹܸʥڰꩥ˱ЮʮԻǰ۷ҍẺűŴŧЀǵ޺м¼صЉ弹ٻռˈϳĝڀ񛚔Υʹ슀跽˵̷뛜ڪƍؕ~¦ȺɑǣȽ¿ӘԀܴõ̩ձ†ѭ̛Ħ&;c=KU[TGOMSSQQB;H=(4%5A8.?TVN31X_K 6.#.AH 53,DI2=P]H,:ogZ%)&)J[<4J2EH6=KH68)1:627+/(>9/,%".3,0835.'-,NJ8*T"2!))29-:BB948;JXRQ<.66755624=@D9AMF<9HGC<2/23930HX]bhkd]PE2.NXYXYXYZYZYZZ[ZYZZ[[Z[ZZ[ZZZ\\\[\[ZZ\]\[\\Z\\[[[\\]\&[[[]]]\\Z\\]\[]\\]]]\]\\\]^]]]^]\]\]]^]^\^^]^]^] ^]^^^]__^_]^]^]]^^]^]^\]^]`^_^]^]^]^^]^]^]^^^]^^]^^^]^]^^]^/_]]^^]^^^]]_^^]^]]^_]\]^]^]^]]\\^]\\]]\\^^]]\\]\[\[\\]\[\][\\[\\[[\[[[\\[\[ZZZ[[\[Z[Z[[[Z[[Z YXYZYZYZYYYZXXXYXYZXYZZYYYXYXWWXYXXXYXYXXYXWXXWYXYYYXYYXXYXXWYXWXYXYYXXY XZYYZYY[XYXZYZXYXZXXYXXYYZYXYXYXXYX@WXXXWXXWWYXXXWYXXS?ETDfzTVYZԪeك}gURTUTUVVUVUTSTTG5A}VIExoBOCim^v{LpNJIXE%C]MA>GIqec9wzc}m{Ndtyjw{ױlbdwۇw|~\nseX`~{G@RO@L8LD\FNOHYʏk~szÁ~n|rU]NNdC_]\aXSTMEHN`TUVG;9E>]`Xc_]\`VY`egfhmej;JD8BMQM>@CABA=A@8970ba^\ZZX[cbd?HJTSTF>?ACFFBFJKIEDyts}xZ@Z>357636667598:<<==t<=?BBCCACEHIGEGIJMLKKJJIHFEGEFGDDDFHGGFGFGE?GHPOPOSQNOPNOMPRSPNQQPUKMNPRMKLEQRRUU^_s|JANOOOPPPQQRQSRSSSTUUUTTVUUUVWYZ[\]\]F^^__^a```abbcedfeffeghhhiijjklmmnmoppooqpopoqrtvwxy|}~~DEFFEFEFFFGHIKLOQTVYZZZXWWXXY\^_aceeffghjnvnn˳npz{kq|sŹshdeedd½zxŲyxxxvyjifbzk\|vuqfhhbd^cýdd`][Z^ZTUQPS~{zxysvtvrrtlmb[[ffQdimnpqngdjnmke[VX\]^bgjebadc`[^`_Z[^]Z[\\^ZYYR\g`FsklxKTUXSHDJJNNMRQGLOBIIGC?BCDDDBAAADFDFFEDAA>===>C:4-,,>(LIMKMUCEAA>C{rx=<8;9:987jm:988;3375596:9768757;8:97879::89;>?4$9A5.6DHDBFJ?>?=;8614)&12,#Cthi[EUa32]:=;GXf35B@MG>>@EU`^O1AASMRID@<:?DFB:@UJR\LLONFLSI_XZUHIOXDL^YVTNA6T=@8UX88QB(U\SMQTRL?BJB?;=:EQHC59<*;\PD8C8:O<@@E;@C=95F@D;6OQ@;229CFL.-9/LN7/7T071QG?5D@08-A/FBK;?OCK,J?A22K?7>B@L6GIBAC"228"E#$6R.LCNLJHI@Q-7>/10,KM18:=/1;=<:F`;EeS@*GDG>cJ\4CAH3\>FC.4VG>8-D@67248TIB:R.KC0?L;@WTE;2M1X5/A^B=3?1.26FH`kzw[USVT\ROZP^;6("":[E/8-5FN.ZPLBCD@=+ +9FD>7EJKDCCBBBGFK:80>QQNL;5ME3JJJMRPWUVO*CMXQMMF$/6+M0^``RD[ojWNUWWVSSOUMWddb8B=#;7;58"LnXc]Ono_Z_W]DEMTTOG0COJ80 8Go`YYUD$DTWN3(HLXSGSRB34+)J8CLD;B?DDE@.+8(  )$,=CC$"@G3  -0% 22&7A/(QLA1:!'*+#.-  %  + +)%%)- Y &'82$%%FO1+'E0:98MC..'**$#%29./% !" ($"$!$.()>IJT]c\VKFh@MẢo72ֽo52FA/0*KTj~awҰܺʀ‘l.O6->2&!e!  ӊiC,ަRrhL +9 &K-2(R/*<$X;.$GG9.hZ^- B*-+1&)0!(?HKJ0/8(8,p|%CvKKbKКڿ̈÷ɕÿ_xSnmi{P+/&" . =F ;N 1Ǟ:^E.JXTOJ:m΄2Ά +̈́΀KlBXTU[SQTNEDNbX\WE64>6UVPYWUQXPSXZ^Y_bZb4B7)/7?@687577256/0.(TSQOMOLPWY\6:DRTL;3579=@ACHJHDCD-@3,./,+,..0...024664569:;<9;=A@?>??ADB?@ACB@;777;;::;<>??=<=@=7>>FHJIKMKLNLMKNOPOKNLKMFDB?AEJKCMQUZfcQho9Մـڢɻpssrl~{xvopyZXVT|naW|y}yqtvsuossqlebbjkfgb]b{{yuxn}zysrx~ysutmikmnidcfeaY\]]XX]]YY[]`WSSPXd`Ixs|MSUWPECGFHGJOK?CG:BA>:8<>=>>=;::<=<=>=9664332//$#33:9;B5:7;9@ytt961557523eh511/1*,.+)(&*,,,+*))+,..,*&%')(*+'$ !$$-.*+-0)(+*(+)""!!!-&,)'&#! "0(,0!!",++.**,')&$&+(%(-)*.'+ $  %"  !!    +    + +     +  !!         + + +  + + +  +      +  +  +   ?:@8(063 $#&/7#$-'" !&/65(! +),&"#% !,&+2&()*%),'3,-*#$(-"%5/,,( 0$%*' )$'&$!!(&#!!#%$#,.&"-0*&)'&$%%+$0' &$) '%(' !!""%%+%#)'#!%!&!%$$!!)! )*(,#( '!%$#!!%&( .';2)135,>'1!%5%4(!($.!$$2104!,&&((3$ %# *# ,$&1')1)%*-&8(#%&68A<1>DCDI@?F8D)!#.&&3A::21554!/=70.;BD?==>=CBFDGA!9CJCAB8!&"B'PTWL@S_]MGKONMKJHPFPZYW26+)%('+?[IRMGa[MIMDK59?HHC8$0;8) 4YPLJE58DD=% 6;HF=HH5)#}}}|}|}|}|}}|}|}}}~}~}~}}~}~}~ +~}~~~~~~}~}~~}{|}}~|}|}~~~~} ~~~}|}~~~}~|}|~~{||}~}}~~~}~}~ }~~}~~}~}}~}~~~~~~~~}~} ~~~}~~}~~|{|{|}{{|z{|||}||{}|{{|{{| }|{|{|}}~}|}|}|}|}~}~򁺂~~}~}~}|}~}|}|}|}}|}|}|||}}}|}|||}|} ~ ~~}~}~~~~}~~}~} +~~~}~~} ~~~}}}~~}~~~~}~~~}|}|}|}|}|}|}| ޲Ơú֝ڱ욯ϓѼ޷בز˧Յϱ٣ךϽŷYţѹ뷼ͼƳκ  +  5)=1Df˄65̓褍ߙ✳g"::$ 5_ꏼlj]cjG>MN7TE?DA0ï煊ݠ囲򌍐Ճϒ㻊с᩶NO!8);͇خꞌ腵څɉ{ѽǒރx0  +  +  %   !     ! !!! !"#"""!! "!"""!!"# $$%###$%%%#$%$%$%%%&&%%$$$%%&%%&&'&&'&'&'''&&&'(&&'(''(((**)*) u1òα쇒ۿӕf©ĸğճB)"#"#""##$%&&%&()(''))(()((**++**+,,-,,,.///./001013344335567547575687756756676899:;:=>@ABCDC"#$$#$$%$$$%%&&(+.25655520.,,-/0244542467999::?FP\dghdhõxy|pe^cpO\iniW|wsuQ^bjy|oYzof_YYXWY]__\VV_lsqhYI@:6347:ؿϱϵ܀οݼͲӊƹµ텒ϻdzހӼƾ¼þĺۀŽÿƾȴǼȿպġ»­٭퉦􆎟˷ҍۺȻӤ۹Τ⾝Āƿݕ˵ǯѹ޽ӏᏂҪͺȎн۰ˀ˘LjꉄԵη̽Ÿꨈߺ‰ϸƥֵ𧖵̺ܒʹꃈԸ̸ٕȧѐѷĻŏӀıסVƴլ՚˪ʱƞΗ˳˜ė'.OH!0OY\RJPTSLJ_:??7@G-LJ?AKRND>)N[U6&'>'&'0O)"=.=S=2:SS.&'alc<.)$R*7($4,JEC'HKIB:2--Q5aK%; !' ".O&(*0.)58770#'1%OL:1e(%,(,)1=&%:TI95:R]977W@BCE^K:DF@;;95?RX>:3$6783127;=<;3DI@=BGDB702865/5Rg_ghdiVK>A>ZYXYXYZYYYZZ[ZZZYYZ[-ZZ[ZYZ[[\[\[[[\[[[\\[\\]\\\[[\\[\]\\\[\[\]\\\]\]\\\]]]\^^]]]\]]^^^]\]\^]^^_]]^^^]^]]^]^^^]^\]]\\^_^]^_^^]^__]]^^^__^^_]_^ +]^^__^^_^_^_]^_^]^^^_^)]]^^_^^_^`_^^_]^^_^_]^\]^]]]\^_^]^]\\]]]\]\]\]]\[\]\\\[[\[[\[\[Z[ZZZYZYYZYYZYYYZ[YZYXXYXYXYXXYYXYYXYZY.XXYYXXYZYXYYZZZYZZXZYYXYYYZZYZZYYYZZZXZYZZYZZZYZYZZXZYZYJXYZXYYZZYYYXYYYXY]\VՋdARux㟃ip✌׏~FWmiZPVYVUUVVUUUVUUTOPMSSTTSTTUTTTSSU^saܶ}SpMPqz?O5^X}bLqAsAIXaUTYJpGb_`N٩O7N^S55WdrdL_XojfWu~tQ\jǁ~pwidij]VwÔU[FQQEKWKeRR9Frrq[ojэ}~lamuz[]}Ry3ZCo|oPT{TOOONONOOOPOPOOOPOPQOPPPQPPPQQQPOPPQP RPQPQQPQRQPQRRQQQRQRRQQRQRRQQRRQRQRSRRRSQQRS +QQRQRRQQRSR QRSRSRRSRRRQR QPQRRQRQRSRRQRQRRRQQRRQRRRSQQRRSRSRRSSRS RSSTTSTTSRSSSTUTTTUTUUTUUUVUTVVVUUUWXWVXWXWXXXYXXY ZZZYZZZ[[\Z[2\\[\][[[\\]]^]^^]]]^^]^_^^___`_```a`__``aa`aabbbaab ccbbbccbcccddedefeeefgfffgfffgffgghhfhhghhihijhjkkji4jklklml6kllmnm7899878999899:999:99:;:sAM^QW[XUTPKcRWfI[OB8KDdc`^_]\a^Z^ghfimejuCM>QIMWI@@A@>@>>::74edca^^X`^`el:FVVUPECABCMFKIHGF}uv}~{T>0@6987765788:;>@AcABCDDEFEHFFIIJGEFFEFGFDEDCA@BG;@BAACEEEFDDDED=FBUONRWMOPOLOMMQSSMNRPTSTORNLMGJPRSTOqKMNOOPPPQQR SSTTTUVTTUVWWWXYZ[\[]^_`bbbcbeeegfffghiijkklnlmnnmmnmnomnoqstvwyzz}}CDEEFFGGHHIJLORSTUWXVUUUVWXZ[]^_`abccdbcegiqz͵mvqs|}tʿymdb`a`_]̿tvur̷|prwƷ{i\zqfnodffaeec_^\`[YRQxx||ux||suonobVSdbSjnnnokhcihheb\ZZ]cadfjmfdcda`__`b_`__^\[ZXZ]aY[c[?qkhnyFNUVRGEGILLJHGFOLAGKDBDDDEEECBABEDACA@>?@><=CC6/.+/F'KMHNHWPDDCCCE}vy=;9:9:999m8;988802314/6:9968779:8:9789:9=969<7/%=>4/7@B>CJE>@@>==8<>411.-.//72.4?==><952/1(345-&H'(*.-//.+,3345235102/37547<9;84=422-+/.4/')-29=42/,-7510.+2'$)22;220+,--/4;82/4<=8:=:99473342--3-(,+((+/+**.23.,*)'#$.,&))*+(*/0-)()*+*(')('''#""###$$"' #(3:'$#$()0$&+))(.+*! ')% ! '&  " #"%-563, 4002%%!;52(0,0101//136413131(,!!-+(' !!&#(# "%"##"#&%$" !$/FHFBV:HG>QPR?C.IOVWJOYMQaST6R>/@mgaVLM>BCDV^TC4@?H;L[XODFOIJGFCEEE@IYJEPV2UXOUNYROB*=L;H816JBD=5?/9BXULJDCNA5EFA2Q/=2AM.G-36M41WKE@N9?<;<9?@<91<5,N.A8-8/>3)-)*BT:02/=7UOZ3bcNFUOM6@B8CCFP?=3+?9>JU?-Q@?>@+FDU[c6Q]>FV/31A8XD35D"/NB>WRD1F;<>TH<6;MP;`E8D'.AKLDCO-D2^3:EGIII>J'2@Y.4BGIHHJGLLJLRNN7:'HOMJDEIH2DNKLNQVUVS70Irdmd6PCAGU[UP5AQQJ3@6(:>5!7B>! '9+0;'#97GPJ'  2.+,*--+4%?(  +. "''&,1$((>7*).GM0*'@/58:M@/41)'%$"*8:!! !"'"!""$&$+CQLW\[^PGQʙ[]ބݔʭ>-5[ЛՀuAG08,,3Qyoo^ݍِdC%&,8(4%3ᥓ̋]şb1i졒+[ *) +*0IӸ3&-^G>t>H/!2>P"<"*09'*)7/JER<+/cD+CEo5S`BiVt͢ปVwSA==vٙtnuSt41(%$**'&$+YX%'U("/+2(VX΄aЅ'Ѕ΄0΄фӀOHJ\NTUSSQLFYLWgO^M>3D:YZVWWSOVVTY^\Yad^dl=D4B8>J>86642321.0.*TSURQQHPOV]^0?UVQG:;::?>==>>??=;=>=:225/4678;<<=?==>=;7@=KFGHLIKMKJKJJLMNGHIFFAB==>FLEGNQWYTdzԛ_Սȹllid~klpx{j^U~xovysstqtqnigdiikc`~}~{uso{tpmtuvw{xwqprnonnpkiijec]^]_]]^\[\YZYVY\VV`\DxquIPTUPDABDFGGEA@GD;@D=;??@?@><;::=;9:8733532240#'397>;G>9;=?@F{x;73578535h562/..(+,'& '--,)))&(+-/.+)&),//,)& $ $)(%+1-')*'&(#')# "$("+(&%# #!1"##"$--,-,,,'&%"&(%#%,'+,(* :!&!"" "@   U    + + +  +  $!  + +  + +  + +  + + + + +    +    + +  +  6=4-76-(,%+080(+&"$$,0:?4$066-$$#!/$"*'* $(./&)/%(1)+-%=84.()$##*0(!##+)$ "'$$#!"!! !!!$-$")-(2+,%,(% # & "!,*%$!%!'$!"'$$#$0#(%*02*",&$#( !!#*,,#!$$4+*$  '(%' )% #)/&%')63=65(0 (3 %00&0,&0($-(*)3( +/%:($!%%"0!: ) +&2%-/+%75;<7;A@@?B>=%,('$%"!+'# %719:;>>46&6G")7>CBCA?DDCEKHG-, @IEB;9<4 4=<<>@CCED*1AGI@:6!*06=SQM>M``Y?JLQLIKGLKO]]]6AF8'3-$@dX]S2BRTG2(?56ÎĶЏzgșřꃃr蒙жۛ@#     !!  !  !!!" !"#"#""!"!"""!!"""#$$###$#$%%$%&'&%&&%%$&&&%&-'&&&'(('&&''&&''''))*))))*)*1ÿ퀙ؿ۝ЦqŧɠþԾz%&#""!""##""$###""#% &&%&'&&&')8((''')(())((()*+)*++,-,.-.00//000214545445866855546778776 567789::<;>ACC"#$%%'),/135640.,+*+,-0012212145554569@IQ\bb^_mznvxrdYV^lXeg`Ozqkfiv`ittl\zpha[XVSTVZ]\XRR]gmi`SE;52004{ö޾ѻ􁈅ɿ۸ͺ岀ӳ̂Ļžο˷׵İijݍ¥ûüȺʾƩջ廲쭎򆖝ҫ׉烆ᑽƔٷԽˎݵſεǹƚЇɣ֍ݍʚи왚ڜ̿ۀԳᎯшǖƜ˷튎럪۲ڌŦ¯»򪴋џđŸ²徖͟఩ҏ˿ψѩ溭ۈŞ٦½ûɯիִǓǽϙ۱ĝŽȔƲݧМ䋪Ԫ־ϿԻ朽߾εƩ$-,R.3APZ\KKPTNJP6G@5DE60OGDGDNL;,VZI"EA()$LI 4?8?C@06M21KmkU'%C+/2&CEDM.AJCDE<)%@6ldS76.,8$((.0-85992#%5 E@61k*#*1%#/?6)9OH<3;K^86cMBABJZD;DL>;9?8K]S4)2&0575238@DH?==;<@<976hfc\_b_\_fjn?PWLWPDB@CNNJHGHxw~`C5J9:88898 88:=EPH=?A??ACEDDABAEIMA@SNM\ZILMMNMJKNRPGIQN]3USPOOLGMRSSo0kkT@NNP QRQRRRSTTSTUTUUVWXWX +YXYYZYYYZZ\]\\^"__^_``bccbceefgghiijjjlllmolmmnmmmnmnnoqrrsuxxz{|~CCDEEEFGGGHIKMOPSUVVUTSRSTUVYYY[[\^`a_`a`acekt|ʴt}wju{v˸|}z~vg`^^]\_ķtoϽ}kr~n^|oirskenneeda`a^]]\XX[WUML}vxx|}|xsqm]T\ka\oqmloqtmbY[aa][\giehkmpgdccd`^`dfaa_^]_\[[abb[dfQ:>H9--+(D)KKNE@EJC=DC=;?<:50-%/6452-*+*+/-+-,*-3254332011.3:758<<=65>88651(&-*')(()&*5C?=B904026*%/07$84/,-/,.3<9218=<6:;825150*32-,.*+0,(')--(%&)/-*&'(%9"/*+--*'*.0+*()+(''((('&'& ##""& "(,8+&$$*:2*0,&'*! 1"*(%!#3'"$ "  &&!!! '223/"!'!66.3*-1202/..20/.2001#!!%'%5" +*!"82469<"!$(-!"%%  !'"!#_=dhH^547ZOP2:=df]`eaRL5>B=9GTJLZWKHRPMJHLJMGDG@AEHVPNSNN:B9aRRSL>E8Cj?:TQJDFCEB:7:=IHL:KFGE37)C.C<6LU8U-9PYV48ROFB;37=,=>:6NC6-0OG@9=@3ZO&'ZaF/EJ179iV^W6.3<8*$-_?6EGO+'EaK4:@W16.T.;&A+IEE%'#$0;$#%&+3UB3BLQI?6MAQG>2,=?858A9=0CA?:?KJ;hja>C/GC7\TOOM30D99ZPaKPeH&?3_.@5FL?B8U=;6LEA7CYO-4BWD97?:J5=.&EK=F2CV2//[KC18P@;P624LIb`_NF'5>QUUH/DKWROSTD.;?!1=MO?>AC@>F,<5+88#&:6346?=-?B4 +1(6-$('.3& 08QR<  )  !)*4"-&(' %)PE3  #&'%!!&+$ '%#:7-(1BL.)I<079?J807:*&$*$2A9%*-"%*%!&# !.IPD\bWYJHi)'HҹS|C-%N)ihׂm3=6-$W5(qzgC>fȆѲ׀Qes./ 7(%!! jq88>ju:]̉얺T|31M 39a,7DxUf\B(".xUK.99-4+1&1E0$(u) @5>K'%<աݖ_Vn_?M(.kܙԼqh4%:J(=#&Hc6< 5PĽsmMO "?RHlī̈́nЄӄ ˅̈́)ՄdbبI_TLLKMPRLGACBc]]RD6@B0Z[VVRL^_[U[]_]dd`k;F/<99JE@44311/1410.-XURORROLV`_\7OWIRH=<<>JJJKIJH-$3)+*(')*))),,+./22323557889;;=<8:;<:;;:9::55=8067889;:<>;<:;=JFFQLEIIKKIEHHJJCCG?F$=>%+55%3+))(&4,:3:A0#6+#(( $5('#.*$%70 $1#"16$&(-1)%$"%"-.0; >;?O25;FEID*%&,('"$.#$'$$#"'($ 6>6&2( &29CDDKMIG@HJQWSJ,7JE>BJ11*7EH?l:=;?J[PK>$9>9?2,'4PPQA=*3CIJ7#58FCBGJ7&,}|}|}|}|}}|}|}~}~}~}~}}~}~}}~}~~}}~~|||}|{{{|}|}} ~|||{|}||}}~}|~}}~}~||}|{}~}}|}~}}~}}~~~}}~|}~}}~} +~}~~~~~1}~}}||}}}~~~}~~}|}~~~}||}~|{{}~~|||{|{|{z|z{ ~}~~~}~}||}|{|||}}~}}}|}}}|~ + +}|}|}|}|}~~}~}~~~~Ȃ~~}~}~}}}~~}|}~}|}}~}|}|}|}|}|}|}|}||}~~~~~~~~~~}~~~}~}}~~}}~~~~~}}~~}~~~~~~}~~~~~~~~}~~~~}|}|} |||}}}||}}}~}|} ùّ嬸˪ٺæ֌Գܧœ߾貫ǿմaɫãϻаüɽƺ  +    4,i~ͧPE഑ۈܝԉɱpB*OD5ƍxߥǂ_{rN~pdџ[!',ǣ鉇ˬ݉ɸ֜ljߎựɕYrJ+V5D᧮ovAֲܦ˯报ܢ^ظƟςĕI*ȋͯړo,        !!"""!! !"""!!" !!""!"#" #$$$##"#$#"##$%.&$%&''&'%&&%&&&%%&&'&&'%&'(&''&'('))'&'&'((())*úěҶþ򗌖Լr֦ԯ޿Èű놄ǵщD'$"%#$$#$$%%$$$%&&&%&'&&&%%&&&''))('&&'))())**+,+,+,--.../00022123566565765465653566765545656889:;;<>?ABB?>@@!! !!"##$$$&()+.12210.+)***,-0012101112211126:AKU\]YW^zmmrqh[QQ^nU_bZ}vng``igli}rkc\VSQOPSVZWQLNWad`YNA720/2~vƹ}~μ˸⹞`ҷ˹ӄˀ殆֭Ɂû¯¿烉ɵȶƩͺ½ƽŲ¾=Ʒýӄ̀ˮƿŷƁ耖IJ߁щ̩Ԁ¾ǵѬʲʸзƺ¸ӻ߰ƸɿˬɖòᦓֲǼΆޅⲬސа׏žžȻć􊉐𮲭ӵɜȺ݃ҼǧĂĻؾ߈ִη֘򜝛㱃ֹܻܾۗخ崯膌ќհƽƿЙŰϡм梡̽֞ܳ̎)ч̯̫ѹC7';H$.CR]VKLPME>BIG78!N>>LE.#6*hk_;'+'$)8!# &/0/79975)'704A20e,#*.#%,89'AGDH27Pf59^GDCFMWC:EN3;?>>LUW=522-53158@HDEBPNBGPC<90,20-&)*?cecmj_QFI>;ZYYYZYZZZ[[[ZZ[[ZZZ[Z\[\]\ [\\]]][[]]]\[]\]]]^]]^]^]^]]^]^__^ ]^]___^^_^``^`_^^__^___```___^^^_^_`_ ^``_``_`_a`_`a__``_`___``_``_^`a``_^_^`___^^_^`_`_^_`_``_``_^^___^`__^_^_^^_^]_]^_^ ]^^^_^]^]^]^^^]^]\]]]^]]]^]^]\]\\]\[][\]\[\\]\][\[[Z[ZZ[[Z[[ZZ[ZZZ[YZY[Z[[ZZYZYYZZYZ [ZZZYYYZYZYYZYZYYYZ[[Z[Z[[Z[[[ZZ[ZZYY[Z[Z[[\[Z[Z[ ZZZ[Z\[ZZ[[ZGYYZZZ[YZZZY[ZZYYZU̍vܫiSvk[PwqmO[wX=WVVVWVUWVUTUTUUTTTSTSJ8Vo4iIvNAM7Z5{F]]qNduug`5|hoI,\PAIH\jhHPjEeNb^WV}[awefsWkeOhffrbSnX}dJmYgќ}Էʈ^[ZqխjĀKs->F^ɫl|lnq_nFLɦxՑhjKOOPQQPOPQPPQPQPPQPPPQPQPQPPRQPRRQRQRQR?QRQRRQRRQRSSRSRSSSRRRQQQRRSRSSRRRSRRRSRRSSSRTRSRRRSSTSSTSSSRSSRSTSSRRQRSRRRQQQRSRSRSSSRRSSRRSTTSSSRRSRSRSSSRRSSSRSTRRSRSTTTSSRT +UUUTUWVVVUVUVWWXWXWXXWXYXZYX +YZZYYZ[ZZ[Z[\]\]0^]]]^^_^_^__^__^___```_``aa_aa`abbababcabbbcabcdcddedddedddeedeffeefgggfgfffghghhiiijjjiiijii55j5k5lk5lml6m7678878789::9::9:;:;:;;;<:;7BA@>=9hdcbcacdeijn=MXUVULJGFQV}z}rK93I<:;=;;=b;;>=ADFFEGFFGGHGFDEDAA@A?@@>@@B@=>JVJ=@@=>?AA@CBCCRYQ=>RVS`OIKLLMKLNOTMEIRR.,RRMMLJKQSRvHvEMOPQRRSSSTUVVVXWWXXYZYXYYZ\]^__```abbccddefghjjklkllmlmllmmlmnonlnnopqrtvxyyz}|BBBCCDDFGGHIJKMNQRTTTSRQQRTUVXYXYZZ[\^^]^^__bfoyowyqijy~dz~|{|yttzyne][[[\{Ŵ;zhp|vexv}~zxutsuuvljpqjjkeccc]\\YXW[ZZWOJKspux|yutq`_jniallmkmndYXZbd`^_`glfgijmec```^_^cb\_``_`][^bceflfO@seeitDQXUSKJIDFFHCAIKGHGGGF@ADDA@@=:;>B@BB@?>@;>C=),**A(NED=<=92,*+02)+22:<442=;;>511.&+6:765-('')-()-,'+1355765213249878<<=7=>94.(%!!$""&-469?A88C937241$),0:F71/,,/,/1880-:<99A><52//,**&$-/-+)'()(,,)'#%&&)(&%$A'+)'*++(*,+*)('(&''%&''&&'!$" !+-/'(%! """#&$ ,'''"$*%%&#!""!&&%#   ! !-0,(!# ! &$! 61-+310./0+,2/,0 &#*#!" 0&*!!7-01!# '" !#43$! L9dUW5685ZRQP,Aid[WV`bK=;@>@FJOS6;A0DycPKHSMB\LE>DRIOFROKHRULJNVY8DSTSOa__\MQA?RQVK>ECJGH;<7<2==@4F$.T;;01>C9,RA 6-XI>8A*;CL*"D6:EYNOB/EAI\,))FB#>>FJ:#$#!H\$%*'?-A;;DOXPJ=*&QF09<=5-1603:=RU7:8QG2XKUUWn,KD1bTDN?5;J89>)9H0EQMGFB-R64P1'K=9;0Q=@SUDY7EHTEK>5O=2AM.[X?==7G710M01,+I=0Q679DR8D7M2NMXKBDLPL27PVVXEJN\KJRhr]^sc98=W3)=1(29//1>KWQLUYRSKQW]^\[W6ULFP::>1HYPMMTVQQRO44JNKFD5(930@J>\WTS_knCIOWUVSTc^V_f[O^Q*P]49G!6iq9d`EZS.-E=Z^VV]k][X+;PHOS@*;6X[`ZY?<'+AMVLKRO782(-6#5EQG<=AC;;9=<03=8"47196;@>/*E?&0%?(<),) #KVM!  +% '$0!)& +IN@!   !'&&#%!,!a#%)13;(/ES++I967&%-**&1/"$,%!4QOM^aVKBXa؄ZBb[gD_t9:􎿓G&<(*1%7'YhrE<*)D^r‰ݶZ>Bi9&"[D`Mnqsݫ`y7 8'5_6[5~*5ArB=]8&" --..#'";3 a{,;()$- ")!:C86]0,wԭĈdsr@5X}% SpU8U+ +4'(l61>ٝTEx:** bWM2ф0քԄ҅Ѐ6WebeSPLFMNSF=?L?LdbXJ?859STSPRE\\ZVXbdeYbalsC.273=@G4:611+47654/WTRUXVVX_gd`5IWQQLCBACNQT3%!2*'())+,))++,/0234335577877876454798::;:85:C=49:6779;;=;:5BGG;9EFCLCEFGIGFFHIJFCCC? ;CEABBDB?;<==:97422699987555/02)#337432484:?ACBB{ww;64366243241,**,)*' &*-0+'(*,,(-//,*+0345.(&#!$!'*+*'-1)'-.'('#! !""&"(''##"%)'&""*('')(('&$#&'%%'*))$&" + + !$&!",$)  %" !!! !1 +        + +          / +   + + + +  + +  + + + + + + #  + + +    +*5/1/+*+#:60/.56*#"%#$(*,, &&B5)'$-'!1%! )#'!))%$)+&$%)-'/))'3120(,!!+*,&$!% "'*!!$!&%!$!$#"  %%-.,$"&(*&,'!,33$')"##$#" $&$#0-)!'& !'&$"($# (  ")" +$$$%$ ## #2&&$"'5#"'%"("%(&$8-664J505.'*#$) ##'.+0+&.-+,0'&'!2 &28&5 ''0#& (*55.#"!))"$ $*+"- :;F<6:AD? %&(($$-''-5:27C>,3(%.&"1=GDAGNGH?CGOQONH/LDAI210!:FB?<@@=@CA)*>B@:9)+&"042OOQNU_c=EJQONLL[VOX^UAIWK%EH*0: -X_0WR:KG'<0KMGJQ]PNL/;6>@1!%@FMKK600?FLJ0 .8C>@AA><>@  !"#%%&(**-///.++)'')*+-.00/000/00100//27>ELRWWTVi|hfhkhaTMN^o~[\Uvrld^Yavgerle[TRMKLKNTSOIGIQZ\\TK>50-/oɼxx{ɪ㊦˻ɩα௅ٲǁ˳􆇏ӽű̺¼DZ˿վջǽǮ̀ūµʵǻѷ¬񏖘󎦝􄑐ރۺع̈́ɍ⻻ε̽ʾ׾Ǭ̾úŸİߥˇջɰڀǡΧ̴܌ÿ젿Өэ֢ŸҖ쩔趷÷˼㷲әʃۊ㎒ܗϾħΪ޳檺Ŏ蛏ޒɽɒŎҭʒƱކ·ޜͳ׷Ĺۮθ쨡ʱöĶ˴ʂ٪'חƕ݅ԥ䅳ɥɾD=',Q8)9HY^PFIF>'4JJGDSO9/LACN@MRQ6-Y]L&0V$+%NE%2MB7://4#+&LomM*!U5,>)-KE:A'<*FD*C$(@3aGD'#!<* "*22-4=:55-)9?-@10^,),,&',4.*=D?G9=S67;aBG@CQN?9EQ539=@KDTUC>538747>KGDGOQRJQB=85-/17*&%*Ln_gheWEKPLQYZYZYZ[[YZ\][\[\\[ +\]]]\[[]\\]^]\]^^]]^]]]^^]]^]_^__^,]^^^_^\^_]__``_`_^^_]__`__^^^_``^]^^__^`___^_`_`$_`a``^`__a`__`^_^``a``_aaa```a_```aa`a_`_`aa`a`_```_`aa``a```a__^_ab` a``a`__``_%```_``_``___``_^^^__^^`_^_^__^^^_^^_^_ `_`__]_^]^ +]^]^^]]_^^]E^^]^\[^^]^\]]\]]]\\\]^\^\\]]]\[\]]\\]\[[\[\\[Z[\[[[\\\[Z[[Z[[[Z[[ZZZ[Z[Z[ZZ[\Z[\[ZZZ[[[Z[ ZZ[[ZZ[Z[Z[\[ Z\\[[[\[Z[$\][ZZ[Z[[[\[\Z[[[Z[\Z[\[\[[\[Z[\\[Z[Z[YYZ\ΐ^mwh_VOi֍SQZf]Jox~dTJ{s@KR;t~~ѴGoPJVWVVWVVVWWWVVWWVUVVWVVUVUVVUUSUTPHDX>\tp[fSjHIoPbyȸ~wVU[zף|xAOJ@P>O[]:3:8>SNuHbh=lhSLdC[S!N̉GD9aR_/md_s_|nwaque\`lbRwpdw{_޹Øn|vruitwd~Ѐq£ysmcM\LPQQPPQ PPQRRQQQPQQPQ%PQRSRQQRQPRRSQRQRQRQSSRQRQRQRQRSSRQRSR STTSTSSSRRRSSRSTSRSTRRSSSTTSSRSSTSSUTTSTSRSSTSSSTSRSSSRSRSSRSRSTSSSRRSRRRTTSSSRSRSSRRSRRQRSTRRSSRSTSSSRSSTTST UTTTUUTUTUVUTU +VUWWWVUVWUVWXXWXYX%YYXWY[YXYZZZYZZZ[Z[[[\Z[[\[[[^]\[]\\\]\]^]]^]_/``__`^__`aa``aabaa`abaabbabbbccbaacbbcbccdfddede feedfgggfggffghhihikjjihi5jjkj5j6mlm666766766676 7677887878878989:9:9::99::;:::;::;;<;<;;=w_so`YUVUY^>;?C;7ZcXRD:7CdX[\YO]YXW]hnqceins?;:I=2C<<<;<;;;=<<@CBBCBCCCBDDBBB?@?@AAB?@AAB??GOC<<>><<>@??AOR^ZD=;;;>@@??><<:=BF<-*)'A'MJBA<@@AFDB?|A@>tpv=::;:74894:::96513,4:8779BHDCB<;785688999:85*7/15@FB>EC=A>=@:474.',69<:632<<:80.'*?;;552+PNO(-,.1/)+41/6410336359769;;@<;9+%"!#'--$$+18926;=98A:6702(#+16<@41/,*-**.73-6<><:;2-,04403>:4530)&'(1%$&%('"&%<@" &$$)+,-)(())*(')&)+)''%%&&&$&&$$#&!S!(""#"+&%%! "& "#('(#"%$&&"!""!# &+(% &!#!"$)'##"447 %$538.--  !#4! "#)& , ,'$,**-%!'(%/,'"$*3-)&$"gjh\a4:8[XTQ16EK`WDP9;7H`N[e]\TYFNFVMSEGM?A<6PXOMKMYQGMQGDJGGEFF=YWKJGIDEI?2821:5660V\N:VPJIJH=B<:M:21RU0?461+/2+,0+4J*0---BL75\_URAC(')(%$C=,3H(!"D#$Z5),+&$Q@;K&8)GL09?U;6-5ai8Y1/+];MC;=dP-9=@85:>C=N63B96HLPOCQ'J2;1FTp6J8R?SU9R(\.,SE*P@AOYT41XZCLIDLEBEE99E12970NB<9G;IPH9EmJqASDE!&18*3ATJP?N[RMQgnIGOWYSSVg_QYd]AWJ<7A\T>.FO8;heIh[EBJH]Z[fmSZ]?7RQNLG-9(V[X\[A?J-MRVXR:.CJO?LNH+60"C*!-4"/>?<9E< $5.5?4BEF%"DE8!:8+"<0'#!9WU6 ; '%&#(!#  +"C- +$  )(%#)/+ !!+-813H,+,M4:68C;+(7A$#(,30<;)" #.,()01/'+#!!=YINVWP=EtD)ۂNWS*%$ſ~_#**!@}Q? "(4>"ݍހռ96,"(9G:dƻrOϣ-4Ge3&&,)K"(b':9 O鮓; 9:&)1.2&*"!-*! D/B-#",,!s0+@QbY5Q:]NhıYfexay?/>=1&_(O6fgaY0"%B%$A"KkH3BIp߯cJ94%{-@ktWxԄm҄ЀU6#rrhWQMONSU524:44ZbWP@51;TOSUTIYWVTXajjZ^ejn:/-=54>D4H8'0.A<<:40[XZY`]XWciel9GPUTLHGFGKOHEGL]9.*!+)(*+-++)-,*.0013123544534232477898;859?95667569<<<;?=KJ>;tAG"ABDGIGHFCEGJEDCD!:9!@FHPOQTQUQesk񮯯^Ĵwoـit{~ugxwyzttrvuvqxpovxwwurlpqklifgdhjjheŽXWQKyqolrqnmlfdekmfgikrpnjihfeaa_]c`a`_ZY[^]^acaQEronvFWWSODED=DFGABEDEA@B??<<=;654347::875210332)"2446576598<=B@>trw;54451.24.2.,,*+''!'-,-*'*.+..+/./,,04542)%#""# &(*-*'-,(,**)%$&$$$"  $#$#%" *+,))%79;'%"''&$%$&$&)&$&)'(# !! "$"#+% "' $ "!!54        +  + + +    + +  !"  +  + +  + + +    +  +   +  + + +    + +     +   =<:37 ..)),(3.#+!" &%'"&"',:2( :;4(%,%&&%# % *%*)%'+ './*$$$0'.401+/$+%,&-!#'%*%%$%,& $& $!""#".,%$$%#!&   40','$"""  )#%"6)#"!%" !%"" $"%(#!  . &&(,!$**((!'("'7$"!  "#)'1$)#*.4.7(;+##5+!&+(%''-$-*$%&))"%&-6? ,!-%-0 *&$.&%,)!92&792<;7;<,$% !"+'11*#,B0;+""!&-! 4D>2?KGED?EGJHJQ2JBBD891+<@m@@BECBDE8!9CD;90'&$*@.@PHFHZdBFLSQLMO_XIT]XWxB306MG47"+뻮ЙɁB5׎ݯԊ긋ܻ–㗓ƒɦԃQݕӤ㭠ǁިɐaaʧٗ7    ! ! ""!!!"!!!""!!!"#"""!"$#%$$%$###$%%%&&$$%%&%%%$%%%$% &'&%&'''&'&&'(('''&((') }@Ⱥꁋ䆒սùfǸóһ{'##""!"#$$$%%%$%&'&%%&'&&&%%%'(&'('())*)))+,+,/0022345455677766655434435556:5675788879:<===<=>>=<=!!""#%&()*,..-,*)(('((*,../../././/./4;CKQSPNN[tzd]beb]YSOP^q~VVM}mlhc[W[l¼tncZRMJHFEGKMLIFDEKSVWQF<2-ZZƿ|u倘ʱۀñͼ튃ѾʳՀ٬өՉȣ܅ɿȾʳǻ󇓚ͻкƻξ˴ưƼ½Ƨ˴牶хûǦ¹ǹ̹Ѽ滨˵ƽƬžɹðе聸ǂӻ£Ԇڒչߎdžϻɘĸܞ˭釕Ŗ܍ղԊѽɪܔ䲄ӁĻѭͧ헅؄Ͻĸ͚Ƭdó¿…ȳބٳԩ䥿řءжɶ3LI1AD"1VXYUFGDNF.?NUKRP.2CEIMI*.3H:2'!.-$*243.4@>97/-=T:?/1[...,')10'47D>B>;P75sf?G?AWN;>DM=6:@ORAW\<>57:788CLFDIIWMHQ<350/.0.)&(5U8fgbREFWGM[Z[Z[[Z\[[\ +[[[\\]\[[[\^^^]\\\] +\\]^^]\]]]^ +]]]^]^]^^]_^-_]^_^^]^^^`_`_`^`_^___`___^^_`^^_^_`__``_^^``_``___``a__```a`a`_`aa`a``a``a`a`_a` _aa```a_`a`a`_`a```a`baa``a` +a`a`_``a``a_`a`_`aa`__`__`a__`_ `__`_^``__`^^_^_^^^]^]]]^^^]\^]^]\\]]]\]]]\]^\]\]\[\]\][\\][\\\[[\[\[[[\\[\[Z\\\[[[Z[ZZ[\[[[\\[ZZ[[[Z[[ZZ[\Z[[\\[\\\[Z\ [\[\\[\\[[\\\[ \\\[\[\[\[\[\[\[[\Z[ZYZZZTzf[}|kKp`\jzPtL=bmރˉƥ{\WXWWWXVUWVVWVWXVVWWWVVVWVVVUUUVU:YFZZpLMBQZMpTeij`kANiSIa6vm}Y|Rfc86<:ug>DnvD__g==GgJ}W]XE{Z]Q;yZk@chhBgzq`yzn^mnjomn|ذcqelkyQZS]}pһa)g]tzuvңk_]yY@OPPQQQPQQPPQ RQQQPQRRRQRQQRQQQRQRRRQQRQRRRQRRRSRQQRSRSSRSQQRSSSRRSTTSRSTSRTSTTSTUSTSTTSTSTSSTTSSTTTSRSTTTSSSRSTSTSTSRSSTTTSSSTTSTTSRSTS TSSUSRSTTST +STSSSTTTUTU0VUUVTUTVUVWVVVWWVWVWVWWXWVWXXWXXXYXXYXYZXYXYYYZYZ[\[[[\[\ +]]\[\]\\]^]^]^,_^___^___``abaaab`a`abaacbbcabcbdccbbcbccdccde4fefffeggffefgghgghhghihihhijjkjjiiijj5j5kjk5566lmmm5676776778787989899:9:9:;:;:;<;<;;>Y[qd`ZWXUO2-4A935;VWNDq3=b[[\WLXS\[\bmqjhknp98=EC<@F??>9>>MIHD?;=:8_::98;=?==>@?@?@B@@@A@@?@??@@A@??=CF;;<;<;;>A@>=PZ\^G8o?TWPOFFHFKIGJLHGFLYRNUYRONRSSSdVhg_JPQSTSTTUUTVVVUVWWWXXYXYXY ZZ[ZZ\]\\]]\^_^``aabcddeffghhkijk +jkihiiijjln"mnpoqpqrstwzyy{z{}AABCDDFFFGIJMNNOOPQRPQRRUTUUUVXXWWXWXXZ[\]dmv|}vs~nndĨyuuvvxzzwrmhglrutof\VTqļ|vwqƿp~rurgjuolruzxrmsusrpkhjhd`b`_]\[YVURQOHDLFz~}zwtvtsc]b`cfjhgf_efacbada^\]fkfgfjphc_a_`_Z`b`_`\XZ^`dikfUD|heizJSSRRKJEFLMHAFHIJHHIGFABD?<>><<>?KE1,-';'HHKGAAACCD?@ABBA?wtv;;869646538<99672/37;979=??>>99977756l69;=:;961+7-/:BDA@GA=B>:A?=C??83+,6<:;;557<;50,+#)9=<7400-+QL))'+,)&).35412652334;789=?A<+*.21.)(+.19469<79@833),#*,13:?420-+0**.53.>;;83,(0;=<;<@>75-+*(&('%"&$#?AG7D')*&$))'(((*''('$))+,-+*)'&%&&''!&#!"# %$&!!#"%% !!&%$#(*'!#&))&'(*,)$&#%!""!%&%'# $" ##! "%##2343.30#+#"('%4!$!*#*! %&! "##!*%!"#",'."+!%=0(& #!!'*)%"1ubch2691VSSE0O:\>IKARAZc^WSJNDDAFKEHAE4@>3G+AEEF>MHIJKG*9DQOLRHABI?A2>?6/HL/@A33:<;FMPB)I7<9,/MS6RH3D75-3/3..'/2;9>86\COOIA@B/.:+,S0.9?3C.H6O7>,+1GF.+5=\gG=+?[ELLMHFG=;B[01\7j9Ni0QS`h\R/*H@JFN?[P%#&3G*/F;6?EFKFMSVSTU7NKGHGNr8)/OVPSSNPLQOM2:RRQK?&/95A2JDP[TSbjZ5EQXOS[n^KLh`{V\8=),"#!62<++ )LWH  25 + $+/%*&%*'**$ "+ + + )*&$,?%* e))252E.*XT2=56D9&*3=,$%,8>*:?$& $ $.*(*-5,%/ $A*LONF<=Z`Ev4ߚSH## *)34P׶mjFqƟtQqQ1/5QؠЈݕΧ51'=3 59A!:Hk5J_M(4hJ0-- ()LVjS̋5 Ux1.B9/$ $37(.8!+=/*"+: );WcH] :&&`ZCll/@L3bD,#" (LîLr>mb&[)XnH95QQxkN-$O|GwtՄ +Ԇ"؄!ц&Є?لi?qqa\URUQI.'.84/09WWMAh/7USUVRFVQ[XWaklbbhlk3-/;;5:?9<7155D@?;53]]Y\_a\\ecgg8?MSRKLHMGFEIFFHIY>6*I-*(*)-,+*)**,/210/231/1333444534559988:;6885676567;==:9CDHN?9o9C@BFDDGEGCCFHEFCEG=CDDECABA?9:<746989977755323290! .497899:;;8;>BB@>yvu96213.-/0.00--)*$"(-.-*&')*,0..0---.3i54,&#$# $**,()0)(,(%)&'-+-'$!%$'%!"#'+-..)(&#FD #*,*((*($$$','&')'# +  !$"%,#"%  #!$!! !"&%!"23;,-     q +    +        +  +  +  + + + +      +       +?77;,,)!+$+)+/!"!5!(*%"#-1'&19A.--(&"* *"&% $' ',(%,6,a('#.$'6+0+.' 0,+#$*%$$&&"(%('##! $#"" ""0)%"##'&&'#"700#,$'40,("% ! !$#! ##"#$!v#! $" '$ + ###'*""**(#(+%,& ! #!#"&%##!(!#'!%'),**"+",*(!'&5#!")2:86 1,+,)#"3+0"4"('&""#9##%&') !#"/6&&'5/79=<:;6 ,,7 +<:>ED7.)$#)+$$$;..7>=C>BEJEGL1HDAB@D.%AGCFE??;AAB&-BDB;0!'$0$96DOLJX_S5EORKNSeVFIb]~XQ.75V)+8DK22]]@YYT.I/DHMUUWXR3.9;,211CKGNK2647GCKKG*)<9CGC#}|}|}|}|}|}|}~}~}~}|}~}~} +~~}}}| }~~~}}{|{|}~}|{|}}}~|~}}~~~~~~}~}~~~||}}}~~~|}}|~}}~}||{|}~}|}~}~~~~}}}~~~}~~~~~~}~~}{{|z{z{||}}|}|{z|}}}~~}}~~}~~~|{{{|}}}|}~}|}}|}|}|}~~~}|} ~~~~~̂~~~}}}~~}~}~~~}|}~}|}|}|}~}|}}|}|}|}|}~~~~~}}~}~}~~~~}~~}~~~ ~~~~~~~~}~~~}}}~ +~~~}}~}|}|||}}}|}~}|}|} ʯˆƹ蜬ħ˛Šˌ׷˄ǫȨӞ͜۳DžѿҳڰżǬUǾمлÿöJ"  !  %  Z!Vꋾ|ז󾇾eW2Ulf}8K;u*" $*;',5&"<#.4ؼǟùZ=9!,َ('IӴȥĨB1_٬ծ̟ȲݐݪߥȞ踝ΪԍMϰѪ󄝳иʖ鋹Na|׿qn֏瘦݁~뢁"    +    !""!!"! ! !""!""##"!!"#"!""#"""!!"""$###$#%$###$%$$%&&%$$#%&%$%$$%%%&%'&&&'&''()*''''((  =ꅚ˽źЂʿǼh׀Ͻʜ宂C($$#$""$%%$#$#$$$%&%$%&'&''&%&'('&&()*))++,,,+,-.012113346665565 643344346546646886988789:<=<<;;:< !!"#$&()**,,+)()())*-.-,---,-.-,,-./18AGMQNJFNd}xaSV^`ZWQONQ^p||uffeb]WXfxpmc[SKGDBADGJKIGB@AHMRQLB5._UtIJɾϷȀ̧ɃĹ犝ɹɱ˾ʷѾ˘˺Ȁ¾򘭮Ѽÿúǻ½Ǹǵ烅΋ވڸН۵Щ˸٪ʔ೤ξƻƱǮñ˺ކժӹ˻Ÿŋрനц̪ϥݪƕϤ仛õ֑ğ䎵ܴߔտϭΘКӮ眏ϰ˳̪NJvο̮Ͳ㚪¶ˈؕ遁ꆞ廼ʿ̶Ϸ䖸˭ʸ%CQ>5K)(L^WWSJBF-=@ORNQI>56BHNV@@EGF=?\J&1F(15>02+E-#-3JmhE/&5WM-B!-R6!I.30KHE;5Pg7pM2NcEG22+ #&.41.-3;=8725CYA9+0_/0,*#&6+4:.<8=ABU;erFE?B`V6=EL?9;:FGDHNGSMAPA7//311**)*CX4edWIGSU1T[[[Z\[[\[\[\\]\]]\\]2__]]\\]_^]\\[]^]^^]^^_^__^^]__^_^_^^^___^^^_^^^_^^_`a_`_`_a``a``^_``a__``a``aa``a```a`a`aa``__`aba`a_``a`b``bba`abaabb`abaaababa`a`aaba`a +b_abaa``aba0ba`aabaa`aabaa``aa``a```aa`_aa```abaa``_a`__`a`a`_]__`_^_`__^_`^8_^^_]]]_]]^^]^]]^^]\]_^_]]^]]]\^\]]\]]\]\]^\\[\\\]\\]\[[\ [\[[\\]]\\[\[]\\[\[\Z[\\\[\[\]][[Z[\\[\[[\]\\\]\\\Z[\\\[\\]\Z[Z\]]\[\]]\ ]\[\[[\\[\[\[[]]\R[\[[[]ĊOgjɛui[}uXFt]¼|vyӌ_XXWWWXOLWVXWWVWVWWWVVWWXWVUTVWG[MT?DNQDbib`vmaN{:>UCNYRzzdwN[i|֛]2EQDXF:Osd@Zqorz[gq\dIzZpv{ZQ\ymfQwZsTywb|o`qqԃw`gn{>qWsxyvI`uhZVZzl|wg>ׇ|VyÍjxtKiwsj]ksxLGQPPQQRQPQQRQQRRRQQRQRQQRQRQQRSR$SRSRRRQRRSSRTRSSQRRRSSSRSSTSRSTTSRRRSUTTSSST +SSTTSSTSSST STSSRSTUUTSSUT +SUTTTSTTTUTSTUSUTTTSTTSSUTTSTSSSTST +STSRSSTSSSTSTSUTSTSTUUUTTSTSTTTUTUT(VUVVUUTVUUUVUVVVUVUVWWXWWWVXXWWWVXXYYXWWYXZYYYZZZ[YZZYY[ZZ[[Z[[][\\[\]^_^_^^_^^_^_ab`_`_aa``ab``ababbbcbcbbbccdcdfdeddeeefgefegfgfgggiggh ihihiijjkkjj5klj6k56k65566mk6676787887988789 899:9:999:9:;<;<<;<<<:<@MXqpdd`WLC?<@D@?C=EYFAA:7Z\]`ZSTT^c^`outnspod5B@K==GD=vA<>HIECA8=;jfkgcigcimB?IT\RUSYTJKRJKJMMIJ~eVU4\A@==;c:87866469;::;=>?>@AC@?@BB?@??A@?>==>EH=<;89;:9<<::I.^[B9w=@@<<=>@@>A?<>FED-/.-JJLIJEACABADBA?@CDBuog8::8:636956:88871559;7:;=98::68:9785lq79;<<9833642G@@BBCIGBFC?DC@;5.--+753.7;45896/+'',9><733//--(L*1-.+(',1201/3342344:646;=<&%36540/)&)(*2026<::B:44)0$0,048=53/,+-)(-23/589/*3@D9633.0//(-**(*&&($#" !9B<%'&'"''#$%%(&'('&(*((+)))'#%&'+,%$"! #$$"  4$%% !!$"!! %$')'&('$#$%" !"##! #*(($$-.'#''$+'&$%%""3/411.!+,()$#!#"! %)%(" !! "!!##& ,02")%!$(## $&$=wh]36520fD8^:0@+D0AVw;:87XCE@@BHgG2T5,][_]MSJ>I@N=OPALCUT:m\WZ]XNMA:F:QZ]YSOTL4Ue3WRQUPA@IBCOOSKVUOIJDCEA=AIE=MPSFTUNF?KNFAODA;XJ/7BB@?BMQTOLHKFVXL=<55EH73+`NFIHFJBOEQ7>HLIIB;7GC=3C6./LB.-BJ&@JCHK@@0OOC810UNU\H576+560477:IYJEEHA?;WA=?&'+-,-/+('$J<'G,&$"$%%$&/)++816>MTPJGMRPPSXVLKGDMOINJA=5:58=>??5,SVK.TUPOXZUMD@;SG1C-@0:0%6_`;>1$ 8$11IF>799:G<-"1`Ch[IPJJ0=4F;6L?H6_574*1M0M0SUGM*=RFYGWh96KLK=5-AB;/7189[XjWL7]\]R9G0GqB@BCC4T6-)H?M'$23-$CH?PSU|SRV/NSIIH\0.J@RHLONPLMNJ@&ENVRA)08@>D?EP[^VYjgYXMUIUZ\UFU_bDQN?=sH?IVZc:;mbMef@-]QBNQWbhhgGBGTRDKG.*.<_dZYQ1C;UNRTTS:&KRMMJ;7D/+==LIJF?7=(31>BAB;0!+17@I358<8"3B4 + -,!5*2&*#!9TR/ $?5' *1!1'&" =O)Q2 4I)$ (,(&!"2@,$ !$"*57J2R\h;:75LB$)1;/'&->?0!7##!"'#'*',1,/,"2'+@&LOG==LpDOh8_ 5.Pۋރ»؊J/!%=GAqԬѵں..FF+4A&,4A,\骣ΘiME|])'#FeЁ߯TKƓ}%)CW=E7.(1 'G/5%""'$G5Ok)1-W.J?%| -qǪ=/|tLN,D'_yE2DE5y]!1>>104KXyֆ׀̀xsl``\TH<547=;:=:DWF==53TVXZTMNOZ]Y^lrohmllZ,24C77>=7l846A@=96/65^Z_^Y__Zb_;8COUGJHOKBBICDDIHFF^A=r#@0-)**,*)(')()+././//--02323355456899:99:8<<67855666::749#GH<8t:=:KHDEFDIIFFFGICEACEKNILMSVRI~ezW{ͱýƽľ􀉖rjdɹ\gp||{zung_Zqkwotrxunjtuuusrrusronmjggdcd`ZYQLLwurwxuwzxsyrnttruqjggknihjmnifdjgfe7e``_iif`\XXZ\^^egkOqqo{LRQOIGD=?EDA>BEEFDB@A>69967;;785853262.,-47:98<:9<=@AC?sph64324-)-0+,0..*&%++.-*)%'(,/0--..,/0io6/(#%"  3,'('+/+),)'*))('%$"! ! &' "&-.0//,+&$"G###*,**'(''%%'J'+'$$&"  &&(,# "#&"" "!!!"' 7+61          +  +  "  +  + +      +  +  + +  +   + +           "B919$1!(#1C !"!1&'%%&*?#13/32')%$&('' ,)9-.01-&#!$&(-1.)'*%+5,*))&!$&($*)%!""%#&),#*,'#%%!)$ /%!)))'$"$ ('#""7(### $%&!! ! '!!$!(!'"%-  +#""& ) "*%,!%$ "$#$&*($#! ## ##"()&))%#')&"("12% $%"43-,,*()4!60#($%5/!-'(1!&5,1",&63;?$'8:<<2$/2C;7+IIF<%)*6 -!)8?>@>39@IF3")-.436COSKM\]U^KPFOUXRDO\`BOF68kA4>JMU22^TCW[8"I<5?DJR\\[:6:GA6@;%"%0MQKNH(82JGLJID&8=BDA0}|}|}|}|}~}~}~}~}~}~'}~~~}}}|||}}}~~}}||}|||{|~~||}}|}}}~,~~~}|}~~~~}|}}}~~|}~}}||}~} ~~}~|||}~~~~}~~~}~~}}}~}|~}~~~~~~~~}~~~~|{{z{|||}|}}|{ |}}|~~~}|~~~~{}{z{{|||}}|{{{||| }|}|}|}|}~~~}~}|} +~~~~~~~~~}~}~}}~~}|}|}|}|}|}|}|}|} ~~~~}~}~}~~}~ ~}}~~~~~~}~~}~}~ }}}~~~~~~}|}|}||}}||}~}~}|} ʸ̳Ųάʾ۽ꥆܰ´ЛۊͥӉǿľ׼bǴŸʾɩ0! + +    I'؆ׂòճ]cE:8_򒁞䕠/+++T*,'*5Jۚāc!3"K!8ē+rT5}ųH5?ə•ɫӿڐԀힿƒ胅O̒ӍնܯނYdSuݱ̾㥟ߋ̕P   ! !  !! !! ! ! !! !"!"!!"#"!!"##"!"!"$$$#$$$#$%%$$$%$%&%%$$%$%&'&&'((''(()((''((@¸¹򊏝ƺֺX՞🣠ƹy'&$###$##$#$%$$$%&%7&&&'&'(('&((()**++,+,--../01322344456554453344454334433564577788879:;;:;;;<< !"$%'()*)*))''())***)*+,,++,,++-+++,-04;CJLKGDFUm~ydOMTZ\XTOKMT^lwzu~j`bba\XXcuofb[SLEBA?@CFIKHB=<=DLNLG<20dyȻƹ쉚纬샗ǫȀ˿ɧ¿̯҄κŝ´֨˳شо¼ó¼ʼæ󏈍쏳愋ަʥͿֶ׬ĦʇDZʾƻ¼ųўęͽϼнƪꐭ٨떌½œ߼׆૱؏ÃЏέ泜ќ󇤕̗蜛ڙ䃚̴Ʋܒͽ䴲޽ɃǴ垕ފєΰñÞ𗸶Ӧλ<7OE+?;&5ZZZWIBI)4@UVQNNJ1+@I_XCGMI=$JP4>13-@,04FD>;@1"02>ilY+""4Q]>83,!%E^!.',+(./,)%89739CbD410j.2*'#+32?5/5:B1>CRNe,N;35;:EDAA@BKQIDCDO?;//51,(((2VOO7bKEOW8Y^[[Z\\\[[\\]][]\[]]]^^]]^]^ +]]]^^]]^^_^\^^___^^^__`__`_^_^__``_`__```__``_`_`_`_```_```ba`__`aaab`aaacb```a`abaaa`aab`acaba/bbcbabba`aabaa`baaca``aababbaabb`aaabaaabbbabbcba caabbaabbaabab `bbabaaa```a`ab`a_``aa`_```a`a__`__ba`a` _aa`_`^_``^__^^_^]___`_^_^^__^^^]#^]]]^^]^^^]^]^]^\\\]]]\\[]]\]\]\\\]\]\[]][\]][\\[\ ]]\]\]\\]\[\\\[\]]\\]^]]\]]\]\]]]^\\]]\\]\\]]]\]\]]^^\^\\]]]\[\[\\\]]\]]]\[\[\G^[x|hLVч˯̯dTـRjWpucYXZKKm?XWXXWWXWWWXWVWVWNPHVPCDB:j]SUX{N_jl=Pg?miaBLQTTsXiCBKj>7PhW}?N[:4/Utc}ouq|\9go|hw~K{OVnRmVKbbZd]ætYrablS@MneSaOC_~Wug{{ztJqqk_d~`NCR@>ooyFRPPQRRRPQRRRQQRSRRSSRRSRQRQSSRRRSRRS RSSTTRSRSSSTSTTSSTRSTTUTTUTUTTUTSSTSTTSTSTTTUTTTSUTSSTUUTUTUT UTTTUSTTTUTTUTUTSTTSSSTUTTTUTTTUTTSSTSTSTSSSTTTUTUTUUTUTTUTTUTTST>SUTUUUVVVUVVVUUUVVUVWWVWUWXWXWWXXXYXXWXXXYYXXYYZYYZZ[[Z[Y[Z[[Z[\\[\ [\]\\]]]^^]]]^,_^_^^_a`__a__`aa``aa`a`abbaababcbbcddccdddccde4feeffghgffgffggffggghhghihgihiijiihii4ijkjjj65k6l5ll6776667767898999:9:;:;;;::;<;<;??=o`_bjk`mkku@BS]UPXY]LNTMLLKLIGE~}RHG3O:=;88776654467:i;9;=@A@BCFCBACA@A@?@@?>;:;>=9887888:;::BLTVQ<:=wxNIHHKJHHIKKJKKPPRU]SQNOSUYn{bXGPPQRQRQRQSSTUUTVUUVW XYXXYYYXYZYYZ[\\\]_`bcddcefggihijikkkmlljikijklnmmlmoopssstvvxxyzy||}BCDDFGHIKKLKLLKJJLMNOPPPQQRQRQRRTTTUUVUVWY]bjrvvrlm{|}ȵǼytqqomnrrpmg`^_eklje]VS{~|ohǼhs~|tg`zumdosnsustsrolmmnmkkjhgb`_]WOKMJHE|tvvxxlakkulhllpmrgb_a`b^[YZ_eaabgkeaab\a`[]_Z][XXZY[\abcnqoTpmu|RQQPPJDGJJIGIMNLIGEC@;>@>>?><;==@?DB8)/-9(IHHDCCDCCBCA?=91100/14.,-5;11870("",4:85223-311.(13/11-(+3323/3432145;658>;)(,1265330-('*,/:8;AC<=@532'/#--,/1920,+*+')(..*54.+3<>5-,+)('&+()''&$#&%!#'+(##$(%$'%&)*$#&&'(&&%++)(**'&'%%&(('+*&%$!!+('v")%'+!4!(&" - "$(('%""" ! !""#($#$%-,&'(* !%(&$ # 03430 $%#%"%%#""#/1+-- 06,- " "" %$ !,'n<8446`25\9A2/0_F411Bc=\B00S7CcebYRKRMHVCXPFNJL>W4]WZ[W^NG/r?a\UWSK3<6V;=\XSXVD:JG?IPNNQQIIE8?A7k8E7CH>XWPLIP]J312M3;=E|-4GDNNDGDGJA4&'MJDC;8DFC86;22:/4,A_"3''(+*+--*)&%F6'%&(&&%%$$*..-F37RQVWNGR,N+*MESNSOQFIR;>54RU^/8A=756334244gbGnX7@DC><13-CF7044W4YZ]K)=$D>89::I`oL@4'.61=IFSM21 1\]31icK5:6nc[QY>ZtBN6=BAC73D`9U\KPJV5:RF1INRQWN64PVJGIU70;G[ߪΡNe(~/%B}wE|̾zA"-"ABkfQ}Оʱ̰i0.+.FVL>Q?4<ςG%-@*f֋灁Я($*&/1pP8"*1B! CF2!I?*c<) 3F&+6'8%A7]!*(CJT(&N! +7(ₛP-#'G}PZ' +0-7[K1!,U+X23 'PXroEׄԀ6Vxfj_RG:<>;;>=7744HL?E:XUVVVUTKV\`bckwrlpqlTQ84Bi4;72i828B@983566_PRVZ^Vacai7;KXMHLNPDFLEEG1HJGEDS82"5(*('()('&&'''%(**,,.-,./311478U69:987657755655668997::AGD89:u~wJFFEHGEGEHIHGCDCFGLGIHJPRRen~e̍-ڄ؀܀˺wia`^ckoqpqpjcZV~yxwnsuotvtttsoorsrrrqnkifeec]SOPNMI}oyw}uqtuws}tqrrookjiikqnmmomgffhbfe_ac`dc`^^]]\^^`jkjQvuyPNMJH@<@CA?@BEEFB?=<846978:8787788694023/&!05;;;<=<<;99<>@><:voi34310++--,110-**+,*,+& )/-./.-.012gkq4-$"! !"$,)&(')-('-(((%#"&%!!!##"' "'-.000)+&%#!%" *+++&(&%%$&(,&$&% &%',/+*) " &!  "$!j       +   + +       + + + + + +    + + +    +   + +  + + +  + + +   B!64 +#6'$5"":A"'#4!4"(%365.)$+($0!0)")$%-/-/0,/&$>2.,.)&!* !0/*,* # "&%%&'"" # " ")&'##'(('"$' $' 1*!#+,&%"%-%#!" '' "!"#! +1"" %'&+)!!""8.  "& - '%#'($%""'$%&$&#& !($(,//!7+  /312)"1/*++*39?+""*&2.)4.8&&"&/0% '*:9:,$54&% -0662'.*WPMDD,=I&+! #2(+#%).+*">GGFHA/.LQCACK-!+AB?CCACCA=>=5>>?5,3'0,7B>DIWNQ]b?_LPEFITQHESXc?7M=G`&2AQ[\`c_QMSXg09E37SXXO76,FGIJMKG$25@EE}|}|}|}~}~}~}~}~}~~~~~}|}~}|||}~}~~~}}||}|~~}|{|}}~~~~~|}~}~}}~~}}~~~~~|||}|}}}~~~}~~}|}||}~~~~~}}}~~}~}~}~~~~~~~~~ +~~~~~}{z{#|{{{|{|}|~}}|{}}}~}||}}||}~~}~~}{|{|~Ɂ}|}}}|}|}|}|}~~~}|} +~~~~~~~~~}~}}}~}~}|}~}|}|}}|}|}|}|}|} |}}}|||}|}|}|}~~~}~~~}~}}~}~~~~}~~~}}~}}~~~}}}~~}~~~~~}|}|}||}}||}|} ɲӒǫþїǷĥ瓔ɪȊʡϨڹʼnι۱ζ˺Ĺ鶸Wʰ«ɻԸǹȽͼ !    +  Z-yǂݓ̽öqM,CuZk^x߁բZ%"$Hb)+,CDOP-K:Fn#Ad:):ϰōC x9R?=FX⺲جʑ㱇묿ئ鴻ȨKǔ҆脆>(ZSΥ잙ý刊喉ᏀvQ       !! !!! ! ! !!#! !"#"###$#""!""###"!##"#$%$$#$%%##$&&%$%%%$%%#%$&%#%%%&'%%' ((('((('(  Gʴݓ־ķøׅĽZÑӽԂE,$%$##"#$$#%$%$%%%$% +&&'&'''(&()++,,-,--/.//222333454445443442223535444324445678789978:99:;<;=?@ !##$&'('& '()++))*++,**+,.17?EIIFAAKbr|wfQHKRXWTPLJLT^gpmpyx`Y\^]]X[`qk_\YTLGC@>?ADGJHE?:8;AFHFA94q􍟩Ԁȼ۸򆃂ɸȹ̾߀ԧ󼙔핢™͹ˀղѷúŸߴ̶ϸրìѷɽŽ􁎀ıƽdzȿ큉늜ɮɈՖܞݧɪݵٰֆΥĻ¸º־̍ةլýĻý׷ϫĴϼ˰ǯǻ䣭ぁٺ˦؉ژĀżԭ҄ʱŚ孩ʣ֭䘅垍Ź҅ނ緁݋ž뙧dԢְܱױα놵ŠJ/HM<6L*(H_`YL6M[8KTUSPMLA?2@KhWJ>GLK@-OE'+A-#$8-08.N?B=@(!2/:ZpgB&*.]S2;="7O3 I@7\]656?Vajj]0)40L@=:E6-%'297'$3<78?D1I0./g/1+#'+78?3*28A:GXiIhCLA?IYW:9TB@/>IUU]Q=)7G<>JLCECDPWE??MT<6103-+&+(;PJ=dWJEWPAN[Z\\]]]\\]]\]]]\]^]]__]^ __^^]^^__^_`^ _^__`_^^_` +_^`__^_``_`___a`a^`aa``a__`_`$ab`b`aaa`aaa_`bbaabbbaa``b`baabba``ba(bbaa`acaabababaaccbdbbcbabccbbccacbaacdcbcaabbabbabbccbbbcbcabbbabcbbabbbcbabcbbabbacb cbcaba`ab`ba"babbbaaabcb``aba``aa`aa`a`a```aaa_`a```^___`___`^^_^_`_a__`^^_`]^]^_^^]]_^]]^]^]]___]^]]]_^]^\]\\^] +\]]]\]\][\]\] \\\]^\\]\]^]]]_]^]\\]]\^]]]\\]]]^]\]^]^]\\\]\^^^]]^]^]]]\]\]]^]\N^]]]`bWwcchgOW}\ٛ_RckҘ]XWFPhOYYYXXYYXXXVWXWXXXWVXWVTPVSUVPDOBD\\bl6TpIUaPZS4PKUZa\)KuPr}vqiY>YS77lchVncͤĖgsTu}ޑe\yijuQ~vmkyb{ώ|V|knHfzAK}t旛a6rjǽIjgzx?wQlhl~E;MAOGFpQ{}8SQPQR +SRRQRSRRRQSRSRRSSSRSSTSTSTTSSTSTTSSSTSTUUTSTTUTTTUTSTUT UUTUTTUUTUUUTUSUUVVUUTUTUUTUUUTUTSTUTUTUUUTSTUTTTUVUTUTSSSTSUTUUSTUVT$VTUTTUUVUVUVVUVWWWVUVVVWVWWVVWWXYXYYXYXYZ[Z[Z[[\\\[]]]\]^^^]]]\^^^]^^]^_^^_ `_``_`aa`a,`aabaccbbbabcdcdedddedeeeddefefeeehgfggfghefghgfgfhghihhhijiijijjji4j5456766767778887898989989::9:;:; +:;;=<;;<<;<;=;=nZkii[VE=>=@AA?<724:UME=YZZ^```Y^bilkluzyz}tYVEs@>8DBB=<@EHHB>CBC=wbfon`ltjovD?JY`XX[dSNOMKKJNKGGJ~|U-/Q8:7543654643%59<=>>ACDDDEFFCA@A@??>??=<;9998976769;7:@IPTN8;=y{JIIKNKKLNNLKLNQPQ_^QLMLPUnfYfLQPPPRRRSTU WVWVWWXXXWXYYWY?ZZY[\[\]\^^__`bccdeedefffggffggfjhiiijlkmlljjkjiklklmmoppssutvvxyz{||CDEGHIJKKJIIJKLMOOOPPQQQRPPPRRSTUTVVWY_elrrpigq}w}zvy||wqpljjmnnljc]Z\bghea[Vـ}rnfk{wvmrdbnmntsqprrpooolmlmmmkjfb_LNJCB@x@>;=>=>=>D@>?B>,,,1HOFFDABCECBAAB@>>=;98lkl4A:=92/35=859BGIFEGACIDBB<<=832/-(*,0@=2172)$,466:<5315/201.*+--//,%*./14041//.058747>2'1//38411//,..02=9OB@WZa_Y\WY]LH<]O\WULQW1O;i9heWY]WI2RS7KJNORD@B84ILLLUPHDODVMNJWXTF36APVNELBA7H3$2FTS<5=LLKIUI89;86ABI?IKGGIFAC8?=46+3FAE<;=<78676i_SC<)Tc]J[5D:A?7>B83]ba860.257>+3-68<:2./(0XG>=2BS%KBA*+(G@2+4C5+<;53NX$CJ2>^G5QH,]HA4FA=DA1[[S_A2ROQNZbQKSR66RRh49932B`K6a05XTA10P:R4)Q}LF:OGROGKBUUICW[PJNNPLNFKM6*MJH<;H3ACG[SPS^_cjilaGCUCS]RFRVcA:Eb:=Rasxmlia[_bkZ5>KCHOVdiih2EV\[UA0.',5^cb^ME)MRPTVVQO00>JJL=$8=*'7:OSOB4DD+8BEFDAD:)&1;WJ>2:AA1#<. ,&"& ://,(#DXN+ G?!  + ++ 50%D@)BLWTA%"+#& "/,*,/2# ",,:MY=V9D77?KD*':,('4;>@4'+&(57,,))16) #.9$ #61&OF=' + Eꅓʃs63D`Zz?XAD@5:,/=(\H:H4#)  3K1FՄF؄0̈́ЀIqffUN?865688751-,/OJE;SSSVVTVQV\affOgswqqwpQJ;d96076<635;@?626573cOT\[S`jcgk<6CTZPPP[JHJGEGHKJFFNB5&(&$%|$&%$$&()*-./0001453589::99897665455645668999898:AGD6::y{GEEHKIHIJLIGFCDAAJLEDHHLLkfeY׆T˙ń#ׅ؀´Ȁ|zkcb`^gnmolggbtjjuss{vsqssolnppsrrqnolkjf»PSMHFECCz{{~zwuvxrvsqoopnkklkkpqqopojhge`fda_aW]]_bbb_^cebiidQtrv|JGGKE;=A@A@?@CB>:897679;98:97986878930//*,437;;===;<;9<=<><9:5HCMJCG1<[19EVgj`_[SMQU`J$/927AHU[\X'8BFIG3$"'MSWTC5!CKHKNLHB ,>?B}|}|}|}|}~}~}~}}}~~~~~}}}}|}|}~ }}||~{}~|||{|}~ ~~~}|||}~}~~}}~}~~}||}~~~}}~~}~~}~}|}~~~~~}}}~~~}}}~ +~~~~(~~~~~{{z{{|{{||{{{|||{}}||{~~}}~}~~~~|{| {||{|||~~с}|}|}|}|}~~}|} +}~~~~~~~}~}~}~~}|}|}|}}|}|}|}|}|}|} ~ ~~~ ~~}~~~~~~}~~~}~~~~~~~~ ~~}}}~}}~~~}~~}~~~~~}|}|}|}|}|} ğŭ£ŷ¼Ψݨܤơԫ̗ؽϒ̳ٿ躼`άΤ嵹Ȗ'!- !      S!BGl͘ȬĆӎNZ`dԡU"X8((-+-f̟̝ݿ=6𣢑kmÞӓğϰğᩉð_Қ܌ےwݘیܑ-6Ǖ㖏ꁎ㭒ӹl*       + !"!!! ! !"! !"!!!"! ""!"""!"!!""#"##%$##$$##$%%$%%$#$&'%$%$%&'&'''&'()('((',̮ƻ큔錓϶˹õVԖһ׻b)'$###$$##$%&%)&%'''&&'''((())*)*,,,-/.///012332323344334-22335554322354344456777667689889::99<<<>?!!"$%&(&&''&'))**)(***+**+*)*+,03;BDCA>=CUlvvhUGGNRVSOKIHJRZcghjwnXTZ\\\YX_m{m[XWSLDB?>?>BEGGD>:747:@B@=rԻŲ̭邈ҰŵȺՀ٧݊ԩʽ÷ʹѼϾ˸̀Ӽ;ɿķö̽ɳǬؾ䋖ɜȾҙ΃ȭ瑍Ė𾿹ú»зóÁřÐߍ†ِꎙыѲꈉě׼󀔴ϱŔœ灶ЀɇۺѪ݊ʄؐݕȧ㍖ܦݍڽɵŶ±ܻ󗚛Ƌᄅ蕑ɾg৛ĝ¾š⊷ņЬJ86IH/33"1Q]^SDK=5MTUVQNLF9(.FAQMCEGJMD=K/ 68(/'C-@B@@?C7%&)8DalR+'9'QTG;75>88H;EYG6.?CYfnlI#N3QI89A61"+5400./,*&*2BGNPWJCL_=9^[\]!\\]^]^]]^]^^^_^_^^_`^^_]^^^__``_^_```_``_`__``__`_aaa` aaa`a`a`ba baababaabb`bbabbbaababacbcbdbaaabbabccbbccbcb`bcbcddcdedcabddbbcbcbc bdcbcbbcdbdbcbbbcbcbbabbbcbacbcccbaabcbaaabcba``adbaabbabcabb`b`a`a`a`aaa`_``a___```_^_^_^`^_^^_^__^^^_^^]^]^^^\]_]\]]^^]^]\]]]^]^^^]]^]]\]^]^^^\]]^_^]^^^]^]^]^\]^]^]]^\\\^]^^^_^^^]]]^]^]\]U^]]\]]]_TY~lrYUZǡziɤk}jxfKXgsЩ}yYXX[ex^TZXXYXYXXWXYXXXWXWVXWVPYYVS^t>B3fcjMqRHRK3Cd{vsqbzXphmcD(9=WHYVsiDLDOUppZ^mCJcbJY{aTf{vrgvm}poZSpfn{ڀ]ffŐΝlTҟFo}GkI\EGOYSqL>>Lpfni]Q{v}hʍt@zA@?FRh_Elń`OURQRSRSSRSSRSTSTSTSSSTTTSRSSTTTST USTTSTUUUTSTTUTUTUTUTUVUTTUTUTUTUVU>STVVUUTUUUTTUUTVVVUUTUUTVTTTUUTUVUVUVTTUUUTUUTTTUUTTSTSTTUUSTTUTUVTSU TTUTTTUTTTSTUVWWWVUVVWWVWVWUUWXWYXY$XYXXXY[ZYYZZYYZ\[[Z[[[\\\[[\[\]][\\\]^_^_^_^_``_``aa`abcbbcabbbccdccddedddefeedfffefhhggghgghghhhihihjijijiklkj65666m76667677766787778789889:;:; <<<;<<<=<;<=BD=52/013=WJA`c^Yeedbcejnonv{v}rUeGg7@8=Ao>?CDGDC>BEDA?>@CDDCDFDDAA?@A?==::98897899878:<=<C?~|mc~xknopxtsliifghea]\bd^^^efb_^_Y_[]ba3[\^\]^^]^`^]fhiU{nfjoJHCA@>>=>???<;=::87622778551.36;5-2:767:;:::877li17DA;606104615BIJEHGBCF@=?@>?=;8/.)&0:A8121(%,;>:356.104/1/1-''-/.,'&)00-..0-04455:649;-"*402U46301340/.01;;;%'=q*Jue\bYYVUNSKFK4H^SYYZWN\`EH!;6+.90/:5JS52?H2@HVJHE-*FJPNOJDCA?<>CG@MNFOLGDB7??:3.(AFJGFEGKB+9MD*B7)J8+7S8F%$$%%$'*.,2.1'&100NL@KDQ-16*W0TJ9306.;TT,56?<972//_F[SU;",$F>;&KLcG743M.3,63855h[ZMJ-*)-3575ED]4K1>NS.$?540ATJ9L4QM;3L4405=+NRI5KDP7B=IIG;8LHFA;A]IFIUSOL5Bk<<=8H;?,L88QYQK[4HCO[]WM5&(4/Jea^V0HKVQOSUQRQ.*DH0C)*:6# %BRRJ=D/).$42C?68;?B3.7 %&$ +2-/./ 0KU; 8?2# %5-5D/%,FTZR1 2%4+$ "("*)*+0)W ! &)8SgNRsM-8=QP($<--"'6>395'&3:00-220)*%&(*-55C98AU]k=樠ΉT1@0'1>uvI#4++~wґ~ґԽbC%2LVsxifv|٦~-`8-&EXG^Yۦ`-=7BD/!zn:#3A, *F38 -$$\!'(83.)4$!:-1; ! )o($!.Bh8.{c")II"kă;s  +#]gP,<2/.%*8 AMG>B1Cf0GQP)  >6ڄل؀ЀM ogVWG4455761)&&'&'5PE;706;951UX,-^22dkj<88P]YMPZUGJIEKIJIIgQ6%&%##$&%$$""#%$%&),/134358899;:<<8875454553567778998875BFJI89;@@BFFHJLHIKKIGDA@><>$?@>EDH@|OVmDž85¶ɽ席{|pk_Zehjpjd`xuqsruoprrqrmmjlkoqlnji³RNOONFGEHCFBvx{uuzvxtspnmmkihhmrqqlqrlheibf__`_Z\\\aa^__eb\dehU|vxwGB;86146;9866:976978;;:9767533237::81/041"$.328:=>>=;==::;:<;:::71..0.+)))&',---,))***$%1/-,.0123223hj/,*$"#-,))..*,-+++$!!!"%&(%"'&&&''+*)-0)000'%"# '&! $$%&(%#&# + $++,.-&$  !% +     +    +    + M   +  + +   + + +  +    + +   +  + + @!28!,;%4-2!7&"+;<"(0# &4$"?'?503..--*+%!%#0+1//.'/0!&(,++)'4$5!+#*3750))+*"$'$! '$!%"!#%)')&$("%*&#!$%&%$#"$$$#!  ,#(%.+&"!# +$#""%&(%#"&%(*"$-*/ "4./*'"'*.,,#/(&*""1*!'+(" 4<4(<7( (!!%$(&!$;9864?AC3IJ.*2>E?EGIEA:>>=36:0-:),6:BMDCKUR[]gKFOWLPUYJRPZC88Ga[&3Peija]VRPQURE95-4;FVUXb25J`pvlYHCGLPQOKEDEHOW``ads|fTQX\\ZWX\iu~zurZUURKCBA@>>>ACDC?:72018=??sëô册ս÷ԀУ沕Ӊ٬ƾ΀ĻϽʬȶðŷѼȴ˾Ƴσǀѿ嵎ܸڳļˮǬꄋƇ셊͠ް׈ٻӺ걎ʀۻӭ֩żыث㑶ķŲɾӾɆ߬߮©҅ЀȬѼ–슎ĩŸϕ󋃏쉷􀁀㞫Ǧ였ǟӞ₻䷓꼭䦍ߏ´񐊓􁆔ǿiϿ˯٪Фɵ黹ǣþ÷ڣƤFH/?J<&/A(NY\YQKJ@LNDHQOGID>'B;HGCGJLHK>51);626#0AK?;MQ483KYhoa+"6,UO78<32%-39@>)8=;:@M,8,,)X+1/--13>9&8/76AXs6gyY346=CM{^cXwe>?^Nz^d;jcNHYJRp:A.PËClzlW׆|jgfvZVaxk_fcI}^ýhgHrszCXmoLCidK_>-ƈerL{Hqo׵ݽwNqLzu??LYx\VlcSRSTSTTUTSSUTTSTSSRSUTRTSUTTTSTTUTUUVTUTTSUSUTTUUUTU'TUUUVUVVVUUVVUVVWUVVTTUUVVUVUUTUVUUVUUTV&UUUVUWUUVUUVVUUVVVUVUUVVVWVVUTUUVVUVTTUTUUUVUUUTTUUTUUVUTUTUTUUUVUVVUVVUUUTUTVUUTUUVUVVTVVWWWVWV WWVVUWWXWWWX.YYZXYYWZZYZZYZZY[Z\\\[[[Z\\[\\]\]]\]]^]\]]\]\]^"___``_^_```a`aaa``c`aabbabaacbabbbcbd ceffeddfefef gfhfghgghf+hhggghggjkijiihjjjiijijjk5ljl55l67566ml677678778898889 ::;::;::;;;<;<;;<=<=gSegff@;AD?F?6276656:HNAkocYfjlgfhnkqorvxvZGBc28>@Dl>?@CD>==?DG@;f437:98kqv@B;M`fUYYiZOUKQNLJJVkh9N+,=98741221393358<ADBDB@AACBBCA@?A=;:9a:8999:9;979<<>=FZYVS@:=@DIIKKMNLMOKGIKMKJLWUKICHHHPsOVdmKPRRSRSSTSSTUUTUXWWVVXWVWWVWYXXYXYYXYZ +\[\]]]^^`abcdbcdeddedcefeeffhhhijjklnlijklmnnnpqqrsttuwxz#y|~CEFHIHIIHGGHIIJJKKLLLMMNNNOPQQSTTUWZ`ejlkeabnpmqw{{zslnnqv~~xsrkgdceeffb_[WVX_`bd辨~ý{qeawtzo|wxpfwonmmsus{smkkeimhfdeûYTQOJIKIyLIGBwD@@Bzphjjca`nu}qikiigeg`_ae_`^bfc`[XT]^__a\^c$ba_\Z[\W[dcaT|rhgflMKC76::899ECEGC=BA?>=;=;:96;@AA@=<;@F0,*ADHBCDFDBDA?>=<;9:9;<=97762457:87430112--7:98998677656516AGB:12:9<74/6EHHDGA@EHDCA<1)'/=:4)3A=?E=7-'.4?:15?@8206/1.,**,132-()(--+.3202/135;8699* +31414876961,,04:8:<:6;%#4/,81-) " >462.3535::1-'%&(/0+-)"E@'.$*)'! %$ !!!:7!'#  &&#&+$#"$#!#$(*.*))()+-6684*($*<'/#  "#$#$# " !&2(!'0!'## %',*(*,)$! !!..20030315!! "$##&32 !!%" +(+)$! ! #*V>96[g=E/6Vi`T^98;23KKL88IOb`B/L;H]6B$%T88SG;B^X\PWPUa[WO3DZSMLVLWE1L]SMNTU\3^VPRQ>JP@2FNP4@RJMMEGFCOMW(8D=[n4:<7+>HIBLBBH@=>>d@EJ8E=DF(XGPM:<5C@6PA0>3! 'W6V7[/B'.FYL53O?/;E597&16209K31R\GS.]6?C,7XE>`4690=6g4ITV]XF" 9@YSUV[RH8:;>EG\/9G<0VRNSd7@:p2PVQ[E@BI?b327*)CNKJNUYNLIIE<7FE<)(4hg\UAE5ZXQVPSX[-3R=:6%4<)'=LQQIE?4BF>CIE>?9+ 3'::8:<@>@.) ($"050/03('1NI&  ?82 "*61;: 6GWXD +81($(**+0" "#%4Mg1YlQ(1@PX*3.. &5@570##$2<52-1+&,,*"&%,7>757DX.Q Cݡ{|7,M/ U[0ueV( -HҎr`[ГڸjSFaޅƎ¡Ӏ嫊æj( (B1"xൖhBxnqݍ\3%G:,R8B0Q뢈6xqL *zWE-Z7J% .'  2')D$H (OY]1'0S"&h05;_&#<;x^_-Y—b/#RM8pmL#4%9 Cd,$H؄ۀ/ԟqb^[504826-%#()*(*.@H;\^TFOVZ\\^dbhgmqqy~nQC=<<>;9764>7568:<99;:9:8;GGFF:8<>AECEGJKIIKHDC?;:88>>:<;ACAAeyKW_\Ÿȼ¾Ÿǀ{|xh^VW}srxakdmg_[vqqqostrypiiidimgfdiȼWQMKIJKLMIHD}EBAC~zrmjswwroknkjnhikomlknpnmigcgedba\\_`a_\\\^Y\dccV|yvyJG9**./../9:>@;6899:;<:63230/.,17:982/-11*1659:<=<=:;:9757:69974.-.0+)($!#%)-//,)((&#",0/.-.0.0211231+,-%%"&*/-+,..()((*+%## +(*''+$#%"+(%+43.-,/$$!!!"#%&&('&&  +"!!&-./.( # y$!%$!7/%!        + 1 + + +    +        +  + +  +  +  + + + +  + + +   + + + + + + + +  /!1:$$1:0)0 '%%%+55$.")4!&+ "*5',.030**)!1-2*-(-2--* &-*'&-&0",1(%',-.,*&''$&!')'!#$ !" '%* &0 $%$! #(-'"!*#!"!#,! &#"# *(*!'!$! #$*+/#$""$"% !(!  #&( %,0..+*'"312..0!*,'#%, *0#!,%("!$#&7:9252;!'&&+%=#D;Z-*0$!9B??DJLCf@?@BD#$$%%%$$$&&%& '''(()())('()*,,.16>AA@;89BTenm^J@CGLLLIEB@AFLT\]Z^nwbRRX]YWSSUakx|wout[QRPKD@??>=>@AA?=;71--06:~䵝|ֽĹöƼـˠ콝ƂõݰõـӿɷɾŰĩѽƻӿø󙬽㔫ŭѬȾҸ˺甘ƳӯͿъ۹ϧѳ᷷ͷɳЌͮź˾çςد愸ʍҀ҅͞ݘ׎ƻㄅԵ؞ߤ֟ءʄ଱򱺧ّ􎦎҈׀ȵ̋ɞт̊߁ꀶ͸͹̰Єʨ͒Ē͒̂Աץk¸͇ఏʿۘа왎ٺÿVN*6II8-#(4\]WQKRL377>IRRN>;<'1&!.-2 /Y!&OO:Sr:o}^;7Kb^?;5AF:?MPSNE8;=88?RRQNLV)RINX8>.,-./+)*5;AMPHB@KZDrC`^^\]^#]^^_^__^_^_`_^`___aa__a`___```_``__` baaa``a`ba`babbaba`b%cabbababbbccbbaabbababccbcdccdbcdcbb1cdcbbcdc +ddecbc11ecd cbcccbdcbd2dedcdddec1bbdc11cdcccd2dedccdcccdddcc1bdc2cdcdcdcbccbabcdcdccbccdcbccbbcbacccbbbcbbba cbaabbba`aa`a```a_``a`aa__``a`__a`_`_`_^___^]^__^_^^_^_^]^^^]_^^___^]^^_^^_^__^_^]^_^ `___]_^^^_^_`_`_`_`^_`_]`__`^^]^]^__`__^^]^_`^^]]^]BP{ϓ\}x=l_IOt֟qDefoZ\lv↗]MLKXPCYaSB:Y[YYYZYXYYXYXYXXWWXZW@d_PPewGNPTIAADTXSDOMK=jxJPe[Ncd0JAPQK,u?`WSZKaen~lL@UhiYQMBZ[SghbIbWswJad~bV_|_rjL^qƥZvsNOzYJ`~W_BK?uFTdLbWu|x^SMXUu\_lGCfdk]Sa[{xkTTTSSTSSSTSRTUTTTSTUT UTTUTTUUUTUUVUUUTTUUVUUTTUUSUWUUUTVUVVVUVUUV UUUWVVUVWVVUVUVUVWVVWUUUVVVUUVTUUWU VUVWVUVVVUVUUVUUVUUVU VVUVWUVUUVUVUVUVUUVVUUVWVWWVW XVXXWXXWWXWWYXZXYYZYYYXXZYZZ[[[Z[\\[\[\\[\\]\\]]^^]^ +]___^^a_``_a `bbaaabaabbbacbbcdccdedeeeddf*ggefffggfggfggghgg4hgihg4ijjjijijkjjkkjk5i566766767 +877887888789:;:;:;<<;;<;<;<===<<<=__fS>??CBG<37:4887:@IHk?;9:sqw}==E\f\VX`cTSKPQMfkC>K*+E48875124652257:=@BCBCBAH>?>968899:::;:;;wxv::=<>?KZ[VO?>JDCIIJLNNKKJEDFGLKIPXJF?CGFLvjRTcabqTSTTSSUVVWWVWXXYYXXYZYZZZ[[\]^ ``abacbccabccd"cdedfggghhhjjjkkllmljjkklllnmnppprsuuwxyz{|||~BEFGHGHIJJJKLLLMMMLNNONOOOPQQRSTVX]dghhd`^g{rhkpuvvrmjilnt|~wspkfaabccbb_\WTSV[_۲x~shttjqtoljg]vppopxvooqkjlidcb_\YYUPMPLFKHEGGFDDIHKKJ}bjttjlfnrlojkhhhe`dgcecikd][[WZ[_ab__dc^\ZXWYY^db_Qzsga`hzHD@?CB:@LMJFDFADECCDEBBA?>><;77;???@=;>@A=?@=?=B><<:;<<55513;9;<9985214204:<9765665541??@634932-(KN+1.-))(-.,0026684557=:8<($,6535;><::61/123837=74'+34//81.,785:21.('(',*,)'$""$%&%&%"?9#+,*#'#'%"$('# """!"$""$==&#!"##$&,/,)*))(0/277,%# *14) " !  !! ## "*'( %#  +),+++,-)(' !!"! ,!1-,/.26!!" &&$& !  #"  ( !3+#!"$!"* '-0V89954;;T/3@81<_??:\5U[DIM>IH@IN:7:CA<2&>M0VPK8L@L/>LXO*=?P=9&C79.85J0&$G@>G2RNBSE6_:[GJ()5GaGN)*-,-.,..-+*'&))JGMM$*)*)(),+,*++%69,NKFK@(B@.3MC5*#IPIIOF\>3VS0>:Q83@T]AUT/D:=8QD0^Q1\7O2J?;*M*/7[$;IQCG8@6a5N.Y.JFA7KPDN;0iX.X^\.CC/I5B'%MS/B;83>AS2.2[1PXH8CF?v<988754;WNJHMPTQOJNJF6/;@@?.-@=IZPMM_Y]ehe:9Y]^[YXPQD8JPD;~BNCWdthUXTPPRRVLMG5@DOX_b_,IX_[VA;(=*,GlibTPE]c\ZWSY`@25' %042?/0?M\S5#7!!'*%+,--00$[ )1  + "/Fb2^pX1*=QM-($/3&(47:7." &486516/+06&!%'/62/27Vg4452/1;8<=61//-.252iisy85=VaTMMTTIMFLOL`c;,-+!##$$!!"###$&&&(*.457879;<=>;<<746656766889<{~y;9:998>EBFHIKHHFCB?:<:9DCCuYTR[rK2΄πĿɾĵ|Աv~zth_Y}ru[`a^_][U}tnmkmusnlpiiifcad_ZWTQLJLJCHGGFFFDEIFGGJzxshqxppmolloniklklkoqollmggfhif`^aa]][YVXY_dbaT}vtyG@738818CFB?>?9<=<<<>:8510/.-++177862//6/.38499?B=98:;476576;983.--/&$#"*,010/,*(&&#$*/0---.0//00/11,-'& '%##+0[+--.,,'%('%!%,,++&'*%!#&00--/7.+,..%#54 &)--+*)*'%# "!"&#!!#')0,+-#&!$!2)T./   +   + +     + + +  + +   + + +  + +     +  + +  + +  + + +       +    1 "0 .!! 3-0"'):*$+*7D9*&91,($ "$/0.*"& '.-&**-/-/(%/;4)),"&)1!-/!(40,%'&&# &&%'%$#"##' #&#.-%"#$!##"##"!&#&#"# "/$&#    #"#(,)!$.!&+)/0"!#!! $'*((""/%# ,5.*(%-)&' /24:532018+!$--.47#,,&!& %"+$3-(! +,7?4.##@ -(#!$'(D5 CIH#& "(:A$,)##? 2!"&'<(&DNB2@A;86440--1GBB?DEIFDAD?;+*_3655&$1,7HB?>PIP\a_67UY\XWVNM=3AA@"##$""##$%&'&&'''(('('''&''(((),+/4:>@=965CFJHFB@>=@EKRVVUYmt^QQVXWQOOOXcquqijw`NPOJFC@??<<==;:;861-++-4i֦~}ýҿȻԀþƾΩŠƷа¨лɦï󀖯Ұθʀѻ鉤Ȼİũб􉕕èɼƽ퍠Ի킝Ҁͬպ겆ֱͥƨĻ藣ɿղǥ՟ιĘӵЛ٣Ϋ񈑞ڤ͇ډҐÀڋޔ׌ԭ䵑܇չϖďϽ킗ﱣΦޙҵōܯė彇{½ŽӘ羽ѼꪎΐŖڂȭȼ RN;37OH6'('La\NONJ2/8:JTSM71.$83D2?7<=(L="++4&1D:Q@;>>3<3(IWUaVK<*3TJF>$)(%%5DPEKRB;4?DPgoc@7/4QN2?0,-&&3AA<1/=<@DQF:,.+)+0+-7V!<>#1554?Pp8g@]>5N[X@L0CP<@JH4TJF>=98:C*++QNUR*JOWHA30,*+,+.85GNC<:EYX]DY^]\]___^_/`^^___^_``__``a``a``^_``a``a`babba``abb```abbaababcaabbbaccbbbcbc bcdcbbcedcdcec +dcdd12dddedeecdeddd2dc21ccd12ccd2c21bddcc2deeddd222e212c2ee222dedded11edd12eeddccdeeed22dded2ceceed22edccc2ddecdcdccbdbdcccddcbc211edcdecccdcdccdcbcdc(dbbabcbbabbbaababa`baabaaabaa`abba`a`aba`_`(_`_`_^__`__``_^`^^_``_^__``_`_``__^^^__`^]_`__``_^^___^^`_`_^_^___``___^_^^^_^_,a`_`_`___``_`^_```_`_`_``_`a^`___`_`___^_```^Q_Gj򀄙lm_clN_k]v}[PaoLhsNϖgPqfVQrcǥFY_DmS6Z7@RXYZZZYZYZYYXXXYXWXXWWYXO6>b?:LGMSEI?NZFRw8EXWYVaI3S;L\?M3tg(!ZDF]QXUXwuC0X[jTRG]GqFOZwxsxc^8}ii]J~UV]mYu]QeZZKd^F@xgW{bxI@fnzhmfnSJxsmaMtsSOXHKTuPY=]PRquGO`U48a{_rCSSTTTSTTUTSU%TTUUTTSTUUTTTUVUTUTTUUVUUTUUTUVUVVUTVUVUWVVUUVWVWWVUVWVVVWV WVVWVVVWWVWWVWV UWVUUUVVVWWVUVUVVVUV UUUVUWVUUVUVU TUUVWUUVUVVUUVUUVVUVUWVWUVVUVUVUUVVVWVXXWXW$XXWYXWWXWWXWXXXYYYXZYYZYZZZYY[[Z[[\\[+\\\]][\\^]]^]\]]^]\^_^^]_^^___`__``a```a`abab4acba`cddcccdcbdddccdeeefdeeeffgffgggfgghggghhghghiiih +ijjij55jkjkljmjk6 +l6767776667888999898999:9:9:;:;:;;:;:;<;;;<;<=<=<<=>===?fc^_P>;>=<2)/.,0;<=?AGKIt;g2X98lhgkprotABBuSf@4117MS2d8>><7@CCAFE?;998:??lrzxx:ANc^NVZYXWIMPMYk\RH(*)O658864359844X4589:<>>??>>?EDGmUKXvli\NTSTSU/VUUVVVWXXWXWWXXYXYXY[[[Z[]]]^^___`a``a`abcbaabbd +eeegggijjiklkjjjklmnmnopqopprrtutuuwzzyz{~DEFFFGGFEFFFGHIJJIJJJLKLLLKMNMNNOOPPPQRSV\afgec_[_ovigmosrpliggimtz~~{~{}~zvsoic`^_`^``_\YTRRT[wʠ}½}vkzrkviprsoi^}qssqnooljmicfb_`]YXWTPQQLPQQLLCHFGLIC@HIJJyghlbgunssvrnnlkiddejhkhijea^]XZ\^c_^[`]XYWXW[\`aacU}ri_`brDCIGIKHOKHDFGCJIFFFGEFDA>>=:78=?@@@=<=C:*-3ECCFFBA>;BCDE?A>=A>B@=<<<::79/3942:;:866454/278;7686657865415BGA2&4986354]9FFEHLEFG@3.1468784/3?9445++$,03666;36896993/+&H%-41-)('*)0333;841334<::5"(0;559>>;;:7211146-962-/>373,4,(,/0/7--(''&$%&+('#!"$#%$!! # ()%*$&#%%$&&# !## $&#8:A:8! !(&',103+++.0--(!  !  !! !&%%!""%& "(  $)7)+(+-(+-++$!"'/(.0//"#&&(&$,&$)' !%*$',$$%("'!% &!#! $%'!%'#  **28At8;:;5972XZ1;?AdVW89b\PLLRMJGF8C;:9=B3H_7.;<9DH>./G@??ILOPRSKIMKF92<<0YWYUKLEKJDBDF@KKNoa6:;JK=0/B;\NB36>&;5=;.'2'+.&K7W:4S4-79@]4TH<@..(@T8J,./,-+(-*U1''(($GIGKH(*++)),+,+,,*"990YOT0588622/20231/./11//YVWCB'95,9TX.FSQJ33[YF.C&+)2&(9V4Y798?.'1.<9NbW\_62i; 3=WSEA5GA)*1+H>V]20J>70GEG5A$_^.BAY;,-<:fYKNK9>Q2-2H35z>@@=78B>EK3YbUPLJMOPMGJKHIC0;A=5,=BEWQLLZcdei\EIXYRX[WOI6cT6:E>EEF:=;>HJ^[2CXYYZS/*-#8&adb^.6Le]Z^c[OM?">;?0%*>7%>QPEDDA%'/4CJIE/)!)$4487+4.2)5%$$,?0/0.$*"4@@LC7# <7/$,928=,$%.>U[J)%42")*( ',122+%'B#"0B^.S7U5'>MF08 +;((/-72/'!)6385,07.-!" +4-)'5EN_/$"dꏩңtƫW9O1,%$XT-.0#1?%.*ȷɿ뱬ޑۍ򺏥솎Ķ7&$&/y炧կ1%Q鼢ʕ/QVK@+#Jź潧݊-Ccw~lW/-~G?(.*41;"21^' K ;.2#$#-s~.(MOb~]#fF(ɪ!$#e% &#}*D]X܄܄Z׆Fۅڀ0 +jXUB1-00-$ #&.//119C@f2S(H.1]_]aghho>@AlM_;-*(,@E)Y1542/89:9=72/,.0276bjtsr25H^UDKMKMSEION\cO +D12"!##"-%&'&%'(()-11355799<:998538667799:96><@@:BA??>?:82.-..-,+258751/11'!.137;:=:7==<;574377;:720/,,($$+*+11/,**)'%!%,/0./0/.,.1000-)*+%$+&%&.0W,0.**,%''%!&-3531-)+$ ")--,0*-,.-.+#-"!! #(,31/)(&&(%$ + $"$&$#&')-1(.&t%!# ' #%,5,(   + + +   +  + + +   +  +                 + + + + +   + +  +   +     + +  + @ !!1,1"#,-#05/4."'0-<:11101)&%"$'(0*+--,* 0$47301''*521<4!&#)/$.,:1($$'%$!$ "*"% !$&((()$"##"*)+)#% ""$"%83!!+!%$!(& "'(E.#$!+(2-,,0. )#%'%$""&!''%))#& +-!! *3)+-9)1?5#!('#()&9* ++ !6(4?6 ;4#>2/% #-,7 0(>H%!'$)%&3* -!##'+:(#$$)" &600:>=934<7>C+NQGDCBCDDB>@=<<2(264+!.03DB>=JQTZaWBGTRNUXUMG3\L$/>8}P@5T`emZH=2MR::?BD7626@DUS'8FJKOF%!&UZZX&/AURTWYPGA/(} |}||}}}|||}||}~}~}~}~}~}||~〄}||}}}|}~}~~}}||}}|}|}|{~ }}}{|}~~~~}~}~~~||~~}}~}|}~}}~|}~~~~~~}~}}|{}~~}~}}~~~~~~}~}|}}}~~~~~||{|#{|}|}}}~|||}|||{|||}||~~~{|{||}}}|}}}~}~ׁ~}|}|}|}}}|||}|}|}|}~}|} +~}}}~~~~~}~~}~}|}|}|}|}}|}~~~~ +~~}~~~~~~~~}~ ~}}~~~}}}~~~~~~~~}~~~~~}}~~~~~~}}~~~}|}|}||{|}|}|} ®ν覛ٽڿʿʭʽ̽µ[ϭЩ½ɶȾڕ̆       !              H 9dʹس°ߝвX,S;[ROp1-B*@1+P  ),,77/(XĎͫmi`(0f߃` *߹ьE*!&rІy_ay۷۹˗ƃ܇ˁ8F0!ƾǏl{c=8(3ҕΖȻb A   ! !!! !!  " !"#"#!"!##"""#$##"#$%$$$###$$#$$%%&&$0%$%$%%&%%%&&'%%$%&&'%%%%&''('&'&&(jŪ⅁뀎é׀ιWʲҿöH*$% &%$#$&&%&%&%&%%&&&'(('(***)*,,+,-,-.01213444333212223324435655444565567988::;<<=<<=@!"#"""!"##$%&%%&&&%%&''&&$%&&%&'(+.27;>=9536EWfg`TC>?CEHE@;>CIORQQXm|r\PNPSPLKKLQ]inkd`syeQNNNLFCA>=;;:766651-*(),ƚ}|ȿ널ȿɾſʬãŁǴǻưո÷ˀнòм®»²􅚪þÿپʫƴۈȱﲍɮԷɳ֚Ҷ޷DŽ¯÷²ƶʽˑþԺǵ۸ܯݳƦΌݔ߇Ե€ަ里ѹڀ˫ū̔ݪªߕߑЕɾŧξ뵬ԅߠ̡ڍɩȾǡܱŽǔÅJϵÛÕ⿡񨽵͙ؖĐúӹ˪@QD>OAG?.'8adRHSLD+8>DNMN13>,,48@BH-D?@?4I+&.&1M=%-QG.;EA<87FHGc_OL3)INPI003,&,;IEFPI8>9EJWkoMAO6RL?;00:;AKW61.0/j+(++&2V40D2/962AMjm`@[E*GXE?N7?SEB@CIIJ@>77>G++YTQLGOJQOD@50,,+-.2;BHA=7P5MZZ\[\Z[Z[ZZ[ZY^\XVZXW:FJMVXXQPS7cAM;R{DYrbMXWUAXhZcetWVPQO`yf@OYDVH;NN8L|qrārLJP[zDMCoAn}c[oͅiICeQXld4lj\ALBp<6@;6YpWLYLTTUTUTTUVTTUTUVUVUTUUVVVUUVVVUVUVUVVWUUVWVWVWWVVWVWVVVWVVVWWWVWWWVWWWV WWWVVXVVVWXWVWVWWWVWVWWVW VVVWVVVWVWVWVWVVUVVWWVVVUVVVWWVWVVUVWVVVUUVUVVWVVVWUVWVUVVVWVVWVVWVWWVWVWWXWWXXXWYXXWXYXYZXXYZYZZ[ +\\\[[Z]]\[\^]C^^^]^^^_`^_`___a``_`a``a`baabcbaaabaaabdcbccecdddedddeeededeffeefeefghhggghfhghghhihi44hiijjj55lkj6k5677667766677787878999888989 ::9::;:::;:;;;<<;;<<;<<=<<=<=>=>==>=>?>=>=AygdXO<<<9;9;<:68@@BAABHLB875:@8mklllvutEBpPa=9002>Q9cuA=?>@BFBDKA<=;;;{mkr}y;@?[ZQTSXXVLLRM}PPWMCV,)*:3g844546733235476789:;<:;;>==;<<::9:=<<@?@@@??=GFAHVUTTKKEEBBIGEFHHDGBD@@BH>@HB@>BENNzoHRT^i`TSSTSSUT UUVWVXWWWXYYZZYZ[\\]^_a__`a`_`ababbbcccde5fffhihjiiljjkkklkmkmmknnooppqqqssrrtuvwzyy{{}CDFEEFEFGHHGIJJLLLKLKLLMNNNOOPQSUZ_bfea^Z\gy{jfhloqnkgfddfkrxzxv|~~}zyz~zzxtolhb^]]\[[]]\YVSPQV~޼{ހx}um[{ѽwhoqojg`YQxqmlpjllhfkd^\YXUTPNTTVQMLHMQOOMJKHECGCHFtib^bhwAuqqtpponmjjeglghfmBnh`]^^_a`a_[Y][XZXUU[\]\eaVsh`edpFJIIJNMMNJHEGEHKIIJFGDDDA@@=:;=<=@==?=>=BA=:;:;8541586499977632269786347:768553319EB6,37;:514id9GIGF&HD>2376:74770/>82244*&*5048:=86:667;901-,)%-3,**)O('-/TW202//25:;<# +/4;8>>C@=<:73/.,[-.3..475,60)+)++,--1,-'%&%$#$(&$#"#%$%'('&"&&! (!$%&$!#! "#  ### 49#&!"$%#$'.46+(*)(&$ ! !  " ! !#"##!!## %&#"'! !!-4*($(),1,+,)'%&')*.+$!0!#!$" #%-$#,-"!"!$)%&%& # ! ## $###%'"'537.'#",80(0''"!(/(%-85!22:7[;8<::767<1016=AJdAC8`_bXMTTV^H:1;c1BKNZRRRNBQJLUU`][YUXV]U2@4UZ?KUIJ?-Q6@QsgXPRUMK?>LE@=:83;FZF?@9ADKE5A=43GE:@I;>@>MK94?NR).;J(=209<0H.FRO5CY>"!19,/65[q<<0,/21,.-//:++<..-*-/-,*:1J/,+GAKJD=B))*-**+-)**#"?61S[22572100../200YQTXZYUZ0\)6+.0/321,ESDQ0V=EQE8G>A@,K4K9(.(8K45-4*&C>=?<0Z[b^abi^4-61J8d2N8PKFSg??!9\CGZ?3J14>*(:@JC66kC787(?C5->&3G(18;cD.+PY1.510R?F7@LB9\?9QPOB"'B&1YPPMHDN3-YG+;8)<8BEPOQSKTUQVMJRWRNJFEDG/.0>=?./>GPOOMOY[bla4PUVPTYYL@IQ@%?@;LNM6golm3kK4+VO]FTLM6.V>5;WUJ:QVVTT4"?%/YFkc^<.8_\U[dSN\S:',?:19590&NVI?G?6 +17CDE**1 $)05<(968,&5 :*"<4",3.+'&2/.HF<5 086- $233<;&)"-3CZZ8)2&6/(#'*(!!'*36;# "?%("!!1AYYL6R:!9J8.8%$>/'$$,/2&!#-:660+1.34-.$ %(/.*%&8M9n]?ɠӖ[VU::*1i|O$.  +'D2&ft㑊炼ᓚЧ˘ũšʉ.#*?*Ξό:GZγtUco"$W߃ՋǸʻ~阕QWK:^&\R<*>! 0'!9e $ %    !1Z ),74,  &ϥЗ,I6b?H$)5eܤ΢N1B>!  $P-@Wʦۀրi]MC10/+-+,,++.557669BG<2/*030abccfoopBAiHY81*))5E0Xc525379=99=3//022jzdemvr447WSGHHNQTJJROSHG?1:$!%##$$&'%('(o)'))-.01232457887766778;::<=@@@ACDBA@8::><;C@ABEFEE>?:75:7;A<;9;>JFaDOOSob뿷ĄĄ ل׀ƾڃ~tѴĿpsskc[NtyY^__\[TMF{rljkpkmlfbga\YVUSOJJMMQLIEAGKGHHEFDAADAEE{usqss}Avwy}xtrpqnlhjmkljproljiihgfge^]a_[]ZWVZZ\[a_W}tys}GJJLLPMJIGB@A@@BAAB>=8430./.-2358785/+/1%'-258:<:777354454::60.,-)%!"*/--0.,)*($""',,/.-./0..000.,('($ *.)%(1g`-/-*(&##!'(,-.32)%(" $%),/0,+0,.//*"#! $!"!A &,QQ.,+%#$&($#"#%'&'('())*X*'&!#"&% " "(    +  S    + +   + +     +      +     + +   + + + + + + +      0 ! !""/!#335.',,+2%!*%<8):6+10//$(0&! 4##*/+*+)"*'*,.3211.0.3/",-$)!$ ,! +@7,'()$$$"%2$ $%"" $#"$ ",**%*%#"# !"% ! "#-"7CI##. '5  + $&.+20+&,%')%()*(')*%''%" " !#""$1//+//5.'(!;))%!,;! 4"*."$(,84($A#"&#!%7$=C!&#$((!1'%%%$ -&&%#!($E>,2#/(/AYԘĖ֙Ӆ?)$0D@R~>&7,3+!*9S5!ؿ<8/@1,< *'Yxu]%-1rECe}ᯏ磷αڊ[ŗ獅猋!ڶ֐n{~UF 2$+ՀS   + +!      "!  ! !! "! ""!!""#"""#"##""#$%#$# $$$%$"#$%$#$.%&&%%&%%$%%&%%'&%'&'&%%%&&&''('%'% !Vɻ􀈭쀀빹Į򆬳놈ܾZǬðܕ('%%&% $$#$%&$%%&%&&&''&(()(()*+,+**+*++*+",+,+,-///00/000345422211234423445545556665566656688799<=?@@@A!""!! !!!"##$%$%%&'%%&&%%$##%%%&((()*,/59;;8413<:9632223/,)('N䷒~}û󋖢􅉍ѼǺɬ켝ȀĽǹɮԿƹͺͿ÷썐Գݙǭƴ톬¿ʲǯνű뮇NjيٮЪªỴӄ绸ߊ҇ǷźϤĺ´ħéࣴص獓ĵ˔󅆋倈ӼΗ򇆉譢Ϛ쀃̤ǩ؆횹ۺĚ̷胐󆱏Ě˽磬ȭ򂀈닠ƚý䢩…۰ơӛɴˤκԘ(ɬŹЩԠֻ𧹳ⶒ*EF@/+H@5=)(H\RCQQ@*&9=HLM9274-.0<>;3=@>U,%;3/G%JGYDI7.:<;36:I9SiWSJ 3NUM<%<=)(.CG@E>)@76KF\mZSM1^NG7.)*/,*;@;-39=AK5>7003/(),'1IL*X0-633CKl4f@_R'JVC=L95NI=>G;?@>86:CQWZ[[RLKNFLCEA<4.-+(.5>IC;9<=OYZ[\[[ZYZ[ZZYYieYMCZYXYWZYYNTLH1a])XVc:Y_V>A]eNVVWJFpʯ7BCTBݚ|hQS]D{]o./Iōvxb/[kvSJigecWeXS~k[}J\ts`niΣocbz`22WvFGipMeGH>vclniTHqnhpmAeBB]>NV6JJyC7B^t5m?_b~Ro}ITTTSTTTUTUVVUTUWUVUV WWVVWVWVUV WVWWWVVVWWVWXVWXVWWVVWWVXWWVVWWXWYXVXXWXWXWVXWVWVWWVVWXWXXWXYW"VWXXWWVVVWWVWWWXWWWVWVVWVVWWXWVVUUVXWWWVUVW VWWVWWVWWWVWXXWXWXWYXYXYXXYXXYXZ[Z[Z[ Z[Z[Z[[\]\\[\]^]]^^]^3_``_`^_``_``a```a`b`aaabaadcb`ddbacbcccbdcccdeedeedefegffgffggfggfhhgghghghihgii545554lk556kkk6kj67776667899989:9: ;;::;;;:;;<;<=<=>==>=>>>=>>?=@YfcUPGA@:==ACC=>@@A@?ACGK=96aIorklkotwumL\o@]]17NAd?>@AB@|FCCLA<>:sxugbx}yx:=QRNWTYSUSIPN|HNNE;X-)*E273842421113223455798:88:;;::<=@?>AB@CA>>@DA=DOPNMHOND@>A@AADFBABD=@EEDG@A=>EDoDJLKPTZ~hBTSTTSTTUTUV WVVXXXYXWWXYY[[\[]]]^^^`_`__`^_`_```aa`abcccdddeeefgfggihiijhkijikmnlmlmlnmonoooppqqqsrttvwyyzz|CDED +CDEEFGHHGHIJKLKLLLKKLMNNOONPRUW]befb]ZY`r~mcdhmoojhdbbbejruusqzwx{~~yxvux~vttrnjga]Z[YXWXZ[YWSPO~~x԰|yywpjd^κpxbfhkkfb]Uwqoiijilmd^^ZVRSOLVYUOMPTOVTOLHIHGIFC}xitq{@sgnmmomooi`kojnjoqf_```_`_`]ZZ\ZWYWTUXXZX``VypeecguEILJHKIKLJJGDHKMKHIGHBEC@?=<<=>@BAB?>?><3(*=?@;;89=>=>>@B<=?>?:??;;:;;63167:96;97655/2885578578::874:=8,3:9>;4.dge4FHJ'%B748DF==6320-<<94541("4628?A<:77355<;62-,)(-.,*+*)((PTLS/.1..14<=2*426<<@AB?=<<60+-TLE.30.303'.+'++,*()+/**'& ""%%$%#$!#'''" $#$!(%!&"((($ #'#!"! $%!!!#$"#!! $%)384,/,#!! $!#""$"!")-! (!"$! !""%#!#'03,'&%*-/+-*&')-0.)1,(&%' "#!+.%%(0+'*',, # %)&,&  #$+ " #)+-+%()3-37144!"$=B=++5,%'/(&" $,393Q7;>9:9_;8M+74;9=E6H8V]0\PQSVWS0;@Wb]GH82aV[XVYNISUU[X?6C216229;NS>PVOJJAfcXOSY]ZVG4D6RYN1bXR@=J/%4[9aTU[SIHKF:4>;6:=;0F_VOHDIN<@7>56>63776DE22000...//..,..0+*.-.0-,-+UM@*&FALIKDI))*+(!)@3=Y[dYWa8;9421/23,//ZUOJBPQJ?X\YA12XU,+-.*N236@I,R/KOVQ,-./LKHC;62'$(((%$#DB<)J8N=TT]_S;6:>0,KGCK>@2=U1B-8QY;47BE7(I98%)&5F8*N[2;W05X0ZII=I-"I6.UOG@AJ3ZB@L9A?6SEA1.J[NJMKX;'F->GTEp;F(WRSU;oGIGMKLMWXKIFGGC5++8@B>)6GELPPRa\TfhIE[TNLRRlWRA=LB4OW1(XrmjuZ."5T,Xbei_J]`WPXP@;;60/2-0)+-(!"&..)((<@O^gH9IἫJKQ5,aG  +.%"2U5̮Ķšűў'@Cy·£GطɅk'(Ψx^{9 c]1W\F '##5()/''"$#+#)3%"U<  $$=2".#xΜ|ʋU$>> +' ) Q¯E݄߀Kj]IC953.013351478998<@BD81.M>chdbdjpqq|gFTg7PO(,B6W634677h>;;A3/00degya\rxsl35OMGMJPNSQIQPFBA:0A+!'"%&&(''**+)'(*,-/100013556887899;<<:=?A@@BB?>=>:59AA>:6?A<9:?>?>BGC@?=65659C>>:8:=e<552210-/4679862/.,'!)-2256;@?<98984677638852.--' ",-12/0,)'%##*))).0n./001//---)%#! +/0+$(ae`+0+*#%27/.,,0. '&!!" %&(/411-,*-.0,))%%!"" !ISKK'&&!!#&($ !#&()()*)+ROD##" #$"!      +  +  +  +   + +    +   +  +    + +  +  +       "$    + ""!3 (%-30*+*+,*"153'"2,/-+,&$++.10 $*+-.*&&!560,.2310&"*.%.+*&,0(),(#!&! 0,)$"$)!!!,.)(*.% !! ,  #+"-,-     *&1,311*2 +.2,+/)&$"$$!)((!#$" %!%)&#"! %&%%*!+*+2- "#!$&#" 0#,! +')!$05) + "+0--.&2(7 "%%#%!&0&#) )!,!"%#&'+$#%$-!* %-(:&!LGFI2@B?GEFFPK;72`+#"/9<5 ,;;@@AESNK\b?BURKKPSkUP?6@:-JT(!Ogb_jP&+G(OW[aTDV[TMTF<27@CIJ4&)(!W\UG&ABSMRR8PU[S0}|}|||}|}}|}|}~}~}~}~}||}|ɀ +ڀ}~}~||}|}|}|~~}|}~~ +|}~}}}}~}~ ~~~~~~~~~~}}}|}}~~}}}~~~}|||}}}|}~ ~~~~~}~}~}}~~~~{||{{||{{|{|~{{|}}}|}~}}~}|}|{{{|||{|||}||{|}}~򀆁 ~}|}|}||}|}|}|}|}~}~}~~~}~~}~}~}|}|}~}|}|}}|}}ʀ~~~}~~~~~}~~~~}~~~~~}}~ ~~}~~~~}}~~~} ~~~~}|}|}|} 刻낁ǖꠠȬˠ濔¾ރýRߨ숌ӹϥåͿ՝ᒝ($           +              !    +I//-_܎ٜ‌ߌ܃˷p0%0E!N=af3QI26, )6.#-ȏc2'Ծ_E62*OܞB-/dŔ@(8br}~zihΌσԈɖ傡雙ӵň⚓?SX]ɋҝJ<7=;[466T񟆟ߍB +   +  +   !  ! !! ! !"!!"#! !!"!"##"!"" !##$#"##""#$#$$##$%$%%%$#$$%%$%&''&&$%$%&&&'&&'%$$(''(0驪񅋎ڰ򂌚̵ˍ쿶T͸ëȺ紳ը`'%$%$% &&%&&%&&'('))*+**+**))++*++,,--/000/01012232124422245643443356656545&6679:=@AABBA@A!  !!!"!"###$#%&&%%%$#%%&&'(()+.28:973116EVabYI<9:=?==<84256:>CFDDDQdnoaRKJLLLGFGHJR^ec_[^s||q[NLMLGEA=98750...10-*('E֭y}€ɾ򇓛ҾҀͲ¼͹̹ûͽóȽ˻°ųüֹ˻Ĥ¼ෛȾȶù䈏ֈʰۦکȷ€癩°ƺέíЂ“體لʓþڊҧʼ玔쓜˙큃ӼΩɹӎĻۍÚ½ۅⰔ儋؜޺ӡ༗۹뽪ҳվpмϼֹԁIJ浊ڈܰŹ˕ґՔ,IOI.8;@(>5.UTQRTN8$)4?@KB6848.)5@@F9BD5%8'/.&-H?D%:AE0-5C:9=ALI]XSU3'0AA?=4$;1!+7F=,9<7D?BDEa_eY]cNJ>&)+10,7?<026=@N4841+3w2,*+)2DW0J71302AT956BXM2K\HGPH1NX7BN53:8.3;AKS\_[/.RLKHCD:;4/+*)/?DE;:3CMW9cUdTDc___aa`aaa`a`aabb``abbbaababbbaacbccbbababbbcbcbdccc2cccdccdededded3eedeedcdd21223e23233e2g222322e232232323gg323gg323f323gg3223 ff332233230g3232323322333223332e3222fg33f22fegee2fee3222e232d2d222deedced221cedcddeeddedcdddbcbbcdcbccbba%bcbabbcbbbabaaa`aaabbbaabbb`aaab`aaa`a``a`aa``a `aaa``baa`a`a``a`a`a +bababbba`abaaa`abeba`abaa``abbb`a`aK``W9`fcdzj^YFBNu~A8GJUi?cgIJkJGnKJYq={o|Ғ|SUFLHX[\[\\[Z[[Z\[ZZ[[WXda[ZZIXZYZZYQ??5fFUDZDDK;MA]J~ICHPWYJ\)Hpb]=GLCJo}anTshxWosV^m{xÁ{_Vabu:ddKo^A\;eJ[\Ivmqyd3F43cH=D#-5_On]^aeceZUn[kNcUqȈ_ltunnU[K8HGHOp?y>?LjcRbNTTUUVUUVVUUUVUUVVVUUVWWVVVWVUVWVXWWWVVWWWVWXWWVWXWX WXWWWXWXXWXXYXWWWYXWXWXXWXWWWYXXWWXWWWXYXWWXXWVXXWXWXXWXXWXWV WWVWWVVVWWVWWXWVWWXWVWVWWXYXWWXYZZZ[ZZZ[\\[\\\]\]]]^]]]^^]^^]^^_ ``_ab``__`ba`abaabbcbbcbdcdcccddedeeffedeefefgffgfhhgghghhiihihhih4jjji65k566l6l6n677667678778878 9887889::9:9:;::;:;<==<=>>>=>>=>=sgh]XQA=<8=B>?9:<>>?>;?M;c=9gj>ssnplrx}x}hNabEf_13=Rclt@CB?ADD?DB=;;spx~hgswxt5=DXKOVUUQXMOOvUPRH>;T.)'K4253./30..-.1h31456688989:==<;???@=@ACBABDDEDCA?B?=@HLIHLKME??<>=?@BDBBCA?AHSPHA?=?ELOLJMPVbh{jMUTTTSTSUUUVUVVVWWWYYX#YZZ[Z[\]]^]_^_^^^]_^^_`_`_``a`aabbcdefefg9hhiiijgiikjkllmlmlllnnnoqppqqprssuuvwy{|}}DCCBBDEEFFGHHHIIJKKLKLKKKLLMMNNOORV[_bcb^ZX[ixqeachkljgdaa`aekqrrpmuxqruwyutrss{sroojhc_[YYXUVUWYYWTQPvʨ|ûqpoe_Xyu±Ƚjbefghd^Xrjhgffe^aZVQUQQSNKNTU\TWRSRNJIIHF@|Dzl_gllonmljiorllorpifda`^^]^^][^YUYUUXY\[__bZole_fwNKDFJGEKJGGHONMNJGEGBEDAA@???@DCBC@=;?=5*.@<<;=>=<>=??A@==?><8B?<::;;80878:78:9765.19656 99745796673676C,(699=:4.g2-6GMLJ&B;=:76/00W+47467113/%,=<:87=30/1143:=650-(KN+./2)*WPN/120146;9%*388=A>@@A>==70,*WHCH..-*-),(/)&-,*,()(*&''$ #&&$"## %&# ! #!!$$"%$'&"%&#"$&"!%*(#$%'..+)*($&#" +! "$#*!! !! ! $41#! "" !*,-&$&'"!%$%#" #++1/*'((,.*,-+'*#&6+3.'$$)'#$&"$&!.6*!('%-#"%*-+-)# "$ !!#)&%0 #$###(,+,)'))&,27.-79)%'#-)(%((&$-+*,&"$'*+/g7966=8JM7a)0//8>85;@CA:;@+(5;4/67@:D4+'O]XPZQKKK8;FFEKOC;:8E@CAAP#(*/&-.,*J-RQ*4D05PGC6%3A4i22b64DK9:W@6021,*1120-..,++*)(+,-00,*-.TKO+&&).%IJ),,)!,0XddWB2Sc719;4+II:AB'QaMJOOVPMR@]JBTRGK7RPSBCMHJEJPiPUTDEEEB>/*.6BD=.0<7NLIWcWRce\4POSLLK|eQIBP426=ZM!@lhjrmD(&Z/GYciiij_X]kje]1JVWUOL.6H$4Hje_R;6ZQSS;_W_^[09B@(357$!!GHFFKD+%05C:10-+"*68<08;.,  014*02!(0)(+-.,C?>; $('   ,- +,&.%'+.OMK@?F63-$,*"$&-29%%"   /=. !0E-))6L?(AN>=A78>!.$%%.3:=?>:41/+&'#% '(+&(#-8D4\Vnt0`aW"ޙED;3-'9lZ9%2# +1=&'Q͵锪ѽހG"H&2Tŧ̊t7r誷򕒃׈h5 '@[a„fP2QB.4^,ʚڹbP>+8Ek?# &.CL '5! 207$%K/Pp.  3'$B&#(+o펵iu;(9S0$ + !-#3ք ܄ׅ݀M&mXND530,08430058:<:89<7223gbjvdemptj/5ARDGNPONTJPRTHB<60@!3$%&%%*,)()((**()*,.//11458;:;;9;<=;=?A@@AA>=?;89=>=;;;@;7::>;>?AEC@>8667;9|C}rkw{z|xuqpjoqmnqrpljlfb`]]]^^]a_]^WVZ\^[]]^X|yuosSUPRQKGIHEEDHGFFC>:956433102679:984/--&+-137;>==:98:9578753<9520.-'!-/02000,($##*)(+-/.,,/1---),,)$(.0/)(*d1)'++)'"(/./')+T*('"##$(+,*3,,)'(++--)+(%7:$'$# !%QMD &$$&'(!&('**+),.-*''SHBA"  !%""]   +   ; +  + +       + +     + +                   6# &)6#"-010-*!*-&'!"%5,1*2+1.(&*)&0660+%!&(!***:95)+46.32%(."++.'!&#((*&"#$ "  &.,&,(#"#! # !"# ("&$61#'*   + + -*)/0)10+#*.& )# "%)(()&(&#$%"&$!'"  #$%%%$%/)! + + ) ),1%7=')(+01!90# ' (8,3,!,$" "*#)105%#94*&'# #!+' !$0/#"%%(''9#2((?0%*#IEH:;FBDAEJIPJ740/-.&"$,;>7$'2.C?;RIUIGX^T0NLQMNLeOH=H..09VC7^\^dd;M#=MW^^_bXTVa^[N&:FKKF6#+.$8XVVB21PKPL?@AB@@???= ""!!"#"##$%%%$$##$%$%$&&'(()-168951./4=N\^XK;569<><:6321358=CDC@AN`jg\KFHKMLHEEFHOYbb`YXgvzr`NFIJFEC<9653.+*+...,)'Ay̨}þǾꙡ򄐔Ȳü˱ΣȹöİֵߞҶ񔶲冀ҺǪòźȽχͼ¿ĽŦߞ텀浱㈌ƭЁƵـҹޯߋαĹ̳IJЯε̶퉊Ú׎ɩ섗Ǎü̱ħ˘贠ښӵՇȍΧԈ؊׼엪ݥ美뫝܃܀󩀓ĆΦý»üʸֱňӄ׉ЯƯǼꐂ֔ιʀ'#+LTC/@K//,GWOVWSM-!(@CFG5:/33'.JOL><;317),)009L76?G<31E<7>>KNGTKYF%!IF7/>?E+#)@E.5=2>B:>BJ[dYbcWGT*)+-004@=574=@N4716(/g0,(*+1?TCD@42.3D/<:;@UK?DWAFVPFMW=D>41=A59X_XVVW_z]R7DUcAK.KBmHKzaf|I`vyi[Xmbr{^d_jJKNjy5S`^_EkRIkr_bpSs)Y^`P~{xL@L=zbLwM:C3_gA9W|dA:6Lz`a\WVUUVVUUVVVWWVUVWVWV WVVWVWWXWWVWXWVWXXYWVXXXWXXVWWXWVWXWYYXWXWXXYXWYWYWWXYYXXXYXYXWXWWXYXWXXYXXYZXWYZWXWWXXWXWXWYWXYXXXYXWXWXWWWXWXVWVWWVVWXWXXWXWWVXWXXXWXXVWWXYXXWWXYYXYYXYZYZYZZ[ZZ[[\Z[[[\\]\\\^\]\\^]^^\]\^^___^^_``a```a bb`bcbbabaab +ccdcbdcccedeedeedeefeeeffgfefhfgigffigh5h5hh4i54j56565j66l76 l676767676678778879798989 ::999:8:9:;:;:;;<<;<=>>===>>>?>?>??>]VfUUTG@B?GC><37B259>BVcn|l6gbvtsvrnvzxi]@>:une`Uow|{4:@@=?AA@@BADBAB6AB?<><>IKHIIOE:8;;:?@@AA?BA@ACN.SB@?=EFDUvfGNRU}qSUTUUWVWXWXYZYXZZZ\]^^^]^_^]_```aabbbddece=gfgghighhjiiklkklmmlmllkmonopnoppqrtutvvwy|~~ACCEEEFFGHHIIIJJKLNNOQUX]`a`^[XY`p}te_`diklhc`a^_`ckopmjhrplortsrpponu|ysllkhfb\[XWTTRSTVVWURPҽrysjb[wʮˮrsp~Xbhfee_Y|pf_aa_`\YTWTRLLMTVXXPKVWQQNLKCCD~yubafkmnnmlilmsporwqkge`][\_a`_[`[WWTVXYWZ\\aYC|nbckSMKMGHLKJHHLLMNJFDFCGGHDC@A>@EC@B@:9?;2+7B=<>AB?AA@@>AA>==>>?BA>;;::6/879:886522038776568<8977265165340-$/7;:862234:972-')QEE&.,,(*&%#0)%.-)**(&&%')%N %&$"# :#&#$$#&" $# $!!'%%%#&'$#&*.%%(*+%"%&,# !!!!"  " $&&$   #'"!#)(" "!##%+((/,+)'&,.$"+'$&(+( ! "/6.)),,'&%,)',,'#$)*BA&/*&&+*& ")(&&$$$+)&) '=,, )" $(#%&-*+% +"!!%'"+*&'0F,&#)&$*%-&).***-231.3,+ $ $!#$,(!1&&!#!$$ "$'&*O<:997=`[783AV3><>85Eb_SX:_QOV[TXK;J=;Y9C4`S[[^XFBMLKTZ7dR@GOMD?@:8@I;9794HedWPRZYV[8BE?.4\8531/XLK;D=?<7ISIGKGEC>>>88<8166?@@8BC99D>B>G8<2/3UIES*^EH;1XTT01332_OB:842WC17NR'/8!/44\M;:-IF&F4:NE>8B_T::,VYXUSC69;YPF751/16MO;COD@\4_-7K219>>ZTPNO+T7!6I3B?bA1??NN:NLLNHNSNJLKKBB@A1.02DCZ=3/0HYFAaZEY]f`=J>ZHHv^OY]ln/7H]b+/VfepwZ>&==DI_edc`b`^caffB7RXVR7@8*B^mb?*:]UEn2ZY`SWTD@223-"% *=($)1)#%3('-+522>7B0 ('$ + %/$-#*/$"'6IRGJJ?2="++%'%-29%%%):-(&!2$.*,4H@6>N9=GD79D&&"%,$)/:G@7761)2+%! *$"#(&3;7+iVnrhVȗu&7;!#!@ #)""M;H[958U˕ߑҠ+[*FʬIQPĚ( "#`-!XMB[*18B0!",<÷˃Zoj<|*EW <)S ' '")%5/4#0&*#i1 8 (T5 +"& HȒʿo<+3_  4I5ԕ;݄Iޅ'քՀ? ikQLF:674;955,0<015:?OX]_U3[Ylmmmhgouy|r^P3L8+H&&'8]Xf9:987=B47'%##&)**)&())+*,+//1245579::9;<;:9::;::==>><<=;::68>?=>BC@@;787=!D?>?:C?9Dn]HJKLryiɄʀaf_XPKyľspmuJQYVUUSOsic_bc`^ZWPQLJFEGMMNOJGMJGGFEC=<:;:<:775779;9740--$"./01//-' !',*,-+,.1.V+-)(.,'"!+22.()/2-)#"!!%%&*-*'('&F;))&#$% %!&%-,'*(+++-,.-,'#$$ A<$ #&-+*,..*-/-)$$H?B" '  %  +     + + + + + +                 + +  +   +  +&        !! #73. 20*-0)'*.*0() /!0*101.$"''&+/3'"&&  % (880,.31-/##-,&&"'! #  ! $ !$"('(,)"("# ! "%'$!!*($./'62/*+  + + + +  #).5("66"$$*$))(&)"$'%*,""'&%+& ) )"  $$'")%+0#--#-)$ )!'/++"-**///.#/@;0%%$&6%!,(&$#&$+0=#$=DB0EDFHBHLHDFA=31/3'%&(;=8,&%=M<5PM8LP][6L?WIL{bMSTff-3CXZ $IWZgnR61*19NXXYX]YV[TYX2+CNOM0<*.K[Z6$2SKDn6TQYLQG}|} +||}|}}}|||}~}~}~}|}}}~Ԁ Ԁ~}}|}~}|}}}|}||}~~}~}~~~~~}~}}}~}}}~}~~~}~~}}}~~~}~~}~}~~}~}~~~}}|}~}~}~~~~~}~}~}}~~}~ }~~|{|||~|}~~}~|}|||}|~~~~~~~|}|||{|{{|||}|~}||}~~}}|}|}}|}|}|}|}|}~}~}~}~~~~}~~}|}}|}}||}|}|}|}}|}|}|}|}|}~р~}}|}~~}}}~~~~~~}~~}}~}~~~~}~}}~~}~~~ ~~}|}|}|}||}}}|} Ԝʖꗃƥ̺Ҽ܇֭µŨijƵ½׺õS수ŽƲ^#   !  !! !!    !     !! !    $   !!                        F2н܍̜ꂁ꠩۬W,&) '+[F9THL!6){)\*Ǭ戆ǃЄ貄&&1[ܯۇ߉㦯X޹ժݛǞ捀$"VuB?JɚLJʆ޼ʘв-    !   ! ! !! ""!!!"#"!"!"#"""!"##"""###"#""#$$$#$$$#$$#$&%%%$$$#%$%%&%&&%%%'&%%$#%'% &'''&&&&((🝅ކ쁊ϹłϾXΨ簜瑛ƶ,'&$%%%$$%%$%%$%%&&&%'')('())***)*))*+*&)*)))+,,++*,-,--../0101113102231123231232224342455668:<=>>?@@>= ?  ""!!#$$%%%#"""#$###%&'))+.36652.,/8FT[WM=4369;;:51000258=AA@>>L]hdXHDFJLJHEEFHMU]a_YT^pwtfQGHIHEA<8441.*)(+-..+(@ʦڀ½Ӂ̷ø⌑Ȭ󂉑̽»䭐½·پķϼȵïķ򀘬в²ȾȻяƾʹ׸򓠔ʼnͣ׼鉑꾷èնɬѾÀРˠũ󂇌ϿğٵŸȶɷǻȺďҕ򇆈Ԥˑޟ낅ϼܫ넇丗զ֣쁅ߚ嘆˻֗ƅ¹᳣Ƒއ끈҂馿|҆蓓ׇʷÑěͭ逊¥ߥٚҾɀL!5>WW72I:B-"7YNX\WRC#94BMMC>5G;(%7HMPH>5U,:;"*<ZMI33?D4(BA8;CDKVO982/.3I0;<B9>?EW\PI+/+RYNH226;901/3><866X`aGIc`aabbbaaabababbbcbccbbcccbcdcdcbcccbbddcedcddeed0ed2d2deedee2ef22e2e22dfed3e2ffgfg3232333233323323f3434333434433343334333g44343 4434333443444344i43434344434443f43444343g34323 2333f32323#gf23e33efe222efeee3ededddeeffdddeeedcdcccbcdddcccbcecbcdcbbcbbbabcaabababcaabba ccabcbacbaaabababaaabbaabbabbaabaabbcbbcbbcbbcbbcbcbbccbcbbbcbbbadddegiN"0IVbbcbaacbacdcbbcbbbabababaaa`a_[z~{gVHJACѪTcntBwBN]WPuqpZkNV6===>?>>???>>@L`fZ[VMGIJHHG>8;8BEDDCLSNv]R>syuxwsxz~=h4BV<:a2322G\qwBA=AA;qu=@<;<\eM`q{r4::HHEPXWTT`QXR|OQAMF<;LT+MK<221/]../-.//-/225467:;<=>?AA@AAC@?B??@@BCBA@?>>>;=;CDB::PB7;;?9=?@BC==>@DFIZTCA?BIDKZaDKMSiouFTVUVVWVVWXYZYZ\[]]\]^]]]^]]^]^)__`__`_```abbcdccdddefeggghihiiijjjljkllklnmnoqpqpqqrsuvvxz{~CCCEEDFFFGHGHHIJKKLJIIJJIJKKLMNOPSV[^_^]ZXV\hv}}vh_^bfjjid`^^]__cilnjgfpzlhlnppponmlrz|v}sif`\YWVTSQQRRUUUTRkʹżmttokfY}}hjfhp{``^qh^\]XSUXWVSWSLQWSROKKJHD}}ytkbddcjnllihjmoonpwskggb]_]]`_^[^\ZYYXVWWZYXW]CnfirNOQKNMMHGGJKJJHFEDEEFBBCBAADCACA=<>60-@CDBDEDC@A@>>>BABDB>;;983085664136/056765569:7368:654//235-#-48997530.A?A@87656941368==7566/-+#&37434?=76242216776.-%()***%&'&)*(*.002.-139'5A>>;A><=;6341/+(*+D"(-.1,,('#*,(-.*())*(#(%%&& !$%!&$"$#%%&$###$$#"!$))&-,)*/0*&(*,+#$()(##&""$#   "#" #!!%$#!! !&)"##''"#%$'%+-((+.*()&#*)(%'*'")112-&&)*))+1/')*'"9%VV<)(%'+*))''*)*($$')*/'-. '*$%(-!#"$#(/!,(-?>@5.+*+ !0/(-)*)+-+&*57#$#--"!*8& , "%#')$ !"#%*b=:9649c;`4387;606:?RceYPT_N6ULH6d2152/^PMEKBH84-HPLKGFB>=<@FHB@AF?>;;=CADDA=FD4+N?F?C(3A,K(0-,24TH<729K<'D,FNYceIW]U_34\dc4R6$ #%&$#$&%%$#&$$ ;5FF0F..)G<%U8<57X>9(F?H)(;26>;>?8643122253323322VV1.R...:,L=1EH=;B700014673\Q=2<4036f\4135V=L(%*6A?<90-11<,Q=1HO`YR0.7>97I+B;.PGTF/1 %/GNSSHLC?D\WQ@:AH4W.OA;P')5.14WV./NE3A;@;R27Y[328IU3X0=,674U2dS.@.9hRX%NCT^ONOLDGQRHDLG>:=1+41>@B>51DVN?WWTWVdbG3RaL|jJb\f9>c:UeeM-8X`_}uR;7;9?Xcd_\[\Y__ ce]4:RI?\2-;D/)Fj`\3'NbU>C^\^[\U< -CH+,>/.*IFRSMG6"&/?A:7/>-,=BE=62G$$"% + +D<8%,"1.)*/06*57B>+ +#+!)&' 21 ,&D=2=C42&,%)+3IK7*150,!&$$$ !%+2.'/2 iK %$#)(&. 1"=/-0/ ' "-%/H$7G(E  !Ͻ𫽧M;'"  !/^oۆj݄ހm6leTRJC<@@=@>8462:==>?HMChQB9gpxprpkps{~~9^/9F2/N((&)=Vkm:848:6lo9:664Mu|_Naqzk-02@@=44G:798=8==?@A;9657:>BF?;J[CJJLZjpqÿþbeb]ZUK}}tphgls{SSPukf^\]WPNNJJHMNHLOKKIFCA?=}z|{zsjbdglv}}{zyyxxxtrupjffa]]XY^]][^^[YXXWZZ[ZZY_HxzURPJKKLLJHJIFCC@?>=;9333447::9972.+ %0025;>=??=<::9767::;=;731/,%%.-/1.*(#!(,.,-,-.0-*--0-,*(*+& '/32-*-.-*' !! %('&)(%)++,)%""!$&''0.+-,.,,**+-,#!! $&""$"!!%**.+*,-+*,,,&##"; !" "#N   U +  + +  + + +     +       + +  + + +  !         +2  8$5%"$$)4!+'*0/&#*%#&/1-).+( $&++*#%##&(&&(& %()!"-681--3*-'%0/(&!$#"%"#!  "$ ! #!"% +!&#(# !  #""%"!)#'/36$+/*/,24. + +  #.1'&$"'*'$"*'/*+# ,'*2/'#+&!.(!")!"$'!$,*'!&+(!*&$%#!#!# */2")*'4)0')=/5F:HPGIIE=BLKC>E>402)$)'37;7,$6JD8LIEIJ\]C1T\MqN_W]6:X4P\]>!'GUXshI2+(%+ETYWUTTOUTTUO'1ID@V(%1/6WXR(DUL8BVRVSRK}}|}|}|}||}}|}}|}~}~}~}~} + }}|}}}||}~~}}}|}}}|}|||} ~}}~~}~}~~~~~~}}}~}~ }}}~~~~}}|}}}~~~}}~}|~||}~}~~~~}~~~~~~}}~~~}|} ~~}~~~~}|}~~~~}~}}||{||{{{||}}||}}|}~}}|}|}}|}}|}|}|}|}|}~}~}~~~}~~}~}~}|}}|}}|||{{|}|}|}Ā ~~~~}}}~~}}~~ ~~~~~}~~}}~}~ ~~~~~~~~~}||}}|}}|}|||}|}|} ɣįǺ̠ǁϱџðRփͽم⯿ƹ̭•.   ! !! !!!  !"    ! !!     !   !       !                )  !   $%# b LUUOB3015:<;62/.00258&ELQKUYSQ00*@X\P;5F@+ON>DOVR=46"DM!.K;KSJ;?258<6?BINEMHII7)H+3NJ'*(7&!9A#A;*6K>PE>GFBMTGD_NMZ369:=;CA?NZY=(,*/.IL.57=62.0BD*47afdcdcbccb11ccca1abcdcbcbbcbDcbd=_YhKQBGKVb@F}Qpes@lYQdggUcLB[dOY^de}[D;ddt87AW\\]^]\\]^\\]]\]]\]\[\BS\[[\\[[\Z[[Z\QKx,7^N[YXYP]zO0LXZZZ?ziUZ^}A@==>=>=<>>==???>??=>?@???Bake`VPOINLIQ?;:>FEBGKFDCAACS=D}ys@xw~}|?^2BX`=``2.7@jfm>@>EB>woxA?;8[wDwfVkwp37;>HBKXXWVWSYWGVALG?:JM(&$J1/.230//[..//02158:;<<>??B@A>@?A?@@<=>>@>@??=<:;::=>994EP949=A9==?ED??@AEFEJLA@=IKEJXDJNPSfwyNUVWUVWVXXYYZY\\[[\\\]^]]\^]]]^]^^]^_`^_`b`acdGedeefgfhiihjjjhjlklkjjklmlllnpoopprrqsrtutwz{|}CCEDDDEEFGGHHJIJIHJIIJKKLMMORUY]^]ZXWVWaow|xj^\]bfjifa_\[]\`dgikgedp|vifglmmllkkknv|twugghgd^ZYVUTSQPPPRRTTUȱրûkha[|uxwشddcmkotqg^\Z_]_a^PSRRNNKJQNIwplffe`]dmlkjhhiklimsokQgfc`c]`bca^b^ZZXVSTVXWUXZHsmoRUVMKIHGIHFHIHHEDD@BECCB?@ADBBC?=<;1/+?C:6?:@@@DCB=<<;7585662/:-19325698644436:9754.0097%%844743/--7FJ??9<;78=GAD83655:;66762/$ 456469B=70/2/1176671(&'+,*+)'&$#&..///10.126(?B@@<>99:7200/.+&'-$$'.23.+)*&-)&.-+/-,1-''&!!$939#& "$%%'&%$$#&##$"%',*$,($)--'!'*(!&"@!!!%##$$%&$#!"!!""#$#!! "#!1' ##""1*($)) "# ! "#$&&*' (-)'0.**(%%+,''&,*#! ! $)*(&*+,+/40)))%#-4+L%/$%&))%$%'&')+%#!!%1*## #)'#%#%!##"*&"!"&)$" "!.#'(%)'1:K5&&&$%&((!!.#,0.,(.&!#$('b<9;236=jc30b7556@FFJDCLNLXdZP_^OOC@C7&4_;B?=???=?BD>EGCB:@HBDFQ>'LMKEQA?DCBGDCADEC@E<\<7:4H=>;,2BR-/123NF.`E--,$712/NSO6;J;R[V%+d_XGPBX]UTNNG+LJMHHCBBJ;R46;CA?;23FVTJMJPMXfJ*\cWm_KLe6c5DVneb:4Cc\gmi[Z<*4Eihc\YYZafc`ZK"C9>FB-A56 *[c_\$6d_a`\`^^^\P98ňʟÎN** #,L1 ?(1%50*-#帒ߢ΢ڵw1ʀU>,އ~׸Ы!' ",<+(7$I$3[»P_sdVyX"HV!!+ '0$3#NEH)B6D1%8.!9#U -('!);ա݊ߝf'"$Rh    -٩ޏ؀{sbYOIHAFDBK:657=<8:B?><85:K8Auzsn;rry~y:R-:KT3MM($+8]bc786?<:sks>:51Mm=maXkud+.37?9ETQTTZX_\IX?C;52:96$##))()(&'()+++.13565578;8877576795667:9:9;:998647999/>G537:>8<9=;:87884:9:==<7432+*.--.)''#,**./0..***),-.,*+(*a'& ')/5/,(*,+,*!" !&*/*.(%((*+($"! !$(*,1+(&)-,,++)*)$ !#%&%##"!'+,)+(),*,+)$"#  !"!,(,4  )    + +  +   +   + +  +    + +  +     +   + +   +     + + +  +  %    3!#>95 $#%""&&%-4-'10)+$#%.(**$&##)0)+#(!(,'"%++* )% !-02(.4)%'"!*),,%'$"&#$$! !  !!$ %##$ ' (&""#!)2 83 .54549'0/0'! +  '-2"!"+,+(&')$&'&(*!'#"*"(/18+4-+,.%  + 2 "60/,+,!#' ($" !'$ $()*!(2 +,,& !,4* $B41/J:JRMOGH@)GDHCD=:8?3F,-1<;94'&9ML@B=CDUfJ']`YzkJG^4]1=Pe`X*#5TTagbTL+!3WZYSRSQYYVRR?<5CD9(9(*IVYL"/UV[ZTWUTVR}|}|}|}|} +||}|}}||{|}~}~}~}~}|}|򁄀~}|} ||}}}|||}||{|}}|~~~}~}~~}~~}~~}}}~}|~||~~}}~~~}}}|}}~}~}|}|}|}}}|}~}~~~~~}~~~~}~~~}|||}~~~~~}}~~~}}~~}|{{||{|}|}~}|}| }|}}||}||}|}|}||}|}|}|}~}~~~}~~}}~}~}~}~}|}}|}|}}|||{||}|}|}|}̀~~~~~}~~~~}~}~~ ~~}|}~~}~}}~~~~~~ ~~~~~~}|} ||}}|||{|||}|}|}|} ݳ󤴯㈶԰듓れļƽ·֓઒ڴ۹ĸŴȶR¼ĻԂȼݻȴհǒڕ<# ! +!! !  !!!  !   !  + !   !  !  +    !  +!       e"%!       +M㇝Ҧٺςc"%Bvūk_.'0,$$ ."dZdݨ%"T-!lǍõ݋׸щLhćJ?a뽏ࣛ‹چԌÈקG؃ړցۻɾ%&(34tc;#-.콼UD       ! !! ! ! !!! "!"!! !"!"!"!"""#""##$#$%$#$$#B$"###$#$$#%%$$%$$''%$&%%%&%%$%&&%'''$%&%%&%%&'''' _˃򀇈́Ճи[·ݾ٤c-&&%&%%&%%&'''&&()*+()*+*)(()***('(())(((**)**+++,*,,+---../0212;112331001101343334233444544668868;<=<;;;:::9;<=@  !""!"""#$#"#"#"##%&(+-24673.++0:HQRPE7//15;<961.-0/035:>><89ESZZNDBDGJHFDCCFGNY__\TSaprjYIFEDB=86342.+)(')*,,Ziӹʶųꁓĺ÷ĿӻżӽνɷμȾ¿÷ſľƾ3;˄ƀֈǽůȼӃԂʗþׁʸȅʻٵҾ٢ɯļɀþƶӾ˩އЙœի׵䍁蚂ێ؃ùҪػ򚱔Фڂݸڒԑ䑥ڶ傋Ѷȿ傆€ҽӌ݋ǹȬ̸=Τӳߌ򅬷ͤ굻Ҁ\Z*XWb[C*>:1%8;QPW[TO>8%AV^WF1CG*CB7H?OQPAR=;/-,?7URH5'K73/:::EAKGGHGQE7@:($I].**=##1$99A),=I;U(6P^[^TUT5.33IH?4&4;CBXa=68;+V11/032=,/F87*,7+666=;ND@KD?[QECaEKW633<;<=;?HV^GI,+/VBK:6::.002NJ265AW2H75?EMbcMabbbcbdbcbbddcdddedccbdededcde23322233egf33233f3fgf3gh3434343434 344343443454545454345434445545454343344434343343434343hh443fhf333g.3hf3ef3eeef3ffd2eddfefdedeefeeededcdddedeedddbcedbbbdcdcddcbccdccdcdcabcccbccbcdcccdcbcbcbcbcbcccbdccbcdcdc bcddecbe`88BSJ_2ccdceddcd111cccb1cd1cMbbcccb^?SwmV[EHDA{jarzd;TF^indTIB_A\`dNb}C]gYo}}թpUL7dH8]^]^]]^^]]]\]^^^] +\]]]\\YX]]\[\\]VTImB5Xb}VZYZZW{{X[Z[VdYQe7ME=aBUZJ:~Saxss{Rjz[ZHdclLlM̫WnJ=rOgu_Śc͗Ra@n\ZxfvdyxteיrRmˏp{fԢnK~:J[WWslldwgRt`f`Ev~s@?j;qrDCNDRh|PTOSVVWWVWWYXWVWWVWXXXWXWWX WXWXXXWWWXYXYXYXYZXYXXYYYZZYZXYZYZZYZX[YZY$ZYXZZZYZZYZXYYZZ[ZYZYXYZYYYZZYZYYZYZYZYYYZZY ZYYYZYZXXYXYYZYZXYXXYYZYYYXYYXYXYXYYXYXYZYYZYYZYYYZYYYXYXZ[Z[[\[Z[\[]\]\]^\]]^]]^^]^___^]__`_`bbbabaabacacedbdccdcdedfcdeffeeefe/gfgggfggfffgggfgghghhhiiji54445ij5kjj5kj5665665677678877898988989:999:9::9:;:;;;:;<;;;<;;< =<=<=>>==>?>=?>>???>>???@?Chhi[PRTPNGMKGEDGC@CKJ@>><;x^ivp37;;BGLSWXYVSZVQOPDCIFC.HK(+''?62.,-..1123[2368:<=;<<>>BAB>=AB@A@>=;:=;<<=><778;D8874OH589;>;AA>CC=>@CFHDFF?@BKILSUINPWYetTVWVVWWXWXZZZ[[[\[[]\]\\\]]]\]\]^__``_``_``aabbbd eedfghghijkjklklmlmmmo%porrsttuwvyz|}}~BCDDEEEFGGHIHIHHIIJIJKLNORTY[]][WUUU\iuxxm`ZZ]bgifd`][[Z\_cgihfcdoz|ofdeikkjiggikr|{sp|xjffdc^YWVVTRQPPPQPRTŹЀfca{spr|~|iffceggq}uhbefc_]ZULTQOOMJLPO|uqpm_\apojhfeffedirmhggdce_a`dd_^WUUTTSTUYVV[YMJ}NLIIFDD@{@AEEHEBDBCABACABAAB@?<;320D?95?@@BA@BB@C@==:?@BDCA=:89447642/1.35633666546894887762,157/ -8305442.1>>DA=:;8534;;57862+!*778326::821401065777(''++)*$'(&&*++..01/-017(8DA@9:65741-00/)&')')*145,(&(&-)&,:*++*%++''&""&" !'($"!$&%&&&%$#""## #'$'("'&&*/+&"$" !$$$# #%%$#!""!"#"""$%"  "&)*+'"#! $' !"#*%&$)&%"! "! "!!"$-20)&)'$$).0('*,&!) %%%&&%$(*,/,,&%#!#* +(&%)&'###+-'*"!$&)'#!"(!'-&$"0. !%"$"(-)'4!3&%6!+'0(('('< (!*+)>:63I8R>85cS8VG//H>7DMMKJJIW`P1VRLDGI/*L876]LNKJEKTYUY=AM:j^\OPEHS;DCfdXL>B:14U5N_b]GNJ61QNJM[.[GNXZPDQICBCMEDBDC=05@DF8:A=;9A@>IFD>B?ECFE<;B;9=G?::CG2OOMEE>?ADIEEC;BIG<:=;16/P4>A?C7CM(>14/0TBFE04HF'6XAT^W\lfZ4jd9hS\]iX60;dl5P,"GGLH<6-#8&(%#XO,.P6R.00.5,,ENMVI@3,!/C2E[8=8789877755533120223421_UX[ZVVVW[[\^///XZWMQJGQOCE985>BN1-%(.DC_7@ChdJ]2dF[3 #.!&,.0-90(&-0T/089@-F:34/T.\=U/2VFAKB??>DJ+5?MIGA@A&#;>0$ '.2@J+$'*$,"!$&$%,0D>6=71HA62H7;H$#&&($(5BI-):*4(#$% 64$&3E+7..;CNhuFQɝMH0)!;8'*/9($,-&)&_ݱ⦡֠Ѵޣ.0I߿[K]ݽmI7+)" 0043/D?+,K!.3kTҒfLSoL!0It[ %%5a6%!"/,/1>?&>N/AFXD!(("0[Z"/&OHPģӆߝe'" + +  + +q̵G߄[5ofTJMLGGAGE??>@;67<<4332228H9xuvsy{u>|8QW|zulw99/E68q{\irf+/448>ENRTWXWa\SQTE=<9:*75{+%%&&()))(()*+,-.131/256766215667786569897;;85665=6960F?2668:7;:9<:6678:>=?C?BFLE?GOIKISTX˄=ľVTSvqnnqz||xqnpjihfnt~sd[X\^\YYVRIOLKKIGHKHy{~~tnjhbXZdvwyxz{{xyyyzsnkhcbbZ[Y\][\VTVUVTWVZWX_`TURPJJIGHFDACBEB><8767565888652.'/..)49;==:;:67543078:;=;741.),/.+'## '++*,/0/-,+-/,.,,+*(&'$ (+-2/-)),-%'$# "#&,//+.+*)(+.)"  "$))*./+*(+/,.+,)**)!! "#&&$""+-+'*'(+++d(***" !!  +    +    + + + +     + + +    +   +    + +   + + +  +   +    + +  +    + +!%-$ 6*,%%#''%%%"-1&**'$')&/%%%&"%*,,. %6//'' #*"!87.'#*+342%*&(&$%+-"%++& '" $ #  #!!! "$y$$ ! $&$$#&-1--87,648*/17+"8=/331+'#)*$ !),())*))((*)*+&()$&!&% "&$0"#51$06%6  )!#!%)%&# $!$#5&/#"$! ! /#0*1&)3#(4.;FGOFEFE/BBDFB@:9??**.59:<<-#3AQB?A=FJ^K+ZMT~cVYG[8>76@QfaYH#!:OQ_c``R5%MTWTRRVWYUVOO52[VS+>>/ +SVB"FNQUTSSTTTV}|}|}|}|} +|||}|}}|||}|}|}~}~}~}~}~}|}|~~|}}}|}}| }|||}|~~}~~~~~~}~}|~~~}~}~}~~~||}}}~~}~}}~~~}~~~~~~}~~|}~~~~~~~~~~~~~~~~}|~}~|~~}||}}||{|{{|}~ ~}|}| }||}||}||}|}|}}}|}}|}|}~}~~~}~~}}}~}~}~~~}| }}|}}}|}}}|}}}|}|{{}|}|}}|}|}|} ~Ѐ ~~~~}~ ~~~}~~~~~~}|}~ ~~~~~~}~~} +||}}|||{||}|}|} Ţґڨ֭掴ǜĂ⦲Ǹ؁ὄ؁˹һưıWƼ؇ѿƭͰƷ»ڰ䒘L#  !"!!!  !  !!  +   !*   !! !   !  !  + !!  !!  !! !!  !  !   !   ) %&#!    <"#KهѾս޴Èʇ!#[*S6Z<.930! -  7%/7&  S奁}թߟݸÊ@1g&=­]}ݙɠٌ耚՘Kè蒅ښǍ3-&3D>LyI_\ԿڧE      !!    ! !" ! "!!"!!"""!!"#"#"#!" !""$""#$##$#$#$$#$#$$$%%$%#$% &&&%$%&%''%%%&''&%$$&&&''&&&'(' ĵ큀湠Eʨi)&&%&&&'& '')(()())*'()(()((()()))('(()+))**)*+,++,,+,--,,./01122201//21210/0010242333235457889:;<;:98:;<>  !"!"!!"##"#$##"!!""#"##%').24543/+),4AMROG9/.0379973/-,-.0369;;869EQVSH@?BFGFEEBBDFKW^_[SOYgkg\LDBBA;86220-+)(&'()+Zȯιĭ胘ʶ¶Ǻ˿ƷžϳƼͥȱüíŸ왬ߔþʩú򌍫ㄆޏӲȷۄŴ޻畧éͼĭ΢о˘ϗƼĺǸҼ²˸Ӻħ҄ؕݞ潚ՃԂ്侧؟ȉĺǘɂ݀߸½󸢝衶Ԡþ٦̀ƔՉǶƾ󘑂״Ӏݒ鬣ä񝉮É􁜜࿏͔ћʱɺƒ̀YC1SUXaQ/U^7(-'CUX_[SLN/8L_^W9=I3L=,A9DMMN@@6=#)),>KON;6JD60.53-M_0yC`LkqYyBGIxLYXCPsYTMHb=>mQ]]]__^_^^]^^]__^^^]^^]]]\\]\]]\\\[\\\]_a[:7`]P^6`yH\ZZXANShqRUY^dhPOf?(C4Iqr:>^rjhrmLJ`TF_Rl\qS=Xoz_ifwtwqao>IkX|esRi[dpYdXyUj7FWlgbjmrSD8SVZ_iz|ߣcisgr[g@>=>?>??>?>???>@@?@@?@lcPTZYQMORRWPQID>?@5/0223646oD~{{C>?@}zsWLkLNqZY\/-.b[dww>}B{ylsAA8c:><=?;?A@=;=>;;>>;89=;<=:<;789;B6676G=4=799@BCAAC@?;226@?9=>7779>CE@A?;:;7687540.)-2585643656444854567886204/'57437430,088>@>>AIKHAA>><6644586751-&%2544124=:3/1411156546'$%*,'&())MHJ'&+).10*.0*$?#,%/-)*-++*&3543=g66Od81js82R60XBGLA:LC6<0'7F\P3UUIDBC888>OC<[]RMLNOK[0:2**SgdG41LH=JR_WTH>@;)GL?*@<5=F>@79A;:;BAAJLLCEEA9864?>:;?C87?F9M220.*J[\RE!+N38>?>:7688976654789;:66552YTST[[U_]3`^ca2d41ZT[[YYRORBFHA;N< ! 8TknnbX`d>IdbG*$&"*0(5H':g]E/..LZ8d^WX[HQ;<13544+*05=SKTTGM=8GOHDDNJGFB`+K=9/01...I;53TE+=GXLOTH&2MQIJ*26LHGMIR8_?;5X/.4)+25:FC@:?@?A@b[]/CJHL=+8JPUAjm;MZU/aMLdg6p5KLB9UqhlheO(.Z\ghcYZX5$Jnkc]]``dfic_V,D+3IJ]T=>(&R`S<6?PRad__ZZ]Q<+A:>I?%U[)3LPTQME;$,:MNI.2:);-!8.?GIH9. )(8AB''92'"!&%-023.2>HD4'6.H/(! + !3*2!@B=40HM>CAL16A7, !,12BM-"+ "*(%$5&$$)(C78@1BK625F0?C,#%#)%(8HL@6(/)%&& !%"?9!$,>:"E,:=HKfqά /1o֒N2)"]K**( 1(- /"∡𞚣̖勓ꢌL/9܀9@S̺6nK63|Q4'F/&;$%L >HG﨤ܵoJ?+D*4"3 (! $!/!"#C,%!"&+  ,)4>W3&$"3A"$""U8.,YպĿ9-&%  "@㟡kلڄ؀&/rbKOSPJGIKMPHIA=974($&(+-1/3fA{zxy@<=@nQIgMOlQNK%%'YR`ol8s?zzyjs<:0V465422?5292878:5694489;FCBELK@ANJJJIlV[績¿Àxπÿwlei|{}{lrmfffimv~{ulbYTYVKJMHE~~sghcZbUVUloqnqtxz{y{zxumlhfe^]]^[WZRRUTTTXWXY[^_\MFFLBA?@CBAB?::988857:;:771.&$-0+/425259:;55311299;<;:6/,*)**%" "(-+,-,./.+('.-+*)A***)'$ %*/03.+)')(#%$""%+.-++*,,*--,.+  "$(*-.3.)(,/+**+)"%GB<!!'&$ !$.-+%*(%()%$+)!#"   C     +    + + + + + +  +  + + +           + + + + + +  + +     +O +  + + 9(6=A */"#& *%#/'*,$ $"43*%%&'$0&54$&$%(0-+$ %(! /-#',"$ '  &#.%&##% !! #$% !)&'$  "!n"'!!$-)$ #(%%!8!6.%74)340.).2.-9!-06+" !$% $*%  "  +'&$&,+&,)++/--+),-*+'&*#$# +9;63..3):8" + $!9."..21'&'#%'!%$" $ !$""# 14","#%0&'+!#" ((0())+')//8CA>7<>>==\SS+=CCG6$->HO> !"##""!"""!"##%),05653/,**/9DNPJ>0-.0478630-,,-.0379::637DPQLB;<8621/,,*'&$&'+~Ǿـ͵庖샄큀ųĸ̼˴ȷij퉠Ǹϳȿýǻҵž³˾º䜴ﵻƽǮ􇖛щƽ˿ٌաݓ̞ͭǯҜᩜ݂ƷŴɺгƨݰ߲愊üÁݩڴ˩ŏҎNjƷ߫܌߻բ큅˻ӿڻ퀧Պ݃z䞂ƥ𗰴玥ȳկ׶ĬʻÀ_WUDQLVSI-Z@(*-8[\]_XSC+*G^ZW@8J9OI6;D/NLNOC8%):1*G8RPRL3K<1+25:AGKDFJUUP5;(./[\12LN5,KEB@./:LLO88M]QSVtK8..=GE?16?@>XU>448/[)/,37<4<;577@PA/;ETIB-4L;IO__>dcedccdcedededdeede3f322fegf3effe3ef3323443f34343434445454 545445444544454545455545454554445 655444554545445554545544344554455545455i443'4343344434gg4343g44gfgfgeeefffgfffeefegfGeedeedeeedededefdddcddcdedcddccedcddecdeecddcdccdddccdedeedccdccddedddcdecd&ceefeddeedddbdeeedefed2d2effdegl>KYeee2 e2d21221222d2G12ed1d211ccckW3C@JrWb`Opdw5:6QRaIfvG[\Mul͉aafGX:=HKMN6]^_^_`_`_^^__^]^^^]^]^]\\]^]]Y2iQS\hM]36___[Z[_SFulLwA1683`uwKKf^tpSilpTXjlLmc:ZTI]D1NlumZdWRy`\tlybi?~m{liykwdodjsu}~K@b{ظwjgngrfjk\JIHMUA~Vcer6ZXXWXXXWXWWXWXYXXYYYXYYXXXYYZYXYYXXXZZYXYZZYYZYXZYZZYZZZ[ZYZ[ZZ[[Z[Z[[ZZZ[Z[\[Z[Z[Z[Z [YZZ[[ZZ[Z [ZZYZZ[Z[[Z[ZYZYZYZZYZYX[[YZYZYYZZYZZZY[ZZZYYZ[[ZYYZ[[Z\[Z\[!\[[\\\]][]\]\]]^]]_^_^^]]^^^_`_^^_a`aabaabccdbcdffedefffeffghfgggiihhjjjgji54jkjjji5665676767767778789889:9:9:;:;<;:;;<;<<=<==>>===>?>? >??>??@@?@|iaU[_VOOWSTECGNLE><zmOG_JHhdTY,,.^;fs>?AAA|{qv@>9Ro@EIjfs86<;>LJMRYXYVYUHKG<<<>;=;:=9=>;<:9;;;=<<<9989;9?EEGB7@>:l7HEBA@CDGGKJIGCAClLHLKHKJOKH{vSXYXYYYZ[\[[[\\\[]\\\]]\\]]^]\]^^^_`_^`_`$abbaabbbccdcdceeffggghiijjkkjjijjlmlm.lnnooopprsrsstvwwy{{zzz|}|}~AABCCEDEFGHHHGHIIJIJLORUY\[ZVUSRT^jstpe[WXZ^cfdb_\[[ZZZ^ceeb_]anxzuj``aegggedcbfjt{{vpioz{mb`_^]ZXWUTRRPNONOOS~}Ľ̀¹tvq{{ynffǿcdfeksUVsg[TOTLI{}~mldfl64cZcgfe^Z_^^`aghc``]_c_bcbc]_YVYWUQSRTTQYVO|xzzov?@>EMGDBACAIFEEC@A@@>?@BA@>;B80/6<=8>51466:@C@C@;>?@@?@?<:765/30-+1;=87673135554720369879:421$138763341-175>=;:CKG>ACBB8320/-6432.+#-6745233:7112405256652%#$&&'-))NIF'-***.1/,.-3>C=:28300-)+,*)&$+*),-//,)(/-.50+/((()'/,&)*"$&% @<=>" !$%$"!"#!  !!  "*",0-*"!!!!""#%%&$$$#"##!!!##%$(0'(+*&"!##$#(& *+-(((%%%-+! !&% ##$'$""$&%*.0$! "'*$)#%%&**)&$#5%7$-)& !1 "8D2+<%) #$&0116/,&+".!&1"!!$#!!! +, "#%*% $$&&%+1-1(+6+ /.4#004=3(1)6096e:55L:G[ejYBVUYTOHHB>0;`EB?HLJM^XRID7N@K)^:S0:20?DIL822KOa,-f]8>TU1ZUPI@77T0XRIINB=?GIILMNIFC3Va49>24::A>5;BB;VXLG<746FPUKC&(*626DHH&NUKKC4J:GJK[/536:093-N++P76AQJDRT@FBGC3c^T>>L[S98FU-/,,UCADZ^7IN>^7<.920QET1QQ4G0bPcF0ESXZ_N>FGA5.1"-18;<;90!!)*+BD2(&*!$$#($"!'F@5:;5+H54:9.?C5# &&%,,+=FGM$6'+("(&""%+:2+4B?-'-F:HRdm:d,LW쟴dߝU9vр@=>7=D)7&7!4(`jĜŔ؎́[6E5.dZ+H"$@uƢ1/)G0$1/ (2T=N`j]»^΅ϨŠy 7E4!#(= +!8'( &0%38 &,-$@-+c,D +5!"+K\2*$$)3%(QӘҮGJQ9-@/ +  $)fЁ%:߄Xe[ o_OTVMEFNII=:>EB>62011..046^<{yuyx=~jJDXJHhYLL$$'P5ak89=>>zzot:73Gc:@Debg1/648EEHMSW[Z``@==7RM614-%%&(('&''a'(*+))*,,-/2032323263686646989::9755579789:><4978k8B984599==BBEDDBFcI>@DFKJIJ}@͂Ą˄҄ЀXzDŽπºqe~vr}uyrieigdddgluxCD}wlj`ZUQLOFD}y|ywvyc`ZY]/+WSahimkksuvuw{|vqqkhicb_[ZUXSRTUUSUSUYYaa_}@@=CHB=<=<;CA?>;9;:979;<<84./#$+0)1,+,+/499775134779;853-$!$!! '11---/,,--,))/,()*,,,-,&! &.44/-,((*'!! ")0/(,-/1-,//-)%!$$(*-,-,(*-.*+)*()*( "&FC< %%$ ! ).*+&)%$()&'(% !":,*--         + + + + +  + +     + + + + +     + + +  + +'  +    +  +   +  "1& &.8:/!*'*+("" 1#! %%$&/-)$#*#,0,""( "41%0*!& !%&+)(&!$(&%41,()*(&#()%"!##!"""$#%!!)1 )+&#!%'!#%##)"!$!)"%(/7O99/65292$138'4/16**(;0$) "#  + &#$" ,+((,+,-+*''$'&%(/$("!!&/5/(+4=6&(# '+*(.*$'&&'"*"%!#$70.%#-68&' "1/&)#4##!-(;&&)),/&!$$!),48::<><^Q*J6IHQI)6CMC5uikBQ3/HK3Gi>HL?1NK[i_\T6-G[eeTLTF $JUOQVVVUU\[QPA+%;NSYbE/(.RK/GHQXXWVUWT}}|}|}}||}|} ||}|}}|||}|}|}~}~}~}~}|}|ρ}~~||}}}~||}|}|}||}~~}| +~}~ }}~~} }~} |}}}~~~~}}}~~~~~~}}}|}~~~~~}}~ ~~}}~~~~~~}~~~}~~~}}}~ ~~~~~~}|{{{|}|}|{|}݀}|}|}|}}}|}||}|}}}||}}}|}|}||}}}~}|}~}~}~~~}}~}}~}~~}~}~}|}}|}|}}|||}|||}|}|}|}|}|}~~~~} ~~~}}}~~~~~~~}}}|}~}}~~}}~}||}|}|||}}|}}}|{{||}|}|} Łװ൭̿øݛ¸ߖӜ̲̮ȪӸڿѶ­lʤ怀Ž÷Ӳٍ) !!!  ! !!!! ! !! !!!  !!! ! !   !!! !! !  !  !  ! !"#!! !!   s !!!   #    ()6`er޶ߕΎܚv215?<)">8,! :""t"-ֆXnΟǦꪫ`K.[TF3"-쪋эŀғ疓֐}妦H񗢔ᨇ򴲳ȷड!")fתC  +9  +     !  !  !!! & ! !! ! !"!! !! !!! ! !! !"""!""##"!""!"$#"$##$#$#$%&$#$###$$$%%$ %%$$%$%'&%&&% &&%'&'&&' ƺòijӀ큀𖘐δⳳ󄋊ɰuƠ׾˺Ͼ̥6(&&''&''))('('))(()**(()((('(/)))**))***++**+,+++,++,-.---./0/011001100//01110/11212312233224678898788768998:<> !"#"!!!"$%'*.2453/,)*-6BJNMB5-,-036741.,,,./2478:6427EMMH>89<>ADDCBABBFNWYUPHIU`e`RA<<<;9630-,,*(&%$%O|½߀DZŝѲ򚴲«þϺĪꂛ¿½ཥļƶȺĹǿΤƴ˴䖏ࣄż؀ȯ׶ݵ㊇ж͸Խ޶ÿϸŽ⠭ɸȀټʲ䢃ʧ섁ʹŇ¯ſ¼̾ⴲ圛ǯ҉«Ŀ٪颭݀낂ͷ֊݌м޿狉Ͻȏʚ䂧ꯘǖ硁Ĝ劉Օثޗߨ軌ʜɬpŜێȫћ֟͸֜ƣ̹ĜZZ29B8HNJ<'8;9:OOW__UN=+@\ZWLLO701@V@KX]]F3cededf#d2eg22fe3ge332333ggf3gffd3f3344233432343434554554456555455454546554565656655465654565554454545565654555454555444554455545 +445544455545454343543444344334434443h4gg33fggg4efgf33fggfgfegfeeefge-dddeefdeeedededcdfedededededdedddedfdedddcdedeccefedeefedfgeeed.edefffefeeefdedfffdefef322eg3g3fiZW4gfg3223223232e212Fd222dee\Z=9MM_£yy[WoAaEfKf@jvrTmLiJP|>S|rhHBMRBXbTbOUb___`_```__^_^]^^^]^_]]^^]\^]]_:JMOU[Ge1:][[[YFnM]exm1B?8`c{Xi@=>?=>>?>?@?@A@C{d`W`__URSWRECI@968<9:7?9687:Iyy~}|lRLYJHX}{{yqEB;WaAHJLxlr;7<@;IILLSWXQXRHA7`ZOEIK(,-.J6423546546_65579;999899:<:;;::9>7h:VJ?BDGMHMGHFAAiLIRjeTLOCfl{[YYYZZZ[ZZ\[\\[\]]\]]^]^d_`^__^`^^_```baaabaaacdcbcddeefhgihhiiijjijikjjlmllmmmoonppqqsssttutvxxzzzyxz{~}||~@A@AABCBEFFGHHHGHHGHHJJIHIKMPUXY[XVSRRSYeptqi]WVX[_deb`][ZZYYZ]abc`][`nuwsf_^_bcedcbabciqyxsohhq|{ob]^]\[XVURQQQONMNN}y~ſԀr끆xqohƾ^aipvfWMNKz~ttqrrxor{?=98gegdfd`_a^]]bg]ec`\XX\\\ba_\_ZZ\YVRUTUV[h]QJOMCFFIBHQMA>7BHH:?KNEFEDBBB@<@AB?>>;@500;=;788=GRMD=B@BA<@>?=:56/-043.6<>;87683230553025679:523.-,"32766106.(5>6=958HIB=CCC=321/,+;23.)$&0346:736=9302113278864#F#"%(**QPF$*,)(,.1/,/('9>=9782940.+,+*.* &+)(*-11.,%/316.()'((+)*)$&' !!" !%&"  "  !!(#*3-1& ! %#%L$# !!(($"#+2(&((%#"&#! "',-,**)'%,-($%**##" #$" ! ()(% !##$$,(('&%"@HL;?::3&22-!"()!"-%9&CC8@ )J*'".8&(9471'%)# &"09)! ,0,I.%%$$)'*1.0A<'8$9@?$&)C#172>%)0A=+0$%(+(b:5PUf+6Zh_[Z/TQOTbOA7/>7L=QKQNC@:;>CCE<>AIHJH?4D:5?29BULJHHB?INIDFWG8KILP=40G7HY1./,RKK>9QYZEHXHBEH%?HJD>?DIBBGMIGHILF@;35[2:93?B;==3;AF>LP@@<89?L]WPHSPAB==)O;4==.83ET8E5<"<:<:.AEDD3PB*4G7BQ`X[^\f88Bkgn]iiMHX<=bb]6YO]TSR\7L$#7/AC=7"Sa,480" #L37BC@<;887545672588799899;;:;:;9;;:88753b^V[]_1200[PTUU^[_]]\ba[Z\ZWUUTRL6O<)89/NV !%316QLNVN4OTZ0/1+/\G:M;O9>HT[$83_7XU.//.TFL;+3dFMbXAN0CGLTaX:A5F(3;>ZieYMYKAH-XXZ\#`backlaZ[6-FYccjW0B.2]R<11H]\\YTUXYVR'4=3224-#52 &>?LVWNF45JLM@0:64I=,4$>FFCF;# # ! 6?H8 :8+!!&'(+J24>CIM7*0E=!)<1 "!+-AFC#@F1<<3) -:<1"##*@@=-*.&|!''- )%$"$=>3936OF94@3,851!*&'0/1=>@'2=2&$'#&( "$.6$(.<638;<9n;I:6:;=A=C?CC@@n@!$&$&*)')$)&$%&((%# ! $   +        + + + + + +  \  + +     + + +     +   + + +    (&%!#"6)-:593/,'&'*5( ,! "#%0.(%! ('&+)$# !$"$!"'&&"# +%%#$! %(# !,"'"'%!"*'##(++ ( !!"#"&#"#"# .!!!'"*'$$$"%,"&1-.G103648.98)$-!240-*4+++6+ #' + !!.,'****$(''-++,++/,**,+*(()($")( #-!"2((+6!) *-":&"!' "%&)!',+#!!)"677<:!%!('!#",%,1"$''#!!8(':, '$$%*/)#$+9<9j6cY,Q*?GNV3*3;H>0=JA(@!  &   -$5H ,A𡹬%[񈉌|ZﰦqMR\řã̛đ.GFVު2!0Čǧօ֔ń8׏ӑޛȭۡؠk12R䃙ࢼƭˤ·*  +-      !  ! ! !! !   ! "! "! !!! !! !!! !"!"###"""!""#"#""#"""#"#""$###$#$$$%$#$$$#$ %$%%%$$%&&%%$%%&&'(()&)  »ŻɸČߎ拐􅈌̮ʯ`ֻ˾Øؕ6'''('()()))((())''(*))'(()()*)))*++*+,,+}**,,,--/-./././0/01///0/221000100/0223211243445867789:87887789:99:;;<<;=>?@ ! !! !!! !""$&'(+/1210-)()1?@AHQTSNGFN[a]SC99::852/,++)('%$#<}÷䅀׳셛Ŵǻހӿ󊍐ֲؽθѾø䰈¿ĺ̸Ͽڀָ˷øȯܟڎܼǿ䎽DZƾ醕Ԁ炎Ј톑ا½õѺәʄҀ͜ߨԀɣǶ󂏓˲ϼ꾤ρ񗈬ηŝӀůלֱЖ筘ƀŽ懖˳񚓡Ψ貃֐葢̬Ќ퀁ΌꓰĔђ꘏ͅӤ¶̮ĕMǔфʅ袱͍͟˩Ƙ閃ùVRL399FBH?14:,%,;F\`ZSJQ*T^YRF8;VdDFJD6KLJJH80;;1( *ETY-8J9*+19,0^Q=MT]ZH#8/1+LTGEPSF- '87:B;-F<5505BBJRVY6,)UWK:49:77546EJHFDMC&42EZCHZZ^F`ddedededeeefgefegf3fgf3fge3e3334f3 f34334343334343454 +5454455544565 65656656556565655665665665665656656565565656656555766656545654544454545445454543343hg43ghhgg3hhg3fefgfgffeefgfefgfgedeefedeef +dfffdeeeffedecdfe fdfdeedffeefefe feefffgfeee32f ee333e3ee223 fnXIdgg3332322323 223322323f33273fVG2a\b9zcTC@dEdeykR=i81qp=rg\ydVBh==>===>?>>>?>>?>???>>@?@?tfhbe\\SUZLBBHHLD?@C?=88;::79vr875fffbefcaaaea[YYVY\`^[^[]_ZXVXY_\\bZTMSQOPSW[\\XTRI>si}KNMFECDCBC?<>AB@AA<;5//8=<7>TXL*+H=BBC@=>=>@>?<94/,46;658;9867771358=71388577520.*++%,54965./4-+??3:33>HC:>IB:12/`/.6?./)$#/36578447:5201012155532$$!#))*)PNK())')*,00,1%1;;<992930.,(&()!')**(**000415406-&-'"%("'($$# ""$&!  ''%"! $$#""#  "")228 #%"$#! !!!('$" !#%$'*'$#"*(')'$',.+)'&+**3.'%!%*#$!!  &$&(!q%!!""@=B$1.?&N?@;Z)HE@&8.6('*"% ''?79U[V<87aO2=!*$>KE221,*$!!('-,2'!#'+-538736737($626=92#3706#(&'B-;$*/+$%%('G8bN67 &Gl^OZ4XTSMCB@2UY65>:CE\00SNN884-^b\112^QKJKG@>?>RSC=B-2GXNPJT2YVWQHMHJQKCSN@58]]Q/YF1BX^01/OLUR96A?FS.MLOI%HKE8DGJHFHKB@EFGF@<;9U27;;65a]:A76FM:8ACAD=>GSSUK\TC96;3P^8<:92187[S#.*A$,=7+MC<@>09H=34ZP`fgjm=:pev_VZVWZ579:Vhb]IU]]ZJQOA0H&0J3=3A9&*$,@P:?=:89885654343A@;686342ec686_`74bW]6755422aaa^TR`012^257542fedddbabe_YSNOTONGGFGX]D<79X>: $MNL-LLgCJd[KR' '01&+1;A>4HQ,G2=\3M080.IJV.,11./E6N@%9BJCDEBCdl/-+1+RD&DN0FAP:Vj>"`5/0WQJONPGA.04jMaKE@>FJNMWYPPD:]13>49?==863DMMYV4G>OI>KTUFK?83?pR)JH;@?C=^I\a8decbT&%@bcgGFQI4C@T\]^_`_ggb\UE*7LaeiY)S,:RV;K2e`\WSUSXRNB*/5:./+%.3# ",@SWPKAA$HQNH:13K[=#1.@[X1=!5Mw!/1$ + 3I,//'( 60*3(k), .!&+!fG$>!"47=޹N"4!7C{eY %( &,G(5ބބ߀f%qdZ[PPGGI;459:=73440/--001136m}xsxkKPWGGJ9P%HL'();/d=>=s?|wf=9.FN?GHIpi226=8?CFJGRX\^:+-Rc[-/41(##$&$%%$|'()((*,-/101/0311029945455447775439884<=;639:;:B>>@@?DjW9:<=NMLJJ\gЄU~zlՀƻLKsc~vqpmhżZWWWadmmqutxvlbZSMMJtuprptsvwkhm54da///[`fcdgfijm&rnllnklkgede_[\Y[[VTPST[]`hbaLMMKNOQNKG@;sq}IKHCCCBA@@<8:=<:;:3.$&--'/>=565;996466677642)")/*-/31.,+++(*),0-+)++,0/.*(#',553.,-%",''0,(*2/0.11a.(''!##&))),+(*+-*''(++*)% #%%HC<!#'&+**'("'$"#%"#!#!"  $              + + + + + +    J%  +   + +  + + +       + +  #4():4(,)'($! +, "".*((.0.1*'&'$  *,# &.&("*,*+)#(#&)% ).(#0+(+ *,%#'& &""# $# #%" !$!*2. "$ &%' (%#+$"!  %&25477!95@3,1,/.-741$,/0/%+)#) '/.,+.(,/..,&#*,../01.-./-*&$$(%&$#$!)+, +0,,*<'-A?-0(%/ $4 "$*"(031351/65$"'& %-9 .)%"#!# H24&#! %%%&*)'( ,"1.4:8851.?HHQM.?4FB9ESSDH:,+:mS)EF9>;>8V;IW^^Z[XF5W\`BFMF+04JRSTUVT[[XTN:!*?TX\J&F +BJ8<-XWUQORPU}|}|}|}|{|}}}||}|}~}~}~}~}||~ +䀂~&|~~}}|{{||}}||}|}|}}||}}||}~~}~~~~~}~~~~}}|}}|}}~~~ +~~}~ +~|||}}~~~}~~~~}~~~~~~~~~~~}~}~~}~}~~~~~~}}|{|||}||~}|}|{|{{||Հ}|}|}||}|}}}|}|||}}}||}|}| }}}|||}}}~}|}~}}}~~~~~~}~}~}~}~~}}~~~}|}|}~}|}|}} |||}}}||{|||{|}|||}|||{{{|||{|}|}}}|||}|}|}}|||}|}~~~~~~ ~ ~}~~~~}~~}~~~}~~~~~~}|}}|{|||}|}|}|} ̬›ȺĠ쉕˞ٳ˸޼ɥĺ]ż꜅ñɾ" !!!!!! !! !!!!!! ! " !!" !!"!"! !" ! ! !! ! !"! ! !!!"" ! !  ! " B ! "Z /&#ڟڒU-7=!!!!  +40$ 'F)!ɾ6$#+-&>nJpʉ𵯮āb&/昆W"%6>L݅Ξ߅𯂎ݽӏا胇AՔۅ׃VRGO~χ퍉٭٠䆅T#           !  ! !! ! ! !!! "!""!"" !!  !! !! !!" ! "!!!""#""##!"#$#"$$#$#$$##$$%$%%%$%%$$$%$%&%&%&&%%&&((  6ҿǾׂފ򈎋٧ʓǵi̢ޭk/&'))()()''(''((('('''()()())(()*))***,,++*+*+,++*,-./11/0221001100/13231122324567776788678:9:9:;;;=?> !! !" "! !""#%&(+-01/.-*('+6CIKE<2,+,/2462/,,-,++-135552017CIJB62368:<<;;:;<>EMPOMFBFS[ZSD8688530/,+))('%$JM違έ荜ހ˹δĵʻТʸֺĸ̿½ļ桤Ƕ¾Ѐ˵ꂃƻä͏ԺΕ̯ؑ܄ŨǷȧ݂ںڋƇ߂ܹߊ۾ۃٮɬ͛ĪĔƿѠ˴ͳҿϺ󄓢»ìǒȐ筚Ϧٵޘѿƽò݃ܫ󒮩ͪ앇ʃҾ׳֩̆埧݋֨ԐʵëÚո㆙ާӳ꘯̽ĜӧƾƳYWZC,NQ9:=D2E93*4KZb_YKOH@YZVS854d7FBM8ANLJI=I;=1@*6X_L,=;3228-"GY:FTXYN752%/4HXHP]^3!"5*#:?*2MM`V09F\DK7,=+.:D42:/-9OJE=<97=@BHRWX31USRD97640.456GIDBEM1-67J[AFRUWmSfeef2fe22e3gghhg43fg34g324443343345434545445 455545454544565656565655665656566555655656565656555665656 5566556656566566565 +6556566556565545455454654555445544545445544454&34hh4gh444h4433433hggg333ghghgffgfeffefgfgeefggfgefeffcefefgeffgfefefefefegffgffgfhf3fgefgg3f4hg4343 23h_O\nih34343B2322323332223332eec2deeeLvf<\IMKsN^eZsvg9C>L8:PƀHIoc+g==GZ6`a`a_abca`bbab_aa```a``_^^]__^]_^_]FQCF8MdOb\`T}?JO\\[ZplqVVQ]dV[>@G}^=>>?>?>??@?@???@@AA@AAA@A@A@}is:4edaXPDCKOLKB>68=>>74<;:75:BZ~w|oLY_HHE;5YT*,..B9:889:987;:97>;:;:?DEDEEIJFGFB=SDIIIMOhJN\pkiVYZZ[[[Z[ \\[[\\]\\]^]^]]]^^_`_``_`_aaa`aababbcceddedeffhhgghijghjiijkkjjkllmmnnmpqqrssrssuwvwwvwvwxyz{{|||}~}??DDEFEFEGGGFFGGHIHGHIJKNQTWYWUSPOPSYglqmcYTUWZ^`c`^ZXXWWVYZ^bb`]YZ`krqja\[^_a``^]^^_biqrplfcfryysg]\]\[YWVSRPOMLLLsz¿ǻ!\ylu~ytpk[ea`\UTadfui\OTR~{|}{|s}|vzuurut?6jeafhjgbabc][UVRSUSWX^][^Z]a__[`bba_c]UDKUTOQSX_ca\UVWVME8Wfr|DBCBCA>A>AC@?9:3,.?A9=@SP(*+FL<>FB=@??=>@=81+899;856;5659674678742265034131.+,%)286:95_^2,-?;476?MJE:@H?:54332/:,.,' )016798549;6202143441#GCK,)+)((%%&$%)(*00+,&5968:<7;4243,(-(+-)IGF#@"*(8142/6,)-&"&*!&&###!$$&!!$&'(')%&! "!#"!! "#! "#".89 !"$""!"  ,/&!%" !!%*'#$'/-14,&&--,22+($'/* "%&%#!$!"!  140RT<$,+FR_WRB73F1C?:;$*.$$"3?3K?>OPSJ56CFNJFENDPc00XLHRPYTFMP7P5?A@e/D18>Sa^42HNQVH>L6AUWVR+S?IJDFGIHHFMLEIDE@=88=9^<<<8^Wd37A=/BV@0FGBE5AHVQVZWE;<02611;=;:Q1@4DCA)%@00=0S.QKK3FF@(/4Y<156`_RoF8EH=JPT\e8mjTc\cZWNKR;WD=DeW.GNO7:3.@7<>:7654578>:;9889856B>964550XVX1_b31V]2^^`265aT\2553232`2342377:=7eeie^]`^^]WOKH@?B?GNIKIOXOGD@JNoLJ*#!%KD>5:;43@afc<2.,"!'6IaCJM<3[1*C//3284S;@SVV.1--;*GMDDKA;4*X:Q`UO*,LI;I/1,B45HcE,C192H5-HULN/1EH9JMS=@CHLLCUURAUMN==_92@NWMIEKMLST;LEDBC\JRSGDf(Pc08Z9BID>2eD:k^`fekb?'F\hYNb6;B-(!.1GZ>ES[d >ee-DM79HD""-I3)iê݌߳鞧K&F>P}ū&,ks䔳Q8&,%?<1OoZ^!e=G.96R'.F!<% ,![owP;A(4*.F3v$ '-#$IU &EI1򛵗+ $$}?E*++ /sހ+)y6/ZVTJ@52;CC>73+.125.+0/0,-0:eu|oFSXEID5.KJ$&'&;25;=@rw{ul:@1MG>KHKHti556;:=IIJDN]m<0)+K^`1030$#"$'##'$$#$%%'()+-/0211//420236:642554578754::9<7A?77n7=B?=;=?=;98;;9;=><=:=>?@73&-.',/=84;47=968665663.$(,01//02.,'*)*)**,.-+&))(,,*+'$!+0784`].%&+"$0--'-1-,1321.%' #$'+*,-.)),,)')',***$.1;$#&#" "#"'%%+)**,'*" !#!#$CB87 & .    +    8       + + + +         +       + + +   + +  + + +   + +   '& "   + + +  ,4'&"&&*+*'#$%+.$!(*/('$34/1.013$ ' *)+&"$'$#"' &1+$"('.)!&)*#!!.'--!$$'!&(&'%$ # ##"# $$ % !,1-5'" (#&((!" ## !%029(:%&&'(,0397+4-3/.&&+.! "7/!$! (('+,%***+.(++./21/.0,-++%"!!$"$!$*&"!'(8' +$#!$ !(=D@X%  %1 &6,% + +&((( "..4.**A(/,$#!!$)%9*%! %!! 0)31, "$&''%.4/%*&%/!@HPGD=FGFKL3G=;;=VHRPECXBX'1M3>D<6,_CfZ[]^bX207ГЅS>4/$ "$"  Z  ! $R!!+ R# .~&!  Ŏa3-++,0343/-++,,,+.034631/18CHHA5123699886567:@IMLIE@AKUWSF9466630.-*)((&&$?v샕㿥㊔ǺҿٙȴǸŪʾҾ¨³¾кȺʲ̽ÙǸٔƋâԟѸۘꟽǯõս߁ډǼ„ֽĩ˾ᄂ瀳ǸΩоκ¾者քϾ´؇܇±㐑ҕҽڅŎµĻĭ÷ڃѺуĤÀŽҟɺرߺʂ〡խ􁉐ёݯؕաνԿĿђƬ낌νμÀ][^T-C]X>8;@L8KJ?M^ac`T7;8PZZYA/232G?TI;JLDGC0%H<9+(LZ].3?D132272[&2H_eXBY/32(8TMFJ[E0.$A6>K$CPL(4-LFF81, 1??60:'1BGDA:7?T:+-6=CDC:N;)069*613QS?=>E1THKGD@HC5A?:65=<@NYZY_4VQK>8;840/.1;NL@>EQ+25=MZ>EZU\m:hfgf34344h34i545454545455656676565666556567676766776656567655665655656565655656545454555455454445554454C5i4344433gg44g333ghghgghgfehggfeffggfgfffggfffggfgfggfgfgfefgfggffgf gggfggffgfef333ffgff3g333f3e3ggg3hgg3443 2333hlcE.M2343434434434323DffeVHO9O[PV8F_ocȉ@>5E^u=>>>?>? @???@@@??@@@ABA{x?74d[QIDIRWUQH@=65530/2428:<;AAGuw|uF=\ToOMMLq9::=>?HJGFOaf@=;;\adCL'*+)JF5312411332Y253455456789:;88<=9;:;<<9;:88:8:98;<::<;>D878<>G??=@ADDEFIKKIC>@MAHIHJKMPNG`hgWZZZ[Z[Z[\[\ ]\\]]]\]]]^__^__`_``aaa``aabbcabceeffegghihihijhjjjk+llmmnoppqssttsstuuvxwvvvwwx{||}z}}|~CEFGFHHGHIHJLPSVXWURONOPVajopf]USUXZ^`a_[XXVWVVX[acb_[YY_lppg^Z[\^_`_]\Z]^`empoifccltvsj_\\ZZYWUSSPOMKKMq}ÀǼ\ypilptv|~|xqlgcgc`ZWSOgkw}sj_YSN}~rvuztwnuws;=8b\^`^^`bc`[XURRUSVX\ZX][`da`acefbeiYNLNRUUSRRSRV^[TNMKJHEA7edeqw|~@>=?EA@A>8<2,.BA8<@M0S)TAR:>>@;4.8>;:97569>4:88:7578746806753622/''!*5:79oga`0+.=941=DJI@9>B@=7563//93+&#(0237664135622/1/11044332D?GM*(,+*('&&$&%')//-&-2311/,).-.332-1+-'&?<@#;")48/00).(%#!(!"!!"###" ! $#! #! "#!"!""$!%#!'1+&&$"!#&##$(##%"$#"&-)""&30.4.*$-+')23) !!%(*'  $$2554 7+534DJqhf^R?aI?@ED$'2d2_M8<&%D:26&^VGS\43OZPTBJ"/g\\VUTR9AFYUJADM=;NTMOFKIGOQ[]]\WTTUY[UJKEJ)C[9Ie/FIA@NXZ`\JTVTIIHCRWNHWVQYKKLIACFDDKHB@;B:96:998Z:7eOY549>97?QK)TIR[/03MH..l7D>E=SFYB@E@@NAFIJ8J,>3@LKA:?Y@_ZcafeW/A+UXbO`k)]<-F[facecca]ZT5E$,@Skl%GH+\X:2Gg`MHXV]XVWJ#8LF-'(.<.?5,=NUXVM-3/DNNM2&().?9L@5ED?C<) +6,* 8JL!%/3$$%"$(N*?X^M6B%$,B;+-<. +&#3"0)/-1%%66)"(,761+-4/#(+*%&0"$#(??&#'-#;23013<8&.) %&+7<=:?%:42(#$#$55.,5B!'.7KY:D[[g^}rʌƀ15!/N=]n%!.5@#x[P+8޻ޝЁe&Z载"5n㠧/3çΌE28?/3"!)#1?,dЋfrٗqHmA#HM.) +'3! + GZfdA!'ABU5'  + &! +f']='q䀡e"+8=i,'2_xK& DT2!SJ$5辁&24#@3.VMB;6:@HIF?63,,.-,*+,*//20.d|}kCN_FHD\.K&%%''-87:;@krw|o?5NEfGGHJ{i5559;;BEBBOjw8,-.JTT/1`32##!!""#%$%&(%&'(*,..01230153013566565347575479:<>9;>77:;:B;;9;<=978667:;;?F7768>DFJFBpX}nDžĀ yxtȾp~Ovlhepvxxz|yvrjd_^fa]YSN}EZbmtusqnjd^XPNLJyqttn}pntmpehhb12/XX\^$`bcbcbbehceeihdhbffa^^_ad`cj_XLKLNMKIJNLIFB>@>=:5vuw~>><<@>AB@96& !11',0:"9:1B37>:88255573+ (1///../12%'&()((+.../*(..,,.*)$'.28qf`^,$$'%-/.+',-+-/23/q($" " $$%++,++(+,,))*(*)((&,,7C%"%""!!"%"%''('%!"!#" #!!<;41!!n           + +  + +     +   +  +   ! +   + +    + + +   + q   + + +  +  +31&  1,*$"!!0,$+/(.&+"(7./-,+*!#.-&!#((,&'!%$#().+*)),-)"$!+"-"1!%$(*.."''' ""&)#(&#)!"#"#!+.&-##)!""&#'!$-!"'! #!"$#I#$'.0./1)0$&%1/(1270$67<1*)-/%/&$&%+)'++)%&&*0/.+-,&'-)('!!"*-&&#" $(/0)+%$%$##!.//)8*(!&$))("<-1,')# %"$#"+&%%" -3,11,;!#,& !&!,)2 "+')!!#:%'!% .);)$?BC:(("# 49@GEG@DJLJ9>977:A=APCIF9)70(7ED938O>xZV[Z^\N"+FO[K]bc(7&7LVV[\YYWWUN47#7OW95LK4&@YYJGUTY}|}|}|{|}}}||}|}|}}|}~}~}~}~}~}||}ǀ~~|~~|}}|||}}|||} +|||}}|}~~}~~}}~ }~~~~}~~~}~~~~}}~}}~ ~}||}}}~}~~}~}~}||}}}~}~~~~~~~ }}|~|~|{ ||{{||{}р}~~~}|}|}|}}|||}|}|}|||}}~}~~~}~~~~}~}~}}~~}~}~}|}|}~}~}|}|}|||}|}}|}|{|{||{|}||{|||{ +||}|{{{|||}|}| }}|~~~~~~~~~~}~}~~}~}}~~~~~~~~~~~}|||{|}|}|}|}|} ͵įɰƂɔ玜ެӯƢ¾Ц齞ݧދٍ¹űûº[ȶöŷȮهS' !!!!    + " ! ! "" !"!""! !!"! !" !""!"! !""!! !!""! " !"! !     ,($+ 6P^!sݪӴp;=-;&*9AD;88=c;.&4FKH@7F:-296E84YLR??>N1>ELD@@P?FE=898?:CSXW[X5VNG>79413212HQC3:@R.03DO\=AUS[eggffg333g3334333i4534545454545 +45545665565 65556565556565655565567665666567676766777666566776677766776776676676767676676 766677666766776676766567656555656565655565656545 6554544554 i544454434hiihhhihfg3hihihgfhgfgfg(hgfgfggffggfffgfhfefghghgggefgghgfgg3fgfg3ggh34ggg43g333fg3gh333g3434343337M.\^]3343434434343434323h]17n]`=\]i]TOM}O6FA>9N`YIEaXt_FKb]bbccbcbabbcccebcaaabba`acb`a`aab```ba`aPBI^:aR1PYOc^_\P]m:B1A_Z{GJq|]^^]]]K={dt~uv[K*megdnas[}ompNuNa\\[[YU`ehmXo[VboQxZpxA'=qoV|pLj~oZe?|H`[^Ktyr{atUj<;TVOEI/({"{BHo{Rm^T}yq}yfS^Z[[Y[ZZ[[[Z[Z[\[\\[[\\[\\[\%[\[\\]\[\\[\]]\]\]]\\]]]\]]^\\\]\\[\]\]]^^\\^^_^^]]^]^^]^]]]\\^\]^]+^]]\[]]][]]]\\\]]\\^]\^]\\\]]\\\[\\\[]\]]\\[\]\[[\[[\[Z[[[\[\]\]\]\^\\\^][\\]]\ ]]]^^]\^^_^`__a```a`_`aababbababababc +dddedcededegfggghghihghhijjh44ii54556kk66555665666767898989:9:9 :9:;::9:;::;::;;:;<;;;<;<==<==<==<==>=>>>?>?@@?@?@@@AAA@@ABBBAA@ABnx@95ZQLCHVVVUNB<0+&'+),/039?9:50cwx~mEMpQMJSoV-/.025B;A}EzqkH=_YYLMLLIz9;:>A@GJJGXiɪAAA;^]N;F&()OHD0003611253R233453258899;:579?;:;:;;:7:<89;;89>:;>>=CD878=BIB@@BCCCGIT--JC>MCDFIKIEGdP{cGonUZ[\]][^]\\\]]^]]^]]__^]_`_``a ``baabcdbbdefgfhkiij9lkllknnmmmoooqrstutrsruwwwvuuwvwxy{}}||~}~BBCCCDDDEFGGHILNQTVVTRPNNNR[flmj^USRUX\^`]\XWVVWVWX\`ba]ZYYaknme]ZZ[]___\ZYZ\_cinmjeb`eottmc\\[YYWTSQPNLLJ_ꅎu¾}{{|}z{ukdiljks{yxzuqjea\Z`dcVXV[cow}sk]VLxrrsqnpz}mx=<8a``ZW[`ea^\WUUVSWY[Y\_[acab]abcehmVNQPEGVTTRPROYWNPQKGEEDD@@@4f_^dmzux~zAA;@<37??;97666;F:A@>;7:97453932841222-)"+687rkjb^/+.;84387=?=8>DCC952/2;;3+%&333575762799310211124343/B5L(*'.+)''%&$(((+01+(00/,.,*/0*-,).+*)BKMHD&')*+071)'*.($$'%"$ !9$$! "%"  "!$#   ! $$ (#""!!%#!$!! """())%.*)*&,''(++#%*/51/ !!"" " !%(%$&$',&%205!(1':67ZKUDvD8c>]Wk@74I5.-#!#&'" !%('%' =JD;M5CG:1PM\g_>-;K-8A'&.1!""/1!##$$#)#$! "##!# (%'#%$" *%" "2 <+0'&"#.,/&95RI\/+$ua52C2/-L==:U5BGYc2^22WTRXF#K4[\ZUVVDOTGRQRDEGPEFMIKMPNMRPOJ[[]TX]QXZLOLKL*;9IY3YYOTY]TMLJPOLOW\.,SFBMTCMIGGBBDOGEGD998>64532:A/>A;X6:00403BVN1\C4A^25BM-,;SQKOV15G72EPEPRP.IT->7HD*0,SQL>MNOTWW>LP6bW6ha]]KqR=S^H?MCVCMQS>'87B?:6V044367987853657863O76783235563./.0231`_0]/]_dXT`_[YXPCPB>5WVWKT[RK?8<-B-3D@K>898><>FQPMIECeRh8?C@VPGGGJTlE)27958:5:99>1[JC<5#$9D EA8RNTQONUW0.VVLELB>LYS-UOGB9B719)6>=_G/9`8+PEBMD,I6O:D$50Y/.2I$(2OWW>KQ"om@FrFC=>XL[;CAO1Ak[EKHCeB?=GFFQUX@8;/68GDGAUH;,#.TAPA;@A^HdWcb_h`D-84_g[cZAxB9=]^dhba[deW;JE" '731DS*!A_H.K`PQJ`QW[VXQ=)EU;"!$:5/'"MYXTSK+>B625:/!)@M4*8+%$7)G87GQ_XA1/*#08F!,@' :1 (+&210)#/5-(,1|. "//(""* )&%G;@)%'2!).50/2C34/' (&.;:787%>4.'""  /7/',5E$&+?O[ :;(-48,57.yؿ̓޹ƿ!՜ܦ{&$Tj I@NɛYA)! 1N $ 4Oa`Ȅ]%B;i. "7$1A D5HR&\QyM/'1`2C,! !+$(.($0Xu"*'罷ɚ &/q,"'5_&VT3#\hUjzs7G2"Ѥ>3-J@<59EFFGC:5)$ #&%&*+-24+)'o{zoCHjNLGOcK''&()*93;q@qmzgC6QKNDGGIDq5648<:>BDB[wɺ;31.LN=(+1=64#"!!$#%$&%')(())),/.0133/234114455434657972499;@?79;79:<=A<82:6777:<:G=954:ACE[Iwub;oѓ̈́ˀ怊}~}vl}yxxzwyuvyq~uphb_hmnmu}{xwoh`ZYWW\`_vOST[`fklmljfbZTKHCytpmloljkuuai321W[WVUY`b_a`\\__^baecgi giifeaeghfhkVMMM@ANMNLIJFOKCFE=;:69<5opors{tu};B~}q2$!!11',69D9:=>>617966366372'*120.+,0/46'++,))./00102-,/+++)(#)/4qmh`X)!!$%$)))(+00232/*%&  "$$#%*,-+,++,+''')*((($,&<!#  #%"%')&('%)$! !#:@DE=#")   + :      + + +   +   # +       + + + + + +        + + + +     +  + + +  + + +  +  *%4 E7##(!,2/+*(,%*./-+,+ (,!((*!#%&$#&$&&'&'*''!,,-)+/',,"$&*-!,*+&(),(%$"&#"#'+% '# "! !('$-!$%%("+ %%%#%& #(#$""$"$""&)(*.-"))4,40/1$>0!,1% )!,#$-,!(!,+-*,1,'.0-+*%'&''!&+&"%" $(&&$ !4/6!%'#"$$&1"!$&$'($)((,%=4)(& %$(#&###%&')" $#'$&#,*!' (+-=1-# '(%)"#&{&",E:#&$#!$@69)01<%4I5%)+*=)5VKRJ[KW}|} |{|}}}|||}|}}}|}||}}|}~}~~}~}~}~}~}||}~}~}~|}}{|||}}|||}|}~~~~}~~ +}~~~~}~~~} ~~~~~~}~~}}}~}~~}}}|{{|}~}~~}~~ ~~~}~ }{z{{}}~}}{|{|||}~̀}~~~}|}|}|}}|||}|}|}|||}}~~~}~}~}~~}~~~}~}~}|}|}|}|}|}|}}|{z{z{|}|||{{|{|}|}|}|}|||}}| }~~~ ~~}~ ~~ ~~~~}~}~}}}}~~~~~~}~~}~~} ||}}||{||}|}|}|}~}||}}|} ϗװߦٝϠΞҽ񥻵ʯۍɫɳᵒ鵠맡źU֓􌛆ѽоʿč% "!"""! "  "!"! !"!"""#"""!! !"!!"!"! ""!!"!!! !""""""#!!#7!)32<ں`߹֯p50)!   !   " !*!!<ߦ06 !d뇳Xv˄贵֍8$ *84͋БǒΙ߈YՊʙÅŰƬ֕Ӗ嗞a1+.LjܭΪܬǿ׼?=~k_          ! ! !    !!   !   !!!! !  ! #" !!!"!! ""!"!9"! !!!""!"!!!"##""##"#$#""#"#$$##$#$#$#%$#$$%$#$%%$$$%%$%&&&%%$$%%%%&'%&%%$%%'' +4ճ⦽軿ȀÍ֨ʺMϘɪ˲݅j.)(''(''(&%&'('(())((()()))()++)*+*)(++**)***,,-,-../..-0 ///0/0222324345676565666768778:::0  !!!"!"#$&'*-/.-+)('()1('O$)1PVO50FE85)0C8\M=VllTW8-?%*H\@78V]?#@*4:11NP,/-3.:H3$'1,5@;,>-*7:??67:X92+4HSF11@A5/;?,84XTMH68^C/LF?;HR?KFB0:@C>ITTKP,0XID=;93-1./6UM>.@IO110GUW;FZSZQvWh4434344334554454455544456655654566656565566566556767 6676677667676777676776767676767877678767767767776767767 +687566767767667667767666776656665565565566566556555656545454554(ii44hii443gihhhigg444hihffhghgghhhgfggf4hghihhggghghhgg33hhghhh44h434hh4i434443434335pSFM45khh434D334344344333h\A^ggMH_\NXP]wtScedTkCMPU[j:6MLcbbcdcdbcccdccbcbbabaab$a`[^`YWO6aBL<`\JMMPuo?>ZN^\}i`]]^`g6T]h~Pe@64U[Coa惴K4^THUeO_^\XF?GuSYm`ZW`yܗblh[FJ@va|_^]{?`|erwByeWLurOLv[bn\mhxyxZUQAvXev4QNbcdpjzuXVyCUY[[Y[[Z\\[[\\[Z[\\\[Z[\\\^]\ [\]\\[\\]\ ]\\\]\]\\] +\]][]]]\]\]\]\\]^]\]^^^]^^^_^]]__^_]^]^]^]]]^^_^^]^\]]^\]^^]\]\\]]]\]\]]\[\][]][[\[[\[\][\[\\]]]\]\]\]^]^]^_^_^_^`_^`_```aa`aab`aaa`abaabbcbdcd2eegfggfffghghgegghihhiiihhi4hii5iijkii6j5k5j55655567776767787898889:::;::;:::;:;:;;<>=<;<<;<;<=>>>?>?@?@@A?A@A@ABBAABXl|8bYOIELVWWTC>*IM'-&&-31.250046_js|LoIQDaTMK:Y\/0026>v=vs|wmA;dNJFLLJHFn<<=ACGHKKjǣCD=QYP8DK&'KD?/-213\1024211425536787799887::7=<:<>;89:::;;@A::<<@JE89:>DHBABDDBCEET-YFB;8j<>wxxrqz|owtl6/3+8B6?>;;?IH7<;@=?<>C=6=?>:8976546;9:;73354`ac1332=/022/-,9@,687oija_.57=<58;ACB?9?@8444211=91)#,765456863::;53/0H36655-C;)')),(('&#$GIHL&/1*+,02055/-/*)+-/,'@ACAC>;'''#&/.,.25*%%%&" "" 2!!"" ! !##$"! !!#$" #)"%"'&" &&"!$#"#"!!!#)/.'-/-,++)&.:( $$&$ !"&#!!"! "!$%'&"/0,)(0>/1P?A;Dh]>eeZCm`-.,"84 &""#"##'#H=7@/K685B8,8/34`EmWE-H]J/91"  '+)+&+!('# "*(%#%""%"!""" ( ,(%(*(&# #%! $%$#)%3!'(1,+?B978=67;7C>0SPO2::.;MSF%/FIKNUTNKC:76TQ/Q6.J/4@3JARA;9=@:`T7AON,+TPQ9)GA-HKLPEENSJ>9PJUcKW^aQPRG002N^K0D3==.Q[[VVTPLNEB:Y0;OF>ZPI1?55259\=>5Q*=k4+HR\I4W1^8XB3,8/UW[WTAFMVTSRG9^J=:EGB`bMRpPb?<5bDBKDCJPS776R3IJFNPcDK;@#/;7E>DB:0Pyg[7^`agc[Q%E<[acW@YV<(MQR_``YacUPAXR9#%,4T62-P]?79@_PKf_X[V[VP&-NN)'88% %1SYWUO)%9GMRO2 <3GUQO@CIFC=,!60:G>"#74)&%1/P=8RgfJE"/9L7&!8>$#!23 .#&6/!,&..$'**# /4(!!""%&FC=2 !;.330/7B.5/(&*'2;7/0>/)##""94-$4EGED@e547;;?@CI{黡<83HPD(,.085%#""##%%'%'(*(,,+-///.1010/5446753455654898;><8:8488:<;9546665848=8;:M<657OKg{qn璢ـw{{zujɿ}wursrtuvppqnh|zpgahfddktuwupkda\VW[YV|JTUVV]cfghd`[QPMHLEGIqjhnopomomqnglh1_^ZWWUWVZ^^^]]Z_`cbfpjkhiohilfeg]SO~w@OOMPOJJKQJDHF<98;989<=;998l:CJN10-C-@EBMPfGJ82 ),;7<:5,Il\8RX[[_ZUC62QY^VD`U/==2.F4T@.Ncvg>F"D,:(4H`2>:<;:D9*)(-B?3?A(47?J95;V8270G-E+$-69+>)/23[WJN5=b(7J4G=LjFDDC.7AC>dhbcd21cfdddededcdccbcbccdcbbcb`aPKNaY>G`a`a`^co9TM]eJtsPO_]__^_UPe9=jGvYwC2l- Cr_vWVgM]\\_F9SYa[]DZxiTvFogxYdQS |]|a~JASupK9?[mC`9MTvyL_p|f{lö͜{KEBfaちz_sxE]xltVaSyU4\[\ZZ[[\][\\]\[\\]\]]\\^[[\ ]]]\\\]]^]\^]^_]]^]]]\[^^^]]]^_^]^]^]^^^]_^^^]^`_^^^]^ __^]_`_^_^\]]^_]^^]^^_]]^_^ ]]\]^^^]]^]^]]]\]^]^]]]\\]\\]]\\\^]\]\[\[\\]\]]\\\^]\]\]^]^^]\]\]^^^__`_^_/`a`_`__``^_`a`babbbcaaabccbbcbcdccedcedefeddeddefggfffhgfhhfhghiihih54ijiij54j55jl665665666767766m77787878887898989:9:99:9:;;<<=??><>@?===<<==< +=<<=<=<==>=>=>>=>=?@>??@?>?@AAA@ABBAABADvqtidZPIHOVZWPB8N6;6:0-5.583;=E@%F`{MtVTCqZMLsf[\^5449Cw{~qk{{sE>iJVCLKIGJjs=>@CELLOb>D7FFM8FJ"%ECB7.243200U56013232146646798969:7;;::=<:9:=;8>GB9<<9EQC78;@?@DC:796:=9e8wcdsh5644H5?6>A?<96d3=:@?:<>:?>BC?8:2@BIF?53795665354:6-$"196525574497;650322034736,B0!#" "&#%&315C&-0'*,(+1+'10-12.&(#LF;:=A%&% &-,0132)%$A!! !"$# $" $#!$%'$$%! " " #%$&!$"$##!""#"  !"" $$$)/,*'*+)*()$)'!! "%'-'! !"!!" !!&*+2.-.*++.&$)'C4AiWXjmMG89bH5l[30.=!( $%%%!!$' 0gZGZ>C=32L&".0*><@@AJ<=4;`;>:?AC:@:;;;B8.;QV:N1GWXQPLHHHC1+2004:5OQ399UKZ;<=OA005:=MLM0WCIB*C2BGEF6SB7B8592C6DQD=Kb`.5B@X:9"!+TGH\`E0^^:45@78?::;999SPOHE*1YC,M>EGA31FKGENJA<0Q8418@CBRG+(/*I?:8C,3)B!7fP=CEI:D-hJD=b,9.YZ.QUQJUXX]REFMQ|@BE78VTmT`J(Qc5TJOhtVD538R2.FGMO9.0LNIHDKRRWL;3?0&##$(<2& "Z 8%)10S1C칓㦋ाՌ)&$ &5&%-'1& .76$,:,</^ +ff9415L. + '#7 *F/<$飕*dT^)+8dT2a#%۝L~n]VJB;;?DJKG:5H1847+*.&-/(*()% #WnOmNO@mTFElYONP)('09kutwqm|wn@5X=I:DFCBB_c47;=>EGOt990@FJ//,,:;,$#%%%&%)*'*++,*)*..--.120.34X/2233664468845<99;<679113549;645455598;B>9=9U;;78;@=H@K[e^op΄̀wwwumiý{yssrnljnmikmjc~{tmkmia\]eglqqtrrhaZTRRWWVX\`abaYRPRMFFHJu||nqwsnhqop||>?5^UY[0ZUUZ]^\ZZ]_``cilhmokmme^_ZQMMQNNSPNKKOHHGENA;:8457779:43529=8g9xooyk/(%%2+3%067632^-400...0-33661.02/..//0.+'-((+-**.0-^c_\Z.1/,(%#%!*04pkic*."#(-0/+'&)//1231.($ #!#!%&(*,/)'$$$))(')v , '*5?#%$(''&&*%"%!"%'$=@=>=2 #%4 + +          + +  +  +    '    + +  +    + +  + + + + +    + + + +   + + + + +   16-%$%($ )%""""01!)&*).$.)*("-#$+/*()#&, ,(%  ,,)* $#"$!$"#"#"" +  (&&!'(##! #%%)."  %#0%#!+,")4.))2,(%$,03',-"!%'+!))!&('"#)*'%#%'($"!#$*&$ !!+% !#'.- &6+%89(?;&"$,()-&&&%%$340/3*!  $"'&" *$"#-*.!!# 9$# 7()$'$!))(,%"$/D#$$)LLKI/ER,FA82'MT[XVYZ[\`T1#MB\U7OGX('BNRYVMYMWO8IQR; ;3"L@H4@BV^WP}|}|||}}}||}|}}}|}~}~}~}~}|}  +~~~~|{||{ ||}~||{{||}~|}}~ }~~}~|~~}|} +~~~}}|}~~~~}~~}~ }||{~}}}|}~~}~~~~~~~~~~~~|{ }~~z{{{|}}|}~}|}|}|}|}}|||}|}|||}| }}}|||}}}~~} +~~~}~}}~~~~}~}~}~}~}|}|}|}}}~}|}|}|}|}|}|}|}|}}|{z{z{{|||}|{z{|{{z{z{{{|||}|}|~~~~} ~~~~~~~~~~}~}~}~~~}} ~~~~}}}~~}}~}}}~~}|}|||{||}|}|}|} ɕ٠¹װʦ灟ʝĭхĺ߶پʾȻY݀ϲ̿׾̶ܻy!   ""!"""!""!"!#"!"!!!""""!!!!" !!!""  !$"B'.(%*#%1`7B3%,̠ "      !    !!"D! :*J¦- #ly_ߦ茮݃K'3% ! %&1 1뚎ݎʕ㘘碅Q꧈爐꽢ٻ“Qd_vʚĞڳۻez;m;  +               !!   ! ! !! !!!  !!!  !!!""! !!!"! ! !"! ""!"###"#$""!"##""##$$#%%%&$$%%$##$#$%%%$#$$%&&$%%$% &%%$%&&&%&' FοĴゐںέڊ끅ꢯ㬻ẹԂܦеŸ䒕̆a-(('''(((''((''(&'('()'())()()**++**)++**,,,-,-,,,--.-,-../.-./ ./11///001123 555654565433567768779:<=<>? ! >!!!"#$&(*+,*('%%&(+09AC@5-)()+.0310.*)((()()*.00/.,,1;BC@71//1310...05:AHHC>99@IMKD821121/-,+))'N|ꈕ̻ǿ䌨ŷù낆θºވǿĸҾ档ᕁǿ釻¸Ҿɾľ懍ʀօҥŀ¼ɾϾȸĻü趂ĈԂ﮽Ꮬȏ𒲭ǾĐ򗋼ԩߏ퇁٩׮Ķȿü͸ƌƈᬳϞԔȹݼɜ҆ɳʺҿ،𗔀󅞝х­ָ¤Ձሟ˼¶ҺĵÚؾềŽϾؐňƖЈھäʍñǏڰރߖل7ٛǻīɻƐئ>[`b]X59f_3!##/SG'&+-`aa\E3<_]ZYF1/.*@UXXTNBMHI:>F#JXLECF%/?G>=VIE\W73./7"'$;?7;G4/448^74=4B[N76$)/:+07.VRMJ0A39D5IQB\e=@B@+6@A@J0Q,./,[O?:87-5119KPG66KUD27&CJE:R_PZXVD54544554445656656 566655665656676676 766767767767678787887887878787887788778878877888778878778878788877878787778778778887877878788878777878766776767676676665656565556565A444555445444ij5i5iii5ihh4iijhhiiijjjhii44iiihj4iikjiijjh4ijji444545455455454545455454544584YVF?BERW5455454546544haO\`l7U]V]kwyxɤnSJWip8XTDbTFEdee122edcdcdcbdacacbaEcKSN?aLDa`a``_cpYb~TdwlP_a__`_^]WnEIgylYR$XJ\[\[]\6]\\]]\]]]^]\]^\\]]^_]]]\]\]]^]\]]^^]]]^^]^^^]\^^_^]___^__]^^^_^^]]_^^^_^_^___^_`_`^_`_^_^_^^_^_^_^^`_^^^]^^^_^ ]]]^]^^_^]]\]^]]^]]^]]]^]][]]\]]]\]^]]\]^^]^\]]^]^]&^]^^^_^^^___``_^___`_``aaa`_`a`baababab cbcdddcccecdedeeffdedgefeggfggghgghihgghihjji4ij4jjkj556555l66556767767;?;888787898989 :9:99:;<<;:::<=>>=>?>=?A?===<<<==<=>>==>=>>? @?@?@@AA@ABABBABCCBBE^ptkcVLEHQSMIHA;>MKVW~>FMDEIZbJT?LIKLIil:<<:;<<@GI=>>8M+D:8>?FOK@;978;=<;@:e4ke;2H3)+95=BA?=:g@<86423441563546554c`_dc`Y-.2'6#+1545b`[-138544:7;:7338<668531173) *5;66686754;<;544414143402O>>$)2/)(''"28$.-*.0.,*.2TS++),*FA%"WECVTCqn].+:?6(0-()&+!"*)+-/ %/(&"!$+&$"%""#!!%'&"!''#"%%#"!%(&%'''#! $#"&*00E?JN_=LJIy=^G.&A1+LL7>@@# DLfb<5.,VMUF7l11126//WNZ_YOQIPLHIBCALLKGPY\SXQIQHIALZb3O<#KWL50RYVDGW^WRSD?EGSYHLRFEXXMPPMJQHDNHC:8:;@=;JF:8679>:<558658=BAMVAH.SUJOQHC>>KA9;5P74.S.870V.0192;WM5'.3HHMTG8EHE*.CRK9369:74-@KMaTPL\cZ*NB]UZ_JX[kNRB]R=.>4*,3995,-.46:865343\J+72/.11//-XT./Y-,/-PIW,QTLMNRRKCE?AGISTPWZZSIF/P0T40QaI>THCEA8]V?<DEA?<7(%O*-J]MBBJG58>>DDF:60/./00-UPNQOKO:L\UoXsb6UZV\P?1W\[OM^Rd6;99;=96LLQHW1ZH=DGIL=MJ@Y:+"$H1/M>6)Thdm\bb_cc\e#D?Wb]C;SS^80QX\JFPSHR?;@RdW5+.7D#!%FX8.'LYWmeJBXZYXP+2WQ(#B5!PVXS8$2MQST;)##6LSSQH?HAE2<1.;* *8EI$.'"'$%).1D.FNf^G/&5:*1,0>2*++$+"*B5.E:),6/39"!',($e%$( )=5 +#>@;6&$'/,6D4@G$)*)()(. 2@8'"!"$03.%'AH;*-9HC9Th\ghĔ&+i+󘩥߆hݿάܛd52,/CJSûm257ʌšͥI7KlR;Ls"#F⢽-%,$+XFC-'D">/;ࢤ֢e*$4%=+/'##%*0#0*%(#$IUJL3GG=+($! #(rN%DťDM6&K)7D7qV7P[M*&b髫!<Jzn_UG?9=CIGEE=79HGROpo6isklo^prby3R:;><==FXBGc]oOįpqqmnjɼ|xwuqkidgdeff`]~zvxz|xttund^[aclnrtwzumb]WTLJN|WV[`b]ZZZVRLIJ@~yquwoghekwy}}pp:640+PPQSRONTVVSSPUZaffd``fh`SJMKLOOILNKJHGSNQ@95468?<520/37856<7d4ka0#5# -$07:998c44.74,2303464201..00100-+,,(%,.,/-/021`[]ac]Q'$#%!(.37id`(!(&'('&'+2/2331+& +'! !$%(*+.,(%$%)))&)&)'&7"  "-- +3$$#()''')-LJ$##&%?:,?<>9   ;  +    J           +   &    + `   #  +  +  + +      + + + + + + + + +   #'2#&#G"5&!"#'23 '"-(6,)/0+&(%(&#% %%&#)-/)-(%*#%!&,/'$'"$)& +-(&)  !'+ %(*#%%#!%!#  $! $$"#'!#$ &&(#$! "##((3-*)240+"0,.2$./7"'&"0(("'%'# &"$ #$%#! #"''%*,+(#$+($-") !.+"))*%*)#!$&$#%%!'& : 31,&)%$(&%""#%!"4%.$%"!!"% $&!'*,#*))% #%#/-+$!!**#%#$'&$%%"#(;0@2>4'MPIJ<'!IOOEDJ44 '#%CGLBQ,L<6@DFJ?OT@/6G1#9GTc`F}|}|}|}|}}}|}~}~}~}~}||}ҁ ~~~}{ +}~||{{{}~~~~}|}}~}~~~||}}~~~~}~~~~} ~}}~~~~~~~~~~~~~~~}{~}|}}~~~~}}~}}}~~~~~~~}}}|{}|~{}}~~~|}|}|}|||}|}|||}}|}||}}}~~}~} +~}~~~}}~~~~}}}~}~}~}|}|} |}||}}}~~}|}|}|}|}|}|}|}||}}|}}|}|}|{z{z{|}|{z{{||{zz{zzz{{z{{|}}}|}|~~~ ~~~} +~~ ~~~~~  ~~}~}~~~}~}~}~~}~~}}}~}~~}~~}~}|}||}|}|}|}|} ֺ߱ܿ⓿ԃɸЙШ؜ѳɳɨ㮟ĬعZĶƻ݉ـųźۼϥz +1""""""!""!!""!"""!%"@(2($" $!CF1Jųʓ,4ɎrFPƘ_4!/  !  !! !!  ! ! &C# !ƵK"jC%!#ƪɹȧ{5'##!#!%"M7.)''*,.110/,)(((''((*/00/.-.3:AB=51..012332/-,-/39AGHF>:8+)#Hqf`X*"[_]YN=A&*,JYXVRFBMEJLD+;>C; '?BJ[:6E:/270ABWI3Chm_1)2;+;NF:52MD,&7) -1;1NIMP7;YP=S\IMfGB-.7/3=@GK+L,1.+\O?863,./2DKJB5\[SZVOX?>;;<;:;;=@>==<===<>@>=><===<=>= ?>=>>?>?>?@?@???@@@ABABCBBCCBDEnpg_SMKMH5BKPNNBAA<6.&5;=9;C=EvzgXSrEHEx]Qm}hj]^?a_aa^13;rlr}wakkjDxdPT;GJKMbiq:>@EKUe]{uBED=76]cAF#*JBLG/6005213U41101123244535356878:9:<;<==<:88;?C-*C>@==:<>@>?<86434744685436443c\^__\,/24&6#*/434abX+1/-.12827;868:::;9653163% /68479:77659::6577543311/0B:~:).$042+L)'*+*% +*O-01-(-.Q,ULEFJAA% ?B;@C## $&.-/-,' &)($$&&%%$$"#"%$## !""# "#!%+'*.*%'"$' $"-/# "! !"$()+$" &(# #!!  # (%!'!!,',%!!(+-,('-)(6#(=BQRXY':3h837NGTEIZT]/YJ9CIJ;:?SSTP2RNROOMOPJMAE66BE?AJJ=5887973:;<955288:R@")*VUJRKJF@;I-B4K7550/278138:8NN:./$(F5;_ZD2%@MQ@7(PS2NA45FQQO\EOGVT`Y^4JTSZQ[KPWX[*M\:P?8788853300046742_T14$4:73/21--2YSPOFP--*QQ21\]WNDID;65;FMNOKHGAA@5.F7BI5=JPFEHLE<88627;=89SJ-<7<37H.58>?>@E?BClC40DaBI?C=8:33799633465BE';%6TZEOKC<->B?C=]MMYWT=LZQ87%B@QBV=;?C@B(%5K<73MPEABQ7-7XIPH,632/331/.WXXUY9UKb?Mw_<,[][\nG8OT^TPNXINaXR2?EIH>RLJ=<7/$;-HE<dgR315R",-OIRB4Emi]ORZ\ZZG)JWG%,*.L1<]ZVNJRURC30"@QTSO@@HBD>4*25%-1=Q,-6-%#$/1G<,8\dS&$ ':;+>660-55,@'DOL  "4(4<3#&+'' b#!+( $7*("89<>$$;8+7I88G0*#$'-,+>8'!!,0,)#,DM3)59IA>_f_fhf + +)㕧ŷ톇ͻRq/+,&-Leރ՟k&FܿԎ&-e^<9;u$`Iin[9wEjGySh@]W΅ߒ)! !"f,"0$  )%$UE$!(m5{6D-+ 48-#+o[.VF y,&&-U1>%*LPE *7SW䨍yl]PF>=ED3=DJII;::60("/3215;5:XSJHd}CFCoPFfsa[JL5QNONJ(+5hckto`gca>cP?B1?CEHx[^f6:BOeC;=?>9;?]sK}xurـ~~|kjkmkc}~{yyvqihgefb`]YZpyqkinvyWz~yzsnlikgcjnomutofcWLI@jEQTVNKQSZ^`]YZWOJI@D~}~xrkfjhiomrtvsnj53)KQTRPONSMOLJNQPNS[\dff\F\JNOQOQPIFIGHJME>?;;G&F51/05668:<4360.0"< &$.47;;<4510356321433.00222110/-*(')-/.--0.1/[W\^^X'&%#%!'.16dd[*"&"$)(&(,.18753.$ !%!!"$$'*,,)'##%()&')()(#)#'/+M!"A'))'&*+K)OAAAD@>0<7;6       +   +         +  + +   +   +   +   +  +  +    + +  + +    + +   + + P  +01/$*!0'##%4)(#("0',('-).-&'"#!"%""$-,(/++"!#((,. 3"'!,'-*# "$(&($&#&$&#$$#!"# ###&&!&! !!%%"/(! "" )+*1#(%,,4/4*..0)/&(,+/%.$($ '&&&$#")*)$# $$%" !!$!$#$ " "8 '3#&'-,**$%))(%#""#"##'$$"!-"#)++#+*-,40<-,)(&)0&'&%#$%(4)+%('''z.3-;$6H5&#OPMMW1'DHSHFDF-,2. ,7=:73<>3+8E-:AEF:OHG74++%@<41>AfYXSQYVY]UE=)-5SVNf_GWS'$I`SRB@;AP[<=ZY@9 ?=C/&,!  XöڐԻи⵱恄醕㜵ΦöUȦɡ؍ɹ{2*('&&'')('''(('''())('((*)(((**+*)*))*)*+,-++, ..,,-.--///0//01012232133345646544343334545446567889899;9 !"##$%(+++*(&%%$$%+3;>?8/*(()+,.00/.+)(('''()*-00.,+-29?@;3/.-/01320.-,-/28?EGF@:89BHJG?623210/-,*'N~ſ솘̽й̽ɿ˾􃇀ڻĺDzҾķŻдýҿᖟ좣퀉¿Ĵƽîűʙљ때؞ǃճ􊌊ߧ抖ɈдܞŻ÷ƾźɸ·ӛ麜ԼܗҮѪϿзۀ澱¹ݝնէ߬ Ũ͈册ٙ𚀄ͺѹżͫИ꿪ی뼣㱭ҬфкԀčΦᭆݽ˱ּݿŵͼŭzĪɇɆڱ˝˃髽ʬʊʈ؞һċþ˫Ûĕ΀W_hma][AB]\HC:7KZR:---gk`W?5La^[U>6/$*1ZZZWQ?=IDA?99:<+;\9TVHCC-,<()6U32K?XYdUO -)0,+C6/EG77:=:?6U63:E.`KMMM12)=-2;2KBJMHH/PHQFEaT?92TO?5ADJP+K-0--ZI7654.,*4LNC09EU`5/A$CPLHnZR\XRV64555665 665665665656567667666766766677677666787776787878787787898988899898 9988989988898989898997898789878 787878777877877787876767676 +566655656656655654545654jjj5jk5 kkj5554565ij5655565 655655666566567dRA477665656506nJI555lADadVxFLHpwljcpfbvfs@wov^9WoV[WTdBfe33ef2232ddeedffddedddedfedbbbccbbcE[QBB_b`bU5Vh_CBGQsA^a`a```Zk711Uʣ`f©oY?=NV^]^^^_^]^]^`]NBc[RQDQW^saWZTXyqb?LYRvbsqc<5{i桋HiZdfd\2yqrzQ‚{{xawklhlN}NzfBw]]]\\\]\\^^^]_]^]^]^^^]^^^]^^^]_^^^_^_^^``_^```^___``_^^_a`__`_``_``__``_`_`_`a``__`a`a`__`__``___`_1`_`__`__^_``_``_^___]___^^_`__^__^___]^^_^^^]^^]]^]^]^_]^^^]_^^^_^_^^^_^__^^^_^^_`__`_`_```_`_`aabaabaabbab +cbbbddcddede(deeffeefegffggfghgghihhiihjhijg5i4j445ji5l67676DVcOE=:9988988898989:::9:;=<;;;<<;;<:;;;=?><<=<<=>=>>=>=>=>=>>>?>>?>?>??@?@ABABCBBCCBCE]knd]ULE8@ONHL?>?@;:3TD5@IEGDGFGnJ?]aOMH{YQ\zlcT^hk`/00/10unw[bfht<7YWACGSoGHG?7722?D%)GDM?/4235935 4.111324443435P777<<;>>>@?=;8:F0)@AFB@CBCFHFDEJPECEIFEIKTTe{jlQ\\]^^]]^^]]]^^_^__^^__`_ ``a`a```abcbbcceedefddeggfggghiiijjjkkkmnnoqpqqqpqqrrrttuutstvvwwxwxxxz{:<7-]AiB:ATAm>MEc2C59>)"! &+#8$(,1'E-,(U2 (;22e]Y8@C113S5N6C443#% &,.24!$#!$+'"'#""!#$#$,#$&-$)&##%"" +)(#!&#%&%%#%$$2\=8XB(79A?BHSQXg[C9=:878:E=<57253-E_a-PUXRGSHLF;98*c=0PA030+,:<4+K12FU>HVgMOC#ML2M++1,8&:R-AWA@PJC?LIHGTRP?Y4>G9IPaJ>MG97;E@<==89:2DD//,224S?8H(&8:522.ZZQ?H-HC.0,XVPJC<50+GN3<@AEDCBA@=APKKFILRIQURPFD@<2GFJ=X/Z:>9=;?GF>2F-88.:AWUW=ARYnjYC7D5,A?<<:5579;:97610ZHQ. Z]LTNB;-=I?8:EIVM>IIV8.C_9Q1C<9CbN>CDK>:B;*4YG>>CVP$&XYUI/663/-.VWRPSX3I@3A{dD_bSb3^`\B`+/=JbT]=rEYX+3\[XSPNObSSB]a`S4.79*-,H5(.9DYe\Q[baWVU96%!:KF.WZRN0(ARVTM0+!)OUXTM9=CA:4)(,26 &7>T@2?P3.1@E54IWW?.&)$H+=@1+*$ ?&<->CTH@ +"5,#<:'%',() _""*2D4440)#4/58-'7,1*.B<$$97) '),/*>3! #21'&7HU/(:;OOFrb_jkg҃Z<&)@  Ȇс񬹃ﵠږ`33-:;Q΁_[]gj[5'3/<=.+.#3!#&,O*&';%" /)&"K'DaFSXљxiYOF><4:EC=A533432.L=08?<<9;76[8:fiLLFsLETqeXDLYYP&%&&**hwzgoX___m3-GF1ACFGhX`e69>?.CV՚wB>=611-+/*7AG6)+,-,-)*)'+*+*)*./2/,.//344533213267;43259-4*-/.03877:9:?A@AAJNB=>?;8<JKMVSVOS>LLAEG'?*,42 Y.3*3DW:,(.3FJ?>EIL9D4")'>>36)9n_CmpU[X]XCa''-=WNY=vEUM*NQSPKKL`LP?XWSB#8("+5P[W}|}|}|}||}}}|||}|}|}|}|}|}~}}}~}~}~}~}|}|߁|~~~}{|{|}~}||}}}}{|}~~}|}}~~}~~}~|} +~~}}~~~~~~~~}|}}|}}}~~~~~~}~|~~~~~~~~}}|{{|}~ ~}|}~}}|}|}|}}||}|}|}~}~}~~~}}~~~}~}~}~~}~}~}|}~}|}|}|}|}|}|}|}|}}}|}|}|||{z{z{ +z{{{zzz{{|}|}|{ |{zzz{{z{{{z{|}| ~~~~ ~~~}~~~}}} ~~}}~~}~}~}~~}~~}~~~~~}}|}|}|}|}|}|}|} ӻŠǾЄע큡㧺٥Ĺ޴ԸƾȓɳYʿ쁈倂݀ƼؼÿԖ? +     !"""3*H !1&% 6J((f붇6;2H$'-ꙙ.!#!   ! !  !! ! $!! !!jބ·ʥ~! !@ʖ0psQEuetU?c3( ! '9# !%3Nπ¦ܻżބ񈾄3GFϻ۵3ځ̍džέϓr.(         !      !     ! !!  ! ! !!! ! !!!"! ! ""! !!! !!! !!! !! !!!""!"!"!!""!"#""##"#!!"#"#" #$%%$$#$#%%$%$ #$$#$%$$&%&'%'&%%%%%&&%&'&'''+2,#1?6*%6ɪˎ͝냃̵솉سӄ抒󁇌ᦹ╞ꁄŨƶŶdžº9+''((''&'('&&& '()(''(()(())(()()**)**(*))+*++*+-,,,+,.-,."-../../110122433222445664554443444344233576778999:9< ""#$&)*,+(&##$%&'/8>?;2+('(*+,///-,)((('&'))+/0/-,+,19?>:3..-./1211/-,,.16=DGH@:76/)!+INB]N?C.2<3#!8K-JPLV_`=4,%(-3 3DCK68<;>@9U429D)7(2:^I7FB+(&B^L>I3=?*n\55666556565665565=6f]6656p\=NZ556_;7Bhka|k>PH0cpmOSaJv]b4EQadpsp6@sRdff3 2322333f2ffdfedded ccdbBV6GGM`b4e?k;kpSh75y_7a```ai]^ZK;OlrwRy~όx`~xoFBgJG_^[]]^^^\^V3<]\=>=>=>=>>=>>?@?>? +@???@A@@A@ABAABBBABABBAABCCCBBCDCu^ojbZUEWIOEFBA38;:731KI9<;;>cqes[`hnA:]T;AAJKr_il9:=CDO_sB@?bU./0;CNRGGQH153224]3970012123356556868788:<<;>???<;;9:;AE?ACCDGGEDECJ=AGFCEHIaVi_]]^^^_^^_^&_^_`_^^_^_]_```_a_```_`a`a`bbcdbcdccdde fgfehghghhhjklklmnnnopnopooqrqqsrrstvuttuvwvwxwwxy{z{{{||>}@@???AABCCDDEDEFFFGGJNOQPNMKKJKKMT]bb_XPONOQSVYXXWUTSTSQRRRUX[[[XVUUY`cd`YVUVVXZ[ZYXWWWVX[`dec_[ZY^eiidZUTSRTqTRQPR{x|wk®~vvx|}ywsrhme»efirvwz~zkhdfcillumOXTSQNQLO[fu|~~{xof`XN~~|qqyx~wre^tnkmgfo867;BAE?756766310VTN^ZVwu_VSTVVXZU^UTVYWSPPOKACEFMHFC<:?EGDnj:F@=<2J+F2.9=B=ACA>C>=:48;@9<=@?;9;=:::;:966056667522636633f340.---"7J+/224eb^-.*&+..816@@4689:67862681$'4785175651269954476354335&:3/*323OB*,+*60-;*)M--/1-01Q)USOPHD#)'75E$!##!$$*/&-.21(+++&+$'("$! %+-,#%!$)'%*(*3*#%(+3-*** "'2+)"!"$"'''&'#! ! !+"&('#,')%-)!#5(*%&* !*)31+.!7!'"0>83e^`/TCI*315/6$:-B&%%13+$@2V,>5,;*4C?N?1"1/eDT-I@971.J9=JD#&*&(!!-#,;1'! #$%! $&#"$$%%&.=((-(&)!$!&$&%%$#&"%(#&)+/=>/._%'NOj:>YW.1OM=>4880"(%(R`Q3VVTQHLF+C8VKRM@XO40.URNEODP-UGAFTYYKIPWZOSSMOLH?2=86;97Z\W233\c<:@8J(@2ZWCI78P;>CU\cX95:;=<<977851BF,55T52.)E29FLMGFIJNYR+6eJ2Jc8>^8Zb;C9CE<2+AJ=;2MsaR|U^X[YYIBTK0>YZTTsFXeY'GdaTY[YRH\_]P-/26'".F@!3GLd]Y[\XLRZN6?QI9OC,2ZTTJ$LSROA$"%+>QYVRN9J?JG&*.I,3F@d[13B=0-06D9J;PUQ00$&3>/F:'&' +$92?3>KV:- %#78B)&)&**"_ )0+-7=#&)#(B2"0*(:.!,$)&&>;.'.-,0 ..;7"!&91/=NW-+@">IQM_][ki\lw냄@PN醇焅֗㄂ݒf}ơ-MYR8SVԛڤ[Jj߮͞ݔꋫ'/>8C$#_fЉ=('.\UXc[е보㸙׷/,C2DJ! 1%%4%4&1+Ai"4ϖΓ'-*&  7W9:* '82$(,C2+!'($*>]''^'CmvdXQL?PBG;741%),.,+,F@55333-18:@-3pkvNOmPJMZ^ZMFKX1($&&('7]kXsgV[`g:0JF4::CFhYae68;?ATܸi@::ZP)*)+*07;EK@-/-,**')+'()*'(*+--/.//.0/-,-0//2332020111/421/.1+0,*-4605989<<<9:<:GRo}wʀhmhhbyttvzzvvrpeh_badkptuyvrkh\[Zaahjjsi@FGILLOHJRWach[[WTNKJHC{|zwmkqqwqj`Zlf`^WU\+)*.66:81../+)(''HKN^\X_VSRRQQTMSKINPNMIKMKA=<:=885114;HLOUROI>78F4B/0@E+29>*'C$B!G05;**)DOPNMJKKR7/$!3;21)Ae^TdkYUVWGDI<"/INQOtET_N?VWNRUUVRTLGWUN=! 3+&5@UU}|}|}|}|}|}|}|} ~~~}}}~~~}~}~}~}~~}~}~|~ +~~}~{|{z{{}|}~~}}|{{|~~}}~}~} ~~}~|}}~}} +~~~}|~~~~#~}~~~~~~~|}}}}~~~}~~}}~}~~~}}~~~~~}~}|}{~}|~}|}|}|}|}|}}||}|}|}}}||}~}~~~~~~~}~}~}~}~~}}}~}~}|}|}~}|}|}|}|}|}|}}|}|}|}}}|||}}|}|}| +{{{zzz{zzz{zz{{||}||{||}}|{zz{||{||{zzz{z{|}|||}}|}|}}~~~~ ~ ~~~}~~~}~} ~}~~~}~}~~}}~} ~~}}||}}}~~~}|}|}|}|}|} ĸҳڻⴐŴ񶬺ŝƣո֔´Ɔ⽤􉵥ĸVĵڃĻӯ͒8 +  +#+G #@("##(& B܅|(&8;4,''&(*,-//--*)((('&'(*-00/-,+,2:=<71-/0110.,*+-05K03,cQGEJJX_F)GU78A=5HPIVGUWd7BI=EE*5PW\YI5+*2;0490'@24M=$=:@<5Y247FLH60=M1:PP<6,I1NCAABNS1+-)NVMG=7442,,BQ@+;ES\Y15N-9DLoBYW`]Q]PC6556565677766777678887787878877789898898989 8988998889989:99:989:9:9:989:98998989898989898899898987878878767676765565656 +565655566565 655665666565666565656656567656768l/3F65656?nW6g77e:EC@[fej;TL^ZCoT]HTQIPp_wI[ST+OJv7Wo]VfMX3343f3 e333gff222eededddgST6XO`ddbccbcccXG\Wx?V8TSP`achXq|C@[)/ivUP[ibArCeV[R>]D]^___`_]\c^`][ZbT??>>?A@@@?@A@ABABCBCDCDCDCERclga]L19>BJK;=8==:72).><20279:99r_RrXRYZ``^OTT@5001017W`k=U\cqxp4X5;=73@+(A>AC?ACDDGDEDFK@@CIFEDEKt[{^X^]^_^^^_^_`_```__`a```_``_aabbbccbcbdcdedffefefhgghiijjkkkllnmlmopopqrrsrtrtttuuuvwvxxxyxy{||{||@AAABBDE GHKLNOONMKJKQY^a_XQMMMOQTUWWUUSRQTXZZYWUSTX_cc^XUTUVWYZXXWVXZ^bcb_ZXXZbfhd\UTTRSRRQQm{rutlfcz|yvqrstsoki̼mtpqwy}wrph`d]bjeV`ZUONNTU\aimsuvtmjj]TH~y{zxspryuxtrpxvBHBAB:f:;9:;97/YQKTVNvnULNPQVSROZZVYYWYTQRNHFDFIIIFB?>94:8uv9>CB;9)ET8+.<@AA?=86>B9:>A@<9<<=98:9641576545744543cd0../..#5J)-346b`Z-1-&+14;87983567:99753865%+.274/4299659<;4/345443/28#-6LTTFECT*OO'+(7<"C)OLRPY2275..QNJJC!)+(@=%%$%(-.'+..7.,,&,-)'-',0,&%+,.+$*+16+))%')+4*$$(+6-*&&#*+*'!!! "%# ! "#!!"#"!%&"%$!! /+#!!&*'#:5)#,+ 7,%#++".1/-NSa/,40"@+2:42-=LB4BGTB@2'7CT%$!#'.)&&##694535+$#" "#"#"$#""'))*(,+3)'*$"#"" $"%$% ## "&&#(*_>6(.?2,-Rk;@R01,UFKW*+Ne) $'5DBHZS^TPRMUFW;:7/O?JO452UZOO.BTVTLQHVU/TMTRVUUVIRIG@:>IK^R(`>F91cQQQVTW[<67I<=JSW[VI?NPQRUSWEC?F>Khj^l\ZKA<:?;:873655;7156,1/U1PXFNeS2.AE=/-/J)1-,< FE@HX3BJM?HODFJENRA?DV?4PVX<;8RC4BG>:984.QW35]VG*=):=%#7>82UG9-NG0,/MXPLMB:7/:7;;77502.143:>ECINIJHHED@<<1KYUDA\R[ZP\7761Z2TI5Y+XLK;#^@BEID;%@R@422//-UL(F+.U;%:QZ\[;GI9FMR[_lXXZYTa^ULE6E;57\v`9q_GZXZULzY'4F_R\9>[sxM'PYYd^]_Y]^UYRaYJ5/53&#$21)DI__[UXXOPV\JNKB%OV>NXNQ2>I48>P.)6('. 9ELH2(/!81418:5,2()"2++C0(&-*!W *,)%5A883!")C)!02+#107& , 6.-*,24/965,%!!,8(%7JPM)0G'4AMoC]^ge\nq6 } T蚰ǗLΤļeR~]YꗲãFܠ态ȞЅ3/N"5!:IƜ֟_) >Sz͙D…񄶖ھǁٿ ##Bsp/K(3J0 $ji-q:( ,) *8'*/&;;"$16 )$X$=% 3!/!5) !J[_J#:um`VUI.16797))%)***)#*86,)*)***-42.e`QnQKRS[[YKLM9+'&''(1O[a8sNWamo`+H/5BV增jCdkbV,(&,*14= EOG*+)*)'&)&')*,0.0.---0,,,-/..0100201122-82.302/1+,122487:<==A>>?BI?=>>98979]Pllـcee_ZX~wxwtooprqlheŸ;inlnqrvw~{zxsmb__^[`Z_gbKQJHGHJNMQRTVSPOSKH@uwuw}|yrpjhmojlifbgc7=766/W11/./-+%KHGPOJvqVMPQQSPNKRPNQQMNLJKJHD?<9:986320.57wx6662,(04 ),447:3677651.31*-37630112..21.)'.2/-./-//./\]+(#" &9"&-05d`W$ (&%(*)...12220($!$ %((*,+'#!#%&'),++*"ARXMNFK&FH!$."JJQLU--/-(+LCCDA53$ +     + +        + !    R    !       +    +     +  + + + + 1!.6!&&",);"!*%-(&'#-%+&&'',&(#$-(#%",+'#'&(''*!& #! '-,#-"3''&)'),$#'),)#%%%''%& #&9:2<1/%# " (%%&# * '%&-!"1+!! !# $&#'""%")+#"", *,-) "%(#   %$!&)#!!!"" !"$!"+&-+2,&*+%$'  %$+2%=#$#!2!".4)%$,++,-+++)(')%(-!#((0*/%K3920432-0"E><,5 ' '0"&#((68:8&99*7BHOUQPRQFE>,=BKKKTT4*<>-707;9-'-'5MOMPONH^7G;0'4-),NgZ;~iKVTWQMxP$1LKW9@XpqB ?KLZTUVRVYPTKVN:! " !2;TV}|}|}}}|}|}|}|}|}~}~}~}|}~}~ }~~~}}}|{}~}~~~}~}{{{~ +}}~~||}~}}}~~}}~}~}|}}}~~~~~}~}~}~~}~~~}~~~~~~~~}~~~~|~}||{|||}|}|||}|}|}|}|}|}~}~~~~~}~~~}~}~}~}~}~}|}|}|}|}|}| }||}}}||}|}|}|}|}}|}}|} |||{{zzz{{zz{|}|||{ ||{zzz{||{|}|}}||}}|}|}}~~~~~~~~~~}~}~} ~~~}~~}~}|~}~} ~~~~~~}|}|}|}|}}}|} ´աķލ瀍̵Ÿ̥ϩܩɭ̣ůʝZĀµƲѽ͇:   +J!#D . ! (*-'3/! 76('6=6E 2ƽp_=N .ّ89   !"!!!" ! !! /(&'""  !"! !.Ŵ̡K0 3ӪЪܟoD-&9< "! $1qs1<8qdcɷͱ˟`߀<'6μщ䆓̗ʔͬ؀ڠۖT  !  K ! !   !! !!  ! !    ! !!! !!! !!  !""!!""! !! "!"!"! !""!!!"#",!!!""!!!"""!! !"#"!"##"""!"""!!"!" !!!"##"#"#"""$%"#$#"$$%$$###$$##$%&%$##%&%"$%%%$&&%%&%%%''1/,8B3%e˕Ĥŷ¿܂ѻ􋑍ҭ⦵쵡ؚnϴ̾Ź¹잣vE,(')))())(())(')((()(')*)()*))**)*)*+,-,+,-+++,,,-.--..-../-//0012325433322424445444555643557869 !!!""#$&)*)'&%$#$$&)19<;6-(&&&'*+./.-*)('&&(+.10/.,+-3:<:50,--/0-,++-03:BDD>8446;CDB<2--/0/-+*W}ɽſ𒒔ꃑǿķɦ󌚙ij³ž煔ǽͮǿي˱ՆʮƾȻ½ĸżʵռ˿󈟮Ȱь􇬫ӱʊӿөӾ㵞ʴ֭ʹ໵򸠘آ摊Њ͘ʼnՌǖҴзצƒȬ׹ȻݡڞɊӕŃ͑³޵ϯڊƿ㼅θѬ܌ķôԏ낁݈ƶ롟Ê΅㽿֩ލ鮠ȅɓ孺Õ􍵎̗筪午ŵȸ渱ø۞ճˎ6䣸݊ٿȷ̿ޕ֞\XZa^\\\YMEBM-+,*Fm`=04@hgcT+7WZUUL1'-!,6VY[[[R;EB_N)SQZ-.9NUa]C0ULGMG4NLLTS-4XN8>Q6OA8WY[LA(!7CE2*F/*PGMB7/-:/)0?,5E8ON$F=@C8U.->K=8BQMTG@'$,>@0D9634,0OM:-D@[b[-8Q61FGAahaRM_V|dxrngx/]COb_eVs[[a1NqldlfA5W334343344334g4f233f32323efef3efd2dde`@R\fccddcddcbYSJVMMpA0,Kdci^XT:9!-azbU]yNrf6hHDPaFWBaQ@XY]___a`_c`_ftiS0MGb8zDsB`MkCoy_mˬHtOLFYO^Oj`sbiSmcm5{oI`SWuojstkmoQpgRjKUYXc[HLJ_J^]^_``_`_` __^a__`___``_`^_(`a_```_^`a`_a`a`aaa`aaabaaa`a``baa```aaba+b`aaaba`a```aa`a``abaabaa`abca`aa``aab``ababaacaaa`a`a``ba`babbbaa`a`_```^`_`___`^_^__`__^^_`__^```_`aa_Ya`^_```a`ab``abaaa`aaabaabbccbcaabcbcdcdbbccedddedeeeceefgfffgfgghffghgghihhghhiggf445h545 j5j5556655567767678=KUPObkYJA@AGF@<:9:99::9::;<:9:::; +<<;<<;<<<=<==<=>>==> ???>>??>?>@?@A@A@@@ABBAABBABCBBBCBBCDDDCDHsjge`Z=F;=OJC<;:=<>>34@:2/-'4>?9DBA97jdSLobTRSN\^LOSj:410/03nXdlFeR^lln63b:@GGaekp9;>V]ukpi07008>KJCFXQ+/0003W8;212113575898978:99::9::;<<=::;::878G?8FK>=;=8M+M@=EE@CAEEHFGDJHABDHEBDGMly{y`^^^_`_`_``_(```a```_`_^__`aa```aacbbbcbdcdddedeedfgfhijjlkklmmoqonopopprrrqrsuwvvwvwxwxvxxyz{zz|zy{}|~?.@@AABBBCDEDDEFHJLNONNLKJIKJKMT[__ZRNMMMNQTUVUURQPQRUWZZYVTTTZ_bb]VSSTWWXXXVUVXY\aca^[XXY^cfc^VSSRRRQPO{Ǻljg_}|xupvtuxnwtnllooqpstsv{~|zuhb]`cZe_ZSXVLUWPZdkptrpic`RL}}vzynriyuv}@=<@AC?7.OPQScVD:UXP~JPMRQPGQYZYXVZWRRPOMIGMLLA@IF>:9kw?>o9;<<24//6?=ADBDBB@A@=;;CAFO<8:<;96585298566333268443fgf200/0/0'2H).324`^Y+..#%38:8656347;:99663752!+,36213-560037751445411/9>32)RGHGFL*UUP'*'09=>CIHSKHDBF/-/.NK)%*-,&&%%$#&(+,**6@,/23*1')-3070,+&'%&'('*-033:6.((%%$)%" %,4,'"(7-%#""")"  "!" !#" $!!#&#!!" 50&",#0&,.$=1'%!:0! -#%&++/(EKI)<5&6"+B:.<.SP.1+B>/I&S8KZ`TIiw]]mfC?W0G+,E0:A1,<9?MB35  !),'#%28;57683/(""###"#*3#! #')()&*,3&&+#"#$"&#)!#&$%))"$&&%%*.g;U-/62:;9B8;T50,XJLT(EcCB>4]8HMIJFIVPQXT55NU[37D,AN66QWSH0P:XXZVZUW/U+-TU0RULOKMB;<==LONY954VdTRSSRKSM9GK*LQSOPL>1RURUOMOJE@:@GP_`VNJ?9776Z21687665>8KU7K*-RVRRLJF>J,6c'8ED<9A@?546R/4/UTOGXiV$;AHWB5;A++//W.3CF=4@4CB8?F@JFEH\EHKWE1GCB5);JDI?+@@A=;/\[H.0&8)A:>3<=4WI:,Q)^AG14JA;91CBD@F=584/.*-,39>@=?A?:>20614440VUW.WP.2<=T--W]QHCFF-Gj>9DC?;UCa9592TqU*34_V\A5@VBK54;=;<:;<99>BNMBO0M?AJ9G->-7:MEFC&O831+2PLQF\a22:8<:7)HMGG%ODCLHB-"E[c8E400-PF/U4,M.2H85@JYGF>JPY^\Z[^WJ]xSNEGQTP@3_FPWHOW[/SQ, #@MQSV^GkT\SP)896+-;SYbldIirjE5#W]cgja_SM^OUZXH+3#+?*'0/.:=DVXUX\YVWWSJC;70QI( /STUD*DIKMD&*MWYYVL1E>NA AKR%!*AN_Y7'G?;?9&<;=D@<>%.="2# +CLI6%&31#40)0.(#"3'!/(:.AC0-.1&\*4("*;9<0&%,",&2C,(-&4"##!/--322;7:20+#"! 85#.0NTO&2L0,?F;ARdi^Xkw +1%2<-2ߡձ䥓ӥɲŸ˲Ǘ>@JK_aīŠ6Eoܭ쒟ႄŬc-$).L& ,ߦ0 9yPm۞Βpҍ;اq$M7 geL!4 .wP#,T?,$$c퍣<<=(5:-*-$>&&', $!*%@7" 5'#~փDyb\XT:?31>7-'%%('*.)-70+(&'-1+566+([jTKk[NMLHV\EGLd1+'$$&+`Q\b@[Q_ljd-)X4:>@t]_dl69;^޿pine+,'(*(22=ANC$''('(+,&(+)()*,,/--.--//-**+-*-.-.-010011/:419600..+58419:589<<=<=>GF@@@>:76:;h33,(#",-3578774764528.39.3420121-,,.+)01./-,-,./0-.-[_\,*'%$ $8 %+.3][W"#(*),.011321+%!" %)'')*&&#(')((-.0.LKRPOI$JMI '+,5EIXQMIDD+()(B?" $8    + + +     + +  "  + +  ))!,            +    + + +  + + + 7)$*)"")*<)"%5$%"" *%'*+$'+# $#*'")J+()'*(*'%&&*##!&!#%!',+1(&'('"'%$&&''&($'&%($"#" #)13-&#u* $ &(%&"!#1"#%'')#*2+!*"" "$###0#%(.#(" %"'$ & $(" !'())''(,($"%$$3*&=('+!5H5717& %5*5*'-++,*+,))(',0) !! +)(/-?E$+.*,+*6=99+# .23 # " 9(#,1>9:-9ALPQOQTPCMU9LDBKLB4'D'1413;=&0"$#>M[flMfka2,)(()('()()))()))()**)(*+) *+)(*+*++,,-,+,,+*++-././01110023321223223234 +55566544456 98 !!!""$%'))'&%%##$$',5;;7/(%#%'(+,-.-+(''&%&'''(+.0..,++-389840,,,-/000/-,,,-.19@DB?83339ADC>4.-.//.,*Kwļ̾ź¿Ĵʻؾѵø̹º˾˪ƻꂖ˺ӀɿĽƲռȴ˲߱愫ͮ¿ɜڗ欕ʙԀփϬƾ͚㞶̿ȱݾúĵ϶뭵񎈃ԸʒǾֻπօéˋŴĶ򈍆Ƿָ҃⮪ܼɄؼʸ٣ƾɰ߰Ʃû͏ĩ۽ѠΎܴǨɹٯ쒞т低õŒΗ¼؇ņߣۗϼ°κ҂͟îõ퀼Ƶ̡򁎇ȿɤߜܨӹï􍆱Y[T_`\Z^`Q46O=).*3[dQ405_fX]60B[ZUN?-*&$6J\\Z\VWC0?032-[X-?HLX^W;?XBXUB?COV_L,=JC6O9B6(EX^K,%&+L3A*;& .C>GD63+;1%9-(KDFOG;MFC;X1.;I92FIPRE=BIFFD@5A:7JO=:R]N0,/,$G/PDF<3532)8UI;3GCZbW,9QI775AEF^fWPW\K855676788877887 877878877898 998878898898 99898999898999:9:99:999:9:9:989::9:9:;:9:9:9:9:999::99:9::99:99: 98999:::9:9:9:::9:9:9:999:9:988788989898887787876776767676676676767666776765656767667767776677667876667677676787 8@W.TFD>[767767776@8m]U^Qf9Oc64dbaGyH9@CGfgLCUyh{MU>Tsol7^{IyUlRZMm^>_343344g33432333gfgf2eei=[idddcdcdccB}pC@Ao'`f^QI8:HI6VX?C= +>>>??>>>?>?>@@?@@@???@@@A?A@@AABABBBABCCBCDCCBBCCCDDCCDEjcgdb]TDKHIMGIEC>DGIA=B?<66=4.101>^dv>{TZaemmedA\¼Fcp>;;783S8>GHDFQS4/0023572Y3566889978988899:;::9::<;;9987>:7@RDA>@?N,I<@FA@DBBFHGDEJDHBGEA?FILUpXabtB`_^__^_`_``a` a```ba```a_`a`a```bbaccddcdccdefe +fffgfhghgijkjkllmlmmopqoooporWqrrsssvvvuvvvwwvwxwwxyyz{{||z}|>>?>>??@@@AABBCCDDDEDGHJLNMLLJJIJJIKPW]]ZTMLKMMORSTVUSRRQRRSTWYWWUTTUZ`a`[VTSTVWXXWVUUVTUVXZ_b`^ZWVW[adb_XTSRQQPPRxwȺcfg~~{tmwqҀigimfimuu|{~l]`]]Tbefa]TTOQMUUTU_epsklhg\UR~zwn}whspltw}F=k`RNVQNQQEGUSCy}EFJRUOI]y[ZVVXWWVTSPKKGFNHBA?E<837:><769B=&11;?>;BEC=?>A@@?=D?GSB<<;:9:;9878857676776dac345gaee2120//0)0FO.215b`.-+/$$48741565778983552 -6;742//6622389700222/0-<53).TLIECKMPN'))%<0A@CHDHCCBFHDL&%&$'$"),)#!%&&"#)-.*(056:700-32/('%&+)*(%#$!%)365631+,*%&,+,+),,'>""$)6+&"!%&"" $#!! "#$"!!" ! $#! !& ")"*%065.,7?31( # #- !&3$%#*$0-05 A,DIAZ4,D,O#/9>IBC)'L\46@-*CN:=<4QDJw@AS(`L#128+.,7,@H6+8)8!%+*$5739;8765-,(!"&#%$&*1$$#%)(*)#*--#%*&&&!#!&" ")-)'**&$$(')-9A,B>;(5C?NBhZ6PU>AGIHEBW\f`QV]N83WUY6B=@IX[AUI%CL4VPPQOKNNSINH9NWVMOJ0!UVCLMNQTG=?NHJNJ9?:^RUV253_2>>313>EKB'X9XPRVILA62?R[GK>=9AG==;7112628EHfRU0/QC)BU;:>++2/@9:H./R>F]DH@?F6GFNL8:NXHD1@?A=2G2> 257>A>41979-L?.2O8:C2=-DFEJ8CGG95*/3.,0137;?;:B.+5*N){S31fOEBDID>ROX\\[XQCIA91?GOMWZa[TOO957;8C^/BLE:J,P`ceLi^`05'.56=LPPE>xY}UYXRVMOJ;)DUeMkEaigicTB+-%'FJ9=&.(!!+/%"2#*"?::F>,?75- &2&.3:<.%%$"$51-5J8'(00,+* )%"+1&&;F4&7-.' %+ ,!,$"982%h.# \My!> 8{k^ZYO@A96701.+(-040172-((,,36<0551&+:VnPpWMLKOQVMMPX14'"%'(7Wan:sU];ecf_UX5d:<>V_df6;?jָGr=71++(E*'03KL?vxCEGNRMIXWUPPQPQMLKHEB?<=7223724399;80//1*"&,..474044677757,3;1/112/02/.-./-1/0/YZ]0//][^^-+('%"$6<#(+2[Z,&$%%&**(+-./2223,%"$! &(*))+(&#(++,,/-4(#QSQFCGJNK#&!/.4;?LIIEHC.)(;BHGJJPE3-1&&%')(,"&")%Q\^aHdVU*,!%'-GQ|،a2  !!!!! !!!"" 1!! "!   "!GN+Њ6() >.($!!! !2!&:ƅ鄃ݺ֢ۀ֐ϐܧ)0̔Ť˱ᳰ6ԇªƌŜߠ?%  !  ! !      !!  "! ! ! !!! !!! !! ! ! !! ! ""! ! !! ! !"""!""! !"!"""! !!! !!"!!" !!""!"!"""!"#""!##"!"""!"#"""!"!"""!!"#"""#"""!###"!"#"!!#$#$###"""###"$##"#$$#$#$%%#$%#$$#$%$%$%%&&%&&'''%&%'&$&(('!>ӿٵ䋄¿ךò셂々ȩ阹޴ʭZځ尶ב҈cD-()-('&&')))**)*)()**))(())()*)*+***+**+++-,+-.,-,-./..000/011211223+221323444332223335455665576346765767878 !!#%&')*)'%$#&)18;82+&%$%&),-..+)'&%%&'(+./.-,+*.36993.,++-//0//-,-07>CC?83236=CC?7/.-,,dtʻǾ½ǻ򌑑Ź¸Ǽ򅑔耊ǼǹŸꅕƾԷ‘ǵʀø刘ȩ¾򋧱ǀǽθ̼ıǫĮ̯פý¿њʄѽنɅߏ횱ҷLjԗ˸Կΰ½ωطʉ‡ਉཀہ􏇂׃ɵ虀辻˦ķº򑡏Ż∺ʳّжס艏ܘǼ̽Žư鱬䐿þÄؚӞ뀁ʭҟꅾٯĔй١´件񊳅ḭ̴́盺ɱ釋ҹԋµ۵Ш˘ˇȧ˲脐؂ʼnǑݵŸבZ]^^`^a?.7S,-/.7fZ9,62egd@7N[U[S@S>POK:ERTXfD+E5/BG)I5 7HUL1B6$J5M3.<6;>';HG6*)*64>SCBHN9DCEC72AQC68FgKQG9E5,'CHJBIlMBCDJU;B:9:?OC=:cXRFJ.0IIWLCC9*140+BXE58MF^cIW=PM4:eLNKQ[[OSZX966788778777677877878778987878 998989899898998:989:99:99:9:;:9::9: 9:;:::9::;:;:;:;:;9::;;:::;;::;:;9::9::9:;::99:9:;:::;:9:9:9:999:9:9:99:::999:9:98::99899:89899889898998898788778887 888778877878876767776667776776767776667766776677666786777667687877677878678878778ja5G997h88787?8ivۢ``576667jh3H_ST7mr9uX[Si[]R_k|~}x[@@Xbکnr<@rSp:)N4 5445554334h343ihf3f geeffjrDffededeccbLCWXN~WolqQP69,93ibH[TcQdM=RUCJLQQRI@;9;:;;:;;:;:;:;:;<:<<;<;;<>BDA>=<>CDAA?=<=<=>?>=>==>=>?>?@???@@@?@A@@ABABA BAABBCBBCCBCDCCDDCDGY^ief]WPSMJGLNICBMLG=AC>;8=JCEIJ>MN9<(2/IXnT@bSOOMNuaV\aW?>0001>obss|YW[dpobfrnk?@`hnss}^dH?zJrhGE?85/*7>CCFFNQ?.1323Y332342335688:9986999658997:89;=<=<:77=889THB@AB)-F9@E@BDBCEIGDEMHIDIECAFHa[^P{iab``__`baba`a`a_`a`babcbbcdbddcdeefegeeeghhgghhhijlknnoonnopoopoppqtsrssstuuvuvwvvwyy{zzz{{|||}|==?@AAABBCDDDFHJKMLMKJJHHHIJNUX][VOLLKLNPSUSUSRPPPQRQQPRSTVXWVVUTVZ]`_YTSSTUWWWVUTTUTTUVY^`_][WVVX^cb`ZSTRQQPQSvƿjih_w|sooqüedirqo{}zu|uiumc^Uygmkgc]YUVVXNRRPW\bdmrskieYRK~wqndeWts{jmg^SP^^^ZWRWYTKAv=@IQSJHEFVYRSUXZWXWWVRPLGLMF@=DB9889::=926;,H+9??:76>=C>@>?B?C@BLE<=;:;<>;987997665454d^aab2fcge1220/..*0AJ,0153e/.*,'!*1413457668:97873464&38=533/,45323884/.0..UXZ;2!,/+QUPPMNTO&**"6>$')&?>EH'$&-)+)*$#&))&"#!'-,/.%/@9A>5'172/&$'-5,%$$&#!+157//)'$!#&##&(+%% "(91,+$ !"'##"### ! ##$!!#! &"!"-%!!#" &2=*'/8?53150(%)&&!!3+552=)(%7U>MQB94?E2V2>J8,?/296\DF8<95uJQ;BRdii_(7 ##"/*'MPP63"9* $#&-35**+2*/31/) +)$ "#(2%$$$('(($,-,%#)(&$ "%  # +(*&!%+-&))+'(*%(0+F3W'0).D6G`FYP42WYNJ?/<7=XF=AG=EG@HEKOSE4L1/8[06-TKCNUQ:3-KURSYMX/-/20,UPO22RTNNTKG>;E6,=OE@^1\JRQFJOEDBJUPOMRNOUHD)]LBJNRT]JILCDKH9864_IJ[8@7]=@417@IC<'S\3/NXYDJ?0SSO.G6?>CB676500.V2D97P]RJ6&2=I8P2336*55*AAC5I9QDA;HY&JHA:08+602345551>=954324GA$4:<95/ZVKPRXY3b/.\PF1L+fY.9gWXP>/VSNS1-4AEEOa9HWhM[TNV_WQS.2J\S;N]_`bdhj\NUXXYYZYXUW3'2> KG'!&PVT3((8OQMA0 KTZ]YQH,8*(&''J'5(9MTXH3G5EC?-9DFGU3(' 682 +/G>#,9+1$2)'$,." !%%0H:5>E08976)#.:0"!/5:1#-&0615P6)),27&,%#$'1(%%IB4)+*'93,+$ ,@. ":6QTBK8NK00YPNMUd_V\t$~Ӭу󁇇ˇɂsh?MZyӝ߾͒~$N@Ӄ׷!*0B1YӰL,"SԦꋧߒ㟦پրED@]3I&%*@.0F-B&#$)!/L# >+*c 84AdK#3/3!/)$%&+$.- !)4 "0.*4,-$2.#) /UNCN}lg]]XRGD:41362.-764.12,($'3/154+9>.*(-[gtS;YNJJJFjWOU[N90&''*9h_pnwVW]cjfVZhc`:;[chlmvozߺL=yO{D=2)(%"(',/;CE@."%'&'$$$')('&()**+,+)'*+*)+.///1/1375654216221@4100/116758:::9:;s9;BILGGDIWWQPRUSPONOKHGC=>81-,1125797330**,"9(,,**+/-63568:792383021221200/.111/0...-YZZZY.\]`^,**)'##49!&)//],' #!&''((*,03221*%!!#$ !%)*)(*'%%*-,,TXT0#"%RVIAELVJ!#./!@?9<#" + "! F + +         +  + + + + +   +    "  ,): 8%               + + +   +   +  "+0!2,(+%$#"7*"$' $% $"$'( #)&#%($"(&'*$*'%$&)%$)$"( 1-"'& $& #+(&&(%&)#,"$$&%*#%&" $"0"'- - & %') #&$&'/*$($#0%#%(&"!()&--#  + +&'"" !!' $#!+*$'')*/,# )5/"6((% 0,0<$"-"#) $'+">'*#,0.++)(')*&! %!!$'0 !!0-<%+)-+-- A01  ($"?& !&!AA&%129<(@CLPNJEE<;CHM9)0%!'!#(+3+)#V\]]RfRS,-( #-01?S5RdoMZSMV^SNM!+DJ9IW"XWY[ZZJ(:POUVZLRE9HPH)&$,#/E}|}|}|}||}}}|}|}}|}~}~}|}|}~}}~}}|}| }|~|||{{||}|~}|{ +}}}|{{|} ~}}~|~|}~ }~~~~}~~~~}~}~~}|~~~||}|~~~~#~~~}~~}}~~~~~~}~~~~~~~}|{|||}~}|}|}|}|}|}}|}|}~} +~}~~~}~~~}}~}}~}~}~}~}|}|}|}|}|}|}|}|}|}|}} +|}}|||}}}|{|{|{||{|{{{|{zzyyyz{{|}|{||{z{{|}|}||}}}|}| }|~~~~~~~~}~~~~~~}}}~}}~~}}~~~}~~}~~} ~~~~~}}~~~}~~}~~~}}~~}~~}~}|}|}|} |}}||}||}}} ̺Фʨ͢ç溩۔➢ʿꋴƹX̪¿ϡM    + +>'KME!  '$&5F;ș͋p򰡪mQ,<\xͻ̸Y # !"  ! *!  >ڟڈo<ŰW}D !' *%# $!!  "!7gmȹ׶хכ⤋ʑڍ񶒪a揑̈PեЀɷLj䣌ȯ퍡:%   !!  ! ! ! !    !! !! ! !! ! ! ! !" !!""!!! ! ! ! ! !!"!!"###"!!! ! !""! !"! !" #""!!"!!!""#"##!!!"!"#$""!""##!##!!!"!"###"""#"""$#""#$#.$$###$$$#$%%%#$%#$$%%%#$$$%$$%%%$$$%&%%&%%&%&'&''7#&# 7v¾ɚЌˈܽ췫ϫٓԭ`苒͕ަ}G-)(*)('((()()()+*)9+*++)*+,+,-*++,,-,+-.-,-,-,,-.---../00011100113223443334343566567757656686887:9  !"$%()*)'%#"""#$'.5983-(%#$%'*,)(&%&%&'(+-..-*)+/68:91-+,,-.///..--,+,05;AA@:4214:BC@:2..-,,)R˽̿ë郐º¼瀎ؿ햶ɬ̶Įȿ􆚫ƺÀ˧ȳǰ̷Āʳʡ˭݁½ʹځǪߺNjȵ֜˼ހ뚈ɕĺļλ¶큀쫓ƃ֒ς櫆ӓۈ􁅋ּӶѸҹ֕þǫΓځտ񉌣ī٥ŽضĿζШѯĻӯ􄉁˽ـ˯џ܏įԝϸǕش󙢈ҥăոܕ邏܂품ٻº䴺ӃQʡȼ댲ڟ€섃ֽ󗨵ɲࡎ󙶀``[^caa__]N;G?K20/.O_E+46LogK?KHPYVPI0$",+HXX[[WL<>GC=IUZKfb19;'JK2?J:;/0-89@F2 -55" /1(?5FGCEQH>FBBX:9LUF@>9EQF==;K-EJLILY7ACEPL.G@48FZ<8AVQdSL+3SRRIB>>&.403GRN==\cIC;cfjXl@`>uQN_aa3ul235544543hn?rkighgh3f3fl^QeefeiijjijihjiaU_)T7ZD@5pBAOK@nǏa}@C\LhQ6f_CQVO`baaa_U[baaVbsŹwXu[kyfǚ^ouSz`\RU|hmQQNxyMP/>lQ\RrhfeqkqjwBxcސhwqqCGKEpikbXmYa``a```abaaa`bbaab``a`aba bca`bbcbbabcabbbcbabccbaccdcccbcbbbccdcdcbdc +dccdcbddbcbcbcdcbbcccbccbbabcbbaaabbaaba`aa``a```a_aa``b`aba`a`a_aa`aaab``aa`babbbaaabbbccbbcdcdddcddecededdedegfeeggffgfggiigfghhghjijhjijhijkjkkjkk656567666787878788789;>??@A?><<:9::;:;:;;;<;;;=??=AECAA@BEKPLF?>=>A@?>??AEIAAA???@?@?@@???@@?@ABAB +ACBCCCBCCDCDDDCDCCDD|`jmda]VQIJLELRNDGLMBCC???D@HKPJH@CEECO?~@@@A!BCDEEGHKKLKKJIIHHIIKQWZ[WQLKKLKLQS$RQPPQQQRQQRRTVVVTSTSU[^_^XSRTTUVWVUUTSTUW[_^]ZXVUU[aa`ZUSRQPPP˾`fhb]~|~|z{z|qqspxrȻfûihjgtrquuqpwqih^MMQTUcfhifd`fd]TMKOWciipi\]]PIz~rtw~jjryoi_^a`_\a__Z_XVPHpn?JQMFDIJCFPQRTVWVWVWVTQPKGNYNLRH?8435>FC<(681SI18>A<659E>?=ADCC??AB?>;:>><;9978976564cbdd2dadd22200/--77FR/153bZ,*+')080.225:73766874/77&*6;.022-433128540.0\[ZXUX3)+,,WX+,(VT((',$ !#$&+-'**-.)+)',+(&(&&($! $--E*,*'.:B:2)*494*'#'2100+'%+(%!""!#&))*,('$%%&%%*()&"#'701,%%"#"##! #%'$!!!   !,42'#%)/+(5$!011848=%*"&3 !"$"7+&)=;"9>8DTEJ-FG\NWZX`R5F(/1'BKN'+;;$,'%(02FLH70262-('%$$'"##(0$%#""&,*+%%,""# "%"""!))++(%"%')*-&$)+%*/ dSV'5=+#"6U/,Z92-WRKH,@43L5B;62=@47=?;<@S[2WC963UJJLT3DI2\SUQRROX-/21-TROV0WURJMWLMA2J8\Y;WX2]UKEM@@LC7CVPQTVRRPNBHMJ2USWYYFGIGGL=3/SORBK9AA6:>>08?:477BS9?,OXMEB806WJ11>?:CA17640/2*:F4M.A8*''7 -Q03ET2/:.4/GPH6$7OA?UNOTWDGNNRQNJJPOMTZVH1211234358F8<=63-1,LE6,4@:>353V9:6=<;243/4-V.1100/4998:=@965:=CC:5<8W#-1<8?F461.S+6.9NMMH[YSCK=E#>X^_\\`cedOPY[\]T_>KJ`TA0;6A58;%E7JRVTW\[[YXVH3A676H3!!<[Y>.1.9IOJ@! :OXZ\VK8H3)'(&KP<--78h0.=D8/(#-90''"'-5;97B#(*+41,+ ",:##-BCPZrywЇN¶VXZWT}{xzwvxwznnnnwpǹdcaa^iecba\X`[UVNADKQS`bba]YTXUPIEE|AFMPPTPFJLB?zw{ry}kmnr`ekne^ROQNJHLJKIOMPKFrl:BFEABFKFJSQRUUSPONMKIIHC<:=5360/0//-/75/))'@8#&+-.,)-62449=:956631223342311.00//...-/.Z-Z]]]-+,,*% &/7?%).0\U) '##&%$(**.0120*#$ #'"!!$(*'&*%%(*/ZZ\VRS($RU%!!NP"!! !!            + +   + ~   +  + $.#)     +  +      + +    +   + + + 2(- +/+(#""/"$# !),)&!##( )')%'&%*''$')('#%*#%#)(++-)$!%&! +&(*+''&%!# +())*!$$!!$(%' %%$)#&" !#"%)#! +()*+!#)(*)(&%(&%(*)"!  + +*($&""'/))+ " ,#*%,'%"8"&$")B-o1)*'&* '+'-'#"~!;:D*,9@?A-GFFC@@D@HQ@7;@FIFIHC*+,$$,.-+#;)YTZX:RRI+;+*./5E::a^BPOMI[VPEF.',5?IRTVWY^W=@FNOTNY@B?SK;&+.5)#/(=}|}|}|}|}|}|}|}|}}|}~}~}|}~|}|}#~~~|}}|||zz{{||}~~}}|{{||~}|{{{}}|}~~|} ~}~~~~~|~ ~}}~}~~}~~}}}|}}|~~|{|~~~}~~~~~~~}~~~~}}~~~~~}|}}~}~~|}|}|}|}|}|}~} ~}}~~~}~~~ }}~}}~~}~}~}~}~}~}|}|}|}|}|}|}|}||}}}||}}|}|}}|||}|{{{|{|{zyxyz{|}||}||{|}||{|}|}|}|||}}|}}~~~~~}~~~~~}}}~~}~~~~~~~}~~}}~~}~}}~~~}}}~~}~}~~~}|}|}~}|} ||}}|}|||}} Ȼ¾ԣɿ̆֊ʿķĦֺҦ︼۲»[ÿ׺ֿӣҪJ " 2#(Mg瞻M8? ( %$!)׮5)w1P֬L嬲T.!!47'"$!" !!!-! ! C4cC8(+-a0iԜ⎇|1jftSeOO9#"#"!*"! !! CnпɊٹŜۮУQ×段ܻ䷞СΰЀܮԗØԨޏ°Վ/!  !  ! !! ! !   !! ! "" ! !! ! !"!!! !"!  !##" !!!"! ! ! !"!" !"""#!"""!"!"!"##!"!"#"#"""#"#"#$"!"!"##"#""#""!"#"$###"#$%$%$##$$%#$##$#%$$$#$%#$$%%%$#%%$%&''%$%$%$$%$%'&%&%''&'%&%''&&> "$(˼´ſ혉Х͢ǪZƵ䂄βìÿ鬌?,(()('()()(()*))*))*))**+)*,++,,-++,..---.///0010/01012133233444334442444545445676775655675456778  !"$&()('%$"#$)2774.'$""$%'*+,*)('%%%&%%%&'(*,/-+)(*.6::60,*,+.-./,./--,++.3:@@?953126>CA<3.-,+,)J̻ûŸƴ󈘟·ʹơʿ̶îǿ큄ҙꏀ󄓫ʻʲϺ˿̿ùͺ˶Ľȯ÷̗޵ҼƾěÀӃȩ޶Աˌԁɦ¶ũʞǶɵöȅ׹ⱌϹЌ緘΢郁ϾǴ巻Ħ㗀̼꠾؄⃅Ǽݻۥŷٯב—ν򈏏𚝂ڑ߀Ƌ足ĞԧҘ岒䂑ڞº˦雂𚾘ᄑڧ͐óϛԂnþ壽ӷƾԁí̾送Ԉ愛˞׍YaZ^ba_]_^CUG@DE*.04_W.2@9MPXDEK?HWVV9#)YWY\ZYGZ16334MN0E=@KGd\FD/<;KDXcRYhY;4)S?7877787898899989898989:9 :9:999::9:::9:99;::;:;:;:;;::;;;::;;::;;<;<;:;:;<; +:;:;:;;:::;:<;:;<;:;%:;;:;;;::;;;::;;:;;;:;:;:::;:9:;::;:9: ;:::9:::9:9:99:9:999:98989878989787888778778788778 77877887888787878787787878787889898 988977887898yv'f987898I78qO_ehh9b\R[ek7]-c789m9:]>3EV4ADelu`J_JUUHPbVÆkLmJT<]54554555454334jgUd>Shi\ljfhikq;hhoojY~O`<4::B-jQ,M7J0(C^X3;K52t`mrWckZ?dM<<?@BCBABDGDA?>=>A@?@CA>>>?@ACEHKLBDB@?@?A@@A@ A@AAABAA@ABABCBCDEDEFEEDDDCDFRXrslfWFPKMCBEKNFFKJ@GD??DC@?A@9799?=3CGIUQ80122?95533484345566657896688:;:<9<<>=<;9<;7:;OFEDM*,SD<@EBBCBDHHDELMGFKFBBGIXjQ_|tToFbaababbcbabbcbbabcba_aaabbbaa`cabb +cdcdddeeefgfggghhihhjjjkjklllmmmlo/nnppqqrsprsttrssrtutvwwvwvvwwxxwwzzzyzzz||}}>>?@?ACBCDDFGJKLJKJHHHGGHIOVYZXRLJJKKJMPRRQPPPNNOPPQQPQRTTUUTSSTU[_`\WTSSTTTVVTTSSTTSSSVY]]^[WVVUW_a`\TRRQPPPùõcbcb}z|{xzysstȿlcjhlminrqqogb]^X]SWeafokfTLIGI|ifp}S]`ebc_]SSNKtuvvosnbZ[WYYepdl^QOG8egcd;PTSEBFFE@>@PPQRUTUTSUUSOLIJQNMVLL?;>EHFB7550/++5>@<72,7@EA@BCB>=<@@?;;<=;:995667877747524520b_ae22aa_/.+>3?M.033b],),,&020-240685883664068-097*662352023<66/W^Z.\YVKV'(+.)MR#M+)(&&%##&%&'),/,*-/2+&(--+*'(##&" *-'&(.489:(',431,%((970),*"")'#"")+"!%*+)&%!%-)-" #&/.-,(%#  "   %%#  #$ &7.62+30+)!-!%/=1-1>42.261%*)(# #+(/0"#7#9P/F^HhUM<@MYWV]^OFMF8:OG( 5?1_iH,J<\WSeU8D1+%$#+'0##! !#(5+&"#;LS0=1:50+0.#I:%("!#'+(*%$! #%*('' "'!#%$ $#'"%'*&'&+*(*),&(-.**0%L52I2>%$%SR;H64/.SLS/"*CV\R\D.895TZr:74HRR`1Z:62UVH?J7`EM60TRSTT[-.1.UXTP[1NP[QKVKS<0=4T^NRPYWRPI?G"G^G\SW]R?CCMGG:>1_U^01:C@<:?=6@@8:HD;?P)RSKGDA;810(3=@95;>36+:3[YM5A=Q#%&%%39=M.YIP02R:75MMY@18HDTNSdULLGYRRPKH^IRATTO>9L/?881>923212443#I@>:975/(++C043B!39(7>R62?RB97A4=6IW031-/18::9@BF@;5098MCQ98/CDW=3H18EJGO`661LPONSH,I`FE=4VZ400(@=)JApW=TqxX\nA@'BCLXb\AcG;4/6D+G.9:PS0N?H*2AQ2[,N1#D2HW8LD=UX-hY(<<;FAD.DV7/OFRNLU69n36L<,81,TJB@G2#-MH><-SRRZ6HMLJKLKLNOrQQ=LRNSTPOaG42.,8653WROW^ia.VX[BXL-;;<04;#$PZI;O78#50BHTOUZZXWZX>S:48-GC *&?FK4.. .GKL. LTW[ZYDM0-$#%AI)5'0?EfX?:$10>7O]GI[J$-/9(;@*"%=5)30)148X<0  ,)A>3AE??1,,/IB876)(8+*"#/78:99$)+11.,(1:#'5>JEC2/962-) ."&20;(+59OQ:'ILP.'1%@+)#,;N;%&+C,0>&3;7#0 *qes56^fh`rtngaN9=9;303792387071,*-.*(**%$')/0*/0`H+^xL0DHEIKWjcU`^UZ<+(*,8934:425734657997=GMIHKD<<>>M]CTjfXUsd;ɾU{xyvvwwoppýĻg\b_^]WY][[VSNKQNWOSb\]b\VEAAAyBzwe\dkw~DIKLGJHHBCA@wy}y|mll|i`hf[TRLNJT[QYKB@>4gjkf7HLI?@CDFBAESRRRUPROLLLKFC=9:73603+*/2244**'$%! %+-..)",3:88<:966453433452311..-.//00,00//.,+WW[_-+Y\W'!**6>%'-0\X( "$$"''#&*),/-0/+$$  +)!,& ')()(-')*U][.^ZZPO"$GD>'# !'#"   +         + +  +   "$      + +" "!%# %3"    +  +   +   +   + +  +     +    '$" 1&(($)&22),  47A!&'&.,&*!".#&$&&&+'+($+#$*&")!(('&(*%#'+/%('+*(&#)/'',& $ -*.!"  ('# +)%#!% ''!!+ + *&)4*%%$/*)(% /#)&&% + +! +)* !#'%!#!&/"#$"&$ 1!# /2#&&! 97P6$/9<248".&-1:5"0  )* '('! *)*%98 ?.*.+5/2++" &!!'&; $ 790, t=ACK(9;::<@BCCCN49:ELFKMFCK.!$*+)25>=(STV@RE&3202B<6A=iIQNJ\ZSGVRT#?TSPZ\V\@6?GQV3c@=;52115;AA=5.,+**(@탊˴󅑘ͺރӶŴ³ŭ󂗡܀µ°Ľ򅕝ꢦփ􌜞̶ƺ놛ʷǼ¼տIJڿ삐낃ѵ钗Ζ섿׀˻Ѧ𓓏Ƽ眘╜ҽȾǺ󇋓슣փ㿂駀ʽݙɗèܒ㕦ƽǶ¶ܴ㢂ӛɽƲޕØ㠅ɩ䔼òϋƀ╄̝ʋƺǣʃЉɛՃ۪Ё±糉¥я֓Б򓸍̢󻿎մƏ荕䓯ż8еȺ摔ˁVf`YXd\\]WuLaM?C8,*'LMAD9KKDLIKNNC>FPHA65867QH<9NPfaUOS0]NFE;:=7/42CIHH/CCM^]C2MPU80-7`XPLG_DHZe8989988898899989:99::;:::9:99::9:99;:9:;;:;;:::;::;;;:;<;;;:;:;<;<;<<;;;<;<;<;;<;<;;<<;<;<<<;;<<<;;<;;;<;<<;<;<<<;;;<;<<<;;<<;;<;<;:;;;:;<;;;:;:;;:9:;:9:9:9:989::889 89888988899898788878987878987898988898989888989 89997`pC@Xtpjf[Q\GxB>EkIeQ`rKglkjRi<;.*@-7E)=PJAAXCNrG]zoY]9U_bbcaqdbfFc;aIyuzrɣhvr\`ykiisqVkiastUHxbDsA/GG?<>DLME?>>>?>=>??@?>=>>>??@?CGGHGEFC@???@?@A?@ AA@@@ABBAAABABCBCDCDDCDEDDEDEEFEDEEEDIqqqlgM>/ 1DCFC?AINGJKB=@G=54569770+8DA>0wg:a{Q;OOQQJLblhgd`_8>213==bnunl_X[ltfou~_`gppxx[?:I|p}EB943f+6>D9BGDSQ?0220.214342931335545567967978;==<=;=>>=:><8:9KB>COWUP@>>???@@A@AABCCCDFGILLKJIIHGHLSWZYTNKJJJKLNQQRQON!OOPQOPORTTTSSRRSV[^][USRRTTUUVUTSRSTTX[]]\WVUSV\_a]WRQQOOPhǾX]_b_y~{tuvuyysvwijo_`b_`eomstmmmjd\WVemkeZSQLCCFU{sTT^X`c`]]]VPLH~tosuha[Q`VWZ^XUTemSNDDBGWTPK?FCAA??d:HPONMPQSURNOLIGHFIPMMGDCDB?98820*,)2:<<6889AA?>=>A===9:<>=99876589777673146563dbc02b^a.,(A2>H*-221[,++,&7(.-,2437>A;5455300<1,*/*330,1420172/-W]WZ[TOO_KK,/'%%QPI%%#$#!(+'(*'OSR*.26-*20-,)'$!$&*,,'*/31278>>6/,*)*(#/.-(%!"1'#!"./+%',/.)--1693($(''%#&0,.)%$"! "!"  #%#!! "!"%#$#(&675)&)2,'*-/$%*5224:67-+0:,"'3$(&,1+2.!'#/8X>JHP32;8KL!93S3--3OQI,+4/2!+*%3(#!*%($ -C=7H/0N9K/35,04#&"$&)/%&"!!%()(*))$'"$##%& #$$ %&#!#,(,-)(*.)+Z0WDM)AG3%k,MH14/UMJP4DW:S=E8AFRGP\^^el:?AINPE>9000C:=98=>9;;7D37UMHGD>=30LN768476<96395UR45FR6"#FHGF=G-G&IO+JUMMF6-?PL()50QWV]\MPXNOOLJMOO@>;UHW2.-027314794-+10,<@0(,2,4@FDIN_257840`?<:I:24404382.0b47`]eZC49K6??O>>C:Z@V6XaAEL>BO7S?H66;7>SSM@&?H<.QIBJ47O7$9@(=Wf,:5AHHJH9@AFK5,[MQN#Da6@3-880*N7OAC&#',@04WUUUD>KKHKNJLOPjTMAGEJNPOPM9;0;Y45451W:JP36[WXWMDc2A:?B?256AHLIC=S1MCBag[YS[afl`&()',4`\d`afZIGRW;_mGDQQ?A@9@;G3(-+:FVROR\UXXTyQ]@11 *F*%#4(7CD-+&- "03$+3F=G.! "*$G=7@E=@35|'0B[;5;916*-"'-/-769:<0(.4.%1,$$75.-#!&$! */-0*/8OP<+HLL1 $2bZPMIcN\󉊉DF;썌ՕhޢٹَB,9Rô#D¾楁瞫ٮ䬛߸ـڑi $"EX=́4AĿȇ3g3]Y4@e&$8E&4*.!&%,$U)%G]'7o:u 83,6>dZU$%4+0'+',A#n"(+*7/*2O8($#(+W샶\N^*JcrnjcG5('6451/16<587.))/'"#!"%'($!+76/%^PHnP6EGHKFG[c^`^ZY46,*+57\lrllbA]_jjZeozwWZaimuu|k?8J<1($' &(-&C;+###$"&%'&'%)&(+*q+*+-///0//256677875624222.;4129<>=4124235379:9@HQKMLE??=GVCdYh`ec<Ȉބ(0ȿOQSVWx|ypqqpuuorsdc̿nUVVQQV\Y\ZUTUXVRPR`g`VJCBB;;@}N|~vn~vyzuGDJBIJGFFIEBA?sv{qln{{hZVSIVKKNSJFESXC@:<;?LIGE=EB??:;h?LQPPNQOOPKHGD?84/-1/1-,.120-,*##"$"'-.,-+,586665755534525575210//-01///./.,,.-.-]ZY*+YYX'!,,6="%+.-T'"#% &)&&+/.,-.-)%"%#'"+&!%,+'&*&)+V]YZ^XSPX?: "CHC  IQM#!$&" $              !      +     % '+  + +  + +   +      + +      +   +       ') '!%7+'($#'%0)  !'%3<<9h𘰙PSFB(1+1vlsE" $! 1H,$$'!,(K-3))* "8!FkD4<̬ރg-C`1;$TvzIIJ,.! !"'%"#.1(3sӗūѩȢטÜPŔJLKÙwǀ֫٥{HSϚࢂ~E! , ""!!! !!"! !" !""! !  !! !!!"!! !" !! !"##"! !! !""!"#"!!""!!!"#"##"!!"""!"!!"##""#""!!""#!"#"#!!!#"##"#!"""!#""!"!#"#"##$#$#"#%$#"""#%#"#"!"$###$#""#4$##"""#$#"##$#$%%#$$$#$#$%$$%%#%#$#$%#$%$$%%$%&'%%$$% '&&&''&'&'''&  "$ + + 9̰ƶöþԲźb㲩õ˂埊S>,()())()**+*5++,+,++,+,-,--,,,.--..--.--..//110/.0/01112322432121132343455545a87546664667 !#$&'&'&$#"!""#',1450)%#""##')++)(&%$$%&%$%%&)))*+,('').7:83.,++-.//.-,**+-26=@=:632138?A=7/,**)*oʿ¹˷˺생ǿŵк򐠦Ƭ¼ϧ烒±½၌ɷ惍ֱɶӾľĺ򚺾ֹƨٺܨïĪӴé߇ǎ햍ļꁃ􁆆Ù˻õ׭˛ά߁ԥЇȼӪܵӆȽʑՎ԰򀃇ءɿصӁі򰝘ǫһ̃悒ϓÅၐĉ짇ϡӈǂĽܧ樒Ŏ곛̶́5ğIJʻޔҴHac^Ye[QSNU_C[ZGC4+()NN33;JCAV?FC105NUF$0.7]YVVX`OW55,245696:BOcpkBS839@2FaZGfX8+/?CPTR\XOFXH8#,(7FD"FUO?L1(%8-%B0.JHFEOAB>@\84>bV@HIAC9>1GW=DJLJGNBBII>:B0645?967BP\a`0)NZYE?;;;>02:GEFO.I@J_\=7OT_?9FC_cQGF^U]QY888988898 9998999::9:9:9:;:9:;::;:;:::;;;::;<;<;<;<;;:<<<;;;<;<<<=<<;<<;;;<;;<;;=<<;<;<;<==<<<;< ;<<<=<<==<<;;<;<;<;;<;<;;;<; :;<;;;:;;;<;:::;:;:;:9:99:9:9:8999::999::9898899898987898988897898 989998998989:98989898999oX#P988:9998988898H9;Zp_mo}QIBBhhb89O6`XV?MeKK>=<==>>=>?*>>??A@BDECA@A@?@@?@?@@AA@@@AAABABAABBABBBABABBCCDDCCCBCCDEEDDDEDEDEEDEFFEEEpolheZ;OG4IQJKIHKJKHMJKGA;60&(:B?9NBiIXQPIMHTfofimeeD7019BrcpmeeYZaypmq{Eucfpqtz|>rwFA;71+8@F=?>99;H?|>???@?ABAABBCCCDFHHKJJHIHHHJOUXZVPKKJKJLNNPRQONMMLMNNOPRSTSTRQRSV[^]YURRQSSTRQRSRSVZ\\ZXUUSTZ_`]XSQPPNP[\_~uyuvuyurytgmkllĽqk¶XVWY^iklvssuqja[WTebaVXR|swz{~P[^]b_ZSYRR{vor}yvkl_\YUQY\`jnc[][VNOOTNA@AADFFD97fGMMLNOPQOLJGEFGFLLKJNK@<:><:972+((,8==<@>@><=<:8:8997888659;:8685479673dbb/0]^_[,)%::GM.101Z-,.-+4:&*-/2049655444311;3,.;7:72765212;2+UZ.ZZYWX/-LIJ)*+(SL%#! &71)+*'URR.,-.,*-+*+)()$#!'*)%$(.0,023:7-"$&(&"!00-& (*#! "#!%-7:9=;314460)# ')'%# -+,)"$#%## #%&#!$&$#%"! ("""%-.)*,'*-,(08=.:.)*-'2($$,*%(39:<;81,,5@,F26 #1.06&&111-)=$;#)$*7VE?@EN{>XG=Kq99H]aJ;9IHRNA'&JIHA9I=8/SO-P2[XBRVXVOMTONEB>5<=:1;><:87;=:<17<9;71[VS7:I\D%D<=@;4(N5O7WC/HKJE02H'A0P/HXZ]^_GVVVB:MLV]BITURGVNGDWHWTI6010/029:>8?<830/-LLKEBBC*Y<=;R2/)E5OaM5250<@:/IMSJLT0:CJ-! %68GS2$,+@9N.1:65C08?@;@_c34/.1[@DHW39X::;9CG,D46C?a6=U]]DO.>/79PGJTHG)!7D=QV@:1.P91+HDT/Om:GKUWRMNOHJNQOONNPdONFBEDKIJDCY474/36412G2DS_I([XLD615392I@63539?FEK=Q/DbcY[RX\EahlaO"##/ifa\SW__WQUgjNP8E@>J>EBU/$#K59PTQO]TQRN^sIZP9.7<'#-437L64)0A; $LQSTX]JO1+##*.2.18HbrjXR7[L(.6FGIRO2$+;56BB4F- )+%#CBB=G;>;;s5/9XO8=;/3')/>&,6875:1,..& &" +7EMK!/=@.)"!"*'/,*40,7QP70JPU5":?aeOIHeasߌB[=˔ߐqOzսꅁ£ϕ٣N#/@抴项0U߁hėḇËŃټ -;Z)3׀]'.D!-@)(#-(!"&1!`5  +Tb'DD+j;B#&ӣ7Fxee݊h7'6-').$&<&&.$4 $")w$. "*+T#AЎqt?;W~oidY6A8*=A<:77;==:<63.)%!!(//+/976(%*9-=RpDOJIFHDP`g``eb`?B/))09hammgf]_csdbivBm_cnosw讇>=-(&% *)/)=C<@?1#!$$%')(+')+,-,+..00/0136657874585232/.72.5;601/11138:`USkǜƾQRV|svpqpurpwobhikijhϾPMMORZYW]YY]\WSQPObZUDEBnosy}xsxnonnosw>GEEHEC?HCD|rpminyunmt_`SRKJHPST[`SILKIC@AFF>?A>?>9724lHKKMQPOONJF@;83/0..-11,./22.*%"'-364..4655547475333224021000100121../-+.///-YXW()TXVN!+5&/'4;,$5"(!-(! !##$ ")925BEA=<>89=BADDDBJ6@@;C5>;E3'}|}|}|}|}|}|}~}|}}}~|}}|} ~~}|}}}|}~{}~}~||~~~}~}~~~}}}~~}}}|}}}~~~}|}~~~{|~~} ~}~~}~~~~}~~~,~}|||~}}~~~~~}{}}}~~||~}~~~|~~~~~~~ }|}~~~}}}~~~~~~~|{|{{{|}}|}~}|||}|}|}|}|} +~}~~~}}~~~}}~}~}}}~}~}~~~}~~~}~}|}|||}}|}|}|}|}||}|}}|||}|}|}|}|}}|}|}}}|}|{z{z{|||zzyyyxxyyz{{zz{|}|}|{|{{|}|||}|}|}}||}}}|||}|}}~~~~~}~~~~~~~~}}}~}}}~~}}}~~~}~}~~}~~}~}}~}~~}~}~~~}~}~}|}|} ٶįʱĦطʰĸԞýĽԛa̶˸Ђ񂀀Ȱ̡٘&  +  Y&A &;|<)*'# !#[^nE8"?I*.24)5AD*1'P=,,' # KȈS( v.)(3+`D$%# #"(+8!иȽתb1%"#N;?XZ[.&""!!"""!"+z5"ȴ촃߃ᆌήҮB7K+EɥÑDń˿ㅒӋۑߺC+ !! !!! !!! ! ! ! ! !! !!""! !! ! !! ! !!"!"!"!!""#!"!""#"#"!!!"!!!"##"##!"""!"#"""##" #$#!"#$#"#$$"#" +!"#""##"#"#""##""#"#$"""#""#%%###""#$%%%#"#$$##$##%%$"#$$#$%$$$#$%$$%&&$$%$$$%$%&&%%&&%%&&&%&'&!'( ,϶տՈɾû۶÷ǝYιʺ͹խ񽟯bD,*)* )***()**)***+***++,-,-,-..-./.-./...0#/0/./11222123232322443224235543464454456665567656!"$%($##""!""%*0452,&#"!##$&(**(&&$$$%$$$%%&(*)''(*/5872-++,...//.---,++,.04:?;9511126;?=80+))(*^ѽÿ̷ſɾοɱĀȾϽ󅗖λºˠĽǀŸ𘛭ˤҲ߈Ќ꩗򕆩԰ьנǸʙ͟녺Ӥվؾܦׅ킴빆⤦ҿڷʳȝļּߞĬ۝Χ怨賊ѷԫ́ԭʌѾ𝳩ʑ̴ތµك㢇džڕ׳܀ꀇݬΓ򾩼Є﬉ïϮҚϵ켩慵߀ꂑKĢ˳Ԩñͯ؝áɘAYcabdR?=OJ~XhHJ:.$)@WE4/H<U_JHL7AGA?H.EBVBDGM=CL;1:M875,*011:\`\]1(&XZD?>95810ALJEM*D:LZ[09RVaL.0OU\OFHZLWPV999889 ::9:::;:::99:;:;:;:;:;<;<<;;;<<<;<;<<<;<;<=<<=<==<<=<<=<<=<=<=<===<=<=<=<=<=<<=<;<==<<;<=<;<;<;;<;;;<<<;<<;;:;;<;::;:::;;:;<;;:::;;;::;::;;:9:99:9:999:9#8899:989::88989898898889888988988898989898898989899:98999:9::9:999:9:9:9EI5EA\H=oJ.Od65667wk/L9oS465lS]zLFanPy[kDUwjd`q:\hh[]gfg^PdQlNOLN4B;1;<>>toTY6V;YNzpce`rO:TEaeddeeddkZDNbGaaZxdM_tS~MNlYji}`|S1F{ͬhPjgtfTYVABpZCU뎑fTKKMio?ABSCpobrkxbgpmmenogAPg~TSUbcb cdcbcbcdddcccddcccbdcdddedddeeded cddcfdededcdfddcedeededdfdefedeedfedfeddefe+ffefeeededeefeeggfeefeegffeddeffeeedcdeeddcdcededcdcdcccbcb cabacccbbbabacbcdcbc6dcdcdcddcdedcdcddedeefeededeffefegeffghghhggghhhihihjgi jj55j5k6656565667678989899:9:;:;<;;;<<>?CKQRGCBEA?>=>=>=>? >???>@@ABA@A@AA@ABCBCBBCBCCCBCCCDCBCDCDDED EDEEDDEEDEEEFEFEFHQbphb^RFJJSSSOOOPOKEKIB@?==:31BGJFADFDFFA]CU7WT~NlPQPOHK_fdjkigrHf69?=egfgj_[Ynvv~z||hglrru~{t~FA9740CBG@DFBNQN4430/.012117794435 85588:;;;<7=;>>>?78:E;8DBKFHD=@CCAEEFECbSPbkMEIKoq^c[JrjtJbabc(bcdcdeddbcbcbcbbccddccbddfdeeedffefgfegfh.ihikijjkklmkmonmnlopoonppoppprsrtuvtvuvtuwvvwvxywxyzzy{zz|}=={>?}>?@@@AB CCDDGIJJJHGHGHMSXYWRLJJIKJLNOQPPOMLLMNORTSSRSWZ\]XSRPPQSSTTSQPQRQRUX[\\YVTSTX\_]XSQPNNSwƿ{olpsnrulgʿȶST`ehgpqpqrmgc]UUTYROKI~|xyz|xzww{wx{QTX_[_WSNHyw|}rtmg\aXVWTTXXTa[`SdhUSPC@@BBDHGEDC25DKJKJKKIGDCCGHIMMGJB8:;8:<;<86/))(4:9:>;76<@?@>@=<<:7:9987798578:<9:;886534bbbd01]^],.,&E8HLQ0130.,,.)#E((,/-.1-2425431022/5:7=:7415300535.-1[YUT+.WJEEIJJNO&%!(2:403/,.YVSP**(*'*+&%((#!""#!"&,+,-,..,* "!%*%%,-+$"#$"!!""!#$' &%,2##%)-)("! &%%" '(*+&'&'%'%# !$' #&!%$$$!!'&$&$%&!"*(3:,#-/:318/,21)$"$" "#"/8:2)+2(:9-,,#+(7A!1,03"#"*)/6:7#?8/1)>LHvb}xJEDrH^\XTLL:SE]C39;4!/-\5.$''\'5A)7>6"#%$'(&$!$+$&!'&) 6MKV+=WKWPEHP8R25$"'()0&'&'()**'(')&'$$(&"" !$"(')%*(*)/1971KD'+W/06P`2Y0800K8@5;.(-1845630/UOH\IQ2:H3..24430./VTPHEKOMNZPQXR=*V=HW28DQSNTJOSLDFLQSWYZYLSOLc?>:=DE<=?BB89:@<17686850>R,EMFEGRH92/.5:3?@7<@0/33CCI48VF)F:5=2L=ODDCKLHU.SNE'70?8DL*VQVT\W=`U_E1UDQGOGJREOH7JGN9A9 # >78E;9*7>9311-LDBHJFM?74:7(-*#&# #-;!5N@>DTP=4FLCE>//1139J3EPYOe=9/3320ULM@R@OC58=3E70FKANZbkSJJ2HZ[5:9@IMLJLMNLKJKH4=(%3[T]A8C=.`A;K;=A-*F"6C;71(DHM-/=TUUC.2<<3U=;5LYRa_UQW9VUNKLSNMMPSURTV\\]HECDFD2K*Bdj0-55333Q5DT<7AFZOF:P2.5DN^F823458;GRVBEQf][VX_AIYSccTKA$-5f^XTX^c`V]lY[H:;BJFJ?P3-1/JXXY\M>@T\ZrG?''C6$ 8+/??:20&>*6SSU^a[>,2###%2+)72E]jq^X8406,0LdU<48LYE>?'15/-/"-+@.039,,2#!/!E=>:5$$&%%'(''(')'*+,,--.-/--.12211278425322.-,4/+34;665/0001359;:XLN_eLAA?_YMWO>ilcuƿ~ymioojlnecùŽĴKKUXYUYZWY[WSSNILOIB@>>}|zwrssu{}twtttoxllymqr=?@GBGBC?;stxprttkk`\QSIHKKKOOKTLPDOO@BB==;=<;<866704AIHLLONJID=:<<652./'%).-01/,'#"(+.1.--2667453523220/0//0/02200023/020//-++WXWU)*TXR%$//;CF)*-+)$!7 #'%&'%,-*+*'%#!#)&+($#(0/,*-,1-+/WYSP'(MIHDE@F!$%+(% ,&!''% "$#")$%(%("+ &'%+#%'$ "%'(*+,+$'*$* +!)))% %%$ ! $ ! $# (%%---+$#!%%#%"!#'*)+,3'.#. '$'""'#!"     + +  ##'$-4-8!'&(!*+! *&')/6=HP:21)1:$+)-1432534410/-  # $ 0+1!&$<&&0',,.# $''* % %%336=:?BFDJLGGI>@??@>-@#2;40%1;*'*BWGC7I*%+9CN5);K=/BTbYWQU]ANWMXS@.'SQRRRSXXRbuXYB98?D>C7E# !}|}|}|}|}|}~}~}|}|}||{||~~~~~~~}|||}|~}}}~~}|}~}}~~||}~~~}}~}~~}~ ~~{||}}}~~|~|~~}}}~}}}~~ ~~~}~}~~}~}|{ +}}||~~}~~ }~~|||}~~ ~~~}}~ ~}~~|||{z{}ā}~~}||}|}|}|}~~}}~~}~}~~}~}~}~}|}}|||}|}|}|}|}|}}||}|} |||}|||}}|{z{z{{|{{|}}|{yyyzzyyyz{{zz{|}||}||}|||{{z{|}|}||}}|}|||}|}}~~ +~~}~  ~~~~}~~}~~}~~~} ~~~~}~~}}~~~}~}|}}~~~~}|}~}|}|} ۔ѠڹŎĹ¿ϥʸ¼Ľ¹žȡɻZհʿҾՐ䂯(    +&,*?\]{ԣQ4@@/QsapΐTc\guؒ*+N\,%$$2(q\($ + ,%$EѲc"#d> ?Wv9% #!" %r˨²+"89Q#&a%.!"!*25"(߱Ǣ̟ښ屫_p$$e˭귅ۙҌْݰ֥摋ωֵ㘌. "!!! "!!"! !!"!! ! !""! "! !"!"" ! "!!!"!! !"!""!!!" "##""##"""#!"!!!""!"""#"""!!"#$###!""#"###""#"$"#"#"#""!#""##"##"""##$##"#"#$%#%#""$%$#$$%%%###%$$&&$#$#$ &'%$%%$$%%%&%'''%$&&&'%'&%%%&'&%%&&&''`1ʼº̫Ⱦܳ䁇Ƽ˚剎׺໷ν̽ƾČށàv%,)**))**+))+)**)++)***,+++*++*++-,,+,,++,--,-,-.//././/./.../0///21235432322232244333443456555656 ""$%$##"!!"!!!#',242-(" #$$&)*))'%$#$%%%&*++*''(()/5752,++-./../..-.-,+--.27;973011039=>;1+))()̾ǵހ􋋓ٴùɽóΣҀţ킐Ӻ󄗛ưƿĿשݶõ菨Ȫۊѻހ󈀩ӗ›ףŮǾŒƷƷ٭Ƣűɼļ²节姨󉎭ފʛ׽•ܮꉄͷ÷݈志킋ϕՠ㻭ɞߊհ콍õЀʷƲ򔶉Ƕџݫကߋ̮숚ý˕Λ媙Ã˦سԟǸ斬႞˳ʁS̠ܲ辸ک™NJ3S__``^n4/3063.C@I^lqqJ]A/F>(AbbAbW5 8;?HXOYWVD@<,$,:GF>6+DL^IA9?3")$'%`1W]1/*LQD?B@@500DJKKO/@3KW_-?YXab? OVTTMNWSIW\889:9:999:999::;;:99: +9;:;:;;:;:;::<;<;<;<;<;<<;<;<;=<;<=<<=<==< =<=<<<=<=<=<=><=<=<==<>==>==>=<=>=<<>=>=<<<=<===>=<=<=<==<===<<<==<=<=<=<=<=<=<=<;<<==<;;<<<;<<;:;<;::;:::;;:;:;:;;:;:;:;:9:99:9899:::9:::989:8999898:9:9:9:9::999:9::99::;:9:9::9:99::9::~dY99:9{:9:::998999:;}c]{ʸvq@qPw~͉^fctUFs;5DK2FHs=Bn`S5yU[0W66778w^)gLJP84656566656FRWO`uconr\OU`a444g4\hM@igjZ4@G//]!?lW^N_Mr]sFLk9o`?SEVfeededj-)RemyH^LkmS~iS{wXqkZVkWdV~Cuщ6zXdim2@BEFC@@???===>=> ?>@@@???>?@A @@@AAABAA@ABCBCBCCCBBCCDCCCDCCDDCDCDEDEEEDEFFGEFFFJKip^adTMHJTQQPVWXUPKNIA:<9F^WA`;fQOVPNIQaajgnibvp65:@r]jiib][k@?tuzgopsyELy||E@;841FAFCF GGT,+:0347//13338>?454656578787;=;<==<>>><8:@BC@AEIGX]nXVfFCbOvRSwvXuacj>dcbdddfedcdecccddedcddfdeecdeffedfefgfggfghhhiijjjkkkjkklklmmnmnnppoqpq +rsruvuuvuuv uvxvvxwyyz!|z{{=>>?>??>??A@?@ABBBACDEGHIIIHG8HHGGKQVYYTNJJKKLKLNQQPONMMLLMNNMNNNORSSRQRSRRVY[YWRQPQQRSQPPQQRRQRSWYZ[XVUSSU[^^ZTPOONR{wqmorqljkƿʾS_]a\Zcgkqnnjie^[SUSPttorrqw|zquy~}zwmeujko}NSUXURPMNMr|yqmngaf`o``bVOPUSVUdd]QCCCBCHLGFHLJCI=AHJJHFEACFFFDFICGD?77889>76231..'188?;:886?@@?@>>=<=<<899<887;86667;:98654443cbc221/_.-/*$"@BGH)/110-,.+)% GGK--.214113410/./0/017==316433<730-XSUX*,.WKHHDIFI'&!(/7>90/.-.YVUQR++-//,(*&&$*4">"&*,()&(*)+$#"'("")'%"!!!##')$"!$($(+0/E2-*#"%!$ ""!&'&&$%#%&$"$*(""%&"%" !# 5 $$#'(2)!&&,5T;<18>4+$+,"+##9*'$%+-0$,*-)! ""&C"+%;'(-/2($")$0-7;./75874Rx|BB\bxcOPMU6L,%<:C0A]D$A:96&\8d8;?D=B@;SR)A;5LV6!)8.PVZXBG`_IFFVTYWSD=?)>MZ;/.A-,20@NZDn=;J65481`9B/FP@a49Jai/<6BOBNBJ8O;53=+=ED>@HLHILJKKJHLJNN@N4^N.8H)[9I29/?/)"=JWJ$?+50B:SEi-@?FJN6QaG8N><2H1W/bJB,[08C8.FeLKJI&5-/]DHOJKPQRNLPSNPQT^obPI?EIE@GPPNFHA\K65@bH@C29<,577+%53'3:14,"&%)#*!$="?D!-:-(*'' .6304*!7FQ(8UU[V$LWVVPR^_a:YWٽ菏۪.9fc=M}s^``NG?AJGEBEFFDD@E>7/069;<>>>:874743416B5%CHq{KKQJHCKX[caie]re.,1:h[hfmdbal};;ioxjqtt}ԗIQ;+)++*6,00@GC>&"'')%''(('(*+*+*++,*,.+**-..///01453231///.-8.,08;6500$0/10259:R[}l]Qc9@S@`;HeeOoGdpɏՄH]{vtmkkkjfceMVTVOMPSVYXWRRQONJGDBqrkmmknruxvnstyyvoe_eVSP]h:=>B?>>>AAqfspkhg_WYP[QRXLFIOIJBNKJD=>=88>>:77:74:3;BFIJIIEBCCDB;7//*'#')(*/,*$!#'10//-,356322411321/--0.004211013211///-+,VXX+**)T(&%,7>?")*+*$"!:@   !'$ "$&*USTOK" +  '    6$$!&   #  +$  + .*- (+" 0 +! + + + + +      +         +  +  +   +   +  + +/%'/!)& ;/$!!# %(*%+"'*' !-+#%%"&')&, ##((,,'" "&)-++,%!$-$**(&'" " +  &'"#/&"%&',13"#$%(++,%.0&%$,)/-* #"")!$ $  !(&$/2&?""(/$)-!5"*7<%$1,5,1#1#"!*2.*+173353230-/-.5*(#% '4)#)#4%C,-.15&**!#!(," (-$%(.$"%I3;=:;>AC<:=B?@CIN\OB@9@CA<8)+#($D?=&0?SSI(&;5A.;aUSPNYVBMBNNVV< >DDURSElRgPR5DAHBG8L' "}|||}|}}|}|}|}|}~}}~~~}|}}}}}{|~~~~~~}~~~}||~}}|||} |}}}|~~}}~}~~~|}||~}~}|}~ }}~}}}~}}}~~|||{|}~ |}}{}~}~}$~~~~~~~}~~~~~~~~}}}~}}~~}|{}}|}}~~~~~~~}~}~~}~} ~~~~~~}|||{}ՀÀ}~~|}|}|}||}|}~}~~} ~~}~~}}~򁊂~}~}~}~}~~}~}~}|}|}|}|}|}|}|}||}}|}|}|}|}|{z{z{|{z{|}|}|{|}|}~~~~~}~ ~~~~~~~}~}}}~~}~~~~~}}~~} +~~}~~~}~}}|}~}|}| ̹Ƕ兡Ι׼ł»ƽ±ʶʼŹǽɾ˯Uಪ׿˻ӡǢ  +   '(!m!(B횂疚BK'#" )&+ $!!TAfL(UDI2'"&$$ $!%Eׄ<$&"%IuRnЂxBJ!#"""!5_,$1򢏹ƝՖÇדϪꇯ삎˦ͤ:,&'Nȳ頛ǹ:̷Š޴凝ӠĹ䙡Ȍd- !!! !""! ! !"!$ !"!!!""!!"""!! !"!!"!!"""! !!!"""!"! !"3!"""!!"""!!"###"#$#""#"#"#""##!"!#"""#""$###"!"##"""#"##"###"#""!"#$##"#"#$# "#$%$$##$""#$ #"#$###$%&%#"#$%$##$%%$$%&$$$%%$%$%$$$%$% &&&'&&&%$%%'&%&''&&&&' ȷĶźȘƠ¼փՁùɘ`І켹ӹǿ߂ź౉𖔈[)+)***)* +*+*+*)*++,*+,,++,-+../0.-./0...//.///01000221112223244332334434!3434434455656566765677776(!"$$$##!"! ! !%(.12/)$!""!"%''()(('%$ %$%')+*)'&')*06850,++---///..-.-,-058973/../15:<:3,)('Tɺ􂉉Մķ׽»ȸοƻͿɿ񗟣ý¬˽ƿ¤źƽ舟ؐꆍ܀ߚӸ󆷬μͥ쐇Ϥë⟤ڽũǻɿʆ׈ᅛιУı́ݿ⁅˕ǶǿȧҁȂͿȆՑ۳伻кϼžٙȻÀ뗸ګʺĜؒչ‡膊×ѽཌྷ˰Ζ烀ϐꗛǾ򂄅ͰމԦءɮ߃/㲹ƫ̑Ԥڞ+GZ_`Y[N\NK;[kKDEE1*0OD0+;N(;EVKUU@-3BC -/#>N[`djaJ6525/0.Ddhrsd:X2EC/6ShQNYI%>0-WJCM\QSC?&6GV:IPE0AZSF;,,-(/.(8EISUVIFEXfW<= ><===>=>>=>>==>>=>=>===>==>=>==>>=>>=>=>==<=><<=<=<=<=<<=<==<=<;;<<<; <<<;<<;;;<<;<;:;;:;:;:;:;:;: 99:999:99:9::9:::9:::99:9::9:99:9:9;:9:9:9:9:;:;;;:;;;<<;:::;:;::;::9::@F:9:O9::<;:uh`δaLwyxzǫŜZog\VJyZxnM\XRA/CTX>V567rwtTiBAR\a676k@m7MEUwmQgiJT\kih45545X:jgm[<-*<&)$yn]\\HDYBVO5XPfedefhY\%bsS`kWEI=SgmdrdchXqhOGa]ZwnC86\UxǗvF3F6b\aaXĒsa_w`fdw0UuhVgLIW}ek]wgҀiekikpTVdcbcdededeeededeededdgffeeefefeefefefefeg1eeefff3fgfe34fffgfefgfd2ghgffgfgfgfgfgghgggfgff34gfgegfgfgfeeeffeffefgfffeddeededeeded eecddccdddccdcdcccecddccddedded eeefdeefefghgfigghijjiijjkijkjklmkklml5m76m676788778789:8999: +9:::;::;;<;<;<=<===>?>==??>=>=>???@@@?@@A@AA@AA@@A@AABBBABCDCDDCDEDEDDEFEFGFFHDjd^d`URMLOSSTUSSOJNKB979=EILMMF=;:8;;::75NEoU>E}ZRVWRKBWahfmhjb?659<@bfkfba\`C=}smxorox{GGIIqn{F?;:;5GAFCFDI(*B/25612M:A9564557889<<8;>=>>=?=>;=?<=<976;H@AG,,)E>@>@DCAFJGPVyWzgThW[hgTYtiDcnjXdgeededdefefdedefedeeedfeeefffeefffggigghghhhihhjjkkkllklnmlmlmnnooopqqqpqqrsrssttuusvwvvuwvwxxzyxzyzzy{z{>>}}>>~?@@@@AB DEFHJJHGFFGFGJOUXYWQKJIJJKKNOPPONLLLMLMNOPQTSRQRVZ[YVQQPQPQQRSRRPQSUXYZXUSRSTX\\ZVQONN˻~yxjlkovû_oU\^\]ZWZccgimnlgda]YQRT\]Yxpolkkkwrju{v{srlgglgfestR`VUSRPPHvkc_eeagt|sbZXVJMP\VSGD@AEJPROGINR]VYFBBBFGECCEGEB@A?@EFB?:<>?<>=<99:=977;853468899635456533022///0.*%&&DHMMR.0/0-0/*% C@D-.34131..0./0.01-,-1.4687537;4/_0/]1/*..WMGJIO%(/,#*01670/.,/[RQS--01232+)$$"1!*,,'(''')*('&)%$%+..,&$')'*, !&""#"/*1-.&#*'%5)(!##$#%&$#$%" &'""%#$%&% #"$$#$'/+$%!$";618%7.4 + (.5!!# !%2$ ",.0$5/5<5!)313423 $":38?(=70 ./C9:r_}tF]RZNM?9'0!!RZ8XX+A;)2O0EBH6+C&(B!26!"""%)')#"!&!"')"(@4FYEBE=BUPC2K246("''(/*&#%*()+&),+#"#&$" "+'(( +-,L61YV:>JRXH0d3K1:2Y?P,,///)'-0+!X76:0PEAIFILH;4^742.--,0/OPcIEG45431,RCAFBOB<JSUR;MdXHIAQFNQEHCBUMJPT1UIN3%"/4+-#7;939<<:641OOIGCA05:0".51/*2+94<0=CF0<7846ANHB?BFO54=58GFQRLHE@@;MINC4H,*55C,NL>;.C=1DA>OGN(/6LHU1KHMR00O40Z10?<4PRC;+O,/0/[TBKJNKQRRQUPQOMPX[YOH=EJLI=52432753446ND^qZF7fB?J?<(,<>+Z]YUL=.1056*&;SeTTMcimU@;ETIK?9I&%61JUYSYJ^UQyDbu[PPC! :0,6.9LDKH,%."7R\cibG4/&$%&1C6>\cop_4L,@?'+KbLCO;) D;:?TCA0& !8C,5>30NOB2! ,ADRTTEBCaS76mOEA4+;53/31-7D48=47$'+*%#()(./5<(71',(- 11125$++;;J29RQ]b9@]^W\Zbdc​?)p=5 ɄEA~gɽ⩩Ɏz\tܨҪ_rԈQ,'ħM炃끇2hb+ rąB}דּ/ G "?302$ $<3+&"- & $F-/1?& gϋi(eݬț89%!1""!,1,W\=%*88"++[?=."(k2vD;QHa|f[`\PMFBDFEEECC@?DB<3025==@AA;41/.21431.;-E5.WTMOPKE=RZ`ahdda;.,159\gjhfh`e?9unm{ptrxԸIHJMxs?,**0,7-03CF;*"%'*(***)'(+)++)++**)+,+),./01000323522/..+,5/-0//0.0312499ORl^jfbNSGCTV@Kzla?j݄a溆˽{|ztuecagoÿ[fOTVTTPLLQSTTVUTOOMKJGLNOPL{snlmhlheq}ken}wrwpnfcabYSPYYafk;G?>?AA@:kg`\Z`]Y[ckbULJI@CEKEA9<<=;;=@<78:DEECBDGGFE@8330,*(*()+U)"  (*-,0-*-45541444642//.1./040//0043320-,+,-.-+())((')& 49>@G(*((%$!037%'((',+*(($&(" "'./-04/-^/0Z0-'+*LD@DBB   #%"#$',[QOK&"#"#!         + ! ! !'#   + )"#0(!  + +  +     +  (  + +     +   &*+$(./#3"(# + + ,&" # !#!&#%1"!"'! &"#%'&) "("0*'*&'# #$$++)),*/0+%*(#(&! ! ' !"$"" $)&%%&)+*4""$(((%2*#& *"&)!# +#!"$" #" $" &#$ #""""#!*#&.-. % #&:'-7&;-#%'/#,--*+y-3334530.//120116)'%*$# $ ++!!+#)+*5/4" %!!"##%#'##4"$&%GC3::<:BBA>A==>=BGHGA=6?DFC7-)#O%5CQ?/&>&2;1.!&CNNF3&49STRYVVYSGNPOQM]J##AVN\YotvU;>@NDC918}||}|}}|}|}|}|}|}~}~}}|{{||{}}~|~~||}}}~~}|~}||}}}|}||}||}~ ~~}~~~|}||}~}}}~~}~~}~~}}}~~}|}~|}}~ }|}{|}}~}~~~}~}~~~~~~~}}}~}~~}~~|{|}}}~~ ~~}}~~}~~~~~}~ ~~~~}}}}{|~ƀā}~|}|}|}}}|}|}|}}~~}~}~}}}~~}} ~}~}~}~}~}|}|}|}|}}|}|}|}|} +|||}|}}|||}|}|}}|}|}|}|||}|{z{z{|{yyz{z{|}|{{zz{|}|}|}~~~~~~~~~}~  ~~~~~}~}~~}~}~~~}~~}~}}~}~~~~}~}~~~~}~}~}||{|||}| Ыμ䝩Ĺќù۬ѾšǹĢUϖìгǿ˷֯       #3U!!)\֋ٯjЛהРά쑬nnFl桔9%!'YK1'" ! =4ǠzWKkwxm(1.$"#+!#ݵ50=b~ğ|T%+,3$"!!"! 7* "L𼻏綦唳Ϟ؂ىߙΎۄL@7JMۓˬ.ВմҾ᳋ʩ8$! !"" !!!"! "!"""!"!!"!!!" !""!! !"0!""!"#!!!"##""#""""""""##$$$#"###""!##"""#"""#"!#$#""#"""#$##""# $$$#$#%$"#""#$$$##""$#$$#$$##$$$# $##%%$%$%$"#$###$#$##%%$$$%$##$$%$#$$%$$%$$%%%$$$% +$##%%%&'&$%&&&%''&%'''&&&('''  1ùǾȷӲկ򈊃՘ƕ^Ҳþʻ³?.+)*+*)))*+***)+*++**+,,*+++--,,,-,---,,--.,--/.././/.0/0/0/../002110010222323222343466552334333543465665677765766878 !#$$##! !&+//.+%"!"""$&''))'&&%#$%&**('%%')+/6740,**,--.//.-+--+++*+.47862.,,-.18993-*('NĶƽʽָȷѷ˾ͻԽặįɨɺô»򈚟ýæȺīʿøûボ҇怐ĺɳ߈޳ݫ鶳Ò𠝿ϙݭځۢáĒߐվƨꌔ֭ΑŘؽ̀Վ̛DZ¹ˀǾ³ɭă׶ԙ肕돉Ӊ眶ŔӼǽ̹⍥ښѨޫߝ絺Ê˻˽ƽŘժ›啘ր䭕ـ妖ǟ拌̖ȬȊQܿȈՓ̾Ǝ4H[[]]cInQ\zIMI_YBQ9!6:S?++F8'E48]RQ<3@C6,)7Hbejg]D5.//,.6OIIdQGOF+"-A_REXWY7OaNH+&,+..,3ECRRVFC?WSk@@q[LQH19HH,+F@?BA;DHJLOTT--MQK.DFD3)0KJITZ7>DIE\BCTRnli-1^[]ea`XPx:;;: ;;:;;:::;;:;<; <;<<;;;<;<=<;<<=<=<=<<==<<===<<=>=><<==>>=<>= <<==>=>>>=>=>=>>==>===>=>=>>==>=>=><=> =>>?>=>>?>=>>=?>>>=>=>=>>==>=>?>>=><<= <==>>==>=<=>=<<==>=>=<<=<;;=<=<<=<;=< +;;;<<<;<;<;<<;<;;:;:;:;:9:::9: ;:;::;::89:9:;:::;:;::9:::;;;::;::;;::;::;;;:<;:;;:;;;:;;:;;;=9LN; ::;>3;=;:;9:P;>ie7enl~pk{~S]gZyQ}zufD_KKR>cd4K98kOdrTDV77;u?11<`9FY667678uveCpDBpq|Ufjh454jiT7hk@0(@#\KU`czzZN@V[ZbfgeghbhiL4Tiue~ZJW2f][`Vzw~oLwW`Q\p|q][\.2Ck>7)Nf_;`fajxP,A6?byhaVhpdpybnk-_drdaXijTm{{mڙÍYr|XU^KLQedeeefeeefeeffeedegfeeefedeefffgeeefefgefe,fgg33ghfgffgg4iif3gg33ggh3g3fg3hgh4hhgffih3h3g4g4hggh3fgfg3ghggfgfggfggfgffegggffeefgffefffeefdededcedddeeccefdeeccdedcedceedcddcdcddfeefcddffeffggfeggfgfgffg hghghgihhhgijijkjjkkjjjk6l65mlmm6789888778 9898899989:9:9:;;:;<;;;:;;;<;<=<;<<<;=<<<=>===>>>?>>??>?>?@?@@?@?AA@AA@ABAABBAAABAACBCBBABBCCCDCCCDCDEDEFFEEFFEFGFGFFFGFFGHk_T^b\RQIGOUVTRPKGGNIA869=CFGHHF>=>;;::98::s_rb._xXUURPMNUdolhm`xA76@>j]hjkicbx@|xmqpuv}N|GGDnmwHC>=DF835546978:::8:=<=?==?=<==;<:;98?L=HR*NHB>A>??@AEKEnw{W]NPVR]Z^g_ccVcdededdefeeefffe dffeffdcfefef:effigfggiihfhhiijjiklklkmknmnnmonpomonnpprsrrttrrttstutvvvwIyy{yyxzyyzzz{|||{}}}?>?~?@@@@AABCCDDFHIIIHGGGHFFGGHKRVXWRLIIJJKLLMNPONML1MNMNOMNNOPRRPPOQQRV[[XTROOPPQQQSSQOPOPQPOQRTWYYYURU[][WQPNO|~}zumjonikiʹWXZWYSU]Y`_gehfecb^]SSNwnolcgemlgfynzzytgkghehhkegp}IOPTVOOJE{ntfdXi|hjfr^SZXGLMD@CMT]YUP\_\[XQCEF>;@CGFJID@?=>=HCEA<=>?A?$6.?>>>;=<;==<;:<<;76842344434886785431112/,+))$%'HKK_22/..+&$)%@).11.0.//0-,*,-,/120/-*13205530_26432./0-NGKR/+0,"(.774014,NWNQW/0,.0/42++)--" #%*-)$&)/))**/0.%(*3<50.&$"" '+24/,66'# *,++"$"$"!$#$###&& $&"$%&''% #"92.+,.//51'&*&.84$+&7- &257$$ >92878%" <)/.30$ >CB7998:127Rp=f\QszUZ<2%16((@]V3/'UH#E:$H3SB2$!*/-4!"! $&'&&'$#%"$*>MFeE8oCda72<;9>.11"%((&,)(&)('** &#"%%### *%" (&1j1.YB(1N4C335ZM.24@!)+*..*',*(#']97-9>]UPHJQN4)E894/2//20]P[RC1=93./SJJ>H.12JJ4-QRXG/E=eD]=9?c0SQNFGL@ICRYXW^_2$Y]KeFVQP[[00RDFB<=HFJI<:7:*3?B347:::4AL79!6LPTQLB9N&Q-6?;.6<8/b90(DRYC<:::,P\<6<<4bdd7AMC-D)<:2Z*-/.XFTNNF^abSJPKULLNTGCCTFaVU/A%3IQRH-;21*/.6>3*1.HE.EWI/C.3@5@=?QH/KX1IS7,:H/3!2:`5*J9BL9EEDFEIK?oTP33FE761E@=3!:=+;;9S)%&K0/]_1\XDGJONMLJOUNOE$$0DRI@;?CFNB-]E@NbiOIP9MOJE72\<&. #6PV\\cErS\{OXZhaFE"!9)2%:,7TNH*(!9Zbgh_C3&"! $+A;6ZimtkA(80H3&5VcIMK0'4,)9UD9>/1FA4MIG*D[LA)B?OSVD>>}Mh>;gXKK>#+>;+563@>=IC67#&-+(,($,--.286262+0.332;>#&.42L;=RQjh]%&]_^hegfg*^5 +א͚Ԋcvzrl1qkl>$:Z:WY\RE{qȆ2!)%։¾O⇀ᝓ≹퇇頙2dðNS_DYȁ >+A߻pՅΒܠf*;8-:*7  +"*/5%# &( :  +"Zz/ԑίUB(%"7*%EY" &G$"I>626JL?+S*:DNw>6Dqפ?8lX\]XNLA>DHHFDCA=?GA:1.039:::<:33323242330O9EC,tpQNOMKGIP]gfcg[s9//G86b`jmolgh{;srioqvzY~FFEqm}F3..614-13EK7/&%&&')(*+'+-'()l+('('((),,./.01101212//-).5+1831..0/11336;8ywmMC8@D;OHG]Sokބ˚}}ö{wzyvpkbfheedUTTOQMLPKPNSPQOMJJGKGHD|tne`ff_c_hhd`t{juutnegcc\[XXPNRZf589?@<>;7c]dZWP^ouoXYSaKFIG9?A<9;@ADA<:CGFA@=24746:?CCFE?:5:01,(*+0)JA !%'*+11,&3434354466200211//0--///.,.00/./,+--+'((('')'":CEU+*'%". $'(&('(*'%$&"#)))../.`20//,'()%:9@E"%%!!$('HTRPQ'&!!#!    + +   + +     + + +      +  ##*(!$   +$ ! * (@1% + +  + +  +      +  + + +   +  + + +  +   +:,!*",$ + + +  1,(# &$-%-("&"## "%%( "1+-(&$"%% '+*)-+),#. '$#+*# ""$%&$!"&+!-!!"%)'.2/34#$%"*')"201+&+',%&'+# (.'%#&"& +"!#*$"" %$&$ #%")'#%'+$$#?;/'("" (')6,=!17@C&"+$433")+(+1/45543321/1211231+3 #(# &7- )3",--.-04!1%$ $|2$$II&GF37:>>?><>A|Żľƺ򀉇ϼĿȻĦľķĵވ¼ͳ߾탉Ŀǻû½عϱꅐ󊪏ڹ轪ҰВвֻƎߌˁӉׇ̨·󔎀ǁǃרϿ巿޹ޒ񰓑ㆀگҩްùӎݐʲƯœι󖅕܎ŷǂփ׎ֹ潧Ƶؖީ҄ͻд⦨ɄƶҕʔɒЦϤ޴󔅬ܽƸ񎍖#Ϸ∬Ԓ܎9$6O^X[TbR`aPNSEURQO=57GX5*,?.0B.[RML<=EA(,RhjkdX:2&,053?P7Sjhxy\+=7NN>0Sg^EVH:G3F#7SYGMH7,&):(38JggDC_QC9!$"(311B=DNYJ?;^NbCCiODPQ9;AB9*6GJK\^6;D@ObHFOP~nm5:T][bbg]PZ6;;:;;::;:;<;;;<<<;;<;<<<=<= +<<<=<<=<;<=<=<= >>===>=>>=>>=>?>==>>?>?>?>?>?>>?>>=>=>??>?>=>?>?> +??>>>??>>?>=>>?>?>=>=>=?>=>==>>=>=>>=>>=>>= +<<==<<<==<=<<===<=<;;<<<;<<;<;:;:;:;:::;: +;;:;;;:::;:;;::;;:;:;;:;:;;<;:;<<<;=p)X7<<;;<=<;:;biiiMBZ6JgXHsTx^\o MMp\J{`QOki@gjfjayp:66X^JeWq!P63IV\:vPz]cau`~ftlCouM;==>>=> ?>>???>?>?@?@??@A@@A@@@ABABBBCBCCBBCBBCCCDDCDEDCDDEDEFEEFEFGFGHGGKnZX^c\QLBHQTSPPKJEBKB;9;;=AAAGTPFCB>===<<>:GJqDD>}\OQVUN[S]jkionlA@5=CyVkppse\qArjoy~SGGBFuCIF>>D8DBB@CfD#''<53/314335?$925478899899::;<=>==><<:;:;:=<:CJIU-QDC@@@=<=ADGKZy_dkJ|POTY}uJu~Z]@dddeeefeffef%geeefffeeeffeefgggfgfhgghhiiihiijjijkmllmnonmnnoonpooppqsrqstst vuuwuuvwwyyx{z{yzyzzz|}}|>}~~?>>?!@A@@AABCDEFGHIIGGFFGGFFGHJPTXXUNJKKLLNNONNLLLMMNMNMMLNOQQRPPOOPQRVY[XSOPOPQPRRSSRPOPPPNPPQRVXYXVTSRRUY[ZYRONPbx~{z{wtuscjjifm׿ǽŹWXZU\Z_\_]^ccda[XZRLKxnlwqhghijieeklkhehhhefs}a^_mpxINNLPQKFCHB{jp}ukkka^\X`nX`WPR\^afbbY2XNDHQHMSFBB:BDGHE@===9CCAEB558g5:85.+)&.6>AGGC:5-<<<><;<<>=>;<<<:987534676445677676753485333510-)''&#ICAGX./.*()(+&6E,,..120//-.)-002.,,*)+34325344/35100.0-*PGQO%$%&+-,39983-2VS[LK,-.-06223..,**$ !#%')+#$'(#!$'&(((.*+4/ 1dJWB<:1\N>LPEDCGBPWX\YQ"O`Y+GXOSSUVZ//XILD<>HECI:/6=25==;=><>>@J3?P"#LUWOGD6Z&17>=DM,/'<;8I5!..8HH).MWV[I=@RDJCDPGPU_JQEHQ*20J@HRS.(FCLL?1/WW=2/8!6()$&-@+RJJF@3BBM).:GMJFKNNKLHHA@@E?DPNMU),+,+-,VUPPTUSNHE68TESd[rMOPGeRQV_ULAC;=OJ)0>M**(.IH?REGUZ<;BLJGLLMKIIKKLKMMNNMMRBM25++CI;-+#GC360$!%1>Z[PsȮzZ1##,<准ӰKο눇ؤ:1N`=8@uNƀ +PEDèăװSq˫Ř켨̖ɥ񚘗,"#< : +!VpL`[{}ykgc_^mgbdeggfbagfhecfdcbblrQKIRQWa5:87;<854:7f[fuja]ZQPMGKUDNGDHONNPJJC&D<34:37<5675=?AADA>972:6241+-/T% #(/12.(!.01332357530232210/.--.0.,,././//-/,**-+*'')(& 68:CQ))%$6$#$$''&'&&&"" %%().002/3/))(%&%!>;F>  $)++(&,SQZOH"#!&$#$  "% # +%      x +  $ %+', &)  +  + . )+!   +  +    + + + +  +        -)# 2,+''0&  0('"!-% /2$!&%!*#$#/!&+%$&!! # (*+-,)'.*!+ $&&'(+'!   #%&&#+'" &'!"/.0+"!%%)&,$ +"%"#(!&'/ '# $%#"  ! #! !" #!$$$""$$#!'"+81<)+,&3'&')$" %""-.+*7,,:C,($(1,.*.64266653332323455354$& &( %')%,-...3'&! 0 $DDA@;24:;?A@C?9) 7>B8KO4/237>D<6.+!D;G:4N-$2KH/'!PKG9 +.@NO)SPRQQUTXZU[\Y]F+5>4T]a{QO=7KIA/3`C%5|}||}}}~~}~}|}|~~~~|||{||~}~}|}~|||~ +}}|}|{||{z{z{|}}|}}}~~~~}}||}}}}~}~~|~~~~}{|{{|||}}~ +|}~||{|}~}}}~}~%}~~~}}}~}~~}|{|||{{|{{|}}}~~}~ +~}}|}~~}~~~~~~ +||{||{{{|~ +ǁ}~|}|}|}|}|||}||}||}~~~}~}~}~}~}~}}}~}~~}}~~}~~}~~~}~}~~~}}~}~}~}|}|}|}|}|}|}|}|}|}|{z{{|{|{|{||zyyzz{{zxyzz{{{|}|{{{zz{z{|}|}~~~~~~~~}}~~~~~~~}~ }}}~~}}}~~~}~~~~~}~} ~~~}~~}~~~}~~}~}|}~}}}|}| ųήɑɅķ̴֪пϨȗ_Ӿž֫ɻֺë鸙þؑ(   +  '5|"$@ŚСu@RNU>;pldf쭳؉i'* ;$%,$"#$BHlqNqϧRaϣs_Zt`?&(6)#'`cN.=2$ǭP4%"$$$!0v7%"&1HLʼnՒޔ򱈀˓€’ʼ7e<$+Ȳ.ӂ⤈࢖낟zsG4!!"! "!"!""!!""!"#!!""#":#"!!""##"#""#"""!"""""###""#"#!######8$$"#$##$$#"#""$$$#$$%%$$#$%#"$$###$$$#$##""$#$#$$$##%%#$#$#$%$##$%$$#$$%$#$#$$%%$$$#%%%&%%%&&'&'%#$%$%#$%%&%&%%$#$%%%#$%%&'%%%'('&'&&''&'%&'&   X°ڞƉǽ߃ݷɈ彉b凋쾵ǼɼڨҾ͎񓨑ɑu-+*)*+*)*)*))*,++**+,,,*++,,+++-/- ..-/.--./0/.01010///1202221$2023322233354434445435666557656556765  !###"! !"&,00-($!!!"##$&'('&$#$$%$$###$%')(((''(+1450,)(),-,..,+++,-+)*)*-044430..--.3884/)('kŹǵ䃆톇ɼн󂋋ǷЀضɮļǽƺмųǶνüͻ՟ӵ¾ϝ铐µе뀒̎苨ّЯ䄖ļôĔ؍ɿйۚފۊ犂ĨٝАȗ㉌сȔꀊ֦ʹěٹñހìʻǸАݷ톂νDž渜笶ٸ֮Ͽ̡ҊĤñԬڿܻʀЮÿ䣦ȵ釰מզ񫰭Èƃ˹ءV떁⃉ᱦԸײË΀<>)@AA$!?.*@\jih\K6)+0=42PGHNF@=UJXPFZLDLZ8IFMJRNLH+:D9,2999D;?HIOXXY-/ZSTMI/=<=<<==<=>>=>=>=<>>=>=>?>=>>??=>?>?>>??>=@@?>?>?>??>?>??>?>?@>???>??@??>?>>?@??>?@???>?>?>>??>>>?>?>?>>>??>>?>>?>>>??>?>>>?>=?>>=>=>=<=<=>>==<<=>=< +==<<<=<<<=<=;<<;<<;;;<<; +<;;;<;;:::;::;<<<:;;:::;;:;::;;:;;;<;;;<;<;<;<; +<<;<;;;<;;<;<@KB;;<=<;;;<<<;;jFl:}I&IXBEgf86677787877vtdo@.Z_o_FdY}_zqrkk5556556gdbkhP.@.KLpn|LMaA@~HP{lF]jr>nj=Gndaogdj?|^g>=HgqKfS[LB<[RV?OMmWXX_UHg_Ox9G55/8aIbZij`s6@T{^OWYWvHNKZNYywEbfDOlGiޚ{dvY^lofv~ cpywvQedfgffdeffgggffefffegfghghhhggfghg3fghf34hig33gg3hh4hhg4h4i444ihg54j4ih434 344hi434i4hiihhhg5jjih44iiiggihih fhhhighghgfgffgf gffeeedeefeffedfedddffeedddeffefdef efffgeffeffef hhighihhghjhiihihijkj6lllmlml676m6656767878778798889888999:9:9:::999:;:;;;<;<<;;<===<<<=<<==<==>>=>?A@?A@A@AAA@AA@A@@A@ABCBAAABCCBBBCBC +DCDDDEEDEEDEEEFEFEFEEFEEGFGFFFGGGFGFFGHGGL~laZ_jWODDKJIIB@HGGKH;532.:?BBKRREA@;;;:;>?=oIQGEhkWRTYX_UXkkkqvsk>@5DCYhwwkgaeDshmzVM?@;GnmjHEA@B;BDHBD#BE(('>45A?35576BJ366798:::8;:<::;;C>?@==@AEGKPBBqlf_LTB{b]elfW]p}Rdedeffhgffgghhfgffgfffgfghgggfjjijhijjkjlmmllmnnnmnomnonoqoqrrqrsssuuvuuvvvuvwxwxyz{z{ |}}||}~~>>>?@@?AAABACDEFIIJHGGFGFGHLSVWUQLJJKIKKLNOONNLMNMNNLMLLOPRRPONNOORVXYWSPOQRSSQPNPONNOPPRUXWYWTTSRTX[\YTOOR~z~¹sntpprieiojkoķһZ\ZZXVSY[ZZYX]]WVSyvsfehdgc_b`hfaidcihdafd^_[Z^dbtzDHHHJFFJ{zpuisqi`e]hgjrfqytla]WWUYDCKU.UOWRFAC@<==54gf4<5/,&G%1<==@@<;8*:;;>=;:;=<<;<=<98;8689677653369978774454413722-((,('-&GACGS*,--*-%9 -344551,+(,(.001'(.,,,060,,*.0+,043-,31,ALLJ #%'-0.661YJAQJRU-/1133962-.-*,&% !(9>0()+*((&'$!#%'&$''"-8B0>J+15D0*"(0.*'+!(*''>)#!",,0)/(%,:'!"$%%&$*&$#1/,.00/.2/-.-)1$57/&&58161*/$/62332--'!"&=")";>-%B@;I):502J.2D<*=!!@U3?L7EO;I+("'#+#(.30/&)'"$)(OGb[b@8]e32T11S9@,)!''(&$)&" !#"!"),,&(& "% "" &*)+/."`<1[-N,&4442^1N4/5+&-"%)#/(*&$&!\79?:698-@Pb75QC-S853/.]TKSH/M/0G641*W-QZWM7NW.133THGJ28@WVSI>U`QF3[VBFBHJQOU[RH>F@CB[R*NWTQRYWRWXOGI@?AFA69>>=?;<9;>=@S@F!>YRNCH=CA5168@85G9PC52'+Yl+&:79I\a<77YOG4LP-O0;;?/F.744=@LL;>7WAJRXNWDJUae_YQF>FW/;6KGN45M2BLLEBSUZ> %75*<5+4--.,NB:5(L/12;=JMOMORONOAHLJGIFDSST+*,+S-/../,U-VXXXWN>]:!)D%'''JDMNQTB;3L/J?B@A>FGHIIKGHLKKMQPSQPNQPGO3A/CD0?9A/8=4-!./U48@?8DDIHEFD061021+0/-/ZA8%-;N5>=6<")MQ-..QPPQFPPRQRWOLPQQMNJRb=7979=FJBdkZY11262/.WWbcZsE:P^_E:3=1..; (/ZSLJD0-1456ANVOPLMOI\TX`g]saWOFLnU;KH\P]GMfT`57^V53CN!J'*,GSULONX[KRjTQ_`UM"8+)##%RMGF?'"$( 3Vghh^D2! "0))B75dktzg9(;8P@%2[aL?J37 J=#3965( $#7UTE*NZB: '(06=IPJ@9CRNCVD>GS0>3KE'.0:=6.(-('037>2"*A1E\DALIvoL)B\PZcmk_􍍐EwѵǷᒗ`5)Ob0Iʶ¡W-{MnӆarX72`u&%)&Jӡހ\6OU9C6,7>Oi(0=JĻŵ̓2tİ̐܇?'y..75 >>&,-/=5  (&*9Ꭼ! '7147HJR=<'3-U$$825!-89f2?%RV &kzg\`hUI>BFFGE<;C@@D@2+))&/474>DD74677/T28-/$weNKPVU\VUdcdipnk<:-9<8796186221-/^^(# "%)-,,)+-.125442453101-.//-..-,**,//././+,.-,')-((!65;BL$!%"&%%((&$#"# $(&%('(,(***'#$,*$0?B7 + "),*PH=IIPP'$s %$"! )$.) "!    +  +#$#*)"#('"&( & "/%&-/ +  T  +   + +     + + + +    + +   +0,( 0& .&1$).($) $!)&*'#''' "$&% '+%$-)"#$(&)-($ % /'$((&(,*$&&" # +(%" &"1"""$0/--*$###$%)(* &*0%/"(./2-,'!&   $  +! !!" "!"#  $$$#$%%%''# #0E;=&-1*<-!$'&'!2 ()+2297/-&5.,/--+0/234631542366965356*& +!'!./10.03$)59"##><<;1::>?BF>;BDEAEAKY823238@C7>5*'BDDJC=S-&9RT8.0/DB86*"3CHNNOSM]UUZ^XgZTPDD]?!4@`VdLKj`l/4UM.0L)$$=pǭm܇BD=]i7&,: ,$##=UL')"8RI޾̾윛p.'""'-(% 堘]$[>++)߉J0X,!$5,##+d-!, &>qވإщب將؇κ^݉ዚk^N]ϑ鹉ϥ̚؝Δ㟴} ""#"""#""#"# +"""#""!"#"#"#!!"!!##""#"$ ""$# +/$""###"""####$#$$%$%$$$#$%%$##$$$#$$$""%$#$%$%$%$##$%%%#$%$#"#%$$$#$#%%%&%&&%'&&&'%#$%%&%&%&%%%$%'&%$$&'''&%%'''(''& ''&&%%&'' + ȴඛ²óðϾs߯󄂁򍂽ýôʽ͂H+)***+***++**))*+.- ,+--,--...-.-.0/../10/0//011101002112123454346776676667557566 !"##"! ! A!%*.1/+%"""!!"#$&&'&$""#$%$$$###$%%&''((('&(*033/*'&()++,-,,+,,,+),134542/.--.1784/*'(Jƽƽ􀇊쀈ʰŻ߸οӺµȴƺǺ򃝼ɰ򆓤ǾԸس툪оʍ灃ꉛȷľ‱ԁϟ˞ҭјƬ𖔧򓥌⋧ؾ㈓ׇˀŪƆ򋵺؋و‡Сǀ甉ij̵֡Ʊ¹ʩƹɶ򅎁ĕְО慈蜏Ӿʫƿӗņذ氀ᎇּﹴϽʽʶúٖʭƒߨ䇍ƻщ婛ߧ획Į.崤ꪎٹŪ€UM%2DZWVIJOYVVKWIRWZYG416@9/-17>9&W`SLI@8>>325+FEejjeW;.)-2A5CO4PdozsVAH?9KGASfhJOMID+PWI,+FKF1'!0ID:41P\X6N`K@;%63024:BHEGBVFVVFWYMHRGB>N^;50HJNWU\00/YUOT9=>3.1:DRT?.BUV[lEHIGvhm\aWcQVYc`YTc:;<=<=<=<>=>===>>>=>==>=>>=>>===>>>=>?>>>=>?>??>? >???>?>>>? >???@@???>>?@?>?@?@??@?@?@?@? @@???@@?@@@?@?@?@??>? >???@??@???@?>?>>?>>>?>?>==>=>==>=>=>=<=<=>=<=<=<<=<;<;<;<<;;;<<;<<;:;;<;:;;;<<<; :;<;;<<;<<;;;<;;<<<;<;<=<;<<<=<=>Bf;<===;;<<<;<;<:eF7M=<;}M}l[Tl]@lpus։l}ptnvnb;Cdeeffgffeggffgeggfggffeffg4ghh43hhhghhhghig3hhigh4ig344h43hhh4g444gh4ijj4j54554554554544ijh44ijjii4hiji44hi +hiiihhghhih +gghhhggghhgfgfgffghf effefeeffedf gefffegefeefegefefhghhgfhgfghhhijijiiijiihijlkjkkklml6m6m667 8677887878989:9 :::999:;;::;: ;;;<;;;<;<<;<=<<==<=>>>=>?@@@ADB?@A@AB CBCCBBBCCCBBBC DDDCDDEDEDEDDEFFFEGEFGFGFGHGHb]_a^SLFKMHATF>I>MND<873/;C>?DGIG?;9:;;;?=;qdDAD:Jy\PP`hh^Za`krvynw|:DS[bylkibc{nuy~[KXR@<:HjblGCED;CFI=BAFL*X'%C=9&$33555@F5599988:;;;9:;<;9:<:;:<;<;;;D@;?GEG=BCG=?A@@ABFHHxRc_TpRNBs=or^IZeghhghgghggghgghggfgghighghhhihhhiiijkkmmmlmlmnmnnnop +qqqsrrsstuvwvuwvvwxwxzy{yyzyzz|}}|}}?}}?@A@AABABCEFHIHHFAGFFGKQUXWSMJIJJIJKMNOOMMKLLMLMLMMMLLLNQQPONMNOOQUXXVQONOPOOPQRRQPONOOQTVVWWUSRQRUZ[YVQOR^~v|{}oljhhdkhhҿ]UXUUOUVV[XSUVPzq}{Jpukfcc^dgrcgqghfjorqea^_\[YRYV`sw}CINJFJF|ue`eefoponvohe\X[]OKHZZSMFINOD@B?=>=BHQGDMF<;;988253/(HIF+8:78<<987(5:<=<;:;>=<;=<<::<;9696787642355786443542158420-,/-030,()I$(/51*,("$/142430./-,,1,.0*+//,+/2//5456/22/-+,0/(@)E"#'$ -32./PJFGQ+J-23054635411),,(#!"(>:AC4%#!"'&((300::)/!/9%3A;=H'*A355$./35+((%("@99,/$ (.*'!#-#!$&##$$#!!/4001/)+,/+++6 $"($176,795,'! <**';;$@C)#-Q8Wmm[ELD.+.+!3& #>$&/7 #&!$$! '$;1YWcZWjJO9Hd7341V)0"(&%##*)&$"!##%!%*+' ! ' ##+0)*.Ec7/TPLF+UG>^2.0.2>ZP!&?49@@9-85?MY4778@A7O57Q]53NA.H:5602XOSPW2?&7e;5++.-ZQIPY.01-WMJNFAGA]2PF10[R4.UeNDGLNSLPR[LKI?2582+@*"C0BVLA:9%CWea]]6;46jJ+XWZJMB7;>5401*^-.mWQ?8WZZKNQQL\O`^KP:EBF+82-7N.6,NOPB';LSJ6(D..F613/.-tQ9>2.8@89?BKQSUPNSENLNG=EECELPPO,R),0,,,02/.[X..YNHLL]s~CO`F_A===PUXNHONFOLJH\7)%'((L@OL?866C6DA?@>CCHHGIGGHIJMQRQPOONRM&A50F<->NB$%+9K7#7(;2+HCFEBQMPMIP-820VUL='!44.4>:5A'US,-0/UPQOKPNOOSWSWTROPWRVc@><>@@DIICCf^222542/YCnqb]F<`FD]F8;\\KB95G7?4?IC1/7:6;&4^PRWPLKN]`dllK?KOlcQSPEOFVaWC@LJWH<7Mn)*7D:"2NS[LPRZUTOYNV\[XA&''*'ISLGB1"!% 7>cjjeU8' &4)8B,L`lxoS8=71@9%-Q`B?A85CQ@#098&52#" EPI,?XH?3 "$*,6BJGIAZAPTFWTHCLA:7CQ-(/9FKD@64#%-$""##&"145=9> !#B?76$(*! '09:+-@ADZADKKyko\^UgUY^iop󏐓;8+ +$[ǕՄwN`B%'Kbc盗jJ١{|kUTĆA'^A䔹̡=U]9.:Q5+1Xum뀂U?\[׍Ƥzv<Վ楘Ҕ׶Ԛ%\'2! .-)%.%_!/)IK87- #9 ]ʸ5#  .'$3) MOppa #.7%>7Ak9+a.2,m-R;ʿw Quedc]OJEIKEDQQTZ-142177kgonj_]]WSYZ[ZaiZWWOLOPDB=JE>84599015135559=53<6/01000-+#*)!"()**&&,--.//1443235541110/1.-,,+***,,..-,,-.,*(,.*(% !:" !"$'&%$%%"!   #'(,1/.0)++(%#&-*"+1 #'%+QNJDB#D*,' !!#" !t""%!!  &!!./   !     + +  + + +  +  +   + !!$' (,+/'#$  + ! 0+<@8/3#             + + +        0('&%2 %/3-!" &+ !''+&!$*&(%( 0+&!%)'! #$")')5& "&&)#').$$"+#&(&%'&#&'& !  $"'$&%$(%(20.-5$++,"# %;*(*..''+)%0&/.$'!!   "#$%'"!%"!# !"""$(%'" ""/>E#(3$0 #$'# $$ %#"", +.&21*)(&0%//-/+..45465343447:9655778/%'!$-"  /-/./'$# #%%#|== ##=9=;7:9;=CF@EFEBCJHMY;877::?CC5#.*C7NKCA.(?11AYttoiFHFF:LO8BecCHI.&9[S?+5III9#,-7PUK58fYODFIHZ?Q]GPeVITY5DO\T;CHN[VJCCI7<:?;:92713:MNTV/02ZZUSW9B;5.3;COPA==>>>=>=<>=>=>>=>=>?>?>?>>>?>>???>>>?>>??>>??@?@@@???@???@??@?@??@?@?@??A?@??@@@A@@@?@@@??@@?@???@AA@?@@?@@?@?@@@?@>?@ ?@@@??@?>?@@?@?@@@??@? +@@>>??>???>?>=>?>=>=> @>>>===>>>=>=>=>>>=<=<<==<;<<;<=< =<;<<<=<;<<<;=<<==?>??=<;<<<;=<;<<<===<==<=<<<==<<<==<<<==<<<==L_<==<<=<C^AU>=Zl|sBdda^8O/_Y?C3xJROWXN?Vg7=W6NeOUF;Sg)V#6ahK@C;`mQYc|k|pTMHbeI_O>nlSw;@PSavpleqlVݕQdrǀڃq_f+efgg3gfgefgffggi443ghg434ghggh44hi544h5j5ii4hih4i4545554555454k5 445ji44545j55jj55ji4ijj44jjjihiPjkjjiiihhihiighhghhfggihghggfggfgfggefggeefgfffgeffgfhgfegggffgfeeeffggeeggfgfghghgiihhgiihihhijiijkljiihjkl6lmlmm66l76ml667 87778787787899887989:889::;;9:;<;;<;<;<==<===<<><=<===>?>=>=?>???@???AA@@A @@A@@AA@AA@BABCBCBCDCDCCCDDCCCDEEDEDEDEDEFEFFFGFGFGHHFFGHGHHHIHz`^`kd\TNEMOCGIID:OLB>??:579:8?AFH?9:888<<Kn_mMGFC6EIK=@BtSTE@BD%$'&513469H;8:86667?=:79:;;:<;;=<;==<>?IB=@FAE>@PJEDA?@BCDJTiYaYJLSSqQerpZuLafffggghggghhjhiiihjhghhhghjjiggjgiijhhiihjjlkm;nnoonoopoopprqqprrrptrtvuvuvuvwwwvxxxwxyzzyz{{{}{}~|~~>?}~?@A BCEEGHIGFFFGGFINTWWUNIJIIJJJLMONNMLKKLLLMLKLMOPPQNNNOOPQVXWVROPOPOOQQQRPNNOOONNNPPTUWWVTRPPQSWZ[YSP{uø~wrmiokjjjqbģe_SORXPPVSPzuorjvtz|rmkebihebdfdmpejz~iebojZd_j|mrsIDFJNLLNVHvgu|}d^hjk`Tg\YMDMHHIJEF@CELIQLPMPIG;>D7367?FQA8$8>ED'298::;<976)59:=<<<=?>>:==:79;89548;:7673152466443430057511..0.-33.+((*..+)(*($&-3556621210,4,13/&(/45851/0202.10/.*,-/#I&8#&(11,RKA=BE'%$)0/05791/,/2,+-%#$$##$!.2*&&%$**/9>.728113)>B>F5/@>;0.'&44&%(.( A,8!%"')$.!&*"#,*23+ #  2)/00)).,,+*)(*!*1+)12))(&=<%/--2'4*S.,D34&--&+S]BRNRQJyjW4R9*6@Q?QIUL0 :L6;1+6<1A<)?)%#/@ANQD[VVPKKHGLHLLR_`UM>=7AHM=FNE9>>;&6EZ`K#C-RF@LH=.2=@84437/0\5<-V;0"84++PkaXaadddnZ-4P3:;879FNOLOMJDKEC6Cg[!"(*,)(G?8?U>=?<7DDJLIDEFFIJILRQPQSMJNK;@.+:\7U6"9E;;%4D-.FLJH3:2TLJ?@O=60TMH6$-AK-796 .W//,0[UPOPMIMLNORYTUUQRRQXa8A><>ABDEHeU1011452DW9a`vWG<=P`E1JCdP^G2MSRV;:LG1441;2,?KTSIDGVQUZeja^daGtg\dqD9BD]WSWU/7C@:2DKH=A9*"8\W[VSV^]PVGRMJ^F4$")#3"HPLF@2! !!35SijrbM4#!=484):Snpke=<=B5C>%V]8<<%/UJ5$89<-%EL>")UK?.JKB>I9"$(&+;DKMK_@KXIRbRDNU2=FUI).8EQM<116%'(-&%#" &57::!"CC@9:$*%!%.9:,'2BH>I=HMJylfkT^fUV]^lq呒- &ːꓖ叏ȕrSp=I7TΩ^⯁e@Ňɴ**#+;v|4M𱰀љߩfTg=4V>CY+L?qbhfE~¤ށ ,tؔHЬɐб侽šne   5*;!!  7#B,!&Q."&aJ85")Q\ L)(!2'Y~n@"#& &) A"Aas9>@>)>.)|G+5111.,,.--22780,,-)+0027)5>DG:C]MK^hjddnUemowrsos>T`\jlkljflA@nuz~]|\YE9>O~o}I;74*3464@9@?0)($ !""!",""&$$%&%*((%&')**,-,/.,-.---61/0526--6/.10./2116CXXyND=>HObHZ`~sZu|twqlhckfb`dƼlŸWYVF@BF?>CA>qwnikirjxuv|{{n_[]a_]ec^]_a\ff_drua^Zgtt\KSMU`NRSa1,-2969>G;ig_lrqehTPTUTLDTmMQD?D@<;956345;;@:?=>64*-1%$(+28A3.//0+ $&(*)'#)+/../14332342000/1-//.--,.*(+),/.,+*,*'',.,)'#" !  #%&(%%O((+#" &&*,--/0/.()+,'%)+'1# "(&NOHCC@ '$ "" " M$ )+%' .'$%  +    + +  + + + + +     +-%%'# #"#$ .. +!/%" # 8 +   +     + + + +    + + + +  +   +()!$ +'&$176,**3&-'$)&'#$+$" , !%*%&+%($&*#!$$&%! )!.')($#+'$%((()#+,%$#%%,'('## %"!$,*&# "" #)" $*%#&$,93+001349-(!  9"/0$ ($0,)&% # '"  ! #)"""#!!! $&&%!&%$%*6! * #('%$ 0).)%+?,,/-)2079424535655977595255 " )*" &-00, %"!!$"  +"A$""C<:;<8368:>BFBDDADDGKT1<759;=>@;O/$E/KAP60((4DF.<4=59BEXPPSN(3=:1/:;71|}|}|}|}~}|~~~|}||}|#}~~~~~}||~}~|{zzz{||~~|} |}}~}~|}~}~~~~~ ||~|}|}|~|}}{{|}}~{}}~~~}~}~}~~~~}|} ~~}}|{{{| {{|}|}~~}~~|}~}~~)~~~}}~~}}}~~~|}}}~~}}~~}~~|||~}|} Ё}|}~}|}|}|}||}|}~}~~}~~}}~~}}~~~}~~}}~~}}~~}~}~}~}~}~}~}~}|}|}|}|}|}|}|}|}|}|}|}|} |}}|}|||}}}|{z{|{|z{zzz{|}|}|}}|{z{{z{{z{|}|||}||}|}~~   ~~~~ ~}}}~~~ ~ ~~~~}~}~ }~}~~~}~} ~~~}~}~~~}~~}~}~}| ј栩Աθǻꝥ˼ζسּĵǠ˥\Ʋнö̼ɥ̻$  + + 1= "+LC}Ϥ˰ׅs`;C}y*763RU/&0.4KPF+'&9øK6*''! 2B/K !'"鰕ՕȨ˘逓{%!(P:%%'%:߃杷L+0Gl15lz8'!H𜗈ݦq@w"'$!#&bȔń׬䍋çooOת֣ͶϽÚ񊬘ՓЌؔ|ij8$$$'$#$#""#,$###"#!#####$"$%$ $%$!%%%$%$$$%$$%&%%$#$%$$##$$#$% &%%%&%$%%$##%"$#%%$$#$%%$%%$#$%%&%$%$$$%&%&&&%$$%&$$%%%&%%%&&%%$&&'%%&'&&&''( 6衿ѓϝŧ捝ҁ䀁怇ϵ—侎Ͼ[悊ӮſϼƤЗJ-,++,,+,,-+,c-,,---./-,..--,,--..-/0.//0/../01011000///01012101222323232553343224543245565566675456776 !"$##!  +"&+//,(#!!" #%&&%%$##$#$%%'&''(*/10-)((')***+***+,,,+)(**-24552/---,-0542.'KnĹ݀ƾɽѹ´ŽïɸɰҀÿïӣۢĺ̀鍓뉂遛˹¾պκǶ뎱󝼟녝􁍆Ⱥ񪫐ҟʨ’Կ–չ⎕蜩񃌉킋ӒҴ拝򗒡ռѺрοʾ󑮩ʴ׿׹Μ͊􁕙ӗմİȩلֳ͛ҬоDZ˺큖̀Ӏ⢃硏ٽ̲쏂򀂌哖ûچ—棰̑Кⶑ頙ԀK↭΢ʻށԫ񗝫οǓƿǰ:DE?./EXORyq^`\XZaWRb|F:315??/;47H1DqcSKH652%&8$@GOUR?9BG8B<<>5652138PSPRX_1ZYSRR?;111>HMOJ>BMX`UMFMHLvlc_keYOTT`UKO=<=<<==>=>=>=>=>?> ???>>>@?>>>?>?>? +@??>?@???>?@@?@@?@@?@???@@@?@@@A@??@A@@@A@AAA@@A@AA@@@AA@AA@@AA@@?@A@@@AA@@?@?@A@@AA@?@@@?@??@?>@@???@@?@@@A@ ?@@@???@???>?@?@@?>??@?@?>>???@???>>?>>>?>>?>>>?>>>=> =>>==>=>>==<= >===<<==<=<<<=<;<;===<<>=>?=<>?AA@AA>=<;<<<===<=<===<<=>=<==<<=?iQ===>>;D<<===>>=<<<==bsD::<<<===>4TsZI%3>@E.dkildUbIiGmcm~ZcGX][VyM*X7=YJBfdd]\c6*MGCB{JXV;8s:::9d:hS4/T=7&=fTBV9acaAAo~zgVmV`{Xh6]Rc|_(/UagonendhkcKJRsxhEiW7hhgk\WSU2;)(b_6QdTI`lrZ=2K_kF2gHVPHHT:xXB=9;>===>>>??> +?>??>?>???@AAA@@A@ABAAABBBCBCCBBCCCBCDCCCDEEDEFEEEFFFGFGHGIHHGHGIhY`os[ZLHO}~y}pHMC?>=<8778;<@CE?==<97;<:<^HbiGQ~S[VaeqlaiX`wlxqsmtFJLXbjnpd_eGDDylNLxnHQHBDymqKDEG=HI=9BKTI88@>B>??@??>DQGKGB?@CBDJIw~>ipjIShLj]ZJVr^XUdffghhhiihhiijiiijihijihji!hhijijiikkklmmlmmnmlmnnonomonppopqsrsssuvvuvwwvwxxyyz{y{zzz|=|||?}~>@~~?>?@ +AABBDEGHHGFGFGGKRVVUOLJIIJJJKLMNNMLKKLLM#LMMLLLNPQPOONNNOQUWVUQPONOOPQRRQPOPNONMPRTUVVTSQQPRUYYYVRʿ~~|ytnpklsjhorhſPVQTzxwnjhluv|yseac[Z\__cnmdkqkitx}wrrpjVUTchrtKOOPQNSJuqlnjd\`kf]Y]]NLVNUT`UTUNIJOLNPOSVKHMFEDH>985+5<>>;<;=><>8;;987:989658:99676531123345201474310/1.+///.+/+.),+,,+',355599842/(+/,133532986-1Y\[T0.*+-+QLO-$$>:!)$&,3[QGN%&&(++'&+-103;2.-+1/*.&#$$&%+(++)*36(**22908//42)*>?3,,*/&9'3-+%"# ! <5:%"!&!).14/,2/'78'+.,581'!! 1-*.-0/.* #,,,-)(+%3# 0(&($!"">#.*-4<;9))4L(-%@!B/,/;.[XFQ>DcVr}hN.U0'#') 97 "&\CA2C1P?3U%%3P):% *'/45+%@ 17 @?/3'2ASL4A>>9AhLQThYg^OLF4'#$ #"!%%%#"!$$'"$&%#!"# !!$(&'*)(583--O[49P9MP00/30;-78>MOPJJPLKGLOJNLKOD5GM5TQhHNC:3VP=L5>771.-X.Y2.775/-SFKLUX../VQSOKTU/H02MYPRWN?JKRPRGO[WRGQTMOKC8/DWYTKK>DIBDAA6?P8C-91\R,46650XFD/E:,'(@4FTW]W]_`_`jUBTNQVB2977;6NC*O6F7NN'g4Z`UCXAVQOHABG9513//232142\WV]_a^EWO556]-&#(()(LCGC?B>=CCHHHEFFDDGIJKMOQPPHKH9RPLIAAH=:2(/;8@:;9!HO5E=.',I)&R552ZC-+896/UJ($5QMSW;Maon>g7N;2[d(M7@N>]V@3YA/OG065/3/ =>JJOxOPTU\\WbTj;hUT]a[IO7S79*,0:=3 :QMS``_[_bVRjC6',0!"/2ZWNE@)!-7?ilgoYJV;@8:=5;AEdklcT+2BB[CI"+_T;<(#-HeN'08>:+#8S]2FGB8;RLB6M&+)"0DLLICOWJJaWDGX:HERZ3,8DLI2'07'0-.,!"#! #8:77;@"BB?9;&$'0697-1'&&@壩󂆉˨𓄄ˠՅS\?$=C48*@2;4.$4!US+&91 '"aX{k1IX A&XZӓ, +C5 |ttr[WJHP{z}k@@52/--*))),,-./-*)('%)*,0C-=B2:]8WZR\bpmenY`phwnqjoADFYdnovlfjDAAukWRznLVLCGwN987075-3@=C7%#$%#""! &"!%$%'(&&()(+**,+--+.//.-2/11431,-5-110/011178|h?d\Y;CW=jcOPBGdNYꝆĽ||y{~plfhefmfagibƾ~~{{CG@Cxomih`aebdglvuyneb^\SU\STVZZ\eb]dkecnr~qmihb[EA=GFKL`6868<;@JELIUKGFB=?=C?@A@BE:574412(+))+26&-6;4/ #%)***%#+-.../10./,00//.0//1.-/,+)*+,,+*(%(,-*)'&$"!  ""#&&)),*'"!%+()(1[]_U.+&&'%LMF!(' !,VO@@!  &! "! F !'( +  + +  + +     $" %,# )+  +   +#  :&% +";0" + ! +   + +    + + + + +  +  + +  +  + + + %/!,!&(!#$%"!'%$ #$!#! $&**)3'*#.)$(,' "!&'%"$"$&!"*$')%$%(&'!&+)(!))$%!))(!""$$! ##)#)& !($( #*/-1,/01238* *&$*  ')5*0*!..')# !#!("&#!$!# "  !$'$ ""&')('*+++ (')/+.++0--1155533554665675678134'"#"!#& %$-'*$ $!##%(D$#> ==;>?045:>@DADA???AGR6;<<>+/'?4+@& "+1GA칕dNP8dC3;;TRKY;2:ѐa!!2.B+(?8,#$ C&("!/--{ӢǡȖȞҀk%0O@($#$&'-(_Ϭ_$4-⟖ڥܪF-! #$0}嘇ڢڞǐĚ7KЉם䂣蛺DƩ琱ӾѸЎɈh7V$)1/&'%$$$#$""#$$#### ### % %$$$$%$&&%%$&$$%$%&%&%%%&%%$%&%$$$'%$$%%%$#$$&%%&%%&%%%$$%&&%&&%%'%&&%$$''&%%%('%%''('&%''(-л턊ЂȨ۱󀆈೯dЛŶ炋ϼη½Ǹ˯mȽؤ(/,++,+,+,-,.,- ,-../.-.-,,,-.0/0/01/000.0001321122123 +23332343334 6565668787656( !##""  ! !%)-/-*%" !!!""#$&&&%%$%$%$##$&''&&&%&&'+/10,)((()**+***++,,+*)()*,/45530.-,,,/343/)Jdſҽ񂏃ɩȿ·ᬖý·Ӿ¿ϲդ㊔ʻ􄒟˾ʽى뀍򕩯еŹéǧñǸ׭ߚ둘ɞƛᥴ̹ը̅áӌ䌧˱︆ልڳ픰札݁ど͐ڂıѹǭՈʤ늎NJѺʇޝ틚㺼߲ăיŻ̰â勀Ϊ竹ϙ؅ĺ˼𕠘ͼ᫁يȊށХÔޘ坒‰ω۷◊Qƣ烡јϵʑ蹀嬜ɩڃ̸0:CAG.,JZhDrxKSbJOU_XKO>dUW,=E?99HG?srfWK8,'%!254F>^xhldQ<:C7JENOPNSvqglP,2JLB[V5CiN;9?FHhd3-EFDBB09=;]cb&EYKVAVUDF24#.8]6+>EGH[DN[LH__KJYCUHYbR3DN4HD5?F8@:=F1=B?-8BHSVSW[VVYSJ@25..5DETLGBFO_\QJIKJSnbfgiaO_L`OD>=<==>= <==>>==>>>=>?>>?> ???>>???>?>>???>? +@@>???@?@?@?>?@@??@A?@??@AA@A @AA@AA@AA@@A(@A@@AAA@A@@AAB@@AA@@@ABA@@@AAA@@ABBAA@AA@A@A@A@@AAA@AA@A@@@A@A@A@?@@A@@A@?@A@@@?@0??@???@?@A?@@?@??@?@@??@@@???@>??>>?>>>??>??>???>=> =>=>==>==>>=<=<=>=?@ ?>@ABDCAA>=>=>=>>=>>>=>==>>>===>=>>==>=>=>>=>@W9>==>>?<=>?=>=>==?`45[B>=>?a6K:?vrSn701?<;Lr?Or{\;\[9;zdE^f78V\\ewGDQrdeY\omnlBG=mbh_hihhhihifhiiijhh4344544i4445544h554i4j5445545456j44545656556656565565656565656556l5k5iji55j4j55jjijii5iijiiji hhiigghhihggfhggfggghghhgghhhgghgefgfgihhighhhggghiijiijhiijijlkjklkkl6lm7n66mm776677877678 9889:999:9:9:;:;< ;<===<<=<=<= >>==>?>>>?>?>?>@?>?@?@AABAA@@A BAABBBABABCBCDEDDEFEFEFGFHHGGHGGGHGGHGHHHIHIIIHJTUlucVPJNyuwgan|z}BC7:;<;<989:9=D*LEm^{vHLOJ}vH?@EDI@2hAQ^E977=@A"$!:6256:A7322134688678:9;:<=>>==>>>@?=;==><<@KLIFE>@BCBDE?@8LiQfjoRq\KS^SpqCgghhi)hijijjjijjkihhiijhijiihijjjiiikijlmmonomnmonpnnoppqprrqqssrstusutwvwywxwvwxyyz{y{zz{y|/~?>>???@???@@?@@@AAABCCDGGGFHFEFGGFFFHGIOSVURMJI JJKMONMKKKLLMLLLMLNOPQPONMNNNRUVWSQNOPQQPOONNMMNNNOOQSVVVTRQQPRTXYYVS½~{}{zslmpoooffliȺ`]RXNMLtxffgdpxzlic\\^cYb`_`gqtkvuqg_XZQKOJQQF^xEEJHHGHvre`lcd]d_eea^]^TKNLKUh_HLLMHPPUQ@?F\P5>HEC676:9)8&,B@/9:789<;768,4>@>;=;:=<;9:::9::8665576786655642`[0210/25720/1/3,,.)'+)))&'(*++('/4144=;422Y*76//0*/5230,U[XVNM.('.2(NP.+$@A&'&&-WH>H+,/.32534>.),2,2/.,(*+G$$%((%'&'3.-%/0796C?;9706:.385*2,O72;+%"#)""$./4-=*2-86%*/'-"+)$%#,+,!"!.&1 #!//--0/.#+++,+)0+;("69$1:7>CA265%#<@+$=A*$>F&ABN-<0UgS\qkLU$..!7#/5=%8*+(,K/>0TL077.1?/>5. 9Q(& ;D0D42%AKQ?"=.RI=DL,L;/1C#J89%1VA=('C9-8+47*99631O24-.[WF6Z-:/]^1.,VQUPOR>FIMNOTOTTMPQNS\95GGDDACDH4f^b15:55I=HGN_m=N=IM;84'FY7;P[NL<2K3@:MC41=339+GTIKQSSUY]L5BHg5c}|OX]CF_T\abUM9<874?#( /<;:! ?Jmh`gF'HJ9PJ!6eI,*,:;[Z+38844!))LYZ,A9C1IQEE.+.W3&@IMKGMWNJ]\IHUDQFW]I0@.>9%-6(.+.5 +10#*1;:48>4,!-/<63/6=IC8;AHNUpeikmdP_LfMń㗔ڶƪԜbׯ鄉tnjTХÏ]7 6ÊݡЋ1DA$:Be-25%C&i0WXUʑ? 9c6ʸٌ{B0L[S`dё͢ƕ<(/Q@.(/,#'66WJ $' +$?8w6S*18% 2#( '%! 1# ZlX-  &mM",Z4wӇƼ& l5u}zdTMIM~nhnywz<8+--+*))(&'&&'-)$(&&&'*,0L1>8G1uW]\lhiZ]nesgollwAIpbpunqjlz?;l_uPRUQK63646-%`=C5'"!&&$"""!#&#$%%$$&&('&'*,+,,,-.///00...-.0131/-100//-1221350p;3>TCJT]@s_PEGOFbs~ގI4o瑆ǽ~|zvxmicfghijbagcÿRQ{FJA>|sn8g`hZdV\`_lw{ysng]QRSPTV\TYVXZ`hjfpljaVOPD=?9<90CX]00M43124`YXRR_ZXS[QRNEACF@.58;CM13CA??;;<=$V4),#0967DK)2',/.1.+-$1801%4*2*4'-GLOTUOSUYF7AI`8dOUYADXJSWXK?14220-|}|}|}|}|}|}|}}|||~~~~}|}|}~.~}~}}||{}}~}|}~~~z|~~}~~~}}}||}}|~~~}}}||} ~~~~}~~~~~}~~~~~~~|}}|{|{|{{|} |}}~~~~~~~~|{{|{z{{|{~{|{{|{|||~~}~}~}~}~}~~}||}~~~~~}|}~~~} + ؁}|}|}~}~}|}|}|}|}|}~}~}~}}~}~}}~~~}~}~}}}~}~}|}}||}|}|}|}||}}}||}|}|}|}|}|||}}|}|}|}||}||}|}|{zyz{{{z{|{z{{{z{z{{|{z{}|}~~}~~~~ ~~} ~~~}}~~~~ ~~}}~~~}~~~~~}~}~~}|}|}| ͨɌܚʸÕɷ򤚚кȾ̮ŢܵѶݳ[Ƙ򸥯Ƿ̽нѶõ-  +  3A(&!"I>&#$")Bgu[TU~w`eސI?v¸Q- )#NjP2/7>:9ƿd'" ,7+"++~̳ѶڨӀH&9R?;1" )%$#̍O0=o<)1%Prй9M@:, 3#!# '*9'cҝŜȑ*#0@'0-l͒ӪѳˇJȍ˥Ϧ춀ަɛݘ՛nc #{lc^*$###$$$%$#$#$%$$%%%&&&%&%%$%&%&%&%$%%%$% $$%&%##$&'&%'%&%&%&&&%&'&%&&'%&&&(&'&&'''&(''&''  +(ĵ􉏄ዖԶ镍Ծ۪ڳdဏ׾í½žŐ؅݄z..,+,++*+,,,++- ,,-...,,--./.-,,-..010/.022110/122202332433535544565665677868767 !!""!  !"(,-.+&"!!!"!"##%&%$#$%%&%$##$&('&$%'+/0/,)(()**)***++,*)())+.25530..,++.134/*Lb񋝮ĵ󀉉ȀƶȮŽȮ焅͵̶Ժô얤ijʹѼɾ߸󉗖󌢐ޏºǥǫ犌􏛍뎧䌩Ѫ̿ȉ´Δ“Ҵ֌ؽؗԱΪƣ׹̢ܓ煍·ʚʟЅȏſ̴靪թ澝腗ȱĽɴĀ𹖪¿лҔưɿƲ潫Ͻ썀ľżԪ׎ٌ栗jȺ킃죲ܵ낁˺ҼśƻчȄȿ՞𚣧牂̜ܤΚD”ԒŦ񾯱ńɢ/);ET;/B9SG2:cEPJU^mT^gCU//:F>79SEBpo]QA2#+'2;??|thkWAP19JAWdkI%JMRTT[OA?4)#'81?*8BFGVIIYQGVaNFPFGDWZ_56L.NQ875?;6:D7?LOAGBESNVQ[WHSTOC=>==>=>?>?>>? >???@?>>??@? +@?@?@@???@?@@@?@@@?@!A@@AA@@A@?@?@@@AA?@@@AA@@A@@@AA@@A@AABBA@@AAABAABAABAAABA@ABBABAAB@ABAA@@ABAABABABAAA@A@@AA@A@A@@@AA@@A@A@A@AA@ AAA?@@A@???@??@?@?>?>>?>>>?>=?>>?>=>>=>>==>>>=>==>>=>ACCDBA@??@BCCBA?=>=>==>=>>>=>=>>=>=>?>>>?R@=>B8@>6;>=>>>B`tBXlB?ta@>=>zEhc+=b=8PTk}}xssʹyqqd6df]JR2eWvN6:qgj=5=@.4HUXBd?<67:KNpdKEZHRWo<|ićM_G_l{n|M\Y{TQӯihhijji4jjj4554445554544555j5k5k5j565 65656566655656565656656656566k5565j55j5jkk5ij5jjikjijjihiiijiiihhih ghgijhfhihgghgihigghhhigfghihijhhhgijjiiijjhjikiijljjkklklml 676lmnn76787767899899889:9:9:::;:;;;<<;<<;<<;<=<=>=> ?>?>???@@?@?@ABA BABBABBCCCBCDEEEDDEDEEEDEEFDDEFEEFFGFFFGGFGHGHHGGGHGHIHIIIHHIILCevfWEJQUvuqdhx>A:9;:=><;;:;:<<=!(#>>E5%',*$FJ;WzPiiX_k{wj\\b_juutryI9ISZosofem|{~}wFxxKLSRmrF@<9MH3-v5IWA778;>A!'&A?4357?400133445588649:;=;=??@@BA@?A<;<><>>?@?@???@ABBCBDEGHGFFGFFGGF)HNRTUSNJJJIJIKKKMNMMLKKLLMNNMNNMMMLNOPPOMNQTVVRPOONNNOOQPPNMNMNNNPRUVUTQQPOPRVYXVS¹|wywzuoxvpjhdghjgľ÷aWYZS[WZzpkfrwxsqvxpjb^]b`tqdgfomchic}z[^]YZZ\PLGOe[htrk>@EFCBF}upog_\ba\cgp_NLVQQNXJPKELGBIMB930102.,*&),(&%$"#%()((()*/)#+.)*@>E<<-+%,0.6+03641,87.0%$$&!>)'%+#6"4&-%0"!#?8:<(&$-((>')5!# ! "..,-0.!0,73.-+(%0&++'"% >+?)/6%#"*53$762/>)..7%1?E6>,N6tWmgVC8>3:*#*1)&8,'4#(%720/4'/*/2@/%&6#(&/!=,B-!!$6Ne,"=FIL\I-`t`H6FbhW`vC_?=Y,I;7=!"%%!  !%"%$##!# "!$%*',2S;94/ZC6@N144023456B-9?DKA?<8=@BHQ-,0021013221/00.1465/31743<77:;51\12651023TD>GGPMLHHJPGKRQII8IE$$&)PLHIJIC==?ABDDCEGJMLOMOPJNP4X0TD)KF8L9WWcA/- 0GJ7#6J22/E9U526+,8:401/UP2/03Z026RO/X0`1ZYTVRQO5=CIMNRORTQSNORX>/A^FGEFGEGD`^]`_247JDa@a_lwORBMI<_(YE>>U\W^SAS9P>BH59641V4ObNSXY\c_eYcAqmOhRNTqM@U\b`_SYM?IKG-1)4E,#-$408@gCMMepWaoQU ,9)6*0[cUL=* + *0<{qor\EI,3?3??40BdWW[Z,,IM:MH4G_9*A;P`:&-7:=-!&*=Qc?-7/ (+;(6FKKMJVTJWaMDLGBDV[V!#>(=H-)+2.(,5(/=A13,0<473>@7??<3(-&)=221+@B589>MHQXSN--00,,Z2\Z[]\UUVVOOPTD67A>BBMAIB>D?<<++,+%2H2FBHM51&074O!># '598690'7+?*-+'5WMTWWYZWZ`jCjsXxg`dNARVYVXKP>4;<4 |} ~~~}}|}}}|}}||{|}|}|}|}|}|} }|<||}~~}~~}~}~}}~}~}||}|}|~}}}~~}|{|~~}~}|~~~~|}||}~}~}~}}~~~|~ }|~~~}|{|{|{{}~~~~~~}~~~~~~~}}}}{ |~~~}~~~|}||}~}~}~ +}}~~~|~~}}~ }}~~~}~~}}}~~}}}~~~ׁ  ܁}|}|}~}~}}~~|}|}|}|}~}|~}~}}}~}~}~~~}~}~}~}~}~}|}|}|}|}|}|}}}|||}|}|}|}|}|}|}|}|}|}|}|}|}|{z{|{{{zzz{z{{{||{|||{{{z{z{z|{|{zz{z +{z{{z{{|||}|}~~}}~~~~ ~}~~~~~~}~}~}~~~}}}~}~~~}||}}|}|}| ֥ƑŝѫѷЗͿʼݪߧYǦǽǝŧȹòŶſ԰ұźE   .#'"&+#0))(#0`L0JSrʇ΄~үnV=8B/03jځԎC*(+AƢb?)#&)1N('#!#L>,# #&ˈι愶ί怳QHrU+CP1:(%(@ŝX3:$#K סa28;'=$'(%4H"Nمԋ…T7,:=(*RMw׊ވŢBҐӎ랄˃{薖省ɷ푦?V|ۉ1%$"# $$$##$  D&&&'&%%&'%%%&%%&&&%&&%&%&%''%$%&&&$#$%('&&%%'''$&%%%&&&%&'('''(''&%%&&&'&'&('''% _뉇ѐƖ۽Ն۷ź솅ѽbҙŤ˳¾λݗ숯ǹЧŰ/--,-,---.---///.---./.-//../000//1001210010220101212112/3223432345222554654575676458656555 !"! "&+-.,&"!!!"""##$%'&%$$$#$%$%&%$&'''&%%%$$'*.0/*('()**)***,,,++**)(()+-24420/-,++,0341*Pnʼʻü߀߁ԿȵɹȩȾDzŭ̹¸Ŝڋ͸ڕȱᐦ̽¡񍌢郣ۊぷ뉓ôˇ񶔪ׯ€▜ǨƲߓꩪ㝒򰡡꒨ƿ؟ˀķꈝȚ̸΂ѮȺŚ홉졝⬛Ǜ판믦凁ါݪ͸ϸҳކЊΰſ߮Ṵ׌Ǹɍ灀ؕħͅ־ߪҽʻå賘ˬјȯզˉֻۭҢR孇󀔻‰םРȱⳂИϹڬ쒪Ȟ&6O[1<6dIF*QE@X,E@OewOxpJ)*BS;49V4QqdRE<)9*)"'F:WzjmdNBC9I;7A82Dc^_fdM.+EZOIc6B\^9'KTJhXWCAMEED7:EQ!5k-8(J]Rb\KD>3'$518+,BFGULIWTAL]SGJJ;:lYm<(C3BOF7-IH><;?>?>@?>?@? +@@@??@??@?@?@@@??@?@AA@A@A?AAABA @@ABB@ABCABBAABCFFCABAABABABABAABABBABAAABBBAAABBAABBABAB CCCBBABBABBAABABAABA@AABAABABABAA@ABAABBAABA@AB@@@AA@A @A@A@@@AA@AAB@?@A@A@@AAA@@@A@@?@@@A?@?@?>>>?>??>??>>???>>>?>?>=>=>"@ABBCCC@>??ABBBA?>>???>>>?>>>?>???>?>?>??>?>?>?C_M>?A@BHfRX<=>>??9;>[IQ)/kMOFDFG[R,O%4]c=?>BTidMq|Zj{s\`xUU?bQaLAXlD{EAE;rlbmXTsia.3?KxLJlI9@JX`K686AD0@@F4&$V_JWuRKcԝRPS~mmx埥gzmklk55j565545 kllkk545556445k665656 7776556766656566567657657656l6k66j45ljjjijjijiiijkjihhih*iighghhhiiighgjiihgiiihijhiiihihhhihijjiijilkjjkiijjkjkkmlllmlmmlmm6m7888n7 877888998898989:::9:;:;:::;;<<;<<;;;< =<<<=<>>===>=>=>>=??>>??>?>??@??@ ?@A@AA@AABBABAC DDCCDDCCDCCD EEDEEFEEFEFEFGFEEGGFG +FGGGHHIHHGHGHIHHJHHIKzpZPZTTTGGzx?=BF<7:@=;<=<;?:=@4=!"!@69#'('&%'MCOBy-dQpzxta[_acmsvrl>7Rp\o{pj`XpGBrEFvuUVmp|DA=;OE,-5RMC898\8>@G''H84134@7122423455767589<=?>@@A@?=<<;:9<>::BMHDBAA?CHCDG}]UqWjNxEp]KOOPpoZuehihiijkjk5llkllkklkkkjkiklkjkjijjkmmmnoqomnoopppoqpoqopqoqrrrpsruutuvvxvvxxwvwxyzyqzz{}}?||?|}}|>>?@???@@?@@@AABBBCCDEFGGFFEFFFGFFEFFKPSUSOKJJJIJJKLLMNMLLJKKLLLNNNMMMLMNNOOONNONMOQTWURQONMMNOPPPONMNORSUTSQONMPPTVWWR~zytwwy|wpjddhhgfʾbZX]^]\[^^_fȭ|zwqx{ldkx{w}~~vkkgglzzsql`cd^UUgR\gxn^gbfXOxelYX_Z]bdko?~~EHyqc\cfa_gg_VNOMIODJPPshB=<<<:;688855646555852145554478742851/000120,,00.*)-,-.50))()08=89=?840VUJ,50(#)/,62.SFEZYQ025484/[X-,&%#'(*#&''*+,++,=<:B<107/12,,+))0*,+,0022$%.,.1+!0P624%2D@EDFDJ5GHLYQGLJLW<43F8V202PPU-,541VLTTV\-H81M3+NTVS2/SDKJSSMWWUVJPXNXTTI<[M70IJPNPGLUVvscdaYSVTOHD<99<2=WO9DK7E! GSLE8PG4NG694+45-/0))*/2*S00-21/\^0_^\RPWXSZg\]]e:WNVK_3?@7(+(.:ENW021021343110./0016783/32291667200.V034^0*@/0[XVR[RG@?69=INQXRVB7&#(MDFBDBA>1,38<43:JT>28B*7@R^Q@(;>04//=9.TLAD36.6?<851/,-QNTV0[2PQ8A0.^3.0ZUWTL18=7;@JPPTTRLLPVA^>HIKQGHD48YZX[\15NNP:Jbv@@WWZ[`F2E4FAE430')ISKP;TVQYndezNe:c[\S`j~MS[Y@K^OLNG8 9D!&5)01I3+F-XR\q[{93B'!8?[ZKA6  +30YxlujT@A74,)###/..&D>>@:BKF_{|sejdh]\pHJ]}ƔWYɕې篨򟸊팔l^N9n`@nA`[Lgʪޢۑa˱i&"!\ۇН屫ѵߴ;+"LÔ"& C31%.?z90HGE/ǕʆęϭN7EP66C$wĿZJ!%%/$VsMV#9a +mY"Haj̣کꚏR!@\.2m7!%' s]%0 (g&Ou}d3~,,2N,,?`Tޖl8titXMSMOMBBqp;6894.,.,)'(''*$%#,1<0k]AiVsxe_aaakptth9.KibwwphfwE@pEG}__u{>60)7+!*?5,(%#"%"$'$" (#$%&'&$'(&()-+-,//21433211//123672/250/-,,./4126le\IYJN=^:YMCCC>l].RmܹPUˉŹzwssypehljc```eeeaTMHMNNONQRT[~{mxnmorclac_YXYW`jdbjw|uvrlbWUUW\fhbfdZ^]WPP`LW_pbQXTVKBfZZJJOFEIGMK+SS-1W`chlrlgXPVTIFNOI?8>>AG7W:-&+*+*&6>0;EQ'*2/ A75.8:)51555)!4)4*$- &$7-RWPVg[^y_d=rnkdozJNTS;KTA86/!} +~~~}}~~}}|{|}|}|||}|}|}~~}}}~}|}~ ~|}|}}~~~}|}~}}|}~{~|~}}{|{|}}}||}~}~{|~}|}$~~}}}~~~}}~}|||~~}}~~}~~~}~|{}||{{{|{||{}}{{}|||~}~~~}+~~~~}{~~}}|{{|||{{||~~}|}}~~~~}~}~~{|{|}|}~}}}~~}~}|}}}|}~}~~~~ہငف~}|}|}~~~}}}~}}|}|}}||}}|}|}~}|~}~}}}~}~~}~~~}~}~}~}~}|}~}}~~}|}|}|}|}|}|}|}}}|}|}}||}|}|}}|}||}||}}|}|}|}|||{{z {||{{zz{{{z{{|{|{z{zz{zz{|{z{{zzzyz{||}|}|}~~~}~~~~~~~ + +~}~~~~~~}~~~}|}~~~~}|~}~}|||}}|} Ŵ꺻Ëᩖ߷񷪰ûҩٰͭԸ툊뢙Yô¾üóůĻv!    !(+*,$0!=2,54)ఫšݟסX3AfsNH3A*,%N4Z,#('d3$%4&ea3;0%Dee^+"'"%Cݍؕ聜ߵȉur\ere9) !'=$'&"-P;w⯂ޡ̓PP^J-0()'B9&zҀƐǍưúıj5 !#K(T՝‹Gɓ猝͊n|̵Þvԯ5&#$#%% +$ &&&%&%&'%%%&&%&%%&%&%&'&%&&%%&%%&('&&'&&'&%&('&%%& %%&'((('((''&'' 4s򇋍􇖝ϠñڻNJћ^ԄƱķͺ㈿ῢm3.-,,,-.-.-.-. /.///00///0//0 2111/0001001211222123 4334454434654656654466566+ !""   !#(.-,)$"! !"###$%''%$ %%$$%#$$$%''(&%%$$$%'*-/.*&'()*)*+*)++*))(((*,/2221.-,+*,.231-RoɽŽ版ـտ¹ŵȶ³˽ŽƽŽƸ͠ǷµdzϾĻⲹ􆟮ǻļɹކ̒土ɉğأܛƶފ돫ϧʨÈॲιفֵ°ĝ͜ì֔Ӂ׸ͽå󂘠׉瀏Ț慆ߘӱԀɈⅇîڒζ㱦ʵ׽ɽĿؽŲ䋞̱۽Йöſο;ϰňԬ䙄١豷ٚʴ׻̐詗Ş🗆۴Ǘ慆㊈8ߡ愇䆎ظӘȹܻݔҿ!%6SM3^_KN?5;v@V79SNQjYDES-(.JT@3@P7MbXI@4>--&(8C?BiirshU92CH8?969NP_fe[F@/EeHNXHCKMeXON@!)3UH+:S;S7UWRa`GF9,#,732;CD<;BKGCEDMXPWTTSMAEC=/27J?2:E@OXV\OELNJdwypbeYZO\iFFL_\;> ???>>>??>?@?@?@A@A@A@ABABABABABBAAABABBBABBBABCDEGIFBABCBCBCBCCBCBCBCBCBCBBABBCCDGDCBBBCBCBABCABABABABA BAA@AABABB@ABABA@A@A@A@AAA?@A@?@?@@?>?>?>?>??>>>?>???>>?>?>??@?@@BA@?>>?@@>>>?@???>?>?@>X9?@{HA<[U^D08@?@?@A`=>=>>?>??>?@?@@A@A@@ABCBBCBCBC BCCDCDEDEDEDEEEDEFGFGFHGHHHGHGGIIHHHIHIHHIIJJJIIJIJIJIIwou`aNVmSTSNKB@B>FF?<=;647;;:;:@7="#$"!8!&)*&''G*C_lvZCfexvk^\Ye\mqyil@FO`hskg]^qpFCwyWYs}?A@@IC-.4OLi@8969<%'%F67465;614353357656:8;<==?>?7<9<<9<;=?:;>PJA@?>>FFAAGYTR`@F[qp[QNPP~Cqegiiijjk,lllkjllkkkllkkllkjjklkklkkkjkklnnnmmnponooqqp-ooqrqrrsrsrttsstuuuvwvxvwxyyywxyxxzzz{}}}||}}??@A BABCDEGHGGEFGEFEGINTTTPLJIIJIJJJKMLK'LLMMMNMNMMNOOPOONNNMNORUVTROOMMLLNOPONOMLNOOMNNQTTTSQPNNNPRVWWV{}xtxzu}|z}vnrjheeefffhɼùg[ZUY\cb^]_}xusnrnspu~yw}~h`]\Sfiwzpg^lvra]_Z`^Tckb[VUXSMJNR_nwAxmd^_plu}ti_ZVOUSRTa]W@:=;@:>626;F1+*B>?>><;;6676356574337741/0496762033510/22210..010.+((-431'& /7=;39:52.TLJF3.$!'0-.50,VXU_a154-./,-Y),*E$'*((&+*,++-.+),/997@H<5254621144-/3981972.30'&/(,*./,5++$%).++*0-(%+)4>:*'')/)$4"("@G-27'"%+BBE3"+('/#$&+*%$!/("#0" ! !( 1-+-.,//10,//5 (*.'.5*1#"&-4?4#1710"%&<<,9='%'.#322"kpRPh;wORAFUP9HmG>3&6:VNEH/=*5)$! "!#%$#%()& "(%(*+?W8645.UJ)1LXNXZ.0.[57\/I9;HJB:@E8D%VCZVWQNAHK[890./Y08@.-.14S;959>/LRi*##9-OJEFLF?43PW26PL/Q,998?;NLH/MH;88XINM_WSPVLUK@/MPZ+R=,M54VIR721120.,QF.4/)P+-/12/XSYXRKJ;=EABHC?PUSa1ZYSGE:?.=JSFRQV-.-,..-VW/.///1268861256642=74.0../31/X;C82.[XRPRQSNJCMHME>EGIFF<0=31!BB@537\;5VKT;]F]Q8)+-'*-.610352_S=DF&-2>6$@>@?7[PEB@<7]\N2&>:8344.VOHHMRWT#*K^0(('*)+,WRM=2675903!GSUOKJNVIX@JJNYT@1_SX[QRQ3dMK7=hPhA=Fd-! +:8!52'*,(.T-<)9e`biRKG9D,'2"6(&/)9-+D"8#@A@;/30+#/(#-)6EENC:AFD^vyrfi^\U^lGJXቔ $ԇ˖޺ɗݓط߄شX87@7P͂;6V>?l̵کӀԝʁԊ*)+5ksёׄ䵺1L>FWRe[j55:?]ę˂ +,q7vԔׄaA_:3(瀀޸׮񈨐76>EEv"GJ&멅`\JRhLOLEB;983860,)'#!#$%"#"%+/FOZDOsh|pb^\e[kqyhg9@Janzqmdmz{l|Gaaz950,0)%80P4(%"$"(##!# $#"%$&$$%&(()/+-.0/1.21022. /0143460/,41,r.34106@LDN53FXdNm@BCDm~h?Ίƹ{{wrwwtxvohhc_c``__`bdcd}XNLJNQXVTRW~wx|spmrlig`[ZZ^Z\[[cfpmszxqignjhmnVRSUM]^mpic[iqm[TVOTRGV\VOMJLE>9<=DLR,WX]gmqtnfb[VVe^ddXI@A@R=HHJRH6 1'),&'Q$.$523T%,$<, !4VSU_\[FRjfjx{m\rL\RCwJHH92$ }~~~~}|}|}|}~}|}}|}~~~}|~} ~}}|}~}{}|~}}{}~~|}~~{}~|}||}~}~~~|} |}}||}}~~~}~} ~~}}}~~|}~~~~~}|}{| {||{z|}{|}~~}}~}{{||~}~}|||}{{|~}}|}|}~}}~}}~} ~}||}|}}}~}}}~~~~}~|}}~~~}~~~}~~Ԁ}~}~}~}||{|}|}|}|}~} ~}~~}~}}}~~~}~}~~~遄~}~}~}~}~}|}|}|}|}|}}}|}|}}}||}|}|}|}|}|}}}|||}|}|{{zzz{zz{|{{zz{ zz{zz{|||}||{|{{{z{|}|}~  ~~~~~~ ~~ +~~}~~}~~~~}~}|}~ ~~~}~~~~~}}~~}~~}||}|}|} ଞρŽҫΦŲƺ֧ʶ½݆Լϑɭ폜Vȫ¿ǸƾոǺq(   !&!&"(_IB::L>LD@& !Ayނ侍QS0XyWK$@XGJ#1% 7Ċΰ@&)J.Lf]*J/'*2#(U򍅅pd玻̱jH4/|Ę_,!!!) &'!,sΫۖ9JXEH=#$ $'"Ṥڻꀋ֯۠X!1!%,*Cיóث=8ܶН;˲͙ՋşkOՖѵ䩲C'$#% &'&&'%%&&'&%$%&%$&&%&%&%&%.&&%&''&'&'&&'&''&'(('''&%%&((&&(''('&'''&') + +þֲ݄ë鋓ˢ͵䙨ӫᱝXՁȷ¹Ž稸ĺȊԴl3/,--...-,-//.---../.-...0/00/0.00.-/10/01110/00/00010002.10124543444333454435645456455667  "!!!  "&*-,*&"!! ""##$'('$##$##$ ##""#$&&'%%$ %'+//-)&'())*)))*+*)))'()*-1221/.,,+,-121.Pgƹͷ؂ʀǯýŲغа©􌃕€ѯޮݒ嗩ۉ򆟦탥˰¿۰޶ɱĪ🔍󖖤لɵ׶ԯȕƒ໌쎏ڤϻӁȢʳٽͿΘϘևżȽ새򝕑ꏬ莊˼ǵ膡캖ꀀ܃ꂠǶƎۆ׽㸇󂄀ǻĪø㲫܌֖Ȱ՘˵偃ª􅋄ˌǤÊƈáߒҦƓݥۄ깬тġčϧȞÅɹڌ8ü嗁ԋݔδ犃ϛ%/ZG:`?[D?=G5?FZRSM``@F:',1VYD@?O-NXE97Q2.'(/0GBUovpp\I^5F@6A+.=GSajfUH=8DTL]V4S`?;FAJdT[UJ+&<55E@FUGMTRXVZQMEC@:33;D;4:>@MW\dKBGHHfsxk`c[]Pa^FFQc?d>=>??@??>@@?@@@?@?@@@??@@A@A @A@AAA@A@A@AAABCBBAAA@ABAAABABCCBBAB ABCCCABCBBBABCDCEGHFCBCBCCBCBBCCCDBCBBCBBCBBCBCCCBCBCBCBCGFECDCBBCBCBBBCCCBCCCBBABBCBCCBCABABCBABCBABABACBA +BBAAABAAABA @AA@@AAA@@A@A@?@?@ ??@???@???@@?@??>??@>?)>>??>>?@???A@@?>>@@???@@AAA@?>?@@@??@AABA?@?@?/@?AA@@?@@@ABUB@??A?@@@??@Cb`HkRIXWGDHFyBDC[A@@@?B|K;c[IL_HMN^*AA>?ADDBAA[nnhDs`nehkuly918E>fOYuPZXFGX3[A`53K@;DzbI3NXz28Pk67nTND.}RDKCt\Xgstv~Op_Kk{Oy7\]iZrYU-t[RaSuj]T?6h2EA?c[qT$Hyg444`i:C){PUcOPUAfX4G9?L9:>]NSVK`snmOQUQtb98rdkytҸjxV~pk5k5j6k566656665676777656767676777676 +7776677677676767 +676677677676777676777666m7k65576l6 5k55kklmkllkjkijijijijjjlijiijkjkjiiiji jijjijjlkjijkljkjljlklmmlkll6nmmm7m67 888787899889:;;;::; <;;<;<;<<<;<=>===>>=>?>?@@@?@?@@??A@@A@@@?A@ABBABCDDCCDDDCDEEEFDE$FFFEEFFFGFFGFGFFGGGFGGGHHGHGHHHGIHHHI JIIHHIJJIIIJ+LVta`^V\TKKLHGBAADFB@?>51034627:;1!()&%#"')*+,1Fljz8xZpylYWVY`]qpdn==JJ`ld_ecj}DFyZxyCAE>?@>=>:98:<;>@6;?MRH???=AGC?;B{qdINKQkkevKRSbMmynwrdiijjkllmllkmlklkkmmk.jlllmklmkmllkknmponooopoqqpnoqppqqrqqrqrrsstrtv wwwxxwwx{ywx=z=yz{{{||>=||}~???@?AAA@A@@AAABCCDEGGIGEEFGFFGFHKPRTRLJJIIJJIKKMMNOLLKKKL +MLMMMLMMNPOMNMMPTWUTQONONLNONMMMNLMMMPSSTSPONNMOQUWWU|zwzwtsv{v{wpmijdigkje\`]|{y|vwzxx}y~{xrngeiolor}~xvclqo|i|ikg]dg]RWSV\bpnk`ZWSLMIDECCHMVbjnstsv{vxrocY\_kh_VQRRUUPI>uusllg>37343;I5,+(@>;:7885367564666535320753210021/.5512.0/121//**(+'(+#"*3:;8*-0,/+MND%2) *-4/6893aZTZa374(+'ETQ&.+FA#)((())()++.,+:UP?B=6/150<84363%.*&&'.8)+83F,0-(&24")K1/5701%"63>>2%$(CJ7<49)/@7HeM>]D5+&22+2 &#53%! )'>6*.73#-1(B;0;:14<+3$%%!2-K90<`P9>3TAM$GF\HKOP=MOGqaT8R@+($%!  " !#%%")%$""&"' :3S][2ZKJHGPV-B72.0/35-1.WR60,A70N*,<%N".4,0/+-474,KOYWO-4&+S=2/,X]TSHORJSQSOSPUNRQKRORC .4GQWWROHPXWVYaeVSMPTWM@87@@+13;4PS80%!FTOMKNI>;*L-+-XC\6B2.K5=?<;@26]Y[NCQa?OOTROFL??2F;H;886D="SM@C209(jW5DOXSHAM,IJNJE^V-:7Q&@;4+,:3563ZRLCNS+-O*).1,+UKMA()A:DAAC?>73/YT/4QPMILSS3AFIMMOF\MMQVXYWPRUM8BnK]qABdUL?>X##WDGBDQ`iOUUBT2+&3% 7)40C:][cb[URTOwlzM|KRKoV`6CYeKXYWJC/%<,#30&'%4&*/BJbfwcHE1EK/$(48G@62@04MnzwyfJW-93,5""-:J]gbQ=-$6L@PQ&;L4'2.8NJLE2+'&L,$964">FB+++2,(BKNKKYGGSVFC@+Be`fG'JWaU@'Q/3:>2&&938C4786?BF>81//*"!(/%#(+5@IWD8>?B_pumdga^Sb`IK_s2Gȗڬܙͯﱪ̒x^50$vkTpM+:=2*@1텗䇩֫Ď8$#(:xǵͪˠH!Ib\SXuK7E.JέߐEzٍ}܃ճ"'8|jې򢂷K* ,鑊ݸc/37,Ke*0 .1 21wzoV8gG9).{_̰؊ͬ&/2 fSW*+.(#-%&& >&3$>$\^0,4!4+57A`d>/v +bk^ZRYPEFF@?867883-*'!  -zoOQcU^{s^ZY\^]rqdj87GFeuidmqtAy{G`|}750(+' )=9?2'%$!!(-+! #""$$%&$%(++*-++.11.,12033/-/33143.,14/+-..2630-2`uyeM=;7?=<4dhha_[5+.)('/6&!36;;8.#'+-./-I=153/-,/-+*(**((+**+),+**)*+*).)))'$#'&""()''!!!%)&%'# ; !$#!&$((PPF (&,-0-a]XZd20+"" CUQ# 4.$84%&# %"! !#$+2 ##"#! +     +   +   !*" !,,$)'"&*# *&$ +  +#(! + 0UF)-",       + + +  + +    + +    (%/"*)%*("* *.*+" $'!*(#' "&% #&+('!%'"'''%'$&"&% $"!"%'&## %)()+/2*($%((""$!!  ''*,-+%,2")--,("& ""7-"*-+%!)##'$,% &#! #! "$,//*&& !&"$$!$)%"$'%##$*#&$&#! #$'('&%! $% $/)''%#,)+"/"--,)*+'%$&'$)"# ", &* #;B50!(&CB@<=DI/=BEHE>)1%#%++*(#%N)817X7AK'&:1M75J-"+/5<+43(:* + &,PV_ZTQX`RvrSSVKm\i>E]qNPMD5+}~~~}|}|}|}~}~}|}}}|}(}}|||}|}}}~}}|}~|{z}}}|}{||}~|}~~}~~}"||}~~~~|||}}~~|}~}}~~}}~}|}~~} +|~}~~}||z|{|||{{z{{|{|z|}}~}~~~}}}~|{}~|}}|{{}~~~|~|} ~~~}}}~~}|}~}~}~~}~}~}}||}~~|}}~~~~~~~}~ Ҁ}~~}|{|}|}||}|}~}|~~~}~}~~}~~ځ~}~}~}~}~}|}|}|}|}|}|||}}}||}|}|}|}||}}|}}|}}}||}|}}||}}|}|}|||}|}| {{|{zz{{{zz{z{||{{|{|{z{zz{{|{z{zzz{z{|}|}~~~~~~~~ +~~}}~~ ~~~~~~}~~}~~~~}~~~ }~~}}}~~~}}~~~}~~~}||}| }||}}}|||}}||} ɹҊ稂钛ᑕդ󁓦˵Źʿ»܀񄄇X­طºը˿z(  +   !  %#$ '0-,&!>KGO'A;C$<&9럝ԋGWˣU6"B8ZH;*',"0ƛLJ6v?%($#5##T❂҂z-8Y#'#M|4"$'!*jك޽@N5-D||- #`݌֮朰㦝nb)56ET7U0+!7+/ʦנkN߅ؙ̎ļg3(&&&%%%&'&&&%&&&%&'&%%%'&'%&'&%&%%'&&'''&''()'&''&'''&'(''(&&'''&   + 4øݍνƿ򎘝űޢŁȝ䩬]ºׅ׹؉3/,,-,- ,,,--..//..-..0..-///000/.0/01./0/0010/03/0010122322211224443545443566444345445655 !"!!/ $(+,*&#! !!""###%''%$$"""#$$$#$$$###$&&&%%$%(,-.+)'''()))()()(('(**-0220.-,+++,.110IzžſǶ텄ϻ󅗨Ԁڈ␤̰ٷ傝Ŭȶï̡ǿꔖ퇑܂ђùº㹵úܠܵՌ򐅀ʾ‰Ǵ侄̘о񆗙ЉߏĨ͡核IJ ԧխ뀄䩢ɟψזĴ׺پ┖ÜDZۜ͌ܳذ˼ȹ㱲Įŀ΁ӹȰ˳̄󃈇郍ðѹןʿ͛󳇭߽Ǹݚ≉գѲطͽĎ艔֣գж1ʥšɄ񈈉˨捉Ϻ,/& $6Q*&EdC$UDUFH$#'K@?l+037&F?GxKKHVF@FTI@?0=a^a]7/0AUaaUAHQSZ\RTT[UPJ?::54GS`F]>???@???@@?@??@@@A@@@A@AAA@@AAA@ABA BAAABBAAABBAAB ABBAABBCCBABCBCBCCBBCBBCBCB'CBCCCBCBCCCDDDFHLHDDCCCBCDCCCDCCCBCDBCBC DDCDCCCDCCCDDCEDFJGDCDEDCCDEGDDDEFDDCDDCCBCBCBC BCDBBBCBCCBCBC$BBCCBCBBBCBBBABBCIHEDBABBABBBCBABABBA BAABAAA@@AAA@A@A@@@?@?@??@?@@@???@?@@??@??@ABAAA@ABA@AAA@BBB@???@@@?@@@?@?@ADNE8BA@A@A@A@A@r5NNB[Es{j-)+DKOA>@@@??@F\ZdA%20&0#(?.A??@CDBCA{nntarܬΟxzQhYKp;?mif^pS9V9=9_\EebVS^Z7CMHh}cYz]\fFV5::f[SaFutYGdxU|Oxӄ^brcAm888hqg==A:;3c^8_h777jJfD=vҁa.x`xf~TvW?VS@Nz\b5P\u^I|hcPjq+~_QPY^sWy|XH^^e]KukQW2==tP^D`n[9OxV7E+=>=>??>?@@?@A@@AAA@@ABABBBCBCBCCCBBCDCDDCDEEEFE +FEEFFGFEFFGHFGHGHJIHHIIIJIIIJJIJIJKJKNLtPONKLJKJHFHBEEJHE>::302.*).5901 )*('&()*,,,+,,-4llf]R,Wvvpi][YP^s`hrx>@CWj`kni_cz}HWeZ{z=>@G4;@A/>RO AB95569=?>;L%6378/243445767799<=G;:>=<=;;9<<;??;B*'I<=>@C[cDFHPP[lsVP_ldoejjjklklklmlllmmmlmllmmlmmnmlmmmnmnopqprqrqrrsrrttvvttvvuvwxxxyxyxzy{z{{|z>}{=>>>?>?@A@AABAABDDDFFGGGEFGFIORSROKIJJJKLMMNMLKJKKLLLMKLMNPPPONNMNNNPSUUSPMNMMLMNONMMNNMMMNPRSTSQOOMMNOSUWXoſ{vv{~xwyzy{roswsppplgiffflqpriff[xx{z{xzwroptxuxu~F{zuuojcegkytxt~ED~lsnoaZcaVZXPMOMORab___[VTRNH@?>DAACEMX`ekjilkdXSONOPQRTNNNJCA=:pkmlki57836;3-14)E;BCG(/.-.1355436A4=<:;9;>;=8::84684545561352203/0111231.2622.39323//-)*+%!&%&/56:6-'(*/1/--94$',..)/1/VLJSNR-52*.,*.-+3+#$#'w()*,.-.11,/8N/EADH?006485025329/+,$&()13.;:;05HNC/054=<946087596'"#:%:67?3>,'-1=:&%%B'GB!;$"(03(?@B67:#%"(/ "$$"$,--4.+!'$092&%770/511(":<35&(A4>,.=73-'+);#5<8BE202<;>F?F4@3134!",'12?8#!!#&99.6<'7<8(@:"$ C1'#,':#($51'"%';15D7X/l%0*=ZfR<4KVDCBGUb7$5$#!! ! ""$%&$'%) #"%$*+,(!1W5;./.YSD.B7BMW][CFQD<<7304/13.OH@99IOPR*+.-,UUSM@BTF,-JJCFIMRU[[]dYXPEHGFD?@BTL@GC5QV]VTSVU020.48:;:=>>::521234.+NN-0.056TA:45.WVZ122205:?EFEC==A>;5::20XQV?N@NOKBMJLCXTVQUFDh>>CC@6B3?EI?-.*)*;LH:@@94;7980@GNO1ZIR3123473OGNHLPT8@FFFGYmFKMMNT_WSQNQ3I>A\h=?TY2@@Y7#_G@2?BYMQTZXDK' 1([>3)0>5V]_e=Fr{\wsMFHM\iH[\=LlyMT]RM>) + 3&*/0A,"')*3>iQO`I='#ZL0"0:,3@>0J* .=\tqyo]p+1<@?8<@JC=6-)*$#)1"(**18@Y;:B;I2%sY+28S2"}]a)PcFD/+*-<89SiJ_(!2\TMHFGEFCA=>566;:4+%&mWXMFAI\|}{p``_Veqchps98     + + + + + + +      + +   +  + +,*(! ",,*,)+4)( %)-,!' !,++##("-)&%"#*#*!#$#(($)'!'%%$$""$"%'&)%#!"$*+)++%&')'$$  # ""! * ,'+"&-2"(#*" ' +!  '!6/$&51#/%)$--#/'W"""###"( !#$%(),,.3,,'!$##"!+%!'(+(&$((y"!$((*   "#%+ "'#()&#"!!%$,(*'( *!,"#&$%v%!"$&&&"?B;=AK333CD&%04&65L(5$(3.3256*6,/ &')NXZ^;P|w\{OJMP\eFYVAJnyJIM=6$}~~}|}}|}|}|}~}~~~}}}|}|}~~| }||}~}||!~}|||}}}|}~}~}|~~{|{|~{||{|~|~|}}||~|}~~}~~~}|}}}}~}|~~~}|~#}}}~}{z|{|}{}{{||~{{z{{~~}~}~}~}{||}~~|~~~}|~~}}~~}}~}}}|}|}~~}~~~}}~}~~}}}||~}}~~}~}}~}}~}~~~ɀ}~}|{|}|}|}|}~}~}~}~}~~}~}~}~}~}|}|}|}|}|}|}~}|}|}||}}}|}}||}|}||}|}|}}}|}|}||}|}|}|{z{z{|{| {{zz{|{|||{z{z{z{zzz{||}|}~  ~~~ ~~~}~~~~~~ +~}}~}~ +~~~}|}~ ~~}}~~}~~~}|}|}}||} DZصļԷوĴ՟萵îڠɞӺέŋ݇[©žȽôƾΣƶy'!  ,*232*! -#%7=4#<;&4KPPD9")0") DKɝ։a !gOu6#.(%A2*U쒝񦠀O$ 3IBܽɩoy?vَ %q;+$%'')n瀍oc9:aK$Jʜ0""U϶õݦ֮|Rdek;H?~:Ҿ۲ɡ@!#')Wɑο֥էڪٌٗ٘־wF''&%&%%&&&%&%'('&''&%&'''&&''&%(&&&%&'&&'('('('&&((''()('(('(('''  ;ǿ񄓖Ï໴掛ǵ횝ע㩳nӀݷнм̰Ϻ\3/,---,-..-,,,-././..--/-.//00/0/-.000//011101//0102111012331332233443335455433454555+ !"!   "'+,+'$"! ""#%$&%#$#"""###$"###$#$$&'&%%%$$%&),.-+)')()()*)('')*,./0/.-,+)*+.214pƹ򅖘Ƿ²Ǽ̻Ǿ腑ӽ΅䆠ǩ׵߂ȭ´˞ȻƱӍΊփ푕󂈐󇓖䒰̭ϾԬï񬘯˹֜ϝ̚Ι᯽ח̥ϴǀĺ򡢔żňčԒխ󈇋욫䄞ҹҾ压вܵ•쎒ď՚ײƌȯᶧҍ턌¶φɺچ҉舚Ʉ񃘐ゎ܄҄ȹߧ́׊Հ򌢮¸ûѪĸߕ吕ۄƜُ—ہŹʓ3笇ݳұ˯ɸ̀+/00% +=8@>2g8[ogGTTSIKTL^1A\G$BiaeocLLZ=KE?84:?Q\c_UUD>[h27of2/H43CJ1egb^7)B0-SZ;C>TjL79BEE9p^;"6+2D8BYIKHOPB>WMNK7/\_XMC'3AQadcUcL@GGI:;?FHRIV\UPTVYVKD:973>@63AEAFPQ[DKOBEgnr``b_bSIK@JT`I\???@A@@@A@ABAB@ABABBCBABACABBBCBCCBCCCBDCBCCCBCCCBBCDACCDCDC&DDDBGKMIIGDCDDCCDDDECCDDCCDECCCDDCDCDCDCDDDCCCD +CCDDEFEFECDEDE FKHEDDDGGDDCCDDDCCDDECDCDCBCDCCCD)CCDCCDCCDCCBDECCCDCBCCDDCCBCCCBCFFHSUTSLDB CBCBCBBBCBAAABBABA BAAB@@A@A@A@@A@A@@AA@'?@@@?@@@??@@A@@@A@@@AABDBCCBEFFEC@A@@AA@ +AABCCA@@@A@ A@A@@AA@@A@A@ABEjU?EFHHDFIHMOxnYJL1[;:B;3[QpQ>8_YA>TQC<jg_OO_G00P(cM(**(9gwi{Jw[J8rkQrt[N}i⒩uYcxv^xΚtƕj56 767677677677678766778767 +68777677787 +887877788787878878887877788778877787 +877887776878767677666m65ll6mm6lkllmklkjkkklklk +lllkjjkkjkjkjjklklkkmmklmklmllnml6nnmm7n788787898889889899989:9:;;:9:;< =<<=<<<==<==>=>=>>>??>?@?@@?@A@A@@@A@ABABBBABDBCDCDEDDEDDEFGF GFGFGHHGHHIHIHIHHHIHIIIJJJHJKJIJJKJIJJKKJKILucODKLKMNMJHCAEGHGH=9;8/)#!"-6:,7'($$%((%+*,*,*,/tft@ax}\bd]ZP\qxfhuCBCHMildgddyKKfvI}tC<;<7:@C,8NL@B@534<%#A<'))& "30343575567988;9::9<;;<>;<<<=;=@;C+M?;;<=@BD>>>G]m=@HJNDpoV=HKD}p\{tcfkkklllmmm nommommmonnnmononnnm lllnnnonnoqopqqrrprqqrrrsqsst +vuvuuvxxxyx yyzz|{}{}|{=>?>>?@??@@A@AAABABCDEFGHGFEEFGFGFHMQRRPLIJKJJKLMNMLLKKMKKLKLLMLNOPPQMNNMNNNPSUTSOM LNPOONMMNMLNMMOPSSSRROOMLNNQVVZ~{yx|x}}}zxxtlustwprkqoknoqli´`{|otnnknsvpqv{~Fwvppi]ckmistd|{jc_eVLUNLPRURQOOUVXWXXTSTW~zzphfhl:BJU\aihnkc`\SLNTTROIDC?ncdgadfa472464/780.(B>@'///23634?-;99879>:<8;<;778774447595121320341220*04321A6320//.*-."")%/5544+,/21562*+5. *,*').TMLDFK(+/552362,.15-!"&&)-*,-/178:9DTQ7C=@0,*/21///./050.D'2494A3*035'F:(.370)$:1140+.A2-':5%.+%&%5E3355-#*DC%=9 #&042@=Ej^Y>,52,/?948@$I&%)1'6#I:3O5F0B)3*72/!DA@$:)"1/8!AM:@A=(++/$KEV]N>4uA0O[39, $%!"  !%#%'(% -,(!!#! -#&*+-%!$EX=;32/XMCE7C;20/U4VUTZZ/=A3U4U7C19DFUXF+83955<1*3;60.5.XS^[.UG^f4@7HfU-I69<3QU1/0Q6?73,MNV[@,,H>96/*QLORNT[CLVSTUQPKGNQTW7+;0XWSNUWP\VDWYQYX[VYS@<9?3>94D?[TW/2&,*,+MPL>)15826;5-5IDDOK:5J25:8;=9K38YQ`H9HS?KMKH;@DF6=H233S-95=D=M&,[PUDf^[SHXkTLS.A81P@=-I9;;:731-..P@>R8*@@GNN-..11/+,-SNKFJ7/A=HHKNNLIFFHEEDD@?=>DHLQZXX@'NIC<2C0/WH17>B===;986010110)AH-33111F-U.97\VM,212687:?BC@<961M2;=:2Q1KPC?C_3!V>7:92[MKT85@IffbCN5<'.23<8:pqa788B,/@/+)&#!"$#!3/381M&L3B355*OONTXWTSF<2P6J;940/_VSP1 8JLNU?@EIIN>@@JNLLMTTUVG40A9>dh8AM^2?Ff;AJpG=4?N:hHWSL>`A(#".5 &#&)12UGhZFTI]XE[KFIMiafaV[NP^V`YUW8 !$/3H9)/2719JFU1IV<OYI+$.<-)>:3J( .9fdnwjRKW8D=6-$(/ET]ZPL?2P_*-g[!."!02 LZXM$(BK")0ET3!#46rW,' /72CKNKPSC>UMHD1&YdWF8#1PffbOYC/94"003;"J4ZS2|O\qpЉ3M."-GDD0!A氥5D: (1n %%5. 4*  .! AB- 2MFUDm2.>QEE@J7:AFE:! &'$$$'&(("/;;ڃ̟܍ր<" $#=bcQS݂圕ڄӢ`xӅvT&#Y͑(%%""'3Tݳ::p="2Yj\$$@ǀ̶®jNLaXH{ա뎤O#(#%)G湈ۖ⒂ñݙϏ1Ҍᩬ-%'&'&&'&'(#&%&'''('&'''&&&'&'('(('('''())'''(('&(*()))())((((  +Põ逅ЗۈƧɭЊ¬ꃇc޴ߟŽԽúùغ谶g3-,-...,..,.-./.-,-/./../0/0//110//0221000.0010001310132213433553344434456643455W "!!   !$)-,)$""! !!"!##$%$$#""###$###"#$##$%&&%%$$#$$%)+--+('&&')*(()'()(''')+..//.,,*))+-01dĽڽöЀʵµ̳ϵĴ󉖧񚩮Ŀ¿¾ĀȸƽȜ瘨пп󃐍䋙섑ķʹ͘õŸωǸ੭ӻ㦝ӉՂ辱њɸ񈐇˳ąۇ²ڳܠ´ˬ€ܖ왇¬©ȑ᪚܏ӵąРħҫתگ݂̀ݿ途ȼïח瀀´髟ǸēҊܩ떚ܺԳဟƀиλҤݴ䘥ݾۉž0쭱йÜ,1.52'$0(]SD@=;>gb4h`U>fVN:1WJ-.+1[\L?FPSAAI@4T8+./));@UaW]p`obBQJ@=4C<@X3!/-8,5A[HNJIRDBURKM@>Xe`KH-6HR[jmZVMADJQGD=OOPOX[RQVMQOIE>:85?:88?DEKKMRIQLDDdno\Ze`nYVGKJ^WLA@@A@ABBAAABABABAABBBAAABCB AACBBBCBCCBCBCBBCCDCCCDCBDDCCDBCBDCCDDCCDCDCDFKMLGDCDEDDDECDEDDDCEDCDDCDEDDDEEEDDEEDEEFFDEEEFILLFEEEGHED +EDDDCEDDDCDCDCDDDC-DCCCDDEDDDFEEDCDCEFHGKRZ_cb_XIABCCBCCCBBCCBBABCB CCBA@?ECBA@AA@@A@&AAA@A@@@A@A@@@A@@ABABABBEILJGGEDBCCDCBABBBA@AA@A@AABABA@BBCDDtD6K9dUaqvxI):kyG3@CABKMPRQMHFIhij?;WEVO?@B^VB@A@<^xTʬ[LdXO|ˏxGpfmBve F[P#C?9=>pʡhTS[LH00-78XG<5{td_=IeoijYcd\RDb駵ugtb:i999iFdb:,68=/{mZsqpTK988b`2xARH:OI]<1Z}c=gn\_[V7G8V0uoBWS@9.`@G`dbo@VaT{Z|T>/=U]kAG@HDxRcOYdiJlX1,,Y/5E5\{p*=i`b^M@[ignkgh$^stJghscuɊщfm66767776767778787878767788788787878987989877878777877887787877787876676mlklllmllklllmllmjklkklk"lkllkklkklmmnnmlkkl567mlllnmnnnonn7 pn7787877899889899::9:::9::;:;<<<;< ===>>==>=>?>? @??@@@???@A@@A@ABBCABCBCDCDCDDCCDCCDDCDEDDEFEEGFFGFGF GGFGGHGGGHHGHIJJIJKJKJKJKLJMiWGAIKMRKGJLG?ACBAA6722,-/)-5==6 %#"#$%&%'('())+-ofsW~\=XWyjW]\WT]dqkKiDCFCHfehgcqNNTAuF>;?=9:47?C7=FKe<@I<85>IG>B*)('(%#502442245778879:;9<;;<;>=<:9;;>>9K,A<==>>BBD??>IxAEHLHCeEloUmOn{fjlllmnmmomon*monnppnnmnooonnmnmnonnooonnppqpoopppqrsqqqrs!vuuuvuuvxyyxyyzyyyz{z{{{|{|}>>=>|>?>?6@@@AAA@BAABBCDEFFGGFFEEFFGFFGFGHKPRRRMKIIIJIJJJLLMNMLLK JKKMMMLLLMMOMNQTUURONM LNOONNNMMNMMNMNPQRSQRQOMMMPQSW|Ǿǿux~vxqfquxsxrxpmqmcü|xsonlksoo}w{|HKqacr^`b]jrnxymih^YUQOOIMLOLMMNRWSPRVStka_^gqfuFNX`hfdf`\XPPLPOMOKJFB>;ifb1./530778399/.1,J>D*/014897542II8:7769:9;9;>=;<;<<754446312263210/12.)-32/0621/0/0.),( $05848=743244-[])3."-(GL+.+(KK(+--/31-11-&*.,5)!*+*22348:869>K-6074&#*)37-,5>88.<;)->24,.332"$,:G#+BPC,<&1<%$"-0$1/7/;2(38*,3-).,+#64*H88$#!.5/751./)#2!  $ 7423"""!.""#3<*>'$818@C209A;8=783-6=B?E956.2&RDDUCDDsB52:*5J%,%(4*!8V/")% '/?/G>%82%1E87;;-M*,EE*9B58=>69\=\NF/98B! %"!%&!  "%$#&'%%-*$!,#!473=91/2WZB*0IX.WLRYYXX\.X),1199?>>>98=5I,12][297?FGDIPHI?EF7W/1/:.?HFIG@<<9542553.-05659@8R>=@=9ZP\/3P../6<;@C==@=:5A5568?FOPMPIE8=ZJFB=?LLE5G*GIQJ>50E",*8)>:97-719Vi_<=QR7@>)%)NNA>6T=s>SO>>hlA(=./&*-**'.-I@Ka;Obi`aV\YQhjdgS^KlY^L\X_I1*" ';6=9>?:>C=AB81,))%,(&'+/077:D@HD;;\gkYXfgq]VHQUv%&hC.󕆮ɡϕ̃ϤnbkYؐ\1`ˁΞ*2#73+(wӆ3:_ULc:=W,$ULٔȬ@v죺GMjתި'_d5-* 5 GA!/d0='J#@e3QkW'"%&#ˢ˿ﰾH+"OB Kpuv11"J $  +(+/:8+<6(gF.*. FjMZ:f5& +J]E=EnmqqpwMNW?uC844-'&$)'*&2//3:6(#!(*((3"!"$%&('*+*--/-/.0111.../0.0-(+,+,--.225576;wc.004/5uwU8VX>ekIh?U̧~ùzw}{{sum_cfidmhlecif`}yvoux~|uuuzwuspkkiimhbkmbndhofg9=g[MNVHOTQ_hdij\XWNKIFEFABBFEIIJNSOKMNK~~xmg_][]_U[68<>EBDIHIIFIGHD@@;72-*)IHF$##(')1/,&+*#"$ ;16 !%''()):C/002123/0../-++*++)('()*'&'&*(&''&&%$!&)($$*)*)*((&   %$')$"! #'&SV !$B?#%#%GB$#%&*,+$#"" ""!!$ &1"y&"%&$%",'0(&# + + +  + + #!   +  +   $  "$ "!'%'* # 6  "" ! $       + +    + + +   +   + +)-#+*$'*,-./+"%)#!$#+(%+($$ ),!'!%#$ ( , %$$(!#-'$#$#%""!%"#&#%$#$ %,.&'&$#!$#+ ##*5*&"&&)2)&$ &"$/#9.1,)(!.) )$#( "("!"%% "!&03!$$$&)"#!)  "!%*(-" !&%#$##* !!#.%1! 0556/).!(   #%#!$" #&&++))*($%$&77>;6@DC&8 !"&$"$$!&#&/1^1>G>&&24.73,")&K'0.%'FL- /2D`DJae_^SZUOcd`aP[JwZUEMCC.}~~}|}|}|}~}|}|}|}~|~}|||~}~}||}}~~~~{{}{{|{{|~{}}|~~}~}|{~~~}~~~}|}|}~~}|}|}|}}~~||~|{{}{|{}~}{|}~}{zz{}||{}~|||}}||~|}~~|{}}~}~}}}||{|}|~}~~}}{{|{||}~~}}|}|}~~}~~||}}||}}}~~~~~}~ ~}|{|}|}|}|}|}~}~}}~}~}~~~ށ~}~}~}~}|}|}|}|}|}|}|}|}~}|}|}|}|}|}|}|}}||}|}|}|}}|{z{|{|{|{| {{|||}|||{zzz|{ ||{zz{{{zzz{|}|}~~~~~}~~~ ~~}}}~}~~~}~~~~}}}~~~}~}|}|} ˵쌦ѻФʡӹоϥԿԆöݏgŴŔƺ®ƿĿŻǺ,"#  $09DLQRLE/   "!!#"$&&"D"&&',*<(,*/73O:?!+4%,&'/78630,L+'m:>#211)7J1p⎞d$<64ai;hVQ;> ?I*O3ǻ玂Ņվ8)!5ti_foʸ䑖˜ݨA6.*''&']߈˂рB%&#+##@1Nw60.S610(|='$7د꼈Ƞ¥ҔꀞӪ¤ĿΰpXD*(#@ϲ`Zʢᗳ!쁐)nܑȣ둦6' + %'((''&''((()')'&&'')''(('($'&(')(''')'(*(&&&'(&''('(('()(*))( )) #!Kʶ􃉌􆏒됤֥לгмϘ\˓ŷòױߔɀ]0/-..-/../.-0/./0.././010/1010//011012200232122244344543466545656545566 !  !#'*+*&"!! !#$%%$#"!"##$%$#$&'%%$###$$%),--+('%%')))(((&''(()*('&&&(*-///.-,+)()+/4聘ոӿ¹ĭͲسᄔƦ䞨ʾꅀµ倞ĺμ彵ƶӄåöх٦ɹí˽И슑ӋÀ˶ÎԻ֖ҷҲ˘ή͇υ殟Ʊȵ􌱥؁󩸮̿ɥɌ؎ꐋʣǯݼζʊȬ⸒ȵİٙޙӢ¹ǀ٧߼ŸȂdžļ񆋋ѪͪД̦φ݄Ѐ餆£үĿ썇гӨÔT޵ڀ̛̉Ÿۛѵ˼ɭж-1-157-*=fE_&.9AH/YRRO>MYY)VH]0(2F]]TC>MY=AK@7S/(./6CWj`Vx|U_EAW?>8BGNOYeXU[WAUXAZnl/,5?DV]@EQSIFSNMNXbMPTPMKFA;;5;=<9BGEMOIHKDNIHChieYTc[iV_GAEI^cLC@@ABBAABABAABBABBBCBBCCBBBABCBBCBBBCCCBCBCCCDCDCBDDDCDCDECDDCEDCDCDDCDCEDEDDDEEED EFJMGEEDDDEDDEDEFEDDEDDEDEDDDEDDEDEDEDEDDE*GGGHGFFEFEHJIGEEGGGFFEEDDEEEDDDEEDEDEEDEEEDEDDCD*EDDCDEEFFEEEDEDCDFGIGHKRY`gijfbPDFFDDBCCBDCBBCBCBBB@?DBAJQutFBBABABABAA@AB@@A@A@ABCBACBDGIHFEHIHILMIGECABA@ABBACBCBABCBm8DACCCA@~s@RbhiHwzRvx^\Ѕkzo_/aG8i4@>>~ov^C-P:.0YRTJULr~cmݯbi\x`USmd>;O==>><===>=>>?>?>?@??@?@ A@BAA@AAABABBABBCBBABCCCBBCDCDEEDCDEDEDE!FEEFFEGFGHGFFGGFGHGGHGGIHIHHHIHHHIJIJIJJJIJJJKJJKLKLKLJJK^rTGASQUPNQQMGDHH<:<978*312-*:B<< $%$$$968!#%'&%)-rieVjZqpUT][Y__nwEYAFFDEIoflkenPQTA=pJE>;7775.*?=?BD?;>IJ@817J@D*%#$'BB411144556Q8:9;::<<===<<=9::=?88',A<=>>>BD@?>?D]l;FJKTjhATiQ]pN`gxclllmnmnnoopnnoqnmnnpon(oooppoopopooqpppooqqppqpoqqsqqqrrssrsssru +vvwwxyxy{{z |zz{=>{=>}>|?>???>??@?@@@A@ABAABCEEFFGGGFEEEGFFGFFGGJOQRPMJIIHJIKLNNMLKJLMLKLLMNOPONNNMNMMORUVURNNLMLMLNOOONMMMLMMMNNNMOOQSTRQQOMMLNOSY|Ⱥyzotyvnjsvzysrqjtjm¾}~~zmqljoknt|MIBrypigea][i`amukqpgc]XRMGLJJIMPyohectq]_en?IPW^decbbqXQQOKJHF{6%D'3+$)'%2K5&82.&4%0,! (/+>7#2>14%=*/372-38#$"!#*,!- "%"";94!012/+/%!-*(744(/*B<6-!:@;@AD2.8:0%'>31*&$$47) 49?xwrr96*-=-2:3&+"/1-! &&))<'<51A2*>6,H5'17(*+6:;0*<-9D+4CQA&37NG*C2R+18yg*3"#+(4/' %&$#!!!#$#%&()" %+("%& ##C4:<3142W^EPF[^\JRJQbaZ[287V.6BHANRQH?,L;?=HC7FPF9@C=JO2*-&8/+OEIA+1(<=91T3>56R7XYC`580?>:4Y1=;=?<7*=J=VKPROICDNF3/50NXYbVgdWBCF1I90./159:/WR@8;-69(:GDP>9S.-VV211XOJW22+,*#7;4-.259K*F65UF5@-5<=:56CIKOW45A9;1SXGN9=DA?5ZNPS;*2446:?=>=8/Z?9953WN\=DFDFECA96<:<==7[\_`ou9:3SXUL>/>6512.RSTB7$0:JLNQKWc\YSSKKIJKS7.FKJIZlB<=AIKKJHIUD@/mooC@?>7/++&)++)0227945?:F?=7^dcVRaan[`FDKStśh¥㚙璞ݒ2Gw[Ӈ~t䇗݇ᇓ쫑= @910,,.1ABźM5+!) !&'##..LZnLm5+*(+hո䀄֍kGАܐ܀+,'#%#o3%,ZA3 , kX~d 2:e*+-G3 +!('8l鹵%/ !<[fMB.&  +3 !.7#,05ƂmI:1ak5J|uI500149TC:LKMGEEF?9476-+-*('##"!" XWP~?jjstw]Zb`cqkw{EY??@>?FljqtmtPQW@9hIC73*(&&"!)'06,,686/($..3"+$###&&%%'()()-,,++-.111/-./0.-.)'*++-..1257::5RP)/21:m}`U7EQ=FuXL^t G͞}ȼȀ~stuqj¿aegjjfeeamdd|yz|mtriov{klsqtsiy{lihlectdkwromx<:3RZTPKJLKLZUW`e\a^VOLFB?;A?BCGAxpjgebwkVUWZ0459;AAADJ\GDFFC@;7dZT'D!""!#")1/,%&(&()%#"!%'('&*'"2-.---2210.00/,+)(*''&')*'''%'(''&&%&$##&))*))((# &*$(($"!"MR !8 "#%%'&$"#%'%!" "!$'!!" "";7<64+' (<+3*09'+&* -(% $!"-1($ #!%$ )   + +  %$       + +!  !"'$     + +  +( ,- ! 1 +     +    +   + +  + "*1 '#...#*$(22/+.#$%%"!$!"),.(')&!/%%)"%''!!$ #%#%")&(&%"$" # (' &#%%&$#! $)**'  %  # &&)/' $0.$;%%# %""# #(./4,66:+)#!! $$#"&# '#&  $&',!*+!,$%&))&+ !!!*.017; "&('(#(%#% $ 99%"(0($!"'&"%'(  "#$# (-)&%&!$%&&*.AF@.8!X"$##"!)"(.`_\/BA$''2:05!$4#!"03(*+LG)%  .,=eXN\iXX[VW`[GVQYQdHdQJGG9} +~~}}~~}}}|}|}|}~}~}|}|} ~~~~||}}}~~>}}~~|}}~~~~{}~{{|{{z}{|~}~~}}~~}}~~}}~~}{~}~~}~}}~}|}|}|||}|~}|}~ ~}|}||{~}|~}~}~~z|}||{{~~|||}}}~~}||{|}|}~~~}}}~|}||{|}}~|}~}}}|}|}{}~}}}|}}}~~}~~~~|}}}}|}~~~}~}~}|{{|}|}|}}}|}|}~}~}~}~}~}~~ف~}~~}~}~}~}|}|}|||}|}|}|}|}|}|}|}|}|}|}}||}|}}}| }}||}}}|}|}|}|}|||}}|||} +|||}|||}}}|{|{||{{{z{|{|{z{|{|{z{|{{|{{||{|}~~~}~}~ ~~~~~}}~}~~~}~~}}}~~~~}~}~}|}|} Ԉ͚첬΢޺겟ڂ跇ϳޱƂΣ嫓ߚϺѲµؾِð{ǪŰ߱ȶƸºſ̬ȵD!%&+?G4LRUTJ4% +& !! #%#! %-/1110-1520.&'N:V,?%9"&+2S::5/D^Jl:#%(("3>5Ap5*C36:~{]c9;n.A )':܎ڞ҂ɁȰ:Nvyŵކ藋奥΂~T#"$!, ,x>/<>uDY=('8e'$eϴȅkʞ옪֧͠ź녋{=8:.$&%%(I؍A5Zˠݙ˽>'((''()(''(')()(()(&'()' *)(('&'()()((*'+(    +|˪żކūʃȩ񐍆􍜓mȫ糏֖ķ»ˮdžƳϕǷV///..-.--///././0//0/.00/./00/01000112122100/00120222123433343444256434556656667876   !!   + #'*++)$!! !"""$$%%$$"!"##$%$$$##$#$%&'&%$##"$$&)+,,*('&&''()'''&''')())'&%&(*+../.-,+))(*,a֮žͿūųõľԔʲ½þŻȬ»ϧֽޜ퓕񀕏線׹¾仇ijֈ闙Ɇļ좩ɰ˲ʏӵ׸μĠ産ŭŮӓթҵƕöʊϷ؅ۮぇʯ、ʾϻﮌقи瞓􂖦φǍ̸̀½ɀүٶ⑝ݥ󀙠݄낍Ȉ柅͵􂈍Ě׭ǭmʺڹá̻Ժ䡼ڿӚڷ71/,1321!.6>5`:L`IMfGHE45:]B-C0+WF1[T=>M[R;'-bL!(2296NEBmhO^M0;=3S.$:5:46Z0IIGLHANgMD@'Cb_Z,)4@ZUcs_\O3;>JRQOEMOJL^NJIMBKE?6586<;=HFEOKFW>HPKK5ebUVT]TU\[I>EJ\\WCABABCBCBCCBBCCCBCCCBCBCBCDCCCDCCDCCDEDDCDCDDDCDDDEEDCDEDEDDDEEEDEDDDEDEDEDDEDDEDE FHHFEEDEEFEEEFEFFFEEEFFEEEFEFEFEFE GHHGIGHGFGHFEFGGIFFFEFEEEDEEEDEEEFEDDDEDFEDDEDDFE%DDEFJKLPbfdaadkoleTKGJHEDCDDCDCCCDCDDC l=tBCM^@fcnECCBBB>@DBBBCBBBABAAAB ABBABBAAABABABABDFGGFGHJLKIHGDCBAABBBABABBBABCCCDCBBCBCKOQSSTSPQVRPPKN[\[pAfCC:@BBBDJLRZZ\XT\_)W~\,C>IB?ADABDE>AAA>]yrV|{_Ou|v}^hZvʙkrVRlq{NhG7+HqiuyM~lpvf.HK2<@9ZhXO[ᠨoZ|WLK8qW5rNb^CnyWUі}FE+\D,1GAf9QcX`@^8c_FdbFUyc]pnrktG42(M9?E\ggUgJa~|a{:Qiz^y[PpegA{zͣR`xƑ〵k7878778777878788789889899988898989889889:9 88988988989898998998899889988987878887&noonmmlmn6llnmml6m6m7mlmllmmmnnnllnmllmnmmnon&777nm7p78n778788988998998898999::99::9:;::;;<;<=>=>=>???@?@A@@@A@@@A@@AAABBAAABCCBBCCCDCDCDCDCDEDEDDDFEEFEDEEFEEF +GGHGGGFGGHGHIHIHIJIJIJKJKKKJKLK>fqU3FTMUWZ\MC@BLK66998;5247847M?@F%#&)'.:3+;!%''&)+2qQGd=zd}p^XZ\Z^`gndEBGEDJEOrhoknRXYG>ozC?73354*'<:6GE28?A>2117GCG+$!%%0=310233635669:89:;<==<<<;;:88:BB5A+)>:9>=>CDA@?DtSAHKLJyuhiHcO_vo{odllmnnnoppooonpooopnoppooponnooppnoqoopqp qqpqqrrqqpqrqs ttstuvtvvvwvxz{|{zzzy{==>{|>=??~}?@?@@A@@@ABABBBCDFGFEEFGFGFHMPRROKIJKLMMNMLKLMMMNOPPNNMNMNNOSUUUQONMNOOONNMNMMLMNNNMMNOQSTSRQPOMLMPTɺzwǼĻvxu~{tnqnomsvyrc_ddm|}{qypnqmls~}KKGF~?xmploi_XXVXZhjmglib^[SLLJHEONslnf\[]Z]`m=IT[bddbb]ZVNIGw<:96544848475:F;740/*'13345323,.418664665638887::6899;;:9864230122112/-,.,,-0_[\...,+%(#.5@:64<94222000*H)2)'%$/1./-.-/021./2.,/0.*+05<<7:88989:8;;>>MAN_3TJWfaVY[VLB=974BC81>QF,,)+129KU?G<@A0EB1+++()#+/B!: ;&3*&+*!'2 6%"+01&&0:*2F87,%"!%@:!?:15%$#6C&.:*!&*"!$%&#<;&0(+& .//21!/,"#(<3&'9* !138* CC7+?>16631*"!#"" "8=PPHOTVCtgWKG+*.M11G519+,..,*$##0%H@&,*J?'**-**:*%*73A;>>>MB52J34>(9?'D?F1H=Dgxb>86#2+ !#$&"" #&**,*! #'' $  !$ T8<=772-QMJKP_^\ODDM_3ZX:E9@S2Y<6BDLC9'489DE26MMBG45-331YGA9`5Y>AM\7-;393/GD?2G-0YV0<9/.-RKHHE$#GMW9=4+++SPJIUSRVWSTN4BJU0@7?+*--ZZQNJNJRd`8fJGEEJKE?AEOB<=MISI5&(@E*TKGF>@M?E?=2>5656"Q95UW/;>74351U369AKDT4HqrpeKEJS8CMTP*PR@CPJ6OLTISMVR*.Z[HGOE-H,51./2361E8@EB",D;8(.E5TR*266531/.VX15-GJCV,SK/451126^00a^]UOFXTZ[][YVY]^]^fd]Y/40-02579`FFKUI\4>=8>D5NJKNH0::IOURR^236856;>968A:66`C4-02@BT<1HIM_RWWck9966;@-0(*YX1A%*.*+++*+,+++..*)JKTEC?@ABENOFESKA.cifaJSq>?I;;JUPG+2N)0+)UD% 3.!:>:.& 5>"Ot^4HTNQ?90&$-8R_XQ^O=C6DZqW%(6D86F=;=?5<82(')&*++521942A5?I@@)Z_RROXX\a^IAITs֜9葍ݓƮϰ󙘌ᓛϒV69ܡn蚴ΐ個ɍW" " +(JAqH/L))%3B6<Ъק<"X1&""&<%c=0U_yd]FI+.t˺6#(+fɼR̰珦̨?+:F~I0+BL)0'YG-'(H[^@B[*&0%"(,$ -"IfѶ)$("7O@̼vy|."^+%7 $+4+&QWZ#Aqv|4YDA`M;,0U1BPIMPRQB834:8))+*)-&##%$ +!!% rVv9:TOise_`acjkqufA=@??DAKpluns}QX[G>>?@LB}xywmgkcZZYSSPT-259>?BCCCDEAA>wumg[N$!" "&-*+&''(1+*& "$%%')(')$$&&*),+.//.-/0/--+'(((**-+((('(&%&&$#$"##$$&&(PRR(('! + %')'+&"!! "#"G #! ! " "$"!!%#"$% "!"! !! #"&)5+4?"40=GD;BD?4+((&$,+"'71&2;+,%+( ($"    $"  + + $$    $$  ! +    n   $"#)  + +  +  +  + + +  + +  +  +  )'&!'(20,'"!'1,( %%" ""%!,! /, &2&%$! !" !%$# '&%''$$"%('#" #"(4.1 !"$ "#  ##&)% #(*>DD;*"& !$&' ""$%.'-)0+. +/$%"!$%#'( *(#.1/-'%!-(+--..-/0/..20,+/"' * &$!"!')-.+0.$"''-!$)1+1/58=<'## !#&#%+#/)!#(/,(&$<,)>D9/$!  && )%(-X\\S7;H'&-(78 $*(*)" !%"+2/,'8P;+% +% )MpSGe[X_a`a^T^ROXM[`V*JE:}~~~~}|}~~}~}|}~}~}|}~ ~~}~}~||}~~~}~~|{{{z| {{|~~{{~}~~~}}~~}}}~}}~} |~~}}~}}~}~~} ||}}~~~}}~~|$}}}~~}~~~}}}|}}~~~~~}|~~}|}|||}|z~~}||{||~|~~|||}}}~|||{{|} ~}}}~~}~~|}|~~}||~~}~}}|{}~~}~}||}}~~}~ +}~}~}{{|}|}|}|}~}~}~}~}~~~~ց~}}~~}~}~}}~}~}~}|}|}|}|}|}|}|}~}|}||}||}|}|}||}|}}}|}}|||}||}|}}}||}|}|}|}||}||}}}|{z{|{|{z{|{zz{|{|{|||}||} ~~~}~~~}~~~~~~~~}}~ ~}}}~}~~}~~}~}|||}~}}} ֽËӻθ͙Ǥת싃¦ټܯ¾±ĩ磌߶ۿYͲ˲мѵø҆²~ ##$4>BFOSRMGFMRVRF7($"! " +! ! $'&" "! ).06==9249861-(*9),5-"#$'+'9E70L.L3(A (%" dڸ<("(55'0t\07;,YǀR2:bRkvם߁}eisڒUҰّŐĨ՘ԡᚖP+0#'%1'snKqy;UεŨ䕚˥bŎS-+;A+%*⦱楨DZ[Tۯ򖃘vÅߦf3   +'&(((6))()))(())('&'')'(**'))&('(()*(*)  + 9⨛߅›눰ҾڃĪēZҥݔø½ٳʂòľҮpJ./. --.0/../0../0/0//0100012 +12124200202$1134324553444235554544566678A!!    !$(*+(%"  !"""#%%%$##!!"#%$$$#$$#$$%%&&&$#$%'*,-,('&&(('('&&&''&&'))*('&'')*---.,+*)('(,vǨû󃇁΀³żŴøɿڂֵɺԿ񍞪ˀµ抣􂇏ųûĹŻʿΧΖȳ͇þ܀݁ѹ녉񂑛̰Α奤԰Njۆ߽ǀ񂭟ΧǺͺȨ̨θڷ苓Ꮨ鼲ø燆ꡩ֜ɪ݇ꍕņݸʽє摄öҵijţȳ򉐆҃˺ڴڄÍㅐϖ󘖷˻ۡОǕԅ𚔒헧ׇӑց╞˫Əڕ󒣆؁ԯ⒊̡¡ʨƺ먋åɿK˷ư燩ߦ읩=)0.*25B<6*:k=P(B``HR7RL^OHca;6)IH49*F3AOJB"MPE79,!!BfV'"4qEZo`YFEB@5(99U]_ym^TA5?PZSWKKHQNYUKPI;CGE<6HRAD[*KGLP7caPRWYRV^_LBBDR^s=BABBCBCDDCBCCBCCBDBBCDCDECCCDCDCCCDDEDCCDEDDDEDEDEDEDEDEDEFEDEFDFEDEFEEEDDEDEEFFFEFFEGGEFEFEFFEEFEGF EFEEFFEEFFFEF EFEEEFEFGIGGFHHKKOLHFEEEFFFGIGFEFDFFE +FEEFEFEFEEFEFEEFEgFFEEDDEEDEEEGEEEDFMW^aekljf_`fklkbUKLJKHEEEDDCDEDCDCDDDCBH-}TEvZj]4GA{EBC?Q)47BFKJLSWL`YYeK\G BBBG=bBBA6aX:f7@Qqoyi_XETlDjkFgjeL;U`xz{a¹Њh|kp78877887898889878998887899989898998889998988998898989:98989998889:9889:98989898987878777no7 nn7767o7666l mlmnnmmnmmmnnmnmmnno7n7nooopp78878p88p89:9:9::9:9:;;<;;;<;<<<;;<==<==>?=>=>>>=>?@@@?@?@A@AB ABCCBCCCDCDCDEDEFDDFFEGEFFEEFGFGGFGGFGHHGHIHIJIIJIIJJJIIIJIKKKJKKKLKKLMLLLKLLMKLL|rgQVXQ[c_ODE>=?A?369=98569==:?)''*)*'**FG<7@@%%!<'(+Ec|x6WBV^{r][c_cahpcGCFDGF=JOnvinxH~DUXLB|tmD@52.'1.,;73HH349:5-659A:L)%"'A0;511244676687888;<<<==<<:::;<;DG6B+I><8;=BCDB?Kvk^AIJR`HIUNN\Wsrcpks`hmmmnop/nnopqpqpqoqrqpqpqpoppoqpooqpnpqsqqqsqrssptsrtsrtuwuuvwuuwwxxvxzwx{z{|{==>}=>? @@?@A@@B@A@BACBBCBCDEFFGFFEEEF +GKORSPMHIIJKMNNMLKLLKLMNNOPPOOMMNNOOPRVVTQOONLMMLMNNONNMMNMLNNOOMMNQSTRSQPOLLMOYѤ}vĽz{tyvxuuqĽromj`b²µ}xv~z{pnruriz~vMM|}}pzug?>eZMNRT\bgpifdbYQOJGD|{}wynbZ\UQ0QP^6>GQY^`_aa_[QKG~?@A>;647873445<453646)+..21/-A+66547636234337:889<=:9997765242/1110,-.-,,[UTX-,,,*"+&58:51/384332..0.0./()++.-/--.11100./22544/-3587799857<;O5/<&6AD/-007#3<0C&,#*3)(G9H*B,30#?@*7/&+2/)#.3?>%6/34AB?C"* #0';!"(' !$$$"9 #7530/)'',+.(%7'!+&"$'BC74B()* ,?@,%05:R]P[fidJ`NNV),5'44 $$+6+-),)#;%>1"49<#)(.108'AE"=1+$1&=C<;58\Q]JWcAUcXH>2&+1-2@)8NZoRC% *27601&&" "#(''&&& '&" " "!%C<9=ZW8U3TB+HMM6?I35V281YO9K=6=1D>4.5>6-COG2>-R0.UZ1;710+JSO8.,$M24;;=<2*NSIOVUURT,ZF,HQ/18-8#2,-YSFHRNBXfi:[URG?FNB@DCI>69-ILTQ@H8"JOLIH;B4H@IMA==91\F683231263]M\7U10-CKEB=;A=GJCH@05;9/*.3+,07.5<,/G"BB@A)V^NLPST]faLDGMe~ތSD봁ۚڨ㒖UҮ٧v.Fҵޙ~ZQS݆Ü]YD,e8<##s5δ]RM)?6,2+Ru$: ?]aV}cN,I/>46C\biI^f@tZ<@2#  hb嬋䃂kƓШǀəӏ>)#PfZd>54B9*0 p;#mB +"7&8s Br͑n.'"(1jڰb>", *1 +0Ak@UXf8DA4CXKy>JY郅 +l- xuRUTMU\XH;:32241&)+-*)&$$''&(+.% " 5N`Q%G_oc}wc`hfphmvdC6FHkypsxDz~ARXMCzo?6-*"$%$)"%4(!/8- #,/8# +$##&'$$$''(')**,-.././/--,..)-/&*.,*)+-..025Fh\F0338N|78CA>HBgc\oaYj–|xǿ~|tzuxpokǻlgc]TWxv}~||yqn{kgaknnujngeknj_q|towCBtca^T`[M//PJBBDEKQY_YVTOD=>;9;wsxywzyvsrrlqjc\[TOKIM++-47;;:?@DC?<=qolcY('&$#"#**&"#$%*+%'$'%("#%()*)(($*")(**+,,.*++,+..,++,-**()'$&'%&%%##$#%&&PNOS)'$  + '),'%%#"! #   ! !#"" !$! "!!!$!#&'-17:0-:147F;#-3=?=.+5,91&/-!',$7"%""%! !'&$$& "    #    + +   + +!$ #   #      "  *! !$- %  +   + + +  +   + +     +   '---)"*-"# %,$"$&$$*+'"!"$&'%# ""%"%&&$%& #'%$$*30+%$$ " "#*""&&-%,'Y"%!4!&&1/>0"'#*+*'% #",-.)"4"& "# )(**(%),,/##')($# *+24320300222/16+$%#  + $140.)#0."%,:##!+  # "!!$%"-!%%2.%+ *"#&($$;,&1'0/?+"!&$!$%$#,2)RPQ?4?K('&$98"%',&'$"&!$#/20$';G1@)'% bQRIXWb`^^WVdWDL[b`1+%D>} ~~~|~~~}~}|}~}~}|}~~~|}}|}~~}{{|} +}||}~~}{*}}}~~~|{{{||~~}{|}~}~~~~~}~|}}~~}}~}||}}~}~~~}}| }~}~~~}~~~}~~}~}~}||~|}|{{zyzzzyz|~}|}}~~}}}~~{|}~|}~}(}}|||~~~}||}~~|~~~}{|}~}}|~}~}~~|}| +}}~~|}~~}}~}}}|}~}~~~}~~~}|{|}|}|}|}~}~}~}~}~~~ց~ }}~~~}~~}}}~}~}}~}}~}~}~}|}|}|}|}|}||}|}}||}|||}|}|||}|}|}|}|}|}|}||}|}}}|}|}|{z{|{|||{{|{zz{zzz{{zz{|{z{|{{{|{||}}|}~ ~~ ~} ~}}}~~~ ~ ~~~~~~} ~}~~ ~~ ~}}~~}~~}~}~}|||}~~~}} ک䎶ۋᔣʋܿ®ųџѱʬ˜ѭȼȯìX̸Ԯùŧķx+  "!4 #5DPPPSTVUOJHLQNLG:2//'3?4***( !#3"(+*&"1(/47?FE?<<;9730,)L6UZD1(C'),?>MAXOV϶_D?!##%(\ʑ4 $ B˽~=0'%$$;εzȴϝd:DBL\8+:뾽ՒԞ筞{aK;?0OŪ덽C0"&5!׀Κˁ˲߉О鋠Ɏ쾥܂ӣڵb8.F!!(82BsㆌëҤ|ⵗУ̩Ԃڿ|ʥހ7(  +1(('('')))((**)('()((''('')))*))(((())* *   + 7င󉚀Ƕˀğ蛠g߰铑⸸ȴƩǿݕȺ窦J0//..-../0/0/F.././100./00/0001101211001112220/0001343223232466554344455667765667  O #&*+*&#"! """##%$$$#"!"##$#$##$$##$$&&&%$$%#"#%'*---)'&&&(((''(('('''((('&(*,-.-,+**(''Iҽý¿ǹѻ¿ϸխȰǺ񂌝܂ľŹրƴ帗Ͻ㔃񂘤ꂡӬڈ툁ʸܼƮƵȍށδĔ䞓ӱ۹Ǐ͈ʼø˶̦ŷÎƴۃԂľ򊬝ϳݡǗɘϼ۾ƹՅـ׸ĵűᙊꃈȦ̩ץ̩Ĥĉہᴾ돈Ո抎򉝽ж̽ŵ‘޶獏ӴΗ̦ՉןƐԲҺݜڵȢ–į؀Օ̾üҬ۵+ᵏ턍݀+5(1..9>>]=B:@M>IBKW4I`dCa_?jCYIH.>H[74E8G(N!%JD@4=&1XjcN+`PTdaOY@AB@>D&HPSadh_aZS^si?1846Fda>8.E98+%#$5>5BHeqjNbcE-GA1+'=84%\4KMFAGDG^[CIF/a`SM!4AIWUhBCBBBCBCDDDCDCDCEEEDEEDEDEDEEDEFEFFEEDEEFFEFFEFEDFEFEFGFFFEFEEFFEGFFGFGFGF1GFFGFEFFFGFFFGFGFGFGFFGFGGFGFGGGFFGGGFFFGFFGFFFGHGJJLPOLGFFHGHFFGGFGFGFGFFFEFGGGFHIIHGF3EEFGGHIEEEFGHHHJIFGGKZekigjlkjedbeggebYRQTMGGEFEFEEDVCC>74Mj@whVYFjJpHk18x:[zETzyGCBBCCCBBCBBBCBCDECCBBBCEFGDDDEFILONKHGFEFDFHHGFDCCBCCCBC0EDEEEDDDFGGGFEDDCCDCCCFLQSV]ab]YXWWVRQOPr{RGHCDGC|IMUwdiiŰp2&O?ABBEUPCACuFA?CCBCB4YTwRrdvRYw}zWUlMwMnp*?4=J34'LM\BENB8V9wLIi>HP\c\pyB>F?=7AWU\9y^~TxZdnGPrNpCQh`>//s2:\;Gr_mxa(O;c]F=KafLuirrك༎Z~ǂucq89998999898899898 998899:9888989:9: 99::9:99:9:99:9::99:9:989::9989899989989878788878(788778787787nnn776mom7nonnnoonnoopnoopnno!7opono877pqop7p778889p898988988989::99:::9:9:;:;;;:;;<<<;<<<;<=>>>=>==>>=?>>??>?@???@@?@A@ABABAAABCCBBCCCDCCCBCCDCCDDCCDEDEFDEEDEFE FFFGFFFGFGFGHG HGHHHIIIHIJJJIJKJK +LKLKKKLLLMLMMKLMLtbh>i^a`\PFDB???<=79;>:358>B<;A''(+((()'*,M>JNo[\C\GJL[jaa||onnnppqqpqppoqrqrrqpqpopqrqqrsrsssttsuvwwvwxvvx"yyzz{{|{{||{>=>}>???>>?@?@?@@A@AA@ABAAABBBCCCDEFGGFGFFG<944722;%<<634-N.13542300(I7766442312443588746: 98898740//1.-,XVUUV*++"/(+240UF'383213///-/00+-1./--..34545247:?@><8==;=6:<77687"=7A#/((=!!5*/.!"'->1=%=.67?'"2 !(# !2 1116.!! "$&$ %#31464020.14+++)*-56--)/,#!(/5>3*6- 3+'*(&#" *C6HAACwKENO23/("+0#3#$&!,"'$/+<#$/"2)%,339:A0+)1F==m\WIBALJkQdiXC8;:O)8=A81..R>U/Z2IbTCI[1QQ5ZPMD.+]=GbUH[G?;4.+NWW)@AFJA<@AB=B<30;9FH>4!!.2&KYR=Q46aDC<6X>6M5V_5V3 #9K31./4=4K45C:H=JYK@+.801B-4,3/;>3JB6,EG>7FW[G++Z(QJLKK@<11C;7/E18BLC1SSrQGJ:8FK<>NOC4=>:<=DFEL+HLA=/f`Y^GDr8:;>DA/3:3}GEO>LEBMQK:a>g8beF73[G-/ ..,*)+*$.,1e8Wgo^djrpjY_pfh::6ZO& ""8" !&"""*+::*:8%C+;,-#.(5!'-*7;.) 6YR6IDJVRBL641-$'4FN\^ZEFA8B\W4&+((8VS,.(" ++,46QcdJZW59<*%,+-"]-LSMGLGG]Z?CA(]bTB ':]f|vgTR8,5LU^BB>GOHOWYKC726114865581:8.6<#@=>9/VXJHRLPTfiOJDK[r( D<ԃضܐЉق앲ṛ頑ٙ墨򡚜Ǖr*?݇򙖒ț kш΅ۉՃu'A5'!.A%nVު洳R1A;(.W|\gM5H"!MdS)PHjR\.Gxa6gHQ2s jE11&#')H4IwN7Ȕܢu47 &"HMoe6! ,!6&5#>LàLT;0mX<.)LL3 ʒ +# ;u?hYZ[YL@;742300+-/0.%$$'*&'(~0$)#&F8U3?/`oshhgkhttwB>D?;99bPnrptE}wqQMMNFm>/*'',)*$%/'54&&36#)("#%&$&&'((&()*,..-.-?.--,.5$.6++.+,//./008N:4/76TKI6D688CPWTz:}rѾՄրnjidfſ\a`usyuq|x}xmnoeddgnknjmntnf`ckqlvwz~jadjhcbRTTINHF??AA@?=9:99w{yr-yLyqpsnmsorhedj`[]\,**))./:479;?=:tmf1/..,*'&-+& !$ #'')&&'!=%)*,+*,(&:)***()()')*,,/0//+,.-+*)))*)'))%%%$$%$#%&&PNONM$! "%KC"$&#! !  !"  !#%&()(&"$%&("##"!!"&&,/.461*!#1254;23>8A6P4&&.195/23 " 258"% '&"!()%'"%   $   +    + +         +   $2!/"&     +  +  + +  + +  +  +#().%/) $-%$*%%# 1$1)!* &++#*&#$*"  !%,""###%&%%'&#&49)!!"%.,)*% ' &! ! %'(($%- '(93$3;/@&#%&'"% +-"# %1),%% & ##),-.&%-+-')',*+-..-02-+**& #,-)+*0-)(% !!"#&' )0#(&$6&#*.. "$"%'!%  ! %!*/;.,1,*21&6;,!!! %#%#+,YVMP:2L#$&25*&!9>$'**02.&C)F,LD2-'A. &(K,TceX^dic^ORb\^1/)B9}~~ ~~}}~}}}~}~~}|}~}~}}~}|}~~}~~}|||}||{{|}~~~}|}~~{|}}{z{{|~~}}~~~~}~}}}}~}}|||}}}||}}~}~~}}|}~}}~}}}~{|z{z{{{z{z{}|}||~~}~}}~}|||}~~}}}~~~}|}}~}||}||}||}|}~ }||{~|}}~~ ~~~~}~ +}}}|}~}~~|{|}|}|}|}|}|}~}~}~}~}~~~Ձ~}~}~}~}|}|}|}|}|}|}|}|}|}|}|} +||}}||}|||}|}}|}|}}|}|}}|}|}|}|}|{z{|{|{|||{zz{|{z{|{|||{{|}|}~~~~} }}}~~~ ~~~~~ ~}~~~~~~~~~~}}~}~~~~~}~~}~}~}~~~}} 㑀ŊɋŦǵɻʗƞ˱ϥɚWä԰̡Ƿεx&  l $,47.,++.($  2>ITPQRVY[VKFHIJMOJIA>7*#%$3XU%(C $%# "'*+)%"!!!$'15:>DJJFBA=962.*'COtJ2%*&3<+-YOJevq[1."B֑:ko(,+ŁʩwpY>:K2*_Õۈ? !Q7$5v/G]a^gn\,$ #DXΠQ7+:&!ER(۠[Ҧˬу􀒙ӽՔϲӎҦʉf:864<"!*Gʄֿۿ퐓3§YbեӇ2&&('')))'()*(()('((((**))('()+**4󖬫γ÷򔗑ܒڤXƶټһýӿ̿Т崱J,/%..//00/0/01/1/-.0/.0100/010/0212/0022100101/12333213321245544344446688Z !!! !  !%(**($"!! !"##$%%$$##"!"#"$#$$$#$###$&'&%$$$#$#%(+-.,)'&&&(('')(('&'(''&%%%')+,.-,,+*)'Qƹξ󇌈ؽõԀ¶̿ôĵȀ̹©򂎙𖞡Ȕ䨹¾ĀͿĥdz畆񘃆ܬ݃򀅇ᒅĹ苟냯ػŖ߻䃬­ܼ¢ۅ˿Ŧñ鐎ߋćގށ丰톇كᙓѤᾎ܌ůõȝݯ㴢ؼͻ敀وЫ󙍉öξ¿ûŰǿĈὑμĺ߄ȑڮ֣΋҂§Ԏ蚞ՙג􋏐Ȃͦ4ވق矅ʂȘҀ$843<>7@F19>DNAXGL-./MUA:@B8HIFFKWIFPE5DLY2.UZJWTGMZj^HAzEHTGQCBCDDCCDCCDDCDDDCDDEDEDCEDEEEFEEEFEFFEFEEFFFGFEF GFFEFFFGFFGFGGFFFGHGGFGGGFGFGFFGFFG +FGGHGGFFGFG FHGFFFGGFGFGHGGGFHGFHJKLKLIIJKIGWHFFFGGFGGFHGGGFFGHFEFFFGIHIILKIIHGGHHHINUX[USQRROMKJHGGLX_dlgggiklib_`abeedc_]WPLIHHGGGEDED-N9Ybl64SuKYRlCDOL?L\=CNmEDBCCDCCCDCBCDCCDEDC&EGHGDCEEGHLNNMJIHEEDEFFEFEDECDDDCDCCDDF GFEEFHIIIHFEDEKNUVZ\aed`\ZYWVTROOc{M)FgJFEBDBE\wSYgMnjU.^A7ABCCG:eDCJd8C>CCClCHT_}ZCAB7AACA{l;@3?@@?ALmr]iYT#?~|~Yz}y|[WxY<>@_x~27JgP:RANqHHkm>FjcK`PIo~db\pcT?F^yH@6chuiYF^{nAj%o<>=>==>>>??>?@??@?@@?@@@A@@@AA@A@ABBBCAAABCCBCDCCDCDEDEFFFEFEFEFGGFGFH GHHGGHHHIIIHHIHHIIJIJKJKIJLLLKLLLMKLMLKLNLMMNMNMMLNebgcK[fMKDA?@@??;8845==06;CB=IR?>>>?@ABABAB CDDDFFFGFEFEEFEFFHLOQROKIIIJJKLMNMMKLKL'KLMLLMMMLNOPOOMMMNOOPQRVWTQONNOONNOPPPOM +NONONNOPRUSPMMNpʸ{|lkji;kkjfǼ|u|{u}{}wklu~}vpqmokbtibXQQKONDD[`o^VICByHHB{urhde_`2:?AHMOSXWTRMMKIECEIEC@DDB987226/0-MS.2643H311+E25632323234424534535899899899:60100.,.///.UWYRS+.&(3,35]LI454210/++,,.-11/0//2558;88=A>>=>><=;=@@AD=@INMFD9<<9J4';;CTUP7AM8A2CBHH:?NO-&(.7/(6*-AY-'BHII==%=7>1C3%)@'>(I@/%#H=126D=A/0.08,%93* "&! 6A"<-/75=E&1,83:2,-"$%"31241453852114.--+('+"&242#!))0)=#81#'*"  #&%%"#'<0OeSgpLU6(5=+0)(<+> 2!#'"/11/22$3&(%$D 1F5J9$0@93/XON52H@+W_P[\\:02YN).^>X/JU44]M.R:+G/..RBHC147J8:<,;IKBA58@5>64>2:CA9@215/+/373340*G?+T<8<<;86;87,SROTNNJV-TN.@[/U\B;0%20.TA?PN\[`_\[WSHG=E@>CEHE9:JUG@EH0>9M:AOQ)NPP95<1?F=RJJA.\8630.ZWX`[`_3>TOHB:Jf[vnNHaG6A=LJMF3@C&52RRKE0+NI_9=6I=*IPF3#07/dN10 (aI5532UXSPQIAFFGY5[]IQKA3C>?7M7F@;2-8?Z91WN;72@>@Q=4\0OB&'7OD(:KA?AU2TC?5\N62;59=>;:98cuA]697:>?CFF9CCG]&^_^\:BYch8?C00,06R]IIFG317BJ:EHJh<3b[B55/+*,+(' 5+7^8WiXhhspnaWrm895cOF($#*(!"!!("1# '0$5:*!-Y^N6-$73YGAB;/*@Z\)*<0% %;5(IX`X:]K$=06&*/$\+GMNGFHDW_FCG*U_SS!'3Ug{yoQXQ:)5FaBHFKLPOV[RRD694:;.A@958B62=:,;CI#"LUFNLAM^qaIANWmž/#ҼՒ׬•΂՜ݚِꇠ߄ڗ~:NxphPciٟF"/J( $ :f~F9ᛈzoѾbcgÿd´ca`]zrw}{~w|rppidjfbnlhhkori\[qsrq}sitxqjhiefoWNaPKCBD?@@87nyACKBB:8:xrssfiqgio;<:qjfc[XXQP',-*.001478887861011.+)00+!!# !'&(%## 9C'*,+-H/+)!9+,+)((()()*+,-/.-.+./.,++*('&)(#$"#$$%&(((PPRIK#"  (TMD)%""  !#"#$"#(,)&%&&$%$%*(**')-33,,%'&%0#$&.??<'1=,2!.,44',6&*(2##(:))+*# )#  %!*"*!#! +   !&   +  +        +       "  +  *2 ! "$0(#-    +  +  + +  +    + + + + + 2 "*%$%*-&.,,*&/+#*/$&%' !!"$! '$$#'$#&&$(') %# ++.-+*((  %# !!!"%!$!+*)(/001('#$85GG1*:*#!('(&!!# + "$   #!(&)$,'(---0' ##'!")*'))*-.---'(+,-+&"%#((&##&*#"# $(#&  & $*2".$'%## "!+()#  " '"$(#!)(+( )%)-/,+-4GD,W "!! #2&XSWR10@DD&04 &)" %"&,0%+@+'1=4G2-TI3*'" 6)WaSb`facRIaa11*K;1}~ ~}~~~}~~~}~}~}}~}~}|}~}}|{|}~||}~~}~|} }|~{|~ +~|}~}|}~{ |~}~~~~|}-|}}}~~}~|~}||}|~}}~}}~~|}|}~}}}{||z{zz{{{zzz|{}|~~~|{{}~}}}~}~}}~}|~~||}~~}~} ~||}}|~~~}|}}~~~~~}{|{{}~}~~~~~~~~ }}|}~~}~}}}~}~ }~~}{{{|}|}|}|}|}~}~~}~}~~ˁ~}~~}}~}}~}~}|}|}|}|}|}|}|}|}||}}|}| }}}|}|}||}}}|}|}|}}}||}|}}|||}||}|}|}|}|{|{z{|||{{{|{|{|{z{z{|{|{|}|}~"~~~}~}}~~~~ ~}}~~~ ~}~}}~}~~~~}~ ~~~~~~}}}~}}~~~}~~~}}} ɷ⎔𞎏ͷׂ̼˱ǩԶӁɓϣƳյϷZѯӳӤɾɹijɎ|%  l $" "!  '*-28=AACA;:4,!+;CHPPQSUY\ZSNKJJLPTUPKD2(%"!('72N0/!6@+ #'&%)##&'((&"[#%&'%!"*(-29>BEGGEB>62/)##%K*.H?#+!*$('C[MC:cEpvp:SJ=!1*(&JA3/;kg<1&pŬ4"9rԁѸ՟ؖUq7-)(E]1$&=^S%4I:=/<';>m)" ,&Ep‡ÞչȀ.K(%$GFcKƶU>uý贈ֹ㥲姴ŗڗㅖ񓑡甥c])!0OɞȽȢĕ)ۖ0$.Cт]2 % $  ())))((*))*()  + *ڛǞŗ¼蔖򐖑􃧲iϾ߹¿º輽ʸ̶Л׸v/00/0/./010//0/.-/010"1210011332001220/11102211012334333233555444346466797 !   !#'*+)&"! + !"#$$%$$"#"$$$%&&%$%$$(+--,)'&&&(('&'(('&%((*,--**)*(%C¾˽~燚Դ½Ļ˽􋤧Σźľ򅔕􌤭ğʿ˹˷ũֿقϔف􅘍񎔎ì׫ֆվη˨ݯ׮޿񕖩Ƅ͵ɴʀ񀉝ܚ鈋ź荔靤ʂ򁂁ˈȉو˘ܟ̐ѩܝח֡͸Ƽưؼ簦¦׊􅄂ͶϿʗ·߿ᤛ鷴ҷҎDŽٔ➟Ἧϼ缏ğͯ©ɴЌ󒙆njڀʍ́+ޙ̀,1@=9;8;B/=m3(>A@;H6-CFHUuBTJof><6OZJ;8U7;H-3%)6I6>-1)HCA==>>>=>??>?>?>?@@??@@??@@@?A@ACABBBCBCBCCBCBCDEDEDDCEEEDEEDDEFGFGHGHGHIHIJJJIJK LKKLMLKLMLMLNLMMNMNNNMPFjc\UhaB?=::<>:6<;(:=@A<=AEE%QHILM()(DFP;B>=E=;>BGGC@FuSfRjJaHEAIQ`foafgoooqr sqqrrqrrrq?rssvtssrsttsstttrttstsstuuutuuvtuuwwwvvwwyyxwxyzyz={}}||~>??>>|?@???@AA@AB CCDDEEFFFGFEEFGFGGFFHJNQQPMJIIIJ +KLMMMLMLLKLKLLM NMNOPPPNMNOQSVUTQONNNOPOOPPPOONNMMNNOOONNOPRTSSRRPNMPfqʻz~x~rzwol̿pkid}|~w}wvywpz{zuyqmoonpljeb^ZZ^YXVRNKHVdE^kphfWPKHG~IRJJJID{x}lkge`VW_6A@GMNNQSSPPMKGFJIFHKJ@><6.4:72,,-OJZ27745412&.34573131312224336433877869954421.00-,,RVVR+..#&0!)040MC'343312../01./00113463:>89:?<;====ACDBGD=KJCM=@<97-353GAKK>:''%'0*(0&3"&*+1D)4$94.<#)!66##+,) #$4234.4564323320/,,*&#!$9(!$$)""$#!,(2$%   "!D;Z]LL\D.E403*9"*>,-2='%&%,+ ;?98,&'/7+:9,J"!0=1:4*6D=BrcSJRX\Skx,*9:77;970TUJQGTV-WKM341THN;B%)1/XSNSQOTRWQTQTKBAEGBAHFEH<;LOKH?H4A8"3=KM)*+.O85?;;GAIMJ*W4>8Y121Y7fWOBRMYNFC=PQPj[9BkeER/OH*,>D618+UMCDMU*T>HM;=9B:'I*$#L7A8L>==8.-,QW+.14223-044503730111Y0.[11ZZ0W00-59779;7:788798757:3.622/3167598988:;=97;>A?835\WGHVYU[.QV17.RSRSKNODCJG8?rO@cg@BOTGBJLDGEU4<;PC9.U>=7/O8PSGCVSGZ[1+95ZXM?F;0SJDF=OHH6)[32/2K2/471@TV_3;*\C[e_>a/44B=7.+.49AHN*Who;;cGO?XRaw&Q>5^YL9:4,("!'522>H+bZiolqq^S\gq>efdG*)*(# 6 %" #!*9K*5>J>$ ,0%5%'*!"" + !4\kZUI14/0)>6# -E_\;(%<8BQJRUD&3GaU*F=O" *6,6DMh7TS5 -62+')0f,@LNHDGAPdNBO6L[SXB*4Lbw}k[^YH-%VGASGYORUS^VYK4>7.K8DFC9@C36<:8;A'}#k8?-@5N: #B8jN!91"XbB ,/+2'E4X븚Τ[FKԍ|6Ke7e7:f.=1"*Y,  + u!j_Tb\|<83.,/30//..2.&%)(&&(+*3../0&!+330DM73.48@Y^Pc~ +ym~iomfg²hda[~yyvurpqtmrxspjkfchf`flgmg`nmqpxsvqlhbehjjgc[VkPLHKGFF@>:8FN8uyIRSMaGB=<;11( + (!\TafaddSIT`d6SQO5}~~~~~~~}}~~}~~}~}~}~}|}|}~~~||~}|}}~~~ ||~}}{|} ~}}}~ +~||~{ }~}}~~~~~}}~}|}}}|}~~~}}~}~~~~~~~}|} ~~|~}|}z{}|}~} |||}~}}||}}~}~~|}}~~}~~}~}~~~~~}~}}}~~}~}~}~}}~}}~~}|~~}~~}~~~~~ }}|}}}||}~}~}~ +}}|{{|}||}|}|}|}~}~}}~}~~} ~~~~~ˁ~}}~~}~}~}|}|}|}|}|}|}||}|}|}|}|}}}|||}|}|}|}|}|}|}|}|{|{z{|{|{|{z{|{||{|}|} ~}~}}}~~~ +~~~~ ~}}~~}~}~~~~~~~}~}~}}~~}~} DZܨءȩꟳ⋕̯ҭܼ拋׼Ĭډݪə̵Ǧ𨱫YӼϵ⻣dzƵ$ ! + w&)+'(()''$! %((048?CFKGB?>4%$4DLLRUWXY\^]ZYURRSUVVVRG5/,(" $$<)6;*'=GA ,%S!(#$$#%#!##! #%'(*'!'+(*.39>BGHGD=1+&!!  +-H''3?65?D$JȊ~B51+$ !###*"!7UKHgkN<$!)-D]H}ȜÅʁ롶Q5 -.9ӥ롧ɒu') 6;T'90# *'&&.A$jíLJP"+% Lw[T^۷xOM?ԍڂ䌈֐̴ʖyC=񭅢҄Պ7;X1@?;A259Q9ISlG$5FI81lbXELCmjFi^fpdFOg;71)U97CF!9=X4J9I*0G5ckCcWZK('$)MB4OP6?!CWkh8;,),1c_PMZ/1KVe^31GPI#"2#FB>?RWlYH`Q1/928<20:h5AIJCAFDG]PESHRYUZ`)BMQ]gwgS`]X@&dXIMQgWY_ebMPZJCB6MGLLKISTFID@CDEFEDCDDCCDDEDDEDEFFEFGJKJJKIGFEDDEEFDDDEDEEDDEEDEEGFFHJJIHGILOOQOKHFFDFOPNOPTW\_`baa]TPNKJIMvzs@8EG?nP`{LxX(XTTPLHJKLQb:F]B=DDDECD7c[pCCBBCE}ny]A{VpMvWRnΊNmkfduliգmkk?>>>KeCJ57J>HXEiPCITJGqAPO>9?T>P)BGBU@6B^³qa3<-UZru~t=6VS}^6BbhnmZ~mȅ?QeqDztUzjsqupmp^o9:99::9::99:989:::9:9:;:;;;::;::;:;:;:::;;::;:::;;;:;:::9: ;::;;;:::;;:9:9:999:98889899898778r8p889878988q78988898q8899889:9::99:99:::9::;:;;<;<=>=>?>>?>>???>>?>??@@@?@ABABBCBBCCCBBBCBBCCDCDDCDCDDDEDDDEDEDEEDFFEFFGFGFGGGFFFGHGHGGGHHHIIIHIIHHIJIJKJIKJKJJKLKLKLMLMMMNNMMNNNMNNMNQtg[nb[AA>?:?DFFA<82;8">@D@<9@GG$+I'')*'%D?GGM&)+JP-NO\jjg7]axsc^ekwkPLGBCASSyoqLmTU=jyBi}oND;81//06\54788:8:;;<<:8;;@<;=BJ;D:8>>:>??>?>?|@@?@?@@@AA@AAA@ABC&DDEFHGHFEFEFFGGFGGGFHJMPRRNLHIJIIJJIIKM +LMLMLKMLLLMPOOONOQTUUTROPPQPONNNMMMONONMOOQSTRRROOO~oǽ{ʼpvtrkÿb||}zyy~ztpvrsutzyslfjxqffljdbu[RRRSVUPNSLNO@DLIWZTXNS[GHHIFzuujee`SQTX\4E>GRTTUUX[WRNIFFHKHBG@??D8404/+IP]3557503//466:402122123433343a165468954667642/-*)+(NQR*-,,%,*",+/HCJ-34011/00./2633036;478DC=86:<<::'A'1<7*3C-0)E7%(#),#76799@.'% "%)'+3-$5G7.6+' ;)D19E)> "(%<2#+.6(%,,5A;dU[_K?c_HVS<56382OW72C(W:>2W[20.-UPCEMAKIQRGD@?T]GRNB6>7D.9j40S=10;R8K:6B8.U21WF>A>CWG5.,W.\/L10>>4+JD.M+/I4879<:7/WO=PJVV,QPT0MZBF3<;+11.XZSQPHTPMMUPME@ANFIIA:DBCDDNO@AD&A>,"SPJO),-*F@HF?F[RM;17544S1VW:3AJJ;SMJE=9Ac`NZ:U8AKmLWNHCiV;33NSSEEFZSOG@($%0+>1.?&#!,5(4=<;/J+.PM0/0/0023//58:2352652.JS-.VUNZKS+047847;997;99875455+/4469749967:;9;;9;::;<>>90..VPQROJZ/-.350Q>EKJQMRTLaB^^1B;<==8:=;:<JZOE1%":<433_\EEJ9-41RO6PU6(2C)'4HMDUE532@**>I?\:3/PKK7=@D=/XXZaUWA9,B(=4S1.HGK@?3F>10<;957[A8zghB:9<91J$3;>NF6Fc_VuDNUd󬣠 B5ƿ֫𣾌舖”߬Ǻφ員ԦÎҙrՀܘy?A>'0! $ Aas4(9QI/ "ƨö€ػG=( + #@7B굳9.rs?& "(3Ԩ%(/&4858%$D!$"3 5  % #*'4pt"~:Wo[a<]!71H;qOSG!!+Xeɧ蛛c'HrR5$ +#3=3?@<(H>) BdڎeqbZ|=:63-1579400+3,'%*)&!$((,}$ *-/.215IvEIDAei{sbajo}~gMFBKjU9>A5k:A;DEx?A}~~y:lrzywAB47574hgjgeg_^\WIHIEF$1-&+0012158751--/46/(,'$$("!" 8?L++,.+((&'+-/1,)*())++,-//\/0.--,+('($##$$#"DFE"$  #)DC@ $$  ! "",*%" #$""#'-9.,/83+-:75+0-$((2-2("! "!);?7!%+!""i).$%%+3 # )'#!#% !(#  +       + +           %%    + + + +   + + +  + + &$(-(,(&!&&#''" (+!(&$2&*&&%&&("'#&'%$%*"( !')&%&&$""($#% !!"!% a,&!&))%!)#" !<<09%1"&-;,0'%!:) #"'"" %#!'()#*"&)&(*%!)' #"&#&)#/0< .&&**())(&''+%)-(!%7%'$#$&%%$$!'.''.. !"-/() !!"%)"!#"$'%%*(&*).*1$&&+($,+,*.P<2\F="!#0, IaJ84C6A'A>3/&  *"HFLK?5&>=+OEF@7.7-'33.).  +82T\\c`^VJgASaXNPA}~~~ ~~~~}~}~}~}~}|}|}|}}}|~}}|}~}}}|{|~}}}~||~~~~|{|}}~~~~{~~~~~~|}#|~~}~~{{|||}~~~|~}||{|{z{~}}~}~}~~~~~~~}~}~~}~}~~ ~~}|{|~~~~~}~~}~~}~~~} ~}~~~}}|}}||}~~}~}~~~}}~}}~}||{{|}|}|}|}}}|}|}|}~}~~~~} +~~~~~~}~}~}|}|}}|}|}|}|}|}|}|}|}|}}}|}|}}|}}}||}|}|}|}|}|}|}|}|}|}|{z{|{|{|{|{z{|{|}|}|}~~}~}}}~ ~}~~~~~}~~~~~~~~ +~~~~}~}~}~~~ +}}}~~}~}~ }}}~~}~~~~}|} ۂӾǣ䁄Ĥ˕ӣٻıꅄղĚƼ쥲н֫j˸ǯſйꎆ5   # "!#+.,)-0/)(($%'&%),18>AECABD?0# !,:IOQUXY[]^]``][ZXXTSTURC320-&#&#" (#&6@?a] ),-N"0-%& !"" "%%!  $))'()))**$!(**+.29?CFHHE?4+"!$;U7,5&L4@;GD>AZxvqF73,'')'$"0 )aiNJA,ErD*)0;7-$A"ʋ㏐٬h'(Hѱ'!3-W>%&-%@ *"&B=7܁قCN;"4hG2hg@jO]É̘/""&%JѴǯ͚؜`ċׂߎ٣葓㓛傮߂䒐N*,aP{7xʽ˙ƟʇŶQ6.$  +*)* & *򎃅섯ؒȺ䉘ڹܙ莨ɯW̾疞ϭ¿ǼسۿŖހꊾ݈c,10]/0011100///./100/011013211211122334323231232233243234433423345656565446766767 !!   "%(*)&#!! :"!""#$%%$#"""!"!#$#""###"#$%%%&%$$$%$#$&),.-+)'&&&''&'(&&'&'&'&%&%&'),-,,*)'Mkǻ胊ѻõɽӽˀIJÿꂓꉡƯȀ󃌑򄊊źưĤɽ؁煛ʹ󆌍炂¿¡¢ОۢŝރݽきၚۏĴȃኝ䋖²̶ˀԯκ΄♡ϫ拊ȣ͡ǐĦޑ͹ץ۾ɽŀdž슓ڱԚ𓔊ֻ±̈́׍ќߜ㇒ݘ傃ʼ»˜Ʀԋє䝆یս⭘ħڧȭɚঃ󖂪ܢꍭوтӰᔍ2̱䄨Δ˔킏ᾓ޹ԄSGAB6@H1<@\9Z[MdJ-$/ULNR@RmhGSTY^d99UnZOdZMA6R*&@5DNM<85C/'CLC;fWC? (K@I2T6==Fepi@F%#,0d_lc:IIJCTOFDFL>#3:ABMLii@W\<+25:*%02g?J2W5.?9QYC=FleuNBFJ_GDEEDDEEEDEEEFEEFEFEF GFGGFFGFFFGHHGFGHGHGHHHGHGHIGHIHGGHHHIHI HHIIHHIIIHHIHHIHHHIHIIHIHHIIIKMMROLNJJHIHHHIIHwIIIJKMNOLKRWWVSXYWSTUQPSRQSTW[``ca^`caVMKKS[dghkihjlmllnmljijhhhig`TSTSMKPNIHFGFFFBJ_FLVIC-6^-ypSmqZHaRxkMFDDDjnHFED +EDEFEDEDEEFGHIHHIKKIGGFEEFEDDEEEFHHHILNMLLMOQRPLHHGFFJNOOOPQVZ]]``a^WPJGIKOw{&KLoJ}O\nwnxd .c'[XVRNNNMLLnJF;6DEDEEEDE=;<===9YD[RYpNF<3>EKhnYyiH-ALuvWlqj^9/D2H@TJGTOW_KV9~}sjsmvZQhYPHn5/430K@>2dt9\RKWN{Aa@[smzp:8:=Jle]xngf_I;kq<]`8JycZgulTpNOkjdtYzǪy`g:99::99:9:;:::;::;9:::;:;:;::; <<;;:;;;:;:;:::; +:;:;;:::;;:9:9:9::9:9:99:9888999898999888q99r8899:99989888999r989::9:;;:9:;<;<= >>=>>?>>??>?@A@@@A@@@AA@AABAA@AAABABBCDCDCDCCCDEDEEEFEEFFFEEEFEFFGFGHG FGGGHHHGHHIHI JIJJIJKJJK +JKJJJKKLKKLKLMNNMMMNNNMMNMNONQK\SXLHDDAAC?ADDD@?9S84&7?A>96D&%A+&(')%''%&HJ*++*IM*,PiT\W.tki|{xofhmt{j|ILGCDBHxyo~~bNQ>oCpsJB9:4/.06^12;:<@L;:@BAADwbiUZ?Vl,?7;[Tcgp^qqqstttstststtuuusrttuuvuttsuuvvutsstutsuwvvuuwwyxvwxzyxyzyyz{z{|||{|}>~?@~?@ABABABBAABC BCDDEEEGGHGFGGFGFGGGILPQRPLJIIJJIJIJLLMNMMMLLLMMLLMNOPPQPO +NOOQTTTSQPOPQPPOOONNMNNNOOONNOQSSRSRPP{wk±wtƺqsmle˷ֿ]~~~vw|x}y}{pot}xssjkvtgibfedic^`RPXTSPPKQQJN=A{GUT`WIL{}y|old`[\UTXW]7@FJRRXY]ZTURMJKKFFEI;;728832$BP.124863//38::634_141.4303203cW^3557655248640W)*/102,---,+&1!',*/,,123524440/.00299698636>=?A;::8=8@@FNOPO\UCCK>CA;>969R60+T(.G=6:LA;<3-*,+*,/('%%)(#%#&'CI'B>8806%'.5":(&,)?G*DG**2())1=50,/&A>C&&)2$B&H'-107:8>C..-*C$==EC6!,4KB$?01-2)+/6/.-"23134222-021.01210-))*)((&&%%!"$$#&$%1."*%+ !$67914Q8P1)5*=5$$*-*)%08-+)* %#$*,*)*/-=(4>#52!3,$4AFoow>A5GY2^fooXi166 85U>lwqb]t{<86,82/*5'&(=; "") !!# " !/697@138<:EH9=1./5U-2TMKFPLJJSBFLJ6DG=HJCKL@,A66=Y7<3-YX.WR44:/02NH<-8D69479::7-MH>WWSRVLUI6XL?A2?CG).YUWPMLOSOQORNHCILLJBD?CDFFEKIHI=;=A= ILPG,.,)RQK<7c2J<6$I9867U:7464b[[GMJJJ?8ITj`PVLB2G5:S[S]PWS0SSL,K@MNJ@PQ(/4YA6=<;;:9;698:984.WLLOMQPU1-34331WZPSZLJKLHgH9COMF5,33H(FCOVC7AT89P4+4>ifSNCV@943;78YNS+H0KEECHJ8C>Z?3QSB294S?1yAi?:2-6;:4X2KDGBf6Dk768768123:HUM_MKGvYnd997/CA9KZtAJXY<1N88l5B4$ *1.S7J7T\pk[JIbx[qVoCF3% -#"+(-*9+'!'3FA,D<;==!!-:0(2.' (!$&$(YI% 2,/!61[mf0"[^e[3D2 (.8:SU/DQ0#-2&%*89CLJKHG@TRBOIDOJWd8:GHowrXe]TC"9OW6UrWSWbVFH[UIG?7NCQK=?C58755?)H, 2.FQ>9DldsKEK^ॣ +Q݌ڍ٧ٽњֶzbʐǜզʖ٠|ɷ:\%@Xt吆02e(/$8M)#@([閔߆E,3 7!!BٶڛӌΔ͉Ro>"f-CtʖƇ6:쵇›Q#"!/0ų/>3#BA#$2(#3;!? $001%@ceCi,:"-NTjoWV"$@BH=YuFQ7"&aC1K9UȁRt=)/#+$$*71_=ƈ텈,%]` _YLD@>;762578821-I1)!$%%""#*.*+3Ni5;9(}qszvnims{yi|GGD?@=A~||{IeOP?qEozI2)*%$%).Q&"'+6;7*"2:4*-*# "$&"&'&''#&**)())+**+**+1'-+)*0'(-1103\TWPMi2HZb,4'+DE~ZxkǢǏ}{~voeÀͼ{s÷jkdc^²˶S~|zymmnrijljnqvgkja_apejjkvjkhle``Z]ji]_]b_]a[UVJGLGB?<9??~{}{~{;qmkgggc`]cdhb`ZXTQJGEBB%((*.-34752331373+*)* " $#!!4@&()*+*(&&*/01.,,S,-)'+)),,+/^SY.0//-+*'')'&#=!&#$"" "$)'#$#%%"! ! "!%%&'##!"%!%&-4676>:.,5+0/+*$$'9&!90&#)9.(% {'-'%"" $,),("%#'((  &""&#/& + +    +   +  + +      +   $!!! +   + 0    + +  +  +     + + / $&('%# '$%$)!$$ #% "#"(!)&)%'!&(''%!#!)'%$'!'!)  '&'$#"#%#%%&$ #$"! ! "" & !"" 0'(%3//$%"""&0A;15/*#+ ,.)0(+&$% !"! 1 ! %&  #%'$- !, ,)##%$(%')+%(.%"#%"4(%/+/40./.00.-./0/ ; *5/.% ,"%% &%#&!(%..+! #($'#%  !!+'0! 5%"R)A&)(!(+,+M0H@A7I!):"+6JWGF@a?JG0/' "=KKG<8474/?BQ24:3%924_*$  *6.LWdaUJSbpUn]sA}~~~~}~~~}}}~}~}|}|} ||}}}|}|~~}~}}}|{{}~~||}~} }|}~| +{{{||{|~} ~~~~}{|{||~~~~~~}~}~ +}~~~ |}||}|}|{}~~~}}}{|}"~}~}~|||}~{{z|}||{zz{|}~~}}|~}}~~}~~}}}~}~ }~}~~~~}}~}~"~~}}~~~}}|}||{|}}~~}}~}}~}~~~}|||}~}}|}|}~~}~}~}}~~}}~~||{|}|}|}|}|}~}~}~}~}~}}~~~~~~~с~}~}~}~}|}|}|}|}|}|}|}|}|}|}||}|}|}||}||}|}|}|}|}|}|}|}|}|{z{|{{|{{|{ zzz{{{zz{z{|{|}}}||}|}~ ~~~}~}~~~~~ ~}~~~~~ ~~~~~}~~~}~}~~~}~~~~~~~}~}}~~~}}~~~~}|}}}|||} ɡѪŘ焵̯텅Ԙ܀Ϊʻ羖`ɨéɕҳõ@    !!#%$!#,.**.00(&$#%%$""&-39<>@?BEF<,%+5BPTSUVY]`_a``^\[YUSQRSP@1020,)$3!&!$%+?LgT*(+101&'7%!+,#"%'&!!$$"!" #$'&#" $+0/./.++,,)&*,-/15;@DHIIGA90'! !#1R|eH+%)C8z|@aYGNM[UXH[6.U*(+.+'##-+.B=F6)vȺE 1.G,&󒩑딇ű@H¾F#07`-:(!--%=**ÕܧRMq"2}ኹЪ2(%C宀ʸ˒ꎻ뢕cL{kX߇+-ʿȁ3-0ʃ򭠭Qe1́xۊ2!     + *   +  )û醉탄˹႓䳯łՄꈪq˺ٕХǷ½ƽճ澳Ї⒭Ҋź=0112101/0110110211122201 22211311233232324422343323356455654366556666778 ! 1 "$'()(%! !!! !"""##$$$##"""#""##"#"""##$$%&&&%%#$&'),-,+)'&&&'''&&'&'&&'&&%&%&&((+,-+*))s˺ſ¼͵ԀɵṜ򁊎Լҽ«񂏚󀂃ɼö󀋅膚ꄌƵ̶ڲʙςί˽ٕȆЕ避ύ¬ڲ馗º󅘠蓔Ύ킎ނ՟ӽ珃邁ڲ⬞焗ˡߕ󄾑ѷ񁅀۲̲֋DzҾ˳ϚӋ󂊌ͩԣ½ɍێӀÌ􋈐܇􁅞݇ƹ÷ȍєд̨ͱ袮򧧘Ğꔏ﹆Ȟϼɢ挋餗ܹܘЉέí,ô߬㗇꿎Γ֢I[GD"#&B.K=@6hbRWFQB/7XPM>ckS?Mecse:OZUZ4Y_`YPC1AX/.YGM:7=!#&5=dB=>FHK%(H4;+4uC.:CKWlstYGFdU;WG*+HNC%&-79FDQ\f`G^J-(53>!63Z?CDKGDGFAES/VE06@PN>;8g\@MECEIDDDEF EFFGFFFGFFFEFGFFGFGGFG HGGHGGIGHHGGHIGHGGIGHHHGHJIIHIGHHHGHHHIHIJHIIHHIIHIJIHIHIIHHIHIHIIJJIHIHIJIJIJIHIIHJIJIJIHHIJIHIIIJIJIHIKMQRMMKJJIHIFJIIIJJIIIJKLLNPQQPOMPXWTTXXXRRQQPPPOOQVX\\^^]_cf^RNRX_iihighknnnmomlljh8]SSTSPPMKHIHGFEFEIBM:rGDRZQHXo}vM-m{y.GWes|mEEo`rlDDFEDEDFFFE{HGEFGIJJJGHILLJIHGGFFFEFFEEFEEFHJLOMIJIKORQQPQQSTSOIGGHHLOOPPRTVY\]_aa^YSMKJKTNCfMLM`Eyha`9'zl6aGzWSOMPRQNLPSdGEDEGEgB\lZrtDEDDDE{Lj]U[sjOBSUZmqp{|qmd{ā@A@??AQ8~fV{\hdGqhiCp^u8`;lL@AtG?Af<=<<<=oFZas*=Yfn\y`fe}D(C:_ascI%#>J4ANE4-fj5?zAW=_bNmN{fVtV~]Yu4rsPx11;M-CA:\ЊQujNAL;Fq2+0K<-9G:C=SIxsF?>>?>?@?@ ?@@A@@A@@AA@ABABABBBABCCBCDCDCDEEDEDEFEFEEFGHGFFGFGHHHGHIGHGIIIHIJIJIJJKKJKLKKJLKLKMMLLLMNMMLMNNNMMNONQQ_WXQQLFFFCEDCFFB>@<(/7*5D>:7>&%$E%&)()*+()MCH))PKDLP+-OWqL^;opqqvqgpv~nGJHFDCDbqtyOBBDCcBOPFw}izIB:611036^[7C58?=v8356537ABJ&)(#8988;8559346776797789;;:;<<>?=>=AG;<=?JM;;@AB@VaJnsnPo\y&99563b66237[`\.-2eY]3g21342^ae1/.433=8:4...,*)/ *3012142213332/1.234344<@95AD@AFD<74=SDGNPUPTTKC?C52..9;($*MYO-??BEB0.0/6445;#J.*ID@DI?#$$&"%DG'.$6*:*E,4@%9(! !7 "##! #*b<:[/1;=;6?1QTWGJPOOSRSZ^MAKNLGCGLA@JH28[WRHLIJD=4WYjdZbYE=L9FVf^XCS507QNPID.W=5Mb<A@CA??>?@<8*.H5WYL?145H6=[@>910oQBNH4ZN771WbI9R?%tc:681,&;/8h$=ZBL?58S?Zj.202:;50_PBA=CckDIRf/4887\.gRN`NWXVFae;?;/+C:(/( !C!&TORLF?@?=RIa;AFNMFEe6693@>$@6,5N63\G28ebDLCcVm\S_JM."#'/1+/%-!$$%7?4-8T==B8 */*,,21,' #+"!$F) +35%+|p5">_gfQB<_N0J?!AH<"#4CSQ2L=!)*7)+m9;AIKGGD=LZFMNBPJScL.@Akqx^i][N++HZ9[v][adWMHWYY^QkN@R^SED>>48;I&E:%,4EF864d^AKHHMt!͞NԖƆŌ̯ٜ㠢o߷L=-)>E-*B* /( 7:*'*"7=j툔ϑ'+iC&'(@ޒ댏뜍V6 (,YC.SFk8ϴ=  a2C)*2)#iuO( = 1&#iڠђD-0B_ (K۱v;5h%&; X>gRMo}gS! ( + C)%G5ˆdFeZSOIBA?96679:4.-*#()$!!"(&-)(#'*4EM/X@J{y~uuto{~qGIEDB??`}P@@BBb@MOF{kF2(##%$)/PM*/*276+ $4<4%,*$" #'#$&('%$&)('&)+))***+0&*)*01&(-01-SU7]|YnySQYRha ++C^dpruomgͽyrpsyurrojûƹαPYW}|{wunigngboltlleni\[nAjohfsXd^gmhlgkna\[Y^YTfZSWILFDFG@><9:P=_`קʙnue؊ȡӈʈͰJ?$'6з»8"\99&& -+'E%_ڒۉ 63dIt⃷׈.&&0,(Ʌǧ∛蟇岸ٛC4#6#1B.hȇӐܧC+tJQF^<85aޮߺ怂d/'    +    'ť認ݮ㝗öͽᰪף슭炚cľâЕХϾŷ̬ڀܹԇ*102111210121@221222012242422232424323322322454322333432466776554776788  ! !   !!#%)*)&"! ! ""!"###%$$#"##"#"""##$$%%$&&$#$#$%%&)+-,*(&'(' +(&&%&&%%&'%&()*++*)(Kİں鄎ijҺϿ˸싕󁊏ŽϾż턌к፜πȷůð튉ԟʹ˵˪ް㣚ĽԽ½͓ᷮ࡜ʕߵݟʹ׮もøпņӋ׾׀扙ؙ𔌈ᢘ㳧Ӎڲ׳ʻƺ¾þɽڰ鎞ӟ䷠ֺڅꌤ񬻀񁂋ɷƯ뎡IJט芈Õꀢ۞ε÷و̙ۢ۠ٯĴǝ徦ӊ֑㜺Йç܀ǡ+ՕɅǎʌץcJSKC#$%>@?S87d]Q_ddOJ1PAECDGCdANYU`:8;O_FEA0bcff]V5:3-OT<>0Q0#)(5N773,4NR\( #! $5zN;45DbrxsR^oaWRK.(9L]K')-29>BM]mQZb9)/2:249s?>CJHCEHDEYKLOKNHMX\@HBcetqPc_e[M(Mj_XkfeikePBYZScn]QBK]`QPNE@?GV=CH4CINC=fFGFG:>ulC::\bZW.L-TjOrt>>@A@?==>==>ajIcY;>&2=el]UR[}l5=|[dDRwa=sXxk_B1caa>=>=>>>?>>?@???@A@AA@@A@ABABCDCCCDEDEFEEEFEEGFFFGFGHGIH IHIHHIIIHHIIHI JJJIJJIJJKLKLLKLKMMLMMMLNMMNMMNNONOOPNNOPQJe^\TLKFDED@ABCEA@><325,5<879H)(MJJJR*+MQKDHJLNJF>7ELJPO>HYV.{p{rrw`qtqHEEBDDLwss`HBCuzHKGdb~kJA7233104[04:18;u:512135;@AH(*'!:89:@:677556767686898;;;<=<@C>>=>@<>DDC<;=A@C?Z;_`jSGPcZ2/cNauwWqqqsttstuuuttvwuvwwvuvuuuvvvwuv+uuvvvwtvvwvvvwxyzxxwyyxx;yxxxyy<=|>>||}~~~}?@AABABCCBC DDDEEEGGHGHGGFFGGHHFGGGHHJNQRQNKJKLMLMNMNMMLLMMLLLMMMOPPPOONOPRRSTRQOOPPPOPQPPPOPPONNMNMNOOONNPQRSTSUnp|iy}qż{qs{~yvø`ŻǿȰ]b]f||zz|z|vxzzx}}y~oumnkh[XaQW[cf[XQPPMMT`MVF~yBEDLZZXWQJGEF|~}|x|{~~y~DEJ|}||yrkeeaaZRQ/215:?DMMOTTUVPQONMKKNIBECD=4)!'-/264214019<966gfi7624`S]74]deYW^fa.0][YV,/144kfed^,-+,&+!%+12'-/./1143210331274595<:2'11168QC.+5;@F1247.8/,HC0$$&IE&*'&E+!)(A*HJEH%->>%&"7;&)AEQ/JEL.59&$0%%)8=F"&(-,(,@*;?61G0C++JJF*(B/0%/84@$)(*/&#C$*)#%2/2482)*/145043135424/..,..-,.++,-,*+%&(&+(/+)''&%$)+$!% !&!'!%%&)'$"N37'6E0+4%236DA.123!4!,52#($*+('7;6(')&"',5:5XQcnQka5AAGRJU^[YbYP7?-0CF.)A6;< '2&''49 $#)O=S)1FVQFNEK-4MO50#!$,%$(&A2=<=65148^B15-KR8SPB635-20.T>SRKI?V\JNA=]<;2/LGNJG*91S<6;96S761PRCP1:/ZP*\@FWX=>3/VURYXIWV..SRSE9'E9@5779981FKMY/,+,K:>A??U8;@7NNLIFHJC?A40KAHF=28?825<=@A4MD6KHJH<4bj=;kdu`Kcc>CI_6WZMH96JKN.G.R<0-6bDFY-.3568:14><77/1357342[2435665252455134434672//YVVUTQVU\VPSU1,-1,=:+X^A4:?@9@A;@AA>A@=0/0OB@:X2035XD&8..+>MQJ<#50004544.YOZ6YXYTTUW\b[XTHDJE>8H<\.43SW]1TZ1.S?A=d5UbKC0=5K3&M+;ka?>aKE\H{[.41895Ll\emoQH`pHAY=<8?7ULgQd._=RWQ\GXJ97*.D+4" &55.3,=PG>sb>?F=Xb_T6;8L239)7AsuFJFfelH4&#&'(-P+*,)240" '4=5%-+&""$&$$&'%&%&')*((*)),*+),-,-((*.03-Y~/OzPQC6QW~G-$C=cUfl.hoqkdÿzrsx|~usϽVµQVQ[|}vtslkkrmimtrdjmh_bupnlgid`_ggik`hombe^^[]QQ[KRV\]RNGFD@<@I%%&1,/'&! !$/#.((. '%"&%. *+*(&(&+($%%+)!(,.*/1,023/10-..--%%* 0) #'2:4**#+-,+('(*/2,+'"!$!%.-''%))& ,.1% w()&+E9%%?23G4R=&)%+,+MoW^nmG7DK+%1/:.=)U9PRLQ8C90** +(<:6g443T3U92* 5775%321?!  (($A0hC_nLlVm_i|}~~~}}~~~}~}}~|||}~|}|{|}~||ށ||~| +~}||~}}}|}|}}{}}~{|||{|}}}~}~}}~~~|}|}E~~{z{}~~~||{|||~{|}~|{z{{|~~~}}}|||{}~}~~~~~+~~~~}~}}{{~}~}}~~}~}}}|{||}~}}~}z{{{||~~}}|}|}|}}}~}~}}~~~~}|||}|||~~ҁ}~}~} ~}|||{|}|}||}}}|}|}~}~}~ }}~}~~~}~~~~~}~}~}~}|}|}|}|}|}|}|||}}|}|}|}|}|}|}|}|}}||}}}||}}|||}|||}|}||}|}|}}|||}}|}}}|}}|}|}}}|}|}}}|}}}|{| {|||{||{|||{ +||{zzyyzzz{z{{|||{|}|}|}|{{{||{||{{||}}~~ ~}~~ ~}}}~~~}~~~ }~~~~~}~ ||}|||}~~~~}~}~}~}~~~}~~}~}~~~~}}||}| 삄͈ڌո骧ѷɩҿͮꀁʬɻ鞔əYԽɊڹйt, "$&'&%*1222051+&#%&%!'*/6;@@?A@;3234=JMNNQVZ[Z]`]\XUVSPMLQRC535533/)$!* ,!"- (&+'%!9F[T,5W*')!" $&&$#!!!$'',00-)*16<;6/+*,./12/..1214688:erͯҿНؽÁY/*   +  &  LȳɿŴϭΛ􅋼Ͻެˆƞ닳ꄌۨŻ½ѾƷéԷ厭ЦD/2121112201212221212321123232323332423 4223344565334559?@FC>=8886 !!"!   !!#%')*(#""! !"#$%%$$###!!"""#$#"##"##$$%$$#$$%&')+,,(&''&%&'(&''((&%%&%&'&&&'*+++)*LuԾ½ѭ׺ҷ탍˺пţ恛ڮ􋌔ýż¾耥넊瀀䖂皗冀򖣙򊋂ƷïƵ鮑ԧڳΌʴǶɾՃŠĬȾ͗ȓʉȿ͑҈ʇʸмƾ܀ꁟƜػʻµĿͲƥǹһӁ猸„̣ׅϯ𗓓䂐釄܁ජµҔДލɝԟ͍ﰉ佛իѨ쳃œǓƁȎ٥ޡ.뢏䍊틏ڏܵگʾb@XO/D$#(B038EU:`NDU^\;2I=54FEDBU^WZjcgBRP[GB/bdif49=70CA:C?4H=41KTQD1.&6PWWR*/&">pj\C..Fc_35Uno_WSE/=:QQ>GJ;6-)?UdcQYO<16;2-5c9>;CIBAJGDVTNQSZCOaZPHH_fl|VV^g`Z&GftnSl^fieaQ]]T^lnMIJYbOMMHEDGNAA3=DGKBGDThZULJFJOVZ?eEFFFGFFFHGFGHGGHHG +HGGHGGHHIIHIHIHGHHIHHIJIIJIIHIJIIJIJIJIJIJIIIJIIJJJIKIJIJIJJJIIIJIKJIIJKJKJJIJIJJJHIJJKJJJKKJJJKLJ KKKJIJKKJJJKJKJJKLKJKJKKJLKKKIIJJJIJJJIJ|KJJLMPSTTSPU[ZYWVYYVRPOQPMMMQRSVZ^``_a]XVVUYaaccdgjlklnlmkfgedbbfh^UUXXUUTPJD_DJIGQJ=?xUZdXXLOp_Kb4B%5bFxTdbvaH?jGC_FGHFFEFGFGIKKJIIIHHHIIHHGGIIIHFEFGGMPNQTRRNLPUXXUQPQSUWVRPSQSQOQSTTUVX[^adc^[YTQNNT\:rRMLMPTprdWZ[`lZ\aVMNLIMNKKJJMo@=_=??bVmw>??>>]GdfpwUdH0*:yfWgs1KH@6v8ZH8BD9lPS/CQPjhabVVaMFE>RVTX{srxlna6!Catcx=:dVRmi'=a4s>{I#@6:5AHzY_NgF^D>JL%MCWhv`aVwm\&hgYs{ӴP|B\W~~do:::;::;<;<<;;:::;;;<;;;<;;<;< +;<<=<<<=<;<;<=;=<<<=<;:<<<=<=<<;<<=<;<;<<=<;<<;;;<;<<;:;;;:::;:; :::;;::;;:;:9:9:::9::9::99::9:9:99:9:::9:9:;::;:;:;<;<<;<=>=>?>?@???@?@?@@@A@?@A@ABA@A@BBABBA BBBABBBDBCBCDDEDCDDEDEDDDEDE-FEFFEFFFEEDEFEEFEFFGGGFFGHGGHHHGHGGGHIHHHIIIHIJIIIJIHIIKJKJKLKLLLMMLMLMLMMLMNNNMNONNOONNOPPOOPOSja\UKJIGCCA@9?C>@@;54//455BFOPJ@<=HC8B404/03:79C=78:CFI;LOHsQ@zy_\w|hottJGEBEE?vss^PK8LCH{w`oesysH=7333/05Z2+/768;A;46226<>BH)*&?<87CA6576444566565989::<<==<<<=AG>>|~}?@??@@@A@ABABABCBCCDCDDCCDDDEFEHGGHHGHHGGGHHJMQRRPMKJIJKLLKMOMMLMNMNNMMLMLMNNLLMMMOPPOMOONOPQRSTRPPPOOPQPPOOONMMPNOMMPRRSTWuzzo|rȽxs{|unƻdſ_]]_}~ywxt|}~xtm|~}zs}jrwzsyoihpnXW^XTSZfW[eXMLPNRTHHGE~s={ztlkffd_a0/220259=FKQ+*XSSXQJIOOACFLFG@5(&*+/321042-3:869fhejoi_ic/8a]YZ]WS]b_YTVS)*)49hc_^_]X-+*$&#,-',(*/213104359546?BEAG[MOUPNRO=?BC@E@?=4,36$*+2?@K4SPD<:62<1&+)5'&(+<+0*@@;40H1I/'G44(!39!6<@<%<:<'%79!;-3&$(#$,234,/024002/--+*,-.1/,++**)**)-/*+(%&&'% ),$##&7+4&06)(%# "%&)%5R3%-"$./$$''"'+!#(& ()+("8'(/8,FLR@6TTT^[?sStqRD'>CX^m`[KJD^fRLQ#/4/(**24#A>+*&2*-#"! ?8L::7=.:EJY/E4`\/5C%$*%$%L6<9:88423a143SWXB?0F8^6-./[KMZYPMTXO;FRIGB?=98ICCD+4-;:=:;2/J3NCY@FQQ,YLP3P%TX%;2.XTP.WKSWO0,RL9:EC8B_9:;:53QKNT[WU+A2+GNL=FB-?>IT[VPKLSVTZ]:HF~hSJLIDLE649F)FG74<:;A8>?;b]W2JFIH:43:V7jp3'%%/%#J5443SN,0551.11/,Q.11+--33544478246101QEMP/,568059;;=:874::5;..QNO/SDRH,790Z\1264351UUXMT13^\WXNWZP[\-/1/+TYZRG?Nmu@AA@?@@BC?>;:<=:5./(5NM=gXYL+N)-MJ8J2 KC/'<331100544.3^V\\Y_a`]PSYSRMMQT=R6O4:EA ?;3W56`AK>U_g:|`9687NK=@3CcsC8ZkTBK@E02`58aEl]_\?::_[m68b538B[h4[G4OFPJM?Ke86NS>NQ:'6IF$)05_TX\Yh:=\>9Xomc[]2=4I=GG%.$JDa9_PYDIaTKCOVd]h@N6 '.(#+2-"%(-9:36=78%*(. 0032"--)'79;09FF< + +3plZ92PJ%)Hem_XN>$+*JO:<;()/FX[DGF5).1'"*275>IBAHHHZZPSTWDKcYK;NeZVPNJQV`s&򍞟ᨹՍٞ֟ᕎϒ0 䘕鎝͑Ԟאթ⬉ڤ͇|ΎW5-'IU:R־gAb-%1-.,%%7 (2'8.)0[u͹הH"+ !#ٱ냉߶ȡr" j//,Gxݵ􉋌 +nB0/߇o^RGEDB;711-44--,)$$ ",.33.%$&.+&/$%'%%%,+,51,,-313(34+M:Mh_zvLGDAEB>wXFD4LCG{xavgxwpG2% &(&'.P.',-210#'0<5',/(!"$$$#%&$&$$$'())+**)(((*')+.0)-,)+*+.11+\U8SuF8.;QX:S*&MM\V}cRgpjc}wu}}}|tm^ƾSSQW~xztqpthonnhpy|d_gflfiech[egT\`dlkgmbira]Y_^KJQNKJR_SV[RFDDBCA8678mh64;9prsut@>A?;6658smroyzz|{ywqmia[WXWZ..\^]Z\\]YQO'"$!!! !"'*,3335/++."%&*&($ "%%&%%%#*10/3_b_fkd^dW'0TWPSUONXZZWUPE#/^\[VRKB! + ("$"! !!" ! !$'(%+=0075256'%*))0)(($ "')4#2*-J$/3$90!))$&!$ 1&"$'#(!.%&!3!#  #&)%.&'     +    + + +   5 + + +   " 0#4 !   +  *    + +   +   $2%')#+*"%+($$'(%$ &!""#'(++"#$&%(&"%%&"$")$!#%'%"#! #))&#!!%%%*.&'C8'"## %"% $" 00+&"$".!AC%HD&/>+41,)%"&#$' $$$"#'&)+'&("'+*(F("')")*%)*%#02!*+-,11+0263/10..+,)##(*!5*+#$$(##23"/,/-)./00*+.)&$&*(%*!'##&-#..1&H/*)($,9OI,$9C986)0&(I)+RHnWS:76Wj?F 4 3<<3-HBJEH6;P/,:<(86  &MK+PUQU08Qf'"4>?<9A-4+7%$! /4.?7IiZN@Tbqk|} +~~~}~~~~}~}~}|}*~~~}~~}|~}|{z|||~~|{|~~ف||}| }}|}}}}|||}}|}}}||{}~~~}|}}}~}~~~|}~~~~~}|||} {}~ }{{{}~~~~|{||{||~}~z{{{}~~}}|}|}}}}~~~~~~~}|}|}}}}~}~&}~~}|{||}}|~}~||}~}|~}}~~}|} |||}}|~}~~}~}||}|}~ҁ}~}||{|}|}|}}|}|}~}~ +}}|~}}~~~~~~}~}~}~}|}|}|}|}|}~}|}|}|}|} +|}}|}||}}|}|}| +}|||}}}|}}|}|}|}|}|}}|}||}|}||}}|}}||}|}}|}|}}}|}|{|{zz{{{z{z{z{|}|}||{{|||{||{{{|||{{|||}~}~~~~~~~~}~}~~~}}}~~~~}~~}~}}}~~~~~}~~~}~~}||}|}~~~}~}~}|~~}~}~~~~}||}}| ̈́ԪǾ~ǥ兖ÅཱцꇐƢ╕٢rʤʩŘǵw)  "$')&&&*4;<=8.*&'&$!!$'*07:<<<;953599>EHJLOSWVWXZYWVTRRNKKPOE9434684-(!/""1(*'-)*!!"20+mrC'#S/! ##"! $&#  #&-230.17?CC>50..0248:<;;:679;:;=@BFILJA91*""3|P1&"#(/5YLqrTN;YnLp^F7I'&  !!! $#?9-BZîł͕ӀϳуѯȑŊƹ*,HP*7)H8&$'..",IzӑƬ岥CUFNWXOakhBON3JB[[^bej8?:J%3h[8?5VXL@7/2&0ZYV*(.5M]`Q/:`iL]Y^veSPZP50LMAVWEE5/4NRaXMZ>@9>>0,Y4<>8PA>HJEXZNMP`GCp^[CI_kdyTJZga\):^to\dlkhkhWg^UYRXPX6UbXPTLGFJF:<.BHIIHHILI}jIGFEEDIdeꀶK?5-1E3VwΪB/RXwdthoYhg`fVɹɀBGNDtX2S{i`>wMEGD77=;??;c@@ymVgyNcA??<>x{_O`6`HDEmk{tTN=SbWIxWTvbDO<\H@6[JEb3EQLHH|kW34A_eWLsR}yhW}fxt[vy\SHKdmP9;;td6eTqbpYOgD64?>\WDK]chzfp]{_M\SZrZt:F:tk?mYVj8Qo\poZr[hd^bôzvX;;<;<;<<<;<;;;<;<<;<;<<;< ;<=<==;<<<=<=<==<===<===<==<<==<<=<=<=<=< +===<<===<=<;;<;< ;;<;;;<<<;<; :;;;::;:::;:;:;::;::;;<;< =<;=<<<=<=>==>=>?> ?>?>?>??>>???@?@ +A@A@A@A@AABABABCBACBCDCCDDDCCDDEDDCDEDEDEDDEFFGFGF +EFFFGFGFFFGHHGHHGHIHHIHHIIIHIJHIIJIJJJIJJKJKJKJKJKKLLLKLLLM LMLMMLMNMNNNONOPONOPOQPV]kj`TJLHE@==>BCA=@BC:6525:9>:C;3,-2450;-*,NU/>68;96438GG<<=cgS>tjayqr}EIFDEH?attYlj;dPOuqf^KnpI;5744112Y/2<8;DJ5441239663573256@;;9::989;9<;:;;;>><;<=?CD:^EnkeIM/?GXFRRjЈJsrssstuvuwxyxyzwwwywxywwwyw'xwwvutuuwxxxyywyzyy>z==@Mg~kiXUG~>??>??@ABAABBAABCCBCCDCDCDEDEEFFGHIHHGHGGHGGHHHG IKORRPNKKJJKLLMMMNMNMNMNOPPONPNNOPRSSSQQPNOOPOPQPPPOOONMNNNMNOOONONQRSUwشlvvn¯xuu~zzwsrλndbahjʸļùȯ~t~|tnqGx{pilosshelqhkigrqb__[USXi^YchWSYaSSRRNHFC@=;@AustwzPVYYYVOOKECDxwwrmry|{}wy=;;uusrnm788232./01239@CHMRRTUTWPNJBDE@BEB9,+,04122321.36695eice;raa36Y`aa]`RPV^ZPR*.,2g]ZZ^a]W-,,)$$'QJ(0.-13464311353EDC**-'(2)H+())@??%&70>57=?D>E9YVQONPRTUSXY67aULPRLMDD@@D9AH=8==>0M@588==IA>98AIJD?<=,53D;/97<;?=8;^65YDIMF7435UD<>>;<>amh6TcqRFI];>CFGAEGGDAB?;:=91-+![.;-EUN4LN15\0\S!B.)772WOP0P++2.YK9GM3\_]XpnCL`Q\7;
    ZggeS67,'#;AWR=H7;576'#-883N@;EIGX^SRT_JCs`W8=WlkcP^e[O*UnfP[edcfdUbZQXV\RT3ReWIMFB@C@21"76B?9BGMUS^PQNQW`rǡwKݧĖ̸Ӌ؀ޒÏόɐƗװ㋜؝ڽoG[;* + + E'4./41-*(.::1/+?A5SofHJFEGG?cR__4`ONtthgRknF.#%&(&'+P+)//q122&/89'./$"!#%""&&&$%'&'''(('(')(((')).7()()**,,.30[8aXSm.43v;Ht3OAT؆s…ɹeif_{utvxzwqo̶g]XY_`~}yzzylsmsprpzva\Xbsnqm;i_eZTY\^^UTY^UYYWabVRQOIFJ\TP\`NLRYKIED>76332268ijjlkoBBB@<7123368wxqrtvru~|zsgdZXTV+)*TUWXVY---((&""" !$%(*,06855//*%%%#&'% !$!%&''&%,..1/]d\a7iZZ/-Q[[XUWKMRZWPH'^^^]ZYPE! DC!"! !# ! !"*.6/5572:>75-:1'"!*)( * !).+'$3#' /$#3/532+0-(*(%&"$!"*'#'&,*$&#4'02+"$$"#        ((!8"     #!"*".     + +   +       +   641)(%'&#%$#%!"!)"-#"(%);&&$""##&&&#&!#!,%!$"$    +'%$##%&%%((0*#$&##     -)##&"+%"%%""$8pB@!.4=+#&0'%% -#"'(*+,&)')).-%#%#)/.&91"$.,*)-25738:85662+*-,&#"4$#(%'+--+/!" &##!*#"#).74:<'-5-7#"#$&!',&$),30F+,+:78Q'=.:B1)*&&L'*KbhV[ODH4A2<@!&.%$)%.A.QDPYV^bF/N98,/??  7:86IBYJU/1'6<<=713\RE8' %5"%*;fAXC4kn|}~~}~~}}}~}|}(~~}~}~|~~}~~{z{|}||{{{}ف||| }~{|~~}}}||}}~~}}}|~~}|||}|}~~|}}~~~~~~~}~~}|}~~~~}~~ +~}~$~|{{{|}~~~~}|||{}~}{{|}~}| ~|{|~~~~~~~~|}}} ~}~~}}{|||~|~}|| }|~}}~~}|}~|}~~~}|~Ӂ}|} ~}||{{|}|}|}}|{|}|}~}~}}~}~~}~~~}~}~}|}|}|}|}|||}}|}|}|} |}}}|}}}||}|}|}|}|}||}|}}|||}|}||}}|}|}|}|}|}|{|{||{|{zz{z{zz{|}|} |||{{|}}||{{{|{|}}~~~~}~~~}}}~3~~~~~}}~~}}~~~~}~~~}~~}||}~~}~}~}|||~~~} ~~~}|}| ܁͇ĽʹЊɍ򌪴›ւĽШͺķ큐˾˷Y̱Ǡļ²{$  >#$$$"! &2;A?<2-('%%%#$'*/4675343/.598;@BDILOPQQSSSRRQQPKHHKIA84238<6-' &(!**5H/.+'63L'151?(@?fa;8jY '%#$ !  !!!"*24/'$" &,13367D]Ă<'*"1ԟτ©ۦĜ=o2!/(*$+.J406SO0E1>JMG?5339Dc?>WZMU84eDMO9I8JHTYYb8CCV*=:23<[UY1N/NPB-4?NTWZP;*4QPgcXBQ0dHEL3wohakN;?<|lR`24<>=0LLZA;l`ZXGHIKJA:5F>JCDMRTJELNROPSX`NEIGGFGGHGHHGHHHGIIHIIIHIIJIIIHIIJI JJJKJIJJIIJJJKJJIIJJJIJJJKKJIJJJK JJJKKKJKKKLJ KKJKJKKJJKLKLKJKLKKKLLKLKLLLKJKKLKKJK+LLLKKLKLKLKKKLKLKKLLLKLKKKLKLKKLKJKMLKLLMLJKLLLKLKLLKLKKKJLLLKLKJLKLMMNRSSRQQPT[`cba[VSRRQPNNNPRTVXXYZYXVYZWVYWY]`cbcbcdecccaa`^^`a\XVVUX[XSQFWMCIHMKHXY$UB?Q;b9X@Q~^i_i~S`KbN@kB|XHHGHHGHIJ{IPUVRNLKLKJJIJJIHIJJOSVWUUVVY\][XVVVZ]][[\[WTSSSTVVVWZ\bfa]ZNJzTUVfVLcPIILhdS>fW'ZWW[RLJIJIIIJJJLJLmOGJKIIJKKGHGGFGFFcmLdǿrNewr•TJKXRZ_-QLidQgn~iNwzjqqwVbM62^Hcz_cIiiEc;BA??b:x{S\aDGZxHAAE]ho/fHE[>Jb_ff09PEYWX^WqpNx~bmd~nR=;<;;<;<=< ;<;<<;<<<=<<;<=<=<=<=>=<<>==>=<= >===>===>=<=<=<==<<<=<<<===<<=;=< ;;<<;;<;<;<;<;: ;;;:::;:;;;:;:9::;;::;;;::;;::;;:<;;:<<<;:;;;<=<<=<<===<==>>>==>=>>?=?>???>???@?@?@?@ A@AA@@A@AABABCCCBCBCDDCDED EEDDEFFEDFEEDFGGFFFGGFGFFGGGFHGHHIHGGHGHIHIIJI+JJJKJJIJJKJJIJJIKKLKKLKLLKKMLKLLMMNLNMMMNMMNONONOOPOPQPPQPOPQPVrfd[OILGC@=>BDAA;;AJ=<4348730/)NJNMOTOSJLKGKP^WXae423c3@67HaO8Esdei{qb}FELAQwpvNitT@XMnA|yYhpK:7:78213]/6?9;GIi1330/26;?GH##:;78<7937621587569989889;:9<;;><;?>::=?HiHYfRCU5QbUlEL_qnS~ovbrqrssuvvvwwvxzzyzyxxy-xxyywxxyxxwvxyxwu;wxyzyzz>yz{{>{==BQk{hZE@ AAABABCCCBCBC +DDCCDDDCEDEDFFGGGHHIGFFGHGHHGHKNQRROLKJKKKJLLLMLNMMNNNMMNNMLMLMNOOOPONNONOONORTSRPQPNOPOOONMNNNOONOONMNQSWvƨknk`|tprnkgmmlhgmeľ~~{~{vw~~}uqlmned`kpnvnkhdZ[YT[\]_WWWZXPPSLGJILHL_FAGBMMNRTTZZ]QLF~ywxxwsrrzyzz~yxu=<:rr98@@:===>?BBBNOOQTSONHEHCBAABC?/-356831001*.27865pnm;naa4X\hebYZXKSUO'.-/MNSVY]\UZ/,,'%#'KEM/4753346;8=:9HMOB^ZQfcQDHGGI>DAIOCF&N$!).*>39DN?8:&51B:GE*;<:=>1#<>6)9@?4(!5=9),:5('59,OM:+#E9053/9%&33;.).-)3'-285(/-6826:' >.83.#/0.01//-/.*130-/0))(+--,(')+(#%*(" $(# (249$)&3&*0-1C&')(9@:$3+-.-5*;6;G)4#$=6+*F4 8!1&+$ $5##'0+""%08ALA6[XmfEPM2OP;0A@1UPYTjXo^zQR/2,18+(G=7$*%*#/j2, !;?FOULKv311./]^9C8=IB1?13-"!&%!:41<9>663]ac*F9:.UZYGTJ(77/`//.[/.-ZWNBIGDQQHB?HD?GE8UI671G=0.10/-.0/8EI3RA@9WL80MP5./0NSW-/WLP/GZWQWJA2,h;:;8673/R.SXSC*;NEBHMKNZOEJITKOONRPQLJMSSQILDD4:H7;;9567@.65MEJK<332\WVMD:<<==>_EdaN>:9=;1420/.3712698677:<9::7242136432214653736453238533310./01-.-Z16855]H./Z2T>SUSTTQPX-B-AFKCD???@::BE>@JEA=>U[TRR22W21\ZV4.QXSB:BWU&SqAGJGHUP9_96M7`;.9VX= &+(+(,-)(/R=BArD`77F^bY:EU?P]UBP#4>S^95W]H8?MgwUNX7:AZ1%#' '$":),74,08%)( #%)-,/$ 5124%G@,4DLH2 +DJjgW20 M82+%jgd_cI4:={nOY.+**)5>L5845.7;**(:=4MG5:AHWNOX\-++U.8009A2[/Rskk{HGFBRzI^hNB[NuI_emF+%''+(&*O)-0012-$.6;/#)00$$$&%! %&'%&'&%&('(((&)))*))'/+'*+),/.0T8HTG>8958F53<95gi48GECC>977;563bhkmprpnt|~{~ysl_^SN)'(OO((.-+.//-10+)%*'(&((&-/1662--*))%'&%#$!!#&''&&&#(+/0/0fcc5cY]-NXe_ZVURGOTI 'HOX[\]YKG";=A""##! ##&"#//1'@@7IB5+0//1'-,'*+)-/1+46$!""!6(/2:8: 5.16$,, 2("+4*,0 !(/""!&')!!!#  +"$!$-/!&      + + *! + + +  ( &  "$C7/%  % +    p 3 +     +  + 125#'++'"*('"!%%"#!! & !H #%(! "#''(!#**'( +'$$$"!#"#)#! % ##$!!#'&%!# ! !""$%-+/*'""#$$(<*::-".,-,'"$ !-&),))'(''&%$+(%*"$ &+.,.3304?8342/3214-%%" &',"'2(.1&&) *)'%#(()($'% ,(2*8G$-0.-3+%.- .%+%2*3(0"%#(2;5BRJHPMJ/(+'('&@5BQTXMQF62127:7,B, !!0- B-OK%!!Bj2>=|VMCp,:ph('6 "$(+5::62/*'$ #+/5899?BCCCB@>?AFHGFFC?=;9:;>=??BCFD<2)4)*"-r~݆[P:D(%NjWqlxabRf=4%4"$! +#!! !!S#$"8&o֬үᤳϛㇴiݤ΁󚃍ʊ}wt(+A]`H3:%![ޡ԰ո޾ٜ+"'2?Džۭ5 "6987Z֗χ؋Ҿ٩ǽVL~.++-ĈOJ>A2775--vmw:!'%&9p^|ˎɡ㡻⩌Ȇn$% +        &UƳҽ۬ԙߝ̳Έ˶뛒ߙʏ^ƽᥚ纹ÿdzܥ޽¸ʷנʑ/23 22231233233343756424543345345453434556##ElTA0TMdV*   !   !"%(**($""!!"#$#"""#$#"#"#"##$$$%&&%$ %%%&(**)'&'((&&%%&&%$%$%&')*Yƌλᇕ恂źż؀ûż냍Ȁ˽쏘ɴ꟧θ阴϶û灉뀈ɿ݆ɶ浫ɶ…ևΖΰžߐ唭Ѭӯ㊪ڬׯ¿ʀǭ¹ðƃӟՖ󬥜̴녶۩ׅ˯ګ̓ԧלѾ˼۶׻޼ª帚ċʈȔȽƚⵗ뀕ѥޕݳ”쀃̂ݓܑʮȪ䬤ƦϿˍƬڶ7񅍘ơ̯߱믑߃脞N7V4=7)?)*C0:4@@GYRGD9REO@#62;PQjDNKHHJ<2;PWMDC4SNRZY`7;65ZX6<>iqW>6ZAON>;3OPPRWCA<#-2RU_VYNBW]U?&1srlSVLE9?Gi_h>3742MQMHG1>9?A4u49?GFM:CFCOZST[W`Hbm`F8^ccnqHTecdE)QmsnmxznhbQ>X[ODOLQZ[`i^Z;HIKJD<:F@BCGKMSPTsRXUSXZ`S?JGHGGHGHIIHHIHHIIJIIJIIIJIIIKJIKIIIJJKJIIJKJKJKKJJKKJKJLKJKKLKKKLKKLLKKKLKKLLLMKKLLLKLLLMLLKKMLMLKLLLKLMLKLKLLLMLKL MMLMMLLLMLKLKLMLKLLLJLMLLLMLKLLKKKLMMMOTTRPONONQV]aa_\UVUSROMMNORTSTTTWVUUWWUTTUXZ]\[___^^`_`^_]_`_[VVWVXZZO}oWR^~IrQIBxFGhv@R\MR?Rx֓8WĕjTso7LIAN~oeT^GTp`OZm~aW;:WFEDFLk%?EQeSBBDHZLMD.Y::`\R::nld]pi^QoNI^]QC[FVadzRywvqMTU_kUE<<=>==>>==>=>==>>=>?=>>>=>= >>>=>>==>=>=>=>=<=<=<=<<<;< ;;<<<;<;<;;;<;:;;<;<;<;:;<;<<<;<;<=<=>===>=>??>?>?@?@@??@@@A@@@A@A@AAA@AABBABCCBCDDDEEDEEEDDDEFEFEFGFGFGHGHHIHHGHIHIJIIHHIIJJIIJIKJIK JKKKMMMLMLLMLMNNNMMNNMNNMMNNNOPOPOPPQPQPQVYk`XPJKGDA<>AA??66:B8>578=83/,OIGKIHJHIHIGHKLTRPWZ[ZUUW`a5?Emvq3yimmzsgxEDDDYAKv{owG]obuSKxwO~~OlrL<7975016`219@?G?!0480/069=EHC!989>\eIYQh2Y;PVdAMuugkorsrstuvvwxxwyyzxyzzyyxz{{yxy xxyxxxy=z{{z={{@F@pgVwlyODAA@A@ABABCBCDCEFGHHIIIG'HHHGHIHHHILQRRQMKJJKKLLMMLMNNNONNMNLMMNMNMLMOPNOPQTSRQPO PPPOPOONONONOONNNOQTŀҹbijc}mtulnifklkijķǾǹ{x}{vyGynlfijhce[[ephllmaXVUQ]cYYg_W\b\Uwk_[PLR[HB>?Arr:ABINW^YKJK}{yvsqrupxyvy|~@B>qm5;DJJ@CEH@>8:3:=>5C=CKGCDS\KLJHEEHDFB@B9/59;7674010-.5655ccbhlnh8:\ba_VTXXNMN,2/,T]SRXVVTY-*+'$$)GM.18?<=;=?JH>@%)B%?4::!%??4&7/5+F, '**6>>(E5#52"<*$$$+&!'-+9)/7cC_OpUASG?.[D<;4$5/_eL?CVbfoort/FC5ADF28&37=F?@/-Ae>;;;@LCDNROHsoM505gtXJN;.I<+4282$!''C14?8936]X4`H75/I2=26,G971///VSNT0G2VISNG::LGEFD?G;-1385+/30/30.W/1/4<:0RHEM2L83=041-2W,-1-SP=[+UREFC'8.6;95/?)XF;3TJHEH?DKPVQNLLHOOPQSPOQKURPQWMVJE@=:0Y470JLB:5ED]6:89<*@I=).?EGGQJB7:>9,W2;585>:85579E@=644fb]XbK>H9eAg7A@@7J`Y^^G(V/RGA]?E$Q_="77">8F-65121[..M0-Q**1*1-23148:9654395787211049688783686432412./../153.0211,4311354434665421010/-YWX,TSXTSMNSVVSW??XG#*### (178=@@;FB;9;<>>>;>:2Q09?tbXZC:?ABKS\[#,601RNFS0Z`\^YPTQABL^X;;E6@J@P2LNIJCC9O@g=5ATJHA=_O5gTSQVLTt<5M91)SC`_G:E>KU>>KMU1UF4FC77OX23S1@=<_7:A65>k6A9+I,5*#&%-".!% &()$19AIM0"GSc[UB*;TL("eifMPC>3I5;ABN]YX_[^KgseB,T\h{PW`^W6Bdg[^osid]N8QWJ@JJNYYcsaY8DFFE=41>7:;@CFMLQpQ\XX]bu|%kШ䛓䁠󮓕مˇ؆ϊԎȉޯծڊУ~٬eAKF/)U5>ejQ8CJEii40"!OΧ2$D44.!z)06I)7 ?T:Nn7=QըMFMx%(!%+TC#@3& 5/)&e҉ &1$1b/!*Y$.&07*-(#3392!Hvֆɰ즍ȕ$ +  +"* 0&!A*@B$0kǚhu?Jጏ# +;]bTJCFB=722550-%#&,&+#&),)&$"@=;BABE@BAC@AEHNNLRVYWQOQ[Y145HMLF{~tzEDDCR@K}zBSd_uVM}|RQeo>F.&&)('&-Q+(0851&#-58." *,41(#&#!#%$%&$$%&(*((''((()4&52')**(,/0HN9SBS.oC/:<\l5=a_xqcrͻ÷ڃXYVO~}}{zlrpikc`ggh`awytquyqnry|ww|t}zzhi7mrpoypg]\XYYYUUJJR[QTV\VOLMDKOFGVQOVZTMgZQOA;?F53/26af3<>{?; "&$&#(&/)03/+7:H/!+63+,-..3-*'&"/11/*%$ ".2%-47551/439054& -4$(,--)%')1-&%'$"!#$!,$.".#,# +/#""$!"'&,40-'/ %!$ +    +  +'&  ' +  )  +  )A;E& $ #" + +  "# +   + % +   !.-5 # &$!%&!&#!%! ! ")$#!(%#(%$&&!#$'%$!"""#$&%$&#''%&*"'!)!" )"! #%#)"210/6)")!:&=!&&%(4,0/%'#"(  #*"$('(&&*('#$(**'* "' +'(*-13097101.121./-)B&,-F3+.""""&)/-&$')-++*''(!#-(-0#$0*3!1310)) 1"7#%"% 6, (2!'%,97<2XD8H68-'a%H8fCOPJNQD>7D&!$.))'%;8+ZJLJPIOg4-<+$A=QE*!:/#.*-.#&,/8)8*"0<3)25"1$2)-1Y*2 ~~}~~~}}~~}~~}~}~}|}|}|},~}~|}|{|~|zzz|}zz{}{|{{{|}|{{}~~}~}Ё~||{|~}}{{| }~}~~~}~}|||{{{|||}|{}}}~~}~}~~~~~}}~} ~}~~}}~}}} }||}}}}|{{|{{}~|{{{z }|}~}}}|}|}~~~}}~~~}}~~~~~~,~~{}}|||{~~}~|}}||~ +~}|~}~}|||}|}~~~~~}||{|{{|||}ԁ~}| +}}~}||{|}|}|}}|{|}|}~}~}~}~}~}~~}~}}}~~}~}|}|}||}}}|||}|}}}||}|}|}|}|}||}}|}||}}}|}}|}|}| }}|||}}||}}|}|}|}|}|}|||}|}|{|{|}|{{|{|{|{zzzyz{{z{||{|}|{||}|{|||{{{|{|}}~~~~~~~~с~~}|}}}~~}}~~}}}~}~~~}}~}|~}}{}~~}~}|}~}|~~~~}}~~}~~ ΀슆Ț㧊́灛Ƕئºሉ̲ʿ태ǧZöǬåɼȻùų?   +  #%" *3574.).0.-(''*+.//.)&)+058846pr;=?ADEGHHJIIKJKKIIE;4.-/334<;'.'020GLm6OkRI0B|<>NR=Oluϓ}v{3;+?s!#(07<;;;:751*# #*4:<;;@BCDFFDABFIIJJJFB@>=;;=?@@?>><6,!'&NDOKkb+Y6OjH4%>!)  ! )2Z8p̳ƌ񓧊ߋۂAũѓψ$ͬɆΩuI;!1%o.**,@F҆戻L !O퉾ϭr>g2$IԹƤܛሢϴ年ƪ .W$+)),*!"➷J:-ܑ]8FЏ\C/7!-M殚vÐИٶӻ'( + +    ! !  ! !&NŴȺـϝͷ𗰥䚘߿ćdżżާ񶸽¾ȈŴ˶ᄏڍ䐏K223443432232232;33224343434553432344444445546$%9F, "$*<7m37CBBLDCDEIUUUXTnE[p]V.Sb_hxE]ddiQ8KjvkhornkcU?KULQKMLmFDoj[IINPJIFEKKBEBF7IURISTTUYW]UsMHHIHIIIHIJJIJIIIJIJIJKKLKJJKKIJJJKIJJKJKJKJKLKLKLKJLLKMLKLKMLMLLLMLKMLMLMMLNNMLMLMLLLMLM LMLLMMMLMLMMLMLLMMLNMMLLMLMLMMLMLLLMMLLLMLLMKMMLMNMLLLNKMNMNQSSQONONMPU[\]]YUWYWVRPOOORSUURRTUVYZXRQRTUVXY[[[\[[_]^``a_ZXSTUVWXmGfR`Eo@XloTzwyK}IUy_h]qg݀Ǐ|tVC}OIGHIIHIHHHIIIHJKLNSVXVWWUVSQOLKKJIJIKJJNQW\^^YYZ[\]^]\\_`ab`_[XVUVUSTWXYYZ\\YTTYg^%Y^Z9rs[qEST?lN>B`ALLJIIIHI JKJKJIJJLKJJHGHHHIHHx^]xΦyOtLHaK{[ĴYy93JM@e{QxYxǯnޕd_e_ۏYukiDFq5>Q{mڄW86=@AABCCILq[ԅ|HPhiDy}>wxqh3H<4TIK.g_=-F3]eDADDJ4J/60GRhI=@Omo{WZLF=mCDaHJ]R?L|ybmczpvZ_^kjT?T~[u~|s><fI\C4A;V>TrygiyéyKooyTp><=>=>=<<=<===>=>>>=>===>>=>===>=>>>=>??=>>??>?>?>=>=>=>>>?>=>=>=>=>=>=<==>=>===<=<=<;< =<<;;;<;<;<;;<;<;;<;<;;;<;<;;;<;;<<;;;< =<<=<<<===<= +>>==>>=>>=>?>?@@@A@@@?@AA@ABAAABCBBBCCCDBDCBDDCDCD +EFEDDFEDEFEFGFEEEFGHGHGHHGGHIHGHIHIHIIIJIJKJKKKJJKLKLKKMLMLMLMNNMMNMMMNNNMNOOOQPOPOPPQQPQORQQQRRSRRRQRRRQQWMe[RJGJKEB7.ULGFBCEFEGHIHCDHLSQY\Z\WXTW[Z3:Es^t5Ai[cl|mdsGGCEw>Deyne{M]WyRLBsm];OrOmrL>69741036518?9A3.350/269=AKCAHB9>A)I14454356555689:.9;:88678=,F7=A>:99;_Eyv?PB|>?@CECbgRFFFHafGBA BBBCCBBDBBCCCBCCBCCDCDCDDEEDEEEDEFFFGHIGHHIGHIHIIILORSRNMKKKLBNNMNNMMNNMMMLMLNNNMMNNMNMNMMNOOPOONNOONNNOPQSSRQPONOOPOQQPOOPPONNNONONMMNR҂\lpi~|~ysrqllkknǦmñdͿúw|}z}}~{}xHI~w~oj`jejuw^]Z^Z\__ac[VTZQR^VXX`\[Ybae[R?>ss:CxwzFKEIMKI{ssqzuqvwtuv}}~???z9;?IGIFCDC?;;CBB;@;85?@525EZJEDHECFJJGBE@b389<<<96531.+/13dZ^`[kq8;7g^a[YN--0-0.,*+,JMQQRMO,,)%"%+,14;@DDGQTK3)4SBC@OHDA=?:<>73FA)G?>@?;=30"-$=9A<.137;B+AC34)-),?*HB-.,QA7-BAH,Y854-0*<'$?10=?+=252;?6D*60@K6.- :8D",0+( .,$*.0.-/.//.0/.-./2235.-*(*+)&'$$'()+*(%#.'26044-!*4/%"32#)'!0'"4+*1A.:(.?I:L[W34*"5=NI>EM3/- ;0* ##&&))!(..F7nVIjxha/+D/=)IQ7-5Bq^KIBr[_Ycng.7-91,JdE3$5(FAYpip[FD24B9ggxGR{qEujSijBVYzNM1";(C:;>:95.):<=,22$4B.1;CMN+TC6C>60CR)/35=17406:E33277\_[QX\MM@W=@8?=^9PMEGJI0N/LE::A._AM BBJ3/\-4;755QFHL@)F'M+0/0/252-6879776=>>=<7532381468577798443040160/:83.-.20-301412443694333/20+./,US.V+.VQVU`TKEHLQW@$MX->,MF/'$(59=>>;==;<>A<8878=54487.cgOHKCGEAVLYN72[O$A0[QXV?]1,1\^50P[?5ID@J/GIHEEB?,N-HS6d2aJK+"QNEG0<%)5+&+Z^Q=C0.7)?34244^8`u\[WHJQLd<8?OV5=:YC^B`BMQGITAA&.0"#!.$%#,$2,*/* &(.)!)%%1+,/'" +,+?0I1%+)5?BAYF%8AVVQLY;8C=;?CJUWZ^[kG]vdR"J]dtQaa^aB&9_n\[hlkfaR6@KCHDHJnGI{r^JJKKGDA?ED=>;=/BQPFSYWY^_nw +ݥӱŵzȌ}Ĉݘ僙{͹ᡗ᠋ֳqEA=,5O#CKк`|-4`%"59L\V@1/D,f5=/'4B"s0:04a %(1:&!*Btմ4#TW+(cE6%""#!%֮LjUJ  +e밠f[䈼ѻʞd8 * +  ](5&.2l(,9ogP0>x⋌ 2 7}\NECED;61;863*%!!*#+%%-/,$FC=>;=BCCDEEDACGJPLTWW\WVUT[Z36;R?PD++.8%&(&''K3fvVPNBFKHa6P&#&'0.$##;)SWMKLGRYd2B&$*69RR" +BD: $$)+9,+,&-'*-3'$$'/2 +-$4+?1:=24~}~~}~}~}|}~~~~~|{{{}{zz|~}zz{{zzz{{zz{~~|{|Ё&~}}}|{|{{||}~{|{{|||{{{~~ ~}|}}}~}|{{|{||}|||}~}|}}~}~~~~}}}~}}~}}~|} }|{{{||}~~|||{|}~}|{|{~|}}~}}|'{~~}}~~~}}}~~}}~~}~~~~~ {|}~|}~{{}~~}|~z}~~|}|}|}|||}~ ~~}}}|{|||}~Ձ~}|}}}~}}|}|}}}|}}}|{|}~}~}~~} |~~~}}~~}~}~}~}~}|}}||}}|}}}|}|}}}|}|}|}|}|}|}|}|}|}|}|}|}| }||}|}}|}}}|}||}}}|}|}|}}}|}|}|}|}|{|{|{|{{{z{zz{|{z{|}|{| {{{||{{{|{|{|||}~ ~}~~~~~~΁~}~~ }~~}~~~~}~}~}~}}{|}|}~~} ~}}|||}}}~}~}}}~~~~~ ÒڸɊڜ兠暒ۼÃӂ˼åiȸέڻɱ¸³*  $'$"(024/)'*..,)'&()**)('').699744ilq:uyzBDDEGvJLNKHE=6.+-/,(.* &,9+'.7LY@GJ>oQ|WRmLU18$,l%y"$)/7?@>>?==;7.%  &+6<><=ABDEFFDBDGJJLLJIFFDA=<<@A@;62S+#0)B)909;,=[twŭ+'4&$*!AJlVꀍѤf񍿎ĸޭ˰€WEXܼUi-,2" #1*]PoM/*.%4׾٩3&-=ԇߢ鲺;*iϴ̀닅Șȯ،7'1r&(%!.)1ۇڠ^J[U:ؑa9>K'+Sͫ쟖՛˝ʖ䗄z@)         ! ! 'MпلʬїȢ테롥򣩜ל񍭸֠_Ȼت䳷׉зÍν潺ƀÈO2234443323 4322322334/6654543444556555556'07+#J##4L=9+/- + !!"!!  1 "&)*)'$!!"!!""!""##$###$#"###$""##"#$#""##$&%$%%&)*)('&%&&%%%&&&(''&&'&&%$%%%$&Yĺ򍖔ɺȸμƷ׿􃆄¿»΀々ȽȿۀܿⅣ熘鵧ǺἹ׃ٸ􁋘惀џϾۋո¾档٩Ե͊ؗÀ銋ǎ㈅ǥ੆ႋּᇡ̼憛ȻӻډڙܛīًɾĖĀں־ꌉ“Ƣ좥ҭƳƺſƻ擑Զǝż妽өțϭڤɟͷơ橧ȪԄĸʲܮ̵Ц҃퀃)ٙ£۸㧙҉ѓǖ̀i;5L4=4*8 &;40EWT@5Q9MOSSMF34.HJV\H;FK5XM7DOTZYE/EMf[NX\3A>1SN;87=chjB@OT;:EJSaKnKJHIJILIHI +JJLLNQU[YXWURNKJKJRKPQW[\YY\[\]^^][]^`a``^\Z[ZYVUVYZZXWYYUu&`_t{VcFGMI>y]~l@QKA>kKHKFdWBKJIJIJJJKJJJIDJIHHEyQ[or|ʩGJLN_T[iaGbODI>@ARV9VXdÝFsSvnqYtE^RHVjZchiVAACe]`rLr]lVrn=]ujtxmobe6E57E64[bWVVhC=AG+0b68Z>`HguAmUd`@C4M*3E[NXO:4Tv`V[zkdsmSWowsJPigf}7>=r==>=>==>>=>=>?>???>?>?>>?>>?>?>>?>???>???>??>???>>?>>>?>?>?>>?>=>=>==>>=<=<=<=<<<=<;<<;<;<;<;<;<<;<;<;<;;<==<<<=<=>==>>>??>>>??@?@??@ABBABBBCBCDCDEEEDEFEFGHGHGHHHIHIIHIHIIIJIJKKKJKLKKLKLMNMMNNMNONNNO POPOPQPPPQPQQQRQQRYYf[PGEJLE?1EABB9558:6987?>3XRGABA?DFCDFHJDEJMSP^`Y\__]_ea^8:Zc{H9rXYf{jdpFIGBBDFEoxri||Y[TK@_dcL_uvsI?7:73104984nk84+n/340-356>OH1558657545556878999:99877:A,>8;><::8ED_Rl7y{z{zzz|z==z{>>}~}?@ACJQVJAAD]qh]NWTCBABCCCBBCDEEDDEEDEFEEFFGHGIHGHGHHIJJIJIIJKNQSSQMLKKLKMLMN ONMMNNMNNOMONNMNNMMMNMNNOPQPOONONOPRPOOPOPQPOONNPNMMOlǹtzȿ}}~{rmomjgƵ̪ed¸ƺxy{~zrhfeifiytnX_\]YS]bab]fdaWTX^^\\VXUB?:=?I?yAAz~{}JIHI|zytnrprststu{{{CCBx>>;DGLIA@@??;8:811,-9>?>;94312.*1334aYXec`45224721342/+.-,+K'**'OKL)*&%&38>=OY[VL=B>E52Wa>>LPQ\XKJD>99;967:<78@*+','/8LEBL..OO*H+MADA>H>;DB" :95AO16D'"6"'&('$,/./.,..,1.///0021//-++*+-&%''))'(&+&)1---4:*-)(/;'8*3@9)&B%9*"'")GONHP(/#897A1@=+--26610,4%0%,')*.8-.-(6HEMT}lUiC$>(4+3*/%*BuLEiIHVVQX[b&+M]k[62)0%*1\ECSmT6L\1\VI]\JrevvEMrb\DGIKEG\#%""!!"$,$CW99/8:5^[a^N-70M&%Z`2-36;71///,02/011MLGGC=SPD<<8:3+--?>P41:?GB?H^-XRUVPXOFLOVPLERZWSIONRK2;C<9/\86/@A99951Q6<<<>2'6II:JGPR,I?@887PI2.4/.6;843=>7948[Z2c]]YNQP=AEl@i97?A4JNWA2X8747GZDK>5,`)72>,=;5..;><=:69<<;:::;7877588799;9476347666.>:=86586868792.22335231/./0.-,+TMOVP+VKMLKHCF;=AA8c/5ZKGEC@B?:g<,&BF;><;=@?==:8673018962b[HA;ECFH?.;*[F,[PYRIJ@JRZ/0ONPPR>K6GD?G/@DGIEB?>82:]LK63IOPQ@`M5/S3A07ENJ\ePI,2C7.PXAGmYIXF?7312426KBZYZUMNC8ve~@CJBVI=@eHKS[TLJL[goR6W,%Ial32/,(E+!&+.KT56WPA@cikXJ6OP]IQS[\UaC7P6]RI<:6cQ8Yp`WI'%6,-'%$$%&&*)& $/*%()%"&)++* "4,).-# "245%(4G-#+1;JB9c]>.8V1AS]OQ/H3FIMSJH29=@YU8+#;Q_L.,?;B>,*:;/+5@AGIRJS\^[FZygU$3d]mc_f^\I%-Oigcggjda\>28>IDGNl_Uh}_WQGF@IHKLA7B@@35HTJFZZZbbjƔ(󪈤╺؋ȉεߺ媐핝쇆ժË{{Ⱥ򱰥줥듧ퟭɈ ""@)>D<.~V6( OPrT6#bI@qUUi7@%f;)+;2(+G@ݹ˓ƞxǟç|M:170:AP.H$- ?ƒ#5"7'9/IR(SU  +  *4*fy/TdF""'!$E߶â׿\=!*)0-ؤK"4GnǿñZ!3(O0- q?#'$4 #$3B #7eP(1vƉ#&19 5 `OCAEE<4(:64.&! "$"'')11)JF?;=<:ADBCGHKFHNOTM[^[_a`\`ijh95FBQ.O}jkyu{CED?>?AGt{xkwwRT}UG9V_^Kk~qoF0$(('().1/.hj/ #%+335*&4/16140"'#$#$&&$%&'''%&'&&'y&(***+.,,-+38NokLqZ+/-hjBIG`Q7q==twsqpl51./][bcedogdiimmnprtvson40.N(&#*(),)())+)'13414/-/-'&!#),.&$'&$&'*')('5!$%%##$%$%*--.XUXaZW-.***-))('$#!###">!"!!B??#%((0584/$'%*!6>'%053>;30*&"#%%#$'($%+%2105!!:7.5,-,)/($,/)(*-34(2*"'~&(,,7*&&+1$$"!, %!& +  &+))( &$!5!( !&     +    !  +  %&% + +  #:=3D&       +  0  +       + !'0052+!,0"! ($!!%# #')#'%%&"%%#!$ !-)%'($)$$%)$#'*(("&$&# -!!  """ !"q$#-.3010*+,"%)A(># ##('-(&$ 6"!"%&"$'#& ##! ! 1+%" ! !!61702//02102/.*-+)(.0.%@4'"$"$%!', )#*&"%!%'+&'&%*#)21-3,/231.,&%"3+,#"#+*!& 4'){,3.;5%!(A?=?O?6C.*&(%%&&0OAQPRNHH@7qRQ%&("0'$&A6GBPMFFGRYbF/B?S[(% !4D)!& #*6772* 27) ,2762:%%&80%BKB<~~}~~~~}~}~}}~~}|}|~~~}|{ ||z{{|}|{{{z{z{}}}{|}́}~~|||{||{{{|{{{ }~}|}|}|{|}~~~}~~}}~~}~~~~}{{{||}~{{||{|~}~}~}}|{|}|}~~~}||}| }{}~}{}~~} ~~~}}~5~~~{{|}~}}~~~|}~~|~~|||~~~~||}|}~}}}|}~}~~~~}~}|}|~Ձ~}|}}}}|}|}}|}}}|{|}|}~}~~}~~}~} +~~~}~~~ ~~}~~~}~}|}|}}|}|}}}|}|}|}|}|}|}}||}|}|}|}|}|}}}||}|}|||}}|}|}}|}|}|} |}||}}|||} |||}|}}||}||}|{|{|{z{{zz{{{|{|{{{z{{z{|{| }}}|{{{zz{{{|{|{|{|}}~~ +~~~~с~~}~~} ~~~~~ +~}}}|||}}~~~}~}|}|}~~~}~}|}~} ~~~}}}~~~~ ŧҢի´螏իܔ؉׾½и􏨖Ѣ^ɼấʼٺG  + + + !'(%$  &+,/,$#)+,+'$$$''&%'(+0898642bcjorqqv|?ABFKvhJLOOKHD?=720,&"(0/%$,*//MjTO[-Z8JiQ\Tb⟟i}uZ##(158<:1)""'+.7>>=>>>@CDD@@CDGHIKLJJJGB==>??=80*>M>B<-! !'6(O_g:22Ӻ #$',!-픇c}\_עҔ܃ιԿԸԂǷM4C-"1 9Q8/-TkBA]kVfˍـϲ\"#"#ϟʜεƎ胓ꖤȌ[1er*.:)2S; '10-&E:'Yט݇e<39]%˘变ǫݍ韗࢛5+        +    ! !)X½ȷ־ȾҾہΡ㻻ǹ˪ʲȹ¾Ʊɕǩ⏚T33344433343455454333645666555455665)6556 &86:8WI-20)-<3)3!!!"#!  !!! !!!"%())(%#"!"""##"!"#$"!!"#$#$#$###%%&%&%%$%%$#$%')))''%%%&'&('&&&''&$%%&&%$%$Rtľ熓p»ɽĶɀ۽ɵμ򀅃̿ʯžµijνـчи􍤚¾Љɻɹǹڀ˾Մꃍ̲㼰֦ŬցٵٱˇؓþݺրŪܻƩȘرˡ厁Ǒܽ‡ͪᏅϽ舏퍨핧ڰޛąяɵȺ􅏚耣֧񌤪ֲ͜˷⺲ĸνǶԻќ޺ߊ֔ߟӽ剔ϻͬé㪧Ԃ̿Łևэԫ̵Ԓ݂ʺୣ̔۫ՄΩԀކƬ<ϸ٭ڄ߃߉r?@A?M;3L9'C9/CQ\YP5cjcOKFID+?DT4Y:CKPc3P97CIYYJQ,,MuJFTY9B=ZZZ98gLOR`MMDD?J8`>J,*)5^Zc=4BCBEaA)>?E>=DHHJU5GS[VMTtnN-7n^_p[Sb\aXI@JdyohnuijdVWV?CDJLebV^s`YNQJFR>QQCAIQ>C;KTWN`XV]\cQGHIJJJIJJKJKKJKLKJKLLKLKLKLKL +KLLLKLMLMLM NMNMMMLMLMLNNMLMNMNMLNNNMMNMNMNNNMNNOOONMNMNNNONNONMNOMMOON OONNMNOONNMNMNNMNNLMMNOLNNNOMMOONMMNNOMOPRVVSTQONNOQUXXZWQQUVUUTOONPQPPQRVXYXUSOLSVX\^{aabdda_\]ZWUTQOIUPSdcmNPQ`{]J5ߍz t[ͱ|̮jlmEHHNMDPFJtIJLOSSUW\``\ZZ\XXWSOLJIKKKMMPQRVYZY]^^]\^^\[Z[]^``^\[\\[YXYZ[ZWU]rLC 2BMJKJKOfIn&uPFyQa[t =ILDVRPJILBO]FJJKKLKJIJJLLLKJKJI?zBCKHGRQָ᧪as80DUWmyE.AUZ^VydmioYۛn|Wqkfc/`ba4=CVaBW|>BCGcide}beÌk^SRbrB<<8B;8vi\;\_RPdBdGCSTZg?^M7^=4sroi|h9N.I$,8:P,9.4KT5T}Z~t~Qkxa7{p]]bIP[><@^XCOO9?D=3===>>>=>=?=>>>?=> ??>?>>?>??>?>?>>>?>??@>?>@???>?>???>??>@>>?>??>>??>?>?>?>??>>>=>=> =>>==>>===>=<=<=<= <<<=<<==;<==<<=<= >>==>==>=>?>?@??@???@AA@ABAABBBABCBCCBCBBCDDCDDDCDCDEFDEEFEFGFFGGFGFGGHGHIIJIHIJJJIIJIJIJJKJL KLKLKLLMLLML#MMMLLMNLMMMNNOONNONNNONNOPOPOOOPPQQPQPQQRQRRRPQQRSSSRRRSSSRSS[ldbSIBJGC;AGAB>52448465:>:.SMECA?>ABCEGGGEELLOUW[]`^\V[cZWb4EYTO+nnrkhoBMGDCHXDr~aYecMYUE7C6M^>N]u~qwIA99520/b78eqh;.-/231+5379>GCDQI<>>GC6648=5656546665889`:8:8;>T>799668ROyes_Z>=9=OGW\SjmxUlʚvttuuwvwwxz{{|||>=>{|>||==|>y={{{z={zzy{|{}||z=>??}>~@OPXWjMSUNPfXOEBAAABABC"DEEDDCDEDDCDDEEEDFFEEFGFGGHHHIIHHIHIIIJJJKNQSRROKLLLMMMNNMNMNMNM NNMNOMNMNMONPPPQONOPPOOPPQRRSRQOPOPOOOPPQPQOOPPNNNONOPNONOtfc´ƅַ}~{zsqlpjnŻĩ_~x}rkhajryqxyrX`X]casff_[a`\]_ij]`XZYFFB@?CFC?@=DKIFEABC>>ETNEB:89962/.068@<278;CDTOIIKJ959;=@?=<973340-/143cVW^dk377762253..110//,+.-)(+&&(4=A:G_YG>::2986.00'M')'1=ICERG=JDEV2NBBAC9@FJC=9DE?=?DC:@B?G#(G@=@>6;82>:;49<7 8;74*,OKG-74/H07)(??>05//-)(-10*,,%;=:?#='Oa9=LRV95+41>5'$2/+354(&0;+.)"7F633113.(!+,%&,1.--)).-,/501/-.-/+*-,0-0,-)*)()*%'"# 74389;3($)%<&'* -)?,&07&.!@?9768BJ$+*<+?J6E12;$04&(2B85,3'+)4(01//%,-!?=tw]yY<,P-",.%DH0):*bWMZOw@OiDV/INBENG@57KGVmkI=AUQFM`sO<,+P-L-2.805240V01ZX/1*,UP;AEF6HH5;=@@=862E>CB713X=>N<9`^WUUVOH_F1FO]XPNUYPRJIKMG0B;87/_3:50@60>3LU0:7974=[ITIHOJZSC:.JB-1<8;<4?79469A@454]^47h\TITYWF@rf:5:9FBK;ZY2U617-D#!@A?0-M>CFFH,/8<><::88;;><:>>??;>@?==;==>><7499:==<=::<>=><:63029827<;=<9;=7/1666:6941-/-//,,TSUST)SEEHLH>G90/0H3'F[MRS<:711RG1>IBGC>?CEBAAA:774/c_\aiWBPIJ;@;S1D'N05B1QL=D91KFPZUSTRTO[<+@@::8:=ECEE=De5^PP->YCBE;LL55,BKGKh=2:TG@8hK)(*.5+$,"*)!681('#$!!*"&(0%$%,.$(8&&-+()$9!243<6 +")KEb\o@#'(6=EECIFBFR,2=EXGE;54C5X9E#MQ[4&1;?Di94:=-(:DGOU7H\cYNUvoM!)c\dqWbZ\L<0;VnecgmefcRJG48;DJfi\exc[PTHBO=LL<9CG9;5FRYOb\\cdpnhݺнʊ޾ɷ党ӊ﭅ʚƯ۫̌ёɑײ߷ەyؗ44 $(I۔ẚ+*3"%.z=Ef@l2bJl,85`4p.잹+,'$4\NJښruǽϹKx3)((ZX"NT'1,͇ϖ! &@9*!Q+"SdezY    + +  ;/,[]OA,*0,GՈP,*# ꦃ󠉧C)>< ͻt3$NhG28/_A2F%(+&2ϐZ߉l +H:ǀhRG=DB;37<62)#!!%)/3.&EB=<<;:@BBFIIKIJUQRSW_cdcaX_jhhl3:D:7Eۀ}uv~>GCA@EPIvf^hbHPO@/6,EWKh|xmzH1%'(()*V01arh, &.300,,962645/''#$%#%%%$$&%$#&&'&''&%)(+*9*)))(*(@=xniUaJA12-->GMJChZ\LZ᎝hcx994.,0}{xx{w~|vonhlgjĿX~xxxumu||wypqrvzy{uprpwxgaZS\ekhps}iMQIMSTdVOKFNLIJLSVMOJKKy}|yp8610/3767988vpmpo550/.\`cabb`bggfigbiuwsys962\,(*-*'&&'(''*63/20--..*&%$(+4*!"""&'1,)*+) !""#$%## "$$$(+/.[VTZ^[*,*++(')'%&'$$$"  ## %+.*4E9,$33*(&$%#!(,*362-+--)&))#'&' 2 ,,+0:0(4./9#8,***(*-5.)%--(((-0&)-*11+(&$ ("! "/*)#"+$%%""6H+.09;!  (   + +    + +#   &0*# )  #7=632`_`gloonq<=?AFOrKIJJJFB?@A>;6-%" /,#/45vi?CC@>EmLmuy}ujYfv}se4\i^*.!,%/!&-7@EGKNROHGGGE@<4.'  */227=> +=>=<<>ADEFHF@;999752,CO2?"%!%%<26x2 .x."-/4 '!$6*@ܚю{<]ZK4e~OƨƠ⏾գXH8ϯښʬ++ %"*B|a;>Ixؘv(#$&(ትݛշޓ螼ŷuѭ.,k/6Dfu$-'vȠ(("3-,U859ݟ~瘴`aד̽}nZ  +  !!  ! !  !! !)ͼ̿ſǻ揝̦ꄅꄮ񌖚쁦¹lͶɿɺƱјՇǹ‰.2323343335445545555 5554546%!7u]S=,)'9* '!!"#"!  !!! !! !""$(*)(&#"""#"$$#$%$ ""#$$$##$##""###%%%&%&%$##$$#$%')))'&&&%&&&'''&'&&%$%%&%KbõpÿóǿӾѾƴƹϿ덧Žи¾ؼ쒑ͽ𺧿珔ƼԢ·õڼ♣׉ڮذ˶’޽ο¢ꯛÎۺƼцɉ죛̂֓ĸĽꬹ鑒톕煀̀͡ſ򘚒ؘȐݴ󵚢ƫ􅑝ÐՙʻðᎢ쀃ã􂈞ĵ萠÷лǭȎԼε𐻼㐅ˀշǹ郛ي٥߽Ӂĺ򘕖ý²䶯䜾!÷Ϸ7FQO6Y^D5 #H<.CR/R-OLiYLI>DDX$G^ZM3KMV]WA:37FMYV_J@@dSX01=^vnjc]\I[70"*&,WEXKjT9H&MKRbWRY\Z[W>?II]_YTJCAKceJA%"$MX]X&)26DZ@;3>KQPBKLPTXAR`YQOitd2-aYTakSaZdHJ:=Fellmrpvl`PWJNKNLVd^YhhWQWSBZNRPCDMP?@AKPO]_ZZ^\lnlBKJKKJKKKLKKLKKLKLLKKKL KLLMMLMMLLMNMLLMMLMNMMMNMMMNNNMMNMNMMNMNMNMN MNNMMMNNONMNMMONOONOONONONNNONOONNNONONONONNONOONONOOONONOONONONNON#OONONONNOPTSVWWSONOOORUXVUWSQTVVURPQRVWZ^\RNLRTVY\aXbcbbba]_`]ZYSPOLE\KrDWhVWSZPMXd?amq^psqz~ocdLRiLKKLLOSW[\^adgd\]__^[XTRPMLeKKLNRTSRUXYZ\\\[Z[\[YYZ[[]^\]\[]ZXWXWVWVYm4g,>BLKJKJJJLMKv]p=$3CTql1CFJLKB7HMLLIVRjEKLLLKLKKJKKLJIHLs]Pi]VhleRKo`CCeyjd5{ASi}MHªiӊo`~{f{jS2VII/;W}`xUFX?AdMG_~ɊpN[`qfuLdkhttO>[D=53*]^*@Q(ikGVenShI4;?xOF?KNOlmwEh=:*,B"-.0>;8'IREYm_V\traSA]h8Y^y[N?nvXEZ5:&6C`RcQPu񇋖DfZeW]i`KGŒ~$\g{nuky|c͂hL@> +?>>?>???>>?>>?>?&@??@???@@@??@@@??@?@@?@?@??@@@???@@@??@???@@?@?@???@@?>? +>>===>==>>=<=< ===<<<=<<==<=<=<=<=<<===<=>===>?>?>>?@@?@A@@A @@@ABABBAAABC DCCDCDDCCCDEDEEEFEDEFEFGFFGGFFG HGHHHGHGIIHIHIHIIJKJJJKIKJKKKJKKKLKKMLMKLMLLLMLNONNNOPOPOPPQQP RRPRRRQQRRQRTSSRRSUb`RJ;HIE?@CA?:61057169982XOJEC@?>AA>@BDGECHJP[RYYXYUWU]YW[g8:PeW^wrfmdDDGDI=rsXWXY{IZTBGBQWEfsvtyF?6:600-496ko2;/,^/258,4579>HCAGH=>>==5466<9536577865888679:::799J@68:65:|UaJZac'?=ISQ|JTUbCkhf]Wvuuvuvwwxy{|=9}>}}>=>>==={={=>=={{|||}{=>??}???@@@?Q~|_RPPfPFBBABABCBCDEDEDEDEEDE FGGGHHIJJIHIJKNPRRSPMLLMMMNMNOONNNMNNONNMNNOONONNOOPOOOPOOOPOQRSRPQPOONOOPOQPPOPONONOQwzh^Ľ~𞴷ǰ~{vpqjlliǸ~|zomjffs{rvqvk[\^aahgwh_VTTW`nmha\\TECDCJHEEA?EFEGG|ytrroslmoop{AEwCJGGEDDCCA=AHOD>?;;<6g53.05;:3//105=CBHIAAA65;?AA@@=<:98742./12_\U]ec451.100--./222544510/OIJJ&%(-.+Q+4:52DIFPFH9198PKCG?<=<76;2/.3,&(++BCA/'*$JJH?D=K,W/FGMR@@IIKK?H.:=>9G=;@=627GAH<5U&DG?F@((P*KBFLP/&7F9/0TK,6'O06*.3D<5-('&$"#!"(((+/-4=)6?A719.#4B<.>@38'8@I3-14849>,#+777<'C//#*'51& ""(+.,(),).11..-,,-*+,,/.-,,+('*-*)%(,1176"#8?54?,"#/+M(7@,4:&$,<=08=TL2Tc0)#>"+F7(//F4#'>&45.6;05:*4$'**539H6DznokfbpLHI7$27&!;d,,FUc_KxuMFt;NFl6:M<:8XDJ;EEWJHQBNT9-2PS|hQZSjYbw|nMPVKBUZW'&"#$$*UV49\<4aO5c_a>P1%3<782/.5:96461.112220SRRTGIGAF@;.N5U..37B9/5:22-NP8402/:.SUICWL.D7755.Y00.-..TV+R4SN68<<;:?@?9404N2*4W1/N7;ICYZURSVSMRRDFELTQONPPJOKGKN@2:8582Y26<1D;0:7S`7:86/%V>AF@<90CFFE?EBC;@;:A;0V43J4=5R//Y]87ZNSQVSkW9bj<>A7A7O;Y[8LHM2AMHE06SF/*#!)?E?2,LA?:4J/5;9=<:;?:;<>;=B@=;;<>???DB=:<99:;8;<;8:==<;<;933679;>9<=:;997425:<:7257600.-,+WKLPMQD;6B5-2543/,3VUTPTX\SN5ADCARGUNMKQMRJPTO@C:;B;BIGEDA?>BKI3DQ1D9FC-2*0*58)G5108B>~]>XM:SY6cs@Y+U^-/3346=A;T\^VWOLB=EInwE?9SK@2;FOOZILOWfhqI6\$0RV^7f3376-YM&CBHR9gLUG!@BeLG.)")JЕЌysY_5'3=-CM0 @5 (;RئИIN*%'>>.Vm[2P)( + + #,:12<4-0'-ȓ賆P*3Hd3߫54:$8CԄESn,(%K 3:<) ('PR1.U,H J*nJ j{gSH7@@<58<6.%  (/10*LCA<<:;;;9"#"A!%%-0+.')"##55,1+(((%#% #*+),/0),)/>"2069'&.123)/!&(*$0)),)& $0+1' 5&($+)15,.-2,!91"1!  !)+ ! +# "$*#"&$     ,!!   #*! +) +  !# ~! .""  +   '  3',   #!   + + + + )&*0%612'$%%' ! #' #$$&"'#'$%$%"'" ,*(%&(%"$%!$)&%%'&"%#!#$/&)"!!!1""#! %#'-..'++.*4-!;@%$&&+ /- #"##+#!!&!!" #)'&#&)*&#"#$ ':84686576410,ONNPGKZ+61" +  "! )(#$#(%' %(*02*+2*143343-++/.!).# 5)$!)&>*&(7+TQ-B&AA!&''()8H:JOSLNHH@?FDXI*%!.)$'0==NEJHLZYfG4M!EJR.U+''%?7117@&0# !%:,)&-(-+&-48<44=9 ! /,'~~}}|}~}|} ~}~}||{zz{zzz{z{|{{|{|{z{ |~~ā~~~~{|~{{{||}~}|}}~~|}}}~}||~~}|}||}~ }}~}}}~3}~~~|~}~~~}}}||~}}|||{{{|~{||{{|||{{|||{|}~(~}}||{{{}|}~}|}}|||{{{|||{|{{|~~}}}~}~~~~}~~}|}{ |~}}~ ~}|}|}|{~~~}}~~|}|}|{{|}z|}|}ց}|}}}|}|}|||{{|}|}~~}~}}}~~}~~~~}}}~~}~}|}|}|}}||}|}|}|}|}|}|}|}|}|}|}}|}| }}||}}}|}}}|}|}| }}}|}||}}|}|}|}|}|{zz{{|{|{z{z{{|{ +zzz{{z{{{|{|{|{{{z{|} +}~~~~~ҁ~}|}~~~} +~}}~}~~~~}}}|}~~}~~}~}|}~~}|}|}~}~} | Ԟĺݝݢ𓛯٥ܥڀȋ۪Ѿ̘ZϼɪʳνŻ +%   %$#')""'&%)*$#%&&'%##"!"$)/8@DC61__a_ehlmn79<>@H[PfHGIGB;9@CC>92*''+;7"0_FCjRGM>Y<_H]ko⊱g.=nml6*&$/A!35,* %.7CHLORTRNMONMJFC71*$!%.3424:<>===<;<RQG0I5N0CE3GZ//USU`WKNAGIJX'REYU4cYU`Q86[>FMQS]aW47>AAM[HE0U1/3W2;=ROIKLQOd@L_\RM[rlKC][dwV_\hH5DMRQZpmmoslnRYORPRONebbagWPZ_NWQOOBKTQ?=C@JCT[\][amp^9LKKKJKLLKKLLKLLLKLMLMLMMLMMMNNMLNMNMNMNMNMMNMLNMMNMMNONNNOONMNMNNNON ONOONOPNOONNNONONOPONPOOPOPOPOOONOPOOOPOPOPOPONNPQPOOPOPOOPOOPPPNOOOPONNNOOOPOPOPPQVUTXZSQONOPRSWVTXYSTSSSTRRSQPOQSW[`aaRKPSWWX_z||cYcdb]]bb`^\XTRQOxtOZ~ccseip2hīrzߌfS\kr3xV`SmilRLLLOSV\^bcfge_^bda`][WTROMLMMPTTRRUXXXZ[[YOWWYYYZYY[[[YWVUSRRSU]q:DTKLKKLKKLKJJKLLQ;6IJKJr^Z|l^3JLMNF9DQNNPYQOLMMLLLMLMLKMKKL[s~ձsk]lDrO]hjt]^;78.-'7??>>?>?@@@?@@?@ +?@@>?@?@@?@A@A@@A@??@@@?@@@?@@?@@?@A@AA@?@@@?@@???@@?@@?@??@??@??@&??@???@???@>?>>=?>>?>>>===>>>===>>>==>=<=>=>=>=<=>>>=>?>???>>???>?@??@@@?@AABAAA@AAB@AABABAABCDCDEDEDEEDEEF EFFEFGFFGFFGFGFFGHGHHHIHIJI JJJIIJIJKJKLKLLKLLLKLLLKLMMMNMMMLMNNMMN!ONNONONOPOOPOOOPOPOQPPQPOPPRQQQRQRQQRSSRSRSTSRr\]KHDFJBDD@A91401835@>8bWOIFCA?;;@?<>?CD?@DFMTLURRNMRS[]Y]^m;JVEprthkwzSoFFDPCloXWPXyS\C:D0X@lpov:575.102;7n76<*+//5<31799;DA=AF@>?:;849;=>42564766568989:9:969:JI6899:7J?oIexh0BT:9N~HNKcdh]bvuuwvwxwxy{z{{|>?>>>|?}==>>=>>==}|>==>>=>~}>?@?@?@A@Jpx͘jktiMFFFDBCCBBCCDE FFDEDEEEFGIH)IJJIIJJJKLNSSSQOLLNMLMNNNONNOONNNMMNOONNONOOOMMMNOOPQRPPONPPOPPQQQRRSRPPOPPOPQPQPPPONPPOPOMPRcz[ɐᶩurpbonv˳Ľr{rrnhfgnfttrmWTSWWcgrm[TLPNQbnY_`]PLJNQVDELFDUDA??xsi>AAnBHEGGDD?@E<753%E=F++N,+44.R;>174#4%>/;*/,:"&;'0-O5$33+'&$!"%$%!!%%)'24--&%%(')*1H24:U1<,7QLN583/,91.170FZ6b5753--./-V-W+YSRGLD+6/H=<9717;A-D;QO]:a54;/!G>A?=8TYh51I8FA?DGA=?7584J5MGV2Ta251^:aPRORUAEEo[>=96_V9H>EA)V35?ZM37;PQ>3P0PAA9/PKH?3>-49;<86>>;6@@<<=@><;@=@><646;<;;=;?=;;;26=>67?;<>@A=<;633634582.*12:824030(+).11S@JBB9@EF;BIR/0LV/F9B.O1=OOOQBGeA9EFCB@@?C@>9fcddRFW\UW;GFER0BKGAT.3HEWDUFBRVS@GLHBANK9;D?AGDAMMKDEEHJMI4->PE=U+:ZXFB0+2#=4!!*%$4;S1:;Q=Dd~cCk=-0366>NhOZZVUSOLrbmGSRL4;>Y6XD(22-,/$(%%+*'("#$()"%!1'(/&3$%**+22"),!)0"=5525,&!!0Jc`K$%,?KdfXUTA@WB!DNXYfCM`[QLXsmF2X]o]]W^>%18ELJ;9A/+ L>H/^+!$' ?p/%eૺ)9(# H*%+Uđ!&-̡ԍC$/4pdLE==>56;73&#042YPIB@=>;:28'P>pulq6&()')(,32m4(& &*2420-17;77711)#%$&&""##!###"#%$$%%&')&)&03'))(()=3Xs@TZwR48<$"GkGB8[OTtR#cs257;2+,1~{{ppn_kjtɭ{u{{uv|~xvosuxxqkwreqhkkb]ahanpkhOJGFIU[bZKB=?::6#HF!!+73*'#'+")+2'(!#& & --9/04/9!)D+6#2/++.1+/4)-*+.'%#&7)$*!(0$"7&*!$$' $&'  .!#!%#)!%#&  #&               *! %!!"/0!   + +  !+"   + +     ' /43/ )''#()*&$##%%B$""+,%%'$$! !#' +'%#&&#!!"!"# $%$$$%$"&%'%-'"%(%&" ,-5%" ("*&3/0'((+,"%D4%$ 3/)!&!'(#(+!% +!,# %""&!& $((''$8'.9;975546541YWZ^MCTUH:!''%/"&$ &)"," ()&$$ %#+2,.410765121433, '3&!+.) /)"#$7O[TF2RU*$&')(8NeHNOMPKIJv=J?A'""')$&%6)1-FANLPNdO2951IP.WWT**MPU-$%('!4&5)~ ~}||}~}|}~ ~|{z{{z{|{zzz{||{|||zzz|~~~||}}}~ā~||}|} +~}~}|{{|}~}{~~~}~}{}~~}}||}}}~}}~}~}}}~}}~}}}~~}}~~||~}}~}{}{}}|||{}}|{{|||{|~}~~}~~}}}||{z~}}}~}||~|||{z|}~~}}}~ }}}~~~~}~~~~|}~~z{ +}~}~~~~}'{||{{|||~~}}}~~}~~~}}||{{{~}}|}ց}|}~}||{|}|}||{{|}|}~}~}}}~ }}}~}}~~~~~}~}|}|}|||}}}| }}|}|}||}|}|}|}|}|}|}|}||}|}| +}||}|||}}|}|||}}|}|}}|}}||}|}|}||}||}}}|}|}|}|{zzz{{{| {|{|||{{{|{z{{|{z{z{|{|{{{zzz{zz{z{|{|{|{{{|||} +~~} ~~~~؁~}|~~}~} ~}}|{{|||~~}~~~}}~}||}|}}}~~}|}~}}}~~} ܶ侧աП툋䅼ѣǠտ`ƿʲҿϹ2  +"#!"""#"!"#%()%##$(-,'&&##%*7BGC=6babfiik58;=AYlkI=>G=JPjC@<61/-05.)2?e8HDkZ`@/+;1D`vӖŐϋ|qUh]ʑJ:.=Gsa1AM!"'0;GORSSPOOSUVRMMI=60)$!!")0341158;:<;:889::;<>@?>@@@=62/-+))(#,=!##0$MbY%+.#$%&#" 5C`̟²}LTB/I%+W剉׳[a⫠䓌EZаJHíE#!&.7QMot=I^pzj4QNz∛ꬪhޞ|щĶ{㮁罦ԷԵꙴӘ~'=9JO=6'A̘+(.ەτΓ;&=̻Ēۋˠ4)t~n-- +   +  +       ! !  ! ! ! !"!"!&ͶǶͰė߇Zṳˢͱ¿ĭ؍덅z14443 5556677 7867#&Os`BA=@+  !!"#""! ! " !!"#%())'%#"$##"###$%$#$"$$#$$#$% $#$%$$&()))(&&&'&%&'((('&'''&&%&%IUƿxxcü;Ƽż«ǽ߄ɾߋíþ새ʰބܒ锕耨Ƿɴꏛˁ٠߃ʬ˝ٶ䖼᪙߁Ⱥߦ٤ɀڗɘӥ綷ФÀ۰ֶ˄䌑Њ㉐򉩦ɬؑ򑟍񍡖߭Є¿®̀帟ԭą󇍉쑉ۖփꇆѰཫΫڏؾ߻ä筯ƺֶ遞ưˠݳҧڄβ؜冸͖л¼씍كóµżþΎ,ݹ򧵴ǚл񎞚ꄚՀT?QNI30U9M:>H5IY0QQWT5XJWLJFGF&)2;:?KY[VF<26;=EPTYXGR4201f?jmcZ[[9K7BH88[99CjYAF)2qwke^OR\eQ9=K_XLNMHF\LnM[/F\[[\BB+8hBB;7=FM=@JNV[UE_aYQVsjY.3X^hub^V_TOC_a\Vppprqhm[TV\Z^cknWdLKKJJKLMLMMMLMLM +NMLNMMMNMNM NMMNNNMNNONNONONONOONNONOPONONONONOPONPOPOOPOPOPOOPPOOOQPPOPQPPPOOOQQPOPPOOP QPPPOQPOPPOOPQPOOPOPOPOPOPPOOPOPONOOQPPOPOOPPPTUTUUSSTQQPPOQPQUUUXXUTRQUYXTTUTSSU\`c^XPOTWXWe^eekyec_[YWVWXSPY]Cf\PwcWR{ayw>w…˼ٮΉ@йߍ|cld`I[}RNNPUZ`eedgca`dege_a`ZVUPONMMOQPPPRUVXWXXWVUVWWXVWWXYWURRQPPQSYp;?OMLMMKKLNP=ILLPaoh\Yb$SLM><`QNPMONNNMLLMMLMLLKKLKtǪsahYMVbP9l_nrwfolYftm_QrJSaeqx믺jzV^czfg}dfmPyw|mbK3+BI<7=c}>DEIGAT`VVxeĜbzjWxdyk=U8@2WXIVe0PYk;-71@IHВ]-D\,2``K7@5:$0*&4"144+<,H72[c`V^kluzrlͯC:WQTllPfiX^II6?eE{S?=?^MmgPf?n_K]jZJK`wyP[e|YCJaqqghbq?:?>@@?@? @@@?@@?A?@?@?@A@@@?@@AA@@AAA@@AA@A@A@@A@A@@@AA@A@A@?@@?@A@A@@?@@@?@@@?>?@?>=>>=>=>>==>=>=>=>=>>=>?>=>>>=>?>?@?@ABABABCBBBCDDCCCDDCEEDDDCDEDEEEFEFEFEEEGEFGHHGHGHGHIHIJIJIJJKJKKJJKLKLKKLLLMLMLNONNNOOPOPOPPPQPRQR QRQSRSSSRSTSTTSTTSTTTQr\]PJ>@G?CC==2-0/481FH:[PRMC@?=><<<{y|A@BDJONSQPNJNR]\VZY]?UXKxwhjuyjpBIDJYdwYYRc~v][ZFL9-Dgiqqz;4674p1.1;:p(*.04A?/7;k9C?>;=4587=@7456676566689:9:8899:M=57:8:?}TOY"MW337~>GIFQY}Slvvuxwxxz{{z|}B@@>???>?)>>?~?>>==>>??}?@???@@@?BpgifnRHDCBABBCBCDEDDDEFEFFFE@FEFEFFGHHIIIJJIIHIJIJIJJJKIJKKKNRSTRPMLMMMNNMNONOOPPNNNMMNONNNOON+ONNNOOOPPQQPPOPPOPQQPQRSSRRPQNONOPQQQRQQPQQPOPOPSw]הﵪ|trksmϿʼ|wuomhgebbgvmq_Y^]ZTgeb\VOLVSU\]\Yd[YWTTJLXKXAKDBFCB?A>qpxru}FLNQRTPEnuspsq::<@xAGCHGGDA<;8457;@7965545533:@KB;70.+3328:<9;:355889.16>156:4/5:82:;15,QDOHCI)('G)(+AJRE?=:G?B*H0HKFIAG@A9F@@H>/B2,C-39,-3+*04561/&>'CN'% G&1/9,E2--2G*'-5/#2.++2*%)-($-,-'#&,-1%() "+0>55D;&.()?2@H?B@=?B+H,5,8<9 !*$-?8#$%"'+-.)**---/1200,/,,-+)(+('''0148%% '!+2#0!2"13+16.$,$'&$'+#"3" 0C5<.);5$!!%>+!+2,">=-).<7;Z-;8=8EVeeZq[GBJ>@30,/,NL>8/1V\azmwTZCfulTjpGdlFnHqeskiHkTeb581()fN787;61^334dPF7U66951R,R0>=3.8//7461/1ZRONGMTH:254;83@2]QHZ@^<0+MC=99aT]^TYgVJW;;GJCAJ;0:>4HSJG11Y3635;35XR99lI98jL\AZ[NJ/,3A3R++495V+aE2HD84'8:7/1RJE2.C.6:8489<<9=?>@?<;::<=:=>ACBACC@=;:9;>==;<<<;;:<:::976>>A>?A>7351.+,--236=98>93/02*..590QJ=60GJN.TQ2TOTVUKPB=MGHMUTJ>p?RQ&ICDGC@LLLGCHHJLI.RGD+-BMPTIK[VM]?8/:MNU08Q\>;6WIG]q>T6Kf?,063:cY;;2^GZ^cd8BKMJ>hAW^1'1/- !4!,$$&$(#+%$!"# "*+(!!"%*-00!"%'7#8=611,&"1$->dN'$%^me^R?>IYC""4NI??@:9VJhJY..AHOY?<&0;:319BH69KS`c\Ga`UOPojV##P]ph\QWK84LPJLikijkkq\5CIKJGDclpoiTRXjh]KEEGAND>8@;D?UX_`gr᪭{˧Ԙ젞ē؞Á՝ъӱΏӗ∫ϳѨ|d\B40%&1-( R8r؉oT۴Wxkrd䀣E1kO:$@>7B/ =QۍH)U񁓒ҫ㱴W&+!(,x0!&(9 &x*( L]޾'  +    %%9$+'2511S1z뮀ƌƟS30/!DYzɎ:%<("..'x3Ri}Ϛ,3/*2*\mj- ([⌁%Uj`MC56;46:4. !283VKLI@>=;;:=?JHOPTSQZWWXX^`jlltrl;HLR³툊}ual}>E@HTg}bg\brpedX>C/&?lnlp}3$&*+(',26o5,&#,&+5e3/-16:78637)%&"'($""#!#"""#%$%%&'((**'5+&'(&(0]K<7P,M"CC"!+l::6;|;B>>CCDDPIIEEE>?H>xuEwyurm3;62501032dg6>9olotwv88:<=@>7cT[[[][/049vp;;561/-*%$" #%(+%&#"#$$%#$*180+)%$ %"#''&###"%''&%$##!#"!"##$#%')('NX)&%%%"!""./PKLGF$$A?<:977655+/+$#$& $* $#'#!%&"*)"4.3,)+'+4:1*)'0))0!-207-1*,$/)(3% *"("'!$$#'+(,#*& + + $'!"#&*#%$"##*%! + '   +     + +     %" ! +"'!.$(&($       %    + 2$.5'!-&$'$#" $(!&.*$")'%&&%#!#" &!  !##$%'$!"%$" $$%&%'#!$! t,*$*) %#.& 3*/1,,5.(,"#! ,%!,)&:% "=/2&14/&"%.4"#!#!  $#&#%&& $""$$'*)& = 47987568624UWMZP?T\Y'0.'(/)*&-#$!('5!*#""&%4.142/557405334/0+-'$!%(&#+$)'0>@E&-;0'#/?NV)<44C+#%(&3_Z8KNOHFDFBCJDD9%!(,(&"@6SBTBCVMPMQJN=?5K,XRLUQQKSA89@;#"1"%"%$"#>)03B 5&4586#%&$ >&69 +~~~~ ~~}~}|}|}~~~|z{{z{zz{zzz{|}}}{{zzz{|~~}|{|}~~}~~|}~~}|}}||~||}~~|||}!|~~}}}|~~}~~}}~~~~|}}}~~}||}|{||z{||}}||}~~~}|||}|{||}~}|{||{{||}|}}}||{||zz||}}}~~~}}~} ~~~~~~~}}~~~~}~~}}}~}}{ }~~~~~~}}||{||}||}}~~~}|~|}}؁}|{| }}~}||{{{|}|}|{{|}|}|}~}~~}}~ }}}~~}~~~~~~~}|}||}|}||}}}|}|}|}|}|}|}|}|}}}|}}}|}|}|}|}}|}|}}|}|}|}|}| }|||}|}}|}}}|}|}|}|||}}}|}|||}|{|{|{{{|{|{{{zzyz{|{z{|{zz{z{|{|{|{ |||}}}~ }}}~~~~~ׁ}|}~~~}~~}}~}~~}}}|||}}}~}}~}||}~~~}~}|}~}|}~~ ִ̭󌜰ܮÝ졉ڄȸƶʾլZѽƕѿ5  !(&" ! !$%$%'*.12-,)#"'1BKKB9gbbdcbfde34689:?@JG^8>VQ60%1~_^J6 %"!!  !"$#'oʴǎ񲟷2))!?5!%/cxǃPY/jd塗ĸD$̑ȼٷ.)+-'.+YK=)=S^2=JBTfQMID]>G98@KKKHBBXSI`emiSmMLLKL1MMLLMLNLMNNNMNMMNONMOONNNONNNOONOONOOONNNMONOOONNONOPOPOPOOOPONOQPQPPOPQOOQPOPOPOPQPQQPQQPPPQPQPQQPQ +PPQPQQQPQOP&QPPPQQPOPOQPPOPPPQPPPOOPPPQPPOPQPOPQQQPSYWUTRQPSRRPQQPPPQQQUWTTUV[[[YXXTRUYdhe]TLNQUVWXzm|[ajwjih`[Y[VZWU]aVjuoUxsUSOSsMAazқŎe|`^th%zփ|ciZHZNPRTXdgcdcachkfdfddc^ZYSPONOPPQRSUTSTUTTSSTUUSRPPOOOPRURONNMNLMLMMMNLMOE>KMMMNVb\cQVNLLMMORXXF|I_q`?>r@kp{adtaf{Q[N~ukhCuezy`_s]zmSLi[^A?@?@@?@@@?@@@AA@@A@?@A@A @@?A@AAA@AAA@AAA@AAAB@@AA@AABABBA@ABA@ABABABA @ABAAABA@@A@A@A@?@?@? >?>??>>>?>?>>=>?>=<>=>>??=>?>>>??>??>?@@??@???@AAA@A@ABAAABBBABCBCCBBC BBCCDDEDCDEDEEDE FEEFEFFFEF EGFGGGFFGHHGHGIHHGHIHIJIIJIJKJKJJLKJKKLKKL MMMLMMMNMNMLNMMOONONONONP OPOPPPOOQQPQRRQRQRQPRRQRRRSSSRRTSRSUTTTSTTSTUTTTU{`_dUOA7<<>E<8+(,3;86>/SMLSKB@?@?@?||ELMLNNNMJORYWWZZ]nGR_lxplrxfq|@GDEvXwaVRa{k_ebJJ>8T6ZgsA76863-/6AuBF?-,.17?>.576;G?=;;=<=;<23578B933435453777677787995C878:9:_gxfVegVO%IN\PP~=DHvTM^yvvwxwzxyy{z|?@@@?>?~??@???CB@?~GFA?~?>>??@??@DZ{pcZWSKFGDCBEFBCABCCCDCBCD EDEFFEFFFEEEFG7IIJJIIHHHIJHIJJKKJKKKLLORSSPNMLMNNNMMNNOONNOOONMMNOOONMN ONONOPOPPQPPQQPPQPPQRSSRQQP OQSRQRQQQRQQPQR̎涢~pifiǿzp~~tujihegabj`]bYa_TPaZ\VROKVRZ\[Y[TQ_o`cYXLQ}CMHDEEADDDxxAL>smhp||EWa]WYPLExwrrnl;=:?vq=DDFFHIIAA>;:897674565553899DIGA83/)+**1;5242.5>@DDBC?@??>;757::664250/22,,1376<4PT\\c20..,RMKK2=40,,**.4//7:793/043..6:874,+57/+("@*,KCS&F%$>?;IL(?AD>KU=GF>?CLCA::777=@:=A%,5(KA:)+8DL:JEO946/F;O&*5+3?K(#7BF137//(&)A+%,06;>7/22(.3B/2### "$%+%+/"*'>,$*0(%=H08CM+JK2?'1;57&I)/ *$,/9&"$$)+((*,-/-1./1-,.)%'*)/.(1! ;*5#/ #:&31'*-, (%)&+(*--8)4$$ 8..9: #38A)$6.;,):++6YW]^]S@VJRokOfILKMH@:'%KNAB{ulIlxMZfbyg|XMbmzE>42=93239\NQYl[_RGNZJCBBRd{XSaKhLyguqnHM=U[03K=/*D4;:;==6411a4aFU9510660,H+098.D*5=86031WIAV-XHL70/QF5HP152-.081:G6VL06+13942-W(>BGV:O92-21/1-,U--VOSEA-7?Z1:;><85).>:\40-RY.LDCHKMWSUQNJINKIC@EGFMNGGJADGB=66>678=9:7<3.4GI3<_0P?>?c]Uei]f6]G]>C9&=IALO826@>0NI2:Z4<<<1.7FICU^<89cTg8fXU4L3WG8TF@JhRDPRG-\-,$#<431KEB:&7E...,292-139EFC:8788899<>@>??A><:;=<>?:<<;5;:889::;>89BDMJC:eK):DB@BC>;9r^]\PIWgm76JPDZ-IcKJEODAEJ@@771i:D[v?=>72VLKdjki9AG@AdLXG(2.1+#D"(&!(&+,)! #$+ (!$$:$',/)&'"#(8!:@42-+++,+=)WjV*!Dbpmb@B?;bQ$(BK^RKHAJ7=42:;C>4>IT\rT^hZRHyf[A!>S`ppZQUY)6LTJ4_60G;/"ٜSe˹LJJE':S%6Xʳ4('\2!' ?'!Dڒa'::<>'-'1H$ b'Ḿ 2.19lgQF5-312:2) !-(MJIPJA@>>>@BUWUT]a^Z[ddgdjtyppBOqwy`iw=C@Bp[{d^W]pkiqeEC4-I4]ep8&&+.*(*0=s9-&(-(*0143075588699'%%$$,% !#"#!##%%&$%%'()**$/('&(&'KEnUGYHBDDB@5Dw486[@<|a,Ͼ[t.3552.(,r{{usu{rledgõŻyz|stmuunc_n|r{ywu}trjmbabac\_fYUXOURG@NHHC?<8B=EDDBFDALXNQII=yvrCpmlpw{}|xxt5=8433/024bi8B6gjjovq;?EB@C?<5][WUPN,/17ig6::;6441*(%$$%%$#%!""!!!$(+4310*($ #(!!" %&&&%&#$#%#" "#$##%(&')(##&%&%.)ELRPT)$##"D?<>''!! !%##!!#$/+7'')!,/(++)1@)/1(*,3)*'(! !$,&*+"/+(&.6(,*-'#$'#0!( )'!% + +   +&,,. (  +      +   + + +     !   +%( !&$#   +  #      +     + 11 +%&) "'!&( &!''"$$"$(3$)  ##(')%$#"%"" ##&'" #!$"+2%!"41,67.11%5"""!$ )","$",1 #537"73.*/$&!/)#(*".  ""&)%".!"'&#6,1;789;643hXUVLER`b0+,+%4*6''#!%!0''$""""'+)22.23/16860:65556&!+,%/5;!:$%*-.06+@;,,CQ&0"<%J3Co`KPSKH=>BADICOC;(+((#3H84O9VTVN07DC8jR47CLGGPPR?RK3&7(A$@ ! B&,;A! /*,;<;9"%!%806 +~~~~  ~~}~}  ~~}~{{{|z{zz{{}~}{z{}{|{{~}{z{}}|||~~|{|||~}}|8}~~{}}|||~}}|||}~}}}~}}~|}}~~}~~~~~~~}|||~~|{~~~}|{~}}{{{|}|||}{{||}~}|}|||}||}|{|}}{||}}}~}~~~}~~}~}}{{|}~~}z{~|~~~~~~~~}|}}~}~~~~~~~}|{{|||}ׁ}|{|}|{|}|}||{|}|} ~~}}~~}~}~}}~~~~~}|}|}|||}|}||}}}|}|}|}|}|} +|}}|||}|}}|}|}|}|}|||}}|}|}|}}}|}|}}|}||}|}|}|}|}|}}}|||}|}|}|{|{{|||{| {||{{||{{||{zzzyz{||z{zz{{z{|{|{|{|||{{|}}  ~~~~~~~~~~~~ց~}|}}~~~}~~~}~}}~~~}~~}}~~~}~}}}||}~~}~~}|}|}}}|}~ սӰ򈐗ظқ忖ዝߜ㎈Œʲ˜^˿ìϺèĸõ + +>$(%!!  !"$*--./01-($#.@JOG>7hehjffdbb247864;MCUII@CrQj>74qeBHK0<../4>@?}^FW>[D3/.*$JfZʨl{BDh%Tfo75S7*-($9J:8DL@NOPQV[\ZWWUVUPKE=63000222/./10.0455544323444332/*'#"! 32mXM#"!)!!$',,%/ꏔ톷ӜeWRQ8%%Z[*/<%'6-5٢Viјṍ徃@qӜ˯?2-(".4>:#_gwIxWѲ҈6;FȨn?Ϥ夽Ѱ؆펐ʈ͖ϜhU;:Q˄qZؖj2&*-󅓞BK""##8hܫ̨բ,       + + )     !! ! "! !"! !#""!!!"#"$5߿֮ڌ򖺹ĝ߀hնɑ϶øڻƷׯиՋѧ⺯ܷR24433456 767!!#(4GA.&&&"#*&"5RC)+,$"!$&!#%  ! !"""!! ! !!""!!!"%'**)(%#"""!"##""###$#$$#"#"$ "#$$##$%$%$%'())(&&%%%'''&'(('&#ECĵfmwua󀅂ɳͿþ憞ˬ㾵򃕫ŝꓧ󃕗ĸۀϴ¾ߓİøſ脐̀܁İу⃈ƫűʱҹƹȱؔ¼ȷޗɾ큉ͬϦúәҮӸñɻբう󌠣˹¾﵋ﶊŸ눈܇ɶشכ֏ϐ򦺄ǹؓӱʖӒ섗ı׈ǼۚӢв ۗ†灎ѻ񈎐ƃͪӺɾݞܮΜ՜҆ɹ삍ᬄ¥ᛚߍƗѐᬃ/øʑҒ£֭ӵ􌋉p^HLPN`2Q.YLAVHX/042132\YTEEFFHVC* )/.=FLZ_RA3]dEGNRMKe:55SIT>@31?2B9bjtof^[:3/D`EJGQMV\ahkhDLMNMMNMMNONONNONOONONOOOPOPOOPNOPOPOPOPOPQOPPQPQPPQQPQPQQPQQPQQQPOQPQQPQQQRQQRQQRQRQRRQRQQRRRPRRRQ%PQQQRQQQRRRQQPQPQQPRQRRQQQPPQQPPQQQPQPQ SWZXUUSTSTRQQPOQQRTTUY\[\[\^\ZVTZfhjaWPLNRUVUXVtccTO=Z^Z{UybXXZ_\SlRfuyY[ZUOSUqyԚmyrגʉҟr|Īj\gIyZ|mTc+c`aa`eiigeecfgda]YWVRQONONPPQQRSRSSSRQQRQRQRSRQPO NOTS8?MNNNMNMMLMNNONMMNMMMNMNmWjaaX0NMMNMMNNTJJPNMNNNOPTTOMMMNNNRUSᓊkVsUBNtgtwkdjLj]ug=^q9U@JoYX}}os}U]hƴituAxh{fŀf<%2?4270^\YURNIHbXa`Ayp]hwCUiEts6>K7Raa[NaX$(2NSZ@8=BkNrH.llI,773;$,&+?T<'++"5;OK8CdVVy^skoin^ypwvTM^TȔkDZJFKVpc'\DQqkAgfNFfcu~UTztt}lk;LZWdkpvkPvlgTVv_К`J@@AA@?@A@ABAA@A@ABABBABA BBBABAABBBABABABAABAAABA BBBAABBAAABBABAAA@AA@A@A@@AAA@A@@@?@@?@?@@?>? +>>?>>>??>?> ?>>=>>>?>>??> ?>>>?>>?>?@???@?@@??@A@ A@AAA@AABAAAB CBCCDCCDCD CDCDDEEEDDEDDEFEFEEFFGFGHGHGHIIHIHIIJI!JIJJIJJKJKJKJKJJKLLKLMKKKLLMMLLKLMNNNMNNMNNNOONOONOPOOPPOPQQPPQPQ RQPQQRRQSRSTUVUUTUTUTW\`b`LG<998=G;2+*-AF:49KIKMPKA>>?=yw}z}KKJMPPMLQU]\Y\a_cs\pewllycn@GBBCZpoWV`lfcTKIE2I,e}:55752//:AyAH>).7;AJB@989=>9<447537753244555666797786787K969:<:ivitk{GL];GEUUQ=DE??@@?@@?@BHFHM_qiQHHLDFTKAAA@AA@@@AE`gPTTJIDHLLDBCBBEGICBBACBCCDCCCDCDDEEDEEFFFEEFGHIJIJJIHHIIIJJKKKLK MPRTTRONMMNM +NPOONONOOONOOOMONO PPPOOOPPQRQPQRRQQQPPQRSTRQPQQQPPQRRQPPQPSd̨~{wnkabhcfld}|~y|{ztsmhheddphkid\[WP^\YSV\hRQ_^V`YUW``XddTPN{{~FIRKFWNGIC?;=neknvHOKSQPMKFAyu9<;:9;8p=B@DEDILEECA=;8466433436:;;6=IJFB82/,)++/.3-.**2:@CCE@DCAB=;:>=<89:51//31,*,-022QVUVWXY\-*POIKNT6DD7968:91-5./43215;9>9;<<30/1.%IE*.$&A8AAMHHKAKCgEA>?B.L0=237.&--.*D$?=880() "*8+! ,0'$&&*'%(+-/101,13/,+(*(&%$$*-04"'#,!7'(#&))/&'3//'!"9.+/+1,'4(-'3)52#>@ODGC^G;Q^XY]\YBYWV-T"B@7JH9LZ`]K\`UtkZhqiX~[JtH6JJVR',4:Z\d]5BuALO`kx|hocUoutj{Gyk_a]oceRBC493_a36]>772/294XTS/0511]<442514-U++.0WBC717K-J?8NJ..72052K1.U1-S5>:0-U+*H@BL9E76/3400--.0.QIDCI*2>@6::@:83M5J7;1ZX-USDKLPNMURJJLEKNGGJHGACJLINKECKFFA;:542472:5/0/4N698,Te76[Uc]faV^gE1J`Q<32AIMSI76?H8_V1;97976=LI?=:X4_Rh87eJh_IgO.RBAP4>FJL3WO=9OC1($,+IA:??ACIH552754-V6549>;1-28;<;=<=>A@BB==;;9:=?;:9_879;>>>?@>9<>=9:<<856479:75395..58:957.Q77F,SIM43.8+EKK/N/45136268<.:E46F>Zm8<8J;BBD<9ooe_]RRRe;F>?DX_RBUG/S=CP?JDGYMNJET2;L`R>+IBGLA:NLNHJLLKKJR8%(,0/NFE/I2.>+T=29J.59;J~vb>\\F9GwQ)DWS>OY@@SSRwOKRD>ByoKGJ[^EINL8]S9GQ7UW^[\<\6?NVhMRNIJROVTR[Z;81*('Z349=BH;F=99dmIcj:>64`UKUijifa_;9;8=B4,-11>&*3%#$+,*"$$""- +  "+-&4:&',-)%3&#'7aUꅼГѠЎ?}ƜvCb1968!/npN(?on9O A}Ըۚr}РDos-Fk- or&+&+( 5.,+Hد:    F;#-Uh"()'F狂p^O˴MW?=:5D>*<ȓV)"$/$!;., #)PϾ%@CobI@500/2=4'%(#!)AHJJLIBA>??WY^chgcbhksjltzrp}aςu|y}_h=B>=@[tq]Y\duhPFA8)A+f|4('--*))4=v6-#)+)&,.7:39336:977'$%$ #"! !""$#$%%&$%%&*(()'4'&'&'&SMa`\l79mN:D<@JG7955=:`hj%¬&y30044/*.zzywsvojiec\]_[]c^}~}}{v|upz|vrjhytkpqjlmnjkfa`_^^jbge\TRN}BLLIABEL=@HFAICDFKKGSOABD~lungiorquw{~|=;B;6A92520/a1203echhpv::8@@@<:84_X()))-01b377:97880.*(&%"!""%''.4210*(%# #!#&''($&'(&##!$##"!# !"'%!!"#%)(CKLNMMLL# =?<>CJ(,-#$"#!   # ##$%)# 2,&"#&#)#)2$&)2-,.(2.L1**),'0/$")/..2&- #63(&!%",*81) &/%+*%&$&."# (#  q   ")#! +    +           + + +  m +    #)"! # + + +      &!     +  + &/!.1.)'&*#'#$## %$%#"$ ""%)(&%##&$"('!!##%! "!" $%!#"!",6/,4074,.5%(5- $ .*&$-50=: 9)<9(;,) &!%&,& ( "&#""%%&"/: .2;;;41cg^XXNKKZ333.-#"&04,"-"#" '!#-%$$!*&0& 6/35-)75646667622*#"9--0=(-012I9* 13*&0M82-')>H;@VYY|LGMA,%# +4-%/CugP̸Ѵ뻿ᄇԬɎO40ng̡򗱮Ƴ皒˜ʳ@p"AķߗЏIƥ/0>жǢۦRX0* j⟚ڏԘ˖z˚2/   + +   !  !!! !! !!! !!!"""!!"#"!"! "##"!!!"""%SѵԜИކ|ɩ邚ணʍιȿӽĶҾȹǦ`454455667776676 #.07@4/C;+2>1 ",*  !!"! !! !!#"#&)**'%$"###"""#"#$$$##""#%$ +##$$#$$%&&% $%%%&()*)('%&'&&'&$$Jиen~|lؽ»ͽķʬí剡ᴣ愇תǭꋢĿǮ̼Ԇ׼ƀᐸͬ懐ŰشƻǸпȴȿ߸퉕´˞㉯ἢ֝ҦҴǼ̆㼙ЈǍܩ¾ɚŒͮ灈Ǻ媮я͝׽гѹ䈨ׇȒꂄ݄ŕݫ꥛ʹʋȃǰ޼퇖ӗĽɌ讈¶䁀٨ܲ֘ŒØ킇˾هߊ쿇͹킄½ɣ̞ŦݹǕƛ݅ꄈ֙ԯ̒փƽ0ι񄐠޳򀌃ƘƋjoLTJYB/HF9;DJRXF]`f`giaMDROX\hHYXlRAOdXVcupnpjgbV>IOXRBPj\VbXDGVds_PLJO\aRCEBAPFQUW\aOV_QMNNOMNMNNOONNNONOPPOQPOOOPPOPPPQPOOOPPQPQQPQQPPPQQQPOPQPPQQRQPQRQRQPRQRRQQQPRQRRQQRQ'RSRRQQQRRQQRQRQRRQQRSRRRQSRRRQQRRRQRRQSRQ RRQSRSRSQQSQRQQQRQRQQRQQRRTUXVSVUVTRRPQPQRPPRUZ[\[]ZXYVSRT]kfb\VPNMNPSWTSQ`YFoWTZ\ahaqQm/P{^WXYWY\}a]mghSm;gr}t|bwuȘФ^[J|Z]Lvaf`^`bd!jnrplggmsmhea`^\XSPPOPQQPQPPQQRRQPQPQPQPOPNPPVNJSNNMOOOPOOONNONOOONNNOONMNNNRcvca_-ONNMMNNOSp=CQNONOPUXZWQQQTYU|sqws{l_MF]Xdff^_K=KF>`ZV4^\?lD@JQGiZmZ{TX{t؇TЁ~moVu:2OunH'8=c]QMKJ]:GU@JzywvWTQlRNal9EoFA2cGQNM5><5;@0VQ62?BWN[:AQ&OcL8$0>*223@:K42ch5MBE@HQ"0eUB}`gtuq|iE\Ol\K>=E-qi`5T2cjjEy[}Y_o|npqyzcs[;>@e>laZfjXu}|~UWqyuYrA@@BA@@AA@ACBAABBABABAABAABA BAAABBBAAABAABCBBBACBCBCBCBCCCBCBCCCBCBABBBCBA@ABABA@A@@@?@@A@ +?@@??@@??@?@?@?@?>?>>?>?@?>??>>?@???@@?@@@?@A@A@A@AAAB ABABBBCBBCBCBCCEDEEEFEF EFFEFFGGGFFFG HGHHHGGHIHIIHHHIIJIIIJJJIIJJKJKJKLKLLKJLKKLLLMLMLMNNMNNONOPOPQRQRRRQRSRSTS TSTSTTTUVUTTTUVUUZd`ZHG66:2?B:1)(2C?8-:OFHKMKC>@?>y|}{LMMONOKKPPVYVYZXYeXd|uufyyaaKB@?ABan|UUWkgd\YP5'5YH96662104>y{G`I,(*.48;?*);3;IGC<<9<45759;754134345776667655888D;79878JWLhoQ>P>B;Gm:CD@?<:=99?A?ACDFGBEDDCA<8686/0/16>?B89HIJIA731.*'-/3/(LAK-5;;9997>=2+--,,,++.-SQTSWWURS+*QONSRU01131095*04--29<7:=<::951-*3-+K<2M@@#"F@?B@G?DNK'.IIHLE>I<<86<>2=B/I@27+0:210,!**;6&)1C>&"+6B03B-/@IRA.<0,'#'9)F&@B=853)(#,-**/.('-1/-.0..&&030./)')'%#',,,+-*'4.#%$% /#*#+(**!# 4,# '%)02,#D@=K;?od>THZNr{Yi_c7\7HN&EQJ2GclxNbrwKH>cS\JWe_j`/F2/:<+>RAmv}L;GH*/=/96<897-<1<91.XXUNSCKQSPMFPKJRMRMJONLF?ALJMLIEJQD=0MO/8,457<-4-L4NR51.901XM[cccNBAGIOYTD@45?GJLW;-?A<79:5594,NRFA5>8TY`a^42`MNR9\-+SJ/^+,D4NJZ23K7?<-:2-0.0382T1134631/\-110.PL-,:;9=A>A@A?@??=:>?@F@;;=<<<89:8:7:>=<;==<6864313/.54.014.06=63%C9)792/QCN.035PQ0MBOVZU0/4.6361E=2ORbO?DGKmP;<:86lkkfb_^/)2:;>:?PGLQN;BQHC;R\4LUPP6J:E?EPLHRBDAEFLN:FHLLIMMLJGEP2%,:74/Q]UE7>%SL@ENUa342SS`\UY[D`>AD4RFLMKZbvzxMOVOGH>`pHHJsGIEd4afBMA\Y]W[pIHT_m]_UR>NC<6MSU@61)[d\37<48>786@GЧb3N5 rP֜ˢ\iBvT82LL%B!B )# Oȕ򋅒`.:$    '(>(331,,8yBo*57@#BLA#'(5˵zb&+"#&!**3@ùҀǀ5B>(@@!)(I, '8gᑔv]pZEA0/1)7;3&'#!-JHLLKMFCB?A]aeeefabhjoqpqrnludxԙ¼vc_H>=:=A`t[XUdsdWRE,#2cN4))++))/9vw5-")*,+&3;6:788<966'$$"#$"!! !#$##%%%##$&&&((%/)'&##$5:@YeD19tw8;38hO6876>yIXhy42772.dy}vvtqjkjdda_Y_[]`[Y^Oxzv~~yzr{rilq~}vuriumovlgbiec_[YYarpua[UIJG@BE\M=?<=>CIHEJKEMC<8mcjpilooqvvxv??A<:?954./0--.02dfgcmir:8=;>=@=961.+*(*-,+/147978612/.+(" &)-')3123/*'&%"" $ 4/7#%%(%((+)&&#%" ! &# !"##CJJJMMJCA<>AIIG$! #  #%$$%#"!! #.'1%%'##%#(%*21--*21*6'&##'$#%*'"49#-*+!82!!4,(#"3#(2'"!  "# ' % #")/"! (#    +   +  + +  + + + + + + + +   + +  + "   +*)$# # + +  + !("0   +  +     &"0'"!,(%#%(   ("!" "#$ !'&%!'"&(&# &#"&#(%#%%" $### $#$#$%-&-324)!!$'+3,%!!"!%$) .37:64,,11)"."$#.!'+$  + !!"$&($')3'"#$(A4.5411ffh`^WV)()1341,/'(+*&-"#('+'(&"!*)$(!&.4147)4358:<<943,4 ##*%"%986=@HP,,)741///0)B(+3,0 *IESlzKLRMEFS>i|HDDZU())@#AH2?4MQUQRg?DQYhV]ZY@K852HNN:( 34-##$%&$-B><701$<>;3+"%?~~ ~}|}~ ~~~~~|zz}{|z||{}}~~|{z{z{{||~}}~}~}}|}{}~~}| }}~~~~}}}}~}|}~|}~}}~~~~~}~}~~}~}~|{~~}|{{{}{{{|}{|{{|}||{{}|}~~~}}|}}||}|}||{{{|}}}~} ~}}}~~}||~ }~}}~~~}{}||}~~}|{{{|||{|} +~~~~~~}||~}}~~~~~}|ׁ}|{|}|}||{{{|}|}|}|}~~}}}~}|~}}}~~}~~~}~т~~}~}~}~}~}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|}}|}}|}|}|}}|}|||{|}|}|}|}}}||}|{|{{|||{|{|{z {zzyyzz{z{{{z{|{z{z{|{z{|}~~~~~~~Á~}|}~~}~}}}~~~}}|}|||}}}| ~}}~}}|{|}|}~~~}|}|}~ ؋ڨυֳƒ҉򃚘ⴺꂘիѧ텚úƼ愕ɱȖd̯ǦϾ3   %' !%%" !!%0=A@>9544554533555686B:/K:=2'+07106?FGIJF=:%9+11/4;:o:XsX<[KN@@l~Ӑ{qp̩ȕ\[QWc 8-J201]?D_LESUY^bfihecdfgf_ZSNLIC:63134100../002210.-,)&#"!!##D$!&('!|VR2#!;42.+,("<.oݬE?:)+510)-* /"'6]eh_VwZY\FwΪˍ{(k񥅦qeւC'#! 1#";tҠP9ǟ裚߀˸Ŏ𺟨E2&0k@ڔ񓃏ϳ֠限٬ʇڵi<źϕ<4)1Kߪ3ڐ5# .`϶׫΁ˣ킊_Fqv=$&  +      !  !! ! !!!"!!!"!!""!"""!""#"!!"%=£ϡ􈄆Ѷ‹쎣޶ɟměťĺ̿Ȅ˿ȰڜZ55645556466566 #'(#! &65665484348?   !"!! ! ! !""$'))('$$#"""!""#$#"##"#$##$##$%%&&%$%$%%%&&')**''&&%&%&&''&(('&'''&&'%&[йcqzyåйŽźѻϽǷ̲жս焐ƥԽѾޅüÿၒ逆°Ǯ쉕ѶĿȨò󽛕򽧡θ°Ɇøˀ덇ъˑĻ܂بĸæˀ˴ኌی쾼ٱϰޕͪ͐˵犙ŭ寸؈扌쒴厍׌ƃ녲枊ݹѾ좟ɬž󦔡ۀÿǣ߇ܪûݴѸӮðɆٴ̑㪞򄐚넍܄ĀՋˠ٬ؘɩóԪ߼մٵݸҞЯ퐶͍́ӜԚ쌠SЫʀͨ⅑숅Ü砧䘧ǹ䔝C]a6\aF/V7CI2ILY3310/317N^QTEE?AAU`6>>6+-+H`bIA-R@LLONLKd486MAAXX1:8;4[H^]JX[_4;M`f73`Tp`=j`6=N[sqjjL@QV\YOOGJSL=B>O*%/[=lSJcіij_^uVNI;nG{n;`D8=|RMJ9=M@H,R*U_FDatUPp5/C%1;*!2KJ@3C+FH[9K95Wf4>GeQoJSAHft\VxJcc|SnS;?BBNYqovgg3Ff/N69i]`jYMYxkh-]Y^yZGJ?@?@?@@A@@A@@@A@@@AA@AA@ABABCBBCBCBCCDDCD CDDEDEDEDEFEEEFFGFFFGFGGFFFGHGGHIHHIKJJKJJKLJKKKLLLKKKLLMLMKMLLMLNMNNMNMNMN OONNPPOOOPOPOPQPQPQQRQRSSSRSRSTUTTUUVUTUUVUUVUVVUVUVV[\k`XJF:502C@:0((4?:1L1LCDFJHCAA~}{}|{}MHLMNMNMQRTU]XYh[dgt{cVLD>?AnZ~\TZogicaf?+zMD|;5787413@=>GGCCwpqj|ogy~pDCIJJJFDE@<;=<;=>>@CCBDED@<;;90/029?==54>FHGB;:63/-00/+(%@8E*05;;@CDDCBDAA<740:BA;:9953,*./+SUUUSSQ)*)(JHLRNO)'+12521?3359515UA99453)1&03JO<7G@B()('$ &'97FJ+J)GGG57:57:>CB(%95'A8FE N:Q2%%&)%HA,)+%!/,*+/$*:6356/+>5/+++-0*$)0$ 1'+A882<%)/)C'&@E6H>>0?@CFD<)2*#&!'14236HLC&#)1&)'**.3,..+)/42.+,%%'&'(,+'(* *!)!(.(!&!'"6(5415!$)2,%$0683(2YDIDn`jQf{OTzj]gPfebARC_Q#7>lqfi^dnyo{fEUgYGqSe_TYO13,,2EAI;flRr|gCa`Qh?JdcOoVRC_^fGNHLXkK|P]E*+5:2abb4V,]86.01.-LY0-0,UXI)>TLW121472110D(1-(R28;.36-034ID03/M>;29>5+TTEB150QANKFM,0.9717;?=843621/12/030//Y[Y1376307:6;:99?;705837@=??:;;;<;:788<=;;;=;<=<9896421,+071+005212-E+/-NTO-.0.-A)'41-L??JGKRVU-.1/1033811VHHKO\DoX\E2%"#'*+*)((/5Q.42-/7CGIBH@V?51J^YR^MK.5:19T>2;YCGY>EHJG:IJMMLNMKGEHK2$9/:9&FVI6C1KL+>> W5<5<@Y;GYgV;iqE6:DH:J?Ei|yTFO=KGIcQhBKF>?jY4gPGaAySZg`lLGP^:?ggU[xDL:DEHAO?0`cb[` `4EOF8R6E@>^b`_>B:ONON`gl=O93YAB28<'8;-&G"""!%$.&*!# ), -,!4&+)(('%2' )(1&47(100%031,BB1l^-/@Kdhc^:)@LYP=6/4@8*,*;!S41=@PP@NL>-(&1?EQ?4;NRYH]ie\YhaBBEL_ebIPTeX9OM>=Nddc\`ZXV8?GMN:Eeisn`G\cwfeY[`^^DDGCSERMOS\a%) ݞ󢟡zڕ܄zbŵ􋛛ɮ̠Λ믳ܮɬ[1@&1:$,#",<{ݡ罹ʗױlj^ 'OSHâ󸖰٢X|XK/,$7-vA2 2|%  %;*/Φ0 +  +9E )/!Du33&%-)z0N&6#.nBJ>Q=9'H(%J?Tᘚ8-%(d^]*2+%05$T8?03F$?񳠺ᓔ7 !& :3'"&#5)EDIIKJGFEa`deeadeliffh`aqcz忴ëՊxbRJ@::=n^aWVhwo_]Y3%EK7,*..++/;<:9&%,('--/185786;653$$&#%%"!!"#$##"#$$#"$%%&('%&'&'$&$A-V/(&$',$!#"$)*) $   "%&&*$$&*0#<-.%!%('('(%+# #"#&''#'#- "())0('*+"0,1123+638;:<964213'($':!2&H-2*03;$(071#DK92(#&DG;Fs`FM=HCGgYpBKC2Q'A9"D:7T7aJT]UcDFLZ8;flZb}EC.;>B<:L/11-10#!*+&(@>:5!!+-/0:FPLAHdM#1T2,/34XWM4HxOrHwYyEE}hݔ\kk^bir_wr^x%35=VrFUBqyMX^cggikggijjihc[UTPPMA:979:84431$2221/.*%" $*/4JSI7367/""sZ)5 0)GsyEErBʌȴӱ՚苦o+++&9L+&/"#)...=RDQYI}?vvi5 QU25N۽jB(#""!#-UqǴp7RYۊ޿P5AƉƵ΢Ĝݍ⋆㞖ꤊO衡𔗎ȀrL5*F牍ëS*'>ƕֆވ1/"E3@:    ! ! !   !! ! ! !!"  ! !"!"!!"""#"##"!"#"##"#Yذ傃쇕ɬ酙˨cȪȮüºĿĹǾʢ¼ˣW4545446645672*BX`M3G !"!" !! !""!!"$&()(&%$$##"#$6%$#$#$##"$###$#$$#$##$%$$%&&'&%$$$%%$#$%'')*)('''&&'''('&&&'''&%%cȲƬܽ˽Ľʹ솃ᴠ偣ѳͽߘ磣ʹƻǸϻ態왾լա󑨳ȱɣ㴛Ʈϩʉ䍋缷ꟸDŽ߳ļ«ůĒ؈䚟铈Ǩ´޵֖桖֌ꐌ򄵇Ӏ򈉎甅醈钐վ斡¶А̩膊οůιε΁¦򀀃݋Ή׋ڷ⑄ıűՁΌɳҠƫءջ΃䆹ݼхɄڎǔ:ƒúݝ댾ʶ뀊۽;OfKQWV]St_6/IVS463//0/3Q\PUOIC>6KWa8=983/0895VJ+YGMNQNDAba=\E;L1ae0MWh8_bgNQZd9?;Rf2ie^:O?_OJQHd<;s_DAjxa[RFHORFD:?'!%1WC/RW^GGwJG>0/2:CLG77DGJJP]UUZrjQFOQbee[SPagD]VYSZkjpd]PZZ?AKSUDC[\dnb@XRzabPW[K\fMNGVPFNLKSPT9QNNOOOPOPOOPOOOPPQPPPOQPPPQPQPQPQPPQPRQPRQRQRQ RRQQRSRRRSSR +SRSSRSTSTRSTRSRRS +RRSTSSRSTRS RRSSSTTRRTSSSTSTTTSRS?TSSTSSTSSRSSSTSSSTSSSRSRSRSSSTSSRSSSTSSSTUXZVRTSRTTTRRTSSTVTSRSRSTXYWWVVUSRPPONPOONNPQUHVVILVRSWYZZ\`chpfT^kT}\VUVRokymX`{eoLMtpԾ[ϗmxuS\$dYv^_glpqrrtqostvrrolggfff^XWUVVURRSRQPRST RQPQQPPOPQQPQTU\ydpZY[]XRPPOPPQQPOPQPORw]qg9/>ONOPOPF[_PvRo]^[cl[px\vTLDlAv^=yQeEORdSfzCQeGKJLOK9`Ls|ajy{xcǞɈ|kYQb<4=Sk_w[@F0=d`nMIHEEEGL[Skvl\g5*>Fe\HHEī@TSb;D@<<&FOQHHk]uP9B?1*' 49tLt_tkrAQ?VaF3A[,,BR!MdD;a[eojYz2dor{a1C@@BbmpKNyOtʋim¶vNb5V6Ks?@BBAABCAACBCBBBCCBBC BCBBBCCCDCBCDCDCCDCDCDCCDDCCDCDCDCDDC +BDDCBCBCCCBCBCCBBAB ABABBAABBABA@@AA@?A@?AA@?@??A@??A@?@?@@A@@AAA@ABBABCBABCCBCDDCCCDDECDDDEDECDEDEEEFEFEEFFEFGGFFGHGHGGHHIIGIHHIJI JIIIJKJJJK JJKKJJKKLKLKKLLKLLMMLMMLMLMNOMOMNO NONPNOOPOOPOQP RQRQQQSQQRSRSRSTTSTUSSTUTUTUTUVVVWUUVWVXWWVWVVWW[sl_VGB71//A?81''-5504*TLAAGFC~{{|z}IIJLMJILSSXf5959:[Dzu|wlk}~eRBFkR|cRZ\ciVT[N339|7y903483/8@=?G5)'*577992$71:;D===<>;5IM<=?@<355444675468::7887;446E@:==>?A>=@>BCBBB@?<95.2;=>>97407BHFA;7981/166.+%N7>FO,237<>BCDDBA>973A??;768:72.-,-XXUTUTR*('#EFLU),/15B3,2.<4-/2+(*0,1/0-+++LIMA<8F&-G>#"$,&2?=G(520%IKDH>88>82)"5E""?7&%($%%A=.'),&.)'/,'(68./'251@?3E=WA5UZNSC=;WQ1/06742.CH2O\4T++5+N.,<10'*X1,,D3;8M,UW=IBE=B_>/:4112WN50.L+PK=30203R36:99:8=:41]VVW.XIEGEJIMPPOOPJJNKGIFCACCGGDE=95<;507;10953;;62.3^QGJ%XH1@YYJ:>KcTZ_a[PX\^589G@872e[G]`7Mn4+P]"O-5T8..:66=:d%G!%>72) -,5=<841462544310341/XYPVW\WW-,25321*-13/,))685<,?--3=<;;=9<;<<9;:;=::9:7662399A<6;81-,-M11.,PHNO-1/*:,:1*RN1CRMIRIQ.X]32015`_RD50G@68[X^UL5C/b4K9U46??4;:732_ZZ[8OMDBT0;I]_eYQEST;;FMO=<\dm{iEb`oq[acQ`gNPHZSKROQ[b ¿ÿ뙝ψYúƠtvΔyy̘ύ⯇ՙú摆xqGG2.4'( 7-3Πז枫ဧ쏴xċ|׺DPM%tJ eV&%_CŢnF), +(10'("j.*)wBA婤^     @A8""F%DX))F33 .+>IW5'0&7~ Sh) +"2(=KLÙ"Q'4/%[ق;!B(3$3+6__Eiv  rՈiTB91)'&::1(!$$ &FF=BIKJ]`cfeZUX_`ak55267^؈y{cL?D:@7664;EMnijigc`_cf4=;=731244/-2^cei=upxw~x<:::9660/,.'$()-/1..11431/.*)#"&*+)''$',-,*&$&&#$'('! A.38=! #&(+*)*()%#" )&&"!#IKLNOLF 247> ! "+ &"!  /,/#% *(  '&/%# ).$&%$1)%1*39#4LB%1!-1%"%#!1,()/%#*&($!  %,5 .$ )"! !      +  + +  + + + +  + +  +    2((** !    '!'   +!"1#     +  *%0252"?)-'(* +1"%"V $!-&$* %("!,'!"$!$+((''! #"$&'$$%" "   0)$!("+-&%2*,010+/30$!##"#  10%55,D*3,*1$ #*+$((*(' ""%#!%!$()+-("%"!)$/8H:'/" %0441/*# 1,,*)"-#"/"!!* 0)0204126669?9520-/*)!#*(;(12=20+0JS+!0((N%'.)3ABD[@K\rENFP?JAk`pHB;:@>'%!7.C;4RCXX\;:33-) +4*0=#,:C ~~~}~~}~}~}}~}|}~|2}~}}}~|~~z{}|zz||z{{|}{||{{z{~}{z{}}|z}}{z~}~~|}~}||{{||{|{{||{{{|}}|}|} +~~|~~}}}|~}}}~}}~~|~}~~}~~}}}}~~}~~}|} }{|{{{|}~}{ ||}{{||z{||}|}~|} ||{|||{~~~}~}~}|}}}||}~}|}}|||~|{}}~ }|||}{||}|||}~}}}~~}|||}||~}~ ~~~|}|}~~~}~~~}~؁~}|{|{|}|{|}|}|}~~~}~}~~}}}~}~~}~}~~~}~~~}~}~}~}|}|}|}|}|}|}|}|}}||}|}|}|}|{|}||}|}|}}||}|}|||}}}|}||}}|}|{|{{{zzz{z{|{z{{{zz{z{|zyyz{|{|{|{||{ ||{{|||}~ ~~~~~~~~~~}~}~~}}}~~~}}}}}|||{{||}|||}}}~~~~~}}~}|}|}|}~~ 񄿊Ο٤ґɲڽ׉𑚇ፈ܂ݵߡԗ슙۫뎐͖bƺл׫ǽ󎖳& "'+(!"')(+.-,,,/232223324>/Z41/-,&$'+/5877@sAA[KS`Z7@954/.'De<]=YYlkzoxgd~`8C5Jzu6AYQLGTmu~NW`dfegifijmmjhd^XUSRRIA=;:;:778765455220.,'" ! #,3677_JV>8:9+Gi."!)5=KTܐĿ<'!"J*0'*/-!`oϯD#beXE\lۊՉ̭EMZE47`/LCΌ噋P'&('&&%AN8,{XV)&6}܈\ꫭ󜸰ϙڞ٥ʱȹˀ̵Խޛ辒諭֑΅.Pc02ك'71-*nz֖̐Չo4E8!          ! !!"! !"!"#"#"##$#$#"%M򔓏懍Ч틀ぅ؆خ𸍳͸gөцꞬ぀Ŀ»ź̸ҫ鞲ٽV466566565576 41*!2pzǺR=  !!"! ! ""!""!""#&))('%$%#"##$###$##$##%&&'&% $%$$$%&())('& ''(()((('&&'%$1˷̶鹵ºӱ섐ԭҾ淮 »艚󇐖􍏅Ƞëݷƿ򅑕߻ͻճ#t܀仾¿큝̀ÖӛƖ񈇝IJ않΀ǭյυފ㉤؀݊ȱâϮنŀƻĠƏɹڀΗשɓԲ̟沫ޅӶƞ癳үªȺ۞֏ʿּܺϧŀ❹ؿȔءǂ᳆պ聸󋙅늒т汊ڨݪ¸ɿ Կ􃂋؃Z6Y6r]MMJ[VP8320221ZBCLWKHB5;RZ7<=:3,JP3<4[S27KLNNMDGW26NACV[gbfP6U``f]BCR`7:2Wd5mveM7>:T[XXX99cH8`CNS(*.VK?S]]E`NFJ@-*1@FJPS;GHPG]WWZpjaQRM^g`YRSUmFSX`YWgpvmji[YG@HPTF>PaVjkEuLZ{rbTOZYSiLSKTYGPOU[UJKONOOOPQOPQQPQPPQPQRQQQRQPQQRQRSRSQRQRSRRQSRSSSRRSRSRRRSRRSRSRSRRRSSRTSRRSTSTSSRSTSTTSSSTSTSTSSTST UTTTUTTUSTSTUT SSTSSTSTTSTTTSTSTSTSTTSTTTSSTSTTTSSSTUTTTWZ\[WTUSTSTSSSTTSTTTSRSRSSTUUXVTUUTTUSRQPPPOPPOQWMUTSRUUSVY[_a_]eQZmbSJp_[WVIe[cvu}V^vxkxNuiosuԌrpP\~_Tzskubhmppoqsprtvwrrpmjfefga\YVVWURRSVUTTUUUVVVUSQRQQQRUVYY\YwYY\[VQPPQPPQPQOQPTomt<APQPOPPQTZPn]gY^bdé_nhnn\rXSdOPI@MQuo^\T[AHLMNN\2KLBuIiqYEffl{Yxj_inypu=KoJRCv_vPAA;[dV~KJJG|oJEgzZHE{kl7+jR@ERSBpUU1K16J3.A-BMPKDK{mAUO5:<"2,&77<0.*,6VW{=-!B5IEM29?hhCEL@sex|@,.dYIEgmvkAAaADrA08>]R{So_@q7qda[MQ\Y{dnYrAHzXvqzcK`PmgaѺl~Ûj9t=S@BCBBCCBCBCBBCCBBCDCDCDCDDCDDC DDCCDDDCCDCDCDDEEDCDDDCDCD EDDDCDDCDCCDCBCBBBCBABBABABABA@AA@@AA@AA@A@@@A@A@A@@A@A@@@AA@ABABAABAABBBCBBCBCBBBC DDCCDCDDEEEDEFEFEEFFEFGFGFHHGHHGGHHHIHHGHIIIHJIIIJIJIIIJKKJJKLLKLKLMMMLLNMNNNMNMN OOOPOPOOOPPOPOPQPQRRQQQR SSSRSSSTTTUUTUUUTUVVUVUVVWVWWWVWWWXXXZRobUF?20VSA@72IJ-,-/0.,+.LDDBzx{{{|OHKKIIJINV^624979?Qȷ^bxht{aPvD~AmQktTX_`ae[JCPA3=qxf;22134a9A@?A:*(+2577??!NY:89<=<<87:854XXC~yBDFZWED:9DY:EDu`\bRr~yxz{{|}}???@@AA@ABBAAABABABABC|WfWdDEFFEEFFFHHFFGGGHIIIJJKJKJKLKLLLMMMORSTSQOOMNNONNMONNNOPPPO%POPPOPOOPOPQPQOOOPQRQQRQRQRPQQQRSTSSSRQRQRQRQQVYqqQ~{x}qnvovv|sljog_^`_]]\ZNU}z{}y{vqoozolkiik`be`fgc[X]VRPOS\XSRTQU^aRMUQIKCDPOTJAHB~{~{vyzz}ACRSGKMPMJGEECGCAE;<;==<:;=?<><>@?=<:7;?@>=:75312=DFA;>:86659<9:,L@:EG))*/389<<@BC@>=;74445457:7321/,+WVUSO'))(')+./0239?4586<5))223(4-LJ+-264&HG?;;8-2#@(*$,+I:?CJI%&@-'>LL.=>?B?:8,'+45+5J4/*-95)/NG@=T?/?5666*"A@@;:$+**'$$)C><+#($,& &$,21%")8E.*>-(611.>.9121,/2$('+:",/#A;=I'E7C2:(/IM--2;&-,0**=2&?? #!$* %&&&*-/(.22-/'%&((('$$&**&(%$#'.2""!"$$  ""# !$'(!#"(.**&)0'*3..1$+AL.1Z./8BE/95+81:/-R,=541T.RD9BFG4G=+692011,Q2/G&\/S73.2<6248:<;87;6.-41TX.-EHKJOHQTIMKFEKNGA@EBFGIJE@@>=RMA?AFEB=@9<@D@5:5cV@[=A>4M=@i\&D";53+6=:8938E%/++;9"$B%3<;76240-;84067565^KU-0460^[0432/-/023\[WZ02170.-U/.-*0;:<:<98:<;::7655659:50542--2-330,*,),.+DFP(/,PIED25)'A;-9J=4<896');0&(3553#!"&=N?ZBRhdUS[\^\Z\\ZXWUTX]]c[XRXG^d>[VWMB419FFGLMHJH<(3=IHAHHHJKKFC?=;2'@19B1/A8EF%,M4M-)/=[A;6500[T_9VOI>]?;EXche5d`^YPA!5y;57_T9<+:'062';G:(8HZEPEH<( (9DIQJ6FKVMd^\XliaQNGWb]XMPRi?JPQEFZdja_`URA7BJN>6Mg`sqItTht`Xd`XmOVNW^ITTZhj%ÿ¿ڎ岉–䍤΍zs򞃢‹ڶǚĒfmlxvgƸN$3 I?{ڏ͂oڦ䉣աnEܡUjK9@$iēFfᜊv7 "2CPۋۅA5 :4o"#NB0zM  +[2/EF(%   + + 7O%  !  bu/0'/.O?"$527-" pK=:F&=9жy$('Neԅt-.AJ,?-0@PIՇ炿M~jS@9,*HC:;1(8<# !  "AAEFb]bb]YTNRX`6102038../17gH183sN[RGfłýӥQ|}|{xonwykjskkfja\Za_YZ[YWYTQDvL~}ynppqmju~omigdocbb`]`WXYQQQNJNTPLHGFLGCBCBEHLDCJB8934?;<4084mpsrnfhbba21==7<@A>;645351/30`beCpq}}xto997776642)&&')))'*+..0.-.,*% "()(*)'(&&%*))'$'%$#&'*+*+#A:6<: !#&%'&***'''%"   "HKLKB!!!$)!!%"&! % 53 %%+*#!"#2%+.00&$-1+,+-+'#$#!4#&#5/*'9)%!! %&$#% ! +"  %!-%$,.  +!%   +     +  + + + + + + + +   '' #.   +    %(%'%! %*  +  + + + + 0124 .)!y" *&*+%$$+'$% "#"!.%&'!#$$% &)"%#!!$$  ,"&(&#"#-,..131/*-*5; %#""! 2-"2!&","$;6( 5.%+-+))(*&!! #*#3$,41(*/-/3120+-.,,/102.-+.$.2 3.,% ""#&'"#%%,11.4447;832/-'!& !* "#<(1,94(,<7V+-*')&C*+/'AEG=HG`\uBKCtDC@smGNGEgLA8:$)BD-,QXTVT/GLFTGmG<<=<:99;:631.0)#  "$"#'05985F?+84480"3s;!")&!9P¼ȹꍌn6ZСо3,$&L%6#/"+&6,.|5IU<@cgᅙPЧԙ-S]@^RCdݺVY+,*(&"0%$7P5*% +ւcЕפꝔ볡ٵdzҝ䞮}N>(=pϽş\e(*2EH<٥ҏć zg8$     !  !!! !"! ""!"" !!""!!" ##""#"#""#"!!#$%%%#$#"&Jԏ˜냃إƝĦdţߪdžɹ潷ĺԻ⫯х߮[466556676&841,U5k虪O ! !!"#"##"!! !"""!!"#$%')*)&$##""#$%$ #%%$$#$%$$$#$%$%&%%%$%%$%&&)**)''(&&'&'('(((&'&'''&%@νҽƸ퉃ƽŀƹӻű²񆖼Ӽdzŷ轰IJӋҁķ퀁ŵÿ¿ҹꄟ닍ԣĽ쓃н»ˈɧ¯䄝ʺĴ۞žকǕ釈אáȫüԻǧýـ㗔߄ӈРۂ͸ח׼Θó馗ɞǼÿ瓙ıʜԗ¸ҿЀ쓔Ѽ⯴ŷ߂¸ǧɈ䑪󞩷áᴎU䢠ۣ떄ӴҺќǠզp1\Q:DMNOPOKMW_[DAFOPZ_3C^5>`qUBQKW7;8]bXSrgRT8YV2R_V4,F:R6gi\S>;CFG?JLMqa~aRxyRjc^{{nfmU]q@0mQ@m?oeY>.N=slhaNMMKKKIoNP\m@*a\VE878phz{T^O((6C5//OU$024.6If<5K368:CNdOM`Y3>M[TTG7)1ShzC&M?Sj@=-O^qN+mt@Po~JEziuP:PPr>zlsrVyyUeVxnoũrA?YBDCCBBC +DCCCDCCCDDCDCEDDEDCDDCCDEDCDEEDEDED EEDDDEECDEEEDEDEDDEEEDDEEDDEDDCCDEDECDCCDCDBBCBBBDBCBBBCCBBBABABA@AABAABA@AAA@@A@AA@AAA@A@ABBAAABABCB +CCCBBDCDDCDEFEDFDDEFFEFEFG +HGFFGFHGGGHIHHHI HIIJIJJKJKIJKKJKJKJK%LLKKKLLMMLMMMLLMMNNMNNNMMNNOOONONMNONO PPOPOOPOPPQPQP!QQQPRRQSRRRSQRRSSRRSRRSSTRSSTSSUUT UUTUVVVUVVTUUVWVVVWWWXWWXWXXXYXWWEqdTC>0.KIB>86EGIRU,+02.QRRGB|u~}{MIKLLLKMQSX3/1977?Nrb~ekt_Og}vUcmW[m[bb^_PNLG9>`uo321255:ABA@6()-2665CG&F\;47<@=>;3@(*'!##<87865668568765999667=?6:8<:4c{oaC@@?ACE=:\kg@HIX[Y\]Z~{xz{zz{|~~}>@@?@@BCBCBABBBAA@AABBA@A@A@A&BABABABBp_čwDDEEFGGFFGGGHIJKJK'LLMLMMMOPSTTQPNONOOONMMOONOPPPOOPOPPPQOPOOPOPPOPPQPQQQRQRQRQQTSSRRQRQRQRQRRRQTs|kp{PPz{ys{yvxqmkutlhiorkb]_WYY^\X\PNSdw{y}uoh +zxlfffacb_V[VZ]PTMYTY[^]ZQORJUNGHFBKRRVUXF|{|z|zutx=>OOIKNLLJGEGIJHHI=pqswmiiu||xz{=GIIHE@658:=?;47;<=<;=<;9:@@624>'262:,H<:>>"+0+'#')(#)*# !%" %/2%*#(+-'=**('9H-+6-59.,((()399;&9&2F+#%V:CE?9#1*.7OF,99#&9+2+$5,7'-"#!*'(*1*()))*%$$%'&'%'-."&)''.-(*!"$%"'$#!""" !"67++,( %7!,*C<7>*+>6;(+CBT}SHRRMwCNQMQU46ANVQ\i\cNJC^UQST_LGlaxPWdV_F[;2A'$I@H^Ps]CD-9>UYxlVNXLzpZ}bh|sLUA8X5<,&(5:#;[3=>8797\^^4V9J7\V\2]U342U.ID-ROXS,XK;8V8U5740.:SWC/W95-B+4*JF<2H&O*2=;20PVC:@:?@8M/S292/11020/6d0-H<3S5*I>78;>731/.T.:1S.-SB83:58>334;4<3V)LQ30@GYJ8R<5FJJQNJTLHGUR]THW88BR\I@GJLF567<:97453*983234535T;S,0894/S1442345450124E413173564ZEM[Y3288<7977:=<>:87769424955.+//1123/-/0UNT,QU,'.SS7/M;9)%$ +#  !$'''&$#" !"567>'9<:;9=:8CQ]?AD<=G?Q03=A1JDEHIFGECHB=:FQO!+85D0A=9F4%OLISFwn`FAYfBGD[_mbq0D_eWMkG9AdR?WVZK55BU<9:541\_WAVN=GBI@JU^hb184[\Qgioci46]iH/7.89-IO8/,*!*)&&'.$),,(&++)(&$&))& &)/1* 2>1$.)-01(*75,-!84&AM:9(<)SZSB)"*-/)&2\U;%R&-7cKRHHC>+&2EM66.>JYOY_XJ]b^i[NYea^ITM^J@WVJEW`hhag^]K4@JPJ!#<.BzmV +."ٮɬ6%*"&%#>hn+.+ElR>8*'AA<:1,9<<>@!" =CJEG[[\XUPMLORT0-,1.0;NvŹʒsxwZGc|~~z\cmSVqi|vmfUKB;/=d}q-*)-22479/(!"!,+!+-<>;.1 """!"""#"7$$%&&$%&"$#&&#UZ`Ud5.+)*,,,-KVQ8;7QLRFOTuɹᙧۆ3ǦQO|}}uy}qop|qlkglf[WY_eb]Z[RTTYVMPCDxK_y}uxzznqfnrvknpqjg`lzvh^]\ZXXVRNNJDQKQTJNHQINLKKHC>C>KD9884;CA<:?3afqproone`a.+::8:>===988:98560_adlggkuzrsm2568970'%#$&'$!$((+,,-,*&%&,.-,,-+'&'&$&*)&"#$%$+312/1-G@9;=BD>"!!"##&()())*'%##!!  #GKJD &+.1.34$"(*'!"%,5).)<#%-*2$!'!'&+)616>!9&()" $%("$&#  + '#(6#)!+.(& +  + +   + + +   + + + $    ,+#&(!$     +  + + .)&%%    + +    +  +) /42,(/*.,'%%"($'"'%$(+!!"'"('&3$ %'&! &'('("# !##!"#!#!$%(#' '$/ %&$()&,('(0/61)- %)!"#$"!*3/$>"//+=" "  +'(&, $+&% #!%$#   + + + + + ")%&#+27$/0),-0.232/023+)*%2!"($31287474283-)241 +!63<$25&:8J33/-.3;'-2DGRHboKDGLCBFCABLHO?dJ;*':F+14MS^Sd.G^fULhH9A^O=TOP;,.33/3, )&"(,59>?6262IHC9:1B~}} ~}~}}}~~}}}~}~}|}|}|}}~}{{{z|~~|{zyzz{{{||{}{|}||zz{{}~~}}}~||{|}}|||{|}}|~~}|}~~|.}}|}}~~~}{|}~}}}~~}}~~}~|} +}~~}~~~}~}~~~|{{||}{{|{{z{{|||} |}}}|{{{|}|}~}|}}||{ |~}{{|}~~}}}|{||}}|}~||}||}}}|}~~}}}~ {|}|{}~}||}~~~~ہ~}|}|}|{|} |}|}||{{{|}|}|}|}~}~}~~}~}~}~~}~~~~~}}~}~~}~}~}~}|}|}|}|}|}|}|}|}|}|}|}|}|}|}|{|}|}}}||}}}|}|}}|}}|}|}}||{{|}|}|{|{|{z{zz{{{z{|{|||{zzz{{z{|{|}}~ ~~~~~~~ ~~~}~~}|}|~~}|{|}|} ~~~~~~}|}}|}|~ ˇ´ɚ喠ֻȉަلƴᕣڃʿ߹Zڂŭ㔚o   + "!!    !##"%1523/A('KR8K=8882/*))(&&,;<2C03;@=9CKcof<*-/DH`\suK{`̑Ӈݝy綒t}@zs[XiUcJVNTRX\_`bcgmprnf`_]ZX2XWRMHC=:;5211*##"#")'%&+489634,S:3+//& 46!-.)Ab^aaueOikV4+DÁ@<#<$#uH;6:.e$$'0. +(>8tҌyaXFE\+0Ujaއ42(WVw5:4LMūzT+%$"8*1)Fb5%(-Аԫ:7-Qeġ–跒𢯮횀躵ӆܝ삔Џŋݨ傋ڭ뫏7'H-+I✮ږї>MaZˁֹ9  +     +     !  ! ! !""! !!""!"!""!"#"##"##""###"#"""###$#"$%$$$#$$&W˱Ժ놇˴󅇖Ȳ퀀Ѡܥވʸۯⲳቔ¼ǺƠѼУȽ߿\67676788656" %:&Hz`L    +!!"#"""!! !"""#!"$%'())'$##"""#$$$%$%$%$##$$##$$%#$#$#$%%&&%&&%%$%$%'''()*)'&('&&&'&'''&''&%D_ƬѾ񂖒̵ּǺնǿźƿ򜔀ᄁ󁆀㻳ҳȤ܀聀˅䌀ګܽ腏˴Ƴܟ֝΋؋߾ހĸ򯏹ٕγ⎀抦ҋݵΏ򢾓󃏔󀿗Εٚ޻杄Φ㺕;ﶓǿЧގɺʼª¶ƃޕՓۦЦŽᤓ󆎒ɵҿ诬撛ӆƿ性ޚ霄ƅρכɨӇ<󢬲Ʊޯ芐̂Ȝ烀貫ڀ8`-PGZTJ;euXB0@N2@B:88744/LQUUJF>^7OT9C?520.2279`[U=BF&%"*efVYgN/I^e\IEEFC;.1?GCI.;EP[NHYHM]\XX`\^aWOQQl[9^a\[ckpwffahYEEMVRLPc^ahWcLWkyzvb_dldWSSRO]PHOV9CPQPPQRRQRSR +SRQRRRSRSSRSSSTSTSTS TUTUTSSSTTUTSTUUT UUTUUTTUTUT VVTUVUTUTU TUUUVUUTVUVUVUUVUVUVVUVUVU%VVVUUUVUUVUVUUVUUUTUUVUVUUUVVUUVUVUUVUWVVVUWVUVVTUWU TTTUWWVUUTSTUV][SSOrJKvXv\VX[YYXWXVVWZc[Q~\^bd_^bgd?utg`Yfnn{diy^lqɊlfiކvx~żwg`niefikmoqty{{wplmlkiihdb_\XX[[Z*YYZZ[YXXXYTSTTRNUTTRTVX[ZYZM|TVUXYTSSRRRSSRSRVtak56SQRRT[mnpaG:ryn+# +9V^mdutuςaNRYdQiKHkXfQEPPVaL>ONPsFbVqr|ni^z]Tkpkmam|YH:1VM]DqIus}oj<)LTmg}tLKKM}31&/F",-0:8@$<72E(/N367]}mt7962S39<9xlNŢPWf8573L5UHC83:;95%,7?3wh~7;8E[GQcvBDof[=Mdb,QAi{evu}fbhXa_ZoybdaBCBCDCDCDDCDEDDDED EEDCDEDDDEDDEDEDEEFFEFEFEEFEEEFEEDDEFEEEDEDEDEEEDEDCDCCDCBCBCBABBABABAABABAAABAABAAB@AABABAAABBAAABAAABCBCCBBBC BBBCCBCCCDDCDEDEFGFFGHHGGHGHGGGHIHIIIJIIIJIIIJIJIJ'KJJJKJKKKLLKKLKKKLLMLLKLMLLNMNMMMLNNNMMNONNOONNOPPQPPQPOPPOPQQPQ +PQQRQQRQSRSRSSSRSTSSTSTTSTTUUTUTUUVUTVUUVWXW~XXWWWXXWXXYYZZsbTB:5YIC@@;9LEHJP-+-4.RMJXA}}~~}~JHJMLJHHLQ-324:9HP}tym2t8=;GAG@)(+187:>?=6:=3Zf>UB=BL=CGBnpnlhkgtz=zz|vtBBCFC>=99;<<8235;:::9555?EGIGFDA<856437@B>8884/7ANJED9_bJJQPMKPOPT,-169=>>?A?=;9852.043441010..--,,,))&*-*)((*+*(''&&)>963MJFPO+*('/)$"''*)%%""=>?H=FCO9.04OF:\H1)-5;43-1E/.(GF34*$.0D:K7:851+176;<0.)GB<;::< (&#",!"# #" %&"#$#+54068>54;<*0&/?HF;C0#-)$!%%())&(($')+&$&'"#%$).('()2(" "%#&$&!#"! "! #(/'(!%7144))B&*("/15 /4;/.(**3.NIA8A`RU^wyvnLaLlatXqoRUGR]MDUML]90;<=6<:5`a4`AOg2\\30\W44,-/U-,WMWVVX067053548/9@YRCS-@0I6K.6,;9G/411:69.+R,L<==T2.293124202H6d0TL=0$SBA>78:7.+.-,O167.ZRQ>-BVLTTPJNRMNMMEJINJHIIFD?:=:.855495895257754F2S../EI[Y8/;>E9ODCLMPUOSHI8KUd7CU1IGNCB?;8:@@813?0[VL5JHT*L=N3 ?0/+131J;86631341.411+553.WS/1342/11322.34353522213114122723SQQVV4.16557;<=?;35535561841,R-255576.-0SJKP*OLO+UF6=;2(%# !$#! !!"#$#""" !  !;%$BA:EM9$C#%&(5MoBDJS1>86`TQNMGHLKHEHBiPNOMJOSW503PGFEHJKJGCF@<97K(!(525==RAL!(8+)(5)7E04lQQHEJVQ 85APRFCMqtaIOKLMJLHIE@KKTUNDu?EfY<><= #?BFWFWURPKHDBEK*.,*+),?RΏub{˓vnxXBNo[c^\erxzoj^Z=;4?Tk*+,,593:4/((/-%./:Y/!/8=>{:17"#$"!"#$#"!! !!"$'&$!%%&$!#&kIX2;0*/5(+.,+Lk1:=%>Al/CJZ@ð㩅։,֝QPPzywtsx~rjjuzrh``\ZX]c^^YWTUSNQOKEAzx~{vspnllusonmltomifgj^]`Z]ZVVVUQGBPYWOTQNONOUNRVRFC>?BKC;=769C42790W_4:mmmhgh`]O..772488:><>?==;:92]]^``cboq:wx{{zoh522530.(&&%" %%')(&%%.4664312-(&('&&((%"$*07413)FL7103;-/67;80~~}~~~}~}}}~}~}|}|}|}}}|{|~}{zyyyz{z{~~}{|}{}{}~~~}}~~~|}}|||{|{|||}~~|}~| }}|}}~~}}}~}}~~}}~~}~}}~ +}~~~~~}~~~}|{|}|||}~~~}||}|{||}~}|}{ zz|}|{{{||}~}|{|}}}~} {{}~~~}~}{{z|}|{{|}}|}|}}}~}}}~~~߁~}|}|}|{|} |}|}}||{{|}|}|}|}|}}}~}~}~~}~}~}~}~~~}~}~~~}}}~}~}|}||}}|}|}|}|}|}|}|}|}}}||}|{|}|||}}|}|}|}|}|}|}|}|{|{zyz{zz{ zzz{{{zzz{{{z{|||{z {{zzz{zz{{zz{|{|}}~~ ~~~ }~~}}~~}~~}~}~~}~~||}}}|}~~}|{{{|}~~~~~~~}}}~|}|} ҒشĮţݮ頦ȩň̺ǵߕ򏒄⚥舃ٷ瀆g㥓ŷѨӿݐF  +#%# !  ""%.DF=;R0+,PM&568;;760230*&.1Q70**.47:D\Ug'=T]GOEo5l\qe汌mⓃꀑ̥ׄ^[egu-'qK^yxSVYY[\birria^\]ZVWYUPLGA<:?BBB?>(?;41/.+)+'%'*(''+144/+*%%GI'*,'" !!'M|6 39NHϟddrrKM.LOK^ZMTVMJI@(Jڤo5dJhVNqYhK/',,"/+!7;U6H"":;(j`޻異y@/)[G'!'Fh֯^&!;&.)IԲʭ󤴕ژݐف9 +  +      !  !" !!! ! ! ""!!"!"!!"###!"#$#""#$#$##$$#$$#$##$$#$##$$%^ƯɽҪ懓߷ڄ߄Ɛ¦ⶲƂv̽ڬݨЬԅȿǵժ򖝜τ۬06767767 67<7;&/6<ûPS  !  !"#"""!""!""#"!!"""#&()*)&$#"#"##"$$%%$$%$$#"$$#$+%$%%$###$$$%$$%&%%%&%$%%&&'((***('&&'&&'&(('&''&O©ǫ􁎖肘۾տ载ȶ恙莟µްľ間򖚅󃆎İ߾ؐݾ膃Ҹ؇샅꿰̶ނҽ₟̽թňϽ݇ȸε̾ߖ܋ׄÄ联܌ݨ˧Ө۳ٖЎƷ܆ю괐ӧ׳ӵåᮻ󛘗کރĸƿӼ󪞩ղݧ̳ٝ֝Π㌘ˁ̻ےゐ򏤩е󓋇뎚Ļýɸʔɹ𣛱ҶĊ莎慔퇡8쉤ĥ׫рWEL=MQZF25BMNMQEW<:864NNV\DD9^EU_C@6//++2037`aIBHMNOLSPNRTP@0]HVH88XIU1QdVVLOW88aW`_;=7FRQT[SFVXVG`[OlVYJaf=Xu`\eVZqghcd_PFGRMKK[[_bZ@ITepxbwgcewe\PUYXoYNTUX=NQQQRQSPSRRSSSRSSRSSRRRSTSTRS +TSSTTSTUUUSTTUTUTTUTUTUTTUTVTUVVUUUTUVUVVVUUUVWUUUTTUVUUVVUVWUVWVVVUVUVUVUVUVVWWVVXVUVVVUVWWWVWVWVWV WVUVVUUUWVUVUVUTVWXYXVUVUVUVTUVVVUUWVTVUUVUUVXWVVWUUSUTV\li^ZOROtjG^ZZ\_]]YY[XWU\OwXZWX\]]_eonj|}dw_aRsuwzȦtaKzni8Dy|}nxb_cfggimpt{{rmjljlhhhea`_\YY[\\][Y[Z[\ZWWWVUUWUNRVVTSTUWXUSSKU}}TUWUTSSSTVCNRRSTTSSSTTT\ygi9F]WY^n|Ȳ>:%=L^`hGq^efccc`UTaXN7y}s`VXVCJOP?kj4HicbjEHT_^^_Wb*kcCCt\|BHIIn^j9^vkn{PNRwXI22X8>=89d3q604--5:QXXxVfOGR<d;EJE;=9EDGTM@SM]]~~{|~}}~~@@@AAB CBBAAABBABAABA0@AABABABBBCCRky{нu]GEFFG HHGHHIJKKLLK LLLKLLKLMMLM PQRTTQONNNONONOOPQPQQPQPQQQPPQPPQPQQQPPQPRQRQRRRQQTTVTSSTRRRSRSRSSSRRSRQQS|~~{}wntqqyL~tlpkmxppy{|pfchigiqpihb[VZZY\`SWPMORK}||{yuvsqpvtpxkfhmqic_ekcocVSQpaonrmlh^UTSO]^RQQZbOMVSHPKGCICs}@um=K\zztqwy??BLG>CHJNIGLNPQOPO@;ujifhdp==<<>}tu??=@IA><9<;;821139866436BDGHKHGEC><;7502=C<.+..-/-7D99`[6aMSTSPTQSRUT+/2568<>=<;74/13254451../-,+)''')((&'(*'H%#&'*3@/-1-+OFEEPGD5'$.',+*(! !#+&$@F,)M76,T\4S*%'@)/7647,00<1&.()*?9:=5EB')=H2:LG(3=1;:O0$E9@2*:>)#674"'#  $+ !"$%)''&,*%&(#%&)*'('.4$$$%'&%')## "$###" 5 (9D1',' 4$,)451)--9-1!60$)36006AED|glLFUj?FC?G727:=B:92416:865981,T*/57CCKT\K=GFD7QTWTQR[JGTPBAH_[>ZWOGB4b0EBI:12577<66RT?X2>CM0+&80HM/!8TC9R^7M/+.&'*6!#B==86753331+E3--./30-T//085/-3W422.5432342.2231213139/MLQQQMO,2..59@A:12542634//.PHI+4612S97LQAGT+MJA9H83-//%##"%()(! !! 38?VM"!#%"! $32`ACVf11`]ROMHDEBEBBD@@A5V\R6Y.733?EEGGGIHHFA=?;7@R.&(%2>K6Z9=8AE,99/0@/0G?A9,V37FK08@8;E??c\VtiN}IFDDpFBD@FUPQSEO<<6^Yb85>\j;;6GRbcoCRROI\?CRUS@*6O74667==8;82A25ZVKV?Ua_ad`cc\HNXfn:8L4,)'458-",&*)%,&)$#*.#%/"(+ /1%%())(&+)''%$+%0$(#(6,0(,+-,2- 8)1%+Q).:G@PW=42$U##L.1bYEFBC::i^;5'8?<=@ >CEHSHRTKKHEB?=!#&+,,'%%>ԑwμjmwS@Joc^bYonnxyub]E=2E|7++-,no1/3/(#'1/(,)8a*$+oy}87E #$"!!"#!"""$&%""%$+) $'9HFC;1-,Q_(-1/-0v1>??Q?;DEU߅йꊌ(N{upxrrwsdirvwle_^\WYac^_ZTQSSSWZLMGFEE>y|~xpkqimjnqjhmmjikwgej^\^`e]XUXZRYNBABbVcafbc\SKJKKVVJFCJO@>FC8;775;6[b.VR,8Hggecelg421940356969@??A><<42bV[Z\Yd56789w}sr95/01..*(&%! !!#$"&15:9<8752-*)'&""%'$ #%&#(-%'>=&C:@EGGKIHDFE##$%&&()(&(''&#"! 3)"80-*4.+"#)1$$9@%:&80!""0&3**+-#$(''!$$5(##! +  "#$ $+"1**&!%           + $     '$ 2#  +   %# +  + +2+'#+!%$## (D    +  !.1&''0.,.'(%&'$#&&" #(#"$# ! *'"')!&$ ''*&'%'(&&#%! "%"    ' "'/(!&&%,---+-2('22)&)84)'#! 1 &)!.%,(" %%,%  &''((&$!!%!$#  + + +     +  !"##/)1"#).10)('&%#$%$$%#"#*-%)#2157764662..*'+5 + +"-%%((',"#2"#8-/'-!,/"(0+3;5='# ==A%*;V[53=F7QdcsETROIX>@PPL6#%/  +'$/-685542586*06<;)~~~}}~~}~}~~~}|}|}|}|}~}|~~~~|{{{zyz {||yzz||{zzz{z{{z||~~~|~}}|}|||{| }~}}~}~~|}~~~~|} }}~}~}|}@~~|}~~}}~~~~~~}||}}|}}~}|}}|}|}~}~}}}||}}||~}|}{|{ |||{{|||}}}~~}|}|{|}|{{z{{{}}~~~~}|{{{|}{|}}~}}}~ +}~~߁~}|}|}|{|} +||}|}|||{{|}|}|}|}||}}}|}~}|~~}~}~~}~~~}~}~}}}~~~}|}}|}||}||}}}|}|}|}||}|}|}|} ||}}|}}}||}|}|}}|||{|}|}|}|}| }}|}|||}}|}|}|}|}|{{|||{{{z{zz{ ||{{{zz{{z{z{z{z {zzz{{zz{{z{|}~ ~~~}~ }~~~~~}~}~~}|} ~~~}||}~}||{{||}|}~~~~~}}}~}|}|~ 䎗ӛƱ䉃Єۮ߅ХʽȖ悅ŧ⇏Xաµ¸öó8 +    &'" ! !! &+,8NTH721+&.(+.38>>=<9:;::1:QB>:.&)07>=UL]MZP9[LKP[čǟsųѻtr򟝯jKX`_N^vV[bjmf_ZZ\[WYYWTNIC=:>AB@@>??>=930.,.230*)*''(*,-,*(())/3('(&!!!!!)t~mj!6B0zh|CU,62#$+BKQZSLHHKMME2 Msh{zҀP9;0+-*2$)-4Ľ݈a2',$.(/@.5),><Ѧ%3!7'@܀쀔Ŋȴꞯ鋩Ƣۘǎ㌎ͷް9œ#4xᅲǔπހɐ๙KC!"+  + +D +     !! ! !""!"!! ! !!""!"!"##"!"!!#"""#"###$%$#$#$##$$%cαݩا¾ɽ΃ƿ\ܳȲ톽р۹㚠ܽ27677 + @566=<58854:H[]Ƴ}F#    """##"!"##"""#" +#$')))'$$$#"##$#$&%#"$ %%$%$$#$%$%%&&%%''%%%&&&())**)'&&''&&'&'&%&'LL«к󂈂Ͻ÷ÿƫ䂒ǿǻϞ􅇉û킍쁄ւ틕鏌֦灃ݿ恊ƿȀʿɵℒļŻݲõɼܞܾۀϭٞͮݭֹؠ︻݈͘ ܆ρ셈兀邒Ѹߴʢﹴ٘Ƌ睨̷¹ʾԺΥƾ̹ђɓɩԸ򵷫ͻԓ瑠܁Ȼӄ¹ҚŜ갦Ǹ؃þý򄥺̺ӵ݇žɊ҅艃ڳ;赱rFnBH8LRA:7Ab9<7LY6C:-0,3+PU[d_S?BKLPPNQQQRUDK2N=AT72`[SV`^SKQRd54POkA>899eSKHE6`L&&%)UfiWCNDJ${+Y^5/5`]D;GtS.7ES[HW^UIC>=Eu^{Ç|b~iTCFy~a_j_b\l`iZSVD<*?xvfw4342su;4BoP@(-.6/7@?@;2Dm=@5nx~{:FP.*,,,%#8;5655535643678::778@;FL8;=`vUe?C=GLJ?C7FCJTBTRfhf~~~}~~@@AAABABCBBCBCBAABA@BBBA.BBDI~tl~n{QEGH IIHIIKJKKLKLKLM NNOQSTSRPNOPOPPQQQPQ PQQPPQPQPQRQRSSRRRQQQRRQSQQRTUTSSRSRSRSRSRRQUb{{{xvsmwtpp{zLKqlnkkuxpsxzpgefgjllklha]Y][_\TSOOPNLNPR|vy}~tutv~rsroprlgfdficdgn]\[[i]pf}qtf\YXWOSN]bb[SYVLTaUY\TIqzvqo><;932652-,.,-000,('&''(())(%H%%&(*.8;851)I-1OLNOD!),$(%%$$&+F:@?27)W]KULSLID-57/,,6-IJACEJHD<+;:(&E=6.*+77-,;,*F.(F;<>638#$!#$!%$ #"#&,(*%$,?E:J+MA'(96K[REATB6,,/041@%".-34+80:#=<@CF++7)&<3=?&(14-(\6)%!#$"&!!40!!%')''&))'**'' 4#$%$$(/%%&%'%'('%!!#""##$#8#;E==3"% $'*#.%26/*26:3+0.0?()P,#F>GJdYpSa~lEcIKWGJbXHWG;;<=QTlbSdk]_xxgvW<HtwvggrssJeasv?C]Ra5/9B=,2/9K7?:<<># ?8/;9=499/5153DBW311.WR106-..L.,VVOQVNM/64247;664,KLGHJMCJT;D:J8564426.SMMNMVI@14?>:683+*05+S-6B]-UTNSQMDBLNLIKCCNOE:0:?49<=8:454-/2282?L@KG6B9B@BCHLPRQPSYSQLDNQU[8VNI(J?C.($.'<.G=5L=-I,,'&(/.:A?>::975863,S0341/5321033450353654.024231/301232341003;7/SKBNKGHGFC11:611601.4132),Q*S-42&3D?')-F+O6<6?/WA.,((**'%('%% !"#" 3,-+124215218 ""<=@?(]::3C?QNVXJ>;;jMKTZRg@IDrh40X-036;9EDBBDBBA>??;7;L?/5.9(7S@056>:5G-41*8JJ7Bhk;2` 5;=74JR6ZEtRlHvasH@JD@BIONVYWaPD<\]eFFRNi7:S1FMXglu@?@AUNTEEBT04Iqcc7:?@:3BBY\a^][\6FTa\[ahkaJIQ\p86S)C&*#01)%''4'."* #"/!%*!%).,( $)')'&)'('' ' '+(#&/1+',,/*+7 2,$%&'L+@RZO;?.)JL'$+/3PzU@ABCBB{ACFH5A>DLUYhcX@PYS[^Je\WLEPdRDmTOQFD_^cjeeH7=LIHHUaedfPI^u|xvuyebYcZ\koʼ½¿ DŽ!ĔΜ琠ؽ|{n¹p_gjַʔwґѫɚ𙄐ދ܃nVJ?.F@h։٤~qwӟ玹뉁Kf$F +(gǁ.#5.7#:9ƈmI􏇀^=; +    +   +  $&B%#'// "0.$1O$#!1 +! (- +8#F?[UɩU99Cv/""=! Ne:o|鄎6/LE~eK=2-M;BB;3('9:;?>==<=ALOZFRFMH! "#%*-*(%#:Ӗn똀lsO>D}b`g[cgǃv}hZR8/"@px-,./qq,'46)#$2,))%!9l/$)ny{66? $&"!!!#""" !#"#%%$"#($+- $'5fIR-.*-Q0(132-5l2??CN}AGJ\` G˰ğ̷~}ۄ8鑡{OJsqtpmu~wkintwmdb]XYZ\]_]WTSXU[XLJFFB??DEHzpmmpqkilngjkmsijhffe`_[Y[aXYX\MLJHUMbY{pagXNKHHAGFTXVPHMG?DNCHE=8]b_ZY0_2:82Xcgd_f5343:72223436:;?DFIC9mc\\ZYYZ132388uwwn731/-+(($#'+27:::9852/-+))'$$&!#GKMH#.$!28!6:AAENKLMJJL&#"##$%&&())(''%  1!'# !2 "4325)-$(&$;A193:2,(%&!-0)*,///% $ "#!** "!   $*-%.:4*'5& I#!%)+ "8          + $   + ! )8("&""  "  +  + + 1).-5+"""# $9B  +  + + -*("&%""'"#!  !% %)"% &&"&$!!! % &+''#%%# #$#!"%&   &!"&!$"%%')*+,,.30.,(0145*"" X(#$&!!!# %O+&&$ #$""    +    #.&$(+$!@.,451=&*(=6+.22323012//-*'(2& #&%" 2 %$)98(0=77(,,.>F2]MZrHygwIBIA?NBFKJQTQU=)#:=A*1NM^1H:ELWdmxCCACSKOBC@N(&/<44 !% (*.+++-,483269;8*-16A, ~~}~}~}}~~~}|}|} +|}}{z|{}{{z{{zz|~||}~|{{|z |||}|}{|}~|~~|~~}{||{{{||}}|}~}}~~}}~|~~}}~~}}}|||}|}}}~}}~~}.}~~~~~}~~~}|||}~~~|}|}}}|}~}~~~}}|{}}|{}~}}}|}|{|{{{}|||{|}|||{|}$|||}|||{{z{|{{z~}}~~~}~}}|{{||{|}~}~~ځ~}|}|{|}||}|}|{|}|}|}|}|}||}}}|}~}|~}~}~}~~}~~~~}~}}~~~}~}|}|}|}|}|}|}|}||}|}|}|}}|}|}|}||}}|}}|||{|}||}}|}|}|}|}|}|}|}|{z{z{|{z{z{{{z{z{z{{zzz{|}}~ +~~}~}}}~~}~~}~}~}|}~}|}~~} ||{||}|||} ~~~~~}}}~}|}|~ ފ㈵Ƕ؁Œǻ֮źߊ٨ƺмԏȋĊߖ݆˽rԾ޸* +   "! !! #/:9>MSI?>4'0&'+/18?A@?>?DCE@FEAB>2),2;A8NLJOF[D;DNPSMIyi̮pXW`|coxv{_پRXN`faktkc[`d_YWXZZXWWVROI@97=BB@?>>>;6310-,/3542*+'')+,+)('&&%2'%%$! ! *&"!! !$%$ 4EfbfRN_tN3/(%"! ")7>AHIMPVXM;'J9KۭۢܢĦa>N,#7)"6Ux01D3;.23E{ԦG2+ƴں夯º끠א񧀳չˠִĺľֹӲ٠Ǯ蕮ܬѠ^`ׁۗ$⬓܋܂l0<^$(=*&  + #      ! !"!! ! ! "!!"!!!""#"!!! """###"!##"#"#""##$$%#$$%$%%$#%%%9ȸ᳽įά雃ˣܕʮɩ϶ǿ󡜨XļրᷚɷΝνX47878998844320E7^ZZMA>iItǾC !"##"""!!"#$#"""##"#""$'())(%##"#$#"##$$#$% $&$%$$$%$%$$$%$$$%%$#$&%%%&'%$%&&&(*))*)('&&')'&%%Oʱҽ퉙ȵò怀Į井􋓔Û܀ߙػг˦󉁈ȿϹʉӧеޱւĻø½񴺞ɴ逯֢鉡릓ެѧ衧͵ȳ͚캪ހ򂋎柁겎񼄊ֈХƱʸ޻לǍȁשѺĴΰϰɾ˾ܥɧ󱇉ķ⪑έ¼鎕佸턅ķȽр֎𻻒ӧüƬ䘏ſף؉Α9ᔓƹۨ郓棱ӷB[Ga3GWII=Ef=D4S[8JFDA><;766QIC0`Sb_>JP<@3SR47H9?BX\P>DNROLFSOQW7XW]LW>;5_6?=Ri\OKMR67bQT8?;;6enX0+D8YE&'('3`p[NR_ZJ# #)RZa\VM*R[pCJFFEHqw?BDLJ?mBIENYWGKPRQ`R[TUGL]q]Z^i``[]wieliqh;<@*9!04)=&?A83'1T50aOkWD46C4*9Ar6?o;U66fDOZXFDTG4E_JNY[U7>QF@ZZD%:3JF=+=KniWlxNYMRML=>?CSw>GIRI;p9DDJ`BPU_r{@AAABCBBCCBAABA@BBCx]q~t`qnemzwiHGHHJHHIHIIJJKML MLMLMMNNNMOQSTTSPONONPNNOOPQQPQPQPQRSRRRQ +RRSRSRSTTTSRRRSRRSRRRSRRSy|giknyprnzIJrfginmw~hlswrlohfeqrdihgghca_\UROQNOPRRz|{zxwwwx{uqqnvqolnnqkdbcg``qf]`Y[ftcfm{|g[n]MSXWXKUP[RTUQMTPDCEQCstwDpjqB?<;><;::==<;:61..1.0/03::8=@BC@CBCBCFDDA?=8><964142221.1/-+(&%'))+,,*((+))*-344660RCO.Z<<@>@"$$6))->9:8E:TG2.)JOa_GHZ.124:6645IM,KG=6>ED,I'-;^04,-=>804J&/,%)%C;;66643  %!$!##*-()5(2546=2,;H8;A2+;6?+HA20I/" "! **"(&&#(('+)+(+0-"#&)(+,")&'*(++&($%# ! !!$8-A,+)*% #3OW(1G0-0DHA54;6Ce27<;&+94(1;;D438N:E96<8.QOR-TA=JV2M?;DH9973325UNCLRVRMB 'Z;:7766674DR0PG1XUSIRKGJ:ENLKJFFNJ?AE?<;FJDA;95;@B:=M?97974:4250=9>@?JJ=GMK=<;=>=76BF9?D$/85.>OA-4)70(',7<+0FSMF=Wg2@@&,6DNIVN\ROiFIGJVJ=EAKW]]XVa>:WcOO3Ka9g*?Oj^nvknNIYX_U>c886RYa\4;D@CFK@BELG=qHPMWa]IKQUXbPWPQCFUkXTV`POLKka_ggk\0?GLMIRPe_j\Y`iyu{k`l[ZbhvȀ୰Փqquщ똻tuطx܂ޞy҈|ځ}Ӣ仨񈲭՜㸍݇nڂÅˀ:I2Ff6:Vn`[=IƁʮ楄É󘟍򛏊Ea&'MYl$+ *:bצּf'   + + $!9:3_:#")@(L% .' $&!]#"@A^^M0&- $("A* ( !31iHP=|׋߷1NQ i ¿~eL91*O:CMG0+,85:@<=:;=RRqRNJIJ6U-#;(+('"'%" >АZٌvlQC?HveZleigɉx~lO+.>|g0,/0sq)#38+$)2)%##%2``]3UT^60\WYX]Z^6/343>64640/124;BIOONDupea]\a.42/16546;9641/,*(%"%%*179666533200,+*&#&%HHIHF# 0-4;@BKINLMNOPO%%!!""#$&&**'((&#!""!#!8.5='%)#"(#%$.':/"!45BA..< !&#  (,/)% &-+*<$# ,&" !   ! '$+"! *%& &!(',  + + +      # -6('*"+D&%(# ! !,+&!, + + !!&%   +  + #%   /F#! {   &4),',%(%((#!#$#'(#$##$% %"%"#&$!$&+!'&& %!"!%$#" $#  !("# !&$$"!"(((./23/1522%'!-7;#+!$#(!*$$' %8  '&$**(&% %"'#""     + + +   !1%5 <*B6J+*;>==,(--101/+,..,*&%+,%)#!%" ,0 #7D>8/01'"#.:8GC[WWkDHFJSF?BA8026DBGp~qí{L]U|кfj…@sWpQ>DebcQcoVYVVWUVWVURPOKF@937c|쁪̏曛K=Z!%/Z25+3!

    @@MQbVUWQZaNX\DV:EM0LAA?= 1-89@5>>78M>27BDTFYK@,8@METE=:4RQ/-4>AJ<<:9;;=@>BDA>96568<9;9><76677=@;:^6W7-W8eU>2/951SSUTR^B\K;N^?c[[ZbcZeRKQRKLFKZb7@IPSKMPPKLGJLE@?:bYVRMV7:942c3gaZ][]6::6642b2598989:<=<974e5654567g4?999:<<98985a46:8789>>8:;7575`][Z2333b\466249:8783556:;<;;:85;731344c45675edc68546567787687664eg4b_ZXVTOLNOK?cCd7___^_ZWW[bgb[SOdC=T^^_[c6lebcbZWWW\XSUQMOPPNORNMOMMPNQORQPQLEHLMPNRQQOQROULTX[\[Y\STOPQLHNKJNMRNKHINVOXWRPQIG:=>B@=@S<3>KLFEEADPTPWRK[,%+SEWPNRTRPPIEOLIHGLIA;:F;>H/,281ZYZWXVVWZ\/2677679649;:72ZRIDC@>?9AIEC=`\;=98N@E;22;;A@:MXI@?DH@5BXTQHGNSVYRSOXRMTDJ5>7A<3QKGEPSE=C8^6T?DDdJY4R]//5Gu6f\^4457T86444d[VSVTTTXVX_Z`ca]agb_ZTV[U[\XUW[^[UVXZZZ]`[c`a[ZVYX[]]^afid^[^Z[\_]_]]\^dhkllig631;83155843/0242210/000234422143001143./243/3/131134561/00---/.1620311345569SBW2sAC>4egjkoknqqmmsvzw}umbWEBfnSXXLKSQv]VsK]QY}om^d:9f]@|owAAFDCk:JYWTfbZGx~hmRbamhciei_[_hlwhXlpkdceacgb^aYSRDIGGMOHDHFB=td[USL3D46>8,-9EE:A39=>KF>tC@>5;EVUYRQUNHYMU]\Rkkirwsx}[jggoyylodUP[eYh]fwjvujmwwhe^dnqvkifkoljnxo^ͽzȿ񇄊{vzxox{skmorvtpotϬ|ty}~ʲηm|wsźýʑrZumef_SZY?T^l\GV76LGb854410d_NL#'$#$%)(''('('&$$%$&*$''&,/''(-,+& +  E9671-("/3-+#<7087:).#  '"!  " &#('(#&'&  #7UQ>@G><8/0;!*+!7$,!,'  DK8./*(F,N\NFV79'16-2$78*-0"2?+0145")D-#:3"#*0#:*%).-F=FE),QPIOKDLLKIOKYR5K3_ZxYUdLB9=`NEFKZTj=Y322h>}DHf>?BPLTbBY9,6/>[ACF_T=b%B1A&--1GMZJEF4:D1### ; %,1,#( (#  +  + WX&%71?C4%"2Lz_=S=CDA0,5+%-.&*6$3*%6A("% *'0 5(!09*''3#1&/7' % "2'"## + &69D2A:,!&0)80&'.B**/9)41?"  %  //#:#B8' #!@?@?=@*3%"+ 2,-.12,1($&(%%"$,/ %*+&')+''%&(#! -('%"(13.+,+,-/0-,,,*,),01002-,++)'&#%%$,-,,,+,+)))/20.+)5#)-+,*043254-+,*,*)*)''(''(+)&(&&&%&(')')))*(##%%(&((&&'(%)$)***,)*$&#%&$"$#"##'%#!"%+%**'&'"#&)))$*&(#$.,,!! !+""!"(#)'(&"!(## ! %('-*&0('$#&'%$%!%$! $"!!(((''&%'))%$ " /. "/ " #$%"!!$'(!"K#(! "!-**#"%')*'(&*'$("'$!%'!"/* $$;'4#8D& #(90*)S1-*(+)))+*+.+/1/,/421/**/,..++-./-)++,+,./,1//,,),+-.//0340.-/.//1130/.02544654~~~~}}~~}|}|}|||}~~ +~}~}}|{|{|{|{| }}~~~~}|}~~}}~}| }}}|}||{{|{|{{|{|{zz{|{{|~}}}}~~~~~}|~~}~}~ ~~~}~~~~~}}~||{zz{{{|}}}|{ |~~}|}}}|}|}|}}~~~~}||~~{ |{|{||~~~~~~}~~}~}~~~~~}|~~~~ ~|{zz{zz{zz{|{|{|{|{{{||{{{|||{{{|||{|}|{||{||{|{|{~}~}}~}}| +}}~~~| {{|||{||{||{|||{{{|{||{{|{|{|{|{|{|{zyz{zz{zz{z{z{zz{z{zzz{{zzz{z{{{z{{z{z{z{z{z{z{|}}|||}|}~}|}~~}~}~}~}~}~}~~~}~}|}|} ~}~~~~~~~~}~}~}~}~}~~~}}|}~}~}~}~}~}~}~}||}|}|}||}}}|}~~}}~}~}|}|}|}~}||}|}|}~}~~~}}|} ||{{}}}|||}}|} |{||}}}|}}}|}{|}}|}|}|}~~}~}}~}~~~}}~~}|}|}~}|{|{|}|}|{|}|{|} +~~~}~~~}~~݀ ~~}}}|}}π 鎏耂򆓢üм°˰ݽՍᖘͻϙØХЃڛЀȗŨރƎяǿ䣝惚ɯĿԷȼѼւͶέ煒ǵ÷⊇돚͜Ƨ̵ͨ岲՚切幂눀߄θ䲖Ëވ豲ظ󧝈ɧο꺑ɺʘ³䡳¿˥Ξ×笜ʽ܏ݺҜڂء۟Ǭ˅̝ȡɦɐٜň󸒭ÆÀ탷ݞ߁͋󉺬Ʈ蓨ʠ΀ɬ􃍂苒̎믳ĴΌ누݉ޑ߷굜⒪ꐊڔო醊򕱥浈ǻҿܚҧҹ؄ŷ筩Ĵݹsodl~qo߁ʷȬاㆪýٯƼ穅ܭ茖ý򇈯½ђΚޟۭҀ붎ʨɸŽƴЭٻ⋋ɮ܃ij㚁մӉܙ׳ՀĿ᠏ѹْ靂ĤпӠղķݱӒ噫媃Øǩɒӳᦁɸ凌溜󨒟싘ܟ܂ͭϱǜ盈śÉͩҀ䀟¿⧛ծӠ퓞婐یݒᆄ¾ݫؾۦєеᱞԙ冈˰˲Ьˣ߆ŀƱDz˵ɾթؕѮ舝񃊑񀃄ľӀžĸȹӾ̵˟ܮȽ˿Ƶï؉ƮijÇ툞𠈢ΉܰѾ¹ʺĀ׫ƺஃ݀筯݋ô¸ޭkkec8kgcbl8lj4egi9:;:8ieggdcbbaca_^^ccdeggjhggabadahgdhgffhh^\gjbec_WWgd`dcZ[_daXVVe><;9`]ee]```ac56gfdj797gcemfo=qma][clpifknkhi:?GJ?cdgg8;;:778::9;<;:>@<<;8878768:<=>>AGHIJB?>>AAEFCB=7ikmp7:>;=><;99:<AAFDA=<<=;;>?===<>?;<==<=?CEBBCBFJMNOOHEDACCCA@ACHHHIHPI\R28NTKGGGJHHLU]LFFDEJEB?=8798:;:6332586553^[MGKRG-_PXVWKF5:-$3!">=;LF`lqL*>.8AS642.&0",B'$42pco|mxITFs|Mpq`p]CZyXFbN@Zx`zY[g~tp`HafRO?WqLzm}`vJO2?D+%$3/*"7/EAjA*!! "!  fgjL:Y587bbhrJ@WtiY[Uh~qqqYp~bZskpT|:61[Algcxbd~zDEsT]lQ`|q^wBGRvfx٠}ahdi\Vrxfgks}{}WBE7XK>, +RgH^ZBN'C5h:DgB(#A1QY7>4UQ8PTY[UKT9Fo>,`C;RZY\cdllc^^\][XV_jinibqhT~kWnsbZYMa\RWGixVaYXOy4A@D>PXekUSSI{HECDWifOj]i^[bmkaSZnsoswuhmkhulPjgmqhh\^\QQLPIPORNYZWL}BytX@ZVNHMLZZZ[VQFRY^ehddy=}x}rbmwrz{}uechokt|sw[V^X]Ŧ{}q{utlkkde`b`aiaea]dhVXT}}msĺtnor؀so|v{Ƽktriaa^`ii^`gldchmlx|uwz}z{{~~곫~lmqotzppzϏxbzqwimqaeaZUTRKfcj`Tj}X[{x:98877oe\861376:<99766552224.1402205?BDGGHHH$$$&&#"!!"$"!"#!B;6579330...,LV>9AGP&#$'**+,,,+,0//.-.00-689JewvpNQi]DYknlR0A?DEF('*EAQSGBDFB3+.03<5001!,>90445.)G7006783AKJ(:JA?29977<<>98199:<>:4/>9-3($-.-5+)'(+-1:=;?988;;;<:7B1!!!#$7XIwLMIHxuMKGJxkdaLM0013/13/\4:6\Z_fejellaalkgvhvyumkkzkŌv{rnԪspsxv}{xttvquhY`iz[g]fo|gqd?vslcdMaUaVYbf\[`]___lf^fuhfphhZdLZuOikJC?KD?DDD@pJxk5.% (0>>/).=hvKO\Wdtn]qXfYLReyzwuyig??]~sÑKVsThuXRFbIy~v^~oiomt]cTPYSsQ8{FJ~}Ew|obralmuxmjg@Q[?9dwWHX>A.;{]kY\{e_hQ+4`[MONYD`"N]:HK17>AJUB6&O5:5;I4>COHPFEA4=4DSSF23LN==E]46=55)/9>I@0cA7;-WMA?:1LA@>:733`<:376@844889:=5WY1VLTQjEIVQ6A=2NNRTY7TH59:<883YR/<63316EVco@A@;3F@HOSVWWJQRQALWFFKZV-110XSV>2MJ@GPYWSY\W94VW]T?@8:;I7VH`^TNJJMTNOL;=)!*3,R0PORVTSSNMORMOMMMC<@HE7;L/371ZWT[\VWXXRZ1389786649?::63.UHB?>;5=OE@:4H8?=>>9__6A@5=?3SNL>A\F45WZY6@ELJC\VOM>*-4g94]3c\4b3566678:75heW[ZPORS[_^Z[\]]__aTKQM9RHOZ\_fo`D[`^][]^]Xc6dZ[\XY[]X]bida\VWX\`cb`dacfdjfih]45207652563134423322110210//222343545511121443433323-*13/110,+30.02/./32,-,3 0/4413)22315424:89!=;42.26;668:755# 4446O  3479 !!! ! !%"/'$*#!! " !$*/" !  #*(+#( %'!'& #&.##  + + '16%0gHN>#%1 +  +   %$%*'-#)#/,6)&$0"!71' . ,77! '($$&"'%  #" !%$0'#" "'&'&   +  2#D !"      !  + +   +").#4!+*2/! + + + +2 +, 3%!#@+6 Y:^4/8 #%(C5!':"/7$=$.'!( + %-V-  + + + +  +  + =/-31"(%''"*0)'!*"!"+('0%A.*$#! 'F$#.(2 4y)7x)#%&+2+,Dtlj{~]|>>,JC:)'O`G]ZCK!80d9Ba?!3(ES3;0KG37L)'(7]K0$#*)<64#7E,' 1%#( (%"C4&(?--./,5.#1?21 IDI -L|KH_Q3JBT5C4(5>401*(.-'#(6)67"BDG"732"288211''#"$!>"&'GJKKHKIOSJN[ZOQ@9m>Hh_cLYY[bkLVEYA77;G8HmH>ABR?;8CHAWMNaFOAH@I@2=@879?Y>JDLAAEGDAM/"+ODG2?--':H1`jYc^Y@O3#CN_F92b\Y2".$)"$'($<=*!9%52+ ,"#!4#11:.% ",#HG# -A2'1C37/)-88 %0*##!J; 2+ #"$0"#%I#-0'! $&.%6#(+)/A4;# %B(+EkG!0N9@O39H(* -1(I(49$)$5I+?)*(A.3% ( P/+HOX[8_VT3\BF3Q#09+#++`C(,&$*#$"!7ME8B.7&I. G3+B/1*.8)6>C4;650"*$"+*:./&(. + !0'#0*!R,,$ *3/103B+%'#!##"% 916B3'$",672#&1=''.D(,5'%'35>5#R.!(/%#,*.3.72B+-:8%+("<:=>= -%%*$ (.5 !&&! '+ 4+$$%,1/1.+-)+-,.--!-*/-04 3./,+++(%#"'%+,*,(++--051*#..$'/,1/11/+*-+,**)'''()'(')&'&&'&%'(&&'))($#%$*)('&*'+())*(*),&'!#''%#!"'&)&&%"%'$**-&(#$!#&)*)*"&%'!(%#(')$" #(&&*,%&))$"'#0.($#"$*(**%"#%'%%%""%'#$$%$ !(&$(*&''($'& %# 01!!","!"!!$!## $$$)'$" "'(&%""##*.,',&!!*#&! '%%+!*-+"%(+%:<69,2]-'(43(-*&$')--,-,-,-014+&*& $*,/28/-//.--.-*00+,-*+,/,.0300/,-,04551312324354}~~}}~~~}||} ~~}}|}}~~}}|}|~~~~~~}|{|{|{||{|}}}~~}}|}~~~}~~}}}||{|||}}|}}|}|{|}|{|{z{|~~~~~~|{|~~}~~}}~}~~ ~~~|}{||{|}}|{|}~~~}| }}||~~~~~~}~~~|{{~~~~||~~}}||~~}~~~~~~}}||}}~~~}~}~~~~~~~}{z{|{|{{{|{||{ +|{{|||{{||{||}}~|{|||{|{{|{|{|}~~}}}~}~}| +}|~~~}~~|{|{|{|{|{|{|{|{|{|{|{|{z yzzzyzzz{z{z{z{z{z +{{zzz{{z{{z{z{z{z{z{z{z{zz{z{z{|}|}~}|}~~}~}~}~}~}~}~}~}~}|||}|||}||}}~~}}~~}~}~~~}~}~}~}~}~} ~~~}}}|}}}~~~}| }~}}||}}|||}||}~~}~}~~~}~~}~~~}}~}|}|}|}|} ~}}~~~}~~}|}}|||}|||}}~}}|}|}|}|}|}|}~~}}|}}||}}|}|}|}}|}~~~}~~}~}~}|}}|{|~~}|{|{|{|{||}}|}}|{{|{|}||{|{|{|}~~}}~}~~ ~~~}~~}}~}|}} 􁅃ŻĶϼؿףŒԍ燒ŹáǮƋՊҭ٠˶ǐۀӰٞӺóζļϵãͷʱìÝɨ›ܻѳβ缱ٿК穱ŝС԰󆉀Тͧžȕωʦ၄ނʞຊ֡ۺۀ͊ī̖͗îÜ㊋沐ɴƶڲӇϧ򂝊üNj焃ɖ׋Ɇ́ԅĺɾͤ衅Ŧٚބŀоϥ㝴ָˁՃٜ̊Հ݈Žθ잟ѕ˥斋ůȹ􈐀ؖ܎𓋙舙𐌁։Ϸѿêꫫ胇ɶ򋏕鄂ɴ鷰ſ̬ͮڱл^X`irձ\itxūЪ¢غ탞ŘҕĹ°÷րø뀄աںٕҷ󅆐Ǵ笓𮾵퀊ޛƮюľӉ΁ܫҀ׼ぁ䞺ڧڨ؀ãща Öɶȿ˃̦ጭغ銟ŢۃĀӆՒߺɽ혰ٚݖߨۭд֫ӊ˰ع͸ށ埽ܰ걇¹µב“ȗϹڽ׃ޗυۦԷ劥蓛ꆚյļʿɷحĸ˄ǧ끝ɳΜĴ˧ؿ⢢ͪۊݩՊ争틮׆ʬ댅ùͱýˀ·¸ǿºDZڱߑ¾¢濪ĵՍÛꌚdzůɀȑᲉͭDzÈቕ ikgdcceb_cejj5ji567:<66ggieedb`bcfcgfedbcbeeh`adgadecb_^chiedljfZT`;jeiickfihabefa]_][^aa^`a`bdj786ik98778kd_egjmkjgksmkkj8:<;;@=jglnjir:=;;:77::9>=68;<<99?><:9:89:;;<>>=@ADHLJGDBADA??><7molh=:k75:<=:;99:>>@FB<9=EHDAB?=EFCBC@=?BA=>>>=?A?BDA@A><==???AA@><::=@<<>>@@BEEA?CILNLKIGGCAABBACDAEEFDDGCCEWRIOUNNIJTb]PLLSSRPMFC?BBEDFFDMWIB=;;;>?MKGCC><=868977532466772/YTSJ857:O>K573L9e^55:%!,.;:2kwae?K?8.@v%/+F>Q54&4<-%Jt\d~iumrRz`\~]frkPU_RCb1\PNVagPp^@%,,1/506A<7+,)"(+-02246>87:/'.1/+%+876.+C),/9+)',+0*&&&!#-.. $" &', /;0AQIE19;McQL8PM19/(*A@AFmusQ_=TI"&=+.80."?m>]Vl>@a=D^]lA;:2MUY?5\9622]^^K6>E?32:057O8I<)5-2H30U.$)+OXhJ6'A1OG6/+()Ql) +7ZGD8_oc]GZeSdf{_l3FbFC@H]VT,S6M`y-UNQU'=GRQ[HUgidiYWZNejlkQMWieEpH^cWhlnysbeljXZ[XbaV[XVRQ@MNJB?gHIS`QPHr^J}PM@BAHBnJ`nSQ^`XNW^RW\pomkqj\jnede]U]UOx~Q_\VPQRRTOTPfYKwTILK*)TNPV*E;878635325432411105>BFHIJJJ%%$%#!!! 8946822,)(-,'&/430/-*'K7;;DEH#"%+/0/0020/..,)(&&(ICbQ\ES^tr`N\Mw`XHM*EHBC%&-DBG=GHLH?:7;76564 *?4(,,*)OOH<:038 @=798AAH?85.,(-22?>?89>@;43-3/31+1-18,#'138=@>=9<::>=832/,+8+-AyZfxvfTNuv]`Q~|xH>GD~]ik`cHJ>:9Je]{ricimvfuo}m@AbdqqeJ~mpsQq\rbZjxB[r]HSE9@Mb]VO;TVtS=DG7IUcVMS\[Kt_`gu169[E':;45wR[bO`\dhuWoa,@E;FBMFZ4eTFBJ=4:;@XY-N6DB?6E25B@=KMH>:1C==6h3;')*%D>MIA3G@[K48%,E<82V3S43.'(>;F+78NA?11?-:7CIOJA@=ZBB9O:0^f3P:=@TaLUOA0RhHC;DD`=A?=<98<<>>=>@<75364298768644689965]DLT^iV?I-EKS]ecXLN5E[Lb]P4:=UY\b`N8be=KKJIX_[_ZZ<@AA?=@A??|BF=7le_^T]i789951a4745dcg5::756469;4488998:@:64g57;763432<:<:;>;;:;9457778667643643c`_WT\cc23ab5557<66:;757<@CB=<954353c2338<554\Ycif46;79;78769:63284b`][XSPMONE:?Tg94G;AY]TS\]]___UF?6=OVe321dfd`__ZTXYYVQQOJIMLKELKJKNIMIHJNONNNLIGB[]ANNPVVSVWONVVUUQST]ZTPDSWQHNNPOMOTTPNLFOXWYSMKG<6J5GPLNRX\UNHZNC;GPWJMFMNZ/.YZXG>JL>LPYWQKPM5463]@E>>:IGSZOIQVWSOPQCA:81@pk5JKIOOLNOJORTVTKPWSPL<@JC6=1=133.RT10YZQRX[/178597518A=97410THA;:6:HE=84d4=8646Lg5748=456<7JA9<;6LFOFDGGDAAGEQ61I;S5:6:==BEABKORSNFGIEMNGABAIJQU^XRNOA^QMPKIY6?>4RRR9@`G6589h=;8XK:9OPOF'R/^756795223e779::;:9mdfe``^`aada[\b`[W\R5\6:Ujf`h]/]_^W^]^`\`:obh6jjfjbcdgc_\cab_XXWZ__d_bdhiiid`eh3530/04201244424443341022333648554334447/14413421//24511853,)/32672845502442.01012202423243575368;=;967<88874366567!!37634"   *&!%)&$ !)2.%"#'()'$  ""$+"&%!'%$#!.( #"UoDE3'B   + *"%%(1#!$ 234=$-"/!/"#(!##,'" !&+#$& !"&#$7!$&, + + + "    !+ +  + ( +     ! +  +  &&!5+ &+ $+%0,)(   %90!=6^8,'/R6&'&+/C.$. ,,('-D')&#      =4$  + + + +  +     $"4%0($()3+:$!*0&%*0). + !&'*)%",,%!+J +!  $8, :>'!3?"&=smq~qokF@RLCHPK=>j;WOh=?W2,670+-5+0,*#+')7+'<;FP*#(<4$!Nc ,RC=,3Q>7$-%1KNW?Qm(N];2-9F4/'15 + 13=,>GRPZJXsuqxe`^LjkomQM[slGnKcj^sw|~lqxnZ^^]hg]cd]YSCPQK@=a~ILYcQOFmWCvOL@==ECkG]lRL\^\OW_S[avvrpqoclqdcd^Y]TMs~KWTNIGIIIEIFupQC8X@42. 2,/7++@9;HRLSFD>?HSU)GBUQNLXen}pr`|{{nPIIYgj_ffWNM@@?NXIGmkihbcZ]_\dhql^YRCVR|nvֵɺ̻ưsuvruq{|tvx}w~ʳ˷Ҩn{•οsǛdsjcd`SLTJY]fcbS\ofsw:63.--0aL'(%*0.--,)(**(%'#!%%$$$##"%,,-,,,)) + + A3521+,&%8-2'.6EF:,8/PG<3,.  ! + +"% !"# !!%=HVg=@0 %:(.$ #6*+#+#!"'64,@$.,*--2:JN3,48&/5@X EC54*4#..60)).*-';E-1"".!:+.0) "#$&)=?;.ECBBLIFEJUPKHI`JVhOB@TPWZ:>;]9I::AR:BDNFA7H8/0@905@<6C?M=HKYVhGF?QD(38E9>@d34+J25+-Q(5'7@+,6@2/8?=`Wbc=FL8.\Ia2R1_LG)'/.$,$<>@'?#:2/ %$$#-(#"/.+6*%(<-,%-$I5;EB&25*.2 $ )#%*,"#'/.!,.6$'== /+5''-.!,!''*59'#' 662')/W.;/1'$ '7K/B2B7.)D8'+J741*&)"3)85$*M)@<;DHVN%1=$/5(F5%/>.(#3OD:3*@DcB+5>/BL[RHGF?5/ 21,# )>%($!* $ !&#(E4$*09@8:->96*6%(6:/599/()/('*%& .')'#!'&&,+X'!#!-''.1G)-": 3!$#&6+** &+21/-.?,.'<.%GR$;,39FRAE9()6#3 /")1:B4%-27:@EDA76")5*2/%*+.10&5&$$#X+/+,))!!!! !?#& 61.,&*0.211 0-+,)'-10--"!-,*/20.,,+)('%%$ (.).((--,-/0*"&'./34000,),-,+)))'%'&&!%$$$&$&%$#%'&&&'&�-%%&+**,-'&+***&&&++'%&(&!%%&&$&**&%# %*(*(&##$"&$&&*.*$!,% !$)!" !%'()!"#$$'&%!$!)! ',&"%()'&'(#"!%7.&%!#$"## $$%&&"$)'%$""$'(#$(($ "!2 %6% %!%!!" % % $%&'%!##!%&" ! $$'(,'%%%.$"%# &$&'. 4//#'37521205/31/../.-00--0/-,/)2)10,3,+-.,0//1/17044424./141/-0.01--,/315/1245432/2 +~~~}|}~~~~}}~}|||}}~~~}||}~~~~}~}}||{|{|{|{|}~ +~}||}}~~~} ||{{|||}}|}|}|{ +|||{|}||{{|{z{ |~~~}}~~~}|{||{| }}~}|}}~~~~|}|}|{|{ }~~}}|}}~}~~~~~ ~~~~|~~ ~~}~}}~~~}|}~}}~} ~~}}~}~} +~~~}}~~}~~|z{{zzz{z{ ||{|{{{||{|{|{| +}}~|{||{||{|{|~~~}~}|}|}|{|{|{|{|{|{|{|{|{||{z{z{z{z{z{zz{{z{zz{zz{z{{{z{zz{z{z{z{z{|}|}~}|}~~}~}~}~}~}~}}~}~}~}~} +||}}||}}~~~}~}~~~}~~}}}~}}}~}~}~}~}~}~}|}}~~}|} |}|}|}|||}|||}}~~}~}}~}~}|}||}||}|}|}~}|}|}|||}|{|||}|}}}~|}|}}|||}~~}~}~~{|}~~~}|}|}|}~}~}~}~}~~}| {|||{{{||~}|||{{|{|{||}|{{|{|{||{{|{|~~}~ʀ~~~}}}||} ⋋󂖢ĿĿ;Ը̿Ŗʋыᒾܴ섐Ўʰѭߒ򉰥ꄤՆȼܔԈƹӧܷƼ攫Ǽɹ苓ᄖˊ㓵ډȥ標էӴ‡ݿʞއœšӓȫ✋ḉŗ×݃ڀ򮇿䥑Ὣ╕׻ߐ؝΋ҳӜÙʋާ҂وLJ˓ܙЊҞˏ̶󓞥†ȴӂဗӂѲ鱊쌪х퍔π͹ó–ᐗڀ؋δ˝򍔁ȹIJ̱ـٮȿӵ̽׉ɬϷ˾ȿڂι½\[r޷뗀zƬų۽ʰ剃㘐ğ׃̚󁅋مϼ쫧ߞԶٸζ˰𿖨޷ĭрǹڃܢ肀ꋦѤدǑѹ҉ӻڀٲ䔴ϙː̋ƪЫ΀Н񼟛ӽ녌¹ͻӶӤʿͪᐝվۜسݖ񛛠ᛀ⽁Ҷۧū—ג낁嗐˸˿Ք¶灟Ʞ􏬹Ѣجɟԑ΂ӸֵƖȜꍗًѲТ󊒍ͻ퀨ӳآԵݶ甫׹һ܃̧ఞՇڪķ޹ِȰޚޑɁ󀇊Ĕ腒пϿƾœſÿԀƷź¾ǹϿıŬȯ༿׿ǰǪޱ턠ǹ޾ꌗ㮚Āűˉ̯Ǿۿ´ԥèьǐϹefgigcifcfa^jdhj9:6fefkll9oonkjmfchjga`ccbaa^\^]^\_]]a^^c`Y]_^]acb`Yc<<;mmhedeg_]]^_]^[\Z[_`^_`]j??AAEA>>?BC@BDFJFBB7mkjGB78;AF@9q;;;<::;9;>=9:@F?>=INOG??>@?A>=?=;?;<=<;;=<=?BA@=?BEFIILMJHCBC@EEBBFGEFEGMJHGE\QJLKYcPJMVb[UHEEGJRMACEACEB@=;>>;ETDBBA?><<7f5898632575540[hcKJPd5&:92MY6I'D+/%%#(*WkN5')'#!)-%#M_;%,/-I,=R;AUP^Mvdjm\hTqW\\t{\Xaig(LPUYWtiA,894.+.)$#57'$%,''-,3129><830'+//(%.4-.+)A+/)'!"&(-*.(%%$###& &(.$D$/2*?L5$0&<+4H1&N-$/A6?:FRC=pTMI;5"!&27L8+,1B<7900@-:!!FP681'.%)PD'7/-#>S]kT7+HEUo^r[O_lW_J,()"("CIGF>D" 3F4Q$DE=(QrP[to~Pvkk~`[ylhP[oQts]R^Uvn}1'9C$-!,0"*76+$"*#+Et^* %$'#!##&)&&(J:%(/GfY{=nwbBKUP\OhQBdpS_[[<~ti^d]wwm\^sjjʽueK\nlWx{a^jO|B[O]<>y9hEnbio~Zt~LPMp~igy[iy{-YN nf.@>,'0>,=aIHGWA1DBB/4\BAD-9ZFL0GBk\Cq`t7??<:878643545645210204>DIKKKII%$#$"! :?;==<8889?C?<82-$,21,'KLj;>BDI&(*04215621.,)(')+6USJ`d]fkHANTgY`]L[sop@KIB/1))GC:1IMI?5=<1;5p!'(&*'&I:K:C<*.A%88:99A:@FJ976/34;>4;59>@?=8A=7-0132582&(58;>@:6=<8::=@86<),)6.&)4"&%&'!"!;Sg^\_YRN<7QJ-@W42,'V3F%$$'OSN&6.X49\TPYIEF?pFL_gSSRD;\OoejNfX`lHX>X|ezH`vh^YUmpdotIxU[,[8=Z@upokqg>U_;E54hXDtQ_SC2YT_57b_]_\Y[]`uqsyci]kqaΐzv~yv{wOLqpbc\SN|lwu{xwfnq]winpfzyuŢ|xkd_XXXrsqbXk\UcUbq_WVaZztpkthdVtfui\ZJBDJQEKIURKOuA@9F9@G;@Znb{gx@f7=46>@2=RhKubwQVwu}mcYH4Gk[g\n?17h>0`'7SEW76LK:JK?D3==55E?=8@D@VFB+9;:I9<6;>"0=<9+5B<<;54/-.&EBMNM;;KC]F+'IP&>I99=O=0%MF@LC350<@2. M39CJA6;53CP3J.^5@<*aBYVU7]FFC20+=@@@<<88<>A?=?@=8322:<25743_06799744aLVSJC1?M/LLOTRUMPc;7hd]XZ[dd87531be474hv4d35:96413674568989;9:6je_c66543457:89<=><=:77567856467631231d`ce4g]]`dg4d]c485<=;67=99>GX^gc24a`]ba_VW\WYRQOKINOKELQNPNPKKFKNNRNROJE>_=:ELNLLPLQSKMVRQLJUQW_RSKUTPLURSQSRVUSROFLUZ[SOM@?:RJTPHMQQSRLENNE6IMWM?QLDRSG[]4NJKRNAKYTDEONW-76ZRPNWKJEJNAGLTYYRFaTB0WhHB?9<4Q-8E76(9V/\]QPRTPKDI>85'BC2U,0T10/ZVHVZZQ1657:;508A=<96432UB9>8;\5J1049>?>:9:;;BPXUOCCILSPLHD?@OUOXWUKV]cXIVHJWAG@3VTXC@ZPFr:BcfN:$-32*   $# 8>.(9#"5 7 .  1$-<60*4 + +86<;vpyz{y~yaltfWlsQ63tkzJM_MPSWNB7* 6S<;.(3!4/1>FPGF>TE5BGYUTTCJSl[M'BPOPFMYV`dmn]XlwuylYrgpLQaj\WVJMIEAGMHKEKhacbia`cagaZU\LDZWum}sļܷ؈ʺ𘁑{w~xs~zzv{|~׻¯ڸiot{vݾuhk̇uȸ˭šZwoYieU5MWKV`edkUXrm77643/-,+UE)(&141--*)+))&$$%!y#%%%#" $+-00.-)+  ! @Ed51-**..)786=A*#.4>5:;.;HBF*     "   4JDAC=66$0'5 +<"*.*'%*"0.,,-%#94PNJ8F>FJ-4";I0@(<.8/+#*+#(+4-")++3--7+00'+) F;,L460+#C@G&&DDDFFFHEBW=hRC=OW}DfjIYbfRH^14/:>7JQwMECLNb=AA=E@BOH&$1/'&# 54?IV;`]XfF=9QB+,3*OCF;4SM246W>86VY?%R1291!00&V$',7@1."3"14/6&.+.@YP:7.3(2!*0%*(,&&!+ #( %1'#""2.L%@=-*$5 <($ 1*-*6/!8B$,31 8 -3 IK2:2$((8"+$55+8%=9#*.>7#;1(*0:$"%68;@,7('Y ;-'#!.;b&_($.67&7/3=,0 + P1;'1:.:J%.'DMG7>$&$-(5%3%%$6+). ??F5;$y9A:H*"3;1?A47$.2(*6*)(00)?/4=9-&U4215674.,,..12/*))%/,+"$%32/../22100//00151601///68620-20.03/0540092212~}~~}}|}}}~~~}}}~~}}~~~~~}|{|}|~}|{|{|{|}}}~}~}}~~}||}}}~~}||{{|}|{|||{|{||{z{{zz{|~~~~}|||~~~~}|{| +~}~|}~|}~~ +~}}~~~|}|}|}|}|{z{|{|~~~}|}||}~}~ ~~~~~~~~~~~~}}~}~~~}|}}|}}}~}~}~}|}}}~~}~}~}}~}}~}~ }~~|{{{z{z{z{|{{{||{|{||{{{|{|{ +|{||}}~|{|{|{||{|{{{||{||~}}~~|}| +}}}|~~}|{| {|{|||{{{|{|{|{{|{|{|{|{ zzz{zzz{{{zz{z{z{z{z{z{z{{z{z {{{zz{zzz{zz{z{z{z{zzz{{zz{|}|}~}|}~}}}~}~}~}~}~}}~}}}~~~}~}~}||}|}| }}~~~~~~~~~}}}~~}~}~}~~}~}~}}~}~}}||}~}|}| }}||}}|}|}|}|}~}}}~~}~}~~~}~}~}|}|}|}|}~~}~}|}|}|}|{|{|||{{|}|}~ }}}~~}}||}}|~}||}}|}|}~}~}~~}~}|{||}~}|{|}|}|}|{|}|{| {{|{||{|{|{|~}~~π~  ~~~}}}||} 偅üźDZ׳퀮ԸŗŮǃ㸳и䳘àƶً侫ʹǺºµ¯乸͵ޏ섊􌝅θȁ˶׶⦒ˇȜу򊜧Ο쁀ƠЌȧց것Αﮧ䌺ܼȅ܏ǤєIJ̢ƥƶ̓Ǧ绌斓׆ԢҠϓԻƞʂՀdžưԵى앱ՇوמݳԍŷߧŷȾцꇌ搫ү쌍ȳ臝情̈떀类㶝ÇԲ𧃳͹ٺ̺셃섍󇚡ơķӽہžǻѼՃ򺳰[ZϹnrѴŴ؄ǹü˾dzݕփԻƵµ쁚ʍӅ뜹ݢǗ텅²ڀѽ懇ռݮƱֺݍ愬Ʊ񻖼ɤ͍Ĺډ˪㮰ßݹو܀܌乜ӱÌͅقɴŵʟ˱еͱվޖݐŲ䠊ѩʀ̼ڃ􄖯ʵƌ授ӑ˽ϫ򳎭ɟϔ☚儜܆ŭٽ̌׌܈߈ջϧѵ㎘ӽխùׯ񗂅ꛄƀڲ̝ϲԉоӘщ愘𗮺沱􅅅¸¯͠ʰijij둈ͼޜ×֪熘ߛή零ޅ2腈ƿĶǼǹº¸νȽ·ŽѰ۸ư닁ɰȽ쎢뢡ļϪ̍˙ۯ͏팓Ŭ ś®Ȗݻƾƿ̭ӷì傄ߍJfhgfkjkj7kjkgab`58hkgh7lgkmjilkkiiighfegea^dadc[X][_dc`]acda^\__``^^`bg8dacba`a`\[^^]e`]\]_`cddbbagacfj765789mifeghfdfkkkjhhi8=;98798:;:<;:;;<:9<<::;>>=?FAC?=>>H>;76;:q::;9<=A?>;=>=:;;;>@A?=:=@A;9:;=???ED<<>AEEA@><:;<=?B@???=>?@>><>?BFHJLKJIHGFDCFFEBCCCDEEGJONPWTNRPSHRJKU]b[ECHTYLKEKIJGGB>??=DF8>=9f7776753442[]UD\7XFOEVDab.41072.((&)*A5|Y_mE%)%#% -'"&',)1+EISB";%?*PYv{xsxhPtjp^Mqkip.:/A49-.-=/08:74*5;>Ju\#<8D&23 9D7B:0 %&)"#'$#89P+D/,#B6)9%%GP0.*,lK`PP)>%c-nTRiO9<-$0;G98B=@[7?#LK?/qGQbcv]`nS~e_ZrofDrZnVcP]G\Rg4*:,.&-#C"2#"/;'",3FH<-%(S/&'*# .)7"<%HugX}p_]ANJzdznusa_\xML\6fUZ[ySc_xmlzs}wx}ZuOmWmfpmDPURoe>Y[[VJX?`x~l/{Wh[bjeQqn~{g˙m1MasU_ai|]^hkM?VA*=iIOSAbRP\SA-0BLP4HF@C:\55/+-2hoU`61\H;I]`U%AS^PZNlB)B<8@WdF3B2F0]dL5mJhyjT=CCRU[a`]PJ][XV`J>aW6?>=<;977744556645543447BIKJIIIHJH$"!!! =<:;;AA@=>:8:?=7210,%""$@8Om>FGG$(+.010200/-,,+*(+C8BLJbAGko?wamL_YBKbyghV6,*+.)&@D?9#&C:.80! #*#$%!()&8:435:9@*'CAA87=DOQ23>B?"+G106;=?03K(8)*/.28>C)*359>>7:;:@ 9521+)%-0;800:<>!!@E`YiWF;=:CPK>J,B>S&%%%&%!IV+)MOKKNG&I]Vl[plpQmPSOGGKIhxzL^~rFRPAID_ah_WSJ]XbXgsxA8QWhMKgNQnsjjhaFLbQ`VawUF\<9CH3_1=>4`bXZX[WP`XnqŠae\UczdXcͨi|yvqgSuhkswgk]|swi^[tqmfҀczVHXN]vmc[\TUfYe|cma[aXf}idv|v_yWvpcbN{|}{NFHJIYOKPG|zUmuw;H;2852338>cTISk]Qui\h[dp?AeLc{V=\[a8BSzrdQrzyˑ^fejTcTmzswfbbmLrsƕng]sya`sfȤgST`6.a5N`72LN6@06+CVBPPV)fc]`A<7`!iw>TLF6M<::PE>>AED4^>;=A@GDHQU85<9?B9b4/01-SJNUOA7?)VV.J3O1I\a1FA8C>H<19@PVPN. 3,:216=KM;B>;@@=>?>:82/7<644]1_258::628_;97422ab2b8775765566:856:<:757787858<32ea`\[VVXXSOLKUJ`X>5122*Neb_]_]UOHD>8B`h5685^[aaY[YUTTQSQOMIKMLFELUU`YOJKLKIONRMGC7_-?JILJPPOPKHCSSNPNRDPW@PTYWPPTNUWVRUURRQLK\VUSOMA>ANRPOIKOOLHKFELD?GSUADVVDAKR]Z^WW[YQC>^aTQQZ`-Q3/RMW0VQHMKGPQJEM80:YDJFEW8@D?3V@=OGS=:I3500_NN5?U@68=597338[[`UMX174XAP;>9>=@A?B?CTLCBCBA;>:9:I1J74<<1:A@97B@ACXZTE:EHPLOMGJQY\TQUXRRW^TMO?MW@G>3\UWKCPRLY669:6=oU3Y]M=/2F)f=55345443344557889:986hhgda^``^\aijgc\^_\ZYWZVXUUTXXZ]^]_`aa^^]_ccek9ngdaccgbbhiee`a]ZZXYiskj:e 33214552544301/2645746853545465224244.,/.1321/13421.20121Q2433232330./0/42001123663213113486558:96588777641444? !6";  $$%)($&&' (#").1,!(-$$#"" ! #/&&")&#(&9.06 ! Q88>      +-)('$*6&+4(*+>*36.6+#!".) !!,!6 %#+#! +#        +  + +  #  %   + +   + + +)/4 '0)#C +,%!(" $&)-4 /',)3*%"&0 >"0&(! ) 0  +   + +31 0 + +  !7   (6%)! !%$'"63&&#$ !%$!  25* !B0(":/!72.1%#>"1$3Y bO363; .{cuTedl}_gomM;N7 8eGNR?[EGTN:$ "6?D/EDBB7T31)$(,aiP[4-P>0=LT7.%,Q?..C+D69)5*)! ;4/*2I87HWUYS4-;/&"')*"1?\N + $=F+N1&5)/J>&&#r520ps\oygF.CIV[elhbRNcba]eK@^U49NZft_YT\kwu{zmjnTYic]YxoNZRLfzEISXREp?IHoh8lkFDEyu@soyqruJ^dgjpwrf`ea\VSJQ\]\PQRRSOMNXTMRWPINPxoobE=C:lF0%#)13"*;/3BLOJCA<>@DA:@6PDAEVdMO>?=8`]WPM2?4O33148BJL`P^YgP7*D8.D*QE @7& (*'$BF0++12"5 :?0#"26!P/(";1!*:4<')@)>='UFL8,17" K+:E'"26&"9J8GD@0!+'!*!'! A$1A1'$E. !$ +12+$LNVM;0)-?;4G*1449;8)G,'%+,1++25%' )/. "-#$-*I%3024.&"-72.!3)9<(# *"09:.&!+6'+&.?69'- >,%+(>=,,." ! *,0-3*!!532&("==&,)(')---+%)/$./**&?,1"###62535 444/3*/,04+/13--.,.,.010.,.-,,0-,+*((*)&%#!&'!+430.0/+(" -0--11+-,***(*)(&%$'&#"%)).+%##$#"&&)'$$/$!%#(((*&$(($&%&$'$()'$%&"&'(')*(''%#.)*)'%%&%%#$&'%"$"!% !&& )(!$)&(%&+-( ,,%""&($"'%%#%"!('#$*"&#")!* & (*!#&#%(&%&"!/.1*'.)'(#"" ()&  !&#%# #'*+'%()%$&.)$&(%&)'+% &((,9,5<3++2T44410./0/-/5632-/0/..,.*+**)+,-/012223000/1127643120311673411///.-58452 ~~}}~~~}~}|}~~}|}}~~~~}{|||}|{|{|}~ +}}||}}}~~~}|}|{{|||{|{|{|{||}|{{{z{{zz{}~}|{||}~}~~|{||~{}|~|}}~~~~}~~~}|}|}|{ z{{z{{zzz{{{|{|}~~~|||}|}~ +~~}~~~~~~~(}~}}~}~~~~~~}|||}~~}}||}~}|}~~}}~}~}~}||~}~ ~~~~~{zz{zz{{z{{{zzz{|{|{|{|{||}}}|{|{|{~}~}~~}| }}}|~}}~|}|{|{{|{||{{{|{|{|||{{|{{|||{{|{|{z{{zz{z{z{z{z{z{{{z{z{z{z{z{{{z{z{zzz{z{z{{{z{z{zz{|}|}~}|}~~}~}~}~}~}~}~}~}~~~}~~}~}~}|}|}|}}}~~~~~~~}~}~}~}~~~}~~}~}~}~}~}|}| }}}|}}|||} ~~~}~~}}}~}~}|}|}}||}}|}|}~}|}|}||}|||}|||}|||}|}}|{{|{ +|||{{|||}|}|}|}|~}~}}~}~~~~}}|||}}|}||}}||}|}~}~}|{{|~|{||{|{|}|{||}}}|{{|{|{| {|||{{|{{|~~}~}}~~~~߀  ~~}~~||} 逇􀐎¼ĸŻЗłʒ؜׀Ͱ¶괃ϢỴ̄͡Ë­ș񆒛вʷͥӋႤɠѬȘ֨ҋ”򉖮٧܊胔ֺĖх幋얠̳̐ϑ٫Ƿٝ񛿟؊Ȧ繂ĎȢ߂؅ׯʒ۷Ȋɍ欀ڥĺآȴ떂疬ȅ𷬜ў½˞ǗŶ❖ʉӴꀁКāòπ얼ӁЇヒ̫͌޲󁒓݀枟銠ڃʫƣܑã񩠦ݨɖك݇Ǚ꼶㈞ŧĿ񼡱ͮׄ㌁꫱܂±ߐúλbλajt}灁鉚˹ͷѺ󖦙¼غðᕴݛоւ¹ㅃ〘٭돡㱧ѽ̥ׄ״҂ߋжϐȑףثמΫ汓վ΋ۓڠ݄ѱ䄭̚˻η躤֛듩ˢ¤鹭̏륈瀅⻸ٳ転ʿѸԴɱײݮʵ܅􇋇ܯܗ߳倳󒢸ĈӅ¿эᏃ䲅匱½ʳ꓄Ś˜ޱӮIJޜЌԣͨ禲ꧺ־ǞĸӪɶ܅Շߖ暳޶ɝ֌넡ޙꏎ胈慿âδƿƬƿþ韱ο¹µ³Ā̸ǵʪƷг恅⽴萆ˢֺҍêĩʶȺɺ׳˹玁lᖔ郊턇3bahjd_bk=86j88ifhge`cgkkjiifeg67ihfgjkmsjga\[`e_\]_^cbaaca_``fa\YXV\aaa`b]YYZ[[^_^__\\]^`_adb_gbYX^f67778<7cdcfhhjbadfifh857C?>>=:;98689:;;:9::769;;;8:;=>@@CABAC*DB?=>?DCC?8=@:88:B=>>;;:l:9:;:9:AA97=A>>?>= ;@C:7:=>?>=;<==?==D<<;>?=>=?@??=;:89@;853b^YCI7B(8B/CKP8_18C1)*,,/0E;fky:)'$!! %, 3A>XL?8 $0# 6.-1GaEX!'$=G;C,-4 #6+J;( + )*?>)0;E=WN1?'$OY4>-2,~zG$,"%2X]ZPTL("E>206A,D%"OkL:SEmQ=GTdmv~|J~H?DVe|}W$-  0!( &#)/!,17575,%!!% &"09L5lzdot[qobZ%CM5lCtPzdXJa|hthremxry{d}ahY[\mTrljY03=XXqg<\ua_ho(zYvUa~NW{LdiCh{rsSՆnr_RQdxW~nekQ{H\]qHl7![bFI]D3W9?55;OX5WA-<>LLFART/*A`2NYOb079/Y62;OEc,0Q>GW0-,HGLD640,,+6ROWR3FH9D<-C/K?4%2*<65{*8YS{PI9=MDB$/)#HL?ZA:35=^eKTRhQ7@{__rtdYcVNkq~vcnszq{pft|zOROW\_]Y\XYb]Z^mrusjnaVNHMR~WIyt}nyxsCFô|y{޺ƶf˿jlv{}njiosoorlZdb]]eejpopt{|x|w~uq~~}sxͺüiwtnwld`kvjo(fjd_dZRO\UITXW]ogevtm9:88:763edVY48:=<:85745454764232449;FHJIFFGDGFC@>@@<:;:;;=?88:73110*)*('MNfuCLM$&*/1120.0/-,++***.,>@7K[]lE@FCDm;KVMMrKSNLp6.,/(#BBA=!&>@1/!"!!-0/)%%)+'LC.4?BLHIG<17;1<<@N&")B3917:??/DNAA,)+*369"6@97=?989==;5063($5!= 4=:65468=68aXnUQL86B[YH?+C4)'&&$&%%#AMJDILJLD2US=6SS=\czToxkA7HePprus;=FKQMbIWu`ZDDc8pWRoYda\ZUKBLDZZil{jQWpkO=SAuIlW]C7ikvh8:8<502!"+5>JpY\QqmoObnaSknv|CBWJ}SYXL:Y^KQAgnY}xukhkzede^c|ijrpj}gSA(xiehYm}umjssvd0.F^A8_Zd,H8*774F.TWD#qYYA?2SR=V3(0Qsg`g|Sz~UjwA9@B?;:<<;@?459;32jMYbVG4ULQ25_BPSNrEcM9YO2DC?WNBdBTa;8?;D><;ie`bbc;;7`kjf`cae552553334435659:6788fcb65h453447877>B<\]\eA6;:77556879;;;8666455655566dddcaae5358<;ighh3fbd:`243:9=>?B=<<9763554f7;;98:<::;;=>@=9977895478642c`_^[\ZWWVVTSP'.("8\0O*Igb`]Z[^YJB:;Cbd28@9\[^\\YVWXXTUNNMFHVJGJOJQXUNKNNKJNMLIEEPT9HINRKPQPKLSJL]OLQKBRMPXP_\SPNV]SWTSTTRRRPSLFNNSIAINEFB=GGE<9::;DKIC@EC<93644D@:8<=UZ348.7?EF\e[MEQVX\]aSNQMQROTYVZX]VNFBFQCD:2[URJ>-#%&1A?GB-8?4A7%2%:/" 4,,[V%0JZ'15*)(DaQ&"U;dB*3Sx59BV$Ed]QjumlaaukUYxC=*%/;HP^TUUUW]roUNUIVrkfuX=MZVMOGTSGZo_auuayysxQb`a\VYWPTMAHLKQONRmrqT+&:B3-B,-+''# &"()8<-!'64"%2!9.(."88>c?$&# ,"'.:/ "$=?=;>6;:B65C@NLGB;>`e\TQHO5]A]GGVWZ^C.,>CONSI<9;FPEADOK)3@( @/3;8QJBkRJVS=9/*3/-QZ81Q.2+>G9?;+857A0*0N08QQLQ1ai2'*;A7*/6GFWF6+7+1$'(.+#47&;&.)-&?!&7%4(%(2@7:!1??718.>&:/.?A:O8:,*4F<=73BG.*66&+)&+!"&4"'71;+H*S: )! #-0&1%#&+5!54>"*X=2!!"):)"79:0#4)**20A0W7'')A$%1+9&-:)&2*2/-:3I?+63## 0,7#'!:;*'23+4<3.8$/02'232&%% %.3$ ,&/;! 5&09+0/7=;;E@:::>7<<=>??>>><=>=:998:;9<===<:;<;2=@BDBB@ABA@ACACCDD?>A@>;9=;:<=;=8:;8878;=9oj<@><=>=A=AC@AC=;=EJMKE?@>AD@5:78=AABB??><>@ADB=;;;?>;<>=>@?AAAC=59::7543eca`MKNRCA?L`bdXV_673-+-+),/\[`b_$,(!#.)>%"8?6>4@/( -5P:gPqvpwEc{Xj{T\MtlJywo72dvB@?Odi^/0% "(+06+%(045534:/1+'148.++ 25;;.'%*-/+--,'%!-."'*-*/'"AC9I?#&!&/62&"7,95@P9 $+%01@O12#14B><<1672>DY@ ""6'9'@8!"B)> "B +-':E;.(/)B-!2ME13?*=@75#J}M^jRP29801bkvl 464D $# #15F89:SB/67jFhjqShWa}nlv|fRmiWWcjsflI]wrpoB$'+!$9&/$06&*+*'"&2 !(,8'%&$(($bphWSZYhjmjuF]j[oOzrQa[zTwyvavy_pslp_LpuQ`[r_@MIEjESMJ_kpws]_}PPk[[_Ws[l:Hu|`hq_ƯUYcWBR~ei_^]-;N=N|BRR?aFPObC7X7BA9^XERFJQUF3/PW=9WU:53X1-CI:(QKfDC;>VG5Q5@92);=.9>)O,E'6NH-P5VDGJM-+0KFZC3J@B7J>hVL4YFG+?)@X?8C-Qt?[[_`OM>WzcNDnNN_f]c{VTPITZLyID5W+.=PAPJKDFTX[QYko`_VMbWRg[LZSbE]UdRLKUZZMKBjct][ak?UNtTh{t{yNKRZZl\U`URWYY`XWZUb\YUWWUQJQRPzoYUam[qTFI(%&" BDPQKW_VGmKPhcV2@useXVST]bh`Zmlwsejmvǀvut{ntsqXVW^SPTSZZUQipuxruoaZj_XLWsoaIfuIBIzIJƺsnv|uӿ¼żopns|}slrrnjokd_g_hkknpzxx}v{}vƺk|tsz}xxzmdnuvͭWfhakaXNXYMTZbWhofiqn567889;4nlegu99><<<=<97754656653116524;@FEIJEDEACGA>>>@?< >A ;<:63410/,,**$D^vlFN&$'-1334210/.-.+)'(*1/?0-6SnkzxgOvk>KV|IEfr>Q51)'&AD89C?>50#"!!"+7-)$#.,0-LB=<;320IJ,&&$ECCEDEQIIJ7?,;9Hql_XOzdcO:VK8aRu9?R>rYkWlvyLfDGFDIeKGdSDYQI=C=CM[WktckizuVHf`COoXG@WAZWb_P?277HU;:4211/[a`Xro{shhmd[_ccXUecmWU}yxsk~oUakvcmsvirfeNR[SYq]bc`Xswghkvmq_hluVu`z~xqtpc|jPXjwqnejd[u}ushpph=97870256@IZv^PV}{{sUu}gU{w~ynSIuRPKQyguS^|Pm|kahUzgxpwkizopvb}iw__hdlkxY~ΖO\4*-*5kgah;6597, AFHF:;cnie_gWg7)MTC+-.oahńs[hfR\yQr^LF4=UY0hjw5GU[A@SS1:9CK8Ycedn?6/8@DFH@:-'VKJB?CD3.7DPC7;?9@*-BK7ER9R.N0PN1?RQB7@5CBHG;FE`EKS:G9=DHCJD@AI2<:6)6IdI?IS\YSE3+6B&;+/5:@4'N[DB@/*:=B@?==<>A@<:??=?;98:41TJ4895=8fc`YP5G5XAU+L0<3QZERSAYB77`T>8=1OH=FDB4/U.4546?N5U?Xa45969kie\_]\m9m89hfdbedf344bb642de535978:9864ghhk66e5576357;E@3]_b457986546778<=:864557:8889=6eefgh764<;;<:smjfgf53d36558;B?A?<;:9653434655657;;;:998::>?A>:<=6442332220_[Y[`\XUQ[MJLP)KUENXA4Gjecab\_ZPE>VDT]a46<4dc`]X[V[WTQROONLLVNMNLOTXWNQPMGEFEOMPI5VEGMSTONPQMQUUPRTJSOJUOYUO[]SPNXYQXTRSTPQPN@=QZXSRFIFDC@ENC>LT[NBDUMMTJHOTRKLIJQS]^_ef`FZQZdKY]Z6/a`LEOZXZ_Za[XTPZ;B/SFET;;LB?=8A=>>APNP@.GUULLH@07QRO9=:MMKKEIKR\.QRK479=1.446;<95599:7553/VMF70_1a`\YI@:V`][J93BB:@IHEELPG:`jg]Be:SM1472D?8223Vcc231`]d33468876jiif_PX]a`l7mmkqtqia`ada`_a`^ab\]_\XZVWY^_b^b`_adeeghkjp9qqrC@S5,M3>?6YTDKBGNQB/(BL53UT60+J'%8=*&3)212F<*F/:4- $'+@#2$;6!C/G7:9<"&:6M<)-5+6&)8('#*#0$)m5 57=47L0L:MifC3$LMSakaeXXRMV]KxK>&@!"7NCTNKCEUZ_YcttcbXQfYUodT`T}^E]XfQLNX^]OJ?bYoTVY_9MIoQcupvvLJQYZk]Td[PSUU]ZUZTbZURVUTOGLMH~lqbGGRWHqVD3308CC4:@>:d=:HK?&SPQ@;?@;COQM?GDHC?DCO]]UUKOT[}mvpwwDBlxmDLABDENPOH]bhlknmc\l`VO[wpePÎΪRKSWUȾ{wv~w~÷Δǩ¿̾n~{yripwx͡_lich]SLXWHMT[Ohrioun33<310..,`\X_q510-,-00-*'&%%%$&%#"#&%"#)-1/32,)+()+$   ;Yne92 !6C@JG:/F;#-4H.*:@#5# + +  +   !"'' %/ !!# !!-:=21-5/)""&("!"##$2-,,"3-.+'4,0)5+;R;T'%2(N)+,*,;)$0"*$"!(.(11;9' 3, &/$,,'/5/) "!+5%)+5C4''# !"!;:1-A?AJQF?MCd]e_VNUOcDGOC<2J\V/66+'@VTWSCER@CGQS]9,2%%BD<53DPKDDCLUS:M*D0VSK64Y1>64=*EG;.+#,K6-,/TI&NSNW\HYKE$,*.H9MM,.Hj6#?"++#!6(:&D>'($1)*2(6+"0$>26,/"H?8)6P>EDEF5:>*6.#B@+//5A2./4.%20./*.*'8  %&'/"!:9@B4@+-1&<*#&%$+600;=6%"J, (67/5W[9@0+307<5?31(6'.71'%'2'6202,EV3!>EF3M8I:KT5G( 1'TTOS/'&*''-54()"""1"'$'$5 G$* $.DL*PJT+67LI'139>-HSRXc6&'1531)!3++ %36$&"%)9+;C'7. 96!#47)&"74() )*A+03 $ $'*$&-:"% !2N5/9;>?=0!%# !''0'.. !&001,)'4$13$ 00"(+"1%61""&10+.+-$:"&&/%&*2. +-643,/--74320/112/,/126571!+..1/012;87420/ ,*3*+-+*(&/'"  #22013/1.'!* '+.//0/*-*,+)'&&'-(('%'***%&%$! "!)'*',"!%(('&')&)--**+$(%"(%(%")+$&$)(")'''(&&&%&**()"#!"' %(,% *$$(#"%&&"#!!%%,,*/41)$*1 ')(+*"$(&',+3.,*'-( +## %$(#(&""$&! " ! !!%*!&#!-/.++!+-,.% "" &&#"" !W) /**#($&&)(')%))++,,)&$%&&$%.(**,(" $&&'&&(( " 0771%?&=6!!!W/.--/66971'+,.-5665:<=7101311021123//1/,-+,.01202101232357598:; >9431+/ǀ݁~~}}~}|}}~}~~}| }~~~}}~~~}|{|{|{|} ~}|||}}}~~}|}|{|{|{}|{{|{z{|~}|{ |}~~}|{|{|}}~{||}~}~~~}}}~~~~~|zz{||{{|{{{}||}|}|}|{{{yzz{{{|~ ~~~}}}|~}~ ~~}~~~}~~~~|}}|||}}~}}~~}}}~}~~}}|~ }{{}}}~~~}}~ }}{{zzz{z{z{|{|{|{|{|}}|{||{|{{{|{|{ |||{{{||{| }~~~~}|}~~~~||}~}|}~}|{|{|{|{|{|{|{|{z{z{zyz{z{z{z{zz{z{{{z{{z{z{{zzz{z{{z{z{zzz{z{z{|}|}~~~}}~}|}~~}~}~~~}~}~}~}}~~}~}~}~~}|}| ~||}|}}}~~~}~~~}~}~~~}}}~}~}~~~}~}}}~}}~~~}~}||}|}|}|}}~~~}}}|}}}~~}~}~}|}||}}}|}|}~}|}~~}|||}~}|{||{z{}}|}|}|}}~~~}~}|}|}|}~}}~~}~}~~~}~}}|}||}}||{{|~~~~}|{|}|}|}||}|{|{||{{|{|~~~~}~~}~}~ +߀ ~~}}~}|}} 脒¿篗óփ𔨫ƭ᷃ԽȒѵïճӡԃ܎וàէ̊͑ķ捥ݥڊͫ̏˰𩑸ʜΗ󃑙ߋЄɜǪƴʀΟ؝ˇ½Í난Ţ㪗С⊞뽤らؐÂ컼㖡ۭ疊𾻿…ڎ濑͗ᇕکƤǫ̽Ųޕ݊͟ϡĺҀڮؘȖЃَΏ߃Єƃ͂򅃇˳딀ӛؼ􍡩׹裂⪽؍ך̫ʳ甐ݖ܁ڃ߀쌞ݨʯߊö󿲴޷ێȷ񍌖ů񂄒݀ȣ񀜝Þ򆆝x䶱yԸ¸{򇊈ɽųߪij熟ǿɾӾŸдļ־߁倌Ŵބ쇖Ż帬𝣧¥܀쓢ι߁ƆӖʧ⿿Ȧ؂Ȱ󋊌ʫϔ׼ĻԾ˂ÇʠĤϯکڿ۾ްއ熋ςǪȞӈ׎׳˹ȝܛ㗇ӲƒУнʿńЬô信ηҼ蛬񼲪ַȧذۄ؆񸼽ׯسŶ˪°Һݞϒ񂂎Ǹ˷¤Һ߆ޫ뱙ީʞ꥘ǎȊϤɿ䯗ٻˊ÷䱎ܒ˿è߬ϱ焘̻葔܀¤ٕڈ󣗂򃏜ތ􅅈ij̶˺Ŀ¾ƹ½܀úļϯÿμԀмݿƿ񔜭©뱖ΡۿʪĿۗü诰ܐՖ޾#5;@BC:4gc:CHDC=7779;<==ADC@=>==<;<>j=><:9;<<=CDECAEBBA??ACEBACEFEC?==;8<;:9?>=<=<;>>@>CA=:;AHPID?;>@?>;;<;;:;;;=>=>ABA>>@DIHHHIHHGGEDCCDCA>>BCCCDIDDEJIEDCAABHRLKTLBENFG@@?=<;;;(58-!*/479?>8! ## &$% $$*.*&)'!)1",1+1#+>:65%83/#') 4=6;N-(%%*$2((_FMABge;$50+0- U!3# @$G@.'.-J6&*&)&)36# (:M:68CA?7DS}n,:;46NQ9,;9=7@$###-69=>16?CO3qU-}|k|}mPXfTmoqirletcQBU^]8~xs*C' 7*&4)+F3>,! 0%%#+.4700313381AOdZY^i`XuY`reMRZ^}]\RYb[hu~po^pm{kejhecplWdx{m=JVYWdqXoioUvs~UJuqKVztTdbhYh{gvf‰d_V}iy\`bijXZ`}E?*SLSTIei?cYO8>>88HhB;j9KdXK:H8-4IB@W3E@HAT-/04HH5E2O2D7+HP<"X2CI4<))L6ANSKB@E@>@ZdiMM0+,&>OP'RFnM5f@Q~ka_EVQf] %$D@Oe6qhuMJKSTSFAJ`:hh]>aRi=Fmyfq`KO\S^`Z^vb[aZNXTSTYXIBIWWCmFpo~MNMJOLEuy|PJUQLHJQOYb_AsRTTMNVRQVXSTUWRmvk]o[IP/(')(# @>NPMHJjrhuv\;:ov`IC[NVrkk|qnyvlokjywrpx|yVUWMYTQo܀ŭWTnvg]lk^UVvLXUTy­po{lֱsǯx}txvtop~xppm``]fggilcn|yrqxpsxyƜ»f{{rmsurqwwcgjnbZOM^QMYtcWolcnlg15568623mhBlx;:=?>=<::85667457632025507 ::86443..)&F7@5AGB%,24442/0/..-,*(&(++-LI92ZitvwAZnNKTU_jWU~bLY]75 "$!!(+*"#'''-.*/,I9==+,!,@J9FJG59=@::@H^S^JYIY[XHGDSLI1PFjNM#$##BD#&FF_JEL&=!$-3_PgdpoYI>CCJ9UEkchKq^W~qJvc\Jx<=EkCUXWHLTRPLK\df_`rsb=ZrvbhxtbOaT?BWlSoNZJb>@4316K]KFIH6557741PU`xwzouuinMN[UUYkUdgfbO^`SPVTQudhnrvj|yym_Yhrgai{{WfbY`_ld\ZXxtY]ZPj}foxuicjzrtzgWx{q`VflvxbJ^pNL_WiV}fTWU`qirfksir@FK32;5498>IW^NRmShl{rIpdYRzvnKKLUDuolmftwzY\{biViO~uaMaujv^}iepuÈdwcz\jhK0+02K9GZe7;A75(*(5N@ko^_wXbW6D?PS799ycqdlihcCLk[Pu7DsCI=NJ3,06>?TNnTFPs[N-?H;9B6COL=)CC2:T^I@UVT2LIY4USGBR:QKP(LJ0098G;Q_F9_C??><<=;9;<:=C=<;:::6RLR27766L2[>0=WE;?:&V:KEn?S:LN6[TW8@JH.k?:0@_SNWa14ab8;AKb>a;IZ`^a554eea^_j9::9:9dgdf32c5363cda67599<:65525ljfi5d678746:;9;98g`b244123a^[^][RNKL4ITK@R;?EEWbbfeeea\`WL>10IJFU_59g7f_[\YXbZPPQPOKIKOORRNSSSQNKKIFBADMMFm//@EOQRQPRSPMNOLUOHJYQNXSTVZSSVRVVWVPMKKLOMM;OEKZRRSLKHH?FMMHNQLOSENMHMENNRUKVPNNLVZ]cgjVZY^^OR2[51>7TWUQSV>Vic]\YOE:IFKJBCG5IB=CDAIGTXIFAEOMIMQVO`e3SUR^=ZLLMIHlDIW/DNS3457,R45<996314577656/YTJ?3]b]Y[^C6GJ>7TF32:536AIO@BEB;?>FHABDFMLB4bZ[FS?CBEIIGKKNQQPPOQQNRPV[VSRQKBFJAX]YXXXUK62d5442b13a_Z^`abe236Eiggd^^`fcah7ml7lfplfcceefhca^]]]_\^c_\\]_b_^_]`docekm8:;;:h`QNPFIKb990/!8896644655441112431342344533420035110.2211442025440(((+.,/0014<921/31131.45310.01110221002464347578753 !`  :97!$ 1! #(#")$ %!)&8/,'+,M7/HGM(& ("hk84,%   (,D+"@/.)02(-9)246#''//!"&#&$$")" &$!  &--.-*"  " "))"   +     + +  4  +    +   )  +.' +,%,?"# + +!&&   +m84*)'#%&"1 # +*'!!% + +      +    0) -"/#,", , *7#!#1.$2((.)"6 ;#".1 !2" &"&''*(1/*2>+ +( 46 2!*%3.%'mWGV]Wlz`]bop][bv>3!DGQQIij;\L>06845Ce>7c4>TKB6B0%3+-J/>:>96KB*#!3'%*1B3%8F')+(-",(=&7-!/;-I)419Uw\UUU;##HQE20Ze\bG>?C.6%***#&)85'-*C#'!!#$<0)+ %-1:8,"%&,1-OIE*?>@^Q1RH8^H7N('.H&20*"*('%%*,*#$/-7+*8;/374,)( )6(6-9/D)) "0=/-1/ "$%% /)0:AHaZPHJrZRdUJ8H;_J^I*)0FI>A(&=(H8/[=aBATS_=J-,(B'%A&%86%I:8>DATL>5BAO?CFOP86Q2EVDJ@@&6-+1*-+056)\85/1/7.B*/-A>/0*#,A/!UH&09:;47+$67 $"%)- $61,:+8!(75:)D*PRZ8=''F1<,#:29F4NA;+'/,.4),(03)/'+!#&(%A #520O3H8'-'6+-6*".7O7P_B,/'%=,#*"0#!8:)94?'C.#-_b-M5.0)*@6%$"%'*,,?((*:&74*,0,89++3735=F5(;=-)!6)7IP(-5)%4)%%;'$)1-& ,1 ,1o>_&%-78484??_K9DgUC(5--1& %>5+"("*$-2.#+$9K=5B:5./B':6/(0769',!!,$5A-!"-+$8#'($%..(q75BIG"!4& '+!.% #5$ g $ $*. 0+&)#:',*@%0!,);84 %,+=$"-E?;?E""AF*((/:!1#)--.21.,.511.0{,00-9856/!00.//2563541-02,-+,+,+*&%$%$%(.,/0121/3,%%-210.-+*1.''('&$$'*)*)&(((&%###  &'%: %&&&')*('(*(-'%"+&#)%%'*&'*''&')'&%%&&%&%"*&&(%$!"!&&$%&#%)&#!$ &$&(")'$$"')*/47)))..$$('('$$&'21/..% !!#!%$  !# (' !"'$!$%*#-/"##(*###" %!" '&"+/,+-0$$* #& !" $# 4+, ) %$#%$&('&''((&('*-***)&!"$#$"+-***)(#"$()#&$&v)' !!4,39#9<:9B0-.--/,.-/./5463/..100444738721234573410/./-/1001013102/259127870&#$!+Ā܁~}|}}|||}} +~~~~~~}}|}~~~~~~|||{{{zzz{{{|{|{|{|{|{|{|{|}}|}~}~~}{|{|}}|||{|{{||{||{{|{|{||}}|{{{|}~~~{|{|{|}|{{||~~~~}|}~}}}~~~~~~~~}}{zzz|}||{|}||{yyyz{{{|||}|}}~}}~~~~~~~}~~~~~~~~~~}~~~~~| {|{||}~~}}||}~}}}~}}|}}~||{||~}~~~}}~}~ ~|{{{z{z{z{|{|{{||{|{|{|{{|{||}}}|||{{||{|{{{||{|{|}}|{|||}}}~~~~}}}~~|{{{|{{{|}||{{{|||{||{{|{|{|{|{{{|{|{|||{{{|{|{z{z{zyzyz{zzz{z{{z{z{z{z{z{z{z{z{z{|}|}~}~}|}~}~~}}}~}~}~}~}~}~}~}~}~~~}}~}}~~}~}~}|||}}| }~||}}|}}~~~~~}~}~}~~}~}~~}~}~~}}}~}~}~~}}~}~}~}~~~}}~}|}~}~}~ +}~}}}~}}}|}|} +|}}}|}}}|}~}|}}~ }||}||{{{|{||}|}|}|}}~~||}}}|||}}~~~}~}~~}|}|}~}}}~~~}~}~~}~~~}|||}}|{{||~~}| {|||{|{{{|}|}|||}|{|{|{|~}~~~~~~~}~~}}~ހ~}|}} ӽľ'τЀ̿¿뷝ß驲ʱՁľꛜ﹕ĦǷ񁊗¿ϯȳ׺͖ʉ܄혐Ɗö̐М«DZԄбֽˆ‘ऽ䌐ƥڈŠڄ曤۹ͱî䀅󭘙ƿ􂛿Ԕ茂٥顜ϧطп셬±ٟͦ˳˪Ѕćϊ蜨ϥ޲衽⃆ڟȰ瀞߇䟜߃쐲ۇÃ܁ڏפ킌޲̱Ǫຐֲۄ򄂔쵞àХ柳嵓рޞ󤤀ǧ펍ɼٕᆎ׺񝙋ۀѽ۱ؔø܈򀰾ƁЭƳ􁆀ƽ횭}ֱǽ卄tցĺŶʸ񑘤Ӱʹˠ酏ĀĴې߆퀔򆕢ܾׂIJܱӫދ̿Ϡ͙􃄂㱘ѧŜ۷Ӈż²ɜĎ˿ި«Ꝃ񞸝򚒐ƒְÞΤ뿠ްȕʉႊҺ􋢩ʑܥ񤚭É݃Źخ߽ܝÿՠݵجݔ¥ӌϏƂÀ׾񰉞߱鋵קܼۗķ̆πϳ穣ᇗܱ׆奄λҔҟַɼ쇉㜁ҾХ鎀ǹɊҙދ̪ӿ갛しÀ놏ʞπŽ´ÿ¿ѽѳߏ̻ýѼ˼ŦǼʼͼľ̹߄ϘኌϻН𩢠ϻπ̿Զžۂ񗩴Uŵٶ65479;D?;=9knifdek8kliggigbdgfcefeg56755465heh6lkgb``[aeecflijocZZZPCGVVSY][YYZ\]YWXZ]__[[\[\_bb``]eib_]^_ck556;=;;7855iih68<544M6AA5f7C<997678:::;<;;<>@>>;<;9:p8:;><978;??<>@DHHC@>@BFCDGJJEF?::=<7;88:>A@>=7o==<<<@B?<><<;<<<=>?=:9:DHED>9:<<;@>98:;:=BFFCHDA@<;>?==;>A><=B>><=<>@BHKKJIIKJHDDCEEGGGIFEFEEEDCCBBDDEDEGGFOHGDEDEDAKF><;;<=<>=@@>?@A>=;9:967;67534][-<[[G=ce6"5&@>KWFkNdo~up{ufmokbv^lm]n49`F>9UGOLL@[Q -/ &,2,()6=;6*G$(*<<3"1)$2=761-$-% '.+$ ! 3'70#Q!21=I!'0!0*?'.Z2Q'/"-.6#@FDLX@|9&&#-24(&*#ZL4#57+&'A;)'.%+)>8->"02?6-A<7E& oO8"<=@'!Vw) >! @62"!+%$K0H;awB{i_v~socSWtgmk\|xiQUc_24W/IQ9aC-'!+!C#! "*1#/61;'*,#$!12"..*6338!(wpnVMwq^R`jwqJq@R>9jrhy|r[s_yoiimv[d[^}_[nvcNodUEl[yQATY7^ciq[yrcoGEPncuZi{udzfvALrZfePV_hbRS]{BNW>p>I>WQfOO3GV=L=;bi:[]5?B;IJF9*5D8/B=M0:2Q.?)Eb\:.DY?',2"%D11PA6-O9#IB?V//.8A?.TGDGJ/0<9?KFKNIVNXPI33HS\J0ESA?ITYdyXPPSIIeaY[Tw[R]ZQQQVWUOOROPPWSPxn^Q{VJS4(#!($+?<&S30LU|FMdb_@[\RNHIEFQdebfixyptnmjijpuxt|xlpFUWZUY_icninvnoihjl\SUcRrٵҀ|m˨ù{opqyyqywsspwnwoxwzzrdgkjmiknmuxeox~{{}|zrhtzrjrv~~bXmt]noj^RO]XGRenLasjgike/568845`ehtq9;>??=<:77588967755324634>?BFEHGEFGIJJ?<= !#"!<;89665662-+)'(&LZ95_>UdwGFGQRQXVbwcn=@}>>==946#%&$&'*)*'&&')'+(*-.J?;7-*+,5?IFSEF@@DB8_;FECfi624?"":  <3/.. #9+*('A;73EJQffSSXHHIP:=?B=:(C=T0@@EHD=9;>8Idyg{`~wq}f^Ls{Sza]cD[ZUQgygjgc_erW|swtbe}j\UwYTS]tT__crLi\cpffeo`wrȟB*50;F0?G:SL:F>N\4)+(>ApacTbwmF1J=h5TC:fle`cY`ZkwDB[BHPpMd'IL;H6FJ687WcL3\&8;DH<>NL*/@;9QX=MD9^68N8K8;4+3&0757+1bRIKOb=C>8KA/795A9NK=7:5MI<@>=<=>3O58S66=@;:;9>;0^269]DL<0@3H`C.J@OXXd;l903USQG@?H]k86\D:3/UU3:9:ifd4345432bb4243sc``6988::721444kbb8h5;6877;<;:2`dgh457877877:<:;>:63:=;889:765464688pp78l556gh6hhe^47749:;836?A=:7563576667878;98778k9;<<:8::lhdaf331`11_\]ZUM?0@GKMSXEMYab_Zahfb^_^ZTNNF:ABDN144ceb___U[[WRRMKQIPQOMSUVUVRPJGFEBBBEIB58J:ENXRSPNMVPIJIFKTJKVOZZYTTPORSUH5ODD0>AQQNMMQNT\PXQLAJKROJQNUTLUKHP@MUSQKRUYOMOUTYX[TV`a\a[^_68BqdMPMDSOSOOYB_`XVULOLOQMIKIGFMMRNRSSLCFP)LKDFQRWT5XLJFV]SQKNJac3J1QP12-/QZ044>N2-0546871WNE=6028\Q:-I87B>FZYD@?>F>CFCE:NIUIPH<=:P5?8^QTSSONC>2CDA:[bi^17a)JZQA3.T<953W1ada^]Z[_cadd36555hgfc`_\bfcafkhjia]hnonjiggca``^_^`^^_fghed_^^_WJbfgn678n7:\IZhqln6f6:#77553343431254213200221a203775212024324545:4/-.)"#-,+.10/0014211/02201100135453583111346443-B5  84 ! ! $ ! &!! $"('!380,PW+-2$&#!C80;) +     '0048"$.("#/ )2&)$.$"4#! ),+)6!-' (-%$!   +:  + +  + +    + +  +  4*     + #   , 4+"#+ %  ),$!?#8<CTL! ,*$*!!)& +   +  + +  +,$ (!)0*#(4:) *5$! ")#*-0",) *"-&' O-(; 039B# "')/% (/ 3*!-z1,b[irSV`egXYa}@DQ;TO\F>&8L7F::\`6VT*052>=5*#2(&9.?*3,B#+)+2L3 '3*<-6*.B'()-78&<.-17&&426@2$ 1),36* <@0+%UOL$%0(>F3<1]G'%/SKNoZn]1WY?-3JMD_k_x@?EHvi^gQMjx{roTacZTOFSSORRTQ~@B?PRPRXJCJCuw9JP\tTOMRGF`aYYR}pXO_[QOQUUTNNQMLNSMIxpskbL@rdC8@'.-A( 5Ae:r>DC<,7?<85:2`npjq9:@87IK_B8@D74C2046;F;*%)-'("391,-.3==5=8,%)/:-"2+."H@;7&&+B72.-4>)$.-'#77TEPOONPEX^T^VXA,?K[L^::)0D<7>B>?I5-,/\eYgRMg\F76-I'%(1(?#5/(+NRQVO*0-/(.T533,1/;2>E,H#$ ##EN:%3=,+10/0L,/+EE>$(:7.8:) '''#7&;9,H(A=/<=-+.1F31&(/"$**)!!""F.,::#PE/-12,B2$ (+-1-8=3E/;0$&;/6593) #9?=H<9L9%&5".#"&2'8.\O2;C(#'@0+$*H$, >#*(?1#65&&0*@:%6*9?##*&.! **1& =2@4"$*   +1,I3o7)+0/FP='K ,<17>MM-7.K<+07F!'"&"&-*8- $*! .6A,*E245(&$%356(.#"/0& 29 -(!1 0-$!*[F447D(+)%3*!('.#%& "  (' *1%.#"* ,=* 7-8=;E%?003/*).;>0$!54!'$#$,0&)-.,1/)+T/0356 40.--/--7223/022099613331-730+.-,**))%!!"%$ &,-,),11/./0/,(&"!02010,&+-,('%$'"&)&%)**))('$""!!#"'!#*%'&&&((*0,''%!$)"#("(()'(%$'&($'''%%$%"%*$)&%$%('#'%))$*$"(%)&&#')+&&%)'*+.('./-0))*40"$"%"$!"(,-*))#&&&('$%$##'&(#%')("#(%$&')%($"V '+&&#%!,,$!"'!'#.)'$.)!!#!!  &!) &! &%$(%'$%%'(((*,*'&'&%*++(%+ %%&-*)&'(' %!+)#%&'%&""!-372"<7>7'!*,--+-++-1121455210-1432466860.5:;;8556431 1...0//0566441-$11277."-3754.~}|}}~}~~ ~}~~}}~}||{z{|{|{|{ |||{{{|}}}|}~}}|{| }||{||{{{|}|{|||{|{|{|{|}~}{|{{{||~~~~|||{||{{{|||{|}|{{||}~~~}~}}}~}}~}}~~ ~}}}}~~}}}|{zz|}}|{|} |{zyyzz{{|}|%}}~~~~~~~~~~}~~~}}~~~~}~~~~~~~~~~}|||{|||}|~~}||~}}|}~}~~}~{{{|}}~}~~}}~~~}{z{z{{{zz{ +|{{|{|{|||{|{{|{|{}}}|{|{|||{{{|{|}~}}}|{|}~~~ }}||}}}||{|{|}|{|{|{|{|{|{|{{|{|{|{|{z{ z{{zzz{z{zzz{zyz{zz{zz{z{z{z{z {{{zz{zzz{z{{{zz{|}|}~}}~~~}|}~~~}~}~}~}~}~}}~}~~~}~~~}~~~}~}~ }}~~}}}~~}~}~~~}|}}|}|}}~}|~}~~~}~}~}~}~}~}~}~}~}|}|}~}~}~~~}~}~}||}}}|} |}|}}||}||}~}}}|}|}~~}~}|{|{|}||{|}}}|}~}~~~}~}|}|}}~ +}~}}}~~}~}~} +~}}~}}}|||} |||{{|~~|{|{{|{|}|}|}}}|{|{|}~}~~~~}~  ~~}}}|}} ĩɬΜȌ胝¨ۈ͘͠卉즉Ī ՝΀ܰᕒ°İ˵™러ɲ⬿񥻉Іϡ񆑁ᠦƮـϾǸТ򈐙ˡރ⍲ա麖Ơ΃Ӎߩᤜˆȫ㢇覀˜ܐޜŀላ鉋ܵڛƌߪ֍ը쀋ռԻ˺ן랚ΰŒѕԷďփʬùȤ𐎝ȝżʼف۠ٴDz̖ق׽¬臊􉉔ܚ؃ӹ灄х۽񙩿ò銀傀ǽ}}Ǹ˺Ք̃ڙ}zɴôſîӿĺ။Ƶ¹ƛ𩣙݄іʿȲ̩ׄġҥʳﲴݘゎݬŀݓ􁊏籨ꁓΞ愄뗳۲Ĭ۶ġʚɘƱ߷Ƹŋ؀¥񋆇ɾ˳ɦʦӋϐ҃΀턭銒ˁӾ߲ˬ؇ۿͷˑҐۃ큜Ņ׀蠢נ񌲜Ղʳ풯䍤ܴ폂©ʵ荰ƥ񁉁ߑͲٲ鋎ҀޚȺΉīߒ݈˻݂ⷨȽ‹΍ͩ럀׺ëɶ̋԰٨޳̆ʽº҂Օ„焆ܷ¿ɿͱëՄ¿Ž͸ʼ䲘»ʿμźǀѼӭ늆پ̫ꤰʁDzÓՌþȷ䫸ԶʀĽ߁­Ľۥh=766h;AB?96jgea``dfljdfke`_d45d`aZf6787389;:997798ie]]_goeabdba^[SF7R^ZWYYY[ZXVXXYZ\WZ_^ZZZY\_hjdbegjd^`ab`i44?E=67986fli6:;::878D7679<:9877788789:;>AA?;>;9<>>?A?=::<;9ln:=>:9:9:<;=?A>;=ABFGLIHKH>>=:9><<<>>98<<=>:66=CFC=;?;9<<:9<@@DFFGEEBA>=BB==AB?>>?@>;:BFJMNMJHHEFHKKKLKLJJLKJHGHFCEEEDEDGEFDCF?>?CDIR^FACA:>A?>AC@???@A?>>?:6;765433`P7I/P3?;M>:7T5H0*+34I^UY)*@"##! 0?@->!3J#-'-GkMmzkHIugki}dbp^>1PNsesR=Hewb.TQJNQAZDY3&2'/) %.46))NF[6760&$'/30,-471) ++/))!$";6""!(  % 4`|R'*(<&35G8 $#*P5 #$+H5;TP=,/('$'23 "9)D6<##3-*237!'&,%"'SM/AJA/FKWVN?Tov=2WB@pKAl:OBd/(/7&>721*6^^EKKMTMEUGN>DaagKohm]}f_[RHHOOgoult=xNUSeojUXc`Q@fki[ansjzXPMMQOiihGYZX[^`ZRRSTZWQUPLmbaPQle]8,#&++%#/;)R/,:RIqHZem}b_QC<=<9777:998645564886:?>CHIJFFHHJKI<=! # >8;=;<877430-+)%#IJd=@GEI#$+0112/--,,-+,,,++,***)/8BGTdvYUGOSK[a_rne>v7o+##  #$%%&()+)-.1%#")).83*)/HA51345 ;DH+KNRN<2YVDEK4mVJ>oLADLQOm:=^2I=49@;.215>8>!A@$#""B)%AFGYAVdIkOG;9#((i[iQKK;7=2R@STL-:B:<VQLX8??Pa>XbXYJJGJGB30^\l?=LEjCxHTTsoM^XtoRJov^KL[XsYeNHmJM3+SATD+343=AhClnjbaI8DNF8;SXynvwr|ZPHLVig|[VU~yWQFJT}}Xcwl[`~vowgj~dnn}l`afufwqYOXW_aX\VPTNU}espn`yήgti\`wgttaytwhWLrges^fafNk_sW^kmlkd~CYmhb^ecbmCCE947<>=DoyTIBB?[mwoVRy`ZbN_BQS]VbQgbpOVatki[_zokDYXv_S@gwh{oW]fb`mf|s~_`R]vWjy}ePcdiIV.GKX@>FYJE1E6>P1/&$(KZboUU}hL]G=W8GV@]ZN`be]sQGvF@N6O.H'l5:>0B-353:AQ?T41F\H9DXk6SJ1V]YF;a6=AAHB%DA7H<>J-SKDK/M626:K)=6EIDEGA=AFIQVKLTD4e_E>^6V/8IV:NPMXQJGVXS[:;gX6?S:9:<<<6e^dgfd77657768;8<;=;5438:867;;75467787q:miegheb`cbe`c:;979976b369>=:7 +<:8:7778:9756678957edfa`g43c2db[[\YKM1L`^XZ[^RU)aib`dfc^]a\VROOI8GAAG0`b^cZ\aahif\UQNMOKRQRRWY[\WPKF=BFB@;=9J#1C:FLSTSPLLLNQVPFJIDOPARSP]bZSRQML?88*TBOZVSR[YUOQKTNO4YQLMKMPKNQQTKNLHHGGSQKEDDKS23=X7219>ISNW^`[3;@<8XSOLNYVWUW\[;a5`SPOUVKGKJLILONIKSQMIMKMMKINUTMae]QMOKQUPS\5d\URDV1WULM[2[Y=;J3N0,,..14:4[WNF@=6_M@S9?,R@9GI0?AOD;83??H@NUOL=IQTRcL7L:KPPPQPRQQRUVWVTROQNY[ULHJJNMOF9OHNKQSSQUUUWSFHSNdAA81UU[ZNLJI;8CHcmfm_17E=I9V"46N>:6554432d^[]^^^[\b``f45576iffdcc_Y\bddbcc`_^cmqprmdfdbfeciegdj<9hf`b`]VLin:879ojji\B`p6dbgacbQ3242211/014303730.11./*/73//16<3022111/+$*2/.../00/-01&.032001/016;756662233525!253!55,"  4M !!  "&0 (!!-1/9(&%2-#!%ee.)&   (-)+, *$ I/ )+BO> $)) #GBP/,)  %# $ + ,:  +      + "   (* +  "$(-%F4. + %%  + + gN/- +$%,!'%+#* ( + +1./! ' 1I) $%(!($ #" ! ',%2!:_$ 0$45H#5%27!!$.&'0*%( '$((&\!"Sclitor{qTga\ngb{C-."8BJ-+(0@<77G+0+5:ca>!!!''E*-9+ %28O5;) ;:-"7+F$+.12%1&,3<:&('- *(6?<8EM1  Q-% @'/ 7"$32-*$,NRELPPSK>H;?,CbgjNj;CPfSXmbviXNWSM>jpfmb^THHUUfnsjp;rIQQbmlVYa[L;Z\ZT[dh_rUOIKMKccdEYZVZ]^[RQQRXWPRPJw{wr_SU>?eIEG.# $.?! '@;];JGIVCE@3,02;4_9cXl:7ELFDGCGVLMcZRWQcbk`c]XXps{~{i@8cguB:Cg}gqid]vyyzđbQTâ¿ؔă㡇򀊊񃃐{z{zƺ˳ȿoõhsttmRetpbVIRSK?ITNNqynjji]*0//-*,TVda/03532321,+),,*((&$"#"#$#)+'+.//++,-.,3% +  9?\79:3.#*2?I93+.0*466B@;#B$D    +   +##'' +"#4*/!," #$*-6+?O7L"FFO8+)1-A8, "###!"$$&#%"&1%"A!E!,=67;"3E.@B.B/16/31*;5@%% 2%=#))//#,)6- .4-&&.&2%1( 4"-&8-!#)+E+EHF;;.$,50'&12BK@>FGFN<3+/`bG.:&7B<7@)E("&.MUgYO@G@07H;JG&&86534@7:FKL^?0?408>1P=22;>4B5)+.9#A)$!)-XZO/1+0,&('*KOJVORG<436=,Y2(/(-#<5=\A(0(+.()#,/0)M@6=*<@9/,<.'(,V/&-4/>+.T..8048=:N(3/00+*%&2#%( """#**$ 8?:-210."$+).)/8!.%E%==>/+$ # ,9$&6-&%/L2%,3S46")'"1y0-:"N4! 6.H275525B4""-(=82!2 %8!&6/') ')&& (-2#$  + + $ +fM$*'.1B6E$4E4,=OY':9)LMC1%A!"""!"-(&083-3!1&.G3B=3)7:+184FS(2(4"%''$"(. ' /54N"'22:#4@.'*$1:0%#.)-*-*((08434..135;?98>+7/"!5#9$06"))&,(&$,+),.&#.$(+--/+.*)/r-/63.030.-,,0-,73-2.121/:861352/.0//.0.312.,/..,*))(!"'.,(**(!".1.,/10,,/.,*(&#$ ---1,.0,0560*('%&$''((*,-/,(%!" '$!#%'''%$&),2-'(%!''('$+.*(&&$%)"$+''&,*'%%"%"!(&%%#%'$%(&(#'&$##"(&$!" %+%%"(**(*'%$#(%'%%)*+,'('**%$&%'$'('#%,+*%'$$%#!$((",21(&&#&)&(,0,'&&%& ")''(("/)#. #'##% !#)%$"''&3#&%'''('((()+*++)'&'&,.A+%#$$'(*$&#&"')(%'(')'!"'#*&(,*$$##"%/95:4!,%5+9" %/,,--,-..20./74>52.03453320/.289898463122142415432220-'358455./4..0.//~~}~}~} +~}}}|}|}~}}||~}~ ~}|~~}~}|{z{{|||{|{|{|{|{|{}~~}~~|{|{|}|{|{ |||}||}||{{|{|{|||{{{|{|{|~~}~~}|{|{| +}~~~}}~}~~ +~~~}}}|}| }||}}}|||{zz{|}|{|}|{zyzz{{| }|||}}|}}|~~~~~~}~}~|~}~~~~~~~~~~~}~~}|}~~~~}}~~}}~|~~}~}||{{}}}~~~~}~ ~~~|{z{zyz{z{||{{{|||{|{|{|{ ||{||}}~}{|{|{|||{|{|}|}}~}|}~||}|{{{|{|{|{|{|{|{|{|{|{|{z{ z{{zz{z{{zyzyyyzyz{{zzz{{{z{z{z{z{{z{z {z{{zz{{z{z{zz{z{|}|}~}~}|}~~}~~}}}~}~}~}~}~}}~}~~~}~}|}}||}~}}~}|}||} |~~~}|}|}|~~}~~~~~~~~}~~}~}}}~~~}}~ }~}}~~}~}~}~}}~~}~}~~}}~}|}|}~}}}~~}~}~}~~}}}~}~~}}|}~}||}}|}|}|}||}~~}}}|}|}}|||}|}}~}~ }}~}~~}|||{|{| ~~~}|}}~~} ~}}~|}}~}}~}~}~}~}}|}|}~}}}~}~}}}~}}|}}~}~}||}|}}|}~| {||{{{||{{|{{|}|}|}|}|}|{|{|}|~}~~~}~~~~~~}~} 򃆇Öù䅏퍎ɩǑ椑伅àӲȎ˼޻ҋ˻ᘞи᜖胖˷ԮݖȖ฀˜׻Ҋքŝރׅ垠ڊǀü⩘򇍎❟˖ݬۗΥŵ駋㲅֠οɎځчϦ۸ѵؐáѻݕӃٍ̟ҪΪſҖ㣋凞Ԛޕёݬê؀΂щ쀓ႃ«ꤠޝߞ͌Ԓְψі߄߀źɜ􁼕ҿùێ՗ڂŭ񖈄ꭺʯЯð碭کΗ򊉘␈􉛓ݽ̀ᄇⴱȶ傅é〦ݾȲ÷ᔢ񝞞ʿӽлŶ˽±Ⱦ÷Ѹ턊ףӕ􁾿𖞥ðϱл톘Ϟˀ̺ׄȺ꩙փțÃԹȻ߄ʺևΗةģ䭰懏ȇ۽ħ΀̀ޯ⇃οږҼǩƲ“׉ɯҴ怘Ŕ㣯ͨ픦͐נѼ͹Ԧ𧥠ӈϏ̮Ħ唚ɂ̀ѩ酇ýNJѪǽεߜܸ»傄ήޡ٘秬ʹ쪮׈ĔϞ򞝝؍딠Ű∀βϱ״›ɦׇ먒ߔ񉑆ٸŅۀDžܨ㙻̝Ŀ񄉋·ȿޤ鵹ހĩשǶֹꁉӺ𒟈ǻգ»ʍѹ͵ڋì»ǹĽȺπʾݑѡĸX_k77ijj7;F?776ifda_`ba_gf_`\^dmh^aYf7887c3689<;<:98643dbbdcbadaYQWT>KZWUX[[WXY\YZZ\Z_ZTW[VZ]dplgfd?><==>@><:::87899:<;;:;::@ABGJHCB@>=<:;;;<<><:989:<>??;9:;:?AC@=<::;9;B?DC@A@CC@@><;9?CADCBA@@A>>CHADBA?BB>;:=CIIKKLJIJJJLJIK LLKJJIJJIHHGFGHGFC>A@@ACNNUI?AACFF;;?@>@B??=<=A@>;7i7:672`ZOC7QSL8MC4T]4S72/2-_qZfa\,&%C=T8<94<^D%(2?7=8%+!F1@agvql_~dJuYZo{oiUUpmQIIDUO*@A:Nt{BG^V59;5?HQ1/6+(,548e=>@=3/121+/100+/1+%'&%+)-.5G##(!#&*"(6NWM> *#+E^lQZ.A6'*7L6&5%#+** !+5+(!S10p+.))(%0%4#('LH .2&07;/1F8*' 7M-7#$/&&&(BC2&H;%B.?6JGEJ;>TQ?;<1RfB+C8B%##&%'$$<9.(+!"&'$ "*&"Ek[&B8M~_NfyplXr}z $18#,/& ,%$"3&(2<.,$* %,"!03pWh[1JDKtr~qNqc`cgz[WZzTI`tridwqfXpYmweqmdl^e^cZoukSdQlhQX`yr{`Z@j?y\B~n4m4xGJȿu][w|rgv-A}k{x\wrmKcrpr\o`X]Q3S?;d9]e1UMUXbW39hUS=QZ:CW^=KEH1,@T7*HVdotroTI}PVKKGAVX~xET_xaIu?EGMslmJKSVZUJlgnhZ\yp`RYwRNROKs~N[UY\]ZVUMTSQSLMOOvR\[QsbH5"%''(D$&?@FLMF6G6@@IPfqNHEBHIBKHGROZ`fjfwxwmibknru{qr}yMUQSjm}{hPkmrqq}lobHJ]fŴ}|pk~}wskyrpkgz}~yxqw~zntxwjchhgknhll]_nz{pty}skǸdiqcfAais~wcNWip^YNIZYMKDmQ^kkdbcfd6789XbUbc6:=>?>;:7879:86673654488:>@>FJOLHFEGJID:> " ! :4;=;7577510,)'$EDDlAEEDI#$)*.0/.-,+*+*+**7dGQN_Z:aSKVU^pbvATg[7]Q>E`JZ)SK`ZEgRNcikO6('57##@ 2750>$=95%OPaSHQ&$gXVJTH<7AJ;;XOG-6=E(JABCCCDFGJ''&'()-*$!6@C5LE:tBA_o_sMCBGYTMXVA4XWgJNZ_=RdKK@;@TtzxkpH?~XTWgfhe_[PItelTOddfWashn_`mdswqwaxluo}hjfzk{~uomSqX`dvcVYUrhv\MmX]lubrgsi~dQRy_Q\Qw|kEg_OJljxuH7Mocm`UifagB<166,&/=Arf[KSe]VmwiyW_umRa`]`YujhlYswyV]hp~Ϻd`[k{iqWbZiwTg\Zm]yuYU\zoul^ifWtfn_Gmm`ԓfG{thmAbOFD:6H`,(BO0VK?fqlrm^fcSSC=E5=OCSuUpncdpWdX~Dl::j:14E%bn6@'1D:YSC>>6D09=TFJE>H8CL3GN5SRT=\OKA^GZ_@,DMAJO=cN[7NJRd2]ZGB"..7/.8E3_[DEJNJECIE[LA93>A'bcZT283>?f?\C.\[5/NHM0M8Pa6777A6&F@BAHCCABROONOMJS1MR6>7KS@DIBABZK[>NZ]bd_agfd_U>GDC>@@CJMNLRUkh;7cdgd_f\]bfadh5457546732d4e242498.95213745c[a668:7:<=>7ffgh367545698887789977688:3c3798465456899lg54dbbcc`e446887954b498:<:;88899;:97869:7667653798<;:G=KH>8>:`A^WG@MQGVQTQCTOBXXJN3=5[XTNSVWd^Q;DX:;]QMNLFKHHPJIJNHHMIDJNJGII]URNI:daZUHESSUV\fdf]aT\Z\VQMXa_SGEDCEVOQP,+,071WUJ@:4V6M5]8QU1YIM3FKSRJ@BJQOJSWRRPQYRRYVRWXPQSQSQTXSKKMPQSHHMJVSNMFGIHGMI_CJKJNQNOPSOQPKKUWa>>80UXRPRPLHD=X<@:beVDhX=TQ?[)>8K>;:853ee4b^[^```b`ae5ge456kgedfinvshbb`[Y\\__ZZ]acfejicegdefecd8=8afjhd_[[gnqklhffheWHim5b__a`-,4554 4330/010/4400-.263/0*1-%112331231-',,(/--.02/-.//012143/&000.04><964!73200/13355235  :! *   #! "#( !"/)% #'7/7&456$#!.G:42'$, !   '5-,)$/(&-$%!HE9@(&%+.8(  +$"-03%, &-4c9993$ "!#" ! %/ )CKF)  + #2.,       +  ++  "% +   "!35%#+&$'(# %6. %!&* , *,%$ ! +  !)"+"3%  "&(#$&731&'% )(1'3 !,&/L$) ",74$ + %7 N8E524"!:*1Z=:vo{w_wvqJfrpr\qbZUD+H:7]3U\+GEIKWL.6cMG/BP5=EQ=KA9!/B)/37%-*)61+*! FBB5&10:O21**# 7"*%' + +$ .//2=c_h3 #.5IX4' ***@+;2@LX\2yO<)#3/248:5,5*47?AP^R8244682556@>KNFABXU[RKNIwWXVSX_YWWzkek`[dppc}qx:xosD@vnplpvzOfhxzgRgm|nSP]^튀|}Ѽ̻𕋸q{{~㌉z~y{zz{rxҾyi˳cfm^b`k~uS[mr\UKFVQEF?hL`pskfee\.///0/.RMZX.1355632--+./,(&'$%"!"$$(++&,/30-+*+-(   I 585'!&!##$##$')"% @$%5KBP812&("&8@2#5%O;155;&5HV.-%#B>3)'++$<&6.37* !*-"*/&&*,&$$'!!04>(1*'.!$36K4>27CA5%M?4,++5>OCJLEBCT0*Tf]b2()/***++#!59;,5(#-04*4GWWSKINPM98,<*0/H?6<;@1H@DQ;:8386.+B*==YDT63=N<08')/,) (+:REA0YQ[P,/.GDFGJRYOA->2/!!8)5CAJ?K"/#%3E#&$1"6;'.,C54UL3@=60&/ !#76 &#:C()+B>9/*%$ +-.-=3KMIR#"'+%=?*3@"A+8--!(($,'#5E*5 9/"*%. )&##$#%   "_MB~ *11-..VB%$',+/JV0-:3:<^C:2!'  '$ ."%606/$+-9 ,0$45<.A56/G097 *3&#&!=#1 +)0E*'(&*!&,$LU<4.-(((,':0+&#-32/&#2 +%56&"%'&.#0+/.5231,4345776<",+ *2+/3-++9)/$*,/0-./,-+)#!!%&%%)(50.033/3,./0/12012-/012110850../.,0/54520--0/,+,$/0&'+*(),*),'%/00..-./.-,($%'$"#%(,.,*-.+0//+)'&&&%))(+')*)-*)("  '!.'&&((++'$#$()("(#"!(&-)"')'%'!*! " %" )$(0+'%'#&&&%$#%&,(&)%''$$%#/ /*!#"&"%$%!&',.-'(((/)#%,)''%"&$$)%$%(%$'%!%&#!""/(%$ 23/,"''(*.324,.$(&'%%#)--%&! %$'/.+*' $ %&#"&%"&(''&&*&&+)'**&')((&(,)%$#&&(""&$+*('"#$##&$-#$%"%'%&'(&&%#$)*+'*%$&&$"!) 15-&/%36.?+ ..-.,+.-/200310632357;@>9522.,-./.,-.0043761332110///34431-+1695753465-#11-,-0. ~}}}~~}}~}~}||}| }}~~~}}}~~~}~~ +}}~~~~~}|{|}|{|{|{||{{z{{{|}~~~~}~}~}}|z{|{|{||{||}}|{{|{|||{| {{||{{|||{}}||{{{|{|}~~~}||}}~~}~~~~~}~~~}}|}|{{z{|{| +}}|{zz{{||}|}~~~}~}~}~~~~~}}~~}~~}~~~~~"~~~~}}|}}}~~~~~~~~}}}|}}}| +}||}}|~~~}~~{{zz{z{z{| {{|{||{|{{|{|{||{{|||{||}~}|{|{|{|{|{ +|||}}~~~}}| }~}}}~~}~~}|{||{|||{|{|{|{{||{|{|{|||{|{|{|{z{z{{z{z{zyz{zzz{{z{ zz{zz{zz{{{z{z{{||{z{z{|}|}~}}}~}|}~~~~~}~}}}~~}~~}}~~}~}~}~ ~~}~~~}|}}|||}~}~}}}|}}|} +~~~||}}~}~}~~~ ~}}~~~~}~}~}~}~~~}~~~}~}~}~}|||}|}|}~}~}~}~} ~}}}|}}~~}~~~}||}}|}|}|} |}}}|}}~~~}|}~}~}~|{{|||{|}~} +|}}~~}}}||} |}}}~}~}}}~}|}|}}||}||}~}~}}}~}}}||}|||}|}}|||}|}~}|{{|{|{|}|}|||}|}|{|{|{|}~~~}~~~~ ~~~~~~}~} |űƿýɿᷧ߀Ъǭڎرę”ߤΆڏŨ˭񂐮鐊ֈΆÛЄ向ޞȹ祃ܔۗγ󚡽Ӳ¾璃õɐׁϧʝƁЖՋԇ޹Бȼ侲ŮƧńğǕקҊԴąՊÕɑƎڻ鳾嬮Ɗĭҳ选Ń制˯ے⚿ُꅂײԴ򂅏٨ɶٓ塮˅ ˧얀Ф􅘛䔟솙֪݅Τ녈퉍ߚ񉗏􃝙߁ȳڄʼ˧Įꋬ¢ʹͶ̵ꄑݔ놗ϤؚٽǽƷϲþĻϾȖϼ̵懔􊎌´ƽů犙сȾڀ􆜹觰ÿģŷDžʵߺ҅ВÎ׺׎ɤ҈ϑӨƳ얛ƹͣ⊍´ڍد퇇̻܄ۖқȀփցɷư们҇ʦɵڔNjΚǽл勚Ҝ̩䱲ᓎګ͓ĬŠҠ➅잠ϳή̫ؐم샛߸̷͜ĜʰΫҫ悘ʘѱٶ茙򁣉Ńɩ赙ÏސLJ׼񕨤ĿߛȬϙ拀¯喇ʀ݂돘ɥ֎ȁДך̨ۭ̿񂅂񉕐􇆁ʼؽǽ¸ĹΪʾ´^ʻϸͥĽ܀؄¼ſǽ߼݆꾭􂖧¶žǼĿ¹ɽ鰁烀Riie5k56kg5=D?54hecb_[ZUdikga`affhfdfdgjhcf579=<=;:<<::95dacgkhbVR[TN\YUWXYZYWVUWYW[eYXYY\\_\\[^colfi=;886667::7778;;<89=BDB><<=@>9:9::8787;?>=<9;<;<=<;=<<<=>@@EGFC@?;<98<=;89;=@B<><;9ik?@DDEEHFCBHH>98:=B@;AEHCB@?=<:88;ACDABA@@=<=;>@=?DEAKJBA<:<>@BFHKKMLMMLLMNMKIIKJIKKILJIGGGFB?@@ACDJJCIC@@CH>><=>@A?=;<=>AA@?<985953^YTEA==94pHEBZ7112@?mIpdk 0, ;*6:?+A.:3E_[0!%(H'+DFibreytwStgLoX_}VZS~u<=`:7643F[grRkR?B<@>>=3(:" /,065mv78?<2,0+$$044.%#,L%)#+$42+8$!&$@EJY<$)$0$;c_ap_.:#927."* $ !.0,9 =(^%)"*+"#".#=?($/7="(52:9312$'08-5+9',/7'-)DN77:",E>5<67=N6I/6?M"T/%E>6@=@(#&(,,&A2%,"'- ($W~T+D,2L_pctXPfsopzxoUFxt:"!F,$/3( *1- '-4;,#&)72!$""b\gilih|[{qaOz\pSqnJ|AvTl|QqXVu_znOphUquXKuciwpg4Zz_]_OjdYwRYOb~lQVVEZ9ww`Y85XD)4TD/QhiQQZ=6[J-2;L#/-$+1*=621:NHEL48;8/!.oh'3OMLkZe1AV:,973,DH@E/6Y56h4=?A=:769N7772667677=>?>CILIDCFFGDC<<>> !?<<<<;7897420/,((OFClA@DD#$&)**...-,++*+*)*+*+*,+)3O3EXxw8&VO@;>\`lvkpl)&&$&()*)('&%))+-'#$8*30-2(%!C75,/201A#,7*$"B??FnXR5YiB=oeM=eCJW5]fNjkg^A)>00,9":539.B:dRNZIPZTHLTd[CV6bjuqyR|w{{``K~SnahwsxaC`]POk{n~[fc]gu{olmugi{pwszfcgjot_p{XWqilmncQPMS}rjm[pxpjQX˅~pgYf~Ruuhe]W{Xrr8=o]W\y?:c{xdZjhlTW86LVNA42MT\vtRYTotM}`y[yGbkb[nTYe|[efFeMpirkcjwyRvyjmrckaVWI\qwYh`iqaZtws|psxnrW[or}NfL|]fy~}trwP76@;PIKCPQOMRgrjShk\)=4*4UI1e_[zu_bMeN}eutNYl`>*AG~xgEANKLF>':6==DODIHD><9LK*28H7kCdMKhXfS@0?3$+:28;PiRIAA51H)VM??7c5VQ5;<>=>>:G@1?;J8.IT9aZ<0;IN5gcZ4"=2.\[;P@>=TTIMB?a:9:hND8R?223/5g04.[E]]a3<532a^S__cXRMD?BDM[VKRZWZVSK?#IJQRMMR:HKXNRUUJNMPLUOW:\NQQNTONKOSMNQGBE?C45IOPBRRVP[3/UTHPGP]W[OLR,6>83`_VOTWb`_VOU[6:\MMMNLPRIKLHTSIMJBNNRPKG[S[MShaSNIAJY^WQ[_aac5`YY^YTPSTVTUCDEV`STJ-JM5;0*P@;8/]E8-RLYZ/9AIHPWWQUQLMNNHNRNONTQNQV\ZTQSSNOKQQLI;:EJLQMMJDJROKDGDFKLO9ML@CPUKJPPNTPOUSMc;561UMPQSPJF>@:8:@SgbJ3f:e?I--<7S>=8754f43_]^hfd54hifedh4456gfdb``:9mg`a`c_ddfa\[Z`cb]_`bcdb^fdci78c4676kjb_]bj`ffaeebHXdeifcho12146032110.,*25750/02342121131/21023451+(.+'0.,-///-,++-0.1223222/33532134<:56 6828!32433156654)"  &21   #"!!'%!.3+B','1&%#"*%E+g=70b\$ #$   +**'+0(#)0%/P6!B#%4' - + %%'%' ,1go547/ !!$&!8   +'9Jb3 /3V7C,   +   +  " ! +   !.1%/-'#+/-,#61 + #!$' "+'""1 +&3#%  +  + +#.(! %9>.!,/'  "-(&!,*,##" ((%5& /: &$1-$.R/''H=-%04',&0 **76 .<y>j Ko]]^PmfYwx|PQF]}mTYXCS4poZT51I1$B4%I_cKGO:2N;$,5< "-/-- #)&' + >,3;.@/?7@=WJ&9(A62"9NH"(#+$# B342=!-F-02&#05/8+0W2/Y(:PgU?EI2EK.'8B160N?gJUXgHGJvKeffprOkZB9MbhSaa]{ROc}E^ZHz?EM_YNIB=rprc^AAKLX][SRWVW`baca_ZXVSJMSPNPNIFsd]S^YC:cG4"$/4 "B/A4B7F/kkC=j>5897/:3APYWTe[bZA{MX\KQPVXVsrhcb\KWj`Yntqt8hwzurh\ljgimouTXQcpflqgh}ؾmfxz_^_݁|۸˵⏍>=Mlބ~|u{{}úųʼĬƽvӽe_`^ZS}}YjfXFGAQSICIOhLorojdc\-./3120WJNU,.2555951-*---,(''"###"#$+++(*/1.+)**(!!E@?b981, +,6IE 4-##67?@=HE +     !  +!0"#'.+#/!&&&'%%%"!0IZMjiRLsZu`s1bdmI<6/,+/.H&54)"&''&'),,'*)("@'O@R4_O!+/*'D&6):*0;#3+ 7>(F-8#E')(#5%'%+'#&+61#).)<*&5:E.'6<%3'KH;)D!1*0&,*+(IFE@JR3CKHKePCF:fO.2))1/:=?<3!1)!#7GBBBFB;\RHSg`]G.-,(.F9O<866L>67PM=6931@,'2+/;,.B)7KCK:4/!-&N&((E4KW-]S]Y,+*GF*TTMYB2H,0+(#+,%0ACOA%=>9#3O)-8:)*04+&0B@_ONI);;3#<+'&0'.'85)<;!7+*-C!3TF@3)+&+(++,###"3:?,)'=;I$?4;) *$)+- 0EEO_7%'  "#!5.(0(,.*2+"   %'X)'@6(-YA&!*7> 4$+(123#(Q=G"(&5,.)6524.B.')"4') +)'&$*2  + + +  +#\_@!  + +-)(#C:4*TA>DF04A-3N:A6@>;0% )&13.%$$48 *#=34*"')D?NCF<@06847-&( >=+(<0=1! +#$(:\MC8.)84$-61),3!2%$%#.$-11+"$200$:<&5-&&--)-)+F,)&@,&3*#""$H! /"-+...(//1+)'" "'$,-+*)%)**41/530y02/.20.00073--0.0/1,/.6 1/1.,,*'.(&')')*,-.,(-12.,--/..,,*%($# )(./*+-0//*&"''%)')(''$'$(*)'$"" * $& #"#'"$%&&!!"!$,&!%*(*('" $$&'$#'#!'$'''!$#%"($%($''&*''$%(&'($ # #&&(')&,""##)%)" $01-&)+..-'!$$0''&(()+%&&$,-'(%'&)&#!.',#&20)'#Q"+.*'./.-.+&&))'%&&'''&*$$ ,! '#+)#!%()%(&$$%%"%'$%%(&$&),+'&'$''## #$'&'&"&+(&!# !$#%(& '*$"$%%)&&+(#,%"&&'&$!"*86'>%(/ -#.,.,20/543/02123310:833120221.,--01+1././/22.2104175//.160551455#+0/1/045 偂 }}}~}~~}~}}}|}|||}}~~~} ~~~~~~~}}|{|{{|~~}|{|{|{|{| +{||{{|{{{z{|~~}~}~~}}||{|{|{|||{ |||}}|}{{|||{|{|{|||{|||{|{|{|{| }~~~}}|||}}~~~}~~~}|}|{zz{|}|{z{|||}~~}|}~~~~~~~~~~~}~}~}}}~}}~~ ~~~}}}~~~}~~||}}~~~~}|~~}|}~}}||}~~}~}}{zzz{{zzz{z{|{|{|{||{{|||{z{|{{|}~}||{|{||{{{||{|{|{|{|{{{|{|}~}|||{z|}~~~}|}|{ ||{||{{||{{|{|{|{|{|{|{||{|{|{z{zz{{{z{z{z{{{zyz{z{zzz{{z{z{z{|}|{z{z{z{zz{z{|}|} ~~}~}}~~~}|}~~~~}~~~~~~}~}~}~~~~ ~~~|}||}|}||}~}~}|}|||}||~}~}~}}}~}~ ~~~~~~~~~~~~~}~}~}}~}~}~}~}||}|}}}||}|}~}~}~}}}~}~}||}}|}}|{|}|}|}|}}}~~|~}|}|~}~}|}|}}}|}|}}}~~}|}|~}~}~}}~}|~|}|}|}~}|{|{{||{|{{|}|{|}|~~ ~~}~}~~}~~ ~~~~~~π ~~}~}}~ ǿŻļȶ׆񤑺߄בңڕﲹʶܯ󄐓훻ԖҴŅ䯹劜ҧ¾櫽ֶꎩРۊթŲ”ϴћ꾑ە¸ǻ܇Ֆޑ倜Ӏݎ®όجdž͂ԑ詰ˌυؿΦϲ뽳ѧŧî¶ڮ堒ܬƍϨ󇀁Χ偐Ͽ쀹ʤևӻƔ𔝖ꉀЕӾ۟Ɵ؀ǝ𕙏ӱ÷쑁ꖧ򁇝Įχ؟ʵ˳僡Ȯʄɱ񖧶ѭԹȵܐ˃箎ӽؽӾ̽ɾ½;ɼùϼʻŪ΀ꁆô³鋗½Æနͳޚ⼰򉉕×畐ʽÀЌڗ꧋ׂ瑍¬벝°ҥӅüֳԄȶՖڄڣžªعπɊĩ«żߍ򳟔˪􂞃dz犋ѵǀͼޤƙȢ媓凕賎؍˂ŠřъсӼڭ̀䶷㠇°猟Ǎ҆߁Ӭ򈖅ʞ‘ۮ中͸؜țӺٻ̦̀썓Ԥхˋ¯ڶʣǿ޻׊ۊӺªŕƧĘغͿɼƼŲһ瀼»ƵӴؾㄊƾĽóѹ̺ꍔĸٿȻҷꃅóɻΞ͑½Ƹ乬Ĵƿżýż΀̺¹ֹ㗝Ϲ7jdgih78i4d7A;86hinjd``cfcgdcdfd\caffgfebajjh8=::9ia^`^]bhh555456hfkgdgihj7654598:::?>754k874689:9:=>=>CC@>==;:::878:<;99<>?<=?=>>><;==;;9:<;<=>AEEFGD==>@D>:<@>;>?<<>>=>==:9?<>>ADMMOKKHFC@<;=@@@?>;AC?@CDEB=:ADB>:::<==ABAB@@>><>=<==;?>@B><;:>A?:<=?=AEG=9787972]X@S/8l4?48:02/G;GMUMz42?G^?E0<#EI+@]NRB:2@.(/5)M~f^mw_ho_msS\_n`Vtr0?<=I?D+"&(-E37/7=+UTU`:Q^QJ>IL!$&JJ@D426K%"!"&)""%F''&%"#%''(dO&"%#($fkzT_l[rkpyvbmhp{se"D'%;<((#"%/ (#+# $5 ' $'&%"&'"<|vVct}yyW_zWqpasCigstORotmZSzbsecrrdP_hday|Kys~mvdPnu~xy]okCI|`u_wʨp{eOkigtptIX[pC^LyouQLFsC/&EzHJLLg`rVQRI\K=&9GUc=DqAIQ@ZC8--5WGB;=29M==GG#58W,$1)'" <*;5F1E4-U>E@4}oJ5LINK4=16<-=CFZNMQJT;\HLG>?>??;979E6573656847>??@CEHFBCDCDA?967:>=>?=! 98;8788641---,MMURu@AGE"%(**)'*,+*))**+,+++,-,,)'&'F:wgcIwQktGdk|ntO4(((&()(&'&+,*+,+)+@941?*)%#$";7530!';(8Y.*;=eVNI__bNdJ7r6DHE>|MNO:baAnro/1$+L)2?42:;?E#FE^\hdoWCkIلmTKOMKDXg6];UOL*49A)N,CDB=BDKNP&L&'++)&H(++(S??P:bV-B`iF:bQaNY18+>nTHfGHeEHP5WN[vVcNj{WpY[U_FV^5EO7`hPLHA=@/@GC:I/51[>Ypn{~}pF}vjlowaKMZYKsgw}}mpsf^\^ql|pa|lnsxx|d}th{uisXkTO_ws|~sasbdYT`_YSYecau|n~f~{u~r`^fZ[g{bbm]^zml^cToZOcD>3?7;5/>A8N67ENdaVLMERU]\Ql[_hL:NLg_NVO4=IGE3AUD'1:9-66/X046@7XH=5KUZW\d5434423hf_gha]NwFPSSPIF8TbdR\][ef`dfk6gddf5><9553caabf4356434441542cbfea[e5:<=:93ef35245677579988755543444655;74gc356668<<7fba`d53ecdf78keh67658A;;=<:974456456578953665359i8>iegg557`\he4cacc_\[^^]ac_bg`Zai`_ea`d_X[PJC<>9@YU^d[cca]ZVKOQMOZ[WQLDIMNOJA>9;5SN1,ABh=CAGJFKLD@SSVJFMWJ<;;TWUR^\d\L3=/CNIPMLME?IN\^XOYSBLVRD=P/5PSRLVQNMMOLOXNHA3=RDPRWJQRFFORKSWU4TJXZVUT]N/15:88_\\Z\`VQNUY\87QPNOQNQNHJOVSRJOPNWXSWTY[ZWa`[LJPGHVedeROUU`42_]2]TTRUSRPD8HTPSVQ.,;D;3NNB@8UHH4L7BHtGFLKNKTOSOPNONNNMMOMMLILTSQQSPPVSPONQRQMGWPFPNNKJFB?GPJI=HPNTOII?>QPMGNQMT]VVROf333_XPJQTMHA?BF;e;hdWKQVMC)-0;Hg9<;65Ud``ica4ffd``c`de46jgicbeihidcbcacb`aea_]^agkfbdfcbdhgki6eg6:667mlhe`\[_]]_a_XO[eefmnj200223/33850/0230312.203233211443023/--,*)0210.//-.10.0./20//242452$99647211000243446421324-3T!!  + ! !"&#(+3d(((*($'!%"0-MY*9(a[2 +(-# + 0"-7&$7&F'!@<.),-(-+&  +" '#*kc.-!!"># ,  +  B6 ?8',2*   + +   +  !#  +  !  + *8H<0&+.+0),#")9. ! + >"%!00*   + ''44-##.'!3-!",508. "0) $)o;'*G" *$ .!8O"-(+P,8J^?[JsoxRKFo;&!BuJJNJc]mNFFBWE1 + *7J]=El>GPC@JAwps?DV`ab\NEHMW]fgimnnd_YTQPPOUTPMKNMIveg^MA8>O3+#.>+#@0P*LSNJmA==483?gP>:=E>\qFWWYy[[IO?HBHL?NQTU]OVVV^aa;=dcir`g5glmbifcgkshdf_^g~Q]Z\iodf|{~~~wlks]Lbe]x|t{sԼ܊sM@$6Ev||~yĺĽytnhjmtkfnxgacdgd`hh˔e_ieIBAIUN>DC\T\wpqg`^\,01244`PKY//1557[1/,,,+*&%&"# !#!&,,)()*.*)()(##CENKj862,   (!G>:'I/;A);=C=H3     + + #$%#('*-)8 %$))-#!$%-F|JWV^wH4W7]l_?=;1*&3D'E&<-*#&%!$)-,/)!* $0$?9.CM7+5&+%3 %#@/&;-'F%E *04)4H3:,CL3G4!2 %)%""+/*$)!52.5$(6 ,4"68;ISZZM=87B<,>A.1-5JIC9+.Z),$!'@11.+11/(3(,TVVWV0+41.GKL&'866:.2$>@"#/(&16@L4 $!2("*71 %G,:5)=&-<.+.)'&$7>:',C*%#!<,V.5>>,N/5455.259"'1M1 95I?*8,%$=+"$:(2!*,,*+1,(!A $ !)+( "%(9%. +?q  +#28)=35>38,F,("!1%1&>=A(5/& & 0$-0&+'&(!4!"09KG>362==<974gccb__\XWWVYZ[bd`[]da`^ZVWYXWUXXX\a^^Z]lkdba`a;F=5`\\[\cfgi5576hffggfj6456558==;96>B>73d467667998899;?G?>>=<998::757??<:888:<>==;:8;==<=;=>;;<<>=@HKEA=<<>@GJLNPKJBBEFACB=>DFDCFCA@>BFCA@C@@EBAAEGDC??>>=89<===??>;;<<=>EDD@CFFECGJMNGGFEILMKHFIJIJHDB@CFDACDACFIGGGE>>BB?988>GNB?=A:?JE><<:::93abT*8r;=96<5/1[CdLtw5L;Vk;$:65D'1A+;Lni9N@1^SF/ /p}xiXWQfWh~Q2MwoFHU>NNR6H)7\LXuWIFO$+'J:0).U9M (!W]1/)'%'-4*'(,.+:-,-%','$7'' !$0:Tcs{7(9i4KnVba7A-7;.2%7%2!%1,E."'%!#  #%(*$+00%1.(28J*-+0"'%,=6,,,/(E+' +!@." ''636585=FXDGE;BD8"9 !#$ 3=%&'-6&-&%).('&"!%?yz[{prnd^``Ωo[$/52!+"""( +,( ' +  "((/'+0.//&"]\c4JrmT]bq]bon{\W>IPEE>]~fgymoqhm{aqnpw_{\YD^Ijn|heOc~ug¤izjfo~iyrJQBTzo`oozci}e_^]*4EF3rSSzYzSw_akLH74-oOLRW`I84@V?egD4E<:$5CEEQ[TG@AC4J!")MIC=01$7#D?^H1*8+>D5$%*.O5B9^Jbx_XR>2JJDG=XQK9M/PDL3=^xS 9>FK01/9'+(7*%(=S5@FM=>->yx\VJn\.21EL^clYN[S^eXpnsn\Vbb``fk_N\wY`Ykxf~t{vq~xrnv}oVfikdighaYfdnfWfdrmxN_{jzdmsp|noԜiWa(3]Ucxqu~~~rkschl~bUamigosktllkrywxswzz|vbzq^Za\JDC[ZRMRHcWnstoen`c239;<=xlX[e59=??><<::886587876577753>?@:>??BDBBCEBA@8779:;<98:8879989862//4521,YUZDK?mW?R7LDC6#"(+"%/;SnbWgyHa`FLI^FKNNHCD6DN12./5168Rh\PDEJGGCLSH>CFF>IKLM+HBB>67HB)-6B088+LHYED9747tjFBMls]TQR@ZO`BPIcu`h\:kf_GX;n9NJV;QBCV90-KJG3Tm41>PB,/2G1ZJi{pOm_~azeO9QjYuzk\up|smWm|m_Qhnokvv}]V[ewrtsszwt~wg]jX\[mfNMRag{rriYkqfszm^V`WYe_dVP]Ru]nW\h]zL}oVA=?:hSZ[OJ]^}^feqy=gC|V{lev|~Skq[kaOvTbWlspsqUkoqP~YslZVZuF|ieizoX\UjxGlhazzseQsbnRlfS_]UzK}qLahpfYaZzLjGo1 BE<>3$;OS4[\BI69W<>IE5=:C:FRT\FHQe?@Bbt24@>9/DlT26`9E?*Y65[=;;4[5,CN5;:AOA@O-:E.75-7I2.67APA61,6>>'(C44C?Y[F?N<==@9V0I0RV370/;_HB1:N2L6.Kb@UQX;5LiC[UN]e;,UOLHFGJOPQ[8@CHLW]=Z9JXN?Ga16777;966f5gh[TOQTXWSU_86]PG5KR5=5ge6g_d^47><644ebbc22432324656773e_a^[QSf7;<<66676384688757::68854565464467674gei589775;9gb`_ag9655h5796j44g54548:>8:;=:9843532c3743778745776:lhAra`c697T+3b4311aa3bbadb``cd^dee7f`edacacaYV[QIA?FE@HU[2g`_[^YVONRLL\ZTNHHKLN?5QUHVC,>d?D`?ACMJIJLOHDSY`@C\\TGHGOENSRTVN9a8UQHLKUPQSPU^Y`TMZZS<;84e``fbfi^ac^ca_cbbchebgdahkhffjf___cfgd^\cadbdkhmdb676dbi7<:538898noliha`[X_^]_[ZQ]aep::40-2564264354532044/..11014320/0521C1/0///.--,.01/131-.1210-+.012/012353321;=6420.//0//1233323/  ' !!> !!"!!     $$ ''%%5g4/-,3("!0/+K;WB;7A#&,%$ ,.,*&$,"$"40-)2/.$ '    #OV)$(&" '  ,Rr#%)B:B+6+    +  + +     #    #   + +%:A?0;8<88& (,4 ( *!PQ( !#7B>W=#)$2<*9-2$2?VO@( ( L>/%)K9 ,-AH&& 0A2R.CKb@G@'J-3<( -LRV[[o_SBHZfMfbw^|FNMcm`B{`thZMHMMhtLEq<]ZcudZd=BEqonZFU\a]WRR[cege\[VWUZ[V[XZVUQQQIMPF|wvd^^I?>8,  600:$07<2/$1ecA<6N?!"8ASTV<6=;NXIUW^aOBGICEINKAEZFQFW_J]dlfdjaejgfdikU`aefqe`^b]~jjSecd\ggooeqkrhtitrT[t`uzlwЄwSSAXt~o{xðǴ±vhs˿mhipultnolq{z~x}}mzgbe\H1>>VSICJE^Tnsumd_`//4667j]KU]1376587631.,*(('&&%$$!+-,#%'%())('& $&(*)QNS465/   :LK95.I=A(;B3;0 + +   + +  +  '"$$54*/'-*,,!#&(#*('!$;ViaQGYn8KU<>8u~Qa.v}1<4*&% &-*@7!$*((&)'$ $'*),!()#!&#*)+'*%%!'#" =A%(089/G%,0&7.:$#%P5""('$889D>7% 30+/ 7-.1$%:%! .0*:vQ#!'1%.;/AEJCVLXOTRR__[X]-J?l)876%6/')3%5G;7,$0/CPHBrhQS4%1=/)"7@?389<[BAA?6E'#5'*,.4A?f3>89\D@JBO360/+4/)#( $MZUL],60?G(()1/KBT4!(E":9;1&+"A:6<6+#+: 5*&L4+?249* !$ 4(E]5]9,'-+G;('(05'770-%0K/=6;<$=WQT39', 5+'0+XfR?V:# "*& !/#0@& #?:1( ' #%%#/3L/2/!/..HX_.MA88 +F0'-&&!43H#/!!%"'7-  <# %,B,,I0()%@$*9%**5D05>)1 ),*&%.,**+CE0*9.1&6:)"!%36%%F(M00$. +-0%501+*74)%&*1!.4#2+%$ !0 1 ;:!# #9,$!.f* -9$0/43E&8508>%?>=6758:;6<%(&++01 -$,% +134-)')*+'')-+#$011,1-0//0/.0.+#%0I10050/-.0362-85";/,-%-+---.0/,,.1-3333.0/--.11,+0)$"!#+,2.0-.-+'')$$-+)'$$&%' #))!!/$. $##$$%!(+0/1.&%#' %(%&&#.+'!#"(%&)&)-(,'"**(& %%&,$('%%$&%" %&'&)%#& &')!""&'!'(& ($40221 '#)6.+*((()*)(),,%& *+.04;3-,-,""%"'*1371.2-.(&%'*+,)-+#%$$$!  *$ !!""#$&"" "%+.'&%&$%*()*(&')&$/)%"#(%&$"'()&#'))()('&"&&#"%$'*-'()-)%&$#$%%"280%*&''9+%,[0./3013,.1,/--1/./32022154445973322451..0/1-064720.,1;:75410.,2202/.(/128}}|}~~~}}|}~}~}~~~~}~~}|}|}|||}}|}~}|||{{|{|{|{|{||{|~~}~}~~~}~}|{|{|{|}|{{||{|{| +{{{|||{zzz{|{|{|}~~~ +~~}}~}~}~}|}|}|{|{z{{{|||{{|{z{||}~}~}}}}~~~~~}}~~}}}~}~}}~~}~~}}~~~}}~~~~}}|~~~~~}~~~~}~~~{z{{zzz{zz{zz{{{zz{{{|{|{|{|{||}~}{|{|{|{{||{|~}~}|}}}||}}}~~~}|{{{|{|{|{{{|}|{{||{{{||{{|||{{{|{|{{||{|{|{|{z{{z{z{z{z{z{z{z{zzz{{z{z{{{|}|}}|{{|}|}|}~~~ ~~~~~~~~~}~}}~}}~~}|}~}~~}}}~}~} ~~~}}~~}}}~}~~~~~~}~~}~}~}~}~}~~}~~}~}|}}}||}||}}|}~}~}~}|}}}~~}~}||{{|{|}|}}}|}}|}}}~~~}}|||}}}||~~~}~}~~}}~}~}}}~}~}~~}|{|}~}~}}}~}}|}|}||}}|||}}}~~}}~}}}|{||}|}~} ~}}~~~}~~~}~}}}|}}}||}~~}~~~}| {|||{{||{|{|{{|{|{|{|}| +}|||~~~~}}~ ~~~}~~~}~~}}~ Ĺü򃏍œϔǃ񙆤ۏނ庺ֱ۽֏Ԃۣ͒񁁹öѢꕟק찛ގڵꟸͻ鲡ߒ儦⬛ë틠ۥرўᐗȫè؄ٕˮՉ߾௷ԙРчדżᛡƞ㺘ܴ㴴ٿܡϐй̦褟փࡡʐ𰊻ڤϬ⃱ƌ쮠٤ӕ񟇐ڼق׫ٮᆆ齍оǫ΀ׄɆε】ķ꼞薙擗ϣÌ݂쀾퉥ѻǨ쌎܂ݾ׃¼ëΉ푏扑ޥѵοɸ̌ľʴſãƮžźƵʿ牖싒ÿȻѵڀ晟遨踵òƵ݊Ũ̴ɴ̈́–߀􉫠ù͜􈛨𗧣ͭ倎ēن۟âڂΌðνžɽǻ޲᪞йӵ눕ʼnÏ˱񩩥򚐙Úʭ悆妆逐Бִ̫dz䐲缡ҜDZԝͥϻƾϼ󟣛ćΊҏѺյӊ͚ռ׸ͧдӆƆۮݣ˩߁΅Ǒɰ₈튑ցӤթկȿ׿ȣ㸮þʷع܇śùՀȡئČ̴ӂѽӀـ́!偈󀃅胅þǿܿ̾Òրƽǿ̿₈տüŽϭѯ¤п˵눀ŗͿ踇ǼȬŽïҲ񀸾[6f8=6j_h8hhg5877lll8;6mcdghggff^\ab_^dlibb^`cbemkeh99;9:=:6767889;<965686587889976;B?==<;<;99;<88=9689989<::;==<;;?A>=;<<<:;;;<>CEFD<=<<==?CB>ABCC@@?<9:<==:;;;=CILIEACIKHBE?<:>>?EKPJFGIEBA?CCA@>>?@AAABDFHGDEEA?>?>;;=?A@>><=B>>??>@BB@?@CBFFGDCEGHKJKIIJIJHGDB@=>>>ACDHHHGB?=>G;;c6=9@CA>?>:HB<<=;9974cJ09::<;;:864E67>RIhMV5dF+&FIE&$!,>MM=KI;D: 601J8:ZNtqmXSpnTf\PKybxgzm9>DdJs',TOyLHRM<'!4&*,/:59Kd;<]L2$20&,:78-&!&)*5)!/*/-00))(.#)38&.5Gfc7[Zkp_gM.B@K5+)!'$&1!5,/*$6)87*'#&-32($..87;-.=33)*%0 ;0,'4@!3+"-*+22##."06A[,Z279#"1A$'%'*&%));CE{_brv{bpsvyf4oLK!#.1C*(1)(0-&  &.( '-( &%%""!#,2/>l}{VLacYel}hQz\dqWZ]zvbT~g`ap{r}phbOjrrM_gTrpiovnasQwWWoK|dĈ͇dnL8?XOdɁtlaZpa^S]ō{nw55(80I;j8BHT]NTaN|MIGeaXwECboli.=7eC\5S2";/e>PPQC:DNL=B5F1BR0G578O>C@]H$5('9@8b0F[YZD1:24RS=AA^ZMBICF52)5@>6%M\`J,LFL(3Jly.R<)'-,4O=>N?OD:NVH>?9FC>7GW8]N5P0MABH@2cN@BS4607@?waR?MLGFbms~iS}vFQJEQaYiV]S[J:e[yJWLtmuIEm]hm@bKP[ktlIbcQMFH[cegf^WVTTVYYZWRPMTRKH}njiaeZM@AF>/,.<),,2KD<=?XK$$+FC:Xvnl=Q>=7F8U;^COo`_HVV[T\d\OU__]]as_ZSR[_zm{ouHLvsqmne^]fvKRLn{Xc[haS`deh^lfnn{|i~ipliwڽfohsȽffbwxzBH')sy}cVwwqr{z~tpwuq{~z}ytw~hivmeaiimqwxs{{sxwz}WQV^UJHO]SNRVc\\iqpfcaf47:::;oeJ_f6;>>==::9:87876788624;@?=7>>=?BBCEFCC>777::9768<=;9989:85355530--WU_AABD!!$&)++*+,,+)-+''(*,,,-.011..-)$"!!5W\ePPGFCT??mY@+(('$&).-.-,-+,,+)$')(#'%%" "! "$%'=,S=/>][=U3B=UEfdu\HK>=HFsgAS>IGLM>kgXZ:BSKB)(()$$?ADapSL\RzcCIMOImxQePZ`fL<@02>0/)070457+dg4G'68\=D9J/<4\iGGIFURA9xxwHD?DI~UA>J;8@8>aQRCHZ;wFQ[yuSH,=Q[TVdMN<3O`V{ZADPzZ[iP_bekckj`TocV`tcfstr|cywvmp{xos]Z][_xthqk~kf^vrkqgsww]ccTTQQLcowX\pdhl{qgtp|RkYcumf`[~~`^]~Tf[NJ8>Bvm99fSOMSLjbRy|fkcbjD]dYqj`i_}z}X{loFGORbyZsX`cXgx^`qQ`uxjic`xsdWbqa[_dV^`_ah\zPiciXioyUhX\htwE9/g@@60-Xt_W8Rg?;3O579R+*5F,. I1G2R::G53EJ?2=3-?=@9=37,.8JI,/C2>G;L?OfMQLX=F<<BD>IVZVJ_NKB3-+EFGT?FWL=[UyVE0?KK>LQP?)*>YE>7CDBMA?DXP?N23>;T@DAB,IBaFD)J=/@i].GHJ0>/HCAGGDDHMS2?FHU4>W6>GOF>..FNd589:;56igf_WURPXWX`j]X^`f6`5:e24_cadE@7=<`333cc53233cae3657685e^XXXY3859:9:748<;75d26:8678567757647k554h876fd57859:5f54caehh9<877j55455444e456:6::9;986642221cee44378:8:=<=;njic543654YTe53212b12fbc2ccacc_`kig;h`accac_VWXUTRQRN@3O[dcca\XXUSQNOQRSRQNH>4ZK]2GI@^_L?FXcAHR[MKNLNMKMVI=NZ_UPPRSNSQNOJLROMMLOLDGRPOOEXWHSGS\J2OV[SQX_YQPPPNRKNI@G:=;>ISWOPUOJLGILOKRLUTURYXNJQKDKN-.+4B<4a]WKBKC\66pk^XWTQPOHGGGF@;OFPFKHSMZWXVGP/UM.LD3.4;MDID>>0N6.40^1UPKPNNNIJJINUVUPOVVQVTQSVRRQVXUGBGAEPORYSOPKMJPGPQPTWSQNKGCGHPQSTVUSTSZccXNOFBNMHC>>:@>H]KSPXYK'R09A-<>>@>=@93^W`\`gh`c`ajeecddghc`edgfhmkghe[W^b]afc`_`abjfc^_eg7=!?8ece999;:98jeiljg`]_``dba\R]_fk8X/5/4210645612343421.-01//26422.02136402110-.2861219!&054630010/24221124321/1101143222448K  ! !#  +*  0 !! #-#*"210/-*%(#1&2+H#d@&+-(" +"'*&!< *&%8"!"5$.;*/&"9 &3!.*)%% #""&&DȿZY$O',6.8F%     +  +  !    +  + +  l")+''*2&##.(')(0$$& $&$)  +1(3&& %&*%) + +   + "  +74&( )'"+2!! 65#&-!% *$,*"- -/ (& +!$dXz5%"/%+((21 2C$! 8;&(Z(o1& 0>5'!70W1MKNB6ANI69-8%4C$ 7-00=.&" %*G 4TTC #:F8;:MJ<3653 '*/&%(Bf2#& +MQ) +'S%C6'9H1)(!::1+=L4N@(<98=C8-P5 *(+6>?vZL=JKBEepzoV|{HRGDQdZnY\SYH8]TsIWJrjoFDhU_b:[BIM`miH`bPGCH]fgea[VTSSUXVYVRONSNIF{sga_Y]LB539/&'78132@0#=;1HmZkRR)2),(7*J5L67OKP9FEnmOGGJE8=EJNOKZNOKGKK]_WlhUdZZdeh`05XU^VTSPGMQeDLIh}sR_XccYeijkkttwq{}hxahigrس¿t}ww{y擋94jcTy}Ʋqtpheknpvww|x}hV^aSFBJXLFJQaX]lwtid`b125533^V@W[0576576510-*)('(&$&&% $+0-) %%$'))((&! ##%''&&MLV893)    % 05:+G/))$/$"=5$  + + + + ' $!-#(%-&""53 /# $#-/%(&"(.2KXBAB=Sgs>O05) 084GWN6MM)-7K42F;*M2E+*/+220'9-#;K>&..="30,3:,+)?5*0+19"'1'K,47@>0+)B&B1/&773!8*'&NZ4/?,"97-,''/"0[7%80/+,$7:9?=?/HPJ*+""=0I-/')/91+$-!!#"0#&4#-1  !%"' $AR 003@/8=*(2-! ?)5! &+"!("&4% )4($ 3$! +  Jb%   #!1%('9%4!!61 @-3D,&4:-!"!#"& ,+.$."/$4J455? &!$!+ (494):*)&$'*2$%A<.GA`A.%15(4:?*-"%&. #).6013A<:$$('8/.-*,)?*%,%%=6534!( 61.6756799!(./5","&!"+300/*)(&+)*.1+(-,,-.-/./)00/-.1,U*+*)0332//1/1214/~--. !:530))/,/-..-,..,.7664..///20++-++(((& (,0/11.+,*)(&''()**)%."/$$1/&!*. #(,$$%$%%$%+#&,2.+&)(&&#$'&%$$%$ '%%%)( &!&,"%(+'%)*'%&'&$'"%#"#&($'+%#%##%%"(%)')&*'#!%# -,+%"(;:1/.-+)(%&&%$ &#(-&'&"%#" '&%$*.0057/+!%&.*++-+-+'!!"% %%%##"#!  ($$!$#$%!"""%(*)&$((&))'((%'&*+*#!$ !('(+'%&#$#(#())*-*)'$" #$)+*)**,/-+&'"%$#  !&3&**0.'8 %*.)/+,/1//./412110330/11224876771-/1.0320/0/.43/./21/106345630/001322.(//35 }~~}}}|||}~}}~}~~~~~~~~}}|}|||}~~~}|{|{|{|{}~}}}~~}~|{|{|{|}|{|||{{|{|{|{|||{zz{|||{|{|}~~}|}}|}|}|}|{|{|}||{|}~~~}~}~~~~~}}}~}~~}}~}~~~}~}}~~~~~~~~~}~}~~}}~~~~~~~|~~~}~~~}{z{z{{{z{|{|{|{|{|{|{ |||{{|~}|{||{{{|{{|||{||{{|||}}||}}~~}~~}|}}}~~|{|{|{|}|{|{| {{{|||{{{||{|{|{zz{{{zz{z{z{z{z{z{z{z{z{z{{{z{z {{{zz{|||}|}}|{z{|}|}|}~~~~~~~~~}}~}|}~}~~~}~~}~}~}~~~}~~~~~~~~}}}~}}~~~}~~}~~}~}~}~}~}~~}~~~}|}~}|}}||}|}~}~}}}~}~}}~}|}|}|}|||}}|{|}}}~}|}~}~}}~~}~}~}|}~}~~}~~~}|}~}}~}}}|}|~}~~~}~~~}~~~}}||}||}|}~~}|{{|||{||{{||{{|{|{| }}~}~}~~~}}}~~~}~  +逇׀~}~}}~ ބ¿ʄǩ͡ˠǪƏIJݳ©҇۱Л蛶ㄮƪ膒ǣӺܷ޶ܷëɦ𽰬ͼǁюө򐜙IJ͸󛡗ݮƽǽ⠩Ƶب؜𥉉⩆ۄۀ݄؎Я́˴ϣޒܲ˗ٕǙƚՅӑɊ԰ІŅÀȦ׉ҙŖ拈၄򂜓ǠԌʲ꜖ٜ޶ƨæ޺「ۘڌԤ͒͐đ׀ծ̼􄏌苫ꖣኊ핎̼ðùހǫš⇆耟降ߌހ󆊗ߒŞȗüȓ¿¼Ƴȩꉛǿ˼ú҆ʿ┞숅Ɉ¾֛ӅʈǩεԀ𬮚džӀ󂨣בӮݢЊ䕏΍ȶç򾁟ʟѦȮņڹퟧ͕ƵÅŸæ鬻ͪͼڀ洩ζгϚዩĀєЁͿ걀왍ɾۮ⬨ف۵ψ⚘ĵ➪Ũʪ̂ĩ۱ೀĀڭ̠Ͼ֕ ẮԁϠᮌ݃ʷݾП⠐ڒĂӊ󑓘ӥԻ䵯σ͋ēĎۖٮԻŸ߼кͬꏢܚͲ얆ࢡ̼曏Ƞȹ၌ˈ􁃁íݥĿó˩ȾϿ۹ǀŵ޲ޫȽȪϸ郌ʻ²¸ʹ뉁ƳӷϨ؛׬̯øπϷӿεͷ뇌lk9:7i\ce6ik6ikoni68969jhgi85i8obca^^b`cijgeab`_cbacff6:7:7557424hd_^blka`aacmlh]f9ff_^^[YY]YXYWVYXWY[[_ef^Y9?>B;hefba_acgg65kkjhi5;@EDC:6f5662569886777655586776569::;;9;=>B>;9>@<:987799879?B@?;=;::<><::<><:<=@><;99?AGHE>=>AHGA=<;@;;>>><<>?C?:@EB=ACD>;;7???@@AAACDCCABCC@CA>A@A@@EFE@>>??>=<>BA?A?>?BFEKFEIHGFEECABHFEDAB@?>==>BEFAA@@?>;?@==<9:=:;9@@:k;;:7765fE0><81;;<<>736NwpsQRopJ%-/+&#$">A'*&./4C3X@+3+2.( 0QeoSPToQ{KP\|pxrtfY?>GX0>=OP7+.-#,./9 $('*6*(D%(%./-5-%')%+###.5Jcmg<&)GNM'#,"+!  &#$!3&2'1'-)05-+%(0*#"8!1$J12!==:84!21 *%>!2.! %2*,)+.,?*/14K@=B<772/M5DM2M8E:=BDI9U:9071NC[JP@6d$*490-);==[pE-JT9E`HG0-RLZc<9@+0=6--DM+86c_N=.?ECC]fY0OHpM_Wdjgasyk[[DBooXXsYAEfiFBOg\tTddYyjtZWoO>fJorE]DPRQPPZba_]_ci]VJVWLJNLNKMF~~jbah[IA3FA74/BR>806(/Fi^//(-0QH^cvocH%F5:bXawqXPPMMNKFJOIU\XpOAO\zpHEFB|zh[gOILSg79Jfu|SRISgKMNccpcrpnq_a]|vy|rs»Àھabmp{ifo{~iqEQJ%3}Z_Sr|v}wzurps{vvz{{xqlzvhz}~u}}zu{ur{zTJXZQIK_^SMV\kRdookkfeh79:s>;5;9;@AACBC@=8463:;9=89<:769:864765531/..WUg?>A! !$)-0+)-,*)(&'()+-,-,.12310,(%$$#$7N@Q=/2?847W9BB?<99LFI@A>xvEDCH@D@9e`YSqdD57,(-,+*`QpwC?QPBJGDOMM`_QTdwid]Sb2O).-).2@*,?N6E$HT132S<@:NUQ(5=>V.FAHH:;<;:8<9?@9V-,:99:CD>IKNLfzb]i9]IICBToDIX-A,Zj`7\_97>DB?668%50,Y6/JGdh>*1CaI]7<-2A;$+0,<8%7/<<+0AJMV/82@>FN4N?6VA09F5,3>'3hJA6X1:<;=A>D@;B@>=?CEIRPIC?C?E4:EL-7)NH@'Kd6N[KHFJLJJFHIEGKU^?VEC5fJJ?A9EIQYOKLDOZRNIDAQaYLA?HLKVXPPLLVPONG>6MVVKLTOVOPVNKOO[UZZVNUUA5PQFM;AO>MWZ_]R3\RMRRQPMFVPQRSQWUT[ZYSQQQSSSW]YXTI>9BHIHGTTWMJNLJMJOLFBEORMLTWYXYVTRVWUK?9GHKDG>>@?AAWKXWUHS*U1E>IC==?@??=8fbbaedg5fc`acgfgl97lkhjklkmolfbYaa[VXY[\][a]d777gica99;<969657977kgjoqppp mea`\`heWX[`i556.00123577343245810///1/14753110/1200//420/1473210/531-021./210253120.//01112430+032231213346536 /!   "" !""  !!! + 2+"3-")*)+)(#$1>@G9,,HH&#% "  &-#76();+)3#(+&+))*$)* &  (#$'"" 0%'MuոZ3J"%M=F75  + +  + # +    !#%      +  !($(/96!")(##-+(!! (/-# +-%'"!((+     +    +>% 9!!**'# +>((,+#$&$%# !<6572!# &9 + +-M%''"R8(E $ !%&#/RCY% $D&I=1#)'"7+01#O|DIQkczePQvEDMuLVD:$4<:1/4G5UH!0,bSVF91,0X0J*(65@E. *=0%)#9;&$33}WI9*7<%>.8.25, 7.@+(Uq1?$( + #)#,9E%-E-3$$HDTU2-3 &/'!3?"..K=4@AHcYpPadXt`fTMcH:VDgk@[DMPNMNY`ba]\bl\VIUXLJMLMJJB{t|uraYUZQ:4)84*"-5)%!*%>XM!#B;MVwVNhK3.(+*EB8D,6<8B>;KLAvqsAhIcUSKG>D *!)(!#7-"$(**  #6$"&%( !'$"+*(:"C/?.$59')%#/A*S,5 $##&C?AM-FB,&0%'"-"/!,58XQI7^:f4V?$45$9A8ZR2HE#75=DK60;.**66/&-(?D*;Y?@=+-6+$L>?CEGF:3>;$#77/&0+5+<;.<8n+;&&<(>41<9(),1*'!&*WIK0<>-2-1)004c1&4; 4;)=/85@/*)162EI.!47$88;4(#1'64P4,!C='%)(862%>!5*)+2"H..31&-<-( ..W+,044&@:&14KK)P<6D-0*,AI2($8!*2C2$!""$H%$*)' ! $(,3+# 0+"!!'  +/%#4%5$+ ,!,*%:" 4  !1''$,'*$ !,'$ +' +!!""-#!# ,xR  + &!#)$& G'#98NR/ (=M5H*,&(!')051: "-56*6'&% %:-8!%5+3) .&/-+B>[;>0%7&)7!%"!'#'/010456=:76665599988998896665:757:;<;:;;=<::9>=9779;::988<===@=::=BDCB><<;?DD?:;?>=;>AACFD?=<9;=?AC>>>==?B@?<:><<>AB>>?DEDBA?><ABAEEDEEGDBC?CHID>@CGGGFDEECB>>?>??@@?@AB@><99;=<<:9<==n[l:I?89998A0=BO,91JR7TG3CKjMSUe^JB420+-(((%/2/6CDY;-'*+6;?%/,W6HhcbSl*|92>E92,5416//27?5@=8I6;Gg\GgSL2NR04*9(6L:)JTKH)8BM[S8OYMQKVmP$+-b:6(5U/B>@:H+FMbDew $+0.;r+NN/7_Y`N[Q6A2UF-THD1;JMRD;+N;ZgubI9?\LnayDFEFM\b]DuuLMH@NLDrGVRQH?MX]_a][_[TMQINKIJPNJMMNLuwojaRLGD@>:3126eL]H58;>8BB(37<5IL;xQpY{wT8?SNJmCD8_gIK5etpSL`I:CWTiNsNLV]b{qvGMEELBun_MY[OQOKR0/0[dwRU^]}VMuC=UW^ehlwovzhUhzizv}se^eijvpl]`etskcG->C/7zyw~}issxzz}{xvwqpt}}tx}|vtu{~qfZPP]YJGR`YTOWb[\osmlkjjm8rvw:7dTYa7tx|<96587875667934@HTLKD>BwokgBr==I@_fbSQQB7,+%@B:ZOV]NDCFHFKMHIJJCOUGS[uJzp^osrttnEm1L;P3M5;9X\PEJe=Z:&ObMW0#dU[)02-MKIHEA @@@D!6YS:<.C=CaFnX]Mwnb@>\:E4BWpzHa>kC7v~tWcQZ[qEHH9IPGFI<`7b`MXvqVN8?eMb204XLKG7EV?N`G^faX[pfyB[x|XP\[vwgYYab{gw_Up}xd`t^NU{yojtY\rjnscqimvfapyhecavnn^ga_eniSRUUZ^mkisi}Zo`berUVM]x|nfr>f=FA[Urhih}m^etxrkUK[q`o>>;OU08+[eaB8H0EDdVRVO?PLOGNZH@;A47-O8J55\146.B_CDi>:-?1-#"GM( 1+>J(36A0F=14=>CP=E,CFDF97J6\FE,.b7U;AfDAAFB/L>Z7F00,<2"I[E@?969=>;?]LFFGKMHHECEILO\AbjWY:Q`9@GRQQSWXQ[8[SR=;88568896]Xgfa]^bfd`^cc_ccc[cd[]beg7622cddc\^8624ged354764f`gYWZ\`a`bf3fgi658877544555445689>976^Zi:7i756644889884dfd324e4565hf6hgf5g345gYh885?<;89;9542`d352accbcbg5i4eb;5445i4311c442111211323222ccaaabbb`dba]`abb\UTYWWXSSK<5K[X4_idWTQOMLQNQMGFB<<9AL?JPG4VFMH5T9DFJHL@EELSQRMIITXMI?CJJSWQLNMR[VMHBABEHKJKROSOOPQMQSNKVX[[]SLU_ZXNOSPETTGGNM\STNQDBA8>FJPOJSPVVb`PMQF?GEGX3:27@<\DUKU61=??odaQEQMJ=P_JFSWSRUOQSYZMPNQOLGELeh_[1751S^VTLKPT_`_feb^X]g^KLWbRLOS.`WLBNNEJNC>EL?5LT?GXKULOYYWTSQSSUQKHRPKQWMPZ^c`ZYPQKHTUZ2]\ZQA=8>FDGPR`YTTPKJKJUVPKICEHOPMLO]\[XPT~XVQQE=9PEF>CAA>BDRYe`M>H^:6865hfe3462d`bghghgh7nnollkmpjf]_]SVWSV[bbbefbcd7gcd58<;7k8:988775ij8:;z?wmgbeghbQWZc354677515745344476454312210/21135433222013254--113121/31215432.0.054-14434413313263417 711/310/.110/045 +4 +%`!!   !        4)1$  (1,"(?-//?4,$    +-6$**D?23%'#,?#  #?7 '  +%  !%'!" !0,"!#WἃP 5@FF-#      .!# !& + +    +  $!)'%"%,$,)%,886635"3 22&&$"  +    %5)(# &.! 0*2  <&(0 .,$,"0/;("#')( '& ' ^ -S%1#,W%, !-8U'""#!9&-+%(]3 ),E,7*I|~Y{Xf_`dymBcjEJPcBECX`VC8%67-3C:A.)' ".*-*"%3+.7PHGfJ;"3& #&<-5=54").7FA&nBUQNE:HTWY]]Z^YRMPHNLIKQNHMJKI~tllf]UGC>50.*&#!#E3<1#(+//32 !$!2:.g?Q?^Y<&);74W45+JR86'Ml]bF=I6./7+()?>SFjJFPPMd\\U_<8;%$&P[rNRXZSO}E=VVdcnysx{mUer`ςxrsfûܹvpuzvww`OA53!,G;C$! 8+* %0#2>-;;3)0HFR*4BB,K#;648QE(*=/)$* )'@H0[H>08/!%(>4.%@*13E9+.&M0++05A0%(,C/312K78?1D9REDE+0C(()#9.%0 7+:C(@+#0%"#5?<6;2"5/-CDFFUA47=FC=*#/=/;#$0%E[;:4:;@CA.,+0.1/&&#(PQI8ObYY8>71.($'%'* $( ++$ '+%!'4,$ +&"%3$/*))2..'#(39/6/' ''/@@-!! -%,2#)F#8( ) 0  qLKB  + &+#&6*4%J"%+%3N9;\3' +/(4 )/*! +7%./)7)&+#$ !1"=($8!.&'I0)%*+2*6 ,'0! $!8/617644762*+.2<*44(7*5>-/%B84369:58856796A(77// ),"%&''(&!'$"B!,)120//122.,/.*./0+00-.111.000,-00/1.++,./ 0123,(/4V/0014232000(0+-.//.0.05203-h-.---,..,/..-/121/**,,+-*+&$.*-53+(&&%$'')(%#!!( %(!,%%!)!!$!$ &(((%$$*,&%!$#'*'###'+)%"  "&%)%$$%#$&$"()*+,&"&+*,%$'%&&!"%%.),&)!!  #'%#('*)23)%'!')$#:54)!(%&&-$ (*''($&(*,$(&'&$! #1/)'#+()$##%+-0540/+-51$$*.%"##+&!$"#& $%)!'"#('&%%$%%''%#&%#&+%%*-.,)+'($!('(*+)%! "'(/*))'&%$#*,(%$!!#'''('/..-)+,*'' &"5  "'.53(!&5%> .(&20.-+-0/2334889:;85001)+,)+-31/10-,-101444?B!<7402453)-.1~~~~}~}}~~} ~~~}}}|}~~~}}~~~}~}}|}~}~}|}~|||{|{|{|{{||{|||}~}}~}~~~}}|{|{{|{|||{zz{{|{|}||{||{||{{|{|{|{|{|{|}}}~~~}|}|{|}}}|}|}~}~~~ +~}}~~}~}~~!~~~~~~~}~}~~~~~~~~~~}}}|}~6~~}~~~~|}}||}|~~~~}}}~~~~}}}~~~~~}|{{{zzz{{z{|{{||{{|{|{|{{||{|{||}}|{{|{||}}}|{|{|~}|||}|}|}}~~|{{||{|{ |{{{|||}}|{|{| {{|{{{|||{||{|{|{|{|{|{z{|{zyz{z{z{{{zzz{z{{z{z{z{z{z{z{ z{|}}}||}}||{{|}|||}}|}|||}|}~~~~~~~~}~}~}}}~ }}|}|||}}~~~~~~~}~}~}~~~~~~~}~~}~}~ ~~~}}}~}~}~~}}~}}}|}~~~}}~}|}|}|}~}~}|}}}||}|}}}|}}| +}}}||{{|}}|}~}~~~}~~~}~~}~}|}~||}~~~}}}~~~}}}|}~}|}|}}}|}~~~~}~~}|}||}}~}|||{{|{|{{|{|{|}|{|{|{{|}|}}~~}~~~~}~뀆~}~}}  ꀀㆎ곂Ɉؘ魻țӟֿɱ꤁¥㣖蛥❗Ĩɝٹ܋񇍀ҳعӓا耄ވբӀ񾦯ܓ˕ꠝ٬ЯĚԅ䤪ϲ熿椆񠎐̢שᎿـٗųޕǵɘܮ㦀ьχ먞ּᙖÃ䋸ń템ư퐎˝ܓ³üؖڐõDZҥ❧ؔôݵ蒘⇔됓쉖앴ֺĻǝƟҀԷڄٵ̵Ӿߎ󍟣Є腃ߺŹĴǽȽÿƺ򠱥􈑖ӹüヒ򋡫㰀횗ۀڜКńѪʽǺȁ֖묚僓ջ꒨¾ܳꟁيʆۣ꿇ˆҜĪ؊Ǯ݌ˋ݀ːʋ攞ϭ䱽ɔ㧛􀨈󟧳ŏáǷˊ㩌Ԭ􃙋рç̂ڐÍͶȱɧ޳˞ĝꁻƹϰ݄ۅ㫭㽉͢㽽­ʤϡľʞʯÀѨѼӼ·ѪیހמɽȰῚᔙُљγ̼¬镂մՔ䈌л¬נ۶ȺÈݲՎѠ½ˆ񖲳򉏇»¾¼ӏö¬͸ķ̷϶̺ħѹӬ恦īü݀ԲނĻ̷¯灅غƳ¾πϲ碡ʿ~cacaef^fcie978>C??om879:998jkhgecdgfed`^aeegfgghiiddhbdfbbWZ^\cegcbZSV2436774fih`^`aica\YY_`^_`a\^]^[^`cddbbk@E<:=;77566ddd5:74"8>C=85;ADEA868768858<@BE?8878C>774678::9<=99989;;9:88:29;@@>A==;===??@==BJF?=><@??AA>@=;@B@==><=?E@=>?B@?=<>>>ACA>>ADEDD@?@DHJGHIGBBEEIHGEIEHGCCEHGIEFEDFBBA@@;;@=>>@=>?BABCCFCA@BAABDDC@CCDEFIGFFEFDFCBCB?<=@@A?>;9<<=</$()EM8#OeK!nEf7dphchyln|ONNefk2"5*,1,9;H=02-/+14(),./2/2,'(()*'+%%2692'3.IA7I,+.7bst-41yBA3/RAGW*".2-"%>:(%-2&*'("+&%#';!/(!*'1,4-,64@/ M&B1 4 &) ) *';;,7')&",-! ##/1A=@+F=?8di:CB/HJCCDEC8?<8<6@&%B@HOBFF<:B$" #'""(*79"*'',*-)&&S8hck/" &&&!$&" )'()" &  )%!.+!/%0("#kS|]Gvxk]nqn]X~Odkya[^UqE8d_^n;gz]kUoz~SoP>ML,xfoRT`mikj|}ww`Xw^tkkjbu{^M_dXpg}pwe[wIX\ei|{zb~z:'.:&7IW+6;0M:pKduTmEtxTWHG}~ko;9@60O;RcaK`_e:5(>K/JA/IB5F-K69B?762Q1-64IOYsCAZmA9C0X://EB64-8BI0X>6SN=P1!U_2;O6B<96\BKFSIqqBDFOdZB9IMRJ`Ui[XMKKKONSVUPOMJF{tegk`ILGGGA?:713BT`P^LGJ/,$#(,:=6PO9c[qKqO<:rZCG=eqcSJQOeqASWd>;5CPQS_ZOS^[R[^]iqDb[VdCDCNJ>376QOQVNMD%---.SXsQopwdNgBDxo;T_G[eZdmlsvzYVhcwټbaY_a\cdkwmqglf}pM6JH$:Y{xo{vn|kmpmfmuwtjsq}tx{z~ixzkyRQYN@FM\UPMacWcwnlopr777tuu8iR[a5syvvw933:8886588845?E8.8:<::96::>=@?@==:557755654356669@C"('*('%'/31/0/21+)+,,,**+,.*20-++.(%$$$=AKFTQeDT5m?c=+''-0/-07.45'*M>LP3;A8AJDBzbBOAhsyBnBcZjg^bcRF)*.,$+%GwBH@IUMNICINC6RXHPHPRIR_?MOXc\L?Er[33.K9U5L_;ATKU{DSY:62 )C"'bJ5:+&%#C"##!%)JR>38CICGB>DM^kqR]>XInNMFVuiOnYech^dlaesozmj\y`zxuoqi|uyemd^Z`_}_en`w]hwcynb]cb_poeb^IXSa~ee|lblm`hUWa}piZdZaKNKSr[SloQTVGJX_ogXR]gm`dklbfXlP_i|o~uq^Z`c|d{cgd^SrOeuutfWjj~ZWdba[siTntwMfv_VqyovXRrQ]Sy_ZYSsvnyg|aK`oy{dQ[iPRPKc]O]SwChdi_Ycp[V:14&*)7:E*6G17.i|yRXKTpce^ULf[<8@38/\TVcqK6Na I[]]7#6bAL;HLP?G3J6=V0'38./'>CO7^Sp5aQ5O:ODGEFDGFGIEEGFF1aRj@HJKKHTQ\caZ_`ZY47369@;:6487275cdcdfcdc___ac`]a8MQY[Z^h;:8733c2ac^d63134433654eebaWW`bcd4ge4f4768<9985545443658:::96hfk;:7i555667899695^he5e[4544cfh5gf545553b\7779B;:89983a463dcd^^44bc5:65g4db68d34355521353122120224321eecbb1c2ecfc^aggbc^VVZZVZWTPF:88CZZfaVKJKIMKHEEEIDAABD6G5BDBGGLE@EILNNSY\XWTJDLJLPMMKFIIIGHG@PXYSIEVSWMC<;XF=>EAEBC>%f7`f?>D=;P-=;=;<<>><98;87542343566;7e4Ddeeflmjkklnjfgc^^]ZSUXaedi7:984c_\ac79@@<><858987jin;?>>>=:jhcgih]Y`-21203716363" 9535442113310/.132345i22402201+,.-12201+''12310238353116641453434125514347 "/11!7    !         !  0 (*!&!$#6-H@:83*/*3+%   + +  %,, L.+>% "4)#(#*#7#+  +   +&"#%(+&?:,7#3oƿh H^GFH>!   $ +   +$$  +#     + *&#+#;i9.1/,0%-*'*(*,(.5,-/&#*$,d<.B +    %#"*$&S! !+$." ##( $ 2,!$! #" #1#$%+V<[#.!'%$_ > %t64-%2<}.?"-1)A9dHlYkI{YYMH{zhi759/+I7D[XFZX_:LYDLQTG=5'0?&=2"?7*7$:0030"!+<=F^6?RX.%0#0+2('")-2"?0-=91B EA$"/2-  7(&,/ &)&!3"##$]2,D7=9I2@$?7?73W567JI7, :H4%*:!A:L@;hQnEwGMhfMWh\JH?==8a4:=GBLEkc;@BMe[A4CHME[NfXTIIGHLLQSSMLIFCul\_cV?A>=:-+((!",3B2;/.4!""$ 58+OHP4Ve:,&P:/5)JXM>888L`[7FGS/.)-788HECHZXJVNNNQ2JIIW:628^Z2& ''788@63+ &NUpPikr`Le>A~n8Q_L\d^rzpw{]Yd\κoxlpqnwy|~sE)1/#G~|{qx~vӻɾƳm}vUQWI9@GSMHJadZlzrrmn554ida.WJWY-`loor60-0./,)(*'(&'/3&!-.+('##&**,(&  &"#$'&&&%%%&'KJ152(     * #$)),8&.;$9%& ,* !!:4%0"B6=EE+9"4.8:145+#*_f-3/8D;=6.36-29-822?7;G+'6EPKu;/6XC$$,0-5$3(,N +, (5+!" $ $%" !+%)&<-&,+!!/!$"/6=MM3A5>;AW<-S7B/571QI59&#$#'?BF0UP"&E_!"#B: "')+2&/3O4?.5%4*6'#!11E%8*J;79--?>V376<).855:8+;RWX_,56&999=LCO225.4-I-(('(9K2(+*DF#+&+:49-<@LC@L)(2%;(%05(61*#T?,AAFmU7V7he6'&"&)5,$2C141,.19EV`:.+2:81:>=49.AY-+7E;9mn::867:7mljkfgfeggidchdiiieeffgiifeeadQ]`]_bdda\YY[_`26:853465fdidid[X[Z]\]`_ahfc`_`fe``^k:8ikhgel>@;:A=>@:=:9A@>97677;=::98:9:99<<;878978799:8:?<8:9::<;89;>=><;>DB>><=A>;9>;:?A??<<=<=>>@>=>BBAAAE@B?:;<>==?;CDB@BM@BB@BCDBA??=@EIGDCCBACCA?BECEDCAA@A<9ADDCEEDBCC>>:;<<=@C?8j<;d@G;=@JF<:8hKT0]03U[:56Agqo`JFgc<83.*0N@CE+?+[OF7)I'7m]/+/-"?PBD+.13L#fXt_ITv{cvtnUXhgt[ggt^0*676,7,1SBABQT7<5=7,.)&).1/5)178696)$/2470+!H?:>5H1PVZX,3AyVbemDNSQnrJ7?4#!0)!)/.('&'+<$')7!#$'(()*"%'# Y1.48/<96,4). 6>4&($##*4((GEE?HKVK<;Vao>D00H@.+-/GSG8@J(%%%'%?08HGB<%%%$&&()($"('*,***&AgZIsUM7^XL[zJ,&%"#&$!$ !2#6$$++,+&$2& !!$"#"+05")*'HM\}~uZ]y|j]tz^Ith\Wbyf:XNY~ViGXhk{t]\RutiVxseIwk]BTE86+7L710::C?C8>@15D)6k?I07PLSJLUFA;cWTF3GBl@7D=&0TS\bE"2F>=?wLA62D1FF?;\Q0Tb44.,1)2FCUe?VFwWIs9Ct]{fOAYIB`lTk;[KE5=>MEBCH9/0+$*''$7?%'/M?NaScfn\S>?EEPY^MS\dkmn{|[cyo_Ƽιd`[^ico~xrpvvonY911?39T}{wuxnmqr}|tmobfegrqyxvy{xwqpswy[TNSHDITMMPWe_Rjdjooqok89A"*.0200/0+*,/0/161/.-,+-..+-*()+)$$$%%**)gpRldQBxS4343*25>97'45TAN?9A?4I5.+***))2DM>1.61),<95,<;d4jc@A=DsmHHnms{iMYjd\]^^\O>?:,/>9+788`q[B\=SGC?CHG@@K?Y0WZYJE@K[ORS[mQVQFTIA3N5c@Y:$lGCdY3C9IDB.3OZIRKI&273(&$$%%%$(9Q@=8B835D3fYPwCcjFySUFPZMUZhfMZlyi^|o_scVW`uosvZ]dmObf_a`v]smibc_ZY_ldeWzVPNY`U}gqnhzcPc]dx\Q_e^bgvIP\Dke>7AQVt;]MQQ`kWWVU[ii\^d`]veilo}|\wYmw3,UGcPvt\{hrZbrYuuhOfjaZwXVaXez~q[Qbkw~sXaiwOa_x`Uwlhfq[Q|Zf}]LvyxO]NLXQgPWqzo>-13A@?55CM)LI%>DIksgG^cBW\A6B;USQ0y`YPB:WL:PVGF=B">3F588GK751?*I>L?n7DCBKKK?11"1FA7*?$,[m@:;<<=>>>;_JSRLK]ISQBCF/Km849FLS8M@:CFMX46@N>G-ULFTEBEFEGIZ>W:KeBS`3bRQNUa23_^_b2R29<;B>763478782ba]^cfb`a`\]ZZYSJLQ[cebi8858543dbbc6bb6D45gc_aeb]^b8f4fef564445775977645779:9;;:875677876446445779<<;;7677`14Cg444ff596f3bb7808=?<96985ca25b_3d^`d3fd3;4ff4445543434441232c23335453323c1dcdedcfihfb]\ZYXTVYQUVTOC>:No`V\ULFKIJB;8<:?F?C8T;+^CLDKJKJJJDLSZWXYUMMXb[RN6/BJ=BCSPYZZTUOQLYPPQTXVTXSGTYYVOEHPGLKIMPE:,05[08DRGLJUXUPTQTSORWSEBR^[dZU47:H7]ILV7:CD@:6@5IGAKSf]POOTX[\[b`^WSQIHSUXSSUUTSWSV][WL?GMMTYdd42XFJJMOQOQTWZXWOLKFBMNMD@FGJ@D>9FQNLFESVRJD9@WLGACBJ<>98^RF:?JBD))T@k7;=;9776487554345565665465668mjilqrpjge6b`c``TTW]jkcjg9<<94dech548;=A?:877565lm:;8787kkgg6d`YY"../201-/09436775544323x522525564343233133/1'./.01221.,,-,,3385861021222546<96354764406333445129O   !  # " !   1.""+"! 5GD8%$9:$$$ ## (# $ @4I'%"0/#,)'3!'"&(!4#"(++''  ""$8574(=.O[ɼPJC.3QJD65%9<     +   +!   ) $!""  ' ,!#6. 2@3*07# --((  + +6$22  +.6/+)&# "E- /#  GF 4'# :8)#  2 +%!%-"%dL  X9N1_!.## )$&&0> ! '&358654ntXFIQSO]Pf_U6=1$ENH=HoGB8E7B+[QYHZI,=4U4KE8"(/.D +@,'% *#$1,+*b<6--B+=?;E6,-FZ77**5>- (!$7Q**cDV^]SDIMO8=;<A@>DI_eaVea<@Yb8?f[l5CBBGFBGBC:\\4=T]FC8596:EFBDHJIJNOEDDB=:<7_dXRUL@<@<4-+*,,/-1*;17J$&# !+-8J+C7Q<3V#'43*/SB]I5'@.(BK;P,K88*.,)06SAFDKU]PVhorpv^eviXֺżuuqq|xvV-!!(#(J{yv~w}x~v}žƾywv~uaULPA;?KDGLXfcVuotupokg356dY*PQg2dhps:wx4-*01/,+),,,*('#%'++)&$!$())(%!&$#$%&%&'(MP54.    K:?/B9-&F1,#+!#!! *,-<<,-59=F@*09747772(!!!(ERB0D-?41*..-''+!3034)((2F:7:?N@C@3A81"36#.!?-#2-"%%!)2*0.'&%!9*1(71!$75/1F92-CJK<3:G:4>?:19?W@T($+;89##"*/C -+#(#30E6=6+),;?<61LS[EA?"-%1pB.%+1/O3L!/(-'16*(+,0=>86642F8<<=GNlH&8;DTz}fd|}aS8-F;F;>+"#(,9$"%''$&5-(&.")"$!+ 3'%>P6':#.&34$+! !#+$&#%74/%$3;(0 3,96,3 +%.&(,1+ & s@ +    $$%$  #>BEmE540$%"%$(%#;E@;,/$),, +(!G%/,00-#''! /6.#-454D4=;001 1@ "(,,$!! $+%,#*98677643597404"+&1 (./%%$'++**-$/.+,/20./.+,+,+)"$%)./060/-3.+.0-+,/3444p-310--,/,.-/+-/0011.,-+,-.-15661.,**.),.,)! &7/(-*%!$$##)1 % &%&%$%$##(*+,+((!(%,'#'"%',-,,+%#(-+)&#'$**+'*$&"*&%&(*)()'!(+))&!"&!##"$& ) ' $"(*'%)'*)%'+'$*'-'$($74*''%%(+))+/1-.,)*,*'*+(*+---,12/,,*-,.-,.-+(*'-,!)-##'""$ 1''*"$'# !$!%0,q$$%')*++.-+(%%#!)'+(())(&)'',-,$"%$)*//*!#$%&&%(*+-+,('&# &&%!""%!$($#! &('# )## !%0*#"% #2-J8757<><65244311312*)*.54-2/031264 651230++~~}~}}~~~}|}~}~~ +}}|||}||}~}|||}~~}|{|{|||~~}}~}|{|{z{|{|{{{||{|{{||{z{|{|}|}}|~|}~~~}}~~~|}|}|}|}.~~~~}~~~~~}~}~}}}}~~~~~}~}~}}}~~~}}~}~}~~}}}~}~~~||} ~~~}~~~}| ~~~~}}~~~{{{z{z{|{|{|{{{|{|||}}|{{|{ +||{||{|||{|}|||}| }}}~~~}||{ ||{{|||{{|{|}~~}||}|{| {{||{{||{{{|{|{|{{|{|{|{z{z{zz{{{z{z{z{z{}|}}|{{| +}}}||}|||}|}||}}}~~~~~~~~~}}}|}~}~~~~~~~~~}}~~~~~~~}}~~~~}}~~}~}~}~~~}~~}~}~~}}~}~~}}~}}|||}}~}|}|}|}}~}~}~}~}|}~}~}~}~}~}}}|}|}|}|}~}~}}}~~}~|}}}||}|{|}~}~~}}~}}~}}}~}}||}|}|}|}}}|~}}|||}|}{|{|{|{|}~}~~} ~~ ۀ~}~ 񄟬胃إΓԅހĻ삛퉔󇎬Ԇ촱П⹗؞˟¥ΜԇծҎӿºͺ廍ݿ񺩇حҦްàˏĉл޵ŀӘȻ̳놆ΎżΠȭńƮɀܜ႓đЋѝщӰ焞ǜϻɷբݏ͍ǠŝÎϸʡ冎߃ތڇԎ׼߅ڬ̑즋۹ѶÇӉdz⚽×¹冉炉􇥥̻ãᨶɭ⛍ӝȿՇ񓕉ŶĢѵ݅۾Ž݁Ύ،󊏏Ƴӭ茛ܓΪıֵ߽ȻŬÿżľ욠Ľл䏷땰ſ̹ɽت߼㓢Ư钥û¸õ¹Ғ„Ȩʲӗɡجݢ˶ͺͽȠԲ탒䩢ၰ순ɻ·̩ǔӗ贬܍ܸԃ׺փ׀۴ٮ࿟ɗͅƪӲĈÍՂ҄޶ЎÈǹ邼趔񛐛ƗӃ򱬾ǯٷͽ١重֡ӴݑϙеϋȵȽ𶓡βܼ튠ѶιɁŌ은ꜚ¦ӲӞϕɻ侴ñȀ֦Ń쉘էϟʔȾʼn숊ŻȾʿĪ׬¸裣ǠʽـȽÙɶǻӸ̺ހꅄؿ߄ثƽƶĽƴȾœ񆏌׀[ccbbe^^ebkklmln;6klmmll7865666igheggdehfbadbjjgcdk77igkmf\cba`afg`]]\[^_][Z3?B<:565kmnke_ZXYYYchf}rohfkebdk>;;A@;olgcaii::6i:7d;G;qhhk:B;::79k8<<9656;<=><59<;989=FDDBAC@ACG>ED8:8979:988=OB=<:;9=<<=A@=>??@CA><::979=><=D?=>=>?@EA?@ABGHCBC??=>=<;AEBBAD@AAA@CGCABCEGHFFFC?=?;87:?CDDECBBA?<><;@A>II==<9nmo;;@GE;<:9?B6637EA5*b=WMavW^2849,;/QM?QJH=V33D(:89>)10*/9i'5?G3l:gzv^]wgvNHQbL_V\VuT-660gT(=:5I3DB,5:JLY=, 8135<4-20;<667/,!./6=9/#A**25EVK+7]flliR<\vYKH/.' 'OFC989"+*,-%!4' %(+#'2+6/1(.10<450-??,#(-0A+2+%#%4##$%,:.)=BADHPIBXA>)=C9>?5:2PHDI*GCK+O>@7&&A$##'%$%')+'&'"!$#"$$*),,()((&!#mQ|3bMw% %(&! " ,#43! ')&&$#%$!" $%& $'/*18e[nv^WQh]OaW}|Cv^nN?SjQWlril{yYa[|h[VsQQxXpRyGZgysqnhj0VwMeBVW\[fhhnpcsr{bGiy[im}sylfp]fs}pB8"+8:2+14el1?JJY^S??`noRLyN$&RL`TZ:EKwVQ]FMKN(LE8^@q.6\LpF(228567x?:U-AM2-F`<;5>ie4GK8GS8606S,:;9KN]hjnW@II_eIm`mYkD_2=GAMgbYE>FRVUB7CMIDDBFJLLJDCPNSM]aEb8AM^UI;:DBKRWTPLQB|:=:<;fdbVUYLMILKC<;JTIL8^20Xvg:-@>68IFNuD`biYc?:BkJG?cs>cMDO4l9CIXhcK][F:ZdisqD:V45622?AB<>84-)'&#"@5C)B3e\hJTbjfdc=@EOQ\X}MR[dcdpi~sizгY_[Z^hbuem|yvfK+[BC_]Jz|~ytmrtt|~uzxshdeflqz{sk|~vz}|ysaOTQFEPMKPU`_X^mhsoqsnqstutiaP`opxy~}t564::988989645.+36;69<94378>?=:855/./6553221236:;7+7:9966542221/UX==>'/3.3510/02+((/3::792.,++-//+&%'''%%('('$"!$CCYSe]pFSD16D@9AA5>6;/U?H^B@ZM9*+,-,,-+/>;NH3&WXE*@SJf994fY;EK@cetIkncTFRZWOY_^U^WH^^PJX9^5\YD07B?=$%JL1YuKK:)X:% '9+2JSB=3+)('+('&'H7B<@,%*/92,|dfosXVZFOzmvo]dhYR^s`L`R`n|xIN|BL^h;@>2S>PE<>7zD>239BG5XN%FXclrAo3DWSUS~KGL1;SA>e\ns\fZhU`NSiYwVT[PmvvY`setYw_gcwg_gf]_[ehbXYkb`o`lb``^`WVQbUZQcc\`Pn^@bHhR8FDN7:UU9hd`aq|MiUKBEMTZRZkBKNd`trluȡWRU[ka&9J(=KLd\Qacet|v`Yagd\uh[ZHRXZ^kZ|k{tpaiW_zpzRpbqWyjycqbjRL@Zat[VxlMFJUUQMJQGMMt{u7()8787F;41-K45KMCbQ`jeYPAgN0E.;G4?0:Yj;hIS:685sG<:*2?=hA4>648r@AI>A;>KYHaKP73K0,,-KUFaoTQ2:@2$+1 J7*,LC%N*26?594786/A>aK/V$2C66=J[K:1=CA@I<:=I7=F>0>LP#.76-4$T=F;7;<<<>==DPX15KUg5N803=W[WXU6.I1ACZ1QIGGDBCY/T\=eQ:Ud\[aj4d[XUO]6642\Wd^^;:@KA744d5:76822``acb_cc]\YWVNIMTahSfjj6637645deddee544e3433`^[4bchff33i65855345456667567::=?@>;964eheegf5465heh8679;?AC;:5563ffe45fh4h55323f`<;567;78873bbdeeca^acb__bea54hh554246346434322a`df34677856321221cccba`ipfcMZZVVUTW\UWZXSHFEGXTLJL@FJ=-9DCF@BD7b^U9=>MQMNKNLJK?W:?PONWMIK5BR3\eYVPV]VWSSRUZ]`WPOO5-OJBHBRWZ\aZXVTPRSLPRROPRVNNYVQURURLQVPXL8?EKJAHXSHDLMQSPPTMPJZ^[I>SP^dYDY696@=.4MV4CIGE?l`YTRRSPVVX]\dgge_XXYXZ]X[[[a_gdcdca\\^_a86edbZLPQY8c_bRX`UUd\g]Q\V]42SJWV?:=88;867:!! :<9522040"<767#2,#!!' 1 !  " "' !&%!   ! #$565 +N4,D-;39# %##!#  )"&61M:(;#%"<(/*&$"A5*'#! +.+)''*(!(#*9HS}8!&

    5+# +  + ! +   $$.*    + (17-*,%,'>7365-12%$&  + ' "*    + + /-!))+*,&"(+$"$)&,0#"#:=7L,*/)(3#$!7<4'. # 0>.3.+?'R O1A>A;B',&")."1$)#"%'").Xb/6BCX^TB@dssZO|JD@[RV8BEpU-AT7;:XZN52^SFWABC5J8KR?FfY,)  +'$:\8G !%% &0.&+=%.A2R6&6=I0F7- !$$:P &)'/./)d/0J"7B-*A];:2;bY.?@,-! 3G&45-9K`jqy^AIIcgEaXjXuB`1;D@Nmf\C;CQVQ=0ACFGF=>HGLFXZw@X3:FULA45@BHPTQNJL>p14\[UIFH@@:=;2+'/4..#: :VN( +*$$0/1R0LIH;D."*N52.EW.D3-7 G'(;;7+I4,/)06>IK?TV=6LQ\aV/)H./.)'11/'(" )&4"6-\VoOXgjf__??BJO\WsMVaghmsl}ndzҮejirqxw~f?>+.CJCu}{w}u}z||~ʴȫɿ|{uvļgRSL?=EB@JUcc^evs{srsjjkkf]RQG]hflnzy|q2/*02/..-./*&#!(I)$$%"$(+&!$$%&$$##"#%''HO5-$  + + + $ $L!1/;4>(1 !!+ (5%%1" !$"02)$!47E-4:2/&-1./6;825-&14+'5"5 >9;'961,+--.-*27.$+1,-!)?9G;/16318H740<)$*,9E**( +,"#!@?3.3?2""#8$96SQCA8=<0-4D8)4+4S>CW=:G%*L%++33",(#'&^2*!!"(-$=3#.44?;id`dfhmnp8;;:9;EFA=99:;>@?@;8@<<::976j89;8;=<==<=?=<>;989<}==<>??;>?=BGGGC?==?>?=<>=:=GEFFB@>>=BDDCC@@??@>?BA@?BFIJIIKMLHDBB;>>EMEHCCEDBGI?8:@CCDBCAABBDBDFKKEEDB@DIIHIEDDEEDBABGFDBABAC@BBA<;:<=JRHB7987gbbq;7=IEDFA?cK03294FL<.10@/''')K>14WP71,D0 $UAL7RK[N{\MQul\M_jaxgYs'+(0;G>3BB)1B>/-J2O/,/'$%-?,=O?68;97.(2/06%'7?>IZ[zH{rf(%NHvm_V]bfCEscw];:%"+:]N*,G2+ 67,15.236+-0/*>'0+&%!4"&+49UVNK:4'@30N2./6*,B8052*+3"((#"$$(&$"# $",' #,<'.5)&&)&%7:  9+?$!$#(--/" ##!-'*+)!/=:\UEb;mCOxL:W]=NQWVE8G=RQ93:Fo;Xh:BIG:4O8+'10@B+PUSNJ'N<94-@'"%1F5/:+2RKQ@1E@+BO,)U9EhIb]o^XD0CU0>KM/+].HJDe&,c:?94J2>;BB9;D[W93H;1*89.KUF5>7[?BC;C68??6:8CWfXodtsEuQ_iEFzs<@>WXR>`?CkM]R1DH30,SV20KjZPQWUh97G://57:056?>872.)'(& !C5?<8KFBVuEIThsr_KFHA^hXSAJ`kTutpuzrUyg`SPQYYSUcmllq}ecq\GRLQKaaqwuy{wۀrzvwy~||s~znmgmmjokij{{|}zuy}}XYUUI@OOKGNZaZVlfmppqxfptuuqg^Wmu|~~vj53089:67:77552/049:656511::<;::432-.-04440.0139<<8-476641554423.Na<<#/20,//1001343,)1569661.+..*&" &'')*++($"!!EB`^Z9chueK:CPKCX/,'8B(6;CGG>1.150-XY(NYMZ]qF^^HY9^OHI?AKVvdZurQRWdTrN~zjíiwwy~g{vedjq_{o~g^trlZoWr\Yd{hfk_\Ycw^OW]a_Xbrmtnq_Ga[ca\Xc^]Osc_Zf7O=?3/L?`+bRb37tw[Ryzzwv;i>vfQRNg|GjnbKI\wdXY.+L/;GIuTpU[T]{q_a_XXr}iUjJaSJZcYaRV^z\mXYv|S{ppSYfc[_pSRXZeJJnIVZdYgepD4Qyt|xkJY[KVLG}^DCSV``yZ:;+,'(R+I?7AEU[L:Ir~n~LNOadjSMK4GP3?N4@cCD6E;DZ338v]:5@0WXN6T4-(08-262%'LBC1+<@3%2<:CGM@B-+EW18QW;NA.3959D=69=?GkJFF2;F@LQ-;S0;`?<99<<=<<==<;fV$CFFJG@BUXJFL5DH:=7mJWc[J5F0\F8TS58ZJFBEGJ8:bc>DPUbed4c563ZYTV]f449b\[Lac6<@<5674`4:7964e`\fca`b^[USTYST[ZDXZ4455747832c33bbbcceggccbdd57in6fe356736654543256:9989;?B>><;85hf5_Ybcighgei567657?B@;;733gibh5cceb_c43335467858856622bacc32dd3232edbcdd579756645664543211a2243454433121321dcfd`ajocWL\YWWVTVWVW]SMFDBB@D>T@8A.6EEIFCH?99;35;IORTRSMKMCCg[ILQLOI>`L=RM;78767878jhgdd_eeea[X*.23/331/255678:654677573144652223238645343121023421.--.-011/0,---+++*52:6449<979989<:;89!"952303015767 873457:9; 46 ! C   $! "!$" !! ! !#)"1/05"+!%+QG<16I)%"  $* ,Dk.>8;)&$$=%#"*4("1-%/- %0&"*/%!&+22=U`~E{qU(;60%--2OH"*;Y39 ".  +-+!  !&$      7@>8($.(#=# '!  + +      + + + +  -  %% +1%,    +&37(&"'4=0/5?, + 6 . B0$ +, !(2. +=. * + +  +fM#,,&"!##-%"%=$*)! *)9/=.8AKJSz`bjW_DkJ=W8@L;3:Efp;7ST8LOUTA6F;PL5.5Ag7M_6AG?2/H) "9@7,$:10+%0 ,*"& '>;A8&140F$E)5Q0&FX>P " * ]'/ O4<6'2J1'-2I0B-;7?A8;@UK! #12(?E<171M1/9;7@6;/084>@EC?;838IQMQILTQPF@2XSRLROPAA?2,.'*)<07;/18"66W\G*==-)"0?G@ZJRP,Q6CJ23VT./-;?9'<(,B5<=(78"@>#$@`QFEEBU.)4,%'//.$)(+)$# 0+73.DBAZ|KNYhnm^JBEB\eVPAK`q]|{quunRxe\`ZYfielp\=??C=MP{v{uy}~~v|}ɿ~vzzh`XQD9ECB@M[d][rowxrqubhjic[TRRknsvxwKk2,'/0.,.1,+%"#(&  ''%!!#%$## "$$&&)'@V2(  + + + + "#62/ 8:A9/ '$ +,"!-+/&3$-?47993+,/.F3--04,6>:;79%0/1&",,FB?J(%+0127+-"%*4&$''"&",/.64.1.$-9/+8.!!4*"&4&%,'+#4&"#../<>%;0** 373/7AF1DJJAB07+104=M]T9;>=AK&91#E" #/22' ?:,4(//9#/6*-A/O*S$$$(2,A#52#$*BE_9@+6$>78>;]ILWH;9?::8GXJR\`5K;4.,0+2J@C:G=32*#',.#=:?,71'.88MK<0=!,$)"!(?1)*1&#&1K2P2%!)14.%M->DHCCRRL<(&:&(H@I&7XTjtE2=Pp]LA=$,+B*A'(6($-7#%),*-  .! ! +  "!8A<+'.#   )83,#("")7&"++ +$ !& !  bq=   ++* + B1F6?109)B# + "!'$! !&+!(! 8> "=C&3(&"%'&)4) $'/%.43 05.1448723@A635#,,##:&*01(%5,&9;%'A961,"!// &'.-.-*)')-0,)(!11,0.-431//.,*()+'(+**+/.../0001/0.//360031,)/142441324/3111.,.!1/0../00.///---//-/6:3,$,+)*+)+,,.3+&"   ) " ""#%'()()$#&#$9/'',),(!/"(')/,03460+'$''++.+(#! $$" $)--+-.+''%("##**$&*,*'(**)')%%&#%'!''""&%%'&%'&(%&%#&,4;6.'&'(,-!%!!1/,,/---/115<=:951/..-.148:954356454:200010/+-*)+),.)-*(-.//(&*+,*&&(%### %%((&&&'*(*,,,.-*+**)-*'('+**+))(()*$$)$+,,,+,-0-,)'&('%&$',&'$%%%"#$$!$"#0!"$ %)#""%(:&$$!!5($&2$6--.16532398777831-0542/-.246788:> <874"#!53321/211.,~}~~~~}|} ~}}}~~~}}~}~ +~~}~}}}|}|}~~}|{|{||{}~ +~}|{}~}|{|{ ||{{|||{|{|{||{z{|{|}|{{|{| }}~}}}|||}|}| }~~~~~~}}}~~~}~}}~}~}}}~~~}~~~}}~}~~| }}|}}~}|}}~}|~}~~~~~}{z{|{|~~~||{{|{|{{|{{|||}}|{|{||{||{{{||{||{||{|}|}~}}}|}|||~}||{|}|{|{{{|}~~}|{{{|||{| {||{|||{{|{ |||{|{{||{|{|{|{||{{|||{||{{zz{zz{{{zz{{z{z{z{zz{zzz{zz{|}}|{z{{|}||}}~~~~~~~~~~~~~~}|||}}|} ~~}}~~}||}}~}~ ~~~~~~}}~~~}~~~ ~~~}}}~~}~}~}~}~}~}~}|}~}~~}}~}|}~}~}|}|}}|}|}|}}}~~~} ~~~~}}}~}~ }}~}~}|}}||}||}}~}~}}}~}|||{{|}|}|{|}~}||}~~}}~}~~}||}}|||}}}}}~~}}||}|{|{|{||}}}|{||{{z{zz{{zz{|{|||{|{|~}~ ~~~}}~~}~】~~ ҷ߯ԌفܒچŦ̅ԇ݆垦൘͂䖯ߙܔ댓рļüȲξĀ˻򭤑䥑ʥʺퟏ҄㣔ѹȃ‡ڰ´歋ʂ׭ͱҽïϹʴе㈊ȿ􈛮򉎋멥ǔŬրʄɫԱꃧ񱩏͖ϚLjЩևﳍЙס뱂ȩ޿ӮǂͿ涁ڶƪĨ򁘗̹镐׌ƛ͸뀗ֆɊةب̦ٙۧœ˂Lj􃚒󄏗큭󀛢򄛜ɼٿó۪଎۟󛍕쑎񡪺ȉ›ֻ׋߇ƶǿϲýǿí󓡮򁅊ûĻž½ݎꃉܬϹ棢£˂ýбގŵ̺倫ͭ譔ރᳮքցӀƩӢ˕ΏϤ貈ņмڸԟ㿾𒌁DŽ¼񓥯Ѥȃ߬ۅҊӵɵ̀訩귣ΠЀϽʻڒɼФҶېÃè…͙셋ڮއѬš䣛݆˻πю¥㽣ۯǼɿͭĔ瘒̟ͦձ剶֛ќ׃αޫ݄֝ŽЋ鄒߉∗͛±вů܀ڞÕ۔ǧ߉߁򄔘삘񅀅چͽż˪߈ȮδŽۀ¾ſǻļžɿ˿øּ刘ƬǼŶʷľȮсZ]eihbqj`^cmjl9odcehimnp9767l89d`eeiilbdfimib^c_bdd_dh87g^c`^bd]`[ZZSIZ]b3246<<58@D@;9764edcm75knqrnpmjhjggeginkrrkjgafco?7llhgs>nkefnlkddghjjikml:@JDCB9:756@=;77gg6788:989<=>@;9;??::867<9::9>:::<>??=>;;?@@A?@@A8f<=@AC>==:8;<:<<<>AB?HGC@??>>>?=98:;=AEKFC>?BFEFAA<;>?>?@BAAB??BDGJKJJABAA=9<;BEFFHFLJEFJBJdJ@JKMJC?>@@BEEHGDBCFJLOMFGFBADBAHIGEHJJFGEFDDCB?>??C@DJEB?:9h:X===?:832439ACB@6VRSopwPKg4W5V\943/*&#*3A<`25RI5]GMHH'#4[RKP0?iaN-obouSZLV`M=JOx2'/893/<)AL5M8XCT2302+'A17G451.34=A7YRWXcR`b_z|8%%+/hVEJRsWG\AqD@VLP.""3::)"'7/ 65D2'A&'*1#&C75-'' #/#%')'$')!%(*%-:2!-$;1!/.);2005!!&&,9 '# "514*-'$&%&&)' &$ "/'"!,$$O&]-_Y.-caZ[zWrvK<-F48B[c>]smk|i_t\uvtH/+U"PrVU^S{rXUgR`ZD*H/5MZiAOr_`fYywTrsaF/1L@jY1T^rwXXapeZ(=:6(7-0"8?9F?LTQNE_}pjWek^P\`[beSZBW=%1'*P9:?J7*?p7?78=5G%32Y79.-063=['0Jj>GH^FIdECvpw}rierY\tx{~~tk663/68756:9756542/789:71.->88878211*1..210+/002;=9635743216765542M5<:!-...-,,*,,/143/+,(+.00/,+-)% '$%'&# .;8?(mVUqe:HHQC68!+=6LB1OO84330+),3272/011D31/1CFR>4I;\:Y_Cm:XXWSfdj^T]RG;DK>NIIglpiNb7GWGMbZSCVN82?E+QUW]SXP7-80$4^X'=L+.*A>0OBRYJ?RGOF=OBZSaFeXjD8M>>%%*CCRo<]XB,,*')-**.:fVkB@CX<(QTTX./1*;>=9EIM``;YdogOqQfGsy_f]=rUPNarppUb_UXia\axrx{g}xk|pmcngjSecYXjZ\ZNSa`gTowrvhyfgr~|VmddHGfFGsK7IC&)Q7fdTvRg\e{BB@ntFwjece]QOoiYK]H6@XHD;oQQzyUY}LntSy]mONN[oVLqOmQ}W}sSxvhVr`ML\WocB;Em\vsmSQoefm|t6lka]fUoLJXqni}M.057/#*,!T,5@BHCkn}bsbY|VSOX+:B9M;?7R]kB[`uAKP-Cww|=<8[c:>T6>Mbjbkf&NQ9KW0FkV;IN_Z+@[Q:(""4(K?2,2;16/136IHL0?G%2$0A^J;>-0;55:?88@5/S_rUMXLS@AQ>PF89DTA;8;<<<>?>==<=`;:FEFC<:;AEHDBDLS0H=Xg@N[B*DGc73QX::WMP/BUT\`^^_kecab`cca4;23^[aW4\:4\ZU[a39G:6f565a5:;@:4b_ab``ZZYSOOSXX\d_[TP`3>7436843ddb__adaaf4c`cde5677536j5f44765564355:98;;>?=:9:;:75hh45fhfbcijfgig886>ADH@7adbaffgcddeccdd2357756;85335332de2332311332edb`a68;<9983246544422332434332dbababb432cdgfcbjo];Qj`TWUU[[ZVYQLE>97@NLO?98FINIDCHF<>?B8;HL^RQOLRCPK7EMKMOL@[-ALQUXIT@W_VPUOOOMT[Y]YXTKMNNLMONKSSWYXZWPOJECSUa^PMTeYW`TUOPNKLOKEEHPHGDHTUOPNSRPQKQUTOOSTQMNRRTWGGMR1732B85158HELJA<84bbea^Y[]^^`_ccaa\Z_a_fheiid`^^_`cfigcege`__YY]c\]\_\YYUQRRQWZ]X[bZVNJJIDGHIFGLKRPNQTSUVZXXXYYW\YVXY[WSOWUTUWUUZZTRQWRXX[^[W[b^\[VROPTQPPRSRKGBCFABILHDGIMDYaDFC=9LWMTLOJSSWNMBC?@EK7_NB@X6E,-Xgg56546876786767877769954333577keehhedgeennfbhgdc`[\dhac_^jhinopouroln;;:::=?@>8;:99975ehig^_cdgc`+,0341>81.1747922435789310335571234851030221.233.1/.00-0..-+",+-353867:<::;88976566;:<<87726375567<$!:<868884455653553$ 23H2  !    $" $"5#$$%$  !  !"&&!"!  !!! ! "0(+20G:9;+X+0('!  + ##2**,( 6% J:# ##'7'"% +!+/+"&&"  )!("(05+QScbv^mne|p.JOH2& (@M,)3$8 +  ",N# + +  + 8        #%#/"/'"! +   @  +   + +   + *(('"6) +  + $,$$);Kl0?%CQ & 2/3,-9:X_;U@/+?;TE%')CGaCFG;6 ++=XW0A=`P+Y;)&CZ5P[a^JSVW5>IKORSSQIJHE6..,)JNHAC,*)%"(;781CAIC7/^WN8KKEB0=IKBSoPV/HL*@C2S+)4>.>rhmoa\YsTYqsuxvm51+'..+*+-+(#! &$!!(" "#" $&$#" #$&)))*@.-"   + +(  3*'-$1*(=9<6%5!)1,=B73)8<) *!(.03(+*A@$+"37/(610,#+&5/<)0/;'/" ")%G 50*)%'#91*/(7-7:B"#19124! !%!$+0<50A2CD<7*@(3$84;'(9DMBC<<:8:8*15*()2%8)$5@+8F9<3)+B4NCGGC4KO15@@J084 4T>18+ .!.!0$D>N0:&4-6SP(*)CJ0Wb[aXYBT<@CF?/!(5+,H21MOPC1)&,,#$+$'',' &%#%-2)''!/0 $'  ?GV# + + " %'% 4T8.0#=GV7()#/*/=)4.  &- 5#-5331**+04520/20+".4 +4(&)9##::'':24#(#(+),,00.+.,..0--0)&*)'-0!0-0/1200+,,)&&(+,-1.,(%.//-,,.0.-20.1112133235511550131!'!.2//34200//,,...000.--//..,,,-/11.079/*5/'++*...-/'$!'$'##&" #"%&.('%"& #%*&')+&7"&))-#)+1,*/*'&&*.*,,+(#$%&%%'&$)(-,+,*&&" **0-%$'1)*0(*'(&#%&" !"'""!!')%&&)(&'$'('&(++($%(&&*! "#!#22532.0221346543/-011686::73211246764775101/-/4/.-1.-.+'(('+--*+-))%#%%!""#"#%$('%'''))++*,-+*.-*++,+(%**(()()+*''&)&**+,+),0---*(''(&%%'(':$$!!! $'#!#%'%-."! $*%*$&#('*&% !"%/' -%30.14113212424;<7376420..482200668;!@?;87 ! 2443//0/1/.~~~~}~}}}||}|} ~~}~~~}}}||}|{|} ~~~~~~~}|{|{|}~}}|||{{}~~}|}}||}}|{|{ |{{|||{||{|{{|{z{|{|{|{|{|{|{|{{{|{|{|}~~~}|}|}||}}|}|{{|}~~}~}}}}~}~}|}}}~ ~}|~}}~~~~ }}~}|||{{| +}}}~|}~~~}||}|}~}~~~|{z{|||{| {{|||{||{{{| }}|{|{|||{{|{|||{{{|||{{|{{|{{|{{| }~|}~}}}|~~|{{{||{|||{{|{{|||{|}~~|{|||{{{|{|||{|{|||{| +{{{|{{{|{{|{|{||{|{|{{{|||{z{{z{zzz{z{z{z{z{z{||}|{z{{|}|}|}}}~}~~~ ~~~~~~~~~~~}}}|}~} |{{||}~~~}~~~~}~~~~~~~~}~ ~~}}~~~~}~~}~}}~~~}~~~}~~}~}~}}~}}}~}}~~}|}~}~}|}|}~~}}~~}|||}|}}}||}|}}~~~}~}~}~~~}~}}~}~}|}|}|}|||}~}}~}~}~}|}|}|{|}|{|||{|~}||}~}|||}}||}|~}}~}}|{| {{||{|||}|{|{{{z{{zz{zz{|{|{|||{{|}~}~~~~~~~~}}~~}}}~~倒~} ͘œ꒔ܷφӦ섂ǪĶགˌͲˏ׹词ݽ͹̻ǯщۆɘͤ܏ϖŐԋ柂ؿϱ瀠Ͳ€ȸٲ꒘؆߫ቆ󊘘ʹ̀̾Ҁݢ쯰ϼϪӶۣԭ̇уΔҸߓثȀߒ׫ޚͭȽϲُ󖈛ꍮá僧܊ƛܧā°ŕɋꋙȶ񃚙膃ܶٷΚꈕঔʶՒϬ޻÷Ƭß܎焈ĿǼνĿξ½҂½Žż󅞨ߗ溰ߔ҈Ѹ׫ۉن؇ۖθ遃ڽȓɅĂܵʹʳǛ׿ݓӯݪ؈ǤӉĩȼǿͱǴ£كՓۇё͖࿹̥ˊæր庛ܞُф俄إ߇ϳˋ᳉ềףؓލͪ󐂸֕¿飚抄܏ڷ􁅂ίϾǷذ󭞎Ԯ˙ė터˿οөͬ‰ꤡǚޥΏôȒ󆀈·Ƙ󪂋쁟Ԃ񧕰򭘛ٮ󄖤􂊙vɾ˻ºɽǤՌǿ̿ڀǾ϶Ƚ¼ȿûǾ䷸߂ȿŲļ?ǷߛCgb_dkche^_cel7kjgfghflnm77jkjl:jikjlkffdffgfdccbbaccb_iig\eeaab_[UVWRY_\\[[[\m;::8;9988:;;;:8:98<>A@@==?==><>?@@<99:;;>AC@@=<<;=CDDCABA<;;;=?A?B:<>??<=A??CDC;9:?@<9=>?>>>???@AA@?=>BD@94:8EPMCFCDEDEI]=7:AGNOFCBABDEHFDAADJNHEBDHGKDGLMNIHFIIHGHFDCCA@<#(=.,=6_QA1XOFAAC$%KsKtzd`V`~vnXonWOuX@K7B^GD2*,/6=696D3'%=(-8>C=41>UHPY;+'%41Fwogajr`wfUK$$2BsUfqb_^gkYVnYw9O:O?Ug'$,JIp6$,9$>>"20DG+$1,(.&! 4*F1#48,)# %,56%"21#4%2:982.),8.17EB6=n94CGGG5;5-317;0;720<:!!5,*-+1'+(--''&#$$*,)'$"%"'%##'!255,#&&$$!*#$" .-5 !#! %%!*%3!$ '(''#$#"*""##!+"%% %1TJ?W8qiQ~lNtz{2:E=4iivVzw¡}rbsqrluhj,ivXvY_z|tlr}bzgzS3v`6L?VdM4LZQN}uI_]q@qOEIj^Bq^TsY]rfuҶom\VQFCD/3FT\`^XVR`XOSUbFHA68eZenkajl8SwY$@@>C\KCH\\?LI;=IG93iI\NY>]IQ5_E;@97",(/3>7+5Pv^PCABbU-0I7)MG3FR2SNF&5CK0L^QE_8lN+516%3$'55Q8K>FU,QME]pBVaALgrPF33P159YW@IfH8+:+aOc=8OHJLFL?R3FKWXOK9BVD9=HOTWMI?79EJB?ACIK<5.ANO_4\[[2=@9DKSRSC9AQPOOE?=97<]274261-TEB<=BEC?JY[3659na`ub`e[ka`ZXYVpg][ibIj[nJ?EKOiXB]@BKJ7W@4U4=kB2-150/VaOPRe5:?<6340;39553+-**)(..(++ENJ@NLAJK^nSfJDMTWLUPMHJv|bdg}h|{itp{mp]EETYVMGNMgpn}z{~ӝCXQ_kLnnlwʾĹpslqpvyxzrpkhutlfinhjhkms{|y~yTZ\YHFQOJHQ\c]B`iconomprt{wmcYYh{{wm5443254249<67655/278674/,,=67875./1.1,/100-.0/6;6;><:623336887765X57<9'*+**'''()+,-/20)*)*+,-*&$!"!0+$&(('('&%$$#&$7LM;^bkgMJ8.CNA7LE62M'7OAE><85;A4..,+,.-16J?954N*.--,SH./99@JGGOU?4D,/5DGED'(DMBHSRY*HESM8MMHg9GLKIN-*J'*-+1JIGTFHbDNiMzP`UV[eaXy`i~j`dbwzku^f|uwtbQ{[d_qtrSWNBUMKPIB=Q]Z|kUBCR>NTV---,00(N`JU?Ca_cJ]WQWF=oXhjsCW[WKvzwzUhoej|t|zj^lMZbdbcacdylhihhsdh}uqY_jqbZgpf][SWOQ_g{OfoceXmhb{^y[ySmngxwl}>lcS:G3C19SZ.zhdgxyqA=yhp{l|V^edQVSwOsG9AHKNUp{`aFFkt8qmh]S`Y^nrfj^`aF-$./2<.<%)6)&6%583AǡKND?E,(DDT+1+1/Z7C@Ey]1D|RB,0UO`Qp?QN[X_LJDR=OQ=RvQ3*G'@:<]D>_UJ76%**<)9*$!4&8C /Q?SS0/BG(!'-.DQ<(.2;?74/027/-*HB^>KG;9Z\UU&'[J99=<<;>=>=;87;b]cf668>:6a_`]]]XXVSQb[`MHa`[WSZbc332373b]Z_5a_24f`dcbaejgli65654gj566:8645cd68:<>=<9:8678;<866544e`\\`cedbd898FHEFC8da_aaggbf4566523488786776434873edc5bc34344455c`e678:87743444334322454455432eecedcc3454gijimvuhXklb]][XUXYWUOOIEFHHFG=8>?A<5ea@Ui9QJ04tfdhf66557576766R7778875676555665gddeecdfdcbceihbee__^ceea\bdgfelpfk;shk9<@557=D89:;=99655ehgccdigg,21.172630.1355654453676432445677743344432101110653-32/00/-*+-+-0..,./.5.23! <878877654688::8;787658;::75411566888634 + $!!  !  %#   !/ %("   #%"! ""% !$#$! ! ! ! #!0')FFCCL2CD<8E!+)  & +*0/,2$#44D8+-(#0;( E $-&--5   8zrmjrudpZC* + <+47-./67+/05> "  0 + + ;8 +   + )     (.$($ "&)#+("!#V    +       + 073 J$%4-!  (+" $0D(,"((1 #  .%!. .,(* #', ~.8*3"6&  %3&(.:=%?4* J*(%++B>501 %:IT[VURQ`QKPSa>?216cR^ee]gi5:O?EC>>VFUGF;7;QA!#9.<:$14 ,>0. 94%?MCo5?8`!  +' #5"AB888;:CF80(6>AP/QOO+4:4?ELNL?4>LLIK?962/5R,0,).*$B50)(.1.*2A;"$#%GBEa[FDJCTIHFA?>UfIBENI3QEM3*-27E1113?/%='K+&"$'(BF=>BS*)*(++.+1'&#$$!#"9C>9@B8BG_xcjI?DQVLPLLKJrt^`e}h{hrnxns[RR]b_ZRX`{|}顖=TLR]I}tymqrvx{}yuqm{|xz|{úíĿkc`UD@KFACSakbHirjtqmhmkjnh^VQVfy~|uLk3/,+),*&(+,%#!"$"'"$%'&%%%$$%&'))(*I,%    + + + +!#5:>=. )")(&'"#!(4&+*03%1/#1-),6#$&& 3.%!)-2**,/&ML,H/&*+)"#*('''4:'& ! %2%(22"1 13)318!0*!+)-*&<$(%+/,)(#+").$)<*P-=3,+13.(2(/>B4073BC9B35D?E5*35(%!%0 WD>?TTJbROH*(QQCP[cSgr}=64419X7>+F(!*,//6JO4?'(AM0:$0&/!!/$)%, -+#15J0."$#-))#=$"4 -4=4$ &  -%!'!,! + "P>+5K= ,4 + + ! *G1 `r.[~   !-!/  -#86)@_9 .#*,K21IB6$  !,'&-."! !"AB96,(69-65633-4.-/.5; '4 %$$-((,%$-6$ "'%%5''/-.--1/./.+-,+*,-,.,0/-./.-,++*('2-0%#/.+)%*///.(+-.+2.///03648602//(11/./00/./$$#&&2/-.044/1 .--..0-0 +1100.--02337@?7-872/0/-*,.,,&&##$$$!!!$$'"!&$$!# )+')#"#!,/.++%1 %*##/82)&%%)&-+)',00--*(('&%&'&)('+***))(&'$$%#&+.(+..*'-)((($&"! $(&$%$%,(&'+*&%%*.*)&*'*+/+,), $""544411331/../0.-,-237:9843224133456.296864220/0/10110.,*)++*(+/*('&"!!"#'!""%&))$$'-*+).)')--,++),,)*'(*)+()*++())**,+,(*./-/0-+))**&%(''&%&!!"!))$# # " "%'&#%$"%""%&""!20+6).5-230Y201012000222477231///3431.245459:58 ?55!#034200212}}}~}~}| }}|}~ ~}|||}}|||}}|}~~}|{|}}}|{||}}~|{zz{|{|{|{{|||{|{|{z{|{|{|{|{| }~~~}}}|||}}|}| }|||{}}}|}~}~~~~~}~~}}~~#~}|~}~}}~~~~~~~}~}}|||}~~|||} ~~}||}|}|}}|}~~~~}~~}~~~{|{|{}}|{|{{{|{|}|{|{{||{|{{||{{{|{|{|}}~}}~~}}|||}|~}~~}|||{{{|{|{{||{{|||}~~||{{{|{|{|{|{|{{{|{|{|{|{|{||{|{|{z{z{z{z{|{{zz{z{|}|}~}~~~~~~~~~}~~}}|}~}|}~}~ ~}}~~}~}~~~~~}~ ~~}}~}~~~~}~}~}}~~}~}~}~}~}~~}}}~}~}~}~}}~}|}}|||}~~~~}|}|}~}~}~}}}~}}~~~~~}|}|}|}}}||}~}~}|}|}}{|}|{|}~|}~} |}|}~~~}|{{{|{|{|{|||{{z{{z{zz{|{{||{{|{|}~~}~~}~~ 倔~~~ 琦􎦩ü눑널؝Ҥش͕ʢ〶ŢעͺĞ́Ŕ怋׽ߜ敡ȌӀߡŘԚƤɵ֐研ϻ޷œȏ߀π는ӒᏧ؂ڭݼʌ넆޾ڶۺ̧̧ߑªЈỽ䠜ѵ߆Ο⺦켨̾ϩ⥮݂틭»̝և೜ś͹ӉΪ߼Ї炑准㑈ꃞŲݺڱϦ𒠲Ĩ¾ިְ͉Űּ͇ꂂ僾ᖺ󃆁ŶòοǺŽÿȺŸ摜ſȽ􊒘ĀǗ٭Ҽ˽ㆀ⽧ɫܯ̀鈋Ŋɷܮ۹ҲɔؔخкŃ۽ԺÊŘϾ󄀥ߤک؄Ȧ݋ûѮͬւзЛ͆ޅ±݈򻌜–ጲö㍪쇞ڼ迼ֽʩǀɿⰄՈ۱ՔԴʜҒ́܅߯ެۆřĞо〸§ߤúĭ͏਼ŵ礰ۡȤװ量ïɕ܁݅ǶӏΪ藆߄ڥĺ϶􆆆遁퇋¸¦ɼǽºўŻՀƽŷٷȹʼˁѽށýýƺʾ񮺔􏓃fc_beabZ\\cai7799jjppjhligejkjggikkjlnmfabdhfhhdkeabecee_Z[caXSWZ[[ZVX\[WVXXVTU^@Ee`]`=;;896:8:9:7;;;<=A@A<:=998:;=?><9BH?<=;=:<@???<:;;9878<:==>?@@>=>?=?@ABEB@==BD?@@B?ACB@<;>?AABB@?>>?>?@?@AAB>:7?C<5<@DLF=?ADDB@FEET3B@FtfrkizaDoV<28"Jf]argmwq__xgA|Vo;_mg^e5)%$8#,963dC0 /4/7! $."()$@). ")713+'-%-9."!$-(:)&)*?>I9,+-#0007LGDB<8>=E.+A>6CN4;798;=@?9%$A=5427%)++%%,(6"'#()'$)%')(###!#"'0"#(%%%%7.(!%*%!*G#;$&1 ...$$)'&*$14' ()$%"%,,2CI,Ai^POvy]zdN;C7GL9|yrkyT\bvc]g7._ylvjl||cobU>NY.J0[IBbGWkpxVDjIMo|[xPRfK][>UtA[\xY>Njtb{x8.Me_L]I,9HOYm~mhgtBCCAYCT_j99;JV__<8?'GMW7=USJbD\p@ni@3P7aA-1iE0dC`S_auF5I4/1 1#:`s6tZaHDIW/Mmj?Cv3;RYV+EW:QEL0QJA754)bpFBJHEEBFDFJAi8BO8C;6GPFMDPOLM\nQ4\8OJ^jo[C`7DUIC>chodzijnZaSDoYha`gbyob]zMTPEJ\RMFSILRM;:J6>;;2;;73((,.,1-#LD:-caGTXM_>B;VD;g>SXSb{`sv|kqys~NRzvB?G[\NQNXSW^n{oLePaabilsl̷Ƹ{sxptqvtvlgnd\juujnsrgp{^[XQHUTMED]cbJMddkjllkrutxvcUR]}z9855810415><75778.:98431.//:76750-///-*./-+*257:8=??@:6434579756:6166;:;!#$%$$$%$%&'(),,(()'&)*)%$#" %)*&&&%%$##! /56H`bNrI6P5G5OU@E4J,S5;.H;30-*)%%'*/46:8OA4B?VfFENOW`85\]OBVQTH7BFE[eEVlExaOTEYqC`WWa}GBK7hjjTvY`\cio{uxmrlX]Zygpl\gb\uU{zhT_q`R[ap_iXsdRl[|zuijb|izpghcWnqT[tf~fZFVd_562=;EF>YVyl2s4|Wyhz}EYCwpn\J_oQPTora;;7;L]`Sg\Gd[^[/ItO5QRzzXa|bRuDrciiSLTwg^XNHvgwiWemrPj~]qpo[c~_vk4',1 ..*570O/3N,.F21GC%+D-,>C+;78>=<;@><;g\9KD65NQJOT\I<=L:655<:BC?'=FN@AHQee_QJKOPSb]URW_\YZUSUWTVQRQTUQUWSRVSSRPPNOJKMPLMXYVSbb]TWUSZMLHLSOORQLINRUQQQWHNSTPONONT\aa43]SVUV7Z9;6349A>6FEIGD=9:6cdgg_`aab`_^cdc]\ace6hffbbZ]\`e[[[O67kjmjf`Z]_\_diha]PNRTVTUS]XVPOF@9EKEFILLNOPMNMQQ[V[XYXPU\ZWRVWT33XWWV\[USROUXYY]\[VZgb]]aZYWYXVRRPQOMLI:0^#=($$,.$ #(5.!  (!$'*! +9}yu}OpD|jJ' +!6219.9A=/5K4%E(1+.,%) +  )(A*3+1!!&,"6#   % #%,"  &-*-=))'*'##(-%*& !"   + +" + + +  +   + "$*-"#&    :@.+3+('().) -# -"45'&1' #+   m*/ 6" #! +( +#!0*2+(#*>gc9Ga3C4RFLUIVFUZ)7;?>5 &JEE+(&#*+)FL,'A;5B431#F&A-*I.&Q4SC>0&7BFJGURNQ_tS1M2JG\hlT@Y5?RE;7W7EB>6OB:k:QXR^u\nr{jty~X\LJSdgZ\Xcgho}{D]IViu{쀄}ѿxsxmtsru{nz{|p{pbXLAuNLB:?bjjOSmkqkniekmjieUJL^{~v750.0&&(%&-)# ""$)%!$ " !!&(')''&&&'))'&'*)(*#     + + + '66)B##$-#!!(!$)7+'&'.3/3'!//1( %&"-"#5.#(3#8%=3,.&*.$"#$)$'+0)*"#&)!'*-3.0&+'$!$"*$",!,$-''*1+.+&+**7'+&6YA)%%(+45$!52>17J3587KC:31(&4552*J2*)942;H5#(40)=6028=+:UvC,)#7 !"! 8! 33/874&%,3-(",:" ,02(>1,1BHMUO^6OGP4LAB46;:9=F<875&3 5!!!+!6&#!$-+!%# 6C((+  +   $0:! + %C6 %  " !( +9' a@$1  4+* +  $,( Q180))0.&D7$/%  < .&$"'(- D ::'# 4-*(#$03248;*##.&&$$(*&00.!5.7-<3!#!7'#$+*#---)+*,*.-*')*+12//,//,)((').2,,&+++)'/.,.///--,/1./,456455423/-+,*+0,!$$"!103,---0,-.233/--01120/,:;c]\\b7==75797:<;<=;<<:98mkhjhdddgfecedcfgjhki ioljljdefdijiljlkkhlok77:;99;==<;:9:<:<9:999:;<99>:9=A@<99::;;=<<;<=:9::;;BB?;989<=@B@??=:;=??B@AA<8=?=EDFCBBBDB@AEAEFEFBBACFFEGEDBCDECBCB@@@>BCA>BCEFEEDJPUQBTROJHHFFGHFMOKCGLIELOKFEGJMHKQQMDKMMJGCDCBCEC@?CC@CCB>DG?8D=FG7:?CHDHB><1<12:>@RQP|GV\[]ahju}w_Q~ZZ_dmttTdl{iihyxbfdg_isjFU|\W~N?[PSPRMIM98:9. '()3,1;)&0N:=KBd-V3FU:,?/6HotnZzad]-_ccbN755,2!+GZs^_iVu~mxmCeiWCZ=Ha`:`/=3LtG_,74:GVkc?6N>7DYQ=>Me>H:QF?VA+.J=?ITQP=;@!IU0WkEOR>6BWJ@O,6D?Y>C:D61d]orm7T0A_,@)/\#M;1)$;FDG7/K.268;8<<:598<:51/.3.0.20-#<$" OfBOLeUNU75P>QMmP`]Czml{}mubvjJEMQLkBKGOehkcVTYffq{˄vHgQvbmoiů«jioqnswlloedm}}{{|u~vozuxvYUWNJZMK?K_dNBXe`mnpli|{xnedX`zxw}zQx:734442550033544520787221//096542.-+--,-/,(.389996><=>84354466619;60569::  !!!"#$%&&%%$#"!"":#&&%&$#!#$#$%0+HHTGHI<@VIIEE6RZ0<8(@860-*"&%,).269DKGNH<4b2_f`K^^\86RNWID>B=9:92//IO/2RZ:9OMNA+1\40R-,EE0B<1=)-*7?7500Q9>GG2g:CEFK(+--6E'-+,+M+V44-S3WAT?57I27;MS@GfOGrMY$,QOP'+JKPRHUMTKvTVw^ODNQMoJNGdompmdf_Vex|_POS\^uuo]pELRRgKaFAJDDTLVf[@*C*-.-,-,(,]D@.>X=XDSUxWnlHsypSGvXMeGZcLB?MkffSôkΫϞt~vsiicwoxkw{zykQ`Wsn`Wcre]_dQUo_arywhgoW]cfzUudby_V`r]\:cn@gZ7GcV*K]GCf@HWD>yCHAwheYXtQS[dpMHQEROT]DG@j:cPr2SWe;FifdPxyx|_JXkSmu[Pkp^XXX~ahZh|p\ki`op{txg`qSFWCMX:[>N;gmHLNsT\}D^A;qyDyZ_vA[eN94371.+"/'$+!&#*+/03'tvW|~k\he\=N17D#4P16E3L]VRTyQmaf8[<,I-GOENR[YdHNYC;V@BHERQSK5Xm4AGY^58J@2)7Y4'!+025692&'$25/>-&.5,'F8A""=1(8/C,1+.7>%16@7=G?99..&*?`AE8B@I Aen<:9;@?=95h\SOS\P"K8^fj\lSI=9dN0INNNKGB>AFKN5TJ@ZWN?_GFT6IX4534411355888433bc__][`\4ZQc93]VVX:43^:5b_6==<:54b^_\\\[SXY]^[ZZXYX[\X[db_\dc[c`bac^]`36:854759l8:hedf45557;;998868669;:653aa26446864:>:62c75T]g68989?IIGE>94`d74343b248889:9796455453322c`^a`_\^_bd5537644434::76422323`acc2c334678887635553f4fh:==A?DBLMQ@ObYMJKHIG>aRK=GI;QOMBEKN\\XSHIJCHLSZPUVYWZZWWZZ[ZSSRSYWWVVSTRRQPQNQNMQRX^RQVOKPTQY^`YTOFNUOVRRPKQQTMPVOHKSPINLTY^c2133\UDN0177314<:59>>BGDD?=<7gb^df```][XUUVWXRV^\^a\`ec__Y]`[]\S_675he[TT`]^]chhbYPNNQRQRTVW][P;91CHA@IHQXOU[_XbXXXUYZ[USZYUWV_ZTa87YW\`ZXTQUYXUSX]\Y]^[^c[XYZYWRQTUVVQFADFMOM9LJ@77>DAB@?=;7>JHEJOJIOQGEEEA?<;5E685jM=X+M67hel:846855665P45667:9765455433565ecejifbdgjamfid`aaacee`jbXchehffeeaf799qiuAB>:7:<9dfge55fhjlb.1)16540.11-44364324456564753222014420155542+*,1$%-/++./.--,---0/0/73/0/1975676657663431356688*9:77974565654796656655765y "     !    #&)&*'%! ! "%"#!#$" "$ #%$#"##! !"!!# %BD$0436:@>DIC4*;),03775#/6HB898D>O^^_W]:@?BO[V_ttjcES}tu\<+45?+3/0IY6>$,4>QB4I@`tLP\99Bd=6/855?XP;;Qc[eWCP2;J6-4688@7934BV320?9%#(&&.4/0+1C9H853;B6&84-R15/81.?-.B&3,5"2;'"0,# 7+0+(GF/-#&0+E%478*Z9+K6 .?/3;G=d"'-Bp:08!!0$665'.32"=/A4,4+-=&.8+)R.1+I==8  '6,$/:FJ , + +  + !  +2!3797641.57:8"-%,)#-##+"+.0--,+/+($-,**('-,/./,---()+-.-,,+,+,-++/.-+10+0///0.--74332O--,&,0'''&!00/.-,.-,+-../,-.-.90/0<=$"H986C$?<812<@5/,+("!!$"#!" ##&%/)$":2)" %(%"(*430-$$$ "$),&)+,+-,)*-,++'&&(,)*)*())('''%'&%'')*#$'#!&)(,,+((&!&*'+()*'*+,)((""))&(%(**++) #31/26233.-+)%&)').,/3101,.0-./).66/)(/..047960(((*(''')+00)"$!$"'*$(,,(-)*)')*+)(,,)*(,)%,')-0,,*()+*((+/.+-.,.2.+-..-))*)+,("!"&%I'&% $!! %#!$&##&%! "# 6'3$424A./05420/35093631322244072+13132333/3;7=#$!/10/13450 |{|{|}|||{~~~}|{||}~~|{||} ~~}}}~~}}}~}|}|}|{|{|{{{|{|{z{ ||{{{|||{|{|{|{|{|}}~}|}~}|}|}||}~~~~~~}||~}}~~~~~~~|~~~~~~ ~|||}}}~||{}|}~~~}~||}}||}}}|}~~~~~}}||}}~~~~}{{{|{|{|||~~|{{|||{{|||{||{|{|}}|{|{{|{{|{|{|}}}~}|~~~}|||{{{|{||{{{||{}~~}|{|{|{|{| +{{|||{||{{|{|||{{{|{| {{||{||{|{||{{{|{z{|{{|{||{|{|{z{{{z{z{{{zz{z{z{z{|{{z{{zz{z{|}~}~~~~~~}}~~}}~ }}~~}}}|}}||}~~~}|}{|}~ }~}~~~~~~}}}~ +~~~~~~~~~}~~}~~~~~~~~~~~}~}~}~}~}~~~}}}~}}}~}|}|}~}~}~}}}~~~}~}|}~}~|}~}}~}|}}}|}|}||}|}~}~~} ~~}}|}|}~~~||}|}| {|}~~~}}~}~}|}}|}}}~}||}}}|}|}}||}|}|{|}}}~~~}~~~}~}~}~}~~}}}|{|{|{|{z{zyyyz{{zyzzz{z{|{||{{|}}~}~~~~}~~ ~~ˀ~~ 쀉½½рƻҽドͼٽ¯᫨˜ϴ񻬊˪ڲᘆغͣИΊˤ񼙓㲿Ƶ볮ƊԽ¿ЪȴӳҼϾѵ瀂ۑဗš㰾۾ô˱Ƿٰœſ¸ۣ̙ƐߕĔº•Ʒ瑱Ą⫥ŇЂھޛĩܒ¬ͿпҕӖݒ񽣣驞լ㇏ʔٶߓ䀊Ҥ窩Ƙœ쵃Ŀ{ƳǾꂈ얣̿充ٸ쉈ծƔȝ⯫ʫƌȅ´˛ãԪ鄟ꞋĭͽβƽʻǷĿƶĿķꁊۮɴ͆Ʋ몦σӐ܇LJ鍅쀋ԌǙҌػҀկђⷺں傠ΔťûтݴҳʥȲեѺȿý锎ЪǪӥဗߋޙ􌉃Ӎ͸օ肗慯ӂЇħ뀅ΚȚĴљČޜ뿛Έܫ񄖇ǯ߂߶͐ʭ鐴ۄ昏˹ՠ†ЭƫǪݞͣďȲ߄暃˖гì»ʒ啀߉įߒ􎚆įɴвڒ䔉慒 ʼǶȽߙؿʴͲ׀ؼƶڼɺʿ䜫ÿнͻ۾򆠮񀂌烄¿ƽq݄Òف년cb_abddffcgfdik8:78=:8g6679meehlkhkhnlkghhebaebedcegifd[RSSZS\^^\WM[_ba]\Y\k7dY^c=9f`_]\]_b7759;:9?@C>>A<<>;98pjgihiheejl9cbjkngj86ihgfddb`bbedikmjgko8hjkkj9768:;@@>>;<<:<>=99@?<;;;:9:89><7:7q;99>?A?=>8::=DBA@AA>==@@?>=?A?=;9:8<<=<9=@AC@@ABBCBDCA:4>BA>=<=<@KFEGHHEGHGGDCBADCCFGGDBCEBA?ACB?69:<=EDACC?>>BEECFONVKIKGEEEJRPJFFIIJIJIEGILKNKEGIGEFBBFIIIMQLHCKIIHECB@?AA?@A?AGHE?DG9k9;:fJe;7?KIDFB<73.4=F=.;_BLISopj^dkkZNrpllecox}ovNUZax|tktGFSd{`U9^+)>1HJJ.G=4:2:'#!(##2*?HaI@^`*36=4/1$1)"K^7`|m'ND6 3"4.C&z~]koP_nyAru=:Zy]X6LIePA27:$,)80941-+Cf_I'IXO`>* #(-'&!!"6'/:(*-)#%)705'%*$"00&4/&1)(73')8.**49:9444X/.##/069B8A6<%%9>MNWdi8b^WfxbxdZRfikjt{<5>ob]eeBqw}nsovl\lD;h68*57C>AC\8@<`_"/WI=L>>LC:=ACPO]ACJpwuZ{TaVaIbaHBWQA82R8A766XCHO(/21Zh@9?G@^0F9`23RdOC66K;POScnNE7>MW-DR?KLEhg/ry6Hik>.'*AKW + +GC9KE^X><>-=xcgjf]G27/=T9R5AFCpdIV>lfHNGU`TTN8j9=7CL\J4PAQ=8L^?D5c;4cU\I7:>YA?HGDP0<:g6<<6b[/01,/15QBF*N>/5H?ENJ>=@BGGb>wggulqnl~mhekZRDbjsrSODSHJNRRFnTrCX?_CG/;89H_/5('!N02L>C"+/06,17=9512.386:3,,33/05,"'(\hx`H^dA?K)<:.*T4Y=dps{mzxakua?]GGUsfz?MRmakpZZUacxٲd_h~eaikɲnpqsikwyvl^cwx~ywt|lw{}|yuw~{|VNTRDJ[ME@Z];Ldilkotip|U{{xqnu|u|yr74542118/,.1/2244V68560,0-.8:42/,)*./.,120057:89;8<<<;9641334630895-3:;:    !""$""!! !"!$#%###"!"#&$$F1ERZSWD38<>(7XX+8MG:227+,+,.%&372485=;6+M:0QE@4WRKS_;>FL=<=FM89*R11OC;7,7,Y9WY.\48;01;+(@2DB:%,*D3A>,95?CD:.>[/K-'&*,/21249G(,)1)LMD;I?Ybafv`]VRLKiF_E%-%"-LON1./:QlC:NUecbP_S~jnL{ejHDOLf[ugt|PVShyeMYKZzcu[dYLL[[fUNP50,L6C6zRtN;M(-/I5*HNtxZR><_%7'?N?~s]S_Ka`qISfUfhTlYDXdcYlDh^o}~Ǩ{|sr{vaijtl_^t{k}kZm~Qnjh\OQX~cZalg\x^hz_jjiY[wwcg]_kxgJSXq_b4jkpQk7;<:?>FB<:inljcYYSRZx}NR{KTVMGyvpARiG7D9XCWzDLb}Qftb`ukZMiUi[Wc}_SmRsml\s]Z~`ngEQW==YM?c=HFD[GjsllfXlcrCvvo<[ReM?:6391'(& (.-.84-.0*.&$&W_`0E89>6+FE76YJX@GwpƐ~]=%7,6A5FJXKHwRGE8=9A7:86RTDKyY_6Z;J:7VKHJQ!5 *:,4(,&.;2A,5<"("<&8 KU@',M9%'+*#6./'068-$,+)*03N.]GJ;@F7)[?76;>?@;74`:\ajG1+OPl?e=D:LD7M<3<<9>AFFJ1:?_>6`SLVY]cd542434533:<7697653__^\W\ZZWW]8=f_][^_0463337?@8742aaeZZ\aa[W_c[V_ZWY[^V[^^de\`][a]24f`]f5b6;89878575fgd47766<<<97678<::9853\B]942336648=9DHGDFFEBAHFGD9=C;78V8:5mM:O,Vd96fi8278h4755543345456985233:52[[37<4bbcdeaehlhgbgdjfa`]^^`dcibZ\bbilgW\e9:KKKX,>:*5>JT!F8/1$#"%  6TQ7$&*%6===82 + "   "  + +  +! &+&'(.# +   + C   +*  +     `=G4!#')$.&( .(!)-' $ "='0%)$.! .0j  1( 4"  +)&1K +* -36$ Bf&")UGDVW8hnwdomwiTiB6\)*(,4#,J17/;@E7-1"%1# 5=KFO77Gl|q[tQYP_Ga]9&+*++21*$=466"EV3/7>:M*<3X+/MW:<.*C,0<@Zb* ( &6C=/OG4"7< +"@@7KFc> + O~~w`B+*#4D,K4>E@h]HR:cfHOHY`YXL5b794=DXD0H9F51?Q:A1V3.UGK7).2L84563>)54Y/252WO((*'*,.C57!7+ &4-2:9,+0174H0WHIPJPQQg[SOXE=a3BNWRjmnCf=hg453/8:>3L:W2<,@/3,(.8S"% ?&$5-1 #"%"&-0+,'&#%&&'#"" $ J[mZ=\iJ@H'33*(S6\FL'+*9G9%,%0H1@0:5,+307.-(#"L5Ri3'2(90A@+,#1 (77)(.&++D>$(1$-2&2#(.3/7%1*L>BT>YDH)0.8A31;?;;PPV>/,8F1*&&%(&*,.,73/$4C67D,+@920#9I3*48)6?+62<'1A7+&'!#>*;;$%2/$F5:J@J!%53+0Q"-!%7B`[!G(6>.!/#EB;,1/?/05-,%@##" '','$#AFDD>:9461$8B'h( ;(T=R,H.B*%"4#*<#21&">*1(!!%" #   *& ! $  -'5 6  +%/ &YQRolR.   %  &R=G$A(,&)A60;?(!$!(!& #1?1*" + !*8#$"-#. 5-5B*34E&<%&"/.%8-(1,&)2>-/3952-0'#')+--+---*.-+)*,1.-**(.01*,-./,(.1,)/,*+-/*--+.0,0.-0,10-0.S230**&.$''&%!1-12/-,--...--/1/.,%--,++,-.102$%%&(M&DKMKHIDC;787964/,&#%%"%&(!#/2%%  #')+,($#" #034*%%' -**.*+!"##"%!"$(,00/1-&+)*(,,++('(+*+++*)*)))(&()(&%## &%.''')-%+,./0+((*)*)'$%'(*',')'(*,+%((!2+-460/*%()$ !%&($(%',&&.40--.-0,-&**6-+-+)...273/($$"#$&***03,/!$%" '(,-0,/--,,)+++((')'(0/)%347-*)(%%)())+**,.*,0-*,.---03.1.)&&%(*(('% #! ""! !""!"! #!!  +9g(1)%111**/./10-.04440328611././2273./42796+.2 >78A"#9322504530~}| {{|||}~~}|{{{~}|{|}~}||{|{{{|}~~}}}~~~} ~~}~~}}~}|{|{|{z{|{|{|{|{|{|{z{|}|||}~}|||}|||~}}}||}}~~}}}|||}}~~ ~}||}~~~~~~~~~~}~}||~}~~~ ~}||}|}~}|{|}~}~}#||}|}|}|||}~~~}~~}~}||}~~}~~||{|{|||}|{{| {{{|||{{|{|{|{{|}}|{|{|{{||{||{|} +~}}}~}}}~|~~|{z{||{{zz{{|{{}~~}|{|{|{{|||{{|{|{|||{||{|||{|{|{{{|{|{z{|{|{|{{|{|{|{|{z{{{||{z{z{z{z{| {{{zzz{z{z{|{|}|}~~~~}~~}~~~}~}|}~~~}}|}|{||}~}}}~~~~~~~}~}~~~~}~}}}~}~}~~}}}~~}~}}}~~~}|}~}~}|}|}~}}}|}}}|}|}|}|} |}|}}~~}}}~}|~}}~}|}|}|||{{|}}~}~}}| }}}~~}}}|}|}|}|}}~~}}}~}}|}~~}~}~}}~~}~~~~}| {{|||{{{z{zyyz{z{z{{||{|{{|{|~ }~~~~~~}~~}ʀ~~ hѻ»[ꀋ򀎜z̅р¼öҹٞ拭̀ƿ熝ᑤ֑ͪǑ֤ӱɤԚգ煭ުԨʽ˷օӾ͉иΏҽѴʨìµԁ­̿ȸІ΋­Ο̋֐袣ܪݰݦͣȥ՝썍ӠՔÜ툝۫ć䝄ԟԥ؂ȻԪפӍ䎑ӥҮ׹ѷˀˑλշŇܵ梭ܬ핤ǜҁ܃¾hll߂ѳꙗ⣥Ԁŭ̫Ƚ匩å–‡ù뇔ٵɺ ᰗƭƵIJ±־ɰۿ큔ƻúùǴûƻžIJϾЭΗ¬˿ߵϮ⬣Ϻ§Ʀ߮魫ې϶ƨހĩɎөًπޞ뇕֫нτ𐜆ңҟΣՇ٣ȘϽвğȹډʼȲ˝ߨے󆳴Ůϫԕ㡜⟍Ñ󱧎͖́ԫƾɧ͎݀ͯۇ̴ˣͲ׊ӟظخۢ씳ԢϽ熨֗῿ưڄĜӀњĝӽΔ׎φŔ솅׾󖹨Ѷٓ鉜ܿߎ̮̋琐踀ʺᇇ񁋉÷ŵ돉ôȭấʠú¾鎋¾؅˯ѽɾͥ򎈂5dhca]_^cffjmjh7gd78kkm77l676kflfdeggghddff`aeedeiiihdca\OQN?M[V]g]WY[[WX[^VWXaZ``hlqmea\[ZZ[]bk9989=?@DD@@BFD@A<96lllnnjikfjomhh0:>;8jfbcd_`bdffhihfhfmil87khjj8>B=>B<;?B@>?@=<<<;:9;=n>;:7898o:::=AA??>>?B@=ABBA;;AICB@BCIC@B@=<::>=<;AA?DC>7=BEDCA:8DGD>BEBA@BC@BFGFCGIFCEDBA?>@BHFDCEFBAA>>D@;>A:;B?ACCDAABDCCCGHMPIAFGGJHHFGGFFGIJKKLKJKKKGGJIFBBFGGDHTOOLFKGGHFEDB@A@@ECB@HHICDDGG9n>nQN=9:>C>DG;:83304<=CL\IHX]gnWSJF{xlpxtd^lu}yRY`afhnuvtsZXwGWL?A2>;;7A*2CH'2H40I$"%376=_laS[R58-%,3/*B:RV@'&!+0-09Har`nxv\Dit\csc8UCcWV31?lFX,,+%'"&''-**9H>ASOO)pi+=TGC2K*"! #"%' )&# &&3+/3 ").&%+&$3:/&29&%15663)4(#)&-383.$4472/),024>9;:=9?:00$&*(%%&%'% $ &*,)'),( ,$)+%'"A;!##%)#$###%5 "$%%#" 742#.8z,%%%16?,%&!)#&.5+8A4)$"$')+(& vlp/+,LrT;26.#DeQ>H]mY_utf}GUmqg^YjweY]G0pKxjQVnzn}plwyJIAgpT_6?`{[wkje]AZ=loB5V@DoQur_m}ddyagqͲ\7@5:^`N54It||neqBCxlqmaX[NDJF=48,55=na@DTQZR5<42EC3;:F;cjLOMhLU?KBCegONW-4260GHi_ICScVEA;?MS>=-\AFSN[H[>>j`?cECE>MHYROGASZ\Z(@Q*X#0LW2]R-g]ZZ <.<5RM(P_CV^O\acDDB?>D@8g;8`5=:7296KZGJJ@[XPCHMGV4XP42POb`ADAA<@8_XNOW6<70VQ,/'LRHE*QNNMHKKMa;wnls|dsihmQc[m}f~|qKM=MPGk\cq:WP`B144@Bk?-47,+LG+L83('+28'(./.0866892335466/,$$)"#MZknWX4TG+/;865W[*DWesl|rsw{vZpiSnea\OTZwCNo\]rfcpyz{y^a_gc{bògsjnllovz}~|w|tpdu}z~wvt~THQLE\TLBI[lP=[ghpnqtxzxoz~}x;546552+,,*-.//20/2=9851+..-41-+))()-00>14356687468:==;964256674.4875..9;:9<;>=>>#"! ! " $##"!! #!!"#"%)A#.5MO\iHS25(@XFdK+',.277840772+117=8423@89:D:2:^M<>C\?><5.'AA5:F//QPM>?SJXD/:0+,7)='#%B('(&:,#1H/0DD<.M:;X-,+TS*,,59?GM9-.-+))CT_U`hYK;\74LZN9VaTCEIC5JnU1666HetYOf\dfgxcV`PVuGD~oonjxScaI^ashg}HDc^T[tYLSwxDYnXLH[6L3KTLq}/O*Ig;FOpK\ukwGEMOj~d}ashlGOVĬ|dihzu|[Zkbiep}ocmVx}m|m[ZXjYdkhf^b`cpZQYgtrnkldg]pfg|sa{bg^Ǻvhmofm`F^B_kLplj@=>xfgkhbTXTYTJMJTQst^{frptkp]SPw=rWLjEk>=OdJOvCwmYuiwbplHJq_b|WPhs\V`iPYfaajy\s^r}VTII7jgBO=?CT?GIp}qW[`Xfm|BEpgksUiPEAA=95:93/1,-+64/.221,#17<{]msR88*4G+LIQPOIS;<@Mr:O;&82FS7=.9=IRUUG>@@C?ECCJ2BIIB7*%,a4*4>D@L7 ,@%1**0.886/<&%#;;)"+HO1.?/>)8;*)40$ 592&05<3U[:K.j;>9;?@=<>7IR0a=2F;KO.6M7=I41K:>BCDG5::f=92a^`bd3f354488:=7=:>85942d_[X^\WRRUV`Ge6b^a_R`3ee37989;964ga`[aabf_]\`[`a_\]\\YVZccb\X\dacb64ec[b6d89=<976f443347<:>?<776679=<9697fM@S654259<99;@<8756=;5:89=@GDAAB@8fa[]a48759797889;:9<;973bb`\\^a`_`^^[_egeg543389;76486bdfeedc^\d352342d359:77656665789;?HJCHwz}|nkkhZ\YSQOLIGLKO`MDc@IACC6DTTV76[OLEgZ46=LGHA5D@NPD^SMORH:BGMKQHLR]04dfZQTXUSUU^ZTUY[YX[^\WWTVUVTRSRPRTTRSZOO74KWUOT[b^gsm`^TONNMQRPMLKILQOSMRRQZXVZ[3]Z.47:2_;3\913>A;9F89aC=69@>4/7FQSQKWSOOY04<>@AEIJJH7K1GQ"2*!#&" ! +""CMeJCZS,  + $.  %954;X?C0%<@UQ/?=),"(%$."    (%#AU4)% "   +   + + (#""%%"  #!    +$l  + +   #'! %'%7 +  '&$+ $)"% +3)37,+Ra",!$- !-('!#$#;%bqG 2-') "8 ,?/#(,( ->@3K9,+#"'AG;+*=juqcXh??rgkbPFI=2:71"y!)$S31&069,-7G:[_IQSsOW>KBC^cMB/->][C6BRK48../?94&T=@>BF>T55hW5X@9@/15EH6  +'-0* KS8vn9$/!60 H;epC7 + +OÌtT<5:6/JfIW`U[L=R;L[Q]bbBB><:>70Z31T-320-4/AN@FE:I-I@+)BCVT;?9;591RJ=?J060*KF$$8?62!=99:4998H.XOLTXFTOTV9^HYAnQe~nPjema\69*6;6YINV%<9E5$"%*1N1"%,"$?; 1&!#' ## %-+*((#%$&##$!=NaeOV1WM)+3102W]-GS\ieulitws]w}kYqld_QX]P\~liuv}՟XXYkoπyв¸lulssu}yku{ywºZIME>TK@;GaxTD_mnurquxnrsp}v{~w70//-,("!!!")0,)$!""#$#"#!!$&)**)*)$''()"!'(($"$# + + + +  + + + + +  + ))/>%#"1(5+0&4 %!!!#!+"-#++,%1%&999!$*0.%&-7157.'7"-3)0:1(,.&,A5$2A.$3,228HkfBJ4;F-0OOUH/0.353C+75$25D::E&75/4F5-2@>#2A.&"+&#/+hKvX5-7#76*&$$)&)!8'+6683*':"22.81;A%!#E9;A=5-/166132:9KSDLGFezEA/620%('3 ?4>:8<#I9-F'C%&2=XP2S6,# 0+51 #-"%'2@M: $  ##&%    + + + $#2&%%!#"') X<;#1&*  !"'$+!)1z_e!$       K% .1,2*#. % " # 05! " #,4$0* 1/7 ',;#//51 /()4#":+08?34<,(;.04556"4--.--1/-,+.-,(')(011/0,#+./B1/0,.-01-,,/,//.--..+),/.-++,0/0/10,/0! 10"# '%###"3/,..//..,,..-.,-,.1311,.0010/+*/, (*%OR)MKLMNJICFIKH=;;800.*('%$!%#$.)&7!&"!" )(',&$!82!$'!# "#$/-+,,&"$'$'#&),35-&'))'*).+((*,+*-/-++()))''(''')()'*!"R$)'#&+119B<44+)))(-+)%!$()-)+*(*''+*'%)+/,,263*%#&'$%$$(&(),-2.,/-+03/.,'0*,1,**-.111-#!% '+)+(+.,*(&$"#')(*()(*(*,)-,,,*)&-.,./0,,,%&%#$')(''&')(*,.-,,-,,,01,1430*)))''$##!"%! #!1" "!$#&##"<+& !1%.1('+++,../00/-/03;50/-.//127974325:51/058:95569!$>854 333228842À|}~~}}|}~~~}|||}|||{||{{|{||}}|{|~~ +~}~~~~~~}{|{|{|{|{|{{{||{{||{{zyzz{{}|}~~}~~~}|~}~}~~|||}}}~~~~~~~~ }}~|{|}}}~}~}|||}|||}~}}~}|}~|~~~}|}||}|}~ }}~}}}~}~~|{z{|{ +||~{|||{}|{|{|{| +{{||{||}}}|{{|||{||{ ||{{{|{|{||{|}~} ~~~~}|}~~}{|||{zz{{z{{|{{||~~}|{|||{|{|{|{||{|{|{|{{||{|{|{{|||{|{|{z{z{{|{|{|{|{|{zz{{|{z{zz{zz{z{z{|{{{zzz{z{|}~~~}~}|}~}}}||}|}}}||}~ +~~~~~~~~}~~~~~}~~~~~}~~~~}~}~}~ }}}~}}~~}}}~~}~}}~~~}~}~}|}|}}|}|}~}|}||}}}|}|}}|}|} |||}}~~~}}~}|~}|}}||{|}}}~~~}~~}}}~}|}~}}~}|}}|}|}}~~}~~~}}||}~~~}~~}~~}|{|{|{|||{|{z{zzz{{z{{{zz{z{{{||{|{{|{|}}~}~}~}~~~~}~Ѐ€~~ ұøԃĿƾ݃􁍕ټ󪐘ބՔുϰ꼳÷損ƞѾۡ߀⺑؆싿󷧍ѵ᧥ߵ籧‹ŶۀƱη샗ſ巺Ϩ拚À÷ˡ͡ϺՈ䰧ꧠŰ׏ċ㻁演ϱĨݵ҉盗◸鈄֝ؓѥŷοΜŰܫ݁ó耿ˋ趴ƪ۵ѹЪç䊍ة癙肓¬Ԯ񁆈󂌔悁ӄכ搟ὗјĖ¶;۽րίť᫇ǢРĶ’̶ʼ»ijȹƾDz·ż«ׁޖٮݍᥤ˼ưȵՏӦ׮ې♄ᯝŒܖݵ쐖àֵς³ւޏ칉ɽ޼񋝬􆒢ѳҚǹ˜ͺؿּۛきŘ¿լ˛ϔDzޅŲ⇮떭쿼ɹӎťꐡԤ҂λ駌̾ڒ瘠Нı⼽Ƀܾ򆞡Đ〇ނ٩ȃк墏׀ʹƽ򀙟ȹަ홪͇ؠȊ矷ŦǥȒʕ擭ջБ使򅛻Ͻ׹곧憆ƾ㈁ㄐݾ˯Ƴ߾Ŀσɵúɿ先¦ߴķƺ݀ʿЪ¸Ļ°Ѫ倊gefc_Zhjhgegdl9jhggijm698768mfefbbfgcdha\cfcefiebkjeb^`_HTQYdb\YZ[YYXTPWT_<9^b_Y\[]ksmi`_YYX`^]^g78:<>?BBDEFEBFEC@<9979oppmnnnmpmil:887gjb^fhfkmmjhecccfemiq9q::<>=88;EGFEIKKIEA>@<8ikj8;=::>@>>>BC<;?A@?;<@>>=AEEBB?>>><;@?=;=:;?@>@??>?ECILCCA?@DIHDBBDFBDCCFGC>BBADB@@@ADCFFHECEB?=>?FEBBA@CCA?AADFE@?CRRg;7DFCMGEDGFEEEFGHFHIGHIJIIIKLIEHJFFGJHGEDFFCFGFDB@@AFHCDCGDDDFHB76KdoJb<:?9@BEC>=>234/Y9B1MJxAHMY_\VBHJBugXxMw}||y}wsyruR[_hd[SYZRQS`.T"*041X'8F+8;4?& D?65O.:978kphQJ-/!"%%(!$!$' 04%)6*Ev|UdQYcLNgs|nBW@OlEa5B56H%:,1O:,!"5H>1)?.Ef$;I6Q.IILRF7!).?D'!$(98#''%,'$#2#'2611(5%79**"-7,()+00.00,%'08/( ($%-7 #%-=76 $)"%'+-,+)(&))" '"&''$''*(*-*#,1$':@#&#!%'#!!&## :A>39A;.$):8 VDA 6".('3)5 - #!'.1,!QVe|bTg?&HVo)$75,UCDXcgtXsj{Y{in|l~VgQa(.%).[AN$l9XIawwPY@]dAACvorRR`ua~ŤjWѭ}~g[c91499kWZgjlI!8JX8k]G;M=.# 9G1F[1>p96R,WNXVFSNY@AMbDQaqWe^|GTd^OGU66CX1VPSZG]SbbF:GJPW\FC?R`^Q2,XLDC>E-* ,,_kBZfSh-Wa0Fa'',/RD33@8R6A?LOPKC;KmJk<&)4YS(*>L_3:W@A_98;<8j=IJ;\K^OZeXNEH03aYI6K7;35<:9<;2./6<>=2T/21//*.J78LKQSYiw{G{~[jeap\VU\Qvk}vyLZHPCmkgtrhJIQ-(\K>i96A=G11/(,*['&-/+=.++-*-10387:631;A69/'(-)(&VdV]V^1-+1:+36D<;764578:5*6A<53-I79758<@=:9:<9789  "%&'#$#"" $$$(-%#&$&'/<6+4BGMCS/&#.E;P406&")9B?>59312453,))?69AO:7JI+/6,59B-'/Y;7(C<08B>?A;<6(WVge:,2A,,=--J':6%KA***4@.tS?C7150*+-ZMFI+qHE82-'4]'('$>X64IV[X;,*vW(+62?N6_7J@T:7940QhnbUf^ojcbeVvxo^`GHhxlbF^iZqpbDbTG?JLTUZHFHDl}Jwok:0-09ZJF|^swBS***(8fCO[J=1KCOU>BQ9OZ_cJ[I=[ktnlvZi`kvpW\_weVz~xhU[xrmxn`sjsnh^bmgncl`OtbbZyKtr\pedŹp]|vaaÉt~hocC];XAAd[lyAEtXPTTI8<;,H9PVMWtL^~|ovCturishz~yglvITSXPNKib^j|ZSh|qP{xtbQpWtnVOLwGUV]UMsrdmr~Th\XrvfvkEFsgkM\[\`BOwdjAFetwFQ`\~\]iAw@``duiEA=C36;:6=620/1$75.8::/73<=1-BmreZysY54-10T,74=<@>Pe.29N9])6<;NH-5I46A8;<9,?=T<6E,0D>"4B(2$1- #'.! #E98"(@:@VO*@EF;9@I@h=<:88;FD?G^`INV_RA>@CGHLPIH>d845`\``2bb5576:9=<>B9<8;7`_]Y[[^UPM[`XVSb\]\`cic3446;648<<<6c_]_[chfgbea_[WW\^\Z^`T\_\V[e64358346^`he<==;<>DGBA>;7bb]TSY5:<99:97786;?:<<<84_]XRW^^_`\]\]dghf7:64689<97641cbdcda_`11_ec134245885656677::=@AAC|uwrmhacZ\WONLKNLKI9EF<4R[I<BAA;F::@A:`[`hf_G;AONEE3aYWRLJFEPPUX`\V\]X__XTVi75\e\UUWXVXVQMKIGE?BENRTQad\FHCEHLOONOSTSTUPZe7ea\41845=83cc^]Z__XWQNQMKOKHQUQPQSSUVUZSYWTW[YVUXX\abcYVVXTOKHHDDHA>=, %!qmFD!#:33EG6>H[DBKaFVh|^l\}MXg_PEM!$>L.?@H9C@-K;<5HMHLB]KW^>4GEJRRA90@G;! /,60#?+[['"D$B0 6 C1\ 6׹QA1274O4@;VPNK@6CqI_0".VG"3CV/4L78Q14564a:CC5Q>N?HPJ<74'+SKB0?/4-.41244-))0677,I&)('(!$6(+>:?;>J[[5_[Y?HLIZx|>d9:@8ZTuj_[cl^;E68-OSRetWJ33953)I)%2.:%'$ >$')#"#!$&**')+)%(+&&!#FWMRMX/,23:)/1ABX\\G[^bs~gsuykVecx\WrFQW|ZYqxqi}űk`Q_ғmϽϷjaix{t|~up}~gSHF@G[FBFTgjBXhkqvvvwvryx~zt~zt72-20/'&"F+0/,+&%" %ED"! "$&$%%$$! "&'++-))'(**+%",,("! + + + + + + + + +'($$ ) ! "!"1-066   ([='( :302K4)"42*14K2"D2! *4 (&3$! .642%/+767<:_9FEJBHCDG5J';.<611Q;/><65/&"-01/3*)+'9G*HB8-47YELT&99%+3)&'-/ &"')1#%"-377=QRKC3>*E.J-94=$HH=4-B<>! 3*!DK6><3@:<;5E:)6/2;D24)+-')A2+ 8>%J?>H-+1@;NBI/3:B<8C=bC<,'!#&&+&(:=3%&'=@&,-NU"0(9'B@B?2">D>*?,>J5E,I%6UT4%#'"$+* -+$##%%"80Y3&'! +$) 0! #  "$*"  + + %7/*&.)*- & 7SN'+%&/F!$1(      !*0(<%0%''*,/<#!"3',# &('  ((!"" "-&#&,$1  !*.')*.*+-+E)'*'$4427HG48=B900258578+( 2.,,-/..-,--/0+)&-1-,)0...//3//.-/+1322/20/-+*,..-..&+-,(*...33$"122*)*&."%##!/.*$%),+)'),..-*++-2343.-/-.-+,*-- #"I&KMMNMJMOMIFCMMRKC?=:54-.,&&&#'&$#'&++(&"&*1'%1%+!"'"#%#+0-*,,)) %$&&$$%,.-$,%/,'# (&/*)!/*)''()'('&'((()('!.(""+,3-28456210,+0.*'%!!%))+(&'&*&,-*,!,+)-44/"%#''(%#"! &%**..)--+00,)+3*3.**+**-+(%$### "&('%031#$""$$$&%&')))*&+./-*..+,+..**'%(%$'&"&)&&')))*(,(+*(+--+*,T+/433-*++(%%$$!!$!  7-6-5()*##$ .&%$#!"%39-&!$"0112/30..-,)( /.,-221/.173/-,+020/.035423378:5169=;8333#%>9<24101724}~}}~}~~}|}|{|}|{|{{~~~}~}~~~}~~}~~}|{|{|{|{|{||{{|{|{|{{{z{|}}~~}|}}|}~}}}~~}||}~}~~~ ~~~~~| }|}}~~}~~||}|{{||}}}|}~|~|}}~|}}}~~~~}}~}~~}|{|{~|||}||}}|||}|{|}|{{||{|||{|{|||{|}~}~~~~~}|||}~|{{|{z{{{zz{}~~}|{|{|{{|{|{|{|{|{|{|{|{z{|{|{|{{|{z{z{|{z{{z{|}|}|}|}~~~}~~~}~}~}~}|}|}}~}~ ~~~~~~~~~~~~}}~}}}~~}}~~~}~}~} +~~~}}~}}~~}~}}|}~}~}|}|||} +||}}|}}~}~}|}|}~~}|}|}|}|}|}||}|||~}|}~}|}|{}}}~}|}~}|||}}|}|}}|}|}|}~}|~}~}|{|{|{|{|{z{z{{z{zz{{z{{{||{{|{|~~}~~~}~~}}~~~  񂄁ùˮļ񀁁Ѻӿ܀Ԋ֍ɀޭىٰрה򵞤၌ȴ񌸝䟞陉ٯ㴚ƋۂɂǬםɄވΊ𞕢Ʋ񇕵́ŀĺȲ̧肐쬭ƪ׀բƆ厥ŋ͝ʄ݆Ǔݣ紤ׄ푅LJڎɀ퀛ۂ퀐ڱ槯и㢁ޗׇͬ䇣𘍃ㆱàǵَěՀʬԽҮ͵̠뇹ޟťІɶǿ熐ꁎ酌ݸ䑊ⁱĽ烂׃Ŷȶۦԡû܋ɳżśĨفѽݻǷž·úƿŸヅ聄󈗝ߋ󫴙˼탃̫܋Ԡ׺ɠ焢ڔ;ϐdz˅Ƭݰ䣀酨〄㧰ԉл틋ཟ舥ݵʸԁ؁ϴʓꨳŪ؀ݹȦК͊箆ïŸډü׻ùоڋܪ՘ɸ˧玦š”©Ѭԋā؇򓢣ҿ̮آˊ–ǥƸî䞭ꦵȔգȡ좖Ìڻ޵Ҍ䞎٥̶߬ࢀڵ׷Ÿ㼚༝Ⱥ쁀ĿȻꀒڣDZ󤤫ٶ㍼рºǥ¹ꄋ©ӥ遃Ѐøӷʿʼ݀҂ۊhbbedYbiilgc`jeeaadg8:7keikijjggdeedifa^]`ddhgdef67jf_UMUN]o[X[WTX]]ZVUVXXZXUW`7igeccglcY[_c_]\]]fe7:<=?BBAA@@ACFFDBA@?=;88o99onnifq><98oligeabgk887lhffjnj9=@9n;<;987=CGIJKMOLKF?<;9@?99978769:85g99;;=;@?>@>=?MHBCBAB?AAEEBACFEDCFEEGFEBEHEE@BEFEFFIHEFGA<=>@EDEHA?@;DFAEGM?<=@AAA>96204:=Q4CMc]=DDCDH?ulLRTi}oK{LLQQPNSTYicRaj]Z5EP1\[3S;4:*&*!=/QMYOl?)"##! ,%"1()-+*+1=OrAS}MCNIVxJQ}HHViMCa?A]\?QK ;#&1)4#9753:;/"F6,LA,56\BvS?%J),!(!'$-56-4A&'-0.&&+/+.1*: 17!&-&336+//7:@"%/#$G)(232422#49;78:!!95 #""('-+($#'+*'"'#9##')'"&!!&&*++-$&(%&$%%')&&%$01;5& --0;<0/#**$ 8&/"4'.4$sZ]&5++R;Ed9`,J_mJh88Xg`YU\ZQJXV*?,A@+6WCJ:6=RE?7343^4[^TF:*0LC1P]!$20.A889'<;=SRHT8DFHI>76;?J>DVNJLH5V1_=B=e\:BI>?65=:WR02UQEX497N`2./0.,PQMVWN.242581Z.378:6PDKK+SRRUYcjxl}|nciljdb{Gf]O||RStPeapIaTNelwNg`XMKBRGJBw9KAB];@,,*/K*/88241-(,2-Veola]88.9D,-2P<@COWgbYpsm~~}ypmis^\mRke<>cNXVhZ^~mpxgfUZljéй]XY]coktts{{y~~txsoox{~{zqVKKGE\ZLNP\`OWfgqqrsvu}tly}z;:64i5543/0//+*/,V;;97885222gd9852-(*-/-+*,022331.9::;85455796611:=;43.N3444<:<;97765346787589;::9889 #')&"!#$$#"$%(1)$%$$(*13%m0GDRG\@PBA461OfTOH>46683&#",:;7B70?;6?$(>WKGB*-E-U0ST=c6/(=@()%C>HF--74;QjG?CM=>)4*1'#A$'LD,&?5GTN`E8.4L5.-.XXVY.0=7.--,,36:ICG'.27,XIS3')(1ORFW?RB4LOGN5N??GDyf]G\jUU[hk}tow}}Mi^``pqRnUWwVGQaMzPLk|U?>?@JE`dyqph/=>OE_b+LCNM=J2*)F7^X1BeDvVQJVi}qa;?0:-QE:b.WVIMK1J8TV*=L.,7;,!9BA;JN=:JJC\AKS85^`XD61Z7JB':VMR/.""9BGF5NX3'! ,?.5<"-"!"!2%%&.T&5GY?%4=328EI?K14.2W>!N35Mlm>;:54=AT\Yj:PZ[bR?>APcZICCDCKX;[UDUhdb2[Z]^_c26966:AJPEA9764aYH>4dULEFHP];MU[\`bae\c89787678756gf`_[]`a55^_WSTVX]_ZZ[`\`[[^95=7797664gkn9A@858f44486:9779888:;9775542353ad[[af5786=53656323<;672ee`ifg8===<:86556=>:;:;95[WSRY\]c]YZ]eheg4745::9<;;830`^^eced^252bbc112234746546779;<>CEHHFGF}pihmyppnmhbZVXS\VTSMK;`7\3[]081BPY\YVXI\:M51'OdKA3/7BFPWJQ9RLNP6CLPW\^TP`44`[ZUWQOJHILRPRQ[YCa5^YVTQSSQMOQRSQQSSQPP8N`_VYbcqsga]][X[VPQXWQKHKNLNQMMMPTX]WZX2444:71171_6>>=@@=G<;=::2_`a]W>CR[V]34\RTNMTOPUWPXZRMS]`gdccamm^RZZV\Z[WXTUTSNJB>CDCHRYbX\LCBDO[]RVVYVTTUPUXVZ[U]][c__771226b_VVTLLLJCDFFJRQPSTRURTRNQRVXWXVXXVXZZXVXWZZWSMKFFGIGCB;7^T7MNNMDBGJGKJG?@=EB>94@6[Lb9EMccdfjjg5568875454gdd`f3d\Z`3`463766=9984fccca`ddace_cb`]^\\^`__]]]`fhkljkmnlllhl9<:spsljjiefgf41133,132520.4/100123134E342212630//12242123241+&,$48--0/--01/.-,/.,++-014344795/1353322/40N8:;<87; 64453013575435:67!""#$'$" 0 !   #  g ! !  &$%! " "#& #"! !! !$!(--%/'%1*#""#%:5"$&3AF>5(J@@GMNO)*000-247A;/PQNYYPI11+3""'     (45dB=N1  +  +  +  \<,F%'*%,FL2O4I ).3&    F# +  + !" !    !   &'"#$& +%  "&     +  +  *%   KD&2&$#%!,60N2ZP > ,+$( + / 20 Z/Q*=)%%"&-E>=*:!(3'(@,:)!)Y1BGI .3>( %;iPPcLmIca^xTCcXK|BaX! !XLO8899FN`YKP6.:5?U7Y#JalIc12[f^XT]WH:A3 +   8U)]^Z;+$(>/3:  %%< 5ȩufWXMn88AA8<516NJCL4?DIJ;66<@J:FTKEF@.K)S6<6\Q1\n@JK\4C94FP]BOB<41'0,1,V*00,C*-4$**"(!& %%()'(($%(.&)&()%$  &#BU]\RT483:C-/2P>?@MRe^Yknguu{xsjiuc\oVkhFGlVfhyok|𑣑c`~bow݂ӺڼйcZcsxu{yy~rs~yõƽ·Ļ^MI@>VREJRceS]{mryvspqxkrom}x}~w95/-\.,)%D241/.,(')(PK+*&% ##!!!%&'$! '&'**('))+,*(!!',,'&#="   + + + +  6&."(# $2-(#& "##: '6$#   ! !!,73H2$.<::>%"'$%-)5(-&2$*&&$*.$$*&I6.-6%$,:@PLp_L[O;HDJB6;:9(4/22;9/<)+@,$(7,E20FM2$$$'-)61?6BGKR?@?4961:.0>/,-80":#"4.30/4&(60J8EFXC[.$<$13386CC>d*9QR*,,4:6(7+;9)'&@=C#K)8/3>D?;8*P*6R?351 18!""'83]9 ! " ".))3  A#3.(!"2%"-.6z_L-,!3-#.)"++.&/2))& +    !).*B7>?<("265@$5ABK>/00;JA724305:#2+"+51,1+,-./2$'!.+$!60*(&(/2'*-.///0*/v10-.-/100/+()*+-.,-+-).,,+357"".-0,,.,--*--1*)'&*+-0-*,.2323/-,0-./*-,,$&((()'NONJHH@=<>LSQG>>==:6.+,',+)*'$,,..!'***(-#0.%)'."!&+$*+'()!&&),/*%,1-.)*'&#"$&'&('--/-*(('(('&(')(('))(''$+)$)23>@73230241./41)#!#&'*-))()+,-**)(*-.-( &+&*%"&#$)&&()$()&%'.0521209:.',,*.-,,-+,*)'%!"#"")*/*0'! !'--%)(+**)(%)+',,',,+.-+.0*)($%%$ !#"#(&&(*()'((%&')+*++,,*,0.,+,++,*)%$""#$%"#3+'&'& !#%#%$" !/)6!3 '-12331210,1/,*.-00//./21/00,/0.//-..0..---0346867::99:67<;>87753543~}~~}|} ~~}}||}~~}}}|{ +||{|{{|~~}}~}}}|}~~}}}~~~~}~~~}|||{|{{{|}{|{{||{|{|||{{|{|{|{z {{{|||}}}~~}|}~~~~~~}||}}~}~}~~~~~~}~|{}||{|}~~~~~~~||}|~}~}~~}~}~~}|}~~~~}~~~~~~|{|}|{|{~}~~||~}|||{|||{|||{{|{||{||{|||{|{{|}|{||{|{{{|}~~}~}|{{{zzz{{{}~~~|{|{|{|{|||{{|{{||{|||{{|{|{|{|{zz{{z{{| {{{||{{|{{{|}|{{{||{{|{z{|{zz{z{{z{|{|}|}|}|}|}~~~~~~ }~~}~}~}}~}}~~~}~}}}~~~}~}|}|}~~~~~~~~}~}~~} ~~~~~~}~}~}~}}}~~}~}~~}~}|}~}}}||}|}|}|}|}}~} +~}}|}~~~}}|~~||{|}|}|}|}~~}~}|}~}~}|}|}|}|||}|}}|||}}}|||}|}|{|}~}~}}~}|{| {{{|||{|||{|{{z{z{{z{{zz{|{|{|}~~}~~~}}}~Ѐ} ཻփψၨ񁉈ڷú堞Ҁ܅‏DŽՔƢӟ賕פЄɕŲŰ㞕ѻ󅫘Ժµ˨埂Ȭ؄ܿԸۀȬꁏ쀋ն߂ȳŷЂӐ涳တϣ˥Ɓ͓Մ룩ˎ٥ֳ粕Ϋܗ敏ՀÑ慐˶΁ڌٿ뇌Ê䫳߂Զ⛘ۻڐۺĤڄ㟖ž齆˵֮ޮ雅ŜǼَ릑ꅂ쇌􌒆ʛ܏ֲֆ򂀾Ӣӯ̭Ƥɾݎ˱𐚑Ϸ᤺ѸŪȸ봵Լƣُٔѱԡ߸ͳҾ¾ȶ􁏛׺ؑëÝӂ灑섄컃ܐߔØՔī䮒nj훕ߣ񵑮ЮǪæƶԃIJ́ۀ˺Ϥڽ샛܂䆇ߎՊ遆׷򎢲ɩ̶̲݀Ӹ˾Զʴ߂怘۬Ŗ瘢༮وאӌﶚնؿԪƫٍ޿ӪÓ왤Љ޾Χֱǁ华֗ůǚ®ŐȰ߭ҩߊ厡鯡гڭǮȸںϭ자ԜȊɝ찠ʷګ߁ۺ胊䁅ۼŶԟ׿޾ϗɐȤр¼ʼŸڇſ¾ۀȻ±ɸŸķʏhe_^eaYbefehbglkkhhdcbaceigfddbcbdcadeib_]ahchlfdm8;n^KL_8YYRY[Y^h_ZYXXVWX\^[V>C;n^^bgjehhgb_c]\^\\__4DEEDBCBA@@@>?BC@ADDDB?==;8rihlnrmlpllmnedfbcek<==8id_bghhhj9@AEA8:99BEEICECDB=;86:=?=<88eb7<;7i:8;;;>@CCRQ?BAA:8CGJIGEDDECCABAC@ACA??<;>><>=<>@9GACEJH@7>EDA??BCEBGGEEFDBBDDFCFDFIFHGGJGB>@@ABBEBA?3DONSKL^4RaJSumXHCCDAFABCEIIHHHGIIFIIIHGGGHGGFGGIMHGHJHJICCEBAA@?AEEDC@EDAZHFDB8qo\ZQW5f;=h79:=?H=65313C7D/8X3=G]gqnjgcbgiom`XVogGDNOJT]VVQcaaXNIIJRUUjqGSS$5:BV_IW'G@E8$-:=-6,:26`}YX9#<(-/<+A205 >B( )- )6FjzlHiFD|>RgHya\W]?7\LX9kG3J5,0),'2F:0<*)CP."G[\AQ;WOERN! -3++O03"*4%4"2.7-+636A3!&'24$(6/1<9=<.'&%'#*2511 %$ "#$&)*$&-+)&''(E99;E" #'%$&)$(&'-,.,$'!9#&&8")$9!& &'%<:/(!  :1+!#  !%(&90$.)5?$%'1)1-#" +B3XissxSi[sr';3*-??bQw|Ywsqnc{Xh\Zgfi#OCjg-87>3Q7L{rv^ulwyg9,<DoÒj:rG'3m*.7ADNZORQLTmhkZYRVZOxRP;?NP8``S;@eIOphU[UkXO]PLCMaZ_nKrdQ\k`^dZOJ=N;PB)64@*)L?Fg6dH4"X(ikMJVmCHg34RKE8MYTL=YH*&*23CAMTZSDlf[[LNQY6=:IAd>jpPfGF;:6UJTo3AK9I&%)-A(%E<.<2&=.+523312:=A8?55?0,---0.Vcopwk42O9>:=;CdTg\U{Qdhs`xfn}ohlef\arq__AXS[]Xkt|mc^o~ûvg`SM\bU`iqer{{yy~}p|{z|zru}w~}qpnkvx|~QJKEQdUKWPcNPJXhmooqhu{vls~xr98k9<852/11.&&KKr?<:;86766jig9722,-/22-P)FKTWWYSNY_/002232/.3:32;73/0,O4453996762332/21320//1466323147; ""%&%%%$'&1'$$'),)(+*TM?O?K@BOG92*>W8\0*JHbdC(?8C2?Y]kyu]>/EEH(6OMTadBK8P>;=Yc62 /BCGX?[;Nwc{FH~qz^enmeUefUY[XªZkwfxpcktzbto`dbci^n]X]r_YZp}|asqmhv~_vwrXGYž]jWWXlnf@YYktKKQympcG_[TH8;V?6O\iyndyadYzA>FGwt`ze\beebmCpvS>RFdhZ0`rp]l]}skg\U`Vly}}_lPVQHVRemMBKIGLUtT\fZdYcQYzg\IixdR`BMC>5K8>@dALmfB@TPNB'&6b<6aA>>7QaU@EGN[LB@IXc3F5U@bV[^_`YLLQZVPKRZV_8NP>7:864U@Q,5478:>>><7595777476ec]ad5;jg7@D>;75439<:7977d_WTNZ[\_]^^acdecei4<><;>=;83bbb]``cdba2dcdd233212787564579=;>CGHIMNHG~u]RX]zplkoqsna_YYTSRRLBUB==;:4HEV\TRUPAc:F=5(_YS=D) =-35??EIMX`_FNJHShk`af7jb\XVUPONOLKJHXNT[V_11YXVQPOHIJKNTTTPSQRMK?Q5RX`^djh`]ZXZX\VRORMNGJJNNOLILPU\TRZ18633<8d_9^`5:79?B?3a^_ZUNWSUX`ee]VONMMELKNUeGU_YS]c[e469le_YUN[\`\YZaabXQF<9434fbaaceccdaa_``]ZY[^^[Z\_bbfahfceghhkggjlkk8plo;uojedgie33//41+120343422000/0254211010/-.134/0.1503530590'(32,+110271.-./...121/ 5/035657875463130/0/ :68989645358J9444324642/223556 !!!#/-2 **1 #"!!! %&'#$*&1!(>9* " " " '# 67-,(,+. ,+073211/3297.(&70?$#*)%,60.,8:>4,'%%*/2RX7:),$&#  BkhSN65)"# +  +  + +8A1"5"%?!+9QYL1H/3.- +"!)    +&,.-a # $&  +  "     +   !# *&')2%"%#& +!     + +  %$,*) 6 ED8/%)0#Lp+"DK&96%,&%!2(%&3! + 0D,+.3$62!$".0eBC-%/2356+#%/&/( 963K7 <2*- I,'.&%",) CGAioh7@?-J+3&\hO LL$-9>GWONVOWtsvc[T[bRwN>$$'&][F2;bHP`gWyP78-=XMLDSaXaiHjaQ^ka]bO7'  %)<'k jpIELjV54F &@B=8E<9E Ofj[ElR& ?FR^XGlgVSAC>D,46G?[=msMiKH<90F0C+LKEPK?E=JTXUSX0K3G0IF(E12,;62<%C>(-HBRHG!9++'(+(#7+.&&B.,,>8@?MUTBQ.OSmFNbQHM:mU]:59>?Y^v..:;O"*2%5+0+!,%-$"'"##'&*-1(.%%-$  "'$@N^]a`02UDE#'()(**(&)+$"'&%##!=#   + + + + +  + + *)+ ) (!2/$!+2! '$" 37("") #$.,=%"'8 8-:: +#"090, &&C5---*".18'484*%%(///2+4&?MF2OC<;<@:,,)3.,46(:6+/*;4.+71(1$4-::4/(626&91EPBK -25).3;7+'%) *(%=4F"!?:=98E??-.5MV8:<'.,5#E7AA'+IM*F^H564/2./?=5,,;<#(/0,80,-1$"511@?7808D3D=27/BSBQ,-69/G934("0M).C./!*]D/&($>',$+"%>UJ:!/*#).9FJXPJJ*-!"15#%+*G6.4$ ""$51b  ,##A<2;Y/4 *'(#"6& % 0" +',O8+S!,* ) 3:!," "% + (FRbQS96!# !%/ y`y`X:4$4(!)%$'"+ +    ** * ' : ) "!0,' (), '!3 4;85"1?(#&,)"":&.?? "241!72&&(*=@DDDHFC@<6_h8:74g:@HB>=@@=>><;==?HKMJKIFCDB@BC?@@@BA?=@?:>=;::;@?<>IAB>BDBFEGFCBFFCAAACEGGEB@AAFFFCEHEGFFHFEBCDC?FICDDBAECBEB??Q^JQaigKHHFFFDBDFHIFFFGJIHFEEFFEEGGGFHDFHDDEGDCEDBBBABCFFFHG>B>AAJFB;AW ;:FGF\GGN7@g[wpAA8 $?f'!0&($**' '#0!$2+#&,+ 01)"47%$5/0*))632**/29: :#" # !!/4 #(++)*AI'DE;$" %)'*%2#*.-...+&(+,*&  9&&$%*((#!61  #%!"38'! %%0!&-,/0/?B(6&,5!(.#.1&."H>VgTaff{ikksxzt4-DSfAUN{_Xoq`_zBYdCE(*_,-eS-L@vvYguul^wh~b}nQgXD<=PH[9B8Nlhti|ekGmT4W_~djatd]i]wnbwgzчV6CWD06\Y8C@sEF@ackeF3`52[KUdpseb]gV]M?KUDM\]]34\.4582RQDLE7@F`6SLIGF(-FHB63D((C<9?ENUZYW^fef>x}jgsptTV[KLMISdr~ORfT~spWKjGhII?_\U\6GAZTMB9NcI2YR)(V+5@F>G:EeW22//42610.2=?9<:8/0,A-VcdovC<46B0=W:VJcpangxu3=\mwkxv\jUodEt\LGOPY]zd{iiZ{ukyßZX\Z^`c``swurikuqejvzwnry{rs|m~}~vssnpwK{{{|u{QOJGgcOSVZ[HNTflrrmpp|qs{}zx<=l9<:5.V)&#EDpD?<;878<;:77661233242`XMURMYf3_ce][_00VV0002;<4/4123.L3953256421./-,,,-*+**+.0/. 0/47 $&%&'"#%#!$)2+JX1GASUi;D6ZGJE;:+5UbCFK@*1/68A0H7IS90*9FaN=FEJL6K4@#.<&-';BFC.+$)=8*6?+ :,C<*-VLI.**9M;)4A6352-`j]BP3.--,U+,)-EYC@MH`CD_\8I":S{cSm0ByDI/)"<84L4M?XSpz~X97nXe]Sk[]NVSZdqq[aXus]R`ngthbR[VN\oqYZh^dXQWPCBCrnaM8G12`LMIMCPiCXZ>~VD2GIL?F4]G>V=;I6`^8LRA?9Me`S4.G]alisH}PS]~]|N~Qa[eiYd]ZaWjR[`qvz^udhdsdX\ZpkYaklafm[acX_lgj}tly^md`Ww^|m_wa~WsTkY{b\Ii7WXJ1D^dneNlu`VIK??}dnpubrmbfc}_YPUmsmmZM2Xzpoo\mX\XRub[POwf[SoJd]__kbaA{miaTXgGju[UonjUzl[S^^^fe_F`?,BCMTLBC:B=BLGKBOFGKIEAux^NJCO6+ARPM>:7=6'*34="4">{GFM]L(+3>)Ac{V7-<.1H7SL:LC>BCL:;=5C7@8=]FD2,F2HA=P01,##1B5/?%(! ,PE0G>.0=<26*:&+&(4L2GS4,0'EI\BH?7;X&6.2/3F%:)If>?:VSgN3O5a1[98LGA?;<749844;<9877658998847>98995hf5fcfd\]_g543d654754445b9842bccbba``bbeab322dc44477656579:<>BGLNGHGE|{q`PWmtynkmtv|maZZUMQPOGJT;;1@NOBCDTTNGGC4M8TBa@7ZQ>K7QeaLQTKF9WeiXUSS^ddgjc\UURTS>APWbRLIPRMKQ^iUV3^YYTOJFHLMOQTOPKOTJWLMa_acZ]ej]ZY[[]]]WOLLJJMMLMMKFGQZYJ3786644>>5_423;0]6<9>4d_Zdb]WTZWVTSXTMGK=GP[\]^\RO\dgfe7hgb^XTU[^i_Zfhh\OICACDNPOQOIFEEJMTMTWRRge]^_\V^ccee`YUQRSRZaW1_]VSUNBCKB@EHIXNURUWTTSKGMRTWSSTXVYXTTSUWZ]ZVTMHEFJIONMHB:Rd;=CFWVTOSOMLH@<3_[g?8?_XCWUF9dgf5ed4eg565546344gfffcbb`\hd_`^^ba_369<65gbcbbcccbc_\]ac`\[]_``__dfhc`^]acdffeceecegq;p9:oibjnlk{6223651.400/3025200021224523441232067145661351.(&2:-,0324200/.100.-/0.13349655356943334343212^8:7458768978624423434346557!,12$  9  !  !   "&, $/33! !!#! 2.,*...!"+ ) "%#66(275!"'%",.: 1+;$,,RH?&&9=! %!/k336<6&! + ,#0#F&=%*-1V\2(E;-1JI6&*&!! +  #0+<7  + O +      + +  ! " $/1/$#       +    %(!& #<DJ'!! +>*\ SXCN/Y#-!%#%% #/ "!0&40&''$2.$f^)L0(14)07-"' 62 "'/'!#(.-`*$7?'! OV0,=?F?DhWUD]=\20YKOX8L;B#4.AY>>p_OO;K?D>HWb{[HCYaX`QWARI]L"'  !LKM+*L',-0+EF:<7*-6M.C<943 $682(&4 !5)(.49>BECFKIC*LRRJLR]TL8;@32205FSY8h;jG>ZSU_?0H-K:r6)<<68"))@?-.2E1$C>8"(1.5+1ME&% #%)%%#$/0-.--&$"5%EOY_`:505@2>V7QAZg\e^rm(2T~irixxy`nZroMx`RM\doglٯieZ∱ȨΩȀi]b`jljkgx{wtkp|onw{v~z|}~zƮPJEFc^JQXb`PTXosvwnmhywrjv|}zyt99`363,"-8fz?9740.0541+)((%+,-,.,RMGOKCLU)JPPJKT++MN+**(*)"#"$#"7"#" + + + + + + + + #'.%5+"&'(2#! &"#0"#!   + +.%!$$:Q4)28#3%$*'5%'<; *"0AL8->&O,' $) 4,AFD1>,3.(;+,$)$(1<;,/*>>1,O,:5>51&1.&,38/3?9@:3:5,((DA6-&7+,*1-4G/;8#U<&#.24&'2'". '42(,$ %3,($(F2247#I?)(D194'?9(:%A%.'.<-!:7AK2-).GDC6/,.3--500$.=+ )3B;5,#$1/*229D42@0MY5M0._\OX1>0L(I*)<6(G-0/>*+.)H/53;D>?RrVGC[;NZEUJI$81/*I/>:A%4&-+(D7=+>-,#<080($/.12/11001035;CG%5=&17 %)(!*,1+)'1) *"6991458>!%."..40.),0220.),-13.+--+,*((&/.,,++.2+%*/2=  323022-..00+544430--++*#0.+*&',-..,.0.-./-..!01/..-,-./.+,.- "',.'''(MKJIGIB8-2@EKLD><>BBG;1+)'!&'($%/#%( ('##$#2&/&0,'&(11&(*&$,37-**)/35672/))&'(%(%"!&(&%(/4''.*)'%#""$%&&($&$&*#)##.-02-06;1/.136782,('&'(((++($%*.,#-&/.-.-*//.*(-)()*-,($'$+.../-&$*-.0/441/*)*.-4/.7892)%! ""))((&#"""$$(%(+&'42,,,-+/01110-*'()'+.&+,('*% $!""+$)&)+)+)$!%((*((),+--*)()+-.,))%#" ##('%")6"",)(%('%$$ ,-4 !0-!/1 /32201/001/-/..-F32./,,--+1.00/0120//-./00/-.//.-.12520.-/12341033244:8;859;:8~}}}~}~~|~~~}{|}|~ ~~~~}||~~~~~ +~~~}}||{z~{{z{|{|{{{|{|{|{|{|{{|{{{|{|{|{|{|}|}}|}||}~~ ~~~}~~~~~~}|}~}}}~~|}~}|}|}|~~~~|}~}~~~~~~|}}}~~|~ +~~~}~~ ~||{{{|{}}~|{|{ +|{||~~}}|{|{{|{{|||{{{|{|||{||}~}}|||{|{|}~}~}||~}||}|{|}|{||}}~~|{z{|{|||{|{||{||{|{|{|{|{|{|{{|{|{{|{|}|{|{|{z{z{z{|{|{z{z{|}}|}|}|}|}}||}|}~ ~~~}}~~~~}~}~}|}|}|}|}~~~ ~~~~~}~}}~}}}~~~~~~~}}~~}~}~~~~}~~}~}~}~}~}}}|}}|}}}|}|}|}~}|}|}~}~}~|}~}~|}|~~~}~}|}|}~}~}|}~}|}~~~}~}~}|}~~}|||}|}| {||{|||{{z{|}~~}~ +}}~}}|}~~~}|{|{| +{|||{{{|||{|{z{zz{|{|||~~~~~}~~~~   ~}}~ ~ ˶ɪ战̀Ʋ󂅊솈¼Ȱû»ေҀΫ˟ҷ𨋭өȗ唧߯ҫѪόɽ򉌲촜ɦړͻԕͱ‰ǟ󇽧đԖ蚁态뽄ʰ޻̀ρς߻ۼ聂ƪ唕ӕʵ񆉢ԕ؜׫؋ܙըȆֶẤ⑍ěϳ󐩦ԛϱ񑘭܉ʊ똹͌賄š߄֡̃Ŗ时̫퐔IJیּ˖탐˭NJႌ趫ܒɩҩナʗȹﮆԈ㨽ꐆұ܎Ղ綴þם҆̚ՓýȻЈȺƼ‰ť༸ίûܗקĩʾ̷ɼЮ솟IJŽ컽ˀ׿엚֝襮ȱ릹ڤ߱ɬܬӹ˵ݍ߇޾Űǣ߯܍ûǤؓήרś೹©ࣅ끌Ķ񜝈㪰ꌢКÕɳŹۋ菉Ҹ暠ʯڻΈࣥրŸ蚀ޙ߬;ګ҉􂁁≟ʒҥ㳢ͽɑԵƮ뀟սВʊϨŒӟڬį􆀖ꁄꦌÊż̈¾ђ۳Ԩ򹬳ϸ㩶ȲҥݰƚƾήفЫ󃒎蝥Ǘ‡܄Ԙƺ…겠蜌剤Ё̏Õļȸꄐ󊕙ꄊ·ξѼ鈳ζþ≈ȝںȒ̩ŀԾœ̾ɸ쒘򇐒ŵȀĸ·ijʶƼɶ¼Ӫȹgfghjgd_Y`abbcdcbg59=;56764fcdhcagl556hc`ei8jgfgkm7ib]TKWKOVV[^]][YY^[\YYVUWYYZ_``kld]_a]cdc`cabhdb`e`bh_:B934;@?BBBCDFEF6BEIJKJJC<9jj599=:98m;8lhijfgf`bq;onkigdfibehdfk:<<;6m;HDDDBBA?>>C=GLMH?;6dke:9h`h>?<;??=9;=<>@?>IMOLIEACA@?=>@A@@CEBC>?@:lm<97><;@EA@?R@BdMXIW5=I>ldg6HLAcZ0D924A7ECfnJEP;0P3G?1IVD5LZ_WjbQZTTeIOM@UQafH[jXqdng|cSDh>IN'+40DXHQN>-3?ZAC8}ubz@9+C<*(,/'5;)! %%(,$9SWJjcNZhfycP\JSR@FI9.0>4`iKrBYI0"# &+))'#*(#4$?,#),3-,+%/'"$/96(A#55!),/3 ')G&!$)-'''#%'(# &+,,##'%"!)##5$ $%%)*(()(A*+$! !5-$)1%3",.$!0&/7)+#+/'#1-*""lnBeXolWfqvakf**!W/RIs;/MN&hs1WqlH]Z~T7^Yss[l|e7Jj]_hnrabtlapvtz]>9=?~f['2@<=uGWWSOId=EehL-pbP<72\OFIJAICWVa^_\UUqXQYaUrxK>D;>-GGCQLO?:uQDXG:.F!,9S]^m[PPcbeOEB[WTO;\I7(OAD3+&M8>GVmsHW>;.edTXKA7BZ\K-?>BNfB#6*,+ &:hfhsxF$ (KpEorY}KiSOLSH@C|iUrARTReA?R^I__YeZShOZ\XLEA2RTYL19MUBJ415=:2/JOJ@=S39:5,+23-/G80)6@NMEUE=L\TK]]jLl>vil`OZBQGPYHU=[JOrO~rveUtQWopZRhEpGENZEi;`1Ab4]:#:IG@=MbUPel?-446:?B?/#,?=6,&DHS^iuDHF=C@@fVdavjaWgMM2$*O9=VpellaiMteQS]ndTUMryissagVvuiuiĪ뱖G\^adcZbqxxyuypi`hjwk{~vrij^f|wvtzstwz|ywnUVTP[kZLYN^NRQ\glpthvux~||z|<8::72,+'$"A9EH=<;879=?;;:51-13375g798:6j98899984111452//81,.45/O164314321/.,*))(''&%''((**)(*+,,/02$&&'%&30$72*?E&:hGh=WLHR-MW9Q1*E;L^F`U?6B*&;#/;8JBB)&)-J4*HG(K4,G,3:"63& 8?>48/?:P2-(&G=,E5$8GC@2+60019:2UI<37K\7.)-,*+-.-*RdSIZSQOR=T#1!&6fHG<@LB$&2TWK4>;@9pHxTdbibMPn`TU]df[[\kmySbkrYeki`^dLWRLl_hTLlREnzmW_58^XWNEGLJKI:m}2S+P[JIFL&JDJ@AKUMa.$& 83n@@7D(A>DBQbH:tUKao9;FEMOLCugj8\4@Qj0 $K?PFCCB@;38BI >03NB+B860<7$5;?-.RKU9$,C5UY5XFINGGY8A<@1:#%$'9/)+9-1Z4*48(-$)!-Zn2!QG9/SO--2?M$! '0' /C:AAbE,="g;h\QPX]cW;]RSGB===EFA@@@=?>DP,D?DD>?KKLQPFMTW^ga]`6bb^XYZWX\WSVYeccXOYoc^^6;;8?<9?@>`6<@?=633b4g58987556;:9:9>16=<6^_cdc`ca`\a`XUTUSSQK?CLTc_UVVMQXdc^hf3d[X[V\bha_YWXTNJILNGHNQRRK@DBOYaWUTUQQRRVYWSVZbfahc]WVRW\`]WNUXSTQJEBDCIKKYLSPQVWVQKPTVUX[WWVRUUVTUVWYWTRPJGIGNMMNMJGB5BB>GNTWPKLKJDA99<8c^:<8PgUDSSlf656_5558644hg8743ac49433hcgecb`ccba`_`58866fcfb_bbafb`^_cdb_^\_bddadeigfb_c`\bfebchhiklgecmtmpide46668851-000.120-/21152/3530.03224577310,%.'*-.244430/10/..,+.00//01685/0114654845:8736126. 5457567454007z875642472683345$ !!" .313/0!" 55! ! :   / !! ! %%0%.#)$2./#$+'%65$"&*%-&'%'1$$#,'!0;-7/63=9/$71,!'($*)[eTC3: +  +   &"$>793*178J]3'?<'A31/(!$2#  " #'*9#5   c +   +   %    +%' /  " +  +  +   +  +#)"" & +0-""F %  N7YCJRs?Um9#:0! 0"&$#+ &&$;"'.>an'6 1!',#:U&7, 61#)")$)+*\VF="-;88mEUVSMFY;=h~Q,xLEC(<<>D<3@YSM>!.  +4FlC[,)hoX[B0)7?=7%<9BJW%  9ljkw|B IgFrw_|PeNHFLB=E|pUsCRSQ\:9IT=QSP]SNcJXURG>9*ADLB)/=G79*(-31,)==:21B).2,!&'$&5&!&0;96A4)5C@7GGN.A'SNJPeC;6)5.4<.:%MQ+ )))-/40& 22030(59HX\]6>=6ACBcU_Wkb_P\F9 1'2Rmbymi_kNvoWScwm^bWw۫y`eW{vԹOaeljlcgw|~{{|reovq~x}io~vwz|}{uƽǀƼXWQM[fXJZSiTVVerttvdp{ow|ywxr7253.&,*DC9K8*2*@:%-$ :(;,(9GHF>.I.3,(318;-3+7%-+1.3'%049*&'5(6PC758F>VbV\KU3KJ--/\=9~P*AR916;D&42JO?EG-(9C?.90<3=A>6* A*8-<06%(24'L4%,10/97?(-%hw)AID((0*$ALY7TcG:2$*" &)]L 1/>3*IMB856PYGL=2:2!!!,!.%!  +  $!. +"+622E*0)(' %0     ?]--& "C8!*  +" 3$#%./D$8:2$?$=3*-12;:$;6<620118945674647= *89 +% . %0('W'!:32,-//.105="-7"&"$#!!%(&**%(**,2/-///,++-++-+(**0//*$+6.,)'! +/5350341012284200-+,-*+,0/..,+((---.-...-.*&)/.--/.-./.-,+,,,/ %-/(%&DGB%JACGC<989?>PKDB?B>86,& &"!+()"#&$3!%"! *%0(' %+)*)1305.)-26542&!%%$,/& &&&.&!#')),)%"""%$$%()1&')*)*)+./,+-0821,/26693,)&%(((&*%&$(,.*)2*$//222020.-10***+***'!#+/41+-,%%'00.41/*),+-03//-+,*'$#&(#$'(*+%! &+1,)))&&)()(''**/2-33.+)'*,-+(#()')&"!!#$#,$(&'*++'$(()(+.,,+*+**))**+*(''""#!%#&&$#!&& $&)*'%%%#!!1- &6+#+&11-10-/0/0131.0/..--+2220.//0210//01100-/12 21225341.11-011/1456561108<9:645 +~}||}~~}|||~}{|~~~}|||}}~~~}~~~~}|||{{||{z~{z{|{|{{|{|||{|{{|{|{|{|{{|{|{|{|{|{|{{{|}||}||}}}|}|}}}~~}~~ +~~~~~~~}}|}~}||~}~~}~}~~~~~~ ~~~~{{|{|}~~~#|}~|}~}}|}}~}~}~~~|}}~~~~~~~|{~~~|{| {||~~~~~}|}|{{{|{|{|{{|{|}|}}}{{|}~~~}~~}}~~}|}~}|}|{z{z{|{|{{||{|{|{|{|{|{||{|{{||{|{|{|{|{|{||{{z{|{z{ ||}}|{|||{|{|{z{|}|}|}|}|}|}~}}~~~~~~}~~}~~}|}~~~}~~~~ ~~~~~~}~~}}}~}~}~~} ~~~~~~~~~~~~~}~}~}~}~}~~~}~}~}|}||}}}|||~~~}}}~}|||}}|}~}~}}}|}~}|{|}~~}|}|}~~}~~~|}|{|}~}}~}~}~}~~}~~~}~} |||}}}~}||{|}|}}||}|||}|}}}|}|{ +z{{||{}~~}~}~}|||{{|{|{|{{{z|{|{zzz{z{z{|{|{||}~~}}~~~~}~~~~}~ŀ Ͷ£戄톋èĶًٰߊύ鏂čÕȥԿ˶筈턈پՀݻ僠ڣ՝٫٠Ş썔Ƌ؁Ϭӊ͢ɴ𯐂؍샣߫񸵩ͬ炃ꒊ鑅ӀҼ؀῝닑ٙ킆҂䐪ҬɈђي֩։Ƭڶ죯Ҙʄյ遆𻆸Æʜŋؖ㤨ʫ倮ߨ͌ᏨōـΖ¡Д혚˃˦僧ΧٵߘߛӢ닖选Ҁ닏铘Ͽȼє޵Ō˄ړƊ͂树ᱯ圲䫧ߏâӾۄھں׳ŷҷʙԺÂûօùӽ¸̿ϋɷ򁉐돣΀؂𖩂֢斬Ð̫ތȩƍ۠膮ܨͭ萎â턟駗ŎΈ𛌐쇏ŻŠ㒞۳ϝ㝺㙥耸҆Ϫ끓ʿЌŴ≟ͷށӞĶ帣ۿʀ爀Ѝߔː봻ݽ퐙ŹЏՄꆣꧾͿϣݰؿնπŚչΝȨж΄ɜسˉꇜ‰𔪀ʴ֕ݩـôٲԄЇȐǥ߄ǍƳ׬ԕփۋǹۄŒ􌌂昺Ư낍ю߃ꀌʵ¼ǷʐƵεپб濩˻Ѵ˽­¹dz̾˽̖ʹkdhhhbdda\`ab_ecfmj5j78698<:6hga[[^bijgihh5kl79lhkc_b]VKNWEVVY[[[\Z\[Z\YY\VVWY[\\[^`ad:8gemihlhdc`_jErkkcge9faZ`78:BCEDGEGKKB;9777;@?<<:77kkifijhlmnlo898pjfediqrjijmnln577=JB:??;9B?EDEJJGD?;3ah;7if:9;>CB:;;==BD@AHMMNMKIDAA@@BF?>?HFB>ACA=;<>;:A?>?DDDCFBB@AFQGCB?=?BCAAECAB@AFFFGJDFFDIEDCCCECCCACCCFFDDENUMMNQTMEHGJEBCGFFFEEFGDDEHGEFGFJHHHGFEEDEFHHFFGIFEDCBABDDBCDBEEIKIJFBDDBHH:dQ\\SlZ?i_wrC:&vO%'*,("#$ ((% &&-6=L_tdTnDW\ZR`UoIRS4L7@*/Z 5 --:,)8,K8[gYV}hMZ/)D*'CT8KJw:GD"$$!8# +3+,,1D#+'6!&"(!''+%('!), %/+*,1729"5 &(($+"$%*(+&)$"#$##$$"(*..(()$&**%%*$'$. %()(**(4*<&$"##!! .'!"-34#'%0)(.%(0% )!40+0(65,vJp^L]h}|yecx{}~4GVzmjsYwZshxxlcA)jsc^qNWi[hZPpX\yS\tP^)9"Z4YaQ.49ZRNnz3X]gM_SuzlQRDdfob}gxc[u}ywykD5>*_0'@LNF@A=FFb@._:9LhAyS;87;9@Y_BG5clB|nQO`byLJD;2RH8No7>7dFGP/7Pf`x=[`Zb[Q_ULr`TONNY9@L?CQK*?6#-1HOSBbtBXOcWStxPhRH=+NT\7As|PJ6T5$+-%!!7q{uJTYYOG=.CD?Q\MD@5T?9AG]ES_dQCIEiNK\@:`CHWKWo=>3SC8<758;K37B;90026367UT<<3MPNG?H,M@=G*041,,,X\VMNJABLMN[\ZTKaNByu^gOUsEJORWRQL[OQWMzNDP{z~ONLxIj{uFc]AD;SQb]4>?K`G?N&@LE<@FX@VJ:Q9<=<=GBA;6=3*%&/662..I:DM]kjFK@77-;Kjh]YsH.!08=Q|uY{qvgxoelfxq]^xvÆs\XXfoplqxnñίyę]]WVMJ?V`ZW_[`oqtqrrw|wuuuwolrhyzuowxxzWXSVjkRPSU]UV\hjlqrh}uy]|x96530-)'!<9@WFuy=;:896;;87653/3hjpnpnjpsi32258<<<;86:<<:9763)**)-14-J0323..0//-( &%%$$"#FH$#%&&'))-03"%'(*/6IWI8P7.H5;*JC3N6!/I0G-6G@FNH4-B0M^G;I>;M'+:P+76BckDFOhcUZptjlgg[kchkegmnfW^_cfc\p]UGTUjYYKnogmgkw{~m`[ka\^YQ8>LQR=qIIn]ERSV2gqGK=GZ18aDA#'&-06TN4,5=DI6jxZS}GXc}^fy[fU_aqWYXTPb~UPuj\ztxmdi`ZTppƧZ\drvzvos\UKqxxrWKfwm{fȞom{n=KqZF{mzwD]XV6:E(fdjeEh~a^^Mklls\b_Ocg{wp{SS^wHb\EniVP{TO{eStr|ZJS[hucYambXYJJrJcTeV\IJeWXtbkHLaN}uyu`MLVL`dUYd_TLIFIZGHKQNgU6$$CcIOV:LKYAn;e|@9Yz\VeM9.)))/;-?D7l@pM/7:52E=,ST4Y'){B`L=,M*407FWZ6W-G]LRLC;%*?'=Z!:%$4*$+$&613(,.*,'##%3B!T4DDf)-!!0?3#$''((8^@>TD67I>P?O\>;?FIN2?FK7Sg6LU8Sd?Wd983Z;F/XIF6RQW24;665>HLMNJHL[_[.19@QWGN7L[giiadb`a_^^_UUWXX_a7\^WVVZd_Kb>96:@:58;?:><=A:ee53eX786788981864<=2<>;=><:9998887633ddefdc34467556:;;<;7hhhc`_^___dg4D337;A;966521464d`^ZYX[]]][WTSUWVX3656:865532a\Z]a`\`aacbc1a]4d34953467;=CFIB???{tzsfcb\[QQZ[i{tlgh`ZLGGIIUQJJHKFBJ??JHFEGD=i_%58.8WCA9OSH?;;B:897339=@AJHA=<=;9j7me_dda_a]\YXYTRQIDCHKLLMNLFLU__^e`^a]^XXZacdbXSU`_\VMOKFKKMJIDJJKV_XTTRP[VUU]_ZWZY[eddda\\XVWXTOOSRRQLGBAFNKJJKOOPONRQQQUWWY]RQPOPRWVZXW[ZUSRLKKKNONMJFHC4U;@GRYTLDFFC@D@28B;fNTg_i 9e\kd\]ahbi67U6533fecgf4g43364daefbcdbgf34ecfjighhfdcafe`^bcfb^`b^abcedkf`da^^_\bjghjdejiffcefg9mjj7255534440110/30241222/,-/1453432347671/1.+%',"--01222010//--0++,./121212254:76::86438%=8825131-.676469678:88854467:<9668876#! !!/332! ! "!! E"!(! !  !#)$#$'+' !  #"#  #"1'..'3'15,+&2, +&.!1#@@,* &!% 27B85-,)%%CA^VM91CQ  L:,82(5#-01TX-6,=#'$  % +   '&(=9-"% #$8  +  + b   'l +     +   !   +  +  +    3&  !.&[*02$, #MICqh[eCuK2J4>D"-+""!!7#&:< +&+#&TQ?g- .'4C+$."9K/ ( 2@"/1"!';:D#+oE";HLC>=8A=O/$K4/=pzU'qT?'.'$EN/t%2[gC{wTQgjC4-)'&=Q/1(I0//"$/.J7]cciZQaWN~cQKFCC  $(5.5T6hPuIU\}TnJ8*..<*8lp?(  \D?O>4U7?907#<.+3 (,(#"#KNJ>><318=?GKIA5B8-OMAH5;H*0369772;3392S5/e8ORY983S_4OaZ+;7(+#<=F<#*)5?-*3)33)&.>0=:-=*0223:340*/&!")'#"91%&'>'&$-1#)%*%'9>&&G1<3),:>6LckI64(Q/,34./32@.(41355+7.,%0.;24-DHDZLEFMPUPA72=7454/#'27']P+$ZR=*46;CC#$ '/7#"(%&%)2=.,@>7'676140)7'0A77&F'<% / 76E$'&%AI+04.+/.,:,0+0:/0.1>$, /1,+',,184^5+F/7[HC>@`I.OQK.,MKKF?64@128++%ASLUmH3F,*R=0F6B1<8Y^DCG07/-3W:44/)2=&$9*201,G21aT9B+$$ IEJG6XTD4)$'7+<&$)#K));"&%+"%2+ 110+H:  A"66*"+"&!##.O".*,&" %,/#&*     6VbE4B+ $(#G*C(#!% D@7=+5 ",#"    +#  &12/+(,? + + +   !42*0U" 1! /& #5+6*45.%%%4:$7..0$%:>6:*B9410225323422/1488!(+.!.6*3"02,20"(:1-'<=D"%''&&,0465314;:8 %02()%,3230B31//.//.((*+*./+*((+0,!."21/'2101210576100--,,011,+.*+-,)))*)'&-+*,-/-,.-.-,)(.#')%#""C>C?86867//45?MFA<8820'" "!)'$$#&"!( %#"!""75")$"#+*#!"$'0+*++.8000661/# 1,&)(-#'('*! *'!#*)$"&*)'!"&#%&((("&'()((.13/-.1356.2474660,(#&%$%(($%/-'1.595030./1.-,-.+*(%"#&('&()(#&(/0/3/--*+)+,/021,)*10/+%('#&%&&$!%$$).+'(&%,*)'*+*),++11221-,*)**(%%''('$!!&$##$&&'&%(')(**+-1)''&&'+**+*,,)('$$$"%%%$" " .!"(,)%"#""!0%(5h174-40++.1.10001./1/21./0/1110244333210-11//0031.-/-0222/41.0/./0-154574344121013768 }~~||}~~|}~}{|~~~ ~~~~}|} ||}}}~~}}}~~~}||}~}}~}}|{{{|{z~{|{|{|{|{|{|{|{|{|{|{|{||{{|}|}|||}}~~~~}~}~~~~~ +~~~}}}~~~~}}}~~~}}}~~~~~}|{||}}}|}~}}~~~}}}~}|~}|}}|}}~~~~~~~|||{}|{{|{||}~}~~}| }||}}|{{|{{{|{|{| +{|||{|}||}~|{|}~ }}}~}|||~|{{|}~}||{{{zz{|{|{|{|{|{|{{|||{|{|{|{||{|{||{|{{{|{|||{{|{{{z{{{||{{{|{||{z{ |}~~}}||{{{|{|{z{z{|}|}|||}|}|}|}~~~~~}}~~~}~}~~~} |||}}}|}}}|}~~}~~ ~~~~~~~}~}~}~~~ ~~~~}}}~~}~}~~~}~}}~}~}~}|}| }|||}}}~~}|||}}||}|}~}~}~}||{||~~| +{|||}}}|}}|{||{|~~~}~}}~~~}}{{|~~~~}~}~}~}|}|{|}|}|}|}|{|{|{|}~~}~}~~}~~}~ }}}~}}|||{|}|}}}||{{|{|{|{|{z{{{z{{{z{|{{|{z{| ~~}}}~~~~ ~~}~~~}~~~}~ ~~}}ˀ 턄߁󈛜´؇󀋊ٮͥ䗇ƆƀĆő֛ˊՎ˶ȼ솝ʸъ̤⚯͉̙ϙȓˡ蝰㝄ɴδǃݽ̪Ͽо;ùݺᄀﱃᡆ􁭿ʔ惰ғ䦵ջހӦ݇Ɓ̒Ʀ͟ſ¨˛ػȮžٸсǑ䘟ɱ˨ȀᏲ須›Ԍى΅ȴڸÔɟ▋‡󉊞뀐牥ᩚ셃ƻۀށĿͽӆ̀Ŀĥʟʟʕԁネ뉺ҞýߛԳ㨹喘ԐѷǼ߁ԹްӨəƱڸ׎퉉݇Āз̾Щ󀌛ǹݹفӖ؛ڕ˕ѥؙ၂ᣝ̅۬ɷսݿ솅ï땭ƀ۱ۛƎ˵¶ֶ߀ղ֭øϑ汼ڀ̄゛Ų۞ηшјѫȣսþ̪̀ٗۙٞijЅᡍǃĦçᆾ芓Țı̥͑𶠚溷ʱÏȿƄڞǷ߱փҬס¥ײۉLjῑ涙ݒσ߶눹럳վ򁖘ǭϨʂІѕбډ钧ٔžًĩӤՀľƿϱϕ۽ԾₗԹ򀋁ꅕ󂅉ڀƻɾƷDZÐϭթ̻սӯͩͲʹƳεÿ킀ŸýüĿ䠿󅁁fomqmh]_c_Zgi[Ybbgfjhinl77k58:;:g^[`abhijii68kdegg\[X[_ZPPTFZTZZ^[ZX[[[YWXXZYVV[^^`ba\h:9khkljihfb]`fvlcabba^_]^\\6B@;lk67BACCBDFHNLF>:8n8:@BBB@<888nnjmjfsjeon<>97kiihfedhhijj=CB>>@DCBB>;89<>9hf:;6:9;>AC?:<>=>A>;@BFADGKNLKHCCD>;;>A;<=>@@A@==>>?>>?ACFDDB??>ACCEGDC??=?CFEC??BDGFGFDHEGEBACIJIGEFFJEBDHQJIMIFNUPORNQHCAAFGIKJHJIHEFFFDFGEFFEGKGFEFEEEFFIJJKJFFCCBBA@CABCADINICDF?C;;CivKXVcfY9:iBJo8>>?V=E<>B@C8CZ;BQ]`:6-128)@Gd0e8V5=M?:_1V8uzysuthd1HqFLFB71,>(<:$*)O3>G!;?aqLT\kTV4VYX!)##!!70$(5#""qS$./&)"4LaJVPtcLBC'#QnKaCnbp_k2(6$$*+_@$#!!7+'--,40+ )7$$;%$$%% '+07+ !  #$"!$#"7$$)*( #%# "(+-,$$,**$:'%#!&*%")*)&++-)++D0<%'!>:;># ;%(%*')332=D)(*)2$)%*-0'1&'% )-'+V^qbRp[hpZseo-<^TqN^~cfjf~h|oeOzpNK2C=_]QUg\wwkl(684L>Mr454BQ1Cttfy@9Lx:RK4!j8\BSQRAKVgxf{qjdsttM,B1C0;LOQNG?6<$&$#JP99@?n=n.7@6C=5'0*d ++AHD_JQhICEDzeRbLG/@WL+8GJLU9Ac??gLUP]3CI_WOUVVToWXB9jY84//SNF;7))8Q]0X[]58k_OSIQYi?v\egg[AKPXShBKNB\FSg^I\QD_eZq^S\nWyuSmkRUaqO[lgNhaJ]X5MFEWQ^&-g5W:<=>?DK4Z9E>8>B?456AAC=7)$,2942,GtUitNiQ.0+4BHW^lviA+<6FtoXfgd~nup~u\VPNRM|terlmkǨr^[ZRSVY\bd]ahegt}zv~~|sVwzwt}~|~ONQ^j`U[Qb^cckkklrllzpy{|vqme0.,+'$C72Enp|xuv9>856748:::744\glqqtpihv?<;8.-6;<=;7:==<9996880+(ON))P(+/01-,,**&''&&#DAA=;;8:7676:?@$&%(*/3#%!'.11RWtUA3=b[>kEh`9VcQJ7Th[;O8SDPXI]WZS:/3,E(8FJ9>X5''$$"8;5*2"5L'''%+E@=A4D%##PK4Ae:'=;,A;#B'>60G;J>=NN+*F+)D-148878;;5?K?B9@$ELKDE>4E\cS1929)# 0*R_?GD5RaYl@WQVqj]FQzil}j|dx{qFn[[ddag_aMRZJ|qgbjb]e`_ztekknUMINP@NFWIAp.?Q@GLO<.O:Jnt\yCS_mY\pueiSqT^`gVSeg~cdLsylqawrtllf_X_rULp{|S`crb_dfhuLZ{Pfcqbjisot~pfevXjwbbqb|}D`KKbmN2JJIIC^.[[bsVearo^{g_QrNR{w^bHf[xf^@S6vx}\vXjb^VlWkc_L`eIYOLAVtznz-VlVMqmdJdu]yu[uTU`VhbJErKCx\t6TTkelbXLb129GML[qOiochQOUi/"/-=1%F;F73_IK#1=3F:":+S9!J,3gTr6DK'I7@IL6S?ATEGC_223DA%G3D9<(#+=4HSUO4D@96?=KHB:C74$4(.$3()H+ (:$#.)<"-8."5 RICFg))I$'%>$%/,AG{@@(E5@;MKT.5h:gcUY_IYROLNJ8IDVhcQCCGB=:JSXWQRRV7NVe247KAJ6U=L^WN47?5;@60^TPNSWWNLKJIGGFGHNUU>NU2>=;:9776554gd34565557:676:><;:5ji6gaebf63dc56468556775242c24533ca`___^a_ZXXUPOZ5I\3365213341]\TU\[Zaa`_a242b3c124247987785k:V][^Z\^\[`Y`EE;/HJZURcVMCIT=XP@>TSEFTQHPCRcSYJCGOPRQMKQCTOROOV[V\d]Y\]a`acab^Z\RB@DG?@DGLJQ_2..3898=<7`W_9=B>;791179>FGADB?===9:98jic__^\a\WWWVUWICEGGIHFEFHPZ]X^[Z_XWUYWl]Z_ZTR\iiXUSMHGDA:>HTQT\TSRSKRYOSSZ[a`__][__abZ_\ZZZYXXVTTOKH@@FLMLJHKKMLJKLPSSUTU[PHMSQTW\ZYUXVVUQNMIIPOPQLD?@)=f[FRKMPK>BEH@BE:;<>AO92=_h5>ib_OV]^e567854fehbgf6gf42465gf55eig4785iddaf7665jh8i`^\^^^dg`b`d^]dg48:9fb`\[XY[Y\bcbafgikidde4:9:750152-57.,1T4356452/.1114543340254/.+,0.'',#0,0142//00--,,-..,,/13442.3866898975133;:32.//0.-44!4655865>7376677535567876 41 ! "!"!R   !!! ! !   !"! $ &! # "(&%&$%  $" !!2>#*.32-0")7% $&"#  +"43'+%,"9=857722#=  !)LTb1.),$).VH1  %W FR%  +%PF(/"-n% 13+m)+5FOPQF<0/ +1=/3:5VV%1'" H$8CDbNShHEDDkRS3/ -/,7@4<)/C("*(36,ALh\NUTVY}[W=-B!   + 8J}@jvcUsuky90!!C@Q(# + +=BIdt\YwIKQNHRg+Dm_-=;C6S>UT5=ROPMM.'*8?V>-(%!261%"&%%'&%/$01+*.7J>I'D,/J//))F>7+&(>K%DHO,/YM=D,5C@0?8,BC H&?'!#++-6$B*4.+47/%),832/("'#"%;bObaC]L+-+1;APv~Ziuc0 3tlYlngo{[RKJLKwtp}c`^V[__ailhknkm{|cɾýĸOJL\hbWaXkghkuursvhi{}xr}~z~qkaT'$# )&%Chivmpl23/,/,),,-.-*-Q^ehkmlgdq:3,&$()-..16541/.*+-'# ?>" ; "!/002/.***&(*+.0 + +   + )2A."52!;!42/I/$&)60(&$'()'02!"+ + + "!! $)#:"'+(-##10)) "'&!&0(#"%,-(*%"*2/0)4!&*8*:)06:4/$DHRdT@45<9+=1871 0)-74F2807(PT/6+GBLHB@JA;=8:PM@CA?1+&**"*)/+$Tt-0#/49+E*/7/ "++&) )"/0(-/0=&*2#/0..1!-?>4<4F->8$$3!52?='+##B*<+-((,-'2./8,'"*/1B0*!!.�/))125:BVG.OJFO?EEL+O'A\1W??>.),1&F+V047LI.S@O1-6-B(8.1$?#*(3*1(*AC!@08J;,$" -J>FSCIE@0*5CL.::>'.1=(=/& 3&0"'6&L,. +":345#&/2-6 &%(,&#!"##&>%7    -8544+?L %)"+!#WC5)!(?/72S&- !&&!%( "  + **% % 3   +    + + +$0'*5V. $&C"2")(422684*.8)//0/1.%58BNF:23951/1487108;BB==>=%,/9"1,/ 2!&2/) )"$'" B???DC?9>>99679=>ADD1?E'*.13'&/.23/104030.0-)-/*- +%--3,+-.622(!##36.056242+22 7620311//"-.--./-+-.,**)%%*',,')---.,,59:"?=A@>;>:441-%=*56>CGHJJKGC=99867;8<><9oojroikklj9k::9mkpigfgfhjn:DCCBBEFFEDAB<77=>>BBCB=:6j<;:;=;>?ABBADGA>=><;9r<:9:<;>?>;:<=D@=>@AA>?@>AAB@>@AA>>>@CFE??=BDEEECCFHEFGFGHJDDEUOFDGGEFEHIJHHMKKCHFBFFDGCEEFIHIKKLIIGDADEEFFEEEFHIHHGI FDDCEDDECDCDFFFED<@k@GjNf_]o8A<;91#SF8DA@D:[ACMM124533? ?[R4(-~+%!$(+7DxOqZbGRGOU5XJS^Z,FG9G)-D#!4<1 ^H>&A/>.)'ECF^L->S;TW* ?7FIt{jnwDE2, !$%'"!,-60<' '+9./C&$'(%% ./+/)."/ # !" !#"!! $#'''%&#&&%)! %'+''+-#8',.-'%%)-++-..*N..+&**,,+)GC$$-%7A"! -&$',*'$+2<6J+)+./#!#%*+('%%.0.2/!+$)<'+/vahcKpZi[cknixP^CHT[U\i`aZvslUJCDYW+;titN3YK~bpk{fcn{H@?9D1aSj;7eUSue+Gtxn3ki5wdJ^\cI!;h=/V;6XR2%HR/U7*92/@Q-_e^\QchiuJFrhps?BEPE?^JZ_=UJ<'B9@80'!F:IPB710/0,-9=81-***-/1653#.4?N_POSP--N12ZZ3_W7>0-54,,,-YLLQYJHZgln\ObuqVTYyj\~@wa\a\H:kFY^dBQVYWBB'ce7;Q?=F'-R.-%#!2,#)1:>??;:72-//45Q>>JeDW^^@<9VKZiXK\a=0#CSxYrVU}Kwp~nX^PL_URXTOLMGuwahkilqloo`\[[ae\OY`agbifmopmvyxsnqwzqs{zn{vMOUee]XT[gd_a`dkoqkvsztuxrowz{pkne,//+&==7?fwwqsm9778997h;>@>95.2ity?===>=>@?:65-6::<;9;=<99:742--/0.*0S*+***)%CC?@HJJHKOWQK?HRTG:87<>!$)/3 $!&(*'8?IWRF=Lekdc?AQb{m%dDXTDA2@9\j+)&$)9'7IJA@MG:O4)JJ8H'7A9>997&(IAI,,0/.1/1257:<9::=A?>>?>(4A@BEA 6E\?E6=U-=3'!#,",,HA\v:QlIN^dO`HxjzevypNWqu}wiVfQW`\ZV~}ypfahunhfTHRWtVgdMVSLJ1M@arM5>MLQVPGD_6GCUW6J'TJ32EWcM8[YFWEhXenmwfWsjqzfqTWMLSN`JTe\j~}vYxwjGhv}yt{f`_aaRSPS\lYVfVm\aiuVWlzW^blsybyxv`vjrsUZnQFSp?@PC4==G5XX^ia^Z~shxo\NhZhkPlvMI[YwpPYDurPnspa]gW{pYS\[fdEJR[F:at}GNT^}e]lMJFOdevykf`ZWCxPS^ZVch]aNK`qfRDNelNPViNKZrU4*?PJ7:IHTlp9>3-1QHXaFQ6Z@?B)%>p?YVG1D!~Sg7>F4SHB2:9?;GMD&Hrj>)%.9I7A>L%"!":03DIBB[YSEA@F`W()0^!(''&"%$# (+$*+ )&#!&+' L,246BP!90-0I@.aa`iGBk@DT[D:5B`]C=G@`^P@4P@8N>?MROG>A=?CACBBDECFTcbd^[T`.=43BhhSH>5\OJIF?FLNPQPLHJFHKIIKQ\:=LcCACTfi_bhdb]^ba\Xa\Y[S_Y_\\^beaefhac_d4c_:?>9897hi68]hfjko8<745ejji9=94a^5=C@><;984geccdf345776677899:@;kjfi66heg676555656777633b2c^Zc3883323dab`^__]USV\ch_Kb]493^adab_][RRXVY_]aab4324ead11366596674578tsumoAyqoqt^UO>@jdv^UZ_aaaXO=F@LFTLPO8>@>BNG=b>AJSKPY43137<;=4[Z86>D@>><:757;>GC>?@??A?=><956eg`a__\XTRUYXUJFKLNKKIKLRTXUUVVYRW\UUZVSTWSOTa]XOLJEA;;:BOZ^[\STPOQTTRYVRQ[4\`c476c_^^\\^^[XYYVUPLDDDEILKJFIOPNKKKLVTSSTSPNOOPVUUSSUVUUUSNOLMNMNPLD@B>ACMTG5AFJEEFBKMHMJIIHDD9KF>PWFSRJ`[ah344544:564hdfg55ef4564546535457758876heffdi566<;LX^fTIZpdHFOiWG^,;>/JQT8.(905G;8B-:IG.)5B1L6-0?AGMD=6ALK=1-+-{- + + + + + )2.'"+8:43 #)4DD."*%# .6 :"12!!$&$)!    + #-$ +(". ")!*(+"!"" !"&('%&&#$%%)&8#$ #2C-@#+12*7&BX:EEFI1F@=4##:7783:>4*8'(2010OKHLSIGC>=>D_LC<<2,58L<=>,10+&*#9Q}5kd"446;8(%/!$0* *(/,/$*$ *.$++#+!A=."0-.,+!,-5);,932A2-&-7;# ,(22'/,3"+112)4%?1-&4$'+4/&(0/(*4.0`c9?%,JJTFBDE&C($)/5I-,4+C/$FIH+Q6HX3=LD^5R20OL?wJUF,4=?'221,-.7,*4)(+0")):,6-7S/171421423257646?GBEB?@AAA=1234/1.2.(46-535481334.*432212" 8645422,,,*..-.,,,--(((*./*-+-/1.-.--))+*-.+//./-.9:;78#B=;?@2.+#(>5@4/01210,)#$'#'$!#+*$8!7,)/)&./ "( !&$#$$$%))*2:<7-,+ .3,0,*($+'#!(,!! +&"#!&-*+&$%#()&"+'!(%-(')% %((%(---03488332'#"% ").&'(*' 33/000./,)*,,-%"&')((%''*,.+*+)+&'+)),*()++(*0--(&$!  &+.+-'(&%%''%**'&++.01.--,,/-+((''*(&!! "$$## "$&$##$$+(()*)'%&%'*)))(*)()*($&%&'%"  $("!#!!"$'#&#j""%&)+"(�+-/1110104443240621/032342-+0553/.,-.052.../134459ŀ}}~}}~~|~}}}~~}~}}||}}}~~~}~~~|{|{| +}}~~~~}}}~}|}|||}| ~~~}}}~}}~~~~}}|~}||{|{|{|||{|{|{|{|{{|{|{|{{||{|{|}}}|||}}}~~}}}|}}}~~~}~~~~}}~}}}~~~}|}~~}}}~|}~~~~~|}||}~|}|}}~}||}~}||}~}|} ~~||}}}|}}}~}~ ~~~~}|~|{{~}~| +{~}~}||{|}{|{| }|}~}||{{{|{|}~}~}|{|{| }}|||}}~~}|{|{|{|{|{ +||{||{{|{{|{|{|{||{|}| {{{|||{{|{ +||{{{|||{|{z{z{ |}}}~~~}|{{{|{|{||{|{z{z{zz{|}|}|}|}|}|}~~~~}~}~ ~~~~~~}|}|}~}~~~~~~~~}~}~~}~ ~~~~~~~}}~~}~~~}~}~~~}}}~}|}|}|}|}|}|~}|}}}~}}~}~~~}}}~}| ~~~}|}|}|}|~~~}~~}|{~~~}~}|}~~}}}~}|}|}|{{|}|{|{z{{{|||{zz{zz{| }~~~}}}~~~}~}}}|||{|}|{z{z{||}~~}}~~~~}~~~}~~~~~~}~뀉ˀ܀ Ȭ˼ÿ⋆󐲵Ԣ冄̆ۋͽ赎ၦξ傡ޛijЬ֯瓟צ؝֯ޔټʞЁ̙ԴۢѰͼý񈟭􉋓𒍊֪􅣴ɻў錒ªܐ֍쀤ʆ훟ۜؓȌеǟ˚ـý롃ϗ׬Јԡàʫح͌䲢˾׿՜җϗ©堶󒒜򅙁ښȿˠDZ¢ĄՕ濌טɻ킁Ѐ笞րȠËޑ틖끆ė򋞤ʵѓˠ߱ŁԽ߉ң⏅ަӷ؁ՠ󍕖ɎմمЌ£ǼüDZϼַջ튉ޛ􁁎ݿ򅊒ظǷ灉ݹ󚟑ޒċ݁߄ּǠüⱷ˰̽ڙ歂󿿊Ⱦ׊ڻṷָ灊Ր鬝瞽ԤڙꅘŚˈՙ㙂ø£؁յÜʕɴÄ턀ه捯ܚȪ뢫ƻͩȹԤɕ󣫹ϔӁܻǒɉ󗗆󧴫ގǥؓ󻄊؀Ʀ񧃒н򦷤˚թƿ𸚱ž¾ًمϧяƐ˦Ҏ݋ݚ䣑ҬĪŵȻӡ↗遃٢ƿʿ׍ꓟ 􄆆󌒗Àɛܫɮ°˻лٜѴǿǼƺ²ôżƻ۽۸ԈϻýԒɀǼ탉އê±Ʒûſ胜ǸilljBD?mijnj`ZY`opggc`cgkijkgiijn78hhda\]ccfg75i_YX[YY^\^`]WJVWXXVVVX^\W\c`^^_[X[[ZZ]]_adgj^_hjgfiggcbcc`a``^cjheea`___`eimlc`d4P=?<;:79=DGDB>==;7688okphpBDEB=>?<;8<>C>AAC@?<9eFC@=AGI@>><;<===>=<=>=;>>8:9<=<=;:?=><99?CFE@?@ACC@=BC?AA@@AB@>??B?==;AEHHGHONIFDFFGGHHFFCA>@ACGHFMHDHJMFJJKJECFFDDEDECFJJKLNNJF@@EHHFDEGGHHIIHIHGHDCDDDFFECDFFFEDEEDFD@@>d?;mUjCg\cNiD`dq<;4:V?))1AB@>:@B:87O=0S1/3.[B:'[I(;Lq*H@[B>CPgNnC[KcErF[ywy8O$Jrwifw<5TWpDDF[]G&_gW>djo!)+PG@*&K`dVFJU^w35BHN~GQd]cYlhwo|TSkW\8r`cpaha0[KHAC8j:EGHaU\fYiwngWagq}fgsQBG83-;[E@&9SFD=@2qa|{lwWeRkL'H>JaiIU|f96)/KGP_we\j›?BE{7#PYew 1%$Q4<3xV2PlEoycWo|KAFRXtr;C2,I5[/.,6WC*@DOG2L+EN1 27R;0'-/=[C3Z[ifl=<0.(&(*002593B;\]?@OGGFX7@HF:B<4M0./VOPOAGTP^0R`_3hc[ignwmrbvpbk=CkQLBlIKWYvPiZZaK^pLQYtYwXLaLCNEA]Zb[q5j{WV4ZQ[YEOm,fC?j9(3_.+=$/+-#!!$-/641;7:=?>1'+12JTMTG8Fg]E4RU\mbgaMB=@$%&CV~^xeTsefdcLZbHLNZUXRQSQI|{jjwgnwmhlfaWY`eYV[\b\ehholropejzx}zxyvw}}xbe}}{NLX_ZVWsojT`ficrpq~~sE_jw_VOO[gvvgh7152(J<8:X~}v<88224mps<@><73226p}@@?A@>=<=<:4612389776:;<;:8772///.+NRU_LIMD?>FMW-/01``ZMGQ_f44211373.&#"&,5$&(*(A;KPCPBI`c;9?F;ZWHY>UK2:T@bYG?>7,$/:I"8H71<6 "!%(568+'#0>*.9H4h@,('PG:B9FD0(/>+'9F;44634687::;4/49>98@IMN('LHG=<7>C9\<7K8-^cG2:GkDRG7[W6YiFajFKyxKTQxgoLmok}xwxiRVVZTz{}wcdTeZorYFIQTrWg[VRNO+,<4MMr$HJHSKqX83?P_@RGIbj^9.<,/8XM79=LTC'A9WRLugPiCHNUSRWVeSFnGgLP`TJuoa|cCohombkkjX]WeZ[KyWYSYfchJu{h`ybXu}\j~xby}dkegwj]by~Jdz]\DDf7A0YhYTapzlsj}wlvd[EpQr]\ZOTpeVxBZghXvF[o[KXObx\c\etsMJTcM;:EuNZVNYWTyT^HPHKJHb_h]]H{[RpYMP{adgdMd_ZdPL5/0M{VV`u}fdFB>->5b=#5T{wJ31:PG1?:FNA&BK8dOD8AF'SY'-8D=,EH52A0O>UF.M@(2'4*4*/.4B)-!&!A<8O17HCGPDFD<:>0.6;?C9+36958L5%4321)(G>"#,:&/#29?4$<>3-&XbVJXY[T1E7h];YoE4K[RFT@5ME>1SQGCGDAGE>=?DEJLJ?@CFLTVW^5BPc\<)>F4?CLS\XYY\ZUY[ZUT_ge`a^^]`bda_bh69:7==;;76f3h76jW66:787954gb5777535fc6?A=A=8653dcebad376:88999:;79@>mggbd556898:6877879674333ec]Qb::;6e2bbcfaa_\]UQRjYNPZ`Wa63_^_^\[_ZSMTWW\\X[]`3ce442c1456364563ffhhjnqrrogqt{nZC_GG\SA;AGVWRGD<=?KANHMJB;>?MYBNG@D97/,F?E.,)4`SE?BFIHOOLROLJRXW]jlfY[W8EKDOHUYYNGHJKJHNE>GJLE?QVRSTRUQ]3\QONHPSOIQNLRTVQI^^WIMQXESMP4_ebd[UQN@GLGCCEPNg48;79:;><73879GE<>A<85569:AF>;<:8@?>?>:654:jcc^YUUTQTTTOOMORQSQNOMMPRLUX5L3cWUQQOQSROLOPMMQOLC6@IOOUW]VRPPXSTZ]TWXU[_\]\b^464a]_[XYSQ4dXPNCFHLOGGQOIKQPPNNLOPPQNNMMMNMPXTSRRQTSPSTQOJJMPNMFDBC@HLIGB96<]TMJIMNLLNLFC8AeU^5?K8MRJGdh5643gg48^5]ied54hg65333668336379;6574fdf665gceeech799:9jljbeheaf:lfkjhef6ecbfcagfhdbecc`cdeg@5785"$!864972/,098442134767845666553/,-11315/+,.--/.032/&-+./N21-/533122.0321122356;1048768475565122325765431011015681/0 "  86958:8988833566:866-,  "["!  "" !%%#   "" $  " *3(5"1*)%1 276'%!3<+)A '$0#9H"((17%;8<$#L6 0&&".=4E"D$*29#).1+(   + / -$5%'99$.6:+811   +  +*0%! ; + +    + +  +   $ +"?!.,+-0"+.#'$,+9  +    &"& 0(1$*&.$!)?uBHqPB5,/((#, 6z=H?6+06#) -" +2 +!6>FXY@H2Ab(/ #?%1 +9 + $%4(.3E2;0-^2)>AROHfN2avh,~+VXX$$d.,F]?i|^MkC25BNvj14!#0 >-)081(#8KPLz6L@=."#"   6gjsnKPB:5&$  ' + +*1cakdj=;pr{gltg_WlQfpVJE!?X*5 19a0K128;H3J>@D2:H,/1D6;N-C(R7'#,..=6:1DHN43!?8A9,3SF20H# !D( $$'(&.-/00.$)*>KGG9/>`YB3QSYf{ZnbD/ + B]yhVshplcKVX@FGOJJEBCEG—so~oowprxrnk]`f_`dbe]jignnswxkn|}¹ĿɬLIWb^Z\}r]gmnfrjjvx{p_ouVJDK[hvo]^/(+*1)(5Vxywxn70-&(,bhl750+('*,2js;::<<940.+%! ',++**(',..-,+))$"##"?ELT=595/465(((&&61,)+32#@="!')(<0J6.=*5XXL5>.#LJIE($C90%-%JHFM/1('KB4%:*/. .@)+1DAHM2FL61 +9B;?M{E=6968?J7>X>7B%%-+) ,%0-'"0&"&>:!#$".S#5#,$4##J2  ',%    CC)#"/8a}\)"42"%!.40S-&-=*[D8)$%59 + "#)'      + +$" + "( $1 +  + +(    +" !.-#%# /4#$+075 -!:,$3?!'50&0%)(' 7844:96;:3336246812248?>:=CMKKGB@=><=;ADE?<@79-+ 6$$!!#(-+,,.-*--,)(.22//,,.1120/.4316,501/2221/0S$":54/1..,%./,,-1-..--)(&2&!#+.*0../.+,.,)%*,),,-/1-/02348:;<;5=?C=1%8,*0+"##+*("### $"! +7*1(#$(',0&#$$'&$))'&)-,09:5-0-#%!&!*+,&!"##$$%  #$"'*())')&,+''&!'(($('&()+)"++)!#&*%""-53720.-!%'%#$$*&3  5000-,++(**+()(),,-+()''S))%*+$-*(''&''((%&&%%('%  %'&*+.)(%&+&(*,(++),.,-,/+.,/-**%"*'&& !!$& '&"#&%$&(''&%$%$%%&+(((''((&)(%%$"$'%$""!!#$"!/(%##%&%%'&""!/+.&&(# 1110()10/1033220112024$751220-141533212/-2104342132202335Ѐ~}}}}}}||~|}}}}~~~~~ +}~~~}|~|{| }~ ~}}}~|{{|}|~}~~| }~~}~}|{||{|{|}|{|{|{|{|{||{|{|{|}|||}||}~}|}~ ~}}~}}|}~~~~ +~}~}|}}~~}~~~}~~~~}|3}}||}}}|||}}|}~~~~}|}||}}~}~~}}}||}}~}~}}|}}~ +}|||~|{{{|{{{~}|||}|{}~~}|{{|~||{{|{'zz{{|||{|{||{{|||{|}~~{||{|{{{|||{{|}|}~}~}~}~|{|}|}|}~}|}}{|{|{|{|{|{{||{|{|||{|{{{|{|{|{|{|{{|{|}|{|{|{|{z{|}~~~}|{|{|{{|{z{|{|}|}|}|}|}|}~ ~~~~}~~}|}|}~}~~~ ~~~~~~~}~}~~~}~~~ ~~}~}}~}}~~~}~}~}~}}}~}|}|}}||}|}|}}}~}||}|}~~}~}~}}}~~}|}~}|{|}| +}~~|}}}~~~} ~~}|{||{~~~}|~~}~~}}|}|{|}||{|}|{|{{{zz{{{|z{|~}~}}}||{|||}|}|}|}|{|{||{}~~}~~~~~}~}}~~~}}}~~~~~}~~~}}}~~}Ѐ ʹ»ȼſ򣽊댂³Ϭ욝򲣃ޞ澆ݸͅ밎ݴ昤õݿ鈓ɯ葥̺̘׎Ģף̔斎Þ͖ϵ󊚡҉Η䷹ǭ߶Ϳי犀ݰʿüɎЪ֨ݛלӞƎؖÚ⋺±Ҹȫ֐⦞񉸦Ő䂧ȀߓނڵŧӱĢѡߛ̢ˉЫڑ߹զɖو阊딾肬اċ±β媔ɷ˷ɬʬؖ̅ү✭ۋ߄̿ȉ缪̹Ѐ̫ŗƹ˺ރ΅ХϿ­θݥˏȕݚܯ٧㙣ãҺ܀Ì䌁湂ټǽ»ż߾ۀ䂅⻣녘򽋞퐌¶ɛ󙭕Ӱղͷ숏然øƤڅ肏ق߀ꁃԀȶɕŽґޑԾػůȽ嗪ê넊ۤÎ둁Ǭ͈ʲ芬ƱڧٞӖڄڛӕסىՂӜ۩˂֚貜Օ¦݀ҭȌЂ䣛ȹݒˣdzӻщ޵ھܹྂۤ̕헣鎜Ά䤺‰퉘ڧ៧ر򾮞΃ꉉͯƤՏҍѤ哢꒛̖΀遭㾙®ՂİɻЛǭ̲ȼٽӿ„끡٩閱񌍋ϸ€ΉȠ寬Dz»ɪ±úýƮȻ€ѾպɼѴ􈉏˴ʸþͽ͸ހ̱˾Ľǯ󂄄abdfk==oljiffdbZihjjddflkghgeab`aefffei8jc_effega^VW[^[Z[[^_YNV\XVVUV_cZY[[`^\XVW]ZZZ[_bhjf][fokfieda`dedcd`__aceebcdccg`_m;icaf]ffi458@GE>;:?<;=878kl=9AFIHD@A@?>=AECCECA@>=>?==>@A@==>A?>>?;;<>=>?>=<>@=<=;<===>=?BGCAA@?BDBD@CC@ACDA@?<:>FEDDFDFLGEGKKHFEFC@@EHGKMKMMUOLMOOHHGDCGCFINIFFGHIJKLKE?@?=@EEEGHIIHJJIIFECBDFHGEFFFEDECCDEEECB<=C;O^l=:8^CfLgEYc:5==Q+3,@c>=DAVV2gBPG81*0V-6;7!K22p,@(==$.S[^gsk=nwaE`kTRyZ_],bVTbe_\ZP]`OMr>cS"58SSC*Czl2&,*@,-*$*6^qlSXDmT\@ROVO=@PNXTM476SL1 ):%-"I)',"/eLP,\8+")2GeiHokL^be!#" (,,FG>&-*!3(3*8/0 '%/)-.))(*&"%++($'#%""#" "$!$$()# %#"#&% '$(($+--"8!$%(&% %,,../-..)%)*)PJKJ??B=<@8&)47:;550-3:?81?8@BL*-G5K%8$2^2IUennglnclmmhccifgp^kDo]8VG8-2.*X+3@9-*+*13665)('##)0346:9!FB:E@IL.I5LSU5:937<313:bW\K@SGE1@=;H[c;gR]W[h?f{H;PTghZV]YaMPYqinZXo[`gtqjIZMQIfKGDPW8JN>oVE^DZiBMu=hJo>H/E1c.M:%$$+'#!! .--4614?ACA;92ECLXP8h]iPGUXjeBmY]?43<**)CTzS^UNQw]Y_[RgkPR_\UVMXYN~pvx|mhzgrnfURwkjfZVVW`cegbhonjornsor}z}qry{u{{{tkwK\^XW}sXaf`]]hnv~~yov}zs[]]dpu|xoo876*:89Wz{}{}{:8211djut:;89522diqr=BB@@><<>=:812068885477564556888764245/*1550)EL21./101`\NBG[dhg9:979;8///4(J31!+$)((''@?:@h+8VZm?1=ID_mXTKQL=[AIA.aDJ=6;Y^``M %C;.<@6TB=D:LL:TK?5@,,#(0)MWH7-SNE?>:;=<;=??@W6fM>IUUIEK=l>_SG5I@B@@>?H7OP@A=I[VQNG7SHLRXNDDHJJLKFFGGFDDEEFJLGDQ:H4J/?DBI=Z=GRUbebVWX[VVZ`]ca[^dhedd^dg469;=;:9744egefgi67;9;<;896647866d334c36AD><523b]ffc6525;;:;==<9Z7jgc^^^dg678:9777:;656532232`\Ub:763a23224gc^\\VWQQQHTkd[]3d``^^]\]WRKORTYY\^_]`ad3eb576686534dbbc`fdgempj_C6:TIT\0>;EJFOSRG85:?o@2$+#%&&%('&%';4MQPHAGNKGLNJVWVUYZVX_a`XYP:GVKOOLIRSRLLKLLMKAOUKBNIKKSVXY[_3_TQMHQPNOTTMQVQQMT]ZJIRRJVP\1\\GX`\TJ>A>>=:97a/7@@?BB58;5365@B?>88467:=<833466kke\XYXSPRTQ[[ZPNQOPKKIJHLNSFYe]UNKIOSTMMPNMPSROUPFLVSPOOTJLUTUUU]\UUZ]ZcabfdaaceZX[VT^XQ02SPOBSPQYONQRLNNNQOLHF?$6"#'3Q14 !   .#))?"%. %".;c!!k;:8CG7e'&BM79(4"*Y +%%#T '"$!3)'8/-:0(69JMPGKD4:B#`"XfAgb1RS :c 1eB?+!  + ,*okʜS}sRO.! ) #1FYlnlilmgqmmhdcgdjtbrIjY8Q<.!"!E&6-#%*.*%$%%+(59082;<'=)>GH,11-/3-++1THG>8H<7&54135../!)/(E2-@->I,6X*D8R+,/!H0( --)-5685,,'55=KC/ZrXfMHZ\m`C4::45H?;C67.2,/177/.1(:BI9;MCDF@Hb8>EE9621?78;CESA3=EF:0+,-1&K.5/-*(35#5#&+&"*+633*%'*!$5>7523-853629HF6)C0"5-$)1(';8% 'F.N#7((*.'(()";>%%/27>5$./1YM^KV2&,99A$R:C:6R,GHS?EULLMAE/N%@5U>A0g)+5LS3QQs:,2>&42;#,81"09+(J8L7L)/"),7=B@BA=>><;K>>@C>8A,0#9!,-)+ ,")*011***,**-0.20,,05433/11221355^1//-220762/..03++)0-30.,+))%##&51+,/-,-)(%'(***,--,,,/0-/0//.4145:F;95!"$'8. '"'+"$&(#"@&"#"$ !%$"%%#++---/,-132-0*#*$(&'$(''$$$%%&$$)# &#"$'(++,-,(&%"('%'*,('+()%(-+#!'&!)$*)+).0/)&'" +//.5!!! !- ! 453-+,,*)))(/./))+()&&$&$&&(!*.,+$##%(($$'%%&''%+("%)('&%("$*)*)(,+))*,)12352100/*),+(,(##$$'$&+%%''$%%%''&!!%$!# #%&(%'&'&%%)$&)($#%%(&0#!"""##%#" ""$"#$""##&'#$01 )'3,Q..//0/023102210142323556200/0-,045444221545322Ӏρ}}}!~~~}|||}|}}}}~~~~ }|}}|||{| +}~~~~~}|{|}}}~~|{||{}~~}|||}}}| }}~|{|||{|{||{|||}|{|{|{|{|{|}|}~}}~}~~~}}~~~~~~~~ }~}|}|}~~||}||}|}|}|}||}}}~}~ }|}}~}~~}~|}~~~~|}~~~||}}|{{{|{~}|{{~|||}}~}||}||}}||{|||{|{{{z{{|{|}}~~|{|}~}{|} +|||}~}||}}{|{{|{z{|{|{|{|{|{|{|{| }}|||}|||{{|{ |{|{{{|||{z{zz{|}~~~}|{|{ |{||{|{{||{|{{|{|}|}|}|}|}|}~}~~}~~~}~}}~~~}~}~}}~~~~~~}~}~~}~~~~}~~~~~}}~}~~~}~}~~~}|}|}|}}}|}|||}}|}|}|}~}|}|}~~}}~}}~}}}|}}}|||}|||}~~|{|||}|}|}}~}|}}}~~~}}}||}~}}|}~}~}~}|} ||{{|}|{{|{|{|{| +{{z{{{||{{z{|}~}~}~}|}}|}|}|}|{|{|}~}}}~}~}~~~}~}~~~}~~~~}~ـр ˴󓔄􅔌ùǶƲιɾ֕ݙФخև˅ƒſ̊܎ۙɁ桒צ♏ӪɄǑʑ晍Φڇ宀ѐĪڕԟΦ倆Ǹ􏏉䡔Ĩὧʷۄ路⋧͸񋍴ЋĂ򤘐꺯ڢǀԯޟՓ͇㗯䢳ܮښֳ͘Ҁ滅¥磥։ȊӶ䭎杖тŽլ٩ņ܀ȘDZαًؙ؊۞ף詝ۑʣ܍ϘƤ˕Ĕ¼ʭʶ࿽վΙǻ삀⋁Ӏϥň׀삏뼽竛ٶ򥢛ӹЇ쩺ꮔ܁ł؄ŷ͗ҡ᪖چ擅ǩ豎ѱÿ߿ڄрŪ逅ݲ˲酀诐܃薢ہ뷊״ǀÇړᇎ󛰚Ⱦ󆧝©ȹ±Ѯտ즳ʪƼɼ䕽à€ڥɓҍ몢𑞒ƁϦ냣ՆظƗ჋偒܃ϫëҊȦ潓펨ΥƥΈɽͧ妍Ų񗎁ʕƟԝɆ©ɰָրĨƟιȤӈ֒ϫĦڵپҤǎӖѼƭ׎ƵŢꁠԛ슁͟㉅ý쁏ʥٱۀω➋ߴ›☐⩋€ΓМְȐи׃͒₌󃂊惋ǀ󅏊ï׼̐Ǯ֮ȺŵȷþʿŹʴĵއѴ㎝ƦλϽɼ¾ǿǿ¾Ƚ􉙐À􀅃edcdacjl;???;67mgjrmlln8qqnjfhmnidgijjp8njgj@A7jm:87?JLKHHJHC=<@DFFGFBA@B?>@BDAADEFDEDCBA>@?r>>@B??<<>>@>>=?>>??=>BA?BDEDDA=FEBBAAHDBA@=;AAGEEBDHKFOWbUT_RLHEGHFFBDD?@MREDGGEEDCILKKIE:>]@JVI=??<:B35,.3B)@9DALY[J=&44A+Oe >:22/3 o&,@0CB8D4/1jVSboB^TQ;S\BN$ KB 0'..;Y)]P^TUOS=(&#!('&"6,-d}WdfB]hcyM[aagmmZ^}Seex}rdmJ[Vitlk\j@llICVls`yPGPyb|~}rnTkF437lB)\<_[?lQ5<:QO=$(BCR3,;G60A0equpUQXeXcfui`ge6_N7)'9';OVXWg<0I[B><)''.25632)*(%"*.487;=D3UTF65=-16c=>GgID5^QU6>6ZO[cQ38T3m;;qhcsnLANq=YT{WBMZHCwXTX\d^\Yeos]]vcsdwngfkQMeT4=BJbBNUIE_PbeflL]BI)KY?@.,(+*22-,.+4=4//<>C@?>2238697539>9;;975644239620*M3630*S7:5\+^XWF@Tdlmqq>A9U]Zhy}xEDcD 0"&8@ptBX`I4\@=KcMS;9tBtX>_372:@#9443#&'&'/,%)5>08OI$#/&F?mTY57?%)$;""$@7=>AFC8:?CCcW?FECEFA@# =7?158>B8LDF%()==-!91+<3<@XOTTsE}|aQ{q`m\kcaeoahwdiaUVWq]ZKCM|lol}Yajz]cua_dpoupm?lYVOEC9?O:bJRRY>^C'G# ",I;:&,bN.3K+U="2Q:FLG.&-Q,0^?EHqvXTN_BjX_zOMMUYM~e=`>Vv]z>oR{tssjdGCWWtjfjspjgPPM^XWhiLuWpf`KNQTl|]]QYuqnjm|vWw_kIbmLTN{@TFA>9E5BXTOZoxu}zq]ds~o`Qm|QECbXJn_lM|njM)_\sgPkHqgs_jdni}n|reT]bH=Cck]QVLKee~VgPDQNSOPXZQUHiyZ~ct;FM`bMrdl4MM<3#K&153407OC94( /3H;DIgNGJL7A?5miAC89N2;)K]'F)djurT0&aMdLJ3/CB<>E?KWBC!3:.$ 82@=?V;,7S?=:FG65D#!"&#'5673 !-'"-,3'!"#"2A!*9E-0"-%NPSJo?<227+OFIje4J`>/OIVWKO]<9AG@?><==;9556766?D803?E/W1WE?W;4N>@@A@@@H>_85ACHI>LAAEDEIMKJ@AGGGFEDCDCCECEFHHGEGOXKEJKT4D=653d_f65e9835:<;;=<;6566ecc\]_e959;<97:<=8747970^b3ac^\c432_2_24634c]\\`^\Z]\g=5a]]VZb\\^\^XRNIKO]^`cDa\]\^_Z__`48665766333`[aebaWbeg`VJ0?B9@DAPQMPXR.]38N?UHVNHkWL24$%&$#%(M4),,-7?9FOXWWOJMPNPSSVTWUZ_a]VXPJLLIQSRJRSMILJFKNLPPPLLNJOOLPRRRX][ROMGKKIMTTKR`YSQRU]XJFMFUYZUSd6T55_TEPC=?DFB96;5616BA:<;8<71477=/0239:8d^\\ZTRUQQSUVFHIEMHFFDFORUUU]SQGKQOOSONRSIPZZUYTNU\[XTXTOMQMPSO\^UNU]b`c__^d5c^[\WWRQMKRY0^SPYNSRPQQPOONPPLF@;6GNEILEFPNUTTKVUQQVSTRSPLPLOMIHGHDEGJLJCHDA99GROJKJHFJLGI:F87b8@:W6QL5]2eb3644654gadjh695655kh56698555g56697575331345fg44f44iicdijije3445789;=7d\__]hji7:;96jgecdkh33221268743:751662125214887325487202102525665861(1.1,,-.-./-&(***,03343/.0330,-/32123432104 5472134355543266654423220/00/q323636<9989<;88555! 973665585565 76"#! ! t ! ! "  !"! !$" !!#)/)(0'" !%% ' #,$!%(!(.N + .#$0,),%#"%20'./../+,'',-+# !  "-S3(77&"  99'#  + +  + + "- /;!,C,,'+   +   +  + + 1: + + +  +  +   +  + !2,*7A9)$('*,2:. 111'&$#7.%3,2*5!#>?3     !& '  $ 1(LTJ/&1*JLA/^;(HVAG;?<,BA"$@g+0&+;(!, &$# "#% 0. &%#*kYFZ1GX#Se.,3*, +/!D + iN('2 = !F5,T",FO,][5D>1.I2Gp,*{[Sg:uD(%J-*BOA35%"6&%C0!$8#(-1 7(  2*9M1]>%J,', +"   /E/tq`|b=% +53 +74**hypXUZfUdipdUZd5ZI79_H;/!!'-@BNS[/'08L52<+T[8@-%&2:,5<1/?9FOQL;A./0@.'# #&,(&(37:62..(#!>1W8ZqPb|M+9'0(  %8fb`ʨiUUJOSubYNL>DMHEC&IE=Apuup_pwsk\[m\Z[]\biettpkjr{x}|nw|ty}ovO_cWdymZnngjqsswu||rfluyxnhm21*)(>r{{uq34.)SYdntob,)()-ba\ch328<<:61/-,,+ &(/1/+161450//.-+,,0,(&#D.0-( E03/O%QRSBBXgnmkk:<;97!-95;HLKO)';" +  + 0&,0#%'#1 ! 7>"*2#+!"/($=(A4$5  +'# !614  "%')("%&:4((&&'$# #!$($/&&%& !!+%).9!:93-E<>3>/965;M13+&'&://$'J>=3=:HSQ[]\6;@M67D89>GCGHG'B73.,-''0#0RT.T]8352-,;"+'&.=O#AEUPR:DBDBKS&6/1,>@AZ\g[HW<J.#!-2%0%!* #48! *(/D16/#* %''4)'   **)45 5G"  +% +     "=)%,-NF#+ ':*Vryp9 F&" + @ +  +  # + +  + +  + + % (2 /*%%>"",##*(85,8#(&-.*,1 !)4/02/442/-,,.+)-/($$%&23)$2'$A?>69>???><;<::;7:<>>D>=?BG:8=?B%)7%*/:"(*()+-.,-*+-./../41//.-.4110q/+.,12410+-01,,,-,+0++0,**.++*,*//,,()-*+,+-*'%#$&./,,+-/+.-./-0020*2761+'!"! *)''+(- ('""9.'' #*(($#&(&()**),*-232,/*%&$#)++&)'%#$$!&&$(''%%'#'&#$((&(+*&%%"%$#%*,'(2-+*+,0-# & )++&%.$0-#)!#""$-,39" '#%!/--.-*(*(*(**"%&$&$"""$(*)(',''!#'$%'%%'("&++),*&),**(+(%&($')%,.)$'+0/200/40,+,++&%"!$()%$(!&'&'&&%&%'&%"#' #$!!&$())")'&&)()((&%'$%$"""$"$$$%%!%"Z!"(%"%$""&&#'#/ ,)!(--1,.221100101321553421-//.3545321165Ӏā}~~~~}}|}~}~~~~~}~~}|||~~}|~~~~~}|{{|||{{}}}~~|||{{}~}| }|||}~}}}|||{|{|||{z{||}|{||{||{|{|{|{{|{|{|{|{|}|} +~~~~}~~~~}~~~||}}|}~~~~~}~~}~~ }~}|}}~~}%~~~~}}~}|}}|}~}}}|}~}|||}}~~~~~||||{{|{{|{~}|{{|~~}~~~ }|||{{~||{|{|||{{|{||}}}~~{|{||}|}~}|{|}|~}}|||}|{|{{||{|{|{|{|{ |||{{{|||{|{||{|{||{{{|{|{|}||}}||{|{ +|{|{{{||{|{z{z{z{}~~}|||{|{{{|{||{|{{|}|{z{|{|}|}|}|}|}|}}}|}|}~}~ ~~}~}~~}}~}~}~}~}~}}}~}~~~}~~~~~~}~} ~~~~}~~~~}}}~~}~~}}~~}~~~~}}}~~~~}~~~}||}||}|}~}}|}|}}}||} ~~}|}}~~}~ }|}||}}}||}|}~~~|{| {}|}}}||~}~}}}||}|}~|||{|}~}}}|}~~~}~}|}|}|}|{z{{||{|{|{|{z{zzyyz{{{z{z{{{~}~}~}||}|||}|{|}|}|}}|{|{|}~~~}}}~~} ~~~}~~~~~}~}~~}ۀ̀р  ʼ򀑋瀅ķϷ»쏒ֹ֢֪؋ӊ烐ۼᰭȋݰɳх؈ب┬Ɠ‘؄Ѻ۟ں䎓걊Оϳƕƛ欙螌ͬ싅ʿ醊ї܂Ėړ⹻ȒѤꩠ͞΄Ԍɷšػ皥Ǐï֘癇ԕʞԜʏ׉ɩǴΐЮاԉՏ̦Å״紴ʫαĻӶɖʃڜԚԊ€DŽ䀑׏ك٠˽Ⱥ塙΀ř놃쁇؄χ𐦥˸龙ސ军ׄȀɽƷÿ먪ղꃧʨƁ񀝈큼ދЪӿ΀˽쟆އ뀈狎ֆш뚯㛂򮊋Ҧ𒯌լć󹬎Ž舐珮ɗѣ̳òʵ¿ݵò㗽׀ԬޡÉըƨͷ㑅≣Ҳо؞ǾБ񚑒ΙƋƼ䓭ۯآ˜ɑꁂũLJپۼ⁍˸Ӻܙ֏񓬣Σ‚Ȧך߹À欯Ӱ™ʄʉϟę斀ݷЂȁ±䃁נϘϾų̝º䈊ɿϊΥ̂鶻ơט؀ͺâóɻ虐ƌ©ʼ㋵넋새胒ꇉπ÷ƻȽҾ򙋌ԢɚȺźƩצ􀀄ƥ̸μ˵ֆʽĭĻ½÷ѻрłUdea`a^_cdfgcegnopikcabefbimmhhdcccfje__```edefjhfd\[^_][VWVVV\YQXVVXZ\`db_[\\]^]\acbab__m8<@DJMNOLHEDCCA@?@@?=>=<>A@=<=ADGDB>>?=:;<=?BAB@ADCEHLECB@CBDHB=;;=?AAA>?ACIEHSXRbSNHDD@@DHFFDBGE?EFGDA>6;?LFB=55G@nCI(--=;SL7Q/lL=J$>g PG;!/0$E24>P-S-30B/[O->aQKQEFF3444ObIr]Sljaca^ZT^]eXB=GCJB/F"$D=(#DXSlP\RR&SrN>W>f>62?!G#+/';/5#H23-.&%%.)'("'(."%%!#" $!()$"!.$)'')+*'"!)*+*,'&())!)++*,)*'*.-(!;@@0JIKH=8>;:IS>?L<>8<645:<8>JXIE7,6 "&5cC@;$##$-*#&/.5!@%1-+*#UEVkAne^[lYPdpuEE`f|qlqdYFOOLTEk>J?5lbhPYM<(WAsgdaByVhVZzuy`r{y:T738ZR>84;Cd}a-@LO.5Bka-)*&0I./09O&*>3'#-*)2CF"(1;AQROWTRA/Vx-Ecvti3GI5HMD=B,2BL-(:R5,/>_K1#]rg}t}vm{jT\Og,0:035(464,-'#!5O5;,>0/'>)RVrjd\PPDQ]c_aQS.XP7*7V=% !!L0O;QemjH^^cZKk0""#(*521-*$%$!*07<:jg;Epkf;evtNFMY_~W\\]hW^Sbjmj{{ns{tXlwvgq{?=mP>kJOK@rwmGs>NK7H/8Gk*4W//39DC<;;??D?=A>GJONOKGGC>>8BE>9]lYdc>RD40E&">@BBA?59445:;94;EE@=;:85435364+(MM872.QVildYRNW^ghvvy>?==?>XynrjpHHECDHHIc%+#$%$&-'`?MBSa`eC1?HJ?_c5c>53KRH7kcF6F[@Q<[FDkNa-,L;68C$!&2*&$##"+1,&*3#2@4'KhKJ4A=;nT'$'$$" "">>"%'("8A@EA>@IC2D);C%%[M99?UhNi\_D@EEJOEGGCisxwts_gzqulrt[h_KRFHG~yjjyvcpxikiniffcjZWONNRNZ[^^TEK9GUYMUaQJaRX8//')>TAZG=3<@9^4G($6@Eu_hG8U;UY:.XPxPmiVmqaRorf^^W~TO]XqeK}EPU>HZnF>_IBL\stuu|hqsceFS\Z^xPoM~`i|oviMp\LXhv`mbXy^`ya`oVbk_yb~lSEN|~DIEOEODISBKXOL\ThywilϔtEyUmFhaZowiU}d3GnyePQ}xRv|goaymelh^qrbWP`lffJWTHNOHWB[BAMMNmKdIN`cUM`lsTG;UGbXfgeF0X59+-+*#  :-=LQNUf[^QFB>(1%J4S$"3/AH75D)&:3I;J{jn|BQJ:$x9HY30;1?CG9BMOOPE"#"(&0:9>c-9>H<=@=483J;4'"1$* >$ (?-/.//5/()'#%! !!$.+6(0,&&."MA-'FfP7^FUL500EHeM@.1c1I0EV`b`KNUDQ7SIFA?@<88423201817D;eofL966c?XF?ENRKF?DgC:`C=lU9JAABCCB@CBCBABCGDEEFGFCBCDGGHHEGIIJPVlEQZP@26@IV5G`8>INSU\[]^b]bb\][+X[`]7:::988875fd2`\487899;897:<<8786gfe453:7gcfdee5557<987879<;;644fe_]\]^`e532446?@:87757:92^bd214ebab^XRY27>:4`aZ_4bb3\Y56[ZZYV[^[\]`_ZVQLHGTY]_\[^_ZUVY]_dd2467665d`]Y]dX^_\STSOSFEH??A@DFGSXSILBEV[VK=>[O&##%'&IHIKFCFD(936L99AHQca_af8786i557435;747/6.0;4310/.27:7`_]YVSSPMLHH?>>@?CAGBEGEDOMbJRHIMTTMSVRPNPVWYZXMMS^4cWTVRWSSPOOPPNTWXh_YYPXdcb[\ZQNCAMJQ4[TYTRUTNPNQRRORPKDGFJNNHIMNDEJPNVRUNJJNTTRWVPOLMHOKIGDDFGIJADGE?g:D>P4 +UQ2242ccdg5Qgedjk7:799:8gcde3554557:::88753f654edg5d565dfghjokehedgi86g6jjidgigab558769886ige*01///.024542339:94600121/4875542014730221147664/.120.,,.-,1.)--,--03421///.11/0321134331169 98756446776 35567557643566678898:99076687677889753586675 !! "#! #%%%#!Y #! !# !! ')&1(#    .+$!. (#', G.(#"   &+!#)#!9(>.$30.-+*&$'$&   + ):+2,&#4- <" ( +   *  +,061 L-0:KG<<># +  + +   + + % $  ! + +   +  + +  "'. 7251.)-)+9>,/9*,""!$#,8I83$(N54(  +  ) $2 476?,20 +&= ' +))$) 4 <2CG]$% +J(" 3)$' + 9"!'4(8_Cc?;Y@P_C1% .- 5<&. +#.).%306HGF!..316<7/+),~?* *d>UKfT,!Ed3 /!  +(* '#%.( >R_xl[!'!"  + *& Pqmz}{mZ`MZ +   +#/I[vrgVSDN[c^_JH&OC+(M3<(>3FYeaF^^g[J`(!#*)(!(.-/.>JGHHPONIO.UZ/,+12R21.*./0//3,V.MFZ351YX6@r`[P1Sc]>i7AMThCF@?I<;2?DFGTbSCDLFQ=528;0G;,-:A9E_R'$=/&C373+LRN.V4@=+9&&3S'? !'//,,.4330175>>@C@:15523/9<51XcTgh6.  ?[k^VNX\|fQkY+;9AAAHCDDhnzvn}{ix~ujpfotlhXbd\bcb\nivnhmkl}}ztszw|z|~Yd[Xap}~Xhsvmmqzxtww|oev|x||xstk\/*Iv|phf354\\iooonfYP,,-ae__0-10146941232/-$'$%*132,5??984442/,/,,*#"DF30+&CM_b\PGGT_ikutv<;898.5IVAB>@*)('')+.;  + + 2"+$-352$$'"+-/!32#%-+ 2'*<*8$   #6%'".,  "$# !%$ &` " &*&'&*'%'.#'')- !27+5..! #' $$ 3F@DBDD67@23-5M>+40#'!!!;>?EA@9:FWE7CNA@:<&N@FB-/*ORUTKO)4K&.*(5]B':$HHV7iRPR7B4X63,XE89E\\VlSEP=3U[@9]0=537GQ3<)17,P9BH&.$%B(4PV/.&$!)%+/%.:78HA>FDC;HCFe`R(4'3K2!--<+"9)#*///%(/&."8202341-,+((&$$' $+569* <'>7038:6736L-$9&%G;*>;3:8::;;;<;?;==>?=999;==>@<>=<=?CP.4<7.%(.19!)0!%()).1.21-.-+.0,41,+H22001302111/,,,-02,..-,(&*--)*-.*')**))++*,,-0,(%#"!),//.--.,+*,-./0.,-*-0+./-**(%*##$  !")+(#$!'(-)$-(%'(''&'("!##!&()-%'*+,+)*',+.-.,+,*''%&',.+,*'%# !!%,*)(''%%$#%')&&''%%%" %%")(++-0-&*/0- #$ ),)+-1.,69)# "'.++/47## !",---+))(('%%!$!## '%2#)"#$'(#(+(%$&)*,--&&'+.)((&)'('%%%&&(**5/,-&*0/-()(%$%"%'$'%$&'$&#$%%$(&#"!$'(##&&! "&%+()%#$&))(+*'&$$!&#$#"#F$$$%"""#-)$$#$!"#!'1" (+&..0110.231/..500/1/01346851410132222/241/0311݀Á~}~ ~}~~~}||}}~~~~}|}|{|~~~~~~}|{|{|{{|}~||{{|~}| }}~|~~}}~||{||{|{|{|||{||}|{|||{{|{|{||{|{|{|}}}||}|}|}~ }}|~~~~|~ ~~}~~}}~~~~}}~}|}}}~1}~~~}~~~~~~~~}|}}}|||}~}}}~}~~~~~}}}| +~~}~}}~~}}~~~}}|}~|{{|{~~|}~}|}}~}}|{{|}|{|{|}}}~}{|}|}~~|{{|{|}|}}|}~}||{|{|{|{|{|{{|{| {|{{{|||{{||{ |{{{|{{|||{|}|}}|||{|{|{{|||{|}~~}}}|{|{|{|{|||{|||{|||}|{{|}|}|}|}|}~~}~ ~~~}~}~~~~}~}~}~}~}~~~}}~~~~~}~~~~~~~~~~~~~~}~~~~}}~~}~~~~}}~~~~}|}}}|}}|~~}|||}|}||~}~~}}}~}~}~}}~}}}||}}}|{|{{{||}}|}}~}~} +||}}}~}|{}~}~}|~~~}||}|}|}||}}|}|{{{}|{z{|{{{|{|{{||{{{z{ zz{{{|~~}~}|||{|}|{|}}|}|}|{{{|{|{|}~~~~}~~~~}~~}~~~~~~}~~}~߀р  뀅ǻ묄™ٳɋ܂گׇ˘Ăၙ؆ܶ֘ҍ熀ȓ˷̋えݚσ㍘Ո񐅐ɖ₉ܟʹͣΥ񄣘މ߸āѫĐ؁͕䑦ǐڌїȻ뙎Ŏ몆׭і銅ĊՃˑ۸۬żԗ鄻،̋ࢦȕɯ˳ꆎť͓ȹ又Ծɀ˜ȱΆَ򱓺իꊈ䆈҆릐ЀĠ釁ջҼ۽Ў⑩é˽Ӿ癞Ļ炉ߪŁ駆Ĺր؉Ϯ充Ƶ뎃ĿϷÎö剒Ȁ۴ߓըނᖀ؍IJЯؿҗrЗ۱󓚍ѻ傴삆ΰΤӷç찹ᅋɽĶٱܽՍ̋ۂȧށ矐̏壓艁֢ǣלာшܔØ׻ˈۃ㧒փۀ˝Ӣ͉̤ءćƵ݆񖒊늡꺘検ɺԟǯٟݕžǫС҇ՔɏĀұěҶŴݚߏÃȁ໖񇊖ǖ̵蔅ˋ״˗ʓҭώ􊐏ַ߬߂²Ȣ􁋢ᄖӟƅѧ޴ȷŸֹٓ辌ܷ躭됧ܻێጛԥ酄΀¶öźϨ˰˿Ԍƾп׫ͩ퀎ż¤ٽºľžIJܖ5566gddcb^dcbaj:;hcbe`cbbeaaacje`fd^bc\`^\c`WY]^hkc[[VZZ[\VSVY`[WTQTW\]_]_\XVV^badb`acbcb_`^fljjcbjnpdcdgfccq:6m66jeffipohgeef59<=<988968FIHFDC><;=;ml797f7AID@<;;::;==<987ln:onp9:roqllljknmji:ojjbirsn:9n767:=?BHMJDCFFGFJIDC<:;?C>EHDCIPHE?@CDB?<<==>@C?AD@=?$AA>==>===<;;DEA>@@>@EDBHHEDCECA>A??@A@@BFGEB@BDGDDCADECBEJIDCDDFFC??BEFHJHBFFBEFFHGGHLFHIKLJJIFDDEGHMJKJIHGHEEGHFDEJIHFEFFEDGDHC<98=?>8\g8BT9?CA>=:=GN<>\SH13_#)$#<:32./=CG+3AV1L9C]-/3OC?RCvDj6IQ9063?S^X_fiaa][49AR&[X>J5<798)1"2>H)-$:BbWo\y3Jgr8>BIf24&XF;\]n89QD&%!*!'HUIZ)3!&B  .%#$,hm`TVveJ>B(+'+!/-+),%78P2#+E'&-=01#)'**$"'(+,,!$"%!54 88*!'%'(#")&"*)*.--+&+(-0//''#$)-*,-("&)/211(=$#0=8I,)MHHJE@7>:7@@@>//=A#%9:HN=. '-/F7"*8,# 0-J:+Je2yDAxpZjXf7i\XWtsZ`i|sHN['SRC?KS]=DDef{~^]*7I!)&/*H4.-J9:;14% +CJ1:a8LtpaZR<54<<2ERF%-A.CZ9EJMFDEQIscog~{X`|Mc~IAEB*$="#,:6PQ33\6=@3Z64(9?I=;*AJ;b3CMHC:21USY62l>BgLLWVH=NK?]T`WYPGdb_pwhlafA>Fy\tZSbf^jgcpzs|fowjIH?^PU?>J>EzdW[>dFxUX99N\EEGC?AXVKCKRLSSJUVOHFNJPNORPFGRKTDWezR}DaCCBI=89/N_zwx\gYOfcTR`YW0aVX\^mQdsojbgcu{}~|zZc[sch^u^[_efddclqfiqipkkrw~uqjluqooqioqx~{|wW`_cpu`\ky|pqt}{uuw{yyqrv~}yiPR|{rruttuvq{xwsuuqm9;96663352<:7=8,NLZUTSScr|?zwAA>&# F>,-16G?<9;YQbZUFDgGLWEEIM\[Ynlw_fc]Whfw~[gVof\FpEKEu`s`gakx~uzjb[TNSNIJHEFKMWcUUG:VDeMH@s7aY>6tG7]N:RSOLWkoq|{cW`ɠy}y~{}XbbXR[o_rdsMuV{Q>szuhx[WVxylZjqsarhQUdqZQPMPzfiTFPFCVsfkqrpXjxLKJnELyyMZM@Ce'32*',-  4:0E;B_U?+)B1`258Y<0*D-802OJH75_F7ZG(ApU>Yd3K)@Z>eo9\,54R8:<7VCY?<1 #"!0<9:,9379CL@96>D$"(! %!!! %%11=1+!,/410-+*-&$"*B*% & ,%!!!AYa`[=FW\D((?jU/;h@UGZOLHbKfNE/F:<<;0OH?:63037@HGWbi5a>V60^O7L?:D3KPUKcHSj5KllGR=ACBCCA?@@CDD@@CEEGIHHHGGCEFEEIFFHIIOYeBIJDVGLSWd=AX;FZ:@MY_]`a]ZYWVYU^dfm8:;985i6d`W^`33:=:<:6689;:==743edfb3fd885455ied45445;<:79779;:733gdf_]_b323cdd47:?<8:85559dbabdc34a^\^]YUW`K?814132133__VV43_YXVWZ\\\c_[VQOKGMRVZYYYXXUWYZ^_^b247774dbYX^XVUXPHJHQLG::@E?9;;>3A@6578:M=87/@;/X3?6332V-4./=5b_YUOJIJD48;9>DEQFC:@HFJMKN?EGSQ^aSTTVTT_^XY]`WQUV^bcT\YYRWTSQPQRQPLMUUSWNSP]YURUOVKIISY\VWXUVVQNQdXUWXSPMNKMMIFDIHEFLPMRQTUOLKKRSTQNPQMKJLJCCHKGAGCGFIKGACKVOGGKF?09!31'*)((%  + +  "$. +    87/*.*-*&2A--:(/PF=7J9@OZ{~x[xauY&!!"%5    !  +!(ErbX=-)! & +$-+A.62yhxnGNrGZo9)%&   + +,:<0=7VZZ[SJMKTVRKC # (654A.?4a2]7>73TF5TW-! %%*&"+)/..!8A4P+:C>92**HIL2,\6:YC>ID;0B=4NHPKME8UWWem[^RT419_?XoNDRYpFKECIUNGMMPLVPNKTRF=74?:2;&/C:>A=^5-%0+8'*2)0]VHAC1T=dGN,0AF;57-)+A@:2tq9;<96/$\88$56&,:#(**%C"= +  + + +*(%$3?&6!&)'0*+8:-06!,()8# + + .- '" "3,%)#"$#$#!%&$    %"&%,,-*(%$()($.!$3*>22' 3#-#!%%2--C79C2984.5'!($4*=61$0"%4=G@.>177Np[@Bid)CN0N)IH*2T.OW>2X>A)**'/8J.MU.(D"4)-676DUB;4;8M59=mV?-5:@44//$.)%D0$4'*(A+a\^7:?%!!%'/#4>#%+*9#&'((&$ *##) +  +  -* 4* +% " '%0'#a~G.AI$ @#8('(   +        + '  + !2615"2;=2*D.!!B(4*/'$"2U%0$"'#%%& :81.+(&&),65AFK!3+81%60,1"36;5J7@I#/AA2>48<==>;9;;<<>9:===>A??A?=;;<;;?>=BGL/002D?EFHO,.9$'2$)-2231//.,,,)/33672/)*)/01.10422103/-/0//-91..//-,,*,+(((+-,&%+())'**+-00.)&%# $&*,,+***,./.0/.)),)*(*'$#"'$"# " $ +"#"+-)&)*('*""" " %''!$)%%.*),,-+(+),,,'())-,,)(%&*.+**'$"$'&&(-'%&&%$#$%%&#!"($%&)++-/(1.)%!$%**12310,5>-%#%$''&++56,"! "&&+,,)&#$&#!!*! $!#&%'!!('-.'')*)',-+-/0+(*)+./&,+-&*'&&%&'&&%%+*),%($*&$#&$*$"#)(*'''&'(&$$/&%(*'&$%$&$$" ""!"$'%)''(%%$$)))'%'(&##$$!!%'$$ #"##!#+&"#$"#i!%! "!)1"+"100//12/2.2140//11/0//434330342241//0702/01223܀~}||~~~}}}|}}~~}|}|||}|||}~~}|{|{{|{|{{|~||{{}}|{|}|~~|}}|{||{||{|{||}|}|{|||{|{{|{{{|{||{|{|{|{|}|}|}}}~~}||~~}~ ~~~}}}~~~ ~~}}}~~~} ~}}|~ ~~~~~}||}}|}~~|}~}~}|}~~~~~~|}}~}|{{| {|~~|{{|}~||||~|{|{|{||{| }}||{|}}~}|{|}{|} ~~}~~~}|{| {|}}|}}||}~}}||}{|{|{|{|{|{|||{|{{{||{||{|{|{|}|}|{ |||{|{{||{|{|{{||}~}}}|{{|{|{||{{{|{{||{{|}|{z{{|{||{{|}|}|}||}~~~~}~}~~~~~}~}~}}}~~~}~}~}}~~~~}~~~}|}~~}}}~~ ~~}~~~~~}~}~~~~}}~~~~}}~~ +~~~}~~~~~}~~}}}|}~} ~}||}}|}|||}~}~}|}~}~~}~}||}|{|{{|||}}|}~}|||}}~}~}|}~~~}~~~}|}|}|}|||}|{z{|{||}}}|{{||{{{z{ zzz{{|~}~~}~}|||{{}|}|}}}|{|{}~}~~~~~} ~~~~}~}~}~}~~~ ~}~~}~܀ + Ǿ݂gфڀ󘐐̏꒚בԄ֖͆Ҿﻭȼ郚ԖـаґصͅӬƤ̊󂊉ƶßגė˞ǣ뺉ǖ׃낀»̲½ۊҜّչٯܹ菃Ɵ򧍛˺ۨ؜ֵՔ数ЂƘ䮄鏠淀쨺˗ݖ㱅ǜ܁ќꝓخӆ֎М씼ê״ꐫ힋ٮ׏뻲π̺썥ۄН܀熩҆ΐ𑒪Ɋ벐׾ǀȰ鄁лIJЧ飤᷒񂀤ۀij쁄ߘăΰ֏󷯹طٟ閅ûĶūħѼ͹ö슜琜ǀ􃁀֯ꊋ󋖑…мǒٶ˯ל熑ᓁ끂ڇި帙̿·ƵĹҵ©ȮϴڹƗ͒ҨǖﲒꊠֆƂ塥˿̗аʺ޶Ş׃ڃʔĮ۰ܢÕ螲Ƣ㏋͗Ĥی򲙏熈猰Ɛ֥ĮʯƴȗijĎ룳༇ЇѐʄМڛˆӓˁǢ󭈇۴ӰɧׂۻٱؾǸƖʲȲ—Ä쩪θ⍇ӛݓDzҷˌ酔òǷԷȍȥϣ҅ـϾѽļ˽Ժ䂚̯ŵ˷¾ɀǼΒ468865gfdbgid_alm8ibglleaekfdbbhlm7j^]acg^a^][Y\_\_]`aXRRW[TYY[YX[VTX`^[Y[\^]][_\_a]`baee]_;:jfgehkqpbcfgcbfn99mq7jjjlo;=mmlhfjlb:<>?@=<9CLEE@BA>::;;:977:8j8;>?:;999:?DB=;;99<;8:8p988::98lkilsrmiigep=9qq9npon99;@GJD=;:;;=?C@?>;:z88:;<@B?@CDB@@BCB@=<<<>=>A?AB@BCC>?><97kAC@A>?CCCFFGEFFDC>@B@@DECBJGHDCBEGDFIFA@FEDDGB:D99FFIGFEBGGEBBEHIHGHJKIHGGFGDCFECFDEECDEFHKIGEHEBB=i=AC7:9;A?;9++. !?-RILB86=82;1!;-H1V./]AH<%2PGFOhvJlYA*!2QWUgW[[^X`3:;5N)T=J532'<:?CGA;<"O>PqXigFt8?VRX-Y]9"KDX@S0DE?O#)'$)".MpWV>5%)'!#&%,fRj\gs`O%E&.)&&(  3"'581')+/A86$%'20+/( # -"3977>#%$$&')(& "%',+(&*(*'*/0.*0/*-*',.,%(++(*.///*"!%%79AG(FA:R,MCYC2.>80338 !!7*1'",1#$#&.-/IH2<"?C9]M:%@1F&fihRiX~iJUVYKRTkn[okt[cW>1H_QS44wniVk[DXmaTmA9:k.5;d.VSYZPfcdlpetpttR<+bLmvXKICWuJPZxedmkgqscMbi}xDb-:88=M4=DGVPWQ<#>D.+=J1-/K\:GD6$0=+'E:8f0t_NXTV5;G6.<+$/H.I9DMpzO1AJI6hWUurxlUGJG,SCG:(8,*;'&.'$$=IA6:6+*3(NX_30N]FEE?;:\EC+2C?$"&&,1.%""!""-/6374685<=1S;C07SR/]GY5?GED=47X[0,]9jhe[kOC4E\ad{w}DDGJBbdzq`gs{{|{ytfnmjnMYFIDMFs~kMYRdO<>R^<]IGJJJ3\XXV\PWWFHKHQ\5RKKRXdegbl~cZ]iH97ZBA:-#7"CKNzq[ZVk`WSVW]4_PYn_lbvqhydtyet{|{utfq^rnjfX[eilhklirqklnryn}rsx~|gisxs|xrdv|c_m[lpfTjw~vsw}}w}~}sjhuro}zqt}~yxvrotxvopqr;>;99542336<:;???CHKKKJFC79GTQNvx}<8:1&)($<>U965BaPKd7>;>??=c8Q9PLd8o>h^?eXH,,1B=?5@A3?BCE7D0+-.$0EF?"#15Q7C>Lq@(KGA@J&HEOF?G+,,B7"%A\B:?okeL?@BJHZZC>IJyIyvifMSLT\aaPMYONOVNykg^P[ba[fZpx{cdtiV\YYDFHNLLO[[eZOBTgQ_`V{ZB>S;]Z017.@?=!'#!=PN7K.A8d\rLL_D;KQ60F|^D4)B=WB!#2/*.7# !"8(LA.,&--(*)''&'+ "'),."gF|aK051B<<:S]`D,DCR7@0RQ8LL>OETTP\K@BTFCLF<886@XS[KZBLG9`LC@I4BC4F>AEEEDB@?>?@EGGDBDDCDIJKLKIGHFFGHFHLMMNS\\aXKGHGIMU=Pi;<==AGOYcgc[_6=EQZ^[VY___^c_`3<>:?7=99898:<:9994efcdigf55df2e5ce5343568:998;9898694c23e_[\3fac^a6;8><98556522`]`bab``]]Z^\WW\^`3/49322212d^f`Ya4ZZ]^`^`bfe_XUTOQTTUXZZYXYUSXX__`cef5563_`]\VWVQOGgASQIFD><30I8^_NA=`LQBC=UBh>dm9f=X^[]X2_[UTXWXXTOTVa3__XZ[YWURQQWVSPWXQXWWSVVUNGLNSHMSZROMMLJLMNPRQROPQPMJGQLKQTVYT\UYUOMHOHEMVVRVd6f\ailZIAHEHIKSV^ceadedgg575V0:;>7?>>83598K=955=2ZZ674653--861553cURNMFF=;9?tHHOKGHKGHKEJLE:5@MHZ_Z]^XTZS]_Z[^_cVT`4hhb[QSMYT_UTWYVUVQRTNRSPLRgaZYSRHJFEOSPZZYZUWVU\^\^YVROKLJGBDCG?59DIJMSW^WSMMQ:NRROOLJHGEFHFEGCBGEGMJBGUOJHE?9ALHA>CIK<8ddO&'$ #"$!-#!  +  -%-A +  >&//>K75+F) + +   + +   (## "&/3-+';#;0C2# .+$  #7/  +  !' ,&1%*J1'&#.33 +%"DI@-63H9"fT-%!9 ')'!% =>WC9(* 5J=2 +/. (^  K ## /h/B.RzuR9;>OjBKOezJL_TY\T|RU>NT?YW1cYC +! (#'(($+( + +$+&*#2& "->!N4)-+'   &=F179+& dXXxwzlA" '3,(  +   6AOV@#-CQTRJLMNXMB& &2HTU.-BRA@C>97R:2!%94%% %#&&+,055)E1:).ID'M?O08A<<4-.FC(%Q1ZXYL[C8*:QY\uvpcg23770mNMbYDDMXMELJA?LHJLAUPYL;/(3(4?9?IPA67HqD::)7,2-41MWO8C=iZDk87GO.F65663#CDDFOCKJ:<<;DJ+@7:DKZXXS^s[QWgH7+;! + :Nv]ZR|jYQND>#EDSj]latxot{zx{oxfunij_ahjonoslvwstw|uz{ps}ugrfdsg{r]q|tsz{|fsffu~}ps{tjjstqnljkptpgefb14311/-+)'+2158879;>?><81:<52.++,2688775531023.*(NNO//+%&3-+,\dkns:8:719R;$ "$ ')/++BFI!!  + +/!4+'4  -$$ /362#41&  !&$'$!,!'3" $'#%$#$))!  )@&/-+'/+(-)"&&"2!698' .1#%(<%HBE>=)+%'% $#'1()*1*A>9A1/-&/234<2DZOO:=IA3:55),.4/,-67?86.>O7A@;U9&':#9/"!'*+"*-,"*"!%'!2,!'6=945")*0"(.&3$' /4 J(/5&*/*>41)*2','"% !!*'/175HC5K\BCF/);2*.=/QQU+&-2$40& 14lw{NJG>,-660YA6A3$0W=41!&(01$ ;3'(8:A237 ! "+"!V673&1%"    ! +)"!$ *A34)  $ + +        * + + + +  +  7"C4(" .,+(:>>),*;%*1.%&!+&-,,3+')81+63,,,-1>'&AEDC,+!) $ );@@=:<<<=@ABCB?>><<>>>@BCA@DJEFDA?@><>A+7C$#&&)+15<>818"%).11,.222/2321-,22//22112201+1.,.0..++.,-./.,.,+(+*'(,,,/,1.)+)+,++*-0230+((#&(((+++*)*''++./0100,-+,'()&&$/ ('"! ! $ !1$&#-/'0(( ,"9$4-0$&&'$%$"#')()($((.,-)+,++)-,,*-.*-,+))(*&"%%)#'*-'%$%%$%$%%&&'%&'&%$")%%')*,*0,-+'&#'#!&*+&&,0*/9@5*#$"#$%)*023144265( ''0)'%$!"##(&#$&$$%!$&"&!+,)-.*),(-.,.//2+*/12/,&($+&,(')))*+')*&(*'$&/*%&$&!$!"%&#(('(&'&%(*)**(&&$$#!! #!#%&'+('$%')*'&%%$""$$$"%"!"!"%#"+&#" $!!$$23'!1000231011/./221//01110/11/014543 1132/010~~}}}|}}}~~}| } +~}~}|}||}~~}~}|{| {{|||~||{|{|}|}}|{|{|{{|}|}||{|||{{{|{|||{|{|{|{|{|{|{||{|}|}|}~~.}}~}}~~~~}~~||~}|||~}~}|~N~~~~~~~~||}||}||}~~}~}~~|}}||}||}~}||~~}|||~~~~~~}|||}}||{{|}~|} ~~~~~~|{|{|{|}}|{{{|}}}~}|{|} +~~~~~~}||{|{{|}}|}|}~}}|{||{{|{|{|{{|{{{|{{||{|{|{|{||{|{|{|{|}~~}~}||{ +|{|{{|{{|{|}|{z{{|{||{{|}|}|}~~ ~}~~ ~~~}~}~~~}~ ~~}~}~~~}}~~~~}~}}~~~~ ~~~}~~~~~}}~}}}~~~~}~~~}~}~}~}}|} |}}|}}|||}~}~}|||}}~}~}}||{{{|{|||}|}~ }}}|}}|}}~||}}~}~}~~}~}|}}|}}~~}}}||}}{z{{zz{|}|{|}}}|{||{||~|||{|}|}||}}}|}|}|||}| }~~~~}~~~~}~~}~}~~}~}~}~ ~}~~΀  ƹ䜠댌ڱփͧԸڀߠɻތئ㗘셂뷆㔒ʻ՘ՖʐЦ᲍ˆﯽރ͓ᆪ蘚ܿąֵѻΉה׼ߟő؁ꆎ傉˰适ݲ䙋ݮ޸عୢڢꁣϻӃૡ҂DŽėҷӧŬߑƀ˅؄Ŷ˴ΦšŸՀǢݑˀӱ؉ꝁ怓ťڬ܂ĸ̘Ҳρ렛»푎妈жЯ떣؉õұћɷۀӧů猊̹ݨŹօ肜ý鸢à쮋ʵਈĭ׏刁֤ɀٴΤ󒋂ϾƵȼѾɺԳ˹ڀ玭稏ľ˥ϻ􌣐諔ȧ߅ȫ˶٨ࢗ򄈈󞣋ŪϾ󈬎䀋زރҸ䵠ǫåijëҼǸ׷᭍أАǧ保Μڛ舤½ȍҤǘ켹Ȱת߱򈡌񅸶Іصݣʽؐ§طƅš틅ԺʺȕعႅǴˎңкҀǬލð˺ˆõըŲݸгրɇ񓜣ښՀɵ̳ʲꄔΎý¼҃㺹ƛÇрɿҀ̆Í܄ŽɾɫǺ¼ׄ􁂇ҔմąۀɾҧзŻѩϾǾǴʀƼöտ͸¼عɼԴ܂̽Ŀſ̲ށcehf58556igeedeefd8on8ihghdf5gbjrn8:kcfe`^\ab[\a][Z[][VTUPQZ]`_YWSSQTZZX[[Z]hedllfgca]_dd_`hlife_bklfbb`_beggnr88988768;9st;:kdd4m9ABCBDEFDCBCD?:8:;99889?<889nmm988:;98;<;><>?=:9hn:979:;=;qpmmilou:;B@<;;rnl:?@>>@B<9jikg8?FGAAB>==<:86:@@<<@BD>>?>@?<<;:<>@?BADDB?@A@<:9;8;?>@?DFEFIMJHFB??B=?ABEEEDHHB@AABCDED6DDBFHFDE@@AADLGIFHGJCABE:XBACCEEDEOIDA@GGEDHIIHHGGKHFEDCDDBCA@@@ADGJLHIIGGGBBmd==dmaJah4Q4;54:5=@ ,3QeK~JTCh*!"$./!-<"D?B6($$H-28.116+-1 5"" +-%J#. !#%#!+-,)*+++,,('+.('..**.2.((*,+-+%'*,&0/-))*!#'&"!.!%3:5:FI'H=05@97:-!+>&$"!!%%&)'+/0+-/9CHR-LL)-/4+6"@=?>=k^gZ~cs`z'h6Gpi}2aZiV[:?HIrG.+)5|V}q8L>3jwkwM[\tafhce^aJ{u hHVK1/orCv_maJd0]2;04AMu\R\WO_AlǑq]``rpgimm9E,kk@pf2W6SOPK?D"U3',gTjcJ + Zoq)H;9181H,FEQb9Q.:/B3H=D9H-5T33C01TF$%$=<(5mf2;DvS>F&*LE1GNHx_^`ZBZ2+,6XXLF>F(,=QZX7UUG-./BH=?A790KL0 :.&&6A9+7C8,'"(/+.2MPM^90@H7GNRO5WJ>M;"!!"+' ##(,/%.3>Z851N5Cc7C?4770eh3e3W=8M74:1>\XZpa^DpVRxJq{Jh@Ia`UgbdljqUW_gǁVkacS_?J^yDfSjTjewOvWN<^VYXNF]KJNOW/2m;4bWRZT\`eXXh[PZtgl]au<:_N:C(!6:(6Gxi]~a[Yb˶oDYbTNTMfflfbUW^h{ribzny}~rvvqrykx|ve`hiintkpxsnimrsuxyx~{uo|vxjWXsVfhc]zyv~~{{{}~~~yxs97ljmqxsosx>A?:775521-676:>?@BIIJMODEVTDh[W]gsu>;78965p9;6\/]`ZW399379233^srr=BBA@>L?Ar;IAdF;JKi?V`mNX7TQf3-6B/KFHE;=1$OM7OYT2FB/"$WC'8'UQ9_R+&&)**)#@9r=;43TE$9HXXNPjgmSVDN[oaRMThdKcutba|r߬Z]d*e[zY7,ALm[B.=ON]`S}ZA8\fPE71/4:]b^"(02=WAE27*.%:+19$4(lZO@=7%G=JNKH=:><675PjP<4H46T@AG=]J2?NLM02WMHQMA;GE;AgUQfBQK<2L1ATO3Q94Q:>I9OBOA>?GLCB?>>=>>@FKMHDDA@CGGHHJJGFHIIOSVVMLNKHKGFLQMMQ[;RcYWQB91YV,-15=977566_a]\[]_`db`\]_3\X^a]J[59521142ce34`Z\]]eV[a]e5``]YWYYAQ[\Z\^\[]ZUVV\[]abffd55_]]]WWWTNALGPHHGFE@;9@C@3F2-6,3_TZMHA;mgqGF=BZg]ZeX=?KY`ad0YSSQOLPLOOPEFN`h673_a]XTYWVVUWVVWUUUQ[ZVQONOOONQOQKKKHIPPNQRQ3MHUVQQONNNRXVWXRSZ\XQXPRLFLSZYg53ebihfZRGCABHLVW[Ya`cb`^a]48:7199>63646KB>57:21Z4/.3354.99>6a^_[UQLIIKL=GOOPHITaOG>;DF>AFJH.T[Vjhb]USWXUY_\\YR_e45j``URRORNNS^_SXYSTTTXWVTRZa\VSRLE5LFR10/^JSX[[02/\[YUPKJIC>714?GPNMKNO[`]WQQNMQPOMMMKHICCB@ABGE?EDLIILLIILJD<5@JQCBEMRF9b[WW09355653e34h3hcag4df4efegeb3gg6767678775553e2ed44gg355455444654575j796985iefhn7597565ffhgfhkkf1232531223232752244232158563674324622410///-,+-().032.,+*)*..,./.-32179442100310256544127753211355489897337 !  753349778677;! ;87 ! 7596"$  ! !#"  "#  !$ " !&%!  !!/,'52%11%(1"+0*#!"  +'913( +'!B&*./ ! %)+!W08=2'"2%-&$!.!*!".)  !"'+x Y  %F/%IN-0$F:  +   + #"!       ,!%$!#(!'224*%.)'#&#& +   +   -:")"#! N*F'()&*%6%hw>RB$( fG?B/0 #/;!$%,"70 @6`]) 6@   A:#  6A($%)T(0 -@\#q_*I-G@EB866" DZcLnEI`.A"oL#!" &#)2#%-*)%1&  +776)/'  8",@;$4:sf_`O->(&#! 05=(CO4%)( /"#3!-4/ ,:/$ + + "CEK].&5>5HTUN3O<4B/! !&0K2,(=*7T0:6-./*YZ.U,L5/@/,2&2OIK`QP;cOEpF|kq>mhL/6GEAUQMlIxo>PNOLIEC5I@BMOTMLLA/+1:'.#$I*LM3wa4>5;&@*0DS/[M:QA]dkGfKB/B?BG@.>259>L(+a4/RKEKFKSQPQcQCLd\dT]w|4*9( + !A~od_\Y`qBRS?7DFfktncTXboİ̀xy~~rxzy|nv~{mfhnlpwks|xvqu{|}~{v}vh__|^vwmf~x}|}~|vwwxomi30_`fntkgij5651010/)%!,/069::8<::;=6>PP@fWQT]jmu9623310j462T,WWOJ*//)-.)+,Woqn6;:872-+0/&! '4'-6%<#+")=E$! 9 + +4!(!% , ! +- ( : ( 0 #)6 )/=*+++8!"#+*''+  !# +0+ $%! "*#/42$*,*.%%&! #1(B@2;5B8-QN>.F=. ":'$6'%(!396>3(--/+';B89@5>55434558.5+)(3:4C<2>8($:87%'F9F%/#0"1!0/:1 /3! %%'7 '&&,:)(:@"&"-64!,3.0$'AA+ +(H0H;+@0505>+@=)&-&,-$.&"0,(;(3)*.,&.G0(-0/+)[(,6,47*,+164')7DJLV1<69ZMP0IM5^TLP;.(;P0JHKuofEMA+BUV,/@.#1!=HACJM"5.#+1]a~HRPR8.)32BV459)'*G3)'/!".05"!28"==3G/ /,!!!$A}L5_D) ! -% ++(2'@K?(o3S$&) +.4C# !a0)2#*&36,JEG/6>(# /0,  ,  <&" ! & + +    +$  }  + + + 3#&"$*0-''$9M:.'6$%=112*;.%3/22-*/.)&14.2OA;B*0)$#4#+)3()U=;E:8696539*93?:::@=:<:9:<;=@B@=?D+;E:94/($IF#$%%)8&0798.&'')%,2430"$1342-04/03^+++----/./-,,+,-/,-++,)&+.+*.//))+*/&(-+30/.+*)) )--++,+)*^),-/00111+,,-(()(' $$'""!  ""%(1',&" 51:"" +2/-/&%**)$!! " %$&&'!!$/2-//,),--,+*(,,*'&%&%&&(%'$$# #'&%%&&%!**'&'&&&),*+-++02/+/,*$"%(,+0.-15940&#!!$$(),*./111431./+%-,--)&#`""#$$''("#(1&#!"#%%),)540.)(++*+.---'-/4./*('%&#$&,.)++'**+-++)%(+''&(%"% $($''()~&#$"! "&$$$%%+0.+')'%))('&$$#$""!!" "!%!"$$##$""$ $'"0--,01/-.0120101/-22../0/110126113334541ˀ }}}|||}|}~}}}||~ ~}|}}~~}~~}|||{|{{||{{||}|{{||{{||{{|}|}|}~~|{|{|||{{|}|}|||{|||}||{{{|{|{|{|{||{|{|{|{|{{|%}|||}}~~~~~}~~~~|||}~}~}~}~~~~~}|||}~}~~}~~ ~~~~~~~}||~~}}~~}}|||}}|}~}}}|}~~~~~|~~|||{|~~~~~~||~|~}}||{| ~}}}|{||{|{{||}||}||{{{|}}}}}||}||}|}~}|{||{|}| }|||}}||}~}}|{|{|{|{{|{|{|{|{{{|{{{|{|{{|}}|}|||{|{|{|{|{|{|||{||{||{|}~~}}~}|{|{ ||{||{|{{|{z{{ |{|||{{|||{|}|}|}|}}}|}|}|} ~~~}~~~}~~ +~~~}}}~~}}}~} ~~}~~~}}}~~~}~~}~}|}}~~~~~~~}}}~~~}~}~}~}~}~}~}|}|||}}|}~}}}|}~}|}~~~}|{|{{|}}|~}|}||}~~||}}|~}~~~}|}~|}~}| +}}~~~}}~~}|{|}|}~~|}|{|{|{{|~}|{|}|}|}|}|}~} +~~~~~~~}}~~}~}~~~~~}~}~}~~}ɀǀ ̻㈓߂˝ܚȈ䙤ݳ۲Օ񼩷⃙ɷʷŞڦ는턇㇐ǟÇΓ㬚̲Ѩ⏻ǻ̙ь鋍僁Ņʲ㧺䧈ՀܪãՏމۥН֍釙ԝƅфƙȎЫ쫤իտ󊲿ҫɿުޙźώм֤؝፱良فӶޮҐ𓧗ƺͼʐ󣜧ϜȾȾ뇓¹톈ۅǞپݭ倄߀Ÿڐ侩󁦵Ҹʿֹ܈̡ϳȿёɿ¯ǿѳۃ˽Ȁ򊡜Ͻ䂀ΨĦρ˃ҦƐӴ聪ΑץּђԼ׍Ο掇ύŷڸů׸Ϸ޹ӻڍĀ쿁ƄޛюɱɭХϽҚֲʝʹؿ퉘˧ђҶԀơ܆ݵØĭƣݥМي؀ړﻶƿӺ±菚ٕƷâۉܛڀľܣڬ䀈Ԭيۺ񂧤ʹڀ߳Щ؀üݼ왝Ĺڰƣ•􀀅态ƵѶ̀Ǿǻʹ댖ô怕øǹ󂄎ƽ񡬶Ļ¼п˵Ƕ5i76h68gg5hlkdhl7igk7679kfgfcfikhdce78mfdbb`gdb^`]ZZZVW7TSSV\^ZUTUVWX^[\\_bjmja_ckabfb`ecgi_efeaafjdcceaaelklnl:9:99:;nmnjhjlo;<@BDFGFA=<>=;:A?;<=;888:;=<:89=:o:>>?><===:<;;;<;<<@B>==;:999:8q;;::<=;;9;>>?A>99kophffk8???>=;<>?ABBB@??<>@A>;8@=>=??FDE?<>B?;;;:;=@AA?@FDBEIEFFGDA=;8>?BBCEFE@BB>>=DEEFIFHGEIIDACAB=o?HKHGIE@=EEA;>;DFE>GHJCBEDBABDDEEGGGFGHFEEFABCDGC>?>?AACDIHFILGEOC>8FES)71LT_6(&,*&=:<4/712A[SmjxMABUJIn.t87]E>{|53;B4:6313:LR1CEAkY^;E6PE6R`HzbyGZ`59*-.1@4'-B0+AK_YSacnR:eFFUN:WD5).,?d5!++&&#! >[C?8hnqFKLyB?20[2#!&%(%"--5La7aasC;Z1-53AGD8/1/1/0T<`2`ejReXyKMtysjoIF}KFQqrssuzuopfx}ghSMbGa]g|pqdV^Sy[HXHH>ei5^bdVGEL03]d`QX7<>?v=qnrlTTJVqkfs?=/UF2%&2:#0LT}g_w~eaa[TLZkc_jgtphwOKf}_`ectip|yuqx{q~{|{rlgnmosypuv{usunmoihf`mpmdxWgc]ffh\[p|z~q|~zuw{wxur8d\iouyuvv}AC@<:88742*,4nrx}@@BEA>444]py>@@?>>=@@A1=8csu3>7Z]e5@V;(=1EGHC\2PT,QH?=G5ARHNE'ZCI*<@/3'/QPjM/'7% <$%%!7537;>F'%DAA&***(%)BK=R3OR9E#$#9UF:=@U;aH/@PL,MM&AULc@hpSj[`ammZf|ilU[PS\MPTSTPNPUNPLX]ZQNLMTK?:72Sbh~uJR?14MX@pMZ?_CXa`QLqL\VL^\adsdSY^^[dS\hVa`Hz`K{yDCl7dfI^WYJKqv|nWWNFawUo\pfV\hVlŖichr\nlwjyfsj|_etyQK||J~uWds>=e:rGW%4NUa1Cm`lix^d^|pu{x[~`]vyh\8N|]YROJn]sqYsymSjc]pof64A5_Ql7a_YYPN?JK{Hn^[UZpqf@v~NP7KZ;&:JLCOE\SY\BC/lREXPTJ=5SLX1IBUK:6da_aR6(<;?_917; "A560/=//HBF^@;=@DBOBKIR0=8*-838!3$JF;9EIK:  %$#!! "!#$"#$#>@&!#$" ! 65330"-39$JY>\^F.==:>COABO[eeQLHC@=<>FSZf[D==>?@AJXkeehSEADFBCEEFCFIIFGNNOMIKIKQXRP\^Y\eqABBAE?l`[XUW\^ec2560TMRTXMQANOTST^ca``cb76:=:>=<<;9844666564d``^efbgfed466567798989977333e32aa_`ceb35389=:7638754_\Y_``]_`a`c]12232\O\34213212132de_^^]\Z]^\\gma[Y\[.D'?7LHJKFFDA@<5OJNA>?8HLNECA?>;;>>AGD@NWSKKAGKS]a`YRS]ORNQOPZVKTPPMYd^a7a^ZZZUTUXRYZb`[VYWUSPOOQOMQNLHJKKLOQRQQNHH\PHRYTTQRTSUTVUY_ZX_ab]WTUZ^]_`efcad`[MIHJM]cab_g_]a]__]TY\7888699;94339F>>:94370^S/6653578<8aZYYYVMNONMBEJLUNM`fWSA9ADC?L@5CUYVYceb_\ZSO\^\ZVZ[ga`Z585f`[VTTSMSMN[PRRMRaXVSRTPNIJDD;?MMCE@=DYLJRGHHE@?B??NJNMJNKB9H_h.k58746432333444efbb2fcf5eadg@hjjhm987jh4575444fecef344434887566765665776665j776ihi56kjggfd6:lp32/11230462235343124631119533317542420..,,+,-+*+,/2/++,,,-0./0112550004126425346/3441147223532486677M778545769 !  #7 !"7:;7446 j "! " ! !!!! "!! !!2"#!  " ! " % &+/)*#"&+"5 )+(!#  +=J4(,>$ #! %) # "I7.MWF54;%#)"#-%1&,.!  + + + 269/d  "$K%%$0@H64'**   +  !' + +   +      ! 7%++*,*!!  +    %* "!" B!%#+(",'%ZFs D03%83J30!0 ,&)$"*#! &!@%F?@1(-$)  :--4)% ,'  "1#-+)- WfEQPQiC2A&9*]%N%OI@2"ilaQ^a+;0D 13 4F %5 * ? +JA 4$)".84$:J=u\d7=3  5XHF[fjH#A?8@3$   +!V&   +5WB@6ahpFJMyB=1*I&  !$,@S0UUe;4H'#)+6?F:7:DKKFCB:,+9)"-.:SIEO_^Y?<0->-@AFXcY]RFRLnVx=M=9-IN)KED=23;+,NTSEK0678k6dafaKL@Ifvd`q;((  FUm\ؗaXQHC@Tmgetovpfp|}OLiigtsq{vsw{z{|rlimpouvq}~}|xovqqphyzujWlhgzztcaxv{}unmolnlg2VO\gqtsqpq99422232/(".chpv;8670-*3>INMk[UZrrha012dcd4ehlbWWWSNFN.%)3+,-Vot:;:52+%$$&##@@> !$&6(22,.="#1 +  + + ! $,*)+% **301!$+&.01(!&"2#-+( ""*$*"$!'%5$  &" #&#'4#  )&+- %1)'&$/*:"8;)"*0(""=B$<#<$5-"7-12L:K>.5D8=.3.3=01332.-.3/0.;@9/-,-60,+*#9=QZZU73/"8>%8/6.&*-?$D6>./.()7@9EM%/B#*-43(]OxDJ*.*0G23V=/0=,$A$/0 ("%)2&%%&%?'$"!" &',2"&!!"+;(6i.&(&-#B! '&:,!0*D8D_1OC#&'(!2179& 80(+&* &"+*,-  8  +  , .!  ! +  # +   )1     +/"35*-,--,-<(@1023/101/12///15*.47;'996."?:;95:"1,=+*%,/$+=55:CJLA?;66777=CFPG;6896>>846::;;?HVPQUG<:;?BBA@DEGFAB>>CJDCLJEGKT01/-0-TKFGFEHJMO(&)$C=A?A1-#++,*+111 001020.,2304200.1/.--..+-,*.--+,,,--))"*.0.,*+)(++*,590-,,+0.,+++,'-+,*,//110-++,*,,)'$&"#$ ! ),( !(&&! !  #"%+(#"#&')&##( #"&%&,*$)&%$*0,.1/,,-+++-),+00.+-**('&&'&%'%$"$$$%&'(&&&#"/(!&,()('((*+-,17307881-**+,*,-3412774)&%'&-,+,*1.02/210)++)&-)*++(%%&$%!#$*&&02*)b! ( !*++,231/.,(&.,+,*+)2//*2/+*(''#&$$+%))&(1++(&'%$#$!-)($+(!'-)%'*)(&%#")"$&&%)&%'g(('('%'$$$#"$!"!"&&!# -$"(!"" $!$"!$$ !182/1000.0.,/1356564222../44333433213 ˀƁ +~}}||}|}|}}~}||~ }|}~~|~~~|{|{| {|~|{{|{{|{| {|~~~~}}~~}{|{|{||{{|}|}|{|{|{|{||{|{|{ +||}}|||}~~~~ +~~}|~}~}~~}|||~~}~|~}~~~ }~}~~~~~~}~}||~~~|}|{{|}}}~~~~}~~~~~|}|{|||}~}~}}~~~~}~}~~}|||{|}~}}|{||}|||{|{{{}}|~~~}~}||{||{|}|}}|}|}~}|{{{z{|{{{|||{|{{{zz{|{{{||{|{|{|{|{||{{|{|{||{|{{|{|{|{|{|}~}~}||{|{|{z{|{||{|}|}|}|}}|}}}|||}|}|} ~~}}~~}~ ~~~~~~~~~~~}~}~~}}}~~~~~~~}}}~}}~~~~~~~}~}~~~~~~}~}~}}~~~}}~~~~}~}|}}~~~}|}|}|}~} +||}|||}}}~}|}}~~~}}}|||}|{{{|{|}~}|}}||}~~}~~~~ +}}}~}}}~}|}~}|}||}|}}}~}}}~}|||{}~}}}~~} +|||}|||}}}|{ ||~~~}~}}|{|}|}}|}|}|}|}}~}~}~} ~~~~~}~}~}~~倖  惋쇅݆僈䖡ꃔ¯ˌԸ鶏⒄Ƽϊ‴힛⾩γԲ֢֘܁ߠ媑ޟԗ͒ľ傍Ƿ⿣዆‰ٛíɰò؀㟣ظǘɹʕĘƤ񑨦ӊۅǭۅ܋ʎԗ䗆ַ£ꌔښۺʮ򭭣ޙԘҕʏߙ琟ů照Ÿ񎨽䏰ăネꁀ¡ȿǎ󍙳݂󈓉󀎀ڽ¬Ń°뗏󉒄€ˌÏ犖ŮȹبĿʉ͹ϣҰ㬳ʱü㻸罦٧刋Ҵҹˤǫܶ݀Ҹ܆ź느偑ӾԾ럅䐳ҽ֬Ǿ͌ŘǸѸ߬緉€ҚՇ܇ȃէ҅솃ʗͤ߀ƪկۈمʱ²ԬļпҶŽ̺ѿ׳ђߑ˚֢ȳ勰הֽÀ䕴Ո끀قٕꖀ簻ƫʝDZĤⷫƨ͏ľחɏĹꝆ何ϥ߀ݻ蒍ĥրߺ颴Ϧ알頛Ҭކ遉̯׃ʉ×򤎕퀃Ԁ́㔅폮탖̓븐Ϲȷ܈ʧ榔쥶ڹӯ̒縷۶匒􆟣퍓Íӵ嗹 Ȅ۫񷨹༪ϻꇑŽYͳȄǀýɾϹʬμ慑½̀ͲʸȾ}ɾñ876ec9hfk696felfd6q89lmonjedddfigilllea`]]]da_`rc_\XZY]ba\YXWZX[\adb\Z__[Z`aZ^^]c:?gb_[^^e<;`_aeacigedfgdfdinlm777:AD@CBB=::7kmmopikkllm88:=?@<=>>?==:9@@?>>:88:=?;9=@=<:q9n7:==>AD?CB<<<;><6m9;@DCB@<;87;88>@opoAh^<:>?DLAC?AB@>>;;==?BC>>EBAB>:<;<<;@@>>><;nm=i=<>@BCA@>@??@BAABBCCA?@A@CHFECBA?A?>@CHMHCEBBIC;:BC=Yc>C9B8CA<:g_@BGFCEFGBB@ADCHIKJGFEDHHFGHHHIHGGDEFDCA=A?ABBGFCCGLLF7A"&"3(-AA=<9;204 ,CKMP0A5:BW~pgD]gN+''  +'*4Y^5517805<(-.>.6652.?y[bSJDLe@PbSUOaBP?7L4)- 9=*,+. ./!LZ>N?qVy/%)GMcKT7VlUctKv`d',;[TC% %(.4%4-.16'-E&%F6@AB'%1,048"% ),/0.%$+02/,*(+)+*+&&**( :))*./-,#$"%9/;#)*'#&=/4C-46 %C9?6-+0,$#$%'&#&&$($!')()((()((%%*+)Za[_`GH4C&,,0;2:gkLV_J`XaRxn]qprUgKPd1_:SHfo{Zd@nJ)1rk0)ZIl?olfqbA`jQr^]iukor=W<8>jE?IHY`{a_6Cacgo?onzTv^{`ok}xS%5*6sAGs>2WrAbJNU:1}*,*K:;1HI7pY3C1!';?D=H3R.HD6?JU-7&%DBE8Q>:<7V)45%0?54?B8BN:G37D63+[JP0*;6ZXNV^tJZM3d5)PJH #(  *F5cglDNH7:5>_(4*JR5+8+""!.FEKBLZfN?5E/)#K1\3+QW/NI]G=_AF@FJAdNUje^xwJWhuy|醘y}onjX^wzlrysceb]e]`[CQKmo;<7=paQTWd_Z__65_mz?C=D>zyqpsyoT^]1ZNJB'."7:,u\u{WluhgR[vkoY~P{vivwcVYgelhvhuw}p{yxcy~lztstWgwqldmhlst{cmtos}~zqyz]eolga`dwyu~p~~}}|vnnnlnxumfiv|~{tv|DEC=977552,'^hm{}AA@G@=>=>?89R=H7H^CSZWGqhO9@Hj?36P]@oEIeKFKLb2YU<#E3CE^bMH7[VX9?:$ACd/28-LZC1"$9?;;;:#!5:97<:=<;=< %(?,VWee>&9!=B5"-1h]:a87QJ6HTUFJUR-:HU`8vWQ[MMQIEI?9minimFvga`aitXNM]`NIJ;C?@ij_sprrYX`XUVOaQ\WLDSLWKLJIHEEOXHFXYQWK8cJNvbQn;9)2P?A.@@;*D#54OJTNV\qYRmWxHfCIIxlAV0VnHv{MydzcfkvDRNLkEJ|K\uRB^cc;.jN_CJ}inl`SbiY\qqsQY`|hjKrli`uq}{]warzaaiyzqloqkmjhtNxw@0O7a8K1*J/C1N}ubdWe_j_bnkikmrhi\cosrY]t^ThGvVvCCVOdAGs]VjuAB'652@C,/,.5.-YN5!#-4@EE=;670+:+*.  +sX~H=4>9@9P=I7/;I"1$+#+*),!18CG:7##"!! !!! ##"%@=5"$'&%#18"$$ !" 8+'`EeE*5?><:3C6aBB?>=>>>=?DBHFKF@=>DMXSWOSFGSJZ<`=X:S>9BZ4[ICK^haME@>FE?<>EEB?BB>=>>;;=;><@AMis_PKI@BBEEGHDFGGGHDDDEFCDGPPW\\ZRONLQYTSQ_op_Z[`__`ca[UURPPSTY9S?ID;@?<:8664765364f]`ec4gd`a`f455666776::875542ceb3e4:767886;:8542114322_]^^^\]`[ZX`_002aYOX51_`b21bd224`^`_Z_[[__``igb]\`]\YZd\_^`_]^^^[_d_`^_fefa^]\[YWWVSQLFEg>QFJLHHEC@;69QOGC_BWIGE>AHNHFABEGB@>1?G?DLR^^@FOS]ZXTUNQSOPUUSQPUUS\VX\^`\[[[XUZ[V]UWUTRMMNONMKOJGEFKLQSSPMOOJN;EN^][YUVQQSYX]_\_gU^XTVR?YWYchcflhb`UOJE@\bcZ_c\]]^[]YS[^`959<6:;:834>A>=716577\V278;6466721ZUXXUTMRNOMJPR\^[WR][KIHLDB>5CADNSSZ[Y\YWSQU_039_ONKGB?:HLLLJKLNOQRTQPPMKJKFJJHKLHMEAJD=GG<<;?DLKIRKFHA52/,/-/22../.--//243/.011/32+-,-/5331204 202423754345343696446789787755!: #! 9<97 4 !999#61 & +!^773!$"" !  "$" !,0 0+!h"#/))//-'%. + #'! + $8:L2,5#   KE33H-'$(-+/&*&& [ +   ++:K--$9% +#%C34+2:)C6990 + +   +  (  # + + +  +   -)"(   2<9>@24 *  &!6$''*,16.B0*$1 %!#'>. J !VW1 5*SE,'<( +  "(8#!2' *036% %# !=<#5? 72%-&  +'I:Y8^P;8+O|$4K}d%W)3-*7 +lS4!A? + &/(!#)$!% %  +  )' )LN{CEBJ*2("  Ad_qVakkS0eXPTRb,6  + + 90]acCLD8:49P%/!:?(!(  #;<>7CR\D3*6"=+J*"@G(BC:\EKa\Wpyw_m:jy?T@WjMMdJU\hnrdFDE@BFJNE>>7D7(8,*O594.26@/*&13)**KJ %#&:9/?HA>B0.2,/2,9/:7-&2*5**++*(*19-*58292'G76G86A'#) #)',*8?2-&0'5&1#$#.''")511.0,.("'-2%/D#A99#-41*7.8>+/%62.$)*)1"*' !:8+!.('$*.#)ADCd]^PN*7:&&M:D5 $@RFMWOJ:?KNK>;95;;955;957;;9899646787;;599<=AB>@?@@A>?B?<=;<>DBFKLKE@@>BGCEDIOTMNMPMLNONJGHFCA@@B):)-*&%*.05442"'/-3//0/21///310.1++,,,++-,+)-+-)!*+,,--,+-,(-+*++,-442--/.-,.0-../.*+*,*-/,---2/1/.,++*))*('%"#4!'$%""! '%"!2 +##!!'*&"!!#$!  !(%"%)'(&(&)'$%'(*('(('+()-,../..-+++&.*+*)'&&&'&&%(%$#"%$''(&%&'$& $+,*)')()+.,1766=/30,,),+,2658>:87.*'$!-++'+/-0.10/-*-,*(''&()(($&#%&$'(.11,'//$#"$!! &(")*59302-*'-/,)))+,(#+.*))#'&&'''$&)$#.*))k&('$!!" &'&,-*+))(%%+,%&%# $&&&$$$&&(()(''%$%%"$$"##"%"&"##%$"($!"!% %$&$""$/12+!Q///././/-..-113.10.//5300653134 ~}|}}|}~}|}}~}}}|}~~|}}~|||{||{{||}}}||}~}|{{{|{||{{|}~~~}}~~~}~|{{|{||{{{|}|||} +|||{{{|{|{|{|{|{|{|{|}~~~~~~~}}~~~~~}}}}||~|~||~}~}}~}~~~ |}{|}~}||~~~~|{|~~~~~}||~}|~~~}~~~}|{}|}|}|#}~~~}}~}~}}}~}|~~|||{{{|||}}}|}}||{| {||{|{||}}|}~}~|{|||{{{|}}}~}}|||}}}|||}}|}|}~}}}|{{zz{|{{{|{|||{|{ |{||{{|{{{||{|{|{{|{|{|{||{||{|{|{||{{{|{}|{|{|{|{|{zz{z{{|{|{{|}|}|}|}|}|}|}~~~~~ +~~~~}~}~~ }~~~}~}|}}~~~~~~}}~~~~~~~~}~}~}}}~~}~} +~}~}}}~}|}~}}}|}|}|}~|}|}|}|}~~}~}}|}~~|{{{|{|}~}| }}||}}~}|~~~~~}~}~}|}~}|}|}|}}|}|}|}|}|{}~}~}||{{{zz{|}|}|} +|}}|}~}~}~~~}~ ŀ~  ̿ȵ􆑎NJ愖ʟлȦѰͦո⹃ޑϯѮ񑢗ıܮାɎƊ͊ـߔ聃遲ͲӀڃ돇쇍̊թęը㸧Ӷ􋓨̄݇ܧՠԂ񅅳ُ榏̴ɐА궫܁휝仝Ķ;Ǡ薷ʢ؏ƞ༾ﳱוձƐ怋ƀ̹׬܎ˆ̳걏ԙӔ燀ꗟżŻاǶцٴᚗ񅃁ڪݸЧىԴ̀盚˶ǥǯބꉇƥŀĺĻȩͿþ푓ĸշNоׇ񅒤֭ȋߚ¤ȿ׊ųĿƒ̆땬σ큎Э疑게큇䊜˦؏҃Ƴޮ߶ĝʧ;Āꀁתɳșł֭ΣսτԔ猇׷އᅶ涕ҹʼn纔֖ͩ߭ؕȁ繷ޜ½Њء伃鈥ʌ牙ݵ؈̀م̝ϽՌաڢ̷񗻨٫ܢȮ̅ߊ䐃܈Ťİ膏軚Ǜ̾͏ރNj鏥ŅȢچʏđťïұ򀊎ʋ‡Ċǽʵ܀Ǿսʾ֗˷۴ƮǽՀ˶쇚¶ƾý򁃒ù݀´ĿĻºζ㘕.i66jfgcag78:96febejhfgmlhi5455gehilmf]\[\acg_\`]]Z\Y]^^be_]]\]bb```\\\[^[^b_dgikli]V\]UYl7pe_`cgbbggidedfhhhijk88667??CCDB><987nn8lgl87mkjhgl79:;=?B?;=@><;4<:87:87798:;;;<:<=>?>;khml;>BEACB=<B@@=:78977oqmlr>??e>?DF?@@>@CB@A=;==<;==?@>>?BCC?:hku@A@?@CFB==>AA??@CCDEGHEGJGFFDBACF>=>@BA?BFGLG>bCC>:GDF@JTCBA?f`b968;:>;87Z39;KFp8N0>>8!.&>=;7;:<"DC6NW+TU[VvlWmS8PA>2R5"('1oC6%D%?Y[SslIkeUWb\EHNC_B_U&( 9Kd$29 &'$( '-6?>XL/IVeMr,(! sYL$D^Tr,QODT`FI+n7&(/*,+$$#"62%%6!D5'1(>&Q:R/!(*58 //+$ )+'$(%*,,,0***-*(* "$!;AE($$'/,,+$ $&%"4/# !>4><5 #9A:366102!'# $)'$*,+-)'*+&!"',%+/+21584/1//$/>0-34aihzluKaYNpdfuNpjh`AP_D>_:IZLn[ +)'%_(+C8a\XhO9ic}aZwJMGFg9~qsJ2s+'!-Q998pWAP@E.BDcX;)))(-CME]:M---5PM-1670.&&;)F74O86=&/N7>9LA@AECP;>AA7.15DbFFoKFFWuDIQQQ;OL.2MR=>%8Q3913vmLTFEEXT_XQU_MMV=W5>$)OCA:),   0>.7D6Y<8954TE7<10FQ8&!%#F\`45ZRC24DKI(+4.1-a8A:2ZeSV\gdd7lxvll=A?HAtqpyxkX8FCD=,%;$0=;Eq{j~RQjivy{vn=d\^kdVRyl|PO^Z[[tdcwspus|}yv~sdcbygjj`[dzx{xvu|||}v}|y}v}hivxz__ijikfhmtyYr{~{yz~ssmgkstqfiwzyxuzDA>:76542-*Sbgq{~??>9.09AGGFIJHFEA;<;;4457U= :576euzA<=;69:JML2AleMC2740BgS3Pen<>JL9ELO]7DRUQCZQS;M>?\;9CQY[JM/<*>D;"DN=2(F%!K.P:n8<:>-8@K?N]Wf66^BYnT;iwuykmvCq}lwq[gLSXSRIP~@Gd9a^ibMNQUSN`^TE>JBSQMqfBGmeREKV[XKNO/1:IabFX[ZO7/)%:8\-3;A9D,=>"&:*o<9KyxrY[Eu3T?[adKtGEQHnt^Vkh^xwuXVRMQU{[LatWD[NB8`Ns[Zwxq{izw{[cYBL~TfUa}~yLL^ikvsonaYYuksenon\gxdk\{u?N,0d5?Y/IB4=LuVh`plsnSaq_h]`r`bwXa^lc\s~}ѲV=fpvvUIyZiWtTde^_tWz?`Db^U}R_IOFhoH@IX^MdVVpAf_ZNRSxj`^rff{GVTfmM;SdB*fs75&+12(%'&"!" $&$'&%$ ##!"#%B8+#$### /2B)&#%$###"""#-PKB^B1:<>;42_Ab>:>>>B@>??C@ECCB@?@><;;>C;9>J[8[CKRNIKafp:UH.OMB>AGHOF?>A@@>>=>@C@AC?=>><=?@B@EMD=?DOW\WJEKJJKFDBCCAEEGEFKKNNOMJKKJHHKMHDMORNQWX]^]YUUSTTUZ\a5;<5003457:87;H4M5N8=<@>;9886435655gbbcgded4gbff5434655458;9656554357789;;9853765453112200`\_\Z\]YYTVUUZ0`\TP]31_^``1_3ddcc\^[^_^V_cec^eb]Z_b__\[fba`^]]Z]]ae_`a``a`a^__YYYVTSSSMG@39NGGDIMJEFHGHIFHG2FRSVZPHJIJFBBIJCBABGBFMUGW\_j]USRSRN/7QHHHQR\Q^[[XW]]^a]^][WYXYWXQQSPJGIJIPI9N0'-.2ISLMMIJ[PHKIQZ\ROW[XDC[_`_d`aLPMMVQIWUT5_[dkkhh]RGCAMY\]X\`\[\X^X\_^6=796999<>>@@;<=7525372/000489434]Y]Z\[ZVUTRRPNXfjkfe`\_VOQPOB:8CSM-KUUVWVWRW_XZTST^`WTS`006;4\SVQQVWUVQWRRQWWZYZVXSNIGMMKILGPGIQS[\STUVZY[^1ZKFGHBDEJIJFFGNLKKORPQLJJJFHHFJHGIJEDBC@;;:?JAAHNPMFEA>9EBI>EHMQWRMPL@UI2@743147424:33eacgfd43``__bhfd45h46954554g4755444554g436767776566764565655if456766jjhbef2401/.000.1631385332035673///02351/20/--,//0230.00133112//0.00151354643-,11--895123632656332456674467756667404I!7574 8988:!#!! \ !!68;  ! "%"!" !!!# 0# !" !&! 3/,.',% "6  +  $&+:H4(7$#  + + /!#!.1R,AL2O'B*3))0, )'  /* + . -;-C -!H11N=%""31!>  +    # +        + +"(, ")'%#  &"&'&!$# !"  "&*!)".CC)"- ), !2/.&)H>g-pYR03*"!#-,(&.&!4@;(B5$&GcY-/#   )#/#(+"!2P4.-!#(%%tcbs-bAH@<0RKck(m8uz6R<&;% %5)$%0!" + +   #]    1!*G#'tBO&))%! 50%%#hpPQB@??@B<25=BvlgaRiDABelQOc`mYZeha\]aLF=>9BJ;7ECB:B09@:HL>7ogTHPWaK@6VT7ZYRIN^oVHMQP@[,K*)*-,*HOBEHVTV3cjg]^6:8@;ridrry}cM$"  +2GwsRR~˾sd4QOYjh\V|pyM|JZWXYtiix~}tea`urpla^g~}~kl||jeuzyzsu|]v~xvw{llbZ_gjf\cq~~y{xpu~~;51./12/*#AU^iqs751+"&11&%* #!'"##&.$$.3>#,%'!!%3( "-'+$)7)09;<46=#9C8?>08%+.+*'2KNL%*40096)*-0.)560(")$1/,HB$)C>4+18;9.12%0ED2@:/)#)<+<55)*$7*%-2'7  5,,0/-/#/0),+("5G<3.+, !<73+45%:5;.2&4%" "+%!"!+> &! '%"EBD[QUUe8<2%=(/!J);BS;C^VpgJN^GK[FG`m22F]MrTVcBPPVVJ?4B-.8/31?1&3F4)Q8K!2*.32>SPH..$!+Qbd;J>A377+0.D3+6026% B%"#%!$,%<52/=><0/$" 2,))(,; +> %&,!56:L)  +  &   R10    " +     +" &1/&:,#+0/+%9)@').,)+..-/465666343142101271.3:E(<+-1.*&,27,*"=A889;9>977:9988747:7;?:89:98779<<>:>C:5p67:?CA=?CCBCDBCAA@>=?A@<@>CCHLHJIKHEGFGGFDCF&**(%%%&&'))'*1 -&30011/.02034,*+)(+,))'))'(+*%$*))*+)-*+)+,,'--0/-31.+.10/-+411/.-,+++./,,/.-,,...,)*)(('(*%!(!" "$#!!#"""!#""()+.($&&&#!"%%! #"%#)+2+('&(()("!!'%.%-**))-+f+--..-,-++)*'(('$##$$(&(!'!"#!"-'"#"&,,%$*,+! /114;8:*+)&,("**(0/4;;::3,%#"&+,.,.0--.-0+.0-H)'(()*)%$%$&%$,5:;87412,%'''($%+,--,,(+0--(('++()*-(%&##&#(&''(&(*-**(&#"$&$"%!'!"'(,,'(()+(*))##"# !!###!""&%%$&)'(%###"#$!##"#%""!"$ $')&!! !#!!$%'$"%$*&0-.///,+,,-0/02./ 31454001Ɂ~~}|} ~~}}~~~}|}||~~}|~}||{{|{ |}||{~}{{| ~}|~~ }||}}}{{{|||{||{{| }}|{|}~}}|{|{|{|{|{|{|{|}~~}}~~~~~ ~~|||}}~||}}+~~~}~}~~~~~~~||{|}~~}~~~}|{|~}|}~~~ +~~}}}|}|~~|~|{}~~}|~}~}|||~||}~{|}|}| +{{|{{|||}}|}}}~}~|{||}~}|}|}~}}}|{{z{|{z{|{|{|||{{|{||{|{{|{{|{|{|{|{|{|{|}|{||{{z{|}|{|{{|{z{{|{|{{|}|}|}|}|}~~~~~~ ~~~~}~}}~~}}~~~~~~~}}}~~~~}}}~~}~}~}~~~~ ~~~~~~}~}~}}}~~~}~}~} ~~~~~~}|}~}|}|}||}}|}|}|}||}|}}}~~}|}~||~~|{{{|}~}|||}|}~~~~}~}|}~}|||}}}|}}}|||}}|}|||}}}|}|{|}|}|{ +||{|{|}~}|||{|||{|}|}|}~}~~}~~}~ހƀ~ ƺ׿ʷݏ弎䛃薶űٻΣڇ蓺Ā٫߅ϵⓈ΂ըãԺ֑؞քʤҠ±ݤܟٝϒܶ艳е҈éܯϓʛ𵝳ΔʔϯԧȺ·鍵򾙩󐑮ʐÝӺ꒹ĊśݙɁʓ㇐кӾڿپꬥԂŚۅߒɷ̶ȡѫέŤ몲џᬭ唀􇚠֎끀Аʫ߅򒭨¾招كႬ̒䄇܅Ό͝ìӇʑʚ퀊ʿަӀϻƹʵ˿ͼ½ԷǼԀƻԵ恍ቧȅׇ胏ùϭƒŶȣͷӒяԫʰ鱑퉜ӗǃė횒ǾՂ綰ز֤ϸڨځ𒑮ʡķ哒Ϟ䘍â붵į٫Ð̬⠄ɝ۔۽Ĉټ˄ӞԸŽ䦗ӿӻ󃔈ꗣƸ̯ۇ鑘ȅȡĞүؑҜ⅃؅ˎ۹ӕҙ쒮IJ£ϲĦسЬǀŮ麶ПĆцν͢󣮭܀ﳦޘƣٛδ逄¨ĺиȾľȦƷղȿʲ󃋋섌ĻǻюƼĽĸùeh68657nhk778865dacfbaff_d`bgfgm78ifea`[[___dc_XXZYY\]_cijd``^_\[\\[Z^aa]__^ehegaZ]mdcgt8jgaadedZ^aeg^deggrkdl;=8876>CBC??;>::<:\6no99imlp8illq989;;=<>>>@?@ABA===?=<:<86788:<::9:r988=<=?==@?;;99:::99:8mr:7799;=>>><>BABA@B?:;>AAB?A?;;<<>=<BHFEHEDB??><;>;?@@@AEIAAA=@@BBDFFEAFFACHciYP[6347<:;=a:;;6:;;6427;C8OPO6?Ge]B#"#$ "! "cI +=4FhQFo|Hn`ZI3FU[%"('%'%#%'! "&!#&&&)0./0-(*.3330,&B&26zvB9|xZqymxUr\pw`WmD$beBPKCXQllVjS4B?Wo+0-l`@BYnum]nRhscizk}}B8hTs{E~cPs_tyH1>JWORA%xzl}Nlm`k5OFJD>2]5   + +9G-/-6@DFHGFLPVTRLHGFBA<4.-213A?=>:<:4c]VG?E>=963dur@=9=<<;<;;B! WXb*HXa<(#$!:@,95CTr131gUU=OY[`J_LVA9::IBbV[Ejn:CUSG98AM;4gQmNgb=VJ*D1C>H$-&MS<*9O-'(7()'$#%$%%.e4qWjUo?;=WgO^_rFLR7/6NN,99 N`dG7FEJ<7AHDIBSMjIT|pxHZ[^9Y@42F32CH@;lBY\VBP\HJUm:]_JMCdTawJLJokl``[YhWfV@BD>xI]{OvcjXVb}sٽ~yZdaPf}eYp{cuMRW۩hpnc\i^iLl_^nY{ZeVniJGe&?9E`2:?s>57IP"0[[V.SM>BB=DQ9A6C+!'*.76>JMLY/6)*/*/(8E/,'/?$Dxi7AB8C<;:<6?D>F5VJEE@c>==<<@@@?<<;>A?ADCDDB865JY;E_3E>A@>=??>@CC=>???B=>@?@DA@==>=<;>F?@>@<>DC=?D8TtcFZNNNMGCC@AA?INJHEEDGSIHKKIFIIHFIMMHLWdea^VSSUW[c699lg^ZVUY[[\\Z\c1HD8bA><:9a58=75676345aa2ciheh6fg467765473435566456:;>?EB=786573342221c_]Y[Z^]\`\UOORU_\WMMacaa01_b2_324b\]Yd^\Z[4da`gjbbYY]]\Z]cbd^^_]^a_`dcb^^_`_a^^\YZWWTSSOIGD8643444//244/3455<946 56477:5548<; :7535D9; !  ' "$#"#  !#%  !!#-3(!)* ##' + + ' .!!6:%4,(  !)!)#$&"  !.+80  2F)&2(;B@2,,.5 +  H2+8(978/CE ,0 %#% + + + +  X# !   + +   !      &) "%   #"  + +*!",#;7*,,)$%$-"&9,.=0 $F40Q+$&&5&& "+yUM>SWSf>5"  09 %=-"^,$/""))$*4,)&''PU&/()-HjK'g' #C^34[601$ ) '!%48-.)  +  + + + <(07 '+=PMtkwXI>QG=CFN[ZI;8,  .29/7 *7"(.<7"'8&54'?#2&@65=:+-  + 3;D:6(A1C<18>A!!5:5EJUXGHSWKI=706fef=u|rt=?miJHKNQG>?Ifj\cdif_GBk>L@779G?.;KR@A@B1FCbNOOYRHC8@292O]4FDKUN^H9@@F5ZRP@H=A--/+.YMBELW_Uk96_^PYnnJpwai=[*% 1XgdokbhƦlsÔhfZSH[_TdXZ[IWSePfiehwx|}vjnggvU\t~s{n|}x}|}vcju~xkquxxotupdke\tvqpt{~|vty|=61.*+-0-$#U\jpj51*)079@BEGFMPUNLD<;9772) $$+:977365.WRL;4?8510.]nl;4-0.,('(*-138 %#1(=#%-5% + + + +$#*>24+',-1'6&,!$#,,, 8;!&+-3&!-:,8%1,(# "  ' #   550<*?%##'-#*7PF&!+$!  !23 %#$#"#% "+#(?4: %%)$@B?):%&-)<&+H8,0)-890*3-7&+!-=8!%+7"&,#!&'',A4!&B701:-1,,4#8"?NB:$+-,( -$($ aQTNDD.I(C+$B9C*[X% 5$A$(1C:BH:4 .';&C!&-NhEIFPB;60EISJ+DQ=;2-0+&#&0-S$#""&.*94.$!%4",22+/!   ')!.- 3 + &  +'! !'  +!    +(C@3         +"# =//- )/+0.+(+'I0- #"(2145322420543300/2536978693++@>$(6*'4578:8656648889<88967;;;969998:@;><<68=<652%4G?/HDDED>:::;;9?CAB??>B@?>AACMCA>@@BJSQNMGEFHIKN)++PMIJGCFGDEFGGG ,&1+/./31/223j$!--,(('***-+(%$''+*'"".-*+*+).)*'/++)*.-/56//--/.,+,003-+-*+.,.00/.-.-+*(*(())('#" '%,"%(&%#&&$#$%&'&(((*+(&)(&##&%$$$#!  +*.).'*)((#/'$1,&$"#()*'*&($" &)*")0+)'%%##!!(3 ##"&#)*&)'$%'.)&$$,*%+*-36<9@-,,',('&'$.--1<641*'*)*++,/0,,-+00033(+'')+**!!%"'+286470+/0&(*&$#!""'-())|('&'(*,+(&''/0'')1.+&(-.%#&,%*.,+*(&#$'(&'%'$%,,+)(*)))(&%''$#""! $!!"#%$ !$&%"!"#$$#! !&)$$#"!"  ##$ #%)&!P! "! "$'"(- +)+101-.-1+.+*+-.0/13.//10-33//.~}~} ~}|} ~~~}|{{{z{,~|{{||{{|{{||{||}||{~}}~}}}~~}}||}}|{|{|}}||}~~}|{|{|{|{ |||{{|||{|{|}}~~~}~~~~}~~~~~~| }||}}}~~}~}~~~~}|{{{}}~}~|}~}}~~~~|/}~}}~~~{|||{~~~}~|~|~|||~||}}~~{{{}~}}|}|||}}|}|}~}~}~~}||}}~}|}|}~}}}|{||}{|{|{{|{{{|{z{|{||{{|{{{|{||{{|{{{||{|{|{|{{|{|{|{|{|{|{||}|{z{|{|{{||{|{z{{|{|{|}|}|}|}~~~~~~~~~~~}~}~ ~~~}}~~~}~~~~~}~}~~}|}~}~}~}~}~}}}~ ~~~ ~~~~}~}~} +~~~~~~}~~~}|}|}||}}|}|}|}|}~~~~}|}~}|{{|{|}~}}|||}|~}~}}}~}|~}|}|}~}}}|}| }||}~}||}|}||}|}|{|}~}|{|}|}|}~}~~}~~~}~~}~}~}~~ ~~~~~ 񀇆ʿƹ灖驀֞IJͱߤԡ̷ዺнڼ˷韕Ļ֣ͲΛˡͮفĩń˨񼓉ۤ咒‡ϱټđи恴󁎒ﳢҴוցںॠؑݨ󐡏Ҩޱ㌫ҢƊ荥뛣ر򊑀Şڵ߈ɦ샄Εԭ嬹ѐ܁Ҁۏ߉ךƒ鷬֭ð놘ԊĐ䂐ΆȾֿꁈ٦쁁كϏȺنvꚇ⏡ض猘α·󮝀ϛ˵äùٷےԽ׸˵ӯπжӵĬἩžó󚩙Ȼʺրŷ􁃋׸て󄊅ӕހѥϱيϷ嗿ɗҊށХїș՗ٜDzͼȣևȚëȶ´ͭ˞ޯӣͳ补ȴЫ̛ɎЀ썰Ϛϧ醧݄ӏӲĿ˘֔Ϳ􏹿ڽ乽̭»ե萋ͬ´ҚƴĻŠ봲ˎȺݷϙĕ႖̏΋⯨ǰŮ톐¤ז׫ڥ©⮃ɜȜЮ򴒣¼Ʈհɂ像񈑔Ŵ̶ɼ޿Ԭǽވſǻ˶ýڹ˩Γľ¾󆈆ǻ适οĹøƸʼûV쁀dg5776696gf677566hffbadb_ciacdcdcgk^d55c_a`]\^[ZXZ]^[Ydg75eccb_`^[]bddbb`_abecckltoncdff`\_c`aa`[eokbaejimdgiikkik>98:<<;><:9:==:98klmlpqpn886o7;<=>@??=<=>=AHDBA?;:89:;;:;:;<:=<;99<<9rplh798@>A??@B?:=?<==;;:99:99;<:;;:;=;9;988po:9<;<>=>=>>=;>?>@B?;<;=@D?@?=<;=?<=?=>@D@AA@?==:;::>?CHHIIKHJMMNHHIGFGKIEECABBCBDFGGIGD@m9@<5\3:;=5:85;>=9<>><84468;:=G?@?8\>2%" C81B|Nb7FS=2_Ztp}lgU>Dj8I^;R_OILSm=V_SC`^S<;7G(A*/(BsbHhPIe``JWTaT=C#VpdSP<7K/$<'#0$ +-)&,)($!,V>']9weF"./:;08$]Z H<&%JSBI-?W<0:36.F:E20>C4FC;  + +  + + 04-C>515,&2*-4/441.;<85*.^EHN$&3:HGG=179;nq}EJxFrrzuu~|}x̸€҃icodhw}rc_T@=<{s<:=>778988659:;oxwm`^_r~CEJIJko7/2C47$=4*+101:@A==?=>950TH@>v=440\ot8>aJ2J.\ZC^h^Y=1/I8?=1CC8A6;1-6_L8.4JXy|v@yZQCDplnmdvfbpymg[JKIdJPYFBzPX@<`9bglQH@GNnKJ75-6JI^hSL?QUb5YLHSNRTZXQ4EHWNOO84.F<=77H8J4-8F7?;6ASkMW:?HJgNJbfncCBnRg>UFecbS[^^``Xe|~zMmRdDfoiichQUagΠzzu|S\ato~xauwtid^Tfs]}x\|cUUwi~}voo_VDZCJP+A\A[PY{pk`hcPUtY{q^w{ka[y~oX:[=YkrZZ~ZeU]s]mfaZUL~OwY\JBJKdBdhccN\:cEl7JXUG|xm|IW`@aMFn06SNLpe@9.@:1QHN-=CO__[K:;:55.1NEDGISOK.+ER=')'&&#' 46_6>&5.NW+LT`R;hWiABDABCDEAA?BC<7@@BB>?>A@@>=>@A<>>?=>@?AI2UmmGYJGJJGEECCEEFJIHFEEFHGGGHIMJGJKFGJLPLQIW_ZWXQOVZUVY\a`^YWXVWX[[Y\b8PBcLo?<;:86139;@:55543egd3`g6654g45554f54534545457:;==AECE?8:633431232__]_^[\`VPNNPPMFBG_3a`aa10`b_13a`Z\[\b]^`a^]_6g^ZVVWV][]aa`a`TU^^\Z__Y[]^___]]`TWTWYXRNLKIG@Y4POPLJKRQPOLQRSQMPUUXXQNO>NLKLJNMJGKINRODPX\SQSSM`)QMPQONKNLLMNLXWLSOcZIX[UBUY_\VQTB<^D(EPIS@\RA?CEGB]UY[TVRIZ_\[VV`ac\X[WWWcddg[\]X\XTNROPTT[258gdbWSTOSa[[^b`^ZY_gll69::756588:;==?:<6242/22/3]VXW4:81^\]W0143ZWTUMUYX^Y\cWJW]YTPPOOSQJMNPRRNKNPWSTWYVVV^_Z^a`_\V^[Y_2a\Z^ZZWMQQTMY\[3^1i\NCKVXTWRU[[_XWTPQOSVQOLNPNHECDAAGFHHGDCD@=OPJKKKOOKHDEGINIJLEBAK?ACAA=C@CAEDDBAHC?B:@CA?BKPcQLFFp9`_dda26<1_`d]2334bc4d^ad23cf375fg343de6443677547555347554765455655664e455j5665ii4j.10/2331/0/.03/.122247/21033111/.,.00-,2232243310024423224434279=;:4567301412110496324658522667599768!:;95 #::   7  !  $&& %$!#$ !  ## ! 2'u  >*,'%29@C + + "')681067(+$&A;8:%$)1=@FE:35>@?5*/24cfuAFnt@utoQWTV^ZRINQSH`ci\a^z{WDAI;77;;664@A?CIL5QwOjVEWCN\U=0IdFQa=MAIUc[SI<,**VQ'(+,*-...-*)/47cmkaSRTgv?ACDFf|c)! + Hpv}vvjum}lpa[eUZc]TaQUQR~vr}nQVnpyojskme_hiaaqgro|ifzspnu|qr|sxqmyrqev|twuv}~z|z|t{rqs:770-)''')' CR`pme2135778:>ADGIRWX_O;7134*! &%(05512235/-(H:79p7-.*Sil22---)%&((*1#)"0.F#:)/) + +   + + '!'+6'!'7'' " 2*:) &.6+(+#/'"$6#8+%)("1/)+!6 &#&/&0'5  )"%'*7)*?B:">+%!59<6-;2/9B><9-*$<(1:)(L3=%!2039/+&*/F+)))8>2-"-39./0:667;:3!*,4>36!)!"!!"(6'/!&1$$2244!!2#/$+62))%52.-)(*0*.9''HH944&# +990$+*'2,,+&)'&&'., !5M.'%*/4$7>*2&$?H>JDBHTPX`E:MIAIH'N-2ZMCERZJHHORDN_ZeP:_O]O]PaEmOE54M4)>91!8.)&5KG,4@<)>F=BGD;1%%+&$5(2$4.FFdmJI:6c:Ya^dRJNuZ88/ %0!=8<1@ <"'(! % &(+91.%(%(#/9,"&*U & # ,3 "#%D6",+*   +H.          /C",,.+**,++-$5<(-3+7-<&655338722575/104554589;987:;3-1:4536699<>99:;<:98;<899;;887;:::;:==9<<<89987:"8FF1FB?CC>=;:;=>?A>>>?@AB@@BDBEC@BA<<>@A=E?KQMLMFEKPHIGHHLKIFFGDEEFD@<>".#-#5131-13.K#"#++**))+*)*,'%%%&%#! ,+)++*,*,+(*)+/+*++*+.0)'()*(++,/+$',,+*,-)++,,-,+),$('*-,(&%%#"+)'(&#$''&%#'())&(*+,,'''*%&(')(%$$"$$$#(-*'*)&,'&''%&%'&%&&$)*"&$-,(*'))-,)&( -"$ ' .'P "#*$&($'& */,,*+1//-+-+,-569=545.1.-'*('*'+544.+/+*/,-/-+++-268:)')&)((%%#"$ %()0.05,$+-*'%&%&)(#$%'))&%'&+)*,,+++01-/20/-(+)'+-*)+)*("$#% &'(+4.&#)*)+()-+,)**&('*+('$&}'%#!"!#""##!!"&'"##$'&$#!"!#%##%" % "!!!!#!! "  #%/%%#$1,,//,,-0*-+.,,./102/01410~~~} +||}~~}}~~} ~~~~}|{|{}{|~~~}||} ~}}}~~~}|}}|{|}|}}}~~}|{|||{{{|{|{|{|{|||{|||{|}~}~~~~~~~~~~~|~|}}~~}~ }~~~~~}{|~~|}2~~}~~~~~~~~|||}~}|}}}~~}}}{{|~~||~} ||}|}~|{~~|}|}|}}}|}||{||}|||}~}~~~}}}~~}|}|{||{||} ||}~~}}}|||{ +zz{{z{{{||{||{||{||{{|{| {{{||{{{|{|{|{{|{{|{||{{||{|{|{|{|}|{|{|{|{|{{|{|}|}|}|}~~~~}~~}~ +}~~~ ~}}~~~}~}~}~}~}}}}}~~~}}}~~~~}~}~}~~~~}~}|}|}}|}|}|||}|}|}~~}||}|{{|{|~}|}~}}|}}}|}}~}~}~}~}|}|}|}|}}||}|}|}|{|{}~}||{|{zzz{{{|}|}|}~~~}~~~}~}~~~~~ 쁃ڀȿ³Ζ۫Ƃ둽ذ೧ɦnj끅ʱ̷绝ȵҸ́يɪѪòвԼԱּɬ՗߅Ӗ꧴˩ؚ􊓛Àݜν݀ށœڑ湁욒߫זѱʿέ߁ۚВÝݕցŸγ㓔ᮝⲱĖԟŗ剠䰼ۀĿʤ迫챝؂ļ蓘Ѩ⮑•򶓐ƹ܃ۛ͘Ճ싎–Ǭ􋊉ոИ푕څՈʷ怀ʫŶշřğ͒ۀ׏нҵԱѷȺ晘ſýπƻÎ솮ǠЮϝƲбȜֶ郇ڊ̙ճՆɣԐݿ䪋򷸋ъӴԊŀܭե’狙̉ɴՇʴ̰Ðū纪ԆݢͰȽټҥԇѡúȜ̪ŐԓƭիݽǨ̼Ʈ螀ߣȑҤৌŻܮĄ횆٤ص˶Ⴌ߸Ÿ˩؜ö𒟢њߚϲ؂ɭʼ̺ÝπڲỳȈʪʸ©پ̻ƻᷟDžȼǷƺ¾Ĺέ˽裀߯¾İߍ󂛏݀ǿƺžʽͻѿ􄍍4df457676ej56544755jedc^[aib``egebhc`68ie_aea]\[bY\[Z[\7>6jlhebba`beeffifdb`__[XX^]`_hhcm8fqhfn`fmlfccjlr9icedjp9kiq899=mnlpgp?B@::;:9:;=>=;>GIB@BA<:899:<:<;=?>==99;=989:on6jooEMJKF<99;<==<9:>;<999:98::<:<;;9:::98879:;=>>>=;=?>?AFD@@>;=;8;>>==<><==?@ADBBC@=@;9;9mm<@EEFDB@A@>@BBDBBCDC@EKG???>?A<7lnDFTOQM=A=@=DEBEDA@@ACBC><@IC<349=@CB@FCEB9:@@DHIFEFMKSVQMIFDJPLDCA?CLOPNGFKaC>==D:749>=848567::?=8:<7455453:<:;<9774NUW=B9'8KmBN\e75 *HXJVU}FieA\=?^hMLPKLYAWfX6UF=J?39674.".%fHlsS_kq[B[\@IBL39; M X^F8;RJU%$7+#!###+z&!Q+@ !<*36AtRTB8;I<. #,'.'(A6?)(%*"(!GR0`%0:5D$>H~D ",-/1.--''+!#  $&$#! $)%$%.%,3( &*(,.)'9#("/04$%#% !"" 37;?/'!2""'#"++0@6:!###%$#(%$"&&(*.0,-(44SS(9U/i`aCbK}newfDOjD`E)X\MjhcwYQ]z\WC28jJ>3KH_2yZtvT'`sdQ{wTHxqxs}yx]tblX[LcY7sn|`weufn}phwX;^xazf~[F3Qd[~#u0]ugv9S23]L2J311542-O6NL?7>?(<(_IBZ_mWU9cT0N($*%IA&$*$$?H02E?HbZHWcliPlaWU\P\N}6CPV7,B-<[-Q:DYb-63A + + :*B:--=0+;7//@;5?>9E,K1<3X2467>E>z@vFPVVgx|񆆇چ|ryw}w{oԜэ߈нn`~omrPymmehkxroosc`33_5ch`l;meurgh>BFBDwtNQFJ9(N2/33*,0,w|x~{yws^^xm[d|nVXVTQeecdWXVsdWvZf~{mds}pwmkszssyso|nca~~c[Sdq|}ystuf{vy{gffvuqu{{~vz~vyytw|xxutr>w==:840.,,+(&DO\cmuosy<;;<99<@AACEOV\]QFB4224247)-6543555:>:2UKC9T=1-,[fz9>;9@;89<>?  &)031,-DhdMLA3Z#:OZNP7ZY2WdLEaDM@/62O?K@7/DA8*CX@dEGWEZaUC][ctabI`UVIMHKiS?_GtHHBy;31eAOEGBN2PGTUK;VL@>ACBG3FCbULLEPG>248DK4[GZBUHCFYV?K*8?@F:[G?7FXgHIIA;?@>>=>:;;CCDDDBCEC@?A?@@?EDACECA@ABAC@A@???>@?FE?BFGKh\G?AAADEFEGFHEHHGDFGGEEHJLJGGJGHJKHDJIHHNDCFKLTRTUVPQUTTWTTX]U[]d?UoSxKY:?>;:;9456689;857544234h47875874;44647552333432346:<;;77754342533c_Z]\Z[]ZZWQLILFC?9\C]_\^01010`_`^[^]\\_\Z^\1]Z_fnbaVTSVWXX`\]\]ZY^ZYYY^^]_\Z[Z_[YWSUURRVPPQRVXNG84LXPPPQVXTQUWWTRVXX\ZVTPINOTNLJKLHKNNHPU]]UOPPMk9%7FHNNJMRPPMQHJHNWQTXNKTQT_NLSUGZ.5ATGTURVSSRUZMBGNPRU;6N^RY5[_WXYYWRUTTUX_Zlipfc]ZZYSNIQC07N4743jb[[UUZVTc43b\Z_f669CB?<743=@>99987<4350\/032\SRU[0;5120Z^352]ZWUOTYUYWVT[YW[ZSPNNOOOMMNNPQKIEGTRQTZRPcdg`adkecSU^^YVVUW[VYURP[QMOVPV00bcMJU]YSYTXVSUQOTNLJOQNMKJQOJFECDELJIHEGBEIDLJLPQULJGFHGIEEGIJFCFJJC>;65A@HFEHG@76@C?>ITb`aPOD:l4`\VWc\\25cfg6::gdfe5ifd_g3a3544bb256gdgcj6;=;735:777:;85665f33465457666555445565567554ff3A.0/14010.-/40..253041/5302520//2-//---67644323C43655420..,,0/11685:7:66;2787244876213169405 878;58!565 ":637:%*'%!F  ! 86 !  +!  "#a55"")'(%!!!! &'# $  "!#1  $$&'+F>#>20""73!!'2%'& + +69!/0&5/+!,) & &  GY&5 "D + B)  $! + +  %(1  5    +   +      %%  + & + +    %   !$!& +*+&/''53"./*'*'!+%"_G5## +$$% 0)"&%culM-5QSJ,;"0 %&: $+'*1'+&(>2$!2 09&5) -#=4iZL(9PM2cCJ8C6dG3' %zv_Y|  "!  +   +,"    6&334&$ $ + #,>,,HE@SannLh]QVZIR[s1DH4 ?,A"# +$*#)!**1 5!$%"AAOA+#  $#!")&!!#+*)++,550793;&=*3+H+,/.5>9n9i?xEGENS[OWWL@CY[a`dh_ca^N?26:?1?35/44L8\RTV^)T=cFN6:SN=P[Z6ULQhUpARBC=?DLDGJPCH$%C%DKMa6dZhf\]9=A>>hjyLQC(! o|~hk|]^siT\XUQhieeZYXscR{mVf~rvpsmnqvoouoryl\`~e]Zmx~vw~ui|{~yurw{}ytrqo9j43/+''&&&#1AS`lnfio66551/28:<>?IMRQE:3()--**,"((&*04/*F;82S7*%%Obq41)&+$&*+(&  + +(37""+00 +  + "M""8-4.%,! !+"#) !. &)$0*+ ').(!'"98'@244 $9%63  !(0##5#%!!"!+1$'*%+0( 0B44904*615**&'>0#:+C00(B"1+&&!+8*$%!")"!"'-)/0)$:4,+,-*+&'@83/),,%!$"+-%,!* &%"!$)'(-#(%./9+81$222/+2(##&%(9H>EK::7<>!/=6+,/##*')%##!%&#%34E<"'8##!#)682;(2)(+!"@CB?>FR@TYF@E:9w<>:=OTSgV\_kD?{21()&3))79#1(*<5#!""!)) .! /$#.!"(%"0$&,    /G/ $ ## ! ! #)    + + +!   &=S6%7,),/,+,'1&25653(+%!+44">?;5762,040..4.)047973686744345;:;=:::=;:9<9:98?=:;><99:<<><=<<=<:>;?=9;<;;NH;7<<<>>?<<<>=BA?>@@@=?A8ADCA@A>BCC>;A>;:@<;=BFOLLNLHDIDDE@@FG>B@A$.;,>&*23 '',-**)((*)*($"!$!!,))()*+++)*)*),))',28-+$&()((*-+)+,+++*,,+,+*++-*((&&'&'*''')-.%"'-()('*+)'*+))(*+,--+*)))+)(&''$%%&"()..+()($3##&&#&)((%($$#&*&%*$"'&'/$$),%-)$()(*((')/&"&%%&!+&(+0++***()()),1/>>C<95122,($( !6401/--+)/**,04##!)+&%&)()&%##!$(%+,,+--+.,'%%&%&'$%&'((%#!"*('+.)&235123722&&))('(('+()('#+##$($%-1%#).,(+)++'('&(%$$&(&%##'%"!"!!!&%$$!" #% $"#&%)#" !#"#!!""$"!!#%";!$##$#   "'.-%$!1.,(*/+*.01--/-00-+.,+,-311,10 //ف~~~~}}~~}~ ~~~}}~~~~}}|}{|~~}}~|||}}}~|||~~~~~}|{|}}~~|}}}~|||{{||{{{|{|{|{|{|{|{{|{|{|{{|}|}~~~}}~ ~~~~~}}{||}|}}}~}}}~~}~~}~~~}~|{ +||{|~~~~}||~~}||}~~}~}~}{}~~~~~}~~~~}| ~}{~~}|{|}}}|}}}|}~}~}}~}|~~}}}~}|}|{|{|{|{|{{|||}}|}}||{|}}}~~~|{z{{{|{|{{|{{|{|{|{|||{|{|{|{|{|||{|{ |{{{|{||{{|{|{||{|{|{|{|}}}|}|}}{|{|{|{z{|||{|}|}|}|}|}~~~~}~~~~ }}}~~~~~~~~~~ +}~~~}~~~}~}~}}}~~~}~}~~~}}~}~~~~~~}~}~}~}~}|}}}|}|}|}|}}|||}|{|||{|{|}}|}~ }|}|{|}}}|}|{|}~}~}|}~}|}||}}|}~}|{zz{{{|{|~~}|||{z{|}~}~~~~}}~~~̀~~Ȁ~ ꀎ󑝓鄃옢Ŀȿ㑆狋ܺ쓕ռ죖Од̾ג𣬚쿘挋צٔ钖깩֞ء̕ۀލ͉釐ٽ끐􋆄ŀ򀖧ݟާ߸抧ˮݶޱ亾쾉ٸƦѱ̲֡͟Т♈ى٪ȇجٍǗǞښղ󖲢ބҍ׀ѽ˲ҽ܁낏߽ݸϨ頠ۋ򣳚ꎷۜ㰣ЀḺ́ٚ퀂ቨʺҍڄƤڗ뱯́ӭٴ䉓臈߼ƞɽͿеƀ̸ƿŷʭĴͿӾ÷¹򏄊Љ̀ƺ֢耗Ľ͏ץͩΌ腆ȋ˳ʗȶՆЈ̶㖦ƷѠײ̇գެξ䃀ƔΦ񂂃åŽƸɷ֍ڽ˨ಬŴ嵰͝ȆՀ➧ڶЃ̭Şξ¡ϪΫNJ輛ǡˬӶʽ¦茀Ҡ救ٷ쫕ャӴò긵˨ɲ񖔅˪۾ؿĿ˃ીزƿȻ𕳣ֳŽƼਯՠ߀ᾘ𱜦ޑѓǮӭ蜆ˇׇ䁔兎Ⱦ䍴½¾ƮùᣩƿżȀѻĻ÷Ӂ򂎅၃ž¼÷ȸӷc443344ffiedkh866778jgiinleded`_aefhjfecb]^afd^\\b_b`_`cegefjsoebaaedb_dfeca`bfd^^\[]^_a`cieddbd`gbcaf9=><8khhfm898pnmpmkqs9qpm8:;<:;:pjjlnnk6m6l8=<>?:>=887:<=?=>AB@?<=;9;>:99;?;:=@=>;:9;986l><:;@DA?B<:>FHC::;::8988:;<::;<<<:88:99:9:999<A?<>?CDFBA@><:;=;<=<><<>=>ABDA@C@==A>>?;8:==ABACAB@AA?@ABCDCA@BA>><;AF>?>:>>BHG>==7g7o`l=A;::CG@=?><@<9[77=@>X`@FHJICEDEEKFIIHEHIIGKJKHKKJKEFJPMOLMKEIBMJ?@B=vBMEP6>jF)5L>Awez41,3WchD2Rp> .DH-("<3?5D,6BT2MM%Q03-55/3RfcUgVTP_POOcCpCQF0J55&(4'ONS? /(0)#!   $GA3:(##'EK)LJ>?D15>3O2=-I0./+-.=D#4C$"@;>'--)'&EARM?Q316wvrz@0>?4!!0$24L?T`elj[n_]xXg~e~dJdyamuPVTQOJ_f]~~ywlpzqluyzwuupmkmqpoe^df\Ypvs|hprk`odnh]ivr}yywzvoryq~zkPUdby{hgafernirtv||y{v{}}vronjh89941/--52%CJM[dmrxyy:8776789==@BEKIKFGF<7>?:92,$$)+,/2349<>9VPL=:;2.3Zix;;<8::9:<>@ ""&-5643.02:P?/^7[ZF, ",."&'-1,C7Xm>EW23;DE;OKfo_bATUa394T=>DAbYQ6b9J;;qeXKGT&F<3DY_T]ZNl=<>o[MJ@HELGLDp|a`i]nZ^NEMUEDJJym;::QBNeN@72DBLFCB;WXD=UeGHO\p8NJ@@BA=>@p?h9P[h;?7QjޯgjzdYdVSqe~sxW{gSylqxxxBruYPVRIk_iqKVV|_tyqvfjRH?LVVXZ`Yk[>TQTSZVVaSQGLAj`Zk7RJ`u>52-5D;QI3?.=:8///-7-/-9=;8'( (3EHEJ?;53<1<7#')-(&"((&-* *LWR<5(>AD5R4H<>A65/3&' -+./B !$%%'!*+(*'*$')('('*()(***($%(-,+,'-RXC4LQTYnHC]X4ZVLHECGIEBIUeeBACB@=>?>><<<8;=AFFBA@AA@>AB?@@?BCDLMJDA@BC?>AAABADBCB>@B@@AA=AEBBDFGJGHGIMMMEBDDDEHKLNMLIIGFKKIGJMRLJIORHDLMNOQSVWVZ4=Od:=@J[lDT^gr@<7:87699:998457::797554fi6764544545565424f3d3447569<<;;<==:<<55642322b^ZUSVYXXTTNIGGD9/R1>_2_`a2%3412___`[`\Y[1]Ya_]]Z`d:i`ZSVVZZ^_`a[XYVXYXZ`^[WUXWWVRTVXUVUTTUSPQPKID_>SRQPY[XYWYYVSche^^`]V96QTSNLGFHFCFKNZnXTPQMD=(MBCBDN7JYYTPNIGGNPV[YTSVU\VNNI1<:?TMJQNJINSHIOLHQIKKMPOSWZY]6ac]VXUTLTVTUVSQW_g``_XXXTPF?9HN1306;7jgZWRPNNe5^3d]abc34<<@>:88=;>@954<:563]_2`01^XSYWY[1_43[^1531[ZZYWZXVRQQTXW`6`\TSPOPRLJJILHFCEEJMPRQSXRVXXV^ZWRRV24W_\ZVRYVSS^QRSSROSWYVNLYZZXUTUSQRNJMIKKNNNJMKPVOLIHJLMGHGBDFB@CPPRXOMGQPIIKIFCBGJGBAEIE@;;?cGIEEGEB@>B@@7@=HJF>DOYbVSH\i`^ZYX[]^[\_eji<<8h7jk7milohh58:7477:855ec`_bg?=;988697899764554455698765ge45j66i5565fdf[/02/.212132530242/0/33340122//1520..1/1110221237=95212532/342321221/10.011422742152423!43437:87987<=995954467 4 ""   !  - !    !! C " ##2716 !)(. !"#!!!  &"+&%+.!  6&-D$<453,7/"*%=!*,  8+,55$&/*)0  `?  +-.,3 9*,%      ,"&    +  +  +     "  + +  +  " +  &..%#! +  "&" ) -"$!-"$:* #!:7)7C.41IP`&!' ,6$*&"=1-&-BG*24/)<!8 % + + $&+)&(%:*/!#'% U%%"T'KI{^x$$P'mm4F + +   .   1G(# <7''-=8GBA(72-"  5 & 9KLHZTQPZJFIWBm>S@"##!JAA/    3.%) /;":5**,")"@-2+ "#+.#/.+/#$73A?4B,)-3:=4.2,,-48T[Q-D@P1FV`lrrpn410.,26;=@C>A;=;428:4.%""%((,2771E?=566+&*Kap630,+*/0.($ + + .)103&   ( 3<' %$791.+)''!!$$4.,0,95-*(%-)###,$-;")'/-$" $#)*4#0,($($,9@  !%.!&632/,9"!!9-$ $&''*';H:>G9?47.'04)*10H< 1%f6A+#'%,'$"&3%"/8&.26D!35-/0-)&"F'<%/:. #&- !)$ 0*/%2()$*39(/"01#20',89-@2!&41,/)'($-?@FA85438:.9**+(&+(*'(&(&((,656+,?&"!*14*10<62(+2'%:+>5?DEKGFNEC;@@@>:<<:88::=A>;=?>CA?>@DFF<<>=>>?ACGFDBA>@DA@=ACD?>?FG?=GGFGEDGC?A"$.< #(.3 )/17*11/.?,-+(%'(('&&#! "!),,,,*.,+)+)()*(.,+*)/35,)%)'(),*))+++)*))*.,,*())*)&&()')()***))'$$!,,)((,.+,+,+*'122./20,**+('#!"! #%'-:,,**'!) !!(%,-+(&##"&')-,*'**.)%(&+&$'$""%(!"'%!(#%$$'%'%'(),1.**()#(*''(((,4:655121.)""#75/.,*(%.'-,11/*++,)%(''()(*''%%%'&((''(**.1/))'&'(%$&$$#! !!$%'(''+'(**(,*(%$%',)*(&*)'%,$'''&$%'()&%+,+*'(*)''&%%!#$&%&#%$&+%$#"$%%"$$"## !'&',&$ '&#$%#! "$# "&_$! $$!"!""! %*.&&!*2.,,+*++-++.05/023535602/-.00.2034/-.Հ}~~~} +~ ~~}|||}~}|}|{|~}{{||{{{||~~}~~}||}}~}}|~~}|{|}}}~|}~}}}~}{|{|{{|||{{{|{|{|{|{{|{|{| }|}~}~}~~~}}}~~|~~~}|||}}}~~}~}~~}~~~}}~~~}|{}~}~}~~~}|~~~~~}|}~~~~}}|}~~}~}~~~}|||~~|~|~~}}|}|}|}}||}|}}}~}~~}}~~~~~~~~~}~}|||}~}}}|{||{{{|{||{{|||}|{||}|||{z{|{|||{|{|{{||{{{|{|{{{|{{{|{{{|{|{{{|||{|||{{{|{|{|{{|{{{|||{||{||{|}|{z{|{|||{|{{|||{|}|}|}|}~~}~ ~~~~~~}~}~}~~}~}~~}~~~~~}~~}}}~}~}~~}}}~ }~}}}~~}}}|}|}|}|}}|}|}||}}}|}|{|{|{}|}~~}}~}|}~}|~}|}~~~}~}|}|}|{|}~}|{|}~}~~~~~}~~}~ 󀄇흐ᵈǀ½ʷ鏆ɍ䍥Ź㳈״՝ԵՓ헲滝ŚϿʀ𵸵ϣѵᝧ肿ȯސͥ燓ʼܗ۳Α랬ڌ˺噇”ǥ麸뎖չߞݑȚ̈ݞхꤤ伂󌚲Ӂʗꇘ˶ǰŬŹƿ󛝚ựӥšƱ鐟渂έޙֱȩ˄暣ÕŰҫ˿þӪж쥹ϝÒζƲ聀Ðɝ⨎ˇúꋜ逋݀냉꟡ë􎚊÷ɻňŸޑןÎ׼рܹȳėɷžűۤнǾɼк¹ùɉŀ¸ƽ򃔗寅쇍򕬴󃋚꺘򮳲򜚛ԃĿُƖݾޢĎ簫˰ף֋̬İՈنީϦ趚ֻ頞ާŒ޺܈𗽇ćβÄÿ݀ƌܱћݓֻäɰӽ³̬թբЙٓ󹰏ʳ½ݫǴۥʫ澬ͬҺ䂩¡Ǟѩ¾ɧȕȱ˰ҥ˖ըϯÝҥǔ®̱̭҆€޵棥Շ˞뜑욭󷧳˔ٴ˗ò鏓ƼгĴ严Ӄȷ΢¿ƸƸúٹɀĮغƼç썑苅ƼĽɾ·撣񀏕#575566569555ik853f665567976jga][Valf{d_bbhnd_\^baefceeffg=?tidc`^``^_`_^^_gmgdc^^`abd]Z^Y\^]bcggbdb__]bp;?B@=:likkn:;==9okjoooqnmmo9::9okm7m78778679?:699::7899<:j>>>A?<:<;;99:;=<:=<:;889975i9:;9:k@H?;<:>C<;<:9;9:;;9;<;;;<>=99;99889;>::9;==>=<==?AACGECB?>=<=>>AB>?@@?>??@@D@>A@><76BD<=A;<==>@??@AA@DEDEEDC@?>=;8;=F:dG?;9@mm_M;HDA6/8?MF7kW6(>47J:TPIsRVK]iIK\;G<8CTJYQPY`L`aJ#,'0>7!530sZOLRURaYKAQT4=50#&"1%'!<() -4  '  ICU!;-:,-&#4\L35BI498%& '=CW6|Q'47*.a.HcHP ->WG_3 0F8>0/+/)*+"s!'*%$! !''#-)26).&1)+$((5;A0-80+-6?!' E(7+1#% !"OAC?0,?+.$%(&$&'-.++)..)+,23ro`@[ZY4PetALlm[|n]wEjmr|{J^]dp\SZiZJ6fiK}aT^{dboXRVuq\C2:D'sftt`e~qiou5FV`)=lzdFqt|}Vna_wwwa48?d9*?3Ly~AVHAusqPZ2;TN8^!%4/0X*262-@=F59*G9#+;43;2+-5X=3UCQXB=W0Q0>IUO<8<@I[prhAOgNl}k\oM8=`=D5K_1.49<(2-'2'.U]BWb|m`LVJE]uLB(':@&=<>>@DEG>#/@%&%<2)() '1AB9_11'&#+:@0F*$%46;51^S9:*682)9E(+#K*'*,/433E37741:0043K*L19AGBy{lVfgda]h8ppqpiglwM;3-)15*6Uzgs[mjoqe]g{g_mrsumsbrkwLTWDEOWNW}mlu|}gl{ruxphytrvuchhh`bceqrmwukk]`^l|tkmk[Sbqxilqk}{i|ypozy}{~cjgfevustnvwzy{xxtw|jgfff\45332\.2322-&U^]dqvtmk2898758<9=KJA8ns|ADDDB;6.*)MIOSUZdflr;=:3LQ@1h945WrszEA<6;;;==="#%.35444011.,3;10^Qc_%"!&1%''%J3.;H]Z[4@EEHFN:Y=p=@S4@eSN*6gix^ALT5H^M@)'H_cUSIO 73n[cZM8wJ;i_C7,<3/00+-=0@F+CSXaDIvSHwD@R=uQG=\\O9Ke/J3cAA:2#$!476QSET>VBKSOTHGLigC7mhHBKdXzNJGP6Zqg_hCEA@?;A?KB4e;>_HDgB(C>=:\4U%R08A34G*7:42JKR$@A_OZ@@3=DRZ_hymdiY[^O[XqNRo`\cOJPchivfuttnc|pliziqwgpZyTtfkPUgdyYhXwy\e^|vp[~^p}z]QIEFpqnضcg|mopZggawmWVUPycsaqxwxҗjJfG{kgxrtraqQPEWGhrU\]vjnNTLI]MwvsVmLeM\lJQGFWRHkh{Zl7EBXNCa:N@Y1C,*GG5.JO;33/04CJJHF@3AAB5<3,-)MCKQH4(!/+*(..:8>3$"*$! R3?2R9:=;@8HB;;+%$#(  !%+-(92**##8$&()**&"'((()))'**,.-#7;(-,)NrSSH>HU77YFFcgWGCF;6KUTUA:YRXE@@?<;?;7=BB>JLBACA??>A@??@@CDA@FJGCBCB?>AABC@ACE@A}FC:E/XMS]RRNKKMLNLWXZWWXYMF41RFPJHHRPROEGWIIIFKIHJKNQRPLHRW25d^XWSMTSOPOUZTU\^LTXTNUVTCB9KZ\_02;777`\VTHV`[[d[Y_X^7:5168=:==A=<<96>=68654a\^1_[SUT0^2^\\YUV41\[WPQRZZ[URWQMT]96k_XSQMOE>CFDKGBA>EFFGEONNUMS[^UUWVNZaUXc4[XORTSST]YTSTVTQYSOUXWZYRSUSOKEKIEJVMNMILMXPLKIKIJGGHE:;JEGJSQMJHSNPQHJGDDBBHJFCEEED>6>Zu7=CIC>DB>FFCGDABECCBMVdYAUb[]\]Z\\eh4bdfg:@9lfdbb`_febgf5=?=;6499:=8a][h667688:;7;?:=:8;<857667898765ieh5jkk566ii4455421651.-*0612332131582/.01144342224 "?8431012/010/0045224113457101./1/3455345230/645779 9889;:2:78789775 %/7 $U      p ","284) -0*0)/"!!! %!"" "  ,#*%)s 2  ++''6%',%!)("36;4#    8+! #,'2+       +  # +  +;$ 3""       +   + + +   %$%    % + + <573") A23 $%))*3%9%07-= )?")2!:.*4* .* ))>&?#+!#J50+"'%L1 //%-!-(!--!##&&#$$ $[<#9oA M $ b^#O*   + +  +" +!   /r>K:&6,:ON=gmT6E)4!% +""4;.C\yh^FPHA\dQ8 +#,/58<>6*$$8<6S'#26%1 '(+('K:(+% (2":  $&,+*4&&(%#*!%,,;#?*08?96P44=@LHRPV_`Ipe>8>Esjyi|xOB874:43)(2&0Z>`F86&-7{6.&*P\bLYOGgTD5F7H?;JKQQQPFGE$/ >(SURBSTRSQZ0abaf[Z_kD :nx`yxyrhcjt`goqcrnwIOR}?A|MSJT{hflu}|cmx}}}uptqtsehff[dedlsr|tgi^^`qwotsaVhw{kkmm{lznpn{zxuz{{z{}wa\[][L*+%&%K''"% KY\eprlb[+.-,,)-227HE;2`is=?@A=4.#;7?FJOWXbf784+5 &/ 2# + 37*&%'7+02*7)77&"$0-/&+D,;%"*=.$34*"7'7%# /, +%$""$#02=<%"'5/H'##,.<53=%'(#" +$6#&%?<9?6<+30::*%""#$*(! 6F,'"+14561-*--%5" 0!#$%!,()'"% +)%-%D1 $-341:18+;)$&32-,*'"' !.9DEB9196!460%)%)-'00+,+3/25B2/18( #!.#)#@B-.7.@%) 'A??@HO@4HMGAJ4A>DNH?9@AYWKR\^FTJDO8PK`,2(@MRE?*;C*?f:<::q:<889;=?;>wB?7:<>9ACA@@?A??=>==HHE<>@ABACCEBBA@BA@>:CB=@FCHE?8lhjnp<>;;qllnpp9q;:qnjk786l76798::997779;:989;:;<;:;;;?><=;<;99:@B9<>?<=?98;;::9ol79<;=@<98:9<;99;<:;<;;;?=:9898:::9;=>>==@CFCA@B@>>}@BCADFC?@<>ELHBCB@ACAABBA@?@BDBBABC<=>=<<7==@>;@???=C@C=::8:@;>>?8;7:EJKGDIIHIDBBDGFFGEHJLLNTTLMLLG@bg7:=@==?@H<7349858984d=<8789225A@7V7R/OO]6;IOLHa^=h "0#-5]DkTw3[>A?@EYD2:aQCD;LYPV9HD'$'"$(13>jAo3PGE9o@+C_vghA$,1%355,>4-T:E)$'&.:&72"" 0C5E47>78"(!*'-6,'$L#/%@=aTL>7-*;!FraUe-cDXS'PQIC(L2,,-+,.1"!" "$"*%'%$+/)$$$+/D!$  @;8:5*.7990%.+41@A/(&+#(M@72>MF;9"#(#$*)$(++,+,+"6$(-*0GRE0=~[yX:\zrKs^uqqZnkX^t_cgnh{jU{lVxs^d{X{_S_V~RsiuapSM3/HbtplKiac|exqOw9Xnu}kntplfhk^nrq]k`N:?;,,387KpxaPXqg^}WEiZG574CY=?G'$`+$5'" )*18FF>E4)+.':@/7+.AFLJE:,;DKTtu^RMlepnLhPOmX@MU1C@$;;*@++1;#?)("-13FDBFid_]ddWHl7,V^?zxug7i36g7gl:hkg6nJOX?.,)),,Hzh}`vylsQitxpgHKwlHLEczYajsviyzXhpnytml|wlpnppkTZRQeXVlnjgdgw||xszkkhm{kbcbx~{ck~jwotnwwzxvkpmdsmkqxvzx}ytuzt{~}h[[Z[Z_^b3c376-,*,,,*Z^dc_`^ba477569;ru?{{zw><=0,))OSR\jpiicflt?>4QKGZ?<3-XipzFS]J3<>? "%*154311.+)/2?1O4 # 5* &&(%*.d>H`S7TXVKb[JQDRHQF^L5=e@alP=7?a]2U<=6:5RV>Fgw6O.3[NF:U;DUE8^Q_bgcS\f@Be9AMpk}bT)ZOULHLVH0&!*2KG8ENXU^ASE]MBIO_OA9AAa^iZL=o?;[@O@dO=B@_H<8>76Cb_5>9=hddF`g?HRGF?=;GLN3@P2)5L.6.@00TKKCC=BD?UJJ3BRO9FI?;67X@@>RR7:-4BGXxhmT{V42TIRYPU]HuxLf}W[\ZZ\QxQPYJlq|xV[d|}t^`fZ}_c~xqcgkepwdo|baSo_oOG]gltYhUVR`^kgkwXSozf^fku{^ipuQAeplWW{i[xe_\RLhpvjgg\zcwnajzziWRbOnuha`~[_KwY\sarufyFtPT\nOh|_fuWQC_GOLE]WNUgU[WY.6GM><4B ;X3SddQ8.,/157542*-../1>?9451D4&'*$$$+52,)+)!"'385ie0_[R2E;5:9;8:>.% ( ',('($1 8!!&'&!##%()*)&(-,,,+#;4#-)ACB3249885A5>;?M/4I;[s=;=HPWSR^djijl]DZ^CABAB>J=9=DCHH?BBC@@@ACCABCDBCAAE=@FC?ADE@A>ACB>{z>>BJFDDHKMLOQIEIGHKLIEEGKLLMMNMJHJKJIJJJLMNPMKORRSQNJT`JnJ]l=AJS\cdchfik::98887678;>96:85238:9>;<<;89:8'6565678975j575ffc3446689<;78:@:;A?:74321p`\ZRRORMVYC;951M,>hK`a13^Z_^^[_1_][\]X\c\\`b\[d^]`eohhe[UW\a__[WUWYVTUTTRURWVVOPTUUSQTUQPPTd[Y[\Z\^YVQOfFRD]]\_`dTgpprsrkjfZMHL@JG@FUVZY\]UOSWS;sT>EDk>KMILQRWUQMMLMNLLQMTRQB053HHNQRSSVIOQGG]QLLINTOKMIGJKVRa53_]XQRSRRNTVMQVOTY[SPUVV?A@KOPb]Y9;58g^[UGS`Z[a[WZST6;3Z^35;CACF>:;=9553184ZX02`WUSQW]1\Z[ba_2\YVSNMSWNQVXXPAJL665jmYPIGG=BEFGD@CGIDHHF>HKWN^]fc___\ZYRNPUVUWUY`XSY_\UUOPOTQRW[ZdbTSXUQNJKKIHIOOOLPRNMHKMOKIIMIB8>KPTTRQQNEJJOQPJGCBFEEAHFBCBAE;_A:HCICDo@BCPKJIE@@CA>`>W8ZNY3][a_a223695gbbghfbbdccc]^ZZY^c89<7864475864fef4feede858:56:9:;<;:6679=:99:86587ml4iihg4f4g..223321200./122202233321005277465644101210../02557943432231//0//4743223244346 6558:! ;78:;;;::653F $75 A!  !!  $"!   " Q !  23;3   !"" !+1!,!"0)%> /)A&(!#)+)#+ .' 2$B73% +   +      +  +  # /0&A $4.)4  + +    + + + + &. )'!$! !  + +   #& + +  A7/+3<2$#/ $& !%'6+.-)"#!&(ME4='7205*,#)"-,7)"",,&"(4"H/$E6$+%!SE5[9$")sC.% #&( #  01 'ykH;!#;M"14#3g.M1%&  +$    + + +&F?;<3&A^;>A&=,-80"4""%"!.17Beb^^gbSFf1#, ))%&'-%)"4,#-#(% + !(1@E9+530;=F6 3'%H?,,=&!3?6;7DB'%=""-)(( "/%1;+&1138>>:672..MM59;C:??;;BEINSku=39;ABCtyztQE<73:0/).'.'Wn\ei^I6/D:?'+>1WX?=iswi?>aMDD:?wx{rr965(# >EFQae^^Zbgr=:-EB?U;5.&Jaku>==).2)%  + + +$ +  6##. !68,*153.6((,!,1.$22(.#*#*#2) 3#69( #34''*$(8>( 1)"*#3#3*1486,/5"#<%<8DE5(/,2.#&)! #!%)+.1 &( ",(# 4191'@$ /'(%8+#!7+"&D4#";9=&8='+-%%!"!'))#--!'735/0)--*,*%!)(),)"((+!()/D4:/F,$$&'(A&)$9B.3:1'%! 3118,'## !*:::==7 %4,(/'#*%+/588C59>;dTO\RS:-01#5!J:"/9%(*(4(&&$,B?%B>;+/#).>+'@Q9XM5L/*(! 2'"!&+1#$'(@"+5$,:$%*7@:*9&%*!H-(;#%+0'%%$ &'*"&! *); + + #&&"(--64   + +   +4-,*#" +   +      *0.!&&*)("-%$%%$!-/65"'*!@A?3,7 !-!18#'*&(.02145+-5467884@335;<886778:;;:<<><<98<6:><7%:=><;7;>>@CEFDEIC@DA@CEC>>?CDB<>?AA>??@C@>BFGFDA>EE.@)06!$*.1014443412/**)%&$&$),)#0!*+++-,,*+,+***')-**,.,+0-.05=671*((*,*+)('())(())(*')))$%())(%''&&&(1,-/.,/1-+()1!&//.0012334:9;==;;92+(*!&# ()-./-)%(,):0$" 4 '&%$&%)*)&$$%&%$($('&$!&&&()-$%& !.'$%$'*(%&&'&#!"!&$-+,+'(*))&)*$&*'+-/,(,,+ %&%.+&930-"%**,0.+,'%%&+(/(&%$')((),,+&&&%#"$&"%())$""9=-($""!"!!! #% $$!#$*$/.21-,/,**'%&')()').)&(+(%&"%%'$%(,-31)&)((&###""#'&'$'(&&"#%&$""$" #%)))&'&!#$&''$!#"" $#!""!$2"!" ! &""!!  .'( %**-,*/./2320/010/,-,+*-.001...0/%6512100/~~}}~ +~}~~~~|||}}}~}~~~~}}|}~}}|{||}~}$|}}}|}~}}}|}|}||}||}~}||}}|||~}~}~}~}|{|}|{|{||{{||{|{| {{{|||{{{|{|{|}|}~~~}~}}~}~~~~~~~~}}~~ ~~}}~~~~}~~ }||{|~~~~}}~~|||~~ ~~~}}}~~~~~~}||}~~~~}}~~}~~~}}}~~}}|}|}}||{|}~~}|{|{| {||{}~}}|{|{z{|{|{|{{{||{||{|{|{|{|{|{| +{|{{||{{zz{|{{|{ |{||{|{{|{{{|{|}|{z{|{ +||{{|||{{|{{|}|}|}||}|}|}|}|}}~}~~~~}~~}~~ +~ ~~~~}~}~}~}~~~}~~ ~~~~}}~}~~~~}~} ~}}~~~}}~~}||}|}|}|}~}|}}|}|}|}|}}}||{{|{|}}|}~}|}}~}~}~}~~~}| +}}}~}~~~~}~}|||}||}~} ~}}}~~}}}~~}|} +~~~}}}||}|}| {{{||}~}}}~|{|}}|}|}}~~}~~~~~}~~~~}|}~~ ~~ǀ~~ 냔܀´ፗԑԓۇˍאىƏᬸ˃뺦٥䘳낟Ԭԗժ՟ڮ溬񟦅Ǒ퀝ĪڪʊՅĴͿ鄏܀ւׄ򵑊ʰ۪‰ˇƽՀ¤񃳴րƍӔնʍ闅Ќɐ􀀨֢՝⦹Ή묙ȼƶ羊􉼸흫£펣ֻ󜪝ȄΓȧÀճ¯Ê꤆ܐ݊팾ܽӈ߉刘ݻՌ·򄃣ι뉜᢮Ҩ絛񛂴ﶔ¿デҶџݝێ׷һ𕹴Ѽ߆ٽƷ͸ǩˀٷ˸ڼҿžʿ䄔ʺͷ璴¼뀁ژ񃍓đĝҗԄ򎏦񸍔˄ꊙ̽񕃂Ⲧ܋ᬂֺÝق݀ހʹǽͩٺ⛯ިƋș˰֬Ĺ͵©ĨԚԩܖΐ·󓖜̿ټ֕ǧG膅ֆ瀛ΉۑԱҭҵ֟ܥ뙸Ϭ򑏏а򭭞ˤٍϰ綀􍜌낙ݯŧ䢥ڊɩȼʾͤŎܟȽ܆ν잷΀֛͵؎˦ϟ𕓍Ը򁤎聄ʷľ»ߡ׆􂄂½礹˖Ǥα˭þɺнÀƼɿ¾ɧݝ߆ŅȀҽғǼĺ၈ûëļýے钎*bfh466468957<=75ie886545545453gi66d\[``cdadm`\_ca]_bafn78mijkfefeb`\YX`cchmq89lkljfacb`]\[]caacik66jjkiiim;;:::@@@?pjekkl9;97jjssq><;:;;;:;==>@<:;;::4:EKOGFGFEDA@;==78998pmlkk889;;9899:;C?89:;:;:<;;:;::;<>???>B?@C?A@BA@>=<=CDBA>C@?<;>=ED@@BAAD@>?@=??CC=;AA?BFFC?>>A?@B@?@EB?DC;A@>A?gB7k8?C=6:=<8:<_8?A=@@>;8:NI=@ACB@GEEMFEFHKKLJHIGGIMKJHHGFEIIPUTQMQPOHBZ;<:9<>:;?;`ej6;4@C=9gh::434611358XRW#y2R9@?J[mhHLHaN!9@5c@^KK5v>w`Y7A82]6]I1=SVAh8iJ$)$!48+>3(NED4kYKP/$PbSKED>0)3h8T5;8C1H198.,$7:P=CD: !7B9)3B"!" !5X/75H=9pn7*L8O{oT*=I[O=Q[C HD$&!& $4765   %')!"$!"&$$$(,&"&))"$##+>2>=*-0,! .((.45!,/'!"PI8DKQ00 #"%"!&&( )((&")-(,1,AYMPFe5{PZU9:chM{wPz}OYVsykrWPdsaK^tq>_`gk|JT[s};%?9Lfs\_YDhd_l^}VKbaQkujfu{mmkÈwkj>FFG=I6YS:FmVGpTuEWP:F8,\KL3JJjT.J5V~U<6K10I0.224*OC-%N6;53,4%77-978C@A>dLJTOCMTA5M|569! &&+*,477"./*),-/.+()SRSX\\b44jga`jqouz{~><94-'*RPT`nshaditz|z<^OGJz?60VT`w|Bn~K":85 !$*.34653323521.+(#,!4#! 2$&')%&2GIs:PoTEM9GP7\UHQ-4I>@-6nQQJFJ^JA<8WcbQKPH@L?>n^mq>NX=kXC`5C_@71LUEkb;4D:ZAldJBLf\MYGE?EJKULp7=A;G497VVWP=8:=ACB1eHC3@-C=MD=2@29@2L'NouE*Bc>;hS9KC@;?-L3:8E,"$S6a8V&,,(%(#$*#FRH;75=;72:*C(F<623.&!" "$&"lZJZN8D>CDGP>7452/ !-$)+!'.!. )( $$'&(&((*$*,(,./+.-,,.),)AB4107==:9=IBJJ^t=;f@=:hVLH:KXeTILTa3A<:Q\]Y\b78;:e\]^986rBN>?DEHEC?AEOKDDEII@DLIGBCBBD@BCCCDBA9=DCCADA@EBCGB??>>?@CAAEDGIGLJGECCDHHKKHHEHHINOOOQPRPOMKRMNRQPNNKLQUSXyHeLg>A@@EKNKNZ^b57445448:88766?<64793`7<;?=S3.ALOTYTSNMMPMMJHBMTXQNIGMHSZRSKRMMNMMMJIIKNSSMOPMGK\PP]RM]66a^XUQVROWSNWVJVYVQXYWYDJGDQS[SQ?:A?=800^4YV2_]ZYTRJT02YY\2a1\[TOPKOQLLVUSHJVQI73ceVPIILBEEJEDMGMJFFHLMGHGJMGEMOLXX`eaUSQMHV]S^XRZ37^RPOQOJRRXUZ_bT[\XROKMNKEIQLONTOLLKMKKIJGD?DOOOTURSQODCDOQTNKKFD@A=BECDCBAGFRKJCDEAGB8P:Ib3MP530.Z36854552aeh3gcchikkd^[ZZWZ\\_ehi5fb49855445hhhjfgd69448578:;>:778;9<998658889665hg=9gg/1141241-,..031@27//020/03248:6762233110.,0224698786524320/./3201553364454!96378656;=69 5/26" 0+ $ $;).:& !J'2#6#>I!=R>*v! ' %*!%#-6$!!!!*+4><8+ ! 0 %%M% /&0iS !  +     + #=%$.R- 1+=02% "#!%38:8_INUL?LS;18? %&  #",%!1+C7++%(<@E?8.(#,2:DE?/' %'((#(8,$&-$5+00(5&&)(<*2%,2ED1.*'1'AK;IFE@97:=A;EUMC=A>C958A@St}q~q\54*+)-$0,YrtPjPHB5GJ-1-@3:CTA{93MiUiH>;@&!=)@?CC(0%/4& !!2-*+%41+*!:)!&&*-(#(";*## "*/32+'0)#,!906;$,74-!8!6#(.*B9)#+<4'1%&"%'*51L *$'"#6864('()+--A%%"$-*($'%'#*.<<#+3&&%+"1 .,&541;! 1/.%$+'"3A=>63@>!84+'#'),3@KHVJSLPB6#>!#24-K)*)&%!',)))(%$)8%/:FQOAN(I'\H|^SFQbwZZXVQKBBX*5.MH(",yh?uG;2/D;3:7;0=+=8IiFH_W6EN77)B/A38.(".%'*'4U$AE&<!&2$ &+#!&& +,&&") % #(9 $ $1$-<=d"* 100)  !  +'C#+ +#"! + +22* + + +   +  0:')N!!      %+$!"'*e'3)1'7D$7!5*'%&6A968>C#*$",0.++.0,-*:$12277861132=@;:=BB89?<:8::<=9;<<>>:725<=;:<88=;:A><<;==<@?ADBDA?>===>>AB?<9=>?DC;;?B??DB@CCB?@==BB@DV2<,;""##$*)&(+.1'14202.+ -.,+&+&&%$#" '. !!,-,*()-*%++)+***,*+*,,)'.+,7:4/%%'-),)*$''-*(')&$$'(*,('&&)%$(3+.0-*,10/*-/, ,0-/362457:"@?@;4&/#"&$#$#(+-,*(*-+$$*$*%#&)*+&#$(%%##&)+'&#"%"),(($)'&%%%$#"$%'*+&%('$$.%#,%!'-,))(+)%,+&-,%+/.*,--/"%#")','$364/&"./,,/.14.'))*)&++((%% ''()+%'%#% ""##(''!#)( 25,'#"# $!!(#'%##"$&!#"%& %%#*,-1.(''%!)+%,(%)*&&$%%!$&**,/2(++,)'$%&$!#'$&',('%%&%%##" %%&))(('&!! %&)&#%## !"$""#""8#$"A! " '#" "# $!, $',/021/2333/.,+,*++,.133/+111411. 2010~~}}}~ }~}~~~~}}}~~~~~}~}|{|{|} |}}}||}}}|}~~~|}}~~~~~~~~|{||{|{|{|{{{|||{{{|||{{{|{|}~}~~~~~~~}~~~~}~}~~~~~~~}~}}~~}|{|}~~~~}}~~~}~~~~~~}~~~~}|~}}~~}|}~~}}}~~|~|}}||}|{|}~}}}~~~~~~} ~|||{{||{|{|{}~}}|{|{|{|{|{|{|{|{{{||{|{|{|{{{|{|{|||{|||{|{z{||{||{|||{{|{|}|}}|}|{z{|{ ||{{|{{{|{{|}|}|}|}|}|}}~}}}~~}~~~~~~~~~~~~~~}~~~}~~}~}~~~~~~~~~~~~}~}~~}}~~}~~}~} ~}}~}}}~~}~}~~}|}}|}}}|}|}~~}}}~~}|}}||}}|~} ||~~}|}}}|{|}~~~}}}|||}|~~}}~~}~}~}~}~} ~~~}}~~}|||}|}~} +~~}}~~~}}|}|}~}~}}~}|}~}~}||}|}||{{||}|}~}~}|{|}|{||}|}~~}~~~}~~ ~~}€~~~~ˀ րͼڍ׌戰䬾҉ྐྵ׽هü•ނ£ɦ䠚Մ҈ƏґÑ웷޿Ň˜ѝùýԶŶ˿񂌗ѽ뇎ɰǥ٤ܟӨޣ΂؈ņꍔ强ק܂ÓҚȈʻř٤Ǯ蚩ł֌ՃДǸÂމѶɣヒͧۏ셧߱ˎѽħòҐчƀͯᙎ惎욏󛀩կо°ڀ聓򃅁挐魳텢惱ꏝɥ㯇҃ԺѵȤŜݽà̺Ǽػſ㈈˶мဤ쀆򀉇ø삘‡Ď񕝁˹榚〄̸͙㠣욀뙳֠罜ԅщˑ注宔Ε킩䓇ӳ؈֑뾲ů͸濙㧍ƼЌߣޟݡ׼ͩէ뤖׉邀偤Ћه􍇋伯͊ˣ綦ީ§惄䒽ɼ̂Ѹؐ߈ɍ븚ׅ͋ތ͎п҆櫻īȾċܯԸ̕܊ᅡʹȿݏľҳ֮ʅ𘟛Վͪ߬ṍۓյٕ˄ǒփȆ讪ԑƳ󁇉⅛􂈀񘚗Ư⿏ſ醈‘禙ijϸྥִ拝Ľʼ̷ýúϴ̿ȿ̸؋БㆫԀ½ʾº¼ٍÅqae`bd9g655:966ijgdi:6456675545576563343`_cegidfh[^diidefjjn9oihiggigc_ZX]`bdcfkmnmnnhgfce`]_dba_`dj8:;;<86m79:89;:8:<;9q96o8o8rqr:;?tno;qk79<989;;;<<<=A??@AD?=<;9:=<;;999=A>=<><::999;;<@GNHE?;8kor;snnpqplkn7::<;99:9:EL?:9<:;<;<;:::;=<<<;>>===@A@CCA?AA@@>>?>>?AABA;BD@@BADEDCB??@@?>@?CC@>?CDED@?>>??>=>?A@?CC>?>>>=:8><@@>><:;>E>@CC@@DHGJMECAABDABHLLGFEHILHHIHHHOUXSJOPFC>?;;>;E;hmGb9>47TF/aiZgGTP!-($8=SY[E?IVR+$/( (+00-55("39$&*  "#Ώ'"(#* $)"+& (2T:_5FRDE]@B\aVc``vfhQ}tkOsgqgBGwcekod]fWYb]yh[b~fdhuJJp]]7IG4D|S]tktbJ}smWcNaɼo\kzbjuzuumb`Xyc9069;N0FqGiE`2QN96WQtUXUOdf0BX0Hf.B]@B! %21% %*.0;C6H+7:3).K15=/3D;(/*#8C5/1'R&(+(3dkd$)C3*=BD#@[HD3+5:')6.)*8'&$)4CBA_7q]sVH>JH2&C+ &)%,-)! #+486'$818&.4''@*0-@..#(7?CKG11+#B6IF>@FGQU_nxqxmvmz}w޹ӻsvnrwqm}r}fjlo~ehrlajcmnglbi@;a;!!!'+3553112331010*&)3&#$ #%&(),'Gc@>0D:L^`?GF>6DG>fE?@EN?>M3);>DicPpD;HH?pkCwPMQCD;dG1PB2VBRlEEmR>D7XcEFL@GHF>\q<$$83<@IHYQ5F*MB,5W044BRFA>@95WC,(()*&AP<42V]^vro\tl]oRENd@KAHIaTKNf\XLNJERKLQoP`|P_^^bvjuoqnuj`~xtZPOO\o^Vebo]Vt{``ey|EU\_guk;lHCkwnvmОiokWagkR[yl]YYsoxKBmwrB\f\`VhwtoX|fkqj{]c^qx^wOESro~_cz`{ebxx}fgchbgns\PqXIiShuKho`Q]iuEqRN[_WcNM^sG]]TTeZQG>jW^k;oqL}xaCQ@GAGS6D'L)K42(@/,>=N96,S481.3691:?MK(J(,-YU=%&2J90,%$(-713/-.+*&iRH2.3DI7)%#!"")+.1-!!&+ !!#$"')+--./-.---/023321B;7PadCU89RKdKYL?A<888`M8]>YI@6:A@AFR9N>1GYi:9664aPMaleRP.;?AAAX5BVEhhFEFDAA@BAACDDABDBBCCBDDBGKHHCAC?BC@@A@AC@BADEACDCACEEBCJPSVUUOLORSU>XVNMME<6e[SNVQPRYacf=<:5420_^XWZ]]TRLD:<;2RC/W.(Fnj_YZ^X[[^XW3ZZYZ\Z^][YZYVYa^^Y\[ij``\UT\\_i`^USYZXSXSQYTUTORVUPPPQTOOWa[Z]]W\ge``]`a_UU^__de[\`d<=w>}yvqgDhLB8AKSLKNQZY\XOG9/:`GGXHH8O:;K5H>8203535459645423353ghhfcc`][YWUY\X]]_afggg436576465cbed5jh6:6578:<;:8>?=<;:;;:977::776kidglk/1-../55314--1145023-/366344668:645334421.,/1121268:998444352/0322//135]867;;;#?9996  !$#'$!79;:9::9:#'?  !!!!  "#  !   ! !1 !# $'#!#0//./+(+$'!*0!#/0*2'*9,-+  %('-        (   *!*6(!+!#12&!)" +     +  + +  +   +  1-'%#     + + + +    + +      + +" '"$!!5!/&-?&!8/&* $%4>8 -)1& 1'1 + 4" )-! ,- .x@/# $)' 5!/-&#!""#"+-.9.!2 # *e1:!00@D $ --   +      + + + 0& ( :C, *&)&6)*"&# !/04N1dYvWE;O}'   "# %(#,*6)%.;AJA-,!0.?>87.()=II-70*)+&/)$( #' &%'062.+00-012*-/=8;95<9=@EDNA;??>zA37>?wnlmuv~xe5>0()..'/+dp=SqeQ'@)B%&>VSADL6_>QLTD:BI?495A@8@;?(%='@GHE9B')+PN-OGGRbe]akf[=( + +6oh{~lhY`\bOgjjgtxA=jmSIIB~ijjsEvwj~lmo}fu{vamqqlla\gnsvqvu~qi`[]^ff^Za`mxum{~gnwxwnuqmrmd|{tzѰ~sn{}|~}omje\W[V^\]S%#?KN]\\NBDP[b5ihhz{yzy=:5/'EBGLS\ccc^n|}?94QA8Rn7aMJHWqx==5&!*%   +  +  + *7!))!!"%!2 $*!!%*#1<'&( "(55)9%!'(!99>/-.&#.#-&1*.>*%?,/2)%&"&(&",@ #%/,$$##"<'"0,2),+/03,! 8*%8*#$2!#8&$$!$/+#,).742:3&304)#%()) .7833,(G%4/'+0/-, E3-!+($+-#-!%(117C=:/D9.9,%3"!&)1,)#,+?K74-3:7#!#AE99AOFKJK[YSM_iLCH[853))(`/B*) 4%%# (91;$!$#'1)(0*7.-SEIFfQNPfh>GSa]+308FD:J)%9=DO?8HdB&F88.49;:;&F)7.U6pA~hX75\C39AG="()5)-+1'~:66HO* 0-# $/1,3"$ $%"#&+'!#"*!0;CI#0)!/)$!!* ' (A@/0"".'#  $&!       +    + .%M      %%&5?B+6 *'4#0& .$+1+'"$(&&',&!*21'&076,0 020-,4!.*GK:<<;9;999;::;9:=::=;;?=9>B>@;9969:<<=;<=<;=:97=@<==>;;>?<;ADDDBB;9:==:&2420/*&$KHC?FCBBHNNO,0:BACD#""!"'-0&,1131//. &(-.*((**&'%!+#,)7/)(),(**-(((*))*'**+**)&)/-.)*,7721-''++,3-.)&***'*'%*'()&')')()''(()&%*.++..+-44121343,+/0/23-.12 @A??;d8:98mq>tpmmnfcdk68;9>>?>A<<<@B@>A><<9;?=>@B>>=;:?=<=<<89;<:;99;<=?>=><;qokillpqnp7988:;:9:;:8;=9789:<=:9<<<;<<@@>BDA@C@>?@AE@>><@CBBBCACEA?@>EHDA>CB====;?DBACAA=>BAFEDDDB@=>>?>>=>@?>=;:=<89<<_d=75CGDA@BJPPHDFC=<>>@HLMLLKKKHEEEBCHKNLHIICA?@>::<;?B87ch<<<;@C?6A^NDH:`hJRPE.U@HqVhE7nOdWY93=61/DnY7&As '2%)48YEQ?G\;=H3B U2I2-D8eMEH8C:@6QJ.A0<*?0/JKIICF(#1;A,5S@ /4i<`9<;& 03WF2.,A/"NLXP g:62`Y<`=cCDPXiP<#IIe?QLZNTB0(*( !!!#""  #&$"&)'*-,% $1#!!%""X/+$* .4))("&$$<#";89"%%"8$%&" '1+$! *##- !2"'+,2.V:^><@0D.JL;REO[jtaLXZZnkvS^[JF^gWlhBj_ap]fmOV^p|{kYQvUkXnA=,C2W|P`vcYcrjSxSx``~|_jYtlyUcRblG4:BFD19;QC_g1Vhhx}ZE5V^T&23#!+&"*(/5/8790!9)D91(7#$%1\@#&A$3" 0#G1oq*:KS>*DO[N9)7&!6+'63/&%00FKb8Hztvjzsps;2J)E>;/--,3+$,&.A4189<4:=OB?80/0*4?=FB01?DHGN[f؃|ztwnrv{~ͺǹրrmpsnwqfzvysvuq{{~Ɋjld\jfliioNUgqedbnjgW\fk^UTX\97YWjxhv[FE0 J4,)U3m~|~taoHUb_ystb~lu;B;rvJID?NFBrup[xqRsynO}xykc\q}~vtzjr}zeke^\\]sqijers~fcekehbkka]kzwntp|iwys~lshnwz{ppfkgnwotprxwx|ni}{omu{y{rwyxvz}y{{xzvd_aabbe;>6-,,)**))'&321,+\Q2O*9:g^bgr|z~~~<:71TNNUioch>u`d{JE@75^PDViig]gkzm_=dJD7;>?"%+/322000//.-/00.+&,+#*7&!#%'(*+(95Y;<7O;3:qoqsm<8nE8YO65_Ldp>~?JCXd)9dg[-N:K>HF?D``ErB_bGTKLLPYO@5+OU8@Q_QL>@8::kkO@9?djCpFOYwNNbPN_WMQjX~rWvTXfgݝ΀zw{qwisnxvB}q_^cx]iteWqmdmS[xurvr<_Ie;NҞokyR`syOmS]`upjvc[mesmsXDtOaS~gvbemz`YKRgQpiYTOZ?flVv}}n~\lbG[q]NzdSWuwWnmDafxnRoRZLLam^WMAdcujVPdPb^ehm@KjgR>StCHG=>-^QL5$M6<<2B5CE5'+34JEF:F4E3&%&'$ $%## (&-()"(!') &'!%%$*+*,+-./0/--123120@LF?ui[QVddcU9EOGZ>A@>;964ea]VYL8F=@IJ[c9?LB?W8;8445iPEMH;D6@BCDPKA^lqk^LCCBDC@??C@?BKIDDCCBDDEEEFHFHKTXYRJB@?@AFBCGD>G^\HCDEEFEEECIRV_7<>B@>=>;864434459?><<844455636545786:;866311[N@>K01ZPKC9Y:UE,>'&(O?Ck\WY[YZX\Z\bVXZXZZ\\_][]\_cda^[cggb`Y^[V]g`a^dSYSSS\SQZTVZQOSSVVSLOXLOSQV_Z]``Y]`d_bddcbad\XX[c^bfg9DCA>w}tdZPb@HIKbXOXWUQX\CO?9:eQK?Ag5FDLRKOQGKNOKKXRPQJGJP\KHRMKGMKHJIJRFEJHOQLLGSLUZTQRTVRPSUVUNQhaUSZZX\7?AUQFW[]_c][UOOPLIZ`\cW38e]LSXU\VR\hf^R\VZ_`cWRWT.<>9;:AC@98>B>^TV_UY`]TTSQTG:0W]][YNJIXRUPXV[TPUVLJH8_PNQKGHFLJIJGIHJLSRLOUQUTOSSNNNQS`a6<8cXNLMKKJYYVKPRWWX\[[_VNQVYXeYY^ZSOTKMKHIKINLQQJIJGEPNRROTTXTSRSMONMNMJB;>HLHCCBECAGC?=D?>947:BJFAFGCEIKCHC>>=`76:ZP<6013474377<95N644343a4hh^be_\YTM\b\][^ZYbf553454248<:54664fe7;;8:?E@<><:;;8789:=76idg830,-,.27302.,-4/.-.48=99:753234431/-.3110377786788446220/0.,12&7:!?;9785324!   # 8877869<:; !> #  "  " !!!!! !! !I*."&& '-01.+-. %$,&&#+H!4.+*&)###8-6 + %2#!  !    + .26  $ -M$&& 0 ,,$( #J/$*3+/#   +      +C  +# #  + + + +   +         + & *$(.!&9"5""#'* 1'/% &800&(*.)$, /'8$ W3 ! +('-'R&!)8=$!(-.""$J!!6, !&'$ \`" ]'($.AYnvenP7G<%  +       + +G4  "=7AB>8:?dntsdokjtyzf4,,+(10&/,7m{`evb4B1;9HNE14:L(+USH9OOR>3/?8==@E.0:C:;8A9A792/QC9NbebW^_dP J3E,' -)   + + + + +  + + + 3#+'%"(5 6)954&!52*8"%1;5#!("9:6636% .-,(!>') +$67"B"($*543)'"%"$&)/$"/-(5@$;A5.(,&')/%4!&;0&.'!+ 73.!6.(&>.-25$ *72'&')!,#'%*)##22/6>2.+2="B**?KKR_Z\VV`qRKOT~\P>82./2046.&3$!,#/:=<4>-%-/@1;hrMJI.M|:F>A00$9+%& *!2'%#>6 38#(+! +! +" + + + + 0(  . 2 +  +   + + &%$DA94612--"(!, 0/.**$"$&.0"*5% '%('54566,"05:=9:7;<<:99 9==::A@<;99:<[;<936:<@?;79998><<95/4HM?<==>>==><@HHK),*,,+06+992622/$70RF@D@@@CEO+/>G@1,,,'()1;,7(-/3322/.-!!,&"+'$ *,' ,"-('()))**)*-'()'((+,-,))),02/,+2662.*-*'-*3/1/3'+&'(-&&)'(-'&)(**'$'.&'(&).,.//-11504323.+*+20232$$""@DB71+/"%&&4.)..,*-0"'2'%8#$ %'#$)"%&&$#+'%'$#%(0%$+'&$%$#$$"( $#&($$!*%).*((()'&)()($&2.''+,-3)'!+/01G532.())'$-/-2)72$)-+0-+/650)/*,-++*('#-'&+%(-,%%&&$"&)$"!+&%#(',*%(*$#-'$&#!"!$#"#"#"%%)($%*'))'()%%%&&/01+$#%#"#*)("%&))*.,*-*%')-,5,+.-)%(#$"#$%#&&()%&'%")&('%++-*)(*&'&%'&&"8$'&"! " $" $ !!%"!! "#"!.)$J-34..1-+*($,.+,-/,-10/.421~} ~~~}|}}}~~}~~ +~|{||~}|}}}~~|}|~~~}|||}~~~}|}~~~}|{|{|{|{|{{|{|{|{|{z{||{|{||{|}}|||}}}~}}}~~~}~~~ +~{}~~}~~~~~}~~~~~}~~}~~} ~~}~~~}~~~ +~~~}~~~}~~~~~~~~}|{|||~~~~|}}~~~~~}~~}|{|{|} +|}}~}}~~~}|{|}}|~~|{|{||{{{|{|{{||{}~}}}{|||{|{{|{| {{{|||{{{|{{|{|{|{|{|{|||{|||}|||{||{{||{|{ }}}|||}~~~}|{z{z{{zz{|}}}||}|{|{|{{|}||}|}}}|}|}|}| }~~}}}~~~}}~~~~~~~~~~~}}}~}~}~}~~~~}}}~~}}}~~~~~~~~~} ~~~}~}~~}~}|}~}|}}||} +~}}}~~}~}|}|}|{|}~}}}||~}}|||}~~}}~~}}~}}~}~}~}|}~}}|{~}~}~~}~ }}}~}|{|}}|||}~}}}~}~}|||}}~}||}~}|{|}~~}~}|}|}|}|}|}~~}~~}~~}~~}~~}䀅~݀ 񀅄񄈉􂆊釛µӀɺԷÄᚇوȨڣ׹ν޼竐ı˲᤾ջȰƢ٘ӬՀ˧ǍѤ򠨦ɦŰߎȺʮȾżĭݷ󀘠򁋞¤񇒑􂏉ۼ҃ßɃ;ߡӆǹͼ̡햤ׄΚߕꁽĺ黙⮦ٚےɹݔ豈Ƿֳ֥йգئޓη̉吡Ż޸Ń玝Ϻ揪Ҝ훪̀ǐۋ헧̰単ɉԸ׀񀂞éԸǀ㵽¤䊝Ϭʠ鄌̺̯пٺڹ̰̾͸ȹۄÿǺ·˿Ⱥ䄛􇉎ż驠ꬦljѝܪݳ؁Ҙ˥ƥޡˆ̛֋ТЍĀՀңЭ׍޹ڙěԋǢ癩緋ᒩԊ䔏ʜ嶠͉şӭݵΝϐ髉ή˵Ϊʹ匰ۋЬ䊭ϼŠ͂ϊ񈀜×ǚܿި󇝂Ч֣¹好龂עʵޤ淘Բȁ͋ϋӁ씅􅇏͙ºĵ؄졧΀ֻ떬ſԻ͚셇ϦـȀڴ꧁LjƄńֺҦ􀐪ٚ͊򁀉ْʵǁƼŻŧ쐐ַԧǾ»ø²ļ̼ĥԀԾ񂐈Ǿ³ýȯ쇥gb_l75ec3effabf4ia^d5855677655\^4b253537;=763^`eedd`b7779;8lmmnijjllhfd`^_djkkigijkil7onkhdc`]]\Z^g9::;@?1>=;:=769<<<>?=?B@AAEE@<<>@>>>=:tsoq97mefk899@CB??=5ABA><:=<:;@BEFDA@AB@>:8=<>=;><==@>==<sjfiihlnnq9:=8 9<=989;:;89:<===>=<<<==;;=>BDBBA?AA?>>ABB@A@AAD@AD@?BACD@?DDFCEDAB@>?DFBABBBDA>>=;@CAAA=CECFGLNMF@C?==?>?@AA?;<=9ABC@?=><=?>A@<9;>A@?ad9@G +BDA=86BIJCEBABEGKMKKMLLJIGGFBEGGGJJFACBB@==>=C@=;8:9BRL_I=[6VJk5[sL/&K4N}@gLmS;HT:>:15DOUYl)f($%7+4,M9V#`XBU<]?,05FBJDY7YMLE'56A-*"*<4?4:OKRHA@9=1+4:$SHM + .A-'rtNBQ"-M3/5A1T80<#"'9/iU:;&=4:+)LfK:CZoPOcMcej\69&+(/+ "!$'"  "!  "")*""+)+-%$##(&L2(35*<--' '1">2()0" %)'", #,1' "!!;8"!%%*0-/2!8>7B9>a?XFKN7`snMtbV}x>:lLtf`jlQNY]Wjfm_lfv~Y]WQ=Hg[m}z_nfnNnstcnhk\e|{mSY\uokK6;3!.5JWVFmUOZOtrUcsVB0eK_b+18'!0(+'%05A53F+8+961Y2(2?1904AF=-&%;]U><8&$&1%38CM-87:?/A=KQ35*&$&/'2#,D60&0+<\*8HEL\UQKMrjH\,7/5,?HDJ<'.0+%&'# %-4?%(-/*?IL6(;8I//>WPL;(H=6)=U00*=,BE?MZhIRf^FD<.:==3+*"(3BQFCA50=364;06=EE84060/99ABMTvztzymhir²׺Ļllop{qmhsoxy{wl֏怔ǣmgqbhhig`]VW`c`l^f^]in[SXPNTarebatq`jN=,7/2%-GNSmw[ZVNcrv[bn=;C<9AMMJMWZWVUJvRSSRz~~{fztciimulefcUemqnvnkq{|wcYf~snhfebj^ituK{}QSRzu}ukrnt}vw|`zgtkklniovtvny}s}hcs~uot{qgknvxt~{yy{}g_a`blp50-(()'&(*,(4(1-/.+&DMJ+96OT^h;AC}x64/+-agkkjoyiaepyQMKH91^QKNUcu~Nt_T]bPIO= "*01/+&(-,++.//.//0+).<03!!% $'),+(M.-\EC3]51`e_e0:59AB7@:BEDECHGg]pYO9Y_4eFD@LFodTJ^4)4[CG6HBac>ugcvr>\?IeYGbEA^OocT66B.6?KC?l^`d[GT9_I4GLO>E?@SL_GC7962DK9/.RR@8;G55D3/b_F2FB65bN0T3>,?4X32LR<229=(3""&((,,.,L$BD3K=SS3CVZq]PB976(/'04@4%-I#EH<3?BAA60,$&!!%&()1,+*&&8)1)%$  ')*))+-..-/,#+@pAR=PRHt:ODMKGdhE\Ik@B>=;85ec^_b:@YPIABAC@@>??B?DEGGHFGMFFGIHIN_F:hhi9CO^C\>DLX`hgeba65gd497hb3e735i465<:9>?A<;<<:76575668;<:9;422433568::668467543a^U6GOA26ZMEA6ZNI*0)'&%I><[dXWY]a[\]_ZZQ^\[Z_a[]]bb`_g`Y\^aebibX^]]a\[c9kTZSNUYZZSNVVQQRSSQROROJQVUXca]`^`]`f```abdefa`a_bcor9<>A?yrmjc]XNPKHOXG;KEB<[@L/]7<6`bXX\2WQRRSJ`6Y\ZXV[UROTQMQURYWUXWJLV\\MKPK@HGLNJJFEMJBVTLJOOUNKMLKGMUX]]Z2:7c\USMLNRUSSPQTNORWib`_^_]ZST^\SSLTQNNOHJIJJMKEDHAJOQRROQSPRURRQNRNKJGA::BBJC@FJB??9@A?;98de_AVFGJFHGMJHDB>@;5fZ39f"37-23445:9:=O999;854366g```ed`_URcd^_bba_`i45f895754667<;7233f466<;>;:;<:;;975f54/.4///11/.031-/V*--../000/0886745467532100234233667669887332011003 ! 9;9:5346 !  !  :45675788;    !! F " !"! "!! !# !  ! !!$'(# 13!! -1,2+11/.%&-%&B!) !>-+!'$-24  /#* +  +  +& + 7/"!   $  3"   !&&3,O0&-.VD +  + +  +N +  +   +  + +    8$   "   + +    + "   +!4!./+$, *!)4\*3D.$+;!+,/6,"3''.1"/#'/%7 ''')YS1)$''# +#&,-1A2GNj]_S;7B58;@C<70,154>1><;?B95:99AQd^``kfTP- $=MeoWUOzG^nv\jkv0*0*&-7988=>=AHCtU|{RPP}ztgzpafgkqiceePailjsmfkx{d\e}smifhfobjuqK|YYVzzwmtmu~~m|~~|u|̧sq~xmtqgkmqsow{ssrrwva\_``g[6C?%.)9@O^9AD~zs2/(%'V]abbhr`U[itNKIE4+RGADRds{s3KT:42;/+0  + + +    + + #4!(')(* "! ###"#!3-&.-'+(+0!((2/= 737!+ &2%436-$7.>1$05;*(#,&=8/*.5&"('/193.=>#1"$3)%2&"3+>6)"!,#!9234.(,2$'-&"! -)2*('.#&:**'-3/9==E#C!0*#*$#+$$#+-%34'$&-%"-:9!&!&%+''/-#+0,$!%"2!-:/(0&!"""4(0..30=&&%$75'!:;1,A999GKDHJZ][Zd]XbcVLMNJOhRTXIB?E;1.&>45'-$%. >:<= N3-9J?\g[FSNNPKM)7./4;=7>"D4@@SK&)7P9RC9?@@@A7>_J59=?&(J=h058A.XlWO55J4<9C#4725@54!325587;97687<9><BA@><<@?CBJQ+,.5#&/-.1/2-+I<1*LJHKE?BCJRN).0-ORT+39<'1 "&+0310/.214001 ++'",'#!-((('++%&(*,*+*+(*$+**)-.+++-,+,40)+,/437.(-,,/,,27(*&$(***&%*)''()(''%*($'*)+10-0.//2501023444100.1189""?=;:50-(+&%(.%&" +'*.$55#3$($&&&$!*+)%((/)%$%'(##(&#)($'&#%'(%$$&%&(%))%,+()++*)-**,+))'(')-3)%$%%&&%*.+-.0/)++(-+)'.//653+-.,4.-134.--//./,,#$$"#++'&)&$$&' +')&&%(&$$(%#%(%*+()+$#)+-$#&#"!$&#"B !%$+'#"%$'%#$$$!#(),-).,)(##$&'&'&&'$%(,70//-.++().,((#)&$$&"$%%""%$')((&')'(*'((&'%$$$!!!&"#%!  !44.!* "#!$"&#" 2*0 +2,,-1//.)'00,/1010.0.0 0 +~~}}}|}}~~ ~~~~~~|}|}~~~}}}~~}}~~}}}~|{~~}|}~~~}|{|{|{|{||{{{|{|{{{|{|{{|{|{|{|}~~~}}}~~~ ~}}}~~~~~~~~~~~~~~~~}~~ ~~~~~~~~~~~~~~~}|{||}~}}~~|~ ~~}~~~~|{|{|}}}||}}~}|}~}|{|{|{}|{z{|{|{|{|{|{|{|{||{| {|{{{|{||{|}~~~}{z{{z{zz{z{|||}|{|{||{z{|{|{|}|}|||}}}|}|}|}| +}~~}~}}}~  +  +~~~~~~~~}~}}~}}~~}~~}~~~~}}~~~~~~~}~~}}~~}|}|}~}~}~}|}| +}}|}}}||}|{|}||}|}~~~}}~}~}|~~}|}}}|}||}~}~}~~~} ~}}}|||}|||}|}~}}|}|}}~~~}~}~~}~}|{|{|~~~~}~}|}|}|}}}||}~~}}~~~}~~}~~}~~~~}~~}~}~~}}~~}Āـ 񀁃742df4eWa76^[110799A?97644`d4f3559:7mlk7l5m79liidecadfghfgkkhegklmjhedb``eljihn8;:>@AAB@=;:9998<=?=;>9;ABAR>>=?DCD??C@<DBAB?>AD=9<<;:=<<;:==>=;<=>=><=;<=;:::=<<==?=>A@ABACGF@@AA@AECCBA?@DBBCDDEEA>=BCNFEA?;A@ACBBBCHFAA@>C?8:@?ABB@BFFGCDDB@OFAB>?==?8nOi>QAY8;BLIHC?>51AI@9A/K5&(9"$5/+.5IL9K)qD3G\P8JI265F#4.,D6<*G9FR3T@6':36=6@547=&%-%(:)AQm[4*.-260W8<9.`;E:G&2 .=I;!$LL3GVFxneBBHRpW=Mep)2#7- 8:/ "  ! " !"%'$ %$&)-)' %($#$#,$';+81:(!"&.#1("&$%-,*&! *.(7& 1-->HEF# '1<0/]J9IX=rBicY]`LK_nrdnZUdN7aehQYRU\tOoVwh_xNnctogvO0I%pbit|Dcac|incw]hsl`dfsgaXg}lhw~fc`mewbbyUDbC3cAL^izSxxdv[_tvhhd,@(@,8&$0%+5$4,--3L485&70JDBF-43#6.89/C/--EWjT@3&*+(>H?>gfs+>6<>L?.;C0-+&7+7:+9@A:3GFWFCJc?CCFuYRwrW-S^-56]@3B$9a]lqY>/45*,:;>&89>GZZ=OD7419DJHTLFvTKt|yurvq`fqts^LEBKpxoufaiig`Z]mpskZerdgAfhxNTVvexW^tusyunrUgohmjkmps}tomzy}~nZqxuj|~{yuoyhruuzmti^bghkf00--+**(')+(:#F!")&1G\XKB=B\0be69>~~~;5[S-[enrrwoi[h||~JIJH7TOPTsH|tl>oAZDA@/ %)352*$$(,-(*/110"'EM[@V;3"#$$"')*('2"%/8<>HVSMI>EOTLFN::GBGTRTXSR[PQPOLJGH@\T:MFNM}>TaABQHFn[7\C88.F0)D<=@BO2LS8P6"#c2ZEPe8I3IF;DAgEKdVR6EC:Oc>L]_um[VGJV]mJK{udgpŜtgm~pvwrxp`EGsmdkbib^\acVIE~bb?y_sZXlH_hlr|zO]|bWKh\da}fgWij`sMrm[CZSY`ihrd_gts[p~mejuk]njbybdNhbSwWfM}F}cmV}kgqq}{|bpPS\NQJ57DJ`fZJNPSyKQOXxB\Ku}AMBBEL9-IP/1`E/8OTJ=PX,Mh9>! )*#!$,13,*.5:><86//N-B2N/'9V@bfJIUT.+!('%&?AC2N]2A(AA<9=C@8(%!%/%*('-0#+!#$"''()&(,,*+)':DkdpvTMO-6AAE><>?4M@CAA;875e3ca`g8;666fa[^YW]b8756h334_Y\c^MS?JEGDJVDhS9>CS9CJdOKMC@>?@ACFFEEIILMFO4BIE`UDU_c\OGeBMYHJVHRsU7JKGFHGCCDLVYNIIJLKMNV3890/6>91XXXg9=o]TPTQRQWXSUS_rNpPpBMW\bhgefg46icafe]]eba454cg<7:<:9:89:8578778755342cc4:;=B>;65446563233cX/33M7-5%'''$H=8R[][[^2bb^``\ZT[[`[[_\^_dc]beYY[UaiijhT\`XW][ateW^^YVVTURRRPRRUUTPPQTIUXRQ]b`]b_ea\_]_]^^g]dgcefden9{tijohg]WOIIHILH?>IB=36[XX5ZTPORBGYV\T\ZX[ZUWOPITTW[][XRNU[WMHMNGFIKMNSJ@JFBJNZOCLLQKLJJLOWY\Z]][703`XRWPONOUZ[\[PIRjmbbfohcad[SSRSTPTROOMKMNJC<6LKLNTSTSQPRYWTTXVYVQPF@86DBHJBLNFF@8>>==iXa`5>AHOKIMBICEG@AD837]9RRA`838245C4:@=;999<><=843ba\^[^a_[[YV]_``cm:??=AB>;6434/./01./0./+).-./+0/+./087654877331/222444654338998645322596427  $ ;844587 + !  " c :7:8 ! !"# ! $""  "! !! !#! &!# #"! !"!'!3"/$-$! 22..51.1--./+"+-30$ +(   + + 4#. !   +  + +$.4# & # +#10*=!*&, +    +  +    + %#  +     +   +       ,+* 8=%+ &8$* *':X($'N6. *D#9$ +('"+" $:+0!&6 &$5041'#-! '"2 (,"%04F'; >!,%+$htPhR 5" "-X/ "   + +    + +    $!:UqK*&'7;5810=?/$75$))/2+*47G>:=G79=BmSWa;)/=0&51[SfiS3 !%# " "&4MK9IE.2)< (3B%.212!#"<!)%;7?0%$087/!#0%%$#3>DETPFF45/.5<`/F]YR]speqZUW[hRSj|ifhXR0)@'.2+)Y;Ag9:BDQK,@?AOj\WPE90  NEC\m_\Kj\rOmjͪrf-(+$$"-%&--<>XD8M3HCEGYC?sT,28V7DU4QD2 (0]8GG7:"'-8$(&1#'.-$0)%9*8>&'"& 7,-/2"1;*!!*15F>3&H#1,!99!.!EI!$) 4!$%&'%: + + +   " >0FN423*  &    +     +   &24@>)#! **$ '!!!00/.430-.+)*-4.,-20(/(759:8>+=,"'1$(-E=>A98877:<>><<>==?::"))&4,")0/,%#2#+;7:=.0D2":?>=>@;;9>HKFA@A@>>=@$)'!%*)%BIGO*+12-,RGCCGDDBDFDEEJS7F,="&,-/2210041102..3/./2 00!,(+.2)" (%)$$((')*,.-,,*+%((,+*-*-,--*.2***'18985',/)(-+/=3*+*(()()((('))**)&&&*#++('/21/1.22/1//.015.13112107  @<67945/-)%%$$&!!!%-74+!-%&'/,%(()(-)*'%%*+))*((##%%"'$$ '&"*((&&&'$$')+*,**,)'((*+++,+.1/.%(("()"/(*++'&'+)(%&(-/1401./-,*,+2.,-/02/3,1,(32$(&&&(%$$' (&)$(('*(%)$% '''*+,+)%)-*&"J$&! "$&&(#$"$%-&#!$"##"#%+*,*+*(-)%)%%%$(**+*%"*86.0173102-))'(*%'('&'# '%%%+))*'''+*(*+*,*'&"!" $%&($%! 6,20 &##&# ""-+)'..-.-/20+,,+/0/.172/2//0/ +  ~}}~}||}~ ~~~~ }"}}}|}}|}}}|}|~~}~~}}|~ ~}}}|{}~~}}~}}}~~|{|{| {{{||{{|{{|{{|{|{|{|{|{|{{|||{|{| }}}|}}~~~ }|}}}~~~~}|}}~~~~~ ~~~~}}~~~~~~}~}~}~~~~}~~}~~}~~~~~~~~~~~~~~~ ~~~~~}|{ ~~~~|}|~}||{{{|{|}|}}~}|}|}|~~}|{|{|{ ||}}|}|||{||{{{|{|{{{||{{|{|{||{|{|{|{|{|{|{||{|{||{|{|{|}~~~}{z{|}|{z{|{|{|{|}|}|}||}}}|}}||}|}| ~~}}}~~~ ~ ~~~~~~~}~}~}}~} +~~~~~}}~}~~~~~~~~~~~~~~}~}~}~}||}||}|}~}}}|}}|}}||}}}||}~~}~}~}}}~}|}}||}}|}|}|||}}|{|||}|||}|||}~}~~}}~}~}|}~|} |}}}|}|}}~~}|~}|}~}~} +|}}}|~}}}|}|}~}~} ~~}}~~~}}~}|}|{{{|||}|}~~~~}~}|}}||}}}|}~~~~} +~~~~~}~~}~~}~}~}~~~}}}܀~~}}~ƀՀ 𙘆삗􁇂􃇍ɀǺͺި廗顋˳ģҭӿߧվȞϧلΜА܋뾞̼๞ҨʵوΤଜ׀򿰞Ǹрʸ̹ʰڜŻȱն͹綹ޱۉ󐝥ر؜ӍցÝԎع݌ƪХĩ쎜Ձ쉵ӸѓÝǥӀʎݵ󴳞ܒԅ˝فۢؗ􋊍ˇƎٴ۵ғ街񫰀朠ŦûŰڵʒӟ߈܃ށ򆅌踩ȶÊ󀖒䜐͙ؑ񍼮ª䱲cdzี膔Ֆ±̫ȽؕԣȧDzƦ˻Թȱп¯Ŵǀ½ϼΓŃƶϗÀׁхԙ߬ζ٧撑ỷܠ˿Œʳ¢ਈٴȩɢܱԼҙڹ蘒߅ÁȞއ쁦ݒކ㧏饼ÿ긇ہڶ˥푚胓ٞʦٻ͵ûڵ؅ϧΨ𘡧۞ޖڄɷꦜΌɪԱ݉Ӻ۟汧ٸ甍́ȉ֠ԕһםÿ홋Ҷ煙ƼĸDz̵ʣ낓ƒȸξ˙˅ͱڿĢűǠԍ싄؀ؐǏݴӎ˄ÂΓؿűǽ֐̿ߒͭڀȺކï䃣ȋͱ»πɻμܹ׾ǀĻǼǵӺ끈ƽޑΔ򂉍953f`bk7jgcff53bede]]DA743555432d^Z_^\3<>=?=:;992`47356798pl786568:olf`bbbdjhffhmjllighikigd``dlklokiio9:=??@>;=;9<;:;9:>=<><;qmkmnoigjkl:>EEEJHAAB@=;;;:9<@IAA>;;>?>BA=::==?>??BAEA?>;:::qot=999:;;:<<;>=<>=<;;?@=>?@@>>?>===>=>==>?@BCFHFCDBCDBABBA>@@D@ACFFCA?<=?AADDBBFDEFC=>BD@>=?GGD@A@DHDDBC@?A@?BHA>A>???=:6:;:=AB@78>>;9:BB;:jcn?;9?BFEp=@CD@DFCAEGCGHHIILJFCABBAGLLKIIHHHIKG?ABBD=;6BA>=9>C:=96K>D8>@21$020-=/B-@%/,bW91H8ED#7&%-;G2943.2SB7*8-4@1>`PEMF*..*" 9OWSIGM5B6@3A5-56--(90[T4SK.#>4@ %-9;>pN-4NYgAr[M@BA494.Q<0$=4GLNC7?+ /3.")"=8TPSkwPebU1=[6&,SZ>%,,/1+(*,/00)../0/+-67(Vq?A@@La'!"#$" &'))).1+']3:;\aXFA4AZ5G9>=l:FBHUPKRCLJSUYJ_`\kpiexeUSD3:14F_MeRt]CFpKGbDo<4<74OLlKDp;fJFL[OhQ8'6.".8VR8P^FCx^JASCLJNEHCFr]\_DaRA,VVCSNKPHGM[hCD2=H*)('*?I[B)%*/!:>67421@72P5>}NGMd8>MK2B:1N769AKB@=?>BAEM>E;JGFF=@,35M409_YNH?K@b46EZGWY-5=Y<@X_WKI;'/:639?<#'%&,)3*,!)&"-,, $&'(*,&%;F[9]WfmhWOFKRHVEZTL7<:^??<>=<998m9:56fkh`bb^^]beii897ga[Y]`YZ^`J\3*BHIHHW2ZA`C99<9U@:R:WGECBDCEGHFHKMKKNcO?Y>Rbg`_]ZWWjZ:II]J8WW7IJJLQQNIGIXjhVKHJ[NMMMRZi@IN?c`go:@BA?9ih`[UQNNNLHSZWeGfH[>BLW_ce445474ga_`e_^gbghg495:?=>???:9745788:8567567632324359:8986476442221^XV]ZUMGA=^_R1.:(((%$CB;BBNY`^33ca_]ZYWW[\ZWW`bhcda_^cXX[Uh?>>wtjc8nf^\TLGA>a-49BTI9a8?;Y@6A5.@40JYROQZXYXORROQXUUXWTPNJMKDCGIKQTVSWTRRQTPMPJOQPQUTSTPMLMNOOQSUZ\XN6GMOTLMRWH\_XVYUOOQIFGKQTcZc^_bc`\Z\\[\YZ^]`abWmj_^C[/W/4?85-3099;8+7>8.RZWSNTFDUHT_1`RY4__NMLT]_b^a^ZPU^YSRQPPOKCAGSXQQOOHNPMGNBJOMSRVSWORQUVZ`]^`YZ]ZVTHNPU_^UKKU`\^^db46_3e`[ZZ^WTQMJJGIJH@9AKLOUTRTPMP[ZVRTZRYPPKE?=EKDBEMHEBG>>7<=iL]@8=KKL@HKHMIIHEEI;_:a5_Q5d=5;DE6=A5,6>?@<9:=99<9743ecd_^db^\Y]ZY[Z\Z^ZWebc589B77FAj567874876ggh59;<<@B<<>=??@=<90-/421/10//.0*,41.*,,-,;898512112743358357g8997521276775447  !"87789;98666!!! #! " *#  <:=!!8 !"!##"! !!! "  ""!  ! ! ! !   ##"! " 125 4!0102." # +  ,D. BE  r ,    %! , 0%&# +1,.6>E%- $,)* >$,*.%(&&#-4*80"!*"(6$ %",5,.-%!  +( + 0#)#/47)M'"- '   +* @?XKI"(3( d~#@p0&'R$IQ3   + ##(*   !$ +~M,%(%+,"+$":*X=1?;!)(  -3:oR/2EK[D/=;!#)(#*6;-1=:4;5(/09'!"(,) */).2)$"13241$#$,.-#!%  !,3/(-2d7RK>Q?F6J98:(#>B@B;;:;:72355:>3E7E=97<9:<6=47,8:>YZih,)  2[>:H^OjnnlO]ue(""! $.99idDZyvqvnou{wpkss^ggdcjYTGL_k_JS[ghjed{fhhc`bqmnr|{{mquzq~qsf{{z{SV{|vp|u~xxzmKdf_X[`f] \"%&$<5ZSSZXYamsunpjrstJH>81HHKft\RI-982"3.1 + + +  + + '; !(1 + + + + 0(++#(2#"$-(%*"(%,.1*21*7:65A5,'"'6M-8&?4&&;+*5$@!+&8$ :7)(#.+<*(.'0&C2'!-$%,.%&"(E54:'1' +5(40+.**)68$$#$!-:) !(."Q-*-:!)--+$2(2+)')'+,+0")!)*-%#(:.&,')!3(2.'&, -. ,/ 0'#+-!*'*%$'-(".),).3;(NWSB9aNOUVRVWTVX[_[]ffcSFLW7\Q\Vp?5^+'+7*!D%"+'(+':4sTKQGCEFGIC<>D-.#&'):B[SON+IH>FE3>?=69Bbra8K81@'#;e}cQ?8UHVFJU9Af;H5>I3Q-E79G<5;3&.&#'&!&%&!)-/!/*%' '!*)-60)--E"2*/'.-',G?;*""2>L3A8/#'21 C9*$6/-1%*&&=4& + + + '     + +  -0-4<5)'$'0+2'83). 5385121//.03520.++-0*.24'45;96330#/! . 0%?8:98:9:99;;;=F1$0*140-,**+5. (,?6(:7#58?DHGDA@BMYVIC@CB@>A???EGQ06:0NLUZ,01//*OPLJHECAC?9@CAG.>*/ %*.0140..40/40132 +(&*)'#! .1-!%()$ "'**-,-+*))'(**(',/3//.--1+))'6!:20*/.**+*14,*,-'&)'(&%)'(')(%&'))+/*,-,31/2631/2,,,0.-+321236! ><5063//+&# .*#+('&'$-(&(,+,,&(('),*+,,+'($''$"$%')+,*,*)*(+(&($')((++)(&%&&''')*+01.)#%$)#!$'!++'%'&$$&"!"%&&0+1./030.-//-/--00210*66//+"!''%"( )%+,&),,#$"'++,+00.(*0.+)('&&$!)-)*((#&&&#&!%#&&'')$(&()+-**,)*-,++"&&',+'#%+0.0031+0.,,,.)('&$%##$"$%'*)(*'%&,++)(,','&%! #%" "'$#!$ 8'0!$$%"$"%##"!"#//1(('0020.20..,.-,-,.,-,*3// .111~}~|||}~ ~~~}~~}|}~~}~~}~~~~~}}||~*~~}|||{|}}}|}}~~~}{|}|{|}|{|{||{|{|{|{{||{|{{||{|{|{| }}}|||~~~~}|}}~ ~~}}~}~~ ~~~}~~~~~~}~}~~ +}~~~~~~~~}}}~~}||{{|}|~~~|}|}||{}~~|||{|}}}|||}}~~~}}}|||}|{|~}|{|{z{|}|{|{|{|{|{|{{|{|{|{|{|{{|{|{|{|}~~}|{z{|}|{z{|{|}||}}|}|}}}|}|}|}~}~~ ~~~~}~}}~}~}~~}}~}~~}~~~~} ~}~ ~~~~}~}~}}~}~} +~~}}||}}}|}|}|}~~~~}~}}|}|}}|}|}||{|||}}}|}}||}~~}}~}}|}~} |||}}}~~}}|}}~}~}~}}~}~}}~}}||}}}~}}~}~}|} +~~}}}~~}|}~}|}}|{{{||} |}}}|}|}~~~~}|}|{|||{{| +}|||}}}|||}~~~~~} ~~~~~~}~~}}~}~}~}~~~} ~~~}}~Ѐ  琦ʽŹ󘞿킗㓷̀ƹߺ튖˵Ӱ؅֗ɚǮŋː݀ʟ㊝֪Ŋ֪ƽрûöײԽʦǡ󔕁߅⁁ͷֆЈʊ䞔Ɔ͗ͪόԦػթ흛ǎÀَܪǒ򨀫†ljͦʑƖ܁Ьί䨑ńְܾ󙛨ݨɷ܅蠏ї󕪄Ӕ菣ڧү矑вɧ֠⚦䓓΁֒˺骹煅ܶԳmֶĽ୫߁ٛʢӲ؎çāƪפؓƬŶεӀ¿շǴƴ¼ʾÀךǺѨӽƭǰꤍӢㇻ—ųӼ҆贼ԴǺŬ؉Ÿ͓г뜔񁒂ց㯺ݰÀפݍѭԐЋܟũ᳍ͣʵ̧ą괩ۊƓϘ̘вħˌܽ־̨ޏ߾״݁㲘̾МɈѺ왥تַݺד댥Ќ׆䤌㚜Ďͭ‹ǟč뽭ԃͨ큓ܵіė㳺Ͽǔįˉ𗜯Ā̜ȓꃄΰاƼΞך󁋇ỻ͇ѳ䈥倀ܵѼƼƾ‡ł¸δݭҀ݅˿³À½ȽµŸŰ삄ϪųϾпŽĹɾľ¿ȽǾ䕋𗢨싚BA;:9g`ai55ghd_^_ed_a><;<=?><:;;:9:b9;<<@@AB@?@BHJD?>=;qupmqpoqofm?HMKJFE?=>>==<<<;<=>:9:?A>==??AAAC@?<><<;nnpm;?;9jk:99:;<>==<;;<==?BCA??BGA=??@>=99=>(?ABEGDDEEFDEGDB@@AA?BAFEDGE@8=B@DD?ADCEAEA>CDBBCBDA=EHNFGCCFB=<=BBCC@@BC=<<:<:;:<7dfZchkC@BGJ@k7;:==@A@EHEEEGFD?@F@AED@ACECA?>>?CLLMKKKJIFIKF;@DBCC=4=BC7:>::=8d9fi866466567>8658A@=7=FDA?>>=<<5178995?877=:=9397@;<8M1?>72,CGJ7M0Cd7$',55V<%zl^EJ+KvK.-=:7HX0-UQUUcS3UV.//J@?VUM<)64!$88W)2/0)76C89J3-a3IN"=%#>I3C>)Lz X7- + =&kc}podORf^bhOsmC~NIQ;JYN_ZK84[3;5*9D=39PG;=ULht{<71,,*G(*/'6F>?6783)'03,&L*/3,)EBK89;47H1.9#.'),,*('+**,*"),,-) E1;!"$&")*+**+*$Q6@P=0:0>GJ9eBNCR>T3AJB<@G;7<;BFGbggDI=_QUMI=LgnA?P?JJ=]Jny[>TUC^DFR==YiRCk@J@IMp]=UXac6PJ_kG]@X]H^3T6e?CD7]X7TZR1:4H5YD?B@EMPFBJTBQS976EHS))5A<.;'IU5D=CMHJ69,;MR]Dn@?JFQ3TH-1M]~^uFJLY[epk~H|taWkTCTuwjdtPceYZq_pOsZ_sqxyoWRTcpTxj]q\qn[mib]TfXembgwgSGit}udyihoKD^ppQopVX{elfreAhQxRaIKNPK>F@l9;=6G@IGICYUAEV/MODI0CN9SRJJ*4J1M(+MNNOI<.6+,B8+$="QM0LXS@WPHYDMwfP7,9@#!"/[+88J4,9<8@D&" :  $#!))#!"#$'++#(:WdKGEHZcr?uSE)>O-EOyB@?=;;<86h97c8<;7_VWY[]U^fkk35:95d69=;kcN`V%CFK^FSEeHVkEPITQ;RRIfe7SECCDLe7gWMLEL[8GFCd98g]XXSURWP:UvJn?[^XV\RHJMLJHEDEIHKHFHHKJMNJHJMPTOQUX]fjnkog_YUSWWZUSQSQW[lnAV=DHS6GXbh5h65477fb`a]]g7d`k867;9=CA@>:9;9623689973999674`46766775676534311022_YYWTNIBC:WOB-7-'''&H@55>dYW[d_12^TW[YYVSXXYXZ`aeh`ccib[XWXeo\_[U^ZRUY_faN^\YNUURRRQTSOMRMOPQRTTZW[\[[`_e`_b^\SVUVWa`bbcjg8?:;>?>?=;rYflib[URLFKB89CIN<=N0a8]l)$CF61ZWPNLQTQXUPTSNZ^WV]ZVPSIIJF@JNSRQVSUVUSLSOLOQMIVXSQTSQMKMJJNOQSVPOGKOGIGLMQROX]`ca`XOKNCO]a[`2]`1cfffe`ac__\_Yac_\78`Z8110..A<<21.54;811?DB3TNH\SH@]JD\1WIIGbeOIHMPY\`_[VSQOQPMXWSSWWNHKVXPLTPPMH>@EMROV[`4_ZWQLKOWU__`XWTSPKKTVYWWROJNQNPUS^[\3bZZXV\[SMJJILJGKIF6BNMNNQRNOUY_\XRXVZURNHHGHLIC@FEB?IG?cEEV[h?7;BDOBIMQNGGIB?C=`_]39>:&834aR8;<97AB;>=>=?;=689:74fif[[ded[[ZWY1[XWVYaa;B??:FJGFD8c`f7f58347;;74fdhg54577889:=AA>U1.-/00/..-/.,,-,+,,))+:3001301376545877677544:9762987F #&!8=<;>=<;:34! ! ! !  ::<987 ! #    #!!#$%#""" "$" "! !!"!"  !  !!%!  22+033 !3 ! ..1  # N>)&9 $     + '  +&J0  )!-$#>.),*6)*/*$"     +    "  $ + +  +    + + + +(0    #0   +B+''2(!,*2B>(&<,$2#%4;$<')- #!! *   $ && 0&&/184-W&:$ ,  + 1!&(&&#%(HE@5 +$+* ,#$( A8& 34VTm@@Xn  + + 7  + +#G  + +.8"!D$ <3)("#6 <2935-3+%'B34"$ +)',0%=4HIO6IRK^WH4,@)5-"1:4)0;:25Gab]>_5F=%'576/DHJT:142/7/.=?/DF;K96D>D@<4357785<>AHQ  gPV4X==f]`d[_yq9)!!  %23),,(%/88Y[xusgwtubbrgsuja\daTd^fgh\__BR^ovqdehY\fozxmu{}DnZgevfmwwyLTø{ခ||}fhojcbezsd;96CT^d1.-W[PENY2585:;@7,QY[15nv{wzmHihLG?647'@CqPS@:.+#" + +  +  + + +. &8 $ +  *$ "'%."%&# ''  %&236$*1%(%&")/7$#*! '$:>+""0*#3&'1oTI@HLDJ78@%E7B,! 0.9RRl]3HF>MA>AB?<69DVH2?4O7'%1GaN5;-4W@% +  ) +   +  1E?5*$ ".5A%G0&&% *= 4.1,,,./)/466072*95"$(819+9$+6"("&* ,,&69"957115F(LD@>33;#(%"33/-,()(,(,/H-EJFFKD=CFFB@>=?C@CBACABBCDA?ACDGCDIMOTWWUXQKEBBGIKFECECEFPL+7#'*.#,0340001-151.3 /)+'(('&#!.'#$"#&3(&).+*&'*2&))*)(+.03..051.+((3=/0+).,'()/30&/,)#((&'(&'''%'%')(-,.---1142120.(+++*//00152 !9)145/+)(%"#"%)0*2')$&.+&'$'(',*'))&-0,+/.,(*$%'%!&)-+)-+++))$)'%'('%*,*)+)(&%&$$'()*-))#$& !!$!%%$*+-,()(#"$&+,)++-0344622310-1.430,2-#"+'"-!*( !,0%" $%)),.-,+)&(($,+(),*%"%,.)&*''$#!$(%(*-+)*(%$&)&,-.*)()'%#''('(&%"$(&()'/+*,()('+,&$#$#%$"#"" (&&&()%'+,//-(**,+)&#$#$'$" #$" %$ /$$)07! !'!%'&"!1#!/0/"%"023-+033---,/+**/- #!"!*+//0/12~}~}~~~}}|||}}}~~~~~|}}|| ~~~}|{||zz}|}|}|{|{|{|{|{ |||{z{{||{|{|{|}}||}~}~~~}~~}}~~~~ }~~~~~~~}}}~}||}~~~}~~~~~~}~~~~~~~~~}~}~}|~~~~~~~~}~~~~|{|}||{|}}}||}}~}}~}}|}|||{{| }~~}|}|{z{zz{{{| +{{|||{||{z{|{|{|{{||{|{|{|{|{|{|{|{||{{{||{|{ |||{{{|||{{{|{|}~}|{{z{zz{|||}|}|{z{|{|{{|{|||{|}|}|}|||}}|}|||}~~~~~~}~~~~ ~~}~}~}}~}}}~}~~~}}}~}~~}~ ~}~}~~}}}|}|}}~~}|}||}~}||}|}}|}|||}}|}~}|||}|||}}|{|}|}}}|||}~}}|} ~~~}}}|}}|}~}~}~}|}~}~~}}}~~}~~}|}}~}|}~}}}||}~~}~}}~ }}}|}}|||{{{}|}|}~}~}|}|{| +}}|||}}}||}~~~}~~}}}~~~~}~}~~~~}~~}~ـ~~}܀ ~ 񉤩񅍖򀂃􍌈ý¼ꁅ阆Ꮅ送؂㌰ŗ͈յǀȫƭނϝҘÔɯӺѽĽԀڽ嬞ՠɮϙӴ킈耐Ʃ̆ʴĩ·ź딘񛾭ґ΃Йꚲ셴䂇򺢄LJͪβʌԤȘßʡܤӇ٘҈ۚɕ뺽Ѱ胙Ә蟺̻냅يכՀ򇕋نԁ߱⧌و󜕰ȳ򁈅n•лʵŒͫߍԓ俾ȊЪʫיũ̀̾ȼĿĻ펆¾À󖟛⺣ң첉²π߃ѬʦΊͿՑ ѐ钤؆҇ӥźŀ掾Ґ󾊏󞃰ٶ߆􃌾ݕק˞Ƴ֭Դꄑѯ˄ٛ⊻큦Ӑ􁘃꾫ʲ˽®Ҁě塇깫ʴ焛çĆҜ˹ȅ꘱Ľҟȥ׸ƫ㮉ᐉ˜²®㑨߫̊棕ۅõɎÛɝȻ鄁췌⢘ܥٗ㳛ΰꏟ뵭ܡƺÿה⵼˹̀擤儰͸Ԍ؃ɻ傈͂Â㒹ᯅ̜̔ҀŸ⬊뤉䪄δځ݀ːý􁩁ɯ껑ڥᰜȔڀķ򴾭ԫ®ƺĈ؂ƾ׾úǹſùƿù㘏ڭ<;<=<<:ii7kfbeic_dhfX`>M8;?_b?;93741<;95_XZ]4??==6798:;:89<967898p9nf^_bdbdjl6mkklfhhggefj679:;no:rljijn87pp::99<=<=;@DA@ABB<;889:=>@@A@=>BBEEHIEB??:qpollkjl9>@EEJJKFB@@B?>AB@@===<:?@@BAA??@@?=?CAA@@>@?<;nm:<<;9poo87:;>>?=;>@?=<>??AB>=>ADA??=??=<6:=AB@@?A@ACABFHIGFHHDDGIE@@CDFFDDIHIEFEHIHCA@ABCB?CBCFDEGDEBBDDBCAA?=AD&IEA>9<=<@@A@EA=:6[onij=<999;h@BA@?9<@BED@@>A?@BDDA?@BBCDC@??DKLLLKLJFDB@DFDGCBAAA5CI<778;b68?<`d7h7;87768>;97;>A@CCB=<=::9:88644516687==<47891:[L5%D$E;>EOoN26J'9'@M+>V8?N/0N-J35WROURPUJA07<SLVxXOswG;M0*)(!#")!#" !#-&*!$( ")'(3.!!!#&&+;1544!"3--/ &%."#"(.&#""@"#%(+*+1*&,NMN!\^?Lfb[_JqW}j`fmenbDM^[ARJYwmm^ZsZllkt_\z|^dc{}|eqvcstVQOdv^Osd[r^^egat{svra~ietg~i{Y>bwzzb+>`WLHQgglan}b_XY|qk{[lz\-..-?8 >]N*&33*C/@H(0&GV_L_,)(147.("8794(77._p@RjOMk\Z[t~zEA;E?:2+, ;>h{{nf`XA*6AGLyv_\[il[~gYr~ylx^z\XRW\fvndeUWJNjkjgogclxIztqnvvkdtsu}vwvszvlQsiggmrtmprsx~upzz~yyzsomnvwvl.**)))(GC@73Ocdcpsnrs;?~yp785\6;;@:k[04WWTSc}psIEBA>;;1CCy7OI'<%":L/N4')***,,),('%''$%)('%"Uam|B?9:=BGQ-!!&*$$(+)'.F.?YV??P=,B:jKHM=5EEE999I!*;.4V3OX2RE4:EDFJH0W8;T}RP((%BC#"%3ZRVR6/>LMT@4XB7hhY9[23HDLM?AEBDIJBB78EN]o7>9=Eg/YE<7P:8+5ROToKR;9,.082R*(SD34((+'DqCPZo=110)9B$H?DP56:036C8/"$(#:9&*%% ("!#'&'%0:GnCC|\P_f:D[RQQOQOGGJgIGHHKIIFIIJKLKKKIKKKLPSRT^a]SOOKOQSVYZ`Y\ZW]gl:BL[i5H7N`i764h55476ed_cb`4=8k7>;9<<<@@=969:854d579746:;87665677677655855442_111^YUUTMC<<2YH5MK0'()(%@61@eFU^Z^a_[XQS[\^YVWRZY]ZX``]Y^ab]^[\ae[bZZbXTYUgfTZ_WURWTSQURQPOPOMQOQTUTWZWZ\Y[Wd_]aa\YTYU]aiefj899:;>YFLIMn=;Hin-J=389EVPUSOKUUVSUV[\^WXd^YWTIGIJKMQSQPUUTUTUOQOLOPPRRPVVVSPMKLMKOOG9>9;:DWTLNQIGSYYQVfe5kUYPT]b]jYa1\50aegea^]^bcaaZ\h5l;=S,R/5-T2=CFNJFHMPUX]^c]c]TQQRX4_WKRSVUTSTPSSYVTTOPKMT[]b\Z[YUWXWQNLLLOJNLHDIJEGHOSPQVX_b\XTUSQQPLNMOMIGC<@<>CA9d@oWC<8:>>;CEHFGFHFFE@;:ab`a`@A3:91V689:=@BDA7<<>?><<<:96483e4idgi`\]\^]^]\[WU^cj;B@9:C8@ILH]4cc^a9=;<:996689idgfhhj7:;3131//2/-010(+%'+,*++8;700232156568:678755445774566966!!3  !!#$"" ;<<88996 !" !  ! :9:99  !!  "  ! !#&'%###!!""! !!"! #%$!!!"$$   ! !#"" " #! (1343. :!-+.. #  ,L1=$  "'     + %cTU&/2>=*%A:!&"2+!$$ %!$!) *!   +   + + +    +  +    $  " )8#$,,! $B)3'%,# &,"L$,"3  ( +),/,#2).!*$, 57"!- #   5$* +#LMB&&/3$#%'>.GZwCs F   !&* :,40,%5; %;""3XBa>?"(.5,)/.("*$+3?%5 '  %\QcrjF:*.1(8355,QN7A9FF9+'!).=1.,-+&()=<9<5=/-&&&)'.9:??;AVSV[?rpYunmDk`VR-A.#.(./L@(HJMC:87RXBa3/'=)HI='EK[E:0742<20462CIFHA?D<@=9;435./678/8*  'Xg>JbHGe[^^~ђ:,"& "2cvsj_K?+&/>qymmgru]|i\opf]UOTXdt}pfdSTGMehlkmdgnyJ{upksue`oltxzyzwy÷^{uz|}~~{}~xrmionmW0/,%+@RRTgmjsu;;snc141V356:3]Q+0PRPM_xpyIB;71+,%8AhO 3',( + + +  + +  (.6E%"#%)  + + -*)"0%$!*)%.%&#%"!3??-+?#-)A.-/)-)+!$">3$.."0+),1)7&6"$3:/-:25!24>$,$'--"!# !%-)-*&"'"2#"2L2*$$7X/?7&)'3&1'@@9%:!!,)//$""'-13*,#)./)9%"+00<" (*%$11"+*" 5+)4++8"!*!'&##&!$*'%+4NOV]Yag9c_dbsUIWWZl]TPeSJWT_YQH_7S:9oQJRc]G1'51))'$&2)$#1.<;ecUNBPOGNAK(,"!*6.1$./2CyypY>@MWA6==::;;60+(+L9(,%N:ar-6119fdH2acNw,93E6GP,Q1HD0*G1%%$!%#*(=?*.334.6"3'3$;/105.%,!! 36' $!%$8%)2?0).3'3##!",'!-" "       2&5<+R0:g8>     +   );"#@,'36#>)*$#&/ 656341-++,,//)-43233 $).+&+1/",36-())#6("(A0#?EEF5(?6@2)2&25.-~+,)$*('3(3LFEDDEH?@EEEDC?@@BBB?BCCCEABEBCBCFILKKQRMEBD?AA@BFIMFJGFJMP+.4<5\TTb@?>=<:79=?>:5<:667:;<>:otoc\_acehfklkijeceiijh679:<<;:;<;v=;;===;>A@@ABB@??B?;89<=?@?>>@CDCCDCAFC@=;qrnjgiihp=ADIKJEB?@A?=>DEE?=;:>BDBBA?>=>>ACA@<@@=A?>>rt>;r<@@=8oq<=;@B?>;:;<=?FF@?=>=;>@?;<<;;:7BB@D@CD?AB@=;<@?==?@A><<@@<7<@BCFGC@@?BCGGDBA>>@FIKJLKKJJG;BGCCEC?CCIKHB;8889>hb76h578OBi59769753;77;:77672.6:3:>?>736678.0/92*40Y0O#M\7dQ=I1a`cQM8djhs(/=-AE)'E2,49&G:EA7/.6+ aE.p`inK0Vf3arjvFb~VD^MI:=r@A43J@=TBYH<'/*!!('&$#"!"#  (#!!'%*4&! !"8";A74#1!I% #  &"&!%&&*,)(,(1.(2FNA_@WP^D:CcXcu_kN\$8>CM/332JL3*I0igJT=jS'"/84!:*brKVcjVCK<#2G^_]S:H6^bgD@B?4147BFLdomg[F;5/=NE4668DLKGi:/.-01--/)9AI2,8ODE,356*5+,56'7$"+2.5??@MTPtuxfonxnfrvƝƯr~r䲔εtvrgsvmŒ㈉tҽ遂ydsm[`VifeVlliqoimosdZVPOQOGG4&2<8>;-$.-'61JrX^\GNzPdYgy{FH?DE@5*/#7jvsnc]qhr;K.>JRsRoxiv}^Uxdxf|oXw_h_YTNUiqko~hVPCJaggd_XgqGNIGtlppxN~QtOwjlamwoprrsv{qxw~~|{zlruufogVLIEKSKHILV]gsxny|}BCEFD@>98:843cg6421\C_ISs}z|z}tjOMIC@>=>98-97pEJ)($"*.Duh$0)-&*+,,**)%%&$#!%#!).*)Tt>GKFGFJHEC%'%'))%/*%4cZ,.7gh=.QCKHMQ`>QQ:9a7A=;h@GfPT-mQ[CpFXAQ\;VE@a[ANr]ZCX[671L!+=Ujb2b:@)P*"-6ENBd5?B9F 2/*F./TMS?;?=I;75:4XDLF9B-XJHBZ<^>O[7RJ_I\>@5X:TiTvORlSwe~όt_q늈~g_xbeprlbcRr\kY]c{vIESEVcjUWMLhax[E{teTKMfcQTW\]\obfsPGReRGVMMQOMFi_~[xlq~gkD[]]csML\dvya\rdxvRsa{s}MESFeb\WVX`nzUjiZd}XETGj@KSlE5^()2;! Jq?871A3,?A-=%&   +7"!8%#%#! =ES}zdWJVsC?7R4:92=mkkFO^YIK?`Xaq<^8jePI?3VPMA1AQEAHJIHKLLIMKLKGIEHJJJIHIGIKKJJIKNRSX]_UMOSWVYTS^i;?;:;;77nkrk]_6=FO>nSj99:876ihf7bdh5i88999>;97778568844344h6::<=:;;:955897865867656533243a10]YWUPKB75YN=42-5&)(&&G<7>Aa^_[\]Zb\\X^YZ2VPUV]XYVYd]UP3\```cea`[e```XU]Z[XS_YWSWWVSSQMLPOMMPTSQTSRXZTW[V[YbZZ[g_\ZWYbeinm78;;:<=@?;6jd=bW88fkXPKNJ7KOFBGERhPC8N8&D469EPTYSHEU\\WXYWZYEQjd][TIBNMNRNLVVRWVTWWUUSTUSUURPPTWRNMNOMI_':4>/>.M7d[POJPTRVRW\\`[WWMQR]Wb\aUY172`^\]WVb2dec`bc675nG8Y^2.X-68==00-OO137;=DIPVTTWNPSRSQKHE>FRSKPGGSSPQUZWSRQUT58dZ^TZbXVMLRYcc_WWVTV[]XURRSTWV\VXUVWWXUPKIGLOMLNMKILGJGKQQOSOVZTWRPOOQJJMOMDCFF>;8998Q6XW@?E=7>A7;AHE@CDHE@A@C:3eW8.C[185T5779;;=A;DC;><=?@><<;853e565id__```c_`ba`_ik:=>;9:;@BCB6865e`c:>>9>>:;678kjgihfegigfed +41.P0130,%-2*'(-"9==4/0123545466742454319832; 9 !! ! ! "" 8<;857754 ""!!"!!  !  !  :=!; !99!" q#"    ""#""!!"$$#!!$%"  !! #$&*+,#$#%$!$! ! "$  7573!//C 0,/'/#.+(6=7.   !)$  +.4 0.$ '7HA%#)8&.!!2 "& X    + +  + +2 +  + +  +   * )4%&/!1-  ,)$H'00?%991%-"+  /-*1'"    6'! &0 *, $ - !/ & +&'*>H.!+'L-+,E2 .#%&   ;3$  ." % +"((B1,.-5MH;A'B<129.3:.$8;),+#%@< " PVCP7]=  HhLYv~gOJ-0EFH>0>0Z\Y=8=9/,-0=EPktphYD71-5@5((*/=~FC?\1&&"&'$%& +3;) &6/1!(**' ))# '$*344=A;X^ZR396:6:3(.2ZA\PctGLk>oyWBIvhwr~i~g50;7,$*2P^PB#IcaWH+.ALtJMJ->GA9><><701('% + "&AjW\S?KuZkltu9/""  !QtpnibYme`+* 0?dNo}{}_Sybwk]v^c]UQOVjrln|gSN@IellecWhpJSKG{ynnjt|PSyǵ_̀{k{|poli_jaK?=:@D>>>BKS_kpju}EDDC>;94443.,Y\-,--U>XERmvv|{umOLD<6.&%!%,1d75&C9 + + + +  + + *>"')$%%'%  + + +2-3:$,!$+!(",3 %#  "-"$(.112D,(/$&#,#!)9&%6-0&D%3%,1*(":4'+@-2$11#/-0%-')BF7! -630!% $!/$"% 2,,   .(.,#)740"+*!4"@5;A#3+'*(.)!864,.%)+'!'4F-("#$"$*2 (?*!0:>6)?!(.&(2/("+'$%!#%)!2'B <3($&%=GUZX^]bhI`iVMVUJHLRX~wSSNBPDFfbL\KfJA5cQf`aYE0#1&+/(%-04/++"IGGbc`LV^_UPE+3##*:@#(';sPSmm)&DdDaJG*6C9*& /(1954(%!,)'&*>9=BD@ADECBGFEC@A??@A?BDDCCBDGKIPUWNDEFHHKFFKQ-/,,.,)*TQXPDG&),3"7(6222 01352++''&%#-*")&$*#0(+*+,(,)((*()&#&&,+*(+1.'%*-//032504//.)(--./+0,)(+))'('%$%%$#%'(()()++)*.+..40.,3/--,.11243 1,.(+2)%$%""$"" '5,!"(& #,!')+(" )-/*+,,-- &5412-&"*))+*',+),,**++*)+,**++('(,)&&'*((5!)($%#(+(*(,.-//-,'((/,3/.')+,.-)'.0131119$&(' !+"&)"!$&%&!*,'%($%(','! "%(((,%&'')'$#"!)*$&!")&&'),+)'&''3-1*-2+*%$&*0/,()('')++('((())-')')*))(&##"$&%#%$$"$"$"%('%(&),(+('&''$#$&$! "#')* #s!"$# " # !4+$'!/20./1/02/0212145/,,3532211224311 +~ }~~}|$}}~~~}|}~~~~~~~ ~~~~||}}|}}||}|}||{|{|{{|{{|{|{{|||{zz{|{|}||}}}~}~ ~~}~~}|}~}~~}~~~}}~~ +~}}}|||}~}~ +}~~~~ }~~}}~~~~~~~}}~}~}~~~~~|~~}|{||}}~~~}~~~~~||}}|{{||{|~~}|||{|}~|}|}|{|}~~~|{| {|{|{{|{{z{|{{||{||{|||{{{|{{|||{|{|{|{||{|{||{{|{|{|{|{|{||{}|{zzz{z{|}|{|}||{{{z{z{z{|{|{|{|{||{|{|}|}|}|||}}~~}}~~}~  ~~~~~ ~~~~~~~~~}~~~}~}~}~~}~}~~}}}~}~}}}~}}~~~}}~~~}~}~~}~}}||}|} ~~}}}|}}||}}|}| +}~~}}|}}|}| {|{}||{{{}||}|}}}|}}}|}~~}}}~ }}}~~}}|||}||}~~}~~~}~}~~}~}|}|}~~~}}~}}||}|}~}||}}~~~}}|||}|}~}}~}|}| }}{{{||}}|}}|}~|}}~}|{zz{|}}||}}}|} ~~~~~~}~~ ~~}}~~}~}~~}€~}~~Հ + 󁃇ǻĽ끀˕⾯׀ϙꥷα̈ꈄΦ崽ҍ݋քꕊܡ֪݇ŐޛײЀ˷߀̻я񎍘ݶ󋍋ꁤ㇡ň𡻕ڇە٩ٚعӾ慨ሽ㞔Ŏ󫒜¹ţꑀϴNJ̵޲楿ûʶǚƸÞی񨜌􇊢ׁ᫷葒銑ϗ夔ۖ􏒐ʸ“Ö򖏥ľͮ涛⃦觊ɳźБŴꈥ˶ᖑ朖ހɼ퐓ӂٹ껬tʩhj˴Ʀ훴ϻĺƭᇯͽǰف¼¿Ƶ›ῃ茘ԟûĆ̆˪ૐ׷хʊݨЫՂ䭩ٿЉߣݘ˿ɴ哅𹎀ʛݤľ´ÙĚ⓮Һîؕ޳ͨؗ▆܍Řىخ۶ۂǁ͈Ɛ҉ҾþƼ©ᏂǟЊʺµ𙀛܋֌߉߃әفڏ􊖠〬럤ԡÞ̸ʂĦᴺƽ׀զΆˬ⡶ä􇉐˭߀وʀĢᐝ̇׆;ɑ߫ʁ湄ؠ˻Ϩ÷я̕Ըƀȵо⅋̭δʀǕđޭɀԦϱԸɠ޷ރ÷ɁԳϭ媃̫򂆊űǷ橠޶Ϸϻ̶Ѐڗ䅒ճ񀝤ƾϫÑރŸ̿ȼŽȿڒ킂ųⅫ쀄e69854:88:6fcbba]`cbb`]Ui;<:\8:4hg39=C?>;974]`a>AB@BC<=??:89754:@?B?;qiiddccbcfjjhihcdk8;;;:769:;;==:::lhggp<@?<;;<:qq9:==;>??DDBE>;9;8::;>??>ABA>@?<@@BDDC@:splqrr:<=EFFEEDCC@?BBFDA=;;;>==??==<<<>?@>=9:?AB?BA?==>=<;:>B;;=??ABCA?BA??>?C@@?AAAB@>BDECBABB?AAABB@DINWSEDCCDCDABEBEGHCEB@CFNRE@=CBC??AC?><=?@?=?@<>>=?@?i889:5999k88=<=<=;<8==>:dj;=9:@@@BGCCCBEHGHHKIDAB@h8:iqgg97k554jBmd579;;863?AA=:.;;?>;378412:=9<;<<64565;4-/492<9976Wa0A9>0=1MET:IdWn>ECGSK??63@3<+,054B3OGDUe\W.L/+S8/9J>OGB46(%">$%::U\AQ0W!De>3N1FL,BIIG2,7T@Y|SVockij9@\^V?cQk#.BAJP925E}ci&=1QF)*5&*&$$%! $   *$)!)<& " !!;=4.*38/%!!!"" """$($)*+)--.+'+*33+>`u`p|a{^eSaZdvfuP09S3ETmcD/5PZ{MMPtFohQE_elgx~fn}idgtP|gSjsmnXX|pjlrljpTempug]|[hp~tmsşv^:Ch`w`~\Xqmƺ}VghdX:sp5mnw4&4(/;<\?KUJ-&-:Dj<!!*,9,3>!!&BJ?65>7E+UA#R9?B7R]Y9:JQBfi_u2(0.,.82F,D,>/3<8D@-=%@A^]mMm, ' +&+FZoo[qrJC>3+EGI/01:eGIQ=\YWXL7/;=BBu{uq{~mcջ׾܆jtyʴ܈r٠mhtvн󚍾肌뵏|miveb`ve^bjkjiepmlc]RUUSKI9JCD]3696-%#%-,-;A6<^FSNQZdZZ|etKGDCGC<21."XR_VgWabqdk@F*.=?CFct]{rl~uz|^h]uj[SSeYc[X^bX]fz~vcgV]lo^comfersrpqtmt{qsOPPk^bpoppsu{x|zswrhwm]c\URU^`_^Y^pvzBCDCB@;9778867g86596_[\d`\hxzw}LLJHDDA?<94*@A7CM&$#",=^4#')---.-,*)&&&$"!+./4/+) UDCFGHHKIP[&" $  (*&(>00UyR/300$,7]fikQ>P?6nECUV-JpJNFgTI7HE75E=ifVL9@cRMsKDZ7/JfN]]+(1W[9"%C=\3(P50,W9KVYDS8D?;Q;89?8FRK`[F.a8W[FP/5?LD97KL58>BiKb=fNblCEiUiTg`}qrǮ~pwhyhUTRZf}[Q[mr\caeFVvP_c}a^{MwM|JWNKZx>{eIEwFppG|MPhr}dY[bs`Ux`dN}JgpOv\edqltOqx}[Wk}``b`nrvGTtcVfaQ]wvsWb~]fvE2v|c]NRKEAMnH\lQ\d_r93/*&())^h>B;;:fa`_XUM@;8ejdUI:FBPd:JAPR6gdNpnbb7m98fUH<89<99<97;f4?LZ9WFWj<;99765j68;665fg56f48@?48954g53d6556428;769:<99::99788776775765554321a`_[ZZUTSD:3ZO@:M7#&+*))$GG<8>FZS_[\[W]\[\VTY]UUa23SS[_\ZR_]10^dffbedc]\YYY`0a[QRWXUTXXWRQMQORRMNUXROSXVYXV[[XXWWWZ^gb[WTbggj:><;<>=igdidj6ad955bWTOQFRQNEGPR9D>?P%GG353FBLNWRDCPQc[YOVVWIH^eZ^XPAMVTWUY]ZUWXXVVTUSSTTTUTSRSXRONNT>.X>@_\W\3_Oa6YRQWTTMRVZVX_PKMTX]b`USMS271_\Y[[33a`_\cegh]XDMa00Z].,-2;>5SGL(248@@BCE?=:8hHEU>EBAA=:6]65BEB;HUJCABEB5a]Y.AOd1745598:==;<9L?=G=>>ACA=<>?96533346fda`aa_bb_\^^`b578:;;83588e`58::@=;55356788lfgkgdef'/0..-/-.000-*'2(/1++**#"<7643331136544531464438 880   !!" <:8;<< ! _  !  "" !"! !#"" !!!!# ! ! ! !   !#!   !%&,) !!! ! " """" !"&(! 12.2 !9 %.15001/ 2.!!  !-7 &+#  +  ,  +-(.1'$*,#$  +=;  7 ( + + +         + +  '' *%&    ! 892:$!%(!2  "9- ,'#079#*!2 + ($%$# /#&*"(!&)''$+!!*$(-+ ,1!8KMQLlkyo '  3     '->'3.#2GK54CC4G_7;D "!*%0$="3"&1&61 "0$!627$%'3_A>E9^Z[[K3-<@NSEKQL49;/"$(3@EFB=1.))#'&''*/4?=1J>C=0-;(4##$'/2/133]oP]A3?G8?B5FJ%?ZOctnVMm:@gcg677H?ACGIEB;CA@?=6>AE9:)373@ + 14*4ZJRHNVjbcn{>+#!!MM]ReV[bq`ez94")6Ch|fyt}wxz_ifybRPaV]VU^dZ]f||tbfV]km_etoabvyskjnpwuwOOPƵzim}7i^qi^faXQRY[XVPVk}tyCDB>=96371/1Z20/63WVV^ZTaqrs~LH?5+'" 28.0.&5 + +  + ,$%&%%%''(0   + + +?+ 2677)%4#!-(((!# )##*/=<5'/!2!!,$-(70(/2!8#=%#;&)$6+$" %43,(0%!;%-#A/2+&$1'&"9+/ $+%(&%1+5$%.357"%2%!F'>$,!$$"1-...770#-63,03+& 64/&/$/+"*.*S0($  !/",2%.%"*!!')/)!2), $"&! 3$5- *1'%!&-3KOVZ\=+9:eULQRJIHFKRffqWNLRibQ\XnE9`K9'$"*6[rnkVR[Wc2(3@?&&%+#*91EPaHlE<"9Q4F*H>&0(%D1G%G2,+L.AD-U9n/@L_]P[9cd7BTC8MEG5SKX_08Fa_#)$ + ,/%*+-0+43/:<-C7..+)1#!-#%7:**#! !#0-+ *6 %,*-.#&+!#  + 5:    +    +  + +(4"0/>F:9(  + 96! + + +     *G-1,&"/581"+1 "2>1## 222/,*'#)191-+*443.,%0642/*,2.5 33+602-'$&'.:!,#+.#*"2++<+8$(.-!+$:3'53./82*",*-/*!2*('MFFFGIFFDCBB@==>C%)(IGEBEFHFGFFKNLRWOHHRKGIQQX_..-+,-(*+)&)H$)-3 -#+2313431*+**)))&'( .)! . (.(&(!+&+**)')&%')%&,%&+/-+%.*.1433521,+*++/1.+*++)(**)''$'%'($%()'&'+)+*)-.,,+--..42-+)132320/0,/,*,()&& ('%"$((#!"/(+#&***%%,(! )&0+*$*+,$!.3.1/)!'..0011/,,--,+++*8)**)**,(''&, *-+()((*)(,*+&),/,,2*&(+/231(&"%+*,-..3435.+ $+((" (**)%#$%%&'.$#&%")(! " "%)*%)&&&))($! '#'"%#&+'(*0/..,)'.//..,41,,-(&%&'+''+--,*00**)'&*/(,'))(*('%#$$%&#%&%%&(%'(%%(*('(($"(&&%'# "7$ *!!0"#""(#  10.&$*21//01/010././1.+ 3/043011  +~~}}~}}~~~}|}~~} ~~~~}~ ~}}~}~~}}|}|}|}||{||{|{|{|||{|{|{|}}}}}~ ~~~~}|}}|}~}~}}~~~~~~}~~ +~}|}}}|||}~~~~}}~||}}~~~~ ~~~~~~~}}}~~~~}~~~~}~~}|{{|} +|}~~}|{{{|}|{|}|{|}|{|{|{||{z{|{|{|{|{|{|{|{{|{ ||{||{{{|{|||{{{|{|{|{|}|{|}|{{zz{|}{zzz{z{z{|{{||{||{{|}|}|}||}}}~~}}}~~}~~~~~ ~~~~~~~~~~~~}~}}}~~~~~~}}}~}~~~}}~~~~~~~~~~ ~~~~}}}~}~}~~}~}|||}}}|}|}~} |}|~~}||}||}||{|||}}}~}}}|}|}||{{||}}}|}}}|}|} ~~}}||}~~}}~}|} ~}}||}}~~} |||}}||}}~~~}|}~~~}}|||}~}~}}|}|}}| }||{{||}|||}}|}~}}|~~}~}|||{zz{|}|}~~ ~~~~~~~~~~~~}~}~}~~}~~~}~~ ՈõƻɬȐˉ₫դ𕵨븨γÁǗۅف܋ƃģǯ–ے򷬪㧲ݧΦ٦ȓҘ̀鉏҅ہރ񋂈бĖꏢ̛ܽ׳ʨ׃Ȁ寉߽ޅϒŪ탂։Ēڛšƍ׵Ӕ㤚Ħ᢮ő̌ē퍓ԿǠտűĤ߀˭ض̀چ箧ɕ얠̦愆ꇃڋ퇈߆ٖ㼰ջɽРՃjѻ̖Ϳѻ۳ժꤻʱ䢗괇íǶ킁ƼȼĽǼ􉕞Ⱦрᴥ愄Ǻфπ钎ϥęЁ㌝ܓ⋁άܕߺʁ㳂譒者㈉㚑ǍٗÞнᗐϋżءӯڝ񙊨魎ʉʀךЃ̎֔؀ϓ׺̱靖ҸŴǿʄǺ뉓ֹĤ񆇾ꪈӎΉæ͖׃򉒟ᶕ󂍡ȵհ޶錽߂犞LJګ𼴭碳ѴĎڴ􉂀Ţ٬ӱãΣχç؟񝹹ҜƂ᜝˯ƌؔ眃㳧̀ᆻʒĤגȐ־ǡāìĨϵǀۼčͼ֥ˠ幷ۃˌʽú҃ρ瀇ƶ촛ל켗ʺѿ毛ğؽŴȿǿγݯ̃ꈆ郙·̧Ϸη¾酃ʳǴɿ¼Ľü·ǻ⁡ڐ퓸н󀆌dg;984567><:6ge`ce_^\ZYZl78;5_SQT]]XS7?=A<;;72225;9liiijfeeddbdgccl8=7:@@:588=?>?=<:9::88kjqo;<<:soop88n::9?BI::<;;;=>>;:<=<<=?A@;<@?>>?BDC>;;trstvon:?BCCA?EGGGHC@A>>==>==?>?>>;;=><><;9:::<><;>>>A@@AA<<=>=;;:?>=>>@@??@DDCAAA?AD?>>HE>ACDDMIAFB@?AABB>@A?>94;;<;i9;:4:=?BCHVPXNFEC=9BABB<;GGAEIHGLHGCBCIBCH@ds>:;9534:;=<:::<=7:89:0.*7<;>86;81@73;50>5@1?^zWETL)A++,Q[H+#+3&:@!7*CDSW:OkGI1-+K907H-M)ECJ/6*"')" "0& 6#6,[P5B1:BC217;,L_,2e;KSO~{sTiF0QAU?,^ZW6=?J6_[O9'%XUO4J;.,1L?@)-"%"! #"#" #! +'%%&$F8;7R)+(=7GYaw]w""%/O5?Eaa7,4BF?@QT?07EIQR^cff__XOB800BI@C4C;87.+-6VLC??2+''44+,.-+8BT^\N<=>2,*I%-QB' 6='&015:2DGDJQq\tiyvk{ʼʤĴyzϻå꼲ǯvo£»ǿnĕӼef_^jYQYi^egjggvlQS`^ULDENQT/-72"%&22&#/=DTZdZLuKGEEFIA7+1+*FcNV`zht\?03IOfXNU\pt_en`]]ywlbZUOWKS]bcjndR]gfaTNSfkfxt{@vlql_`dq{nghw}NQMLNNTR~msollissuz~~szgsup]dkonqi\jwDFFDC>94115::9A?CEB::e`XVZPSYPhoOOMJIF"!>?;-,*.03>B??;g?_/;Yg4nI{U`]M?eB?T`hIhLY<|>JH*6Y@>9FCeI=tqn@ em@B]VBgCl?FgE3LS/a;P(SLK}t{s>((2GG/-OYIFZZgtLMP`Vz`{gvvybd_ssRlkYL|g~VfkVZ|pocrYlaemf|gumVs^YUtT}xrxf}g`^tV|e`SC]UKZOik_eN|V]K\q{jFuyzu\dTKhf=25!;+#=s?0$'!E0(,:GK_;45*HCJJ1,;:7J>/Q73 O\"(#,.A&OMC:1HfIYIUhC9!3%&_nFM^B<8*-1E2F" " $%,%$')*% ! #!$InlX4QwzbAN3A5)U=T\IG@@?;9>:\MR>Z__2@F=]IN6IUYRN=K.8Qe<>BFRfdcgkVH948L:@A657\[VhhFdLZA>MjNb>7SeR30;GUDOU[^Y:Pb>:9887776565322211a\^\ZXWPIGVUaE90M-&#&**'%KSL2:@o\W]W[_^XWW\YX\[ZX^22QYcYR]Y[U[WVW]`afe\W[XYY[ZVKOXYTWUVUSNLNVUUPSUUQPRWUWVXX\WSRR]_d_ZTVVh:v9;=;;<;;<=fXb8856cX^99486YT[RVVONH>?9OI5+*E0054?9MIJXHKGFKb`VMW`NW^^ga\[RPSWSQRWQNOTWRVQOUVYVVVUWWWXSONM<**\ZHQZX\W7:@F<:0\YWSVTPQTI?MPGSTM\26NEFLINZ33VTPOQTUZVIFEDBLPEPILWUSR`[^__\]\[]cegfba_aWYWXYXUS]^]bba_aXWTVZ[YROTSRWNOJHIG@EQKIPSRUTQNNRQLQUSNOQLIGMTSNGPKBAEHCG<9_/R\3AF=:H?5:]V=GA@AD@;;=<;567444343ga]]`ccbcc^VLh868<><8g554>i5jdb`_5958546446688975ei5-.021/21,--,**3.('(,**(Y! 76665345431/1105446499884  "" :;<>>:6l   ! "#!  "! !$%! !!      "" #$! !!""#"!!q !!#"$#"#"!"""&"" !!!! /03!*'-'  ".738.24,/*10-, 4;)    +  + !)" v     + + +  + +  +##% 3* $ '#1 ?K    +"         +   .%*%"+ + +Z.7,C1 %.1, &'9 !CW2 ;%#"$  +  +B(# 10"(!  "* + (0 #!"2(3(7yd[XN!! 6C    #101, #@?(-.#)**&5-(,4+37C7?$1#%/.*0*- %4=Pu\r  3,5?sq=),8833CB*"+:?HJ]fmqgbZLA8//AA65(5,(&*FpD<64% ",6GPO@123)$5";-"$&*.(58358yl{W-!3D4:8H.7SK3:^fMsQ{hWICVJABukqZNS?H@HJL/*BGMB3=0E>04>qn`3731=::?NBC?:68MI27FIA:67;>8 %.3LTdWKt~r;,$! '?\ORYw~gq{}L*3Nk`XZ]nu^hoeehg^UOVJNWbenqgXbnicUKSfif~rw?slwqhhgnu{m}djyPUNKJKSSʵɽx̀}}}{i{zfmpplmdXhvGDFE>;50**+.233:9=@@97_ZQMRGLRJhyoLJE9-% "'(,," + 5&I9E2+%"!1+$  + 203$!'"#)(%&((%1!+$ "" "!8"52:9+E/7/*#6&!'" ">8/69)4'0 B"/" '"3 <85 .2"/(!7#;$(9#%./!))!@6@9!"(%.+)'%3.5.-@#66&5%4-,,1+(9 *( %$ '85(2/3 **2'2*( &!(%5 %A2>P(&"%#*"#!+(,/%2!++#(."%("%!"+#/#((,).-1AQZgF:3"+TOQQRLHHI^|aSXVUSRVV_^hGpYVbZZY_ożgaC6C+0190)N-D"(E,6TJFdLW^iH18MO.*"A &RUK@cwbIA?V1&P/C;&. +*5AIKT356?P8O@SK_jUEVPew>=;GS4@N=4OZDW;;C1Y)+9 %<<(-32?I5&/'>". ":*10"0)')!%(J-##'+%=+/"($)+(& +  +U  +#  + !. + + !%B3=,3> .,+!       (ER7-+BE5#/%3.-'$! 0*."365%)$8.0!*-1/,"+"/6 "#)2135;1$&-,%48'@18'%/>)5(&8A2 ',0$.)(%-'474131/,(),,%5('OA5ODKOJHKFE@A@FF(9).):,NCIOOLGGGSNFINHABHUKHJOQNJGECCF'(,/2443 +3%*120-22/+),+)'&"!!',3% /*87#(%;,(*'(*)&'(*'')*)(*%)0)$*)*&('(),-/20+(,,,+,-*'(-,(*()))&$%)((')((&((**+,.,/+)((./1/,)**390).-'(+).)++('$)& %"(,'%$$,#$#!#0.(#+0%*-.5300+),0,*+,('')-*+)'++,*+++,---(&'&!-(!$(')&&".,+**))..0*&& %&(,-()#"(+$+*&)(++///'*&.&.,*'+($ )()'*)'''!$%&$!(" #!$)&'&%&(),(#""" %( %!$))(%/,.-.,,,++/04422./*,*)**(&-,+./*(%&),+(%''%)$&#"#"'$!&'`%$&&$(*)&&'$" #('$ %"!# #3,. "$ 1+ &"" !! .!4 2/..021*0,%1,-111.,04~~~} ~~}| }}||}}~}}~}}}~}}}}~ ~~}}}~~|}}}|}|||}|}|{|{|{| {{{||{|{|||{|{|}}~}~~~~~~~~|}|}}~.}~}}~}}}~~~~}}~}~~~}~~}|}~~}|||}}~~~~~ +~}}}||}~~~}~~~~~~~}~~ +~}|}~~}~} ~}~~}~~~}~||{|{{|||}}}~}~}~}}~|{|}|{{||{{|}||}|{||{{}|{|{|||{{||{||{{||{zyyzz{||{{{||{|{| +{||{{|||{{|{|{||{|{|{|{|{ |||{{|||{{{|{z{|}|{z{zz{|} |{{zzz{{zzz{|}}|{{zz{zz{{z{z{|{|{|{|{|{|}|}~}~~}~~}~~~}~ ~~~ ~~~~}~}~}~}}~~}~~}}~~~~~~~~~~~~~~~~~~~}~}~~~~}~}|}|}|}}|}}|} |}}}|||}}}~}|}|}~}}|}|{|}}|}}}|}|}~~}}}|~}}}|}|}|}||} ||~~}~}}~}|}||}|}}||}|}|}|}|}~}|{|{|||}~}}~}~}|{z|}|}|}~~~~~~~~~}~~~~}~~}ƀ~~~}~~}~ 傁ͱ󈚐ϔވ›߃ꂌʅ˚֞ƛ܂ЁɌݠק֛ħ҂ßҌـƶ󂇎ؿLj߃؎³救ݙ֪̞쌠߯޲ٹ񶒒Ĭﯤք҅֒݅ͼĉǍƒڊᒔ烮꤈鷛Ħ樣䰵׌ꐣ㙟ܿÄڱݾͷĭȚޮ©ǃ̸ɖ퓔݋Λΐ揲߰ꄎ䑸텃򂂟ݼك߃ÌŰ⾶তغؘăݟǹߔ˽Ĺȭ팢Ċ莘׭ƙ׾̈ǿ񂁄ڏȻд񁊕ͺ􂐚ߺĀѾƼܱΌ€IJ䕞偠湬ڙӫԻ񲚇¤ވߍڥꎗóԵ؅ʿꍚdzի˭ξކꥅͲئŷ̙߫Ղ߼˂Ҡ㍫ȩ愍؝٘ėİՅ㮩ɿ֢Ʊ˰˃荊즄ɶ뺤܅趓̑닒సۅ̥請ᘝջ͌ߍ׳πйԵDž❅ľ򆕓ջ郆طẮʛɿԢ۵ڒȩɆƸȮ⾝܆٨рາɿܘ؋̵ުɵ˸򧑑ؚ齕ǽه܈∊Ԭ颏辚؀̿ǿ»򍝝뀉ԈɒûĴ°ƹɼ޽Ľй򃉇ȶζٱƾȿܿ¼²˂틃ķ36845975C^5557b5jdYVZdfcdcYXV^b]ZX_c4=;868<<;:97766lhebbdkjkbaejhl8?<8jk7889<>>=<<<>?>?@?=r<=89::DEDKKLKKHHHFCDFBCC>=@BABCBCB@@<;v:::;99:<;;=>=>?A??BA@?=<;:====><;9;=>===<=<>@BGFFDCBCCDDCEKEA@DCBCBCDAA>BC@>AEFACD@ADEli=B@@ACGEA?BDBAB??9<@?AC>8=?@A@?=?7896;h7599>><9=?<>CP_k\RIBA@?>@E@;<=>;>DHLGEECACB0FJgk^dicbbl7789jjmj5;88;AB?.DG@<:8842999:3:95<<:76885.14688335Z\0:;Y.1NHK),(SB?5>6H,B{^7:+$&" "##!&'   +!75 !#+ !%,)#!)%   #  (& ##%&%((%&,+.0.2Y:M=mkakjdglVl~q{a\~uDNOc>e}U]u^Olccjiddaet{lkupzoyqIU}Me;ofYudw^e~\cr{OKPrfeqecdw_guw]duedofkl|0Hdquez`ZmzryusuWiihle`_=  %0/.)'13XYL}yJtP8:XS<1% "70 @&$,KLD8=/@%08N@0DiD@/1=::YA5)QL@8b43?H58;6F5==;;62-=;+*-#ECXLhlg')KS.TwPcy31P^RFW0'%+5HO\efhZ[Q@=BA70*/31')4;:>>2065<:,E>%&%@C*+;:;BFEvplnq~czvԀrx{ʸ~˿ij~إθ۔ʅqlvʧuYha`]UXZh_`dcafjjgTMLTXSL?C1245)#&)+."+,.46NXbZuktnwB@CBEFJF1(A@?RXXTN?EKNJA@f9M9im==^NZjh_HlIlN:@Fl[E7;BUB;=CDDIH?>A:b_brGJMOMwVL4Wvlcke45PG=K:R-m]Q14G29NMNANT95E77b05Tm9F_9P=PFUJD816;?RSJ2:LE,BD`^YH7/%8_];<;KA:L[H0TS]O\P2kM&JNF?]FFJ:.59%*'N?O7:(>.)O4;84?CJ=,3MACI^58Cc@C[Y=n@Mm^dITfRMd}m\my胋y}{n_fbddd]PMWl_fZnmYc_x[`jQ{aewEBx|wfPJCEAKWxzeRb{`enj\br^Td}IjbX^bosouw\bege[VWh[hmkRR_hZ\or\Q|xtv|rN}XHrsw~lyVZHhdygnot}?h9A7=AU.'0'LL1F?1+/-Zg6|;=K<%(P0(8.E-9>7.62H>$ "30#5120 :H(08cDVAQv/0)'/TYfRI4J8/28C0('(!6$*#%'$,,# 5K=\EJFOesf]N_5V[K9?Df>A?=:7fh]IT-:HIU_RB<3/+*((6HXYRIG>?L9W:G>M]RJ40CEPIUlieWB?CMRK>L>.@CKGUYMdB::8CbecJb\k4ZbHPNU^g676877f^WXQH<_C^N=\NMQTSOLJLQVZgoA`zDnJ4[\hljd_WUYcagmf][[YUSVY[_[ZZ\:Lg?JXWk<::GQXa^al:;>>=9576786geg56g655454d464hg55567775467:8489=:86;9;;9:98777866441`aa[^[YZTTBVX@AJVS.'%$&')('#HB56?F_Ze`WYZXY[Z\[Y]\XX[_^XY[O\cZUYUZWWU_^Y]VZ\YWUVW[aQPZ\UTWWROLLXQQUWQVTOPWSSQTVWSPRR\\UXSXWUmCKF><;;;:98j^^48Na4_`[Y26426\\m_XTQQG5_F><[''7IV2)C>>6/72IYJWD4'(1?K@>@5/8ACD945@DGA22  %)EL[Xzzlohnq50("  ARc^ZmnT]frnw~a\R5?Iqgccgnlwj^T~W[Xb^SYd`jrr_X`hehrs|udiyDGLhT\wj`fow~vt{PLLTDztЭ~zzjo}~snmu~CCDC<61-)'(N+-2532;?7^VFBAHKLQaMK=0&  #+$+*)"  + +  !#7 #+(/7DH,!"(1B*  + +-. ,#'',0""+0/,) #')&!":,;7* !31"$".("/;-$A;6,/+9&.+'!0!$%($ #%("' ) "8!9$+ &)'*07DIa8@7E-9YNMQYLGJYcXSSR]PPdMR\gd`]YU\XUR[^gbqumLBG>48/-+Q.(''.9%0J & `%+! +  +   +!"3%%'+6>91)657.%"4! 880'.#+*/4,%$ %/872++$'2$3 '$,0,'&%)$+:65*$#%)+%!+*#,.002.(8&" "245&59D 76'((,/33.+-)&"8(:5+H?>DHIFB@@CFFNS-CS-H5)IKSTSNKGFITMFNMGFJKGEGMRTMEB@'2=$*/,7#(-0-.54333/30,.-(++)*''(*"'43,-&'*%-(0,'''&'())*(++('(**()*#+-(')'*)(',+(,&)**+*)*-1(&,-)(*+('%%+&&**%)(&(+)*)++,*(((.-*+&+))5!%"2--+)**$*+80,*'(#+1 "#%*/&&($#"!(&1+-$&)!2.'1353114,-(-%#'")('"$$*,+,,+,*.-,'%&3"#"(&%!!%()*,.(+)))**-/20'$%"$&'(),/*(&)'**)&(,.4))+*(*'(+)!#$%&*)+%)(%""##(#**!!!#%+(&"$%&),-0)'$#!$%%#$&(,*-,''..+)))*4220-*+,*')+*(,+,.00.+)'&(*+)%&t%&1&"%#$%(#$!&&&%'&$#&($)(1$''%#&"'%%!(($!!"! 0+)  $27"! #" &!#5603/-/00..0/)!7/...04200101/01101  ~}~~~~~~}}~~}|}}~~~~~~~~}}~~~~~~~~}}}~ +~||}|}|}|}|}||}|{|{|{|{||{{|{zzz{{{|{| }~~~}~~~}~~}~~}~}|}}}~}|}~} ~}}~}~~~}}}~~~~~~}||}~{{||}~~}}}~~~~}}|}}~~~~~ +~}~~}~~~| +}}|||}}~~~~|{| }~~~~~}~~|{|}|{|}|}}|{|{|{{||{|{zyz{||{zz{|{|{{|||{{|{|{||{ |{{||{||{{{||{|{|{|{z{|}{|} +|{{z{zzz{z{z{z{{zzz{z{{z{zzz{|{|{||{{|{|{|}|}|}~}~~}~~~}}}~ ~~~~~~}~~}~}}}~~}}~~~~~ +~~~~}~~}|}}}|}|}||}|}|}|}|}~}|||}}|}|{|}|}}|}|||{|}|}}~~~}~}|}|}||~}|}~}}}|}|}|{|}|}~}~}~}|{||}~~}}~}~|{z{ +zzzyyyz{|{|}|||}~~~~~~~~~~~}~~~~~~}~~}~ۀ~~~}~~}Ҁ~~~ 􍕚²򁋈׷å̓؀ܹƮ֋䉊҄׊ݰ֓ҐȧŶՐㄍ􄇍ݥܰٹ݅ꆤ⊀ߏ¬ϯʵ񁂏فΆܠݘɍʊ٢✃ƣȐߐᩃڐ̓’ǘ㇔룖޺ՌжԧƗǠۚ꒚ޫ䃱턏螎ª׾ĀԵ޼ﵿ逕ё݀󏙃٩򆘛򓧟䅇⁁ٍё́煔ŎƉώǶɱՆճ׈zā¨ͼϜѺٔẔ¹֥񤓇Ν׈íԀ÷ 끅ɻĹ苒¼¾ĀǼǺ傎Ƃӑ۵ۭδȺֳΤͦއ٨菇շׇ٘űټ܄壗߂ԨۻԱ́ưكՎŢŜޞʂվҡ芐ꞡψח׍ۨΐЯ¾ޫ閏ϲɺʡ쬖谣އʲ˅𭑬ί韘Ȥ՜Ǝŷ䴥ŇɅȕƿ랙ǜ΄ՠםໟ֓ϙ׍Ƞ͖͈ʩؑ׿퐓î»ڭ졆ɠ呀ݭ稣͏ށқ֥ˆ鈔ߝ鼷єݜԉ߅ɸղٹˀ䓳дꑿ ۓΫ뇩삄μбĚ܀ϻ׋Ѿ۟¢ǵ۹前р˿ʷ˭郃􅋍ȪȀŹDZÿ󁌊ƽɬȻĽʽ􊥣ߟ񒇊йd697e;=8:9986ac3385fh5d\XY\^gjkc[ZacZXa7c`9;<>=>==B?>;<>A<98;<;s99p:<>=j<8:9nn=?A>?AAA>9;<=>>??@BCA@@ADEB>><85`7=?@>9:=AEJKIEEIGEGGFDJKIDIFGFCD@>>?>=;;;<:889<;:<>===AA@DD>CDGFB@=;>=<<@><;:9:=@?B>@?@@AAB@??>?@=>@@?=>?AB@ADCFCAADBA?AEEFIGEADFEDBDDBCED?AB@@AAEAAA?;;>@?@DDABABED=>>=?@CGFEFCCBD>;CJKJE=;7?ETe`[NGA@>=:9?G>7<8<=DOOGDA@?A=KCE;fckiijj55kn:<8jc5:68>@?:3@@@CCB@962:696;>8<8<@@=:6/:4(40/,6834Y;eMZPba\MAJHS?AH-R-MLO.RQ,KPP=2<*50"#BOK_^6.;[4E-,*0++QOR63:6'9E;(4M/6+@7"-/$%#5!(0BSY,6Q?R93AO{wqmH]O^VPGb5:SE6]`JP{T/*L5T5XAOE7Q#! 1XGA?/E1KnUlmJ2(!$$""#!#'# % .' 4#! !#- /H,' 3*0!(+    $' ",!!!"#% #"%#',2%&8!0OMugi?fa\`9KI^zPfb`LYgOW/':XJAopslTgj\WfcUYm]vxuLsL>IqVmWmbQsxfdoiz~Womqgq[\UEu~hotjue_agnoq[clT|cvPk~jawYWlssƅ_k'?113+*182TtcNCh8/,El5+ ,,740&+%+)%65.9QACRH?9&'9@D[~aQ?32,.D'6688spbHV`8C=_`S.;;DM3M_T. +1AP@XDWfU>xgH?F-) 9H]=|Mg5.6G?F+7.'9=2HIA9759631S(D@38@()'EBHJJJQZZ:7^XG*.4NE0-&7-+31D'+%/=~gwnlr}}z\Е|׿ڼuϵ}غduŬֹýx~}Ėznebja`]`lbZVUHZPRaa[e]84470-'"&'#"715<46>SQeojjnN{@<9;:6400_U^`h99l9=7gd^X^c]ajRMOPSSL!""!53:C[fF.34<;H_E)*,+",/-+)(%!#!2+1414:@EE_F>KLKHQg`yj9ZUyhQUn4(1$(((+'3Z:4@FEGPVXTUPA<>mFW'D8F:kJT@cbO\#"4 ML&8J1%13h@]7]7Dew5I;.OZH@Y[Ga^4QT?4d7RG-(&",+3OICP>@=:2dY^;% )@cKE:.J9>>1,NU=E31U4<9RKg0K=<>;)2?81?40-:?))L::+S}:JN?5P2D1$MF:S0AA^')DKA-,@bM>A"GX=OM?B8MU;DCB7E87FU?5GIFT=HwZv:4jvUUNQu_Re\{ѤphaV]Y~sfaeOT`YVXNRZSQ[TIbLSVS}n]JNmf`j_kWHaCTf]ZeǪeXp^]sX`v{|ROuO}]iwQdgvm[hVlsZhkg|nhw^xmTy]TMQP|a^dUxFfWsWRZVnziBUcQO?G8Ph]i^[8MYdi8llkibffTBY:LA4]TRUii]XRNc;nh:ACGJL@;bXXWV]``afeai;IFD=:ia[\`lsEKLYl?JWj?BiS_kcfljgjia8<=<9:8948884e4755864hg_5754e45a57565448;:547<:7679;;779889::642331``^\XTSOFA05REC451/&%%&%'('A901:>deWZZY_]YZ_^]XV[\T]__^\\XW]b]YYZ^YVY\WW^XZ\YYUUXWYXYVZVRTYM[RQSVTQRSRRPY[TJUTSTOQUTYWUTZaS[@VUE<:;9787kaa65b^X]2_]2[646ccn_[WLLL6RIjSP7.1'.163>SRFAOABRJ`XIIHBKccIHU29nb[\Y]XZ]QLQhUYRRKQSUYUUZYbWYSO3<+LVXMRQPIMQR\QKQKLRUT\^bWGKEJNGRdb[X[422775[^369::944^Z]V[`U]`04601Q^/X.Z/3671R5652896;@D8982YYPOQTPV\RLMHMNUSPF=EIN[e_VRTWea`^\[SRMMRQQXONJOXUXNNZ^ZRUa26532f4c\VWSUYZ[Y_a`ccc`\URRVZ\[SRRPSRPNJITG>B:@@LQVPPQPLNRSRMSKS^QS`PJPMIDKLROEIJ?8BCEIf7DDEJEAIc:?>34=?IIMKQF@895=?;;7;>87BBDD>DCA=;<=8643ec8965fdfe^Y\fbUJ\f9:>C97879<8,bSTHMZX}igpxDJldSGe_JW[7AW_O>C:[K6%I1E34HA*56<3=F?T]3/,+)=6/24.K>:47lPB=B9E:.?,7EAV;QQXgedy^T@9S:>N;8?B<96$1=*)?**4/(4+/)-**' $'01+%#GEHGBB")'.0..(.()$*%DFCCA@A>>=:8::988788799nihfhiedcejgcgdggimnkq:<>>?>AB?>??@=A>>>=tr;:==>>I=<=>=999<>?>>==<:::=??=>BCDGFA?@A>=qf]6;@DFC>=;9::=>AEDEF?<=>=@CBFGHGDCCA?<<<=;;:::99:;:=>??=?B?>=ABDCA=??=;;;<<;;<;;;<===@>DC@CBA?AA?>==@EGA??>>=>=?ADGC@ABB@EDDEJMGDDFECCCA>@CD=CB?CA?B;AA@>=>@???@CDBCEJFA?=@B>?AEDCCB?8=;?@C@C>B?8??@9:@@>==<>99898@BDEFDD@DCANV^MBc48:g5B;dc7<6aANHFEB?@FHA==`jjho;sl877@?lmjedg68=?>60:AAA?>967226>4;?=;=?=>=@9321676170337>8>9U9,Q67H/_K0RJT0;3K+,++SB[+QQ?:/*(Q=WqX/C,sQ=,/QPIILNMHNI@:DKCC$BO/1C&,&*&+;3F+M4+/CJ2B__[L[b_AOhEe@^LI8f@P^PD4;+L@9>_US?*(0S1;OLVXB/&$)0Lt`r42.)$##&'(# *%-(!%3K(+$$.,!"   +    '&$"#$$% #"# %'@#&N(+:8K+2G#794#,'=G]ezkd3/2V477MgB72/4-. &-.';E61:/@:@axrdFc_4/26?HIF1<)VVi|Yg|j^|boxSZTv~^HUpkorakkLLBnO[ookYXVbnoz~x\XWgz}@xqrqjnsiZekny~uxpJMyvzELNXbhjko|}wtvy~|~xzvy|{}}y{w}CD@;:88621\ST[Xbl<<<3YZ_fa\dbePTO=G_:/$$ .(cu]zzf)?)3;H)+**+++-,*'# 0,/147;@PUlVNGHME?=@LlbYFRD,O:kdiNL&!((&35Y9:@?f=FiCK\C-J1I>HAD>7@IHGBB>EDDGXQX7F:W.`]_xR?=D?@@BB<<8NS/4D.AIj?=DwOJGXCRJrG;?3(4H51?BL!89ben=<=a879RX:4TaAG5IA3<C[_JU?Ph>MI-=HG3BX92-EII.09;125*8+@I59C.BL825R2GAc>5@`I6;GTa69;PU4G/65,N1715A! )F833Gc\^ZJ>`T;rX5HZ=^gKgXLSTg[yihjquzocisuZReZVy`T`JWOd\NxM^Vad|]|UWmYfzgoXxxZiceSN_^X_z~~~{h`r[Pqt|[Rt{sbiyizuaU[Prwlaj}ncky^}rjletpmcqmqk_JNWuMNIJPkv[vZu_OX]]cUIxs~yBFQYcaL8@@03951F?<@ePZZ:F^LRB6+NI_*!<,)87208=71D,& %/+,%$#&UR>8E,#.4)*suq9BSK83,07*/&&8!) .9vPcnqh\lgceZNUXYcKdDDD;9jNQXUXZM;WSV2C:NM]dZ>G35dYSQPU6@=S;NTT\ZNCA7:L:^>EAJE]@B`WOHDGcJqWa_WR;>:DReXhskj_BQOO0TCZ9DO_eii6ijgjb`]I:V:_UC7c[\ed[[ZbLUQWaXF6n:A?EC9hg=KWUPWUdGMKFHD9kacj=FN`o71V@2V:&&(%&'&''&F<6*1>ISYY^W[4]XY[]YVTX[U^_^]YYW]Z]\WX^[[_eZX]aY[]YWWSWVYTTUVUUPRSSSRRUSPOPQPOSZTNWPRVRVWPRWRQX\TjGQG<79?977kl_a64e\Y2Y]X_38:fef`XZ^UMJ4e@K9;0O(,/1479DNDH=7JJRa^GEFKWZ_fUJX18iaa_]]]b_WRXRTOQXXUOTVO[^eZ[S=,a1JPPOa]XTOJJTGECGTTY[\^YRUVQPNHhgd^VZ_74;2b1b4<<877hhZVNW\d\c21243]U42]00/110WT6888;573;@=7;;30TTTPFLZ82XSTVVUND>DLIKPYDOQYVY`g\URPRSRQRUSOJMRRROMXZZSNV[5:522ce^\WYWZWZ]Ya_`c3baYTVWY_^XSNNMNNMJFHEB>;;CC@NRQNKMNTWWRMMNZ[Uj]PMNOMFUQG<;MDE>74Eh:@FHCG>BB@B@B;866973ad3f8:5fe^V]fa[SV[h:?>:h65igdgh6fehhhjf\^76bd56h011/,010012/+*270/+/0...-/+.-H6333222434630234547989:9!"$#!';1*  #!!!    !! ""! "#!!  !   !", "! ! !$&! "#" !" !x" &.2% 020/,#*2238632310..,     1 :      -"Q-&*,'2!L3A!' ,  + +    -'.    . +  +  +      + + + + +   +06&9(QS1@6@EECEC@:6601@8=6?nqz?<8//84'*(Ag3  + &5(!*!3*5Vpq^>URk'JThvTdvg`dpvSdVzcNYumnp|fljKIApOWmmhW\YbmrtZTRg||@xonkcjrcV_efs|~uv|nKO~rtx~DKLY·vvx|~vjp~|y@?:40,,*()PKMTOX^343.RSX[XQY\eNK6%)/ -@2CE=+-%,(   + +  + "$09,'$')%"!$-F<."' &949D) +/ 4!&-""#%!!'$$ #!$""()-()%64/0A* $ "# )-6$#'E+%'0$,&:%! (!86; !4)2(2!"% # %!68(,!*7'';%/4!9/774$-#$++ ($!3"+.-#%  &.2.**+"$*(2(1#8*"!%3)+"! (#0)**& /(8$!3,. /*''*:HRcg,/3-E<_XPDEHEEJCQ^UVSjBIQa8HE3VVYU_XWWMNYq{jzqvmUXID,,,-0. )$>#3#&ITSV/96J^7I'Nu=N>X6>`CcS9^`;WK:ELDQDk\R?F@E:{pm4Y??>BQobndWKQb=;qQOJ>9YNTcXG7=C8:6")*#,B)))+"+*.-5>/(3A14;J5:R2;N+/%0*!'((3"#%!%&#.#0)(8#!!" t2 5/:3(-C +    + //% ) =92%  +     >/7@B<6B=781+,241%4!#"<*-2/01.%8:;$'&/72!*!%E=:88:"&$/)--20-'&!$1)@&(%((9./GC=643E9WDKF=<% &1)2954.#.5=#6'0$(14776857433'."94+%UKGGOOGEEH572285.&R)*),*&GG(.5/0117%)%#&$856: &*18 "##))-344032410/1 1/.,)'($!+#2"%! #+#(')*(*)'')*)'&'*%*+*))*(*(*+'&))*-2*)-/()*)''%)(+'(()))&'()))(((&'&'&%'-)&*&(*),,')+(%)+'1"(! 34.--)&'*')//2/+-1+%#-%"$- $).2.&%#&$(1.!!#*-/5(%646510043-),')&',,*'*+%-/5./, 2""#"-.-+(&$*!" !)'(*-/-'&'%'& .***)*(*-03,,%(+/)+'%&$"%''%#%)&&'()%!!$""$,&&)(+.3.)'&'))()+*&#$&'&$$)*+($)+02.-),*,),-*-,+///+())*--*'%$$%&&$!"  %'%"!$#(()&%'%*-)6/&%$%% )&#&!%7!()#" "&$'$$!*.W-///0/(,/.,&()/12212320001241,-..2~~~ ~~~}|}~~ +~}}~~~~~~}|}|}|}}|{|{|{|{|{{{|{{||{|{|{|{|{|}~}}~}}}~~~~}~~|}}~} ||}~}}|}~} ~~~~}}~{| +}}~~~~~~~~}~}~~~~~~~~}~~}~~}||}| }|}}}}~~}|{{|{|}~~~|{}|{z{{{|}|}}|}|{|{|||{|{|{|{|{zyyz{|{{z{|{|{z{|{|{|{|{{{|{|{||{{||{|{ |{{{|{{||{|{|{|{z{|}|{||{||}||{{{z{{z{z{z{{z{z{z{|{|{|{|{|||{{|}|}|}}}~~}}}}~}}~ +~~~~~ +~~~~~~}~}~} ~}}~~~~~ ~~~~~~~~~}~~}~}}}~}|}|}|}}}|}|}||}||}|{| {{{||}}}|{||{|}}|}}|}~}}}||}~~~}}}~}~}}|}|}|{}|} ||}}|}|||}~}|}|}}|zzyz{|}~}|}|}~}~}~}|}}}|{|}}||{|{|||}~~~~}~{zzyyzzyzzyyyz{|{{{|}}}|}~~~}}}~~~}~~~}~}~~}~~~}~}~}~~~}Ԁ~~~}~~~~~ H鉊􅪫¹􃈈ʀ󆟏ԂόЛ΂ȺħdžېܻȫԛՓlj֧ꓔյǒ؉߄Ⱥ퉄ϻ䂉퀪ߠ≕үɩ˗醲ً֍恞퍉ىʽ۰怔ŰрѮαʖП欥۵헦ߝƼɉ紸ߓŕ鮽ϣ˷¨ꦃρģǫÑ˴Ͻқ̤ԋ폑s샰ȖѰÿͿںȱڀՁӐă耂ȉކǓ砰wnq۝ꀋ񇦯»ϕ÷Ũ·ӛکˇلƹ挃Ͻ݇բʽپ⁁µׄȽþ􇋕䩊立ڔ֭ͧÚŮĻۢ͞㐊ힸτ☡˽ϰܑ̛嚌Ɨ橳؁üӥܿ֬ፂ䂄иɷԋ都ﲍȚ媉܊怄݆勅уЫ欓Ó勚Ο⏽…Ѯ䂆ݐŃΏ׭}Żހóӈ넠̰֜ŸȂĥǔ턣Ֆڙ֐οؖ܉ӎͫÀɿŨس򣙒媹ĞۥӕИ僘ܨ펕Ǵ㵺¶諞㿗ɋ♐̍ސ촔ۈʓ鰈刢瞕ְǨ縱ưdzޔɀـ˕āΖиڵݿҧۼ؞˳か÷񀁂ű빚˕ľ醇˵Ʈ΀Ľ´Ӏ󂋉܋նà̽ʾ¿˾߀ʾԀ匐܃Jfbcea_]8899234367554efe__feabcieb_Qmgm76;`4eb\b?DA@@@BCCDHGABBDA?=;::9998795686mljgcbehldbcehn7hcgo:;<<:<=A=<;@@=;=><9<=><>>=?B=:::;=@@@B@;==>?>==<>?==?C<::gj@DA>DGEC?=<999<>>@AA=>;8;ACFHEC?==>CC@>>=;<>=<=>><>=><><=<>CA=;===<=>:;8>=>B?<@ABGCB@AA?>@GCDCA?@?==<=??DFDCDCDCBDBEDDCABDCBGCA@???@BB?A=ACCDB@AB@=;>CCDB?@EGDHC8CG?=@BBEHJ<@<@C=??@?@@>>@>=BDA?B@<;CEFDCCIJCBG<>?6i;=>8548j693`5GEDECC@AD@4FBklc^aft?;?42?.0*8D%+-55.20?F0,'DPZvZKylcE5Bic:QMK1GnMEi4Z4F>PM0)I579?BIS/-/E4:2(L<$.\NcM)/(,,&#&&!%! 3(9''0=5#' "  +   ) (' !!'&)# 1!+AC4/?\^FP=:UAk\^5S_E_P`Lapg7YP`g|@MNRLIWYu[gWa`Wcpism6a;6LQ|rmy]x^vv\|dmWKko}tpumrfQco_F9O$((* ,"jOhYJ$#7868<"5&D-7930@G4O@Fe`+7DX@:`2>33A771^00G?)) C23%*62*Fesjc""6G2dlVr$!&;OEE8>9:3)%@KeVYc/'<,3:LN96/-*'*/7...26408B@8C;.<5,)EWR?KJ\N8E*#$(()>*8(-6zbw_gefusqרuiιpmqнu̾ͫϡٗճvoXU[W^dcdcVGO{HF:.-'*&(%7@L83+8jfZggt|YK^XZW`vbXH;w=C=lhzXSZXVgw_^d{amcekNHMUf^Qclqrl`WR[_nphegfQLPT_ew|FEvlpylnvuznSSO~?qixIGIPWS}ekl~qp~uwzxz|~|}|BA@<85342\XKMOSRj7<984TWdmowKJMIHpVA !).#5')IvOdgtm+=4&7&,*+*+*(*('#4*,-./149?AJ]OHFD=JD=CFC7oD@<%Qav?n@EZ~{?# %%.5?6BFCLAnGH@U?^Q/946)]c@JCNR`OP8Z;Nejd?E[MFGNHMRH@LMUiocBR_TD[=JX>9ukg=?NAs^;2+5344='q@R7`Od9P@>=Ab;+98/21H*R5FF7?8K_V6=U;Qc>eY0gR4>fZE7V;IZgAQ_;TVmCP_}vKQYVxYapo{󃚗gdef`XQgSYxx{qUOS^Ua`aaXwNZizvbk~^jVcV^C\rr}JkRMVQxxua}|PzuhZQqhq:ItViYZlQshfqt|qx^z¢f_jr~eWksfhgTLSbzoRQQZMMDkunl{{BFPHXO{:L?gBGfc98I(96:.-JfN/UJ`sNcGi`CFEBNJ/<&+>?26<:=DLC.UX:+->&40!."*KK_g;E 2<.Mblb4;bJF4+49;A "$/:pNUCTciN967A.PVFfBIGDr[:\C0S4FORCd>=BM>m]aN;TF8bJLeXOIbTK9^^`[F==;96g5788659:6756554ed4333feeddede874244e466889=7665567876746546776642ea^ZQPKKC;5VZA[U>0''&&''((&$A7,-6A3ZYVSV[]XYXY\TVWVWY__\YZYZXUYYY_0\Y`iZY]g^abZTWWVXXSOOQUTRTSQPRPQUSMMPNQUWQOPRTV[WRQQTNX`]]8?B?958;7566k_[44d]`c\RV_:=4_cjhZX`XMDiwzW8J,R%'+39;-93=FSegSFP]XNKb`IY\33a`\]eef\XUVSTSRTXUTWXTYX^YYo$k<>TQTfd_Z^YOMRQIFSW435f_Ta_\_VTeg5g4bb_276464e48;;<6hi[2A\[`a42c54587MSY0103W/-/02;55776:8;;:;740YVKJS=Y752a^\VRA>HSVLSOJGMRNXNUc_ZUNQSQOQNNNJQYS\VSZYXRPHX250331_\\^]^]^]V]`^b2^][VUQX2_XTQNKKSQMHIGC>>@CC?KONNMLQTRUXWYQR[h_i]\KTVRONI85CCI=gFMdd:@EGDE@2<;9=@i97DBA@<9727::4aa489g^X5:^\d^bY\me;8;86<>heef657856ggf`ace_aghbe7iH2012/,)010--111..2/..%402+..+,<3554323373122474125    " !!!!   "33 !##  " !! !"!! !  " "  #!!"! N !    "! !!    %!"!f !14, "02/-.0953 ,.      $6$ N )      +  $9(-<&$+--"2&(" ."  + +    # +   +   + +     + #8 + *X$='*V>%( +_V+!7  +%! !  !- $)* 4= + &$" ")!" $61# )% &(((& + +!08. .01 ! c`iG) #.! %,30AbW%*<.-J)4*(/(%<"!( ;cwсn  &!L^Ym"/#:I`MJW*$.#",?>)$   )"$%4D?(2.:2 +"%OK841%$&*5UE:@47boT?6pl<8>\@W^sRvf\Y;<8B2;D;_N:M3*'0=FA)224'(+<@_krG]SRIwuo:99568:8F=0  "2>+'+!..Q8UZRAOSF!beXknuwVN_[b^ct_VG9v?BkgxJGGMYUv{폂{t{B?=71)'((MKDFFLJ\.000-LR]ehrJLHAE/ERWn[B7<<=<8_QOZP\WZamYfcdqy}naL;=*N5)%&&7(B9!*@E/LRE[LTIh=_57JBJLiI;:`RJ_6CaIYOBKbGR:?1<.JTPY1TI98ED0# ##!*"4#$"$:1 5&5*02)?'$(.#700& /)"<.1E80.%+8?*=! 46,/.A3,7?+::;3 -@896;2 .1 #+8465+&"2%8%8,!-5.5854,*)*-$ 6-(/x-58/+POQPNHI-8"*31-!/15%//)&$*/6=:0/+&""&'!!!#&)*+/51.,,01,0044211112221//[0..+&'#% --!44&# %,)&%#&()&''()&('''(++)()**(&()(***/4*(-2-./+&(&$$&()'())()''('%%&$')+)(')))-,)('*%+.,,3,(,)*,*#')-.37-+0,&!6=A0,.",00,%!""$*23(%/*'"/-&'25324570.+a+*++)+-+,-,*,-/-,9:)%%0//./.(&)(%#*)0.'.+)-))1-,.0+056-)(+**"##'& !&%,,,)'")+%)&$"&(%-#'2.*($'('&(&&&"%)%*(&***'&"+-*+...,//),-+--,+()%)+)'&$#$*(%!"! ! %&$%%$'(&&**.'&*4.5..#()'$$$! $5$*43  ##$!!"!-"-.1-()*-,-((1,2001100.012-/23014 ~~~}}|||} ~~~}}~~~~}~~~}|}|}|}|}|}|{|{|{{||{|{|{|{||{|{|}~~}~}|}~~}~}}}~}}}~~|||}~}}|}|}|||}}}~}~~~~}}| }}}~}~~~~~~~}}~|}||~}~~}}~~~~~~}~~||}}||{{{|||{~}~~~~|{|}~~~}||{ |}}~}{{{z{|{}~}|{|{||{| +{|||{||{{|{|}|{z{|{{{|{z{|{||{|{|{{{|||{|{||{{{||{{||{{|{{{|{|{|{|{ zzz{{{zzz{|}{|} |{{{zz{z{zz{z{z{{{zzz{z{z{|{ |||{{|{{{|{|{||{|{|}|}|}~}}}~~}~}~~}~ +~~~~~}~~ }~~}~~~}}~~}~~}}~~}~~~~}~~}~}~ +~}~}~}~}|}|} +|}||}}}||}|}|}~}}~}}|}|{|{{{||}|{|}|||}|}|}~}~}|}}}|}}|{|{{{|||}|}|}}}~~~}||}}}|}}{{zyz{{|~}||}|}~}~}| {|}}|||{{|}~~~}~}z{|}|~~~~~~~~}}~}~}~~~~}~~~}~~~}~~}~}~~~~ + ܀傋삒쀂뙟ݧإёƈ𥗔ؤבη£ŦԠߢϑك≊ž򌚤ȱı҃􃇎ڂȴ녗햳ǧʗ膇ӒɈ󮡫ʃ芟ãڅ҇ԯƛؐԥب􀃎쎒ɮ顎У狅򲷟IJ؝֋߻눈ЇƟ̽ꁄ送óʱڒƬ€₁ÿì猀ɉ􂂄坸˨ӧpٵꞾ⃍̞ȾͰć爴Ҁ݊ëͰ˵Ӏ샂ܹŋ쀦ȼ¿½܀ꄓɱ«Сƈ͍¾ʦ캏ȗջۖǞޓږͨͳӷۉו϶鱂ݎΈǜπʡťғٳ־Șˬ⛦귑ĥ՝󃈓􍏎Ҟ丯ٍՒߪˢ̱ǭЛ咇޹νLjјɾ󐊔碥}Ƽ»߄猐ٮ֘֏ό񗠝䓐կȲ׆ӧѷڷʳ៕򀡱ͺdzʕ±Ԧֺ̉򱀥寜Ⱛą溣ޑգˀ窘ُȸʛ޶驫ݞک뗮Ő钻򈐖֮檕ĩȀשĊݭĦŒȶΕŊ؁ЎϷч׾—̪́րз΀ٯԤ﹌Ƚ÷ïޱԛèȿ½񉊖揔Չҭݲʼ̰ހīþ【ƾijͽޓȵ򁀄żƼҖ剌Igihddhcdd6856fce5544474d_bfbde55ba\Y7875b\\59744:BBDFEEGEGGEDBCEEA<<<:;;::98787977677kkkmjgffgjihhjjmoo8:<;9:>;:8;AE??=>>;8:<;<=S=<:;=<=>>?;:;>@?>>>??ADCBA?A@A<=CA@?B?=;<;>BBBC@BDBA>?BBCFE@?=>@ADIIE>>?BDEDA?@ABEABD@==<<=;;=A>==;:;<<;;=>?@@@?@?;>DA<8;;<>?>??>>?@AAB@?BC@???DDA@???A@@BCECBDCDDDGCBECDD@?B:nAA@@<=A@>BCBBB?ACB=>;:@BBHEB=FC>6CIFCDAEB@>:=B?>=>??B>;@@?BB<>=>?B<8=@=;>AAFDBCCDB@??:;8;=<479ke_393b:EEI@ABC@C@<4fib`]`_glidi9:=><7i6f466;<0+=<<@8DDT:<78;;=:<;:8668=<976=963=0N3@8@QG?[Q4*(N+',+'*-+*,,R\ZPWKBNHF[S3HXFR'O[,SO=C+<>!">4C11*=3-(, "#+$2B4<%I3fWvHnK@CI@Y@8P=oFD_F>4=V>MCPVG:B" Y+~-18BE?AFLM,047:A8-LD?7.%.MNFC95E'.-%"%$#"!''%'#+*+"52 20     ($&&&#+.-15'>(87c:2Q;driMI}GJbf3BnYkWw]O8A=i@?ee`|yS_n>eLPcHL^oqnuuf|kYvvsnR\?edb\Vl\X][uUPx^igYt`pyfeadj_utf^_dfbzmb@VGJCRNUIa`UcUct]aqvr=AF1*))H1D@RINAcY}R_Yh6 E;1-!)cM/8%+&M1:[s^("A+*+3-,G(?=48303&+LIB1%,1&69N>2R07>56;Q.2PQ/+>-00 ):#%%[p_Yqd`lxW}akrobhnVGDNLP3^b,11;=@>;EQ-08/>D '*?\kNA`B5*CAL.HH;Z32UGTFL3_RFFQ5IYaT;UHH=>^eR;f:C]>ANYMhCZE<7nilk:NiQSE=CJTag[OTcNHQN^]YV_eec_^]cYWXUULPXWVWUUORQOW]ZT7C9@JN[^_\\Zg]VT\WYYRNXi7leaYW]ZWY`bc]\_ceed55ed4b3:=5d`K>B^ZZXc44<45655]1021T^[\/.0253338876<<;>9740WRQNHHM,520]ZQMKQTVUVSLGHMSRGMWAiMMMSSULELPPU[Z^\`]Z\]WQPQTT[234c``edab]YZ_^\a]\XUUQW`]YWTRQQ\SNKIIFFA@A=;aKU,7h656079:446647796:>B@@?87@@A@?@<;966796ecdhib584fhl`dijg7<><;69h:;fah7?=7776libdh`^_b^ac$3320/200.1//-,/3/0/./-*$.+)&467854323435476653  !8 !"$#! !!"!!!#! "" "$$"  !#" "   k  !!  !  ! ! ! #!   7    !!# 31--.30..11443///-"  + + %&#   +   + + 4$+)E" 5%    +@ +   +     +   + 4 .88,C#$29Q1Z/-4  + +"*  - #.'! (!(#*&F"-$!#   < !'" # " 20!+,@2/2 B% V, :=dpE + + | **"!/-(!!#3$%<&,1).-6"%;6 + 17PYgK.  "6?ZLa )3^HNPH@463^emq^2  + +?SH$!++3A_+)'!#&*(==;JEUPN6-3Qh5?@k8zm?J;>I;2=72?5.4@<,)2/P>9?BVK<.W7H>8EEE>>98uA79eC@kwp=966Dg~KF;3  +$,#','')>nMFJM90Vtc[{p_luWelqrdejPB?IG5MDEMeX}rsyhXbrWU]HIJHJ^D3SefjpfaballUaoqqmzx]`]\liupnwm{NMLJHKLJOSO~YTV}}txyy{=::4*'$()G?H[UYgm0]_\bV`QWVI<,$(/! + 24$!5@BOC&  + + %,&(''%$ = ! ( !&$"#>%48 +"#" #-,""():83607-$)+"(-5.,/$&9+(&-%#+.$(.'0#(% 1$;) 7/*#$%+ ))"&'%#&& (87$#%&"0,1/68!&(!(  &&%+ ('1!" '-5$$$,)+,'-0% ' &%1*)'2. %,B@1+'"/+25!& )$/)4%!#,2"("#!,-%?"2.8=GNNW\WPF;/$.-*CIMF?=>G/.@cbd_;69718?QKQPTTMgUY]\gq}wdG:@4/Q+**#9CJB3CFAAONNCKXOI^;:?<<9NE2P@GN11EV::UKa68b?C:',6A28Ir_MSRW:4lN\zBmcmWc7qJgLA9%B8fRD6@F112("4*0"%,6'..5'.-.3*AC(0=QLF=<4'RN>@3,#>'HJ4'3)),23)(,K*;-"  &)' 1&;5!_( )Dr@L + +!#*2     )46$  <39+ +%3E-&;*$,(+##.%"! 2&, 7*&*271&4(-!.(.+ #+.3588G?=959$.!(0 41 &.%J@8:=$.6;4'B:;*#6:, 5$6""+544761.'340!$@8A&&$"8;3('%" $-59 (/&7$5+(&NLNK'4A-&&%! (+3730*)--//)-31,2/10-0.1562740101223462234/10010//-,*)$##!+%#/!  %*)%&('&)))%&'&,+*))*)(')'*)''%+,)'&*,)(,,-./)(,'')()#%#('&)((()&(-(&#)&)*)+*',')),**( )%'+01)$+*)),$(,../,(#%!;' +$#*-.1/") !#*/3,&'3&$&$(*&%-0354315.,,*+$'-+-.-+(*)(-/.("##+-/...5/,+0,/.*&*360.,*-.--/.00*)*/1200010/!+((&,)"'&%##$# !))%$#&*,*+)%"#$)' $*"4##"&'*% $&$',++*-,++-,*''('+.,,00-0.,*-,*/-+)'(%(-*)('&&(0(&#"#!  !$$#$"%'&'),-,'(-))',.*,)('&""#-555)'#"%$"! "!1).11/113.-,0+-010 0//3661361./0.01́ށ} ~~} ~~}}~~~~}~~}|}||}|}|{|{{|{|{|{{{|{||{||{|{|{|}~~~}||}~~}~~~}~~}| }}|}}}|}|||~~~~~~}~}~||}~}~~~}~~~~}}~~}~}~~}~~~~~~~~ ~~|}}~~~~}|}~~~||{|{|} +~~~~~}{|{|}}~}{{z{||{{{|}~}|{|{|{||{{||{|||{{|{z{|{|{||{|{|{||{{{||{|{ +|||{{|||{|{|{|{|{|{|{ +z{{{z{{zzz{|}|{|} |{{{z{z{z{z{z{z{|{|{|||{|{||{||{{|}|}|}~~}}}~~}}~}~~~~~~~~~~~}~~~~~~~~~}}~}}~}}~}~~~~}~~~}~}~}|}|}|}||}}|}||}}}||{ |}}|{{{|{{{|}|}||}|}}}|||~}~}~~~}}|}|{|{{||~}~}|}~}||}}}|}}{{{z|~}||}|}~~}}}|}~}|{|} ~~}}}~}}~|z{|{|}~~}}}~~~~ ~~}~}}}~~~~~}~~~~}~ڀ~}~}̀~~~ 𘟥»ĸ􀄊揝쏉吆깖ӐҀ˧񃊵ͷʟށ⡙Ս͟ڤՈ熯ƽ¸Ⱥρߧ٣ႏШЫʏؗ铘ƤӸɀ߄»꟱ڏʼ爐ݿ퍊ڛǰӼöӿ絑ӠꋠЏɍ咞ʔ񩹩쁠ޚ鉃Ą؃򓋌н⡑ѽ򤣉햟üҜ؉ڶ熥݂ӫκɽюԼ􋇖ǝȣȾډհĿµ爋׈ԁϕܙq񨉦걚ہrڶƈѸoqら󑍓͵ٹʵ̤ݙDZʿ®ȿη뀋瘧ϲрǹʏŸ¾ˀևȶ߮̃ȦƖ򊛚ۚ救åߤûőͥȖšǹ쇫ƒ抓ي˞߄䃑Ёą҈չσ䘡❋‹ʞƭ㞉݌鈫ܥ춲￷貜ŀԭ鋥ӆôΨú͂љ袡؇Яݬʢ횧۷øހꁀނزۓړǂ܂ɜ倻Ϫɽįﹶ鷽ܘʹáһ׊ͳ铥؟ͫբӗ׌ԋ߅ݯljܗҡۂÂ˺حؐ֏ƶȁČإƀÐ⁍꘿ϩ˦ˈ읽ܡĉߣ󋋋څ򃈎Żǫݡ҆݀ͽɮԀ庆޼DzĀ÷ĿŽȓˆɿځ¹Հ¬üļľơóׁ͋ፕ󝨨䂅W^cah`ei5g5769763233453441caVb78<5ffY\bbb`fhiba9=b^CBBCDFCBKFCBBCDA==>>==<:::887874588679ikjlmokhi:=:9m78b:=<=;<=:;:9::;:AC@<=DEABBDA@@@AA@?<<=>@@=?@@FNHA??BDFFB@CEFGFFF@>>>=;:;=<;>;;<<=;:::<@B@@DCBBA?<===>>>=<>;@DHFB@>@@>=>?ACC??@@AA>>A?@?B@AACFBDCEEDDCCAD?AF>CFF?>A?=9=ABDC@AHDBA?@>>??A@<<@;>::@@@AA?@=<7=?;C?=>@>AAAEDEFEA?@EEDB@C>;>==89@7ef?FGJ<@>EE[U^ckijkn;:=??;CTcC48;7+5AB?>@607>A>?<=36:76369=8657967766273161V3[89/NK/-*+)*H/+*O(-RQR7VTUKKThsPUa`CSJ.=YMY^YKXI4./&3 %57($7>8< #&.+Y8NMLT)GO|EVP^:AHTLIIYMBLlA:XA8L;N1\R3N09@F-0.N@G;9/34-*KH-3&;&#(1&(%. $$9!51     "!65%  *#'+/12/3EcInNl46)'NXkv>ZJiVbZ:E:[m[7PTcG^;LKkSMuaMVaT{NvrslnpjoqJkYZ[dnhkZsnWqtxnMqm`zuiȋa\aCvr]bojcKU^ZA]qAa~~ZmpucwggshAEDH/*G57J@@=?FOUEK7.;i42+;@=9/5O*61izQ'#5:?1.0(CC5,M<>/+(!*'G?SHG[eB@SI@K0BTf;4A;9--/L5076,"3(+.@)+KAJ*3>FO]q}'%3HTb97=<:986.+('$#"'))b5\0SC7@BA"0B/41((/1yKxXdmibfotkljwvxczʒ͏q󬈢ͬ}yꮕ҃ʺ䍂侄qjm`dd[_JEGEH:.++,!**.*(,;.59:HgpNjg.00)!*2-@w_Snwxmc\^lbQZSTdtt_JH<87ZMbm\wpzWfdgafjWYGuoKKI<:EglolmgWeq|ydb|xgwsXihpggbkg^gytQHIol|KRONMQVSTzumtiԃcv|wvwxxy|}sw{ytz{|}BC:51/33224UVfkikwvOMTTUUVLF!$()''% 90_Y|DLMHO[mvqP1'((&&%# $#.$,256:<9YPSJHB<;9m6@i1% !2##rKKKE{sMBO+)#_HnCUPKIKA><;C`R344CUF=^D.NCLQUMJJHAc^riT@`UXb^eDF?_CZ-.LE\]]@:anuS:B\TupBW861;&5U;FqQELZ0GmLPi6mB1/?$O<5ASA+5PB6Lc3AF+H-3BT@\[?9*:9JJFR8;:*HWH8X0.:7.8=k?7U8LD8??3[PNSIQF=M**%`E?CCR\D4KHR2ZAWcNM3G3W06V3K>L==DJK\TN`<2@TdYUOm`]_jq__[yxgxzꮝ݆pikm\\S{XQNU^NXff][KXTbPnNzZMR]Q3KCf{tQxE[IM`\UhqoONpOZ`Hro}pfhjrZ[Xubqhxsmy[xyaWxudʦvcV^Xx|wioRuxWT?ARg>uS{\Wf}NJM;ffC\U]cL51HF%DG&Y?HFQTR>.?>4&A:'&,CRL)(:qdVB^W\kA>:;/-"5@/%C,4XkkuC6TVFB?>NJ=`aEAAAB?>;b>DS<9?BD:34:@gLsDKI4MdZOKJQ@65.C9JS^HEZ;MenZ9=g56JXeFR]e>Up>n_GrS;bJ;87;?O:gOj88m=C>LG=8miifcSh==?9jaY7?:fge`]e78ikhjc\bcjl:8m:><99;574b7;@A@;877686:8566535gbfg366464554e24425854643576544556411397863\ZXUOKDD>3^I<4N4,)('k&'&#!@8()5;C)STWYUWZ^YTY\\[\\]\YZZ[[YXXWWV\ZZYV]][UXZ^`YTVVUYXYVUVTQRTTQHQNQQPMMSWQWRPVWVXUYXX_[Z\adMj7==<976556ZVbY^^/b4a^`03356d[VSSVHK4=fA7EE:$,-.457;;RPDFOHdge`b]UNQMMW`SWiT^h_[``UTSUQKO[SXUSSFIPJScXC)30@KSZc\VVV`\ZX^U[\YX^^`a]UWTWPWTS^VX6h545cad^e5797_U^MOY[^\YZe43488341Y`6;6^W\ZYWZ03561335:;?=>:93/92YTJKLJS[/.00Z[WUTTQPGFFK`XNMIEJPPWUS\\NISV[YY[4a```^bgYPQPUPUb_]a2343ebaaa]ZYZXVZ[`]ZYYVTURWOMLIIGHFDCDCQ?=AELOSSU^\YWXX\X\d[\\YTTSKA<95;E`b_^]S9=?LAAE>=994X-.?e658L376:732LN9>>==A>>@A:?AA@CBA@=;:93366<93364f^]67b]cb^]fr?>7bbl:=_\c89:9;<vrieae]]ZC.0.40230/.(/44+-..0/222-,,*!*5542365553 !"" %&""!!! -  878 $" !"! "($  !"!  !"   ! !  "%$"     #!  !!  #"#"  " D/.$#+*0034434"/+""  +  ",918%(  # &  +   (+ =$7V% $# $      +   > +   +       + +  +!5&A49  ,/A8/)$C-`6@H&;4  +3A  ! .$ ' 84$ 45*.0&4 +7;* +%$ + '(%  9 ) ! "-KR/""  % + u$&}}<  + + C46/(?32QN*):356&5FO0*52-" /   !,)6CLe}   '3E8CHH  + '5;mBGD;,)N?:9/''"!" O+G#9'(&%& O3C,,,'$+14=<>5f:ebl.2X600NH^jXrnzXgaY\aeXYCokFE@73=dkkiigVcryu`\xugtzlU_akbd_fa[dzuPMMll~NRQQQSVUUǯķ|s{|zvx}A?51,''(&)-QTahfirvROWVVUSB+ + +(-=#))',2@GE/  + + + #H*(%&#! <$8 +  9)))&A?,BF+ 6",'%$'##/&*"/%$"*,0+)'%$6/95, 1+.767((*#2# &00%!15A. %3*9>"+ (G###!)0 8+%!5!&"/ '*&$#2(:(/=2 $$#%%" '6"#%+-,&",)"- !%,% $"="++.-.0"):2'3*%%!#.0-.('%$& *# '"!#(&/##11("%" +'$. %)( ,([\QOUTVMS2,T;D31/VLKKK?;:B(<-3+?0*F:$&3: %;35%/447(!6!$!58++":=-$2 +3-+2;@*067 ,77/"9+!:+#""$(2"5'26")&95643'2!5/'232/-267762.11566'0 !20121,*((%#! 3("*"#&($%'%&+,)%()(())*('()*)))((&&*())(+*)%(*,0+'(('*')''&(&&(''#($'('&&*-(+(',,'*),*+/,**)+0)&,'))++').-*('*"$4#!%'"!$'.01332* "&!252.0/+()&%(.%(5(-83365,*)+(#&/)-,**#$($*5-  &*32.++0/.-1+00/.0134/),*,(,+)1,+.1/0+1,&+""((('')-',*&'&%"$%# !! #&'(''((&.'"""$0*$$"#'$(''-/'#()-,,*,,...26-&(()#&.,*,0//./+~)'*+.,)(*()('+&&#"#""!!!" ) $&)()//,))),*,/+**)(*)$#46200'""## $!-,55.+)))-.-,3< 0/2.-/"!<96403..,쁂 }~~}~}~~~}~}} ~~~~}}}|}}}||}|}||{{{|{|{||{|{{{||{{|{|||{|{|~~~}~}~}~~}~}~~|}|}| }}~~~}~~}~~}}~||~}}}~~}}}~~*}}}~~}}}~~~~~~}~~~}~~~}~~~~~}||}}~~~}||{|~~~~~~~|{{||{| }}~~~}~~{|} {{{z{zz{|{|}~}}}{|||{|{|{ +||{{{||{{{|{|||{z{zz{{|{|||{|{|{|{||{{|||{|{|{|{|{{{||{|{||{{|{|{|||{|{|{{{|{||{z{z{z{{{z{|||}|{|{{|||}|{{{z{z{z{{zz{z{{z{zz{|{{||{|{|||{{|}|}}||}~}}}~}~}~~&~~~~~~~}~~}}}~}~}~}}~}}~~~}}~~~~~~~~~~}~}~}~}|||}|}|}|}|||} +|~~}}}|||}|}|||}}}|||{{|{|}|{|}|}||}~}|}}}~}|{|}|||{}~}}}|}~}||}}~~}}|}|{zyz|~}||}}~}|||}}}|}~}|{|{{{|||}}}~~~~~}}~}~|{zz{|}~~~~}~~~~} +~~~~~}}~~~~ +~~}~ـ~}~ŀ ~}  剟 쓛󌉘蜮ԁ򆋐̨̙׭ʧ͹荇ˆ׌˶ڕۯΈ뚬󉞓·ɯ닢܁ի넇ˠᘧەՃ򂟕߽잒؀Ă֧ȘĬپƨљ䰣巜Ǎˌɴ冤ͽ˖ŒɌՃ痸哝ƫҏ׷Å߈ڌ҈ٌ֪ĭ΍ũꑧ҇踠лͷ̾󅃅۾ܵ灏᭩ҝ􏚛⋑䀜ȑ|oӔҪ򡐆v˅Uu󏝛κϳ¹ǎ≚ӓ׍遞ɵ̻ʀڧLj⇎脇ȿźͻ߃‘ƥ曪ʴὂط봞߄΀򀴙ꒈִӰӈɺ̸îܹ̋ެٺŦɚťѽ¨Ѐ糖ىӭͫ٭ζاᝣހݗܶïР맷ĠΏ舒׹נ՚ѤϺኹ컥ĥ慔꒝ڮΞѾ띑ֈыŽijݙܢچăêУǁߧԖȐ̶޴ӫ˜𤈕ϣήԌœʋܨ鏙敮Ըǘ򕔧٬⩠̚鈂텒ʻܚΫ닇࿲兒ԒþတͻѢՀǪՊᜥҀڥ؉י΀⯨刊Ŀ̚񧘎⻖ң׻󄂀ȵҋޱ¹ɼƽ½ſص؀ʾ炚򆈌ξʿ̀년ɾǴƻ੄Nj·ݙ\𘓁􄐓l\Z[bejlf8<<;424366547644973caedfhce`]a[Z\ejkfbbf>\[8CBADFEDDCEEBBA@?A@>?>==;;;:864599889;<<<99spnjfkk786ih68:<>>;9;>A@>=?A<=><:<<;>CA>>=><<;=??>?BCC@@>>A?>?ACEEE@==??><;qps@BEECCB@EECBCBCDBCDFGGFGJHGBA>=?><=<;<><;<<<;:9;==@?>??<>je>BA<;>@@A@?>=BFEDB@@?@@AB@@A@@@?A@ABCBA@@ACBDCBBCCB?DD@EEBDBBDBAFA@AAACBCABCBCBCA;<@?999@?@=;8>B=?;9@f<@;;9=<;9fd\BIGB@@DIGCC6T=[Vc_c]fdgfh9=AA=\VB>5:<3/=B@?<<>>BIK:><;89026474:;:5669963007614460X/070,M,,++)+(,PPJ(KBNRJL5DFmA:ZQobQWAPMJO,M>I9A@g<(V7`<+;!&E,2&::2*2D/LA.H/3eY[R]iCV`i=9?\;[oRaT6_U8?2/Z;7C@7325686:)01+,*PIB?79*D/.@4UH5F25##)$ !%!.#)$$7 +3261/)  4."").# &+/,1."$((.11,gY~Oj?/,:[i/JTK%XDK4N_ܒwqncJ>P]gV|:F8]RTxSXo]gȧtNVto_Wfeoam{YRwWOu[udwwVViXkrg|«bv{|{vrcv]WOVM|kVh}mK{X]gi_u^-1&%7HFF35>aJOAcE1/Yf_L..75@GU/K1p>$|E%6070D!'D-3GEB:UOou4 %!7clMDUDEBML^h9]Z041XCD1?+ 155%;:=PR/1>",5CP`z&4KUd:9@9 %*8yJF==>>>7;542/TLZ168<<9=@)***128M41)PGHK&%%!; ;69 @'U:{nfqa^X_oiicvnw˗³ĉԵ˨ìɀsqӬ僶}wƍa_X]\aXJCIG?2+*..!!!++ .*12234H]vS_]*,'--($1PwYe~[iwlrVhbae]Rof>XeR95.66,eopgtrwhP^?:6m\~^ONvEWUJLGKRahnrpchm~mblstvwsvvnxgn@EH{vJPI~q}JMIKOMMLJMknoihopn{{xyzx{|}{zr{uuxtGDC?941221>0OLP]USTPLUTQOWO1#(+ +36`FKaHONR[DNK\bg[$$$#""55/--27;5=^qeCINIEA:RD8?IG?56VSlk\WBMusJHEM3HazCEsvWF1DH8(CTH4/=lMBP:5PG8QT`1>5lp78bEHIAnaB=?F;MD8N70E4D?2A8.R]Q2D420!0/,OR[799?HLKG<4J:%C9&5N;F/0@G;OL7TD<,-1B5453;@7TBR8BNBLQ65[ZN.)DE,hJ9T3P;++JRJsdHcT;F<]6-6?4Q>C=5;HXX>[9@a^fi]ajcZ~`eYxrzgfznűtqʣy`]gnuimUuWcSYdSYooV_vGbPooscDbVqR17;@E=QNuM_~ZziWRWWZ[VLucTTAU[pmXv|fbLTlN}txxfeW{Ybg|Āȅ|Z]cehrpguN7BD;JW\gmk3PK28/ML. R|8Nxiy6_y412"<7"!3CA3355489,1(4,6E6)?LTJBD?;QY@C,\P9%1JERhgI]gkjj7;;l_WMN;0XTNMUdc05J=`qynPUDHT[57CDA8eg8BO^;BIZBajl6fVRLA?=jePG[PcVba;?>BC@F?;97lhgdb;::8i_\\::55gbcb559hhel`ejm8o79688989:8;;:>@D#F?:::99877hhgfdehcgi86764f54eb4544343974543631dc474344_URPMIGF:3K;WV3.,)OO')))(&%#@=C8+,46>9GTTZ]Y[WOSQF]300_^ZXXXZXU\[VXWUZa[]`USZ^Y[SPV][Y\ZWUUTXUUTONRMRSMPWNPPQQRU[\ZQW[X\]\a`VYk8=<;97:847774g\V^]]10[24_^W^6\4b[TMTUMAaFte5HH3B*1-267><+D[PXY^X]1eeWVMHOWZP]\SSc_\`^VMOMLSRUPRSPOHJKR]ZM\G9BXK`UZYQONLPNWUR\[WTTMSUQURW]_d]\ZXWQWdd:4hfbh49eXSTPRa^_^cb`d4:88d`[PTZ16V_^^b`XR/8,.773039:??;;=89;:21VM[YFRU/033_YXXVUOGNLXXNRJGRWQWPQQRRTRSRTOM]4cbbba`[YXURU]ZROUZ43455543cb]YWV[[d\XZXXUZRSSRVRMJPFEFEDJ@LSJD3[V@DEAAg=@D>AC=:88^d9@#Tk37775690`389>=8>?ACBA4>=;876d]Ygf`_[^`ZY\ch^fhhnddi953< !^Yws# "M\;9G.3-@>LP,C@''&A.0) )-"4Jg  *6O12;/  7tC<0.+)("&"#"60<"%&+-13%,'##!';(&:/-- %5$H57/3$"!(4.,&24HS^F>NK_zlk<`>^VS(&@1%,_J/Se[J2 )/-9J:*&:1)'I0Y6;.@9Xl@IMG2_2KD$EG;t}=@X`Yb{t:k?IWH2+//% !#"'(AZ~GE5 JxXg~YlwkpThcac]SpnBZcO1.)0.%VlnbomqgO[844fXwXPN|opERMDECKP^eisqbfoo`frruvquujtdl~AEFvwLRM}jzLNKLOMMNLN¹}|xw~rmyDA@<4/+)((4$BEN`VVWSPVSLB>. + /"!-#)+-,&,(37<4 + +!5;4"$(&$# "/%$ -$*+,A>"/,: 0/0% ,!# #*4338,<6"' +4%4 &01!!%'"+!(-.;:/,#+:?$!%#3B&%;=+!!" /&;&""')-66,"$%"6/ #'3*! +()!$$!%# ,*/'!' !$& 3 *"(!$* 3/) !&@).&.,%;/.%. "" )51"$2 -..,/,),&#;BKT3FUWSTS\j9jm3SLKNOPMHKDA]Q;5=B-NM:=ni`RQMNJMZSWl4@.dSLSL<4(&)-0(,"*?EJ7BEAM<;G8!'!?07+2HiO7b@J/D2JWNVME?0dL>H0$)"03M2AkX5VN>9AA@@=3Xd{E]wj;1%=8\VL50%C6'&+(. $7/.*.5.,9H>;54><330UTu4I:A]O4(=0TJ]gb[I0/(,$%!%*9-; :,) 1!! #+0385("/0$ =L39w\@Pf?I +   %! (/%$ *# 5%6 +   >'',#'/)1,/>8&17:=: =50&(" D>:27AA!0&?IJ<('!#,.!:<833:!+4('*)1 **>;=BHBDH(,$FG@<<:-&:&=2#:? !:;:").#!$!9(,@'?KE?1-02/*OR,06=%(,6#1555*)& 70'%827).- ##!&!643206/-,52205636.3688 "$%!3423$/2311/.-C/*''%$"") 11 00!(" !%"##')(*&"%"(++)((())&,+'(,(+.'')-),(%'))(*)'&&&(&((&%(#()&(,(*('()+-,,(*-+,-,,($(11*'**)(*+&((+*'$'(%-$:6*%+&%+1042!$/&**0+-/1+-&"&)+%.-)(22144-&'%$))+'**(("##'/.%-$(+(-.*('''%++'//-+,'*-*,+-1461./,+'(,,42/22*%&"$+**(*++-1-*#')&+*)+)$!P$!)("#*((()*)$(%,,%(%#(*&*%&&'(+)))*&%+.0/011-+,*').)$$'*..,**)++0+)*()'+'()(+(%#& " "$##%&,*/9/,)))*-,,+-+*))'#1 !75 "&&#'#!-*!""!   /3!+,)<-1/).-,,*-0.-.24-2225235".2,) :72--1ǁあ~ ~~}|~}~~}|}~  ~~~}~}|}}|||}|}|}|{|{|{{||{|{{||{ +|||{{|||{{|{|{|{|~~}~}|}~}}}}~}~~~~~}}}|}|}|}~}~}}}~~}||}~~~~~~~~}~}~}}|~}~~} |}|}|~~~~ ~~~~~}|}}~~~}|{|}{z{||{| }}}~~}}|{{|||{|{{|||{|{|{|{zz{z{|{|{|{|{|{|||{{{|{|{|{{{|{|{ |||{{{|{{||{|{|{{|{{{zzz{{z{z{{{||}|{|{{{|||}|{{z{z{z{z{z{z {{{zzz{z{{zz{ |||{{|{{{||{|{|}|}|}~~~}~}~~ ~~~~ +~~~~~}~}}~~~~~~~~~~~}}}~}~}}~}~~}~}~}|}}}|}|}|}}|}}||}|}||}}|}||}|} |}}~~~}}}|}||}| {||}|||{|}|||{}|}~~}}}|}|}|zzz{zyz{~~}}~~~~|{||{}}||}{|}~~~}~}|{{{||}~ +}}~}}}~~~|{||{|}}~~}~~~~~}~~~~}~}~~~~~~~}~}~~}~}ɀ ~~}}}|}~~ +~~ ߃r񃐩􈋍焓Eъ΅㬌Էޠ҈„ŭ⩌␌֮ҴǾ׸֩ƿŬɁރ烄怂ɵĹɸΌЦۤ獖󲜬儻؆ߗ֔̌򋅻梍ئ߇뺈郌м٦Ϭشб˓෼⤦Ԍۭ쵆ꎽґ՜ݎߓ偎ಳ԰̊Ӡ̥߇˳̖ͺͿ킋Ο􌟟񍜢˶ƂӂѼz{yړu|ڂҽtۂꐤݮꦤͽ쀑ϛ𬤧𑬤Ԥʰå撑ǻ膊ø¶޴ꅆܻ퇇˴Ė¸ɽǰոڈ񤙄΢ĸז֬ˁޘЉ׺㻬䩶ŤôҿǦӡͣԃԾӈĈՕӒ軠Ւߒ䚛߶󄲅׳ޅʙڔԬ߹猒󈒵Ӡ𴩵Κªн銍͛򶕒ɭ΀ധᐛɪۊݯӤؖའׅ՗囻溳ϺȀʌڌ̺Ÿ阨݄˨􈚖̿кł悧׉ᘠ숱üܓꬣڡえ˪鈯̿땝ͪ۔Ȁſۥ憞␺ʝЊι扠Ҽ͆톂ͼ˄˯ٻԝ㋌ȶűȲדǏăɲϾĻУٶ¿į儓úǿеꮻ䔪Ĺ棨僻蜢!>_WY_iccb^Zf5721599657<;93577884eb^befjh^[^behdh]7?h^f;:@BDFFBABEA@>>@A><;:77:89768:;;==;::mlk98567767:4:<;==@><878==<>@A@BDA??=@B>=;:::;>BBA@@@>>@A=>@BBABBB@=<>>@A>trrqjojf9?JHFHHFFGFDCAACGIHDBB@@@ADFFFHHKKKLFDDBA@?===>=;<=::9:;=?A>9:;;8g=A??A=<=BBACC@><<>CCBA@?@>@>=>@>>?ABBA@@BBCFABABBDAADECEGDFACD@BA@AHKJ>@BCKC9??EI?@=;@AIj>9?@?@<335i?AABBB>98<7:?CDDAEJG?@ABCDMBFEE?H=DHBC??ECC86_ZA^J;gM_efdfn=@A<6AM739804><=L-,)((()FGLCC@JKF:63>-GpBSg_UT+-,OT,'LKd?3)>UC3'"![OJ/>,?,00QHI0Ykp2:U^VFL?RX?:n7HOOLVPN=R1CII<,.4721.15>G==G<9<=@BC%+;=?6H1-,/+4&+JC?/I1E5,B@H9@583#*&'(&! 2  ($ %6 4-*%-2(( #!   6199,"&!+$##!$""#.5A_QgxS(L'$"3aB)1)0k[NK/yghl}bUi?=k@Z~uVXG`S@PR=hnqZbc}nfexI\k[jewp[c|zi|{pkqntqnjLwoiciDSLgdlUe>Ug~Ybh/p6)$.TQD1D\WyAJ[HX^@=C,;F=II,/4<9bt\}D%7<-MBI38)?7C[ZgGP: !"('"G`9@V4iJNOS3EG6O/US?A;)5.0&:%G=

    6& ""1PC;<79)"'%&#G*,,R/.,2.17CCB>1H<=@89<5DGHR48.'*/73.MA975$ 57Kg&7 .@aWuGEA9rqcV^^bTSfaS9)52.*,..479>>?;E=XXPKJLJD9K?B )81171@HWBDHNTQVxo[j=FNKFCE@5:6:JJst4>==:=8hk:4B/*)@P]NiJPHH7D?VE:QrWGe;8KH\W@;U4:D@=oImV>>\aRAaaktB9m5.[wKRL9obUHXnIJooBLJC?982=.YTD;"P6JO&Z=!;@DIMPM3YB>MK[tLD*@+D/K9.1:cYFXCTRU>)K6)K69l>G]YIhQNPoesc][Rq_R^]PUX_fg{{뵒~tnWrfijej^XTm`SUSNQ[Y]L`xbKSg>\RkNHP@6<0GI9cogFC\IPaqeM^S_SKcpttNwQdzlud}x[p_SlT}WiR{lzbfjbpqhdZ{ɒ}Ϟ`~ǮfP|Wf@@UT_W@>06:$ ,&2qSo=MXKe5I/4,L:A.0G&..!039W>;[417;?LIRgJ]DI`mgE\4N.4@3:GX5nN7;>>:e2?S[^9IIbBrqHBBF?ic]K;ZIGZ-9A[=A9_WJ^8XRWV\ZUOGEDGHFCI6VmW:Y]c]7@9`_A_@TTQO^XBS8QKIRSNNHKSUSTUYX]^8@MbNDX\`f6b]bghehi^VK0f63:;@>B<>=<;98579m;97:6e`l6h5ihhlfg6h8ieflpoonhk/99445667:9;@BC@@A<:99875474fcdcc7dik86444_44ede3233455679744421a3f2431^[UPICBD>40L0TK;+('('&(**)%#!eoeUBF'K(2/15:?;,KORQZ]S@26aUQGMQSPXTKJXX\aeaYRPNO[NOLLLQJKLMQ[YF>JHE`NUdUPNQSSROSOR`QGKMNUZ[]fedXR_S\]ZV]\b7b88h9=7fRX\\c`dgd78m555d45_PKRT^1YRZY[WRXP0G-464545.:@7;@;9/46<3/0YSURMLUV_`_XVUPMPU/Z\TTPTTPSOLRPZ][[ZWTNOW`b_\bde_YXZXYWTTRPQSa]]7565a]\\W\YX[SRU]XUX[XZUOKJJKGIXKIO6NTRTVV[_XWXXZZYWZ^`\UMNG><6@@8`DMbo`?GTL>77YHHCB@;:AACC>==<:72`c6:;64fid657mpZVS\V\^]Z]``becbgh:AJ^WQKJH?6gV]>0,-.5110.*/11/-/033,*-134/3,2+.'666   $%"!"!   !"!=:996984##!!! !"" ! ""##!  !!###%!     4 ! !  !! !  ! !"!! 1""!"##!"#5/-.)*  ((.$/#/00/.3$  + " 7=$,!  #$)  ('%   J8?@2*!$#2!   ,            +   !$ +   Eo~b)G[+>c A6"00'/ "-2  -,#!  + '' % $" *$ +#(1 /+ ,)<' ',1"/& )+6  + ! ''1 "  .D##W. 21C6+  UZhu-  +3VTd;C# /I25@-X>A:B%)-+:'?9**    0' -*T}b +,7(1X7+,B4.*!# #-!!#(231-&2%!!" *37A(,#"'#0$ $";;35 '&"$*3'<$+3:/VOIMM?x~C>.:gZ>5-E26Ji9gC?!!# % )4(77d(..($=>>.:(2FV2:G0@U]@@:>G;H=kn`;[S4v}{lqhuaWB2+ ") $8Ggrіj.4%"! !((9< 10$%1*7)(&&'')@1"2!)'!""54!1/#!1%$!>#:-!*.)7/4B( <+?(,(8/+(-:();:$)&$" ! !#%6)(..% @1!$$'77 4'%),3 %0")# ) "/1+!*$%0!&#%*0+*"$&)0;, 1! #%/&*#156%$;$.!"0$!")/-(%*)@3+//+**5bXt`YWVUUQIKEIY;@RLHC52BG6DC`KKKPQQOSCDDC28KcLJE30,.#$%',;<41;A%G66B)#&%#O0?l4HZ9BNDh29>,4/L:d14!*(6HH.2;+3FTG5D9@72GOyaXp?;P+;KdBH@+*+$42&.7442)"#<*UG6:69:,01+')NkbsGM~LK;,GWJWbd7DI]SQGT;A&)&)%#+"!&)! &'!$$/+//%05('+ 0 +<= GmyPP      ',73 + + 50+06&   + +4+(@$#(()329D1<(*3<:)7$9(!$%+:*%''%B (389'#/ ;9# "'"776,#3*&*- % 53-7"EAGEJIGA=<>??;89(@?=>?A?>=;;;:98767789>=<=<989<:76:=:8988:;<;;:;<@DCE>?BA@>=?==?A?><BBCC@@AC?>?>??@?>???=<<9;>@BC><=??>=>?CB?>?>>??@@@??>==<<;BADCA@ABEGFB@BCEDBDCDBBAFDDEA===;=AD@CBCDED?;?BEBCGFB?<=?GA>D;<>?ld8DFFA=:<;>;?=<8596:>@ABBDBCAB<;>79:@CACFGD<>9h6<@@==;;8=999;BT=cchjhZ^b99s7697848?CBA@?<:>=<:;:::;;9:84776588;7569:7663-660R+K\--)/-O1/E))O42IbZcd\J2P#NjmG\A=\/-++N3.]tMUJa@/.*,/2/4.TSK>3N<8\LM55YL@-. "' $!.(!%*3<-*')&0 )+$+1 !"  !&" &,62=1-2'+.,+#0&*1<8&+((2bFY\$2?>B!.NzHB674@b29eA;b|Ydnf{SIkiZG^=PX~dXF`p[ZWcbqqNVJQY|hbSpoYgl|nie^geuXuUg`J_pgmjgbpOQ]pbSI``ezy`s33-W[H4F@x_n{`9AC#B;I,473)LC4##eZO#.+3A-&.E<;9F;306LbtO<7;'/98Y983)&/*2BM.;95/...40$"@C?KG#FEH&'(-/0:=@<5342/*H'+4\WaaaY]\YTSeaL2546249>>>[a\BfHH?BAA@<:7lc01$D/7\_XHIGFS[@@g^];LICD;AIYC@H`k9@>LINP:;@D5&.;6,DH76?BN_4cCK5F:,=3=JJo`KGLBJJ?42>DffHWAKILGW7P=@B>qj;f9>jWGB92DLB*17&>=a,@A>TT-=?2A/07/6jJBV8:C7M-964E6,?KT110P1*+=68AONQU,fJP-#3ceIIJ`dYH1.>B6SNH;@OBA?,:8,/3AIAG62JjbY4_U59G258;I'4'%!+1,/+FNceLZ=559:LBhHX?b/U?C=R3OA@DMM1=HSYDvmZIvcXNL[B]>^BZxya]M@ji^I:VZBXDH:?@@;X\CMYT:MFHKIIHIKKIJLORc`RRY\YXVRPOW_l7:=;>DKN@^QKKKMGIKIGLZ_[\]WNTX\hEfI[XPLKFCR9MZedc_b<:5<;<@@=>=>==;989:<<86667755hjiei8ld5lf867lkk6m;l8757665679:=>?>=:88:98745775g^`ff9gefjhde423e3f3d43332442368864441123323a^VNLG@@?3Z@-8()))&(('%'&##$"" B;1(&*,28:;U9201]`]]WX3712\Y\]Z[XVSYW_^YUTSZ_^]XV[4[VKSTY^]Y[S[[^YWSOVMPWMQNROMKLSbYRW^]XWYYZ\a`^_k7<<;=97:;;7[]a_`2_[13_13]^cc\ZRZSY^RHBkUHC.MB%+05365:A>N9KVUWOF743eUNOQOOWJLKSNX]gf\VYVTRONPSJJHJWVUPRZ[4CQ\FJUQKMRTTVSWSTSGHFFOY`ZPMRQLYcX_^VZ4343467599joUYhfZ^875966g37a]_\QWW\bbj[[YWPVW;\0UGKPY4698=;8<98-/0336424381OLLRKbZ__QNUUQRPNTUTTOOSUMP\VS_YYRTVW][`3a^YXUXVXYUUVRSRT[R^2^62a89gd_\VROGFMO\0ZXVSX[SNJJLIMPPNMLNORRSTRTUWZY[[][XYYXWPLF@H68C?aTfje\k;>;7B@;37^P46,??ABABBBA=;<<;732378966jdeccm^[WUTTW^^]]^agc``af6=HLMG@<679k`:/0/,01273($"-0411,403../3/2,.1).- # !%$!   = ! 9;=;767!!  "!!##$!"!!# !"##!! "!!!  !!    !"" ! "!! !!""  "   !70  /( 0*1010/*,/3      ./"*  ,'%!'$   ' =$ +7E4*$& +   i!     +  +    & v_@$.`A ,C"6 + - ")>& # *.,%  $ *&,!!'$! #-!" +)1-3 &+  $-(!%& '  " $%- +3 (##&+/ BQ3>J.&#$( + ]b@ + +  + !#- ' &5IT/65<5(0JKCE620".  *!#'8ZL% +"E1/&+8 *&"  #% ',0-&$% -'/592$$$#-.I:9>!"+//-)-GC&(((*\S`[wxXkaKRPC0/19NW`iW,W?$&!"#%-',,7MAO+#(&CL@)^rX35O8KT4>>1;9?;@;dvo94H7:wibm[QD6'  +'"+7+'(=C{۬l>6#\bj_kt}jl^\dXOPK{o^nfs[MF?84;whZKPXTHTIB?B<\URnj67B^=DCUQ]Wegfilwnq[Wf`ejihkvzyni]QV~ALvsFHONAu64:742-++bo}YQVWWVZWUQC0*: +&/&2?$%$# -*057242/++98-$'#,01%6$% "! ;7  +-I0/&/5%50/$!#-!.1'&)#%"',,#"71" &!&$"50")!*(+*7%$!/!#'",+/96$&0!3""==#CiVUNEB:8RD9b;9`>JBH1_p_Y^lWLPJN<9/6'8LbD=.23)''$ *!0:66A6>$" ;B&2E>:BL\X5?hK:8>%! f5\6B'/,=P7@=81X87B5519SGToUV?B:C*AJ0<9&.2''+4)=/7/'/"+-)9EKHXSR;4*:5-S=ASA\jfT8<3SOLQ[EPV_QWQQX*D219''675)"-7.$'),.$"07,./')+(7(0'%]*0k[BY[7*    !M$2D,'-/  )9=A4@+$%((1/G0>-D"8(*&4!:/3997"%(+-!<6.';0-+)3$/1",?=/.'":94( 01&1&'$&%"48(06;*>;<><==:<<<:875AB;@BHEBDA<<@EM(*,,,066.JEBFDHBBEC9@CKQNNOKACEIP0D,331//,)0'-42/-. !767437829597786 4/0323///0/.,(#$#,  ! "%&#'*-+*''(')*)**'$('-,(((&+-..,*-,)#('(*(&($)),*)($*$%*&(&(&%%$(.('+/.*),++-/.--4(*,+*+)+),,,)+$)$(-'! 5+&)+$#''++2;"("*)*%1)%&(''+$&'(%,.56/,-*)(''&(""##,+,'(,'%)#((&(*+++*/+*)"$##'+0-'$&&#*.)//((69**11,*.,)++$('*-,3+)('#%%&# %!""% -(,,'%,,*((%)**)&&)*$&-+&-+,((+*-,...,+)))*+)*+()('*$+)-5/.-)'$##*'''&**%$##%%&&$%%$%&((')'((*,+---,*+*)*''#"(#!0)653/5&'"$ ! 0'+-;311.-4//+*++,...//01/./03#$%"40~}}~~~~~}~}|}|}|}|||{|||{{|{|{|{|{|{|{|||{{|~~~}}}|}~~~}|||}~~~}~}~~ ~~}}|{|||{||{|}~}~~~}~}~~~~}}~~}~~~~~ ~~}~}~~}~}}||}}|~}}~~~}}}~~}|}}}~~}|{{||}|{z||{{{|{|}|{|{|{|{|{|{|{{{|{|{|{|{|{|{z{|{|{|{zzz{{z{{z{|}|{|{|}|{zz{zz{z{z{z{z{{{z{|{{{|{|{|{|||{|}|}|} ~~}}}~~}~~}~~ ~~~~~ ~~~~~~~~}~~}}}~~~}}~} ~~~~~ ~~~~~}}}~~~~}}}~~} +~~~}~~}~~}~}~}|}|}|}|}||}}|}~~||}|} +|||}|||}}}|}|}~}|}|}|{{{|}|{|{ |{||}~}}|||}|~}|{|%}|{zzz{{zzz|~~}~~}}{|}}|}}{{|}}||}~}~~}~~~}~}~~}{{{|}~} ~}}}~}~~~~}~~~~~}~}~~}Ȁ~~}~} أɅP큏׀ƪŭ٢Žԙɰ׆“枳ƀƙ큍ؽ𝒏ٸͪԖʽ󃇇񌄖چѴ쀞ƨϮӲڽ⇖ْ伿׀яۣт۔˸¢⊛ᜁӃÚٵʵðǻÄߥ܄ݍʃϲҷހʺĤ¬聭脋๬Ҍܰڿ޾ϊ仔ߕ癪􀃇㉙⁈ՌkgvƢ̇}t}{ņ驅ԃ˿᰾Ƙ³殍􀂧ϴҲʂ憄섄㸘߷θҘՄدŶ␪ݿحՃӘ㚟ѳɪ与䷯񆕁ބڵסͲ־٥򰡡럹줈՚ݭÖȡɔƾȉҦǛ߫ٻя֣脉抔דכƋƋڒωɥᒈǰ߂܉РɻÚ̢ķ푟蘎ɃŅɃвϓќÄڿѬö㝋Ԭ߽ݻˮжԾߵ㪇㺭򣽗ۍ矰Ϣ˞ԡÚʹ߹ԩ݉ЁDžɐ߭Ȗѹ¾էƶ描㿕ޯׄ䀞¦ɺؽᯏ瀆öѡǞ緇鄂;پЅ󠕀ʪƾ¼ÿ½ȹûᇃ򃐢̿˃˵ǿɀξĵ&ecZ\]_ab]B1O9=;:C1?::84766f5b\Z[]Yedf8<=96f]][_k8k9<=C;=99=CACACEEFECA?A@?=<>;>B?=<=<999887:A=:<<@=<<;879;>BF@;8kk69::=CA?;=AE@>A?=;;<=>=ACC>=CCA@?<:;<@A?>>==>>??=@BCCBACB><<@B??=?MMKJJFGEFFGGGHGDGGFA@BA@A>>>@@=>A>:p:>==@=@>>?@@===?@B>?@A@>>>ABBC@>>?>?@@BBB@?A@B@BCCCDAEFEBB??B@BCBA?<@CCDDECDEIF>9=?BC?PMDCA=A@9@?=gQt9BDHNH<:=?ABCDEDDDCBCCCBBA@BCCGD<<>@@?=ABB>>94ce7<=;hhgVceifa^_fk<>:ph;F:8;=8;>?>><;=><:9:;5463152//4543298553/204[0T:O/61*00/.,/+,1+*;ILOXLWI^#26jZVWH:=DS\W9R::UBBhZ<3>b,YSI,8W:1?:67!$cFGP+5^p;_W[/485E0h/Q;-GDBAGI2PG'+-1323187:;@?559<=?F&&')/4>5"I/-+--46.(+ROPH:?C3AFVLND:,80'$'7%2!! 9>)(,#%3"0,&.%)/!  ! " !! ( "* *)-7<<<-3++<;>+2(NuJ1@o"6/2(8EG? C3;Q)37:O.iz^hgca}`EkBU?tiZNJCiQuO][fjIMtAUO~Lx^QrelXfoR]f_Y`lajp`Wx^]}]yd{}bnx~}WkY{kxhruzhuczTB:CekiVxTcyhYn|ljsXR(0BPT1clFbxSfrj+dc(H*(D.#"!4+'!$$!WnY!/:%#&;:,'0/"4;M,+,-1-.*!K*'8/723S1O.113Q^wQ8%%$',)N5736:;=.4%",/.)-<1'!85?7>339;9@!$&')/5:;=832/7669=@9-,8620-+>$2!$% $('%'$Ii]zZgklly}ja^uηӸپ}򚏎ť窃{v|wǤc_UQENB;/,.$(*%*;8&5/84'/1,yxxD@H()3.C6civxvtT}JPiSLFIgQeuHSC>h>WUKLYU,/I8>ZYYj28EO@?SXW]WUY\efnw|MKfqggsvk[l?CobeAyxFILHHJLOOKGB<_rCDWWhnplsqmlwvuw{|{zz~{{}|vxEE?>999:731bnBHPPSRXYVYULzYwk2":=LDbp>CEE=<_]enolwrlklov1IN'm>=>CILLHCCFIGC<6^R7.0B4/'37=iCFWbhbXF==AEGVac_`JUMHNN=]=KQS[E65;>=OoO:MfPhCGmiZ7Ag9353@BB@796?J<9_aUWG^EZeS?7(M`ZKYeaq>5&Y:JPs9XZ?WODCdq=CGB]ah7I=0L0+(/=5:B>V98GSK:8=:<6Cg=l<,&7-&HV[75N\U0,4&*$)7>VT>5*$9JEHF-@,#*EE70aPc6_?B>.=@@]4024ZM@0:*#;9T.L7C!2:=:XZ.[S@ $CIB1?O%B)0G%KM6D18:\wX]R`Ng9SK.W@8==7/35YIJ;\i;]Ca??k\uNnD=MC[rgwWeX}{xuog̦~ɼЦ{ဏn{qurdsfX^^^VVUZb_SVMcRgRWQkbvhXd7`_LQfV34@<3^<;>UcW\GiW_^TEjaJMwrprqbrxjjOyMq`dqq||WI}}ħĖ~d~khӀ|dP[ibGnIX>R^=h[MO:P`htL`YpWs7IA805;\M>STg>56@)HM&/%9DD./'16&"=J2>ED7+/I&"@DR,USQ:&(4@IK@c7DE]BNaMW2K,;59, B/&:F&.)$NJX[VX>628F9LjDDI`L=BA91:@ECFKGHW^uKK]o=pfbgiLAj[dC\SF^]eCflX]bXTMoHNN9:7YD1/Jg?;=B??=;;:988::5558:89jc7igii6h58hj7klk668<6645865669<>?;:89:99::<75566jgaZh5geaffdaff3344254f22322b4276576411acc^b_XVSKED>>5VH7='+LHJG72R[UIMW;83VRSRQNONCJPLTTXWh^X]\XTX\VQQNFKPNQOF;SOGOUVVPQKQMSMNWSPOKKMJPab`VQV^e_b65fZX744223584;7bZXYc]d_665764665`Z]_\Z\\YYcc]UQOZ\VeWUZaMZ05=66548:9TX^[02EP07?@=cWRIMKWZYXOOSDLMYUSRMMOPPTXORYOQOVgb_[Rbf^YXUWSWXQRIPROK3a_1033`29<8ec^UPELQHXU`b_NR]b^RKJIIKVOMOOPQQPRRSRTYYZZW[XW[YUPKGCB99@I6ghikg::=CE679D?>>;@B:;6=H<64\]V[*@Ek2367879;93d43:;:<=9?CFGA78==ADDBCB<0+=C?Axg|myh[nr{}m[WG?,,   '#*) $,*ɉth4#(4lmuzV{HNmZRIOpXh}JOA:b;ǥ|QKCHSI&)C3tuJHKIKNOMPOG@:Wm@AyWXĽŹ~}}{EBx972022/,+ZkAETRTV][XVK5N7C4#"CF2;"'''""418??@H,)<" (NE&&$"#%%$ 2. +, @"+3971$ #&%+02/.$)%#&'4#+,-2$$*9%#8%9%);4+"? !$$% 2/(("/")2&$33+5:2="3",/F'."3,(&58!$"/.1 & ,"*, 5!7 &-+ .//.#!&""! ,#)."#$$3(%!!.%!%(325' &.+  + +9)("-"1&'8+!$#2)%17,"0)":;<(?%&"$;/F6s]D9XXVUQFD05:=<7zWAF85DqDxjlegaVSQISU;8_Q^>A.M8,',*!;J'$ /.59"!+:3)B2<7LiY^AMK7185;7;eF28 +B=Z7-MCI?9+?8,)kUSGNkZJJ76-352)69D2$$!.$9,%#7+-0JM74.aE!/7+593187@QR~r;V"'UXIVa68,LR_PVNC).!CH0%)2I:&!*/CN]^/6+;+>((! %4$^2DDE   +,$ +  "'&% +  "#7-$.'  649++7,'$$$(:M/05G7/72-&,1323776?;D((0;"<7754&!1/3 *&*+7&6<5;:1/)6&(& 4(0H'I.F:9==@?@HX^LA&7I*+<@&21)G*0./161%DNTU+XPJFFFGBABEGJTXRCFJONIJFDP,04,%!BE&<-*.0422/! 635577456776 !640,3212221/1.1,///0./-*)($!# ,%!*'*(!&%!  ""$'$+***())++*(')*+('+,-.,..*$,+$%$',)''.''%0*&+&)%$&'(+&*'**+,'(*)+,../4)+,+-()+-./)+((*%2 - '(+*-16,*%*'"#)'())'''"$*%**,)51-0/,*.1-'&&!$''*&!'#"&'(&($)'+''-+('$$%$&0.-)'(+/*+/*(0+**,)0+/*--+*,,*(0.-)&%*+&.&%++'$'+)#,(%!!')*-(',"%%-**(&&&''*-%'+&'&(31/-'.0.++(*'++'("&'&!**.12/)& $'!('+-,$'+--'$#$%$)&%&%'('&(''((,,,-*-*),+)'%%#" %34683!$!$-/(0*!.-=2.+,,//.-,$/1*+/11/,++/1200⁃~}~}~~~}}}~~}|}|}|{|{||{{|{{{|{{|||{|{||{{{|{|{|{{|{{||{|{| |}~~}}~}~}|||}}~~}|{}|{{{|||}||}}}|||}~~}~~}}|}~~~~~ ~~~|~~}}~}~~~~}}|}~}~~ }|||}{}}|}~}~~~~}|}}}~~~|{{||}}|||{{||{|{||{{|}|{|{{{|{|{|{|{||{{|{|{|{|{|{|{z{|{{{|{||{z|}|{|{|}|{{{z {zzz{{zzz{z{{z {z{{{z{zz{z{z{||{{{|{|{|{{||{|{|}}|}||}}|}}}|} ~~~ ~~~}~}}}~~}~~ ~ +~~~~~~~~~~~}~ ~}~~}~~~~}}}~~~}}}~~}}}~~~~~~~~~ ~~}}~ ~~~}}~~}~}~}~}~~~}|}}|||}|}|||}|}}~~~||}}|||}||}|}}|||{{|}}}~~}}}|}}|}|{{|||{|{z{|}~~~}|{zzz{|{ zzz|~~}~}~}|}|{|}|||}~}|}~}~~} +~}}}~~}|{{|{{|}~~}~}~~~~~~}~~~~}~}~}~}~}}~~ +~~~}~} +~~~}~ǀ}~ ؙă񁁌턀战ևق֍˒ڥ̿ϓק˾ⰈǮҶѯ읅Ąȧݺ񣖖գ۳Ǫڠŷֽ߄폸􇛎ꌘԃʭГ֬邋̮﹡ϯ˱⽽횐ة苑®ãŒčߊ֫Ȋ½ݡ𺠜ޙȹ瓷􌏴ʽ޸톃ܜͱţӿُ̭ݫ¼᫊새̰ӎ񂃀ꄈ֥mhyzy}ttjyxy~׬󅘽͂̑՛񁒕҃ʲ肂»轵׀񅄄ȿļÿۀğ܎ހЬЀ祢뤩ōҭ훇φ˯쑒ˬۥҀĞ⋘Jɟ뭀т߲୬󮗜˫ԧ챊婞°Ę쳞ӥ˯ݕߗꖙ扙€Ũɻ썻ƖՄ߂ȓ߇鸲ÕɶŬ҉ҽ㎌Ӻ傚䍖֐ԝۚيΣæѻԸҫǪ˥۪ފꝥҨýϦꎨɠǛׇڤӯɬ쑑⢸䨙ܡոȧ҉񘌝ۤܐ籘ށВdž󀁊ϥ쵲ܾʄ܄ڥƀû뛼пӌǃƱڞćÎ݄厖иǍ췅댧ïՀξǵǬ̽¿Ѷ񃀊öĴҿµ˿ѻԈĹÄꁁ5fdcfbeff`9P78@<<4?<@<9576e7633b_b`gc66;86796^]d;7i7;ii9;:9<=:=?@CGDDDBAAA==<:;=A??=;;9799:<<:89>?=>A@=7:9;<=>><<;<;9:<=@A?==>:;~ACA@AA?@ABAABCC?>@AA@>>ACA<>>?B@>?BB@?@BACB@?@CCCBA@@A=>=;<;rr=>===<<;<=?ABBDD???>@FKMMJEFHCDFGHHGEEFIGEGFB@@??EFDAA@@=7n9=?>A>=>>>?@@=>?@@BB@A@?@?>>@>ABACA@ACGFFC@?@B@??CBABAADA=<@?@@AFB@CADCD@=<898676dcRagjhb`mo8:>>AB@ADECDEGD@CC?@A;<>;>A?>?B>??=8^_jeje]caY\_hjlrjclm:;<<=;;;88974984852432:989741/.2132SDS37==;:1.//.2142.HMC*,DWSZb^VT;M55eP;PTYODI]WNP3?em8X|3ASXT*+UOAFJARS?8QH6cKa2PGJ3;LGszS:FE6-+D:J24HN>C=7;9<76<=?E&'+62.'8:@.-1--)+.0/+,-;4.VL:.J<87/MB962,;5,'$&', "   -!&' . ) (4%"  # %$! !"2.+'882F?(..!qrSB&38Lep(1?/7323qQ#<:BEF,2fgafwnVkosctgl\VhaRhm`GsJh[WYGF~V;EnsDYVyk{u}\dnjig\OY2`s`bn}zwer`Z\rwmqi[kxPhuL\pzslrg_l<6]43HLaxNiv:iZt;()+C=6(&-#!&% 2PP:."+)J%(0(5#*5-1JB8/2.-+,;37)-G/ ' +/5$0DECU//6d07R4,995 %,0$,!$HD)RBC.!4c4:#+)!/6146@#%#EC(043.)*B5(/;3225256757>!D'(###$%(*-*/1*,*-354,%8!+7#($#%$")Hif`|LawywihdZ_aY_ʟ|ڴwzyˉɏ뱿|wtWF@8=:4-*(.32!,:7L$208//83qkD?C*'.+1eOc~`OriYg|kOUXL^k}{xpy~G_ZMJiew[TMLM.--1aQMQTMYe<=JWTWXRSMP]`cmgZbcg[\dzxqVTXki_jlADILNOPJQEKvHHV_\mjillkuvuvy~|~{~{zz}uyKDDA@<;65650-2GGB?ztozA>ss|C~}{y{uqkdGxH}vz~vv=@B>=@GID;fHF,3%91?@:[^{XMPSSUZ\]CciB;Zo;?78PNIC@>DGE@bKtvHY<,O@@4I7jWQT8gG@W-Y0<B;fWI:\mf/DT>A8?=5QO@3(2*-:MOIM/<0OF<=IGP05L28=A/ ,*5NY0:81C72]:TO,4,-/-9>PoN9fgF:@?RTilORSCD_8WhLg;HGeV>A71X_=faRD>iG^QK^Z{{~~prv}u{ʿŴhterj^\[RWogU^PW\`[WUOJZWYVW]Q~oriUQtoxsISr~e^6?Nd_79i`HIoMd{W]uf^i~HyIznink|dri]`[WZwfh}z[rq]r{wtvu~he}XnQIUDPK]_6h{x]iSTfYOLSIXmJJKJOGL:Y1_p~.%#-:%=6BI8!491;6G6$0 !43#'>,)7@5%A0''4BKINO($4&#!QPdFBYG<MYa^:NDgD[@J_wC?Bt^IcJKFA:<7^RGJFDFCJNQSQR:Rbw@?P3lZRHJ[adb1dm>JZ>X;Vdk8kbk5988<;;==>?;>;;:<;:86668i68985dmjafjnkm7lihh6i66754i35755l789;>89:8:;;;9778567jfci56gdcefa^cd3d222332c1212383545572\`ca]]]UXVND;:98Q84>%8:<;ADBEL&&&'#"""?4&&+.269:.)*0ME,.-.1Z/1]UKKS4>::9=A:22ca^c]\/2]185a]Y[Y[XVXXMC?E[BV*)I7$)48:<>5eGG8RZZ=W1B:`TQVVOQQHDDKGPZWY\UW[Z[XXYTRVMMMPTWPMJRFQA[YSZUNMXVONONOLGNXX`h]]d]UX`][\biTR\f23325853\W]\c6579:5>=6989:i[\XWUWPRQVPMPPV_8WXGUY[\^1.4448/00]T\KUYZ_1/3:9EC7bX[XUQLQVUTLFIMQOSQOKLRQNT[WVRRQU]cbZ\e`YZUUNTVKNGMOMNd952`a]X\039213c\XTURTOU_`TSZfeXRLJIRSNOOPOOQRSUVVVZVXX[\YY[ZULG9=I?<9HY\9l66:<9q@B`<4B:99?==e22[a]+>Jo3364779:6_SQR7=2:???>>CHC997>ACB@DA>?=979:::9799:9:6c]^YXWS6Wl6Ya99hb]Z^[effm>??>08<6C211425663%1.,//40,-/323=F   "  !!!  ! !#"!!! " <9  !! !!!$%&$ !""#"!!"!"" !"" 8   ! ! !  !   "  ! !" 1!67. ./3,/0(/152/.21++0-11+01,-,126<4/42!  !*"$#"!!&/)> ""%($:A(#          +  +  +       + +  VWd6#0JJ +  =   ('4  + ! " + "# 8+)'.'7%2%"# # +.%7 % !* %   $+$ "$260" #( 5KD+;08,f4  0'    +TK" '  + *0$# 9 +$)*9 (E'-?)!$    /"B  +!$!!  "%!  0PK7?#%(%'*)5!"%6;=9 %HWIlt~rst];6FR&.B57!321&+**(&#%4>B?R:R45?WGSP`=45AGZ?)5@4tczob]YYUadiG.& +   #$%/((-.wr8+%]RecNolZi{fO[[zSan~s~I_YKInnҤvVI@@B(%&*THGJQPVb:BIQQSTKRFL}t{FE}Tqm}~ywGBB=:41+*,+('0!"" "%&"5%   ,*=+%*+,.256%46#)7 (&#!%# 4%;<'/' '3(#(3(#/("#(+5$% +$##,837&&*+6 !+ .*!(."('()02,"18'#$*,6.%0:7&'!4"")-*+*%*"##)#%# %&%+ %&$#(+/(!  )-"4#,('5"-.%%1@6:6,,9"3:*6"&0(+3'9KTU9/%!7*/-.VeD>lYXXUPF3,/?J>^[6?6dP\qsgjssj\hRPXiUI>'W>QV(D:8*%$%! !41,"'$'-)MPUD^MG>C0(AELT3<70I1H[AFN;9AF&4TFFM^\,RO44205(0%50#;%+'&;/(/;2;QPF?B$5@=RA<+;:84158B/? $*65&!*570,79",/0.)%6"4'U3BPV)&&C9,>420-(**H@;;9786=CEC<8'5?H&'5#*5>AB(.**0-)?22QMLHIMLJHEFFEILILML-;6+TG>69GKJG"@C#(0!.,265/7  42761668766433414 73.0311130.0..0).1/-.-(+*& *#$%)&+--+,!""#&"(+%#,--*(*+-,(+02,'**($()#%%**&'*(*.'*')*$+'&&%$'%-+*&+'))%&*+//-113 -+*.+**.-+,*,-')*$".".)!&),.0/6""$''%.)(*+((&! !%"'-*+-),.-.-./,()%&'(+-'%"%%)(#)'$$,+)'(((%!#&(-2+-1-))-*))*/%%).*(*(+o7--**(*&'&*%$&&),)) ')&(*+%* &*+-.()''%#',+-(##&)&('$#$)('+-)*((')-12,-21,,))%)+%&"%+-+-*'*/+)(*((&(/.((+12,($#$((&&&(&'f(())+)+,..+*-,*%#& #).5!!.  3,20*$1+&&%(1/0,--,,4)/20.+.,1113 +ց~~ +~~~~~~}}||}|}|}|}|{|{|{{||{|||{|||{||{{{|{|||{{|{||{{{|{{| {{{|||{{{||{|/~~||}~}}~}|}~~}}|||}}|}}|}|}~~~~~}~~|}}}{{||}|!}}}|{||}|}~~~}~~}}~~~~~~~}~~~}~|||~~~~~~~~}{|}|}}}~~~| {}}|||}}~~~~~}||}~~~||{|}}}||{|{|{|}|||{ |||{||{||{||{{|{|||}|}|}|{|||{{|{|{|{|{|{|{z{|{ ||{{|{{|{{{z{|}|}|{|{|}|{z{z{z{|{z{z{|{|{|{|{|{|{|{|}|}|}|||}~~}  ~~~~~ }}}~~~~}}}~~~}~~~~} ~~~}}~~}~}}~~~}~~~}~}|}|}|}|}||}}| }}||}}}||}}|}}|{|{|}}~}|}|}|{|{{}}{}~}~}}|}|{{{zzz{{|{z{|~~~}}}||}|}|}~}}|}|}~}|{|||{|}~}~~~~}~~~}~~~}~}~}}~~~~~}~}}~~}π}~ ߊ񄅒넊مٌ󤿵Ƹܼ𽍛নʅЎ샵ÿѽ򋕐ىϺվƅ卤ĸƼӏᒝ炇׃󚞑࿾ΖꚆ߇ԅ黕੧ʱLj姇ڹ¼ިݻʫē抡㣆ń帮ɢ¼蕣ԑիՒƋȹ׆į蔳ʡɺҋ؉޷ݖٕԶ߮ل͵۹˸﫥Šޖ⠒ʺ˪̈́΋̧Ţl}uvxqИ剻粒u̶̳€ŹʎظߊƈԝЭ㙽ҿȬވѷ݀ٻ諤턇ŵꃁ舏恄›选̈ބڇڜ͂߆̘򠋴уÚҋ琐󝰧Ѓ܎Ä豿Ǚʜ׋ڀӓҺޫ÷ӱ׵貵̊􏘁𙺮֕Ӓͼèƅå͙Ӗپƴꂊᅔ덆ŜՕܷ؝ƩƚƖžǀ؁Џ󠩂Ľ˼䵴ښ݂́ߵ˗ų۝لؿNJƻĀۼٱ΢˶ĭ񌄏漣Ҁɏԥچ랯Ǹԣرƿ޾΀ĉӾм᫅¶꾦肑ṷ̏٘Ǎüـ򌭄ɿ߀ƿͽĿ㋑½ϸ𔡫ƺ˻񅃂ӵ셓ֆ̪љ݁L=:;798kmjfAJ]X<>85g_87=::6c5@JD><>dg`_`8:763:=fh9ifi;f_eg:;i78gi><>@>>><;;:::;8;;7;<:=?AC::=><=<89<=?::9878:>@@?<=DCA@EGGFE@?@==>?CDB?;=B@??AAACD?ABAFEA@C@ACC@>>=<>=:t;:;;<<>?DJAA@?>?AEHHGIHILMHGFEGFCCFHGIECCBJNJEECCCECA<88;>>@BB=>AC>@AEDGICFIFCB@BBCCB@?BEm>=>>AEBDA>9=>9ls@@@AFK?mnh\;;<7di67<8>98:7==MD>@?C:?DA>99>A>;8797jaXd@9:5j4:<><@E@ADEBCCCDBDA>@?9i956=?98@@@FB=:997=9:m[^]_kgZjkXgoilonp;;-5A@@?===:8788;:67566854?<<95-0221/1/536L560.00.K0,/+11WU,-Q8Tk3lF[IK\wvXm{CTNYbSK>9-H\s89,6#;@4[5:1;I8e;Ocymf{~jNrhkQhDZN[oEmtVnjZcN{@KWnkUWyss^bJoRsfenz6bXiSbv{oykzpawbph@Gq}XX~t\WN`gttNKludeZt0>;?ChbCSg;,`d0 ,,3)$*()Ld#41H'*006"+1.5#/87-4-04RxPEAAANP'Dn`ZZT|n^]GaNWr}qbXfmrq|idhe}g>RPR+,(.11^TLS[^`=KPa_XXVJKMSYii|U]eYdd`dovvthcfSaj=C}GHOHKJLKIHBBC{MQNPRhfelmiarsry~}|ywy}{|wwy|~JCFu<:8541/.2j@BMLMPQZ\XWVW^FD6).JTe`ajqv{z>{tqluss{tzBA{{ub^RnEKEB=sCCsveX`>A89:Y5:da^;;=$*AQy\mCEMJKMOKMRQODBCE867@GaBDMIA>6W6C,K2<7Z./+MBNY34G407C0N7W5,XZW3Ode=nD@gGAGEGIdSUN5+),;hcfJOTBDY:mmKVIbbGZQ:T@kG?W>a]VRGCJS-5?\DiFS@7V7 ! 76>>EV;B75RD3=(!;K%$bA@/@3L=G8?-I@$4]FF0G5"!)),7MKE"6+2Lo@DMjUnHaSURKquNJVJ9=59CNF?9;UJ6,KoM:"f2D,%-:J?#46@HJ0MC%:%'113/&/40(;/+)B.,.:.0D-%&&!9S4;+';F)6BPB1EXN7)fM`+"(06527=><;9;:?EE@AFM3\CJLYhlV?Z@2T0?LQ0@_BNhjf_XNz`zYhmfb^VC6YQNXSRMFDI4KJ:`alcQY9N\B>?8M6:HLNNHb[OPMMSRKCpd\PQROMNMRPPTVRXTSbUnTAVMeyjYiKnVsLR\bdrnj97ejm8989<9<:;>??@BA;76n6ik6676hijcakknoo87lk6f56h5hjhi65g5k679::688457:<:65hiiijheggi5iebe__ed3f2322c3121c34233156]Y^_c[[^URSPI=<64]B>C@BLPJJHKI'$#!@BD;()01447:==>; 2NO*..V,1\YSVZ_ED231^RUb]^Z\^\fWU\TOOQZQ\RZKT\QW]21`^XWVVWTLMTWUPUUUVYZVWTRTS]Vadhj9:;@B=:?A?<99<>;63a_]__[/2[246d\[bYY\\VVEAG>Hs<.OJ@'(*4:?B;81437gce_XUV]ROKMSNSSFG]LNJ8CVSZ`XSS^<6LPUR^TPMYYSUU689EB;4aaWQTLS[ZNJFEEFKHMMMTW\][^RQSVUR[Z^X`[Z]WUZ[YTMNNOMFIRYVWXPSU]YRX00/2`]XVVTX[^]][c\ZVQMMNOQTQRRRTVYWYYXYXVVX[[[XYUI??=CF@=F[Yi6=6@<7;J\5;=:6;7<>6::a7=^__^5[J>.`43317:795ZROT`:4:<=?A=6ADJK>1;@??@BCAA?=858<<>><:88<97gijd]ZDBlfi^fjgjjbbcmca_8B@*$#,E2%##$46#&&/&#*%+6DU7O>[V5GKIN7=*MnFC8-8-dio\WQ[_mie2( +  ''$,%(-PI8-)#+*7laYXUxi]XG^TYrkm^jqxutdutxc9ICI&%"()*WRHRXY];JRaa[\XNPQX_|~ܶ|TXbZaebirwtqe^aLZc=DHLRIMINKJJC?@x}v{KRNN]~u܀zxt|yzzz~D~DFn61,&%$%'-iBELQQRTZ]XVN?A.%!/./7=CEF$FCB=A?AFAC&$EGC970B*+''&G))GJ;-9#% -454  &3JA46&')*,(*//,&%&$$,!&%#*#)$+2"!(,*&&66 '#$#$++/455'3%#7($'#$'4G.0.0)/&+-",!87'+$82%2,*#9&!,43*$ ! 0%:%1*"-#$ "4#! !#%4&$!  -0*!% ')%"";A&&#( "#!7+%(/,'(&"8&&+, ,(*+)(!)G.(FHSU!;$6GCFa[a\ZWSPB.D:<<@FP>:BM6<"066FB?K1,8:6=;9'-.+.%,'?9!000*39.H:N49E>:qVHYQ,()I96$!4% &+*(%.%+HMN3/13<1*%$8*%!q/S[w8!  + ).2(!      ! + $###  +34'+;&@5/"B7A )-,),1312-,.0730.49#;(+,2;>2&6,"7*63&4 '57540*G?TAKKEB=8)"<=7E@><;5-//&?GUPAD*5:*$'$6(+57891B83379::62\TNEGIHGFFJHGIIFF=9B8NA2C9O`SDJ0@.:').01:75259 ! "#!956757429::8544533243344346512245202./1/0//&(,.0,-0*(('$1&#%*-462213/ "'% !$'$!!#(($'(*" ,%(.*-*,.-5,),'$$$($+$,"&*#&*-,()(**'"$')(&))++,,((('((.(--00,+*-,+)/-,1+-/-)+"!%;".+'%+03 $$!"%***))'%%#$$'%%,,+(+0.-1-++(+)),*+,0+&'"! &'&''%&1()%,,'%"),)&00,*#'('#+&*..*++#,3251+)*/'&#%)'(( .%'%($),*(&*"'*&,&%"+*&(%+.*'*%*00*$!!" "!!"'*..,.)')+*(/,.,2-,.,*-.,+&'&&&!#'(&%'#%%('#%,+*)*)),,,.,/,,+'$%&%'*)*)`+**++,,++,--.,,)#!#$ #.+6 )+. ///--%*0*&$&, .2474./! 3/3-12124//1701/ $/ }~~~}|}}||}|}|{|{|{|{|{{|||{{{|||{{|{|{{|{|{{|{|*}|||~}}}~}}}~}}||}|}}|}||}}}~~~~~~ }}|}||}~}}|{|}}|{||}~~~}}~~}~~~~}~~}~ ~~|}||~~~~~~~~~|{{||}|~~}~}}|~~|~ ~~~~~}~ ~}|{{|||}|||{|{|{|{|{|{z{|||{|{|}|{|{||{{|{|{|{|{|{{{|{|{|{z{|{|{z{|}|{|{|{|{z{{zzz{{z{{{z{{{z{|{|{z{z{|{||{{|{|{{|||{|{|{|{||{||{|}|}}||}|}}||}|}}}|}~~~ ~~ + ~~}~~}}}~~~~}}~~~~~~~}~~~~~~~}~~}}}~~~} +~~}~~~}}~~}~}}}~}~~}}}~}|}|}}}~}|}}}||}||}|||}}|}}}|{|}~~}|}|}|||}|}}|{|{}~}|}}}|{{zz{|}{ +z{|~~~~~}|}|||{|}~} |}}}|}}}~}~}|{|~~}||}}~}}~}~~~~}~~}~}~~}~~~~}~~ +~}~} +~~~~}~}~ ӶͿ㉊󀆋􌎈ꌖÅˑᚻ꽅̼ų󂉛񓒂ܥٕŚܲʆٶ͙孲ɟȜ񒀻쟅ӉㆄȻܮ䈈鑥⟥LJ莖䌚┘؛©Ϳ̅ˎÀᑑ내짒̿ǯ񋢞甜⅍ީ˓ثЏ݆ؤܹҝŸ뎫ˎꈝĘѾֽüͿǂ߬컌׿̈́ҳٛͯ}|unps︵vּ˻򛛪ɺͻ栋Ƈ跔ũ􂅼Ϊڴˇ萌րȽۂθ؀󀃅Ȭ߿ޔ֑ϊФކڧ蕄ϫʐߧψ򇀄쀕Ƃߍꛌؤѵ񪎧ё؊ݤފ𵺊LjƂӞ똾ꇞރӈ̏񖖃񄕭ӴǨ嫛ؼތڒ޾ナۄӧ£㎙Ͳ´צ͑}Ǎ¨ԃ狌ظ퇠μׯ쬿웵ѕϸ߫һ쩨녇ͩ䂌¹ŭÚĄӀꣶӤי͙ռΰàݺ囅䅈褿Մڶһħޠݶ۫楺˨註󎓲մ߅߷༻Їņԁ9닆ؔ򄁀¹ܔːꁐŠÛ􂊌߾Ӕɇ゗ŷʺƳ鉏ʧÿɃہʲǀœ솋̀CéŽ壼>:::<96ebf]J_P`8=:=:e^c7=g]\]:946E=5ee8:99i878:jg6ge8g`c9<9km:9f6:;98;?@BCA?<;==<@?;:<<=>>=;::;79;9;=@A=<9;<@B=<<9::76on79:;=q><=><;::<==<<A@@?@BA@@B@>=>AA@BCCBA>?A@?@?ADDCA?>??=?@@><==?FJIGEA@<?@BEB@CC>=:+@A??BCA@?@@FCC?>??BB@???A?CE@<>=@>?>=?@@DEDBfCBECFEBCD@@@=>>EAENPI?;:;oA@;6lfk@>;9=@<=>><@>BBD@>==;=5ja6;99DE5g88c978a<@@@DEEHGA@=@>EI>A?9:78mp:::o\jfkedc^bhjhglsCA=;:3/CA@??>><87;;;86679786:7:6643543/-034212/-+-00,+*-120,+,02[LTZCRVc:h56@Bk>YXN5--+/)**EDMQ.N,+)JAJEKKGKCSL3,;]m=32120/--L/Pad4S;=M6553.726@CMA97788>:34@ND=7DC@9;9A#%+36981(+V&:--(,)+**G2GG8*MG0etpN>B%H3:<-9or68;HEiuOd6THrkZxhuPiVov|ɪ^gUS^Jto|>Xad[tjfWomyoJVsypozpu;jny_WtMWsV^~atXrguhthd[adb?B4DV?zWK^:6D?.;4*')*("u"3#887(" "(&$$()*87DD'.?W`{ZTpfUSepuRv_YXJ`]vRTvĥshD0*Q+,0122875cqssgkihnMKMRVYkqpqUedba>ocV]YXeikhqEJMLMIGvw}}DA{~OOMPXVVkka_wxnwy|vuuy|}~|wx|||~~MHDCB;74432103:@x~QMNLNUXY[[^[uHQ45)POWYGX^fn{znsintqlqsvz@A}rxoZSJ[RF$90&6/*H795N3!AP"MJP43@=iu}PLI=rXj=KGGOSVRMPRTTQOM?6d<@`cBZ@8>FGF?p]kQb/:P:\Y[YU0TC\^^WD+=9wh.:Cn:fa=jL[jp?BG8N;7;U;DT=fl99cEZ[\5I>=@==;E^[jC_XHGKDBDWCNg_NBnRW``?PmBHrA?Te}mHYQQMGADDCJPPCe^n;>Lngj58k898;:;>CB>;;9:=>=?@=:j7hkffhe777khhhkk877o8ikfgffhhhg765i66768:;:899667889656fcijieghehd^bgfdgcc4dbdedb2233323328\T^Z_Z\_kWMIH?:3`T6D(HNPQPOLFG&((&%$#@?=:,-/27:;AFI1N8DJ-2,23-[Z/0086412\XZ^^_T\_\^Z[XQNQP\WTPXSWYPQXa[TTQWUTTSTQY][XTRTWYPXURVYRVScffi:?B;9::=>=;9<73211]^012\035d__fb]a`bRBGI9\vK,NMD*,26FPWMOLPK36SSPMQUZ[[WVWP07;;@B;84_WQORRI8??>@ENOcf_d`e_2_[VRYZRRNV\``[ZUS`gf\SPRV^ZR;SQ]`ZOOORQY]W]432][]ZWX[_^aa]ZTPPQMNNPOQUVVWYXYWWVXWVZ\[ZZXTNH<:DA;HKT`il=56?A<849:969:9679;mgdDOqmlggia`addlpngh76eX]nA213-%/&/.,0/-..!/0241310,/652 !66 !$!   !  !!"""!!  !$##"!  + $'%#"  #&$%%&&'&$"$!"  !!"" ""!" "! V!!!  "  ! """#! !!"()%6"  !6325/, 1-.l!/25'1.310/,.0///03   [  #%,+ (!    #) '' Y + +   + +  ,'  03#> + +   +        +NkD,)#?|t  + + +0*&&3"0$   + ' + # '9";"%5#"+ ( + "&#!*6 +C+  +##2 + + )!E*/! +: &$  L\ ! &b11 34:**&"     +  4-*6 % ( +* +   + !<)[FC?A $*.)07+6/XWeoAe\ZI>99=A.  ().C6""%" (("#1F<:HTZCK9Q:.05:?8BO.-/7/0npyu]KZk%.  3-9/&"(+<4&#*"$'*1U@8/&$,')@T_wWNl_RSdsz_k]aKc^yWa֬羐qd?*$J)')+,,111_nsrjpoopSTY\_hʈsRcd]^}?o`QVSTdcb_lGKNMLIHw|~}C=ox~{MONOXX[yin|}xxz|{GCBA=4.)&3"$&)19@{UQPNPXZWYVJ9C(+ #),",19@GG@C;>A@?C$&GAFA30*4*&)  "&18>+*( 9*2%%',/2.,/0220,(,+. -##%#7,5'/%'((*++,//+=644.6+149!"$(('!58 3#!4-3438*//+*)+5"&5<4*'.%+6&5 #'+,&).1$1#%/!#!0/3!/-/  ')')()%/1"&.*#0+0(+&"#/$,/0$&#() 8-)J9'#")-%2&''OJ1)1C&%2?B&H/^\_caWNKS=J=62926LJ.9"'36:D%6"$!$";8?N.6Q<*D^ZFMCLXd12KO69BQ60=Z:0KTWF7A)/0+M9=L@[H,25=.0,*-(#$;#,?38 -X:>T.D0,J@?OY3-Y42\00=0242=,B5M>>F@6=c2OzLM^P>Q)-M$".$"#"!$,-$1kys=41!)33.NW033l>nM1"   +  !,   ) # 3# +8)&*,7CFPRNL?@('+RHORRMHFHG8FFEJKJLNWXX1*IGJHKZ46ZRP2(;$+34446356 ""  668446374768896755435544510577544241/043230///0110%&-+-+.1;-&%$ 1.&-2542230-"#"#"$%$&%''  ''+)*,+.&+/./--+'%%#)'&#(()*%$'+)&'%('(('(%*,,+))*,,%)('(*')(0///"*))../32/100( !,>+,1+&*031'(&'#'%$+',&&)*%'&&"''&'$&*'&')-/0-.0/%'+,-/,*%$ !$+()(*,1''%))#!&(%,,)**/,+.-&+,/+))--.,.050+*++)%')&*)("'%""%!'+$%$'#()'#$'*)*)()#-+(&((##!*,*.-0,+,*(--('%*.00,,*)054/*)*+11/*($+.+%%$&%((&*,+-+))),---,,)&%'%&&()),,+,+*+,U---.+)&$$!#'(234 " 212-.0'(*)&)*%&* /754#'866333--/1069:540+/9!́~ ~~ ~~}~}|}|}|{{{|{|{|{|{|{|}|}}~~~}|}~~}|} |}||}~~~~~~}~~||}|}}|||}{~~}|}~~|}~~~}}~~~~~} ~~}~}~~~~~}|~~~|~~}}~~}|}}||}|}~~~}~~}~~~}}}~~}~~~}||{|{|{|{|{|{{||{z{|{z{|}|}}|{|{z{|{||{{{|{{{|{{{|{|{|{|{z{|}|}|{|{ zzz{zz{zz{{z{z{z{|{|{|{|{|{||{|{|}|}|}~~~~~~~~~ +~~}~~~}}}~~~~ ~~~~~~~~~}~~~~~~~~}~}}}~}|}~}}~~~}|}|}|}}|}}|}|}}||}}||}|{|}}|{|}~~~}}}|}|{|}{ +}~~}~~}}}|}|{z|~|}{z{ |~}~}~}|}|}|}}}~}|}|{}}~}~}|}~~~}~}~~~ }}}~~~~}~~~~}~}~}~~}}}~~~}~}~ ~~~} ~} ޻񌊇؀큈źᒂ녔Ƃ達܌󂅄ܻѱ§Ə؀̎ҭ䆁ֲōɗǮ̌þۈÖӔᗤ貤ʜ얉ԑ✨ј겄청슥ᵄɵժ˓ʊ몼ժܢܴ—棃ښ򒟷å䄒ڷдϰdzҀďߔ´̡嗏ӝގ޹Ǜõ􁈅øՀƾ砋ՙ͗ͥwxz|ͯzevu~{rزʰӄ«š׻ꅙڟʉń˄䧀ބ~ƦǥЀ񁀂섍ƹπۣ͇݃ɿؑ≣ɽҩꥤڿ􌨫֖񡗑׵یʼҨƄ֒銎ۘǀܴӟӿȩٽŶуɚȧҢ֬ΊɊ擏בݎݽݞ׈˸Ġ厖ϲ÷靓綹ѐ۾̜ꑈĻϘǐ}񁘚끁۫Ϝݍф̅Ȱɬ؞권Ī͊힃Ϸ߷ʤأᬢݞӀʚѺњ𯯍Ԭݙ̼߃ʦΨɸ辍ϳıą쳀婓דɦ𶜂ôɈïژ̡Ó̭ΟýⲘȼǭ捳ʌҭ׌޲ҩ얺ٷƿ¾õӊٯϒվֱւߒӀ􉎉幘܃ፑغ񑛛ϾùĀ烄ưʽºƓ펊􌋆󄂉ͽǻׂü·ȹ뉇˸ϻӺ菆􃌎¿οB?pjlfhc^d_SNU`l>=;9::<<>@@=99:<;;<85:;99=@=<99;::==;=>:999<;=86l87;>>>@@:n9=<=>::<<;=>@@>AABECB@?@@??A>=>=AA@ACHBCADCBEIGHCFCABB@@A@AB?BBCBA@?>=?@ABACEB?>?DA@?DECA@B@> +?>@CCA@>>=@??CCA@>>@?@?>>@A:>A@@BDA@DB=@@>>@A=9;mp=>>ckGCOF?<9;he899J`<2]9<88:9fe;?<=?DEB>AEA>><<@@BDEFCBC=r=l:;=@:B>na[hm^Ys>mjllkhnEDt>AA<5@CBA@@>:7<>?::967::67:55541125524351210/-.12/,45-02.,B9,;hg6;H=9;aWXV6MdF0WAf10*,+*JJNM)+*IRKULMMBG?DD];125.872/+//)1B[VG0;; "RC9?9:9>D=;ANJD:=0')F"1-1,+C@DD>--185MN-)KRJ%# :5/F3,,5G?=3@52>Wr"!%"! ""!%((%#(&8*%# !%*0(1#"#*#'"  +  !'+_h-,enXay}+L)%"#7=L?5; 0|[vxHnFHGhyQ\aWremGJaF^JS>B)2DH{g.aU{6B^freBSnYenoLRQzgleBDF5@pwghcmcVr}}JVqU]^wuopGfuZdhUdLBJGrdNJNPPwmah`er*G_ZOgI5?+%G2:FL*1- X&)2),=D43-+%5B; ,;.!!(-3&J0P6*!35/"9BU6&#,++-' #) " + "*+20961,0!-'9A6ADCEo>%7982-*!    -8+&$&'/1//27: =9/(*,,-+'+/2!&.5599:4SILdwUfuwdXc`|m{xpլ˿ǾׇӴ‡Բͫ꟝٬䴠pX_<+1-$1.0%$#8VafJ5CB=9:/46'>K+)cBjWbT]MhcY|njyZVFJ=F{^QKYqnúzfH3,-/W.9;7*+79FG;>>MIDmklf]kdiinksy{q`[XX`jilrkxDBFJ~@xyBABC}FD{|DMQVUOIQQTWX·iha`u~xw|wtsrvuz{}{ywvv}}KF@<643443fj;vxOLKMRUTXZbMYf8 0%9FJJRaieehn{}wyrrjjsjmvtsqgCxh`WJGK/CH! &40*248<=268Lu?^?@JINL>8o?W^PQODNPONQSQQOQPJ:X^HHIR8GFKa9HNFbeLg5U_m2;>>4;PnpeNd:7EFMRWB^Z[q>_\>9=mEbtyQ*R/E+%NP[GORFCMYt;SC=,.4N)?jnr^?WE=KKCM"N>B<03<>jA3D.C4G=h`@EUI9ZL8F6Z.gV"WMG4C>[D/nFeL>AK1UA*4B>$1TIN`pXR?)?M,5,)37D:J'3QJHQWbL[`SI4f6b@AhPKCP[JGYu[ULz:KTSZWzvuԁƄyu˳“ΒserxbkxpkW]YZRNHUVZ^XXgUdQPMRTaOTZPR`^~vcsWOMC`[bmt[tZt>ZH@df`ksyXlQnqq_Ue_il`jipndctTRrrréйwȝycwlrÌ~ai|sZ{DRe}le|qzIzrqwersQtUbtKgVCB[]^LMDDb8rg.y[M^V*4,UC<&><;#+@U\J0>8UXO"9@*/))+/-;96'$6;.91H2%#);*8K3Sc=,+NO5%.'-lSrFwRL855:^qSmAN;8668:??@=VU?FTOLVbSTMWb^OAmAxwcLD:t8;KQJhuaNg@YbrkDRZPITY[^?JBA?iVB;75d_\^bBQANIJ~MUY[YSSKEJHKJJIJMQQKHLRTPRV]cd^XVURTW]disrn8F?mk5668;58:89;><=;:::8;88;>>>99:89=44044^[012ZZ365d]Y][Z^cK;LB:_48QKOJ%,1;?B7OYHJIMOJ[8:<6[\ULVZTRPNKPLJMLQOMRVWWU[WRQ[SVSW23]YUKD@CEMSXWVYWTMGOKGK;857W73[765c\V[[X\Y]\[cY[]`6465983HULIMOZ]jphg8l[44^\WTSSSRYXc`\`[Sde_ZZWTYZ`WKUNMZfkZSUINOU[TN]0]`ZWY[0_\32ZURPPNuMPSTXXXYYUXVWYXWVXWVSUUJCA7A=CHGkje:55996;8:7B;:?A48565e<2<^\:6<:(8Yi2657796^YdFAfi_cdd=9=?C@FFBEF@B8:>FJACC?94567:>;: 689996hdMQikg`dd[Z_j676figgm;nt?"722143020)',44 21,.+*-(,-11113661005232012 4 !!8  "!  *  ""!!$!! "!""%%&"#" "" !"    !"$#"!#$#%$$"!$$#"! ""!!"  !  "$  !!       !  79! !5/3/6"#1.#-+21 !! 62i40+15++93351001 1  -, #!!  &  !    +       + +  [$,         +  :Q` ?S;  + $#% + 20$A    2&6 ) *%-($ 3 ( :& +$!!.. -H$("4'# 7  +" !! A + /",>8  +. #' 07&m +#.":"  %-A1 +  +  +  +  -,9=<>`2&#     !$"%(!'8CI$""";8.97;3QXCehceZNW2^.420?()*+ ).&$'0CQ>-1#(9>> !&.MT=49>8R>&$Fc.,7A/)26+1vjkfTHXz) +  +8DN9$.--*,)*,-?7,+.X|nSA7,--/"\@eT^N^KcbV{oiswYhOR>HZPG_Lj㰂cF0((+X+682$$03@B7NRVWLEQPSWZ³xyli}}{vvv|}|~׽GC~=4+'&((+Ze;v~RNJKTVUVND/06 +##+4:89* %&+*!8(,,,.&-0/.140.&%'!$%$$!-&("-,(9'+; (9;4&-)4*"&(,- -,,=!3." 71#*#&,%*-0-*%!#!%,)%(/.$=#" -6!(%(&1%4?%",%"&"(&3>&&88<1 .!%## 5&&!84"#-$+*'56' +$"# (:"/&"" .4$!52/468 (0&#/-, !#MX8-(+2!$ +:)@>** !'"69##J76IVGFGNBEM<4u2.G?JRR?I=I"?_.*PSc@HON9@'8\I:;1)0@+./'-)*"6&&0&*-4/7A6I-TO<:`HA@bG.'LP<;>079%3)&1/.@JO/;2027unIUWEL5"2#/(,"$("'((&()0(-+e\L48''>?..+,>!N=\:,!! 2+/#-/& "    " + + +)10    J2:779*&$&>S8J.4+++.1/421):7$)31.38-,',4/)!:EE9*(#J$ #!:F;,<%25>JJ<&-54-4898',&%"&0;89<<::7klmigddfm;96ihgdb`_c69689;=;<<899;;<<:<:===::98;:;:;=;9<=;999:===;>A=<88<:9;?AA;===><;;;=?=;=>??BC?>@DGGHBA>?@<<:??D@ABEFEBCEFD@AECC?>><@@;p:?ABABDBAAAC@EHFFGEFIHKLKJFEBBDDFGFEDCCCAAACCDDC@?AGD@@BDEBA?=@@?ABCBBACIEDEGA>A@@AAFD?>>=>>?@A?=?>AC?<<8=AB@?ABC?=?<>DE?=?H><<>A?<>:?C>rqq<<=97bb>B@>=9ng?89CA:;<>:4FECDAB@>;:85ld^mAB78<=99=lk<==>@>C@8:>AA;9=@@@<:kf>A<;?A?=rguegkdaifZ]jjgklCIB;;::6BBB@<9<=?@B>=;9879:;=;6341/1610432212-..//3.11..-,,*+<-+O6=@;AA79<=<8668?>BHMDH>AEF.198:;:+'NJ!:16-E<)IH@A11, !)A?H%6+' ",/M**-/320=R%1ID`P!4!#"!!!  #.#!*7%& !%%# '###' $$%^pxJ#% :OoZdSCX=H27?5(3#Nyo[aHy^XImaMdiFa=mJZ\iPSZKbbRMH;`2)Q|]IHlMyiyWrj_Os7Db:wNaepvWJFD\dY\hWLjS_qa^VWpbVenyLd]kjL}eJgZcYIMQő^Up[xtW`l[jMbUIagNc>2O?.8NC(,>+)5"02704ABB7;60%8Q9'%:7>0,D/=>&<="648@2$!Qj?$#),-*'(#*$!!! + + $-?U84F4/;OTwSDGCLpVZpٵiXob2-0W239774>65AOFGVYRnɟbzabnalellekNZZf@B@BB?n>AFfff?KJMLNKIOPE=>EPHDPPNPTNOQTVSF=786<6`E552;66]Y=&,NZC?4qp:KK@?IAUd9:0B3983I0O)8:4i8?LJJNSd;3,>9;8omH:KHZ<2/gS07B:=KPINSOSKNUQ@]IA5hY?+Iv88M\G81G92QCm:kXL;1.-SF>KE=;H089DI+DI%4B6A518<`gTh9QERO^3]94JZ]e=M-?B&%030_C5G_TWFkYC*9DK3;I=DR^YFI@CG2]32FQ@79N7@DEX)QER6A:R\WC236(FS5C?Z47WOSW>=e>5EWG?IT[TH;emanrsXV@r_@~V^Qkc}nǾЎȤëϑ馄__dWTiidZhUNL\_b\YRLPPRTYZVMQWSyYeVWMlrkc^Ac02&.C7&3(9DNHA3.8C7)!$ %9@61#&7>+3LT6.C!69).:-1)2./*-0#PC~PlM|gP57KpAKEVRQG?=@;<>>D5WGcg\s\MGU>WSZK:M1::=@WD;F?h>QL{lkAJ`vCG`BZNTWMDIJD=EX?UfebTLMJDnP:olS9QK@ED=hPMLQ,+NG1*VW.3643241]]\^`X\]\]_beg_ZXRWZSUQPLTOLLNZUMP]][^[^^SV[b]OQYWcSSY`ac_]\\^fh798<::@<><=88:8:955395W_1`2_Y243a`XSVMZYJCE:;;HxEFTU)+.:>9ZKPICPQY\49X09cWMGOSQOKRHMNFILIMOPSWXTNUPIQU[Q[6:3]WPG=?BCMRWYZYRMGOIMRf3;2K674:52c[SS[WKKKOV_ZYc5c269<73:::96hh6aVV]b[a[VQYTVXXVTNMNHDICEFKLM98:9YQKMROQQOUTOS\1XRS\ZY5YZ27:==\QNQKGEKKTaQWZ[YVOUVSh95_\VRRNTWQZ]15a\b^[WTPUYVWYXSPEUQT[[bYSW[`XPRXXVTPT\0]385^XRPMOVPSTPLQVVXWXVYVVSUTSPRQRQQONIB357BRgh9;99;aif?C::9?<:>5g98794>T\8BW:(=HX556:;=Y47K8<;99eVML65:<>?@AAA@>?==8@IGCGB>9654658;;7977787544iPZV]\[__^[g6796:9eikce`< <65754/021/01230 5-.-+2.*.3-1446644233623222.-/ *!!    !"###   !!$#" !"$# "!!  !9 ! "$#"" !!##"#"""!""#$#"#"!{"""! !$#!!"#!!  ""!! !!#  !     " !6791-62 20.1431/6552;1020.1/),4101/"  + #%##%)+ &        K    + +  + + +   + 2 +  + +  +   + + + + G}WT, ($5= +  + + !'+6 +# , +    !%$ , $"$% ! )4 %-/8+% &%& +:%%(0;$)7&(6 + !#$"&H* + $" + +-*##%0";Q-  + +   +  ".  08:D;E&*)&$ $*$*69.5:QYMiXGWZFO3C" + 66-#%(VXdvAHLGKTYVTG8I13$ !""!#*896:@FMNJD@CD97CB@;=A8>'&HAC%'?75<6=6'&(#4C;9"& !((**,U**,-% &/('//.0400144."+!-- &.!69$# )3&/&%$&&6"79#&!*:,!'*$')'*&'/.$/& 0*)B **,#' ;!7*&%$%   ! $15)6$#%%.,#*.3'##('5&)";-!!% "-10'( *!"&  '/* +-0444%7!!+ %'' 5DR]F6<=?-,!=0$QTWLW/2*74@;8N6-VVXaBIFD=B[iUW^x`NhRTUTtI4exI3,'QB*!",1 $+'529-#! :9AMPG902@HB;h=4LMPND@0C"73-:+hH8eIBGHsEC@99SN.1R2>;*32+(''/)0')0)74:7=@yvGEsM@]5UF2{P_XR<:2D-+..)E/+S?Hb1:W2/ZT^VO2%&#',*"!'% ,!#%6\vN2F5$H?589:>/"4'eb&!       +   "( /&N4H0WD:),5003122//#5O,>B:G6/+1#2+,$& $3+(,#9"0/KA>%)4?$&G4$6056/,10,$(/!,442*()(&B.$EG9$;6-YKEEA?;@A@@@D@8:BABqEHFEECEEGJJIGFKLIIKQQTPLJIIIJGHNMLD#3,'485115587756430588747302014895464575245641322673454012/-1/.--,**)''$$3)%2!%%&#!&'()'(),%*%%+,+-/+-.,+.133/-,'),''%$#(%##$*'#$,,+,*+,(()/-%&)(/(()+-.+,-,,00$*+*'//+(*#,-&!"9 '40!*339%(" '&((%1+%!%)('#'!%'##%"$$#%(,+&*("&')$'/.)$ $%(--+)&"&$$(/0-(',*%$#%(.*(-*540**.0,0+)%*'&'*+(#%%#!$""%&&.'%')%''&)'$',)%$+)'%%,($&" #"'0%'(()*%)))2,+)'(%')&,,/+/-.+*(+,*+--)' *%&+,2,&*.1-((++))%&+)-)%&%&+&()&%(+,+++),*+)*))&(''%&&&##*64053!!5!(.+*-(" 0($"94&,*.-.00/,1134132~}}~ +~~}}~~~}}}~~~~~~~}|{{|{|{|{|{|{|~| ~~~}|}}}||}|}~~||~~~}|}|} ~}}|~~}||}}|{|} |~~}|~~}~}|}} ~}~~}}}~}~~~ ~~}~}|~||}~~~}}}|||~~}~}}~~}~}~}~~}~||{{||{{|}|{|{|{|{|{{||{|{z{|{z{|}|{z{|{|{|{z{|||}|{|{{{z{zzz{{zz{zyz{zz{{{z{z{|{|{||{|{|{|{|{|{|}|}||}|}}|} ~~~~~ ~ ~~~~~~}}~~~~~~~  ~~~~~~}~~~}}~~}~}~} ~~}}}~~~}~~}|}|}}}|||}|}}|||}|{|||}|}}|{z{{|{|}||}|{{||{||{|}|||{{|{|}|||{|}||}}| {z~|||}||{z{{{|~}|}|||{{||}|}~}}|}}}~~~~}~}~~~~~}~~~}~ +}~~}} ܁􆇈ЇՀ唚⃘򅏐΁Ɯ̻끓Dz遅ܿ󄁎·֟脓̄ѣ¶޻Éӝܺ˵ådz샌߫БҋԂҲ݁۶ϳٌґų⤒ҪƤАɾ܎ɖ̊Āʅғȏصȏ؈ЭŐރ奃׎لОێ³λ‿؟庺ɺ½ޭꂓÒ܈Ʋ𑙲Ѐ鄅ꇑ手۾Ұě|wvt{xpy}uqpjb^gkp{yrj˘͗˾돉ɥیǠ⁙{{ޏ̃Ȯ½˳⃄لƹۍݸžҺъ狎♰߷󘚠ͅ䵭׆Ҏ瑹܁ًΞڞ܇Ã௖͒Ǜ㑤ߎƻ󅏛ۀ܀"čɉņ﷢Եɺ˲ݾ݉驓ך̸͉ҦО銪ą䄜ꀂꆴނַσ܂ϿՑЙș̠鞢۬Ҭ眼ڤʦDž珀йɹ׀ºʆѹݓήԀ猨ݜӺ٥蚈ӧӭ꓎߂Ϟ奩ͥ˨ƴ􉘙򈑎ĺЎҹIJуӀ鄂ԻÛĿٯ±Ǹ»Ľ݀ü눚ɼýžኘ熎ѿボ˸ö±넆¹򍛐º̸ĀҊ왶д䄁ʾ􄋈̀OXbVV\][XY^:9ibbg[Y`]^bbfheWUWW[b^f_[i=;:99;<==:<;:99778;<<9>>A@8:<:8:;;:<<9:;<:998:<>=>AEA@?>>CFECDBBABAABABGFDDB=@??BBFFGEAEHFECA@>=:9rskl::<<@AAFFCA???BBA@BB?@CEA@C?@>?@BBAB@AA??D??@ABCEEEBA?;;:?>?D?::8n=>==<@@h^RZ<;=l;iT6h;8if]YdAB>A::>AHNJCCDCFIAB=:9<=WkID?=@?ll:97;<<<;@@>>A<7=B@=;<<>>>;9::88<@?=;83023.X244120.-/--*4/2/31--,(-P6YV^Q++N0Z\d\JUbd\500/U7AR//NX*GNR.;=?@-0FF3>CSY27//18SM225-04,2-0+,*C5$"+cHLJLJ)*(*E@?<=9;;B53757@CHD:66E%$).+,1570';*, 0622@;8/.@33J$&A[Y|U[UOT}LsKEdxEoeAXCTFO;=]n;8k\cquwNYyXTh}~H@J|A`[I^O|EHZmfvIseexh8AOQmkYzw_dk~g`pinR>::$"+#/>!9.-#%,/0//)')++*("%$  +GYRS1PK. *!5@x|?nADLmV;IF<9DIGAqvQOPPLRYWosyzxvyr{wyustux{zzyunx}B?:6214ls}DKGCGQSSX\oPZcc+=GsdRL]]WQZkopokzB}stxo^giudela^f}}=n]gtBk]LuI=CNLPMOLOFJFDNONJLHENKGTa^XB@NRQTQOQVSVTYYSDj[@CD=28j[/VdABi9KalVYYUYA8?gAIOI=?9A>4T=8oc%;JE;CIKRV\EFDo\@qXXDM40"39QX/0,YbkV1>)U6NMJEA1A9QFWHY;;[FP;6>;DZ36(\2>:>QQ8OkZ=N!%LD6=?)+K8!;AKaD.$D"?C;Q?25N;8I;152V4=emg_326)FB#%>7;oFQZAR/137@:"@D!#6+-EA8O7;SOfZh;3C3LNM0C0&1,HCmlehBGO[20AR\G1S/2<P#),85-J*H==E622&5$!*$!""2!&)+/94@A%(K+2OE'/@tARZ^j6'-1342135E_OHTOHLXzN]sE=h>=o]EfJQX?^J92C_OsGHJHJHA`JeSE4589BgjkYQKKIGIJEFLJ>6DGGHJNKHJGHKNMJILKOSVWbu|p`Y\]W\Z]aq?LLVDlRo;?=;:8jeeb^ei8<@=?;=;;=98nkhjjighfbh6d69k67:ohdefb_\`bglgi7hhhgkik78ih569899?876gbek6886dbiejgg68hfefhcddd2244bebb^^YWZSMSUSPNIE>:7a3;/I))*+++*)%%&'))'$"!>:7+&,6:>@ABBB?C9M\CMUY..U0CACI.6331021/1]b^YZ_^]]ae^a]YX\WQRQPOYQOLNWWQUc`X[]edXWccXOWU]`_XY\`c_`^]a57l869:@A><=<9:<7656567b_bb_30U30^3\VQTTYTJHFCAA3mZ;7^417FB3=XGMNFbea35T\05VPGLIOUROJJLFHRLNVX[XXQPQMIPO^V3:=f`ZUL<>>?KTLV\`WOMMNPTU6;^U47586d`aZWW]UPMHNRUYde33599697323:644_^VSUVYVKIXUW[^]QLGKCKOF<;@B?7[V>Y[SJOMPMRXULPU\VSLRR0:9W\\3,<8YWTJIJLIRWXXRVTNEMNLPQj:`STPSUPMYY225^^WSYZPQPNLMEDDATVad_ddPS\S[a[[ZQLNNS[6<66b\RKGLYHRURONVWX\YWWVWWRQQQNNPOMLLKG;O9:Vk`D>4;;3V_@L?=:>;9E;b\698;6N`@HiK-?@m8656:879:8833>`PGZ734;=;<;>@CB?=@==EIIJGEA>97a57669898997:773dc]]Y\[U^dckhag7985h``aVg)-3,,/0-..05237-,10/32255.-,,.1-1/-40201641344254432124563010.222 +"!#   #! !! "#!  ""  !;"! "%#"! :;88! !#$$ "$''%##$('&$"!"!!#3" !! !"# #$!! "#!  !! !! !  83.),66'/32.,.! ! )/02,1,831,$3+20,30/0/// %),) '-+&  + !  !         +   +   +      +RQMXA! + "%V&  + +' J( +H" + +  *      + $" &% +%"G   +5! $ $$2#/&, +  * +%$$ +.  +7 $* 3$28C 9 (0/ + (*-."(*&*C + -(&%("$+#$ #+    +   ,+"!$ -@A):A==;/&)+   + + + + + + +     "8$&**.)!%(/4-/;EkzphW7UbT;/+W7%++5<& ,#&/56831&1572##! "(&$ 5+.,6 &&!)%%,/-hidTZ71   +5AJKOS?6/# '(,3@9>Yzeib]aO91(,/@2XQW[FbUqTv{[j\Bp}|MSg@moTf{S^8O,ML)2175/:5=VLUV]h|ۃܹ}cdQEH^WDPctcWWM@I_<=::ov;h=DJ~hP8DD77BFC?gn{}OMONIOķee{}{vv}w@;6.'#'ZiwHJD@FQRQNDI.151"7,'#.//+1=>@@>IP(JBBE@6<=D9:>86;HH$@4;C%E5-"<&#)**'*),'*$$,,+)*&%+(%.751##-0020/1434341(-#"#5/+3 +$.7)-.)(4&''%!!( 51)'"'',/6$ "4(3//$'))0081&)*&")#1&(1)."'2 6*! ,,#6,  &(5$ !$%#%384/$%4+/#/ &# %"$"+)8*:!"#! + +1+)(!$!'+ %+$"%"-7#%'#"4,657*;0%&9G:?L!BR.75,;5D(?*/#17B'.0@8*+SV_P/L;%'%'&*#-/%07 ""#%'"5c /8,.UHHGE(-.:8td#' + "     +  !" !DR%5?EF!$()*'%)-:J:-/520/9;>.@+ &*#D*5@)162.&77;1(,6@<<>D\5:D%:$">6(<+05(?4*#/?.>%#$#'%&7-G;/&$$&-JPUKGDFC?>A@AGE92=BBBFIGDECDEIFFDFFGGEDHW`]UOONLMKGCH%,*0$9+87453156"748768774541535962340.,0137565432565333/15426342250212/030.101/.*)+'!(*)(%$"4 *##"$'**++**# #+0-)*.-+,03-1.,*+)&&%%%+''$$*)&)00***./**12+&+'-,.+*,-/,.../4,+-,*"**)&()-*%#"! 4+2 %32.#."'( .-+#')&!$#'+(&#$%#"'$$'&(')(%%$"%")$02-.'%*%+/3,&%%&&('(%215.++.+(&"$&'(,+,-)()(*(!!)'&(++%#"%&(" 1.--)$'&'%(+*#'),(&"$$'()**(!!#%!&())%((% %%$''3-%'%(*&$+(+.+(+,'(&&$% ((/0-00"%.*.2./-(%&%(*/+&#"$,"()('&,-+-+*+*++(''&%%&$##$$!&/9/"(/ '!0-%/!1%(,9R)'!-,11-/,,.).2042-13./1- 􁄀 ~}~}~ ~~~~}~~~}|{{|{|{{|{|{|}}|~}}~~~}}~} |}}~~}~}}~~~}|}||}|}|||{|}}||~~}|}~~}||}~}}|}~~}~}~~~}||}~}}}~~~~}~}||}}|.}|}~~}}}~~~~}}|}||}~~~}~}}}~~}~~~~}}}~~|||{||{{{|||{|||{|{|{||{|{|{{{|{zzz{|}|{|{{zz{z{|{|{|{zzz{{|||}|{|{|{z{z{zyzyyzzz{{{|{{|{{{zzz{z{zz{|{| {{|{|{||{{{|{|{|{|}|}|}~ ~~~~~~~ ~~~}~ +~}~}}~~ ~}}~}~~~~~~~~~~~ ~}}}~}~}~}| }|}}~~}}}~~}|}||}|}|}|}}}||}}}|}~}|}}|zz{{|{|}|{|{{|{|{|}|{|{{|}| z~}||}}}|{{z{|~~}~} +||}}~}}}||{|}|}|}|{z|}|||}||~~}~~~~~~ ~~}~~}~~} +~}} ÿۂ厔놆ꀂ愖􀃂ȱת̣NJ̺䊑ַ͑󍑒؏ΘŮʬĽԴԽ½ʆ˞ߊ啋⾅ЄğܑݎڊȎՂ䉮؁鸘ꗀϡ饄歒菹҃˛ðٴﭲĝ̗Кɉ煷݈̳߀Ѷр̦􆈍˲ě􇆅ȳϴ߀獎墨͵ٗwxjgqsrqpsz}yorlksfd_[bnttȂ„ɀɬ􉬶ƾ׻ܱ񆓓ǹžȹɝʂϱĸ󁉇ȿՍĻπȇĴ߶㳱򄒟טߟ┓ĵӁ޴ߡۭ̞ϭ݀́݉عꊇʋȇת§㌐򘁏̧ɷʑܑǟѣƦƋ˜鷾ގכ⃋Ѭʗ݇߂ݧ쐥ׯǛ󈌢|ﵫ߉գҿ̬ưܤފɘ͑󿅽ݷ馷Æϻ˃~썭ķśƙ􀄎ݐݼԇӢÿ⬺˂빈ʌޞߣǍ܂ߟۜᗤϨĐۮǴ㭒ࠅĜЭֵա჎̭ՆԹめ󀍏􁄄ڽҠƤ܉֠ܿŮрҸ᳜̕dzúÀ戋ʲ퇁쁂ɷ´䇚½탃񎋍ýڂⴣ؈聏׀UURTY]ZXZZ`o@=8gia^]cjlcbcZVVTYZ\^9k]^=?=8898;<8464i6m:kimjgij687899857989pmkgffgfggi87;=;:9989:<<;99;<<;<<;;<>><<::978:=@@>;>ACB??><;>@@FAABADJHEGFEDFBB@>=ABBDFFICBDCCDEEDA=:;ow=qsr8<>DFHGFEFIIECBDEDEHJKIEGHIIGFFGDCEHEED@B@@?>BB@?A@?<=;;<=?@>?@BDDEAB@>??CDECAAB?@BDHB?@CD@@?ACA?>@EGC@>=;8k89<=><=:ii9o;mpl:kige6BACAADGG>ABF:;;<:d5BFA<<5c9<`9@B:5<@?<:96@<<68:7=@A:o8ED6>N7397:C>@3/29G@;()(%=2?=),+(4<+*/*=9!4/#"#)5C7DO3H88 ")'%1,#...!#,(.(&'/" #3$)&&2.%"-'!#%'   ##*rsk.PXbBYw}^],I;?%(35.*Q[Snbc_p\X|el|_o:ujMHCM[H[:TH_QGIL]CGd_ToOe[sVJ[~Vh}gvH+WOO4PMi`/OlECAbk\eW1AkWpr\|ranamo1X]nyj^]^f<{qod>qfcHclZ^dx`feCQ;nXa}*-:+<.LE:0?5&Ib&:B==18,5?E64+O2^  6@+.37/$88=<#1(A9.*-$$-,63-*')'&*'%'"# >OOIJR0& %CI:=?H).0826>CDzE&!%.--+. 65=I?0 %5172$$/,6/.423:0**.1I+525/DI,30UY8=h:?A=BBwquPOKOSs{vtsyw~suqtruzyzsot{=9541eyGEEELPPMLH?FPSTUnJVaj@?_PTILOS]_]acy~urnquvorkiZ\gj`]]affdqrPM3N;gwwvA=DINPRMLFBJKGIQSROLGFMNLNPS\^XNLNQSSQPRSUSSVQ8fX\/;;I_EH`^e68p8kdm:CJHF=\UGUWEFA6JBl@@Cvb4,"F^9`WPFKOU7?bdT@LTYKmI^e?VMAc>^KMbn^jcAAzILFq\[V8F?>Pv`8@098O@JE9N5R-A@1IY11.9B6Hc:`7*0=:@6B2AW?V<`WDd@dS=L#AFfMJ&F0:C:fd_AA($8?)$)#;?+[32__LRKKJZT`IG8H=9Ci;BIAI;Sei>kUS^xn|uŮȻxoxem}rpzriqhc}ʐ\yepUTVc}h\RFmdpPRVMSZpbU'NY.L*7LFLOeWf_cmXL9/7F:#ID/49!9) 4JI3#,,"(7.$%'&%$$6!%<;J8).*,!G4#%W6CHSQ|UaQ.186a579;=;@?AA=BBABZiAnDb=Bkbwjs`ETBMLM>]FjUHDEFIGCIYGwQ[^YQEaI?@TRiJ<;987eb^c^hn9:<=<;<8<;::;=CA<:87m7njgmgbfgbdh5::97khfebebfggk7mjj7fdiiilj=9776i8::9975fgfknn677jimhmhf676if566ec45353bdaa^]ZTPNT\SPKHC78bWG90G0+)***)))((')(%#"B;60+)079=>?K6P9WCTTJJRX031SHGICEZ.130..001`b]WWXX][[XV_`ZUVRORUTMLNPNUWTVY__W^cZ^^^faTT\QW[^X^ZW__bdcdg5;85874:75=;9:>64566776232042U\W_6]URUTNPWJK@JF;6o^E^K5/9:>ISIGDGSY`bef3T[TOMQSPXRNENJDBEMOMTWTSONQRXZ653886hc^\SC>>EGGGWZVVRRMR`b3947<975ghcc`]Z[[^VQRNKSV\\722214;64X[56]1132cZWNXMHMYVXT12OGIJRM@625<>;71?UYYKKMOOSY]WSQXYYTMW29=6[WW[.56[PNKSUQQVVSTTSPNUVROPXeeb]VVSQPQX^34]XRQQSOLLNE>;/:=??A;=CDGGIILHEA;;6cd57:;>;Bw6  "*2* + # #10 "%%'!"),5NSkl`wsPE9=wr~}yz?BGHE;9b7=?:?>kdm~MLJOQȸ΂y{v{vvx}|w}:3.)'RjGHILMNNMJE02) *>5')&#%#!") "13#,!* 0)"54* *$#8*&#"64/(58'-)#"-(3"$.!$ %:91<3@@,+6 !.0''0-&=61();/6487>%ZUMF8( %"896%)';;/QnYQid<;HDLZ`TYjZWtY_Q]mĻn|Y<2.6,4+,)*"?7@-#@,=>0.$"" !!)95==5F?)6%@bU)8 .-FA#2Dwcz8NS3o:UJYCHGynaBdJn[IRI7*# 0'*/)2-;&H/4M8nj|qfy>r[<;<-173GXe4<6--.)#8()*;3V63008,AIZoqMCCL$#!# *+-7 !,"%5o}::)31YW_9b4<2CTlD;1&     +    +$&)02G9@;!$,+R-,+../251446537566GM-J-D*-G?:9:qpe[^hhebWTV[\]\a:nb^i:=<=<::9gfh659;;767j5gf46899;976:886jkjijkfdikim879=;99;=:8@;9:=@CGCABC@EGAB@><;9:99opp:;>>>@?@?A?<=@BBDDFDABBEE@FAEFDFEA@?BBBDEJMHDEGCA@CEAB@C@A?<<:=?@?@BGKKINOKFEHFFJHIIHHIHGEGEFFGDHIGEBDCGFBA@B@>?BBA?CDCC??CBAABAEB@?=>BB@<=ABCDBC@@AAA??B>B>=;77:9::;88cr?>?>9;BEFHEC:9@@B@;4?CB?>:8:7dg9977?C<:9<<:=;:;;==FB9\qeick>>@AS>hdrc]a_ZYedil;9:>?=;;53;@@?==<;;<90997;6035242233165311.04101-01/./1+4FVOMPY^[[U[_c3^\_^-/1-NKJS+KH53G;7@C$^Qv^LX^:<303210/3/0.-32+/54"$>PEB@C>;994?E@B;;HJ,14=?0-#5!.@=26DBA>'/'/#;F@*/'HKB>#%'j&,4)$.52;(!" )5>0)6742*,75[+ 8&$!)J--1("  "#!!""!"nrHudeR0*9xSpzEr=8(,$0\E4:\uys]Xi=RiTqnsOLWGVbzXRORBED@4:A1523R"7?<7.-:0467/UG;"44/$:@@D"% ;0,')%*)*.-21*+')((%"!"!!V%MKF>5H) " 1)267HH39HB):8DB=KYZ8/("%#%%,9@>.+:)6;91))/#.,2## 88<6:6--7709?N(Pa2/SLKTT09D[krjeixwxƷ}sЕĽm攀LFI8<89E@=9/-.,.(-2535RZ]O>;?ariSQY^ZXXQ^NHGFFEaRiFNZ1?pNxXLTwrPbGeNKUBENQRz{̸yhqmRcQ4021QY:bh?CCPKTktjnsyUJR]IGPXe`Y]bWTVcBD|?@xAJDDCCBC@CFIKJDGRIo|NN~FIiuyoppwtrtrur{~wn_o<:431hwOLHHPPKHBOTSZQYPO_deBN:i]TVMKTa[fdnsywqnrnljugBVj`_ZbcgnfiZep_V=ae_BCBELRTXVVUXVUPHKORUUPTRPRNKY\\XTKPSUTRPRVXTTUN<@cA0TEHQd7?5P6NYUK05HehDGED=LH=BGonkf;AuFn6R8CVR/J&OEj@CPBS=?H1+9dCNGJ72O]^RYD323D?X7Z-17LdfK__]OE]YEKMKD<<.4 T]R9Rde'fPF*@hAA9J>YW0MT[V->ep?GOE:((=LY0B*,,)O?jVcQRO(D2=CGc[AlFnM:)?I6?B5-5.8]b{D:IJXAMQ@>=1,(!:5QIG:@XZ6.BK<&&3X8G;2;VRnd-Q>FlQAW?8V>HQa[[RNBmv\VbK4KUvVUenMHYJZdVOKq?RB?=A?umQUrtċڣ̎ʚܲqt`KVMzpSVXNSoorxQYaQms]x\]iG}qtopB/^OF8ZOOjG?7rhRiF}QULnzyhBegm`[sx~{EI;BAaNKVLb]Ymomؿq|{޹ύx㸟lybid]^nuyq^sqVevS>IQXaWQZRJ[jQun3QU2J'RIHNxilTCPhdC;?5(::8:;;BCDGA=<:?=:;;:9hdd`e_dqp;=>87;99==:898jikgfafjhcik7:ogiiea`bdahknniek5ifa9>88nx>rgci7789kffg5557kg56l67iode64533664df66553aca_[YTMLYcYPJGC=F9M2W:)(()++**'&''&''#"??<4+'+4::<89R?HEGJFPMHKT..^K>CFEDJYO-330-/0Z^[\[\ZZYZYVQOQSSRRSLJNUSUTZ^b`][a\W[^g6]YWUTT[_VZZ]``]af576756e5561[69b2853464564153`2`_1\a5YVRSPOVRIO>EICA5iXE7H;?>EHF:FLW^P^a;dJJWRPMMKPVRKKIG>JKMNROP[Z\Z\128856:6ja][XMECDILM^aYRRYY7JFEA?=;@5@A@?*$%(),/')08+8<8.--($)9+* ',/+#! !"" !!$'##(.gr8+'   &//.JMRF:8?jxǸTPUUOHD?x@HBADA>A@BEEFHDFQHyhzOMzEI|~}|xzx{t|}|uiy95-)&Uj|NNKMONKG?OTLCZ01*+644$(1.--(*181::AEIJDAC?>=C8 1<5549;#$&+-!9!"+$#%/!  (./'%)( *.%243*#/'"'*'" ! #,((350&!4#"..03-6:$'!$.&$:'3'&'"4.!4!3& $#16B%)+0"''# +&'#%#&21% $4$$ *:561, 7=*'1!&'3)1A\C2)7id39<2YR0*<)!67*&+.?W`]I{@tnkVYOPVTYiFzOn]Ɲ}cJ3=79N,*::6;29"!%(.43B=9#"(.. ."%0258545C;4"@6- ,'&M+'#MK@S8a;D>Id_Vj*FIOKUgPeXcUN'% -),3'%$&@#?97-fbeUR<+7=gUaD4_NMech*-1:-0'+I*!)H3")4??TqhJRVORIM$('J,//'""!&1!>Fib<0$+57f6kQCE,'hT:6# "         +  !/,D:33e\VWKO82#=$:A?=?@A=>?E[[JA>?ACDFB=>>>FDBDDEBDA@@ABDEGDCFJEEC*&@>9);2A%"%-$1;=?<523/30387 7884424650366244321330447653664/9?!;41341234346:3413022/.-*%$,2,&#"!"(4$""""(&!"  )"!"& (=+++**())*+*)++'%%'&'%%#!$)&('*+.-+*0-,,,1/,+)((,.)-,,--,..G.*--+**+)(''%$''#(!# 5+$''.+&$#!$+/$,.2$#+'$(,)%&%$#%''*'&)&&'(7221/("!"$#$,-*%&*+*453120-,---+,+ '-,+*+*)/4,((-,+$$$##%+%#)),"$&'"1-'%'.)#'%&%%*+))+-+' )&(%#"%*'$+&))*(*+*),'#')* (+++0,,()&(-+00'(()*#)%""$"&&'()%"$ $+14301,,-3.**)0+,*'+())&&%(3+)(()***($&(&$##!""$""05":#  0&0""2$-%$#."-12*+.(()&/013541,+ *0331́ + +~~}~~}~~~~~}~|} +~}}~}}|{|{|{|{||{{|}~}~}|}~~~}}}~}|}}|}}}~|}|{|}|{|{ |||}}}|{~}~}~}~}}~~}||}|||~}}|}|{{|}}~~}~~}~}}~~~ ~~}~~~}}||{{|}}}~~~}}~}|||}}||~}~~~ ~}}~~||{|}||{|{{zz{|{|{|{|{||{| }}}|{{{}|{|{|{|{|{{||{|||{|{|{|{z{{|||}|{ +z{{||{{||{|{zz{zz{{z{zzz{{zyzyyz{|{{{|{z{zz{zz{z{|{||{||{|{|{|{|{|}|}|}|}~ ~~~ +~~~~~~~~}~~~~}}}~~ ~~~}}~}}~~~~~}~}~~~}~}|}~}|}|} ~}||}}||}}|}|||}}||{ +|||}}||}}|{z{||{{{|}|~}|{|{{{||{|{|||}}}|{z~~|||}|}{{{z{zzz{~} ~~}}~}}}|}}}|}|{|||{|||}|}||{{{}|}~~}~~~}~~}~~~}~~}~~р~}}~ ̿񏓍ӿ􈙘􋙣턈̿ƈ݃󀅃ޭȘɋ誸釅ͷҊϸÑے󞰨鵋߬؅銇٬١媓˵DŽÛ搇ۏٍͽÉѩа뉀նեΐᑆձĦܸϖݿîԹɫЂ╉߬˼翤ȵۘڮܴ҉āíْ⛸۸Մδ׺𥓏ہƀˣ؉箣킉܀֋̲̳½źŽĿxmqnecaac]ccghdcd`bhe\emqoӶϸļȺ膗宅Ű~uu{п锒{{{x瑵̀Ľހꈦ􋧴ü»ؿʮε悋öĄԓ߾씁МФ˯񉎾邶̯֞Σ趏ŋႂӁʄף򎯖愧̊Ū۹镈ސѵƸɘħ㽱ܶӥʀԡIJ뤁ؔźܥґ㉜׌Ͻ´䟘|ʼnĤؑԮԸҠת͛ݏÌ֦ప֢ԸջçҹŇȤ廀ϸًٹmɋ֮¸ĥÒ¹ܐɮέՅ蔀Ւևַ֖ݹ蚉ѐֆ瞙䔑ꙩߟȱ⃘ܔ٨耨ҭÛ񁅈れ÷ޱϱǸżǶ爉Ѐ¸°ŷȴ瀂ͷи双Ǿ߀醊ɻɼŸü儒ƀ۶ʭނű소^gi\VY`_[_`]d<<88jif^_fmXX\]S]m78ggcZbj;>;9a`k56kfj67;A?;;=9?:568768:8797887876l787jio86k5799m:<>=>;;:;=>=<<;<:<><::;=>=;;>>>@B@BCED><;<;;<;;;:988;<;::<<<>@@BEFCDBCC@?@AA?@AFFCECBCCDEEDCABCDIONIB=EB?@C@>=<<<:=>ABACEGHIKIHHFJIKJHJJJIFEFGFFJHBBHHFDHMLJCA?AA??>=<;<>@BA>=@ACCE@???@ABB??@?>AA?><=??@@ABCCDGHGDB@A@@BA=<>@@DCDFD>>B>BBDC?@?>=><<9<=>@A@>@A@<<<9e7??;h`g7;?=::BAkmii98=A?97598;?>;?=B?>?>i;=5nmfk;=?==?>p``_bZThkgifkkk\\Ugp::D@A::;?>CA?==>><><<7387654731438651442.+,12/1=23*YB)[VIM33OKMRTXZag4Y_3321011+MSMNJF9.E0A1%.6cXn8b2.30/1/1R211/0,JK9! 9/H::;<<3-2)4;?B;JE=6;5:;,?;*>*/-8C'D0%(@/&?5?&3)2-;Q<:"0+ #5" 5()'#)'$-131&.D>M.&!% ! 1CD,."&*&"# ("$# %'#ZcPUh]b0amvyZxV-=)26+BXd:;`K_J[WJBTSHO3L<[2BQqPcD8:RI?6Ycw|f{K.F)HD20^-))')%#!>@7*F&#"@)% "%)(<056,-$%&'$'),&#><;72/-&"=1OS__e_OLctƻc_HCJP[SQOKURQTPJJQ|B\68>;=6:1SB57SA0K@LQTQOLBAACASce:.WFL=v9mq\FBTaaiODMl5-@T.I_j`?Cb79),CQ>4[=F5TKVVGY2aNR\B61>7NL76;JP'3:O`:9?BcZma=S.3a[ELEM?SPeBcfOM0>4O3@G,/47HVQ?K:)AS:C.,)3SVdk:(ET0B?6/.)/<>=gD@BHCWVPKYA919aPY?KeMNH,[TPP=TOAWHU8)*?7CV:>GZQV`RMEs_?;;totacYeO[c_Wyp[bl`gg]UwJBm:b\]UHQRaaVtyqomtwtkurxa[prwpsbZo`nT`f\Cj2ksgwLcOJIrbcv@T4,)BLPUvjadTSBwb{c>EFJGEJ`9eB9e>f?GeI_lbb_WHzy|GSeu}zyp_Gd@]H@iq?DDCCBBHJC:;>?7XSNHHKPXUGABBKIHEFHIFFJFIGIDGFGIJIJLJLPRPLKNMPTZlNAaRh\G=J^[[n=><:9:=<:licbcb`j9<<;k:;;9===C<;:=>J:;WLD=?BGEHMPRUSVOGCEBCT_^/]CXE>I10[X[Y\ZZYXY\]XQPPQROJJJNMOXUXX^44a^^\`[\[\g]YZU\VX^YY\[ed]`e786444c6634e255ca63652477443a]_/53d^WZQOIWXNLK?AFGA88:oZMBEE96JCAKSTf285YQGG]TORSKOQKNIHF=CIIPYOLVYYSYO]99495b[YYYZWNHBTX\`fV`4439:8;?=74eba[Y\[WY[ZWZVYYTTVV]RW`_\Z6/a_gf89eccZTMWZ^RJMMUU^]YK_SIFH?5PBU8617>MJQUPNPQPOF`[XZUY46bZU]2.72[VQX[XVWVUXX_Z^_[\WVRPQU[JUVSSV^`[XSTUVYYTSSSQHQPJGMRPHJT[VYQQOMOQRZeia\^`WTPVZ\`151_]^[TRQQQNONKQPNTSUWTSPLMQONMJJJLKJKID?4`8>GILAAA@?C968A^Oc;;3;79I6:79BP2*C?DO96:==5dLYW59_]XOHF\c68:<<=<73:;3+#%#"+5:87'+,70 $'5.'))()%'%"$"%%$"# #!$&&%/Oyr( + + +  CO^\a\IJf}d]D>BGNHC;599:;848Dn:P+16?2?<[iGPSn>NCBTFBFUZQig⏉~״nTqg23]fZWtY[g[DEC@eAIINOKH\`_fcmzu@EGCD@vyz=?EJHHIHFEKNMqDLIJL]턛j|{vvtttyvs~ʮ>83.**YiIHIMIIGHGQSJ`3*+*'' 4#%&$$%,,05;AEIGGGHD@@=BE79:54/.9;<>:1+8$)&$! !+7#%)).//0-0*&%),-++,+(#!$(-/44112322002220$&( #'!$(%!'# &'%##)+,*++&$##$+03#996-$,-7(."&082!4"&%&&--%)+&',/-! %&%/!#40?6#,28#&#')&4!/0%! " "*'!+((/5#,#!!9"""!..**-4*+$4()#(&&) && -"&, +',3,&*3-9#9'*#095/$68st8`-5bi:a[ZVT2@%'#<3#!1A93&/Nb\Viafpp~V\ZYPRYa}NQjoFRDnvʽi[LTP]S:/UTG<7.?!*%EQ=DAI8T...$8''#"6#&# (*7#'=6,26)N:'&&LNZMnON9EACNI:RMBU[i;./!#897=EC44/5JI935+/.12*C-WXPHF.26-+%6#'6-.=/*'/-MBNEaHT`WBGI&(!).@M?B%, !"32<8gO<-"6=CfMGE?5. M@L;"H   + +     .2!$ /EJM6#-#&SP+.-.c0200012141./333543;:>:97G+J,!7$;$(:(59231,%FEEH(17?CDA=3%9(=3/NW0332552350*,.-(IDA=?@BEC9589A??:;?A?A>?<@?@ABADFDCEHIGGIFHKMX9)5.71%%.*)1762110.57 998;=896442356423301277846641/><5123455 43420/+-(%$)(+%!!12'$ !!/ "(($! $"  $**)& *(+*+'(()*-+*&%%%&$!"!$$$(&**-/-,-2/.,+4/-,(-**-+,-+/.*-..0.,-,+0-(+%$!(*$%%""3.+',/,& #('2-)$#0*&)*%((%'%$#!%%'.'%(&&!%'1+-,-...'$ '()).&*321.--.,,--,-),,)R+$',-)+1.2320/*'!().("$"(&*)'!/+%"%(!.&&()'%&'&% .*)+(*,*&)*)$(*(&O('+),-+*()(('*,#)*)()-.-*(()),-))((("'&#"%(&"$(+)+&''&%%%,483011+)%(+-.++.,'(&'&%))&*()'&%'&&%"##$"###!!1""$ !1&4%!&,,*(-*(),+&"),/21101-2 52-.02303 + ~~}}~~}~~~~~}~}|}~~~~|{|{|||{|}~~||}}~}}~}~}}}|}|{|~|{|||}|} |||~}~~~}}|||}|||}}}||}|{|{{||}~~}~~~~~~}|}}~}|||{|{}|~}}|}~~}~~~}~}|}~}~~~ ~}~~~}||{|{|{|{|{||{|{|{| }}}|{z|}|||{|{|{|||{|{|{|{||{|{|}|}|{|{{z{zz{{zzz{z{|{zz{{z{|{z{|{|{|{{|{|{|}|}|}|}~~~~~~~ ~~~~~~ ~~}}~~~}}~}~~~~}~}~}}|}|}|}~}|}|}}|{||}|{}|{z{|||{|}|}|{|{|}|{|||{|||}|||{|{{{z}||}}}|{{{z{{{}~~}~}|}}}||{|{}~}|||}|{{|}|~~~}~}~~~~}}~}~~}|}~}р~}}} wˤ灇Ԃώ۾စ슌ꀌԪ儂ļʂɑςҎ썍ҫɷԠǽ㉩ўĂ၎򋠰ہǻ򅎑ƍüʯ팘ۀגϛԓȹڡʇ٫ׅ宇摪ٌ丼֪ȒΓؽIJк릜ړ➇ҥ𙗂ӝͼ琐ɼӺ菽ʦǡ旇̀먟ء쏛ҿ٩Ȳ㾜憳ˤ˵ɕΙȯ՟ƺ聼ʚ퀁Ӻ焊ހв‚μ–zttpa`_Ycd_bkhccgqu床ʭȾえ툆½ƣڠ}ѻ֮苈׮Һ뀑ɲ򒗓􁆃񃎐Ĺ˺ꁊ…զƾټ٧禤ױĺϕäȈᢽ鍔۶Ɛ̓ߌƙՙ🩇ԁ޴ʙʁɴ쬄弳ΡҟȌגз؍ёˑ٘𓀐Ȩ̮̄вӂ̾ޙרڜ͉áᲨ̫}鮚ĨϽ뻿ðᝡƂ׻ܙջîӹNj䮶ͩȸӭDz솳ײɖڷˍ鶀ð֍ŭߪ§ӮĻ򁀁񽥧р؜褃ǧٷϜĞƠϓղ毟ʍ艞˩ȡƤԼúɃڨ񁀅􇇁Ƣʼɴ¿ĺμ̩рȿ遍ۇߨИԃ»χ턀Թʮʀꉅ򇁊ƻļ¾¿ƀºųޱɵ吉򂉈Val{~tg_d[`hf`ef57keifqjl]UW\=eg;A@D:_a8;6jjed_`ehmjdl989::<:<;<==>=<:;>AB?89:::=<:;:99;>A><8<===>??=@EHJGGEDEGDFIFEFEBA@FHFD>A@ACDBAA>=?A>=ABAAABABCBBAACBBCB?@ACC?=@?=<=@BDEBCGGACB@@BBD@>>><=?@AEE?;>:;98cf9lggU=A6689A?<96=<=>@BBABB;889ddj399XR=B9o;8:::<><;459j9=;;:?HFEEp9=?b^q8;=>?<;;>}hi@<<7=@AEDFC?==;9:;;:<;937877652-286341310...1221*9JB(K6UR[6[KCDIX7555XLd733564,LOBOB?B>4/G>'%6`'H(1CA1.O202+0.0-/F!##D04%(.00,.+9;DA=MIHKOB=>I%"(&-=D%8(@C%*+BK*259=.G,0,RDCf ,&$,71((%&"%*,#,+" .L66>!!,/%'%!&5!' (,C(((#!#(%*+%%%"# % (/ \[~nRKgvlzs~@;%#6C+C&8[?CE\IOmmYBmeHF11\4W=FGeSM;CEfau\\AVfVXaGEnDmZG:+[ob'=eGR*2*_./X6K:.P7E:3Zf~dZ`ov]BKIFdYW{_crsdxtidyLEvfkI_rlp~rwlcx0'A$;19/$.,5>5<)Bw &&!%$)("(@4,2#),-78D<)&10 313/ 5 72-+*$"$% " ##)*'$""$-HFBRJ)F1$$ " $2="*)4*2A%#6=A0;8?BF;82/+*)76/.=A-$!&%932..;/C0&57-9%)((-230/00-Y/b;=A>AB<69@>ADDHJUbmrtvouİiͮשlɞhC0*,.37755,()*/;-+-{xvijaj»URNHGADBGDIGOHEIKSNEOqt<03L-0/9gpz^h@eL[QSWyr{ywwɴgXentzDQ~zhNb~w_yrǭs^RF@b9MXVQUHJey{}xgq~>ACGAmqjioGIFFINKIKINPJJDJONRXltynjooukhmpvurmmtt|upqxr|utl}KK?<:75ekyIHFGHHNMJIHJOTYXcMV??LC<;BAEEDE=:JNVRHP\cfnv~wwrpqog]\Xaojd^clplrc[\`dCABE=>kBDEEHMMNMPK;AQTTVUVOLOOLLPRJV\\Y[ZYUUUWTRZYXSH?7FH=F4?38B0,76NC8N;`HFH77GD=Q_=_ioFI58Lo; 1O46M7D=5GQTQ@Z;3@H.=\IBYAIJCycWTS5TAELNDA;DkE>4)896'21/&8X9]A?-0.@/\3(5H_XCAm0014<77HSZ0JK!#U:1,4".# * <+3%L,%4KWf_a,SzW.!9*%.=e@(*067QD\;9<=<:9:;79:<==>?BRbGE^nHC@JKKXCBK7M8kkijmlign<@;jl:7:;9=<><9;=;:pq:oroqkmli9:88st9njba^^aelk=9:71.(+279?>:=]RI>:;FBICFKTJ?JMIWL:@RihUMI40E6/IXQQQCMTQSVWSVWSQTTQUMLEHLLZ061Y22a[][la\\eb\[^^]W[^\`bc^\Z_``6F7`663555ie3fa`4784458=7430]056faZ]]SMIT_RKLHHGG:=F5U_(XKA<:N:GWJP82aTVQIK^^SVWPPQJNJGGDFJLGPPVNNVSOI48239`ZSVVXZWQLBOV]`f`a42a557:94fc_]ZUXTUSXUUYWWYZVPOS_\fYW]VS`daa^acb53bYZXOLTMVL]TX\ZWWJ=I>:5@jRNN]N588PNQLMOWQOSQW[UOY63_YZ3/23\VZ]`_^34YXYc_``\`\^XTTWXYXXRQQUUYYZ^UVXXTRNSRKGCIJOZXOIMPPOUSQOPQRX]_Xb\dWTPNRT_]\`02b\YTVTRTQMNOLJORTURSPNLTNPNMMIKMJFMEOKe:CDFBABE9:E<8==>8=A=;9b77E9;?52H9(D=ALj37<@=;cW^e?^VRIEKNp4<=>>=<259?=ABCGFJKKHDD;845g6cZ=6?B<99;;745d`a6989m7mgeef__aZYZV2;CC=414.162/133165:6;3,,.20.04531..1384/3!!8$!!  !$#  !-"##"#! !# !"! !!!#""! ! >;;!#"#":#! "$"&'"#$#"!""!!#&!&%#!"#"#$%#  !!!"!!"!:!"!!! !Y"    !"!!"!  !!"$22846) /24)&4/! !"6.,690,+)%)315..>32& &"$% , / + +    +    '   + + " +  +   +  + +  + / + + +   9}]3#1"!   +# +   .  #%!    +# #%'!!8 $ )!) = +(2!!0 + +  !$A, +EP,%FX2  +$$%&/3f   + /' $,!       "O +   +  ))05=1)''"! (!, "!%&"35$(.-/,("")'*++*%$"  +/2E7E4*2$BH7RgYnb;&05.J-'*40'$,&#!#+3.-''E. %+4&&E#;%#!'%"(.334:JMPJ:%.[{f3 + !u~yt{ktɻUNJA?7:7:6417/-04<;7Fje0&)?%''5glrX`>eF_XaqԻƒ􃎎׳aKUhxƘAO||oYrqշx}[PCE^3BLKHNAI_pqws_l{@BBF>imfdjEFCBDLJHJGNPHH@xHKQUX}wuvv|vprtxuqno}Ūwqpqjwvpkeu|HN}<86/+TaoHFFILMMLFEFHNST@A./"#*$!!##(+1/*.58;?DJGGB@BA:3304:9:8:??:-.:`a_MLBG&&)#66`:OB/,/34:>X)! =@fCFDE92I#sa/@ +   *  1AOE='C& + + +*H`( '',@2A(-244210///2566557FS:9LX:88?>1*A@EFD?BCG?==::>A?B?>8;?AB@CGDA?B=CA?BCBA?CFFFELGIKJR4A@*'67: "$#  ) !"" 454586327 78O;;9;9;7774::87330/1386 4012/-5 7),/036424332/.-)*&'(*($" 5*!%!""# #$&+"%" &#&.-$ '##%"##%')'()&$'&&)## #")(/+,,82-,00,*-.,),.-0//-,+.-,",0..--*1.*++&#!%+%#$""!!"'0'0..$, '"$/),(&&00)+-((*$&%#$#$()"'(+'#&#!-.*++-.,'$%())-**(3410-*+)*)+*),*)*+)&%%+)0++/*'/1..-/1/0***%"'$*!,&'*)(+&#=+$$/!'%(%&&,(&)'*+(%*,)**()+,))'&',*+++-+-)'(*)**+('**,/)),,+)&*)$ "#&-,&#$%&&))'&%%%)-.,2/2,(%#&(.*(,0,))+*(*(&'(&$()*)')'%%)&(&&$"#$" %!' 1! #"# "-,/T(,,)-0-+'# #$331+0-/873221/11--.򁃀΁ ~~}}~}~~}~~~~ + +~}|}|}|}~}|{|{|{{{|{|{| {|||~~~}~~}~~}}~~}~~}}}|||}|}|{|{|{|||}~|}|}}~}%|}}|}|}}|||}|||}}}|||{{||{{|}~~~~|}~}~~~~~}|||}{~}}~|~~~~~}~~~}}}|}~}~~~~}}}~~~||{||}||{|{|{|{|{|||{|}|{z{}|{|{||{{{|{|{|{|{|{|{|{|{z{z{|}|{|{|{z{{{z{z{zzz{z{{|{|{|{|{z{|{|{|{|{|}|||}|}|}|}~~ +~~~!~~~~}}}~~~~~~}~~~~ ~~}~}~~~~}~~}|}|}|||}|||}~}|}}|}}|{{}|{{{zz|}|{{||}|}|{}|}|{{{|{ |||{||{{z{{|{ +}{||}}|{{z{~}~}| {||}||{{{z{|{|}~| +{{{|}||~~}~}~~~}~}~~~~}~~~}ˀ~}}} 쉄Ÿᅒ׃؂ٌ놀̸􀊊ɯЌ˫ȉ͟󒛿χкʍ튡զ㊭Ίż̀‰ހ릫ȣ򈔘Įͺܒ텒Қܱࠋ϶͇ٔҳēАթõêٻϱ㎿ʮ틷ϩЮμ铏񑓅⺻ԝډԦ襝⡼੒α؆胈ƵՕ޶򁄂ӁޥگȶкԄƹԆܹ떄иŽ¶÷ÿ{rba]ce_cblu̻vj勗Ê񅆅«򎒈zzކֱ⍅Ѽ߀󂓣˸ƺ󈦪žͽ㆗ȵ߀ԙӨۢõӬㅐŒڟѿ썈ɹ񁚊ڙǻȀ˒Г麇бƗˢỿڙ动ʾϨɍ͊콽рûĽͺᴞ{sl΍ɾ˭ԀᑚȻ跠겋ȿDZȭԷ쉥ѹაٷǸ˦ϭԴ䒌쁽ګΖǀӎئ삸蝲ȥ농˜¢፛혵ꯇǹ›؇ίѩмܶɯð厔􂇅숆¿˻׬иǾоľ傉˿ȪЋҁԹǽϷ̹ºį̝ะξȸɽ򁅂őbܠ셊˶󎜜˻]iuy{wtpdZbahkfd<8b\aiff`\WUHhj_Y^8>fci556kjhgj78995597<=67::;8<:89<;:865665ef66556;>978988;<988789:;;>>;;98:<<;=?998::99;=:=A?@@@?=::;<9?><;<@CFFDFB>?=>?AA?A@@=AACBHKIHMKIJHFDC@??@DFHFFCB@A@>wttq;@?ACEHIHJKKMOIHIGGJLOORKILMEHHHGECCEFFHC?><>=<<=CC><>?<<>@@CBA??@@BBCAAAB=@ACA>AB?>==??@BAA??BAL@??=<<=>::=A?>=A>m^hfh@HFA?;>?>l8:;;>?jk>:pk=>7=??:6<<<>??>?=>:;;979;;:fCBmY76EA?>?>:98<98f7877869?<<9<<;;;987874367254211220T*//24+&"%%.F5E2.N\KFQUTe5553^La5622774N@?EDCGDB525-E7>,64'9/M0/@]XX*3T013C $" 9?("E<@&,.47A;CC=CGLKMC3C&&(>*));/<;(13005;=<=:*02MDC6_83+./-*$,+)0.2.*,+2,++'+!+@##"% (##":(*'),-.#$0/'('%$"%# #('( 9la}XPNEGp~WSoO|+@00*E9>Q0;VCHPA=WV8QUO;<6/^<<=PLDYY<:>S'6eoZPTXQSLHQRKVs'%?C<*0-6c3:W?ASJ[H:,3mU@^W`Kl[m4:,,kwpXDjqb`_^>A}^VuFqnqjwsrVK\TL]{hV}GxMmzh]\_4HDQ`VJb6T'% =253.7(\6(),"@@C4:G<8/50-0.4;;<4(%  "+.+./-'(5>TD-P845!#"! *J<99;@0%(2539#+6A;0.)*-(&000)!#$$$A-1 9B&)CF@DD:95/=+*/44/1133845;985/4;:@DCCGQ^tul\mȫȬ܇ȡ7Q)%-,04.13-#-N12,/l}afljdWUr??A;?==>FIPSXUWJMIJEEY}^T)(,7<@CbQkcp|tsɹysZnoZckiVSUHLO[}VRHXR43;?DR]aUHs}v{|{[opl=DGC@AFGE>BC@LKLNQQOX\f]K~bu~wrsuqmdkorqpko|xuxwyuqe[VTNPyMPN};:887vJGGGKKKLHGKMUXiLMOGFF?DHC=\0HGB9KKA@FIS]dglghilphhe\XZXWhihdegQ`PWNSmosyp::vOMPf?hB>5+HF N 4]BYE3LE9r`C;X;H9?h7KLFSugc`dKJS\VQmj}JQx\dSth\jEb~Œwzǣi²xyypS[\TR~LSHtpNQ]d\9:3`^WWKFUvIFVGeI=XYV,:Y^|XGB>6\o_ctu:TwhY\uzXnaKhjZZ_JoCRkaaklxmn`kotgmXV~icwrh_~qhqreuUl`ZOwfc8CLIhju`WW\$?QG334(..5402ON*%##M4R`s<*16g597;9<<;9;:;<;=<=><;;:;=CGAKWMHIFFGINf=G>CX?076_tWMIIIFFGEFHGFDBHIHIHHKVeu@FGNGDBDoYONNQQTXY_`\og<>:8jn8978;?prp89;;8789:77k9sqrsomprj78776l_cbbfc_]cmdk;l^bf`lj99lmrg\RTb5c3d5`7767:nhj<99;9><546k887655446c[YUUPTPMLB934OH6I6+)%$$"#B;7-()+,*%'(+-.-17=;?P\UULJC:?FHHLIGLHCFVUhnj/DTWNJZ1UZZIOMB<71FMUYVYUSPSSOPSYYLJIHLUV115135a^\^bY`cd`[]3b^[\]Y]5d^]\[X_4:543787677kbefaa86485974236/^71Y`c`YQOOSWPMROKOSEDC9;J9>NKD#Z=Y^SR5`TPWKQM__XZZPUPUXMJDCFMVPWXPMQMPEe1c`18]VLTUY\ZQPMIKZf6cf7:;>::7fa_Z_[ZWVQQSTRY^W\YZ]ZTYd488pi]SX[[\`42942bd5\QKKIKKVXTUVTME7AB<;`CFQ;QMDMTKMMNPTNMX^WQW1]^Z/11322YO\_Z^32Y[5131Z[X^`][YZ][ZWTSSRSTVSVUVUSUPPSSRSKACPSTPJLLIHLMONNLKOQSVWVX\]XUW[1311^a2^ZVTTVURPQPNLMOONPNNMKRMMLKLJKMLIJQP6CA@ABtB@:C:>DD7=>:995;>D:F@g9Af`4f)D6B>k35:==?7`PQU^YTRJAJOg:<;=@?73d:@AACCGIJKIAEB=;5h6hagf6:75hfid9<::<:k7lgcbe_]C/7>BD?<;3.225632.-043631++$53-,-11554413-20 !!   + !$"!" / !!! #%##&%"###!! ""#!"! !!@>>: !#%&%&'###"!#%&&(#"#$!"! !""$""! !! ""! !    !  ! !34+224 $" 455639, !7* / #!5.*(8/42653,!3.,%-64/+  % !!+g(*   +      + 7 &    + +    +  +   %.  + +  +  +  +#kK%8*(  /$*-& + +    + +;= %  *    + $ +0' """' "#  7)-)?4!!&/!%*  #*#*5 &2G$;, +# 5 %(.!#,$&'1U7+%#JsZM]>FVD&?YB5>n\gXj;N@+=:9=@-I)'&2 &B8)731+311h.'%0A3$8$#!60&$2.*%:J:2'" &/3PQ\h;VF`dWJ+D'$866$0`pw2BCR<77:q`(4, 6.^T_GP-L>b77.#       +)#  +  '7EO* ,,S*.,0.110/1144344576664437;6>G>;>=9129E$*&+9*'"7#/+#3<>BBOSD:728I,)B3%"$*,UE@???=>@??>;645>@??>(<9:;7644fegi668;=;;:8887=<=<8999:;;<::>;99;;:77;=<:6689:=>>BADDB?<;;9=E@=ACCBA??>>=::=;==?AA@?@>><;<>?@A@@<=><>ADOCHLIFDEEKMOHFBDEDBCCCFEEBCDFFA=<=<>>?ABFFCDFIOPMMKKLNOTXXYPMHFGEHGGEDED@ABA@>><=<<=AC?>A@>>AC@?>=@BDCBBCCA@>???=>==>B@@ABEEC@>?>>?>A<>>AAA?:;sqfi;e[mg::n>B?BAC><;;=>??A?7B>jW<=<=<:?>=>?=B=<=:e;;;7:;:87V9:ADBE<;=<9<><68;6;@9:;9;@;7@A@;:==;;<<9;77piiqqs<;ms=Gt`b_Yi_Xc5:>?>=?=:;?@;78;876873/50^6XX10.R./5G*)*%(2>MGY`2HWUVZPS4753bU]669208;=7/L)$8YM<8,>4E246&,(?5WQU..1Q1/4"#7*:98B)*+'4<=9=;@>=1-FD)5;A>#",-"!$$*)$')*  &(#2*MSW5/1?$(/3+)0/.("!26)1(''#)3.*- $&"%% (-rc?eM^NizjmD~zaUl%.C(-<,.I5CNGY;?S565<4_QLH>2HPUIR7CD9AC55P>b=TxVPA[mgoEu3F2;/LR+B*_:\'+WD7DE>7,cgSVA8oS5=,J-~^gq~lggfgdjY~rоñizfykmzWgmj\XbYftlu|[tzvWKPW,+'&/ +"+-C&"I7(+$((E$#*''(4+79Ze#$0(3$($).9TO41,HH((/27,*!501.8698;4)!"0+-.*,+2LI.-$+=&  #  $$9@@;K+=1!*,88'0+,')%%*(%$((!#$<9=#'*##(-163/257;70-17:79IW|~Π\]\yÝzvÙꂅテw{|RHN(-*.('FFBDA;753:EJWTVa]OHv_V7>:77B@BGDHY[VTFILKQH=N^Mc4,3/4:Y_}Lf{z|Ծepjdbak[gpQIHILNMNB|vxwwy`@/03630@@BEVe]Zqvx@?ka\uhh@B{>?IOJIJC@HGXVMNLIHHN^vbq|ubko|ql^blpnj_ow{|}}~upppeTzLLNN?:8=9tGHFHFFJLKOJHEGOWXzRTMG@EEEIG@>GCCJKFJKGEGIJNKONMMTLORJZABWYY\YUZ]\_`aMNRDDBEKAM25 "#(6D[OrZO-AC7953$!'>3JB7alwgPB8=<5SSBThk[PEf))_Tc8dD?G^i5(<:C//8WTVbijE8IDD"#,2 767IQ12WQ4I7kf8)IAOi?@?_oFNMnIJ3BT@$/L4/3:CQW>27PV?G=T:?5=HQkK5]<<9??@=s[PKD->4t~i[p@M}XXM_aOc³˞{|xjfbxz[VQUY`LQSnA>``PMMHCTW/,G3lQQJiQRd`USX~Zd3d[\XSqvgNV`YYZKTM\Xvr|`u]e{p`^ebc\Lmsrqo_ScVGYbvY>wW}}WcUMX[g<{XTXf^ogxQYoYDXZ@6(GWXWr\VC~F6OT@%*/@<K16=($*=/"5"?+6$M5HC<3M6C3>%0%6;Ja[_23``8<;98<@>::;<<>=;=;=?=9778@BC@A=>FQ:`\OP]QI[C429LNcnil;;=vq]5PF@<>??r=CB@<=;;79@>>>9<<::8lnqpo=9im9rjj8njrqkkkjkij6knl`[ggedcchlhdki99gpsrsrqol_QTSUZ\X73f\:=7jlklA@;89;@64448:889986337765ge_YVRQPMFBA6_^S=S9,+#*9;:;::8=CF>@BACDB@;478`^b[UOQOOIKQQLSTMC8BW9>RR@@=_OC=?ONJRVNJIPMMU[\WU^]]`Y13910^SR]`^_XX[32432_W]201__`^[_YVX\]V]TTURSNLKQVOSRKB?KQWRLKHELQOLNQMJHISTWY\_[YW]210232__\WUUTTWUQRQROMNLJQNLPORMLNJJLLLNKKSUGLJHHA=>@@=EGM@:?9;2348IDGB55;_^YA)H3>7h93783B9bd@A@DEFDHIFC@KC?:4h6g7g419@@=748=>6495g8>;;@8jj7jc^[aS534:?FB>96>792552++55410,(*/3(+5140*/0,,3133 +" "!!!  +  2 ! !""%'$#""!$&("" !"""! """ "$'$"  b"#!!""&'%%##%&'*,-.'$"!"!$$#! !" !"!  #$!!!  ! "%#   "!!!"!   !, 8:510*40:!!4(T* 2/067904%6.0-)3-'-%  !!(*%! !)#)    +                +  +   (5,    +  +     +    dS6'  +'# *+%?L!$      6 +(  +  AriJ97*!%!&"!& +( + ?() &#1, !1-,)&#'28+;  +  ) ' / #%IR%70)%.1 + !     +  "!&  !#)'$$*+/-$ $'(%%',%6.-7* (*"&&""$P&!/$'>DE9.2=LHK1L- 3,!EPJ%+"# &+!2446,36)=?A%-Y5?^U[[QSSDlUI8" +    (9;>;1)()4?FVTU]SB=eQE,/-,*443716AA<6-.17=93DYMW.%+*05WaUwêuùneRJTaXgtRGEHIMLJ>s~v|{_;),-0,(0/28J\WPiks?;eWSn`d=>u?>GPHGI@=DEVTMLLJGGKasuzwrdkstmf_u~{||tnkk^OrMNPN<4230hyDEDFGHLNKKED@CNSJSO0.-' $$ + $#)!)($b++)+:=&/ZCL$89)$$"02'8')*E.(0B'>(!MQ,%$6f8La65@[27mG<;pF-2!7C7.&6+@"!""!".'&+:);YI4 .'#ceX6FJ`D<%($'09A$A79uFPDQDPh8>GwC31' +676RGE4Uhb$H$  +     "%"#*  +$+4CGN))MG+0../265113467656567753338<<9746:.)$!"#%#&<40141\G:9DM3;EAA$(&=0J@@FIEFR]h337;3#"!! "!&"" 8! %$! 6697769:5487<<88877532560.543b5663764:=;=;;;:2)+++,,)1-5764!  21.+*'&('#!!53.$4!&*'('(&*.2+,++-+$'*-0#*#0'$$$-%7;#"',+'&',.('" '"#%"'(&#""$'# !"##2'0).)*.),1,-,.+0-2.-,*+-2./1---(*0..*&&(')$%'$#&,/!!!357+$$%#(&-/)(&#''*+/.+'+('&&##$+1<7-('&,%% ,+-)*)'(*11.)))+(+/1&50*(1.*&'*''&+0,.(-/0/.--631120('(+,.*'%(''!#&&"((%-()!,#'%#'*%"#'%%),,((-+)+(*$$*,)*&&(+'+*++)*.+'(-.)-'')(($$$'+,&(($#&)'$%"!%%$!##"!%$')()'*)(-,,('()''&(&%'%"'$$&%'$$%""#$$%""&( #""!! %#!! /0,"0%10+*%&'(*%("'%*/,!2312  6651.,1 }~}~~}~~~}|} |}~~||}||}}}|{|{|{|{{||{|}~~~} +|}~~~~}|{|}|}||}|||}}|||{|{|{{|{|}}|{{{|{ ||}}~}}}~~~~~~~}|||~}}~|}~}||~}}~ }~}}}~| }}~~}~~~}~}~|{ +|||{{{|||{|{|{|{|{|{|{{||{|{|}||}}{|{|{{|{|{| {||{{{|||{|{zzz{{z{|{|{|}|{|{|{z{z{zz{|{|{|{|{||{||{|{|{|{|{|}}|}}|||}|}|}~~~~~~~~~~~~~~~~~~~~}}~~~ +~~~~}}}~~~~~}~~~~}~}|}}|}}|}||}}|||}~~} +~~}~~~}}}|}|{| }|||}}|{zzz|}|{|{| +~~~}}}|||}|{|||}~}|}|{|{|{{{|{{{z{zz{{{~|}}|{zz{||~~}|}| +{||}|||{zz{|}}}~~}}}| {{{|}}|||}}||}~~~~~}~~~}~~~ ~}~~}}}~~Ā~} 񀆀҈󈏏񊔙􋅖ʾ逌ŜǕ۳Ś«£乐ǿ׀ׅ»斮ʶířІ˛󃄐θϼ셑ۮŝ͈㧞њֱŘ𠦶Ȝݶ█Ɂ랚مݺ⨕ߧ򲭥Һި弇፾۲ꡍȎ̖ǥɯүДǠ鳢؄ͩÀĤ̿ј➁ƲހźȵĿꊂ⃭ǨŮƺԸڂڿýé΀󂁁¾π̹ꉋȻɴú􄁁Ç㢟ՔƩނ؛֏ꆍ̬ρϔΖ胑凎ė˖৬끐ӎ醜ɫ˚頭Ԭկٕ˒؎뀥̬έҧݥŲӀΪ臥ŀ˄ygv؟։𐌁΀͖곚ÿ箈ËՈãɛĢª󍤷ソӅځǎѣοě޾ɲŁƌ鱺иȽ}Ɲ¹ՆљÞѵ峝ݞȂ򲨌њ蚛ݶˠ㷹ðƳ遇Ƹ潹ϱ񮨀÷腋ɻɯȱŤʷƷ˘ũϿ˺޿ٻ򅊓ŷ݂žɼȻŀҝ煗ȼжȬϔîø»Ʒɸɀػ덪ʕ᭪Ϳʭ킁d]:dW^[^bge^gytgide675]V_b\ZTWUY`Y^d]Zde6:?:88>>@>758:<:8;<==:39HC@?=::64fj5g578::;<=>==<<;;<;<=<:`99:;;:<>:89;<=<><;79=?@@=?AAA@A?>??=<<<=><>>>==;:@>>>=?>>=??><<@DB@@EBA=>?FHEB@CEGJLHC?BC@?BED^FGGDEGD?>?@A?>?BCCDGFEINRNMKKHJLT[ZRNLHHHDFFFEEABADAAA@BD@>=<>?IB<>>=?FGDB@ABEDB@>>?=>>@@ABAADA>BB?BFEFCCB@@?C@@A?AB@A@<<=<9iknh>[S^;CDBB==;<=AA@@A<;;di<<::;;@><>@@>;>@?=?<9==AB7>B?:ic9<=@>CC;hc`7j^:?>::=B??<:?DC?E=?NL@]onrnchlldc959>??BBCA@?=:87=:957851\Y801bX3--[.Z00$/*(''FO:KV[0PSRGER/742_YZbb773464::20M/$FA.3,3O42$2&/QO69MR1-131S##0+'.+#$C#0-;2HF890/H1<0&"350&186<=?:=5HIQC8KL>(M3:&$"4"!"#''+.!'$ 47(J[OG0<$-6@F?>*>4 &13'*!! 2@*)'&&+**.&/"'/'NZ9UqbVU^dVlIzeW_M$,2bF9\8IUH>DB;B`Z7?GBKR:CI;NEL129D9?51CFCHOHMURX?*Y?9?<>A:G[N;BJNTTWHBDJKJKLSZpHEs=Fi]gkiadbbhbitq}|qaXSSR_pxA?CGOPNE>6b]VNKWbc]F/199@HMPNFDK\]]dgkin`_fzsrws<;;=?>B>BDEFFCCEIJNOLDFKPRRVTQRPRUQMHGKJ>LWQLSZ[Y^\``]9>+2^FIOzJ?<{?'?J@E287:NMX^IO4H>_8*/9M0>SLMK=dWh>;H>gMXI=HA;6N9oDB=DD?o>DSh=1ARh|HBdl\O:9UXHh[7A4S3WNDBN]9AJJB:R/+4M3-@\>^5O+2HN0A?7>@-@SCBREO?FAF?MM]ZAAI0L4a7Iqqy`@>327N[X/>_H=5;3FE[`)*2T=SjnNGM4@7SL-E;93PDOI:.Q?MB25;d;i]b\?L5AQQO@6GGb/>&,fos}iXcRbbxtOVPrjԙgz^c|nuxzWg^]r}^fWfwNSXMLQNHo~GOSWK9BZFGHNSOM\YFsY_A;YD]Q957=Dp?Gs/_wy>EGc0F>MwcqMYdxj>[mTUZ\RFChDJVIhn`[}WbYW|bi{\mvfnhm]dur|\kwjwYMiFMe]`_Iy\LyW]dddbUXj[QRQ~hEANLA*)Z`_YUW\ZgXQFi\5&(;,#')6:) 44--!)$;+"*)I5=("02277,3Ua\ddg66;HOH?B>>:;9;>@?>><;;=@>=<<<=?@@>;CNUgE?FvRXCMmc?FaeRmkmqu:;<=>sqdMuYIBAiSYbfjicYEla_]d^\XUR^;ENYL=8ggd^TNKJHJHGJLJVZZb8<9[W>EDCA>mlYVOHxiY_momx{YTAPJKEFF>AFDBJEEB<89=>=?ADEEA<8::;==?>@=9<::9;kjpoo;:9ngiiliqjmmhjm8ojijkic]cffjgejnek79m<9egmlq=vc]XPRPTWYeh795:;6bca9;:867:<7ih3:><<::87545575gba\VSRKF?7bMB/C6.,+G+0<>BBDHJGHECIHHHIC6/6=CG{nU\QG@615BPQQPPGB=?82K??eWGR`XTX\UYVWRSUTRULCEOA-?20IQQMD>:<7DBRVZ`36]`^45<7Z_bbb\[``ea^]_aabga^]\^bbd873a9?6d543bdabd`a_1a8>:=;:3g3_bV[YXXXVVRQJHJUXTOQMJC@8ucPVH!.LONKTWOUQKTROOPSNOSSQVQMNMST`\MNRCGIF@=;65`\9GMKJA4f^UP4)B:4633-*02.+)+(+/+.1-,23232     #!"  #$" ! "%%#   "4#$$#%&'"!!"" ""!"%#"$&'%%$$"#%)--(&%$$$!""!!" !!"! 7"!(#   ##! ! !##"   ! !  ! !  4684 -*.S-1/. .-+1) 1./('!,4473.130-,!$ !   $)*!&! &&&+*  + + + +    +  ^   +    +   2+"" +  " &# +     +$  +  +1ai8*;!1%+$'60  + . +  +   !&Q? /' + +  Mk4s, .# ,( +5  + 2&.$' -"; 80'%)')>'&-1*%H-# +', + !(1%%"((7 8% + + ! " % */ + #  !#!"$&(#'/43/*($" "&("&+01!*2&"23M4!*5@@<5AFE@98#""(#9HRD&-%"*-45-CO[^ity|oqy[SSIKM`RcM># $  + -NMA<*+276>HADGEH+D2),*,3,7H=+.6898CLWqF?f:FnjwyofrrpqkvxnVIBEFUjs|{>9>BGFC;4.SRMGFXcb]A'&0059<<<69ASURZ^ggg[Zcxmmrk;:9p@FIIEG@EJMMTRIDCBIIOOdc^l`[^fo{t~xsnnrqnon~zxvsk\YQTNy50)NdEDCDGEGJLLJKFGGEFKMJHI#$(+%(. !!,*.17:,)'+.247945>>;:<9>68<<<52423.)('#)/5! !"%'()&%&'()*(#$%(*(**(*+-/,*&&((!)/,)06747652.)##%73  $)1#%# 0*'('7/:"!'1$,!,@&#%'#9"/(),!#$@:5188!###:!(4!/:C(&=;-&)/*6,',$%0#($&'!, 0$!!& ( $#"##,+$"1%=:?3%"-41"0"!#"-/&)46$ $.*'#%#'"60+--!&)( "$2!;=AKaoNydZqeW\Xfb6:+33@=-^WV2R%596Z]XkxQ]OPZPVgWQmkV`AH/1TTJD+0X9H^fJM{?MbB(##3$&)AH(+3.%+$''.,-",.&F5S0#;&.*!%,H+1I?YR$05@%#:ZHR=@FS[E*>M8688/$&;(*.%)&4).+0"<#6+0)8(*(#'%.#(.&-1&+"+!/pP?=:)JEPF)%B5:??@@9?TA:9;XbheOO11) 59:40.&9Cv3'8J% +  K   +   2l "?LDNMN**-6<9453433126987775367468799528?EN0*1R46.7PG+/?@.;89:<;>7+F6/-+G=GJJKLLE8]UURWQOLCCI-28@2)'NOKHEBA@>>:8:<9@CDI**&9/ #$#! 9:1.+*GB83//)*'++,0/22/34<30/,)&(&%!3.))!&#+.//01202/-0./00.'!'/3+>6','"-)#$*'$)-)*))&'*()+&!!%"$#%&(,,0,',,-0,+.-00-,,--.0.,,++-+,+2/.,-.+,+*/+.&++)**(*('"!!(*(%%#!73,74%&(%*+'*'#))((')&'*)'+(&'&+.85)&()%&'*()&02*+-&,11.+**+/68351/,*,2,&$*(#%&*()*(()*),,*(,-1./,0302)/)'.-((&''*(&"$& )$)&###))#)%$)()()+(),)*'$%&**))**,&*,*(*+%)*+'**())(&%#&$&&&%"%%'%%##%"#&&%,&!"$)+*/*$#',*((' &$(*'&'&%%+"&'#$%%#"$$""#%'( %#$$#" ) !"!.+"%##50*(.,-"'0/)&%%$#$$$(%/3-10622331.,~}~~~}}}|}~~}|||}}~~~~~~~}|}|}~~}}|{|{|{| }}|}~~ ~~}||}~}|{{|{|{|}|}}~~}||{|{{||}|}{{{|{|~}~~~~(~~~~}|||~~~}}|~~~~~~~~~~~} |||}}~~~~~~|{|{|{|{||{{{||{|}||}|{|{| +{{{|||{{|{|{|{|{|{|{|{{||{|}|{|{|{{{z{|{|||{{{|{|{|||{|{|{|||{{|{| }}}|||}}}|}~~~~~}~~~~~~~~}~ ~~~~ ~~~~~~}~}~~~ }}}~~~~}~}~~}~}|}}||}|}}}||}}~}}~~~~}~}~}~~}~}|}}||{| }}}||}}}|{|{|}~}~}}||}|}||}||{|||}~}|}~}~~~}||{{|{|{z~|}}|{}}}~~}}|}|}||}| {{{|}}|{{zz{z{}~}|}~ +~}}~~~~}~}~~~} ~}}}~~} ü'ہ銁􌐋ꀀᇐ➝鏞怆м;ĞЋ獎՟Ԁ٘ټӅʆŖز䢪˻湥㞴¶³Ҫꓵն̺ŠֻЮꃂ̜Ƥޭ؉矱ږ뀃ƘãýÁʼĢܰũߏݵĜ輶еۻʊ܌̤‰ըѿ͐ɱƻԼ烙܀ͩԥƾ􄕐刅ݼ䃃üτ􁊇ټ珎ɂ˴¹¦׶󅊅׀ㅋ·Ľ폏ǿ惃¶Ż؀ꂃʼn憀μз匃ʣцϠ涢ߋ󣐹ܫ鳀ޥК̻هڪč溩ޖĞ䉙߸墻章̵ߺݷӫЀېٓ}jĸôæ𰑎𴁪ȯֆݞٺ򜕸О󀒜Ќޏت޵ȉȘÈΥ픠쿙‡Ƽȸլ˔طȌӃƖ䏾іǘ򲭡Ͷ٥ȯ̥߀ܚȽɽ兏Ʒꃞ񕝤󂀆Ŀþː§рƝܪŤǵܵ»ͳëηƱɴʽνۀ𮄻󉃁ɀij˺ꁑٞںȾ񒓮ĬُʴUʶÖº˼[Ydhd^[XWWTS[d=l_dhcid]YSZ]`ki[]X^k\W^\Y_`i68:<=A=<=?@><<;93;;:7jm8m76898:=<=><;<<:98:;;999;;;9<<:<:9<<@>=<;=@DBA@@?><<>><<:;>==>@>>==:=??FAEB@=?B@?BGKHDEFDB@=?@BFDBCFHEEFDHIGEDA@BB@@?>=>ACEDDCDCGKIJLLSRIEFFIEGJJE@AA>??ACC?DEB@@@?@A@>A=BB?><=>=>>>CA>?BA?>>::=A@AAA?AB?CBCDEC@C@B?DCA@@AA@BBCHHJCA?;=>=:>@CDDILMF7k@B@>>?@:9A=<=988778<<<99?A<5Zh<5c[_leGB9:<>?@::<<==D>>e@?@A?>>=93M<<:6846ZQ6;65342/QW01C+'(%"# ,6;9J?H3I91N5810XZaY\_546526<7440RDC)1-%4@1&<,07:;569:'9I<9R=H0<9E"*%(**& ($#*$"'I18$3M::6 !'(B) +#*%63!&-1,8"!0e~j60`&w\wi\IUjXxox}vR8$=JRR2MA4)Op7c5@6>/,/OJ=R0Z?]zhC[HlJA1jP>NDDMiY;-*1N!5AOEVfp;ROJVE5C2A)U2")$"  %3A2,E+'I%)++&#:6;/Y* -% +)M)0-76.+(49""<==5*(,^`+*5P0/+$".+ + + 017/5;"'6:;=9346"" !/!JH3Oao[Ydοd`TmUwx{~}{tyuܴzy|>CDJJMGJQ?ONHA67::HIAJWGAGJJHLH?BKOUPMMKVbfd`WYXUVU^]}r{v|wqmQSTMUhoiks<<>GOROE::k\L;=UTNRc-5BNHMS_]WUXUTTV12e9qnmxCF?sD@>ERD -IFI]9IHT_aacecaddhkedg_^knmngeifpoabhZlkkmhlGFJFEHX7I>?!**`8E:3@(NM/:03+L.&/*?>CEE=8FJVRnWL7RPE`3?XEJ;<1G#,@38JH4C:M?c=.$!>97$$EFA@<:7MDN?:72-.1C3R:7=3ALN5;3*-22goaWRWgTZ`QleIG~Ezzgič~_vuoZ\tmPY]`hbWRQDD8HRd8Dm`KqFEcPDT,7V`E[7CGZvb^VN/:PĊ_\`?igSJYUWfc`eWXWGM~.8GE8#)Z^cabmO6;?n]@-N@J"=K/)6 +!!  .)KD-$J%(+J75!!#"/<=>>?>?>>ADHZQQmy@o_HNEG7E\KVARDb;DD?<;?>gJ\oPKE=pnwtCIE{pe`\\ZWQT^^abVTOQk:AFHC~jYQMLMME?Eb;@EB?KJ?S`rplbbdg`e^TGzEV[~IJJMMEDE@E=:@GB@<:7;=?;DICBA<9:;::B>><;;=<::87d355c`Z][RNM?=^L6>1)+++'4/:EGKDGHGHIKJLJIJIG637=@EmX`OL?054OPQXVRPDEIAHNQKKJGPPPIEJIFNNNKRSRR\cRLW[17:70XVXW\Q3JX.\YTVUTPWOJLLNQPONKNKKMOQNPRXDORSOLIF0a>HEHK=8=:=c]=;GOOE@UP]]61:>I;q?<<;9;<9\cXSJIDAKKNOTR@@CCBE:659:@=@LIIIHDCEC?;95hek76520:9A=:89:<::978:9875ebdad`s,).231//.-*(+15.23.20.-)./065,-,.6-*0.,-,1 245 ! 0 ""$ ! +# "!!  !$&$"#"! !##""##!"##'*(%#"!!  "$%#"!"!$%%%&%)*$!"$%!#$$! ! "" !! !"!!! !! ""! ! ! !!"!!#$" #"# !75 "&$3"%''3/*-72#.&25*/"*/.30/!  + +   &'*%')     +  + + + +    o   +  +    + 0*       +     +  LI^ +.%,/$&$(-  +"! 5 #  + A +'& ;% +,/ & $"5/93 %&+"'=5 # $(')-0 +3/',!%J)'".%(!4&",('!-.%31""< +'4'5!-!#>  +  . + + #&$'*+#*"% +1%      + + + + + +  $ !&$ &+.+(<! 1#(!&!.;:;  @?9CB;D>,$)+"$&$(9$ !)aDDDHNEGJT]VPzZSGIGw~mSD!%  +5L~Bs:6,,/19;=87<.>:4.&%%$4507B6/233230)-58=:;BAHFBAINJBA@C>BF|d}ĺrxvlostvsqp~ķy}|~uhb?5V(K]CCDFHGGJKJGHGFGEOFN9GDC8:%%&-! %"!(()39511577::=?;:=77@@?@>;<:?;.02+878855=@? .!%%(&##$&&%(')#!" ""()(&&$$%&(%'068530247962+) )--.,1!%,*1-2:'($**($&%&$!(.=& 3"2$1*$ (#()5420" !!#*150&35$%&&$&+)!$&$!4),%- # 1#%$ # !#&30@2+0+#4"3!$ '/ ! (% %% $* :A>=jl7?h`_Z^[Y[@131+V=X[Cce.%C#BS\IUYBQFYUNUZcbXbXdC=6:?8,.CtWMG;K0;SejZyED?QJ-)&%+)"#<,& $9C&'#&2) %09!@5)G('6*!( -%HIj`2".3M`@+1S`<-L.RE'65"8ZLJ-14BC:<3%K,'!(:.*"#$/'*(4% +)ps=A7"?=Q*%F88:D@?FAB>4:p^[ijiO &%36;.-ZZ=%8.(      ++ Y" + + 1KQ@O\PG,5BZ;dBE<47986679<;94423558::99<=7<57N]3RG.J,1<67(/?04"& 2##  6&/B3330W[e`6:7gb^]YVSQILSMQSIDBDR*/0/*NJEB>>>=6/2@#&)(#(%"+09;93324232-&LFRLG%12E''&&#$!!%*%## "/6678:;:<965;953688689766503973:6743779:93-,-**)),032550,.662110-..'&(!!5-!&#,35734521///1//113%%&,1+8*/&& !##! ! -9;$$.+#-#(,.-(%&%#$!)%%!#%"%$"(!-1-,+,&3.--,.00.,0.---**,-++1/3/,,.,,-*+3.-",/0/()++& &$+(*4,%!" ;2-8(&$**"),*+)('&(&%+)& ''/-(&'*-22(,+*%$!+,'(+,,%,,)+.-+,+,,,/1/ 8521-,+,-,+)%')'%))(*+&(&**)%'&+,00-*,.1223*#*-*+-'*+(&&+(#%#"!!#"%" *0%%"%%#"&%(+'$%$$&)&)+&*-),'*+))*/*,)$()((&'#$$%'*')**''&$'%((&#"%&"##!&''!""$$%"$%'%*-%#()%%%&($&('$&()(+&$%$#%#%#$%$&#$&(%&'%#" .# !$0."%$ *&0.'-4&8(/+)%%"!''')+(" 31421112/~}~~~}~~}}}|}~ +~~~~}~}}~~~}|}|}|{|{|{|{||{|}~|~~ ~}}~~~|}|}}}| {|||}|||{{{|{|{|}~|}}|}{{{|~}|{|~~}~}~~~~}~}}|||~~~~~}}~}~~~}~~|~~~~}}}~~~|{{|{||{|{|{|{{||{|{||{{||{|}||}|{|{|{{|{|{|{||{|{|{{{|||{|{|{|{|{|}||{{{|{|{|{|{|{|{|{z{||{|{|||{|{|{|{|{|{|{|}}|}|}~~~~ ~~~~~~ ~~~~~~~~~~ ~~~~~}~~~}}~~}~ +}}~}}~~}~}~}|}|}~~~} ~~~~}}}~}}~}|} |||}}}|||}}|{|{|{}}}~}}|}|}~|||}~||{{|{{{||{z~}|||}}|{ z|~~}}~~~}|}|}}||{|{|}|{z{~~}||}|}~} ~}}~}~~}}}~~~~}~}~}~~}~ ~}}}~ŀ~~} ځ󇉏⍚元섊ѻޡù􊎉κӷ恍Ƃ񢢧⸂Ȋᥰˆɫ̿ѡƷȚ·ыÔ桉ܞ̗읺⧥ݴߎɻ󚢄١ѺœϱţЀܤȧҋɌʵţ嗍ȣ뾏댻㢵ɓ–˶뀂㦌φ񀍌Ɂ̿ӝȴæò倎ҾǼ͈ڈ܅Ϲ¼Ƿ񀄂ּŭ햻؀󍘋󇍑ߕŸˀ袈Ԥƍጋ˵թӤҘǬ򓚉р褩̺۔Խսĩ邏ɛȽ٤Ǣјѷҕؗͨמ罹˷臃ЈƸƞꁉۀ޽ϲֽڳݡі偊ٚ’ߐ󁱢ª}̩߰ʶη›戃Ͱں͆ѶʇŒרݍдӸ朓腝ǜ冧벧Эֿ֤Ƨ٢ǹƛ췵՗ـԻ¸ѹнՄԨԉ˹񳭒ħҦᶎجnjο᳠¼򄔿Ʒܸ®ɳΚųѣɫҤƚȽ•җƷҤҽĮԴ܀­ַӀż牉􁒗􃈁³ϧξ̽ŷǿ¾ƻ턃ŹȳۭȽҀ񁀂󏟊ؿ̿ƿ̸ʻЀ߾Ǣ󕼼ƫȪԼՌ¼öc_aegc^YWYYZUWcligjn6h^XTSb`lklea]bg[Z`_ZXTY6579998>C???=A?C?;:994:FHEC@=<:=?@<;;=9688:<;><<@A?<<>==<>=:8779<<:98987::<<><=;=@EC@>>A@?;<;;>>@?9::<>==@> BEDA?==@@>>=<=>@C?B@??@@?ABEGHCBDFCBAB@?@CECAABIJDCCBBCDCCB?<==?CCDBABACDFORRVQIGFFFGJIFDCAABBACC?=@AA?>?@@?>@ABAA=>>AAA@AA@BADE@CEDADECC@A@@BDDCA@BCDE@=?@>><=<:>=<=G:9@EA?8jCJDEGC:i::;;>><>AA=?D@<<:=?:8`Jb9?6Oj;@;l<9>@=kLkc:9gVY^\j7;=>jb9;>mh588if]Q_dNJ;7757CIB?AA?><;853<;68409645877533/GX9QK#,(&##!;'5AC(8KFLW3550/VY1]_\c3520657571--=45 7/>3!%%(?;,#2<6;,LX3LL+1KFS(%&30(((,*(&26?3"3(%$&$%&')("&7B?12335.299-CG2%-,=4G*4$.-#$7?65%0$$,(%$!1.,!9):*1.$"13D) 31 $  ,-:">'+,/1*#b0cfalh]j^wi|hR{_s|_T-1EJWGfOPZ8RA1K[XF<.YD1MNJ@183798)357,,XMBqKdOF~ujPCoO*LO2\\FGVV\3;7QAM*.BOqt\?wC_UQAB9KL$1:09A>dxmdvdcQweZpOk4ifnlsZm|i`praxxjeCanmYz|ude]d(-QARK@..! &2:@>GA?F>#$GA)+((*=6#7B *&$%5$8+/,/0/33911@?/!E6)ACC9534616;6C.)!&7NDK9-!,:+&'" 1 &&%.:3E:+5>:iALGICHJPQTQOLLINGB?HPV|fijlfpmkghkon~~}~{{|rfxy?:_dyHGGGIKHJIHGJLGGM`|R=YZXDhTH:L`@>`;O[ZV^gjj\_`_ghjkjmiaaehgecjkcbkp`^dwzD@CEACA>w{}BDGDBCEAEGIIIHDDB<>@AzyCDABGMLGMTYbjgca\\^`a_PglDFDD8VS`TCT9TGTJ2@Bl8Xf\K<1:MXZ;A<`VaM8<6YW7Le`VIK_WWN@nJ7(&#!#$&+..=n;f9@]L>3:5=0*8gVVBTTWgdebm8UWVO@?0D*0,9C7M((+20)3,9-2(,)# cMJhaV=G97WEAA2nb=dg[P640DOGT1-@,W3Q:;1/+E<6FSHG&('FScNWJ3441?I?A>3P5>;ND'.63/KLJZPBJXJ^`ynp_NNdVh^e~}te^XWJf]dZQ_V_ZXLDZ9UEBEjVWYUJD@uQ]>BSIE>f==J^nMa^LZuA>xorqesm]RBgPwgPouzyimqrj`]XYWUX[XSPQRO\mKtMcmbGeDeVRVYcH?[{ELNbiox@>:olkhfqtnjb[YYiUSQUKMHGHGGCABHHCA=<;<>;;>>?@B?>;9:;;;@:;;<:;:l:omonjq?:rs<:ilmgfejmoplkjiif`dcbkrlkjikm;989:9:><;9heb^WX[Z^WY`ajee5845SW8nj6kkk7j59;87;>>nfTJGA/:Q\SN0XNMOLD:=:K@H0TMk>9F-O[RUUNV^fZOKF@EISSKXR[Z44WLSU\YW[]j3422291cY^19;;655e^\bf`_ag``bba2cd34563Zee4dhb__^553`b`]b4a228743fb]a\b`ca\\[XPJEMQYXYb[UVPNH?C[^C36KOKRVTSJLJMVQIPUQJPQTVTPMVRQTQTWTPOMJLSPMGQPUTXZ_]\`_^WY[h9C>=;=n\]][Z[\^aRLPSRPUVWXTMOPY[RTSOVW]Y]]^X345h]W[YTU[UXV^[XRPNIEJMCHGFF;V$7F;IIILJLMLMQXXTUNLNNHSTQUa220]_.7=41]Y//0XV^[]4c[U_bV[V392XTSVVOPOJ`WZ^VTVPMSUQXMA==JRRLQIGJOWPMHBAHS_\WWQNOQOGWDBMX\21XLCN`\ELCDXX0.\YXSRQRMNPNNNLJLNOPPMP\\IPRPUMLLE6a::HS?BC;B;=;];PN@A]Bd:O156HBK>:;L=<44^UNIKGEJRUZZ;?>@AC:7f3:===BEHHGFBKE@=<;:=H8857454:=;8779>BFA<;;9765gdacd=1002420.,-./,+2753684.,+*2265510.04,,0/+*(+- 6 "&%!!  !!""$!!!"!  ?!! "()$"!#"#"#"#!!$##""#"!"$+,+.+&%$#"#$#""! ! !"! ."&" ! !!"""!   !! ! !!#" "$# !  !" /#!30$0'302%6-3+,-+420/24121,% -.(' m"!! + + !"$%')&* +  +     +    +    +  +    +    )   kqIA3 "0&' = ' +'-   /   3- C0 ! +6:=    +*&1)&&%) +D +" +(( ($ $! + $$/4F'"#!*2$,-#;;0%2/( +&.05/15/)%$ &  +  ), 0'')/' " $%* %   +   !"" %  ' #')&"&' *)1V3'<::6B+.$*)&!&'$)D*')5#%'()0XUUUPG@A@@@BPbkja_]VRXHA~fN +(5CHJFF=555-..//28<1+,/3(!*.//0447361054;60-.2:>EH?ACMTOKKGHHKFU[[_feQOXYorc_asj`_iLE?<>IGN\//..258711.,'D<2DMCGdO),:GC>@AJJNOVUHHN[efik;?GEDBDB=9hAJCDADGLQUPOLMJJB;:FKdsxyxɹiqooortrswke{~x;2PVqEGFFJLKLKFBEGBBEIOJ. 031&8,"$/,,445?=68<=;99>?8478/-1>AE%##%DF$%#"BEF%&&*(%#$#'')(''$$! #$CB$$!!$('%*.27;:8862-&,0"$!!*',*&$ ":*1,!$*)-(1$*''6/(!"0,# 9& < 4,%0*+(&)322-2$()%!& (/'""%,$('#!%*82?!. " >:5%2*#60-!&(!=277-'(#&# %*!&&+1#,'!"%") (  !&&$1+hnl_Ar]ZXXYZ_W\8F=>4^\g,V070<2I0XKZRbbse`]l[dYTiaDF7=;JMA9Uf`WWEB54G<>_TM;5Y*/*'3I%'0@@(G$@I,33- )%(!%'!*:'% ($1(#B%/T_]2L';=9=K,D=<=B?A=E>==okieapspj # 03Q^;7?;AHDA;48DG@9::=9:@85.WXR9G33>o/,(E$%-12&93(/>"?:;<4><4/&?3LF:b[aedYbkke]WQSQNRQLGEED>CK1E*591&9)@:=?@F.$/?"%'568<"!:8821:>:84310:O0/,,%'$~#$""  !"#! !598986;"<= 789663578:98656402437;887557  641,(,./3-,21830 '867653.3,*)))&&##9#%*#'"!(2663201232.221*%&))+*;1($"!#! 1!%*&**%*/3-(&" !"('!(%+)'"%%)('**2/**1-./1-,/3--//-,.%1213/-,,-/-+-,00+/+0011-/.,$"!$))+1-)*'%$ #/41*''$(,+)$%&'+)%)*)%)**-*(&++-0../,)(&$$)'&#(')(*,/-,//.+,,1  !;>?@?@??A>:48BEEFB?<=>?@<9;<<8<;99:;:?@AA?><:8798999:=<94688;<;<@=>@AA@A?<<><=>;:::<;;=<>?GGECEBBFB>A@AAC??A@BBCBB?==??CFIEDCFGFFDB?@B@>>AEEDDCDCCFECEJICD@>BA@?DGHCEGJRTSOMJIGGHJIIFCEEFFDGFAB@;:;==?ABBB@@;99@9=>>=>BA??@BABC>@@>A?>?@CDBDBCCEECD@@BAABCDDEFBA@?>>=;B?nHB@A@?dp@>=@BA>?=79?>=:8\79dZRB_B=a`=fGSd;e?SdgNWb]799j[l=<<<>@C@=?7;;Z:jmfOjjM;,-*'#$7*.?N:.8AAZ6./5///0/2Xa144765894223,/085,#>:6%*!.$&11A$5E82J/2U/H> "$((&,!'/6+>"&&#"'%&)+7E*/-20.12-268/GL>G=KMJAS?- .@ 7=-J+2+73!(9$-*%"(6/3$ 3* #+1&" "Z9yQ/1;1.*1.-)((*s{eOV\RdgcV_}^XibmjePc\D5P,=bV2Phage\C/\ZKm:AB<-QeD.1;@8=?F-L'.A1/DFMX}qhFyNSTDD7\M?LO?:3,/>(*9"%!;2//');D","!/*!& %)1))?DFCBC>005!#$%((&!"-.5,>>(*)BI*((&;:>.9IFC_fmrifZZ[[SUTPi~y{jgosntrqm`bvDJC9-"$.)$LONEANLHF>FNJ>@@AIR;;C>NLG?KLKFCD<>ED?EW[PA@D14WY[VWZEJSIMJEIDDPU9DdiecTUMz`TGVasfkWURTVTDEMZ36;=AHKMF?83694X>HC?2O4IAJ1,,XY\``bdi]^]egiqL7u46Mqkm:yb(?*.\iWHJI(TD5?2O_R.S>!92>A'25QJU2`_?9CW8+9ePBFfNV>;4N.,A-:OQ%$# /3a262,BJQ9EG;UfX=DL;.>C/Y@==/4?;7[^=?5815:9REE)?A\>j9F<76)BUrD,SB5.3dbH4,YGSHBHS-BGI6Q8+.&))/00 C4DO>E(JMDRS3WQWAA578P*=A.UBIVLH;C?eR?@U[e3LaaLAt{zy{}TWXRR\hYlgRfxbޫzzquw^xSpwfXb\KYZXGLWGcSE54@5?GCJIM?O=FXMvXbn_;P;SSZN@?ZDUKAVBA@H<=>8?Eam8HlfUz}KMK\zPVH|VpFG`mqYSVeɉors]`hXfsy]l~Mv[XkDiRfF5o^`mtjg^^`;Hf][N~TBJO9NZ][h?J@d]k=Y6E5:VS3/:2  B #"!*#B7;MG8,:=)' aOwD;')/Zg::qm6<>A@<@AAEWHhGHMFCCEKUmX\l^TNdILRTFFQL@Db;J;_mxhfkiaxNbdUVRJHFHJGDECHHH?:=t>DF;:<>==>:::9><:np:9>pmmokcdjil;slpjjkeejfgileooklp98<9:98<>B?sia___Z`_\\ZY]biffh`/;74Wofffhbaj7874>>:8>=9566icYOOLI?8bT67*'C(H/7@FLJJHEBACHK''%HJKN@548;:9<>WgQIFAH\YUNGVN9VjXSPVSQRWVURF:EVdZOOPT\b3a\T12__VYW_^2_^452cZc484367863gdf_]dia_`bfd^e4666ece[`24a^[_473_^`a_c33ec423f\\W`0bgfagbcFPJAQZXVTWY[SPKBAf732J=MJRPOLJOSQLLRSTSUVRVSPJKKLQ_Y[SKHNKKNH66YWZ]20]XTSMWY\ZTS[ZY;6_ZU_\XTRN_[[WWVYTPRROSO?BACMNPPJDGLRRMRHAJNVYggVSVWSSHOSORMJRXOHQUVQA=BIP/13bWWWVPNNMMMNKKO~WVZZDQUKSNHULFF9]<[EFF@CIBB::2WMIJILFMecgb<<=>@:^Xbf:>>@AFHDFDHC@A>><;;89774767::<87:;6>@A=<:9875ihef2440.1220031/,)-5833/-$.-2--1*+.12.*)($0  ! A '&$"" # !  ! ! "  !"%""!"#"#"! ! !"X##"$%$$'&"#$$"" "!!!$&&##$&*--+(%%##$$#$!!""##"#" "! ! !  !! !#"""!! ! "$""!!!"#!    !( !  617\)1., ,/-'1")/0 +12%,2+7/6422/'561!.8$!:   %"(,    +    +  +            + +    +KTA,*< (!+ %4&! (2%$  +  +J$ " iOy + +D) /7% b0   #6$*""+%*(*("!+ H+##&!0(,*&')5'+%$+[)$$> ,-  "+%9;8(!"6- +    # %# -'"+0+@36.)'&"+!     +   + + 5- !##)+'&#!#/.(RK "#>6+/ "" .8Id__/ipxyyOPYQJF@=AEIHESnwth`XWzr:6<=<<4*%    + +1EE>9D?<7/6;5(**)-5''+'13-%/10//1)-32+.ITlaeOMGD>:.15?'(*,/4451,)%&&#E3=;80P2C7>'##INQVZV[`QTSb`em9?@DCCAAGC>DOGIMIINPSVZQNPJB86r|XUQOSW[__wxux{qgjgkmkps|}z}uuq?94)WFJFFJMKMGAAAECBQ>*"",?+=!,6*()-4659<956<:8:>CDBGEE<66<>< @JD+#3"CE%&&$C>>B"$$&LF%%'('*)$'&&(*+((&&I%JJG%(($'%&',047;:<93341,!*(+() -1/( (&"*"".5"/(7""6871),  (.')!  (**51(1&!3%, <%" !,$ &). #.!4 )=.!2+!2&' !$ + +$,' !(2+&(((*+  +(#)2$,+%!DVb[QORTVUWXUVUPS/M-1-,1T:2==/:;:-JP\`cnXYXTXPah>QG7S1DF,2PINhdB8<$;,MgedSgPAA./(,.,$2(<,'%##)+#+'3*H50*$$, &$$#%)2(&!( $$'-\HrF .BEZ=[_982=L33$C==>>GVDFUG=>HD:;L)5,HO%9;1!D-C*05+"9%7-,+-&"7>A<3G<:4^R`e[^gdeTRWSMONQLEC<;E3F-9$+.2-' 5#2# "7.$3"!?;;$!<;=75205 A76980>+:9/.*&$""# 9$%   89 889=;;!">;:;833667:7;87844645794:;99: #!>710//,10/.-,/2840/(,:455631741-''%$ 3*!'9',56:7540-*,-0),05+#%')(&#$/&# &"!! "'"+4)'$('&'+,,+!!(/)$&$'*,*,')+'&&+*+*/*.422,*02-,--/.+/+-0,-/.++,,-.+-1./**(,123/523!$"$+)('(+,(&%!"7$&,!(#)('$$'+)&(**++,-*-)'%&''+744+&#'$%&#"')*((.++//--(,!20,-/12001.)%#%%'()'&)'$%$'''-'*(+*,'-&$/,/*())**%+()%& %#% ""'&' &(!$(#&#'&#'%&$##'+-('(**'&(")),)%%)(%**(,)'&&#,))()''%$&&$('!$$('# "$'&"'!#%)*01('((&)"%(%&$"%(% %')' #)'(*,&$$%$%&##%%$$(&')%)#(%(%!!*- !!# !##!)1.84* +$5 ($*&$&'($'1*.( /*-,3323 }~~} ~~~~}~~}~~}~~ ~~}~~~~~}~|}|}|}}|||}}|{|~}|{{|{| +}~|~}}~~~~~}|}~}~}|{|{|{|{|}}|~} ||}~~~{{{|}~~|}~~}}~|}|||}~}~}~~~~~}~~~}}~}}~~~~~~~}}~}~~~~~}}}~~~~~ +~~}}||{zzz{{zz{|{|{|||{{||{zzz{|{|{|}|}||}|{|||{{|{|{|{|{{|||{{|{|{|{| +{{|{{||{||{|{|{|}|{|{{||{|{z{|{|{{{||{|{|{|{|{|{|}|}}|} ~~~~}~}~ ~~~~~~}~~~~~~~~~~~ ~~~}}}~}}~}}~~~}~~~}~~}~}~}~}|}~}~}~}||}|}|}| }}|{{|||{|}|~}~}}}~}~}~|{|{||{{{z{z|{|~}}}~~~}|}|{|{{|}|{|~}||}}||}~}~} ~~~}}~~~~}~~~ + ~~~}}|}~} ~}}~~ɀ~} ĸǴԅҮ腂֍Бꩥǰߘꇉ܍򺊕逋닒ۘΓÿ̡ΐΌ汀˄۾ƞǢ˺ژ搆נ̵Ꮂ䃘陛ʀé჌ڕ篼˴ũʰȓ⩮ʔ܇ޟߋʞ՜ڂևӈ˖لǜȰؕΜծϬ…ͺϹϺ잺Ԩހ۶堥߼ӍÚ¬ȕ¿̪芄᪺􆇂ۃրϬ這񵖡ɹ¾Φżʿ;Щȴ󂋒۞쀅Ӻぉļπ羅Ȑ쀇ڄ©߅Ŧ㇟ơͩՊղȌޛ̻쁊ܱΈ܄͍麉Ѽҡ𚦘ȸ􂂫ŊƔؘی鼄¯ڰᐳΠżΒҚęޣӸϲwosҀ~¨ΨϮ蕀îĦ埥雉ٻЌ傤麾ؽھׯՖɳ¯ڽ˩ŧDŽϐ˿݀ɀà򠓢ƀŶťĬܭǪ±ˁɠƫ둧ҁ݆ľ퀁錧ķΧӹƃŞֺ䎍׻裰ǻþļýųźވ닆낉ʺλǴȺ񕝈ø¼ŵ͈πٵ̻񍔤ʵcgie_^`def_YXXXTT`kor:maTOYM\d^hjhg544fb]VadVR7<=:<;>A;:E@@?@@DE?4;BHFGE@=A@@A<;9876>BC>;=<>==:;AAABA@?=;;::9;:999:;<:9988;=<>AB@>A?<><;:<>=::=>;891:?BCAEJLHEHE??A@?AA@>BBBAACB<=>@BECCCDGECAB??A@ABCBDEDEGIFDCFEBCDEEDABCB@DEDEFDDHKMKJGHFBDEDBDFHGEHGBDKEEED@DGGDDCFKJD@@??CA?>>ABGC?=?BCA?><==><><@ABGD@AB>>GD==;:==65=::;57<5;fUZX_Zrbe:<9;?B<=BC>>?::=>=:;;5=CDA=6f>t;ssFpW^m;:=?;7@B?=<:88;95=?@@==;97552101Z8:/4=-1.*&' ,"R?83%J63]43242/1^^12977<:68444532,,);:54+%!".8CCH/(.;<:8Y>L4EW0/E,,=/"",,'E+6&%$&,! BH+311+'03/39<)K<,#*4(166EJA+4)33+G;Q-<521$4%HLT=&+'*.6+-;0*+&+464$'2!TxOq\M`(&,&:N*FiO0-L)v=XYde}yXxbYiL>2,1@>4M;PDg*4amM[je@:MI=f>X8AA93*AHB4TI7J^:2h~p`FDc@f\#zS9?8AeLx^d*;P3:BHC2S;RMhDU]_ErFT9MH>^\S[8Zc~a\ThavAi[d_p|bQho`]vtrkq>_zcaxm^Pyat}K AA=bF5;@1$/ %(%,@>/4Q011*049AH$=0%.Yf0&)3-(1'$"$''A0$ ;30518;;7:7;?=' G:I.5CFBDEH@,BR,%&347,/74 ".$&!!!$)*)%)26 <.6C!(@><>:@;8;A"#9:!" ?&$%$D'" $  !#(.">;=A@@?M(('''&#&)+.1579>>?{RjvriXWVX[\YWYu{zuksՀkmorpkgrxurmwFROA1%"&(%JPHJDL@>MLKMC9?;<;<0+.7LQLACKKED<>;758=HKKJNTRK7gaZXQ\WPIECFBHMKQT][TY^a^LHI~kMebbjlbYXbWSNLHL`368<>??AA:4,IRS5.osSDF[-3GHO,-WZbi^SXm]\[]cl>C??AEC@HGFKGHJFEELWQTSTOLQNLOMMPUXTQJ^aiejljdglbdbegkt||z{~|}o{:42[uFIJGEEEIJPSPgl:gD:SBQMNMMNUTKIYRIC?;=CA@B?}y~xABEIKJJHEEDCCCzABi@IIC>BEEDIOTZ]cede_\_`VLA5596;AD|rd;KLM?SA1E082JM$TPJCNDh>IEja`g[?C>AE>==q^7.@&/WJxwkntr`qofa5QTPX_6=Ks:G:NW]NMMOD=h67YWRGM?(,M>^OeAGLIe\I*DKZ@NC5-Q9R1)D82ON2/K.NJIU&7]VTU+4;=qgQfGL]L=}~|{RxPsTt_UU|p­Ơ}jqvՆu__UYZHyMLN]o3DXGL[Z/MZS72\XSWXFNY59Si|LDG297];5'EQKF=G0:D;]Z5C<;:ZQvAuFHKME`brjc_^PDSZZQfmcwYzhuƁfoZtzwsmm]bP]_jcvOvYahndvaSKB:<;qihgghhmmydg`mt[V`T}_^C0NFVVYxibVZRDS.G:^%%M0DO='&"" '/*99:;<1H6)#58oauC145ncl59VMGG?CNVTPMPsLUOOJACBCHHGHHRtGldcVH8GZ\QKHC?BK_>OAVBGqLY^a[KpmHTQH9?=58>;dQHEIRPPEyEzommrg^]^`jjbadoFRh?Vk?JQTXYUQNKMF?yqiais|JUb[QQNFFIIJIFBFGGC==@@>=A;9>@:=>;;:<=;rtA@?9=A:mc`a`cce_`d]]]aeadb\7?X.Hli^^ZT_km8;:?FD7=896dd^\ZMJD>5cS?1)'4+6BDGLMNPNJHIHH&%%GDDFA95;>?A?@M7b_ZXQPOVZ\1^TO?SUYG5JLDIPYYZSSTVTWVXTVVW`XKJme_`a^_\]^8abb2cc23hh^5acd[]WY``cba^W[YQFHKPUXSWcXSVME<4742[\34a_YUMOTUPMJUYW792]WV\gIKNT^[ZVX[YUUTXNLCE;BGCHIBEGB@@?:ROZWa%J,6:MSI59:8:;;B7aRKJGHINSh45;:=>=l]X`dh6>>ADFFCDG?=?@@DC?;;9:67::;:9;:777:<=;;:764ggm2464.-04330.../+)068<94,)/&01-20122/-)00(% !# !$#!$')&"## !!! !  ! "$"#""#! !!  ! !!"###%'&$#$#"##""! !! #$###""$'((7&$$" "" ""##"%$ !&#"## "#!! "%%" ! $! !"#!! $!! ! ""!#"!$"#"  ! #  !!-%').*8-*4+51830010),3-,<$(5'2<- -557%7',3 a!  +''' + +  !    U +   +          +  +  +"/1 * ,F]3z`++# (' 2,"2  =-  +  #  +! ! / (jzT A4" y7[ %    +*  6$$'   3( +!' 14(+/'&7.#&  "&) :6 !"(*")j653O0!(+!  +&">()& &+%"?S ,""#" !!',*>18!)54/135.1:  + +   !+ "& !$'&%=3!" +$"%#(BK|50242/*+(! + !@A>7<20=856+!$!"  -21)*20--+-)'&%&.00-1651#OOLHAJFC@<>?"%JQ[bYNTiVVSX]fFFD@#%?127#%)#!AEAF$'((%!  $%L%$#HFIB$%(++**)')(&&%E$&9$%%#!#&%%(+-01699:6220(!!>94(&&# "!,'< 63.5, #9+-%;<39 )((.,,))!3(&% !,*4!$'$6- $$'+$ "#'%  ''+"&%4 +&%,/!")/*+,(%,'&)#! $$"'#1%$$$-20/$)(!!%(#(,97201- ,&.%#o|o]VVTRNMOSQUXUZ.C-D/B5M,JKK+70OMOicx^]Y\_XYl=86279TP9EBySZMH?1)-+W4YUUcIL>+<>%&(27!3%(/-#-(*/-0-%12 2EU,"( $&+(':5%#"#5=V`-T24892?BLJFB?1(8@?8WEH;A>!,70360M+-/",!%*:"&!*.$*$2E?2-&"%'LGDGCBBFFK@EBRR>;G?xv_H8!%-3PD8;G<;43*$!/    +  + +V]=zW8"'+YQS(/?63503>FEB?Db>HEGA;><>=DZ8RMMA6,;IF@=A700/8'1(6*,F-453.*C?*//)!+*#$'&A7416:9:3]n:eaaad[RQQQX]TPOQ38D(5=$*-.0/.*&&& !-::9 ":7:;527?=826:@(/72+*'" !""  !  :<#"! 8<98:9::76227;:784:75565684668;<:! !#930213_34002/..140/+(!&:70/,)087""11...(&#7."!-9::<::94/..,+&%*-+'$),**(# $$')(&%( "!##%)&'((&)(*&&$%,+''%-./,'%),*(*(&%'''(*,(+*/./013.,//////404";3...,+*+),/---33+-,,')&'++--,.)++% "%'(&&.)')$">#(2&(%&#('()'')(,./20.*'&'&"',6/$!)(%#&((+*%++*,+0.,*,(*./21+0+&(%%')&%%''%&&#%*))'+'&*,',().0*(&*)(('&#  *'  "%%")%%$!#$&,$$%%%)))(***--+)$%''#"!&'%,)((-"#&*)('(*)())-%$!#$')%%" $)&##"!%%%'&)''&$(%(($%&$##%$$%(# #!(*+*%&&$&&%#$$$#$#&) !$"&( %)#%#  "!"!# (*/,64!')&!.)&'&%&''-8/+..-13Ձ}~~} ~~~}~~}}~}~~~}~}~~~ +~~~}}~}~~~~~}|~~~~}|{| +~}|}||~~~}~}|}~|}|||}|||{{|{{|{|}}|}}}|}|}|}|~~|{}~| }||}~}}}|}}}~}~~~}}}~~~}|~~}~~~~~~~}}~~~~}}}~~~~}}~}|||{z{|{|{|{|{z{|||{{{|}|}}}|}}{|{ +|{{|{{||{{|{|{|{|{|{|{|{|{{|{|}|{||{|{z{|{|{{|{|{|{|}|}~ ~~ +~~~~~~~~~~~}~~~~}~}}}~}|}~}|}}||}~}~}}}~~}~}~~}~~}||}|{}|}|{|}|{|}}}~}~}|{ zzz{}|}|{{z{}~}~} |{|||}}|{|{|}| {{|~~}|}~}~}~~}}~}~~~~~~}~}~  ~}ʀ~} ®莗óӁ醕޽ධ焒銁锫㵱쳸ݏ˓Ȱӈ冏׳瓎ʚ񀊆˷ηʆއۂɖȿдݏ쏒򊍗Ȓ喗ˬ̣ɖƌߡ뢣×ÄߡϦ®ȁꈯܴڏߋң֐ؾŔ赬煻ȳ큤ǁۇߑϴϖѳ’ͣ洠Ըτۄ͠ʼ⎳ڹ§և¯䃂վɠք҄󃈎уǹ突΀Ⱦ˻ŵϸ˴ÿɯٿ聈ǛϦׇӀ჈څʶ¸ҸñЩҍド틞Ȇ勧ꨶĹɤε彮ȦԶܥ锏ցݜ䃟ಸ̒達ڵ̜ӔƺІ܄獖ֹ췶̼ޘ膥˟׷~hmlyֹᖏزο݀釋ԷϾ薀ثѡĆұē٪ݪĸƂ⏞ϒήƥ̓ʼnݲ̟뮒ʀ݅ٱʩʳ⬿҆ǘϮȯ˸֋ŌՊ⠏ĩҡڅ悗ڋ޽îބͮꄑ䅐̀􋬤ռ愌ϿݽڙƳǧҺرၚᆂŹШɼ»ǽȦѱҼĴս݅³ƯžЀɽ{ҲżϵͷDzۂƦŮigigea^agadc`Z[_^Z]bmmf\WYYKN\adgdf6855cXOcpn^^;A>@<::?9<9:<>>;;<;@A?=<;;:<=;;::<;;::@AABBJTTSOHFCDA??@AAA@???BCECCBACABCEFDC@><??AA?>>?<>BB?=?@?AF=gh<@;:>=?ADA@DCB@@AA@>>CEIFBADC@@@>@7c:8cbUa:A@DFG@DGDA?A=OJO[dl;??=9`ps^SabWBaYcSGo:7:??9e`h`Vk=>?<:576503/30V\3243142+#!&*1&2:)<+/@O486241[,/5@;8::841115531-.O7(()))+&)&0DIECU>B'=:/>QXI/2N1E%?)#!!"$$2$2-"/)%&+10E./23*/451:=)D/?:1,*),'8MDP:NCUTD,5l,[F50#/%@+Ej=B*'!2&05@3-*$!#(/4% #+&U`}L.$#:)045;`WQczO;;*nmcsz_nalZ]YkK4(9)SIThXQ19EMHZ{9F6PZ8CWu/fURGD45IJ195<=:BA#6S6*E/HMHNIA?=9D=:84_ow?EKKOONHCGIKNQRTSMJKOKJILKRaWVPWY\_Qaa_ccjlnnf`edccmvx{{yl}y}~B<7fapHKHFGGKJEJOP\pYBLQ;cjTBAGB@<;wzzvz}ACDFAA??;yzADCC|CCAADEGEEFBDEGCCDtyGGE;qg>BEKQVSU\dce`]]`PHMMF5[IjJhCQP5:<77>NShJnc9Q81;;.d9D;/OL>#05OaA.UM:WYQSGOZ/5 9O4F6.T:*M*;@:2,ZEbbS?;7U9h899:>?@AiCEHDB<=<]eh\BXSFc?49SikcK~HRrYmGBXQ١rĭyprnowS^}xJ\FNKKn58:_E;=]H@V>]E:P55;f~KjSBV5\O5$=i1M@G:_-uIIF@=B?=AoRaWgmXB=:jknkjjnefiiiuR\AWy{}cxJ^Gco|xqlg~aPaOPTG$=)K$6%!& (#J!)J?AD;,9?;/`so<2;86op7=HrMBdNLEZLKPJfjKFBBACFDFDFFECBCHHf>JZEg=JPC^?uV~x`sEZCqmqBKEtmbjd]^fwDTUf|CJFxDO`d\XXe9@ISa\W<@>B@=;nkp;qafkjmqo;sw?BypVUvH[W[SLHGDJIJLLGJGGECB==?;9;;==>@::;;;=<<<:o8onkfgbgfeeejlkjedjjfbgjklnrq:>:<9=>=<;<:>9kgaec`hgfge`_e`fckdgm6[fodbZORamp_9=7gYH7:*H)AALNNRVRT*)'&LI$FDCB==44;>DGHB^NSX[^2_abXQYb33TVY`[[UANUDKPW[SIIKQUTX^\]a1YTEHM^fi_^VT^X_a_\QQW2<6]WW^30\`25Za38;87775ba55;73bcaa133figk487g;KDrl^VZ[]`^3_374463fm`V2123[`YW_`^[YOUa4SLQNKURSW2WVeOLGfbW;6+*=@YQLPSMKONTTQUQRXW\\QMKIHGGSI8QTSNGFE>N_\[Y14493Y2465d`\YYRSYWPSURWVbOYacZ[UTNUTPMJPLVXWU^=9KX]VRU^X]_gaY[^]W]036YSJPN=JBCBMQUBB?CTTHFFGPEGKKBMP[RHHJHJJOSONSWYWR21:D?<6321007a_URROKKMLMNIX4:91^Z_;KKMN]_`ZYWXZVV]OEI@EFFINXPPMBITZRTRKPRNPQLOOQPRMOUOOLOQINPOKLIENWNJE>L/:9YORONRTOPNLNNsIMRSXSCJLMPISWSSHMNKC59CEFHDEDFEA<7ZKWPH',/5?RlUg93197=;2e]QJIIKLRe9;=?>95ae]]]TR3;?@CEE8<:5859FJIB<;<<:;<;:9;:99=>< :;;<::975p335510/130342//11/.1::4/./.'&,--...0+%285.*"  ",#'00.)$# ! !!   !! !!"#!""##"" "! "<#$"#()$'$"!#!"##%" !#"!!#"###""$%%&%%$#""! "!!!"%$"!!! "#! "!""!  ]! %1*#   "   "  !//3, !"! !'%!"  4[-,/*0&&(.26.9:-)04,#0)0)$6.+1/&1( 38, 32.-*2# +  %0  %         +    '    *     + + +    2!+?$ +  >t`<;-("| $ *+,$93  2-  + +  +   -A! "=k.  +35!";D-6#*"#)3,,\)2()&- 3 0'! 1 2mU.) :A>U:'C'4#   %.'1)#*& %(P/M    &#"((("'(.0$A$5$+53!##26  +$)    +    /% '&"%,(09UJq|hcMVTF@EJT`e`YVSROB60-0<>?@@BONG?7/**,,''% 5B<264-6;9/*"!$)-*2/)('"/)%#"'(7:.,2  BOMFAHE?=667:@GC?>KRKFBKQP{smifiSGPSX\VORG>,*#*-7:!%&%%$"! ?5*)UL?,(>)'#-,-,:888L6\oxtinfHO8:=E:Xkt>CHJLLHEACDGIMQSUNJMMFDEJMVd[TLRX_cXighjkwvutlfijmq~Ů?7/VUiGMKJJJNG@EHA@VC0%,))AB6(1($).6+22.+&+31.+17+289;>EI%$&&11##$&! EFE@AC$%''$"! DF%%%&GJ((&I$&'(((*((('$%$@F(&$71!$&)-/,-266:8210& "# ($!!1"$$$' '#"$&8%)#$#+*'))&"$%#$4>:)1%!!5*,.+.,(%&6-!%!#0-"'98;=8(!!$! +##/1! 6+# 0$5 ## $"*!0,#2%'(%)( .1-.%'* ! $!-'%,$ '),!0 !%)*&$#)  1aMohbZRQOMIFN_>GP1(I(*=/9!!-$ScTLPQQ\Za_X' +--]^./+B,)A=;9H?>B=UW@><<<@C@>=>@A><:>? 9 ! 79:866365444787844764369::9;:  ! 751331643420.31528225(4941.&(06:0%# 731,)(' 8.)""*74<;=>>78+)'%$$$*#$(+02/%%!$,02+%') $($$!##)("""'((+/*))#%"$&,/0,.)'-')),-%&**)(,)+(+/./0../1232+'@:.()))++-370%(*(&+**(($&,'"%#!%%%&('1$%"02$"$" +%$((&%)(*+)+)*--22,(&$$%&0+*+)&"!! *')''1..,,)),+&()),*/"&*)&(&&$*)'%#&$+)*(,$*/+'(,(*,30-./.')''"&%##$'%&! & !#"#%,'##$#"$&(%#(**)#,,)&('"""###&.+)$"#"**+)*)*.++1("#!! "%,&'$!(+%''#')&''$'&&&'%&)%%#&'"%&&$#"&*## !)&('%''%'%$$" #%#'(""$%!&'%( #$" R!" " ! ! !-'.+((1+-")1/*'&&'%',/3/.,'&~} ~~~~}~ ~}~}}~~~}~~~}}}~~~~|}}}||}}}||}}}|{|{|~~}|}|{{~ }}}~~}~}~}~~} |}}|{|||{|{| }|}}|||}|}|||}}}~| +}~||}}|}~}~}|||}}}~~}~}}~}~~}~~~}}~~~~~~}~~~~~}}|~}~~~}~|{|{z{|{|{z{||{{{|}|}|}|{|{{{||{|{|{|{|{|{|{|}|}|{|{z{|{|{|{{|{{|{||{|{{{|}|}|}~~~~~}~~~~~~~~~~~}~}~}~} |||}}~~~}~}}~}|||}|}}|}~}~}~~}~~~}}|}|||}}|{|}|{|~}~}~~}~}~}|{|||{{zzz{}|||{|}~}~~~}}}~}}|}}|||{{}}{|||{{}|{~~}|}~~}~~~}~}~}~}~~~}~~~}}}~~~}~~~~}}|}~}}~}}ƀ ~~}}}~ y@ƺλ灀􁀆숃݁큔LJލ΁˄̵颃ѱՀƿ󆏈ͣՆʍ܀ߌ͖͐Ʒψһͺý˜؁ʡ羰ȱĵЊٲŀ̲֮백ف꓇Ū㲄яҊᧃ웜Ǒݼݣ݀ɉق⼰Ϭ؂삕Р͘ɰ»¸ז㓖ϲĴ̰܃Ű㈉ǽǪ󄇉ڰвµ݂ɾúտɿĴӦÿꂂƉ䞾Ѐ逊Ϻ̕ԣÅ􂆆ȌשйϕѾ朓Ђս̾柺ܥǸ׷˴đŷճ̴ıϊ돇ȃցߕ͑ቂұĎ©ǐֳǬ۞ͻヱغ൤ܳﶂޏㄒ٭ιЀױ|ɵđ緈˼ŭ􋙝軙΃ŌبӔÊۧ̓í曠큶گꅆߙٟڞҰ򀘖㱗ΦӛŞ˰̓ދشɨNJ񈺼ÀѺْ팣э֚걖ߴ輙Ν͋񂋏½铺ٱڄ჉년˾ݻܩ쒳Ԏ͹ϳ̫ǹꄨꃁ􃇋򃐌˽ӫ܏ɸø¹ҼրϽޢ׾¹ıʻŽȷȷѹƭĿƸƻʻވȽˮȦ˻ш₈޿?Ꝥʲ:775gfd_`cdfed[[_bcbbde^UXWUSMRehefe4:9<6^[Wdj7ak:=@A7:=8978<;;7>?BFHGBBEKHA<:;97663589::?A?ACCB@>>>?CCA=;;<:9::889876789:<;;<;:8:;<;<>;<<<>;:;<=@>>===:<DJUXXRKIGB@>@BBB@AB@=?DCEEEFCCCAAADFEC>?DEDCCEEDFGDDHHECABDEFDBDGDCCCBCEFGHJFEEGHJIIIJJKGGECFFEDFHEEGFEFEDBECCCFGFEDEECCHGDDCGEDFEBAA?A@@=?==CFAA>>;?ACFGCDF;=;;;A@FKG>BGEEEFGFBB=9<=>@PHDCEDBBDBA@=?BD?ACCBDA<=D?;?CBBA@A?@A><:9<=<<:fj8;;A=@A?B=>FB9PXUAXge:ngm[him?;f_m:VQXcfe:99cb98mgCj7:=79oe=:l=:qc;=mjod6B9;=>>@?@><7/1559>:53/WV\184232X&)#!)(. ,M-/"6%Z853/X..8@A;?7/64/633453//4=#I!"1940M3=%6(*#"'$""$%!##"')(&)%"+7$-.3,'4816:+='391=,A8,6&+50/)H)KFAM5;]IL&2/&666,.,' #&$ %&&$+.*#&%")$ ! "q`kkg{R:P)77jCpOeYzFHzV>3VXioxkyr{qN>cS7H8H:PUg5wHNA:*EN4auUPUEjZL'Q:DA?9.>YM5nNN4dU9(,\ACV^\xFXbN_q_bzdSmp[rmks`nqrOjZ`~k`zcw[]_z}bty_yjaijZI^`*Iq@@6XK:@?9N7,-0,;//C=CG#&#,2BAn65?A-48:84/,$",#/1)/(%@=;75:9>>AD#87B7-;07HA+(*&++%&8O2)'3)) -B&114%,4)"**8(D=%,3,'(   )#!632,$$"*1+'%',6! !'#$!#%!""$$%!!#! %+330100-+/1321-*.32516_OeAAM]_TQWXUTX^_XVrxmzzxo^_xygervuz~{{=zpoqvuwx@ACE@AIKF=/-*'%)MRDCIG>BFHD7.3>ECA=DJHACDF?><ACM/SCT654891_eea_SSNIEFIGFFHLORYQPJHHLvlpmp]dghd`_XQ@;366:EFBEJNJKNMHE=3-A?5^Ic=@6+3;CLJGOUVZ^b^^`iebbfgju@FDCFB[_i=`uAEDDEB?A@CAqqrsvsvtu|AEGB@@ADHGGGD@DD>B=s;BH@@>ECFKOYWLDFY]ad``]ONILHMF<[wrM2Wf[DjKG338@[7>?9[NaN2@9KF7O;@CLQ><JBP+2EA:E%-#A4-F?1>:<:82@dela]H?AK<.8-.?0$>D@05J;DE;XI+ie\8257a79U2R^8@DB>CB>ACDBgY[{|XmW]djiNQpWMFvcN6HMy((%+ !'63,GNR[MpJXF.3[VWXE:8j\\l>GRIUT~azL?DKT`fTEDFGGHDCFHEABABBCCBEMgf^C^xGYMT_njmmNRkModMChpYwNP_j`fsHD@iP@EOwSl{lQfDpw@EEHKEBIPTUQURICAJOUMGAGQ\=KWa3S^s>?=<9niedgdfcj:;Y8<@D>C::BF>=>=@?;;:<<9pfbdbahplmhfbncd`elkom8rf`\[`T\de_g;;>I?>98ge_VRKA;^VICM4*D/O:I=W0PPIK%%#DBFDAA><459@C@E1K_Q_bVZ]^RQc_XX[ba]3^^ZZY[OPEFMQLFBGJMV^\[]`_]RbVU\[\\_][XURV^]VWURY.@2[\[[a\333e]477<8865874a6;4cf\beb65hhb4<9iCMA89eUW\b`a\`2443acef[Y2^06c_WY`[_WWU]a`YV_WRQSSUZ_\]OROF;ID:;8>AWR3GVYRJLQUSRNOPRTWURNG?>C@TU\^\NBGDP^bT10657904978e^XXZWUTXWOLKQJRWPV\ZUTMLNPOPRPNNRPTU^;;^;Z`SZXS[WVXW]]XT_543\QMPVKNIDFRRMBCLLYYOIJD;AGKMDGMRQMNKLHLLPRURTYYV][6>F?984.\151WQNVOEQSPMRSYY5664a\bPU[TUZbZW[eh`[YKGJF?BBEIOMSOLALOT][VPRVSQPOLMRSMOMLMLMNOHNNJFICGYX_PHHHQ23FIMHSTRMJDOPARWWUN>HQOROQSSTJKNBLA5?CDCEDFGEH==YGWT0(-46@-o4551396B<`c[OQOLLOe7468:73c_dWXZ_QSX==@BG>530;<79@DHDEDC@@A?>==<:@?=;;<;;<9:97:4220/00244..02211350,-,.,&'32-00.-+34/2  %L !$)131,&##  !""##$"#"" ###" !! !##"#$"#&&%#"!$$$#!"$#""! !#$#"##$&%&%&&%##" "!""#$!"#"!"#" !  ##""!"! ""!! " "! ! !!" !! !# "!" """'"    l" 00'.-!,20207.444507+)*.00.020!*5037.535-! !_  + + +'$  *'     +  +   +   +     "  +  +    + + +  $#% >.R3C: V& +,+ & &2* !&"!" 81    0   +2,  +6,@%., *7  +  #& )4'48+  */ = 9#,2#%/+23 $$$,,,.'!$ &.D:e<;0G5$&$!6* + *"*.19[$(+'"%  0.-%!#&,+,6**'")*>2!  +!% #'#    +  +    2$2!!!/"-5C4I^`\ZPH?EG>7*+:DHUhd^XWVSD8,*2212401:D=8.++.+*% + +G=65.*-./) !&#"&*+%'*+&'&%)( #'*),.&/ >GJLJ>?=:7:<999:>@CF?B@>AHpfebgXX\^YXVQF3)%#!+2/0396457/-*(&674[CW46,!(.33157:D%('&%(,4 #&%&!$@?=?>AH'))%#$%&)()+(&&#!# >!%'"!!&%&*,2.&"$137:73.$$!#"%"+;9&'1(,#$ !*&/(#&!')$!+7*,64,&/#/531,!( "" 1161."!("&&&&3-%)"&+14%!!+%$#* &)##(* '%+ &3*/1$!(% $&&',+&')*0!-.'73dt}EH3.G!'.6)' !!$!8" )(,%5.:1,*B;P*!<5AEEFEQOMKLLN(NM,&BBH`fqM=05AT><.-=,)&DN6(=  +  ,&/+>$#AB:9))+PHHU4?C58T0QCY<3;CIQSH><==?D??BA@<>?>=<>;@..>,CB5,CF9P8:CJBDNW0+(B2+.7J/>GB4I5Y^156:<849?BA;<:951:;<9405:?&.21+/< 986597614=>=148#$2#-/.,$"!"! !""#" !"!!' ""!$ ! =;4:>=:"9:773365667<7755445;7=;377568! ! :413215:88642945047687920--1(-2414#42/*)'"/-'$-*"A/6*912*,&&&#$&&%"$),.$!$' $)&(),&'1.++()(%&($$$% !!#(-.,,,*& (%(,,-,.-,+)&&)+%'%$(*+++-)/*002,///00-3$,$3(()-+-*,-/12,)***'&+(,&)'*++(&+'"#&''*---%('#%$'+'"'%")+*%'(++)'))+,//,("$#0101/(# #**$2/,--+)),+'$"'!')$')&%&$#%'&&(&&&''()-/,/&++(*((++..,(,*&%'*"$#&$"#")*'##  #$# %'(&'$%#$%'&(&)++(+'((%%+( &%$#&&'%.+.%&)$%(,'&*360.-%##" !%#&$$"$%***&'*(&&%$%''%&$#%$%'(!&&#!# )(-& ! $"%"(''%#$%%''(&"&%&%&'&'"!#$   !" "+$.-%*22+/-'*)&&%/2.0+,-/(&'܁ ~}~ ~~}|}~~~}~}~}~~~~~~~}|}|{|~~~}|||}||}~~~~|~}|}~}}}~} ~~~~}|||~|{|{|}|}~}|{|||}||}}|}~}| }~~}}|~}}||}~~}}}~~~~~~}}}~~~~}~~}~~~~~~~|}}~~~}} +||{{|||{|||{{{|{|{|{z{z{}|}|{|{{||{|{|{|{|{|}|}|}|||}|{zzzyzz{|{|{|{|{|}|}|}~~~~ ~~~~~~ +~~}~}~~~~}|}~~~}~}~~}|}}|}~}~}~~~}~~~~~}~~~}|}|{|{|}}}~}| }~~~}}~~}~}~}}~}}}|}|{ |{{||{{{zzz|}|}~~}}~~~}~~}|||}}}|{{{||{z{{|{{}~~~}}||}}~~}}}| }}}~~~}~~~~~}}~~~~~}}~ ~~~}}|}}~~~}~}~~ }ˀ~~}}}~ ƹ֯ܽĿճ܁֞祀ڑʇƄΩĠǎڊڝ¸傢ùϡܟݤØ݄Ǻʸó򅐚ۑԀ߂֦ݑ铙٩ܟԷِϲ𞃵Ā䏅ܻՁōʂԚҢӡި歩ģꋛˈϮƏ뚑ˆ좟꼶рòрعȧܜȱֺ׍ǜ¸Ʊ͸͸Ǵͱ煉üɶՀ´Ϸว炘„쀇¸Ȼ»ـ˙זȫׯɽ탋ź뺎Ù׳К燭؄ȅҬ׫ˍӕȔǘ溧ㆢ›ݬ啅ʫἃ̷ʹƁް֗Ƶԗסڀ蛁ʆׄ˒Ƴҗ̰ɀ񎊇ȹ탆𡮞ȿʵѥIJȳɼʜ΂ɒەݸӱ޹ėҎ끕ׅٔΨ숂Īʞٻ¸儮ꒉ鸵蟼ٲŜӯᅮ텂Ž̜ٗ۟鍐ζюߔɵ˥ƅҐ؜ΙߢԾ󗡑οϯьגƀ̸씣˽湽׃쫡􇈂ۂʒѼøžDZèఛĿƺƀ쑙ƨ뎒ӸȾҺ·˻įĻʻҺ녆ǵ􉆌ۄƽT9865gfdcadffe__b```bdb]RPORSR`]aibdaehabcb][a]_b`m9>5d547747988;?ABABDBADEFHDDA>:8798s99:=AB@CBBDC??@><;<;<;:9:98:99889;79:<<<>=;::778559<;8:=<;;:;=>>==:;;:<;<>ABDGIKFCBCCBB@ADBABEDED@??A?@CFDDFFECEB>@DCAACFCA@DFEFJKHHGFFDBCDEEFGFGIGGKILIIJJHJLFFEHGDIECIIFGFEFIFHICBEGIIFDEHKIFGHGHHGEB@CDCB@CEF>CBBEGCCABA@CEECBCBAD;@EB?;ECEC=>@CEAABBA@>?DCAAB@BE@?>:BG>7>;7f7=<;:>;8<<>>><]SUONU_9mhX_o\acWZRWp?=>:70148>Am>8540.1019530\XL?6! %4&A%.+;*!P56/20649;:<64673.614324376&*GN=5=4HO4dsv>DS?@oa:0=GY\GsERD%0fD2yx]SRap\Q__|a_\A0/K6C2?;3S0!&0&/KE20*(=,!%..$>KbUA)=K6'8"570,).("%,+-:E9DA7/9A!I?%1XGN=.92'J4.RTKQG13DM0&2'"""9/ K>GQMGNKU/-H&70CKBb93- &).10-,, " "456!&(%)'120/(,.%)/,//+/,2.4.EY<84/E@3;:G,VZMKPWTS.10362/W2cfWJFGAA>;CKOMGFLROIPNTXSjnlhaghihkaE]V43<:?>??B@@=976-NMBIBD:X478@9-8BKEHGHFKWX33^LTlik::?BCD@kif'?7,99VPUXD3.W/0C"4,Q<%F0./1+* %,VG9(?R1:XN5C$/@X^BQ7($L;,,1AA>P,EEJ8A09+4EJBM;3W84X:YN;J:@A9sT7KCA2SW;;@557A1862H:1LE98pPb<-z@qdEP;+Sc]KcHlDiNc<;`\MvHURyF[eec]d~kqhSg{WXyteXn[^r}leWcD4knkionbOSgly>:kjmoqkbnpn^1=mXZVdIj>G;E<(O13B,' {8E6>JjzD\aB2%`:59e8=KIJEFK`ZAVE@CGKTMCBCDLHEDGDDDCBABCBDD?AHPNT=>NAFqKQ4=GPPC?jgXaEOW_dnqsAfP\UwGgKBIVZSOGBHK]c^VQH@dXY^^][XWWZc53;Y7aFd:;=;qfbfiaU^Ti`[]^[bl==CC@=@of]UMD9aRE]N)*?-0>L0@'!%HHGFHGB@A>A?507?AEFfpGJ]^_UKQRXXU[_\]_W\^_\YPQWE@Q@NT>;6E_\W_cde`YZa8`XXaXXWZ`[XXTRPQV\PS`4>4Wd_WS]>45dYd3bd8:97<<6k89eegbab25e9983;96HJvhig^_]VX\T4d2_\`e\b^`_\_61Z\[]Z_][\S[b^Y]Y\WTTWW[\VSTTSMrD;92QKSj+RMYVMKORTSOONRTQRPNHC;EEY`bd`PDJLMZRf2473::9753\XRUUVQPRRQROMS[_\NRUPJEMMKKTQTQLRRRSQY]]C]UW\Z[]ZX`GOYX[`UZV[2WPEM@QKOYUUNA:KNZ[QV[G>=?GMNJNJGEPLROILMQ_ZVR]WUV44=E8<72051[UOOLNRRKNST[]Y87651``7gcQCR^_X]bc_YRLFFF?=5BGKLORNIOKKT[`^YYOPRNMOSUNNOLLIKJMIJKIHGEDTQ_UIMDPM^YVMLVMMHMBQJMPORVMBHPNHOMRILNLNKOL89FGDFCFFEFD;XJUIP&-<8AJlc2556=18<6cgRKPNPcb54643cY[^f[]WOOSU3?<<)GD971`3125<;=<=ACEHFA@=;<@>=@A=:;<==;:988O121.-.344123101121/*))+,,0-...0.02.0/1--0.-.,4.j #$%'%&"! !! "! !!"!  "#!!"#"#$"!##!"$"! #%$$((&&$###!"!!!"#"#$##%""%$&%%$#$%&#""$#!#!#$"$###$""$! "#%$"!"$&$!"#"###!  !"!!!" !$!!!"" !        " $*& .,*-*&)/64,29,./(,&)92,84/"$* 00 #/2.+|*/.3&"  +   +! !*!"%5>@"* + (  y +  + + +  + + + + +      +        +1+10,56 ?C)F-, -8! + .&+/%%! -@  + 5 2<  &K&"    ((-*) *  + ! $# $ 4"$+ (! !" * ,((,,!%$+EG!.*%-$"/(*?"1,6.;6-D 6- + +" &6HE5*.  " %2,22( '-0*$6)+ )%#<#@98><&"!  8/;@<3<8B%"4"'09V+"  + + +    0!1"*1#4>O]ZYPD<640*&,5@AGA:4'/8=>:7/,%#'0)()   + #JL0*(&''%&&$'(')*)**('("(($!)45,)*,**7"BJA736141/4;=:43;>=:AAHPP~da^]VXYZX^W?VK)'1-+*0252.-(+/&@<9@;A9T//.5,")17245>AELK-0WGPdeb69<>?B=kg]7CF>7;GLLMHPOIMJHGIMRRKQWTW\ZVUZT[\U[i[bcgooa[`bkmx~|sljkzj[eizMLKLKKEDDF@>E0+ ($1.,'42(/ 3,!E#'1=066979=9422356;><:B%#$!<@!#$#"@&GG&&##%'>!$&$&%#""@=A%'%&%B!'((**)&"!9A"$%&'#&(*+/!&)+<=;6/)&#"!-%!5430 ,3"&!"&("#.$"" "(.5)$ %   +#"!"$! !01"& # "/$/$ 3$!'"$ ,/"!%"%$/+" !3&" '" ($+3)!,"!&((+ (3"+%IXbwCd?9gkgopa^]ZZWRONNQQNMI"#5'RIWeMOZbv:6,K_`aCzSXS_YA431($%3(D=()F:/)*'"!3"3-+ !' '!+"F3FY*--## -"+>$:/ .DI8E5fR*L3<&'?=7L/88M.;2!4'$7308&31,( A)(%0!/? 5%(*6D<*??>/=#@EAEGD=.2?CO*(KGGLQPMb^vkW>/&=:9-@6.>"H$ +#  C">X2=E/ C''.R,2><=<<7C=/F;9<<;=?>@@<:017899:::9976@A;>=>A?:<=>9869#@;745<<" !"= =;<;49455787::??^5256789,*9!1-.0-27 !" "82,)&#4,'81%!%18!((''&')''&#)*#%($%/3" &).*&((++)*-../()*$#$!"&$&&"(-01-)(+%$'.*+*,/,+,*'%%$&!('/.)%+.*01272230/.0(*@775--+(+,'-,,,/+.-,,(((*(*)--*+J&*,+()('&&')*,.*()))(8"%)%4*!5(!*,'%'(**)))++,,*'$"%%16562("$$")#0/+'***'&(('(%%)-.,$&'#" $$#"*')&#)(('',.-.').,..,*0#%++-1(*')*%%'#$)'($#%++&(,!!&%#&$"'%(&"%%%-+*',('%*($&$')("#&&*)'---+!%++',10.+'$""""#$%&$!$!!%)-/,,%&(%%&((%&%$%"$%&"$$""!"'#-(!#&"+**%$+%$!$(!$%$%)% "&%!%$'!$%#$#$&"b"!!! !)&,(/)+1)3(.2)&)$%2-0+.-0./+'(('(؁ +~}}~~~~~~~}~~}}~~}~}~~~}~ ~~~~}~}}}|}|}|{|}~~}||}}~}}}~{|}|||~~}|}}~~~}~~~~}}~|~}|||}|{|{{{|}|}}}~~~| +}|}}~}}~~|}}}||}~}~}|}|}|}~}~ +|}}}~~~~~~}~}~}~}~~~~~~~|||{|{|{|{|{|{|{|{z{|}|{||{|{|||{{{|{|{|{|{|{|}|}|}|}|}|}|{z{z{|{|{|{|{|{{|{{|{|}|}}|}~~~~~~~ +~~~~~~~~~~~}~~~}~}|}~}~}|}~}~~~~}~~~}~~ }}}||}}|}}}| +}}|||{|||{|}}||}}}|}~~}~~}~~}|}|{|{z|||}}|}~~~~}~~}}}~|}}||{{{z{{{|~~ +}}~}}|}}}|}~~} ~~~~}~~}~ ~}~}~ ~}}}~~} 쁂߳새ϝݱӌڂ֤ꁑ̩馲ƺꏐƣޅψپδȀ򧷄Ò̘헕²ŧȽϽķσΧʊDŽʸЯ񨈐ʱυ灂ӕñƬͪ嬦ӌçÈƅߟԇ٧ոɵȠ̔ݜ堠ˆκӒ޵ˀȄ߀Η߼ҴϮͻ􉔛򥣗dž϶ٲʕ˨ϼƥɆ򅋓ȹºعǴ􁀃ꃎ´ĿĩۀçĿǒނƨ샏􋔚ýǾȖ䰛󚅐Ŀ䀆·򖥨ᐌɸ׳ϕ¨Լ̱ٔšÁފݎ֬╈֬Àܡ莻򓸊鑫ӻЦʽ̀$ɼ䶩Ͳvݵ७̹ʾÿݮƺɜƅދඛ͎뫚ض;Μۼځ͹١ʰ쫔ϜֺɁᑣȠϫьֆז澞ȧ㡆ӷ귒ŀ鄗đּ̈Ϳ偠ӍؠěǿӫĻ탇􃌂뀇ǙȨƴü¼ȳȷ퍹ܨƾýҀȾ̿ζȵкû礝ȷ򄂅ĮIJƱǷ˻sȪ½͟ë􈐒з턏νЊ󉐗ͽQ76665433g565i`dmeca`fcbXSYd_UVWX\___fb\Ye6la_a`9phps:hj56857>?AAABDFGCDDCC@<:L<868<;=@CC@>?BBAB>>??=;;;98:99;:;:;;<;;;::9:;:::;9989<<9779;=>?<9;;=>::==<;;<@AB@DEECCBCA?=>@BDFEDEBD@=AHEEDCACGF@=?DEDABDDDCDB@BDEHJFFIFFCBFECCFFGFFEFFCENOPLJJKHHGDCEEHGEFEEGHIFEGHGDFBBEFGHGFIHIFCGGEDDFGGUDBCFEEGEHFDDDEECGGGBBCCCEBBFDEEABCECCEDBA95AGGEEDC@@@A@@@ACCC@@@?@@hBCF@CE@EFGPOLBCAAEDCDCBA<=@<:=i768<99:89:=?gHIZZZbeOQW\lo`ifjkli]YR[f`Xg=iWcA7`89:?fg<=77nkp=>;pl8:7:>8;>=<=@><86668<=75533357631..YW]dK9<25?A4)3*'+%R5.14<:535:668622413122;>4G;7EBFkT[W5-MFgl2/LA8P@1F7V-YR42!#*0) )"'4&?)'#("C(%&*/470:,P)@%@;1,#-27'&#*-=+4.'5'1##-'-1&&?!!"" ' 1+&#!#"%"Tq^bc]KcdA9)+qmY F:qxkM{tfX_frfUjvrMYUQ2:5B+YA9g@_UOZ+HPR46>7/JM6]/QL)38CTt?_KAMCQ:J7HiTiU~_ZJM<2FIpkQ]o2/G4J^/H9yWS=I7_]_1\|BUY+2I,':@H}l~k1^aWVSv\tr}be[[uTn`DB]{b8UnQpujc]][nSpu_b`dm^}^;;45?;45\C-)&;IS@0#;1+1.!;$*,)C" #5E/63:!A=;3($&)01/#4>(,/(;9;7B@2A-=E7273@FK106.3Ab1+2-47#  !;'32aP\-\X\44=6]:&:mYfnrbK)   !)0/(%&&*33002$-#.62./-))(-+-+().-/)BZ3-Y1iky]`ZVZcuuxxxvz;twz~zroz}|ngltu}IJEJEyrsx|}~~AA<>IMI>630.,%>KUJ>BEDB>JKKJLHMTMEIGC?@A<<:>EO0/*,-.00034553521001YMJB6CCCHIEIHCFFHLPQMKOPGrgml465efaF]X[111XM/3555041a[VVMBD?014:BDEDKSOOTV`[e`c_dai>DCE@;cc;EHA@JPRLQRQRLNAIILQTUONMTZUPUWX]_cc`^\]Wajnprxzuxyy}x}{~}sihmQMNNJHEFIIJQ\QVU:b\H?6SBY:?3BCIBAISTOHTa_\\cge^ZUORZY_gjm=@@EDAAGKGE>>A>z{@D?@@A?s:@A@|CEDC|q{EBEGEDD@pHHCFJGF@?<2E=P8!,84%MP0;E//+@R2$"1>00r^G?F[@4MV:<;e@?dmaE=;4I3c+508>V5G0&G@@IIU2R=81&B2T85OX6MX";WfLA>H>6726Ac6bgjK>FLX`GK`WU9LH8X*QiYi^mhbpY9OLIQFZ^hRgmgz_{{dkugWTRvsvsoVqlkjv}zu\PrI;SCShn^NB`=\VSYg9IaxB@;prG`CTTgdjOEeNBxvojjmlieacc[WXXVZ]\[c`i:@GLZC9\m:9qjdaYTPX_^dorbahed[]\`l<@E>>@;D@MJLRORROKHCBB@A??AGIGEBB>@<;A;swqkmmps;sq;=:;;tusuvot{{~}}yqs{{yBFwyx}{}tu@@CCECCCFFBB@>??~~viknrytxxnbmlr?ABCDFHJFA?>><<9:97:;<=<<;:9K/5/49321/223-,062+*+*,/003/-+03/--,239812 y """ "#"!!!"  !!"""#!" $###! "%# !"!!"##""#!!"$$%&$%$#""!$#! "#$$#"$$""'''%$%%#J!#"$#!#"!"#$"""##!"! ""##""%%%#""#"""###! "!!#!#"" !! ##" !!!" !#!!" !0 !  2  ")*%-0%&01./1%)-0790656743--*,3/+23'-+-/74353!$"    !8 /!&$ #1- +     + +       +   + +    +    +& NB8B  !$! &$3';  /0%& +  +   '0.2  (C  - 4!,./ % 6! 3, , %*)( +)+5!&$&*&A(*052#4 9'7&1U/1,0:6.0N1-9( + %&!, ')& '"#&! )( 0"%'9CA$ 8[! + ,,S@H'KHM.,2*M+-_]kzu^=  +  +     )#'#%- %237DOXQLNMH?7500++)288:6/))57CC@:1)%)/-2314-"#%&('$!  (=8*))&#!**+*+'*.+(,,($## "!%&+?;5/"03465354./027<=<;`[6AE=:EJOLONORLMAGGLRVVRQPSYSV\\Zaenkf`^a`rz|~{~m`ahPLLNLKFEGE@96H*,/!:7,'4"4$#$%##)0,)&19966:>>850-0668<>>"##$"!#),('"#G$"DG%&$$%&#> #%H&&$#B@D&#&'&$$!;'('(($#""!!>D(*)((*'((++!&!%7CC5-& /40 $'#**((&'!%!'' 3%"(&&%!6-0* '$(#,'*!  !%#$!%"#%("#( # !)&";1$#.&)1.3-!*% ""#%#%$($&(, -+02$"%*)"++1)'%&+*-"*DOc% 4 ""14"+.!"#!13/-5:2?F'$& &1$6#%"%?80""+/EeHPANRNT6'315<6<9Cb:UVLI(@03<%%5#(%(4'18"%/4'#2*!5 &,$#)&#(>!#0!!#"!$%&%''%GEBAFIMOEvg[~rl/164<-5>@(.3)=#/ , >, +)=#CB&Z=A?=DGFDA@=>@DCDCACDCEB>BL9-=;E1MJHJ'-:*5?B:0(;%>=@HR-6AN+*'FF*7%.089?/+YH:2^`\XZ[[XUORTMKMIDEFBAD>A$+.34"3< =954/-*+.+0<>56954.0./7 #$!%#$)')'$" !"!!#$#$!!"# ?A>;;9::<;;==>?!!##$#$%%&##! !"EGEA89:A<3:8< 6::3045/.//1246!! 20,'$5.$;'1+*02750+,)&'('*),))'''*)(#/##*#-.,)*))-.-*,...--.-/-)#% &"#,+0,()()(((),))*('('#&(.'')-.332-1 !7 8-./--0200*(!23/1-+,*/+))-().-..,*'(&.,,+/1.+***+*)('((),')*(*.,,+"<$*&- " ,#***),++*())++)%%!#)-102&%((+&,(*1,*')&,+)(&&$(&"'(&"!! &"!&%*('&$,&*&*)))'&%),*.00,,.,+*.1(+(-,("#&%$),)(#!"#!%!#&(*# $&''"'(&%&&(&&)*)()))+((%'&&#*&*-&('*')%&&(--/..-($  !&"$!#)+$%')-*''(&(''(''%$%#""&$""! #""+%&% &(**,0'%)%$%'&$###$'%!""&!"#$#$%# ('&$ .%!-)2***&,,+&(-1/20--)-0..1+*&(*&-,* ~~~~~~~}~}~~~~}~}~~}||}}|}|{| ~~~~}||}|}||}~~}~~~}~~} ~~~}}}|||{{{|{|{| }~~~~}|}| {||}}}}~~~| +}}}|}|}~}~}|}|} +|||~}|}~~~~~}}~~~~~~~~~|||}|}}~~~~}}|~~|{|{|{|{|{z{{z{|} ||{{{|{{{|{|{|{|{{||{|{|}|}}}||}}|}|}|{|{zzz{{{zz{z{|{|{||{|{|{|}~~~~~  ~~~~~~~~~ ~~~}}}~}~~}|}~}|}}|}~}~ }~~~~~}}}~ }}|||}|||}}||} +|{{{|{{|}~}|||{~}~~}~}|{z| }~~~~~~}~~}|}~}{|{{|}}||{{z{z{|}~}}||}}~}~~~}~~}~ +~~~}~~~~}~~}}}~񀊁~} 슆󏅗򒝟􉛚擕ハ߷ǠԶڇ蓊恗ɗτ笝ȍ֓ɔ񍈺ш퓍ƨ٬DžбƵ̭᎝ր䭚˵װ͘վɠij겁ԿŻ넕ڧɕπۜΔԃΔӅ͗´ԟŗҶ”ѷ¥ØϚ蛙ᦼ푶駿】܂ݧᗨϓӧĈۇ”Ά𙦽ġͯ끀ÇؐaЏꉃ٥̬´Ⱦì灊脗ЅǾ⁂醄̼ƼѫȽҹ€煈ۼ䄂偌¼ǾФ䃊ƢŸ닅Ӻ狅׏뺔僎ߒĽւ讪Ǩμ򭌝耞ȣ啍޿âӇɚ̨ý҉狝ښεߞӭۖ涠؀…Ԣ捞ܸ̭҄Ϣݵݿ쉉ߺݨˣ吃将̀Բؑ·ԯҗѨީ̲ăЏᲝÒ򁘭攕捻ϼ޹ྶȜ͌ȉͤՃ͐”ϦŇ͓ǤθГήؼ퓦ᾼ׏ٖԾ؉ۼʺſԼ󃂃􀅂򁀅īǻÄɿƷϻ戀򂂃񂃂턂þʠŋDZɽĿôӀ׽ӏȽ˸ض˽¿ވ⯡յƼ̀큀³ȾǸƻ}־νۿ̣ʲ:824445565665eZ]cebaacb]_]c]VTY_k_X\aa`NRre98^7<9A=;fhf`:69:>9569;?@ABBCFCCACGEA=::88:9:8689<:9779:87::;<=??><;9::987:;>;:<=<<;7889?B?=;:>><=><<<:;<<>@CA?=>@CA@ABB@==AELJC@A>??CC?BA?@@CB??AGFDDEIGEFDDBCCBACEFEGHHJFCEHIJFBEEDA@IOPNKLMHIHEHHFFGDHIHDEIFFEFIGEGDDGDEIGGHFCEGEEECCADGEFGFEDCFIJHGA?@ABA@CCCGEHEFDDEGEAB@AABCCACA?m@HEGGACBGHECJRE?AAEDBBDECDDD<@>=;7=kcXd>LK>l7=<>899<=989:<7558;982975799565320.[cV@1.<,[R(S6)$.*,&7#0HF63':-J8HG98093#!## ( # $$,G(A',((.#A)()+/2)J7?,KP76>;30ZNC,5@6&$$*2<%+'*&)'9/%":l<1*%%#322%+ +8&#/,# "6TM?a49583nl2r`zYlqXHnraQi\q{^g\wt{vknM]^uT>gfcv^ZckKvoylrw`0e<'',,/753pp=I('-=XO@*!'/49C=@:5'' )6=A@A< -8!!:3&>28067+A%$+-"-)AT8A"'90;aDAS?JS/4Tz}]. "'.1! &#+95J*(L'>>:$1113(HM*J*(NPUb}ax}tt|=;:v{|~whzrfkxvqqsCHFEGJyjvAAAtswv~tjAFE7Z)%$$"KMOD9@?CFKOTLKIKDJKEHGAA:;;>HR--1101/010453351//21/XQRG4.UKFGKIHA?HPUT[WZU[SIie410066lS.c`XQ..PCFVV].VTX]UHNNOVTR/$'-.*12>BDBKKFGBB@z~{@C@ACBBCJIJJDHGDACJ?AB?wx@HJIHLONLJOMQRLKIQ`qpjZA;:X]?:O95FFMPXSK?9;:=?`Hk9=2P8.->G24199099)NW,,AXTIBD839X44_?CsIPIWWPTNA6S<@'B!>sk;nqJHMGRKEOZ?3FBFF5WC>MHYJFXF2A=H '>D8>>/3AJ=D-I@2 >;JSf\@bD>7L.8;-1?4)53FV:%ER3=EOOK]>GEGGIJHHCAAA=97[N3Tgdv]t{{xvvhMYOaP[V|y{zuqcɪ ~}jrqecYVSai]}_UNP_SOVPsZCT\83B@?@CA=;8bdWxqnWS1bVMijSFID76G;/2x; 3,/&& {uRQC^`]O4[OaeAP^A=CCHDAFR@S@XPMQIHJGDDYFB^VNIHJUSMJLW^MN]aSUZTWUYrjokEK=[NUQO\qt=@GEBT=SXXWHnH\S`>Vlnwt=T>HRO@PfXGz`\TE{ukhd`]\YYWT\_gv=x:k9JauAAQ>Ulmnihc^_]RSbetrqea]chc[Z]aYaq?>=>=A=GFGITNQUONHEDC?AEB?FHCAG@vxxz{{{t}@@?ABA@J}@C>?>p;?BDJ}vsx}FEHHIEEyACINLOJGJRNLPPHCFH~}uy?DCpyzv?@=?B?@=punhheZVZa`\YV\i:<;98n`QE7?Y:(')K:?DOPMLHFC@><:77517557@?T5:ROSQRT\TTUXSNKVcb`[VY[\c4a_f^ZUYMECHMJLNTUWSW_/Y475a_ZYUUOLIILQORTYZVUZDS]W[]2<1YNTZ85fbb\a`665f7>:l@:5__43243ebfc3b4f;E?gQZZ]]XWSXZZ[XUX2``a3_XX2/Z\b_b\cdbZY]Z]ZXYWTVYWUWXWT]SNPKiMPA"Y;;DEFKJSUYSSQTRQPPVRJHI5=GJWOUP_UHSYZTW_>8I8;966b[TRV\SXSSMLRPMLRURGQJILSPS`UHPWSTUVTTTXdd]TRPST]d`ZWXcc]XUWWY][\YRLKGHLVUVOOQLOOFCMIP7[G@?XDLQLNTTSNRMNMXQQOZUW]Z0VQ;@?<53]XQSURTTQWV_b[Y`Y1124^Z\1_b__YTV_a^]^YNNKFB7@EFB=;75c`12/13:CEDEJRLD@=:::99878>=<=@><M1,/231//11/3250*(,06.,.121&'7-' /2+), u!!  ! !''#  "# "! !#" !##""$&$##!#!"""!"#"!"$$'$!!#$%#"#$#" $(('%''#$%$&&$## #$# #"#!"%# ! !#!"$$%#"!"%$"!"#""#"!!!#$&$#   ##%"" #" ! !0,,)20# !"" %(!  2/3'+/+)&?3,$-*/03,+-522-2+'*8+(-'1.)1''1w"&!  +#,"2/( + # +     + +  + +  %  +   + + + + 6    + + +  , "/(-#') + $/ (#-* +U6 % +   #  +  "&') 0     "  +#  ( + $'%!2*'G91$; 02!"2"$'5*&!#.'* 5$ !"&--,de44%<=, $.''$%'&&$$'!) $8#2 'N=HP5)' +  +*(HJ/+1=vUP6OS$-UėY#      &9099?CGSYXTRJF?87331*(''+-451-.03821(4+!#*)&&':1(! &!   + '/+ $!#$'+/*%)(&(($" #(.78;/=531442.(-565;:ABJGA]P&$%P<$USOG)+H=;KPR'NLQ]NCDBIQKJ*!#$)$(02A??GNNNWYWXSX3[SRXh6=FEHA?DEDFGLLPOOPTPNKHHJNPUXROXWUOSZ[USSPTpb^bcic`^[av~~wzzbco3KKLPMLEJE5B6,1.)5 "(3.*8AEA1*,4.*285/)'120349?82.!8;D%*%<@9?G&$#%&%*(%$!#$FHE$%J&$$""$)'')'))(%%%!!#EF%)(('*+(&%)'()&'&,5@A;-&*"! $&,,&/"5(#&!!(%)1 %"#7*0"$2-""# #   "% )$!%-:')%(,$%%!  7357$"%$*"$*%$!)"("  "$ #,/-)&" %#!(""$#$$"!/0 4BJ]Abpdrygca`dibC+/L)2(0(;;0THMYfc[SR>MO2#"%!%'34$G&%:7*"%%?7>/#/7'"'/2"+-("%"'7#$ !$24&05!:92&&6K[K]2,6KXC=#$1';Z(4QdQEF-0!5;1"-/*!,*(9; 5!!$0)5"%,26(.*"!#*((+))**)&&#EMA_^\vvRZ*31,9K0), NB   +JMA.+;@62&C,8+@>>D?@B;54C1/GGA?ADNLIEFNRBERSEGLEHHK_UXQ04,BBHHFNZT+,32,/"-234,B,=?N09GGML&2$*0,"+80(E==>6gcYVWTTOMLHFF@?B#B 9)6FK$"*-;=<:85112+*12;;<543895/012-2="  #"!"*&((%$ ""!!$""& ! ?BCCCBD@E!! !#" '@"$ 6 !#(LGCAEHJ'(*M*TPQP)O&'B%$'*)-(&)/+*,-(%&'IED@A"&%H;:;9.+.220.-06 7/(%&6&2%/2850.-+)''(-(&$$($"$+#!!!!',0+**,*(&,421.*,-*,//50-((!"$#"$&"/0,,))%$"$&($$&+-)'+"'$'(+$&'0/0-/,3!7!/-//0/.1&"6(,+-,))(+,,,)&(,+,*(&(*.-/,01/*)+)+(()(((*)''((&,'&'%3#(*)!"*+.+*(+,,+*,+#"$ %&.)-*2,")*,''+/-)().')'(%%(&#"''% & !!&#$+(!'+&')*((''.0-('((),1/,*)0.+*)*++,-.+'%$!##+),%&)%'("% "*")$)%&*)(%(%&%+%%%+&(*'# *)%')()*'*+01-*,(*'(*+*,*&'-.../,%%#! $# "%!"$!&&,'(-.)&'%%('(()'%&($ "" " &%" )'&$"&*/.-+)'(''$#!&(!&#"+)"#&&#"$"#!#"#$!#" (+.%,' 2'-'@0)'*-01.*(*)*4002-+)(')(-,++.0)((',.."! ~~~~~~~~~~~~}~}~~}||}}~~~}|}|||}}| }~~}~}}|||} |||}}|}~~}~}~}~ ~~~}~}}}|}||{{{|{|{{{||{|{|~}| +}|}|}||}}}|}!|}}|||{|}}}|{|~~}}}~~~~~}~~~~~~}~~}~}~~}~~}~}}|~~ ~~~~~|{{|{|{|{{||{|{zz{zz{|}|}|||{{|{|{|{||{|{{{|{{|{||{|}|}|}|}}|}}|}|}|{|{z{z{z{|{|{|{|{{|||{|}~}~~~~~}~~}}~~~~~~~~ ~~~}}}~~}~~}~}~}|}}}~~~}~}|}}||}|||}~}~~~}~~~}}~}|||}|}}|||}}|{|}~}|}}}||}}~~}}~}~}}}|}~~}|{z|||}|~~}~}~~}|}~}||{{z{|}|{{z {{zz{}~~}}|}~}~}~}~~~}}}~~}~}~}~~}  +~}}~ր~~} ȁ*Â洽ⷻÀȦׂ񒖝ݳꀇˏѡŮӻز퀀ڨͲֿƃ͏ȷܣЉۓȽƯՎ߽˄ā㪓ֵƔȣώηשᄔŬйƓꂾêմߛ惽ꗠۖޑɩԽȽГƇƑ؟퓑̯ţ׆Թ󘗘𝇤ī޿Ȁ۽낄ޭɈ虥ϑť慍ױľƾ¿قȀӽŶ扏􇉃ΩŗХ񁄅􁁁󀄁򀆂ᇆϓЛŵͷ逍˷񖓰჎̿ե֯Џ؞ߩމ菙ջķޚךԕ߁͔ۘĶˀۨڙĺւˇ崏풥󁔍Ϗ̳ݦ̝Ѽ䫔ë򓖓т⋋ꪺ鬆腾ܼҁ䊪ӪƩۦӶڡ֜يɶϐǨܔ€쿯􄛛뭹㪋ȤȘɭн怀ػ񋀏Ƅ耢٨據Ѿȸÿ􂋍żŬֺڀ焉쁊¬툏而ρƾ̧ŨƵ݇½¿ԉĽú齷ĻǼ퀇з̮ſĻƽ˺·¸āͼݪېR͊ƾˍȺv>=7545566786662]^^_a^_^_cbVY\]\``a^^[^cT*eeh;?Eg896=afl4`g69966879;=@ACEB?AD?DBB=AA97;<;;758;:@BECA?A?@A@DCCA@>979:9889;;=;9:>>>:9::998;<;>>??=<<=A==;;<;:;==<==;<<==>ABBAA??>>ADB@>@@?@@?<=>@>@BAAAEEFEJMKGDBCDDACBCCFHGIJJGEDEKJHEFFGGEFGEGIFGFHHDDDHIIGFGJDBDFEGFDGIKJEGEEED?CEFIKGCACHHEBBBCDCCBEEGHEFC@DECCCABADGGFFEBDBBDEBCIPFCDAC@>@??A?<8f\f===FBA?>;;;FGCA==@Bsmm>DAnYY;ACBEEGGDED<6<==9hh6<<>?<:9:6`>?B>=EJ=Z[kaV_s999<=v6<::==>O;<<;;;97868:8;9654210[RS2@>2-?03S>-1D6$+..@/86B/$;;,8<*/,,! %$!+2E-6'=- # %(0.E,/'#"&\BUA|eny@OB2zyu?5Ba2_F\}G`WM[e~dXmP97B!7I}DalG@>CV.5C)dm?7JTJ4GC@;6?TG,>SAc94GlLG:>`FCCv0(/IA^RJ>KR3C6@%6*?JjXT^[SpcuNNmyeu\Muqo[tm`eg{}OLjPAmzleKmtosd^cgMES/*JJ,6>8;>74#.M^UJ=*#9;C98I&%53*8C:?2(==! 42<<+>8:4g569"*%.=)4# 18yt`>F`Lk}~}}zvtr==>xt|u}qdmnrnmt>>~mWR)',0/1WJHEBCRNKHKGJLFFMLHIDEJKJFI-.*-00./022132230--.,,TOQOPG?IKKKGJHFANRN+.--Y_XK60-+,.4.KA1\1///-)TJIO[ec_RsjPRTX..-///.-7;<8=EDJJNQQSSQRQLMLNQQUTKNMOPPPKGIH^`[WW[[X`Y\hmlmtxyv|zwzxpmyo|{|}mrKILOMMKLNNa^dN05)C(6EOVdmbVAb7>EQa[XJDY,29^ELY\mAzBBEGGDFEEIJHGBCDBBCCECDDECDFFCDIEIHBI&+$(%'K,@0lf9kcJHB.1#4:@DZ[derM7J_U]eGWL\]\OE;@OAIUI55A39B3'A8ED3@EP1B-KGAK8:=<;-%($2IXL9FKJC7DEAQ-INNG+02>=LD]=)/;D\l:5g[ZZMT]Z\[[]bab\4<1U3AA]k^yhQ|qnvfiuyOa\w^eTmgrdqno󃀉mfPumV_`bl~OXQRYNltKEsGu=:??OV5APF.=LPf`0710YcqrcB@?>IdyI[XI@cNRKCcHNqlN]PFP`bRKNcgTLPq@;AJvgrCBHLE?ppybYU^pFS[pUDPHziYbaTtuN_K`jfdhq?=CS:HMKDyW|Urtqngd_bo;=<8CHGFCNTVTONKIGEA@CNC:@CAKMJIGEDDHEIHGDFCEIKGHINM<75657=FH{y{~HNMRLJKFIJNQPVOQV\QLPYL@BFE~FDCEILJKAAADAC=ulf_YSW[_aYZ[ciswllk^QH698)/RLLGKNOOIFA@;75953:7;GOEDTTRTWWZWRSZ\`V\YRY_a^[Z[a4geVV\TYZZTNMLHJLL@URNLGCHFJKET`8]LHRJKNMKOROQMOJHQOPQWSXZT`7/0:?=:5YU[RQRRPMLPSUOSXX145bcYX^_\\]X[ZU]aVWXTUSHDFSCGMMOLINNSORUSTX`QVVQNNRSSQOPNFKEEMGGGCMMKCFNNT]PNPVWZ[\TSTPSLOORQOQUbOEOSSLIHMOJEPP0EJAGI@@@AKQPJA55@T?@)+K/=;Xf5ZN8<;64c`d32225=?EGGJID?>;<:9976788::;3540-)''$###$-1-)&/-(306."!""!"/#"! + .+* '#"-+)')(*,&%(%%%&%$%11563+%/32/,/1-(-/+EOTRIQOTR_XRR_L]_LFPRcaIC+D@-*9==&$$,I9&'"="&7!?19B&!<'@!$,!$<-')*(*33>-'//%'$$9<:-4DUVH}h%<";ILGF$6%-=3:99*70 -184)+35#((#+0#3 2%&(=(//% $. 7)#<"+!# 6$?><@HO(''$%MEcP\QLM6(%015;XD$5$ >XR1KC461)*SNZ5466438663:O^;UC[@80KAH@5P88KI:gMC;GWXKEHWWJCE[2,/4RMW2102,-UVfdUMIMV3:=G2','C;4==4OWCL8CKHEKL,(*/ ),)'I4OBCA=<;==BB>=;999:;>AFE>>B?A??@DAADD@@@?;;:;=;=:;;95Y;=:8<988768;:98:9>>>@A@BC>;@@>??A=;;<<;:;>@>=><<>@?BBBAAA@=;=@@=;;==>=>??@A@?@@BBDHJEGDBABDABEEHHLKIGFGJKIKJJHGGGDDEDDCDGEEEIJHFDDFDCCEEEFGIJIIEGEFFDABDEEEFEGNFJNGCCDEHHCCBDDCEB@@?A;j<<>g\Yn7=?DCACA@CB@:5CF<65<@<8;<8=6AE>>@>7Vn;:chmUMfl:;9m=;<;:989;:;=;>932500//WV1561UT3E-TMI,3+'-*[4E_F/5A565,,4./+/2538:8=7<51B5:8*',>4"FKbNS9#* !'%/7"!<7P8=-=@18)%( $'*$!%&!" $)A)-13-,*)$$,),.#.2/6S9;JV0/@>HM_;>+.a;-*+1#%#.' @+.J7U=%):(,(-(!2*"&$"/,)'%+.)*@PL,2aX2,;"/F(G255:2[Z/J_LFA#58:4Do:DBt`086BIOJM]<58GTwOaibf}]}bp]hc\hdbod|FJh[@>$4?mkvfjojXwaplUjpV&?V^3@=7=R7?@A7@"/=APC,K51/5 7>&/ J+?*2&):#8"<),I8-"T?/3:89"",-*"3"&(5|UBXD>!@:(/W1-1&%  *,+GQWSd{mxsJHQCYXA'! %$ !!"!"!*.259@@IL1/'LC=;)O+T.ULA921B4Vk_bk~~{~{vv;@:?D@tkhwylj:O0A;?6;8:5HNJNMRINKRT^^_c\XSLIEH8ILR`jeQCLNBB>G]\GIM-bJ_kjuA{||~@BEACCACDBBDCCEB|~BGJNHBIIEB}AFNLFD@;qdYdw@BBEGJMRVSTOCBLWXWJSsq8Uj`]>NAPTM2)(P7/<,*?9T;#% A9IICGDPCGG8]8;.>I`T;H41"(6E@`DL2_`niM:EM1XbntY.N6T$0;F8FPH=FA321$^SitALf8D3$!)F:T?7/bjn<9eVW1-0BSAA8/).':FK(03&I,,:8F@E\EW0)8H!ICJ;9B=>H>8@MHHB@76H7J9FV5;l[d9VK;5_SVP]W^V\67;=;:;5A/r`ILT`qm..U[TOGD *3:6));;@")>3'#&.% @K@jji.2=AIBHHIB;XXFUpCFSNhaSP]^URPJOPPLHM7LcmPPX\cEIkL~lY[\\f;Kc>_AHKBBrN=eREkXgINJ@phbbNL>[ffaR}cQpSwxBDCLUhOD^t@??chlikggliliagib8mjeYOLNaZWT[aUX]\jmjYR`j;;>;::;9?BCAJQTUTPKKJJKJLKLGKNPMSZVFMRLFGKQQJHIEOXE:GFFJA:dntp;EHD}{KFHJFIILMJIIIRQNKOVWPRQNQSJ?}INMMFFJMRJKKHJJKGDB@}qje]\_d`]bb]]c]\[c]MFD:U9,NOIILOONOMB648EAN`[M<_:I_9NOSWZTDXXVWTQV`c`\XWUOT\^d]WUd447h`ccRMNKMPLNPPPMTLPW27<:l?tc]UIDAHJNN^d2\]^`V4CcX^[X_OYT_med5`Vb6>;7_abl[_792aa469963c_a66d7?:a[QNZ6dUXO[_\XZZ[c`][\U]WZ1/22]XWfj\R\^]ZUWUTTSQQXZXY^]XQNMOPD`:4VB2SLNM8TOIIKLSSWW\KHYNIGP\RNJOZ_eWZ1V]/6<955Z5]UPONNMPJKKNQRMMNPSVMURRNJHRHAQQWVZTWV\\VTVSQ[TTVUZ\b4214_]\XVW]ZdSKHMSMQJHIGOJHCAJOJOYUS3YQPPNNHJPSPLJQLEIPUS\WQSTQ\ZV5:>76_WWNMKBISJLHLMHSP]332d5^]`WV]YRQS^_]STTX`OLLPGJOLKMMRRUTNQRT]b[[VOMPSNRRNRIIJHFCFGHAAKLQILOPUZMOTSW_`YUTQTMRVVWSSWeRCSKQKLKIKLHJE7CB@>E=;?=IKIHD:67[D@0*C.??NY9gR9<=8:e^[`XTYdaYTPNQULMOJOKKY^QMf\KZECEGE@;#<874bbc^87343>DHEIIAB?<9:<<:76564550//1112331//.,00132002..0/110102!9!    O ! !!! """$%"" !"!#!!""$$%%#""#&%%''&#"""!"#"!!"#""#%%$#"!" !$$#$*#$"#"##" !!!"!$($')$!"""$$ !##"$!"%""" """!!$#!"#! $.,  !   !"440-3 +4/02(&46442/366/2&((540,!!6"10/)61(w  % (  +)#$  + +   + i   + +   + '  +  +    +  + +  "%'H   +  "  $'%+&&'!*)   7.  4K9 + + +  + LT '5 " *,#      "1 $(1 "+"+0,$*),  "!/2$3(#!$%' %,'53# !;0:?>24 U+'3'#5#%/(% !$3% R/#!% #  +   +(]DUA/   ,$7>FPjĕvKIM@^Z<   + + +   +   "$"!?IGA=:621468820,*('%!(#!*-112#%<@/ # %  '*,*,+&%%)-,+(%%'))* (,,,),*+0.)),/+'+,'2?D=!&0&''%&*&J>BFSKOWTa0/)IFI)('&%(&.61363FHQ[26;7ZRT+1761,./45504:AFIHJLOLNQSQOGDHLPTVXNIOQOMMQQgkgmmee^eh\o}ut}~{MNOMOQSQH>:V[UZQN^^]QROXRHJPRNINYR[B:3:2!!"7'?$!)H4J 66"536=>A&1E&& '.;&- *7$*C9" **0& (+1>9/ "!.V[MA2[E$$#&QK^GI7)6-00B;/5F035.E"*7$G,1"%'57#&$)B?'&-66J%$&7/#)B--9@IGJFDL)'&$'ND7:?NPc?+52/&    "%)HKH%,38?42499313ED<9FXWPS@h>MN2L2FP@HR36=9QfPDETTMJICGGD?<=)7GJ16@BG..VG6`VKQROV.5@%6#'*')H3(G:4YNU:<6.YUPR81%7??;0I90C0NHG))+27C/&5BE".7:887698:713529:90**+30/,25-15199:1-47  %()+*&##"$&&&')&*,,*/63'+.*((*..)))'/1!'()*"0683%'%GJHFEH+(P**N'))*+*((F(--+*-00+..+.0*!@'HI.,-*(+,0***'()*)%$#E=;82127326521300/40&#$!/%683367520.&#&/708%.#! !" $&&&'$%),-.,,*')/04.*(-3022'$%##%##$$# # #8$A30*#"#&#)+(-/1)Z.'+()-"*'-1.-.',0217-../-,-/# 3.'$*0(*$-.+(**)/.+*+&)&',(*23+#)++*&'E&%&)+('*)(%$$%%#5)$ '%"#$%)*,,0$#-&&&*2*)&*/25+)!$**'&%'##"%''#%%'((!'''&#!$&%*(,&*),+'&('&-))*'*+.-+,)')-+1)%$&)%)%%#"*%$ #%#%)'%+((''&#$()(%#'$!#'*(-*%%'"('#.*)$$#!( " #% %"(/.,+&&+(##$())%%$&-%##% "%""##%#%'$&&*./,,)%%%&#'&#$ "##  !!#$("$&'(,%')(*01-*)'($'*+)''*3( (!%#%$#$#"# " c"#"! -##,"0,/)/#3-.1+)+00-+((*,&'(%(&%-.*$3,#(.10*~~}~} ~~~~}~~~~~|} +|}||}~~}|}|}|{|}~}~}|}~|}||{|||}}~|}}}~}}}~~}}}|}}}|}~}||}}||{|{|{|}}|{{|~}|}~|~}|}||{{|||}}||}}|}|}~~~}|{|||}|}~}~}~~~~~}~}~~~~ ~~}}}~~~~~~~~~|~~|{|{|{ +|{{|{{{|{|{|{|{|{z{|}|}|}}|||{z{|{|{|{|{|{|{|}|}|}|}|}|}||}|}||}}}|}|}|}|{z{{{zzz{|{|{ +|{{|||{{||{||{|{|}|}}|}~~~}~~~~~ ~~~~~ ~~~~}~ +~~~~ ~~}~~~~}}}~~}~~~~}|||}}}|||}||}}|}||}~}~ }~~}~~}~~}}}|}|}|}|}|||~}~}}~}|}|}~}|{|{|}}|}|}}| {{{zyyz{{{zz{~~}~~~}}~~~}~~}~~~~}~~~ ~~~}}}~}~~~}}}~~~}~}~~ ~~~} ЯUoሙܤ󂅏쀀􆈅獎нҕ򑢢뎑ȔǦ˶ԃͻꭈГ兀̼ƶю׹ݜ֖Դ쩷ř‰ڙ匎ϾӶƕβֽ襞ֵ׼㤛ܥ뒀Ƌ̮򟞢ò׀䨄­ŭғ‘ϲ̬שē󸂞꤀Ħ̲ٚ،Ĥѽϰрן¾ȾّDZ݀᥯;֮Ə໻ЊſſƻƹԵ񆉅ĝڀ테Ѻ삉ʧ቙􀊏Ŷž鲐ۣЀǏϕ뫺š⻥փʾ߱ـǸϯ޼ԡΧ΂ʚ딙ؘءҡ̯ž샘ړߵ鷐ںœɿեٞض󆪽Ȝ쥝񘧑܄䀅njãͤ蕰ۧɦ̥Ϡǫ煈ˑ㰞ϋٽФߺۚ۔ҒܽĖԃ߉ǖۇԐͣ­麈郬Ÿ㌇ӶѲմιϱ艘ЮәČʕԅ䠠򀜒Ƹ䙚޶҉֋ɵӈ庒٫ۆǔ뀁˻ð۳ɹ÷׶ߺ恈ʷǿï뉉ƻꀄμδ¾삏þĺꇪеŽü쒌ͳʿƫ߀żɧ­Ĥǐއ˶4ɹݴҗ⌗ź_48e`a3223769>===:c[c`ieieecce]^feqppldU8IB8b^f=H;Yiigcddho8kh56978;>;=<88:;;>@=;:?B???:CA?99:?@;96i66877mjkm:;m8:8<<;9>?==><==>===@FKJB>=>AACBA?>+??>??@>>@BDEDCDEEDFEDBBCABBEFILKGGFHJIKJHGFGRFHHGFHKHEHLGBGFACDDDEEBDECEFEEDCCB?@BGGFFGDFDEIKGGHJHJHDCDHGFFA@B>=>ADE@@DGDABGECADIBFFDCCDIHEECB@@CB>@A>=8;>>C;=>@B?=<<=CEAA===;@==?A?@@>;798A=]9?A<_:C><:>=@<;BA;7=8cll7`HCPm99?;8=<98<=>qnlr:>\_9=>@A7qb<=98aa8=9I;m8DNK;;==<<=?@=:89835454447/V1N2210KJLHB/A0G&*2,I2VZ5>>2-PHH2/2.239668;-26*6-91*&344%/D8fXA625**.+ "8.(H*K1$42$/B)(87,#*=.*("!!!/77I&'/,;CCE>%*(#*(1B*7A"D160TCH4I;,7M+4+:=9+#8.$&$#'%65>?5?#%8+1639L)DL00((8!,-*'(" %)(+.-:SGLGOq[TXdZNZ14-H)Dd@Ee6cVDgt~wDmPurx{`oD^X528=FQK)%>A+&,58T';TX\5\dH6#>58<2DKE70+=~j7VotlfZmTOHN85TGc}MmmR\^<32<<@@<:@RZ?'-\NNrE3;sBH%*&)@D!4?C.2JFN8ZX62A>01-1069,04'!)83')0%*4UHLG4?-G/6*6(4%  +   05CWENhm{iVkL@5NCSE=;6-&#&$%"!%%$$$  !  $,K;.?CAA|B@rIRUWPLFC@@@=7*JFLKIHEKLJHJ)'**&'*.*'*++)(*+))+,*()++*(('(+($%''&%GGFB?DFGHGIKLBHNK**JKOHKMG:$3:HMI%MEIL:43453754]SK0\LO1<>?<5[00/99?;G7BSE?HN_PZ4887ia9;6768:967:=>ACGKMMLOPRUPSNHIOORPNIKSTQRQLKCDD~\da^_[Nc^\lnkosww{|~|zv{zv{}ONPPNyJIL.!>jkPE>ABEczpnkuIE@@inlnGPOGHTYMOKNGQZG?DGKRV]W\flmY[{@AAC?~~~|~BACBDDABDEJIMFDBECCCE=UT3I7C_eQB*6D=",.#$:G_OJRB-A/@.NKRJT1ONfM;:;\48,$!!(*78:OV@1IM=ZE<@G5$_ga]f;W:6@>X=``_U3Q(>3:I>0+++0H7S1/N45EN;&-+'#&94.S2"7<)%21+MWE-;Z\C2;-=$DH;HO)6>.)&84A,41@LU\77>Z\=G:2>@Q6e]8;ek9nmhILVE9g4kSDegSMF@evQu}}LROiXC[RtKQ@AGJ:cG78.8F4J3ZK`aOg`T=Z&J=KG@5;7HH?DGJLPLMJHD=1/[R_PlnbD>JIHTW\VXX[_PPU[_[[_]g][SVSW`cfb[^3576aaa[SMJJJPPRUUVTQ^^b45`XiXRRNKAEOFLX_VYYXUXOJ@`[YQUVQUSZ]fd6^Sc=<7jXcb6j`54a3:259:83e`b55ad7mVYSP`66RRYV`bZU\]^a\]_V\XT322_]Z[cbXUab\UUVWVVXTTP[X`\XUQMLQOQAQ\372JMDORPJFGT_YZXUL+KXXQQPOJEHRZ]g\37^;<:;74]Z2WKUTPJJJDMNQXYNNNMKNOWPLJKGGFNRR[RVWUY^]\WWSQQMXZXZZ\^a]`X[9;WVXW`ZW^\]MLLHGEIGBIIEFHSSIN[]UWOLELQLKKKJLIIMKVTVWTQSSPSZ60:950/VPOCDJUMTQIMDPX[c53]`d^Z\QSSSQVWXXURIQY\RRLKXNBKNPQV]\XXVVZYYTPNNOTQRNLLIKJIGDIKFDCABLSNLTPPIWXRRWYXX[UPOW[USRQ[[SARTVICIIJHIHB;5?B:??=BC?DQO@<:5XM7L(9@AFPi[ah6;45de\Z^[X[XYSJMHJQMIGIMPPWVONg-]JW>@CCFD=:89844cY9?4fee;97655b+/..-,2.53631233-.22:8752*$0+/#)242//02441  H243576!! #'&! ! ""!!  !#$"!!! !"!! ! "#$&%"""$%%'&%#!!"#$"#$#$$%$$%(%!$$ !!"!## ""!#$##!! ! ##""" ""#&&##$&$$#"!"$### !!! ! !! !.  !$#!  \(*,41-#!(76636)+4+,/$42/$# i!! #" +  +$        +   +   + +   +    +   + +  +  +   +    * 0 *,")$&(* + $  +>8 !5#$; +  " .%> +& / /$$ %"$'( 8%* !)$5!'*.$-7*1(& 1!SA^"1=D",$7 8+/$-"%"+1$7012!)*25@-SR0$.%!IFL=/9 +  / 5D:LluurrF35L?E71/(   + + +   + + + + + + +  + +  "&&0P8?CEE=76CMK@4-*)*684//-0+)+'%*776/"(2+.,# 3&'+)%$"&'(&($''$!$'**'&(-%'((%'+).32%#&&'&-6/-,.-*/-,UQC)RDG+45673S+'#**.,8+3C;3:CSCK.344\W35343353145779?DGLIKKMORNOKEEMLQNNNKPQMOPPOEEHgnnjecUidbu|ኚǺPOQPBR+'$ 5:)#!"!%9H>@>F+'$$;?<<(/0*,45//*-'/3# #$')-)/688,0B!"!#!EFHIHI'(('''%'&&''+'&%)&%$% "*)+)MM)&! 46:8ABB!"$%(*)&'(+(&),-+ -9" "*/(#/%'-'"""%#($(8'3 +   &(!)/ -72/3"',))$ !"!$&*# +6<&!*#!&(%:%"'e7IKbz;>8B3'93H,,!%"7/:L=MTRQk_c\b]WPUXQMb]TVSnKG=5E0H0 ' +?5C1!<=9< !$@J!##.")1#;9.KA*&"*.%*&=2$:/)+VWJ9:4KL1)+;7`<906O/%8!+*'%1:#A"D:8.61((!)">2132A-,2A#0<*( >:%!!.-+,+'UPSLJDMU))"!$HNKK@=J73&,2&$()  LB[QZ`KE)24S.>BBICA=>>=7*07:;:86<!$ %))**))'*%'+,/./-6:4/240+02,++*)K)*.,,$)&HB35$A@&%" >DAIO*MP(+K/++)&'%&%,1/-.0/.').)-+&DH2,-171++)-0()()('*'$%E@8705>9<<=95-/30-**&')','.588730/-+('$,*7@<7D$#!#!"%')!!"''&%%(1.,)*)+013.,-011,)%&%#%$%''&" &&(0.8-)(%%"&!"')$''**+%#-,*&**&((*,20-%,7-314/-/+-.29+,(%0&'*(/1*&*++,*),'*'$,,*+/.)&,-*&&(((')&'$+'+)''&$$'%'!)-$#"!(.*-+*%%+,)++(%"#).08-&++)!*(%#$# $%&(*#%&&#&%*&%##! !$&%,%)*(),,)')('&$++)g,/+-()*())/--314'&'$$#%$ ## ""('!"*,)+'$ $'%$#$#$##%#*'()(&'($&''$%!(#(&!% $((+)-0-*-%$$%$&###'+&&"")#"$$#'*+'()+,)+(%$#$&%'$#""!""!!! $'&%)'%#,*((,-,+,*%%+-+)'%+,((&%"#$"## ! '&,(.(14-*-(*./1,,/-,,*-*%'$&*'&$$'&'+,(&3-$("1+00/- +́ ~~~~~}~~~} +~~~}~~}~~~ ~}~}~~}~~||}~~}}}|||}}}|}}|{|{|}|}|} |}}|}|}}}~~~}|{}}| +}}|||{||{{|{|}}|||}}}|~~}}| {{|}|||}}}~|}}||}|}~~}||}}||}}|}~}~~~~}~~~}}~~~~~~||}}~~~~~|~~|{|{|{ |||{||{{|{z{z{|}|}|}}|{|{|}|}|}|}|}|}||}}|}|}|}|{|{zzz{zzz{z{|{|{|{|{|||{|{|}~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~}~~~~~}~~}}~~~~~~~}|}|}|}}}||}~}}~~}~}~}~~}}|}|}|}|} |||}}||{}~}|}|||}|}|}}}|}|{|{|}}|} |{{|||{{{zyyz {|}~}}~~~} |}}}~~~}}}~~}~~}}~}~}~~}~~~}~~~}~~}~~~} ꃒ򘞖یꀄ_ኖ򧚖Ӄ􍡳؜ɦ᳝轉ʡ썹߁Ԣع˾ބ⁇ƎӔ֛ԉׄӺ茐‹هںŵѶ㡮ѫ暨˧亦ºᩍ䮼韦쎒Йؚ悐כƪᕅ଄͆ќذ˚՚֦ŗخͦƵϨڸȺπꌊ肎ĵ͒᧍р㴢昣¾ŸƆщíຝŴǵڀȿ¬󇊉녆ӿꁅ𓰽̽Ⱦ֘дնיȊțӌ񄊍ɾĻ삀͵ڇЖѾϊΨƨۨʊž𪗀ڟۈ냑ҷۓ܇⮽輆يˏБ黰ʰӲ଄ˆװס綽쏒􆔗ϥ闦ջƅՑ̮ҾВȠ⺇揮ڀŮ㐋肵ʘڥ܋񯍾ޒ繨҃„Էז᱊Ѐم񬡗δ옼 ߾˴䲇վ٫׹􀄏IJɦݿө򅇴½׃Ϲų؊Ə挩煂սǸ񁍖󊚑ȴǿԌƜ졋Ÿü߀Ӳֹ懐˼Ȁڞ߅ʽǻ󇃙ɴȷȼųϷ˿񒩓ɳƺڽýǷϾǫȤѱ½῝ՈɱŵἻľ䏡ʼ3e3a^Za_a]beb2a^4<6aa\gbbbgc^cggfj:7`71_7JJ`d]U=;9ghb`bmfbdfjhd``57;6677888<;;<=>=<<=<=AD=9;7q898<8gdhlrmiii6=BDA@;;=<==ABCIF@<=@@CB?==A@=<=>?@?>=?@@FEABCEFFGGEDDDCA@DMKIDIHGPIDFHHFFEEFHHHEDFFECABEBDLIEFHLJGCEHIGDFFEFECDBDEFGEHHICBBCFJFBEDGGDEFGEFGIIFCACECAADHFEEFFFEBBFGCFGDCAEFEEDCDDECDCBE>AA>=>CBACACBCDB?<>@>@=;an>8?AA@]F@@:i8:lQf>D@64=BE;<;ehFD9fHSWee^A@=;?>?A@pndocg8<9>CCe\F>;=6_eod=l8pmAHk6?<3W57667605557NQWF15/1GFKVM/:>*&/,R&K]4?E<4-K+761,#<*.'*.32$3C=1#$AF)9F'5)(":7>1! !!&)?'F@KG"#'%0B)'6*4H-@)#^>+PIIG-B)'+A*8-25P-Q5FU=*:=8G+.BU.8@(;I+.MXDG.4F ,!1*286#)"(# &+.').-.,-]pR=;PFla`u|_R2>-4JZQq4av=A}x?ChiMvf_fwTg]`Qc96BVF;$-&3<-V?27+17C?=9:F[3$$,=E@+5{h`QAp|VpqF}nwrL,?#=PJF<5*( (';&I2;-:FEOLF(B% &!2+2.PEIF'6-9$,/J45OK(DP]JJ>87< +#$0&,B.)*4.'(M;NE,F"*[25*;A0-  +,%>%F+2iZ]ur<..352,)--$&" ")'&#!'&'('%&#"# #"" ! "  %##!0(55-0>?ED@<1&HDWcebUOOQXY\fju}@@A@}zC@=}|{}u987<;u|yvyn{szrjinrl@?;?=@?ISJ?77;95746414110-+?HHPI1+/>BKHEBQRRLJDJVFIT::<6ea03;91a2=DJ=Rui^S_FKT=bh9>@CUUMHISULRWQ[PRNOXUpipim<9nemkqikp{wz~DBBDEGDFHHIJJIGHJDBEEE?n@DIJG}BE>_\frsoepx|z=<=@?9EAFA3PSOOSUXTQBPX611:T]hMXf7C97A=^F7_R;FP?.673QnI@1ZL:E97;X>7K<TK1II>OJ;A@R#PQ2dHiNB*,FQrgmRLgCJQ?SVD55KB9,20L+S:FC;S3549B4WRpNL>Y7ne`^UMCOW^OU@M~e@aLEOITzkiccofr`xucfUtNVgjhvjzolpu]jxdo:b_]wsfZTcJ]_M9je]URQ}bD$JMEAPKIN(+/2631&))$*"!*1&$%5)+! !NHceSN1-6AGGFKrJnOFGJVsPQRSMTVPIT{KKi{uT~fNnfZZ\]bid==[SRSTVSVamA?YSUW^Y_qiG==:necWTPQQLU<^pkR78DWZRDrm^XVSSXZ\[[W\k?JWmngtoAZpHOQeknCBxCAyurt;;>yohekwqhejs;8dYQWHLKJLHOQGVceagsBwgWPZlvc`liip;BEGBRPJVUOTRUQU\a^ZTQT[^QKMPSXUQNLKEAJGEFHF?=={toz{F@?:ou|IRVQXROPNKIHGNKPVW]_PMJGGNQVNJPQSLLZRMJFGJIGEDFEEG|ywpdmk}qnfcc`TZkbZSKE>2GZGOKM6BA;UI:A"6;?>Oc6P<8>99^b]VY\^^YQTJLMIJRKGKJUcePPTQOLc;@B75ABFJINNMPPQNFHJLHKJDLKNKMMGTOLN|[^jjga[X]ntwx{οPMQSKCAC!- &11'-"!"".E;728+.2"73***!=Ns;C>`_\S$5206F4F.0$.17)29>7PTZml`TUTbNTc_fcee_FI7.'-B+*$$5*$17 #$$((!@@4,&+#%,)<#R+ :" 6 D/<&.$5%QOKH>2*:E<*2.O)[I.@,%-$(2)!/)3 -#T5'+;+# 0F/%67=75P.L0;/3/+?A#&3/,0';M"/>!B@CTRA85F29<.#AC@;<6Y7(,##)#"&  +  :7GkC68"!-6?:)5Y5kS@:=EN^@GI?9AH@19O3/;$%?$#B@=? !@:758?<748= 0++1)**)+(,,&/53139#?6.+1;A55;87<!#%!+(%,*%((*).48630/378.*,013/,+*)%")''&'!FD@95?DM'F 3:FDI*Q03.1/--+(&'',+-0/67/+(%&*,2-+012+J-81+)'(*(&%%'&')ECA=3;:LF<;8797,2>72-)$ 2 /+3<;73.+*)!1! ($ ""&!" ! $%"#(&&(*"*0+/-.,(-0-,,-4-.,+(&#%%'&%! )&(-01(%./(#''"$"!$*&$"')*.*(,+(%)*('*0,02(+,/4,.155*)-0.***,&$,,*,%(+&*,%2+$)))*'*((+*+),/-*'+**''(&((&%)$(,++(('&!*(&'"!!!!!"!$,(#%#",*++.($#$*/%0/-('$"*$%#&&"**.(#$'##$#%!%&&$$/))*-+)+)(,)('&',+,))',),*)+),++*-.0*(2,*$""!k$%"!)#'$#!)*(%'#%(#$"$$$#&&$()(&/'#.(#"(%'##(%"$ &!&&%)).+')&###%%#%&('$'&$#! %( !"$**.,+,**( +&%%#"$%&&$#! "! ! !$$!%&)%'((*.($+01('-./()'+0'#'*+!$$"!""!#. &"% )%%&/0#&* +/-+,,..-)-'''%&*&$&$+33))*'&&. 10.000/ ʁ߁~~~}}~}~}~ +}}}~~~~}~~~~~||}||}}~}}|{|}|}}}|}||}}}|}}|~~|}}~~~~}~}|}|} ~~~|{{{||}|}|}|}|}|}}}|}~}||}|}~~}}}}~~~~~~~~~~~}~ ~~~}~~~}|||{|{|{|{|{|{|{|{|{z{z{|}}|}|{|}||{||{z{|{z{|}|}|}|}|}|}||}|}|}}}|||}}|{|{|{|{|{|{|{|{{|{|}~~~~~~~$~}~~~~ ~~~~~~~}~~~}~~~~~~~~~ +~}~~~}~~}|}||}|}}}|}|}~}~~~~~~}~~~~}~~}~}}| +}|||}|||}}|}|}|~}|}|}}}|}}|}~~}}}||{|{|}}|}|{ zyyyz{z{}~~~}~}~}~}~}~}~}~}~~~}|~~ ~}}}~ E󂆄ኆ᭧߄۾䑇Ԅć시ӛڍہᲣ¾޿Ѯьɲ녾в邖ߏѼ܇㺻Ӟ쬨๖̺̗䉜Ϛ撹ҎӴĹġĭ﫞֏ྐྵ˲Ŗ땹ϿƎ뀷巭ûːۊΆ䋄艐慀җٻӬ朦俽Ӹ鞇ʊЃ塗޾̘߬żՇڧ豣봥椭ҬδʫïԵႎҧЯ̵ԪшԊü䁉ۀá񆔌ہƧ劋ˍǮ捷ꊆ޷Ÿზ훯·żǻ϶˙󂅕ŵĹ먖ĕʬٷߔɭưɌŕǶݬޖݒȝȢԫ؎ڠؠ슔֧ᶓܞϮڊŶ郊ѕԧ̟÷㫋҅ԆԛԴȧݕ䝴ĞԖƻѫԖٳܜŽȸꈑɮǤﱢɂ쬭ϬӲ쵊ځȣۨϤ׎ڴ␉뀃ܡŞѡѯžlj⁢ÎʺϘϨƀܘϮݴӊәňЀݰƜ͌䭶΍膁λƃۻހûɄ茮dzʵ揤䖵ϧʿǽ֚ϟȲҿѱɯѵڌ့ķǼǺ슌ʾĵՀ삀Ƕκȶꉛ»Żȵᎀν󌛉͸Ⱦżͺ»ƿĸһȶȽފきŮļ7Ʈͽ󀇅´554gea\[YU[aa4hehh4fdadb`\_`^_cedfjaV^[`]s=ehc\bcdj6:6_]r79nlfha^_egf5879::;;98:?<<===<;>@A>>::@@AFE@?ECAAACFHHB>BABCCEFFGFFFA==*:;;:>FHJF@;7p:;?@;:==:8idefi:;:9<;:==><:9:98<>=>>>DGCBCCCAAABA?><>?><:<=>?AB@@???>?BEEDHGGHHHFGBBDFFGKHKOMLNKHGJIFDDJJFBEHFDDFDCDLOGIJKNROIEFDAFGFHGDEEGDEEHJDEFECACE@BGFFIHEBDCDCGHDEIEHEEIEABDEEDDFHGDFFGGDGFDEFEDFKDC?HDBGD@AB?BEDFCBDCDBA>;;;j><;rl?B<>???7@:;:;q;::@?E;8=88;7=<?A??>==:A<=jbh`9f79?M>?;>=?6>Ajofh8;::666>6=:;6;;>9756784455454341\PO^354UBNSOS80-9-@/74H2CD6+1(SE,347<:1;7:/(5CRO.5* %&><#;+)0=?4.*%/=@4!#)(;2B5'7EED:5.+$9!"!! #$)!"++<<1.4K54!7$:?.L&PEC5/M(0>B)G792M+$>4.3,.=JN3CR97J3=1@=4-1WH>%:-8C*223*N;B(&$(  0>)9&"$'&%'3,.k\C=89^[ZevmXIN_W88(?I7AHAH;:/:a7$6C/-J4^E;EUJjOGp_joRok]cfvVhoczsUw{L}7=GLyNORVFYmp]ykfwbyg4'K4EKGbVA**/84 :;5>>#?IP.;$-.S13+*(8@@/$#18 2S,&GRd5`161\IBEA=D&9*+=).,00%$#'23-10(V90,=D>8! *93.MIRg^`II+&# % %"%!"')"$%&*+*(%#  #!"$!"" !#""$%)(" $)8G>.E@>4;.KeFUaaYSPNMNMNLKPT^mxBFgHC?Bzky~><@A=GCK(O?1MC:2L,:C?4;FK,#&&&4BOMBG-,VK=;D>4*/143295244?JED;545>IAKFIFD=KHNOPH+U5;;531;?94=CEFFEBHEFGHPMKQQLEDDKHHKJIJ~EQQVQMKOPVOPLsj|UXSRVQOX`fgrx}~}}~~sy~NLOPQS\KJKO\^RTLFhbWE<`4F>C;AvABIRWOQSIOIKOKMLQ^YR`YOKRZ[enso{~=>mejnow??uw{CCBECDFKLOOQRRMGGFEEA:A@?DA{~DHJID@EF@>@=>rqsx@>:;<>=<=BHBHSUSPSZ]PFNGKQQ?6A4FNAEgF0'",I;@,9.>C+1HJ^3DY3E>.EE\M.(@FcVARM@R\B-(:`^Vqa18TAEk7CJG3@RbRO6I%0-N,6X=>gqA_V:867C7A62A<%O'/J:2.6G8WT@0A2BLRBaKd?vUGK52DI?;g<<4`Jb98Za4eR7'6DP3.44`DQ98:]L_8=Q763M@S@4PWOGJSK65/`=@?41:8YPU?LUTT]aNXU_:B696=BbRe^EFmZi89DLAGnX^w}NZgQM\?>ILWd^H]{ievgqnsq`sَzwhkurX]NUqtlvdiaRVUXnXSZJMS_OEFqSkhC;FBO4IO2HW4?1Q\WAYY\I:02YJ56E\8Xn>S>1YB5lbUNKOKxB@sPDcLIq?dVKmqf`vf[kapWvƒ΃aTlU]OnFp|L}T<7qd[sf`4@FGIF<8966jaIUMEED5<>E=B=?B+;A@+'),SB! * "+"#5GSsGN@HHIF==K^{SJatbQHMMONYOVGqE~cdJlOPusLCh]Xakml^W@`dSQEkQTasremiaaf>DGrfrYWXUY[XVTVWaDKG=dgCXghZQEvaXWXXWXURUUTY_tHT^Y]VLUtKQQOXeESZid_bkq>?>=qmnmnkhjje^`gUDMMKONLNQSRZacLfl>n`\UZ\^_eZ\h:?BDFDJQMLTOPSTQ^edZZ[TSNQRONPSTOMNNKTNIABFJDD?@yu~}@xzA=:7?EEATTQPYPEEHHIKMKRTZYWOJIJIJPONOOXYUPMSVNNLECGHHB~DGCCyxvpq~v>>tkeiab]`c[[L=dXb[QKA=?@;BFAAA@Z`11STPKPSNMRUCG\ae^_c\XSZ_gh_\W\`d54`[[ZWNKNRRTYY^42_QVVIKOSV6^F3NILMJOQGJQSOQIIORPKO^]TYg\[XPW\c8<<`[^hrfl4\56676<65734554eX\dZUW`UQNPNVOGKOOI?M/Z/[ZXXZ/\[[[YW21][Yac]VS[[WVW2YVZ[\ZZURNUUQQMICIB=8LFNE3LQ\11[\YMDKSOPPJILFOSUX4=2ZSOLHIGGHJHIOOEAIL\WUT\Zb^[\[XYVUUTRfW;QZ`bce`[XTWUT]YZbVRNUMGFFHFKKGGDIKE?H\[QQLB::DKICDGHINPUTYYYU[YSYQVT[X480/[\XNDLIPMJPOLHJQGX`2210]XVSPPSWUPP\NSWW01\OKPQNNRIMUXZVSVVYWVY[VSSOOQOMKMNLJJEDFHHEGDAFIKIBDPTNHMILONZ^dUT_]ZUWY]jNHIIKNUEHOHGIID>7CC=g=8@G?KPL5@OFYCKI8/77WAXY\79<69cce\[`\]\OHJISNOWRKKQaVKMSeTPPa9968@CC;877466fdedjcad4629@??BDGA@@ENFF?;711.+,,*,0-200/11/100./)01214-(+(,*6.1/.2.14.,665250./000, "! "!4 51246($&#"#$"! ! !! !!"! #$"!$#"""##$! !###%#%(&&(&$w#""$%" "#"""#"!!&)$%&&')'#!#" "#$$$""##"##%% "#"#!!" $##$#"!"!"!"#!!#!" $! !!! !#"!!"!" "#"""$ # !s/736 #06)/&(0.2-'5313,*&11.1k#%    $    +   + +  p   +                +     + + + + + +( +  + !0"%) /##  +&    +    "8G2N&";#2 % +g&  2'  + + !8 + +4   0 .*+';4% -"/*-*" + ( E*#*(  +)#!%'!+,./F>)  V" " %*-79 " +%A+0'" -5- !C&6EY-J&-*F2,1-%.# ''! +   +"#;8GceoPG%  +( + +  +   +   /H4CKIA9563311-+,.-,)!#(#!! "#+./,*10--(&        #& +-%3')#!(-#*1/&(B8+.61%'+(%#(&%(+5>52-(()06174997.:7=>A;$J/57/--6:507>AB@@>C?BCDLJFNOKC?>HGGKLJKvBMPSOMNQU]WUQvm}]`\[XSQ_irr}~֋̷OLMKC;;,%&&-.(("!78."-(&'"&C%&*/2,/0(+'+.***084070'%)-04;@>GF 97:;=A"#ACE&%&'''(-././00,(&###!"#'$GH(+--)'(&! =@BDE!  ! "&#%-/-*.25-#' #$&("%3"+"/  +30"$&%-)&1-%5#%$%*'% ) 21+) ( !+$ $!0(5<( &!# 83#0-13*(&'+))*!*$((!"$"$#!($"$#"%)"*&,-'55)&508$")a|FDfbf:79-,;'#*-1;7,B[IIZJKYSSWnJ:VLAcdb|e^JDB;*?@&'$ (" !98"/"!)!%)2! #=$;/ !#"-++0$::0%+*$4 0DCZ9*RQ4FJ2-%!)*%/+)1B1,$"$K>8K?:!*,*,+&$$##HB21%$%%!% - +  +#:yV-2(5:<60-;Jd>7HRF>AGGLLN@D3LIB'I;8(:-P0MIZ51WTOSY^]NI3JK94)B57GVWJOQKKN..2TS]KLPNMOMMLONU9=70RW6DMND=6bTPQRPPQNNQPOW\iBGM##I&H#/P1.-3,'&'''(+*00310+)('&'++-./442/-13,,+&%&&'$D%(%&CA>88B>" :5596:58:56+#84%5%45;63,++(#&0)(% !#!$!"!&' "'&&'%(+1002/-)-/13/.*++.0...,'%('&&''((&*+$%'((("&#%%#&'!"()')$#&''#&/,&,3.-+'*-/!2-.5;48+:2*+,('(+'%$&"($ #$$"!'((''(**,++',+*..+'%*)'%%('**)&#(('''%!$!$ ""''('" $)$''%$%!&&'(!4-*%%$$!&&%%!--'%#!"!""#"#&&#$-*)(-+0,*-+)+*()(&2%")/..20,)&*)).+(+*+).(#$$%"&$"#!%&!!,-&'% "%$!!##$&&)'**)'))&*$(&)'(''$# '$!&%#!"& (**'&%##')&$#*!#&&(# ###$&!#)+,*'((**'(+'%'%$%$%$%%$#$! !!" " "#%$ !'*'#'%')'.05+*0.-++,-6&##""!' $! !"! !!"%$&!*"))'&.%-)'',,.++-,-.'%'&,((+(&&)1+%)+3)'(0!11203001#ǁف ~~}}|}|}}~~}~~}~}~~~~ +~~|}|}}}~~~}|{|}|}~}|}}}~~~~}}}|{|{|{| +}|}|}}|~}|} ~}|||{{}}|||{|}}~}|}~}||}|}}| }}||}~~}}~~ ~~~~~~~~}~~}~~~||{|{|{|{ +||{{{|{|||{|{z{ +z{|||}}|||{|}}|||{|{zzz{{{|}|}|}|}|}|}|}|}|}|{|{|{|{||{{|{|{|}~~~~~~~~~~~~~~~~~~~~~~~~~}}~~}}}~~}~}~}|}|}~ ~}~~}}~~}~~} +~}}}~~~}}}| +}}|||}}}|}| }}||}}|}|}~}|}|{|} ||}}|}}}~}}|{|{|}| +}|||}|{{zz{zzz{|~}~~}~~}~}~}~}~}~~~~}~ƀ逄} 聂ºׄƓ쐌־݄蒞ꑈцؐ޵ՕɘĄ̉Ҍ򅡩ʷɉ偧ÀɈױ™έÓᕂ͛ۙ˂ڀ˽܉툛Ìȑ׃Ê즓ˆڄվȷҤݘӖ𳼵ȹ࿠Ě͈܀Ǫ݌ɇóΒ妃µҿ򘋕ԥѡѡȖ֤ڬۊ틹کב㊪鏪Žɻ꘮ٸِсϞ쭀ϲʗݣቿ׮Ν뻕Ͽþݍ͡إš蓧崢̮߫ޗ̀˅情ɺڪٕȋȼĊˎǼКԴ¿ܹ󇇉儃ƧȲ׿ջԿڮ􄎔ʸ㋫鍖ً퀔ݺڊݶڏǴɓʧܣߕɸǀ糩Ȩϼ뭘켗һ˭ӱ؅ٲ퓪΂ޭ„Νͧŀ宀Ӏ뛔ޔԅͬ᥊َǗҽо炚π馆Ƀࢇ޸ÿȡ߂ۭċ͈֮ثŧ舊ԿĂȯǴ͏ñҋ靓ӏ݅쌾ʼդД܀⼏Ӹ˱мؐ栍ãр̆װ˾ɳǻˈʺ羫΁넊ijǫʝ̿ɾ숇ͼ׽Ƿý‰ͼµۜȷɲꀉá䆾Ʈútκº´Ư̸ɸȹڱźՆ̾¾μ煂ɿ˵Ĺưȳ̰􁇅Ъոܖ󋛡ÿŽ<543dea]VVVZ_ah83b][a]\`aYZ^cab`ced\Y`77gZjh;9ceeVM^mminlk578ogeaggbcbei87:<:6>8=?<<:=;89;=>??>BBCEF?>=?BB?BIIHGEJIB?BDJKIHGJHC=:98:>?@???=:8779=>A><:>@<;;::;:;;@B@>=?BMKA@ADCCCA@@??=;::89>>><;=<@@>==ACBDGMQQJHEFFFCCEEFGGKLKMHGJJFGGIOQHFJMJHGGFGFGGDDFHNRLGIKHDFEHJHCCCGHDCJLGCCFGFEFBCJJFGFAFKEFGIGEC?@BEFQMDFJKHEB@BDGGFDEGIFEFCBFFFDC:?EDEECB>C;?EEDA?=<>C@>>=]jn7EJm:=<@A@=@B>>A78AD?9?A84;e:;59;;>BA?DCYZ^9fAg]?>DVa_h>:k=<9<;@:i_Ve9;da9`b=AB>=9XWgleeC>=8779986:B;b=<;:9742257554685247`I4573WLUTO49M7=0;9#<+:=EDW9,B-)O(277<7=671B>84KE2-NJ5DM*3MQ7\M;.05CmKtXOF&PSYuNIbX^462C,>BG%%136('*@I; aeW2/'#9/Z0,:,>JL9TvCR{\MaRV^Y_~pe|wfyhuWUPWBbX9zfURPnImadn`C#)C7821VZW=*)*,4;259;*<:-4:.D,5&2@<('A9A:1+*-4*@AA3,`0G>R831VU.0DA;7':$&.<, &4:(D.!K8,H7*1= + ) -<100-8G[A-+!   '"$%2.$%++*,*$#&*))&&"$&'$"!"%$")*++,++.354GRIGKXDQY[Z[UNJKKIH?EJJKMO^l=DDGCA@y_{xxxtvzzol;nvr|}xVfjju?@q8>INC]Z]aml~GICBFISW[]cL^?J-=:70--02-**('&%DD'%"#%)-.+'&(&&$%%#?542+)**,1556;>BCC>A?ABDEADC@AIINE?BVI^B9;;3<=' $)*/&6HRCHJ('-YF?B=*0/1788<9?6+@1&&4AaT\cprl:B?Aff~wdQBX;eDFL&;*-OGNX\UYKOEGDJLSTIjY.>NUJ]CQldY9>AY7Q7'MO*V<7eYJAIC4FK:7+>54%(;2COMPjmL0".4<0+?DK/JkbE<810B?,H5;YA+%IW_\bS8BH1)3-8EC06K66h4c;6_BHUWV\Z5864@>;9x883VXPUZRpTDB^S]VYZdM\h=bLO]`saqZljrPp|~Ẇu{bq[avz{e;aUBBINSZZZ\[[XXUVVUQNLEB>>E=22-,g>IWW&I$-,YRHB'/"%DOQXMZ5HPMUNWczxIU3GSH]xRSW_aL}PzHHOVNGIDHvYOV@;_k\aPRWkgRP\B~stgYUrKGjeggteEw_A`\[ZXZ]\VXXYX[VS`^`fkxw?AyjcYbjd]WQSSSTWUWgE^maM=B`wxlYMKJV4A`G[n?AB>usojfa]YUTUYikPFIPGZ[WT=CORfnmmk[UXXW\\UZUWZc;:=@ADFC +IQPOLV_\uh^UQMMQQNRSKIJNQKHDHKNIKECC>57<:pnyvt::fBNTDADEEHLGJIMOJKRQRNNKGHIMKLPHLNOQPJKMJKCFDC}ACAxvI|uehm\[[mc[abYSLM?hX::+UWVVPIE>9bir_g[TPJIFC>BHKGGcBR\\WWWTKFKID@A;IZYcegf^ZVT^8cbZQT^c75^[^]]WMLMKMW^476e4;S=GLKJTIE9TOPGGECDQKE==@CFMIIP\WRUQRLNV\_e8A?\\\-beaniWa348885;<458675b\aROWbLZKWTSVLJGADOV`]\ZY[0`\XV\`]\[Y2_YUQ]ZTQ[6[]^]X]XYSRRQRUPM9ERUL=>IR6SQ]][\`^RIHLKNGFQHKZb72:AHC<<<57b`USOPMKHONDROW>XSMLHHHGFGJFENOMIG4GPQS[_Y^XY[\WUVZW`bG]VP]^g6g_\[ZUf^O2:1COKLKLJHDFGIBCCLJAFLRPKJF:7?EDBBHILLINN\b`[[YVWUYY]\33/V_VPNGLJJLNRSOKKJG^3d24UX[VS`WVVURNWYRSSS12SHVNPSWSRSUXUSSUTZWY[YTTNNOMMLJNNMKIFEFFEBKEGHJFGEEMULFIFJOQTWPRZ\YVU]\_OGEEEIMS_MJLNBGA:@BFB=9FBFQE:>NBXERI-3:EPELVZh73_3755`35``A]UEKFLJS\ZMGDGFINOhfT_]MKSY>AEA9488lffbacbcch8832_76!1**% --/"#J&5%:-(&AG%&5,+"!   )9 +  ",;[A*&  +    + +    +     $*:2=DHFE?60/-*)%(*'$&%*+ %(,&%#!#&%!%123).2+((#   ! "'@=`<+'"!$)1%(*=0.30%##&')-+/( -"/979(5?;=IA=;FF*0()E,.)18;:13>CC?@CDC?;<>FB8jl?LABAJIMLMMEGSPNLOWPSQQTQRRTZUTUNporu|t}ѴE~xQRPQHF/.)/'.17*''#07G/$-",+*/,(.+&-.+495;1-7;+,,:;58)+'@B@B!!! !9!"$$&(.1-.490!#%% ).  + 5! /**.775$/-961*!/, ""%$,0..%###"'(*+%0(#' 0$*=7.!0%+,/"-'  #$$#/1#%'82 )!$-'(*" #+"#% ' '-*0#-)'#$"'&!&9!1'**4 8?=UNwg94:/3832(EF?+KCk_]@ogSRIRG?iZ56Q<iwoq|qrai>1)-;897!, &($##3#)/#%:*"4(+ $("#+4Y1"#&085$D-G0&&?$#276<;1U?60:5?7;6?8`=C)A+ F<&;74F;*A$&"/++# (3/IF.+TChl?Z373'7+7;2!)/$ +%&*&*/44:979874657630/0.*'#'"CF8Lb) 0.$ +  +"&>gr2-!6C@D6S,Mbe=;"4<5H_FOX`\=T2O((./''*%(E6374,JlYPXEJL[UFGL5[NF<63B23Y;:99E<)K>/LMSNJFHKHNNOOPNO\VTZ]ba13aYXPZe_ZTNQRRSVTU_14GVVOB<<:A%+;)4?"$%"??=863110/./63% %+#-+('#)5:9;90/20,./-0**+0 !!#!#')($*00D:46771.++//,-.)'',.)&#%(*&'%#"59DH?9/#+1N%#$&&(,'FGE('*+().--()(&&%(')-(+,-..*+-((#&&J$DIGC#%$DC*CF;.36)+,953;:3/-.%>5'' ;;;=71.)&769-0-)(%$"! !$'&&9!*(*(%# &'%!!!&'.1540.,*.0/.'(+-.-/./,&%&$$',.*#$#"&(%&!#! (%#!!%#"%,)')%(#%*-,0##/0.241:8).1**!!&,!*"*'&)$"!!'*.*''(''('++*(*,*)*(,)&&*)&#'),-,')')&&'&'('&!*+' #'#)'&&**%""$"$ !' !(+"22+)&%##"%$'$&,($#""!! !#!!&%$" !%&%+-*-*,,,)()+*-/)(&,,/3/-,-)2.# )%&'('%"##%""!%$ %)(&%#!"!!!$#&&#&%-.-*)(((&)),+%*%###"#$#''%#$#!,-$&(&$+&&'&&"&'$$&"$'(%%')+('+'(**&%$$$#$$#%%$$#!$!"#$!#""%*&#&$(()+0)*./-+*..0'#!"!#$&* "$"!!!'& -#,)#'.#'#)+/))-..*!%"&%*-.'%"$$%&'31)0-%$))//0./03)"%"~}~~~}~~ +}}~~~}~~ +~~}~~~ ~~~|}}~~}|{|{|}||~~}~}}||~|}|}|}~~~}~}|{|{|}|}}|||{}|} |||{{{|}|{|{|}}~}|~~}}}||}~~|}}}| }}||}}}|}}~~~~~~}~~~~~~}|}}~}~}}}~~||{|{{|{{{|{|{ |{|{{{|||{{||{z{|}}||{|}}||{z{|{|{|}|}|}}|}|}|}|}|{z{|{|{|{|{|||{|{|{|{|}|} ~~~~~~ ~ +~~~~~~ +~~~~~~~~~~~~~~~ ~~~~}}~~~~~~}}}~}~~~}|}|}|} ~}~~~~~~~}~}||}}~}~}|}|}|||}| }||}||}}}|}}~}|}}|}|{|||}|}}|||}}}| }}{|}}|{|}|{z{|}{|~ |}}~~}}|}~}~}~~~}~}~~}~~~~}~}~~~}|}耄} 肂珗󑕔˸倓݄֐񁐋ꏢ牐ĿĂɥǸܪК٤̶Ϯ뚘ʵ󵚿߼ڗ̞毐μݻΔ냷ީո˻ڋǺ¾ŵ¨ͨ•ŗ⼿ϡ̤뿁ƮDzǚֈ܏ȊִҮ΁DZԭȀʢ؟ȓ܆ѩڄߚ꯼䭡ېȨ꓄ϽقغҜͳĦ䍌耇ŧ򂅐ߦԹ᎜̫ٹȺɵԀݾúʰ͒ȻĪîͰ񳤨űּ󋄁ԈĸԿĀ퀂ʻ݋Ҷȸ˹ĿȦӐտտŽʎׁږٵ߀ָ̉ң񄟻͕̓δﳿ͒դ̧׌مڕف;л񂋎ز럔˩θ΀Ӥ߁ۢ…ӿ󈇀ʷ噎ϧ̓ߪܾʻЧʽ᎓н끁ɚžոɦͽثռމ񀧓ځ볭ȶ԰޾绡Ƣ섉ճƐ俼͸ώɘ‰ēźúʿ̴½ıخ󿙅ǹǽ՜ƶǽՄĝж꾾ƞ˄ѻɀӶ׷Ƕʵ׶öɺƵӼĽ¾¼øՀ漺éӦĶނ񉕓ƵǶՍ¾><86344h_XUVV[amcgd4c53a^bb__a4578887da`fj`_cc^\^`VUOY[`77hgice`^ae7nh`]dk<;35899:9;;;:<;77;=?@@@?@C>@@<<=><:978:=<<@A?>AAB>@@><:;;::@??AD@>@DGHHFAAACGE=;99;;=?=<:=?BCCHGLNIINKHHECBDEGJFFIJIHHIIEEDFNTHDJKLIFFHKJKHHDGIKKHGFGECFIKKKIGEGEDCHKNJJNKJHJLJHGEGFAFKIGGHFED?BBFFDBBACGHHDEGCBFGFFJIGGF\GFHMIGDEA@BEJFC?@:;@CDB?>;Ob;@A=:gXj;Bff>?>@A@@BE@BA==FC??@:7f7:>><;<;><=@A:h_ci[_ZUSGDMi9A<=i]ocjrfZ_Ycidbo9bb8E@?@<76di]^96ki:9jm63,;4030JJ34\I2A*'2BE2)!!$!2KVHSF=GFH=H503+6.,O//;<;>6@+6$(7>!8-(%.$3:&.(%'!&2*';91)/:;=!T;!-5- "!E2I2,&BW*-*%1+64.,/@8,,/+@.AB%3)*-/OH8EL.-DS?E=4/*64(()4S\`P@O_TR`=R@B7U1:i_mENUYgYpwegp{o~wugtj{AZ>SdTjki9wPOBa==T\LDB:<)25KxGQ\]KLI7-040[+E9 74BL%3'&XUKQfQ8b)+UiKt56\=@\^_OQ}tTz=xe~ph[kn}_]ENi__itriy}TrMp?Pc[@Z]UF}o`uG_ȥj_='F635(+6GPV3!'-('29 #G%#446-* &&2AP-OCB9'$@,*5E4.5#+H'8()@ZW1193SMJ"7%1,7.!478K/:B)HF*5T1%7#  )/:E=/#37;6,- ')*#&0#-%%##%+,$'$'+.&##+&"!)%(/0/*)+*17?D?[;NQTRQONIEDCECBHEFBDCG'-5=<=<7>4)=453D==HJIHOJPZ^]//ZVXO[\a00[d5412>BDCGHHIHBDEFGJGBJOKLIEJKKKLLOLHDQMIKSRJDCHROMLKJ`bekrw|~|{}|}|knqubpr~~wyPOQV\dQR[bUSd?8ZKLGDAo]QQ?LTFE@DYc^QNQge_bna]oj_SST\b`osfrss{CBFDBA=qkx@z~BHBFHIIILOMMOOOPPSVYY[^YK@>:6AE@wyBHC@?=@ABA@?@>@BELTXW\_EuOKGL58giQ@PLWOWXd[26PmBADB?JB4TVXFd8aTNB37R1=@B<@<=.4MOU3=9U839/,.22UP[L*P,KX,E\jJ8?CVTS7=;Q9-=;D!0L5%8M3ASZAr6XZ\9180;58SSEONBJH#SXU7K94;C7,0AEU(PBJHYT7NE^@03BCjDA@mNAI.F,P;2-/Z.[.I@AiA6+4+Q48!!4K'9HHC=:2--TTaNIKa7^457_6]`IQK[[2161_59?<;=YUHG;a@;D=\UAD6QYtt{GACE|AkYOPtDAP[tor`_{_bjibwONGZsdpXLWPLGIinXoX_FC<[We^;I/*1O_:jY7=:NWH=rdZ33=IKqOOXWCHl?c^.43ZSLWsQG}ICY[_be`aI~c\kxxq~}rpxZprFHnxY~}Yeaa\vvwcYL5aWTWWYUWYYYZ[YXUVUTTSNFlo9;:75HjQF_?QTUQ!64.U-?>DlWl}IOt{FevpycROM?qpz\T\WVwp_KqAG@eaJ@QZEdhtuw]ek^`[ifVU]e>\?O^lVfNj\WjniKfNdUMJNRNH{z|xpmvwlhi_[[\]XYXT__YTUQSVVXXYY]s}DDyyNXMGCB@>>EZ=W>Qdy=?ngc`]UX]RT[Z_ahWVX[UeXb[[`Sqnha]YYWY[ZVRY\ad`[_k?ABFADNOPNQ]`qymbcXUWQRQQMMOKJKMOLJJMRVO@FLHE=99<:px_rLalP7?QPIFABDCEIEOJNNSRCRZSTRVLLIKSJEBHLSLHLF@xFIILFG@~s{HIA]XY_vml_hf\I\weDd9aW[^MHFB=9ZbChROXSPRRNNIKIGEER?FNKIHJRLKIEB?:imQNQ8hegc^[X`jgaZPO[ahcf^][]]WRPOOM:NfcVFNNF@S[]AJa^ZOQC<9;:?66[YSUPSNGPQFKNLSY[TFBDJKMEHMPPUSTNIKLWa`h[T[YYXXVRSXX\cb]\]Z\\a\][VWUXPT\Z;KPKKJGKHDBDHG?DBBDECFE>B==<>CD=ACGLIEHM]a0^^\\XWXZ_0.X22^TWSIHKJLPWRROMLNPSZX1\VTZ]R[\YUUTTWTTULX_RMONQXb\XXWYWVSTQSTVVYVVSNLKIIHJONLLGGGELEGOJJJHDJKKLQKKGLQWUNNO^]Y[Z\\cKIGDFIJS`PQL@EDFCVBFC95JLGNF_;AI9YCRB+]4ibUMGSZV34]8<;7;:h_ZTRMONKTVKFHFFIQQdfWRURUOWY;>=>=;52=7db`_bbgi66if4d3:=<;=@BHBEFEA]1,)(**,.4.1/...//-,+0-,04...//./0-+'+,.312020/1262.-/3 &  ! F   "$"!#%%&%# !!"%%   "%%#(()*'%'$"O!"#$%##$%%$%%%""!#',&"&%'%!"#&$%$#!#&&&##"##"$$%$$##"#!!!$%'$&(%%&%%$"""$$"%$#$w" ##!  #"!!" "!!#"!"!"!$(%#"#!$!$/3,4///2.03,0,+*$#(3-(3.23,).,1/,-5/-02*+3102!-'$"$$   +  +       + + + +   +  "   +        +  ) +   +  +    %2'% 5 + %#(,&&( $    +  = + &   &  +^"   &  ;31?"; ' $(,0 +"H +.1;('&'  6%$)! +C-+, &"5=@ Y $ ""+@)A5.%("/!   5$+DG**2,A>4   4'# +  %()3,$ + +   +   +  + + + + +  +   4'6;?>=:72.)&%"!$%$ $*-20$(%" (0.)(..,(%((%!))'&#!      SV* !"%(,,'@:$"$%$ "%#&--%#,-09<95>AGTWS''JHKEPOS('LX..,.9=A>ACBDE>?ABBD@=FKFIFEJJHFGFJHFFWQOSY[QIEJUSQNNKghnx~qys}ĩ{RPQRKDP./21)+7",$$"#%B6*+"-2('$'5;4+,0?>88?74=92--,.N11>@9?AAG'')&##74@#GJL')"$%&&&(*)+++))).121351&!#!BF%'$## =CCE=:57< ! "$&).2135&7(("-2')' $'-+"5! 54$<%"$)*.6-'"#" !&(! -*'+# + /3")%%  %#-0<1-*)&$)*)#!##%#%$"#"3 6 $*)"0 "! #$+"##.,#&) &'+'(!%3 ")( $'=Fjfia92,+K'G=65O..:qvsAoXVYmEB`ZTOf27?QYUaY5(5?@=#G+$+898@:-&&&(46+5(. ''.("'+.)'/'$XG9 %/2M7287*2D+<:431;V>0Z90:;>CC?;+`[B>FMA;<+4,4:D11DE# .*"#-21++/ZO:YO;5!4E1+#"#!%)'-!-04442/232343432310./0.EE .6'4MOz,4# #3&=K6aFB+:Ytm\6Km]R[HAG;2_nnWaRNYQ@NI9*C')$<<,#2;-IU`^fcGNWONLWUJJNQ.@&+5?2+7-911:<;+=-K>988:851,.2,174633(')*&0'+(*/(=;85300/11/+*0./.+)+4 !# "&&((*14BE=79312,--/,*+(()+-*)(),/*!%)%!9C4A&03#!/-*'##$%$'H%,'**.-#-3..,.'(''-&# ',1+(+'K$@&('*'FF(JHE"E>E*N*"*&'.EA>@8@=6)9HA.E)D<@A501/)%-5 $3('-())&"##%$w* %('%$## %&%$!9# 3341/.-.21.-'%,.324/.,.0,((&%"$10)#&'"'', %1-*%'  !3+"! !#&'(!'#'$+0//4 (*/1/.161+,1.,'$% !,)**%(&)'&&&(**%$(( "%('&)())&)),)')('$','')+))--'%%+)(&$'(()("%*"%&$&##%(%(-*'')-,((%'% $%$%$(+-*! !$$%!$'&*'(%"##)-+0+).++))'&'*()..+*-+,*-,.,+*()&%&$&($%%%'$"!"$$"! !!#""  "#'%"$&/-+*)*(')),&+%'&!!$##&)&&%$$%$%*'*&%))"(('&&&%'%&' &*%"""%).*(*)*('%%%'&'')&%%$"#!""!%$$$!!! &!"'%"#"!%&$&)&'$(*..+**10,---.2$$" """$'!#" ! # #" a$ $/!-(&P&<-'%"(+%*3/-*)&))'**&%&$$')'20*)*)+'+*30--//3421. + ~}~~~}~~~}~~~}~~~~~  ~}}~~}}}|{| }}||}}}~~}~}~~|~~}|}}| +{{{||}|||{|}}||}|}|{ |||{{{|||{}}|{|}|{|}|||}}}}~~}~}}~}}}~~}~~~~}~}~~(~~~}~}}}||~~}~~~~}}~~~}||{|||{||{|{|{|{|{||{|{|{| }}||{{{|}|}|||{z{|{|{||{{{||{|{|}|}|}|}|}|{z{|{|{|{||{{|{{|{|{|{{|||{|{|}~ +~~~}~~~~~~~~~~ ~~~~~~}~~~}~~~}}}~}~~}}~~}~}|}|}|}~}~~~~~~~}|}|}||}}}|}}|}}|}|}~ }}~}}|||}|}}}|||}|{|{{{|}|}}|{|||{{{z{{||}}~~~}~~}~}~~}~~}~~}}~~}}|}~ Ƿ냋ׂʥࠏʋ爐Ӣݶ᚟ꃉ샀܋󠤙֙񅌡ڰ埱ژÑ܁ċӗî޴ʂʥ򿣂ښˠ˾䣅ƌ˟ђ⨩̻˺׉ֵΞēذʲै⨖̖ʵʮȌƙՍַَ䣑뀏˟暫߬ՖϹˡ׫씤ǃ߽ө֎ϟ㈗ދ׾Ί͵ゐ䅃Í⴦իصȯҐƴՆ΢Ү鋜ކϵº聇ހȻ􈈂ƛ쒣ϵ󈒄樇ӥzػƾÄ􀇏᳃ùƣɻ읽ʆƷԺ쁋ƿǷ򅉇ɲϹԏߠï귷Àբȱ砂ϟԎң栀ȋЊң̀í̋ե寋ܤℤܿΌӡȫ듍˚舟֛μհ鄫༈ıξۄ˙մ񚉺Ȩ竷達ÿǫ쟅ԂࠔՎгǥdz模ýê·Ѫє״Фټۆۘ촍ǒЖü֗꽷ղڲᕅ􆶭ſԔ𨾆Ʒƶ̭芅Ц˹ǻ¶ļį􍃆򂆆θ˨̽ɪ粙¾˻ҼǩڈޯοźĿտπӰýѺóҼ¿þഷºeǺ䳺銄񍐂IJˁƀFB=<864hfaZSWQY^ba__^cda[h8eR[3476:>E@<7h\[agibZW[VYXXhi_`dhagjcdabdl96e[V^8767:;73h778<=;5h79:>>>?>@@AA8=@@CCDEGEEEDCDDCDDEJI@?m>=@@><@CC@?>?=<:9899>;;>@@ACAAA@?==B><;9::9:<<=AA?@>AFDA>@@AHHA=<988:;;<=>>>?=>BADECFDAEFCFFECBEFFFEDGJIGEECEJLLNMMMKKHKJJJKJIMJIGFFGHGEFGIIMKGDCKHGIIGEJJEIINQMIHGDCFIJGHJHHIEECDCECEDACCFJLNOIMDG?@FLKIGDHNSNGDC@B<>BDBA@?:h=<::>??CCB@>=DBA7AABC@==dc9;;gc9;;9:>AA;TBaebRleil\i=>58@=@=6k8m98g]cd=p`Yen`YAB9@=B?dse8728?WM<<97QU>D-?*NVDCC: Q[(IE4;P-932':942/05'NUO1>G7QJU;E2"!+'(HHPPI.T>)+7#'2$-3O?H:269*02$-7A;-@,!' +-)!"2%%?C@.9"9#?H># (&(;89HHG/11))*-085.+)'52&..47P:(KRI','4SJ4A/,;<68-1ETBD'&$$&D9>[dG\bWK*L=@CB8G5j.LRbcO\|FvHJbVdqdp]E>F9HKGd[aUJKQDEQLMY02K32*P8MU\wYJMA945+#"%)LN&&VKPL%,4!UYLZHC:297L.VL(!,QBHF76AB,%=N*$:D0QNKEFaMnz]][pVafcOhnZcc{^xu_t{AqyVm?ZuBUUzgwj~iZphc^#%AN;8;DGWK;,(+!"%.18:7$k)='02*/$,9),,(J22 D@-*L2+-%9*B3;0, ,PD&'5>74+ +1,U##0.)&&.?#(8    +)&A5`N.2(/# !$#!'("! 3"# #-+)*0'%$+%""&,0-22(+-4>%.EWWOHJRPIEIHD>98?@@ "&(3==DHECBvFF{ytprvwqy}DA=>ACGKFOLIGEIMJD|o]YwC@OR[[UL91PI?J-0035-@&(+)(%&)++GD@62*%=JH#%')'('((**))KI&MNKGIKIMIE@GEKQ))LJG;,7DQC6pglH<@DG9.-.2/,(*(378AKEL('IOLA78A<7<:2/:57 ;046OWBLLH?O6^gISFFIID4_P,@Q1:)6Ld5;@>9VPM<."'<;6F%43H?(I&2H2=?2BG,+=CA8Cm@KF>H=>f\_YFV+4X;./ 8B3>CA=V`O'=lE::E0dGPKHr\<:7&,Z6!#%5=+MJI:RniiZ>>UNBQ@fceOa6`ZB9-@C0(InKB8KGBKI@89T-BM-=;=D1RYFU5@84;;ea7:46[Se9g57g^_6:o0M.>Q@61KAHS9syrTOR2FYRTGOmYb__~XMC^cS88RV[eIfsRNWjm[nWaFTUFYOSA>;gt]vEFG{Cdb|j{h\_^mcbaDwV^LRMMB@CLEl`]akhToZQTYYVJxFIIm]ce]VUV\^Z^`\WRVUY^ahf_[asFEDNKDq``cghqzAJP_M=XbdgfaWZ]YZZV]]YWZg\acVL\Uoeahdhic][^_\_XZVRQV_c]\dch=:==~~~|DKFJGBALPIHHCDFPXY\YIX]TPQUMHJPW?biIFIFHDv?EGJGD|Dv~@J7XX:crsrcc]NR[a]^H@?eVMG=@?pPRiGRNPVRN`1WU@9FHHMRNMJIIHFFGIFD@:9CXLZ7egjgeWY_i85`VTQ[`__b[XZ\XWSQWRIGUKPLLL@AKWeV>O`cNF7AMdV8NUE5E7G?DLU\[NQU^ca\\`lAC^M[c\Y]hbUd4679635;;86:24`25_QVVSNIW\_\[TXROONRYSDHRRT..1VQZ/[4\\\ZY_\Y]U\W[aec_11TXb3WTQTXVVPIJOROVTNTQOT[IWSNRQWR\MOR^82\_34><88948_7_SSRMVNOXTILOMSU\VDEEGKLINOQSSUSRSMOjocX[UWYSS\VST[]Y03`]^^__Z]]^]WTUSQPZ[TPPLHCEEDFAFEAAD>@ABA<;77;==3XDFM(WaXcYOQPLZ:6_^8;5c\`a^`RKLIHEEHIJKKKV^ZXSRRQVSRU6<=<>? @44ece6ae^ded5ncf5c^d7::>77679AEt420,(*'+,/..+)---+1/%(3-+/341-+-+--+22--02/36220/042.*,--  !" "$#$""%$" !&'"  !#"$&%&%"##!###! "$#$#%%#"%&'('''%%#%$$&%$$'$%#!"#$%#$$#$&$" !&$%%$#"%%#&%&(&###" !!#"$%%&%"! !!"!!! #%%%"$ "!$$"!"'*($!   !1*$1",'/].+.-("231'8324+114/,008/*,3-',9/+4-)-2.0*~"! !       + + +          + +  + +     + + ' 7 +." *-228#!# +  +  +     (!  + + ,   "5Z#6GB 5  ,& -!. ;#$ ,%2 +)%   + #$3)&)@%/#%1*16@8)  + '%!#% 3'& 7" * *# @2  " 8   +91 !  +     + 3 +  + !-:>845:62-.-'! 4=B0*971/465)%'%')(%)*'     /.12334:6;973A>=@/31'"(8..zB&%!"! &+(),32.&(0*'**#"*#*28824:GDDV[+TR*,RV*531053522^7=A?DCEJFIFA>DBBLHEEGKIEwy?G@BJLKMQSPwWw|:DNNQNNe]jeu|{~zwxtv{~TOOIGSJ.6+3:,1+02)(#,728++"!#*" 2%(,,-36D<13AAA=4./::BA@p@MNeR@heb_aba_[X`]ik\aa`UgfxpͲP86*+(%$ &:-&56=E(+J+H*5 1&%$(%(#".#3;BE>.2Q7[>(:!$5-1)@EE415EB>E=:0D:;8,-6/<631$B5H2('*,5($'"&"':) 5*+21;D(0@2#7G*+'0 +-).//,./055410112110*'>D=)8<+#)*%(; &"".YA24c^7;_h^C:3GhM8!!=EKS:Soa\CCK[_SfIH4:91<+,*11LP=T40]-U.@=L@@AFFMP=8=*H-2)+**#!$+%:435<;/BR>893*,,P.,A4&+(++(&,"!#$(+)(&%%%#"#%%%#%'05433*+.1/++(.0013-+-/-+('*&"!*"&$#%"$.'!)02$!!'9)&,"!" !).-%').1/,-/7%&2$-3/./62)0-.')('%"),-,+',(&&%&*'$$$$"'&'())(**)*'+')/20-%(+)&%'))('%$(*(++()&%(,%# $#(&*"$(*''*/''&#)%$'$!$&%)*/) #""$$"%%'(&(('*%%45/)-)**&',(''*+(--,/..)*+,-('('%%)*('(&$"#"!# ## " !!!!##!#+(+((*)**(#%'!&!##$'+(!%&$%#.'*%&!')!&&%)%'(())+&(%%&)-+**(('(#&%%##**&$"#"#""$##$#!$!# !"%$"#"$&%%$')'((,,,//04./,,/4"#&" ')!""p"! $"!"&" -!$+$O?,-)%'&#*,+,)1302*&'%&$"%&&'&'-/,,*++*,)((/10+0-00/413.*-  + ~~~~}~~~~~~}~}~~~ +}}}~~}}}~}}|{|}|}|}|}~}~}}~}|||}|{|}|}||}|{z{{{|{{{}}|}|{{{|}|}}| }|}|||}}|||}|}~~}~~~~~}|~}}}~}~~~ ~}~~~~~~~~~~}}||}}~~ ~~~~}||{|{|{|{|{{{|{{||{|{|}}|||}}||{{{|}|}|{z{|{|{{{|||{|}|}|}|}|}|}|{|{{|{|{z{|{|{|{{||{{|{|{{{|{{|{|{{|{{|{||{{|{|}~~ ~ ~~~~~~~~ ~~~~~}~~~~~~}~}|}|}| }}|}|}~~~ ~}~~~}|||}}|}}|}|}|||}|}}||}}}|}}|||}|}~}~}|}|}|}|{|{|{|}}~~}}}~~}~~}~~}~}~~~}~~}}~~~}~}~ ~}|}~~ ܀~}|| ſԂꀋی샃扒ߺ獏۹엥䀇Ԅĝƥ斮îʋ™Ѭ҂͂˝Ү٬»ǿꢂ̀ʚ愌ĥȴşʹׅ쳷Å̯рđ֤Ė辧ȭ͕ءųݕ߁ʸ̈μҎɟ࿾ǸŰӍÎΛۤꃷ׮骄榝߇뾲𗁍ҏ陸ᝡú違ϸ٫ż©݉妑ещ΍Ϲ􎪾򌔌;Ź˿ι󀍉𑧩ܶˀ󍏆Ƕۀ開Ϗξ󀃄Ĺìޘڗü燦ôͩӓ‚˼րԴ˶΀좭զ͕Ɏ٤Ռ렼ϘϏʪܷ킸⁄ܲƵȮԌ΋㷋爇ԕա֍Ϣ󤂃߫ԂꁐНѠІرյҭŻуzߴ따ʘ﷯ƙȀΞŶ㇛ѧЇߞԇ˜ΐ㨊ﴲϩ޴ײуѣ؛䄙₅䜗Ȣ֏Ӻػ҈̆ʪZ놊̓򅇈ꄉɸ󻪪ߎ̀Ǹޮҿƴ²ꃒҌѮΣ¯幾薮ʮأ÷ȸѰ뀊˼ŲЯ셄ʹԴ̂ѷʾ􅇂ǽľüŽ}٬νʴ˜Ұç戗CHGJ?9565f]WVVSU]`VS55ba]`^ZS`k3468>GB@=9<7ee`bbYWd`^\`gf]agkjihffb_d69:7bW[_cbkj:97`\bgf7;568<<::==@>@@<:?>BAACEGGFCDBBFFJHFGBAIKHB;=@BAA@ACB???>=<88;@@>=>>>???ACGDA@==?=<:><:;::;;;<=>???BFA>>=<;>CA@B?=<;<::>?>>><;=?>?BIIE@?@BDGHEDFFFEEGFFFDBELIGDDEEEHHII+JIGGGILKHGGJKIJIJNLHIIHIHGGDGHJIIFCHIFFHIKJGHKIFDDFEFFGIIGFHGDGECCFHGFA@==FC>=DGIHDHGJJKKEBD@>??@AC@A>g9@@>p\^@?9e99>9;:9jdq:@CCB@8<>@=<==@DEAD:h>j98d;><8:>AE=mWbSPdh6;:::h6\=;;;::>=8;>=<5_UVbodbd9SK)UB1;)-/1/61U)/0-266/0N3@*+R1A?# )/K5,'.+%-DOMS23&.)<+/,;)$1$&"+;,%"$!'(9'#+6891\/11EK:$'43('1F8CA?#%1?)(06+.$)FQ5>C.meX_9480?@>w((*7HD;6<4G22&8*-,)!Z;7kpIed@=LOpUYmzy`bftiUKFSiGUCRHXhR^[glhe}v|[g4R-JF8K71>AX+PG=80/)!-574/6&%0),6-LK0(.2-<-!)+G0-"/)..1L704=- '-;=>]0"# $(&"&)(-*$%"!$)&+###$-48912+('+3,-/*'/*/+4D&&08@GJJKNJEBC>;>><79>>? : "#).38>DFHHGFy{~o~~{?E@?AACBGONJJIGE?CHHJKKDjt?GJXUTTGC<.D0<'*0.*343?'&$@<=3-PMEJDG@JDHKKQ(()*+)()*''OJLLNKIOOMPPOLJORQRJEB@>8+&LlxokmUF;?G>22353321-'.7>ED@DD'%PQ.SA;<98:4289!6)-:>D>@::?FGFJOOHDIIJMKLKIDJHINKGMLJFHRMEBvr~HFt~QQNKTO]^_fdp}~|~z||yzzvwnp{mzptzzIETTUUBXB=FX`o=f\kgpif^YV`\KGIPIG8X5xPBDKKV\bstceu{mlqoslnrtptsyDHGCIDBG>@?~BEFJMRQPPOQMMOQTSLJFWY]_^^[ZSJEA@DB@CIE@CBA@CECDE?DJJE@@AACycaf^^UTXb;JU\VC8b93YZ4EBU_X3g:3OWe889+#L./7&%G#.9QB2B;.92%%()8$%%-,,7LZg^D9T3E3PU<01QE=W01-.A.:=4F20LCbEJG?bc9<]WEMp?jZBTQ00.O6AHVZc;=BA'W@*-7;@YFF;.BCL20>6@Vc^[3;6P;QJ8HMT[``UYXZURW\a]ehoosngogFe\\lffdh]bd_UX^[XOQRT]Y\bf26>?A@JKFJ\Zlzpf^fZXRMHJJKOOQMWQKQMNQHFGHRLCF~|Dx|v@ISIQYHFPRNG@@DJSYWb]WONPSNOOINOODWERTGEIIGCBEJCDB{{~}ug\UNC]?Decik_KEp_L@:nkOC??;LJLxMUcMMOMQQI\J4+2>HJHFJMJFHHHGHEBAIY[c65g5eeeI[__87]_YTUY\]VYZ]ZUSWVPOMMO=@HVUQVXZUZ^^ab:EwVUa^Z_a`\Sd6335Z27=;:7753bd85\RLLLJNRXbf^RLEIPKOB@KPMVTZ+UU.-.101]WV\^be2e6ZQ]731`Z^^_XUQRVXWSMJPNLSRXYRTZUNVUQV\_aYIJQM33VYbZ8?:7571`^cWRMHSSSUNMPMNWX\VICCFKIQ[RLQUSQPXPXZa[\ZTVTSPYUZUY^]]_]034cb^512eZXURSRUUVPLKIEDDCDCEEDC<;A?>>:912582CKXRH@@4XVW<,2U6NUNOSVSTgeVdee`_Vbd[WHED?BDFRYJKMLLOORPOSRW[TTd7=2dedk:4^b3f5;b`cf`b`f;<9;==> !!#()&"!!"#$$"!"#$##$#$#! !$##! !#%$%$$###$&$#""$%$##%)'%$"""!##%%%#!$#"$%%%$"#$"""#$$$###$##$# "! !" !#  !!!""$%%%! /5-.03/6+0,6+2**42.4)+'(-5-.-.+/638)44--/.0/+#$     +   +    +   +  +      +              + )/,'*!2!%", +   +  %  +      =A"   V+'G+0$ "$&%3%'0+-4!*%<     *2 . !9&,(*4"),=92)"Q &!50)6-% * 4"1$AO=,&#).   *  +   )A      +  + +  + + !- (,021252+%&#  @429<51--1355.*&361,   !% !"!$'4/36999<<;?B@>@DEFC81./.(">A>@BA<>@FJ'+("#" $$H&''*,/.-,,-,-*%%&12344421)#! "&" "! "#!"# !&$" !""$>0/2-0+-/3)04/ -$(!$+(2!%. $ #!  $+4/ ',+"3 " "4#&$!3.*% %5-)#"!+-3 ")" &%/+* !)+% $($'*(,"&3(!) )!&'!'-" $!(*!.)- !"#*2/+20-+f?utpzb^:E;>ozw99`dxtoihccb_Zfe[oHa[SqoȻЦ@6-("& ,0%. !C+0GHC?5&)41/($ *! #+'(.@=C>,,Ta2/2994JCU0:/;B,<5K?>3NLLR.PF;37>470J>63O$'C/(,RT2$$91 ## 1#!$*$22BC+>(9 5687*3%)(2/(!)2341+**##'//$ (2+"":^QhNMR87@I;ASMQ[\GB&NoT7ko:JB,D:ZcKRDH_PSUNC@?\=2Z7;Q7J>J`>6EP/.5P.GO0B(F0=C'((#B::#&)+*+(%(G1B*GHAFC@<515<>CADw\ZYRSUSYea^ZYWYTWYapqolGYSEiempjgNGA:5;33.*(*))++.+1-'+)+-'&''.(#%@BB%KLQKF@!&,&+1%#()($ #&.32;60,,,/*+*'X++) '$+-%F%((&$G$H&)%%#CDBFFDBHE3)% -#98?B:-+SMA53,TQ<2+*&-))C),5)**(((#)#%%#%&%$%&&%#" "'&(3023"-.-,/-*+,.0+,-/-*)++('%%%%*'%$#"!&!)+-%!(**53+4.!))&+++(+,./.(C-+2/-011.(1*,,-($%%%&'+/1-'% #'"&"$!'''!")('**//,)%,,*,+*('%%(**)'%'%%**.-)+.*%(%#%(+/+""($$$(%-,0+($!'(&'#"&%%+..(#! #%#'-($&(&&$,&++0--+&)('%+)*'(,+,--/.*0(((''&(')(%$$"!  "#"!" " #"%#&/*)(+)+*))*'##'$"$"#"#()&$&&&%##%(%($&'+''(('('(*(/,''')*+*!%%&$$#"""#'&%#$##%$#"#%#!!!##""%##'%++(+)1++/03/-/0-0.4"#%###&%# # $$$" "*&" *).##* *&%%')'%.-&00.,-*12..&$#"##),#&'&'''+**-+,.))/14/1+/21013./,-~~} ~~~~~~~~}~~~~~~~} +~~~~}}~~}}}| }}~}}~~}}|}|{|}~}}~}}}~ ~~}~}~~~}|}|{{{|||{|{|}|}~}|~~|}|||}}~~~}~~}}|{}|}}~}}~~~ +~~~~~~~ ~}|||}}~~ ~~}|}||{{||{|{|{|{|{zz{{}}|}|||{{| }|||}|{{{zzz{|{|{|}|}|}|}|}|}|{|{zzz{{z{||{{|{|{|{ |||{{{|{{|{| {{||{{{||{|{|{|}|}|}}}~~~ +~~~~~~~~~~~~~~~~~~~ ~~}~}~}}}~~}~}|}~~|}|}}|}~~~}||}| }}}|||}||}|}|}|||}|{{|||}~}~|}}}|}}|}|}|}|{|} ~~~~~}~}~}~}~~~~}~~~~~~~~}~}~}~~~~}~ Ѐ~}}} 胂ބв邅ۂصՃ˚ѽȖˆע𴒯Ӏ͠ڀ霤ӓաԏ󟭌ھ땚Ο蒏ŷ탑ԵҎ͵̨Јðֿ̓א΄ǚЬꯩ҉ޕυϋ϶ʌ߭퀁ޛ䦄ƌ̜ッܚʴрߨкؕ͡񲫅ƊזŻ򴀼モŐ黺֠ф̿ī؀拃ޭؿ跒̂ԑɴڠ㊆扯傐¦ڎƹ߂̳¾ٗ㻗Ԁôǿ򁮤ƿĨ닍ꅎ䏝ͯ侼삃ȲԲ􅏣ƸʾኬꤶҬջў΋ߢ̣Ӳݟ։ބЀ܉߼ۅπ΅ԁ֋ߋ٠ƨ݁먔́ҝϮѽ޸ڞȏ釈䪩ڕٴƕ󑀅易힚ܯᜪܻݞ䤭ںœȽ鉰ջΫszü󶼬ɑΉӝÌ܌Ԫ΍ӹ㒇ӹĻՋƮóΛۼЮ쿪γ֞²ª߂Ï솕ꡀدʐöݜҺ؍ñ؃ȣ½ƺ̀ΠΕɣ˘خ緐Źþ썮ݐ䄘յկɼȕϤŀ㠔ø؍ɴοͺ±ijпɰـ݂郐Ŷ仪ԅĽόŰʾŶȏĀ䃉Ҿľ˼Ǽ߄ȼǷƽ̀ܫª¾ʥʢՆذ큌ȴ϶³ރ=BING==956f_[\RU^[SQc86b[gkbWP^ckj56=>@BC9;;>;8jkfb\VReqnbbea\Xcjkmhb^f;:7kd]YUUUb8>>6\\^ZXn?f;;=A??>=@=9;??@?<>?GIEDDEFEGNHGGC=?CJJB@@B>>???AB?A=@@?==:<==;;<@AB?A?ADJKCABA?=:;79<=::98;<<>ADA>=<;=>@?=?@?=98;;:;;:>>DQJD??=AA@>>CIKIHFHMMKDADGCGFBA><;<@:=?>@B@=:df<;;>866;;979?BFDB?;8fBaci>@?A=>AB:bHC>Uea87@<9fb;:89;8;=<;j7B<8`Rcihh_7=?:;@j\m88oem@=o=E9e]iggj87?>>;:9865]74WZ^78;5753510765311133O0C8A9=IE;ISO?S'/8-+4!2B:5.38:7E+/Q4VB2)3;O?.%,;9])9@N21RS-M5,(.<65)"8,>&<+&;%$=9",&;521!#:HC,#%)$))7A0?JA'"):6,)82;C%=O18(/12-6/%+61-.:7-/@//K*2ISDFQ4U5$#!-2-(''+,*#   &*:C?:#31+<6859/%AG7YOEsC3@)Nkccz|eo`GH?QR^l,$8"&r#!988:-*%''**&%%02",3#.YDAwXj_otud}k"'(L@FMK@c/;ENMKPCMQ^F&'/7'$"686*8.825.=9<4&O14-!(!86#.('.&1BF3:#"+6/9+-(70.E.0 1E &0O2")(+1-.+$'3-,%$""- ,-"'.82(##1526./0+--,,17::7:!$SB>8/AFD@DGIFAB>>;:9:9;<:!#"&+,16:@GSMEC|~zpnwDGKGDGDBDA@ENSICDDFJL5HTVZYVPGIPZXZSMI@?8.++91)-,*($=60 ,053EECJZZIDKFOSSRUXOT,*Q(*&&NNPNMKNRDBHNSSWVSR)LJCBABD>8-NpyvbIyhG6:95)+/1636567.#+7ECAJ&""%+/2+E?>5:43:???CB==GLHT,Esogmn{EHMNDFEBHGGFGFGJMMNPNLMNNQPQLONQSTWY]ae]QMFEGGFBFHEGC>CA?DFABJLLLHC@>uf[[daYVSX]T\=OWJCAD:NfHYINC\P)7S:?eJ6B?XWTRI;O,40'@+?Q:Y.N0B>N($Tl>mgLL;3,0$B$#$N1(+6v@75VYXZVH^aP2+.7*645AR]2ZJ32+;_DBZ=`Z8X88ZbJORGg:9TMj?W@6@Q46DCaRLk\cx|zxr~ńʦ{ygLmnIIVpmsU}pIrM^WRMQC26^N2ZLI.6K7`]TI[A@>>HEaTY@4TEH^`OTQIBmN]SZ=LFCIUDKWl`ahmXT[\OLZ\|ntx΃xLjoRXCi`[Ms}hevRwtwTK{A).J.:7ZC02./1.WLUIDUL\A6./,UJ@A3ghTvWe`fnrFmvgSomJY@DrgnPRyo~\TosN}NnW_i`X[l}e[agohfda^anIGm\TCWgWrKCRYdsJGFII|oeqz=>DGLLLHKAFD}pl[mNC{qScLdSxh__]_a]\aZ[^`ht~xoga]^b^c_bmyK\~Q\[K|zNp~FQPMOIPYUYYVOOQU`ctpt@wqrc_dd]cae_cbgdc_OVXWUSPPNKWRad`eH\;;AMLDOkWtukhZPMNHGKPOPQOLFENMSP~BDGICF|{DH~DIIMOHBBDAB@66AKYi]XbWMLMQPIQOVYTRP[RJPKFHJVSIEDEFOGCAyu||xup^O[P9hlTchhb[HFdb7@ePLHF=FHIQZNFZXGFMVSTOKRTKORNJHEFRIEFMAGGFDMMHO]Y_g:ZY8kdaQL_[5j`c`[YY][X]]c[TTSWSMOI>NOUUe`QRJFJQUVO>2b?_39m;::88]L988ANPLGBKROHGQMPJV13200431//]/\URPQGG=MHMQMO^XPILLPQMESOQPWJT_OTY]\Y\[W^3115^WZVSURTOOKLMJLEKOM/3[UQPPSYUQMJHFLOHJIHLKIGLNLRPQUPXQVRQNZc]XXVYd^`EIMDHGNKJL@@?44RNGQQ>6CZFOMQSB;ePP9?4::GRMOPT\`4;\hea^ba^`ZRJFJECDMg^OQPKHKMUPGESUUVac7;9>??C7_cccg7986fa99Z]abheheae45;?>=1.,-'*.,''--+13/)%-/2/ 0112.)(3:82/20/+24452/-.64/-++-1,-.-*4 1 Q""   "')! "!   #%#!  !!" !!&1)%#" $$## !"!!$$#$#%$##"8!!! ""#$%'$#! !##"!$''#!$###"#"$#!!"""$#"$#$$$""#$$$"! "$##"###"#! "!!   !"!!"#%%$  " !00+#30021/$# *3,/,.-&/120,3*24.6!7$1,2/./!"! +  ,   +    +  +  +           + + +     +   + +1' +     +   +     9A +8   + =EEA<>???BGJGCHOQRRRE{LMMKQMKMz{jpJPFssjpHPHMUPcebghh~|~z~~{svqsUUH:>G'& $'*-4:!99490;=5(9(!& "&&++048;:9=CDBE=;:;>DE#>95#&(''#(+#!*& (((#&#'#%) $,"%& #+(',$(*",!!- 0%". )"929lwxv\}fqL^ErKYd[Yu\cfjve[^eZmKYe\RkdĭqMRN'+'&KJ<&;7" %")84J9MKA8%7)403*,+#-!"(%("%%/-C:7%7319=374/0D0:16/9j023;Z-4HI>?CJ;6:50.8/6<:293<6<>_CK9# +%&$1'+#[<@'4!./-)/EA"+' B;.3TGM=7?E""&(++*&'"&$B=<4P=-'MH8?U.SC>e\WYW\_YY_XWVW\gnwpf`YY[[TXUT^gn=DT154)HL3EK)0.))'-20332,--,05B=>#A>A7469376:6745342)./-*(''&%,&+,)-(!(&!)>0OLOCE=<3-*+((+,+,-*&"!()/-B#$'(#&HAAC$)MGGL%'&)*$  !)4>539/()*-+',)020/,3,&,(''*1/'F%%''.&$">>DJEDC>/$*":A/:@B?=13H>&2P=;83&,+K+.(&30((*/*,(%()%'*''&##)$$%+#&%$#('"%*'),*+520&"-*2010-,-//-004-**(++'($'$%%11))$ "'+-'1!.4&!  !$#&'+4),+,,.*=-,0/020-*)-/*,*()''$&*/.0,!!!$%'("(*-,(('#*')&()+)*(%#',)*(&$"%$%)'(*+)+('%('(&&%!%!(+%&'+-.)*+'###")*(%&&(+-,'"!#%&+'&&&'%"$1*(',.,),,('(+)*%(,,)'(),)*(&')&%%%&'%'#$"! %$! -# '(&# &*'#!'%'#()*&&$% $ #%"#+)&"$#''%(%&#(!'-$&),*(*)')*(*'&&$%$&##$!$!" '%%$$%(&&%#!!%'##!!##"#%&%)')+',(,+)'/32.-,-3/2#$'!$#&#"$($!&& '#&$'+!2''%'1''&%&%(,,+0/-*0/-0-*&#%!!"&5.',)'$%'0*&%+,*+,20.0//./-,./0311/,+~~~}~ ~~~~}~~~~~~~}~~ +~|~~~}}||}|}~~~}|}|}|||{|}~~}}}}~~~} ~~}||}|{|}|}|{|{| +~}}}|}|~}|}|}|||}~~}}}{|}~~||~~~~~ ~~}}|}~~~}|||{|{ |||{{{|||{|{|{|{|{|{|{z{{z{{|}|}}|{|||{{|}|||}}|{zz{|{|{{||{|}|}|}}|}|}|}|{||{|{|{zz{{zz{|{|{|{|{|{|{|{|{|{|}}}~Ł~~~~~~~~ ~~~~~~~}~~} ~}}}~~~}}}~}|}|||}~~}|}~~~~~~~~~~~~~}|}}|}|}|}|}|{|||}~}~~~}~~~}|{|}|}~}|}|{{|}}}|}~~}}}~~~~}}~~~}~~~~~}~~~~~~}~ ƀ~}}} зǾ􉎎섆呦νّ爍񉎏ŏݽ೸õ͕ͣ㊩޷ÿ䯛֮π㌘Ž€̓Ż਩恕曯ĵв‹ü¿ኆтǢӢጸºΡɈ܏ڴ¦ѥ΃ڳŵǽނ突Ӌ܆㊹抧،ْУ⼭Ͼ÷ʆžάඳ󆘀֡〡ƌª⅐􆋆ƿƸֳ̀ļȲ̳񇇋ȼڂ׭ʴٿſڬ֌݋՚킸朖䚁ڿᔉ֚ɱḮɨă˻ͺڂŖƐЅ’򍹮ٛЎ޼ĬԬқೄ™֧ܶ̔䷰۰Ϋɥߍꀳٔ㿕뉹ׁΣ䈘źИĻƬìŝȯ粗ӚƼƍžۯԋձʺɳIJ餄֨ъՋۈ̭灕ܱѤÂʘҩ弻Ŗ̀ώʹث蝨늜󃃁Ŀ͹땶ǿׄ׺̯假ͱиֻλ Ʊ˶аٷ縬³Ķ퉊턢ɶ̧Ղ刎܂Ǹžʻ背ͲʾƻƼ»€۪ĽƷһ਱¡ܫ像¶ɾь@ABGKB>>=:5efg]KSYSZQSbVSW_a__VX\_ee565=>8:>==>=A;9gdXYUQXdb\[Z__f8798fg5897j_ZVSPXl;=;aW\`_aghb86:=<==;8:==?>=:;@FFEDBDDFIJHGFE1B@==@@@>>??@AA?>??>A?=?=<;:9:==<<>>=@HSL>=?@BA>>:9:;;>AA@A?>>@@?>=<;<=;>><==<;:9;I:;==>APJEAA@>@BDDCFSXSIFGILOW[YMKNNLKHDDCDEFGGFILPMIEDEGIJKLGDIKLLJHHGHGGEGGGDCDGEFFJHGEFEGEGHGGHFEDFEECA@@@EHIKLDELLIFBKVTHCGLMH@HEADDBCCDE@@BCFA>?8li;BE@=9k=;<<@;:m9:8==:;9988668?DICCJIBXU^\iZ?@ABB=99c9;<;<<<=>==A;9e`Xd[[ah68;8:8;Ck:Cbl;l^\hh_`am=;:889::;:885>7454899:8`73cf679330133e;.I[EAK8=4).)R56:3P2'%.0'"'/97D5KRQ-J;2:GA06B3:@6I,/9P9UEINW@-D+:2.&$ )>/.AI'8*4869@%D1(-*784H0*-(()('%7%((508<13'C85763?F0;7O.N&2?C85%.>43/11241+42.N+5FHM3C*-21,,),UEX3S(0",3'+%" ! '9/#16/)(MF'E2P5TTTKJT?=>95F9BN{G;UX5MGLZtqP:DLePW)Sf`h]*8)4IYDc92B?Y@LQD>/,+<&(626,'IhtLA\7=M*FEB>AJDGO*"$),750+)(#$$92?H9,11NmP\eZqu;-2(Px2D\Mae[u~~afEyNmXYd==@?;8966!#&).2437EQTNF~~vcioplbmIHFEDIEFIEAIONFA??BGQXQMU[Y\YVT[a]]SGCA83../5-LE>80#30098@FL=:;?EDOGGPSRSSPQV**)+)LORKLMHKGEJMKOLOUO&&$#BCBEEDF;\jfL;=c[A4*!!')),/016;;94-0.0?GD%# &/-,QB:63/.360-59BD6:<44:B?FEGCABILEEGHKPPILOLFDKPPSKGKD}j[PPx{xvrDGFIKKGITQZ\Qlv|}{zwvz{z}{|yxsses~~u}NQTUVzIv?tA@EKXSLO]gk;@A?@;8ae[^ZhJGWQO``JUjXTa`da[akkrpbofWb}AB@@v|@DIFJLFEDCCB}CGILMPSRNLMMQPRTTRQQRVWWX^a]VIGGD?=>BILFA>Bkk{EJHD>:nk76UPNDJPEIO1SBME(@j[bEEea+'Q:M>///1987:2G7%*KN7D&%L63.iY^[D7C8CNS&A;-%%02,8WYk9=]V_c^SEPM3=EKJWJ?>HJ"@F&.2,@cgW@N3S6QO5OAAL3:Y''')//DI]tEa\_eN)LZ7[3[HDQE=234P634OP5[Y>(EK7,J1V7Dc`5WD`h^ITJ85SL*FRLdX4Gl96?G;UH27AA;Bb4EHCKT*]3BUe]Vhika^d]akemdvϚi^w{wgCJp]no^WX}{~||u>7,gPU2=I1Q[`=28E>C505\L?sHYE99]33G`V:0112310O5G\L,X]SNDETXR0ZRDq`}uA{i]Wud]\LC`dhn<=pYLoQSJvI^FWZi`Mr^\`k\gwXZ_e`dgjkrztsmxq{APxPOUcrBI_zADEBB@AAsmpzBB@CHJKQSOICACEqgdd]Bh[|Pc]`nfc`__^S]\\iwvoihdfb`iuKcwIdHTTYdlpmjc]VTPSYPWWOQSUW^lnos@=nnnha^]]cPWV[heW]KHXSQSOPROMSb]XTUW36=IJHIZn]ye]VTMKOQQPOMJA:FSQPJFD|s>BC~A@yADFIFDGIH=:9==93=MJP[XSXZLNRSNNNPXSRUNNSYYQOLXWLFDMCFz~ws{wr[RTWRaWg`_A=2]ZMMPGrJLLOOOJY[JCF^P]PNMNRQSNJJIJUMFHG?A@FMPRRWWXZd<^V`mid`\Vb_^][[g_\Y[ZZYZYJB\jZJFIDGK\clqgNGHIOQFC:13>;<=8<623\3@<96`YVWWSKFHVegS@?;BDBHJIHGMM0\[NN//-122TU[1da_cYVXXVSVX^_X^ZXVUPPSQMMOPKQROPRTPTSRTOMMKNKKMJ"JMNi`aYP23>;aYXTWU[RRNJKKONNRUVYTOIEQONQPQPNMTTXUZVY^]WSUXVWVUZ\[VXQR5<4ac^10aYVUUWTQPNIIIFDCDCFFDCC=840;44?G`6H>@EILEHDKRMINTLDM\V144523//../^SORNAIL?JLKU2ZROLKJONOHQSTRRQPRQORTWTVSZZ\552^YVUPPNNMOKLJFIGIGGJ7^ZUUWXZVQMJIHGJHJLJLIIOOUQXSNQPURONNHTX\XUYZYcaEFDA>EGGHNKOIF5PZPKTILDH9IQUPA9dR\9XA192xQOQQU]6;6485ec53ccTRRMRONLOVSQVRMNJNRIFFPKUWS\=F<5ba`Yg9:<=96474a`ccbd`acc55>;:e024/"(+),''0(&),-00+,,-1132++)&+22.0/1020/51/,,*+50)-20112,%,' !!  ""!"!   !!$/+%#""!!""##$,.-%##%')/0/'%'&&%# !"#"""$%'#! !!#%$%"""#$#""!!!"!"###$$#!!#"""###!""$"$$#"#""!##!   !#$$ !&&$"$+)""%&#$!!2/ 24,15/6- "#+,0.4*)0-&.)-//!1!+23*)01---2"#'%#          +     +  + + +                +( '/! #($ +   + + + +  +  /a    +  + )"+FD9$, + +>) &/'8*!%@!,+$#" ) # ( #&#,"8>&('*%)-51;HHHD32  +" + +!2;*C' + +  2'0H0 !       + &1) + J(, &!&# ! &*4 32!*-1-,00.+%" +  $*10)%6  #!"%"#'+*)$!$+-253796966<>>A>?A8&)*-25;8^taE.2[T9&!6.($!  '/'/7BIAE<57I<7?F%'@%'/3/2526.-4;9??A>=>DGA@DEGMNFJNJC@GNNTLHLHqaRW}xomEGEGIKFHTX_fYq}y}|}şRVWRLV.D#B$$()0+(*279"# 48.25%'D/**44(1?21;9<748?@CA8@7.8I%&$#@F%'+)++''(''&KHJ&(*,+.0/,,-.0//010///0474-#""!&% !8=D&)'$ 73'&010122*)."+&$,%!  "!3/-$!+'" $!..14$  &&,08 /),)%$#""!(--'(!"&(#."(14!--,0% +)&! #$/.#&,+& 2.'! )##' &#$$","%&-'$5#$-#%./9&08TBE_feTIFyy|spf`;J485??9gai\Tf_KbVVchoU4(;:.0FB@:;3 )&) !>:?<<>@?@@$.#*%)-.*(,P):-$"'0B7G<014OIPH885C>MLTZ;Q<0=691:=:G2,-&*+4>M83SIRBEWKM<"""! H+-226"5& #."#,3!3,9/' &%"#&&$/+'IQ5DB+SB97LBB90.@GGL./O96C.2.K,F9JMVM@dWYYcY_pY[^d^aegfizullhtgj7B_<8>EL,0:J%''&%H%%%B>BE%$#%)**,-+'$#$%F=884-81G.73P9E^OWWY\YOZYYbox{uljdebe`WZa8HQSPN+9(./1:?E?<95.+'*1,10+-.004<==A$#>??:54415(.-.76-3'&2.+-((*'%'.(&$%$%&%&2@3OHYRE931.)),..+**( !,++(&%?;"%%EB! =?@A@B>?@BA@@>B@AB?;;>?@<:<:;>=@?>@AB<<=@CCA>;:;;;<>;;==>@>>?A@===<;=<==?@>>=<<>?DJC??@>DFA@@FVabNHEBBEIIMGDFJIJFGKDEDEGHGHJQMMHDBCGMLIGFHKGNNLKHGGIHLHEGGFDEFEDEEIHFEHEHEFGGMJEA@CCCBAAACDEFGGIIPRLODDQVLBCFEC@EIEBFGDBBFA?DBB>A@C???:;==:m:;6]l?=Y9;:9979@B?>hkDo>Wi]:?A@==BHHD^]^\WY@?AFDAD;9;>rk;??AAB?B>=jgjj^ebn9h]f9:ghkj7gei=Gfh@fXZ8=<<:67789998:79=CA_7H89a9aadY422]N94A=9HJI[44=A5(,NSP[0(K+F13/%#)=&-H777/L:.8S4/TB,IHFF6+1'27@LDDA437?%$"#%))B/3H.*76$8)%)D>,71,?!#"#"$&"/67;JCB/E6%V=>)?3QI@HK:?0'!?+?;<#$=J32*0+312.)3K(*4)3(''),2E-K ;VHAL&  !(1 =-1!*905+4/-7I.1LLG)4(x&2&&248$"-0*5*XR"'9,67B/ ogIT?Q@98QaC4JDzx|acw~`llhm}jusK_qVhEEMWUbcuYZxrx6j<4*CG46Ng)A#,2@E>M(+*PTUI<7=HR?@B82c846?;A8HFCCEOKIMD:73+*2;CHI>)#6G@=>?AABC@<8:;:;6< 59!$(+,-++3@;3-415(%&%)"$DG?7/,.*79!#$E608GFITU\XSD<>C;?BB@DGB<@qZk{FMVLCDB;\SbhWigh`]\XH:dEF:ES67?K\89<:M^YPS7K>81-/DPFB+-A4GC;KMGTtGa488TD:-5/6.43@1",F''1GA:oCD2"3TJ7FdR+:S:8E[8W^`=EQI;CnA64EFD=T=FGDMF-.IJP\GPGVTXdy|TzfF|aZ]pcYΚƸxehTWNJQBrMaxrYSkutons~~mb_JUEI((,.=:;14@RW[>GT8b5G_/4^74ksOKQuoBcOKj`RZOyfWMIrucZ\[[`_]YWZ]`fdcdgflxrlipjkn}CCC@EHSv:Y@Gr?yqsz}|yrpov}}FFEHONJDB|~FuxIoXey`T_qnjlwuntX]qqrus~}\y_qNO^v}LTN|rtnXY]bb\c_JKWW]krkkqmiyqjfdd[W^gW]_fjk]`TUYZTRMQRNhfZYUd[a877CGLWghnua^YY[XXWRPQKNMIGMQQKCDEyssqCD>EGEBGKGFCyDA>?649BDE\6pMKLY[\^ZSMTOPNFaONNMPTXVNOTORIJJG}}tujf\QQVENqF\B6]I8:8|TYQTNJLLSSLRZTRNKWUQTRPKNQSPNPQRWRMIG@DIPNRY[QSV^48X[[`gg^dajc\UZZhpYRYZQMV[BAf=^ID@@N[ddg]VQKLKIFA99g<=:<8><=7e7?7=A:>B]ZW^f`]7g`hjSZgnfda]`e697243529??<8524388865bZTRPNHGVRegGCEI@@C?F?INW1PYLOWMV1..1/][5511ZWYWWVV\c___[ZY\RQQKKLOMPVROMPSRWQPTLKOONNRVUMNbb\ZeDbL:7_YWWZUWUYSQPTNKHR]]ZRMIILHJNURSSPNHOIPNVSVYcURTYWWRQWPSR[4X219833_21VHV[UUSROMKIFCB?=Y\3;6521312/PO\NGIJ=93`cgYUbg50:AB8794dc_\ZX]bdbe9=<1-$&,-,('-*+13,*-./*)'+.,(-.,4/10+,0,,,+,/03/552.,+(+0 /-.101+/.,052   !! !"!  !   "#!!! !"&*%!!# #$! !$,44($#!"$%$'$""$%% $!>#"###$#%($%"! "&$"! "#$%$#"!!""$#"$$#! """#"##"!$"$"###'$" !q !!#%(($(! ')$ "! "#  ! /)2&.1 .'2(!!++..)%1/0.3301+30).,04//,1".5 0*' %"&*# (  +  +        + % %          +   +      "%&      +  + 7  + #-2<,* J ! (%!%!*$,:A8"' *CB*$)=L'%+(1!"A@C6*-- +"' #% (().&  '5G7'   +  -+F   # '39+&0(+N(@?>2HB=978.083-(%!!'.:A=, ).,0-++('# +     !'(,'  !"-)"%! "(+&+,//*&.2<77689:6>=8 ;6)(')*0./5{jagcNAWA2(! $#!!!!# $-(%  (" *77FQSLHHFDCPMQRDEQGsV9i:`ymzADOKDAAGKVZW[Vir~zwʮWWQ@=E-/**-+(&0,(.-.387"#!-$!).-+0*,0-&%**2--9@@>.4/6./65#1.->C(&(')*++)NJHBB?=?DCBG&(('',-+/-/113442001447;9/$#$ ! ## ;4?E'+1)#!% *0'/.311/.%2# !,%)+("!""$)5$ ,)  6 %,&,%#+.'#*%*)5%/ *$ 3/%2"$#+!'#!"#*&2( #%(""  $#&  2 +$'/! '$$./19',,,/.KQ=2J0T^oVvPXf~V50+A) >9JB#'%+*+=;859:91;-G:V.70/2F6>BJCS?jq;1& $' ''# ;%+'+/2,4656*).*73[= !72 )"3"/0,(&$!!') $!$)04F-':0#(LO%'1[mL2>1+:8291VTJ?=?xgh]ZYWZ`^]WVY]`dbadcaela`_d`^cn88979:D]+F/-F%F>AFIFGDA=BFG'''(-+)&%EE'JBC*E?/%5NOJLKF7M2>n^ZX^kkbkOSdbad`ktotGSd;GV+)4DFRR,1.PIAC>./143395(*/.2?D>;=99C=99:70,.4)/0246.2-032.-(*,'52('%,'+ $)2;;?IJTB55232121.--(+,($(*,("$%@>?>%%"$$#'*''%A# ""'4)**11441.+/++)$3,*+*,.2/)+.,-'**'FHJHECFOOIJCKIPPFA?9228-6O0E4$.#K4T2-1,+*)/.*,301,*2/*.-+()++*(***/,*''"$&*(*-.')*,,-,044/3062/*-+49-*,*&$*--/&" %,0460,($(A'%$"4 !1 .**04--5289),39442/.-0,'''&##*&/2 """#%$*$$%!$)()()''(&*-**,*)),'&'$$$&%'*('&')*,''*%$''&%%()%'4/)&-."+*)),),*,)'&)$"!&.-+(%#"$##%)('$(#%$*&*+1(&')((&%*$%$$$,%'+''%$$"##" %!  " $$'%%' "%#&$�'&!#,#!##""#**&$$$%%#$&#$((*()(&'(('&&%(('&$"#!"""# ""+%'*,**'%$"$"##$$%$#"#%%$&&"#-*(&&%"/.*-111-42#!&"" "$$*)!%($ #''1(- &.'C(%')('+)J+4**'%'.*'(('')*'')*+%'*.(((,1/13*)/1/2/,**-00,+  ~~~} ~~~~}~~~~~ ~~~~~}|}}~~|}|}~}|}~|}~}||}}~}}~~~|||}}}|{|}}|}|}~}|{|{|{{z{ +|}~}|}}||{|}|}~}~~}}}~~}}}~~~}~~~~~}}~~}~|{|||{|}||{|{|{|{|{|{|{z{|||}|||}}}|zz{|zz|}}{||}|{||{{{|||{|}|}|{|}|{|{||{{|{z{z{|{|{{|||{|{{|{|{|{{{z{|{{|||{{|}~~ ~~}}~~~~ +~ ~~ ~~~}~}}~}}~~}~~~~~}}}~}|}}~~~|}}}|}|}~~~}~ +~}}~}|}||{{|{{{|||{|}|{|{|}~}~}|}| }}}~~}}}||}|}~~}~}}~~}}~~~~}}~~~~}~~~}~}~~~~~~}}~̀ }}} 󆓙օZc¦ƁĴչڈ၆튀ҙ酗Ȉᱝ˒̷ҜʙϹ޵͉ϼöή˾܊ʧŹܲ뗿ٝžƐ؆ڽәӮЀ䣦ҕ܌Һֲڼ߾Ԍ䛉늦붸ǀڡэŲӓىՀôϬՁɸԺ𝤦NJ܅κȚ쳞ܣԼǦ¬ڀ鑃㉧˃ϘǥԦ̺݀ï铲и˚ij⯩̖Жӝ嗀懒󌩢͇ЏꐹĶ°ǜ֮­ν榃ŀ삅递̏վϜ遅Ⱥűɋ䚅LJؾڄdzӍޑǮŇ񽪀ůԩፈʢƳ⋉é߱ÃՌ֗꫖ߋǻꆜő耴ߖ᰸͘얳’ܢ鮛䚟񏒋֍㭑LJĽ̪Ǎԛ͒߱桙ܘɌ叽Π˞֩򀶭գ͡זĽߓɚߦԲũډߒܗƻ񅈂ŸشĒ㷊܈銘ㄞ݌ʷȀϵ˲聎Õܡɦ鏦Ȁ˩٠¼ӇЯǴ߇ѺكґųҡſøҀռف鿴ο݇݅텊􋍇νݴ؀ހǽľͻ·Ȁ䂑˩ýͅȿٙրǸ¿ۋǽƹҾᾓƺŽȲ©;Ȼоދ􊋎7;@A@DCDEG@;95dga_WTUX_`aYTTXX[YVY[^h64gcfba``6]85eg77d^^`[XUTX[_^h9=><78=;;:oaXSOJY8@A:hcbee7e27d[`\W^`Yiq:8<<<=?AABCBFGIKHFBBABAAA?>=>>@?@DABCDCB?A@@D?@><=><@>=<<<=ABDB@@BHLD@>>>?@?>?>AA@@>>A@=98:;<==>=;=??@=>>=<<=>@@A@?BEBA?@CGJGFDDA@@AB@CDEECCJJ=;?A?>=<==@>=;;e\Zs;99;:9=<<;<>?@AA?ej?3i=7_i9=@@@ABFJGdWJhP78:BEIA>B=@5:>B?7nTPin_Oh7mcrg^==88@>A?a`kg[d;;78;:557997Y]86P[50\Z]thoCAWUS`h8LHa96_86/A]R;C?60U2U1412F-.8+! 6-<<4+&5" =@/L*.T4-KR2=5D&372$&3+ISAL>448A2C:;=E48/=;A8*52/28,&+7,,6G.+'2-*',040+(DA(N)C>J(60& %>4@4:'.>=1!69GN2,?/@LK538>)PbmbS?|3C5_tngFO/6VFO=YBfbWn;>Y8H31'@(?'$"0=;$.LA6+0,Q68818H/Nk?53f`TzxXDlafu{UMM0>4H_yfU@ZhZ{g\f^`ttZF*Y8E6\^pzj_P}[eRp`squB/0(+.&^-3.4.)34.:%'*0)+UVR(F<96>>/;!".)2(9E0CEDJQFW@.)"'-(''.'@I<0@9#+7!''($"#$.7"#9;8D6%A< ( -H/(95M;G@&!$+(/$&$&6%3()&3J.T98KX\=L_d]R935GWX\XRFG>88=3TKI-<85D^X:&1!=/3;;::;8;@><716=? !!!3:C=;9mUcnT^c\. $*220359;?; !!72%.4;!*# 90021/.39:;99RPG:>KUJKJ?:EJLH'+248<97OUUS3]5>;;@<>CFFJKE>=gcnno@FLLVM>=>dh?hfcVMH:BBL[JJE[I6IJ7@8eB=4GD9QV4;D-63=0A1 %LF#HHE2/742>@'29D&L=EHWpUFR319D^@6&9/0*>AU1OXR>@>W:7,2386[I95=?E>DN\;6:7Z@6QCPTPIdSU?M7TU1/8QU0,24(A84/8O55/S8NHM13),SQF0 D5;N90/.J*1O;RHX?DF?8b9CLI6c:2U:<86>?8^dbU01N2,PCJZVUD[d{dagrtqpo_IksnkCkPyQrHWfazرwnLKWqqHn`]QUvvrsuvnidcm[AJVLb^\V\XCGBl>Hh`a`^_suhifcbamu{ddjqotoj~tIDX_NzyGC}NC5@iEq|{A{vusxtAGHMOOJGIHLMONNQF@oDPMHGHHoUa~jXZjmTcjSXYSONMJtow|llkgJ^`Z^\ebijgglpm>Cwm_dd_heZ;ha\^cUOXZ[ZVVSSU]f7MYdTRSPVX7NUkoZ|xlb`\d`cWQNOQLKMMKOOOG|yyuDEFIBDJHIIC:8852UjUSTan7bfced\[XYfc\RYc[MNQR`99]LKHPfd^cgVYWOC5`iQ54W77h667i^bi;97=I=AQRMOX[fdbe`Y_Z`mrg_]Y]725998=>=GLEFBN[YWW_SQ013WT]011`]1[XW_^XVZca\]b^]ZXSOJIRSLNSUYSTMNTZWTROLKMLUZQLHKXWUZZ[VG[3/0\UTTVVUVSTWTSOFSVXTJKQSOOSZZTQOLEQSRPWQ[Z\QRNO\YPMMLH43aAWS.6;8_21ROY^YZVQPLIHFA=9T09;7>?<7@DGCI>GKALDEGSUZVSBGK.FOMPPVTML2P56202550OWXOKKFDJIKOQSSPLMNPNNLPUUXVVUPTSSTTQQPUYZH74]ZROIBKLIMPNNKGH>,  )2  + +     + + ). 1 <&%9HU=NafX;,EOJJC9,+%!"'"501!/-.>YP'  '&$"  +   +  + + $ )$&   !)*"'$$#!%(,)+,*,*+,.17:59=;07:< 9')&&')0003kZahKTTL"!#"$&&#&##') #!#==7+3@H@>;0)39;8 $(+/31,E0.)-/,,*((,-3572248<*9 697 (+.'!!-.,06119E9($446+12)2739CKGGLNHFIEB>>=;?=ADB@F%'((')*,/1/-/12243325846879;8.-*%&# 66979!#'',&,/2/.(#"'2)$"!  .""$"& +  +!# )2%"#1&"%#!1(!! %+)$$%"0*)#.))(!!#""! %  $')!")/"#"  )%5*"#!*% ' ",!&$-&'-1%2)-51-$,;TS\iyzdQEU5%9:53":*?/A#/@56F[ziwyUftki>@.6?FG!)D/3:#!D6VY;?;=:;;B=8 !!0"*#+% ('&&+,@5/ )%$I9B?C/5.2LA80>II.FT:@B;"#.*4)*&'(3+.$)23)). 1U!%$!/! +!*/$" %#$$!'%/&()-(%-!6.'4Y[5=A=WKT388R,60L1:o_\\]]\pregea_\dmr_`ffa]UQUNNX/a5AH?fi=:sC8-3S/GKG&JHCDCD?I%)),+,''+P,.-//X01&!7'0.+((*O@2P:YVURK?wihsw|z=ER]onlemFW09>HP1440-.-,PMB>/GMJD:575:681-+,-**++(**,'GDB@AAK&%%&GF#%*))("###'""%'##%1?802)+.,++,/23.4/-/461,((**KIGKFGELQL>AFRIAFA:B*KJM2T/(I(#.*$3//1./0--//*+6=@*,-033220.+,+/.-**,./-)("'))'*//(***3*()18/3233.-+,431)*+'"$&',-%#!&31.38-0.($.3&)55/-0$&'%'-.40043.1+-6>711..0-//.+)'% "++)!!!$ #(&()/&!'%**(''(++'((--*+.+,**&%"!''$%)*+)*$%+.,*)&%$$%('$#$&-+)+')%'($%%()(*('(''% ()))##&&&%'++)('&!())'+&-,-&&%#+*&###+#")##*,))&%&$#"!%!"! #% !)(-*)!""&%'%)("! "''$$$! #"$&$%'$"$&&$##&('(&()&(('('&&$&&)**&# "! !#$## !!('((,*(+(%$ %"$!#("!('$$'$&(*()''')+*',--.80!  $"'"#%("#!'' "##%$"$"'!#,+.)D'$&')(,/.1),*'(*+)'&%(*0(&)('(*&)..(%,0-/1.*-//.-**),-/1.  ~~ ~~~~~~~}~~~}~~~~~~ ~}|}}}~}|}|}|}~~}|}|~~~}| }~}}}~~~~}|}|}|}|{ |~~~}}|}||{|{||{zz{z{|}|}~~}}}~~~~~~} +}}}~}~~~~~~~~~}|}~}}}~~~}}|{{|}{|{{{|{ +|{{{|{{|||{z{z{|}|}|{|||{|}}||}}}|{|{|{|{|}|}|}|}||}|}}}|{|}|{|{|{z{|{|{|{|{|{|{|{|}~ ~~~~~~~~~~~~~~~~~}~}~}~~~~~~~}|}|}~}| }~~~}}}~~}|}|{|}}|||{{|{|{|}~}}~}}|}~~~}}|}~}|}~} ~~~}}~~~~~~}~~~~}~}~}}~~}~~}~ ~~~}~  ΀}}} ہ􉊋む񑈃鋘䌄򅎗޶؃ͥ×Ϛə鈬׿˙“Ӌ΋їѹ藮ħ˱Ӆ׏džʴň䊑گᄡ򅉙̼Ԩʭ뀊㊻ࠁ茘兟ʐՆʳ׎ٸ妯ֽ闼앁˽倿İńɁęݭúێρԯǸˁ㻔͎ꇁ;ʈï⽙ٞń럔ʱժ׿IJĶ運⦥˼śྩɻп醁悊뵛ϼаŷȠĽ۔ϣ䆌ד؋򐏅لʘ܀ᑪʹ甑я٥ؑĭҊӎ򔽫ߑ˪Һ܄̵Յ¬Dz蔢ď֟Ȁ‚㽹ɹ𱒓Ԧ탽}쑬հͳ⚃ꗁɡɐǞݵȟ̕ȞĞ䒻Ɛɢ۬Ǩ꬏ޥȯƹ̀טÌօ˽˶κžďק܈ϽƴԒ߼ꄔꄏιоҌӴʪץǻͮҸӶЂ۞Լčƶ݁нǾɿǼ搔Ŷη΅恞턅¶²кվ녊»˲ӾȰ̾̿˽ٙʲ׻½½θ߾ӿɽīЅĹǺ뀘񁇉4:=;=?@DDDBA@>5366465fd^U__^f`ZWV^b`]e`]djbegcaaa\`d4e63986jnlh`[ZZ\\W^5:?D?;;:<>;9kbRKQi:=A>lfkgfklafogceg`UVds=;76@A>>ABEHHJKGDB@CCABA@?>>BDC@ABEGHC@EFEE@ACB@C>AA?@@@?>>>@A?@BDCBCCA?>===>=>@>>@AA?A@A=9::==<==<@?>===>?AACC@>=?@?A??ADBABCB?@A@ABFNOKD?@EQMKIIHLIKOKEEGHHIONHEMQMLOURMLOLHFEGGFFGHKGJNHFGGEFGEBGC@CDBADHEDEDDDCCCBBECCCFCCEHDFAIFBDBCGDCHJMRIGGJI@9=BA?>?@==::<9:ni^8<=?;98;98:;=@BBDDACFknZli64>>E>7<>C>86c<==;6_gbflbkmg_jqrc>958@BA=s;ojXTo:h_[]bd:<::V=5b_27;<>;40IOU4N\@6555ANH8bXO>M[>:44S,B5293J02,!0+**,A;015#+""(%#*3:J?=0BD4NVHH3@<>I6-SE.36("F*B(#%1*!02;GDAL00.+(6+"$#'(&%+!!,4.3-HeL<4''G/0?07(>22&+76)&2D4)/43453ON,2%*0-&)+*G*F;0G>MCAF#*$"! (" (  !!&4)A0'(=&,4/,1-.;%3:KAfv7LC5gm}~Ja_xZt.MLM&&?M7QC;>U,jIUJBHBT4OE8<6/iF_Xd}@F_ML:BGT6<3:$43HB;,"!+,AJEIJk/@;>EsTMG%Snw@TDT`A}nh`N]&3)5hfOMx`y{im.uK;b[wg?j`en]gqARwkzzx^ho7725#$!:<)..*KE*H''FDTVPBIC9.)0+(,1 &&+-:8=80B06:3,C"#$*B;//4*%$$-.,*%,2. *$*&+P1!7+,=5(#<V722`K@O[_P, (-/8<@:+71+.5=;+,171+05013;JL<:>=79?E@EFCGFRINQSWWLNQPJMIGGMMKLKKNQON$$#A>!>6:5140-1==37:9<><><9DJKGACEHMSZ\\YWLDF?=?:a]]U7ENVVF8?6KT]U8R<;.2!)+B2]\3#SRW`e5/L6B-)G@GQZ[U\\`_{U,K@@$OW)D=L[;?@\1XI-b79=CO;(@B;7LBX7;[92]9mP??7OIA18':0@=H_QWF?F,9EbAKd[;?JT?/G56;3LPOD_\`YOIEEA4WHOh56EKc;BaLI0SHG3CEUblF{jrpn}nV?dJEF=RYaZm\WUSmU؀y䄁̠QZjM`cgh^R{ndpsqlKPRU\4%+U>4aTH>k9=O&(=-0StWL2,46**1.K6\`_]dX7i[NGNRbNLB|D[x]\MPUV]]XQ_|rïe`fgUFdwhMPk]jLuzpggrybq{smmCmRnFK?8Shd`^Nh>NUWQSRQRQNSNPQRVXZWTRWQYPJGGJ~~rkbmV@zq}e`R\I=9=8:FmHWV991N\TTURWYS_^URVX\]W]ec\\^X\YVV\[RQQOOSQRQLMKPNKLXmfa\b=^U:IDCBAOF@@NSUF=ZSILRRSCK>@HEIMIRKW[YNHT`12`394\^\WRLOIKNKTUSNLPOKILORUUUTWOSTPNOQ=OWJ87.VLOLEKHHILLNJFK>EHCW@XY^[ZXX[[UUUINIJGDQIHHTTQOYVURTOXQMRRMSWYZP5>EEFEHVVTUYYZKDOPORKNBLJBJKFF:fSZM7@CVVJMOLS6=7][b3445:`eSW^YXVWTOOLLILOLFLQMZYT^]\\_75Z`367e]YWVVZ]f55@---(/.-30-+*.10-4.,03.13//01,/0179962/m,/43,('16352022.0743452+(/7   "#!!" ! ! !   !   !! !!"##"!#"!! !"" ""  "#! !#"/!!""! #&'%#!!"*''%%$&%'*(##%%&'*)%!&(&%')('&'&#!#"#%"#'#!#"!!"#"$"!"#"""$""#""#"!!!"!"  " !#!"!#$(! !#"64.#46*3/+++0.04271/*144,754'#3.((*--&!%%""!% + + +         +    +   !-#       +  +      +   + +   + ' 2   $#   +      +       3 +   89'#*2C60(2OL ! +  #*"$(&)$64) + *')&$9J$%#aNVi ,,*-0AG>46/" +!.082&1$),+$0  +*% +   +  + "'J /68- ?77>Ww~tlhhpK-3:FM;+*#%+6%('4JVXE !# + +        +  #**! $"!"!"# ').01*.11,3335789:67><:8)'$$'.3749sMRdPe+$+&+&++%#"$$'    -66:??6BDF@373.' ('/645-2327:7863@EGD=5AB?65;9=?@AFG@LTWHBFPtyqilI?hr~NPY\b][fe~~vuz|RQBZ?10;2'&%'''$-.*-6875284&*7=012>,#&,0)*32019@-,)3::4/3.0#,8DA?EFC@DC@CB??@ABEE$$''()+,..0145444556459<>?::9<96/%"'&%# 46:0;"$&'*.221/.'((*##+00$$)$"""%98&&' +=/2!'"3*+ '%%!&&  $# &)'-/"(*+(*,-/=(% #%)'#*## (! ''0!&-$&+$+)'-$%$')%##"#)!/%43$80-&((.9/g^osqgTb/-'&&-2:6<5)C?2.13E494_ab5LbNc:.6;;C?9-.V;8G35jZ\?PB+'!%()2)$(* *-/+*.)1<#@*%#3//+(.#/993.&"56%-'"%*%+*#)0/:%5;'*$490615DT,'=;,90:9:6GUH=XKY<=ieibabbppjdibfsnicffs?C2A6H>9C/7+OK>3[SWca^6HJ33GIDCFB?88E'&)%/20&H@Y30330MOL+0,/0-C,00+GD@;758,QLLK<8?L2?S]WRLJCFBCRX.-0453/00WSFDF>=D?=98CC6335;5461799$&&C>AA92./11'!/:1/'&23774673;*)'#*)*/#6C?4LLG@61:<9<2.+,)**'++*1-*&'%D@CEK)()+&)G('(L' (!#'%&#-*//+,.,,+),)++-1230//2.4,)&'*KIKKD>9D3!NG@PJ:82T9( /&!&.-.0.24/63.-003225884473411132,,,*+-+-+''&*('%+71.+-5)()/21321/00166/1+$!(%&-+3"(:5/-*,-*-) ! 0- "8"" !&%'(+//-4:2//4?0+*,00*2.0/0-*&# $*,1&# !"!!"(.-&# #&"##('%&()*)+()/*+*&'$!!!'&&)(()*&)*-.(!&&%$%(+%"%&')*5/(%$*%$#&%&&'%'&'&'**)*)&%%(4-')**+,,'%'&%&&-))-*$$(#$,&!!& +'%(+--"/(%$"#"#*/#!!&!#')!,'"$%%'$""%#( )*+$$++(*)'&#&!! !#%!%%&$$&$"!#%''&&&(%'(&%%&&%&#('!#"! !"# "%&'(')((**'&& $"$!%!!"''#!'&(''#+&&&'&))%)+-.,!#"" (&%&'((!$%#% $# ## #2+1&023+$%'#%*)-.3(*.,+*+*'&$&%(*)"%(.(/.)-,+*+10,-,/,/1-,//,***)-./ ~~~}~}~ ~}}}~}~~}~~}~~}}~~||}}|}|}}}~}~}~}|}}}|||}|}~}|}|}|}#~~~~}}}|||}~~}~~}|}}}|||}}}||{|~}}|{||{{{||{z{|}|}| +}||}}~} |~}}~~}~~~~~|~|}|||~~}~~~~}~}~|||{{|}||{{|{|{||{|{|{|{z{|}}||}|||}}}||}}||}}|{|{|}|}|}|}|}|}|{|||{{|{z{|{|{|||{{{||{|{|{|{|{|{{{|}~~}}~~~ + +~~~~}}}~}~~~~~~~~}~}}|}}|}~}|}}}~~}~}}|}~~}|}|{{{|||}|{{|||}}~}~~}}|}|}}~}~~~}}~}}~~~} +~~}~~~ ~~}}}~~}~~~}~~~̀~}}~ 턄Ӷ􂅀΀ح񀊏݇쉜砋ۻԫػо̂땍ݪ͐ՏЖɭŻµӗڀ܁lj⌵󁓏ڂ𤮃婋ѽߴӊΑź߿ϱ넴۠ཇŲծծ¾ܸȕռԙ߿ʹʫ񕬫Ǎ‶׫ȫډüӴԈͻͼ낅℅Ѳέ̢ʶχ犈֑˻ɽƣźëɷũ퉦Ӹ锬о߄źӦƽ摜ۃՄ߱ҢȜåՅ֝܎̯ăÜؤϱݙɬॽ݈ө޿ԏƞȬѺ櫶΄彡ɋ폍򐕨⍀ρщܻ׈܊˵٢ӝœΓ禈կųςٵם㉕߼ꓴӾ楥ʧꗋ݊껷ׁΗꄀֽѡθŐǷؾޅԂ݅܀Ƿ˷؅Ч҆㈋ŋā駀򭍁ʉӏښÙڭ܎ѕʁտҼſ𕜎ʺ־ؿͣĨڛ엤Ĥ°ƾǾķͿѻ˽񄈁Žƹʻſļ׼íŰʺ׾кŸļЭĿǘϯªӘҴ󒚒ü삊􉍎߀]e5cc:86;?A?<;83479:97:852e_`b\V_e`X]chkhgdfge_becefk`ag57976mkmnc_a_WV[bg8>A=89<@A>>9h\\\]g;:hijkjjhhhghegq;of\Xbj98==@@@AEJMJDDD@AAA@DDCC??@AA@?@CEC?@@ABD@@C@AACDBBCC@?BDBCAAADCDCA???=>AB@>>=?AAA?>>?>?@>=>@@@?@@AA@@?>>>===<@DEEC?>@DB@@??>???BHHC?@@DGEDEE!CBBDHKMIIGFCDGHEDEHJJKIGGJJFFHMKIHIGHIGGIKHFGOLJHLKGDFEHJDCDBBDDBCDEIJFGDBDEDFEICEFGBDFDHJIKGHLVX_efR@ABEFFA=>=?B@@DB>=;;lg787;;8:;;<<;=>@ACDBCCCFD<9=;=A7e^]<94@??A;76<@9?>7mbbY^n::[V:<=:?;g;LSAj@>il_adm9m]KMm7:;867248:9;=99;83i29fB9LB851567383TL-<084Q27266.;O5"/.-)(45--) &$!PA]6IM>1+.:KGLD/0EKOIF*2/&9,&3(.@&%519+(F+<2/G'!, +8+"*;$&357 6LNN:>cyrg@BRWA!:;Y::0A=705?^aDN=6\D<8?CED;PQ;'"##,3:://%233.6IB8R9DG,+409NJqnyKY1U7cdxlmURt.7;I_gxqYRpqmztfQyhKrdz7OudkK|gpOO9`fa\K_\Κxn7*tRe5M$AC0%+="'&(%>?AWTJI8%(1 " '5::,G=CF/22-=#""((../$$"60-+%%7A0'-&.9:71>-?G?9:C50Y:S1V7>3DT\VXdnwwwsskdam{wwrkgba^ZLOG%#=95.*&&&*RR:>4;JG@660)$KF> ;;0;9>CFCD$(&&#?G(+.+''))'(IDI').177:CCFzzx~zqeV[hFGKPJLH=@JS\[XVOKHJLJHEHEHIJIBo_M?.@3''),-12,$)..1742/.1;A?@B@67<>:BADFOLSQRUV+RNLLJKFKGEEGKLLLKNPF%#%E==D=056<@79;uEL[lTEl5*(-*/6:=>>F=D! !!!7-*89!%,+,/458 !#!!CBGY1*&L*+,)*)L(*1369<>>@?>DKGGRZUF=KEAIOOJFz{|uuI}OPTUQQQTWZetzxwywuxtozzyuxq[pq{sqkw{{sWQQdNRMOTPJDEIIECCKOQ[kpX[RRTYcd_`_c=ED@8a]WUMQU_pob`X[QYT`ccjg^HNhjhmnooleabbf^a^fmlnmmmtw?BDFGGKLONOPPQTUVNGMYW^bcccbb``_XJEQMMKLF<:?Awqszz>EMSWZZVYZWVVUM<^Z8;?>LRVO>e:2\bI8Y6g?)5T.=c87C?;@>SU2AE*]a^[CGP[UJFI82A'5ZF/LL>bGPP@OXc^6%C/&3H69E0[.'./.EEG0>?C1ZQDCHA.+K_ZN/B1;<99:GF<:H:+=/UFGSXZ99$C,9.R>?R)@VH5>;GXYD=JF;A?;WG[:;MO?:T:Z8>HEf>CU899==B@D<7gJT6:7CBSWUV<;a<`7XN_@=@_P5>5=@eIFugmvmztj^CX?D7EZBxRtOBYfr\yĴcqbeM~QfuqxpimrTZQbs3/G\N42[I@q:TD3ELC=?/?49TUX5G2W^RYY8FaIHBKQ[THF{FXd|SmSSSU`y{~hSD]Le{d\U^szvE?Ivx{ia[jxot|FkjTG=u`GFIC?<67999B;8G?G/?DHFFImxIzGEB=9H6oDIGGKPOLdlx{`KXSYK<:>Mr{M~fgl]T}zqkyutwvSoXPON{rXwd\HrowS[vR`mwttwskii>yEEOSLURKRQLQM|SWPRMPMOSNJM~\DSURKNRTTXUPOPOSXTRSVRI|suuvsmtzhsste]]`dYWmc\ifGPLyu{gbbcisl[jtzc^UO_ah``hmbj[`i_`e@U`V5;>Twlrxwgf^_f_YRU^]LWVVZZSQSJIKJACDDEIJLHPFGCA?>=:7>?EEFFHDFCIV][WMQRNSSZRTSVOKQOVX[a`MIwe[]Z_jSOr~q^PvGgd5DeAF]^T9JNMZYXUQRRP]oVZXRMRTXehiaYUUXg`[XY[USRNMQOONOMCHHD;R]o8l6kc^SZblj;5elke`nfaecb^WOQNXVZ]cb^igcWTVYOIIE>B6>f^6de?>ffgbk9ONF159FMGHLFMNOUWZjh\\cod`MN\bda54663:=9;>:79<<86bNRS]d932b\TMLMRWa\RLDA>;=HBHNMW[TRYBSKPOO\bXX110\aX^]31a^WSU^Y[ZYSOKJHNNHT\]WVTWYVRKPQPNPOQPJEKLNKS`b[[PQYW\X^[`^d[]_Y[0[XWXXTRLFMOPTb^[XXTRSPQNMUTSQPKKYSGBSSSQM\YKPX06;7213036fULLLKB8;0>GDLID>>B?GDADMQMNAILJPVNQIA9DABNZVG=MFDKRTQNuqGRSUUU[^]_`hx{{||tp}k}}[OFGUL--+-0.)%&)*'%%*-.1;=.1)+-0783447!%# 00,/+/28A<1/+-&--884641&+;==@?>AA>?=9;699;>>??@?BB"#%'(()*,,-../123.*/647:::8887761& &###% "@?ADE#',/011--,+++*$)$*--()+-%(4%0%"$./+&+&&3.2%)")$  "" *). $% &0+ #+!+  &! "*% $ '%! '"%)) !&'%%$&!!1)1#(&)('*-&#-"94 !!3'-he]hsxRTD9/#1%'#4%@4C0%Y:>V@AkV\SpvxmXE=L/C3+LA.2(?C>:A*5A:E=D>9?MnzrB;37C)2%-'"@1(-,)(!134!,38.30#/>+-)/1?:23a_`7=212**/$)"*CEA@>?>;;D9jfgccio:njll778rjffbdjki_`]gi9:8;BELGE1DHECBBABDDFC=ABACCECBA@@=>?@@>BFBBBEECFFGDDDCBA@?@IBBA?@ADEDA@>>@DA@@???A?>>@AA@BBCCAAAB@>==>==@@>>??>>AB><>?CD@>?@;FHJJHFHMJIGEDCCFLLHHGHFEDDBBCMQOIIJHKLIHHIEFJIFMHJKMJGFJKGFDAADFEEKLIFFEEFEAACED@=>=DQOOGGSec_deL=?::9XVX<@>D@==@>=;9:>@CEECEEA=9c9?@>>ghh==<=9875=?:k8:B>;==;;99<=:7aOZH_989ob`i;@<:79EX?m^^s<;j:5dhgmhdo7888428:<;9<;:::88BAGJA74:747=-8:282:95/Z/:9396MFA#*04.) ("!!%$06,9F=-GR:B7978.++;N.F'7M$$3>1*-2$@#!=F)S7)A8)#!*717-G608;CL@.VA@1>B5%618F?WTO=.LDBEJF&2,&=?P4?!#$6';<0654,,(+4-*'I+*-F'+C-F'&L))J04J.'#.) -A0:57,F4;! !"# 73%-$GD-245YU}pMACSTvRB6(%'6CB3;C7WK26)GVPy~kk>_:9Ml^kfpqmuED,1S?=-^-abr_L<,-+!1)4#@,1790-PWDG/&"&.H6?bB6x3jAg11GKkOLfkBUV2Bbb_`4MBTVk}s^b^olynl{YoJyaX^jU+J;YwJFQbzu`,7e*H%E<3%'2'+&-<$6B:;"4,!+)397#%.)&).254312X6& #" %=2?@&% &#)&-$67*$# 7WC:"&A60&)(%%)')/;>2F7=<;5622@CHABJUQRXWU*-OH974hO]jWC;T,-2.48:>A@E>;@?!"" ! $ 3."=<%)*.5!> "#""=>LQ534-+02-05:767;?=AA@:?CECGECA?;7648:>?h>BABDDKNLNOOQJDMLOJFCAFGHMPMNFLUVYWNPR\^cpwqunuwtvpmwxuvypc|kvvw}rr~xPOcTHFNMDKSKBBHHLWWSOXanu[MFBPcYZZYZUQawDJ>7YYeXV\x`bjhbsb]_gr<==lg$aggd\donkbduvlshilkfccgnu{@BCFFFIJGIMPRSPTWZZ\]_^][UY]`_`XIK@DC??CJJBCDB@CFKOTXVKJT[ceheYB9>C36HMVXH?7XbXUD=9S;U7AD?LHA>873>DG6PVb6@MPDK.L]b6;+BM--5OV/,,,C%8;AT?BI98@8'A,52?,/;2,?FP3E`]RVhE>WC2@A9U3@)3ER[gEe;7C.7##2Ek;9;OALC&&'(('%38//PE+K-W1#-):PI>)COWCYd1BN02E?MH1tIY@LLJFIBDJFBIFBH@{AIDFd0SxFHCD@<@NOLLPSUKDNRTSRRQHL33122\[aa`[ZX[_^ZXUNMMNMJXPPSWY[WWYVQQTTTRTSTOLLKKLGT\b\TNKNLKLPW][e]`i61[\]01XMNPNQRVOYa`VYVSSQSRSPNTUSSVPGHNQCII]RRVQQUTZN05;61422c_TMPHB;8@<:9DJCC;:@?BBD>JJM^SLJZbZYWCA::/Y^ZYVZYZYVSQQKEGIHHHMEXZWSQSVLXWTQSILPLNLRSf?KPNLKOSPQOUTX\QP]NPSQAFGLRTIM@3Y_Y'BUcC]S^i8=::3Y06557;24h\\_U\dZ\^[WVW\YV[TRXWWWNSX996^_d6:54^X[_^bl6gaXUWVTW]f8?:h`^^]]Z),,,1-6237520+*2732/21/.0.0234664420--*+,.#7641/347357:75600465/-+04!-   " "! "#"#""!  ! !!  !`  !""! ! !!> !%%$#" !! !"#  ##  !!!"$&&%$"$(&$$#"""$)(#%%&$#"" !"(+'$$$#%%$!"%$"&"%%&$#"%&##!"!!!##$)'$"!!!!   '&'"!'10.23#$!-++/(1+2',--0-&/"/2**.)3+/< 4+.394/4!# +   + + + +    +   +   " "  +          +          0 + !  0#'7'5  !%     +  "0   46+ '5(&+7V'R(  + "  (4+B/(:-.1.0#, #5=)#,-/0  +-6%!&7\c^~3%1 +!&+ $#1)&   #).,.,+H"   +"" % #{nk{ws~jaVVicXVQZkqaigSPOP    '$$ 2+ +  +  +   + $    "!"$$!!(&'*''1/),+08./332;4:98! 30/,+.-,*%&.-02kP\cP=1B"%&'*(+&"%& $%--;A,**$ &(#&,1-./38598426;=9>>>::511*-09;b:<<>?447:? <;9>@:12>@B??GEAD=<>=:9:;=AD#$&(''()')--,+.0224676676644146854-#" !&(#$%%$%'*+/2.$"'-3565/!#'--"%-&#& !"#$!$.9%+1 "'-# $+(#%3%& !)&&.(&#+'&($*')/&. /$$ + !*%#(&*"$ " &-$$%2"%.93 %"* 2;%$06' ;D*Yiteg~l~caf7B#3126,76$&2*AA6=1':5.>}nghrr~eNGDB:F^DH+,3,8.14% ("64DBD8-6BVUOOG]3/:+$*"694I!(&6-5)J'8(7$.440%&7/2*"/8'%+,.?<6:kt~B=?oTNRT^Y_[UT5'>FHEID_FQ1(!#!,#$#-"/./0,E::'87#+,48"70!-9-!"$" ,'&';P>;##!!$.?%"!"%&)+-+)+&+/.220,<,LQ?8GUWVO]?3+*'-DK&926G-F8B6XFWS==26<;73*OHJIMJE>ABJLLKKLHBCD@A-/'!/)462&NWU[b502///.492.,./104121,PL+-+*094751+-.,(.0-.1,*/5:8321-/+LHNUOHDBGEFFED?KC<4D473,3;6?*-.,&><774521+>95CB7*.)*-/(*05;7==7/"%$ +&<6>CK@A95:77-.342+5<71.,/.+#**)&)%&)&J%($ %#A"($#+&>D$&$!8'914354-/01174--/61-29<>;96.0L85B72?2* AMQTH7)&.3.%%,284-0+" ),-43,+/2/63,+'-6349<667644933442.,1*//*)','&$&%#(+/.6/-,3569325965351+(*()('+)03860((,)*%" 1++.!42) ""&!/&%"#"!"! $,/)*.590,&)03.&$&%$+J+))$%$.+($!%&&%'(*$ &'*''&& !*(--,())*,-*))&%%&%!,(''(,-+*+*()((*+*'$%$$%")/2/*%#%$""#'+).**.((('!!$'#(..)+*(('(''&%*)'(*&!!#&" .'&(%%&#&!/.'#'"" !"%/&#!*0*))"(%%')( %)(-& &)(($" '!'&%'+$"#%%'(('%('&'$$$! &&&('%%"&&#!   !"#')()'**,+)&''$ ! !!$))'$$$&!))(')#$&%'$)+2"&)(&%&(&'&(')+%%) ""$!!"&(!%,2Y1303"/',/'3--/*.2--.,))),+*,'')*)(#&&+---)-//0340,+++**+-0-./..*~~}~}~~~}~} +~~~~~}~~~ }}}~~|}|}~~ }}}~~~~|}|}~~}}}|~}~~}~}|}}~~~}}|}}||}||}}}|{{||{|{|{|{||}}||}~}}}|{|||}}~ +~~|}}}~}~|} ~~~~~}~)~~~}}}~~~}}~~~||~}|}|||{|{|{|{|{z{|{|{z{z{||}|}|}|}||}}|}|}|}|}||}}|}|{|{|{z{|{|{{{zz{|{|{|{|{|{|{|}|}~ρ~~~~~~~~~~~~}~~~~}|}|}|}~~}~}}}~ }~~~}}|||}|}|{|{|}|}}|}~~~}}|}|||}||}|}|}|}|}|}~~~~̀ €~}~ 󁍐&ģ߱┬وç늒ڌگڗ̀«𦙅΂אӕ΂҅⊢ǽäЉå͝ۊިŶªƢ׀פփč᷍Ҩǡ犝Ȁ܇ݖݭ었ƒ˛ۧɋĤ㳜է߿Ѡ܌˭ǽʫɲ݊͹쀩خӚҬ؜Ų쬯ܡŷ͘ǯѯλҾ臁ܔÖ쌬ʴçʾȳŮꇠեӺ􉒖ÿ²㽽ú̀坽ػ̻󀄆˺̐Ѹ̫̻߱ѸԖ܅ױݕՕᗼȋɲƕÐլְπ໚Є᫣ժї豽ܳ諟Ķ欉٪ǴށƟ؋υȀߊؠ֑ºבȺ˦ćׄҒװډޭŀܼDZޞîʨݪ槍ūԱƾⰓ는Ұۋӛܐ̄˪݁􅔓Ŀŷ؂ӿǵħҥ܅ȶž¼³䊝öƵ針鐍÷پȀʼ愊μŻǼú삀¿πĪųҸҳͷ̼쁀ĺűĶÈѲƻƢ؍Vϖ󕈏ɾ숆]\ZYf8hd4e48645dc^^16:8<<977:<9;8iijigeddf4:99986igcb`_^eh4564gikkifed`_]\\Y\_c7A@A;9?=9=<78:pkjlo:::qon76jhic_]^eo7iig`ed9A>DEB1AEEIFCCADDCB>?@CBABBCFJEA>?CDABDCBB@BAABCCCBCCCAB?@CDCBABBAA>>@A??@A?@BBBDDE GIIHEBB@>===>?@?@/>>>?@BCCABAFFHHHGGIJHEDDECFGKHGHHHIFGG@sKKHFGHJIbLNNJJJFGGHGGHHJLKFFGHDEHFEEEDEKOQHGEFDCBCFE@>AB>A??CBCufNT:@C=>>=<9f;=9fDH;>==<;958;<>BC@<:;5hih@G:@9:=A>6;<;<;8>?@;?<45<;kRGQNb:>@;5ifkfl9776;gc_fKD;;<7XIJOVxvpf3653639<:83:=>=@3cA>=;;9889<:8176893598167<=5*457  %+9*(#*+&'#-*:48407L7J01281*A0KVEG%OC)!!#%-!0;?$%E-HA.H4+@<*2G)*'(N>IhGUh\DJHNY7*/-42*23\`X2\A)A7290:-(*P2#"-$B3I*1*K,+075)LI=AMEL,&L(H)(J'E)LE@PG+$"!"81+H '*1(.9;>?6,,96$)0*)& 2t7Z`\KPEgjrG9E238J35E2(&4C51G/[xSkMAGS;,EnYiR?vw[RUbJLZ857;4D+,ENahaakM`[1Y\?TZO6J.B+&3]a+IIKWC_U,*5H.,$""39G*8(NU._pF:/?BD+N@@RU<|?NZ^J9:2@ZWRPRnkvdIC:FYPxLKuY}y|haxjW`]|ciUsp[rWc!A]A1C(W/Yju2RK3A?7N(&?>:!&F=@9.;8)/== $$$#%6"&%&(*,37L"!$5EDQXS?.36/ **-5!"*-*"'G"B1EFC9B?=$36478'=?8N7xzzxWUZaOGSWVWSWUWWZb--+'%ED1+7830.*&((5;86AGC794?,+3!&?"! !"$'+.,+.+&001//-*KM'@ABI')+()+/0aXORNUjwo{BOLMMQG@PVRQMHFB{ul^OECJv`QH80.-.,*%%&.,+)(*0.03353;C;@A;:<7=A?9<<=?@ "! <1+*$7:: 7 688!#&&%?5>LGNR.-NMK-17:969=8899@DCBGIFDA9<<@D?;;9F>@@F@B@DLNFHMFCMRLI=BDFJHHIEKLRY`U^ZKS`akrmhmqt{yxtv{su~ytlnqon}yqyT_iNHIEIQSPM\TMFHNMNREZuOxnNRYUV_\XRMVZNNQ[9C`neCY[bqpfllvhbhpvnc{vljiknqhenwn_]ikmwvphhfgjnqru?@??ADEDDEHKMNQQQNMMPQTVWVXYXWX]]]^_]QG>;<8i:i7=@EFIKKMQSQTQSY[]_ee\QRGGJIKPMG65;B:6W6cG1\[c5;X:01NS5U506E24?XN?\QB22]OM1@3N4!)>C$.+]RSQ_RS>B-C9@S&&-d<_d^9@+#35?2N].E?ESTEBT34BK@53aHQOAP?+@bSVaQ^O;E-D$7@`C<:HC5]RN:YE9[ejA64=93PGb[IO`f`T6fb[SXFW9A5Zc:5]TWlgO`]XUReS]]OLQPXUg_]ls~gZ}Kw\[U]jqGpbFyoufpatk||xdrPeWJ|{F?:;DIQCAbe^>NCC5Ebj~IMFAEJJIKMNLNOPOMNPTRPSUUTOe}aY|PbiVYZSNPONeLYbf^`ce`_cefed_[WY][WPzx{rtx}~~p{IhTM_XURPVRKVUTSQVZQKMSYPSNKGHO_\WUSPUTNNQOWSONMPWXX\[[RNRQJwqolqvuvsptspk`a`_ha\agkZTMSX_[UQUXX\NMQLPSTVRSWbig\\^^]ab]\WQQQOUW[PLMGHFJLOUT_eY8B;98dbbc_bjfodXY]kgdfeZVQNNKQY[eje\SNLKFDB=86fnnUa8A95ih==>>:4]TJHAHXk5_[22^ZWQSadbWPLGD@?BHCCDHKQOJLKJLLQNXNYT02]__]2^^^Y``b_WQJPJTTQYTOVQSSba^XOOMOWUXUSPOMLOQYPZ]VULNKJILHNSW\DOW]ZY6:31NWVY33862[^\Z[UTTVUROOMPRSTWRNILGHHLUPQZXUSN4@0/585;21_ZOMVI@;6C=X=;1Z\[XW^\YYUQPPOGEJHFCJHOOXPSUXRS_XTROLLMRKPS8;IOLLFJRSQOOQSYOMIJGKTEGMCG`QKTA8_TT"?kD@CJSX[:34;33768458594_`ZW^]\]`]]YWXRRPMJJKY\]a97aUT\hh454aZ]]ggda\[YUUT[^gi6>B<5cda^:.-++341/,.++55542112121//..-/122344221/d.--./86448;8765541--26435.12#! !#  !  !! !!!  ""!   !  + !""" !  <=! !!!"!!"! ! +!"""!#"$%%$%%#""#!#$%$#$%%%### 9%$#"#"$#%''%%$""$$###"#&&##$$"!#"""###&),#!!"!! !!"  !!"$)32/# 93(+01#&1,(1,22"4*%)&00/2/0/0/3'!(!$&,>:5.&         +  +      '(*  + &&%&  +                 +  + +  + +  "# &&  )9 &;="   +- *T (.3& H/,:9B*,!!!=. ;40//.$",.&$$97%:t#6.  .(Em[{]lp*<(%%!5+(#0)&#.&   #!#)-9'"/71  + + $m||ZTV]HA?>9467;=8577E9=>C9;9?IJCFMGFRWROAFEHJEGGDMOU^fX_^Q_lipuqlrw|~y{wvt~A@B.)*(+010.80+')-,+-$-?*D8&)0/1742-(.2,,,3 $08523597157=55=CC<8EA>>@AEE><<<=8*F6K9h=ltvfUVXU^DiBSJQS`KME731$#=7;2ftQ.9:P]O]huPF2/0D<;.dL:@7=:=20+H#:$<:;G;-983.1=./2++14@8[fbrppqbqQEDe_[]cWUZPQV7@BUTDhZ?*"+!!5)+1!33/>5:D@MO@/=0*0,0'')3&8*"35#!!"%(/$"661""%%08E: " "$%$&&&%&'((*+*)*,0.-/00/-P;J;V9M3<>-/0+),,+I5P)4=A><>@>=BBA@?;858=872UIGICEIHLKKLLLQKCKTUU,OF53-841.JUYUQ140TT-32341461,.48/3-+()/;720,*0/++-,2/..-0677:8:3.21,XRPQKFC@?BECDD@BCB@9831842345+&/&=5,).979=F?ABC=86/'/)+!*20/;5/-+/**)6;ECF>97;C=2/1.,)470+()-+)$!'***($!%%%'$& ''&G'((%<@K&(''% $%(13/398.=6452/3511/7975681*EL,N@375>%-+#C:<46IVR;2.6B>92/)"'+330-0325,,-*+,,../2:><5676579652/..-101)')'(&((&'%/2(3132026393--.74234/,)'&$&)*163/*''&##"598+4!64!% S$&!& !$% #''%)*-/-'-./0.-*## $)2,+,+*'&-./*&$#! # !#$'($%$'$)"($')*),+*'-,.-)(#'#()&*'$*&('0/.)%%$',*,+*'%$$%(-'-1,+%&$%## $&)+#'*+* &%')-,)*'''*)'%&$%&'(+'%## "!!(%%+*'%,*#")" #% "$! "#('%! (+(% !! $!,$%)) #((-+(&##"$%%)&&($"#$&%))#!%(%''('*('&%$"#!"%$($#%##%%#"!  ! "!%'(((',+*,*&!!" "!#"("$%&$$,((('$#$)$&)%'&%"#))'&&('+%%!! &!# '#(0)+,5 "(''.0.+/.-.0--**+()&%$%$-++,/)),00.*--311/-.-***-,/.131/끂Ё~}|}~~~~~~}~}~~~~~~}~}~}~~}| +}~~~~}}~~}~~}|}|}}~~~}|~}~~~~}|}||}}}~~||}||{{|{{|{|||}| }}~}}~~|{{{|{|}}~~~}~}~}~~}~}~~~~~~~|}~~~}~~}~~}~}}|{||{{{||{|{|{z{|{zz{{{|}|}|}|}|}|}||}|}|}|{|{|{|{{|{z{|{|{|{|{|{||{{{|{|{|{|}~~~~}}~~~ +~~~ ~~ ~~~~~~}}~~~~~~~~~}~}~~~~~~~~}~|}|}|}|{{|}| +}|}}}|||}}| +}|||}}~}~}|{|{|}|}}}||} |||}}|}}}||}}|}|}|} +~~~}}~~~ˀ̀~} 􀃇솊Ʒ䀅肄޸ڪڿϔʡӂܯ֕νʮԈӤÙΈ̊˲DŽէЊն񜹃򢺡鍌Ώ獃Ύ騝îNJ丮ɼ΋׌ȾʽƪÕհؘвňɪ—ގ՝֏ٴࣁŽ£Ⰶ͡ڪ䍈ɴœрɖ϶ոϊխͭ⅋̈Ŷؕ򫊟ɋ򔊈Ũ؀逾⁋·Љ󄶊ԫ񎟪״ـ儆Ҭ膖⫊ۋ񂇂λ݀Ϭ󇉅݆ʆʵг넂ÿ肇Š듣ijηއʽ×񦬔󖟗ς𵽹׿Ѫ춀΍؛Ôˀٟ҈ř䄀ڮȼʟш갮ۄŋ퍃ֆİ훛ͣѽڄ͂ˉŮ􆎌ꃋȧıЉҍ኉༽ԿۙƚķͽבıȻˍߗňDZþʀŸϙ󁁀ÈѷӽþԸņ̵ͶŶDzŷ쓨˽ƪހ瀁²ü툅ـŸ⇚ẚӹ㺽ׁȿôŘʾ񫬕»ǹ̼ʀɺþӑ߅掁»cb`UY_eeif[e64654ba3687526:;69:7977gaf586h469;99==;84hdb^`cf66fgjkifedbbbcbbb\]c8;@7;><:79;<99;<:9t;<;8kih4hcbca_[[l>>l[`jAGGJB@AC@CCHHEFD@@?@AACEB@BFGA@>?>>@DEDDAAB@A@A?=AGIFCBBDB??DEBCCBB@@?>AA@?>??@@ACDCBB?BCEDDGHIKJGEB?===>?>=<@BC?>>=>CDDEDEEEDEHHHKMGEDGHFFJLKKJIIEHIIEHFKGEIIKJHEFFFJIJFDEGFFHHGGHEIFEHGIGHIFFFGHDFIJJHDDBGHAA@CB>?@@A>@AHV`VDC@@A=F?<8B><;:5_::;;:?=:=<:5geh=?>F?=B?;>@?===>>?<9;:79;9fDumk66:A@??=;>;>:=<::A<987;:::<774+734458:;4R=:B$'+)*,+''".#-(%"&#;8'":LF8.=JG.K+6E:OL1(94$*$ $$."*)$*/JR25-:412>&T70(-21:T1L9hA9'5D=)2/OJQ?KKB)'""!'#5+'1*9-.K-8201;30>'&!!  $)DDAVAi\}@$D?&E9<23E6?5)896/0MC?F0B[@'B_Eu;8RiGPrdS^9HqHSo?)%036O:I_l\OA>p7*+RT?M819O+%AHJHMB69:EA94E6dCA'*,E;(-xa9O,'%.A61KTR{uK}_iOTAvkocS^ve^Qj?vx_`}dw\iL/KdKV#+0575+$;-6* BUEH&/ @A:1*-"!0-&4&/(/,)@<54=C8%:5186(>9*S{I~a`kvpVPC3Gei_SQUP,05'"20*.B@731//-1788=AHRRKB6"9$-&1>#"411#&%#&-00././4/.1-*(+&FDG&(+13),0/11.T1aQEBT]5=PMNJFJXYVSK?lUKNMn`S@89+(&)((*#*))($+&/--1:9>DC@E?NAFGAA>=CFGPU_W[WP,+*('$$<886:870TxMiYy?K0012::=EE@>:;?? !6846 !@?@9?@A@GG<=7BC**+-330047>@<4/-246>CD>?@DFJA=F@?<=C]aTLD<7CXbdrUNYWVNOSUbPRWNIGEIfjrrQ]l=;;?swla]fs{xqokmmkfkqrq{rfaaehq@@tlhdcjrklpu|?@DCDEDGDDHKNQRNMKLMOOSTRSTWW^^`aaa\B@;c[Z?KIG>?EIIJORRSVXWQNPOTZaafc^ZWMMI7=LW4=FQJ@G1N9;(,&;hEHHP3H%MCLA>=TM@i8ZNBd>+'A;Tgso]GLMN`2<4A>6'>?9/3P3:572+O;1/QcYC3L3<:,AGG)#+,/WeWZiCS:E1_@-P;9)&,84iO4(%,3=*/6p85XCC6\<:79a7JK=:S[Ccu^kp=.X@de]_;7^W77;f+6:(&!->a5;X``g_J`xOWzuZmuutksjKxYɁbs|sbvVe^mc`ei`b][incslr{oCFPIa.+2E]MIFGVWZ``HOLeE^MLOO]MX~yq{zvX\akrIRVOQiXqq7>=k9>@9CHEA@?RSOLA=E;G@DH;HRSTVTS[3122ab_edS^]d4;FMHECFJ@<<:<;T3:=94140Y>KYTD84FG@EGKKHMFFDDA>AGIKRV\VZPRRQKGGC?BFFKLNRSUWTc1VYTOWQEGFLUTZUWFIPQPLOWSTXN3aWXUZZYTULOLJKJJUMPNJDGPLFV.\ZTMJ4KDBGKHGDFIV>;3.]ZUX`\VWTNLLIHGOKHGGKUT_XT\`a\YSSROHNRMMPO=AEMNMDAHURQHNMLKIJIDHIKOMHaEALID76QR$BBKNB6@NW91/><88975187:7ccZ[ca^^`_ab^[WWTUSROfilhe_]VQ^dde889h^]^_`\^[WYVW]ea``p:?9g]bcG11/(*.2263-0.,3/01.0.,-//12344300/0V/1/.-<632300101--35,05 # !! !   "  "$" "" ""!!5   !!"#"!   !"#%"!! !!! " ""#$"##""#%$#&($#!"##$%'%#$#$###%#!#$%$$ !!"%$$"###""$$""#!$#"$%%#$$!"#"#"!#$$#!!!#  "+4,!!!  +-30/+112"f1">52 -3,3'..,:*-.+"-&94 + +   +     +     )  ! "" +          +       +0 +--   5   +O "I%IK +  >35d9/    6'$!&56.4#  '  % &-6 %"*$& )3%  +   +  6aCğ[Yr~lC@2+@YYNA82+    ")'" #  + +        +   0,% "%)-)!    "$%%!!&*(-+&'""(054&6569988::7410..&)+.0[~Tg{Uo6:%!!##&**$$!'("""%)*&'(.-9<22)22!! #**%(,0684-(&+,-5<>6::?BD>8B=:7:9=D>LEG:5.:55<>" ?>><:=B=?@EG$%''&&&'%%(+-/0-.+,../2201233679:85/,')%%'#$(*)*+,+++.0+))*/37552/,-%#"$)!$-&!4%%#'!# &&! :1( )(2784'&"#$ !!*(!' " 04**/#0".$ &-&(&((09'*'$'%,4.32#-+$))#/ -$(#"')'/("$*(16$ 6/+,/)&)(&.,)=.67(1=.;BS]UeKc[Q=53?&87/=70.33;/&/?',K>17MBNjl_OJMKPT]KP?+841,/88:;:,00F+6..35B3]ajonr}cK_\WbRHQMSQHJ.5!&&")/))#$$%%'%&(((*)+-+)'(+//--//344/'.88976751,,-+),10/9>=IBFG;9@@FGG>=943/=B65SNUNPQWSPWVUT//,Q),2-QB4-FF741/+/22U^1(/1U1./30@A741.-1001,*.10/54//11.0.44++129=:8741++-VJDEHE@47CHHGGG@:6;;<7?59>1370(,3,&8:840.EQFC:;@9413#*%&")0(+-887&,?HGC>>==O;81,,*'..0/,(+-,)),*($""!12$ %*&B#(**+*''-,&&('!!()/.4:75802/-05/109;:2/+ -/-62",9112.,,2.+&'(%05<<989959:86001012/0,-*+((,-&&*+2/)"251,/,122-*$'38521,((*().842-)% $! ! " 5!#! %" #!$$!%%##"!%)))..%+,."+"#"!")0-(,,-0-.17/+&&*&#%'$"!#"!$##$""#&&*)*!(+))-(+.)(%%""*&*)&-',)$+-+%)$'&)-)**)'')&'(,/..%&"% ##&"%%'*%#&(.,($%/(!!*+)($%**'%##"#()"*)'#"""'""#%'&$'".%( ''!""!!##!$ ! !"%&)&($%&%#T!"! %%'(()*%.%(&#(&! !'')') %%#"#&#"%*%'%(('$'"%""#"#*$%#!!%!(('$!!"!!v #((&(,+)+)%#"!""'! !!#)%+'%)+.)'%&'&"%&%%'("#&&%!"+(("%&%&#$"  "#!"$!!()/""%%'02./51//0/2-*+)*()'2240-,,+)020/1+,-..,..++**.0,-.73/32~}|}~~~~}~}}~~ ~~~}~}}}|}~ ~~~|}}~~}}~~~~}}|}|}}~~}~~|}~}|~} ~~~~}}||}~~|}~||}}}~~}}~}{|{|}|}}|}~}|{|{|}}~}~} ~}~}~~~}~~~}~~~~~~~~}~~~|}|}}||}~}}~~~}||{|{|{|{|{{|{|{|{|{|{ zz{|{{{||}||}|}|}}}|}}|||}}}|||}|}|}|}|{|{|{|{z{|{|{{{|{|{|{|{{||{{{|{|{|~  ~~~~~~~~  +~~~}~~~~ ~~~~ +~~~~ ~~}|}~}}|}}|{|}|}||{|{|}|}|}|{|{|}|}|}|}}|}|}|}~~}} ~~~Ɂƀ̀~} 򈙡񏒔چπ⋕烁Ķǡ⏆Ѿ߅ΑśĖꍄ曪ЧΎĞ۴ꃃȼ昺֟ǜЁϘǻ۾č٫ʦœ׼ŖӐГۆ܀ĽȵȹӸʇϟćʎբżߣݖѺ͎͗Ցقҭզ˧΃Ŏⲹ볦یˮʅɱ楐Džᐠꡯմ܁눉ցŠ݂عւ臓̺₊Ӏʪİʼɭȷԅ˘򅉌媩ሐ¹񅋏Ń¢ͲϤº쀂ȸÓՄЋ聦戏ͬ썌ׯۆ溸쫇⹵ǎ圽ٳͦ厱Ͼ͸Ꮜۼͽƌ˄׭ה˓ŧӮǏŀĺʦœ㛠гȹШÎ⊄˸ܡǎɢ϶Ɠ͸ƾǨߩ׳ٜݠ앞Ţӹٕ搧̼ž󐑔ێϹʂՑÚ󤣅ǥǼºľ¿į惉Ҵ±먍逌۽̼Ŀº왕șӀ󂇋żоðѹգ၆ΉȽ迹½ɼʺЮιךÿ´ʴǻǷĵļİղ뮷閝һ쀇_h8l\]edce_^g754665575dab8:7668;7666ed3444585;:98=>=<;888llebcdfijhhie_adg6966kbeea_dg7;:9:;;:89@BB>>;9:?:9hdde]bdcafie`_b8AD>>>=??@@ABDJJNG??A@?A@@ADDBBCFEBEEABDBADBACBBADCEHHFDEDA@DEABDCCB@BA@?>?@@@A>>?@?@@==>>>?ABBEHFDEDCB@@??@??@BDDFFGBAABEBCB@?@@BCC@BBBFIFDCHHDCEJMGFEGHGIHJHJJFGGIHKHDCJKJIFJH@BMKGEHFDELIHIJJIIHHIDBDGEEGJGEFGGGDGIIGEEDHKFEDDECCBDA?>??AGHCABBC<9<:><@J?rmXim;;7ccni:<==<;:9jhl:;;:AA;:=EAEC?<<==:9;oej?>>;<=:cW:kUqFAADB@>8:BDCA>@=8^o7>@8]TY7Xi]q<;:?CORRFNDBB@==<;;<::;<747:79995.4,U6865668.TVD4M<-,' $%#.$33 +.&'9#;893EJIG3IOH3:%/S>A0K=(0)#*5!'M($>A81MC(*:$HLI4884&+&N,'94,*)QBE0+NK+2M5FHD(GILFJ&4(TR$#"$!'"->8<,1-=$&+6100,=/-,8)&8(%"#"" !"#!/%"w_([Mn^H[dC1'3A:118;5:84C@@6 #N 7:=B6G@>UE!wIWVoI/^K1!>=1;*%O39R<)3.N[f;:/(/,-AR<4+< $*1I_cY3397DO:M;R6:5)-/JG*Hc~08B/GD;Ma;fcNP^n@DAClTv=^]rJ1UqWk]s`|rwUfpfmntkafloYwjvz~p*YqTP*!:(@>23@d|vhPo%EF34@+1J@ $HK)K=5C33." +''%"2!:9?!-60&/-2."'(8++B?6A*!(1.,@:5-+@+28!8)./+!g?/*2F)/418397,*4208*C@B?@EB?;8!A@EG,+J<3",*!IB>XF<97:42!&''$)-/1/-//1000.+...,**.*+052-L(*+'&.7:;?>@BBEDC@AHPF@qh_[X]\YvjYJA<6110&+6'*'$-*((+&%(*)(*589;=GLEREB:BAGDEIJMNSVVW*+)(LLFHB@;CA:5?HEHJ77DKNIBMID17876.RsRipo~AQ0154:7<=%?""$#&)GBGI;E),(069=><89;=?<=97617=AE@=?DCDFEFIGDDLLGCJIPKFCRRQVVOLECFFIIFLGAFF|pvubYsJR[ZZeeplsus~wpzwwzwwwqigsnmruPJOROIGNHMGFJQNMKKOPNNP\\]^fE^Ybb^_]G@L[QTYV]a]uep>?pvvw<>sjc`JUdbhbhckxxopsorzmfa]`b^fpnacec`aeknr>@BDFDEEFECFGHJLLNBCB>HLOSSTTRMPZ\`bdcWRMINMKB=?AEGGJHIKLMQTVSF:DHSX]]^Yba`\GC:!/3V3W@l@6E+=UZVaFE>8LVM^XW7@@=;iVFFT\IB_ZTc?>AfG>=2569=jQ^<.56OZM>J70*#%M';9NJ)DD;R937FL46#CI5^<8357;.7D176MDD.OHM=86,?529EQR<]SA6>?C:36bGU/TLMHCEHd:q?JcOnYua]^kąiQq^]p|Yhp]ܺtUIgN\q_zifZ]jpji[\XUVP{g{~DLMMUIC?@GJJL\~XaqHGEJM[cSLLTa^hLGC]e[rY][iV^Q`_SXXWQu{IEFBPsey{{uMHdCR8noeJDYnWCyFK^YS8?V5_XQBNOONMNMNUTLJPRQOOPRVWTUTUVVXYZ[^][XUV[]YVPRTSPV^ibUV_b```]dg[QZ^dfZUZVWVSKjINLLNMLKLE]JGMJ[pwkf[OPSY^`XQPIPVPOONNMLMOOIMSVUbhlcbaYXUWSOQIMPVSUTSUUMvrrnig]l||tsnhdgadgh`b^d`[VdJC:KNm~wnjkynKxpnnvqwd\b88;hXEE\jl;;wyzsp78:;Sq5AEGA?DOI@A@=?CA;LXK73>HHFCBJOLMXUPWa22311478:88:=BJMJIF>FE;<:7799:>;5bWLGFIJRRNPii^_a22eaYULCDFEGSUQIHDHEFGFGHJKQWYXVX\d4acc]^_Z]_`^XXUQMNKTgdSRRPRTUTRNVOOPTSQUd3^\[SVRSVVVIILJHOWZVURS]XSNPGUH@T`RP]`R^=822^YSScUNOE=OZifd31\VLPQSLLSOW\`57Y9V0196153KRW/YUM.KJEHJDGBF>EF=HECGKLSSRPZ2YOVROID@?FHPMMRMLP]X\1XWVZa[KGBGHHJIKHLNOOMMUXXYZ[a_WRZ_\SVQNUXNKOPOINHC@JKBL[.1[RN>;875657:5c\[i]^]_aaacc_^ZZW[Y[)^b][WU[VZ[KQZa487eadeY^\Y^a^\_eg^[]ba^\`d&/44-/42120-0/-+.-331./13>432///04021-,// "$! 2/03./2201200./ ""%  !   ! !"#!!"" "# ! !   !  !"%%&%%#"""$#$#! ! "##!""!$$#!!%&#"#&'$#!##"$$%#%%##$%#&$""%&%$"%$ &#""#""#($"#$$#""#$ !##"#$"!"##$ !##"!! #%"    $#  !"66-33/050z234!1/0/+6+5!)3-(*(6+4 ---436544%*1-5)**5 + +      +  +        + +       q       + +   + +   + +   E  + .& =$ 'G. + (  "AjZG ,-L49 @6,&%)# + &%/+"$%0&!0,!!'S~8( &H\v]P1:()!.$8+(.7-(- + +' ".&+*   ,   &2!7Tb\D=B+(2DDOH@C:% "%%(!  -+';'      01.,%'##+-*)% !!!'%%$%)..13-/0/*/1+%*2-.0&$06791877&-/-1.VsSfmnu;E'%%#%#&'*%#! !%73:<.5!(-.320-0487761.0,06:=;8;?>@@ABED@BLHD?FEMGB?ORRZ[TQKHLMPMFLGABBwlsq`[wLQ_`bdgppwwx~偎zz?43O.-+*/+-))+0-,)(-.-,-52348%+078684#%0*.3/473?4?9<=;98;??A##%&'$&&'&%&'()+,.&(&#),.0001/*,367897/)&$&%$!!$%&'')''))(+.0,$!&,1544/221.$  +##3&-%/!!&#' 0'##,2& 0,&-/ #%'"&5!,0"";*%%,# "$! %",!! "'#& !""!-  ! +'').%+"(,?55,)$",()/#*!!" -")3-1+)*(:#,4F>BWTT_;<#;)16+( /! YIS`/..14BH833lgmAHKOb8pd`0-_SQ8HHKfiE&<FB)&!('&%&''),*$$*,,+**+..-../1234569743269:50,./.+08?:00;?><<:<>4.6:=A8496775-?PTT,W0///--XY,,$/"'+*8GK@<7/01589610*/2/./.-.-...+RRRLNKO.211;@B;::5324/-1+-06465553.OOLJC??>::2=IIDB?=9=::;<79462.(/!&*H;D>G=;R+EA>;=9>0+-/(+56:>A:5.CCFC@?B9B703)2.)/-+00-.('(*(& %5 $&!!%+0-(*5*$)()$'-*/235102...00)'.5:87/%(,1//'DLXR1 2-6;")+)*(,PJ;ABA3=950.&%%$*57243223.-/10'! %+4787:9::7343141/02430141,+-(&&,**1/(362336.,('%+-6512.,.)*++2/*()'%&$&&!# "($ !  " #%#%&$"%'&&)#"'  ! /*%$##%()&&31,..0.+)% ! "))'%$!#!#$!!""#%(&'()*,*,/,*,*,.--))''$&$)22'&'&(())&$(&&&)(&(/./-(*(*,--$%&" !&(%'$%*''$&("%-$#(+"&,*&%/(%% #*/-+('#&&&""'#)*+)$"%&%#&#"# #"!"!!"#('%#()#*'%" !!%%%(%#$,))'''(+*!  "!"!#$%$#!$%%%''+*'$(+(#'$"&(##&&&!# !!"*&#!"$" "!!)''**+*&$!#%%!) "! !%#$&%$'(&&&%%#!#$%%"#$"&(%$ &'$" #$$ ("$'!"# &%+".>"#""#('!2/.6..-///.01.-,,+.-./(/+*('-*+,"&),..0/+/.+--+**-/**,///.02~}|}~}}}~~~}~~}}~~}~}|}}~~}|}~~~ ~~~~~}}}|}}}~}}~}~}}}|||{|}|}|~~}~}}||}~||}}|{{|}~}~~~{|{| +}|}~}|~~}|{ |}~}}}}~}~}}|~|}~~}}}~~~~~ +~~~~~ ~}|}~~~}}||}~~}||{||{{|{|{|{{{|{|{|{|{{|{zz{|}|}|}|}}}|}|}}|||}|}|}|{{||{|{z{|{|{|{|{|{|{|{|{{|{|{|}~́~~~~ ~~~ ~}|||}~~}~~}|}| +}}}|}~||}}|{{{||{|{|{| +{|{{{||{{{|}|}|}|}|}}}~~~}~} ~~}}}ˁȀƀ~} ۳邂􈏒ԄӆЪ̾бׯț᠇ۂ͖Ɉˀ䪅Ѐܴ٠πߖⅢ̺Ӈغϻ܄ƾߡ€󋐱Ӽ֖زɬǡ﷈Գˆȹﹻ¾ϰはဌő޸˷ɬꅡҤϺҠٌᬖ…ᕥ̸σ鋀ܒɂϸŽұ޵܌떒ÑDz򊝘󀃅ݸ适ǫϦ㿧Ҍա䄉ᛱ낑쉔쁄рʾȼÿȽ눒ŽĿδ𪱝Мʋ꜆Ǹ⇘ҐȍݢٰƷݒӊՒ삂ﶿؠ܍֘ޘÅʱȇī۠ؐԲߙÛՠꍏڮ̑蒛ʑ߆舂ͳݽҭnjգ퉡͠«šۀ⬣кŒ캼ٷ¹©ջじѾٔ紤אƙ嫖ݧ殫®·¼β퍗κʹ솅讐DzɷԺ膙»°ϻž½ˀļѽھιǿ ឡľ󄓔д菑ۅߺΐǀԽ­߂ϭɾʳŹɼôדĿú恁·лźƫҬݣ򑡧[`idccdeib[UYeh6gc]ac]^ab389:846555732356>>;97956;>?@@==>=<:7echkh4j566j^Zo;=;:67mnhdbadbce6:99::9v;;8ljpt=98ihiabekhf`_b3??<:;<<@CAACA?BAIFDCB@<>>@BBBEAAACHGGFDDEBCCCB@@@DEBCGEDDEDCDBCBCBABABBB?>?A@?>>=>>>??@AEDECCDGKKIGHKEDEFDBA?@@CIJGGEABAACBBCBA@?ABBBDDCBGHGAEFECEMNGEGLKMKHFGGJJLIEDHKGBA;99HIHGJHHILLMOLKLNMKLJHHHIFGFFHHGHEEPNCGGHFDEAB@@CB@@DHB?A??CCHEIEA<;>9pp8A>dMDYi88nmp87:<<=D?778n8:@@A?<=>DDbdKG>99:9:;<;f@???>=9:dhn:9>EA;;;@@CC;A=Bk:fl=5gRUkcR=l^dp=pcprLq^Xim^onZ:AG?68:=>?EB??<>><>@=<<84:549878=62696:<489682+3+/P8QB3-#60+#*(  .31RV9" %;((;$%7*4!8!);% 0(58D?(D)6+)'=CEJLO+L-,I/EHCE()DD9AIJJ?N14&((! ):75I@HM@0GP_L !,%=F;F50 <)<'0SWUR>-0$OHJ@9R*5C3/739-+-0("*$:8+)3%*378,4"&*"@7:;>@N,,8'(!"5"))* 9>!<:/'YM;/;G/&(.3594,@42%17+QV3 #3m\QW3DOL%-.,*&B1*'/.5<9:??C?DHH# $ @$$G8F+F!#&&(WWP;1>9=<>!#$$$)22/0--/0/.+*.3531/,)+/064/((+)-00.377965478<;74XGOOiifimhwiYPD@5020)'#&*(+*)&',*.)())/8;;;>GICC>B@JMCJJPMTUQP)'H*gIHJGFF?DGH69@BD&)""(PD=;;FGIC@FJHHHCCEBFGFHMPNMHhCIKMMOPQTTWQM[^`efg^YRPNKHDIEBDBBEGILMNTVH99>NX\]^^VT^eTAjG=>@ZZAG:/E8'/5/Q78HLN)hk@Mc`00]U6>Sc@GO=4NT^33_OKHSRLCU~qIQ@xT`HwvICCI@VPqI8[69G_AaB[WghVGWQ;Lojqr]FhrOk`sSjOϙy}]O>7cl~qic\WfnqjW\Y^gWMnlj[}I6R8amMVLOOIG<_F|rbb;EEGK_RJJKJOUajg`Z[^a^^]Q{_XSg[WfizZSOLUT:@gPK9]i_KLAFeyr^SJo:C9BgTN}>@(TVNUT][^0PkYwQNONONNQTVUMILOOPNORVVQNOVY\]VZYWY[ZYWUQRPJXjlptnkcZWaa`^__^cXQXYTSX]SV[\QMOMMQPZQRSJSrbbexricd]RN[]\]\TUURNKHJHRNLPNMIJJRP[bbcb_Z\YWWSXLKJPLLSRMMJxzosrsn{yonkhg\jbf]gbTMc\I?WXkFTKvxqrouxC|w{xxB@7eY\|zqquw=;<:;:=B<0i|srfyzdb^aVagZUZRNRSVYGRMD>BE<6?DGFDCGHGILB>;=EEIFDHSKEJKJJSUQSRJPXg\QHGNRLORWYSKH~LN~fPII}tryw~PPEuns~kgZd^ejhZO>CMZUWJDPQTRUUZ^TRMRbgi^dce`c`^^_ZYUUPUW]XTUYmjWRGQRW[Waec9C<=:k9ldpc]VWVZ^alj]]\[_YTZNO`OQWPUQPKELNKIQJIB@>;=DIHHFLM32DJGDBBMMJHITUZX]13].1699:7;EFINLH>@?=997579::9;93`SJJLHAC@BJabW\573^ZSKIIM=JbXMI@BJA;@B@?@HNT\[X[TWZOd4b592d_\YYZVSQQSUSQQMWRUUWQTICGIKR[0[Zba`Z]YWWSOQKMNX13NL]8?S`MYUVQWLIRSRPS\_3:78560ZWYOLRA>E^@<=>:3XS^WSOU8d\_4clcFcK-ZF-/1Z^220WKEMJAFJGGCFAACELHGSPW]PO]WOUJZVQLF=HNLMPLKLSUVZUSO]TR4N=UOIPKGGECJIDIKN\[Y0ZQY[ZUTZV\\^Y^YMKTLFFPBC@:FFWR]32\PJDJFJOKFJCBR5=<3./]\XXYUPNJHHJJHGFJHGKHMRSRZV11[VPOMLHHLFAG?JFMHKFAKPECDRMJ>VTPOSONOBEGF[F78;99454862b`gb^]``^]`aad`\[`_]\aab[XXWR[cif665797hj^_b_e99e\c87cY]]\Y`b2+/2.-01030-('.13/+-.-,--m.047432+)1331/111./.95367324//2541..0 !###"!!! " !"""#!! !  !#"#$&%#"##!! !!"!!!"'(&&%###"$#! !"""##"!$$#!#$'(%$###$"$(&(&##$$%&'&$#%&$"!#"""$#%%&%$%$$%&%$%#"##$#$""$%##! && #""  " !$!$" 442)$056665! 31""0.32.+-1)+83'14.!1+-34/86&6,(14*64'!     + +   +      +       +            + +   +      + + )" +%!"  I    +  & +! ! R$1+ (= + * +A=7;>DECDIHKGJKi:EBIKIOLINJPTVMKLPILKBJXUMHFzrttyXWSZ\Yb\_ciqrv}{|zPS@%*+../,((('*,'#(74+1/2#+8>F(CJHC?5848:4/-14::=BEAGD6:65<=?:366>A?;<>7CE?@>=BBD@=9736:>869;><:;=>BE"#&(&&&%%&$(''(*-.-*;(++-,---002.,588;;:4.('&%%#%#!$#$(('(*)*,&(03344,(.1$)** %!)9)%,$"-%*'! #0"-$ %)'# 20!  -"9   + *%$2'% #(% ,%,,(! '$% /#'#'-0+& %"!#!-3&/*,'' "&6-,*32,(4K?*5H&UZ:t>-A;#&#"+$9)* 2#4%6/5:/#.$!&InS452,*6&0.8*MKoqD/~sc[WR5?%l5AGGQMF>ENNI9;9:C:cf:[TRLKU-"7>H5<57411(A0TaRPL[&.,.3D<6688:?JRQGBEBCAC@WTUR+:G*!78>74:#"#$9 5H:.*"%*6+@(!"6(#'-$11-319;=5?0N>F%&(('%&),.-'%'*+,***.,*)+03583544675445020+7CBDGCC<75<==:9879/+25126937<<4WYYWSW//..316/Z41'(E=;>:2/775552340-**,RQUT)/-+0-+)'H)0/599;:95844316+,,T1..440/-XRLJIIEF=ABD>GE@@?<<4?9<5<8,%3- )(1%0*JDKC>A<@JQPLDMP&FA=?;9!0,-CBJH<<;< 6GB@A9DG:95917;203-+0014'.("###"%%#%& "%'%$'.($'&&&,/,-.(,2:4,&&-/*,/460*(GD,,B<,**KGC@AFRBNHL1/&JD@AK=80637==3+ (1/1)%-.0.0.21%!#14:487979535741.0.2252002>;0,&-,,-*12-585;40*)')*,35/0/.2-*.')3()E,'+()&#'''%)%&"! #'()%!!$%$$#))'&"$##!$"#$$/0(#%&$ " !%1.'),+'$#!$"/*$$$ "$&) &',#/./,+))'(**)&'#)(*')&("!!"%)+(./0,.,)*)')%'%&)#)(''#)$"&'%%%()(')$#' -&$.)&%&.*,-4/,!()*("$"!#!"" !$"!(%*-%#,'"'!**'%"$'$#$"!"((()'&#,&#"'%!&#!"!$#!"#)'%'"&&)(&*&)**'*'"#'#! %)#))#!"%#"$))'*-+(%#"!#$#!"# !"%$$)&'%$%#$!!#!"$!&"%"#' (&$+(&%%$"% "," (5!!! "#&'3251..0--.///1/..01/./00+*+)%+02,21-/2.-*%*.+./.,..~~}|}~}~~}}|}~} ~~~}}}~~~~}|}~} |||}|}}}~~}~}|}~~~~~~}}|~~~~}{|{|}|}|{|{}|{{|}}|{{}}}~}}}~~}|||{|{|}|}~}~~~|{ +|||~}|}~~~~~|}}~~}~}~~~ ~~~~}~~~}}}{{||}~}}~~~~}{|{{{||{|{{{||{|{{|{||{|{||{{|{z|}|}|{|}|}|}}|||}|}|}|{|{|{||{|{z{|{|{|{|{|{|{|{|{|}~〔 +~~~~~~  ~~}~~~}~ }}}~}}||}}}| +}~}~~||}}|{{||{|||}}}|{|}|}}}|}|}|}|}|}||}}}|}ʁށɀƀ}~ 񆂀쀓􅀈퀇ۚ܆󍓋샄Λ̟ٓĸ疕ـ蹞ꀄÿ䑕ןƱÀɸǪ훾ʊ΍ȉ腆Ԟ鐇ȱホźɥӖπㅆͱ𡨴ȗʯ뾴ΫݺȾו懐ׅЭ祺Ùݺ͝ƀքЌ存Šܘ߆ŇӾء߆ׄľۂ炍䁎Ҳվǒ۪ڄĈø􆚠ý⬠ƿ큈پø耂ƼӺōẐ׾־팘چԾ􁈈Ѷۻķ􈲳ʶ쁃ꊕ̆ͨ֗˷玛ɂŬ֣ň摁ݚӔדۼźŪ˕ήޤ񒙍ञ񪦓⫗񇛘ϘЫΧ˽ӫɷ۹ֵіۜήצ҆ԩƫĘ􀁷õĀܾƼؗٝМüƛچڴہǓ׹䊩魓ΐՀâ¿ݎ耀ýԸ֗상愂ȿôͷðǺʶ؞Āϋ̷ķӅ򀁏ށĸ۾ںĸ܃ÐԿ¶öžɾ󍒦붚˼ĶŽֺDzźҷ冑ȷʾ䳳ìҟdfgifafiihc]^\]``bfd65aZY`6;:;;657653249<=898676368;?@?@@>:89=977gefi4786b[h:55:?=7kgdh656797667:9:pihlmp8nno96kf`ae8id\5=>8889:8:=<@CBEE??>@ADEDAB2@@CEGGDDCCDEEDDCACEECABBBCBBCA@ADCDCBCBA@B?@BA@@@>=>???@AB +AFKNPOOLGEFDB@BCDDA@ACBBCFFGDB@?@ACABA?AAACDCFNOMKJFEFGIJPRNKHEGGEFGEFKHDDBBKOKIIGJKMKKNW\UONLMNOMIIJIGGFEEFFFDJKG@AAEGCDBB???@@=@CDD??ABBEFOJD>@BFA@<9plZ]]hmjfl:;<< <>==:kjlp97=BGA@CB:;;<9n;;;<=?><;8[e;;m7>?<>@>ACAA?llp=@@BA;`DN[^C(';D+N;5H7=N)--=N(.%1!(' #%!# CE10*L2.PFJ4<1C74M 2(*83%(#:-4 '&,.&#M0>-%+7G'*(*,,1,'.JMI'(&HE'O)IG'C4= &%! "!4.,=:=C/J7. 8'$5GLA?E-9>502J24R=-1F4!"(u'QW6_f!*%& ;GAFQOU1[HCbbT#34 /"-3$)"@OLP8UIC?=4POeBGJ# #4%0.08?A8;E-2-,NZIMHY\AIEC02/1=HiU4H?4".7Kmgi0.RA;M:36><:dDCek@IAmOUTItsjwSYc[yvkfl|ncfr^omzgokajtrPJbJB$?HR%2`tdFQdNUbtG=?625C0ID;O)PKH]-J21<%*(934 4!',%&0%$#-5/544-)%%!1BELXK%$*3'!!,0;62<>@)+#HS/3GM.V/)3483,.C5()'GNU45hvggfTI.-*($6'"44(*2;=ABEHI"!"#$##!$% 9#'*(++).)"'MD;:<::E%%!!?@'02--/.241,()-.12340-&',10/-1-,))+347674150H647:;^_ZNvjZG96343,,)!"&(()&+,)**..',28=>@BECBCBDBGIJQPSWWU+(+)MRJEE=<@#"!81=>FHFB63F%JPNLHA:4bj^ZT^inp`6254=;65>>?D?!7< ""$"!<:ADC?==7:<67:BCBCFGJHOOK?uNSPNKIJLGCBFFr~?==::@MRPMONSPQQWXT{PXkqnnllxy~~wropkrxuzzcA@OWRQOLLGFFDGHPPK]n^\ackqxvBDC@tysvijli@BCDEFEDGFFHIJKMLNJDFGHKNPMLQSTVVZ\\_bdgd]VVHDCEHIGGHHIKLNOQQSM>DRV]^_YW[]^UNQRQNHF5<<<9>I>SOEA16%(-CCC^233;BEE=,%8Q45U5;9TO1OG0MQ.7:,*98P3<6"E%1E2.2`SCBD<*-/HLVY_@:ABHHD:<`TC:GKJNIH<7DARFD`97?0TDDGGeoi[qqdxLy|gdUP=K52\LWp=eKThPad^JCF@a@gAcJUSL^{}JPSrGVwjbZZ^uoQ—vwk~:@rAIUXbY]Y^ifyqy^_\WKBFVYpy|PzaWOQ;U\`Z\WOMLKMSMre[q:HTSHRYYSNPWY\Z\XP[W[`i_orOlkQ{bXi[|GQIzNM3iMJAmG?h_Hl:@fP>g:[X5I9ZhLTDZ\V\jluGFoHp^[wGRPQOOPTXXVQMLNQONMLQMOSSUUUTUQR[^]]\YPNKKMYdrwowvlb^bhhb\RY\]_VQSYTQRWTQVSKNOQWZWPLNQNSUIunOYhkgbb^UXa``aa`_XYYUSQOKKNHHSQPVZ\ZWHS^XZ`YROVUTSMHLLL|HGKTL}ywwytruvqpkhjfee_ajr^\aRwlnnzuusljv;?>?8c3;@<6vtpl|oea\`\Yc[VTTSPWYVDLI>=;<6;6dghddi]ZYW[bkf]X_g`VXXQVVUQN\XMMHLNNKKFC>AEIIHLHpQ@FHDDILJG@GPNKIRd\\]]^Y^3569::ANKIIED@>88984M6:88;><7h_QHEEA><<=FNQ]68730ZROJFGKNHGF;CLB4=;1=>KI21ZZ]WWUQc13:=:52_][[SONNUWYZXSQR[\VMIB?AGNWUR/30_\X[^YYUTRNQRS]0PF/2LWWEV]ZYVSSRNLQT]2a1_06962\ZVLJG6=L[d6:;:0W^WXRT8:^ZPWccW_IB\TL[XZ34\^SHONGIDJEFL=@F>8IROUZ\ZZZRPKLD?NGKEHJIMIU^\[[_THLNTNCKKRT[5=931a_XVVWQPMILGEEIPSDHNNV^^\UV584/WTMMFFDK9GHCIJMIE>JPK?BMPMHN]cGDEEKNHGHTGA:6E>5UFLH7=GGNZ^d8:7166gbb_`X]l4.2/0/-12221--*+-0.0..)),2001.+10026995355776541./23/. !  ""$""  !  ! !"  ! !""!"%&)('&# !##"! !###"##$$#$&&'$"! !#!"""#! ! "##%))(&%#"##%&(*'%$$%##$%%&'$""!!')%#$#$$&%%',0,'&%&'('$##$##I#"!###"$#"  "  ""(%"!76/22565223578'  3K)/1..., '-.625)214./2.7545/0 + +        +     +   +   + +               + P" +, +  +     +#'$ #1 + +   7` + 2K> ,c'< *9!&K6?1=*%#!)'! !"&*,),"7!8(Xt5U&% 3?*95"U8FV*,$1*"5667G$3!!   &(1>. + +  +  + +&$!  'B\qvyeaY>$  + ! + + + +*'!!!N  +  ,3768DCD?E?=(,-)$  0#&&%*+-.5<604///$%&-(#18>ACA<60SeZ[R[ioo~\.$$'.+%"*''+* %&%)-1,5+)!24337BIC (*-10%%,4359;>;644-/3.36>=<>CCEDKOKFEvCA?<:?QTROPPQSUU[[UsMThux~xyuZS:;;>99B;:;<8856919>B=:9@=;DGG;;<<>>>@?:>@>@>>A@?>>?@?AC#"#$$%&&&)(')+*,)'()*+,,))-0122458:<<=93,+# !#%$%()))*))+*(&)+3782.0/.)#%$$# #'%# , !&"%$&!%  !!" %""*0"#$  + ,*%! (%  -&&**7*--,( -!.),1 %(/!#4-.!-% #"%"$!'!*3,,0,?C<6@A7H.J^RHJo:/",(4,&5'02-$$$".4*%!/nJ; #$4 <)961((0UL>4[xcXZJH "K -2A>HCELFTKN;>:6-)/Ce:RYY>Y?800!4:<6840121487^SJCN%/981?EB>?AFHJHF@;B=ACICJEMJ+<8#;,4E6&-%  #*0&(+#!3%$F.'71'- /(311&+614)245:DCL-+F/C.37"'()))*+,-,+*)+,,+)),)*--0/001/18:9984-///1:AKLELKC<9?EB;7-2667--052/044152.1137962/.1/11)?=.4>A=:>:827?==>>:9334330.+SQUT--(&/--35640(183483.*0211-),,-UI++U-3-UPE@ADJJDCCDB??><=;<<78=@3/0&&$,()0*JBCGHIHHFA(''NRJ@@#<&#DD >8:?@;>>9:;@A66'!260-+/.+(/34%# (75241/7766530/-/154229AC70.34,/-,343  477567.,('),430.151*,,(,++(&1-''$%'(&%## #%$%((;) !$''&"',+)%%($$%$%"%#"!#!!!3/($""!!$$'*'&# #%"!### '(+)()$..-,,''&&(),,*&&&++)%!"%*($--+,.++*))&))%(b%(($((''(%&$$&&)*))('#"""(,',(*&'**#&,,&*",# )(((+'$#!# $!!" "#%%'&&$##"##)'+(%(&'&&""-*%))$""!#$#$"!!"##!#((+"$'%),+))($$"#$"!!!# &**+(*%#%)%#$('(**('++'&%#%"!!#&( $"'+++&'&A$!" % !"$'#!#&$#&#!%.0  #$! "*" !)2"##! $))+?50,01.-01//-./.-21/+-11/-)**-++.)/12112//.//0/0*,2 ~~}~~~~~}}|} ~~~~}}|{{{}}}~~}|}}}||}}}~~~~}|}~~~}|||}~|}~~}||{{{|}|{{{|||}|{}|{|}}|{|}{{|}}}||}~~}|{{|{|{|}||}~| }|}~}|}|~~}~~~~~~}~}~ ~~~~~~ ~~~~~~~~~~~~}}|{{{||} +~}~~}|{|{|{|{|||{{{|{|{|{{|||{z{z|}||}|}|||}}|}|}|}|}|}|{|{|{|{|{|{z{|{|{|{|{|{|{|{|{|}~܁~~~~ ~~~~}~~~~~~~}~~~~~~}}}~~~}||}}}|}}~}|}~}|{|}|{|}|} |||}}}|||} |}}||}|}}}~~}~}}||~~~}|}}|}}}~ځ̀}~ 䄈򃓗耑큆m߀􅓗ʬ狇ճߤԵۀؽŰޜ½՗䗎Ǚ쐜큕Ż㙅Ý췟Ĭš؍耔Ƀ魼ֻЮ߮ӒΩ÷٬ƶء򌁉ӑꝝíšؚąҾٙąތľ˳ՀƤڄ˝؇ߧӺưĊ޴ǵǛނĩ舻ۥƑՠނƑ봀׉иٔàͫӆѤְ݊ǎ醐ꦈ⌘üǝȿ;͹􁁂ꈅɔ剒ȝޑ١ſǾ솛끌ӉԿ꞊Ͽ¾ƻǽӨػơĴЁ㆝׈԰ށזՁˋ߄퍍ܔ۳凘ĭԢʆԮӐĤ̡ǟ˺Ƌ㡟Ǘ㐦擂ǫ»싆Ą̑½×פל긽ƃ󃴿ǻSߊƽĖݽļ¼健dzۓοҙǯ図׽펯҅䄝ވôԮઔķЀѱ¨Ƹӽٽ½ʶƽ¿Ņ쑕Ἤɼ⏊򃐗±Ķ棴ȥ䅁ݦ״ű̀ʸûſս͟İ󿵹ǽݬƶöȰ˷¾֒ɸ؀[]ho7hjhhedba`ec_`]8976d]W_58:67646575]8C@<;97:=:4358;:<=;:837:<:5gbae5<=8i^^ab^8AA>jc`g66<=:778::><;AEFFHDAAB@AEBABDB@AB?>@DDECXDBBEFFHGBBCDECDEB?>@CEEDEDB@>=>@BCCC?=<==>>@?@@AA?BDFEFFDEGHHFGEGHGCBCDGFAACGFCFIJDA@@??A?@@@AA@@BEDKPNNKEBDGKKOMJIGEFEDDEEKMKFFCBDGIGHFGIINOR\d_SPOMMJKMJHDGFDHHGJLKGHGGDCGIGCDDA=?BCB?=BD??BA?B??B>AA@?@FF?CBol\ch\9;;8j:=?=:iYMRi>;797;A>AHQlQE<7=MFRJ6i9=99fe9<>=;<@<8m;;:=7657=jpo9;aSXgoflEA\fjj:fg8=?>?>;:9;=>;656:;7@=57985401;9;;::8616220H@351(03&.>?682# !)F3J8HXGB>N-52B+EYX/JAK4068;>A'A"6+L.6436.9?27 0:6>EE2>:A;F:<1-:T!Yg!!#,(+J3F)CN1*5IKaB\ &",( #%"##..ZKS%"#%''%'+."+/&&+0-++)(G>"F@AE$'*'$$,++,-+,00.,-/0/0245/'I/542../(B#/944674321.-+6(%$+068try}PKG@=]YLA1..2/-/00$"'+,10,,+*-.,-<9EECBEIGJOKLIUW,*(')&GON<3G>=<:99HN;JC<9GTWKV*&(,14<::635<;:=ECFH?3X.,K3@@A@CEGHFLOPL=DIJKEHIHIFC|CFvi:At>GIJJQNMFJKOLIKM\Qqtpqirrtzz{xvrjhf^jlwxUh[H@GHGRTUSMLKHGGKIHO[_fibgrqsDkisv~{Cx>tk`_`fmnemlpvmjieM^fbkkgpk__bimpnohde`fnehgkjghiljfeigfginpqqy>BCEEFCBEBCDDGJMOMPNI;DGJLLPJFKMPQTWZ^^_dlqjb]UPPNKIEGNPPI@MPQJD;7COU\]\]__\WYWVVPANK@BIIaH?;<8"83KWF..%/K[ShzXTEM:LRTOE=V8]LTICMC!#$$40?YL L@28(-) A5Rqbo;dIPWI92*1B,75-3KJ/LZFm41@JeB[>@USS,Y)<*.'/:1KH!,@U;DO;8R(0I7;*;)6@9 +9/;:E2A8GL/CVZ;*";573LG@K6:?DCK^(5Wa`:=iegj87=4c9:cX_ip@FHLRVLIw=JV]YTLRWWTNJNPNHHV\\[cfclnv|w[~qUdfSLRLnnyFVe>F?IKsA97Ak`]>.7RD3)H^6`DiEYileakjinqpHOX~IWRRORUYYZUQSTSMLLOPQPQSUWXVRTVVUXWXYWODHKRantvtsppf\`eja_ZXWTPTVXW`]^`^[WWVRU\YVULJMIxGSXYZ]]XSYUFH[X[_c_\TSWVRNLONPPNSRUUWVQMcj^`ZUQTX\YTYUQNBKx{HMLHI~wmXoKLulrntnnfafckf\cbeMMEI_d[]YP}wyyxwlsAzHHMHffpDJD~{x{}xuvtusttrr;<;?;34;C@G{wxvuzmgkcigf`UUZOPIJNJB89;66gGKPMNPKOQCIONOEEFBFHHIEJLQMHFKQNMSVOKKKNNJNVSQUUSYROCRTXZVOFCxpnh_gsovtmmp{{}{wlbpnU][M8\V`XSUPLSWXWN@EOThbYQ][VVYpfQ`e^`YPX\]ZVWbhdhr`^\PV`gnqlA97;G=lhjkmmfaTV\[`jdZac_Z]`XOPVVSVTJMQQPMLHHD?JMNLDA;H4B>AGIFILOILLTNHNf^XT`a]_45858=GLF>A>?;:;977]H;:@A;8k^KF>A==<;@FX\\4577cUPPMGFGKE@<VWIVWX7<4`YXTTV]95`Ya45Z;[aVZTQNV[]\bOQPQBOHEBI^:g:<>9988754143c^a`]had4fa^]]a^]ah]UY[\][PSXWXa773\di78f`klh^_d8:85kabhchf[[B*-152211/0/.,0/,-,.,',)13/-/0+2102 ;823;66//--1010.!!"   !" ! !"# !""#"  !    !W ""#$$$###"!!# !## ""$%#"#&$"%&'%!! !"!!! !"""! "$#'+*)&"!!#&&''$$$#$"###$((&$# !#$"##'(*151*('%&%&'%#!""!#$#%''#!"" $%# !   "# !:7/25-03.)+8 #(:* $ )'.//c41!  /!)0020.11)/3431++45/2"'.11--j   +  +        + +     + +    +            +   + k83& + + "-@!& 9@1 ^`W + ;[# +!"O#)( +-7$> ,; 1/ .& $"*+''$# +,!$V,Z N_TQ$ .y@X !"!*->Tqv + 3403-;!#$9"-$$!!  +         + +' !&*'$0Jxu}{;7) +     %"    +   0/88523@KOAI! $),210,),556:@@??5(F%":,<<9:>BEDDIOOF8?FFEAFHFGEA{zDHzk:Bt>EHJMTSPFHHMMMOP`Tkkpuv{vrtq~IHL4)%**)0220,++()(++'+558:6;A?AMIL(M<;BEHG'E"<5//06:99?ADHA><5'4:9=>?EA989;ADDD??>9@D<<;<<:;>AA@>>=;=?@ACAD#$&'''%%''&%$%')*)+)%%'***+(&),..146:99;?@:51,''&$$%',-,'(*("(06420++*()$%$""*$*# ( *5'!#"# '.'#   )  $4*53$+1$$" &0(: ,)&##' +" &  $%# %!! $+%*&2*-02*%,46 3*,,*%  (&##$$'("3"E?7=5JHB;-E?:/Ss<9H< ,!(%#4#(%+*%6"&7%)-hT`/%4*/+312,HI*a3/*)20/*#%,)/3733Q-4;:BECCJFCKNTOF9J8+@!6?:32"/')!1$0+,%"/Q)"#%D9+*(8 6(6#2=<>;820441/+--..-100010-,=A89420337402/+*")ADQUPRT,SU.-*TQ,VPIB8*;,,A?C>B=?:7;:?<5:53$%"%.-'-2,NGHDGEBD?@$?''+(67=%( JEDDHFCBAAA>>A?9LDDFEEH@:<6;9:5.-3+.((*' +"*-)*-),/$')))""$"E$FH((&$'(,+'$'**',0*++(+00132/2.,$.1451+$$KEIOA?<7>@FFGEE>8@@/55-1.83/1-+0322-!$%(973+43/13C:,79452,3663229:7:>366-,-/6:6$% 969<<952(()(+42/220./0,&',+(,*$&(''&&#$#!&'(&" "! !$"%(+')*/+&&+%#!('$&# !( 60%"  %%$-'%&$!!"#%! #*()*,+&))+',*,(&&%*+,,*'-)(')'% "$"' &.,*(*,,-.+*+&##"!%($%&$&!*"*.)*$.1-.$).(&"))!%&%,**((++.*+&*+()&%"&(().$ %&$!""$ %+&%%'*% " #$##*))()%#(%$%&'*'&&"$###%$ !$(#!!!"'&"&&%'&***$$/#&"$(#('-+).'m"&'&&#$#''*'('$$$%$$+*'),0-+,(!#%##$%!#! % "" #"#$"(-$ %#%! #&"" )#8"!# !))B0-/.-3//1/.../-.03-*+-..,%'+*(+(.31-453.,.4//4241*)~~~}~~~~}|}|}~}}~~~}|}~~}|}|}~~}|}~}}~z|~||~}{||}|}||}||}|||{|}}||}}|{{{|}}}|{ |}~|{||{{{|{|}|{|{|{|{|| }||}~~|}}|}~~|}~~}~}~~~}~~}~~~~~~~~~~~~}|~}}~{|{{|}|{~}~~{{|{{{|{|{{||{|||{|{|{|{z{zz{|}|}|}|}|}||}|}|}|}|{|{|{|{|{||{|{|{z{{zzz{|{|{|{||{| {{||{{||{|{|{|}~ف~~~~ +~~~~~~~~~~~~ ~}}~~~~~~}}}~}|}|}~}|}|{|}}|||}|}||}}| }}|}}}|||}~}}~~}||}|}}}|}}~Ӂ րπ}~ 򄏍ê݀˶􂀃ނЯ늎םę࿮˜ב۳΂áɘ󏡝⧼øʁδˍޢ̠瀋҅ۀʉ묇܂֭ԻִضΝڼꅗݭºЀ߳䌎۶ۂ耟ފÙŧĕӁׁ܉̇׉وȥ采ƾݮʩ데者ˌ釖ºֲôѿſӭ姜Ǭʧǿƴً߯ɼž󁇎¼´Ƽج񀛨۸؇ښϖЏ碆ʳ ɗǒ΢뇊܏͝씟ƽ삠ꐃܒ褳ȡϾÛ؄ߜܠӦՎ񱗮ဉĶڹĿʴ͎غҲ嚍ջ°숗߄㎆¼ٽ˻‰偓ʽܶ½¹졞֭õ·óò˳񅓉ƿŽ躽Ƴ޹ܸѹҺ猤邀ؠұǸÿîȺö½¾ȼǺǰʼ색Ƕ½êǢWУû÷ķ%׿a]W_h76657hdcadjlhiabb62`c^^^345543555daf6:965788:;5487:=779<858986ligc6=>8legi568:;:8i`_g8=>9m7;::8r=:lhnmmjjihl68f877hdbd7:887 77r??>::@BLYECDCKVcWIDBCDBCA???CE.DFFEEFFEFGEECDFHGD@>?>@@BCEC@@AAA@ADGD?>??@AA?@BhABAAEJMIIEEFGEDCCDCBCEFEDCBAABCBAAA@?@ABA@BAABBCAAFJMKHFFHHGGJJLKGHMMHFCCFJJGEDBCCDEGIIJMPQRWYWSQJIJGFFGHIHHGHHEHKKGB?BBBCDC@>>@B@?@A?AC@@A@?A?>@??ADC@@BA=fdln:9;mj\8n:^rw]S`rkj767;<>HEEIA>::=:?EA>CCCBDDD?===CD@>fRUokdY8B:98A<:87;<>;;?<79p_KRS_[f>??=Y[ahfi9:?A@=>>?<65799;<:94198869>@B@<;;8655645675.+AE.7?FJKC)<,=184?8D%)32-(''/+,D(EB(AOJK?'A:8:>B76:>2J;L;58FCGMI4HQI+HCF9031ODB&+&'(,<#'(+/+!&)9"#; .0!$+-+$(*-&).-4!"484-/$7+CE<.4D/=OTT11368@8efaZQVIfqkyw.*$'(%:- )/"#032;9AG%&*0.+&&((''&$65#$%;>%,&?&0&()')(1)+&))')++(+,--+012455*$(.14121,*()&*365465211-(;-%##"%+/3hlkhfmovCA=<713*F=9/-*-/-2/2*.+!#*..1,---*-221::CE=CIEEINKLNNRVZVSQI&'(ONIKICC="# "CGLKFEN()(&SRSPR@:?;J:?Yhnhr^@=<=AEBA?<836=BFTJ@CFGRVV)*/--+.49<:=<:5777>BCC<<7426=<@AHHLNIAGRPMKDCLOPPQOLFvttv;8k;BJIGJLNMMB|FDCGLILSUZZ_h[m`o~lsxvrvyvzwthdenvyvpjyGSPDJKMQSRTOF=lo??tjiyzwuyphdddojgffmkmjmjqojhbgosujbafehin>}{romlkgfgiilkmoqprw?CDFEGEC>ABEGIMSUFHKEGIIJLOOPOKKKLORUWY\`cb`bbb]ZUSPOSUPVP@IORVNCFINOQUY]]][W\^[`]\_[VRNFl7Z4DG36@Z.FP)6,O.5?;;-#!!0+'.F@; !)/#"D4\]?FB>gbW<4R:51)!"*67&(=&9D)^eBr8Uc89E(+9Q6DGHGHI5D3_6b^4[=6h9cS=`9;BHNMG@6|T}bZnuefPRXRTPuwvq_9mW[9h>IJSBNAW;AY)edlG@Cu__f_aeklmq:>=GU}hFUTSRSWWYYTSSSTSPNOQTTRSTVZYTTYZVWXYXTROU]ekopmqshd`\ZY[XWXXWRPTX]c_aekd_YWSROLOGK|QU]ad__[^YSMSTSUUXZ]c`]VSTUTRPPONVVRUUYWVVSW]XW\XVXXXWVX\RJF8MKiJJHzxztl]q{umtsoup`d[fpgdae^XW5Scj=PN~zmq|wl:G@DCRF{KNF}r}tzwsvyvv9:>:699@A?Ex|muwsmrsonh`^\NTFWSMOPC8??99BBOOMNJFKQIHFBLMEA@EINLMGGMOLHNMMORXQSSHHLHKNONTYOXVUPQ]R[\VRU[Kwow{anm[Xhlflhlyj{ogbZROHLZTCZVWUQQOLFJ}gTKQX^]]exVWa^\S_a`i[djc`XYXV[Zl|vc_SZioopsrs?;J?uwupitseTTRY_gigbb``YYXTZVZVMNHHKQQPPPLGEIJJEBB>h66=>CIIGIORSIINKL_2N@]^^144435;EFA=<;<:659<9K[4.>=;9>>;7_SHD=@B?;CDQ]]Y]596\XXTPMLOPC=>QMD?BK;JY][.1[[]XSSQV]c46Ua]^]]VRRUXWTY3__^ZYWUVRPPPOW]DB.944b\\XSS[U\\WIFKMMOOJJPOX_YGOR_gc][XWGSGOKZY`6;61UTPGUV\ZeU6@=4\\XYUWY\UTVa5\R][32[b`WVWZ[W;`7,;&((a~O~9*/#&81/15)%%%-!&$!       "$$#%&&">@?>56*L\guh       +       +  +       78559@<64   "###"##"$%&'))(+*+77/291-#*07:6/4 BCFGE:584@4:yTcjdnZ8/-/03/+''$$$&''+.(.%)>6+254;E@:;:131.*.77;;CEJKG>FROIE?@HKMPRNIEurw}>>@EFBPG6;8DGG?;;<;>>>"EBFABABAA@=>>???ACBBD$%''&'&%#%$%&'),,!"$"%(()+--,*'((+.0355789:776520,*+,00+.+ $))*%#(*-134431,..*/.-/-)'$!50%-6 #!# 72,!'     #+)# -*( ..8(/$) "##!&)#4"+# &)+"' ""!'$+*($10&0!$(&!15'#$/$+$0'&*"!#E)``?AMEDT5=/+@hWC\E4$0+02' &-'%0''*0&22+(!An{^b1*F33>DJTHWU]YQ>43ksunnfYK:*%0:EDC=?ACIMI@JK:453411,,1..795;A19#&,*3>2/M@BEIQHF=85-0523299;<>A@:>F=?BKQ.UU2R6?;%;-4.$'$+<-.43+6#='./7'0'2 "+99C/%%?34:<<>BEFF"%#.3?1")**+-0/11,.--.-,+,./03422453565410.6=DGJJGKKA?=976;8544411358>;;=C>:531//-/)M,KIS028:;66452,*/1022579=<83112201/.-430325213148557424455321*&##'>SWMS,,S+URVSSLFEGA;2?MFB>B@=@=693;C<:660++)//+,NIFKF=@GD;$"!,&HCF),'F@FCGLILNG?>?A>;IDH>EGC@A@>>9433(-$30+,,!"#,+**(&(,'&$!((!#&,++''*-*&+*)(,0+.-((*(*+,+28042/+,4-550/15(IC?DG7??32<;@=4)(&(+0452123.-,*/,.,'($$'))((*'%$%%&#!! 6  $$$%),.'',(%('&&!%/)#" " "$)(&'*((&&$$%'##$!'('))*)((&',,'.+++,('')*)(*+-.++,)+(''&%',-+*(')-).1-%#%%#%&%%('**&%%,0/,)%&% %!*'*%$$''+)3(+.,-)*),&&'*'$**)/.)'()))' %  !" "#))*%##""'%" !%#$!"%,-))('$%&'%"(&&" $&$$$#!"$%%''$%#$""! '$!%%'&&+&(,("" $ $%'#"#%(0$ "$!')&$ $$&'%"$#$%&'1,--.,('',)%')%##!")" "$"%!!##$!!&$ #$#] **)! !*/240.1./4120.-/../-,+-./.%+..4/.000161266621/+/.13/. ~}~~~}||}|} +~~~~}~~}|}~~} |}}}~~~||}~}|}~~~~}|||~}|{{||{||}|}|}}}|{|}||}}||{||{z{{}}|{}~}|{|}||}~|{}|}}}~}|}~}}~~}}|}~~~~~~~~~~~}}~}~~}}~~~~~~~~~~~}~ {|~~~}}}~}~}|{|{ |||{{{|||{|{|{z{|{zz{|}|}|{|}|}||}}}|||}|}|{|{|{{||{|{|{|{z{||{{|||{|{||{|{|{|}~ځ +~~~~~~~}~~}}}~~~}~}~}|}| +}|}~~}||}}|}||}|}}|||}|}}|||}|} ~~~}}|||}}}|}с遫} 󌣝􀄈ȳꀄɍؽޝ⢒ꡈۗ˰ƃﲓ̱̜ቝ撴݀é©̑ܪ؜䃈͞ҌєӵȽͳ̙IJʀ倡ϕ֫ďϹּԾ˨ʸˡƿي𓩰ӬƈȣрˊڅћՒץͨԷ娢⩫ԀԪČܷ摀͉ξɸώ֎Ŭ҄ի괋å߼딑;¼צ񈔏鈇ƩقչȀ񄄀׾ְş龶ꀑꊤ㇖Ȫٝ¾ꁓõĸȸȾ̜簯ˊӴ悇޲ބɏ뀿õѮїȣ֯焅ܜض͌ƑՔǀÖǍڢ˘ܥЕΙ؃错ް瘞͒֨܀ӌԁ͈ն጑ŪʉԿӘ۾稶ף޿ȽӦͲٌ÷ņ˭´򀀎אČƜ﫢żÿǶǿüż̲ø刉ȹĺƹ뇉ʾؾ䃈Ҁ؀ǀͼဈ芀ϽɴƿǀýļʽóҾùǻ愄⿻¬ـƌſɮNj6kd[^_bcb34e98efl78ed4=:755d57d_643864234667983636;<;98656858899:7898:fe=FA6bbi56668:;:6lf_s8m5576pkh9<;9nhgfc^^jirbkgdfdc_m>;966oq=@><9;;JOCAEPQOVY_NDGHFDB?>@CEDCBDDGJFFDACKLIFGHHHFCCEBABBEDCCBDEEFBACDA@>=?AA@CGLH@?@?ACCDDEHLFFGEFGGGHFDCCDBDEDDCAACFB@BCBBABDCECADGHGELNGHLLJJHKOSQLJT[KEDDFJIBBDADFFGIIHIKNPORWYVRMIJGGIHEGGGFGHGKKHGB?=8?@DGFAADJFECABCDDEFACED>AACHGA@=A@@=:m\_l>:nm9:>mvQIdbZg8:<:?==FGGC?ifh@DJ>@:::ijlbQjbgq696=YXBG>::>@?9EAIC?@CDBA?BDC:?>[c8e\ck=<6e=>9?=B>;86>G=>?ED<::;;:;88698567846=;:995667457;9992M52K/(.++./B&&!!3C4;90%8J/54/V;0/95;KXE:2-D3,S<%'2" $&",!)/G4::;7.)@%" $*4 ,' !6@LQ.2JD'TLC71 "74E().++-+&,*Q'K&,1.+*NGJ&MF0A.DND(R5.-'+('$'!*'<-6 4)@DB+'@>S+EKE6CPC8FC??BKTaE$.(# "*(((%%?1*8 ""+)("0,'' )<%22()! 7.) 'I;35R4=@G>A'O*PIFMU=FH<9UU>,/7NdgspsxvP549CACBC?4.=A+2B6:B@DA$$NM>CIKMONPPKHFGKMPPUWZ[]]\^`cc`WWYXUX\NDKTWUOHKNMLNSW[^^]YOHQ?SZMKUVSMJF@H7::[=G/,9:1L82M??@5""9B:h2=8$0R2QY,/*J?*'%"7IQM\9a_\D*/K.S?aDI/(.5(),85:]V;DJ:L=3%`W=GD>3;:TC:)7A:$#PTQ=iR:RVSV50(UcV<=7-P'5FR:S:D19/>NJ1O[_]@BeDDhnE@NMmVXAGID$;./AMaX;GI:3=36CGCL\F'BPiiCaHD$E?>TJ63IRKQ{moeNMqPFfPp`[HO@`a?lN^UQbAh]ZbSFKZtrJI;KJ_Pvlɣ}wt}yrbwdXh?KO^HZg]dooqrobaYUUWVRYQQZQWODJN]Y@?EEw:RMMpoepf`f^f6@KPKUAGKNOUT[Y^XUdbgq=;F>=F\dSWzv[NVadTONMKWRufaHobbaeeijMHF8A[Fd\^XYWXZ\_efhjmlnou=<@UbHWUVVUVXWLL>NQRSQRSSUSQRSSW[WTRQSV\ZYUX^osumijtuohTHSSYXWXYTXT\]dbaa`YZZ_`YXSNJmeczQ[STYV[]YVPIJSTSQYV[[^cWYWVSXXNOVYSOKORXZX]YVYXZUV\]ZXWTVPHFmSXjvRK~|{xsuv}uutimjikmquif[YacSXLKCCGQNGDIHF~vrwszux}||z:8;9759A=Df}ynuurptqkUTliPOJ]YUVWINJJIPRNRNKRB=>UQIAEPJC>CIHJCHLGLPLGPRQRPSRSPIEGEQYOPKRTIL_]``PFMTS{rv~ymswh\ajqziq{ad_[WNFzep^[V^[SI,@FiHDONNTTNZ[Y\Wbkdamecngjhd^[b]]akkr}mi_mu|lhkl?BqNEzwywkjmgd[TSTZbiumbcYZ\R`[WUTMLKHIJJXRKGGDEE?@@;46k;CIGJMFJRSMFJGK\ZSQTV^1`2/118EE@<98:78>?];@W<;9:769=<5g^OKE@C?A@ADMNJR^46]^dd[RNTOb/HA>A?C6@FO:;?A=:;9878559654fhe]\gc3gec^`acc_&[YW_]V[gc[Yn8j5hbhcb^aadk`VX^fkicd664520,,,-0..01411-.+2. ./352-6466584641.,437-21.322.4:9! $'!&%#'+1'!"""  3 !"" "  %&$"!#%$# !  !"&$G !! #%! !!"###$"!!"!!##""" !"#!!"#!!""$#""$%#!#%%$#)+%%('%%$%(*(&$).%"$%!!" "!#%'((*/1-*&$$##$$"##""##"##"$###!!"! #  "! ""6-.58779*'45/5 ! /10$1552)9214K.,  (+1/02. &-231*$2'-,2'+1(/./  + "  +   +  +  +  + : # !            +     + +  ">)=*3    +  +  ("*" + ;$49C=" +4,O]5$-@ /&"*(*"&81))-$  =# ! +*&( 1.&&- 04FUs lPm`vlk@(6 H.D[g@A-&#+-2838Y^/"  *      +  (&,-!##+5"+--*TJE1(+C]W)   + *3    + + + +  + +      + +  &14/$,03/  +  ###" #"$''**'*)(.-/43=-!%0./-,0: B:9@H4:@30GD2$'0E[ZkgkrpJ+)*112,+*&!'*!0')+)1059-26<@B9AI./12.*$#).85;@BA=><C%J%'?E?<=99::888<=>@=<:>A@@>&)56$." #*&*3.3RLD>;.2F.)A5LWBB (0.-7'.489AFJGLDBNKLR-+4+')EB8$")' '-4#7"741379893.+'2,6861311347:>@??ACCA&4/O$)+,-./20)' +,-,+,.//--.0024320/0385415;INMHDELMG@2'017677736299><9<:667;<651-,RI7/1D2601337741+&)00//7478;>4644244-.672/--/463853656116765421*#"6%*:GLYURW2-SSNRRQRKJLFDACEKJHABA7:8;=>BF>;0/21$(" -*JJKKIHFAB>7-!+,(&(''ICAB@KEIKI?EAEDD?4NHD>ELED?A@<--<9()'75221%('''--*-*'+/-&!$,'!"(')$(+'*.*&+-,+*--0-(%&B&N.600+-.&)7578+%,00LB@DIF@DROG;38=@HE955//0)2/-,+'&%$-*&%$##$ !6!&#&'#&+,)%'$$&#" ##&&$&6/&%#  $%"%*+*-.+&%'%*-&! ! #&'*&'',-*--)(*)+*(''(')*'))+/.,.,+..1,%"&!$",,+/+-0-(%&')'(*-*')0-&$$$&*&(''*'%'&.)+*&$(% %&)*+,**'('''*/##-.*'-,+,)'(%#((&+1%#" %#()#&&#$!#  $'%!$#!$$*%')+%*"+)+'% !%"#&!&$1&%'''$$%$#%$#$"(&%(%'&&%"'($"&"%%&% "!"''# '+'%%" #*%!%!$"""%%$(+/,)++,+%++')(*')( $%$!"$,)!#"$#"!"!"&""$+%2! !!#164/-0-0.0-.///-./0/--+/.*-42/,5/0.211/21383,*,..1..  ~}~~~}|} +~~~~}}~}~}|}~~} ~}|}~ }|}~ ~|||~|{|}|{| }}|{{|{{z{{| {{{}}|{{{||{|}|}|{||}|}~~~|~~||}}~}~}||}~~~}}~~~~~~~~ }~~}~~ ~}}~}~~}~~}~}}~~~~}||~}~}~}|{z}|{|{|{|{|{ ||{{{zz{{{||{|}|{|}|}|}|}|||}}|}|{|{|{|{|{|{|{|{|{{{|||{|{|{|{|{|{|{|{|{|{|{|}~ҁ~~~~~~ ~}}}~~ +~~~~ +~~~~~~~~}~~~}~~~~}|}}}~}|}}~~}|}}}~}}|}|}|}|}|}|}~}|}~ρӁǀȀ~ 􆏓낎ͨ°ǿ釐°ゕ߄腘ԩתͱᢓα聖Ⱦʷ°핈ոס؃όĀʰȌܶ­ȟ稀̾ŝ񿤛韣ǍިثθǢԖˣΈփ˔ӖLJކԀɝԢꦠٲ߉߀͵₉䧱滤݋ڷٶ׀򈎟쁊˨놈再΀կǵٵ삂􌖞򅋃Ǽ²IJǝ߹ܲ˄깛‡庄ξދڄɷՑڭت۷˄΍ʫ޼ػ˅ïΛ圼ŝԌ䈑秕ș˭ܧ͝ʠݳШչͬݔ¬ľɕʶÞʹþȽ쐜䩄ݧģ׏̷󃗅ŷ񊊀ÅΌۣĶǽӫ߆󊙈·͸主к𕀶ϼț넙ȸоĿ؃˿ñԼŰ􇌎²ҰׇŢσηÿ˽չ퀇ℒ̸÷À̵ο݀ĴҾƾٶۀӿõȴֿᛩɾÿ$5f3ecfeecbebd6787B:6ebb468;51c]b44568567744fdeb7<=<=;54634579=<976985g7::7a_d8<<98:;9;:6ecggfjkiogj999nkjihhhfcihi?H\ehghm9;:8npno879;=:9;?JG?AP^J?AFEIDDC?<>AD@?DGJIEGEDCGFFHJNLGEC@ACDFFGFEBBDEGHIHCCDDAA@??>?@GIB@@?ACCDFFECEFGDDEGFGHGEDDBEHFEDEEEFEDCDCDCDDDEFHHEACHJNOPTXNKNNMJGNTPMJJHDBDDGKMGFDBFGKILKHJLPQPORXZVOLKJIEIIHGIJIIHFFFGKIFBBB?BDADAAEDEBDGECCCBACACCAACEDN\QKB:>EMGtmm[iglimA?voicc][hr<><;=>@AHLH?=69<>_[rpVNNUl897pma;EDC=:9or89=A@=>7799987655987139<9638:97697589;::;:740VB<<5/C4&.8*%,3H>78/,B?V/VJPR90:9CXNH;B?7106& .,4!$ $')(!214*)"&)!!  +,190))*7+3F[HE,-7E81GGE,,*(++H=D(NK<,*NHAMG7,IADH((L==B*'&!#($)-+2(3:L*D"OKBGDBD*GFB0C400+BLEQG)=LPvXWVu{1b|rb+,$# '"-&2 07GRN_J>;4. N74$)-@77525)"6!01,[{h_=4[6=30/DC=?TT^SI|Y2j]4"b[7SjvF+ue>GM7*N^Jg{uS_SNf:cGTV9_apX`teWXBnvo[Yy{dx{cv[Yh,/[+478Tr`u\U>(-'+2S$;9= 3MHJSECD! 6*Zb~4+0)'&!/%,*):"9-&-37/ &(0! <;3-5+#+$',#  '=98&PM6LPNNKF\7369E<]4R/9*+ '%$!-!'GHKMMMQ+((())&"*($!!42)%..+-00.400.2/146;>DA>BHPKJKLTWYTSS,QROHQF@HOMEE@?FHA=K)ICM>F(RSSCGQ=7:@AC@77ACD?8;>$BB%(CG=MVJFO)(P++-.,+*/.0+,65/-253-0/+157;CEBB@<;:>@?BFKFHDB?EGIINPOMJMLKMQOMJHA<=KKJKD{DLKyqv}OWUEENXfkmmmlïptqquttzsjkhai|xv|LKN_b_w}|EIKOPJJKIHCAGKOYUVFKWSU[mhfdikjef]WW\^epufjqgmkgvjgpeefhe`\\]egnvtmknnmjms{xptpkdahxtrrtuvwxvomkgfnlilrttwtty?DEHJKKKIFFGGKOORUTUSJEJJJMPMJDCDFGGHLORSUVWYZZ[[WVZZYY[\\_`\XNQMIFJKKNSXZ\]^]YO=8CHOVZUV]TKIJ874K3m=7AP9*(<- 42>68RO=OA<-EVSdTDIB)N61:MR)'BcR5G(&0.0WMQDK<@<-.JH?T+BALc[SB<9MEK9;:<_JAU:LBHHFBEIG5bKKiYbhYU_gQDK40>6?Q[sqHQHo\UKH{\menZi84XLOZAVp<>LUBZH7YFBUgKQ\R_^RlwҨyjv}}|ogZTck]]ZE0g^lnqlyvpkxaX]\XUVXWS[xvYRVRVWVLPNX\Y_f>Hj\_[]C=>A:MPOFMVZ]a_gjglfjwv?D\DdINbbSJxMW\OqryoikU?Dlw:=nsHJ?WQWXOOPTUWY]bcdhivB<;?XBH[]ZSWW[[YXTRTUSQNMTUUTSVUSSUVVSTSTWZTXcjhfjgbcllhgbabcc]\^`]`gomedaXPKJNXZZXVNMNIscGCKWYOP\bVXWSQUXY^ZXZVV^[WWUTRUTZZ^[QVYWQLOTRU\^WXYVU\\YZZRVULD_Ipw~uHy|roq|}v{rsqsvtlrh^`WP\CKZ_DRIzw{tgklsjDE=IHC}JVJ|wzqvlmxu@@Az?<95^4;@CJRsituryur{phfsxg][`hb`ZQLQJNQWPWRPRMS]]WSOPLIDCFECGCKIDLQELSTPONQLJEFJIJIG`^RGJ\UVjdVLGHIOOMJvz~zP^`bkqkgl}wa[ZeUOVyF]oeZgfZ[d@LKOTaVUX^\^_mjihgj\gql`Zne`djke`{uux~rcfe=D?xBGstvxuolje_UU\[_]oujjnbbZKNMX_\RMOOKPRMHDFA<@=AC6@EA>ALy5PKFNNLGGIKSTVXRN]YZ22]03HGA8989=?CA5597:;72157:@93`VNGFIECFF=EEIWRPS_6894[SPOHDeo[IMBD@9@<5@INJb3VW\XX]_eXTWTZ`ZRRRSWY\\\^^]_b^_`^\ZVSUNT4>JI1S6A86ga[WZMOPQROTNMSWZ\UNKRQVUFOWZS:9SVSQMTZZ132[TTMKKORKMU171YWZSXVWWTRP[_`XT]\ZRd_`\[XVRKFGGICHGHFHOT\RZVSRPPQNLGDFDABFOJJHMTHCHLEJQKJHV3;485[SPOOMLIHLD\VSWZTOLMSRNSQWXSTTTNNTXXRNRYWPOBMKFJPKHDEDLKFJJMQPMKGKLGGGNUTQ^3aXIOCDEHJNNHKIRU^OXYXZWXRQVPTOXE0B9OUZ_UKDLONBFJMLGFFCLQHKMEFCQWL@F@@73C5?:8>==6;C>=::96763689:97ie]b4de44d^_cgib^\\]ZYYTQRWUTX^d\`fefdfgecej]RZeg6fbej395(.1/111/./-,"2.,.+,/01000-00.022563767878665541245(,333248987 %"'2%! %!  ! "#!"!  #$###%&$#!  "#  !"!"!""$###"#" "#"!"##"#$#$&(%!"%&(*,.0)&'('%$(*'%%%# "!"%&" #"#""! "$(*)'*..,(%%$$"%$$##%$""!"!"%#!   "!    $.'# '$:77,33866 954250/69#!.-,,96)%%*356013 1/61//..,'0*011""02.*7'1(#3(3.+      + +  +          + +   &   &?:77DE;K<(1 +      /I3 + FkQ+*ZiM=aJKL + Uo-<349*#B2pl$ ! +'!    +  + +4/);<30-)5i)"=38873F$1  #+ + +          $+.../,- + + +    ""%""#"%(--++//3290,05243,(*+*)3408/5 BDG:>D2==:BDC>>A?5.-9UYNZloY>2.,,1,.-(&,..*)-,22272AL=;E! @%&%&""!%$&&'0/*'+,)#$##(,.18<=?>8537::>BGBB@?;BEFGLMNLFJMNRUSOLJ@634449@B:=B<@>ED@?@A@@AEMKDDB@88;FDCCCDDDGFDDB@=@??@CCCEDCC#%&'()**)'&''*,,.0/.+(&,++,.+$ !#%(*,.0/13567665226544552231/''$!%)+*+/12342-%!&,/+*.)#!# 2#  $!"(&/#!"" 0)') + "!#*+++## * $#((&($" (!-"" #"'(#$#)"+/$)*"0+&% !,""%%$#!!)!$7-44**06& " &8IE-0,KB94./UW_S?KEI44 %'/ (*&1!%(%)'"2@T}vp_wdxied\QELNJG>8c\^dddU6.4@**-$C>GACCOOLO]F;@=967974;QQ?8==>??7<3FNQNQPPVOPY_P*.@)@"%&79-./,$$)-,-<2'2:!?@&-&73641587789;=?@A@JD%#!$3'*1/ZJ-+-.1310/,...-**-./..0/..02101013504 >C@@CC>@FDA@=>98:<:=;3,('+69862//0*;/%"'/2-/8;3542/244853855977632044669704651-.1/2672562068667031(!-&DFMQJLOOSMCNUPQQR*HFIMJ@??HRHCH>>=>BC>D>53+%,(/$-)LOIELBEA99892"!%&%D*2*HEHBCHL;=C@"##FBD &%MN?8BCAGCAG?::AD:547>;;6-)+'D,.2-2.,,).341/-+)'#"%%%&"('#)-%)-.,*)-*)%%)((&'980(+5/0>9.($%&+--+RNLEGKHO]2N457=B>;>RJE8228.*1A%2?:2::5"$-AM$+),091126564<;<<;=3:A=52A966;<82BE?ABG@663!# ?#V%>>@A@<8961*+.,/.9=9;=43/&('-2.(&('%''&%#$" !! " *<*'#(('%%%$%%&('"'""# _!0*&#!#"!!"!""&##%,*'&%" /6*%!"&#.'(-+)+*1*'('+/,((''**,,++-,-0,+.+()%%)000--%'())(,&&),--)%#'')) %)*$$(%&#'*()''## $)%$'('*(*())('&)++(&,,+%/,.--*)'#"""#!!" #!! !$%*$)(&&%&&%$"  &##"%*" #$!#(%$#)('%&&%$! $,)'()&###&&$'&**'''($#(*)%$&((%%$" $'##"!!%$!$#%'(&# "%##"#'(%+/+"' !!$$!$"&&+!()),)(%$($(#*  %(+.'#$&(!!$# ! $(!#% !&*$!"  63-.-..,,/33/---/--,)((,++,./,.001135434:2(*-,-../~}~~}}}|||}~}|}}~}}~}~}}~ }|}~~~ ~|}~|{|{|}}|{zz{|}}|{|{}||}|{||~~}|}}|}||}}}||}~~}~}~} }~~~~~}}}~~~~}~~~~}}~}~~~}||} +|}}~~~||{ +||{|{{|}|{|{|{z{zzz{z{{{|}|}|}|}}}||{|}|}|{|{|{||{{{|{|{|{|{|{{||{||{|{|||{|{|{|}~~~~~ ~~ ~~~~~~~~~~~}~~}~~~~~}|}|}}~~~}|}|}~}|}|}| }}}||}}||}}}|}~~}}~ρ~πˀȀ~ 񀊏󂊍ƽºóղ璑֦DžłΞ’͊퍝ᓤׄɿ钔ꭵՎЀĶܵ΍ꈯŠλȐęջŦΚ܃Ӎ󴛏⅛𰆴񮣤閥ӏٙנ㻍̬򀮎ΥΌѡď򍪙ʞĢ什ռ۱骢쮿᫭ԍ˭ٻ֔ޗּт۬۫˷ҿǕ퇍򇔉削󒡙˫¼ӽ끇䀇뀆𝢡퇒ħЋǻ¾ռΤƱ䞻Ҟ񊮑Ϯռʫƀ度·ٱܴ寲őȀӉփί܉ƹܾ̹ljڜи̂؋̟⿰ㅍĪ昁³ğŴ멐ǜԵޘɮ続ˮÞԡūѺ˩ﵽû䓒瀁ͼЯꚓ޿ĹЭʲʾIJǦㄤÿ»ݽ۔ƺ˿󐡨ƻԿ܉Ԯ썔ƿ»ɫüƸ큖ŸĽжIJԺø܀˴֥ǻުùg843egg5|35665CE88673_c874_Z^69:54676549<:4db]]b5:;;>=97834578<@:64689gf76nd[`f8::989899:84gedfhifcf:;867jjgglnki8sml5kkik79:;=<;<89:8&<89::??ADFLIGIIGFIOMJFEFEDDCCDDC>>AACBBABACEDDFGECACCDBBEFFFEFFLLOJFEDED>EFHGGIHDCAGNMLPPLNKLOQIDFHGDBCDBDIHEJSPIDCILUPOKLLMNRSONSUVPLJGHHFEILLGGIGEGHEBBFGJGBCEJEE?=CFBADDA@BBDD@@BCEEQY_SAB?yGC>?pnyh]gj:l]d__iTUkqt;<7?B>>A>:j986?A88:98Wfeklom97ks9eeRmBIGB;879=?@HIXFDHIGBGHK@=B8ogW_Vl9g^idd^feh:6knfa=@;9j\V`jgjp@kbct^Fbkdj;=:774636;;::9:>>>?@;899:::9^:<<9:;;:972/X_RG,0(.357<"?IK+1-2X>DIUO(5TZQRSZFOKC3H<03)2+/!..+#)&+0 ')&?DD," +-:"+*C.=1(C?D61O+0?,?J((+OVIGHE<&*-LKG@6JLEA9;PO8\Kd%%"!&"".5574:@AE7G)`.H=91?G9?:#C:;/=@IDA8>VmmR[qTT3t\:  #" #"2 ..-$& '4=MDDHU>623/59T=:FC,061/3=8."H@TOY=@VSI64087I2IMAc5Uj^r0WKoLy34LnNZB0,I`:/.kkR@paro`~e?C{ep7^F0?jmt?NZ_tSo^}^yjzsY[MsNS2;OEC?_qWJamfB:8b-/q{gz{l'+XY]}" 'qƓ")QQl-" #!#,"<+"-,(#$#4$8>93+3/%1+F6+9vn|en-9>E1>H$)<81BGOHE?%1$!-##(A++,+P263A)"(0,DO32-$')++)'&#$!#')+,/..*%'*21-.--+)$!.1*,,+,+,-441.42/14331348;,C82*$!"!##$""! >:67<;7<AFF%IB57@%A=:BIIDJILEWVLMX,QHF'**')'*,*149>@<8112225:65:766<=;>AB?>;jjv=6bFIJEEKQRJEKIFEBGCCB~BIBHHGHKKzv|nrdxD?FH[aghgjmoeenkkyursvphj`[m{QqvyOEsOuLE=AGJLKIGJOHMSKHGIGFLNOQZc_baY[[^Y]^ZXXWX]^_fgijidnllvlifdilskkmjkhiuwsmlsqolry|wwstsvkpigjltuwwvniieegddmrrrqpjqy@ADEIKIHHGIIKJKMOORTNFBKMLNMKEBCADCBCFLMPQTVZZY[[[]][[[YZ\__c`_ZTQLJLMLQSY\[[\\VL8:27FVYNKIIJHE>KIFFLaD74-,&';28EML58)NEEQ(=6C:L7%$.07Zi[D0\e^IL>MU6+*')$%.>LB7f{S[IIY2kV>@@TDG:c:C4^8FZZH"6(5F\;UOD(WBVS1O,-=Z-:>PJ^]a4a23YL7<;OA:&9C;1;3%?C5>8K@DJ[>mE=nEWM]FJ_Zt]VW[XWXXYYXUQQRQRWXWVSRPQRVWTRRSXUWcrvvb^cfjkd^fgfjg^VT[]`bfsqkjca\ZTS][VVKIPROWKJJJPUQW\TRRQRZYYTWSWOY[f^z|XUU[XUXY]YUZUNOSTOMTY[YYY\_]ZWRQQRHVh~s~zy|w|J~IGoYu|kkoz}wy{uwyx{woi]S^LOXGmNOHGv{}wurbtxHFrAECE}DzxzukssqlhhR<@E~>:;5c29@EJMtGv]Tigpv]oxoyueZSgjgcURRSMENVXVURNSV`d][RVSNMIEEHDHMQMCKIDNQTVMLLCGGPTPVTYRKNPR[ekhSKKFKMNNMs|yuhfZmehtwrqjc_c\\[\\f`a[skTH6U\Gp@SRSUUHJT\_dhcosljebW]b_X]gmlndc^yBC|yrZttA}wvcJttzyppm_fi_YW[Ubrf`hge_TKEUPc]USQKMNLIHGA=FGGJFBF?BECCDACHMFHJJINOPVTCL[Z[2aU^6=D;;A>>>9:88875652479;63c_a443e453c``ba]\\]^^\PMQTRRVY^_ZZf7fgljjgo]U`bdfdf5jd_eS/,./""+,*)*..,-03/51,./V121446644354247768773445!!  !    "$% !  #k!!##  #  ""! !   !!!""!!"""!!"$" #$&" !!"#""#"#$&%$&'$"!#(''**%&$$')$ "#"! "$# #('! $&*&" #$&)*'&*+-*&$""#""! $&%""$###$! "#$" # !  ! &+0)5#!88?4-412,3314*+564.e+3/3452/410!2  "52',(60*300,12/23-+3-*-4257 50/6+ 02-0g" + +"    + +         +    +, (@A'3686_R H;   +     %& +,6^E->*-4K (6=# +=#  +-0?3BG& L5 85 ;,',#% 6"  <$WE)5"$D53BtSSmPY3 ;K6clL0*'"Nj 9Z!8  o +     3-6aXiTU *3;82*   $       + %'%'*1+*)% + +  + +    !!"" #"%&$&'+)&452<3033&&&0+*647@:;E?:.-/.CDEHC>/+'$,*=GODV5CHYkrsmmnncw|zyvv~wswojxb}N>:@?:A;;:9=?B==?<<:CBCACHKHFDDBC=A?=>?CCDFFC@@>=><;>=?3+7.F4J(BACGD!$'! .,/1AMKUZWa_HEDM:31PKM*#&/:7..(!$#1(7"19/! ,054428IMN948<=>ADEKQWIH!5&(-+U=I,-130010220.,-/--///0..,,-110.//223?JLK=;@ADC?;@@?CA93168;?AKFCE@>961.8854,*/102&$%&+//5920/./66812.1-68@9CE4238665686263.021-,146335677662200(C*;LELHHISMMFGQ,ROOK+':1CRG;88CICAFCCFEFFA?6-/"$(4,*((LRMCGKFAB?1;>'%8!$%'E&GABDB:@><:95& %EC* =)@-(7:@D2>F@EKIC:40=?>:1...*#*22//-+//7:53-0.+*&$%)%&*,*$('$+-.0)))#%&,0-0-3,*.-15:=;.('$(),./XYTMKSYKDHLFC:82?:756343448452A<3,*,*(@#/-.01(+0579;6>A>?:8/37503;<:<671?"$EC@2D>"BGB?0(=?BFA9::2682-.1,2;627631,%#,'1+(()%%&%$$$ $%$%" " !#"#y$!$&(#$%&$&''*) $*&#& #).43,(&##%&$"$$("$,'&'%',,',!!"! $(,../,'%((**(((&'&%'&).-+,..-,,.,*-.-'%&'-.-0)**,)+*&**+,*.*+(%#$##&*(,*&!('($(&*)(&#''$)%&+)),)*%),**)''()+)#&&#(,++))*%*$"!%""" "!&('##$'+%%" "#"!#$&%)&"""$" ! #((%&'(&##$ ! "%'&% %(+(&#'*(',&%.%&&'&''&'#!'!$%'(!"$%$#%$%$! &%&$#$'&#&+5-'%!%&#&#$! *&%(%#)&*&&*#$''#"*$,& !!' " !" " ,%')&%-%# /./-/./1/,,+./.-&(***),,//,+2347586;0)+)),,/0-+/~}~}|}~}| }}}~~}~~~}}}~}}~}|}~}~}|{|{|}|{|}}|{| }{{|}||}}|{{|{|{{|}|}}~~~}~~}~}~}|}~~}}}~~~~~}~||} +~}}}~~~~~~~~~}}}~~~}~|~~~~|}}|}||}}~~~||{{{z{}| {{|||{{{}||{|{z{z{|{z{|{{{|}|{||{|}|}}}||}|}|{|{|{|{|{|{{||{z{|{|{|{|{|{{{|{{{||{|{||{|{|{|{|}}|~~}}~~~~ ~~ ~~ ~~~~}~~}~~~~}|}|}~}}|}|}}|||}}}|}|}~}~}|}|}|}~~}~ꁂ݁~ˀр + z쁆葘 ¿킂䍎̀ñ҅󃌃ȣрԗ˥偉͝ðǵ˧㊆؅݋¨ԋڵϱϳԉ翐ز򇇰ƦʿФļ޸Į堰ρتǻĮܽѽ႑ʖŀ՟Ҕ㍛ȍԐܒ䘍ɝΫهՔճǥඊ̽Ĕ󤿲 τޏϾԡ㻶肓Ȇڐ鏭ױ᷾ـпΤ肶ŭޡ叼՝񇉛拊¾༚ͻ܂݃˲򄍔炂ւ􁅃񓖐¼ɸʼþ͸ü灒գ޲޹Ǫ̔ګʾ綳ˎā܎Հͷ醄߰ȯҟΧٛ߀懢ۃ͘ٽˆ᷇Ƕ⁌ķƚنֲĀ뇀ұĨÙɣꎲ٣Ŵɽ՟ͦꌔɱŀ乑ƷͪϲԜϟ꿔᫽ƋƮͬ§ɭδ䂍욇ԪʳúЀ⃌Ⱥɹ΄؄ϵǷʰ灀ȵĶ̾ƹι󍀙˃ýȿŽĽӼƿžþ˼;ýοsʯǿ̧痡ׇƸڀS`667744455478<75:H:89:<53355]_[e::777:9764e67435d]]>@><<:;=:9867;@?9647987ecj>=9;::987l69<;<>ABGJDBCDCCBA?BDEDDECDECFIIFDEFGHHG=;?9:@B?BEEGFDIIDACFKJHIIIJIGHFCAABABBDGIHIKMKFCCDBBCEFGHHGEBGOMLIEEHIIHFGHGHIHIGFECDIGEHLKMMJJLIGHFKFABDBADDEIORNIGFINPONQVOMRTT\[SUUQNJJHFIHIIJLJFGCFFEDCEBDDEECCDGEB@@BDFCAAEDIUNGBDEHHFABNURX[HB???=aaqj@A@?:99:;>@EECKEFDEE@<=:\i:;UKde[>b===??;;749=::<>=:<@?>==;;9854440[V1U8J>K:8*,6263?)2L6IN99PNW/100-+MB1E9:D7FDA=G8$&3?(F9#(05=$91D*1&,/.&5>.+D%6.*#/!/,G<%9B4=5-IE<(/JQHH()NA2(.3;3/02P\0$%$$&.+H;C8D0C7;.3,AA?@3?5K=0989A?IDO9=>LC<U/RRlY?W8,)#%)'"&$ " %),$+!33431:>.AA8?>VfIP1G-..29C,,&.:eRJA9W3T>9;22W=Z,+JOOmiog]6'9/--*+5aivJRpRFH;FQSO)28440=MC4,(((+,,*($#"$%'p,12-)*+-42+.+++),-/,'*.-/,)*-40-.0,,//233.'9)"$%'$! !##$$$HE><;5793;;9:@8:" #"!0*&* "3:573503A@#D>AHJUSLR))TPGIL&KML@HM('IEHEEI$(K)+,OS784,LC4+/L[ZXQ*+020,&(Q,';K.V\1kineHEEGGEGB97>:H9B6>ACLMMIG(D'CAA&))-,&DM*L*-45:<946=969;86>83:638=BDJKII@766k>HIJLOPLMJE;8:;?C@?AEAy>G@DIOP~zte_^uHMS]biigpppofeijnrssvvsqkcY]xcnvOOSJOMJE>GKLMFBANROTVJA;<<@CBBADIJNQSUWUWY\\]^][]]]W_caUYXQJHJQUVY\\^]ZYKEHURUZOTSOG9\W\9B=aE:1D%$E@/O@,!$)0M5' 5Q4TB!2O@C?HTTS]+%(:):6-,( !D?E5_>7fhD(63dJK?:40=T,Q:;kLfH.8 -.c?BA[UZZ\^5F>@=]J:NB[^@BS3aKDL$+>AO3Uh6LI%&,28E:=39;?<>L76I?DP8;;[>4aVHOFRGU5<3HIW,$7?>=92STIXO748:864d`\SPPOOIGAFG>AGKQQd<<8cYSMRSVRPK?AHIA77EALJEFK[6R]4aUONOTSSRUUQSWWX[_```a1a``_]``]Z[[]XW\[KLN]2]faZZ[VXTSQTSRPQTQ\a```VOPNPKY_]PPTRNSXUY`3YYZXZVSRNUYZYWXTUPQSYX[TWX^ca_[WURSTVVUYTQGBACFI>9>OMMJFMPRRLNLGHFIJKKIDFEJIKPQNMKOOMQJMKDIFKNM_361144ec`[RNNMORQURNLQTWYUSXX[T^`]YTPNPPNSTMNQTOOTOOSLJKKKGGMKIGMKLPNMMOONLRTXXRMBNRRRQNMHSSQWSKQQRQO[VSX^a9;6BHHEGBAAHGHJE@FAAAIIRCJSMICLTAABACD3P=B;<;;7597N7>??:::78787863798653b`f4565333-4a`a^]]__bhYTPPRQRSWa\[Ylrj96okkbX]ag^]]_db]Y%-%),)/./,+1/15/-0623434426646667786h 6!$  !! !!"!  "##"!!#$$%   !#$#$%&$"!!"#""  #"$! ##$"!"##$%%&%%$"!%%$%'&%%#"$#"#"%"!!"!!$'(%$""$&&#!#)%%'))/.+/.*'##" ! !#&%"# !!""!" !!  !!   " #,&!  !&)(*-!11<4)!897 /0..5)/41/'!)2'#01*,205.414"+0,22123/+(.,-0n      +            +&&0?7(/P + + + +       + 9$' '.-P=7HEC`'  +<  -"$+- &!Q  )5$!'++/&/5)6%*,!+-0;.$#h].&%G#I@V!". %VFb/L$?`[8KI@T  m  +   !+YiWW{S=5(,:/ + + "''(($ +       ,)"""#&&,+(**  +   + +     "!!  &' %*,)-/057*,0)+/*)-085&$#"B=/%(CQIA8 ! :#1"@E(ZX`[8201223.)&.+8+1*,12:<:667"620!"&"07 :#',.151*/00,-20-4/*1.,/6:@GFFE>722dBFBv;D?EJPS{qc]_vILQ]ctyvwrpofr||zzy|zsiahsxNI?32N,*&!(++-'%$,-+00(#! !!$.018626765670,052212556928=A>948EB=77:99=?>?<<@@=EE?A;9;CDDDC<27:ACBCBBC@BDDFC???<<>AA@ABCFBDF#$%'(((*(()+**,.-../-&&++---*%  "###%(*.0245898878:9829:7+*('""$',..0011012/.&""('(.&(($!&!%(  + " "!&!%&(+   +., +"%$+"/ *)"!%')$!$+$1& )5! #!$+1-#(!$#!% +"/#' &# #&0/,15%1$. #'1&%+@557-H>0@dFYSS=114+0-))+!1/#0%% &-44"!<0;fUY^XSPED>@@DD>3QJJSkp6[SI6637@=5%2-GHDIPUbcS}aDCBAFOMMOU\JOVY\^+4H98/'(##"CDBEJ7499C?7>RBP\\\c6n<5@,B('D7)7-&(./%"*-3%32*!*!/#00112679<;<@@>@DHLKJPO@9*%+)1?.-(.*.000...0//001110-.--//00-147;?AC:@:9>BECB>?>@@@;858<<<78:9<=>CC7644-1242653/'3<533031.0-/46866-/9;-.%$+3#,/(NPTQHHIKA(<957<(%>#9=FJKF;::<=A=956773+*!+(#%5?78 -'=>99GJPJJ?<78=><933100-.-+-/02*+-.1/1*)('*)%$B%)+)%"%')+0/)&$#A*($+))+/)4.+,37/+&F%--*+USSOHOWYTFAC>JE>>>;;:948:B@NE@=<@63.('9=7,1!'-+-0-.&*/45588;788;844ca643365]7C>A=CC<:??AACB=<:<;9;7hdcfgdc_i4gg59;;?<98687ljfefdhhi8:978j757nfhk5579:86789=;989>>=ADBBBCDGFBCEDB@CDDEFMJFJLHJIHGF?99o;?=<;==?ABABCDC@BFHHJLOLHIIIGFDEFECBDFIIIKKHGFBBCEDGIHIHEEEDJPLGKMNHHGJKIIHIFFGHFHFEEHGDEIJIKHHJLFA@DBAFFDGHJJJFFEGLMLMOLNOQT[VQP`ZRQTOIILPJILKJGIHFDDEGFEE@DFDCEFECB@@BB>==AFL^XAEEBC<=:;AGRY^\WLC=`Pd=<>zn:?@<>>@DD>>;><<989<;9?BBEHFBF9J<9?ngFObcZdVj9FSccfog:<>:e68=;89eoa`V^Noc?pbhkp`bcdg6;;@==>>=<;==>?;9;95/E::??;;>;:76444664.SS/4`YB30DDIAFD5B11E/FHB=Ryg%83-232.(*) $#%,# '+"!!0 45(,#+014=?GG1),?;3+583C)I0:{[D^}mM9>i<8AzpE7[UFewF6F8g6234345YMM`j[Q25304=>@DA30,.0/.-+)&!#'+-.1+%./01/-.0.+*1,,,+.564)*-00/'%(+.-.2.E,)$#!#"!$#"%%ILLE>=6>87:>>;=8/9!'"(+/""!$# " !8990815B!$EFEEKMFK(&()%%,)'(+'%(*%$#/%(&(*LQS,[R)/?9VNGBQ7.C5A*)''%$&&(R<19IO*S.0_:GXCC=4;@C73>JTMDGBH+,+-.0*)%>"&()./13/1NG&-00669=>ABAC:49;=B??>?>CDEHOLLKHGDKPOLKLLINZBD[2-7/I==5-DG?<8AEDpNlS':?)"++5@;=V7[SeeB1;80blKZM[=I/$,>=E?:@TKEZ=C'4@U6D7Jz?}z~opqqonpsD@zwLKhklghVJJVg==bVWX_:_fuIM:9fSLI73edZJLbkjk~BC?CFFQB:BPTFEGZP[[V~y`Molm=IOQ^MYYZWPSW[Zbajuqnljp|qKX8DIr[d_caa`\\\WMTXTTZ\\XSTTTRSVVTUW]cd`a_cbnliujhekodbghigc^_ef_SRTW\^d`bd\SIRYX``Y^\`edXUPIHWOTNI]d[YMNRZ^a^\SU`jib\XSPOQVPRRURSUTQQQSZ]SSRVWQKJnegqzx|}HHMznzbfz{vjmiefhrfVTV;;USMK|==l7mgCs}~~D~orkq<;=<{qph8;E@9FERTTLGKUXSUUSY`SIIHJLLKr}MthutqxaTi^Rjy~udcbl}mjZOjr\UJWjIJENVHYMGDJR^WW[]bofqlddW[\bfeypehs@|p`XVVvmh`muKD>@FABDvkbolmndVXQ^[fl_^so[WSJKRccQSRNMRNKHLOGHEFMHJCBEIKJHHNGICGRXGORRa^VPPW13:<=?B><89=?@>;8KFG9;`96;:9:63gaYROUQMHBGA>>@KHPY2<@7[TRLRNJKDAGKJF93??GOGLRTSKZ3:^TIMKLUJ_41_[AXZ]``_`03a\[^beb]_]^\]XWSKJOLW3eU^_\RMLOR\YSQPO[XW_]XTNNPPWPIFGRJLTcZ^11]U[QUWUPINTS[SQQQSXVZWWMXgfc111ZVQNOQUTUTLEFD>>K;JJPLGHSMSY\USNFEDAALPDFCIHHP[VPOQQRRQNLMPNRKIIV_a\0c27B>6\VXYX\]URNLNRLRLKOc4b35e_WRPLNQOMJHNNMSTVQUPNMKHDGLKMRLLHIJMOQPPPNOMMNMPMIHJMRPSMOLMNNQLJGKIRPNUX\ZL4@>=;GA>EFIFGKFB;J=>BANQKHJ?FMYJ@G]AA@C;Z?J;4468196>8=>A?7:9998886625845f6af55655213322bb][]]^`^VSYTPQY_[\^bhcf57khhg_X\YX^d\]ZW(!' //0..,.--,(1/.2321,/1086444134548235   !"" ! "! #""$%"$$#""7!!    #!""! !""#$"#$! "%#!$&'""!#$##$%$#$##"$" """$##$%" "! !%%$$%###"&%"$'&''()-*)+61)'($!!"$!"&&%#$"!!!#""!! "!  !".+" !%*,++% 0'4;42#!( 2-(+2042/(5F!12 )02+0)2"'.002./.6./).&:,70498..-./!#     !  Q +  +           +!' "/AM5 +  + + +  +5$ 77 + .P; +K0&7*@. +*(0K?  +.,/##!' 6#/,*&2"#../9//=8QG.i M=\z +XD43GV03[nT9FA+!CQ$ + +   + + '>?B\njԄA/0)! + + +  %-M)")69-(  + +        042.'&")(*/01-)!   + +  + + +  %$" %$!# 378!H<)*ED>5?.%+ '=*#27;"&K.?L42-&+.7++3?@BLIJIFCAINMIHGHE7d`p?HHEt879;h=>9>FOUGAC;uu~Q\^\`_orqqorqny|x|wyxpekq~NvO+K(())"&)+*00+)7:3514+(/%))/3494687676995001021578=>;9>BG@?>>=;>=920:?A>@GHDFJFC=<:C?<=BD?27@AA?@@@?ABEEHA@>@CC@ACCEDDFGI%%$&&''()*)''*,./10.-+)(+,+-,*%"! "#%$%(*,.//0237;<:9::;;57;;5*-.+)" "'))'+..546433/+,.01+.--)'&*-7)1.!(  %!%(!+3/'#""&$16#!"' $ !%+!# (' ! 0.&'+*,$6/$4)(*)52#,4+ ( #!*&!&$ "'66%(!8&*A.,B-=`F58VFcV5/&=+('+,.*"*)&,/067)%55(.4YGDC>;20PI8,,2<9IIKG66,7BDLJF;$<&"&&N)V\bSSSUTPRT]_3.VT86JLNKOG4/2;',:162:%DFQ38$!?00/!!FID6=Q\YWg311573:,)-0 +%#1%4-3-!2+-<:..<8$+6-$.665:;8,?@@?:6''%11.,NPLLPLHFGD 122"8CEFG&EHH8878@::4" &$$/%.,>.*-469J?>3-9<84).,!%%*.%/)'%)0711435KK>8B<68-./221=:35="E=410/B><3:<(% !%##$>64=:=@:01)20570/><1-)$'*336)**('*'&$&(%%##'#&"""#%&$$)#%"#',#(&&-'#!#  ,1/,)')&$"" &#)++''%)'"& "$#"%"$''%#*,)$%!$(&++*(+--,/++,/0/,-,.--*))%#%"&,%++,%$%&&++''(?'1-)0+)(%$'(,'"""("#&.)*($*%())&"#((-('&&')(+)(#(0/-))'%%&)B"$""$# !)#'**('&!! #%!"!!%.*&%'$$%&$"%%$&#""&*+)- )'7)*'%#"#'$&""#,)+*)%$"$(&$""%%$'&'#&$#$#! "%#$($$"###%v&%'%%%$&&$$##&%%$%%&'&'#" $!'%$,++)!# !$!!##!#$(#""!$,""!,$300)/.-,...//+)-+('.1./025214234/*+))+-*-,*Ł~~~}|}|}|}||}}|}}~~~}|}~~}}~~}|{{||{{{|{| {{|||}}}||}| {|}||}~}}|}~}||}|}|}}}~}|{{|}~|||~|||}|||}~~~}}|}~}| }}~~~~~~~~ +}|-|||}}}|~}||}}|||}~~~~}~}{}}~~}|~}|{|{z{z{z{|{z{|}|}|{|{|{{||{|{|{{{|{{|{||{{{|{|{||{||{|{|{|{|{|{|{|{|{|}|}䁅~~~~~~~~~~~~~~ ~~~~~ +~~~}}}||}~~~~}|}|}~}}}|}|}}||}}|} ||}}~~~}}|||}|}~~}|}~}| +}~~~}ǁŁ~~ƀĀ 򂅊܁ÕѺ܀򀕮􁄊ͥ숃ݨ҃Öܻהיϝؿǣ􂮲Ԯ٬ׅҝӤևᶥȝ̞ٙэ毿ؒΧ﫶ʤ¿ºʎǧҮځӱחƌնڙ܁錅道д㱘ˡۛ¬еÌ܏āƋ¶ߑĵɨ͡߻驽˫໬ĥŢ䁻ɗᛨƂ鑳ᏀȀŹʼϽށйڏ㙱ձ뻀婊ꉌղǶ焍ı􊍋򉞟䂖󎍐􂗗򈓌Àβ¾Ƶі樊僡ꊊ鮭吏缉鹳ɐ喋ºɵ䓨ђ֋扖Ǟ޺νÀǃط욆כ둎ׯ܏鼝̛ܷԭ化̸˵™̱㐄ѿ繾퀌ɹȞˡ瘕ژӫַْ˽ƾοĿ·ĻთҾúϦ덞ـ̹ͷĵս삘ߚܿȿϼļķнß񈊓Ѯꅎƽ»ƿܲ΀ֽõĺʾ¼򃂊񁇍ʾ¼þԫnθЯƿՀX\6h988d78455255478=:<=:965aXSZ\b778778878976a]cg7765757:64785:JMKJD??@BABABCECABCCDCC@?BDFDIJJJIHDCDGFA>:789899;<=>@@BCB=;<<>@CFHLIHHMNLKJKIIHGEcGIGDFHDFGEFEFIJIHGEDJKIGGGIJJKIFFGFEGGHHFIEGJJIHFHDAAADDBA@BBCEDF?@AEC@CFJKIMLIKMLNLMLPROVVMNMLMJGFHIJKLKKGEDC@@ACDCCFDDBCEACECBEC?DDEB?>>=@;<>CIW_f^PBAsb=F@ln>?@CDABFE@qanAFE95>??>==?>;9n[`m9k99h666f^Ys8jj589:;;>==>CDDKHC=>;;:VANaf_ah<:77;<<7;9=?==:<77qesr:9qlqiczQ]`SRb[`bf4?DECCCDB>:899746874/303=>:7;9887653456664]X-/130[bYQ02YI;77.O=+Z4.13Z66-I7QAP4J/V/62OHS)@4-)*)'(*'!0($';TH6<6  . #&(8/( +t@!+$5;%";1()<,+98$1C50-EAK<9PCM>2F )((%( (CCEI;>?=?A6IBC<4??,?783#00&$,F;sS?[D[P{W/;=5tvq=;5>$'&&)& +#))%KG<=0GyRE1S77<->6Z249HG9wkyFV[KHs[=/FR?f.OL/$H7A`xhJHF=EZq2OROih[`csueD2DAP0TI+@JZ<76_4a`aZ\X:4w[e`t}rjsprslr{ep8910'Ug($-&sR>578F$/H^ĄDjF \]ixJN{3swJnT%&G@D>1 #*#)#$  %C9*$!  ""#HS2YTPYnli~",KbwyS+@+-+*%/$878T`diA]_-:J8:>;440de20/]a38>BIE8/.**//*&"#')+.,.++---/,.1//11-,/010&!)12-)$!(---.(6**''$"! !#!!!#$KMLLCA:;0>@A?: ""# "&&%%(% !$")%,,2!#$&$!=?7>!<8778$>=GHFJEMGJ()*HJ+))*,+**()'$#%*&*%%(**NPOLNF&02NMK62LA7"++--+-+,+,+&?59ORW...AED=NPWRqg?GAqjst<:6m><=<@HLKzll<yyy~z=>ABBBDFHGHEFLPONPQQQSTKHLOOOMKFAC==?D?@BFHKLKMOQRU^b`^^^]_`acaa^ZVORUSUWUUVZ]]YZ[\\[YXZ\]ZZ\]UMQ?OL@@9UB<:noO)&Bb6O+;=1DTW::^A=3KOB\9:ZD-S;.75@:/J>7;/M>*OE.ET^D9@B?@H;*V6EIJJNTIBE7T/D_+-J%'516MI23&5P4Q:?6?>>>=p]T)33@C7=856Qikd884;YEI-BlBe74P4gC`<<=:3YJA;PAIRA*8P?SPOJH;DXnMyahgXJM[ibx=g9^f5Q:9<<9=@3<@IFAIxLUl˿dc~{}||yuvJbBAZM_A=@xkihmntz~@@AA@@=zsux{~HLTKi[KLFBqAID@D=??>?j^9<=98>6QSGEGKc_Xuxf`aecjuyjbsnf`ZWYWTQQQLM[]XVVOD?`^VMBILHRWVXHHD}GFGHACDA?BGIQXaOVV\WXZZRJVQKGEHtqM{zg]dfbnwpsuypjyzji[ZIyATOB=@AB=@NHFDH9$-/''0*.--6 !        J  + +    +  +   ;(+"3$5L% +   + +       + -*''&>< + 1v'X  "  V4+I&,# +    + +,%* ! +?#!!%.5;(,1.=T9>LRI9CSW!;Br^]8 (^k/V/ 1G;8+=O1lZ9#/(,# +    + r   + 1B#OTR\wx$)>r~o_? + +  !*,767='==$!&*%761:    +    +   2435..),%13.-'  + + +     $#()%&%(%))*9:;:<0$;<5)%5)! .%#5:>!"%5;6<0311741ADDB/2HCA#"##"""#!!!#'&$%EG+H#*)'/63599756,I*3:=>==96<@@=@DC?CDEIKHGGFIH;liBMFzsys=96k=:;9NZYWUW_^dba`au|{q|zxyyvwysmi}vu~Gd1H%)%*-.)+)**((+-*398.,-/2+*,//0*.75446766?65422,6877547=:@B=@@A@1<;9:98:=??@CB>D"!<>?6=E<::@=@>><;8:>CC@>HKJECDE#$FHHKH$%%$$%&()('&&+..-//.0//''-///,(" #"$&(+,-,-/124:><:987899::997762.)*-)*-+-.2440.-/0/,,-./.+,.+%)%$$ 24 N. &$+"")""% "&'#)"$#!"  "' !""%)" & !&0),#*(4*%"/13-!$3/30& '#'$ +(&%(&5BQ3J;Nc@B:106@F>+3+(/"! +A*.8\[~zp82VG82:E;;H@AAL>A@D@?CGHNJGA(2#$-.4''+QJKKNPUZ].//..-*RLSX^b:?A9L<780&A%12(HJGNQ$ (3=0%$EAKGMOXbbaXVUUQ:U?/F'$4D)!*2340"G1,0&4)88'-"13,"/BC4#B==:67:<>;<;;4-./2;=?@=8534:97536;9;96721.*(&"6#-574597458<:846;9870/2/.*,,/4-,,-2//1211/+//--RNKI??MNK=9@@IMN,PFNL*,QSQ,+*MJIMC>8HMLFC@@?<7501 (./.,MORHEEECH#9 9?D%%I'DC538512239<@ $"&">DEB;A;;;4:10--*-/298:/1.,()2+),/-)&&%%'')&"&(*$###&&&'()((&&)0(&&'%#%) !01-)'(&%#!""!"$""&+,+(&&%#&#&#"!%  %" "&$''(1* !&())%(,-*...-+/--.,,-.*&&(-+(%(,"$$)-'$&/.&(',.2.,.*&#$##!&.,,)*)',+*)*'&'#*((%%%&+,/)&(%)*),+*)*))'(('# ### "%%#(&()&##" !! "#%&(&($",-('%$%""#$$##%%%"+$,3.,(,'&$#&$'#$"&()+*&&$$"%$#'%&%&')*)&##$%"#!$%#"!$()%$&&%&(%$$%%(&&+,)()(&('%%# " "&*&&(&$ %$" " &):"! !"* &!!123/0.$-/00/--,++,1/./../-/3002012+'#),1/)~}}}~~}|}}}|||}|}}|||}}~~}|}|}~~~} ~~|{|{|{|{|{|~~}|}|7}||}~}}}}~~|}~|}|}}||}|}~}}}}|{|||}||}}~~}}}|}~}}||}~~~~}|||}~}}}|}}|}}}|}}~~~~~|~|}~|}|}~|}}|||}~}~}|}}}~}||{|{z{|{{{z{|{z{|}||}||}}}||}|{|{|{|{|{|{|||{{|{ |||{{{||{{{|{|{|{{|{|{|{{|||{|||{|{|{|{|{|}}π~~~ +~~~~~~~~~}||}}~~~}~~}}}|}|}~}|}|}|}|} +|}~~~}}}|}~}||}}~}|~~~}}}| +}}~~~~ہȀˀ ⍇肏򂑓ɾȀ啄̉㠞ζÿπ¼؋݀獣Ϧ嗩ɐʝЅ͑ƷԼŰ˦Ӕ鉞֞ゲ끧˅۪ѾԦʵÝǭ㊆ֻֿ矁ư϶ϧدĎЍߌޥӑ䤐Ãє۩㳄਷㴛񟜌ΥÛáӺܔɡΐқČ󖈔Ïހ˜ɺϯ҇ţߎдظ속ЂܽΔھýö¸􎃐ʾҼěֵႉ聎늅Ύˀdz­³ѸՕۀڼ泳€젴ˠӣʻ嘒ٔӅۼ˩ċ帷ƒ͓錁၂Ϛ͟ɓݎ찛ߌӏߧۂ؁╅Π׀ڈکʨ͌㕝ۼš侳™ʲσӀϱ谈ܼʝϘNj둙πψƶл񃆄޸􊋃󇌋쀼ĵƿ¿ŷÿÿཀżԝܕ־ɾ˾ʾŭϴ􄑓ӽǼᇒDžȥע͘낆񀀀ނҺɤ́óȿƿϿ념ùƽ¾ſ瀟Īϲ[_e`h6jjW:62474e39<=>>>::86jg_\\ci34869:997798db^7;B4:>9679:=97DIHIE?<:=<=>>=:;:8;:<=;kgS^369=668:=>@BBA@GGBABBFHJMLHHHEEBD?=:::9neh9>???@??=;:<=>@CFEECCFEFMMMOSUTQKIIGDFFECFIIGHKKEGIEFLKGIGCDDBBFFHD<:>AB@EGJIHEAHHHMMHGEEFIIFGB@BCB@EHEEE@?>@CILJJFFHGJIKLOPLMNKMPMLHCABCDHGJXVMNLIDCACDFCDCBCBCEC?BFEDHGBDGHFF@?@F?=???@KUWS@<<9>I@=BA;69BBCCD;f]V7VDF[9?DFD?:?CC<>=;==>=9_^nef65888d`Uh;:l9<;9<=<;<=@kaFK<:@@B6?p`aATY\cl9A<<=><9efg;<<886g^edfn:jghji_[TYXX^dcjc2;GHFEA3156;7>8?B?BA97:;888555664556432/-27]092.28=9763/-T&*6S,/-7T0?Z>+AS>C?;LM,:E0$$-/>.1I>Qj>/NTT0NBSumShv;.GB3/4&)#5=CF-I<0"!48.% ! PK=b1^_M<7W?7DE3053Y3UZT5Wa][1-]2U8AISMY34m`Zs]s}rv_LfekmVykW_sB*O'(*I{r|b7R+(.BPD~e`MCje&/0,<;E810+  '%%!!&# &3@1%"Q%H6Y+iaSSp:$ |BA?F@c?%*,1cwoV1236U&J'7F@:721^`^^/289445>@A@4/21-'(,..-,.02201/00-+)-142.150%!&+4/*$#!(07411I*$'*(&$#?" "!"'$G%"PQMMLIFMBA=6"$'$%((&&')" ! #% *!!!$$$"8ABC"=:974G?>EGFFIIJFG'((F)*&%'/.12132.#**+&),++**KI>-:1)//F%%@!'*,+-'-+)**'%DB'.9QRT.3?MO[D9>C9'(LYFS?>`30.,--,-1.--01-O(',TZ316635B<677>A@>73>ABBCEFBLLLJGH@?zFGyh=<9[TWVmFEA=EMICEAh?FI@:@MTOKX\OQZ\^Vlfdl~pqqpuxvquoh[e_trjpvdsoJORSLD<;EGLKD@@GLFQkk\`YTXNADSVU\RK^bTY^\]YY[ZUQLXjhjf`dfdehjkopeijjkmrqkeklipwuyyv{|qndgfihdfgcfcbcgllmqx@BC?yvy===>>?@?=?AABACFGIIIKNPPNLMRWZYTLJNPSRRLHAC><@x?ADEFIKKMMOOUZ_^^^]^]^^`abca_^YY[]^\YWYZZ][^\\\XRUTUVV[\\ZX[\\VKFE/V5?9|EJN1MW0LH-A6/00)B0B0'-)'H0500VO3*6=MD3-@/+;^;]85L71.Z3O=5685=>?K6D:>67X@9VdN4H8532A@JOL@84RU(.AF629-7Q)4Q'*YO7$%@(O0=06@T8h\\dg_>5@Z\74;[+.5QHF;2E=BIEK[=>:KOCS:5YS?CEDMq@6V>=DIJGFHHXvNcyqc`ad`fs~smpr{wldZ]^[WRRNLOTY][RMMRWPHDAGOFGTX\\J}xDCwt}G{{=BFC?KLS_WY[`jk`^WSJTHKHFAAB}xqvx}EH}qhcbhihckmnrkmfk_sveeB;:4K\=7mFfFd_^e]df_XXtz~qxID}fb`ltnq|wpgtm^]VQRahijxAB?HAz|z}v~ypfd]]_SONX[ejmA\aXYWROIMWPSOLLMOLORMHCHMMIGKMR`bSXZSRLTZEQLEMTUPZ416J3U>?0P8S7Z-FR-034213a`c^][^4``22bd[_XSRRPWLQRSQZ5;^9_Ta:V^PZbb^ah_SIEHF=AT>EMRNPONOIILPKLLHHFGFOPNKELT[\UTWXSONJKMNSQOPOGJIHHJTX1776300[YUQNNMMRZ87V6:5[YXTNMNMPNSPPXZ_b[SMJLHFEGJMKJIIJQQRYXRRSLMLOQNRTTWSSTSVRPSRPI@FFFPPNIT^[<4A@L@A?<<@==DLHBK@9DEQOGFHHDFQPDDF@CDAKEA?13530832Dr?6B9?<::<>:8684487657hebb7964456445445hakf^][XUTWY\^WTZcg75i5645ha]_]WJDRc`*,/-0-0%+21,,*.0//-  !!"41&,  3312266258  !!#!!"$$"#$"" ![734 !" "$%$!!!  !" #$##&&!"$#"$$"#"!""!!#$#" !" "!"!! ###''%$Z%$#$!!""! #%#"#!!!"$''%%#"$#%"#&((&&&$&'"!!"%#%/,$&&$! "!! ! ! "!%)*)$! 0/+' )+-601//(12/,!!3/-%)+-0,,+/*./032/012/-).,+0/.2,    +   k + "    +  + +    "'=%!!0PPa@4EP   $('$  +!273E6+&(&$(  +.`(.   && 1 +/3,;-%#$ +   +3,& (# ,$24&+:E:Dd_QEU`Z!;<<9?3-(     +   +  $"$ )%&*+')*'*(((! 63-"-% ,, 6::$+7DKO6/24* BK3D33T.'&$%&#$'%%$&%":$KN.+/.,,467:<44284.018<:3-*7=@>?BC@KIKICD<=vBCqb>><`[ZWnED@?IMGBB@f;DF@:?OTMHWaSQXYZR|xx~zwyu{|y{yrg}o~wntzŮILB(+./,&"#**.+'#$(,'->;130B,-'#&/0.3-*8=3696853552/+3?==96:<::;;=>BGFC=B@>AEDEDDHNND==:;:;;?@@?BF%'(%GEF"##$$$%$$%%$$%&')))(+-//.--0474,((,.10-'$ !DI$%')(*,-.///38:<:9889:;;:;<<983255520./001/0/./,()((*+.//-,-..)# !0''&'   ' &&% %"#"#%- !%"" #%%&+% #!,'%+0,(&/, ) +#!!%&0&!') #0=<459%>M,4ZM>1%&*76 8*)##-"C==mqqbOA634AICCGFONJKKHMNKKLKL*(JJG&*1 %>'+.'=INTT/1--,-/..-/AFdWS_a_^Y-+CCBa?"GIHJIMHDBIZ%%"#%EBIOOLTKGGHIOEJI="($o&%:G$(%'9 8.1&2/14)!)%#?91E&$<:7?>9E-9D6+.,+-..5J%+"+-4.4831122243463420.0/-23584587:8777:8<<742.465:;:3016A>66BAE?;3U0VTVQ,%''4;73+*5955535693/..63.23-,,2/80**+474300+00--WMDFGFA=?FCK@>>BGQ+UNKWM,,+)T-+JKJKKJGOOLKF@5<.1/1+&<1.*'$$'MCCMDD=<:=:! ??(0,&((<:>(("%'$)'$$=?C> "&&#)J=!4F@65586;CJPC?BCHE>936532--+*+.565.+*03-'$!%+%(3575'>=&$E>}>D'CEA ##!$%*3/257??661.)/&)(&$$%DDAFGQFOPLSNKI()MJB964;;<;???BJKPZ@?;>8@F<;",3!3"5204042,+,>BD9?'%D644<>;;DB<6?:041..5): " &#?BAC>EA=8:546-)(0/466".4.//-*'*.*,+'$'((&#%&&%#%&*43(,.**%,0#(%!"%!&.(+#'1/--+%%'%###""#!!'.+)'!$%#%%$%&%# %'&#"#!%!#&-2#"!"",#--.,++,+,.1,.,()($)#%%$%()+$+(-#),10/51*%!!!)01 *(,+-,+(%%$&&'%%&()*,,(.*)(+,,+/*+,*(%%&(*&!  "!#'#%##% !#!! "!!$&%$ %(+-'&)*'$$#$$#($#%% "! !&((('%#$$%&)%'('%###"$%)%%+*-.*'$$&# "$%#$#$$&&&++'()%%%((&)*)l*('*(*('('&#"! %%%"&)*% $!&  '$ "!%%!"!!%! 03320%/.73/..-+*,,./,),2312/.10,#&..́с~}~~}~~~~}|}|}|}|{|}~~}}|}}}|} ~||{|}|{{||{||{{{||{|~~}}|{|}}~~}~}|}~}~}| }||}}~~~}|}~|}}}~}}|}|}| }}}~~~~ ~~~~~| }~}{|~}}|}}~|}~{||}~~|}|{z{z{|{|{|}|{{z{|}|}||}|}|{|{||{|{|{|{|{|||{|{|{||{|{|{|{|||{{|{||{{|||{|{|{|{|{|}~쀄 ~~~ +~ +}~ +~~~ ~~~~~~}~~}|}}|||}~}|}|}}||}|}|}~}}|||}|}|}}~}}~}|||}~}~}}~ҁā퀇 뀊񙱼䊑򒖘̀넍،퓒Ѣ֤흢ŋ䶨髷Ȥ૔иɀ꼜䏞ꅛݛ廑ɞ£ğÜȮ˚ڕΤߒǷݘڢЋŽיΖߏ偳ݷۯۖ󩠵͓ժբÔٷ󒛡զʳ속ߍץվⲣ㖚ڔΤ傷ֵۚۑǼőɇۀ®Ǫڈ¼ʳ۝ӧ̹ǻ솒၈ü֙ց¿¿ꃁը눈ɻ܆󊐔҃`ɚĿ>ƻ½ƻׅ⯫赲ʦϡЧȿȍ̖ɑܱʇ兠ҴՅΐ޸ƒջźĂ緘㘋ܤʎƻeʺڿԌްĦ˟꺄ʿҤ〓ʉȼ̯أɦ뒠ҽܒº߈톊犇戄󃊌ŀϱɽǵնۡ؎л怈ɯ惄ڂŹƹׯżǹ񁚐pͿʼƳ±ګѹۻŹ΀žʾȹüሃޢ½¿¿|§ż쟪ϻƀWXWXfjaefgggb^]]466:9=?>><6]4kaaie37::7677579954igi:;=:855:EC=99:=?=;::69867:9;;:;9;<=<<:kedddc`cggj9;;;9899988g8<89:;9:A@@:q;;=>==?CGGBAA@A@B@==>BBABDGHEDEEGFGDGKKJEBA=;::;<;:mimmn=@=>??AA?@??AEDFA@8d?GIKLNQPMOWTNJG1JLIIJJFEFFFEFGGECBB@@ABBA<;8mpm=?AEEEAEFEIHEEBCEFGDBBFCCDCBAAEEGECAADCEFDHJMMJKNUWGIFFB@@CEEEPRFEC@A=?C@?DFGKFEDCCAAABDDDACEDFNG>8BED@BCCDD?FEEA??BDBA?>=ACCGFKFE>a=?88af=>@BA:=@A<9A;9;>==>mbk666787eh`gbnm77789<=;?=>oT8d:?67<79?n[?GccflcA@8::<;:=>;;:8996lkhiim6kkk=;jOZeHSh\_n7g3:?@?<9:548<<>=97:AINA9889878::967676772500;>=9445.PRG60?a6+6101?,R8P`045\7./SU6.'&)7D4?!% 8C5 2*07;-2" "#3/D2!,I='" (8$)71.(:O&JF?E>54&+)*,%!2-;+:+>?49'?4.RG4:,^U=[~YwaQ63tFSkkVYa\7)ztFcij6rpo[MTr\eNJI---F8DQZ:4:NFKK=HZF=ZM?ZK_pr^pp`{hnrcV`hNufL_oP*7010$LI!WMMw?N+1W[ze#5]2p{vF%ED">,(*-0]QBA=75:0$!*,,*&"# $1;/#!%,DP2DBs~f8rC3 WQvj_\Y`k[G_PHC9]ojg^X@1.OaNTK-?:X2/1374fj754331b7X46JO37.&(/551,-.0/2776430-'&,1321/*$&+)+&! #%#&,110(B/TULL&KI%$%FA>< ##$"!#,-UQRYUG$%  #*-*//*%$('%" " !#$&0!#$##%")?=?=;<95@DBGDEIKJKDD)(()')((*($')((&%(&*,--+)IK,)**+)'%)';AC>#)(/3.+)+)(*('''$>=/2>LKW8@OH`HCIAC.,LJ]IONTTY,/,--/JN)/-,%')(O26478857<=>;<>=A<77ABA9/2468:<>@DCEA:>FF>FJID>v;ge=???ADF@yCyzGLLJHLFF@KQXVYZ]WWXRNNJf_lwrtsssuuntqj[PdmnsuoPEPCCDA?>gF=\?@A@@@?@ABCBDFGEEIJNNMNOQQTXWURRPKMPRQKFEGGE=ADDA@CFAFKLMMPRX_dffeda`_]``bc`^\[[\[^Y\[Y[]_[[[ZVZTUTQSSVWSVXYZYUV?4ED=O`Z[:bVVfkkZT3+.%NL36M9D8./768OM967$(.7/\9EBJ\]JF`Y5E6=MN_g9?=56_W=?AGCOF.]ZBL8=?B=8Z/FV4ACCC<:98b9563XWUb]O?8,.PQNN>=SF.`O'3J0,M9GS'KA4@CA<=]MA8?H\X_:?ED<]CNUOhJXSXarkoOJXznajgP5[_I6VD?=8:=7_[iephSWBCvuaZ_^]ZZVVUTSQQRROMGEAAxtFa_DKGBA@datv>ABA=>?@@>>@IM~xontttrrs=IjO`X=tKTuUC:9d]y`]e45fddommldhmmjqosslcisuztxEpmg[nHGEGEELKHzs>epFCBLIGNF{{{AC@=:>DJEFGLZtW\mqmda]bksxt|xqxe]]b]XUSPQQWVXYVMMJQLJGGGHOOQQQKKAAINK??y?y:?B?jGY^YZZ[Tki]^QTH~;aj8hkshmqjkmx|~uguprrpg[gla^krn`eilywbXNNobthMO3@A?H[txoihfkkljdW]fywBISJh[VWmhhlsajbugaWRUYdmqj<>m>@Fy{mDJ{oc[be`TW^]bjmMfR_Zb[ZDZZ/486353egca``^_e2122bb`VUUPTOVLSYYaabDc[ELVTU\^2OZKRNIBEEC:NLWLO23272[]a]XTVQMNRSQOOQ^da`c=TDX_c][WRW1^WRPPSWTLMLGEHID?B<:?F8GIOGGE;DGPW^ZSPKI74JD.%'CMC>6. +!,%/)$#1#!:6:BA:BIGD>s=ABDD>|G{{HLLJGKGEAHNTSUX[XWXNHGCyt|}|{y}~w}yj]ossxyt?./J%$%#!":%3"*+#')')()153698/!*03620/.1C:2<8550./1213;?9<:9??>>BDIEDEFABAAEFDC?ACFDFIHPQ!J$&??ABA@;<@ACFB>?A?=<;:8::;<;9768431/021...,+,(*(()(+,)+,-..**  -3-,$$12.(% ! " &&(% .0*-!! !#+)$)"&,*(&,*$"##!!%!(!"'$*!)&+ 1,""'',*./"',&*)!& $!3*.-C/3-06?1<KM*,..+,--.,,-67ZZVW[]WWXW/5P8@8(I-5I8+&%@DcEBD##GFIRU[\UY\YU`XUQM*>91%@"82/3)%(-.'*.<*)1/,334;4!"G+6C(&,')*(-1/0.)&62;Q<755345464333122200/27;:99:88AEACAB=<>:972)+0:>;878:76549<9856347=<3Y[/9>;9CFBDA0MTELDI166+3796/13688:631455452/...04023002/0.2632210+*XUMHGGNJCB><64<=?CS+QRWVPRGL++N*PKGKHKMQNNMR+B/78/9=$&/36%-2<$@752,7'&$%%&**(HGB: 2;&%#)'&,'JJFFB"# #'# !*=F(-;BA:758@EOMFCHGBGJ9457520.,..11541**)/+)'&&',,L//.)(!")-)HD!"?!= ."/20143/A>55-0(C,216=6=B<<:EEVNJRC9KNA@AA@81;>87?B?5:>CKG83+,<:D5'(;?856488:95/49CA$'.*91--<98;@493=F571/015::36 !&GAB8%'A<628:5,0323546,0*6),-/*,/-(''+(*''*(%&)#$&'---,00))'-+%#! "(" &0,-,))-1.,.00/+%'(#"% !#$*%0,((!$%#'%&&$#$##""## *%!!&1*!$*"*(,,$''-//--,**...0*++')%)"%)(,)+-&!'%(*+',")'%! &#( ")-/-*(($#%'('&&&,/---&++.)))%'*&$$%')'#$#!!""e!##"% $*.,'%#"$&(%!$!#&'"!%)'%$$&%(%$%&&%%%&&&!'+(&%&%#$+)&)&)(/)&%!+&%$%(*)(&$%" $$#!"$&(*'&*)%%%)''$&&##$(%$$&)+'$!!$!'%( # %% %*% !$$$# $!$%!.).*!,33.221131/-.-,.+*-/.-*.3100./01101030*"' ~}}~}~}|}|||}|{|} ~~~~~}|}~~}~}~~|{|{|~~}||{| +~}||}||}~~~~|}| +}|}~}}|}|}|||}~~|~~~}}~}|}}~~~}}|||}| }}~}~~~~~~}}~~ ~~}| }~}|}}}~}|}|||~|}~~}|}|}|{zzzyz{zzz{{{|{|{|{|{|}}}|}|}|}|}}||}|{ |{{|||{{{||{|{|{|||{||{|{|{|{|{|{|{|{|{|{{|{|{{|{|}~̀~~~ ~~~~~}~~}|}|}|}|}|}~}~~}|}|}|}|}|}|}Á̀ 腄񈍆ɼ¿Ż􂇌ӂ쁆򩱾ҐΎ콚֯߈Խ帯ēޔսقŢюز֬װÁϛζٯݵ͒˪⟉쪋ኝ匶֛ПגώøʈȈВ瞙𚒤忣ߤͬ¼қψƆڻ̥ށ͵ĦΔ҂̊ŽԾ儌ÿ·ʵ􈒟寧¾ƽ¹嗣݉􍐐ƾ͆툓Ƽ䟇􁏎±aò侱냄Ƽ˹²ı򁟕͢ހ߰ӘÒǁà핍ʦδ񈊌ڊȐ¿ٌ̆񆵽͓֚⌕߀Ʈnj熘әŪ’ìнǽܭĉºȅĸۇɻȨ肕DŽЗܢüșЮʽπĩƱހɫ׉؀₇킋㍌􀉍ɾŀݿʹɭƫֈȘٻϻ쀊큉óͳ爋ကӿƳľĻڍ̺Ŀ迯ɼؾѿݰ߁́ьȿĀ⌐¶ʿľ¸ĺ÷ڜɱàڷHU^T^ecd`_\_^[Y]d8579779<<6[Yjj^efe4;=<>997977668<8f];;7gi898>:455;IF=8889=>?ABBCED>;8898767ni5<@HD;:;977:<:lgihl7hghifl=?;<;879889978;<>?=9m776=BA??EID?@@CCDC@AAGBEDCDEDDFGHHGLLLJKHFB<999:<;<;9olg`ij;<99=>BDA??>@?@?>>?AEGEGHJLPTUOLMOJGJLLIHFEHHJHJKGDC?AAA?><>=<<8osuo9?B@?AAAB@AB??@@@CCC@??CGIGEFEDAA@AACEDDFHFGFCBCCFHNMKGEHIHEDBBGHCACCAABCB>::lo:q=AFCDAACEB@DBCFF@@DIKJMKFEDECCEF?>HIA;?FGFIAQRM>:?F==WMg<<>>99>>;7=;>=9<=>:ao:<<>7<::64^dk98:<;<::>==@:lC=8fcT75[gaaooAA96A<;=9;9884<4/'DLU1':5Y723,G,K4O9<;;151D'M6%#7($"*5)(-&4/+ =*( +  "#/785,)) "&-+$&%%%!-0,*45<'/;?A=2c.B"$-*-%*58:5L=@DDTDTJ\cl\BAJH/1B@KI,C-!04]B6.Bh93?Pads]NS[$5BH:&**#  "1' &4=")390-.6J:-:`ZE=Zm~w=m=snvfQuo\b4CPVOSWTiLuZ*\&Blx_xnQzdsi}BoefWAp E+*-!!*T4(.Hek@)1\CSR-C & 4-%JL+-UfXQEF9331%''-.6.!&  *../+ =8VNJ:*0ln026ɈJ3'Cq^/-TTNK\r[Hng^YZ\c_^;?E?ba5b4<2647;6:99555hRKGWAF?NUB4+2642/021346<<4-*(((+-120+ $62&" $**(%.0*3FOVUR*'$%"$$!&$F<776356"%%(.-+,JMME.'#'!%%#)*'&$($& $%!"%$#!$)*'( #$"#$%*'5(<"?@??>>###HEMONI9>)+-(+'I+MB')' &((LF'),+--'%,'0-*$..---'(')--)+,*))&'(*'"'%! <79?@8:>AE>78??AA?BBBCACCDHOMDGIKOMKDzAC:>ADCGFGJLMLKRPRLCwt|ABJIHKIKNS\_beedihe`^^]bdb^\[WXY[[\[Y]]_\ZXVZXVNIJBFVVVMEE\V^_ZYUOO>=E?;=dDg2?0D!%BA98F<5,/ "@=9F,*9G.;5LE.=HFLGUdUAX94ITJC@/82:EkA8B6FX]JNVM`9::779XAG`]7ENQ2,4776@:;92dRNVUQ>J0ZAO('.2`;==AGPGLSE;F<5G1>>DB=R644'1#22<;<9=dQ39H2W[1:9AU<4J^WNS7KNGahI_VGSndj}~nnVifoZ[J5HAk75285^[]5a78_r8_KZJWjW[\Z^]_c^\YZTPRVWVRLGKFFFE:JeFF>:na_wxACBA@>@v>FAx>Iucnrvgchn9@\:>JFXgGJU@ZNO\daghgcVacimhgmox~@@BBAOZMZSHWUS~omsjsij}Qhtd^ZSWZagj678;:CeR[AFAATW\QKKNQYn{wi`^^bb_^[Y[\][]\WSX^flkea_ZWX\^`afjedikbXOTd``^ZPIQYYUNXgZ[YWWUYY^ZMLZYYdhnlcUL_Ci}IKX\]SXY_[YYb`bhe\YWWTRRUSQPMKKPPQSRVVRPRQSPOLv||~yupjYfzRxJP}vxGHGG}umyEGIR[YUWMGC>l]p|CC>A?AIkzHDCGKQSJE~yv{C@J{DIiDEKBwnkr<>==;768DEDCDcdfgi[GOc]k{{{wxqebab\URYUTS^QXYTOMNPHLJBECQ[KELNJHFIQKSC=8>E@C??BQ\a`ZPVSWf_Z[SPIFHsf`_Yq}pjckc{hcoer{ntsnvg^xr\]ac^XbYZd]Xk[_DGNgwglAGsw@FMylfkwggyhh_g7;qYb`vQMZUWNRXSPQQSPJMQTOLSHKKOSVVY\]TT^[LGDFDLKRROU4438:689;9<>:66753aaXV5556;7552cc\]\^XMOWYPHLMOKNRO7<5_[TMLKHJRONOMNIGCA>;DJKOMK?=I\]ME?FI[4GRGfc>iC;Wa41198564de1ab`_2214f_YY[XTMKZVP\RIP`C_VV@FVZIG^XNJIG>EEEAW\]CUZZT224ZIROL2]TMMUSQSZ[ab\`WOcQT:6\SKJR\ZSTSSTRILMMJLQLJJHFB>@?BIE>6@GHGKJMLTLLINPOTQTNNLJLJJIOROXTUMPQTRVVWTTXYXWOQQHS212=;2V[^WSTTOLNZ\0_3YTcPQNOTQMSU[ZYSOLMPPKFGHGHOJFKRSQRKMNOOSQSPJMQJIJLNJELPPJDB=@D?ILXSW972NBJEJFEGBAAIQRDJC@EB=QOB?=AHOEH?KFFEC@>1]`V[TWWiA?7>=::5;768879459654gd[ef454+31ce44febce`\[\ncYWZ\`]_cc66fihecgcca`^]eaL,#*.(,/-.--.0.-*+-**33+.//'1*23"&53$"63457534613}7 "$   " ! "!!"#$%#&&&$#$" 977255 " !#%%##$$  ""! !#$%$&'%# 9=>9!= !  "!!##" ! #&&&$##"""!! "$###&$$$ !"!!"&'&$!$$#"#"!##!!#!\"!776!!" #!! ! "%'(&!  !$#!!!#'(& -((+2g).2,//.23((2,.21.,. :%%/(./20.-+M !   +     +  + + + +       + #")+/" ".+67=JMFF,!$""      + +  +9'*19# .( **/)_lU) +$ !-# 0('   + + + $<",4$ 3$@2".(.+@27 48G?O !1Y &,#:vZ$"085++ 13!&NbNB2.   + + +   + +ff"!H$ 6L4&%""8P_>2F;6423635"#*%;> 5""$" !!1% +    +  + + + 3=A96)#"!577*    + +    %&&(+(-)0353'+ $!6 7,0( !" % 9+7ACS<79*B/(-'67:#DI&)"%&&%!$$ #'+()$+..,*./4644006746:<>713<:<>;>>?A?@ACELH@CGKOPMJDC9<@ECFGGKNNLLSOQNC=IPWVX_VRF@A:vyzzvzyw^[lo{ztB+BA!$#$'+'#&7 =)&'$"$),,1600-/-0,*)*)0-/,;=9982 )./08.);=>>=;9;@DABA@<0863&)(&&+'5'%(I>NLDADL(++(**,-*(%'$$'(+*(%$)),,,$+O5++($E<>OK,/,++),\`]V-3.V1;qWKSUTKHKL&';').(2<)*2$535CKGIHGF@INWZXXZZ^c_Z+*($ +=9?8,*(%=1.3;25*(+2!5,30068;@E"##&'-H37+T!%65:2+-/03CK9a73348865334664751046;?><985347788<@=@<532334341.0.*'.0011452021222/VMCXXUSOIFIE@=;2;J4QF-3TVXUMGEE**L))HOKONMTOJNTPB;A$%'-42/2*&"2+;C#"!'7C'$$&*//)'FB>?"%EE$(3$$*$?:7< 0IB16:=3',96?NQFIOIEGM@77883/.2///7.65/**,.(,)%%#,5*J&)*('%(-*/!# ! )1672+2.3>844/.+('9-(++;KHA;47P7H:8L>8@F>CA>C83FA458851945;43=24%*/;'#,")98C?;25=;79?8'&/@@6A&*7/*)5@969=C@<&9:5..35:;35:02!'H<="'-B<8;D8:D8:218,32@))1./(*-+)***)%()+('+$&$&))+-./)*1/($"" !#$!!-.(&01,-.0,%%*,& $%'$#$"-*(%%$$$)(&'%&"! !'%'&% #+.# !'%2,.()./,-,,/-*,.,*$"*(%,' #*+&')(!$0,&%%# *++%''!* &&#+'$#)'&(++,,*.(&3"#,(""$))%'%%&%!""#"#'$$$##" #!!""%$$#*$$"%&$&%)%$#!"!"!&'#)'($#%'%'&('()*)(##$ %%*,&%#%%$%(*,(%0$#&&'$#')+))'%$%&&" !$$"%""#'&$&$&%&&(&(%#$'%#%%'$"%&'&! ##)%(##!#&(# m " '% $& !"$""#!.0*-)-)*43.32-.11001/-..70***-.,-00011..302110054&́~~}~}~}|}|{|}~~ ~}|||}}}~~~}}|{{{||{||}~}}}|}||{}~}~}|}~~~~~}|} |}}|}~~}|}|}}|~|}|~~~~ }}~}}~~}}}||}| +~~~~~ ~~~~~~ }}}}|}}|}||}~}|||~~||{|||{{||{{||{zzzyz{|||{{{|||{{{|{{{z{|||}}|}||}|}|}|{|{|{|{|{{{|{|{|{|{{|{|{|{|{|{{{|{{|{|{|{|{|}ʀɁ~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~}}|}|}|}}}|}}|}}}~~}~~}|}~}|}|}~}ā Հ ʽ々셐þź󀉉뇓οĥǨ恊ۃȶַٿʳƹʺ熑Տ͇°ȣ희ЕõºҴ輔˼ʄ枠󖼈鎕ѷл𸩵Ѽͬ搅̟݉ǔ͕ͷĕ̇֊Ј΋̗瀞߅އų益򋚜腔ĘȰ࢙碄դƟĢɾֲȺǿļÇ󙣹ѿ৖ވކ傎䂈ļݣ颵򊙜ɻܨފƹɵDz􍥟򉀍Ƚ쉍»燔ȿʸ؀聗ׄծ쿰刢ӛ˓蒯ſՁ퍂Ɛ慁קݤ‰ɇ̴̬̞̽ݾս孃İΊგڟ󋬚žƨӹ؆Դد״̉鿹ܙ쇓􁂉󍓈򋅌ٿú킅δТꃋöלծӼ܋ډ¹Ƽɀ눆򂋃пŽþòȦʾŖ섎êۯ̺„ۂȼļǾĿЀĺ־Ⱦچý¿ɾ׀ùƬ»؊рLNcifec]]_ZVTWQRR^575755eic[T\cbac59:<;<<=99;9768966477db^k;8=<455;BCB=876669;=>>CEECA??>:::9jf77=A===:8555lmk8977::7jhio:;><<;97888<;<==>==:;;:;8@ABBC@BCEEBCBABEFDCECCEC@DIHGGHGGEB><<=?>=<<<=;pligh<<>DBCADJJIJLNMMNUSRNMOMLMMKIKJEB?=<@AB@A??@<>??===:;<;<=??@??@=CFFDBBCBBCCDEEFDBBDDECEEFDCEGEDDDGEECFEBBCA@ACBCBGDA??@@>qhk;9p;>>;9<<>C=?=>BAC=;>=?D>>=EB=?:?>;<:>??=?=>?@?><j<<9985gd5:898:>;=hll=>?>j;CFFACA?j]ghblif9lg_:>;:@;=?>98@A??>;9kfgdb_ZMIMe\imjp6gc27:=>?A@9?@@?<=;<::;;9879:8667776885421357:;;8:93/=1QI::@9;6,"#())$*&+31#%#)!" !%(502+ +)5,%!%&% )>-:&46;29=8>RaU,0C(&%*9+0.-/>`;S9`Vei06D&4nu|syylccy91>Cn(`KU]e0+34Ao6;AGR"eB`i[oud{hLn~vyh`kD6F<0hcVBgZqp'303.M"S,*,++&+H@.4HWoȄ<1Gbo4W<:< 9.#C?FEEBN[LQG-"'1%4-""+40  $'*"K9KXjNEMND$(83<J=EYTC6-,31/369910.,)))(&%#*--$%"'$"%'%7!A;.C3>GQQG!$" # ""'&GC=;6&):A#%)-.-**<,E"+,&$&&')*(*(%(*)(+($%&!"!"'#%(*1$!"#!#$###" 7>!#D>>">D())')+)(+02,*)(()&#$%&IFJN%'(-.-1,(---)*-/1//*+.*)/.+&%*)(())(!!"'#;3.8502HJS`>>MP,TVSQJRGK('')M.0/,I'(-./17641013688=4+7=:99=<=?BDHGBB>?BFJJJLGDIEKHLMLIINPMLIA?uq;l=BDFQOVYLHLMSWRKOYSRMPMMimga_dab^cikgopjhilicjrtnljhjommrpqtssuyztw~{trqrtuqnjdchnmohcotdktxyurvyy}|zxzx{?{|}CCC?GGHHIJJJLMPQSVUVZYPNNLOILRPLLKDHKFEC@?DEJKKJJKOTYadfeddffb^\ZXW]b_][YXVX]_^^__`a`]YUTUGFQTTWQF5_ATYRUVNNK0ee3gM3VSD91!+P5483/+N*.9//2GS,46DKJd=<=3:E@FBGB53.757pBHCCFBA7S1EDQN0>a\hBC@?F&-Z?&8*KN,d[75ib`\f\`eP3*MAG/?9/DE/'.E.=1NBGVMNBWI^ScuoVC?TN7=QtIde?QCF2\bc`a\[^]_X0bE92>`;PRoQXY[\]_`bgso}UPU\ZWTROLIFGHEDGCA=<=>>@C>?@C>@?yLi\fKL>BvrbWekh^XZ_^cc[X^F@l7)JJHIJCHNWebcjild_X_^pxSlNarr`ZKgRIQrtzy{~jVMAq^SYaho;=?A@GNBBFJGQd5H8W=uVW_[ixpm\f`_cc`_]\_ac_]\[\]ejhkjbac][X\[^cghffc]Y_`b[WUNOP[\^[Y[`\XXVURS^`^SMRUZWelc_VUpyKW[WWZ\^\[^Z`fd^[TWUSTXXURRSQOUY[[VURPRSMNF}}zpwstrkit{DHHH|zL~{HQMIJNJCNPIAus}EDIEwCHGD@DDQQPNKvDB6;=@@BE>IPKMHQOKQUVTZVNMMIILLQ\TSHEMSJ\X]TSVZ[XTQQOGZ349@8SY`WZ17ZVRKNQ52YS]WTTVUTTVXXWWRVSPPOOLLKHHLKIHLPRWLMLOMOOOTNJKHHJHIFDDHGJEAC=B;FTPSV564AIHOH@@@C=JRQFKFCGBAEDC69@C8>UF1ccVUQU99;;;:767468;::58556jb^Zg63/f443445gg4gdbdcd`]V[_XT\_`aajhd3ebfgeidca_^\[`\%%%11-,+)+/-+)+&&'-/10,',.-,.H1/,242 5534248( !"  ! !! "!"%#"!! "!  :8765!< #"! "" !"""%%#! !!"#%%%&&"!    ! $$$""!"t#$###"!!""##"##"!"##!##$#""##! ! !!!""$"!! ! ;676  %&-22,+'"  !/0-,/,1 /,33.22241,--/..+,$$$0,1423.+N "$  + +  + + +       + +   ,!  + + '("#.6=466;87/,!  +      +0!%90'4#(#$46/ +*C9e%5,&*(  - + +   $$$ !-% !#+6-28-(00/"8e5GwG)%!%No0_f$%%%0;5460-179; #"$58>;1.! ;-% +    +     + +'18?=* .-*(!$(&*    "+'%%*"&)%! 1043!"#&!  )$"3>EQ;8AB$AHD@<=<7>CFDDB?@CABGEFHIJJLJDHKLJHNNEFECB<:DEFDDFHIKIGEEDG%HHJK'%%#(())**,,./01354440(&&'*)-/-(&&"'*(('$#$!'*+,-.037:;;<::;=<863047<=;987448978998652/+))" )+,-*%**.((+%&#+,0%$%  % ".!!"!"!.4&.24) **&$!) $$'"%%"'&!!!(,*-$%')&*7!# "%#*)1 "0(-(''.(+*""   &'$#+% /%9.494%:)#';%1. ),,()''(&'%-3'2@OH?B%'')*(**+.50<8#"',,*(()+**,/-+*(('(()*-.*+-/)*)SC#'+,).2**,.-18+5%@21:7=?5>>?<87;:<631+,-799646=9544535=>;2/5796?D<;55XJ?H]QRT.65358998886:?<6414435764111.+1687431023./*WWQIKQOWMHADA@<89CLQVNX^WQWRKGGKS(J))OKOLO)ROIG.SGF)-+(),)L%-.'"<;C&%(%@#'(%$&G$-.,-+MKAC#!14>%)&D ::0444,1.'AF?5713,-7*<;EBARSUNEH?<:531./-0027)4-*,,*)(&MD%$(1,L&*000%F*+*!)%((*50/4820203341/''*NIHCCDHPUCB?B;>@=DAC@DVQLHHC5487845052437344.FN1"# 9A<521(046@<10+*)%#R"F@!"%DC<:=78:7JE4,#<=<62:9)&(&*'&,+'(*)(,-,*&*+$-.*++)/5-*-&%+ "*%"!$10*)/,,..-0/,)*(.*$%%'%#0.+''&%%')(#&$#"#!""!%%#%$!!$$-,)*$"*(*+++--/2...-*('+,+!'%($(,"+*&(24+)&#"!$&$,..*#(',+!$&"&*'&%+(*((#' %*)1*#!#'#$&#$! !%($"##$)*+)'!!!  !#&#$!%%"&'(&*(%##"#%"$*%(!#&*&*1&&')*)&%&&!'$&*%&((&#%%)%,)'&(&%%')(&($'&f$%###$%$#$%&($%$%%'('(%#$$%&##""#"$!  !)%&(! %!#(&#!!    (" $+'# 12+*')C60/,310.00/101//*,-*'*-,..321/./00410./0.-1/ˁҁ~}|}|}||}}|{{{|||{|}~~ +~}||}}}~ }}}|{|||{{{| }}}~~}~~}~~~~}~~~|||}||}~}~}{}}{{||}}~~~}}}~~~~~}~|||}|{|}||}~ ~~~~}~~~~|||~~|{~}}|}}||}|||}}|{|{{|{z{||{||{||{{|||{{||{{z||}|}|}|}|}|}}|||{|{|{|{| +{{||{{{|{{|{|{|{{{|{|{|{|{|{|{|}~~~  ~ ~~}~~~}|}|}|}|}~}|}|}~~}~}ρ  +ր ̾䀊󊒐Ź􀊗«ʈ󉋟Ӯ׫Șۥן󠛶³¶շλɂͮ񅊙ߐ䙾ľӸ߱ԵŖƽᤰГӶĘƖ씣͋ХװΗǾ黡ĔĊƴԈڈ󌇟Ҳ߃ϪȺߙֳ˾ۼԪה԰կΘĖићʹ녍̇ā闚ҽǸʛ䰥Խʔ劏˰愚ϾǼ򂓔ϼތ򁅏󌏘񏏈Ť¾ȼܐ͍ߠĽ菠Єќը񺷺巩뱳􄕏Чꀎ失ⶴ뎘ہ͎㞹了ۖҴœݼ낑ӡ䗵ޣ缜ῪѭƒαϽ ȴž|ⶓ쉍򉗌ýĩòеÛՈϻʷ߯剃׆ӥûžǽпӢ􄁂ս˶̣뎛¸۲Ͽ¶üȽɽŽɿ¿ɼـ˿㔍þƻ³cր\VTj8mlb[VVPRYRUTWT^chied_b]QV^XU^48=>><<=?@<56>=968569hefdff575g66>CC@;8778:<><8;?FGCBAD=;;=;6ii559::;;986iebl95j89:<;ifgk8:?==;989;: 7;<78;<<;:99;>?@BCDFEDACC?AABDDBD#?@GHIGEFCBAA><;>><;<=CFA;9:ldr@?@CA>DCEDAC=988>?@BEEDC>:>GKHDA=<::<>==??>@@?ACCA@AABABFECBCCEEDBDGHDEHCBA?BGGKMKFIHGEGCCEDDBACDDADE@B +C?@?>A@><;===s;=ub[p=BEGehb^`OEGEF=@ECB??BB??<;BAD@@JII@ND;?=5?BHHD???;><=:9omhnf>>GDB:ck99peicili787>;ABA@<>A@<7=kdX^iVRVWSM`q_defcb8=@A?=<;=<<=<6KB18vnnYvrtbtmpklyoVbk[\MsUJ: H1GD#l`-0JZhU`|KtkdzOst|G@(e(ACd<[5,18D10.HF=@7Mt6]TJ@DkbGzhuyffzyW1Wzuwzuyvjd|f>6==?74VBJ7AY-04{qg)+))*(*,.*/602OKnm#^aG6.:: ;5;%*LDHHSVPH:#+2-#&/4'$6@@I6K5PdhjU=$'9 ;A]5Z5]h[Oas?).3304`TOJHKSZYdj999866:;4``g567:520352ec^]E>:855=KPP\_J93:>$$(-30264530147==896645*-6;@CDGHFF>9@@=>?C??<;GB@@IGGIGGDNzq>GMIBBAEKOKOTRWXZTPRYTQLCF{`kagjrslokkjiedWV_u}s_Y=@?BuAGFB=7:BDJNI@EPSPRPRUU]effideqxng]dnoqqnmurhijifgsurlkoljlnjmilhlsyHFEz@{wtpmnmqtroprwttngmlcmrt~ztzzwtuwywstxuuwwz|?y@ACCEHGHINMMOSVVWY[VMJIDCJNRSRMIILNKJHGFJKIGJKORX_fkjfdfca_\ZWUVZ^_`__\TT\]]_`__cd^\_`][\]]GXW]]WXVYUVMJYR3=[;qWgU8!"#%(109?PU`GIRk5F7aX:S=GJLMMIIJ@;B==@?EPPPSNDE?>;bQ3iBB>?=4QHL7_UVN43?S;>GAN6)=S:(A2T:(^ML?O7ABA+IRT>C)@*I4?9II3?E1I;.JYS]]F8]3:_T7AP:f?|}TARPeeikg_ZYXYY[[]\ZXV]ZTPKFBCL]Vhmu]cjohfnvporHfCEDCo^NLHEHO}lnkukw}uMpaVhk:@@ABEFJGJMEDDJNMRNGKS]eiiee|RTVXlbeg`b`^aba_]agef_alnfd^\ab`^ZU]eb_ac`Z^caXWUYMX`]WWW^c]WVYYRTUUVUPOQYYfn`YMOTSQRM\\V[][[_Xag`glaVUUZ^ZZYQVWXYVZ_\XUUTPLMILLsvzxvSwJIIK}~ICMOOQJFINFyusNHCFHF}}upgEHYTKMJGJIFz;mERK~Bys\cl=tj_9ul953@S?8=_Rb8:7be47=>8964:855jaXYa956543\Uc633``a_Y`YQPPOFD@J496a]VRPTSNLJGJLJIIJMHBKILIGGBBHVMXZNCATSacTSX[6::;931332342[Zd_^]^\WY`b[UJFPT^laLY_XXY\YTONJCCMWTcY]UQQU[WjdSJFCILLT`1\\UPQfXb46VA]^RYYTTVTLOKEDDDNEEIGCK^bVOKMSSYYVRKHHB78C>?BA@JHKLGMJHMJHSRVZNJGJRVOYVTKJPKNaYYXRS^aXTUWQGT749@;20^WN3651cRRRa^_QPRWQUWZYXZYYVWZXTSRRQORNNKKJGKKNROLKJKNRQQNGEEJHEHA>@FDFBBJ?F(dw\LZ.1&$!"")-+28  ##47="611/    F  +  +  3>7* + +  99-$*-+&,$& + + +  ,!""!$ !"$#)" ! "1#!!"$!*)0H%DMMJE;%8 %)$%( ($%).-,)&(),43-.,+(*!%18=@AFDCB839:;;=A<<:9D@:;EFHJJKIXr@FKHBBABMROS\Y[XYRM|RZYVLACzswntw||}xulgXYg|yoU:1!""$?!&&%"#!#((%  %%+/*$(02.-+/0/278:=;;BHEA<6;@ADDA?DC>>=;:BGKLON*)(ID#GJIECCACD@>BEDCC@;<;:?BDIGDGGGEDDFEBCGFEGGFG$F$%'&')**+/0..3653240'%$#&+/0//,**,,)'&# %())+-/148YEIJNKCCBEIILKIGBB=C>61-)',7B:KNVGRSUMLV_]ZZgi6]d@.0-,JC673.)(G849<:49981&9,-9<$&&'(+-1./1,)(,/,/(*.01/-/2'%/88:9897589898:<<>::A@=:76:::9419>:8:=:6:=;3314*4:87548:964660245751]1287AF95-R04212WWMV.9827::8;5A72248:7771457527;973331..,-V.WZXOPTQEEFEJKGLDMULPZ3QUPHORKKRJL**MHTQO,-MKIK+'-.,,)'),'KNLLB?@L.)%(L*(EE=82&0-),*'DE('#;6%-(DC#?:+/392+<6 !!C<=7/((4$!23-3@=>FIPKGIEA:211../02/,$-'&,+$#&DE?A#&/30)$(()'164-$'#$0-,+./,/720/,*)//.+'&QMIIJLOTW//.QBF34:*7:>@:C47C)NKESM88439;-3?4//8@B9/)GE7  >(D?=I(F?I:2-2),%/++!$630,207A?B:BA>4/./-,3'*,*,'(%#($A<>$EBCA?;79?+H:EE$@:)9-+%&,)-,'.5(.*0_.--,3.//-1**/1/)(&))$%&'013/*(.*'/--/.,0,'&'&#" #-,)(&(*(&%#$&%($%$&$$#""%.&*,&! ! & #!'(00()))*)/-/./-+,13.+$!%&,6/!*/-+--,*''$ !&-)1**&$$',(1/%# "&$(-*-(&&3+,"*+'+,)()&#$##! )/($"$()./-+%#$!! $!#$!$""$"!($&+%!!"')#(&&$!$!#.&&'%&*-(&(*& ")&,&((.,.%%%($'())()(*'(*)''((('&%%#$#!##$&%$#"$&)'%%!!"%$"$ ! !#"#)(*)&##! $%""$$##&,% !!"!,)$ ,0'),!&2./*.111./..000./.1110,-..+)))+,+.2/012/./0/,/320.-110́ +~~~}|}|}|}|{|}~~}}}|{|{|}~~~}~}~~ ~~~{{}}|}| }}|||}{{{|}~|}~~~~~}|}}}|}|}|}|{}~|~}|}~~~}}|}~~}|}~~~~|~|}}|}~~||~}|{|{{{||{{{||{z{|||{||{{|{|{|{|{||{z{|}|}|}|}|{||{{|{|{|{|{|{||{{|{|||{|{|{|{{||{|{|{|{|}~΀~~~~}~ +}~~~~~|} |||}||}}}|}~}|}|}~ā ހˀ f¨ρ큄㍓ߺ𵥞߅ғ̀Т߷腥†ϺّDzڃ†𘔛֗򉋆̉ƼʙлӜ𘪾ׂΔ㢈Ț⾣Ø”úʨөă엫ḻ̻̌懍ˀ̷ڪٝƾմ௹ӝ՛ů؀℅լǿǴľ쁌񦊏Ưߚθݴۈɒɱ򔳛⾮Ճ鋐҄Ĵå爌ʀ憡˻뀸񑫛ӢǪƳɐ‡ޕ섔ܻ²ƫȀ񃆆¤€ٷҵܵϬ֢Խèəٟ؀ūûij̓̾ƩؙǓϽ󀋖¾©ꁖϻ􁉋񒨣߀Ⱦ׺ʮʿǺŶʠ野̴ºĵijĀ³ijƺ󉇃͵݁¿ǽұ¿ľſɹꀈȽ̀ûƷןùہοžûȽ裠jc^YY_gcaYRQ[XW]__\[_ae_`\T]WU^XSSZe9=A@<9:<>>87798786hcdedeg8@A?=:988;;=;;:=;:@@@?@>=;>?>ADEDEGKMKLOPPOPPOSPE=::p9<;AFEGGIB=>CDFEGGFCBA>=?>>?@@@CGCBCDFCBDCCBC@?BEC?DDCDEFCEFCAAGGBAHIJJHIIHIGCCBEFFHGBCDDEB@BB@??@?@AA@?=<==>@=wttpa^;:DKKIEC:>E=<>??><=:7jjddocjmg67g`67h\<>:?AA=>CF?@??79:ln@@?>=?AA@>=<<9:`\j^jYOWT\\R^ceabc5:<==?==>>==989::993/.8:823512674-UK;=;G3,-%8@+B*2KA),J%DH.EUQA3-D7>4!-+ 3.0.% -'")*&$!"-))DA.&%' "#0/>84.*6#  $$,3:#+77SG5=JOeyQ! "1>8:NMC9XT^:IL+.0(2tkP,"&"NIT3hm}jupmgf~dqneZQeQE:B6RFEfioSzX]sPiHLh=A>'LY@JO^JN24.1-*-KF?GEBxdW`QV}LL_|{~C]gn|sYdj045957G^*2.6Ja,2og1+&#(/,*++--7Z92ymh %Q;:6;10;>HHKMSRVQE&)*! +3# "=LRjvs_TUarj563/$">-6 '9=iidsV\hTM]qK<>N8=>62[\/Z^cdk8876b555fd6879974237531358>>>@'&*)%+)%9',-.-(+)*+**+'%($!'*)+)(&##!2/6 2" $%&'## "$&(##$$!!%%('&% &(&$!&+,-, &!&'(%"+$G/+*'1-.,-,(%(/+,-,,!&)*,**()*+'('%&'%$!%$?;0)%%<)C;JOROH=NZ*))M'&D(,//-/14464-*124134688702:921104?BDHJJJHF?98B;370,@=AIHF??QJLG8@;?@BEIQH@xERORRPNTXVQMLaeowojwoomlcifb^SbkttwQPN]`>GGIEDGHHHEJQOORNE8FLLJMDIFHKQRVTZXWecb_W^nlkfloqsrps|wsmmnoqpsustvxtvrppsu|{{}BCBGIHF?FI~yuqrvw{@C~|wyzfnysqpsy{|@|wtuzvutx}uqptxyyz|@DFIIHIKKKORRSSVZ\SLGFCAGLPQQPPOPMKJIHIIMLKJNRRX`fkmkihfb_\[ZXX[]_^^_ZTSW[^\\\[ZZ\\[\][ZYUZ[\`]]]\\\]YVQD?CJMIKB4(NI%*()DD;6Mii5HX[5CECH9=IE>7674=996ee_[WQSNUd8Z[WVAIFEBBB1>W?RZQ>09@:DLNZWE:?3./GD8@E.^]AC<55X26874VQKSfDII=S;@:683CJ3:?6UI7TbSSEKFb?]JWxk~{_Q^m^]8;QGE.M\\_`jf\16UXbZ^eKNG:_XXVWZ[`bdrTCwGFeoOm`]W`XSOMKFCCGHLGIJIFGHDB>DDECGEEEFC?pmka[Y[YVUVTXWX\]\UTLGFGx}NaZ\rrs|{vmCINQToku;^c\g]P\[e{yUNs_hrptyrmlu@HEINSXRMOPPONTUW\^bjjc8Ml}EO^lyAMbccbaddaddbcjoka_cbdfsfWZZ]][WVWZZY_aa\X\\\VSXc_^[b`\_`XWUWXYXZZVRNNUZ]`jd`YTJLSx{N\d^ffdhhcfgZagcWVYYTXcWORXXORTVWSQMLLGMJ~q}xtz{vxf}~|HLMLIGEEEzusy@orKQPPPME~}|DC@Bssxn:lR]dEVXPNPKKJIFFJKHFD{u{olnpwytCMV[YXROTVOPPRSY\YX\ZUXQINKKIGLJ}|HJJmcaYdloqwr_jbosp~zijZWYX]\j]\hbf]S_SJLJ>WWdk|shl|CsHrlbZEL[X[nr_YUUS]ph^h^rxkcaXV[W\F=LX3SQXYdAGGBwmfc}{zExxsvpv{lwuuhW[VJSQTUPMXQS>?I[[]c^_d`YZVWLPPOZYPHFFFBKUKJT]5328f_\d8CIGEJHHURTVUYZURPU[VRLOHC>;A=:CKJBGDJMQOGIGHW]Y=JCNGMROT4]OHPPJT]_YTOW^XTRTTPa>^.>?93ZZ033222[URSVTRQPV]XUVX^^[[YY\_YVVSPMPQRMKNQPLMMMKHJJJIINOKGBGIHIA=AE?BC@?CHBCNV[IRB?:DDEC@GvHKFEDEFNHFLNLSMF49@86766e]]WRbcfie`]bb`\_ba]ab`ddfgdaVRWb6bacbidhhgfebei7eadhj~632-+-1./,)'-**,-/-,.01-.,*/+*/*''),0.00/0/!62495445;  #"  ! !#%""! "!""$" <84< + "" f!!! !!"!!"!!""##%% 8 " "$ !"" ""  #!!!#%$##"""$"!"$" ##"""#!#%"! $#!"#%%$#"""!"###!!%$$! !  ==;920#$# ! '+!#$ !./1/.2+/0./,1)/004,-.9+700,+5.6,&*')(%,-.,++     + +    + + + +    +   &&   + + +  + +  + "&,  + $#!!)!,./0:T]1M>#:C?8-3   + + + +=aitmA9   ()"## "!(' !##*!*60I    %75" *      15 '$ :'&5#*. 1I#0"!%%E& ) "7+]R=S6(:sw7x<=) ""&1029DGHG9 S + +1AMitjTLP\dZ,& /VYYh_gwVPny>!)! --)-049598!!    +  +  :<>:2#!'00,$ +  + 4"#45*-   +  1$!*# !"()"1.9@@B@7BI!! @3!$%$""'&(($!)*+&()*+,*#&./'''&.:813,'577788@HHGBDYLLD5=9??DDMRKAyFTRTRMJQYWUMJǿttz{w~|xnnf`\Pfr}z~K?^.56#''(%%'''(&*.-..*%'+-,/')'(+./324/.987837@??<>?BCCACIGDA@@ACACDDDGIHHFCDGILJJKN(('*+*("&)MLHEDFC? "EGCAC:BDBBABGHIJ%IHFCCFDDEUGJEC@CDFHGH%()++*+,-+.1211268/(#"#$*.22210/.*'&##%'+,-,--,/6:@B?==;97654568;;<::84026877665334201.1247656530/,*%#%"#! +  "!/0#$! #$#30.-(#$!#+0' -%% &#" '$ &&/"$6 ()#&&$!+,)(!&%# "#("$%+"&&('$$$+"%"&0)(&$,+$)C9190%&.-&)!!)(*(.,%"%+$&(!,&DHI(&')***.5*6"!*1'F4-.+4220/2---0251332010/.+/.005c66672/RMJB?>ADEDGFJKJHFB<94/,.MUf7F>BSUY`_ZKEIc8=ADGXOQ*IHALE>F@DOD$!:7-:<8969/-/9 $%)*+./.,,00.--*.,-2A3-%4;!&++2&789989979:9;BD>78:;;=F:353567522555;;<86998204=998<=9:;543357787630158:;D>;62,.3LFQOHRS09=8>@?BB<@B9?B<337838?4/145/134531...*U/-WUUNLKCLTIGHFPXNPMGLYQW^UPTL>LKIS*--,*(J(((NFCADI$:;*.--.-&dEKHFNHFIJ&%#%A@C94",0#.2.,,)+*(&D')*('$@>BD:9::==9 '!3E1.45*($9324(4CIOJHGBA:33.-.0/.'$&,-&$$CC?$'+-33#"*1310+)-.)++..12015414-),**('*)IMMGDEI*LM++L;1E3+1:>@CA3;4=INCCKFT:<213364<55=7;708/)++ )'06C>6;GK%=)N@;62"&,*,:?530/.4=6/70?@8350-/*,! %+%"&&-#%&#?;65GAA&F@C@C?DC8?@?8*,*"'%*-*(/(*%./05135400-,'))'/0*'$"! % !%/-*/2.,..*(-010/-/+-'*(" "**/1,,)%&&$"$$#&%(&'&&$'%#$$"'&&+-(&(# $"#"&%'$!.--''+*+-*...,-.42.,,+'!&/,'(-0-,)(((&#"#%&''#$.,*++(('# ! "&&(+&*&'&%')&&(*,)*&#"" "!'&&&%(*'%%).+(#&$   $$"#$'%"#!"*.+#'"$(%&-% %&!%**('"%('&&'(%(&(%(''%(&%%#%)&$$&++)*))+-))('%#%%&$#$&%$%#$$!###""$%#"!$#$! %!$',#)    !$  $! &%%*'#!# "&[ )%&%0$*$&*2//,'10121-,00.,.//-//.002542*'(-+-001011100/020/257~~~~~~}~}|}|}|}|{|}~~}~}||}|~|{|,}~~~~~~~~~}}~~~~~~~~}|}}||}}|||}|}|~~}~~~~~|}}|}| }}~|||~~}}}~~~~}~~~|~}|}~|||}}}| }}}|}~||{|{|{|||{{{|{|{{|}}}|}||}|}|}}}||}|{|{|{|{{{||{|{|{|{|||{||{|{|{|{|{|{|{||{|}~~Ѐ ~}~~~~~~~~}|||}~~}~~}}~}|}|{|}~}|}ҁɀʀ  ǿŽ䀎䂡+¿nj銊넎ִ񀊍՟дׇ͚нٴхؤʌשں󈐞݁ӔѦ؞ɋ͎ƫο؝Һ˅ô۟֩捃ửײ݇Έׁٕ݃瀌ɲܶᩩЭ̜Ȏ჏ģš̓ʑմĬե޿êɂ埁섄֤߯拌ਛϏʠȡՅӵĺÿȀͷԁǡܿ熉󁋒ҁއ􀋍ɾ˿Б߀򁃀ʽȃэ㺼—ٵʁυѴ〈􌥥έߨΦٗܳ٫珖˸כ퉙Ѐčᑗሮ؏豧ž̲ԎЀʲ揌ⵏԴ楲஍򻂝՘þ³ς˳񌅍僈Кƺ򄒹󇇊⃇Ը˱ıǥ耍瓂澰ķ̀ýϾㄔȾͺȶƯʼѵ׽օĺĵĶѽԈȤʇǺրŸ돃ϻɴ􁾈䢬ϴʳ揞Q˅ܿ͸iig__ZVSUZSQW\R]iek5jbf5h`QLRSTVRP]b6:?>?>A@?==A>36;>:8:<;;7686ge^[4@@?@><:9888;::;@HGBDD?<=;;9988:9;8898:887789:=:6ief679;9ig59=>>=:9757899mio8:98on::=<::ADB?>@<<>@?ABDDEB@@DD?CGGHHHBA?BC?>?>;;;AAB?>>;vogdflr;?DEDA===>?=?B@@?=:9:>AAABEHHJLNNLKMLNNI?7mn;?;=@>@BGHDB>;?GGGHFGEEDA@?>@DIGEDCFGED@>>@==@@?BAA@@ACEFCCBDGDA?BACEKLPTLEEBCDGNJECGHD@@ABA@BHJGFJGDFA?@@@>>=?A@?@<@;98lj:7P]99=eikVb7<>?;:6<@<=?A=>A?:oob^ed;gqke:ki<;68<;>><=?CB@AAA><>@>;9=8jSemR]mb_^_]cb\^c4>@=<:;;<856799<<;=<8:95056Z-441J3/I'?((#%%* $+())%<.R2U86<@/!)(1781($)*'!-"% 48/1" $#(&4J+5.')#'$3(PS*(7' $!#"%&$)%)*+&%$.'K_B6<8KNYNSK# 2/'#'$#,CT>FIMD^4=WD?hYPhtna7r[{{uk_l|X_8//.!5(4<625531\pOXft&8-;"',"36I.D-^xOY^vf`putru]z|Xg[w_Tunv]vA84Q_WDlhqXd[e}ovatAM5$&>)2/D0BO--/-)#-*CEAQM[d]kb}VAU|vofp_|Xt{^u`@-&43-)-2,+37ZbH#+,-'(%)$*)'(002197AYW|dhZa{/&Q@D@:5/5 ;7:DM')JHMG'*01 $=E7 #&#3D\trrl8m`EEE@5678#7.*B8R\]rhC@gxh_};4a/78h:jhnkpea_RW48c89=<-3799;:==:><:8=EA86FgNTY^lbH5+*,-)((&#'*,% 2-'!#'&'(TS(%##% "" ! "$&)+))&GQ-+*%**"#$)#'$(**'(((%$*++-+)-/,)'## $!  $%##'$&#(&$$&&'&)',%!#%$ # %$$)) $)+,% !(('+,,8;A**,,+,*)*)(2('#$'+-,,,**,*+*+.+("($"!#'&%.&$"@2?/+Q1`N<8L.-(D)&BH(-0/2/.20,,&--.055682*0<@B@:49BMQQNPZXVvOZc^shkjpyuqmoeddb]Qmorv_vChlr:V$bVAU>lfGII{MLG]4/=LRKCD?;72UD@H2@VTDD668?FO45999^hc+Q,*((44?S6@L9=>7C=K4WGA:AR7=>7B>12C,LR\:GGeA-@8/026;=QQIQP?H@TUVcS?,19BU]HKLF[[Z6(.7H-;EKI=:@>(9-3.3MZ9ePN;D?G>(/N;/WK?CAU3EX/3306,CX9[:TU\:AQXZUOHRXYPPKMMX_YOQWUTRJITKHDKKz~}tyxnDHmpek}\]hv}ojhtjsmYmocRJXlqla_fXLPQ_PTTEwLSZGPtBM}pODhjo~`Y[ndf_VRUXZ\b`_jdiqjf`\VOSXXehYWRPKXcb>JRD{m]Yelb{UH{i\\|znZp{kp`UjbaV\UJWYQUujaW`cjgjh\SSWTQQbgTHAGOJSWT[ZZ:47:cZT\d8?:43736675gdi`R`74a``24h63666ggc]WUVVJGKNV54aWRWWQOHPJJGFINPIHMQPKKGHFGNPKRVPIROD?AIBAAR2:A.J1SW]`_177;91286841`aX[`a]^X]`ZYWROMJMTXSX`_[SPOONOILPNQRQSUXTV^\XYVOJHB?DHNRTX72YTOKV[3`_ZVUSSTXVQI@=BCDGD@BGNR[TIL[ZSTWYTOLNLIB2=@B7AH:>6442`_XPPNNLUS0`^2JOW^\ZXb6a[`[SRMMOSMNQXOPLKKGIaMOSHDDODGF?DFD<>@>AG=DO`cDV9>BF7 (*   4Tmkog0]XC?91&!  +*.F]lsA~')<;! #3 9"=9823++-&2#"  + +  +   + 75 + + + 34      '*. !#" #(!5#JA0*9$$!6 .1$&$&!"('!#$#%%)'')'$.5:92,25:9AACCEED<6.07:910;?B><:GLNOF@GpDwYC5>@;>> #&+*(+,,-,7696...,-32)'*..-,233734359974-5:8:"9AB>;:8655[7;=BBEGFFH(*+*))+-+-/1475+" #$!$(.001100/.*)**()*,,)'',/36;;==>=><8779;<;::;<74226884353312652.11365356650-(%""$('$ !'%-52""": *$(%##+ !+(  !-/,#* '#$"#(.&&1%(&+').02$*#%$"'*,"#!$!#%') "##$/""$#!0##&1% !2+'*E%$+##(&#$!-*$8+38D+=-'*+-2/2(6+%9@0224;69203654584678637E1/30_gh1AA9?8YQNDB?>:=>:;=EIFFB91YZUMFVg?IOLD^hVZT2>[APLJGCC9500017@90/-4AA/"=84=480$$ #,"&:J>('&$D.4(5G$5D*2$%&$$# $6757999;>>?DA@>847:9=<9.22--100/007;<;88767425:6;8;;6663:88568555213;88>><666/2\CPSOTV45BB9;=>?@BDJBD>94437<133//14952001/-XZ,-+TMWVIINKDGIGQXGPOHCIDMPE1QKJD;MVTJL/+/(J#"!?BF>==-?$93(,2334&GML,*KJL'(KF>!0@#+((43-)(+20-)+,MFJIFACB=&(;<26EE+.8CNG>;;A9@?3ALKLI?8/*2>A>97;2*./7,..$D%%)"<%,B<,%H9:=H5.0<452/,-/24732:49=8610,'(*)14))&%#(,+',"A:206:1B0'FF<21DA<.;C8<1+612-3-&,/)+>83,3498<80*,/,'(49-%!""$%'%&0*(,01.30&--,+0343-*((' "&'*/+'+*'%"'#$##$(($%')($&$%$$(*(*-&"&'#""&" $!%*/-+,/*+--,/+/1..+(%%$%()'*.-,('''%%"%(%&(()()(*-,+,*&#" !#&&%#)'$!%&*+)((()*,*&!! !#$,)"!()%&(*&$"$#"!%## "$%&!$"$&*'" %##'&#&&% )*& ()%'#($&'*%('(*+)$%$%!&$'% '+++).-*-*%&##$'$%'*''%#$!##! !"$( %! !!$!$,1 +!# ! #!#!$!#$!! #!$#!2'+&*1-,%*-/.0/020/,/00/.1115420-&#)--0/0.30./1-,210//2 ~~~}~ }~~~~}|}|}~}|}|{|}|}~~~}|}~}|}}|}||{|{|}}~~~}~~~}~~~~ +~}~~|}|~|}|}}}{|}~~~~~~}}~~}}|}|}~|~}~~}}~~~~~~~~~}~~~}|}~|}}}~~|||{{|{|{|{|{{| +{{|||{{|||{|||{{{|}||~~}}|}}|}}}|}|}}|}|{|{|{|{|{|{|||{||{{|{{|{{{|{|{{|{|{{{|{{{|{|}р ~~}~ ~~  + ~~~~ ~~~}||}~}~~~}|}|{|}~~~}|}~ }~}}~~~ہ +~݀  ȼɹͷ勅ƾ܏郐׊ďƆ󂐜悀Ɔ֭ڗǃļŰ󋛓湗͜껺փ뇉಍ꠟ⮮ט·ű۳ǿүظэӭӊ҉¨˃˳ز˶lj䯠̷񣔤ЬڵڶЙ̠ɀνȅԬȻӎߵ֮ͨ؍؜ڎʯʽя򇎕ꉿԘŗՃ텈ɝʼ̼Ĵ搜힩宅玆ߟҦ֟삁Ϫ큐޴ιξƿƻƼܳ󉌓ĵܸžľšƻ򏞚ʱЄ玑ҿ߃ϰўۓ¨טұծŒ洖҆ހӣè甤Śúţ勒ŽՀ콳ˊ軥ʫٹԤ݌̋׃ȷꄇé¿ɷ틏އڒ胁႐ǵźڧԱ¸꾢®ƿļĿԒ悀Ƕ˻ɼ¹˿ȭ싸ݺƿʹȿϫɾɼɾַ԰ġ킁;_dba\[RLXYSKSYV\SMNa>776575[RONPQOPZ`h7953=?AB@@@>9556589=?:89<84`Ye=ACBDD@=9979>=;>@BBEJFB=<<;;;=<99:;9:;;8khk8kgj:<8ek8lo996jg n:??><:98879:p<=;:88:AG?;@C@?>@?;=>>;:<>=;:<:pmmmlln=AB@AED@B@=>@ABBC@>>?=AFEDFGHIHHKLJMIB?==@@A><>BCCCDBEHIJHHJEHEDCFDBABA>@DFHFIFKSCABCCDGGECBA@@??>AAACCCB@FECCDHMMKJIGHCAGHFEFFFCDDEAABBDCAFDA>=?GJGDJDB@???@>??><@?ABAFCA>;BcD>=;>AB=58:998=?@D?><:?<:c96:987jX`8>>=:8;7;<>@C@@>>8=>9:8;;_ni:XY;===>>=c>===>?@AB?9:?A@=;ml?r`Z\CgGArh:fb_\]b38;<<;;:88;84:<=?=;66]MQ10399670F,;J+"&9.,&#- #)04.84G-C<44;.#%+.%""###" %0'(+GJ6*@. '"#"AVTH."%#"!!&&&)&!(,#8(P96-F/8BIWGFR=H" ! #%-;2ewTEJ\OOJD\sSw~oj]IiSX^jeisss_q#2*#3,29>?!2;xQ[_oUJ_`TZK<14.$ -)1@\ZaBGGD=8;5+18(*&$I2od[VpgNDTr@CäJVX__X86nj{hcadf/;8:61344>F@;::;7679:8;?96BPZ[^g[@,)++*)$$&')-'"7-! !"#"$&$#&%%#!""!""##"%!%'&%')**,-+&+&%"!**#')'*(&)+()'()&(*)***)++(*(&&&$ !$%&%$$%%$$%%#'('(#"5!&$%''$!)1(&#()-1/,)'+-,.,.*BFEFBAB>713?@ELNOXYXXMTXWUPJSYX_bffc^kustrkoojea^ZYatv~RFoZ^u@DJPPQQSOMLNUSUTTIO\\YXOSW[STXY\Z]_\_accc]jwlklpmoe\WWX[_a^afluwwplnmiadhkrtuvx}~CD{x|BBCAABCy?:CD@ACBzrklmidgnwyw{~~xpkhkqv@?~}}wusx?ACEGILQQOMMPRUTTSVXRMKGGB=ABGIIJJLONOQQQNOQRSSUUTTUW[__`ceie^]\][[\[\\]^^ZVXYTYVUMHXZYZYYYZZYYXYYXXYYXSJLQQ@7JCE214LT@K^ffX_:8e>CC@8`OCADC4/WBOD5G.>GB=EIHiJ:HYQnNVgk=r;==FKE<:=5925_YdPUJX6HWHB/04AJRbGI56;;B@>A7:D:N-`l>AF8YkBDDD:/Q2IAMDL)?:>LX.KL;(1@@:C4F74]7f7g3N:3-[<4*K0B63R7K.>cPAEeRRHQY^>KKl>S_VZbzWhG9b<3<4FNGL?>MT7;;GM@?67DDD@;Y[ObBis|~iV]a`daksbW]BUQvKh`[W\aYNNQORRRTJKKLPLGFIIGEDIHR|e?C~xo{BDiWSgnYPSVVRH}FWa]XspqLLxLPjky]Z]b[YYQROKILY]SlouAE`YSxSzrMwUiqyG{vrwzmmHB>?A?>>==:jdmibi[.?x_ZGJPVJIFEHHHI~smqu?l;9:BTTLTONVXWUKFBCHF@?:m[Xjlqdfaa59Z9AMGLL[qjdX[SGUGIshpq|i__flEd_cdgd[WQ_\PUW`kYS^d`[[UZXVXXTUTJDL\PM\c_SZUJU:6\NR\]h@BA:EHIL?><>HFDGJGHJM?KCFGFLGE@5b5B`B6:A?@=5Z64b?4;>=;6987428843554e\\KNTX\]fgc_^_][_bgc`gdd``68d^ZQQVUV^bdace46jba^^\]a-211,,)$,+(#(+)*%%$,*&&%&'&'--1-*. 547845135753 4 %    "!"!"#!"   :98T!  "# ! !"!   #! !"""!!##"#!    "#!  "#%#%"&."##%%#"!"!!  !!### # "#%#"!!!#!!$$#$""!"!   ""!$!  " ! !$ %#+100!+-1')*40))007.,0 5#62/-,**,@!     + +        "382 + + +    "      7:."$1(('"*5,CC51)"*)*1:7:?>>7=     +P.323( )+6>#   ,$" #% 4&, :##$), +0F: .% .% 1   % +d)/# 0 !%2#7,+!1@D7).#485%## +ZJ +!3 I[4W6,J63 =6) +!! 2L4557HEM;;94+'(   +.%a^\ZyoXBaV#@M8&%32415323'2%$ $  i    +  + + + +       + *486"!  $$*$1/1?!=;$%&! "%'$&!!%#($%&)+)&$)*(/87282)18=7;A@A<:=70*.8<>63@IHGECHHFEE@=@mvfh?B=EA==@GMQPXZWUHt|QWWTMHQY\ci՞tplhwwyxnf_ZUVg{zIk3G68C$'*-+,,/-,,-11M343,/7533/124024365563569:96@H???A?A:522479979;>DEEB?AB?:;>ADFEFHJKM)*OJFH&&(&C#"$#%'&HGCBA?<<@EECEGJKGA?=@CEK&%JIKGHEE$&'()*,//.,,/0312233+%$#$$"%'*+*))*-../01/023112111467988:;>=8::;:788:::;:7443031-(#154556674111353010/+$$(&!""#,.,(.+! .& ) %!!#+--*!#"/*)<'+494$$ -'*!"#'!!%.##( "*5%)4%" "+05-0! .(+% "0&&!%,.$&7'.'+.8)10#! #"%((/7>A3'/21/-1.4,-('6&B74228>:48<;<24445,,17852266>_I-1]UOX/.XUB:;KPA?EGE=5\]Z5EMIDXPN<<`@CXUkhUEIMPKHGAA?;9:A?6JGK($' /! 6:)C079=BGHFK$DAB>;:FH==@47CE" !49<=::=?@BCB?<=869:=:;42//.1:33243068:874889835568687@<=<@::8346853498658:50+SNJR`0-47389AD:@?C@BGG>8=?:5655210-/0002-//,,VZZ^V,,MT[VTFPPJOMT[bZOJDGJ@@HQUJGE;FVL?E*.-,( 5285.0(B-*&*,1JH('NL&&')P)(F<6;?$9+.)0,).011+P(%&)'""7+(438..()#%!!"-=76150&''+&*67AGFIE?<1! $!')'GBD,1,+496/((ICCJ)'!%-'%&4=>:4,.'&,/-++)*./-0)).(N(I))DCCIH@948=42.;JLD+8;DIBD@=8=8<;$!/'HB:;:A;5369&423266/-+3/(*,07-+27501-0.--,*,.&"")!'+("$ %-&(-.331/1+1.*,810,''%%'##-.''*.)+&#(%""$(*($#(*(%%&%((('(*.+(&&#!#$"!%# ((*-/-+***,-.,!)/0,)'(*)'(()+(&%$#"$(('**(&'()*-//./+'$!"#"*+#('$(%'#(+,+++&**&('$!#" $#'%'+%%%'*'%#$# "#!#%$#"""## !'0 &&!!($%#"%%%$*&$',++,*(%"$!%*.'%(%)%%$&#',!))*,,--)'()'&%%*)'$"!&$#!%"!$#+!!)"# !" '/'!!"#"! !"!!#$$!!"&"#0 `! &"#'0#&1,-$(**+-330./.--0020-101/-20.'&(*+.11///2./.---0́Ł~}~~}|}~}|}|}|}}|}}}~~~}~~}|}}|}~}|}| }~~}}}~~}~~~~}|||}}|{|}}|}}~~~~~}~}}|}|||}}||}}||{}~}~~}}~~~~~~~~~~|}}}|{|}~~}|{|{ ||{{{||{{||{|{|{|{{||{{{|{||}}}~~}|}}|||}|}|{|{|{|{|{|{{|{|{|{|{{{|{|}}~~Ҁ~~~~}}~}~}~}|}|{|}}|}~~}}}|}}~ف 怄π + в̾􅋇􉙤ꆑd԰͂Ը򁑙φúʺЭ􉍊聑î߀趟󃅴ȑԐ򃏊ɡ򁌃вϷѿ똱֠τ˙òπǩחĢʧ݀ۼ俽턑ƌƻׅȊفҊ싼ޕݮǾİ򔨙斓ဏ׏놃յƖэžȷ೯ԜƥܓՁք՝¹긗ƼĴ傈ᗯꕊ݁Ͱ쁀ؘűǹ񘐒ߋɧȳ鋗“ٔԻ㓆񃘦̳ûᠤꇗ晒ǽꁂѯळ쌚󫒈ƬƔӾԸсٞ덓އí􃏑߲脛Ղͻķɜ݀䂁÷ՂĽžʰ򅭦ߌ説􊇅ۀǺƼ򀝎׷仺޳ͭʾجĸϸŻɺ͋źƀοôꏐἲȳ˾¿ɿ˳߷Շ툋̼݀Ǽ鏐솃žƀ믟ųƳŹ򀂃]acb\XVFXWWUQX^d^X\llf455775b^YVTVNKIPh69736;BGFBB?==:;856<=:9:86h]b7;=BFGEB>::;>?ADC@>AEEFCA>;;<>><:8<;<=;:99777kejpoj9<8i8:>;<>=;=??AABDFHEBAACEEDDCB?@CB??ABB>;:999;=<:;:::;;wwff;@B@DOFDDBBBA?>BB?><;?B@??CCEEFHIMLFA>@?ABABCBEFE?@CB?GHKFGDB@>ABB@CHF>==>@ABBCEACDBCDBBCEB>>@BB=>ADDCDCEDA=>ABCDBCEDBA@ACA@ABAEECA=???@CCBA@BAAB?=<=@@@?>=>B>?FTC;;?B@DVBBE?>iCXMA:>=<@D<765597>HGB>=:=?<;@\cj79:7c59;>;:888;=@DB><=;:7;>;=BmR`:87=>0=>>>===<<==<<=<=E=o@PGwHQrPTGK[aCPONao}}yrg9$(%!#!1*.10'ou_[|U`DEv]"04%%-0=%*22>1.fZ_Pez|Uwa^b[de{qok}tPw+Z^FWQUvZcAl|omtol[\bL?5R+JCwnEJ>48m>BWak\cWtK{blr|~a]KZqveag_R:5.-1540671,/85a),&D"(!!&(%*0.7UD0*OHg#0?a{^?;!" ;0,%#.@(WC'&+%$,!"6+9>,<+2QGING@93/-$5+P/! ! "!!$#%"%%!!%$&%"$$%%$%&&!$&"&$'),...'(())+*'!+*--((+)+'%&(''))*,')+((4'#%''! $" #!$$$!&%%'((%'!'')&&'!!$#()+(!*-'($&+*),*%(/-&'#!%$7:"" &(*'&$(+,*)(%*,(*%%)-*'% %""'$%'+-*)&$#7+%.44A-)I9).1-,/1.,())//0/-026581*0;8<:74749882/&,4;BACCCBC<9568=A=ABCGLNLF@?>==CC@79sCDAC@HEH?xHCHFNTURSJDIKIKPRa`]\l[fspt{nhnmhh`]Z]eu{u_a{EIZq;BGGMRNKJEEP=hbiaYGa\aTOVQIuLOVVZa`oopqobknepkjpqk`cacekiinqw~Csonlkhmszz{zz|{|srslqspsuqtywrrwywtrnnmljijid`imoporsw~~uqstu{BCB@GA|AGBCEEGKKMPQNOPTUTRQRLGD>DEABJ8HM6?>ABHA<;;TZ]?JRI;=<>>CCLc4R[:<>@=C6269GF@6Y5YLJ5HE1CFB:5KFS_Q>:e.9CI=5DCE?^0LVXPG?LVPORK?76G0:0%1@.2FO8I<-7bjxJbaZ`;K90VL/FDD<5`bbc4<5^c]dh^Z485\7;<;4735:kilg^ZZTLRUZVQZ5eXTRXSLJHLSVQNHKONMNLONQURMPOR[WMIJMHJKEH??B]Y>(T335^`W[1389;;;532c^^]\]Z\`XNNZ5gYUVUTSPOTPOLMIHFFOUXVUWYVV[\da__^\ZWRMSKGORRXSOX2NVVa6653aURPNMNLFEHHLLKFBBM@@HDCFYNNLQ_c\VWPJFILGFCGKMGKKJKEBE?DEHSOWWQRKHJINI[TKN[[Y\VXURN`YYX]\[76991-268A952[U31ZWVQMORTW`/7V2YZVVRVZ][]b\ZWXVTMLMNMIFIIKHIJDNPFIAJMADBJEAMFJCOEBC?JgI?>IQKF@=;8BHELDKLMNGCDOE?JFPeC659CE9788C>44 ! !(" "! !#! ! "!! !#"%$!  "#" "!! !!#%$" "%! !!"$"#$#"###$%" !"" !" !!#""%# !  !!""U !" "* ! 1(" (,.+ 0#,/+313'/(,)-".3-,,**,"!  +    + + +   /  +     (6$0 +    +     + + ?"/$7&-;,.%%-1 &%4PWT5+<)1"L8   7%#$&/ + +$*%&+$" 4l <  , +" + +  =! "!46!-">2L$6?-L&'&!<34 J" ,# 3^U?T2kqG)!  $F4 + +  +  s8;682.'  :-fbeT_weuOVE+/&-&.#*1.654L:4"2##    +   + +    + 9 + + +         +  () %6($)&%()$"#$&""%*-+-( (113/,)*).--)&%.499;<;<>74/15;>9=>>DJMKD@A?>>DD?57sBD@BCIDE:A>>CD>8:8;=?=>ABFJ(EBA@>=@DHHIHJLEGF@CCBEFCDGEABCDEDDAABC@><=97===AACBEKKFFGEDH&''&,'MH#&$%&')+,-./,//4311/.'#"!#! CG&$!"$%%)+*+,.,../112377753588766779:999:8::9;;:3/.'(,+18977768656455522021,',*+ $'&&%$ "& *,4% !#("% !%'*'$*' !"$$!1#$ !""% "#$/&)" #-*--( &*&'+& "*" 'DJ*"#& ""!$,0 &,#$#2/-(08"++&&'#(,*(.2,%GA)*3739K14)*"5-.5413247@:;=@@@><64=9LZa[XNUnA[te\`TPQSPROPQQOHKJJF?BD?9B@70$$"26.+:H)+1.,*&&%$#"! <9<:>:679632!""$$"#%$##!%6>@CDDA:8=?><:;;83./2125;955596237982348963=943:97832742757A;8A5.2WRI@.987758>AMJFNDHCAALE3&I-0*/& <6#&)$"="#$)0*,+(RK9B<"%%$)/=4/++(1/-.+NB-5#="*.+7(,1 #,$+&!:B8660(A;B05/&9DGD@?82% )('F+-,42-/.)-&)G??"1*?")'&0<=:696.('+.)#**(.-)+)')*,)L)*GEH@HND<71-&$,7NK@9F>EHACDF7HM728>LWOM7HC<I:?603>5268/-)&393.0642-*,-+//+*'!&.#&$& $($,%$'(2.//0.0,01+()6584.+)%"%&(&%+1)'&('#$$&*-)(%&(&%&&((*-*'*().,%#%&$$%!"'% #,/''.,-,+,+,.+'&,4-+,**)&%(&'%%"!!!%'))'())(+*.-...,+*'$'#!%%"'%$&&&,,(''&&$$"!#"$$# &"*$%$%+-(%($! "#"! "%%"#$##!! !'$**&&"!#"$!)%"$-,*,(+*&"/+,*+(%#'%*()&#&'(') ()()'(*)*+/+)()('#k! ""$#""$%"$%#!$#'! "5&!"'"  $$$#'! '!$"(! "!!+%"4-0%&+.1-(-0.-**.30.-,...-++01/2-'''),+//.0/0/*)/Á~}~}|}|}|}|}~}||}|}|}||}|}~~}~~~}|}~}|}}|~~}}||}}|||}~~|}}~~~}~}~~~~~~~|||~}}|}~|} |}}~}~~~~~~}}|}||}|}~~~|}}}~~~}~~~~~~~}|}|{| }}~}}||{z{|{||{||{|{|{|{||{{{|{||}}}~~||}}|}}||}}~~}||{| {{|||{{||{{|{|{|{|{|}~~~Ё~~~~~ ~~}}}||}~}~}|}|{{|{|}~ہڀ ĺ􀍘􀊗F򂌍󄕞Ľžۀ냆샏砉ᛐ푹½체ʀ󉂓팍趨˲ĵ٠Աݛظ߆Ծ́ƚ߅癍цЈ̺펖썴̀ΓÛթćמΊŶĬы킃䃀ͺͥý’Ƭн֠ĵҡ̻þ~ܐȣ⁁Ժŭቆ¶Ŀʺ뀈D􃎌ľ𻴡؂녉ڶԋǔȡРﻂѨڕ̈́˂’ͯꭩ͝؟޸©̸􈕧Ŀ􌘘ٵɔŲԯޘʌ౓ۄ̀뇞뉕¾鿯Ѿ򁙞聊ɂ熋탉߂ֻ􅘝ϼ˼żгŮü̮ŲϽÿ´ӽ®Ȃξúʽ˻ĬՁȾżþǾÿĻ٤ҁ҂¿䂁ý̼Ǹǽǹ䂂ڐľöȼؙၨP޿Ŷ䃋݀\[__\WQLRW_W]g^[e^chgcccdh3323d^Xe`b^ZRYb3:>637@DGEDAA?==>DC@=;:95e`27:>BEGIJHB?B@@ABC@A@=?B@?=<=?>?<>A=;>=<;:::>;87rnil>=<78:>A3A??;7mkn;;<@?=:9:;:;=;::=<==<=<=>>?>;=@ABBCEEEBB@@BCBCEFFB@@@AB@<;;9:;;<<<;;<<;=?B@@CLNGFGGCBCDBBA98GIBA@B??BB@@EFFHF@BEHDEEEBCBC@@DEEDB@??ABABFGMJDB?@A?>>>=>>?@CDCBEDCBBEDGKE@BB@@?;>><:;?@DC@EC<<=AGB=@JFE=B>;=:==;ADFA>??>@;?AA@9:8:;;88if;<:8787<><:jgeiXmon::;:<==>>==>>=<<<=;:<=%?B??=?=977iifluedZc_``cZZcaac49==<;;;: 9774769547;:64VCXK,C;4,(*)')-34/' %''% #"! ""!-(%('",&)'&%$"4&< $=%&.KJU=>#%-%(  !" 79542 !"%%! ((#$ !&%:-F582O]DkN!!  !!=>tDBglrbX]gqhptvz{klebbotgj^M)#.)-.-KTZ[MmxX{fR"!59$$FE(-'.0-rZna|cVsyOamu^ih~xb[mekmQZSpyyV\fpadwb\=74S=.Mt}~m8\Nht}8B|{qisp^lvHRp^|tIIt^ni]|~L169/-11230+*+1.9 )-'"#&)%!"+()12014I(eE-dG~'6B$$! 0*!%0=:0.2852498976255009JPIFQUD3,(&$ 6+%$&&@ ! !#""## &!!"!%*' ''%$##$'+)+..-+&'*-*(".(-.-*)$)'%(***))+,''&(1/(%$((!  !#'##$""*63+'(*''"('''&"%(('&)),/**)(+&$$)%#/(((*%&"%*',('*,+"&*)*&&&'(#%*&'*10+$#'('&%#!%),-,-)$!!&';<*(M'.---1-+(+-MJ>#*).13543-+02655770476214879@ABEEFDCCBECB>F@?FKMJBA>BEDBEEA=:@<=??@A?BG}}w?zwHHIFEKSJLFDEOac_ZVQde]mqlpvmjonkgedholzSEKPMgllqwz<==;s?znuBFHLDAnEW^\ZVPPISSY[cdgvpgba`Vddaejprpfcfhfhlnomqy@Gz{ztqruzMBB}~|wtktrikssoprtsssvywvspljhjvtjccjme^`dbsqpllnr{|@DEFHJLGHIKHCFIJJLLLMMRSVOB;4B=co|{AB=:;j;y?AGKKKLLLMLMNRSTVVUVVVUVVWXXWXZZXXYYWVZ\]ZN79JPVXZ\]\\\[]^___^]ZY[Z\WWT9@J?CCHIKOPJHID9W5daDB:5J9<;2^Ua0[:V]\HC/WFOH@?=``6:?>;;VO8>@::L3+7*:I8A27>G51/,-I30FLCZL'@YKX\8K-,NA6>FL@QHN\9>I>4;56;==BPCX`BAI@QXB=3fO8HFYbA9YHL;BB?9CTF79K\4:CASN@ABH>>FPSAWUoKZbbjmhoM@VSVPCj[XWV\\ZYWUUVUT[X\][YiM=_UVWUQKINPRPRJFDIMFEEBv_[rftnwRVKOXbpttoputqoqsrwvvsieimqyTfN\gxNRPUSNJHDHCHIMLJHEDCDGGD>?=x:<>DADDCECCLOKHCBKgpx~wqptuuojolkgb^[YZUGHSWYYZXW\bgf`\][`_UVTXWV_ZZ]gdfb\[Z\\\TLMOPSYcdd`dTPMOKSV[^^aZ_`OQX_cefd_`^bg`UW\``UX[VNRJ=@EPPNNwokxPQ~{yyynwz_`qonnrudb{TPQVKxtni|t{urwx>KPOGqDJKA>R]VSMG}XEG`Tc|GFSWYUKJNPPQHylJgbUq>Ey>l>Ai<;49:<;6[PDFO]j6;\X57d9:3]YYa6jd9;79d3;><8c56cbkjjbZVY^c\USNS4X[_[RNNJRTPORKHLSNMRONNX[QURMIPSQQMIKJEE=?SQ;B8OI1JT`OS2^18>>;752cbe_\^\]ZSRO]4^YYXXRTTOROMMJNGA4LSXYYXYWSWS11_bcb]\[\XQOSSUUSVMUVTU[d654b]QNKLLIDFAMHLGDG8@=?IHLKJGDBHJXeUQJOVXQLHFCGIILPPJMHFHEBJLIKLPQJPYRRIELLHONIQMPU^:=\WZZWU;;8354/\9<=771W[0a]VRSTRQRRP\VPYWU\]aSVYUWYXRVTTTPJRNLJGEGJFKIQNHFCB=BEED>::?FJNIEGDGID?C88A@@;;9[2H6QC9<5469=?><<;9::<7`9>f5413a4]c[NLYphXXbf[YUX]ada^^g5h5`]^\__TMTUUZa`[]58766gb\[\P.-//-+(%&(.)-/*'.-/00.0/02.,)0+.-,%(,/-;9965 !534!! + !"#  !  ! 3726 !! !!! "!  ! :"$"""!%&"? "! ! !!!#!##"!! ! "$$$" !!""!"%&*'"! " ! $"! "#')#^ !! " #!# !"  "%*'% .-!0/,/%420 /0.680/+/-,.0*)-,++    +      + + +  + +        +   +  + + +)!6  >$"064916BCHDE<=965>@79K5 + &362)(F2LC7! +  + + +UA $ '&$ 0*' >%$"##& +!)04 62+)? ) %!'+! $':&A '%,"+) '+.'3<*"* #p[  ! +bbkP+bFn"  "86'  "'#  #NJ52(! H80\[P8m`nlW&#K&AO'/89:M$ &-'0&#  +   + + +   + +  + +   + +  +       # #$8&%')*'$ !12($')++(!"'*,+,,,'*.,)(+//4:9:>@B@?>>@A@?F?:8=:9;<>@=AEtwx@{GDEACFNHIC@DM`igf_Wjnh}~}wvqjdcalyzG5970=A>@CD"""#D%G@E(*+.)'>'0540-*+(0.139:;DB<99709989;?DFC<;>>==@BBACG&*IJIDACEGLN((NJLLKHE@FC=BGFBDDGGFDEJHEA@,?EC=:89997::6ABCBBBCGI%(()*++%$%(&%'*,,,-,.-01).9EF$"4E$%),--.../--/2332344333455788:;:7688877872)'.245798987789:;:731002/-* !#""#$"!!#+/ !&*&+&*22 8...!$ (#++ )*$'))!*,,"!''+( $'+/&!""  !% & ,!'(  !'" ('* "%,)# **& %&(#!$'*3;DJ+1298BJ16#!%$%#2++-/6888:=>@@=B?@@> # ##$$"#'(&$ $9?HLHFFGHHD@B@?<998660&)12556448;=<7676=;231432:77:?<><977:982-.1349A@@<=2X0^]-,(039<;>8<:.159<>?>;;:AC=669=<3695.1) %///Y.[ZULC= 4 0'C<374'=6.66* :3,5CGIGE:1,(&+/-)&%+)'2+(#"('& ;"#+23+,4>:82//4,)#%*(%"$&))&+3+'(&(FJ?I'HFDBNE@:3--.14EI+HGCJFABBE@DHD>@:EQB@;??92D67442D6;32,515>985B=B+)D?;/<:0%&,,61,2/620/.*+041/6739090/-+-&*-+0(*/(A&!>&;=D''$#!3-DABAC=50AKF?<487=616620.-(.$;121<3.-,0+,-,*($$),+&'#*- ,'"!'.4**-,*)-0/-.105552+)*++(%%"#+-/+'%%$(*''*&%&*&')(((-/(,+(%'*))'$%%"!$"!$/#$(&..0.+--+*()%..--,,))*&(%%%#%!$&)**')%,,./++*,*%&)'''&("$%%&)-,+$$%%$#!#%"&! $#"%$#!"")/&%!%(*&#"" """$&($&"!!#$!##'&#&+'&"#%#'%!'$&(,,(,,%$'')-,)%')'&'%$)%#(((*,/'(*')*)&(''%# &$## "$!$"'#   '!%($#"#, '$"$&# ! !"%!&&&" !.T(+$-.,+0.''.:4*+01++)*,.20--10/..,/0($()',.,**00-..ˁՁ~~}|}|}|}~}~~~}|}||}|}|} ~~~~~} ~~}|}}}~}||}}||}}~}}~~~~}~~}~}}~~~~~}|~}~}}}~~~~}}|}}~~ +~~~}}|}}||}~}||}}~~~~~~~}|}| }~~}||{|{|{|{|{|{|{|{{|}}}~~~~~~}~~}|{|}||{{||{|{|{{{|{{|{|}~~~ׁ ~~~~~~~~~~}}|||}~}~}|{|}|}~܁ +Ҁ ӵ܁ؽ񃕊Ā󉌌Ѭ苀߂ϻǟД߁̭ؓ۹ıʔ倌ⴵ򀇌ӪވۡͧϽ􀑢țѳԠѓۂ͗ʅěץҕ稖̡§œ჊Ճŏ·塖⣦Ǡ砶̧שƠ䀟ϵښ惧Ϻ餵适­ݝ׺޶ӝۚѫωգȺ򅀕ٖ֒ҰʴֺҮ뀄ſйŴѨ섋5ĿĶݟ⛹略’푓Ӹȼ烅ҥʺ쯖և͕͋Ӷӄʀؐշߨߓʺ˩ҥ˻䱦һȀ̸ӅԆݰĴIJ鞹Ȅ釉٪ꔏû熅³鄡醆݂˸л៾°ɽì÷ĴΟþľƸɮဉߥǼϺƼ˲ꂆǬŀɺɺ˿ŶǂĻʬ潺Ƿû¼ŹƷԲ蓑ހŻ҅ϐՋ抁0ǹ녒a`a\_`[RRQbES\`?Q@]bhgeidbbb]Y1[RXebaf55d\TW6A?929<@>@BD@@@>@CA>;:86e346:@=><=>=<;>=?>;<=?<>>9::9?:;oin57;7778=>=AA><77=B@>??>=;;::;;<==><==A>===>=@BB>>?CCFGFE??A??<;@BA=<@@B@?BECBA@>=>>?CACA>=>=@@@BA=>@DABBDFBBFFGGFD@@>==@B@:;==;=?@@FCFIC=>AAABBBAACD@?@GHFDCBABDCAA?ELDBDDGKHA=>CB?BCBEEIKJGEIKMOPFEGEEEB??>;::<8:=?@?:e9@;<@@;;;<@>:9d8E<5<>ABAEE=7?BA@BDEFJBB?ABB>A?B>;==<<;;Bbc::99:=:;DABDC<:88m\Jl@76<99:<?===>=978:98:;<=?A>=h:@A><974cehk_`9gY^p^agdb`_6:9:<<=<>>;93:::9:79>89;<;422]GF7:2,&&'%%%'%*$"$#"!# "! 2+"!"$!$))&'+,!;(/(6!%$<2,:9K3.(?-)?=)5* ' $ $$(&,(%+/%,3;-AK1=B?A:? ',QENxN[Zzc~g{{U7;MJ+0.52-&&''1:[k.+.-,$#$('('#+-1,1380X)Wd@6CFM6@G%##$.)1'7 #'M>,#,51&  !%+ 8C[OUF14BB=(  + >WZ;UtX\TfqFEvУs^J48prJsz}+689:61/10/S%37587*!%,131/SSRTUZ\S8* %($!#'":8$,(!"$"!"""!! ##$%"""$'' $(*'%"%($#)+/.-)#()+%$2$,-+,,'%%&++)'*&('%'*-,-0*"$'!   ' "!5:,47&&& $&',,'%%&'*')+)'%)(*,*($$"()(*(,++.*(,+.%"'(0'!#)(()%'(()**).00)%)%("'!!(-.--("%)!BGIIFB?<;>=@?>=JJEDGHD>?9:?<>?;4778;AECJLOROQKKOOLPUTIEFHJZff]k]ffamommoporqjihnoupv|~vtIMX\Tm|uqtsdcMJQo@BBEDCD@?GIMTXdcc_`iiponrork`_^_c`bhcdpsrpptqmifehioz~@zrzrnotz~~{}xsvrnkhda]gnpz{vrusibXWWVY[bc]VY^`W^Q`gflqsy@BDGIIJRSTLJNPPPKLPNNPSTTVVNDW9@G=U5>ACI?IF99gR8(-=X=>@35<8^FUQC58_g3==GI41W.APQD06EHB>H8ASZG4?>RT014f;1/L3546BFMFYfked`B2i<>FC0/FN6=\Xa2Q*15--3/:O39.,-RC(9N5F.H0<55176FE6W<9b8GNRHBFRQ8Cc45??7b]=DKKMND:7VNKDBK=RCXCQOFML:>GECDBEbtzxwwshifjj\Xb`VPNMNTVWTQQV]__]`[YYUVWST[YXZ\]\fl^XVSSb\UUSJOQOUWWa_]QOUWVURC=E\^WPQ\`RUNaie^[]YW^[WYbdcYX[VNLDBuKLKLK}sccktyv|uibgpou\U_xjjxrjpzohzPXO\^HtorI?>h>Wo;=8i^6=FQ`YWcJulcU\c^gw}<;;73\{vxgbXRZ_ZUOKEHGKXKB86=?:a\Qhktejx{o`Y\[VQIGA@JFFFEPNHHLQOIKxvmry|}||spkkcldi~H|hksmljxqsxrlkwslb]WYdR^]ab[`f[S^_^nbltjck]zGqgd[SLMCRdngFVne^\[ZSQW]ZTgggshnlgd_\a]XSRW[]PT}BGEspCJLMiXM|uvnff{yzxjcgluichfbcZQbX\we_exiaYXVPMNUUWGHNJ]bier;>=:=q^QG>GMUd577976;85f_Y\b7669458g1<71845f`_d7jb]\^d]VRHELR\`a^[SQXVSQQPPNOJSTNPPTUW[ULNTOSSQNIJHF==MQEOHT^K(gYV`EQ_05;9996124f_Z][TQNZb]WVT[WRRWRPOMJOQA?MJT\\`\\XSVZ30Z042bd``ZVTUUVSUYSRLMOTWc551d[KKJLKB@@EGLFHD<<>7BJCLRPHEIKLZSNLPR[\RMNJBC@GHOKMNHAJCROIGKRLJIPOQJLPKGGNGJJKjmjk]FX^TY;81164537:<>=940ZWWX[YURRTQSaeYYSUTWXQRYVXZSRTUPQRMPOKJIFDGFLNPMFKFB@;PJEF;A=BB;=<9;A=9Ncd8aN:=;T:X8067:=<9::8g7:IVQJEKPTOG:&- +1.,N&0A,21!  P $( (/)+-*%%$/8 !*<0+,/ )8"';$ ! "&   +'< B% ,(.($!"./8))(%/6@! 2 +e4Gc(>C9"%(   + 9+ +  '@=?-" y,IM7UwWCJ\ryA-@85B3' (0-*"&J.'6'$-%  +    + +   +    +   +   + +   +       "")* &&')))$ % !!#&%!%+1/*%,511*&)$%.<>=69@ED?<;9;=<<<;:FFCBDED=?77><<=92317:@DBKLPVPSMLIGGNSOHCBCHZjritblqo|}{vkggkt|xEDFE4>DA?BB97*',A%'')'''%$)))-/76679@?A@>D@D@9967:88<;==?@DJJ&EJCGB@ACFILIIMOLMPLJJKIFJHC@?<96=ACIID@AB;81223567642545.7-9>H=cP:=;879A>@@419940.-.1340.049885:765455126446887>A96324>9432,131687<><2[04431-"%:<6019:02,;C?:8967>;6:ACB7695/W-I##;*,,--VOH@66=CMMQRRPHGJNIC>ADAC2,631+&LI$&O+)141'"9!!(()-.215.,**&+,))&$!(5/'(2+-:*D9,#)+&,:BB0AGCJF:7/)063.*($'&'.& (')7HIB8352/-(&"!'%%$$,+'(+-.F*O*B?:>CCEBECD>?:74716EK*NQE7=B@?=E?BE@=85238)238958;3-657?7=NB;580F@&E;781,(+#,5:7#,:5/../*(,10.:::>799871030/,,//1'+EH#%#<:#(()A32)EJFAB<68DACC:58:@:577660*3+1@727E=9320+('++/&%% (*.,1 9.(##&)01-)),.S1.-151//--($#!%(./00.)(++(&'&((($*+&))*++.+&'+')*((%$#"$$" %* 3*),!")1-+.+&''-1.,,)-*((,('%$"%%&#',+.++*&''&/-,-+(()))'&((%"#%'',-*"$$%$!"&"$!!%%)'#!###*($#&%*.)$%#!"'%&'#%'%! #'$#!%$&""'&$!&!3423.),%''&'),+)'&'%'//((&'%'(%(*)))''(*&$&$&&$#"! !!$%%"!!("""&!#"!!#+%!!!!! !"$"%"! $!#Z !(432& "31220+,+*1'$',.,+1.,)(+-*((.10.30,*+.,,,*%,/0'42/0ہ~}|}|}|}~~~}}|}}~~}~}|}}|}}|}|}|}~~~}| +}~}}}|}}| }|}}~~}}~~}~~~~~}}}}~~~~~~}~~ ~~}~}~}}}~}}~~~~~~~}|}||}~}~}}|||~~~~~~ ~~~~~~ +~}~~}||}~|~}| }~~|||{| {{{|{||{|||{ zzz{{{|||{|{z{|{{|{|||{|}}~}~~~}}}||}~~}|}|{|{||{|{|}}}~€с ~ ~~~~~~~~}||}~~~}|}~}~}~~~ԁƀـ  ξ扑턂ϲׄҨʫ͸捁“ݲƷדɎ̠‚ŀř܃ᑜͷ܀ʨۅ􅌌׹̴͋ӓ̋ˤ܄ō毄۴ڈɝׇчݧՈ⡅򒊋䷣؟۵ֿٟ懚ɤܬ٤ȞŴգޑĺ֡ަ◘羬ʶ֛Шϥѯـы̎ӇɳٺöѰ;ɶڊހռʱ菋ˀŇ􉚣Ĝ〃ƅлΜ򶦲ԦNJԷͮ񅗠Պɾ³ɉց㨄ʶꓴɇdz󹑕ָⷦ̽񆓚˅򐊿ˀن׀˸ƗތﴩǙۀϿ·̻Ƹ̺ɾ­ɽìžùǺҺ׎¹¼À܇޿䀇ŷܹĻ􆔒θźǀŵ¶¼ȿɰҰ䆔üļψºij挈胒¾񀁁Է߀^ZYa__]USauO_a8?3V\gdcedbb`\33RP]a_XW]fo8i\TTb;>:454:===<:=:?B=::9753fe8::>BCFNQKC?A?>>>?>???@??=<>??=>;<=??>>?>>;9:::;787h67:<;d889???@@<98:=><;<>>;9:989;=>=;>>=>=@@?>?BDDCCCEDEF@><=BEFEFFB@>FKD@?@?=?@@>:;AEEACB@>=:njikq:>??ADFCEDBBCIFHDCBBCCBCB?=<=ABACIJMHDCBBCBAA?>@?;?>>=>?<:;>>?@A@BCDEDCCEDCHFB@ACFCABEHECFCB?GGECDA@CCA@?AE?>??CBDIIEDCCCDGCBDEEBABEC@>;>@A=;<<;>CBF>>=9?@@J@<;:;@A<>@==>@??=w?@CRPABAJVW@<998;855?C@A>>@EC<=EGC=A><;==<:<<=?9@:k8>==::999;?CCA?:56t`cpZ[8;;:897df28==<9789=BA>=:EBA>?F;=AD>??:47:i;A7kf]fe>kg44a_b79:9897::==@:;:60332:M4+)(&'$"!!"$6 " 1# '"".,'+'!)4:B6 %0J?M=/D87&B??<72$ (( )4%% !$&"%%(!)(#%%,.%;G/;BG/.FKK:==if6<#(-.1,1PkAMngeMTTO]Z_bepdjmoxzmln\:-50$!%?RcFqICOlwBTkDu9DFHKRYboylI=7/+/0*)//.0/+)#:50.(2?FHLPVYW?+!"&"HGA: !%#$&$"$""&%#"!"&'(&')(***)%# #%$$)+,+(++&*,&$%$,,+,-,+(*++)'**"%()))*,/8%'"%'$ "!"!$$%$#$#$%&$&&!%*&$&((#"'+'&&(%''*+&'(+,,*(*'+,+'&)+(*(*%$(*+*()$$&'&#'*/.++$#%&("%'#*(-0++*-+*C()-/-7=-++-,'+,*)#$%"%'&(*-58>B8-(*/111042-5==@@>FHEDHFBBFFD@AEGDEA?5=CEGKIKNMMFKLMOQOLQQCBDIPXad\Wzy^clinzvsusrnlkptz|svgh{MgIxjzzyB>sqnibpyDBA?87QaYhRKV^`YZ]==@b1:R3LF8CK89:9<6;75:FU//.Y_QTQ5A1,9bbfg5c_UNZTAF\:Z^>CDGL=0HTaV6Ob@C6.5+69FL$IF.H4AM;GL=(.DHXX1:B?9B>IGMic6=A?@8I:CKJ@=411YJGFKK3:tOX@QBLR7SuFkI:=PYPHLJ_g];IPXWVT1CXVOQPHADEL8aUTbgjkbfrN{PCAK;n`]cbe~tiOB:4ib[WZdOVYQQTUSRLKHHKFGEFACCDAAERvDIJu^zftqFUePeOOU^`ddd^VURNQQNLJMLOQPKHKLLKHFDGFFCGGFEGIHIIGGC???A|==qqnp<;8f_CKJC>>B\n|}wvssmghig_[\acPNOPSUWYUXVXYce_]\WSTU[ZU[]Z_\W\Z[WRRSUWSZ^VLMWRQPTY^^TQNSUTRMIRJSOOSURPPSejc[W^_XXZ]\^\^]ZTROMJK}mK{uvxxuzqsxwzne^emoLJDrzvqqiwryKPVZTNpzIEF`a?FQZWNMHKL`_\[WLHDFID=oOOLRGCAu;9AHLDvcaVVVLGGHFHIGA@A=:@=;?=tCEBAKRLKmVFticWPRY8q=EILJF@BR`9lJF>FHENKKODGDINVUVXUSPJFGBCGU=FHAEBGHMJMROLKLJOJLTTIBJLPRYi6_\]JNUY6<52343;:864?@=851]YWXWY[YYVTWXZ][ZVXUSUSQTVRSXTOSTNKJIHHDBEDHJJHCCNHGFDEJJIFBCGFF>ITMHMG>6;BD@FJCADA?Zh7D7`bSW:aU5>BFB=BH9    NP2!   +/$&"6-*0-* )*(!23/+$ "  + ( '!(,&(.## '  $!!$$4+*0 !)1,)  %-J=V-)A+$ + H?BY7 ER1.+)1& ; +/'#   + !DUBnE+EYp;N?5!"*2*6-@H#'3-  +  + +   +   + +    + + +   +      +  +  + 6!!1 $$-2%""#  #*-25,  %)+)'*)&+6>?@::=>14;>?@>:ACA@CA>@CECB?BFCD@=39>BGMKKQNOFJLMLKGFNNAAADJXejibdo|x~xsontw}kjwH[c2K>GGG'#BA?<8AD('%$"?%*./368:<:>;=<89;==>?<9>?<:99=97==<==>??AA>>BEEDGGGDA>=CBE$&NPO))(KEBCFFFCA@?@>;7@FGEE~CCCA93337==;1029?<8;;:;==BBABDDCE@%')&)-03441/1002343310/%"!#&&$ 35@=E%'*+++,+,,+,,-/27:53434566544366777676874+ "!$)-037;:6;;<<<;;<<81( # " #""" %!.+3'$+,,**+  3%( ()*$&* %#!! !%%&( !4./20-(%,( *') ##,%&1 +,"# %% .( #"&$#4%'# "/.%%)!(+$#$&%""!#"""!"+.35R7Q.6@?(=$"2,,246@?6+%!=95104#),((+-,.**)((&'&'%')*(')4AG%''E6_fIHH[;OVH@D.:Bb.;JNW/)/47877420,+--,*())*-,)'**H))'##%$#"$$$#%(&'''%"!!!#@ ;<98,) &&!3867;;.../023505>=789323376377588565530023528<4./6310469<41/2320V+(/+201230-./=B>:7;;57;==><==:431.--TD;+OPPSQOIEAEEECOMQOICEIHJB?<@BC*+&FNLHCD>IEHJ*.262/O@LEPT*''2/#,230VLU-*,+86441)(&(($4B+-+0'&#<#($::7220*&&'%'(&" 6!"#)$#<0(?7.% #79/COEDH<2+'&,-(#$#"'++.++'(&),'OBC@J@18IHFBDEBCA@=6=8GJNO>;6?@@B@=>=926A;0-275549=.6>D;7?OTA:7?8576641-/6928:-7@"B<@%E?$93'"&'A8F@;66:(<8::366;;95129;<<>;99>C:222(,/.0)')+&,)&%:54,/&"!&(*+/-*./*.0,.1/-4/+*&%'%&))*/,.220/.-,()*)')*(),+/.,)'(*'))*)'%%$#$" #&#%*/-') #'$(+0200-++-,(&&)$,+(('%&$$&# #((+-*)(''%"*3/+m)&(((,*)(%!$'++%#$#$!!!#%$"!/<5'$"# %$"' !!$***-)&%$"!!"+#$ !"%"%(&$#$"%"#))"%$%$'/-+.#"$%*('))+,**)))(*,+*())()'&'&&(+)&()&##""! ! %! ! "#"!  "%"!)#&!% !!"*$!%! !#"!7$/4(-F0)(*35+/*.,))&%'+.-,0/,''('&+01/.,*+++.$**+.033/.܁~}|}| }}||}}|}}}|}|}~~~~}|}|}|}}~~~~|||}}}|}~}}||{| }||}~}}~ ~~~}~~}}~~~ }|}~~~~~~~}~}}~~}}}~~}~|~}}}|}|}|||}}~~ ~~}~~~~ +~|{|~}~|}| +}}}~}||{|{{|{|{|{ z{|||{{|{|}~~}~~}|}|{||{|{|}}}~~ց ~~~~~~~~}~}~~~}~}|}~}~ׁɀ +Ȁ + ϭ򔣥ဃ눈儓򁇀􋗚숟ڌǻǽҌĭЋ昆뜮DzߏŻݽ񅇋ĶĻͨ۰Ɓ͆Ǐ㍯̐냇Ȇ艪Ҝ؏ঈ✾ֱԍ؊ď݅Ӏ߶Ŵ˄ԅ춍午Ը𛇺Ȋӊ߫֝܄ٙ퐌̶ނûϾüㄐͮɓ񀅒Ѐ÷ƿ̾ĥοÿ˺󓶔剗܂̭̿ιŭȾલ儏㊅ܦڎҌɧ㪹뙯ǠԿ̦񃌑풜ʪɋ˵ƫ蚎ȸâԑӭԈʮڅĺ삍ܙπǻ򆋈󐥚ĻՅހ섃焇¿늕п˿кʾļоͧŃބȀƼ‍Ÿο䅉ñ΀ɵľ퉙˾ȻńꑒŵƷ˽ŮüòچŮĻʖӨ񅒛ýϬ󃊈ՀY[Z\\YZZWQTSSY^addcd^bade`U_`e@XVc]e^W\aif`^^VM_??A@?>@DDCD?>>>=<88<>@>ABAA>=9768::;8lk78;q<>:9:=CBA@@>9:<><9;<:==:;<<=?=::9<=BJHE@:;>=?CGEBA>@C@?>?>>EEG?@ABCA@?>??AA?>@CFFFGEDC@><:knpo:@C>=>>@BC@@BEFEC>ACE@ABA>?BJIFGFEDCBECADB>>@??>==?@CCA@>>@FGHJJRHA@BFLLIFCDA@@EDFGGEBACBADC??@BB?@DEDB@DEEKJFFGGDBGHFFCBCABCECDCFFJC@@BC>BFD@@??AA;DE<>=?joGLHB@BEIC??BD>A:@G?<==>;>?;@<==::>>779h9;h5j678:;q@G@?:gg;;e_iilY_afhnlbh:<:<=<<<;=?BA@A@BD@>@AD@656<97b`Wb:Bd352c3049:9878889;95766689:754\]7;97R-D<*,+%#" #%&1.#$   (*0&+&* 11 @HA&%7"?7530-()"()($" +!#&042$ $=>!>(!7UET<=L=9&/0G3ERPBJ$%#!$+-4ZGVBE?>>DILNLKDF<;:;=AADEID?IH:9?@JPSMMMQRNJEMNSRJEFPY``UZalot|zxzxwprt{w^kInpkKbyEFJ@@AAqw|?@twrv<>ELU[_`dbdfhhgbdbefmkhdhlmmdfmlc_cc__bhmoujfkqvurtlbWNJ`zF{vrqmkonlklmoptsrvyzzzumgg][_jnj`^IVkf`ff\ctux?zkloopuz}CHHIMPT\ZOLQUUX[ZXVTVXZXUOKIFGGFFEC>psy}CCBEFIIDEEHMOPPQSTVTTTSSRTWYYWVWZXYZ]Z\TGMJLJOSVY^aa`_]]_`acedfe^PKFLJEEGDBJFLG[Kj5b>MD;NIHJE>A><>=7j7oW>OGJ>Ka]_:X=5KA17QQC4EQRb330U1DTDF88QNFTQKGBALZ<=:KZ59=AE5XDO56Q=:L-CT,:PO34@W9AA0>V4=TL609KVRQN;>8EU[7<<8;9QSNS9:HMIKOH=K8?>?6223cc[[UWL:n=C5BJ49K816e_V]ip~WfJ]|xiRo_PZ_=OlZfyHUgF920UWUPRWTLYXVUTUPPOMQQPONNOLNNQUG[kX[mjmjQ_fdhw|KUU`kld\^^[YZYUYTTSRRSSONLNKGAJJGHGGHLLIJDHQQOMKLNLHEIIGJHFDBCGMH@BB>p:MOKGEpzg[9<=HIt2_[WSHD?@HIHB@;978349GGS`nfZaiccdbXMIELQNGtIPXTJNMFEGJddHH~~sffL~r}thophrqjwktrf^kgec]]i]a]X^T\`r~krlZHchpjdizwwpz|rb]pbach`^_`^\VQPQUbZ[lsuA|xme\cdd`ZW\\[\ggPfltssFttmjrZAPFJjqjaboBOwjwcbnefffaa\duztvslcjpqc^YYWUV\SHH\acVVf=jc]dh_\XTNJNQ[^5<47@:8796gfaVZ_Vfc2344=dcc4:78e_`^_]YWRSZUNLKDJGQbjgdehe^UTSSSUVX[ZXZWWTWMPXSONLGGEJMRKFNMJL^78_]LHIMNOi9428653354d^WWTRHHSSOPQONLKPNQMIC@;NIQPY[]__[^\XZ[YMOWbc34c_\[TU[3^YXTMPY38853_XNHIMMQHGHGJGAFPOPQGKGIENQNY_VQQJHIJLJDEFAB=AIIIKOQLKONPS]XUNEEHJKIOc_aQGT\\_]5513466;73C@HKEEFJFERD9749DONI@@GFF=478CcZEA[OF@=5Wdl:=AEC7434466587677765a]_Z[YUROM)QVZZ\W[XFVYVT\gkif_YY\]\V`^^_`]f5779`cibZ-.8,/-+'*)*-,,,--/./-..-'..0+(0+0-)-041-++(!)) 65 !   &$#!#!!!! !#$# !###!!! 89:9 !!# !"#$%# " +##""!""#!! ! J  #"#%$*# !"$'&#! !!!"!! "! !  !!" !!!%$ !! $%"  ! " ! "$!23"&$ $ ,02%+*(#"!2,/2 1/+*101&)),/31-0+00(-#,-/##  +  ^ + + + +  + + +    + + +      S  + +  +" &/,& 2',*4;635852-.,5/25.8:.71, +  + + %7C  <40!%+3#@%2 , &  %$,; #&#  +  !)/8 9)/$$ ;016>+!"-7c;@?P.<) Q +  A#!'@]z@(5Q:830(  &%  +s +   9;:Q=95MUhgB..,a2!):4B5)%# +%8!=L  +  +  + + +  4 +    + + + +  + + +        !  +44<$ !$&' '($(+35*!&'&$'+-,-1-6@56ABCFC=GD66;EI#$>A>A"$',/367:8:;;<:8:9<BFHDBC>6/*(8FIKLMMN)LGDAB@@CCBBCDCEHIGHOJIHF@968469@C@86$+99:><3:DCE#A8:<>?ACE&))*-0486-,0325665331242-&$%%'&#!!! F@CHK))'()++)SS+,,/123233321/--,.0015669769953+ &')'-147;=<<<:89:<>?==<3'###" !" $!)10$)!(*&'!&(36-%$ '#!%!.4+%!#$/-2&$)& &")"!*%%&" $-'!%!% (%"* %%"$#"'(##!$%"$&!-.*(&' (-,!(**! *('%$/14%"&$#*27@J48%-96.$4,+*-)&!4;%&+),-*++&!*++,--**,),+++***+,*,/%17+<%--;;D0:=<@GPX+249>>94552343240//..10-,*,*'$((&&&''**''#',,*(()('$#''&('&$#$'+(#%%!;5!!%"((BMMLKID?>><8999=;:4//398773/6949D9373212632372297442//,.01584XW020149>>>:654498QV6>8,.572*(23;<>8389JORPOQJJECLGGFD?::GC+-;QLA>4?FL.LP-'02+MBBAN*PJ"&)>+.63*TYWO+/679752*'"I&!5*-*&%;B3)"&>7432)%"!%DG((# 3!' $'..''(*3-*3670).'-(-EIBDC;:945=35203-36@JJ;A=4'8:@;69C@ILMD@FFD@64?215712331/-)))-611:<<"AA=83657521299)8;=<>&=>67:-#-')H:?;429#+?9A32<8:985404>CCCB=6;?B:6210.-2-'&0--%%173-34/.+)'#&&,)220+,,'2---+1/0020+*))/*f&%&!$#(06632443+*)(((+,-,+-++),&&*&%&&$#!%(*&"&&%$,+-$!"&&#/.+'*()"")(&&'&%$#'%'$"!&%*+)*)&!#(,/-+()%&)+*)%"#(+)&#"##$! "!$!3, 30"'''(!$!"!%'%,/(&'" "$%$!"#!##!"%'$$%%&(-*)% "##"!#/-/&!**(()('+*+,+,--(*,++-+o(+)%%'(*)&%&%$$$%"! !$%!##! !#  #" !"%,$$%" "!""% "!$ '&$""$$!4- ",$%/.90.0,,+*(%"%)*+-+-+ (*((+120.,+,.//,/+*,.+./262-ˁ݁~}|}|||}}|}|}|}}}~~}|{|}~~~|}~}}|}|}|||}~}~|}~~}}}~~}}}~}~}~}~%~~~}~~}}~~~~}~~~~~}}|||}||}|}}}||~}}~~ ~~~}~~~}}}{||}|{~~|}|~}||{|{~}|{|{z{{|{{z{zzzy{|||{||{|||{|||}~~~~}}|}|}~~~~}|||{{|{|{|}||{|{|{|{{{||{|}}~~ǁ ~~ ~~~}~}~}|}~ŁҀÀ + 􀎑􉜈ť􈋉쀈֔с狠ĺϔȽܾǾ冃唓ѥŘǐ܃Ȓމ㻾׽˽Ե˽낆ǔԣЍ̺̍̉Ժޥ󤌤ϲ͠뒘ΉзșΩʨļ⃳񦉉యǔ롇ȱȃ恉ͧߒ秺륟יū⪡܀吚߼ƽ˶ߒÿɺӡ΀ҿ½˴ءۖڙ钩ũ񀖙἟偉љЫ̹̉ҕвׂ큆Ыϣµγۗ׶闀ݜﭦɬα԰ָåڢƾߒҟ濳ػπħ֭ٚܛր˻׀¾ҽՊڀłހ󆆅ɹɶ򈓓ҺȺɪ񠷿̀ƻĭºɿ˽Ľ¿Ü挃€ꀀ񀅐ƺʼ݀ݽ¼ù¼ɾŵѿ¸žژŸ缣ÈʿºԀ]ZWSY]Z`\ZUWTQPTU^igeeea[affe\O\`^cjhZSRY`bf75gcY]_`27:67CB9667679868::86546:@DEHLIED@>>>?>??DFEGC@>=>><:89;;;>=:99;=>+@??>;99=E@AA?B?>??@A@?<=@>=<:;9=BCEHB>==ECBCAA@CFHJGDFEB?>>=>=<::;;988;==99::;=>=>ADCBBA?>?><=@C@AFA?ADFEDFFCCCGJJCAB@>??ADDDAB@==ECACEQLB??@ACJNFGGCC@@EIIGECB?>@ABBEEGDCDDBBACEEDGKJIIIGHJLKHDIHFKIFFGGGHCEHGHBBFGFB<<>=;;?A><9j:<>?<;:Bg:ovCH:7:B>t@>:7YYi9:>>???AGC@`>B?=;;<@;9B;=@?A<:=>==;;=>AA@??@@ABAADNJIF>;;:;<;Stcf]K{ce313964555778;<;:98332357Y`:Aa\ZO0,%-*((&$$$#  !"&#$%! -,*!$)-,-)(#$+)% EF.=2,%"'-%'-+#""" 2 #')$?8:*&-*)2-G)87=3;CXBh0L0:5>HE$*+))6;*LFGolCD@GH\Og~LPLq;RHN5###"%!**" $*.7-29I1"/=;='4)?cPno\`gueg8-/XHufbnz}Wd;^TKj^gwU^@bMf]z_utsqss_esTD1:HCSLGsOHQQm4?IWRidocexin^wW{_E9D7bvR]KLuKj}dW=C7:{{x]254.0+400+/-,-/./9387BHNRQT]Y7  &%"&! '#$$$&1*()*=+,+'+*)+*+)&(,,+))(&$*(&#&'()*')*(++,.()**-.-,**)($%)/+))(%)*'))(%&&,5.*+&"%('$$)*&(*+)'&*(&!$!%"#))''--/+'(&'*&(.,+*+*'((-0/*##$$"+)')+)()((%''%#$)(+--,($%(+''(&)(&',-,,+((#!"'%")++)-61*+//.-.)'%#.4.-3/7;<967:9;>:<A?ACDAAKLMLKIKIECpl?HIHHFA@FCDHHJNGORPRPMPPMNNOHwptTXa`ZYZ[hpphxzw|yz{~{cma\fqWhc`^cozBBFEBtwB=>=w>@BFCDBCGKNPTXXZ[^^`\WRPRXZZVQJIJKIHFAqdosv@?CGGHGFEEEFGGGJNQQSWTMSYXUTSRPUXWYXXWYZ]UOORUUWTSVXZ\^`aa_^^]]_adf^MNQSHIKGDFKMEP=ReU_W,M?HGGhA43RU5BJbO?Za[2?B;B?989469?<<@;;5Xc^a^E;435a7=9P;AY/1EJfPRJ3?OXUC33WUdrnS6HWP>508ZIKGaP3dY03^YYEFUPO1C896?<_WG<=@-4PK>FFVBE]>GFRLOKE;F3W^VCL^55:>8;:8?A5[.4K`^UBFC=;::;98eGFVXcgA9OBEWMHL^wh_Mkid[\R`Zc;;96WGSgS\TMdJBR:A<=2[gkrzzy|MBLh[4@BDAGL@s>pJfNFB<9730]\^XX`UXabbca^[ZYTRUS{ӬujzUdlhfgfghhfb^^]Y\^\ZVQPMIDEC@BDEE@BJLOPLIALJJRTRTQOMMJHNMMKLNLJIFDACCEB==>vnppgfmltCBELC<8;@Er}{zpibcifaegcb_[W[^^Z\YVQTZ\XWVZZZ\\ZTTTRTU[WZZXVQPUPOSTXSONRQRPV`cZZXRVYUTXZMURTSU^_]XQMPbnpd`^ZZX[aYQTUIHIx{~}wsynpokgmOamxjvwjkKGLOKOIEt|HDFGGP\[RKIGP^XPV^^HeGLGDBF@p=LQJHCvg>>GED7>=8>AGOKCJDSRWSTQXYVQMKJIPMEBB97JGKIAJ@:8a6CHJECEA?BC4g]]5eFOZWNA@>AE::>9=;6676345453243355c[ccd`^WVTTWVWYT#V]YRTRNTkimjc_cdaY[[XVWXV[b_e_[`__\>//-*-0.2/-++*(')(,02//.,(+../*$-0/143,)(,//21-(*,,  +!  "    " !"!   #$$! ""!  k  ! !""!   # ! "!"$%  !! "")&! ! "$ ! ! """! ! "##" ! " !!"$%# !! #! !!  "!! """  3"49>!$8!&,."//4 -0"0,111/0++2/012.Z" &:-0)&8--"%#!      +  +    +   +  +  +        !/ 8$!)# /3$%#'*3,8L34/K'+)/      +' +' 1@ %&# +  + +&*  ) 0%63 (#% " $$,&$. %%/CT6 :.#E%6 >Q59*,F0JR0G/*B(++4 !!"):+#5@SZC .&  '"" +  +#B<993<+IKZOCG)C=<-"%-#*089  +A0"'A) +    + +  +  +   + + +       +     "!v#*$"!!!#"' '%-11-+-/./3055789=>:;<7;8<@AB@IHHFIGHFDCoi=FG@?GDDIFLOJQUSVQMNJEHIIBqkqRV_bbjih¥wuSXJBHJ8?;:7;@E$$&'%AC% !%#$('(+14778;<<<:;9:=>B?;;@EEEDBDBI>>><;8=?>;:9:;<;82+49=ACHGHIHFHKJGGB?AED@=?DEGJKGEDHMKJF@<;78=?@@<967;>@BEJKJ&(%#! ?!!$'&'&&),-.1446799;83-*-252.*&&$$#"! ;8@CB$$ %()***+*++*(+-/2100/),0132-))055786-')-2253355789<=<:;:;;;:;:4&%&'"""!! #&!)!,2)2+&! "2#("%7).0+ $)(*+ -"%#3#%!#'%#!'20&(&( !+#,&)''%#"+&!$%% " "&*&%'41&" /()00& *!!"&6-*$/2,)(")%,!"-"'#",%%05:?>99#!.( 14$0!../++.#$*.,+)&$'$ " 89HKU_fVZwIKW\4:=:9;:;<<:7685245431-*)'$$#!$%%$ "(*-,)&")')//,/.,)+'&)))')*(''%$#$#%#==><63537!#%!"BMKKHA>9;@<:=>;<9747996620,057542644585100/12545442/.2//2261/X0322049879>9_[V^[[Y233)ST**RYOFUUILV[RTJQGEH@DB@>D-;@TUF=DA65G+),.*+&&K@EH*LL'''(.771,+*/94/277(7*,'$$(F#9 *.*(%A5 !(/',ȱ)'#!&#%&*,)%BA@3115+3*"'$!HLABA=><5610.,&%*)0ACC;65::=>6/***,&&%"9@&,-*%&(,I@;I(,MEC@HA>AJ*DIEHDD=2'*+7=:@JBHD;;CF>=CPA@9:>??@38+6;CC>82>HK989?23<<<4=?;9A<=>CC=C:;A46531/230,+**,-439466DD876:<;532021-20/6609973C@."<3;(%JJLFB>4?=H=CC:=:677989<>AC+LEB<==G@<;982/20*&*&"*-7:630+*/1--*+*((+/1-).00,-((.-/-/1.-1-/+*)'$ ('*-.+*+,+%&)++,-,,.-+-,,*'(#%!$$"!!&&&-)$&**,-%!&$!%((/.%&($""&'%$'&%$%%"#"#%#.#%+&),,-,+&')%$#+'%+.*:,*+*'(,(+(,+)'$!#$%! !!!"!!"(% $ ('+))&+,)%"&%! !!#$"#$!""$%3)%&,)'#!"$%'&'$&'))/,))'((+)+)())/,,,+*++*)+&&&'$%'$ ""$""#"!!!#$#$# ##" "! "%)-0 !#%#%!#!!'%!%##/ !" !"$5003"&-+!/,101./+*)+,**+(*-,()(&)6343/.000,.,+(),*,.+/--10/.΁~}|}| +}}|}}}|}|}|}~~}|{||{|}|}}}~~ ~~}~}}~}|}~~}}|}|}}}|||}|~}~~~~}}~}~~}~}~}}}|}~~~~}|}}}~~~}|}}~} |}}}|}}}~ ~~}}}~~ +~}||}~~}}|{~~|}~}|{|{{~}|{z{|{|{z{zzz{zzyz{|{|{|}}}~~~~~}||}}}|}~}|{|{|||{|{|{{{|||{|}~~~с +  ~}~~}~~~}|}}}~ʁǁــŀ ŷſļ򈐘ሎ߀򅌋텈蔜Ѝׇ񉗖󆔖ֶ󃇃թІĵĮط؊ưõؒԯѠNj依ŀ䁎Ϟ۴ڏەσٴҖ݇̏ɴ˴ГƄ킸⑊➿衩Ӈٮɉ霻خ㪜ۈə۴䁍Ϊ쩐ӀƮҩͨӖ͵ЗԾۨ͟򲦉ɰɝӰŚŐ셔δſĴ˻Ǿŭ䁑Ғ޸Ⱦ¿惁þÿȅۥĹᇓū㼚Ѯȷց¡Րײȑ֘ڇ훠뇽ꧩ֦р“뢂ۊ㵫慔пԔ仅ӿ؁騰떧ʹɧ੬Ӵ膂ľ¹눎¿ԇ퉗ۀοýٍڔ΀׽ؿȼѿ̻̾ƹŦ߀¶ηžڶ½оȿ˶̽򎤙񉅄󂎎ȽȺϻο瀈̲򂈄³ûűú낈慅³ͼƿʼnǿǹż¾ξſ̿øƂͻ߅ʝи=][WPKZ_]^ZRVWWUUTRaddh4db286c`X_a_]ejbcVTY[\ch586_ab367968@?;9-8568<:987:<=<;;::759>?;:9;99<=?<69>=ADFD>:;==AA:88998:<>?BE@;<=>B??@ABEB=;<<<=<@@>@AJPLHGGFCFJKJGCCBB@A@?@?CEEC@@?>?BDBAB???>>ABB@@?>=@?@@BBB@ADA;?BDA@HLC@BCFKHBBDA@@@EDBE@??>?@A??B@AABBABDEFFLIA@?ABACCABDDAACB?>@?@EHFDCDCE?AIGGIJHHJJKJILFDEHGGJFFFBBHFDDF??BHEB@=;;<:;=?>>?dOXNZ\cawIIIG;:??oa@ACLVTSM@nULjgk<;;?=BDC<^e9:=::>?<:?A;BCD@;n7<@@<;Dp:<`hpf==<<;<<=@@@?<>??@@AABIJA?;>DwOReffpnh`]cfa038776249:;<=>>=<<<5Y/2<8b\T_c_1L2DT-10,'%$  "!""!..)*+,(+#*.)-&('5PE#$'#"!,++/)'%.!(!=:6/!,%$%&L9@AJ==A^?P=?!@!&_eP>)*0<;44_AEKJCLEHOMR]8?<:$",%$!"$&($#06 ""1)".0?51#!:==1@:Kvxhoxb{+J-(4-'&2=GNTRS_gL*%'%# !!#"""&./))(%&)+/./-,.--,*("(*,)()"$+(#&&&'&''$(((++*)!0++,*,)+)&))(',*)(%%%'&%(()')($!!&)(&%"#(%&%&)!#$',)+*$(-$###!'+.0...,+,*()+.)'&),&'',..*&&',(,)#&&""'))()'()$$'(*('((&+*)(*,-,,++)+//0,($##"'*/0/./310761*)+//15636731.19/:>>@CAB@A>@D??BCB?=@GFCFKMLIIHMJKJB@@@CEIJMPSW\]\[VOPQSXYSLMIFEDFFps;=:=DGGFFGHIIGGHGHINQPHLLNLRVTRPQQSTSVTVTWWPLHS^`cb`^^YWXVX]^]_]]^\[SSTPKCFGBGG7@ZH4c[V0W^TgMOD>:dgkZTHX@?Haaid^fEZ8=9fb`_]a95@@@AC>=cPF7;g8=MB6-4QMO35;X\A5<?c:/U`4VADR145$5=8=7'XLO)A7S4*0%9:?\I35b7?J/A;24s_dZp3]K4KQ[9fZVXrgHAYqdcABBCCyIR]XLNKGE@?;;nqrsohce`Yn{k&̘mvbfwblztmlkklgcfZ\_\VWWTXTTPMFFGMLGJMHOVRONLIMMPORQPQKILJLPOMHGHD==;ps<@u>??>yzzljjXe;?Jm;DC@:=D]wqnjeVciabjij\TTY\VRRSQI?P\YYWV]_]YUWURVVX[^YW^XQPROOQQTPKJQTOONRXWSQSNWYT]tN^OWVX\SX]ZWRQJPTXgd^]`YY^bb[QXSPZVNFFFGINLwvyxpwwmlnkkhxomzA@KNMLLJFIEEHEHHIPTRLGIIOQWPORRNMKHJHADMTLEDsqBxh=L>PQC\XPEGEHHIG{zrzHNQOJNL<88GqFhb\qp{vkfhi_^qf]b64\U=b97EGKDHG=:=>6T647`BDF`TN=C@;1Dc36=::996564454433bcda]ade_YXY^__[^\Zagb__h]OPYX_f^[\a`YXSTZ]Z\]^`[\\`_]=00-)%-1/.-()*+))(&//./.+.,(.//,2513*)+,-02./,<  !  "" !"" !!" $(%# "$%$" !! "#$"!! !"!!! !! !!"   "! !"# !#! !  ! "!!! !!$# >!! ! !   # #"!!#$#  !!!#!! !"#! U 2(,*1041=$$$"6. "))($4.(433.020)/&/-20201+12)M5$'01.32/,,/.+##%#  +  + +     + + +  + + +       +   %4%)4E4 9!%+*%+),-P277      )&" $ "5(1 +" (  <1B \1* !/&#$& + + "3/#" $44   **876":-9515 7-/_c=5IkYN!-EH",-5RwkM)*!">0g  +"U  +  QG6?#;C;(LID87=-)2+%O#) 2%?CX&E2  + +   +   + +  +       +       ! !!!#$'$#,*&#$&**'')(($'.&3546;9<;978=78<><;9=FECCHGHFFGMJJJC;AGHJKKGHJICHECIHGNQOQPL==FFBd617B@@DEABEFDAEONPHD>7:>@CB@AHJJIF@GJC@9.5<072>B";79#$?@ACEFGK&&&(($#!$%$##%%$%&)),-048763-),.033-&&#!! !#=> !!&())**--,,)*)*+/0-&*,,)/441-,+.1255522.(%'2:<>>=::6465567678:985.+-*$!!!)*##*#' -58.'#'!'4-21,0(/.-1,-*!361+(&"+ !$" '%62  &&'2) $%+*'0"/'(#%!A03,9- 1)&(5.'/('"(%*, -%%!&,&'B=AD$7+)+)')#775/)%+)JTXKnQTAHToHO^ahf^YZNGC?@>??:8:368635312224420-,('',,'++(,/-,*'%((*)-++,('(%'+*'&$%"9:6 ! ???767(0&7""3JIFDB>;1@?61246111/("-444225663231.113774482/-/./1031..0400/156421-342T8F.90U745928=8612-MM025@B?=>88=?A:^W[272186/'&)**..ZPMOHHIQWVONNGCFF@ACBA?ILU@@HMG$$,.-,F)&#'&')&IHJ*++/2/,)**.02-,/1.KP,*(*)HE#&-0+'&KA=":5,.K$31-&JE&#&'*(DB>B;482-)&#!*%)02C>??965:84@:-**+(#"#$#')'F+'G&*OJ>?J'GC=EOKE@JJKE:LK$7""#)HDEC5US/BGHAGCAO659?9;5?>9:CE9,6566=@>16>?9<754-112.0152/85-1EDC>C>?GBLO+OFCC=4-2ADAB:59<888;:CA)LFA@?>HGC>DA61220*/+*/-4594/+**,.+)+-+&,.0,..02/*+('(,).24500/0/-+)($#"%# %*%&&**!""*%*1-+,*,/-,)($"$$%" ',&'.'$),.*10)""! $(-*+-&#$))'#$"$# $% ! )."&)%+-,,)%++&&%*'#'01)")-*())&#&''$"! ! I!'!!!"$&*).,))()'%$#!"# -#%$("'%# %! *)(-%"'''&%%&"'*/,)'))))('''('()(*+)w(''&&''&$$$" !!!#&!! $"#""! "'""$#  ! '+) #"&&%!!%(*# +!!#""!'1!#"0#*6-.0.,//0-+,,/11..+,1200/50(',)-5,++./*,**-1.--./--.100с~~}|}|}}}|}|}}}|||}|~~}|}|}|}~~}| }~~~~~}|}}}~~}~~}|}|}|}|}|}}|}"~~~}}~}~}~~}~}|||}|~}|}~~}|}}|}|}}~~}}||~~|}~~~||}||}||}||}}~~}~}~}~~~}|}~}}~~|}}~~|}~~|{z}|{ z{{z{|{|{{{zyyzz{zyz{|{||}}||~~}}~~~~~} +~~~}}|}|||{|{|||{|{|{{|{|}~考с  ~}~~}~} ||}}~~~~́ԁ ـĀ ˿򀅋=􆒓􂃌쁅Ź􁉌؁Ĉܥ􄈊񕏈¤兒ǾĺƿЫዪІի񘳅̨䪯ʧ럹㉐񇑔˘㷻µҧЬ®䣿峩ŁʍłÇǃ腂쎘ֹ㎼򁓀̋߉̛ꏈܺӼυѮ̨۔ܶįҾŠҩٴ䰚ݪ˻IJ럋򉛯Ǩįο̽ȹ̾똓͡에Ֆ킐£ĿưľրꀇÚžһ鉔œܶȫѮʃ߻»ք妹ڻʡΩÓ􎩞Ùǡźۅڀ́։˂ƶƈަŏഢµ׈설ǹ􏟧˿呙񋓎炊ʷ͖۶Ͻ°ЦнӾ̲˺蘙ýի󅋘̹ûüӼހùξ킆л˽Ǿά؆ʿ¹ꉳǿɽǸùýþIJ׿뀑爊Ι>Ķo`\WRORXWXaXSVW_YY[X\Z[e]bfd4994cc5bdf``]ZUTZ``iah4c58967569:99==::795427<;:;A=;=<;:;;:89=A>::>;;=@>@=<=>CDCD@;;:<@EB><9:;:<=<>>;999?DC@?AA?@?@@ECGIGCDCGB?ADCC@CELKGDFCFKNMHEADEFFEB?BFKIGHGFDDDBCABCABCBCBBHB?>>=>?@ABACEB@EDCDC@DGDDE@?>@CACEED@BFGFHCACCACFCBEFCCEHHDBEHFFGEHFHIFEFGHHHDBCABABDCDFGDBCDIE:j;@?=ADGIHJAAIFHMHEABBC?>=;>DCEEHDA@BB@<>CAA?;qrmnlbc`do:;;;AC?<:998K]WRL?p[]gobff88==@<;9:6<=>A??>>@=@@>>:^gj:?A?;;98hk8:=?<:9>;@;jd9i7oim97nninqf8:mk:g[h;;;<;:><<>@A@@AAB@=>B7giqoC9hsZR_`a[\27:6c00148;=>>?=;5XJ087357677[G-EbBD;?*" ! !!  ,+**+*. ,'*-+++)&#$%92%((,&')!  "*&+03:88-#:2-*>L9RUbDB7:9>%/2C;-4:6>V`VQQ_8gH4,28[Y5&dKB(&)1+&E*! !.&'15=0/'@<=C:3DPww_ag;=9QfqvA@B8/-87RbKQpcbrvp_`wYmr[yjm66Cq/ftÒYdqmkze]dLAQ>@q=<2V#GhpoxU2+l}]mgrviy[TiVIXiuO*5;?52:6DGIC@ADBCFHIKLMMJHHIIDmBCGFC>DKGGJHFCDB<>=GEOPOMFDHLHvHVVWSWVXZY[cxpifjv^\OqKr>V`K`chu?FCEGKEGILOSSIX\MKQPIR^ioiaZX[XXY\`bd_ad\QPLNS]X^e^YZZ_dirstsw|CB>pukjjkmjlnmijqhimkimlgjpnpomimxyzx]`:m7:C:7:aZ9GDAA7:fTh9o7fH77>=16OB*;X2:LYL;?MIDUW2bSQ\]RR=ST94V5K5:8=6Q>9W^OX_I=LPL:77CB;=ZP4090F5-FFEH:`EIAR?)3.6O<2;HEA4BC7G6)3?=OPMNCDGE@C1`5:CW6?>;3P;HO4PWWbdZ'EZ:6W8\ZcEff>4865/SMMNLse`T|tuuastgy|rwz}yuvqnoljegiigjon`gdgffb^Z___\[VPMLGJQPSOPPTROONLKLJMMH?ELJCCDFBDF?>>BA;A>::5eeinb\`c7755fb5545_Y^gnla^\\YXWTTSQOPLB?FHQNHJUNMIIQbf4c__`YWVTMLGHTSMGQ[STQOLTR_2231dc\WMHLKXaYN]`4YXPIMPILLNLMPMNJFC88>DLM>9P_/Z`]Lb7ZbYOPVWUPVXY]Z]255546887aTKS1487::9862a^`ZUVTZVQMKIDDEB@>>;?K1=AD@;GHDA>Saf[TOVVSNHD?86X6LFHQQLIPNH;GKPIIRTPTSQQR^IRURPHOPY^ba`25::<866A94651`]Y[\[Y_[XSTUUSRUSSRSSNRQMSNNLFEFIKORJIFQMLKNMKHFJOMEBEDGJKIIBBEEEXQU5;:CDGINNLD@@HH8FFCMEJLE?=E:@JKGC=CA<8?;6S765^=DJOW;>?;5>8??;;::;:?8864665454c`_Z^b\_]\[[`de`X\^dmon7pe]RVNMP^`]b__XUVV[\VX[Y[ZZY\w21.)()-++0*&)*/++,+,**/+.0..0/2400.,)),0/4/4.$  "! G   !!%# !   " """!""$! !%$! ! "&'&#! !"! #'%#$$#"!" ! ! ""!"""!?! !" !   ! !!!""!"  #!!"#!!"##" "$"!#"$##"""! !!! A !  #!5 !#!#%"! ! !!#! !  9:79833016($.)&#5--15,./A(/001,+.2/0020/0,11/',/0044"/:,(0-+()(!#   + + + + +       + +  +       + NP10:&0! '3/###- -6 )  + $=   1& ) +!$ >]&;& #  ( +*.e'*-$ + ':94+8&./.+4EN* $'"A5DR*+"D96-,=#-(Ub/.4_     E>5<!N9YE.1 /%$''8/"4296?CFGJIJHIFHHHBiACEEA;BHHFIJFDCB=??IHSQNIB>CGEwDRSUT\ggfggj׻Տ}C]4-.89;B#'%%&)$&(+.0/&14().-(-6=?=743432369;<9:93+,*+1858;62347;@FEEDFJL&"?D=>@@?@(??CGCDB@?CJJKPKA347 !A;:/<;96/( (%&.7<>9,01*&#&$""()2!2-" -0-"$'.-$)1+#+6,+,/00 !"-#.&342 %!(# '&+" %&!#!"! "'+"(+$!,!(&"% !*!""# """!'(&(('%"&%# !$#+,( %&.03%HFJ:154C&#40-00&*/2VH@LjNiyvANXXXW\^d^YVRNWZZ\XQMHMMOKGHB@A@>::===CFD:>=<<;843897541-+)')/-+++/+*),,)()'&)()($ $'&!""#!$%! " ;;<96<=6$'%$"" +@GFBA:8=B>::89:732652045,.,34153565125575576420,.///..21UT/1434/064135886/SG[69<4671334<60WNIFH./)4<5/9513@FF&&(( ",'#/2*%'EDE?&,O?%FFG'.10*-*6/3*@).+0B?;;;>;==<;95505:.()(%#B:35&&HC((F(-LINBJ-M?>D@DC<=CACCD:<>40>L?/:=6-,=;@=99F@;4>05?8F6003/,.-.-+24+-11374=9.-&B?;9643/32-3@+)/0.+,2:CB%&,&FCE((LC?>?612ABB>69:4-5:<;@GGCBC?;5A@@=<:7.8830+)12/333/-,+(,$%()/0-'(%)1146.('(+*/+.4770.--,++))('&&$ #$*($$*'&##&./.+,-**)'$#"#+(%"(-(*()&)'.//,*&$%#(*' -**($ "%!#$%%$&&##" !!$,)*)-)/+&%*))&))(+)).'!%--.*'(&('&%$" !& " #%" '-1*&#))'#!(%""(($#'&##%&#$()&('&''/!(*'%"$%(++**,*&')(' ++)+'())(&('$''$'$## !#&'#" &#""$#"!!"%%!"##"" +*+! !%''"!"" %#$  """ ! */$&)%/..+,0-+-,.--022/,114779;30*+%&%.-,/.0-*++.-*+,+,--,/ +~}|}|}|}}|||}|~}|}}|||}|}|}|}|||}}~~}}|}}~~}~}|}|}|}|}}|}~~~~}~~~}}~}}}|~;}|}}|||}}}|}}~~~~}||}}||}~~~~~~~~}|}}|||}}~} ~}~~~~~}~~~~| +}~}~~~|}}~|{{}|{z{zzyyz{zzz{|{||}~} +~~~~} |}~~~~}}}|{|}|}|}|}||{|{|{|{|}~~~~  +~~}}}~~~}~}~恈  +׀ÀĀ vǿŽ󆉒ɳ랡􄌈ȖЗ񜟧ñЎ܄ɥԩה숕ٟ苨ҋܹۧʀю҃ЙϲȀڽԌҀʐ꼟ΎН͔Ԑ݈ԧҮתҺຣكê԰񎰒ݷۻӿʶڞ杼Ӎ͞䵭ĺ¶Ի򃐅Ǽûȶ񄑆ιɻžǹNõƽɼȺǻϬ㊑ɻުƏΆ鷥ůחڲ鉇ڿ̀묒̶Ȉٟќ犳ꁛў˧á㣭Կ޾ÈΫ˜ɐ򻒖΢Ļͻ㝜􄈉􋂘;큆؀톇򅐖냜턈ķӦûðׄӶޏԇҵ̵ȰIJӣזķ®˽ijȿ۶ǽ⾬솋􄉌ƀŹſʿůٽ酈璞ʻуȼ̷؀˿̸żĿӪ뷲ٙ4аŹҀTTQTRNPQW^f^]VWY\mfea[a^Ydd3668`Weddb^\^_WU\ijeb[b_b98g4656994778:;897968;>@@;8;8>BGIHIIHJIFA?CFKCDIFFA?CA=:998:;<89:<=;;>>::=?=:;<=<;<@BC<;;;=@BDC<9;@A?<<:=FFFGEB@EJLGC@DGDFHFCEGKIHIHCFGHEEBCEB@BABCDB@@>??>=?CAAC@?BFEBDDJSEAFGGCCDCBBAFIE@ACDDFHJOQNIFEHGEDEBCFJIGEFGIFDGIGFHGGHHGDA?CC@ADEFE?:mhfcn<=BDDBBD@A?@CA>@C@?EH?@@ACHCBBDDC@A@=>??<;CBGHAsom9;::o;AA?>>:=HORPNCFF><7k9<;>@B;;=>;:<<>=<=@==@>==@<8<>:?9:@G:6;8?EAC@?>A>7fhbfipn`lp;rhn?:o89<8:mfg9:=;9:<<=<8=>==>>=?@A@@@ED95hcqQrljZN]Z\[\\^`\i21004;=>??;9R%S<<:974574QRDj=:b41!%$"&&!!  +1-.--(+**"+), /+-,("04C1$! !+#'&57:6/%$LG*&8F1VMbt}@7?(',0)!=k+?/#956OiG@[EMP3' !*b49&$%%#7U" 27A-;D&!4;?1&,1GUhXK[w?ZSDXY)D=6*,;:>?7JW|FWOZV_xL{tb~pfgFNe#;24XE%5770>AC?. +XeUVrqmj:420-,/)),0*+-" Oi.5A184,.("$% %]#&  7/7...111+'##+$- BfZNRV0oj~H[DZtփXO~rxrɖ="G>9%6JK ,14:HQTfWjwV0**'#'&'% " $&%" %%&(())*(++)'&)*)()**)-+''*& %(%%''*,,*'*,-+/+'!&)*(&" &$'&(+')'%$%!!$! !$%*(((*$(((+.,'%$%&&)'&)))+---.//0/-++,-,+,.-!%/)(/2+%-+..(*+,A+..+')&(*(()&''%%%"!&'*++))(++,-+)).0.).*(.../58:1044;;0/.2363+357547;=@?>>xsuqkihfgnllokokmtssmjlowBxzGJ@qspptx{>Ax0BCGThjPC6*+L[13682\SC/RLU^:47H[BA;<8_ZQJ<1IGJaU_e'?Oob}J9lO5771YYVsgtddjq~~xo|vvzymrsrmuwtghcdeaccdjohiklk]}rYUTVLW]Z_hedd^SQUPQIGIMNGFADCDIHILIIHFFCDBCB@:;>=<udl{s?CC?AWY[Y\]^\YPOUX_\XZ]YXTUNURNMPOLIPYTOOMSUQOS\`dkaOW`^ZX_WWSJOTXRz}JPNWXWNTUZ\RROQQNMGJL~|yxy|y~u|||~zKu~miquvuEI}IIKvGOMMVWNKNUUKPQUUXMDHHNSKFz|BOPLExyDHFFwCFGHRRRSFq:EO~GXJNRSY^OEE9g`53aO[aBd]X\udtzfdh_ZVM;4LfcZq{oaW=V:TeYZ_YW[]_`ehc\[\ZZ[aSMJMIGGw`j|Gz|NNqTRxmjlrj`Jh`lvv{vuRnlez}rnnKohlxnginwtzvdqb_Z[\dnV>OCQJ9DggsxujfYw|l{{sPVitt]XVSVSXWXYUWYV\XXSiergMWK|zqiha_]\X\b]PNTdY^eVNUw}L^N{{CcZRSfitkqcdeYdgscd}uxozy}tmohk}wofa_^aZP`cUZ`eVIJOPS:Qga4:`RM^_0:@<=@<7?>8jhfe^Ta579;67:9:_Y]Y[Z]_]^]WTVTVZYVXRQNIKIKBKBEFGLO\X`3W_`[XVSPLGHKJLJLLVYRRORKZ_/742e^]UOHEHQSS]N^cUOMHRLQC=HNUVVJGC<;>IU`;=QS13UQRZ[SPOIXWPVQVZYb\\`42337:;<6dXGX77?:;::97666a\]^_ZXWWRJD?=>CB@>?@ICC?<@>?94@AV4`QKQWNJF>49W?BFGIKJHHFFCFD9:;=<=GKIHHEJQSTQJKMPRYWPG@@E}@MLY_ùfjikq}}hA0255-,+0'2:89B'%')+,/)-1130///--0/16==<61-+011..+,--,%!%%+/7;<=87668=CEDBFHFHK)"!HGIKHB@@@?EAACAD@CFCEECDEIN'LIJL*,$;968=AE$&B"GK%'>;?9:968548;969;9:<5200-165112,$235354653--12764566411*/-,-/.-,18510.35304;=>E>W.5<;76:563,0395[INLJF,.+2551V4^6:=UTY22000RNVT-,'),QQKJHFGKISIJLFKPWH^ONJIBK-ODPWLLA?BFED**ONOLE)((9J/,+12,(,32+.-002,&*)-1,&HBB$,,*&KI?>#&$%;"%&'/.,/&FDEA8&,@'2'),/47+##0*/%-3".+',G>6@BH765)%!#561@IDGI<6/$-8.05314568;<94453348.*(*'&F&<*0<&HBC,NJ+N=NKK20H@57;@<0#929ABDA@.M;<9HGJA@?-Q@;=F>:;=DCHD8B754569?/".%.' 56>LFB?;9.DFG9KEHD,134C>IHA:ABGC>?89ID@;76460)35-048.''*()$-(/(#)(2410(#)/./+-+-.---**)(*++))%&%#&%%!'##"&%-+)%*,*((&&#!"$$%#&$*.)*'($+,.,.(&"!!$''.$-/'##&#%##())! $'.!!#"%,-(%&",,%('(,).++,0)!'-)+,-*)))'#! &!! &-&"&*$" '$& &#$'#"$'+%&'%&(')(*&'&&%!%"+*%*.)-,*),')*'$%&)(('(&'%"#' "$ ! $"%#$!"##""$$# "#%#"$!!*! "%#!! " "!! %$ !-/ "*$./-*+++/2/+,.)*-1042-1;85331&&)+*+,*%',**+/40../+ ~}|}|}|}|}|}|}|}|||}~~}|}~~~~~}~~}|}~|}|}|}~~}}~~}}~~~}}|}|}|}|}~~~~~~~~}|~}|}~}~~~}|~}~}~~~~~~~~~~~~|}}}~~}|}}|{|{}}|{zzyzz{zz{|{|||}}}~}~}}~~~~}}}~}~}}|}|}||}}}|}||{|{|~~ +~ +~~}}}~~~~}}}~~΁ ̀ ͽDz;ٳ«֔Аč̷Ҫ؇Ԫ󣀒ֻȱ̀îʿܔʞ竖ß敱IJ̫ĀĽ믣ǫ׾ġ̤ܓЯцŰȐΟ핕ۺ܁שʨɵ¹㺜᢮Èރ졻ڰȻħШˬ䱁Ʊъ̖ҳРż̮ºľǼƫꍐĿüźƾꀈЀֻŸȼ攟ťۉʬɡŏсľ˹圊Ôſˁۀΐ넓Ҫѳ¤݆Մ޿ٿܮҿ݄ʿɾ¾ʷ޺Ƿ儐ɽ݃˗틧Ʊހɰ𑍁퀉ɺĶʿѵӱӻӲ샄οͽ頕ԥŨʾűӾڹɲ辴熚÷󀗦ýĵξҭ̔Ǵቋ߸ڦA⁃ʿ߀VMKQZWXWVWale`]YUnndaf6h_be64379c`__`[]`b^\_g68c^Z[\`75e58e45e389;:9;8:985;?>?A>=?=@EGHJILNME??BDBB@AC@?A@>=;:99<=;::;=<>>=;89=:;:<;<=@EEA?>??@?@B?@BAA@>=??<;CB?AA@>?>>BDDGD>>BCA@@@=ABACDGEKEA??@BDCAAAFFBBABDCDEDEFHIHIJHDEFFEEDEGGBEDDCCA@@A@?>=<=>>@OBDA@@AACHFACFA@??AIDAAAFD@@@A@ACEFEFDGNSVPMGEBDCFGHIIHEEFGDIGHGDCGFHGDDHEFEDCBCD.AC?=>8nqutp;??==???><=F?@B;=87:88;?>?@=8::9;<@>?A=>??C?B?>?979@GG99?><=@?;<@===>=?@>@>??B?<86d:o_cUKY^JUhgc`dn882[Y17<>=;8/LJ89;:;9766N;R8:6XDD &('('"!" !!!  +6+/*../,(*(!!2>7&*#%!# $04% #! /*.11.+)%,58K2Ka^K^H)(*(-j`J614)849UO-V^@XNFM+!?.;2E19FV7(/.+M$34852$  9..)S0 <;J,7/0:5SE%+8UPWJBA8@?]42HiJ}u\VGyŸtzearVmJY\WHUfmrqjVfdP@<:rOXd6RO4VEH<?4P\y_vzrnev^uZToxXKzB$1547<:BECQ>9:?HVN~bijp{.41..-+#(.*(,.)),2+`wƅh1W@2;>60,+'(.dc  460!'-,773,#&'( %-;5]I0Ea|qzovbbkme}J6~S԰鲵Y '-1JF!!%016EOWibn{I'* ("$()(%$##$$!""&''++%$(.)&$(-,((%(*'$"()(%'())$%'(+)*++$'*()'&# !#"$'((*'$%&%#$)))+))(%%!"%$(-/-+(+'$!!(*---...,-,*'*--.*,-,,++"&,3*$)+-.--,-,+*&%%'*+((('(%((('%')+,-*),*,001.,(./.3-(''(.49<<70+111.**077477;E>7:>DDGCIJKLLLORQHIMNTSUPEEIMNKsxSRX]`gjjtutyzx{{eMXXQTXXWZ_\QvEFFHQV\\^[YVWUKLLSY\^]db^]^\UNJKGKHIDFGLD?sjoqwpprw>??A@@BEJPOKGHGGJOPLMNKJKLJKNOQRSQMNKILPQQOMKKOPPQTTVXZVTTWWF95HEC/I:BN_1>CCTX\446cNUYL;GUTM6>JN:\PZ\pnWUKG<:HND@M.O9OMY3.T73X/>5>3G@7SLFQO\b/3PHHULRK-42JT:4;8KI%" ! !*RI@G?INMUWWVTQjndf6hd[@>@[GAAJX]KA<:@Q>h+OVRG]VB@W;os~Widxt{|{x|otvu{~|ytnkgaUZaipopmkjifcejhhf`bnngk^BIemge]Yb_WUPNUVTPNRGGB?DGBA>A?99@DBBAEJF@CDBGC?><>:9<=9<==;?=@:JRMNOAFLI=VY^F=FU\5X[Z\YPPPLUTPRRTT[\_[_e1246::<954`WT0889>>9:<9<845ec`\\YUTN@>@KKCI@AFAA>==<:69==EihbXPMGE?C8<5BEGFCILNOLLHFGGGIPLKJVORTSVPPPKFLPSTZ\b3;=802A<66841YVZ`3784^^`V[VTOQRPQPTPMSLILJKLFFHGFEVSPHPSOOOMMLFMRR@C@FGGGIFGEKGPU:?;;54=U86:eTCOXBZA5L25<;@B>;:;::<:;97654e334fbba]\[\`\\XZY^`b\[][\\]576ib^YQTV^STW[[SNO[VVba]Y__N+&%(-+*)))-41/.,(650.02-.-./--/,./0-,.2/-,++-1./ e""  "!!! "! !"#$# !!  ! !$#&" !"!  ""  ! !!#$##%$""$$" #$!#""!! " !#!!  ! " "&)+((#" !""$$#"!"#"!$!""! #"#" #!"!!  !8<=<9  !  !  $ "#55 ,08  .--501200.341+.2,.21*0*1)&-,")10/-.3    + + +  +  + +   ,      +  U +  % 0?>1]O- ,% #  + #  +     +  +  <4$ $-5!0 -  )   +#!%'1&1/$=+#*0'*LY:9?0%P % E;"$'V $.$ #Dg=/C''J  +    +  5%#<-5AI0+04+%#&#)3/ " @7>7+>?G# +6 +   + + +    + +  ++ + +  +  + +  + + a    ! " ""# !" &!(,/1+$ $$%$,+(+0323/1+$#+2126;:<>D@68=?ACDBDHHLLHDB;47B<579?BEBFIIKKLOSRIIMMTRRNAACHMLylr|S`hhlu}|J000+.10/01+.B&''(-144411/00,,-13454;974550+()'*&&$&&*%#!',.221598:>:7769<><88<<;?BB?@@@A@@CEIJGIEDCCCJ&$<<9:23/2668:AA998788=AEGL(''!>;>?B?ABD"###""#$'**'&&&'),-**,*),-*+-/01/*&('&+-0100..13334677851010%%"(+0342357899:99987750/148:;;9884)""%" /'0 ! " +/.-('+.-+*$%&$#. ''(,$&)# '&###+%+*63$$!k" $%#"# % #!(,"&#!"*,$(% + " ,#!&&% + + + &""!$%('(#10002.*,"&.$%.((&%2L* 5-PC8GET_kqqknlca`WTRUQPRLNKKNPFHJGLOMJGEC>936??>:969940)"(677248::764623461.0253699543351.+)./0.+.1230/24004;;;9<304242693.103553ZKKMD9'1*-4--,,354bUUXZW/-,PNY0,,)D>QMGEDBEILKLMVKDFQJNLHHTDLRGDBC@;><97JNLKQP/.*,.0&=I+O-35,*/6.*,..33,**,,+'J99%(,*+'HCB63"'($#5-,'-$$)&$$&5/.'.,4.--+';/04) !/0<.+&-#!5271031,)&,079;GEMIED4-4:9731/012/54355411341(,'&&%I&(F58(*$<$+GJ/JGPR-TN#7*%&7<95=>?KKD=N-+?:7OJB=@>IBBK@E<:6A?IF?7?;:7743A52+&.0**!:D%##%A94@DGBKLJE341;1/.?820*1.-A@0-,-0/.731;$$$GC>==744813.,2%/5.,0*")>==E:.+"#DJDA:'38.*,@1@92<:7+/2,=?AAB)E@A@>9CF>=987684561174-(($%((''&1)#(#$ 3+)&'./('')&(*%&)')%'+-1.**(&'($"0"'.-.'&*)*('$$! %''$"#%'+*.'()-.+&$%(*.)()'''#((&+!!!$($$&!$!$%&"&')*.-'&&$))%%&&&(+-*+//)$/.-*,)'(%"# %"!44.)$$!!!! !""#%&#$# ""#$)$$#($&(&)%&&$!#&)%(+.'&'(*+.'*((%%'&$$)&$'""#"!" ! )&$ &'%$$""!$&%!""!# " #!&+!#! ""#"###"! $%!  "(((0)!).!$@.0./.,,*+.,/,,+/02.//,.--310.)))-&)),,'%&.++31.,00 Ł +~}|}|}|}|}|}|}~~}~~}||}~}~~~~}|}~}|}|}}|}}}~}~}|}}||}}~~}~~~~~~~~}}}|~}|}}}~~~~| {|||}~~}| }}~~~~~~~}~~~~}|~~}}~}| }}~~}|{|{|{zyzz{|}}|}~}~ ~}}}||~~~|||{{|}}|}|}||{|{|}ŀ偂 +~~~~}~~~~ ہӀ ׹Ͻе웋􆘉ـȬʴ怑獏ϡٿεɳ򙝠⁶˻п둓쏧ѓ历횅ؤ݅ס˳ـҾܣھԱΨۋ؂׈̺ÑÎӾÕ᙮㴯ղ떄ėؗ򻞟ٳŷﺕ׊Ǖ“ͷ׸‘أۂяƱǼذؒ´Ҿ»˲ǻŻȀ¹˽ҫܜЌ󓡱Ĺʴɸ炏ʽ݀˻Ŀ̥󑍏ɑʀϼݔۉ˾ʩύɭ椦󕑛˹ϋˬڑܫ񮑮ĸ䰣͈ͿڅƱǼʓŀЫɷ뇈ꅀþױ􃁊􇂉׃𕢯һо̴Ͷåû½Άʼ¾룏Űλـɽл߂󆈋ſųƻǾϼ̝ž􅉐ᅜ·Ϲ½ʼՀµȳ̴ж櫠οĪg\MLKJUUWXQXjlf]aZV`Z[`Vch`fg4fb5fb`]]Zeg3b^_ek97e^eed^ceg873cde57<=;447><75888;=BE@8=BEGHJOTOE@@C?@CDCD@??>=<;=<=;;<>=?>?::98<;?>@C?<<>={>DGDC><==BHAA@@CDECA>;8=<>@ACECC@@??CB)@?>?AJHBDFECEGDCCEEEHHGCA@BHGCCDCAALJFKJHF)GDADECDGJJHDFGEDEGEEGGECA@B?@AA<>=>;;::;<>==>>@?<=BA@BELEBB@@AEIIEDDDBC?=;==@::8;>wqjm9j:@8:;8<<;?AB=9;>>?BDA@B<=A@>@>A><85gj9B;;@>?AFA>AA>=EH9ljgc]`kW_ikionpie`imj;8o^:o6768:::;=>=?>>>=@AA>==>?=>=@Ala^ObdZG[ff[Ychg7B8S-49:972WP317;:9764M1b97103QD(/**' "" !! , "%+,.48*1)'.&+,%)((+*$*8)#  (, '),/(*1,5-/%'#5(*5>}b%(82)]D61:#$/K3>m3S@IPV,.]#B4Q9/9A@V9>/>*"'&/8F7U/773!$ F1$;4/%#>8%(6'&,5OMMCNFRg^^AtrHiJGgp[`Qf_j5Mi>hU\S^X]rw`gFpdXJJu<{wdMGu}[NsET sm\[SvbsF{oaE5/::9m<7Z^l=->yVnve}}w]24.)+*(")-(0/0.15CBGsK[<^+7=83R@n~# 874202/*&(( %(T6ZA;okEXwIbnUjgt}GWɧ]m%8)+'&##/5;DMYutrg8 !%&)'"$$ &(+&#%%')'!(*'#(,+))&'( %*( %!#'$ #(()%)&*,%)**&%)*+'"!"&2*&   "!%%%(+-,-'$!$$!%%.)-..-0.*(%#""')''.1//-+,*-./.*,)*..+-,1/,!$&++,.,**--*+**+,+'+%()),*+*,-.,,(*),-/)&+-,+0*''&)-15::93,)03,).,5643=BCB?>>:44<>AB@AABHG;>@AFFEFGILKDCA8>>BHB@9@ABIGFCCILLHHFBxIOPPQUTMIXSLeMJR]bdhiooy|{|{vy~seQPV^ad]_o`>qGJRTQUVKCNOLIOSLJSY^ciiaYTUQNKEFUTKSNLNQatgZZ_ZUTUSX`adbZ^]Z^_WSSVN[clp@Hkkgddffif_dlquqmlnppkkomkhb``acWa;=;pfggjijhddgkrywtosrkcbhsrf]Y\[VW[]__ehk~FMKA?w=unjggptts<;<<=@@7NVMB99=LH=1P@DC:UL^74RS32R?XOcS2Td4OL\@C\H:AX@DND><86HQ;SLVX]LeB=2)(DOX;<>B?=/3XMVIMxia}}}~zu{~uleimnnfcMafceZ[ljlnmjnjklkhdegeggdf[RPMRPSORWRXXVUSTJ?@AB>:7669s7?\457;;l=?m8:=;9SS3XeYsrnjhhfde_a]_WOIA=J[][VW\]_^Y\Z\^^aVRTYWUTVYVVVWUYWYUUTUTMJLONQPQOOQT^df[YdSORYZXYYV[PTSKKMLxLOgt}JRNMMuq}}zyJOWWRovxrihjlgoBD~SKERQSPXSUSVQJR\\h\RSVSSNEzon~DAHSJD;>GMDLY@KOLJJKMOJ=DCNHWaOOX[\RHB}|CG=nsq963CTPebf\n?riZF_Ra5h55Z;BRN]uiuxtg]YZ^XVUWXTVUc]T\^WTVPMPIGFELRzHqlmsEFVN|K~yoTUNUYmyisvrx||tFNwkazsgw|mcxw{oh|yihl\mhf`a^TQGKM]Q[J[brsqoyesd^WOU]TERXURcNKNzl}bd[RT\]diywn[eF|{vlgd`YYSN\XWUTO]`_wrhr~cmRH}}{sncXZ[N^elivzzeXPIRWglkkvCA{F}vrtshkgagd_ce^SYZ[RRPOPWWZV3:eiNZU]b4:=9<9BGB;6jcP\^^VVc66957\QPNOU\WOSTSURUYa987eb\XTQI@L<@?9;@GWWT]VZ`^23]QQPLMKMKB=IKNVha[U`0783_PJUbdh^Wc_TMFJKLK`R=JA8FIBCQJCEQ^bNSPJMNQ|U[bZYVPTRNMQLHSTW[Za203_455:88873321VL076:<==:<75988632a[YWNMEBADHIH@AF@=>B>9498HMVY^ZSIC:22@4FJII?GOSOSNLOLICBMKRKOSPQVYQNNJU35fh41990Y3=A842_a21[WQONPOONTPPRWXQQORPLNOOSOOKFFCNGIadZJTUQPNMVQMQURMDABFIECACDGKIVZAHQKFEBEB@HMJELSJ=6;8PSG<=BB7HIJMGDYYd7:2NLPZOC>=;;A?AB=<:<:;=::;97653213geffbdca^]`_[\__e^]\^\\[dd`9i`]YRW][[]]^\YNTVVX`f]Y[/&&%"()++$(463+/+)-*+.%./*0.0,/.-,-*24/-.040-21/+/10.00!!G!""" $! "#$"!  !"!"$" ! ! ! !!$#! +!!#"!!$%#  "!"!"$$$'%!!"##"#"#$$&#!""!  !#! "# ":! $$"!!"!!($"$$" ! !##! !"!!%%&#!$$"!!  !!!    %"B """ ! ;:65"50#/9-.   010-)*1).12232+-+/0.3(2G.))!/3-!(/2,*.1." + + +  Z +  + + +  +  +    + +  O   +&Q;J +&   +.!      +    % ''3!!'/%"9, + -($ " +   HA-#0!'.y15D4--"0@;E(LDA+! + #B #D($/,$2('),0 [q.D)KT" nt +  +  --"9*+\K&% ';1II;7,I 97&):-%23* E +   + +  + +  +  +    +   +      +  + !   !!!(*/0.(!%& (('(5:<<955.,+26::99::BB7;?>BBBECDIGAB>6<=@F@>7=?BGFED?FJHDGFCuHLNNNTNGBSQMbC8Hots{~늈|lGJ(*/45723<2 @().-+00%#++)(.1.+258<>>8312.+($%--)/*)--7A9367521304:9>>68659:40/2.8=@@$*;<><;9;>DHFEADC<:9=BC=8365235657=?>H',*%#A!>;;99?A@?  "&'+11+**)&""%'&*-,)-.1/+''$%('()-14343~3214678863.63/&+.14578840035668::9::8;>?>;::9::68:6-& .%/"(!##2,$-) #$!"&0"$")&# '$&&+0/#($  #,!#&#&/%#* ( .,! #"(*"'(* + #("+.%# +## )=* &"&"##(&$#. "-,,/<'992$#-Uexusoqfllea]W;>PO*RRSNJHKMKMMMHB<>CBC>;,;>>B77@@ACB@C@@A@?;=>:::760*('++,+-./642100$!%"&/"# 0' 11"" -2?CB@>;:;<98462,& (25625778735355681./2211342332142311121-,-//122/023;>=67@1/26655758132V\TQLSKHI+,.-OKBT.1`aP>HKKS)/-WW..WRRLOUNOPMMDBJLTJLPGGMN,VY.351O?@?=9BGH@(J-B<6LE@9FH>6FMKDG>:RGNH>;;2?<;77401)*+5,1%-/9::8@3CJ>GHPM761,/50'.//-7*'(GF7D24.*-0148@B=03'CC@:76422/+30/.,)340@>9@G38-&@BB?G<6-23)45:5>@B5-% ).5985;#!?&FEB@AC=>;6:62692,/0/*+)(),)(&25%(#&%!# 62$*-/*+/,''%%(*'"%'')%')+1/.+('#&  "*+'-*)+),'&%#%#%$ $$%(4/+'.-%"'-040*0-&$!$%$!/(%!"$ '$#)(#" #&).+,+')'&%(#&&')(.+' /+++##""#! $$+,.+'$" "$"" %(%'##%##!!(%*%%%$%'*'&.%#"#"(10'*+'%#"#%%$$'%%'))&&%&'#b'%$"!$ ./)!((%$##'# %(%"!# !#!-)!'$ !!#&#"("%(  "$%&! -1%%'.*F1/13/2//-.12-.//30100-,,0.,30.-(*-++,,-,,',,,-14.,,ԁ~}|}|}|}|}|}|}|}|} |}}|}~}}~~}}}| ~~}~~~~}| }}||}||}~~}|}|}|}}}~}}|}~~~}~~}~~~}~~}~|}~~~~}|||{|}}~~}}}~~}}|~||~~}~~}|{|}~|}}~}}~~~~~~|}~|{|}|{|}}|{z{||}|}}|}~}~~~~}}}~|}~~~}|{|}|}|}||||{|{|{|~ǀ灄~~ ~~~~~}}}~~၆ف ڀʀ λ̵􄋂ꂆúȽ޽뗦߉ҳ󁆩œܽଝߦޗϋӋ̈́ҟۇΐѠӰӝ׵ƴëӬ⯢뚶ۯ삳ϾĜ䄀ۆ˔᳛ɢ̥ð󠇕٫¡غ縅˔섴řҺ}ꔚ¹ĽϺƹýʿ܀ɵ􆁂ƽÿʹ͹ɿŷ킉䁍̀ſ򑍕ȣŷɹŽ݇ܳԾ܇彵֛ȸћĒϿ􁈜۰ʘ摻򽚷ޙ󚖫¿·ÿ¾逦ꆌü˧ꁄ霔ꁈ򌉁ݐɫ遄յƽ߾ż廹ǼǸ炄Žќ½ԹۀƺɽǷͽȿǷƶƽ󉊈ƀ´׳ùζÿʾƸ󔙕׽ѾͽꂄǿɾϾɰŽՃٳӬſľqMGMMSLYVZWRV^[\WTVWXSMI^Xj77l57h6a_a]b`bedX[[_8db`cf6db4436;7cce5;=76e`5;<<>?@?@A?D?59@BEIKOSMGA??@AABDBB@>>@@>=><;==>=@BCB@=98:>=AELIC@A@BBAAA@@A?>>>=>AA?>ABBCBCDDCEDDFIKOMCABBCDFDEFKJMIGFEEEDDDCHHKEDDFEFFEECA?@BCDEGDCEA@@?@ACDDEEFGHFDCCDECAAA>?A@?EFEDGEBCEEDDB?@A@?FDFEBFMFB@DDEGGEFFEEA=<=>=<;=;?>?==<=;7:B>;978=EC><=9i=]fsc^l69=;<=>?>;9DDB?@<G=5-("$&%%&%" 44- $& *--*.0&,&#'!$*!&,"!&2=:2$#!# !!!  +!-  2)#-((,%!$?"&/105,97EF0 +-6@9LV7:Bc)-PQ+*(CC;XYVTAJH5QMD&8F7'" 2G^DJ\;+4&*PF1/I3>Z((JWgbfal84Ef0SbbupX{kvŠ/3/,($&!2'$'.0/26C=yh;08kf{e4Ht&"$" ;<8:72-*("!!#G`Z4_ulhqNpmW^Xx}?cʞq{1!)&!',05;ALNc{nm_1!%!""#&%&$  (''#!%'('%""$$)&'&%(+**"'$'&#%'%#))%#$#$!$&$&%%&.(&((*((%'# 3+#&" ##$''(&*/-%$%# $)++*.-,-1120*&%&*/-,..+.-.).--*"(,-1-'.244.&!" %&'+-+,,-,+)*()*'&'*)*,,+'+//...,)+--,(,%0120/..,28;;;8975760334-320C@?@5.6>?=<bY[ZUZ\ZVWWUZZVTRMKQMEJJNTWJUUV[bog`ZVUVXY^][\aca_V`]YRMNSUQW^cpvH>we`adc`fYckmllnjgikiedab`ghg_kxv:>@=trumfdcdc``^`hhdcceebaae`]^\ZY]]YZ`]\mwsnxGG?A=kifegmptr6_6:?ADFGKNPQSPMFBDAADKKNPRTWWUOLIIMLKJMMNPRPSTUVVXZXWXWTROPOTTVZ\_ZWWXYYZZ^^`aaa_abc_][^aaba[WZVBEMF<]US\5:DHJEFLJGKMGf[XQSLFD<856d_=>M=6cSMFIMG@=GWJQeaGGR7`>QZE;Kf5cUFH30_2UKS,14Un]UKW]S]KHRUeZUWVTVTPJlDYGMQGDCE@3MSb^k<86?E,>S1<.e8IGMCc>5!50-*))('&&)'!6JVfg8]fF9>F=XC=UQ7BJ-D@49MByTG\^zyj}zkr|y{{~{~wutrrlkikjfehdcZZde]D^cknnnlmknieec`a][VSZZLJSTRVQNILLFHLNNJNGo9;=>=C:4fagsD@<99;;>@;;632__:A?;4d5:e9B?>s`^k<;q9868:;DF=77EyxphfhhiigeeaWSPJGHPTSUY\WYWZ^]`]WY[]TUWXYZZVWZWWVWUadYWQMLMMJKPKMPTWYge[WWVQW[^^ZYMMPJOLQNSSPKJHx]srv|PQQOKJmyzLKMQRMJNSLw~xoXuKKo|y|YULOLQPRQMNV[b[RPSTOKGzqkuAELNKFDDv^wEA4\YHXJMMGHQQAys?P[SQNONtqnnzzwps>=>;CGIIzi\Zcx=;@@|{|opmjiegcch][YQT]QPWPWZOQUhpfdZT\DAa26AD9?FF?;;ob^Y]ZSWjaa78\WTOORSPNEGFXYU^2669:jb[WTLFLCE?8CCACGGDQ\^455aVVbVRONMJEEFNOXZ^\X\345_LQ[\Z[\a_leMJMEE?S\KG89CELLFPIF85X[`U[Q@XSU[VYXT]TVPTLLOT\]V_0_622664567511021\VT005;>;755;74776534^TQJIHDCEE:8KOLE?@A:A=BDOMQSNIAb[:=7BKDCJHWPV[TJXLI>CLILPTSPSQUTRTNHR^a77\b;4235^\.6940]_3_bceZVQPMKONRTXVSPLIPLJMSPLOIIHDHFKOZWNNSWPJR[]aHBLGHHGFED@@AAEHE[/DKFDBDB=A@@EBJRXE7;7;RYBC?C<9HFEEHD@==?=<^b5?5SIJYSc@=* +# $ '*92m651'*/"*/:539664=Y9?4->;#)#,  -1:'(4(  + _YV%Eq|D%NW0f~u  +  " ? $:>$J\NN6)" $''26$=G*I=2GW<"$.!*/1;# +     +   + + +   +          + !!  # ! ! !! ! "#!!$%%! %,010//,*-+')')!&&'6;>@=72,/14::79-%.8:788>CFDEDBEB>7>Q`pvy{se:*)*,,+,-.//,#!,+)'$(0013.3553332542/.++/,$'(*.0(02269?;94201348755:><82984.+,/005::CD*!@;9:<>;@5=@CCAD@>??A><:;8;983:A= ><>;::9:74445:;99:;:889<:987535532656@B@?G)(##78655<@BP=-!#%'),--,(&" """$)*-02354/($#$&'))+,/11/135556886641.-./4568;<8643456899;=;<<:888;;<<5..)& *+&*!#&"#'&!#%$4-+&(%# -,$+$#*&)%(! !)&#'",161,$" ",$$,+#(%&!/,% !')H#*)7+(!&*$-! (,3.+*)'&&$!1#*#'""!!"+(1!1 ! 1  !&./ )/!#))'/!"9!/7QjRqOBP`bdacc`b`^WVVRQPKBHMLMPPKNOLOIGEBCAA@A?<<=9:25:=6H&89@B@BADCD>=><:9640/32(',,+-+*%'$ "&'(&)"1 -*0:#%& **1()04!"FC@<=>>==;<<8/--)&&,./145354366941256/01135523554121;=541---.+-Z1-.1368BA7664168::99/V00WK,1WW/XX10\341-,+[PSPI5DCHKQV0/00-*OROOTSQO>JGGMY-S]NSM,-00,*.1.UVWNDJEJH?1CK++PAIQSMMN=PGD30)++..//--26;5/-01-*)F>9?$&),*''%<,=$')&1')'"$+-"<8)2,+H?=;8;;;67!#$$;3+)0=,',-01-+,,##$22?MDIC>289732.1221021/82.2/+-0-(($$$%&+*NJP8/,%HE(1/NGBCCD-#&2F=?GB3-+>CI+NEMA:8?HD?@DIAF>ETK@=BVDCEUM9@<5442/68+1'&/+&38@;58A#%F:AHI335+-,5-,(*4('&-46?(A75,600591>B8-8"%DA;<823--261,/537:8:>FI61+-$"B::846:969:B849>60#$,.3:514!!BDD>@>;9784491/.*,0)&+(-.')+4832,%&' "# 91.+/.)*3--,*)&%&'$"!+,'+40-+)$ $!" !!!##'--*('/'%&%##!!!%&*+.-*,-$&+*+,-0-21%$'!"(.$##"##$!#&*$)#)(',*,,(/((%(#"$&,+(**(&#-&%"$" !#%$  !"&%&(&#.,$#!*$)*(!*#"!'%&'('$&&))'(&"'/-',*)*))*+/**&%$"%#&'*('&$!&###&%#%!"!!"$*(%$')%c!'+*,% !" !  # -!$! ! !#%*!(* "!! !01 ($%-'*235321013.00320120.--,,-,/221.,,/,)(.,.0('#$&*+(&ځ~}||}}|}|}|}|}|}|}|}|}|{{}~~~~~} |||}}|}}||}}|}|||}|||} |||}}}|}~~}~ ~}~||}~|}~ ~|}~}~}||~}}}~||}}}~~~~~~~~~~}|}~}|||}}}~}}~~~~~|}~~| +}{|~||~|{z{|}~}~~~~}}~~~~~}|}|}||{|{|{|}䁄~ ~~~ ہʻɲ¶÷ӯ÷ѝ݀ȫȼ‹ЛdzݽɃƹߗ罢€ʿ᡽ۇȃ՛⅐Ԗ롁ܮ֣݅ϡиԕӔ驖ҏLJЃש󯩚݈Ŗ倈۬ڥǼɎζ߀ݝϴ߂ɠź󋅎ޗ}Ѯѩû׏ȷŵ²فѴͲĿտļԴǽڀ蕕ݘȾǼȸŽþƾȸǹŽ®ހý菨ɟ܇ǜա؂ƿžռӰֳр뉮˚œխȝ̔ôŽѺ֠ԧDzꋗҕܬИ폄ɾŽǽĽۀʖóζ򆈐䀈瀀³ν¿ȱɼ༘ǮɨƩIJ섄ـĹɐм턜ɾ徭űȲ¶ƼƏȴԴނߺJ@BDHIS_9_oAXXV\VUXVKPEUXn;==elh7_Z[Za_YU^X]bY\]ZYW[]`d586e27764678<97j48:;99CEHIGGG@;>>CEIMSPLD?=@>?@A?@B@>=<;<<=>?979:u::==?@@>=<><;<=B@?>=?E@=;:>@?AC=<@BCA=:;=>>BIOMHEDDB>?@?>@@?@@>=>>>?>===>?==ABA?@??CFEEHE;>=@FLCED@@A?CLGFCA=<<=<=?A=@C?D?>=?><;>=>:78;:6@CB==@=<=>DD=>B@<==E@B;:<<@8;ab76==@A=@7>@>;dc:b:i@:9::9efk_]g;iakm:qllj567999:=;:<===<<=;;;::=<;::A>rghWKNSbbk`bMWc]YVQ[006;==<;::740/_ZP]_59759942>-&A5B70/+*('%" "!1443,7BD7$!1().((*')'&&$"')&%#(!)""!#!"  #(, $#"!'$)1680C+8@<:?@4=44 + "91'"=1A&-**,*&(NUYQFK\JH;7M3[@ *%(%!;Te9<<.FPWW=1X/3D2.%6867}4LH/40Z3+WILZDj}L8hM[e`;UX=kYFazlpRW{V[\tspkhmSNJmkosSqufodؼwp{~Y{*;R_s~bZMZbPR#21AJUO^_NqmhEmDeUVVRXuFsdf\Nlolzpuxd0-/&",.!'1.13;/jhtgxuM*+*($!  !.*&!  %#& *6^[9Zg\yVWJMxwޣk{ɲgIO""# %! !$,-/05=FIOgjb}',"$#%&((&#'!'"!!'%)&%&#"'&(*')'($'()&%*)%(&#$!+,&"'&'+"& "$%%!$#''#&'$$% +)#*!"%"!"(+($ $$# )+.-($ !#(+,.-./+../03542/23/(("*-.**-.-.04121-0112210,(,.&(+**+-.+***,*,*+*,(')-.100/0,+(Q-,.001121,-39;=;864887=::7;45774>?=779=<;@84?54<=?==>@BFIHKNJFDCEH@?=AGEHHFHEFGKLFKVTWSEEPJJLLKMNMAeaIPNOZbelw~y|vuwzvWqxCE=GJIGFHNSVODFFHRUX\Z[_`\ba^ZZYORQONOOIKLOPQRY^a\\]VFJV`aa`^`_^^]]h_VYW[XWUWSUYUYY]km?Emhilmfd^`dhhikonjmohcfhgfjmoqotBC=Btjdlmfdfggejnpkt;d[`cdec_dbf^ZaaXV[hbZipg^acrBFC<6hbboqrg_S]gl9:@DD=CGMSTMB@CECGE=CGKPV\]XROKNMIJLJHIIMOTSSWX\]]\ZYVVU\YX\[Z\^\\XX[][YZ]]^_`_`ca^bdcde[HOVL779;mf[99:4bE:9DLA;;XAP=FEBXEJS?D,7ESA:5CR`n75ei8:3\R\4YYSHZTJFPJ:2..VGr>>:24),/>SJG@;D290MF=-"60+'%%%&%%?9>K)kH@@B@ABFZ8AFDJ>1I.F7ZT<_G=VA59>k?VnNBaz~i}|~vtux~zzvmscxzxslnqqope]\W\^a_YVhe`RahZafgpjaX\^_``]\]_[^aXXTKJGEKG=BB?>A;D=BCJ:8b69nn876=HLJ>9;9865564a0\4?r]l`CLWY8?<9q=OPSLhfts~kormeY\bZXYanipCH{rrdSP_aZWYY`YfacclrE|yPEUGkowjpzzrpff\]PRY`WGGUh}b]ehcj@FLyzpqlpb]gfqhaY\ZOLVZQRaibW\eo8d\WcZbOV3:><>EEA?<;jc_b\ZTXX]5jca_\SEBFC@IGQSW]ca59=9je^YTLLE@8@FBA>@DHFGHEB?:6AHHQQHA?`?NLFEF@1>HBBIKB><>=@:6\1<3`O?TU2?7<@?BDD@DDGGFEEGGMLDKSUVQDEMGPHKNL@d_FKGLgqp膓wT6;=$$%'%$$%*-0,$&%',.0300431466454-0/.,,.*+./48;787- &09::86878@:563632132474657A@$$9;=?@>>::=@>@ADC@CE>;=?=<7==:9;;97:<<7> 747::<:8?=?:576003975=>:876?%%"512<@A6/&,/2#%%"&')*+)# "!#$ %(*.1563,)#%&#$&(()'+.31046;;::7633398789888520169986::9:<::;=;**@Zdba`XWTJSR^W[_XO?VOLRNIIIJOLJLIFH>KPHFB?@@ABD942/578743=<<3:<48<:798;::646765952+$%##&"!"%&+0"'&)&0*4*%%7;875#)E>=?EEE?@=84/!&+,*02/049843154003853201697743554359;92-RW,.00,0>71168C=YbXW600:3^e8_SX/43^WOQN`UQHKQJMIE6BT2541,(?>GFUVIQPOUW.,+-KL-.4-,.O..,0-WTKN\zNE?@K>NO3DPM.VQQKJ,10&*+*/64.+05//1,(*1+(E?FFA%(*+*%9(.6(#"""$&+4%+0-"4&10)('NH;44832!'!! !<@$#@?3@:72490/.+&$9KG?803:87420/4-376001.212.*/-$$ "" &'JI=2,.<'HJ(++IG08;LBA75FJ@>C<;0:C5GFAD<>C:OKB9FTP?CIME<>>Q@FMJI@>B932219;7. +2)%E:=?:5..520.3;6;$(C>>H6,+43001040;666=>F&B@+#-%79>7?::21)*-/)%3A5/0-+-$*@C?><=2272;83-20)&)(#$.30-0362.'+%& !#!! 7301/.(+*-31//.(  $"((+,.+44/,*%%!!%   "!(/*!""++)(&&%"$$"%'.0.-*2.*-&((*.0.,+&'$%%&"%I'"! *$+"$/1..'#))..+)'+-(&'!$&&,)($&+.(%+)++)%# %",+!" !!"!!'3&#"#$&"),0#&&'!%#%$"''+(+'$&'$"*.-,*),()*+(((&%#$$%&'&'%"!$%$"""#"!$"!#"!!$$%$&#&$$)' !! ""$'!!!""""!&$!.&#! !# #$ -2(,)5753521031313/1.--0//0021.11+9(,*'''#$-*'ځ~}|}|}|}|}|}|}|}||{| +}~~~}}~~}|}}}||}|||}}}~}|||}}}~|}|}|}|}|}~~}}}|||}~}}~~~~}~~~||~~}}~~~}}||} }}~}~}~~~~}|}|}~}}~~}|}}|}~|}}~|{|{}|}~~~~~~~}~~}{}|}|}||{|{|{|||{{|}ր၃ ~~~~~}~ +߁ ʀ »ވ¯D*ׁ֔׀묺֑țΥˠׇŴ탒ɿЮ󇜪ΰËƯὨçۜ֠ւȽ׏႔ᆜ՞سڎ׫⬍պǼԨେ؂ɜɒи典ͳ¢ÁҒź֫βƶʯμȦ򧘖އÁҔ̾ɀŻĺȺȹľľýźɳû󌛟򍔍ۉ¿󆋉Ⱥƾ)о.º齱ꆎˬüᘆ̅ʁ󅀁񸔽ʢڂƓ쒇޹̂٢ʙۥ؜򠓌᳹׿ܲĺͲǀɽ½Ŀ쎡ꂏဘ狐ހɲ񋏉¸ýʸ͇Թſô˹˴あǺơЫ˻ʯ·½߂ƻǷٵ荔·ǬֵϽȻ¶暼Ёļſ݀¾ˤ˷ȒüĽꄇԆ+灍PHEJCJaq`WNSQUVYVUQOMJKQQ^:@>;kjkjUY^`^RS_`[m]^VUYeg^VY_hhg_`d3543678676559=784:@DGIJC<9?EGKHNPMIBA?>A?@?@B>;=>?B???==<;:;>@<98877=><<;;=;<>@BCC@@GFA99=;?DDHIKKIIHIECB@BBBCEA??A@??>?@@@BEBDECDDB@AC@@AB@BHDBCDFEBADDFIGEEEGEDDEDCCB@AA@>?@?BCBCCBAAEKJDDCCDEDCFGHIIFHGFFFGEDFGGFEDFD@??@CCC@BCCBCDDEEEHPMFCBGJDBA??><=??>B?==9;EFDDGIF@><<>D=BGFHIGIEEDFCB@BB;9?DB@99;@DBCBAB@??>?>==>?&=>AAA>=;<<<:89:<>?AC@<=kHh:;qnk69::5UW?>:;:;DBA?@>>==?BA;9>>:;<:88d8;:778@=;:;:;;964::gd\_?sKPj7h\JUhjbZW[Y\/29;;;:4&/VQY_1]25104599:8^FYSU4D-/'DC=5.$!!7#5862G+6*#%.('((''%+%((&"($&*&$#&  "!#!!!(""'**++$%)/;0"-( $!%%R=,.+,/,.-)JHEJ/FAA9I>4.%/-RMKHOH47GG:GAZI12%LV2@?%3163!d,FIQ_T*F+)G@SND~V^}3EontUU5Jh\JXfJ>O_kjpwn~teYmvlmxqmn}oezV3T)*V-OBfYprztl@W768?~OQZp{`ha}g?JIRcujioS}dd`".())":7*-00087Ai{hxX_R!/-)''!"50%#!%(&(& ")o9IP\cZvoKZnosif؁ked~sdcws}u|ޛ%! #"!%%")#)*)09=>MRccoi7$%!$%'&(&$#"&!"$#(''"$%#%+*%"%((*''%"%!!$!!$(''))'&$#!$(*'%'"&&#"$!&%-+$$!')*)-'')*,*0.+-/,%#"'+*%'*()+,**+/445504211,*)'-231024153151/.110313,(/)&"),(,.+')++(+-//,,,*+PFH,0.0./+.*$,212.)24/(L.66300125:::;;9::;4/-798737=?D:52-6:785338;@DEHILLIFECCBC@:@HECCFHKLMMPRRVTNKPUTQKJMUVUPPSSQWWW^bajslv}zvx|yKzFLEEGJLNNSRQPQLHGHIKTWZUWSQVZZY]YXQIMRRTSTSTRTUVW[YYWZR8?BQTRUUW[a`^]_^XVSMKSDPTZYYZ[`eop@sniehiigafihhjjkppnnjfggedijkplos@AAqnjhjkijovqtwA>;k_[`ifd`^c[V\^WZ_]bdh_[jj_dhkgcn9g\YWNOUYag8;:<@;:<=;sAJSVTUUSQNIC>@A@?BDGKSUNPONNOMLNLOMTRRSTWYYZ[]^_aaeknmkgca``_\\[^]\_^^`bacddc`OE;?96BB7fdgOgh]C?OT5;B9CIGIB@8+2]3>KXT@EMTRLFG?ZA.=H&;7TX;5:fTEV80>;2>9?C=978:AENH`R;@B?DP5;GdHdM]F),I(&$$$F>CGNTY/3,WURPLFC2;EB64XMD<>7[@Y.KSj\RQA]gnaryih}w{|~~~x~|yxwy}|riif[ZTR^`eh`YS`hicchjdcbdd^dgdhg`M^\WUUX_YYSSn<>AHHLLHBAA@?AIGFi:K?c6rg_@E@<<=D@q:rrm7i^^WYXJXY`cl;genl;T=\trdemq=gmbqwnhgba[YXQJPSQQTVWUZ^`c^`gaXT\_UUWX]bb^\ZXYWWWXURLILLMNUTSST\\[UVVRJPd_gh\LPQPPOPvwujglM`[TO|yOMMNOTYWTMMNFGMIQ~nbq}npmsuOFGNNFIPTVTPMTVRNMMCSVLHFD{{DJOLJBdh>FCECDLNLJV]MOWWSMFGkqhjs~{b`iGtimwBtx{trny|{muE}ohh;=pjyzqqxop~t{phvhspk~xgdrmd^YPNTbq`IQPNI]jbRL\N]8;E~g^_YPPWGMVYS@R[V\eKi{kpsxskikTicT_csZnpsx}kXea__fe\Y\]YWfe_pEExKHA|ovvzsmb]VGLTPQXWcntb[ddeinnFCw}xmddbTfsic^V\TXXW`_aREP7A=9^T[_NN45519

    @;<;ka^fZY][U]Tffc`YSLCECEMTSXQTVa6?A:jgeda]KG?FME;:;5@CJZKLI_X^X23`\TRNIIIMPPO^d^a354eccXRWNM^4WQXSDQ:G`XJC?<>A?A@GDCC=9:SQ3>>GKPKDEMPTZXVSOMEGJZQTRPYVVTTTSONM[e4:8342``X]052.3522\VUSMIVPMINTTPYTTQMLLJIDHZKJHKHHFINLEDHFKMTSQLIHLO@ADA>;;=;?A@ +CG;33676554/555:9mmjkjgf9?:khcdb`_^`hbeba`_bb^WWWYSQQSH:;GNq($#%!%05*$$('))-,+)('%%(%,2102(,.0.'(..-7,.**,11,)*.321-./ a!"!!  !$%$""%%" !"#!""#!!! ""!!#  !!  !!!"# !!##! !  $" !"#"!!"!"%#"#"#"!!   #"    !V"" !!!" !!!"!!!"""$(&!"%"  "! !$! ! "  " 5$4852$%1-3..)-///42122326/-+-,(+8$&.2/(+1/,(&& !$ "  + +   +   + +  + +  2 + + > + +       + ) +,! - +;F+ +)( F)  ! !#"#/!9 &"+ + ?yhMKgC^?41:! @/R).9C7+ [,"#2*! '#9&)+:)%  !:tyYV`IkgE:"! + +  + + +  + E'4EKLMbT)%$h;3'!'*8(D $+2%!)""$ELA-  +   +  +  + g  + + +       +   !! !#$"$ #! !!$"#"#  9/2"$%$!"%!"&'(#$'$:#-/)'%%&(/2341,+,/(##,/-+(,2480,(#)/.1/,/45:??CDGHEEELCDAC?8?GCBDFGKOONOQPUUKJRQPLHFKSRRONPNMRX[inl{V,G%)$$&''(&+-)&%&'(-/0/0.,0101644/*-/..-/01/012465535.$#/213236;:8:;:530+)/$.387877;=CB%;<;;>@?>;??=>@?ACCBC><>=:?==AE@BC"5226<::66:678/35488;65=;578996;3,*)$&*-02  ! =!&+-.//-,*'# ##"!#$&)./,,,+**)**(+,1102578676677889:;;?DEB>=<::;;989::9::9;=<>?>=:,$-+. -0,!&( ( )'!$''#"#!1"'!!%)$")0&-1.$$"'"!*.(&!#%-%(#%7, -' 2!,$&4&<.6$&.'.1-)&&$! "!'#% )$$(#49?7MES[K>?TVTNTYWW[YVWWROLQRNNOOOJOKIJLMROOD==;22.-67==72.7?@;::7895:;:@?<;98443-&+./0252046796:<8206612336::87644354421-,W-XOS./042234:::4442,1>:@A:bac\]12]LP\43_a322URHHVOQRPIUTOO>:=IH-<62/JEEQ/.OU..S/3620,,-OQN'(M-TO,2YOLK?8DW\J@B=BCNUQKJQL0**-+%&+-020.251---%C02*((%@@%),**$/0&HJ&'%FI$)*'$,3),12/-(&MH:>7589)+()/($#%'HCGICC=<<7:8.40/.,!&6G;:57547344+15/875/..5631++*)$!@@/.6F(@79=A"JJB=>GJ@LG@9C;C>&%?)($B:FD@@HQB@=74.$'(%#)(-4:402.-.45%#@EGA9664'5>853-3-,($*')#% /(*+! ##! 70.4,,.,(/)411/,)&""&*),''%*655441'#"&!~ "."%"/--(*+((&##"$'&&.0,-301+(+'%.*',+$%&#$&"  &",!"&#&,/+/+!(,10('($&'$!''(-*%#&+.,+,)))&+,-,*(%!"& /)" " !+&"#(%!!%%&++*)%$!##-(+('-)))(''&&%*.+,(*+'''$!)$"#'&$)''%###"" !-##!"!" "$$ "!%$(&%#!! "  !$  %"( "#"" $&$$# !%$ $ ! ! ).-('%&!8887633"0//210/..3/2220112/,/.-)(**$$&~}|}~~~~}|}|}|}|}|}||}|}}|}|{|}~}|}}|||}}}~|}||}|}|}|}||}|}~}}}||}}||}~}~.}|}||}}|||~~~~~~~~}~~}~}~~~~~~~}|{|~}}||}~~~~|}}}||}}|}~~}~~| +}}~~~|{|{|||{|}|}|}~ ~~~~~~}}~~~}}|}|}|}||{|{|{|||{|}ـہ + ~~}~~~~~ρ     泻߂ƾϸᆛ遀޺ӗÏɼ축׈͋པ܀ꁅꀄӶֲَǺи肕󈕚džıƩ׋̜ˢխ҈퓣ƥɴ䮨͚ئցƀÆƍ➱DžȔƂɌ߮ċ夅ܔڳ퉉ء¸Һðʆ͓댟уݾ˸ȶطų˽»쌚͂օĿ¿À˳ތŹŨ퀎ľǵŽиǾƸڒػǀž˺ε笈됡Э胼͑܏򇂃浿ãݼɽ϶ў뇽ɹ򏂧ƾͻħޔ҂Ԛƭ̮Ǟ֡ᶪȹƽµĿƲѱ튐Ȓ킉낊⺋聎񀑕ҲֶӼ㙅üĺ̸߂ĺϿݲ݇낀ҿꅟʼƷڀҾᴴաоٖۂɿψꄂ󂇎ѽIJ㿴ӽ󈕈򇁊¼ɾƽĜӲʜúº٥CMNKIGILT`COKMPTQTSKJIIKKPO\9kc7l8_\[aaeRSRO[ZYW_[^ggbaUYbZVY`^4Qac4fd584f5783a7<=>?===A?><::877:<>>==AAFD@A>>A??;>><==@CECDCB?<<>=;9:>@FHHKMLHEA@DGFDC?>=>=??>==>?@GICBFFCCDGFHFFEFIIGFFFEEEBABBAABAA??BACCDBBEECDGHGEEHGFHEEHMLHtHEDIGEECGHFFEDFEDACC@B@EFDC@AECCDCACIJKIGHKGHJHLIFEBB>=<?AB@@EHA<;BB@::<>@@??AA@B@@B@>>@B@>=@><8>?=??@DKE@@A@m^;da9?>`;?@;>>BB7CCAB@?=:898:7698;B?:9<:78<:68:=>6>8:22.13/+2=ADEILKD=6@CIJFHHLMGGHJMLNPLLNNQSLLROTSUOVVTQPTRSQXYYU`fhgkidgssxwHotFECHGHPNMTYSPRNHB@FLLHLPWUWY[XZYRXTROFAKSZ[ZUYTSTW^zbYX\RTSLXVTQUZ]_\`ZZ]\WQT\TEIOVWYY^acfhFffhaekihlopmpusoopia^WW`_O\gigemr;<>>@Bxunmotvqnst:=858ILDJMOLMNONNMONOLIHJGBDIJMKIRWXZYYYZZZ]\\[^][[\[[]]\]^chktuuthb_\]\_aa_aafhh`O?VCD7KK>fE>hjX`gh:<3:7UHNGBF<=N=EMUNNEP?9;85Z=/F52;H.2RZ5,SP;TG0@F9L[SRR/A2'0::G/-E2+44T8S6/&[44848:QBGB@TY]b69@28V`_aFMDLKI?;KX^JBZ]I3;8O-ZP_8G3Ik;,9(-DFYZbc]XSLKB56<6#GEMGIIKD4G=CJILB?C@D?u<8itljia`V[aha[MHJOM@F_lhYSB@N]blVbrn66`6A86h^Em\ipb^_]\XYWTVLKQX[\XQ\aaWQV`cfaebZTRQU_b`ZWTUXZUSSQKLMOOMKRZRQSMRNTZVR[^e_a[}OMPOSRuyxqxQzox~ABOc\]PNNQKKLLTXQTWUNKJMIKMKvwhkyy~m|}JH_LJPOPTQSMNNVOKMFxJSNHHGEHNNICx|@BCrxvDLWKHVVV]XN~{qjsw=EJJXRVPK?xrimisunsmm6i_^C_SW5T1=VLHFFLfvmhhgaVcb``XTe`UTTONN[bXRJEFDGEAAAztexyvdnwFxvqnnqr{nyn~w{fN}sfUXb_Zyyvk}z}orwytoegthsYix_d_bbb_XZmMMzzdRPREENafeXR;P_K_KDeb`M]RPQ]]cRN\U[]Lfgnmo~|zprwqd^b`A^]ddgTrE|kd`[_[YShbYX\e`fzHzqBsbfbi}|u]Udaa_VRRhkzsh^fbggeb[@Bl>Ckkejcawjd[\Z[V^g_X=6DY7DC9m`c[YY_[-9;AD;=>??:f^a\^akjVO^geb\XUNICFDIWYZWRS.:F7mnkljbVHDJME>9Zg;HgVVRBRZUO]42bYSMKHJOTOOYca89266hfbc\YNPcWPQO?=AOKOTNKEMJ\95FTRHWYW]if\8KNU4_RTSLQPMNMTc_UON52^[T\52^`^]\[234853422b][Y\\.0/22249=?:41^\YZWTPB<;MQQH@??>=?>A@B@<767Wf:>??BEHEERFKTY^\KGFDSHHKIX^[USQRRU`Yd7>5c1_a]\YZ2.1:213a\WRMIQRQMNTPNPSXRNMLKLLHWLNLRNKHIQLFIHISOX^TRMNIEGD@LJLICFDHGGJIQA@DF@??@>BC@A962`]X\VEJA:8<;:ACDB@B@?;<;85>>74795777434346:987(ngehij=<;86jfa`j8nlacbbjkik^][V\YRUSL8XJi ''%$#"$',!&$%'*)+*%%&%&%'%,3.1-,*-01(('%+++*1--22//(,0+*+.+%/./-0, U!    !$&$$$#!!!!#%$"!"$$!!!#!! !!##!$% !"#!##""#%%##"#"""   !=  ! "" ! !  "!! ! ! #$!! !" ""!!##$"!$%#$##%! !! !#$! ! ! $9&698331,.+)D0-,//01-,-'2-04//0/+)/.(.2! 2.*((+22.,,%" #"!   +   +   +     B +  +    +  + +  ( +  +.)(7 1" V$( +*$).(!)) 2% +CyY^ TNtBVF%F; ( +B5ICE7G#>))"&0  +;#<)$#.)7  UalFL88&3Iuf1'   + #!>%#XL4MeC)4%"G?.!&*A+LC/-7") % + +     + + + + +   + +  + +       + + "!$" "  "#%!#%#""!%""$##$ !##!!8;6=$$%#"%*+$"!! &&6! #0-,+)*-247-/,-45+-.32/+/113*5.0')(*.*(-8;?AFFGA;4=AGJFHEIIEGFGJMKPLNQNQSJJSLRQTMVTSMNPONNX\_amsunsvu;=>*7:<8<@>?BCC@AEDBCD=752498,8??=;?? #&'FFA@BDGEBB?!:2238=994555).56964546117.&#! (/*08$'#&')'''))**+*,+)()&##&'))'0246688898;;98987988::<>?GJKIA=<;;:;99::<::<>@B@:.#'!%*,.'+/0% #"!% &+%%'($ %,%!* !"#-&&%#+&#$()'*+, " "(+!0)'!&!($'%)$1 ##: #/0?=>A>?>@=>@9=?;9787468872/*++3/1341)(+,+)0#'+($"29"  ." %&(!"4617343-,'(*-(&  *20'%#*,0#-41))$<6BA7535432)).5774.7881/19:>:=841//17;85312462220+--SOVV0/..27013/3/272Q17:A:=;_JRVW\1XT031_^67^TOMNNNFIHCGTO1IBEF"$/>88/-.0*,-X,14/231,*NHHLK*,)+-TK-UMFG<=HHMUPN>HLLTLHN,R+G4/*,,+.,.+.-3.,,(EH)/,))J&$)-,)$HA? #%MNP@BA&*2&$..065.NFJNFB>;?=$''2-.+( >HHKJ?:<:A?;>73/++*!!!(!!4>;:;96/877820;6///,,,7=2,(%%$%" !=<5AAHEA6<@C%?@@==>BEGJEC;FNCG<>ACA?:9A:A.;D385999623C*,HD9,-0%&*8;7+&#)*Ɂ)2*,-317-*4.46,;7;:9BECB;@B>6255#0/368+>&C9420422-<5103858A&B:%=3706BFFBA@2-6452+)'35<;<<<;=?>=>=<@DA>?@?>>@>>:77799:<@@BA?B??@BDBCC?A@@AEDDA?><<>CEC?;:=DHKJHIHFCCDEFBCGEA@?@AA?BCA@FCBDCB@@???CHEDCCDCDFFEFFHHGGGIHGIMJDBBCAA@@??CBBCDEEDCGHGFFJMNHIDEGGECDIEDFKMOKJJGDEIFEGGGFEABGGIFBBABGCAAA@EDFFEEIFFLJIORKLKFEFBCCAA@AACAA?ACCCDB>DHJFFBBA?BA@?DFDGIC=;=<<=>@CCDACCAACDDCEIEFEFEBBFGE=@KABFAEY\RB=Apopkrprhjh77;9df<;@B@>>???=@ECDBB><:9:<;>@?:>>66;:<>==889:chp:<;?::li:?9569iV]h`a[^lm<=eagfe4587l888ligee_Wehigdd:=:77-FG1<0O@R/+0/2=%@0+@5!6(2Rv=/SQAOK6RjME@@YDdo[ghLB*!(-.;SFG{Uk\FFOOrzU\]XVZ^qEklUo|T|jiUZ+//.#*.+!-C@7548J;qH5G<5'.9ejmD31+)"$*$ )&! 2,9LI:;/759kTiqObxwO]SwwRWsfܤDzȂ-*&$1(!!-/014@GNfzmztS8*(&&'$'*''!!"$%"#$)($!!#')+)'!"(&$$ #&&$!$"))&'''(*+('$&"!&*)''')('(*(#  !#!%&+*(#*,-10/.-+/0-*$+),,''%#!!""!&.31+13334353443533.',12255864421/.14673/.(EG(" (.000-*--+)+OMDDM.+0/+-)1562.-&180&#-7/39>;8855,1168:=A??@CB>>>994.3.5:=<;<@67DEHEIKKH<67kALHJGILGCEILLOOLMNLHLQQPVYUWTYUPPPRSP\\N\]W_hjkjm_dkvvy~Golzs>BAEFHOOKGEGIKCCHLMOQRVUUWUTSQMLRLHFKOS[\]]WVUUU[X]XZZXUVTTVWTQUVVXWYWZ^a\WZTLKMTVZZX\ac`Rlmlnlqpprwxwssxookpkjmmhfc_cfiign=>@pnrvuurpoqrn\ktw==8nlnrwuupmgovm`WZWSRVaqy?:;>>kjmu9\nhW\f<;:98l<<<==>>:8:>DEGHFJLKFEGFHLJIHJJHIDBA6m?>?HKLORTRTSTTTVXTRQNSRQRQOPQNGY]^__```_^]\]`_`ejie[D?D>/PQEIND@><=BB@A>@?=H8NG`UZddd[H5EE=905A+0':7@)65679?71^6\F<2S.1U+A>>629<4(>.817=+870/2F45Wc426?@V73]b\A976<85A@PgFKINZZ|suwj}~}wxz~xvsliiX\qsvoldeoplliklomfgklgf[^ccb]ZX]]a_YY]^ZXTUVOJHMMKILNBRQLEACKNKF?>CE=MNGmXeLNG@=BAkko_UVbjw>lfikojpo]Vaiqqql^_UPR[egJ?e89g]6gM`]aBdlhc^[_^\_VXXW\[Y]\\YYZ]XTOS]kof^ZXTQRWW_`YUVVXWSPOQRQLJOQONQQRURRNLJOZ[\VOS\[a^Y\Vxzwt{~Jw|~>?c^KbSQTX`ZKG_YTVRN`f~nCLusrvm`^ngfWcb`^rHrofec\ZQYXdX_]`lv{o_xa\xqktkwNH~rsji^nh]^\ckC~qiommufT\dvsisoknf^j|mfaebVV^Xa2?>?RR/IB<<>?A>objqek9o_b]Zb7`WUSODEFLS]c^RQ`3B5fjkoj^VOMMG:=2GG1XUIdE=PJR]Z[22ZUPNKENRSTSXa87c865gfhb\ZUXZTMJ<@AIHLSPHFMDS21YQZRIQSV6=aWONP]WONMQ\UROMUWTSSZ8LTWY]b]W^]WX^00235454310/\[ZVWX/1048@A?631`]Z`ZSOLJGDNLBCC@>=GC8JE;858;7dd?<=GRLZdQHDKUXOOLKNGIKGNW^XWROPT6h7571a\\0[^\Y2S6<412^ZYURQTWUPGUTSRROPNLNJJQMKENHMMGGIOLEEIEKJNQPMKNHFDECLKIJGDCFIHMLO6EFGFGCFHIGHHDGQVFICEEJB>D@6<:=IFCCBBAACB>9b7]W2\YREV5T>>=CBBDFJH@><:=6/::76655465578898985hhfill87 9966plkmonk`_baefgi^\]\]\VQSRP_:i)$'(.+%!#$()'+()***)'&#%%))$))$',054302.*++)&'''+,*/.07050,**0,).,.,/00.-/    !%&$"""! "#! !###"#""!##$"#%#  "##"%! !!! !$" !!#$#"#"###$#%$$$'%!    j  ! "$$  ! #$%"!!!!!"###"""$#!! "  " " #""&$"%&!"" ! !! !!  !   !!!! !, # *,'4583878132,/4.-12000)-2.0,-31../-,120,)(*&.--+,,155021-+*#&#$X$#   +   +  + +  +  + + + +  a       + +  + + +  ( +, + $  +!*#6')!*8$,"3  " +7hvfrD0Z_zLYI85L&  W1D%#H0?B1&) !(%*%L""-   (+"!3eq.*2(KWT   05+#ZH0KV;1D8"D318;=.3+I "UF,"6+@5,,   + +   + + +  + N  + + + + + + + +   +    ! "$#$""""$%(%##!###%(''&# 43 +""#"!! !;:6;A%!$$!#$**&""$+"#,&(152..++"'%)+016458w;9324/.("($*3988:=43??B@EGHE:44e>NGHDFID@CEILNPMPOMJLPOOSUSTRWRQOMMOL\ZObcapw{wprhu!#"%%&++)&%&')$%'**+,-/..-,)*/+*(),042352212376844311122342144464677:;623/*-/349868;95-@@?A?CCBDGGGEDF@A?B?>@@><;9<@A?=> !?ACFDEDBAAA?3A@=5#&' $ %.&)010,!  "-+!&(&.(+)%*()& %'!!% 0"!*(",<%.?UW?#+ 2$"'#-+$%!! (2''$+21NH@CMD>NRPNKMMNILQQQOKTYXWVUVOTRPRMJINOOJIGA@A57GGHA?;@A??68:::64388=:668953021+(&))(&(+'.-& #()% )*$3$-'(#"147-''05> 40/.0/12'#*23332)-%##'+)++'."+$%!9A@<758645043476456744453.,17@B=8421/022993222431..010,,/0/.113521/,+.6773/297=<697ZW]\PVZWOV\VSXb\VOMGPIGDKNPT,UPDHG!(.0,/++)%D),,/11('KINOMOQ,**-*-1,APM=<73*""*$  (26969:24762460>8000+'..1/(%%""$#"%$$D>CJGCED:=EDE@@C99IBD>G:MQKF@B(==A?7@<@:80:<993301537?7=DE8**-+5+201+'&)0*'* 44'4++-/40(&60.2/+67D8%*76,5320<'<:77723-21917239?A;1A10A:5=8>,)G@?:72<910+/2"B;7=:=@8--/=>8E=<;>95:E<8265,.1)("" 8 61* ! 928;368120-1/**)'!!#%).1.((-157960+'%&#!#*'$/#!*%)/++)'&$# &()(')--1131.-,-0,&&!!$"#'&""'"%% %#&'(.)%$'.,('$&+&#$%((''(&&+,,.-).-))+))(&&&*,,/*'%##"$$ %$("$//#)&.3'!#(+')$$&"%'#&*/*(&..*))+*(#))*(&$!'&$%%"#!"&$"&!$#!""&$!!# $"$$$"!# #!!#! " #$(! !!#" ""!&) !!%!" &%" !!//+,-(!% 62115667767864./001334.-/.0/+)*+*0Ձ ~~~}~~~~~}}|||} +|||}}}|||}|}| +}}}|||}|}}|{|||{{|{|{|{|}~~~}|}}}| }}}|}~~}|}||{|}|}}|~~~~}}}|}}~~~} +|||}~}~}}~ ~~~}~~}}~~ ~~}}}~ ~}}}||~~}~}~}}}~~}~~~}|}}}||}}}~{|{|{|{|}}| }}}|}|}}}~~}~~|}|}|}||{|{|{|}~΁~~~~ ~~ ~~~~~~ԁ ĹźþȽ󂁂񂉁ʼꈖƖπΚՅ۸̣싉􁆌せˢ񁊫؊ӵڋぎ霐܎ƀב٤ᾫÛ噙ĵǛĭӓߦҷ݋ܓر직ῳ̈܅Þӵƺ䰀Ќԃ€ɸĵɳѼ藻լÀְ뒍ſȝ؜ܸŧݡ퇩τܭڹȴՄ¹ſ˻øα˿Āǻ򕓛󆔐¾żɽý˼պكô׫ɼ럇Ķ˯ܮԺي퀉ٿ缷҇䝄՘֏믱Ǻ׀Լ諿ÈǤ∞ўꪩȺህͿ툛ᤍϷǹ׉瑕թ󈚪׀璌ͶϰֺǺæέٽļùþ܅øϭô􊊒þ̈́튊ưЧǿȾíѲ턑˾žʺdzĿׂ퇛ɿŹǾΕĻ¸؇ՀQNKFNVUTQQSUQU`XV[\YTSLLGFTWPW[[VVXXUWbb[XVYZYTVTVQLQTe:799haXSSUVWW[d575ig6ib`567:D@=DHEDACGGHKLKKFA@AA?><;;:;@@=?D?>>@?=?B@<;::9@<=?>=>AABA@ACCCFEEEA@CABFDEEBBA?>BECHKHDBEHLNOMMIEEGIHHLHEDABBB@?CEIMIJHGEA@CC@@ADCDDEDDEDBDGGJHMRHA@?>??ACBCAACGGHDDGFHHCKIHGHCEIJJE@EFCHKLPPPOJFIGEEGHGFEBACEEC@BABDGDDECDDEBBCBABCGDEEGHGCDFGDECBDDDEGFABEDBBB:7HI?<DBBA=DO[]YG9e]nwqqnbgk666>mYm[l?>>@>pa;AA@=<@ABAGG@?89=<;<<:;989e69<=B59779:gPn@>?=?pKQc_^dabZhldkig`cgi|em665:666kafk9:;mk::icUbxr>@A>jQ_n597d`ca/38:95136688679768;>=:7677630ZV4]QI8M,E2?8%*$64<"'=.E0D+;A3.26;12K;55(15;T:91J*;dXMacP7\bYSFFJ(2).45:FM> '+9077(T`*?G68/((ULCIdGP'R`sS+;zYCSNt^chtPfX_KpxZSELv}ibg-,4RzmFVjIK@%#-.&_V~LMGkF]ihhfhW`[T;oW0=:PbQcPoqefk4.2-"'//*-ML=;:;-pk|bRy;FD9=@<73Yc&4,('$!).%$" +&&0=Q>XLM[0W>iWiTSLbymZFb^]ňl{>EpמptŒˀ0)) ($% ++03.10/1.125?EMSpv_TSK:.**((&%('''+,$&!)%"!#$! %' #$"!($"%-))*'#!()'!%" /,+.++'.-**&$ $#, %*,)('(/..-0')4610.-)(*'),//-/103354/441345477535520$$'13746882-((.4887883)'@)&(*&*00/0-2/*,/*)O?MML0+20?%/43/2'64($#,+).2:;/674((13:?A??@@;?ABA9:6612@DEFDE@4Y7AHFGIIGCDC?HNJHHMMJGAGKLKEJINGLPPPRX[\XWWRFJSNNV\\abiiuyypkquzyy|zi|b][UvBGDGPOMMIHGGINCJHEIUVUXQQQTRPOMNKEHITSSWWXXXWUSSTUHSKUUPlJSSTRUUSTWVQOVZ]][\QITWXUWVX]`iwnehjjnty|zuzvtwrsw{yutrsvspifeikejm:uh_dnohghnpq;?otBBhk8jonovsotom<>?l\^fhn{BCGBC@<>@DLRZdc^VJFB9ABBFJPRVTQRSNNLLFC@DEA>>;8;:flsvtA>wBCABCFHBDJIHBBIEEMAb?E?6=;@ILFCF?QUZX`=FJNXY]a^]]_a^`afkln^EALIMKNOPQUTPHHB7=EEBB>:8_ZTWLKE;/7<.<)4=432:@9;7)&(),,153.-IGEF]7<@4O<;X\JFSHG9=LL8:84]7=j5bZM?PlAB_;;N4,0>7S.(/C#P=497=LBCJgHCODz@PaaRj#+(&%C>%#$$&&Y^P6147W5:lI+PKG8FMEOhT[CRYpZ_V_Xiyymuhbeba\txw{}}~sourghrqrsz{{wypopwqwwyuhjoofdfcbd`^_`^__\XZa`ZZYUTTY]ZURNNNSLNLJKIKJFCMQKEAA:::JRSM@_bCGEGGFqAZlhfZblmxvoia`hnrsg:@mrto6a`gjkfeiklp8_UW4_J\\laqgba^[[]\b[RRXZXY\[XZWW[VOV\_bebTNNHJZ\`[RVVUVSTSOLNRM`[RNQUQNMLJJYdZQS\^]d`TKv}yxrxv|qbtqv{zqxvzLxAG4YvZPLLIIHBMQRKFGIHzQX[ZNPM]u_m~~vo}sn_epPIpLJIMSMSZPKKKIKIBAACPUSNMLJLBV]v}|{{JFnHMJW^\^iaNlijjSilkuABuirCR]TGyihnowxijsu{Cwb_ZUVX3jW[:97DMJITnmamjcaf`_^^]ZZRc_bUQORNJIEEFC~{BHIJD}{vvvmffqp}ynkoxvoXN}}zja^PlRLR~v{}rns}vmtrj`fjppfdfglld]]WUWXX]lbarUJFb_SVmZa]SM\Zcece:DlaUaYW[bWRP[X\ONFTR`VknzBx~zmg`^fdaZZciqbtpig`aWV\\X]Qf{mnfxl^hz]gB{LrxkoOlm~b_XX}EqlssxvjK_i}r_lopnswh\vqjgcd]V^YZgFAQOae6K<;C@8_^[b758/76<=>>=gk=nmd[jobSa8bXSRPKMMRR9d]\W[`;9gilmd[XTMHE,BT^TDOAQINFA@BK]_^][^ZSNFPXVTX[[86b6557e6jb]\[WRJF=?>DAMZRIIMEG[0YT`VA5AXbbX\WbZVRKRPO^YWVW[\^`ZU]KXZX[]VTYUQS][Y0432010/20/0][UV[1047<@?933220]WXWXTRONLGBCEAAGH]:?667=AF@:9<=FKJTYbSNOFOMP>CIGRXLQHVR^]KKW7e[[\\[[U\XYZ\0T19242]YXXSVTVTMJVXYYQPQMIGFHNMNHJJEFFGHHHECEGHDHFNQPNIGFIDDIJIGFFGEMMOV6BDHGMIJFHGFJGJFLHNMILKGCB86g?8:=DFKFC=AA??:^9bXg]WTDY65<@@B@ADFJE99:9;906>96645356658::9:86455hiljej84l8mmjkmkfaacddcd_^`__ZYZSQRJO(&$"',**(((*&(/*+.-.++'&$$)+&+++*)*,)+/2.+*,,+)+),'&))362-))*+*++.102/- ! F !$$%&$##"!""!$('$"#"$'(&&#""$%%&(%#$""##" ! !#$&%%$## !! !!!"%! !!!"$$$"%)#  """ !!# "!""!#$%%$""! "###"  "" !!!" !!"!  #! !! !" ! ! !"#"  "" ! !  #" !   " %*+*"1+39655.251&5(0.'! .10/.&14"&/-.2/.)/0.210,-.-6,2.)-/41..'/40.%.1++,)k" !      +  +  + + +  A   + + +    +  # (  +U2$2&%& %!2*, #>]{kt_W[zpW]I54"# +43>')$NNy-"&#""# %'9&"$ *!   +,1##"3[YnG@W)'("":9;@@==;@?> !:A&$246977;98;77!93587:A%%'#$" !!%)-2831-#!!$&()+,,--()''$" ! 5:?DC%$B$%%'(()&'+((%&(&$)#-"%'&##$#'&)"$&.26<989:<:;<>CAB6!!"&#&%$&)(&!"!" /)%+##! ! ,%#"*"    ,!#%%*"( # !+2-("&)!-&' "%$!*#7%6@;18 '/'-2!#&/'(#/2ESQ.2,742768642DIFHKOURLMVRRXYXTXTUSOQJFID<>GGIIMLKIKEEFKGMKPK@@EF>>?=<:8786588735;:765234773/-*,+.*+(&()+*'$+-'"%,/* 01##$$$#4+654,068>;72++0353./684,+0/.+,-0./&&&,#(%*7A=;;75456:3,+453254352252.277:<90,)$(3795.5432111.,.0V.;71.031V0/.X+)3=615:99?=4-[]VGYRONIHBHUVMQI5-*,**("B+-.,MI(*M++GN/367-/R.:SKMD6@JIEBJCLPO?59AP0+QTM>-*(,0+04,))+)*(#! #.11-++(("(0BIGFEFH+(OL9')&.337@;-RL<:99'542;#%=16".70'OC:9>>B@67<>A&@2/*$#$,"#!%573><7386443323.868.*)+*''$#$$CB#&&'H%IDDH@AB<89>=FC:L>?MJCC?1H.HIGA2,)$:KR2-W0EBEG@>?GD>C@:28=J=>:979>>735101435<79E2*';6-/?360*)2.32.,#;5+40-050.,1.2)+(-+4,88?"EHCEA;8429660.36;1AD<:9560022/3+7C;;6A709C.5$B#:=7:N,G9;H50**A%C=<@?DC=+14A<39;;<@C80C>;6474.41,.'$+*$$!/,'( 48 893/8:3)01,*('$%%((3-.+-.03782,+)%"" )-' $$"%$ %..,**,,&&!',*()-*,.43/00.+%"  $,'"#'# (&#*#+..'*'0**($)'#*'&%'()+,+&("*-++-)(+(%'+)(+*%&)*''((&&%$$!!#%0"""%$*+1'%' ('($#)-&)#,'-.$$).*.++*)&,*((($('()&%$$# (),+%$%$" "%$$!"# !!"""#" !!! !"#$" """!! ! $$%,!$!"#"!" "$"""#%$#"f$"% !!! !.1-5/,)!%568734557689541/121130.021-,-)&)%% ԁ~~}}~~~}}}~~}~~~}|||}}}||}}}||}}}|}|}|}|}|||}}| {{|||{{||{{{|{|||}|}~}|{||{{|{|{|||}|}}}|}|}|}~ }}}~~~}| +}~~}~}~~~}|} ~~}}~~~}~}||}~ }}~}}}~~}|}}}~|~}|{|{|{|{|}|}|{|}}}|}~~}}|||} +~~}}}~~|}|}||{|{|{|{|{|{|~À ~~~~~~~~~~~~   φп送򂍐Ƿĵ¬»􈕔ͶޱӒ¸֗􁈍ڸ̚ɀ㾀īķᰜדūǺ𬅐捀џ𧕄վѽƜѵ✲̠ˬߝ͓ˢఫɚǀ祜ѱǛ܏썘֍÷˼ÿˉƀ񀳂Ī郋с胇ЄꂓҸ򆂇䌱˥㿘߸ȧƴƣżɿ˾ºñ½ŴЉ½öƻŰÿ˿úɿƷՠĽݽ滋ڻ҃ٚڦ׳޼΍˼ǿ̼ʄ󜣬ߕꎣϥʾƻ򗳤˸ϯ̓ɽՑဂҲ񅁁㉗璜Բ􄁀ƸؼۂفȿƳȽ̻슆ζƴɼЅ쉌߀ƾǿµЅƿüͿűㅊ¿Ķ῾º󎓎򅅂ǾΪ͵􀙗ȻĻƇLƽıɿпՑ0AnfWUVY^Z^dZWYZX\VZ\RLMRe77bfe_]XURQS\^bdcilje`b7:;8=<=?BFA>@AGGLICHIDABBB@?>?>=<>=>>AACB@?AA>=>??>=<<;::;=?>=??<>@?BBBADDCEA=A@ABDEHGFFB>ABA@BGIHIHIOW]WPKKKFGJNKJFCAADCDA@>@A@ABEDDGEBB@>?>?BCDEFECCDGFFHNLKIJIHCBAAA@ADCAAA?DEGDCCADGDFHGDFGIHCGGCBFIIFEEILMIEHFGFDECA?ADEEGFCCBCDECDCB@@CCACFFGC@AC@BEEBCFHE@ADOMFFGGFDDDAA@>=??A>>>?><::>>@@A??BDEDDEFGGGFCCHGIHIECEGNIFFIFCEOZLHFCOJACISWXP@?Mtnkr=B;=?=;`j8BA?:<@AF@DA>;9:965679>9976:D?=:@?>9=7cllg6A<8ieeoni=:gXX[Z^bdmgheqkefi=CFofi54:964ilr:p8=qt9=@1.<<-0+. -+-+&()+&$'*&&"#!  !*)#$# #$7%,"$# !#"$%#%7*(-,+8(+*(NGGIN)OMK<(85" 0,I@?=-&7ncUcJF6BmkFQ>Oc7B6;=N2N6@']CE)zkE,@BDV1;38UPOFS=QPJ`\=B4U5RhxjwuK6fQppE,U_dBrpRIctswqhN&'hoa~[g`Wn[R\F&2)(C~tTrVdxRCCed@;A>;6x\DqGen`uQ]qvgm?25511535/%"54?CA0*Ol`uqbCNDFJUuO.PCyQ2:9d^NRIA"!#3)$ "  !"-+PQKB*X.3%=boP@Q^bMhVgG1:b_dd!'%-,+%,10122420021014;DNTYNA@>60-(&($$ !%,%% '!$"! !%$""$"%$ "'+)(**'"'$!"('#!$&,))*)((&)*% (&)*.%',.*%(.3(+.//0341,*+,...+)-.23477520356677966512''/215679872/.3-1478;71)"$).0%#&%"$&-0:871%###B)../,/0/*$(*00+$(7-00/*)..5)445?653>=??AAB9:57<<8DB>@??CDHDBD?<=;GHJHHFIKHJIFJFGHHF;CFBBFHEHKMLKOVSSSPGILHTQSNAN\Z`jlepsy|u|ztpkfqgf\IqEJKNUVUTOQX[_WOFKGOSONLKQTUVWTRWQNPNQOSVYXPSY[]X\WXYXUTSQPSUSPPRTQVZafia[YXTSSTUW]eiidcbjgdkmsz}@Bzwwspy}wvuimpoowymntn@wqpjffgdceels:kcoqGu=9mimjdigdejildfcgtDB@@A?u<@@<<<=AFECCEBGDBFE17BMOMLIHEHMRTTLNILH@CCAEA@FS\_^\]`abd`ekle_Qf-:LJ=A9=A<5$5h;V8]TKFZegjocQRRIG9KMPN>lU3,+00**'.8:844AF1B/-/1/-,?N=5Q19EGCEY,:7Q6-706;KUKTbh;jAWHZ7KA\VT5YZ_l_@1?^@6/YSAV332g56A:h=E>clZ@XZRmKGXKJ59D24-.%NVXO/H??==n5h8iZ[_eic]`jjfq:lhaabd^]Acdaifb_YVY_PB;PZWZYUUV\[^ZY[WWhf\SMEDLXYSONXXXTSPMKMPV[YTTPSTQMPOLT]`W]gb_h^Qvip~yhjpkvaLccJWdoqlnzx}}~~rCQ6ASPOLKJHBGRKJKNyHNRRKWQv[aejkdby}l_t{KHIIuISHNQLOMIKJOQJ{rIMPRRQROJIBcPCk|}{|FEDyPTUbb_ZOJKtrqusi}ACEtikDUYWL|G{vkjz}~mwyqqgd[UYZXFWT[8A>nhfg;31[g\<>DB@:o69pfU[i:hd]`_XTRVOV\VgebaZURh779AHNLQPGFaK@B>>AMLKUVZ^YUOQ\XRUW6854687:55hda]URSK=E@GLJNRWSPLLJO[SUUQJHKHKQGQP_[FIK_^KGNRR_`^cca\VX]_[ZZTTSKRQY[X56410\WY110_YXT[^0439>@A<534310//\_]YYRNJHEECBBA9+PC:8<=<;>?=;HGDMFPTIHBQGFBAMHEDONLMSXdVJVk6]TVVUXWTQV^\Z/:712`e[TQQSPNUPJJGTWOMJHHNJIKKIHGHGFFGDBEHJEFGLPQJJJHJJFJIHJEEEFOMNT2@KQWQKLJENFELOJHGNQKHLFCB3<>:7]EDMKCD??=<:=8cNef`KLY:7=A@@?@@DECA=<:878638767675676454669;89976jmokgjecceiljghhd_b__baaccbc\XZYSSUId !$#"#*//1.,($(-/0030+)&'&*((+!75**+-.-03-,+-+.,-.)&%'..22//-,)(),-.//0310--=!!!!!!##%&%%# "!!#%'&&$%).3/)%%&##%(&&$"!!$##! e""!$"  ""$#"! !#$"$(&%###"   !  !!  "  "! ! !! !!  !" ##! ! ! :!! ""#! ! !#! &%!!""!   1 !""" ""#!#%" ! %-#! '% &)+&)8437"3%0'6*/ +0/+/,-31.0+)-*.-/1./.20-.0!"4-.,/33450-(*/2,235830--! L   + +    + + +          %/  * + )6! +!%- !0 #"7!-XrnDA6N)H1 +!/) +  + %"!= *-Qx/1)*   )52# 8))$4"8p@E-G' + + +  +  + +   + 2 +  +  +    +  +! !$"""!$ #!"!"&&(%#"&!"%)+,'#!+('"0!$'$$%""%%+!&'%""$#) *()0)&'344689:34+-41,89599:@ACB>@;894BEHFDDFGFGHEHEDGHF@A@AGJCDG@#@4/7#-/0.-&#'%(,,././01233341,0.)!($+')497=HA="AD'&$%'($$%"'%#$# (***)*'&(,-,&('(%!! " #,5;:88<<<=:=BA;4*,#"-(*(#)/015/'&& )'!9*#)#$)$+-/ '$-$&$"&&*2)1$""*2 .6)+&$2$ &&(!(&"' *'!/ #=CGL,2/:EHPVR75BDGE@<30,1.58IOKPVTONKMSQSYVWYWURUQOOLKIGGDEEGFGNROLOKIIJJGDDEA>>;69=><;81.2.0642010465210//'!#-.,+*))'*+KF%(&&#""$%(''($#&((&((%!6-/,',14<;3/1050//&(*-.*))-.+20-((*+&$49:@<884135(+3032/0276855834@>60*#")251.046720.-,.0576130220-20WUU.28<5@D=8:666523631:64($''('&%&&IC##(*(IJKBIHB@=>;8:>BF;507995.2.4:82/',-?0.1.)1:2+.439,57B?:44411250060-.((&/1:15##$FDHIGAA9?021+49;2>NB@;253/3/127>:455821960,46+ >7##%"AE?=249#&DB<<<79645>>E9298?98497:><64540131)$1./'!!8621'-*#""9;5+.563.01-,*-'*/+2100,*(344432,*)""%"%&" +&&%%(*,.)($'.*'))432/,*+%" "$"&(+((&&%#(%'(%"#$"$("&&,+"#10$!#%$(('((*('*./--,))(#(&)*)*&'(+((%)+)**(*'%#! !+&$"!("%("#'## '$" (&&%(+0*#*30))('**'%(+*(,2,'$$%!"''## (($#"!"%"!#$##!##"!!! !# !!#%&!!""## ""!" %$]%*"%)%!"" '! #%!! "$"!&#"#*" &$!# !  3'552$#% 68:84621114652/1..0001012-,,,)(+&ց ~~~}~ ~}|}|}|}|}||}|}|{|}||}|}}}~~}| }~~~|}}||}}}| +}||}}}||}~} ~}}}~}||}|}}}~~}}~}~~~}}~}}}|}~}~~}}$~}}}|||~~~~}~}~~~|}}~~}|}}|||{|{|{|{{{|{|{|}}}|}}~}}|||}}}|}|||}~}|}}}~~~}}~~~|}||{|{|}~~~。~~~~~ +׀Ȁ߀ Ƶʺɷ¿텃򀂁烅§DŽּՋ㱀㱊пŘзªȢ闹ῘĀŴڤڕđ膹Ҧƥʴ㿲󑚇τӰ刲Ӷԟ鼵힁ႵؑҳеކŽۂ†⺲ƓȌoUZɇ$_āݣхƒ뼜ƈ˦ᙞ눏ȷ±ɴżƾʷ̰˿²䃪넃°Ւɻ充ĸȓπ胎سȼٌدĿεЊ榎ۣҳӽƒحԉᛐڃ؊Ѿߑ튚¤ôɷֽƹѾ˿žûм􈌌󅉅烂܀䘚⿻ĸ郌퀃ʐӰö݇䊬ӆҿ܄ɾƶ釂ʲ˾սنԻȾ¼Ȳθƹųȷ눁𔘊ԀȺ赳ׁ͹;ϲɅ熓ŹȿϽƶüǿʼТ˾ûƼýƂŻ섶ɸ⇅VK>9>=?@?=>=%>??>@@>=<<==@=<=?BECBEA=<=?CHGDFEhBCBB@AEMQPUaif]XRRQIGHHEDBBCBB?@C?=;><==AA?@CFEEFDB@BA>BCBBEGGHGHLKIEFGGDCECCBBBDDCAACEDCCDA?@FDDDEGEFDBDGEFIGDCGLJDEEGGCCA@>?@BBGHD@>?AFGBBA>>?EDBCAAB@AEHD?BBCGHJDDDEGCCCBBDGEBCA?@?;<><<<>>=>@BAA?>>?DACDCCHGDEBBDBBDJJCBIPFHPQNJPY[QJE@AIA??87k767<>:7=FK>?B:9996547;:<==87=E@@A@D>7<9f9889>EG?:9;fgjkugd[T]a_idcgfbijjfj9i5<975654df>hkfg699>ng_YZcm`\]y]e99hed5776;;98998::8:=:712575248:9872223121.1]]PI@]AT<0*'+7(5N>HHJ=@PS,]!)(71" !%&(*OKM@-05+PBEjujK~xb{@osr;Vnqiƛv{{ך"2110.#).'(04313423(,/.16AJIE;33/**++*)##% !&)*$#"" $#!/-)&"$ %*--,'"%$!&(-*)+'$$'.0,%&%'(')++*$*)",0-10/)''2,&482.3*-24,*20,.0348475368635334~74.)#+226:::9:9211-14//46663*$,04,1982/,.+.3574& "#"&-(*-.,#&-75,$/14:71..-$J#.8;883/4:=:8786:;<<373>6898=AHHHGA;=8GBGFJLOJDCGHLLLPLF?MNONNKEBMPUXRTPRTUTWWSWZ^bhcfhpy}}|{~Gg]y1yowgZ_vDMVVVQSXWWUNJNQVWY[ZSKLMQQQOJGIOF@9njtGVTWY[YZ_`]YXZ[UVSTSUUWUQRQRZ\][]\YUUMOPSTZ]iid[Z]gf]]\[beipw|ABA@klfciknmjihpxmo@?wljllh_^eirmiaokj}?svwqccd^joAKOVM1E)5HURRRSTTWWXZYYYRT]^_^[NGB@;:8XY`VLYZg@@CKMKIF>nDA=:@OONORSTTUTUWWZ]Z\_cea^S^Z]_ZUQMXZU[XVda]krrnhUJSKJ?=;jlfdd[LbX>b8A30251.33-3'AG41321/1,-./0/+83?8S<5<>AJTF\8-@.L`C7`4[0/^F@ITHEMM/U5-[N_;NJ;82a^>4C@V`]\6IRY59?66DB?kaCLWQKEDP220,(P[G;] +``U&0784m=FCB5HLYSFHTRebbTQv{ru|uKEX^Tm~{w}tfWfilnliimsuxz{wutlinsqgbabdccYPM[_f`[TNOSNOUUROZ^[WIFLOONLFDFFJNOKJKKLINPUMFx|CEFHHEEB>DGONTQPKGBLE?joqZZKjmtnfabgl9kflh^bZJbebca8:<73]8:8gbV27:SKYddff\SD?AC>bdUSRRPNZ\[Z\]ZPWdXONPRY^[VS\d[UXQMLLMMTVTTUQOLJKPQRVb_bfc_Z_R{omi|tj_^kvht}rqykfotKLXeYQMMLMJDEIQSGMMLLNlFabfnwmWkh_ihhuLWLJEJSJMELLEGLMURJEFT_YOONKJIGqq~EyFGLN\TZ\^\VJzCMHHuwwllsE]ULFr`jMq^kEqlpge^X`YZ[b^c=@CJJGJ?Rvxxll~sinf_Z[[b]b\X\[TLNSOQMIFBKOKHKPNFy~nrpipov|zyvtiorji{vs|q|{yNI|hqtvvsdsxvmbbb^hmiUlwjcXZ`\{l]VM[\aQOEOMGPNURNZrJo]aUqinkqfgaee\\^`YS\]\_TNPUUZoh=Fvet~rj^P]okcahY_mtqpie_Z[bY]_ca\N]Yfncc]\RrB?mIIDDOG}ldpwyyinjmmfgfdeodvwniakonais[jieabfgd]WMU[iQIY7CE>>><<8mkie5i4;AJB:mq::mhZ^_dckaX[ZZXWT\VI_^98cZMTa48d`]di`^_1>GHHVSYIJMGJKJD;9>@?@C;8542120/113b_]WQOKHDHFC>cCE>8=E8JHCKGHONEFJJCA@CEHJQSUPTT\_YV^e9YPVQTWPOVaaRZ98//11159aYTQOJLMJGGCJPOPMIIIHIJIHGDDFEFHDCFGIFJHLVOKOPJONKJIHNGEGGIGGT0DLNNLJGJDMIECGHNKSPKnGGA:?:>3DZ1PPWRKG8:?B9>9V]d7[MKb64:?;;B?@DA??;=947:9886896679655569<>886787775hgb`__cfafjgedceeid`blmjYXUVWXXYw.&!&(*274,+(,+(/./.-((%$),*--+))*,+++,*),-*-,+./,*0+,./..10/,)*++.02121-y  !%# "!"#"!!"#"!$)-*.8>;4/++*&$%%##!""!#!!! !!""#$#" !! !"$$%#$&%$!##"! !   !  N! ""!# ! !#$!!" ""! ! #! ""$ !"   ! "! !  ##!$ %$#!'*($! "%(6::5375431,2.)01#,G/.-.6.0+')++0-.01./0.,..*,.1-///,+)/4.--:,/-,+n           +< (  +      + 14; 0<58 +    1"#( !' (1 /5,!V}O?Ic`9<218I&Y>U4 !OEC;#5CI,5+ %?;-D% " 28$<5  +   +  &$'BAoR' 3)'9"BhKkk^\:=0e "!1CX$-DT    .]0 J$4?7 ',Y67"%*1+ + +  +   + + + + ~  + + +  + + + + + + + +  + + +  + ! !!! %#"#'$ " "" !$''&$!''! %&%&$""&% #()% !!%,) %&).,(&$#/"+/,,%")2522..,3255*.*4.145<>EGDC<574B?CB#HLKFBAFDFEEJKJPLE=INOMKH@=HLNTQQOSUTQ[bknoimx|ws7J;I"O@D8/4B&,0/-,-1130+*+.134441-/-1/0-)')-'"56?+6457:88:97545623122434322018:9699633.013358?<9478<<8744]9:>>=?CH??&$C;;<<:78:8;880879G 75855:20-7<<"#&%" "@BA<6532:>#)*/( &.,-.0001221+-2122/( ..4-(-2<'&',0,)($:$#'(*-22434344567679<<871757752.,35143/<<9BEFB>0'*##" "#"  ##*11./22&.,"/%!'('2**0"!%"#++&'#+*(+,."%&"!,& #)'#$ + ,& &/%/#)*" *m#A4:A31XLWIDHRUXWWZVNKC&&591AOLHNOGTUXQNLTX\\WXTTWXYRMB8ABEEECBCGILOTNMLJECGJGB=<=?>>3-+6:@;70*+/+-24/+5872)',(# $'*--)),,+P+./1)#;>"#$%%### #%,+0+*'%#)#!487*'1141-*,-00.0.*+',,**)'*'!'"2<=<<4-!(4/---**2554895.4:5/.-.585129<4360.+,,.43Z3241/,,-YX1^245?H)(1<3-+***'%G')JUVX13RJL)J,-R-P..UQZQA%987=C>,;;7<99C-5,+&*1F**$),'*,,1.)&%-52,,++*+)JI?@JJI'IDL('*)3,13543*A%+(MHQ(ECG<;>&51,(>3:-J@39&H<8:54.*-)(&)'( #! )@AC>?KD>A942237496354/((,*,(%""+-('',+&CGDFGCF;??9=AHGB@5@EC>66529=8+;D;8/152I<50+768.-'-,'/-20,0=+;15-?596<7957712352-1004.*++*-91%?6=@FHIB?3'.<:74705:?=I=<95237135450&.,794511&9!7%% !)&E95:?AA9=9<=9886595@A;81673,3=.988568:941(++6% & "  ;8410!&#8996//.23:2,-.0/.*/,#0.0,')031.261/0B"""!*&+"%&#$%$"!!''+,-,+*.-23431)),)"%#& #$%*&$"+1N*$$&('%%#(%&(" $""+',%## $#,)&)((++)-,*'%%#"$-..)'*)**&'(%--,,*&%$!#" 0".$!""%" &#!%(##$$! !#$%()+&(),/+)-1,&(&(*&$(--$&-*(%$ "%$!!#$#$$!"! ""#! " !  " "!#(#!#%"%#" ! $!!!#!!+!##"#!"%#! %"&%"!"#'''-(&%!# *13-% '441//-/0-36221133510.577,,+-ʀρ~~}|}|}|}|}}|}||}|{|}~}|}|||}}|}|}|}|~|~}}}~}}}~~}}}}~~~}|}|}~~}}~~~}||}~}|~~~ ~}~}||}~~~~}}~~~~|{|}}~~|||{||zzz{~z{||~~}z{|{|{|{|||}|}~(}}~}||}||}||}~}|}}~~~}|}}~~}~~~~~~}|{||{|{|}~~}~~~ ~}}~~}~~~܀ ϷͼȦ䀍⍅ڳԂѧלƶΛ̀¼˿ޘݑ뀫܍섂Оݵ狎Ï䡙〷𭤰Ьݨ򓌈եĿȡŅӰՊֱԃЭ܆Ź隄ڕȷ̀ޤ𘍌Ӈ։ѣʧ̬ݡ㜓Ѧِ֙΅Йֶ·ĺ¶ͻ憃νǺ̻ǷǾȿŀ³ 铡ѣʪㅝ¿¾욆®ݬúͮπ瓡ч̨ȉܶ瑂ڀݨ󐦡ųġ·Ͼ߂憆熒ʳ肀ʐϹ푎ٽπ·¬℃놁Źù򋙗ùȻɷѽǶƽſȀ¾ͼ݄Ջ쇉ʿ咉ΪӵºţɽµĻʲĸǾǵ˾»ùνĵpϾýЂƺzTRTMA:;BECGP^`ZZOLLKOSTSVYZVRNXUQQWVUXZXYXWYZYUTUZ\[^[Y^a__YX[\\]\Z[XWYY`ggfg775ej66674339=EFCDJOKECCFINLFBACGIEDAA@=?AABA?B@><>??A@?@?==;<=>?@@???AB?@AACB@>=@DFFEGGCCDEDFFHLRSU]fc\[YVZSROIEDpED?AAA?===@DFB@ACA?@DFFFEBFHGB>=?BFKJILKCCFGFCDEDDACEFEBEFDGHEFDAILLDEGJHFDEBAEHHHFHHDBFLJFEEDDBDDC@@@BDDCA@BA??DA>?AA@?B@ABCCE@BEDBDIJPKEFECBBCFGBDD?@AB@?>>?CBECBB>B:>@COJ=B@>:9:==>?976g:8jii8=?:7ai6698=ng^_a`fa\ejnik<:kjk8986778eee`ec9jljqqvrkc`a`QQXZfX9>7ihef5;<;999:9997774Z04556:;;:65312221342T\723PA::^P9T/GNP2IND=KQI@%HUO/.*5&:49=_2^HXJ_`cNP>Qfb6=,<@9:;?K49ruynZ[{EFD5*Z9FIY0/;:V-^R2E3&M6NJMa[TUOH5XRiJBN;Uop[ZPLjSdH`xvgizzCijft_gdKdK~lnK<*CB:$*'2-% IRZHzKDX]Gda|bTILVfLBPK:2HF`ZYZ09:?vɢ`.2-( .3.?EG+;qHĘ}{ǯqdv]Ym[W6Vf#$6?+.'%(I[VzhȽni{ӤNoJEe_ֈY}а{=550/ *)('+25-053+!*&'*,-6761,-(%&'(%!!#$%%"  "&'# ,*"+,'"&+#&#%'( " "**(''%$%&'+(***(()*( .*%$#*152+*(+4,19732-0/27785754684/55233135554543,(/06:;::9862..12242311443+)-*)(+00225.0--023,$!#$#(/153,051266750-,18:;8<<::7-21--100+2@EHG<257848?C;5?ACH@83AFBCHHDGA@@AACBEHCEpcGRSSRSUTNNPMTVXTROQRSXVR_`]_bdcajs{{s{|y^zXuJ]\^av?CGECIJJMRSPRYPWMRTTPKJHEHIIGKMNKIGCKSURRRTW\VY^_\\ZV[[]\[UTVY[\WVX_^Z\YSQPSSOUYZYXTVVOIKMNZYW_dkv>frvskkrpjnmimjoffsqthhnicbjk^eiigp;kxD@>:lllps=>=<<9A@>@AADLK@>>>vqmAMgqipdE=;=A7]m;?C@AA@AECHKQ[Z[Z[\\^[ZQI=9WfY`6L96js;@@FGEHJIIIHHCQONJILPQSUWVUXVYZXY\\\_`begihkgdeeeZWclkortutrjbZUUTNEBC?@::<>;laU`LCFEV3F68626464=OSnJ>DY358463000/24?:F17IO9/N[PTJRCOXEMccF;CT1U:CGaSTWRA?GPO*A?=G;:HN[YMKC99*-?@XAQZd64:DGONMIhED:O85>20,./V12X;1!F7#/=:iIpXK[WUca^fntcZEKGINMNNOD\\RPNKJIE}udv|K{CDAOSXXXZZUGtsbcg}zzvumx|xv{NODFveqy^hyDmifbfodXY^_[9??FEShc=Rbxicfitqidk^[[]]`\jb_ZWVSTSSPOH;aFHLMFJLC~|xw{xtklcb`wz|ymipooieierqlvyrHMvrkmrd{LHvlttroj^^]lga_gywldbd\ck``YWaWNWUQ|ELO@HRMVcnonk]fwnlqkiecuh^b_]RU[\^YMLRL1^a[jthl@Gwe]e[cx_Z]WV`ozqgj`X`]Y^XhhdWP\c^hbcWi~w=Ds?JMtjeezpm``bdfhfneaoifrndcpknjfpnfm_]_ffb\[SYLW\^X357R>?9jnhce6548@KL@8ln8mgf`aehhng``]WYYWVMJXS`?:]VX^a]VY]geea_U?7HGKC;\UZK?AB?=aVc83C_865`Ycba`4656<:=;5jfhhca\\XRJHISUSLNNJQS]^P@ETQTUUPNNOJLEHNUZROMYVNRVai<@9cecaecOWYQOJF@PX^\131[VSV^02^XZYUY_[39@AA?<:86320-/23ebZWSQLLGFE?S@47L]8E@C@=GIJCCGJKCDMKEEAACBIHLUWSWWble]Z[VUQNQLQMSUc^Z75/[22[150][URPPQNOIBCLJKQNPRPMJHMIEB@DDQHALJEGLOGHJMOQKLMgKIGGGIEFEFDNO7AISKLLHCEHFDAHKEJRPI@AAG@9573\FMMRROH=78CGC7P`_8aI19:<6;69@BB7=,5)NEC' $,N4N"EL'R1,57OU9?/)'+ %/6-? $')\T4czmyL[aK_TCEC-'%  e6%)xZ9Jd/M*!#1'3:Wm( 7-/&<$/(,7(;)3?A      + + + +  +  + + + +  +   +   #"$"!#"#"! !('%%'%$"#" !## $&'%"!!"## !!#"$#$ %(&"&*''+--+&""'//003201/"&'%#&'&&6;==1&,0104=A62:=>B:10=B@@DE@C>===>?@ADACocGSTSRQSQJIMIOSWUSPQRPUVUadchmmifpuiUXE#5AFD?>?=:AA>@<@;9:<:89>=48:=9:9@#356:< "!!""#%(& !"@=9*9=8<3%+2! !!!$#'),310//010--($'0*.#9@!##()'(+,+*(($.+,-,.2244645758767888::;>?@>ABA@??93:BDGHIIHFA7.*)($"&#$*3.1+#* $**3  $ ! '-$&!&!$#22")#!.$'*&!'(!"(%!%#).$&$&8$  &!(%( + +<%4+BK*3/.9:9>BE95$)EMJEF3>:NQRROOOLD@6=D>BJQSNNONOZ[ZZYPZXUQOQTSSRNG99:8577;;:951),/-0/-/.6632102-,+*!"')+'$"(-//0/,&&=18%$&@A#!'+.0)&(+*),)+*)%4&1*)&$$%)*'))#")8<>@?9/%(,/,*1/-.+*/6<:98305931/008=5-174-01,,.,.52US231/.-WPP6=6115758986:9`4dYU_RPOOI?=BA>==;44=J?POLJTJEQ-RG6ESSRR))340++,-*''I)M@LNW1XKHF(&).4.Q2-URMF*!/60/!,7BB85=H090(D-,-,+##+(*.,-+,%64.-,)()'GMA6BELQ,PEG$$"+-/10130(?<.14FCGED>BGDADK++&(F@3=LNC6:A$953/15.%%('$! !,)'0A757;C@<7=2113464?:730/,-..,+$,&())%(*$CEB?@EC@;=400BFFC=K:@?@=LI9<:AL<;AD=E(,AA;<>4B*)C;10/<9429CA<75617=543181+20/D'+-$)-(+27:9805?9:?=<86B:6965-./011*&)$-,'1=75%CB849.4MC511.,2=DDC>:>716303-881'&051622+4>: #7%(=:66CF;:5567997<52975=:4495401::5:22378832++(+-&& 8;72/''!7785512379<7220-.0+,(&,*..,,/1.+,/42211+!&#$ .+/' !1*1 ,,'-...13520.1/)$$%**+%&&#)(+)! '$&*+(''*')$$'*+&$#*'$&)//))*)--#**$$! &)-,(((&+(&'($(+(0.))''$$"! ()(! #%$ "$%"!&$!" !%#&*,'++/4/+*,**'%'%&"&&.,('')*'&$&'%&"# !&$%%$!"!%"  '"%# !$$ !""#%"#$#! !  %%"'"$#  ! "$"&&"","$&+*+%"%#)211"M4330-+0101322/12/23//.155.,-/0/*̀Ձ~~}||}|}|}|}~~}||}|}|||}||}}}~}|}|}|}|||}}|||}}}|}|}}|}}}|~~~~}}}~$~~|||}}~~}|}}~~~~}|}~}}|}|}~~}~~~~~~|~~~|~}~~| }~}}~}|{|{|}~}}}~}}}~}~~||~}}~}}}~~~~~}~~}|{||{|}~~ʁ~~~~~~ ~~~~~ˁ +ۀ ǵ˳½¾ƹ;wӶ㇖ͨ򌢚ײ灄ӅݾƷ􈠉ڀգϛʽȫŮ£Ҡşƴƒ΀Շπ۶򧼽ﰖƬ섊ɷɾ׉ʙ𗞽⃅Ͳ⟍؜ŋ寃Ն呋ކ͋ӭ⏒ύކɻހ²ۺǼ·¾ù˼ȹ¾ÿÿĽ¼½¿򁒗Мڐ©򃊋ʶҟ󇍊鿈Ч޻צνˋԺ℟޿ݖ˅ʀ銓րԅ܁䍞Ӊ™ÿý¸þ䋕Ң󍇊øľſŝ慅ٻף牚鋉֙ώ뉀ٓþ͸Ļ葋ʻļȴľ߼̽ռ͊ӹ醡ѺͶևʒÒڭ͇ႉ݋žϼȾö쀅ѽ˿¾鄎郊ûĄüǿÿ®ʶzβֺݐ⠤ѿRTY\RJG@MSQMMUX]OCFIJNTRNQRVSQQTUMKZZZXZVcb`_^\YVX_a`YZ]``a^XXY^_`cifd^TS`^j9756dbgi68874457ACCJLNKGDDKOQPNMGACFHCDEA@@@??=>>>=< +<==<;=A@B?@ +>><:=?BEAA@0BDEB@?BEEFFHGCBDFLNQW]\XVXWVZZUVU][RMFDDADDACA@?>XCC???@AA@CFFC?@ACDBA><<AHCABECCCB>?AEDEFFFDEEEDEHLPHAAA@>@?DECDC?@??=AB=>A@FC@BA@@BC?=?ESeVZ_UIJX_^VCsc>D>?>=@LWL@v^Lm?NI<9989:imdMRQh89<=8:>?<=;@@>:l9?g5CEB@=<>@AAB@=<9=7;;4@:hiheejkfcihoqmi7998::<:`i;5Q`ebchuECKnc499;;9d6hh7l]Y_d^Ydnm`]`li]b`kjg_dmlgcbd279868889:875104669;:73_4521031361OT1R30XRTMLI7WZ4:=;9=DABHVB]8I@D!619&$+,-062'-)'+*/,+*-+),,1%!%""!# #'.-*&%3IBAIZPJ`I&#"%$ (/++&(++)PLEGLKB@UB/%*?= )404)9:>=bd\QKkzjkTQ]]6:Yt[@sIO-eVDK%8-=25:542<.75:?3QG3JKWRXuXkdzG&OE@Jgz_^Kebr]ɍkXe]jSDUwS]bZdV\obsc3hKHhdjkhivreife\oB;@CCBEFGLPNKFC>9h^`Zhs89?IIGB<;9<m8EIHIA7`Ka8=@ABA@DDKSTVSRTY[NLMJ?5lb_=b]T^g7dXj<@BBsrutu>FDNMEEFIORUWWVXZ\]]ZZYY\\ZXZY\]^]_eededeggkmqutmd^[VNE9ZB>7HDNG6CA@FDDBA>:bTNJQ<+QSE_RTJGl[tko9B.BCD4T:C:50549C;0H7MAE<=*K8:M[J>11::<.9AJ`ILG:Vi7Vn5Q29D3N:D"+9<6C];A\9bXAW>:\-7Q4d3>;I3>*=D/5EJ\PJ9M-Kk>gehln~|~|zy{zp`YcXo}qQBJhz~}xurqs\oovyxz|~{}{|zvoosqosojeWS]_b__fpipkpidhec^^aaeecZWXT\^]RV_]YVSQNTUOQNNROONNOIEFEFBCBFHIIB?CIJMNMJTQIONKFJJNRRQOMQWSNONMMPSRGLNNOQSONNNIDJMDSA`=9>E^^eg^dfZVTRYYXVYWNPVWWZexqbXUWgaXUVVYZWSSRRNMOFDJONOTIOYWNLxY\XUZ\SRXbSRW}mmppvx{mheEqek|}}GLwOTFQRUX[OQRMNPLL}mtmm{xHLMKLtf{XEmY_HA[mx|y|JSPRME}FNNRQSOQMJJNMJLICLSRMMGFD}zn`}F|MOKIKHJOXSRTTQTMwxr\8buwzztlmsrmM^SCvogoKyomywldYfgjt?g>FFEDFm=7V=Zvvhp=CistigciU]acg`hb]XTTVYYQPOMHA>EB~AD{qvp{old[X[m}qmhljtsnatkc`e{przopu{f]bgtxQNyoqspkmib^hih[o|oqikg`gb^bb_\NNZ\JA[\QODQ`dVShni{nqbacaab\`ed`XWQS\XP;AADBFW`HA94^PX=9510-Z1203322`\YWVUNKHC;896fQIXcBE;@B@T;LLDAHKOHJLEAKHD0LQV\ebj5ia[VTSNQOLRRIP_394`ZY\a]]_0^\[WWWOMID@BDAJEPTTOMIJHFE>?EFFKIIDDLLJILNKMIIJJJGDDFLHFGHKOFBGNPNRHDFGABGJQCDQVG9@@B;96467DCDFHHFD;9CCD4;4WY[UND@DB@A;;97:9764548>>7445566997865665566fje^Y_ed_bfgedhacbbcfd^\[\]a]\T)*-0,&#(+)&(-.0)"%$$(+(%('*9,,'#,,++-)00--..+)+/00*+,./0/++,.,,0312/('/.20.22 !  J ! !"!! "" !""%'+155200/012./.53-*%"""$!"!!!  !"!!"##!"!!  "$$"#$$$" !!!  ! !! # ! $$#  "#  ! ! !!  ! ! !"#" ! !!!  !! ! !%(#   !! !(5*+.*#"*/-(4. %-%;0'6&$.2.%)*342./,*,.00,.,03.-*,&0///26$1+)--0)(*,((,21,,-31./,21-(+/0.+,*"        e    + !     +%" # G<6@"@h.  ,%+  ?-  1$"#" *Q2:@sn:>3P2Cd>D((18L< 1*CEY#"Cp; !'$#.9#&!(#'%# +'%% + +  %')%?F+1`SbF1=;^v~gbU>19d"#) + +  )(')*/*6G<:(* L%541-$ 5,H!+=-$?5.(C  +     +   +    W  + + +   + +   + ! $"$!"#!#"#)%%(''%"#"$&%$#" ! "'&#"&%&(*%" %(%%*+*..0,(!%$)-+584659,,61#$*+&'17;8-198;@<:9AGBKPOGKRUWSWSJLIRRBITOMWW]adeedeku{~_W4I4F9)(68<8)-*++()*,-.++176*)%&#%%$(''(&++)*)&'(+/,/)(%!$-011/00325787977468868578:7557=:=9774110),.-$(+"*)5:;<=AG(6AD@BAA:66=>;:?<7;88/8"""! $$$'+)&#"723.8="('%" 75?;<!7%%&%!, 0 ""##"$$'**,+**--%$# /,(+'',33/=%&&'CCGEC$)&./**+,02467779;;:97778866778:<<=<>ADBEFIJIC92/+&",#*#  0)(&*%&'"" #5+825"*"!!"#+$ # #)0&6(!)!(,"#'%-"$ $#$   !$,+9==@?OLKQKKLIKLNK@7045KYOD*$+@LQPQPNIFDD3AEJLMMPPTVYVXPVPOPRQMHGJFFHGCA6I3::=:;@D>ECGC@AB?::>>A@>76617;8/3<;62.,)/0+.-..,-..,($&$%$&$''('"#(,--+U+SHKOQ1/),,)&)(+/.-.+-2/+-+,,-0.%('&'((%##%"##'$23:;8>?4321343272-/3224=LE;312=9213254212./,,-((,/-/1S,054.-WWDN]9;969;328A648a`jiR][MKPQ@BEDGHKA<8#;3.TKNFKHG+-TER/4W*R/.166,,-)+-+M*D=DBYR?JGUS,//,NM,S@8J5)825#/:AEEG*0./,'F',,./.*/,,,..+,(#+0-+,('%GFE<4F&B-.+))&(*0,*,-+.*N@@9,3?AIJD<9=>8,80&I?948*GE@>D?71(..-42 "!.$.>=5> HJG>=5+'+:H@=:=A0.C<>@?;=84/7:91@H?>9;:58546755*+34*%64..#*-.&$38C4CH<@89996537<<82/+,0.)(-0*#&48/3%C=@>@85AK5162+.7>@;?B?6451+<9>-'&37079>?6;=85+:80477<41)'#!")*"$/334#!*(#988855334324222.+-,*)))0++/00.,)&',/-/220/ #"&#$-4$!.$+ 2( $!t33-.01,&&%%'.-(.(%((('*$%'-..24,('63,(%&,%&'/3 .+0$$'" ""#$(+')&)'&'&()(%++)*)(&"!.')7* !*&$!!%$&"$($%*$(+.401/-+*)+*''$''!$,)(()-*)****(*+%$" "&(($#!#" !!!%"" $""!#$"" ""!" "! !#$ !%'$'! ""(%)!" #$$$!!"#+-/+"140-+-0.+.12004121 /133/..0/200+̀Ɓ ~~~||}}}|}||}|}|}|}~}|}||}|}}~}|}}|}~}|}}|}|}}|||~~~~}~}~(~~}||~}~}~~~~~~}}|||}||}|}|~~|}~~ ~}|~ }}|||~~~}|}~ ~~~}|{|{|~~}~}|}||~~~}}}~~}}~~}}~}|||{|~ހ~~~~~ ~~ ~~~ǁȁ +Ӏ뀅 ȶĹļɾľ ᡷ􂆇κ怕ӫԮ둾»冔螿󐊚ẶՎܷ˖¢ǜ냞ΕݕÈ׾ْ쭐茬ӛ񭪌έ됗̙ͺȀ僊ܯϛƌ݊п͸ø麺ܲ۔ҼﴁŻصٗ曮Ϻ֗욢ր㦏߇ף򒔊ְܜͅ˂؃֧ЊͶʰ˰ֶڀı֨ͤɾǾǼŹ¾DZº˽Я됈ە׸ꆋǽ̾¼ₔ񋒋򂃂ǩ񎔘µНֿۈӰ֎ᚱߞܠÚܿǦ㭢㊢ڌ٧拌ɓܺ¼吩Ľù򇋄Ľо߿ںèƻՌ׀ʷþ׽íȯހĶ¸ĺºĻȵӶȀƯ𕒅􉍍õꀩٹ˿ͻƽ䰤Ƴۺ÷Ѿþ»ĩ·ƥpά܄8XVV[YRMLFMZZNT]^c][Y]@OOMUYNSSQKHPGZZYWSNXceiea`^``djaV]`ZVZdfdefkkaZUYZ`ebffljfgdj7889;64:>?EGGGHDBGHJJMMIIECABCDCCCDA@@>>==>>@=<<>???BBAA?@==<<>B>?A?@?ACCDHHEDCCDGFGGFDGLTZ][Z\`ZW[ba^U[_c_POI@AB??>>??>???>>?@A@A#??CBEEBDCB@@AA@EHGHIKKHEB?>?ABBDDEDB@ADCC>DC@ABAGCFIDO?@HHGGHJMBQJDBCCCEHHCBA@@?A@@@>>?=>>@?AC@@CDCDDGHBDEA@A@=>AD@AFC=?BFDCEPFCCDEIICCDDB@?CHFGFABBABIGEEFBABCDCDEBB?@BA???CGA?EHB??IQWS?;?CA@>:8:::89Bm4==;775j75d4;::9:;>?>>?>=48pa[S^cil6fi479:72f6:=:hb]]ba]_hcgheb]d^`gllmkjjdffec2489998889942288875655872/144324[;O-73SXYMKM>:3WUJ96:<9r[p7);'H8T\UwepwOdwge}iTbERmMmZY`|_earEVo~Y58@8M"'+%$+=xb`Oqx~_Ncc{Pm~?`sl{hCdh_hdŅL=~W79>:;@AGEJFD[GWe^Pd84;)?>9Y8%%#gQLJ($(((0(&$ &&'!!-4< 8'('_rW|y_QZd율ϐxio1Xtԧ}hʤÇW222//,' !%+/0('### '*(+--))&(*)$)(%(&%"$""! !% %'%!#&%+&%(- '"#%'-/0-3.('+02220--)+)$"##(./-)03.-0**+133+-0.-0,'(645547779741232256642474345113224568<=>>=<8,'),+%'-27642.14*+7*--)',315367:92+-0015.%$()&.1,5679724105644;6124446::431168;:;78>@@?BBBHJCGIC><9:;:<@AABEHIIMORPQOSJJMPIPPQSOMNRSTRQRQRSVWUZZ\XZ^\Z\^aacgaX_]_b[RQTWTHITUPTRXKB]dinln?K>trruwsnjeba`bezCB><;hlego;?@EFBA?B>?B?ACF@==<^jhfr::@>??@CHIJF@BCCCEFEB@?DHMOPPOPNJG@9@B?:k;748;9;8dOZomkknjqmiipw@@|BDCCGGOPSWTTUUZZ[]^[ZYXWWVUTXXXSTNXYUX]__cglujcmle`fjfwkb^HDWZVOKNNHGHBC@B@GDCDEB~ABaA9ENVZ]SOUB`+U]hKcsq^4T@G4MP96SDF?:HQHP@6&J@;GZR6G\BKQ$ >6FJPeiVMWf_S\WTWUXZ[QPQT[TU^\WSSSTZ[WXYUUWTSOIJKOIHRJOKLR^`[_ZRVX^WRw{yxehvu{xlkhospRi{~~~TKJLRMab_RNOTQRKxcRNPEdiZMU^GyufoiERKCDObu}CIRLMIHMSQNNZYXRNJGFCEOUURNMJGDn_ewhWXRKIQSVTTRWQH=Hwy~|{x}~rf^hMFUHEuimrjBIzzvhohZeu@MQTSRPNJA=6YsWI_9:?:DDEHPTY24a_2;56766:97;?;86ga`bXOHRIEP`:ITURVWU\J;H][WUY_\VQbSLK]^VJE>ONVP^gfnse`:bE?;FGXWSMNVNOg1284_WWST\61/ZZYXY`434779==>;;642000121651[Z\^YTPRPI?<:74AG7FBLE:=GEIKDBFLKQKKIECK?LNLQZ[]ag74a\WTdLLJNSSONa531a`\a]X]^^]__]^VMLIFFEDCCINFJKGHFIFAB@?DSIGBDGILIJKNLKLJHIHFEEFKLJLPUTEHHOPNIIJHHCGNP>FRpPB5@A=:<84A5]@BA@@DC@?>;89678775559;<<886444688788786gcf6h5hc`\_]_]acacikffbbdecbada][Y\W,*+.0+&&#'//)-3585323"*(&--%)+*&#' +**)(%+0.1//.,..040(-./00,)+0/./0330,)+-/0.323300-1  !.!$%$"!"##$$"#'.35323631279714586+*& " !   !!"!!  ""#" !! ! #%'&%# !!!   # "%! !!"##!  !  !!"!"!#%! ! #! " !&  ##  "!!! ""!8! ""%*+ '6)+2##3/1410210.!5 #/+>4.+&+-02..--,('++*+/-0/--,1-,/111./0.--,* "     + +      1        + $c5"04,#A:I  !7*$* 4 !,"( #9LaQOc:79D8:M>I).2  @J41E+:GI3'34<%4(+#4&)@1!)23'H!&GG-# 3) +-" "'&/0#)?>;,=!$35)8! =' % + + +  7Z79 $0$?"-,N;>&&5''5) 2-/8T?A!$2.J" 4) "-,8 + + + +  + +   +  + + + + +   + +  !"  #%%&#!"!!$''%""%$#"$"!"#$%$#$%'*)&''#"#!# $'+)"#$&)!  $ ),/0.(*'%*-*+2,'),.--36.*'&),/11-07::9?BCEE?CC>8DIKKIGEFCCA?ELWLJPOOKMNOQNKIHHDA8EKDOY^dfijc^gw{},qv>3L.'5+?<0=#%'&''*,**,.,*+-('#6  !! "$8'*++.//--,/))),)/012.-.12432201366488968<:88:==>@;5;8792-,''--(**/'"5:=@@A%* ?AADC@@>;;:;<=I$ <  46259!!$$! "!1)%!#).005!#$% !+555;  !!#%%%# "##$$%$! #&()*)*)&%!!5.#*;?<>B@BA>?AH'(I')('('-/0634638899978886766577512/7947<<;<>AG>7=<98:=>K@64'"/2.)'((#"#   > ) $**+$$*,'0-#/79.&( !*,$&+-((*%&3-)11-*  (!!! ("#'#  $#) &)#&/)/*&)40C]YA?7=IKJDHMHINPH<*-#7BB@@ELJPTSTOKNNKFBBKRQPOY\YWX\[WXTKIHGECBDC>BA?CHCKICA?9:;:98;;:7;=>B=<<845884135852/10/-*&*12-,*%!9>F%GC''# <659'+)KLOUR()-372&D&'')+,,,-,,-,///-,*&%%&%#&/-,'$&'%$)-*"&('(%&  . (7:,*3<5174232465//.13./77211/14634401200+'(*/*O*PU2VTRJ*-+,XYVL\4=>;>9268=8j4aeda^`TFIIOG>?HGLICA=@@;*=VUQOTDEJFER3+,QR+0+::7,**.-0*OQC6,,,(=@3+26MQ+ENOC9><&%% !)5@EC%L+1,,))G+0+)*4530/,*(P&&-00/,+*('JJ:/3>2F22/)',.0--+.)#(KBCGEDDHJKB925B*'O2('B99<6#*DFD891'.8 *+,+,*'$,7=8=>6(FG>9:<741-,292*+/-*(GECAFII'D=>ADDCFA900--%F=5-9A=K*C?<9=?;77=5;A;8:<@=8A<:3.=;3>183:;706981065110("'**+%(25:>C;=?<644188625:558: *63-986C>;1.2.56?89<:7//7:;=:B<5/.0/0183)'!!"!',0 %!!1337(&'! <635543201041+--+--(-134*00+&*'''00-/40,)$ /,9-#2"! "#%+. 3//1-'")#!'."))'+,+,!$0.+,/30.*5,&'23.&#%#%!).-04/)*&&###)#"/+((''*()(((*))-.)'$&%" $$%"" "$! "%#'#%$ #&'&(.-..0.-*)5&%#$'(&",+,,0-*+*))*--.+$$" !!! "& ""!"!"  ("! !##"#"$#"#"!!!  ##"#%'( !!%&$""#!" !$&$$!,#&)""0+%,!+/./020/-.,-+,/./3522/01210031/-,-րҁ~~}|}| +}||}}}||}}|}|}|}|}~~~|}}}|}||}}~~}||}|}|||{{|||}~~~~~~~~~}}}~~~~}|||}|}|||~}~~~~|}~ ~~~}~~~~|}}}~~~}||}|}|||}}|{|{{{|}~} ||}}~~}~~}~~~~}~}~~~~}|||~ڀс~ }ʼĸͷ²m􄉈ҏ탄냃Լӎ۳ƯᰅўǩЀѽզ⌔̛ϒ񆜫̎ڃ䯇𶋍֎ƛր޽إލĎ橮ؾ쿙؄˺Ơۡ޵戴ɹʯ򗛇DZјùٰڊû¹ĸ윞ۍ򼾂᳑IJԾČñë׷ʀ˟ފ֡جǓڄÊߐͯܒψ̜Ĩ̀Ǣëۻҷż͸Űÿ®ŽɿѾ®̰úɴ»Ƽƪ䁈牍΅곾;򀇊¼ž״Ľ˨畄ޡ٦ͺȦف𣀷徽ۅ莉‘ƼεŠܜſĺԈ󀄎ՒиϽ߁ɳвƆ큛䟫倄Ʒ櫟ۏûꇅչѾƿӻݾĽÿijȻǾʶ»иDzҰ鈊̸݆ᷰƾ킂ϼα橧턔޵æ폖ե猕Ƽɶ̿ķտ㐝ò큁ʼĿ͞ƿЩΦ萘ʼꒌه ӀYZ\XVRMSRLHMOT[]\XPOPMHEMGc6\ZXJFLRVYVUSST[k<;jfffa`ee]\_a`[[TWX_hgl8if`[XXY^Wb`fk6:97;?=@EKIEFGFEDFLMJFCABDCABC@??>>?@@=><==?A@??>?>@@A??@A><<;<@EDCEEDA??@@??>>@@?>CA@CDFFIFEDBAABFGIIIJJHEAABDDEDECCBCC@EB=|?A??@DEFLKI>8EGHFDEECEEEA?@CGJIDABBCCCBB@B??>@ACA@ABBBDCDCFGCDCCDAA@CCCAADD<>AB?@DFFF@>>=CAADEFFBBDCCCA@@ADEEFGHFCCDFEGEBCEEDNBAAEBDJFF@BACRNABC@CD>9k>CHL?Udo9;;;95_7:::9:;<;99:88<<>;<;:;=97GZY9@??CDCEAACBFF>A=6;EJ>ICA=>;:=B=;;8;;<=;=<<<;;;6hb^gs\]eigfgd_545b^76;7ff8;i7lhejliljbR^dgeo@8mfcccefbe5988868:76Z674455P6I71/3541X[U;QV3/WVPF>7PVM8*<)##'*))1;4*2DF4=>*4 %**$3*3#+3"1-.(%&,'.+/+$&*,,-%G"'#!!#"!!")'& E+/)1,FLN7T$!  % /2*(()OBIPHHL)LCA8OiP`cdQ~qm\qzOV~^QIBP>s9 '*Kefz|GrRCkYudXbubq^aBqMSrQd]nw~hx|zu3Df=HJJM`PUMfiQ@RHKFE>.0>#,H%D1/'9+,,+*),(&$&%.( )% !)%Qr_cD<^ˣ|]jf`wlmΆΧF521.**'' ("%+*((,+ (+*++'(+''(&%+*)*%!((&!$"')(("'$%("$('#*! #$'"!',.20,/(%(+014104)+,'#!%&$)+$,**&*'+,,)(/-14530$!%.3204786/17.377676753621-(/578957>?:=?<;::1,)/366-32689567+0+*1.5,)*2037;96),/-/7=;6,$8*),86-,/25533?GB52HC83;;42;@?9;6c26?964,71-9BABFHJFC=?IKJHIFHIJNLB8?CINLFLGHHCMJGKNMGQQRLFIG@>MXUUbc_[WYW`spsvwxdQk^L]K=Un:CHGDE>CHJJKIFDAh`o>D@9;sj?DBB><`4:=?A@E?8;@7q;l9=><=:=>BAAFD9EJ=HRUXY[\^`__`beb`a^`_^^_N9L_\mslkqqrtvzvCCxty=CC@AHWOvFNRPPTWZXYY[ZZ]\YYXWVRUUALLJLOIEITU<4GSNHbhamy~z~{tz|igqoX?yBJMML>[=PZQZcjlo?ED2SB^9bh[CCMSMF.7;K[KTa6JKO96.DJF;L/Qbge[5b3`4:fUH375BHQ9E@37---Il;PCI^_W_icNk[kfffqmyuyZIaigigKJhUbuv}{xuu}xu~|xwz|}||zsljknmjmigmnpzxu~|{xdifee__Z^Z]dg\TWb^TJUONV]ZTSVWXXRX]YUI8^RRLJHr~yxtnmjikt~{~EHMKNOKJMLHGEIGGNPPPOMNKJIJIFJLMPRSYZ\WRNNGEIIQWVYWRUUX[\Y`[[ba`VcX;DCahgNWe]\`\SVZ_]ZOLZRX\WZ]URQPQTUUSNV]YUUPEJJOTMTHJwy^ZPUUWZV_VPpmyF=Pyuwweelv`E{~GKQXFH@BV][oaTTZVTQYJt|iV@HCcRj?TXRQpvlScoBkbjfzFCILNPPPQKERTNABSUNIEDIKJFFNPSTRKJGGiS[cs>UUUWSTOSQQPOKDlJjhwrhj{zfYgrTc`OJJztqywoRohgk;=DPXSPQSNOOOE=>JIJe]OCMe_H:I5Xppl_Zkle[adef]XZ`YQJJKJz|JFHEyuuttzwlhnifruijdoomdqsgmnW]nwrys[]tqpcprqmm}}xspqnhd[i`ys_k~}sbkoxlduvjmZZUUY^OY^cSQfbfhsowouke\Qgi_``gbbXa`ZWOP=62EOXjh`]qw|lywnh]`bU`aj\epbfjsB|omdY]ahc]eYZW`^jPV^jp~}qFF8]}a[enuvzq\S`gnCmifpniW`nyG|ulbfdYUVbbYVPMUUQnoajc736ETb9m007:CRRJIGB>{ul`aTX[ah^]a\VXVU]YNTcq>VNMINWeAB]6>978bP<9=FFS:CH@Zg=?@=@EGJBLS\cbK:W579:898719;;:;;jc_WRQRKKQWcXRVQZTORRWU[fedehWPNTOQPVPMFEEFhYL]acVSYRklWOKMPWTOKQXV][]]42_^YT\\512ZYXWX[400037;9:;;:995320.,132/Z[YXWRVWZLB=;?:2V;>CBIFIDEGAC?FHQHHLIK?CCKFEGCFHGHJMMLKMLIHEEIFFGNHJZWV?KOORNLJNKIGFMS>KPO=><9/3S:8a?N5g:>@;@;C9C@<<=<;:98897456;8786.456887765668975fhkgpkb][dcde\`mhkfb`bfhca`_]\V%,-.,,*&*,'%()+002.()*)%#)#3-.-%"$')+)?(+62112..01-./0/+,()*,12310/-+++.)//24D $(%! ##%$"#$*1434643:9658742.2.*&""!  "*##"  !!! ! !"""%##$!! !#$%%%$%$!! ! !  !#%$"! "! @! ! "!""$$!! "!  "# !!!!!" !  !   ""! '&!!!2#+23-#.0.-,4;**/1.//,(**--/0--/21220',./-11.,**++)+!]"!    + +    \(       +$%:VKT  +H- ! (0"$   +/)3 0"&92Dpdd@>-BA?Q;D?!$3#95B@EA$D%,E:&&(4:9#8ET@#%?"(+E0%0)*6--# &$#%.A+) DH.<%"/((&&  !,1157F +WDkV&%&&###&9N8.,46++5:857.M'+5.--(4-)5?<<@CDA?8;FHGEDBEDGLH>5>@GLHCHDFF@JFDHKIBLLMHDDE=:HUTTbggfbd`fwv{||sN3=9.;/$:L++*'%&"%'())'''&;5>#&" @;#BA##'&('(**..11130-/+*..'.,*+**,*/0/01357786:;;;89:::5>FHC:7;866,33458526775387.6>><@AB$$;A@>92:87578;@ "! ,!!  #" /)%,-,/*($&+.%-1 $ 479"#!! ! "  ##*/./012563246212135201(!((6A<<>@AACIH)*HFE$&'$%(1.=$+///247678998::98765333&++()*&!$,.$0,&;C>DHMLLMNKDDE<;DF7#9:"$$%-%.$(-325!&%11#'0%(/+*6 480.7.!.0-($,-0( %(#"$#&/#%!)-++*)+% " #)().0-582#)2BP<>=C@JFH3E):BCCC+!2.8HKSQUVRPRPMIGOSKGONMNONQZWYWQTTOPPJECBDC@BBAEFFLPLHNJKH:9458AEAEJ()-)I-.+*+*'&#&$$*---,*,**()(&())+,.3551,('!"$%(--0,+,+-/0.2.-323*%!4;:,5:77;6/23775,-4-4514621/01321/-37211-%('.2OSUP.2*-LB?JSZ_eaOc<7265895>7d3`^YXWSPA@UPI%!.KGII>>@E6"FV[PLMMFGI'*/3')"$256D9./2./-4+KAI=1!$#1*2 -.))II:.38097-**A=?DB>H0O>977#+1-,-/++*)!!"4-% %8+#3@A>53>@<59;:;41253.('))IEDJMED)%)&EABA??BB=9;64>B9=8=?=7K>@9>>.0?4=<==?D=8DD>?21++--&/58.)6223:7C>=6.<=676;8;37620*%$+5510>>A8C@;:346/427/6L=766:#B<<6.13:859.)'//8*.289BB?9%#4B4/7=@?A?3,358&C965=;7*,5=%C@=7/.+&%'26.&!#(($44-2*")-&)&'&$!B;5,,&,/381140,-,-1.'*28*&(&&)210'#&-!&!-5  !!###()*$&610,('(%#&*2,(*&+)')()*-5566:+('*'*',('$#" 3+!,+-%$*&03'!"!%%""$*&+)**-*)',+'()))*+,*('$'(+$%! &"$ !"!#(#"#!#!"&)&%&(/,,/))%#$$&'')2(,024/)&)'*+--,+%''""##!#%&   !$! # " !! "$"""#" !  ! !%!"+)*"%%%#""$""! $(#$& &'%""'0$*!0341860,+0./2,.414100123/0.*с~~~}}|}|}}}||}|}|}|}|}~|}}}~~}|}~~|~{||}|}|}}}|~~}~~ ~~}~ ~~|||}|}~ ~~~}~~~|}~~~~ ~~~}||{}}| }}}~}}~|{||{|{|{|~~{|{||}~~}}|}}~}||}}~~~}~ }|}~~~~}~}}|}|}|{||{|{|}~~Հ +~~~~́ǀ ºŷ̯±􁓏섘ɵܢ􄐘ҁɠӨģƘ騞嚶𓙘̋󬾣ܦɅЬ܃񠣐Ԁꆌǎ·݈˾ʝڣα×ɶ奡鷺Й񟀣ꃌҎ𐅊쀥ͩ솃սК֦ɻҿ߂ć‚쩴ԛȱЀ醟ÝNjܸ˖ȡϽɷ܊̅񘤆햚퓊իϿƹ³òºȽīʿŸ׽žijĀǽúĴõ𿟁ҁ݉򂆃þĿ뎢炍ùԿ熊É􁂇쐜ҴԲ˞퇆ضچ¤ؒόˆͳ蟺ְ活Б€͎οՇ՜ۓƱļكÿ˾퐑þȽ򇄅ҫꀂּʱൾŴׁ錛ӮƬºꉇ½ܼʼ̻ĻǀʺոѽĻŲϾ¿ɼİĶޒ퇋ɼоꁉԱԻ鋔Ϣ䅛ĪɄ¸»῜۾󃎙ǀɿ±ſ߷ŹŻY[YXUVTUUUQMKJTYWNORMNMCHI@Mb^OZXYGVXYUU_`Zbjg`cgiffba]W\\baaZURVW]g<7ib]YVWWV`a`ag8989;AA?=<838=BABCEEDGGIIHCEKOOMIDCCBBBA@??>?X>==?=??=@?>?@CA?>=<=?B@>?BCA??ABACCEDCEKSWZZcg`]caba]Z][]]VRIFDD@@DFFCDDDGFCBAA@?>A@>@ABCGGDECJC>>@CEGEDCBIDEECDA@?@?=CD?=??A8h7?ABBCAA@BEEBCB?>?AAAB@?@ACBABC3ADECBA@BDBCEC?BFEEECDMJAEGFDBDDDBA?EKD>?@A@ADEHHJGEFGHHECAAB@BDFEEDDKF?ABEDBA?=<;<>>AEE=`9DHLA@>umll8:;897bgl@<;><:><889;<=:6;;86YP@_BB@?@?@@==??@=:79<<7hi;=@<@A?@;@E?<<;:;97?>??===<;5`bjwuqd]`bbaaddejbd59?87>I<78i79eafnl_aYYepqkdi;93dfed`b378765202355763P3E8557740Z[O88CW^/XN;8[G7L<:537:;>:;61689/52,.49947..357=5790*''.*17<:7-&D-4/5/))//4;=>AC9,9;ADGH?7;7:=A=:>BB696)/77:=?CACG=?9;?>B@BEGFIGHIIFGJMILNKOOQSSPQNJLTTROLGKCHMY^c`YXWUYbout{vGHrzZE5:Z`>GZk@CCBBEDB@>9ole`@ECEF?@t>A>@@B@?AGONOQSUOtUNQVXSQMMHHJHHJIPSUWXZ\_\]Z[WU\]]aafdfffb^^baab_a`b___\^c^[[[\Z`demtogjAIDAEA<;?@>oa^bg8<=?=>??@?ACEC=;d5c``d9dJOSN9LbTc;<7@@B@6FKHKQQUWWYXRPJMPSZa`^abbaba`bfh\5LbH@Tdos@9=xvz=BAE?@BDMPMC3S[j:>A88a[MAGFHM9X=WMM>VZY\:8=CG[H?B6B@02-=0LG>$EbK1>ETHR]Iylg^Oq\ki`i]s|Ew?ELLJNSWKHNNRSQGIQSHFJMOMKMNPPQXSJEIvgKMrTbW[YTKGOSONOQHzkajkwsiqngVXc>bk[NK{tG|FsrmFOV[SNMGHGGHG@9ERjg_D6.>A>3JZG>>JTGIEK_I,<7RXU7=>:3p335468==;nc\ZWTSRSQUSRVPOSRQTUUPT\PIhd]YVRORXXTMDIBF^_\YPWTPUXaM=K_XIDDDFc`\USTULU_ZVV]7872YPKQUSPV-03<:976456532022100ZVXb0]^UNLG@?<558;=@IFEEF>BCEJJIIIKLHG>>AIGIFMNGUZY`[WUSPRWYUSYWY[eec_\TOSRV^a_[SQQSQOMMEGMMKFED@AIJJJEGBCAGNIIKILP\UQJPOMKHHHIGJJGOYT_JLSSURMJMMHGCJLGDKM6:=H==8D:20;EB=JOKAC:18=22a3WSR`m>;=<<:78897548<<677746657<;766445;>:76g69;8fe_^cfhe^^cfee__efeca\[_]0,-++*+))*+)('%+.+'()')("%& '32'-*+)+-*+0.,020-/3?10-+-,..0+('))-20/,,***(/1112 &  *!#$#$).0028;647688535444/+$#!"!!$$#!!"#$#!   !!!$%##"&" #{""!! !""!!53!"! !  !! "#!!! !   !"!  !! #!!! $"!"#!"!  $!! ""#!  # F !/ "$4223.01()#/-,F,.3576-*+..+*,,-0,,",-,/24-/)).30-+.*)++*(f"$ #! &     + +   0 +  + +"     )    *#! ;8J0 +0%!' +  1+ +-#8%3%& N,(K$)%$  +F&F!*"&  +   R + ?*=$ 2:&>c2&B= ,'$#$,",&)*'&|Dd#!&",/)4 + +  +  +    + + +  + +  +       #"! "$$"%'%$(&&&%'#$#$&&" !!#"#$$)')(()&%%(++')% #%#!  &(*$& #*-))*$&+20, 0!)$)%$%)/13570'34:>?@6.4/37:5/258,0/$*2379:=;=B:;67:9==>ADCDFEEHKFIKJMKMRPMMKHHNMMJJEKBDJX]eb_^^\_huxz~k3+NBF80$(@B/3:?$%%$$%%"!" >=86$&%'(#$A$&%%%$#$%).-./12.<1-01/,+()()+**,+122555797757|54888::=<>?A?::;:89789;9;956:65566689;AFB==$'" "  966769!!" ! !#$".-,+//"&%! ,%0#"!!  !! !! "#"&)*-/000,+'*,.055468788640"/ %0:;"#GEG$(')##%&,-,(&*5!%&'(+,/./,.-)'+++$ "&& !$'/<@EC@BEBFDIH:;>/)4@MIRD.%)(2 .232(61,( $%$%-)#"&-(*(*%+ $0.$  5!&! )""*1.U7HKKA<7838=7,8JJHIDKIJI<8?48EEFB/=%2?A9277/(174565250456;:51,%6*00/0211/2\VNMDHA@ACE?CCAE>K)+++(,.-)D")#$4#)+)'''%'&%(,-//.21./)'%$"<<>%(+,*-..&%)**++(+04-&#9;=;/8957207;:6/150/97521011.++-+,141./-+-/+.JFOOQURNHGGGV12kgT[974:204\]1-XWVTKEF@A38@9)1[PCFDBDMME?GVZR.+,*).1,/%!4>502/.,1/..)EBD41,"$$2 (D<43.,=2=M?8=/4189AKC>EA<2/09@5--JJEBM)QHO(F<99%).1-+*'('&&$(971%;=EA?=@?=;:<>=8. #/.)((&'(QMJE*'IED=BB??CH?<:69DE7=;@=:5:>@A><9:GF@//6=CI9;AB8HHCIDE=3=9892EC68D:;H@=6>?LI?98702,),&#"*&&2?/;.6;5>;98:;7341632:340;926.&$'*>1472F><877657126/-5476/..;E>9>! 16856987793,4@8-C367643--1='(F?82/*$''02/(,0,)+-536-5*#%$%##&'%&#B6*)).1376763110./-,/0/70)"!$+$#+,#. & # $#)"$! +$&$82.-+)()('*)'*&%'((*,,(*.("440-,*')--*&!% ,.+)$'&$)(.$#+)" /*(& %+(((*'$!&'#!$'#%**+'$#"#! ! !"$$$##"#!"$"#!%'"),)-*'''%%')'&**)).-//-)&(%',.-*&%%'%%&$$ "$$# !"!!"!  $!!" "&,%%!&%"!! F"$"%*'.##)))&#"$$ "" #%$# #%#!.*('+,7222../042.-03220/12020--/.Ā~~~} ~~~}}}|||}|}|}}}|||}|}|}~~}}||}| +}}}|}}}~~|}}}~~}|})||}}|||}~~~|}|}|||{{{|||}}||}||}~~}}%~~}}~}}~}~|}}}|}~~ +~~}~~~}~}|}~~~&~~~~~~}~}}|}| +~}~~~}||}}|{|{||{}}{ |}}~}}}~~}~}~}~~}}~~~~~~~}}|}|}|{||{|}~~~}}~~ǀŁ~~~၃ȁ ~΀ ųǻǾò끅ɪ񚥘扌倇󍈌ğιճ›õ󉚨ړߑћ󵣔ڃ͆ЁႿ㸞〥򅷵ޗڿՁÚʑӑ̏҈䥥Ķ䧜䍹ꓔШא쮻ʠҎﳒ腷÷Ӂ’붿ˢ郂셡ʴؿӻčܱ䊀Ϧԟ߁령؛ܩ怴퍫ڒ񒎙}ƩËҿԲóļ錫䷽ûĺ͸˺Źπ±Ļ炊Ӛީ꨷𗙗Ƽĸ͛󀌗NJ썥¸ȿƖȿ̬ý̬ꓚ˗󁕦燏јﶵϧ‹ǚ˞ꉵอ我ĵƾüǞž¿񉏇զߠƺჃޅ藁񇊗䃕ڒɎƲ˒󔦤ȼŘהʳž鑋ԻֻƼȽրDZҫ;Ľйگ˽Ȣ䄑ڻㅀ׶Ӊιæƾ׶𐕖̿̃ȷί該ꑖ󇙭ƲǼƭ½ŽžڽþųƯ´ĽۀX[Z\\[_b]Z\SRNL^XNKPQRSMKIDA68IULWTMINOHZ`bd53c`hdfjij7^PWgfeb_ZVVZij67kd][[VSQX]]i9:o999:6BDFHGHDAAAFIFDFIPPPKEABCDCA?>>b?>;=>=<<=>>?;=>>=<;==ACCB>>==?A?@?>?A??CFEBCDFFIO[a__fiibflljgkb`d^ZMHGD?AB@?A@@ABCAAABDBABAB>??>A@BBCEBED?<=@A@AABCDAABBB@>===@?>?<;8;8f\aj9989?BCA@A@>ABHIHEEEDDB???B>=>EFFEC@@AC??@BA@CEBBECACCGEDCCCBECBDA@ADFB@CHMHBFE@@>>BIBACCC@CDCCDDFGKJLMHJFIKIFFCB@CA?@CDA?A@ABDDGC@=>@GDC@E=E=??mm=JRF<@>mhjl78;6VK_g:==><:=:9899:??@;828^[I[g=>;;;fhk::cbg`e::4669=94454cbc45544779;:6774M_;6V11XTM7LVUZ_[0ZTQF,N@6/K6L51/*%#0-3)5#+26($'IU3,,9,!049;01!1 .,$("!A#:42H9O0U*?00\K>kINcJ]:DPj9A+.2^PWOYUOjdZ]TDYqfXT_OTXWi|v`l]_{UZ5SV6&)#- 3J~Jsg\jh^N~sU|e_YhpWgU;URW\rqtz~yibrig}nqF9F|N@Nl}Ŝip>A>;@<9G7Je4006$& >,-/38UH4J=@k]^Z]@~ح߂Trngus}qxu3=76'-+%&(!$#&+(()(()&''*("" "! $&'"&!#,+""*-.2)-.*,,,+.../03/158<:533230,' /% &"')+(%"$).1-3;;==<:682,4856>@:767506989;<><7677899>=7;69=?>?>;=:=<;;<>=<8751230478794%$/6799<:3+&$*',78;5..32*@&('-3*2<9ABA<4,6BFE9+(,7@=::<6;STXXTQVUG@JJKJKPVY[Z\]^ba^ZXVW\_cd_eecc_^_chda_`^ac_\]bZ\^XUYYchfckolf\>E9LIHBCFA=>heki=pmir9?CEED;>BGHI=FHGKGGFFF>s8j>@K@7X2IHDCB@EE?C@>BADE<>>@>;:=><<;=DD9AD?=@AEE?<_CLh896=A?BDFIIJGGIMG5HVOIOM=8eWRWhg97:58h\c[4?HI9D=>EP^??/E<;4-4PNKB;UC8pH]Z<>dK<39CKQ`NDczy:;84dmBGGmgbrI_mdau{sykjiZIO\fv|{}ws~}}z~wijhd^OQskv||wml{{zxusrqtnrtv{yonhpnnkloutnogiimqnlikkkigdge`_\Y\_^YY]aa_behcWC}LURKQSPNQX^XUM??YTLKLkgrLPWWNKHKLNKCBD?9;:7ELNKNNKF=IWq]^_[hghl\tjdojlic`bj_>`tHKDwlfbZUZ`Whjc]SW\Umh:jPM^POV?N7AGRSKCsFKFDCBma]`fiflrkfcb^]Y]c`aed`UBIADF=:LOY9CnWI=9=:DOCE?C@CFDCHFUPHFDBPJYT^VG[77=8b_51255:=A?7ebZVVUUSTTRRNPPQOY`_YX\OWL:glgc]Zcb]QFIECSdULTTXVSUXBFNPaHHC>BVc`SYVRIR\\ZSY7889_H9=@IUZX05=<83131100025465201220201^]\XSTSG@A>=CFBEECAEGCIIJKKJ@FMINABCBMDDDKAKWURVXYVVZY`]\^XW[ZZ\YXVTUUVWZWQLMOQPVOMIEFJLOD>>COKJQMIAB5? +,"BD - !)39:<59FIGCA?D<=A>?BCFEFKIGINOJJLHFEL9HLMRQMPUQKNQQVPVW[jd_YVW\dktwpiL3H.,#?-83%:T,C6<(('$$"$)*$%&'$'%$#%&%EF$&%'),104435:$//21/,/-%#*+--.24666779:98644479<<:>?<>=;<>?<9898;=97682684363;><;BD@;2($# 3662;;9@ "%&'& #%&(' &('%#! 30!!!&)##"" ##" !#!!"  ! " !"$# 1 '8 !#$&')'(((#%74*!2;77"A;@DI54:;#'%"(3.*..-('11/*/*"#'(&,-47<>>>?GMIPMJ?26<8=D:J37JL?7)&!!# -%$5)1 **6. '0 "" $ %)('"#**'  &0( 6=>! 7=&+-L=95?(6EEBNLGMDFD4',4=LNKMKJUTROQG>A@;5,1N;RVTU^[PIOPLDDNROLLIGGGIDEDFKQSOTTPMGFCHFFEDFJJGG@BCFIHEBDFFFDBC?=><:<;968;>?;?BC=/ =E,32,H00/02a8<50(/T.RMNXSNX//-QPKKA21;IJKKT,/33,(&*+-*$#""),)+)*& %/851,/+''%#E#! ).210+()ML* #!! !!!6=;A<.?77747?9/235630,.0--*&(.-/,,,+))+,RLA>ADKOLJFCMQ0c`a^[^684acTHHA?=>BDGB3;5%*5./&#IVGJDDGBMMHQTPPP1P5--2-*)%0!/41/4/,,./*)FLIPFB=,,-+,&):5-1%7A-S/"7A&%*A7A*31-/(,+&)*2*;.7/-/01),002-++,'+(-C/&834000-+),+#(1,)DKF>;&03-0'+)+,((" ;%0;861 %ECBCE7457;AB6879A9848BB;;74311-,#&)$ ?+-4604?8578:72:524253-9ED@61(#)(&/134=?CB?9?,,7?49CA?437@@;6=6=4849?753843,04;8+'.2:64%%1>23407668.>75>9865255)/?E%($>6-*$#*/*7:50),*'416*'+ & &)%'$$$%G9/-/475:<865521.0203221."%! " %5*% ( ! "#!#"+($#"$ ,&+)(+*b !32,**)))**)(&'&)'.24/./&($673430651+"#" '0'#(&%&&''!%%1#!'--"'%$ "&&)'(*! $%$)))('()"!" $#%%$$!$!$% $$**''(*'(*'+*),()+(()((()(''(+*%###%$(%$! ##& &"!$#" '$%$&#").,+'%$#%##"!"!#"#(*+&!**'&)"!*%%% 8!$ !"#%"#!/!(-*./("21411../12046211//121-0,+,~}|}~}|}|}|}|}|}|}|}~}|} ||}~~~}~}|}~~~}~~}| }|}}}|}|}|}| }}}~}}|}|||{|}}}|||}~}~}~}~~~~~~ +~}}~}}|}~}~~ ~}}}}~}~~}|}}}~~~~~~~}}|{|}}}~~}~~}|}|{ |{{}~|{|}}}~~}}~}}}~}}~~~~ }}~~~~~~}|}}|}|{||{|{|}~}~~׀ ~ ~ڀ̀ ſ㮲µĵTw퉎ŀ􀉃򃇅󄅋³Ԃβꍤ­ʓꎒҤݭ䋎܆ۓ޽҇󷿅؇ôĀ’ߕۑϱ񧃎陀Өɔґ׈Ȁۃ꿗ɱӇѣ’ٺŊӞށ䗪ɽ€Ըƀܷ҃ԟǼۉƳņɿ€׎۸ςɚၞ⺀؉؀Բӆ»ɾ݀ɼ÷Ὣ־ƼŮ򇦨ɥã畍¸Żʾ䂊Ɔ䒐˧󻖎늕գґڤ恇ƅʸَ뀅Ĺų􇆊난ӵܼ񿼲î™遀ˀԀϼɶ䓌倀쀃ҿ匏ڈ粴˿ú¡ِȪѺɸмɳƾĹ÷ι˾ºހƫվ胏Իþ̾ʷԇͶ׀ᾪźǢκѻǮրꃕ¼÷ɾµ¸ȿ¼ǹƾĮ²؅- XXU^^[_ii`^^\LXUPQTSQRTPMHE>95Paabaf45437g433<5\j6cdbdfa]^bk896fbc]ZZ]]WainvBCz<=:75>CACCFHKD><>ACFDCEJQPMIEDC>= ?>===>=<<>==>=?ACB@?>=>AABA@??@@ACECCCFGEGN\efgcdjf^bhfijg_[\VNNNHCBA=?AB@=@AAACC@>>@B>><>CBA@AAA@BAB>==>A@>=?CEB@>?@?>;9(CDDC?::>DHDBB@?==?@@BECCA@FDDBABABDA@ADEDEGEFGFGEFEDECCC@ABDD??@A@CDABDB??>?CKECEFFGGGCCCDDDEIGEGGDDECA?CCAABHFDDEGD?ADCEBBBCEDAA?=>==;<;::>@:77;;=;=;<<<;;:9:999;999;===8^Xo9<9@>Y[eonomg<@><=766694gghcj=<&849GD@5%F&#8#6("$.!#%& /<))GEKN*LLJONM97 " +)*%1"9EI2)Vg}JP]>Ty?:nIfw^/(%;*'M,'/18W0*,6N5+G'7)*;>83K>(Y.bC9\bAnF:c0PAUE:@=2AvVFhH\NilZv_MSLVLJ[pfVedWXVLJo7:&{Bo\`HrmY(1"(#.QFJTJINYrx[Vjqu}X{`rNc|kyqzcdvu~t}jpvltsu[BL[d2;@;3B<<5-* #!$$!>5Pem\LAZofUWteZx~g~n~pǍzvHQ[53-0/'## '!$%))')' $'#$$!"#%$#!!"" # "!!(*'(&/5/..-.0./00.+'())*/.486763(%,(&$&%#*'"07-*&!$#$(+-,2:>?<30;;2353<>?<:=>?>=<==<7;;==>=;<8778847:459//21/57::6+136359:?@?>74-(#-19:101-39434:@FFFC;I0BEA94?@BAEG?1;78f??DJLLHJEHEC@EHGJKIHMPORSPNONOKQMNPOOSWUNXOPZQMSZX]]TU`dmsxy\kX_IUNMBa:?A=6==@;:fZj;=8im8<;phkr:ru9:;;>>>@??@?>>@CAERW_dbZRC@=jdcgku@A>rsxw=::nimf[VSg8748?:CD?9@>9de?@<\H9@?=8CGI:SEMSdrlaXV]`a`^febilnlkNlJ3HnSsrufUJGFG@B9n]Qd@B;mT@88?<7Va6_fJEQKG[iCE{[27TSv^u>Y]s]nYIKKHCGQDISNNLUJT[Zdb_kqqvvzzuxvztoda[WHXrvtkklogjoqntw{~{~zzwn\izy|yvqopostuvsshkkilsl^ak{}{uutuunnololennppqoljknmmghfhgdb`]Z[_]Z\^bbef`ZWX\\XUOLOMMOQSUZZNHvUQwyLPTTQJIKIGAANYTVWVSMHIMPMKNKMIC==>@BHQMJJNJHCDGJMKLKCt@HGFSQKJH'EDJHh^1=83:H<5\Q^pdiptj^VW\[WYSWWVZXVSYSPNMGKPNLKLEIyr_OUaerwuvvx{yvyz}Pnh^USLugH`a]TMK9NSQUeoovDEuvrruIKVQTLTMJFKLDJ\\VPPLIGKKGx`CJsir[cbOhMOmh@C|DJ_gzPQNI?nJQNQKKIPQMRSPGKYRQW\URRVUPKLLUJKMnONDPWYWRTRPRORPTQMhxwtnb^[_g{HRUH}{|CEHDFHRTWQMMMQNSJGFHFKV]je]g\?"5,@T*O!Ipnuikomlkbgfcd_]P:leduLONLMHFI~~~{ytrmWmhbftms`jcdefgqomlmpl`skezul|proslsyjoljyxrfgonpprpojki^ajvfa`jphb\^[UHOQNEHLaNUa[YXqwqwnmd[fabUST\UXafq^_VQNJKNQbfpmkujryjhY`bnqu^acjk\bglvfg`ZS^V^tWaS[a_`gkaHT]ho;DGCBKDi[^dbaipnzulkcduo[ZcmquajCKK|pad^Y]`aoe_KSYb[l}y`SO_XNMWQ5EE]THA?CFFHFAC|jacbd`kneec`]\^befhed_TJLCGJRJMX\=AdTKE=>>CFGIFC?IMQPNJJE=4>8U\XVVZi_c379_b534589<<845bUU\XVUVRQPMMJLOWZ_[^b\`OAkqomsjifc[RMLGMeZOONXO?OQWYTPQCQFBEEP^LRMRWU^Z]ROX177^B538NXXS\1798313//125=:44433812275230_^]cdRMMJFKLHFAAACHFEEDLNLBAMFCCAELNIFAC>CHKILRPML\_\_1c[ZXXXZ\YWSQQTPVUOLOYJOTRNJDAFFMHC>AMLMQNJDE?IPMLLOJMQVQMKKMIOPMLQMNKLMR[QIU[UOUSLyLRQKQCJLQJ96D:<<77>BBFA?CEEGKE=2U>aU^4R6?F;A4;>?>D=?BEA4987899:78647;868:898866889;9:::6f45hih:;74ddkhf69mieeedfbcdf]]ZWW+,)//-.54..//011.,(*++***)(&$! "(8.#'.-/./.*2//-120...21..,*+,-*06:>"$> w !#$$%+49:<99=;58=<==;633.)((%"!! ! !"!  ""! !!! !""!  !! !"$!  533!v!" !!! ! !  """! !!  # !"" !  !  !  ! /4:3->2(./+.,,-, 0+,7*+/3212--,-,0//(+-*'&" ""!  + !   ,  + + +   + + +"   # +  oI< + +   !$$!8%!%,,: B>- )#*&7AJ63;;22L#"j; & "#  S(<*%(V'$3*%'W,,44!')$2<&+ +%$'.9-"#$$)"'A:1"!+&(!07;#     +  %&.;ADFGGFDILMPRMKMMNGLGINKLMPPLVMQYPMSZ\cbZZegovwqGB35(1-,*L625S0.H(@A:<<>>"&*--./0,*')('))(&%%&)*-*,,.244)531121/.+*)+1./014442g23250956667999;<=BAB@@BFOD>:;;??96649984784;<:;>??@<73058$'" 589@!""C?=?<>AEC"!#$%&%&&"!!%&#"$%$#$$&')%$&!!!!  /+679979?=<!#"###$$#""#"%.03663.$ 2/28=B$%"@@DD# :9<81.+8!++)!!!#"+2@HA:548::97<<;@AB@<.>* 9/GFJ+$$6*<"4=G2;:.,-.0./&+52_42if5.484895@HJMKPOSRWXUQPQSYUWRGGODGKSRRKE><93)8LLFDGHH@DJLIOPQRSSPPLMJF8@JKNJGEDGDHHHIGFFFFGEEBABEEFBC@BB@@?=;:=<:;=??AA<988::86.+..U-Y.YX[]35699-'9&(ALJDL,/431\W+*R+)&!#LQ/524431+(*+-+)+)+'! &.+**-+(##'*--,*#<#FCEJ(&$-,))(*)(('NJ%(&1)#'#2>9?GG?52465450333642011/02..-*%'*,+*,&GK+PID4(+49GHNZYSROPQT]c4`DB:42.E>+764+''.0.3=A>@%'JWMEEDBCNXPV**302,2,*)+)#%243/.,*)+,)B0$+LPB>7964)0-,=+,++,*(LLKNJ(IIIGIC@A?0@;8:C=B5<89987@?=<>?;3>H85C?9G>>9>:@E=:<;56>A;<50857//04-08;B56/-)''))15=;8@7=B:9.218:F?13234,/27=4730,4.3C.7*04349<8'-056!#! )%;226527;9A<8:55@<..367:29G$'(C;.,&&-02:75&+-2,4@A3+&*&!#.)$" !""%$#%F7332539;55642223446331+'&!$#'""(&/*%" !##%#$$&('%$%"'*)*%*3,+(*1((,))*+((&%&$&',-0-/2./)#8878?;:840)&&$%0*$&V#("$&+,)&''!! %-#$#$($(&)&#(+ ###')*,35(%%""#"""!$%#&!$$"!  !$##($#",.**.**(''()(*(&$&%)(%#$* $'&$" #!###&#" !%$"!#"$')$"!"$ $%$$'$$#$$'-($+/*')(##''#'#"&"!k " !!"%#( -).%/2421021/5443210.013./,*+~}~}~}|}|}|}|}~~}~~}~}~~}}~~}|}~}|}|}|}|}}~~}| }|~~|||}|||}~~~}~~~ ~~}~}~~~~~~~~}~~~~~}|}~}~|}}}~~~~~~~~}|||}|}~~{|}|}~~}~~~}}}~~~~~~~~~~~~~~~~}}|{||{|{|{|}~ }}}~~ ~~ŁՁ  +~~̀ + Ľóʺ憒ǻ񁄃ʽדل@䈍ԏ݊ųʽ朶靠께ѹҺЧ֪ʥى띛񂆄񻬮떅ׁ۟ 肑Λݨ׆ʑĚޓ͕Ĕу萍ތ񙂙׸יիڃ鍰ґ޸ߗԝԷȯ넣ƢϷ̃ɔچḤ͕݂̌µսŽɽ끗ͰČȸπ̽ŻҾ͵͸ŻѭͽǿIJȾĴ݃ɵ̰䑢񀒚펫򉖡󊝪⃅恇жڛև̫µݽ߀÷Ŀ馬ĩ²®ȿùխ傒팑ĹºLj¦횁ą✲ۢޙ˂ߒ冡ͅ唡ީްӌɀ؏ʽ¹ƾκīѽœƹȺȽƹӸȵܺ󏐀ſߵ帽郊ŴӶŻŹ̾˧ݼҿϾ̀Ⱦǽ¿Žĺչ½˷똙<ڀYYY]_Z_`kfb_a`_]WYVSRQPRSRPVWPPPNCb8NWWM;HNUc]S`icb]3;5746eff:mXhfge_am98556habfmjghlq}{~GF?9=ba:??DCDGEGA==><>CDCAHPRTNJHGGHB@hA@>@AA>>>??>=>=@>>>=>?@A@AA@>??>@???@AACBCDDCCCDEJT^cefpy~m^]fhhgeccaTMLHEFEBDB@A?==?@@>;>BDA??@?@>;===?@==:;AEFDABC@??@ACCDABDDB@CCABCB@ACCCDDFDFGKKJLOLKJFBADDDFGGDDB@>@B@@@ABBDEDDEFHIECDDCDCBCDIHGGIHIGEGFFGGCABBECEHD@==:B@?@CC@@@A?=AD<>jWWbG7<8;FJ>??;98798\pl68:>?AB<;>@>?B@9966;=@=<<=<;<5]jr9:kkrv]r@=KH@@>>?=7Z9@<5`h8:\jh`k7ej942bed9:9899:8656665543435320377>99cW_df3<=:2JX41431.VP132.M9JU2<,%!*-@D$,2*=/;:.6ILMC@ )3*-354!/+3%"%$&!!%$ ##+*<.+.#+84,!69%'*'#"$""$'(&>+*NK-@K:JGH6D "(!$)/;8$JEO`X_RNeOIVZNYIx^jVfaen~}pmZXSJTRbi]L|s[|WQg&E`Kn@~q$87{vE""%0*VMbSy\ohdScUSmyld`oӌpUg\Svsj~}q}o\cvceuc*4IPOYdVNKVLE?2,$$"!" !$$8a]!B6CgZ^klĚhveqt~dt_xxp׃}Θ\=,741&!)##"%&$($ #""##$# !!!,('!!&#"*! #'),+(10//1230/11420.( #!#*0+(/87/#&-0*!27..-+/,'"!"*11' '-24997:6;8+/6?B8<><656699<;=??;;<:8866<:;:<=;:9<><==997;<:?<>><;97=?A?;18956*&0087<51:7893397<>@=//-38>=<>@=DHEDG?/<9]1:@?D@EEHJOPIFILIGHJJJFCCDINJLMKNJHJOOPOKNLNPPRNMNOSWUQFFDGLIEX`a]SMOQ\jot{u{t@`YcWWH5C{MI]P5X=GY`m:BFHGIHCOUMJKKIJPROLQPPQICFHNVX\^]^ZUUROPPMQUVSRTTUTTPLKIOMNSUXZ^`\\^dhhffbdkqyleaadilhfhgnjeeb`aa`bdefdhr9qb[\bdhAMRJB>BF@n;9n><>?=;l<<:;vpnnil>CGH5]6CIJKIFEGC@?<:7@><<3466Q]89>><=;=<<=ABDEJRZ_b`S?DNFA@:;qv]ZT[USKck\9B?Ui]FG6k?GLWYOKDA?KF@DHAKUYSQOSLKZgkgfjhgc`UPTWRU`kmeajquu|^@sNSbjvhVTRTVXNKORTTSU]\VP|R^cfylpqjqmhopqnp|{lz~}{sikjmk_U]ejdXRJoaZ^_ijooqrleW^iruuuwx}sggg`em\LA@Jhsm^__V[X[ggadr}xv|}mlppulo^``WVbYXdu}{znbusv|~|{rvurtqkjh[Zourpkjlikihlpqkhmokc\[]^\]ab]`ffce^XXTSSSSVXWSPLlTPYUUTUQTONLGMIAxnqHWRNPOOLIMNPLJIHJHHFq>@@>JKGIMWXWPNOOLwlruzJB^c{DGMJGIsyJMPOLGA6WUM@OF-rituicY^`^[SUTWZ[]WTRSSWVRUXQHFILLFNNxbyvleJ3DSTQ^`hrj\@15[AFgvvkS\aNKH~mukTX~qqPaJ^Y~{skII{|xnjM[JLUSRSQKILGGGLZ\ZOMMGHDF[Jjefe_ehK[znCZ}MY}oMYLFNGN[TMMMLONXPSPOHxQZZZVYUOPRTWLKRUUOOiGdeb^[YTRTNSQNW[OIi{{zrsfelkePVL|~nkCLXRSSXWQLFLTRFIiDCMbfaZ^XXP@E9/$3>CIVZfoZ\PHhYZ5]4<734:<>7cbf[R\bX]UNMNLNTNIJIIVY`eW^ddj:8l8mmff_VX\UMRVKUP]HAMIV_ZLGGNEJQGAD?CA?<<==;876449;:99:7656;>?;8586677978:::9437696n8446efh457:fghmgcafeacebZYy+,+./-0051001001//,)*)**)+)++'')*%3#)+&#%'.,&/3/-&.//2(3142/.3.+-045579>CCB@$# -+ !!& !#(.68:;AGLC85;=:99777-('$!!! ! ! ""! !!  !"  !   !!   ! 6476631/!"! ! ! # !!!! ! !!"%$##&%#$  ! !"!   "! ! !  ""    4)(.""#,52.+)'-,.0-.-+'9,140046+3$"(-'00-/+0+0/# $%% + +!   + +  +=    +    + *+      #- +   + .' #,32" +/)$$$! #N1)R10894&;0/,3E$'A@/&#$7Y,72>;71>03-16F<*)&&-P%0!+"4$"%/ -".'*+&5 $%$"/$+0 !"'+  + ?-)BO7kA" '&%((>U+*+J0JP"!)@&0/B4;D(>"*+ +   +   |    + + + +     + !"!!"!',+$')'#%'(*'((*)&""%%##!$&%#"%(%$$!#!$&&(&'''$#$)***)"&%(!$#' (')+%',+/145%%")+-39:8230/385;B>>>5'3.H&.1064==DGKKDADFCBBFEE@>>?DGEIKGJFBEJMOOLJKLNLMKHJNOSQMDAAGLIGXdfcYPRUcptwxw\P@#416/1.48`]-*7,7%)57>!')*)*(%-/***+++..,+/--.(&)*/45999:7330-.-.24521112340-,*/-.2247:<99;>ACAB>@DGKB?:;::=>?BCD$ 5" /=/&'0#%,.'# %" "#,0)'&'$%4?EB??>><9/)+-*.7@?606?EEL<,G-0:AG;,+*-01+)-/0101561+KX5=AGjjOIJKEKIDGDFHJT][UWSOXMDMWTPSVXNLGAAACB64>@B:0,&<:7;>CBFHJLG@59AHLMLOMOE==>799;10DIHGEBDAA>?DJHEEIJE?::;>=<<=;>CC@@:79j5h4ffd^24bYXWX]e697630,7(3Ue86543140/,ONQ(,% :4;)52//.-+*,-.,+('*'&%<2 (('),354--/.,MB>:>@DQU+%02AH(+-+()D9A)*,*&!%% "P<6FB?>&!')+:=FMG=U-$'<'-JSQI6:<.,)JAIC14K<=->.42JHC;)'IIMIIE@=PN-9++10021,*,)'(*355/--(IPP+O&&5*KL;::9851(5OEG6#4CH,7H>,3(%+%+61-,-+--5-1.-(>/344030...14-+132./E4387421.,.+0.,47+(M:GLHGBD:8<91C-0,MFGONMROC61#)4/./32,(%(.-$'1" '572-3/.) +8MJC9?A:075.?HG@9:;<<==9>>BE<4>&&;87<>IA>>B=4>7;=>=7CG@=@D@;@9:9:-5:F30/790)%+0.(& ,750.455+5=D;;:+--A,;2481.-29!>96+).(1<131:=1/745*-.(1 !,&9532456:C6;=@916IA+1:8?8>A9F%B??83)/16<:21-5983pUdffecaabadhgdh9?B@wwA{y{xtt578??A?DDBGEA@DAA><:<>BGMMLKKKGCB CEFFEDB@=?>@A@>???@ABBA@B@??@B@@@BBABBBDcEGHKS[_bhuuz}xomkhggegh[ROJFDCAAC@@@>??ABA?AFCBBB@?AEBBA@A@?DFFD>:?>???>;;>=;rnjjgcdcgejm8:D;:;:89<=??<=?>==?ABA?CFECDEEDC@@CABBBCEFJIINRTWWSQOLLJIIFCEFDFFJGJFA?@@?ACCDDDEIHJFDE{DFFGGGHHHGEHFFJHGGEDEDDEFDDCACCFDAB@BA?C>:;?;99@;;9<@G>d9<;:=DB=@B??<7:;9?kgm8;75dhnh7::o787<89<;:9;9fZ\_7:;<<9:988989:<<;9f`g8F<:jgm;;:qj599;<;;=@@?><:6<:657:=?@@?=>=<=:9;20:9<=>;4;=>9412267:959:8;519;<745138,-4.-240-/24615;;97:=975:688B?BDCBB@BEFEEDFEDEE?CGF;@9EEFJNNQMQQMLJGCEEFDHGKOJIJLKMNLLJIF:CGLNRRTVUXXWSOJTRKuQ__\WTZ[emsZCX=eBkgpp@?<9hfjjde;JRKC;8ohbchhaaccjpnjhijnw?>=to98<>:=iib_`ggkjdkp8:B6>:AC?DCAFKJIJJIGFDCBA@7<:7fRQYmfXR_6MY8@>@???>>?><>BAA@CCDA@BCEAI8Ml8g7TZdbozAz\Yco@HMRQSUYZZWX[U]VKQLNX]`ke\WdgfebcbZ\]^TOOQSPUWM4.T;bkrqvql\]^[TQfiobbbejpuxvvvukggl|~zr||xwmpttrtsuvsnkifd\][a_bdaVJKGG{Vdhnyvuopnyxuvwpotzw}}sdVSOMILZ_ZL@j@]dvl_WYPXafWzVkrlnzy|lv|xm]_V]bZklmuxwxuvvuu{yyvyzxqpsttujkqqj`fditurh^quuvutuwxqj]S^mljlkheWV^^][ZUUVQRORSVUSQVTW\]YXTTTMMNLLHLGDHHKPQNKIHFFGG|KJE>?=DJGHNXZSPMKngfpCJLLJLGBCLQGA:]_]YL?:GSaYinrliecdb]WVRQVY`\[]ZRRSVUONMFMRzxmhhfXVG^B?HICZQJFF6eeAFBaHcQ]JRx_\|JM{O_[UUUSOLE}HGR`ZTNKIGLOJLZHKvkoc\fFUL~jIiUJLGQQTZHMUROOONPUYTSOKSIJRLRTXWTONN\YPUZVSJxG\jf_\^\XZSNOLKKHvx|ut{jjiq@HPIyuzFLzDCHPPNOQYdTQOLOPKFPQY\g[\c[YTO4KD!@9)CFh0fNskkqvgbca_\X[ZYWUSSQRPNNLIJJMLL~zvrsjiaQa>^w|pgtlrrh^gnsipyidpvxYotoe~mm{}sojgv{roq{pqyqirnfjb`ge_`^_cmeca_[X`TM:7T[Xca_`NY^_fkzvkd]WNIFNMWNX]SmdjTUPMZbgcgqUWcj``TVoKRyxxh[`kpBCuc_[ZR]]irhkgTMBKRYZbfbS::LJpa\bZ`_jlqhlmC|[gw^UT_}BrrC>xytq_km_ekYfX^kl[n^IU[^^RHX4;@PVVMG?DUV_WEF?vrvpzwqn^W_^]\]hjfcl9@9<567<=6c^Z]W]ZUQLV[a[O[YSOHNQ[\\UV[]Y[442`44][Z]^VPQPDKLVWOILOX[ODDJJDMJ?;:GXSSKTCJTRPMY4cMD_X/0VR54`@C/,05445@A?@95320//001212221^`]^``XSQLHJGDEIBBCDDGJGDDFGKHFEIGINMKHKGD9BEB?A??7=;BaReaM"a7P8b2=B<>=@=<::9:88=EO<;::=<879=:8-77986889:987;85588ifgegjgf4554fdfgecdiidccb^]F,-..,.321/.0020/-,-*(*,++,)'//'&&*/$&'*'!%&(&'',%--11213)11221/?.0.-.! BE@?B!>;>>97K !$&,478;DFHLJC@>:9879:0)'$!    !!!$"!"#! #%"!! !!"$$! { :75752313125!  !  !## "!! """'*,-+('&$###" !  #"#  "   t!"!  .0640/3..+//-/.)*+A+*."0/4,+/,0-./-..+* #     + +         + +*  + +   + + +     %   +    ##!.  9)'3 0( =&75&)&% +*18/%"#'.896;71"+4,.&g5F%3B6164=203)/M)G%2q>7B#1M.*+$!'& *$),%-&.'$!2%.'$+!($.(!+:52`uAF3?S ;& %A:6\K;(&?6 + +     +  +   + +     #$#"%(*)()'%''))&(''&%&)('&#!"#$'('% %'(%!!$&%!$(%'%"(*,)$#!#(  !&"(/10,.1.*'-(++43365565:;=<<<>=<<:68;8040>?BFKKLILJFFDB<@AA?CAGKHGGHHKKIJGHD8CFJJLMPRUWVTPNISPIqP_cc^X\^itzv?(3"6#87;=!D78>(5 !559(1FB"##!"&+-*,-)*+(+*)%#*.-.21--.144677721+.11240+010116122//30/1357=>_><<>=<958:9897;#! 888643&,'!9867;=;:;;?@=;<=<=C$#"A<56/.29554058! ###&('&&&%$#!-!#)3/%!* +"#""#"! #"!"$%%$#$%%!&3**-142/%$""2/$(429C%D/-8?#'*../144301405.$'&(-02970+9=??=<<6;::/)'(-,.,%$:@DDGFA57:6.*;=C9768=AIKIHHKKGGLJJGHHHCDHJJG=AHIC9><@IKH@9HJIIHIJNMHA6-9GEDDEB>33<<<;:76ffg8ljje``aa^WY_bb12_/125530h548;<85244-/---*+%%((+./-++*'())HHHEGNRNP,+&LH "&$$+461.+,WNGJIPORKPR<4/9%)*+++&""(+&!)+*($!&)808,2NM>/1IP+-OPNLHLLHJ0;61212.,)KIMP))/852/+))NQK,.**4(+VD=B953%1+G8F'>1PO)+O(/./4(+0../.-.141/.*1)*.*-0431.,.85.2520*F>&3<8535422/--+***LKADJHCDI=:77 '+)KG@B'+JEQI&#&+-,..4<0,*(*+'$+-01913921-) + $")-+SKA<<@D96876514330/...0/--,+,,.+*NPPKLLHGDB@@987,/0BG@:C>BA;4:>?:>E<:@AA,=??7G;9CD>=;9CEH=;;HD==A=7>>9;65980-++/81/+,# ).,5536*35458B>C8421+'%'%-(02+=6;./+*2796:?.047GL36,,8B(-?@@5.037"#?43//*0/8;588-+#(,.+--+"&'>63504079<776"C,6PB50-3LEA#<>#!AB<;07:288/7/2<=0;F4%)'')"!%*,'$ ",.2-"$!><@=C@<<406630079757 8//*($$##&&(1.+%# !%#"#$%))#!! #.()4 *--)#'u.-+,(-+(%"()+)"()('"%&++,'(+/++--*+-.*'&'$$()$!$%*+% #%!%$ (%'!'!'&($&)!'$!* "x,-+.00)''$"#! "!!!"#" !"%#! ""!$%$#%"  &$*#-+('&++,*&()&$!#"#!!!" # "$ #!"!"!"###"##%&$%%$$"!#$E%"$*%%+/3'/.00,*$&%"&!( "#! !!+&20#0"%A!1110041.0011//.332200..~}|}~~}~~}}~~~}|}|}||}~~~}~}|}~}}|}|}|||}|||}}|~ }}}|||}}}{|}|~~}|}~~ }}~~~~~~}~} }~}}~}~}}~~~| }~~~~~~~~~~~~~~}}~}|}~}| {|||}}||~||{|}}}~~}~}~} +~}~~~}~~~}~~~~}|{|{||{|}~~~~ꀄҁف ~~}}~~~ ~~~ 逆 ƽɭه섍ʻ􄌝Ƕ󐜣֝ٓ򺭏悈߳ۻ̳ۣ䳄ԢJ˶ø̊ڰڧŋʣƽڈׂ؎ǿԅ䭬Ϗ񀾫忟గƎ񦼤Ÿգ〽ʴߎܖߎ¯ꓱ̻晑ԩ뜨񀅒٢ՍޡɰԔڌ쥐˜є٘ۛʎ壨Ͻ߼ʍޗùɶ¾ľÿĺɸþȷǿҀѿyچɹֱҼ鉆ʻ˾ĿĿûœ羒Ŵοĺ򃈈셍ՠίٖ򂍐ʯҸŸԶÝ섊𑚒͵񛀋놟怍Ƒʽǵȁʸĺó˼ʺüаּιǼɹ騧ý烂ѱӽŵ丼ֹɹúپȵãѽ̀界ոĸ˿̀ܯՒŊʽ񀙝Ⱥ¿úĿŽľրӼĽŝיɖۋ^`ba__jgkb`_\[__^VSSNNNRUVUTUcZY\VZ]KDDFKTQMHJLOOULJU_aeck;:m78d``_deeccb_ZZ\]WTd@CzyHFB{ong8957>CEABDGFCCABDB@>==<@DJQMNHDCCGJIHGFDCEDBCAA@?@AB@@A@BCABAEDAADBCD@BDDFEFILNRY^a_nvxwvusnikkc_]ZTLIIGDCAB@@>>AB@?ACHEAEDBA?ADCAA?AB?BGKJE=;=EC@@C>=>?;7m9:998lkjjgimoli7::;<;:o888:;<<<>?=;=>><=?BCEBB>>BCEABEEGFA?A@ECC@BDJKHMRWcgd\XWYOKHEFDGDB?IMPIDCCBDEDCGHIJIFFFIGEGDGJFHIJIHIHLLIDHQMHGFFFGFEDFEBAGQKCFB>H@>=<A:kTkh:i=>C?<5lWKpem;9==8589=CB=>=ABA?=?77`^i=<;::h7likp87858igl>=;55lim\\_hde36:;:;;::;95gm86c:<>:77jnrs?9mkdbhnm]I;d47:8889;<8hajggbfjk537oji4556789887778999:9998:>91W8>:8>?92155410,+QIVNV2221R9=3*$#"!1"1P;)2/-1..;':>T7S, 7',QA@%441- !(&" !$$ "!$( 3?'5?7 9'5#7# "# "#&&I),DB1,9+7*  !#!$!( %H@WmoOTB*`f`gv3F-je>@Y-).@HJ:=;=F?B@>GuhPpm@cN\lm==pnJlN]E!&0;H`ad_fPyZLariQq^uVYXcRYxkYkldf~lq|xoUMo}tk}zthbaiZszxȞ`xx4<6+'%9_\y_7(&.`MEv@r>hdpRuqcOI\v6ZK`Znsʒ®沤eymkX$"AJ'&)( """+%%"#''*%&&* % "!%%$%&'! "$%&&).102+&)+333/../1.+$!"&262&)(+-)(-.,30/452+$&0.+53/,*(&#)363,05'&(01;@>?:78967>><>=@93:997982-56-3;>889@:5565693,&/7314165833644+'@1/,/4662'1/0.00=?:<::869:;884GIE>ECZ;JFUYMG]oPfomhggmt=EOYYZ]TPNJS`j_MMOPSUUSQRPQORSPTQQSWXUTTTSRVWUVW[UW_]SNORSWWX`ifipjfecgdhopqyrnlkjnlknjhdcZa`a]cejb_g6je6ehn>=9g7>@6dYPfccinqlgkfjeLirjd`\]bp:=B?9;>@===;<=>@B;8;:==><7W_Yq;;@D>@48??3GDGVZ^bcdc^bSLTD6HF@<@BBC@@<:LQRRRSQOPTSTVTW[dqrxfLLX_cfga[VUS[Z\SZ\\dfOIRDFQ`eeimonnjgb`ZUdomld`dckttwxx}{xnt}|}wrurpnllnpqrnonljfaVW\a]\NHIgegc`djmpwqzxxrsqooqrvuupjijot{dQLWQIRRRjSZGTpxpcZW_X_ol`KFY[kyxtuz}{zz||}{vxyxxvrmffikpttxqkimhcUefllkknlaoprmosusnilnryytjga`U^jkjicbb\OTW[^YRPSX[YQORTUPWUKQZY[XVVW[[_XRKGJJNLMLFuppJLOKJM>AB=@JQOOHKyuxaesk[enCMRXVNLIEEJF>nRF:L\UM;JBB`umkg_fiifXSUSVZ`YVY[UFJOPI~CJRM}{~gyuhSQppcIN;9=D>JKN[tSZP<@9Ok\d_\ofaKymV`WgZc{HMOE}zX]RPUVSNIKVdeJUVLK|VQJWKwb~q]|TOzSe[OMRSSSU[[aZVVNJMMRLXYQZZUJHJJNQPQSPNPWZYOOZUHEs{HUjgaZY[VTPLI||xunjgf~N]IqpuCMwGKNKKKIKSVURNUQOPQTT^cTPW]\]XQPPmM0=+3clSZKfq}zomitnccb^b[[]_[XRNRSLNQOSOQSTLL}yw{yqiZM;F[qwmh~wtj[fmr`dsib^_btrifBMvtjpvqttcjjywpxqjpzsnql_gbb`\gdolnni`[[WJI>OT^e[YYWgUUZiasDrf[TTNLIPOXchXadijWSVT[`]bgZZU`{Pe[O\qD~|EicfhqMBvhh_]dc\aXeZZMGKKZdnd_aQ]Cjpkc]XTSglrrglBCjgqrjYTRezAxnwx||}yuvsk]acSTZ_kbwqSROWU=]4e:@OSTKF=?GKRj\L@{xszx}wtl^Y]Zddp]chi>9d\WTRRKHMLNZ]_TLA<=;US=XMj\iaff^_Ocf`=76996d^^b[XUXPS^__bMe5_YXUNVYa\WQQLLX^3322^]XYVYWT\SQNRPNPNQRUXHBDIMNOK@:FKSIELFHLORIP22_QHX]/\33YH3 C036=DM8=F?3[4BFE@B?<<@CE>?:?><;36][QN?;:A@<9:78:7B\N<:88::8405677:98:66/# -  $'+1575?FHFFDB>:;;643/+&#$#! G !!#&$"##"!#$#!! !!$'&##! ! 778674478766 "" ! !#!!"!  #$"&*-586/-*+$"! ! "$&"  ! !! "! !!!!%#   $!!4R(53/!3*$2,1-)'./.-.-,---2)(*1--E.0,033512/+048-%*0.200,00033.d + +!  + +     + +     B    +   +0  && +  + +  ! !% "$'%/@4:Q< >&-! 0 ( 6* '4>G8*)L=&SH& '3M( +&4)9V0T3-K/,#4,?-*5,*" 3 /0)"$."#'55%!", 2%&+&B' 8*U1M\JPJt]2E?   << >@{ZW?#" "77!D w6,/$B(E,)8%3 '!#82! +   +    + + + +& +         #"&,+,*'%$$!%'#%$&$"$"! #"! %&%'&)% !"! &#!(%!'$'&(%$%%" &%&! !$&34/0--,+.,,+-+25767278;968>;78<97:<<75==HLNJOLIKGDDCCACFJIIIKLJIIIN?BKLGGC?IPTUSTUVSPQPTSVTTXdbacb`gkxwmQ$='"#$!" &%5%-)11*%50D/;A=966:?"'.3213,++*.372*+,.1212120101324102453235566:5575/.242335=A@DHCAA@A>@DDCHB?AA@B?@C@?;:48895:9;427510483!!5.+;99<=C@;?=?8(9>752125>!!#!! ;=@73""# !$d"!#%%')(('&%$#$ $,2341'2""#!!! !"#% ! &)'8  " !" !,003332/3+%)"'& "%%&))'%",///014213046;63=EBA;678>CFKMKNROLLEJTWWSNSSLIKJHHFBEGKMKJJHFC=24;>86)&(B@?:8;BFHMILJHGLIGGIMOMKFA@?BFRWP?4173,443T823J&/CID>96<6=IC6'(37GOTSNKLLMMKKOMLJFIJHGGFD?>BDFHHNH@>@<7/;6;311227:45882S)*-.)GG&*0,RIII8EPE>5+1><0!#"!%"&*9A%+'-E:T9;4/71,&G?/;XO,6,2F+//(MKJNIIP7:1/220.+NNOMTP,3=>+23,L,UGO3/*O4,VPE9LB2B1-GAF.<5,+.001056:744-+-.1,54.762*(*),-+/2/-.465-,62)&&*!2;FF?>;A=77869434663.*,.*,0020121**OQOHPJECAEC>:3& ,;?=9IPDC=3;=@22LA=7221I?@85&,H>=9=A<@>487@@>C<9?<4931*'-.89;:63.+&&+162200:.,,70>$;40,.)'%(%/79.336:,+/04526:23-1@-61)1;E%GCA&J52347)"=661264//,4/1)'*',/3-(''."7?;832,+5:=;37"#76?@<1.-5@#@9>>AB@B@>>@<45M7/.15;3@?+'"&$&#%*,&$ %(*90' @@=BAC@><416165=24853/,+*+'')('./2-'!  ! &(,')*).(""!&$-!5+20,-*.,-(1/-.-+*+&&,)(+ --***%+),)(&&$!&+))(*()*(.('$%%$%$&'(*!"&&$#!$!!# #$%(#%(%$$$#(**,24))*))'$## !##""!! ! "$""$%(""#$%$!'##''" " ('##"*(+'*),-($!!!"# "# %"!"!('%""f#%$#%&"!###""# ""$!'+(+./0*;855.*(&#'( &"- "# !!*,'"!#(%#1/00./0241/,.~}|}|}|}}}~~~~~~}~~}|}|}|}~~~}~}}|}|}~}}}|}~~}|{||}~}}}~~~~|}|}}}|}~}}~~}}~}~~~ }~~~ ~}~~~~} ~~~}~~~|~~~~~~~~~ }~}~~~~~~}{|{|}~}}}||{{{|}}}~~~~~}~} ~~}}~~}~}~~~}}|{|}|{|||}~ Ɂׁ ~ ~ ~Ԁ ĭ½ƽπźʿĿㅋ舐聋킅ٮߪϐ獋ו⼠Ŷз넆׆򀊡غ󍢜ܝ疕СŠϻӐœׄʔ倕ϟ‖ٜƗҹۄ몪ŧ֮ӝ·̖ꉔʺ끕ùו䀦䌢ס־؜ہ苂꠽ÁۘԞѵ틆ͥϟ݂ʻԌҨнƹæݽ¹´ȻȿȿϬπȸԭɰŷѱںѼ˦ۄƮΧȾ䆋ꀀϻ򅑗ǿſĿ𵂽ýź儀ޝζɇˑŴ˒Ϝólj냔󅁁Ƃ뒀职삇򄓙ҁّʸ돃վƷӽ߀ĥƿԽӵؿ׿õ۵݌Ųڷͻѻ׀Ķꐜ ƴ¾αШɿؑ瀋ø򉍇ųӅàɾ̾ǽ»̹߀ĵľշ´˼ЀǷ½䅟Śpda`fegnjgd`ijb^^_]WTNGJPU\Xf\UV[ib_f_UJINEAPWSNPTWSONJRVU[dpmo:mhcccjfeglkjg^dcYU^hiisqpKNGEB~qj98eb=FDCBEGGEA@D6B?>;=CCGLKKNLKJIIHHGIJIMJEEDDDCACCBDEDFGFFFHHDEFFJHDDEDEGKNRY_`gmvzupomhhgb`^YSPJFDCCB?AAA@CDB??<>>BB?=>>>BDHE?<;:;;<=@@>BAACDE@>=;99mm8::7l7jkhgjkkl89889;<8n89:<=;9:;:;<>><<>>87dnnsno@>A=;==9;^f5:7d99895g98:86k7j^f:=768?A>9a]am_fejfhggijiedchtmde79998n856@KF9mbg:umBi6gcgigd_d99q^W^c`]_bmmfh^df5654667:`99886788]U7<88432^RO\/ZN<;&B(=V6+.8FS/-26BFK\=YT~nGYdq{p6aZ|LR9/EC=hcbb]~ahn}aURI>ftd]sXfpyiT|i7CSz[8ULo>:6j^4<^+)JYTQghemlb~gy}ur|XRQ^vqxs]`y_ipdclŚqgʸmz`smddZNKsrf{jc?/1//&&#!$(*njd:`,&:lUpORo=f|\]fÀhQjggoa|{t΂䒈#/RH+ !!&&'. #"$)(#!$&()--$!())*&$ "$&)((&# %&! $-')-('*%+0+$&)/.1232,-,,*&"'053+*)',--#!()*0173-) "0-+-56,./,/*,1.//5/-.66999:796;4/3653;@91:>7/001+78478*'68:66629457.#'&).,2/54130774481.268861,101+(4>=??=<>7<;75777:BEFECEA@CGDEEIKMKKHDB=GNPROQOOKLIB<>?GDKJPQPPPOLOQPOFNMNKNUUSTSUVWTUXSTW]_be\XUX^ekqqnwbRLePLkLE@KM\Qb`HGe>@GVprrkpqs:9:Xca\_bdp>uicghhj^rpjfijhhmrxtq9okmjaY_bj:798;A=CDCCGHEEC@A?h6=<>>>;<@@?@>=<==>xpuAHKPQQMJEDGKLOSPRU\bhlfb^``_`]XL@>geilkjihnoklngfdelmrtuxwjgx~zpdXUUYWVOYSY`][R[idaOKPQJ`g_UJMR_w}|pilov~~~{{|urrqpmkkhgccdiklnniccadecegghhjhikXjqrokiiihc_gkeUOV`]Yd^ahgfcb^bb[ZYZ]`^[\[ZUWZTVQPU[WUVYRSSMOHLLLH}{zvnc_`xKK~JFF@@ELRQMGIux{x|phmaooz{|ISWSLKLLKIF@D>ScQBBA~z{@Cxd`T]ok`Ug:=o:kb]XVSMJOUSSQTULB@?98?\`REGBKCSOIC=AUPrIY;ib\^R`W];96cchb^]c\\\USNVLQPQ^b^ZX[RWV[b]VOEL\ZQ_5423S[^^ZW\W^^WROWSMPSSPHDEINNNHECABEB:<@EKZZQQ]4gQZY\b2Va[3\9E:?E8?:==:;;842//\\]0.00353/acd_XW][XUOJPRMJIGECEDDDFEGGHMINQTMLMKGPNRPOHINKLIGGLGOFNS15522YZXPIG@@C=LLGNHSSGFBCJ@BI8BKKRZRPMHIIJHKNLQYYVNILPPQQKNPY\hon`homcjZTKNS?:LOL9=H>5X5B?:@<;=9BCE@D:HBAe4;42YY9J>8;D9@A=@?<:88588?85477765686445gj57778889;BB<8566689::8;;7455543578jk76ehifdc`[^1.-323314105521p,*'$&').,4,(),4//2/*$%'").+&&)+*&&$)+),/6453201041114322+/0,*.155:<9E'*$"!?81-)  !""$# ! +  ! "#'+167;@FIE@@=986322.+)%#!  !"  !Y""#$'# !! "! !"" 885544245675  !#! "#! !" #""$&+1>;5600/(#!!!  "!   "! !""   ##" !" !!!   /4676''3-4,-*+0/*0+*,1*1.0.0./.6-/51./2#!3-.65 /-+//..-07,*-0.,-,11,.*,(R " #!   +  +  +  + + C    +       + !#1]JT7.6>'% & *    +   +"% $*=">*&#-.%*!('(-1).!.)-.44'0XE "! +=/.*874\TEB(+-$8/4.-'!7(,#&(#16I")$AA;#! %'&/9%-,/-5; ' $67?[#!"&BD=)?625 )1/'HG05C   +   +       +    % #$%'&'$%!"%!#%!""!"%&'#"""%# !%"&(%#%&#$'"#(++'#$"#'../0/.2+.,**,,,/58;=:;537:888?BCB?@?>8AHMOKLKJHIE=89:CBGEKLMLNKHNOMLEJKKHKTSQPPRSSPPTQTY\`bg`\[`fhosrh\E2*7)(:*#!(+/.98+(7""'2@?@:>=@!&(-/03465987551**+,/231--/122/2-1324643332321357787434)*231-,29;=@>?@ABD@@@?<;BA@>=>;98966:9885//1:#"!%%"1,863688=!A<8<==9/<:538;9:=@C@=99971-15;  "###&%##""" $! @!$&%#%%#,!##$"!!""!B@> > ?!" 7$3<8 !&)+++)&!(.4311.,,/($"#G@B'-/21/*)()+../2026;=AD@<:;:995/%"1').454,1;=>?>=?>BC??=DFB=>B=/-5COMNKJLNPLNMLEHHKJDBHGIIHEE>?GHHFGE><79CCB@E0%A>ADEEGDHIEFHCA?@GHJLMMKA?OPRMG@967:760726>;$716>96,)/.I+;?8/)*,7KQL?=CFLOOPMJKFBCDB@A?>?BDEFFC?<8:::;<=>?ABAD8EHIEC@BA=86=B;.,2;95=:>CDA>:8>>9768;><99796fgee[Q_79h_bbce761/175569231,VZ\[0PM,/.QKINR+*NKJIEGEFB:2/1C-,UIEKLSUXUS)!# %+00-)+RDGHEF?<=6=;FFDG(02/+***)'#-% 0 $?A?@>9;<=834442:920-,+())*-R*-)C?9JIL>>ILN)O*+SF@5.%$&/29$;?7')#823$%);9181&.6T0.7=D;'1,,CJTNSX255,+471*QMIJNPKLT7980//RR0RQ/0/TN,*,O4@R=9)3(A+52,).3830394132,NG)/42.-.340-F(+,,*,1.,-03356:-B=;9&7664310,-,($ILPTMHRVQLC?@=C&-0.OCEG@@K-H79&-5.-*(*#)/++-/,,765)'--/1/230)(,% *4#&" AMRBC=C<@=:6976532/.000/.T=>,),.+2*OJ(ROIEAFFC;3(%-GCIA8HDA@<61436277@?;BA<=CC<654.62-4B>=>51+# ".:758+((012/*F@?83'6<+-#!-/0.56:;I$A$'<-/22$>@@J788.;:D@5/C8%(*))'+.(F?:42.2+-089>==:<;:;;:3..+9)A@9;>!'$AA<:>72760353<6;=67)-%%'# &)$$"*4)"""DBA#%FC75/1>:4-8 7740.,+''*.+++,.(!!" 15+"'+)$!&**#9 (0+))$-+/2020.-1-,-((#(#%%&*+*)),',*+.-+'!$*)~$,$)**+)-)//*($)($&&%%!"%#$!  !#,-'$', $$%(#*&#)((,11,''**)''#$&%%$#!!!! ! #""%#%%($CGEF@?>58=DDFDHKE@COHCBAAABA>=:<>AE.KNPOJFFJKKMKOTOIJGECCDEEEDCFIJGFGGIHJKLLKKIGFGHJMS^dghluvrrlkmkka_WPNMJFDD@@?=>@CA>:;<9;>?>=99=>BFDB?@@A"BBDDFFFBAEFDBDFFGJLRW^abeifdh]TPKIFyDFGIMJGIDFGGEBBGEBEJMRPOOMFILLLNMKFFJPGDHJHJEEEFEBDEFECDC>=DEFHGE@DEB>@@=::BB>:btdk<:<=8:8:IA;kg:iciUc:<>ACCEAB?78<95oi6:<);745::9:6cgkYag;888bagg5ai;=;95o88jcfjkoh?H+!"0.&/6<" "&(%+ + '/,':(8$ "#%% ()L@&) ;0#1&0/.D+/=hsuQix`s~|lr`dEi:Q?=EM\;`Jz_f\ZNQ1Z>**3HL,1671;7`?Th[YhbtC8_JzY=&PQ*it^uoskap{jsR{WnmMnAS]gWe~en-?eVqdd|WeKhLmk '$@[eZe[dNYN{hbbU`vf{Z[suo˦~ajzϣsjΤn~mgf~ktyf~~L3,-.1,))+.3^nrfXn]&0:yRp\MY7UZr~fVReLvvƈge^ppֆp{vvtdtz+$'-')+" "$#!! *%$&!(,-)&$'&'$# #%)'(($" &/-)$.,,/22..,&+))&$ #$,.07633/*")*(+,2/1$2)6).(('&)36/+$$'.-05;0(/55-,.043883+381--+)+-0..48:7::=;<>?<;658>;;=98-77==?5)-7/.2/0+%#'',.052*38212024//<<46:=,-679>?EA??866;>=38?>CDKJKKHECBGJNMMOLJLIE>;GRLOIDMONIGGFJKGEHLMNRPKSURVPRVUTNSVZ[XYYZVLQPW]aed[WYaefkouqEeO@EGKMF?::;:plns=>>@BCCC?=A:?@AEA?=>?<=>>@>wpplhdcikihiffinZP[6hc\ehio=?DHKQUVNCCAB?ELRWLLNMOQQLLLQS[\[YXXVNDCFB5BFL7d7@FHOPRWXQRUYW^`[X]^bcc_UUTdjhcbgk`UV\Z]_bmngdehhh`Z^c_[bcX[`adhfcchyjlkhkikmpopfmmpihksniomopqpuhatyqdtvsvk`acfcTSSQSKPPSejpxq]BmgGS^_cYVLXSUouuzVWlsqy~vmcghe`_agidfhdfefcebbZX]ab`_`ceghkhikg\\YScggidd_XYY_Zdgijhfe```__^[a^XYWTOKPYZTWWV[ecVRNONPNNIR~uyKL}qhkqiWVr{qanIytlsLNKPRPGEDBKNMQLka[cmc^]HSSOSOOIIPPLIEEEvpF@>@BDB;=_wvpic^\[YY\___`\TPMJMKHFNfhjwxt|GPStjd`\MGYfGBCvA:LdksERLzCGDwfMmDpA_3^p|=BGPTYQKHLLKHIHKYcPzo|KPSTY_O{KRLK{tLhxqUQrJb_VGYURTT\TPKHJRWSJKLKK|uIMMKWVOPXTZZZ]dP?BZc^\b[SMPOMNJFPM{LMMSK{npw~w{NOTSNOIBKRXTUYVTYYTROUSOOTPLGMJMFBAm8QXmaiUEF}{xvxtga_ia^\ZWPNVWWWnefC@[cWLIM~~|{iZvYVqkrrwtleb]o\c`j`ky]mitydmylbghrurh^buugddliaaflrwzypjgcjaUVnrjrxe]\YUT\i^^WfYQbhbj\]Snt`\]^Y_QOTNbk`g^mpe^TUQULMNKOTU`HcV]cj|D@?D<<;AKVWOR4a]JWR33_YWV\[:?>>8G?8<>6<>;732[^\\.01324322_ZXYZ^]YVOOPNIGGDEEEDDFCCGLHLRPRJLQPJMEJRSGGRSRNJFHCHLJJKQRY_VTTNJJLF:CFRMK?S[RE>FGEER?8FUUQNQLDNILIFBFVZdaLNKNOOLMLR`WTijnmshobUMMM7?GMHBDG:7/:?;69:899<6BGHBHK^Z?>WD.37169>ABFE?BB:<;6676?535566776775564dfjg57757:;<@:9heh67;<77987443433576g87ei67fik`^E120//50003234;?83.(#!$#,*/0++%.1/6222-+-.40,',0(,%+(#()&&',02631/40.+1354441389!%A"# ?!%#%  &#5!""$$$('!#" !   !! !! } !%*28;<>DDAB<;=::32/*('%" ""    ##!"#$"  !! 87886586443!! !" !!""#  !#$).34657647/)&!  !!!$#  !"$'&$" !""!#$" " "  0;16-/2.3*253*+0)//.,,-/.-./0,,021.00///--/,,220+.1452/.+*(,-((*.-./-*.*--)*q !       +         +  '>EAN+.:**$( + +     &C*F'1 &&'&%!#1!/>!(A*) .$ 3A,:(E -#) ;: 1/0M)9T>j*(L#*;)!&&,/0+) #YB+,"""$!/ (0!*-7-%/.#591- !$.)=TQVPEKZQK]R@OYFDC ~ +)260=\F (!=$"8V(j}.2,$)LC9(&6 D'&&*((+%53&#*&#*5:/!&25     + +  + + +     +"# ""'(#$!! #!"#%#$"!$)&&%"##$))(!  &"!!"$'#$(##$!$&$%2/')+/! ''*024211*').20*.54::BAA@=:537:@ABFDCFDA:6DKGGA?HJIECCBFHC?CGGKOMFORPUOPTRQKNQVTUWVVPFMPV[_ghb][fjknpuc1>- *; 5!"*5'8.'!($$6/9?=;9:"'(*.0---..,,*(%'('))*+,.0..-11010..012320/+++../23032225.,32/-&+556343132311-)%!)+h,+'+))-.+(.1033563: = ./1)'-6./861/3;<::;7;@;@!67741:<;99=:33231464513686.(,8!"#&&'($!=>@C;336798@BC?;=DGHFCDDDEGHI@CFG??CIHFLIIIJIJBAAE@213.-'.,/?;==?=@>?98:88778:<<>>?AA@AC@662-<>?>;=833R4<7>ACDC?<79;=<96=;7862a_feh^[2038:7i897;B?51.0^[.110V,2_U[ZSNPICGOV..PMD;.IB 196582.)*,,,(%GMNNJK/-QLIDM**,/*OJGJ=@EKGAGD..0/*)$!)-0//20/230.*--+-0-*%*)+'","939)K\RGFECFC=97;76421-+1543Z:22# 4;1+PD(,QMNLHFFF;27-+@RK;CCGC<983=.3081:C1<9?D6GF;BN:28;?@A932>=668;8548<@EEE@9513-&):>9AG91.*))0924-8.'474;03,?@112104++.+8:27-9<62,--0*+,*,/-3)D5+/05?"!"3358?6##/<=<585;:81@2%*2%)"&$'$BA662--4+3756"9764=<3778.$9D;=8!$#)'"DB@F@756+4/,;<4:172&%#, )''(!4 "#,&%$"$F$$#F@:;46<83.6  6642--,,/.))')'(&&#(8#+45#$3''!-&'9*%'*%1,-00/242///0/,.-++./0,(#'# %%$'()%),2751(%"!#)#*# )&+,(*/1-)(&'%$$$""")# "!! &&$ !)&%#*'$!)&%"#&(*((-*''(+*)*%$%&$## !"  !#!$(&'##&&#& "()# ''&%" "!$#!#$$(+&&&$###  '$#&-(  !& ((&%&## "!*+1- $"##""#$&/*(46::D=581*%$%!1$"  "(,,%# 2220 /.10030350/€~}|~~~~}~~}|}|}|}|}|}~~}}~}}|}~}}}|} ||}~~}|}~}|}|}}~|}}|}+|}}}~~}~~}}~~~~~}~}~~~~~~ ~~~ ~}}~}}}~}~}~}}|}}~~}~~~~}~~}}~}}~}}~}~~~~~}}}~~~~}|~ ~}|||{}}}~~~}~~~~}~}}}~~~}}~}~~~}~~} +~~~}}~}~~~ ~~}}|~~}|}|}|||}~~~΁ ӿ̸¼凒üǿκǷҨЊ󊅅򌔓Ƿ삊˰̥ٷ墢ɸꨊҭưł́׼Ɲʗ֎傑ݾ究ƍĽ㽏۰߿ð뀅ȱþӡɎЃƁ”ĸȨ黧ș䃫ɡ̒뽆ԶЁŬʴ˘෭к콋öɞ±ꫮ΀ɥ颻֢҉Ϭț̉߬Ī߿׊ܙ՚̐͑Ļ˴иȻŵǵźżž|ҳø̹ɱ˾ž¿Ϛǿɴ󈙤¼оôĴŬ5ļ½´ĺꌞłĽ񄊅Z؂򃐒펈򀍓վúџ͹ʺǿſƻǻ˻ѻꆎ󅅄Ӿꔟ󐜁ƹͷӻ݀ͽ󁓝öǸۅѾʿ눮ŹǽȽǹǴèĻðȻhedbb`\e976ijjnknqje^UNGDCDMW\]RNTZ[i77hfb^`]YPJYba[_`aaVVTUVPPQ[fgghfc`a`fgbabfgifgmqjoEHCHPJAA<=FFDBDCDB=>CCC><>>EKONLKJHJNRLJJHGDEFGIHFHIJIHIJIIJMNMMLKLKJIJKIKOQXafimuvt~wiifgaZVQNKKIEEB?;;:<;;=<<=>>=?<>AA>@BA?==?A@;??BA>@E@<;997lkmigfdjkl888:98867868<<;887799777;;9;;;9<@@AA@@DDBAAEIHCCHFDEBAAEFHHGNQ[_`bennpaXRMIFFHIGEEJKLHICDHIJF@DGDHJGJLNNMFGJLKIJKIGEIDADHKGBFQKGJJKHEGHKJHFDDDEIFGGECECB?<=:<==m[srp;<=84:<98bj:lUi]i7=??ACB?@@=;96e\FV69::==:8735%!)"#%1M,GG *!1+-+*(**$"&('%" 2$/$7(!"!%#%2/  /.$&3275,$#(-36htwsMildOjfR^NTqrfYG39B7k_gRSY.2TcQ.9<;1YCLMEEK639>69Y7qe}TuKSjSsgbP3UG`sdzulov}_nyqRChr:MZxgwYRl@i==989;:;739@<=:..90.4300,,%$&,2671400<:2;5.4;A==EDA?C>:6ABDDGFDDEEGHHJGBADFDFDCJNONNLKGOMMKMONLKNLLMKMNPSFKSVTSTPIFNPQPNASUSQSVUTRMKGEBIHINQRNIH@@?E`;CFKRZ]fjg9i=;:99b_ecfgkplohknjgljefedecctrjhkjifpurtl`\[]Yepipkhkgdcdekoel99>@CBEB=>@?=psukgk7nb`_`bXWQS[LHWV]hlmi^g9`3\ciXYF=Hltog]]]YXWWXWSVTSSGFM`SLGHEED}~|{xrPd}imsrirqajlgZrjden]cppjivhXpspbwxpspjwmnljiffh_inohlgnvrq}qhkdfietsmjb`^`\ZYWNJPoicjicq_TX[Y`ng^XaZUXWT^kq^hre]ZRNPGGRGUNK_|vl[SSmDG=`6\SqvjzBEAD{rqkjhe`lahGK[e[YiBNDvsvlgYYRXbXdoxomljgp`hip_TYslp?=vFI?}}uhc\[V`kk`qsgTdm5d\O1aa5AMLTUClwuBESOJJFGEC@zuwvtpqpgd`cor;oig`[VWVUQEONRWOOJ?i6YpULINPUSTNQVH0PO9APSTat7D4844hecab^X]\if^YX]`]_cb_TRIJRILOMLGKST8;;p_VK@@NRLab`bQWY3\caa_[Z^\UTQNJMGGRNMLH@BJFJF==>ASQ_`VP\ikZWZ8?XLQXbd2897?FB89=98=>:760/][0/02]/012_\Z\[[\ZYRROOKFDCCA?CCGDEMLINQKOPPXUQTTSVPOMSRIMSWNHKHGLPRQSTV#QOLDCEG?>GMLKBHNEOBFHLLOFCGHKLNMJILKCFNNTSOTUUTOLGRYoxvspyaz~tol]XUP8FGF?KDFB><6=<86::885:>EACGEX6@C284/-T5<=?DC=?CC;898878767767897554453hgc`h57564656796fj656648;:9874355ffjm76gfg78ifgc32120-2344659<852,)$#""(--+&%*,-5322/0/.*&,00+.-00+*)**(''-32210.-./21000113123766$'#&*(!  )  !"! ! #&#!!!  ! !  ! !%(,279H[ddH]YYSSJG4'@2;5B6  1JaE #+.4S_/-2: 6)i4>d\(T&2*9,% "! +x1A*&'2F"9-&/,#D:#+        +  +  !  ! !#& ! #"#"#" #"#)))''#$$%" '.)(%# '$"$$! *)%+%%.20/43101..155586.*/6756789<@FGGEDDC<:@ACDEHFNQQQVUWUVRSSRLQXRURSOLX]afcdgljmrtga+I/=F'(1!$*.0$)-@"A'0$;3:FE?=>"$&&'((&&%%''')(&&''&(((-0/..--*/--+./.-.///.,-.02),1320/+'(0210-$243222//-(&##"'''+,+)'&! ".#&(+018<;7 .-00238=<>;>@<;><9::9;::D@;:;;;:CC?>:20,.)065;::?:64437938 "$!$"  => !!"""#""6!###$##"#"""!"""#"">?@958:56644+)&&+#++.69;6/4 '(*+*+.1///.,))'$"( 504DEH&(15110()+,++.23321)(),,.,+,0-(''*,00.1121//-++.25+)',796:45336?DD@@=<==A:.1=@8>?>;7414;ABCC;79C@DA?@DFGGFDFFDGDFE>=GDIILMODA6:IKHAOOB:;KT\_TOECDC:3+'""$#%)-!/4=B:6'(*(&+76/0*.5DD>:=;>FFHLOLKF=9/-.8ADB;3'*+,29<;<>><<;9:95259<<>=506<FC@>A@<:98/3547FB>:78;;:87560+,/,OPGEN*RID?C&(%'MNR--+QUPMLE;3,.+:$)*KF$%$"7(%*/4 %4'6>!++%"">;?'/-' !%22.*,-,USSR)*4;3RILFGF=F*-27-17:,ORKNL'+.+DC:-SSHIVLM7JO.,930/.,112--.,O+Q00--*+-,+*)K(++&.4..18:97961*,233754.+)*('+&GGFGNGK1.+)M)*SORNDA=?BHEG?;?!&+/21,,/,/2132002/0/-.*()+)##++.)' &#68.-!JPQOTL>C@<763110122.1322TE'@#(70-((&&&IKGFHEEC@*/H;?CA;CB6:JD>?=8746:39=>:=9?EA?F<562565A@=<76221.,*%#'<73886@4-21/3;72/4/,//+2:=/8=500,*,&&.&/)'2B=6+%&7"$+<5A##!$@;:79953;5B=:21+,0*3:?:::86=277=6/.>F8==<7655;::8841...++"*(+/+,(!71FB-)#&(+))$%($%'&()/913/+.+32.++,.,.000*(#$)$$%$%#$((:1-&%)$+((,$(&',*)+,(('%"%! &$$$!# $#(%,+%#)//'$%& %))*('++()(()))%&$%#"  #"!$&#&'&+*'))*,&&&)' "&)$-!$ !#%'%%&&$%$ !!!%$#!%' !### !!"#%$"!#$!%$(&$'(''##'+8<=<:@1?A<;8/,*&" !% ##,$32/-1/211220222032~~~}|}~}~~}~~~}|}||}}|}|}|||{{{|}~~}~}}|}}~~}}|}~~~~~~~}~}}~||}||}}||}|}~}|}}|} ~~~~~~~~~~}~~}}~~~}}}~~~~}||}~~~~~}~}~~~~}}}~~|}~~{||}}}~}}|~~~~} ~~~}~~}~~~~~}~~~~~~~~~~~~~}|}|||~~݀ Ⱥʩûƺ鑛䍌߂ݿҁ􇌄ԌτƹӴբƹЭՂޱ؀ƯÛǼӍ﨨‘Ѧ֯Ĩ岜ჩÒ˕ˁ̕՗܄冀ϼ̣˲斆ىéЉ֒훓Ńǵ™ÜՆԌхм벙ñǧбѯ꜑ϴⲺ̀dz԰ݿΔ諕ͦƟ➠⨵򈖆뫥󁅆DZƽκπĸžĿйٴͶռƷǀöĻ֐ǀ텄ŶҵҪˀ񑟝Ǿꐌ¾û·¼Զ̭焖ŸȀŻ㇔&ɽhø׎ꁂ긫˿εִ݀ƻŽĻȳ꽿οǺʷĵ̽ù쀔偁ǶǶԱƿȾ̳ҁǤŻ³ļʾκ¼²̺Ͽځ냆/cchcbffbejll:>9pkea^_YQLGE9DYke`YVUYY^hehhc`UE9JTZYgkb][\Zb]WRPUU[ejkdacjjbcd`ab^aeihh`bw;;=?@C?<7hg9:?BCA@ADBA=;ACCDACFB>@BBC@?;?BDA=?AFE@CGJHA@DC@?>::8nlijhf'heegdeg56n79:65:==<868::999<;9879;<==<;9=@??ELJBBEEGDDCCEDC@@@DFFGLNRX\^`\]c^ZQKHFGGFHJCHGGEFGGJDGHEBDIIGDDDFKKDEHJHGKKHGFHIDBHIFILXTOLHHGFHIGHEGLKFEGTOGC@EEDAceBd[folihjfd^`d_c`d>tjh98hib_[^Ya^d887<h_GlWeVax{ybcYTKqTV=@9D<9WHSFV4TU>GT>6A]DeZboT(*]5iS}MNUf}]TuRd[DcDMCW;Kxeq__Wyrq_b[3eCj\ESToPD3==PQ=@]]~{Np5$0.g;@IrSXZxz0Q}}wWVmscLaQuEZMQdx{ervkyHam|i{ynvfnu|va^|wlUGhgY[aHA5)PRwu='*-..*.//-,$p{> N0=paVopatvWɡmdyn@cm]lngtu|a۫eޯtrgy(,",0'&&&(%&'$$%*%! **-+*)#!'%#',3301/+(((&$"  %&+')$&)380-39797552'# #)++('+,,0252-/,+//+*0-*'( #"(..#+(*/+)003541/)!!$)16&,21:#+6>?19=<;;=>?604*-2>9<:?@B@4<@?>?>781/21,,4.*-%(&+64301;=551/40996;9@FGHFCBCGFA:>BCEG<=?EJG?AGKLLJKIJLLHJMJJKIJKILJILF>HKHLKNIHISNKFGNPRTUYYWZ[Y]`XZWYVV_`ha]baeigmk^~ek_E?A@=EJVZG2>o5CA>>?ult?>=<=>;8@EHNRNLFBBGJK2KLNMMNOPOQQOMHIHJKKOKKLLKOQSVSRU[TQWPHFOOQSOPRRQTVV^]``[\hed`]ad`dffb`_^TW\bik:qtJi9>?;?=@?AAD?o9?CD@;?CC?@BDEFCDC@>:kiiokims:;9cmb_^^^BGLHLPXfg`ZHK,@G`bhBHCIOMLNVYZSTROKBBIMKx~BHPKIECCIJE?yh^DH9>DfRhAYQEHKHFNVYNCENYVPKKMJGHIHKP]WFx}RS\VEKXdSxJy}~H~HFDH{NIMu}R_XTPRTTUPIHHKLNILNNLKIJLy~PcZWeg[UX[USLOWXZ^Y]][VSPOKRGyz{IJzyushR_t|vSUawGJ\\XSY\UUXNW\QU[VSRMDGKEB{CJOQ@@?=78<^LQEDt{{plk_YZYXWUUVTRONOQTXYRTPPGIHMEBB}|tsupvQvbPet`unfpvxye`a^gl`fggb`leW`dzp_n|yxpolklpsnmgihjrtoe_qkn_wpfgjfllefuj`b\U\VPKDJVxmcgjpfYZTUXZnrYY]XVWM]rvy]bhg]NPRRNMHVJLPVa>sVMKjBo`_TyHFFuwB@likehc]XeeGDJGXeFCz~}w~nncTSamxmrfdhqjjkjrjeTW`llq{=iIO@{ujsjcYWPcl]b[bZa_eVTX70`c:MNYZHtCt>HFLKLJMICxqBD{ztupjrpux=umla^VUYWVVVUTSRL@@D?NxpPNMQVVYdXVPPZ\RNQTVXRLHJXXJ`]27je`aaZ\__]`]ca^\ea\XPMRSSNDCIHPTX55<:lXI=CKJP14VWR`LB^3`\Z\U_Z]XSTSMHKFIPPNJE?EEC==?EKZcX^`ehbWW_CTVS]9RG>778DA@8:8596:;:64`a0]^][]-./02`]\[]ZXXTSNLDCCB>89?JJJSNPUPMLQTPPOUUa`XUVSQLNOKPJIKJQMQTXURQLJD??>JE@FA?=?CEUMFBIMQKIILGFKKLMGBFJKKJJKMGEJVWfVSJTgh[SZfBk}zqusbXUQ7KMBEI<8;>?:=<_;2B=DB@A@`:8F0V115+;@@CDB>?@@DCFEHDFFEAC@AB@EEEH@9DHFHKKFDH[MLIDFLLOQMTRRVXX\]RXTUUV]\fbfmioqnkW=I6<5+('#"%-/%#=$#"##D?C$"" ="#""#!$&+,))'&&'))-/0/10210-),,-../-,./241/160.0*&'//11.0121221543300;99757857760//2+-27<;!?@"9 029;=?;??A?=@=?<8897:6;@;;:$!! ! !"$";""!!$#!"#%$%###"!78<>=<<:8;>/55531. ! (-5741%# ./2"($(+)(*.//**(''"".&(,..*L'*%-6622/-T-330,'"%)14865/++)(+.,**-.34//0/*2-*+,*+89:@@=;<75467;?>;6<>>;?6,.+(&*4+))'386.)17<5D?:BEDAEEAJRSRRPQRPPLJLUZTLUNNO?V^bVAJa`UM?97969:7, **,#"0/-/56AC?B::;90(-;@;:6566:LS91,--(1579?AA=863/:=@98==>BDCEFGE@B:9<;>BACHA<>;<><@=;9:755;7452631bc`259:+K),W29448>BE'FFFB@;'11.#&PP))"65B@<=6/0,')29/)&4I0132-6/?EF! /1>&'"!(6/;@A=9;:88>??>630+,-.,UOIFS+DBK++)%#"#O)-+SNUKGJKCDA$)))'%%)(&C =/+$#"0&2!2-%&'# &/3*!"+31/++,+**++-194(MMUSMHLV1272'+5>1QFX+LGGF)NH*(%)GV-+/TDH1:320RX2322.++ST+,S--(*,---+,-M@C/;43<<50140/*-224714542.,,*.&IKBDCJLNMR)NLJQ,UMDE?<3%-=BD;$%+9#'441,03//2,25+0511.+&(*%#A%)-/H$$"L0%&=CLP]RHA?>63300/./10.,-.1264/1-/)+)-'%$LHCGEA@A=5-C9,:B5D@<>@CC64518;457955;:168F?2:DAC??>??@@:759:8>@@92@:<1AI;58;6;:78C;662-.)%"")@9369>9/1--+,9=-/0,,.&1<>D14762),-.,)&-&()+04#0 3.,&=&$&9>"!BDD6697742/:8&##&+"!?AA=ED<>7,)/6>8=569@9:;:?:8-.2989=1&*#DA:B>93/(16D/404//+-#!$'('&/0&<%;"!&&&%(&#FA<$$CB?@>;?=?? ?8:43..0.,---,,-)"#%#'>A$'&(++,4+*'&-,(&'**,)##$&&-/31../,,.--/,./.,00-+'$'((% &$(,+:-$%%%$(#+(*)()%-+-*&%(%!#!#&%%$ ""! #))%-,..+&%)"'"(-"*,)))'(,+)'*+(&&&$$ ###($%($$$(+'(%'(11,)))'"$%!%"!$"%#%%)&&%"# #!!!)$!!$'##"# #$"# "$##"""%" !)'2'&"(21+(,3#7B>:@?3,*(%&##"+! 0"(/10.-1233233221043ʀ ~~}||}}}| }}}~}|}~~||}||}}}|}|}|{|}~~}~}|}|{{|}~ }}~}~~}}~~} +~}}}|||}||}~}}~}|}|~ +~}~ }}}~~~~~~ ~~~}~~}~}}~~}}||}~~~~}~ ~}~~}}}~}|}~}~~~}~~~~~}~~}|~{|}~}}~~}~~~}~~}~~}}~}}~~}||~~}~~~~~~~~~~~}|}|||}~ ͱǿÿü¹ۀе敚ݽՂ爍Տ̲°݀Ȕǂ紹ȍ󇌒ȒؾՖݫ􎌊ºӀ͗选󱻣Ëܠӹ̶瘦ь뗍ɉкկìɽӃְלգÑ纋˲ȪݰۚʅӓڂΏĿIJѧҥЖً֓􏞢ׅ몉ֹޗžҰ⡰ڤقٻӾҶ񯨫򋂖ƒ؜õƺƸνƹ˵«ұȀƿйԺȿĻĸ¼»¼–ʠ߃􅋄;ԾǾ¼Ļ°οַהѻغŽܿ·耈þ뇎݀啽ƻꂎ߄】įЀ܆قмӴ˝ױרЀǾżҚ°Ѱ´܏׀ż󅆆Ȼނ½ɺԿ񋖅ƿ􂈎öѽ̢¸Ǽ·܁Խȿ¥ߚÿĺÿ̽ĬôӷǶ˶싎f_abcddeck78lmnplljggcXTPMG>?BECA>>=>C:8@EGKJGGJLNPOKHKG?9CJJILPTTOHGHFGIKKMRTUUTQRPMMMOV^glpzDE}rnnjc_[WUSPNKHIGCB@>=>?BCB@A@?===;=CCC@A@CDCFDFFE?=>@@@=:9;:98kiBijhdbdeifdfl9648;;;::9:9888988:;:<==<<>::;:;;=@?=BFDDBBDDABCHFBBCB@CHOPRWX^he]UNLHEDBCEDDHGEFFGGBDkGGEGJGBDKMHEGJJHIIHEEHHHFEDFGFFFICCCDDBBCBCCIHEDFPJAAA?CFA:<@>;8n9=@@??7776gfbiZk;=;=9:86768mc^VWkn:kjaQY9979f^icbbabej9i_cadh88g^\W]a]hjmmtpnfcfji`Yfhekg45^]hjjf[T^`a_^eklbZ\5665445445458883bf4776565765334025c\Q8CHVG>1-+,/.,,%"!)67391&&%&&% ">900> :/61%96*&;.,#(-3428i9*/'.*B(80* ''2"&<)')''$)(#<( %!(94 ,"! !"!!%_w^4?GH-9C)+H9840KFT88seppx\S[Rp6wnJK>/7x5Cd51-N858=B)9B(mGRN19=?IFtvgg}yiv~[p{d\Wikb_Hfq\cftWSPeUS{{kuN[GXA`qUnTXeDdc>A>Y@izc2[K+&"-FUpBJjOu~gcaOS[T>wYeWhhaY\UPzpfes^uqc]ql`tmzl~mqtibt~|Y3eQnNA)#,.1200..+%&'" EA\d]etOI7Wsn}DώoefztWv\vk}`xlrp{zpɵ~z\-%&++&&'#$##%##!#)*./-/,$ "(&$$*02210.+'&&)("')*%"+'4,+34,-112766440)##('*%''$&(11.')+($-1))+-0(*'%!"(.2&)*+.1./1/87;6+* #%(--4-+130/,475/.7=<7<=;6-,-+2==:573>D?7?A@BB80791.-242-(*),+377<9>=8799831076;BEECAAAEFHGHFABEED>mk>??@ABA??@?=?smmlkhgejin:t\K]paenigShRYeO\qhf^]efl9?>>BCFHKLKNTZMQRMDcCH2E2_f\m>wsnzy{tAHJIIIHJKMLLKILQPNRULPMHLJ;7OW_XXUUWYWUOHLNVc[NNVUZ_`^[ZSQQX\XWUPU_dgkjg[TMU_echZLODBKPLAZ`ji]ZJGNRTMBzI^qqrssrgjvxofptvy{zudKtSqXSSPIMUPEIqUUsGGfPwGS]Uopknqodf\abd^WHT]ZpvUVirmjhd`hki[WSPGhb]17fMmsi`YXZ[^b\_[NJIKOOKyyETPOMDCB=FML}OJGJLNNNLJIIHGEHH@DHF>:l=>=@IOHGLRQRQPRBAAMXOHKTJIKIIHRZJ}GLQYZKIGQYMwGMKKQNKMPLtNZVM}JV^VTVSKOKLNPQTRMMMJGDFA\qmue\USYXTUOR\[Z_^kTSTQKONOLLz|x}wfsv}}{|vun_[agkn{AzENP[[[YWVVZcSSNQUUVSTPIEFFtfzFGqme`Y[;I`bNHD@]~}SmoidYW[[^YXWTUPMMLLONPPJJGJF{xvwr[npR>ilnthgto}zrZ\dsRWVYj[hk}Uelsaaas~xvjecfhopifhpklhhb`lmmnu|mdhevgac{rffeXXRJIFMQ[aedfca\^aaTaFkoS_dYRU[e{lQedebXSQVTQPRJH9MS_A:QJKaehhfBHLJDtu}vE}qliicZSYZLELVWf76mBHH~usmd\iCpmbYe``hkmjogY[kd]ftFtBMD|sdehj_Z`rtla_c]ZWae4_2`[49=TRPKFID@usC>BNKFHGD~Dzyppniv@@|ymfgdd\XTV\\_XRRLIEBFEQaKMJPY\TZb\aXT[^TQSWUSMNKONGOcDR2f`eh6b^_[^[^5a^a_\XXXUTNPWNIIGLLNb>U`d^YNGGBE_dbUPWTN_`211bWVYV[cc]RMFHGIJQRUPA:B8<>:DY`cfLY^^UNTRUa_hJC/'N5.EBB><9787:8==54212^]]X[YY/00ahhga]`[XNMGIE@85<=@FJMRPRNLNONNNQQV\]YXUUUQSSQQKFDJHMTQWTRSMOMA>CFDCGC@BAAELHFFHJNNGBFIJFIKOIEFIEHJILIEFBNMVUSUSV^]qgfzjqqne]KTM@BI5>JREJG>:E?9??<18:D@A<=;<=8;=4W57?>:<<@?B<9>=;;:99::98986766776467733434cc)<:8655ih44j6998:979:;<::9787ihi4hhk6776g70.010053777444564/+('%#&*++*(()/15212+%#$()*/,(..,2/,)))('*/.011/-./1.0..13122.39676: ! "!!##! "$#$#!""!"!"'-469?A"#D@;8851/-)('$$$"  !!"  ! " ""!656553232#65346b  "!" !"! " !#)*,014962*$#!   !!"   ?!'"410,1)1/*,*$+W10.)(-../-%(+(.,+,+,+.1-1....,+)+/,.---201-,-1/+',--/,'+/00/)&**,,+.01/)(v(+$ "     + $      + B +    0F7   &',2*2E&" )+5%  + + # $"#$!"#54<"1% &4(#%'$#3!73034#. %)3E7'&1' +#!4*D +%#;!#7.HNB/<6".  (+$?T9C"A4*AR1"!#"(#.&&+-#4+K=7EPXTOXNE8+"2C1 +  8LMQ1),(GD# 0P\UQYM6l=J8,$(M"! O2(  -2=!"+$&7,$"%9'0  +    + +    ! $##$"$$"!))'"" (,(#)*)*-'!%$ !"'&+*&##""!!*)-24554359899:8679982.69>=??;;=:<=@DCEEHHDJILMOEHD?FGJHGGDBHMJLNLI\JLKKIIJLLMQNMSPOUXXW]`VVYZ[bjoimqop_7:9*#8.;9#,+&7#$&#!9=<.1B#"!: #!!"#$&%%$#$$%&''')'*-/0/.,.../,+,,///0//-.0320221231//32.,+,122365420246987<;9::;;7587:0259:70/:11,7! ! <=;8889>=;<>=:;==::><:6901779.0*-8:=?76139::== :5417:96!# #'" " 54""#"! !!""#"!"""!">:<<;98588:9, *:32854&4&*0$+;661/469!!!$%'&')*+-1)))&".070=$FE>JHLF%,0/0/..-,)(&%+0/,++$'%!%#)/73312332/(%)+3;4''025898561-.7953/,/9@AA?<2.)-4:8:.%+$#),*!2;BA97().21,$=%6FIJKJJADNOG@GHJJMMG<)<3SUH6230),5/&'7()=''5)EJK(180CE@AB@76.47:7/(143CLQG/->IHFC=8<@=31..((.-799=C>;4.*/.0/89534:<==@@?CEFHDEFCDFC??AEA@==>;A@?837:;:78864002c55fe440+2687557;;885671+)&J&LRLJD@FONJC::68902;:=BEIHCCA>$%%,.,)(&$%--MC;42:>32/)$### $#0/)+7(.12/*#AJDDJ;++2>## *(#,,AD>733779;7<7.+*,..+QPNKQNA@&0./+#$" (.-NHHPNK2TK)')(')+**()''%((#%'$/&.(')+**+,.! !+4.)-3+R+,,+*14(FJU+QRS-058,+(07/WOVWRTEK).,T+.,*F,.,NBR/72,SH,5:211/SQ,/W--Q,+-00-,-+))E@E941.2200-044477?..0.),,-++BDAEJKMHB6@DJJJEFB=5,*-143; ?$))13420004;//--00/.0.(&(';0=%FH(<:30*( 12&"0EFJK5L@B=93033511101.++*,Q.,-/P**(*'NJJLBGHIC@A@4>C0"<>?C:;AFAB<9789==756<8979529;<=B#A<;8642+00(#%'',6"%&HD@>;5.5"B::3/95589:9?801;5/29#7 (%E@77:<502:<83151/*,+(&#**)'$'#"=:# (%$&%$DC%EB@;;;7>""B@;465630-+/030-/+(&$%$(1%*%)-.).3.1,)-/*(*+*(&'%&%"$1")1-00/--*--,../.-+*++*%&+&#$#%&$-'12/,%"" -+*&!%#**+&%((+.,*$$!"!""&&'& (*-0"(**%!#"#*)/%'!(((&(''.232/-.-*$$!!!"#'&&$#&&%&%'%'+-,*('&$$&&'# !!%#&%%%"%%"!!#! !!%%!"$ "#%" S"%!"#"#! !$#)'%(&)/->75B9B@>@FCEFGHJIHD=BDDINOUXVTPKKGGHHIPRRTTRRNMIAA@FLPQXaho=>?=ytpokd]ZYUTRNLLMJKGBABCC@AA@?>?B@BCDB>CC>DDEDCDECA?>A@;8:=<==><;nhgcccffd_abdgmnm:?<==:::77878<<:::79<957:9;<;CCDCDBB?HB;uC?9<>@PAddomwm888==;kg88::==>?86;:6?H<7g[Xd9;998:;977l:;;867fY_ffc`hc7qYWf;<;F:9*. 2NUV8I37=@=jU[X]^h~Yk~~eIiBdZxnv``z]jfg_WWNkqkp]TNQ]aFleuOvDDv5A;-7lawdJmAw?0,+`?XBMhsn`g}g{\ejqNaVb\WQRf`WSmSJncVMeVWl`Tv|rvzoPiUivhiblnwqvJr648433-20==5$28=EC@AABC@834/)*.0465140/:<@FIJHJHJOPMMNNNMKKHPKLMONPYTNRSTVUVVYZWUWSRQQPPV^]WRPRUUWUU[[[ce^XXZ^^^_[Xb_Pbsoc]SJHMLDAK_m=<9:;hgjhfefea\]cddbffefunccjjjiinldLX``Zfnkdhoio;>=9smeip=>=8gl;toGHC@>BAA=:7lm;@A?AA?>EB;=9s=>:7ikfgh:HTUOSZ\ZYWOA@M_OQTWYJCKWZZZRTR[Xafa^[]YX^_ZUBD_hmmhljlwwtmgbmmpbcZUTNu^YgJkjhbZZ_cdfU?I8JmcLONPQGQOHC9UkqJ?volE9T_gjkfhnmmQ@AY^dW@CACC;58>dCdrc_^\][VYW]_OJOFHSRPMIIRKHKytJPKPSWRMNOTLIGDFGFOMLKEAAFGGDBKKFKUUURQKJOINKNQNHNOLENWQGLSa]IKPLPIth~LPJKZSLOVYWyOWUSL~V[UXURQKIMQJKMETUTXQQPOKHJ[^[dhXUSUUOQNNRVYS^`XOWVKIZUP|}ww`aeeslp{ogWV`QsP[\XWZZWWUNUY[XPQHKN`\RROHEqbjk=QH{zunF6:`WqcRC]MD}|hqmej_cTY\[U[TPRKJLLIHDHOMOMNQH|y{y{wqlgX_Egt{{ln}qfgp^_jaKTDQ]Zsxpf{Vcnf[q{`c_torxnekphT[aoaorol|kjjlbZVr{gcnbUNLNMO[bSaxzdb_ca^Y^`XrjabdTYXan_XYbe^b`[][[PUSHGLS[;BYLMQWj^e@FP?DD|?psFCvsmkk`RM_WPLHc]UVUmDNsxxsksuos{]N^S]hksvkjefg[WkwKBDJyyvg^ataS`dqmlsWP^c[d7^P03b4=kimnAUIEGHFytsrdibip{A~wpkieobYYa\baWNOQF?K]WRPNRES`XX^e]]UXKX\WRVUURSEBMM]kj]UZ^487ca`[a[Zj3fa[ZWbVTZWQTRNMLFGUROLNU_b]YOGAIKWWPPOXZW]65:8`PTQU6e\XQOIFKKORTMF@9;:;>J]b]YWQTNAUX[XSNKM>30DEDAB=69667:?955320a`\[Y[]1444669gd]WOLJIIB;=@C>9;_8>:-AB:9?<9:88:89;>88963699878::>6354ece7;:858635435667:988:;=;79:78h5545h6j47876/02/3560022376428776/+('&%%%#E%%&.+(+-1-*,%#(-'&*)'*-260+)*)%&&)+-133.,010../0321/(.02345$ @ !$%$#!""###"#"!!$$(,14<95430*((%&&#! ! "!$ ! !! !""  8331014431/013874!" !"#"  ! "! ! %),16>BA7.(!  ! ! $#!  T! "#" !5!$2362741."0**+b./-1/+*/-1($+,,0*-/-*+.0)&++22-,*)+//0$00,.00,*,#-/.,+-.-1.5"*,-&)+,*(g! #    "   % +  +  +  -  JKB + +-)!          "/(#%%.&4!7K ("&""# "&$ %#*,@%05 %O)4.$-4)A3 +#'/(@1%$&9GGAfZ#& !$4 $/ !#&21/%0<]1'-'=/! !#!%%! ( +"94AcqhVUhSH)=Q*c:0 r + "  +L7,2+58kOV[_5;E8C5) ( %  $6& -$3>60%3) +/+*! + + + + +  + +           ##'""$%)" " #! )(%!&)-,-/,+,+($" &'*-+-0/02/113.-//.357766768:9<:?66;<87:7:;:68ACEHHB=FFJLKDJIKOK@>@CCCIHHKNNNLMMKIGGGMNTSQPTOQSSW\WTWQVafilhjki[*5&$A (&)5&,"&9!#'#$""$$%$76D@<=;86="$$+"  #(**(*(*./--.+)%.-./0/061/21233445744632121/155320344511666<=:4357785..42'2:;72*%%'%!%39 79=<;;<;956::;:=<=!!!49<:  $$! '&#!!#!! 79 ""!""! %$ = !65543;88&&74;=63-90*46407:?!??=!!"#$""%&)'%'!#(%$D4L@B?1-+-/-***+13-.,#"" "&&(/.0--%!$#!"./),48972( (6+*//1($+4633.1185:<94/0//651/%%8>>>:<=@KKG@<8ADE99210,A@?ABA>) #36;117:NRM>% *BCEFCAAAG8(*(.0' 1:<94,(!1045+0;;<98=C?<<=BGIKIDFGGFGEE?;9;=DFBCACA=6556434742//_]^ZT\bd2H+585::7634456L69D@<46DFBAERXTNFBKE@QMGGCD>7472)!!$)2'"1+%4&*,000)OMRHLD3*'*/3# & ;B;::88745498.RS,-L)MJIOTJEH(/./-)+.**,RJEAMTQ-/,,/2.+,,1)'&&('&-,-*$! ##" ')&)201/-*),(,*-.RSU/R+/.-'-4.'HKOOLP-3;7),/-/+SOJPXVD=H,/*-80+,052RD.521,OH373530.+*-0,--F&10031/.-,*L)784;<10.00,-*,034.681,22+(5/.JKGEGOMEL@3226A>ANP?3+$%)!9-020/11020*0563./()+65//-*(N=02/.(BB<7'*<3'%GE8?Xb>9<69.14413,+.**++*)GB%'-,,,-/*LBAJGMJGBCB@=;40(?E;66<24>8((#,+:BH=8H/7=8,A;3583(.282;?<:LHD<:<@940@E97A8-% #%&-2'1AC763530-1/(71)+1+.,4;30/561450221*/,$$&*)(!!"(711!$+ ##@ 79#">=:9;4+'3,+&".($$%9A"*I=A@>9;<8;B1)5-58:?D=<877/+6:%!#'CDB826D3,22;88?-)11**&&*($$')#!!8450/&#%&%C@>?>4745:A$D?;784<4//40440,,-' &1/(''*#+5..0500-/&-1-())**,$ %&,46.+,/./.+/,+51/,+*0**-*))&%&&#$)#&'(+03-+%!#"')%$!&(&'+"&&$.,+(&" $#&&'$!#*1)))!% '&'$%$ "*+))'((31.)$$"" "!"$&$"#$%$#$'&)((*(('(&(()&"$&!$%%""!!"""!!"!! !"! !'" ""#%#&!$""#!$%%#%+*'')+33<2.@;?EA:*+,/#"*#'%!!,%&/.. 122̀ށ~~~}~}|}|}~~||}}~~}}|}|}|}|{{{||}~}|||{|}~}~}}}||}}}~}~~~~~~~~}}~}~}~~~~~}}|}|}~}}~~ ~}}}~~~~~~~}~ ~}~~}|||}~}}}}}~}~~~}~}~ }}}~~}~~~~~~~~}|}|}|}~}~~}~} ~~~~~~~~~}~}~}~~~~~}~~~~|{|}||~~~ ̷˽ö½¼ĸЀɾ̻񇈇󃉄뇕މ끅땑ֲը̶Ǹɘ܌ŎŻ븓̒悔ꆏƜľϿë€ȯ┟ŎЀҡׇʇݍꅦң݆҅;י쉫̋ɩְ̮ڻެƿҢҗǒ䭊Ǔיʼ鄝竜󰔾ƥ脞䃻׭ҳ퉴רԺ삢݇҈ܐݮܒ졚ʪޓ󘨪ǰĸͺƮýܰŷľǸþʷ½Ӧ􄺸⇻ۂȃ܌ȼЪ򀃀􀃅큂턄셅鶛Ն¾̵֓²ɸɤ󃑔ſԿ냒Յ醢􆇁址ʹڋȽԷпŹ־Ͽªï̷þѽ̸ۻŽܴԴԀʿ˽ùٿ鄅˵˾Ŷﲀڇʹ遉øõчžӶ»ùĿՀ޿ϛċgcaa_afj66766lkhghjlkfaa][USSOQQQOJPTROOKMQQ_X^XPJE3a\PRXa_\\]\`\WQMLOOUbkkgecb_`a_`fff`VX`dadegej7mn57=LMFBCFHC?=?><;=?>>ADDE?>?@?@@9499=@CDFIJMLLLQ]lswBCDCEAC@=<=>978:<<<@??<;9lhfeeeimlkjhefk:9<<=>=<;9768:9lm89;?@@BBBCDIFEGDBABMMFDFEIFDEBDIMPXefdXQLKKFGGAHMMFBFKKJIHGFEKJFHIIGFFNMLUMGHPQKHIJJOPVYQT^YQMNKIFCEGTWMEBBDCDDBA@B;9@@>;@1HC;68;6`l@A=RXcg`ag;:899=kk8:87;=?::<:875g66[\b^58d9868kh:99<85`elgeackp:hHca4Ajnkzt_xmry\G?;+23<9:<=99=7@]X:7# UZF+I?fE^Rou\iMdoavG^m\=or^oWITl[M}9FHPsz|iaXuV{mfD\UYNRUoFk9@9QiRxk`BDF,! #>O>GeQnXdxjH.a}a|vnDYdZ:WagbzithnTjp]Of[NLKsqYqpsvbqm`|gykeyusvijPxe95$"#!&$#!"-^L1HYjdpA;57:73%%.7==A>?@@A@BAACACEHIIHFCHI=B@?A@CEIJLKOOLGGGIHHEIJKNOPOJKKMLFBEIJKJGMRRRQQQPPSRJGEEIJIDEJNMJJD=MSROOMPUXWSWYOXSW]TVSSYjljabmxYJ]P]7RbS9ZSY7=O7ADIHKJGHMAl`_kjeeWXini]W[>GDA@GNLLLOMMRRRSUQPPQQLPRPRPOPRRTTZ\WTVX]]^]Z_ZWUWXZWWXUSUW[[a`a\Z[WVVOJNTXaYjngV^\ZEGIEKOSSbhklhha\_bdedabkgdeecc_affceekhmnllmfjlf\]^fhmpqqommkjlkhifa[dd`]`in<>;9<;ho;tebi;:=;nxusns>ACDBCEDGGHNT[]TMU>aV>3B>HdggptimiWiCIKLKILPPRRTbU6;EJTTVWXVXZ[a^b^RIB?A<;GWLSUOQTSPYXU\[XZXWYUPSUXXXWY[ZYNIFHIFMR[X\YLMPZeagmhdjgjpkilovsj[I>K;mJ?3FrHGGB=GYlu|xlYQSSNFGVRJKAAMafmpmmome`ehkjikhkkollkgehgedhibaghjld_ZYWUTUPUVSV[_\URTWQJIKug`epwtqa[ifc^gtqsuqofKeLTX_WMG{AKQPzG|v|n\Z_TMJHJNR]]RK^cp?JPOLLI~K}{toqv=DIADD?:GDC;`=lc]\ZRRUZ\_\XOWWZMORKPMVUPQQIxsv{PTRZaQHG@AHAEGIPGCDFEKGxEHDCJMNNOTYWQJFOOLLIGJMTRNNRXOHNNNKEDEIIJxumsIWRQ\UYU\TPS\^UK}I\cabUNEMRROLKTSSXPOQNINKP\UMT]ZVQRWPJUSSPSV\VLOVVPNYRK|{}orrsfej|}GB?9XyR]bbWRNSVSRJKXUMMLHJJYlaTMHGGvju:ACGuqe[L`KbmbS@6D7JbY^ehh[WQ]\[UIAH~LOMKHLPOLKLMIzvyxunhM7LQdlwcf{{filld_WSTPTRRWmqwqanobgden}kbqpo~rqe`hemS`bgqqkpwqyzjdXZb]ahqgWTPS]WQ\gVWcvf^[\fk_a]Zj;eRdcbYbaZSP^Wdjba`cbVROTMFU]]>gWUX]adbfn=;=JPHm:@EEHTT]mOQLG:T^KXKA2F-<1-AC@@EC::65667;9736421a]^]`12c^[13^Z[TOKIILH==CBCCDEEHKIFFEGHGMVQ[VVVYZ]YWVVVK4IRZ`\VWYUSNKJHLJEBABB@HGFCEGJHFHGHHHGEILMJHKMGGCJGJGGJOMEFY\d^Y^[]fXfgnbt~xjRXY>@MS5?JMJHCFA?@@@29>>;B::=8b\b8@=B:;3Ba7;>3B?969=;957:8;;:8:8858446h99788767dcafec3467:85d3558788856:8556643f545ehhi5:8620//./35754233685120-)(('((('"'*'&(&'))0-0,(&"2,&'*0.-,-./-*&$$&&(04431/-,--..031/)*0202331312##!#%#! "  &(&&$!W!'06962/.+(%%#""#!!%%#""!  "!   !!" 532233676554125V67 ! !!$""#!$# ! "! #&(.765-(#"! !"" ! "" #""& #$ :!!$&"$*'$!" ')$  ,3(-//,,0 12Z/(*-*/--01-,+.00/-)1+2.,01,-*&*,0)'0,"//211/,')32"/+,,-,45/,*(&),-+()g"#!     '!  + + =   + + 2Y? $  +  + $$*  + + +  + $1"&&."+0-"&(+</(&'!#!83<-(613("%!@"!?% + 04% &!4-@5=JS!*! #!+6&842>.18(-+I$<;(.#)!"**#NFD]QOMJLT?AD,DPR`H + =* '$% + [UfW(/M95?V&$&#!%," -! #)$4?0036 %2*2'"3 + + + +      " +  + # !& !))' ###"!!"&%%%&&,("'(*01,-' #'% "''.,,,./+...1/15668::7::042345799;=@?>=:9;<<9969<;:;<<;AA@@?:<:61339;<<<=>=;97879::94:632588 : $'$56/;79876984 67002'/!#"7!!278/.3!;>=><@#$%&$$#"#$$%$%+.12+%+$  6<;AD=>7.9'--,**-1131/1&!&..01323559786,%"#0,0/((..+11/44131252,-045763)&$$%!(,4232'&)098=B=:=;>C>=>?B?:4*#+!=$$E*''%&3HQOKB4342-'(4/(' '+8& ..3<588?CC;7686356,29DKH:3"&DEABA@<@F0I<0,+03147:5++2<>?9.''7;ADCEFEC@ACGFDFEFFIGGDA?@>=<@A=>CADD>9654335/VXZ\c_]ba67358<952W46/,*Q+WQNOJB98:DKHC62:987@ECHSPD>9-3I,1383-)C%-0.MBJ*OICEIJ9/03+&%#$$),+$!+,7 &*,-.*HA+MHGG?8488#$ $!) >8885013689741756+-/+PP-JHKQ+31.01)OUKE@BHAP.1077("""'"&&(,%#&'(-)H@$%"!%(()*032/*NK(-.--*)QQOO,,20./15-)KJSTTS00.,''(KMP++,VQHF@C*4//705371/UQ2793+OF*6:<<2-&-00.,NR+1004/./-*-*.62,2620,-0+'0./.0251+,11--40+QHGEEFH?@N=;203EEF'G!'<,4880.,.0..)+32,-,)()4A90,))(JB9; $(I<91')%5=4*!1,0KSJ:;;21,5540&!'@I,.-,(B@(,,+*+-TQLM)ONRMEACDC?>*&*8>47219D81988D=>3.317'115<=;>GKD?FF=811603:B;1/((/,*05+,5@82//5833/*/* 253/795-,4.7954366.,(-' (*'4+)*/460/4&+%5"BA=;965+&**,)+$!+:9$.DCNBB=7CDJB4//)99:@3<6:?7,73$,(%B?@<934:7-366=A:0,+*+$$"&1&###&-$!>401!)&% ""<573.7.2;=!AADA8185:9=4;610-.,)(*,**+*((*'51/422/-,0101))*.+$%$#+1:",-.'./,/.-/3/,**,0-*)-,')*'"#+#'*/),)J*(%""!!#!& *$+&#"#(-',*(()%"%&%#&""!!(&)5""!!%'!)#R+)**,0-*-,,'%#!!"!  "#"!! "" #(#)'&')+,(&'*)" $'**&&(%%#"#"#! "! !#"!" ! "$$"!"$!!#!#"!"&$ !,*-,*.-/3,64>4AE@8(,.$)"%"!! 1-2&1/.-.-,/ .0122Հ߁~}~}|}~~~}~ +~~~}}}||}|}|}}}|{|}}~~~}|{|~~}|}~}~~~~~}}~}4~~~~}~~}~|}|}}}~~~~~~~}}}~~~ +~~}~~~~ }}||}}~}~~}}}~~~}~~~~~~~}~~ ~}~~~}~}~~~}~~~}~~~}~~~~~~~}~}}~}~}~}}}~~}}~~~|}|{|}|}||}||}ށꁉ}~ žµøοſĽſЀ½úұ돔ܿʓǼ㎿ҭʾꂛɘᣡݹˈ틔񃔭ޤŸ􊑛»dzɻǀ̱ӊâѿ߷䏒يҵβǾˠ涚ιȘХ誶ḁ̑񅰙Հʯޅ紥ěׇ뙂ٿ泐݆߿誘Ёڋϟ҂܊φԲрƛå̻ԩ̼Žȶ񌧩֖֣֏ӓ́؋ۄ솓胥ĺųܾͮÿūϿìѴۂ톀οѹɻȿ¼΢܅Ëʴ΅΀½ɷĿ͵􅑇¾ۆƕ۵테ƴýǾ¾Ă΀ƷథĮʾĩ½̼钖򁋄˽̻ል򀋛Ӧ䂆勡ょ򟧥꾲׭ЀƲ؉Ÿ⾅ƞνİܺ΀ĽعDzŷçԪŽӼ셖ĢĶۀ􅞙Žպ߁ቄúʽɿď񟰾ȮҴȾ¤Ց˻ҠɺùøµûǛĻÆccggffcbj69:;lkfeg66gfcb`\ZXYVVVURFMVUUWUPNPQR_c]UQ;6^^`^VYY`a]^a_YPMJKNPV^beefba`b`c48j_QXe\Wbefehc`b59=CBDECEGGA=;9::<>;=;=><:@GCEGECA@BCA@@AAA?=@FHLIOUSQRZ\VUROKGBBCA>AEGDDGIJJJLMKLOWVVVY]_\XTQPOKKQURROKGIKFBB@?>@FE?@CCBACB@@B@>?;9:?:888::8;:l999;;:ni69879<988liihk8:>?><<=<9875688:988:;<=?BDAAADTRIJEA>CCGJGEACEGHJFCHBJI:CHGJCAIKLIMVSGGIKLMOONMOOONOLFIHIHLS[HDDH@CFDCDFCFJDCB<=\Iqqs::79;7hdnm_bgjfhfei7lj7;jcg]_bi9i``^[^b368654342cb_Z[`356889::5576457gM?JLD7fEpQ5NE>K:8-(06&9<;*)('%! "$/4'5.07911)!.#!924!"-;C(3?VI+G)-&)!'#+#21,!*$'")35 && %1%*F\XPO<aIortMZ`wjY@{f{QHnXxQiQPBNcZ}U-TnW[DB- +.INP[_dZ\J,@25nWx2p{YskjppqhmJGDgWVki\DF^Tc}fQfj|tՒ`gnobiiEFHJTPYylg &>5"8:313672,1, )E|_5O3T5PKUTlmYaHjRjW_t\Fwdƽ]}Mwf^N{__chvxRio_U["  !  !  !"&&).1/.-,*')/1---"!$*9,(-')23,&)-!"#.861+))/25;=8996465340-.72("(,*&(('$'0*)$%,/((#"'*1,/420.)+1,3$/1#(.7.(.$/#">947E95'.?=546?BBA?BFFI?8=:<121/02.',/69CECBEDDACDCEDDGFCE642<>:DEDFIJIIFHFIFDBFJKMLLJKKLLGA@GHGKOKEGGHOR QMNLMMOPSSQBJKMJMLH@C:9FJFPURTOPWPZZ]^][[W\Y`mmf]bpoH:Qd9IZQ3ICN:A:4ANGKMJGFGDA?@?9gb=7gh9<==BC@>=@ABCED@A==EKNPKLW]ekY=@36WBO;snnnmaZp@CGMMGFQRSQB?GOHMPRUZXVTPLMP[cjh\OKSRIHILADC?9JVXV\Z_\PIJKGIINROOKKMLORWVSTXUT[Z[adcgohcdlpkcf_W^cc`VVXZ_Y[R@^R;]CKQOHCC=JPGELFBo?tU[`cha\RKGKLR[PSSULEELONPUagQMKGH}ww@JupnNM6fXUwlSM<8:9L\N@nPnecaXXHU]TSRJiKGMRRNKEGNQOJI|woxwvpO=DVino_Yvsmzvm`Q\YVQY[[UXkxkfl\G^yjeoqkBnho|ppsqf]kickwquutanxpelf]`gzwcK]]\YQRVidUYcfndehtsg^Ol@AsnngacUECXmVY^c_ecc`TPY=Aol^_og\enilaiDBwvunrqmhh`]XU\\XTHSTUTURTOMOLSXZ[YYQPZliXQQUVOPHAFILGNRW`YT^adggf553gd`bZX\^_T[b\XRPPQT:dELPPL^\acdUIDCAFJ`gYR\\X15`^UFJRTOTW4c\TQLPMLHGFGAKOLS]_NFBFLIVd[VQ.Q=FF/>>??DGB?9868898;;85553246863aZWYZX^^WUOJHJC?@=>?@ABCDFDCA?FJMPWNRYYV]^\\W]`V44@HBMRORLMTUVUTXU\ZZ\ZW\Xbiih\fmpbD)$/4$-*.))"' $)#&(&%##"<06B::=<=><(!"%(&%&*-.-.)..,/0220//..0100031/..221322349:9?=;98431010352018:411676533520*2;7502*)$$.,-63/2366459@@8;<536;<=>=@?@>98;>>?A=:<;;98<8>77=?==::55?898;>89635544568769= 6<"1+41/5+356345486)'/559<83025653:=33645:=7680!" !41.2$$"! "#$$%$b #&*+('/1590"?==:>6.<$')--'&0333*%),(,/249621.*+-4;?=/$"))%&&& !#,..3585+$&(&''+---**+..--.,.5569::;>;:;BEA=>:59=:7.,+,0,-'%#%8;'&,)2C]YG@-.1+&##,0,&"!(*#"% 36<638:>@?8-45*)-/45@@9:>7.*?NLC?PKLE?@BDDGIFA?:<>;7)#$6DIKKJHFEDHGB>==>=?@@BB>=AA@?>?=;==;732002420/X-117>:::;>?43:952212]VS=HOIEC>7,,8;BGFFC?737=6))# #(,)%$)&$!1&*+//-ULOKBMWPFJ%&++'%%'()*,+&(.4!!)/-*,-,+*LHFL--QP**Q++T--12-/30+*OHOUNNMNMJGB;89(,2/,VIFMF.514303751RT)2<71RKM&+)8>9-,/1,-SL,.3.+++./0,'-481(25/-1//-('50./4/.+-,**./+*FCLFGDCB75A:)14#8A"?/136;74.('**.5-/.0+&'*,+-09>.,*()ECH= %EA@;# +"+B=,&#,#;.L@:8602%05..-(5&(,//,)$%+/-L*)NTMLNNLKNLFA?FFEB,"19==52C?:CB=5-411,1/*'*7A68=0#0?64;<5A#:5;F;9=<2-6859B>A@JB4>DA9?:327FE7'430/-,,64-/46=435<@82&5 78<858/%$/?-/0868663+(,"!"+271,003-%(+!-+',2=A?7:754.**'&,,)($+2$>'"%ID9;DG@8*,0+23;8-D29J*/86&,ADCE5A>648<41<2/*0&$)&$/)&%!!.>BM>@EC?<;=::;@HCCDDFEBABCB@?@>;<<<=?>AFGHJLJJKKJNNJHMFC:lIIDCGGGHKQPNMNLLMLMPRVUWRNKJIIHDBCC?==;9>ACDBB@@ABCB@==B>@;:8:9:>AC?:<<97666llj797kn989<;76ighh78;=>>><::9777o9;<<=?A@>I_OGJKA??>;;:;=?BCDCFGJIHKKIGDDCCBDGHFCBGC@@>AECJJKE==FFGFDEHKJFGJKE><76agh5hi`Ujjiaj646978i;`V]khY5;:<:9@oi`Y_a^bfcljeijjine^egihfjkha][\\]c344432b_acb05987778754211a\`WV7A:dTI?97/(%%'7@.),/2)! -0"#$56"38/&=8&  $"!,34(<23""&/4$ //!"#4"$&<  !#'$)CUB#2C3F% '0GII?.,Olb{eWWtJ<%&&-/-+.6>UbJNSY;C(),4O8Ei_XJa=Ql=K{hdhhupnVarhel}k|MSY[8h8&N\BNvqb[tVUSVad]}e5|^crfbftrE;Q:T_HJe`d\GG1""$1@YLLKWu`i^B;:3@TJgd`IlOFJqm{g[Bey\qnMTnp`v~x{]ƅ\gfaq{uiaYJ|~Sfivv\$N@;-(+%% ' [KP_KEMcruYIky=VRz`vALcsm[jZsʮySQxY~trcor]oP$" "! ##%!%#&()(((*/.,,,0/0..731-.53//*--.+)/&!%,$0(0,)$"%(+10033/)135631//43,'!*11/*(,!%)++('&&'()*+/(-*1$"-3631*),-+)$%&+/,'40*658<'.7 3134<9=5/5::><;23636;;32/35AAABCA@@>:;@DBGFGD/$/:<686>MMU^jZ9>BH~rqkb`]\UV^YXWWZWUWXRVQPMSZ^^[YRZedZWYSUSMNLFOMLLLNHR[`^55679;:3b]]aid_VXXY_ZXY`[XUMLRQECJWSV\d\VRRGCEJ[YcQ[^V413_QQOOHHZ]d57eVROKJHAB@ENOTVRSNDMVOEa[Ki*CO/(@K36=BEEC@:765963598865556520`^]YXWTZWUPKGFDC?>?=?>=@BBB>58;D?:=;A6524=;4DL54AC;==>766>?@?8685;:79<<=89776:6:8665h7745hefieghjebacceefhi;?:kmihg4655666447788797dbbce0247845203279535642/0.-*)+,*-+(((,+*++)((#(,../-% "-11/.,.,+--,,*(&$%'&+./-..)'+.1/))*+*)+-+-,,2I  "" $ 0""!! !"%%"## !! !#$$%"#"!*"! ! !! !A5524474434#1(#&&@!"$$$&%#" !!  !  !%!!!9 .1203.!./02*(*',//1+..,.'%&++*253(*0/*)-/-.)%///,1+)'-3.( 2/*(-.,-.+0/,/.-,0-+.././21/,+))*)*')**("!# $!  + + +   + + +   + +     +  /#    #) , + + +    +0%?$!!!$1 - HB),%3</"*B9# ,2:& %  "  +'.$5F=@: +0 ()$*#'#66OK2>S.-4'!20#%"49++-/!"*;;-@9",aB>ITNFA:.MPN5CDTZ=!  H +"<.&#-< .!8\ABZ0u?'78O5'( + #5'*H,(34")"+2-""-# + + +   B  !   +  + + (" &"&"#%)&%*./0-./-(&)( !&&(((!!$%//023212/*-1225687$ -147;=<=8767<;;<>=9;:88;:99496BCJLNQOOQWUSV[]]Z\ZUvMU^_kgaaif=>./6<"'),(7*$6B$#"&%%##""%8:5@##"BCB!$$#$%%&(*--//1*-/./134//.0/00100033112220/0013369955663122122376422564533575696::8718982-'$31-10134?;:66224(7::9:=>><;:;=<<=>=><<99E#<!CC#912.7;86544313535889:=??300-*+/, '268:7552200235356:<6:;;;99:<:9878 C%%#&*)'$!!#%'''('%$$$%$#(',1:4/)" (*-1"%')))(,//%&(*+*)+*/498:;4($""$%%'*)$"$%())'%# ! !')/./'$&-))**.-+*.--.*'**'$%%%#$),0,-2489;;===CCCDD767<81*6+*%&!'++06F[ZP:,-,(&#""$)."$'$'##,/93979:@;6763/)$+.8@FADEFD55REJ<9;?DHFFEBDHEEFE>97@AA;;868BFEEBBA>:29>><399:568:<>=>><>=<777521.+-P*04536482:7<<;5665:6750331b]ZXMHPLE<82'0=ELWSKGKRLGAC40=K14/0/+URPQ,*-QJKB>?<>B=21) &"(&,%2//.TOILTSOQNJG(++(&#$(+( '.' 1$#)!D41103//7;684+/1*.+O./-,Q-V+43,*+$%%!5$,/2205/(!<%-*.6#$IOJJJIF<6!2.,*,/+,QQ,RQ,LNOMMQ/51.-0,MPNJDEFLEFC8>C=74=-5300//..2-1:1.783-,+0786/*J*)#,43/-0211TEV./.-++-004*2../.13.043/+--.0/*-,.263+(()*PMMMNGFA@<'!*.2'$(.0484864/&(+*+(+.,)((F().1./33,'(+)FBK=26"B:8/($+->8/+(!6,",NC;55100/52101-*+.-/1+)&',+*ORNPUKKKMHIGGB?B@AC>0BC46632<=JR><9973,.440:C74(@1*(+2A<2AD=7+,1@HEA:1>;;:5;9FFJF<<=78;968868344+52(---6:2/).-8C9@D9.//)*.,&$$&*,7@<;747054/*),*)+'+(*0&&$GB;AFE=/-2)%,/062>B?=0449 *#CEG>9;:86=8/?C@BD3/+.,))+)".)"+%%)";C?>< %!<8#I98??249543468 "(D>>;5424..621/-0---.*.++'+/01//+066.,/++*')(%+)&(&(#',/--+-/53/+*++.-,-1-+)%$,+# %+*+-1.)&'" )(0"'*$+&'%%" ++-7.$$$#"! %&&'#$# #(%/-"- &!",,+)''&(&&%"#!!!"(&'&))**))')+*)%!"$#%%#$ $"%"!#$#"&#""$#!"%&$$"#''$!!!&%' ! (&$(",,))%(.19/0*.3-'/<+)1!"-" "!  !%9021340323211200-/01462200/./1ǀρ΁~}|}|}|}~}|}|}||{|{|}~~~}}|}}~~~}}|}||}~~~~~~~}}~~}| +}}}~}~~}~~}~~~~ +~~~~~~~~~~~}~}}|||}~~}~}~}~}~~}~~~~~}~~~~~~}|}~}}~}~}}~ +}}}~}~~~}~~~}~~~}~}}~~||}||}~~~ +~ žĽȷϷɼ¼袼򄈉≑ĵ򀅆놄쏈򀃃˶¹»ڱϿߏš䗯ԇʈ獻̾᪑܎ɟƷڱ끧؊֮謴וлұْ‰߈ٗ꠯ы˫ڭ޻ꨖ݃㌞󆆘ـѺԓثߺ֖ٙ۵ЋµǷл㘔❛耎ʔëӥÈҪ͹ųƱƼƺÿ؆ӵㅐ¿ĸڿѴĿ눅²抓񃔔ǾӵͿĻʪƿʸĻŲ􎈎򎚚Ҁ˺苝򋱥سɿ̿ҽíϹθ΀̿²ǿϽ̷ѭ홂ʷŬЕ˅Ճ۶׀戎Ľ􁈇ǵ˵ľdzĺ􉜟±ñ۬ö掖ŵ֬ϯٻҢ³Ľþ»ŹùǾ¼ǽƀ̴򑑤`cim8mff57ff889kk6hlo6jdcaa]\XWTT\XWV_XZZ\\ZYQPTY^YSSZNEVX][a^XUZ[[[Y\ZZWJFGOSTc;\MROHj67=k\[^]__ccca_^\c;CBBDCB=:7@GFA>=;<<:888=??@B<<;;==AKIEC@BBABA@?>?=;87788=?@AA?ACDDCBFHKIIOHDCHLLGELIFEGSSOOPRNQUTSLJIKONOPQQPOLIFEB>;<;;=?@AAADFAA?A@==>=;;:97i8;>FB>==:9665hgcg88jiifj5799::95fhio;>??><99=@?<9ps;;<;;;?BBABCA@DEB@?=9:=>CEDFEDFEDCEBEKDAA@DDB<@D@f<>CGIHIHGFBCIJHIJKJHHGGA<@>DA<;<@BCCAGHilaDLFC@?9j;=;:;:j_gfMeq=<966`9=>9:dWp<:keFA;6gm_gZM?g{7Sy^dYq[aG%%!$#@UvICHmnP_LNKH-@W;P[f2i[bųʁ\Ufkij\J{bVQLuqaw\uxs{yt~^qep`VZTccTHrcVuV`S>%)&?42 ,1% ",H$58/CEAl^=ouˆ~mpY]ItzO[_i8]gǮ_{vakwpIWYvT{{pbfzjcwe*%!*%!&)000$)*+&'*)+22-/4447862442/226+230)%%+(+'+(+)'%% "*',1*1000,*12320.'*61520/%$&#%(%" $(*+(/)!$1++&)-)*)-)&*)'(03)-..*&47+3; <635:@;>=?@@<=@?:;@ABDDECFEFFDD@>:88@A@A830-7CHIGGDE<:?EDDGHGGDFDDEHDJLJDCBBHJPLKIQNORRSQPONPNLHJ?>FMIFFAAD@9ADGIJNPQRVVSXWZXZ[ZX[[\^_^TRQPSaaf]bv~BRmy`PmUi:=AdNEGN>X]mgj:7?AGS@BDEIMPPPORKJPRUZ[WSTRSTSPQTVTSTPTUSQKIOTZZ\]\[_^\`YUZ]XVZbea]\\]]\T[df\_h`^cj:;;ik_WXaO9eed^]c_ebalicca^\bP_gfb_\^adcfd_bb_]aa__]_eihfmqlnl``k\Z`\ZVX]]^]^ZjlchcaccaeaaM/5QSMCBFEUWeodbeikc^VUWW[]acfnlhcbcbm=:o;ABA@?@>=>ABDEC@>AA?:]:8^@^IMKKNOTakomjjbRA@BECAHCkoAG@t?CFEDw@EHEBDEEGFGKJMOONOIEJEKONOSRLNOLJQSSVY]^^_cb\`gmnnrkillgdbanot`QQONKE>DCDLQGDAAKMA>;=SZR^X\\][LOYOJRULh|vjgimorplrwvutprqsssqulbVW]cXZcddbbaccda^ZZ\a`]\YXZ^]\YVVSTTZ_a_]]][XVSZVVTRORWVSQPSRQQOQPNNRXQQWUONvfgqjegivnd{nilsuROX_^[[WMIKL|w{{sjd`bbZUMWHKVff^[ShnGHtl}vuvlitcc`dX\~nczAyf_`]]TZaTQYcg_YTRTRWYXYV_bXWX_ZWTYOXTTVTOLTPSVKGIIX\]akd`8@A93a^\abd[XRS\_UUcb_\\VWOCDJIIMXV`]^`TPEM[AONYiQ\45aY[SONEGFJX7=8c^TPNHDEDP^JPSPBMWYUGEW@cFYj@@+8GR7:>BED??9446113652345543311a_^\YYTTQKKHJHD>=::58@:??<7;LOSSKTZ[7878_]X[YWWUUQMMNOOOLKHGOLIHGKGKLQJDHZOHHG?DFEMPKFFIHJIHIHHJNQMHIITUTTOTQOLFMUQ_ZVFLULCHOJXKKNtH:DME=?@@?B;;A0435H9:7B]\98@@=>58<;;*A=9324777:<;<=<:75799775543giihhgkjjjfd_bfcfj5598]llig654366466554568;7iecbz.146732224645751010.-*)((+(((/)+,-.,+'&(.3/*(/'!(*,,0/,*,+,.*--,+%$!$(*1+ '&"53,+/.,-/0//,,*-!@ # "#$! %#!!!*)$%'(%%('&"  !!#$##"! F "#  3"!3202644243324 :;9 "#! ""#" ! ! # ! 0! !!#%&%# !,1)-2-26%.5+//2./.'+//,-.+,+($')--()/30-*+)10%%*(,/.,1,'+20(4--"-32,-,+/*.0.+10160,++**())!" "L     +     +  + +  +  +& + + ,Q     -5- "! !  ""/1-,5'*14 (4+ "&' (9%%?@"1.A#+*%70&H"&7)7!%.A,;* @919' !) /,< :1CO+&*$l5,%U3 +$#"+/"6!9!#48 3=<97647:><98?=BEGIFFHILGB>>630,=-0,#/..(76=65 !#+/?#$$"$#"%&!!#$(*+.000/1.+/125630/./000233213/230/+)-1577755868:52550/2553223432-4<=669448; !=>1,04&8641132779@=988624*8=<;969:;;<;78977;:8978::839=;=<349246431143446.;95989986:75''&#"!))16237:<73/./.1255688645416 8 ?@&(->@@>=::89:?"###"!"!!"%&$#"#" +,-'*'&('+5;?=973+  "##&"05#*%D%')((E&"##"$),598:5$#$!(!"!'''%).,%$ #c) #  !"""%$%(('($!#!',++,+((*'&,--/2333564/26;:9=99;86788GJX]L<5520)$""$,/%" "((-3.5.5+/4*'+.*=MSTTKGA@BEFGGFIKIIIHIGHKMJJAB-+09:45===;<;;;=<:889><:977:=;95562237<=;9;:9744;4311028632154`00.0.-.361Y]263/.WPZWQQTRD9:D>;86A=6ISYIG>:8QT,1-JCLR)(&$#!$%;>!!%$6!$$))-)/4260)08<@4-13-QU.572X10,-52+%&".$38*&005930)$$(JABGNLLGGBE"D" "#%,.,++-/+SNLFQ*P>EL+./2//10-,*SMINNJACLLG=.1A>=>;)/3:0.450OL-5)J052.1-21562*+,-*(-3.+26220VKS,-*())+//1**3+,*,../,10/,/-02-0+>C2**.)*+QIRPIHFAC67!"'7$//235:98;.1.+-++)+*+OJG$%)061000,%'*,FCFE>)% 4. !&/0100,*)'-5">N@>:862215632//0/.--+)&'K&QN'QSOSSMOLHFKC@>9<8?CC:3HD;4/(;@**#$,//,/7F789.*'+1:EEB36B?CB255=&E@=;63.-.;7559=>7*8/(,4.1730./83C!DD9556; <9942-,,)%'/=5.2.7G;2*'& $&0-&7:(*)(!!  &?B;8A8:444.,/8%")!& 2%"D>?%D9(F3.*%'6468;=>?304 '5&)$CBD<7B?4<4/;EAFC610.,**)+*4)'%&#"$$:>>76G@6436..@<0BA"A82313,08-,/583/**,+00./-04-./40/+-'.**,-*(-*+-&%&%#+.--3/*,,+//2,+'(,/*)11/--*-'"!&V,).,,.'& $-##'/ &,(+(%$""$'++(%%"!%0 $%%#*+))-$0 ",***(&%$#!$!"! $$$&!$&&*+()()*)*)%$%##$"""!%" ""#%"&!"%'$ "##$###""!&&#!!"))*)&)&%%"&,)0,,#'-'"$z&#,#$$#$ % .+  022333434422/00-.2/8632410/ ~}|}|}|}~}|}|{{{|}~~~}|}}}|{|}|}|}|}}||~~~~~~~}~%~}}}|||}|}}}|}}}~~}~}}}~~~~}~~~~~~~~~~~~~}|||}~~}~}||}}}~}}|}}~~~~}}~}}}~}~~~~~~}~~~~~}|}~}}~~~}~ ~~~}}~}~}}}~~}}~~~}}~~}~~~|}|}||~ ~~~ـπ  +~}~ Ѻýʨֿ胂􃘦-ꑖԁᄃ₅񄕔ȁֵ›ꔯ퍏Ҁԧ䉨ΕυƲ̾ĀDž݊ĻՏ؞粐ŚʕԳ¨Ŏދ䊡҂׆ƿƬĕ኎ʊՆۀɪØĭƿѥқ񽩭ƣᑈ򆇆ȫƪ䁘Ʈߥπܙ窧﯏Â֮úЏ؀㫨ǽ½Ӿ÷ʺ¼⁄ӾȯÀijŻϑꉐ䎇Ȼ߀½ǽ½տÿμĹʹ؀񁃀䃁í񀇅ſƾǶȾüŸ􄋐牘끄넆򆋉縷򀒍ˬۆߣʡž߀ηǯǾýƽѿȀ½ʪƺ˾ȣငу˿Ʒ낇˽Ⱥ톍ֿŻǼǿ¾¶Ƶڂ¾фƿʯŝ摯ºþêÿüžɚҤŮܔO aciijhehecffhjgg67hfdcifa_^\[TWXWVTUSUV[a_c\ZU_SNQPRPMTSORRTSRVWXYXY]YTUXUD?FP\[NLebg36m]Ud869lhl7plfg6B@>><;?DEEDB ??DCB@?==>>=:`9998;>??BA@ABCDEGHJHCBHJGCDGHGHIMOLMOZXWWUOOJHKNNLLKOVYSPQPJGKJD@??<=<:8hj6689:::;{977988;>;7jief78mq:9877ll9;mo879;;=@?><<===<;>DFFD?ABB@?>>=<=>>=@@ACEAADIIIJJIGFCFAERHCDGFAael<6j8ACBBAA@>=>DIOIIKOQQME?9>DHICC@?><>BCEE?>E<77?BC@B>AB=?SOGB><977jYfieP`::9875;<8f?;79=@@<;ohogWY_a569878767778776b^\^che_^_^`e[\k:leeq;tomklk_;8ljkjifXTc9:8mk:lQcai:@gW`jogh:CA89:46;<=>=8f_]haYW\_cfc[]\^`]^^c3354344334679:;;;<;:86352;<8>:3ZS\]U>]I2+(&%&$# #&!##!"01'(/+!.*01,0530//3'(+""<<07$!$">/P% %##$3Ox7#  %&"2/(0A0<=DZF+ Vh]Ll3D=0H?V{fc,CQORgy[bWnuhd\emqurX~Rb000224=hQZVjQp,;=G>.$+&Ujgco[TU=ppRXrKf|/>`Rlgaw]]m9nNc~X{VZěd~qXfrbylyFi2ZO/07QpYl===AHK3QY/)DIRj<@C=H@?:mlrurps><>@?@ABEFKMNOONOTQRUVWW]^XWTTISWTSVYTVPOQSTQPUWUSRUWUVYTQPV]cg_d\[Z][\`cgjfjmgguplmmppfdmi\Ub^_X[XV]e_TLFGY``W^d[^^Vcaa[]`b__\YX^ZTOLKJPTWVVSQVY[b^]adeb^\_a][aaaS]i\ZUWVVTUC1NFC?G9^^VVW`j67h`_[X\VQQVWYa`ca^XVXSHZ^^`beg`V[^^``accbehjfm;=;w9;:=9k;A@>ACB1a^8:io=AGPVROLGOV^chdcaSWT?:C@IN;fu<=CBGKKJIJND><>@vHNHEHDNRSTOLIIKT[[\^YXTUXURKGEFFABEC<9@>BJPMSUUPWWXZ^\\RNKMMPISXTQRQMLOQOPPNLOKONNMPRNQRONNTTQYn|d^SMABDGQWNIFEJJGwZLIh_VSYjdg^Ycc\]abo~~ulc^denrolpstvwyxyvsqoslfgiVT``aZ`[XWZ\Z[X[ZZY\X[e_^\[^`\WUTWYWZ]_[[__^ZWWYWXWVX^WVUUWQQSRSQOJLNv~zoins|Ucg_]]ZONNJJI~{sieZM6;E``[accZ]RhkwCIEHLPGFE@8j|LRRQMLNNMG?<RZcutcY7BABVXUUQKIEDFGGNLKHG{x?>CMMMRSQPJEDJRKLMILQMLKMKOKHKPLL}zrx{}wnit|B_k=R[gZWVPKNSPRQTSQMKPRV`VSROTRQPLKPQPMMIMJEDFFLKSTLNMOROTQONSYRQSSWaXNQX]QHV`WMQMIOJH~}rRQ`l;_EMLR]\[^bf_VS\WQQNKLNF}=KKN\YSXUPOEdZn@6;A_jGTNO.8;@BA@C;7552233201254556343431__[VSNJHJI@@;B3_=IF3@JC;=E7<;8>V;=:<:34]a3:87?9X>7@9A<:67752466579<:;:;588999556568.75khdgigffdd6fdeg56llkfffeff456754654e57997iefm//33324410345432413230031/--,+())*)(*))*,/.0+,*1)&''((%+)'))+)()+++*),*()+) #&+,'%4621+'1202631/( !!!$"!! "#%'%%&,+)))%%" !##!! "$&$#$%#!%$ ! " !! "33!5413585544!!!  !! !!  #$$%$#! &  1567 #!#&'$710&%3+441&/.3/30'-/-++*+-00--.,-/*)12..3410.10+0110./*'11/3%3-00'+/2..,+,0.+*+-/0.) +++,)()) !!                $"&M! + !  + ! &-8 + -/('$.&,+&,( '  -2&#!$5*,%$! (+#     "7CN46X?96 (  2)(!=A&.5P)6%.4U))>* 4!**/%4')"()#%#257@>+    + ! (1 /+.L&:3:D:"%'PT&;^%*0196-3+4")7 /+* +  +     !    +  #$)'#)/+&)-+)((.0-(())*+*+).-0.///0.//*+*$"!#+)'*././'%+7897865/+,33457878:889:;;8:<6218=<;=@><<@?@AAADEEHEFDBEFNQQUPUQSTVV_[YYZ[\YUTPTLR`c_biaA)C#v!!(>36!)0:!)&+:""# ::>@?@E%##$##$%(*././/.-0./34326631/0*15223623/./01..1200/2310200/159:3613341135:<;?A<;C@=79>8.-4/1-1.+/50)'%'032.482672:9:67::9975474.+)))/2310.+/25965689867:944888,5<5525784/" 01-+*/3411.,/,++.//22331//0+ -233479502345799889:;:="" @6#"!"$#(*77 #&,/*'%"(-47:775)+,%#(,!5B"#''*,++*),&!!#'JS/2-'((.000)''&'-2444/,)(,)&" ! '+),+,*../1422*%#&'+'-/---,*))+***&%(%('&%&(%&'&%%(((1DWYQ=:2dc],C! #,0)$"!%$#6$"&;4.,2=:<54==7466@MMGB<9>AGJFEIJJMNOMNMKIEID@AB63;:838643564657665758A<;:9;=;6338979<=9:==<:87877667<5455623323//,-RMN]\[[XZ.J?JOUYTMJF>:>CKQOKMHQSUXTPQOS[_4?@9785000TUTPNV+,+NHFB;7.#32010.'*"./:"&!%)*%%$!2?*01/+RNN--*'!6 $** 8.*+.,:0022/2;9<971/.PU3690S53.,/23/+#,4=:*$#0211.+)&'(P'),++)(CF;")'),..-)'H$*0+QM-G,S*,0---/-0,*+.,+WPNJHF@ABC?86;?"/9 /4=311/+QP-0-0/11/,+/1180//-/-,,)(./YSKN+.+'&('++/0*+*+.-/-**/3...-/72,.25.(1:3,/+P).*)DB;%%/..C$*).53468:60.51.-+)*-'KJB(*,63/21.-%IHH5-;""!5.$'##1.,-+))+054$K@B=9634725410/--,-.*)*)QO)OPPTTWVUROJHGICD@?9:?EGA@EC;517:AIHN@@94<863*+C>::40);751:?=6/0-9/.;BC@E=4B:?@5@AA?@@>840'%&.58?B>99/'/2-3842465249@A@D536/='?=<552.%(&()6/4/#&'?:342,(,4%.;41(+*%( %& 9A%C>88601/+-*'*&%'"@76?>=?84.3*%19228>;=:809A;;$$"ADC69@=7?:47@?A96122.--#(,)'&" !$DD>>I?>;#&"?;;>99991&,5@470==36;82031%,379810++,13/)/3/,..5/-.//.)(+-,,0.,+(($$)&+,.j,(-+.-***,0,*(***,.///--+("""$&*$&/-11-)*%"#""'( +()/+&%%" &-,+,+&*('%!(&'&"&#$&%-/#!! **)&%#  !"0"" !%*#!)*()))+))*-,)'%#"%$$!'#$!#" #!#" ' %%$&!$&%#!#%&!"!"&#!%&&$#%'*(((&%% #(''&+ ,%(6$.$#$"$$"#&-1%@42/14334300/0156511431/.323À~}|}|}|} ||}|}}|}}|||}~}~}}|||{ +|}~~~}||}}|}|}}|}~~}~}~}~~}}|}}}~}}~~~~~}}~~~}~~~~~~~ +~~}|}~}||}}~ }~~~}}}~}}~}~~}~~~~~~~~~~}|}||}~}~~}~~}~}}~}~}~~}}~}}}~~}~~~~}~~~~}}~~}|}|}|| +}}}~~~󁉀 +р qӽִց㾼Ǻ胈㈅ȼ끆Ⱥӭƚ򄗢־߁πӸ聅텂屏ǤҖϸވދó̴ܻئèԳὴɃܓيŃЁ⭋̅ȉ덅͋͡𻂒Óފ䕛㛫逺հŌǓ入ߔƶȤƕޢ⃐׹ƻΖǟӒѣ⌌伞߼գӋܐ؝莊ԏ▔󶣘֧σ€Ǽ¼ɾڻμ˶Ľ񷠿¼ǿƺ¬ȺŻ̖茕فޗဇ灈ǾǺƺĽϫþ¾寀ȱĸϿƟƿƩ׵⤭оݰɸǿ˻񂋢󖑝퀃Շ܎ȶݪʞ׼ĻúчپΟׁү۶嫹܀Ρٻʍ煏̔ѻогĿ³¼׉ǵ־λĠ鞜΃ž·̾ʻǺĹ̀Ŀ昞 bbgeljhehgffhgiklheh77hdaeaa_]\_`__`dgaZXZXV][W[]bZRRROQVVSTUVRLFWYYYZ`[QVWbaNDB?DLOIBBK\55\IL[golehlk9:i\8A>:9:>?@=;:89=:>EGB@==;78=:8<;AB@?>@@>979868:6eim;>>???B>?AGHGDCDEBCDFEIIIMLMKY[TRRMNMMLNNNJDHHOWSRSQKKKGFB@<;;=@B@AACB<@AB@>>==96ij547999:::998^7n8<<8f57lj89;>A?==<86mjk:?B@>===??@<;<@A@><@BCA>?=>=<=@ABA@ACDCCFGIGFECABEDHHFCCD9cZcn<FGHKDB?=<8798;AEGIGHACF><=@@A:8?@C>=ADDDCC;hZa`m9c78<==p;h]UVgda47989878969965kg^\b``gc\X_hfa\kkZ]g><:<67kgn;:h887ll]XQZm::9jS_t]XoBA@<=;6521SLVH:4-)'##%!&" ! ,1$+)3+*,/5,"%&0,$#)&0(&,#$&.-:##<%$& ! !%%7* -&.!%:W$#$'$"',1,8%"#+99"%D>P^$CaNYc0I]JXN@HXV`iR|vVa`Lc|SZcfq[UXGa9:=O;TO4StxcgF_OBF,'*(/.CyZGvehOZuQI]`578^`ebjt|XRcY_WG58H\FGkrVnskl|~wrb]kxPJd!6F/ $7&$(-1)F=1*%"$(+"K]4B®tlW`KRwbcXSkngU{mSGN_Uvt׫|͠bM^}dơHH/(&&+('-)*(''&((..$%51/0-,-36987689;9;732438::<93.'#).)&,),'"%+-,-*.'')#,/)+,)-*)+'02678399891.&)&#$%#'%'+.*)'(063,')%$!!#!18&.03::7<;;>DH( -55>CE@65754:>?<:1324;51379:CCBCD>;69;0'49?AEB<<>EB=65=@?EDDEID?3H<>F\5K>9;Y_f;=;KDE=lbacstiISNONTMPQWY^acee`]__Y[YUUPIMFi?0A46^GOKG7:WYafd[MIVele[^[[\VPSVZZYYY`ZRQY_\`fmridcba`]\^`_`_a`ecadnpkjq>?C?;tstutoWXRGoklh=DILMKC:9DD>68:LiXQQWPW`]`VUQQNOQUZYEXUYSSX_XHzBodlGNPSSTMHIKMMOPMQL?EOMQQMQRNJyBI[UOQRVNGFIOQMN\QPMKLKvzor8q?DhFELU^[SQNINMWVXRNVWYRTSWTSNLPUYSMPKOQLIPMGHFxEFHKKUQNHIONSSKTXTQOW]Y[[SSWYRLRYNJGKJHJhPd|JP[MMRTZ_ZZ^XQTUWYRQMG?@E}uhhuCQYWSPJJPvnOa@hl__HU9>FbSLIFFDLRJF@580PvpmfaZ\]^W\WQTSNLOSQKMLKJK|yqthlu~tyuqkjozyqxgyY`^fclPK]pqvvsaefeigldlfaaqvzEmqpglboxg_vwxgihmi^]]XTY_jomg`faXWYY_a`_]fle_eBtwyneqcz}qmgZ[[PMOKQYZY_ZP@lgzqj`aX^\]hj\\[S7TG5U[RF3RCv{ubulm\STV[^LP;3=DU[^_@HMyxhdue`mlerTPTegfeisug^ZHwf?FArCyadnwz{]ivvrlKM]`g5gg?CILH?wBNADIFv|x{owAy|||qkdltxilurjYbnh`[chp\fl|pl[PEaeYbkd`XTSYVZXW[XWSV[XYY\XSKHTWRNS[[UPNKRJHR[]Z^iZWP6<63b__]^__ZVTST[ccbd`\[XRIBIMKO[X[XU]4cUMBA?V\Q[Y_U`UVZ]YKR[`_`d41_eeXUWLDDGHKWTJGHPUM=4U@>:?JDFB+8<<<>@A:752141202224667666;7424d]WRKIEFCG:?87AC?55:@FPRQWQX^36:AVcZ\UUZaUUV[XMLKGIJIJPJQMLGFJGDFGHOJDLKTTRJMLOOPKFLHNNOLVLRQBKMLJPVVUQQPPGFIMMPR@:C>KDEMN$'40 +  * +  + +         ! "$!!   +    !'+!"(-0*$%&$%(++)&$+!#$.1112/-&)+$(+-+)*+31-))1328666952&.34_87787779>=?>:577:#&&#$%#$')+-//00.2022255689:7510110125411.0320-*%%(*%)/0-,++)0221/+-20.;ACB@EAB?83538<>8/.398,763(%',/*$'+248:98646416645851.--*'!"+3/.-0,./24778::788844321.),(9"#0%%"#),486,!!(031.0---*)-.1/,-,31+,03148;=87:865632556687866:BA<9>$"$#!B>=?=9&()!:8" 87"%**!(-2442-.)$278)19B%'(*,.+,-+%&?-5?>7<472M=9/+$!6042!'-36+ #%+05/.,'#! #%%/23/,59:<;:;<=;976767;648;:><9478862448845<8:98.05589>MUW>48=BFJEKH?=AAHHIA9:=?EDAOSNCDJUUSVQT]ZOKH@?EF80?A??B@?ABA=;@C@BCC?;<:=@BC><@:41376630-+,-.+..0013457543597423545779<;83201472a_45b[_2/.-,00NFPNSQQSRHB=?EQah`]YYYNLR\1[\1dcd2YVX\YWU^:@@??6.,.-SURU./,PC?7/,+&!%(*3>?;889; 13)22+)&#),- ;,,PGKLS,02+$/-%'()'"!"&:1//3-5788210/.-.465R*335.04:2'@BBGJ!1)1#*,0/0+()+-SNM-/.-0+NHH"%*(-,*/0,)FA#'62/S00P4.*))/1./9//-*,+SRLEGJIC776"E#4!+054//.*P.,313/,034/112/0,)-13.+-*-/-+0.URK)+*DN''&**1-,('+*.-*/0.,-25123..22-+/2+J*NM'*))IF'1#0A),3'),.463350,0223.-*&!#(JJC729#-33/-)).IIF>:,5 .1(+'$5,(%!#"),&",C@?842366262/10-+.0/+,,+*O+TPQQNPQOMRLZJNNIF@C:+'4>>@AA487257:6;6/-8;?(L;?=9<3>D71C@@7;8:7.,-*%+0;==:584.2411/7<623$BJ?3?8:.+---, %$%() ??=&(-+-+)!&)'!=") #((BDCC;?"@DCC;948??66=:5-4<8//68;168B<:1,$78/3851-*).-/.,---++/,-,/.,&$*+)(,10-*(&($!&,-+,1)(",+.+,./,**)*-21032//+)##%%&+)-*(*0)% %& %'-&+&(**%$(+(),-0/((+$ $*)"!%)%'!!N.*($!  "!&(&'%''%-&)%%(-&(),*$$$"##!#%!&#!!!%" # #"*(&#$W!$!%$%")"'&#&$#&)))&'&'!!!$$%' '! $&"##$$# ! 2.%B23321.15433/324330-.021Àс ~}|}}}|}|}|}|}}||}~}|{|}~~~}|{|}}||}~~~}}}~~}~~|~~ }}}~}}}||}|}~~}|}~~~}~}~~~~~~~~~}|}~~!~~~}}|}}}|}}|}}~~}}}~~~~}}~~~}~~~~}|}}~~~~~~~~}}~~}}}~}}}~~~}~}~~~}~}~|}|}|}||}~ }}}~~~ÀсÀՀ ʼʵť´킀ſ灇ꊕ򄕀˺и򅍘̵邏ѿԩ쎂Ī쀏ȿĻƺхԨ񂷥¼ã歴ؐҝ퀙۔Ǜꂑ̤π̘敠Ƃʕő즶鰙ؘ䵒񀶂ퟑၹ挈洪刀獣ƫ߻䄣񾄣ώɬ՛טﮒۆӜ󚊕璁ʌኅʽƀֽǴȬĽ»έɰǯȬźǾҹ˷½½Ʀï߃ʤ򅂇׻±Հ髉띡̈́żȻԒǵрռµϴ˫ѕſҲ爀ĸľƾȽº¸ع񞟣߆ɱȜƹȻżîǷԿՀ˯ʿĽϿ½ɇǺ¨‹р̽ʦǻؿ޽߄ٺ󂀊㺥½´ÀȵïԴ˽ÿƭ˅·ɿƾŽƹ÷ʪ࿼ĺ˽êіaaddih5fgjqnmijljhh4574gcecaba^_]Z]a^g9jfih4ded_^_`\QQSZVYZZYZXQLLRX_fhe\XWabVMNLIHFILIGCISYT@Ug^[^a__gcc25>?A=;:;>A@EGFC;99?@@><@@:85fh8:;;9989=><97>?>>@A@>98:?><9988mjj9>ACD;<<=@FC=??>ACEEDDFMMOILMQPNLNMOLJMMIHJIHHGIOSKIHIHHHDBBA?@AAA?>>@A@@?>><<:9756799y898:98migm7jfhn9qj8==987:;=AA>?A?>=:889;<=<<;<@==@CA?AA>?AB?=?B@?>@?@>>>=A>>BDJHGEDCILECA=h<@@?=?=;:;>>:;AB?>???=89>=>=:68a75567:<=<:=<>;jmm7>6>CCA?6knlbs>98e86=OZVH?>>8iae79lcmq8895967:;8=><;<><9;:8?8fmsg[_[7989;j7678fehggh^d]b]Zed_W^idWeq=ED>lfg>==92/3451LB3F7*)%$$#&'   $%! .41//02$!*/-+-+./,)*%/*.-->+/*#"53+ !$-,%57' +$-'.3+#&&$ &";A",B.."=N]GvR]VVpf~^@3*443243W88>H*0JT~mnqngs]_\\jW|plSiYgeiWvHIbYENHZxTF9XNRaodz|viEUWaUdpHR689KZFNIFhn^R_KDH&',+"fRXgSlomuWUs^G:?:[S^kVMh[QhRlITiq|xuv`kr}QUN:C>'<$03!!#G;63,&#   663˒|xl~bpi\mvmfYjcz߿a=aoigfz35/,,.)#'(.+*&#'.0-+77-10176==72869:::42236:;<>:3+*)/*#*.+.///-*0++*'##&**0%%.411121526475//+..-0(#''&($.**+,0.126%&('$! #07'/9<9>>@<8:"?,#(,15FA8270005,+4@@6+-17420+49@==8845=<;>?@HHHGC:9:?HF?@BA9@MIc:B@@AA?AAB@FIKMOPQSUXW[[X^\\\ZZabVUVWXVVWWXUQSXZ`^blZOR_jebWWZ\^fjhquvvz{?xwwtrmlhjqrz@>t9lb`V`fca][ZchafmnkZ\iaabefa___]_`WPAaD1DC(-FRGhi^RPZPI8>@PTWY`gigh`[UTSQPMF@eaSLHOK[FYYDPVT\a]XQ^ZcSM\dfdXRVSMNUZ\^[[YWVQGTVeoqjb`c`^\]]__cdadfcc\`gf`_PPR[_bbZdidU>ITQbpvtqak6]>Jnlm`P[bbbeKPWY_\QVUUPPKOPTRNG:LO[]U[YTWSWURPNWZbb]_bfge``a``caZZbgabghhfddd`aciecegfdkiedgijsxv}w{mafq}||zv{z}|{|}xutuuvvx{yz}~wszyytqonjhlnkjlne^aeg^\`bfddfa^`]aea]aa_[SNLOTZXWUUUTVWRMMKHHJMMNKORTVTMO8HDAtJxy}UWWZVX[VSQRNMRXWV[ZVPTYNHJmfUWOH\hqzy>ACJ?DJB;BS,33<=<7211064002325579;97753b\\XRMJFGC>???CD@=B@=FEGICMScXdRTgZeZVX^[SVWXPJNIIHMFKOSRKIDE;6@NaTKFHHJKRPONUYVRACEHLMKUYfRLLLKMSUUUSROLNKKJOPD9~BLH=RVN3GQD6GJFA8?DB?E6@EC:=A>G>3@?8_Qb^38=9T<@?8B?<7875568984559:89849>44677;<>A<76555hhijgkk55iebf5hg4jidhfd375355676654i5hdn..0042125:871243230./0/0///.,./+13120/00-./1.((',),++*,,(&&(,0342,)*/0+&&%$$#%'%$##&*+%2-+-.+,1/- //530"&''#%&)('&&#$#"$$!!""  #'#"""#""! !   5448743783   !   ! "&$""! "#-D231/46.5/','2.14/55p/371+,(.+.220/*+(,+*//,'*30)22 .*,,0..-,+)4---)0/+./)%,031/--*-./0..,.*)+-q..//.,+)*  + +  +     K    + +   +  + !*(H=U53B,./1'*)2!&(H #0'> ' "2)& +    + 7W:01.(9VWEH?DF=5M<:A!%+"-(5"?5  )CGI-!&+        ! " +  !!#" + " " #%!.)%""!+,$ "(0/-)&!!**))),32230('*0773+-457;89:;:6768/24659;=;=@=769;<>=65>@?C7CIINKHHD932+3421..-2404875,08158<;9:;88:;51(>*##*$52.'),'# *-048;=<<83000./+&!1/(&#&$0#.'%()/31/*1-3,(1655-)**(+.113110...%,/9B@857973343568:99:6736><76,,.2565/7:4*'(2:;9917,!+-)*33/-+%''& "%5$&'',.-+'#$#!;88.$.6:;=R3799>;3511-+'*,0+%!$&03-./++(+(&&$+0774999:84332144-,48339;;986z6347;989:96:879:<>DGFLUX[XMFI@9:9;89=:7:;872-,.2654355/*,**+,RS---,/3563dbXMNQV0`2g^ae`YU)%#EH@JJ,[YNEHJIDFLM[67797895212`ZY/b_]_[\1^3755996147/,,,-,OKRPKH;1)($"0:=FEOPHGJPNGE=1!/-) +(%/2"2FIEB=$().0*%#!"')*))1"'-/+-<016225382/243//20+(/02331133+LNQ*+)'%()+)/.01+--*O),*,,+)*OFM0120-/-0,'*)%),0,+,10--)GJ,240+53/01.TPONJGILEB>45>GJA'I535200..1.164112/2000/00,*/-0.,,..-,*U+T,K)+OCH+')-/+/+'&+../+-62-1119540,35120/)),)--/-+.+01.*.01..),.38751..*+*++('<3@A62112<>72;/-6;#LJ:=87;28>10>>:2.35:7,*('&%57788;52/+)&##6-4B;76?@=$A:<:7=88200,+&!&1.54/("(-&D?:55/580&'6)$"#B?AC6*36CI0-+3) %"! # &'2/:"@<;364367:H9+,68<;A;9:>61?&8 #"@6AE)4J%%D%8@A7HA2*.,/-"#(! $#+(*&FAE@::>=<724;614219?@1+0;8775:412/02/..-+,-,+-/*--+'('&''(-0/*&)'''))(,-*&!'%)*-*-./++-,)-/.21443..)%"'%,,*'',31-$!!&#A&)&+(*%%+,& %(''"$$(./*,,&$# "&&'$"#% """$,)+($"! ! !!!""#$-&0'(/&/(&(+*&()*&#%"!!%"$&&!" #/)# "#$$'%$$)*&& !##")*2'%##"$')**('%#$"#"&'!v '')&!'!"$! "  /'2.#113313342011.32/20.152܁ȁ~}|}|}|}|}~}|}|{}~~~|{|}|}|}|}~~~}~~~~~~~~}|~ |~~}~}~~~~}}~}~}~~~~ ~~~~~~~}}}|}~~}~~~|}~~}~~}~~~~}}}~}|{||}~~}~~~~~}~~}}~}}~~~}~}~~}~~}|}|}|}}||}|| }~ ~}}}̀~ڀȁ +ƁÀ +Ȁ ýۅႌ򀅍쉋낊Ӿꀇꐔ¹ᙝ̶󌡹Їď؜ȻѸƯևý€ļꏶ㎼խΣꇅۛɔȕŎʨ̠͘ߎ̉ܧ͖ࢺѽ췆蛭혤ˆۮԒԃ݃ƨƁҴɲۋむڹހƨ˽󿙣ЏՀ棵ӕ睦ⲯҌ֎Әʛ؊ŵě񈐇ε½³̻ʻĮżĵŽž頫ˀٽͿſŽ򄊊Ŵƕտɖ򁅙ưʸϽ񇊃¹ʀødzőŻ⠹πͬ¾͸¿ǾƸûµ߅Ƿ󃀎Ԟ􊉌꒛負݁Ϝ⿩ķƽĽȝө̻Àͣƴ̾Ŀޟλž߼պԿ倅၀ľݿ½ĸɴ׀䁒Ʒȳꆀò˸݈֝ƻ½ùþ÷Ǿ´ȹʸƼऴʌv`ccclddh4667kji6i55ff446;5fb[`5YZcbdcc_^a37865fe\WSQTWW[_^_cc[RQOP[am9md^YVYUTRTQJINRLMRLApg[a=TSW_17;>CC??@99;:?FBBA@;8:=;;AFFA?>9jp<=;99:<<=97BB;88@A@?<<=@BEBAEIHEEDJJHFKLIHIJLHIKIFEDFKNJIGHHFFHHGHEDFEAB>=>==::99;:9:::9;<:887%lgimmih;=;;86778;;=B@?@@?=<:88;<=<><<>8<=:;<>?>>@@>>=?>;;<:>A@?:>?><=?>;=A><86;?>8lm9986776446788:;??=;898phko@tdh69=@?@=<9u9s;::hbj=HQV==@;88gfg6:mn978996gc9898;?<;<<;>B;;<;7itk_j77998898776994k98iighW?crkWP[fV`gcgdbihf\gklgack9@><879fsibhg\Z]i;?gHZgg9mi677ih7724889lhhc`^^ip^U\ccaaa^`baa_`ad4545659889:;:7521689601RU434>=_nx-4*)''(*!;;;<>$'#")+12$93.0+/"00,+---2-$" ",!$+ 0:=JR-UE1T8!-'(,""&#) 5  &/6!&394$"  %#&#) "%4&,+RJ2"!&@PTQ[fbiraHO>953510J%$bmlg?HXZW\788LI;7Heuxx^of]8$#&+-.ZYSfiWlgfVKp;::N{dsa[v{[dLdJY~ZOy[upyH`xX_07VO>S)&$7>8AejTb^^`jRikƻbhMoW{tk_-9}cruiuGMXsogw>4/11-)$$(,2,'**14.',.)1248;;>715889/,446=??>::2-/,/8==;?B<5+*3/-/+*'%&+*(-21-''.+0763.+1///266/0/,,+-+,)+)0488,53-40.*,+257>"EA8;FKKJC6hn778<=EGLPMNPNGaKj>rfZd`pHJRPIEEEINUZ[Y`heejstTKSJIKPPQNTXSGPOLU^cgimhhdd_]XSPV]_XLXfnfadjhif```agd_Z^bggkhzywwsjhneffcjgfejkbquuwtjlc_`oojjgedebb\^adhinnhgppsqnoqx}uqpppuyv{}zohdilrqjdcccf]YX\\^\^difb]ZX_WUY]^VTWY[]]ZSLoJUX[XV\WZ]^`^[YTQPpgcWIk|qRRSY`]Q\[YVT^]VSOLN\]UNKKIJ|h_bX`h|~{|xu|B=[DP~yA=ycfGEHECC;@MPTIEQRLKJE@98nSO=>B:NphpM^g]Z\_VSTOTPPRKJPSPQSJOXSRKIKZZXTPRPGGLRMLPKKKILPMMKLHJMKP[MQSLOXTQQPLIGGGFGIMLyxxT_SMIKOQNHI~FEnPaj^ZTSSRTKNUYSSQPQUQNMILOLPNOROQMNJHH{zGHsNLO[WORMXLGSP_TPOQVPNSX[YVNMV[YTRWKvPUNRTVSUWWRQQRRLVWZ_^[XSOIH[YJHF{jf`8l_XYccEQ_[LHRQ||tHjirnp_s;RIaTE?=>LTRUPIhYGJLvibbb]Z\]YX[[RUXTRRRTRMKNKNL}txomkkkop|tswpqwljhkW[YWDOapqQ\lcvtxoU\ryvs`di]T`hrxi_lofmpmgYYkqqa[hljlXSNLLKXWdhfvd`^`[T^XdlnhrzkkxxE|xmmytfgoa\YWSP=AOZXec\UNZ\k|yueX^^b^YabNc>;R_c77KI|noxwh[WivcbNUROSXZSLWF>]kljmpowxc[[Z[Y]xw`U[cpi^ivlntdjbkAAwlbzZ`Dzgztxlngmp\`fmblw}@>>ojyxTTUKAwtsmehpz|}xqqib`n?>>immknobban_bngh_]WnbshXa_gae^bZZZVYXVRUX[[VSSQNLKKLMVUUJPONVPUTW\YSONNSU08<=dZ_fb][a_\Z\^baiddbfcaZTLKKLLZc66hheSHNTY^_^__\W]66[LFB?JGDEGMUigbc\YYTJGAGPRSJJOG1U6FFGG<:<9OJ(06430///335442134244488:;<4542c_ZXTSMJECA@FA?ECAA>?CEFEFJHQTWd]WZRVW`WVONKKLNLEPGDRMMIJJEC:3HXQLGKKJJKOLQ\POUQIFEGJKUWWSQNPMOSVTUUUQNPMJJIKF:6JNHPSW1HGC8HIC=:99:>I=1JJN58>A@:77>:IZ:_56@B:@A=FC=:986589;@>64456784574445766;<98=;9666566798664cechg44giee`e34677536667987qk@00..400352242311,//./,,2/1/0.-,23.+)')*)-0-,./-'-0460.+(*((''(%%&()**'&((45+,*%)+330   !$#4!"!%%#!$$!"#$$!""! "$""!!! "!!! !"! h6347863!!    ""##2244122504971/4"%'10033-,/81,0./0//&+;21)%)1*,211-+.-,),,.-,.014-+23,+.3/!-1-/,-+"101/.,,28-')-,+--+-...,,+*"&   + + + +  !   +     + +    +    +1.//@<=C8 +  ( "&1> $.# 0#$% ')''.  {!"#&& %3/=B4X=:#! *0D6/6 #&.8!(63/0+1&!>*""5)  "iD?JKyLsK*;%.3e^U/xN# $F465)!!#/-$='#'"' + + * !      #!"" #!#&"    !"(#'*)% '% %,%'( "$,&"$%%**&#$-,'*47873-!(-121/--*-4589<<=>>=?A?<=>@<>@@>>==:668A?=7:==BC@@HHKDCACGHFCDGBCKI==BHKKQNPQSVXWZXXWO>5MQV\ZXZWgf]]^N+/111%)!3#("#&++()( !+%<2>"%#'(/*%#%**&&&%$#$%%&)+++.//14445137:653897:574256434432.0985/.(0*/21.,/31/325=BCBDEFEED@=AA?930.1>#$"3.+.520/2676875-*/5;97<;;A?<)3)!(3$129 "09!)%%%*-&+.'+()/($%+ +,/,54624464222-//20-165410/7320((*).+.457989757879==:8695954=>>4$-2#'&&%$&#5: 2!#4315&*0/)%&#36 &',/..-,&/5 :4-33@)+//*P)-,/15965=BIH/"' "'''%,.*"&'%,37<>A=?<;51-'&(-/-'3;?;8<@>=82236:62046<=A@NVOKHLFC>=C:;><@==<@A;GLMOJAD=9;FECB@???>>::<@ADFGDAJJNLHIJNQIGHGILNLPQOD@>BEHF@;;;:=777:7:87;?=:64283258742556897/*:)1564262699=<:8]\VV\311bbYSVXZZXJ:43-(CPTSX^XRSTJ@MSS[3339>;e_ZZZ][Z[Z]_4:8553:841102<:4.++,,RUXSRE3/5/29GNSjWOSGGOGDBDN$+%,J?>!9/9&#C'MEK&!*-0'$/.**)&!3!!1<=+9=7369210-201/*),,+./).42/+)Q-521.-/.)(.0,,,),--,,,)K*-+04*00*,2/..-*)('')*+--ODCB/92.+-00S.++URNKPPILMP&%C9IPKV/=<>;>=FLPQLEEFADF@>=>0323&.:EC+192CAC;,3@A@A5891*14>C7/8:48<;7//4.5885&" #//787C5322/''&39>:>A89@?%A?99C?57<1/,($!&,,650+'./6@AA5-4131/33'/%%#&A::?@7,(28/0"&%$''+$%(347675=B7531213DB4,16?5-8?:81DC02C#?5B?A896>?1//4/4;?" "<:?:-+-)$EH><<:7;=AAB?<<8559 !3898:=621;33<7:552>4=;-5383725..,+-,-)*,-.*)*('&%&('.++%)(&*&')*-+('%"&&,)+0/,*//,,,-1164314020-&%'&$*-/12(!"')*+()()(++$# $%"!"%(10--)))&""!&')##$ &##"!!/,('%$"" "! !!"!!"!&'*3/(*$('+**&%#$%$#%#!"!"" !"*(&!$$%$#%"%-&%'&! !"$('('%$%$%(('())&%&%$#"$""##%(+# !# #$e#& *+00030021000:7 ǁ ~~}|}|}|}|}|}~~~~}}}|}|}|}}|{|}~}|{|}||~~~}~~}}}|}}~~}}}~~}~}~~~~~~~~ ~~}}~}}}~}~~~~~~~}|||}}~ +~~~}~}|}~}}~}~~}~~}}~}~~~~~ ~}|{}~~}~~}~~}~~~~~}}||~~~~}~~}~}|}|}|}||~~~䀆 ~~~ƀꀂȀ 逓ǿŷԁ򉍍񌉎悕ี͵숔ڧ酆䁊ȕԋðҸ񋠟¿¿Ƽϻްͣ󣟥䧃řŃҎ靍؜ȕΑÛΏĹףχ̌鏍꥞鿻牴״ډ܃ՓڃIJ⎌́†π֗¹ɧ˱񍊣㞇餇˸懔ѣԳкݡՙȽϾ¶˾üĿĻ҆ƸȚĽҺĻـο݁󯸘͑ϟԿƩĸŭ·ĄɀɹûĽŝşټ˼܏ʳ޷߁žĿľýǺ ûނր󋇀ɯ󁋟⎓́˷ʷҼǿͽκǿŽ½Ʒȭ¿ú˂샟ƾƻþþɰҀĿɽـ掑ȷӂع̳ɿ¥匟ûƽ÷ǿ¨ɾƺúq燁݉􀈎|[]cdghfemhh565g5h56hjhhcg:87c]_`b`[a]^b_ZXZ\0;755jfd]SSPJJ[X]ehjb[SPSTXbddgeZWUUTTVWTNRQUWWUT[WS^\Va\TOLW7:7==>=>AA?988:98::8*:=BCBCGKF>lo>@D?;;;9879AEA<=>???DDCBAA==<<:;:>?><;:=>?<=?@@FCA@DDFECFHGDFGFGIHJGHHFEHGINMIIGHHFEEFFGEABDCDA?@@>>??>=><::<=;::;<;==;;:99:==9:;:pik6h798;<:988;<?>?@=<:N;;;<<<=;>;:=CA??@==CA>>><<>???=;[`p:<:;=?A@@<8p:;<;>?8999p88>=::9:;:=;<9==<8;>;97dbadj9:99:98978:869:757legij`aZ^a]bplc`hc[glkkee\_ece;8;=<:9f\_bd_WsCGiVijqlhjh8968;867566:7jfcaeaafqhdecb`ba_acegea_\\`345554478:::9864273V1RS057<>;bD??F7//-&&'&#>>8885: # 344+..*' (*((&-: /,+11,.10"@7;@NN04ThF1.''&'#.5XY/  -)?EY<=2! $()%%%$.D'8/1M8$%!%!0(3K*.,*,b[IRW\}cYQn:@;=u[~sedije^Rb}p}gPpYgamt}Y]cgk^2327<742?O," !!& J[X9?Pks\HO|}uo6Tk~bwX'VWFnh֣xqi[|qpamgmUaI85/,0-)'%&)%0/$,1,67474:7333779=;4*-/9><;>@>;93./<:8><<82'/-07=?:81-+**)*#+)'(%*3850/.,001451551330+.3322235;:<82)!!)0,7?;BGFFFDD><;A54+',/>DD@754:=?<891846<9879;<;2==;:==>7A8?FKHHIKKNMNMNNLMNNNRSSRL@CLNNPSQONPPKPRPOOONMHGMLPRRQRLIJNMHGOPNTTUTWYYY[Z^[XZXX^cgjehigeiqDNpq9FHE:86l;95j547988?R[PXBOft?CJSWTQOKGEFGFDCDCFHHIJLNORPUX[Z\cT\_deca`bb`\Z[\[ZaaYWSRLOTYZ_`X`\]ba^^e`\_Q_cihgfdjihmy{wrlpqlmpna_9oU5ebiA=SXZ\_YWWX[hiF@!45TLGN3ME=4BCP?4H:>Fauhfgdaa`OZEY[de`XWSTPL`]efNG9Z5A:>nfY:HMOMQ[dghd]SVYa^QSPNONLPUVTMRSRWZST[^^X`eWErOPW]aejad\WRQPONNSVVEeb\KHIQORZOS0MA>M;T]CYgiwolSEP^p_f:ssAA7755;88dZ7AEJLOPOOPOM97>>@>:EIJCyypxxw|~}{{~{IPTY]bde]aY]^WORRROOQTS[bfffhgjjkkif[IFHMX\\dcWY\cglkgjnligjslsvv~{ob]YU[YVIDMFGY^TSSY\_`a`]]YSTX\cgjgigd`][VVRW`eikhgdhjkkmkffga_giijgkkjjkidfec`[W][[\WPMTVVSQU]ZUVWWTW[_[URONT[_ca[WYbhihfbdgeebdfb`VTVVXUQxdq~zSQTXZUTTPTTPRPOJOVXQSPKHvuzxttrhcyslkgkqw{~KQC9Ycw~HKFFHCx@AD}?DB>?gBTG@{~xkffkywyuzvfee`fqgrxjtrkvomd_]Z[nkeZd^[g\Z]_b^edaY][YZXXSVVX_YSLLLOHONLMPJMJLSVZTNWVTYWZOOZ6655haVcebbd^_Z]bbaac_ffphcYRMMKHU495\^\bYMPMPYaY_^cbaa[TH;?DGEGCEUc_`a_^[VPKDGKQKGRND85?BHI=8:6BCCP/5056.W0221420453850238=?;44430`_\[XURNKHHIEEFDCDCB@CEEHHIORY^SXRYY`[VROKIHENHGGPTPJGGTLOD89FAGCDAGEEKPLQJLLNJGNIGDMQQPNMPPPRSPSTWSQNLMJIKH:74247888;;87445999789:::<977<>:756554fegigdaaadda14779:7766879hy,-/.032395312233313/,-.0/,0-.1.-++*212.((&"#,),/23.-)')*+/0/13-+(*((*+)%((+,+)),-'+-),,('#'0!%#63 "  "! "#" """##$! ""#&%"! !  !   ':664 P"  !67$# -146 4=#%"455+(121f/,,-.1--./,.*+++094.-/+(,,,0-,'*,)*-),-0/)9!"1)113/,.-21/./.-/4/..-,+,,,-./0.,+)((     + +  + + +  + +   + +) + + + $  #  +(<*.7-4$   %&$!$ * &""$! + &""'+"& ! { ')%!.+ 1%(3NW313#00%4!"'5)/ &5$/ */%33Y&" (&2,#'&,DYOoP<,%e]VT<-)IPOKcWl 5&C:69 V,0FD?%("!" 5   +     " !#$$"  !!!$! +  + + #  +  !'-,++*)&%$*##*01("&&#$#"!&(),*!+3+'%)0249995..--.,.01*1)/5978:;@@>ABBB?BDCBEFEB<34<==ADEEABEAFHEGHGEE=""&*+**)(%&'%')(()+-.1/14658;088:997899630111/5510./-/12244/40132228522*46<<=;8==>BJKID@?988:811;)317-/256/-,,.57! /'%(&&""%+$!.<3254343+2&0/431,-+*'$&')+""." 83.$''$&,13563.0285-.+*(&&),.-*...12-.121-14-#=0/36<@C<>:3/..200444)?@=1*(--,0/,( !*/!*69A<9,&.925 ?B%$.'"%*-./000-* &)*$?CAJJIQSSOLPMT/248=>=>78024.')()'&(**4;=;<==@A@?;9/" !"*..56-05:>@?;=?=;;>C>CGEJJHB:843642)&,()7<4139;<=>>=<6116;?CECA@<:6312-2<;8575673/-233/-0663431/368842/.15:=<634:@@?=:<>@C=;5753[SRPPNMPOID8CRPNUQWYVVTSMJKIQPTb225696552aab65c__230.*/5701/YWXV-W*QRJDCLNNHFA@?85IYQKA>=D*FI-))*-).///,1..4,//25*19261../12110(&.40./430.00-+-03/;F7532-+'*-87-))NB4-*-+&$ ,+6/,*,KGFB>CBB+2%'$12&60(#5$2,)($('%A854331/1/456314500/145-MU+,-YTSSTTLPWWQJIC@:<LGD;6,)7,-&2,<-(098757@75@<@>D>55.919>4>>:=I86972-*/7:57=&D;6:C>:>58465;?562-3767<464.1/35F>7=;-;?9>#>::@=8,3 "BDB@>::DC1.+7/5@!.%#ABDA?:789A?A<>?64425;7:@5>=6?::33N421=<9373/8343454651-/0--,,*++,0-*%&%($))'%'$&$%'''&"**(+(*$&*/-&/1//0*,+,10.43:65/+''%"')+*/*#&%%'*%*-0.+-+)$"$"# #(-)+,+**'%#!#'#!&%"###+*(&''&$#"#$"!"! !!  #"##$()+.)+(,*-+)&$#""$ %%#"! *$'!! $!" #!!$'$%!""%# &"!%''$$%&'&&'%''*(&%&($"##!"( # $! %!-+('#'0//22/..01/+4~}|}|}||}|}|}|}|}~~~}|}~}}{||{|}~}~~}|{|}|||~~}}|}~~~}~~~~~~~}~~}~~}~~~~}}}||}}}~~~~~~~} ~}}~~~}~~}~~~~~~~}|}|{|}}~}~~~~~ }|~~}}~~~~}}~~~~~}}}~~~}|}||}}|}|}|}|}||~~~~~ЁŁ߀ 鑢÷½ȹ풙CѶ속ނ蓘۫综˥֜둻陹Àㅓǥְӂ鄱ȿ÷婥Є蓙ӖӏմӶ뇷ʨ缛ٻ؎ʐ⭘䞯Ꮐۛ׃۰ʐƤàᆅߕٙьݣΪؙ匌ߘ굄⟑˴و샌Ůɡͼŀߊ܀ؔţК㊐͸ȋϹǺξƻԀɯ̾ǻ½ΠмľπʾͰ¿ƔΖ󑜂ʧ肎Ͼ˽󁀅οՋϷȐբ߀©ډ÷܂ž÷ȴٳԼš난Ҕ놖뎢򂆔ıɿºĨʬȺ񂇎ͩǤҾŶüѽƪ˻ζ¹;ƽŸźשŻȼѿӂijȱȽؽ޴퀁ᄀᑀͿҳۻɾľղφ÷ϑ칺Ѐ»ƵɢҮ"Żŷ½ĄˀƧ^Y`i857jm7jje3bf46956i4dZ]h5:ha^hb^ddVZ^[VZXX8@876fbf\YXSLJMUZ^cdcaXQS[^^XY_dha^_[X\dZQMPVUQQQX[TVSOVVTTQQT`8:<@?@BFFA:97:>?:::;0<=><;>ACBC?68BF?;:<<;=>;?CA?=;<@?@DBCCDDA>;:;?<:7975l89;=>>ED@?CDGFDFJHFGEDEGFGHGDGJJGHJIIIEDFGDDDEGEEDEEGDBCBBBAA?>?=;;=>=<;=@<=?==;;<9::9>=;;9l88ij57:;;?<:88>?;=?>=BDEC?>@A>=BGA@=9:<;=<><;?@?C@>>>?=>=:<;89=;lg6<;<7789997789:;;;<<;;>CEAEIJEDBEE>@;:mpkl65898nknk7;?:mo@:;>;;<>=;8kb`[]889;988:85ej7:667keg686jjkf^Z`kmuphfckmkhhjbY^a]VZZlB@>:mf]fSQXYa^\in_^higlff6:cbdghkijhffcdcdhf`ed_bba_b`\difb__`_ac45444569;;9985;9:;/U.9887;:`Gb?[/JL73)&&##";;94336 957454&$&0,,F+-)!4/.213#&(+/1)D*8J1=@6%*%'& 42]/  +*-EXO$/ )!)##&#+86=2@;DD8@>QUZpZZR^Q_Xu{@^LTGi*OJFKAWUgIKdOaSEvcF[=b^'A0ZY871V1905-.+):/<;3/0598:=?@=<:1-,+.1562015603;=AA>>;8/130+(*.+*($!+1-2596A :4<2789::8;79=;7/26 D?7+  *:67=HMGEDE@:90/-4;DC!967?@<=B@BB887468;CE,1FFFCC@>>BGE85:;559=CA=B?>GJJIFJHILKJBGMNLNRPSTVOSVUQGQWJZURSNMOQTPNPNI;;>FFIML>@GBAABNSTSPWRWVZ\[[YT_``bddbcioihl]J-AEFHMK?;9=S[^^Ba^]^^`h>@-GO@?>7gck[TYPOMgfDTBD(;D/]8`VNR:8BSe9`@OIMF[8=DKUZdgc[WYOMJPLLKFGSRNJIWQVZQ[e`[YaieXQYOWY`ih^Sb_TjAF?g^UB<_V2_,9>OD9@>6B:D=N59NGDNZZahntsrk=vA?sokmAGF9_6<8b>PIIFC@E@BIOSLEGFE?ADB=bo?vstrnnpqsIKTWRORTX\^emki_[YRQEN\`\^efceadhghecaXTX`_YVS^dkhce_bfnoiz|rtmpq`c`dben_XVZ`a]]X__\VUPMIJHRWX_ddjljkkilmmkfff]^hppmic`_bcb^ddb\[^YUabbddeba``ghgfgb^ccZ\XXYWWTTMLLPSNMQVTSW[ZTRTY^bcebbfhkqmjgjnkbZjd][[^ZSOP{|}{v}z|}tw}WWQRRSVUMQOSRJJ{w`URMRPSXVSU`elk\R_cbkpqPOROH?mXyIizqjtqur77fahnna`hV9Qjl5nYxqjosk`[[X\^ZPPVQIK>>GFKNPLKZ]_TQUX]WMGIKJMSPKMWVXUUWPLLVTROMMLLFGVTIEJJLII~}D@BWPKIGGLHLsnevuOJyGG]QONOORONQPPQROMJIHEKNRTUNELOPPNRGyw|ltLFIOPIPMUPRMaXW\URQUZSL_XSQWOTRVZWVHFYZRNPWRNLKLFFQWPSYhbTTSSNKT[cbVIFG~rokk4VNGqKPWRHIWI~}zFHE>HMDAe[vcPLz>HTOHIERYUFBQyjb_]Z[XWZW[aiYPTWQROPQQKJJLKI|zqjclppjltsy{qtpbjczvlri`]YMIO\MUT_ijcQUZx~nlesotjlvouhfktz~weipf[`j^dhmcbjVORQMQ\ldZvfcomg_]ecbXeszA|sk]lvk|ldpoe[X\\[SJMLJGRW\]mhQC]ggyynfda[jf_VQZWi7d\7II}sfmszub\aUWaNJRYX[T[_UAW\B~kbqtdKj]OUZcZZgro`_dd`|morUi{nt:@@xdde^m@?vpit}wecloblslpxrabmE{]K?zs{EFvkjrsonp@mqrkjW_dlnjrsqnw|jYP\vu`hjjlXklh]Xab`dcY_a]][YWTTU_XROSQSIMNTUURWGHQX_OAJKQ\^aXSS676f:<^U]fd7cg_[g`]be_c5ld^abVPLBP8[dVRSa;cNOKSYVVUS[`fb_UOA;DDE>CNbV]fMVa\VSOKHEKEHQKGDEFB@;>=:><=?>-3:93W/0.22T1311;0.138==<521/Y\\001_]YUQMIGJHLKHHFAAB@EIHQPLQNUY_]a[VVPRQ@>QQOM_YFDE>MQLA>@DBDA?AKHCKONPTMG?ABKJJEKPKJLOPPNKQOQXUQPNKMKLBFJFLIICEQ:OJJF?<>F:C6>6=LC@BLB6:/D;A75>53dA07;87:89C689944347:9<9834455654644;8:9:44566899=98::875686654hhhgligeaaae551259985566g-*,058431.032-,12,,1.-10),.,*+('.-1+++(%#$(+-./00,'(,/.++-13.-/-,/3-)%'),'&')-,*+&***'%#%&  # 5  !"! !#"!"!!!#"#$# "$#"##""!  "! !"  "  5541!   !!$!  " *64872,21##"8!#!> "# ! 46435332455./202-.,**/1//1//-+)-35;61.,//1..0,'*-+'*&.1-*0%(**,+*33,+0/-1,+*++//113321.///0.,,-,-,-,-,*.0.,+*++**#     h   +!     + +$:#   + %  +JC&*! + + '(!%' ',#(818+%0.# $%  !=&%   +',* "  42@4JUE?0"  5'%B1&(/   (#** 2!&(<85$!3&!#*# &N $'!*t1=*C/6TLqC -7(1-:*+=%#%3$!10).(    "!! "''&%!#$%'%$ +% !! " "! &$  + + !#05420..**")-(')%)))*,##"" +%(+03!"464/375)&(*(&)/43.3.078998<=>@?=6:@CCEDCECFADEC?;FKBQKHKGFGGJHFIE>579?@BED56;8879HPPNMSOVVVXRTTOYZ^^^_^_dng`M6+#&$%)&(,,."6568669 "%,;!$&'%&((*)*(*,*+*---./455368469987469645433235621.-24/-+*+3501+,102<86974:=@A544418AIDC#!##!317-)+&$#,.&.-++"-4+*/22338697:=:77553565684476231231..-52*'$#6*#$%","(..378411)))+&''%%++'"#,*04/49621452*%,)2/4::2-662='*'@@9*&638&$0( $#('($"'..3;?<"B$"@>?=$'&,.".++'&$'&&+-/("$$#"$#2:$GGHFEHJJIT\24::52568;=?DB?711+*$*5;:<@?<<9=;96-,.341/.59@A=<59>EFDNLCCAAE;?<@@>E943488755>?<7531--,257;>>CEDECBA>??::@FHGD?=>@@><@??<;=73>>>??@???>DCA@A><@=686676532---01-,/20/3881.167:=?<;>@DIHDCBFD=1-767>>@T1.0-'4*<'OD29DAN/+TOOEJLJK*Q*90/,-.0--/.-//,+)('I&+-/02-%,./.,/)IEDRH=@N*(*//)M0*1-/,92040.-150+84.-2+1.1423)&22,+.2.,+++'(/2-04;8/0/0+)/5::2(&&C:62/#"9$(.,%&2)HGC?DD%'# '*"*2E6)(> '0,&%!'+(&A;74212./1159=1/1300./11,,,-,TRPLINOPWP,QGC>94B<762+)-6+017:;8)+->D<:4=;?8;A:?525>HBE@26D:6/4<48;=66;.(%$$'.<71C67>>942642,5?A#DA=2:@7D94<=60102.+%'(%#)(.,77*!367?B:611/841+(,)2+($(C>5:=@=1,,%&+! "'(+$(*$&)#C:4=?0%;4-/18208==33886CE:=?,6@?8; #A57819"#FGB?8=DA53793;<58=<248%@.'@;@$%DA88;=;:;"59:88/047<8<=;8;B8.+2DB279:=-:;;3045253-030/.-,*+,0,)(+)+&&'*+**.""&'( ""%))-*(()+(+1/-0-+3.,.2/130.24,&$ $&+$"$+1%&$'(''*'-.2/.*(  !#!%.'-0 &,+(%$""# !&! "$#()(,*)(%$" "!&%"#! !##))%('+-1//.)'%&&%%$!-* $'$!!" '$ %&$$'$$#$ $&"!U#&&%$"&#%)($$$%&$$!%!"!!'(!# $'!$ ,11123112/.,,1 ˁہ~~}|}|}|||}|}|}||} ~~}|}~~|||{{{||~~}}||{{{|}}}|} ||}~}}}~~~~~}~}~~}~~~~~}}~-}~~}~~~}}~~~~~~~}}||}}~}~~}~~}~}~}~~~}~}~~~~~~~~~~}~~}}|}|{{{|}}}~} ~~~}~~~~}}~~ ~}}~}}}~~~~~~}~~~}~~~~}|}|}|}|}|}|}||}ހ ~~~~~~~~~ρ +р ļƼ5󀃆݁򂅏腖郂豬ʱƹ혥ծ̀ʈאܑА҆ӤºŻ䎢ү֢¥׽չӅآ׬۔󸾦͞ƢӐ҆Ը݇Ђۺꑡ鰈ŧۮڝƦ֣푅ྰ阷끀Ȭᢥ†ཱིؔ櫕ⴒ⑊Þ̀⌎ʇ٤ﺿޑ̨ׅܠϦ򄁆Թݶ̀þ򀄆Ů˺ȸĿ³ľĿ斜Ǎü򄓉˟¿Ƶ̿ҩĀǾݼã˹ʎϤ󄌋»µ˷͸ӄ̶󄂂̯νӽ쁭遚̾ˀƿӽ݂µþɷ§耭È°ሎ¡ϳ²퐆ʬŹ㩢킀ǰӁ܀慊ĴѳĸɟهǾ¼ـ¦¿˿ɹĻı딽G򀐏eb[dl8g445ki5jeddh9:756jc]d_kjj9;kddd_XZ[V[^Z[>@9645gb`]\WSPUUYacaca]YYZZWTZad_[fbQZ]``VVNSUQUW__YZafddf656338:9:?B@BB>?>@CEAAAD'C@@>;<=??BEEC@><:;?@@?DD;97867;;9;?;=ABA>9:;;999889899;:9:8;<??>??<<=>>=??=<;:9978;:::8779:99?;:;<=<:8:;B@==??@@@>?BA@AAB@=mlm8:999hRakkt;><:=A?BDFIA:9::=?>=?A@>?8kik889:97l899:75inruv::gdn:7569;:;mf^8<:758>B=8`69;79:978:>==<;ic^5:::988;:86j5957996ge6779>:9oilccmtnhmpomqqlkkge^ec\`ged::pfKLW`fg_XY`nqjfdchheib[X^ihhjhdeedcaa`hnledb`cebc`cfbaaa_]__d3234479558876533346;>>;9[RF6LR_Rb\A6.++*,+( 7976:974253( !/"*.:-/+0./0$'-1Q,:)4%B-9a8432*&$-#)*%#%.!",##3H!  +!4@e$9/0.%$(*&XX-A&VLD;9,+#_L(%2M-432V-50/)8A4G;KghoPAAMpsXkhLswY~UcCV_769::@2\BY9#$%/4-hUkJ"3.%,%4lCTHXLKEZhyJp{cwYXfYrz|pg^v>B@@?=7489530/--+'""/5"! 93698;9789@;311.1318GF;7+'023.33=DECHC:2::2-57;=!DD?BD@ACEGDEG=9<@DGGBAABHDEB>7,;D5037:89=CDFIDEJIKIGJJKLJNOLNJFLPQQPWXTSSPTRRSBHFOWRVVTOKORRJBBDGJIC@CHELQOQLS\UTVXZVXXYPTWZZ_abegjc]Q~qFFABCGMLKNJHHFHILNOOLGQPSW]][ZZ[^^]adc_`_a`accca_^][]ZSX^Z[RU[][\c^ZX[aefca^[cekqrs:calkdU\^e[^d_ZVXZMS]lbdqylCEmcid[[TRSTPQRPNLLPMKZ]b`[__^]ZTZXakiaa\VR[Wdjoko\]M<9>OIA;Tc97hCQRROQQRUTKLJJI@?RRMOO]aba`]`b[Y_ddTFPQBi]RRRFWOB<1<3SN^SSbQ=]^`7AQM4VY`5WTg@ELA>;<66?Evzfkqq_ZYVXWQLLOzMG:;;;@RQPYZUZVPLQUMMSRLS[RPSURMNROMNLIIRUOGIKMJyswG>CULGIGIMPHN|goIKLK}}EGLMORVRRUNQNRUPMMJOQPNOOQX[PCENEKMGIvotFSGMKQOEPSW[WVTWVXUUWQRTJYaTP_WYOKW\YSPRQOXSRRPMJFKKSNIMNUPLJMRRM]kfVOLBunoz|=8VSdBXU\B:SUIzGFMGB;SjFCENM4F>234Z62R;J=<955M=2586233357:9688435677464456863fc234679:9=@>:86787765lhkiijicdec4542]_2788:63/-(/1022210/12/.2.523100//,--)--))/..--+(&)(+//./.-,-,,+*-00-,22'+--0))%&*()+./,,030//6 ! F !"  #"! """%(%! ""!##! !"!! ! ! !!!"" E  !""$   "   !6884+3658 !# #"!5533+2334670041/,*d2/.00/103./5952334132101//.0-)(,)*3/#$(.23-))-452/.-/0-/-+*-212430/,,+/32.,,+-/./,.-,,--+**()##    + +    +  A!       &  +2 )0 ! ! +0>E6+$-#.  +$(1() !91#(##% ! !&!1'2+'@* # +   +0&    -5$4?VcDL0 /)= *'/&9B ##. +$#%:+#"* %#$!*,*' + $%#Z5  !? 1$"%.J",1>6VLg[v: +& 0$"1 1$ A3>1 +),#-.   !#%" !!"""$%'&%"!    ##!!"%" ++$ + +  +&.004.($*(#""!'+*.0,,,/2033,*+,0553122622/.)+6)$%'+))-359;77;:;;;>?A@>@A>A><>@BA@EGDCB@CDFJ:?>IRLMLLGEFHGB><=?BA968;;BJIKGNVPPQWWRQQSKMPTUZZ]afj`J7L=$%%&(%##'),02,!+14(<;< #,.1/4+%-#)367=@AFBCCA>A"B=?#5 )/*+('&)'%$F";"&%&'()-( 86/7B9HOST\W2850]420]236::;<>999;;:::1.<<<=DHE8556>GHGOKJHONNLGFFPMKNSSOJA;CGDCC>B=:977:81.-07;<=:741TA5)2F$"$/57:9<@CDDD@AGCCDDCBCAADFDCA@?:8;?@<5:;;::=9989??=:?<=>=>;:879<96574520/2631341026:89;:9;<8544010-VOFEDELMEE@>@HEHKEGDCEKRY_VSULKNH/-.XTZY[d;6\QMLRRS\]\_^[UPL#BHMMLNHDB:0)*&"%''10+%%+<:595&!1'*+)))*)%!-(+'?D' "0+M)*)),/*J.PG:>P+,,+VQNMNFFGL'),,.02//0+.,./-+*(+-/25.%&-'*+')?8;1..I!968?>##0!.-3!,.)EAGF%$)%$2$593.-+LN3/'")39&%!+<8778215/04478;3/2321342.WSRSTQRRQMMKNLONID@=;:<82:9>B@=@=?<9;A7=GJ>730+58-+K,462$*24;<;?A><>9>DA80797:8<5!$>B93244;6672+,09546:?<723<9348655<;:>E>C:46?>??854/*));2,+&)+*))('/%+$6>5+'<647:;3-/;4,"#*$#'87819>67065/52@69470-EAAE86<;DAAC=;;?@>??:<>896;358?:<& "!!$'&D:==>95;<356?60559;875:6!=4,'5?<7;;@D158=97030481/3+//-))+./.+)+()'+).0&##!(&((+12/+'+-0/.353%+/2,,21,./11*!$&!$,'-'$!"+())-/.-/0'&#" !##"$))+'')&"$%"! ' *'"$$m!%)''&*,*&%"##(%$&'%$"" "'(('*)(+*-+,(&%%$##"! %#"!! " "###  $(((&&$%%$"! #%#!#"!"#!$"$#%%'$ ""&&%# %!#"!# "$$  '#/,2132134110,)+聃~}|}|}|||}}|}|} ~~~~~~}|}~~~~|{{|}~~~}}||{{|}|}}~~}}~~~}~~~~}~~~}~~}}~}~~~~~~}}}~ ~~~~~~~~~~}}~}}||}}~~~}~}~~}}}~}~}~~ ~~~~~}}~}~}|{|}}~~||}}~~}}}~~}~~~~}~~~~~}~}}}~~}|}|}|}|}||}~Ҁ~~ЁǁÀÀ 웤н􀅊߬􉇄܂㆕ڀ۽䀅€멯Ѻɺ֎Ћ臯łݡزǻ췠й˼ηҙ썞Ӛ汕πԹރέЉ۬̀ྼ㆔·󀀸ڙۖۤ󑊃̊̉퀳ǀܙؤꙄڨڼꉏô璆繪ਮŃѴњùݵؙڥҮ٪ϷġڀޙנՂڹ짉ӆ޾Ǡ޺긂ӄҀнõƽżûнİϵøű³ºͺΎ̽턑ϼႩºо̀ǿͽƮƱÕҽႺȭȾ압БõӬѺ׿Ⱦ튆݀ş;닑ꄎ򥪣셝۷ļŻ˳ƷӾڻƵĀʳѾ߷涻ʬIJ·ھܾπ̸㜌ŶƯƶžŀپ米׺Ƶ˻ʵ푲¾æ󬥙ǿйƽ񄋁54ega]b455c^egjidfi5768me^]W\`gm@78ja_ZX[XZegbZ=A;;975d`c]WSUYX_^dcecbb_\Z\]da[Z]]TQWda_WMJMNPYY]\NYclb]c3458=968==>>>=<;A5DDFEA=<>?@EKMFAA:;AAA?>@A?<:878769=<>?>FA>?=:=<;88;:9:D<<:889;?CDFAACBCFJKMFIGFFHJOIHIFFHHFGHDFDIGDFIGGGHGHHJHIDBCB@?=::<=>?h==>??=>>?@?>;8865889<==<;:9:;9:;<>@BADC@>=?>?>?DCB>;<>>=::=>?DC?>@CDDECA?;nq=>>:mkbp=>A@??@BB@B@AC?<><<:::87888:9788766687::<;:;>AF?8:lg799:;::9878779;<::;:eNXn<855eh]ebV`:;97eb49?95e9:;8j5678::8:9VfX59:::8:;<:987j8iGVdlfa6:8:657mg9i]_djnr2/( "! 57C=9856557.-&')#+:#7/-$%%$#*Mij06F;"= %',A[u}gzXA:]YF[gg]7XtjArpcF0@aEcUTRI,.-)]c[nU&6%NMXLkwhwl`B`zL{hb(Hb_a}iw\cYDc\d84,-/.-//1+(110,0295/0/98.01=:26;>=;79:;=>8=>965:=>85110,*(,9;>@A! != A 877/8<@?D>6024684:AABC:0%$&)572+-++/;<;G:90-203::25=?AEFC=BCGFDKHMPKJHID;1D=<;78.127D@:88;=>C!CIG?IPOMLMMONMNMQMOQG;;KRLHOSTNLKRPLHJNX[YXXRSQQOPPNPPLHIONNUUW[WZ[VTW[PU[\[UUX[N_`iqqgfOnEEGCHOKPQXbb\YRIFJMV_Mn>@L]RIB5KW]cep:<@BGMQPQMKNKOPR^\ZZWYXXZ\^`b[]__abeg`ccda`cnoqedkq8pb]a]ZWRV`c_]RU]gjcdffmmonllkihghjjmlom;QGmjhhkmo`cogYZ`\^]^VYba`db^YZ^\[[[YXVVWSTURRV\[TPLMWQRSXYW^ZYMRrgYYYZZ][T^ZmneijrdgjbRH=BFASYO@C@I?AE=HF;4;J==^\abdb^YW\[dfabZ]`OHE;hrmb_`BRKT0Qsig[QHAp]gS^YQA^BE;5'D2y|BGQOE?KJHKORWZ\\WUXYVPTUVUSSTWZ[ZOQQOSYU[cPHIVWYasaZ]hcbpibdgnjmysbXZepupsrfa[SQOPSUY[Y_dW\\ZT{aS]ybTv>EPXTQSRVY_``b^diihb_[TZcab_X]b`YWccbPAM[[ZWWWTYWSVVXZa_]^a_^_`ib[Y_aa\Z\Y[ZY[``[XVY\cffega_]_^]ZXTUURRWVOIJ}ljntstkfhi]^fmw~tt{Q{yszRMNRSR|Lq}|qqm_`WYagktxisvgb]YguvA}POKKMz||sv|ohih`rilfnWT_SIGOTB?9YRaCKMJG@=<:CXzqppnjSINMHHKGFD<98dXoMTRUV\VRONHQPLZZSDNPLKIRORRPPNLHFFHPVXPMKQQPNMJrz>ED?RKGJIHWPN~~N~{~EMOLKW\UXSSRSSQUQMIFQNOQQOVXUHKIIHJGvvs}EGICJKFRMMCSj^OVX[VVVXVXXYR[SRWYWXJKVPLPZWRWZUQSQGGFDFNJEHFJNQMSXTYb[WMNHsnixrv|974\a^RWR?C[OKHwDULJACh^^[g[PPK|DBGGL`diRconie_^\PY\Ub_^Y\]XQUUSTROM|wnnjmqqjekkrom~rmopjj]Zbosc\XQc[OEceb[ghb\Sd|H{rhkqph]qwi\ervxvwrjoSUYkkoe[`c_skhkhimcZP`iei\Ydluqf{@vxjcfhu{xrg`[WFIZk[SKHGYWVVbGvoX\fTYzjffmqdVWnehW.XhEIJ}PJboe_VE@HRPWf^iohjebe\i{~u^]nf__gd`W]\^nu[vcfYt}qnrl\`v|>@{yjccahcX_pqhhyxwqjrsqtmKJcc`XenCGEC@?|Dy}|uidddegjsuz}zmdalibkmv[S^TZX`mmqxwn^]puh^Y`tfaYV`Y^TZYUX\UVYUPS]WTS\TSXRISZI>=NaEI@\ggQW`597a2fc_]ac_ifTYd4_fWYd3346b^T[\WTOMWVX8g_YKLJIMO\ZWVWc_]YRLJF@=D<>GISSQMHQVUUSLMLRRIE?EE3]:FHIGM9GTT>:4330\TT-V--2..10.>J;4^VUZUW.2321052\TNPQONOOSTYRPMJMMNNQQPXSTPSQONPQLNPLJENKMKDEJIEIKNKLKMLKKLRSRTROLQPLIECIJCIHCADAIHBIQQJIEOPIJ<G=9:8:BCACBAKA<>D.FDL1222923:L<>?61560663344546997874488878675fbaf65dc^59459=??@ A=7355755653jkecbcgjdficc^\a5797/1.-00+/132/1151-.),-021-.+,.*+12.&..0-+(*,+//0.00010-,//2/-..-)'*/.-*%"$$%**,/%+.4-** +## #. !#$% "!!#%%&"!# !! !$" ""!#$"!"  ( ! !! 1!!! !! 89 8719 #+ 42&1(*4.1-32*.-,+1$0'/-$,10-1-1,-1457::34/.1)450310,00/3/%$,+(*0!.,+...-*.,..,-,--++,..**0//,-01-,-,++--*+*+*'+ &1  + &   +   + +   +     +   + %  -)#HATLHB;5!   %!& **> /'$% +# %N=7*#'+'. ! + Z0@L;KS6  / +, ("%.?,LQ8=d "* + / ,722; &6**%"   +   %"  #$&$#" $'#'$# $%'""!$$"" #)+(+%!%)++#$%%-$%  &#$(.443,++02177:;61/32* .*'("$!$10(*02771=A@>=???@ABBC@?B<20:>96<@?=;:@DFGFE>FGQRPQPLLHHJKLJIGC>@ECEOQPWVTUSSVVJRUWVPQRVIZ[cnr]F0A&&'%),(++.//,,(%$(+.4*=!"'/$%(+48:>@>;<;99558689<:&%;88:;;<25>7./2///4-/666775013423201/11.,.21.+')/+./111424+0D8/001/42.51<;33261350%'*)#$"'"$ %!$ 433467731528;77226,'% ;?:357&-&,3JEF;2+)K>?4500#6)*"!"&.63888=AA25@BEDEDB=<!6#%""!"#')EE#E%DA#&&$HI')..(&..O-146:=>>::=><578765679;;:0331488;D5+,58:BPA:>EB>FC=?CGEHQXVRF838CNyNLMHB@=7433457:8BEDD@<709@>?<7=A@9:BB?."*98867638458668=;:;<;:=B><9;=<::75643871XQ*+SF=@AFDB;:=;339>FQTNHDHMUY2`DFOEKO2*EMSWY[]d_NMOX^3442`_^MKOW.L?IOHA>925.18%++,0,/+)&A=%0+)!!-!-3;2+-)A(L'(J&)49<+5<;98433*12,7774563/32330..XUVTQVTZXWVQOOMMGD><9:=<929:@?>I@=?A==317@OB942,83,(J;:84;872+3<&BFC@;;?=8/:>605<<<:?=9;(+.:<>91461A:686782+&3:58207;A<4B"A@9556=B?;510/#%-;2-('%-)&$*;=.29).JB745:=4./:31&'*!%'?D-,25,)%#$)0)49551/-(1?FGC34;1*.7860312;=-@28.>BJ<>B;01>A!#DD<76495.2<>67DEHAA<9>><92('675/78!$#"! =#=BA=632023369=B=75597066>0-51214:;<@D?90/=@8101=73/,2-/+--+,.*+0,(*.+)(.*)+("%&#*!)03(**+-/0./1-55)*/+0)*.,-()' %! (**3/+"%&0.*('/-,)%$&"!!!&'$#$(()'##"$%"! #*""" #" )%&%"*%%)%%)%#%&$$$%(*-'&%$''('))'+')')'%$%&$$%#~" &""#!%"!#$"$#$#&(&)+)+(&%''$# ##""  !""&'!# %%!"&&%#!!#!## "! $"!% :0//1./+2421./02,,//0-(,聂Á ~~}|}||}}|}|}~~~}|}~}~}|{{|}~~~|} +}}~~~ ~~~~}~}}~}~~}~~~~}|}|}~}~~~~~~~~}~~~~}~ }~}}}|}}~~}~}~}}}~}}~ +}~~~~}}~}~~~~~}~~~}|}}~}{|}~~}~~~~~}~~~}~}~~~~}}}~ }}~~~~}|}}}|}|}|}||~~܀~~~~~ف +ȁ݀ Ƽ՗탄Ĭۀㄊ쌊ƓÀáςɝퟝܡΟ׆ʵ뷨Ʒ޹ö쮷Œ²רĄ㚰䯱ҫ˕팇޽ӚרąጂƗըפ޼܆޶㎻ƃݱ羿پ㕈ٸЕ—ȥͱÅ˗Ź⮿ݴхҾ۹﵁ՆצպóćˀžϾ½˾̸醃΀ƻ´侾ƾ˻äε뇧ꁍøûϾԹǵſзΦ³Ǿ҇ƫẎՀ泤ɓʔ뀉󆒑t󃞞گȿږ󄀀낃򐙕񃂀񃊆󄇃߀ĶͿř㾳̅ʀżϹĵõ邈ܶ񦏋ղ͈ԴµۻȿĀɦս׹üDZҢѿパϴºͼζƸȿǷĿֹɿѕ6765gebgdddccgiaolh76g765g`W[_abk7hjbdYTYXS[k<95979A<874db]XRT[[cfefeabaa_`^bdc^bc`]`cb^YWQQMKMOS]KMWXAADSd]_c6399A@=938<:97c79;@@DECC@><<>EIKIIC=;<<<==C@BAA=8o:98::;9<<9::=>=<=<<<:<<=>><;<;<=>??!?>:;>?A>ABAB@><::989:868>>=?@CCCAAA@?>=ADD@<<:;===?=;::;@ABBlfq==<@??<;9:::9m;@AEEBCDBEGB<<==ABA?@<>C?>EEB=<:<;==<9988;;::998767779<:889;>???;98;:97678=@?>>?><:=CC>m=A;879gSJanhj9g787486:8<87779545655;5f7l87e36:;:;:9899;;:;8jgl5`bj:<5ffagu^afhfalo:ttomgkfVa9;9i_[g=;8776*JF;,,9&.2R9?)&E%+O14P8Y5 /I& (!#*2N4- ,@%+4-4%%*-V0045) (*)*!/))!4/;!2P?d66HsYgpjZyF?5++ZzON^e``h[\KkRhNjzhATRU\A8fM(SHcR|{Rgn}Zqn|GX01?I$-=?84^9JEW-R-,XDM6)?6\/2I074YMdML*A%-''W\O\qz_Pf8OViU^j`QaEnLjt[gkj;kObNNu|aQoyj}n\eKjQMmhvTB]pyY0;;8;:988<53K9L\TQBOU17=='OvdO15=1253019=;;=?AEDCC<=<3/7>@B@;047846=9:8ACD@A:55+,**+(-576=:/&*)7@779::@DIJFDILJHFGGFH;-24>3720022-9898A8HC?@9?EECG[dj692fpmhgx|xrtvvos8j:CAEA??:iiHMQTVSXUPLMNHRWWMU[VNHLOLJMPOOPKIKHFHHISZSMOPSNJLMDEGKRPHIIMTVJJ{TJAyHNLS[\VT[ZWRPPMHHIJKNSTWOKJNHNFHABGIHIKNSQLHA\UU^`\VTW]ZUYVTSXVTRPPPMSTU\[YTVZVQMHIJIIHGCGLHGQRKVVX[Z]ROyyyDA843fg;VXIDVUDx}FUYPJKKQC@ZXMPRH~{rvAHPS`fcaxleg\]\Z\T^`\`\fZUOTSTQOOMKMyqjqwwtmkinkqmqvjikpe^_`oqysikf]qkPHKc`\`edy]VjkM~fi\_jd`GcnvvpnBohZXSYgfifgb[gcbmecgg_TM_^g]gm`daYpzrqcdijnpo}oa^YQPRY`ZRKK[_OHc:BqVYMntjtjnrsmd]d_cYU]eSJGHydglfhQT`^[biqyth[c^inwxg`^bb[vzef`K[hHrywi[g~ogrr^SUs=xrkjZ^^ddgmtmxzwtq~v`APNpddQUiqu{?IE@@w6ENNVLCOT^chUY292[bde_X^d]W^kj7453SYe347<7iae=?QOLNWPafb]bTJEILQOW[U\U[_[SRRLAAB><9AIKPGFFPKPPEGKMGE;5?797?GIVOLF\-687971ZSMUYTW-//00-4I=52YUXSVXY3/59841ZURQPNQQRUXSSTQNMLLMORRPOONNNJMQOQRQPFPPMKGHLNNKLQNLMNNKQOQWXVPNLNNJHGGDBDE@E?AE=B;BGXHDELLIPHCANJ:DGFEPPGB=AA>BF>@?6>:iA?@@?=?CC@GFEDCFFIGFFG>JLLFCEIKJNPQSUWXTPRUTMNNLMNPRZVXdonZ:3%'&'))'%&)-15)$%%),1522(&(()/.63B$'+4 44466776466657787;3230010422316662596430.../,,.2/1342+33,/./46852240384.+/-/12/0')477/10.041,1.$'*, *-!.+!('#(%+1/*)'(2.)')-0+*));.96.%+901<=1$719%@DL4/B50/=2(! %#/493;:79GJG@ACC>=4!#&$!"'('A602>E'&@BAHHJKI')/6552-02011258;@EBBBA?7-Z^/1/100_257;w?DFC:866/LM]\4641-'KO2_389ooka_`23]-2)'+22.26/*16646;=>B@@?><988:;<>AA<>B?>7@9!49;53.1266723897;<9767:<>65696;=<>D=:9;<>@@>=;64456642465567;:4\UA-'/240-29=:=?DHMQSOSVYZ/VV.-X3420..).1../10ZZ[0a24412b[]VTZ_bVJFAFE?=9DIE@<>>A@>>=;>FFN)/,)&)*,/-*(+)QG@>BFCADIF<77::747('%,0)'$('!,7@*,*)'&%#!7CB@8630-.00RDO,(&("%%.6(*-/103/,*..*EJ/31+241+'*+*'+,--/**+)'(()040-..1-)+,QLJIE$%'+.-()),23+,HL]OKQROSTQV2,SONNJ#>',+/5620442../-(NQ)*))+0/1.+*LN.*N-POJ'&!"())*M+-0.+)$721873/.154030/.310/--.N,001655103/+)&()())'#'+)(.-(001558/,ML@==$IH *,/0$ --#>@&14.**() !2/)-/)IEE>?#',,5:75LE=9:43444.45474<32/2241/.,,.UUTQQTUSTQNIMMD@;@??=897<:?=AD<9;B:444?AED=?>6D>+))95369:F4.73C+C5<33943)EMD4:><::$G<5*('-98:9851754;6665,%#21819=594-:@<>34678:9B9120,+).43.)&.-"+"E=./(>?9>5>0),=!A>;;.30457;FJ=;ACBF=;HED>,!,,<67*-59:? ($! <??A4/2+.,/3370>7298313/*&16387<#"467*5433276-../.-+-,-.+//3.,,++'+/-&)')#"&"$'-/5'(&*n-10+.2.+.63%(,3/0"##$*'011,.& "$)&*-(,(+-*''(%#$(#" %#%' !#""!)#"$($!%($'[!(%($%%%)(&%%#%&')+(()(&%%$%&('&&'&&%"$%%&'&&!'%$#!"$$$"#%###$&%*)(,,,'$#%%#""!!! ) !$$!%!%# '%! "##.$0/.0.+,//.1131002212411//--*+݁ +~}|}|}~~~~}}}|}~~~~}~}~~~}|{{{}~}| }~~}|{|}~}~~}~~~~}~}~~~~~~~~}|}}~~~ ~}~}}~}~~}}||}}~~~}-~}}~~}~~~}}~~}~}~}~}~~}~}}}~~~~~~~~~~~}~~}{||} ~}}~~~}}}~~}~}~}~}~~~~~}~~~}|}||}~䀈~~~~ā Ā ƿՒǿ[ƃ򂇃ھ̃Āљˣв܂Ժәϣܶʊ߰ԉѽ˾̹珺ş㺌ϛԨވܜټӀ߱ɔ×Д릳͖ùʝ섃߬҉ԸݔŇƀɑâָ߳޽󍒼į뉔À﷯̮픣˨ᖱ׭®ȊԥܢƱԈ㮁хƹȺᵴ㏌ăѵƠӵϒƽ޸ĺƿֽп̺ƧIJɹÿ»ګdž۵Ƴڽũׯ텐΀Ŀᆒ˼ֽ̀Ĝ䮳ŨڪDŽꇔ˖ȷ̰½ƨƻͻljΤ琑򆒜¼µԫѻ惈񃈁󋌈鍜҂퉉󋘲öʱºȶکĴƹºʾν̺ĻûǶހ덲´ʀĿ惆˼惀퍙ɹʺɀ‹պݿŲǼƴ޻񑍋Ǣɼþ€ƶϼƾ!]`34773addac448;khi695dg4fcY[`gib_bddbZWWUZ]a::5888;A??=;8g\YUV][[bjddfff]W\bdgbeid__e7kejj^XLSVTTTYqskB9;MROMVW_f7:@A@??>>BGLPPMJA>?@:6:=CFFB=;:7::87kl8767889;:==A@:8<><<>?><=BFEAEAEBBCEDCDCBAFHGDFLJDGIGGGFIIDAECBDBBBHIFDEDCACDC@?>>?@??>:9:;==>>>?>=<=;:99=B@><;=<=>?>>?@A@??AAA?>>>ABCA;8999=A?=<=;s;;;>ztq8:=omr<9888::??>EFDCC>=@ACC@@BA;99:>>>=<:DKFCILGC?<>@?=<;;;:99::9:;889:;<;99:88;>@A<:99877899AA=C??>=<9=DC=:<9678;iYT;=7hgi8;86gj66j;;<9787::7657:6575g]f8979;99;9e6;8:gL^`_bj865c`Q]nqkgegba_`ecoqotxr\7?;:nIQ:A?<;igl:6gWd]]cgahkfjnlkcba`^_blqfj_^ab`\ZYZ[[\`_b__`_``becbcaad575430Z06764568;<9754^]b;AGJB6cVAUG4/.M6)&#""!$ 465433456=41,,(*/1%'&,46'-H4/.2.02457Y@;GZ.60?.NLM5+%"'F%5 &!'0@*& "'*4J6! $HO;KG^34 #(250$%#-''3!85(GKKb}jnmL[Qc#;GEcB@JvaldUUm}CNicwmlcP^M\Q6?BNEUm`_ngac_ncZC+C1848BC\bJ=CZ-JI/S*,-LSA+_,,21;C\9aKg9?S?./:L]vEWcSUIX`yTd_BEOOluZGSce]4g_[oZ?{jsMgegpVflv`8Lai˫qfkbnwZn6:64/69:98791[UQ?5A.4<_Rf}N3YS]IdH0Y^Pn^g66>=8TbhIN6z-Qcf>zFK[zLWkbd}qOkVK+=963./20/31--...7:/#(,)*&''#('*+)$!$'$%!"$()(/001)+07<;7;<@>:86<=95:>>::=:<)8B$>57BB638429>>=<69>>AGFB@@@99@EA?636:? .602A""#C<+#($)$0-35CJHEDLJ)LKLJG?>AB13LNE<:75==>956A:CBEC@BGHADGCAGPOPTPOPRSSKWTSRQPPOPONKDCILLOMID>;:HCFE8/ENRQLNPUS[YRTXX[XU]^ZYZQM[abahmownZVpF?>>C<8:9hM46UafGKGJLWHFW50IB@6;@Yf9?;QW>3\.>B:NVRMUD-GNPUJNXTK9RP[PA/1@24UJNS@EFP|KPKDGKJIN@>Llj]ZWSPNMPOMHIHFNMQNKNMPQVTUOJLOK{MWVLJWYQPMMPVQMPPKJIJI=AFJKOYWVQNOPPJwKMKLSZ`M~jqLLIJJInxUWWXWVU_WXZQOIF{KJJUVUQIEGGMvE?FPW[PIQRPLEkEJZacZWWTSZVSWXQSVSQPSMELZcf^[VSQPQPNNKLKMJBLOHDEBK\WVVW`]WOCHEIBEAzh`_`Xn?b\`ZYYhb[YRa^Z_UP`mbZTXZ^[TSh9VAAQO@J=KYNbSb^_d3[fK[bYX[m_Vaa8D9c9_`d`124>LE@:STLFDORIMIFGOG0CFGESRNC;E9;FJA>;2A;3?@B859D4[2>k979;:6337973675444787758:;8567455iic5h48*84g__f669::44676543ff37fdfceiiej9lea`a_Za`,++.0-.101/01/),-03-+-.//+*+(,-/0+*)*/--1410001-)*102//31,-/1012,)!%'&%&)686"&))'(%(.<!## 34B"! !"! $" !  ""  "! !    +! q "! 7>=;224  " #! 3,'/00/1-1+,+.!*+),/.,$-540/01-,*,0/687::4%1 &/.3/&0(**-*-.+- -0/-.,**+.3603,+++,+***++*++---.-/...,,+!&$&"% +    +# = +  +   $    %&2C7EN@:+4.,    +#$/1$)#+ \.X-$ A!'$!2".$!.' ! #   +* %")#"$+2;Z4=='0B4 ""8AIY$ 4b122OX -&9(4 -:;N$5rd> "!775'0= %3 *#2(     +  #!!! !$ !!"#&"!"# &(  !%'&!"'')*)'$&%!%.410'!!"#   #'#  $+22-+""!'.1211296*445550*(* #64,$"! " (%+./.+.04147559CB@AC@B?@AC?>;==?<8857;@BDD=81//<9<<3+@HJHEFELKUSNPSUYVQXWTSQHHRW[]bbhoT78@'"#"& !&%'*,.,%-.36'-,# 1.(+#&& 7)5"%&)++*./11 +/0114553034346779986732/024346!""!5:;316799;878278588;94:!<7/-3731.21456;<<=;AA$!165258::442352/.*.324035.,,,..1+-,2100.4970,+,-1523501-/,1/1244814?>?D'*,.-)PJIO,Z-/156:=BD;RPCG?"2?638=BGQXLRIUX]VMIKHD?747504GCIKG>:,P233U7:Q.3311-,,-11back:>;<8652365,)+/2<<:72(,242496567677886;:;;);:<=?=<@?5426743/*./4435664+5=<<=<:848;==98>?=:3353457<:999hdefedf^^dbh544jf`K0)2?@<86777;GKPRS-.UQUXYZ+OQUU[\1101-+S,-RVSLNLMKLKPSQOMPLNRNA:87AHLHLMJIHIDCCBEKOJJFIBF+,-01200.V*'JEB;:;CE>DFKD9:98658"(((--((&!%:$%+I>*,("$%&%'%=<567300.//.+TX(('+,-+)*,-K.001+(,-)FIE/42)*43.-+,/3.+.-++)*(#&)+/533/-///*JHIRNBLNO-,++26;.POM?AMPMON-SSO,*U,,KH(5=12333219215.-+(AN+FK)*121/)&NN((K.QFCGL%"$,36/*-/.+'7%)4992//..32/12-02/--0*#+5:>641//--+))(*+,*HF#*-(%%"(40134:73-UPJC$(&& "%.**-&$'+1,(F&%' -6*(*'KFJF996>',6?;+DC5:3013771,5/02::./,-02-,,+*+.WSQTQO+,LGCEDHG@B?>;;:;::<:@@=::>@;??8577;?92FN1(':<36B=:4+:;FFD;;438;;G;>CG=?=:9$F88-"! -27?=8882::692=4+%/)02/645-303?B.2=;7=8<94221-(-59+.+*"$4%B,?74.,48$@::C?;3720&")2(D=#A-(8457A3-/420527@88@988>$JG<63,0CDB>86)26255"#HFPB<1>8.2:>75/44131,>5?)%=@B:;?;9!!;=:',*A953+20/4<#?!64;9>:4==91)+%0779:A:7@<:5-01-*0)021.!C9454*7"4/30/-53/-*53/0+(/91-*++.-)(:&%"".$2(-+,+&0).,*+7/*/,!++**(23-$%$&&'*&(,20$ !'$(-.,+)&-+)('%"#"!$ $% & #!!$#!.%#&#%,%"%% '%( ((&%%))$%&(&'&(&&'(('&%$##%$$$#'#"#!*)('('*'$%&###'&&'&%$##&&''(())$$%&%$#$# % )'"%'"$"!%! ('&  "" $  *T,20-00,,000101//340252/.//,..  ~}|}}}||}}|}~ ~}}~|}~~}~~~|{{|}~}|}~|}|}~~~}~}}~}~}~~}}~~}~}}~}}}~~~~~~  +~}~~~} |}}~}~~}~~}~ ~}~~~}~}}~}~~~~~~~~}}~ }}}~~}||~}~~~}~~~~}~}~}|}|}|}}|}||~ ~~~À~~~~职ɀ  󄌌øĺ񏞟낅ـ̸䮽Դ˵ΗȮ񊘠ʼ䢃օկؓҚ̂ªǽŷʳ񘛀ڭڭ܎ႉ砙ݽ˖ۑ‰ʧɅ󛈙߿Ղ쒺ώ셀ڰᇎݵLjՎȃΎʮނơκʟՃ͘ͿĀψهπǿɪ͂̈́דئطՊϕׂʜ돍ŸúĹĹо˻·ƾÿɽ¼Ƀ⠤–Ξ؛¾ʹʾúº¶ᆣᖚغ숧򊃉߫炄ڀ̹ꁈ񂆇"ݷ⍏¨Ľ͸킌򇀎䄃죦قԲ˽ȢƸ̺Ⱦ̳έûͺȸνŽ샑셀Ͽͽ½ӷؽſۅзъ􄅋Ľо÷õ¹ӂӀü³ŽسżȾȿýïξȶZń/d]^Z]37652ef567:;56gi85fif_WSY_gfdfidcZ[d[SW\bi457:>=:88jeflc^^cacdcgkf\[a]\ckkoa`bg4heilgS`2e6`V]^XWQHPNQW`5YTVah8995kde858=9=B?<>=<<<=>>?DHIKKECEEDA@:=?BEED@;<=<;799889979<<9 +:=?=:;<;89<::;;;=>=<<<><;d>><<=A@>=<==?@=<<>A??@?@A>=<99:9:::>?AA>:><<@@@=:8:99;;<<<;ACBDGFC??A?=<<;:9::99;:89<>?=889:8n9987789:869:;;=BAA>==<;;;<<;9:78;=87743f^OUe0.X@1)($!!"!6554455;654."1) ,-&444.&'='24 /# G4B@??/2P\X_\ZSYB;19QM*(P@NJ1W*31,J24KTQ9?G`EO&1$0&SPn`R(SokyNOhUN3WLNEX5RA=2J;C**2gcmU2FcXB2QPV^p:G;E@;=XyLU[G81dVbu0hKem}vbii{\!^Ua]NU^icvE+275:5+'-/32599977+&1,'+.+').))-4420/1/-,(% ""&,---&465437<;;<;8731027!"GFAF>="!A>>AF@?6%+18>;82-9>?!BDA=C!!4/74,+/5;=@@>:2(%'"%,%*-6;@=EIG<82+/4=$F9=DLKG?4=>DCJPRPPPNPGHKGELH=89CDEFKEMIAE@HPQOMMNMOQORRWVUQPRSTUQMOOJHLMMPTRPLF@CE??IWfl::;;:oi9;VTVUJSN9?@^8T>AQfH`kz@EKNPRSZWYXYWWWX[\^_[YXZZ\]a`a`aa`_ZZTJX[dv@=7:=@:89<=A=9q;6cPURajdUNJTTWb]VQPQ>KTNSWWZ[`cu;=@oa][W\b^YYUVWURV[^b^fdVYW[ZZYY][ddc^ZXYXW]YSU[Y[_\Z_ciQ]]`]icha^X[epolc666^abkhccmujfXI9GTTV:B:53:8:8RFB2A<;>PV]ZfbU4ffbha8GFJUL;8DLC=j>4^WTX,/58,::FXe;81sjhjhnotmnuvyyuxsinq:psmrqfzxx{xh^kf_V_fvKLNVWL~woempQRQU_dkqny{|{{rh`^_bfroppnlc^^UPQVRQKJMV[WQPMNNPOPTSSRMQ[[WTUUTTTXVSOMOMLOSPPOONNKIKQWUVVW\\_]ZXYWUURSO@yiRnORUOITVUSX[]^\[Z[\\\_`\\\VTTWUUVXWTRRTWWlVk{vsumlnxLMLSRQOMLNROJ|wfXYMQ]bhb_]imu}{wzORQSPPN}}|x|y}}v}|zxCIJPRPPPSPOKHKTOKILRPRPPRSLGLSWaS]ni[a[SOKMKINULJUTMQWTLLRTSONRUMHIMPWPIDOVTPOQPQRQONMMGCBP[^ZXqa[aYV]b]_WVUQTSaXSQQQTOOKPNPxy{vsmjnolgcnimghitzzumnklde`\UVF[ecajslSN^jPWk\XWQmqzozmemx|n}mky}qonoyujh^SOJK_qiifiadjjjlimjd`gbZXPZVXVWUVkackmwgedknpg\UTU`YTQicKPVj@FB_c`]XM[o{JqrCzopiZPSZ6qVIzmjjwKlggqk\W\Y]h^Vsjsuqihu}y{{lc[\ab^[_d`dgYdq?OzmtidbiVTd?ldc_gbmvieiidtCDnhanmr?}xwHC}zqk^aec\b:l_^\aiwwzvryoo7p@BC{nfgqqkwjb\a]\]`Z\Rago}opoTRekkZja`\]ed^TVYY]]Y\kc`]XXWYTUVEMJRNGQMMR]-6T]`PC^hW1_RZ]U^_cf49<>74h_UT`214=D=EDD==b>4@1?<>=;9?=5SK8999;9763454254557589:879:98897655774gg4gii5fc`aci6;875i59;>8634d2][d6icfjkfdeca_dh0,-**/002131.)&*-20-/300,-1*(+-03215:4/.100/-/20--/,,.126.,/00.030%*'+%),*+)#&%')-,'%,01,-( !! M!   $" ! !#" !!!!"  ! ""  !"""   <5645473567657! +5 +%06//0-../.,%,,-.%/12/(/4-.+/,$'(*10158*#-0'*.5-.63.&011,)))*,.,,+-.1.-0..+n,-.*((*))((*+-,,*+++-/10-,$!&#  +   a  + +!#  )  '  +  + +  + + +  )-=).*&JEJ%  + #  .#:! ?0>-w3*H-+#(2&11$)!    + $2B(! /=N()1)  b2*0)%K%7X& $-) %:94*$3J= 0! -;( -GR_)%50& *   E.M,68&4XGls3(*+ 3"+.1%&/(    !""#"*)%%!"$#%*$"$#$$&$%(($#',11-&"## "%&&$ %%$!)00*(""&.(/3::9:<8/!#%-/6<<:;856--30.53*%%/02275:7065??BB>?>CA@=<>@@C@;;;8;BCCFIGC=71-12)08;C=?=;=;<92'*)164+*&--/51-+*)&.+-//0257C!!!7121059501..0-+.../+11+./0.../2387765244484./2/150.259*320/75955138=994.27:6104955+$$*)**$!!#-/0/570596>;!)*+1+#)%$C(&B>=> #$$ '.2 &#31&/@'GMD740/ !<7674<=C?>ABCB>@>48;<3DDCHE;5>;6/7=JSTVX[b234781GB=8>Ea4hje669AEJNMUXWVUMD<:<@BJHHHDA<:;411510+,QQ/6851/PO/.../1^bZ]YO`766401762223556:83-,0..131011//,),/43335::<=<:9842/1,!;1&>023/,455378:87779::9<<889414855465311478onieffgd][Z[]^agaZ_USQ?1>IGC?76:DTZYZ]b[YUYY.-XXVUW[[.421.,+-0.*NIDEILHIKLHFNRRSTJ>31',26:646@@FJGKFCEORQLRR-/-/,,+RNHEGD?;AFADDGABGHHFB>=$()+,--./,,)%(.*'&*-,.-.0.'$)-14&2?>6;73/,UR.+QP*-0**2/+/4/++/10/-/1+(+,/1,'#*10..///0//--,($#/3%,3530...,,VPKHRPIF+*R+,1,..QGEFB=>><84;9<9:;?CC@<=;>9:7401&3987=D=.+3<,1=51/*::E>8A:7:$@;=9.&%&1+'C<438'E:57?:2/30270,<6%#BA>881332+/7/*)-198965<635"E#?857<<9A951530040.*35:E<;9+'18:/;5310551*,//./-.620/+*),))*"#"$# %&!$-%*)!*0(/$)2,',,/00+&$)0/0.-)'$'&'%+,2.($'"%.0/.*&)(&!!! !#"!!!& ##&$"*"# &$"*'###)(&)&')'(%(&)'&$&&('"&&)%%$$$#""$"$$"&"""!$)$#%#$)%$# #&))('%!##$$%%#&&(#%$%#$'%# ##" #)($"#&"!"&!$!"$$%$!!&"! & 00,/0/0..0022.'(-2.04641231-03Ɓā~~~}|}|}|}|}}}~~~}~~}~}}|{{|}}}|}}~}|}|}~~~~}}}~}~~}~&}~~~~~~~~~~~|}~~~~ ~}~}}|}}~~~~}~}}}~~~ ~~}}}~~~~~~}~~~~}~}}}|}~~}~~}~~}~ }}}~~~}}|}|}|}|}}}|}|}|}~~~~Ȁ~~~}~ À 剒Ƕ悉蒉銐脖ȷҶعӿ􂑖ꆀؿՆҀڸᷛ˹񅖣ޥހ珘ÿۨՙ밠ޒŝܳ汨檋Ҕ֜ؿ»̘򣬢٘ƺ䄘񝒈刘ОぞǗ鳈ДÁ̢¡̩ҕ߸ܫϡր»ȀЇ҅ұĺʂœߙջ푹鏃켿ӳܖـɾǺѶοˁ、Ǿ󍈅ǽʵŷü½ԁ㘨Н٥ڢƼͰ큌ſȭֹ恏ְǝɽȎڧᵱԒ،λُэ٘ͻ톏󃌗񂄆ՀѬžꁂ߇󖘓󌪦𑡌ꑵ鈗񌌅οʿȾ̳ې؀ػʉ؊ǵεއǸǿĺĻɴܾĵúǾȀʽӬƿм̷ф텐¸ùïӿ˹Ƽ̼ƻȿæƸƿƽǿՀƺˠh6d^]Y[af43gf7dfflk`n:767licZZb`al7eedaa^aVVXcbdg8m8533774678y{md`_a_^]^iic^`adga`_ZUVdog__edU4541<6hgeed\_WLLW]dh[ZZ\ag4ec_dbb438;>=:;:=;;=ABCDCBEFHGEB???AEIHEC=>;:9778:<::<86977:=A=;:9:89>=@?CD@AFJEEDFGDFFHIECCBBEGHJHKHCCDEMGGKLFDGHFHHJJFFECBA@@@AA@><;<;>A<;<<:;;==<<>==::>?>=>?@AB???>ABHJCDFCA><=@B?=:u<>>;8m:wnnr<:8l6689<<;:9o99;==<;=<==;=:oo8;>?=@A>=CGFHCAA@=>>:887n89;<:8mn:@?<:9nkkm7nmklopq779;>=:;::998779:;<;@>87fY?9Z8>?A9:;<6555i4::;==>99;::;88hh756idb59;:5`69;988iW]OOdebbc`9_THoppNge7986gf]_a^dfk]YPR\S\fc\WQTaQYbfp@<:979=;9ii9hdd`dadfeb`cb_Z``___^ZZ[a]]_Z]^^_bghg477285212367868:76476653357225.]V76P=g]Q+/JB?:/&# $;/0<7844:7;91+,-/,$%432006:$/0 $#/+/ #'8H$G17J?867=b\D9%)CnMF4X15<6K4'"!  5B?+27720E=-N:S+ ** +* )9**>1A7*2>>/AF@\qgnts_eXa7YF3744111/.'*/ID+-6I4-GBVI.3@E8//4KTmMjL@LH1#7$/\R)cmia]gMwD#LSM96>f`<(4)pulLTlSitlgi{KXfNmTEhc/5.$2C-35.42GWki,B::;9KSLGcpQ1 0Z$40vZ_s^8!06:MnCKmvaRccvOs{ezxbn;94,0681/++,28>>9922,5+--.,,26627@??>A@A>>;5.*(""%),--210.0067998;=840/,2>%G$?? !##! B!!D<. %&.032)*+:@D=;@#D?=2 ;=>-0200/358<>@?@<:,"'+)/1579<9CBA;?AC@!$%88;>FLJGB9<$"#&NPQVUWUXYWWWMGNMF?GHCHNICMPKFLVQQRSSRSUSUSVUTWSPQWVYZSYYUYYWWYSQJQNDDlNJRcleFGDGQUWU[k;;976^99eccjdmY@CJ`UGcPzO]mwAGT`\\`ff`_WXVVVY[]]]UXZ[]`^_\_\Z\bhGd:=B<::9orqpq::=9:qmn;=?AB=nlc^XYYWUTW]XJQT\LKRUSVXW[^Xeah:?9d_\VUUYX[M]XRP?BA;fh05fodTG=>N^9:FTO^_kgb_ggM_su`snns@@z?|@Bw9@HL{y~j@@AB{=?EBCD}qonspjnsghedc]Y\WSPVZkogsk]WXbkYl]eaWZlt_U^XT\ed]_gh_ZWXWXRKIIHAHFCBF[SAELcTP_YXJjQiUGN[e55ba8B6hbQLOLW^1::74bb`WNRROOY]YX[[fZRU_d][VQONPOUSJJFFGJLNEJIHMFEAB=;EII>:56AQB7;FKDEKN22ZQ.479810]XVWYSSUY87\XT[WZXVV5,2D;92[\SNQQPMLJUUOIEFEEJGJFJNBFJIGEFLXRGGDNOCMHRIRXYZOJFEFOHDDGJLMVQPKM?MPNFFNLB?NLD@@LIIINOPIMKCFKOVIEaCJGLPQLB?GEABB7@?:?9CAB9;9?F34<8C9>>=:;<;O<797@D:;622`_12355587878:86::664hg5ifd34bdehgd``d69997h;BB@<76c7ZSb`bbfhenfcfgebf32./*)+-22.0031,6541*,10.2.//.0,.*)+/-./2=?820.//-,-430//012/..,)*/41..2/%/110/,*($#(+-2++,+,/+**-,, " ! !$ !" !!"#  !!" ## "!#$  !!""## ! P !"  !693476733=67!!#523534676458680**.0/200(0(+#!-/-.-+)˓"3/,*(*+)./1+("(.'*0/-)'*/&+-03,+---+/,.,,-,-,+)+*++,)+)*-)+-,+-./.#!   + +  +     $  !4 2 +        #&,,A18BF2 + + 04D  +  +"$(&*1?=)<48% & $*3-$0!%%4 %      + +/+*CUP==$$'3 + +,E, (8'->5 * $!+)*,8/:K6#0$,%#1++(& G`>BDJ),R2MX>@Z %%1\q5 + 'wZm_cO+ $%+<-(!3#8$.(   $$%&'%&#$" + "$%!!"(!"%%"  + + + (,)&),'$ # %)--/+)! '('$'(*('+./58760""7=>@=@CB?=>?:6894+24.3:83<=:8BBFE@FIJNQLNMGD=83 '+1-$((&"&/%' #!897DD8+#'+.!#()*$1863>>::78"(.D5/.,)$+/9/3%$"'2085<4//47(1<@5A??A#"B"E&K$= :;9""@?7+9DIOUSQQQTTYZ[`d^ZYY/4983:\9?69?B@=:=@BC@=?<=?A@FEB;94763.1330v03630*!!).2720++/0.12+J,OJPJQRV_`]Y..1.,-.-Z^45674/02342.0/.-*%%&-2545687021032563.'=4?PR-/103434689966579;:8:7:622/-/3441.1bekmhgfia]TKLQVPVbdbUOD>BDBBINH?447Qb`\STWXXY\\.S\`\XVW\.,FMSS*-OHCCIPKE@>DIDA?AJSD;<<-0:A;459CMNJHAFYOI\/+SO++((" "K*+K?@D3:<<>EB8<%&KM,+&)-//,3/*HJK&-2/+('13271-/'./4'2GB48413/3/)**/30.,)(+P121782-**///.,...)# 8+/,*+0-..//..&90"&4/4303/0-R)*)RdOIPMGO/),0/RNPG@HLO?CKDB,,OTV+.+'-.NF=#??/15.210,0,,MAJ31-'.712--,)**)*H-,(.-((':%5461+--/0))32.343-*!+-+3+/1Q.4&+26731.+*-.1+310,,,'OM)(&&()'18631/.++.0LJ,1*-)$%&+/,,,-H=01>",03.+)&G@B8CA?=%+//*.*5>>32521411955:/-24))0./1,-R5700.JJLLKHGDDCC==8@;9<986/3<;=AEA=>=;>:9941)(0+31=EB60/4'/:807/:;C*;.G789=8=CB:=B=B>B<=C<2)'' %7<86:4577B931//6..++1#  ?525.3-/B((#"DA<@;-),'%"&;.+2,"J929F:823-0-1/)77A?94:A96J;9<:20020*6=3(/7''A96-1+##'3638705B79.-/-"&">:1+271#E@D?A#*">;>;89A776661.0.+*./;=4<6/,.3rc]bgm;@h`\\Y^\ZXTX[Tb1739985gi66c`ZUSRU[\^`]ZZn``\__d3mT^h8579<>?;=<;>A@ACABDDEFGGFBCBDGLGGHIHA<<<;;=>:876788:>B@:9899;;<>@=>BCGCDGHFDCECAEGHGGGDCEGIIHGFDBCDFGFFGGGF EDDFGIGEDDFD???>>?>=;::;:::;=;;;<:9:<>AA?>8j:C@>;9:<9nlmllm8q:<;;9878:><::fdr<;>=;;;:o88:>AB@?<<@?@??9555;nGat9>;857895987;<<<>A?===;;:8;>999hPKdg4899:;;7765aajb\[fb\c8hYRLZifV[e7B=86ijgejjaKbrcZiz`YVSR^]Y\i>=::?H:aeec^beedba]ane]^bccie]ZY\]]\\]__bcdeh799874457975667864597778766.684]X140a7lJ7WH48,*,%!" +A5/0?@r#!J8 /,&$"$*5(#+1+,*A-7"%(#2N6'HcjKLM]]W$%D-50 & 5@7;dt2%GNkVxcC`UYCMGUS:84.WrdzyZsfhX2SD"BL/36.1,3F,GI=/('"$##88I*=-121N:B2sW_S|9(5-YVYyd,KWymrriRtcĢooXolhYt`QlmqlT<:685760*!%06493/,,.-,,330,266037::;=>>BCBAB>90,#$$%(+2*((021389AB?@?>638C$!?= :!!!=?@<2)%#*3-/- 48<9B@B@9517<9320+$%),-19634EGA:35?D#JNIOSUUWXXWUXURNRWTUUSNOI@EPSNOUSQVUQQSUUVYXTSVXUTTUXZYYVUXTTUXWWPNIDCCDFNUXTQNHIAHFR[\^_[]^\a]_bejrtsyHpJS\hh^OLKFKJJKKU\_cl6987d]bg\i6h^Z\WRgIcopv~EMWagfejjjb\XWUXYVSXZ\[]]^__aacgghiccb^)\MW]XVY]`bfedkbgjgUS]baekrljrolkjnnpj[e`\XWNONMRVZ]eXQNRRNQZ[[\`_liei;mbkpckfoe^TY_fd\`bdmgg_YWYYZ[\\[bmjf``XTU_d^WRT]YWPTRSVNSWMEFEGBDKKO]XRJQTUWWY]beejhplrkgaif][\ZaTI[XF;8G@/\MFL8G;CGIKMT[LFHEBBDBGHIHHAA{KKPVWROJFKU`fWtoltwusi`_\TYXODHMRRKNTSRUX`^SVUWPOTYWRG?k=DPWVPNUX^TLKHIILQNJLNKGFMOJKMNOQNONKPSQOMJKIMPFxBPONOPSSOQTOMJFNMvJONNQRUZXSWXX\\Z\ZXWTORROPQOOQRPMNPQMNQWXVRQ|xxpirx~tpfaci}}{}zuxrsqljrmhbeik^^qrf_\jt}llQVTXVOMLE=q?A{~{tny~{}y~HIGvJKJQLJIGRUPXXVUU[cb[YROQK@j:?T]LXnkdc[YQUVpJKNSMJIL\Y`_QQURTXXVUPIKKLNJEPTOJPMNPONLIxw>FT]XVRQPOML~IILOOML||mukmbcbxmMMMLIIOORMGPMT\VLMWTOQPLN}oJRUXZ[TYSIJHINMKHIIGIOOHNQXRVYKOQOKIOVUSXVIlDIHHPKVh`]Z_cUPQNPTUYYRQTPIHGFEEB@ENPPRWSPNJMPORUOYNGGFJRZXPNGGqpi\_nAD\]SHD|rvsy{plDXUOJNQW^g[U[f`ZZT_nkcgYUbXMGSPMPJJRSUUKyrqknolgutolkmsaQpmquyroljkhjd`\VSNINX_flvlgaZV`caMY_vNwDenzqhlqjif}C|tr{qdUR[[UOcekynieupulomicd]NRSQTOPQIMLT|Cuqlb~qsuia^XWnXRUTWHWh;6`epodP`\_yJF~tsug`^b\ffV8=m\^kiGfacgdlhYQ[Z^Z_hgG}~z}eIfmljfaXYTZWhh`gAC}qukbkcRMJGNVhchkjhje^^g:=ABysj][b]Evtxxigw~E~wtsnfcZ]EQ\l=?NSNE~@@AADqprodvkqrwhj``a`b_abZZ[cbg}pfd_[jdbfoee^g>fkf`XU`e_]\_^\`^ZYWPNKHFKGKOCJXPHQcZCKA\Mk]WQS5224;6^_67j`XTTNQe6778756da]VQRS[YXUUZXX`^XUUZWTNLJNTNJIHAHJONLPKVOHNJ?<99GHG?88;OH<9=DBELFWNVUYX/37534421_VOTNSVd^[YR0/Y-5T.D@=4YUKSRQMLGDLUSMKMFIJSLJHJMFSMHCHOXRKDCOJMNR\Y`TZTJDEHILE>@CNPSTVQBLBLNSPGVPBHIE>L?LEFIIKPJQPBEMNXMO4AHFQOKP?8A@>A?;<::AC<;99:J:;>87:?<B>;=>@B764`gfdacccec`^_beg11...0-*+//20/-/2-/01053.+,.232333221/.,+//301643/-.--0;0-135 3.,,,-,*+**+&,/0-,+(((*,./1/-)1+*(*,.(&+/"!  ! ! " "!  !"%  !"#"! !! !""!!  """! "!5 #$"!  !!""##4 5666 4283664878656764 +654344=3#17/&&/-u-.3.*)/.+..)&")21&'./..--.0,#06.*29,+)''/,**-!*-,+*./-,+,*-1-)*+,,.,)))*))*++,-..//0|"")   +  +   &@*  +"k.   + +  +   8@`/224K.+   $-/$ 1$D',&E!# )2'+(".$#/-     "7 #3E+3dI40!,, + +#. !.)AJ<;1##)/ -1,"!"'"'$'"" %2HK=N%-  ;<:KhJM`jO!cCGPElMA!GN8$''IJ!O4H9'''2#5?;3+%  !%!,-   #$&(')('&&$ + +  !&%$$#!&$" !$! +   %$+()%d !(-24773/'  !(.10+'%/1-$"'198>@?ACCBC@BCA<=?<>?><=:15=A:CFGHKJKKHHHKGHB@<7f:DKMIFE<@8=<;;;=>>80840/0)+,+.0468.*(,.+-333477@=99507:38481*&*.130446:551-,...14549?>;88310682-+-40/*-,/2,02+%%&&"#'&(.-,).0012358::<=@<>8839521/+/&!*(+#"%%&8,9>.2!"&(+,)"2*55:;:940( &5%14(0$'#+'35#&$"2"##-68<;: @$('""#&),,.28+%(&#$'%'(*))$$GNMQTVXUMR..5<=:50U+08@E=RNISTQMD??;5891(.154-.32249@?1535-,/43.&!5 %-32-.1160,,*+*-RQQV`[V3/,..*''.0.W/0034210-1310.,-,-0)@$./.0254/35/-+O*Z0/?J/1_[ZZ\00346862775966:76530130/0//221/010./378611ab]PF@DKQR\[XKDE?8AGLQID?7349]a[Y\]URVVTPLTYYVTWSTTQMMRQKDIIGEEEDDE@AB>=B?<:BED68DC:40;AG;?QRS25462--+,,*$:!#ABNLPPNHA;:EFECAEHJJ')'=F(((.,+*K(-/,210/.4:9540.0)0.1$1?@>>96-30>=.,.1,*ML)M,54:8/03013332,(***-(&-/-R+0-//.-,*RK>;&0623010.QR-,QOGN*+,..-,SKILJAFB@9;:I=K,-.-++0/0-).+.31,-41-/.,-UUF=G).0235151*+*+,-+*+*(*./I(,.2-14*-/-+).32121(<(*(*VQMSPG-*1=622691-.+-1154..0.*)(ONN*O()$"%),./20-,(+,,/1K-4*&$#%+22-,'(JH=:3**2!02-&&IF>@=CD;4$2/*')+.1:1.4;5/20:C?:;2/82*(0.,.**T3565+KMNNNHFBB<=?>;AA>=>>?0'?<=>;>:6412-''/5;=E=:52/687+24?GC,>$K68=C>7/+.-+'46:A;:7A>@9<:94/$  'A#>=:/@6:<832/-<.,,*+"'+*1;<6+6/2=%$AD:<>7513-.+ 8..3-#C85456;80,1./-163'CCEDG8'58;:9721041:5..!DC@?:292&"%*537<<64-)*,">;6/-0, <:>A77>A$B@E<><52,.#*2&**%B!"""$F;;=;5?8<;@481143]5358132756B;6661;857<7834!4742.+050/-/.,1/,,+(&$#"%#$&!($!*&% .&$!"--2/,)*'&,,,,)&&',**)),**0.*'',)(%$#%(#!! "#&%#%"*$!%"##$&#! !&")"$#%%+)&)%(*0,+("&"(% &%%$$ !'&""# "!&#"""% (%!!$)%"%"$#&+)-%)'" ""%  &()''&%$%(& ($!"!$$ "!"$"%&##*#&! &$!& "# )412.///0237553..0,000.//021/-/011 +~}|}|||}}}|}}}||}|}~~}|||}|}~}|}~|}}~~~}|}|}|}}~}~}}}~~~~~}~~~}}|||}~~~}~}}~ +~~~}}~~}}~}~}}~~}}~ }}|}}~~~~ +~~~~~~~~~}~~}~}}}~~~~~~~~~}~}}}~~|}}||}|}||}|}|}|}|}|}|}||}}|}|}~Ā考~~~}~~~~~ ހȀ 䁌Ⱦր󁇊˕ልŴϿ߀şݽȀ꿉Ѽ񇒏󇓕ǃ醰胔фȴʤȾ鵦ŭޣ«ûĹת߂ũ瞔񔖺ȆǏוӾߩܶ斃ڠ҃𬀓í׈ڨͩٹмʯ䤑ڱÕ̟ޢÊ޳ӨƊۘܩljቅؾӈѠ֜ҁۢҔ௒꺽Ŧͻ牔ުѹɌɿ̵ì˭úӃȾʻԹDZˀܾɕ٤þȽ䂂ϧùȼڴ܋ꀊ싌̶α󙛇ºʽրիٛɱݙȆֻـ١ڊ􆉈އ۹ƹ̀»ᆊ÷⊓񏚏سɿ¿̹ʽ؂ϴɭùκһ̿Ľٍ٭ȰʾцųùԹꆋ򕝐¹¹Dzٽͼ܀ĸ􇎆źǼºк򉋆ȴȽ׿½눉۸ıѻеõƠݸľÀĥέ󃏘455faUWdb`^c]dgfgedb[`_ciehnj`\S^vkjoj8qo6jgdgaiea7>>8875f669:998nd`abcdkncYfgl:?m:6gdh`_b`\_NLM[a258;>4;?9lfd`]^^_ZY\b]^_ea^WU]YRV\ac5g7>=;???<::=?BCEDCBA?CFEEDBBIOKD@>>=>;9:=95jk7=?<:9>=?BAA@>ADBCDHDHJIFC@B@BAADFDEEBDGGHIGFABBACBEEECCEFDCBCBFGECDFC@@@#>>?>?==<=<::;=<<<;;<;><;<=;;>=;:;;<)=<8;A@DF@9n:ojihghiju>?=99p8:>==>??<;s:8m; :po99::>?AA?=<;;9:@E=<<<7mnkno;<:;998nnn7ononnmljhiggk9;;9;;:==;:;<=>@?AGA>?867=>YAWh>;868<:7:?897:>=@<;8bSLkfRf9;<;8l84579l]phYYN^khe`YS^coSEAJNR]q?=< <:897qaW[a_bc@^ZOXbcNMXdr:nc]mlcalhgc_efkidgaagcidaksg^[\_b_\ZZWX`a_^a`[[^03767655546545788984323351\2[X4eW?NcH/?50((?98<1.7:#0343.6313-W5+.!& :#,!'(!.J08C9GH3+DR+/[K4OTN-?%(! *1/(EbpA"  -#+/#-&>:0%0!1$$40)"8+BQD)9BF;:rru[:"D?31(:N?4)75p0jJKaY^qoMhtRKYE+nfowXjV`]}h&, #1.K6<4+*@<49UFH1A<5%/+&&-55.LT17;qma|{DH"6#"(>Lig:OX\fK%^1>NTJj`Yn>FdBhousjWzzWPY8?2BF=aektyeuHlbqLU<++J74JBb@;FUdWkK[DMM5f+0AXOMT0#$)M5F\\y|RrpYB0'"GHL7(($1slFZzYD~c@N}^}\[uxpbrevau]d{/626764/0235;1%,2/0532342367;/,3<;>>@@@ACDBCB@;7,### (()6330(&,8>AB@@?<8@ED8B::68<@C:59??=5' ",+,-)27:HHIC<1028AB6---,(&$39;?;;>@ACA<:4*'%/&*" /0,.6?8:A@:?>CEA8?:DGIGMSXWXXXVWXUUTQVWXXWWRJIO'MPSTQSSONNUTSQSSVTM[TG==IPYWUNWUQQSTTPJM><@FJR]_^\_a`ZG>NU[]``_`bgb_lnqdvNCckHR]UTUTTVXXRLFIQUbdk9hV33877ih4::7<<:8j\JGADGQ[fgifdfd`XY^\\\WWSTSVX[_^\Z^^^gr9rn:7:gbi^R\_ddgjnqghegmp:rgllopklolmlh^b]^`]V\IQ=>EEHKIHMLLMRNNFFLPQOS]Zegjfoc[``b_7==98mih^ZXVXelBB9jdnnhhYY[_`\YTPPWfe_[SQf\]]`ND;i6;5;`AA8e^554RQK\[MNKB=HABZPROA6Q6G6\dV9Wmw_CB>1k;**,,-0,*..!IVsu{rhpAzA?x@ADGGKLHJSUQQRNKEGEEFBCA`AaAGIKIJQZwJUYWYQxQ9gKR`gi_chaTNPRUUPQUYWRFE~{HJJLQXaPRUTbddi`a_ehdac`VX[UNOMPGOSTMJKJMONQNMJLHEKKFHzpJMKNOMJMSMNKIIJPTOOUONLSUPLQVQOMFGKLOVTRPMNSSTVWXUOOQLLMPOPNLMOOLKLMQQTSVYY~~}yuosty]WJfzqmheZk|}}uoosd[W]m`T^okif_e|NUTUSLMRUWNGAx{}}zx|y|}y{HCp~DLTRKNRU[ZbVU[[b^[SRJIIDGNHSNOcoqk]XvZI_FUQUVIFRLHPIQ[RRX[TTQOUOMMLOWSRRNKLQPKHMIHIFQXVXWVXRMJHK~IIKNPuomy{ple^PGYqkNSTNJSPVV[Z[YIPVRKLJUIvyMXf\YYOUMNOOSTNOQMJF}KVMROQJTMKHEHMQGMGU-zxuygkuiNjihc`^Ye^OQTT`XTW[WNVEE~|DEDNNFLKLMPOSSPLNKKRW^X[VOIF}{gow@>BTQTTMKDwkkljgzIRRKGIKW\^[Vdf^]_ZYnoae[KPY\TQYRMOMLKLMOL~}rnlghkgiywkmlrpchm`rpmlnifggjgbaWROQI\Xfomde`]\[_`PObmGC|ys|rlprikarIEJnwq\PSR][IUhonswgryFvqmf]_]WPLOONRR\REQm|un`ex~yecf`PbeX[mlkak?miiphk\WRcrLJ~@zwg]aXaWffi;>kkge]GGoWZabfhgV\YW]_dTv{Fyvp]RZhjfe^XNQ[^hg_BTH{}nzxiSUSY]UYvxn`X_\b^p@FCwoq[\chhf`48269?A;F>@EEGGIGLSEJHOG7R?AGCJQJOQL]GETMQHSCCHFUUCF?847CA=AD?9@?9C=6ANC4BCA<@>;;@D=Al99?:;9>>85830^36765577798;:9::9978985lhi355gcc^`gglhc^\c6;A??BA@E>64jkkjfa]`dfe]`bcg51/(*220-/-0213000-/.0114871-'/<32745543/3/41//60-./12350+/3331020.13.0($$)*410/-.-/-,/1.+)+-.)',*'*+-,/$"46K  !$""!   !""!!  !"! !   m ! !""!! !" !"#" " 68433345495 :677 +654774456554654333123,",1 -)'3/'-0.(2.&'&,0--,)(-.7& !&&(*21+('+,++,-.,*#+00$#(*//+)12,+0,,+,+..31./**,-1-,.2.,*)+-+))*().-.-.,(&' n#"!%&  + + + +  &  + +   &,   -7l      9CB<  + +  +# 40'7//-?$(>." ++9!#?32)#!      "%'49&:DU ,4Vv53% + ),: , ,=*8;)11Y,!$  !#(# "! :78@!- )B##  "Wc@bb0oJA0DF/ +`} + UWU%K<)#,&%3'  + 5&  #$))**(*,+*&! +  $%&%%$! %)'&""$$&# +   #%.--&$'  "%&)/3221-+% (%&02*)$(('")',066:=@ACB@ADDCEEBEABAADA;8;;;<=<@@;;@504<>HRSRPSSUS?8FOSQVWUTUYSNXVD#E&!02"+.)*,+,-//.,%(*-313/$++1-%#B#"$+2:9;74652,-1110,,+--/2444214248=:72040(1243557:475669=8=<>=<=?;<<938556/*1$!$$)*'&*(**,**'(+,--163:;;5:2-0110636212105;$#:7;<9<2258863///2<:52,+;4758,% 6, -*"01434230-7D>:8986:;A=??E#A=6*"%*)7%#%-)210R% 61/<:11-)$+),<472(!0( ,03*9>7$%':$+4CAB927$D&%E$$(*)-,+-35211,,(*&$#4"5%,/3/,//?+8=<=4D'9-6AGI@BE>3.0365136;93**OIF-00/5;B211/:;:@;:8=>;9:71373,)',(-11,+,+-//00.L*+&'++*,QF@.//00/.02./,**+/1-03/01662.052/,)+.XXUV[[`^a`_[/26531./2356786001-/.100.--//../.10337:8XZ[[OGEFMUTPIMEHLC?;AEEW[L2.$8L^`^^ed`[WLGOX\XQQOUVTTUMKMMFJG<:740@JIJD@@B832:C;18@<;959FMHMVVY/1010,.043-(#@CEGEBFKMLFGKMDBCKPNKLKGN)&;C$+00,ON-.146;2544::61/*Q*'!#&",()9BHC96JE6'9/3/43(K)/)(.&.4025510..2,I.**.3000,*+.-*)-)*,TMOI%-2/52241.,,-PGMOR**+-0WOKE@?FJBB>9-'1A:,00/PLQ+1/436354*K.2.*+O*U3+@BE*29435/3L,./-//+-/,+(KFJ,3,/-/*0*+*'),/(O+%*LRIJOBEG9,>=;764195,.10830131,4(LK'MNQNIGJG%&$+,'G*)**-,0./,,**./3252.)(IED48= !/+//))%A;<<74BGC'..*&&&/000/8;64534CC7:3),141/5/,-,,U.../,PNMLHGB@?::?=?=C?37;4B@><<:9;==<7631/-$20;B@99534378-+6:(%BCGKC?F>B(B?;1*.799:64,+0151'*$EBE;C?H6*+)+,(,AC?4-*%)(4""C<79+.1430!!96:7778;DC?493012;2#(%$GA?B#%A:=<;=:98@3*7830/2946:5.-/12B:03:8:/+:53;B9;4<7:7+*)/14(+'/2-4,++(##$!#%" "" &'*'$''$)*..0001--/-'(-,12.'%()(*('%#//+%%&&(&'$$&"!$ ()(&"$$!&/'## "!!#  ,&#"###$%+,('(&'%)$#%*(%%&##$#"%+#(*&""&%")$$'(%&&$','" $%#%(*'.(#(% !"$*$'%"! "!!#'$!$!' #&"D$&#.!%#%!'! ('!  #$,( +422..1/045851.,/23331.,-143.00// ~~~}|||}}|}|}|}||}}}|}|}|}~~~~~}|||}}| +}~}|||}~{| +{{{||}}|||}||}}}~}~~}~}~~}~~}~} ||}~}~}~~~}~~ ~~~}~~~~}~~~~~~}~}~}~~}~~~}}~~}}}}|}}~~~~~~~~~~~~~}~~~~~~}|}~}~~~~}~~~}|}||}}}|}|}|}~}~߀Ԁɀ߀ 퀋񁈈Ā 􆓐ʼ寕뀂˧დѸ깔ˮDZâ֌̲ωܙߊɅӉ׵ۏŹ»۪ʻ厡ծٱݬԝÐȦÒɵЀޫƃ΂Ȋ鞚ڣΧʛϵ淫̕⸌Ǐۥ˸轊ƏԔ؀懺ᛝڷݠ䰁뒌ม䇅پ뽡ØǤîԃى߇䁅ūƼ߲Žľ􁘢ƿل񁊄ŬǍͿ€ҳ选ջڸϮ㸌ꁄʻĿǽſɿĭ҉ڼ盨璕踳㿨Ĭ؅򀉎۲ӵ􀀃ԽĴ큃ų񉌕⊔퀈逡ӫ큈톁򆒗¾ǻϺ؀׹ڀθǿθΙž㈆ֱ٣ô˶냖ŀ老Ԇ偑öٶ͵끅ŷȄ򋑃½ѿDz«郎􅢊̽оϼɵȮɿpׁ뀊430ab`[ZWY`Z^d6fgeeedba]^ddmi`[YT]njf[_fhhl9rhilj`anr::87ig7:97577iaadhgcdff4dgifc8::7j6gfjf\YOLY`]3678fdmleedca^_ab^_cegga\a_YRTOKUTWVZ\`dm8799;?B?=;;=@>=>::9>AA@@CFHIHHC?@?<=>::9lkl8;;:;=>BBB??ABA>@FCCDEB@>??B9?@DGABCFIHHFEEGFGIGDCBACEEGFCCDFEEGFCCCBA??>@?@?@@?=<<;;;:;9p::=@AADCCDBCCEFDDDB@ABCEA??@>;<=>;999867lm><<;:;9:9::9lmo:>C@?=<;9:9;;;iimnpqpq989:=:;;:89:988nnonkjiffhn<@<<;::;<<==<@BBDEGCA@:7:pm^fh:<;78=BA;;<==;?A>===A@CDGE?=<;7gfTY\Qf<7:."# 957'-2/+('7A=//+6HI?0%'0#B484P+/DIK.Q&8GQT;Q8%6$ '!*2hY_Q}M%&  ,'"%&0)(%"'/&)%#'%-0(#/!-BQyLKgOZ3,MD)V=<5=6J<0.8RnX[vx|XgzkQtgUbgfC% BVUg~ls~E))+/1%?G%(444D75&G8*';$$$*=51),0+F{~iNmm+!7# +,9cc~fTzffyI=+NI?DuVPbE}M?CB?>==7.$$%$145>:0+47::=>?=;!##:B@5.1<;46617;?:-#$()"$$%)"-,3?FF=43.'&2=><>:609=B?0(,667<:9=:4*/3063 "22-..*)+19<67 !?IIC?6<@@:pjafkh7;lfljjmoontjeeecdddkhdddX_]Z[KEbcI5AIKNOOOWKLPNGJKMMMNKKKLMRaj;:7gf_`g9<>nghfedgf^RZ_hnmflhcb_[YZ]^[XONRTXWWYMNKIKGF?:bgcpASMF?FMR^`_ZX[\`eZVYdifd^ZXVXXY\Y_kulku;:_ULSNG@=D95aPFDMYK4[HJK+,+).,-,KbL7*SNHIGC7/K[Y>CYHHDbY?66)E62/.5:>EF7Uxxu?rp9>=urs=s=ACEGEJTQKONJE?>z}GI?@xCnvFIKLOEBvAFLRkPR@HUPMJHJHKIHRPLNQNMGFFGEFFEGO]cdb_]\_afc[`_`ee_a`][RPQURQTROQRKKHIHJMMGeUtyLNIJKNMONLMMNRTURQUTTURPPQPLQSPSPPNP{ONKKMMOPPQSRSPMLOSTOLMMHMOTPPSUVVURKNLIKHJy|wzvjekzEPxlgZVi~xptwpbYVMJIYMWddinNSTSWUPPPMONN~~ykovuzPFKVYVROQSVPOSXSNWSQSQLxpx|zETRQ\SFgwsaUTTVUZ[\\[SLHHMNROMRQNT[WPLQNHEPLKTTSPMIKPWNJNMMU[[[XRWUMJIIILM{qklolund[]QMX_|IXLK~LRYRSWXSSK{MQQTUNIOLJPRd`WURNMPNRQNRUX\LSJPNTXSQTUPJIHIRrJIhxZIVHPDWKpoie[SVXXQORTXXUYZXQRMGK|zCDLOQLMMIMUMOOMLMLSRMU^[UI}nywnC?EP]WMOIFFDkmtuirCKNOKFDB=V`aXT]hddS[XXXZXWRNX]YMWVJHJKKHHBq|ttynihlbtuqklmaioigomkjjie`fcah_XPMPHXkna[Obvskb]VL_mmDnwuqnstpkmgjqFHruv^UXYXQS[amlwwojwxmla^^QQLPMMOQ\kZRVmuwugx|nspkkm\\`\e^hleeD~}vuvj]UO\hQEx}skhfb]cdai6FAtd[jiBIrlUa^jfbUSMV[bjZCEdekopbih`X[]J@CXNWi8RQEGzwtnjgbfj`_csvk_WW_][c:>??>?rlf^bd_aYFKDBA|{mkCwtuknnmkhcenghkdgf[T`jRWWX]dkZ_ffeTYl_`f9:mkon?taXYW^[\XVSZZ^YXTQJLPQMJHIFADGUJMTU_fN]N+T\3W^795gc]]cca]ZTURWf678645jb__[TUTUSQPJYe^^WUUSSTSNNMJHB@9APPZVTIIFFTX^[SH?;ACF=;7;=I?IQCDL[][Z444775^ZVX]]`^WSXWU16.V0FLBEOD>MIHPKPTLJCGRUQUSGEJJNRLG:87c<=E58KBFX5:d2::=@I9553^^546678787;::99:::;77<;976gh686gib``aeijhc\b49:9;@?<;99:975fea_`blifb]d+.0,.+,/,.1120/2200-.21861.,)-852+/131382366/066212--/12/..0+---+21043,*'#(+)1.11010/.-.020./1330,-.,(''$)))((*.05) 234 ! !   !!"!  !""!  "!! "! 7 """#! " !  45 $:54439 67773336!-6588877745654430223. 32.42w0/'+.)/1*-,+*%*)-///--42',75' -*%%#,*-.*-.+''',.1.*#&-1)(-)('+*/&'*,,,./*+-...-,(*+.)*5 3-+*+.,)**'%')*)+,+**#!  +  + +   + +  +  + +4)='  +  + +   >,%4R # $ + +)%0#*G4A"+'J( $4,11&#! '2(  + +    + 3'/*+<0T]1!MNDER+ () 6 88$'/-2G*"0 ' &%, *D^U:j'  9  .9+* ,<*+IGb  1dpaf<%-/ 60+$*$!&$,   " ))&')())'$#! + !!###!#&)!#" %*&  +  &))"!%$$  #$##$')&%))$ +  %% %00*#-/277;?@>>@ABDGBAB"C?AC>=96:@CBAA==FFA@@E@?:?A>@D@3121:@MSVRTUSTNJMRSUUTVVTD5&14$.0+,)*.10-+-08:93,,,-//+410/-301;:;7984201/27553153,,.221332477:;<! 6306:442678<<<;?98867778=967815301(%44&"'),-,-1'),*'++,+,,))***,6< 430258699::<;6,36:<;9<<::74457764/.0142/0*,*)+*)% 23/1&# %)3685346792139><;6320334525=C=;A ,$ %!+#".+#*+,;)31-./&#$151#*;+**;6%$')22"4EE@#:;##@=?"@"#%(*()20*,+)'$$JJ**!!>#=B*-..-&%?$*15XP<)(#*610-+.-/.,32002/0+N*+*"))*POTWYZ+*/9=>>;99::>:59:99><<:::96<99=63/--&2@A83*6BB=862,5<<'F;HQ@?<>;<;;>ID')J??8@BE:>=:9:12415.451- 9764021+,"">5.64!%9;*21964--(*)+2, 0277;4874/35)!'"%+(+%)G@>?987466//2>@94/.-(&*  :65//.,-' !;:4677;<&A9::9>87"&!""A@:8E$C=;>78:9863496694761-29*/.035:03632*,71136577;1-.,/--+,)-,-+,*'$$&(&##%$(%&(').& $(%)0.*+.00,,*+().1/..-'&&''&'%*0,,*'(''()%&$"! (%*(&!! '*-*&"!#$$ ##( (('%,+,-/,-,'"&&$$)&$"!'!#""%'&(+(&(%#()$%$%(+.&%'#" ""%#((2,v%.0%"**##"!&,*))" #$!$ $ "$$ $""%!$'#"%%$'&##$$" /" "!"##,)*(2214100137530,. 10-,.17531,-~}|}||}|}}}|}~~~~~}| }~}|~~}|{{{|}~}}~~~~~} |}}~}~~~}}~~}|} +~~}~~~~}~}}~~~~~~}~~~}~~~~~}~}}~}~~~~ ~~~~}}}~~~ ~~~}}~~}}~ }|}}}~~~~}~~~}}|}|}|}|}|}|}|}|}|}|}}}|}~~}~}~}~~~~}  ˀ ھyϾü݄èƾڛ߭ϲԧݍႰdzῆܸձ֭Տҧٳ援ɴƽܢå񒡭ӈ̊ր؊ղ̽ɴꀗՔʿۻیܵ¤޶ԅĘ޽Πɏݶ̇岈ӹųۃ׃֣ƐĊڎׄ؆잖ľܿƵμΪۡύߪڐ劶’؀㌗ₔع¶¼̰ǿýܸ쌍큂üՀ魡úᄊ۾ǝþÿˀƸ۹Ǎʙֽڇа©Ɛɡ큑癜򙚙臂¿Ƽ򄄂ò섗􀂁ؗƇ邎ij۾ˊүؿԲнȥͽ½Ʒ܌錞Ž½̿ĶĀȿ»Ķ㎑ŵеǾźƭϿķ¼¼̼ʾŷ俭޸ׄІ낅961\]db][VVTSXdk7eacihb\Xa`ff_WTaWY^^NIYedgkmh]_jegpwu=;:;=lliggf6kcacgfhee37998fTY_fgg57ja^YXVY`a\]g9888kebfcccbdjmihefjijiiiff}aXNLNWVOJMQ]dl86h?==BDDB>;<<8766g8<:=A?BB>@@>>@AAACC?ACADABDJHDCBFHEDFCEHGGIHIGFFEEGEFFGHEBCBBDA@?A@???=:::888op::r99:<>@@CFEDBAACFGEDBAABDHGCADE=:;=<==<<=:nlkkm9ptt>qhgfoA?<:=>><<:=;l;::;@<;pp9qpnmnqpq==;===?>=??@@?;jlnhchjk>loqpqq89;99:<==98nlnnp;toliggkn=>=?=;;=??@AB??DKGIHF=;Jk:j`^9<:BFA<9:;><=89<;?@A@BB><=:<;mg;kMXh846;:g9;;:86fcecdei6668:k_RhvkaT_kignlSmvs::96j``]b__Y\]_d[DWbjohkflf_pifajpca][]a`_YY]ZUQ[kjceeb```a_]YWX[^``^_`a_[^b578::88999:::;;8756@;:;:1487781^dTTUAK_?Q+00#&C;>`OO(38* 72$"#./1--8B5HH5:;,3,FCMOR*7R93WKBL;8DBL NG789 '%$ 1")R(4=ka:9$$!" ! *0.-2-$3A')0 9+)1&,!(/*1*6==zWwJS33(!E:2WKIWD4a=G)-/E83<;Y~tb}tziP?Z7A)9HviowQkPQ . .-&+'"/,P-6&0."(&*!&>,#:14.FORuvqmeiIg?'76%'((k_p^eybXQQ6YH|ym_`Nq_tZnnexJk_:Tq0samYfa}ah=NmhkmqX.29;EO-646MT~Y!?_6S975@48W6KD3JE*+D2N++BE#%0,JtVSP\tkomXtz^9'#:SUX}Raq{mzrPen_> !" @>7.($2/!-*5=4287@"@>42#$04-)027;:226:=;=?A=@=,# &++.>"69??:>=:975:BJBAABHELE5179:=92&&&$k#')&*-4.-475683462% +7:CCAG#"":><8B:-3765765:,)65-*: ! & 6;#"=B$FFPSUQJDOLWTUQHT-,+UNKOQ*+)'((NUYY][XYYYWQTRSW]WRIHNZUWSHHKNOPQLEAA>BS\`^YTYW\Z\X_enoos\Uf_WURJOU``b\Y[h58^Xfilm:7l6:=;;<;3>?@?A?=?=;mggdY]nunddca_^][Z`gc`aefYMSWY]`aceghlkkkd^`eel889ReWkflY9<>==:nmhdbkd\^cfhd_cpsojedXmcfbe`cXTSPMJMOTQT_[GHGGLMJOOLDD@=H_iq8=;njgi^`\djfcfff^\^b_\ZWY`cZWVTVVWWUJJGHRMMLKF>:AEMRTPEMIIPac[WX[]b`]]]ZZXY^_bb_ZZ\Z^`UTXYZaeldimr;75fhZWUO=B4dBannQgGLan_=WGb=WTCGJIKG@?IHB+3B>G:*6:268,y#?AxQaenZbQCTJAUdis>?>CC<]sB@?=;;CDFMJB=ABCDA{CF@=CEBpBIEgcx>HGXSNSTQNH?EJOIOOMJJMQLGFBBECJJIFEEMU^\]YWWX]gjd^V.Z^\KyYchaPPQRJICutvMPSH@FF{MNKLKJJLONQPMJJKIIGHHMPMOPMLKMLKJOQOLPOFJMNORSSPONORTRROSQTX[VPOJ~SRQSUURPRNFCHp|}rQQ|}~Tk}tuzp_XNQWjfdkzRWUXYYTNHwll{zy~~}vts~{|IKOMJNQJGGJJKLJITVTNtop}RU\[XDtE}qfWhiw{y_a[e^_[XTTM[SWXU\Y[_qpfbXPLG8G\g[ZnGMSON{bjof]bcceswi_^\YTllcsG@>B?@AJC<@JKW_b_002694[QR[`c23XWOL^22_X53,3]UQKHHPLBLQMQTUVQHPJLMNKMJFLMNOKYSJBCDLKJJLSTYaYLUTOOROBJUPR[VLLPRKI?;H:<4AIHQRQ6JHDNMNYVNKBNQVX\_MFOLJK]K><;4a;39C?IDAGAA94>C:8?;9@D2bIMV77F:43`\^556758887:69789;:676i`b76gfeed^Z`kkiba^a543<<=<437>>633fcbdZ]`_[de%'00/0,,*)+231-0430.,1054/+)2+-//&$,/,.343/1736:<:52010/1.-//-/.--%(,./05.+*+)'+**(-1//20/..05741./31i230,&##((%$&&,/000 !"! !!   ##  !  "A#"  " !" ! ! !! 888 !###  ##!!!"" !" 75458:;:95437! 4 8887877989455315576788864455585532354# !! 73/-106),/,-+.-,,/1*".70.&-4102/#/11/++*,*)(*+,0))-03/1.0,+&4/,(-.*,)(),,*((+(&$*0.*,+,+++,++('()+,-/,*,+d#&       +  + + +  . + " +=' +  +  +  + D.;)."   +M,)M$0?>8#+:( %  +6+759 % $!'+./   + +    +  "!$#  >BLQ\\3;\nP=)1 / &1 #4(J.&?MC>%$!%"+  #-1'!'2J&R 0  !3$F4:=:O^- +T*,&51\.#+0!19&$&+$)'#)!4   # ! #%$$$%##    #$!"#%-''(+1./+"!"&*'" +    $$#( #$ &#   !   "'/099<=8178@@C?7?# @:6895<>;<;>@BED@@ADIQKG>965;824798757>??=;9.8364425-,.-*),-.+,74&(('+,*--+%%# '6:= :867043:=<:;<;867:7542179412133342)(&'-+***(%!&)./-)"&%$'030.257;9866422488;;854659:3110069>8<:9--'%%!+'..$. (.+!)"-)##)*,,)&-,*$+),! " &,-@M;56-$.78>$##&'!1?(%$! &&),*% "##&%LLJ$& #)&<")&20@!)*:815632(#*01,.//.,,0,)*(KO)*P)-,+VQOQVV*('/7;;=8655:@A<832449;9,=4DXWUSVRRSZWZUOLUVYYXVNQPTPKKLLDE>$:HINIPMHAEF?62))-857;FQMPPV1447872.)928KOONORQMHIILQONJONKJE?;=FFJW^VOR*,/,*/1,**+'%-12/RH>;9@I.1530!6"BA?51224439:1+'QS+,,.**1--./20.0,&-/--83-R*NP.533JU+VX..-U/54542/0-+*SQLMO,-++SMOGC;89;;@A<77$+00/!++*MK-76963421./+P,.347TAR+0/%-;88941-(40.-/.,)-)'(HN-.U./+)(&*,*F.QIPPT8M0TRKL/*6$MAB=A:5.+/4.,.0100422./-)Q((&&MOEAILI(+,0.-.)(/.-.+(,.04175//&AFD@<=D$$'+,*,'HKDGGADA?"&')*$"@8"1:7*+/92.-62.-/0/-+773.5+(('JLP)?BGIEHHJGJIJA=87FMIF?@<647?<:;;:<=8923+7:74121.171(539>@?=8>;A$IIED6ADD5-/2,1/16=;;>CGD><89;3-/-%!# !'859.0857-->*54,3'AC><=551/4&$A<;765;04373"B>8,44=>?G2408110/-,%("''%(')*8<640,+'"',$&-$'---C168403544=D<71110.:7-6" #=406,1, '+-"##998356)#DB?:885")# $!;8==6B$?AAB>BD?:;=;===<=@AAA@?=>??;8p9pnor;;<=ACBCEDCBAADEFDBBACDEGGBBB?::<:;<<>@><=;mgkkijuvsnihq>=;s;@?;8olj8xkkmmnppqqq:99;@>=<;:89q99rqpnkmoghm;ACB?AB?ACB@?AD@CBIC=^ppg`c9<=<=>9751W5302]XUKPSOG58OCM@T&1P056IK6F0G"941*# )=&)-.T88786333:DC9?OWEH>>7,<9'$3!*%!)!gVO?PU=c8!&)%!!   #0G%$=F./)*%9).7!" 26+*&7MDBA::C@D@G-/+N,?&EML:22 A:>D^iN=kemNMcfdig]c]T65.$#%B,6"3F9;53'$&PK-G9;Il~luAEJ'-%(3DR]vjvSYT]wUrc}L}pzTGHsY^SC5^DNBWoZee]jtlqjmszPfqolOG>J?GEV948>A852/:C@3@VW44>F;IJZP)4%E4?6+*"-AK8T@NUPvqYdbvzF7D,cN]B]Fqcp\fdmwjulzim]mdK!'%" >@=50,78568;922/-++)()%'*299/2-&-3;=BBEC>5-$#,.3:=@>?>;@:26611FGKGCCBDAB88.,12.*!#%%!$#'+/1)'004:<::75'(/7 "">?<=EIB94>61+ "495/-)13#$%#! !"?77;A)SSMEGQLSLDCELS+WPJQ*N*,*+**)+-*OWZZ[\YYZ\a_^^^Z[YZZTS^][VRMMQV[]]WRSRUY[_`]__`abdfeb[llQeiie\UYLJO[l7eX]bjcg76l<<:;8:>>>@>:=<9;9i^cdjedcbdaaabbc`a_]ZWY[\cgddbeb^[_bejibgic^\YY\\WX\^_cf7h7?9:ok9:;qp.ohcdf`gigheejkhffjhfgkbecYWZZXZRRSSNOMQVVONGPQJNPSLGHFBIXedYaeafd_^cabb_^]\][ZZ[]^]XYWTRSQSROSWRWXSKLGK@;<>@=>D@EPPOUaddbYXTTW[[[ZWZWV`df_[ZZYZ^\XY]]Z^Ziorvx@DGJF8TTc9kbVZdvo[WZRPGakfWLLETMSYQVRLJLUT,100.-*.,*+,-05coBE]{>T\?>S`elnupr::??=GDpw>?DDEJNRKGJHtDDDBA>>?zili9DslqDNT^osopgZQGILNIBFHKMIIFFGHGIIGFIFz}GLMQR]ZYWVVWY_ba^X\XZ\ZVVOIQVVYUZSXXVRNQNJJC?BHLMJGOOOMMKOQOPMKrbz{yyuHHKGILONKQQOKDvJTQOJNRSSRWXZYTXWOUVUSPNSSVXVXSTRPOOSJEFIEHMHNObnMl{mnjz~omtswhZ[bjwM|xET[WWWQLKJswx}{uzz}yz{y{y|}tuvi]bvFDnHZSQHth]pBNWXYROrfbwteUT[YYUWWSIKRSWVSSTNNVXVRNIINQLZZQLYLHU\OJPORVUWURLOF{pvKNJ|snid[]kh`daaVVYcd^ZC^UQMPNRZYXRUQPVNKLHRQ{PVRSnf]_[\TNPURSROOIGRwKKSLF}v}ocieyJ3XVV`HXASPdqfje`VSZf^TPOTWW]ZYUSUROLMLJHtv{wx@PRTSQOKKKQNRRKJQUXVQSQRKMOMHGLIMPSOKNONGEGHH~}BCDCECA?z=F_aSKPURPNOOTORSTQMOWYWNHDGE{yyyvpv|{||rqjyxzwng[Qigtkdpskhij^^\ZSY]XYTYYSTsyw|zyregeb`hgkbo~tmysnoxohD{qqjjkyeRPYRYNV[_]h}Lnb_gne`eiikj_ZVdfsj`bmnehmmplfqeU^gaVimd_R5Mvuvposk]bgbDHrbkxu[`cfhnu=Buha]cdqpsu_ZXTQ[][VNVXJSXYTX]bwhcVLTE@PZ][5YKN?Uqdmlg]Ug`lpkn]`f`Wa}Yrcd?rtExlkc[bnNVNLHhA=Bs]hh=RF~{oi\oBICAE?yollrwGC|wsuurnlpmg`annceb]dWUebUgti]][a^^^d421][6;:koshd_TUUZ_ag]ZWXLMIOPLTQLMQNOOJGIONSRLNWGH]1c]Y1;85eea`SQYUZ_a]VU^23262c`^^XXYXSWXWTPSW_^\]ZTQRNQOLKGDDILKKNRRIHLJRQTUJIOGBFB;AJ>5DA;@CA?A@CAFM[c_]1043cXMTY^_]`^][``QPRM_ST\XYRKFKMDRUXWfXPNHHJHEHGLFEJUHGFPOQCDKKOAE@MWGMMMPMPMWJ@FRTNTNHOJJHN9?HBCHDB>JUJ=>G=LHP_OQKJKRUV_REFRONTPBA98:8a3D@=GCBDI?29;:3FYG +#6@a1)7!#$ +*!"  "#')+($ "# ""!$(*-++*+-))"!   ##'#  $$#")*&  +   + + $  (98844;5;61248=<<7988>?>%?BEJIILNMLKLLFELPNLGDEHKQQTGADCGMNPQMLJIA202=<-4741/,/'&&*2.)-01.213,027657797999886663322335645441/02569:59:621//11//011365 <:;:;:89949:;387#849&-3;IOIJC8/*-00-')*.2,+**+,,,+)(*(KFINOML)-,/2<::9878;=??<8:8;>:67/Q*198:792320/./*&'#!"'++*(-/110/`a`1201/,SA8HOSHDDLPCL**-RO*RR,[/1.,PMLX120+#9FG+220.[033348997489ede267421.126:685530Y0.1)$&(%(+(HEO./adbYOPX[XL2=LVZVTRSUTNNWY-PRXVVQNLLRKH;IPG=;9KJPNFLG=>FFI;1/03%054661-,+GBCEKMONLKKILLIEHILIKOGDFEJBHQRURLKJHH@@HHB916BN'#1&431)D<3*6 +0330-8.9ED;337642441*OQR*/.210/0+,1331-()-.K,65/.8-*R46-EQ+QNV2/TQ/02321-/(GE=DKT,/-WOJFB@>78@>9<9;546:7/+"60.-/-1422.1./5/-KO-*10GQ051H.@:47450,.2000,,)(1JHAMPS+,PL/-)OQHDI]D=B@Q3#:?==)6"..:B:=:70/2:4-++110232//2.,***('HACEBB#../-.+))*.+//*(/15402//)*+*&%*(++-*(*++'J''((CDI$##$&$"B">#46/),.--,++.*-..,+-343-(&('LKKJDAADC@CFFISOGA@;FJEGKD=;3,:6>96>@<;;<5543/1501.23//BDDDADB:;:86:9>6AHC?FA=98:F:0,3.3),-..5CH*C<538<5167666-(&45<712:;569;;95?7-293,7;40$'<=?;:>:1441#'=28A@2567898!>73022:;=LA21/+(121.'**!#('&(*.?84/)2(!#&&&"&&/G>37671,60:;9:0263-5D,;-, ::$>750*+2"*!!1 #:==;98=;733<<466160+88/8K@:20-*&')+$"8:<540**)-014-*')"$!%)%+)&%'%%(%##&$((##*""***'-/./%%*(,/0-*&(..,+'&*+'**)(%'(,,*+*('(%'%#"!!!##"#%&&!"%"%%),%#'" "$"  !#(,)(.+&),.-++)*)++#$&#,$%*'(" !#%!((*(2(%%"!#" #"$ "*"""&%& $$&"$)###%$%#)" &'$'% %###&" $! #*#"$!$.&&""#'((-%'%#(&!-$ #!!$)$#)()(=0/1258741023120/211100/.-,  ~~}}~}||}}|||}~~~~}|}~}~~~}|{|}~~}}~}~}}~~~~~~}}}~}"~}}~}~}}~}~~~~~~}~}||}}}~~~~}~}~} ~}}}|}~}~~~~}}~} ~~}~~~}~~}}}~~~~}~~~}~~~~~~~}}~~}~~~~~}~ ~~~~}|}|}|}|}}}|}|}|}|}|}|}|}~~}~ }~}~ +~}ր̀ þ񃄋􃇉뇄󅆀Ǹ느􊠨،‍⁂ٸ݂逃˙ފϮݵѽЩ󍓓܉۩ѮҲχϼÒġȡ򂆁ƭҟߴʿŋȪ͟ՔפҚаձ߀ꇛ꼲Ȑ҇Ꮔ訄ϑŞäӵƯ並㯌̴݂݀ږʩ߯򝏴؛ō؟ƘºĐԜÌԇĹҳ䭈ǝ응ԋΎ󱂼ƯݓȸæŵƼӿĠ³򈋄큅톞־斤ځ􉍋򃄂ǿҁ섑ƿ¾Ƽûúƪ÷þĽῨĻ錷焄֞󁊁ۀ򅈊䁀芗􅆉񂏓񁋎ۀ̘ż灜¤ı𓥎􉔖ȿ葄鄌ս˕竑Ъܯ鬺톌շƾصށžϽ޺εӲـͷӿɯߵɹҎɀԿͺƽꔈҶʸϯ̳րȬƿÿ텄ǽǵɵٿͼºɸîۀ긛ʽލ߀YZ\adcbb_c_Za\`hbYW[id\^ffgmaafifdZWVUMIMOY`nquwos|EFIFCB<;6f`5hee[\e_XZh87hgh[Uc65gf_e897kda_aj865jgfhiicgkjib_^b^YOGKLKLU]ifVc:=@:7FGFCEEBB>768876456;><7==>?A@ABAABA><9>?>???AA>?><=?=?@BDC@ACCB@>AEEFGEFGHIEBEFEEGJIIFCDAB@CBADFEDEACDDCBDEB@?@AA>=>>;pn;tsqt=?@?>===?BABA@AABABGHAABADFEEDC@==;;>=?>>?@>:9;>nefgiu?;;;9nmo<<<;trqp99:<<:;:@D>=<==>=;:8nopq9opokh;DFDCE?>B?A?BCBDCCA>CIA=:69E88965b5=:><<9>=:97jjimeRa36;:99;>::4586674egencg36588`Y89\NZd^]on^hsnc\TXbjfbdccdfd_]dghmh`abb:uc78gji7m8g^^`\YTU`^[^d\XZXW^[Y\^^[][Z^^][\]\]^cbb\[]024545687:85300430[J901UGE-BR_Q>C9PKAH<1R@?AA;CLF8..#'$521-E9BDL5BH;LLGH*893N3,1  +11# (%/{jA(/=cP<+=3!%"!#!! + !6446+650220#&=24!"(#7'HM)J@;47;/EAF<$*C"(0.&S.5'$@A5MjRETsll[EbnMqtvcdrlq8-\IpjmTsFR)"3HME*%!/Q:!OEL+H&!GD/3O0WjigruJc[5"0(5TY-x3FQaMOiil}|bdgSnucVu]{X_BCk.K9L\h|pwse]}LoUEJ6@2-WX7Hu'.&H3=(86JXd-Z4BGT=-+Z3.G"1-UCQZ4I~hXfJfc9U48ZBDCV9kk]meamrqg6*)%"D""@ 3- 31:;+/5312.*,242**$!+4.-4/(*7852:4-,3?=FKD;8<17DID86694$(*$%&.)!#%('+.<;967.4/4432 ? $&7660$.+  #,/20,% ""-*!%##!8+'*(&DPNKKLQSS(FIIAA)PMQ.,-*+)+K+(),YST[/]_]`\[a`aa__^\`_]W]\\\ZVQNSZ^c_`a]^[aacca^[dXo>SKdme_\cikkdmUU_c6h5da^Z]cdhfnifd7;?88485:<9:qsjdcba`b]ZY]]^`ZWWVY[^bfhkb^Z\ddffc]USQRPPRSV`]Y`cnfbgm87pk]Za\]_f9jcdgflfiqiesvwsrmr;8?nlbfa_^]`a^cfZSTLQUMJMLHDISJGMPMIJD=;CWkhcb^ad\Z[`ch]Y[WVX\[_^`]VY^\XWXXRMNPU[UI@>;CIGHD>HHNLALORE=@RTRZ`\ZUUV\cd\\^b^[]YXVTTVX_\]YPHMX\`env=AGNRLICCHHCHJID=8@A:_VQNJM9Edh>F<;@LdcZUS,/1,'=IU+/)48*/JGLBHW@K@BCIYhfid[\atytBC98::>ABBGLPLMNHFEAHmSFaWfopZ]V`i[Y[hrgW[henlIE:<@qo|idi`OHA[PqEF@vu{{=HDzlkpB}{C|jhdnorzDA?|{yurrorlmjljhccY\kjSaec|Ejgef`_ag`d5320T8;5cpvfgf`ZMTe__aa]ZHNIIGHSURUOPSSSOLJ;MVOQSJMM[\]Y]654283][[_OT\d`\XY_b2131c`c\YYWV\_\XTOMO\W[ZVSVTVSRNLDFHLIDMJNKFQSMLNTSFPNKLIA?LE==8DABC98EFADFEVYV^g^\a^[QQWX^`[a`f^TIOKONNNQcWKLGHOTUULhdZ\OJJHDMJHADCIHDCELPLFFFDEC@?ECGGHRIMKNNEFEKMGKJMOFHI?=A?;NKG9=>7GGMLF@GF?HIIHHPXZg\GLCAFG79s@F875;FH925_]`b545679<889:<<;<<;>;::644667hfi7:8jga_abf756e7<642675788C@832fcdecf`,+*,-.11141.1*,10+*.73--3346/.2421,+*+'%))13=<@B<@CD$$%$!!52.0+**.1/+1/1--0.*)/,.20)-/1.121.--2.//023/D1311/-,/1/)$%&%&).42(, ! !!!@  ! "###    #$#  77;98:  !!"""!q$# !"!!"" !! !83555; 994248::9879;9<897767638667887 N577779851 3*:.--1+"*/0397+/h+-+,,+(+$)-+'45+263/,&(.2-+--+*+-*+./.1/+,..6/,-.1.()+)(&'))()+'&(''+)(**)()((+++* ++./0,)'""!%    +    <:D &  +     +  +  +   + 9 "% $5,@*2 + )',1   *"  5,,#(0U(?8+;DCcV66$)5)! . ,*+ .J$ $!"" 5;&+1&2 + ,)!)XS  +   (  "Mp#RN20$1XO>CDN3"(>3+82*(/*+$   #(+,*('#%#$"$$*.,%!$ (++#!"#   + !()%"  #   +  + + +  (768;9==7.48405795A=<> AEED@AFHKMOPOMRQOHMQPTRMHEJPRYSRUNRNSTQOMI=:'&%.'6;20-145405((,-/110+03231642/8;876887;7434677411/234677842/1867752-+*+**+-/32-0074258;;1/3014698998>:;@;8BEEB?;< 88385444685771..(+,&$%$#"'/)&,-)()# $2=:9744622589=747434668782*.3432331--..-("!%$'%"'&&#!#'"$2326:6522236536::768430-./.1,.+((,359=@>>=8520/OQQ,-_WQP-/'&,87356123/,//1/U13210.-.YRSQRRODAERZ-+-.-TOOUQRUWVPALULR021/+'-0.,N.7:75646;689682b^38964/21133_U.6:53;><34697147;7/12478e[NG:MGQ7'KZZWTRONKH[^OFMZX]WSPLHKIHDCKKLLSONNMMSSNIJ7M$$%7GR/-VLK'F&+0240UUUQQONLWTSRGGHHFECDCCB@=AFKMK;8ICCAB:@J:68>F@5./37;>81#:.L>6)&/-4"--/.<.%8J?56510/9;0LKTU++-)-2,(../.11+H'-*H2<.*,21OK+-(AI+RMT43+QN-1131+*-*IF=HT,..UIG@@831,3<:72*00L+4015-3.-+,+.(110/.1,-HG3+,/-I.-M,:7247242-2-*+,/-+ER-:BI,,P*)G,.-KFF;8C2KL3(J:9#1 /B:><848:.08>4+&!*/0+/1/+-/.)**+,SIEF>; ./-,/,)-/+--+)*221,V,+O),+*+-53/*)*)3.,'J)+*))'&+('('#B='&%1-(*)//*,(01.02+..14740(%&LKGDC@?940A@IF?>KNKEFLGEQCAF7?:@6;<;0D*>=?;9553/5514002.7HD>B7;87;:71;9:981;5;HCAJGDFGOF-F?>;24?D7535.* *' 3E'/&6*,6:6756=?<431223<73540?3@?9.=:259765970)&B>?599G@039;B9=!$A90332*+7>:30/.-<4621-*()2!"%():5212.$##%&(/#2,%3+38IA0.)290008?8..4130$!::A2..)"+"7#$ ==>=&$EA878@!AAD#B6629:;C%"!?=><9::=:99:99560/79,4:9E'77993/,/.* 3;>5561.$(2/./,)'!$#%%$*+)*&&%))'&#$)%'*$&#('(&&,**,$(,//.)(*-/,.)')))+,+*(%##,)*(''(&*''$$ !!$# $#%$!'($#%*)"%'#$$#"" !" "! '(%*.+*.,,%'+*-.).-,*&!&$%$$$%/%!$"#&(((!0/*.%""! %$" "" !#%$!!!"   !'!#"$$g """"% !"%#"" # !! !!!&)*2, !"%'$ )!."& "# *%5 *)*)=10353110/./301335/ ~}|}|}~~~~}|}}|}~~}|{|}~}~}}}~~~~~~~}~}|} |||}~}~~~~~}}~|}}}~~~~}|}}}~} ~}~~~~}|~~~~~~~~}~} ~~~~}~~~~}~~}~~~}~~~ ~~~~~~~~~~~~~~~~~~~~~~}|}}|}||}|}|}|}||}|}|}}||}|}|}|}|||}|}|}|~~}~~}~} +~~}~}}}~р ʻ򀄄񃉅郁񂍄Ŀ󍌇ٿ鍠Ǭ»ϳУۗǵͿș؍ƅﵭ݋񦢢Ρdž믫IJȫ򉠱ýƎn񗣎߯Ǟ§Ʉ􉤇ʢߠ俌ǥѢ떨ڸŀȤ‡Ϙ܈蒪ɼڮۓÉ҉֝ħִʱ帼ҹ̵Ϟΐʞꌹ䏙ӳ׍耀ͮ͑Үт᱁Ė–ȽƠΣ䵜̷݇̄ǿŤӻ½̯Æĵꅄ򇑏ҷЍрӼö傏ڭý¾ȴſξ̻ӾŷԷ¹€ӽŴܷеȼΆ쁯񩧸Ƀ߾󀄋򀎌۳Ҁѿςހžۼδ򏌊򈕀๮덠Ұϯ򏬡̹½½򁊉˹Ϳ帽üǹĵۀߴĻކȼſ̾Ǿ׿䭁ҾȀ­»˽½݋ǴſýɿԷüż޽ʿǽͩ؄֚ª"aa^]`^`aba]ZXY[]_cXV[[`]^ebffa^j^`a]UPMPZpptuqinvv{BDBDCA?;8:7eieeba`b`_b16;<<;:e=<9:jacdaV\g5eZbi_a63f4dbf897nribdl77gb^Z\^^^agkb^abdb`]XVOKLRXZXX_h>;59>>;85ek9>@BB?>>>=??=>=:<>>>?@AB@??<>?@BAABBECDEBBBCCCEFEFGJMIFGGECFFFGFCA???AABC@@DHBBCDEDEGHFFDBA?<<<=:8tw=<<??>>?@ABC@@fAA@ABAADDBDHGEBB@>><;;t<=;<<<=;9spihegilknmedemmkq>C>tmnomnljmnq;<<:9t;swuqv<::<=<<:<>?;9tnlmp;>@?>>?;:`;:hq=>?=<<@?=97nnp998opnhg7?CCEA<:<=>?BD>;>>;o_<;7;=9:7m78899:<987phaY[^`ggdk89;9jjjc_aVNEUSN`jhl9o=mmhb_]_YYY[\\gc[^[YYVWZZ[\]_]\]\\^`_]]\\[XWY]\^^/12544677876_53134535cIJZJ;&+(Q:HRMQUKS1@6?@(=D?:;TH*'-%>59075"$#'0/5GFF64@ !'("$!%(!/D( (-8<*J08385ZV>*4O.7d7D@R5@8IOHMFlZicF@6]7WJHi|P|R^ukefxncsZC,&"#$##"5// ;>7233403653.*(*)-*.214355758:=>BCC?B;148A"CBAA<3288**!DCABE?9;EDC>4<:- )'%*0),).-63884-016*-0-2/-2  !"$-030)76&0".#&#  ""')8');HIG?DJQ(&)LJJ)(J+--)**+,+,),VY0XZ/]b`\ZZZX[[]^aabbcba[X]]\TVZbce`cddggbeig`nrsNWZZYZ\a[6cZYcia_YLUKQJKMOSVV`aa`c7=>;;9;:gi8f8:llieghedc_]Y[\^]a^]X\Y]]\ba`^]\^d`]^_]]\XXZZYX[W[`Cc:;9o8:9pl\QbfcX[_fe^[\`fjkillpqw>?>A?>>BDFGGGIKHJC?@::\PFEP?MSDG=d\VLMLTOLB_T6X:4:653-/7KLLe=>J-4;\lTX:>>A?sy?BBA@GHHHIMNMMMDEJF@RV\YVLOQRRUNILGAjRAPSYmrsmmrx}C>=|}}{AEHGEIKHIKJKKINTTVVQNMNNOMNPPPRWWUSTTROSX\VJvl}GMTTONPPLKLMHHHOTSQMJHJHGLONLK|JMQTWTSQMQTXSRTZ\YXUVKJJJMUURQNKLqMUQRROT~_HqhG~xr~|~~}tfWr_>I_{LTnou}|JRSMz|{xtplkolfjtz{yrqnju|rmowkkr{zse\drmmlyN\PGB@jQdzxEQ=g:gH[jo_\[WUUYdaLORUWTZTJOZUUTXQGSP~QULNOLHMIF}AHHSZOHKTUSVNEII~LWK|`YbbZXOCVYTWU`^KRk\_nFVNQUXWWIN[ZUPOJ~MRKNJNFWjb]``Z\ZWUYUUTKPLqIMHNLM|hsbGbCSeZnULkl<>rgjjddTVXXZ]b\VJHKCCHKPLDMXZTRNUPLKNWWRTRKN[9\bc\]020[]b_Y[[VW^`^\[]SV\c]a`gbZ[\Z[[YWSWTPXXUSUT]`]UNJJGIGELFHCDORUQQNRNFPOMMJJKJHC=>KHOJ4ACFKLEFJNRRZS`Ze\VWRccdia^3\SRNJHNJKUTWJDMOM\^Wa_VYQNJJPQLMIEILMGFFKIKIGECFIHBGFNOJLJJMMRLGP]eZVRW^[JKIF@E?ED>?JKAPTMHHKHJIEOLIPMTYhSAEMNIDHC>5b>22C=;>DEDAD<477>=FT5BWW>;5=M@71ZY_a254588:;<;677:9;;<<<;:;97535575'776j69:lfedaee7788g^f5556:54==75hhfdbed0-((++./210.+**,-0**.-0./2022..4-0/0120-*(,0>>@B@9>$& &!&4f^5-%KBo;I[nHC"!<9BA4'@=!#33-:' "$!  +  "$'*+&%""%##$"''')*&!%*",*'(#&'$  +!%&    +  + #" +  + #//2-259675/  >>"?A"CFGA?D#&%$"!"#%%&''()*&#'%"*(+/13/-,#2 !)$$($""!"')->%%.&(1(467@ABCDEFG&""FHGE%()&&)*))***+).3456221234/1565678647752^_4793+PEBRJC*/44/.01.--.+PLS-[RV-2442.-MQ,/ZTUT]\+*Q-10.-Y[TQRTSXVRPPIKOS,.23500.,05:412675543+P},+O+Y.45300./]Y[bgTRMGU_\XTLNRLG;KR,2.0004`XVRI5@*W@:JRTS*LE@>=?<8=EGID???;AFLH<99>637ALC?2+-6374<-70)# 0!.<8$*01 +?@8673306=;+JMS-//0040).30004.K)2-HF/0---,V*,)'E%')SN18/S*+2024-)+*QMIN-5,SJ8499540(J45245<;-2B306%0+.1333+-540./U+HP-0+SK.+,&2>8476254214112+-+NKPI?P+.S(,IM,.K=F;*O8,/42;( 0/'(1):;=;52:76955)! +.--/.**-.-**+,,+QKD66,"40.0.(-,,))(.0;:5/UOTN&,.**,1/10/0.04-L'(**)*)('')+)'&$J()/0*+''/-0,,2331/./-.-1+(&%&J)GBC?@700;:B=7:FE@@EFD@G=>>8E<643;<7@O=89881>BJ)-.>C?;/>=773-0.+#)##-2@!)=+,:?:<454?=70.1536>534/788<858;7640,<;:7.!3"DC;<=E81:=@A=;978624/4002*'&)'%!"'632/5/(%&*+&(.'C%.E>',1A3//,41,'04@A3',+$&!!:4755/&#%,5 "!?8@!"!A><9<@B>?GE=75148?DB=<">?<:=@<<:8325824867507?;0:?>;<<760-" ) ;47743++***+,(&#$'"!$%)& $**((%*)%&$*,(*)$$(&)*'''(*)'*+))-.,,+-''*/*,+..+*+))***&*(%''%&(%-.-)%#"!" $ # !&')&&&'$ ''&%$##$"!$"%" !%' !"$%&+&/*0-*+)2003,++&&%#!%$#'$)=# %&$--(,,'(&#""&'$$" ##%"!!$"##! !#" $%"#"#$$'$!%,/)'&(+*"Y ##%'#!!# #!%#!%!%(2' ##!!.!"!! #("!('**<37532/..2+/4532032 +⁂~~}|||}}}|}|}~~}~}~}}}|}~ ~~}~~}|{|}~}~ ~~~}~~}~~}}~}|}|}||~~}~~~~}~~~~~~}|}}}~~~}~~}~~~}~~~~~~~~} ~~}~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~}|}|}|}|}|}|}|{|||}| }}}|||}}|}||}||}|}~~}~}~}}~ + Ԁǀ Դξ򂀁􊜠膜懊ѧ熀ӽȶ׷捑ǽȲܾ濻׋ܷۦѤߪﻀかʟ鏱˺奭ȣÀ즘ƴު섒ӹĈ񖶋쾫͑뮍ũ靅ƔĘī陨ʛ񾞗ī嵦گݝہχѰѡ߂ܒɵۚԶܴ䜼͚ϲ׀懰녕֟纖ɵч͞񉐊㞠ϧӍڟޖʝ˜넩ޑ퀅¶烕ہIJĖɝ尻◣̀·ܫľȼ烄ꁀ˸ķѾ»½ʻⷧ྿ʀ̺·ݸ،뱞㶯ǒ̍󣀈焒ж􄜑􀇉Ÿۀ边Ĉ񊔗҂Լꅔ󂈈ƭϿ䛢ˤوȁ邤ù񂊒򋛜½ȺŽ񁈒ҷı때Ѽĺǹ܈𾚈܀໤򈃀􃇄ƾõƵ녆ÀǶѻȶǭù¿ƩĶҴžǾ½ðĺ¾ųοŸϱػǾ€ 󀉌߀ah91[PW_b^bb\ZX]_a`Z\b^_\_ebgiga^adf`a^ZY[\V^mfm~m\gmp~BECGA?=gkm8igkjdb[NZcc^bgai85efcZY_46588jjj667pgdb]Z]dhbehkhhjca`bf`VOKOUZXRTbh635:<<@B@?AGGC??@>?<999>@AB@CA??;9;<<=@A?>>BDDBB@A@CB@@CDCAACAGGFCEGHEBEGHHLLKHFDCCDDCA@A>ADBCAACJHDCBEFFIJIIGCB@=>>?=>?@>>@BCAACBADB@BDECBCEGC@?@A?<9oqusrqrooopmoljhihkq:ninqqosxsopommprpmkkjmo9:989<=<;qoonmp<=<>?=<>=<=<;=;9:::99:9gk9?C@@?@?<:778:88:8njhgf9?@CB?===8775ff7:997ha`\TOb;E>9?89??>;5=9i7ok477679`^:8;=:7nYGSdhd589:==><898g9==998798:>@?78863!820$%,J:HR3DPJ9\I1-&$&-B*1/Rh>*)%#!!!"2,-N:=J6  *.%&Q_CRS!-,/LDeZ,1;=@\E?QtdSFG1Rzr(+&,2lp9MNC@vmb}bS]jxC^kQmjn`uy:5!D:]Ihd]|buIq]bN1,&>/).8;.5`K_1K{q;X/8G28>PF>,!1 7GKJXtQmYY61NN8Eb^YBP`e`[i`mgY{tmsfΫw3("#'('##!;,!  =20% 6;915:<74 -<85;4593+6:;8-7?E89=@B9741=B>:?;;<5"!<448<86?.(0C36;8 >850..164/'/04,--8!""&%"88;=BKLLM=*'&%#""&&1/6<4-2? "#)*.+MKU*(KG(-+SQT/-,-^\[[`///21__^bd3210111bdcb]`^]_`_cehklmmlorvipqITUOMLNPSYVOZcZOKP[\G76FEGIIKLNPR\abcim8::;A7ffcaehhjihnmhf`^ZZ[]^_b`cjg^^c^_^dea`f^_^_^[_``ab^]VVR_keqhokkms:;lcbPb_UVYZ[YWZ`dhklprqx???AFGB<:>CA>rls=>=ACGIJCGKOCk;8_^VfdccRg[XP`O:q}K>tuTNd:8964D-P9;'=85<9WbYa;=BDJMOMFHIHIPNPQPKC@AC@D~y|xnrkeabk`^cfmf\j[]]cfsnq{|ie^c56bS]MrFyqollf[[VURWd\WOKNNGAAHO7AOSSYMQLJWW]SMYUIPUd4a\Z^[03/a_]Yb4cXU[Z]]]VTV\WW\ac`bcb][UU`a[ZUSUTQU^fc`[SOKIFKLIGD@QNPP[QNLHHLIGGMQNKLLBHHRB7?>>FIFFGKPQ_UR[bbdcadp:6548dhSSNHKNNMUWJAIOKSZ\\^WSQNJIILNLODIROMIKNMJLIJHBHQLQFOUNKFCNJKOEKYk_SJLYZOJGIBAEKJ?ETRXHOKEQYJWWTQLPPKQU\SNGOK?BLFEB62<;8?EA8=:;4D8@7?@9?A;6:>@N]>B8>>9>A<7^TT122427:;99;;;7779::8999;;88666587544gipq:8hjkjf6:99;fX584775Y08587hcba_]..#&.0/21.,*+-.-*.1/0./0.213/-//1.1/--02-2<8).,%(-$:11$. ##-/"" +#(1")! 2 +F1,%8?sU#)1$!!!( Ve^ 7@*jZK4y3!%="F!"#0)%3$@'%&+#/)     + +   + +y "'"$(!  !%'$%$"% ! " +    +   "$,4023) +  $$45;/,! ?=>#  BCC@F$"!##CDAGL()(&&&'NPQPKPOLNQSWWXZ[]]XWVP9,D-I//)(&&%&+)#)/*%"$*,#%')()*+++2444654642687998<=;;76213445315850.21114624855354/4543320++(2;6=79678; <61(52./2321/1469=<>@?C#$$%''#4,2239<95/7/,(*1545Y60)*,*./20.)&#(+30+/26.*(+0/,+**,222344566:426:766542121.02/,(3643+2,)-451))347254-1*/4341z4212.()%!"$./021369:8;=>F$#!"&%$B>B###&)**(#%&)!0%'#,(((#,&##*.9?!:3#:'! )!'#!"&>E;>%##',/0.&&)**//021+%""$!&0/0,($ #&$"=<@ACKQPTA>84(#%$%$B=%*++-..)))0530379==9511421321012211013:7654^YX-))!8<>,$DBGIJKNNLLKMI(296OQ96863WHREQXZ\[]Z_11/./0,-Y__\`\ZYVVMIQRT+*,5753/+.1-/1/0/..12.E%0+.,,/WONMFEEHMQRV`ZB8D]TOKE@D=:C64>G>BNQKFBC8:=86BJVKKCB;5/36=B?52/6 #86*E>3))$*&*0"--#8D2258207E>2.-.332561/-/321133+N)/MF(0(-,++U,,QFJJ'-,211.,,P.3=3((,OGCP*.+DG@69G@6-F3;=2.2,,72<5,7.43022590)*M0+.,,*01,XOIO,NQ/<65734226.530/.STOFDCJLKNSOMHIRNE64G*=:M28<;-$&2/)828876228@7),&"!$'+,++,---,***+*(LKC8/6#11-12.0.-.*(13682,-,++*),++./4.1360.33GH&*.-)ML+(&**'((%FC).--&&*1/1,20321-*-0/.0G*&E8CNHMI>P<8C=98466@:08;:::??>8=H><::;5=C><=D?<997971/02.043209;><686;66:8323*FBK,,=99AB'-5+FD>3/1;;8331(3(&$&#(-7@;CE=74;921@@=964:37<8453,?1;35/::8321246<3")%&E<9=DD8;?CGBGJ?HD053==9;909956:=CC=76647/.2--06,($+&"*43/393, -"&?&:/-8>09=1(*'&21(,-09>00+-$#"&#>B@;0211=! #+9;!! =AC;!"@><;?@=>;5458:927;;8599kc\WTTX[ehjl655ddde[]egj8<6h7;89kedbbdfffk97jlnhec_b][\\WTTV]_[PZq4b3f5?B>=<<:9:AF@;BCA>89:=@?ABA?@CBDEFDABAABCDCBCABCEEDDIJGCADHGKQQPMLGC?ACBBCDCA@AFFDDEEFE$FFEFGHFFFC@@?@?@@?>=<;<==>@?>?BA@@BEA@AA@@@BEB>@FE@>>>=><;=@>rprpooqszuqpqmnrrpmnq;;trrot:ponilqnponnpr9889tw=:q::989:999:=?@AA>;>?@??>=98::9rq9;nlo9>A?AC==;opqon7::8ljifdi:?@><7779:7gfg8gdgaaj`chdXd799;@A<;;h6:8lplk7gcchei;:8:;ecpfjtli37::;=<===;5k58=:9765i8:k/gse\mheeeieen@@ijhfipqsa``[^c`dcd`Z^af`ZWSNIGPXZ[]_`^^_YXYWVWY[]^\ZW^42.\122121220/546XZ@C832686(;>07-2=(B4.>.+?;EGOSLG/5/A>$"0(-B. 5E,(3=4S.#*=hsXnmtX\jch]OjeV, 0,8''&D'/+.1e04#Ilk\EpK^Hd}ZUQ>U:}F6415 OKDgZVbhC=RXexVpa=MM1Gj`swimak`B;;J[O,62<0:103777 .2/(//#(5)A;=B@;<:732CJBA8566<8?::=A"#%-3p<.51&,+ )09233930-/4:<983, #%#! !88@<4;CDHHIGC&.'&&!4%&"4#:=736%',021++.-/+*,*//[/.Z/23210223a23gb343532ccef`cZWZ]`hgfpvtsqtShbGICHGEBEMOMNNKB?JHAB=??6PGBEHKLNOU^en89i`\\^acceeggfcdedb`[YYXSSY\_aepskb]ba]^dfc]ZZZ[^[][XZZYVYY`fhfdlegmrijmoomorpk_[YFc[WVY\_]^acceflpmq:9;:<@D?>A>;7okhnnfihgdkiqa\_cb\XQQSQOHKTTSWWOV@JPMNNQPQOORSTQQPKKRT]]_hsogWQSUVWX\bcgfhe`^p9jPUolir8pd][ee^_ehnptlnlYWZ]fotrgefhmjbecndbabc`bfjmmhtrozABCABB@yqljpy|A?AEHHED8@HEE@=57>;_aeVgOCggBLfB:MxHT-9GPRNMAF17878;<7.BH8=@=qmlkpga[bi{|{S:TDIJHHILMNONNMNBLVVVUJOTSMLJJLMJJJLILPOPPKN{kke^\cy{~HNORUWUXXWVWVXTNKIIIMNLNMOMOMKKzLMHtNNOQQSOLOSTWYVPMMqnVVBCEF|ywpv{xts{}uzlcgjrsy{vyF|yvikN\primW~xJ{HpJKRQONTNtjnZ}x{}{upjpdbdqxwnljqwkn~{rddr<@z??CNKODCP^SCobUVnDEHHsbX\cgw\[X[Xdh\UTVXZYW]ZWURV]\[\ZUP}uLTNQKLLHIK~xLM[UMOKGOSXHEI|MJ}gZYUZfa[ORZbTFR[Qcja^hXX\_XXTTMKYNWNIGMMRHyIXfa\XWXYWe`[WLPLLK|vzshr{vsfUPJ^mESqRNx\mAHPX`[Z]db[ZWjpdLX_VONQVTPNLMNNMMNMMMLGugn~MUTRWPUYSSUTNeeZXVPKJHKHHQXTQOUXRIMXPJJWMIIHJEGIFEDrPOTQLPMZRU^WWX]SPNOLKKG{Fscqzj\b\ZYXYVb]]k]bjpx}shr{wnpmpmpvmrmife^\]\TOPQPEU[NZkhdmheb^^ed_`b_hwctKJrlmBFGmaeM]mtvaXTHZbWOQ:FAPYnlztebnpg`aedewl`ibntlilhS^^fY`alpsg\]`flqlajHRFuwqqxv|uqtk_^fxO[dioinlnmlhmklnoth_]^Z^_ZZUVY_ZRNPSSPV[]^be^dYU^HCChFrTMymjd[SPOY\b_VMXVf]f>=LGDABAv}E}riihj^CHjmtBF=EDvh?G|BC~{yvtpnuomnkgc`_bekklBEIG}vqmjgaef^Zfhilj_Y`]^ltyt}yslkkzmXaBe??=qvrhb]\XY\[^^JKGNOICAGK@FHOTDTQOV[[VTZSJYTOie3ca312W0]]\]a^af_ZXa[V\b]UYUWZXY5g^`]^^[Wcb\YROS]^^_jo[TMIHLNJIFFHLOVQRRNFEDHHNIFK@KMLQTOHE><=AEFFNJRQUNW\[`kfik7675]WYSbaUJPJRUPGCIJGQWb5ZZ\SPNJOKJFEE@ONJGJFEKKLML>BKLIGKILEDBEEGIDCGMKDBCHIEDC><;HQSGBCCUVMJGPXUNLENNPKHPNIYVHKO>FLB@=67>;:9:>2:?;888996887998991;;:;:865558kiifhnn7keik77669954cc49<8Q[7665heffdd1-(.012221..030.2212/*+,-133.2720/03;9;689>@C<=534>?@"#!=2.++,-.,-.-.-+,52-**)++/100-/13.-111-1.-./L./11323542210-,/1-+**-0.&)6,,!   !! /  ##! !"&%%$#! !!   ! """!!    !  "#  "! ""! 88:989:;>;9::88:9878:=::788775798997779:;9  :9667?  67654655423./0/02./3.04/(-.0,,-1/3-/514:43.-*%/.)$*00.)./*+/-2)%()0,)14.-6+)1..--0./5/1///033,,,)+,*+,,*')*-)(('&$!%)***)*+***,-**)()'((('&&$&!      +  #!) + +-  +       %"%()*%* ) $ !(*1>&  +    ' !(" ,!, 0")'?( 5;)15/@fH/*U=& ;'" #'5",3/+)+0#+  (%dp<n]t9I7J;Yo.  ""! 1Eo= #),%Z7,.'JHWF#$";3bN>+ %-E%a=&)*! +  + + + +   +    + + +   "$$!! %.'%!" "#   !  +  &%#)*//.+% { +  $!  !!B$#B##%$$#$$!#$$E$'NN((&'&&LNOMHNGDGHOXUPX[XTH;-97)'#%%#!"&%#!!! '%$'(*++,-/0451357988:97789875432./22568;;60-12/1475210112/10-//0-0037765:68<>99;;<;=>=:442"51113344476687<=<@" "!!#%!!#!:74676;:624373478742..,++&)/.+,*$*).+**,+-,-/11.,*)+//467=C@=4./113234443773082$,743880-*1558<;?>A:;;124567:;765561*-.52335779<=@@=FDBI%%$$%%$D?;y<@FJ''&&'&$%"&#!*,,!)#0+#",6(%.,"%&,#'%+1$#&#*.+''(('(',-/.-.///-(')$$#""! " =<<=D>:78;GEB-#1&)+((*./..'/7864-L1440/..00--.[\0^[WWWUX.03233^-X/C32.--1@HMGEFHGHH)./3574776787:720Y--Y\.110113012//\\XV\a^XPPFMX]//)56%2>:=310>GLKMKB=;83)/5/A8&.4+((,.-+*)*,,+**))+*&GA:=C).1/2-140121+=;220-**)+QOP**/51/.252+,2-MF)(2+)))*(I'(&''H=D,,.-),+4/061127/,*+++*(CI(F<0=IPKHS>5;623342;56?59<>:=A<@>=:;77871,-0/%/3,4>;8>:99768745517A4@+(H=78B#I'*OK>58&.698?>955876B82:5;=77;7*007.319<>61024460*/#+$=@<;@?F@=>9228E(379<79;>;;6979;;>821303422..153.+)(%#5)-/036160,),#G5!%@""@A@=<99>9:98633566::8#&&'DF@;:89636730678;=51453;?D;520/.-0-.."$#&&"! #(!$#'**)(*-,+*,)#-*#0,)("&'''*+.2-**/,),0,(,)()((1+.,.++(/.+*'%&--..69.*'"!#%##!!#%'+'((&! " %"!%$%$'(&"!!! &#(')#(++/5357*(+(32+#&!&(&"!%%"(+.)(*'%%"%"#!""&'$#$!!$##$&!$#"""!$!  !" "## !! !&& **$" &)(%##"%"!'%!+(!#%!$)!!!!$(%) +542101575123,)*112212~} ~~~~~~}|}}|}|}~~~}~}|}}}~~~~~~}}|}|}~~~~~~~}~~} +~~~~}~~}~~ +~~~~~}|}|}~~~~~}~}~~}~ +~~}~~}~}~~ ~~~~~~~~~}~~}~~~ +~}|}}~ ~~ ~~~~~~~~}|}|}|}|}|}}|}|}|}|}||}|}|}|}|}|}|}|}|}|}}|}|}}||}|}~䀍π~}~~}~ πŀĀπ ϵ逈ׁ适Ϳ󀁁󀔡郗삆߁Ң®ӭ䂤вոĮϫɕڦȩڇ背ҫڪ敏ߎل牀ּ󅛫̶ׂĻꂽȎ𣶄ǭ䋗ɓȑʿƆʡ͈̀Ӽ歑ˈۆ󒴬᳉߻μڈȯˆрNJȏעժǵӀ̢Ъ웣ٚ㙛ƚӿ܎󳝞Ńτݪ닖ǔ۟ᑚŠߩƟĖ⁆ဒ̩ǼƷͷ̮ѿľ¸»÷ż腆ꀅ⁍ӡ򀇚֒тꎙ鯩򁁅ͺźλֽɃݴ恃펒넇肑ÿ˿±ހ򍓉툕񁔋狠ʤһ½»ű눀Ƃĩտǀψ̽ȻϿځ½ƸƑፅųʥ򎜕܃鉉ҷ恊脗ƀԳ¾õǾ½¿Ȩ±ͳǶݮ鷾ƹ⒜gi5:42NQ\`]adfffc]b\_a_bcgd\W\_`f`dmnjfafdgfuzqhsw{{ur\eilqq@GGAwcWWWceae343c4555:4f9@?;7::nfa]ZWVR\57566jfbfre_^\]c564dii8;kgchjiegk89:88plgdc]SUgid_^]__\T\dk:bWb9:h:@@=><<;m;DB9::@@?>>>?=>?@ABC8:>AEDCCBDFEC@@BBDHIEEKLHFFGGGJNQLJEEFBA@?ACEE@ABCCA?@DEEEDDEEFDDDB@??@??@><<==?>B@CJDBAA?@?>A@ACB>>BEC@?>=@<:9=?unlqppr;??@=BC?:7:>:5jgkhda\\bace9a_]5=C@A=[eaf>986fg876^]^abefi756i45:j<7^69;9:;<<<78d\6<93aa_`bfi`GVpAAmS]fgkQ78;7dcjmihgZ]girsadXcgel;=7`^dokh_`lnghdmi^ei^^`c55if_]]^_^[XYaZNRQVZZVX[^]^\YXVUTX`10110Z.34547878864734_QyfV=5,*./--%17KA3+$94#(+33,0,)XK8P3C""#%%'((%# ! ',(.(-B5WF5M5\QRP.//WbDO;@?7@FGN:8:X7H>DGBSVU93@ $/-)%.]7V-7R;$8M,*/1=NQG:;f;;,(*'"  N8;H#TEbqLE]WCXe_o]HOlM27K`6.9'&#%\]uk;paH[cYbclHA59Y|RwLgW|]]WM^`?H24-/=N^Ėusea&J?4<=+`xV]a.\L@F'2W:BdUWJ8V/S]QP;545/3KHH@28L>2}d{MUmRO5=^Y}gGQLB85=LMC9nw^^|xJHKgiaqweW5##&*)"60.&)"(H/:-8B *"73984740( &8.(0#:>.8;872:?! !#&"=86<9><6?&$!!5##;7D$5* !'54-2>9!;@ABC=9651!   &#:;;B$%":8@>B%$!()+'%$G;1116 %0>30:F:$+130/0//,--042-/54013334``423413354467753142213224569;qpn||cLWQPEEGKSUSN;AJGJOLPRGVVJGFA>@BBEHLPWdj96g^[YX\\``dgd^]_\YRRTSTVUVXZZ\Z\\\]YV^ZXXZWTSUVWY`_ecabcbainnkegeiffchhdeffbegfb]UKUbcYWYZ[W[cdaa]`dgkqlmifl>BDC>sst=khmikkmsqjtrox>>=>?ABA@>xw=>?@o9ljvABHHHA6HHE<\7;gtUAF@OT[xw9:;:lo5INjA,F-247<;7;OnCIIFCBACFIGDA>=<@?;=>5?BB=;:<@ACF=wppHH_]ahv|CDGMYZWVRLHJHHGIPSNOHDCIKVRJLKIGFGGGDHJJ}}y}OPKPTXE[[hquxCFE|kCCN[e^WYWVNIFMSVUSONKKLOOOLMNLM}L~LLNRPKXXZ``XQMH{]sy=BNF@=ljx|q~~yu~{sb]twdffo_pzKIEAwy~mk}CBhpJQOPM{kGA[U^bRZUVWOLQ\?hQoxy{~{xwyxsnvopwxrqqsmuv~w{CGKLCFPMFCBCBKUTF?@DGINUSOQ]^_c_`_bec]XY__gaZSTRSYOCIVPPVOUiYSWYPPNYRSNGCA@@DDLDFRPMMJDCHLLIIKGFFEEGKKGIHDFCEEGECABA5?A\UIF>>5>HPHDIKJHLFPW_YBIJJWcEKNJIJDB:38;;8;:87>;C9FOGPM>UX[7:8?B>?>83]Vc75567=@@>:988:85:9889::9::876697kihikkine^k66555jdcbcd311_agijecfejkc0/$./.014311.0./003362/),/14.1565433589EE=9A@CCAA5:;;>="&%">2***..+*-.50/--,*'*00/29311/.-,//20-.././/44431-)*5860/-e)-/2.&+.2 ! "!"" %%!  !$&#"    !!   b  #("  "$"! !8769989 !:99;::98;>=;;82/132179988779:987768;.! #"6788957:15566565C30/00/.,,--.0--*(0.1-.,,,-/..//0'.),-,+,.1,"(23(/0//,).00/-((//52)*%-.,.,*.731*)130/,0-)0.**++-,*))*+**)*.+%('*+)'(*,*+,*)(('('''(!".% +   (+ + +   + "  ! +%   %   +          23'*)&")!.+-#%   + +   "A%"#"#<, + (9UB-M>,4?.0U@E%?F&,' :/-61#34 �D&  +%82B9#&^$2#UB56) ! 3TB;3J'+'*48S8.*PF'# 37A$/3&*'$*,(   +    +      + + !   "  + + %''(" + + #$& '%# + (!!( + !  !!&%!!##%&FD#!#$#&('''))('%%)(%#&%%'&')(A902BK5'*')#$$$')%!! #!$#&'"#$""%&'(),--/0300./212369855532/0332212201211/.0.+/.-..-,--.--115544455:==<898987587677878:975/(16722335248865236:99;8;;:54775;=><865/6/16:86678><::8666786/4682;<841,0.-!;ADC@GFBF#""$%&''%#DC#$##:""!=%$247;BGF&').66523-**)**-4510*(',.660J/.,++U++-+U-..VPOMLOPNMM\a24/133+6-489: ""<2B!#,8?95866.+*/598732/\]Z113320][Z\WRU\\]YSMRLS]0ZUMIU-W.01/,658=:3.,)A0>? '-'!97@C!=!/6*WPST[-UPUX//.Z[QPQLTCB8?!,(,-A-3132-,0ZZ\VM3!3/BRX\RMEJHMIFGEINIB=CC;:<<9AAEACPXZHC@$')("%-+&%$$#)0/&2+#5#!"B#?&%,$HB=782:=46776:820.11231545331;;J,3NMV+*+*)-4.ODFJ-0572-13**+00,MS*NGIPXUPMI>43:<>9323-*1>?DD<3CO+.4341.03,70,*+HSQEO*PLS)0.,1=;91114667540*SQROPLTC@58EF>7M,6'+/,4;*,&12,.5.9;0.5326842/**//*),=81%,--0/*'()+++,,..*HB8B32-+/)+310--.3;550-+++,PMN*03/,)(-//L+04/)((+'+-(PRNC#,)JC53#/1))(*0-064.64:0//,'''RFFGF;3DFDEG522*7572#/2=?21@GWPRJ8D;>8;8;865974334334/.),*.))'.6:<998;6315546D:;H-4:" <0,+#%DCLE?77()/#HA:6257/)+"$!&/:C;;>:462611BH170-.784;4.2/312"@:9523;;3*68'+%>C=:9769:81579;78=:989:=<:86864;:6952120431217650''%#$*)'6>146*,!!&%C<)'AA<-,3%()4.48++(*/-"'("#!!@:==?A<66230/+7?;> %$<4 ">$#"FC><=??:;>B>76622067;$''$"!@>>=5995645748<2554-3>#. 'EC<<86*39 "?383/.--.*/# !&)''"&'! !'!%'&72&),.&%(#+-*(%##%!"#'(&*-,/1.%++-/.,,*'$%&*&0,.(*.++./.)('%(+0-,0,)%"%"#"""!"-(%&&$"$%&"!!#$%&%$%$#'"!#&+)&'--.0/./230+))0173-('&%+%#,'&)&)3+&(+%&$)%(%"!!! % &$#$&#"#%%$#$"!!! !"# "" !! !  *"!!&  ""N$ &',,"##*1"$ !! !$ $"'''*%,)445356460,3/+)(+-*.102/.0134/ ~}~}~}|}~}|}}~~}|||}}|}~~~~~~~~}~~}}}~~}~~}~~~~~}|}|}|}~} }~~~}}}~~~}~~~~}}}}~~ +~~~~~} +~~~~~~~~~}| +}}~~}}}~}|}|}||}}}|}~~~}|}|}|}}|||}}|}|}|}|}|}|}|}|}|}~뀅}~ԀÀ  䃓׷퉆􌀛ھͺфȻɟƧ逃擪ީՀλ恅ܘ͜߄ـ߂䉤̸ųߖŦͶ҈ؿᕔ꧘̵送ꮦݔ㾁۝јҁ򆈅Ƒݷ㠸ғ址ϻŢШ߅վɭކ҅供êʣꒃԢכ˩倂劸تÛؼФƸ[؀ӳ‑ćĽɹל͹ĿրؿƸ󅐒ᵍ­ιѽɹР񃅶ƭĹԠƐރ݁񂇆ʽ̸񅁃ಹ߾􁃓οǦշЁָȎ㜾𓘪␬¼¬ŸȽDZрӈ˷Ƶֺ۶־ꎐķʼĺĽöǮ茟焂ǹ̹̽ҁ̀οżȾʀݛɺҀü¾Ļ¼ļظûƷȷĸ̾ɲ״̸蔝ī!787:;4X`baYX\^bddfab`cacdjljeZUXb`]gfjhkmlkkuxpjpvz|vrlnnjmhmv|yoc\U\baad44f447977669:qkgklhfhihg^U]g76kki`blebbb`a__f6kg`cl879798677:=@=:8okhdc^`ejigeeab]ZZaic\TXb[4=>;;:?A>==:jlljh66;=>EC?>=>??@=BHID?A@ACA@@ACB@ACCDHGDEGHGFDDCDIGDEA@BABAAA@BACBCECAABCCE,EECDEDDEDEDCA@>=?>>@A@>>>=:=?>DIDCDBACB?@q?<:<>BAA@?>=::<=>;:<=;;::qnnlomjinmjlnnop::<>:rpnmlgiptt9:;??<;:;;?>>AD@?ABBA@@;nknneUn><89:pkkqs=;;:9:78m7mljhigfm;@?>=@@<98l6ilf___a`mhic4:::=?8fa_kigif_jlfaa_[[YW^bf5566j5697c36999::95ejhd:=8`c6h`]^a^RTl>>qLWm;9cmmm8il7ikl8::ln7mj8;58>@iicV_b`lmonfbajh`bdfihckieeba_a_]\[b`XPOCJSUSUY]]^[VVWYVSRTVX_121/232244665531331425fYrr;=6/,,.44$5@<)#<8B-"##$#*#0/#-.&700K,O1B?#+7'#"#%+3$*$*#);>6F-[[/*//,NRTNTOF?@<=B/;@/1.5<.CJ-.O80 (033,-)/G9= ,>LKA'10+-63AKJDK.=LE_QYE$%&"  7]<6:-YAM.c'6A:750A0():;.*5=>6*JB;L>3"$0?>EU7KujS}kaeot`^^_rSb_y`ui,&"'3*%! -( -7U^MB(OJHCPfVkEYywLdS`ihQl_24?rP>rb3-;!'NtaWamqt]PX$n?&ejyuT}cV\`kJD424C/?^n{tX2AP!.G/N/Y/UT4Y=a<(&&8ISgCIA@B]HMKLL=#0?F?c5*0f;\Pu_|[pTpiEfF_R<:540+&&. .6+)14!$!&1B>6D469 E##$""#4& 8?8-(&).*$)/12320 !DDDGHKIDA:?#()$##""!#$#! 1!" 8:0!"$++0.+*MG8818 $"A:44@H'# !#',23421,//15:94465775354447665656796757557888twuHi{KWXY]ZYYTQRSOKMSQIEGPTTZ]_eZ@<=AAACFHJKMWbdeeb\_dbe`hmjf[QRTRRSTRMDUSSUXY[VWYYWV\b[Z^__\]^acbfeklfgeg^fb_```cfgebaa_fcd`emoefXZZ]b[URSZXUVZZ^aa^bdfelkgilp>ECEB=t=>=<<>B;76:eebceklgdcQ8aWESYMTaWZTS[[\`\UTWTVcjheaLUnahjorojidgbfhgaipmfgklmiihm9:tjeggjfbb`b_decefbbacktkXcbfllmmm9;Da9;pmormffiiloprtvvxzxvy~>~AA?BDC>=:ry?rhkp{>DNPOOQPFMC@:=7\QRQUC1DAOK/F2DTUDX>6=LP.398=.JKj9pFKFECB?FG;8<>=cddek?CLPPQMKIBulomkfhlni?HGFINTTQPRMKJIKJILLG|x|xwFOQNMIHHHGw{yystzLLNQSU[\Z^\V[Z\UPQXWZUOJKHGGKOOPRXTQMOPUTXVWWTTRNyz}{JKQNVXSTWY[]\ZSSPE=ESYYUCabj`honrw{UVSFuh`\qng\hlky|yMC@AACHKJmfl\\RoOR{~~sPFL`p}zBER\XUUQPML|i~ilpz|}tolnku{tkcopinwzr|Ln{KNMKJJuy{JSVWIrld`frqa\UVqth[X[cneY[[_\W[VYb`XYLLW[VPPWYWMOzKKKQNOJPSMQPTUIJOJEHLNKzx{{udT\bfaWE]IRZebWZauKMEZUTPTUKQIIKHLMHW[WW\fjk]X]W`XTNRWQIibNIHY_QBGXIzuql?IjgfgrFOGIHvi`ZYU[ORJIMQFMMPLJ@MGE@DDKI^ZVVTUYVRJQV[dd1aS^[[XSRS]MNY6]b5^[ZVY\fc\XZ\PTUZ\d`44bb^^YXVZZVSZ[X^YVVRTNMPPNKIMMMNLOQQLNOJCADHGONQQRSNNDGHCIALNMTMSSTa_]^[Z]YZYZbfgf_[abZYICFOITXQWRPKJLLOOUSNMRNMIEEDC?IOTONOMLOPJHNPIEEGGOPUNLFFPID@CFLFE;=FFH==AAD;:ISPGQLESJZWU[PFIGJXDIRHLJFA915<85@A8:?G?:D=B6<=:TRKGM?KZ]:;<>AOC<63a\c887667<=:9<:<:=:999:;:;<;:9:;:::76886kghn9njjhnjgfffd36Y\chf`]afffcbefk88P$,00,+-/111202022346975.+,1.-21557999;@DA>;=@CDBA=?>==8;AEA:3.*,-,)*/430452246870)*-2341153k1/-+-32/.155322124665563/---/2,($%,(35542 #$ "" "     !""! #'"!  !   #!!! 87===; ! ;88775457756878998786339<;  !65784,976687567546423./41-+,.-422-/.,00//.+00.,.-**)(+,.0,+020K*-/*(),,%%/7#+5+31/-.+./01../1.',.,1143.,+/.)+,.0.,/.,-,+!).,)%& "&'&')+*+*()**)&&'(''& (&  +  + +      + +""     "  ,    %)2'".9$  + +  & %*#6"A/3,?'$ +   +*F>;G7DEB91LCQ26 ",2&&%37  1 )+ 2,:1$ :OZ.%6 "/ "*!"!  $95<.9*4K0%+"%+?KEF*)500F11.,(/!&("       +!  +  +   +   +    (+---.+'&!" + + + +.-!%""%( ""%0$ #$%&$!#!"$'''&'&'()'&'*)'))'$A75 KM5?',*+-**)&# !$$ "$#&(*.( $$$%(*++*,..012./001,25672-.0/.12/+$0./.001../.,,3732534111343559;66571853544566634447477:BB9:1322520./53113458648898=<:<>>#'&'%"?"!  5852266433'2* ),$)/(,+.30/12..2.09;757,5B8<=@A?:;887<=;55;;8;=?@;:99<:8899778887:::==9:98:=8-325:;;:8/8;>A=99==?BBDDEDCEFEFJ$H$$#$&$! !@G&D?<89:::7$*((*.320/2/,,++,+,-*JGHDBI)0300-,,-,UPGWUUUJKMPMIHIGIKRU[0/01225769714461/15461/,,+Q*+-1226<85c23388;99;8630^UPNHHJJS`[USPTX]\\\SV-Y,/-5833568:9600-$".10-#006/49<@CGEKQQRNOS[662KH&=720=:84<>DF@93:828?A:B,YKA(/21&950-3;821)'<=5(%+=@<356854745<733)+462/1694-1UHQT-+KH,/.,+10NSJJK+..30)+.+(*,,*RLPNFGHINPNF;06:<82K):+O16<:239E-.&4/0/S43,M.**,*NQGO,,*Q45104;>>5272941-03.*QVXSQD?1.,79,#(.*'+2"'47>>2,0+-0143668510/,(-.'*-2641,,0...++)-(,*+-./0-)FA,6.)**(/41./116+03/-)()OO)('*1/(EK02M01311/64*'-.EHRGE05*NB8#,..((,/1/0/-7;3105.'''N+H>:< 34#&&A=A>;=868:7>?;9;927M657:98744665896362243236=;8<688("&'! .>9:3))()0"#A6&&E>>772/'( ,2/-'')/5$"???7B=C97737/,99:=""!=8:B"(#%"?<;9<996:6'<336<%-$&&=50--*.&($"$&!&'*'%!)%# "!&#-P,)+*),*'#'*+.+)"(%#! !") "(*-,+,**+00+(),#'(*+/+--+-**'*+)'+,+0+))')&%&''%$%Q#%')$$%$  ""'%%&&'$%"!"%'%*&*((/.-..,-*+++16860-01**!!'#)+',''$"$%&&)(&$(%$# #%)%&('&''%#&'$"!!"&%($#'"  ##"# "(&&$'"+(&+%""#+!'"!   )&$$!&%#*'*5333684227321120#',10-+,/0110002Ā~~}~}~}~}~}~}~~}|~~~~~~~}~~~~~~}}~~~~~~~~}|}~~}}~~~~~~~}~~}}~}}}~~~~}~}}~}~ ~~~~~~}~}}}~}~}~~~~~~}}~~~~}~~~~ ~~~~}|}~~~~~}|}|}~~}~~}}|}|}|}|}|}|}|}|}|||}}~ŀ~~~}~ր€Àހ 򀄀ゎ덍퀆瀁񅒐뀒׆öӲдIJ‰եʥëθ֊оͬǫ»މʼn򥞒÷ȀѻŢ˹ӳˠϮպ哹㖟љѤ釹Пݷ➗կߒڗ􇑙؅溻ݴ߇ʄڔקҕ°Ƽ˝ݨΦɀЛ᭗哘ԅ倔܀ч㗆Мߝŵ݇Շנ뵬¬肏ٟڒݐ٩ڴ񢵭Ҕȇ鴍ѫÉ聇׹舝၊ż҅Ļ˹ڳۀ㮖ŹǼɾʴ󀍖ǧھоʭ铵Ƙ򋊘ՀܑրƶԀ􇄍ڀ̫ɩ􅎆ȹ҃Ҁ㦨힪돔ӶضڧϿîŃ㏓ž濻ŀ˴ƿֿՆ¿Ǿ»»됹ǹڭ낃퀄ּ􏊗ƾ醇ۀÀԿκ̺д퀄ƀ´ǯɾľúüϾоƚβļɽ;Ʃĭ񛡡A7;=955debb^WV[_afideghlfeitrjcY][Z\fmkhbfjvrw~}nu}xtiehijskdcuvne\[U[afd`eg68;@;477;<:lfbklke`dnq6^Zalnpqmkjfgihe__dchhhifcf46N8778:;89<==<7jfacdb_bknonlff_UXcgbbXY]49<<:9:;=<5hhlp:4ij8=;:?=;;<;:<<@CFGA<@BBCA??>DIFCDDDCAAA@A@A>;:;>BCBBBA=:;<=;9qs<=>>?@>=?@@B?<>>;:ppmjigehmmqo9u;=:<<=<=<::oghihijor;<>=??>:89:qr;A??BEB=rqlicnC?>=;tplkn<=<<=>>;A::;987lgghgeeh8=>BC@<:@<79pifdccb`88983ce9957efc_bfe6jhif`aca``ceeaejeedech`]3777852`ba``;<928:95c:mieXn=?lc]hojflX:>;=7c>EB<8c588;=98<;4g9fZggijnjg_`[j99fcfcabcb`cd^[[[hjifhlaZVYZSTX]\_[XUUWUTRQQSX]1211/001122210\Y-134634kYYEE:2/.)%(8?<3),*($'-*!!!%#32C)IALH\dIA0D7S@#$%#&>;B**$)0)6A;R/-./-SSOQUWTRJ@I8;6C8:/;2B8H0S?.M &./0..,*UP;,=F(7+=96.%/.(A,&"==SM@VEB@((##!"3B3K?+A2##4+N-"+$)F-(%&&*+%)*4H2>Q26SF+ %<!#7'76pjybkcu}Ed|c}aPx}a9" &5%+"0-,*)#.>B4,ZJR6YV[mT[k|brBL_S`c(}x8.@$;`uwXk{pcZ_^YndAfI^Jguj{B:P6H34Ijt[wjqJ@+[5&00=\_d]drh9BQ(&(("!6"BVW.U25J];?aC0 4?HIi0DV_*UEYXpB:Yx_U3+43XLe]t_T(P,L+dsr4<0lfC@dT_\sde~}pW[]P4*)(%!%).231)KJHEM-,()JFGC$-+(&"$+%K>:1.-/41248:9415::878:939;=<8<::;<:9:;:qereyfS]___fhn995ljf`]TQVW\ZZZ^bcadek66^KBBDC>:CIMT]hfe`a_^hXcb48^[WSTYWVSSZSI`_WXZXZWYW[^dlmiecbegkjnmej`^_YVT^X_^XY`ffb^]_`fl8igikmsgb\_`bg`RONVSTTUURRY]ahjmsqlmtmkrvCGHDBB@Ai7;@B:??=AdZTUT]_VB@Va^O`MSedd\Ud`^bc`bg`Yc`jmcchkfilpligglmpnhpputkkkriijohknuquqkaY\`cgfjiqtsrsoiqouxpvtw>ACDECB=:;=IZ27;)>>lT[_]\\fgo??@@IQ>ch?@HNNTOD><;vieknpnstAFNLLONIEEHINPKGEFFA?A@?@DFFNYQIFEGHIIHrZemh{ynrdlwyxGFMOQOPTY^YPUxILJD|CJMSUULLMSTXSPRSTXRQxUYURUX\ZWWWX\YMIIOIFCEWVPH|rXrnmmvu}>v{zJRL}_OA?Dfzn{syhkq@zHBGKMNz{E~|p^_U[s{~GMTUYXXTSMKJFm{tls|ropmyvuuxmnlsqf`f}FExl|JJNJHEynlq{JUYVD;dXechgaWw8Idkd^T:nbaTX[[Y]_a_bbXQRV_YTS[[YJJQ}oGHLYVNPI}~uJOMLHEGGFEJOSHzt~|{pYPMd]X]abcWSVawZaTTUTT\OJNNIPIHLKLMQXVXZXenldSVPXWPQUSTN|~sMoqIFKIEDVQRNlhmV[UVdh^UMKc\^bZ\\[XZ[WQDIS\VUWQVW^`UUVQPOMKIELUKOORXWOKwSXQQQMIUSNIIPYUNPLLKJDHEFIGJVGGPVPTPXWZY`XJLLHF|NVOvPTRIKQaXRPPQKVUMPVTIGJ{JsZSP^clv`c`]WF?IvsgZEYtnelnjeY|wld\\\[UMSNMQKFBFNHPVTU^jg\^cgg_^R_PDfgd^a^OPIMC~{p_]`_ioctFHODHAstslpmlmposjhjdkosojl@A>|}ywmphlkga>HLJTG{cTY]`NVONLLGGMYQNJQIFGIGWIVGQKOOLVWYTOWg_UR[b[R[^WXbGDUg746dca[_a^77^YZS[[]TV]_366b[TUK\c^\TTQTUUSSSRQWX\TQSQNPMKMVTPOUMAAEELMINPQRQHEKMG@KS_\UON[O_]]c__XVZ[bgc_\^a_`\PGJJGKUY_XMJFEHHNOMJJRNKJGGHABCBQNMLKHWOIKIQKE>?GQROKPMKJHEAFALWPEBCBFEIDKY>>4CA?>2B9FB??CC4?H>EEK?DT]=?>==J>:5401579:8987A8<<<;:9;9::;=<:;>;:7997:8779jkefglmjhcirdcgg5hdb__f556gbchd`dk:;9-/02/+),//34113573339:93.1/-,2675158@=@EHNH<@DA?6367:B>67@@<6/.*+,+**-112044520256-*+2689:86467640-/-/1011//@3211321269;<:541+,00,-''(224720 !"  ""  "! ,  !!   !"##  !!"!  ! ! "&# !" !  ##""! 89  !  898541126587:72565558:57886759!88666>733522004310/00.-//1/-././/10-.,,/.*.2.-./.2-'++,+(,00.%03.).3115'+!+--)0.//0/0+*'0,,-,-,.,+--)((*231/13-*(*+&')+)*))''('&'&&&''#!&  +  &!!# +  !  -')"    + + +   + + + + &(!)...&( +%%$! ,  +   ",P,=(=@%!65-2%2 )C9, +/O[IC8BPJ.4-.(3/($+/%-"-32+ *'0(# 1E<:2*?7I*/1,,1130.+*)%$&&(%%&(***,,..'###"%+,-0201---+-%..21..2620--1*'64./0//./.15:?=<87477:9<;69212.+)2/43/0367421239;76;>AC94/01164.-,20011/-.268<<>B@=?D?=?B&()&%$$"2 3.,,*./*! +41't0$(1/221:42575794295<=9:=?<=?@<;;;?>>?:>=>=8<;>:<:<9:87;>DBD@=9479:<;=9>>BD=A@BG! " >F&%CA>DFFD@BEGHJ%&'%!!@C$(,+*..,))++.1.+))(#!#$$#%'(/5/+**+,-/-TSROMNB18>9HG@E:@IGGPW*)//0.147:6.0B:+-,'II(QTTRNV,Y058811278965667;85d\XOMDJKJNLQVMOLPTW]Z^`35213477555696+(')&"!11)%=7'5655<<@ ?EDKNP/[YWXQ\2,D1' $:N[^WSD?OCA^fd\NK@235AGFMPFECG'#DEK'*+-XPBBDEGJ%FFDD@7-0&)7A9<#(+-122//+-.TSU,=KSMNVZTXPKA=CCAAsLKGE>;;;DBBAE>;9;91,/?%(MJD9@((.+)'C<99;'-60$/'//641*/!051,!#>:;1445389<;<<3//39522:85+.4GCOMHK&%+54.1*EPO>K+--,+(*./'GJOOFCIHKMLA3/.>648<;;5249I54549U312006/,/-H*.+*.TMK+,M+.31230:@?;/1.32..212,TQJMK3JM1*)%!!-)(23701,-8;60*(833824200241+#'.1///-12780/2/-,+))&+2+/-032-+O@/3,+.,)20,)(-40,.*+++()&()(I*1&L(.3/M1/324471(**(IL(E.1-OK@C+.-().71.-,-(21,-00)),PE,A0,-57@F9<841&"&C@9K4)R9JG>CA=46PDPMNN?:85533.).+,0,(&(.'-.+-4<;547:;63+7,%995375%#"&:')%$GEMLI:52544305244:754/143575.241251/15=7:G9;1'7!&$%8882.)&.1($%>D'ICBD;54/.(%.:+*%+4<7< .!#"!?<7>!=;>=@95:59<;%B9;;="&#$"@$:6<888;9!==:20439<6>&%+#%"9::8=:81),/2'-%$#$#"&.(&%+'$$$!(")#!%'$)*,(%(3-'$'+' %&$%.!&../.,/0+,+*&*+.*)++-(''",1,,((&)))''((&*,1,))'%&$$$))&&*&! %%"$$&&'"#&!&*42,)&-#.--1,,)(**0420../-..(!""!"(+-*$#!!""&&%$#'$##!!" ('&$$",&#$#)$!"&&$#%#!!! !#)%"#!#$+()#$!"#'!"$"%$$%!&$# * !"d!##& 3303269520391/212.*))/0-.22/12ǀ~}|||}}~~}~}~~~}~ }|}~~~}}~~|}~ ~~~~}~~}~~~~~~~}~~~~~}~ }}}~~~}}~}|}}}|} ~~}~~}~~~}}~}~~~~~~ +~~~~~ ~~~~~}~~~}~ ~ }~~}}~}~~}~~~~~ ~~~~}}~~}}|}|}|}}~~~}~~~}}}||}|}~}}|}|}|}|}|}|}|}~}|||}~倉~~~}~~~ n󂄆C킏쀇년ȂĊÝεŀ񀯳ᆍﻚነ˿؊ΗԊ࡚Ɲن莪ɐǩꛇ󀳈͈ÿş쳪Ȃ鉽椄̕胉ꡒݱàǹƇìʏ˫̀蚼DŽ¨܇냍ŕ񰤓ӐӳԱψ闆ߓށܹרꕖ逧ﱊƲҷܠޡث™셏Ǟωշʼºҡꪓ㮗܆⃍聍鄄߀遑ϿƩ߼ƽىםū֪ӰƼʻ΀ֽҿ􋇃񂇈ΠӴێՊоϾꂑ€Ȑ󁅅рžԳ󃊇񁈑̹ǡ鈓򎌏ýкւŭ摢ҿ񉦠􂅃搈镓̮̳ӊ〯ŀä􀑈̼°ȿȻɺ݅»¿̸ﻁȆʸٽؾǾ儓ƴՁԛ¡¿彝ݻý䆣₊ɻíƳȼü³õèѾ֯ƿÿӄG79:9876ihgb^]]cefkfgj:8pmkkpjf\Uad^Z^bgchglqy~v|zvxo[Ycdjpsihd_]\]_ab``fr:667878<=997nqj_]^]e7<96hhn;=qlhhkkh_dllihdccaZ]^ne478999:66:><:lf]\]^ahmkkpwvja\cighij[_l67j77hjo:;:kejn:<;=:88p9=;<;:;;=>?=;;=AABA@?@AAACCCFFDCC?ACB@?AGGB@BCB@BCBCAABDEDCFGEDCBCCBCCB?>?@CFGGEDBA@@BDECCABGCACDCB@A@@?@BB><;=??>???<;>>??>;:;;=>>?@?>>BDBB@>>=:;:olmjklklmnnn:?<:ooqoo:vouspiijls;>@DE=89;:mki:?@;;=?AB?;:=:999mjigeffc_f6A>@CB??;ljlkcffbhij87geg7;7ffdc`_dk86ifafjbbcedd_`aacef]bkkf479:94`ac\d57:8::>@?94jigbddf<>[VddVciTZ:;@D@UC@>88:9=@@BEC=<>@=:jf6e^`egchmplf`dc]\^cc_`dcae8c[^ca][\dYV\stm_XVSSSUVSRQSWYX[`00/1333-.34455334TiD]TPJ@3)'&%$"!#&"!$">@"070C.73QFV/LHNGN:3=%)$=(<70K../43WSTQRVSOGKB=343:67;33q1-?!-%H*=+&..%-,I0DH66+,3I&)-"#.0#3.TDDgdrUF7t`ggR``ZuhPrzlO2!!! (&)+&FH"("!@HRKlOTX0eJaISr_VSo][=VU,\L@rilrA?)4%1\OnERq}@Y_K`OWcjYuNsU;50-M^^qx_gXDXg>^EZ~inYz|]{1T.0T-+1?8-+TJ!*?C161?&:9FIDAB?>:21.785:2,"1CE/22)=60SJ1'#<B=AX,93217!+*&*'!!#!"#""#"##$1"-././+A%*(+0400**.-.+)31/($*2)8J3*./3436FIIB<99F,]^do:FU\[5YUGdMAFiiZG8rkloV^adie_VZa]Wa`_eddbdh45778]g7ia`4XEDGQ`aM6?A@nbZ\:?BEE?@@|y|y>sA?==xtrsqs=ABBABCBB@DCk>qzzttsvBEA=j8HLB?DDJOHFEBX5TC9NgnYflqQi^NGEB?ES18.LS_meb[SMWaOOLY`ed8EIMKLIHDB>w=pktqs;=wAGMPNLJFFDBCCDCDFKKKH=D@AINKMWXVOJHHE}~xxrhki`]c]e^9]gpx|DEGJKMMQOSUTRojGEC@@DGJLKLMNUXSPOSWV[TPQRVVOSVTQMUXXTUYUUX^][VJFB?@KRS[]WKNONKEDHOMLFw^nu{tsnkjyztV`t}kvwsvLTTVTX^\Y\[WTXXZZOLJIGPWXNzyKQVUW\\RLLSZUUSSPMylt}{wv{~}ywqnqnnqpj_s~xuoo|}~{z{FIJMEnniq=GY_aIndO^c\WTRL9IU[\SLCJi`]WWQVV`bcU\bSTWYXZYUPNRKt~JMX`[SOJ|yETTMHE|~MPLONKDunhtyqzuc[U[hWTV]TTUZZc\R]nqpDO[XTZUKKeGPFMK|IIOU[RVccrcfZPRTWQQTPMOooonHPZhx|yhbV~RRUOV]]YORTYfkf_[WYY[ZWVPELQVUTTQTXe`[WZWRRQSKJC[QIJKMQTQH}FYTPUSMKPRIHQTVQMJJPKMIHHGHGFDEQSOLRRSTSYZTLII}yOILGy}SPUMIORJMQ\NMMRJQUTNC|nVHW[]k\K``dVQLVuwfpwIcWkcvuyDkUIMxbaf`]]Z@SQLKDFIQO]\MR\^W[W[ZYWRW_O^ceZeabKlZWdhl>GD~~wquqff_Y[Tc[JRJDT[SYaX_uh]hh]Z^|wrqmubf[gfspe``feb_]]frscivnBSGGED}yw~w~uncfhfhgdd_ea__[``^^XWTT^\\`c]\affgnkbSDv>IE>EHC^ohXejK7mD{^@QAyqnaSYY\`[Uis\_pn_b[_uJG>BHEAsdsFyvuqodgiglgpBuyu=?EA}pmv~smsmi?HBCxlhZ_cZVe=AJC~wnv{rzsgtoksofnegpqsinjiqHD@?{rimhnir@HANJkcb`aCUTWXFJKLRVRKMKKGNNUT\YG:@OIMX[ZYU\TURTUPNbT]TKQHPLZ6A:4[[d4be_[XbfY]]_[MN[]69d`YQX[[]X\TSQSRLNVSPYe[Y\YUSONNMMMQWOIGHEvHHKOQOONHGOOJJMRXXILNUESXSZ]W[\]cg4d^\_c^^]YURMEDL\ZRRPRMLIHEFKGHMNJGHGDABBHNKIG@MJJHEOMFB;?GOMONQHIOCFKHHPQEKNGKNMBIDAG@DKDCCADDNUJMLLWDBMIOLNM<=>=;8969B@8`O=?MHEBGJDQ3<=@?;:;61c3888<<;<964;<<;:989:::;:8;<9:76867865767hfc`cggecbjdfiid___]d45 788ffdbad6772220.--111323698547450*241-.142569<@KKNOC?IJDB@@7++15;??8751/.+++,,.175871./-/235 :6467880/23110121,--,z41--/.05798<@?93/052200*+3425750345  " !   !"  ! $ """ !!! !!! ! $! !!! !! w ! !! ! 864436667767 8887796<<:6667; 5544977866345445458633201-.1466012/101/.0000/,*-1..,.0-.-<*-,--/0-032-*,.+-0.+,+,+*0-$.0&- )!.--+,..,-/00/+.,**+..*+---.,)+.,*)*.*'+892,(('''()'''&()'&(-##"  + !D  +  &# + " + +  + 1     + +      '$.$ '# !' (#+ +   .$(<),"K1 +",&+ %!  --G*N0nNN!$.;:-;;".1"'B%#--#%#-.",E5# + =L[VN7#,(-#/&"     +   +   +      !$   + +  !   +     +  + +  +  + $)*-/"%$'"0$707*3.13)+,+,,*'(('#***.--,,.'-.*+*$#%+33)'(-+(('0241344434211.+-/0,-/0++/112348998886687<;9951../32),-4342447::98559=84554;>@=9764.*)()$)',,)(&$'.37=CDD@<>AABA#$%&'&%&''# 5330426;;<:<:996540415>:56;>;<:<<=@<::;=>@AA@>>@@@;;9:48:<:9;<99:;<>AAA>:8:<;;<:>==?CFIIE@@ABCFDC#%.'(!#"$$FEFB!8"!!"CB@A?@#%'&%%&#$%((BAJICDEH&'" 7%(!!"%*'$#!.,&)/4,10.):G=99879C#%24=E:51+(,6)&%,/24&*+*+)($$"B"<8?=::"(,./.,''(')('())--,) %##(-*+5740,,,UT+VUONLMGGB=?>89:6:539@HKQ(()+-./214320@9(*(H$$O)**,,./17:533ch8<:=7445;=ffZOLPOPOSNLUUPV]b1486404663452349961)$"'--472(*))*&%(,((#:+7>EJNJFFA==TYJJOB+0>JLVVUHERH9DS\_[NF@9;F,23547;8556203467/-**(-32*B?BEF?@G+020143*%'.412/VRPFE7FMKQXZUJIMDGHJKGNIHHB?96:;>@?9/?F?:69?BHIFCA&(,.)J:;77$18:'6."0/)'%&$!%'*$!,:8755025;=;29902443863/Y.1+MEM[IP(*3851/,NJI>(01,*)KDE--,,,*&FIKF@224933366<807AB@)/73042,+?)K0(I-+MEM*I*-14.099C9>6/1440/20//UOEGG^M0249BA@E4/&?,--).653-//39T<8342101210+#*.2/.../2;942320/,-')$4/*,,-/1/)D'40+/.++./)(./1.+**.+,*))((OJ'%#%./-P+0/430)(M*MGFC.)*)CD/,/+(-0),.7*()-(-/.+H&QJFN?/#/10:3)8690-%+?C9?G+9T6CB>783/2-:2%"'.)/3)-=6088/.0C=9I=:?34-32;:4103331015>?46:3"+#$#$C?>DEEFE@C?;44668766253430531311..422460/3687:<6/'A!$"!*85+1/F:&B/!*$B<:1).,/20+6;.0;6/300=&$!$$#=1;$@>87/35/07!"'"@>9<@=B?8@>;A>7>57:;>7;66:&$ !A<79487:lhink`Zbkjigbbd\W\&bg4ige6:c^9;:khea]gifgkv?xronpdggb[\_imkr9<>??:gaf;=C?;><;>=:;=<9s<>;<@ADCBCCBAGFFC@?A@BCCCACDBA@?ACEDABBBCFHEDFHECDDBB@>=?@@AB@@>>@CGJFFCCAABBA@ABACF@@@A@AA?g@??=>>@@?>=<<;=<>A:;@yAC?>=??>;89::9qooo78pppoffhlnt;8;trrljhgfkmoqt;tp9:<<9::=>877lmjfceedd^`d7A70D/))$''# "%!!'&),2'"KC2I[XPB=4]YF>iVE,):5>**%@9L7O-241.RURSQNIC;AC:86575;$0P243VS7 +-2IB4&)0Ho[M5$$,;@N/:)4)7- )'%)'&b3agPiH23]|:8ijI'(,555'$@;8)67;+PWE>#;A4<)3<37%. 9H$/--4%RD>Y2VfZSr2_eTz[w{oPZqYU5"#$&#  'D*)3sg*VHnD^]Q\A0&LYP\@M`Ucn{kUQAGO=6.C1[?ZW[V,(>(@\>J>hafWil~utv}ZJV[-4,DAxa|]oWQuDJxTNRiFAlYQFG`DgHOU0YOPEL&#-)*6_DNO. +1'135@O6kP85/zt,SImLoM/99ecz]PKS89C-!ELE8-:"9=IQAJ@;+)'+*C<<86:GK)(,4>($9++)'&" H752?%'++,- %)'##)-&$+!%'"",)0$!$%" ! '8?'"18#6@M8-8041/56342,+/6AY#Q?6,+,9@/8DA112D,1O1NQ<2(.LdDf;ALEC8XG_lSLNz\nzG..T\Yc_ifabbPXg45flfabc345g1536eW76d]TTNGDGRWNH\@RYZW75cg]\^^\ZWXVRPMOGDkfcholZY_abcabfddedgkgffc_[Z[\\WGFffgka``^`ddccfdgiideZ_g8gfhikhggdWMMJIB@AEGPV[UNU]aclel[jgjhmvxp;>ADGEGIIFHJHBBAA=geolhkoyvljllme\\TY\klglxvtrutooknlhprqssrplnp:;>;qtnqsolkltB::8ADII@>=?CCFHB@=??ACBE~C|kmsvrpgl`gYYg<:96ia9IHCZTD.-7$K`TGqz]fYQOPGA@J0?F4Dn;rtuT_NORNZ:LLGB@=<>?@uxxror>rsl\;CJKIGFFCAEFHKPUVVXYXUTVMIDxwv|}uywyxonmkmnxpeOUru{JKJMNMNLGORP@Cq~NPRXWVSRPPLOPWUWY[]Z_`]\_`]][\\b[PHEiR=CMX\[XUX]PS`cbbbhd``J=os]v~qW?E9TLqHY]agpvxK{fo}QQRQORSTPQNOSVTXVW\\]X[^SJEBIVTUYR{lsdsPzvzsqhbjqqslnxtzfbv;tq}}xzCJLNsmqr?UbZH}rh_ccQQVS`NGY[\NLFRbd[USRXblgV[eZU[WMQUQLIqtPONUb`WQHztsCMKGGD{yKRNNLGB|ulaXXwrsi\TQNWQPNGDGR[YWbjnlFHHXRVYNQNzSJHYL|FKSROa_bht^YjPUWPNPQMzj^WicfAVSHHGOXXSJM[gYRTaccej`SR\fqcURRNLRURPLOPUceZYbd_XT`MHSaXFCKKJJLGHQTPQPMMJTPILNNMHIOOKIFFIOGJJBJJIILNPNRRW\LMPIE|oxNMLNuPXQITQMJHQXXNROQFRSYRtrKqupL?PYYkpezzre`clWYderfkE?cq|CPhQJzm`^_`ZPOKUZKMWGDNLQVX^WRRU[[`ie_[ZZY]Yrjd_YWVi[pcpkVgsKGsjllb\W]RWUQWSK]e]STTnof_iidY^{xouthib_billhidfkmb_cffppdwwFTPGE|{v|{wx{wjaid^lec[^b`^\[a^\^XURS\^YX[\^bdnecdYUDkJFJODLTRZb]echkbEeW?Mtqf^KJS]di{\Zzr]bZXbJppDB=BJMBpdpCC?BxlifjocihnssrpsxFAGwgfo>zw{xrts=@A}|jmg]XXe{G@rqslutzoqunnloiciswsnd^jeB>mC>uoojruwq>C@E?svrmh_Z]ZYKRSRQOPLPMIE@HW]NXa=?FLOPU`^_\WPVWWOGW\WMJPWQILPd>6_VU[aaZV^ad8`Y\XTJNLdd4geXWTVXQUVVRQLRMONLUQT_db`][XSOJJJMMOLMKLEDKQSNNLIJJFQPVSWPKONLJQKPWQZfdfb3cda`c`]^Y[XTQPKRUKMOPPRSRLHFHFCJHFDJHDEEGKLHJ@EIIHLGHEE@=KULLJJFDPHFG@NPDEKIA?DEFC@?BAFAPP@FDTXH?TPULIFAC8897=>=4;K=68;BB04@1>;2X3=76:<=:9777:;:<=;:;;;9779<:774)767434hhgdeacefeefhehdb^bbaeg38:;3bcbdfj4123233//345974863558245100,)..17;<>BK1-HGQQMK'#.%$-!C?:9;232-,,,*,.2449400  6!! !!  "!!    " !" "$ ?  "# " !!  !" !  !<<:998!: ! 7788888745567:96564448:5  78:889653232257778:74564224321,-/10540.0/-/1120.010///-/.0-*.0./-102-0./-,-,//1)+,,..)-&)/21/-10,.304,"0+0!,2/+1#1))'))4,$-+,,**(+--*/.,()-*,.+,--,-0,+,***')- ) 0"$%)'')(&%%#$%&&%&&o"&  +  ! $ + +  + *$5)%!! + +   * * F84 +    +     + +   + %). +$!@ %!!%   4 $+ )*$#   +  +  +8".'CBC".('.-)?-)):6/.'-"& 5)% -9$ I3)(W:"1 "!$  ""  +)SeU]"LHl'a0G'$<9E\$) $+ -.!   +      +    +-  +     + +   + + + +  +  + + + !   ))$"+#"%=,26"(&,,.*)** &,-0-++*,+"*+'''%"%)+%#(&)*#/3145632211-*)*#"8447;8/045566897465596778652321+!!448;345447887:99:968006779;;7443-'*'$""$&'-.1-(-37:?;?5@=>=>:56156>>:>EABACB?A?>7>=A@ACCABDEC>@GJHFEEFGI$#$%%%#!"$&($$$%''))!'('(%$#$@#$"%'$$%'('N)J&I<>AC?@75+/)*-30'&!,, ".'370VCD??A;73:#*/ %D"?>A14&#(#) ,,($" "##??A><;993)&++*)**'%NLLNPOQ)*+/1442455223-(&HKNLGGHKJNMFKGED@@>?AAD<7./EELQMFIN,,,Z./00/+010$'>FLOIEQ/245886ecccdknlkf53jflh6`VW_YRX.\1b^285679;:=?879;:987594)##1&!*4543021&*489989788) 59.DIC1 !!2+=*35579?K;DGG*@7>GY]OPPTUIHRW\1d`]ae_[ZY323b].000-,SQ*+/00323577255-%!%,,051_`WPSB9>8DU/Z`VUWXOG?AJTURHGG=:2.38%++))'FGI*--+*'&IGE?6/3E?BM=810,K5///+)*1766<@?>)+(4.03-L0-C2,K(4)LEM'*00-858873.,+6,;3;5)29(D%FPMUIA:;:3/-1).,'('"/74.,,<962974.3D@;?@9:3./28897357810356<;2;:$,)%D#CA@<@DCBAA@@;494/967/36332/44231/--231/0/145<65710&;*%#"#&"*.+-(1G64'5+&<>71$"(.48F..B:/1.-6(:7 !%'"95;## "@::8:;4649:<;:<;%"(?528 >AF=?A==<<858=@;93073! 4#!;9:59;?:" ":>=860,..-&)))'&(&)'%""(* ". #&&*1.--*%*+,("((%"#%)&! "*,('*,-)'---+)*+)#%"-+//))')+%()+('"(%&&$)&'0310/-*'&###%$$$%"%!"$'(%%#"%$!('+*-)&)&%#'%'+%)3/1/-,,,0.+,*+)%&'"&)#$%&&'('%%"## ##""" ! "$$"# #" $!"!!$($##"$!!!! %%$#  $$ ')!#+"($)#! !% !"" ! '?1101200132344331/+,*,/0*-./01큆~}~~~}}~~}~~~}~}||}~}}~}||}~~}~~|||}|}}~}~~~~~~~}~}$~~}}}~~~}~~}}}~}~~~~~~~~}|}~}}}~~~~~~~~~}~~}~~ ~~~~}}}~~~}}}~~~}}~}}}}~}~~~~~~}~~}~}~~~~#~~~~}}~~}||}~ ~}}~}|}~}~~~}}|}~}~}}~~~}~~~~ʀ~~~~}~~ +~ʀ ᆌú󃌎̀7􁄃􀀁򄀀ʺ厔Э؀ϺȻ脋վ׋Ⱥɀţәć̏üȹ⏖ꋇ̔Ř޺ؾ眥ӌș䧍ζޅѻ퇬퓀ł򿌐έ򄡤ʯ׳ܙغ񾢄þᆏ¸ُ߅Ϋ֕ãؖᣡûЌڔѓ̚٩Ϥŭ½◰΀ᦁ剉ژƊĀŒȲ€ҦƊՂĶ֣ŷ繎𗤍볾ޱ徏ɄѨڀ흍ɴij£؆ƆߍѿƛÚγے쾌ⵢ㡑ވݪـےěʇ膫ΩīǪϸʴއɃ˥酀ŭ񂅇޷ɴտӀڹ¬܃򀇎ԅ󺉛ɅʀوѮ􁁄ʭؙͺɾγ儏ၑ􏛔Ūĭ㑔ʨպԵ눝ЈſnjѾɻɻʽ̃ܿǸŽ햏ꅈ㡴ɺοϩȾʽϺƿǸʸ;ŷƷƻ»ǻѿͽϺȷ匡E6R6:<=999:;8::ikfgbb_bbbcgjkkhjfiqikf`\ab_cjnpzSPKNMGDiV[omia]VTRLHKQX[ZXVXU]4[`ab6:;==:pokb\[aebch7669==>86ljd\ai65iecd]TXdehgheh:679:<99<;qnkb`Z[clsx>ytqrolplgdfa_Yam9r9:899nqr:;<;okp::?>::r:><;;?>>=?@ABBCDDHFFDDCDBBCDCDEEDBAA@BBCA@@CCDGHDCDCBBBAEC@>?@BB@?ACEB?@AEBCFB?@BFDCAA>><<==<<=>==>??>=>=<>?=so=::<=?@>;9:<><<<:99:88pkfeiiklq<;:;8:ojjps9ojlkmt<<::=<;;>=;;;<9monlnmlhggffgffhkmop9::9;;pmq978mmlnopmlk77m8;><<99nqje^__ahhefif76ajij67kbao:7gaad7ki\_bcdigc[Y`a`feae79ggbabbV[Y]^_ah:98cO_jcUO^bb[Sf>>B?<66eYMRha7;:aWUVcVSWXU_^\]lYTV^]Z`ea\^^b[Z]a^VV]`]X\[\`_\[^a[XZ]^UQrweURJRWW_mb[WVTSRPMORUX[]//000111568644[7;JcUKN?0//,-*EE"A=!$%$"!"%%"%71.,D/2.TRJEJCEQXF:0J1L,$1(=O1>=>>6:63.8+/L024S1-!/fnY1&NGG6;+EAA!"/7N: 0,*4'->7=.EI187u7e-`ZX,3%.*(I<92==D@'KM%54$,?))'#6=?-&=7+&)-##)!.$(-1(SRjrntchgj~SzIU}jc[D3" =25A6-8(M5G7#:< !>AJ|vJp/I;%R>~INKF[Y|?e/?O68A.9GCScWq|Fd8\DFW@~`ajkNx~rohkeYU~|R`cdGMbyj\tHCroP810IT6Kby~y=0^]AOx0B%<:'.A7C,$DG*29;BDAcCnEmmbE/.;ai|:E|MdtUNE`wrsYBPCg4<>OINUQ0-[FdMauZkd_tSMEP<:?/Q0F+DU)SDNA0/K+*!O803N429>870)a2RGA7CB(M<,9FRJQ5MOP_;74;[iL_4.IG2\B:ZF8C[435Fcd^\fa`YJZ^hptpn`W_`^[_bb567566h7[64`bbh68:775fZh^69:8\KIFGHLNRZZQRRNTEVZRNQVWXXXZXSPQPW\^deegfba``_^[ZZ___bb^^[ZYZZ[Z[\\Z`][[[ZWWXYXZ[[[]\]aiotbaN@N^`ac`[[WZWIIJLLSQOTWXX[egga`bgfigedjmkiglml[]8?@@@CGGGBABA=>sxwxwwyx{}xsnommqprmprqtppvxuustwtyyxwvzxy>@@>>?}?>?????>=z>??AABBDDFCABDCAA@z}wuqlhZ^h112<>@C?n97:8hBEH8)6-];;H<^k][[^\SGBE+YcM7Z;;rtsE[lV?JD<:@@>;<<=:;@@>qt?FLNPIEECBDE}~EGGHGIGHECDGDB@?>>{yy|zxvfjmhT\t|~}~LMLGlk{CEHGJOTZZYWUSLONOPPRSWYY\]\[[YZ\\[_`^\SMF?37qKS\_]][[\TW^SNUYV[_bcce^Mmxg^PO]`MDN^[cfkHQcUv}XZUQPLSSVVUUWW[ZXWZWVWUOPHGRPMJMR{{zz~y{kdhqipqqmsooifj>wxwG~|<<;Ic_]@M]NFHqc[\TUUbZYSX[R|sOYWZX]SHNUY`b\TNZ]^[X^pif\c^qlpefimmIQON}jw~fB^``\daca[ee_VW_pgrei`ca_n}uxqhiZahpxlnirmctjcia`z>CCGLXPMD~xx{~{untnknnmifdf^Q\b[\aXY__]ZVZ^a[Y[_dffgsbe`WVNtuAKRVQWOVTd[khcgIkZ@qm^YTSTZi}oWP^]SR\bdsmjg4m]IFE?mn{@>>xpga]kkX_lqyqhip@C@bc^BQp{xB@iint@?}rrqnd\_ifrt|veilnvmwxusnkdce|uoqlppisre<=upqnvvxpjeu@A}rkonmjec`XX[XUROOUQJNL:IUXLRU>G>MIRV^VU[]ZXWTSOOROPGFJMJQR1^aYXX\bX\dff7`h]WTRTKSUc56Y_[]`ZQKXLGNXQLSUTQS\\VVZ\XVWTPPSLNMOOQKKGLMMQOKNGHGUYVYTMOMLHHJPTHM^^a`XW4;e``_`[c^XWULLTQQPMKWg[YSLMHGFEBAIRKEDFMPIGPKBQKPJGFDDAIQNJRRNKHICEBIIGJHHDBCBDRJYUUMJTKHD;IPB@:469CFRPUJ<\8=?==@'@>3ab87::<=978979;;;==8:;;939<<:;9856553445745k555gedhijklfd`adgebdd38854/VV^d6373411.110135434637:7840.210258:ADL-,)+,QIK&"4',:95-)'('&$%),+**),*+')-.3330-,/1//253/+.10//1.()././101I75400..29<>!@;::9686423/0-/586792286 ! " !!"  !! !"!8!# !   !"   $! <<866 +978544656799657:84657:7973456344424544566476965467864357853/0/.43011/+1010--50.-/21,-0-.*),--/.*+*,++,,'((++,,.."*1-&#-,.)"+.*&)/*($&'+'''((+))+4)(),*),-+),*-(()+*&'+*)(+**,+*)+-*(*++)&9<2*(%(,*,4-( ('&%&$#%'(('$( #  +  ! ! 7:-&"#"#!   1 &+1-  w  +          !&(!$&!% A($',!2*  +   $+5*:,  *!B,"% (''C/=D3((&A1,9 1$%'=4<D+8>%/$"2+-%##'&OC?KoL/2&/>   )4?d8&A43)!)12340,,+.,%&'))..,.//,.57:7669;=;:9=?==<=;;,.""##%&&% 7:;=@!;3=??=7465::=>??ADDCBADBACBDCCCB=A;CDDBCECFEB?=?=>A?@=@CBDABEFCDDDFEHHGEEFDF%%%#$%H$##$!ABBDGDEC#$F$%%&T(()'&'(''&%HMMLC=;64)*0"%(&>0%$)#)<;/;DKIE<998<. 4# ;>=#-:-"(%! $$#! "" 88 &*,-)''&'**IJKKKNOOP)++,*+))('')'%#"""HIIIHHHOPJFHGD7=@=-2EJPMLOKMOQMNQRQOV11]Z_XSR,)>7@&)+*,.3::;996d_bcfhheed]YXVY\\X\./[Y.]\000126878:97877887::62*% 8)06977566/05-*.2.268::;8,9<0-&(33'#(0.35NG4 )5J4YLCJIQYPJMQMKHHHFNSNQX[]Z^d8864_]3cZZ[U-1034224476436421/+,'(00ZPRWWY-O(+1bWUXVOMLQSIKOOMIEDHJE@<0+.515453974//3 B==?K'IDA@&80'#<60% !&+/1,1'$'&"!":9;11579AA067531.-0.*NQY16OD=GU01/3>;3-+(JBIM)(''JDAI')+,)'HFFD=35CGDCIK=94137;0-*H*.2,,367=@&,1/,6/,-4)J&D-42HLDP(29713439=311..)*.0XQNUI>>054:I,*152/,11302$C)/6156::7=?52)-574220683.+00//29=96:840.64$./+$"I-2'.--31//,-*+(/0/++,*').+*(KJO++-*(/,+))OO*.,)-621,%1.KN*I=7)*($&&+.,+-,*++/10+2.%&,+(H2/LS<>;'"'-3>4BIOCC672*&/=52;A!'521#'3*&H)H?612-./912/34/E=*20414-(,10462.+246413G>;7261=9<44420012%++,SJD7@Be2132042140695//2<4>572542C>88,/26>9=9?;3>7360.>!!$%0**$FDA=<>A?=8=98;;963363*37204.05431/24511125=484./,>=!%%&"%$",(4@754(9-"A<:1/)&(,5E;-&00++253;41,0)$""88@"?:752;6+-49A=868!"!.2-(:=; 57:>;62383;?CA55:;@@A:89pmme[WY[^bfkljijnomkjimphcb`fknjhifjki779;:7mjt@@BA=;<=>6<9;=@?@?>@@?@ABCECHKFG@>@AACDGIGCBA@?>?ACDA@BCCHHECB@?AB??=<=>AB CADCEGHFD?< ABA?=<=<;=??ABA?>>??ABBA=>:9;;>@?@??>>::<989<;rkhgjihhjopoturrruspnpkhihjj8:tss;<9:;;slkkligjjkpmiikmmlmnlkllnpqqmijk8n8poq:9nnm9o:<?FOV?CFE<9')*)%$&&'%$&$ -A09DAT.-WM@LSH@[Y;[1BP=-+$/&)9QL>GZXHD@KOQPA@::9?98+0;6:U-/2-FD%! -LQTL'4(/52@;IAEf_QIZ]>5+O8YSER1:BEC>:3KKX\GKW;qJL@6U*pwYEcmxvZ?e||o_ga]Gc>1LX>UEEH0_bR^\fpdgg{alEYKRD61P>(1-HE>NJ+3K5?B.*FB8FBKDQ?<8I14'(-J-80=T<;;R-;V3@i>C>'%%%&!:25E)"22<0,#&)+21GA2YP<4S00M;8M&G?@e_UK4BHJRJ-,CWZGENWC8RZJ\[ggVc74O[ahcifm7788hbabik7ghcd589675ah^da[`43c_[]ae564_887:7[miea]]\e^UY__XMJGHRURQUX[PJFIRTU]^^ab_YUWUSTWWXXZ[^]^Z]ZXXXYUY\]_ZY^`YY^^ZWVSTUXYZYWVZemgebchUSkoc`bSRYODpILUYWV]YWa``aelpmnknnmuromellh_;CC>===?CEHFEFF?98999;;?Btif]add_gknosvunjmptxvppqwvvxwtrmw=?x>jvwuqmprrz}usvvnltwvxytxuswzwwywvu{{~|ysprpurosronqrrrqojrz~ywuxrpolptuuv{}?>?ADDBBCA@vrswq^=6:jiYf:;?EBACB=<3Ze4edqgY}infUODAHR]HQH5.@5ggT]o>@A@?@;pir98nku8GRRTPLJHDBB@@~|~{CCEBA@CECB~~||~~H{sot_j]@sMGHPROQUY``XVWUVPKJHPQNLOQRVWROQZada^YUTU\][\[`\^[MJA:N?~wocifacet>;JL[ND\QQND@xwkqqjlhj|fXIY[^WUZ^[YY]YQYa`XWY]jlcikujQUKY]Hq@WHASd_`f;~wvaioHnSoylca[VORXfY_`RUMOYVbbf^]_c9CsFEu@AA>xxwnbcdc_[VdquheqAEBueP[FqzD99FDJAFD>EJ^^UZRMRJDICCBCIy>RLHD?<=:=<323326<:;679::8:9<8;87;<:267<9:>;;;:7753456668777668hjlkgb`bf7ieaab0885-PO^ff6330.03/011126475788332/4138>?A&()),+)*MLC359;63+)('%##$(,*,-)'*-%*-0254210-0-.188251,*.220.*)*.,/4226453/,+-0246776798764357432/0376564563777  !  "$#% ! !"$" ""   ! !  !""  !"!  !  :752466556638:978;;9896442339:98554321334976565677653347788655665475436541044.//-4713.01/100-.22-/./-1011-*---,+*++,-2-,,)*,,-+('%%'),//'+-,)*%)//(! &(,+(*21/*',-/+&'(($.,(*,-/,*/*,.()),*())+(),+--.**-+*+&%&)*'&%().2/.0-*(%%'('&%%$%$ "$)#!$%    !" !  +"! (**( )2 +&   !   +     +   + + 3 (%)&.#)%#!   +    (% LJ 0<. %+!//-428]C!2-1"+5)#,) /2.&ULg;i>l9% =',02$&/(5$:35@QH?Q3"'1#   ) C+6!"AL-,'(,0><*;RT;**"E +%*%  +              %   +  !  %#!"g%#))",!(*/.2031/0/1233/.(-).,'*))$%'+()20.,)+).-*-//,()')00--/24,'%)//0554654/-/110/112231321011.0112//3600210/0,+,./222139?;878;+(68.,.&$-( 0&)/0.051,0157:==<@>@@?CA>>79951##"!!"#$%'%$$" #?9:59;75<@BB>;>?BDB@>>BBBEEBA?D"">5ADA?>>@@FKFCCC>=CDCEGFGEDGGEEGGMKEEIIJIG@?@@BABBCAABA?=CGKJGFDEA@??AEFFEHF#"#&)('&&$%A>AGKB- 0.'1$$&'&!!"6":*--,20-@/ENCB9:82;05/ 4/%.8!"$$#$ ;;A 649(/.0.++)&%%%&TNHLKOTRO(O)*TT'$$')'&HHHEEEDEHGGIJP+UPMKJD@D464&EMSMPOSRMNOQLLNPY1d_VZXPQOE(*/0.047>?979794__]]\ac_^]XW[[[0.+11//21353/+.6;=<:502389887944.&$ &,2(./-.0,)%&''(($)462$)2-2- 24A8'2=1*9>L4/H+/Z`Z\YUEAOQNO'#>;89:BEOR[^ce[\ha__]cda`\WQVW/12/1/24/1/.010.0.OPT_Y\/000\.*.QKMNUQNKJMKIKKPOLIJKG?4>:: "A;6.30++0:4:<;"".".-,*%"3+)/9972*3:+#& ,99A98788#.**(MIA@B>98>B<:;948380,6=8,R,65-"--13>&1:3+320.++F*-.-0'L&D/59><3532D7.W,VQ-.VU_ZL>=:.-'2U*,52.1154,/2/3J6/53189BN;11-4=3/027624-,-0446869553323-)0/(%#",/%&(*191/,,,-)'20,+-,)+**))''%EH&'((*+QQNU*..+*10.,9+2&B((G4'/-+*$#*.(*3.+/0+**.5&A'+*'I<6CF=251)&$+>=&%KKD,7=1$/>4*1-)#$+"*+)))$EBG<43/166)4953/@"#//;*5.)-2.491/4281*1120-1168?5+<5 ;1/!$(3*(RPNJD:5364455<8<:8898379<331919;>=;862676><:78E8<9,%"(%$0'$5,.,PKIC"A ;<5:85857C4,$/35002323131+164/-129839;@9+.&/4%6,#,((.A>?5::(:*;@9541-&'+6I/11*-(*/.20.')() 5# 9! !==<94663.(&1=?94;!#!8/"'"9= ?85;>>99753318:2=1;@@9:6><5.7?>;;@DEC<7876;;7;@>837<:=:@758/= =891,/-,+.**+%)(" #.#!!'!#$!-*)*',.(%(&)*(+(##%#&''#(*(+2//+1/-)%&$%$'&'&+.-))&*'%$&%!$,))-)(&')&+*)))($&%(''-)&%%%&')()*($(()(&%"".$$0+''""+.+,+&(...(*'*''&%|###!"" &! "!$#$&$##$"" "%# # !%%&$%%" %""#!$!,*%)&#(""#(#" '#!!  $&%&I457731/.0//---).,Ԁ~~~}|}~~ ~~~~} ~}}}|||}|}~}~}|}}}~}~~}||}~}~~~|}~~}~~}}}~~~}~~}~}|}~~~ +~~~~}~ ~}}}~~~}~}~~~}}}~~~~~~~}~~~~~~~ ~~~}~~}}}~}}~~~}}~}~~~}~ }}~~~~}~ ~~}}~~~ }~~}~~}~~}~}~ +~~}}~΀ } ~΁  ŀـ i󄅂ɺ怈󀂄؀􉏂ۗ̄÷˾ݥȉ݇ˉωƻڋЋӲҺΉî赩ְ抓ɵټǻ񎶳س꘥ю攵Ήþߏ䃈ߦΦφ✹׽Ȅҫ򋥕͊ϫੰ⬂ѻݼ¥ئ旭єɪ赾ўݒ뗩뀗޻ˆ赼̐ކܭ̐쀍ȅ晆•ƟඏݾˁϞꡌǗՉ鵛ޔۧƟηܪՐԬ䜌׬˾Ցخ՚Ǿ̃ɀ셉򺒑ش탁ňݵ瓞şڪ幦̀ЏƤ灒ր̅קݳζоɹĺ󄅇׸»½ϵנ톑돏԰Ғܼ뇗ֽ󃄈݆ꉐÿǼ蔢ηЀ»󖑏󖏇񀠃􎐎Ż⃆ҬꜦŗȹǰǻԾص򃀔ɿĿЮ򃀘ñƍҾϼȱնͱ݊󋞈Ҹ텃ѸȾ˵ǽ׺ĿͿ܀ȴĻºկøŢђ՗适򄚵߃deee775h55666;87:>8::md_abbeeegihkgiidikmeghicdp>D}CEFRLLHGwt{okmkcVSOMKPTY^]ZWX]\aa`fhj:<8fffh7iegca`eeecbbeio:pf`566>B=:7c`\Zj^a`cbddch8os8ijlkjjaYZ]^bcgfinoomlkqonllffca`chjkp9:8:?@>=<<>?BE>:::<=>=;<<99<<;;<>ABBBACBFFBC@;<=>?ADEC@>?@@ABAABCCEFDBB@>?@?>=>=>@ACDB@A@BCEGLJIFCB@*ABCCABB@?@?>><=>??@@@BDCC@>>?ABCGEDBBBAA@BDB>;;>?><>@@>@?==::8p8899psrrkggedlr<<<=utniiihiifgklnmqno9pnkgfefghkiijgmhghklkjikpsqmnkfeefjmro99nlonnmhgimtwrnlmlm8of^\WVX`i666798754eg64ee::lfhcejh68f`_]Y`ghfdafcd_a684_bbgijb_a`ch567mh`ko\EDX\dmncUR9>==>8:7==8<9caehfej7564ehdWWW]fhklfbff_XY]ae`afhd[UVR2UXUWX[VWbWYUPQPVOKPJKRV`higcbcc_\XWVTQPRRRS[1255:5125iTdHC[9\Q3;<6C" -2;+4B01,*)-380)((*4"@<=-?LH9WU[^NFA46;F0J(8Q-=11TNUU:OFSXZRC9B57:4E27K9,MOf5;ňimXIQHWtH^mhN?Fssz\UJ}c/DHSbYR_o\e~xpkQiC9f>D..UFiQeNWD, 5BCHF%,,GH+pf.QD54R;NY3BFS^9:jU3L*Aq`FU,bfXk`mZr^sV]O67Q*TOOPIeNHpM_sz{e|eix?YTVZL2>E((,/L8<.+3.B&5?HG. 6,/(0/0?A&0D%$A(*RAP@/%!'H8 85&F-*J-QBKJ.VC())968;;;M7)K5-.15Z88/03MDD,E88U06I.F[55W>9++%,2[I'/?GWS>2.:7"$+?KU+/7ZQBGHw>wli;;<;=<;:<=?@CGEEEA>>n:;uv>{xfaec`^fkjlnqsooilsus;>@=>=xvy|@A|zz|??zstpnmmntBGFDA@CC@?npwvhAEE=D)Y9>@@CBx=@8?:ktr?A4BHG=;:==GHpluWUJDJ+MJPWJDHER\HYqkjhhlVd]kpGPaqcctCPYYRxnbVS^mi|UOLQTRSTTUQQORTQLRVUUYUTRSQQQxz~z~|qvrt{t~DHJLH}qkyCC?9ik9===Av5=?>UUPJKItg_gDwkNVOdxjc_\A]Zf_^dfjiWAQQPSSPSNKsggrs[YOKLGyu}tllANGFFqq~kfgml^_[__lZTKRXJNHVRRHXhh|QZ^QVROJIOLHSVXTQKCHPRP`XZXGYXUMR~ocr_P?PXY^i`Z]WUQUVVRRSU\\WYahhphUV[Z_YPPXUWV[YQUh`Z[aZYY\^[WVRRVVPJA=ERHAFHTZTSQMLMPIRPLMTQKJKIKKIJzzNMMJGJNMLKKqLGBADxZGIJD~HUIHMWMFMRMMLNAxwJLLHpw\QN[WOOdBGOFys^XlsZKZb[HUdqlKM>MMCFJCD~}ka[_YdY\N]fWMR[OWg[S__U`VXfkcehU]YQ[f[YZ^cgnnRU{Nv=OC=BB>slv=~thebid\cYZigktBAAqc_[\x?urruumizun`_`^ikxvsn`hgj`mcabgh_eksmehplfluuEC?}nltxw?zxqdehmjoed^Njoxtrngb_\Z\Y_[UTTMGGRQWS[QXYR?@KSZMNVTTNKW]`^]\MPLD>HS_^a\32]`Wb`db[`bjgcXUROPNORVab^_UROT`VONHIQNOUUSRYXT[XSW\VQSPTKSb^SQRTOOVQPP\QOPIQQQOKLPHFTNFJRRLHINVbU\b]ZOR]bdaacdYTPOOMMOOLNHFAEBC=9OHJMKFDB;FPLHJHHIEGEFIIJHE<8OVZWEFFLGJNCB:8HC\?KHGO>@AH[^VTMFHHEGBEO?MHxPFKB;PD<5b:A9=C:4AIA<>HM;=T;L2L[6=64532244679:;>:9::9;<9:;;:78<=<><;::99544553457685685gkkifb]_555hfa39AE;1N3:4---/151./0010/23364662567244513: #B$%&0*+)Q'HC@=@7331.()''&'),/0-+)*)+-.12213202010./23442010341-..J-+**+.1/00/001552354683./0013556787545997652100102459 !} !! !" ! ""! !! !!  !!"$#!      !""! !#!  !! !"" 52899:6653258:;7444333234577978753221222433216535665676564111258965566642346:<:8653240--**+/2./.-0.0-.20-,,*&).//.-0.0.,*,,/00-+,,-.0.(/2+)).12.("---,*,/+-+&'&(,,--,+-.*&(**,*,..-(&'$&(&'()''.&((%'%)%$)'%'(-000/-/.,*)))'&%%%&&(&##(!   ! !  +  "*! +    +      -+'$*#  +    +  !+4(7(%J! + $/,*)% -131'D6'!$2AQ?.34B"6-&%" /0.6/!0(7)7/4& + ,' + "($#B8 GC(8O& +"4) =>>AB??;>@@>!"! @D"CD#""@ BCCDHHEHGDIHEEDBBBFHKLMEADGGIJIHHJFH&&&D?:>>@?@?A@@CAB!!!CEGH%&IHGH%%FADB?>??A"E#$(,*(&$%$""??EC:$'% ")!!%'E!!1:66!  1G7J@E>98--24*##&-%-;968:?-41:(,-+&).,%#&*-.//,*+..-+/31011*"=A;=:6.-8D%,350]YY[WTTUSQFF=72+(185ER]`_c52^\_^TXaZVYZXSSTOP,00/0002/1\X.031.36547321322/TKDEKTTIGLIDDADNRPMLJA;B%()*(MKIIFF>;?$#022,..**'G:0'1"91"'&6B;2)'$!25@<:;;@>1!FP4-.1200,-OKTUF<8=QJF64-,,)KIPSQMH?JC;//$+(()POACK>=>*)))'DFJPNP+.-SWJ9)&##E&D<2&**%A'/'',2*%),)))*"?=(*+)I?LIB-%&1,$#3%(,&B@4/=;;<<>?B=@;=8<0@=9:<;BI92/:@::1-,(*;2(0E7-+&--($.$'5(!"! :6;@=7525-+3-.969<" !61--->!::;=>97A?:314158=?::26673;7459;69:=:8:>;9:?= @=><20286:41/#79@==:731.-.-0-+)+&##'')&)"$'' %+0((-**&"&'+--.&&%!#'&*'%)'/.00+,-22/)(&%&$&'(-/+.(&%)3.)%""%$$'((&+*&*)&(,('(%*$'/,'&&(%%*'&&.&%'!'((%#$'"!)&"$'(%!"%'/&*.-+$%,/0.,-/+)'&%%$%%$%"!! !&!#$$!! &$"$""#!""!#"#"#(++f!"$!$& ! , &#"&"+-((# #"!&#!& %%/ !!&$ &367420--01,ʀ ~~}}~}~}~~ ~~~}|}~}~}~}|}}}~~}}}|}}|}}~~~~}}~~}~~~}|}~~~~ }}~~~~}~}~}~~~} ~}~~}~~~~~~~~}~ ~~~~~~}~~~}}~~~~~~~~~~}~~+~~~}}~~~ ~}~~}~ +~~}~~~}~~ +}}~߀  +~}~܁׀ɀ 񈎂愎􇆌Ԉ鄆սԼނÿ¡󀴛ܡ؛˻Ά℀ɩɎΌȽ̰ѩ҇µӨ貳㋀◖ɅЮﰝԝܢц蠋ֹӪܐŲۺŻ퀆춧ۢʂҺ짚块ͷĊ稶±”ʅٚㇿҼìĔ퇥҄ݟ‹ˉѢјűƞ捌Ƨۅ̯ˆ̑ϴ˱璉삉첪㷯ٺ͒綳ݸˑϴƀÝޥ݉ϱǒЀ̞ㅕꉁӢ̏ԟӞ샕牅ں탉Ѽȸ׋ȸ¾Ş󁂃ɪ܇޶Äݵфɞַꄔ񍖖󒓙÷腇ȹ튌˸˶َðœ펞닅ٶ򀍓ڽǣӴ̋Ѳǿ›ö〢틜ſηʢǚüɵǴ黸ɼ´̷ɾ҉Ϳɱûݶ̰®˳ƹɼŷ뀀½ǷŽ𼦨DzŹѪļ톑ߍW觎􁄀89:5fchjki:;;;77:<<6:<<7ieabbccfhjkibbbhpnkjkkhcfr={xnzKMD~{FGmkpmqi_ZVSQV[Z\^f]`_XSTXYZ^ilgefe_dggjjlk`cpvi_def78k_`67<>@@=:6wc_bc`ZYW[\[YZ_s@=9jlloiflf\[^`_cgkkoqpkdjpo989qnjjfilmnonoq:9:9:A?=??;9;9<=;89>@;9r;;::<=?DGE@==<::=>?@>?><<>??>;=>@?==AA@?@??@>=???AGILJGHHKGBABAABBA@AA@AAB???AAA@??AAABBB?===@CFIIGFCB@@AC@@BA=;;<<=??>=@<;?=;<:9987lm89qonkhgityA;<>99747646898866b^gf`^ecadeceX]][ZVVNWe\YXUSUTUVi_VUX_^Z[XY`^bfbWVWUUUSP LNPYa4:220/`^ZPEgoQkC;Q+3#,V:;7ZF946JGSMB8.-.++) L>L)2<F/3<4<;+:-%%@E>(-6,07J713*"C72@= PJ9\K$!J9g_S1/.-:;)2{gvKTGve{}x`}h]`#:b*((B;%,/.*((,.2252230*B\C@[NoE)QM4%:h1KCWNO'*+=(5*$7HWwINFRCMjuyk^oll_BW1/-LJAF.9*.88:)14V*(7.@8:E>$4)3MC1/POS/2M8::67?28#$7;19;GONL_96*,50&.<(E<4@G;>DHQTxB1NP-@5A2X5IV9:'K*8XOY98651`5SPRWDRhbb7]`2a183XTWTSX]f5cb]^^cecece59;9ilidg6:6\ab68869:82dZZ[JUROS\_cmk[WWONK8Y=CXJJKLQUUYQNPSSQRW[\XWXXSQPPMRTVVW^hhc^_Z_hifc`^\]UU[b`a^]\_bceillkl9qn8:7[bZBAJCEPPTVab`cjqw|{pnppqnln:=trlhkq;;;<;sor<@?@C7AAA@=;=>=yuwge[`]a`Ycjlnpoqtrsno;;=AED<:>wu;xvuqpwosxvzyzy|{~~|@>>|>??qlum@@@AA@@w;w<:=wusvwxwxxrpwsrp{DAz|?>=>xxyw>???AA>>A}~|>?GEvR>Y<@@;ZJa:BEQ?=;A;lhnYrbYmz|=>>AB@@CDGDFG|FEH}w|zCIHG|GLLOLIG~two}NLKJJMJNNSW]accaabjibSPPORPOSSTUSUUX[^ZXYZ\YZZ[ZXUSQPSOURUYXZWWVUOLA^vNPNJGFIJMJPWUWbSKCPVZXY[VTUW]XNWSLgECAs;BDK\QOyl\mmfc[evfbWHRSSSUY][YTSSOQSOJJrspnlqv~~GIC}}|vv||~{wtb_ah;p6?DB@CKUVPNDAwzyygmBMVJKMstrhkgedafggiqnkmjjnmOkwwqzovzsv{x{tchhikuaUbb^1^`J\aLfB]T24g`U^`[ad4ine_WPFATRWU`XbVPNV`^JLQTNPIGKORS_Z`ZWYZWUQMTOP[]USSVMHLSSS\USWPQSPNNNQPKRHECIKMCHSOVd^\YWJR]_W\45`]VUTQPMNMKKGHDDA@=>CEHLLHDB>BGIHPHHJCLDINKQOL>IIWYlLBDD?=L8C5CTKEI@@NOMEEFEDBEJXAGPKBCFIIFDE=<7Y6;7>4>@E@=;766446858?>.>=88;:;<:;:><;;==89:<;98755655gcd4e7h356hhebhfbdd`585ea3/367af67L/.133143/10./026860023664678522;!BA;D()%HER%$F:7:641-,+*)+.2..0,(())+,122353-.02433624;?7/1//3--.+.0.+**-.,,.0:#455874871/00.1485454416:96434146677446!27 !%$  &   $&'%! !  !!"!   !"##"# !" !!668985455;?93212223433023154201321232234313631016984576654468545535654435634433488:6020-+&()),.0+//.3/--+*++*+,/-+,.0-*%++,(#'+01+)/&$+,/,$#&./!&*+.&%($&(/&',2,*0.)(-+*+,,-&)*()&&!%-&&('%'')(1.'&',-*)*+0--00'')''&'&#$$%'$#!%(- !  !# ""!      +&-  )%-  + +     20 +!*"8%'     $"#(-N;+7. =C%  +  $%+1"&-/'++/;!) QC?61(&'*'#"(+&     + ! &%  B/72$ (*")[E6 + + !#     + + +   +   +    "! "&% "  !#*'''+(0**%()'(++)((***.,,*,++-./--/1/+.,..-('(!))),12384++,))'-!#/'*+)+,.0+)+---.1230/./.+++)--/0029964435;;854424+*-446444698::<=== >:)1+ ($%-,/17756;AHLOIB@AAA<<>"#A=:8;>!!!""A@B"$$$%##""!!"#"EAA8:56012,5>@>??BBB@<<!%$"AA"##;ADDAAA>@E"#$FCB@?EACFEGEGGIHIKIF$$$F%%%<898"#%%$$$B"C! !BCCDDFFFGCCGCA@E(%EF%$$$FFFB"#""#$""%JMK&&**<+&!! ""F@#% #%!2,+81A?<4%9+)##%+ !$ 989*8-$5",2.+'%"@B""#$%""&&)'IN**OMKPPQTW,,,QFADF',.,NQKP+//1/-W,VPKKJ@OVWTUW\10.UTWY-.X^1`\\]]/1279<3=:20+2?69S]Z[`7hYRYRMOZ`a^^VKHPLIK(QPSPOMNR`532347:972200110a]YSNIR*,H?>H>=6+39,2444/2YKGQR?00G233.,,+(NINRPP*DC(B?:%+)*+,QHAFM=C=;69;8?H>/.26443/(-035*:?>-83*(&/*,),-*'17<5.H)G*/052,/LT0264XJGJYQEORBAQ;&0A<:;=556141/,0/.18A3166170%%,;4/.)23130=>;:743430285611/1522.)''+)%%*0/--**+,-)*.++-/.+++)*,*)%"35/.%B#KO*NR,+/+TONSB!&! :'A(('()I'++(*-/%&++$F'@6#;)%&'MHJC8! !#+:#'*J@5/1B=,3C78-(7=8((%(#!$$##@8>193862.389B?:3,3-'*88<-0=;657.&% (+,,,.179)+1+;<;=35!(-(J+,OJOG??>9<:8758889=<;;:;=<+:AB>C4879;A1(+(%%'%(()&(*)!#!@A !$BA<=:?1%*-0*,**0..*.0-+,11-54/9C77=8;-%5/%.&,/>GDJE;286:B=C@B7/'22C80/*,+$$-=?//80.&*+,,)"(&!!@935 @>BC95.'+*1>86!A;>A=968.89=9B28=7:;79865.9).39/8#@8891="")"&A<9@ !DFHB9135AC31/5"<@B?<13322..+-/0,*'%'%$')%%"&$-/.)&')(&)-..",.0+$*..*"0-',-+.0361/*% ('+*0).*%%*02%$%($&! "%'%.),*(*,+)'$*&%*-)'%'# #(().*(*&'('%%$'(#'#"!#$& (%(3-,*,"'./)-.-,++'&$$$##!!  !"%%#! !"!(""% & !%#'%""!()2"! "! !"! )"!$$#" !"  "+ %$!"!! !,2'%!!1-.-0222.32./.,1,*.ˀ~~}~}}~~~~}~~ ~~}|}~}|}|}~~}|}}|~~}~ ~}~~}~}~~}}~}~~~~~ ~~~}~~~~}}~~}}}~~}}~~~~~~~~~~~~~~~}}~~}}~~~~~~~ ~}~#~~~~~~~~~}~~~~~~ +}}~ ŀ +~}~~ڀʀ + 샋º捤y󁄄򂅄ŹϾ焀ΩΈŪȰƻȿ򀈀ƀͼюЫͬΤöǒ٫֧ƲIJŠޢϱ坬ӧşʍ팾ڝĈؿʓ̉󓰥Т𺢿񆃥ާ䗌ҿƨƁӊ鏌﫲⒇炟񃄿̂ےٴ݅LJ׾ςذܞړڻɖцׅ٬ҵҴЎǓ⵽ͻѢξЇ݊ݛݖʊã쁰ۣԞ􀑤鼵慇ǙثĵώԂǏŪɚいձ쬻܋⁚܈錘􀃂̀ƿռΚŤՀ掊􀃇ꥧǀ𓨥넝ŊŦ쉻񀇄ފɀ󉗜µǿͰ舋Ӆ᡿ŮԾȳä­䅔ݭӭųƀüҾ懅ˤľ½ǾʹǮʽռЋű˻ƲƀͿɾ¿ԶϹ؀탄иȷúрʹžÿѿƾŲĵ͉䦨➔i9:;:7ifcbgk877il7865558:9migfcfgfhhgcffihegiggebdlppsswBHzzA{oocdhdabZUPR\[_]ca[_jjgdb[]]_^^aeaacbek78kl:HF<69<=<<<>=sqq>>=:;;AD?C@=<;><9:<;<=<=>@BABBCBCCA@>==??<=?A@@A?@A?;::=?CDEHGJFFECBCBCDDCAAB@8ADCA??@AB@??BB@>?>><:::>FHE@==;:?>;;:9:99;<;;;pmojlorw=;qjfgigeejjiihiggfdabdegimmmpmkklikoo9:;:s9::ss;wst;:88ljkmlggiheeehliccfjkije]YY\[[e4778889899:;;9857leggbf6887:=7d`_[XQZ]YM`57656jfece`TGV>gQ`dj68kkniX]l7cgnNFGJXYQXIPIKXb[``UIWVNQW^USe8:?8544ge5:4a_^\gjdadc\ZY]d3=8[`c]Y[]YWZ\]^afaVOSU]]flagcb[VTSSRRTVTXWOPU\\^]^b54aRkAWK=820SP6:NW\LDW[]K66::?UX@$ D$$6$|9*H7;<8:gJW>B6KN:5B2T..;#*7NV:&,KAVA5Q74PM6)$@XEKLVy~b/\X0VEIw/5d[A/"+7*:10('($;'$:4)XqIkPO^EqE\{W?(CvZM.)$&.7780-B7\Fb0tataZWgYXa2NE*3>%[FCP/D9**:8)$"C,)2OI5EIHNN[L!/.X0,.,*=%&?6B7Q?DW`AM8BJ6(-@NS-JX??=,:CNMTV/10P@N24+9K+26=9106O32VHL^SG.-;=?=A6B0KKQ034+5+4TC\OWNE]`005792ZVVRSWZ[]]`14232`a2e4^bhib^]``ca`db_bd`[]am:;<<88:<9lh_XVO3;=<=<=;]R`_Wj^[becROZWSRR_WAADDFEBEOKHLLNSVZ]`][\\XXWVVRPRQRXZYZ^^ZZXYUTU[[\Y[\ARTV`dgedcfeeginnnmv;r:jfcXJQDJGHNVVYajiceiprmlgkijpmkmk[jhiecjtx==:silios=CD@???@B@>>>?{qrplgccmfcceddjfdfkuxqho>A@>B>>==AB=poquzzytz}~A@{{>|~~xxuvrsv?@?EDGIFBB??:8%J[RQA=qzB==@<;kf:=@KKHB}=~|>A@?AEFJJIGJIFF~}~y|y~B~LO~|wONKIHILKPQSW\]]ZYZXSSPPSR}uzMORTX\[Z\]_a[YYUZ\YXVVXVWUTRQQTRRQKKNMMKJOOKC@nj;f?GILNRLMOSXWW\UVRONUKHU[^ZVRMKJHMSVOHx|ukpndSWffky||v{NNNvmvtNQOPQQOuCY_V`i{xt|}?@@:jiklptuspuudh6ef9<>ehFCHGMLHDMPQNJMLB|{OE}HEIjUG:AJQetALyfXU^jdP\gYQEQ\C@BFIXbvkCKFIG|pyx]r[_qsrpminfhXOMac\Wevdhla_aXZ^`_[ZYbgcfilrHAqqywy{GLNNKIxqojea]d^hb`imrkbemnq{zwrqstx{vtqske\kgkpcagb__[\b;;KOVKKMLBagGBBH?tAwrifaJDZUQSIRNONPNUSSUfe`^be`d_bdijmcb^[_|~zw||wnk\XfnsxnmjmeXLP_~i\]XWSHMNbAlY`mcdfqpgUAAIYICvqjBvyA=xy~vql\YTeprkuyBB~|orqkcho@?yzqildTlxqzehjmhnklpmo\[jS\Ys[Zh~puwplwGzHIF@}{?{zzxc]]gm\gicjqmnyudaY^_`d]ZY`b_ZRQSMNOPOSOPPRQRKEMKOSV`]JORV`a\PGGJITR[N/45^a_Y\548ghegaWJHGMIORTg]QGKLNCPTURVOIROSMWQM[]b_^VRNSOT[[VZZXRNMRTSSWTTQWOJIZTNJJLLHBEOKFGQOK^^^VRSZ\THXahk\TRS[TPRUPNKJFFEC=AEEEKLLHEFGDGCKJILEGDLNIQENNRQUPRQKC=>?D;ANFKK6?D29RJJIF;IHHFGAA@FFHO=AKJBE=HLMKC@@>9578;8:@S==02XA;>@FB@;;8659;76;:;:<:;:<889:<;86656!3bg374457jdccggbdgb`eg5hh5d_aaci7232//14036542134354413343134342028:=AA@#(FDCJ#@::100..0,*((-.0-/1..561/.+++.//141//1356761/114230)+# d./022/.3721024:646566741/2752561231342378313554567599:76 "  h   !!!#"#   "$$" !  !"  " !" e8897789<653442234312346532432123332565655453466788<;:6457744553345861011001/-++--,/2010,+.,,,+(..,%,-+,..,'!*/$.-,/-/.%*2-/3$!!','+#'$%*.(()%"*%#%'*%"*.,**)(-/,+-,'''(+&*,)'**(''(*+-01+&(),,.3.210,'&q$$#%$!!"&$$##&")!#$!# !""  ' +  -* %    + %$ +/  ) +  "  +  ")+'%#(TE$*N6"     "6!*U/$L)@$17 - +*4d + +,/- *!')#/'9/   %   + <  ! + /#-%!!&<'6$' + +'          + + +      +       +  +    ""( %'((**,,-..,,((+*-22.-,-*,,-.//00.,./1330,+$B($+)%2-,020(&,,**+3,#%&&(&%%*%%''*-.1364321///./,*+,-.0125511010..1U2 +,.568876:98;<@?@>C!=1/.'#($('(,1128==8:=CC?>;>;<@==>;2=:977>@A@BB@ADA??AE?57 @REFDGKM((JEE45$##"?()*)'&(" !# !%:(&$#&$1C1>>;=$"-3*&$ 8?$!!" 86!"**(%FG#HF$%()--,*,+*)OMLKJJFJILLOQNO)QLKPMUSMP/2USPKNRSTUROKY[W\Z]10-VVXZ-,TV.1b]]_]^02248<=>;:98562255a]VLFHPVUTQUV\/0235988:9;<9763696733666553003343123,*,***(*)'" 225!%((*,(,,.203844.+*/)'1454/,('%"$)-,(HKLHBGSSONA:=:2(+435ABDJNEHWWQPSMHEHU\UZ[]0/,>9?QOMH@QONU^ceZ/0/00TT0a0]PZYTTUTJC> 36,18DGF@?HJFGDB? "#548=?BA>:?>10*,(*.++*20-) )-)?%I;.&(6%D/('&$&'%**)37::;;:,+95340+TVRLJOPF;9F+132.)1*KJNSSMNHLTDLN)*)))QPHLGIKA@;9@ICGO@;>79<9840/*-352:O06.)/-0/-(N)*..8965ER2NOU/6UPSL43]6[MLKKFDPQGJM&0%): 5A722776.1-++.676227213673.(,/*0,4302688C:8433552071.211642/.,*'F&,/01/.-%)%'+/.*)+,,-,-)(,+.*E(4120%!F)++P*,+*NNHQUG,2&#&%+,JH(G$*--*(*)#BB,$@CD(%L*NJHJ4% $3?$*GB9205;8,4<3.&/5$#!$$*1>7$*%&%A:DJE0B15??>;:7;79/)$68418A6:>645---.,(')043767:&!:8=<=?%)))B)(OLPGB==:752639538:>958=<@DBA??>>AB?>;=973<79>300,(&$$'%&+%')((2%#"$ ;"C=;654%"1-,,'-*+*,)0/.-75406737269<>>75202><;=FHF?=4/6<=>:;:<7.&%.C632/0.&((3"8.1920-340#&,%"B?<3":=! ??C?;7.-)5;=8<<""DIC:=<:479!!@C>;>:/:A8A27:<89H:9>>?618.2/>0-5B;@A<7?D&B&%# ==!BABCE?40/5:-/.-7=9:@=23.2112.--230-*)+&'&'&*()*,**(!'%&))/."&'*00,&!!#!%$) +--*+2312.*#" $#()'3.&!#$%''(&($!'%)%*&",-//0*'$(%'--*++*&"#'*)(+((&,'$"-)%##$$%!"(%!!&($/,-*('*+("+.28.*((-)&')&$"#!"!  !! $%#"!!! ##"% $%"'#$&&(%#$#  $ !$"("#""#! " !%#"!"#$*$  $.1200033/03/-.00/,)++.2 +~~}~~}}}|}~}|}~|}~~}~ ~~~}~~}~} ~~~}}}~~~~~}~~} }~~~~~~~}~}~~~ ~~~}~~ ~~~~~~~~}}~~~}~~~}~~~~~~}~~~~~~ + +}~~~~ ~~܀}~~ ̀ˀπ 􀄆邁၇Ӻż뇄󄀀淛̀Ļӡ羡뻚݂Ѣ־ٸ뀍՘մÚѧǀސѝؑѺƉ򷖞Ň뻜͠ڤ̙ԭс㌎Ɲ㣷Ǫ޹ؒɏ輁ЎӃȾ䑥׆拟ʆ٢Ț׊ϰ딄dz«Ϊ׷ۤ帗ʹЙӪ퉫个áNjϠĘЎĔɊꞅ͗붾㈾À҈栾Ϗ̳Ƙ⪷ŭ܃Ӫ􀂇򂊐úſخɾlûڲΎАئ騹턇񁊓ꐞǺ÷෢佲ډ􇙝ɽŅꞵф򂌎ꄆ¹ζҲάű»ϷǿȺ΀÷˿󎇒Ϳø̻Ƽ½򘮜ſɮÿ酉Ƚހ¿ށȹŻ¶ÿسԲ»ĿрŽǿҽǾûȲīøðߤٲw㓏efgi9;:8leehdhlifgh5687j6;=>7fdega`a_eldigc_`bieiifdhilppBCwqmqrme`^]^eb[YWR\ada`cfeceflmhmd][WV[\Y^]b765j4ffjfbmgeecjgWb788978::;:9787ejppokkieghgdipligljgb`kiddkp9;Avphhabhdehiipngigikikpmloiln899:??><;<>=AA>><<>;9;;?>=?=;<;<<==;<<;:9::rnm9=>>>=>?=?ABBBC6BCA?@>>>;=?>??@@BCC?=<<<@ABLVJ@ACDAACGGCDDCA@ABAB@ADEBADBA?>?BBA?@ADDA@BCDDEB=;<>>;;<=>truvpllprmjghfgkpprplmnolkmjieeefjlo77lmopqtpq9qtsqrs:;:rsu=>8h@8emh9:o47574`__abde642_[\23cfieigdjlg_bbaPFGT]QSYZh8neeea][[VUTPJJKMQRXZY]3343`^WDbM@5UTA7P3a``bURZK;8eZGfWI=6)..3.9NSM8DJGLR,21[TORX`VT/27940Q8Z/..WSQOFG797.7/35?H/<@M("%(& (%,+('8BF+OHNUC&&'&"E1Y3-0(?R1Lg}`zbw}>/.+),=-///0XXO-+OGQN6=J1&)-1=5G;?*60/+"6'&%;!"A;/$19/?=[2#?e6H7($(414?@'7=#3VE0>?MR2DPT1_D!9FBYyCLcTPJ9G-PSm'%I#S90;G@/ &*..'!+;'?jhF%c) )9=\K<'4;1l"' %+4*E@;>14$a+2hXq}zmPzG\B<42=O;0H,DJF9=QW%&O>=LLH7979Y?Y:5N*/L5./1U/)5*,29G+)*088H1D7-0,;.9L58342.P?A+ '$ED&8K<4P<<;;;BA>?>wuqtxsi6;;:<;nhjefipqrttv@AA|z}y=?D>DAADFGBADECA=U;>.]jffV?bvuqnqpuromoprsqqrifein;>5LW]g8;tnnovor}wvBTFFAAAGKEGDEEIHB>AGFINTWZYJ?BA?rzLcYMCM4;BBHJRQOMGA=yxz{>?<<@~}{~FHEHF}z~zwx}xxzFEJRQIGHLz{wNNNLMMPVYWPMLLSTQRyQU[WXX[bd\TTSUQOTXTRRMQQUTUUTRPNPQOPMMNLJRWTPPRIHEGIa{}OWQSKJJXZTLROOPRXY_PCQVTZ[[\]\^YRLAEJBszvr~}ikccjc`r`aks|}zooRuhwb^jqh]qymg`dr}|=>;gjnnf\ZR[`][[7qii_ZZROKJLUXQSRQQJGILJS[XUQUOSSW^i`M>JMK@>8>?MNT]??YE@O?QIHFA;@;59;8>;hZR983_?AA==@8<=3U.;Gc;>BB;75439;88<<;;9=<99:;<<===;9889;=;;:98979546532hhhfccehhdjmmidgech_`aa95__a_`d2200322636544213323300//260221/.062433379:<;##A?<;;93.-++//-++'-12.-/3323111/0.-.-,.-*-/13203204001/31'-.W256754424443587655441/442023!<;66105433568734567559877567766    !! !'.# !!u #%"    !!479:==:67:;86543133456478765565556443345557778977776-9:: 7512564324323337:620,/.,.-,-/..// /,-($)/.((*.-+.,-./1,*-1-)/1/.-**..)'*/1,#"$(4--/++**++&('..+)1-("").,,1/1))()*,-+'&*.0,,,(--+)+,,'$$+0'(+*05001.,**'&'%#"#$&&('$$## $! $%#"#$"$  "     { + +   +  &$2>0S:-5K@R-=$  +   + + +   # '    + + " (* (2?  / +   '+" +9S !  9v  + +  + (%B)#," **1" + +("      +!/7 43),  +  + # !)6       +     +    +        +!!  %#!!''*+)&'('()()-.,-'(')+-*844368;;2,.,.11-&-.00.52/--,..-.*$'#!#!"('~%'+141..0021112+--,++,(&%+/+*,---./.0031032611257:88@?=<5==B?>A@.-+60'-0,-020857336=<8898:87??@CBAD?;=?? %*0 BDFFIDGQIFO+2(($%'*/,-*)'(&!"$('*/3354' !!54'F6GD<8 "$(8!"<7: "%%''-.++($!BDGG#%""$GGIJM+X,),+POKILKGDFLIIJO*QMOS+163/../ZKTQKIRXWYWSVUWUSRT[\WTUUTVOVQR\__21343438984222[X`f7723YTQOKQORPTRZ26:688:>>722242056200.223466210/0100-,.-,/21-,,&'$%'/==-3-,&&'22.*/,..165:.#.2158764562+$ %!;CHCCHD8:25:31A4159AC@EEA::NZVVQJHNX^TMX[`b0YGKNL>7CNYXTZ][[W[RGPOU[]ba^UUSRSQGD@.3<=6-:=73/0;GED 74.($-58;984382+/-,,9'2553)%&-5/+"-"=6/97*28/""%&,'(-089=:<;0"1&25.(OQKCQ[TJD?J310310-6KCINKPKKIMD=URMS)(KQIFPD@?==46:?=1++>C<=::>5/0898/*(1.N.50-/.-)K*1/299B6L--IQWXUOINO0SW21RQJGCHNGEKM:<.78@9826760Q.,-Q0;78499/22686113.,01202466544766543-122(<:65//-*'IHF-38,-//*))$)1/*))**)(+-),,.,CH(660-%&).,Q)MOQIMQO/QF*+2DJH()))F&+*),/.'&-'AH@%&HCD*+NHKJEC+$"$.E&G>92/,1?1*+62-#-)/)$)$/--2@*&((@A+JH4D.DD@@AB>>:974*32-.CB8237734632./64/#+539!8'"8@"$&*''?$))&F;<60+'//)/."(,,+-*4+:61394;9306564+5:796)"+-*##CA=9#:7A7>#D"$@=;;C@6769!@?J;992-;<6A6<635=A;=>8;9;,0021/2?%7=GO.3*HA: #!!@A@!CC>9:641)(&!;" 748960/),-,,,:440..)'%$%+.))(((%#$'%(-*)&)&))+.4.% %%$$'()+)&-5010-)%!% %#).+""#%$"%$$,+'%#%&&&%'),+-**'.()../+))++)*('%)'(*-(&(*&%!"!"#!#%!&"%")&,-)(*&""(' /1)'")*(++*&'%##!$"&& ! !!)!#!"#%"%&$!#"!!! #""& ""#$##$'/,%'# 5.&- 7 010.010577512112++.-$)-./1  ~~~ ~}|{{{||}}~~~~}| }}~}~}}}~~~}}|}~~}}~~~}}~~} ~}}~~}}~ ~}}~~~}~~~~~~}}~~}~}|}~ }~~~} ~~}}}~~}~}~}~~~}~~~~}~~~~~}}~~~}~}~}~~ ~~ ~~~~~~~~~}~~~ ڀ} +~~ +Ԁπ 䄒恊U׾ـɶ޶؀ֿ멜¿ȩŅĮś溚ۂ󄇂˷ʘҬÍĺ¹㽔д윖򚆁ňҟ≈܉ձ̶苐¦؋꜠֋⍠񰋼Ոз¸ƈ䆎ֻ޴åŐ都שޛٯ׵ǜ›؂Üϧ–ƿ؄˧ᐃ뀷ъ̷˛ūՓܓӁϙĥȇό煊΢ȆŰ⒀Ő݉ճ—֗نՐ܏۽ߞ񋙎힗׺ʦ₍Ǟ񄕖ǿʿ߾Ľ񂇆󂈊񚜷􇑔زʂͨºκׁǿŹй煁态Ꟊ݅ʿኗˀĹ錂َŻꌜ􁐄ށ쇟ӾҹIJ¾ͼg∓Ŀ܀μ¹ƯȿɺųױԀ򄋂䶩õѹ̺侸½̺ҨƷƷվκ¿üŀƴý˲ľȽɽıӪ©>lfcb\\\XYTV_dggfhfcdl<8ji7?AgX^3997:93f`e897888nhgm888qlmljjhjk7ieaYW]a`dfhghda\bbcedfgfhe=ilkhfefhijjiop;99;<;:<@@A@@>:9<>>B=<>>??@AABA@?=<::?HMPI@?BBBEGHFDDEEDDC)EHIIHECBA?>?ABDCCCB@ADCFHMIGDA@>>=<<>?>=;:<;;<==?<99879;<;<<>;rrqpqolpopomqsqr9;>=;nonnrnnjjjiijlppkmomnnqrsomnqss:99qprpqomjkkkjeecbbacabdn;mff764db`\[\_bcbb245556665598666555767;7c7856hibV[VTRUWg9::<=93ccdccc]XVPP^78:>:h7j\TNSQj>jd[T_om`RY6765656`\m<:557hhYQSea_\ZjA=JR78:k552dcd`e9ibff4dlnjh5<>FFGDkfihONLHSTVVW]gg]Z^dccf_YXYWSQTSUUY\6753210daREA_T\/F/576553344_QHNQH8lSBXP<+:PL0S8FFGNS./.XRV.132.R9Q5UZ'@B+.0//1PWEI=52+5*.NE;+*)!!/"5.0$"20*%,:BD;-#'G@&//22NhI2VT*%;%KFD[=>AIIFKPRB$':>).0--1.E/E=()B:G,7*&.3!9$*DP+$'( $#('*850<72&@.E#3E35E1#HK+?5-;'L4#I0*D2C :%9O2+#AHBT6W3-DQCWg7EKQhsI,TOjC/8pA77A8`:V@/ #&+$a+! %'7>EErj+1&'1%%DC<>#:aDd]pS}]Ls]WCJ?&+7'?474""'Nb7@I6:+#$4I7D6>9&/PQS+P-)6R/-(4,dZTc9"7=:'>wgdowT@hC8KGS^JQ_e_Pyge\qkv\n}OzZH;CB*+L@9>?AM?*=,$C3)/6'(ZA1-6!E,22154;E5),'@%*,+EC<-1H<52/)H&8)&H//':&40K4H)6?/%&+<+'::3/.0XG/,$(*7">AL(9>;53L+0.,-1`c:-&AK.K2T366\90;FMF=BCANX/1>/-=7;97/,1-*-*PM+0477RB4*?:T4`X155/120.ZZQJ]b_WLNPPPOX`^TS\_b5cb`Z]2ab14215864da`11353if_^fpv|}978:9:88mbZZYT[ai69:<<97f_N`e^XSYWXZWUWYTPQJH;;>>CFIINSTUXRNOQSTRV_YVUUKQRMMTWSTWZ[[]ca__`d`^]XX[cc_bdcgffehmpnrnkpqmrl>7eUKdUQOOPTU;SW\]W]a^_\b`befkniikmkbbmjot@w:=;;=ut>ADB@CCBCBB><=utrqki9<<9qsu=sp:rrjD,GJy>mztsvutvstuvsqnlihfffgf`_dq;CChRTV]lnooovHYyumzDB?DJJFEGGONGA?AADGIKPONNQUQQSIFUo_VMF=(E]<;jmp;=DGFEEEA@>qurmhon[`VW~lusxyy~{~xquux~}~JHHI|yvwxxLMKLLMONRPRSTWY\^_^WRNLNPONPQQTSSRRQPMJKOOLLOPZ[^YSGEKIF@=y}{DANLEAFLRQGJHMSPLTRPQSDQXV^b]\U`jhbaWIA?~cJhtwxog`a\c]kD}rzwjd`^Zg|v~|{t|y~zys`Y8S[f<9h`ed>BA?oaf6g\Zaqwywrlikd_lADFC@xonpmh\SSVOYRLOUUVXYaXab]`^VushX[RVejdh^adusj^bffb^lnmjkfWMRX`WXRnTSQUPUTQNE\9iVbBuwvmeqCOLMJIB{uz{or{kt@ys{wle``\]hdtAEAxojhmk]k=rrvZTWWFTdoxy{kjeq|xmj_`Y\VagcogamiWpzHONIruykkssps[RZ[TLO\5:;n_ZUTTMLLMW\TRQNALIIMQQSTRQYKHRf7\HABEHD9\W^bX^Y587idd5d`ZURVTMHJFHTJFRUPNSPOVVSONaUNNMOSY_^WTS^Z`]Ya`[WXcg_^VQTWVZUSX^YLJHHEEHHCADEHFEDFKT^UWbZTHNPfcUNGJUTYTQMNQONMKIE==FQGTRIIEEDHJAHGLQNXIGCE>AQKVVSTNJFCB>BMKRLLDBA>=7EBHF4AFHMD92:?HVY\ABPA?JNJH=DHD@9B>ECA:4238=9:?=<;:==:::;<;<<=<;:999:<;98899;;8666556ifgfgfcfgiijebbbggec_c<2`hfcb2003396741453120/00101634.1322113752259976486742/+*+*+*,,.361-,.-,./12002/./,,**.224323//2//0(+;3-/5346667976467521-+-/.0122310-000113446411369854H356378 88866788   ! !$&'# !!! <"%&$#!  !" ! ! !!$"!9:87:68786665886655544465664454664785236897448997897875341m22112740///-+,-.0/.0--/+',)(&)+/++,,-.*()&'.+0*%"&'3/-('-21+$),*2..($&.++''1!&(/*)*)+-)-.+-012! "0./0$')%*++))-12-+-20.0,((()'%('((('%#! #&   "" ! + +  +    + 8   + "7$<94 $  + + +      + + + +  +   +     %"7- !- B 1!  +4 N> +   !A2"=$5$$5,$+  +  ) "  " *(&0  "Yk6+ "#2  +!*!  + +                  +   $%%!&)*($%&'&$),+%'-.-++)%'**)((34348=BFD@63121.0232.#+0/,*..010/01-*+%% #$%$)...0,)+-.-,/3/.,,'**()-/,.01114542247454011663587989:q>7 1)$5---+,/1 026636:77598987:<:;<>>99B?AD&E!"$#"!!"AB"$%%$&&%%$#! !@@@<31>@A"@= DFCACF&%$#"#"#"$!&'&%&''()'$ $#!"!?AKK%#BCEDD$$#$#%#$$%&%BA>'&&=!;EBBDBDECDCC@??><;;:68=B !.#$',5!!&((&%'%$";>==:@>//)*8BBDBCNMJHORPRRPMLIDAEDHMMFGLOQROONY.-URSX./TKJIIHHMOOQOOQTUUWYWTSOMPV^[USV[`12//123i^V]38kfb]\[ZZXZ]^e^a222379<=><40.-/000122344510331/-+,//,-//6882/&%*(& ;<<"#-*&#'+-,(*(+/.,20...$.339?:719@?97.% =/#29?@J:70.,4-9&B:A?5/1/,5OUPQPGCINSQUUQLNOIKIHECKQS]aZWV^ZPTNG]XXURYVWRLJGKJB>8/+*.30-22"$#!5.22++0:??>;5//**0 (,146/--"%20+N=.AB7/:1)/.*#$&*&(417>;54/!-44*TZXS.1YIDD"385882.1*CIONIHILTH:ONMBGRQO+G>ICC@;<4JG==<<<7=IG@69*2--31,*--/1-+/134585-S^.TPJCOPJGEIR3`aTKHA?CGRW(!>+<:4:88<7434/G23/28628695045;:*#4@5/0220355214245530/(-409>;83-.+$DLP&2..//-),+((/0*D&,,(((+++,,1RD,530,HI'/)(J-OKLGLLQUKDI#!#LL?(-)JJC(32,)0(%-*E=F$*&G>G(O)LON@83)"&% 6CD=<721,57)&*)/+'/)&-'",22/:?"@%#$DGM=:;G@?AEB??<:595,;88QC959C;9>%*''$'&CC=>CED<79:970089<<=:>B87;;<>::?<:6388785:><854562.)'$4-/(*,'('%$: "%#"@:8896.*-.(1,''*+.016067542.CA904/2:;79368@@<47:;74<><7"@=A>9512.083>!#!B>:89<:07=?7839AA;;5711+15173188-@>rt;;=:;<<;;<<>=;:::<==<;99:::98:H;;=?>??@AAA@@AACBA?>=?AAB@@AA=:qn:FHDECBBAADHFDCBDCCGECCCEEGJJHHGDCC@BCADA@B@@BGHKJHIIKF??><<<>;9r;:<=;u:<::;;<<;;<=>>trrspps;;p:=;;<;<;989=>==9kfk8<;:qpmjjknliknoos:rsrooyD{sn88n:;s:rqnrrpidcca^`_`b`d7gdei6ljhca__adbbd445p64465333446643R82]7776d_hj^VSSUe68;<<;8i5ib7bT^[AHf??;;5ec_SPJ?6YFBeN-KGQOPRSX-.//-.0XUH-8<2NSHP-0,Q/QXN2ND8,(1)(-*3()5FC(+$51,'$%,8AB2,,7MI&07');L.HI,/.V2M32--6=BD@GELCvKE.3*-/;4)00O)938"4,(#:R5%1C?1/$2*1#%#"&'&*%"%+,.I(=8'7Q75.$5 $?% !R:XED}_*( ([ A*E@RUYD=/2_jt5Wo?`KcdeZ]tb_jl?WXnM<&)<+UL)@.62N:531D$398:*MFMN*8/&2+9$$)9'',*3D%K)(J4#"ED.+I/C<27(+?):)7&";>+,#/<0,P/)WXR0.+0C6C-57LF+MB&5/),.2B?D#0+H*VX/4(-=88/RN+GDNT.4:8/R+98631JS:+BN?*15-N/0YEB@7F6SO04/UYVTMGDPegZCFHKOOTVYURJKPX[\\[`4df35784257:;<=:98jc]ZYXZ_cnw<=977685f]XUY^a^]cn>=<<9lkurke^WRUX[\\[ZXVUUTSSRMGLNORWXRNMKJKKNNPOPUVVWSSVVOLMM@QTUUX\Y`cgiihdd^\Z]_a^b^]_^]\`nlmlijprqami_^XXSNPNPQTUWX_]]a^\[]_`fijhogfbbimtlmnp=>@@A@??>@C>x>@C=<>AEHHC=iajkspmmlsv>=?z?@A???EA?=w>=<;CC>=<=>z|>??ACxwuppotqns={@}ztqurjf`|zxz{BC@wtrqsx>wqmcWMJKMNNMP`>C<:7_c5;nmpnntPRrlsC>GCyz|v?C@ADBBB{otzzrZO`pjqyl>C:?::2CFDT]P@@OC@DRKC:EPLP=?CAJAB9_6^475h9FEIQ48:088<=:><:<83025<=;<<<=<:;::;;;=::<>;9;:9:-;:7566<>@>;:98764f5hihfhjmkjedbeg4655d^bhhpoc.03:501894/.1115141112,'-143/.60283320./34522446551-,*)('('),11/.-11/-,220./01/+)+,,-,/1/,-0-'(/003/'+76979754;822445672./.../.134644655323778::44247676675544  78h  ! ! 78$$ ! ! !   !$%$#"!!! !!!"  !#$&$!! "5w;:;:778:3.37764556546774577754<"<745976478620111/00/1./10//221/0/-/0011!',,24/)((&+++),(.,!$0*,,%'&)1000,*20+/3,**/.-0-1--/.4/0.+*40'&"$.+0!!&/"9/*,..,)"#!"+/,+)',.-/.+020-,*+%$+++*),&%&&&!!!#'%#! %   + +! p   +    +  $1   +   + + +   + +    + +   '   +(@+ #+)&" 1T  + + !)  K *  /"-'/# #"(;>VD +  7$   )(%. +"[@7+!$9-,' + + !,""  +  +   +   +   +    "       p   #& # %" *.(!"%(''$%#!!%'()))+++u30.-./124;>30..035535677>;982-,02243321/..-+*,($())+/0,)*('((**))*-0/-*+,,)&'&--/.131468;;989420245465647=:;;9;?@>38401.20+.-/-11239879555677:<;9>:977=?C?A?@#$&%&%$##$'$E$%(""#$')(" "#! 6266<;9<;@D"!"D$%&&$%'%#"B"!!!#BDD#$%&'(*)'$""" #%LED!!"#%CFC@AADB@C$F%IICAE@;92AACEE%$%HEEBBBF#BA@80)&(()*-0;$%',!C@99733448;>:5169EA<99FJJFDHKGEFGJC=>CGLQ+-.)&IGFMJEDKLP.SNIJHEEMKMMJMPQQTURVYXYVVVZ]ZZ[TPTWTPTRWSV^_\_38;7`a]/0145]\`j441026>B>840-./../2//210.-,)%//122/0+)).4655/$6$% 2#$'%--0,K'-.'%&FE&+2-%D'**,4;990' 95243*+.-",1;;0+360+,#.9P`XRRPOONW^ZNOOONOK99FMWRPWXTTMLKQZXUPMS\UTIDC>6AIG>6*.3/1; 1*$(;">121)*) #.;7928? "1-))##*7'64=F*,0 .'(53XYZV16*GI)&)5<7-+M&/LDIKMIEDL,;A.JEF.,*SLA7AGC;314<75A;@H8:HACED5=?A;4=;=?<7.53,+102553576616<43+%-<4.//202301030262542--14;<<;70,%&%)**-0112/-,++)03+#"))(''(/--+,-KN1.*/-IM+O'*,,MMIIKL)QCDP('POJK)RNJ@D47+,,.)%*DDEC)+%HE%F<(POPJA=?680:BC>;655.'/+!2010).2.3!"&(!(RA45=?1GIEDC>89>2+:98>9C9=<7:=?=92316+-+(($&&'%BA=96'2-)%$$$C@CDEC@:;4352040<>E@C;9888:;89;7733345;79=:;7;9;50&)((1'5((-),%!" $&%%$E?7<=AA85"*)&,+)),3231,3.6721>B:7;/,675259;?@F:4;.248=8;180'.:.0/76))*-/0/0.&,,"59;.1##%$%$ =@==<6:<>===;:/(+/12! #(C>2'89:=><4??<>9831-0,('+9?;947;=!$!&&B@@=! !$##"FB;=@A>1&0=89@7&9841/.%%!92-,.)*$"#(2,)+%$$()'*#)'%'+$%$*%! #)*''#" ,.,,()'*('&$#($% "%,)/)'&!,(,($''(./(),*',,&-**.*,/*10*'&&)*+.+)'&"!$$$#!" "#!$&*)+''"#!+!/'$')*'%&&$#&( !!#&*'#!"!"" #$ ##  *&*,$&#!"! $!($!"!$ !!(.%%%! '$( "+,-!#014433365400.00/+,0186.Á  ~}|}}}|{|~}|}~}}}~~~||}}}~~~~~~}~}|}~~}~~}~}~~~~}~~}~}}}~~~~~}~|}|}|}~}~~|}||}~}||}}}~~|{|}}~~~~} ~}~~~}~~~}~~~~}}}~}~~~~}~~~}}~~}}}~~~~~~ ~~~~}~Ԁ +⁂ ΀݀ ƽ샌򂌄кā´Ԝӽ擒Ԁȴ턆ꗃ˅ͭԐ˝˸땪ŅΥˉ̄ܑ瑄̹ڿǸؿߋư܈κÑ͟Ӏ㗐֬↕ۜρ밨ΐ겛ҕĚĎЂ—Ȏꉎڀ܆ե㘮цѷҩɇŐ蕆Εϛڵח繡赆⊆眰ϑ󘯗箯ި͇ʊǖ嗢ٵ̫蔙ԧﰚʽ乥ɿʀûĽÿ¯¼򁍏ż݃̇ȃޙ̴݀áռ̀Թӳ󂛞ʯ􄊅ݵ׃˻Ǿɺ߉ѽ¾мŸٕȱ쀎􅞠ƫѾɛ۲þǿ¶͇㒶͸ǺȾüѼĽм¬ļȨղʻýʿ»ƿͿýɿہԯ؃¼ƹĭӺǦϳò긩ĞĨݔTjebedkhf7::;997jmmd]`gi7889:hg9<=8577hd\]_^`aadiael8ofb__^_hmkkkifeb_ZTPSVWTOS\]_bgn:;6bfep9:idcfefd`[Y\]\[Z_`b`c8;8885b_YVTYdd_cc\[d9=8897:9:<;<@?9im:9gd__`cb`ciga\XUW_babgkkk6lmjfhnm79<><;q:<:q98998::qivA@?@>=?D=:rr;s:==?>=;<;<<:989:;;9;><:989;;:;;<><;;=.>@@@A@??@@@?=?B@?@BBB@>smjw==CKEBCECCAA@A@AABCEFFGEEECACCEFDC@AA><==?AGGIIFIFGEB@@>AB?==99;=?=<=>=??>@>==<<>?===;:plkjllmkn;==<;=>==x~@<:=<<<:7rnpp9:tkigfdda^acg6=87jihhjjfceddbdfi5ge4441^`bcaa42123578cUOO`465`[SWWWY]e_[c68;<;:<<5^\Y[[ZPU8@;;;7fg[YYXSIVV`iB>?,kgGmKZ}NZI'B.3cnbXmO{ytRUauGOstZj=2IL1!%D3/5)37C8F!K8'-4,*NHU,ZXMR12+.$35);J,GA34L*-*/.RZD=,F./DF?,8.24,?T?GNNM14201-179211I2YO72+,=I<6.[E5121W%0\RWZWQTX\\HBDGKNOKKJPQRPNQYZ\]]Zbbd36975337d[`RYU2??>?>?@CB@>?@EHD@>@BDCBA=AB?}?up98:jhllnjmqrsx>>??wwz=>@?>=vrtz>>>@@@BBCD@?=@?AB{rmhilstcVOJ<3:HTTXZ_h>DB@;l6;oqmow{kZirmjktx{srgrEF?8tpndfifiiijihafflw||~tvsvyspquxvx|vsrlrz}~FEDGGEED{xstssw|}~}ywv{~OQRQPNPPROOZYUVVYacZPPMLHIKIJMONPSTOSSHJJORSRPNOMHHLPNNFEGG>8p=@GKMIFILHJLPKHKNRMNBCNTVXZXNNT\a\VOJEzFUYV^iidVQB@s|vvkoproj^^UZ_trclv~~vX_xqpy~yqcgk``PSMRJIYpok_][RNSZkbe]khgq=>BLU_VOKQQMHFA;@NOFD?{|x}yxBA@6_Y_SOVLNTIiFaYl|fabVFLTPXONTPFwVKITcUNJJFN|~ONoFxxyrqhmj_Z]_egg^TVIorf`lqzPNOQPZNLOOLKVRJukupmjcibLZQRl~x}{nlgsJWgkmg_iaegbZKSVUSYUXZ\ZV\_PR_n]VUOW`^UTTVVV]Z^WQUZ)VVY[ZZS\hgksc]UBFOMPQUZZYUSPRRSQLRLEuGFIFMJOLHGPLJJGJL}suGIIGGyDZYTORQMHJ~EDxs|Dvl\YXbpia_cZPQLRTX_cWTGj`kJHHHVgou`jkC@FNRrWgxkowklmgcigVRV[cgftkedkmoia\KbVXOPc]YYP=NGBztrogoIaUKFBD{|zsutjogcoqoc`m}vmmnlkrmmh`bjejfdaigmvxpirni^ZXagg6E^[LRQOGKKHOOKLE}{z~vyvgd^VTLC4NY\]ZPSVW^k`_dic^YK`bebgdjnnviYVMdaekW`N\wZ`]V^[WOMLMOSLY]]_h489>qgqzxCH>jd9AIILD|umhqnphvA}iaY^XXdvy?GBytwsrskijgd^N-YVQJT`i^ovmmsurr`Zqlde[`\Zkpuzshihgnn|}Cu|ABy{B{ry|ztl[cjptopNFBxli`WTJOUU_<@?h]ZZWOC@Maf]`XOQJOTQMJGGKMZNDV57ZKJ@:9=DYdI\XYU5787497f[YWSPOMQTQIA>PJDBPQWTSRHKQXQMPWWZYVW`[UORQ^bXfe33e^^g^XOSSPX[]ZUQPNPQRMQVKE<>@A=BEEJRWJIMLOmV@ORWVQQOPNGCDUEDHFC@BKKHJHFBAEDGDBEI=KRGG=CADC=A?GBCF==FIE>Z764@DFMcI@IP=?IVPC=998542329==:<>@>>::8<><:89;;<<<99::965k7;:79;=:8755fefgfgggi75fa_bf69: 983giicmj 21.00411.4662--213132,---//024126630//./576+320/,*(')-+(',.-/02031630/21330---/--,/]++**)*10/01,*- 133101/20/15520-+*//./1333332137697727!!879  +&  !! 985:"(" 3 !""! ! ""!" ##$$!" ;:867556:985866657<> 746452)0/-,.0221//1101211/1231/*,.-,-*%!&+)$(()*-/('+*))*)+''.1-*(*'!''*-,)+!%/+*/,!,3$''*,)()%(+%'**,**--.*(*,-+-(),14-,&%$#6(' ;7*),W*(%''+++)(+..-**+/32301-)-+*)(&&%'')&'''%" %"!*' ! !! !"   +   +  & + ' +%*../0$'#Y  +    +  + + +  + +#  +  '  !%+" 2+)2#5\IV +.$  +^ )4+/+*+ ",'$%   . + +  !""%# 23+V%A*/!  ) #& )!          +   +   + +  +        %!%#%# "$')!!"$%''$!#%&'&)-+,,+'+**(#($*)0*-068975410001.,,02443335667:9<;99;/-.20022202.+/.***'%'**+++**()+*)('()-//-+)+-+,)+,-015454579<=>=9:756622133577867:=:::7=?@=:543.-,!%#,,--023665211;<8:;?>CA<:>>88:>>?;?ACCF#$%%FGH$""!"$DBBH$##%&&&%%$! A@@>@>  DB:A@A=;;>>BA4,($$-/58;@#% 0=FDDFG6-5DFFEHKLGG>C))"$&')-++)**+'%)1+&"(3!591/$B<6:6=$A==9;>>@?>>=<9==AFIGJCB=>?===BGFFJFDDBCHIHJO)((*)(('LNPPSJKLHGCCCDFNONNMQOPVVTQSQMLOPVWYZWUTQMMLNMKLJOQQPW[_1e44321224`U^11;95879>?910-+'',,,/1`/134042(J*-12321...*),/.-%$%$8"%&$#(*'*-0,*,.1..$%,/1241+,28<93+*'=%/205;:7-)5;88344963.0),/<:049BWZSLLHNTYYWWOTSKIIC0:FGIOXYWPLKQUY^[OSSSPSVNNJ;@!" +'+"#( $+,52@J>>9/'+/-4.W[Y01.)@,)&1;2.,,M),HIILQPHV.,>+QBAQTTOPHCB;B?:888=EOL$29<>;7@;=?<7+1310303464158-.8@510+1881000205151.13102354.3:59I@74.!%+*-.1432//-/./.,0+%9&'+)(((.,/+(JG(.,J++QQ)+,TRGKOLHJNN@BFL(**TOP()HGB&21.+0.*%'BHGH&FFJG&C>D'GMKICM=10/3=IG97584,,'+./57..%?5=%$!)7;6;:0-03586@;98;=><62'6-1+(4/'&!)%!?<==88'7.($#%A<>?<>?:<96>?<429EED?;;:88>;=946;7:75298;BB<4;::41,*,,0.&)**#%$#)*((%BA=A>EFC@75.)'#",1331,-..29347=862(5554758;=C;20(859>07(2C174/62/(('&)+'/0/++507=;!%51 %$'#AFE?;79794<"A84-,((1>= %"A?A><>966543*V22-+/5;07;76:FB>?3-<:44-,&'6;@A>9;;8;;ACG%;?!""##D@?#A<@AB?;06;=@C:6($"@:93*% "%#* 4-*("$-1-/,(&$'*(&##$&%,&%)"#'-('+&0**('&&%)+($ '$! &&*)'&!#&,'&'*),*)(/-(%'%./*0./,,1,(#'(&+,+(&%&%'&($&+$# "!#&*"#&$&5'!'),+(('('#! +! "!!$$!#"! ! r" "%#& ! !'+1,%&$""  " "!#!)!!$2" %!'$"   % "()'*///02232121/,//144151؁~~~}~}|}}|||{|}~~~~~}}|}}~}}}~~}|}~~~}~~}~~~}}|}|}~~~}~~}~~}~~~~~}|||}|}}}|||}~}~~}|||}}||~~~}}}|}~}~~~~}~~} +~~~~~~}}}~~}~ }}}~ ~}}~~~}~~}~~  ~~~ ~~}}耓 ׁ ΀ 怆Ȼ鄊wŒЀ󋒖鏘òњij߽žրعځχֆ䴻Ӌ҉Ѥҝǃفս䋙а쭶彬蒗ŽĬ㤫硪섡왈ρ͂Lj򸀰Ǔւφ͈Ճ׫̑٢㣷ۂ垁Øφͻ䄙̯᷍߁ԉɗĽ􄹂肅񒈑‰װ񄟣˙Ϻ׍؞桍ſƃ։҉ׁТ򀃜׃πΒչȈ̙ըԚ򰥤񂊊⹟ƀƼſ¿þ½½ǰ󀅈邁ڊւə၀xč섎􀅄䋊̼׀ܡɺȱ䂀Խ¹пȳ⏬İݰͽóֺ郂󎡬􀂅ہŶ²û߽܀ڻɽ燆ޘ̱ӿǾݾ÷ʼ˿Ù̿ĦĵѷȀȶ팕̲̾˿κሃ쌘¹óɿıބƵIJȆ󈌁¾ȼǿ߀ȾͻĬʺ¹ɻܔåŮڋ쁖cghhdehff9<<6:739;:qmjeaf7:8m46:<84:>;6fdfa_\_cbba`_fddcba_]gnlhljhb\\ZWPQSSWWV^bn:9:75hhabila[`kifhlea`a_^_]`bdcjkefff`a[ZXW^]Yl\cb_Z`88786699878=><6jkmheddehlgda^`b^ZWX^[X_ehj66lmkhim86769:8<@<9779<9==<8is>>::=;sqr:<;<>>=<989;:;:8678;>;899qqnn7:===>>>=<>?BA@>=>A@@A@=vuvtqtGKEEHC?>@ABA@@@CDDBBCDDEDDEDCDEGFDDAAB@;::;=A@@IOJBBCD@@AGIDFG?=>?ABA?@?=?>>>?@B@=;:n89;<=>@>;:==>><:89:999;>;98mllnmjhk;=>GG=?>@@=:<;=>@>=:t;<==@>::==A@<;;99??kbbdefgdgf464df5dba^\`c_\]b27:6d7F9><<84c`[X\XYRX\Z]_`8<<;:d`c\Z^[VRa<<>=876i`SNRSYdc9AA@B>B}mEh`D+2<<$" 1*216.6u{z#1B*R6&>@A6;|j~tv44RH;7L6930.QMNW[U]^5459eDDGINMOPPQNRSSWY\]]^af9538674cbadd`4786g\G@EFDA@=BHHF@@ADC<;58>?=tpjfcedirsrqswqwnnsr?B<{ttw{ztrp;>vq>AC}zuty@<>AA>vqvzxwtpxzwpstmjghdnvtpuxvrw@@BFx>=pqkffa\_bVKV^fcfcehlo{EA@=>9qsolpkwpqvvqnhihopf^hCA@A@?DDDC@D@><;?FE@69bkCDai>q<9=rmnlllghgeeokihfdhktw>w;<@DGyutronpxzwx~|skmwztv?BFyxxz}@{fBq{wggbap}{xmas}OPORRQQWVPOORUWROXVZYPFIGDBxEKMKMOOSUPWZ\ZRORPQPPMLHuLQSTUSOLC@JLKJN>llCCDMLKBFFGFJPPMRYXWUIXYV\ba_aacca[PHIH>xBAECB@~?AEAaSXcgp|{{~xvxshM>VpoldQ[]]^VVWSYgtnfeeahlo?BP[VURJBJKIGFEBIICxhZiw~}|xxtf^V\]XPDGMMD>Pd]ssnhaa`[TVRPPSOMKeNXQGyx~IGHQWJMizHzxyh][ea[^beleYXpDyweiioqrSNQKPLNMLKVJK}slsre_ccjd]^WJW`hhbttlfyY`sxldig\ka^SSSVUYV`\VUYVaUP_kYRSOUU_YURWYTZ`ZXRXWWWg_XaZ]jfa|yff[RGLSWUW_]WYUMLSROMLzsJFFzCDOFNIMMKIGGMQGO|vHtkxJLIJQC~LZePS^_VLIHGFDFmCy}nd[`KVu}lcZWfYKLO[XPjg[THZOY<>b@`gw_Y_W<z@D@9bTUhj?FB>}|tltmflttv|mk[SI`vjuBG@|yuuwwnf^]YKTSFTU]b\WmlkvyotuiVboklafXWddo|pt|rfjloy}ABAy?CA}iA@}}~tomkdiisy}[g?JYKihbVLS_PU7B?i^]YQH?JU`lidZSSPPRVUKGGFTWI=\7bQOD:l=5HPS`U`MDN34[574b^YWPLIOZSF>GNDHIHQRXT\UPKSMKNQXfZX\^^YSNOUR]hh67KJSXRRQNEIE=LQK=:A@8BCFOFC>IGEEHP@Xe84>FN4KVPA:CNPDEF<98:eS8AhC:<8<:4GWQR8:M;:?Akd8<>@>;67520447<>::;@>>>=9;>;9:9::;;;:99:<:7ji775579;;977hhegefdfgkiggfbah9;;868:lh_`0242/240.98620050-00.-/10010.332110/.37536440.--,((+*+*).2821./260,/5445721000.//001141--/0--)++*..,i-1/-++02432123586520010/--/-+.34434434558987C8876;<;:8;$&! "   !"!""!! !%*#!!"  ! <><>!! <3-)#""$$&.-,//34300189::;EDEG?;?@?;:<>?:ADDCFFJJ&'&$#$&)*)%$"%'(&$$$&%  BA=;9:8=DA=>BHDG?>?<;;7=CA@BB@>C##%)>"!>A=861/./)$/5<;>>@CFFH'">EDBB=@9:AFGEBBAEG?:<%" !!!I())*NO&'" "%$). !/0'D# !??9:DD""B@??@?;<;9:C@><<;=@@?<#'+OFBA?=>?EGDDHD?;FMDOTIB<3 (51/+#*++.(')&)394.-,',-0*1--,$ &'&%##!&(MN&A7+4?EFDD?<60+(+*$!!,54BAB<798414/WX111/--S5P+3.,SSRDKPFFH+)*P03)T,H7AJ*UJHHG>66<98:;;B:51?;)GOC8>>@BBR1.0+0-.,+*NQ2)MR.JC?FSF>=@=D=786]X/M5;>?7A882101131841/2090.8>2/0,10830/12/3621-3100<50824<73ED::2,'(-10286120,+/.--,OJ<7((N(C&&.(-())*(&'.0TMN).RLGD*PMLORKA7?HN+,LQ+*/H&E*29+-660''JIJ(''%'HIK:&IAJKQH>924'0AG:510<1&%&12-<73.&3+0,37B2,)#"10B>0;CAED<9<<878862+/5><<76<<<363-05//2,1/($*/!"$%#=;:--'7($ &"A@@CDCC<94?AF;:C@?:;@>9,:?;8(54BA63:26>?EDA353942.0365'+*$,%((%'')*(#@FJEJMD?B<1)'')-102/'-1-553/91-22,-2:;;55895*#/?16<8649<6751+&%,-'$$((,)++.8< #!*"#--" BDE@9>958=>>B;9,& .>6<#%"B@>??@9610/)./%1/551*896=B=>A9-2<7;32'&26=FD=?D?:::=BB##"> ""A4#!D@CB><<;8=9>@D./$2)D663-&'*"$4..-)$ #(+354-()&'')+'##!()"*.%$!5#&'/(.& "%.,))%%#'.+""& #$ &'-&-(%#(%$&'*1+)-,-*(%&(%,10+)+*)!'#$&%%$#%&&&+#'*'%"$&"" "( "##$$#$'%$+,($+(%% $ %# ! "#"!$""  &"!$ #!$"&)%&&$!#!%($!"'!"!!"$% *0"G&%($$% 1) !#)&* +,///120332121321231.053-.ׁ~~}~~~|}|{|}~~} ~~}}~~}~~~}}~~}~~}}~}|} ~~~}}~~~~} ~~}}~~~~}~~~~}}|}||}}|}~}~}}}||}~~~|}|||}|~}~~~}~}~~~|}}~~}~}~~~ +~~~~}~~}}}~~~~}~~ }}~~~~~~؀ ~~~ـ Ձ + +  ǿ큇塨뀈;ʹƵô̄솅‱­Ƅٯ܈倕¡ЂؘհҩŌٝ¹ϙ±숃֟߂ީڵ怢ڊ閏ټ񫫸ڃ̺Ռҵ˄뀅æ륶غ̦륀ٞѮ񫝹ů݇菾Ĝ׼遒۷τӃɟǼўɸ뢨┛蘸ڄٛ꓋ݴƿΘ׈Ć̇˲֑ꄖ۹ںߔӏ٬䚫̕򅃳І팎ɑ˓ӨᚃʈϞׅ򥆆DŽ󭪡оɺȾνǺǒƵȀ򈉅ɶ܃ 酖ǻ񀁃¨쁄ȃЀ炃пȺꅂ꾴ĵʿ悂϶썗ûꂆ􇊇ꃔѧ¬İЫ¾ڼ݆˯´♓ɾİƽκ̸݃ǼȱĮ۶숋􄇂䮆õꀀ񃍆񂐠Ļ򇐎º˻̼怇­ʿ̿úٙĿŭɴʴھƹ􇉌Ցda_fdhfef456jdlj9;9qtfghlfigf6869<=677higccbdbdcea`bba_`acgghhkhgc`^\WUSPMPPNHQbmhegjmed^YVVZ`dbbjhihfeccba^ZY]_YYam:;kea_bdc__gb_[b6776ghlm5679:87&76hcfjlhgdbee__``^Z[^_]^bfk9:8;8k8;8668<>9677km8<9ml8:9q9<=;9sqrr;<=>;999:;9888::99>?:789nq89;:;;;==>=<<=>=>ABA?=<<;;>>?AA>>?=:qqqv?AA@@?@ABA@ABCCDDDBDDCCEEFGHFFEDDCCCB@>=<;=AGNUJ@?BBAEJLKHECCCB@>BB@BDA><<>>>=>==>ABB@>>><==??ABB@?>=@A@AB?;<::98nnqppnoolmmjl8;<=?@?AE?>;?DA?=>@><>=?ACCA>AB>>@A@>>=;:wpigddceffef67666hgd4edecb^WSXbc^@ZAA<<=;7:<8nhjdc`VXWXX[\Yed^dmi97[URW`47855:kUMW`R]jk8898i`TXUEIb_]`dWSd]OSSZPSY^]`ZY`XVWZ^^ad_ZY_^[]_^^[\]j_YUQSV.SOORSSTWZYXXVSRRNRTNLQTNS[XTTLMMRZ[dhc[U[][Ya\V[Z34201]Z/24330ZYLNZY[TS\6QYU\664IP2Qa'BN5ePBOQJIJMF/14 ./3#$ ##$'!"&_B$I) ) 9'#3;.(:#$)%?>;>bBNRjD9YLdr=oRF>;_J@6N25K5N+'/!!&#! +,L>,3 +08>TS&(0),4!?6(;+ .'#$>2&$7%=3HI30JL6<9A9PD721NP^95PCQP?<=5KH*>=W6SNsHg)[aWWrD1.VSS:5<4$:ZYRF<~dxb}RS]RDE363285(;V\r\%(" !!42"777"=nןoP60"#)/D8-#8L1W{kTmJTpwD`l]JbYYQ9$3)*/%$ #(,#G>/!"$%!&2%$(! =>CGZ;9144QW%!9^^|dNFLPe8.##$ "7B>{\Y[6wF_YADjt>;=C3C@C*DK?C2(* ( #5E>/G6G199.!#A2)+KKU]K.(".4-D@1NOBF'02I,H?<7S.8?93/36:c8%!D0X881KM:NB=0811232\VUPLIMNOUZ[_\Z^]]ZY^`bdbab^4^6a96_aaej`_55eha\][^^c^\ZZ\\]][ZY]ZXY\X\XTV`dhin9jhdlf`ZSRQVPNQuRT]kf[`\YVTRRN?RXROSMPVUOQQNLLLMQQKMORURPRVX[Y^]]bbcfdbbacbabcddaghjl8liijfgohjr9wurqtv<>;ois~|@@AA?>>>===>ACBCAyomdotusvvoljihk{xxv{>=>DC?pb@A>?ujlp;<>kmkgdVcba_dife=DD?=6=@?=>A9>>@ob[`oksuqrmcgnnplkmnkke_gld`iljhjlknw>>>;=B|vrqvvy?zquwxxtqlkgdlqvEFApBEEyywxiR|}wks{urz{~{{ui[rKKLOQRTUVTUW[UOPrNPNOKHE?vmOOMMLRQS[YTOONKKKNQPOQQJMSMOQTOLLIIFBIQTMDnQAFAF}}|{wr}{DLRPMQNC?GOSWZ^Y[]fc^aeee_X[YG_`k]p?v@>tpr9=D?>FJHEDCC{plp|xykBDCsdll^dggmjkf_npplfj=@BGNV_]VUUNJIOJMLICIG|S7@`wwomnnZM@R{}s{xy}HMML}zncalxk_]QQc_PNRUTJLT\[ozgk>Y}}ulgjjiqd`XQ__W`_c_^W\WVSWjm[VRSXVYZXNX\UY^\XWSP\a]^^ZkcdnzytlnkZQSXZ^Z[[XVURMRRPTRCCKDE|JOUOKSaXTKHNUMzxxEIKHKNKF{|FU[^^X`ZTGIMMJQKw|vslvp~mWcufWhpuhdd[[NSJP\[efnmTK^Y[G8CCrgkb[kw?FEaUxbpHwvtkgl_R\de_^UUehkr__lnq[\hccY[`euvYdfcagkNKH{o_SWeSLIFGHIzxxs{oold{mo_{yiZalce|`bhbepiyvxk]gma^gjyvc:I`YRV[SQOHHLKLONHJGytlid`XJg:KQMRRQcg\b`UXbSO\]VS]ffd^bkg[SIO]ace_cbbg`]SYJJMUSUTYaM5Pcl:Awl=GBwAC>R@S1GNhCB=yv~|vrvel`:apudomopoceldgad^ci\k{obtuwwrpmwCA@?>vwkv?DB?xstvr]pvlgyhic3BPGysjaNQUVV\6<<:`\XRMMHM]eYPb]XUWX^UKFFPAFS[c\WSRFDE>@@HUUSVMARPR07bh5`\QFGHKNGBFSLLQNPRXR\WQRMSTMPUWX\c^`][URZS]d4<99=6W^:>\PKPZTWW7INJOVSXXPPJETEC@HNSMLHHHIHCBGEFVJFFLLFD>AFBGDCADFHHKJIIHEKE?DP@FLSQNJCFGNIDMORRHFFGCAAB?BERJKqEGJE@<^Xb7896e78;BBNE5J<98>M`O9>A>;:532a3858;;:;==??>;789:==<;:889::;:;:53586898:>;;955jjigjhfhdcfhkghe64g6876kcc82002043/-4/329<422746000220/.0/012//010>132324421/..++,)&(((&(02.,.12//-+*+-022043332211220.-./+*/420>100040.,-12441.04634224521120.,+---024555767988868$  7:77 ! ) !!"#$"!"!! !"!#'*$!!""    !"!  R5566758864535 " "  !$ 653300-0110010.20/.-*&"$))'$52410.)+()((&$*+(+0,'&%')1'%+/%*./0+&))"",*)+.(&.*%''+%'()*-)(+&&&)+*+-**),+(())+*+*3.)(%&*(%&''')*+++*)('(''*'')+((,+))&%$&,-142-)*+++.,''('''%$"#%# !##"$  !  2&    + . +    .! +$ ,52+!+# +       +   + + $  '0# + 43+1 1 ,**  39XD*   %P,3.&1   # %3*++7##*#>%)+ +   +  +.%)5+'( +"&!;B $&")      +   + + +            +  +    # + !!"$"%&$$'&%)-031/0...-/000.,-*'(/3135p.+0220/-.-1010/11210/.1/..0/0.,,13447975952.+,-1-*,--3;7030.-,++),.)()$&))'**)'''(+)&)*+.+)+-.0143477:<;8768764889::9:;98?9;? "%!!?76/3*)$(7 )32/,/14638:==<8=>>><<;<=<;=>?;:=@AFFDCHLIF##D#&))'$" "$%%$$%$#! ?A>=<<86=DC!#CCCEC=;: @BA@@A " ==AIHF#"""! !"%'''&F==8ACCCFD>;978:DCECF$#$&&#=7""!"?89< !9=>==4<;;:=@>;$&$ CDBBD$ >?CGEA=;8  "H&))%DJ&# !!3.*.>;@A><<7;B?BA@AA>=97;<87=>=<>?=<> ! !%GJC?<=;8997J'))SMGGGIA4JJF>DKEBHOQNJOQQMHDE?81CY/YV-YVY.024667567;522ecZXNDP10/0-S)% <:S210/-433:8400/-,P+./..00+,0+,02-))()%#)/0+$7$#&#'PIGGKJKHC>HMBCG&+/.+,+#"(-0258457?;9;<:84-.-#*),'44137"%'%##""MQQPPMJHPWYWPSYYWSWRIB85@>WWNVSNOQQKKGEMQJESSRPE@:%&$:262(-/-433/+3640,0!(.540/.)&'*')(%#)(LKC("6BGA9;;8*#!&'&#"H699:>:=:7014/+/0--XWS60T10-SU-JA*LJMV/+OS,.M-*C=D++SSR<7918<447:;;6,+GRRHBHEHJLTV+K..[-QSPKSRJJIA::COE;;22?:0.245^Y//4:;DRD7=NO5JIC>:=@@E9840893:8:761631/2>>30..21332,36026410/,584551>99>FDA=?<1+-135334210/-//-31PHJ#"*&'J@',0,*.81/)',1,QNQQSNJJQRLOOLMHDA@&+,*K,.+(CC'04661630&(MP-,+/K*MDGBG@/9C917:718= '$4-G?0:(AA@<:@8.38:54./89:/&(/+&%$$%(DDC>FIJMAA=EFHA;<:2B;=2DC807;58F46859>:FDD;3:<3279?=3#4/*-1+**%')''*,'((ONKFA@=950*#/&)(-++45.34-07/+22.,057644<93/*+46685888:65/2(''+('$')"**6/#!B<""$ - ?=CC@=@4:-17>2/(@96?"><<;=;:8:63/*.-)/:4883633!:<>=77:4623-.409C<6?G>BB>=9AC$#"! :>8<"$!"A=?@?3>D;6@971 +%==84*+*)&(-,,*&'$$+2-%2/++**.*$!!& *-/+)((!!$ !#)+'+( $! ,1,+& !$$(#")$$'&&'+'-($w&$()&'***,1-.,,(&,'+.&*,&"%+%%(!&#&*(**%%"*!!&(%%##"## ""!*##"%%" !"  """$$#"!$ %#'%%""!$"%%%'!T  !!  !! *!%#%,$ '"#"#.+-.&! %4*B343254300//2632/03.0΀ 񁍀~~~}~~}}|{|}}~~}}~~~~~~}~}~~~}~~}}}~~~}|}}}|}~}}~~~~} +~~~}}} ~~~~} ||}}||}}|~~~}~~}|}~~} +~}}}~}}~~~~~}~}~~~~~~}}~~~~~~ ~}~}~~~}~}~ }}}~~Ӏ Ձ ſ셆׾ķμΧ޽큆ꂃϝĄށĭ۩߲ŏſۏԓݶԿۊڥĴ̦║ʹ耬½ׇ裸ٓ簻njןʂǀ͘ݜؘ階ہ퐶Չ⸁Пѕ±ه懮ƶ왁ҁ΂ü鰪ف͈ԿΆʰϟ¼̝Ʋ⹩𿚬ɥͧɟͥȵйú־޽㒶ꄒȤ휛ٿ€̦厓뎔Lj֭ͫɐ眃֝ˀ도ъ홐ŹFųǽȽ܄߀ɨ􂉏牏񅇃πƽƿһ霯炅ׅɻúȏߡѷߜ㓾ìġê䀈񍏧늇DZû챩ŲĿĀȺѦٱɳΦ掔ξՠ˵ֿмⓦÀɺóǽμߐ񌋉𘕁ǿĀ½뉏ų̸ʸøـȳ˼˿øǩطҗ͵򄃌ѐ3bcdpadl4555ef^WWe88:;7:?C>ohaXZ`bk657726<:73egifeghjdddbb_\_ecbhfllkjc_^[Z[^]]YOD=N`^^bi9<;cWSORWZ^^^gjijigdghf`YXYVU[dn98jfedojd^^]]YX[bgggnnihkjihj69<<:<=;;;lgjkuuljgee[\]XW[achl:98987998;;:9>?8577jjklklq;<;:88qposrs;<;:99;=<<;9;978;;;<:997:;<>9nnq:9q:::;<<>=?>=>?@@?;;:;:<=>@@??>;:t>??>@@@><=@???@wtns=A@???A?<<;:8lmmnonnlpp:<==>=;:9r:>A??>=;;???=JclVONJLLMSXY]`[VUUPPSTTUXYWWWY].-ZVT/0111]TQMY21;3b/X]X0/1A363LL6//0.PS/YRPUPVH.A5KkF7A5G\`kTSH>53.=B08>'"#!!0 &#. 4%)*#+1"'3$*,)BD5.99($+80'&045>0<@MLK57F3!3)8$6M9aK(&%!/4#/*7,"3,#%2'3L $7E-&#(@3=H14\9:0R37OL;5R85=L1(@BWQ%JUCRO]RNOXhbm-PM/UP9UZ/V`:7L_ANUYgdbT65J_TG828[=!SZ~KV+)#!9;2KOO,ln\:;n<+G42K50?6ZXkdMkArpQJllVdHt{Qbbb\B.E-9 !"'#)'*3 "$$ &'5iH!'# #T.@JIF).#)ZOYNmQ<,%)G&'01$$#!!/eqXslUoE^lcJM58cnDi^gX<>>2121A:8.<76B9D:2Uc4@O-0G4!(3;*CGA847I.:@>L+.0464.9=.#":8'++4H;,@$+9/@3+;'"'3%,+/57,FIR.5>Q:LNGW')LHGQ@.K.2`C!:#8!+/3/36/(!=I0%A6-Ze;VA<#6@9 (/'*1TNQK("-'*O3?7./:<_,18+:69867NKMPUaprssne`^\ZZbgjf944:35]bc`^`behd```]_bb^\[X[XVUWY[^__]^_^]^^][]_fnurold_aedcacUQOFKRV[ZY[]\[WSONSZWQEMSU[[[bd_WSPIGJQSTSPNPTQNOSXX\WYabeefgcbeffhac`^b_gd`_dpppniqmdip;>?=;:l_iZOHJR8gBEHMNPYX[]]aefigijliijhiiggfdfelhffjrxpgisqps=u;=A?BAB@?{v>BB?vww>yuldYTWZ^`bbaej^ennmt<=vpnoosto{=|tjibor=@<9>;CC=<@BFFAE=DEDCA>;?;;8]^C]nfWWmnllmbidddfdfjrrozzuoyz~y}@xxz>=>{vv{>?@BCBApnkjlop|wyzxyw|{mt{zwvy~xv~|ztqotywrojagp}INNQNJKNOQSUUVVT[UQOILY^\SPONRVRMIJKKNRQQUTOOSRNKKIKKGFFJLD@@DtKPEJKKF@AIHINVWSUNKQVXX[VZ]_ealnjaZHs?L<=GCLjvCB@CEFHEDDEFDCCA~sn{GFEmy|ACCKAGNMLJKGD=kh_kpfdnpqw>EOUTPMWX^\XTSPKHGIGGE|oagytiabVY][cccUMIJV_W^YSLj`dnld`b_RLVWKGQOzOPQMLLtIRMRGNspzuklrmcll]XVZafgb9Otyy{~}{Isrgmnh`UJTSV}nORRKDtXOT]ekyZX[fSw|ufdmbmWZ_RZc`b^`fgaZXROPhuZXTTV\Z[YTU]]\a\YUQQQ`\W]_ls]^{tnlhha\``^YURTSUQPMQTUYM}HKJJCKJHCSMObd`_]NRMMMITKH{tuHIKFF~QP_^\]_VJEKJHKKJ}y~pmoivfYwibjgifg[WSbRY\^mm`RGP[SHxDKPscepcdyBGUTJvEvpphehKPRlf[a`UgafkR]hmnTRkdcZ\]jvNfg]f`iJKE>ti[TlCBDGEGGBEus{znlprn}syszfkprjjiobfsViXntekcVf~pfw{iJZSTUXURTNIJKNPPLLMLHF{oeeib^UJPFEKPUR[[ZXSQL_YHRXV[bdng_\haVXRJS\`dbYe[deb\`GOCJQV\Pe[VKI_GvpCHJED~BC}t[SKYWfCG;;vwv~tzst\MLxwkcceapkqwvlrqxqjiidb]TPTWfdd\cbhYa`dikhjideoplfgaghelyk\u|xszut}}}=>FKDA@FA?CEFFICA<:?;>7>@LM?L:ZKE6;=OCDAB>789``3b55699:@<:<<=><;67:;;;:;-=::=954564688>::9665ijgiffecdg76f653eh5f455ec./4;/05.2.+)1$!<94-+/.21041/021.00//0./1//3023540/.+..0133-$ &-))-00+)''*./1065444625641-+*))-25433176U1./-.,**,/124743543227677>B:7522,-/,*+..2545656466866857 l   !"#""! "" !$&#"   !  !!<957 46657665647.86466748301//..00/10432,+ ! 1-+,,*+)&'&#&%%%'*+/,'#'%)*)0%&&',)($$**%!(.--+''.,.*-/,#$*+*)),),0-))'&))(%%*+(.+'&&%((%%&%'()4('',*&&'&%"$'# &48*''%&%%(*+-1-)')&&&'&()*+)('&#! "#$ #!!% !&&+  +     +  + +  ! $1':+2''E5"$)#    +  +    +     5$ $D<5!'$ W"$!8".:VGN( +   '1//;%1  .*'6%%#+ & & " +    '  + *6  +  #.$##)" %!%     +                   "   + " S #!!  %&&&),07<>?:611./-001,,./1144353321/245320.0//../02320128;<:7753665434+,+%)..0/0100/-,**,/,*%'*+-,+/1/.-+'$&)**()),-*))-0/3/0776889758989674454:8657>=>>;B>89>!""! 9.2($ (7#"#(*,20244698::>?>><><;;:;<:;<@><=?EIC=?EDBC#DAA!"%()#!A!> <65; !6:=>:748=>>C?>=<> <=>"%$"&"!!@!!#"&$$" =99;=AG# !## !"$%$E?#%$#"*$"  ?AC#B=9720358:<;::=9>><##""%#"$&('$'"%&%")-#/<910=<<<=8=;==>=;;??=CCDDJGGDJKG$AA@!!#JGC@B!!"#$%JJKI&>;889>?EEFHGHEEHKLOPJAFLMJGHMLHNQMMRNIGCBEEB;84/5<3000363.,VVXTS,-,.0./12-,10.--+*)&%%(+&$%'F;HIKONRNMRNNWT-W/PG'(**'! %$(.5621+)/4545234596<<;3/#;#%# %-2 ! !!#" !"#"#"!>95@((%JUVTSV]SPNCDBKVQQPONDAA #$LTNKNLMT+O%(,-,+)&%4.(03,,0037$)**))0/442./-('&'&'%DELF=55BG@955,-0-342)# (-$(&# 869@?98=81,65+*0,UNSNKE--,--,TV<)-NMN.0Q0.JKDTLCHUD=MJ;?B>;CA984599;5)>MSLMIEGGJMTQJH-UPQLLFE6@J91EK:8=9;::K11,6)022;<4-%/50)B##&?46@65@F$&..(D>$G?>;79;).+?:267.93:=*38<<,,<54-22:LB*63/729('%!?6-&5! #%#$%"E#DFEIPVM>>DD<:<<:E=D>C6<>>7;:=66@+:,>A8=5/8H=7BLGJ?1$.+-./++.)&&&(*,*+,-*'PC=88<72*"% !&++,/-..++*62'+00254;74074140*/2/672;498645'+#$&)-#/(%'#76"%&%%C##B:' "") $<876566/,-/887264:02./5969877;:96615477C<.@B@@BFA?GDC #$!=96:<$#<@??><9<:114%&&$<71.1-)()#1/-*,(#',&((,93--,($# *-())')&%&)'" !&,.(% "$%*+0/,*###"&"$%+)$$%*(%+)&'#&)%0),()),2.,*)))+,/01-()0/)'.($$"""#%&((+'&'(&! !#((&$#&&"#"##"""# ! "& !$! $%$#" #$##!**-+%"&&,"$#*$ "  " #! "#%",""&"!## ,,$***2222631//0110220.ځ~~}}~}|}|||}}}|{||}~~~~~}~~}~~~~}}~}}}~} ~~~}|}}|}}~}~}~~}}~ ~ ~}}}~~}}~~~}~ +~}~~|}||}}~}}}~~}}||}}~~}}~~~}~}}}~}~~~~~~~}~~}~}~}~~~~~}~ +}~~~~~~~~~ ~}}~~ ց +ƀЀ 򃄈Ǭ킈Tȗƽˀ¼򀄉ī퀆ł񀱗މɕ̷լٹȿ̌텙ᔸ犕禚ɜ׻ݜƀצ˭Ƈ빿Ü泒͞۷ֆЗᎅڇȓ֯而܁ʵ̀ՙNJط˹战޾ʶσ믊ͯɽ܂ӴDzᥣ٥ԙ춡Ԯ鬡ߣÚ­֌녔՘״ÿꌷ͗׻ۓ܏Ųᨔ徥√͐ƽ〸┕ԁߥÚ披œцὋֆ㒙Φۀр¾ʻǿƾó³3Ԏ񂃃눒ؿ׺ɸʿ͊Ҽ͠삉شϱǼ̿ʤށɩϸ惎ĸýƽôƷƽɲ⃍ŰթǿŹζʻ˽˺κ䀙ļۻʷǾˈ灉ɷý낄㸻탈ƾǹӿꀏрȼڽƽĶĿƼ¹ǫԁqŵ蓛dcenkd_`6599fgb[^hgo97:;CC>rf`ZZ][\`ace7::9575ffecgbdcddd``[^`_flhimliic`efehildUHFQY[_b5;>9i`YVWYXXVX`gigfechmdaca_[WXY\gc`a^cjRecd^\ZZ[\aiieifgg`^`fm7;>A;7<=;9l77:?riggkiiglmmjkiefm87678;;;<:887::<=pkiiikq;<>>98:==;;8":;:988679;87qpll79989:op;<;9:;;<<=?!=<=???<;<==><;===>=;<:qtwot;t;;::?@@AAACDCABA@@ABCBDBBDDCAABB>;qml>A>BIEBBECC@>>AABB@ACDEC?@@@?@?>??A>>>=:r9>>;;ABCDA@<=<::9::;9snprr<:99:=><<=<<;:;>->=<:;;<;ss9pl9p:unq:slgjn:;:;98:9;=<9jfg4443f3569:9ge6778986677554c^d46887;@DCCDD>:7gdbddgij57::63`^]XXXVYYfhfgYCN_]XRS^]YSWWRPU[WUSROJU__TU[ZWVVY_\]cdddfi`[b\Z[YZ\Z[\WSV[TNP?RUTVYYYXXVTTRRQTUQQQOQQOORKLUUMLKLJLSUTSNV\[\[WTTTVVTUWXUVW[/0241.UTY[0045V155750WBULC\e3431010/0/.ZU.02UJ\Ud8eQ`pUT/[W92KF(9&1+,!"$$)" $>8*#&)2)(:%',#,#*%DD/@K6F=RTaXtl_ghice?A@Csmb@4('3" #!!,:3)!.1S!OF,):O;1<3U+4+K@FV04X>C*H:10214c=&./;`pi\LNY^FYF2cDLCJPg}Iq574C+)F.E/9("-5?FOW,PP(85LHI@G8LVI7MKC>H/0:DHJ)*'()3$''J2E&-+3,(#.D)=DQ.L4F7F1>;AJY78/WZ1.<3HYI3T1423]YRPQRU[djha_]ZXXXVYZe5``[[[]ZZYZX[\\[]^`_]ZZ[XYTVX\VSUY\[]]]^``]^\Y][X[bghfe_Z_babdb_WROLNSVWUW\USQQNLKORZSSRI8UDU_`^YWPLLPRQQLFEJMNRRSVZYX[\ccfc`][adfiggfd][efcdcaljhgosko<>6<=ABB@@@AvBF>??@?BCtBDJIEGJFDDA;rlAApflv;>BJJJHKLKKMOSMKGyv:njptF}y{HLFGEDAC{tw@DEDRUPJEFHN\[ZXTQMIEEFFD|rnx{tlkom`agf\WZbef]XXRY\?:[dUST]eojbZXPQSVNHNRMJQH}JOI}oyhr}caw~~rmqrpf\[c]Xdkw{~||}{~~zutxunfaa_[TLechv]oXLWLU}pyMQX^`jhoYF_d|{|{kluvd_Sg\cf^b]We`]UUSQL_i^c\ZZY^\Z[T\^]\W[\[aXa]Y[_gfa`ivoongdf`][[[WSUUTRPNQTQRPr~JEC?FJE@H_d\XORSLPOMKKMKHIGK|yEMGEpPZVURSYOEFHJKLHMJ|~qmqxGtd`w|ddeagibeai_n]_^b]gVNANHq>HALWpsedafxp>HROQ|}wkroi^_aUclTV[Wifd\=^_g\WTXwhVZQnmb^_`b`diesjug_ZZw>BCIFB}CGECHyvvukzkdkklsyzny~vottqlap][[lohlfbn|qhlzqAMSZSOVSQNHIINOMGKKHD|upkjid__YSKFCG;HMSZ[TRVX_TST]Zf_rnZ\^^X[RFXQQrhW^]dcdd]PADX]XO\]]O[=NBO{FExy}pvc[Padf8D9?=xsunqrkijjuypleflmuvohm{xxojmoc]\FLTYgqegab_[a``_kgj\Zhtoyyohiji`ioXvymwy|{x@~wr?>B>={unw=v|voysosxxvrqnehgr=@Ax~xa]MPT[04?A=ncZYWQRVOINIM^gc_aeaWPNQVSQRTRPMNRQIHC@EOTUPLNY`55cg`_YRKGEIOJNMOJEHHJLJPdIBOUZUUR]\aa`ddb_cZSRW`_38=:53bca^ZWVWUTLKHHJMSSTQQQRONKKHKIGHGGHE@EOGFKMHJPFHNIEDCBFIEE=C>=CCME`W[NNJOSXYmA8\NLRORKRJPOJNJDA>?BDOM@EADCEDECCA9<>D@::>EPSHK4B@G>=AE8FA5?GRIA@@:;@==41CE794FI]:=?==9361.,,*+///1120.0.0//0100-../211367561.24489:6,&$()*-.2/+**+,-,,0563223371.1/.-,,--2101/04N101/-,,--05623323/./14 6!;32242325774431037544457 863377 +89;577 % !!! ""! !!775 "&!   2:  ! "454 878898664973575234)311-32,(- ! "!21///.02*)(%&'''&00/0)%.+'$$*,,&)+('()&'&&#!'-,(*+)&%%(-+,/.-,-.*(.*)*)++*++*''*'$%'''(*+)()(&&&'&()'''&'(''*'&B**&%&&%%)('('+.--.,*((()&(**()''!###'&o   %$,-)"    +    +     +($-&42(.22++30*      + + +  +  %   & 6%!d52  8 /( &0%"KKE,8` +  &#!819/18+ + + /A '+4)#-!*%'*+  +     '%    +%) + + '*"5+%( !' +   +   +  ' +      +  +  ! "$#%#++)))*,.14511.-+-,++(++-,-.0/0111/14532000//,.11-,.020221122000.10/158878526643420-+*)),--,.2-,*+*))+)-)(($"'+./-.*('))''$#$(*+..-.0/01275874318<;;988733996687?=;:?A;=!!$$#!!73%) "&'+,/000575257<<<758>@?@EFA@<=A@@@?@?@B!""$'&%### ;178557525;C? !!"!"DFCCBG&%$#%&  7/'&,6<26;:<;><;@=@ =A;51.58<;:78=??AA?;A@@CCBDFDEF%$&(''&'K&KHHFIIIFIJ%%')/UMNPMKHJKNPQPNNPSSRRRQHEDB86=A@@GGGB<798.=$*..ZY-.133-'()2ca265bY^XY_a873474YY]d6<<8:<83[.../.-,+UVSSOY010/./32.01,RU,*)&#=;:9:GD7J)@SPFFFBKRVTQNRUQ*F2-33/-,.'2/'&*,15.+0432455457>?=;<656;80(": $# "$ 303-38!())'Q--,++-/W.,(KDD<=537<%>;?FMN),)*QNJILL'$D "=9<""#$--(%#%%+434200,*&%&&$DB:;DIB:;>=5574+),244/+)$+,)/%%+6;B>954.034.)-.SKU[`V-\P,/UP*SD)+NIHO,LOHCH:GK88DILTLDABB@>58=95:?EGQLFJNKNNJHIIEIIIEEELFB><;:94/U>>R?E:E8.O7T/4JENS3Y37:B(>64EH9:96:<786<3;1224/9-*#/*;#)"$+<>7955=6 &,+-L?AA@;<::467+4<,/1-88723282.,-A6-1*=<7542247:6>9@5/+*:" ##!?#FE%$$DG)FCA@A;D:6:9;??A:BEA=A@?=4?30,7;8;558;?AAC5&+0*(/,)($$%'*)&*+)&EE??;;;732-)&#"%'(+02./115-+-5191?>2344250'2)(?814565674-G#".1-&+(( $'B")C@%$>@D>?2,%,.+" ?=><==7645;=;:669:?@=8:B?A<8:;534%'/29@884430421098:/.5=9@@9686936?/BC=BCBC@#E?: " A>;=>A?;@?;=AB@??=687:!#?BA34()(*41,--(*+'#%$&.410254-(&&((()*('%'*)$$  %'('$"$(/4.-*'$" "%"%%(&"$""$"#-'(,()&-+0.-//.+.+''(.-,---***+()$#!#%'(()'&'(&&"##&#"""!!  %! #%"$'!#&# !" !! '0(*#%"$(*+8!+$#~&$%"%"'&"$"!'&"! !  !%&"$ #!!!&" !$"1/3740123201231./12/110 ~~}|}|}}||{{{||{{|}~~~~~~~}~~~~}~}~~}~~}}}~~~~~~~}~~}}~~}}~~~~ +~~~~~}~~~~~|}~}~}~}~~~~~~}~}~}~ ~}}}~~}}}~~}}~}~~~~~~~~~~~~ ~~~ـ  +~~ց  + ̀̀ 倂ŵɿX􀁁󀄂̻׬͹˷IJ€̙֭ӂ󆆆˵ҷǀգƟè窌Ѷəꈋ䁃۾߆ު³ݵڒܸ͢͵Ήᨡѿ̔􅌁δ֗ɎĂ˼晃سͫȻ͂ӑɀ䙜ϸߤ͆䑚鵼«ޓԇӌΊ҉҆ľں֑фڑזܭַǂ쇐辵ʁ߷蓤Ď헕ǁ࿜݂րɁۣˏն̓ŹҒ̫ՠ홯Ӄݷޑ꽒ـ˹̺Ϊ܀ے悆ĽƽФɸ򂇆鱫ֲ퉓ݮʻ˸ͱɟԥ񂃊óⰰɵ·˼ﵤ۰ēڽπɒµʳ񁍉ѿ̻¼ǩ󄲄聇聀ɻΨ̹̀ƻζ̻𤯬ɿIJͼҼ÷Ⱦĺ˿뺸р뀂ĭŽúʷή汍႐½Ҹľʹⳳ኉ǀ¸ᑪƀӖ$cbgjhjhab_iljdihefoo;mo===97iba8:bWUXZ_fip9kjegfhcd^__`a`aad\^acddhmosrkjfcb_dnh\UIKOP[`d469rica_Z[Z]WQX__`\_ajedgkieb`^[^_`^`_Zu\c``^[ZZX[^`ccgmps86dfi6;@=768;nil88:;oidbddadhijno::6ddh898ihlmjm8998:9ko;<9pr879;;<<:=??==:889:8:<:5dcihfdcdj:9;<;:;<:+;;<==?DB@@>=<==>==??>=<<<=>==;9:;;snsqsro9;>?@ACABA?=>>?@A@CFB@@BA?@A@?>=>AA@?@pn:?<;?@<9;9km>ABB?=::<:999:;;tpnnn:;9::==<:9<=;;<<<:9:<<=>@><;:<::995)i8.)<6(FB<'2E)A5" #)B/.+):RrhPdI^ch:FFGDC?:4jQ5;2#&*+1.B#j=`-/+M=(0)$,"12.;3!!9#! , 411/ !7NAHaFRV\,-3+IR.61?GU2,C:/5<%E^;8.$&,$*ClaxZ6zyJ.';EP7/0J`NM=8cVVHVVVRFIZ`W;:?.VA644B?+Ae_].(0B-89z?>YZnuRohUýd^H(7QW6/\Nmmd}~=mZawT9QF%6:DS^LFZZbiOcQP60JGGG>B@&1-54ZF3.>=DIG;12/<',*)MHNI//..SDF-IG623,(7#OR>$I+FDV8$6-9+KDMM/P.8G,B,,^:,I/[<8J65I;:D:)-'%6(+1&953C4MIT<@,>-L-'D8?4,ONO8=6-+8CKSTH/WTT\PCM/)9SC7Xj;AOOTMTQOOONPSTVY\_]]^`]]_```^67_SRVYXVW\[]\[\__^`][XY]bei`]^[Z[\[Z]__^\YYYRLNHJRVY_ba^^^`^_]XPNNOPQRPPNJIJLKQQNKLMQMHA\5=5DVOIAHHEJTTLQWHKHKPTVTY^]\ZXXdehb[Z[[]abedd^Y\]_bhbdkmker9:==@?>>:dc6gWX]:fj9@A@EMTYZ]fg_[dehkihdelkifnywihlmmlmrtolkompopnllmpv<;>@CDBLF;>=9=>>6a7;8qrnrvy>>><8i7::?;h`djh8=k[flevk@BBDA?@DyXu;???:o8:@?>;9m8>@rmptsnkmlkmqppmou=<;?A86hfjk7hcnvykx{pglhbekgnx=;i[Y]]^im=A@tb^ZXRUWZ[kuCHECD?AFCDINOKCDJKIB<:@?wxpp>tkhbcbceglfcbmu{|y}ow{yvrxxux}@ADGGD|zvsqrr}|HII~z}zt|{|}|vwspunebbfjqbwnlKHLNNMNM[RC[QRUVRSPUVUTSTPJNONONMJSROMON{px=lNDyNmq{|tx|kgpjX^_ILW>N~oGVVW[_ghe`b_]eh_ef_VVZ\aa`bdfkmd]SKHDFFIGFF@BCE@ABCD>BEBD]]YTOMC@xrnelowmWZnqg]]^bZY]eb^[[YQG6DMDJ?B[bhjeYRRQO\XIuQTTPHHI}~Ktflgf]x[^npe\fec\X_a[^itqsttwsv{}{wjcd|e^VSRKoQ?_pNzi~cYcuzPbe`JN*Pu|ojppjcYVcm_cX[`^gdZSRRWN\k[Wb`YWZ\XY]]YTQPZ`XZT]dX^`de^eip_llkkicZXYXUPJSXVSONQLOIML?AtDHHA@XZZZTTSNUVOMKMGIKJ{HFCDDI|DG||IXZUZLQRFJKKGNO|rsjugllpc]eebd`c^bjdbZVffSNOQDDw<`CIUWpwZ\Xf67;MURPFsDBzqroqjokU[hQXUZpdVTEa_aeYYW]`]XTGTopZ[flelniUTST^fUpFDJHC{|FFGCBpvy`txummo_clfv{yswinsuze\ZXTelgspnqwhjntuxyvsQ\ZPM\OQONLFMOLECGC{lnkkkofa\afWUMF?jMjV]ZPRY\[ZS\maW[hiX\ehb]WQXZVdh__demld[D=O\]NMSYY^atROIFGB?A??pwojtqfbYin=EOMJFC<>BDI@TY^FJPPl\Q`@=^\NQOG]UTPNLILGBGG>AEHEFFIEDBAB><>s:7IG?2:IKLG^WN38?>;;989<;899:==;938<>=;7544664546:95434ff6lfg6g`gji4755gfddf/-03221./-221/24338; 85 5211,+,,/448331232./-/00/./01-//.//27:<=8631/0064.-&&&$),-52...-//1.)*/00/0051003310/.-.01010+w+0.//-,+)+-/21479<//2 876621/110033355-,/4443145778-,2332332  :697997-   "  ! :88::&(""  !" 679: 46!! 76667/10)11+)2!! 12+*),,*///('%+-*'&01.&#'--.)(+'"$$.,-+)$)0'#&,,..20+*+,0.,+**+'%&$"#$$$&('''&43""%%""#%$%&&'&&&'#"'&(+/*'*+*()(),+*))*'()**)('')"!% $J!+,2 +  + +  0  + + O &;6.9#(-1%$&%#/   + +  -J)  +      $(   0/#A/D(<>& + !( &%.'! !YG@=;  (*("#-(0*&?1) $() -+425I5#*7)' +       $  #,99! +      + +    +         !S""+!#$ $"&'((***,-.0/0/.++-/0/)-)),///0523210235540--/22754422332121...+')'(,-0454211/,)*)*++*)('&%(((,+*)(()&# **&$ %&$&,*#%*$'&)+02./000//078951134566876514546;9;??>:@ ""%#"!10/(*.89"#"%*/2138732889:99:=@><9=EC;;>AA??AC@@=?=@??>=<<>A!!#%&#'!):;9=?B""!0 1*,000)163?"#%%$"#&@-B!! 5""5!=<=>=;:<=<>@A?GLCINID>A?:;A@CD :23676<>!""JVH92/./2476:?#'%&&'('"#''(+/,'!!##" "#A@;:!?8301258:>976>@BGFJDHJHGCHIIGI&&(**MN)QLOKIJHGFECKHKKMT+++OKIJMSSOKEJIMSQLJIDGDBC@98:;?F4OQNGA86'J*UWX-.0//.L+%434694][ZY``db6b[^b^6;:8566db3^V-120/.-+RNOPQQUW330/0/YWTVYXUQMIA:>3#&JECF,J9LH9EMORTQLFINUOB98;6-/,!% +C9(1324:>>;7875<>6;=7/.0275489;<=82+$#!!" !"  " >=F1.,STT++*%# 6316641499;C'&B??AFCBA?BFKF=>B&"%D@ #%'#! !""462-,+I'JF!<;93;<95JV46@TRNB<8=;:649;88?F?CADOVVTOMCBFJHHF><;HK97443/QE3+AD*N\=IYZUa`^OB30973144236753006823-49156::48;>3==>@?;44531-&,20/-,W-+.QJF*-*!8#'& !0333.--)/1**)-(NHL)))PKPLPHF(('&&G)D'*NGG)32/2*--F'),+J&+-MLFJHK>A9BLF7;;>7398665835844/,67+)+.&(B"8#&')=<@0.4<7=>;-+''.2'7$"$%#AA$$%#";@A.=A@<:;16<5?E>B@>IA9=AAF922-'155?<:<>=;7+1/('3*)((%"&''$#'%C9<::;=84149..)&!<(9062*-3410(1=4..891479840+./,363556;953#!*11('))'&'5,+*%&"""!"9>;9>?75-48  #@=@1,=3/9DB<8:<9CE7;=46?.23)*..4=><9;53585228;93::0>!:;=7849>9;@;3;!#9?"B;<@8>#+CA= @>>=;=>>AA;"=;5=5=@86B #*<6+&'&'$$5-+-,)*)(%x..0161-/*''&&$&&%&&*$!&#!$&(*)-%*+(,+1+'+&#'+,"$%$!$$$"&)*.+'-,+-/000,.02/-'+)./.-+-.-+,+%$'(60&)(('(&&#"!$" !! ! "!")#$%!"%'  %%"!#!$()- #'%8-(0 ,+#%%.&&&%$"# !"!#!!"! ! #!###!.+# "  "V)016321211-14200//0 Ѐ~~}|}|||}}~~}||}|{{{||}}~~~~}}}|}~}~~ }}}~}~~}~}-~~~}}}~}~~~~}~}}~}~}}~~ ~~~}~~~}}}~ ~~~~}~}}~~}~}~~~}~~}}~}~~ }}~~~}~~~~~}~~~~~~~׀ ~~~ҁ̀ ƴ򀉇B׼ǼŽղ¿˷ɼʺʻо㊎Ӧꂂ烈حֿΕъߤ껭Ҟ汧̣𦻳굨ˑۧ𧰄Ѥق讴ިݜũϖƿـ瀍뫿ܟУͳꛇЅًىԼLJݬšݑߙĽ񂰱־距ȡ⮱狥ӽލԅᑇ㜁ȰϿڤこܨٔƢԍɎ࣯װҵ贙ȇǴ̴ͩϻúƒ¶̀ĻѾ񄎀2񆈂õ淫͓ʽ겭Ӯīθ˜綢ƽ¼ٗҏ􉕙倃̻»ɰƪӺú·˼ìյ׵ǽ뀇ֺѺƹÿȽûɾ҅򆎈̾Ӷĥ½ů郍Ⴢʶâ׾ʑ􃉃ļŵµǷşؓeghjjj55edgfecfdjinqtlim9:8ia_Vh;9hdc[VX\\`]`g]ae87hghgmic]cfbdccdijkpnhmmeb`[^`a[QOOUW]\^egkid`cdegga^Z[[^dl`bglfikjhebbdc`\`da_baffdhkb^Z]efgnkhr;lkkge6<<7j7qr:9979;9ojheaab]\]ahk993ab`cdce8<;;<::;;:;<;;9oo9;;>>=<><<=>><<;8klmp;8gdcbdbdh<>:r;<>=;99:qpp9;E=?@?@@@?AA@?>===>==>=<<==>@><<;:sonlkkp=<==??>==>=>@ADEA?>>=>=>@A?=>A@><>=;qnrz@AB@@>f?>?@?>>?DD>;>>?>?;9qpknr;===;::<>?>;<>=?BA>=?<;:;;;=>=<=>@A??@CA@>?@=AB?:7879765_48aX_]L\^TF=LWkcWTWJHMSZWefmgaf]XMHS\[WURWYNJX`aeb]^^\X[`b_]ac`]\]VNPPPQVWSUWTVZSNMLPOLIMMNSSQSRRSWW[WTSUXSOR\[OTTORUXXURQRQRTTVWY[]00243420V;P/1202^ZS?FKZ13YY\0/WZY\]SNP00,+0303-VVYCef3jB32/SOU=6Q:0'@9,2!4/4$!(H3<:\* "#-7'?76@QB+$(R$!!1=$4XL_iRyJ;=ikgTTcLJ;WYD5 $!$#*)F,B0?IzPB21LF/1% $&BE,><8*(<#3)'8<5A'&.(2:=B25O[A) 9@5R133-7G58' U^G&22/^+&2,'6F6PQJvR^5bAHFB=_,,E5KMD.K@nj?nY9XNSf:?_,O2K4R,52W>C@\SxA[R5(HAmRjfTzldn_~wg^lPh+'D/2SXZ5>DES?U6DYVcLp@mkTXwWeWZiybH#" -) ,1;PCM9FJC;D?H4?E.0:/>-,.=&VB!(>U/2.(6($#"-.)*0F`9_5?[_VYH30Y@>V27@io[]MnU;:G+6(=99/7%@&$B/F<]G?5*P6>95H44/IL:F-))++ONM-"352(IN!'7LH?]8CA35@!")D5+G'W43E'DNM+1,/53+JFA;F70,=*E6/VA:=68IN_S_KL=nA1RHLRF>I;0TTJK>20<:NU\]h9ONV\dkVQSTWZ[^b`acc6::99e_c78Q]fab_]]\\YZ]cca]^cfhg``c_\Z^\[Y[[[\^^]]\^_UMNWST\][_d[W>TPKJOPLLMKIGFGIMNNONMJJJLOML?Q=HIDEIHHGGKQVPGPKJILRSTS[]ZSVYXYb__\YY[bdc`Ybgghnhfelohhsvu<988iZVcPb_o=?@EJJN]a[]YZV]agmkknmnnmlksxrqmmlpmmnlkoqoqppnorsu==?@CBDCAEEDFD?AA@=@A><@=;tv=>=:;;; +@=:=<9j:>>?@>?ABBC@A?BA<>?@D==sovy?==>?>=?sdegdgootxtvljnmbZY]^]]ci;@FHFBBABEEABGIEEBEDC;mqpuwxzqunjahlkook>>yqsx@~{u{|uvw{}}|{y{~~xuvtutojkuy|}|z{~}wnxxuvy}{{{|}~|yv{zx|yJJLJKKLKyZfwPRSOZSQQZ_ZRQXWJJKOO~v|>AzLOGLKKVQN~}xpl`UQbILMQUUW[Z\fgeiggdeeZ[a\ecgfegdfggdbca[NPIKIGJIMOLPGFEB<=sgfuHMIx_NZvxVQWejzdhgjdlmsryusuolo??@=n8pcEB=7:@EXUJFrld`ch_knsn\bjokblidafaUWZZVURQ;JT5??Rsahd[RTRNWYQvkN|HMtszc_mhdj~e\syc\]Z[\YVZ\b_]ch]hfztpropsr]ba`tcQFG|hkiWFxriZtuoaXHOZRXniLX4;^Pqxmhnh^__\^tk_^___edc\SMXW_c^X[XWTW[SZ[]UQNRb`VSMXb`]geihkhnkppjc`_[[Z[ZU@DVXTOKLYZTLKMG@CFQOJ@=YZ^bfeYVVTNUVLFMTMGHF~~DKJ|~s~JRUHHUMNKJ{ERTIunn}kusxvokqmb]eshfec^W\iidfXteQLIDF@IOVHUZFRoc_dg343KVOE~{}~wtsif_ZXS]ZWVWJ_YWZ_\^aaNZ^TGT]faeqilVzobXY\Ycc`YhAADAuzCNFBxnmvy}wvzltqlnnsqqp~usiklsbegWZWMfjgqqhluvr{{vnixiFBI<>Cunlmlh^\djjl<|yEtaWik_d_uEDxzz{tmdhtpb]bXbfWYeQCHOZjouzzoedquka^cifqg[hnojlloiksgflgkht{lt@A|vgiDp?EDvllwtpprrxxmhkx_klfiyfyNGoeUOI\]Y6<>DDCHFFGCALKGIKJLPIBEEGNSNK@6;ARK4;HRP?`:E@72cCDDEA<8=;==:<=;56><<>8X::<@J*=/@AB9443213I697676:>>=>A@;9:8<<<:98:=<;9:9@>>:7556745645685545gdchhgccg6fadfe6496gecd/0233311421020448<>86750/(0432-*+.-0-04-013564740-11//../357:8478300-..1.('%*(**)-1540-012551.--.05;1/1622441//000/-.10/003301630..4547648534322895453100-,-.//.0/1322773322121120016877 ,7554226!!  37899!! 97446 899;854652?251341%+'*'!-,'!")2,&%(##%'*(..3/,.++$"(,+)(&(*$")-,,*)*,*(*.0-,/0.+*+'#$$#$&'%&('(,'%%#&%$#%&%(('((''**,+)()+)(*/.'*+'))+,*(()(()+,* $$""$%$ ##"" ./>   /   %   %%04*? G-.) ) 00! %:M!   + + + + +     #% +) + +  2' -! ,(1#',"##2P8x' !C6;4&)30&#10!2,( +   @$*'', 6 )  +   + +!   !%!!)( !!$!            +   `    #%!& ! !#%*""(+15*)**+,./0//0,.*+$,3253430.---///003 /12112431131213122-)*0,+.0//1,+,--,*((+,)(('%%$&)+,*,++(''(+(' #$"$'&&&%&*+' ('('*---,//-+.0006555454112666518;9;>:9:>>:9@AA"$#!0(&/'3C5="""%)(+683511-369<9;?@@?>><@C@?>@@A>>???@@?@@?>>>?= !!#%%&$!$""" ;< 3 !#$%%%#$#&&$#"!# =><;;@@?>?=@>93./*#$&18!=BGDCCFJNI?7424513831;67757;;?FII?:;=:659:9777!&'(&%##&'%&(($%!##";??CECC?A<71699==:""D@BE%JICGHCFIKLIKHHGKMNOONLHEEDEEB@AHJMNMNOJIEGJIILILHDJJFGJMKIIIHJHFEHIHLPTyXLXW,,-OHSVUY.Z--/.ZWK6=J]4553^ZZci74ccd`^Z_d5:?;65;:d\XTY-XWVOMKIFUXXRX.-11^^WWZXXUSOKED;? A@JLC-/T*O,,.4/,OKLMPNPPMLC<62-&%.C(*,/234866;<;??>::;4695:9<;:=:;;:75551('!""""$%#&"""821;&+*RKKQPOH=)#);KA)$'14DDHJ>25685:<@=B??=725!!#54.E%""1/'J'KKH=81.24.69?<136;96:61131'*,)&%%&$"94<=613/.470OKJOD?XZZNUY0UHEIIL*,KCBHMJ98?<;?LV61AVG;767875456<:8;=8A<8E:.)V-QCDB4)CH\WWVYSD;MKF?;27>6:OM47!4-N@HE?@?AD;=<:::;8:@99;A68:/1.%475<>89?B>DC>74<3(('2'*'*'$%*)'?%F?874:A@>3256-(,'A6) !&%/94.2,411.2861557:41++,)+105358724$')43//)''#)'-+C"%#(!#<989::5368:;!?>&>3/98/3/?D@<58>>516059/09, $)2:>:448:734695;815;;89:;88=67:98:?C:>"!@?<58B$: #";66>><===?A;88@3898:B8?+':4+)%(&% 742..-++)(*,)%(*,-33/-+%''$#&&(%(%&#%&&%')&(+.0-+*&'&&'&)*!""# $&%#"#+'"&+',)+&./120--.-.0-.0.671,)())(&(:=.+)))'&$#!!"  # !!$$"#$#"&" "!!$'$"#!""$$%$$#$ ,0,,.&#%#)&%($# %$"$$# !%$# !($"(%- / "  1//121.-02/0210///~}~}~}|}}~}|}~~~}||{{{|}}~~~ +~~~}}}|||}~~}~~~~}~} |}}}~~}~~ ~}~~ +~~}}~~~~~~~~}~~~}~~~~~~~}~~}}}~~}~}}~~~~~~~~~~}~~~}}}~}}}|}}}~~}~~~}~~~}}~~~~~~~~ ~~~؀ˀ~~~}ׁ  ¼߀ʾǷǷȿ̺ހǬÿ²л遐霠ҷޝҁ̥ၳՑՃʁ虖ժίơ歸⌤ӵϻѪ͕ޫʄ͂嗲ޒ틀͍꼭ά˽нނͧѾ͓ݣŕ䭁ѳď޾ՎŔݶ鸀܉۴ϢňӄⲙۿޫշڟŢӁ⪉̉ͯє٦ܳՈԂ̀ʍՒ嘆ɓԂĦ방ꋓ䗄ͩӃ󔇄̃ч€ٱƛیŔ谿ڥŽ䛩օʳ޸õY쟋聃큌₊ɾ׹ـ؎įβ௩ĸڀ诡͔Ǻֶʹú𔢗ꋔ񏠉ýɼȵһǹϻɹ򅀹ʻž漀䐆Ľ̾ꌛļ׺ཷ̿ĵķɽŻ늀Ѽľۆ˵򇑊ͽʿɹȻ㧊лƷξóꁓ̺ɮùπij˵Ҝ򡬥ɛ#eejjm787iffgiiehgdd:qeih8:kke_\`g97ib`d^VX[TNUX\^e7jguus8eacdffdbdfijlgcfllf`^c`^\TUQZ]ab_ZV[aaaehh88mjleemqse[^chjj8iheccdd^Z\`O`_`l9olptnjhmlaca[^bbkjebm897ffil7::ml:>;<>8lkgdc`]b]^eijjhedcbl=<::<:rto9:<=><%?>9nlidcehkiidefbinil=><=:mloppno8;?A@ACCAA?>==<<<===<=?@@@=;:;:88=>==@C@@??>>?@@AB@?=;<:;<<;tt<>?@A@?@>:r;=:;>?;@@>=>@?=>=9<<<@A>;<<<@CCA@==<;?:ppmq<>>>;;::<;;rlknu=A@?=?;;<<<:turqroolkmnnpk7;<;;==???A><=?>??B>>>:rps:<=<:9oo7887787:@:347;;657:=:9;:99::777876fh789787e7779544_]iggeeg589878:6479667787>:76d^RT`fbYTT`oohTUUYJSPSVZ[\gffZOU[SJMTSYTRSY[cjg`[Y__cejgeeb[Z]ZWSRSUVTRWWWXWOMPRSQSRSWSQTSRRTSWU]bfh_NCGVXWQLTOPRSVQOQPNNRTZ`bea[[02221XQ?HW02^ZZ`eY47:7/].\6YTU]1/^62.4200111/QIVV/XB9742,R6V/IC5M.8,0/5./%,.3V$&aB%3) :905N5)/*.5!*DGAD\9bO]J6010.WXHZ$ + "#$,F3)3lUE3.!,&5+ &,0N68C6JB6.G+N4=,//ZO42;,NM\HD1YA?#7'N.*?OO///:3).T=Q>+N%&,%'-9D:XIPJbv=tEJ0PETC_2;\KR=_kxnc3>`UYW4o7/$9UNW-251OZ2BQs=uPnIBcfKsj]bJdgdVsi\Qi$(IANh_QJ\Q6>G+;vsfcY~Zf[TW[5Cw^F(S4?5A664EMV.QCO?4D@SUS9-=+35E(#,6=1(!0@;$ 5,/+, 0.%3AJEBj?Mch]J>nA34W[X1NL7kAkhzDP0&D+8GE#1?1 2-BL*-..=S2,<<.*.434NO56-.9P,LLS?77/HPS.4?P2/.J'&4QI=+WT+< (3XT/;EH47F5.G;-TA2M[S-403[7D3P_^]UWXYQY\^]d67fd_^\TX[\\^`aghbf647:6hhc]_d468mh`_d`inieef7ied_\YVYYZ\^_^]XX\YWXZb^]`ZRORWY[dlk676g^b^QJGEHLIFCEIDA>ELNQPNHFFGHILJMFAHJGDEPIILLLRUVTQLIKQTWXTUVYYWVX[`_bcdbab\\_ceff^Xfiikiiddonnqu;<>9>;565[U]d>9<9BCDKVTV][^]XY]^_emq@??BABBCEEJLLEEHFFEB;=:fg8B?9@AAAFHKIJOIDAA@@BAlf>@EBA?BGA?=zwvtlxx<=?=>=;w=A?@AswssmknCFGvADCCHHIHB=FEDA>kkk\aetB~vpsvwtrno?DAAC~~te_bdjx~wtpnqotwqqsyzzyyuoqrux|}rrv}}{yynz|yx|~y|zy~~MNLMMNMJIKOSPPNMNx}~ts{ROOPHH~|~}hPq}uzHKJEF|?MPSY\\`]WX[[hmhc^__bechfegc\RT\_XMSZgjc^^ZOJHDBBElwfi9reefBMEuydOlyrq}H}hqotnq~}t{~|{igmoo7ehnuHOC;8<>HRGHMIyb]^]\arvB|uqrv|sxj^_YNN@GRVRLNT\^_\RR\Cdf^LUYRWURPKwv|osqnjmivxib_fang]{b]gdhmXJLPY^W\_YceioulklgfcO]]_][VOUHQIzmj`TR_fa}L]ZYW\iKdG\D:II==Thzy|xmga]_\Xekb\baYXeda\QZela[Z\STOO\T\_]XTQ^[YRROZh`baeesxpmcjie`WY\[WWZUXPXZUPJL[ZURvJTXOFChF`UWana[VRI`UIGGKWZWJGKGIDLJ{uErwKUQNP\LFPP]NLxvlospojxowjnhcelih_c_YK[{j_bcmYUKIOKMYOFOIKF9b]`g2032M^OGyFurod]SW]Y\TWPZhjYWWXV]gaKb2@;Lag[bqohaxm\Ybg\[V__WOKFrHNVQYVPQRQO{{~yxtlozsfba^VKT[SJXT;B:@OQWITTYi\W^ausYZ`_^[YXUUQQY[cmejmfgSFRbTP^ZS[fP{~wusIA}uw}stlkbbZbebbjmE|gho`VloehoF;ek9edaUPPKPQVQJF@KJEB[[RRLrN>F^[09PYVa4ejc^fc^ad^b93b\UZZ`g556e[UUSOLKN[t\ROPNHDFFD@IEHLFOJAFHKJHKIGMJCFIFBGFFG@?@:?ITKHKORFBHGTQHPUNILSVSSUNMCFJJMMKB:8?CFNKDBA;^::BF;RJ>?CNU>5@SC]E8GBFBDB=D9788;7>A>99>>Y_AGCR=>63:5?9AA?53632135669:76;?@=;>>=>=<;;<;98:<<9<<=@?;;:76563h5554465ihedeefgeddge_fbda355ggj/052301323513321:466663/--/30/1/+*-*(++-.033<=<2.0011./013351/1351/.1000**'+.--,+)+/11123534026:;4.-/3434232/01.,-/..06426;877;:100-/1042006114675661021/.++/1454311.34::84320/02544222/25444687867( ):8 6 R67366246: 79899986445563444$00032+,334331-)%&-1.)%%.752('')!)'&&'*)-.0)%)+'$%&&(&%$'(-10.*'*,.163220+*+)(&&&'''&((')*%#$&&&'/('*)'&'(')()),024/' #,.+*$*'&''*(&((&&()-212/*(" %#$$(#$$!!"$$"#I   +   4 +   &+")%# 1  -F.A        % !!  #  +  7 +"+'"&!-+4%$ $5 '8T-ZR5 + 8FK1%*4F6"$$)"/* !  (0)3 1,$0!%#!#!   #$  +   + +*'+#?##%,         +    !"  +     + +  !# )%$!#$% &$&&'/0,+,(-00/./11.*,22/+-.77456134110/210/.-.0c13457431/20./154450+++-/.2433/20)'$"&)'&#$&#!$),-,*'%&&&')('#"$%$"#,''))(+,,+*)(),-./--.10/./256Z572236668409:;;:987?=<>A!!#&#+1 !%$#'0/05454113569<>!?>;>=??@B!?@B@?AB@<<:<>==>??"!#"!""##$$"%&&! "! 12 "#%$&*'%$%$%'%:8#%''&#%(%%"FEFD?FD#"##"" B!$#%&DGCB<:; 724))-+58=E)+)IC==?FJMM<801.153,,+1:3:8:AADHMNFC?:==>>9>@##&''8%##&&''&!''%#!:;=06:C'HC?ABDA>?=#&##%FHIC937;?GLFFA>@?DGCDFFHIJJEABCGFMMOMFEHMJJIG?GLPNLHGJMINPSRPMIHJIKMOOMLSWZ[_^0.,--/..XV+-YUWWVUVVRWXZWXVX__363dbd_\[PS]XUX]d3ab^YXWTWKMSOPVSQWYUVTY/PR02bTUVPMKDKHGIB97B(*+'&C#+-.354752234AD=9466799<<;<94.+12-&)/9:620-&$!.6,29/12#)%HNMKMLAB0'5?5+,)!$ %'$!"$'')'"## 697-3502/1/VP+SDF_cWJKUTE>CHMOK=?>?>FH>97>8AJJ:3IQ==B;D@3-,.686:<7>=ABECB@=>:.:9:99625*2.PNCL3437T87::32::73-3:@7434.2-,405653/.733/.+2<78597AD=<6=<97215411402,242-)*773/TRTVR?E+11,'$.$6-08C761/*;2)GM'&*354*K(*''IIFH&+*IMGAG(<@*0.-.6*'M-MC,6*,PDC;=@@=9B:A;=989=<:5852)1E91459--'(.)+2,%-'#3/++%1)C&FB?'KKB>;32+,/++%)'-98,))-+/51#*(5:15>=75B<3031,,(*)# #==; #&"=;06'#?@CBAAD>A=@>@C;>>>;=577550&6;16=<9D=9?;<650-5($:%(,(-,(()+*=?@>>>:;EC9631/&+1/*0-!&,1'-**5.-12><-/32101/-.++//4<8;<99,$(4,)30**-)@GKHA?:(@#C=>A;>:;570364544#>78=2+::446#6 CG>::<<33621-*17)##.96B:'A;30-4A<8787:868:<:8;;:@A96-568>A@?>>?$'?=<>;!$!B>79>A?59DEDC@:;=9=<@98$$D<50*./*1;6525340,+*%(,)%%'''02//,'%$$&+'&'#)'%'*(#+$#/%,//.1,%%$'')'#### *&"!2# -%$#)/3/-00+,.,.0,%**-1/,*)(&#$%+>.'''%%'$"!!! " $$ $"!#%$"""!$#!#$"!!!" !"*#!$&(!#")'"&)&""')'%%#$ "#&%$  !"$$ ,!& $*&0! !' !U/210//..//.032/1/1/111Á~~}}~~~}||~} +||}}~~}}~~}|}}~~}||}||}}~~}~~~}~~~} ~~~~~ +~}~~~~}~~}}~}~~}~~~~|}}~~~~}|}~~}~}~~}~~}}~~} |}}~~}}}|}~ ~}~}}~~~~~~~΀ˀ~~~~}ׁ 󄌉|򓏈ҳľ­üՀĺƾغʼn󂈀ȥញウžώĻވԲҀÂӌ冈񒘲ˀͧ嵪߿٠ӷ􊕚̙Į͒үϱӉߒ̹ܕܼΚ݉틨δ܀筙ì󋌿¼硝ҕͼ܃͙ðǓӠ֎ζࠁľ斋ӣ̕ܪݳݸĖԜނٕ҃޶೧ߎܡ®ͮ񕐈邀ɥХզLjȀ֬ɀεζꀎ򃏈ý΀ѵDz¾ݱ밍Ѐ߄܀̂󁄁ګûÿͼ􎐐ܺϫ†μ⃊±Ĵȭÿʾދ騶ȹ̵Ӂ҉鎇׺ŵǿÇъҀɺ톁ͮɽ손΀Ƚžϻž仵Ǻǀĸ½ȼηʕ褳cee5g`d87766gejlkmoomddfcimhcbd`hgehg5jdfc^ZVORVVZ\[adlnosidcei75hgg4g55ecdhfbaaa]_^[V_jb`cb_YUX]_`^abbffglmrng``cghikhbdgjgfdea__b`bm84hhjr;xsmdb__^chd^Z`fjlifefilnig9>;<>;:8lifcbhfcadifdechcchiir===<8loqnlm9<99<=<=?@??=<<>=:9:snhfiicdcgg``adeg@A CEDB@?@?=<;9;<><;<<::;=:8::=?ACA?3=??>==<@?>><;;su=vr>;:;>@?;;>;;;<<:;9sokp<>AB?;=>98o;:oonmonopr9;:r:9::;;;<<;:>>A><;;DHC?<;:::;:<;:77875b:e?<5446<767<>==<=;:::898854e799;99;:99:;;:987863h`]e56579:;86875575576:?;kg^brkfaVMAIVZ_ZQQFKLQYYUWXUVSSTSPRUV\[\\WQS`^a]_a_\[`a_[Z^YVW\WVWSUTPRRVSNMKJO RRQORTSPRRSTVVW]`ZXK@DGTURPPLPSVSVVPPPQSY_`cdc211012bNEPOL31352Z130Q\110^[HKY/634/61531001.UV//0.W]I896.XXH8A:5V8N3*63@18<4-29+.,)I4()*3'4FD0*,4\f->)"#<@.H]?F522/XQT34a<0&$#=`I2 1;Q<9>Bn]L8D9T#62%+C"%A68J9-.F'!3Z%,.+>T+.;=HU5O)AX9[:9&>;6%A1OFG%# 3,,>W9!5)95;@L6[8ji^ySWeM>_F5FOS429,6JLMXU]R&d?92RBX\,:JPC-3AD8/9?=WP_33P5-EI69I8&)"63(,HL56+?^S5^JLXNr4\F_fEgd5QV5WZ@ip4_?O]Ob^]fssLHY1.C=*F3-<#@M>C)GNNLQD3D/3(,1540/+*A>,.+0/UQO:4VP51*1H0%M+NGJDDPA&&-41572(-Y312WM(',-2;A.44CG3HFQOK?1(*&6%P'0..>/#/3=>45/Ca6LN2 -*&8CE9.+-?3B79CUR07b`\\/10/M.6<5251SUFSXRTMY2]2_a3c^VTRRSWTY]]]bdeh595664`Z[\_a_ccdc`]YYUS[^[XUTUSSRRVYXTUUZ\\\^\]`b`ba]Y\]\]__\\``WV[`fkil[MHHGLLIC<<==>BIKQTXQLIMMORRPSSOGHJNSXMJLPSSSQQNOJLTY[^ZZYXXWSQRZ_cfcbdaba`fjhc`bcgggkmo;;<=:q:>>@>76aV?lgH;??ADNSYTU'XXYXOR\_fhkqtonpsmnsos<=GJGIFFGIGBEIHHCD@=xuvvvtvtpstsosrptvtxzz?;75d6ijlhfkv~Cxnmllwpxzphfdigdneacbfomrus{zyzzxtokopptpopsv=7:CCBADFDA>BshlkedcU]hb_dpqprpmrtvrpqvz{{vwxtmpnjfcirjnw{xronowx~|{{}wumls|zwuuywxyyqzxwvv|{{z|||~tILNMONNNI`OL~{~uHKLN{}~xyKMNSSQTTSUURTQNW_a^a^``UZZ^Y__`a]]]__[GFHHKU_gddigad_TDBJFroda`\Z\h~JmprdaoyHLGELQMHBBwypv}wwssuvojibj9loAKOIFIG=7CQQUHsc_WVW[evk}zuwspikaGJX^TOPLHPVQOSX_\`cehnCleXLNYVQOSHJuwu{nm~tiiggcdbgeb]]ldcafrstrNXmfSTOIRSQUPILV]WfWGUWNNWTP{s}aO~Bel`mSwbmtdYosk`JQL|g@IDH?9&t}vuqh`X[XZfrc[^^W`gc]Z``acc[\YUQVP]ZYb`XTVYXWWTSX_[`ccfrxrfcgfa_^]YYXUXUSWUZZVPMPLHSWR]KVXSKEA_YULXZ]XOJJW{JLIMILWNIHx{HGFojOoQS[WOOQJP[MKQFR}kusskixC|~mjg^gfda^^\YI]vl^hj`SSPKPNOLKHGBZMAX]eaY^//H^KDNQNDJFnfjZZXV^_jb_e`e[]YT]_im`_7TJVQ\c_Zflkkoke[_bd`X[SF5B]sFFHFBCBlze?F@DErG}srssupkkkd_[b`Xddbhclopibfktgi]d5:?DDIWTQY]WVOHTJ~zlzzbbgda^\]XSFdV=b=:MSQ^Y^fYX[]jqaVYYWWXYY\YV]dgmhhijgeOJQYQXWPXCNyqr|zr_>PE}{ny>vshcff]dX`arDAk`cYcheldpuo=wFrkaa`]XQOa]MJI_hljpunq=skmlghjoqpplnjlplwtvrdiehkvqummAHKJGtjpt;@@sxpqmphr@{tsqmspronus{{tn[[\X[]V\`Rdh>md]ZVSMKFGMQZZZ^bdVQORSROPJIEMJKFUVPRTXT\dKE985h_^WOLTRQONNEGJD;LKY\FHK7EcK_5R[`7ifcdf^aZ[_a^b_b_YWVY\]`55`YVRJGTX[b\PPPJLNIJGEAEHF?LOLKIHBJKKIIJIIHGAAFDEDBNPFB7FPRLHEGNYTNOLMLLKLOKNTQRONKHEEFHCHB;:AACEDDFA<42B:AIUHEIFPg@XFV=eC^FJFG@HD9D7=<9<8B95:CBc:UIK<<;<=B?@==>?@B?<;<<=<:8:;==<=;9:;955455567f4446jegj5heffda^bae5ed344gf//1-010574556523336852/0/41/003/11.,+'***-,,04778<621022100/-.221002000.+.70,-./.+,./../00211559750/023100,02312220.}-00042238?<9/0/0/031.+/1234323567642331021112651313//2347489767 76436732221-/0232$ ( 899:96885A5777524 12545656686 !! #!# ++11-*0T51+.940-(% $')-+%&##&**((('(&&&'')((**+*(#&-+-*,,,+*-.-+*-*'')'&(&''&'#$#"%&'&%'))%&&'(*)),.+,%"#$*+)'(%&'('+,(.)-0121.& "$$"#!"4    +  + + + #- $ &!3$   +$    +  #"": %! ">#8 .'"#:./YWvfY5)!:.8* &# )/ -$ 6  +%# &,  +" ! $      &&##%$15,!# #&(   +       + + '!    +  + # +  &%%%"%#%!"%'(*+,(('(),*/20/2432000/00.02232211-)**)))*,++*+.00./.232234333210/0022..0/)),.2635,'%$$'('# "')-01,('*)*,-*++($&&'*.('()*++()()'(-01301200/-,.256765766548:96677979<>?!!""=">+&50$"#"%*,0-.1210*-47;<=A@=<>A;>A?A"BAA@>@@???@>>?=@ABC"#$!!"""##  &'$$"##%# !#!" !16!!"#$%'('%&&$$IIK''%&&''%$%&'(('&$FCCCBADDBCCB=A@?DECEED!9 -38??=>DJ(E<:;>C>CE=42//0.740239@?BCCJMIIILB?>=@@?A=8:;89914;66:DC?@B?BBC@??DFFGCDE?=BB@;7:?;;BEFDBBAIJNSQLLJJLNJFFBBFOKJHGHJIJJJCIIIGGNTNJKMKJLKPVRPOKQPA-//-.-//+XXVSPQOL5OTUQOQWSPQMTVW[YSYc31[ZUSTQQOTZZTTSYZXQVWURQTRQMSTTVWUWRPT[TQRVWYHIKFFHE=F(+-QNPTSVSRXZZ]VW/OGC@EFACHJFGJ*,+0/./1133010+08:7878835483778:757666'%$$'.4956;7252,#!$!42,++*)*/@'ACB7::12:>FKJOMFG&'$#+-+&#$GDA:30))&(/:5BA?@==770"*/(%$! "%"##')')()*, <83*-31+,1W+)RICG][IBQUE==LGA:9;:999=;:78D<<8=GHIG1:JA451.TP21251-0895@1L+5502873WNHRNUV;2P+EF67<;8765221/21/10563.-/-+12TT0:L+230*P&A 40.)3452-**1MKD**(+(+3-LNP)&JGBD(L)(Q=7E,9H,.42.-/).4,J)-%0G;A?@:8A&DNE:982:9753542'0@92781+,,)-+-+*(& ("*,+'#&"3&"*++$)'H<55,.,*/1720525-+(&/178.* ()/6507;<<<;711242*($+8$!#" !!B6>/$ #$C4./0-.01021/258<:;;;97(#'-).-'(!&A>>CB66;6:9678::9<;;::;8><=<7:67:@=?=:$((%%<6:;!":@;=;<8>#BFIH=<=:>;;98<>:652478756kheed]Z\YZ\a_[^`a`][YZZZWXZ[Z]fghhd^\[d7788gegjigedefceb]bh79967:<8:<>?%==?>=:9mhhhihfjhbabdefk9??;9;>=:8:<<=? AAC@@?===<==<;:;:s:rsqpmklopoo8:>@B@>?>==>@>==A><;:p:<=?>;<=<==<<;99:smrsq9lkm:=<<<=9;?@><=<;;<;99<>>9:<8p9:9:==<=<=<=<9r:>DA@BAACD?><><9qpstu;:;==;<<:<>>;;=;7o99@@?<:E>ABA>;qqpqpor@IE:8q889<453356768;<=;?>:;>>:899:<==<;:;=<;9;AGGFA>:5^47479<<9;FJljr?FHND&6I6V*45/3.6.10* 31031-1:Z%6/ .8!4.)%0ULcZZQqsHROIO`d8eVfNUPyCQe>1>Q.FZAJ\VW-.1/>; 4)txOhjxxaeDq^xkGl\|KlswsCKZ6`/9q?;E6I(=B?Y^HnYW|L5DoWQQOQUN_PXO\CBEA7M:<"$E3I>7DCHO[XOC>I4E;0#51@3CC74EJTK[U[T]HT61:1U:40655bFpfEx}NXIUN[bu.oXlneEZ353-L3+-*2/'D<&12+J@A'#AHC0'%)70F7F*JN-.),-+/U*0>1/4%+3CXJQK+6,L.O8#%98*>9-10S441+-11-#*;=?B?:566d`fig=ABDJTUO5AJSYebYX`caadbbcsylhpklqqonfejlrrrsrrfgplmmnuz=ACFCCBDEFDC?@@BCA:GKHEGA?BEFEDBCEFEEFBBBB@AEGDDGGFECBB?wvwyzuvpklrsrqkquosy>BB@@?9^7:;lfp`TZntv>qp;::f`rAAmqvvkgrtnq><:9787<=<J[256Dkk^RW][MUSLN|yrti^hi[Zaockdeh`WXY`^dk{mtfKG__Us|~uPHQJQSVI`[UWd]XJSy{|~vs^JrE[\dy|^[jcxo[xVQjVdW8BEE@ZZ65GslkaYZXhijZZX``dkf\UZY\b\e]YRVVJ[[ZbhYY[a^UZ_VX\ZTeifxytgfgdaa_b_WTKU\V[YUYWRVUMJKRNMQUKa^NOTHd^PRSOJUMEFEDGETRPMuEKNF~~FgNnKT_PHERVISSN}EMHEmrqYs}vs~glzm]fdab\XV[[gfggbYYT]LLJJMC?CNZVMQT\S_7/4;WLOZUJBKF{pc_Y[[binkfg\Z_bWOY_bdgm4[:I]iff[_pif_ii_aedg_dWGLMK[IFMLKEH|biMGIJFm}of|wmnrrunkehaX_i]Z[bfglkbfgb_chl\58637@KZ^PY`\VJBLOH~~rglj^krgba`_]VPBbLjHQKJIHAKQNNQPLIIID>CJCQILHPD;KSSQKGF@LRPWLSPQQOPOQTUPLPMJJFEGHHCAGABF==DOIA:W;97AJFGJHJkI3CP@eNUBCJrFEEE-d=5<:A8?4?:D>]?ZOZ8:=8;@?;@>:11`acc343366:;95;=@@<=?A?;;<<<;;;97:<:<:7;<:45643454ef657lg67985fffi_^`bffgdc344_--000/2266204520-,15410311242-,/+)(,('..133/222563220-/,,/22--/00/.,.++--,,142430-+11001121102/32./17532R112334310/01026945562333424665323//013145586887635342/012423 988776336777!9:68876664T7! !!768993  4344345#!3,# !! )!$998/3-15."$$"$061$$#!&'**'%&&%'("#)*(%&)'()'%'(((+**-+)(()()''&&$# ###" "#&'%#'(''**)('%)+-)1'**'*)(*(+--'')))'((('''(**,/-''(%"$$# %"$%"!"+     + +  +  + +   +#!(&   !   +  + +    ")''"!#!( %#72 !'('   PB-?MOV;KU8/"#2'"9"#%)* +7 8!&+!$!   ""&("(* +$    +  + +       +        +      $! # #$((,-,+'()*+-.0112003355223343/0/+,-043320,+,*&%&')+,.321,,/.13221./24431/..246675/.,**+),...&#"$')%$$&$" !$)*-,.-g0,*++,+)*())+''%#%)+,*(++,0320211003412210/.1327:;:8664895467A48;;;! !" !" -*.15"$%(-*'"&.0741168755@D=A@=@9:=>A?>???66=>AAADD!##$$##$$%$# !#$$# $! "##"# &'%%%##$&'(&&'))())'((PPR'J%'*)'(*)(('%&$DDDFGEHB>?DCBB>CD@@B"#"! )<BA 5775<"" 524-07=568;>BBCDJIEE! >BEGHIMNOYTMNMJIMSMKLHGIQRRRKM,020.-*SSTOJJJIKC>NQSNKKQKKLIHJKNNJMQV[ad[VUTVOWTQSTR(*UQV[ZVXOG4ITTOOWUUWYTRPRQUXUJILLHADV*KOOOQRRSZ[[\VQNPU.20᦭?CHJ&&**NK)0760/59;:?EDB?@<34;=<=B=;===?<;>>A?=::;<86>@?A?<<9>;93)".(&).6878899883,5<@G')&$%$% !BH:=@C?*/7CA;9897;>6/1 $$)()*'""++IG8460& #3379=AC<=<,---,.31*%%$!!#! %#<>6.354+20+.USMGORQECUOC:09813:C8>8;:6444:9;EKEJ<-3EE;QVTLY^2T,0.434,<689A:8.Za8QSRRRKH;/M2X3!&%&)++2WLKC>>9243@??543669<:4043483953/30'3248<124:60471243.9;8EC>79;:888:60,(/5154133033-++/--03Q,=9-.1QE%94),.,)/)%&%"'I'0--+NKUMBN'*,&CDGHFN(I6E+G9).5*'&01(//-C%*&&<@>KF.AC??F6>@;;895.3<421678<;551+',/2)%02'.10-&"()&CCFG=6:;2:=97553530':&4%..*1/--&());;84,,*,04.46466>25;<97782/+'-..9$@?368$)AB=?"D<=:6545379<;!$:8>(*2602;71$;2"EA?97644121)*(.:62:5A<6A <:=972329?;==849:7;?D>=G;49:@98($$''#$!9><=<:2<#"BEE?A937;><77:9!,&#$%+')/751/+-+*&"&'-*,-+*,+)++%))%#%*&'#$)% '*!&/2.0-/-*&*)()('&&'%'(%"$" %&%"$'-0*.,+-/1,,-02-(((*,+1,*,( !)-+,0*(($""#""  "&"#"!#%$$%$#"##!#'#" &$&'&$" $''+#*'(('(&%''%#%#"#! "#!"!!&"'! "! 6#!'3&+ " !-  !*(,"'+--+2.0400003.,-.12001 ~~~~~}}~}}}~}|||}|}~}~} }}~~~~~~~~}~~}~~~~~}~~~}~}}~~~}}~~}}}~}~~~~~~~ ~~~~~~~~~~}}}|}}~~~~~~~~}~}}~}~ +~~~~}}}~~~}}~~~~~}~ ~~~~~}ہ 򀉏*ރɦȀǾ¼ưž»Ʋ厐a’ϴǦ𶫓󰬰ڶÏϘͨӠ׺܌̒،ȼۨՈȚÝDŽӿԷᩩ凶ڵꜦ̄ﲤΡܱݛ݀݉톋ij÷ǹ⻔ߖ¢ҫ꟫ތۓɠڙ됮޲Κ̪卛ݨϲͫԆȮŌﱅꈋާͺʲڝ߀ߪ⾈׏ܫϺ͹ڛ⣗켽󋛚р¡έǹÖֺ߾蓈െ󒱷ȀǾҿľĿȶȽȵ􃈉ꁈ󀁃ǿ׀큑񀌏½ȽƳɹհ폗Ͻ珤⊌Źɼ̾÷ႁޏЭɚͩڽ􉎞ػⷹùꗩ愁Ȼʼ򀀏üƾíꔯɽ͈Ǻóˌȳ̀ƾǿځɻ񇍁ׄ߂ҍӿɀùĽ¾´̛ބưմϺĶ򊚤ܨQw64kfbe6dadi57897i459:8kc_fieb][`cb^^diheag5jfeeca_[WRRQ\]XVV^d7@=:op:9:>?@A><=?>???A>===<:okhkkkmhcbcfiko7:>>=;:::9<>?A@A>==>@=>>==<:qpopompqpqmljikmmp9;<>>@?>>>=<<=?=;<>=;:::<>??><<<=>;urnmkjhr;989=AA@@A@>==:;:;<:;:;<:9;;>><<<>??@BBA@>@B@@BA?AB=<<==<99:;;==<==<<;999:9899np9<;:;=;>@AB?<;:;9oq:<>;9;<;::=?@??<<<3:QNE;444656889:6:<><<<;>@=;9;>::>>:;<>ACC@=;;>>=:8@D?fk=GF;VXZMLHIQOIRYacYKLOG?IQRUTVTTQTQNOPQSVSPLHRVX\WWROLNPSWVTRSSQGEEMQOWYKIOPROKRTRTVXSOOOPPSSOHOLIOPVYSTV^WRTW[WTQUKDMOQSSVXVWUY\Zc1e4UMV54062\Y_21^YY]1341035AA6444/0XKT0147443>853F0G36JMAERQH@^=89YQ79>R#=FF6gO9A((0R-E,D25/4D4546%8<11.N7931/-RLO*-10/466888R/,%"&D?8@@A5B19E:65H.LED+:55$:,D*,L-PF6Ad1MW42-079:98[VN8NDyjmYSnpuA/TXlo^wY96-L0/4>*-.BUKK065)KC/$.6*.2%9V>>4MU9301EGS>+AC9;;,7D/R,,RJ3);NEP='=0=A,3jIB37JU,01+/2/5<878A(-0/PRQ?<@>=3cSOeYRIIDBDTUOMJTZNXa^\bdgcefe^citdhhdjpoleehiiloklt;;>|@AECDCFGJSIB{}@}yv?@BCCDDA?>??|slgfnsnrrt;sq;>==:8:;4=:thixvkqAA?8;<;@;f8=:9l??@EDCBwtwx~BAD=wxlfnmgq;:<9ppo9>@snmokjpkehspjhkprgdaiqu|sicenhhmkbhfhlsoqtx{vtqqqppnnrrsuspopotrw{y}|xwtrvqy{|yvvzxuw|}}~GJKJGxqnprtsrt{|}~zzxyxqps{}fF{sop|~|zsrmy}|LRVTJKid>DITXZ]SIMXad^_[\b`acecaorohig]YYfkojkkmmlliehljhjfhhhiigjghptysokh_]SHHE@vtqklpxr@MNJDD@w<=>?;ojvnk}ypo=tljmk:CDNNRRUURSSXYOQNumqqkeZ[rut}vsmgosmd`c]XY\[_YOKJOIPQOY^3b28Hhf^Z^XPOMJwseWii\gb\RTW[WVWSSY]\]T]ZRac^zv{d`|xNWTWNk\SO^~{qcUTFE`VmiDRkxCNXhgVaJPHxYRN6OZ]OJc:Y;W}}{ndcX][\caXZdbklbf\WTWaf\WZXQ]ZN_YX^meXXVbX`og^Z^^hsonnmgfl``ab]eZWQRWWUVVUXTRUNORP[WTYQJLGLJLdfTQQNLMSNKHDEKMRUQLNLzIHzGEtpLQVONNTNJRPJFTQNKzxz{oslks|pZeedfkMYertpT\ko\[UPLLJONBK>AE=9DPW^ddZ56DNURNDGKMH|zsg][YXadhcd^aobZ\ZZdhiiWJP@nkeabo}YZ_dckkgab_Y]RUWZRaDOSNJIuCuA=IEHOJocqn}vjmtvni`kk_ba_^`bafplkkggacbc2<7562::Oha\]VKLJLIHxwnhdpunjhciYUYQHFfUgERZI_\JOXR[AKfY\WPWWWUO^kecYe[agbcaQ\bfnoy}zupsqjuvyq\AJRutyJNsekaaisiwqC|rjfZ[Ziko{{smntxu|~rjgd_Z[ZURQP_ganq|lpA}wsvaXihimnmw{{pjepvFIBFH@kfjqkhaNqmh>BI=|z|wnl|uqprhkzB@zso{unhj?B{}~w;81/MLaa_Z:UTJR_^^^[R_]]TMNTSTTNPSOP^Zf]WPOGKMPVSOSPJQKKQTVUUba]^^[_WTSSQSOUSPMTXNONI?>PRmTKGKHIEEDQRPRVOPPFEHB8LH`[HIMFHIFPRJPKFMGGNJLNPMLKORUZVTNLRRJFIHCCCHGIH@=?GNG>;Z7=@DKP^E:EK<6Zh>AG<<<23`]_b324346899888=>>>@?>>=;4:;;;<==9579:<=;855684455gi766ig8865fbdeefgb_cbaig45710////02381.141/,+/21.-0320-042220/-,,)*(./-+*./235420/+',2212420/0/-0101.)+././334115363336520233366/++-26558301334520146435776564346553/00233357 642456520122334 "776876654676555677 + 87452119&  "3433## X67 "!+15,+''+&"&)-/)!"&# $&')()'('))(''&%%%&(&&$!'('+((%$#%%&(&! $%$*.%"%&&%$'(&(**(&&&''()'"'&$('*,(((-*'(*-+*'+&!'(())**)*'&(%(("$#&$""%" >   +      +!  !  !  +  +     #06;')/1"!%3(!=!1% 3U !8@CE67Y2/0'I' 9*** !!$6G+ !0G"*'!!% "#  "    " -"#$* +#  + +    +    +   ,   M    "'!%! "$$%&(+--.{/2448732341,.211//)(-./2970+)'$"$&&&*+-,,,+,.0121-//110321.+44452100/,-*))&##"&%&'''*)% $&'*,...0.-,./.,-++*,,*(*(*'(./-0/0120.//---+-313244565899:;:::88869;:99<" #$!!,##.(&%%$##-,'(&-2*1733769688736:A7:97;?<;67889;<<=C" !@@?=?<;! !#$"!"!""#!#!"#""#%##"$$!"$%'%%&&%"#G%&)))(*+/6,(IL'JGD%%&''()%$$%%MLE?<;@C@AAB"?>C?@IG=CO('$!6:; 9!#%&'"!"!"BBFIL&"&#AA:8<;9A  @?? ##AABB<9<97:CB?>ACA856>>AC@@CBCAAACEEDDEHGEFEBCDCFCFMJJRONKIFFIDHMQUPLKHFGKJGHJKLMOQNMMOPPT,-..+PKGC@ADFEEFKKLMSMJOQFFMFBAFKNLQ[[VYVTPMP[TWZRRVO9$KXTSYTLECFRRKJMQPMRRPUYRRLMLIIFAA=EXRGGMPMNQVVQTVQPQPQS-010*+H50#EDE)25350)-7>>9959;;<<<::FIE??>634?==:;@BEA@=;64,&%"532/1287 **% 8!54?97AD@;5561020!''+*,-21*,*HF?:<<60),8:=C?=949;9222-+-.++&! !"#!())":76372-P-,+USUMHCIYYPOJA81?>7>85312622411698:7?96AC?aVWYBBWW]ZYLLWZN1435PX1`E?85?WTMC87./]C;^KG+3CLT+4??>79>67785;20+.12220/2//2--0.7525/,,SP)+*H*:<0-,+++/*)($$)+.0-*,+RPIEKGM(KFJ(MNLJEB'%=<+,/*++/,(-,*(1.*(AABJ@=G?:<@HJC=07658=*2:AA?-19;.1.+()(,,%*!$&((#&+)(#&(+)DC?7.-++58:660290)'&)220/' $ ;9856?F/2366:75240-0(+*+#)!**'%%<$: %#$)'F=5>9EGEA89?@=82;<466522326<;;92,(***&60/2-&&%&&'LFGBC<96<>8864;0.2.*)7(0",1%73&'*%-'6/31+--.-(09771926:885*335::AB?<:?<7:<@<+$*EG?:<%*F>6;626:2=8"><9821.65:AB>549>>DE>9853/23/.++374&($$$ 658<742*;;2 #'?=AB<7C==;>98?#!B><77!!?BC<*'(&,.&*/000/(0//*&&))*+'')((0-3-)&'"%&(,)&(("'$%')+**00--.-0,)'((*),*($+.&''$$#1&.$%,.-1122/...2,&(*+,+..12+#!)+('('*/.%#!"" %"#!!x '&%&'#$' "%"/,!"# #"&'#'" %"!&$%&'%%$$&'*))$%((# " #""!"% )#&.!$,4"%%%01!)*)*,:03210../012-,00.31с݁ ~~ }}}~~~~~}~}~}}}~~}~} ~~}~~~}~~~}}}~~~}~~}}~~}~}~~~~} ~~~~~~~~}|}~~~~~~~~~~}~~~~~~~~}~}}~~~~}~~}~~~}~ }~~}~~~~ +Ԁ者逆ȁ~~}~}~݁݀ 񅄃󁃀ϾʼɽľĽ¾ùýʽ􃈍ɲ䩗ᬵÞᔤ酡揱ˌ頬¹ܣ٨ρ٫ʸ򃫤ӮւԣޣڲˀљӲõÒⅽꈤ߇ͻܔץޘË𘦍ʵ˴𠦺Ԭֽ֠ԙȁͶ“偙Ӣǀ˒Ⱅ롆ʟ욃ȁ鉮⼳􂳔ںА徸ҐɢɽշʀƀƢ頺쟱ʓިﰍ¸ȆϤՀ¬Ƚ銎ȸ񋊅оþͺȀ򑗘ÿ၇ŜǴހ񁁂脈񂗟ꂊש毩؀˯Ⱥ7Ȱոïݹ߯幟ߌпưLJ¦ʾɿኒٮڿ²ٶ˭ɵЗ¿Խƻʵ˹鄰㛈ɿſȏƺ񋚬ѻپ·ф埪̿ƿĊƲƸйȷȀ̺Ļýך臔Ⱦ̽ôڽſŸʹǺë֝􅉧ŜӑE747jbddc^`b579985hg6km9jfjcghd``^]]]Z`__ddeggkhl:7ic`]XVXZ]TPT^bg9988989:754ef76jgd]TS[``dafcbagdikffgdgfbc]Z[`ea`h957jgfkkjggigegnrmeb``476656788<999756nlga_dfgjdbeg989nll8==<:89;:988nnmkkjfccfhkp77==<;:;:m8@AA=>@AB??A@???A@?<>;987m7kiikgcefjnpm;=DA?<:<;>%?>=<>=<;<>?A@?>?@?>??=;9:99rq::98lkkkmp9>@=>?@@?>>?=?=;<=;;;:;;=>=<===?A@>;:999:;9n8<:7k8<#=<<=>>@???><:9:;?B=:=BB@CEC?@?nADA@?=9:A==;99:::;=<<<:;;<<88:::;<:9;=>CGA>==<8999=A=9:?>=98BA=8d~NLBe^a@wFX>@?@P]a`WSRGCG@FKQUXUOUXTQLOQPQSPJD?JLR;;FFGJRSQSRTSRNIHBDTLJJMNKJKMKLNLPRRQLM[ZRJMNQPPF?KNRRSQT~oV^da_abcWNOMMQQSVVUUSRPUW[\X^/3210\XPU_2]\Z^]02/\Y^93W[\\XUMOZ0013356542.242OKBL-IMOUWZ-WV:26.M@C1o4@6L:ILQ_?8J3Q(8LWT1A9]jGE6)?K?9AU120-,)),1112267668769'-(&$ '"$@<>0;II:#44=ED/JT-)TNpUx.Mk_U^x|inr{nDiK{K#5B.Q<4%?EIY1!'*63%3%! #!!*/@?[7<4Fk7G,@3[G$]@>eI4]5?7V[2/17::8H?4?xi>RjKwtqUq=PaYFSb4+B';369[12:<963S@3&-FL,O*3,WS.=$ (.:>1UJE>ERX-#D.LNCRDC2B.35>!&$? *J56.(>96,((/42+(/:-JS*1535UJ>6;?B$&%I9MmF''=6Z!MADC1@QWWMOIU4OE;LYYlhUOBT465hX[PJLMMLMONLORVUXY[\[ZWTSWZ^bdfhba`cfcY_6b[7556lYVXZYUW\TFIPTV[^_]WSQR]kh^c]VXX[\YXZbd`dc_[\ZZ\UTUPPPE4a?ABCEMQQRQOLKLNMPRVXXVVVTTYSRLNMRPMPNLMNRSUWSRUWX[VTUWVVWXWZYYXZ\^ab`__cdbgkihgfdba`^dhicd`9<:>>=BEEB8_7n^TK>ILISYTIORa_`ehknp9rhk:::nfjld\bigagghjs=;;rknp=>?vnqsqt@?CJJIGB=?@;pry{{v|@@xqqokfdjjhihfm;j@EC;mpqrlllwECCHFFC?srw{z{ut=s>?@DF>xwrpkkghptmhbMzPdgmklkgjkhbZdfecbnvmklib]_cinmibdhqrqojowyoljlpllnkjlnpnqttut~}qnkppz~vsmrzut{zxz|||}xokcbglonsszyy~y||woy}{t~UN}~z}~xy}}{Myn}Q]]SQT[YUUVSPW]]aihdh`c_bcbXWbbc^_^ecggc\W]ecd_ab__fffhf_]YL\\^_behjiloqtrtvvxxugSGP;^eYWNJLMLIC}xyzmeqtgkxqibYTMIJDxkCJRDWNDNRELCJQRPLU\b`WQS_n_W`[gbb`]N^X_nqqyfignlqswAZ6XSFq]kjP`{klj\TNly{}glw_SYe`wvoAaidfljtutjadc[[RHNTX^kjdb]fmv}milfZajzsjfghAzruqwyFJIC>zyxrghiDuw@>@||rirsjblz}mr}xsptjlrfk@|B@==6[Gfhdidb`UMIITbdOL\]ZUVSWTVWTRIQUKWlXWPWOROORRQZeWQIJMMXVNU``^]ZZWXSVPPSa^^SRUOVTPSBDSWR4mMf7I[6=7ae479kgic]W\^\Z`\QTZdZ]URICT_ROJMSZYOHKIEGE@C;>JHIUX=@ME;=h::FO?JHY>6`:5bD;983C;@?Q:4659:<<9;9078_\b`b42354799856<=ABAA?=;;;<;:<;>=959;?>8875766443h6575hh866hhecbbk8d^`abaci32/0/0...4246534-020//.---+0..0/1213243111-+,-/+'&*,/./323/,)-0/2013104245224144220--0100141246643539228960,,+7742035474343656451311222343 !!434332;332 97676566767 64; ! !R # /.01?'$005%IF&."!&*,,(&'!$' !#%')(&**('$&'&'(&#!$#& !$('%%$'&&%#!)$""$$$"###%$#''&'%$,-((#&%'&&#&'('('*B=*.2.,-13-)(&%')**))+)('&x#&##!"'%$#%$#"$!%&$"!$ $     +       + +  +   +!  + ( + 7  +  '3(,&& )#!$?86F1  36m((&3=#7 9C#1#'( !%*&&'$4'9DQ 2 +/$($-"$  !%  + $$ ! '$-'!&6# 2'       8 +     +!  "&  "!!%%/." #,&*$$&'&%&''$%'*+,///..-**-/14557443321.,)#3,-/00//2-$&(**--//,)'&-43/41//.11 +1--0.,//001-.-)))#. !"'**+,)'(()').1220/.,-3/,()(-+()'%&)+-./+*,../,*-.--.011///11355345665:=<;:976651576364 ! "! !(0*(% (((.0-$(+6k67::;=>=8:;69:406972568:= >:=>"!"@<>@>@#!$))*'$ ## <>"A=<<;;! :"#!!###%&'+*&%%&&&:'*,,,)*,/3-*))TTR'#FHGCFH&'GAB@=;9;97888; " ! )!8::;EIAEJLL%I%&&" 5"" <>=?<>@D&$"%##%$BEFHGFD@!@$%&()#@@B><;88==863(9)96<;;:9>@=8147578AE@>?:6369:??<8877:>BCEEHHKOVSRXWYWMGKJICIRPTNMRSRRU_[U[QDKTU77X`XPRMQLLONJJJKJFLW_^dYWTILKILLTX.[VSMG>NNOX[[YXZaTPQOILPQUZ2992/186113.Q05:7:CCBC;<9:=:23;:=9:9<;>>;406<;;8::68<<;<;674-787699<<<==@BA@@ADD?6*"2+6&(& )116051305=#D?50-493.,--)+./10.''I?=?;:<<66645?@::73-6;94.-*+/---+&&')()'&$$)%))$C96370*,2)RLPOSKIQWPECF75A>5?=7=-8-  /3)JFHD@92.3./@=:26>;584343026?4-/1-7308434:5340675897647:E@=@<8:;55955/2/0..01000/,02863U**OJQNF./,33.,.,*,0*-))&0-261,0/+RF>CGF'*NJHO(SMBFGHFAG&+.),+0G&'*(/8.M(@D%'EG?;EDIL>BB22@>4:0CF5?3"9=730.)&0/33-<&&*+/1)'(($!'&&OMJH:6,((15<41/,23,+*0862*$ "6943.8?@98552=;>36/'2(!$'&$,'$$(>-0+#"%)%A50L>GBA>6,=47?=:6//+*+&?5"'+&3-#&%!!&()*).-21,)(0;1-5284633*4.3<<:B678<9<<>#C,+*%L>061)4=6<9,/(2;>@4;@4/183AB9350.68A@?7245/2+#&'+0<:6729;>?8698158?<9787#FEF>?=>C%(%!@?=9368HC%<=  >@<8<<619@D;::855866kigf^^\[\^^^cdd`ff``gfnmkkib]^[YXTY`q7fegfijijijghkkjic\`4996h5l7886hn8;<:rqmmjfcd``eihfillj8;9997n:99;98lig66geeglpm8=BB?<998;ADD@<<=CDB@AA<>?>>;<;988onjhk:8jedhkmih9=>?<>>=>?=<;'>=<>==:98899qkklmlmp9:=A???@@A @AB?><<==;<:;!<===<=@??><;<<;:=<9opo98:=;:;=<<=?@??@?<::>A@=<<<:<=@?@ABEEBB@?=>=<<<>>;>=<<<;;<<;:;::<>>=<=;;<;;::<=@A>;:=;;?AA@>?BFEHC==><==>=;:>BDB>:9:4AI;448=:9::89<=@B ==@===A=:998:87568;<<9688449=:;@ABFJIJOFE>6798l;71DHGFEFKLHDFGJDB=@NMNOORQPOOOMLIFOhbPKLQROULPQSQSNMQQRUUMNZbSSd_XVff``ZPNNMOQSRSPNNMKPRLX\_^ZZWWXX031`_`\a31a\X^WQXBO[\a1Z00122324552NE;2,=OXPST-,WUSOKKAJQT@ZIEI29<6h?;;39>XBF2DTWeRM;8eRBOT-010...)/1.+/540135687A\>+($" //J;/+W?,.0<[QG4>(6K/>7,9VT+"JDBR1AB5:66-U26%HRNBWlJe9LF?=ZA@`XH57><4S551577.T+,AU57I]nJaWaqkN`uVuLLPN>=3K21DE8"$53653+J?# ?+COE)86*F<>M>F"6:?B\OIF&1@E1)-GEF1H0=0"'-#(<J?<@ +(!>D?21(J)13JH3,/7::4,MLL@T4FD9IQB\7(()2/W'<?:g9fZDFSWWVZ[YTVbefkl;umojfp;=??@:8i_[joj98k:t<=?>>>?@AACDCA@?><>AF@:AA@?:qopro9<;:;@@A?BB>@?>==@CCDDDCDDGEGFDFIJGHIHFFIGA=vtroqkmrz}=wtskbejpnjmomr?AA@9983jnofgllvyzwikquvompfj=?BBBDDFD{xtsz>==qj`W`d`[`^SGEnppnnoqtvnhfswrdejinhvlgfig_]lusliikpummnkjljlklikhgiijlmnopu|}}xFFFtklmv}}~z|~wytjfb_[V`intnhu~~{vx~|tv}{urpt~yKN{zzt\|ON{JMNMOPPSONPPOS[TMNURTSS[^aeigc\Z]acfjmia^ZVT`c_YNVW\cb]VRVVWYWZZZ\Z]acdc[cedad_\dlljf`b_^T=LKCyoy@ebgZmaf`n>AA@;mfU`gHykaXYOPOMznxtguug_eW\THTZZULO~HYLyv~kcbOo{ZR[Zj|pfp}xqofTVNaaFGGzUPPLQOW|[DkX_TFEQZTMLGUXESXR46DTO.1WWCxxsi]TYf^ikgg`f`cabaUa]bf_WWWMU[[]ZZ_a`TZWZ]XUWc\Y\flglki\^cc]^_cglc_XNWWQHLUTSSQLNRWTMKNNMxYNHJHM]WOMQQPQYWPWV[SNPMJ}y{FFJ~zwoGLGFGMNLOSWHuOMLNLSMMKJ~^uckjoeylcpxi^emlhZiVQupup_UHCQ\bg\@HZGia^afja`3DLOKKOFBMGD~xl]cZ_oh\[[Wdk\jvomf`aY\hcbTVWkwwmg^Z_nkkr\NRIGKORW_\5IC>A_VKJH?BOOC~or~v}yyi_XbrZ\`\QJead]fjecike``\YZ]bb^]d\_e:IXb\SUROGOI|zxzxnibdqsqec`RKOIIIDGHGNX?`T8>KTWV_UEGQ\innlXr`_a`eeaV]WUX\bbqufbihtgfrn^fKXD|khhj9SZF}XFeKQhV|nyjZUS^Y`ajZ\acddg^apmeiofYGSPPXehhjjcdnsna[d]a`mtrkl_q@?}wwsjVODED?rnqqvnchACu{vwrl^fkvy{y{yuokjcewHB@~xmnvorokjidXSIMLXOINQSVYXVRW\WYYT]SRURQVVMRTWPOQSc`_USOORSRP]^ba[XW\YXYVRYUYXSORVQQVINVX]R49JLTY`9656gi5ceba`SU]db`]SUa`YWQROHRbKPNPLJNJIIGGECD@CEHIEBGAEGMONMSTKGOIJHHECDJHKMLILGFCJPQTOOLHv?HMQMHMNRMJGGFBCEJIE?BD?=HKLI>?NJ@7@7?F@BDHBJ[9?LB4A8A8FUA@IL=ea<4^A?;78C=6>CG@E6::=<0=<9=?>988:=88:<8:8543356lh5666kjjfecbdff6:ka[_bf//111211122652156211/0.12//./--//-'.11/3/63/++)*+-)&%),-4221./.,.///222.12..2155443001.--)+0830336634453v2/+-24259;;:7523203322355545433222332!"!764354212440/1:6656678@787 ! !!# $""$%61'00 4.+),5/&*/""$,1 402$")2 !"%&&#" !A""! # $"$%%&%%%$$%$#!%67'%$&'&$&&'&''&)((()&(,/('3/)'140/,(&'-)*('&%%'&#('($$$""##$$%$&%&$'" %'%&$?#$"#  +  " !  + +  +  + +   +  2" + "#,#  $").9:"5;(.;1&L24*#2,3(7B:$#!#, G/2-I! (")()# +   +   )$"   ".+!$ +          +     !!! !  '*!%%&')*)**&',10/02012//.- +.246667435&++***,++,*(('),,.211,+-0-145//10/ +0.-++/0021010,&*# %'&&')+,--,*()*-/.-.0/+/.+)-+//,-+/,,-.++,,-00102232358831210/.1124456458;88;7565148765=" "#"",0+#&-0/.110+.589<>#A;;76>!!""#6108;9;>& !"!"#$%$$&&%$###!!$'$%###=<>>:"##!$#"##&&&'('%&())**),-/.T--,++-RMP+&#BA?>@=>AGG"BA@;7:;<97:<<>"!!3697>33!&#AAD@:B""=>><:;: ""$$%(('*(+*IFD=DI%#"=72-131.0-*%#>==>=<=@A;:;==;69<:?:D<89;953<<>B>>AAAB?@@>@@@ABCBBEIKMIMQ**)KQOE@ABHMKMOPQHLMLMKVYYVTVRQRPPOOGHC<840--8=?B<8CKLSVVSTIFGJMPQPOLIKORTOMS^`ZVSN[ZSX[\^WLOMKFDAGLNMPLFPT_ed]`ZSPLOQT-/[XJIGC8NPRNOW[WX\10UJGMZ.12^_11101-.01/383./413329:<>B?;779;=>BD?87422:<82*006;861.022546545348674/56523//7::840322(%%306+*-%/(.*4 /+! !,,')+/.,(C#&'&DA>:5666420:=75:9.01,)%(((+.*%(''*&"!"$('$C=834-..-OTUOI?GC;IE<7:17/*5652-TY4ZWW\\ZLWZUU1;0RLLRIFG6NY@_DKTMJHB79e5CE256Y<;<8;9>XB/F?B8..5;50.,24#)+*#-)WLEB<5.2;5<><=8<79988-657:6000*133423666,1/25333:545;=9===47:954486C;7?C:5:?>91=5/'$-58<5""*)+'+/2)%#&%&)$")&%EHIFB904.1:5.+(&19/6=89796-.635.0/:AA::403::786.*.**)$$&%*-#3)%,,-2-$$'.7;;:->1254664-1-,/142;>6385=C56=;-+"-#C:642*0%H, .'*?2A9B92/.3/65:103125823=:56<6/")%$*2657953;>;417255;=;:<2=$!BDB>>=:F1*!"# A;:>=@DD954!#9CA??;9259?AB@A@@<:944<&#FHEE"@;68>;><<;;6/+$('/)$%'')*+*&*.+-,).(&&'&))$')+(&''0-.*(&&())&..10,++.-+,,+0,-,(')+'&)!$&%%!!'(,1201.--'',--,+%(//+*''&!&/"&&'&$&$"""   !"""!!%'$#&'#!'##"#"! $!$$# #!!!#$%'%%$"#$&%#&%(&$"""!!#" !###&# ""/$z !+"$2.- ))-3342100..-/12-)+.0~~}~~~~~~}~ +}~}~~}~~~~~}}~~}~}~ }~}~~~}~~~~~~~~~~~~~~~~~}~~~~}~ ~~~~~~~}~~~~ ~} ~~~~Ѐ􀂁ہ~~~~~~}}}ׁ   V큍T߂嶽ʚͽÿŭŴǿɼ½ĺ˿½Ĺ“̬댙±•ɧҠܿ䊆ۯݴՒӰ߯ݱÿŇң΍ȼɦ嗀̙Ł՞ۧ̉ǂ܍ݼЁ祎甘ƿܱЌ˟æѰ礋ꂎ鰸ś蠱՟ѨՔڅ҄򳨆䉓݁䍟‧ˆ󕕔ޤ󂈌е쪙ŷ®пҀ怉􄌔¸Ļʨ¬ߦ·°΀ႉ ߀䏏덍聁Ͼ¯À򄄄楺͸۷ɨخŽ߅㉊ӳվ˼ź˵ʺд؆߃ƺó񋘓˶γԺƻ̀Гɻ«żñ򂇏Ⱥֹѽ½ǿѽƿ㴫Ÿ»ºÿͽ퇯߯蹇քŸħǼõ̀끓󉊄¾ȴ̺ĸԀȼμھí˲ƹºĿɰƜΞȏ醔Ύ*dcbg56kil666:9lp;t`fggcfkebfkka``_`aai\SUY[\_j75b66l^VVVY\XORRTX]d6779:87778j57ljfaac`_addkjb]]dghegkojfiied^_^^dfgffkk776kjj667lfYTWfmk67hi66mlk79:86=>uushddbcdcjnh`_ailq9:8qmk7mmkim;9lgdfkmie8>>?<=>;?==;<;9jghgkmimmljiefkp9lfk;<<:=>><==??@@>= ;;<>@AA?>?=<=?=;::998pnnmmlp9:;<=?>?@@AB ?<;<<;;;::89;<=<<<:9sqnlnppnmlmnp;;:<;;9;==>@A@??>=:9<>::><;;<=><=AB?><>?AB@<===>>>=<;<<>>=<=@FF@<<;=?=;;===>?@BCEIPNBC;:>><<>CA?@CCBC<9=<8<72369:8:;:9:;=><>A@>>??:8:9989::877558:866445;;9;?>;@GOVTMPQF=8qegw>gTU`69jjRX`bfeaGRNINQb[YEDb[YPC@GD:>KJSVIELNNORSSV]VLFJKOTMEGHCFJLLQQMQRRTSPSQONMOMNX[PQQOOOMPRQJONJORRQPKHLTPKVXZUV]^^\TSTQLNSVSQNPNMMKHHGJOTZZ\_24200a^[Z]\XNQW\WYJVO\5^X[V\]20011244544H650QKUXV/.-X+,+UT8CGFM>C799<957::340X:562/.3016IKA2")G!$AM=25!.807C7/)U-PDS;.L):3(*8MF=?F-)?PB1,(:',2+6!04G.gW3(=)++/C=0/M=Y;E)3/([P]4\R\5O7hMAPLB^YBCarGY5]T/=*I+(+\]}r=@:;33CE5424]ml676E6]<=>8.;;:9<:934316OTIR<;nuVnVaoOD;VSqES1HFMI>9,Q1QU:;V"%-4522SD!<7U6.I>\6LLeS3"*?-R@8TV;9/J<-+A+L01/"! !J5.09:@LG:5/$J(-.)7B=+>S5783VIC5-;8QJMVYc592)(3#)^3*#7:?FAa7RZISU^[]6>@D@2QdSPUPMUW[[]QFWaSMLLHHIJOSPXUQSVZ]_XVUZa[^376db]_cddh79==:86Y[4c`XTPRQJLIKLJJQX\[UNORXY\^e\UQVZ[\YZZYVUAAVWY6Z^]^YTA`C=>FLOLORTXXXTPRTVROMOPRUUHWYVXY]UYVY]UUWSRVUUWX[Z[ZYX_dijif]V\_``ac`__^`ba`fka_fb_ZbZ]`:=9mpon7:A?=@<=<2jnM?A@?:;=;;:;<<>@@DEBCKPPGFICs<@?@up9A=?CAADCEIMF{|BGLKMSPJGGGxDKC==AC@?>>BB>v>?=>:8988mn{xpolmnsrk>@A?w??nwvtquqqtuuxyvzlbjqqtrpij^b:>b^oghx@{tvwsv}|moz~|sojlmoptyqklknihknkhkiioonnmjmjiuxxvwy}~xtrru|w~}}{qrush]QGO`cdj`Qc|yv{stmmstr~}xPPv}vv}y}}|}xrvfh~QPKSWSPLMQJLSKHEJMPVVUTTVVVTT[][\bkng^^^`c_ailfcS`\[YVTUWYZ]\Z]]\]^V]ZQWSVWN?WOigjqmjwvstvwtstnidUOGBf=kqo=wkamB@AD?K]WNNLJOMIF~FHFAsjfhksnqnmqron>YMP^Y[SGG\_YGGLSZa\ZYLNQU]`23^Myo`UWRPGwhRVfnjwkaTRMQNMg`ULRQ~FP~LPPr}|w{xpcXahLReVp]Z^OWH|umlZcpj[OHj[kwh_XOGFAAE]RGGB@GQPSVTSPLQOR__R=<7U4J.-4)zuqf_`beiegdagceopj_Y[ah]XXZZUOM[[]c`[VZ^\^Y_Z_^ZY`ypkjkaZ_bc[fjoimi`\ZWSJDOWWXUOOQXRKHIKSIQWIJURXbKO]WTJ[VGOYZRLLKIDGJJ~Ju~NVOKOTSMMOMMIUMPWZSSWG}H{Vllmd^nzmlmfZVhZ\_keY^syre_VIKOYXc\FGL;Ihgddi9qrz}vupoekfnA{wqkrulZo>AADHB@|xz}}zrjhlie_YWPHDJLSVMFPU`[ZUXUZc\\Y_WTSGXVZYVPU][W`WSSRLSUYS]faZ[_`^`]VRUIPNQNQOWWLLKNTM^J;6SCTjaYf75b^ddc_XSWg4]^U^c]XUSQVUQSMPQQLLIHHJGHGACBACHHB=EEBEKNHIOQJKGHOKHHD9MDLOZHQPCKKPWSQKJKINMJONJJRTRPLFDJEDFC>>FGGISDT>FGGDDBB1ACH8DEHW<@JB]>=<5IU7>D@C6\i6]7?=88DD4HG@FN6@E*4>ACC86248;<<2[1534456669787@DC8C?=?@?=><>;;=@A;868::8;;9:84443678565i4iiefcig`^b6<:e[^^M//.1435667,123..21/044/00.0//4.)*-,,-2/5-++*+.,''&&((*.220--../010361--2530246323221/02/021016643344-*+15533556 ;9:4221121585100579533676353211451- " "" 324467312465137555436  !775447.6556 ! ! !"&%  &(&#%&"734= 6+*,36+,//045$+&$#%-')!)((9%#!%"(,$"&&')))((,(# "#%'# " ###$#!%&&'&$&$##"$$$)*%($%#$&&"%&$&&'&%$#$)'$(*,**-,..+*+)%%(+*)&)$#""$%()&&'%%$""" #&"$$###"## -         +      + + +        ! + !3+ +#!' +3%?+ +  /7$ 2(-!,C '&&+#0<5(#3"3"  ;= '%%")8 +  +    !))$ +**    !       +  +###"##( ###&&)#&-&%$&$$%'+-/+()*-02/.,-1-,00/13445'+0/..++,)*'&&%%),/.+''*./235/-,.111../.,+)-/--./200,(/ %(+'(+,1/.+'*+-,)*+,-.-%.1./.1./,.2--.,)+*+,././2210/.379:;:3/13324642544655:;55641.4133!<>?=$" 59(%.103-,1-0:469>C!7:! :!#$%%$#A$#$"!"!" !! ""#&(%&,01*)+$: !"$?9>##%%!"@G$#"FFF#$&%&'(),0+IJ(,10263/,,,LH),&""$&$###%&#!@;;;FE???@?@?='''%C""5"!!ACEEB@,2 "! 89$$ "ADDBGEEFDDEGFIB7/5;>@;8371020=;9A B"8=DJHGFA?=@BBAAC>=@AB@?CFAAA@@CCABA?@?=EGIGFIJIGEEDGMFLMOSUQKOOMKNOSZ\WPPPLMQNLHCCDA7.'#*8;<;2(:KJIUTLGHBBFFCJOPPPVMR^ZJTd22^^WOPEKWYSOPCCIKROMQSRPWJGHPZ[OSOONNRNJGEGLGEE69KUVRPSTURXZ^4405740`\Y\SLW.Z/1.\.1,,)S--/764346751378679k968;9;@@=9.853200135796566520*.-(,)-,%-/;8:?<;BBACDECBA?;:1,& 1./.69*&.:%.+'('(*)'%DE$&%!93014856558'"%,(*$,.& $(*&'%""#(("(BA643/0(APXK<.2>DBG?7//+-/0A:3.54c\QO35R556XMZ[MOURMB>HJ376102@4./+).745520-+,*+21* , \MFA;6679<8997=::9;639::4C@9442-% *2212-.03/*))QP-0Q*1O1(*0-.28(.720(51',260,,+)ONJNL&'*+NFM*LGG?A+1+'*,-)E'/).051/3(EJE)HD,;==84>E==>;1/=244>703@D>650(),31:4%! "1-+/1)''$"*"$'$EHFDGD=9>626:.)$"1469:3<9B1&26745/+=GA441.:7950.1.$!'" "&' 7#%'&,&'+%!CB=D5A@;954-92021.,84838:6276,+&!%%$&%%&+1"./+&)''$*(GCBCCEHECB;;>:=4;<510(+.('%$=-,1&)$,*&;7*!*,(+-8?-325519:64/-,56?5><:8=<>825:3%&1$79B566)28'%)1'!V)EC:623.1-'*.1-36:=9:9524/.689>C@:1:#=DE??>>@%),)#!>@;=>=@>A;89= ;:?A<:;=5968"AA>8=@;/9 "##($#EC@BEJFCA<;<962/0,&#$#'($!%(-,+**(+2-.*.*)(!,+---&*/,(0+()(#'),'-3/*+/101/+(,%(&(&''++%%$$$)!'%30+0-,/./-+'(1++%+.,**)'*'&&$%&'$%#""#"#" ! !! #$! #$!# "%#"# %$#-"%%$#%(%&##"!%$"%&%$()''% "!!"!! #()"!T!! !)"*#+ -7."& 23201-11-+,/*+, ~}~~}}~~~~~~~~~~~~}}~}~~}~~~}~}~~~}~~~}~~~~~~~~~~~~~~~~~}~ ~~~}~~}~}~~~~}~ ~~ + ~}~~}~}~~~~}~}~؁瀂 ˫Ӷ򃕏³¼Ѻλ*ȽϹľŽ́琿݆ʣ가箥Ꮤԍҟʰ̻ʛ늵ʂϤﴲų۪ɓӎ통֒ݖخ鏉믍⽐܂燘“鎘ǺۚꇱŇՈ鈱ѽܡ޹ُ҉мʙڲȵζÛ̈́搏ꅏɷٷƎ̪䈛Ԛ٥ҭ溘ﳿٔﳛ՜֏¿þʀȿżúྱž삌~ýѕûĿٿߺϜͻᥒ˫яϷ蝋ަ½аʐµ¬뀚ƽз°®߀̹̽ĿȶȾŲɿ񙞟ϻü÷ȺǸݏڬˡũĴĶ샂úƴȾͼĴ˿üºɿˤžŷø˱à슈͓Peheej7676mnl896;8j::9dcfgebef`]dc`\__]_[]_`^YXVXa^]Yaioi][\[[[ZXURVY^a2224577:@>?=9:9864eejffggfjlfba`^^abbjhecgfc^ai55ggiijhl556875576lfcZ\^_defh5jfikik7857<:lkiggeeddhjnha_bgkn8:<9lolkqigfjlkfeio9nhj:==<=>=<>?AE><<=?ADB??==<=;::;;::;<;::;;<<==>??>?AA@??@@@><==<<;:<<;<::9s9ronpqqpmkhikllnnnooot>>=<;<:<=?>?==<;89;::>ABDCAACCBBB?=<==??@=?@@??@BB>>??A?@@@><>CCBC? ;:<=>>==>?AB?>?=>?@BECBEFDCHX\KC@@?@?AEFDB=;=?<:>=75643455679;?<:;??>??@@>>?=>=<;:87677644fffb13265457;:8CRVsTQQPOKKPSMJOGCIJFQVSNKD@FNRX[][RONT[WLMLIHILPTRWWSTSUW\]\VTUQRVVQOPOOPRQNOLKKLORWVTPNLV^ZNIIJRWT`[WVRTQQSRPNOPOMKJJIGFHLOTXZ22a\\^011P^1210_RD22\[XVX`112122464aA0+7YUOST,.///./-UMU-RR-I;>=<84489672-265410100014VT>5mzMyr|Zwe2C3D$D~P\V&S7-[0$**(pc=1GK-?-9wUG(J8YR(9@"5?:6#%+1!+ (473/8&%)53@Q/N32=>2Q`T:=[2894.686542/28^;gQf37akomvdIVBj;V_31AMA84/=1+.-0:A44:5/278a9!!K%(V<2)Q/3@=:X:7(..FW/3V\)+@::4/PB7*-0&+%' !:/*&F4?LB/35<9/.,,29U=0/2BB7SJJVMFWE=3;SCNXX2E/>?D=5eAA:k9ic_RNFJLUURWUSPQ^qcacii:=8<>?9<;>FG?A?CE=;=ACCFEA><=>>ABEDxn|@yssvv@CAAB@?=><;;rjrpmnmkptrsrmq<;qX\n^TZ\SRLPTX[YTUTWPNx~\Ss}ujYaRXYXRGsuQ`QVQj_^kXIuBJSTQVTTzREGHKGHJEC>>@ELOQNRMMOMMLNSUW_\IS?7049I821`{vnhd^fagohiij^gkbadaek^^^[VWKCQ\^[Y\UX[]^]`c_Z_au{zqph`\bb_Y\rppnre]ZYVRNUSTTTPQS\YMJITSIQLLKLKND\\RWTHIKQWWTPJMFKJIHys@TYOPc[TNLKNOIaVQUQQQSR}{`ig_]jtvnhl]XabTbhmbx^{c`UNWNPTRUVNEK\_g432U24=VQ?ALRIIJDEE{rwyiobYhc`cXQcihaacmm`NMS^[_YTbsl`^\`oihaUYVQOPWYMU\`1`GJLCACQQLMQHBDCrqiroee_[^hh\UX[Z\ZbaegtjcbZa_f^Z\df37;EINWa\RRQNLJJGLH{yros|rlrkspfaZQIKDFJMHFE{wKHK[YTUj]QM^UmH]_o]WVXi`^bdh]UXekbfpeeierti`[`f]acOKwlrlmnbA^fGR`OQen`Hrgf]TkaU\\YXZcZQUUavuvnb]VYhMddhgslqvtibhZU\STacu{ifghnquvu|z}>IRD@wvqikxusmhopvophrAzyuvoodavywncmrrjq<9BH;7BMSGHP?42@B@@BA@?@>>=<;=>=;7;:89:99:9754445::75geedd64ed67797ge13/02=6734//01/,.1.,00/.00-.+--.-+**+.,-+0363.--++,,+)&')++/-0/1211262//0--/0/332//00..53011335633-.0/222343554544421222356:83134765665941234421365123" ! 41334831444543434  8976656875676555678x   ! !+0#v000.!#$"')'$#5,2484! &.20///1-1,'#%+++'%$" !%'%#&#"$#!')'$#!!$&(*++'&%',)$$#! !!#%#&(%&%%()++&"##&()%$%"&%%&%"#$&(,+)''&*-.&##$(*&./,+'(''()(&%%%$$#"!##$%''%%& '%#$"!!&C%#"#   +  + +    + +   +    $%0$(.%$1";B2 +  'O,'%0)#9:G/ #1.77.3%  2,1-,61"?% +( + $3!  (!$ &     + #$!!))     +   +  + !& !&%$)++*+)*)(''&&&''(*,+$"#")--++()(((&&*%)+,,01100/30010//0//,'')&%%$$#&+))).-+-1223411220131./0,)01-+,*,,+--,)&##"#%())&(**-))''))'%'))--/0./4762564/.-**)++*(*--./-/3m226:9899678<654686652246557;86/..05431: >; ! !"52/0-+$''.0-/-,*+6@779<: !!"! ! 575>?>>@AD?9<@##@?A!!< !"!!#)*%'$&'! #%%'&!!"$%&%C?H$EABDC"#GI%&&%)/,)('&*274/-.,($%&'&%&%#""! >;@?==;:<@?@>:<268CD@ACFEA17BC&%"11"EHKFF$:7 @?=AC:8;=9447:9;875"" >?=? ;92CFHFHEFMFB>>?A?9;9669<;CGHDB@?>=?>>>?B=?B?@BB?==?BEEDCDEEED@DFHIILKLLIGKKJMLIDIPPNOJJIGEMRHJIHGJA89BFH+IQUTNNIGA?CDIRYXUSS\^^eae42^YWTKGCGMPMOTNBJSW[^^\]YUJFGJKMJEHJNHIRQNMKIMFFBCJOUV[Y,RTUUWcbY^\]USYXVUZW-[21[WXTV+TOIK*.\Z\a3312792/-1:=;<31/0167642212.-,/0258<;689:71358;:=@ABFECCCEIHGCBBFDFDDC@AB@>::??=9:<=;;9:71.+)*,+(,+$%'*'$$H%$$">5-*,,(/,0:@:./+&(,*&&()!#!"$$#$"  %%' &B<)0+-,6LB48M=51560/),1143467821UHRS37LROG=@5<:<71ZSWg_=C5@:iRJJV=0QX.5:76:;;ZY:23243650.*(),124140-,**(+/.043&,"BLGA=:6=8;@<<=?7@@89;7:>655301*#,33234/03676:;6258GHG><944::835EC@BF<6231-*//111/1185-+)POUTZ^41*/++)*),$55-1/&)*.331.+,O(+))(POPJNKONQF>7 .2)(30-))(*+(82.1..00/LLJGDEC39942:?B>:<3065.69<3B0EK660+1+-/.01,#")+.",+ &*&'($$%EC>CE:=3-71+)$#2:8445;;6-+-3/2.-6?G:3322:443/30+'#&' $'(("%'##$,*&(*%"$$=<9?>896327830131116479A955./+0)&%)*")..(*+(&&%$)&EADBA>>@F?;=9@?975.*-&'(*(&%>9%$$2/+.;3,*5.6%/-:/.-09336683-08;49?9:<7?@;6235,(%&&@9<955+ 33 $,!%-C7)G?894.@815421151...3AI?>7,(%&3 1556:79<<7360-3.,64@C9689;?@A>BBE %+$!>=:79B@?<6;:>;:6:!=<<=9:31?A@<38<=9:!?D@;:F=>:545432-)(& #$#( ,,-$$%"%0422-*$-/-,0/*0.)+,,+*)&(')+20210..,-+&'(&$'&"&(&((# !&"!&%$$)/2.,..*('&./+*&*)')'&+0-(&&&'$#$"!"!%!!!"#" "#!"!'#!%%&%+!!!$"*%$ "$%$$'$"%$v&%$"$$'%#$$""###$" " #"!$%"!$& !&)!&+*."- 00010.-..,00с~} ~~~~~}}}~~~~~~}~~~ ~~~}~~~~} ~~~~}~~}~~~ ~~~~~}~~~}~~~~~~}~}~}~~ }}~~~}~Ѐ ~~~~~}~؁ 􂅉 ˾Ȳ퇙ķÿ·̿ƽ̲ʿቆ冉񩶷牒Ĥюڴ݌ƐԿߔӷֻƁԡ镁⭺Á͎äû̈پš稥ȀˀΥ굽Dž䇂嚴̨񉓾ې뾈Ӝڡ먨Һ偉ԲۉƀƸӼҬ֮܅ꖎ쀃̉භס؃īכ䩛͎񆙚þȼÂڑƾ˹żԀƺ浖¿ݨՂ᯼ǻϷ쀁ֽ֫ǧǬ⾭ꁚҺΆ鸺ÿЇҿ¶Ŭʹûĭɴ־Ǿ̮йϩӼ̿Ƚǿϵ϶Ƹ̾蘗´ɸļɹų倲ıƸצ쁂׀ɾ㋐ڃǿõлʶº¶¿γп\Ӓfhehgffikik773379fk8:5553gdeed]`c_^[_][^\[Z_`cZSafaYU]^baYZc__b^]ZVSXab_`110\18DJGB=?:86578jgccdfediicaagd^]^`hhiiaW]di77:<7ffg4}7;84f57767d`cdfefhkjdeie_cjm8::jfgmljjkjgm>?@>=AFA>??;<??<:9qoifjiii^`egglnn789:98lm7:;::9:<>@B@BA>@BCB>=<<<=<; >@@?@B?=<=<=>@?=>?>>>?CBA?=<==:<===><:ponppp:98okllkmmllmm89on;<<;;:8:<===:9:::9::9=<=DHEB>=?=;;=@?A?=<;<==>?C?>BIA@@A>=<;>@>BHGEBCCBEJWOFE<:;>P_XTXI;7<@=>;8jj656644578<<;9:=BBCDB<:;8665ee469:764255666:;=A@JSLIOPMuapw;;:@OXotLcdXYKPZPFBm?LOCCFJPJAI@D?JOMSIGKOGE@TY.//122./(OZ9a>?<<97557763VP.3542221210.0-,,2001311'0220121011224454351,4SFL&! 1? $@N$&('-$'")97*U;:.UL7:93',I/?"5)&;6=.)CP87/1L<8802-P/=G.)H56HA9OVE'>N5!KK:<8<;:.SYD+OWJfSVn}p~YOZ*OW`1;OQxi}Pk&DDX{[|IYzPPiBBF9=OT>E[fpujf`caTbtZTPT[QP##"2Ur0>X+!3VIZTOtB41'5:-C<=GN:SR'26=<;07ICG!7)!%!"+/1/0)(H8".Jc8G9835KT29347471NW<55;=3+*L.13:8K6Y4mnk}OGBT`<;:=&>NH2SC3>,1G=+%18+J199Ie<2%@1K52+1)]3+.<::SON15VUC02>-:><5K8,(&+ )?D$PE/&$C=@ADT*1..17?<+017/0FCBCC7ENP,RUPBPbUMF=CA-7754795QRUTU;:;<=<98:<;:95b^^]ZWXZWWTPLIHJKIDDLNFCOMPS[fkkjee82]`^h9d`YWRSVWZZad]YUSQKJE@DIKWQHKQTZQLNMPNRVRVZWXXTT\^ZUUUVWXa[URQRRNKGDNMLHKGCHEB@HKKKLGNNPRRPNOPSTVZ_]YW]`[Z]YVSMOPMOSVVUXXWYWTY^^dkhecffded^``cb_Y]`_\]_celjhgdbgkm>BFFCBDA@@>>||{xCxz?>vnjnquy{|???~}BFGHFGKNKEBA~zuilqmossqm9>Am@fXHhimmhfheltAFEBACCDokrsrxypsvvnhd_m?C9@@?@DF}uvxzwvmjmnnuqhidddjlkilmjqy|t^j>tlhjjnm;?7.;E>mmrgerqnimv~wusuecfc_[b_^a[alpqlppplossoniefgikjlnsrqnknlffmoorvwzz~xxyz}~|}vwuw{wwxzyu~|y{Wp~}{}{voikqx~rpg|QOL|yy|}yxxy~HKL|{x{wLMLGPx~GKNMOMLLONTXUT\_\a]X]XYSSYZVTSTRPUUPOWYW[dd`cccglkoplonrxtttspoolonnlkhklomhd`aa`_adhgefdddbddfinmhcdca`aXQURNI~tosttl^YNTb___qtehmjg^W`\\WG3:@FKANW]ZUPFLLL[3ee;MOxcMXVP=]NPpcSd^IGTWUPUUXQWVQNSSTOQWdnmFVVVQCh]^daNHSrM[W[OhJKNMUpKFJabgULEJKEDB@BAGSQTUQ<=GLGHFFJNNKSVSV=]b`ERVD=zvpfhhjallfidajgbahfchc]][OXW?K_^[XWQMW\bd^lf`acuzpome]ff^`\a`\rxeYW_YXWWVTWSL\a\RKIIJPWYTQOK@|CO[Vd_VSLIPTUP]^RKHLJLF{xHKuklJ[\R_^a_OLOUPPXYRNLMLIFFoom_^_hthofgiekn`TZvvxrzjXeXLWSINRUTHLU^a`dYOXc9CQN:@KYTLG@yuprubjallV^W[^bjcRMVfgZNLSaZ[[hr|~f^bcjqnWaQDEJUWY_efJHFT1PSJ@DQOLHEOFBvncmf^ea_depc[U\XR^dVnmo^Ya^deaY_ec36;>BWeh^UQRLJJGGOHDtru}ziwvmfa][YQFE@|QXIDMQqPNAXbL]XVYd`I=N`O^\h`chc_]baccdap]kh[^`[gohb[V\\]gROxojmpoqXRt`O[[gnX]SHyibjp\SUUWWY_XTKFRZhzxe]VZ_^AiX]gsftnspjle]bWPVJks`]dblnsyryDIqtsspanuokpjkqvlq<<@{}sen}lhzDAzrvuoljfa_\^YXSJDAIFFKULPIFE:GSZaeb\[Q_]T\[T^XYXWXS[[ZUQQSU\RJJRdb_`5;8`[Y]TSRW54XTNOMSTa]VY\TOGMUKFIBDLJMBIFDBC@DHKMTLKONFJDNKEJMDDTPSNLLNPOJMKPLKIGOKOJIKLJIONNIID88;2HDMDHSFBJJYKZL=97766f`f8456<<::9;98:998799966;6g4f5695ggbceb`cd44676777501.1//.344502/..00,/0//-0.,.++*./1-)11/+(--00+*0,.0.-*))+-,))&#"230/11202331131/-,-11131*,04211/2/234223753354/04653354245525:454451478875721443554523 " 88445656/.22146644 7668875566566766554: !# !#  C !)%!!'1+)+#42 "! Y/0$)#"&''>18;',9='0/)+'+3.*(@$()! #'(% $ &"'%#' "$ !"&(((%#')')%&(''%(-()(')(,,(&'()%$)*(('')''$%&'# %(&()''./,%&*#,&*+%$&(('&&!%%%$%&%%%$$"""!##$#!#$&&# &"%% #"$-%%$ #    +  +    +  "   1$.%4+ "),$)&& #%/B?"4&(>`-$! 2-8(3"A0  <% (%'hE&= +      +  !$))!%  /  +     +     +%!"!,,,+,,./.,+(&$#&''#"()")'(*-2353/-*,)+,-*,*+.///24/---,''# #$$&$ '+.1+'()+*-0./0/11-*..-*,,,+*-)))()+('$!)('%$#)$#!'))(($'')**))()*++.120-24//1-,+')*()*,-,.0.1/-1348<<86888:9533775355423334467;998648;; ::==!;7<79?::;@=8796688=<;9 ! = "$""$'#AC$#%)*&&'%&##$LKJGA$AFLJ$#C?;>@CHJJ%%&LJ(**,*,/0.+)(OMIF?BCAACC?: #6!4&$:9877798;?"" 89CDADFADD@:653;#' "#!#%(OJECBBAB<:;>?BC=?:9:????@CFHFC?>@=:>@@CACGEAB???>>AACB?;9976777;;9:9889:8:;?<:788766/--*($>;774<;60'$&)()+8925440*(,*($ $(%# %+*-C6)41."5''82.80(G(/00,21/).00-32Z105:RGNKVV0<:;6+SGCGIE63@:AA;<:9B?:;>=9<8444,20 (64221+'048:7?:688EKF?>>61::675786CF:41610/0101/,V9<6/,*)JI*R/571/-*!@6<5=:)($).2:7+)/982+).4/0/7=DE7036986(4+$&&(&)./+#(+'#%+'$!!)%C$@;5=9374487?53-40,37,??C>@$%2$=79=:<<93@=?>+3; 98B:9;28?;8=:9;?89 @@=6;E:8B%"A>A@=:875301./,'"%"!%*&)$! %(.21,.&10*/,(0,,+,,)-,+'%()),,*+,**())%&#%%&'(($!!%$! "$#)&"$/-*+-*(+'(%&)($&"('.,())&&!$)# "%" "!$#"!  "#$(##&$!#$# %& (&'&$$%'&#%$&$$##'%'$#$$$"%%%## #$!*!#!' *!"#!P!%$$ '#-'/-$$!.*,'0.0../--+-.ρ~}~}~~~~}}}~~~}~~~~~}}~~~~~~~}}~~}~~}~~~!~~~}~~}~~~~}}~~}~}}}~~~}~~~ ~~~~}~~~~~}}}~~~~}~~~~偰~~~~}Ё ɁQ󄄁˥۪򍊓Ҹ˼տĿûýÿ刣ꆅʋͮڏ՜Ս埣썡𵳅˂ԗϴɷὓ಍̆؅߶쭡مŹ锢ތƳӮ̕恵ɇ˝Хކ쒇ǼߖȮDŽ쥐Ձ뀴Ò˓׀˅ŎǰĿҢڼА‘קӗӎݸ͌ᩞ󑓀“ݭΆĔЃǣ͠Ǵ¹ɀ蕤Ļƹdzﳡѷڀ⃁񀎃ׇʀ͔ҸȀ邇σϼŹЪ܉ȟĢDZŴҴሓƱ³˽򖛜ͮø񌉃鈃׀ǩл˫̽›ؿ̛ýýǸĸĀļß챖ꔤ癤°Ĵý胄ʹĶֻϸʸ̷Ż˯I쇉񏖛0󆉋54h88jkmmgk677c564ghjh4455efdca]]_eec__]`e]\\agWU:9bWTZWWUQW\]^]_^Z]][Z[\]ac\\`2457=<::968>;8hhffdf45edgkikhfhdb`hib]SV]`in6lk766;;87767587jjfdaabjlhfec`aaj988kefk7kj565688lkjn7jdbhjeioleZZacdim7778987ij59:;:<>=@@>;@@;;;99=C?;ldec^cjjc[Z^`chm987667:8n78;=<;:888:;<=@DDABCCBA??@@?><=<<<>??>?>=>A@?===;<>>>=<==>=>ABCA>===<=<<>>=;:;:;9899:9plkkmllp89:<;<;99:9988;<>=;<A?AAA?=9:>@AAACC>=;<:;?;79?BABB@B?=?CC><>@>??=>BACEDC><==>@BB=;;=?>?BGHBCDCCB<>A@:8==>BD>FP@::CB@@ojhi5754776468=?<:9:=EFE@?<<>?CIMLLRQ`SUPNK@=:9<>eYIK^kjaLFMD{{GDHOHELOQHLRVTOOQRTNNVTROOLIIGHDCGMLJMSUWVOOROLOQU6C=110^^22_2a[SX21Z]\ZYM24GFG>FY03/VX-.3335Z>:Aa\8>><<;8540140I1G02,.38231/...W14333434'242..11//010021/244,01aJT3'$ !D: !(*4PV:@*8.-+K?0FI@IB3VF0&)42<%#5!0-*$1KG;L=G@1YQ=,QFMD&(',2*KL1$J3#&>X0I@07+HG-/WT/\H2;7mdbR*JS5:738920Z2^\_}XaJqkw^J:~ddHdcgyACI<73d5/cxFocvSp6.!-0CVGQThRXq_TdO[dWYZJ9(#&\pfC1J9]"L>;3Ru\.!)=OST>I!29+D&+$F58-&-,)8!"&2( ,$ (31&!!%'##0A3A=L_EGI65896518=;467=>9/=;2QX3907IMXRlj^yMMAILR5<@??>/:F,.LSI@HJ65@,&N43249+@6AEA5TGQVQDJSTRABD<>><;9657ib]\\ZYWUSPLKJMSQGFGKLSVXWYWTPRTTTV^_df^b]\`d8\UUSUVVWag[SUQMLNEHLOQRJJPQPOLHGDIIJKHLQQPPRW[WVTSPRTUWQSVUUTRQJDIG+JGBF@:hfikkfjlknpllkcZV^jq=:;=:::999;<:vy??ptzy~B?>>BDBA~zww?EKGCDD;=>BC:oztkr>kglo<;9ms;ys==w}wqmnlhiqomkmlpm98rqh_hlhjfhjhlq}\dr=tr:ADADB=u;rfd[dw??=xponigdifiihpjqox{zuvlgllkkkoflo`agiikjkosqmmqrurmpfbhosuvy{}|yvx}{|wtsplpprsusrw9|{}{v|Hdolpywpw{t~gp~{tqru~LQMPIHEFvICGKORRSRNOKJMUSZWZ`ill`ZWX^^`\_YSSRJ@h[[^]ZZ^_``_`bcdYGamnlopofehhifffjlihcggigga]`^\[[]^\]\ZYXXZ[\[XWX[\X[_``dgfbb^\][VVTRKBve\QZdsvplmia`\deaYV[ZXSJRT\][_`\YTRQbQK;Ye\kaTTHDb8FEJZ\[GGFZcbX^gcnvoeZX]QNNC@gZ_`ZswEPPIA|qozxCLknqrhWLPUMNPROKP\ghXSfaGADCNQLKJIKLNPOLNE;*W<9:freYK?Pxohjofecfacdqfacebcb\[Z]RSRz@]`X\WG;FW`a^]d^^_fsumqs`^oka]a_[^kqaYU\\[XTWUSSUNVmwUKIVRMH@sGUTP_]WMNNOPSPQZYOLR{Jpcd>Q_W\e`e\YPRWRPJLIKLKQMqjsehSVbsoiyX`puna_iyx{usdolhVDMSQSZTPNYX_`SLHJ_fCSQFADKONBDDE{oooyqbiedggicnd`b^FNVfi]VERV]_Xj}pzkjnhmmqidI>NRXZ[]\lXKG\^AHGHMRQPLKOEA{pqsi_`ic]a\eZ`PVPXae]ie_\W^bbbfca4h57@R^dab^NPMHCFBDPGC}|vx|~zwzqvfaZUWM>AJGEQH@KTCAJKOUVS``WZOM>ON[Tfd`]kfcfb`gimoidbWPPQcbbMPQS^eaSHF>@F?1?JJKFC:::BD@8G744]7:dg>@@=_231237:;E954443256<@=??A@>==:503:>!!  "!EF%%?CGGL(%$#&'&&GHGH%',+()(!!"!DCA#LKJEAGKGEHK'(*)'&LIEDJMF<;><=?AC20) ?9=;@B?A9!AID:=">>@=;?"FC""CKHBACA<=B?<><=>A99;25;<=>>>@CBABEDDA>>75==<=?@@=>:>@@@?:8:6444676775523446420243258658676866740/,*&!;4)#&+485430+*(--+$#**'$##&%&()&$! '"(.950/$#/!)*( "#-11-2628=90,+-'(& ":46:6LO]+760*SKKR^Q17HPPPE;466358:858@GH>;JD0,/.7930.,02320.0)"/" #"$%&%')* 282*"6WLGA<>C<=<<89;E>9;;8984325/0-AC43?>747746?@731432//21//2.3DH0**QQLFFQQ30,P(!6&0-*662+++*-0/065TJO-+N/QNOSOFKR*O<1-(2.275745--/-,'))+-*QIN0+H=7E?79+,3><;E.5@740-0*!"(%%,'#+0%#+E*+-,+65/1,* )&)$342095674288:<965-()*779*,(')*&(";:;;96(0$G=*(/%7)1,+M?@F8,,04311531/,//1/-/214++06/*03-223;:><50.150)<877;A?>8>B"$")7;>89;#<<<=:;8<<59=<=<=<:;>;<8<@998::78;?=:<78hejoki`[[^^a_cgjjV57:<998767:6nkfbdfgefgefd_cegighfm87577788<=978=@<9iefedhgdb_]_cin9875459okl6<@><<>=9=nd_``afeddadeglr98988:===<<<=@A><>><==?>>;9::<<=0?>=>?@A@=<<===<<=>>==>>=;:97898mmlmlp9::<9;<=<<<;<=>=<;;>>=9:;;@AB>>>@nCC==;:><;so>AA@?>=>>ACBBEFE@?>;;?=>>?>>=>A@B>CDA><;:<=;9988:pml666557876568:?@@<9?FGC@<>@>=BA>:8777876447535666:;:;AGKMMX\X\_ch_M@:8<:6fU6;986322-U/C/,85?820PO/-L5542210+P341/020//./0/32RJ,11,Z/34H:C%%2(%!!-C;Q%;)$=.E+BJHBBT1RBD.8!6!4#;65O:TFXA70.O>(/J3CDWI,-,LD1DqqCxp:Y&%-I00;6;-4244YD>bUp~rUJkFTz[tRa+1'2EFCxv[~:ZkG+*IN:,K`;cqPthOukWUgNVb1:1$DHL.ZX $/&#!3q~-)[x_C:-*-:6&VW"5B1!2E0&"19.?6M3!3.:3<9''&%('&",-KZNc2ea::;997>;;6989AA>3>F2LL2B1O>CcnRd~IqVFGCb9;;?A?AT24K /+P0OP./<7G-15:;7>ap3 %75P.;3;63S138(+Z8/2):=7OaN<9552)..&-Q5.-N)%[78179=<72+I*3:=;93+N2_?9@42@58PHHE93.^]CBW`4[Z8:>763WSV[^ageb`XVYSLFFLNKDEEJQKSXXZWRPQQQRSVYag^[]^_YYYXTUVWZb_\[VSNUNSVUPPLGCEEHLDGOKHHPRRIJFHKNMMOMMLJOOTTWWRPTTNJ?8=CA@;hk?;?9onpc\i<=quoiknhrnmkkifkkno:<>=<>?vpv|}vspinosv{{?y>{u{zqkmprgjigv@==EYd;9WY8Vnmkipprr<>@=;=?9ousoprkkkhgeigiipvvuqxqhljgentprf@O>\`Nfjljjifmmjccgnt~A?=9`>PMC?iipmnlYlZccjeeeceehgiltvwuuovomkjkrsnkjjggkjbQ@QamlhnprsmioqrurnnHG<@>>GGGFBA@ACB@7`X\F9K3:)I|zohlcgjfgjjlnd_geee[Y^_RJTDAaaZ\bQ6FTRXcgdc`^iwqljn`Yjr`^_fVM[ze]WUX[bXVTUPQXT\leRJIH{JMOTLHDy@aPDHOSYNQORQJMPS}FQ[ULp][cmPiadc_YZ]RNPQHDPINL{vmtlkfgxvfW[fmmrxmkh~rzlmvymhYJXY][]KM[NVWTKAFc9?MMBAIKFFIAEF|oslmunvdZenfkcW\]WN_[ZgWLQU]heZrpgtry~szvormVO[R_kiVVd`gaCR;CFJRTRRRMJCyqtuodallf]P`^ZSRR\ib]_SVd_chcfbT_`a9F[dbXZ^[USKHGFFCIFy}z|}xxlsojfb`]YSIAIJBILKEL|p\Y@GRbgXZ[XMI|EU[_g`YNa`[ac`ftwqlZSUJM2@RR?GMgm\_SAkqqsvofZeOIJdfQWLy~m_ddc]UNT[`^[\__X[fec^SSY]cY\c`^b`aWpvogd_aZS^Z[dspkoqrwsB@{so}zpxAA{zrxsdpwz}vzoxvwvovB@wuyzlikbdmrq@sxyyunkwzusytuu{Cwspg`\_\XSPSRNUSPNMHG989ECLM[RJUM^d`a[_j^Qgkk]]^]]_SLQb892`U_f\MNOPRNQRNKMKJINJG>AIC?DOZmbVZ7LKP\`^eZYf:5WJFJLKKUU]_caaYKULIFLMUGMIGKMDIGJDE@@BFJDLHJNLLKGFFIG??A@LQKJ][QOKPMPTXORMEULLSNJKEEMACCDALBA:;AW[R?>BEC;NNEJOFLMB:<=@:>@4][dc058;<=;?:8784ba48==?C@?@DDBC@?=>=<<<:88:=:755hkh77565786556igdbccb[]_\_]agg4_/0321*0./3/-12210-/47741//04./16:(34/-,+*++,-+-/2312/-..+--+)*,)++*( :057353235441..0/0//111553122534422413235a73134045440/0268545 4"#50.02/34441445895125  3555436  !63 ##"! '554!! $$%,-+-16;5)0,$461$02#D*$J&><**&$ $#02!"##$(.4,%&%$!!$%)('*-)#&),-2+ !!%''&+#"#$##&' (#+1(!&$$#$$ &n().(&$%$''"";#$#$&#$&*)+%')(&##"')%"!!!"(*%"##&*'$%#! "%&('#$'''!! "#! 2- !    +    + + %   -$2* #2)/'#" +2( .2 +: !9//+@  8'##*' .$+ ='+H/ + !!     + +'$!  $"$# + &      +    ! &%#&#"()-/268852--/,(%$%%$"$#%(%(,,--+*,+**+-/1521/-//--...///1000-*%,)+,*(&&%"##%% &$$$''(!$%'++**+)))&**.-..++.-)'! $## 88!$&)+*)'))((#,-.0//1010,,+*-./035/-//000149B=:7430-/0126744555744332:89647778798<>=BBA$?:88:?<852.-,$&411,,3*.+))32&0**'::9:>=66?%$&"?%#AD@==>8>=>:<:7;9<:!!C"EGFDAADHHI$E##%+%A@?#%$'%$#"#"!#$C@EJIDCA>BBCFIL&H%LKKIMME=>@D<><AACA!  ! BFB==><>>87699;=DGEDBHE>A@=:?EA@7"+'CI8E<<;:;:>?=79>ADH# 0".-%#76@=:8'73;9=8:;<<@AEGHFF@B?>>==ACB=;<99<:2*)1;==CBCB?=A@@A?=: #FAEFGIILKLKLJORMNHDEACEDECDBADIHKNNQOKGEJSW^`Z[[[TTXXZ[YXX]^_`YO^Z]XUXZVY]^YUWgjUKORRXOMHGPRPNVTC2JNTROIHKKLMEDMNRKIPOOOGHFNUWWQQRW]21YXUW52WQMKMO34DSTUTUZ3_[.22]Z\[YVS,.[UGEHJQX01R-=:859<;9743455413421;1&*)&-56699;;>=?AC?=:::;>?><:;<:68;7:9:3.**,.10.001.(+,+(()175679<:B=95/'?786/)+01.-)#(,%'&!(0804$&!#1 /$'#1"! !'$<&+,,R16QO/.GUM4204>@785339::@>98*'*,.0/0/-+,.,,(%$50/454 0).$&1QIJA<==AD<7<9994367.*0%#88345'$.-29;:854=?72=B667;/)5J941/247/0//-.417B;.)*(ONC*,-1,Q)$; 9,$'-05,.++,(+-1LE(070)OKQOLNKUPK<.)+/(:7885156-**,'$,)-+QMGKOGHA:LA<=:8AA7/089:=C<;9F=@:=@B<;2(10425)',")&$'%(! $%##&"&&@9<88I@=B:3:>575034.'.*+6.(,-573.><9B>?B?C>8=<74;963)5520.-1:646,/83572/)!))))01+-2/--(%%#$!&$C?ECBEDFBB=A?;75530.' $&"()*$*A955#',57.352)(>#)*/32.(4317638AB?=1+* #+, !"-.'*+7:<>>82>/9-DG&&88/4+PVKEF:245862/23531256/08565-,..6.++*+/.1)9@;64231-4339@?:=@>A9!;96=?:>!!?A:??A>;?""???>748449:8!;A?@>:6?A>@@E&@>?:5211/,***'+)''&##"",%!+$.1.0..5-&4770,,-+.)%'0-'+1.&'''($('%$&%$$&$# $"!&(0,%'#*+).*)/*# #&%#'&*,.++)"($" %#(#" #%!##%"# "#%""$###" ##$(#"-,&%#&$%(+&(%!,#&*%#$ $  # (*' !"####$""!() "!"'b1!)(-++)35231//.-.),.,.-.00 ؁ǁ́΀ }~}~ ~~~~}}}~~~}}}~~~~~~~~~}~~ }}~~~  ~~~~}}}~~~~~~~~~~~~~}~}~}~~~~~}}~~}~}~}~ ~}~~~~~~}~؀~߁~~~}~}؁ ܂􀂄ӭţīѵͻھͭ䂆΢Ѣޜʯ抍ٳ紋ɫ˕ފ̀ыٞރ񠙤̽綗ʜڻ펳ȓܒշӤϺЙѺ詛ފ؜גǚ寰ԟݔهƾ؇·ǩ񶺋󏨰쏦ꄔؚ֙ЉݦΗ󜝫頺뢌딖ʥێФ襜̌߯ΊͳĿܹƿ锭ʻต¼􍍉ƽƀ܀Եˈѹǣɿ􀃄ڥ慏䊯㫅вᯤɺ¿聂ͻέԆ损ɰ·Ⱥͼ憗ðԴſȶƀƛȻɤʹ÷ƺز⏡ȼ䱶ʼ󊊂žʻĵ܃»ֿɾſþʪ̶ʹ섁Ч“􃃈556gee68j8;;8dhg^egggn88675if4h5f`ehgffc\Z_cagdeZ^:7ie]]^[XYZ^_^___a`bacfa_ca\Z\X[X`ba_d4469896877<=954idfj78:75556liedb__dhkjh6s54688;<99797k766ieghhghigehihkmlgp;;9:9:;88><;:<=>A@<977nikkjqpmmnnk76m89jgegpB>===:8:;;;::<<;;?BB?;pmklnjlnmtuqomm7onkllp9<<<;9pp89:>@ABBA@?@ABA?><;;;>?><=>=<:=>;89::;<<=?=<=>?@?>==<;;;:;<===>=;:;;:99:::;:::;;;:999:978==;===;:77988988nq@D@>>AAA??>>@@BA@=;<<=CAA>??A@?@GMFDAHE?>;>HFBA;p>EL:<;>>=;:?>@@CCA?@EEBB@>>;<9898ppmk7977888767888;=>BCAABDB=<@BCC@?9>><::<<:8576554567988;?CJOW\\_ec\]]L=9:>=iaQMPTWHFSRFOJAEwFKDGMIVQKw@Vh\JKSTY[ae^UMKFEKLQU][RQQNVVMKOIJIDFLPMJKKJLMQSKECJJJIHJINNMLHIJMV^k`UURGCG=DGOUWRJDCEHE=BMQOPJGGIHINPV\Y]JLJDFHJKFEIGHOPNPTTUZ^00^[R121-/2[XU.0/001./22347F3/2OB748<8<5N:U8:::;867542345/5L198?C0430/0+964310.-.8532422/,./,-3/.L6WRK[0122Xe08715$$""2O?5QXD30:;2*Q/J6;/B?0A5#&<-%5'$"4)/'+3O4Ga)?3[f:7F.:'(4%7**M04/4S+..PX965@L5=?=;1K9,>X*8;6245DOIvfT}z[zWgqpV|VlI4<+&/RckMp\YOqPZn\@(+0D;CLXvi[odlPjoaJS;948*XDl!`E[OB-"EOG=Ea]nM$(J21.(=056#"11+;0('"12,/@9@.41-+%$#&-3?\SJUK`;0XQ3a;N6;311]7:9<60`_OYVH5BQMLMWqPQ`eS^_b2;<>A@AASO?&/K-2,:H4?@*;D3>;987dq ';VSQ5@-<<+P9>P@$*:65A.23Z.@F3>A:-J[6oT?Ca:,+,2,+9:42,JA(M8<=<93H*137<<;1D3?PT51>@/|zy|@B?>y<@CFFB;tsD=wuv=@A?z||}Brrpjj|A79;0Anihinljkhemnponlhigdea^_`db_bfchkghlnmkmkiiffgdc`dk_OEU;STL\Y={oqvpolh``gm;=>?ADEB@>qU;ahbkfZXYHTdccbbdgjkjhihifkuxwurstqoompomnqpnbZU@L_hkpurmmupjnr?CC}{vyzzxxz|wqqvvuqqsvvxy|wnmx{{~MMxy||~lk}}wmls|vx~wxz{x{}NNRyORQO|wxqlsNPQS_]V[YUZXYTWTTTUSUVWVSPNHIqZVZ^aceabcddccdcfhifdfedghhheffhgb]\\]]]^]_^^WVVTPNGIMIJMSSNFDTX\aVXc^\ca[XYX]\W\[Z]]^]^][[acfffegf`^\XSQMPOPSX[VSKKOMKIHH@?>=CopfaA2>>Aq[ZsYV:;EDJIILMMFFFJKDHJFC8n=?vu>;=@vo\YL>DJH:`uLHtpvp}QZPC}y_CD]YF?@B@?@??><<7jhaZNLPOKIKMNOS.546108\C=E97=_qrqigkgkmqle[gc[cedgZZWbXJXPFQc`\b]ZZZY\Waaiejovnigcb[_lf][`[QXpmb[PPTdZYcZYPVOXcdUND||{JJNJ~@QXJJN`X\Q[PYULKIOGTXRRLp^Y^dl@`e^ZY[[TWURQQOUOKPMMuvtre\db`[X^nalnu{hgljt{|okXQMSOSYSV]0A7KM]d`>LJEAEFGBIDEBkcpjcenotl``hb[c`eR`a_d[RTVYgS\armfjlnoyyolhkh^NLRU`i[QfW[^SY9DKOSNRSNKJC{uplmkaejidbVMhZSNOVr`Z]Oa^ThdSOYfg`nB[^`\SWXPSTVOIGECCAzr{~yy{vpqnidddb^ZULFDFGAE{MNBRRJPE_[TTWSRRURZ`cYohTRU[Y[^\dkdYRMOKO:88BGMWbTTeKxhdlx}wyMhTHEN]_WODm}{rspnnhZVMbUN\`ima`aalg_VYVLbsgkfba[_kc`txtjgkd^ZVX`ilbhpy~sv??xw~wynvxxrppnPe>ID~wjoolwsvwyxxgw=zvlbngqts{v}zs@ywsnrklpp>Bvrpjfc][Y_XNOTZWXYURMH^CGIOYWLGPJWW[]_[o_ZipaikkebbcXPTc6456ca[YVTRQPXNUZRMJIFEA<?HPSWF>>==?><;99754hiplh988877864iiiedhhebb_b_^_^`d//00/0.)/21020031-253321.+...325./42.--,+,,-//1101110142/..,+-*+(+++)*1.0455210./24541+3513564464335678737 747659988763342016! 655465777:;997644244644  :56!  0!%! $"%"3"  5554 t#&*-./54032'1/*))*+$#++%,)E$$>$%!#'$*&)B#.4+!!%%(*.0,)%# $$&(.,&&&%))%#%!"! #$$##$###%(&"!$##$#%$&%"O#'+41')(" #"#&()&" !#$""'(%&#!!###%'+.,.##"!!"#! "!!&'&$%#&))''  !"  %! + +  +     +  * +$   +  " *9!%'8((8&+$-6) % $),!+#)("01+"1.(##" 61 !J*< 7   + + + +   !% '"#%##c#"!&)+$  + +  # + \ "$'&%&,()%&(&"$$%(+./---*))'%"!"#&&%+*').-%(+++,-/1/01112431220//0...-/-,+) #('&&%%%)#$#""%$ !'*&! #'((,.--//1*-021/--) 6;"$9!"&$'')'## %&%#%&)+*+,*+,+--./0012010012458:>;5210/-.044342788989797736540364869<;@:7C>97699 4&%&+-23/.46+5-.-+)/2,.5402@><720>;?""BDC??$D?@<8<><:989;;:>=8-5=A!BDH$HGEH&(%$E"%&))&!BA&"CAA""##"%'&$F'($GFBABDEEH%&&%GIKPMNLI'MCCA>?H#5354:;;=<:?@AB>:898696455765697:><;>???BB8A@?=?=:79>3&+,5ANC)K@AD@A?<579; #%)'&%B.5:572,,.(0;>A??>?>>;;DDDCCBB?>@=??=>>;93,)$2=>ADC@>>727<#&&GHFJJJGHJLNMKHHJHFEDFGGIJKGA?HNQNORRMNMOURUWaa]ZY[]`00ccde`][_eVUYVUTUURTTUOJORwRVQRWYXSLJMMJMIJOR9:SOMNPOPMKJGCAHNPFHLEFIJFHJOTSNPMMVVWZ00\\ZZZWOKK2IPLKLW]2321^_`YYVSQQSSIDB;4;FR+-/2:7263/45040112123/U)$%>637;???=>@?>=>@>@@@><=;9;==>=>>>=997889:;9;<<5220-+'*+)),//*$$036800745556::6343762534587665336:::<:;94430./+-*+.11-,''(&%"! 8;82 5,+6"%##"" !" !.010.%! ".6 6142;;#&#>?.$#LILIC3/$""%#!"#$$## <:4/))**))*+)),0#$:AECD<;?;@BD?;4=:5;:9:12182)5.%-97473000/3078=<=AF@<99957@:6696.4C>62)*.;33;64.2,4=;0+#CDIDH**,*PNDC -3((*826.5-1-()'-(0411+SQRUQNKNL@3+,-/5942244/2/,+,,.**.,NKPKP/OH?ABA81644103<2:;@E88HF9:@BE>=0,*/,/2,(+ ((&%%$!""$"'#$#72<835;;B;66:71338,42,,'$',07*12>;8:9;;>EA;;8;93('++08/'3)&(!$ &*-)++(''#B>:88948::66/';2/,+/A425+83-81$!&./(,+-0.)./*,.0+'$#"""A=CDACEGEA>?=98887420(#"#&"&>+*%.0)(&0/,011/./+/35/=9-,.412316<:2*&%!# !#*#$-'=74;AA;>A)<2'%(34.,$9IOKC?><=:10.6.)13:;5452;84..-$4?43,,,+-54.=@<76;842116=?88=AB:= =;>:<6><@<;<<*2$!>>89:7>??B6<A?:5;6;<;?AB?=#D?<9>:;=;!#@?>:8411/2/('+/,-.+)'$2! %-*$ $ '&),.*5.+28/4451/02,&'0.-,,++(&$)$(-)'%$"" $$ %#)*)1) &(+)&+*/*%%!%"%()**-+/*##$ !" "#&&)'"!"" ! !"!!&&#"$!&&!"&$' $&&&%'&&&%%&%"#]$%##$! "!"$%'$#!"$#$&"$ !+)"# *4."*!,*+)(236422231/0/0---/0./-,/ 򁂀́~}~ +~~~~}}}~}~ ~}~~~~~~~~~~~~~}~~~~~~~~~~~}}~~~~~}~~~~~}~~~~~} ~~~~}~ Ӏင~}~Ҁ~}~}ց 끆㶼̬DZƴśżʱ¬¼Ҹȿ솕ہē펿͊ʧ۲耣ᓅ哤ڹ뵉׾쪘慄ф؃ƚܬݾ͛аΎůŽƊ܉΁ۍ̀чۃТ”ҮİǓɅވعѷۥίˠ莙݃䆘铝ɼø€ˆـٴ󉛠柛±󍠓ݹ˃޻􌒎ݟ↛ᛞҶйɱѾ쁀ȶȴԢDZЈſݵΌѸ[逊ïꃏӌ˄рϳݿۿ˵񀅋瀄ћꆧ禰劖ކȫ̺£յɶ煇鉚տҰ̵æƻʼѷɀʸŵݓȸúι˿ނݾŰ߽Ʋ΀؆žŸΥëϑǛʿ߃úĻʾȀŷ̧˴!c5jfge]p9689D:f5fjgmlla697873faah__adbb`_]_kfb^\^^lgcc`\^cacb]ZY]^^_^`a`_`_cjc^]\[\\abddca\_cb359:@@77;;7hggn767::87545ijljm7hg776789:;9;?C;76569kjm8loqmhlonov<<;<:8896:;8;@>:99:9<9stvqolm6jlkkik=8hgu<<>=:nr:::8op798:;:;>=988:9;9stvtnm7899::oopmo;<;$===;:o7:?CEEEDC@=<@A@>=?A@?@><;<=?>:;,89;;8;>=;<==@CB@@>=<=>??>?=<;;:;;<===;::<;:=<;>@?;:977;>><>@?=<<;<9:;:9:;<==<=?CB=98<>>=<<=@>>>EF=?=>A=;:;KYKC@snsm98<==;;=>;9:=:9<>?@DFEAA>:8<:ss9qpq9:><767776:?>989:<>AA?@@B=>?A@?=:9888789<>=|;9610^ac2467768;:=IUZ^_acZREtSV]X\PLW_TZe`TUUPotEJKVTGKNHGQWDsjxIf8hRNSOV^TV\`OAHKB:NUMKDFMMLNVTIDBEGJKIGGHJOPSUPMIHIJGIGMRSNRXfiSJEAHHGZXPQRTVQE?FFACEFILRLHMT\_^]RQKHIC?=BMOLNNHGGFHKJKQUXZ\_0422033.H[.111..W0145668<4682+3227422\NQ.44:=876876581 -9=:;@B*565667755114+M-86433220,+/,-0@T2/8NuO541Y_e=?-)'#"$$#+.@.0ZZC>MTUG@1D>NJ/253$ <84 ):A ;5F?88fG1AG7X]K4W7U.GAX>4Y;?-<;0B6<590Q^SLVVTE)CaC_M44:;;7996W-->5?8&051cNu_{dSd^[Y\~haD;A=7?%+MhkbmZcNOMR@d -JSVvOew_b7=269AZJ_)8Dl2=JIR1I,^\C$':nHc3)&CO/)!,W+(/.%(*6."&,(6!#+*$$. ,)+'4!+!.{ZD]<^\?H=UikKxz;ugmW3:92:85[IQY;?9BAE?UYjg6jxm]0K;9@E?4V4``[V^1_7^fZ087658=:6hfc]XXTKJJJKOLKIKORX\XOHGFIHLIJDCDAFMRWVa54cVMNOU]ffa_[YXVX\`a]`a^^ZZVHFYYVQPOQQPMLJJPXDEB>AEFH?KLAIHHTeY=ADBCA@FGTRK9;A>@??>Az{ymuxz>ABB=EC>rpv=u;=<;?@?ACDCCAA@@@ABCCA~{~GE}uspkirtu6B>sha][\UY_ccjgegdhoiNBDJVOYP/)rnmmotsqjdjgh:BFB}lZ_jf1[Tb^_fhoqmljiehfebfjpsnnmg`[oxy{wtxwrxxsuopqgEedZDUmrqmtyvplhir|xqy|{vqtysvzvikspottwyuvtuttpvx}}MNNOMyvrunyvwv{[syy}sqv~yw{ytwwcfr~|IPOQQOOLqligouDLOSZa]ZVVRNYb\^]XQOQQQVUSPOS|pEQP[\][Y[[\acdbgikg__\digfeddfhha`_^_^[UV]XURPLLHBCKQWZ[[ei^_^cqsrkid_[SPSUW__UVV^WXWWUVUTSOPPORNKJF{po<@EJJLZdeba`\\Z]\\\]b\TRTstWL=d^ha^_dondRGFDB\^YNIzZJ?mcaewdleWQUUTTT()+++5<5I@?A>;:ggphl|nppikih\\T`i_d[WXYZWRTELci_b_]`b^a\Xbgijhgefbab]`hfYUMLK\jfc^ZWWV\WW[cXRQSZpXLEfJr|NNqDRSLKQUe[XTWUVTLJJKNPKINMN}t{IVYWYUTXZTWVWTSQPMLLMuuf]SY^ceiWxv|nprbsnwqvuy{eeZQPEPTX]VP?ELX\mjiBCBCJGC@AFBFBvte_dmpk~jd`d^\cdabg`^]WSTSi_]cenkgsrnzpoijjd]`cQ_PMQ\_cdT^cgp>EMIJLPLHHFExpihgjgbf`[aQXSPLPVg^][YdSWa^P]b]n9M_\XZYWZRMKKPOJJGEB?}vy|{tommjimjee`ZSLC>?>BQcYDmI]DASAJMLNRRP^]PG\ije\VONYf^j\QFHVREE=?B;MRK`TN:IndeniYb:JMZ\aQISk]Bj|dMjqe]VKhA9IHRc`_cbiphbheV\pikpRZd`b]Y^jr{sprmaeb[ZjnrelqB{ty?w?FM{gshnxui`G{jorl`u?yyvqneku}umip>{vpjowDWMAyuigorAwtywkebb_ab\XVTTZ[]WPQPHFFNE^:V;=VSX[RQQ]hfd^W[aahdbdbUPLX7438h\Y[\YXT[ZWVXVQNGHD<:DMGGH=UR\LBGSOXWWWS[ldRIJIAGCFJLWYT[h_YOIBC;SPPKYXZTPKJHG@B=FHFFBCDMRRRMJIFIB8f5bWJL48:?2137d[d556789<8;<95`37?D;>B?<==BFDA?@>;;?(C@=<:986jeh8<<79:76664gdehfi6jeb`bcbbcbbC-0032,4 /-32443.0..2,./100//--30/..//72121--//11.-,///0D120164/0/,+*.-.,**(+,+01133576631b63669;944798:76! 9;<:97624332344<56668<=;86555454 " \57!!? !%.%5154 44667*,-")-//151*$>++,+.)'/3).40+*+)9A&(%.+"%($!',$=:@$14'$&$'-%&)-&"% %)"! ###$'&  !"#" "#$%'*&$" "$$# #&'$%&%%'(-2&! $$#--&%%&)("$# #$"#$)%"$(-/.,'&$#"$%#%%""#!#$$$&)('&'" .% + + , +  4    !!  )&*J#  &'!=(0 "&F$%')=-01)/3%,,0 +" #+ %( +(,  +!W # +  + +   + :E##$' ,39*@=@;31#%!$%8;+#T +       "" &'%!$'(-&..--*++)'#%%('&#$%&'('$" " " $""$"%())'+/(&(++.1100/../13674666511-$".--*((**&$#! %."#!"$##"#" $.+!'*'(&&*+42,$#""$#$8::!%'% !"$&#)(*% $#&" !$(*++'&)()+//./.022101249=?;72522301202532149765556765652211.038;7><:<>;>D# C"#""$$$%'('('&%$%&&''&KKIKS,+IEC@<=@?=% 4=?(IE=6CM)-)EA>A?BA<=;ABDA#$'#C<50//-17;=@>=>;:<7% !!'&)*% TFA@AEGC<7:65$'%F>49@;7/402536>>A@?;===:;?AC?B@<73BHCCB@BC@CECC===501+".>BA?DID=615>JFCGKKIEGHDFJHCCIGEJIIKJJHGGDCJJMMRX[VSUTX[XXRX[]^Y]12121_\_]\YQVXUOTWSNWZURUTKHDEBNIQX\fc__YMHILMKNK3BNOOKLQGIMNWUEGHKGFJHDGF9;CJIFLNRW\US^]_^XQMIOVXUO,1153//-ZTMOSUVWTLD>637<%+,.485412-*495:94/.//.111..0N71%./9:;9689;=?==A@@=674:=;::9:>>=9:8:<;:67;6420,*&!?").3669?A:;7?(%/90%4+%((+(,5676..,-)%,*"$$$#$# ).,#)!*',(*().-)$!%'$!5!*$#05*!&$"*-+++$  3E?7729@7:201332/0&*9=59545635119<>@;;:;75767>;31,**7>:730.014237<3//07H3)",#?EJ..QMGTE:#-/+(-0=6301/.-)'()*,()PR.,-VKHHVZIJC9;&.111/.23.101..-,}*++NMQ.PO\QKGBB93-04658-DAC:==4?9@>B@@D8:4-,#+.//'"#&'201!""#'$!!"%!$!=>514;?;G96365243/35-)(&#%)92356=;7><8?::79:7344)4)')1&**/3!(&()*(&%$#D?;654:759526,0.-*+1954418+.0)#&)%.%.+*-,,/+*)*,*('%$"!B?ACDHGGD@><<;;?=9951-("! #,73':+7#!($('),,+44+'27994/))193<5.&'.'"!+%%<75=6,,%)0H58+&->5"9JMK7):>72+$6# "(0/3447;8693-0>67:'+1-0,+.6:@>=?=37611=>B8=;#@=?">#)>2;58>?81'3#@9:<:2;!?>=:;77>87:<#>>BB:524/..-,000-(*'%# ' .*(%*.%#$+3110,,/-30130)'$)1*),.,*'++)*,+(&#%! %"#$)&,$ &$+**+',50%""#" #$)*&*1.,%"!'#% )),(%$"#$!""!#%&'%$$!$! %($#$#%)('(*'""%$##"$ #&#%" ""# !$"% !"!!#*$)"!!"" !!!!" (/2-( "-',*4022/02012/-./010/.-߁́~~}~~~}~}}}~}}~~~~~~~~~~~}~~ ~~~}}}~~~~}~}}~}~~}}~~~~}}~}~}~~~}}}~~~~~ }}~}~~~Հ瀃~~򀅁  ~}~}~Ձ  Uýο»϶ûÀĶ¿ƶɽ´ªľ·ŧ˄䔝Ċ℅߼ߝਇހረĽۛ햏̇爆釃ˡ†ƾӳٳ슐傝ɻç񜀥ٍ޾ꓪӑ֗󲵨ńߝͤփܿ쏛:Ϻ򍐆ϡ׆퀧줄逹蕝ʭвߨ놄֢ǒ̎۝ٮታƀٸՖʾƻۀ㴣ŻľʼƲ탈፱žϷʸʤɭ絮횅Ѱ툋ٽѳ̀ۋ실䆭Ԃμ󅋎Ϳɻ脈ɷ٨ܽŽǼĽ¸Ŷ÷ĸ㘟öŷϞ瀄֔ѳνʽԾ醅ƺĴŸĿ܀öĺŽĺÿүú۞b܌􇏍edghh7jdl9:96h56hljf89^ajjg4466gfhcbde```caadfc`^[_d`^\cc^ehid\Z[\Z[]_^^^_`acec_^aZSZYZ\d3_\^^ec\7JMD?=;>;:7kj5fj665778;?=nl96h66678879:;<:;;99678779;8omin78999;=ANGAA@===<8769;989:9777899rtvtlil768;9kj;tlmnqt<;noplnnp997878:768:98778999r;:qkm8:<<;9o89:;::J=>>@=:99=?DDFFE?;<@BA>>B@@??>>=>?@?=<;<;99:;:;:;<=>??@A@?@BA@?@?>?>>>=;<;<=<<;;;=@@???==@@@>=;:8:99;:9:@@BB?=;=??>=>?@ABBADD=>?@@?<;;:::;:;=<<==:8779;<<:;;=@>=<:APWRKI>;<9:=<==@@<9n9;<=??=?C HGD@=:8mlkin4o<<:878877=B=;:99:<@AA@?>@BA@>=:8657;?@=;;<;:865546545557BNQORJQMJFN\]PKSTSVWXRSXRQVNHPZVNCMQQQPPRKGFHJJGGGDDDFFHNMNPNPMLMKMPOQWXUSXRLLHD??MY[VUVPS^VLKFHTLIFCEGLMIHJLRQKBCB@BEEC>AGMUQFEDEDGMSTSUTTVZ\\241122363311]2[30104578566535402123.,)HJ97554688:;377:8;9/6652343365,455341110/--,-/E)=KJ}c[884-.\5:7/)$#$$%%!/:-/.ON[KV12ZE-240 %2/ ).".2$/7JU>7UDE`/E?MVKFHH2NQ9J40@@AILG07RJL-'=P000,FDEA^8:67.N0NR7K$2362ZR33kfI/0(@-4*+GJ48878>A>8640V0G8===>91>ND+8CBV0NTD',11BMRCSD1IV^\Z^caZXTTWSNLJJJIHJJLMJMUZ^\_]XZLKb_KEGHHHORPQUXVRQRTRTZXWWWUVVSTUUSTYXWWWZWTOHPNUNNOLKRPPKSKED@C>ABC=KIKLFKDQH<@vp?@ne@WK@5ei:nij8;<9ferABFI?;89BHMPPIO KBDC=:>GF>FKJNNPUWZ\_aejmomjplfgcRcc^TXYZ]^]\^`]a`_\[YX]baadda[XUWZbe``giqlhotlhhgdaZS^eXMITXM>QO\TBFR@Z_GB>/X=0079;IYed\hmfghggnstlfaXhlk8pmkimoppqrv;rspnt<<>?>wA@?>?@?BCAABDFBDHOFDCA?vptzB@zwvqpopjggc\PLadba\TRY\[``bgW]\OLLIIgUnEKSVWfjmjkkwxpijjnssnidaekkXcohjpqlifcceghlstpsytnmn|wvxx{{yvvxwtun`G9Sdq||{uttvuvrr~}tqquw}tmuuruwwvy{srz|{zywwx{}y|xvw{{x~zw|}~}}{ot~LMNSSQMORPMQSLLL~~GLSSQRXUWXXUKNY\bf`TRUX\XVYXWUXZY|KWWWUW[^adc`^^Z\\Zcdllgefeffa`\YVWWUTRNQQXQKMOOLGV]acfhlnpgb]Z[XUVSROLIFLLQQLKPMJMMKJIHJKJJGEGH|z<`sDWhgd^_\][ZZYZ]ZWWUVXYWTUV\ZMCuBE?r>l?:;:=45ZVO65584j86779569:;;8llbbg]a[]_WWYVPNPSYRUQKIt`\e__/---..*KGKNV&qowtyznkkqxubbaec[_ZXZZUQNTJJ[mlhe`_^_aacidceg_^dc^`edegSONF:D]acd\WQKTUVSTWSRQV_VLH|TmMQRM~BPKQSQadUMNPRUQJEGGIKGOSIHJSNIGKPPRTYRWYVWXSQRROMMOLyuMpmei~^\dfdTo~hli`iqzzknjnujWGJOPXXY^^KKWcluyjtHBDKEBB@@>EO{ndlkhnjjefd`VP^a_ec`WRYXZfg_adhdvtyqpolkmfbXTkf\lWV[WeYXUchrztQIDFKMJFFDBzqmn{ofcc^^b\WRVTV`addVTWWfdgcQ]i=YeVSTZVQLGHHDHNJHGHCA|v{{wvrpmpnijjfc^ZXSPG98:J\NJSgRVO;IFLLOOOKYLPO[j]Y[a^RU\\_YOHJZMHQOTLQ[PJFRDn{l`cmaWb^5=cZiGZdJ`kRXnqofULMFeNFGHLOQXPR[`ga[Vfhmgdaijbb\RWjmyzsxgic[UaiinruCtmnurntxxDCILQ]_[PMHACXTTNPSOKNZOFHD@?CD?JEEKJGIRPIIMKD@AINGEGMIOV[SQRQLIGEDEEHEISNNLLE>FGKFFB@?;IZVELID;BJOKB5;MKJJH]@D88DF??@?DG@0FLJ:9@>C>1W4_b76734557:;:789:95b29<<==@DA=;;;<;;986iffh;?<745654gkhcag575hgdcgfdedgT0-/125140/222.132/202/./0-/-0/--011/.130..21-1441.,-.--/00//0010210.1+&)7-+)((++(#&!21.0642H7735&!8;=<7456374788;6774566D89553 ! 5 I !'-+&%6#" 21//45544"%//-480(&B7.,*&()3+)+)('#(&#! %+%&!&&&($)%%"$**$ ''&()*%$)'&(%"%,,&$'''%$%"!!##!!   $"$%$'&&&#$&%&*,*(*'#" %+.**),74.%#"#-%$$#""$$##$$''%  !!!"$(& !!"%))()('&''&!# *! + + + + +$   + + +$" )@%%&%2" (*-( ( /%'&"(<7!" ##2,&(%*# >7  +!      + +J`B@1<=DSZYPLZS;ILEB=1,#! "    + +$"  +"!%)&%&*-./+),*')('&%$$"!!"$&%'(%'! +,#"$&&'))')+--*)+,+*-+,--...-.//--100/./-*% &&*$$&#"%## '$""! "!!  ''!%C>#$>8'5*"47;8: ! 66<#"$'""&)((#(&!""!'& %'%%%'*)),.012158:<<;?<994*662+//0352114377633225766873000228866::@=;?A<99974.(03-))/2+ +(2-"&,25$$".#'4<72:=99;<<@BC>;93;;<<;:::<;<>?B!?EB?C!""DF$%$$"E@/;?>CHGA;73377.3>9:ACA@>;;<<<>BCBDID>>?GA@BBEEDCEECAA91%)5=FHIECDFDA=?GIDCEEFKGBHFDFHIHJMGGMMRNNMKJILMPYUSPQWVW[_ffXWX_\[]_aZXVTQPSRQQXVY\UWSYVRTMJOPHHGKLIRR\_\af_`WKJMRRORSQINLJKNQSXSPVXSRLMQPQRQRVWQG;>;:<><>;:64355541/2271+,.-(&28;=ACFEF?;85431211.,*',,/-++.,+//-,+*,,+*))*+NIORPLFF@*4#2=:95433013114211/.E/21(!9!"2.'&&,5::97412/1699324246;72/%'#%! ,-.)*+%'%&&"%$#" "#".'2$0)%(# "%)`F?DCGIAA@FJF999:9474233/.+0()5?=;85445557=98:;66:845989:-+*%$67773-(&0/1//200/2;3+%;#>K-01-QFOTG"A+*./,9<1,-,./,'$'&()&-0)R)*RMRUW1V-(&(++-.1-13011.-,--++-,RPSOCBO+KF=<89H10545-=D6::29;@E;<:;A;.&(('**),+'27<>35#!#'#!! !#*>F:3867<997774/)/.,20-(%*(*4646785A=A;9789;65.,972<0.1.8.+%*/8>8*%#%'((%$#"DA=;;B<8673252/-/./77:90--(0,,)!&+*1'().+*(&''$&*'%$&#"B@=ADJA?@?@>@><=<89421.*&'3-,*7.0+"##%%&&/'..2811243,,1162,('1'"#!&%&) &4?<56<4+*&0.0!08'7>/QN9Q?A;4)$# .&" !$$%*%%*.70,'24:7327610.&*59=@=EKB784/.6;;>@AB"5<">"!";>:?8970,+3=;@<=:6:;9:DCA@D@:05+6G=102314/0+,*))# '#'))'&"!-1,//&)+302220(%'**-1.-,+,0/.--*+)*&&" "!# !&)$&($'%')-1%"%'$ ! !!#'+,,&$# *&(%%'%"$,&"$!!$! ! !&&$%((##'#""%#&*+&(((%$#!  !"'#""#!!# " ",)#" "%Z#%%"# .!!""!$$ '41/ #"+,*)3121221/,00/..1100.0ˁƁ~}~}~~}~~}~}~ +~~ +~~~~~~~~~~~~~ +}}~~~~}~}}}~}}~}~~~}~}}}~~}~~~} !~~~~~}}}~~ +~~ ށ~~}~}~ԁ À Ǽҿ̿ɴžɻĽʱ¸󂌑˽҄ɧ՟ڇﱚ˹کޤӦֻNj崏򒛯ϧ¥辛ակ򲎼̫ЙҝƦ´ıӧگǴЭފ̻ݕ툮ȲȯձʢֹՌϚ喁¶ڹ̸Ń֙ꄏƉˢɼ⚣º쁱ⓘԴɿўݤ߲ʳƂҿ˷ƿапǽ÷뀄üֿŭгϼ󃄁¥ǿںǦޅ覿ɩ䐓ؖ􇆉Ƶ݂·ºû˕Ϳ±ɼѽԷ񋝪ž̽ǾƼ½ȼڤ¾Ľ􊒚Ǻṳ̃кúꃃǨ׽î­̾ƻ끆׀˸Ը׻ځŴրɽķǽнŷĽߴμϾӒ蓂􃑚臍_dgddh7klji79ih87lkinlg_dedfg455hhfaageaabg7ld`bec`bf\Y]]Zbmfc]]^\Y[^bb_YY[^eheaafaYX[TQYbfc`abe[WkAD868;:<;:9=;:8899;:;?@=987656::778=>=;::;;;:8886788779:988m7;=<:::979989;:77::;98966m9<;;8:tnghh78pmnhnneiiegmmm<<8op9::9778:::87966l8;<=:;<:97m9::9878::8695;=BD==<:;=AACA?;:???><<<>???A@???>;;<<:9789=ACA@ACCABAA?@@A@>>?=<<<=<<=>@?=<><<=>?>;888n897898;>?@><98<>@@A?9>>@@??>?@?AFJMB>?A@A?=<96kl6569;?<<;77:<=><<:9<>::<>??@=<>GRY[OA;ljo9=A>B?=:<=>==@F>???DC@;;<<;lfjgei799=;887879;;<:8:::;A?=;::;;67559945778;>FT]^a[PG_Wa`a\QKSh720>]LNIVT47-A80PV_\33G\1KE;L6I8j^$Ce`P)?-/2LP=2l=BVh<=268;74Y4=YCUZSD4CC\C2[aaIigI|o71=UNfi`ZU`TQK;4N9)D>RUV]e_SMHRPKHCWF,L^`UZfZVUTRMLIHIMKKR[aa]SW^_3\TPUNRSI@EIJKMNMPTUUSUVTWVSTSQTUTQQOLMNOOTURRXWXZ]ddZH@ca\SWOMOKFGLTSSMH?DEK?LILI@CDHKAGGCA>SO:mFB;li[dUjml\dg:>?A@>>=>MNKIMRJBIG@9@KM=AEHHLOOPU[]bbfkq>>=zyyy;vusnrtt;<==@rLXM:-H`;6A:@FE@@AA?xxwsqkfb[YZZ\^[YWYUN]74^\he[Z\]bbhu`YNNZSCPCmY:LMJ[^``cdjrlf_gqwynnjnzrgkndN`bhiigfffchmnilqpr{{uhfWLx|~{xxzw|~{~yv{}z{xrronsxy|x}xutvwstsntv}utv|~{}zzxw|xt}|{}}yy|{~~yw}|o|EDIHLQXQWQMLMCJOSTWYVNP^ZZa]QJQ[YZYWVYZYVSTSUVPRNHLPYY\_ef^XUSZY[][^accfibabb``^[YUTTOLKKKKLOPSUUXa`hihd]]`]TUSQMONLNLEED@FBCACIIFL||wr~ID|cA\bc_egc]YWVZWUVTSOEKUVSOSSYWVW[[]YXMGCMUcg`_]ZXTPSTUWWUPHJPMLLKKLBJBGH?CBE;(;=uaeYm8\[aZ5d76788>;83^T\_cfd\Z^_XY^a\dgPMX\VPWUiM^>e320001*op{rjkthg]jdppf^ZU[VTRTWPN[mimked_]b`cjaceef_]fb]bcej^JHC?wC@qw}KDrklnXlne`Zbd`\c[Z_TPGGA@EAVIN@GLUSXGPb]YY^XS^_cbW88\QHOTPW5edh_`[^c]jc`YVUQPLIIJKFIEECHFFMILWPKDLIW]LJLNLFDGHHJKKLZTTVMHEB@RU[WPWPRLIDDHDIDDF?CFEPQKNRQNQPNG>DNKFG?LPORRQPMKGHHDDDMLLGJLKIHJ?D@GC@ABB4DY_EFIN?HMSVJ;9POEYO_882==ID=>>?OP=?@D:?@>A<8[@6g6=CNa159=9?95N<;:5044986459:9:879:95b`49;=>=?>?><=>::9984/37,"'+)    '* +      +   (  )QCVeP@7X9@kWB83) !#!/' +   + +    #'$ $"'(!%0./00/,+'&#'&$'(('&!#'(%"%#&'# $&'()*(),-.-/0/1/,-,*---,,+)())*,,*+/.-+*.-)+)*')"!"""#((&$#!"!!(*+-&*)&%$3-4""7717.==<168 !""!"!!**'$&'$$#! ')!#$$')**.12448:@83A>;9::; !?"-$AACCBFH$#$#DEEE"CBA@ABA !!!$"A@>>>AEEDCFEFHJJ&'&%I'.13(EHFGGAA$?(/&$3#$'%$%'('JGJJIFB>:64667963..+",..45126899;>0(!"*)!:8!(+'376445<==;9=>A=@CBCHGF=91#BEGFCDFFILOLHFACFFHHGDA>?CFEHJKJFEDECDDBHIEFIKMQRNOMRZTMIILQTTOYTSZZ]\\^^b_Z_XPT`b[V[XIEKPLLNQUPVUQVKQSMJMSSORSQOLIHR^ZSQNPRQOMMRPLPMP?KPORPPVXY^_X]VOTVUYY[^b\X*D"'&LO+-,-]\Z]][\1503.-WVTSWX/.STQPLOROLL'IR,Q-/023.&*444;5*%,546767996532231+-*%'+KO5577;;40--445748;;<>B<:;:9::96211.,.-W-,,./00039:ABB=:;:7331/,,-,..*)%"%#$"$)**/YSRNMINQSPMIJDAKKMJDI(#8(%2576:;7210/10010.,%*22.+.-1100210-.)(%)/99798540-/00232-'*-++*++)#&"%  5'*(0%$&%'&#()+*)%%((%&()')*+), &%#!/(#&eJA>INID?AI@>6=9BC<640511001,*4A<>=9865768<8;;::55;72787;3&&! .1387/' ,1.-/,;0QUQS1QU+-+WOMPIN'I,/1+.;7.+.).-+*&'+N-)-(L*)).PLL+ROR,(%41+/-/33-/-.01++-./,QMPPFJKHFDDA><:1.2?0+>;AA:5?EHG50A>81%11-*$-%&)22>>@:0#.*'! ! "&&>C8;A95466563/))2+.5124264-60316/0HC@:B4896226552465'0*+0+&'+4"!)%$%&&%'''$DB?>=C<:6321874204334>0/,+,+%"$#01+),-,*)&%'$F#%')%&M&FDC>CB?>>??>@><2##($&$&&%).*)!$+5D5434/"*)*0@A:8F+G>=8308:<<@B8<6.="??:; $ @:5643?6:A4>5:F@A>7381/0:7=6A8225 =98DB9?;0!!<#"887679:p988:;<9<==wmhlljhhgm8;9liinnq:9pnmoo8;<<87:8p98:9;:;>??;99:8D:==<>>=<;:rqs;<=><;;=<>@@?>@CCC??===>>?>=?>>@A>>=>==:99;=?@@BAACEECA>@ACAABDC?>>?>=<<;>@>==?==:<>=98::9899::9;<<<>>;9:=@@@?@=?<=??<<>@AMY`\QC@B@==@?<:<<;9:;@A??<98>>;98;9799;?A@>><:>A@<;8minr;::9:;::;=?ISNA;9>DA9899r9rop9:::<<:87779<=<;9:<<<::=B@><;;:9988:99;<<;;:89745544655676556778:?GLQUSG`KU\Z]XZQPdl_XSTZaRFHKJHIB:;ISSX]RRTVVPOV^^XW^j`NMTVQMPPQRUJEPQOPOPQW\]XQTURSQLKMKJJJHIMKNVZZTPUONVRPS[UPMA:BFG@;:g:CHGGHDDCFDADECIEFGJKOWQPXWPLGDOIDIHGOLNKNP"RSWXTYVPPTUX]b365:6344341564WW.T542 0[RSY10-1454674545478642477766445454465653442022/.0/-/2214Z28hDVd.MJKWNA^PXS262,''(.)RPE/2/+PA/YRDF7%(($&,4$@4 )91T4-/LTGQ*U\&?CX1-R6U32-UJT01C/_W65XgF):?510VV>H=DB<9 36L.D57=15.F11VcRI5O8F1EOa`a~mT,Oi=;n\owyR7BHSZ`-bVWGERpT~J9=?51S:5@):/47@C68;<:<;/\mS8*9F2.D=mV<2.81/<3,9M55)@5B9A.DDC4=9.':6.*+HPVN'6/+)ULbTO.,WHn\;?JgKpA?885S9;akS6<<>B9;_cIT:65335857>AA==7544/')T58,$4C:8)2;.9:70G+%%-4=BUP0>+4:0-5:851WHQTC! 6&*U59;2356:82.VJ5;\9HKYRN:Q3/UD3.32;BEB>8YE>)AEB;6.@58<$=2CJR[MCUNRRYO2Y@ZHa110_VGMUTUSRQUZUOQYY[^c__^W]aZPQKKHFDGLLOSSPSUWZWYYZVUWVURMJJKONJSYTLPSYRG^28>we`YXaeg;@>;<==<a[i7:?CDFKOQTVXZ]fnpmd_\\YZ][\]\^ZY^_`^\WX[]]`^]b[TUSTSTTV][Z[\[_fgcalhnuttswqkmWSUO6ORN@>QJEPFNE<>5[f:?GYCMRMCDNU<:7^xnmxsrsqnnff`HAYkkhijknnsst=><>9rtprqwsstuwwxvsrvxurpqtwwru=rpvtomiddeffdc`ckmjnplmlqsuwz?xw?DFLJ?us{}{~|taWqxyvwvy}DQFznhfed`]_`cbea^`^Y\ZUU]]\\MZJ?Nahc]^`abVLWW\cbjalztj_cf^`baemlQbmtwpv~ysuty{sr;<]ijpllffklijlkmmmkj^Y\`]kptsxusxywEE~zwwutvpu|zzy~{wvvtwxpr|~Mz}xrw|}~|y|~~}~|TNNMPRONRLIEOOMOOHNQNKOLHFJCA{BKIHNR[VCKbbga^ZSSTRMQOTWXVSXZY\a[SPNGIE`c^]XXSNGNV^\]`_cda`_^_ba^\YYYWTRONLKJGLOQPOQQXTTUYSPLHHKNKIJG@>AGKGC@=u@GDOz}|uorz{xstw_jFQf\[a_a`ZXZXVSQRROLPSRSPNKQTVWWX^\[^_`^^bca^VTVTMJJKIJKKJJJIHIIMLHLONQHyEDNOIwV\:=@@?67;:<840\[_Za4`^_c`[_^^]be55bOTUZXV[SYcSGGaCE6345574.Soq|qlmsohipigiga^SRYNSURTZ`ehoka`^\\\ehbdbaaa_fgb^^^jeSKI@;GPW\cWTS8BXSR^RMKRSWMQWTzIKNNNW^]fzj\RTRMZYWPINIIMILHPMLOYWNRLPONRQVQKNVRRTTT\TPPOQONKyzxumlicVdi^YijgcN_vC{\PypebVcijl\ZdJS\cgos_p=CI?MKCD?DUTPHGnJIRV^`[UOLZZVYYVc_id`ZZ]^aUMZR]XX]g_Rc\__bRQQk}kgb]\PUUak_ehg8jQlT]`TM}niaacVKLWICKKICENUYJJJMOVUNPlislofu^[gpu}qjmuqnkfgmqqspjfyzymoms=~xrnhcvelbXsnhkcr=89:h\Y9EoslhxutBAyyzLyom{vghohe^\_`aa\^`ZSIFGFFJ[NAJHELL[GSa\gie]VY^YYT68d[PQOPO\Y\fdba[\X\dgda[XQLMOKMHLKNJIMKMMJLNQGLLRPJLHGHEHFFSTRKJKOPUOICG>;GNPQQMUMDFECIECEECDA>KPLTWUQPFVM?GRPKGKIGJKMPMIHEGIEFCLPOJKLJCCCGEPCD<;BG@AOXO7NGBJJJFVM>LMHKKPB939=A=A>FFWLNBIED<9;7<4[;;7>KHG81Z5:6=>B;968874348898:?><87:?;43c`257;=AB@@<86788999;<;<:99!9886kfm:7:9866jfefg``cff64jjhba^`k.-/2324320,5<:6431251//...-/.*-.-+.015434743072/-/--01.-000-..00.,--,*/1./3332251---/,++,++*),+,--, +#!5 "@:54565546456668766566! 888 q (020* 5255#*& 4656  $'+*$2)-/..-/)'14.+)*.0*&((&%&"$)'*,$&'')&&',-)(,4.""')&##$&'("&'%%%&&*.-+'('$%&#"#! !$"$*++)'(%%)&%'+'%% !"4!#"!" "! "$"&"##&&'+''/0*'$"(%!#!!'$%#%&&&'&$)(&&(('+/" !&- (' * + +     + +  ! +$!'"'$T& "(!6B +@ 4$3$#6#; (%*5)&#'$ &- --1  !F,      # /*6+# '':3"0/'0"#-!#  +     "  " "#(')'$).-0/.++,*&%(&&&(&''%(*)%&$%%%$%((*--++-010223421/--.-,*'%$$%%#(,)%)*+$'*$#" """" !! !A(/11''))"#((+(*,'" ?52//466"! !$#$$ 3/8!!#'*+-0136:>?<7444002011020.234320145465472,-,-,...32233237755<;>AAA@E@97'%'%+)("!/&"+#+$!48#'1#N),*#&),9E==CBAC@>>796&"0;:9;;:==@BA"#"# ?@@?@DAADCFEECBAEFDB@>CFFBE#@@DC?><;7579?@?BC@CBEGIJJ&GH')*/,$CCIIGJGE22@EEEFEGK*6,KB>>=>99:=>=?;898575/+/-*( *# (39967:98.%(((-,3/3=><6686896589+9BDGBEJFBDCFGD><4?>A=>:;?>>?@@>=51351>?A@EDDEIGLR,+NIC?B@BCBEIMHLNLLKHKJGGGEGHEEKMNNPQQSSQW\[TQOXYV\`_Vca3e``a_^`]ZWRPX`^YSYTPJIFDHLKOSUSNTQVUV[[YXSRSRNNTU]\TMKMNNQMLLONRQKH+UZYZQPTY\WUZSTSWWY0/023112,($BJN0//Y^``_][]10YU+.1.UVTUXY..+)*,WL%"<$)))-26/:!(89=:85../.+..36654898;<60/,%&?%8:6601.)$+2789;:=?<<;:<=<887765210/..,U)+-0--//3013610.*+-.,*+& !'*)%" :"'%HKHBGMHB=@HLNMQPNMJRVLB@>='1$,6005677P22310/-./-+.20/,,+/12334755799779:;73252-+*))*+*,TS+,*+++,TN)'**)*++-%>%%*)':(-())&,('(+(%*(''*,)!$$'%$&#$'!)7HBGKIB?@EC??D<:<;86/.3+/0..269<@>787654;>9:87786::6354;8,&&#+048.+)#3//7/,*//3-251PFO**-..LHHOUNM257?K>700-)210-),((+)+).-K,NH.42-1),-,-.2.*,2.-/..5/-.-..-SK*POPKDHDBA;:85.9:3/7865(4A$FF2*E=75,3655.,0$+/49>17% )&"###" C;6BB=77:6840/*/..17138:90.@.359=LE=A8879834461.162-+*&0.)+'," &'#%('#$&)GEC=>:;;85110:=1/12/,391-*0!% 03+),1,)*+'%(%J@$')%&LLJ%EB>?BBAA@>>@==?>><621-*)""%.,+''9)&**12-(#!)+*.-,4295410224.(.2/1295,6///0&$"2<88633+-*./(.-+)'8)384.H@9322'"$+%#()($!%%'"$$##"97@9;6@/+1:;B=98G@=<988:88;=>?<75>F@A::9:A?=:63@591,>>:;39-&$:::/-(.8627 $F<@;8@>=#"AABD)><:@>56;850/0111013/+&%%$"$,'## $"+ %,*03/+)+/-,'.,&'%%&.+,30.0,,*+010.+*'%%&#%#$#%##&%%%#$%'!""(%#&##"!!'&%"!#%%*&!!!$%$$#(% ! " !! " #%#')!+&!((%"&$#$#$&%##!"" #&$"### "("%,%% ""#!,%$$"!#%"!+#&" ,"! ++)'3043//11-.-011340/,.Ҁˁȁ +~}~~ ~~}~~~~~~~~~}~~~ +~~~~~~~~  }}}~}~}}~~~~} ~~~ ~~~~}}~~~}~~~̀ր~Ձƀ 9ʧήǸíȽʯϻƴļȵȽ¹񆈆񄅄ɰŽӝ؜ҩΖ깄ʄ󌏆°ϲЖ̴ӂ瀝ӊƕꐿ❍՞༼񴴜ēꑽՐޮ蔮ج졶ΉБ㞆ѷœđ떊͗헧Ȃ׸䧺샎򌘝̬ƹ⒨盘ˮٻÕ̞܇ɗ실潗î͓ʪ˴򽻫ۀθijľŮހ텿⃐lj½ľȀ䳬҉悓Ɵͺüžľ÷ަƣڀϔ⁂􄂀Ͻ툆󅃃ϸ؄өշŷ䍽󍧝ǿǸͫԲƴ缃򆑋ŻͲŷų½¼ɷꀎнĺ򓡯Ǹѻ»끅·׀ŧӴɷ ӽ焃Ľ˾୬Ѵɀȷʸ̵̿ű򘝒C􃂃^cdjegj6e`fgl;>>iojl5;6gceihe`]caca\[Ydb^\]ch8jisjejgdbba_]bcZ\]`]adddb^\ZYZUVVZe7ifjjmkmuqk^c_TR^`^]WZ]f_T`4328;;BCKNOQNGA><<::;8997798:<;:;99;88::8796:<98754549<=87;;:;=<<878688:=??><:9898;?A@=snpnnmnln::9899?=??><:8kklp9;::;<=@AA@@@>>ADA?==<=>@@?@>>??>>??=>=<:;;<=>?AA@AA?<=@BB@<;;=>?<;;;<98:<:9<<<;;9;=>>>==?@;;;>=<:@@>BPO[hN>@B?=?>?=@?=9:;;>=??;:8;:;<;?>;;89;=@AA@@A??<==@<:9:;97889::<@<;>BC;<;:9>>987kkmq9::9::98867779;;<=:;<=;8;@??<<;:9:<889997965644677646ji456689BC@BFE@gVSO_^][U[YKSRJELF>vAOPMNGFGHMOTUW^[[ZRMINRQDP\VJIPURNTaaaSK[SOOMQVYRRPOV\YWTOPROKMLIJIILSSMECDJKNQWTSOLJMA;9@><8l9=GJT^VSKOO?{A@FHCA@FOQGKPE>:7:u;AHIIIHKLMSRNV\\XTQP^368kjf`b[\2324;>54047.R10402310ZX[0.),4675202274322158644556763454440256642531/02---/-11232/V:W7ZZ44/'I2N]_dW`{I2,-*.CLaU.5/-0.,RIQ_9X;K6P<*$"1+&7?@BH@=80#().+.S6L0UMAP*,MQ/0-RT.,Z3+EU]U1.37\7<95/:@5;:=<2"CK91*B"!$)..:7BCZ;6X<8`V>;^aAN@}*qNDr^^_zR*!]?)"me|qwVAA:NN*%tjHIA1?Oq_.C-*E,G>+8F*23/?a%=(>@F! :RU@9DMYOiNZ3;<)OA@;'E'-2^D*^:180-+"241;");#:7M%$%,;3JCg5@.1;[W9;4LTr88Xi2587751OQOTC7:Akxg^>D<44560/6416@BBDEIMLNPQSXY^][^fb__bbXY\\XVQOMQ[a^SY`WVXXJJMU^P_0RLOPG@HQRPGPUQROWLNPADDbad^8@KE9=<9=BB?JQOHID>Ks;NFFIMRWWXW[__`aZVVRVW[ZZ_][YY[WUTVXXZ\^^YUWZWVVTUXYYWVWYZXU`fjjaqjtt=mvs_lhObLFM:Q9=EFMQDKM;1`6?;GJ6A<>S`lo`ZEPv{sr(wtjquomhikjhmllnhehjknnmu>;8no9::sustrsvqpqsutrx{xsjcru}|xuqlmjjpovuhilmjnuprmlkhjoruswpw>>n=@vsx}|ymijlr=ABqmvyqnkppnkmlnhhigijf\`_jpllomnwxvy||~?AA{zDEBBzyxttv{vttuwux{}{zxz~z~}z{{z|}xwb|{JMHMMTQRSSPPPNNRRQRQQSQOOB{t>KLNOZg`UNdeimf_YWVSNGJHTVYY^\dega^[^^\\RX][X]X[\VRc`V[^\[ZWTSUXYYYWSMPKNNUVOKMNLIJJHJG:ht?{B=@xmrzoizurw|||}|eh]g:G`YWZXZXTTQSRROLOPNLIGDEHGIGHHHJJKMNLOQUVQKJKLHLreuHLIEFC@~GNLNF<75b_b]Y]WS_aYZZ`]^\\fdfeedYNJZ]\PQQUB2DFB8aXb@;9:9'Upx~{roowpebjfregf^\VQUV[SU^gceig]Z_^Z_cc[_Z\^f^bf^YUWefXQQLDAKMIDHIGFE|rtqsnf^[b[aeZX]TKK``VRY\_JXfB|vF@vqls<>y>Cv{mpuopdierxd[`ed`\Y`VZPRLPIEAHLJNPPHPS]WXa:9dYXYWXWkik]XUPPOQPXc][X^V_Ya3jedg]VPPONNNMNNLNNNRQY]]QJMLEINCDDDCJ?P\d^FEFFLWHFHHCGKEFIKIDBHEGHFIFFFKB@>dxFAKCEDNERRMML=63X6;``h:@QML9DO7=0A@B@865842442689=9=B<9=?<98432478;>DFF@<848:::89;:;:8756764476423668754* 2347k 65  ('.:'  2335%00 3+*(/-.-),*$*)&#'&"B$)'&'#$#%&&)'),*++'%"$&'%,*#!%'%#'/-+&",($#"$(+'''&),*)'%#$#!!#"#!"#(($! $$%%*('$#"%5#$(/+)%&'; ""!!'(#$'" = $$"$"#$$'&#&()('&&.343/.)(! #0#).0-+& "$  + +    $$ #  + $  3< + -2.'5- 5 $0$%9! 0" ".;/  + ( ",&!-10+WF,  "    +    #&+4#*$ &+&"    "(!  "$$$#$&'%"#&+-%!'*&)(%((%#$#"!%%$'*.##  "$%()((++,-.2203783321+,-,*(&#""(**%',**+* #&")$"$#!&'&#%!!#""67:7!%+&"  #!$)'#%# 918")4!##!"#$"$(!!%"):)#$'+.1332576440.0-0.00/21/.0/-,.02245330.01.--,-010./1010057:;5@:@A!;CB,51'3%&'&"$%*,%)+0$&(( 06>?4/#-GCCBFC>AB=<:<=;;=<==968:;>?>C#! >> @CEDACEBCBA@BDFCADEDC=9CEKJGECAA@@CAA>:>@@?ACDEDB@=@CEHHHAG%$!==?@DD@B<:=73?;=AJV[J?;73348<:>A:;><9766642*",79:=9?G@. ##!',+-38418<>:579;:55#II))JCFHHE=::;=!$$ABFGA=;@A>>A>?<<<;;;9222:>;?A@ACEFHKLMI"#"AA'(''LJFDFCEFHCBGIHGINLNTTRNOPUVSZ_bfegfjdcbZ^_b_]__bf`]`]\UMLOTPSSPPMNQTTUSPVVRQUVXQIMLHIIJKPZ\^]\UPRaiXROLKSUXa]YPG@SLRTTROSTKJMLNPZ^[[.0^VTY[YW),-P423_\beZVXZ631//..X[45432130/-UP$?:!)+-/7=940::>B>95420-K)*)4699><@BB=;79977257757455..<8I19::896325778653bc]Z^02]TT,/+S12-*./-PMMNTSSQ*+,*+&2< >CG$ @<7>B:9A>:>FMRLHGIGIOQQLC2/%, )4/0112320.0./,+..-*(%%'))+)**QNQ*,+,..,/0340-,--+QPNOSMKNONQOPUSQS.WBL8OSPMMQOICI*+&$$# 8"'%$)(*(')'%**%&$)'((&**+..-'"'('""#%'$$:GFHGA@BDB;:?3),21-*(&GF)-2/1/+KK,95./73,22.,.-)(*-/2++530211000RN-PUPLFA@@;:6:40>+2:93623;=A>>*4F16617:@71*+*"(./.+%$ #&# 9!%#<=6<&@:4EA9777310.70//17A4=9<.5<;AJ8FH=46:755600/630-.'51%!&%- !''&#$%$%'''&C<=:<;74130472261)(43,()'(#'%.)-*-,-*%())(%$H?!%)#BHKJJAC@DBD>=?B;>>AA@><543--5-*+.-)))$$6$'+/.720.220;:63.-*/1.*072/00480:9-0226,%$*6=875411,)1.+0 (K4)=6KB?:7595/,-/(%-*!"'&$!!%#"$ ':>?;HD@:A(N@@F?88><>:8=@@=DC><8:?<8A;79=;AA=?<;8620;@F@40%'%'52$,*2"B?&$?>:>!!C!$=@:skpidg796ffgecddighha\^ej_\\\]inhlgbbffbbdb^_]_c_[Y_bebc_]\[[XXQPWc\\\_ae57;AA@>;;:89998876<<::@<9<<88;989779:985366<;7o67887878;::<<:::=?<879;=>BB?=>>?>>==>=;9;<:nlm78omo9;;<<<998;;;:<@>:779<;==<<<>=87; =<<:nmm7:<:::; +<>?=<=;>?@??AB@@@??>>=<==<;<=?@A?==>?@@AA??>>@@?@>>;<>ABCB@>=>?@<;;;<:99;::989:;=>=;=A??>?CC<::99?@?>;;<@KF?>??>=>@>=<==@>:::9::;:87l9:>?=:9:;=@BAA?@AB>??B=;=;<<;;;<><:8m99;<;:<=;;>;9=;:<@@???@=<<:8899:9887886435545676c`hgei656<;@C@<=?>7d][VdhcZYYVYTJBBIH{?Q[UTRRJACBOPMR[YVRHGLMVVW[ZTOKKKNUa^ZUMOUWWTSSQNOSSSZWPPTUTRPMKMKKMOQMGEDEIJMQUNQRRONIB@?D@CFEHQQTVTRQR]VIJOVXYMGDJS^L6:>e@DFKORUVVXcgcYSTWb]]UKKKNOQU[[c-A+G*:1OR,[A1:4>NO+SMR)-.+.QJQZU,CKJWE*66[>O:7379:297C5GG7Y.-'*$875D;BF2K<5-G:+82aVOYO;@d$MMVg|qf^40<2>2'/>B388:VvbwsjP9@ 1CA@**:C:7G*L4.U3P."):9/3=>"6)=70EE=L:F,(H!(*L6@+.6gjj:;;:997,T25;@8<:60.?JG763587893JR.9?BA@2++J><8/54QXL,;LBF2>:=:_>))051289;T,<?730WTNMO`0a_[PVXY]baRLMXa`YQNMQV^ab^WUSWf\LNPPKHBIIGCDC><@D<;=EMMNOQSV]__`cdfeefdhhh`bUSWWJJMOSY\[^\`aIHJ<8HTHLSZY^UOMGKORNMWWaYaWK?e59:gb598:76;=??;HURI9?N@9@?v`?IKKID>AGGJTRTNJLAHH<^CN;]oFMHHORUUTURSUXWWSQRQOQV[]^[\Y[ZXUTWUSTY^\VTSVTSWZWUUZ]VWWVUUY]dikmmts;9:nMN_WXHJSh@`h@FKBH?ROJ27EHN?McFISY`ec[JDboebbd\decllegfekiejgdinllots:q89o89qrrtstx>vvwtvwsopryzvpohnvBB@ yrsrpppWmmnlknjhfgmldglllonmnp?pib]eehldbff\egks~|kZYXXYWVTYWV_a___]\]`]OSPE>JS\Tbhi`\UYEk59BLamqc_QX\ce`c`_fdgjkeKV^pp:=@?zyvrs=x|unoutut}yqhfgedeghdefig^`birqplllnmnqjlo|EDDEE|tlmnr{zywrmmqvtrsunwP}}{rhir~zstz{y}}}||}zzSVSQPQRPOMMRTUUWRNQONOMLFFBGPU[^digkjhe``]\ZTPONNQOQZRSVSTWSRSUXWXVWXVYY[ZZY[ULTTX[WVSPS]XWZTNNPROMTWPrtzKGGD>u|}~|xxvv{A>spk^uEDzvwuzvrsxy=vZ]cMgd_XY[WSPOMNONLHGHGG~}~{||xEC}B}hHJGB=:sie^\WYNNHO[[`bab`]ggbb`PPI>R]\YQMJE94;;7=?=BnY?O;,Jw~{{trsqlfafeacfe`ZZ`c^[\cb_aieYZce`aa^Z[___g`\]Z[WV^bZQTMRFHUXgjbXYTSVURVQRXVTQMP\_^GNT|{Viqz{q^VNLQOKHEF@zHKLHELRHRZVSVQQTOSQHQINF~ELNU[^WRTVURKNKHu}ypc^TZiY\g_mFe`jjhifqg_`qk]dct{mdX^U\cffiT?`e=JH=AKGDD<@CH|{wtvwllq|mjjd_]_gb\WWYaccj_WP_lbWkpyofjkemhb_[^QZ_hY^gfSRYb]_9;CJADE?FJIEGLFyxvwqugfdi\XTSVWJJNX[V_m]WD^HRLGF729534423a6>FM6:6;<;>@?<8665333875469;76;<><77:8657:ACFDB?;989986;:=DCB!AA=87655jjlj6766h6ilh`ccf55h4gbab.//0/0353//14;672002121/123112.,,13-,--.584541022110//0./1.++.020/-,-,-++(&)0,--/0261-*(*,**('#"(,**,,-,,"6  534765454 +& $!4   +6#5.-1..010.+02/,++*,)'$$)'D#),)('(# $$(&$&,++)"#%$((()'&$#""#&-,)%""&'&$%&&%%'((+*''))'%$##$""#$&%"!""b$$$&($%&'%%" "!!&'(((''(-*$%'+*,&$!#'.$!4 #!" "$'(**++/0.(&'(-))(%&%'')*+),!+%"+,*   +       "! #" + # & +-$2&!& 3/G!$'$0)#!  ##/J0# #2OXrV9 +  W $      + .,-     &&%#!""%&'!!&)'$ !%&*,**(&"%.,#$''$!$$$#"# ! &+)**+,-/12446764301/-()#"$% #%((+*+*" &)&)$$&$((% $#($+% 8 :7 %,)$ *! <2"&'''$ !$#%*''#!# 3',27#(&&,.1100./11..,,-,++.12101/10/--/../242.-+-,,..,,-/1,-.///0367:=<@?;$%.*,%%'2-:$&)#'!,r*(&&*%5((-27<:2%&7?977:4986=>:;8:?:8;97;>=>?CC!B = @ABDCCG$EFEDCECAABDED@A<@D'&$FCDDBBB0>>?@?@@@A=<;:<:7;@AACA$>:51769===@?7;<>BPRD97555444744;;:9:98894&'$$("/;?C:735'3#/6731*27;=:978==>>:4(-LBFECCKHA:;<99<@???@E?@?F'(())JFCABBDJIIGC?AGJHEGHDISV[^b`dba_\_b`ac2`dfab\VXWUYad\STUOKIKQMOOJD?CIXUPTSPNMEGJOVQKMMHNJJRX[YYMLMMOSONQUTVUWZTOTJMQNLOONQT[RJOTURX[ZWUY`aZY[\SQRX69521`3ib[W\agf411./144341Y./-.0/,%% "(.36:=<@>>;9:98610/-,-+0933325754457567786775667876:72536:65314;7673\ZX[[^d1_\000/-31,SDMSTSPQRJABDKS-*(%;@@BBBLD>>@CD" :63*;&&DDD@B@=;=>5&,8*:952351//.--.-,()***OKJIGMJLRRTRSUNKOPONMKHHNNPPPMLHHGKKKMMNHKHGLNLOMORPOKFHIKJEA?GOO&#A$=5('$40,''%& !#(&(*)*)',+)**!!"'&%# -"0GIHGCBCA?;8<;88:862377435:968<94389787536676;7562300672*/),#%01:<701//3302/142/.,19<:WJO*-1SCJOJEMV4?DJKE93-*-,)'&%#@)*,+(-1)J04001..0-1/)/*-)GHH(+*.3620131.)I-*)RLAFC>86/1:0162;'4167696<644<8155AC:504020+*-"*-&$!($#$ ""%@B@>?@9:=EB9895204:43023788=61+4>90=?C<4895;75202)/18-066*&&)(*"'!#$ $'&%'*'C@<=9>577;20.,/.%%&(.,06(#$42,*),...'&)('%B$HB@#% "FHHBD@?GCA66=C=?=>@CA@><://0*(2,2('+'"%(*/0/.1+++*-:6101*%/*)12/./+/57413146660,,,:<99?>:3*-,,''-0'%A/=6540/0+)+$"()& !!!.3:?C&&##((IE*G99;>8<7:<@@FB=<27@=?DA=8C&,+8?C85;?73@D;5%!$(*8#B=@@@F>>>#;$"CBA>=;>;6::412301..1(*(''+./)%$$*)$ '(/*#%(---,**)/3-0/-+'&%%&,+)&'(&(*),002-+++**)''(%&('%#%&%&&%%''#%!!"%! "(+#$""!! "$##%&"#!! ""%""#!#$!%&+(%" #$#" !$!%#"#)&#"$ ! %*"$$#$!$#'#!C$ !"#&" #! $$"""$  &$!""$'$ "- !N11120022-/-.02/.0 +~}}}~~~~}}~~~ ~~}}~~~~~~~}~}}~~}~~~ ~~~~~}~~~~~~~~~~~~~~~~~~ŀ뀅ρ~~~ց〇ā ڇ¹TϸȦ÷ƀƾͻȿöπᘖ؄́蹽ӜʹώދԥŌ뭡ͣо㝟ݓɊՇˇȏ蔟ἦپؖبƁ绊ՅӀ뢏Çå孷Ðߵք򎈃ܝͪ⏱Ԃ͢񈂂Ӗύݜœ푃Ҁ􎧱钑ķӁ¾տƷ¢݄̱ݶăöǀկ˭瀈ɿɻ¸Υdz¼ߞġꌙľԽဆ􂂇շфͼиϚْƲ͹̀ӍIJҲǷüȽ˼üǺĿĩжめҼθǹ®ПϿĶǵ׿ኜƫöꎉ񎏄犃Ŷ³ɼþǹ¯ĿίӾ̿̾Ǵ¹ˤcdaddhggd_ddfo:kg_`bgmk656hfffiicg5e\]gjd`^YSXfkr<9;<=AB=:<=;;?>8;7:;96667654428D:l668:::9:<<<===<:=@>999>?<=>?A@@ACA>>??<;::;976;<<<;;<<=?>><>>?@@@?==9;<=??=989:866k79<=;::9;9;=<=?==:9=>=?==>?@@ACA?@>=>=;;=?@AA?=>>???@???D@@AA@@@?@?@A@>>>=;<<<:8777;<=<;<>=<<;=<;<=<::;;::=>@?<==<=@?>?>=?=<;:889986i5jhp8789;<=?AADHIC@>>@C=::;<=>A?<=<<99;=::=>>?>:::<9gb^]Ql:8f`ZVZSGxoz@F?FRXSSTQDkV>KLNSR@CGAGOPRX^_]UUQOORZ\[YYX]ZYZTPMRUPPSWWWXWUTOMOPOMUTLHHIFBBEINRRMKJIEHA>NA;?AIMNLJKLOSROPXcn[UUSQVWXXXUOME8POFIInYk>DHOWT]Y]dn]RRRXQNNLJIJLNNPSRUc^2234445036558741363646673366444352/0385487757654512763433321220230VUY,-VJH1.662U0//,P63'1344167]Ofn]4O.-T/1.+\\U.-W[P?JB[R(!4E@- *8?72*\P5SE'AFQS@07RB1=-9,++/,TNIIST.P$H@7dXL1=LJ9#0609E\)+6UNRV7WD5_2udAIYwM}xXorpaUzB]X;_]=I]%.'.FX~C\16Y[E.SN5>27;:4SX650134A2;>?BBm0B-2152Wg*HS5+/80D0,-+893[7:Y567V3:?QQU-76;96.YS2s8979A52;7?==DNUa__VGGF;=@CJPONHFCDIJV`_H@DFKQ99A:GCALKDFNNOMLKJOTTRRQQSQQPQU\^YXWY^a^ZWVSTVXYXbUQVRTX[]]XSXUUY\_`]_bcdhllo<:88pc]MMOLInQIALIKKMHKMI;8@FU^IWUX\Ycgl_Xckhnh[Y\fagj]C\Z]^aacgumhefgimnmtxsrtz~yrsnglqlgiigbf@9sohkd\cdgqnif~~fV[ZVXZ^^_^U\_^^_\[cdaEHJNI:VJ_YURMLCbSPCZowz@rae\ad\Z]]Zchgbdkj^I[>eBKcu?6Xafd^hmdMe_GPonrFboea^\XXXSNOLMKJHx{y{|yswvv|{vst{yw}{}z||}zxzy|zxx{{yssvqnjMKLMLJFGPF|zj_Y_caSVYScfd2bfkd^WPKSJRbbYSSFGE@8762=,HfAJ;dQ:n{{|ztnmmdeecb``eca]``[\ZW\biii_\_mmd`_Z]`^^`]Y^Z[][XY\SR\OQOVYeig^^]RRUMMSPPNUNKKOQYIOQNQ\Z_reZKORLIJDGDCKIzINEMRNOS^`YOHNFJJK}ad^{KRWS\XSUUTOIGOKIyxoi`\Y`Z]g}mXYrmnsthoptkv|teg_b`^Xaofaa^fg?PFGKDx@v=>CL}zxqegkjmvsjc_[_^^ffeVXYTYdc]UQY`cZohd]_iocbb]QagYacb\[a]PYnjc`fpGM=AHJKMHFEF{tpyurmkhdYSZNSRS\YWc[EbCN48ErdRNPNKTUKORMHm|t`o~}D}|zqwp_[mf`vodloplklgYUPKS\NT\RQOAMGFT_XRQJLUSXd_TV^KRaMEY\Za[W_[acZRUS`lqonemrsefqrto_ZHOYh]]:`8=eW]Uwxqccjha\RMOSSIKTZTTQPKIPMORKHOW\lrr~vBKKJqu{pkgpoomqiqyyvfkl|srqrvGKNsJFBxpuonbblf52-1HM[/./1+/0-S2`a]oHAvmhvEo|Fwez?A}GDut?Cypgkgggfc_\_h_VPSTUXWdeYPKIDDN\_URX]Vc\ecc`_cbgc`^WPOMMZ[XVUUQKHSdibege\XYW\ZY[RPSQPPPRSVZZSSMKSKKFJKJFNECHGFFFBHAADGDBAMQIKFDA@DBROCLMIOJAB@EEMSPQKDAAFFRDDTTOrMGLLZJNWKGFDFJZUTSNNB:@LGJMJBIMULVJCGKHEIQLJEHOJCCHMPI8:?@=C7>IINODML]BA315:^597>_4^>G596579;>=768:5`d2674534;856A;=<<;<<:978=@AEDAA=:8779:;BHEA@>B=96669<86l65hck;=97fadee43fbcd00-/13141.002674.//443112365/00-,340..+(*348=4,-,./200/.0.0.-././-+*,.,))((,.0,)-*,0.,))'('$%)*&$#$'(0*/0. 4  33!!O '1105!$$!#/&63n./-*,10.../'30.,+.+'C?A#%!#&)'()'!93!''%((!#"&%&(*++&&%())')')('*'%#''$%&((+,*)'%$&'%$''"!"!!#%''$##$"###%%##%%')&$%)0:/()&&)*,,)(&&"&&"$&8.7 !%(-(.*,.2+%##&%$&&&%%'&''))).)    # !!!! +  ! !  + " ! ( !'"!$* &+57."89 (,$*.$")!")  dS""%.&!$ \!  + +   + $  :5+  G #!"! # &%##&'&*& "##&(&%"#&$$$''&#"' !"*,++-,*,/19:8641&""! &(*&'#'%! "(%*&+"'*),*,-,%+#5-!=% !O &)0/2+#%# #'(((%$##%&*.+!%#'$!()&'+++**((+/.+,-,,,*+,.2400/1241./.--/-,.+,-,-.,+/--/354134459::<81/'')%!6'$!*'()*&)*' #&-4*,-232:=A629;:>911595<>5$5257769>><<;@!@?BBDJEFDE#A?B""CC"DEC?=@GH$$FDCEJONKFBB?<@A?:8673488>;9579<;==#$<839:7>==A<=>QQ@565447::;:47:99:77;:4 " *"120/,+%.)%!1>DG&?4;:@D;45637>@;9<6.'2"<)2=H$DCA=@<59:>DIIE9;;66423;?@>==8732333;><>?<>HILLKFHIMIFDDDGHKKMJNNIFFEFDCCFKJS]_[^ZX\[SX[[XWWVVWZ]^aYTXXRSYX]V\bb`11\WJFA5441/>HRTUXYV\TQSTQQQZVIOTXYSUPY\VOPTWZXZTPUXa4\MTHIKNULMPVVW[YRW]^YW[\3b]`]]ST.66[^64b`_abZ]4563_.031.--/055.*/7)'$#%+7=:?@@=<88=A71/-20-0.,+/0/-.2331.228:85563124435678=9436536423ff11.31cadfff[WQ22..0.*MSVTRTORULIGQ+*,VPIA/.4>DLMNOMNP)$!! )-00-25, ,(!..5&9=98753340,.,,,+*PLFCBEDFFA?C@@EECBAFMSKCCGEEGCDEHJIHDEFHJKILNGELOICIJJIJPPMGFFC<;9643,+-+))(+.R&DBA?B=4*&*--'((#,+,*-/+)%"& $+*%"#4"DHIHGDA??89:7755876576132158;:;655=?8751475554372343104-.6*+*/3;<;655//2--0./,1+*+.05\VXU+//GHNHLP.1968SE;6+.0+'(H&'%%*(GHF)+%+/),1:<8/+0),+L-H584E-.1.42./0/+(',*)NACM;96525/17LJD;./?;9I>?6<<>:BCI?572755164-*(&)/*$%)%A"= #(@A?=67::<><85534327:7.12,1994.,0572?95239<3464*69/3673.43',5-*,26%)!%&'(&%%&FD<9?<:9:872/4)*'&*(&0.!.!81)&)*&.0*+*('C8CKB4;BB$EDFCCB@9@;2.952A=8=?@>>?:30-)/4,.5,,,#*&'/72.,')/-.54,04%)5'%//-.,-30561,.-5;;:<5:=A<43(*.510*4.3/D@?;46=:73,*+.-((*,&%$$ $""$$#)02:=<=<=@M&'*:($#<7A>=<426/%24/9&#@;9@&;?%?4?!#C&%<9!%A>89877631./5/*')()+)51+'&%" %+-''*-'.)-//--..32/,*(&$#),*(()($!(23.02/*)*)+**,&%(''&%&()+,')$#'""!"$"!%""##" "!#$'$$!  ($$%"'$ ! %)'(&! "!+(&#:"!##,!$'! )%%'#%% "#"!$("("!#! "'$# !%" $$! $$%$!'&. -,)+,%42/20+,,/0-.0 +~}~ ~~~~~~~~~~~}~~~~~~}~~}~}~}}}~ ~~~~~~~}~~~~~}~~}~}}}~~~~~ǀ ~ӁŀՁ 񁇁ѷöʽ!϶ƱȢ÷ƾȿ¹ſ쑬ɿ숑ـ䇋儋АāӀܖ±ݣҠ˶͝ʵʊƝܘ􎿀񒂻֊Ϡýފ„ɯͅƅֵ̺ү奈ⰀΑêţ𰼚ĥƤޙηҹ΀ў೥τ܄甸׸՗텱ނĚȾ莎̀łꎘӞ̷½ـ̼Ↄⵡл謒񓎐śݿ􏜏þʷѩĞȹҀž½нѶꏀþǺƏĵ숂ƮԀпĵ̵ʽɚýنε½ϟŸއƀöǺıɷĽص򃎂󐕞ŷ܀öĜռƶ˵ï²䛀Ļ󉂌Ͷûɿ»Ĺز־ҽϼ̷[ededfgedfabehgikd`^_g8:679855ifffeca\Z]_cdhe]WT]fmmi_`cbfnibbbjb`bca_``^]YXYXTSRSX^`_TSKQd578<<@=;8hkicXLHNSSTSPLDDQUUQMZi^46678Y;=@BA=999:<>=??<;<954;A<979964556498655789;;<>?>=<<=>@?>>?B><>@><=@A>>?@@=<>=>>=;=>?A@??BA>8:<=>=>??@?><99<<=<:9K889:;=<99;<;;<;;;<>>>?@ADECDA>>AA@?=;;;<<;;;::=>>=?C>>@?@?>??>?A@>#==::9:9:==>=>@B@=<==;;;=>><:::9989;:9:<>?AA?>A?;<>A?=::;<<;=:8768:7lmmk8:::=@AFQPPLRKDA=;;>?=?>@AA?@A?>;<<==<<<=?:556;><<;877p53223eee5787ia`emh8:kk67k89><;5fd]_k775i`ZSIA}BIN]RGW_Y[YTVVHFF>CLLAFOQLIIHQZa^TRRUVX^WTWY\XRRVPGDKMJIMWSPNJILFFJMLIGGIIGGIHIGBAB@>A:=C?ohh:5442363.12.1530041010Y2,0.XVUIGd982.P.22.J00033032]RP[332.SMRK*'A0,!+E-KLIE:5HIMT.N2-MEVNF0.07=9HJ8NRPP72.D92D-8B189366OGO:;6RVE/(&&.4;J-)/#-#6//<070./05X>JaSKS6]R[QWqb^pv\twIwj~NTtK\JYXNKA[CI9*$4GOUb`P?bIYdI60E?+62OCI5^M8:988757;796-258:51L@J731?:WGN.@?:53/K:\?M.6;>?AEoD6.*RUEF9$L.058==;M11SE@5C>IX[.,-7-44WRORYR/1VAO25:7XKMKJ6:'8AD<86,G=B4659=:7>DINSUVWUTPOR\\``ah5358885551[XHQZSSKEfX56eVZcYZ]g]abb]F;\bgYVPSZ[5gd\[ZX]E>;a9=4la5\=9:32E>ADHKLKLRQNOMNOSRRTTTUXUVXXY\_][[]]ZXZUQTX[[_j8f[]]\WW]jhidjnilkn956b[d^ZWRTUTKBCDIJADIEMXS_79GQVD?GY\[]VCcdcgje_W`fY^ff`\RQSW]aadhb]_adeiklpss<uuuttsstvus<<==A=pDKBEJDpqr{AGEypspebfnrujda[Vddc]ZQ]b^\gjaRUcUXb_g[aheagaabVXcacebYXVgVVsslgakAD~mec~@xqv{fouxkrdtjdxmls|sy}BDvF?JDvwrprnfgd`YYaV[]../.OSTRQSlxtktwpiik{u=D@tpvEABHBsFDBD94?QMCFHOA@b_35aa9<@783@?8;79024;945689eaaa3646457;868;<;<@=:=<>>:9::=?,>:4579>FEA@@@C=:<:9<;655665gfbk66:87hcigdghf122112./254572.-,154221/.,+,.//30-*(.2674/00.38410040.0/.../.-+*)*(((*-.01*)&&..00/+$!$&()))'$#&(*''+2(\ !  R ##!!W4664 #)((&+'! */%2332/..0..12/0/./.,,01/,+'%H&((/("),*-+)*+$#$!#''!#%'$#""'),,&%%'((*&%'('%##(%!#"! !('%%#"# #!!"#" !#""" #!#$$%$$!%%##((#%+,*+,12-+*))*))(#!!998! $-,+-*&(*-(()'''&%$%&&'('$'( &" ! !   +  ($ "!"6F&4&$ "$ "   &@A0 0"0#$%'"9=&!#     *( +   + %7"  !  !#!!(&%$&&"#'&%(&#"')**&!!! %"!""! !$*..-,,,))+024&'"'"#!%+%&,$&',%'')+ ),1-,)))&-/+*'$+! 1 :41! "'+,++-!"$%%%'(&%! &)..0*)()(-%),!&; %!$%')+)*)))-,*+))*-,,.-,.1/01//23311220/0-,-.1.-22.122./4:8848;899</,30./,.-*&#$$')#&($+-2<"!)./%%&15340%>:68;84.5916;;84-,/1478:=9578:;;=<>@A""@>CF&$DCCBBAAACBB"#"FEHECBFFEEEFEGK('#BEDEFH# 6489=@BB=799=:99?"# 6A;=@GIGT\WE><94344:>==8689:;89<<:40*+2$)52+&))*"(3"@==?E?23*).557=70034574//,$"2")#AA;64;=?CCDC;8>9;;;=A@?87:;:<=;5-,79IRUZVMNS]UONNNUTPSWSSTIM[\]ZPPTZUUV`f`]UXWKDBFPCDJHQKIPPONTV_2_[a^URU][Y`45]_572\`46hbb4563\02/00.01.-3537785899=@=:9=:7535542*.-+'=@-,SU.02..3372475552-/43TCR1`bdi7h44556gc_^aa\UX]aXXZb^`[X\^_[UUZ+011.UYWPOLH)*--,RNNMB,!,/8?>>ADKMLJC7& &*-%+/4*/8:954423331.-./,RLF=<957:7:CJGFFDECEECDHFCEECGHHDFECDHHCEIFGHEHIOMLNM>F&%IIV..VUSSTTWVLKLFCA?60*'!".14''./-)#&*$!'+&"! #.CGGKF@>=9:/2/379;;>:>CA66=95:6585774552/-/.+26#-,.;>95452014+-4)2-3+*+,-WRX00/1RJOGB,/1-4/6;0..+21E1*H)5*())&%&D%,**,,./2;7,,J?RVQ@./+'.1/4155000.+)**NLJAKA8631;*N=::86<7115B@===@B>?4?>57679;6+.511#(#%)&==9541/76422+3633;=7+-6,-216.2763635702726651/,;/,<7.*,3%#>%&))('&%IC>>;57575-4.,+%'$'+-!'"%0-0'$'(*/.((+($C=?E=:?JIA@DD@AAB>9624/(-822=?C>A?885553.0-63/*'*)*+2-,-+41014111+*#% $&*)! &.0-,',/538>8C?;;B3+5GC>;5.&/7.((.+)*+,#ACA:4/+021,-)/5,+$%%)++***%(*/5658B9@6;6.?89@IKEC"$<% &#;=?=?=795+"$'!$%$7A?;=A>::8@> $"?;<%#"$#9%$ A=<9h87651**43+*.*,1+2.+,&&!,+%%(.,&)(#02--.22.-.-''))(*,,*,'&&''+,-/.,*)()))''*)%$$$&&(/'*'%%$%#$#$#(#"" !"!% "# #"  ! *)&%'')(##" #((%" !$""%, %$)#)'"$ *))+%&!$$" % %&($!&)#!" "  $"'%) !" !'#"#'!1/.-/+*++2/-1./1//132 ~~}}}~~}~~~ ~}~~~}~~~~~~}~ +~~~}~}~~}~~}~}}}~~~}~~ŀĀ ~Ձ ɰǿΠ˦¿Ÿ´Ŀðܿ썄ׂ膌ۗϊ׸틀е؂ոߥے퀐Ӌʏ屈膖ㅀڀÊЅ盘Ĩϟ܇څٺݾijܘ䄀ʳۦ֔̕ߢպׁˠʊۂٲܒ瓗苦̩ᣱč󏒄򂉓։рœɿҠꀊ䬶̥􂇋»𪂔н¿辳Ǿ̻¯ĸ֨䂀ޚʿ塙ǿȿ˿²׸źޛՂۼöķŤ󊷳ɾοɻ񈋁ŽӰàѻ耋ΰ󄂬̩пӷ̀ôƾɻהȼ˯뉤ሐÀ򁃀ʹ˨̀÷Ż¼ɿƵȺհĩͧȮ̿Ϙ󆎀񊏛bcdfffeddbidjekia_cg:9<;==<<;;<:898777987567:?>:9898889:<<=>@=>@9:?AA@A?<:;>A?<<===A@B?<<=;=@>;===@DDFHEEEHC>>@@:;<=>=<=]>=;<;<;<;=>==9899:><:98;=;;<=<:;;9::<<;;==<<==>CECB@?>?@?<<>>?@>=;::;<=@A=>>===;>@@?>A@@A>>>=>@?>>?>=>=<:;;=?@=;<>>=?@@@AA@?@@@><;;=;;<<;;==<:<@AC?>BB>=<=<=<9:<><<;:99987lkn::;;99<=CW\WDEIOM<9:;=::B>;<=?CE@;:;?CD@GJ>FLKWSQQMPMGMVUNOjv`^]_]ZZUKOUTTTPTYUPSRGCHSYVST[PibVU\bYRQPLKIG.HGGHHKPSQQSQSOXb10332./235654422354111234/26642102/57113-/331,/41/1-L70/Z-WXNM17950ZT0232.OJ7/R.7PL321Z[413/SYH?@13N0-E7]/0HY_]G[]&)9(%"$+/(=A@NW/.=;9EC;P-Wa5,J@+.B1@aWXM=zDO]zbaln}jHVED_5N3;\UXLSO:'0'FRSK~qvbW\Bh>\S`35/>%4OS2GA14*1Q;A34==7U2_D\4V9YC>0LA:!RJ+#(OIB"$%&5#)+#)@5H\TWK483[k_26:61PI568799/LV598-H0<@@>7N;`1ON2IMQ/ZE4+M=A=90043X45WI471XWW33/NBZZQG^25457:950^`]NOL1:<9=AB?:642512544467;;6687533b224563[^22353]]\WNNPONRZb`fnFBMQf[VQA7=ALRKBNKKJLKKLMMMPTTTUZ]d147976522]USOIY^WE5R/68a^`YVWedehgb^VZ[WWTV\da]VY]\\b\CH63CA@7kab7845`;HQSRLPPQNI??CINPMKJKHDBGOY\\\aea_bII[LGQ`eii@EGMQQPOLMROLKKJKMNNSTUUUTRVWXccf][]_^\]WUUUZ_YZl__^^]Z\^cj9mm<;qfj658\Y][UQNMIDKEQGHIEAD68\<+85HIcS];VNPXOV1E__a`V^]^bYXfrm]VWVX^[]aa`^\X\]^`ckrowxruwxz}>xxvtqpt<=wqtz|y{xvxuvvrnnv>C@?}{BKFD>lmpqhbgrZS]fbdhhs=>p??redlqJpaa^_]\^^__b__[]_aa^agmqrurvreb_a]OZhe]bvpmzk_`_WLF<5>ORUTTKILMMX^chikmgZODUiijjnjehlke_bdc_cmrlkogckolazsnllc[^ikliw{tspotzCCFFFBA?~}MJIMMONQVUyYrvunmdjjglndj~~{|wt~{x}tsv}vt}PNSVQPMJMSWZZSTRR[ZSOW[aYSWXZV\\UZZ\S2NKOVKFKOPJEBELOTOOLKOPOPOQRPPMHSRSTQONILNPLKOIK~~~|rkalh\ZfoqzDACDC:V1;B9AUMHnEowmXv\YURPRORRJNMKLJredpqtpdZRYTOMcwz{}|xwusjjjikputwogfrvrkmhxyvvxxtz}xv~J~~{~wkiike[WQGLW]mjYPRVVZ\VXZ\IUXWOMGF?FN:8::Zf\;T:A&+Rbn~{qpqqijY[Whmgf^cd][SRXXhnfbnjyaYab_^]^b]]`[XZNTTVZNGQPRQ^f^[[]ZVY[YKXXTXPOMKVSV]RQ~TMLRP^eXPQIPXUOWTKMEEID|LUXYTOIIM|fn^RWYf>ba_]]\Z\WROOOIzpglfg\_mtfbcjcYYY\anxnvuqrvuvvpihe[^gb]fumszDECAuowwAG@xsmupgh_lsmjaa_Yc^^`YW_c`[W]^H\rW\`Z_^`mcopkbNNMV[n]SV]ZhVXnk53_jv@smFQROICvtnzrrq|fcnqr[QUEK]X]e\bfh<4JuWNOGHFJMLC}JME}lnrjqClozrwE@BuhgpfXbe\jgIxneccd`[ZY^`[RMJHFGHLFIWPQVe[OJPRDZbOHE;IERGDHRXXTX`[Yamgm~sxj`bcfjfLPX^\]OOWU]G]UKDAwsofic]_`]YPSW`j]OyBT]^[`[KEPPbYSW^lr@?qesj^nusxDppnrlflcnzqnruuomwBvqhCKEqlwx{b`b^_jrldb^[[ZYUMRRWpwxwmdkhsvtow??=DIAMVKDu=C@vkbcb_ZYW`a]\WUkj\Rigg^_ZNdGDVZaT\U]`e68fa__^\`a]ROVZ[[ZZ[_b_WVTQTY[^ZXWQRRSXVUWTSQSVQSUROQJJJMNOORMTQNNIJKGJFCHLLFHGEB7AKAHUSLSWUPQOWTOIFDEKIGHF:7B=A@A;@EMOG@HLQNFVYESg_W\b_XKQRD:DKABEHRFIQUYB?GGUGQRMKGFLCAGFGQO4BB6QNHi8LY:ECHIEc[a4915;:;:0?D9B>B=76:6146553daaa259875872:;9:;=@@@=>>?<88:;9<=?@79:>??B@@>CEA:98^<&8(+4 + !%  !  !  +  + + #7##P"# !!""$$*$&'(&'#"##"#%('+2 ,'%& &'""###$$$&&&'),,-.00.'%%##($$*)*%#%,*+,-,,(+-++*)*.++(*.*)*+&%"";561%)*)&(((&$ #&)*(%%&%$"$)-,*(,0.-/!(3('-56::$'',..-,**,*((('(***-.../.-0/07573234201//-.0/)*501243123498;!!=78,+/.-,)*&$)%.&''&'+ #9&"#..A7=$6101,3):553,35471/7=<3010055589988567788@=8=C1/7=;CBDA84233(+0-*.<==G?6881*&!%03540)&')(059;874/+'$):9:;>:7;=;99::95:?C?>?<:;94+<>??=6.2:>@>EHCB@>CGKMMJ%IH%()'#!"EIMNQSTZ0.,XU0/[Z]WSRQOVYVOZ`21Z377e^\Z][[]a]TK4CGC<8036125.4JSKKJIIQUUWTSQM`c[UMFOUYfbZSNBMWSSXX\]XUNNJIFMQRJEEEKIHJOQOT\22ZYWTJKX]Z_65YZ31..058;;5643;:2ZU]\\[USSW/45:4267:6;:58882/+04+R)+.0,'$*-XRV[1621,,00./03522a`.QK,]b5568a\^4fggfc1]YVWWXWY[`c`a_^Y[[ZY]0XQS+PS,W./-,+(+NJKIKJJG>;8;7,,8??G)%$%#,& 2%?B;*35442//.11U,//-,+TRPKKMKKF=46@@A=3*$)'##3BDFGJHFDCA<<;<>@EFGA=;DIB>>:ECBCED?EHFGILMHM+PMNNNMJKMJGHNMIK@;:;;3-)$"&+52'$%&&(*('()%&$ "(%!':BIKFAACD=>23.;><:58965..12<>64>VZJ3'('-687765242-*)+'OLHC>8<68019:?E>>AAAB@<997136//6?9;@$&%#D@=@?#&"?<9?<571;@;8333062250/3774156'3@,-,*-,-63=:95),*/0:1+.208-,70*5=">;&**('$FJB?:A<;:C53;=@4-. #*%'+%**)$;)(($$$'**&E()%ID79<8:#FF8;B9>@" #?88>7-45-94G*LE?:9::7311583.+)''')*((0*-/:3+'+,".0%$###!#$%)3116<8:GGBC81467:7',2403((,*+!0+&""F>>94753653/*,.2:0*7$,2112.(&-+42).-58""<2<6/9@>>"A998=86827=77;=@EDG<:?"?<3"'%<;ABG755.,1751,&"""!"$6ADIA@:699:<<:@$##'!&,)#<#!?95664/.-10..+)76.&134-/,%0"!,-.%*&*+-11,.,+.0/*%)*,,++,//0))(&),)+++*%&&'))()'(((*%'(&&'#%$$%%%'#(&$%"$$"$#!$)("!!! %!('"&((%'%+,'$#"#&%%%#  &'!"#%% (*'3,&(-,)"%& " "% !'(*! * &'%$!"" &$*'$0$,!##"/...*)*#//311-,-.-122け~~}~~~ +~}~~}~~}~} ~~~~~~ ~~~~~~ ~}~ ~~}}}~~~}~ ~~}~~~}~ +}~ ׀ Ā +~р 耒ýþ၌咝ŹʩĹƽȺͷθƾ恊灈듗ڑƒݮЈߏ族΃ȗʦڡ̢퍙όՎ֦ιؔΰʱσƲLj蟒ʵظῼ吒̊ㄴᔔ脿ד慛ʬĎ̈́Ҍ𐤋ٮܪ򦠡∘󋊇ۛŰܙпֳԆ;ʼn؞񁎝ſހȷɤ閝򆐕üν̼„ɵƀΩԀ򊇅퇃ƶ𷅩Ƽªʀż̎ÿɶ솋ǰȿ퀁ǾýĵʯŶ뎙ѻܺŭ􇃆Žļŵ¹٢ēɿ큂׶₆ÿ䁇´̻ʵĽijŽʲĩͳȶ;dz끍󀂆:caabaekfbchgiggja]^c6@7:=@@?B@=EEo76kfd`b``gjgdb^^^ac`_ijkehhc`ahecfghc`ba^^][Z\^^[ZYXYWUTYW^j6456hj8jhej8ld[WVPPTWUVVSRQPMKOWY_-acc8?CD?;;?CDDC?<>?=<<:::9987757=CE=98<<9:==:;=@@=>?<<@@>??@>?BGB@BCA=:;=<<=>>AFHGFFIOLF?=>?=;<=>=<==;=;=>=:;==<8778:;DHDAAA>:78:CBCBBAA?@@=<<==>AAC@<<<:;?DAA@??@>?@BB?>>=<<>=<<>@ACB>;99;?A>>;<>=<>>???>?@A@<<>@CFEBC@>=;<;<=>=::;:878=?=<;<;9;CIJRK:<@<8:9mpuq9;<==<98:;;<>>=?=;8:8667889888:;99:=D=;<<83377898654haabcbga[ZYYY[[ZXWVTS[k776i]ilmlbZ5:;7hjdbbcZWPJONEIPPPQQTRTSPNHBlDG>;AKKID?HRVPFAFJOUSWY`^PFQMGEHQMGLTPJIHFJGEFKJPPJJMKHFHMGC@AEEABCCBAABEA>A9784M1Z:;$9)=#E7&0E,O7I%4L!;.@M[BAPRE)L+:,ECGI60AJWM8YaPU3@F'4$6 2 A)G"%#313%#%.1)>TZhIWK[.5/`i:DA99667996782-W2=;8.B],5;;759XELUMOH/6687:==81]_O'L26514765663372-31\T6=2N>L6LQRXP;T99:56TM1876221143254523-.1-Y444_[]a5554668;=83324343ea``__b5522798446634333c233bYZXZ[XR\b\\`b_a5_Vcb7X;AB]c9BBADEPTJSMDCBKPPRRQRSX\`23551/0W1S>[6_KRU3QMU8:fcnnp88786_X]XTPUYY\`^\WQ_gW[YVHC2?=87idRa1MKS6BPPRXSTRQPKGGLQRSMLRLB>AEOPORO^a]XU;__AP\klhabb`5@ILNJGLKFILKMLMMPRXXWUSXXXaa`]^`bb_^a``VXZTTYWZ^^[Z\bb\jlijqnffj46[XY[UPPUKJJBMA;9\78)!655 "2..AH`g^?F[eKa@Z_ccfjpkec^]eliba_]ac]]_cjlmpqsptpspv>vuuttt:r^UY]ea`ZZa^UGA<`X@PPPW_UR`klloouwuk]ddcglkjlhgdccdecgmknsrrsywspyuCelpnit|}snmmqmnryrw~}BGHFDA?<;E;7/=73=c=;@ly~}srrztkffkjojme]^^VSUb[_c^X[bpm_\ZV]]]Z`bZ^YSVRPV\WWPPXLDRV^`^\ZXUVX[OU^TXRNKMOO[[[WTXMNOSUVgpWKWICX^LRYPMMFDFGHPYRR`SLKGE~pvLuTWf9>kb^bb_ZZXSQSNJztupphkvxujifh`XWYX[n>vnuG|yuypplcjedfZetqalt@ABCDuyo}DurmqtztukeuqeebaY\d``faa^\\VLPW[\cUcb`UZUbn}ngeSNN[mc[PoeWVRYj4a`V\xwlqDILPIAx{oxmzutw{faswsgXXR\fd8`\XOhLbmYPNIHIHLIF}IL}|~vjk6i?~ronCAC}tcecbdc^^wo{I}|qgfgee^]a^ZVUSJE>BOEDKWU[W`QL?TOR[ZYJI>GDMDJOUY\[]UYU_phirmlh^ca\_kabdY^ZVQZQ^bPgI=AEzuusomhbca[QP[^a[OOW\YV\]TPIRSUKTV\WUsvlpth[_mon>BEfqwejnlz~xs{zmZrwCAznCCFvprkec_kzrpjgec//[[WRZUWbrzvwqt~z|k^]p?@B=?F\YF{<@@zsihdb_ZZYYVVT_mni]gng[n]W[TQcjU[ZYb`h87iib]ZX\]WMTZRXT^a\afmd^YXUUVYYTXVUTSVZVVUSR_]TQQNWQHIIDSWUUSRPOMMLKNLHDHEKSOIEA7ADDAEEJLTGDMIQHSKPWMRJFEE??BI6>M;CGJD8=I=:9848G:>;>C;9>6Xb762``2243258:98533@8;:;;<>>><=???;:<97:=>;;776h66ieccb`h;;<975ggee/.052//135.+,.! #%# '&6632.-..46432..-.0./5531431/.2201220-.,+,-**-///-,,+()(*(*/11220230-++'$%))**(())'%&)+.120 !"! +6    ##"""#(&"+ !  + '!'#c "  #%+&6797".---.,/-*+,--,)(''+10+0121-*0300140.*%'%!$'&''')()('(&#:#$ $$$"$)*(# "#%'$()**&&$!&% "(("##!" "!$%""$"" !%# "" !!!!#"#!18*()-((*.0)),*'%&((&%&'$$)-0+++)*+)(%%/)&,,'&%&&$$%$###%$%%'&(''&'&$#$%'! "! " !+$&! +  +   +  ++!2   & %  + +  +    /!,(" /F(/B@7*,))%## + + +  ? $! +      $6  .9"   #   " #%)'(*)(()+'&$&''$(,*)((%%'$+)&*1 #" "%%''')+--,!!&( $% !,-657'$''('*+(')'(%",0$(&'"!!88.:+(+!)'),)**)(%%$(,,-(&)&!!"(('(%-/.+)35!-3<<:5552"')+'%((%')()(*)+-0010/1005422434321344,/0+,/02343237619:88=;765--00.,-/'()$*!0!" +,<>4$#27$,"35757;><86538?<78769:6569;:;@=;85841,06.-225563252-&"20 ''&*/-,8@?<;:?>;937769<<=>::967;?=<@@ABDB?=CC39=;A??CHDEIFF&**(%!>CCDFFGMPTYOKJTRVVXZ]1^\^^_]_ZVNPY]]`^[WRVTLI>@DB@, .4BB4-9NUSSLGEMPRTPLFRb5c_@VPS\c[RFCNLQZRNUSQINPONKIMONOROQQORVVYWUV03`[`\Y..0^57\]493^V/\5327?7ZV/21[OX[W.57444666;<<74763/.05.T-,,00-TRSV]ZZZ_/ZXSQVXTUY\[\`_^\\.\39:78aXX\___`\RHIPZ^\X^caZ^[]dc[X[[[0-.-0,M(EF.++*OMMHBHGLOHCFA?==47::;@A-1:;! !'(.64;::6311CQ.-RKEJUTU/0XWWQUXVQURONQJHFJIF@/)&&*()-=ILNNIHD?><;;=<>BF?A;:BA9GQKLCAFEFBGIHKEGJGMIEEGEIHHOIEDFFHJCB1)3(%46)/3-*,'&&&'H.30090++((QSOJAEQW-K>&&.;67:;8320-+-*(QNJB@A>?9;AMC@;=:90*),)(4 >7;&EA?=F@;=:48564+4@?5@8C$>>;7754.28448453241*-0326,0,*$'%08D:57.**2<51)?7.-**-('#-BA:<$%&)&!>B;B:@>@?C62>>@;1/*,.-(&")"/6+**&%%$''&ID()KHBAA;213!E<98# "BE?67656421?9@(EE?:;;:93365200/*&!$,%%'--307-+!.(-10/'&!!!$(+-0,0.4>89F<;;817533;788041-+0(0.(8#!$@>==<:8784-(*0160**/21/13,,(-0.)++,*)3698AC=C@@#"@6"#%D@<<:8837?;<;82)#$"# #,:CAAEH;810>#"# #01#>!!A>9:751-/.,*++1765-364,9.+-)&27&+,*0-244/-+*-.*$)+%)'-/+//5/+(*))')*()(()()+()))(/-(&'$+("$#(*('&'&&%%$$'%# $"%('#! #' " #%,/*)*.*#" %(&!## !#! "#$"%#' $.1+&*',&+%&  !!!#$'%#(")!&+#'"  "%"$!#%'.+d(,-,  /40.00-/01//}~~ +~}~~~~~}}~~~~ ~}}}~~}}}~~~~~~~}~}~ + ~~}~~}~}~~~}~~}~Ȁ ҁҀ 聆ր&̯·ɼķͿƼѽ½ɿ儈텎ۀӧተޖ腁뿸Π癯䄞ܦ҂ŷЀǻʖ۴‰ԦНŁʽ˗ՁƇȸԝטԦ쀀ѭű낈헬쟜ըꖗ󀁈܊õ̼ϥ큅ث̾ě䔈۩􇗗ۙƺɽĿŽǾʡֿ̱Ě꾄툈ŽIJ̷ժɭ􀆇≃󇉉󂁁ļ²Ǽ׀İ̸ĺǷ¸뇂󖤩ᖍɱŻȀȅľ˶įҷȼ´̟󥾹숂叇ѿǭļžѹƻ½ֵֶ򆍊ͻނڀűĻüΰ˰ϯľ銗 1geddcedigbbfkicgg```^9;7sFbOMVJUXK>6fcbdda^[hgggeeliabceh_Y_fda`]`]^aeceifbba``_]]acaadda\]URU[bdeed`^a_d5fijjphd_\Y\^\XWYY\ZYXVSY[Z`j9?AA@>=?@<>:57878869>>>FC<9:;987899>9;<9=BCCB@@?@AA;<<<=<=~??>@FIKJJPULDA==@?<<>@?=<>??B?;<<;==99<<:;;98:>??@ADCDA?@?><;;9:>@CB@A?<>ADEDB>>@??@@@B@=?>@@@?@ACA?@>==@@>=<;:9==<<;<;<=BLHDDFFHEHE@B?==;:>ACEBA@?@?<==?ABDDGCA@>@>==>?<<>?>?<;@=>AA?==<9:??==><:===;:oop;t;==<<::;;:<;8879:;;<<89:;=???>;8987678988:7678>?<<=<72359876hc6d_^\]]]YUUVTSVWTSUWTYeh7:7]ejljgck7>JW^\YZe^SW[XXULHGKKIJFGGFEFHIDDFKNMLIEECHCABA@CGEEFDDB@CEDB?=:79=>:?A98EHT[RW_S[WQWTQROPQOLKKMNPPLJEJPVURTUXWMEOPQT\\SONNNKIIJKLLKKMPTWVONPPLJFHK]763563234342311135413853]BG^2Q03631-PX]\0556^IR]]Y00YYWX0533/1\V[/0L]1[[]04X_3172210-.X0,X^R8HNS012.P.3-+0.NDZ6B5J)6HEJCE@G''3&B-+/.***-N1+)*+3)'d),Y(4JG(-J]_$,HM,1:MD+06E&I@)01%0,%/pA2*,%((*2C@21-/71J5GL;T:4BFHH|_EMuBosoUyZLb`cmg[44-,H:'LJAK879b@2a`R,CFN2+() "#%#-,&*63K4KhB=61B?^A]A?@:I1>EK^X:0M9^I?SK&G\J+6.#+ECM. $**75')+-4?6GT66LdiFY..33]w9:558=0*7:987:82N;9782158;;5P1dD9?UPV755679:;=56^6V\344:;97321..\/2440/9=:5dWH]/XH9I-7=:036347/V\5632`c89858402]PPNYW\TU/1246632143XQVYUXZVTXZZ^2_@I3;2:6^Z]VUSVVZ]^dgeb243[YPV[]YZ1aQMMUcNNTNEDGFC;PVWQQWTMG34;N:`bTTVV\011T;:5/4369>"$#/J]XJQlmT<==wVxwuqpjqy|~suponprpptu~xuxw?BEKG;jg_\W>?BWoqmnheg\LV\[`ip[S^jkebfeeF]elopt}wmjnjddcbgklpurz@xukjmoiRUB~{offlglsv{ywr|DGHGILLKC@=Ioadeb_YXWTSRLH|yyu|uvqpfgb[efWWdqpmDuoqKJyzlligvpfdfldfblx}{DOGrqYAvsprnjd_Zgjfbb`XQ``ccagj^W[SOHbiY_nodbXUXnpzbh[UYeh]X[lc`[YklghousjhkrE?CHOCyvmms{w~vpgtpvnUok\hmTYfbhRheSQNJEEFIII}xIH@732YFZyg\fD@B|yk^Y^Rgibhpysntqjgea]YV\\XYSSIIFFFMRQRWWZPJLPP`ZTXSJ:JKJJLXZbaT[[Wab[dhfheep_acfdd`gh\[^[O^_[_ihbHIF|ujnkblbZPFUZ]YVZV[WW[YU^TKPPX\UT`ScnvzkucXekrsnA{oo_emwnuutyladw{AFGxkqzGsumjpglnnlgfqg``]XZ[WXX_ekzCSLpyCJIxe_quyp^l9RYO@}yzsqrokh^ZY]b\ROYZbl9>>fO]PYZdTbf]]QU]\^9la5a_^dZWSHTURYSV\Zb^cp7_\\\[[^TXVVXZZa`YYTRUPRPSIOMFFG>UWVUSWSOIMJHLJJBLFDQYGC;:>GDRIEILKTWSTRSMGAAGLROSBAADFGC6MIE=M:<`KJHFCNJGBGTT\R]QTTECCF?HJI@DEBCOFJOEKOYFQRPODIJF@B=E7?GA>ADKJ;9;963>M\Y]f180:=;837c9:9;?<:?8c[c64b\^c345578<958767;:;==:<<;;;<>;569459;:<88h9898;>>??;;:<<=:7665hdbeide465454665,//./0124300475131,--,<+@//1*43,!3101.,,+3K2263./023.)-20/.-.--.//01/-./,+,,-01/0111-.*'&(.00010---/014462/,,+*+,,+,,.+++*.5G"" ! #%&%%(+% !!   !!!&# !#"$!  6689(/++,+r))*((*,*)**()//*02221/3.272.//.,0-*%"'% %&''&))(&+)'*)(%#"!5"!&.2-+(.)$)-,*($! ##"#!! !!!"#!"##"! !-!"!!!   !"&-&&*&()(,*()'(''%$%&%$!"$(('')**'"'%%'+,(&$&&###$###%')($$'&$$!#$,%' "$%#"! "!""!$  + +    (  !+!      / +   +  +  + & !"!/! $"  #&    + + # !' ((    +,!,7("!"!$!! "!"$"!#!"(&((&))&f&)*('%$"'$%$$#%&',,)'$#!#$!"(! $,%')$"!#! #$!"#"",.'(+(' !%$$& "&)'*!"$ ""#! !!')3!!1*//!3'70$.--.,+'$$!%$&'&'% "$ !$*+)(())&" <9-39;661,),-4$$%%&&&%%'*,'*,01//.,+/434532665554u640-12367344267:38:9:8772//((*)*0+*&'%'%-#-,*&&#!0:6)+::+ -(28779860033897784795668;<><;?<;9;BEMJ&&F#)+,*KFDFDEEGD@?=?>><:549<=?==;9467&239$!*87641 +<=:;9683'*/-.28/-5><64964!17=?ACJJ@=?<:997;=?@CAH&GB;9<=:--FH?;=@>@EHJHFDIPK'*+*,,+)!(.@A%*-/35404K83Y,03373\[ahf^ZYYZY/1a\UZXUPNQPSNM% 7;6>ENF?ITOLIB=IKMMLNAF[[[SOQTQZYSPST-//XQQUO<2HLLPRLPKGJMOY[NLVTVZYW/[`2_UQR18;`S0634199b9734845;80266642/Q/0046;566..038645674/-0.]///55PJQYY12a]]ZUPUSIRSVUTWWSVYZY]\_3621_VWXTWRMQQMFEINUZZ\VQOU^a//YV//0,URGDOO.*OLKLJILNNPPME>>?A><87./70:;3/D*1<=BCB@9663/,+TUOFFF@7H.-,-/0/-.YOSVUTOINGJIHKMMNMKD?BIMF?BEFHAKHGEDIIFGIA@@?BC:+!&33343000,,+&#*0:/)-146/+).)&% %-?KEEFB@HE>>9240.8=<53/00514356436285/-1//4>30/12,137<7751.//24/30,:0)-.2-V>:1373-OMK0-K1789<<)2/&F.1)-*+(*%%%&'*83-./1*NLJCGIGFOQ=TG3#) #=6;<:810/.--)'NMNBBDAEBC>=895285()3;96#D>66'%HB@KA9978B=645:698>CHD%-'=<*#C?@>><96206776651+547647;301/,'79-1<:34.,+::HC491-/8:313=740.63017;;899=%"%*#=D>88=BAB><4>9@?-?:,03$&)%+(63('(&#"#%%&EB>((FHEA#):4,," "AB9204,9957;HA@=B?;:973/,1311.,((&'&D+,**/03-((*)40-1.($" !&(02+11-65/766:66?36798848:3353+6310363$$%FAF=7<:5<5,&$./4002/20/01.32*+-.0*&1(3<>A6?6*47:=7 ?64.19@9=DFE@>@<65BC##$C>8:B&=><7<8::99958+&&%%&%"%&-37@#.+8@$'%<33<@D@=;>>;92.0/11*',-17!!5',&-+2)03--(*..,4*.--4-+(!))&*'),).-/7,+,,+*,'***,,+/0+-*((%&%'"&%!!")))&$)'&#&$#$"#%"%*! # '$ #%#()()*+'# "$+(* !# #$#'+%!!!%"!!#(),#*%() !""&!" $"% $&,'&%#8  ! $$&*+-2(/).-*)*G11/0130/ŀ~~}~~~~~ ~~}~~~~~~}}}~}~}}}~~~~~~~~~~}~}~}}~~}~~~}~}~~~~~π~}~ԁȀŀ րкîʹɽĹءþļ˴ûƽˀ􁄅݃؂ݴڙة£ܛʂ؜ΛёĀ՝؜ӹ ٙ剏ƞߚ懭ґӋڤИꔐۗχߠȇ˅njʑÞ؋䀌풴恑Љ򊎊ƿԱµ¹߄·ǽ̀ļ끓ijñƱ󀁃绡ѱɺ􃀈󒡯¼ĶپŻƷ½Ⱦ⇊­Ϳ½҉ѿžŴĪ껬ʏݥļ꜊̿½ƹżǿö»ǿˡ́煍؀Ѷぐ䀃ϾʵЀϽĸǻȯêѲ̀㊍B7;94egicedhgfgc`degea^eejqAIPTHMIhe;;=>CGCA@>?C=4678<><67544ghgfba556;979;=<:7787:FEB<=:7779?@ BA@@BDHGHHKOWTLGB??CCA?AA@?=>@A>94;<;9:<<>?@><=@CB?>@@>;88788:9:<>>=>??<:998:<<>>?@>B@>=;:99;<>?BEE?ADFECB@@B@?BBA@@?]>>@@AEDCDA>>@A@?=;;<=<;:9:<<==?AABCCECDBAEF@?>=;>AABC@>BC=::=@>>?AA??@DB>=??@?=<>?@>A>ADCB@AA?ABA>=<:;;;:99::;=?>?=:;<;<<999:;=?@@?=:8655545667687778>B<=><;71`dj54hd43_3a]ZXY[WXWZ\WRRSUSZdj89:7fhibeceh89hinjcZVX\a_S[VVWOTSJJJSSNMNNUTVZTQOOMKLNKJ?4;JW^`VXVPQSTUWQMGIJOMKHGGINPLGBHLGGJGEGC?99=@l *,X_E1 +G5$)%"&ZWA(*4"L2.10.5590?PXGB?FN6UX8>lRDBd;C>HIBGfhRsanYZ^0460VRR6433/VQGBR[_I79284N568FGQ>G$6103;78@9-_EOU8HM@Dc>P;68662:.N>GBB@@KA*1#:W'*6EN",3L).4"<%8(C/9DK,@:V6>7AOQ.157mEDA@;85??878846A=6967::1Q[141/`bYZ4516424545667567888746:8622562]\`123214668:6/3773cW0432.TW[/\ODK2551/TZ3647842202212212]WW\ZZ]WTSRTYYS\^]^b`^d4642YY.1985``[895258651_]]03651`^[\]^XWUMNNQTQORVRM=5:OUJMU[QQC1YC=S]]VZe2_^_KHb2_^a_dcb`ZVUMOP[hfd564bd3dJDXc54b5gc83]YMaXPKGI>@77f<<698`^$DB9;W^ZTNPMHLVRRPRSUZUIUS>@BGKIIKLRSOKC<=f_fgdaa^c`fFVab7?BEHIKKKJINQORTRQSTSSV\_db]djh]dgggb[XY\[^]__aciikb^_bkn86b_kNIF@ITPB?A?0ZLVTWT_eKGFC@A<72/'#*2:=#!5PSkeepgV]OAVfced`]WW[]^eccglgeehhkhegfklkkggfklls<==>@A>?}|vyvpmkmjvurqoomnrusqmpruuzzzABABA><RIDA<<@C52>FVZ0bt{xwztssijknqlmhgg][WVWSQQUU]e]W]_][YX`VX[^YRTQWVR[d]WTUWZZ\ad]a_[RUUQYMMSQ]ONNKMQ\NU_XMLRQWOVWS]OPWXNMUOIHLINJEJHGOXSKKPRGqvxhYy}nB@9[mb`\^[V[UURNKJ{~|rog`cia^ei`Xahw}pjt=MCB|}spplmohdmhfhd^s{njx}uq|bG~vh{thdbafff^\\a_W]^_^Y^^XXYTGMegothgdZSV`tqyttlmfhe\QDZcgyitxofdsfpkt>t@@>HGi_iwuzmpf|~fWdo_b[NRDMcf[PKJMGD~CHGGEDKxqi20/OECJMGHDPKMOPJGQVWOQOHh;KFP>??JE>9786@J7N`OV866:A;8I66:9;<;99:9cbddfebcc4688669:66754879<;;<;9985675678348(:;96efi599<@@;;998=?>:75hghgjefef4455576/2302354320/1022//126?&-46+,,G> 11.0..2.-/-0/..30.0402///1/-/.--,--11/0.--..,+///02461/-*))**+,./0.)(*,-04/2510,*.--,|53/./34!% /00/-,##! "! !"##$#!"!  ! !#$$%%'(,)$"!!  !  ##!!#  ! !  + *.1/*+++**++***,.+(')*(,00022././.03741-+,./a.(-))*%((#$"''&'((*(),)''(&%&&$#%,..'((%%&(()&$!"!%$"! !%%$#"$ !""!" ###""#"" !'%! !& #'.*!"(,)'%&'(''&'))*('&&#%)'.,*-/&&''(()),,))&%$##%%%'&('+-0,('&%""%.)$#$&(&&!"%$("&"!'&"&#""" "!!!     +   3!  + + )& + +    !  "!!$,)#%  #  "$ Q%    + +  +  1"$$ !"!%%$   %$$%&')'&%&(*)")(&(+*))$#%'%$$%''&&')&(($%&'(%$%%#"!$ "#&'%(,&%%&%'++.-+*)''$%%*22.-./!&**+*'&+'$$"%!#549-&,.-*'('$',**)()*,)!*)!"$&%$&'++(&$ 518856500-3 *35"#$&&'&'&&*.+..-,/.-,-014404880346941025j7469>;<401486,,6)'&")0.%$&$0'.,*#++/30--/+$ !$26>79?906-$3>;;9640134499;<><<=><=:9;;>??A?=<@?@D#%%#$GHFDCAA?@?FDCC?@??BECA@ACCEJJI'(&&$""!EEB@@@DDA?AB:@HIHCGI(*PMLJGFDA>::;==>><<;:<>CGE@<9974>47' $/8989884:69886760467498751214:;7=;643>@AEEDD;/@<:<<<:;ACCE@?IKJIIJLMNS[_SQA:U-/ZT]g_Y^,-4750//.1478;789::554568:65666234779:931.S/69:754454.dX0221243]URZZ^\[]\[\WTUVIW[TVSVVVY/010_USTY]V[ZSJKMIIGGIGT\3b]_aWY]220.,.00.RMJKPUSNLHHIDCCCB@C>@:7:7S10,.1+7'/7==AE>?;95-+NLJIGDF?:942F,./--.\^.XVQQRPQLJOMJGHJMNKJJKQHMRTSQLHGEDCECDECBC@@>;>BC@?=7DGFMHCFKKHHAA@DDEDIHGFFIC6935@<=BJJHCBF;9987;?53//).26999><3/,)&' %(9CIHEFCCD=?@AA>@<=?65111/..0/4842563323812461-0.33/5:521136459:4774.01.4,-0M17,,.+,P/5-1:4,,PJO//4.3309--12++1-)),)-(G%)'(,20+,/1*PPBERRHLB8-BHA6 /=8778503./-*)(JDJCFKG@>956931571*15@BCG<7:)##DAC===:;=86;86884BG=:?B>@D:55?6>9?!:!! &&BE63;A>G@8;3ACH7/5:-+& $34/)&$&%#>"&&%#$C(JGH@6-#)&#C>;933--1:;56=9878:978640.3121//..*(%(4*)+-,+.*)/*1.-1.+%()$')(,/24.107375-69<>;;:;75<><6544:1/3351%/)$'(CA%I9620.,237410.032/-2/)-0--$1!)57=:9?1498448?%C53793#"#FB=;?>5=;$&*$;:9:=7328>8AA=9;.41./-6,)-107227#&$9@$%#!<;=@9;:30.-2.+*)/214-)'.(++,1320***'-+$02,/3/)*#(('*(*,,,.+.2-+..,-0-()+,(.-.,,()/.((+%$ (%$#")+'+)'$'%$""' "&','$ !$'"#%%) %''(&&$ $%&$-"#!#! "  )"%-&)(+*! "&&$!'##$"#%"$$$)!%')%&%"0&"'! !$1$*'-,-./-***-.0/001/1...-ځ ǀ ~~#}~~~~~~}~~~~~~~}~~~}~}~~~}~~}}}~}}~~ +~~}~~~~ ~}~~}~~~}~~~}~}~~~ր́ǀ〆À Ԁ􆊌ͽ̼̾ƽ˽Ԙؽпúܧʔ􇑏茊닓쇊σԓˆꗉƇ݆ˡ˞݌Ûꐚπ ٞڷ゙っږğӈܕړÏ҇웱DZ恱ŸIJŒߑτ񧥛펉Ӏ궭ϢǢϫρͿĽλĀí܆ֶ̿摐¦߀Ȫ뀍Ȱ􉍐肉ÿΚ񎥤󁅊¿ÿóͱþƄ׺ݱǼƾ»݅ƾӼƸļþƾɺ󸯼׶Ͷёƴջƺżóȿ˶Ƽհ􆑌݀ɮ􊗣˾̀°¸̽ƴ犝þꕣ㷮¹ƾī剕ٺف샒I5;=:54gdcdhfebb``^bgfbde6ihoEZSFBJRA5_``kcff^adfha_\^cgfiddcg78hda^[[]\`ifcejojc`_aabaggc`bca``^\[Y^cj^VWVVZ^ai=B?>@A<<8eheYWbd]^\\Y]f7:<<@A=>>@==?;cc57:<6543576fef47445gbc1_c9<;856>D=<;9:<9=?ABCFEDEDDFEFTZMIEA>CGA?>=>???@A>:;;:>@==<=;?BGD?=@?>>=>?=;997k568::>@==>>><;988::=??@=<<=?>=><;:;=><=@EEA@ABBCA@AA!@@>==>==?>==>>?CECB@@=>?><;=>@>=<:;;<=>>?@ABCC@ACBBA??@<;9@B?;=?@@??@;>>==<<;:==AACBCDDC?@CE@@?>A@<<;:;;<>??=>?>??>AA@@??>==<===<:;::>DEC@<9897545556776778:=:;<::92^_cbdbYT`h>7^ZY]]ZYZ\]WWTSRRX_j9:9:8ec_dd[^6m[S[_SQW_][XSQS\ZTTTOJKQSMMMB?DMVUOJMOGPNKMIGLIGKLNMQVNMLKRWTMNPOHJLNMNSNGDGHECCCAC=6:@CFEGIHFHGJIIGEDIGCCFFEGEFKHKPOMNQ^\CsDFHKJINOPUTZ_ZSUTQOQS_LQNRXNHKKRRUVTRSQUVSPKJJHJEHMTWPQTSPOROOT^\SPNNKOTV[111220052343145120241VW?OO^6Q:b`\SU4YPW]XaNM721//U053-XN20/ZV1423147733U[U130-/O.TT2220/RKJ-2W,220,V.0[X/`UD)#30 O" HT\PCK5>I3:JK.9X]Y9989;9KHH\468qBFB@;70^I<656-,:62977:?9PY_OQTRX28:76552266535675624402/4770[0341_X\c230/4557:7112335624764132S[WCNY11512552/989:96631^]XURV[_]]_]]\daYY;77264348;993^/3445ZX55435<:984_]_]`]YTSTU]XQ[YTTY]a2fd354]A@5AZSS[ZVTN;GMNVMZaT\\\]`4b44[WUT[XZVQTYZZXRTZ\3ePHYefc`_XaSR^142WTd`\QC45EGCA>>=970LCJ/CQ=b[ddVZ`bb\HR^`bca]\^^_bdcbegpieiikglkmlolaehilhpttsvuzxwzA{wwsrorqqqsrrpnpstrusnnmoprsyCB?>>@>=yystsqotvxokvnopplmlgsrkgeggfdcdegfiighlppnrqljihnssmk\EEaf[fpqhegjohffd_aaUXhijh9?@DLRR{~{yyxxvuvz~wy}zy{zywrsstpqorrpgijljfghikmdgffer~~uxsnoswuzryzuxzwyodZU[jrmnzM{zqsvpeniVZZWacjrsprqnc`\T\?3>BSJFGF(L8PUNYkxxyvpulflqpohnmsu\XXVSJSV[adfQWca`ZV\ZTU^ZUWUVVUVYVQVXYXWLYgf][^[T\SMPITWQV[OOMPO[SOcYKL[QNMMRLNINSVUPOLLGJIHL~L]GECPPHJNsl~zzi^`e{yuJJ:EHCFIFGpja.XNRJ;ZIYEQ}qmhhl^[VZlqZRe`aZZbhicfd^afdb_\UWOKEWUQDSUTRQTSQIGRVYYXXVTLNXU[WYc^^Y\ZMX\\bmklikih[\dijb]]SVXYYdA]TQ~Dwx|uooa]YZX]f\YQ[]SOWLONWY_UL`VS[X]kdirYhvhT[gtJODpohjuAC~|mhotr{EMHsuulfbadjkhnv~vygqfecjqkpg`hbak}mgmq@@uGDnmhdSZToAGPTFxovroikh\YY_`_\\ZZ_Wfn]h^[^WY`]bfcaZVPLMUS^^Za]]YZSTUW\RQVUW[X_adbgadjpk\U[^YYXZY[VTZbXUWRKHCEDDILTUVUNLS]XQJINDJOR]SIHBB=8;BPKIGMOGJGKLKLJEQOMHNW9C@=>BGB>;97:=A>?:?AHTSI6[=D@L`baJHFHFIFFGGMNGN;IOMMOLLJMMICMQOJMVK[9A8NFAH>@A@<;9BPCYZHNM2]2<=Jl5587::89:>:ebcdfae42e599856::686:7579:><<656gih87697378988if6^6=:776hj875699389754210031/...-+/3411245=+;5+*-/!///5/10,--01..--143410/000//.-.--1110/-.1631.,-/0..00//0-.-,,*+-/4.)+,++,-1022+(v-2.../..2 --/--0..+* !$#""$'%())*&"!!"$##$$$%##-/&#! ""!5g"#! ! *,.-.,%"(+-++..++,./+*)*)(*-0..+.-*-1+)03-)*/.,*&'(,*(''%$$&'$&'"!$(+*'$%&'&$%$$**%&&'$%(%%$"%*)%%&$!###$'$  "##$#!!   " !$#!$#$#"#"!"!  " !$##&&$$%*(9!""$$$&'&)),.+)**('((1'(')+&"$!&$&'(&((**('$##"$!##()#$''&%&%$&*+%%&&#%''&! $)&# #' !"#   "! &e +$!    + +  +  +!4C9 +  +"2%)",%%)) " !#   "#    + +!  !" 2'## ^$$!%' ""!&%#$%&(**,-*))+)$#&#"#$&&'&('&'')((/,))*)*))$# "$#!!$#' %#&%&&%&().,+))+.,**'(,+/&".35410'+ (%"+)'#22'10&,"&104+)'%&'+)&'()*+$&))$'('(&&$'(&'))$#03 5-40&7++.59 ##&('*++*.+-,./1+*)+/0231123221751114544352058;79;5*-$;++''&%)-&4+576%(!&#BB$351.,)(!2*.%1(?599147785),36787566998;=D?<=<<:=>??CA:<==@>DEECCCEEDH'IFEDCABDDBDCCB@ABDDECA@?ACEFIO)'$$$%$$EGCBBBDEFGACHBCDDBCA?FA?=;=><;:;<=;<;;<@CCCEEA?>=?BA=:5*%0607@B>;;>@?<<8312-/:973!<@DFDDA?C>::WTPSRQMOTLEJHJLPPMIDNJTUSOPZVQUONQTUOTUTRNLJNNLJLQNISY\\XU[Y-/TO`c356//3:;620253108>@@>745630013466998?<;82RS31218:2]04540YW324334692ZWX\^ZU\[\SQT\aZ3ZWVWZZUUY\WVVLLOULKIDHHJJW462\^698203241.1,TMLJIQNDDCBBALA<;:9=>:8477%#($))5%0148;3430+OLJJECD?EI$&+..RUWRQSQRQNNLIMNMKMKHFDEIMLFHIFFMNKHHGE@AAC@A@CC@<=>@><==<<=78773?KGHJHNMHABA@BFEEEBFDCFFDD>92/29=;?GY-UGCF?@A<4<8.20,44:ABAAA?731,&&!! )AEJGGD@E@<@EB?5,-MRO6.,,/2-.)-021-,+,)**)*BF,8&%&10)+.TMLB>JUIF8221=>;'&5:7948422-.+RM)'JNLMEB641133-,5:C81/B&H>9:;$'!EAB@8:<989:675476:?75?@?;95?IC99M;;?@4699355430/363.2443/,+1;@A878536--A:;;=8=8001('2:D;1$! ('$)@:757:33//<<1,:663148:7:93488974.1,*F$..+#+-/.-1/.'&-./0010/()/-1,/632142'.//6>:::=;;459;=855/12403@/()IDEG%HA?B@?>41//.3931)440.3*-+,.0+$1+(/+/787@/5<8,18=')#7;99H@#$CDB96:A?B%)'B6=5246D<57407149C:7<<"":&#D5776+1):>=<:=:10-21/--,,0+38.5/-0,,/+0423.+&$$)(/0,/,,*+') +)*-)')(*,*.2..042+(,,***++-**-0+**($#!"""$%*')($"%*)'"!& #&&-(#$ ($""'&"#!$&%%$!'%%"'( " #)(%-$///""!"!! !"#%$ &2"&%"%$"!##!"%###)#*& "%)+!)$(-M.-.,.+++02120)./큊ʀ~~ +~~~}}~~~~~}~~}~}%~~~}}}~~}}~}~~~ ~}}~}}}~  ~~~~}~}~~}~ +~~~}||}|||}}}~~рԀˁ 􂆁Gü񀅄Ҿ˼ʺ邞ÿ³ƻ̀øž邃»䋄߅󂎋΍䆀ѥÿܘ맒ިڹȰϟȀ¥غȘ˖媖ՌڈҨ̳〇냕∔ޤ¢ʣ򇆸ʊձאœή䘠߀䱩߄ɿ乥쉉Ÿʾ³»Ȁ󜑀濝ҚǺ̀򆌎ֺ숒ƻȳ׸̟򂊏Žûѡ͚Źާ덃ѽ˼ɶ䁃˹ù¹е̻슌ԃ嫻̽϶ƱѿûƾĴ󠴩ýʹÿʾ̿ǭߍӺـȾҸ¾ж°ǹ³Ũ5d8958765ifcgfehgeb_abc__a_cdagrHOJD=86fa^`caca\\[ghd_\`d^`__acn985gea\\[[_`bfhdabdhhia^[^`aacegfkkhfb`[cb_\YVTOQV`ag7:6henkm9;6jb[\XVQMNXai8::9889;;?B7`q:786j4557999;::88:95fee22d555gcfg79:=BFBCDFEDB@?@@BB@??@ABCGFDEFEFHHJTWQLF>;9:9=>===<=?===;6>FKKEAA><=<;97666kklm7:>BC>::;;<<::9:;<=>@?<::===@?=<<>>>??AA@ABBA?>??5?A?>?@><<;=>>=>><<<==BCBBAA@@@=<;;<<=>><;:;>;:=???>@BCyEEDCBBBA@><>??BA??@>;;?BA?>ADBA?>>??=:99:<;=<>AA?@BDBC@?@>=?>??>>ACDCCB@?<<@>>??>==>??>=<:::AA>=:::9:98666766679;968621aabihh6AAC8c\[ZYYZZ[\ZYUUWZX[f6656:6ff35eafjbSXXHOUXYWWZZRRWXXVULMNSVTOF?sn>GLEDFGHGDFKPTHACBGHNPOOIIKOMIPTKKLLNOPTTOJB=AB>=9===ALPE?B@AEGECBACGFFGHGEFCBDGHJNMJKNOPQUWZQKMQSRRRSSTWVY\XSTSRQPQWRLQVVVZWNTPUSPQONVXVRSQKKKFGTdVOKJKILTVX35]SNLJIMNPPRU\_14452033444144240[]3cWSgL\:3YW]UZYW44Z\2:43R[\\^20.,10[MR[1632V55221KF341R.1.YY02/-TQRJ0,X/.2//W-/1/WUZN>=OIB>0JJQ3W8)8GES4ZN.?28e/C9-JVCEGSFG;^M@2R@=MO)#8IAB/>aHG*+M@0,@HD@:8DZV[R@n5QEMo?xI?KfONpb?{=4MVP64TKITN8]YZ:SFW\03120YS167771/5/0;8988;:357.O15:4W4VDI;11J7eO6G;4XG]77DH4A8Y5::4)11E;E'*02*($d 6D!'%!#(Y?GiII66[EBS?\<<8:6:9DLP.35469CDA>;429?95411354019=:753[\_^\0575557766462U/7<871131112220/^]/1453XLDL39647;75-3676147557962`_b^VPDY245566266742bca``\cc\a^ceml49:8442X166:75335^YVZabaaab3643356665622[TSXD@zAFFINSWS\e148754176ed^Y]\_]\`^]\_UQRPS22_aXZS\`[a765ZPXTSUOOX[cefYUTSRU]_ddcblfdSKM^bSIT`^YC@=9C@^;b\98=4O3:B@CddV[TQQRUWVSUUWVPLHDMQOKGDFDCFILPGGFD@KBi@A9h`TOJR_n@CHMMMLLLURRPQUXRPQVXZ[\_cf`[XWZZXVXZYXZ\_^Z`dk69ki99l6ffhMFDFJDJI@>_9:6=;73_++@aPT`f`Wee`\``W\adb_Za``cbbdbdlf`bgffelkjmoeicbfgghihlrswy}B|twtrswsuvrsrpstuturttqplouzzxsnlorsvyzxursw{wrsrljjjfedlrpmikjjjiihihhfbdfkmorheabded[iifehfefhebcca`cecafiltjepvw===BA?{spr;i`gjklkpnnkp{C<>AABCvusrsuvlctzvrmimmoqqqsrqonnsxtltppwrqonvzJMMHIKKLMKKQRTTOOMLNLOUPl{u~}~|utu|tmsx{{wss~}yy{ttxz|}x|SQPOTTXYTPQTZXYXWWWRNNSWYVROOLQNKMQSU`cc[PIOSONUZVPTWXXVVR}}}ptT```b_YWSM_p{maioc]df`^aba]V]ZY^FAGTAJL{\gkmd`^WYZWQGIJL~{BJRQQPPK}}}zs>tqouupqtv|}|}xvptsopkhkpmjfgjfiigdfiikicem}~|vwrpnprmprtyswyrjki^Zemr|zz}upg_ba_Y\[[`[\hennkihf^[MYZMMLILKNX>486>GXHNjs~yqpqhkmlhgnuk{saPT]OS__fdd[R`a`d]UYY]f]V^[WXPZVXUPVUXVVXaed[Z\YVYTOTM[UKXUPPTTcYXVY]MKPTNLINLFERUQQQMKJGIHH}au_F>G}NKqlfqrtcknqut@OZJ>@ki]a^\TSSSQJIOLJHxlaahwrb`dflreo?D{sllhrKFFwtmlqsnlnmcfief_isoow}lhij{|rgwozt{oli][`a_`[U`^YY^dd]Yamjgkjimpb]]KPbeqykfhZWUQJ`b]j]uesAovqqtqhgjqvgn?E}GqkehrHplGjigi\mMeTfYVQMKJHJFC@BJEBDEGJ{yma][Yif_gsyz~rkeonacdbecYddYMXnmyym_acejldeZQNJBO^[RUVXXQ]bWUTIKRSUWOQQKTZ[_Z[fe[]ZSVY]_djhgnuof\[]lm[W`RU[WZ`vrK\XLyvurtgnwplgab`ac^XV\ZSOTMXYXbeZWb]^b_WVj\cec`eWVeiEJL|~rst|>~vq{{Cssqvid[inikvnqhm~zvlbmF}vmjkZltugh@|>ksEFHPxtuaW[hx;?KPF?xqnke\XSWfl9jea]a]_[U]`]dfgidfd]ZX[YUTOQPVZ]XUV[ZVX^ZONRNPWU`9cmgdcahg^[[\^[^^[YWW[_XTTSMDC?DIIJQJXZSF[ggPIFLKJJOLLJIDD?<@@CFBAJLSOAEILNQPOKLLKA>F@B=AC@;:B=8AB:;<7GPQOL>;CGDMK>FMVTSTOJMLIAJJBJJSHf84_DJCDAE;A992>HEj6YKHBd2@RP_74789;<;<;=:3cg^ccd357:738969;:998<8999::64344kkj655679j676i6;954;A?;><:989;9979867875d5:<=?<6442/00/111/-.020..-.//5?*/*% 31/.0/10-,+020/.02.//-./3221.-,,-/022/..03130--...-/120221/--./-.-,+*)(&''-.00.434!41--*+)''*05,52O-..,2/21#&$"##$%%%#" !!""  !"$$$&&%&'%&,/(&## $%!56755   !* .--0/- .--,,++,-.,,**+,+,0.-,*.2.(*-$(+--+)**')*)((($$$&(('$!>="%&" "##" !%(+&!#!$%()'&!!#&%#&("!##$$$&.'$#!#'!!"!  ""#$$$""  !!"%%$"#%%&#"'*)**++)+*,.-)(''&&(+)&()((+*$'$''%'&%()(&&&"#$"#(0)%#""#$'((+('&%$&&'&(()($$(" )"##&"'#"$&'%&"!  ! & #  "%,E" )  ) " "   + +H  +  *  "#$#! ((!#"$$!"()'''%()&*'*.2/ ('''())**-$#$)""$&)+',/''&$&$%$$&%$$&! " "%'#$G $%$&-(.++-)(+*+-1-+)((+1255537/) '*"$)(( ,2/ /"2.#"23)-*,-,+**)+++,,*(&$"*+*(%#$%()$### &"50/)&%,3;"$&((('))/--++./*)),-/0013520.-121/012023641579666.,1%&$%(%)'""33&,.6.-(G<8<>73.-)&%D';-/5981@;854982458863:87657999><98:9:8>@@CC<=:9=>=;<;?CCEGJ'HCEECCFEIHEDA3BBEDBDCDBAA@AHKIGCAACDCCFGFEDEHIGDHGB@@@=<=DFD@>???>?>=;9:<>ACE>;9:;;:3=?=<==98::9:;868:86554<98?C@$#"E@=;5279<>>A@@>@G' #$&%GBCCA@BB>7AFDB>=@>@CA@B?>HEPVNKLKKLKGEDHB>BEHIFBCNKKLU\W^[OJKWZTYWSVUPOROKKIILHHMNMMIKQXYZh5321_[_3479301598875552015:;63//-X1.*V-025=?=6.PHG*03/06:6c^Z\_[IWT25676661\ZY\][SOWTMHNW\_\]XQVVW[ZZVSNQQOJIHNTXSKF>DNSZ\\VSU5<=<<;650+SKJJ3COGI?9>B749:98;;94.2-*, &+C79<=87857760)*++LJIFD&,1//..+RLKGGPPHKLJHEJHFCEFEHEBCDFJJIINMNTQRMKPDADA@A=;>B@@=A@<;;<;<745?@CEBEGA<=<32:=AIJHIFFHEB;7875/22261097??=<=:53)01(&%!#" "%*=@IJFAAB=?@>;;?E@MF8-29-.458771+675840335:4/7524.6131.435333^:;92022240-2,50)32./20=42247,RHT+.1.+*..S)'.0-.-+*('**QO(B/<.(I/,RIA>;BBMD6;:<;7*2&;94864/-)(-+*(NKHD=659A=10247;28 $@=9725(%%C?@<:<>;8::4685528?==?C;9::CD?9BH:C>C;;:3255461,4311257106=<89::=?656),46<868;=48!%B&:9229D'G;;'M:;:6(7 ++4,-)&%%$%#"!!%##$$EE')KFD3%#&(2303;@DIBE:75=?67757718:2).77?B=4566;=9:2--)!(00-./01.7:21/)*--.0+.-)/225/186030,./.26:68>D?;545??529-/4110;6&..(>49DB?=96534641/43/-0,23036/.40032.-<058617//95$%&;FE>==C!CG>8618;7:C<<79IC?@:69H&@;77:/:@@64"B":;%%$-<=?6.18@ (+$ ?><:82.*,67621.1-0/+-/-23442451.+-,**')(*,/+))*+(*.,&%(%%*(./62.-.11,+++---.+,*),/+))(&!! "$##'"**&*/3'" $$%#'%#$$#"  # $#((!#%%&'%#%&&!!!  ! #&&%%"%""&#!""!&""#(&%&%!##!! ""("0,!#!! +&%2#&.0),,+1111/ - ׁ쁆 ~~~~~~~ ~~~~~~~}}~~~}}}~~~~~~}~}~~~~}}~}|}}}~̀ځۀ 퀃򇋉ʿɼó¸۪ѴۍʲȾʼĻꂈݼ㇄而鈉ڏު̢Ưڀʅދށˁ𶊇ܱ߈ؑ޷Ѫ̉聐ȟ䒍ꈟ땒Ƨב쁄ֶƸӃӘэτܫ϶鐤݂蟖⊡ɿش考ά뀇ƼųХمⅻҀȽʱ͝₏ľ÷Յ̾ʢݞҀþ恇ևʏ񋓇􅎎½ų򁅇􂆆򅍘󂂂􂄅񀌏͸򎉙LjžƾѼʹ€Ⱦŷ򃗧뺟ÿƸĻ˺򋈀㿺κĶ۹̸彦ތƮļ͹ƸïιŽǷíƿ႟°̭ñɺܛ˷ǹр猉耛ǷƼ߀¿̸º˷Ǿ³ϛd65fg655ig7lefdeggbdc_\]Z]bac68::5334kejijlfdc^Y]ghdZTVWYV[_]g:<85eca][][X\_b`ch764mf`X[`_^cdffj65533giedfc_WROPNMNIOUX]YLTZX`i6<>8f^[\\QLFUcege69e475:?7ea`hig5655<94f5785465iik8:;>DJIDA??@BCBBBA?;;;<@ABEEFJOOLHEFIKU_YRJDB?=:8899;=<>=;<@>>??>>??=8:BKLHFB=:;;:997877mo9:>>?>=;=><;;==>@@>==<;<><<<===?DFGFFDCCAABAA>>@??>><;;;<==>>>=>??@ACCCB?D=;:;:;>@@><=@@==@?@?>>@ABCHFDDAB@?==;;<;:9;=?<:9;B?=;<=>?@E@=>?>97778l8@A==>@>=<=?@DB?=?CEC@=>=;=?AC@@??=?@A@@=9868<@?=977;;::8665664565443257763_Z]be:B@=>@CAA@@@?<==BDCDGFEHJECDJLKHEDGKLNOMMLQTTVVU^\YTOHGPVSUQRQKITTWVURRZXWVUVWZ_NMQPSUSQQRZYRRYWQNLN[dTLLNPOKKLSZ`WSPLKHHLKNQSSQPW^232324553235130a^X`VWU`Z130S[^Z^V66`Z0/3\TPEGN33/0[ 1PEWX,665263Q/460100WU/.-,TMV4//0.YRS/10./.YUX[TV_2ZOQ`51ZN5,1222*/RMKM7BJ>CJ9HM;0(3;/@>,>C6B]D3PSD/IC-)82:-,YdE/'P-98O@2;35F^NHW^3132/NE<:UF?;59>G4NO:96LSKQ9AI^Ylk25350ZDA^262O36D/A58;:4/Q83RRX1<455K74746bFD@_f98ZPA>L8MQ102HC=80.68'84+,,+:8->F5/8@$N2<^8_n==rx}xlw{xwww|sm}>>>{zspxsqlkqqnkqvrt^Ioxw|KKJTTKMRQPKLMKIPPOOLNOMH|}}||vmrzpsuqy~|{}trtnqtkRSSQMUXXSSVXYXOS]d_]XSQSUOKMMMQXUSY]\\\VLx~ELTVVVSYUPQQSNNzNQRQ|NWY\^cbVNKEGIIHFwgforlqpgceaVSgb_RfB0+:GP^UPREglcc_UIGHG~~~|FTSSURMGxvpnzzwvjcauvronpjlrppuxzwvz||uu||idioplsghebc`dhihegeeo}{sousgilisrlpojhonnonqxwrowojplu}|xrtsrpmea]^\[YSUNS]T[_eeYblg\OJR\ZTUWZXLF38\CBBWTHjfx}urinjfpngobqoblxOJ\^W[cmjee``ba`_[XX^h\VgdUZVSOJaZSSVTUU]cea]YXVQZSTMQ`\TWQZ^X^VTRMNIGGJHFP[YPROMA6kCJD\``JJH9DMDqlpmijvxuzyBtDbTGA@he^_^ZSOPPRPQIG{nfqsndhd]l}}xgcdhlBHBCvtmeqvutvrsmkcdad_tlwzoloovuYUfooljzqh`YV_a]_WRc[Y`alleltjg^jqmov^[RET[`oAha\P^\\Ya_\`[z[wlmpruwxXlokhnDqu|ryqptDHmdH\muV;`_F[UNPJFJJHHA>@GHFEy}wkc`ee[dl~z`wJrabye[_hgkh]_ZZI]svC}j\XbfiaY`e\WMDna\XU\\UNMTQXUWPNLPPPMLL\XW``ac\`^\^gfbeljbajpk]QU^liSVYRZ\ZX^eo;R[UDzumpio|qjd[`unn]WTSQOUJSaWbSYejb[rOZel]V]idaaZWlp=CyFysy@vovrl}C|}srutxugfsufxqjjc{qyplxUHD{skfnoas@{{tiIC}LyxOy_etmk;QF?y?wk`_UYYZWc8jdfkb``\V^[dgjklec^YXZ\XaXUWRMXUPV]YYeg[SPPMLRRXeY\TVX``_ad_X[_]\d_\YY]XURNI?ABJLFHPOST]SU[VOJHHJIDNNKLIHHEC@;:HIDGNSM@FOROUZURPLKICKF><:A@AAB@?F=4;63c`^bdb545771134C65685499:8867;5ef34nn645j476f54d4=<=9e7@==<88:9:::6789;984e446@D>=7-/1313121010F.+-,+.,.436356432.*+011,))*,)-.,120/.,--*-.0.02420,-/0.1U3//.-.-,(&%%'&&&'))--%'+',11-,-/+&!&/0213.-.332" -234#()%"!!"$$"!!  ""$')()'%&().40*%#" %&$"65  ,!! 5 #5 .,./..-++*+,+-.,+++,++--++*-.--///.8.---+((*,-$!#&()-)&%&'*#%()B;"%$###! $''$!!#$  $"%(("#%%&$$"%&(&$#$#!   " !#%"""'(&$"""#$&"%%$%&%(&%&&"!',*+)*($"))*)('&++**())).'%&&(((&&'*)%%)'%$#&-2'%%&&%$%$&),(&&%#$#'%%%'('&'(%%"$$"'" %(%'"%##"" "!  !!  $         Z + $!%  &$#&N#!""!  +     # %!"#"%'&$""#%+'%##%#$'(''&&330*(%%('%$"##" "$#"""')**,'%')!"%('&%%'")-,&!" $&/-*)'(-++-('**-)%')&(+..12210%%$( )((!!"#.& ) *"!93/ ,.-,,,+,+**(+*()-../.,)('%.,*&!#$""&)+,(&%(,-)"$&$4)((..!$%$$&%(),,+-.-,*)-,+-+,0/0//0121341-/046675885/&/1*,%.%)++-41-.+/7=>D6<<861)).-(#7Q=KHG@?GFG@;9<;98;;78:97676225688:;<><>=??@B@8:::799=GFDI%%%FBBCFGGJHEA=>@>>?ACECCFGEBADGIGCA?=?BBBACFDBDCE@FHNKC=<;;;=?AB@==@>;=?@BDDBDDCC?@=:669;<>@??A?<:<=87453465709 AAD<7;< =><24-"?<IM&&%GECBE><99@CA@DGBC5#?BAGPWXW-.-R55-QOPQONS.12/SJKNLKKKVYW,-.--331`0-//.+NRU^\ZROSQR]^WSPIJLKMMGADRJ@CEDGLJNQT]aWTQTVQPNJQQKKMSVQPQLGEGEGI@ONNRX\]b5543^`068844679715;A>=732551[S,.,-16438:9:84+IFL)-1245584_3`URVYUU213b[^/]WOSU0bUQPTULKV0344XRQPQQVY[YXVYTSUTKJX[Y[OBIPXTRRHPV.569:?<2-+(+*)*(@69CE?CB><;:1,;86+(#$ %-,:<9<8.'(*(JFCIFDDK*3102/,US*NGB@;;FKKCCC<:9DEEBBECDHADGIJGEFHHFGJY\YI=9<@@@D;=9:::<@?===;;@JF?B?;;>:7==@@?;;9623342?8AD@:9;;@?/,7;978A;841.6736/,5/174<<7;?8829=:=C45.$/02:#631+432.44551E/?D9<<>?@@,9975:$9?C=@97:$'H;6G(/:>'-1$-*(*'"$%%% !%$#$FCC=GPJFH<0*-5707:HF6BK+<45C73487994743'0:<#C:3168<726:41($<1021551**1.2/3-+)+,.)(*4/05334042225435<;75<@=5./6><032*2300038)/,!C@=9:8:FGE?<925@=?32/0.,/'/7.5+/4851B'29<3/2;75410;<"=#=;>">9?G?8A$BIIB;<=>??66=B7@G?886FB:@;:?E/'%EB@;9@=5:!BBA9($?(?G?-H08=99*$ ="?945,---+/8125101/)-,13477341-*,.)/,*+($+*((+))24.)&&%%'&*0,,&((-.../-),1-,1.,++-+))%" $& !'$'(,%%))&$""#$!'&#%%%$"!#%""$'&!''$()'&'&&$ $"(!*)$)$% )(+&"! !$*&$%%(('$#!!# !&". "$,)!C.++,+),.121/.- , ؁Ӂ~~~~~~ ~}~~~}~}}~~~ ~}}~}|~ʀρʀπʀ 򆈄ĹǽʼဈBMՄЀƭȶʰ־󆇃񋎊խ¹ɏ˝αřﱚܪ唀ʨŹߣ掝͹犥ưŬꞝద扑ڔԮꊘ烐뻵ɻŰӿ􄒔ɛ۩Êؼȿż¾½ҼƽٝĻꈔӀÿ􀔊ӕׇ¶ȷȽÀ²˻뎎ȼþýʽÀÿ´ŹźǼ¾ñކ򟾞ߔǯۀ쀄ûɼѺ޻¶жζĽýйƵҀμ̹ǴʿͿŻ󦯠ӹñŹҸíց׼ጅųľɽ¼Ӏ¹ɵųi󀂃777he55dcbj:65hilijfeb^_^Zabb9:654da`bfiooiigbbbcfeg_XUSTNU^aem96ecceddbbYTUVX`hej7=nd_^\[]dcddehh33467556lke`ZUTNFCKMSZ`aln[Y[`{jn76he_]`_WOSVTRVYQR_469=n_[\^e575dcom`]g9<9<@?>::8;966ij577;>>>AEEDA>;=>=>=<=;;<=>?>=<<9<:998plhgiko8<>?><<;=?=?A@=<;:<;<>??>>=<;;:9::;;>DE"DDBDCA@?=@@A?@@>>==;;<<;<==>?>@>AA><;<<<=>@@?>?@>?@?>?>?CBACGKHA?=:9:<98:;<9:=<:989==::9;>?@CA?ABA?;>>>:omjjl8>>><88<@>=>?>=???@@A@ACCGF@<<<=?ABACD@>=@AB?@?AA=?HDC D>86777975454212cb2347;85b\VT^n=??@CDHMMKEFFGJJJKLQMLQTQLBABBFFHNNKNKHIIHHFCFKKDFC=><>6m=>FHNURORQRSTTVTTWZ_VLJMLMIIMPOKNRRY_\YY[X\]^[UU[RQNPQRQRRQWTRPZ[VTRTYPNJMLMORPMPSUOPNMJJJIIKMNQQPPOQT\1244320/00_10_`2\11\W1Z2_^^]430[0012/1^B.`3320W[\NJY]3553331114.22/1/,/XRS./..YW4202/RQW41//.XWXZZXOU^0XV21,-ZD4bT8X3,0:NOJCSXK?A]YI027O5$0=;PB0;(B<[Q,''-1C)7F7/MN@GKW@Q/1.GP2LI=B^?GUX571/5WDGE9Y4-YE+B=/)->Ps=-gIBE`A?.>QLX578;;<>><;<<968766785660S^/22159898765434343240032//34.^3242200220LVN2920.S[ZXU[]]17960]00``_WX[[`ddb\ZWSROMPY36776762aad543674Z`mtsy<::mhge`a_]WWSRTZ__2464_IFGOQ\WRRTUZ^^\\SUPJILNQTTX]cLY]_3655421^_faa`dad55323351`]^QQX]]Sag68::cQGILNUUW[Z\YVNHHFFAISV[^de_c4997\V]O?/HGT>9@KMV]R88Be?N>?>DJNSZSQUPQSNOXZVRLIFnjcm>:85qLSG{wxqgeea_a^\`bfkknjhfa^_^]`edfikhdcdbb`^`acfgklqrx{ACB?ywxxwswxpoosonmloplhjjnnklqsolnnlkjlonruwtuw{}tmmnlkfcdbb_]Y\`_b```^__ehjlnnmqnkd^\\^dd`begggjppilmq9;rqo<:mrsqrqhhmpq;<]jtnlilknqkimqslkfls{zzywuxtqrrsyvjIjmpclxy{wpmlonmp`fu|JKLVHsNNEGKOSSLEINQPRQKCCExplr}}{xtphlutu|imvqls}PPQTQONOPRTTRSWXURUZYVUSQSRLONOOORUYZTYUSVY`d\ZYURVQNORRSPNOPV`fea_WMPKJO@~ukzrjkijqjnhjof[S0N@~`TEVRVWSTSQJDCFIF|MQSMPMRN~~{srvncfceeenokfehfimpnpqnlkkjlkpnljjjmmnl_UW[^_`cdec]Zbnyricllppkhgkggga_aimmlqutqlmx~|qssrpjegb\cgdgha_]\\^QV[U[dtqpup[QJPYbQ\gicULHC77DBGDKKCC<=88D<=5cJIFHJEB>MOFHCKMG>EHHFA7@F=I=EIQZQORKF>B:41<:<9_f?9FBgFVO\=K9644:<<=<@<35852b3cbdf455664c5423796588964463ee456664798g665fge8:899g6:8775;=>;;8777:98957876759921/0.14342521/,--+.../../369735520/1213/,*()%)--/20/012202,(()*.3/14210/.-021012112/-,*)'# $%(+.06:.+,/k451/-,..+&'*(%',*(-6.,--1.-33-*.12 !%&$#  !"%&(),32/(&&$)0./)!$# 5423445 ? "%# !45  !! "!-.,)(&*1 ,,.+()+(7***)-+,,+++,-+/.84,/-,-**)(),(!#%%(*&&%&(((*%" $')(%$%%$J&'' !""#"#'&$ !!""###"%$#(*($ ! "%%!%$!##!! ## "" 7##%*'%'&%&('I(()&%%('&$$')($')(-0/+***,,++('+'(&(((''&%(('%*+'&&&*%%$%%%&''%&'(%&&%#$$#&%&&(4##$$# !%$"##%)"#!"!   ""!!  % # '" ##  %"$$$"##   + %! !!!$ #&!$$"#%##$%&%'*)+*+*'&%$'')*)-5:8:20/.+*((&&$#$&(&,""!%&*))()(*,,))&(&%%')**'&(,",-,**.-.,-+-(%% $''!(+.'#%'&*()+'*++)''&%!%,.1344-.%#)##(#"%*& 0"44/#B,(+/.-*)--*'('&&')+.,,*'%#!)$! ! #&(+.++.)')((,,)&"!!75052!$&&&%%',/10..-..-././//../12221//24224576;:6852844.& '-++-0,/232213587<;(:;85.-22,(!KUS,2*IDDA<<:6566688;<:;9996443458:<>@=;;:8867;::;;>=@BEF%'&#EDFGHFHOGB@@AAA@>?@?=>>BB@@DFCB@@??@BCACGHFFFKNICBBAA>==<:8858;:<;;:89:<>?@AAAEB?:7778<=9;<==<;::5779885;@?=;?:;@A?  ,,6>=;;><<>;;>@A<;:=BHHHGECECABBBEC>)@FFJJFECA@A?;:4?BFFHE@?@ACA>BAA@?=>>@?8348889<:;;649AJGB;8==@@=9:;;<<768=?>=?AA@?>DJJD>AABB><<75:=:><887555,01-17CA@C@1($)06*29:7-%! '!<?@=9F<7B?2144;@>D<:456514925=365684-10-,4520,+-31/533110-/4254794541/6<=93-*,VSPPO*RFE,R,O(./3+/+'.'=28%.+.%%MMLG=;2048DB(MGC %'386542,++,)N,J)*(GGEB<=A928;7538>8BG<14327=@'@==8;<>@79:@B==<<86;2?C<<988<;,*3=859;88951412728>;3+7J?79?786:>;=;24+%37/CA0/034/0356+,8;4C@74:@??;&/8;/:>8ADE<$>89=5*D:=82=(081/003.4878<9.4.278656200573.27673341/25354,',,+,/.-*.-.&+/*/3369;61/156:==7956:?;=;32=<<7./4-j-!=@!#&>=@CA==@D$F=@@;>?;79=AC=::46:HF5:>EFEE'/)GD?336<=&A7;>$CB>"?B>@>D=<8;3$!:@A>:858/'+.//1486683201114221-*-**,++,,-,+*)))(,,(U''&%,+''&-./55/,.0.*22*+.0-*(#" %))$"(#!(-(+,**'%$$%%''$(#"%"$! #''&%" "&"$%+'-+&$! !## ! .$#"##"!%& "#$!#"!"$"#'+%%'" $! +,!"+$) ,+**-+<-.0//-.ՁɁ瀊~~ ~~~~~~~~}~~~~~}}~~}~ƀف 倅 灅䁂ƾ˼΀=ưɾ˽Ԁĺùëÿĵŷ˹Ϙ׀ǽ±þǾ󊉆舏Ҿٌ懋Ծ±Φ×ÉՒׂϜϭà퐉ꇞ񌁑ؤ삇ђ׎ǜҷځ傑Ҫڇ񅌐ڷ¾½񂁄ջŻŀ𾫁ܚȑǎёþĹ´ɬ􍟥Ļ½»Àÿ»̿ːþ˺߆Ӵ윱􀃆ƹǵ遀º񖛑ۆ؇ހƽ¶ü̿ɶŹͷƴ³ˬ܃ĊǾꃁִżނڻйɺչǽ½Ԉɴû܀þǴ̿ȷëշ̺βøܔò½ÿĶր؇ӁۊƾſøͿƸ̝ƻ՘ٷ⍂;75;7gg5cd]_76ed6bfefc`cbacj55824dcb`fic88ljgbda`ggea\^TPIT`ci7lcbegefffcgd^[\ZY\b7ifhfea_abcb`aj7337888986iigcdaYOKJLPXWSS]cVchl66gcda[SV\UOLIGHT\`n:h`\Y_i8964`XX^`h9AE:;?>;:::76i679;;?A><@EFGA:t<;t999or;==?DKMNPRTRULGDAJUVUNGA;rr9:;<:;=<<=;78<$=<:<98=<@@?>;87llmjigjlj8<977:<>@A??=<<=>?@>=;<<:;;=>?CDDEFGFEBCA@A?>=??@A???=>?==<:9;;=???><<<>?=??=>?>?>@A@>><<;<>>AADIGFEEHICCFAABB>==?A==<>@?=<;:;<8:?=>>=>@@@BABBC>::rmlkmo:98n9;<@@???>=<;<=<@FJDECA;;<:;?AKLBABHLFCJOWP;lq;AE?876789855443342ba_`_``2347::_SRSX\__bchdai`ZYXYXPUVVTVZaacbdcba][WJHTc\WWVXXXWUYTRRLKEGBKQUTRSOJOSRPNNUSNSYXQKKHKQOECDEG@>@DKMPPJGGFGGKNME?>MTPENLGDFT\^SMKDFFLSQRPJG@BHC>B>=AC?GHMTW\_`ZDCGIIOUVXSRUoSOOOPRRNNSTVZ_^]\Z\ZVUURNNNMNRTSQUUNESRRUZWVPPNMKJNRQPPPVTOKLJJHHJILKKMNNMLLPSW^2b]\[/25303312b``YX[\\^5314531132_\3R35310ZQK201032240.05^X-.232.P1?d3221025Z./21031-//.W-Y.ZTMK0042/URV[ZTJK.Wc^@9G;VQX52552.\HK6/U)$9-DEBFHS1TF$>$+"#36YH[BV26:]LMN13@>N+G=2QWV2TJ0R+K@419=9538/3/SSFG8,@=O0FX;/?1)>k7>Sg:14F:G6]58PV0/-Z?688963daPF7\Q0796569988;;:75<>73295432W30XR06:;;9675321/^^^11330[]_20^132`^2340Z13X_U:a;2K5GIXSN55232c2``hiUSUUXYUROMHHIIJJNT`356<=<=>99:74`VW]joehche^][Y_ebf^d6ee36875WFBDIKMLOMNMFFKOQQQPQNNPPHHQYZSRJVRU]bc_\[XYUVUSW\^`bf4371IU\_35`TZ]Ye66684YZNNRUc[]\V^SPGJNJCCFKRV_eg`i4;>:4YI<.IH=TLKPXXSXb`ARAA>zytssruCxwxwrlkkprmklgkmigjrqqoimlonnloquzwy|smmnkkggfa_bc`^`b``a__\^_ciii`]ZYXWRJKP^adgjnqr;@?;:7k8;@?:@nilq;:><=>8ja=@?|ymfiijnkklpnkhgdhmkjhhklnqoopon^TDMOkhfcgikigggekhlyHHMPNLLMSTTTRPOOQZ\YPLQSZZVYY[TUVXVUROHyvGwouN{~yldw{~}xy|rfbfechplk_ls}NORRQRRQJMOQ\YQQTUUSMNPQSTQTUQJNOMPPTVSUUW[YYWTV[WMMOOQT~{POOQRRRpkmjwxwy{~P]`[asycURZ\WQPOMxPQFmjiXcAE?BJEhh@m_EcC8G\hfc^SQPHGFGHIPUPIHroHJ}tqpmvsvsjeceimtxmcggfjjmgdcilkkicbdeejggjkjaYTZ][XZ_acZXWS^fimgio{pmdW^c][_cehjkeenpnmjlvwwzvvtng_[`bhpy{ugbca`b[_X[[_plhhgUECHSQ_oreLCBC>BII769;6;u_J3YB6HGu|}ug[Vqknw|DFMOOB<=9=Ilba`[UQNMLJLOL}wqlg_Wqlny|vpuvkcilABnvF{wttolpmsvwyztysticnpssjmjinrm[aqjfYYhmd^]ZO^oh`ksYZupkmqiimkkmqdab[Zflfqy`dd_ZVPX_TQ^c_h||nq>?xzuldjfVq|vypnjypsr}ofhEZlkALQOLMLJIE@YRGDBLJLLI~Ewtsna]kfafb[Xacmt__[]ZZY]fggf\Tlgqqj\\_\SYVORLIPdmj_Xaa`c]]\]ijUTVQMKLWRTPTTPRRTepo\YX[abbornfe``ligjZNr`TOINXZX^^^dggIZXRIGG{utomjc_hfjsrqh^X[Y]\\[W][[c^a_bddcXhdkrlrfXSRQe=yvzxDptwsoszquwB{}|vquwzygffcnKmrFNwgyBDFwyqmegqOjcgsyuvrqtBv~uurk@LtyxrhdqDlVVYS\^ehcchg9:ojhgijoic_b`c`XYXY\\^\UWV[ZSXWVXVSPKJPP[YZ\_`Xabbba_ceZhlb[^\VQNHEFC:GIOIKHBMSPVUTYUOKKLMKKBRSEEGMF?PI;;HMNKCFK\`SPYUX\SOMGF?=DM]QQQLE@BEA:6i8_;@:H@@EEDKERLJKG>8NFQS>;H?A?AGERQQMBDDAGLOMD@::872:7?C6:7;?C>R>D3BXiJ?__83e6:?<:6?@=84_354422e97gg3473d65f49768565235f3eefg6876784egijhef896678855=@967754884;969;:8766e10/0,-101120-/...0/./.25066412//3220-.('!(--.1./132212/11-,-+),.116541./00/--1010/00-(&&%%$%&**((.4(.121-.-+'',+*((&$%(*13/.,/3.'(--1"'/  "$%#=;68!%'(*,..2*%$!&-,-(# 64$2242   #!! !""6555343 # #$$%!"%*&14",--+,,,-'$$&')(,,+++/+++,*(%')(&(*,*++---.*('" $-++,+-,,+*+),+&'$&#%k'()((&#'++)&%)(%(++&%%#%('"!$#$!!$&&''$"" !!$&%!$)&'(" )--'"" #'%'(" "  "#"##(*+,.+ !"%$%)'''(+F('&&&'&&*+++---+*,*((('%%'&&)+('()&!)''*+*)%'$###$%%&&$'&%#$"#"""#%###$#%$%()%%%$## ""!3#$#"!( ! %# #    !!! n"#" " %#  +)!")'&n!%&'##$%$#"!$"%%$(-()))*)((&$!""#$""#('($&+13-/-10++)'*-*.)*((& "$&'''##%((()()%%&($%)(($$!)&),./.,,*-*+,+-/-,./!&'(%*,).$(%%((-(,+'0++'(+(#$%(+.345//&!#!#(+*$',-&;2(<',+S+044./-,-,+)'%())+,,.-,+)!)%$%"#""'*()'&,-.,-.--*"%+$! 15437 $%(()+.0/.-,/1.-..--/-)2001/251/041/26;58::97666747:4+,,+.//--211/3667748:9;!+0;?;981-+%GMHCPRJB=:8763114423>H@<9:<7452235999887885746;99=>A@ACAD#&%$HIFEGFG)LGFEDB@>=?@===<@B?>?EEDB?AADCCBBCGJGHONGBA@?@?>=979:<8:977578789;>?=7411...*,.8;<=?@>;3!:8<> :!BF% ,&"#FE=8;;:=<:<:9;@@@>=@?A?A@@??7;!%#<=<8;>@@?><886;FSR,+.1/P+,.1343321.04550-1244244612256520,NGEN\`[S)<8>STTWZ-ZWVUNOOUY]ZWUSWQOLPG76IMOMIGIOUVUUU\^WTIC<;?B=AGBA:CFMQUU^c2110/012]V]^[--0]_3;711245301a^34763440)-.,/0343357988535970Z][0]]10WUYTPVZ[55cXYXSUX\TQQLR]XRJT[3g^\RSSWY/YTV\\[/1124K@;<:FFFEFFR0:92:HJ:10683../IE/.'795.4%%#'-)15%;.+*4:885.-+N)*())(/3.**SPNVFGUNILP+,UVUTNGCBBBGCFC>;;;7498634899442/5:=A>@DF?>90685479:;<=79>=>==?DDEFBBB?;659:=AIJKB:9:878560234@?<=;+#++5?B9(" %&28CHD;=?=>@GEB;9A4155330&,-,232.+O+.236613.11/3<54312/73--:C84/-[3[QQ*TVI@-U.TLL&**,+($92"*&+HKJB720B<;4-=8:ABE>=CB:588 "7;%?@>>;9;8>=?AB>D>=73;>?A:9559<:-3;65-,8=9651)3;D749=-.;I;;;=97:<;@04551/+25--4627CB9B<:8A9:;C634(10$''$')''$!0*#"C"*)*))IFC$GFOPBA@=43<;8994286=@230...-/57971+94<;82333,2/,/*&)6<>5055562311=;./0-*&(0,/+-.,--/;?=23227759<76=9;=2,D60,'(-/0644864#-.,')(IC@A<;;75<9:?@>:303233430532845668790::;>;>6/,+)3 >;@C@F$H=AB?;?;=77;-<79=@>?>;;"=BEA@LG<: *?B@>95<%9-+,*/0352351654223741/1.01+-./.)+)-,)+((**)(%%'%+*)*,.*011//035/880+--,+&#!"!#$'#%" %'%((+0+'#$&'%&')!##'!&##%(% #.1(%+(),($#"" '/&%%#" 2.H$!"!&"*%## $&*$#'&'$  "$$  !""+1#+')U(,,,,--.-,,.//0/..  +~~~}~~~~~ ~~~ ~}}~Ѐ}ր~߀  󅆆¿ľþĀǿپӶİ̺ż½ŀʷָ귖ŷÿƻӀ酅Į˕瞬館њف€Ӕ濄ˆ󇔐񥪧ބ팒낀„섟ځ⯆򜲃ͨ브ի퀊򊛡ɼϲ֡݀ ȹ뀁մݺݤ֯ºϺڕȾ¼±ހǙЀ̽̿䁉ɪ󁄄줿ſź􇊀އĶʺ¿½»;ӵijĮ³񇘕̶ֹᇏ㉑º̳ŸԸƲ߀򄎋򁉂ί¼ȶа̻»¸ͷĵƶû䂔ƼŸŷļƨ¿ք灁ι䅖òƽǸǭ̿ӺůRȔ挙*򀆉4de5gdgec_Yef[]f8876ihheedcfkgfhc45gbafebbaefcgjfbdfgg_`c\SOYfiiha^adfdd`diiedda^[^jdbkhec`beghea`bba47999:9876mlje`^ZVTTRQPQPRUVTUUX^hn8<;iaYUWY[\WV[^WX_e`^[UQW_g99eac\[[pMOMID<:9::;87:8:;tussrol7p9;<>@BGLKKMKFD?;AQ[UMNOF>:8nn899::<<;988;:999;=-99>>;;===>9o88786ji79988789@CBDCBB@??ABB@@A ?=<;;=?ACDDADCCDEEEGC@AB@??>=;J==?@>;:;=>>??>@?@A@>?>>>@EDEHGGD?@CAAFFA@@?=<>==;;?A@==>???=??BCECBA??A@B@==:=?=;=;;;9:9:=ADB>>A=?><;CHITXUPNNT\X[WRSPNPPPSRQXZ[YZf_XVURNQSQRXVSTQPPNPSSUYWSUWSNNKKLNOLIOURMKJJHEFHIHFGJMONMMNORSQPOQU[]`135010013307763/./22100/1131430[WZYR31//12230/1]Y]1432/W@^OZ331.0/.JW[21-./0/..V./XVWRY001-XZKI^ZW[UH@O[b2224.02115532X[Q>_M^1DI4@N8-#3.K(;=7,,O6AII.00/VG(FJ2G/+8G.76U/543&<63Q>=:3(843/23FgQ370W[O24457WS0.21.X8;:7120/9A0872565/W0V-;U/16463PFWYY132792UU`.\H2M917.:;92LJ]29:<:6752]XVZW]110a`\a\_b3632^]0123241022ZTZXORNKO]_0Z[46342bVSQTRPNNLLNQSQLKLMNNPSW[ad2d424898467786553edbe`Wb\UXb8534451`QGHHIJKLKMKKNKFGJKMMOSTadY@IR[YTKVVX246e_ZYYUQTQNT[^[`bb16403Ua^aLIKTY[__4754cbb]W`\\KFOLGAFKLNOKOPV_fd^^2165563gc[GK@:6?LT[Z]\[NCCNuXSR[]\eb[]ZY[WTRSUTRTVWU_dc]S@NNNIGFIJJMOORRRSWWWZY`YLJMFEEA=8;aXWW?EJMPPRUV[_\UUYXUSTVTTQWUVbfgi\VVYWW]egfdcbb\ZX[cn:<5`^X[[ZWOMSRRORPSZZ^WS^78ku_rYGBA:34]7BgV^Ubfb__`^^bb`f\XYenrsnnkhc`bc`bbdda``][\^`aebafnqptrortw>ztqnlkmn|Cz~{wsmnpuwuruuppmousmlkilmmllqrw{|z}|stvtytmikhacejhgmitrtrfdd`_]ieXRYYVVORU`fkmklilggd_`69>CEFGC;co==>><>@?;=9>>@?>@B@yqllputnjhhilljiieffchlpttsrqnrp\Wjlnicc`hhgdfhmw{LMPPKNKIKSTUTWYUVTNLLOQQSQNLJJLJIMRQNLOLN|qyKNPNVa`^ptsx{vwroolxx}QSTSSMMNO{PTSPRWURRPQUWZXPNNHKPXYTRPOTUONOOMNMOLLLPLNRQMMulJP]ba^cqk[WW_leZSTVQlKZWWPNJJIMMNLNIELRMNT[TPLTQQPOKKONMKLMI}xofacdeg}vrfefglnopqntqpw{wuruwrrtwrh_ajifd_\_de`bd``]^^ZY[XZXWX]`[Z`a`d`dcef[bj^Y_fgomgbbi`]tpomjkpnopporoeZTV^bdkpv}~|dacfgh]W^`ejabfVKF?DV]fl`LAHT2?345P5R:ebswpqoirprvrkei`drj_[^\P6M`\]affcb\ia]]YXYWQYORRPRQQLHMSWUX^b`XYXW[`TSTRWS^QKQ\ZTXQMHI}HPMPMH=9;:@8[M_A:TBJVJ=ttwjlegnsxyzLVNOTQt@9V6:^^\ZYVRPLINLOIxniidkvonig`_ekekKwwC{{rlhl`fz|yxqymjliomcrjfiflifW`kaZ\`qkbUY]Wd}hbflofuxvvwvhed[_fikp``djyswjed[YZPOU`bbZ[^wzt@B?uyzjh]c{lvCGKMIHLPKEJFGSNNH~xBHECGt{xxxm\YedX[_S]g^`fcedZ^WboldbcjitolmXVkeZZ_PSPNHQcmgceehdgf_XYirYSQPOMQZTc[[VVQRU`bg^Za__PQetrld_Yfsnkgbc]RXOVRWRDY]bgtBKMRLSQ{~wroga_c]smgjohhb]^]ZY\\[Z_`c\\_c`ORnbaffQ\ba\awxuxtcvC}poGF~qsptrH~rqxu{|xrqsjzCE}j}po|t}xos~xpihYVc|}nmp}xrwCxvvxB|GFrfhho@PB=99;6?778:AC?CHYVPLLOKHA@OG?IC80*)I*0I782<=98664355482117>A@==;997676679:887433467;99;@B>A?=?AD$GEDCAABBL(IKJHFC?=>BBB@DEBCACFDA@@?ADFHKKHLKFFGEHD?=>=8:<@==;6;7>A<<;875=6-',+*/-118!!#$!!#  "!#%%HEB?>ABA=;:;<>>==>=>>;=>ACBCCCBC?2/=??(=;<:??@===@EFIKMV./10-/+)S,2455683740/-/10/-XVU,W-,,/11/.2/\].NDE>5228B;40110D.422-+)**,--**'%B&+)*/0+'G*0/11/--0//,--)POKGB=7887:KOQTORPPLEC<::;BBDCCAEBCGHHFCCC@ADGD>8:?>=<;679;8;;8999:766564337744::787;:<:39=5169=B@<88<69G@=>:=@>@A?>?>93/269:?AFJLH989<<;3/36;?9;=0% ,2:?7*"%%%85BE@A>:@@BGD>:?8;C=6562))7457:9786>8753231-3-H00-/.-+O*.2413886.12257//11417/+/6724.-VTRURQRNJ*R,UJKH(.*,)$$)&""JFF;<9:?BCCD,1,,.)4$35421/--+RQM(,+,*SVJE><:58DEG@<>;:657;33&@;<#CC=85925?@AA=DG<8:9>>9C<675965,083.12>95-13.4CG9687:29A?@@AA667238;;@646:C@A758212++0885.0/>@:#91((+67:71: !#%#"&*'A$($%)')%A@#'$#&D?EHCCKLKBA<0/99269/48256343+1,5=:53497=9:=/-;5/37+.+)#'19979885653/1:A1,++)'+1.611//--077941545**5=A=:729D?>;786.3,-*/,$1137=!%',)0.HCFC?=95353@=8;=::524210332367954486,*>4388+24402>?=@FA3=%DJ>9&'E?>CC>;:><;;sq:<;:99;99;?DGDCGIJHGEE=8CHOSQIEA?=;pnkp9r:=;;::669:8699akj99:;:::;:989;9987<>?>@C?=?D@AJGHEFDDDCDGIFCGHGFC@=<<=>>ADB@@AABBCDEHHJJGEGECA@AAA@?@?>==<<=>?A?=l;<;:;<>==>?ACCBCDDCCEFFEDFFCABBBHKC>?=>?@=<>?ADC==<:::;9;==;:<==<;>DHIGEA<8899=<9:87899975j67554344cbb12bbbca][_b`\[XURQOOSRQ[deibne`OQXZXTVX[\]]]ZZ_a`YWUD>?IR\TGYjZXYXHFNOWTMQ\Z^b]\VQFCGNORNJJMJHHFFDCFC?BFC;cDSID@JQPTTPJIEEIQMLQSMDEJOUTQSMFEKKFED@>:9EJNYLKFDCFHHIJILX\fmthcKEHKUYWUMJSUQUSPPNRX\[YWX]b^]ZvWWTTRSWVRPQRSTPOR&QRSXNMJMQQPPTSLLLKMKINZUMMMKKLNOKKKJNNPQQSRNGIJILPV^3022241335642441_XR\[Yc12410330100143221011151//S^]2641XWZb/-1400WO]K4Y_2V0321XYW/.-UWSV/.2.V\SYVUTPMLUU[./0221.P.311432/[feg6OS73/.SA1/,;&>.8C5!5K8GI611N24:7OJU.7JXE^2=CZ5307 a2W6E>=:3/623-42O[Y2/H2:1/28>;12-043,0897::5Q8W6896.W1648629[13069.>KZ804923SY]X^648;7.->2BCB;K+Yv:`,:_B95/,+C?CHNC]XX0210132664Y+VRGAP4635477642W7:863510<;9964557:@:1VNQ]\/689440YVUYVRU\\[YUW[]62W\QOMQXZa[QWPZ62\Y_VZaAK^a^03776d`a]^VGKJRWUMKKPXXNGLMOPNSLKPSRSVZ^bggda`b`Y\^\ZWXUTYZZYY`_XXWOPRNIMNOTVQPTTRSUSPT]PGJPRVc[NIEEBRONQ[ZW366d\[[XYTSTW\\]`fc235666^WQONRW^\RWbYRY114e`]djc\``ORHKHGIKNYf_[W[XYa_37<98f]SRJ7IQZW\PQ_H6QRWY^mhegff^YTWXWWVRROSS[\_e^RPIYXQHINRPOPONPNRTWWSQRXYSLJIIEDG;C5@C^8@IJIPPNKMSW[^\VW[^VTSSTQW[\\epqgZUWZWW_a^[\\diXTNL^k<75_WTTVRVOJPQXVOLQUOXWPUo9j\`q>5;C=98:>?BBDA>@@>?@?>xpovyupstutooqmlknrjfdddfhkqorqrupqsr{rmkjqeifjjim}{vORU]ZWWSMNRT[NRSPORSMLTRNPTRMOMNY_l~K|z||RRVRLLQOSQMPQRSMOPQWHHHGKR[_RPOPOKLN_cMQTJNQSTXPOOkViZZ\grj]]Y\__^XRWQRVPIKB{|srlnsnvoCWZQMKCJRWWNIKONynijkgbcb[[hqsz~zsjkxqorsyqnx{kv}~y}vpjqodbbd]ba^]]^^]XXUUYYTUPPSUWTU`_frk]]]ZXfg\UW^agd`cfmknngglemtkkhgfa\XR[joqjlhgmsvdbbcdb_gili_^_PDHRRXmem]Uona1,e2;A:>ZSdiisttkmqnsonilbhijc_\bbYP_Zb`ZaegXS]]dYVSTMSUKMRMDKNIHMPU\^a\RWXVTO]XTUTSTXRNPTMPPUQMJKIwvOOOQKINEBH=2`1@X//Y;NPDhr}moknvQWNNPXUPJ;Y_3KWWWX_SMKLJEJNKNJLvrrxusrncbYYZ^bc`_FByFyuthjrgjuzs~smlqphedgbhomqmoe`ji[Zclb_[h]Qfy~^T_out~Dywqpigd`^dbdh]_akrrldbZSWYMU^b\d__dlzw@E~syjfme\8;BAEKRIECGLPKEFKPQJCDISSBpHUQLMPQJ|swA?CG{t}|rt|szt{caf\SXTB__[ahfmibdb`sqjbeqokd_\VIdqicTW[NINVbgW\dW_ot`^]eZfZXSVRSS^TYa[T]XSPT^`^ZS]]GU_ypdhh_`fjcib[VNRUTQLJERf_rorAILNCuvskfc^od]anqsokaZZ\a^b]`a\YZ^gdVLd_bOYNZhh[iyxxym]psxHs{}wujp~IwsxpnruD{|vjh{FG_frygmjvxKAumfYMywk^tbpAjoA@uxrjLHC|qoojlhhnfhlcc[`]WXf8<=<9=<:oojeab_\`\XVWWRUWVSUZSPPZda]VUMOU[b\WW[YX]cffhcg^]bccb[YXMLJJGD@>?@DKCKQNN^VLWbaaOOSRQfVJDBHUNMHA=DCK@=CBDUYJNQVSUILMIFD>DHHWbkVKHGHFCB?=<998>7?EB86DHEOYPLIQE=@5FLAD><@MLVL@=?EKKBFOF8=85PIn5VIAHE56B=4g@1RmkZZ:e22==<=>?4=C4ac234335344435bg555755897;567888ii55568997776656ffecbf6996hkdeeh5h55689588545469979643./-/0200/./,++31--.21..102/,010//..0113122630/.-(%.2210./0100..-.431/.-,/01441050,.+-.6542//-,-./-,-N--00,*&(.70,+,,+*,/54155+()(+++'*-.,,.-+/#()3,298&!$"!$&('%%%$(*)%# 53245@1/  "   ! n !  #% 554 ! 0...,,-/.**,,**,)('&%&(%"(*'))1-*$&+,*)(*+++**))-,-++) &),(!+4++,,$%&(,(%',*,,*+))$"$''(&%$$##!!#!!#$ 8$-%#&)'**'#$ !'&$')'""#('%%$ !$#! "$,%%"! !#""#"$*-25738)"$$'('(%#)-(()''%(+./-,+,2.-+=+,++**,+)()()'&%'&%'+$$##%S'(##$#$$"%,*%$$"#$$%#$$#%$$#$%&&%$%""##"$$'%"##!'"#!"%%""' ! #"  "''%    +!" (# ""$Y !#"#+6&#!"  $###"#" %$%%"""#"$! ##&%!#"&!"(&&$(&'%&'!%%*.-'&&'*)#!"$##%!"%%&(*,./21.,*--*+--+)*(*./.--0.)((&&('#&'(,,)(*,*+,*)*/(#%*)).*%$#"*%%'-+%1./0--*)+,..-,.,)'&%')+,( #)% $--+-0-+,-$(###"$%()(*/730,.+,0.(&!&$&',)*##/ *)-.0;757872/-/0.,+))())/203.'(&-,)%&)+(*+*)*)+,./-,,/0,)'''%"""1"''',+)')-/231/023.-,-/,01348AB80-./-,12/.107:1/*)2820104/2/)-/42.+./-41,0=2++2;931..-GVA482789;53167521.+059==895795477598655673256789>@D@AEFHGAABDDAFHFIGFDA???@@AGEA@ADEGIFDA?==AAEFGLLIHECCGIHJJFB?>@B@A@<4/76>?=:82$0*"$//,6/9<<:989/$2-'0-7?##H$#&+(''%$$&'&%$ """#""#FA>ADC@BCAA?=?;=<=@;:;;::;=@@A@@EBBA;DE@?==B==;??>?KJEKUZ^^124:9463./25;1431034.ZXWPS.540141SQQRPW-WY0]VSMMOMTTOQXXX^01a_\UUUXPOWVWRK02;GZ^]^[\.ZXSVZ_]VXSMHFGIQLPMQXY\bbd4583[XXU./ZWZ_12c61Z]03233^^TVZX[]^00/04V+*++-29:1```21ccUVU[VLSQX]0.,Y-.VNUPMNSde]ZRP_id5;YUMORXZ_^a155ZKTXWVROT+./234/00UOK;NW3A557?HE:94;??<6252471,WT,ON)PRMKJCA;<<8:9'44,,.*.145.RR,.1.SOJH@>?@=:8602;BRVSSJBGQKHE?BI@ADHKCELRJAGNUNIIOLKOKFB@B?:9<=8:8:8687846345502-.01324:764322<:4/148=<8:;?=??;;>8=@>@;;9862.6?EE??<50<8./)-9<=CBB==@?CCA>A:>>=87475/+639748892/53:20./+01+-.,%+,(I*.136596-0///-7311///4/,.1-.01/-YSTS**JNOK+UKEBM--*+'$& #"#0DCI?>@>7723330/+)#">&HC?@99=65:JHC?F@=<>>8:9956:9;8;52:8..3:42193*7AE4-2;<@;761-34*048380039A?"&A=A6470)""#&*%" "&(&!"%()% !$,*";(.,'&'*(C=>" "&B?FD?@FBID@E4593.3/"/.-275972566@>848?;9422/&6<<8.02*&%)27036,1;=00391:2/.0*++1,030.52.+17630+34&-2B=6<;54:<:=741,-.,*)(&-72@G;: &)*#EFIG@B@9551<725=>@=940026286795112981*759*2-187/8B?=?F;1==@'E=@CA?>8>B'E@?B<:>>$C?>=89E'(45;C8;:A@(!=!?;7/&@=90>38$::"#@H@;4@))%?;==9;74:56913.10+*24643120/20-+,-(*))''-)'&)-*)')"#'+0,))-++-///314..1212-,.&%$$$"" !'!#'%#/)$)./2'(+*'7)#!"#)%%#! $  *,"#'+((""#! ! (-h3'! !" !!!%"(,&#"("!$&%*#!"$&!.#!# 1(86++),++-10.000./0030/-/1 ~~}~}~~~~ 怃~Ā}|~ ~ ᅅ􀌏º-žоվþĵͻԨɼȾċûý̿ľĿ񀂄⅀懁℄ʨ눍̢յӊĬՙ앜ܻٕƅ𙸃䇀у릳كۿ²膀狆dž͵ʂ냇腓̬¾րȬ½˻ſƿľ;׀˦ǖۤ˴̿ѳӾþ²̾킆õ믚ſǀۿ󀍊񅆍ǵ󕣤Ļ˻ºƻ˭̀ķ¿솈񂥟ϼɼɼȲѿ҃ՀӿɼֹοʰԷŻнž÷ŻĿû·Ϳ􄏍ȹķվDzʺò鶑Ooegigdbccfde]_^W\b6f786g:7;;6dcdcaddgfa\^885ie_`gne_\_`cgea_]ST\cgfbaddcc`daabfe_`b`\`eha`e459559;:43gbc49976799:pkjd][^accbdfdd`\`a\YZ^cj77jfbbaceiiecgncWSRPORTSX]XV[ca^`bn>>nc^^a587988;@A===;878:<<899789;?DD~FGIJGFC:=<@FLGDCA>;:::88nlm70mn9:957;;97jik78;=;98q999=<7n868;:77<=?@B>ABDDEFGEFJGGGHLKFD@>==>>?@?@BECCBDECHHEGEDGGFECDFGCAAA@?><==<<>?>>>=<;;::9;<<>@AA?>@FGGFDCEDCDECCCEGKGB??=?BB@@???BC@??@@>BFD@?CA@@@?@<9;>@A@@AAAB?<:88;BA??>@B?;;;<<;$9:::<;999;<<>ABDD>=8799<><:99:9:;75454442211212_^]`_YVWZWUQPMKKLPU]`=trYW[]\YZ[YYXY\YXY\^ZVSOMPOT[_RW[XWZZYQQSVYSUX\]a_XOQMLNOOOMKLLIFEIMLIHJMJGEC<>>AA>FIDIPQNQWNIHGGILNRRSPSTXVKDFIGGIFICC@BADCFHEDCCEGHJIGFIOP^lfINPVXXZUUPEKNRRLJJNST>BX`YWXWTPLNMLLLNNNOPPQQMLNOPTYUQMMONPQNRPLMMLMIHKPQQQNKKMNLLNOPRRQQSURRNNKLPLKJILOOSXZZ///2220132``[PW554431163012001\V3332012\/210054/YTV3/0\/210./0.\VZ1.11,0,,WU./-ZW-0011URR//XXVQQWV.W+.+.3/V-10041Xb__VhdcUXSJ_Kr5=61>8FI*&$6*KB;Z23.007780K=>UIE70O323-+=;Q[QCD>976MH802.20Z\/SZ2[5P5722]5856;.3:879<96QE5<;6K0G4[2C13V84\6957[T420<73O/30[878==RZ7>9601O9C;1=-T334GO3//ZI;J=6zshlmmrpnlsuljppnojhhmpmkibcadjnpplorvxzvvuqtqoojluxx}}}IONJ{zMOSVQNKKRROQSLNNKkdneQOONNQSTYTQUSOQMOLLVUQQTTZVMNPOOON~rKLQPML~yx}MPQNSSPPNNQMqQ^f\YYW_\RQS__`ZQNJKM{~vri`VP\fkectuuirK[_XRSVVPRPLMMHMJvpoe_ZWQIKT]nxtkq~ylhovvorogeeiongfej{zqv~~wsifg^WW[Z[_^_^YY\]VUTSUXRVOOOTWWSZ`dhbdedchg]YXX_]a\VYccb^]eouxvwmheijdfd]jvzjTWXaglrohdcd`YUZXYc\RLR]gcdbXSQIx{c@7.>ISZ4_eghrtotprlnooid]foofaddnlcZb\^`gjdZ`_YVRTTRJORLIGAENRTMSSU\haUTPVYVUW_VVSQTURKPRYONRLNMNJHqnIOJTYGKQPUXR=4bBR/1(NvJro{yv{~HQSRNNPRMWH7\b`>[YRVSNLMKMIKJLLJ*~txruruwnc\UT\_]][nPEwrsppfhbpF{wtrlnhd`\_m|wxorpmphW]kebjjaVW`^tg`bilDx|wnqhbd^goidX\`eptsj_]PVSTFaV^Ukp\itrgt@pswft>ZP:EEGHNRLLLOMELIHLQJICBIRI|HIIFMWSHuip|BFI~y{trmyoputypc^\QMFFQRNSbjmmoncTeqobajbe]^ZXG^Sk\G[THQXXW][UPRWckU]_WVT]TVT]^YR`ec\^ZQKLVZ[oid^U^bsj^hnhehc[ZdbZTPTcWNOPO[[Zajt}zvF@FJEwpoulhhaZanprttrjeedb`\_^VUZ]ce^[Y\ZJQYZckgp}y_fsgjx}BwwxpojsHurjmoxgkynjjhzhrgj?A>oyxtqif|jnmd]fgjihvyz|y{PXf]acd_]_U`hjkbhncZde8@=;??<;>9jgia]XVRUYXPUWTTSTWTZ\_fd`cZWUUXTW^bWT_caaiaebc_h`dZTXTMLJKEB:B;?HBFRYJXRM[b^XOIOTQZPKMPNMJLKKGGCBDF?BDEVUOPSQYZSKJMNINIDK[aeaOKJIJIEB??<7AGD>D@@;C;@EF=ADC:<:>GHDC=:CFGD?9?HCHKG=@b7:ePOSb8;<9<57?A7fPMUmk`5XH88>>>==B82S`]235435566444f27758636:8665786e65i5889758866775eccfaj98556676gf67954578636656777660332/.//012./-*-1..--..,./10.++21..372/-0/1430/-'(,0430.///0/10//22.-//,,13.,,/./8662.,.01232422.,/2/,,-.02100//133/.041,**'&())*-*)+1201285/--.!"?$$$%%%# %$" 21343240072  !"# "Z!#%"  j.,++*()++*)'&%#""#$((44(+---+)*('&(+)()+,*(('))(+./&(+)()*+'''*+)())*+*)%('B&'&$$"$&&%$%(%$## ! !!%%"$''%&*&""#"$%%&'*'''('#!!$""" " " X"!!##"!#&&-65%(*+*(*')&"%()$##%'(!,3-,)()(&''&%%&&'((&&'%$%$$'*('%$%#$&%&%"#"#$$#$'('%$%%%$%&%%$&'%$#%$#&$$$#%&#$&&&&$""#! "!!#"  $&%%%##! !#  ! $"" #!""d !%""!#!"!!!""##%!"$!!$# #$#$# !#!!"%%$ !"'$'&#!!%&%"##"&'*')*#&+-/,)'$ "&$$#'&)""(+($++)(+0.,-,+*),.+*-+*,++,))'')%'+)+('))%*(&)+(')*))+,-*+*+-+))(*+,,)*+,++*n+./2042,---..-))%"%*+,*%**-)*-+')((()*,**')(.,(+(#$&(,032.++.03+'#'&%*2*/,/.,0433321/0-+./..0-))*R',#&*,0((%(**---+++*+/-.,-,-.,.*++&%&&$ ""%%%')+,02001001680/*(),/13488664121114}34432.'))..0-002-.,(,.11-).5.2003742*##+07542+-)37-1+,68314210/020/15:;<;875578688333456324457:9:8;:;:9=A?>>@BB@CBCBA@BACCB?>AAACCBBBCG%JCCDA>?@@BEEEGHFFCCCGHGI'JB@CDDED?<:<;>>=:;6&)-'0:<<;?>=<987408@?@?@@=?=;;:6J98:=AA@?ADFDEEGLHBCECACAAGIILKHSU-TU]aa]_2`^.+EFOPXVUROOPTYX[\]\002520VTTUTVY\\-TQJMPV[[ZWURMPXZWVUV,232ba`^V\XTW\23.[..-XYYWVVRPUPD6071LSPMVXXY\_b2220/04683YYa47633`\[/1.YUQUVXU/77334374..Y//./[YX[0^aa`[WY[YQE;F,-00..XOZRNIEEJPRRPNQccZUYWZ[\\cb/1][^YT[1WWXUURS.11//..0.N?TT08;535497347<;<70/,,-ULGKHG?81,3;>56CB:/9*4622442/0/-00-0-UPHDA8630)%&.4@MRQOJLKFD@BLJA@FIGBDD?==@DA>?<753476;5/2:9866=ACEDA><:=<9:71C@;9::84/213:5/*-27778310)?C8+!%7:;=83856:==838730.000+.1+(&#&./0+1238?910-/10126120/000+/04-.1,-.XQUR,NG*JK*LAAD?95103-'&%1*#GHB>?><5528%GAAA@:<;==87512:A:32+0.1%8-1+8<-6==6>";=A5=+%###%(*'''(&#(&%'+&%!!%*&@D%&%$',*%>8<@ $&CAB>=:A;<>>@;534.+$"###)489;;;4-8><35;781200&3,>4'5-&,0/-430++,0E8,240//5/2/21.*365352-)*011=963/34>:3:>;;?;32;960,-80*++*1005:@D?<&"'($JJB<;=989624=;==><767765365//237953114+-548;8;BGBB@46A88AA$A@@;;8>D&HFG>;7;<=CEDAD67@:886A8?:9H" !8>@==95B8:;518d9::7@CGAB@CE,3G63799432+17771391,106452/-+**,,&**((''*(,-,--+.('#$('*.0)'-0..1.0/1.603,)+(&#!"$!&,"*&"*.,,'$',)-&"&*(%#$%%""!" "('#$'&+,( #$!$#"**--#!!"""!" ! " !# ""! """ $!+2&)(1 1&'-65-(*(--.10012.201~~~}~}~~  䀃}~ـف +~ 􄊐ƿѵ˿q͹̽ʽǿijɶĿÿ遄䍁򆂂ӛچLj䲄䗏фՒΈ˃ဈ񆋈Ʈ♜ݗɐʼnڐچǶ눒̿¸Ǹɾ˷ʸ낅몣Ծˑƫπӿ¶»ƾƤһĺˀý͏ÝŽĿۀ퀃׌¸˼β½·òı㥈ÿ·»ꃐȺ񆃅ӿ뚎ƳľøʶĽƾӺ牑ȓހ耐տϾķЬǬſƶͽŻĹʽ߂ݯҀ󀈉「끖ջ˹ȸĹ̿ӄրķǽ¿ſ³qځ߃Žihgcfffecccdb^YUV`c48e5:58:=;7f`acagec`YThhi6hdgmfd]][X[ac`^ZVYebeabfgcebcgifa^_`]_`afe^]ab23ecf598764f564449;;:99:98opk^Z_ccbejhghd^`c`][ZZ_`_ccadci:?>9g^\eccf\WXWXYXZWTU[ZZYWVYY[```i566525988;<:;>;8m889::=<878lfporznvDGECDFHLNKGGGD?<;;9;;:8mkkkl786g5799867::<=<;98889;<:8nkil786k7=B@9:>>>@DFGHHHKLIFHILKHEB??@??@BBDEHFEDEFDGHCDIIJKIDBACDDEFEDA@>=>>>=>>@?>=<=<:;=>??@BBAAACEECEEECDFFBBCDECABD@=<=@?=;<<=<<<===;>DGE@BA@<;;;<<:;>@>?A@CGBB>99::<=;<89:;;;::99<:<9865i445434445432abc22a\\`_VVXXVVTURRPMNKJQkpiYTVY\^beac]WTVWUSSTSRQNLKMPZ\\Z[[Z]b\\YZZXZ[_`3lUJQMJONOQK@@GECDLOLGFKKJHECBABG?=DCGNLNJKUZOKHFFHOQNLNMMHLKIEDEDEJQSHBCDCBACAACBAFOMHGEFFGHKLHJKGITZXTUTNEAFJHGHJOQEMOTXUPSUPJKLMKOLLNMLKKJKLNPTTORUUORUSPRRRQOPPNIGJPQOMKKKLLMMPQRSNNQRQPNQPQNOONJILKKJFKNX011231[Xaf2481XW71[WT1^2/Z_2553330/1/1050VXRWZW^a13//\121-\QZ[.00//YVA01/1/..010SPHV1./ULTRWXX.-.21,,00VU=IRkfwV?HD7629747608886;994EP<>5GMJ43`/>3,=4-34724:54480[A2V/37;0LQ]LNc70@V676BKakwya`BVXUUTNNOOPLoilfgc[RJJKILWktgkpuusvqa]ZX]dbca_^ebhd^`ebage\d_X[qqokcf`^YVTY\Z[YX[^YXUWY[WXYYPJNTYXYYZ_`Z_d]a_Y\[VMLSURUeegkouxzzurqsy{qkga[enjcccekdjrqob]YMH>\]f^OY`puna[QPKFBE;<9GKVP(9dfdjsuspquoqrme^_qtka_kish\aaVahhhca^\URQQQKHSRIJHPMVWNOOPTTNIKQUWVXRVWWRWXZUMWSPKPOKJxNUtvBNKQSb[NUWX[_[C:WLW2FLtspt|~~LKKQRXTMTI?YVc8R`[TRLJMKJLJMPKN|zOvt~pd`XX[Y[^^bIIA|urtklfZlzzspk_hpmlhfc_Ycp}|{tsyf_[\Xe[fe^c]RY]ipbg]jwv}|uxrqgchhjie@aZa`bxmsf]PK[]MGDz{~yvtjmsryka[XLCG?JIQ^mrjrpjg]juffe_Z\lWNNWbVWOYQJTSJRTRTXQ^[prZZ[TT[XNGLec_\bgne[TVVAU]`hspggfhqee{rhipXPO[aZ\TUOSRPUWUMS`[qithmmBMHxfosje]\_furqvvpkhfja]XQW`]\Yha[YWYKQV^bkmqEKPvUYenfbgqnz~wpf}DKFjwmonpBzo@IB}lfnuomrpeeqw{?wD{nhknFztrj_e^nlojb@HFsCSIpY^cW_h\N\goj]q;JCNB@BA:9?@;;<:;:98DG@CBDKFEMKB?Wg95QWX451bCB58>D67j:XY_89I:4_8;>@<6?.>A;4ecd443546765686569659348:77e6685k75h555779862d8<;khkebhm7976796gc7:653gc3gfhgd88875g123022320/120-+)*//-/--++00/-)'001413512./,*,/1/-+(*310./10/000111/+,,+-./31,*,,212/675/+.011242110,,/.+,-,..,././021/*.113-)*)++*+*))-..--,-+,0/+0332757?:@$%#!$%%"#" 1]/54233  "" !!!  ! !"4! " ! !/*-.--*)**'),,++**))'%$! "273*(**+++,++)('%%''&''&%%%,++)*(()-,-+*+**)**/'#(&%'''(& $#!"&'&#"&&%$! !!$"#"$($%##'*$#"!"#''$#%$$###! ! #%&    "(&"! !"#$#$%>#$-/,)(&$!#"""#%'!%'+,+('*)%&'&$$%$%&'%&$##$$$&))%((($%''%&%$ &&$"#&''&##$%"&&&'%%$%$$$%$&&'''$#$##" !#$#$%&$!$"""$! !"#$# #"   ! '628!! 4 +    +" $"%"#$%  !! &#-"!&%%"#&&#'#%#%&&"""%$"#!"!"%!!#$"#!"&$$&%#" #$!!(&**'%(+-,+*'"'+*$""%#""$%,-+,)&)***)*..--0,(()((',11(%$" "$&*+',,*)$('*)')(')%%%),(#"(-0.)%&)*,/1.-+&#,-,,(*)..110-+'),,+,,,00)++,.-)++*,,+,,&('#!)()/%'-..024/)*.031/.)/*#$ )3",)12012524541-,-,/.,/.*++.$%-),,,.',)(*0-,+**''(+-.+*-1.++,++11,**,$',!!"%**)**)+1/0.-0145643425024475215435433485002/77-/0%+,2.)./.0*$'*02-.26234.+24/*-.2*)30/-&L.0>21-68421/.-,./038:;::89788<98566573575676358;988849;<<<>? +A=@@==@BBBA?>ACBAAA@@BFH&IDDA?BCA@@ABDFEEEFCDGDCEFEGJJOK&GDHKICCA;880*35::=BGHIHEEDFJ&KJJKS)MMMKJDEJHIILQ(NMFDDFA9==><8=AB=:===?@>;9::9759<;?AA>=?CDEEHHEC?CEEE@==BCEEFBCJKRWXYY[YZZYUQ=4@CGFFJMLLQOOPQT^3310224898:3.^]^]XWZ+-/2b_052c_[Y\2bLS24341/Za_VT\]_110TYP7L,RTZ-/TPPQC69,2:PZ^beZYW^/3212255351YZ\a287646432/WURWZZY[-/147;93.Y^]WQ./ZYWTSYaacY[aa\Z10-+FMMW.YPJIIGKKGGJKNMOXWWTX^3^a22/13.-Y22074\WSQOQ-+,*//./2,./.0,1895222022261,-LDD?/'" #0378&3&00021.0332.YZWZNA@C?@<4+'()(*2APZQMC==@EEDHD9765:>:::98>:@<:<>;:?>6=924BBCA<@;:520698875783324552223-),134654993885:95762*,00-4=9<=ADEGFB@BEHHB?:61;?;999:<6=BCB973*'$74<5,57AC?74//,MI%!!$ ::9<@BA@@CACB?:68ED>97@<@;37709?;;98651.-/1,*01O))).,22--//21-*)-0124.011/3582+30-*.-+*QEKQ,1JOPLPG@?#+*--61*/0/12-! %BMLBACHJJGIKL,++.-2-(,!%%,*43//*)+((*)+.+,OJPGKEM/M@?F?:8223.'&%'%&"DE@>=:95+6>D@=>;39=<<:975/3:B??>=B854409077373+127>57/7>=DE@B=H=7399;:641643@7<61)'//$9.*",05;:;<=A!!> ! %%$#')%&)*(()"$$%&'&%%%#"7B$%(' =7><'$$?BDA@G<79==A9334+# (1:?:?>::29?678724<-))08.2,4,&-+%+/+/1+0-:>002--11-&*830/38=82.10"-/.5>=888:?79GB;?D2-+5834//)/-,,.-(-50?8M@686!'&KB6=F;850015?<:>;8786:520,07442:631.3*/169==<&K*.A//39866<;AEA>5A#()GI8<8:<;$A9 &#D848>;8?@97;@B">$@:8:;&C9;8273:<=95HF!&&?$.)>24:1493+2696.771551424/+(&*,(%)0+''%*)32.())%-&&/.-,/,02/0//-.1531--)*''%'##!!#&*%''&''&(&##)++)"&'%%#(*)&#!!" !"'$*(+'*'''$##!&)#!+'(1'#!!" "!$ "# !# %!%!%/)--*!"!1+*._,,,-10*3341/141-/,/./0/ցƀπ  +~~}~}~~  ~耉}ڀ߀~  󄈅타񃎑舄»ԫ¾ſŹ龭½¼¾ƽĀĻȦށـݩ֌ꆎيփǞݤ҈񔌆쀇׀ߏʇDŽһȿŀ½λþ·ɿžۀ򁄆ŲظܱӀƧþǼį˺Ƚ⪥񀃅耇ȉû¾ɀǭ셎ŭ¶⅖Ȥѿ驿żʬйDzٻ˽ŻþʺͼʹȪɢ􀃚򆇌鈘ɲƹέʿƀ¾ʹзꈋȾýת݀탖ͼͿ؀˿ȭºʿ⾼Ͻ¸ij늄܊֘idfcbedh6ifhkgeaVX^ehed88556<:7kfk7hdcbigedbdhh`ff_]]a^Z^bfgda]egaaeb`bdefhg5fcdcadhedb[\`e55igge36877875436><8776786lm87d```^a60:8mhe46kged`^`][_^]]_k:>=9:75gifbba`baad`[VWXYZ^`gjl7ik7766655779:8mnl8<998::97jinwvtvpbgxEFFFHMNMMKGC>::;:8979::99n78766887985889?<;98pp77n9;qoljloop789kcbgl7:>@CGHJLNLJKIJJIHHDDEBABCD EFHIGFHJKIIJHDCDEFEFFGDECAABBA@@Bd@=;:;=>?@ACCDFDDCDEFHIJEEDCCBCEHC?==A=:99;==><;<<:<>@@?@BA?<=>??=<<;9:<>CE?>=::=B?>>>?G?qnlq99<89>s;98;>;:<<9788899:;;=<<<8/0/.:977620575.VAZ\JP6:7^3:;M641=:[P29bb[A<85721783T573^\W8^H1-444WDW8><>=5/6:2CZ9J)-N18>=72XRaPKNSIXG0F@667751FBW?/:84X412-234763464226^V^]WU[]ZYa33b]V[]\[UQX[VYTIBHLJGFGJPRQ]a02461__]__]a3]QSOHOTYXSPOQJHEDINOONJIECEMQRQQXda[VRVYVUXX]^YZ[XSXaZTT[]VRNDCDMVWVUTVQNIMSVYQOOX^_YT\UPMNPTWSQLPV[Z[^_b010-251279^SPOQTX]ec5569;865564^[\YUQPTTWWXZ^`][WQXT`f6g\`5b_]TOTY\`_ee[UU[cl6:<<<96f\MPKFMK?8RROYX\daeaaae^YSSVYWXYVSUW[ZUWYZ[WILPQRTYURMOLMKPUVXVSVYWTVRQUWUXSQOIGPJF@@>IJJKJOPRQNSVYY\a^^__[YY]a`]`efhd`c]ab[WT:Vd[Qg7]FHPKBAFHLGMIQQQYWU[acegk98989;7e6'BBALqJ\IgaUUT^]ZXXVPPOPUT^a_``_^`fcdb`[\[^``^becdd```_bca^_`acbbehjkjmpoqmjiroqprxurlkpstrqpkluzzyvttuqqmifjqtrsuxxvtuy{|wpsvtvwsvtrsrpp:g67kis<=>ppuxvy}xvwxyx}{zwx|~}zvuxz{yxuvrmnqnddkmnnniedddfkedijjmoqqstmjrpqpnlmmrsplhorron|{my{wutqkqx{|SUUQPMMMORSRUZYYVTSTSPPRSQRRLJMRQLGHCHKORNOPROrNOQSSSTUOPOLNSXWTTLONSQQTQNIMLLUVVVURJ}~~zwz|QQLNNMLNNOPRRSXSNTNHFFHNPQQQTTSSRVXVTPQRRMMNOKvd`jljm^JM\^^`JIFDILbb\VOLKNL|}reha^ZUT_`ZTQQ[iu{~rcgqwuqkaRQUWZb]+XVVWY\[\\]\`enrpkdg\by|sjjjbb]WURK[]\ZYZZ]Z\WZXLOXXY]]YYZX^ZV[XRRPPJNY\alnkmlpsx{ulqss||s][kfhmpxwmqljjnrk[UKGPdb[SNTZYWQQONJM~HJkg216/H'GQbhjqwsnmnmomlg\dirog`lohgadd]^_Y^b\XZXLPONMGJQNPKLVPRNKLKLHKTVUUWUV\XPX__MRWPTQOMII|U`T~xNJKTXZVOVX[^`XJE@?6QDYo~mrqk{|n\k|aK[XT{FE:43UhNb\UUMJOKILMNKMJu}xvtg\XZ^aZ^]cyvrljc^\X[WQV_da[[WJV]aU_jipFoTWgme\aijcnhsz@?w}qzvmppwGzavCDMC|stsjegkxmop}EPxhnmdYFuohdmt~eex?MJFAumff]Z]\XVbaZdp<@:h;9ifnheh55ghh_ebXUVU[VPWYSPVPKQdk9@A;8dhe`\^ZaUZec]dhing^a``hff][VQQKKLJC=MDAIMOOKR`hg`P\WSFQWSPPQMPYVRURMKIHGDE7EAPFXea\aXO]aMOLMNEJY_`ZSJJLHHPJFECICCEKSEEEDCCACGBA@<>=7<@D@NGHTKFD5eVe\SR_85WAH86=A97@\]YZ`aT8V:<=>A?@:=?;853d2344634788<98688587579<63f4:8fhigg3f37865549:=;:;oklhkn77577kfdlkjgd i786jg[e6986b21310124224531/**-12./4020/..310.-.11.22/-,/.,-0231/-13//0.,,/001/1/0/./2110)*,/3100341/..--2/,3012/---,-.---4020/...1/.0/-+,++,././/243022320/179:<6/5A##"$&%&%" 1U555875233463/./1 ""! !!""  ! ""  . !!! !#! "  !4445 0/1[-,,*,+)())*+++*+)(('$&+*)'%*(()*'#)((&&'''%%&&$"#&')**(&&)*,**,,++*)*)1*!$&%(()**($$%&$#$&&%"&'"!%')()(&&&%"#()%%$&*'%&%$#j%"!!   !$#! #&'%"! ""$# #4"024E9&" #"#""%%)'"###""#!"$'&''%$%'&&$%'&'&)(&%&'&%''*+*$%''%%&%%&'%#$$$%&%%&%$#$'&%'%'&''*)'&'(&"$%&%&'%#"##(#%"("  " !5 !'<@F7    " #"#" &)%!###%# ! %!# !#!&%#!%%##&&$!#$##!"$ "!  !"$&$%&'(&'& !!#'++*('(w"""!%((('##!!%'(''*0.,)(*,)(**-.+*+)'*/,)'*,)'' !&++*))*(%#%)+.)(',-,+)-))()*,-+*')-0./0/-)&%%(*-041()+)'&&(),,-,..-,)%*',--),.-.+,02244870../240.(+&#(($0,)..03130123.,')+.,--,***--)*,-0.$(++*,0-,'*(*)+,-0,+./.*.+*,.+,'&# "($$!"!()('&)+,,)+,/03532330./1013643477973516720.193,5,$(/+%$())',(-.06313689::/871+A*2'<6///643220-,,,007768665B7<::9764256668:8887778<<96889:99:<===@BC@@@>AFHGDC@@?==@DFDEGJHEEFHJIE@DGGIIFGEDDCA=/57< !=AEGFHIKLMHFGGHHJOIJIHKMNNPLKMLMLKIFBACEFEDCC?>@A@;:???CB=:9:;;><;>?=?@BBCEA=AABCB?B{CDCB@=CDCBALOQRQSTOWYY[Z[YG2&(/.//C&&%$(.:852/./1.WUTMME??;96239960-,3>HIJPPMB7>EHGD@9-0448?<87545789677:=EDC>:?5:IJD?A@<>842/H.9974676968766353*-244883444:6365100/*.447>=<>>ACHHC@AABIKE36?:<@AFC>@=;=@D=61+',773/,044201/-+.MF'(@33 /9<=ADC??>>A@>;4:>DA=9AA;:7895662585353+.--.**/.J0+-PN4//-+-L+-)*//0232142-389,/3.1/.+)*MHU3:0LMNMKHEH,*+012/,22345.$6CI?CA:CHB9.9D<4;68/2>@@=A64F@98;<96%6=C>??<:76664,0;5247.37=9865AFC?;977;288/15825=;C>8,'+'"!/(3:8:?>#!@? 9%%&$!(-+)+)($'$##($&'&%A ?:##$&%%*(#F<:<$*#$?EBADB=;67<;:62+&#!"$&--6@435676;98995+*05/09=--,*,,*(#&&%.2&0:;8522/1-0-;*38::;54634874121/287;87=:;=A459737<:8<> >>>9964401/,1497231)/57.1899J(Q>-,795348<5=8?A!"?DIF78H@!('%#EHB?:;6220/,43-49 1437413233.11,*+*.+&++)'+&$&03,/.,)-+2*-30-04354/2008650/*%&"#"#!& "$&$!'.11.#*() (,)&&'%'-*'+(%##"" ! &!,1,+0*$+0#$##% "+*,'$!"#! '"!!%!"" ! $! (" 0(4.+)0&%(-0(#,F/-/20.-7662343/-1110-/00*.򀄁 ~}~~}~ +~逊~}~ +̀րɀ 񂄄񀆆瀁ͿϹĿ̀ŶĿ¿헑ꐌ烅蒞ފ雛ͭŠ󀐔뤦։劀섔⠖මɮꙣϠ䕑ʬكӿꀉϼϿż߀ƹϾә䯹րɹȾŽƫ¼ғĶ񈎈α̼뎖񀅂󀁅ꃅǽҀʼ̿ű´ļȽúŰ蒎熈ž˳ކ򀏐̸̓ʾ»ȴϱ϶˶ƸȧǸ【؆񀔎ҭûöѱ€ɿºɼت˺䄈¸ğǵǼ԰ڀ㑣ɽĺŻIJɹïںԶֺ޼ȿ÷ľ9lhkgcbcl8mkgcfia^\_b^`a_fi786kjje8764ab5he_`be][___[_c`^_adgcbbdc`_\\^dbe47654dcbeicaa[W[bk65fh457;63579;9695455655565ekhcb`[Yf9;743:?<:8ieaceb`^a^XW]g779898;7eeh7:74jjhdca^^bhhgafhj96hii6;A<875577ln789::998765ghnrrsyp^zBINLLNMFC=>??;:<:775k:qqplkjhikq::pkhkjiinsnn897778:;>FHHJNLLLHKKIHGDDEEDDAA?=?BBCDCDEDEGJLEAACDDEFFGIJJKJHFEFHIECGIHHDA><<=>=<<;=?ABCDDEGGFHJLKSIIECCBCDEEB@@C??=<>?>=<<;;;=>>>?=>@A@@@=;<<:87=<=;9qppr8:<88899=pqdg99::kl9<<=>;9;<9876878;;mjl::775ee444333d``b24378e_]][^[UU[]]]ZVVXZ\ZZ\\VRRWUSSUP\ef44`[XUSTTQRRNKKNQQQTPPRRRZYba_a^[[b]UVNIQJJMONLPORVQOKHIPNLLIINMFFHLMLLMMPKIFCMTTQNOMMOOJKSWWPKIKLNJGEAACCBD?=ADDFGGDBCCEGFHG@>:959?87<=j=PNJJECAEEGFIKJJFCIJHHIHIIIQOJDHLLMNLKLOPPVVTRONMKKMQRTSPOKKLMNLMOQMMRTXRQOPQQPOPMJKNRTTTRRUSNMQRTTXZXYVVVWTOQVW]\\\]^024136213445212211.257641/[^^25421_VX?8/223023221YXVX100320/W[XW52/QJW.01PQUSX.T-0XV-//Y.WWcKUHLYxJIE>><<=41/I+B`G>+$1@9::VZ2c55NG0`;@<@`]4^[NeXHT9=SN957742:5Z1cbWP@5Qd57898889;9e<;94\22^P_25881UL151Za]RTPVYZ21cd`\\bYVTNW[SRSNGGHJFFILOOKPVW/4:3ZVWZ[V[\MR]i\PQUPAFJJGILOIJIHEFCAEHIKMNVY[`_VOQTSZ\__WUUUVS]d]ULQTSSQT[UUVY_Z]VMKOUTRWRUORVVQNSUTSORZZXTT[]ZY[a^]1^/0[W^_]\VKS\WWXZ]^d45778763a[YV]\YWY\ZZSXYZY]Yadgf5l`Z[\YWUVTSVT`d```a`_bli:;65h]XVRLLORTNQAELSWYU^``be`]\d`TPSYg8bJMTZaUY^VQVUYWVSUUTTTVPSYWTUVXVYVWUXUWZWRRMWUNEC=F;FCHJLNPPRRWQNT[ZZ]YVXYXWXSTY]bc`^igeecaacb`cZ[]\UY`s_;EHLQOGDAHMRSHHRYPNVagjk>>9;<<8>C?ALNPF\Ub`YTOX^^ZXUTSQORUXYY[\^_^bdaa`]Z[]deecfeffebbccdc`_\^ba_^aelggmpsvonqtrtvwtxtqpvyxtxpllvzxu9A==???@=8652a224;345799:<:95776786984d_455gjijiffj5654fj978;=;:u:jel98lkoh68hefhh8<87c]\b6567461/0/2244000.-,,.,--+/0333.,+/.,,..++./.,./0././211221..,,,.-/--,,/-,-)')-200.00//.+).10/131.-0-+*-120022354210/0244132123203N037568>G8,:"EB$&%%'&!4351677434234786222322204!#"#" "" !# C !!  !!#$%$$"!!!676736/13411410/,,./,+*)+)((-+*-+,-,)''*(&''").)+((&%''&''%##&&%&($$&''*)-+*+++).+)+'%)%%'('&(')+))'%%('&&%#%%"##%''&''*'$$"')(&$$%%%$##)++'"!"#%$"     ""  !!""!"7!+*&%!  !"!!#$"! #%"!"#%$#'&# #'&''%%&')(*+*)''%##$&&(('&$$%&'&&'(&$'(+'%$%&'%%'&$#$&&''$$&'%%&'((*,,-,*+,+&&'%(&$###!$%#!!" !  ""%+;$  + #"&#%"  !)!% ) #%!%*% (%('"&7$#&' %)'"!"#$&'&##&!!"!# !> ""%$%(($&( "&.+%&)&"$$$&(*&'&$! !"$&&'++,..*%'(&*,.-)(',1,(#%&&''*/**)+/+.)$#'+*'+(*'&()%#&()(&)---**.0.++-+'&(%)()'& %-*),--.1,)(&,,(''(),(+,,*+(,,.01-+-/-.,../11796667554511+)**(()+0.*&''*--,111262//41*()+22"%*-3*.1-*-,/..,-,+,+-*,0.,,-.-/,,*++,.-*(%)&" %'%(')**+,+/,*-13330.00.-.,-036653W989;86677541353-03;1")*-0/)%")*./()04,+068;8)B<1L'61862-*26742//--,./2234567687632499:9<:;::89;::97879;9879;=97<>BC>>>A@DDEEFB@@DED?B@=>EFCB"FD#C?==?ABDAA>CB@B@ABAADECEBAAB@:89=,66<=??>?@?>>>:CEHDCAAEFEDF>MGDGKJKKHHIEFHKJH%%IKL'MKHDDA?A>@EDBBCA?@B=:=??@=:;?=<=@AB@<:>?=AEDACDFIGHJ9@NV\c`]\[YV\`YPHLLHE@726KRQRMHMPSPUX]UUZX[25764X-,Z\\]042413882/./0/...,('H%FP[\XYW032040/)%'125432201.-;7>/98:89:8 41\]^146621032./0331+P+-Z[\XWRUYZZZVQQUYZXZ043dZRVa\\[Zdh[TS^h642./541TPOLFGGCEHHHIOTR]WXd3XFEKSX[\./-\[ZVUUV143-A/5E)),../23366210.-/0-**HA>@FH;08?63-$,7H&+.18>?@>42//.--4YOYTJ@;;8431/)-356759;GLJKH=;7BNOF887*:E5236700//+.77;77;B@85>8623731376:;7544665672114/022026898:51321.--/,57:>>>?>ADBCA?>>BCELE?>;88?DBCA>@?A=>6=@BK=>@=:988;:7609?8424P,/..S*+/)Q5*QD./2/++.H//++/0./346505341+11,71-*)UO+34/'KHJIGFCS++-84621001552.,&-$6AHIBF=6:<:#!/.3'21(+"*02/2/PP.1*M*,)**)*IIM+JHKKFG>9117240***IAC?9:97?5/.8>=A?@:6A<969;96.6@=8;<:81.:;;,5<54.51275/.5:65220!'02$!#-3!16<3A#a#"@:7.!&"$""),.(%'(+&###%$$&&#;5+&"!&'%')#F;<@!)%#!DE=<>>B=:?74<1'&$+*)1-78492278=;:78741)094/2/-.-.)#$#!%)/5:28<0/1*-*),4:=7?64576;;82/18!C8:9788.253/1301.1-+98362#'B?@=:1804865;.83=>"=;86=9ADC84>A6:>$%""E=::>2;B2=@?#F>8:=:?.5D=<4:>?92A=9B&*&$?C???:836461194;965482233242,,)+.+,-)+&P)+)'$)540..00+-*0**321/46421=837751,(#)(#"&#!"#&#!"%$#"&-/+,*#&''$'%!#2.&)&$#   )2*$.4) .-# !"(),-*""&$$#%%"!)#$# #! ! (#"! & $%&/-22,&)/,!()1--*,1*M.,/2232...00:4/2223/0./00-,,. ~~~}}~~~}~~ ~}}}~ހ  +倃  쀈¾邋üĽƤꄜ¿ÿ½żǼ󀈑򅄁뀐巅ؑœލ폈递͏쎏􌈎߃ʆ鑷ԉꈉǿū¾˶ƹ󀂂˶žι­䨺տɀÿծ¼ĿڐՎ󁅂؀ҷ芉󀆄肋ۃڀ瀎Ƿǰ¸؃ȽĽÿ̽섏ւͿꎃ􌆉㝬󅗑̼ͽξ̿˾ոʶǽȲͺ˾óǀŶӝùӷФ쉇ޅȽȰշů݀怆ƾõïƨºŽɸîħöށ֗󀃁lnjkigedejhjmiffc^`_bde]Z][ced8=?@7465675563ce5`Z[Z__``]]`hc`^]^^^_\Z_cdccbgh465344ebbcbb`_\_eff3478752248;9787546;:976fa]^_`\_cf45:=@C@=>:758:7gegc`]\^cf4445886jgj5575lllnp8po7:?A>=>;<;;<=>=;:974ikihhjljmsor|FIJIHEB><9nkihk;<:8>ABFAAA@?>?k?<:76idgljhfegglqroljjk7857;:<;<><:989>@BFKLLKHHIGHGCEDFEC?@@@BB?@ACEB@@AEE@>>??DIIKLKKLMLLLKHHKGGGHMKGDA?>="<=??@CDBBFJIFILNIGIHIIIFEFFDBCDCEC@?>><<:<=?@?=;<<<=><<<===??>=;97mmo8:<:987nppnkmolm8kihjm;<;9:9popo78866m799;@?:mmoooi9=;96gfgh3fccca_ac32die`\\[\WUX\^]_\[[YVW[Z8UWTRSVWYXVTSTVZ^ZXURSSSV\ZSPNPPQSVQRRJCDHUUVXWXZ[YUVVRVWTRPRUTF@A>BJLFHKLKGLQJHKOMHJLF@;j?IKNOPPLNKE?AINKHKJIIJGC>@@@BA@<<@BAEGFECBDEA?>CA;DEHLIJNKLID?ABIIGGFDKNMSNLJJMLIJLMNJKJGCDCEGIIJLMOUYVRPPQPQSSOOPQRRSSVXYURUXY\ZTNOSRQSVXUUTRUUW]1321YZ^[/2531213433562.XZ3100113223]PO`5V_01221XUU\11/33/\ZWT+50\YY[0]/21ZX`QYZ..21UW0/W.YYSWUE6l_GHC?==<:86[`373L8E=7:(L?WFG52]U8\Q85`R_b]Ta069:;:841296968:961/145983.R/56[DJR850-996=454468766411224YZ89?899e9`737`14`>:bP66570^QD1=59Z6J<=545::406.Te[RL_7>64TPPWT/>2@DXGQHT4220145RWP``NKLX`23c2:5::7633361X5hZQBKHYX]VQRMKIGNQS[_\Z^cd][_b[W]]VY\UXOB>@?=ts>???:8jn;:iokekknomjjr>=quuy{zvuurnfhyz~~|zxxxvvv|A@@?yy~D}}xpps}}xtpoqqw{{{rmppmmpuwohiimqmmmkkkihouwrnqu|}~w{~{xdbjmlkprlff{}}~JIPSRSPMLOSRQRQONOPNNLHG@<@IKMMJLRQORQTVTTUXVUXTQQQTVWYXXXWY\][XTRQMQQONMMLOOPRRPOMMLORPNMKSZWS|vxz{~u|wLQMKJoYhLQNOOLKNRXVSUTWPIHG|rskjv{nrnms?JNWgchlhee]SPKMN|xh[UONXVRLGGMT\[Z^jqvqvg_fqsxrl_VTZRY^W[]MYaWRSVZbeksA;ir{yuvsc]\[\TSTWZW[\VSWYZTPNLPQPNKPQOOQQPRY`a^OKOOOLKLSQJ\ffijhiqpqoehgfhjoplujdiifijmjnjlkfa\YTPNRU[XJILPX_UHCE[^O}wvCEQB91GV8PfjnuutwvrspolhathtmclobaahbWX]cesi`[WRNYTMJKOKPTUNIKFHORNQWUROLLN\UYWWPMONSVUQLMKKJ|vptILTT^d`TQQY[[]YVOOG{}nKCBh}|PILOOPPF>;5X^\K][RPKOSPHRNMMJJlbXX[^fd^djCLqswof`qqmg^cxy|zxqjhnhd_cfd^\djedijic^cgjaXleXXY\[bZS\pvDznlghfggdei^cpzo\^f{wqmei_ENYYVSW`^^Zgf`uC@@xmls?B:ABFILSJCGJJHCADBAEH{u_YmRMJOMHGPEC{vzx@BCB{szuoplnnll^OIFUYMWPhbMYifiir`dsqib_TVhc_`[VVTVVPSQJMNEFKQVY[[XcgYZ\bS]horggfe_ahhhfiincYZUbhiEDcaY\YWVYRG:FP]Yc^Xebecbo`SSUR`ziLVRY]qDDxuppw{qorrn`ZgAyonfffbcdh^\UTTQNYTL__[]am|plpeYcismnZib\cenx?bzvligfipojwzjmp@@@HNroqnnmkzstos|ohwuvANuzpwolimustCDDCtilnqpprn\lY\vjjpJRA;9:f8ieWIW3>>7CEJDGJ:aidf^OXT9<>@?>?;:86l:;?CHDE$f#!32122 "/-0332113248:98544""!! !  !   !"" #"!#%&#"$#!!"! 5456665456434322355531235562100/0./0.-./01.-,,)*(()+,,.,,,*(*,,*+)((*+++)&%##%(()(%$&((**'%$&&''*'''#!!!(&&((+,.-)+*),,**++)((*+# ""%'""$&%"&*&$&))%&($6 %%&%$%#%$" $%" !"#$$"  !  ! 31715869 $"%$)'##$##" !##$&%$""%%###!%'&)&&%%&&# $#$#"!""##"#%(&*+(%%&'&%(*'((&&&'''(('&(*+-,)&&(((),,)(&&'%&)%!!#"# # !! "$"" !  14&F%  $"%' #$#&)  '&&%#"#!'$ # &#! '(!$""&%##"&#! $&%$&()$#%&""%%##%!#!&#$(*)&%$$"$&!(+&$&&$$ #'+#! !###" %&%"! #&'&')+*%(*(/+))(*.1.-,*)+,,)$&&'&%(&'*))***+*&$&(())2(%%&*+('&%*,*&&++'(,.-''('%%$%($'& ,'%'*,-0/1H0.0-,/010+-/..,*+,**+'*./-/--,/115?93320154+)-,(%&(((")'#/%3'(&('i*..++.-.,-+*05,(/0/.++/1./310-.11.+++,-/-,+.+-.,,,+,,,+**&'(  #(*,*,**.13/11/.0/.0./00.-,..25567>@9:88634532*2420# '01)$)*).&%',,*.77955:998&-2A=%**343001446421//,,02336699777998765598878889989998776698987:;;;66=?@?>@CCBABDDBB@B"$#$""BC$$$"A"#D>=?CD@FEEDC@@??A@B=:9> :@CHIHFEFDA=;IKMMKIGGEEFGJM&&%$DFJMPS)LJJE?@DJIDCB@ABEHHICABC?@AHIC?>?AA@AB@??>>BGIFBEFILMTKHQW[YTTVRPPJH98=?>=@B=9:GSUUQPSMTUQJJSY-XWTUX-13331//][_2210210.00/PO0,&%!!)-/0.X.2102/2300365563112456569;85221]X/220///.0//020/./-/0/.--XUVPQY\WUQSZ_[VYXZYU[`bY]\`b]Z^_WWTX6<96c]]TLKJGFGNIHKJKQPKMSUFLQKEHFGS]X01/UR[STWZ]YW.+;+7+-../,+-04313250,**NNGBA;:AHA788:>"('/98;><;<722./0ZUWZcVPJ@83,*0/-($#&/697:CEGEJ?;>DCFD@82050IT89387.891//04;=?C&"=GJFCHG<9888224685983277731..1230-11//10./3::9-,//.+**/,)9>==?>@E@B>9;:<==A?@C>=?=:<8441-,.031*),.271(%'56,GJC=;" $.<93356971./"(E>@A=72=<:5-0=>BCC@;:?<:6899537;7699:748::5.;71223173+-9:$BA;<6746778:26C@<;:;;:<5-)%-/*1+:5)0:69:B29A?:65..:632.-//11,/,%&%$')-133991125)/6;>8868348:=;:;?832,577$'862521/1/&"'/-42194954=3../-6F:(-),/;$#=<779A@=9;981,1!;69557688;54//.-*00)783549D>;=/96/78>A#1BB99767:87C7<;==>?=1;10B779 9:861331133//,(,,--)(!(-)'#230-1.04*+-0-,,.-*..011485263476/1*('(*$!* &)*%%#&-/0-*&%&$'%"(#$$%%*(%(##%$$$"# !!%$$).,$%$$#!!#%*$&) #!#1+-`(#!   #$%%% !!" $(574,#* # "/2030&)#)+;.011420//:6116545/3300201301򀄁~ ~~ ~}~Ӏ݀ + + + 섂􀏛&ǸԀ¾ñĺ󇕤񄄋νƾ󁆉ڿ͜Юȉ㋎ɰဲíւ脂򆕤莑ʨ񋐖˽´޾¾ܻƻÒŹɀ̸úǻ̭ʾӘ勪ü΀򍂂ɿ󀅈ڀ®¯¯̀իžͲЈεƿ턏݃》≳넖޲δ̴ļǽļ镁ʼѺݹ󁄄󚟍ü˯¯ŸǻƯijŸƻŲöϯ촩ʺ톆ͼȶͺûþ¹ܮشԾøůкͭ漐雦3qgkdggkkk7lfh9:kife`adeb`^^_^a\h:9774654785658f3c_a[Z[YWYZ_aefa\XYZ[ZY_g4gb``bd44367842badd`ZU\ah5h56663356984:>=;:987ohb^[[djiag<<>@<::9:977543gda_^`cdef345567id`cdhj8:768:86799ol7::nef58=>>=>?>>?<<<>>=;:9886gejnroiffghmxHIECCBA=<;7kihlm88d>D=??><;;85m98mifgdffehjjigj6;FG;;9:::;<8?@AEIIEEDEIG@>?@@?>>@DEB?<;@=<=>==<9777:<>;:85jkllkjkhk77kiegl79889onlm88656779::><7jggh6mimn87jjhhf3ddb_6b`^bgh`ZXZWXVYYY[ZY/1`YVWVVTQSTVXVVYVSRXXTPORSQOS\ZRWSQ(MJJEGACHNPRUW\[UTU\ab]YXVTVSQSRKFHGBDHJIHLOJHGGFGHKLKD=<>?AEHJOLGIKF=9BDEC=5^`9CK>uqf9<B@ADKVTMNWTRRQSPPTWVUUVURTYWVSONMLNNPMKMONMPSSRYUROLMOUOOLJLQPUY^Y[221/X121/131\Y03210113320\Y][a[4\042/VTYZX1221]YIU/=7]-10_XU[[0/03/,-+.33XV//R/XYP>EUKCRpZYRD?<;9587>9D\kYM4SV5h<9J?;/EL_3:81.107:2UR^17<8:65/13566:95136;:4;3N95<<4ZF=U3[k6/.a.50367896Z^SNJ2-P=GF406dRX219=752=<79=<79R@T49?>=2XZe9835<:8^Z7:5URaW58@?4:;[DV4[O@AJBBESVXXZXTNKQUW\\\SPVZ\\][WVXgh]UURTVWYSQQRSTVVYW\XaTTX]_ae^56765[YZaXDPdNch643155a]MHMGNTY^aM7\_LMT\_]__f5e467jife5ij445566ab_[]ZVQTTSRUSRTVSSVTRTYXV\cea[ZVT[^ZT\7cieXSQPbND)4sPYVQQROILSVSPX`_Y]][ZcUUZ\]_^\\`^`eca`^^]_a_]UVTXWTTNGUWY\[\Z^]c7aVUODHBFGCNOVXUSVZ\^\ZTTWYYYZXZYWVTV^WVWW`jqzfgbjc_cecdi_^Sgh^W==:9;HIIMLKIRRKG@INQVZ^Z\Xafafn8;>s?xw?ABB>=@@=>CDDB<@?CCA@>;rv=?|>?>|yysm>56imm7?>ffntsnmv=wsux{|{xxq``lx{}|z}~z{z~@@A?xtrv|~ryzwqou|yux{}}|vwwyyxzvvwtsmhejo_ojknrqrvrmq}}}|uuwwv{{qnjlomrv|KMP}xkq~MPQKLNNMLLL^TRor`ezPUTZYZXXWYX\[YWYUQRUWYXYXXUUWYYXRRTUYYRRWRKNLNMLJJHOQNMxU[xwuq~{~JNOMQMJNNPRROIMUUQSTM{slixvvGpDEHKOTPMTZc^YY^WTPJwhg`[ZWNJIHILQUXee`\otnpun]`artte\XRRYTJfqhba[dmc__clrvtrxJNBVuloYX]bZSSTVYXTLKKOTVRMGGLLLKJLKHLTX]be`LSPX\VPJDT`\`mpohf_joplflkfhnsxywibfeacaa`bfaca_]\YOKRSVUPJFMSSMST[[TTS\GAEMRMF@u:K.#[lcgswtyutsrosmgkpllamkd`bij\Y`eeab]ZWTLQ^TKLX~NSWUJEUUZ[]TOLKQKcVUSUNMQQNKRKLJOXWJygyLNSXVgdWSQT[YW[TRKLKvTUT]KN{HLJMMHFB;;1Q`=a`WSPJOPzpGRPQOKGz]VQZl`chcqHJ||wpkZ^wp`]feywnkjifhif`aeeb]Xd]^nlhheb\\[U]XTVW]ZXYRqOBKEzri_gtqhjffeltwnaajppovmx^OTZ[XS]a\YWonjt<==srjmq>rswwxC~se]vmjvB{theYY_fgdtrsr9n99<8ieffjdod`a^\\Za]ZVOURMGGSSTV_^^VNPQYZZ[^ZWYYichddljlfbs;ab][QNOLGDF>DacLCQVEPTW]TWVNLRSNFFHLPR]YROIIJMPJKGFGMHLG;Q[_[eNOQSOHMGMIKNOHCAKODB=;=HC?BGUQQ\VKIIHEFHNQFBMBESZMOUDDD:CF@C@=>EO>:5<:niY`^LaXP?@GFCEF:B>35YGYc;>:589884776gegfi588:999;95676dek879:skgj995eg8<76889?=fgbffjfdcnfI25/355313133100--./...,,,.+2--./,,,+*++-/00.-,,.0-,.10-;.-,,-*)(+/0141/.,,1550250/..--0///31../11752.0O313597332469@CEF$$! 32022 5164221121476555!!  !  #%" "!!!"! ! ""."$%'&&$%#$'()&&%"  #555454422530145644H00014223231/1/01/.-,,-,-02-)(*((()('))),*))&(('()**))*)'$%'&$%&',*%('&#$!" !"$$&'*--*)*.11.++)())&%''$%&&% &')&%$##$&P#  "#&$#'! !!   "#%$"%(# #!./"* :<:$'*.8+%&&%##"!#$$#"  !""#%$##!#""  &$%'&$%%%"&.'!!""!#&,+'&,)'(')'&),,,++*''**)'$%%#%&&&%&'&$(*)(+))(&&%%"#"#$&&'&)&'!" #"%""""!"#""4!!!"!!!"!! %:-1(!$'% #!"&&$(""!%$%##' (!',$##&$%)$$&& #% %''$(%$!! '((('(&%'&&'%!!"% )'!"""$&#! $%%$(-,"!"""# $ "! " . !)),,-,)'%()**)($$),-..+((*31+'''())+'&%'''()+)*&,%&)*(''$""%,'))*)+#!%!&),.- (*#%*/1///21442122-0/..,+(++**-,-..--1/./43/268511.,00.*++,*#$#"0((<+.*(()($'+.*',00-/.-,1)+/1121/12137541/0/0330,,-0.++&",,.0-..214/'% ""$$+)--,*-12210--/0100/10/-,0521227>DI;=:>8447678/0)30*, #!!!*((*(''-/+'!(*,/1401/563576/9H%.,76921136355342/./59677546777567655774979:::8899;:6657657789;:>>:6668<@CA?==?@@!BAAD#$$$FF%#!$$"#%&''#%$&&$$# ?B"#G###FEE?725237=A@<;? >?AFJOPNLIHGFF:5@JJKJHKKIKJMJ%&%$EECEKNLDGFD@@DIE@DGHNLKGHEEFGFFHFHIFGB?;>BB@?KBCDEFDBELOMLSNSPNNTTOKIHIHHJKFC>>A@BDHS\WX.04[VKLIBGUQRQQQONOOKNWUV.120QU./.YWX9Q50<<04G./-/52657544668776772367867763367562245893461[U-0/0.-W--WWSS+0..URTPQYZWLWS[0_``]TQVPPIOTWYXY`b[YSYWX[a9A?;;9ABB@<>@CGFD8:==::898:=9;86542,+//10-*(-/0+0044...(#$*.(!,0A8;CECGDCAA?A>;=CA@:B@:89<<439<=:<8422,/71-TV08ZQIVXR.122*OL(42579V1,,-1*:2112,.././.-,/+OP,Q+/44)B9H--042=<3/.15325/.*++UNKPDV2325O),RIB'+()*&%"(450.,P*,-RPA9$,+-.*PO)PIMRE41.2>45827%(JHGC<;01A;1/41=GEB>=<:;<;6799632:35>=9977533.410004012)>,")&C>924<:7:766:=A>757HH;:8>:D4,-01/*-*&&*::7;<;568 !!$ !#$#$$G#$"##"&$A<=5)+'/(%%#$% ?@FB7A!'$D>EEEA735=:771,+#-;5,+4/)07<4382;;::985029:4/010)0&+6,0+ $+((-0113454462);@=89634696445:7024312..432, $))/076*226H>1-%*3E0&&%$#%7:!> @9@;:?:@7/6$:6;7133550-/*781)15/;9.8DOK>8@:=@=<;92?L24;9==:728A74B"A<9<<@:=>>"##=7<;:=;>;8>;ECGB?H(0.;=9D"<;87q997b`_cg]]nn;;64ee6789633ikhd`^addcc44587jifgh569978:<9678986786lgfh6;?>>?@A>;:;987545k87hhgm;=;kggfffhpxAB@<;??>>>;998887pp:pq;>?A?>===::8889pnihnkedca_aad:>=;9:<<:9:=@<:AA??ACDDDFHFA;87n789<@A?<:rrsnmm7;???BFEAFMNLJLNRNNONOPPNJKIJKIIJFEFDDGFGGDFGGHKMUVROPRNNPNOXYUSSNKJHGGGDC@BBA@A@?@>>BCAC?<;;;:;>=<=>;78:;:86668;AB=>>;8666jihj77766iklk67l579:97689899<:7779;<9o99<;7kihec32a`_^_a`]_bff^[\YZZ[__]Z17444\WTUWVVUTSTU[ZWPPROONQSROOVTTSQTYYTQL=ARTVTXVSUUYYWYSVbc[QSOIPRTSQKIFGIHFFEJIHJJKLKIGB@AFHHJIFCABEJOLIIGGHIMOHEDCDBCCEFIHJD@@@><>ADEHHE8EKIGHG;6>CB@EJIA9:69MS:6?EPYDAQKEGLKJKOYVNHFDCEGHDDDFKKKL$KLKIHIJNFINMIKPOLHE==@DFABHNQMJIKIIURQUVXZYWVSRRRQPKKKLMMNNMPQSTPNLNMKJHKMMKMPJGNQTSMLKNRVXU]2//^/0\Y`0100021./000245881/1/YRPNXT172/XS11^31[_\1[\bUT``W]011\Z27-X03ZUQ[Y`LGRNTUcgHHB=6984;7763144cUcMB`jmUF8:72/9973.77521X168;98776531887655d]bfU88`[0/2`P4=7/F<>j6\DD5614@2>8X373466138<7/^7_47`65[XAT057YMYa8759::93EQ_``X]XUUU\^]`_P=YXcc50454`\b38725312b^1Y]^335]WVORNPd__bUW[W[dcZOPLLX_XUSNIHIKVRQZ`VUUOSTMEFMNPUWZYPKFGGPK=::8>@@ABB??>@@@AAA?>=???@@A@AA@CAD:7;mk;A?qmrutv>?=CDB?BCC?ELICEAGFFPF}EzuCLG}@FECy{ECn|AJDt|xnhhbilg[QRHUmxTPUUPQYhXQO`mmhgjfdabef]Vbb_IQNWiad_OMRKUVXZW_^[aYfpflromld^cjlhfZa\mdgabg_^][[UWXPQNVX\JEDQW`ZZXY`dVpsbXKVffO>SRLKEPM]<==?utwx~CC{sromd^[VX[TTU[heVTWb\hSYpUMymmkklplkjdw{ddnpt~ylt~pCHI}|}rmcirFByqrttsuxkqxzxqxzw~CGphbfdgqopp~IGByj[gnovusxhUK_dl;9jmicdgd:;fih3giebc__aYccWa^\YOJONIPPXWVTUTTXU[_ZZZ`[c`^c_hhbbjmn=n_`WRONK?=?GUZMB@^SJNTaZWXQSSUQOJHKLVUWTPGINIVUSOOMEGVJ4c<<=??;>:78<97784684357887667:?@<748<9868765efgi444:975777ge77ifj78rq;niin::jl6i68m89=95hd_bdgadY520-030002244..-.1/0-,--/30-.-04300.3/,+*)+.010..--/0-,*./-./..-++***+++-1314000150.770./ 120/,.0/.-110/01/00*0111332223458=B 1324065337644210110u 1765223!#$! "!!"""##" !!""   !"$,-*)(((+**/.+++'%$"!!324331100//..-..-..10-,,++**++*)*(')*)*((''(,*'%%'$$$%&&%$&$$&%'*)(&&%'((**())++*+(*/0,)+($()*))%%$$''&&$'&%&'&$"!"%$$%$$""!"#$$"! "##%&#! ! ""!"!!! "&$"## ! "%%!)1"&+ (& !#"!"#+*&##" !##"!"$%%%$$$##$$&!"&%#$''%#3!!$$!"&()&%$$$%,)(('')+,--,+)'&&%$"#"#$$&&&'')*(&%$&(""'(('$$##%'&$'&#!$"""$!"!!#&$& " ! !!#!& !%03&"#!"%&$),$!!!%&!)$#+!# %$##!!$%%!&#&$&%#! %$#%%" ''$#%&&$&%"!!"!)(&("$'$'*(%  ')$#"!!%# $'#!" $%#!$#$%'()$"""!%$!!#&&*'!"!$!! $()'(()&%')**(+++)'((('$)+(,,+**)*)))*'&',)(++(&$,%((%"(&*,&%%$!"$&$*/'$%)),--,/00231/-10140..,...,-0101,(*''*+)..,++-+,-/12356730,*,--+$)#!-(,+;'Q.)'('$&*',,-023.-,-10-.154453332346941241/,/10./-,-+*,-.1//-/3441.-'*('(%(-*+)*),-.++--,,2001/036694,42:B@<1&8773668744*)0-%###((&,-&+.132((%,21533/33356465-44EC?:/::73///0211453112328768856578558899:<=;>B@@A=@<978989978879:<;<<8724;=>B<;=@?<>@@===>@AACDC"C"##$$%%$#$##$%#""##"#$%$$$%(&%45!::IKIOSPKGFGMTUNIJOP[2^[/YX[_\X./32/YROLMOROGNS14.PO24460TCAIICE>9<',+(0L)&E&+2468353/,,WTUMNJIMKMX\U@8;<;7957, ""'7>ACHB=CNLME>CEC;>8782018=A81-317868:DMH?<<=4%V9oKKF;8H;65<>=<=BCDFGC><=5686412695467:;:=93430/.-,,+0353./3;-*(,&%) *34:;@BDCBA=@B>;>?89>?=9>@CD::<;31503/*,493-TY/YMUR0OZ96,++)+4<0,.P/2,+,-*52/-10.,--/,,..SN\/Q,144J=I-+.01:;7;@;?>61?KB==8:312-*.6..0*('))5<9:;>25"""!##" #('"#!&%$*%EB$<7!(&C!$"!>=484>7:57;44333022,+(-/2%#!*/7230178->@82(0:8)% $"*!;=<DB9C"&'KGDAB=:38=%">:9=>==?7=@AA?BD?C%&J>83304;;;?EG:,%/388852130121222010/0*01(0/.-&#&&"('++*)*)(*)-/+,,4.3/.3145315669,-)'%$"!()%.)$%'2,')&'')%%"!##))*)( !$!*(%$$$ !!")%%.%#*,$###$"&$#%#"!!"! !"$%" "'!&*"%'"&$! "" "$(!#3%".(/!"" )#&../0//1/077632342/3 //-02400+  }~}}~ۀȀ~}~䀬   򅋇􁁁πꅅżĿ¹¹¼̀ûπľƿ¾䂃ԯ؀ߏ덗م݀紬苘ԍ􁏕䂉ɮꁃ쀀ÿ½ſǼȀ絣︲žǮꌡ񂌐¿߀dzúʾĽؽɿ⠉ـֵ½λ߀˲̼톅󃓏ҷ˯ͻʿκɈǓ߬󁅋ȹſ۳ԾށػĻʴǾϺ烀˷ګ悇񄕔ֆĺ˽ɔĿѾ̿ƀĸŞõ쁂żªɻνǿͽڀǻûƾȟǻݶƺƴ÷ؼǶɳǭ֕cb`]]]elge``cfk89:<9887676hbadcdc_ehcefgee`di;>@>84b^YYWW[]bjhd`^_^^XTY[Y`dead6755444343553eie\Z`f4455433g4764`26=@@DC@><9opjf_Wq]^WVUR[bf33535977886ie`YZ_```cd5<=7jf`b56667:=>=<;:;<;<<;7hie59<=??@C?<=;ni5675e45445689:8dgggmolipuu>>p9==<=<<<=<:q9989:;>AA??=?<;<::99qnidgejjecb`b`b;99::===<<:9m7@@>?CCA??AA?=;::8889;=solihi5;???@BB?BDECCGEFCFQQPOQNMMHKKJHGEEEGIHCBDBJP;NQSSZSNOQNPTSYgaUSZ\[WVPHJEACGECAA>BA<;@==<=??=:89;@GGBBDCA=976566565664355h5m8898:=<:86566789::987:?@;9::95hg4cabc452``a_YYV]__]]]\[YZZZY179:@71URTUUUWWWTQRTNINMKJJINQU^^ZXVXZYUSHEWYY\Z[YXWUWUSXSP\a]VTXVVRQVWTTQOIAAABDGKIJILIDCB@@EFHMQKKHGHMPOMOQNLNYXHEEGGFHGFFFGGECC@=>@BBDEEFC??GFIOCheo;;@BA8e7;83<<66;h`YQV7;8;91S`c9Dc6c648:4QB>;2923.11567;=AT5;98761199VI96760a53ZY058774HPR15311846<:[\YRFX^SZ[[14^\456764226c33`^5532ZTR/21764a0^Z`g4cT]fcXOOROSSIHMPRKMMNLIIMOLMFNX^UHQQS\DC@CIMKV`_FGJFCDA?@GLLMUWPVSOMRTRD;66Z]aHH?B=:s;==;t=>??CBBCDBDEGFDEEDsrwxxuzy|}xmmgnsukkovzpv}zKNNONPNJRTTRQOUTTWVXY\[Y\]\YZ_^TSTUURS[XTTUVZVOOMNMR[W_be_XQKNSQOLKLNOOMLPytlkvQRQ}|qILNINZUVOGKQ[[{CPNVU[che_Y[SF~zweggeabm~hiiddb^ahoomeh`TKMJRhxnruomuzxtfevxje_W\YXWVZWVPRWcedhkqmrxrMY`^[xjnxquv{o^VRNORTOLoUqJWMJLOSV[`^WV[Z[\[dahjgaaaXR\cadc`gpqe]bhimlr|txwqoha]TXZZZUX]caeeiolngXRSPRQMHHT]jdSWV]d\TQRRRSG@1;[DOMKOGMPSPLGGOMCScb\TOPLGNMMJCKPMJIwqilmutvFzroqo`_WUZQTTT]jSEtdaUX\afggiddb[`aglmuj]Z]]piXSWW[aergbheqm]jn]\f@@nv}Fzxier~ttqlbUW\TOPZXhsdcXETmvi<@Anj|olt=FAAEE>?BCJG?x{HCINFDFLJHF|jtALHxdBHA@B}{A|~|~vebcjh`c[UZ[bgRSTUQQUbwSS_ijfhfb_bcalbZc`_ZYU\[^g_RTQQ\UVWZ]a\ZY^jipxusmddkldb]YbWkeg`_[HWdbZXWXLOWYYdSOG_UKIP]f^RKa_bT[`eOMARQMPKPJOX49vy|BBzCD~}}zojfb`WPUU`ifYTUWO]XQUeaynmtnwlhlqtsqlbkxtC}BBABMRIGxphcm}|itstuwt|v|qkptyskiicaRmqtpjzBDA}teglpjegsxFh]cfp9nllnj_`^hdhji75gjca\\XQXaZ]^[YSNPQJNRQYXY[XTXW\\]^Xj_je]bfehggiibomb_WQTORJC?HKHPD@GPIKUfhULKN[fWZNSQLNQMLLGJMISS\\[QWD=RMUJINREFU\SPJMNOOKFJNWSNL@MJD=@JQNHORF=@EJNFFZNXaXJLFYNGFB??56AIHI8@XeZJACH6jdEB`\l9HFGNHNQQJ6;?;65:7587678jbi67677434697jfj6lljjn9<966j78;;j`bl798:999;lb\]ach00/-/.1400-,.00/+)/010./1.121//+.0.-*--/442../0/,**,*+,.,,--.++.1,+67521),/-++(,0210-**,.,+,.10-.>11/220/224885369953*64311155322231/2d542111 !"##%### !" !##&()/+))+)+-,2;6.,111-,'""5 ! 13$21/.00.-..,,)+-/..-,,* )&%'() *(''($"&$""!!%%'+*)(&')*((!)*)+)*()((+(&-/-*),**()+,*/'#$$$%&(''&(&##" "%$%'*'&$##%'%#$%%$$))! !"""#! D! !  ! $"#'"758 1 #$%&% !%&#!"$!!!!"#!!!# $#$$#%%)&%%#2 #(&"$&$!#%'()))%#$)()&''')*,,*(''%"$#"""##$$$%&'$%%#)&$%!"&%'$#$"$%'&%$&$#&%)%!"%&'=" ##(&&$""&'# "##$)+$# '#" "" *$v$#"% ' #*'$  &)%% #"##$ #$" $ "#$&$$%$# !%'&*-)"'+&""$"$# "$ """! ! !!$'#!( "& %(* #" #%$$')$('$"%$!$&*!!#%('))+('+)*,'#%$)($(''))''$')*,(&,'%%%,.)**+&+,-+&%'()++*./*,(&"'(*,(,*,-&$"'+,+0-043222/+.12354231..*,,.--**)('())*---/131477340*$+)-'&*.6+,2< &($&"%,+*+/2-)+)+..0./001}22421389202810//0/.20-/.+-/11/-/-143-*+$%&$&&'-+..-/0.,,+,+-210/20/-/178676420>E7949=6853563.+35% %($:%'&(+(-/0''*,)-23607&4,(/12'(.>A!#45002100122243269:>;25388:35<979;??>@A@A><:80776566977<8767748<>@<=>?>:;>>98758889>=@B>?C"!!!"!#$$%'(&%''%''&&'$!$)' ? ! ?"""#!BCEHMOHGRSJEDCEEC@HDEDGGGEBA@BC@ACEHJHHFGHCD@DHHJJ(*'%!#$''('M(**)()*)MMLKLC@BALTSRS\Y^^__XO\jjbb]XRQKLPSSSFCECFLMMRWTQUTQOQPH=?>CFFACEJLBGNSTJGRYVPQUTWZTY.Z10/Z/00,13211/3104679;959:98;?=5434523:8523598ZVY/.-..184:>>94/Y-.10..-../10/\0\ZUUUV^c^YWYZXXRROPQUWW_^[e`_]VSW^dc^^WU^\]aWFKQS\^_bTEAAIUZNKOXZ`2b_c53cYORWWWZRMNMKIKIGE=F+-.R*,3/0,QP*SEGQ+.1/N==&.-437;?<9594*SJHH8GSCGEBC@<BEEDHKKE;=94854236440169;9<>D@BFC%49:5OKK`IEFJPPF931T]]33451,70G/2+(+-0489:4465564<9?@<9:931699864;A@<69<;823567126:8<;>CAC<2-.-/-*''/4<8,11592.,---+ #428<:>>??A@@CE?:?;9=C:@9@AA=8793--7245...33/VOJROR,,.OS60+--++*,&*R20,,-*O784--1/--.-,*NKX6+.50QE=N/0:37@;722456/',&PURNQNTZ.--/XLLSP(,./-*&%*' (F9740-,+',++)MGJ&D)-+*R)OMHGH??<=<>>?I'OIEA@@@42*'+('%%+6#B%>891126;:8:7673667::@92244@<1-00158A9586>I;388,). 6A4!"96@648$!!%$ ""%$">@(#'(%$%('$%A8>!&$:/"# "@@D#EAED@BE=3138753.-539;.0/10/09H,/5<978432654;3042211.31392*+*+3.01235211386;A>><9:<>::6381>8:664%0552001)*,-.8),&4.)(,393-)43f6-27:+*$!!# $:>?B""=!">?@@;7522/).-287.,/1*30-1=7DKG=9>:A:68<;49B=D>CB>:=?@I?<9823(9;?>78;>:89>A'G92339:989701.412320200..*&*/-/1.-)'&'"&(&+*+-*(+*-,,-*8052/34145556068/-(%($&#!!# '!"&"$(10*$##+2(*!%%#$&%$$!!#!'$+,-&-!("'!"%& '*%%!#$$&$"#$+($##"!$"!%&  "&!)#)-( #'"! ",4)"!&52 1.2!' #%'#"J2,10/12212543,,341-,//3ˀ}}}~Հ€̀~~ 򁈜󁄅׀)S¾ý¿򇐄ǫҼʀ½ܴ䃋넅ʼݪƱ㣆󊓔񀋑쇊ڴ̶ἰĹľ՛ԭ뀅ɻ޾¼ùޢ֜Ƚ¾ӏ쏟¾äÿӀľ¿Ļ耊րŹĮķ±Ž¿ĀľƾƷ䔿¼Ӥݭ򃂂쇑􊙉Ŀمɼƾ߽̿Ʒ˺϶˾ʗ񄑔褞Ҿ»¼ʿɽɾ¾ͯľ»ŽÿǹķƻμƺŸǾªŻ·Īի|˹ꌢ䛿֒򃇆eb_a``]abb]Z]e88;8665dcddeb`a3898875g346989;@@=99?=>@>:6hh5666896455677fcddgijno:<<;77;;<<<;F<=<;;9755589<:>@>?==:8lmkmkgcc`_[\__bbacjih789998;7lhgn:=>==<><>?@??==;m=;8ki5:==<;=?=AB==EIEDCAGIILPONLJGIFGIDDDEECA@?BLQOLNTTLKMNPPSSSY[QS]cc__XONFBFGA@@>>@BCBBCCBCDCB>=>:<=@<::8989:@IKHGIGEC@?<;998765566:=;:9;:999;::99656789;;5gn?CIHHFDA>BHMSPIEEEDBEGIHEDABDDFGDDDECCCFIHHIJGIPMNPSRNOHFHLI=JCCIDCIKB>AJD@@JSRKPRRURQTSQQRROMLMLIJJIIGFHKIKMOPNLKMKMMNOMJMNQPNMKHDGKORPOPQSRSSXSKJLNTXWUV[]/14630]\Y^32]\2ZSD86c\Z\_Z`2_YXT[Y566bPMOZ320XX/Ua7T[SRUVWWYQTVJ^U_@><:79457.He665HVUGCk;2411;;9689982311737843T>485386T1IW487467<9726:76587521ZZ_ETWMK^b025535_OMR]:7328995a88832103524258<:96Y1YWHV`36530Z1656680]30__383\Xd5=B:6a\[QL[f\]^afac2314111422323`3851YNZ552cadc2g[UWY[Y__\1VGJIJLKOUW]SHGLMMT`][XGBGMGIHCCIB@?VqLDHSTPRNOVUQSTVYQSXVZY\ZWVTVYXZ_ggddcjne^XYaa]YUUVSRTRUSTVWZ\WYXVWY_b^a`YTQNLKPLKBUTSQOOOP[^[[ZZYTTSWW]_cVTW\_]f]\`ijebcbebdaW[\U]A??@?BEFIGB>:;ABDC?<vACIJE|<}uFGEHGHHDwrv?CE{sFJKDFBD}}}te`g^Zck;cxYQLNNV]XWV`WhZ\cj`]_]b^ahcb`ab`^WRV]b][YWW_YQS`^_\]_a`dnwuvllpqjc`^X]Z\]`]XVCSXc^VY/WOW[]`_UUKKJIOLVjg[UYW[TU[WIOLUeQMLKEQ^HJVe|AD@C~znhgdbVSa_ZaaYPSPUbVWgb^mlspnikljrtrjojpqx}w@@CCESYFFIJ~ukgtzy|osunxosz~z}}{vyuupmkkkdniouuqzy~{yzqnoocQjlu@Dpffhngedolfdba^d_gfhcia^b^XTWU[XYVUROPTPQMW[SX_TTWPXimn`fpngahoxzleijcdhe^ZORNIE><>;<:877J97699:988;;8668779@!AB@C"!!!##%&$#$$'))*)&#!!$#""#$#$$#B?=<?>>>?KJGFAAFGAB??;>??FE@BGMQMOT[1/ZZ1//.\__0//0/.///3221211.0267236683:9:>@A@950432468K423+L.2227723=?>=930010101/,Y[.^0121^Y[]ZZYW]][WVVYWVVXTYYWTUXX`cXOVZW`b`a^bb`a3b]NQUVZ[_5XFBAJV\RSYX],168=;;950.-UXTROKHEEGGIEDD)-.21100341368<<=:58<;752227BC;853/UME<88>@59<9636HBGDBFCAAE>;:=745.%$-@IEBC;>JD=>>?A?BC>C<9;4098956>CFDE=@C<:?72:7/2=:GEF>?>7221,/4161.0/*/64321..0111/43689:9;;BHEED?@CEF>=759<:75599;BDGCBB?<;8788546477>=9;::=@>4,/950---78;>649696/1120% %"91:::;>;@BBBDE?@?:70,.0,,,.//-*)PIM)/)28SMA?P,7>4=>67234:? #O.4XIHJS-43-VWPM)()**(B',&$&(1:61,++)'+--,OJIMIB&.)(NNMJHGNB>;92;'DEFCA<79;5/,&"#)25 E$>455477;;87:;848@:;@D7348;921;51848841:ACD7*..,((8#""B>(E><=>BFEA>983320*-134:/,"$:;"?<9:89%$$$# =!!$'$@B=&%$&%$%#B><> "$>9"%'"$!A$CCBBFC??A<3/51/353B3.*+*2532273>247:2243512644356551,03530//043.0844123425;B@@;>AB>98725345631/#,,66/11,01154-0'(((,',:73/012--2.')$'.#! "&/>!# "!""EB@95554/,55/230+.+,701<94>=>><66EG74:<>8<:=?@JCDLH" !#$.4'%))IFB>:5:@EEBDEB?BAA?<9975;9;@A>CCD@=@<;<<8,<<@$&E;546;553874311.1/42303/.3/,*+(,+,**)(&(%'#*,&(0((+(*666/0875/38?@8c]\WVWZX[]W\_a``b_cj80b4]VfaZZc3478768:8iifj5kk9=BE?:764568<<;9??BD@=<@:mlb]WRRZ^bh_f;9;:<;=::9feefhifgh44567j67h4heaehh688877j58==;mhgino:;:89775fcc8jjm>B=9mgeccdcbaa^a]ZYZ[]^aej7:;;7miikkijjonkm9:;=>@CCA?>/?BDDDCBBA=:8777:99<>?@?>@GLID?;B>><7778:<@FFDDEFCDCCA==;:987889=@;89889;8688868;<><;:kjp;CF@;886897753f45434432489h`afea\[[_ZVUUZa37:7e[ZVPQOORQP[YRRTUVUVXTSPSUUWUTTU[\[[26_\be^[`c_X[_`^Y_ab[YUW[UJKGINMIHFDGHD@<;@FHJLJGFHHDDEC@>DHJKLJIIHD<8>BESSRNNNMKMNPNQROOPNNKKLJKIFDHKNPMLKMNPQQONNNLMMNPMKNHDENRPQONNRQOOUTKVKIRXUUQSQTVX]]X]1]Y02/[WYQH851]^ZPOLR[^f_bWV[]cgab2531\Ua332_WWQPLX1[Z][JT.]C=;9699425YR3643\WSH2E9;:99;:81X4Y0517745842L<7:94<=741a^44399:4326956457586=AL[]UcX52/47831]O_e7:7659:=85778545635763344856:<84142]\3562L40_25a`3524433hfbba`34577589hik8:6d6WN3765632c^[cf4eae4651b^a11`00``22a]`iaZY[[PFIR]]SKNLNJFLOQSX^cfR@=FHHGJ?8?J@93<=@>HFH9>?9;AKU[Y[SOUY^ZTRJJNNMT^]YQNSTW[]WVZ]ba_5784^g``44c34if663142^_13__`^a^XWQSZRNLJNYROLQY[aXU]fc[]fjqaWUX[YYYVOMHGHIGINUVURPVUPSYWX\\_`\Y^aaacf34557664g68754i\[___^dhgffjTamTHGCDEMRUWSKNXbXRQMLMLK>:9CtOUPFMRUSWRTVQPNRQMVYQRXZ\]YSRWZVYaigbc_^XQWSYUOTRPPSVWSOOPPNQX]\_aRY`bg^fcZXZZRPOL4QKQVTUWVRVYYZ[[ZWTSY]cYZ[WTWlbWX[`Ub_dcbke`_PTYLT<6bl;mi:?D>;FJ5AHGBIJKIAKQVSOPNRTVTXcV]VS?HJHGDILNQSSUUWUVZ^`^\dhifkhikmnmmpnpgaaccbcgqnhjibbbca^`cb_acdgebb_\\^_eoxsibjkkiigfiiijhddijmmmwvtsxwvrovvrpuustsvsx}v>FIHA=xx<<;tu;=?@=wttq>@w|AA{upkiklnnkimsnilifmtrqrqlmqlu|wxyrfdgjuusDEEDAty@?BDCDEDGHFDGHGF}CDEILOWZXVvqwxx{tojpqqkhmifppoq~}cpNRZ^ZWUOOMKLPRNMMMLKKKNOOKLOMLMNPRSNMMRSRQRX`Z[[]VUXVTSUC>QVYZYZZZY[_\YUQSVUURRTSM{}RRQO{zJqgxPRRRKMMRZ]]XWQOMO~{zuyuv}KRUXZX\[Z^`^^_\]]]bi`_]VPIK[`\UIHytjaXZgqkiokloz~ye[`atmgd_]_Xd`fhdRJ[qvjc__rteefgwhkvgdkfdjdaocZ^oqmbfqd]ajhhhb^\]`fe]ffb^YTPKJINTURPRUV]^crjaXSU\ZYSYZ\df_]^ctkhoqfa``_[_WV_`[]\\iiertponib_cea^dgdbefgig``Ya\UURMen]X\[dpolf\VMZ`bcZSRI>K6E?GJ\GOWhjaalnpsz|rvmglghucglhooqdSV\b^]QPQNWPz|l}LQGHHKGGIMMJJONIHJJXSTQNQJPQMRRTIMDHFVZyuJQWQce^\YX\`8WbiU\\VM|ryZm[LJIJLTHBKWcaWSMLNJHNRQ~~~yvJSLM}~tpnrJvrmkecikbWVUG@LVX`lhqKL|d_[`lojnofmzgdhffmiribba_Y^lyicd\e]__bilrkY_^Z[QdNRIvz|wuz}ozFxqe_]\^\Zaff^YeiYYl=@Eposyply@IRH>x<>q@DGPHFEqfHAADIFB?v{}xuGNFCEC|Cxwxrcaec__SMJVRNP`bYXVNOXW`ebd_^acie__a\ej__[[]][]deZVVRV]chaa^dbcgcf{vstmgf\WXX[WY[XTXVRSbXLOUSQWb_URdXMQNUNI^li^YZZQTYRRLMV^NEIDGSVZAMZl>CEDFDDFuhih``ZcZ`f[]\YRJWZZP^Q]UZjnghfQJ}tnulksurtkqvBEJIINO}JHE{layBFy}wpwtgru{xuwrorkilnrmjowwjrjpskbMY`u?B}qoo@d^]a\bdjtf`b^U^eg\X_ZVYWUZXYTXSNSPS]IRWTSWTTUQUj==oruinfeksscd`^eog`_WJQGG<DRTILNJA:CJJLJFDKKKJUMMUWYYTPE7;AEF::HTUDB@>M9:a`V]f=DMG?MFFEAHD3?=[DJT789;<=<;<=84468:7778789?CA@<<7457:988777:<9hd45g8754567896kkjno;;;<:569697hjn8bcdg8=7jc`didca:02.384//-+,*,,.01000.+./-,*+01-..--+*],,*-121/1.00()$./)%)/01221 44/,*)&*-03.1 C" 0/1/010//23320342031/033-.,/002/../..-0/-+,,//./00134353/1 c!#  ! !!#*,)')++,.42//+,3@@:82-($ $!#! 102 23/0340--.0,)'&&'*(*)''&%)(',+(((*+(()'&&&'((%%&(('(',)*-+,,-,(,///,-,,*)'(,*%&$%'(&%%$&'%$!"%'((&%%%&$#$# $%&$%(&#%&#"!"#!  "##""!##!""! #%###"!#&%!&#8! #$())%!! !"#$"$%$! "" !"$#!!"B$#""#%($!$(,*&&%!!"##%!#!"#" $#*(&#%$$$&&''('%%%$$#$$"" "$$%,&&(**'&&'%%%''&$&# '(&(&&'*)'''#'""',*)')('(%(%!#!##%#  %%*$& "#$%&&# $$"$ !!###&#""  "$#)&($+#&&&'%&%%))**))(*+&! &$%'('(+'%%'(',(*/(%%&&!!$((##!!"%%%&'()  !    #'++-($&)*'##!!#$#&,-+'&(()+,)),-/-,*2-*(-*)****&(&$&##)%$##&*#"#&+,/**.22-/6691+++./-++*&$#"$$"%'+*+((,+(),++-.00-,/10112l35./21/-033201"+3*&&$##)+-.+')/4,**&%&&($(/(<(*("&')'*'(*(((+*'-.*+///1/+*.0-/488443/+(-,/-(-+*)+-.*()*Z.0126,14484970/01,**(.'*.-.00-./0010/.,*-/3*,.--/<5/027/74867;611'+.(/"9?#?< #&")+#'&#'#(,.,)*(*,.,/5+1.*#(*)(&*+,.../131346767;==;><=>?@?@C@A;89<;:;;;<><;;:==>><99>?@?@GFDCGGFA?DDA@GIEDDECGLF%)+*#"DD##!BB!"#$"C@?= "BG'&GD@>>?@@@?=@B?=>>=DPGJ,03565653577676576;>7873/+-8:62--UNGF@935>D@AD@@CNRNA<@CNHE?::62:8:=8+&3@A;959FG?@>CM?DJ??B>+=@98@739CCA:>G@<<:569;@>8@@@>83.--,/Z342344:D=93/1642/439<<756;F=:7;958=>:9<>>>=864;6441,>>5364:@>>;52*26763.-&#&$-1<<77>>>@FIAE>;>:@=CCD=2L36856//.-4/PIFH?J[V+/())+)*+--*P*NONG.,)++,70//--)-.+..1*-PN&(&O46NEBNT,160=;530158*;3883-B;DY7F7+Q*MP)MO+QH)-'#'/750/+++(J',0.ZGGNFB='-(+RGMLKLMHB?=>D'G@@==86893+)&#%$*218')C4324;>:<<6:C98:87:7>84333/4=E9562822/38796*+)%$+(+%E>DGA=>A:@&HB=754320.3662.11(+8 !%;;?C:49$*$ ?!:!#$*'$$94'#"$&"! BCDE<>A?:?$)#"#A"DABC$E>@@>>>9002104/*(3.*+79433-+0/476742458523627;5633431/792./-048;431547859FBAB><;521030221.10,+4-'+.-+073--81)++0*&3;<5122)-0,/(%'*" "!#!&2"#"#"#%D<68713071491211-(/12*7-40289785G+)D=6@:8=A>MA9?BG$$&''**FJ)(H$CC@80A$D%=?@=?@JFGHGFEBEA=>868;>;9<@@6;8:;96*13A"$D<:;B$5111-025<4030*.35,*0,(,*(,,-),)(*&&0"'**)***)&(459949427;B>320.181++)!(#" /(!)&!%-3-''(''$"'%*12'$"")%#$"$+$$%+!%)"#))$ !*'-*$" #'&$ +0(&'"##!""#="""!!#!&'*)%% !(*" $10)-1 %#%!!$( !#W! !1.-11125126/-/.2.-/2.0/ + ̀~}}~Ӏ + 倃´΀²ۑ˻϶üƼͺȒخꉊ򉓏҆򃐗Ⱥοÿ쀇ƹ܀ŵžȾüԨǼɻրºĿ΀ǻŀþøŽ끇ˇ􃔐ǀĽӾæĺºÑɽⓚՀ٦󂖟ǺdzѶƲܽ²ŵތ˺Ҁ뇓Ͼʹ˿ý²úþμɀܷ‘¿Ʈþ〄ʵƼ˼ɼ遀ʶÿ˰ʺȳðIJͰ΢Թ뛜򎓚cfb`hod_e^YXV_g569>::86em8=:>85ighfbbaa_\YY[[a77989;75fdb_`b[YXZZ\_a^]]cd`ce686Zm8db33ccch556555ddi965;=:6fdee8@A:9;86;;9;<9gigZXXX``cm9:9658864eeed34567879:95677757;C;898>CDC>:8==:89888<=<;;73g653effd``f6577558757865865h69988767886jcbeim9<;9:9788hiefgo;=:liihe`a^]\]]][Y]dd`iso89=<9mhhhfggffgl89;::765l6678:;>@?ACEBACID9AEDBCDEDCFGFB=:88678<=BFGLPQQOMNNMOTY\]]WUYdgcfcZTMOOKHECCDB>@BB>>?@?@@?>;;;<<=<:;==: +9;=@DEDBBDC@==<;:98987ihii69789:<;;<<><:869:9;DFB?:68:88756311124332g66313fc`_][ZZVUV]ddcb_SPKOTQRTTUWRMUUTRPSVVUTWTRSUTSTVUT[`5PIQ`]UZXUVXZXQS_ad`_XY[WQMDFHLQRPNJFCCDDFFGGJHHGFGIJKJIFDDFGLKMONNRSY_UNGCBCCEGGILMJFC>;:7@HJJEFNFC>9BEF@??A>BDDF:e@EEFMONOPNRY\TPNGBACBBCCEGHGF IJJHIGHHHJIGJKNICCFKJFHIEHKF>BFGYPMNPUKA9?;>MTTIHBCHJJLMMLJLNPQOOHFJKGEGINRSOKHIMORROMOONMKLNPKGHJQQORSPOQRQQPSU\PSQXWXSPRTSTSRSVXWZZ1]Y[_1201013aZUQNYa4_d]XIK`]14641\\_^432[XR]]_34443cXJMT4;<6/25517737652bc[\8D<877559:3/`^c1ZN8:85363g7;<99983a2Y^24:6798665321357:9YDP%WV\YZ763^1351_IU_4;67686;843555666449753[U6::7355]M7645543`15`b14313ba23^acgcaeZXc69<846::88758872274_Y[[Y^][YZ[abdecb22c_\XUa^ZUTOOHGMLNSWYZRKHHMRRQQQUQJPRRVRKIC?@??;7><=?;39?F;?B6?IHFGKNOFLRVYRQMWVTSKZOH;8:?DKMMOOMLPQRRVUXU_b^_`de`bggijmmolklmhba]]`_]cfiijfb`^^`ba``bdedba`ce`\_hxyonllmkifhlnlkklpstrqnoponsrupjjtspnmmotvvy}woz~AE@@=;=;ttwwx>@?@A?AA@CB}}AAyuttqnkjhggkid_imomkfipstusrrvrqwz~EGEDEyw{}AGKKKLMHECCDGNJEMOPQQTVUX[\XWVTRSSPRJuqqojgfiikorpsllkozspy{|HMPOOMJNPMMNMMIOQQOOPPONLIMRWVSMPMGMUVVU\^[XZUT[XWWYWSHAZFQ^a^[[ZXTPRUYZ[[\[WTTPNOPONOL}uos}zquzmgjwMLSPRQNGzRXZROKzvnmq~LXTVUUUW[ZYXW[ada^_XUQV]WVPMNOL}zvqkqqrmqrsp_ackpurkdktsjecbi`Y_]bf^a_ff]VYRbuqkoypmg`gfwrndafdfg^UZXfcVV\\cfaelmrtnbYUYZVOSQQQKSVWUTVSP_`diobXUV]aac_a]iqid_c`^\W]f`YYZUUVXZ\^^_[`iilyxvqjc^]d`bbb^^cca`b`ZU^ha[PFOZVVVY\`__XQQORch_USSIvKEEQ7DC>HM^i]Ufonrvvpninltpp`lchilaO~Y\fe[ZMOOSQLyoKMZMLx|~EHHKSMMJSLFXKUQMQNMLQPQMMHJMTcv}KSPYdf]\UZ_^tLLVic[VP^N[dOJKRJDNU]WK<6;GGHHLTQ}zQVMLrrwsmt~{tmc`aidefY]`P=HX[Yb_k@j\X^dgelpmtydadhddktrnjf\]imkf\]]cad``\\]\WWRWXQ=PNEy}}y~zu|Gvumgh]_dcgiefhha`ekrAGvq{yg\uILIAtmmqt@EIKNuwF}?BHE}?xhmwssDJH@ACBA}D}D{ofhkf`edZS\TGGHc^XQNKUXS^i\^_dec^]U]adh^_a\W\`Q^]U^ZX[c^eaadeha^\huzrorkaXSRUW[XRSUYWMK_]PSLXYUZVIPV]SLQVUVZl|`Y__SRUNRLHSYXP7?KRMX^[W[h8=EKG:AH@EI@^MTdEB8?nGC47E@@A7;d2G[bX468;=>?;;<73467887458:CJE>88655;==:97:;:;9985faef6:59965588898ji8:6887677677jgp9fgbfkjhidccabbZ030/58302-++(+./132220//00-*++*/0/.-//++*+,/220/.02.+,)0-+,.-0>1/0,..-023-+*)+-05../-1/000-+-02.-/230/---221000...---./-,-12/374253200223101 !""! 1R  !$')+*()((*-/111/-/8;9;92.*)'#!C!! 1121 221//..-,)('()('''$%$%)''))),)%)'''%'**)()(''&&%&&&%(*%"%,)%((''(**''+,,+,)*,*('##$',,*)(&%$$$%%%$&%&&$%&&''%#""$$&%&'P%$&')/($" ! !"!#$$" $%$! &# "$%!"! "5!$"$''%$$#%(*&%%! ! !!"###"#8$##$###!"##$%%""$#!#$!#%# !,&$&%*&  ')(## "$"$%%#&&$%"!#"! !"$&(&%##&'**'&('&%%%&'%"#%))&''%&))()('&($('++,)())'((''((&&$&%&&%#! $'#%#"&$"#&%"#!&$$%!+D&& "&#'%)$#% #"$& #"&"$"!%2'&'''+,,-**,'&+%%&%$&%3'+**+*,)&%"!)(&$#!! !$$#$$"" "#"""#%$ !$"d! %"#&($"$%"#$%%%'+++**(()(''&'%%)++---*-0/..0,,.,,-#+*'),+),,+(('&&*+**(#"',-*-/144+')-.,.0/--0/($#&)()'**+*+,-+,./(+/.(+,+)+-/0332267-3-0120/++),-,&,+*--)**++*+*%&)*+)%$'&!3%'F8**&-%)+(&(+-/+(+-.-,-)/2-.00/52244*/010,-)),230102/,/.+*,**((*-31201///21-+--+,.,,-00-+,-/0--.-.1/.2-)014600/.3;?:2576<.27728..()*0-2<==7:$$)!"$#)' $$'*+&)+,.+*&-&0*( $'+...-++..-.22307:778;:78<=>>@@A@?A@>::879978:;;;765568986678::9769;957?>>ABDFFBCBBAEEFA=>DDBAAACFFFHMHCJK&(%%#"#"CCDDC"$$%$###$''JJ&&JHECBA?>>:;<==;8=ABA?<>CFEFBA@BAAGGINPLK(*)'(JEEJI&+/./00+(('()-+&-.0125768==:::76663d5b^b[WUWTSRSZ.SQQSRNHDDCAAADBBDFDFA@@BHLOKDCHIILN-/1..-,W/1/00..+/11/01100.-/1433.10+R177769864644975363/& '$-8;:75443225667898400//`]^__12/02].WUQY_`^YXZZTQVU[Z_b^\WLIKP^bb`^WSQRVZYZNECJNKDIMD=INQ-5111345744238=?;992/,2:640..0.ZRLJHD@DDEBHPEHC569@DIGEADJIFB@@@5068=<455:70,/)7FECFVRJEC>=A?IDB;;<:779778867;::;;82.6<97.(.31114687740///9;6/..'8%" '(,5<41;?>@BIDAA>C<1J98><45,.-10,MKSGCT,-5,+NEHONJ(*)*2R-.*.+'NKP5+1.,.,+*-,--U-KO((J-2S6ENH,305<;44/3558(,X4B=74.K1O-7=-NP)OURJTNO'+&$+.1-%&&('*1/\UFNLCFE,0))NKNKNDH@ADB>BFKA@>956:556,..$$%&,*2 EH81.3699<=;?B779;76;@=:7601:>=8/1363.,+*&% #!()$DECDC@A?>A&E??;8:31436744750058=#'>;CC5-9%&%!>;9:!%"=B;FK68?<:$'%!""A!!?CE$D="DBDA:45640682.4-%'%962-+'+,(1812135411+14783463/35+41-41/1628435784329CG@>@=72.,,/31-.030)(41).(00.0.'*05.(-0013>G5264+-/,.)$''($ #$'&#'/%$##$E@;B>41057,348977/'20-)0463.4405CID$(;:C;95:HN+J<98G'/2'A8H?8@FJ(('GBJ@=>76<#%)IIFF@D@GG<6ABGE@==C==::4=A!&/-561.3660381),.-./-(.0*+0,/,*(&)''+%'*)*''-/-+046459:673657!582.-440,*%($" &%"'""$&5/0+'%*$%.*#).)'&!)-)"++*$" %"#'+&""$ )'"e!,&$##&%'"*!#!"! ! #"!! #$'$'%$##&#$ ## +%). #  -!*) J$!.+/.2100521.033340//-00 +瀂Ҁ~}}Ѐ  + 󆎇낉ǔĽøƭ ȿ󃄟ЭúÿſĹĺѝˁႏꎠГ‚󅄌فپȿܧ¾ʺȾꕈހɷĽÿǾ檮华ĺϹƻȼн½ľ⃃ĿʾƷĶʶ떧ȴĺοźʿ¾ς놌䀊߂烝ȿƾµƾָʹ򀃔―􄀋ɺʾǾŹϿп¬½ټʱϵʵǼ²˺ꆏؾ¾ƷɾѼǼùȽѪ±Ȼo끌aad`gpmilfUZ\\l64496e:658;976ihifdbbc`_^\V\ff6:5edffecbdijd_\^ac`[YW]eaXRYf797a_he22ebaggf577laamkf6;><:9::7553b369<==88:87887h5jghf_[]`clim8f`bdfgda]XXF[`37:9966765347:7754247hf459;:8::88gh689p96eg4fe3d244d`a597764334c366787789:998:88864dbg65jef57986556gfennkn6ifb^\ZY[ZZ\^`a``]_]]\`debdfdflkgiiij9;=>ACHEBBCKPIECCCFGFB>:7jl8778;=<=@C@A>=AED>8DFD@EED@<>?@?><<<;:::@A?>AB@ABACCBCBBA@?:7:><;9756k::;<;;:9<<;98:;9l9?@?:7;@:n8663d3dc2233dah5e2dceba^[ZYUQSbfc_\WWSUWX]]]^USQVTRRRTSRTSRPRPRQQUYYUUT\W?EUXY`\RQOTXZ[[]VW]\XRPOJLSUQMOMJMLJJIHLLEGECFJNMOOIIJJHGHEGFKUSIMOLIJLMKKJHFGIIIGFCBBIU[ZQIGIK>=lwGAcl87BEGEql9;AEDDKNPQUY\WJSQLHDEGGEC?@EGLKLJGFEGHHFDGHIJGBGGCFDC<<=?CCF?KICH=AIOSRQRUVSSRWYOGFPTRSPOQNMNPPKG@FMLKIJKKMNMLJMNMMJIILLNLJKKMKIJNRSTVTKHIJHFKJJJLLIGKNQRUULKPOQPUZWZ\0110121^TRY4323323377532W]\^b_1510aVOc475676529f@H::6200ZD088741QWcK]5C<856766741^N.82M2=71/84^08=:98892`^bb;7^L:6-30^IG54_365bge64TW;6001/653ca]426bUM/<843434756345688753]b23550_db37542336eb42321^]b2365ZYYYUWVTTXi9>;]Z\35ea]dd152X\\_bcd45558WOLMQRPOKQSUXa4fVRTVUU^babdgcSIBHJNT\if[UPKQVZWYVJB=;DMGQPPRRNSHZO4CS9HILGEEJLNOQSRQNR]aaa__]WUPPNPNSX^`afgbb33c_a\XZ]bek5334331dc`_a24353d_]\YUUX[baad`83[ZRUPLPTXZ^]XSUUUVSPROLNRXXSMOJMQVZXWTY^f^_SS[\]db[]^[\]_`]`acecaadci4f][\\[WWSTTQRSRSTVVVWVUW\ZYTKGMLTOOT^[8$;@]ZQRK8IKU^_QTUUYXUYXUV[a`eifc_c`cdliga^adb^`eaYZWY\[[[]`_XUTZZ]Z][`\UUMFKPVUSTVXUSZWUVURSTWVVZXXXTSYYWb]W\YXmj[ZSSXkj`daZddcglkkbX\WTW]DKHEF>?@ELLEIJKRVYX[ZZWUQNDG@B8?B@;>BFIKJJLSXW]^^\^_^\ahkigkoqnpmomhhgkf_ZZ\\]\_aedcf^SQ\gheaaabb_^achpgblxwmlolnhhid`eeffeksurqrpnkknqqprrnrtrkjnorqrtssz{u@Bur==x=yvwvw=>A>zzx{|{vzzutzxxysowxvqopnka\enne\QU_mpnsyurv|yEBCCDGJFHHHGHHJNQRSTTTRQNJHTZ[\Z[[XVWUUROPSPyohdeje_UPakpnt}mdhstvtrqptqJNPQOQNNQPNONMLLKMOOMMJSPMQTXWZ[TOOPPKPPSQLDCDJX][[XYYXSONQRTUX]YTSPLPOOONNJIQL}}|zneisxkjmllijzNIPJw|OMMV^[R~vpebak}OU\VQPOOPTSSV]cbca`[YVSVYKGD}{tnqkimrplkpwpjomhjoiimtzkgnkh^_c_TL\[`__YP`\WKG@aujbcpnflijyuplkbcfea[WWXZ]bSPTTSbehdjljmdaSMMLKOONQYb`bb^UR]np{dXSZXV^`cbjljfecac_X\da\_[UVQNOST[YTVVTY^fwvlrlj^]_acfc]S[bc_[\SRUZ_a[PHEvXXPRQVVRDCP]gdbWNMORHON[bLAAtWTb`P[kporqtiwxqrsqrhjo`b\ZKWidaQ_[LJSQLmvMLTXJs|sLMRVPTKHHJPTPRUMFVULMHKHZKmi~MRRajXSOVfkpmlaTjndU_OKZ[YLKJMJMSDOXd`8aeYID?=qk_oC@EJLODnvFICA}o|F~v}|MEDBCB~zEJMKDACyonpklec]aSNMKNCF[]NJMVRLRRRV`]X\^_ZN^or^\_YV]^YRKXibfZc^_fechbUfkpohfpwaVOQUW`YPQTURQMaaVUSL^^UVVNQ\MI^fV]\`hn\Z_WTKQSJILRVEIGNNBS[`UTVd:DJG~xDLyececgXcf]`cr[KgbQEO^cZ^haVm}svmxcdZwD}wkuPTFr@xw{zFrqtCGPXNNSuzshpswGw~viakfryqqzDDFxxuqkjwwnZaifmrem{isqQZghhjci`Yek]Z_X\eg_SY`[WZXWVTSTQRRSQPORUNHUennpa[cfq=gbilifqdhifghclki]SINJB@BCFD@>CERTU^\]\edYNRW[VWXVTQLOgfP?ENYKMG>GI@ACPSROJEYNSMIDWSTTROMVNIFD]AAELJGFD@?DEIIKQHDBFAB>?LQYWPRHB>;;ZbR8Qc244567:?A?::;63347:6757;:>;96C6557:=><:98<;8868:7efed766:98::268678i786664i54fhlidhk9neddeifbcbfe.03/276453(*+*2001100/.//.-,),100/0//.,,00.-,/141.,,.2/*&'..*-*0.-.005//43/-#21022.+,/04343/-.110.+)*+,/..//6000/-0/,/Y-.0/./.-,1213310-,**+,-/00/01././-,.0.110133100/2!"$"  "##!22p !"&)+,+)*+*+..,,-,/24552/++)))*%"#!  02/.-003/00123/-,+*%%,+'%%$'&)+,-...)'&*(&&%''&'((&'&%%%'((&&%++" &((,)&&%&&$(+*()-)),,+)((&',/+(*)(+(%'&%''#%$!$&'(()&&'&#"$$%$&+*$&&##%''%$%$"##""#! #*,,)%"#%5:&!4<  !""8:#""'%$#&(*)"()%" !$$##!!"$"$$"""##U#" "#$%"!"  !$ &&!$!&*)))+-+*(()&! '+'(&%'&$$&%# !%$$#"##""#$#%%%&$##&%%%#$#$'*++*($!###!%$##%%#!$%()+)##('2%$$$&'%&&#! !!$#"%$(#''""&"$#%&(&"%"'(( $''#'!%+&''*'%#&(*((&'((&'-#$'**'*)!$$')()&%#$$%$"!$%&*,$#$'&'*++*,.,# !"$$%-*&$""$'&(& ! !!"$ $#++ )""#! !###&&%$"#$$'-/.2+''%'%&%(-00.13000-/,*-.//3///--,+,,)*--+.**+'*(&(*,,/-*(++(*)'(&%&)+*)&(&'*+.-,*,1621))../2/,--*++*,+.0042345453-,---,-++,+,,*+-/..--+-0/-*%"%")%&&+- (#0)(($%%*)//')++-,+00.-1528<9868456:7531342//21-/--/02-,,111/1/10,,'#'+0.,-,--)./..,)*+,,-1/..--31071.0//;:11-,.::59616435864.&*'&(," (9;<1"!!)'%& !!$))$&'&+,--111/.*)$$ ##%$!!%')%)((+000666588747:==;>AA?C@B@>>=?;85467988;4-,4:<:765687678=C<8>GC;<@?@<;;87::<::>ADDCDCA??@BBACB@EGD??BADBCDEEJIE%&?@""D"DCCBC#$%#FFEHHGDHFCCGDEFB@EEEDBAA=86;AB;92/6A!DBDFJJBBDJLJGIO+)(((,/,+--+,,-0442[1/+)*1779:;;979896fe43\b51\WWV\YZSLKPVTTMJFA:;?<:54?CC@DIL=8>HDDDCDCFDNYVPRUXU/112120/00.//.---/0/.X/,2212465761--//,X0_^01/,&%&*5;9864662//22125950/1/_`ff3`/..//,VSR-2bZWMW[YY/a\ZW[b^YOTZ_]a[[ZVJKOQLKH?=@HI@ACBE?:4^WQJE?6318HRR.14200/0.2114:<=><9631024,)(PHGCBE@>CECACEFKA@DA>?@=@BHJ@@FED<=><0)238872)5/+#!;HC>>FD?CA@KKJCB:865668811327@??=2110.20-.4<;=<:1R4:=DI8105336588BBA=<;9:525:9275220..0175221/158GC@C?>679;:;84.59=;:7//.0583.'$<31/0/11-%&/7<:80+*,/'+(/4$82.76,5>@?A?A;DEADGEE@AE9:57T07D<9-65+*0/+PKPM>D.+24L)ICMKICR+*.3O/1+('HMLK*.0-.0*'20*,)RQM+&IU8,=;XGP.209=1-,2=?@>=72FF>3;-L-674++(*NPLHPPG)*-!*182)+%%%K'01YYOJOJJD;$2,)(LPQPE=LNA9BDC>??>9;:155216/),/) &+5;C>42./369>>7=A77?><::@@>;:88=6465202/0.+)09,!& %'%''HGCCI?;@!D@<@7448<77357?969<98=$B<;;;8&#! <8/9" $(+,%IGD@48#%! A?8A&D?BE@*%$""!@A>A"&((# #EB@;:;795527-**)+"&34(&')&#')*+1.+022/'2<=0/2/-243-%09480524876:6.:<@?99>AF3.*,-/41,,//.,+63-.-)44.0.*.5)'9$+?23528.79237?5'54*$*373271*9DE=>@B&=<>$GCHJH(+0)),B:@>7==@%?FB;5<9??:9?A##%EBA?;67@@;0397=@7='-3555371+47-+/+.24/),-,*+++**),*)(*('&'+'!*2679/,1482/3963:236322+342-)#&%""#  ")((-*,*.-+%&(+)*()'$##13%%-"#!"%%'&$",$(# '(&%##!(#!, "! ! !"&##&-*&&!"## !&")2!#.36.+1#",0&#*C./../31022/1470/1242/..11 ŀ~}΀  +Ԁˀ 򇏐ʭ섐 ̸½֜ɾȼ݇䲗ˀ½ºſо큊炀»þļʸɬ̵¿º󃃄ƽȲҮǻǿž،͵¹ʿֿ˽ľƼĺǾœ݀򁁀Ǿ݁ח½ĽҼغ埦¸ĿǼ􋜢င݂鏘θׁٿ¸ĿǸζä򀃐醐򂅙ĻʹּïѵꥹŹIJŴ؀¶Ĺ셄ſūɶ숈넅⇃ľβـʰڽűƾѾļˬ顡к􎝝К򀮽؆ԗÃmaacd`aikkjcYVX]khgi5kjdff65iffi55igdefdfdbb`Y[^b`j9kgk65gcf9744gfgea[XYZae_[TRT]dcegefffiidabcfggeeech5898<965b46gg4;=6435976556gfhkhabdedeggc`_ccegec`[YVa58963275558>>;86533ea`_af478;<:8gegllfgcacg4523422544545556578778789975567788766774e596975435655575im9ohkjggihhfa^][[]^_dieccfdbdbbgggf57887789:::;>@?BL[gm_JCDBDHFA><;899766899:<@B@?=DA?=pah;@CB?>=>=?@@A?>>==>?BEILNRUYYUUUSQPPPTYTOS^[XOJJJMNPTQLMJGFCC@<=8@>;<;:;<:9:<==AEGFAA@<>@ABBABCACGC=9<>==;:888;;9::9:;>>;:88mkjiv=7=HC8:FHGCGGIFEFEFHFGIJGFEKNNRYZOJPPSMDEp_h>AFFE=:A?M9=EC;DRTUWXdIEILJC>?=EC@BDDGJKIDACEDBDCDCFGGGHOMMKGD?FEGFEAjtA>EJGEE@A?HPSGNTU]`VHIRRRONRQOQQQMKLMOPPONMKKHHJKLMMKIIHJHKKKM!POOQPOMPONJMLMKLNNOPPQTTLHGNMMLNLMONPQT_/12220`Z/344]543001[32321341]\VW46855864665328863201WU965679:400.874.7751/01147755685055314::8546551a6663^48851WUf_257541453523864564211^265653SVa375776556772`347664_Q^b[W]1`af431^_aa`acbc][`b2bd2cZRSSSUURUY_\ad594YVVWUQST[d364]RUX]12[WWQNKLNNNMMQUVX\``\QUVQMKQRRNONONOLOLGl3^Z[[[XYPHC@CEHJNSZK=LOJG>)15<1ALFABEGKIMNJLSUSQKEGJRVY]\][RQTXY\_kkac`e766h_]^ab`[\_b33ca2334568331b_Za_`YXY\]_33d_7f\YSWSSRSTTY\]]^[RPPKJDBLKFMLKLHNWZZ[YWSMLGNP[`af75edcYPSWbc]Y[_^\Z[`_`gm6hgYLQTWVQMKMTWYYYTRVX]`[ZZX`YZVQJGM,Bo[WNLLKPOOT\XYX[\XXUSTRGRXehtsea^ggadedcc_daY[cgb`WOT[YX^][[WVSTYYYZWWVSQRMMOSQWYX\ZTPRNTVQQSSUXYYUUUVZ[^ZWYfobZWU^qjcd`_`ak:<9lgJWXQLI:[Vakp:Axtuvwsrtyzxurrtxtnrsuqrruyutzy|zzvpiea_iojjf]`cfkqz}yw|}E~H}wIJ}xxDFLSSUVWXYXWSQMMKLM~y~zprqpkjh]SLW[`lqsuqnr{usysp{~||x|KJK-KMJM~JJLMOSRRQMKOPRQVXYYY]_ac`\YRNLONSSONONRMLMKJJRR{pea\\\a^]bacmp|{~m|NVQSR|tld@?ZmFHRSOMJMOQWY^cgfb^XQNNPLwonroppruyvnhidjmppstrw{~{vxqkkokfgicgokfY`^__?\pLRRnvg^YV\bX\Zfegrqnhb[Y]\QVX\]ZRSW_oyyvvohgcacYQNNJOQNPTY\b`[Zbslj5|wd__\SZfjddcd__WRTYX]]]^TOQQOOPPUYUORU[afos}ebecbc_^]afdc_WSU[Yeg`XSLLR`ULKKKMINTWf_YZRBDHOERZVCD@RINWcXQgpnlhwoqwniha\lfbZ\Z\NU_aWTTWUJLRNG}}NMHNPzj||v|LVSSMIGIGLMGNRSRPQKL[NKIHEQi}KSYge_^[hu|tZUambWQP]]_QPQLMx~tGQYSMQQ]W:]rHJLIQL~qsPPP|}hmtwqrorunnkbcjkebhcgemUMery~n`_XY`c]ajittqgekmllknqqihjkTcmwf`[c]VPVpi^QV_i9;DPFJIM|wvv{zqgcdrndrjowuj{@@yoqAvnmjqwBI?>Axuj|CEHDBDEFIzpDJFDBu~uCLz>ABFrr?@NSNGDD}xxwpikfc_YNINKDJKO[RJAMLKTVJADMNOMLERHJVNLOLOWSUNT[TSDEHCIHFEEFA?DIFH^=@RHEHB=BECJOIHLF=HO4Z8A@LXAI^3IPG>==;;AUAS8;b387=P0G\:K558^94376<==@9995346<86:9;:99;:744358::999;;99889876g_g535998:87954896m77hglghfglq8hhhijjhgg`^^]ci..11./35542,))+0//01/1/0111../.D-++-.,1312.,.01330-,-,.1-+)&'+0021.-/000/,-.01200/-0b///01420//0/022/,+//011..-+'+.+)*+-0//4401/./1 + .J013010/012230-.--/./364112310..1000"*27."  ## 4.2?!$&),00-,-,+*+*,-+)+433-('(**+-)%%"   "!" 743227801././-.1//41.++)('''#!)(*,*)-,*'')('())#$%'%%$&'(**(&'*#%(())'%$$&##%*)&&&(*,/.--)(('&%)+((''&&((%"%%#"$&&$#!$$(%""!!$!##$ "#$#"$#$$!!"#"""%&$&+-'$'&q**%%916 !!! (&$ #'&'+*2#"%%"$# ! !##"  " ! #!"#!""&$##"!!""! 47"%#""!!#'($')(,,("$)''&$''%$&%$$$%$#! !#$I""#"""$#$#$%&'&)('(&%%&%%%'%'&%&&&'')+)"!!&&%%%#%&%&&%%&&&*%"""%%"#" %$!",($ $)&&')$#%'&&(())(''))&%(('()%#%$%&('((,))(('&('$&&(+&!#$%'%'&$##$$%##%'&&&(*($('# $$$!##%$$#$ /&&(('%&"!"!!#!&! !$"#$""&&&'# ##(*+,+++''(+,.066/0/13.,.00/,,,0.,*+).-/+++,,--*/+*'*)*())*..///-(&(%&" '&"'%''#(-./0//-*+%))-//1-.,% !#+0..-121002126833-%*+-.+)()-.//0,*-.12/,+),''%" )%=1+%%$$'&'*.,,-01.-+*,+)-55<>64288566455153..2301-*,/.-1//0/,,,.,++((*,*./-/0+)+),,**++-.//..210///12/./7>71/.3?;984431331&&#"!2/6== $ &$$$!"" ')#'03--01252/.,*-.)9!)(&#$$'*),110157977559;9:<>ACDBB?>??<==<956869987::=BA;248:9426:;:66<=>=<:@?:<<;;>=;;86678:>::9:99:;;@CAA?>=?B?A@@CBDCEJHE#EBCDDA?BFGFECCDGD@CCECCCEGGDHGJJIGB;:87=C?>=8:;>83/568AGFEBDEKGCHECKMQPKHFJNUWWZ/]ZXUUSU.Z./[Y-,0^SMRUad],-..UQRV]03200.X-12216753479=>=;::;:3/,/.22//0.1`[XY]_^/\---.,SUWWVVUTTYXUTXSQOQPU\\00XOUUSQLLMNNH?75237;::;9;ABDXYLJNOQRPNML>I04132[QNOOJD?6)8)QP(./--V,..0457;@?;84.++.+UQPD@AGFGEEGJIB@ACC@AB>AC>i817689#.7(,1EH><85=@796?>BJGEA;56:9144564/15;FLIIMF=><;<621/,0/..15;>:78?H=>LF=974/5;>999<871.145866810.0/252.//57;ADLI:9;;9:766556999;94/231;962/*(-6.*+*)*'+12<733.$%',$,1-%&*092-;D?@C=;<86A=:5656.V4;;20011*,-,'KFOLG--)-.JMEF;30/RP97:/./++OLDMHA(.3,'+*2+*6&&)&J.*UTSQMPLD=?E-,LGL.SLFHLH:=@B==<>A=><77=<76944.4$.6>E<54/06857<9@??98<=::9=6A"&'%%&&&'GC>7#'%"!@?>:696442*'+)%)((/("# !()##+(4-)2+++(-73**../)1;A)102414:2366;8;902:E9//++04730+22/.//313201-//1910/*:=/:3)*83*51,$%*-2$(- " "&% !%&*1!!'&C=2:1215=70+2235.-0-1372@7311889936?8>3BB#>AOT-SF?%!ACA=<;<#ECB=C)(*+),%HN';583df112464ge486b_ag55[i65bcadefeb_^^`ddfb__`cfgeb\V[c88444775455<>89743477668644678:7lfghhgc_bce5257b01^14578545687779:86567876665678545756565556346753g8:6jgffefdbdfecbbgijprne`djmjh565jj79;<989::87877:AT^^WECC??CA?==>=;96l5g346;?EC?=<9mkhijo;:89;f=ACDA?>>@BEGHKOVZYYSOOQSUUTTYYVXUQOMKQUXUUUYUMILKIGCAA?=;=?@@C?9998;@==<>::AHLMJHD==?BDEA@@>ADA@<;<:<<9>=:89966:>>>=;:;;<88h[ZX_jkdhcd^bj7:9774ddegdbb`bdbe5797c_^\ZWVVVIN5b``ZRRQSTSW]`[YZXURTXUNILQPNNQRSUXZ\[ZUIIV]XWSSQMMIJPUPQXTQSGZ^ZZZUNJHC@GNMJIHHIMPKIPTLJNPIFEHFBIJOIHI?5DDAEDCF@AB>=BFEGGGHGEFFDOTOJHwGIGLW^SA<::@BEFEDFLDLNAm8TQOZZk{aIDEMJGFD<=EHHLROMHECECCDABDHONLMUSQ[XNIIDABDA=<<:CMHC6i9:;9@KNGPZX8AOWUOLPRQV[VONNSZTQO?NIHIJIIGHFIIEHIHIIHJMNMNOKKNPONQRURPMMMQVSQOPSTSHMRRRMGIJJKMNLMN{Q\b1010/Z233300033211.00a2542151`]Z^26:85765855568521^577555457865411257942b.Y`326:62139:88423558954527726964347875343a1571642_d432373]c_Za66543``ad5557541b14345aX^^TTbgec`365]ROPMUYYVPRVW]_]fga^[VYYVQT[e][YYX^]VTPNMQOPPTYdjd_e4h^MKKLMMJKNQNLJIMMRWWYNLJLJLJLGFKQMKNOLGLROJJNMKHHIGILJIMQW_WO]eTX=A"+Q*[?515FDEDDHQJITXUTMDKMLLMRTVUTTVX^bfddedfafkh4cVX^_Z`]SV]ehe44785:::986dWSWPPSXY__Zed_\ad[]WYSOMOOQONTRKOQMJJIGLLELMKLKHQ[XTLDMJ8BKZ]af478760565a^KLRV[^[\XUXZ_dhghkjXWWYYRNPUZ]_bb]XUR]]]_c55524`cZD8W_JBLMHGQX\\\W\_`UV^WT]a`bkovtYNV\_]aa_c_WTTPP[^_c[MOY\[][XYZYWUYWO^XT\ZZVTPQTG`[YZZVXYUZXVUYUU[[WXUTKRL[Y\ZWU\f]]^ZWYagntd^\ch98:587_[WRANK\899;:48@LU_mpkfgd[ORVVXWZ_]YOC>@A~sssDjo@AwsEDHMHCGFEpkklc_]YTNONGDFFPVRFPJPLMDB?SU_\OTLFVKX{xgw{ztljsvtpjmrui`cY^dk^]`Zddccf[_ZT[aVVg_hs^WVXORSJTT[VQMYiib_b[Xih_`[fdZ[bf6dg8:jgdi[UMJDAKJ@@PI;QTU]`Uc_cWXYMQaSMYbaWMJKPY\[KBBCDHFDLBKAGJOKGLB>WJSVFSUWVZWhVRQDNGIHGEFG@>JFBACEAKD_DU:1c`45Q>@b6U898;<1:9<>:?>9:976499779:;9889;75345689:;588999::lebeg4496778574346hk796665kjo9877j`b89sie__]ag1/-01/033410,/0/'(--/./0..00212/0/0..-+,.0-.--.01/.12220/--..---*(('%*00--+.12/-,*/,,-,-2-./.-++.21.-,0121/-,-/101/.-../10-+')-)2/12220..-.++ 0100//10./13346751/02321337(-.*! 3/122435* $',/00,**,--.--10.//,,,)+./--./+%##" a!%&#" 1.0/234050.+-101230//.<02/-.-+,+*%'))'''()'*,-+()))')*($"$'&%%''%&()***+%#'+('$&$#'*(&)'&(),++,*'&%" $)('('&&(*&%)+'%()&$$%%$''+)(("!"!#"!# !!$#%$##""##!%'&$"#"!"#"%-3," !"#$&$&(">+'%-.3@4%!!'%##$! #$$&('&""!!   "$'&&%*)(/.&#"  !'##7!%& $(*!',+'&('%')'%$%(,(&%$$$#!###""!" #$ "#"$#"$&'&'($$&''%%&()(&%&'+('&("*)("%)()% "$#$&'%((('&&+*#b%%$"%$"#% &'($'&$''***)("''##&&'&%'""!#%&&#$"!%'(,,+(&&%&%#'(+&%%%#&(%$#" #"##$%),)(,+'!##$##"#&&%$"#$##$%'##!! $"$!!%'$#%$" "!"!"!!X"!!! "#%($ (*!!'/ "!! !&"!&)&&##%%$$')+(()()-/120122/2640)*./,-,&).231-(')&&'*+--*1/-,./--*+(&%&&)'&*(%'(&%&&%(& '&%'&$)/-+)'(&$)0001+,#%+.2411/,/04886579000//,)+,/01340.+(//.0/(+)&"//$ ('#"(,./0,/02+,1-+242368>?.(-12143120*+-+*/003/'(.//1/./0/-,/-'1-+/00.+*,,!3/.//-.0-0.,+0..10.0/.(/&2/11/.3:33310158>A32020(0!,+4!! !## %* &*0685352-(,002//0.,)##*)&(,.?242465<86;A>;=:;??@@?>>;>=<:;A=349:<;97;<;;;:;:98;;989:987:<=<<9;;<;>>>=<988;=>?@?A@@==<==;7<;::=8=@>;<=;<@A<<><=?CEJEAECDA@@CCA=<78:BHNOLMQ+SNMKO(((*'LO+,,16551,)*))+127884356521443_VTTWQKQRUTUVY[XZQUYUUSQJGSOFEDB>5=B=>BQH?9@DJNLJJQ[UTOHHHPWJFJMPROOPTTPUUPTUMFDIRWW\[Rfg_0^^1135:90/5/W][Y//1699878989879::940-.02:=9631]_e`]_6633^WYUKKLPQNPQPOSRMKOMNSURV\ZSHHNVSQMJNTN?62/)'-59;:ABFMNQPHGGMUSSK=A6!R4WPOPKFNME@;*% '2OS+/0-*)/44210/11.,*-+'DCKJJHGBCCJILFDIJLLNPTIIL?A>;<8@FE@<18AGD@C@BE;=8=EIA:8FE@DFA>5.$'37;53;8:7:FHQSQTMH?823520.0.,.2346A<<<=CLKOG;D=:<944887457::;><:9144.2042/,044245:B@@?@AC88;;8354554755856=;>=@>855444<8(**+-,*/.410%/01,&""&$#! '+(47/6<<@@FFAA@=<67>85648?;2-94/03225+-,)KIISOQ-RS*,ICA@FKZ.084+'MDJ.*&)-,+.-0.,*+,,)*(,,RFJ)JKIPORG3+*HC/,FACDE>@?>:??<8:<;;99669<;88<',,"A<746420.3558DAF<>88<@B9897:7/);B>9158/%!'%71,*0%0$#')BBF@@C@"C@FE6599<89>8:8:; A><>==<A#((&$@FEG%FA@ !@D;;DF<%D8<#FB :7""%(# ##G%HB:7893110.)**($#"%(+"&#"#&)00(*%#+"(;.,.52+6?5,11./553+8625?94.0>J05,#+-2551/,111/-/.2,*5-2'290./-.,.110.,-'10.2-)*)%"( &#$$"# $"&!(3"$#%%$FC<0-7:143/;<0//.1.*,.485607=//--CA:@:54:=AGNXQF>")5%*'<<8>CA@))($#DF28="C8GEC?887?>74:@D@>AF"B&"@?5?BA>87>A><89=>5/3,0481/1+221/1`,.,)+1('0-2:-+)+&))#)),,'#*440./,)51..+31+.022253-0+,%$#!&&(#)*),/(1-/')*%&0'"*0-)#"$'*++" " % $$$&#"& +!%)&'''(%/$#%$  #*),%$#! "!" #)%%.")  & , $2.$,$!3.+,-"021262./831//-03逅€}~}ڀƀ〪 +倇΀ ʽꄈű۠ӼŶ򘜔ƨÊïŷʺþøĸ򀈅ɾöIJĻƺĜǿ¿׿ǧ׽ѻ􀂀쁇󁃄ωι˾ˀȽǿꀅ͑삊Ҿˀ󄎎ـ¾ȾӷĽȽ셊ƶù·þûºɺ´톐Ϥȸ뀅炅ˀҹ䚣큘捀ÿ񀁄ʾ½ɼ腌ǾҌ̳ʯ¾˿ªǀ±ͷŤų胏­Ӹ̭ؾǺԿij腎򁈅끉μ΀˴ͧǭ౰ĭȹɥºڋ셊̖䓓ebdhjhgedcdfgd^`Z_a_``fdcfbbdfdbf6658<;864baf5885igedfgjh45df5mnidb]Y\ZXX\]\[WPNXaYXXTV_`_\Y`hj75b`abbc8:885ed345664269778655666f`]]__ab'bca]\^a``ca`_aba]X_68<94467763e345766:;:==9:765777jeh556gf55445665322244589889976655689;99988997966767763468;878:968:75hi87655hecbacegeccecdgecb`bbbeggiihijl788;=>=99<<";<>CFFD@>=::<>?>>><;9mieff25:?B@?<:8jjgkkn9::<;=ABEC?>>FIIGGHKTXVSPONNWbdd]USSQPPQTXZ`bZW^n[OGGIJFCCED@==<=?@?;:;:;>><==:7?AABCBA@??@?@==<:9:8999:;:998988;<<>A=:<@98;iLHLXfnkgeff68:99754b_e2baabbbacefgb`\[ZYYYVTUYZ]abhSOSVTSY]WX[YVWWYXYIMQRSUUTUVUY^`55WRVUWXRW\ZUOMRSQOOWZYTSQRTRLMMJIIKHHJLMLMLKKMOMMQLEDHKJIAklhoC@AB9?A@EGFEGFDDDBBEFEEINNB@989ADEGGEGLLHCC@>HF@:;BOSJCMNi|s[?CGG=gnw=?BFKOSFBBBEEEFEEE@DBBBCDEGJWNC>BB?DDD>?GBCG@ADB;6AONLPKD=HNKIJLKMRYUONPUTONNMNNNKHEHFGFEFHIJKMKJHHIKHHJKJMNNRQOOPQQMHJQSPOOSOQPQVUPPKFIIJMOONQPONNNPNPQUW\0225326654221Y[0114423`[_5646565557246663a2328842136777375367754464124775545776524167642331452353632786732124318:6`Y]^[b771_ab^`^a546543b`Y[_24347422\\___783c^^5d_[e54__\Z]b\VR[`ba_W[_cb`\Wbf44eh54aac^aef974^\ZZ[`_]UTTTSQRUTXXTOMKNOPNNPNKKFFJLNRRLIIKMMKILIJMNFDIGDADHIHFNPKGGGHLOLHJHKG>ERMRO]=JE,><=5/3c`\TLJKPY\^[TWY\cggea^bbecWUVUX^beffc`ei676\`56b`335Y0m[\M3@TRQR\_`[XTV[\Xaga`c``gkkh]\[^__`dehil`WVTUW\_`^ZYX[WYWZ\\^`^\[WZ]\XWURTTTL?Z_b^VXXZY]cbi_WVY\X[^XQN@VYYXTSW_X\[ZVW[\bbYjaf88323564`QX@FHR^f8<8;=>AH=AOJJPa`aiedca_YVZYVYWX]UMIGJHQRTXXTWXYZ]bbaghgdhmmkkghkkicbdgknumillecadhab\^adghkpmgcdca`]_fihdeeffehgegjhjmklknkgeehfccbcegecc`cdcebbfmmhlkhifc^^dbdhjjmszyrkhhkhjkkggijnqtuqvvvrpuwxy~}vohginpkhfa]glcekruvwxvxxyzy|xGPQSW[\]ZVVYZY[[ZXWUQMLNPUSKy}}}~ywunfghovtomnqv~ycduxurt|{tor|OPPUVZVVVUVYXYXRQRQONQSTUYVTXZ\YWWXYY[XWVYSONMOOQTVTQTQQRUZUTQM|nmf\TV_bcdgnz~xw~~vltSz|{pifdZaecsINPVWSRZ[WRROJGI>::JHP\QLZMUVH`@a\_tfV^i^[d^RU^TCZpa^cnk]\bhx[WSMVO\W[RLLY`[YOPRRWY]ZQPXhXZ[YYd\YVWRJPNEfc_STLFIITRJY]]WUQO@IHMJ9AP_fj6@URNRUQ?KUQPDHH=W=?>:8:;8659:89899888:<;8:8758:??<=;97<<;;88lgfg46756:7:8555jlji88966j69777nkf`fjmojdcjg0/0210101/00/.030.-(+,,/.1./0..///-0+*./../001/-.46311.+--,+,-,.,(&+/,++*(,.,+*,00/./01..-40.-,-+,../1/-+),0341230/01000/013221312320/.///121233223 630./342532 "#!!"%+..-+**+06892-,-,+,-00078204=0'##"" %'$# 14))+.48721110/20/./0230/.--,--,(%&''()-'&(+)(*,)(**)*)++,#%'''()(''&'++*'('(*'*,*)&$&&%%&)*)'&&'))%%'%$%&%%'((('&&&'('&('"#%&%&#<=>?%"!!! ! "$#!###""! !"!"%')  "#"#&&# #" #')& '%3A=/ !!28< #$%)" !"!"#"" !!"!"+&  "!! # # !##!('%'#"%(&$&'%%&*(%$&)(&%%$%$$" !!" !-"$##!!"%$"$&$%&')('(()($!"'('''*'&%&('%$!""$'))(&&%'$$$%&'!# %"$#2%#'(&*%''%'&''(&)+&'))'(''+)&)'&%$&*'$"'(++(%&(**+)%))*)(**')+*)*((())($%%## !##$%$$$#%%&%%&%V#$!##%('%#"#"!"!$""$&!#!!! $&#!! !"#"  $ '!$#'+ #$#"#$%$!"$&'*,T*%%)10.,-/0011...---.//0354/...-*-+'%#$#&()*+('((**.110./-*-($%"#$ #$&$(*,,%',/-"1;!(+.35**)'&&&*0352,.015998545696/./-.034464121-0)((<1.& ***)//0.-)*-0.35113104654/.-0212455560-.--.012O1//,.,.-///02010,/0/.-,*,--(.142./..-26382--.0/031.,#0111..270100-02253.:34|*&-#)*.6; " !#&!)&'+4025454442020/1/-1,)'%))--/11/00025988<=<:=?@@?;=??>99;=@BHA?@?;89=97866648=>=:;;:99;98;<:<;<:::?>:78:8:=>=?EJIB><<=;==>;<==@BDFCEEFECGHGHKJFC@=::;:;862:>8:?BEEFEEGHHOPPRQOJGEIEK*11369975334336765542.-/142,UTWWQLFKKJJJKNORZYWUTUPQSVQOOMHEEB:;<9<8520;HEHME@@DCIJEFDHIABA=>BD@===79:=HFCB?=>=2,(*4678DHKMJOPPT\[PJC=3142../--29?<<<866886;?=>B@;:96>C?<9:;;=;:;754250/2212/04566;?CB@?>?=866777:<<96:@99<<;<87866765668@62140.*,-.0/($44'<8  &")**51479=AFGA=A@@:9@?66=6@=61581410283,01(HGBIHLLGK*+FADCI++*.0+(JGCO+MO.2-*,,///+*MJ)(((Q,GH(KDBEHE@LB;,7224335;J>434A@<0,+4>>4-.-*TMHAGAE675/0)1)+6'+.93+*,RKIHDDJLKBBD)5+LIA/RJDEHICB@=?@A;5:;9656158:@@;4=##&;;753.-.498=AB689511(,2C98525-) 395;$$-,&%)%#%$CFB;D"EE?58:479@::=:A>>?!"!"?!"A>=?!%"=<"! !#%%'%"A:%)$$A'(0?@"??#EGDB<;<=@"" "!!&$%)%%('G>:9;51/./,*%%&$()/9.!'' %"!&/(&/&*)+0//?8/4;3283,06.#0;013;80/24?//,),'1.3+'$.311+++),.23,,0:00//0732/0.(.*#963-.)&'&.-%,*(%$#"" #,24!$&($?GI-&.3:=15;/.0.-.*&,54=;0<84226>>=<48+,'*7AQJD?C%;(+&B@BA%'&A@=8BF)+,%%A;<::D">FA?CB<5:<45;8;6=88=9"@@FJ@=;9=B?D"B<@9:33413309-40*001-+*+)++2827/-0.%')#'*,1+'*352-+*0.,/..0.++010/20020-/*+%#")*! -0/)'-,*)',+%&'&'*'%!" (*3, "%("&%!# "%($#'#)''+(%&#% % " *$!%'%#'$$"!"+3"#+ #( ",,h "%2/.,12211552-/34531173ˀȁԀ }}~ꀜԀǀۀ怆 + ꂒɲغº­ڂƷøȱ€¿Ŀʸſ삍ҀȾüнŷŮŕ϶ɻ쀅öºƷƬ̬ȳ󂄄鞐ƾ¾ɲºˀҀ兂ǽվꍍڌƿüôҾʸǼһ̽٠¹쀉Β훪勊ɺ˼²ʾւɾĩԟծdzů¹տ°ųۿ΢݀ɸֻÿ۲򓋓ǾϽ͵ٽմѮȱűϴƯˊl򲁓ddehjk7ifdcgfigd_ada^aXRWafge^[dedc`5c`ae=<<;65cbf69975hbg64dcbdc5lkihda_[WVW[]]]XRRWXV[f[\``b`aa`b75eem9ff35864abd455433699984gbifgkkheba`bggjhdb_^^bbdf3ge]X^i58766545688531445:=<;77;=?>;9866khcbbedcbd465de5;:99:86358:;;=<9656976763277;86556543357:;669<;::65336877975jjjgimnkgdcbcdcdghiecc^]^`ggfgh8;:;<==??AA@CCB@?>>>==?@A@;5f465578:::8458:;99igkn77;F==>@CGDDJSdl\LFHFLTTNMQVU_egik\RRRURPWba[XUSfjYNIEFHFGCDFC?>??@A@><>>=?[=::@KKECEDEF@>y;AEDACA>?@>;9:;<;:::<=;;<::;9:>?=98<<77jaUTZdmkjj668:8k767743523455d0/ada`_a\[ZXXXWVXa4@A?ACHMT[SGA;EKONJLLKNX\KIKO\kk`NIMKA8;>>>AAEFF@:ADDCD@AEEB?@=@>=?CHCCBB@=BDB@@BEA?>h6>C<>BEGOONDf:EK?>HRPPNKOPPNKHFGHJJLHGDFFHHKIHIKMLMLMOLIGGIJKKLPPPRVTRROEKOONMPRROLPPRVOLNHGNNNORPMOOMLLLKLLLQUX`]]25220]\Z0554/4454230/5856754973647554225557863674568695547515752335455875533524047aTV[]UZ\\[^_^\Y]`/1_XY\^ZY__\ZTQUPS`c212113]\f2`^c42\URQRZ`b5327cWX[]374]_dda]WWZ[YUXYVQSTSVWWXX^a_ecUTXi654832eb765YYWXZ[\b]^_`\_\_b`hgac^[`_WRMLMMLMNKJEFIIINROBHEJJNNHFFDEGDDGHFHKORNBBG??B?B@@>;668:<<@DLe[N<6h;EDFKEB?@ABCGIJHEAEDNQOMTQRRWSURPRXWXRSZYcgWRRU\][__`qmqpj`\WSQV[_]\[^[YZZQCNWS[kZXWVXZa`baacb`dWRMGGB;>EJJEHNOGHHIKJIJIHKOG68AFH]NVY^68;4eb\VTTQLKLRWa^NRV[YXXVRNNNPMMQSRUbjkijik55787]YZ``]377MMWMJMOLPSWW\bZ^RKUbhihebeeab7aaa_`il9ifkikd]XXXZZY]^b`^VDYZ]`bee`\]YXZXXTUSUVWYYZYZVTVXZ^``a^WPXZ^]YZX\b[YUTO[ikc_YYc^X_gjddl;:67:98]EeB4AIRh;<7w|~ysmhjrqpr{}txytspx|wvlnusv{DFyqo{m|HHJJGLNORRVXVTSPPOLKMORMJ~}{}|wr}wzx`bopUJ[Um||}|~{RWZPQUVXZ^XSONQSRV[dhdfkcXWYXUSSRTZZZTQQONPQTWWTUORQOFIGH{xmh_]VV_koop~~DsuvstfNQ~~tqmctxr{JMSXUWXXW[YWT~mtCBsZSRVVhvvutpootvpsyxlghkkhg`Y]bZ[TLNOj|ykgssrtz|}}|kgdfmxpkicegjqg||tolvqpqd]_ed_`\_gous{~ljnebcWUVSLO_`UTUZXVRUWYY\[^^`fjnvxpe`aghhdbaa__\\aYUXXTU[`b^`bilkjigdg[U^[^_daegfbecbehhcc_[X[Z``_`^hse_amik`\ZZVQJPVPFt@yr?FIC?>B?BABAHKB>?A@?CG{k~A@yxDF<90\ar}KECMFne@MPHB@||GLNSJHMID|tnqlff`XRLNIGOTROH=jMPBKOI1EBEL>NliJIYcAglmvmTM\\YgaVYR;=OeK5957;99<==@=@?<8789<89;::99:9<;;?GBB>;78;=@>=::98<=89=3--./-,17410.+6:.'$"!!  $% !!""8 73./1366414/.1/./1.---,,+++*)),)'(((''*('+***)-**$)+),,*(()&(*-++)')(),/,**++*$')*-B)'&&'()'''&%$%%%&&(*(('()&$% !"$&)%!>?5! ! !#'&%'##&#%$"!0!$#'$!! !%'*/*#!"%'%#$$%&*,&$%'.872($$" ! ! "!#!!  ""!2!$ ""!'&%!1$) !'&&&%'H&#!"#$$# !!"""!!$#$##$$$""$%$$%'&')+*&$##&&''(((%#&$$&#!# %&''))&&%R$%%#$$&(&%$&% $ #&)&)*)*'()+'&()('(&%&$"# !'($#'&%')'%%')*),'(*(&))**)%#%$&$'(%"#%#$%%&&))'*(#%&,('##$%%%&*')((&(')*(,-),)(*,((%#%'$%%$# """%)$#!"!#$   ! !""!!"$&$  (' %2 % !!#$$!  %'&$((*+-)+(%'***&',+/3)%%&)*+.0075U6850.+*(*+,++,/-+**&%+(,3*)*))+/././/.,+&%# !"$%"$''#$$$%$#$$$&*&!$$'+-/*(((%$&+163),-0/.//,*))+**,,,.5888977,,-./-$*+%$''%'*,-03.0)$+1456324433111000/187535552/.../..10211+ .0012331010.0//+,,--.0../.,-./,-/012121,%/2231113831012=<9100183/499529) 4"%).<"" "+1*-+))'(+-,010/576320-043,-)(,-433641.37;?>:8<=:=?@?@?@?A>=::><=@A>=:8:8:<=<=?979;:;:<8::526:@==::=?::;=>::;==><;;<9:?><=;:<;<=633:<=;64:@DD@>><987888;<=>BEA==<:;679;:=><RSMNKLQVRJPYTROLOSQSX`3`SS67/01368<71.\/22159@CBBB;47;842336:88201_^0cf^\[cb/01786440YORVb42[WUTTROMMOLQUVX\_0\[[UOROK''%(IFFGC;4*+&'+157:ENLDE#OUSQOUJO@A?><6//PKNLJHH@B?8A>7=')02023235441MH<=H''<)%$&(6CGHGEDDHKFHONECADEDC=8;?881+,-ANM[QJBAIJIJJJLMK@=;;CH?@>9:;@E>MKHCFIDDF@<;;85316=BFFKRQPMMNPYRLBCD=;94430-/;2-/48730233457:89???=<:855831320//35346>??>>;9:204256969:98:88<>><;85355;8886>D:56?<=4211/-*-0,&!#*)0/187?AEEC?@CA?98>65=540,-VQLCFGI4:5510'3;)/-043-(TPMJFB>AFNKDCH),HEJNMHKAGOEBB?C=>A;8;=830/587=:7947%'H:;6150448:9AA>B=8=?>?=>;832/($/6;::56.+&)943=+$#-')')&&%&#H@6BDBC>8><::;>;<9661-*)+'#*+($$!5$""%! "%%9;&"')38:@;,(332<825+#/2/22-303312.2.,4..'*,(+/.(/-/977/3-*.6//0-130002/'0;#-57,1/()')0'03+,)"!$'' %'*+* %"#"C7.+.0=893/,11/--&.0+:8;>416263=A@-&-/,+/BLK=&D7559;?=K2)?98>@=86973.-(722-+1,),*.((91135/-60&,+++/,-,''343''1340//00.)(64/0523-.,2,&&&! !!$!#)10*,.*$$&%$"&#&+&(% "')'!*6+#! "!!!"%$)))(',)(*O,*(!+%& " ! (" $)' &#" %" &1+!1#*!!23.0'.#36/.1301.,.2441-.10233܁怅ʁ ـ}~ۀҀ怈ˀ 」笼썏Ƥᇓϡûȶº¾ſüþ󐐏ր̸кĶ͓ǂ¾üġ򁈓»ʬĽրӟ􎖌øŷ¿ʾ̀ˀƼȽƴ¿ƾľ̲ñ³źɻƻֽĨ晶ÿ׃ø·ƺǿ˿ǽɆ׀ĹٱҶ뾳ï³ŮʹȺνŴƼӻſ뎋ҿ̼Ĺƿ׾һ̸п÷ǶmՐ݂˗u`_acgnihedg6ggkha_aaY^_ZUVV[aabk7del76^caej78:??:54:=;76id586455jfecdi7ke`_]]_a__[URQTTSX\`f4434662322455aabac55fee443(544574ffgfijiikifh5efdbadfddb`bdfeb]V[1565544lie]b5f798::969=><::;96335fh4ebbf5bLTg<:<;;;8765447:=<:67:;886677666368777653434699:76898577e3554379876756889nfdfgfccdfiieegcae6655588m8>?ACDEEEA;75568:;;99;7322f5::9989:;<;::<;;?J\gg^HDEBAGGHKR\beb`^[QMNNPOMQXa\YVWci^VTLIIGKIGHC?ACBBB>=?>>??>===<:;>BCA@CB&EH@=xs>DBACA>?@@>=;<<=>=?@@=<;<;=<;=<>:6lhgine`kl88;ie7ngk6785455334310022ca`a\\YY^\[Z[ZWTQSXR_e[]\X^ZVWVVWY[SSSV\^\Z[YXWVZ\[[YUTZ^]a\WXZXVST[VPUYV\^VTRPPOMNPPMMLHFGHJoLMKJLLFABA@>AEJNJEHE;>>=EJMONIFGHDCF>ek=DG=;CFEDDABDFIKLI?ACEEGFFCAEHHONKGBAELSJfcj9>DKJIIA:;?CGDMNKJHKKJJIGFCEGGKMKIIFCDINMIJTLILONFIHHNPMNTXRUVSMHJNLLPPPMNQRNOQQMRYSSRNOOPRPPPKMKJKKMONNOMNMPRTZW\_ZWRSW\YZ0\[01^^34657866753357553\212456654546566421053_[SZ676422242252c[VXU]][\32_VVYXVUXXTQUW^WWXWYWWUTTV3UV[XZ[RKQUZb244573^^^`ce]VSSQQTVYV[d\UVWX^6cZ[\b3a\W[]YVUVVTQPTTTSUVUXYb79536342^b4h_^ZRSRRVOQJKILNMOU]\WURGJIGJLIGDFMLLKIKOMKIE@BDHJKNUKCGNLFDJHGIKJGMPH??>;98B<@IYJ3878h5;>AHFB=:8623:BCBEGHMRRONNIEDHGGLRSRQWVUX^\eicTYY]VRRT^YX[WYXYZ[[b^ZZ[[^b`d\OKJNV^^`^_2^_a22c_[Z\a]ZU\N@CKOMNKC@CBDHIKHIFGH?9CD>AFOU\a459<==795aei\]XbOMPQQPYW]]XXSRSQPOPTUQNOYdnmmkj1423`TQEL\_\VIMSPHMROOSSNPW_`_ccnnhieac`Z]fdagdhpkhgf7;9kcaed`ahhkiikfdeb]^\^\[]^YYXYWVWXUXWXX\\[[\]YVVVTUYY[\agi]N\dfb][YX\]][IK_\igca\de`cmrodhn;7`9:6dI_FIOO\ikci;?D>K\UKJLJCFOVWUVVSRQTVYZWW[]WWYNWPV]ada]^`egd`_^`^]]cbflnqoolhejjlnliifghjjmoloojhedgjedacdb_`bhhnmkgklkijiheebcbgjfdddbeikihihc_^ekicY^lkc__`hnheeecbb^^[^cghlqmjhhcbb`]adfhgehkmlosy{vv|}x{;?@~~A}??{|ulnxunry~}wzJJKKOPOQVZWUSNIGLK}~|JK~|zsw~{}OSYWWUXYYSSTWW[\YUTX[YRPNTTPPNONPSTURTVX[ZURRPQKPQOLLGAA9_p?|}snaL^cjt|?@CDBAEOQN}OENzvwtlsJNTWWZ[UTVX\^[WVWQMOHGH{me]V\anrtsppsnjfg_Z]bdeab]\Z[VJNT[}wlloijhkikpvxslonpy{skqojkoquprporrweXW[hf]_ehgenxwgjx}}zocab`XSQSTUSJ>DA<;uBLByyszAAmsu?=x~xwx:cdo}AGEEHDCqg?IRJFFBzELLMJGIG|yvsqne]VLIQILNLBNI2PSOMIB?>DB:;CTcfQdfzo|rmjXVX\`UNICJRZcbfia_gcnx]SXXRUPUWQRPK\RVOWRWx{gWZ^ONVVVZ]T\Y[XVXQSSLUSWZd\GSNMMNS\R_YGNK]eUMN]ZXWW^[^7BGMEvihd`^kdeWQ_YZ[ZUWPVg\ed^_k`aamoz^O\behu}{m}GI~DHFEz{nx{xtFG|vp[d{uh|jhtukiz|yuic\`onqqokCxvqtNHBA|xv>ppmk`^dY_uk_RXnmfbYZUZVN`WXZ`ZO][efaXT[WSZVYb][ZMZjnle__\`WScghp:6m65fb\WPKGE<@CFCCFHC@PVTZciaiPLFMIMILVWPRM@DLFHINXe[]\QOMOMB:?F?;EJDJXXJIQU_\\b^`RJCNUIMAICFCGEC?@E?>DNQIAOSWQIG@@?836?799=:787;:9:9:779<;89>>>85439<=@><;:::8:;::<;lg4e4436;9885gglihabag7k66kiiehgfe6ifgcA..//.2110/1./24/../+//-)()+/..2,/3*.-/00.0/131.,*)+-,++*('()(*-02,/0.-..-F124577766311000//01/0-,,.010.))220+-.121//01(,20*72/0131001332242132 !""S/",24. !$$%(-3796433/,-.-+*-151/..57/*)&$# #" !  !#% 97! !11349506631524../0.-*+.-,---+)&$'#).*,,*,)())()*,(((*--,))**)()*)((('*-+-+)),)(((+(&**%(+(''&&&%&'(&&%#"#$%''%%&&#!! !$&$#'' ! $((''%Q$%%"#%!49 !#"$#$#!!"#$&%#,3!%%"*'%#"%'(*+))'%'(''*#;"*%#%$&'%%$&&#!%(-.'#!! ! 7 ! ! !  !"'(&#! "&+'129#&$#$ !%#&&$$$&$$$#"! !#"#u" "%# !($"$%$ """%'$%+/*+,*'""$$$(''&'))%%'&"$'#%%#$$%'&''$$#$##$&'&'%%$%&'*&&'%$!"%('(%$'(#%&$(*(('$''&&'%'))(())&$'(+'(('(''&%%%#%(&''#"%'*'&'(),)%%&$%'&(%'-('('&')&''**&$$%%&'$%&&&$##%$%#$$$&(+')+'K'&"$""$!" !"!!"'(&%$"! #$#"!%$$$""$%$# "#"%*#!%##!!"#" #%! $0" ! !##&)('&&%#!$##%'''&('&*.-250(*(+*(()/-,-+,,,--,0/,,-,./.0,%%%'+,,/-/.//0-*)'+*(%+%!&'&%$ "!"$$%"#"## "')-1-/1)*(.&&***)0.21//,+-,+++.1-+,169:;73*&&!%-0-)"'*(#$'&'**'(,0//1186454121-/4215237544363265226562111///000/0//-//./0-/.//0///10.-..,,00112350)2776321/2101'.@5744537756;@=58:(.!/"*-,2:;48!# &.+&''&"$*.0/0.,,.01321134111*1-25897567;=:6657566;:?ACEA@?=<>?@@?=<;;<=>ADBDC?>=;=>:98897689==@?=;>?=;<=<::9:9:<:8989=>@>==<988;<;725@?9688>B><==;984657:<>@D@>;;89:757:<==<>@@@BEIKFGLLNOMLIEC"%KJK&HI$$EGB=@HEACHLIJJNOPNGIOUSW./11221379642/,,RORWVPSZ/.YQMSWWTLMUUQTUSMSQLIU`ee^^Z[]..YVLKT\XQJGFPOLPWUV\VQADKLIMSSMMKNNKLMOUPQQNPSQV``ZRUVWSRV[XWWV03576379822465775459<;321552110/14674f668<;6442b[X]0VPPTU\YX,/10\XTPNJLQVUWZUQQVUYZ-+(#",9"@B:8.#*,/47!#GE""&01-QUTK3[PMG(-WIHGE?EPNMLKS,,-//241134786312.,.('(PLB73-(-4BHHIGHIFC?@<8<@>??>:9894,0/4PWOGAFFBCCFDFFIJE@CBELKD?B@=?BCEEFDDFFL=315?>78<><;@FKJE;>JMNMPQNLD=:=93100021)&3/-.563431236;979?BFEC?>89;==<>:=:78784651*$&--,4>BB?>75:2369=>A>><::=:999<=:79;:;;742.4=@@>>CC<661*(),--, /030*8ABACAC>ACAB@D<8298=<8563.0./423.Q.4-+D?BB<81FMQOFGAEL%&*('JINP-2000+*(K'()JK(HIM))GFIIG'M+QKHP6?=.!D1=98=94848646:811:>:53.+VRNL@G,/496/,.44.1.01-)OMMKKDB5<:F(KJNM(MGDDGIPKDSQ:;AaGE?GB7489:8458=56,(&(&,$<6952367;;:<>8>@<:9:997><:441)%)798865/+$%>84/!,#%,'&$'$%#%GC=:AB;><+,4<@!%$$%#A"DD:2$+&$%!;"&((&%&%FDA@><;;62-'%*%&'%&$('%""!'18)1-;5BG>;:./145/+(%(*032494172;C2-//+-'*-+,)%/)/*0*+=>5-01)*00//0,1/30.0,.-)/,0172%/*,++-0)0+"$#.1*&$.,*'$(&)#(#C;45542;770,62012/1+1915533;456=<@6'0244>EHF4?C65>CF>98BLBAA8523;>:H$>?;>+&!"@=< ;:86116+-<60)+9932+,(+*&/++-2,&.+22/*)-,(-)*/.,.$*2552--,0,'.1283//,+'#""!! !&**-02,3###!$!"(+%&$!% "#)0)--%%#%% # $ ")'!!&(,)).*-&!$)"# !%r%!%&)&"" !$#6&&#'!-.)%)$61-10321-.-.2122/100/0/1/⁂ ۀ~~րȀŀ 뀥  䃆ƺƾ÷삓ѹúþijʿ¾»܀Ǽ΀պ࿲˽Û錕յՙ潾̬Ƽ˿ǬǶƿ݀ق􂉋ÁŸĶƴˀǿƀㅈ톍񇡦큊ƴ¿ŴͼDzɵΰՆǿľݯļҀ⁏̼ƺ׈ڇ߾Ǿŷôý˻ӺȾ䀇뀅ӄſ£ǯǿĶ¯ʺ½׵ƷغͿŲОㄈꇓƾ錞ɷȼɿĹƺŴǼҽIJǷȿïƾuۺё]d`]bfbgdcd59:86ijecdaZ]YW\ZYUV[f:8dgef^[_fnlk;CD<64@GB:54e5686h56eabdgjiigfg55jigbfc\TRQTX\ck6 554466fb`be674gcd54446753466mnplhigch656jgbbced`acbfigd`\\b55654565[_`\[_Za7<=><<8679;<>>744jhg43ccc3`Wal758657888730369::7899:<;:878887788:99:865656896689733cad!354f3554hh666klmjh688igdaaabchkjj5j7869@CBBBA>?ADDB@ABA>=?@CFIJF@?<95b249?BA?CEC>;7i79;<><;<<;87999;=GLKG@??<@>>><7:>::??<>?<<==>==?@=<;=??AD?>?@>z???;::=<=??>@?@?@EDGNMHFD?km?>IJ@BOV[UPTZ\\YQSRNRRYVWQ:=B8s@HNOKI<=ABHLQTQPLIEC@>@AB;=>>;AEFEEGJHMMIJJLLGDcl>DBCEHD:;@FLHBDJLLF@>>FDBAEIDFHEEDFLHEGGDFGC>CJQTRQOKEGMRIBDHPVSQTRPUXRMMLJMONNPQPTPNNMOOYVKMOOZZYYSRQPKHKLNOPOOOMOQTMOXZ]]UQOLPSSLKPNZXRRU[][\ac```^021\ZVQR[Y\[ZW[X\ZWUWW\_^[XXa:^TW\VTY]_WNMMOSQSTX\`4][VUWTXYZVRVWZUVW[[URQRTVRSSQNQOOMELVRUZb3daa]XS[[YVYXXVPQTQQOPQPRRWTVUTY_fe46`YZ_acf^\[VU[NT[^dhh`abe3563aTTVX_a53Xgegda[bbYMFTVSTTOQMORTMF@CE@:DKNKMOPTR?2CJIHIDENFFMLMFEJHHJKJIMNME9d_`39>CA@CBADEB>==T=`8<9798;=;;799QHXc9>?DD@ALOYZRQVFF57DNVWS[_cU?AHNMNJGMRLP_`IKO[ULNSSOGN[ZWXURMPSSREJW[_aa_`b2fgffjcWa_[_YPWWQRQNJMQ=7;A>78BEFEHC75HOLMOQV[af24:;97:86445bdeQOKJHFUVWZVXURWTVYURNJJNS\bghef25[ai]7Xa_[NMQSVUSTWQKNTY^dgieb_cg`^[SW`c`cf7lehhi9=l`X^c`cbeggjnnlmmsoc]YZ]\\]`]]_`\_[aldZ]_bdhiea`b\TUYZ[]^^]_cc``bad^afea-?U^dgjhfdhfjgkwvrg[P]npszwy}xqyMLLKMLK~v~~OOK{~[}~hwy}z}|xsovzz|y{{}|~NU]_cih[XXZUQPQRU[ZTSRTVPPOUWY\\Z\_\^UPRQRPLMMNUQNSSXYL^LI9/U`ox<;lqqq@LTTWTHv=DFNPPSQONTX~~xsstzSKMUZVPRUYWY[XUSSOMOOI~~ukejjghijg`XSTda^`]X\^WOSb\seagfeecffjopphosrvoqwz~zzy{}sutsrm^`m|yxuvs|hrljmm}}{tqvcVXa[VTUV\__dtwa\`c`[\`fihknnpprtsplgdcefb`ab\]ZY\`ehrob\S1Xf]gmklkc[`fhntorqnkhgglhcca_cgc_cedff`\[\YX]bbijdab_XODOOQKG??BA919<@EZW]Z^rpprlkpmklkrorcZ\a^cec]YQRRMWUXUMIHPSJ}tqt_9]{z{DE|EMRQLOLGLJHL~FMHwurek]N>Zvovqedhdd`]\]VRS]RMNOyxtQOOPOMJNR_eXWRPNKwmlXkeHLz{zehuxiih_a^[c\tiaZWggYLschpjiijgd[etroqld\dbchkia`peJHLqoec`a\URMTa}cUXmKLKQOBDNMLHD}mejsqj|ypwx~u{FLzuyELNHFFFC@9f^cj7DM>rrjnesdq:h`;Cz|vszB@usuAD@xz~~AFBycBFGKHGDCNRHCGFHFC~z~zpfXNLXZKIWMKABLMQENEA3@8<@POT_aa_zAxobc_XQZaQIMXSMMS`gfd\kcpcSJK^[VJNZZLLMWJJMPPWyBkb^VPVWVX[]X\Y^[VSOROLTSSPX]PSOLEMOW_W;ELVal\Y\WBGNZ`WU\f@JJC{ss^aUkhkbJ`W[X`\S`kf_\Z[g]Zbuxk_WR\vykNkEEx@CAji{DGywij}G}~rclwsxCC}mml`orLSJJV|gnb\gmttaptx@lpLPECyrzwtAodm_^nrgWPgi]`]_YSW^VUVSYPL\\h_[USOPMa^eedY\[bbkej7h`_XMU_`mpgf8:lf]ZTNKLB;AFECHOG?>@EI[adkQQQTQNKLMVSRNJDHPIURMNPSSQ[UOTG@DB;BBKA?RORJGSUUS[XWOJDFLPNENPFGA8@BLNA:?HIKG>HSNGA?EC<42=5<6>QcN<2HRW7i<:dc@HFFHnCLl`IL+Uk:;5.8;:;;AB@?>=<988;:889=:87:99879B?95678:>@<::<;989<989jgi4fe4336gdegdehmied`e5775kllkigifiheedde0/-03.10/0232121..+*-,+)))-.0/0,,-3520 .0/...01322.-//--00.*'&(,.04/0.-.0.-68:97n620231/.///-./-1331/+***,.**-,.210///0-2682000//34641330.--.0343321!##"-0` ##!"&)).233/*(),S**((),+-,.-44/*('" !! ! 825520/24,+,.-0-)++*,,/-*'('%&('++(,*),,(%%&'***..+**+*((.,))()'((&*&'**''&&**)*)'&()('&%&&&*4*'(%!#)+''((*)&&%'$$%$%&%$;7!"#$%&&%#!"#!"#"A952/"##! $#$''$#$!63&' &*.,()+,,*$&%#&%*()'!9 $'&##! $&()&'%#!  ##"#"" $&$#!#$"!07! !#""&$!!$%%#!$!"$!#""!!#!!! ! #&)'&%$!"$(""'+&%())+-*'''&&'&&))(+)'&&&'-+#$$$)'&'$&&'#!%%%&&&'&$&'&&(*&$('(($##"%'%!#'%-(##$))(((*)(''($$! %#"#$$&&('&%)('()-&$(,)&'(&$"#$'(&''(*&')''('+*+)'))*)''(*($$%%'%&%$ $""!!&#&(,*))($!&&&$'''&###"##$&%%#%$&%$'(+'(&&()+.)()%&'#')+/-))(*("$&&('",++*(%+-(!''$&%$&$''(" #&$$%%(&!!!"#!&!!#"# #"#$#""$$#+,.  ! %.# +/!!&&,/()-"!"&))()+.' "%(&&#"%)&(13$%%-+%'+,("%,,*+)&#%((( $,-/0/..132340(-(%*'#')'((&$%&! !""# %)''((*-13(*.&&%$" )+-.,//+/-.1-,*((*/125543'*.()0/,&&&'&(),*)*,)%'+-024731034000*-1202463347 81.35242463698666;:20./3102523452414<6/22445q632230++/0233211463243623543,056:99797:8;!:87-',*-8:6')*+))-)(+,'&)..02110/1434:<842-,'./17=648<9:<;:89:<;:;>@=??><>?A@A@BB?AD@HVEECCA?=;;:;;=;9:<=8<@BC??=BCC@<;:8458;99><:;@@AA@?<889;B?=:@@>;888=@@<9987545656:;?EE@;:9@@ACCBCB@BEFJEGKQR('L&('')**)('%#CA=6-)3ADFJMLGIMHDKQVUQTQQUX[X[/...00/WOIMQQTRNOQWVXUSQTVRUPQTTPRU\MDKNOOORVQOUY[11-UKJIGIMMM6JW]`^[X\YJ6CDHHKWVSRQMMJECFMMLGIRSNNHMIHJNJMLJSSUUWZ.4:;;;98861-294VfLC?=ABAAABADHHG@DFCF?EIKMLSKKNOPEGFEF@48CSOIHDBC?G9A?=?@MQLJLKFGK9.3;64222577>@>85442269:>=98861+$,,-*%)2415B>=>==BA???DBD;5796;<:53010-4230++*./)EA=?25HFPRQIDIK&H'IKNID(.K0.),+O)*NRMK(ILM)+IHD&J,)RHCBB:?5-!L6F@C>54:7874451./8/-./SSPIECA0,./.-*,.6;22/,**PMKJHA94)42'*NMOMMGCDBHKTHJOH7:AQHBPI69:7;;8;2A;50,Z54-%?59>988:8707=;;H><83888;=:42=4#!#<:33474.($(.B6-)1%&&(( #(('%#B<79?=7CE?<@?A:?%)@>>#)*%"+(-2$*!<=8:4@491,"=@<;>!978!!>?B@"$B#>0"$&'&%#!(*$!##$$#EBF@CEB?90*(/1&$,## %%%' ""'/11.@>"?;2430+/4+)+0,*),4775/73?6/)'20-%'-.()*0'(*+)*?#9550+///02202043-,*-*),.-)04,.+)&+(04.$%*170//+"#(*%")/&&"=:<271;8;8'O7.3176.6>:3223;526BC84/,2AEFI:&9GN&EIJF&?!#!@8:C&&?>88?%?@939=<>""AD9:8.9>*/*(1H3=517=?A4?9hijda^ZVUZ]ac^XSXbghh`WWW^jol:@@6fb:?>87744897655faaa_bcabe79;;97898jb_ZUSTW[[\`35524426776gdh4fefdc223456443579F9polliggijc`ffeghgdfd`b3a_cdcdc_\c3655479]\ecX[_bcc7;;=>==7458754hgfe45:65i66434666554774456788998:;<;9::976544669:961.66569978644355335786579:9666579:7lhhhegihhhg44567789;=A@>==@CBA@?@@@AA@AA@CHJF@=;976547p9<<;:::;<>>>?A@>==<:766:=>>99:88:=::;??5g69ljkilkik89;7n88752123212258951^]^`b_^]Z[\^^][VUUTTUSTRUWVWWWVYZZ]]W]`_]\[\ZYVYWXWZ[PQSSVWVZVWY\ZVWUVVU[\ZUSTUYZWQRTPMMOORROOPLHKLNOLIFCGC:m?FHFGFFFJEA:=FGCBD<:=@B@BFFFHJHA>CFJJKHC@;@ADAALJHEFHCCCD<<@A@@=k;DOXROSU\bYMDC=>??=>?>4B:@C?;8?ABMICA6Y]77;FKAh67HJTUDINGIB@FJFMMIKRB:9CIMLBACCFPYRX[WZ[RSQRQGDFLLJLHHPRZYSVY[WZ[ZY`^USOUSLXRUQOOPRRTSNPOKD?CHEDGE=>@BBEQRPNHJOUZ[ce_ee\\bg46;9`5g^ZSX[RJGEJJFNOQSSVPKFBDIMQVY_`aa]^^TV`ZYRILE7GX_ac_VONNMRTVVY^aZWVUXYVSOSWX[[BQ_bff\RW\b\`\X\Y\ehjr:<>;9mlmc_ceb_bab^[YZY\ZY]]^\[_bade`[ZH_]g[^_a___ba_aeiiligTZqfeagcbdpomgfhpji667648iR^9T[\9?;CCCDIHIJLLPUQOQRRUUXY[]]^]]\^_`WQRLHPUWbi`]fjlmvohhgifegedeeeccfjfgnrqrssy|urtsropqjfjrqmefilnlknkebihkmlflsvwsqqnZXdccgjjklkjlkhfih`afkjhhnmkllfeacfeb`_a`b`^__^cikppnmmllmkkpqqtquvppt{xqv{}vsz~BA}}zvuvvsqpieckqmstv~wt|~~|z}}~~wyrwyovlbegjryy{|~{{|x~}w~}MSVVZ][USQSVSQSUUXTRONKOLKKNOQQRW^\[XTW^[QORXRZ\VU\RPSUPOLEKeC^Rfp>>=?HMQZ]\_]Z[ZVOPQPQURPRLur||~toszNROJJMKIFNRTSOPRUWVTTQLOTTRLyxzLumgia_bcbcaccd\Z]]^b]PST_gjndefpkgjjigwkdjjlollclmnrtvlikicfsxrqdm~{9|yzwqq|zy{popm\_ngVTQS[edacb`afelihknqvuqrurvsioolhdba`^YSXX\aee{gV>,PUWflmhdddhjlmnmkiifhlf```c_]bhgb[VY\]]^_\YTXaca[RQTSRGLNIAGJL>;7T,69>=QW_dutruuojX^eolnce`\f^bZa_[[QSTWUU[SJIZMHykrqUAdlPL|mDE|{JEGPKOULGRWMLP[OGHMLOKphsthcTL8r[kmukftsfa[\YWTNNLMMLKOSNLGISY_]TSLLJHoh[]g~NJz}xel{niee^^]\Olqegimlmnm]uxkqrnj`[pxrpihe\b_hqgailzZGENhpoh`[YUXM[hkka`mDMOUTCJMPNEB{n\\qurywqxD|rBPLA~?FOKEIEG>8_Tduwvngaej`oc^]^SVpwuor}FCEEDEA~|qvuv}CG~GLGEFGCHTPFCFFGGA~}{vvsnfYWZWVJHVRLGEFEGGK@@A>5FAOQJCB`_{}>rlfZY]^PWKMPMPQOSRTNS_`ecULKDMQQX[\QJTQMHEPZ\VfwfX\\Z\Z[YYY^ib[ZUUVTPKJQRY]^_UOPNGDVnSSUV[a`ZUUNZZZ`a]TX]9AEC{ynfcXXb`dpWUWYe]T`ngc_fb^X[dsxm^Z]\nmpxfimy}tz~r?C~xrr}DrysvEFul_jttvHBjnmflny|IMradkj|meovx`gCHFEBeowDJuihekt;>u[YXY^^`[VPVb[WZVRGOUPc^llWNKH]WebbYg][`leZ^dmeYNSWX__]g;8gfb\USOMHC>CA@KOIDKIG;GUZ]OEWUUMNTNOQRNI@=NLMYSPKIMCT_QMIIDCBBFKE?DKJJHGELQNOMOQDJFPMIQXGEE>E:NO>>GILJHA@EED?ELG>7XIF5?H]bOH4MIa=?A?_`f6:7/8:99;=;=;<<;9879;968=@;88999659<;<98::;>?:::;7658967fdede3cfchf^]`fefeg67iebeh686lkl +hgfe8994ec.//./11/.1122100.*'+-/2-)&(-/130*+*-251.,/.--,/0/-,1.-+('(*++,,1.01110/F9:89642130.01/011///,...00/0/.,,+).-'),,-,110/3343110143221 +`!" 32 "$$'/6;82/+,,)(''(('((''$-5/)($ 1@1556342035**,./..-+,.///-**)('(''%'))*))()*)*+(*,,++**)))*('(())*,%&(())(*)))+,*)(''(**)'&'')*)&''%%&'')(&()&$'(((&$" #"9 #$$$%$$($ 6:;;@=9 "$$!!$!!""!"#""#%&!2 %)))++-*)/*&&&$%(#!$+'$#"! !"$$%#! !"!!'$" " 1#*/*&)+.2-&"! "#$#" #" "#"%)';###%"#&&'&!!"#""!!"" !!!"%#!!"'(  "$"""#%&'('&)((*,*&('&'&%(('()%#"$$()((&$&"!%&'%%$#$$$%%''&%&$&''($$$''%#&"$$(('((6+(()(##'()(((&'%%&(&'&('&$()(')))+()')''##$&%&(%$%&&()'&(#&,-((()&#$'%')*'&#""%$&*% !" !"#%(%%'')*&&&$$&$%$%&(,-,*&"!$$$"""$%$$%# "%&&),'%'&')),*()')&&&#$%##$$%$*''%)'%#%&%'&(+-,(#&&''(#!""#$# $###$#$$ !&%#$%&((+- '+"%-"!&( $(#%!$%"&&##% #'''!"""#).(,.+./,*)(( $$#%$$(',,*,..+,-,+/.++)*($)%'&&&%''((&&&#! #!!$# !()((##%),-13032--03)/-,()*%! "$#(*+,+,)&$"!#'+,.2322/.-&&,+)% #!$,1220+(&()*+++-13.,-,.-,+(*-./-(03540-136041./-/457<7794155545464100/20022322452562/.$32<34453125422466k975))73427666=><876<980(3.00 "$#"#&%%'(),-*)+,,/03434454557880-.*).039=55<<=>D><<=><;;;:::;9:;><=ACBaEC>>BDEPCDE@=@FEA;<>>?>?BA=;@CDDB@@<01777:;<=>==?><::968;><<===:;8:=<;:8889877669>?CCA@@?@DCCEDFGBBEIGAEJMOMJFDIK&&IIHGHGEB>;414=B@EGFKPPGDKONUSRNMLKMRTVRQQQWWZYWSMNOVXQNRNKNNLJLQS[YWWWZ[MJVSRTVUPMMHJCFMSURSPPNRXXQMORXVXVWSTQE:>;57:>DNOMIGIJOZLHHLQSROOMIHGKOLJJGIIMNT/4546997436964576:552/-0/./223238=:9748=92`]`3485:<87<4_dbYWQOR\UPZ232.-,Z\WT\__ZUTVO(+= +$(8&(+24676433/*-../20/1,@AEFJB?CIMNX01.+--**).00/-0234321.,/132,SJEAEFV0c]VOGDBC=>@??@;>@B;;;::=713278?bUC;CBCECB>EDEEEF@?C?930/27;9:<;:;=<@?@@AAEDBEEDHB=ECB@?>=;;:983.213599HH8)-''5<@>;98<>>>?@?=<:==;788:657<=:437:766652.2::95.-0.-&*+)$''&$267AB@A@=<05:C@C<<88>8:48646/1233260*N*5+)C;@>-%8=OVT.+C>90.0,+%")'# "!"!$"#0/@@ ;85/.00(-&)+(,-+-*,'*1356/,+%(++212+'0,*'&+0/(5@7.2114220./19522/-.-*(&,-1236.*++%#0>-.,,.131.+(.+(()($%+#!??@;670/558>-.35:5/6?854;96349?A<3174<=;C8>;BGCADFDB; "BB@@AC#;C?<<$$CA=817<<=&$6::499BBMI&,>FJ25;8D>5;?A16#('&#E49?%(=8646= <-.,,/./,*$(0-+-+'"(*%0+46)%$ .*220+5--.41+-183,$'*+..,1220+('&$" !!#%"###"*,-$)')#%($%&(%"%$$,)'#!%(/&#!" !%"$"#" $&$%$$'#!'$ %*   $$!!"!!#$#!()&"/#$!01$%"")-:" (B/..-../,0.)'*/-///1/./0343111/-.ЁՁƀ䀅ɀʀ~ ܀逄~ Ձɻ󅒐ñ́ͿמǷĹú򇖡¼ȽƺԿĻϷ뀒ľöź׋ɴˬ˸įŻƽʴŽǀ´ƺζýϼŽͰȳǿⷝ߀ǔ쉌úɀ·Āǽ󀂇腉ö۔ǾǿȽúź¾û͗ȼπ̿鍛󐒌˹񈕙ػûĹļ²į䁇նʶƼѻüýīǶѦʀǾ댉₀Ĺϸˀ¸ѹ÷Ƹù®ˬʸͧɼ廋˪񍈍ǫucabdb]dd\Z:87:>:86fca^\XYU[]hi\_]YTUZ^XYY[Y]^h8;6fh78886454<66799875345786653bb233698774334454456789877876479;@F@97675476655544354579<;;;<;;889:88:::8887686j4567899:;5ecem9<;>CDFBABA?BC@@BBCEFFEC@>=<<85kimknnohbjjron7k9>==>>AB@@?@@=?@CCCDD@ADHOV]`ajia_\YZTNOMKKIGIIHT^ZSLIFCDA@=??;:>><>>9989:9:8688kjm9=BCA<;==>=;997889<:o99;=<;9:89:79:9;amml89@>gq<@BFDDKKOOGDCDEGDEGLFGIHNMMLGJIEDDGHCDIKMJKMNLLOOMBIMNJFGHNPPRSSNLMMJJMP[OJGIKNTPIEKOOOMLMKHKKLMMKMMPaVPRRWXUPLDIIKMNUQSVRVUUVVWSOSVRVRZ^_b324]Z_[WOSTUPQRQSSRYUSRWKGNPRV]VMNNOJMNRTPONJGHORRQTPPOTVX[ZUXX\^cTNWSDMQPQUXVUPS`cbcWRPTW\[^XWTOPW[ac][W[`^XVYURXXXWVTSSRSZ\YXVX[29;75`36f676fcf_WSRQRXcZRPLMSROJBJOPMMMOMJKKGKOH;DKJMLKAGMOLMNLRTNKEEC@8=K7@JMKMOJ7JQRTRTTWZSG869569=<=>@85/f:;@B?CHRLGPF@><;7;<@GGDEF59@OOOV]\\]`dbc_1:9<84fjcXUROOLOGHGDIMPJCDHGOPGBHKV\ZV[\\_HNNMPUWTTdc^YXZXOLORRRUNPUhVHGJQQSURQUNU]UVRNZaaLEPf`cc^__adddchk87jfcd`^]]_bb_\YXYTSVWY^`b]\]]\\\OTY_]WS^\^ab_\b_aeg76jggh]\beWhea_prhikglkk:377Vb7K=CCB?8i_89?EBDGI@LUUOMONGKMPTRVXUTY_`^_YSQLPSR[ba]ffggquuqllmlmjigighhdfkggljkmmpuy}KLyronmhmrvslflrqqsxxmjhgknkelrrsywwtrqlhghkjnkclkjhnopkgijgifkmijimrojhffea``_bdhgcabejoqtywuokjlpkinv~xwx|xrty|{ttuttywttwwtroqq~@pib`c_UT]\\RZVR`^Y[WX_VPOMJIMOP[UESLRKGFLV]fehne\^^`\\YZZV]g_ZWWXRPQRTLETggf^PY`GEW\IOQQUXWZQR[_[aZ^beccb;H}oo~f\YWWYgeaYWU]Wd^a_a_kaOSccesrT`fb^\\cbjgspdvnu}{@vmcswrqdu?~{xq`Yemrlnbqunzlskps}}UjqjwmwrsactC?>@tm@?}vkemmxC?9SRGMHOKGBFEG=JVA>NOJKJFCMHB?@?=<:=><::88;<67;<;889778695:><789::999:96&/% $&&!4.!%##&& *.-+)*)%)+/2.02/.269872.-)-/.5963::<=<><=<:;><>>??CDFP-/RIECCA?AEHE@<@CBDEHHA@?=>A>;>A@BGDDA@@=<::===<6=>=:>>>;:==;?=@?<>=@DB@=<<<:9988:<:979=BDDEHGFA?>?B>=@GKIGFIGBDIIJDCDDFHECFGGHFCCAE ;8:>=>EDFIIMOUVSQQNLMQNIIOUZURNLQSY[]\]]WUTRNMLKU-YQPRVYZVSPVX9MUPP]\XXTMJNQSPQMQVSSQOQHCCFJLPOHGBHLSD:)(8@WVMMM7NPOOWMGEJOQLLLOLMKLQVUVYZTRQRS,./04543356776775:5253160`a`ZZZWY.2376543248551\]__XX]XWQLQV[/..0X,.XZZTTOLKQQY[.-13+%=:8$!9!(-3467<5.,+0+,-,-+*)LF76<ALXUSOJOPWLDC<<:;AHBA>:32337985104C<_?>CHDCFJF@@A789;<C;5;;9@AGFHGFDKOMRMGCCJLIIKQTMJKFFA>>=;:@AA:10369=BA:9>@@ABBB>?AACDEHD>:;<77::878767:;6637>>A@9-'"%3>A??=<>???><;:8;@:;95566;:<:66;:66763236==53-("'')-&#(%'*(4439<>=A@; :8>G?<5878?=;3<<:2/0420163,N51*JAD98@@8UT[14+BBNJJGP(,KMQNN++11,NG.44*(,+IM42(%%+-++Q8BGC=0('2,9<@99LB9875310/,+0,**RPUDI+/3,'(MJ150142/,.-TSQJHJB52:&)'&LNNKIGFECOIHQICA@<=DDRYF85770.013D96<=:659?N@::;851/2573=<7.&"$1B?70,4.+$/6:?;5 */.-&&'&%%E@9666;<9=A"%"A@"##&#$$(#"" %6;"AA@;8981;?80,/...774>A??C)(+%#"##DD=?""&#"#& ##"#&''&%$%%#DD@@BA>?::0-..+$(&%$"$)+,"$ $%6979!95304/))000)1-+4//0,.5-,,,))+++7/$.*.)))*,-42595100224211/2:4221/**,-.'&.9874+27%$/1'++*-,-/)),,'(&&(,,*-%@@88D92200079722052865464=8,.:66>A.29754385:7=>4?K;>B@ ACE?<4?>:F=3<=7C:>;<=BHBNL):=8B?8><=33<%#!#>;#!BB@83=8>"746-*(+-,,(,.,+*,(&((&//.*-+&#))&-)$/0/0/31+-05/*%&&+(+001251+'&#"&% *' '#&$# )-#$#'##,'(%&%#&''%')%$# !&'%$%# &! #'$!")!"$##%("c")#$ """ #"&%!$%)& -(-#%!)+##3!9+!"(7,,.0/-,)+..)*.0.-122.01//-ׁЁҀ倂̀܀ ۀ适~ 뇊」􃌌˭􂁀ĿƶƽĻ򀎚ƽƻȺѿôïςɿĽþͿǸù򇉂񄊆ʻ¿ĺ³ɷ򊣰ɠθпӮǦ½ѐĵ»ɲȾνϻdzǭŝ̽׀ʨԍ邍̀±ˀżƀ􁂅ၕοİހɸõ¼ĻƭĽ߀Ǝɷʿ󁁅ɱ»킍܇彯ɽƿĸϷ逄ʿȿĺ܍ҷο¿óſɀƾιƹ͜ĚϳijſҶžDz÷架ѷ􁁎ͲĐffdfgd__``f::9=:68gf`^[Y\^\]^]_]YXXRUTYZVY^b69ok7643345g5;<98654he`__]Z[b6;=@?>AE=99962d34557:994e88767755h4666755423443479:8DFEDEFEABABDDAABCEGIJGEBA>96ec]VSVMFHMdp876::9:?ABDCDA@ABDBAABB@>>@AGOXZRMQPTVY[XVQLJJIGIKMY_ZYPD?x=<>?@B=9<<=>>=<;768:;986j59<>ACA?===?><:88989::;qorq9;=<<;887b78568?A8==96jfifdgjigdefffd]\_ej434335466258740///0/0bb`][YZYZ\VYYYWVW[_XW[ZY[\_`__454113677653_\XYZXTQOLOLNSUV\b_Z]YXXLJKTTWWXYVUPKMJMNKKIGGHJKKKGECBDJJFHMLJLKIIHECCFGJJHHIFED<98;<4[[b5>AFKJFLLC?D[VGGLMMNQQRURPLJIQTTWYRQXZV\dXcW:@FHHIOTRMNQME@8//358>AAFGRSPA@DKNKRX[QDD?IPJJNSUVZ]VWSPQJFNPRX_i\XMJOKLMOOOQ]`^YWZZYWVXSYYUUWXVUXVTLCICBIJHQMFHGMORUVUW\\[c576448;e^VX]]TOM[QJMSSJL=LGUJ6BGNYXSYccRDI7GO?QXZ`bZWXRKLKOOPQUQ`A/IKKKMNPSTTWRV][YVUYchdZ_gtgd^\^]`]\^]^`b[Y\[[YWVWY\]]\\\^ZTX\^^_aab^WS>AAXa`__^]]Z^`aac```dghc`bb^`fheefhk:lffmsl799:9eO_gY7Z\\^c\5<>BBA@BF?KNKJFJNSRUTZWY^[ZYXXQLNSQLT_bcedeemlnswporwxunqnljhinpnjhfefjmpz~xyzssphjikhhgiiikmkgimojghgptqprrsojnlkjijjlmlovwutprqjhdadijpmgejnligfedcddca]]beefikrrsrrqjhknnijmu|wtrwzz{}}vvuttvpnxzvqqiebhkiirstxxwyzIIKN~{zzsokgg|CDz{||zx~MOVVWX[ZQSRONLKOPN}}|y}}|vv}MNNLPQRVWPLPXVPORQHMU[YWUTOKIJKKGMI||~zpkloKI}HXYSTLMNR\^PLMOOQROylhi{{`]VT_dedd[FIPMMRVPW`lyFVUyltrjgjwuknde^^Z]abcecjtcZ]^hceqrojdjhkll`nqpnngmtpelmixyytmikidfdaa\`bZQSXX`gecablsjeab`giikkgif^\___`a^`cd]]ZY]\Z]\dledec_UOVQGZhkmoponnnkid`^`a`cc_^ba`a`_adhkd^[YZWY\XWXSGLMB>=:e]=@uCEk[X91]1Q1DAWZkrrrqq_>clpid[dk^`d`fddcYMKLSWZWXRJMeOw}noh_pMNNVLvxDOWL}GMXWJVaWLGNLEEGHRIHQPKPK|yul\LBn>5nMpkhm~wnj`WQLIPOTQLHIJPXXSMKLGQ_]VWbTOMN~|yuhlGHFG}z}QystlyNha[\VKLWeessqhjsod_airswmmifilqt|pdb_^]QN\`linif]NOQbveYTS_`_agjluwyxTVORKJHFFE~n|Cb\bbm<>ABy|EHDFGJB?95>@FEz|CB{|ligkemwg`ZbZailggsqfcpABHDDFEHHHDCBGEFECBIJIGHDHMKJKIGDA{yywvumcPSY`\SVWXZVRKLE=AB?xsysne_bjj`kkbb__Y\]\]QLIHITSRRSWBNPIJJLSdjc_hb[[if^[T[ZVUU[^^YX[TOGHYVKIYgfb_TSOORQJGMRQUYWUX[^`_\UdicaBHz}}nov`TVN^Xdlh]YWS_jaTZ_\a_NWcbdrvgfh`_ffb]lffobwwmvz|}{rqoifnjmnitnwmlllc`|to^\\hy{u{lwuxproq}g]pu>sv{vuzogfw=skkx}?wwskhqonbqk>oc]\`_a`Z]XWXTURPNKLid]X]XRSWZTX\^\cc_]el`iicacdXLUWX`g\[_ncXTOID\`D>:LKJRRROMD@HXQ?GLZVHJRYSLLIFHVRUQOM?AEGDROSORXILGLMFNFELCEB;JROJFEPL@IGPRFEHBCJIC?GGHOULGECDIH\C>B=<<==@=:8778;;99:;99::697666;;9789=C><:767,66975efi4ga]_^cgfcggb42355ggcech777564e49;:5E/0/031...-/22..,+-/-+,-,--,,*()%&')+*+,-4300/-*+- +,0G!##>:520/0..//,,--/20/,,.(&(+)%(  31031 ! .-*)'+('()38$)./*(++/02410.+)*('((*040.)#!= +2 3356*324323432011,-/22 $--.,-,-,,,)*+,*)(*-+),*)*+***)>*))(**('%%&#%(((,-,)+)(+&$#'')()('(%"%#%%$$#""#%&&&$#! !&&#$&%%%$##$$%%&&&$"!*-2!#'&$')$!#20##%%%&)(')('%%#&()'(&%'(#$*(/+ #$%$$'%"$%$"  "#$&#(.)$%%# #%%! !.%**&)(%$"%($ %!B#" $$$& '*'!64""!"#""" !%#!!"#"##%$# ""!%()%%%'&%%&&$"""##%*&##)'&'(''('&%%&$&'%#%&$!##"*(&&&%$$&&%&%$2&(&%(%$$"$##$%$%&%''&')(())('$%())''(''&((&&%)(&%&)($ #"&&&*&$('#$&&((&#&$"""%(*,++**+(%#!"%%&&"#$()(+,('')**'"$&&$&%#''%&&%#&('%%(*()'&()'&+++&)((**'()(&*)))&,(((&$'%%'*(''$"%''% "$ !"!&)'&%&#"$ %(%%,'""$"!&,"!#"#%'*&'&(*)(. !!!  "   ! "$$!'*("#  $&$,+' "%&&)+,'&*&&'(((*+)*'&)&%(()-06.+&&(%%%&&&(-..,+,,,*)+(,,(()*))+*)$ %"!##"'$!&& %''(*+*+,.-12/+*,*%" *$ #')"""'$"#&-+(,21& %L%*)--13/-.)&'(***),+/%&((()*,-,-+-0/.,,/464.26541/1130021124003320..//1101.,/23212341*'*1344234234246222576433302554689< ;87;>;.$-2,21./40 ""#!$% )*'((''%),../.200434532-+,/.*087799:;?AACF@AC%EEC?B@?=;;?A@>=:9:=@?EMJJGLQICCA=?>?=>8?BB@=@AA=<=>AA<;98:=?B@<:=??><<;<;9658:9<>@EFDCBB=>?A@>?BFMPNMLKHGFDHHHKMLLGHGFEHDCHGD?=<;;>B?@EFHHQTVROPMMMJHIIOQQMKJKLRWRQSUSWUPOKIIJOXZYWTUWSQRQ]\U^Z__`b[XT+x*,/XQDQQQSOOQSNJGINMFB@==JNTSNL((PTRRVNMPRY\PLNOPNJKLLOOMLMUYXUYWWWTLQ\1_2fecgppl8887::3652^XTXVY[[cba0//341]XX\]^gbYWOQMNKEEIQQTW-TW01.ZZXUSWYU[423450-/4/+),-'-165332/,++*+W+.,SMIKHIA8338JMKLMLU,+NHNLF+43/1-004:8-S,../00/[POMGGMSRG?=>LZJ9945<@@A?8Y+,1./23-16ALICF=?;<89>@>>=FJ=8;;@:=CB?=;AADDA:GHFEB>BF@:BC=GGJFA>@>;=;:;7<<81235<@=<:;CF?><96=??A>=@=8677999669:6633532305:7:::4-&$# /:>@@A?>>;7566689668767779=??;76442563350(,+$" /,!">$$4*%&!22=17>@=;6;?68:7;:<=6--.348540+,=,LAHG=>93=V./.2+HBEN'N.3,MMKIO*O-52*L2;2*'+)&())/''--*.*ECB=4)#8>,C<9>GD<<60.+(-,/-+(*QSM),22/,**'.6302:0+*-UVQMJMMID?33&'''NKJKGEGGNDL-HFA@;BGL/M:5252+,286B<<;9AD>76775,+4398=:60%#%1?60-.55336;;?G=>;-/*,'&%aC9A"@0.33;"""#CAF@$%"%%'" $#>?#!>C96684;B83.3.16:56<:53;"!%##$#%&%F$#"%$%%#"%&%$$"%('')(&# @BA|:2(-132,--..,*(*& #"+('*1/6B:8 =;?;8311782;9220/-0223*)(()0/.,.1#)+(,++.9:2171.07523.21///344214/+$&2.)'19852-+)(*+'%(,)C()))(&(#+/,*"%;>@;:>4-/(319?<532-8;6.06365,09:;CD:89239:74<67<6CA;>@;::86:5::7>8=887851D<70028@?;A9@>@==;=C8/:B?>A;85?!>:7?A!AA<97<99196!92--./11,-+)*(((&%##73.,.+))*,(*,++/0..06.12../0)")**.0,,-60+(&#.1 $$#%&'%$ "+("&.*!!%+'"#"!)')(&& "'#'#%* ##%!% $!#&&# &## #% !!!"   $'"!  !$#)!'$&'$ %*'""61.  $!(]-.1/,*+*.0/-.0-21..-1/׀ɀǀ耂 늄ļY񃃃ƀ׿¿÷ۿū˴΀ɀIJž򘰩¾¾ſ½ՀҼĵȀ􀆆ʾʼҽ̧˸ӫʻόö൐㌑ڿۀùĦͲȿĻꁊƲ߮قĽڷ֣ŹҀüǾ¼¶􀁃ꆛ»ƳºѡƼüʷòƾ¿ӑ綴;ـκ̳ڀϴǾ؀ɶ¸ǴŴ㍍敬г兕䆙ĴĀ·Һ¿ɸǻž݀ɺÀƧù޾׵ɂ΀ķ̽ǶҘ֭¹Ⱥպî٨ȿ㉡ռ揭˧#67hfckjc_\[g;76668hge`\WSXbd`YZ[bd`\Xafb^RPV_]b[X^bk64eeg4ii:;98786hle`_]\[^h:>><AC@>qm776l76jeccc^\`_^]cgfcYSX]`675425a[b784:9iefe^XXa45677565579::;87898685367456665577654$55876557678::617=:;=;:;89:<98:;978987 997678:<<;9;A@=;97::6gg4665679;;77:;=AFEB>>?>?>=@BA=<<;;=BEEGD?>@A8d]Z\^`a\^gi6669;89AFECB@>>ABDA@@ABBAAA@CIQTMJIJMTYZTUTQOLJFHIGP[YYRHD@;<:=<9::;=<=B@===;75799:9877;<>FD@?<:<>?A>>D?<:=?;9;qp<=;::<=;9<:GMSjlTUVROKEGIJJHEGAY;cS\cTIKHKMJJII@j8@DGFDGJHIOKLIEIA:AEEDCKH==ZnA@BDFKKHEEGLMKJQPNOKHGOSUTQLNNMJJIIJIGIMMJIGEKMKJJJHIKHHIMLIHK&HDFNLJKLHHIJGIIHHHGJOUSOMMLKHLKJJOONMMNPQSUTRQQMSSVSPQRROR\]Y[Z]bb_aY[^^ZVRSYVPNPMMQ44\WMHJIHJSUVPLMONNOWTPRTZ\^]Z\^_ZVVQQJDLNQSWVX[][`e443_ZVTWYYWVWPRU]a\c975`ieab\]dc`]\VTUZY\`6:`SUROSUURPSV_b2343bb^^]cbgf`]gfbdfjlheVSUMH51:;k2=GJJHGJPSRRSUYSP8HZ``XMC97:@EB>be9=CFGEDHMNQZTTQPJOXZFSb:48<@BEGB56BMMF@BAC;^6:>@?;:89=?ELSMCT^_XFMPVSNI<1=6=Q\=WAH1GKDBDKGJR[^\N=G^767DIJMOTY]YWPEFKJMTZ]ZTUNEMRNPRUORWZVZ[]_YVMBOTW][XYXTGKSZYSWYUTZZVTQYRPF==:94\fXB^EL[bd8<7>zrQcqomliltsmfmkmooollknt{||ypnumiedhfhilkhilmkiffcmqrmmqomifddegghhjmnoqqllgjfdfcZ^djkgddjieiqrklmefc`[afjlkhikotwusrrrpmqvwz{wvqkmuy{}}ywspru{vpnide__V^hkkhm{|uuz~~~z~xmmx~MPROM~ppw|}}|~MRQURPNOQQFp~w{{uokrqrx~y|{|~}vsx{{~}~W[XUURPwlo{~Pwx~{z~PPRXUTQPJLOXa^[QJGNLFLun~u}}|jaeimoksuyJK~K`[QUQMSYa_SKQUWSQQMLL~yyqryujebVPZbiXQS]WVXZUNUiLVRqksz{{koic\\geclqnpiglqfhzyuigmomfi^dkirshr{puVh{}pgihb__^[]USYUU[^VYa`_[^`]`deantlj`_`]WWWXY[[`denpaUZ]adaZ[ieW\R\]b_MCE[komkhnlhkkaYZ\\[]`[Z_]\``_^`cdb`Y[]ZY\PGSVFQTGhhpcXHiD??6g@960+=-7VTVZoljgjrgox~la^ehdf^cf_^^QMIJP^aVPKSX{~k[lzJSPUx}EEOLEEMZ]NPPEFFLPHEL\PLTOMMvop_IKU@:P7Tslqx{vndYRLJJNKPOKJJRYYOLLJNR[]g_^WMOUStof@YJ|s|TOylthxg\`ZbQYYcmgm}yvpqcY`lquvojxpljflotne__ZWNS]Zislgh[RYdhm`YWXflmjjkkwqt=TX]VPHGIGCzjEGuealdGRzDE~y~BCD@?rl;}ABzAC?~sekimlsjhVQYUT`qejhmrhkr|}KNEEGJwzDNBEJIGKJKIIGCBBCEA:`^z{sqihYZ[Z]WQP\YTWPLHAhEG^n[EGKRQIJOROLRXNKB;>@FPJOJLLPYJQJGQNLLMHBAGIGNKAHKLWLVXABGDHJRO@GCNKLLFCBDFDCA?@DB\\8HDFF_^JJB;CKJ:@7jgm]hd[:G;CF3BGIb9bDd56:<=<<=;<>@=:9767?><:;9D<;9;;876<:77;@@:799:886:737;844h68kcbZZbfbb5:844644456h^^g87542568<7e01/43/-)',342--+')//.++,0/,(&+..-%$)/,/+(+.0///11/1/-,,+,,.#".V-0/0"$%#!;520.-,-,+,++,.111-)*,,'%(.-01-+*+,22 ,)+,//45456#)+(&''*/00./,)**(%''%*/./+$" 330.2.001311211142//20.(--.---,*)++*++,+),+))*+)(&+.,*+)))(*+())**+,,.*,+'"%'&#$$$#$%&''&%&%#$%&''&$#$%%$#!"#$%&'(&&)'##$()*+($""#! !#"""##$$"!#9A0""#%+.+&'(()*'))%#!%%'($!$!" "&'28''(&&&#$"#$""#*2&+0(!#"$##$## 9"#"!#$##&#%#!#  "#/8% ":35%""" ! !#$!! "%$"!%$#"! $&''&O#%&%##$%%$"#&(&%$!%&&%&&$%%#$#&&%##" "%%%&&#"##!"#""#"#%((''#"#!$$##&&&%&&&%$&'(&(&))*(&'))&$''%&%')*()&'''&%#$'&$$$""$)'#""#""())%$%'&&',(%'(,-+*(((*%$&$#!"#$&%'**(+-(&#"$&%%%'$%&))&)(-+))%'***(*&%)%%$')*%'%$'()'''&)*(*((())--)(..+*+.%&&! + ""!!#&1'(*&$!(++(#,/ "$%'-*)'&"#(+"'/ #"'!#'%(,)' ! !!'''*)#"#&!"'--,"$1"#$%&(*,+*'"#'&'*--+),)$'(%%()''*,*-.-/-*%&'*--+**)!$'*+)+-))+,*&%)&%!!$%((),))*+/3//01/,+ $&%%#!!#"!"&'+/,*!&%#%&**+))&$$&((**())(,+(*$%,+,--221.*,14244847634300130...*+.--/02/-..023335620/23320251!&&&",.1123334320257778<7225533577568:>:>>928*0*!2(+333 $""#(%&),**++',-,+01/02/022.,*-+*/4553366:==>@?AF$E@,9A@?=;=B@=9>>>ADIJJLGA?B>=<=@==;:99<<<=<=>?B@;<;7478;>><>?ADDCCBBCB@CFGJMKJGFECAAEGIKLIIFDEGJGBB?:;5417=>??AJJFDIMKLLNIFKHBBHKKQMMNNRVTONSVWWY-010,SJF??GKMNMMNOTQO`03a\[032/-./.(@OTRUWPIFGGD@?EFDFJNPRUYYVVQFGKIKMRYPIEDIIHMPROOONKPU[VTQLPKJJRWY_d^\a`Yg9:75644bZ_[X[\^]]ZUTV^`^\WUTQUXYXSKCBLQNTbNNQPWZ`2^ZUKGILHHKNPU[1017520YZVY/+,.6=73.+,2/*PQOQS-[VOB?IDIGD5.017I<=DEFQT,,IFG,:5.0--3;?91-122110-[1/KDCNVVSIDEKVRD>:9,-4:?41383331-(-=P/3.K?>EKUjaVNLOQCE>=::C@AA:>KEC<8>ABGA:EHCLVXP3BOLE@A?<99758226338747;8978978<=;DE@@88962122445888@A70458<866=726-6460#"2<@?<;@>=@?834423792574599879<<:7245557-)24(/0&799+&3$. &.00=<;::@9?FOL?99<<:<69<88:1.++0:<2-+O14ILDSF;1@G-0UQ.2KFBH()PQ/,OKLMP''-45,M/.'''*,'M(,5,(.,+,O??A7(*1 $/D;>715;<>?<:C<;;9>@?>97642+/3.7?;68/(-36-;30//8<<:9<=#* #%%#%%'&&$!"""#C!+/DD>=87-13340-,3.,.)((#6%$-'-0+231046=! >=>88869=9>>H;730268.2,*)('(-/2315+'(-,/1A1+/=/,-02/$%52-,)&)3+-1-,'&,22301:4.-,),/()(,,&%'%$$&%&+-##A<;7795/1.*/4689.23.<;98.-.45237>>:7/<@301.&+6::;DA7=?A>;0==0=77:<3763@<<8.35%!18<=BC"AB?9753697@:8=87;=B:;;:44325=31773+684.-+*(()'&$ -1,-3--(*.*,..*3<,1&.,321-2" .*-/1*(*-2++*'& %'$ (('(($#$%."#/8, "&%!&)%#'+&% $!%#%#%+!&"!&%##$!"! ##"#$*#(+"!!'$$#!"#)'#1-"""&%568+30)#""!&%'B03-,().1.,1-,1큂~݀ƀ̀ +π +倃ԀՀ +~ ξĿǼŭýǿƜӺ˦ƺŽɽĹʾ€ĸưǿĺòՃĵրġƷƽȿ󅌍ҿՈކȃΌ˵ƾր螿ΐķĽД׬䘢Àž􄊈Ż녌ʲªɽ˼ɵ¶̿呣ز֑ðӬͿᇒմ̈ߪչ˱ꁎ׾ŻǭƯ􋔕;뉕߹˽ƽƹɽµ㯞ƴɺö˿Ղ󇍄ºĽƼƭ˻ȻĴ𢷸ں滶ĆgΊ׈􄅂674fcfoknjbZ^jcdijgeb``dfcYTX[XWbinkd_[]jfVNNPS\\^bk655edal89:77668887jfb^^ae7:=>@FGGB<7564445688986779:99:8876655667765hff8=967S89<=?DDD@:mki57886hgfa_`da_bggfc[XZ]`b1338820265675dgnrhcg655444567:;:<===><:9965445 +677679:8754]344hfe45789::i8;::;<==<=<<986879;<;:;97898:<::<@DBB@=;:AJA<;::;<9567778<9876n79<9;pkpqq;=88;:8;>:99=B@9mj57::;:;?AB@=<>CCCA?@A@@CBABBBDGHFGHNNS[ZTRUYaXYMGFCGRUVPMPRHC><;;:;;:9;9:{9545877:96899<8n7:::9:<8:@?::;::llko:;98:<>>==?><;D@<;8557@8jgefgh65hijihff2dfhihe22g66561a1432211015533422321ba^`^^^[YYYWWY +[YWWY\`]a]\^133662[UTVXVQUXUYaikg4ddd[UROPOMMMLLPPSVTSONMMNNUZWOKLMLJFEEHIIKNQTQGJJHKMOKJGIGDA<==>ACC@CGIHGED@>AEHX\bULOQRTQPUVUX[XVSKNL>_BT]aUJMG?AAABEISbnaSUJrg;PPLKOOLPYbec^QJRXYUTRRNJIF??@GRNIFEINPB@FEDKMQ\\TOKIH;gtBSRL?:@ED@DEE@CDB;<@BFLTJHFDEHIHHJPOMHDGKIJKNOROLKIIHIKKIKHGEFJHHHJHHMKHHIJIJIIIHEHKGFECBDGHGHGGIOPNKLOPKNQJHMMKLOQOMNOOQRUQQTRSRSPMSUURSc]SQRSSVX\Zc121]^b_[TTQQT59aRQNLHHJLTZ[]ZQTOOSRGFRSS[XWY^bdee^UUSILMPRRVVXX[\\^c354cdddb`b_XUV]e6g`\ZVWUSQOPRQPMNOPQTPPSSRRRQPQPRSOONPTUWUX[XUWUTVTYWPNOU[WZad\VT]\RM=4[h4>PJBBEDCHMKMQTSKFDKRVZSPMD;:>G@c4?A@FIECEHLNMSTZYXYSRS>S`d2358=?><?@==<<=>;858@BEIMPQ[_fd[XVY^ZQKAGCA^@DZW)=)A[;@=9;>YZ`bS6MWO7=?GLNOORX]VKJMPOPRUWUWUTUVNINSQMOQNPQTWY^VNOOV]]`]Y[UUZ_ZYZ[YRMNRSUTSPJ@;?CHLNPUSUWWZ_]]^Zbe^]dj696jde\XQLKJMLJIJLNNMLD;O3C8C=7R/9CFJTWRNMMNKHFIMMPOQQTRQQUQTTSXVPQRYWZ\ckkgeijjjfcbab_^`]ZWUWRQPNPTTVVVUWY\\agbec_^\[[^a_bjhaa^\YXWZ_a]]__^YYdjkirmiggcdgk6mlmfiofcm?AD=>>6[CGCCOSQQLIHPPMQSVWZYUVXZYVZURURU\]aagolmqy~y==qtroqssqoptvuohmnojnmjnrvtnommnpsqmjijnnllnlkkmhenpknopokkhccbcdddeghjmnjhdfjddd]_adinllmmihiejigbbc`\]fffifehkoqonoppopppquxxvvuupqpptvx{}torwznqtruqgnhfhoqmr|zy}|ytoq{LRTUUVNysssvyyywy}xOTUQRQQSWWPI|~|~~yw|NK~xz~{zwpirz{{xy}zz~~SPSSQOQUSTVTSLUb_SRVSLIINIupqt~{wperzsuvnger}vrxtlxJRU^a]YU][XSPQPPQPOOONs}|{tw|xxmZUj]RMNMRX[gijqKSQxtlmrvnjhd`Ycjeolkhehpjr}wpsvv~}xpry|xjgs||vna\a`^[YZ^d`_YX\a`[VXTPRUY`abhpogdbjjg_afjedijifmbZ\ZXU]_Zaphdljomhic\gknpldbrjc`]ZTSW^igebcba`b[XZX]bb_^abXRTJMQKBCEqqzpoaQ;BAGYaPOU[(C0;7YVdosijosrt}e]Qehhf\bia`YRMG[WORMLNJKI}l_nwVMOQEFyvOHJEFEJPUJEFFPLZNGFS[UOQNMLta`x^GTKN1MQnlt{jwzdXNFMROLNRPMNMRWSM]a`_ZTOQVZQPL}z{{KO~vrmJQfebhfncYs\sgrmklifhqqwpkpstf`ltrhecaaVOaY\bjpnhW]qoeaV[[]ntojihgt~gkA\Z`]TLKHGBw@F>uuxvhPY|G{uxxDIKHBEB?@zz@@BGEBAtzsgidhkj]ZOSQT\]\[^dpnlxz}FKDFDILxGNGFIMLKIIHDDBCB}jZJlyqpii]]^WTQLPUXQROPNIDCMS\aoujhlahqvwEGC{wyrkpromkglvqjdfeaY^ZWXVQTZY^a^`cdccba[gib_eYV]WUO@GW[RIF@NST`_SOQUY[WNIJYZKXb[Y[QOMMOVehO>ME7IZ_mp?BCB|seheVY\RV`ZLY^]bZbb^Z[QXZ_[XCH_]]kaq{g^]XMRZnnxdcovxppoilnmrtmtdfndhnbnm`XmAinH@BBu{w~|wktopoqtvs{yplxyvzvkwvspnifmvvimpkfa^bqeg_``_ZZY\XXWSPSEOY`Y]\YVQUVRUXY;Dfb`^ag`dh;A=iec^\VYZ[WS\VRUPMNID=6BPKOQRJ?IOIFGAIC@HLYm@LLEFFHHA@BMKDJEFNCBEEAAID8OVTG?E`dJGE<;AD9;;cc9Yb_aJ7<@3,V768::P73^:=<=A89;>@=;;976<=<98988E87<:;>:859=<97::9;<;;964597468765dbdjgb]ab_^g763555245996a__e56668987;/-/3230-((1-.13220//241*%'**)/241,*(*21(%%&'**+.10/-310.,+.0##  111 !"&&&$853)0..-++,,--0332-)*+++/1691.0 ..--5#!!$3f76766"!53"#"$&*)-31,-/0722)&%#$*,+))+*# 2P1324"0121231123321224310.-.-,+,--,**)(*+*((*)())+,*,('.&&+(&)+*'))((+./.-//+)(&&%##$$$''()'&%&%"),)&$&&&$###$#$%'(**$%&%&'('&$$%##!""" "$&&%#"! "$%/05/%%'&&%%((''))'(%('2%&'"!   !"$'/60&)%=8**'&)(&',142-'#'+-))((%$$#"*&#" !$'"! ##%*+&&%&&6="**' s##!!!" !"" # !%*#!! !!! #$$" #!""$%&&$#$$%%%$%&$$""%##$&$%'&%%###$%"$#""# %'"#" "#"#"!#'(&%$%&#'(#"%%%&&'&%&'*)()()((%%)**'%0+'&&'%&&''+&&('&$$#%&)#$$" #$*-..-')&')("!)('+)&'()*+*'#$# "#$%%'')(()*,,'''(''))'$$'+*'%&%&&$$#"""$#$&&'(%%&$$%&&&'%''%'&&(('%(('&%('#" &*&(++)%$('"!$.&!!$#$'(&"! #&(*&&% !-!"!!#%%(*,,+)%"#!)1  !#$''+-./*'%%%"#)*#0 # +)+*!!42  $%&'&(*.*'')*)))**)***))%#%)('')'(((+,.+'''+.,.-,-++,/,,+,,)''()+++(%  "#&'(*)*-..1001-01-.14(310,*&%%%'&%%%'))('%-)"+#"&+.+(7&#"$''(())*)()+)+++.-+**.,/1377558666444332020/-,.*)**,-/112146352011101212640120/00135212320079:9=9787457888:68:67= ;59(,$'865 ! "# ! -%'#$,,*+&&&,.+--..00/1000/30/1./3477;?<=AGID""@CC??AA@=>ABA>:?AB>@>>ACEC?@AAA>>?ADDA?=?AA@AA@?@?<;@A>ABA?==;987889:;;<=>@<:9;>::945668:98:>=>>;>==::;7449:;=;;<>?A@AAABDFHFEEEFCDDBDGILMMGDEHKEEGDE?59;<=@A@BGFGPURQSSLHHFDBDJLQVPPSNSWZZ^b^WUW-23345/PFCCDGJLKKJKLHTY]^1562100122,)OMJKIHHKINQHKPQQW/,VVRQQLIDDHECKUVQEBBJMLJGHPROMHIMQNLMQWTVUXXVRQMPVZ\Y\`be51243]VRU^edcb[VZ]_2a]`^[]^VQONORY\\W\[em`TUY]aa^_^ZRRRURVWWUWW^WX2522652.7?;0121,*RT-1,OA?@CILHIB:ELLD?@A930;LHD@EHNI<7A+017:6449851/0/0/./020`YK?EGMSLIJDENPIHH@10;0,)+)*.2;:9?Q,1.WWROHQ\_^ZOHDDIJGC><:4BA=;;BA=7:>>;;?>>;>8563105649?99>>CA;:629;=@=9:D<98751.16<<;9:9::;44559<:789:2/2+..+&&'AACISO:60=<<;58>8840,SJ*84.0-,-*)(JD:4?F[4-HI..$%ABILKM0)*MO)(P(,.1*'(KG&.)4-''03.+,,++PA67@2'.$!,>;AF:DF8/)$+-+*,.-+QV,*-21[UTO+586531-.04-PQUURONHIIJ-+LONNIHFEEDKN*-NJE@;K*/S797;9=5.52A9>FID:==<:8=:=AB84=B>887780,80228>=8-1<;44,002=A>;<;8?E311042,&&%%"<"&(%"%#!:=8:58:;40&(&'*+./04;C89@@DA%($$"%(F=%)$#$'%&##""!FGC>0'!9B;<87055/.,+-/1,+*,+'#!%)039;56828=??B$%">=>;5998976:B>:6785040.0.,.213502565645/69437.,/--*!&.0,&$ )*+550,+-.0,)&'10&/4../)*'&'+58-#&#*,29 !#"C@;476-.3,-54*2427399514,24631%'663@6@J75;@?<;;79:9<<9<53935:2890,9#DL:=GC%!"#;BA;4<:;9;=A@BC;7=?>>@:>@=:<96:@B67:97534<341000,-,-+++*%(%+1,,-,*')+(*++$3//.02.02432/.(*,,*&-(()'%'$!")*''&%$" &&&')*)*(,$"*)" **&##!%%%  !&"" &#&(($"&" " #+6%# !$"" % $ !-*!-2 !02,1.2$.#P../30,*./-+0/--/ہƀ +~~ဃƀ䀄΀̀~ ȿ׀ɽ˺¹̀״Ǿ׻șƵŷƾؽƀֽ򁐙łǼŶſþ퀃ʾрǽļɪ򘤩̽Ԧ촱ۆû½ʿ{ͻ¼ϺǾ½Žø؀ſ򃁀ʼnĺ󅌏ꂗƀɺĽ̀񀉎Ļ󃁆оĽ˷´ҷ¸Ľǿѿɺǿޏ񋻂Ͳξ˷큋ĥπ썗νͬ뇑ڂ»ν¨ʶԽ¹ݿ̾ͼʽϿƾóæƽϴٖϷˬ؀ȩ𑛕Ҁ˯ι򀄉пŶ̾Ŀ˵Ы­옭̸ȿ´ܻȶκɵv63565hjdgknj``aceec^_]\_^ijk^VTOO[7===LK@<>=94363446898779<>?<:9:;::;<:8787:<:9::9;<=?CIJFB?;755688765fc`_`aabdff_WWY]bd25:>:765576lhdk:6jm6578757669<;;;:;<><628788:7357566578766556656433244355334d699879;:;>A>9:9::8889;><9899:>;88;FN@:879:<;88;86784565ll8kfk8=A@>@CC@B>==>>=;utskhhkjccdcd35679:9li4469;>7`cej7<>><===:9poojmkecjn78:<nkhghegk77kighffggef66fee46663e21552232b22023%2223c11101_[WWVUWZXXZYYZ[Z\[]^\\[^_^`0.[XSSRQOX[WYYXZZ_``c`^ZTRQRPNONOMOOQSKFLWYY^`]ZYVRQOJIMNKKMOSV\WNJJONIFHHGokffu;>?FFBEGGJC@CAAEHMFAOUORagcMMNLNQKFGJNW`^PYVYb_YR=69>FIJJLFELLJ>Zqh;HMFIFBLMHA>AFDEICEGMNLLJJJMJINMJFIKLPNIECCEFDHHGHEFHHGFHFGIJHIMPQRRKKJJF@?GKIB>?DFHKJHIGIRPJIS_UPPJHJLNLNLOMNVXQORTPQUTPPNMNTVUQPRNRSSURORPPMUYZWY1325d]URZTSUWXWTSV[`]VSTSVRTXXSNNLNVXVXY]ZZ[\\MS_QBIRXZZ]Z]YX[Z[^^d3453d333hb\VWZZZ^XTRSOOQNMKMOPRRRSQQPSRUTORPTSORPQRVX\`[XXRQRSV[[YURUZYZbdb__^\WOC:=aCGHIGIIFEILLNLGB=?ESVMMKDGEELHIGB;EIHGC<;BDFGKORUWXZ`]YN@S\8_7<=<;acG:(L01L+9NQXgk[xB>N6:CJLKIMNQTXTQORRVYZ^[RQNMLNLNKCAEJONILOTVSPRRLKT]acc[[\`b\UPSTOQSSTSUSLIKLLQSUVWXVTVX]_`b[[XYahj67idZSTSPKGGEBCAAGNO:4+"H@6JA@5/h;NTW^]PGLW[WSQRNNSTSYTOOUTZ[XUVONUad_af`][\_[_[XXYTUSV\^_XVYQNPQQSTUVSTUTXY]c`__\[XZ\Z\_efdfafa^^^[]_^]`df`Z\gigfgjee`^aj7mliiongdk;98n;=16;88K3VMNUZh8;;>E=7=>?[5BJFAJMRONKILNOUZXYYPQPUXXTTSPPW[\bfmrlt{?|xx<::>yrprqsurnruopqrqkkpsqnmljhhsttponmkoqw}tjhjmbekokjpsqokilhfdbb^`ddffiilkkkjb_a]eimjjmpngba`acefjghdbfijibehkgggjnprqstonputrqqprrqlsrxzzxqnsuuimrnqpksjlt}|O~|uuu{w}JPSSMMvzNUVNtmprtxNSSPMNNPRTSNHPUN~~{mkl[a}}wxy{ut{wqoxJHNN}VQQSTRQRWXUROQ_\QKMILKteZ]`u|oqunxvux{i^\s}yxpIOX_\[^fsjYRKKKLIHLPP~|vvp{QJ{^Sgp{y=CMUTSOLsbjosklmonmiqwtrpmpimvxsswms|z~sy~zywupjgf[Xexjc]Vcla_c_\Z]agehbbcYTSZ\]YZfchggb]^aglnikqqkjhhie`^dbTVY_cccgaaceffeilqqmigedgd_^ZX]\W`kieb^`eg]YV]^X\_af\XVPPSMLKJMHDyv]ju<116:G'd/)>)6&36=\Xdmoglmxtlv{kb]^kkd\[ehc^VSKLWf^[WJzGNK|kVpnOOPRLwvwHFLMEIIOJ|vRUPaRILUYQLLRPOh[RDNCGPNRHboq|zu~cQLNSVOKLPSQNQVOQSW\XYURPQTTPJzzuru|K~~zw{MOuglnlliqgL^rkzumnlgU\~[dy}hTcs}voqcddV[cVddnzq`Ultc^QjjmnusogbkqhidB^Za^SKHHIHCAzrv?{uvC?BCJFGLMFFEDBBAEFDC}wnjsp]\flcZRRT[XZP\][oywps|FCBBFEJIOHBGGFBHTXOKHFCDFD}v}{roklI9RPQQOIAOK@@JMLNMNRSY\debgkhqyuDH}xyusfuvnommssmrsonmsrh_aabeecadb\elnkiikeimoe\Y_]YPGNQSPHHEIPRkfRO[hdZcWJHXSKVbZRWVOPV_SqU>7H6Senlw>BA|xukfhd]ZgcWZSNZY]cWRKCRPR^X_V_ITlXahfkp^caeiU[qtpoj^cjjkmf_o}mqv{wjmkggcmi`Oatxq}Fk|IWQI|}~~}uGqbw?yznnu@~orqmwsjoofZrzk>zwj^\bg^_a_b_X\^ZXUSREcSIT^_Z_XWMNML]W[\tiabgmfj`f987;?ugf_c\XUR]LVPVQNID==MCGPQO_ZUHA@>9843579577678f\`ig]^_`_^di55766469<:;5c[\e854896k11--/22.-,.000-0/./-302+('$$*/,/0+)&%#'(-0//0+.5320123&(!F #(*'$!/-**),,-/01-(')+,-420333  ,"#$##!$220.0887434440...021*C+.2 ! !!#&%+2111//0/0412*%$,/+(&# 74;.576330--25121354322200102100 +0,F.+*()))*)'()))***+***(()**)(*)%'((%*+((&'((+++-*))''%&&'&'&&'$#&*,+,,,***''(&%'(%%'(*,/.'%%))&$$$%?=:7B!#"''#$$$%"! "#'$!'+''153$#%$$%! !$),-&+%"&%"!"$%$$#"&&!2D<&)$%#!&''(*+++-//.*'"#$$!#"$)###!!$$##%$&+"#,4+'###"@63 0!$!$+16;89 &" #!"$! !$%#$!"##"!%$# !""%$! !"!##"#!!###"$##$&#$''')(#$>#"!$&%!"#$$##!"('$#'.)'($#%%&%(%&$%)+&&()')*('(&$&))(&&'%(&%'&& $&&%%&%##(&&''&$#$'*,+('((+()++(%%$&)*)*()'('''")! &()(*())),+*)),*+)&$$%%%(('''$##!!"#%%%&%%$%$&&#'%&%#'('()*,-)'%#"##$''&$#$(''*++)'&&&"/ !!"!"# #$%&%"!**$$% ! $ ! !""! "$%')++))&# +1 $!""y%'*,)+-,*,&"# !$&$+ ))*..!/ -2"%&%$%$'(-,+*++,--0-(('%%(&'&! "$&'#%&)+)'*)&%).122.,,/0,(%')((()+)*)&%&&%(,_+**+,/111*((+/3573.***)'%$! "$'( 2&'3'+,10)"%./+)()''(*+.+'(+*./-,.*)+252451//13/0,)*++.01--.)'*++,,,-,//-/02421/131014435374244123223574226765475622278879<:75: :'-**,/6!& !!-%*(#(),*)'&)++.0/..,-,.2100/++/1379=?;AF$EBA! !#G$#EA@A?@A@>BEABABB>>AA@>=>>;;CCDBBA??@BGKE><<=9;>B>>CDB@<<>;:878679:<<<;<;;>=967499:8:<>?<:9878;;=:<86:=>=9;=?;<<>?ABBDDBAAEDCBCBBDC?FEJLJIDCFIIABF@?<9A>?FKNKJIPZ0VOOMNPMHEEGKMLOMFNOQUV.3650Z0ZMFHRY/45.UXOC?BEHJMNPW[[0330...110/,*PLLJKMPTUWTQX24.TQNOOKIIHC735,/JMHQPHP`YTHGJGEACHD@AGKMP,*//[XWQKQbc^]]VVX]b\XYTZb_YYWQUW[\\`ff_ZY_ffcYTOKUekoqce9j_XWWbe`\[YZW^d22b574a\YZ`127620.W2;70./,SSML0.QD6,04DH@EG>FPIC;DC#(.1-,-UX.TS^][ONNNH>EHHADECBC@EQEGGABD?@?87AQJC?;6?@;;<96479?==7;:533786248:@?@<777<@=:<@?>=;<<868=6-02699:<889<=<;<=?>=:;<;:635436317=<;967;;631974769;420-/0-.**-&%@>.48 )518=>9<><=:?7(3>:DFP>=?<:-2PNG/6CF8,7BGB=?899269.553-;H?52):9;;?=<85:<4/)0053,'$%&%"!>;=!@<:B!!#'$$'(#$$$#" AC%%%$D?96:D=104940*').,*$-/.9??:=A%"E##%$'%+&"%%$ $+.'%%%$#$"EFJMJC?E#$=>>=;3=>9;89=@ ""@>=87651/7701.+32490-)%.-+725/5*/<25:57:1635>01??:=:2389;;609B5;>?C?897663842%1?@I>F'9<&/*@&A<>@EFE=(E<0@$@C;:= D<;>9?>8>?9.:C8 ??:3356000.21-./-,)((3*"(.0+,++&%&%/+-*84003636.2!>54//++*&+!+%*(%#!&%'&.,("))($&'*"&+'$&1#.&!" +"$()""%!! #$"$"$ !)'#""# ###$!)%!"! % !)!. $ "441/3+8+"/!&%D/*-3/++,..,./.+).ȁɀˀ~~}~ဂ~~~}~~~ɀۀԀр~~~ ӂ򂍌􅃃 ȸܾ֔ŻſƿӵòûŸভ뇛˻¾ÿøʽǾýƿ¾ˀ¨˽ߤ̯먃ᑡ䩆瑅åû̬ӿปħ㨾Żø¿ȀƿꀉȻþـ߀Է񀅅Ȩûɸ탋˾;Ųǽĸɻ¿Ā߉È´ľ͹ƶ󑙎ǤƩじ녎̀ǼǬ¹劬󀂅ŵᢄȺ€¿÷³ܷҹ؃Ӵ䏔؃ȼȵʺƀͱ˾̻³¯ƿ¶ŻŹǺĞoӅΊқڂr:96996:655gfjhdacehc^[ZYW^dj;jcZVRX;@=<5gfgi]WXUQRSVXahfdeehnni67887756559;88;;kif7EH8i89643cb`6;:89<;:;:99:<>?f>?@?ADB><=>>>??>>?@@>=:87789786ggecbdebaagf^WZ`6437;==><:98777688:;97679;;98899:988:;<;>;::86!88767657:;;=>@@><::;mn;<::<;pkhddec_]]^`[[]aegff7@=:<8l8<<=AFDAJ?@>>BDCBBDEHLRSTVXZWYVQONJDD==EEJOLEED@><>@@A==@@@AA?>>A?>=>?=;:<<>??8gbijm886766679=>@ACA<<>=<>=<==;9dZjtn;k8k_b?@ADHHBABFIJKDCCEJM]iiTPGJPNNNOJRWY`WaZ``ZUQJD>ECDHIJNGGG7f^g^dj66f>EF<6=GSSMLGJFITPIIHLKKMMLJILKMNIJNQQU]c9k?@hGKKMECA?BFEAB=<=CB:;pu_]Y]l>GD:i69?AAEGA@AIHGJKHHMKJGOVPRSNGFEEECEHFEGBBB?@EFJQNLMMLLKKGFIMLF3;BFGIPPOKKMLJHHKNMNGGMPJLOOONLMUaTNPTRQRSONTPOQQPNNLJKLPW\VTROKLOPPUXZ]444aUMNPWX^_cfcecYNNMNQVWWXUUROYMKGPV[[[ZXWWLBEPRSXWWZb[XVVWWVWWWYZX[Z`]^fgje_f558cTTTSW^cb[Z^]]ZURSTTUSRQRWXY][XUQPU\_^]^&_dd45fec^]cffeic\USLB4;=BBDEEDGJKDGF@?=5>PTLAEGCCGOLJH@CCFFA===ABDEHLPOONQV][XbL9`Q`6987@EE@>=;89=A7648?BHGIQPY[YL@BPROQQTQNMJJLLLNMHFILNKHGGIIFILHFKQWWZZ[cfbgfaY[ZXYVUVFCHMQVWZZ[Z]bc\\b[[_cf]^ae7khfhcZSNQNGGJKQDFGLKELL2DFI52MUN@fMU]UT[c`QNV^a^YZYTWZaZURMNPYWTWWX[`a`\ec\Z\]ZZ[\`\YdZPMOVWVTUURUTTXVWWSQSQPTY^]ZW[^^\XW\]dkjb\^^`ecaa`[[Y^beddgjnlihdda]]`b`dfk8nlef=rom9:8<:7;7DDKIQ_c6::>B<8;8G;Uk:Cl=JMLPTQONQVW[[[YORUXVUY[VUZZ_cafmuxuxwzzvspjrvvx{zxzpttrsuqpssqjfekoljmnpnuqliijjhhkpqnkjghgdcgmlijkjigedkgehcefgfiji&ffbddehnpqpqpjfhdbcijmnnjghptnmoonjjjnpstqprrokjnrnmopsopsvzomqylax|~zzzoj{|{ysklkljkijkqpottlhkgszIMuqnvy{rptvuw~TSPLJJHIHKLLLJKJ}~svvfUYUjAKNQNPNokmyy{H|HQQSSQRTVYSRTVXUROOTWYWQPQPYSMNPJ{xk`WTE>Hdfiwnpyr8lbfnqnkeo{zwxsgpJVX_fdb_ZWTPIxqkbbywrquNQM|zzrmmpgfjlejkqtvpuvaeruwymlmmwrnxpnx{ugis~xpxwj`\afhdcc^Y[\X`a_^_]TW\]chihirnhc^]aefgeee_`efggbbjmuolhdhjhfedd`a_Z^cdcefc`\bc`ba\Zcbcgjjb[Zaa__`\_YW\]adZUTURHHP~=A@Bsrq>EZ[ckjlittfhjb_jbgic_WVcda]RQXRZjZQSLKKRUL}qg]zSOPFMH{s}GVGKGxlRTLUPMKSUJFQMIj[TXJHSI]>9FEEGIHFHNOSWX]`Zazwpt@DBA@}rtuprwyyretohegdfgehbY^dliooimlnmkcb_\aaZXSOPRRSTSLONKONMKVUKEUea]d_ORSKMWa_\YTSUYaILQTTTY`bely|}}wsropkhgcdd]]e]UFJX\EADJQKPOHYdkf^PT`f_ut_`Ydt^amiloobb]blunmJQ{u}GCsqfgbclgkS]hnpmruoKLKFDIBrhpvxnIBxesxtqnuy=jfwrltrhhsojmA~pg]]_^Zdea]^d`__]WVNJ\\ULMXgd[VNIMNXW_X\^[WUZ^\W`klf:A?dbef[[QOSNYOYYLJIE@FQMKMPWWQJC?MNTVLZZSGFOCMIL>DRCHGEB9DGQWMGBFSMEB@FHDDD@GFEDHOPPOJIPKHBA8=EADBCECBHOG@?5>=>DB<3:VKQT>FEDB=E:i\g<[lSV8jP60>=b24562616:<=A>>@>A<=;49597==:9:<<;?><8;::;;:A<;779<>>;;9646656659;:5a`baa]\a`^``f57:77978765eb`ck5h887..10...1420-,+)-/21/+(%'1//1,**'%%''(.1/52442210!&,+**!  $!!!..-++--,,-13.(),#'...-,+),..,-2# #$#335331232000--,--+*,.01003 !$&*+-../-.-+*)(J## "$'&#!!7610443 +/202121353222/-0 -++*) +*+*(*,++)()')(**'&''*)()"%'('&()*+**)+)'('(&&&'(%#""%)(&&+.,))((&%%'('%(),.*%%&&%$#428?96:79$!!"#$"!"$%%%"!""$&-35)'#$(%&'($)*(-'*&&0&!!" #!!$$$'#""42647:2""$)(&&$'%$+($$$&#V&$%'%&''&'+/3 3!%%'#"! "!! !8?64128!"4 !!""$$""$"" &*%%&# ! ! !#!!" !"$)&$%%%$""!"$&$  ""#)'&$$&&%$##$$%""%'$%'('&$$'/(&'((())''*''('&%&%$$$&(+('&%"#%&%&&&'($"$#&&'&&'(*(%!" "$('((&'&&%"%),+*)(('!#%&)('(.)>*+(('&'(&''*('**,)')+%)'&'()'%%('(&#"$%&%###%))'**)('')*,++*,+++*&(**))+)&%$"  "##!&*$ "! "$#!  ! "$%&&%&'(%"%/'.   !!!$%(,*(+,+,^('(''$$""))-*+' 7("!$#$(',.-' !**()'('&&$$&&&'&%$#%&%$#"#%#%&$$'*-,-.-130330+,++.$"#&(+,//.-.10--2..010((*054355/+(*(%%(%( $$'% !1,,)*&5(,/*)-32*&+//.+,-)+-2.+*'().,*-..0212/52/.1200/.1.,3-(&(.-,,-,+,+-.0../-+-,*+.11/-0110..113783121477544/102368:7665532023246:<:57#><9(%(&+45 "#'6%8"++)*-++*,//2100,..210220/104969=CEBCCEC?><:BEDEHGEF?AAABCBBCBA>;:>@>=?A-AAEB?>>?>=<>@A@>=:;;:9=A@>@?>;:9:?;9;8::;;<;;:9;778:<@ACAA@<;;977::<<<:9<@B?>@@?<=?AA@AACDAABCA>=@BAAABCADGHJEBFKC7IKJFEE@>HOIIMSWTNIF@CEF@><>?BCCFFB@C>FIMR.VSX/[OFECHIKLOJHMAAEGHIKPZ`551.OOS-WUU+)*),-,-USTV-..OJJKMIKORTOK>KA?B;4,/7950-6ACBB=7?NL(039A?:84531URWXU,UTYZWUROQ_bWQGE@:=JRHGEEOLOMNQO./,QRQICESVNPRKMRKFB?@D>@@?=CDGIJFHMD9=FFHH?>=?ENKLKBDHDDIRVML>?HOICJS\WSIA;9=?@?<=635749;96861468<>><=99>?=<:;:897679869:874:978846<99:>?84386677574476:9400//(*/C!#"#<::",%449=<<9?A9=@:8>8=?:863=<;:315V16?501-+*-/*FA>7JU1-.)P+'JHB>GOMM)3)LOPNMNOJ*(KC=K/0*0-*)0/(@&-*'F;2.3(&, &/==CDFUQE7--412,+,0,SG*232*OIQ-.,13550..042XUY^TPLMOW,KGDHNLIJGF?>GHMSKC@FHR*D<=??B8?@B9:BEJJCA<=:761=N>//?E95>FFFB?>;:742011:A<5859D@:739:;>CB?9:41.)#.01.,$#$%##!!=!@=!" #$&&((%$&$#%%"!CEDCC>;:;:AA5013.--++)+# !696@A;;!"! "C>>@>??@A<5@;7566677:6149<9><8;934324311+))((*++(*'&(&$$++'#-41152(*)%&-20..**+-2%(*-*),0235<>J@7))&$"&"93;>C;($B5=@=:8;= B83?=9?>86H@<79!@850-342..210//*)&$--*%$*41.+&"&&-+0,---*),.-*0531"#2011,.'%&$+&,/&$#!(&#''+)%#%$(+$--(#!&&##"(" !" "&*#!)%!!"!!!"! #&%%%!"&" "&%    %!*"&)"""$6/6+9(+(%,.--..,+..-,+/.-+/2/ȁʁɀˀ΀~~}~~~}ހ ~}}~~~~~ʀ~~Á 􁃀򉌋򄉈طۈ´þɳ¾ϝӅݺހ޹Ⱥùa̽οл½҄Հķ񀈉ݝļԕ聅ؿПǂѱŽӀĿøεļ̾Ŗ㚻Ǿ¾ξſWϐƾÿ׀򂉋톈ʫ􁊎ˮë򁆇ǻžƼľҾۀ˶Ŀ÷㢁ſȶꁘɄһԇ􅑨Ŷȼ±ȻрͼΛȽԀֿ胉슌ȝ­Ğ§´Ⱥ񠲷ս˴􍝄ɿտ¶ƾַļȲǾлɼ ŀнżˮ횷ŝ㮌@89989;8:6<;idehigjffd^[fc[\[gia`_^TY_^h7ngfbc\]b^]d]PX_b```a`eh899:95ghgj9;<:>;`WUSb=7\a66554c]b5ede59879<;<<;;9>;8978:;::9:<<:775gggfhecdfeea_a7779???@@>;;<:96p79;:8889:;=?:98:;989;;;>BB=:<:;:9<;87887:;;<9;867;8553d`^^]^`bcRMY7=>;:=887667789::;;:9:<;99<<=<=??;9:<;997;==<<;:86766898lmkg69lhn9::99pn8rq>?<=??BBCAAB@ABDDCDHLLJMSRRVPMMNGFEE988>FJGEHIEA?ACB=<;>@@@BCDHD@@AA?>???>?A=?==>?@AB@?=vtqh69:7888768j8??BB?>@@?><===:77lkljedeejibeh79:99:<>;:84fe432445433442122321__01234441`0/^\\Z\\]][_`[YY[ZY\]]^^_0/[\YWWXY[]]\]2dYXWUUUZ^[_`][WWSVZTSRQQRRNNHGKPNQWYZWUVVRPNJHGFCDFOTL>=A@ACEDBB@DGGBC;ZNj>DHMKCDFMPQOJIKILOSWsu]CLNMJN`abRQ]ddea\YWRM>hm;@DHGIJIGB>>>?A=>C>CFA:FOJNKNLIIKLIKEILH?>LJRYYD_=?E;eSOSMHFFG@B@?EKH@DEGE?qjdeom7>=A?=7:=>DA;BGKJGGHAFBACIOTX_8^LLIIGDFDDECB@@ACCB??ADFFHNLJNLPPGCBIGC=<@CGIUMJHGHIHILPOONJIORUVQPPLJLP[UNMMPQRSQOONONNNMKJLLLNQSUVVRLGINPRUUSRTXXRHP]gfea6730ba`b_ZYXWVUQNNONNDHPUSRQUSMHNVUXURSSTUVYVVWUTWXTTWWUTYVWXW[]_e764`KPUSSW[a]Zabdfgbc_[bg_NR\\\_gh[SMISZRPMPLPTNPX_df4e`356435\?<:><>=?@?=98:968AKJEBGJNWa`\^[Z\1f4[UY_^Z[PNV__VMHBXT@:.C4NWNUP9GO27:EDBIMVWEEKQRPJIKNPOOQSVTRRPMMNNNPLIC?D>@IFCGMRSVUU\ahb\Y^\\VMJPQPVZXYWW[]bdccb^_acR`><:mcce_[ZVWUPGJVT\RLGJJ\[YZD.K@;RVAYEW]lk[S][ZXV[]\\]^Z[\YRNQNNLTZZSU\bmee]^heb`]ZZXY\^]aXRLMSTUX\\\[][]\VRRQQPU][c`]YZY[_Z[\`dhj^\Y\]a`bfb[a^YY^aabcgfgfgcb`_aa`cdgrpllgr<:8>>;::8999:CG\``j:>?C?ABD@GBbcb[SBJJRX[ZkXXVUTQOTSRQSVUVUTSVYZW[chhnrquy>>vzrtzux}vruuvpmponntvkffijkkiehqwysnpnlklhjnminplihig^fstpledbejnijkkqoojkjkjmqrnmkjlnrlnturolhikjmmljlpvxywutrmlnpqqsstsrvxsromoqqkiqpmklkqsqs|z~}ukswqu~ukgaXSV^daZ\]^\_`\]\Q`{wvx|wxtpjjksvr~OSQMIKOPQSMIGGJNTZ[ZWOw{ILMHou@?=cjhm}SSK~P0E@A@rg1*3B2]Z:/'/D9A[[`hrlnobenfZmnioc[^TX``aXMNMS\]NMVQMKSNpsfijQMyKMRTr|ur{D~||wIKHFWQLRMLKTSHAROHzhN^PCVGP1RBputle[XTTSZUSUULuNdYNMMR^_\\WRLKOSM}uwy|I~xvqmolruiivqcmtqlkmhd_WTTYhbi|tvvx|yqkb_Z[\``f`^_mnmmokknllmt~i`iag4TKH^[UQOGHFFCA@=Au|ACDC@FD>DGIJFCCCHEB@?|Cw|wv{ouug``jc^\RRLMCHNeifx{vvx@JJFPRMTNFAGGGNSQMMIFBECDGzmc_XZWQKGFJzdYh9?B?FCC8HUGKTXTZ`jxxffDEGBByrhljlpz{uzsif^a_^]ZKMUV\VW]]enhcka_NR\WVWRMLMRRRIINWOLXRJJTG9GZZXWYPTJUUVbgaXQV\UVSMTbaZW^lrzB~ttsommgfgfghdaelUOEJHPGFHICBH^[ki]^YTR[`WT\OOQNKCVXR]JIMVOI?MORWINYRQIF?ONJ;EORTI@GRLHC@BDJM@=KFEX@NLC@=<=IP=6:767<=;988:>?;676676:766566567:877756734759::54a]Zaa^\\[igbgm<@;9::544cbe^Zd345e/,.0114223.,10++)01/./-'*--34/.,-**-,+1-&*-.-,..-020112,&((-*,-++++,j!"  ! ---..---/220.-4&.,++*+.00(&)  20000.2334420/1222 76421100 #%$$'+**-)')*&%%%$#"$#   $! 9882 0344311202311221+-,---,++***,-*)*++)**()*+)(('()*+-,)()%'*)*(()'()*+**&'*''%%%&'&'$!#&$%'((('))&''%%$$##%(+(!"$#!!##$#!! " 3+: "$&&"#"&'('##%#%'++;?0 %'%$%-.3(&-/+*&"##" 48 !##""## :8  ! !n!!# #(%)'(&##$$"&!!&$($'+,*!/'&)%#"#$&$! ## ;;46;9 ""!!!##"""#&()**"#!!!  C  !###'%$&%'$ " "##*%$$#"#$%&'&&&"#&'*+')('##%*)%#$''((('%#%##$%&''')))($!"%&'''&$%%%# #*-+($&&''$"#&$$$" !$$$$('%$'&#"%)(('''&%&(+'')('((&&()(')')(')))+*!&('%((('%))**)(*)'*+(#)*()/0*(#"',&%#$!#$ "&))++'%  "" !#''&$! $%$#$! #$$%'()+*)%'+R$" #$%*/-,,))+-(%'*(''"#$$ ! !.(*#" --#" %%**#$(++)&$%&(''()**()(%e&(%$" %&''&"#(,+*++.140-+.--+'%**(+.--+*,-/0010/01/"'41241..,-+*$&.+.*'&%".'#'..+++$-.78.(.,..,--/./0,*(*()'*./++/2956118643000--./.1,)&'**,022201232.,.,,+-20521//-/0.//357921023535741651034246855586421344358@>::7@"##%&355:!!"!!"$#0400*%*(-00/-/./.+*+,,-/200.,,.01038;8=A?BG$"BEADGDFIECBBCA@@?ABGE?=<==>>;9;BFGC?@@@>?<=?>;@@<;:;;6?<=<<;;9:>A@=?AA=?CCA@>;::9;<;:;>CFDCAA@=>AACBACECBFFCCA>@AC>=CCBCEDEHHHLPRURIKKE?DGCIOWRKFA=9414:?<679779:8:71:NNKIFHLONKHHFB::=CEAHMPQQMMOUW\242/+,00/1.,**+-279:6/WUTPLCFNW-./+PLJF:: 0006@24YMOUSSX.E) 4GJI'(H''%#'QSQOQSTSNPSX]_^ZURV33-W-./d48763ca]W\ae4dZTY_55225=;fc3S]\VQOMQQSVZ]`483[/3432478740.YU/1-WVWM=.($$,/4@B74.,/,21.(2:DKKI>MRP0207FPA4/174^T-//3.VUWYQPPUVULJGA<<=BC=DMU]PNKHIO\\LCA689<=:<0))'*2;6584259AA?>=:>B?8:DCE@<8<;;>>?;:<><9;987<832623587:F,<86421577;:866?@::87542...+8:664.*51*#7?=: # 3-!!668C=8846:9;6./.V488..4.,)/,J?COGDBH(HGLMFGNPP*,(JI)2.*.**)0.&"-+'KB:*8-#0$!>A@JPK>931/0.2-.01+G?*:2+,RIT,-553430,+-/,WURWONKJOQOHGBDOMJLGICI(IKMGEAILQJ>;>=AB:9C@7=IG@@<=?;960..1;57KJB?BBDLFD?=6423555:633;<<=?=;<;::?IE7271-#0/.-)$%$%C"! ";? "#" $#$$&'$#""&5%$" A$C>B>>CA:>@:5260/2,+$#!156AB><; &'$+,(-)$!C%$$(+*))'&#%$%JGKH&KGGB<62/21.+(')C:38 #"'#%&-!'+,).16<<23"!# "@<7;;:#A<<<:9:66779:667;-,&'%'$#"%""%!'/43+:/66:EMA2-)?8>CA:??78.68==:524945149;C;5E>C(%,(##%?56?B:A@?HB=@;<==;!@=A:FEA $=5/.61.1124,&(02-4-+)'($++%),+++''&$)),2./--+*()$+2+*2 /+33,.+($,0+(/&%&$$!,-*0$"%)'"$&(+##)&&# %$# $,%$'" ($# "&&"!%"#%&%!  $!""$"'&#"''# #)% <)3%5/(2 $&$3/+)---,++2.-//,,.,*.⁄ǀĀ}~~~ڀ +~}~~ڀр߀~~~Á 퀄"¾샔ǀã倂˸慎ƹݰ󂏀ָÿþ˿Ÿ¿Û˺ɞ䌰ưͳΰͽʸ熔ȿ¿ü†ϼľǾ戔̻ſӀѿȀӌۀ˸󆏙ȫր̺ͷ掖삊«򏛮ùҶۅ僌󅑚ͣջގ넝Ƕ삀ƻļꂯоѿŹ큐ŭ两շ˾ĸ׳Žۺ󌶷ʰ¶ˠӂꇜú􀄑娾¼ɳȽǿü´Ƭ޿Z7858783576<985jjhonfc^Ydlje`dcZX\\[bd\OU]`g9q7e``][`_YXX\[_`Y^enu>=;ohheddef4:<7_[VX[^URYb5875eh76542323678<<;:89>BABAABCCFGFFDB@>=?BDA<::;;::999:?A><75iiigdddgfigfd6:77;:=;;:89943553e3cce``c]^`hb^[f98kiefln669:;;>?<=<:9::;9;=><;:::9:8:;;9:<96664456675h6jlqfbefcdhlol<<;::9;8798kifg467:;99964457:;755nnlkm6:969=<>??>A>BGGEINPNIGIJKIHFD@DFINNLLKIE?:;>>99:?BA=@FE@<<>??>?A@>>?@>@><;::<<<:lkq;>?==;8nnliggjige348:;<=uu99:96gg322212232121c```a1b2322210]]^]^Z[[XPQZaa0]Z\^^0/..0./010ZYZXY_112_YX[_cc^^bb[WVXYTVVX[ZWXWPMLNKMPTTRSRQRPKFEHGC;JNEGIKOG7F]56b`UOH?mj=<<@CEHMMJCEHFA>C?FFCBB?DEBACCFGEGF>8;AHHFIOQNQOG;=AD@AA?@CBFCCBECA?DDFFLj<=[NKIIEFFFEHKFDDBECABCDCAEIJIJHGGDCEBEBGG;8=CDFEGFDCDEJKLKNQRONSSVPPNNMKJJONMLOPONMNOOOPLLIJLOMSTSSVXXVPNMKNTdbWWTTUQLS``^ca573]_a223b``ZUXZYNHQV^VNKMLMYVSRTSSQOLLLOQTUU[^WVW]^XVUTTTSVSVWUX][WUTTTRURUPSVTTRV^c_^^]bfg\RTQOOQUTTSQNDJMMOQPNNRTY[XXZZ]aa^[XM6@FGCIJFINRWSJJRXS=^Ud997W6IPPQUSJ=HMLMLJDCCA;4<>=?>>BFJNQUY\]d4haQiTEMYf78;??>AA@@>>;:99887;:=EED=>;CIMPU[`]_\[^`\\\`c\RSX^`\UUQHBEHMV[TTUSNPOMMNNNPQRW[XSORUQQRPKF@IFHITOKG?6ACBGGMSTXZXYWVWXVQRNJQW\YVWX_YXWWZYX]^e7<@96e___`_\YYYXSTPOFpU`ASdeeJA*WIHTONJPTY]^[WSMJPQTZXX^_[VVTRLOSVUPUWTW[`da^XWa`]ZYUVWXZbij\TSSVSTZ\]\\[VUXXRRUXURUZcb]]`\afc^^dkjf_\^bbec`cfe]]ZY`b_[]afecgifbdbdfis:rnm=9h6::9;;:;=36H`^Zb98FLQRPR[YPMKKPRRQQQRVURPPS[__[`hihhglrvwyCE|zznosronljillolhfhifedaadmsrotqpnmnqoolinrtplnokapyzxxrjkqwqmllmnrlllkkhhimsuopnoronnryxutsnnlnrtpnqstww{{yvtsrqsrrsqruwx{ytqosulhpooprpnpry}|vqoptrsx{~}vj^YVUV\_feflk^XYZ`aaov|woux||w{rkb_`gr~LMJIOTSNGJNNOVWTTSMJKwKIFE~?kB@DI|xtoup=mwyvFEDIMNNGADISPQOQRQOMMPSTRTWTRRMTUSKMT[VUUQrfG[`lzwhSLO^_ebaigleXX_[R\gi?FPMNLHPRTQV[[`hphUQSPNOLN{||}xsrme`_cgnoikhb^lljuyqlnv}yzNQkWTxwz}}}~yzu|{xvu|y}}pnw|s|kb\^]YWZXWOFsiMX\\`_X^afiihgda^Z\W\_beghlpjlpiigcada__^ejghilheb`_`\Z]idehidb\\]YTSRTZdc_V\]djgc\[VOMUXVY`iic\OGHJQTDo@D>HJ>@CBD?=@K8OR7BCJ==AY]aemrtnjmk`jleadWZ[WZh\ZVNNNJPVRHWWNMMQQuq`uMUGzl|GPXTU{ozwtynwMM}IUWQNLIJLMNJLIE}mX]Z[ZA^04Zkjxk_bWUQR\]RRUMLyyRdSMM]e`^]TOIIKNPN{x}xrs|J~~ysmom]hjjgdfrplmglnkj`V\_csGmmpvjmpnmddeb`[UZXdosnuvhbnptuuv|ndblmdc[6Yc\ZQJHGBFCGCu?B|A>BC=o==nhun_5?FBFg<`QDEYc]biurn:>EHC@qidecbkpljonggihd{^RMPPVZlZS^j\b_mk`[QJR\[VXRPKGCNMKMNOKdeLGOTMMNS^^Q?Kj:XZaxmURW_[[TLR[_UO[k{Dwhrxxqlieech\]a^ZUPO]LNSXZHxmC?CGJThOHS_e`Wdb]ZbojxF{srvwqc]i@sKUVVEGJvoy{i_sof]]aosa_o~CDJPHGEMGpocjmtBz~DCC@Ay@Etpy{nb`zxruGCj]_jgba`]`WT\`@R`bXSPQPNNHTaZXMQ\ZPV]]b__aa_\WSMVaWY^Y_cgfeaZ^eRdeYN]Z\YTRRU[XPE@KJPQMKJHUPOQMOOIAEKPHABFG=;>;ckgVY?N7L77U61434833;;<5decdfebdg5d1106732/,1630//.+*++*//+#'*+/50,,)*..+*)*+//+.1563000/...,+))+,)%&*.." j-.0/---//000.03--,--02."+)).22024414570/.04542421"45533-!!!$'('%$%&&%%%# %&%%%#   ^3)/522466443232212512-,.--/,,,++))**'$),++(()*(''%&),*+,--+))+-*)())&''()*)*)&&%&$$&'(''&&''%##$$#"# >=; #!!# "#415 "#&('%%"%%&&&'&#(*('))"')"###&#"-)'#!S69!!"#&&$ !$#!$$  !" ! ""#&%!$$#$'(&)($ ""#%"!$')/34+.3" #")+" +$z' &'#!!##&";; #$  !  "!"!#4)%#"#!! !$ !! !###$#""  !!""#"!!!"$%&$&''&%(&)((''$"""&%##&&&$$% &##!#$%$*)(')&&%##&/,&'&%'&"&*('*'$&&%$$#!"$% "&)# !%%%,)&')('%#!!!$&()(+-)('+,('&&'&&)&((&)+('''(&&(&($%&%$$(*+**+**+,'%'&$$%))(&&#"E$#%&&$"%&)*)))')**&&$  #$&$!!&($*'/%#&''*(""$$$#" !#%')*++-*&,&%,0! !#$$(,/--+)+-+-,/1*%$&('$!") '(#%# %.!"%'+/+)*)'((&&'''))(+,,)'*+'()(#!##"#*''$!!%%')*,-*++)*++)+(%),.,,,+/++**+-,//1/.//00.+---))')$;,2!*-+($+1$&*%&$)*./.,*(%#&(*-++-/-,,*)&(*,-)+-*-02431.-31/..-..-.279/*++,*+022021..//,,-m/-*,0440020264226:96223545423672321453124533785577564589>=:<"5$)4205!#$'%##$""'##"!(+-,*+2/+*)*-.00,)(+15426;;;<:=BCEFL))MIHIABBAAA@>>;;:779@CB@C@@?>=@?@<;>AC@>?A>9BHHECA<===>A>==<;::;>CC?A@AB??=BFECBA><:;@A==?BCCDGFFCACEDDBBCCCDFFHFCAADFA=BDCEGGGIJPQTTSOKGCBCGFHMNPLI@854327:=<=AA93559:;EHKHBIMNKIGIB<6515>ILMQ./WOTSX]\^YT,SQNMP)-21.*+.--02000.,-TGKTQIU,+QMPN'$>1A"#&*YSKKIEB=@?!<=<=F'%#&*+*#")VROPVWVVUT`i4442330.X.-/134673_gecba440^X[\c564[\gh^XRTVXUQVX\]\WVUUTVW,06<9872_ZUUSRS^^YWTRLC:"/4>ID6'$&./223:89.'(('$*23!%*&(*&,-/.475:AG?3//-SUT/.,.]\[YWTPRSQOLKF@<:=@DFCGE@8;:76974-%65,25696257;<=?>=97694889;==@A>?@<<;7597687;=<>@@<;8887425<9:;;86576421//3;95066<;;:650+-1215:>?<7/**+02%>##'( !#"! "469;>?@=<>=6=@;9=46646@633-./,/40*33+++..H@B5F.2'D=H*/5v0/IEIHH?GND@MNE@HPRQ,*JF)/1++)())**&(%$DC>1542.(0;9DNJ=6700.-33,,/+,B@-9.+XPHN,6:5450-))*,..UMJMPOOPNMGJDHPNJEA@D(PGHCHMF@;=<19:::89AID=<=9=?><5.236?EDE(I<BB86=!""!$*$!"#$"!'#@AB>C??AA@?@A<9<4.8774,(&# *7:>>:!##''()(-+$A %'(*(+++,+*'%##FBGFGBF(DC997243/,)#: <8;6, %"&02+$ *0-/3776"$! 862432:<:99:44543F4.),+,0<.+06.00:830)%*12-.+*'%"('&%$" /+ !$&! #,-$"++,0C<.,03/1-'*.2,*/9?A#=5;?>:98666:324300-,4+%),/&A8"!"$*8,'04983761.1;8@&A<;>u@=614#=)1.2&%'@D>:>C8/><5112:>53?D$%),&$$H)':C<58;?#@A#""!< BF$?;@B;53D?<=.085321.0))-1&03*''))'(")1,+$&.,&*/,--/-*)%(0)-/+/13000,-3%/0+#.,-+('),1.(#$!$%$##"*&&'#$&""'$ $!$$ !*)&' "%#" ' ! ( (*"#$#$"  !$%#  "!;# !$%345*,(&".02**,-**.1/-.+-..,/1ꁄ߀ ~}~׀}~̀ƀǀ~~~Ł 󂂃쉉پ涯ތՅþʽɹŹۄįハҾ񚟐ӢƵԿ펴թж»ѴրºȽʏĎ󀛵♲ǽ˺ŀ󁈖ȵ󧬶ȴȊԉŽλɻʭû󂇇ɽ܃úοſՀõž®ƾƺ񃌐˼̿ۑƇƻ퀍􅉃ϳ̵ó¼Ķӻ𴡾ҫî􂄀߀񌌄򖕆㳾ϰ­ğ띯Ƽɾɧ݀վĠ酊ķͶƾǾɹε֛ѳ¸ߙ々ƀײ􀉅޵ĵȹ¿рɀ끁þɻŻɻžڻʻ􅎘ܨډ|e665gj7465877687ik87iaYV]a^gmncXVYXfqkeWSQY]omne\YXUUUa_TRR\Z]^cn;DB>nilid`dhifheb\XSU[Z[YSa666437>;9655798768787;?>?@@@AACB?L==AFB@??AB@<;9768>C@;8566jhg348;:85;?98;@>=:866654346R544346999>@<9:=?;<<978899746652cb24da`bca\RW`decciddeip669;;=?<;><;=><::;;::99:8998<;874543gh5jddcadeb```_cdeedhmmkrq997877;95f5777k6887887;;974gl6jl68ljm9=@?=@A?=::;;9qlhfl9;;<@?qr<=<<=@C?BA@@?@;8k667999<=::88;<;;<;:9:9fbekihgi`PRLN]s:=>??>?B@<7dl77;:7;?CDHNQSOOQSTUVXYWWYWSNPRKSa^P@GMOORWLHPb@YUKhailko>?A@BGLQLC=BDA96_8>B@ABDHHEFIHIEDE@<tNI?HKTX?CFLKqZTZhjj`[lu>;jBPIC==@AIVLE@9>BP[ZXCBEHEDEC@AAFDBBCBDEIGFEBBBEDDCGJIGHC8>AA@ADECCADFGFEJOQRUWHGIIGJLNIFIIMNPRQOQRORPNKHACLPOQRQORQOQRPPNNOT`4]WRSTPNQW_YVTXXYXV[_a`^XUS4UcdWVY]daZWWRPMLROPLOVUYUF@KPSVUYVXW]]]TPRVWXZW]^XY\VYUQQRSLLOPQSVWZYXYWVVVRPPROQRRRQLNONSUTU[WTRVPV\XRSTUTQNUXRSSRP?Oec[We4bQ7;KQJ8[4@LLcQ@JNOMPLIJIHIJILLJF?@HEA??AEHIMSX^__``YTRCcL\e36>BCA?BD@@>>A>556;69A?<<:>>9;=?6<65Xdb`e:?DHOOKROMQMJKC97=FMNKIPTLIJQQRPOLLPSUTUTX`dc]cgigegkrtvtu}C~tqsmhjfelnoqkkmigi`a`aeknpnrurolrsrrsmknsytprnijyC?>>qp~~voppmlmjhihghffechkjooqpqrqssqpsy>ttwwsnopsvxtqnqy}vusuvwttwxvtquwwzwvtuqpt~vyyvppsmhljkmmwrlh_[donusseghhcehmqjqrp`[dwoojka\R[NlOMNUTSKLOKKJMRPPRWWRRPPYVQQRSTRORLOOIJUOKLOM~HwyDKRTD87>EQQQTPRWW\]SQPRSTOQY\ZVRYYQQVQUXSRLNO{xqr|{~xtnbPhyrjb^[b`ckdctrhp^P2ddKaLKOKLRLPST^fa`cb[TRQMJOQTRP{xwpopotpidYZaehfggb^]hf`a_herwwIUVSWZUNgVIn{|wzmdlnllgo}rwsw{vkcWRQY[YTZTOQBuGX`^`fc\[bmmnkgc_`_d]Z[_ehllieeffiikgkefghf`_\\h_^\ZY[[`ioljeb[HJQDNQRTW_d\ZZ[Xcea`WOPSU_t~mc]^YQNLzSNLD>ESLGHKOFCINOJ8:CBNK3<=WZ\ajskktrbdhddah^c`WV^UUTKPTKOVKMUZPMLNJ}zjfMK}NUSIL~y{iz||Gux|zvNLFTSKKLJHFMMGGH\nx]VUSXMbam|rart^XX^bYRPKJO[fRNMOXefc]MNINQTPL{~}tpK~~xsqqmgibdcci{{nlijimlf_Yiggulgjhdcdvtida]WRUXYcqgat}odwv}|uockrut[bdLhSRNFEGECHDGH@A@@A=>?=FNGKNLGA}CNOLLPVTPLMJGAAxuyzzrqdeda[WPKE|j8lh;?8d6;;@J:AN]U8RrpeioirADIFB?ohhfcjjc_ekdcgklecRGHZJP`[_XY_^Xitl^SNRJKQVZWQJE??MQIENNXNC@@CKLMS_Y=2<9JXe]k]Q_W[]^WM_\\SS_t}GH{r|}~~{migfYYYZ[YZUeg[\`[fUliIKLBCLYOILQW^bWHXVW]n?GvgbrosommzrHTHJ@u}ruus]sxqeiknjTMmx|zENGEBKNohliftwuBECKDCEBCBz{|otid^tpqwAlfnhebbYZQX_mYF\d]SKMOLI>XgegUPZTQ[;8^[ZZZ_]^]XUTMYQTXg87h^]^j`aY[S\]e\TURPRRMACULL[[VRMKKONJMUPJCEHLE==EFBDNLQZ^PMGDBNFHC>CJLJEA=6?9BC13JEBRZ\HJGHCEMJFCD<6;5:73>DNUTL?@A<<:>AA@HKGF+A`5776645/89<;AF>86;>?;;797579878048<726787996612:868649==7798855686432\_9;4a`X]h:764g84679;984ge685d_[t/.01250,)--,255/*())252/)'$()5451+))(''..'%&++/.17 4132/,.10./.,)(()+***&*C" !20/L+,-,-//.-(+.10/0312357!6011-.0/02.--..0010.25547613m350200122  #%&$@$#$%%$" $%&(&"!20//124/<2./110//,"'$%-7875300)2,1+, +,.,,..Z,,))*'%),*++'(((&&&((''+/12/04-*.-)(((&%),+()*+*'(''&&%&(&%$#"!##"!""#"  38 !!$(()('(***)()))+,+')*&*42+"&()*,1*%&."0,%016987  #&)'#"$#-"$"!""#!" "#! #+9%5+44"#!+0,01*##"!:)'$%*/" !%&://4:8940774 )$ "*$!  )-+* """#"" #!   "#"!"!"!! !"!!! ! !"!!#%&&)) "##"###!!#"$$%%$$&'%%$#"!$&$')'&(&%&%&&$$$%,*(%&&$$$&+(%%'%%$#%(''&#""!)*$$%'))%%'%%$#(&%$%(')&#%'*)+)*(+++'$&())+(+-)),)*)+,)&&((%$&'')+,,--,+*''%&&'%'()'&"$$%'&&(+(&%'#(,+()('&$!&(%&#!((&#**$!$$+%$*'#$$$%#!"###"$#"" !"%(*---,,($&-#-2!!  "(*+,.-/,)-.-210--+))&$%'#+'$( $&!(!%&//,,,)+,)(''&%&.0+*'(1/*)+**-&(*(,*" "! ! %'(+,+'(''(()&'&$'-.-,--11/.-,000/0121.241+(%"%$!',+$#$%&%%/?#)&'1,))**+++(((&%$+,--/)((),-**,-,,-,--0/13/020.--,../-0//-.202//223110/-/0304433-,./0358752148;85545676567663200430.334213525985427969": 42#27315!$',+')&&))&% !'+)'&+.)'(.--,,*)+,-048759<<;:<>CFIFFOKJP)MECD?>?;<@?BD@@@<;=6767:>@A?AB@>=@??>A=;=AEB?B>;:327@AHFG<=??<<>@D?AAA98?HRGBA@73')!6KOMQ/-/YNPS\664..1,+PKM),0/02553434;6101221/1ZP.00,-4/,+++K(NKOWYWVURJ>?LHOKHOQOKG&+0.!&OQX]W\h44571278::211233.18<:64;9k4372[RQ[][b574a`b[WX_5ZT[^a]\_232]URSRUMMTV^_TPPLKFFNOLUYNJE?60?KIB=70/,,-/30/74/0&%0,0)&)&&+&*,07=979:6210,S,12321]VROMMNJLLKOKFA67>9<79;>:5736<66211337=@@?;:4$*,%--/027853345;9762+.02:HM?:88510-GDM0+)" $-)&'''$ ! 2237J+OIKHHKFBEIF?>?=896779;EOA:;:<;>=83/:66>JGFKH:697644BA:6551.0105?96@C:6B@EHFC>6;=>9&'&%9**($$%##&#%%!!  "$$">$,'$DD"@A>>A@?AEA<;A:5<12::?9*'' "0=@=6 ! $)$'('%!>!''&),/-+)*(%##C>A&(@=CCAA?9768.//1303/:90/425088')*" %/-(*-1382#,((+8"%?63><<:99@?'/'GF)""CD7486523,-'*,5.!,10)%%''&+303($,)'-+*+,*/../,)(%,'(+43+-.5l00*,&,.1+()(()+'+#"+*(''%#%%#$(%" "'" !%"'+,$# %!"  &$"! !# ()+ #!#" !%''$ !"! -;!! '3%/##'   ++-,'*010-0.*Ӂ +~}}}~~׀}~ 뀃€〃Հ ހ~~~Ł ѭ񅗡ɾ􆇊˴ǻ¦рƿ¼º˭̿񀍖ɒʹžɶƭǿɷɼ¶ϾľŻԀ∇ሐ뀄܇ż±þ·ŵ뀇̿ĿȾ´󊉌ꌐſĿʽº˾ž»΋򂙢ȇ˸쀎޿덑􀠖Ƶ׾ѵź򣮏ꁊ⇈ŻއĹƼ݁ހϯ幠򆙨ʨʸ̼ɽҾ⹦´褶òֿ焃ҵԼǵꙚȻ偀而ֺȼ̿ˀöʶļƺ¹ж󈉀\Zdmifc6hh66hj7n786hjfa_YWYgjikd^]^\^\^`ba`]Y_]\[`^a]]\aa^[SQQW_jp???@>=>;:?AABCGIFD@<97;CFB>;:::9643<@C?:==878798:>??=9?D?<:;999:<:::97;?>988766433348666324678::888:<<99886566678772bc47544ede`\cca`acfghfccd5799:<<==<<>ACC?@>;99987999::8::;<9875356643ffihefd``c__^bglno8pl67877::7447:<<:8898858999657887665579879<=<;9on89r>?=<@@:=@AABzszocfsEFDEIMLLMLHEB?><;76k6899:t:999788:;;p<:9?B@>=98:>?;99:p8:oo8;<;:<:9mebbecddhccgddadtFJCsje`bfj56757:jAAWgUbCi67ih431120`232200`a_`a`_^^`a^aa``1101331`^022cab_]_2101a\^]^237?;:=?>=;5]YXYYYZY]flj]]^^\^c^][Y\]]^YZXVVW[][VOORSQKCEKNGEFEGHHKJGC@@CEEDDDFGFCBCCEGHIJMOQQTRSXZY[_ZZ\[XVUQNKKQTMm`fop=DJOJNO_][XIvbr?=:==:@@EGFF=on?uoAD>ADGJMQKJKLJKHBDEFDEIIG@@GBCDD>@C><@<5=AA<95ABIEHKB9icip88@97IK<;=BEFFHJIJOQAEIJFIKJFFHJKIHGHJNOOOLLIFJMPRIFCFLNONIJKLKLLMOSPMPPNLOPPSONPTTVSQNLQZWVXXXWVVTVURUXVTRRTTSPVVRQSWUORSTW\]WXZVOKJNLJCAHVYSBDFESWSUa`bbfqYW[b_[X]b\X\]a\XXTPLMOLNOQUVPQSNNIAINPNMPPKLOPQRSURTWUSSVURSYTOW[TRT[XYY]`[X[XZZbhd\X_4PA88>@:ZZh=FID8AQPSVTPXO:=>BIKFDA5>FDEIKHGIJNTZ`dbWUOJC>9he59=@ABDDFFC@=CB?<99;9AMF?DFE<=?AFOTSUUUX[]aaba_]XXZSKPSWTW^b[TIND=/48?FNQLBHd3678;ECIQVYVU[VRSFP@>9DNRK@AJN[[XNT[bfdac`YQVYXTK?;JOPSTUTTSTSSVVUQTX\cZWYYXZ``\_]_^[`feYa^\ZTUQQNNIIOOGEHMICIIFQdnE?QLKMKR^VMPRVVVWZ[^]\[[YYWWTSQRVRLMORUVY]ZQVTSSTYZZWSSTYZXZZYXVVWV[ZYXVYZYY[\_ajiaY^b`\^^YZ]`bcb_]`fgihfjmkhf_`febea`aa__cbbchm:8mkkihfehhpOd=:68hWX8:5FMQMLTOMUTQRJ7[;AJLMNODCEDAHNPPPNLSWSSRVVYdbcfmkmiktvwyrnqnoxtpqkigijeffkspfknicedacdcbgkmlmpjnlsolknpsrqplhcwA>wopwzuqponlmmkjiijfghfcafjkkkijmnoljmptrqnmnpnkmnrvyxuqtxz}tvwx{{pjoyyvlx}xuu~{uqz}zyuulinlaepmhhlxw|xihkyzsqohnortrssrkaWLR^YV_i`Yaop\_}ESQNKMPPPOMMKJMRSY_]ZYWVTQSVVOJKRSTNNNOSSOMKS[SMHNMLFHSPOJKG~xxEHFGHNORUTPNKNTXYXXWWTUUQTYXUUVUWWROTOLOM}zyyzx{xzxqpoqmkookgagnptqjji|olaTUP\yIEB=:6aa[huPQPQSTTLEIRae^]\XUTVWQT[]WP~tpklmfcddhfb`[bgdcda_PGV[`eWU_q|USQzskij_arhee\Z]]ZQQ@KXQrslljtldhjou}{{yroqpb[UUVYZYWYZ^^UY^fjeflnhikqke`bbeabfijjmgjnnhdbjjlnlu~rktsllkefjda]ampkjomlfb_VBUFPQN\]YURWZZ[^`\Z[^WWZdgfl\URQMLGqc}EQWKGSSKHIHFIGEI8K@XQ18PCFB:X]abglfsxjdiffkhi`^[OVVSYPNOONQTUWZOJIKHfN|DMPELJzv}}v~csikpQRTNGbUJILNMHORHIMkhopkK5dXbfq~{kj~t`\[`\XUSGN|`gQKKQX[ce[LJROQVWP{lu|PO}zutvyutokgflgekpPKqjfdfnywqgtqhs{vtnhfgjtc^kkc\YVOKUZ\_hZWnDnxpuyvvwvtkelqAdcIIHFIJGCCJMGD@ACB@C;@EACFHKPIE}xB}~z}Dowehr`msoiWCGR\L@SKXr~~>?><>@JMNOIom@LWNLKIJQJHJFEED|z~zxpkmifjfaXUPLFhadd:3_iog<8f:?GGBOHSctr|DBMGHV_W\UW\l=?}l^khkwzt@ED?gzAwy@A~nmvpcfbfl^Tdwup>EMD}Aribi>oxBIHG>DHGHEo|Btujc`qsIGI~wlhb^aO_``a`bYZWSLFA9GVfbbYQX]W[iih^Z[Sf_^aXUSQOOTY`eabb]TV][ShZ\feXSVRMJNLE=SUNY_cXMIMMNNOUPNJFCIFDABB@=TJHMKWPIGLJGFD<;IHKNGB8?57MG99=>EHLMPIF?CJLEDBAA=::?D>R\TMLA;@@@9@FGIGJMK:@en;9>9Bf7A:gYgB7E632j46796/6[588:>F>6;6==<;77667676;825<:68:997;886635:5363479;:99767674dcc`[g786e[Ug;84fgff59659976347863bl+(/31/,./.02232//,*+4533.,,/.-+,,---,*,-,+-+.,-+-,,-(''*0344441..0/-.131,((**)+*'+/-(&,G"#! !$!,+/00/-211/./123200/!"" !124102*1..0-,,.046653=235!<7>714>E"#"!#%%%&%#!22]223361001000200421./5!#"730/003.!)5.5"1/0,-,--,--,*---++*.,,,+,+)***&'''&%&&)/21,---++.++)'(*))'((&&&(*+*''(((&""$%"!"!"##%$#! !""!!!###"###"#$%%')(')()*,+,-+)**))*(&%%(+&548>@"&+-'''00.+$<5;!  ""#% :;"?6  "#%(%$%%$#" """ $$# $! "%$!! !!!#"#$ 6366 |$'# <8678<:;8#"$ #$ 65:"*!&*#"#""" !  !!!!""!! ! !""#!!"$!" "#"!"$#$"!!""%%$$###!"$$%!  "$%%!!!#~$&$"%%#"$%'(%$%'()(%$"&)&&(('&''%&&$&)'%$#%%$#%&##"%#!$%$%')$&('%##&$"!)'$ (*))0.0.29*)+-++(*-+(-.1,**'%$&'%&&&()'()''##%&%$$'('&(('%&)(&&*'$*,)'&*)+++,)&'%$#'*)%%'!))/ " &$')&#(# #$! "#!!""%(+.//*(&$ 20 ! $! i !&))*))+,,//0/..+,+)%()*'(('## !!!#%2$"%*,-*)-+()'!!#&(%!!')00.'*/24310/+'*+,)%&''())(()x*++),..1,+.--.0/-0///..00*-*++()'('&#"&(""$(%#'&#)-*).'&(&*1+&())**+--///0/,,,-,+))+)'**+..030)-,,+,0110.,,..-../.,---/.00/.//22994.144110..033432257X68;988336545124423643479877554466?&6!7,-2-64 &+.**.)'-,))%-"%())**##$#'+)'-/,-,..087:<@>>;=>>;;;>CA;>>;99879:97;>???@>?>8=;?<<;<>@@BB>;7C&$C@BHID?===>?==<;;=9:;976;<===;<=>?=;=>@??>>?A@?AADFFDCBDGILEFFFGG?;AGGD<>EDHE;;;DFBCEAECBEDDDB?82*.9647?:5:@A57L)MPPRMMSTRQPY20/-Y--//.---,VXXUS-026::9966513650,T+02202201/4;50+.-+''./-*,*MIDCH''".$%JT024652a/-1688776633203776777Uh:94[SV13/Z/0/[\]^`ZX[_a]POS\bhd]YSQHHMMIJKINJHJIDBBDBADB?=;>CDC?;99HA77,&'$-@($ ())5D.-.,++,'"%+8<7763225613::51\WULFEDGIEDEDHFA?:;??ACB>3/::>?23<;D>9<>BGMVVQORKKPWbcWNLGCDF?;43567643698023:=;AD?;::=>99<>?A@<>?><:9=<>>7:=:736?A==??A><71#/'-,*663//4533674468323;<=A9421/.,A;L'.1('-,(''&%%# &!%2367:=:EG<9;;;>=>866.32/3..-.V-/2114+)()'GF9NM.PRQF'-.',*DCHMIDK9USMI@;>BL/./,F*=1'')++'+-&&)OJVQ=:>>5.-47>HG=?AAA>;99=:9>AI.*:997:?DB;6?<7?DGBA=967:A41;:7222,(033281/;$F;B;@BBCECAJ832165%%%$''$"#@&'$#!""!!#"$!#$&'*'&B@"CBBC?AAAB#B:B47<19;?=1"#$(&"):A? '(('&76 &-&&(&',''(%%&$@>@EAJ@<:;659651/+*'82.)-68.-&"+:7=!5!$" 8:8658621686412DD;../6(/574-,31<;1=2.(&%%-(*/50+#7!''#$$&) " "&$%+20(,002---0',=5**563/034<%&?=;E%J(J=F=32//566!!A=>A78>:431390+3A?="&*%@#FH9626E#:B#&&%#%#$%D;A$=?:52;>?EB<<;;<=?=<==@=92/75757;97746654456979=?>;:989;;:989657656776664326999;<:545788756:77::8765557::;96227:651bbfghgbad3feh5544579989::>A?>=<;9:86767865559;:766547:53ecijhcca`b_\[_fefh69778:;:86667:=>@@<:7422ffj5k5k898mnlj68pighhgeglol;>;stsuphm;n_i}xvyzyca{EIJJGFEEB?>><:;;==>>=::865565ecchefii9::7l8mnljhkheecb`d6:<=FBlTgOoi4655feba2aa3443211a_a1`_`_^^]24`__110`__a^__]_`db_d3200102/26;A>:>=:;<95_Y[\YYXTUZ^d`b_][\Y\ZX\a`Z][YWY^\^dj_LJOOMGBDJJCCGGJKKQRNE?>@CFGJJMNJHIHIJLNPQRSUTWZZ]\QOW[VUNINMLMVb[R=c^yrbc;JQSPORXUCIPJBA<=>=BBDHG=cn?FRSMIEBFJH?CEHEGKLGCBA@ADCED?56::=CC@ELE;A>;<57<::6479<9DBAHFCCD9Xf;?@m@BDBpq9?>>>?>BC@D@DJ=owp:JLCFE:?>8:>>AGHIHHHDBBAADEDBBEGGHHIKKJGIONOVZOOSSOQNI>==AHJGFGFLNPROPTWUWY[RMHHJLKJIORLJHLRXXUMTTQOPPQQMNLQSRJFFLONTTQTYZ]ZTXYXX\WVROMJGHIPXYZZXSROLNKKSXVSKGABFJJDDJQOFGGDHSSO_e^Zbm`VSU[c^cY]]^[_`ZTTMFLNJGKMLHNMJA@a2=DJMLKMLIJMOQRSVWXWUTXQONPPOPUYU[6ZRV_aYSSV[fk6c]Y_Y>?=8BE?6a/5_e9@HS^YUZLPSI=6BFGCB;:@CGHLNJFHO[^]cd_YL6=D???>@EJBAA@AABA?AFA>>:9#99@EB7@ABFEFBMTRNOQSTV\`ecYRLILMOKMTVY\Z]QI=&8fHJOOLMLQT[[XWZ^]ZYY]]]UVVZZZTQNFDIKKRZVWWURMLPVW[VQUZ[WWYVW[ZZZY\]^]YVTVZ^c]]^]\Z]^^ZYX[X[Z\cd`][\eihkllgji`\bdadigebcada^el9r:kafk8midfq`Zn>:6ZN^;81[8BPDHXal@?F@CMMFHSLGGLOW[IZVCBGFKA2>HIKQRRTTU^YTRRRUUY\abkomifiokkmkprllihgbbgnljklywneefcbddjolldgklmlproiKB4emjlmkprrpklgan@vsv{xqonnkoplffhlmrqyqkjigffgechiklhdilonmmklnopmovwwtqw|{yyutuvqgr}{jm{|w]Xw|}}~yqktwqprmjsumpw~~{tuqghotrafeooprypcVeugZVV\\t}{vvy{JLMLIMLLKQWUVXXZ[\UTVUVXWMI|KKLHIGEIPOSSyqhsz?xAIFB@CEKY_^ZTMOMQTVWY[\]ZYYTVUPSRTYZXZZUQPTU]]XRPJ{z~on{}vnrxshheVex`jxqln>snm[dtJY_e\SDC=^bBY][YZUQSRF:w=\h[VTQQPSQQX]Txkilijh^\]_daa]\`gb^TNSW`]QWe`ciqpssuN{poinqvn[V__c[R]Y_UWacYSG~Uhnkiieahumbfkhhoyyn]txusrtwmqslkpjdhXYYY`\VZfhjnbjljjimmeelib^^]dhdfinlnnicjrnkglptnmx}z~}nysnf_`ku{umfmjhd]ZVUMY`JAOTQSUZVSNTUW`fg]YTZVZ\RIDGJGzYSRUJJQPFCDIIOQK9_I/:^>?0E<<@7[befggfvjionfgmlcZPPTTY[[SPPJPYcWd[JDHNHLPSFCQGHJ~ttjVyLxdn{GNNPMJSWJKUNIMTUGIPKQjf}Z7@>`jlrs{e_a]__`[UHvHd\LI{LN_jugNNTSNQWVPJH~zJTO|{z|sssxywmpqmqrpyQLnedfrnms~{wtqrklgfeggcjjZXWW[XTOGGX\]daYatGwvlwrsy}vlaFHPMIHIIHGHGyyFUSKCwEDFE@esw>CEGJGCE{FE}|zB|kl]ejmpggWEIKKMA2LBAcz@BByq@=HQLKLmrAL^TSLDFICJMHADB}}v@z~rgesmc`ZYTOGs^R2GQ@_s?;kb@RNDGUS]]gfAP~`FPHADE==B|DXK}pptnhjtsdxxw}LXPEEsjb_cW``]XoAfWWUQK<^=KLYlhWO\P_]e6`_ce]oa]WWXXVPQY\UWW\bXRV]JaWXec_QRXQLILJHLZU[^aYQIJNOPSTVMII?@DFKHECAFQCHK^LOOKHHDDG@EHNLFDA>8\3JG7AEDEFJCFA@DKNKGC=UC=;CHDRNKHE=9@B<=9KQUJCDDC5h?E69>F8259553F`&/9Rl14696.51499::;>=?@ABA;865579958><0.:BFBC$%$#"" i-.,.--./00///./011/..05321/-//13747#'50./1211!"32:*..10.-,,-,-.,+*,+*.,+,,-,+,*,('((%&&$$&(,,-+++,*+))+,*')'(')+((+/-%$%&&$!"$$ #"%%%()&" ""#$&(&%&%%$%&&&'(''(**,-+,,&$(+**&#&%$%*0-* 94A?:<"'*-*'(+*!$'$!" !$$4>#$''$"!"%#"!"$%"  "!"" !!"&#"## $! .5!4!9"!89 !!%09=:$'! ##$#$#  "!!!"%$#""%%%'*##%%%$" "" !"#&%##')())+&$!!"""! #%""!$%)'&!%&$%%$&'#$!%&'$! #&$''$%&&)(%')'(+))'#"" %*())'%&%#$"#'+*&! "$  $$!!!((&01-*06.(&'+0-/(*+.+,.+()$ $'"!#&%$('$(!$%%$%%##$'(('(*)(&&)&%#%&&&)*'('%)..*&&''+,+'&*%)),"(.-+*"" &# ""!  #$"!"&,.,./-+%6 $   "#"$)(&&&()),010*'$#$%'%%(('%%# "#$)#&&'&00,$ $%$%&*+,)!&'().)#'%#),(.5750--,+**,42)"&%&(((&')+)(''"")+*+,+**,.-.00(*-.0-,--.$ (#$()  ##%/1"$''&'&()--*),/-,,-///*,,./0,*)$$&'',1-,.,+*(+-/2.+-/0+,.--0//0//010/.+,/240221101131/.102104421115679;<9;:52563466524342058=81487535=7/8.(0& * %.37! %"$+)#'-'$$(),/$,-&#%$(!!$$&+++-,-2/-./-//2388?A?;:;?=?@?CEAB@><;:;@==>@HFA<<;9889>A>=89<=>=?=<:(7<;<<=@BB@=>;7>&FEGJEA?><;@@>::=?@>>@CC@ADDDCBFJJMGFCCDEAHHA/,DHLMNKFBGIAAEA?FHDEHLJNMGQTPRVOCC@:;DIH:;;DFDDH@70;F@88679KNMLMQJGIIJLSSSWWZ/0/-WX,.--TONNNPRY]XT-15226899;7542144-OLLNLM*MEJRX,SQT,,()('*..0/KFC;?C">#'$!!)7>;94020Z047889986563562558<:8;<6457R6:9401-VV\ZbZU[[_LHHR[[RKNSRLOVXZXTUYTKDBHMIDFQYJB>=8/:K5=H=68743)+7(4690*)/#150+,,$8 8?631/0/101571YRPRJA@BADG@@AAD@?:9<3169=926>:<9=F?8;@?AFKH?5FKHHJKKCHICCDA@B7877<757>>><6>?=>?CA;;A>8776;>:<7=CA=:=?A?@GLKGGNI?ID?958=AEB=8>?@<9643176'&/0/0252.)/02:>=64154872-,.0/F2O1.0(),+%$%((**%'$3579::RICMI969697731'QQ@);4))CL+,9?E;+-1/*/32.PHHQQQNPN*)SJJJGEIO)0.PLGGHCC===ABB>@?=@BAINT-*:778?=8B>?FLFC<4H$$)(%%&&&%%#9;$.*&#@%#%$ .:?!"$%&$#%?%$BABDB<"B89057;;590$%" #/>!"#>: $)%%'69 &1*+'$&'#')%!%#CA="DD?C=64=:65210-(@0&"/=!1.($&")'0. *=/$(# "#967463./98;60/DQ4:-)72.383.*1979+=0.+((#%$%)61"#7#$$%&'"* "%%%',#+6<20++,)+1;<6;8965545>BA;;6??07.CBEC90)-7:348?<=##!D%@#>@";> ''%>BCA9275)3;6-6D56:A'&#3+C:;=:8;CE6@?@D+4.%&;5534-00.+8#7)++(%-%%,77+$-&.,1.+/1,90,*)%'+/')(*/,().!-*(201('+($"###%+(*+,*(##%&&(')# # !!%"!  * !#."#%"!# ! !$"-%" # !!# #$" * !&"! "$& ~!2 #$#.!)-.,,-+,,-((..--01-./  +뀆€؀}}~~Ӏ~~ ~ ߀~~Á 䅌拕􀅈ܱҸ될ʾ³˸Հ¾ûǽʷ̸Ŀļ뎝ѿブþζǚɻۗڨͫоȽǿĿ􁅃̽ȳļпˀ횆惊󘤬ſžѺɻ˸ſ쁉ԁވ뗪żµ˿öûżȾҸɠ֧¼Ǹ󏏀غ逃밲ԴԎԭ􈊇ڀɻż役Ǽȹȼ򌟠킃ϾŦȴЃ׈򈐘̻҃ΰǀ»ϴ·¦߇ëȵʾнϣҲ鷴γހ낆̽ȹ爄ҺҀʼټƷĻȼþ욣DZǀȴგጹۮ65ib[\m=<6467764i5674ighog]_ehgmd]`abab^_c_b`__[Y]]]`cddflkd]Y`a]]Y[ZZ__^b`_^]\`bbefccd_adfc[Wa79<>:85233328>>=:746:87:=?A@>=;:;D<><<<=?A?BCEKNLFA?<:;CSZXPB=7_U3568856984797jed798999;>:776678989=;86<5fddff49:89=sruyqr{~HHFA>=??==>===>>=>=;<<98::8679jjhihfhlqlimhjmjeecelqkgn<;8pgdgijgghil79:96hecfgb``eecbbbfgd4llqppm9?sjb233gceeab1245552111b221a_^_^]`b`a`100`^bb^_]]bca_^01X/0/0/08>=<;7`\[\\[\][[[X_c122^\X^`Z^ch_][\[`d``ae\IEQUSOLIDBEHIHJKKNQOGB@@EILOPPPNEADHKNNOOQSQQRUUVX[^cZTTVVWKEQQOSUWVRMGJsdeeq@EMZZZXVVSRCs;?B?;BHHJLNMBnm@IKGBBGHGGGA>=CFHKHED??>76;=?>ABDDF<@ABAA>99<<;8CLILFHWTKLPJB?>?DDJEDD>>?=;>>>?DHDAB?CINDFGMHDOSOGECDEHC@CBDBABA?AFIFHFGGHFFIKJJIHINMMMJFGEFFEFD:9@EIKIKMJGJPRSUQPST]]SPORRLLLONNNLJKOPRRQPNPQQUYRPRVWRLJIQbUVVYVUWZXUWXRTXQSROKHHLMLORY[[\SNLQQMLNGA:CKGFMUXMLLNKLPSVQRSX`_[\``XZZ]Z[`XW[ULLMBELLMKKKFCB=73DOPNLKLKMLKKJOQURPUTROKMMOMLOQPNQ^8@`POVZYVVXZ[\YUKKNGCGOLKLJFIG@`W4>?;<=;@83337;DJIJLVXWYWKU]X]cZUXYVOMLJQQNRUTV[c[KDWA5?HNYBbWZ]Q:F476:FGDDJPPSYUKIORRKIIOOOSMEJMKSVY[WZZYXZUPTUSMNMNWYTTOMQUTRQK@AKQQRVSW_`WY_daac575ei6gd^_`YWZ\]WRC=<<@>:9?G@==,QRs>DK;C2,J8A8[dhlsjjkilpbaijc\SLUP[`em^KOQQVWW\`UHIVRKxyPOGGIDIzz}r~x^iogijpDEDEHJ`MO[QIQQRKL^V~w{~OJaMdns}ocb`\`hde[ILIoPb[PKIO_xeUOQSRVQIHNO~{KMLwqxw~}uzxxwvmsrjv|vMR`cejnnv{wvoibag__bbfnkf]XUTYYPINd[Z]e`^lwF|uswxz}{smg{H@EIOTOKGJIoJOIBBAxpgeda`[S^qtpidBZj`M[b\bgdXSQbcl^fRdZROF?PPTfaMGifi@LPYP?=5=GHSOPSJIEM\tdYX\\YflhmgnmiefbY^binl`[WuRYJhnlRUX]\`ejbhWfjlr[X[e\JzQ|tS[778JNRXQQLEHGFGEFFLQMKFA=6V?C8AL?>AFE@8<@A>:VU[7?97AF@73b_V7M]7.5>6/257718:18;995=A?@?BE>96437;;9::98::8779;:88877;<;=6233442458(:;<;;83ge`^`^]U]o:`XX\_d9lfhd699:86ge444G0.**3.20284./2503/--,--.++-+-+,-+***,-.//.231-)-.,,)*++-.---,-/01/--.++,.-*'*D#'&"!,32+ *#...'/..//-,0- //01g0/-0210/.-../01013/3272-...//11/14536754231-467:?G;:?AFGEE#$"W11//.--/2000..0/-./1575225223431113332022.--/100//11.346431/,,0/0/-.-.-,-,,./,,+,*,/.-+,-.,++&'())())('''%(-**)-,*,./))(*(),,*),*"!'(('&$  "#"$%%'('" "$$&''((#!"#$&'''))('(*++,,-0,(()**%!('%''()('#$9689A$%(.,++)*((!9 #$$&()#84"$" $%$%&!!""$"!"! !"!#!"" "!!&?%%!!+*&%)'  !%! ! !!  #%!$"$" &*'#" ""$! !!$""!"!"!!!"!!!""%##%$!! !!" #%!!$%&($$&&*+&##$$"##$$$%%""%%''%$#%$#&*&&&'(%$"!%0&'&''&'((&&&#%%#'$"! !$$#%'*)(*%$"$&H$#$! # $')#"$'##&(*'((,0/--0/*,+,**/*)+'"$$!%%&$$$  !'('#"""%o$%&('%)('%"%%&%%'(&%&,'$$)*+*(**('('!"# !%!!! ! ('$&%%%***+# !#" $$(,1/0,(&! "%&''#!  $"#$*++,)!'-)+/+*+,*'%&$()&')(('' *%!!&*)+/'#$$!"%((),*%$*++'%%)*'*'$&(&-.//-/.,-.*'**)&''&+,)*(&(++)(% &)''+)+/1--020//0321-./**-.,*)"! # #&-)6"&&')*,,+*((*,**))+**(*)'')*!!"$(&++),0,).,-...0.12200.148741/-.-/.//.1/--01/11222361003573223334156898865987534424754897985345677568=970+(/(5342!$$&''('%''-)(&'&!4%&(%(&!&'+/-//,,,-+),2/-.//027<@;<<=<>?@?=;<<<:9:;=>CILKIA><<;9767:<;769<>???<<<:7=<<=<;>BC?>@=:8@IG@B?AB@@???=813=AEECA=<;:9::<<8;>==>?A?@CCECDECB@BCC@??7DCAACFG%JBEKNHEHJ>)'7 EJMMLLPGOSHDCABHGGILPRQTVYYVUSTVTUVVURNLMT03752/-Y/210112_573330-,F0;9958@@?HGHMLGHJHFFGID=9>741= A%&G"$)0452/-,Z.ZZ268953347989<84556:<;?>78;;87541/BL[WSSEJLGKOQTXSUYbeXQRW0.LDBKGGHJGJHHIKLJHBKMJ5.>3'764/11,&-"2::5*(1,%"'+154211$)+$75*76210.1120/0WRRSPLGD@?=99:87;>??;::=:68567:><>GFDBHF>8=>?AHGC;26?57>D@??DE@99<>989<:87677;:>@>::>>;?B?88=?@@AEMHC>??:CB=::CEA?@<69<620-.0350-,,.1462/49<<::>821038:2/0RIH@J8H'2,%$$$!%%$%(&!!379>?;82,4/68;A7*,./23467.%&0,)SPBDJ/.(LI()%(KEFGL@JG7>NQU?:;;>G''J&(*)9*+5.'-+,)+72NQECHQE"($2:@FPJNV@9:859@;<4(,+<.83,*OM),6EL90,.//2/)LFHLQMNOO(-.QHIIGDL***MFB?DAEC?CBBBC=BB=EJCKW-1E367:=>BDHA@<:56:54646:861.-,/2.(+92346206<%A@=GMCDEGFA>8C(E!#%*.*($%#6%./*%EE##D;<;121( ,%#.$G-4"&*(!"&(%3""& 8%'$ ! <9654430+0;=;83%I0=4(/40456/-,44915'5.+*#&$'32(&699!%%)#%&$' " $->B2-.221785;7;;88:82579<<640B03)F89E;+047768<89.9;9=2/273'C,KG10!!+6;?<7<6/C<9;;"$E?#!!@=!A>"'12""%I>627/,=73==40:G?9>C'B.69382.@%#B?D$>>H'D58:::1;8$B8BFH$"&&#:5336610-+00))'((## $,/-/33,&*-/12.30*(-//*&*'0*(((+,,-*$,2'*&4'&$&!"#*(*'+.*)+*&$'%'&%''#"!  "" !!%$*%%#!  "$"")$! !#$(""$# ! "##*(,#'0-&'- +,/0.,-,-&*5.()+./1..,//ʀ݀}}Ѐ~~߀ڀ~   +߀ +~~~Ł ꅇ庬λɾǺĺʨͺҀȯϹƿüɿ¶Ƽ˸±̀ȾԾüлӼ≨׸ʼܐ׸ϸګ񂉠ĻϷʀ򀅇Ϸ솗þ⾴ƺIJڄۀ󩒄݄˻ùʿ\܀ȷɾ퀇엧遂ڊѸ𑬴ʲþƶǴ½Ȁ㉱ƻ¸낄ɪ偂ϻԔʧ܂ϾǼžſǿрʱ´ێ낅≙ưђʾฯڥŷ迦۪Ľ͊̽ĭĿĩÿѷ섂ܷçٶٹſҀ煁膍ָȺӷɻƾпƷ®żű7ꂒ僤湢D55667^[b777f457664bf6gggiiggl=f_`__eidb`_dfcdeeebb]a`\]]^abhf^^gifb[VWXY[\[Y\`XX^ij`Z]]_d4465`X\e:;89<:9998@DFECA=;=:::<=??@A>==>=<<;=>>85;@?858:679888;9645554458979:986fccb_dg35557;@A@;88976676656468656532468532346788835972_^2365579:=;856;;9788:=s;9798779;:::;;9877677799874343a`bedcachifebbd5566;<;;>@A?95569:864666443febdfikgecbdccdd__ca^``fkoopqngghigffhlkkjihkpw~?A=kp>><;;<:97mnoo::==97889:765674j7;<765666gdbeinmk7:<>?pbZXckl555je7:7nnfdgdhgfdeb_bggcecSLXjlkkj3e321`eccc1233565322322322100^_]_`bb1121aa```_`a``bba^V0YZ109CEA===?><86b[\ZZZX\][/]]0/^13430][YVWYSX]]^bTNMPWQNNT[XVWTOKJOPPPOMNQPMIEEHJNRQQOMFKY^[TQPQPNNPSUWXXW[XOLILRSLKTRSWXZ[UVVWH<AECADJA@BFCDDDCADJ@AGHBBCDEGEED>8<@78=97;=AAF>;:@ABA=<86>CB;<>===<;;?=?IY`bb^H;;@BCGHFF@??;<<@DC??BBEHFDIJHDAJNSEF]h_RDCEDDBFG?@?CACC?>?DFIFBECHCBDFHIKHGFJIJKIJJJLKBDE@AIJLOMNIGEKSZXSSUUSYWSPLKLNMNPTRNJKOFAJLOQXTNMTQRVTRMOOKSeYQLNTVUUUXWVSXWUQOLNRQUVUOLPQPXVY\YWOB;::AC>CIEKHGUVRRKHRQKIIJJNNTY_a`^]SYXVY[a__ZUNIKJKOKIHDA><>:BHJNPVYUONNNIJOQLNNMMMJGEJXNFDNQSV[ZY5`UQPOMNQX\ZVTURQONNOOI=;?CB=:;D@@A?B?>BFKKADFGIJMMLLHJEGKCAHNNRYZ[TMKFFIJGHJH>ZYNGFD@??JF@7<@=;<@HH;4bc[R6DIRVQVY^bZ[ZURXIGP\[XQLOROHMRS\\_a_BI2CBWTLJ@TMaDEYg56@C?CGMRLJLHKQRPHFEILHINSOJIMSUUUZ_WWXY]\daXRSQRW\Y[[\WPUWVK@DPRQQW[Y[ZZ^]\Zb58:6cffacck7jba``ZTOGA@FHGBEJH71Hq`@<7ge`[9:MRIJNWVYYSOSIGKLKJGEHN\`XZTOLGHLNPXYSVX[UW\`eggfgbekmokfda_dhfjmmtwtlhihedc`^]YY[]_]elosppqpni_cputrcYoupprttpkip_grtrqt||<=OQDADCxqgebaca\\lvusjznXthOU\\flra\MYYflkCi\RPODPZ`b^TMzOcBJONQD>;EIPGETYSWWMTqpcST]apugbdhibb`[YZ\dno`WVt@=wgX_UTTZRYRMVm_M]i|yr^\^XQGnxuaQy9B0BQP_x|kf`axkbdlsqyC?@wxu{}rACcOEDFEoYX_{kh8JX_U`mkq@o}llhcso]d|{~Czqk|rbmhflYYJo|vy~>j=8BC[ippo_MRkecd`c_\T^bp]TOKdcURXZVQUYU^^[TOZORLF;LFUNTNSebZ[UNIOPPTWZYQHQMJB?BBDEGC=IULQOKHDDCBIHJKLLLOIEB?8??=AABFQREPJE@2LMLLEJD3=?8==?BCGKC?:JL_4;6]YVm3CV,-5E71247759;4:97:=@=<9:<><965688<:99;7578788689768778<;:84333]\469979;;864d^cZb`\V_9eYVZ\ahgf44889975eebe.+*./*-/1024237!2,--+./-,*+./-.0/+/-*+*,-.22,+//.-+(**+,,,*+.**,12,'*)*.-((+"'(" #-72#%"'8--/.,-/A,+/00230/14420/1021-/111/.//0/.00.-/.,,-/3766642000145557545589<<:79<;?=;:8433023443;@@C@?==><47?BAB61;<=@EEA=<=;;=>=<=A@=>?@BDGFHFDDB=??<;;@BCCBCHHGDBCCIMHGH@/*.8 '+,RMIDCGHKNMIHKKNQ++TQOMNHEKUNFABCFHKB::-%04>H@F29430,+USUV[19:862110046645542^024562224630XSRTV\^YRW]XOMLEFNYX[c653\USPNMOM,,HD=@LG@;FIIDNZTK?6% $$',$#(;'4;=C<4--996/47884,793984.453/1.,X0/]ZYPPLMJEABGE?;503;56;99><545E>=:60<@>B<;8620(/=Odg0L1,958DLNLEDEFDFG>=>EC?FMF><74+1360.18<65>@@AAEEFB;8@IRRCC@AD<9847>>89>A?BA;9<9=AA:759:9834597846;=?A<<===;=@BA?AA853344249?>E?633401.//./04750..01:=99?8;920>678?>-(,4434635-*-/+)LG?@G*))&GM('&ECCGF?<.4FDGJF@39CCDDEJ')+:,-3+/2,,*,1-MOF=DJ( ))8?IKJIEHQD98614?;>*,/M?1:4-L'&+)3?F60,+-,LFKMJMMS+)P(),PIFED@@'1(MKE@@>>CA=>A><:@KI?>JAJX2,96567:=C@>??:987;65:;?@5151/-11-+06//472::=BA?>KBA??DB7=;>H<<)+))&*)(&$#+..)&GB%(&ACA;$"B"%'(%#$!"!$?<>%)%$F<5887-074/% (%)!"+%'A8:!"3"+(&,*$$#'2-*)(#!"$#!""D@GL@IE@IE83;753243//9=<=6B9/C8*-106:>42&--3978-*+)"'.221-)D+6 ###&! ),(*)#)>E:4+,13;=524774663255:=>41/@#!=E:-/+-/4-3/*,>6'08DA?102/+'=FG;3I'("(&/AE;768C=56:@=A&!!;?@@C;##6)##""BC<,*,<7. (206<;=#;GC9962:<33DEHF%GD=:A<3::7>??A@>=<:;@CDEGHLNECFC??@CFKJC@>S]0058;=?A8a^6>=98768:98777643665779;88::87555789865455;>=;778876564546756556765435889=>>><;964332345777;:8678768989 8666547;978996 77678679:8854fbba`ffdedc7779;=?A:e2446887_54322cc35643ffilidebaba]\]cfedfk6j44fdgjklq:offgefhjlkpuu==:lgbcegi786hg44566545754g6:96W5hhhjhjkjkm99nnne]cgjjhffdek899lk8fegedggehfe555eRSc43336742_^4410123455322231222342001`_`11ba]\^``_`a`_^c100]247>D<44:;:852a]]\[]_\\]/22210122244/ZWSPLHOYWUXE=?GRSSQUX\YYXPPQRRPNKMRTSPNJHHHJNRSPNVa\UWYZYRPNNQTUXUPQUSPOMNPQQTWTX_2h88h^XURRPOQTVXVRPSX]accQMLHDECIHFHIFFFDC<::8GB?BCFGDCAC?>>==?8:==@ADC?:8:>:fbn::9<8;==>:;?=:;=?B?=?;65?JC?>FFLI>fZi>??@?=?A?CDA@BDDHGGGHIILJMMJEDIHE@AGIHIGFDIMOOPSWXXXVVUQMLMLIMNKOMOK@=FJFKOQVVXRSZSKLORNMY\VPLQSPUXWSQOUVTWTSWZTTPPPNJLQRPOQY^THCE=5=BR[RUZRUPKPLINQPJIE8FS[]_YV__VTUW^afkg]]a[WSROKEHFEF??FIFDKORUX\_XRLDJMLHGGDILNKLTNILLRVTVPNX_\SOMJIJJJLRSOQSUTWTMICDFENOMTT?BF?o:BE7]:AFGGHKRTPOIGGIIMSSOKKKJMPMPQLLNKIPPNNIFIIDDCFKMFBD>CFFLPFBA9aZZ>MNPTQTOU\Z\Z[[UMEM[TSPNOMQNOSRVVZ\ZKZ4I2XMMbONMN@Xb]e37>=ALQMJGDA4e6e`;@AFDC748JPNONRTTSQQJKNSOIGILMMSSOPOONGKLOSQQVTZWZ]^aa`_cdcdgicfebba`cefhmjhifehgimia`_^`^]^epmnrrqpmjfdovwz|>>??>=>{yyqousppsqoopstwspkikpqqpruuutupnruwxspnqstsosrqqpqmjhlpyvuzvtsnpolmzzFHD@?FJLJ|}t{D{{ttoiiokluxu{{ruutvwxqgektx{z{{~~ow}~ORNONLKKOLWXXUNIMPLLPPI@ro`[dfk<<;x>DC@CJGF{hckeWSa\XNOKYTWOZhvIBpmm>As|EPXf]SRPKNMGDE@DEC>x@{s}|w|vlmw|i[\USD@?ekf[gk^ntViDOSU_bOAHIDVMH?GVI>=DExvlkeb_\Y_popsjtt[vbUgYkplpaWJYsszoY[]STPILR^ecYTBNX>S@ILQ@6OTE9:Tf\`aVMjuql_Z\cggpc`c``daZVXYceiebT[t>{uc\[WWVPQSGG[naZ[k}|ib]TVKeonxliCSd9PIHelvcYpvkjnjqlmuAzs|ivmpyLBCEGGFtX^enrlj[IJZhijvzrvt~vjdbp{f`}IHIJustzmdcdng_\dqu}B|qsoqJ?qijvse\[[SXUX^ZUNGDHB7>O\ean:`SO\]Z`]\_X[`^][RH]`UR^`WRWSX^UhaaXPOJ@BNDMVSSQbgd``SLORRTVUSNILNN?FHM?4b69>8;DAJMLNROHDA;KDHGJE87<3;GIGFHLC>@FPQ7:?E@??=5aa]]>>+38F54266.5368478^8>A;@:;==>;99;868;979:86669896774666579/87643467:757::<<7cc`[Zab^^edb[Y^aei64dg454653be.1///,)+/121--..21./44-.//+-../.-.,./D--.+++()*++.120,*())*+*+,++,,--,*($"###$*.7 #&" !#"$'-*Z100.-110/./*N-.22452010/10-,-1211243102334851122455646985321--/12//M0002312541/3684/233322001566433211002102+*0++--.---/.-,-..,,--,,-(&')*)*+**)&'&%$ $(%%( "&%%$'(*)))''()('&%&()('&%$##$%')'',1-)*-,+(')*+)'')('&%&'('()&(+03,)(((&%(***)(''(*,-,&$&%#$"%$"#%$#"!! #  !""!!!   427 L& !!$#2,4 " #%"$"##%%$%)*#  "! !"!!!   ! !""!%$!##!"!! !"#$%%%'((('&'&$##" $%$&$%! "!"%(()&'*&#$$%#!'('$#&&$'*(&%$&&%(&%')&'&'&$!#&)&%%),& !(,%'*&'%#&%#&'&!#  (+*,(&,,''&(-/251,,0,*('&$ #"!"! $()*,,.*'###" !!%#$)&#&%)+()&&+-*&&&%#%$"#'(%'((&(&"! $$!%$ #9 !.!!! "&&$$!! "#%('%#%%%&'%%&$$%#"&&%%#!"! !$&#"" !")*+&%$'%'%',+,+,,(&"$,)((')&(%%(&(''&$"*+! *"#$(-3.3 !(*(%%## $((')**('(*++'$',+*,+((+,,-+(($%%'*+***++)')+*)),+))++.--+*,--*244041*,4532-$#''$&&,%: "!')(*.++--0+,/,--,,)'()+'')(-#%$+*&&S),**..,0..-.21,2.,.10..11336400224875244457753/.123375.--,*+-.-232.1456:;779995774357:9;999=;64245)# 340!"%$$&)')()**(((%&(+(%%&(().-+,,++&')+.,,004135797668:98;=9;:88869::=?=>?=<=<<><66556546;A@?BA?@><:9?BBDE""$#"""ECEA?ED@?AA@>??>?;99:=?@??ABBA@A==@ACDA@?@BDA@B@???><:;?BGDCDBA@?AA?@HKKGLKK))&##(,,,QIJNPSTNPVPLLQRP?A&OKOMOMOOLFGDBA==A@AGIGJOLICDCCBBEB;;@EGHHJJKKLMKLKAEKHIRRPLLQPRRS/41^\0/---0YK.67740W.01,*-+%0-)',..67455473(.1/3!JT13/,)LJLKLJSVO03200.013521110584/Z/,/.YTX.-ZTUVUY/.-120+N#!"D'+-+3753UHEECA=:=<@ADG@9577<98<@A@@<5422..+T+/1\PPMFEGGEDBDEF?83329<74858A<85:71//_W8=548;::7/./CGIGD?@BBJPE<:<>@BCCB>>AB<8=C@@=>=>EHGC?88:===754456416=;>92.()/423887981346;8774532/12247?IKB<;>?=BF@=58::82(="$%*$"&(&#"$" ,2;==ABEB?8=A<98932=90/5852,:*027,/9./,/.OGFCBKLQ)'K*')HDF@JB7938;ECAG93GLF?CEK)-(--+--61-+*()*DQI=IM(7CPUTXPRF4;D>;870148/S.TAF3:/(%()%#/A>40*+*(LHJJILJ+,NO())LFACB@D,-EMO?B><>HEAB?7>AA94<7;C:<&(&&(,,'('(+%,'#%"$&)$&#E$#"%$#&$#"@;;"" #'''E:5:6.-651*)%-,-&+1:'#;86!:@$*.6/)))&)*&#$ #$";!@A70400&#!285.37/;?+1!(,.,! "+#$ #,$$%@@:85310,2=9:;5=<4/1456<43512541/2297:86/0?"?;3.1,.1--.%%0;230:DBA742,/*9?AEB#*%$89C7/DE=;?:;;:?"@:@4=D::>(""#$#"G>,.27<5.&#/;;9?B>@>D>6529B72EG''&(=<<2--.')(*-,*'#!$$&-2/5/)#--*.+-/),.+-,' -/)%-.*(+'+2(301+'&#!' $,*)'/0//2)%&'''((&$"$%%& """!)$$# #%)&#$" "#"!&/ #""#&$ %!!$!!"!!##%&11,+ $.-,+(-/,+-,-*)--..-..0Ҁ΀~~΀~퀇̀ ~~~ ˾뎑󁆋󂄄ŻijľƀƯƛ􁈜檙ü€øɼõļľȻ®ÿº¼÷̽Ƽ̰½¿ÿʛ׃ſĸȿĽ􂀂лĕߍʾÿȮ½܂ހى􋕘Ĵ̻ϻȿ놏Ľú灀պ̭ӇȴȾ˿ݽ¼݀Ķྠ™惁ځ̶򄐖˦ɦì鰷ĀܾɳǵºՐIJȯ˸ĸ¶؁ٟχ̔ԳȤ邂̺؇遀ǵѷ܀ʿƷÿ;ƹùþ׻儔ʷ񏋆牗6d`]^`egjc_YVZagg7<><<=5adjlbc_]^`jlig4dZYadcb_ddfdacbe75e_]Z\dnjdc_[YXWRSRSX\\[ZXRTVVVYZZVRYf;;@?87<<@A=?BBDB?=>><<=>@A@;=ADAAB@><>@ACCDDDHLFEGD>>?ADAACB?27:9<>=<<:9958;:8f2578::97774 3597469<=;::9:=?;:86669::876679;:65975599988867:956998;>>AB?:98646::965434456658778:;89978887;:766677987%666898869978853cbaehffdb479989;>?C944875324:854defhgddaa^]bdaaa]`e67657kgei8=>9hfhhglnllnr<<:likjii78877kfebe56696544554469765i58987855999755ggcdcdg56lif5687665568::higgkhefj4fdg799:jTjjff697332467401122443123212c2333212110_]`11cb_\aa1_^WWY\]]\a1469?824579622`b110`11/0024434344300021Z\\XPLRQMKGJHIMKGHOMPONQOMQOLMLLMNRUTQONONPSU]\Ydj]TTZaf`UQQSVYXRPUX[XWVVSRSY`b25ALY\P8]ZWVRSRYZXQFMVZ\`12_SEAFB?HLLKMKIGD@DGFHKHEC>??AEC@=?=>A:;@>:><>9k6:CEONC?<>o88k7g;<8647@>=?DDCA?AFFFA?EPMHIHJNQQLG<@EIGD;ISNMKGIFFMGTW]6^GBEBBCCCFEDAA>AEGIDBB@???BEBHHEFIE@?DKKFBABHJIGKKJFFMPJ?CHGGFBA@EGGKTWWTUWSUVNHGJPOKMIHKPMFHIIINQTWTQTVXPGLORSSWURUVQNNJJNQNLKJMPOQRQQRSRQROJKMMLJINQQSG59@CQ]^[VSSOIHIKNECD|E@?RY_h@GNIKUZ_hgiebWVWVZUVSNXR=?FKBb3=CFFJHKMIKPVVRPMJPQSX]^UQOPOLIIC?ADBADHKKLFEGFGGEGIHOJ5[QcAQMQXUSTVSRRRXTPLIGKNMLOUQSVVURUUX`_[IV_0CNRSEbP?HNN[a35997DHLLJFIFIFELUTTUUXTRRKKPQTWQSTRQWZPOOC>;778gg7^b`acd^VNNOIBFTC9dAHMMKGJLPNUURVY\]ad\Z^[a[RPPVTTZ[ZVROMIMORUQVZ\_aa`_[Z\bfhigjgaef`\]a^\\ZZ`ehia`cZZ]aec^]]_b^ae^]Z\VUYZY\\`^\\bY^]_a`bkmkhebX^_abbadookdj9lm9jh6<;:794535L?AGHHHB??DIMQQMJJSPKIMOQRKGJIKKFEJNRNHOGJMOSSTSOTW\\YZ^`egmljea`ekfe_aceehhdaeecdfkwulgfefd^chijnosuuwsqmox|{y<==<<=>?A@{sotrksqttsqrvrrqsuvvrtuy{{>B?ywrtz{wvvwurpqonnppmjnpmlsskikkquoq~EEAEJMOQTQPMKG~BIDx|}|Xhy|y|RL}{om{xNMKKNWYSKIKOX\YRKHQ\_[TRILLF<@>pj\<>><;>?<:i]`7ekaajp?DOTON}wvwxqXTPQPQRPLNNMNNO\VPQRXZ\UQSSSPQSXYVYYXRLB@>=?AB@EDEBE{kACDxvpnpA|eYbULGA?qi_aa][b6<>MG;HKV@wtliba]Ya`heimnwn^wXUhekuY]bbVgHm\X]]UGDLGRb^XOz_re@RDBH?CRO?F2R\^^aXXmrkmhhmjhltk]gcffd^[VZUYgjkaQlAkfkouSXYYXNLLYVin]kzyxpe[QNjogsnAG[9LBb]S\wcPea[luqfeuy{v{}qto@>pGUMKrhkkasmkiI^^lpptrqumE~xps|r[dv|COLDxsjabqwobkllCCwtq[m<=?uxvi`Z[SUZ``]YUMCFPGBDXYX`ehnZYVLXXVghg]TZXUPOOXSY]YSUMS]RS\dWQRMBDMKBOPNOXdfc\QQUOQUVUPPKKIGE=B?FHJPRKVROMLE@MALIDIUUSXWKI=PSDACEFEE>7bda8;BDKLILTWZOE8:=9>:=;:;;895<;77:96466897785787667979<844655455127868<9heb]Z\edehjleb__bc763g44577ha60-,,./.0-.,*+-/0--01..,,--13//.''+/0/+,-//-/,+M-++)*/21..-,+,,('''),--+*&')+**)*($&-* ".9 +*0.,02///./012100///.010//,--321212323786557300/.02/.-/.11/.--065256302732221124*20.-.5,,//.-*.0+*(((++*)*'(*+&)+)%!%%"##%%$$"!"'$%$$&%&)&%%$$%%(*)'(()..,27.((,02/)('')+*'')++*)()('(+--)02,+***((',,,)$'*+**+)%#%#!%&&%&%$$" """#%#"#!!#"   0"**"  854n ""! ""# "('$#"#$''%" !!!#'&'%""!!&")&'%#"# "!  !#$%!  !! "  ## !"!!## #$ !! ! #)*(&&(%&'$!!"&&"%#!#%"!! #%'((')((%!$$&'&)'%()&%&!"$&%$""#$$%%##$&$%&$!"%%%! "$&('-,)%&'$ "$% *+,1-)41")-'%*+()&$##""('*+,+'*,-+('"!$('''-,'&"%'(%$!!!"%#"(+&'&'*&"!#00*(&%#!!%!#**-101//)*,++'$"$+%!$* !!""###"$###&))'&%$'''),-)&&%$#"""#$%#"#"!  !'%2'%&*'&'(&&''*(&%%"#&&')+)**+,'()',($',"##.)%((02"$&'&&(%'$"%+++**-+**&&)))+(**('+.'&'"#&(*)''&'#$&*(''))(%&(*,-,))-42/301/20011.*%&'# *2 "$%$#&&(&))'*-0244//2/2.(''+**./-+'&&%()--*,./12210/./36674652341/02101//37883351024541223634720/1.-2203144236/346757;=;986-1255657==:6:7754!!/2%&&&#""%'(,+(&%*'%%')))%$&S%((&$*-.*%)$&*-///.-126545789;>><987:<:95899:;:88:;:<;?ED>;:9:849===>?BBBA@?<=ACCB!")##%%FA?CB=@ABB?=>@===?@AB?@BEDC!$"DC?AGJGDA@@==>=>=&+,.,+MJKE#=<<;>?B>625228<=>?@B?:61112011.4>90SKGLGCBCCFGIK?9443450.3999=<=<8530^W^1=:5025538:68?IOM:+ $9<=BD?:8;?D>8;CINLJA57:=GFGF@EDB@HC<99888<:9?<<:677:6453310156;:6768>=<;=@=<;70'#.5348;9778625874451.-,39<:>=??@>=>=35?799;211-'(+)I'NM.+'*;0;= !"'"$%&'%%%'55:<@IHFA><<9;:=53=A.0/38<1687340157*/.60HFJIFFD*O'()'*@CFDID<432?AAKLAD<;CLKP'(+A(2()33,*)('(4GP/N.N-BR[WX^VYB1:?<962+--,(.XOB,:8&')(' -?30,)+)PKLOGHP+,OKMK(PB@BF?F'(G?MLCB=AFHHC@:9HRMIA;;CIHU.HA<;BCA@@DCB?==::;<;<997//-0.,'(./-&#10;?2@'?>IF@>?>93;C;@=/$'#&*-*&(*%'!,)!%"$'')((&%($%$C#"%"@ :9"!!!%*+MD=86.1;A5%())29'(3;##96<8<@A@$*10+)*,#$&!!"" ###!#?8#D##DFA?;8:$A3-70+)$":4-/-*)-)&((23'! %' ! C#?>:834/.4395889>70C./83:@0352)2CB(8/-/0+""'"+300*@4@6%!#" *,005//<>8<79=87;A<3:554632030299:9.9$:3<:B+.210&&&,.7>3:B?=:5/*,P<@:=:#';+9)>:11B9-884:7>@B>=@A:>9" 9$-)&C;5782:721/09==??>@9C#C@;=>=02>C$,&#<8IE:34?C?5;?:%$CF@>;/9 !==:40,,'),00.*)&!"(%# ,+,0015,,+#)+)532,),+)%$$+'+-,(*$).)%+0*'(& !$$ &'&&*00/,&&)&&()($&###"! $'#'%##"$$$ !('%)*""&& !! /2/"""&')$$ . &'" !!&-)-%(  20-,,**0.//01.-,+,+00,΁π΀р~ ~~ 򃅃·Ŀ΀Ưך킊ɲɯݰż¼̼žȾųȲųúγΐ҃¾Ļܸ̺ìϸþĸѾ€ųЧ덨Ȳـ鋑䔕ɳ猕ݼ%茇ýĵȿļ󂈇ǾǾیɡ܏ʊͽŸм٤ɼĶǾʾ섎ƹʡǯՃ񅞮񉆂¼уϯƹˀ􏔟賻ĺ놆ƷǪٞȋƸҳɿ·ѕŴ򄌌߀ҽ쀀ȹĻ˾¼ܻրüŶȻͽϹ֜žţ℔蔃扆W}46h`Y[blnig_]XU\fmm:98kdgcd`__[XZeigi57f_ZZZ_da\Y][\Zbj7g57:6edbdffdcbcda^[[YWY^[YVTMHMSVVSU\]VP_d56gQPQ]3048>ACCCBC??AA?@A@BEjFD@>@AA@AADEFDDEDEB=;AE@@CA=8>>?B@=<<:5ge577kg7657:;8665ge695eg6888:;;:889::;<<:8756766787559==:8668:879656479777::9<==?=;:9865668;<;87556654558<<<;99:;:9:779::???<<==;;7656667779756678;9765432eef4656546::757<=?=:76778889=?@:65435;<:84eecaaeeba`eigedbde4hf4854567:;:9fdddegekjj7km98899879887776436867577669:99:96533564de25766543f44cef5699657898:;9775557:<7hghgffhRehig566`=p^f6:E>89;9762111234631211333222311233113332b__b133aXWX[^ZZ][14;@686456541221S[00254442001b`_11\-YSEOSWSFMXUSSQNMLMLJIJJLRQONMNORTUUUWYXRRQSWYXVWZ]\\^_^[XVVY[[YV[a_ZY\\VUX_dgc5PXQWHi\^c_[XORQK@;DPPRVZ_4`IuonpJOIFHHHIFFHHGKJFFEBqdk8=A?:=?B=;89AFDC>CHEDEHLROLKIJNMONMDPWIILTUQRUJECIF@VWV^[LCABCDBCDCCD?>BD>@ABDFA:@EFEIHEGMQNKNMIFIJKKJMKIGB??@DAAFJJKLPNNNKLIMNRTOMLJMPMRTQRSQQSPNOQSNHMMMNMU[RQQMINLKLMMLGFLPQQMNQV]YTSOLJKJKLHLSULFDBAFJQTZa`XSXUJEKD<>DBFHIRU^a`aUO`i[MOIGEAHJUYZ_jVMZeZWVZTSRRLEKNPSZaVNLLSVX^WRSRSSQPW[SNPWRKHJOSRPKKHDJONLSWUT\^_dhoc^VRVLGQOUZeXVTS=E2=@>@CGLOMJJKIJNOMQ]WSRSSWQRRTZXQNOMGHA@A@BAAGMNIHGGJJIGGCGMOMBVA:@GLW\Z\``UTWSLEDGHIJMKCAEHKPTVQTW[\UOICITd^eeWTWLA:99CNT^565==>>x<zxo_gqqquusqsyywwvtv||???xwwwz~{xy|xrswspljnnpljijggfdaY[cdhluwwwzBCDGFBCEEECBzzuzxwyxxvwy}ztcjpx~{t}MM~|NVSK|MOLMLPTVSw{}JNS_]XY[[`][ZZWKEB=oBEJB@>>>EDGEMOTWWWOML|_d~|uotRWVXYYVWTTVPMLQWecab\[XRQQNMSZVMjsBAskqpldgn<@y~{y@@A>zq@{zBLLKNNHLGAr`x@dGGFKRYY`dgjipurebbbefg]ZVVY\VZ^[XZ^[UROLOYWPOOQTUQ{xqprrpqqmijjja[TRSRLQU\`YWWPTVTQPLR[ae_dfP[`UU]dfms}|f\E=C[c_ab]_acbkgcjprywwkiffililqt~wrzwhd^YXVSUZ\\]\YZZRIOONVSNMIHMFJQRWa_ahkmlid`eecb`a]]ZZZ^aa^Z[[[eeglrkgdeb\[VW]]Z^]][VXY\^\]_YVWTRZ_ftvmggmh`\_\Y]h[QRWIGWOEEntG~OMIdFI?BDEMTTLKMFEA]:.H0,)>DD=Wck{{pnlf`cjeec[[^TL[Zdc\ZbfiVQOM^VMT^TCKDJGGG{FxQWddstmutmu}kfNK|ELGKRQOKJKJIXLWPNYu~{lrzned[OMPSK{w|gqQGNL>BC_aTPKMKHPN{{Jvzyz~|wv|skg|}}pfv|swuwr~~zwvtwwxwslkxtbmpiffd`^^[ULKIRNLKILLAPsj|z|{snjgonrtpyrj6FKHHU[[SJHAHAGIAHCIOEONJGEIDMGEEMEDCxuDGFHHIGqif_Z]mlOIFH\j_O_ssng]eAzuutvCO[PKKNYHEHCCBCACCCEF{wCC==stoggsmcch`XMF?mie3^QQ7;?FLLF3;`UOR>oWoGHJMD@xvq?shb]_gjabegsx~us{UWeg_aV^^hdmEEjc^XTRLNMBRj]`SC>~_`H?>DAFQYK87V\grmdTbmgmiegjfijdbfmiif^^^UKTanfjib{nct{o^YeUSPQJWbmkd`ntywggXEwnjkgbeWq79gYRMg]YWR[`t|ytbeA@H|tEup=DCBqehdhkfjgjlx{qux{zvDPTHvtmkbn}HMIu@Cuo^lyurwCt~BEG~Lw=6HSKFFIJWWXVOD<;>LIISVSV^SKBEJF?JKKGHE=hUYSBCDHLHOKJQQACDNFAG>9ade7;CHDJJKMEGJEyW6=?AA9`V\W]56'Y@;L[429:75?=?@>:;;;879;==787655876668988996877588644652e54246258;:7e]`]]`fheh79g^]``d55ggg57:8~1.**-34330.*'+143//1..+*+('*/0-//+(()+--*'**+)-1-..-///././20/..-+,/.,))&"$)*(&%)-,&,--$##'H..200//1'./0]/0010121//2431//1020/00234254313-.><8:<;;;<8:=AA@C@>:9968;?>=@D#""##D""D"$##FE@5;?@?B@>=?DDBBA@@CE$$#AABAEHGDFFC?ADA@>>???<;:<;<;981489;=CDDEGK'('))'')))(&LIKFIHGHIIGHKOQGA<28?HNRQOOQNNONMNPOPSRNOPNNLHBIUX/1VYMIQ/42-TNJEMU/1XTPTSIMRXTSZ//.0463]VPQQOOJEHKMMLLNUW,.199354474310.)%!1 !"#'%*,0234..-ZPMK67GLGB>BR03368965446\/-,04?=<<852///./384/F2;G#!73741--2 =A@= <8!?@"%%%''!# 0,5+!"$*/2169;=>CEB;:=>@AA864468468757;:651.0841 004651MIHDDFGFDEDB><8453.358:777577410W16:??8>?0<@87;?AGKSO?6""5:8=<:;<<:A@=BDDHHIC?<<>??ADELDAHOE>;6541/04578988;4]_VT.22[[^250.,))*&+./388:=@AA?<9;;98775522279975433::;6502678:896232454673432165:DKD>;;@=778426<3.13)*5/))O?E)KI1+)D4(&@!!"#(++(()#!& 38>JJB@=<9:?;9:4593,649966=@A20.+51J*.6/KJIFF%I*K&('&'AGIL(D*0;9CC?DDG:DHBEMDA>;9=;;;9?81#&&%+/0+&&"("%&!&!%*#**'%%'#+'G##(###=9"$#&'))H?:7301<<+*%$/83+4A?=924";"+1)%%'/$#&#"##!""!##BBC<" 9;833=945972+'"94.,#" -&!#5(7##$&!!>>E:#=7300793357<<@<=:600.,,2+-.,&#$&& )('*$.0046.)'!481+2,(()% "*)/**((-%,(%%)&'(##&$%"!"$),.+*!,,%#'-($(&#$"##!("!!((('##!!((%'.'"!""# 1'.'!!`" %! $%% "+.0! #"!""(!#1(.*-1!!%4-/,.-++11/00++--./-.΀р̀ဟ̀~~~~ û腋ȿĸŸ¾挑󀀄޶茦˸؀ЯܢǮ¿½¾ýżǿĿ»¾ƼȱƱ̼˼ÿ֬ȿȳ쁗ŷ֏ż롷꨻㏱燏ƿͳžƀ´þȷӾί؀¾񇍂ઑ֦݀ž𑙘򏈃剟ļĿ¼Ϸø¶Ե󒡜̭Ò퀂՞̿ѩϳŶ ˾݂ĹЀ¶ٌ솟Dzȷм透߲ѲŶǽɼҕ̤úɻμָͺ߲޷ǣ̀ӽخκ͹˹ƲʸڿŹ۽ʷۅ͸÷둊􂁀<54jf[Ubglb]X[X]cgggnha`dda`\6\RJXcfdg68:;6]XZ`oa\W[TRZ`af5685efebabbedda`ad\VVXYZWURNMMQTVQQ\bZXTXcj`TJLTTSV0025=@BCFGFEEFGDEFFIHCCGECj>?CD>BDBA@98>@9<:>AD;8853586hhj432248644ige55ga_e767j7;;77ic9;<=:888667658??;=<;<;6349:53334465248:97"8:9=<98875678:;>><:976787988876455464d59<@A=;<=8423346874454359;:86457744jgfh6idfg55346657984i5557?=>>:6fabk9=@EF@>CE?BIGDCC@@>=?BDIKKJIJHFKMPW\ROTUWTQSSPSPOOMKHCFNNEDBDGNKGILTRJIIJKHFFMDCGIILJHGJMTUTV\f2ddDN;;Z;;:>@Z>7V]U\l=ACHJIEBFIKEKRSQRRPQRQPQSLMOMMLJBELPNPQKDFJIJIKNMOY]]a_`ab_agmmnuqjjighjmkgifeknjdbhmsstpidfgfhklnjkjkmqspimty|xvvqprpquvwyuqkptrqrrttt=wu<??wuruwtuvwuxxvusqrsqqlfcgfbcca_`gkl\[}@|z@@?BDB}yunefrspsy|{xufeglnjoust{|}ytoo{ztzu{y}P~Q|srrllqojjnmnty{GMSSVZ[_b`chmjgcbRRY][XWVZ\XWYWSOOQMvukdhusuQZ\UMKRZdggc]V~STRU]jZZ[YWUY]\Y[\]_dY@q@nt?A?;eca4^kWLJLKJGPzvrGIz|}z~rkjn{H||w|yllPzstztomrtzwlknsi^koqlig]VebOHNIOLJLKJBDPpskrvzyqhit}oq{|sj5>BDGU]`XNIGJCBGFK~FKIZVMIGDBDLLFFFzzHMHLLJHtf`^aoqf[DEJH_hXJcvslc[gI@C|orDUSLLOQQHDIGABDBB@=v{w|><8a^`kbcggicb^SJHsn5;VBdIEDQKUM3QU[b9FoI;F?EI@{yzBkEzhc\m}iV`wmtz=wo|pe`YP_ibchosy~vld_]TPLJb^]_QJ@fftGM98CMW:2:P^bzslIXenonhcacedfisvjeb^[ZZUXhfabc`jsa`arovc[`TOVbevl\QgtwrjgZDsYBxBib8;HCUZQLSlh\hwoqCBFJIIAMIxqkrwACnefkpflj^fA}usrt}AHLOKJNpyqUioKFuHL}rro`aiuwvlo|FIHCSE~BC

    ugc_RWg^^b\abZURM>ALKPJQLSW^gli`WOVc]d]XWUWSJDOO`VQTXdTQQKLXSWTMMTIKBCBFLY`T\PZ\QOGUXXSXU\PLDC4H]QH?R]ed^Z_ND>>=@AUUVNQYRHCFBCEHGDJGH6Q[P7=?CGKSQGDJ?ENUQJN?82a:<526;C>;:;<9888;>:6465355778:;878767767853g433bg35876e`da`[]d785hdb\a]e96i689%&&%#%%$$%%#$#" ; ## "" !!"! "&)*,,*--+  ""&&!$" !" ! #%"!$ #'$$%)/*#$"%$&)#"('$""!"" %$5527!!!"!$#!  #"" %(%"$#! #$!"#$$#!!!#&%"! !%%! $#!!!&##'$#&$$%$#$$!$$%# "%&&%""""%$&#$$"#),*'%$"##!$$$#"!!"!!"##%'*+(*'$$" $' #'*-,**+,('+,"#&*+++1( $()$#&+,'"$((%%('$$'%'&).--*&')'#%*,(')&&"#&%$ $)&& *-*&+/1++1,(.)&%$&)*+)""#!* !##"!#!!$%'),%$'(*('()&('%###!!&&!  "%$"#%*(###"#"!( "!$'.-./*,,,.-'%%"#$# $%%%$%$" "#&'&&,0)' 5#%-#,-,"'' #((./+)**+2-%%&'$&)&),'$&''&')'*')'(*%#"#" $')%$ """!## "%*../1241),-.-+++.-),&$'%&'$)'&&!#$%))+--0.&)*+,.032)0011+,##&*2//.--.-.,,*--+,,/3.,.0/23/00*+282/--2232--..-.//.---+-/22124322/.0./,.24542356342356:;;;79746948:6358<>=>;976-69),1.19 !#&(%%#$%(#),* ()(***,'('&"&,-+,,($'***(*,+-4768878;>;=B@<>??>;=<:=@=::>BEFC>99<;9:<=>;==><>@???@BCFEDB?@B???@@??"B@ !AABC"#$$CB@CDCAAA@CD@A@@ABAB>98;;8:;989;>>.0HKLKL'JH&'&(*(NIFDB>=GEBEKKNNPQE1.5=@@BEDDIIJHCI<8EKLMMIEHCHGJRVRRTTYWWVV]SQVRMLNQQQ.ZSKLOQQ^ZUMKMMORY2]NJJABBB@B@=>AA@EHINS,/33399:=:=??<:75.0320-,.22/0320..PQT0-SNEF=88=;=J2541,+18@CC?83P33139B79985468879989<8'@!47"!.02')('('*,.:8455987327?<=@;=90:B<:8;>98<==<;98><400.3554630//-,-,UTX13862,WSNDEIJGFCCBCDJKIEC98325889;:;97543V,Q+42:;>EF<@=2588:=>>HIVG@>,(9>@?>88=;;?@DDBAEGA?=?=:874773245425666858569774416<968969646743463234214+KLI7:H()M>A>A$B>&%'+/,++0-"! '5:?D@>;>;?A<97766724?56>63CB7-/04:1+004,E('DAB$)G&)'.)KL,PB)*?QA;#.,$3?1)***NJS,GJ(.IDC?G'(HBHCKHFDCGH@<>AHI*JENJLHFNOQGGD=?M1ZD@AE@=@:3;=?<;:4/97+',&)&%$! %9<:?H?@OC>88AE99>>C91!""*051*&&(""&%(@$'(30(%&$#$DF)($@%$>>&)&()('=6324=>95&'(&481(8A?;4/5%$C=<#-+(&()*%!%$!#DB#D! 9?==,(,6147895660*)>7%- %!%!$%'+#5!""% >=>"6%@63.9D7*2A8>? ?:C?72-'3:34688=84256569>@7653012/3:945779B552>>B7160*168C;0-9?@=:70&DC,&?"EK@]?.1/)36.+-?=29@EE=?>D"%')''+H;<:):>D%$<%)@=?A649?A=;<77j;:2T398<9998648=;75323568965767;<98:8788987688988854gh4gfecd477865657<><:<;;@@><=9ldf5565g67753`fe4>CCMVWTE86664347:83101131/134232334333441/\[1342[VYXW/469??AE@=;<=83112569:772..///_]^10\XWVWTYa354/2157200X`56675b\XXUORQNMMLQTUYWWZ[[Z[XV[`b]Z[[ZY]_`^^a111233fdegfccb46`LQg5i`^c`;Eo[QTW]a_df[TOQRPNU_454ZEFCxhfgdp>D@BFLFGGFHNJC=??>>BEG=7AQTQX[RC:9<@IEHICFH>9<89??=<;;?GJF9it=;:><;=;888;:?==?BA>?CEC=>9ABA>ADAEFGHNRQPPRUZYROQQRSSNNEGJMF>:6;DEDDIIKGFDEEFHNSRGBEILNJISWUXYWTOIIIHJC>=?BBEINPOMORLILSWUUTW^`VKOTSPSTWRNKHLZ^ZOMRWRQXf:f_^bVUYVVTMIKNPRTWRNJIIJMLKLOZ`fc_`_UJP]SWZJKRQ=?JNTQMG@9`>IE?=C@BCCHLJIF?FKHFIRVWWSY14hb?Oh1?G*C:=EL\5b7:97AAGMKQXQMOOQTSQPTVV\_[VVWOKNROJLKUSPKSYY`VX\LMPLMGGCFGD=DE@DHMTUSYZYTTWUTUTVQRRLOQQHBEKLRFDAGPTPRSPPPRD=MMRU^abcb_adjjhmmaacheeg^TWXUXa`[[`YSX``[VXWX_abedbb`_a_[Y``a`ZWYY\YYYZZ`]WVX``]cddd`YTRRQQRXabgiijoljhhf`_aaaehlefghkpigjgjombbbab9AjKJk559;=>?>LN=YRFR\m;AGGAKMKJMKKLLHINOPQMMOQNLLJNKIDDJNLLFD?C@@LROWf{tsL~iwsvw}wl67R\=EOU\RFMKQW]p:GkMDIBBI=v|xBB=|qlhqo]fpektApizpjcWOcspo_]w@E}le^YYWEE[]VX[OTbVH@krCSJKBAKCMZRVai}lFPdsqiem_ajhahongddZS[\a^cjhc_W`qthqtnlVRfUKUYo}ue]bijfhc\Prh[{~KO{cOfY<7R=JGEOgtgnrwvxrlGFGIGIGnn>xDJCyil_mztqdaguCvirCEEHLKNUQjlio?CDF~wu}kZ[peU[juBBEG}tBNNIC=;nddURafdgWS`[YXPF>QPJDXNEP\_b_^^dbcYfd_[WWUQKLQSQRWZWQPQPUX\WRLZRNKHDGOKFOMQUSQLSKVaZMRXb_TCD>>g`bZakmhh_ggO@:7@FOO[TLRQPMHDFIHHGGDA;53`a48=GPLXKDJ?IRURIN?54e:@<17@?4ATSOF74]AN?=_7PMHR=@>]:KRP546:988;<866:<;@>>:>??=:;=97888;=766658:6367878954067767785g76fec234569666gcceeZXgjbab7:fYZc56<@<8645+).022-,,+*..-04120.(( #+00/.0/-)+*,*)-.*)+)),0-,--...---,--+,,-,,+)(()((()'%#&++.-*'-1/.,*)%!$&%&( 900//0./00/-../,*0,+2/.- Y.1210..00//0/..0'.000/.110--100  +000  1//0./356010.10%+*,"',+)(*)(*(('($'+&-,*(('$&%#c&'(*))*+**-,*,.0-*++)(+,-+,,1000/.//.'*2/,+.,#4*$&),-,/1,)')('&')*""!@;:87>"# %%&'%&$"$#$&&%#&'''(''%"!$&%(030//+&&*%#&-*# #'"#"!"'% !#!+,'-/)!%!#$""""""49 "!!  !!$&%$#$%('$###$%&#$ "!!! !""%((! "#$""')&'('&$"###$  !! #)*,)$'$%&# "$%%""',)&%'%##&(% "!#$$%$$%!"#&" ! !! !!"$%$#%'! $(*()&(./(#%'&%'(*'%$"$*,*%$'(%%(1/+,0)(*('&#"$%&&(+'$"!!!#"##$+-/0,-/*!&.(-.$&(($&*)'$!0# !#"!"#$'(&'(&*)&%('((&$#"#%" ! "#"!$')& !##! ' )+""&*/1/-01*()**&%+++&(%$&%5#"!$'#"#&'()&(*$+&*' "'-0 #)&)/+((')++*),,***(&'(#"$((%&%**)$*. -1++.&&(&'"!!#!"#"$'+*)-.-+++*^,*+)&(()$"$(&(! !&)')(&&()")')*.012323356344../3134/)-.+,21..1-),0/-+-..33453322131..3342.-/. +/.10-,.32152.+*,+**/5567879876774454479:5778:<6687:=;56543"5%%6"&.*$,1;"%% '($$(((''%&)())&')++)(&(''$%+,+)$#!(*+,,1+,27889:77779:>><<:9:7=A>9:;=A??=::<>?=;<<:9;;9;?=>BCDFGFDA@BFFDAA>;ED@@@==?@@ A@BCC"C,?ADC@@A@DCCBA?ADBCEB><;89:=99AGG@AIJKKIHGHIIJHDDB??A?A@DJMNLL=,2;AFIIKMIFFIF>:;@ACBG>#4@INPQUVOMOONMMOPPLMQVXUR-/,,WUHFPWUXZYOOQPQYWKIKHIGI:KKECHIE@>AB?CLPRTT-2244699<<;;;=<:87333115:==<89<>?987669<989:;>??@@@DGHHECB=@@<AGHCACCA?:99::9::<:410111-T,..Z[--.-WUQLP-/25=<\IFCCKMKGDDFD?85:>>?@9878;88988861-384.5;/.289485564;<=;:986:<:@C@@EGHFHE<689;=A@>;5431--+,3:9<;40/WT[aZV82QXL@LPKQ263348;6279;9536759:74001576367766763/535;>95676557300(),.3856557934:858:+'9>?;=DC?<7472/79757953/.*()L:B+,MG%G?"%#"&)-,/-'#!)5<97;=?A8673263663>C4;C:/.24>=1-002+)+MB:D&&H))-.*++N<0-638=:727?C81A549<=>CIH.0%&&-0*4@4':HI?4ESTD9;81330+')(NQEBD3?/&.(>C1,)*,TJ,MC'+G@@CK((JEECBEECGJKAB;89D++EDELC@>J[]SKC=GAT.IA@:;ABFGD?;<::97>GF;863/5:((/)(! #"*4BF;:)A6A>?@DDCE>4 "'0//-,')$!$&'% !&+0,'&&$%B")1'!$$##$""#')('>7-3@<41/#"/5422850=<487!"(B?="&*+&())#!##!#CC" *2;= (;877738773/+!5#("&-(# $')2$3$#$ !&=>:"!@;86;E<16<6;>$;7A=;6.'6?<;0-=%B:61.12%#10,/1(-4-&":>"'#% "$-*-15E9%*5=>96;028738;:6672+42767><7403@A:?A<<0.:2(,0636;;8:51.?;1FB(-I:2@?.*/ (((-;B9=>?>?D<6D&$#'E%%#@99!?!&"=3805=:;305:$E>8<#$"%((*1-JJH699; "C$$A=@H?2/;7/3:>##$'C?$,+)% 702,)2525-(0/,-'")($,'%0.00.-0/0*22-+)))'$$(*),00.)'('*),'&",&$$#!"'$ %#%''&#'#)-*#&).,' 3+-*03^411.47'!%$*&"%%#" ! !!! -."&#*"#!&)("$0'&%)&-$$!&.$$ F1.,,/-..1*)13.--1)).ȁ퀂߀ ~~}}~~ +ˀ~ ~ 􋋍Ľ򄌉湮퀁 􀐣竞؀ÿɿԽȾ􇈁½¬ϺϺĺνǾͿ̸­ǀ̳ʾƺµɺ쌎ҀЭޞҿǐžȮ¿Ƽſ䏞οҸޜºƾڀހ̺Ŝ݀ľưÿن皌٣ǩĬʱ񟮗糞넉􂁁ͪ¨ûӻ±쀎􃗞¼⇢눕ʼ󎣾ԱʓʹDzԦ÷²ѹ̳ӽ쎚ԥ뵧䇀򀍎ίíȳպ̹Īɼīþ̀ϪǬ¸ë눐Ĺ薙ؚƀV3df44hh[V\\\j8d`Wb_^^b^Zbg83350-0TTbgebffca\^`ageefcc`_`c^\Z_eeecfggedaa^a_[YW\][\YWXVSPRUVWTPPNNQSQVXV\^cg]Xa420`c^221322:=:845798.NSTUUPOY434423534544b_d43365688786geadegi6447778664fffc_cgegj86kdQKblebd43698768989;<>CJGA@?><8<968;::9741/033346652c2537:87k9;994799766446765677664dg4457=<<;9987:<:889>D?8786479868:<85gg3f3efihfffdcad44324675gf55i9965fh4455799886667S678777;966543222g454774566556885465335556669:864679987875656543334678;8688744434333475569;:<8459?9kfkmfbeel9<><8;98855653468;75f3338@?;51244347;:97420/_`_\[Z\XVU\1ab36432XVe;<<:7e[XQT\UQSQLQTTUWXXZ[[abb4g_\]]]__`231^`bba`beeedb[X_^`hhKH[imdbaba_b\T[___b476^VUXPN04644fPCB;rKQBqo=:HSRTVRPMLOPRZVSONLLNQRUONPOJHGJIPkjWTOMPXXSNOPJB@EFNVOSNLORIBGDFFD@>@CFFJLIROIIEGC;=;d7>CAg;<6c9=>;9<>EED<>;ik7=<:=m:@EEAA>>?;<>==>?=B>?@@<8@@CFEGPQKJKOW[VQPQOMMF@KMKGFD:<=DKDDEGKJLGYJKNNM8d6GOQQNQRSUYYOQKDMZ\RORWT[`_[ME=MV]OCBKSUY^^plg]VTNQUTURIBFOTPRJAEFLMSUNSZ[YZ4hTVTLOVS[gWT\WF;BHGVY\bi_X[WVRTYa]UZTJRXODSHP)OHKORJD>;9BHNRPNIMPYWRROI=xqcDINOOOMIGHFKHAJ[XSMLPJGKKGECDCGGCDC=CMNPONOQXX^^bjgdfcegklga__gf^\chhaccijfeidbfgiklghnqinniedejfdfijptuvwvsstvustt{{=zupsyrrsp<>=wurpqnqwzxy@}uqquqmqpjhhip|{qv|~{zzz~~zz~zwutqlonsot~~~}vstyjkimqwwv}zrkbcow||}~cDem|KMKNOMM|Jz~~tt}|upffgj{|z|{z~JGPSQPOPRTYWRSTTXWOQPLKDBGRO}FUZ]_ZZXVSILMKNOTWTUUPNRRQ[^\^VPLNNSSSY\_Y^]`da_aaaglnptnddggfca``c]SSW[^bb`d_Z\Z`hl]Z]bdda]]XQQONRPPUSOLrrvnmkqkcZT_`[\``]`eda`\YWUWXWV_fb]XCMS\ZU^YZMVec\ainvq~xfc_]]]decffd_b_]a^ailnmojb\]ZW_`^\]\Z[VQTNITVX\b^_`ZRR[TSSNL}PV^\YYaa__[YXUVSRSQZh`ZOOOPSX[[\Z`d^]_`]^YWQYZWXXTTUUOMIJ[`_lh]]\Z\\WOW]VTGp:R_][^_[ZYVVXVXdc^^_UQNJKGJMJ~GIB{BFCFDIIILQPNOTTNJIFI;GF63.6;DLLPdjaijihdepoe\a_[\`WTOUWX^_fYPWcdo`PPVYXNJrkJEHROSFOQLgXKEGKVTOSZgrmlpio}vt~}{qwFSWHVZQQ_lxp`ujhwdY\WSONJtz]dROJB7030hi\VQOPK|FNoysGED{{pyH{|qr_bmL}yln`pmmytQ~cXf{{rjfcahmhdkxecZXUT_MQNPOH99;B>d>EQflUHCQBIY]erCsVJK@>MznACIHpBsnmnh``^[dntijwlj`lf[kj_WtFGvgaZYXYKCjnWVUPR^ZSHDW_WGDC_c[POVefhKKclfcnsddqffamigbaWZX]]VNVdl\Ydsdavkj_U[TaSYcu~l\[_b]a`XPi|koIXmUM{YPB<26=HHWputnio{mKJHGGED}lnB=GPEscgf{ExhlpHvpo7>=GKRZ_KFEuoowy|?BD@xzqXaheWZlvABGeh|GC{xABswkdVbjb_XLTZX]RKNSQGDS^QK`ZX`\bk9lfb_bbYYWWTJVPP[RIKMJLT^[bRUMYXUHFKMQROIJKHUUPPLOUQMPM[[WE?@7TX]WX\db__egRF>3?BJLQROKGS\NCEHKPHE?=G=8\78>;@GKI@DPHIIEMOQ@;4Y??>:?>EB<@GRO>;58OH:41PLJPAGJ23J3b235:8669=8::;9;::=;;:>>:;<=>:899;856668:989::86654564558734:924862eb225895349;6f_`TXcc_[`h75c[c46=?8400024.)--*3-+'.+,-1-,/0 $-0.,02.+*,++-+.-,./,+)+.//.0/W-,+..,,**,+--+,+)()+)('%#"!"$$%'&)*-/)&**,* "%%$! #+*, ,--00125/...,-.,./20(&.2/.. {,.0-./..0/.000.,.01311 0 + @302320103/0.)$.;+)&&((())''(*(%$(*)J%&,/*)&%*&%''#%&&')))*++/0/2.,--+***,..--,.02321--1/.24((/33.,.)%*,,*+-*)+'$.' :%'<;#*'()('%$%$%)')(&%%%'(*&$%%$!!#$(78,-*('+*(&((&#"$%(-))%%()$#"#$"!$#$$#)'%&$$"20/   354""  !!"&&!!!$(*&$&%#"#$%# !!"$#$!203#+&'$$&$%,04:"+$%'%%3!%(&"$&'(''&%&%"!" !"%)(&)+#"$'% !%# !$''$"!%&&$"#"" !%&%$&('(*+'($ %+.($'**/1.+$!%).&$(**,,520+((&'*)*(!!&)')R" $$')%)-+((2'*)$(*(/7-*,' $'()%#"! "#$! #$%&'%&((($%')%$%! $#" !$%$$#$%$"!" " ,5 &#,..12,)+*)&'*-*'*'!""%0. # !#%'))%"'&$'" 2&%*(%"52.# #'&&'&(),)('+.-.0*'&& )'$&)*)((+),-/034+*)),*$'!!$"&&')%!  $%'*''#%)/,**&% =81 !#%'***((*("!$')+-.1/,.12213225432442.+*)*)32794100534313454783252/0-,..-20-/0/02//02331/16:30211320,,%)*-054665744699445245668678897629<><9423844:#$'+)+*-8 #("$')**('%'%'& &0-+')+(')'&%%&%''##"$++-%03377;@=;=;;;=>9788<<87;=;6:;>?==?99=>;<@@;?>:889=:::;<@BBCEDBBCDCABCGF"DBABIC@AB>"#!@?==><@EGEE"B@AC$$#E#$GGJICABC@?BB><;<@IIBEHHFGLIHJJJGIIKILHHGFC>??BBEMNPOJHDE978=CHHEMPMHGD>54=@GIII7$4:GR-[XVZ\]\WWRLQbaRL..RRV.0..ULIOTSMQXRX-SVWMHMUSQQRS\KFCGGBA:9;?JIGGJLKPXXU-*P.11.+./055/02152,/0NI*)$ ?'0/L*256535551*QNNOQV..-//241240.121:;:;3.-0/412778798788::88;<<@CEDHE=<><=<<=<:73120/]VSY21]UZQW\[WWTU1431/UNGFQQNLEBABFB=41:66;??>?@>;<97858966<<@A>:<98:882,/-.0464447946773331/542440/22/.(+567@>7643572.2511%;(38746655544324;97760-+-.*+,+J)&$F'&$&#'$%),*)+..)(&#""",8=6<<;A@:48656942.36599<3-1;;C9/-233,*NM<6H)%&.+.%,-+K92)&)+56203:B=HQH<@>@IECGFE>>D:@IEG&.1(14//8>E@6PVC;:C7140-,++LLNAGO8<.,)!3@Z50-+.*OKE?'-K?E@J'%&FCD<>&D@GHEBE67=M+KIEGD>C:DOM;7BRQ>H1G2+9HIKLFB;865:=;9=D7821/,4(-*.+##" #-@E?C*D6?D<>BDED8 &(1.+.+((BA!"%"!+()'$&%"C@"+,#='$##$B@B$#$'?;<6512-*%&38//-:8;>97>A%#$@<:#*,)&()$6!%#!"B" !$09<8+'49<=:60::91/'(!*#15*$ '!*,/4!9*(' )<7 %#8!B<::<743117;84=5.:92+<#&=84/.03(#87,,+)+30,&GH#/1/&"03.*)+467&'2976>>24:754:8644121130*+8<306@42A;;406-5.-2?BF902577870,J=H=>*5A1,D9:2$&'2?CA>9.356-/>@E#$(59E($@="$9<74,1620-%*0-0&$&('"!'/*"//,0,0321..0/)(()* +(*4-%$%#%*.-.$'$***$#$&'('$#$!)*%%#%(&$%$+*(  (()(*+0.-.32&!#%&#!&-$!$!"(""!&""!$%&(%%##%#$' !"$ 8.-0,/((./-*+./)-̀ځ׀Àـ}}~}~ـՀځʀˀ~~ˀ~  䄄솆ƿżF䁅뀅􄉈³޵〄ոʼ½ս̿Ŀ¼¸ļ֭ꑞʼ̿ͼƀ¨̺ƽǷöɳʼƷ¿½¿ĵ˽ˣߌʎ̺턙ǰŲƸɀøĴ󀀅麄ҩ҃ʽȷľϿꀈʼƿꀞ׼􃒒􎓙܈ʫ焀ͥϸ熐̾ƹ㈪Ү팃ŹŹҷԭƼȼտʹꇁ̿莢Ȁ܀ñȹ܂³οþ¿ʾ¶ނνˢѬߙ戙ⅈ₆遁ǻɷؽ˾ƵŪʾͽȽ¾ū՗Üӹ/fdccghega]\V_995e]]]\\WW_^f5430^aaPYY[[e=;kc`eh5645gggfcehgeca_ceefdfjmlkgdb_YWURSY[[XTPPZ^_`^`][ZWVX\[Y]]]^^ad457;>=<=;;;:9<<:::<9::;;9889757=A<865787566675589423hfde33321123586665676788976656789:9776A78655569;986457644igefjhedd368787443535898999<=;989886788986665545*667:878665565443444334555667;<=;6235:BA?<=CA55;=>><9;;63/./15:=><:71]]\ZVX\[\.//[Y[[`430_^]5753aXTUT\`XXWTRUWY``\]^`^^d58jdYYZ^132353^VQXVVVSROMPPLNPWbcPEJOa56554ecc`c334567::62134997435ZQUMNVVODAAGQSMOQQTSU\\`c[OKMNNLNRTQORVTMNPcQPMIMRYVOKIBBB?BIB>ACEGIJI=9ADHEFGHC:>BGGBA88v=85:><68==@CA?BB?=@><:<=?BA>;;;<979>BCA@A@A<:<==A@@HJGIJNRPONSPLJJEEJGGDGND==CDHB:BHED=<^Hc=AKZ\TWROTWMMRRQXWRFF=8CFGHIJOLKNJFEJJNRTVSPNPTUOLOLLPXUNKNNPRIJD?BBBAAFII@CHLJHHJNTPHEDIHII8CCCDIKPQLIR^]RTX]b`_VUV[TVWNDITOMPXSMQJLSVQLINRVRSXWYef[YTQOQSJEHHPUSMD?@HVaaYQTa]VRR\hcea_[VTUQNSMJEEKHIPKHD@A@?BGGEBDFIMLB??B@@GIINLHGKRYXRMNQRNKLLMLKKHKMPQNPQIFJPQKJUR=;?;aEG==?9GSWY\^_b[ROSTRLPURRT]ZZDD9-NG8?@FQUWVSPTU\cX^EZACM05OSE_88^7>=<@>CKKEGKNRSSTX[^\_f]WRMBHQPKORRUTUVRTX]\aj`RUXVSVTPmqoqDHIRMPWSE?\j@FIMNJEIHMTTQBkcg:38@BAFJMMRQPRYUNORQRTVTYZZ[\^`]`cfjhgeceg ilea]SMV_efghe^ZXX\bbefaZYZ_b`ZWXVTUR\edce``ab\[]\[`b_^`^YZ_fQAHTXYZ]adca`\]aehlk68jed^\^bedcegeadfdgjidbdh7977678cF3cg<9=K@DKX9BAEJHLIMNNKGEDBDJLJL\YXSINMKKFEHJIHIHGHE@=FLNOPPNPU]`bie]dhdcef^SSVZ\XTV\a[YYYVVV^a`beeijjilpkljghigihhghgglpppnooqsy|upsqppvywyAytustwtqpuswyyvxyutx?>|wwvwspnohhlrqmmjjnquwvrrponrspvz}zxvoifgnmiegmtxupqttjkeotspw|{{ylfjloqswvuxy~OROPRRPMKJJPOK~zzmqruxuytvux{x~{z~HLPRRRONQRUUSQSRRPOPJ]PRTSQVXWWYYWZXXVM|z|NQLHLNPQQQTPHMNPUVXZYURRQTRTSRRURLKJNUUW\[WWVVYZ^]^`afeXUVZ[XZ[ZTVWVUONPUWY]`^a`YWVOFJMTUPOQKMPRPtkiosg_`agi_YJKHnZijhgih_]\XWY\\ZZahge^TMOUTOUb`dgirolhgkus][[VTQV[cdgcbba_XVZbie_^ZY\\Z\aY\YVOGZXVY[begfa__eh_P]\XXUSPNIXYORZ[aRU^`]XSPPTXX[lsmgVQNVSTTYYV`qjfhkd`^^^XVUUZ\[]XVQRSNY_fhg^VV]_aaZTU][XRlYVVZZ\WWXVVUX[\Y[YQQNNPNOSVSWUIJPMJPMGHJRTTPNPPIFFEFI9TU5:;@FI8k\mljnlggknic`[aeb``SQRVHV^e^V[npbccMOW]YOKHnvGFIRROIPTRnUDFGMPURZ`kjuLnbgoqtyMPJqnnrDMSKUSNUR[zpgrfckba]UQRK|s~Of^JG:b33LE|WTVRPPxJG}yz~DFzwIy~~rkg[y|{xqj`[nrdRb~|rP]{|siceegkkbihixf`[SVKLKIHI:4:AJKSSHPoDHLmuvqpmpAv6635LSSYUVWQMH}zxvGE=BKJRKDCD~A?DIDxB}BAAwquECG~qsha\YSQQQX\WSKnI|nwwxslotGRLHMY\L>DIHD~@EBEA;2_]knj^funnomknonda[]YZUSFHJ@TihgZOELTCSYQd<@}]~CxoCD<>FNDpFH|kijiaV[b\ay^d@CqcgncNlrhle|H}hcY[[WNS__]^XRWVXUUEEGTW[VR[slTY\VhwlYW[egfoqrztd_Zkke\XVSVYYMCDU\brqggj`^_hePLgpblAztha^J_]ZaYPLxrowFbPLEh_IO[:>7hJexvges|y?pKUMIOH??wvoq?DAC}diwFIE{HpHGyv873WeGLNWLCJCryxwqw?A?yuvijek`Ygs}{rZdv@sgdp=AJOJ>>EMNM=EMKB:6Q?GA>>;:99=;7787889787865774353246313675ccg5447458:`46:98edd]Z_`_]]bd5g_df4:<5w000.0102/.-).0++,--().,.%()$)*+*/2/--,,.//,-0.--,,-0/0//24210---)(('&*-.-*((-/./-/-+*))()+)**))***")**)+-,+'%)** 245P/.-.200-,-..-.+/,+ 5/...30//021//-w0/,/1./0/0./0-,.0,+.,+-))(^&'('%&*))'''&'((()('('),())&%'()+,+,,,+-02-)***+)')()((*))+*()*+02*%&'0/.-,-+()%'(%# "'(%&'')))+*-.+&$&''%&())&&)($$%&'&'''$'*.+'%$ "" &!!!#$$#! !#"$$%!!%$!#"&&9   !""$%$%$(&#"# !#!! & "#.%4#,.))&$&'!#&(&)(&"!!!"""&$"%  "!$''(&$$&&&#"$"!$)($#%#%'"$! "" "#! !"#('" " "!!#%%!%-,&(*,.-+)(*.())$#*%#'-)$'#$'*'$"&')&'+)*12,+)&%')$!#"')(& "+0/)%(/,*(&,510,+)'&('')%%!"(#%*%# I!"! ! "%$###%$!!#&*)&#$''##$#$#"#"$%&'%&(#""%% %%1%$$,-/,'%'(&#%(&&%&!!.& &))('$&&''!"'-!02'2- !%&#$&')+,,..0-,/(&%$#*(%((()))+(*-20150(*-,**(&4979"##*%&)("1: $#&'%"%$&*,+"546 #%'')''(,+(')()*+*--.1112012378643456930/*',2444323430.-/364551-./232.,--,-*164243223/..//3423430015&#*./03344320014688646322455478747878:954461%/-'!$)/%!%'%&$'((&$##"%')')2..+&)*))%$&('')(''%! &*-,--,-067:?;5;>;;<<710245212794344233898:;;<===@@>?;8:;:;;:8::;>@?>@BABCHIDAC@>>DGDD%CAB@BDA>=A@??@DFFCBB@?A#"EDEEGDCBA=<=AA?@=>?ACDCA??@@BCBFHIKLLLMJFFGB>~;<@?=;=CHLJFGIH?=9BHFCHIHIMPG>9<==??DD@@BIMVXW04/0242.NKKOTYUR,,T,00-VRNXTYSW_ULQ[OQMLHHPRUYZVG=BDDNLKGDLFAEEFJHJKHEGN+.000/..231223/--)3J.././3%5547453-QNLIGIM[00+),.011141,.0145886244532251-+,/666;9543257==;;=743/U*-ZYXYW[0541^11YTZ\]/1243ZRICCFSWKA:457=>84)($75BECCDA:;;868::98=CCB#;52252-2==@>BICA>=@HNPOE66653047==A;:449>B;8865766::7;54-)96455:;;:889AD<5R_<963110.R-650/338/28;:42013435AD@:20/200143.6@<Y311457443311245563-.,./..1203.')-(&,'#!$)+,**,,'%&$#!!66>>;==9:>?=:948::880/03*4:>503AC99:,,264-P+'9='&(..+',0.N9@GK*I?9>A@ADE+-E'G<;;9768"A7&*+-,//,*'B@=;%$#(&+&#$%CA" #'#;!@#""?;;%#C'C<@:61.,++*02/-(>G(B;@DC@C>::;$+'%)01&#&&$@!#!"#'3:804;68:::<>>9855130.#$$(333.)#&((+(0A/C#>8#"!'!8$&B98873,05.0A.4"#=49=5):>792?'@86000/(+/002-*.///.#%&//40-0@8+12-7?:.,-678?<=B;41/795/.-*-..(#%+-2=>79=623::.):@47#?<733(69360,*NCECA);*&!67-504*9CA:7?B@C";(/*%*' !?>99!$ "@35@&%%@FL(;%$96$-&*,3,HD"($9@>>9=!"!@>>79584.7>EB;D/4B$>637>:07531--)(-+3.*-+(""$/-$'-365,%,1.-0-+))'",0.0,'!"!''%(+*(('+)"#% #'&1)&!*%"!#$ !&'*($ ()$ "$&!"%*%#% &$%$" *% #!$-2 %&#$%&$#$"% !!"1-+ , - % &>-/2(-00,*,.-,,..1,,-ʁсۀ~~~}~ۀԁ π̀ Ԁ~。 ވ炐ȶԦӸŻȺ°ؗ;зżŻǨʼހĸƿùʿ¾ꂃ׿ǹȽǕ»ͨˆ󵥞ʿɨӀ¾żľưɷƻžĻ܀˼ƽ၎¿܀󀃃ż׀焑䁀򄄅ſ̾݅ȽȼǘϭƾʹŶ½ڳㅑӣǺ앫¥ֽĦǶ̿ƾ¼ɯͺ芉⋆˪Ժ˫ʰՅ腃ȳŽۀκ˵ǰĮùɩȵðϾʭ˶ø˕񀄅󂒉䈁ʹþ̰ûýɼνƽȞƆ?ݔ١=fihbehdedc^TR_e36jgf``YW[YVX[`^V`^WUURRYlg^`c56469879>=<895d`ckfghgddinr977:icbb`WUTRSPJFKPRRPYfhcacbejge`_`ab]Y[^`d26799::<=;77~798<;76998=<:853cbaa`]`db_``bc`dc`\ai9<866987988<>>=<<::98655567778967nidgeebf5899::7776c_37555699;6656789;<8644466655688;888<> :65887897556(79976;:99:85777468>?BB=85455g53657::76543432234356!355a23a1246789:99:8765788767899:87X446324579:754fgfeedaadf3323697554667898875559<><8875b253688999::8600765795477757656877765C:955k6;@<63569:iUT[hffi44fa^9;97787:=94`T_dh4cfccehgdlmjecd367667732331324566679;<:<<730]]]/0239@:77;<=A>57:;<=:3068951[XY]b47::5[X[YZY\\00ZXWQQUVW035713436533`^Y[Z1c[[YZ[\^c6ed3331^^3444a\[\a223685YRUUVUROJFINORXZ_`]XVTUZ_4687iii235346:=A@:9<>C:653dWCS[WVSVLFIOSQQPNMONQX\a\TOKFJLMSVRTV^`_X^a][Z]]ZSMMRPOLLNRHFCD8``59<@>GQKGDFDCBCDEEHJMKLD=><@DE@@k^ks8799989;@FIHFCBDFFIFJH@==?=9687h3DFCB?>847=CFDCD?>==BFGJKKLTSSLBAAFJLBDJMJLJKKEECD8cCDI>=wG[BIP[bXS[Z_be_ZUMHCD@AB>DCAAGKNRVSRXe_OFUdc_\WVZRRTPLAHQRMNPMQPNPRTXYVPUR`]T[a`SSSOMPLBCCBIPMIHMKLLRURNRW[ZZUPS^678=sibTV^_TQNKH>I@EQNH=@A@ENLLMPQT\ZVd`WWILB8D>]SJKSPL@?AB=r:@F@??AA=CGGJMQUVQQSSPRVYSOU[ZXY[`bcccb6:flkkklse_ZVT]ca]X]`^XPQUSPUgijijf]]edc_]\ZV]Y[[]bggdbaa]\\WWZ]``a_\XWId`\ZYZYZ\][\a_Z]^ce5;9l_\\^_cef^[^`a_^ccfgcedagmjffknU^ec9=J@?>:DEGLPLIIGFDBCLNMSVVUSPQMKKHGDFJEDHGHGB8:CHNQXWVRXceaaefigfeb_ZTPNGDDAHMOOLKEHKLPZ]aeikmkjotxwtlmiigecbghhgnlklknrvvqmostwxtrovtllmpqqsw>xtvwz?}yvtporvsstspngc`degpxwsorporqruutvx}}{~CDEEyvwtlfaceabbabfhjjhga^aekosw|ztookhnmis{~SJNTQNSTPLOLLJuyy{}|on{~tv{|vNVXTNKOOPQOMNNIJOOJKNONLNOPOPX[[ZYOI{uw{xyLMMQRTQMNQTQTURT[[URPHIIHLV[\SPWUTVYX[\\Z[\^`SKKOPRSQPMJJJOQOPWUSTNLLTUSSQWUSRMMQRP}omloy`SSge^TMINOQlokceaafg`[XZZVU[]]VTVQUXTWX__eu{vjdbciltolh^Z[X]SRYded]Z[[VOQVOTXSQKHQVVPJVVPUAFaa`ceikh`[_`d^RRR\ea___^ali_YP[gqtcYh`QOMY`\[dte`^VVUGXeee]X`pldb`\\_\UTX[_`]\``ZQQLSeojgaWKFZ`bcb_`hcUKGgWWZb]_]]\[PSZ[[VUUNLPUOMTVQ[^MMOQR[hTSS\VRXRROLIDKKMN77AQJ;8?>5@_iimregnog`gaXke_b[ORUWJTe`[[ewpc^[MPVbUNLFCDDRSROPVSGqXEHHIP[]\ckkmxzJRrVahirhqKIEtohECDOSNPMPPLZogjufbfif\RSP}~}UcCq:L-/KDP^SUTRTQJIM}wy}tu|F~kwzKFzoiieqWsb\]eeTS`Mpfoxxlfdke_Xceriso_`b`R8@E<:L<5=@BGQH:IjDHLGxsqsqlaaDF:768DQTVTSXTOJ~{y~?HDzCEGTOE@AFJBBFI~B@?@tswqIHFD}whdgeTMNUYOW[NjtxsruxwqnlwCHDBFPUMHIFDC@EDEIB;fahpqn[`mvvqnhgoohb\[WWQMRVTSa~jTRWGHRXdVPa?JhsB@o?qjF|lm}suFJJLI@388.QMW]kPI{@PFwDB?Zl@>@{}|quss~g]dwukmd_qqpx=oroplang_`V^VSSDYgZ`hZRLNDOUSGR\llXH\lmiZgd`hfWTZZSMKKGIDGKGFLUVUMQQOFNEAAAZ]h[UUSOJIKIHSPWRNKFF>6>KIGEHTKEBKISQ@;DGHMNLLTXTLEDGGDRRL@<;?:680;9DRW>@5MVO\nN>88VC`X\0222425679<>B=8?><9699;;8::;?=<<:=?877678;976677685433ca2441a382^\bhg46558X355864ghgd\Z`a__]^g65gdcnlR131-020220/('.22//+.*)+*(***(&**()(&%)31.-/-*,2//00..2340--//,* ($"$&''$&-1.-.--0/.-**+,)%&(+,:-,-..+*--+++*+)+*)')/ 10-/..-//,W**,/0//0/.-.0.t.2+,/411430,.)..0-/-./00.011/-.+*+'%%%'%%'&''('&%%#"$$#)**+,-*+**+,,,--++,+**+)'('((''&%&((*--.//-+)(+-131+($'%#!"! $)*)))'&'%'+.1.+)'$%&&)*'*),-,&+.,+*),-)&&)''&'(+%%"#33#+'%"#! !!!#$&$&"! "!4.59!"!  ""$#!3"" !!!!"#)''"!"# #!""$$ !- "7)#&,0*&*)**-+*)%#! ###'&(,#"(($%*&#%'))*+,+,)(*)(%"""#$!#$##% !!#!#&))'&"$) " ##$'&%*1-&!(--,+(')&'*($"()&%'%($$$'(-.-(+'0,'+-,$&&$&)% #'&"#%$%$()(&'*-,,)')/2.,&'-,&&%#!%"'%! "&$# !#&%$!!"#$##&%$$%$"#$$'(+,''(%#$%$ &0%0##*)*+-*+)&%$##$"#&# %!" $ %# %#$$&%'*'!'%!$%!). &04 " &$"#%#&'(,./.10/./( %%(()**,.,-0/-0-+/02/1.*)-*&$%"&,,')&(*,$!**"$('$ "6!&!"$$%'))*()**((*-('-00/00243235!476768;3/,**031/-.0/,))-,+.886553-/5330///-3230/15653220/0--.133441,+#42//000/010131/12458221224673133664665524335753354%)+)! #04 "#$'+(&&%%$"#)((-//,+)+))(&%#$'$#&&%$""&,.331.39;99==?><;:85.+)$!"!(+,-++')*+-47:<==?>?ADECA;;:::888;;::>==??ACDDA>@BBDDDB@EA<=>@A??B#B?ABD$HFCAA@@ADABDFD@<::;;ABCA>@=:<=CFGNMEJMKHB>>;9==:BGGIORT5.W/421452TKLZ/^0ZSNGHU--,SWVa]]WX^\NLQMKFGGGHLLOKBDKPMINPOPPSLDEIMOLJQTRGBL/6840,.//.-X---**.-)+-.,,+//.07;;:70-TOHBEIFFL..XORUV.W/010--130[4869=;630[UV+++,/7;82064436466789:;<3/.10XV453aU[1.,-/110274670LOU/-MPURU_321127311/Z\0122ZNFFFEPX\TMG1(*<;7/(#&(.@DB>A?@AA<977:76;?=76:23533368=HJF><:9=BF@@>79838/R39==;657951462550+$%.44.+7412&-<;:<<>@=99:=A;5hV75>C;77:<:8:5-024*3;833;HB:65-.2;2+M*%$&&F.,,--0.'?2(+*).799=@=;CD).JA08<9@;>*'H&>;8F&#$+-*++.-+3A<=RQA87:<:3,/-MJISJHE19#7 ".4-/.,.-*ND&*EBAGD;=A%JFH9@?(&FE=<=;ALGFPZ5[@42363()1RMMLR+S=8>DLGJHB<96:74187?8?;1.*&*$3#$)&??;951,-$$ '+-*+/-*(CA>@&$B$%%,($#F"%&!"$&>! !!:;=7'&D%$CB8777,)(-0)02)<@@>??@A=:9@DB#&$#%*,'$&$##!#"#& ,)17::.38>>=<::@@=95410+)*,*)0D8,,0%$()1*&-%C6<"!8% # ')HE>444,16,2D63<"=8;5010.5:58$A52214/"',),<7+,,,+00++(,-3//D<)4405C:./.7,3@8=CD>3,084,)'-332-/1%//;IG;3325:>=37:4E@:960/.1/++4.(O9[:1)6#&%"?C$.# 0/=<=:CG?5C;F,*%*!>9:A>:=$@::EG:D=F&(((# &.:@ 8;:;939411+0+*+ ,6--5.(%&#(*!&-78+"-333*4/+03*(-2/)'$"$"#&##$)()$&&(!&" +.4,('&$"!##!&$*(%" !#!!("! %$"!#$"#)+'" %$" &*`#' "% #$ %"$)%,%%$##/-,),+.0.'0210+*---,+,0.,,33Ӂπ~~~}~Ȁـʀـ + ~~ Ǿ킉كݼüճ膏ý򃍔ɼɵŻȺѳṴ̊ϵԾƸǸűƼµ슖Ƽçȍφ·ނՒ׀ȸьɼ׫ރ¼̀ǾǶɻŵ郐ηйŧƷΜŃƽƼ׳ɾ뀅ʻ衵Ђ紩޾ɽ냄蹪ޢٍ僈炄ָíɳλǼIJռ݂ݽגմͽ݀ՀͿµ®ǴƼĻδͫɴĮ޺Ǯ⥀݁怒ߺׁ܁ŸÿƳ܀샄Ⱦ˿ȲͲƼȽýʾ򉝓ၔ񂊈hhf3ecglhdd^[VW\bfhhlgaX[]W]`[[Z\[ZYZZUNTVVWYg:8:8<<:=<>=84ffa_cci66687mk379jebdfec_]ZWWZYUTUSPY[Y\\[^eee`^]acg^\^b36<;;977=;;:<:8998899:::;;9654456654553345554457544634455578:8410048854359:668<>;9===;;<=;;7775443355455889<<;66:5d49?A>;95cee25476e456565443f3332b`c23236377454332467:I86899869:7897678868:953eg555hfhieffedb15665565666456789766548;::9556778867a8:9868@>875559:87::88:=<:657:=>@A76:;;=:3\`234223^WVTW[\WPPTTUWYZ^WXYVUW[ZZ]/241057766962\\]3885b\`b465f35642_`2343b`^]^ac26;72cbaa_]ZVTSTWZ\]_^\\bd_]b`aN37679A@AA???@A847654]afb`[\\OMQUTSRPQQPRRWVNLPNMLIFKLINS[kCF=sc_eesq`OPSSSRPNPNLLLFFBCCDFEKJEF:;CEDDGBEGKMLOJGICs=@ @??A>@@BFJEGQRQMFCFCCGH:6;87fhk8<@==GNTSOMMF?;=@FKOJJKHHC@@GMMB;>XTJA_;>;>GQUQQUSROFCEHDJL9MWNUYU=Pa3K.?LQSPIKRTXRV[``?UF`=>A07G]f:9@AEMQTY_[UWYTTVT\_[QQFNQZRHBAFLJJLOOPPNMPUX\^^UPQRXWY]\akko=PC55T;=BHJLH7PP`GNZQxlhuuhcfBo66=INU]YXWRPJADtpBCGQKBDJMGBGJGHBtq}{qCFBD~pZ[eiUVN]\LUdZS`qmv{}zwt|GGBACBBBGJJIHFCDC?ACE@wrpwx|rfafuqkbbnld\]]MD=DQfdfhxi^XOE;Xf\T`i@UmWcHEn?ICAFJFAFE}w{vpl[XexeWfAzpjd[YaT^cjyB|sid^WQHIKPPa{bYYPMUSdXIMSJObnbYYR]etqWcaehksny|lbcc]RKWgcli^TFOd^jeSZVaee\|ypaYSZisjfeZ]WHAU\USp`OfO`\NHEAxGOke<3WYbmg~}uy}n~GHG~pnhj@>9susqny|nosmtprmzEPO?8<4+YQDZmnmDws{yvv{wqmz{{reohgldh@ysnjhhjg]Z[X_UUVKWi_]Y]UWYTOOYTLQTVWU[]_\T\d57m_]\^XMJHMJBCNGHMTLRHMMYJIKB?@>F>NYOQPKDCILNIEEIHJOMKXVSNNIIGHMOND@>@@:889@CORCHFCFFFIG@?:<;JC@EO34:67=2VQQ_;?:8aYgZZ_3324673879>:?;<>@::999<=:<<>;:<<976678865668976632ba-``242`356faa_bgd333ce555656iff_Z_`^]``58997dgf32./-03100-,))*-0102/,),.*/0+*)))*++,(#&()()///,,--020.-,-/0/.-,+,..+++)$'&&'('(+%*,-/+)+/.-%0141-,-,-.,,. 'A-*..,.,,/K-././0./00.,  B32+.31471040-/0//.-,+#I%'&%%$$$&$"#%&%%''*&&'&%%((('*,,.+,,-+,++,,+++.-++,+***))+,-,,+/,+*),///000$'()&%"$%#&),+*)('*+'&('&&%"$%$&&+7%' 8-,./97/$%(+*('&)('%&##  !"%#"# " ! !$&#%##%!3 9625!"$ &&&$ !"455 /! " " "!!  $!!!""!# !#"" !! ! " *"")*($%%(++%&($!"" #$!&#'**((%'))(%$&"## &')(%#'($%&((#$$** &#$'$"$##$!"&( ##$! "!!&#"#!#(*()**-/,+.22/.,)(+**"!(--+*')##)(&+% "&./2:6,)&!  #$$!"$&''"#$%+.,,.0)*,-/.'#'""!$((&%$!$&#$#!!#%$!$%&'*&" "#"()*-)'%$!$'$#%'" 0,")"'(&')))'" "# "!%"$ $+* &')'##'&&"#%&& 1#%)"(34 !""##!"%%$&'*.+-0.//*)+,)((C)+-,--03312-,12511))&" $(((*.+(*,**,(,,,'& &'-*%'!33"&&&'('F),.0/0+)*,0/130387:!=7/102034/0-,/0//3/22142472-*+15553.0200101011320-0420//0422:920/21453000/1023121/114585354447311358867785484433&$'",5 !#%)&%$')&$ "#%(,+,,.-.--*++&(+'##%')$%/:76:;==:@BB>:;=;6/*(+'(%)'%(+*(%)++-/4=@DJEC@@CEGB;78988::8658=>><>AA??>?BFGDA??@B?@B@B?>>A??CCBDEDEFCC@??>=?@>:9:::9:99=@CBA@A>BFKJJJHHJKLNQPONNONFAA><978<@?@A@@=8779==?BFEEEFGE>:;99857>IKMNQKJPPORSUTSOOTWZ-//.WLLNQU./-//\b^VRTXUUUNHHHKLRQRUSNQXSPQUQVSNIPVMILPOKILSME@BABGKS-/.-/-),-,/-.**&'*+,QQ+-.,U[YNOOF@BJOMKHMSRRTURRRZ3200./Z]16652_XQNOLKLPU,-230YVY/1344557300130YTQQPSVYW\ae46]S-,./0XXXWYMDAIMKHKMSUWVTSVZ^YRRSW]YRPQQKCABHRZ]YQND608;::2''+8CJLECA:6<@@=778748<33ZPP/3::6;EKH=07?<=@BA>@:86432..9B@A967554778BAA>9;>FG><:57JLH>=D<52123.'2E>87531+&.,,039:524853442559=:4456876566888947A9359;7.+.1/.+.<<97358:<93/53/+-01.+-++//5:5./0/0117965*-0-)+0-''$!!8=;;A?@A=9;A<7><<>41164245347?A<;7/O/7:0)&+&/-$&-**.2/$@9,H'*/4933989?CI2,>318>:?:@D=A>425D%%@'0-'-0277>B>CFC<;@?<513,JHONTQ&.28/'+)35-.-,,-.+L20I?=FHIA>'LFEA54#+A317BFGINP,XZ\O?6?:302;MVHEO*,N=:8=GFJKB?;5722779@EA;0)"0  !""#"+%*3-?85;6-,0#C5#&+1///,,(IHCA!#<;##&+'"AC#'(%!&'&&!B:;@>9$%##GED'&##$###%&%%$#"#" "#%!<87<=C>736>H?=58@?:564)" &4356B940+$-3.).1-7,2&"4$ %" $$BD??<9:.,3=E4,6#?>75004+115A"@;640,)%%&*(3A1-0)(,(6/'+/(+7:610+14?=.4169=?;CF@D82452+&.64992/'*7396(..59:4DF?73..8A877/01'#22/0O@PDA;:=:><=9?$*(+9<8#??CA "$;?!=;@>>:CBB@7@88877:56"=9776765/--,0+++&*51/+.))+('%+*$()+)(*-..*-15,,.2.'$ %$ '#"M%)#(!##+#"&  "+17/*+'##$$'"%'# ! !%,%$$ "!#! "!"%$"+)%"#  #""Y&'#"!#! +/!%*'(1"#'##$/+-,,*10.-..+./1..,*,,++--02ցπ~~}~р݀΀‍~ 򀀅ւͿ胖ͦ􅎉ؼİľóͳǶýžѴαͲÿĺƻýȿȳ¿˳ǭûͷιú½¶Ļź¯ЃϑſπɻĹնաڀƾ쁎ᬌ̀ſŀɿ܀ÿ؀Ƽο̵ǵű񑧝ĿƻӢ߯úþǽ֝񽣦ùλʳô̽뎞∜ǭ߇̽򀖔ӆ酎ƬźĴ¹߯そ㊔ɲǧǷԩܽ鏎ՀͿ ˵եϼǶȾͽ¡İлή֣ᣀ⇀ǻ߂㒕ȸɿDz̰̀þſǾƵȮú¶ϿǼʷƿƍ󐚒c4366e_ehgf_[c`ZOVcdhkdbXY\[]d``ZXWURX_\bXU]QY<9l68;==<9;7545heeegd4688kh486hhgddffeea]`cd_\\[c6434557764`][VUVSPTV\djhhff9>>A?;:;=:;:652233egfg`^b]X[bf`VYSJNWYY_fj8898:96798;<9;=@BA@AAB@>=<<<>?<7766777644566778889:;<>=<99;9864446664333454454498545896458:>?<:<:764334456556565557888<9hc277\d;i]]`5;;9kgge2556545443343311365C7:9;99::8555667789765588897667878:6579;96795eegfdde23311222653557889|:<<<975:>=:97877888765445677:=@>978779<;787879;::=AA;644fd553365454479<:5cf\KT]bidcgff79;879>:86cad3579:965654b_1337<974321010023246:>???>>;740223468@A=>;89<>@?D@539==>=7_01_^]3773cWRPRQOX_3b^[YXW\XU\__^^]1372,3234133_Y^b3<@>8eb24`Zba477ca34321aa`\\]b36E6237g[OS^`^]\\^`a_a23dd42353`QGT_bf:=;67;89=??@@=99;;76653320b_QINUUSPQQRTSTUSOLNNNPPSRQ\wEJDtca[fwuof_YXQJJNTQRSRRSRSRVNOJ=B?==il9j96k^UUiBEIDGLLKMRQGGHIFJABDGCEKORMIGNTRQPJ?89EJGEHFJLLKHFJKGEHORMQYYIMO\[^8c]\TDEOJ?>?@@JPBKS^[UH9;?MIDFEHIKJIFFGEFHLHMNS^WUU[\LKGFIKRQTWUPJIJKKMLKF>;EMPRSOJNSUTVOMTYYZWSOX[Z^dj6hf`ROTUHGRSSNJIQNIMQQVTHGELUUHL^md`SQLIA9>>>@AH>8;DMMMKNSTQTQOJ>AIGEJJMTLOXVTWSQSPOJHLLF@BAHJLLD><:?FKKHKNRJDGNJHLTKDE\KKKGA,12??-]Ki76:EB?CDDFIHINGFJIMNQUYXWUTRUVVQOPSUVVT]dehh]Z]^`_\XWRIKJTV^bVSNKNNIRSU^_NFDFERUOD<=;9?kn79?BBBEFGJIHLKMKNPU\ERTST[a\[\XV`cdfb]\\XV[Z\]]a`egf[YVUXUTTVZZ\ZVV\Z[Y_dd_^[]\VTSTUTUZ\ZZZXWY]a^Z[[`d`gh`]XUPTZ`a^^XTS\YW\]Z\^da`ehjif``_eb_^acglrppkhh998;8ec6;443415YRC0FN8<>?>79=:?CKEGFDD@FFBEENQTURTWXZXPJLMMIUONMRQFFACMW[_cbedjhfhkfbgngd`_XTRWRKJOSVNEIKIF>=atw}|niimprnjecefiggjkgfgdejpsroloxO~wuqorpqtvssngfejknttqsolmhdebcfhhmomifecabcaa_cgjknlkmrywtspoqsw|{zyticcacdfe`a^[^\[bbcimorqnrz|zsokmr{zwruvtsqmptspruNKMKOxtuxz}z{xz{yzpstohcfgfebdccpKLFHyzqsxx{tmr{w~y}HLIzryvvxxzPRTRQOJ{LRWT}skw~||wka^jz|ynkmhc`ejlegv~xzocbUtFcbgZZ]QQQPURS\_]\armfZTcvrijd`^_YZ]lihffqupgcjha]`dc`^_XL\Hf]NT`^^kloh]\Y_\ZZWYZWZUWUSZa\c[`a]edernmmhrxpe]VT``beb`VSaf]\]\VNHOUV]WQQURQRPKSW]\^cc_\XXWXWYZ]`dgg`Zcf\[\]ZRNNVb[V]_pndadafdaGQabf]Z]^]VWUTOMKQRPPQSPSSQ`eclaX[ajxod]SA55787OM-HJHFHJI?IDzsny~va[e~ZIivuggaZaa_fbh@CH{ec]VOKKRMSma^e[VP_rTDSQGXf`QY[ipqpdfjnfgvptwr}|ngaWRVhkfg\[VRPV[\`\Y\ldbbmlmiXJdj]^ipbcVKINC]\q_Vgb_qSK\PIVZb_FSN[^fnsyxs]sA?BrgqCp}@@vY\~>~}h^eB}v{BDME<731[KYspnhtngbtwgEG??CC|sm}~kby{vFmd`dhmbpomqqbflmddXXVTZWVKQ[UTZZ_]ZZTUUSZMIL[HVZWTMWn6cdd_YWTSPWUF>JGGINKWPPMPMKKEDFK9ELaheke[TJHQLMJLJG=858?A9;CGDR7861^;]PKR^h@A>;850`a6443760549<7;<>??@R=<:89?=>>>@=;:9:<<7767:878974973453bcca`343a2586hbbI_be53eg5553f5ieca_`_^_df765688_,/*.110*(.-)"&..33/1*,.,-20-)(()&*-.1**-%)30//./.0.-//.../..-+-..,+)(+G)))'%$#!"$).0/.,,,.--+*-,**-/-()&!!$%$&*-E0.%(.*,,/-...%-  ^//350(.233002210///-('''+(%#%$#&(++)((')'%(*)))(*(+//-+(-,,+*+,,+*--)%(+,,-,*+-,,,./,%#*/10%$"#(,,,*)('(''()*,+(%%&(('))'.=%'";.0,0;:751+*&"$'+*))(()&&&)$&#!!"$  #&'''*!$%&#"!  *&$+'"##!"! 1764-+,6 !"!$#"#(& !!" #!!$%$! &*)&# #" ""$#"#! !!%&#&*+ "$-,+1.-+"!%"#(#&+++#'$ ! "#$$" ""$"%$$*&&&*,%# !#"&$&('%""#$#$"" "$&'$ #&((($%(*(((&#)*)+-1-,*$#&& !'&'%#$)&!""#))%$!&)*#&071.(&"""('#!! '*,('+,,--/2,*-*.1/-++*%'"!#$%"$" !""$#(+$# ! %'(&(&$"$##%%&*&&++*,)('&#"!"#! "" !! $&'# %" !'!' &('&$()(("!"! *%'+:+7" """$$$%($$&&)(*.210-+)*+,+()**,,*15478//23430/.,'('--/1(('%''#(*)-/&#"$")($ !5: !!"#%$#&&(&'(*/%**,0400/-,34352/02/-/./0/00355.-,+-,+++-,./,,0.,h*02210.//+,+,--.021/1/-.2531104648730..,.254340,-2-,01.00321478873336333678<@=:75532**%%+  $)%%%&%!%%"$#*,..+-..20*((*+'-'&%('!$""*25799;?@<9=>7510,+*.+('*,/*%'()'" :DFJJA=<@BC?<99::<;<>>;;=;=@HLJEC?>AAACDCB>:98<=@DDCEA>?>==;;<=<@B@>;89667:;>@B@>?CHLJECDBBEFIONJIHID=8889===>??::86887;<=AEDEDBELLJF@=;:=ELRPMONJIFHKHEEBBDB@BDKU.YW,.-X.ZVQSUUTQU[TRTOKHGGHJOMMPKIIHHNPPRYZPIIKSVQRQF>BEB<7;??=:<;:@OUSP)+((HBE>=LORLLPPMEHQ_ZHB?BNVUSLDCIKVUOJMQQPUY,1.Y]_YSJFJGFGHIMMPTURPPQORUWWVU[22422/-VWUTMMKELSSLW0485VPQOXZUMMMLC?JMLORLHMUQNPT]XUUSHLNPYTMIA<;BJKQUWQRLCAC>;8=AA7=3C,>>B88;357id8;5V\289887@?;44>IE>B=><>999CBC>@HI D<;?=98<=<6+/#@B.2;99AAE=8749645266685654<>:>9=;6;8EE@<811<99753/17866640+*-0250-02012-O+.3558<<86334225687;;:66;:6877610.183466?=8896:86&.==;335661322.-,00/-/-*696:1+-29C;30).6:1+EF==:97=;:3AKJUA:AJNJGA=44RHCA@;89726988=>>>1'$%$$(5"$,*&=9:954:@<9')094/)*)&'%A!%E/7%((*&##$C$'&!#%&'"$<=B?>@EFDAA@3-1+,3713&+<,#/@!"CFF?B>%%AA##!%&%('$$""#""!"1==9CDHB=98652.432504!#B(?441,'%&+(+9D015,)%0>+$/+$-45+0089:<667;68A=?@=<=/'=9007>64/*(+"26NB:4@>1MD/-G;424310 ++137;<@A@2<# "=6<%;>!!<+*=#@C713B#A?B#"'"';7968772;>2%&!#?;8DE:2IBFD?)<4248=5?ACDCCCBA@:83454/XZ24o58:;=;98:;97@C=6_g6f454454334534566bY^:=;<:987899889::9988;;:9:9:999::77666435652234f46556537423112255568:::<>?>=;;?>=??<:9:987564588:;=<9;<:<<:;;<998::978999iH6668769=<44569877:;<;54ha[SZhh54ech98757;87keaec259<<7577644578<>;;740./1g`c2258:<<=<=<:84e477:?@=9;>9;?=;?DC735;==:64/01^]\XV]d3a\Y[W\110YPUUY\^YY1[Z]]`22ca]]a^Z]36324545::8d^`a]c66a_igcbad5e\Z[_333b[ZJ:zFJRW]``cb32345bYY\d43faST]WWe66545778<<<=;89 +DGFJNIHKGFKOMONPOTSKLSFCOPLRWTNH<9qh:DAKOE9HNQN?;>@>FNMNNNKFGECGLHFEJTQVXRRTTTPLLMLKMPWXRKHLJGCCINLJJQRTVWOOR[]]\YMQYWTNGIMNUZ_egjhe\\VSVYUZRNKIIJHNUV\^WMAGGKF>@FKQRPMIG@>FKUTQH;:l^;FX[TNTWVXWWWSSV[YXWY]b__\ZUONKFJSVULA>?BCA@ADJKNJFB=9=<@@FKMKINPTRSQNNEAC@@BPRQORVZYYOQ[XUTMMNMD@HNSW\^YVKFRVJE>GOI@IMJHHLKHPSORUTNe855HPQRUZ][OVTWQNLZU:@?@GMGZ788BBFDABBAFDFEDIFIGJNPOPQRPSTTMPLRVUSRX\`[\]\WUWTRXOKLKJQTY`UQPKMJAHPSXNA7>A@JCAIFA?En[l=CFFDCFKPLHGPNOMQQQUST^\[caa][`\WZ\c`]c_YUUSW[[^`dek]YWXZ[YRQTUVUWXWXVYcd]^ZXYWSSTTSSSX`^XWWYXX\XTVYZ`aafea\ZRMVY_a`b\X]XTZa`_^_cbbek89hbaeacbbhvw>mkggdgll97edi:588Z37W1I>SXp8A@D?ci99;AAB@BFBLLF<@IKMTUTSXVVRMGKNILLLMPSPOKLELX`b_]`fhhijifchje`_ZXXYWRQSOPULJKVaaPM``ehkjjjnnjoolkknnihlkkpmkoqqtrmnrxztnnmnmkgkqkheeceb`innkhiiheddbfgfjiggfgebcbcc`abeikkkhhnturqptwvqjjlnrrpnhgfdddc`__^[YV[abdagffhjomou{}}usuxyyxxxttyrklijjutqrmnqtw|}|}}~yzy|{yywy||}|}ijmqwwutjijivrnw}ytqzxt{vnirqwwxquz}wwu~P}~yptvxtqw~~~xz{wpjnxwrj{t|{~yrgbaep}rjhfefhegvxknojeb]^_]bdc`bZVSNQV_jjj\QUTQ^hj[YTPSYUYZ_nojilx~tggifd\ZVfrrg]RL{jTX]kjlvxxf^^^_]WSPVX[UOQUY_fa`fijillmpprmgi_[[\\cljdcmahkgeook`QQRVX\[YSNXTVSRTYX]`bddcceb^ZYZ]_d^X\_[TQLJRVWTMLOT]aqkbcd]cecheU:@RnoqdaZ\SOQODCEPSQNLMPNMLW[Z^^]ds{mXQIEC>CB:79>6;<<:VYbQarornhffjfgmk`V[TRXVRSEDOTXT[]PR`paQUMUTPTPPLLQJ}ieU^bLMMQKWWcmoHWP{X[baX20W58tFJ|KJOMGIOQOTd`YRIV\ev{uuxtkSONMO^Nr79aHqs\LPTRSPNTQUTGOQIL|lz|{rvp`^n{w}br|I~rgVgLunmijigfsmcajklkfW>,-F8,%%&A'B6;?MUVcxkBLLIzpkkoq|yem89IQQ_`WJEGGEGEBFJk{DILNFEIEGLNIG~}qowzqnxhqkYYaT]pl]NBQWWbAGwxrdutEF@AGCwENRWTPLHDCCDjYiwsD~zwwy|Ftd\c\WR`g^NAGKZhqmqqfUctc[j_CZ[ed?rVs?bdGJIDCKI~ILxyv}xl`fwXP]c|sia]ad[ahi}{{GhdbWVUZXNKl}n]e`VSam_MR]WW[VQWilwtnjer|lhim[cyuc]XSatsc]ZYTUYUUS^cbgj`YUY^trXfhNYnnf[[WIJEHqVojqKs\xrOQXXYcuAKLS^Qi@wliqzkthjtvu=>}xO`>yji}}|Jyula5YZ={sttqgahjl?CC@EEwuxuk]lomtmgcc`cc`tyt>thhjihqfeg]XRSOONSSPU`eWSUXN][VSNRM\UONLSVZO[Y`e`daemVLHHHMKLMOPLKMMEIKECPFDNQadno7]SKJLLCOIED9;;CGGRWPNNJA>84534996<>J;8FJES7U87[6_NJOK<<<9:;88::84677787766655653aadb243322246gkX\`dh5gff4663344fdb`]^^_aeee`h;G,,0/,**-*(''(,+-+*++''),,*++(&%$()*-**12.,)*,..001-,/0001M//,,-.,)***)))-*,,+'&%')))+,..---+,,,--,)'())*+)*+'%%&*(''.+.-+-,*- )0/ 0-/0! <.52/+,310-021..-,-/))'%#(+.+)*&*'#&'))+('('))**)'&%$$%/,-..-.+.,+/.,,+-.**)**''!="$(*,,,--,))*.10)*/*,4 ++$%%(**+*+'%))*,()+--*''))'+*(-/132561..'&'.0,)('+,*)..00/0..))'#'*#"$&''$%(*(&'('()(*,($  ""$$$"  !"$$'$!!" "  203h689 #%$$""!#%"!"''$&& "!&*(&"&$,$!!#&"!$" #""$'$'%%$'&"$' %%$'*($ 73!$'  $&% !%$" ! #"!!"*'((%%''(%##$###$((%#!$#"$('#"&&'(($$'--.--$'+)($!"$$)+,0//..++'&((&%$&$##!%((+-*% !%$ #$&''$""#%**($!!:2#-,(&Y)+,--,-**,.+,++,0/.-+&##"#'))$  $$&##"!!$&$#%&('(%!!!))('(),--&$,)'($d #%%"#%"!!$!% !#"#"#!"$!!!'%'''()'##"# "#(('.1).! #"!"! $"$##$$%$%*,++-+)*++()&)+-/1/00//02.,1)%'&&,./2,()&(% %)*-(! ! %!&$ !4,4!##""#&)%#"(((')))--+1005330/32-/041152/-.,.00/0346/.-./0/*()*++-..-+.23./---,++,-,,-042..-...10.01/12355201,)0023351.1.+/2210133469754735569CC#;:775676445$%�<" $ 26#$$"$&#*)$"&')-..,/./,)%'*'('((**)(')%*377668<>=:;;7450I/,+-+,.(()078,,77:=?==?BB?A@?>=@A>>@??CA?ABABB?ACFGC>>>A@?<@B><:99;88>BDA= <<<:<<;>=<;;:98!9=:86469:>;>>>??DBCFIIHCAAB@@ACDCDHMMFAB??=EDBDB@AEGKNWXVY^XTRMKNPQQJMQQNIKOPMJFGFHMNKHGGIIHJNJMM?@BCGGEC=>@@IEAGMIDCHHGJPSLJQNKE>:=?BAKILGDIKLMORKDEEIMOJIMTSZ0ZMINOLNXSOKHDEHJHEILLMPLMOONMOKLLMUUSSVYZa_``^^ZZVPKEEGC>:=CJKOPSWVV[YQOPVTKDB=JRKBNURPVUUROOLOSTPGMNNLE>=<@FOQTUVSNFBDB??@:;GH?ACBB@>><;?>=512>HH?8/,G@125=<@EFG;788;941156:72269>A;;>=?BBB>;=97787?B?:;>7<>9;DA?6++-00332-,213103539:<<<=<<:76559:=946540/)).252-./157C<6554877:4) .AB>7537.-//''(//.-+,-+*)/102105>C;/+$+35*4B?@>;:;><>CA9262Q140..$%/23058..8C:.Q1*/-+.+,*+-)E99/57(+,0+228>;'1,B/230'"B'(GBK)'*(%')*+/;61/)25:DFAAEC>/--QMIR.JG.7+5&%AA2'+--/-+/,0/PJGNJ',.JHHEDI')IF;FUPNORSYTGILFADB96BQGFI4D<:?@;9DF?6=J9//4+1;;3*#+/+/!%B@B?4;:$%!!$!:#&(-+('$"""#D4+3:9#CCAAC@@&>6372,'062(!)187<<6.6=2+51 ,,30!9(6*-"$$! &%=&(E=>;GA@;15>C--12B<610470266DDB(G954--*/0)(9B9051+(060',0+*..(.77=<::6?D88<42/*/@<2100..3//+2547;94235AC28L:*/=>8322'*((Q@1EDKFO,B6HJ50;748;##'0&7"F@989@6;69=A=; @@)-!@@?86@@?AB(CA=9.& &@>::;942577 ## #$=?@F>:.H:<<>H:6444874>B<;5556594260-)(&'&*)&(.4+(*-'/,))%'#.)&&%*+-&+)-2,0-/5)$!"#&#%%&'$$%& $&"'# %%-.34)&h#"$$ '#!#!$"'%&$%#!)%!%($!"# !#!#%! &*&# &)&%%#$!&&+/(%)$ $-#23)+,-010//.--,,++-///,0ցɁ }~ր +~}~߀~~Ҁڀ ƿļô΂Ŀط¼ܼĿ؎ûʺȀŽƶμȮƼöƽĻ˽ʱμȼɾ𑢼ȿȿʽĽʀւս˾Ʈڗ򋎃ø̀ٵûƷ׺݀ƶԇ팶ސ񃏎ǵՀþ¼½ʻـŽĽż¿΀ɻ»ӹɺìƸ˼钔Įǣï炇ŭѿґؿů˽ቌ䆁̻ŀ잛πƹҷو˾ȊڱdzԥϷɺϼ罐ЖðĿܮŵƺùìе»˜‘ƕȵ¿剃߿½ǀ˺ǽ˾÷;ɁϾ܇A98f`\ag7:8585dY\\[X[ZZSXYXWXVSNNVVY__TQTPIRQNMT\Y\_^Z]]^`cf75hcdb`abcddgj894h6433ab3fa_c21`23d2256?>97;=@BDA=:789;7fcbe468:;65776787636776774d`\ZWX[]\ZXTMMRVWVSU]c`TY\^bf]VNNRRQMTXX\a013665778==96359<>93455545655:;;;:9998756:9:<@?86554344345987:;999899::9877:;8799<=933456568:9889;=9:<:44ggg_^22_Y[_`eih8;:75;:fbbehghee245765edg4gON]:878534458;;:::99;<<=@><<<;<=<;;97432333f322a`ad2ed33476799855563347;=<:<>:(98764565368743;;9;<<===?A?999;:76687799879<>79===;8ll9<;7jhefdbg565ilfiledfi`bj754c34675e4897488:?<;==952//_01_^a2326:;<;;==85312358<>:9;;;>D>;@EC<;<>?A@=;73--Y\[W[^YVVX[22_WOUTSXXX[\Z[^YVZY\_]\[Z[\]31Z8976862efgcXU\beb`a`b[Z\]^ZZZ_\TX`edeec]WKDNQSTJW_`]\d2333bb`[_`a`]PXWSMP]^e22104878<:888?:[V6641021caZSPMOQLIOU\^SNQUWSQRSOSXPNRTOKLTXXUSJLMQQVRSUQJIJKJJW]d6g\STTPRRKLNLJGIRUWXWSW`^_YXVWSK:65c9JOOJHFHHB>@ILNNMMIFDEBAFFCDFF?8j69j68>DEBBJKDHIHGF@GINRQRPVRDMPLJLVRQCEE:=:LIjCJNONPOKIIHINRPNMMNLKNUONJDFB>BEDFFNXTTI>C7>JLMMRNLJKUTLLPRKJPKJTQQUPQNKFGGHJKKMNPMJKOW[SPUVRLACCABCCDDIJSRT\d[N@DGMPNB=EAE;66@EOY`][adeeb[POQOPV[XSWWZ`XOVTJPTMA@>AHLNRKIIJF=LRQMKKFvyuCGOTMMQVUXVVZQVVXUSPNPVYXW\XVVSPMMLSTKGDCFCADGIHIFFC@EE>69>CINMLIMIFOVYWX^VFC>CKSQNLRTRPROMQPNMPOMMPNORPT482f\S[XVN=FWSQMBAEFGGJJIOQQQUL?JF:?DB>CFHC@BCFHKJB@GQSLJKMOQRRSRSWWY\[cbekntcNRQV[\[\[XVTXZ^aeelfYYXYX[[\UXcbYWXYYVU[bb`\``^][UNNRPQV^[WY]^ZXTY[ZXWY^dec^YYXWVY^_b]\^ZUZ_hd_\[]^cglke_dihhgdioimmlmme_bbl6hdf\JYOG48^7F@LJ^:@B>@ABKJC>BXFDHMTXWXTSUFHHPOLOOPUTXVRWWT^edaacaegecili_dd_`e_]^^SNNSMUWWQRYXVVZ\_bnmmnkhggigijkjedghghkmooppqnrqnljeeggfnhddca_^Y_becehigd``bgg``dfhfhhijmnhfda]\_ehidfkqpqmryxldimigiieabb`b][YVWWV[`ba\]`bmquvonppnsuspmknhjhijnnprow{uqgis}~~yv}}NMJ}yvyoikmhebcfeeilnlhkr{xzp{wwslhihmx~tstx{}x}yyy|~tx{zxvspwtnkkqmnurw~}|{{}{{vtnilwwrmllx|~|{cdrp{~uhey~stkj`_cgs|mklmmlhgipuzvnhaab_X[_[ZRQR\aaQx^cRQYUYZWWXZSV]]ZYPIQVOR`cmfhmt}{treT^m`RdilhaZTU[dc\[bffgirnfhigaa\`ef]SNNV\`gedkosw}|vpnrkgac\ZY\ijd_`adbb]ishfeW\jd^_cf[\eaWQOTXX\[[]\\_cb]^\^d]_\VVZYSLNTWZWuOV\jx|ibVTbfdbcdINctn`_YVMJNHoCEMPPQNLOPNMQQVaeirodVOFCECDJB;8;@o\fhrzynggekofjkhdZ[RS_QT\]XgOZ^\^]WYggVN\T\\YQLNOKzvsck^VKFGUQQRR`iWOgb^T\UP.2/UqIIJLKPKILURMOdZZ^RNRnyy|~~s_RRJ{mMP|][FADEKhvcTNQQURPPTRUNKSOG}y}|zskniYRhwqvNNo^_auM~pkkhag{wmdbgvinrfUH==EYaBGKJEIBCWYCVdo?IHF}zrihm{G?_di>LT\]VPIKGFDHGHHIB?CHGDCEHMNMHF}uu|ltrpsFywzh\XcU\gsnWDE\^c{FxxnmeuB{BEG~=HMU[YUMGFDAF`nq|>D~v|dyM{k`STZ[jj_J=HSlsnghxl]bjbq_>VWgpywZ^^RLHLE?=KMBINBvuxxyv_fmt`SS]Iu`b_a^Xcfguqvwe^[T]]`TQPjy|df^`Zcon]@^g`[ZD[vprgcjmltrvdW\hm^ZYXxuxydZTXZXWT_aakkbdO\_fafizit_\\b_\YOOKu_]`Qq~NoV_SlufF\CEJHHPSPl{dek{ueVgp=qvA??G@@yFst@zyCA{ron]y`swxtwM}sfgsnzG@Bwi{Bllhuccppwopm>f_^]]uE?ppmhjgkzvm?cSMQQQRWTTWXWVUVXUY_fiXWU^WONIKLMMOCMl^`lqfQVRPQPOMKKNRDCJIEOKJVWdcdg6^[QOMMEHE?C>85:@B@@CILIM>Edn[VYWTQRONPPOQSJDECITVOJIB=9@<5589>:9HKGIOD:;6_g8=7H>DLTE@LLEGDF58WVP_QK6^3'++.10010././1235496/./-,///)*10,,.//,*.211/3200/,)),**+/-*-.0/.-01/,+-04331/0.../1231/2/+.174200226799757:9986;<9==;<<61227755)%(%$+)3 & 145"!## ##$('"!$&#%).210-,.#&'+*'))+.,.-+.E/.57657:9;=:8=@<7:95474233-))-(-//-/10002379A??A?>=;;;=>>?<;<=<===;>?@B@BA>=<:;>><@=;:865438:<;;===:789<=89:<=;;;<>A@<;9877:<==:;>AAA@CGF@<@B>;=<96876:87634447;<:8699BFJVgNEBAAA?BC?==>?BEBHQ\JBKPHA;;CLLMOUXWMIINMLMTURRUQQTW_10.SPOLHFHA==?<::<<9;=@C@<>BKQLMKBHORROGKTSRVOGD>:;;=DHEDMOUYOFFDFHMIEHHDBDJHLQWOIEGIGGECCHG?BBFBBIEHNQXX\ONNLLJJJNSSUUTVVYZ[]]RWYUPKKKNMGD@949BDD@=>IVPKKNKPG58BBNZQKVUROSTROF>>PXZIDFB@8;<@ITWUSOI>?ABCCDCEEGLFC@:<>>8<>:9213<@?4`[YZI7EY`l54:3785669788997/+2404==D=AFKOHGE;0;G;3=@B@<72138:669=;;?GD>>@?::6=>@:40/69;>=<@ABDIJFABA><;<6567<==:879893>C<:8,;?;769834:83..034765778;<:8846:7862234/+.1250JG546BMJ<7..898566%"2AOJ;4410,,.)?'),..-*(,,++,*-457=<7.+%  9499AHG>:<:>B;?@?<45039-.33(4.4668732<=2M,6.220,)+-*B@A7=3-*((3./--59D/*D841)("!*A)&EG'((+'&).*'+:2280,.?EEEHHD8/0*IF=/1GL74$ ';D7.),,//.-/.2,QLEIH(.-HJJIIL'IIMILKFHOLLOJHLEA<>=51@HACPNHKL.-=343=+G>98848EB;56:D;?A8,#$&#(-01&%(")0!'''EC<523<%+)+%,230+%%##e#%%&&(DB"!$'%$##&()(&&GFA;:@B7<;9;&D@>DB71.5.17@?0%%101B&?@994<"B?"#$=#$)./-($$"!$B087=#BC>DE1A*B:5,673& %59756?904H61;/,*47<;)+*!#&#!'' &*"B<<>?@>079>4-+0G'>23120-457@=@A621+1/1,+*6@B4511-199056//0!1>9<569:7?E>C7028GE;20--?E<@C5.,0200/344;:5<.2697=6,7; ::!!!@$@@;$:9 AD=@##B;55-:.8;<:7?&!"=<<;:63435@("9872548?;5 2)&)((())*,+()*,.*,/46*((-+'&#%&&&'$5-,582%&&&,&$'%$"$'!!$$"'$$++1/-.))%$%&"$#! \$%!%-3)&(('&&$#%#"%&" "(($! !##!"% 02 # $'#" *'%2(&."!I++--+-/2//-))*-/0/-,-,-,+)-..,-.0遅ց~~逃~}~~ည~~~}~뀈 ~~~Ȁɀ + Ѿ·򀀁ʹĻ킄ȿֻ€¯½ƹųѻš㓾Ǵɾɸ¸͛ʿǽ¹􌞯Ϲ½֮Ⱦᦠ©ƴͽݜܓĻڀϧŷýϿԀփт큉Àķüɹʀſ¼ĽȾŻg̷ļ¾ľ½瀄:žɾø÷ƴƮؾŗƦɸӹԔ»ԂöČǗ񀅁鄀ǩڀ¥ܾþ䀈²ɽ޷ռͿӇ햎䁕ӣĹȿ˴ײӻũȹí͹ݛԩĺś͒˪ŅƿûƦ녊焔սųĶĿ¼ŀ¼ų»ɾ̊WmnmibZ]e8;5gdb_\ZW\ZY^]]^]]ZYWTRSWX]cVMNSORTRSOPP[\^_`bb_[[`efidedeffheghg75h552b1147223a]`8aV[a46=986788;?A>=<><;9ja^d873568776>;56313431`bcc_[ZWV[^[XVUNIKNSUVQQZa[\YVXeqkdb``]SS\^\]`cb547666:9;;99:<;:765665664b2889:98767:8795:=;99976531`24667898989988799;:9898658=<63bae344587444668::64cegf4dcbb__cda`bffdhphcdcbg5g44553443cbbcf_aj63346543325669:877999==;::99<;;:953335443434322b246565hk6<<;=<<<9977423688: +98556677767:::7g9::989<8666=:889755llii69;7l6mmjde4;=96jihklka\[^_cefdgcdgbba_ah6fe7:77554ga_bd5754599<<:8::8530]`1a`a0116:998;;741ac259?CB@@?;;>;9DKG=:;>@@ABACDA>:640.[ZX\^b42_^[Z1211_\0121][[ZYWRUWW]_]]]^[59:789642`^\Z]cfddccdb\Y_`^^][YTW_b_d[e_ZVTSU\_Z\bjldci54f`]^adb^\]XWZUONYbdb``_0667;9668;?T>55333422a]YQJLLLJMNNNIGIJKNPQTUYYX__`ZSTVRSRTRTRPNMMORHDJNRUTXa77]TQQOKHHHCCRRTVWRQUTTT[]\ZVVWWWRKNOKJIGHGFKOOMKLNKVZNQTNLJECFHCC?;:;:::@?@@AEFIFGEDHHGC@EKNPMIHBMRVVKIMOTKCa^DCfAS_dgj[VUJGJJHLOK@FKRNMRVXYPIQSRXXYZSPSRQIKMEFHKONMKJFGNVWQVYNCNWQRSPSONGEG=;LIA@GJOQPQSUZ[[SNRWC;KMJNJIGFLLKLJEFIKCys?FKKNQTWWVX[]W_gZQTQONNNPTWVSNMLLQTVXNHHFEFGGHIJIDAFC@?BAINLIJLPLKTVV`WDGHGFJNLKKMRNKLNYSXRRQRPLKNQRSUWba\S_\UYY@=WINC:>>?CHLLFBJUWQUKQQG9ERBEOUX[bc^SQOL8DB@H>M^CV?<8DC=E@A?@?BIIFELOSPVbUMNNJLWYRSWZ[ZYZ]^^b^MFNPNOPTSAILMPNQPLDDE?FHBDFIE<<@@94F?AAFONTXZ]NJHEBD|pnp|y@D{{EsVqDpfTWXY`baKL^syqf`ix{vpplctg:HR]v;H`RN_aHHzf;HLCFLD}vptzwilqmonMRcFifa]bafbfcfvd^ZU_f^[V_iqwa[a_]`l}NHl\_eccoqopWbxtwsol]W[]xnbYYvzzFzh\]^YVWVW_pye^ihpbLO`cut|LTU[][ZULJyrUNO_`yIyrYjRRbPd@FNSXUUWXRTfw}tmfRecpwGUYTPNF=>C?>><;;;>E<88f]d^9BC:8=CENT?TKIET^:`OCaW]TZdAJR7645437<159<:83;:>;;=97:=?<87<:;<::9;9989998376556454434d^^ccaa34ccddabb_YY]^ddadf5566675`dcea^`c_abg43341,+.00.-,+*-++/-,.--++*(&'*(+.($$'%))((&%%*()))+-,**,002/0//0110010.*)((*%().*),<)*,--+,++-/-,))&$%'(()'%*.+-,)(-31/-,-,&$)+()*,,&*),+.)-/0/../0.-//...11/02/./..1/%/.//1/25/-13,2;233200100120+++-.01//0/02.0/-.0/..+*-.1),,+--/+*)++,**))+*('&()(&'('*+(&'%"+,,+,//---,.-+(+-,,+*)&',-+-).,*)))(-0++.22--/,,+,-/.++,++,*'&+///..,*&&'%$''('(()*'$%&')*)**,+*..-,')+((')()(&&%$&(# $'()((,+(&'&#""!&&')+&%(&'&(***('((*)%'('#!"#! $'''$$%"(,$')%$$ !"  !"$!"!"!!"#$&%#"%'(*#"%%'$"/).',./2)(("#$#"$%$"$'%%())+%!&'&)**,(&&%%!$%  !##$#%" $'(')*$%*'')'(%$!!"'#"#&&%$%'**)&#'-!6=<73<#! $%$$$#"$('$#"%(%" "%),--+)(+..-*&')*)+.-(((+/*(&&$#$'& - %%#&#$#$''&('$$&'#DG@;!$'&')+--,-//,14,(*'&%&&')*)(&%&%'(*+&##"!"!"##$# ! #%#"#$%$#'((,' !! #&%$#%'%$'%-(*(''(&%$%&'&''*(&&%"#& !"##!!'(## "#$&%&*'%! $*0&' *5$-!"!"   $%#"%(*)-3+(()&'--)*,-..//1/031*'-,)**,,!%'()(*,*%%#"%%!#%$!! !#$%$%'%%!#%*+,)$'*)*++*+,-00029;:0+)'*)),-/02.178666535860.-+.250//,*)+,.-/22032/0/.13/.2+)&&(%)+-0/,/42//0246331220002121/0-/-/230.,2346531149;9879:768<=;3217;;33/!-'$&)%()-1/1477!7!"%# &&$"%%*,0-//)(22+F*))..-.0//23699887667889;==:9:74532120,,/1433;80022278=?>><;99:=@@><::9@==;==<=??BBB@??=:89<<:=;99988669==<=<<:658:;:9889=@?@?>9565550,39:>?AA><;==@;86354576776667839=;<@A=35;;CQJBBCFFA99975238>ABBCBAAC@?@GEAFHNKEINMJNKPUQGGFHFFIQVXVQR[YPQV-.WVTMKIEFFGECCBACBDJOLIFELPPJA569<;>=;579@A=98;<<<:7?A??:988667653c`VUQLO3dW3:866;;6019:99:<8264/5>>?A?CDNH@A?;:==:=@<;8793598=?<::>EBC@=>?=<<<=?=<:76;?DGKG?CGCDMB???:5:HD@=9687526<;<<:,OCMA8*+-/0..)G&/,-1/-*--*-../3:871,(%&( $8:>A@=<89<@<5<>>868233/033,236786;7:<5-*41/1-,+,+(JFE;51+)+)(-/6(439'('I7.++G#&$((,&$ ,3+,/8527,E0DGHIHCC80/*EKN1-BR32$$(-6670.../1101.10POQQ,*'*JES+N'(J@HMKEFEILPPFEECCBA767:=D>?NUQPO1N9+5FHRA=@;744-,/02-278<5-*,I9,(!+807($,'$EBD=730 (:*(!'(/.-+()'$%&%%'(@@"""#&)&$%%()&&IADC;?>699A#$BAB?84/-8403;E7+*/,0?&B@=D?@B; $ #'&*-/2'&%#"#@;89@= #@B&>,;E%>8-,,,133%#,8>;636?A<:>80:5$&,9$,#&'$$>4$'!$)$@;:>B@6:=;<<(+5F%I66102153745?B41.,3532-25;=0/20/19CP*(=/345299:=-5A?B=<<2022CH<6//@D>A'?4//1/.00/3>C81;;A7)*78@=G(.03653/**EF611C;>@=$@ "C?;&'AC@(0+N77D@!"$ ;3B&A0689>5389:;>=<209:=#:< 7;9A#>83($2)('$(*/2-*%%''*)29..1/-(*'%&$!$$)0,,1/%)''-('&((&%"&%%$#("& '*(40..()()('%$" ! 3,%#%($'##&%&+($!!()%#"!!1,2.!%'&""!(,/%!0*.)).0 #%8-**--,+..00./0-))+,/.-/.*.-.-,.0-.-0~~〆}~~~~ +~~}}}~ƀ~ 򁀀݄׀ŽĮ􃃆7ûȵ׊1Ȫ刂ʺـ;ľǻưǼꍘɆğ᝽ԸȿЦȾºſɾƿϾ킛Мʽ̽ŷթ»¹ӻijγڴճȖˈֳ݀ɾ¦ɿûӀυ˛􅁡ȵǿȀŸÿȽú¶¸ξʀîľȻ´ùδúǿü־Ƕ˳°ĴǵՊ޹һȹӭׁϹ썜Žɼ򆐍ݻбі峭ൎ؀톍䃎聇僅ŀޫ࿲˼մᑓٌ䁃񄐕˲̀üۿÿƷրЅ컵г̺ĸ䯋Ϡպٞ߷׼ʀて幰Űƨ;϶ɾ˵»ӃٷҾùۍöz­憃܏fgabed\Wd6323fccd^]^\]\^ba_b^ZWUORZ\b[VSONKJGRXUFLTVX]]accb[]_a`b`bgghdhlklkdbcdab12423[]IUVU\X[ZU\_a_ad368:<>@?;<<6`\c6457<=99;GB74259:=;8565fcaZXXYZ[WVSPPPOQRQLQZX\_^TW\YZ^_d`Z\d4578>@<<><=><<=;87788<<845456452279899889655279:9;:8878523246777899;8778746:J=>B?:7545686f3e5556663bcbcaf764543eab_YX[\[\__^[^^^dc`befdh8689:9866645567654487665686667545557:<=<:879997765454445433442333456jWR^=::956977789645346964763248764g456788863j7lgdl8588:;9=9mifdhmmiejqpe`^b_^b`aeb_deccc]OX[Z[\^]^^\\ac__d443dc57662675gdcbi3445::9987=?8774/]]^]_00257878;;30_3139AEEB@?<8:;7BKME87;=?@A@@@AABA??<62112113^ZZ\13100/[.16_WX[ZWQOW]\`a^aa2688:69;8853a^]]_acdbed4dbfgeebZYY[[^ce\622a]YXYXYZYYWX\dfa\WTW_[ZUVUQNLGMFK\eeeb`15879;97778;74334432421_RMPLMMJFGLROLHDHRUWZ`bbdffg^]YRU]c_^\Y[PORRSWUTVYXYb4[QSNPVTOPOIEVVVURHJOMTUV^^[ZUVXWUSLQSD=@BDHOJEFKOMKKPJFKCDFDDCEA@6i79:=?AFEJH45=HOSOFEJKOUSMRTRMMRPF:;>A@CFFHKRPPTWWTRLHIGA;gdgk9FSNB@@GMHNQV[^e\A6FWZ^Z^bimcUXZ[]_a]TRU[\RMMQVQPPWVWVSQJIIHA9<:77CKD;>HPLNLBEJLJJKFA?HJNRQQWWYWQRQXXPJR[RPQSUVQNNNLIHIJOPQLHGCHMMLOSIDCECEILKIEGEGJILVVPW_aWDBFGJKMOOSRORIFQJKOMJJLNNQUPPX^`^^a]NP^WHNZLABDCEFLNJFBDN]eaQEEHIQUQBH>>>;67:8:=<=CGMOPOKLLVSROTOQRLJNOPTXY^lm^]\WVRRSRTSVXWWZgd_a\]\^]YY^a[WVPRXbhd`\XVSRRSVY[\^ZW[_`\[\\^ZXYVTIVZ]`^[Z[ceeeda__aa`_\ZWY[_`^\UUZ`e][YY[__`cc_\[beiighggcfsq;<7hbdimjg\Ga[UP-E8Ib03ERcX[\hlej999:8:A?7DB;7BFB?ACFGLSUW\[\SINRWXVW[\YX`_abadfhfb^^`kmllffhh_`^Z^[[ZX[bb`^caWYZ\Y_ahmjghffghefbdhdggfjjjhhjlmkkjihfdghgegifhjd___gggfc`_`bbbefeeiiigecbe^WUZ[\\ZV^gbbbfjmogbilje_bbbdc\Y[\ZY\YYcdfg__eph^ffcjstqrxyutke_]agnqxz3ysne_m{z{}~y~yhbefglz~~{~xuyvxwusr|xuz~|vrvzrk_^`acb`_WKGFCKPXglmlhlg`[ksjfbijqv}pomkkoprqnnsywqtwyttvqgfnw{xz~zzwxztrt|ttqox{ruwjZ`o{{wvqrvqjiaipnox~otnxljntvswxqi`WVepfc_\][ZTbbSMQQSQPN{|w{IKWbbY\Xa]SNRUY]YY`\Y[XTckf_dpptyqfda]`]RHHRZVTXURU`fiknlbZda\\]__ahf__gedilmqvtompj`kkedjqyzh\eslea_cf\WX]acglngfakrwgiueY^fee`UXXVRTZc`[TR\db`cffgab[VTTHDOUPIQWTKLPTY]UZjmnpryxxrrrwk^WXb\URVVQSYTSRTVXVWV]^abfeYVVRQH@=JJD>>DE=9K2>ASWjmqpohjfjnfcciji^`]PUUPZ`b`dU[db_\V[[RIU\SYSNQNJC|fZXNNLLHHOKFO`YbNr__WM1IaYZZ]TRRH|Zyok]PPxTMVZNJMVYUXRRRPVWSWSNSHJKJIIPKOvu}}ypuwulv{kcinlpnsw}PWU|fLbr[qmw<.6;WUQ4S@FllTEFHOIDw||FB5RPIJ`=GJ}miqvs}@?Lb7;:CNOVSPKMSQIJGFIIsAFHB~EGGGHHQ\SGE||vpr?D@?xy}uh_^atfRL[jx[TULXrCtpo{~CDEz?HENRTTQcSPICtjsDDCr[\tKxfZcXSLQ`W`r{|dcmtirkV]d|o@AXYgN?d`m]^:?vlMUMS[SKXYXhh`\XZSOLPROJKEC:=DDD[]WXONQZZUQQLFEDB@?^8eSEVbUUOQRUT``RLC>CRYXSQMCBC>??AB>5>;6>44diV=B<;<=BJOSLECx7_c_WIATVb<6B@X7755426:aa5:::76:>;9<@45:=>8;9<:;89899:989;753344478875:84653e^[_3fd33gcda^ac``YY_da^ce578966444dfeb`aba_H11-.00-'./,.1.---.--0/-..+*($'++0,*(&%%$!'+) %&&(),.//+,,-..-.110/13.+*,**''%&&('(('+++*+,*(*111-,*(*+))((()')'%#$)**++(&)'(*+-+''+ L,,-.-..0///-+*,-,-...-.-,0.,,/0./02,+..W010/2221037731454//02.-/,,/-*.00.,+$'+++*-,,-++./,,//-..,,/+&., ! 8+))*)+'(++)&$*-*+-+*',+,,-,-/0.00./.)(()*+,.'.-*)))++**)(*.0/-*'*.,+(()'''%($(2531/-'"#'&((&#$(,+*&$&++,-12/1102,--)*+.---+-,&%'((-*(')((+'%($&*)&&&#%&''&#%'$(*(,+)***,*$'+" "("!$%###&"$! !!! 7$%55! $$###"%" """%&((% ('$#-$*1.-.0(!!#&$"$!$)"#'+,++01*%#$'("%%"#"!%)&"$'&"#$&%$(+*%&))#! !!"!!%%$'*'&'%"!;#"5235#(%!# %%(+*/+#)*.*-.13.'+---/0-)(+/0)&&*+(**-)(3$&'%!&"$(&(' #%&%%&%#!%&()(*..--*)*-*&%)-)()(&'&%$#%$'()$"!%&%$')"  !$&$" ! "$#%))%),.+ "$$$%%('$(%!(#$&$"#%&%')%%),-+*+( )&")" #$! $+.+""#%%+)+((%%!*10#32*"$#" !&&&$&*,.+)'#)(*,-+,),-../0/.0/.118+00140,(++"#%()+ @&%#"$&!!%&'('''-*)&*')*&%)*)+-.1=>10.++*)E**+,./--1:7352223000261/-+,/4620-,*)(*,,-010/,/2210001,,,(' ),.//---2310110/-013431,,.3710//14446532157::998968?<5257:77/",)&&%#-&.///7;89""%""%" !$%(+,.342*&)+-/,.120/556768:986565<>>=99::47412012136632761233267=B?<=<;<=>=>:<88;989:;;;=>==<>?@><;;;:;=>><<=;;=:777<<<;9767789:;::<<=<<99;6215467649>:99;=AC:64:<;@ECBEIHB@:6336???;87BHB=9>>DHU[PWba[]XUG@BACCEDECAACGFDEJJDDHQYOHSYNE>=AHMMMPQNQTQPKMKMWVRSQKNY\]]VJGGIMOQTQA@I<73>G?<:88673?>1,.02032^QQOFIU*U-8A?9<6<820357825;74245?C>9=C=7?A>>?CFG95>=;:=BIB>D848<<<6040/-/49630.6<::;<:;993/12)(-/,(03.*,105606>>@@ALLBBBA@AI>3-/4/**00./2//-/.../.447587001-,& " $/==@??;<96-.RENW2TI,03+(*01./-./-00-2/-0OM()*T)('LP-M*,P@BLQLGGLJIJGBFHE?EI@9=><>,#%&*#-20%"*%'D:9?B@C (@+&(-,*&&+*%&$$'(H="%'#C$&&%&&-3.'LG%EAA?98 #!"@AB=7203B9.*3=H520'*9#>=9FB@A""#<#"(,-,*6*(%"DGD>8A448;66>B?4@=;<>8,7<8H@<843292104===211/02/(<;::1+32014=*G 16-151796E1+A.+..2;B<:TFA8?;T?8XCFI<%VF<8@F:)+5800.328<=1547?158>D7>)#@!?@!=B9&5D<>@@=:==:A#C?A D@@FH.B9?EA"$ ;9B:7185/67.379:;;@7:8:;9:;532377fhgc4555764666:989744565686ce2346667779:9788435h:>@;<84fh225464454gedefe_`e786654efda^\Z\`\\^_^]^\_a`bcfgeh7789:998779976652123456346657766658743358:7567#8A745554433346664ddf3ePUe8556667653464224211cd22564gef4455fdc`_ed^\RP]785]bm6ghgeeba^\adcbbbdegfefb^^cedcc_]f_^[[\_b`bccddac33e3e`ccac55hfcbb2110b577749?=974321^`__d211235578:45755=CGF=75588>=@JJF?48=>??@@@>>>?@@@B@?>>966400/021[W]11_[XPLSWRQSWWX\]]`^\[_14:8;=<9641212`acbccbfa`ed[Z\_bd355531_^]\YXUSPNLPVYYSQPPTXX[XWVQQRQG?I[egie478:97668778997/15766741_WSQLJPNDGMSQONKJLQW[_deiqrrkif^VZ_a\\YTNSUVX]VRRUTWaS=DeYVVWSRSPMIJNNMOPRSSTQ_ebYMMNH;ABA@@E>BEFG=@FMONRNKMEDo8A@>=<7eZef6;@?FFJPCC;9AFIMLPQSSSPOMLPPQTRNQVQQRSUSNMKQURRPRSPRQNNNKJGKONNMLHCHMNMLMKGFFEEJNJC?AEHKINPNMMOVUMLIHLNMPRXWMKJJNJJMJKMOOJPWZYTTV\XTNJDLRKGHAADCFIISPLOHGKPYTK9=DMSNYQEQWVZ]b\35h@^N49=HEE=>?>>?GD79BCACHHKNJLQX_]VK>PVYV\]WTTXURRVZ\ccbb_beaT`dedWSUOOMTSMECKG?DC=;CG?d^dV9BEDEJIGLMOQPSWTQSYV^]XOKLNOU]gv[@WUSRRRSTUVZ\YSU^\VSVWVY[YVWYYWVVTRVX[_\\ab^]VSQTV"YYZ`dbbZ]c`SV]]_[]aba`_^[Z[abcb_ZZ][XY\[[`_[]a`gaXY\__\Z]jm_Z]^glfgdfhkv9<=9mbbdhhgbc^W>B/I7),\BGU]\abfhj79;98<>?>CB=9BJJIGGMKFFNTPRROKLORTSVVX_^Zcgd`cijmh_agnsrnihiliifdgfc`][_bc`^]ZYZ_aaaceihfegiklhdbbdhjgcfgeddcfilhjjfihfca^^dinnfmmjjifihloookhljghdeknkjiheaa`a_YUZb`_`ZW`c``bgnxunkfcaagf^[TQSTVWZZUVfmqwukbnuywqpprv|~|wrqvzussruvqojeelzyz{z{tpyz{ypjb[^djorqusssqu{}||z{|~yxvsuuvyy}jd^XY_`acafeijind]YYQIFEGP]ikhejhgkpqvww{KMNna_gedeafjosvy}{npz~xw}~zdc^]_ajnrrtx}}|yvtprtww}zx~ykiokf^bfbjormijccpy{tpnbehjmjqsigfjhlolnyz{xxqprsljlhid\ZZ]a][\bZQTX\[ULFDKJLNPOFHOOSZehdXUZR[Z]^[ZU^jebgihjZ_^^`eiid[^b^\VSZZUWZWTQQ\dikfi^WOQMPTY]\`gd_]``bistsrmijqohsuttvwvokusgYYbepkifjlihjhddegggjpmqhhmjfa\WZUZZ\c_\X]bkhcdc]ZgcXRR[H?OY\VY[VOKW[TSSWetomoquwwyuhc_]YOMLCR5?9NRTZYVUXYZ\[[_Z]^^XWWSQSL@@MD;;><2-2L/>H2]ikqutpokihhdcfg_]ZUJJM`^Z]\edbaYW\[NP^VTUKVSLDxk]UYUSKMLHHEEOSRZwIue\UWnwLIQ]^]tMYRPXYJbmE\_]`[SLLORr~yld]TQ}PRH`bULRRUY_XVTPKWYTVOQSGIJIINJzx~|}vgruwsksx|oummkjptsOUU~[Rg~agzsm::H&QG@A9QNAM>K@IIJRQQXHTN8CUZZYqGEujs}{zFGtk67=@MZWPMMRVLPRRKKJwtDHH?FCBCJOSUPGI|yquC~yyytrvocadi\OHK_tcSRXYkBrlkw@|FD?w>GIKPLNS`VNJD}}D{q|FNLD||s[XnTq_c]\[[digtxobgklcikYYkBFE@]TerAcb9aL]=Aop>OIAGIyklgelqmphlx^Vhcq{q__egh`]abedlwmd\YWTPcmqn]T__^hhcm~\XTU\_jzqxd]ueZg_ZWWfg`[`g[c``RS\`efodIO]\lmpi[gm\Sebghi{mMKIUhr_nbRaySDFh`uzV`ts~|fmTNU_rcafgidd`hlst^mns~oI{~{FHSBsoopy~yhn@C~zAFAqvzyoj~AF{zno>soekke_ggml}qpqqp|wphhthq{{D@>9cZSQTNCXMHKW`ZVVURKLKHGN]efc\\]RMP<=BCDCHHMYRB`imntrkee]VRPSPMKIA??EFLJQTHKJLNSPUUQROMF??<=6]5:@BADAEW^QF_i\UX[^[TV_XNGEENSRPMKHFEB?>=BCDGCCB6;>952<=?8cX=:8;>:79;;;87:7:98796887699653233667746835733cb]_cdeg5gcb^\_^af^3`^\]a368<;766865kmfbcb`//0..,.0-++.-0221.---,-0-,0.+('%%&+-(('((&##(*1*$$%$$'++/,.,*)()+/2/.14682.0.-+*('+$" &$#!%+**+++++0/-+N)()))((*)''&%$#$%%&')))+*)*++(')+,-++,**+G-00/..01--0.00/-,+-/..//.././0-,,..,/3!//01*.3,-...-++)*-.,,)'*)-31232210/-/.-././02100.-.010..+)1-,++-./-../10..1-*+,,,//.--+++,, ! )'&')((#"%(%%'**+,*+,*(&&C+,--/..0-,/.))+-//+++*)))(&%#%')*'%$#'*)+)))'())&%,45231&""&'%*("&*,+*)('')-./2148986450,,.0./-)%))**,'&'('(-%4+)()'&(%$!"%&%&%&''($,0.)#%&$!! !!!"%&%'$#%!!7!/,32 983/6"%&%#   $"!! ""#$%$ --562!'+-"!#! !$&$"! #$%'!%*'$#(*+)*+#"!%&#%!$&"%(('%  ""$%'()'"$(#!$'#!$!!#"#" &%)461%!% !"'$"#+'$%$"$&')---)*15*#%!&,.1-*%()!"%#!!"$%%*(#!!!##%)"$ #&('))***()((*)(*)'+-(()+,*&%%(*)('((&))'&&$$"$'&'%%""%""!! !$'$ !#%#&'%%$#''$##"%&$&'+*#J$#"%#$%%&"%)++()*-*'$"#&"  #!&$#$! #%)&! "$ '%$)()(*'&$' "!#$###!"%%%(&&).10,%(-.+./+,,/-*+//132120362*/222)(+()'**(#"'%! !$0.2*!!!"$#"$%'*)),+)*.+//,(&'((*/7A.,)(()))+,-/0.*-30,3+-/.//.-.0/...,+-.01//220/-+*,-0003644/262),/..,/010/..223220//0210.032142034252.02331019;3/117<8:78:;@! 713466732,'#8&(04134789 "$" "''&##'&$#).+.-,((*,,-../4308;8=36::<947:>AA>:::<;;97776533577445433688789=<98:<>?=9789<=;9;<:<>@>>=:<;98657;>BA:??=<;9<;>??@==A?<;8:=><<<;:89886426:88:74:;879<;:9<<851013357622?BDHF?:@GIPOGB@@AGIJJIEAACINGDEEDEFDD?:/;>HIIJIJINIEEKQMJHA=967=?AACFGFECHIMOQNIIIHHIIFE>CDGFII>:72367699<;===?9423.('&&,4;==<@>>ADDHIJKMQUY][[.11XQA96=:>BFJKKNLDELQNJHLKPPJ;:79;;ACGHHJNOLHEEFILNMPTTKKPQI?>C@=8:=9>AC@=;44?GGFDA9=ABDBEGBA@DEIIECLNMRHIQYVQMMWca^YRJDFIJDCEBDA:98;=866;7256962+'$++.033`^OI&(..39CFB9694;89962/8?;8??AD8<<:9?DDA99<:9438945642006:>@<@950/+048:7;?=:8;:?DC?FHFHFEC>=;:<<::=>==?A?B=>@?<9614053584337:A=;<;55>81./6&'1664751..5710.2:B??@ACCBEB:9750*'& $*+/210/0001/.1/123001.-,'#3;60410+++)(&&-/.4C)KA6.)*67+553@-1,+00%*3#33041.('*,BGJNKF=940/JGY..Q(99/+///2600.+(01.1,-/LMKLKM&'((PQ),)NEMNNEIHFGJE;CDFC?DGJ?C<<;8<@AL/24I0+5DB29JC<6 ""0"(#)&$&"$#"%&%%8'%?9?DCCDB$$7.%.,)'&)-')+,(()@?%''A $##"&*,.+IJ((ACF@;<#AABA>2720.-365;>;369935G5,.5"$#!/(/0..)* 66)&#&'E@8:65:<:<59A2-84>E>325783032659A:40..+*54-301985:>1/:GD62956008931571645+)+.1294%'2179::06:2,:;<=9EC,*,6DFT8GA?5AM0*)A;HM38UFAKF;=1+-0@5167734269=?0;;=C9C'?DEBEE?@%&,!B><;8=@>7:"#@< #"=CFA;8D$A$>>87 <;4984/5698BB<<;7=7=BC%" 1-*()' -'#&+1-+***$&&$$%-230+-,($(!"#"$$%+&.041452-.*&%#'%$##!!&#'+#$#$$'&)($&$% *"*,$/2*&'(*'$%+'"#&%%#" !!# -%! "$.21/6$$&/.6,.++.//00./../..1+,+++,273///.Á̀}}~р~~~؀€~~ ܀ ľɷԍƼչ󃆆ɶݯ󃈄ؽӭـͷǼŹт핥񘴥䇔ŭɻÿIJ̴ŶɿɼӭӺĽ㎬˾ɿƷ€üſŽɽ녈ûҀ̺Ǽ悋̻ڀ˭䯪쎦·܀ƼĸǺǾĽüöȽŹúķɿԾɿþȺ̹ư̿Ļļـ퐛ø鎀ÿż羶܄թ𝗜ͳ˷οȿ²焎θéɒ̩݃Ƚ»Ƹټވ揅ꋚ΀³ӵ̹حӾͼĻǾţɥšLjǹʼれߑ־񋆉Ǽѻſª≋ɾ̻ô녊¨盺_aac_\Z`cgccef43fgjeb^^[[`_^dd^\Y_ZZVPPQTQQTOJJPPTPMQVTOQTY\\]ZUTTYX[^dcfikha`a[YRHJGF=^XC=<;ADAD=<:79>?BA;;==<<:<;9;<954d23332547:7k^c754349::<;754334556889e;<6f2493\79c]_i9956778764cceg3449:8gb`dfec`^]\\^^bbadd_^^]_e6654675798989:;98877446677744664589878:843hcaab23796743e456g3#543bbad4fh7643479998785454325422232cC22143cbcda^^\^_ch]^bf\QZad``dhijhb_af87545443454edaabcdfb`acbaabfgca``bdf454bb_134e`_`a`022ac244269=;4cab31_01012113577:90157@@?C=53]047=>GGC<98<>>@?@??>>??=<:<>>==;;<;88d`_`YVb144`RS[bXQPUUTU_a^]ZWVYZ\_d678779513453c[`fffedd[X]_b``a23346764a]\]YYVPPQQSXZYUVXYWVX]^^_\\\^J>uH[lge6757875477789;;458854310[XXPMKQMGLQPOOPPMMNTWVW^lwtsz{ta]^a_H=FQWYVZ]aic]XSNUJ;KYUVVXWTTMKIJQWRROLPOKOTYZPHMLD>>FKONNNKJGKJMKJHJKLGGNV>f=<`7>faok\aDKRTLLQQHMG@AGKQZVNUTNLHNGITVOPLDCGFCFNNMMJPPKKHKZ_]XTMLJE7?DIFDIJLMONC@?<:BKOE;?AACFAADMLPVZXQS\\W]d\YYYNMRTFCX`jjgraVUSFEIG>@EFNQSSUSWVURRSRTRRUUVURNLJIGKONKOSTTUZTMMLMKLMMQOIGFHMPMKIKGHLHIJIFAAGHHIHKLOQOQSSPSSRSPMMNQPHEEHHEGOPQORTSWaa\WOPQLKMJ?AC?DH<;?BCEIPPX[QNMHPMG>96977AMTQIQSLSU]3gI998f68=@=DEBg78;>DGHEHMKGJMMSPQRPPU[]]W[XWRRPQ[ddb^ijUQUTSTSTUYZNMQTVUTSVUXXTUYZYYYXTQPQVXY\YWVUVWZWUVV\`bfY[aa\WY\_\\ZZY[][`^XY__^]Y^`bh`\\YY^Za^^bda^^YV^[]^Z^^8f`ccbf`_ba`dfk;?7hdjnfhiddaTQILhI?@e=HILNgkn:8???@FLKJQQRPOMNTM=DMQRVTPPROKLSU\ceacfghgccbglmkgkljlklkimjeba`bgd_[a^]]`_^\\_ba`cjllpjhgceigffcceeachljkfedb\X^babeurttqqty~~{ppnlklilnmkhfc^]bba]YX[]^`\Y^cb^_cghhlkfkohbZRSOOPWYWWZ[]`aivz}ynosxzpmov|{{vnreX[molijffms}zywokjmt}ynfhghjnrrpqonkjaffirxyxz}yttr{}wovvmhhkeccfjmtsnia[XVWWUY\bfebbee[_efknnimqzo`ajvqqh_gpmjqppv~|s|~plkms|zwpllopokcilif`_^^hooomrkjokhkpzjike`_dgfhjc_aed\\irldegouwzuonrrlnooszwdgkhc]Y_anjZXS]\W\[VQLKF@@EUVUSSLMUYZX[`a\YY]Z_`WSS\micdiefi[Za_WWY]ZVW\ZTQUTVT^d`cfki[][YYWZVQLR]ZU_hle^Y\]iopmjigggpvkjw|}rhc_^aefxtrsvqpkooigec^_`ee`]cifc`bfeaWW`nlhhY]]]ada`acaeje\]^hRaFxTONGEFJRPQ[^hmfhnvwwv|td]WKEFGG:O[9>sT^^Y^`UWWVVUQQW_]VZWTUUQHJK8899346=;@EM9^ejlmrzrjcgkZbe_YXWRQHS`ZQT`d`^[X[dYMX]OVUQTNGv}zge\^`QEKLCBPPD@HSVpHsd`d{tTF]nfZxRNTSY]J=EI_e`d]WHLZg|{}nf[USRQLIMb[LX\_ZZUWRPMYVSSLPREGJKNNL|xxztgdrtnhirv{pskof^l~q}MR~fZpq|wic543G-hDHKBJ:&&RHAENQVMHQD;JNR^aYX=Fwjm}C}votHD;:88AFOYSQNLPSLPUWOHnyCDADJFBBLSQNJsuukv|xyupssttqwugdg^WJw>]fbYT]_txpiut@A?CIznxDELG>LRVNIFFGCxhPUG@yr`ZpOCd^ajieWWdwr`cibdlp|lTWmzGbL\]nCDrbC>^l>HrdDQNFJHFzrulfinqpkhqldffgvk\hte`aihZP_jbZUKJZioje[WamjlpUhIpb\P]jsvzv}n|h_baYSY_]W\\_b]`KIFKWgqsfVogfqodafiiQf^ahey[HW`d|aRkKIxcLNQTNejoNjYRDOUIJZjeos`df[Ugswnr~sqrFK}EzGGIE{yzzBypl|A|?Buvp\bavLGGD@t9:46>F?>MF=OIILX^UXXUZZYV`aSKFEIRLKKRLHIHDA?A?ABIKIHA75>[37;OE5Wc9ARB;AHP;i9`cf>Q9P_Y^COKf9789664146d]`8;:>@<>;Q::;>87878:99:9786798976336:64784433442cegb`ebahihe\]\XY^\jd__]ad236788679779:pgb^:..-./+),+/,+,.0131.+,**.-,/.+*(,)+*''&(&%(%##%%'&$')'$%'+h*(((,+,.002475/-.*)'""!!2.  #3()*(%%(,-*/--,-.,--,-.+)(,0../02/-,,.0./-++,-.*)+.*/)+N.%+*,//..01-+-/10...--./111540//-,,E.,+-,-./../34G,---.-./-++),.26/.0/*'+/1.-023531..0//./80.--.//.020--/.//.../-,+.,,-.,,-+*,,'8,+))&%-,$%(-*&&))((-+*,*'&&''(+-*,-./*)+,C-,+*)''(&&&%&(*+)***)(*--./,-/1'"F(.31.#"%%&'*'%*-+*+,-+)),.--09?=8>A?30/-,!&*+)+,-31/-)&)"$*)))++))%&%#%*%&%"$%$%())%"%% "&'&$%%&%$$&%$!"#$! ")/.2083,/$7;!;05 &$!7=78"(! %(#$" #&1"&''%#(*&$#''#"%%!$! "$)&!(($$"% &'$%#! "'%##"'&"#!"+/-*(%%% ! " #$%%%$d &&%"#&*+'(+-+-3,+-.%'*,$"+-356;/()'#%&$ $&&!#D?$)'&$#75$ "%(&">CB!!!#$!&)**+*,++)**),+-,*(&%# "#$$(***+-+&%%%#$$&*("""#&'&#!&%%&#$$$! "##%#%%'('')(&(*))'$%&(% !"!"'&'&(*()//-,%'($$&% !"$ !$%*+%%%!&$ y$(&"&("&&)(4 !$&$" !#"#&''&'''*+**($)0/,02)+,02/.131020/0.//023/.%"*.-*+,))$#"! "#!2!#"!$%%$&)(+),.//+.,,**)*0455279*'***,*+,//((+,--+,.,..,-00.00/,*)*././,-+,,.1/.//235702420-./0//..-//.22/.2311.1027201/03/30146200.-2112/22?83453645764659 "527;55543/&",#&'<$)()*::;"!!! !$$#"#&%$(-*-)$*,-.,)+,*((./39;666789788:=><:;:9:;<;:<:78:84376457764467778=>?B<;:7:=;::779;:;=??@<:;:9::96269878C@AA?ADGGFHF?A?==><==;<<;:759986455668658:967:<;;@@=AC>:500./16665688;@DIQNNNLEBA>@:24ACA@>=;BEJGJTSSPJEC@>>@CLSOG?9;;>@AFGBBBA>A:<=?FJIIKNONNJJIFBGIE?DF?;=?99<<@DFC?;74121/.139<<;:<;46<=?BC@CDJQTVUOSZT@8;@GCD@9BLGCJHIJOQKEKLQQSUTUQV[X]VY_OD@@BINMLFBEHKKICEFDA<<<;ABCDAFCBF@=?BIJKLD<<>:79>CBAB>=?BA;:ELC>@ADHIQY]LD@>?B@DFEGNUYLADHGC;9<=FB841985862.+)% !%LP]5542.(+2877;><;7585891/17@<9;@;AB:9=;468>:68<9335355;;8>>A<21034473/-2766<@A=859;BHKFC?>>AKNMPB<97679=GCCFHDC>@>;:998::<>:8:>;:79;<9249B=<;15447:;;:<:;<9679?2@4L///+*(H,1.056><8;ADFGEJB960($&%$'*8/53141*++**)&&,43/2///-)#!58==?BF@<8<@48;73310NS1*093-/9;7553381)03)..,/*'AFF:;657.(..$%./'#*11?(K?536DC:>90A.*../2%#'59472-$(19FDEMSK?;400UY10+*,95K+36722/1-**10.-)+-%JHIJ&'(*MLNS,+LILKKEFBBFD;;DC?;=BEH@B;>6/8F?HT,0F70=IF<>>=E==@>54520*A"2760-.,=@>7?;! #&>8="#)& (,-)&$$&$E?5C,/%"C?C;.)5*#E546:95-.2=<2252469C7++7?)1%1.5!"6/!*2$70#,*%'&&B=@:45;==:6=:6757AG:0;@64379.(1FK53/-('1;=:80.3:7;?*7H);40&058;=<7?:41578+678=:HC3*S6@>L83:,.JG,2031C=;D<<9$)FFCDA%G@F$%&%@AHA?!B?=8@A"> C@B?266<)%$#!; !?48654/:"A#C@:3HDD?;:3788:=$!;1+,+)(&(&")'/+/)' &**+,01-3,,**&6#!&*(2!#94200%&$#$$"!  ""!#!#%##%#''"# % &!!"(+%)('(''&-,$ %"!&# !! #%"!!M*& */(!'3.17,&1+'"(.+*9+./,,0-,0022--.+,,*0/.,+,.83/,ǀ  +~Ѐ~~~~  +؀~ ýżľ󀀄넑,πƳ򀃇װ˾̼ϼǀý˹␏嚌ü̾Ƽ˷ĿɹͿĹغÿĴ¯˴ɬȼŽLJһ臍ù˹ƾǻހ漿¢¬ÿľ̀ƾɽȼǰ¾þôö˾ĻǼDz׀ýн°偃񁇃ϼⶻ݅ـ֑ңϟǀǼζ􆁃¬κ迲⏃鍅򘊀ܾͻĶĹ϶δdzáܼ񌮨ξΈȶ醋ކ񄑋逅¶í½ȧ鴙ܶӋ򃘡Pcb``ba`b_i754344fdeeeaa_[[[Z]cbb``[Y\^YWTRNRQOQMMPQMNU[\ZRXZ\_\\VRUVZ[[[Z^a_[ZZZYRLOQOC=>BA>@>;99;:978877664777689jgbbefef47:;:87T699987875684ad459<5c_^]_4;:886787772cebade695cadddcaa_\Z[Z`aafgb^[\^^bcdg5668:999<=;:978995544565578786688542576779:73eg7899:876664556764344458679:87667769;7543355565546945gedacbbdb__`bb`XYdba`eff466435j6754676657655564ea^_bcd34dabccdcabKad444584b`0247h_e47856652b7:7;;<7ea__a`aa000101368:=7/5:>@7<<532[[06?EH@:;=?@>><=>>=<963456775386cf]\WSQUUPPPQRUW[RQW]YYXYYWUXWTVWUUY`cfd3A>87422`Z\afhgf_\[^]d_\c6865469;5`Z0121_\ZWY\\ZYXWZ[XX\_```^[Z^WMHJU`bj78i8:8449768::997654320\2^UTVTSPPPMLGCIJMNRQRUZahsridacjb_a\VUSTTSYffdXWULHLHGIFP\YYOHDIHA:>HDFLJMOQSTTPOSTWSQRPSSRUNBGIMGB@C@BGJQP>BKPWUPGID@AEBGNPPQQRWRLJKLPUSO\^WWKONHHJPPKKE@FMJLMRST[`c\QOVZ[ULHHJHGEHGDEJIFEFGLQTWXWQKBCCGIH@@EHJHGFJFJX\XRVPONKQ`c`UIBCD?DHBLS]gm:iN48678?P[O?A>;<>FKEKJGGIPPLJHD{CDEJMRURTW^]WRSVTRQSWONQIBBGMLPRQPOV[\VTNNOMOOPRQMLGFHLMMKIIJHKKKOLIEDGLJA?BGIMSVVVUTSSRT\UIGKIDDEFDEHQYXNEUSY[XZ[PLIHIHC?BDGLMED?FDCHLJLQMJPKLOKFF?dNG1@MNNRSSTUYXKL48e666]R]67::===@A?CA@GLLGHOMJKRXQRRLJ[XZ[ZXY]\YYZXX_]\YW[\[^d37h]X[ZVTWWZR@@@FJElcj6@DEDFLLKJMLMLPMLIMQRU^_b[[\YUTRPW_`elmrnUVXXRV]`WOPQRRSSPKUXUTQMNUX]`^YUROMLOMPTVVVWVZWVPTZY\d`[YYXX[X\[UWWZ^`\Z\ZY\__\\]\ZZ[]`[[^Z\Z]^_^]]ZRU^]VX[\b`bciggg`__]\_gmqgeel9mngjbY_^HKI/F>ahEKVF^gsA;;=89>?@`AWqnUVYZ[aYVTQMO\YTbca[VSOF=86118;=>?DJPB`ghdlqpollscZ`_Z[[XTGTUMX[SQYUSYTUSZcWOXTLWYZOKp{qgdYVTNOPMIURPDBHPYs}zshlvyok{menf~KKUQW]HDYPRV[bfVMV[l|{{thg\WWRKMUOOZ]\WZWVSTROSNKJMKJJJJLKJOM~x{vuukghkiccqw{srbXfzMLO`]vI?ld31M-35H@EKHH3)$YK\CQMMJ;GEDRQSOYPdEmiz}wwvu{ME:88:BGOTRPNJLKHTTNKJpDD{CEEEDGGMSUPJ|mntjvwxwywrw~svwtke_YUHDQRUj_WQfssxks{D?ADlu}CDE?=HPNHCECD@nnt|LOA|zmlmoy?}E}`cjkdR_aXledfhh@ujg[bieszbZVVnLAkCAb`fJF?GNQHBBJ}xmhnkglfnnhfeim{efheligj[SbsFeZQF|Qhgghfcghjt]nzFr]S\mjxBC~wted_]WOSWUSWYY\\ZPJDBShtxjt{k\bfgscVN[xlZOUgigcW|d\]_\JYwegwKBrsdGMRHKNMMlxcpcWQbq}mkx~~sHJA~IvEwDCFHDGLBBzwzmtAD|ssqoeciiCMKD}@BCzvilqqg^rAGEA~}cjpvtjlsurmp<=9?qcZYY[VUQKGLGJPXW]fXUJFUnd[Y_`fd`YUYO:8B?8f=FRPoJKBDHHPOJFGHHBJLJHEA8<79:84::9:;9;6897878::7788999764436767823555434e54edecbcfl_\ZZYY[Z_e4d^]ac456797:<:667mga 0/.-.-,+(.-/.///---*+,++--,,,**+,+)&&#'&&'#$&(%%)++*'**,B)')*+,,,-/10-,,,)'#&'&  ! #&(%#"!'+*('+-+)),+)R.-*((''),,,*'%&))*'%'-.+++)*,,,**)**+'$&'*-.,+))+01/.00//W,-,,-,,./-,//.,..//...,+,+-..131.++,+-,.0./h0/.,--,--.../..+,211.0/130.--.//0//../.../1-,/+/---,-+)*x'+))&$"&&!"#%%(*,%%),**++)((*)'(('&'**+)+)*+././-++,,/+*-)')(('(*+**)()*))+../-)'&*-.2/$'%'++,,++()'&++-,,*+,/48=>8348=610.*)()''*00/)++&$%"#$!',*)$ """!!%#$%(('('&()*'()')(&'& &''%$$"##"!%'% .!30#+!4<<434226-/,.,50.  $! "&%#&,)&!# "!%%%$%&*'$!""$&%&,,'*#&%!!"&&$% !%$%%'&)-//+%$&(+)#!"##" "#!!#! !#&'* *)&# "#!"c# !(,.,/()(&(/11+&$$"$% %),/44' *0' $" #$ !#%!$##"#(''((%DD%$#&'*+**+/-+)*+*))+/))*%!""$"$*./+)&&&%&&&'(%%#"#%""$$'%%'$#!!"%$ #$&*,++*~().+$"$# !!!#'+*%))+,*+-'%#"##!"#$&'"""!#""&$#&#%&# !.%#%'&('&&%&%"$5+)0 !"! %''##'($'*-(()&".+,..-,/1.-0/,++/../10*),,)'++-)!$"745 ! "&%%$''((*)(%')*,234--/-+*().32487:8*,.-+,01-(()+++*)&,.++)'(,-1430-)((&)'),-,-/.1/-*,/13752.-..0-/-*,-/4510100133000.--022./0.0/101100.*,32-.01534586663431017:=765888360),+ +&;<(+1$47>"  $)(# '*'%()*+,,10-'*S++..**,,-,),1.-4543455:8:::;:;<;;87;;987689757645763566656788:::9:>=>@=:;;;9779;;=;<;;9989977;;>>CLHJGEDHJIHHEA>=>D@=@;9<9:=:98<@:886776778:88:;:>A?=;:76531//010../569@B>;::;<:9668<>FUWPKEJRZSLEA><=BGGBBFGJHHLOLAGBIC?>BHMSUPPLE@DJGEFBCBC=;93554:=@CDCAAECDCGJLORSQKHFFA@BHGHMIFB;899::?B=8557687769;=BDBHNMOGBGH>;FIIFDKGEGGFLD=F>988?AF@;>>>@CA?<<8:;<9657:;:9:<>?><@EIMLHHH@9746=CGHBD896.-6:;;;DIGGHHIIGC=:7::9:8::23741.+!>CTa_6@CBEA>;88;5:;;CI>784<;<;:98559924770/432220/+,,--9>ABB;>>6/599::8@F@CHMG@=:37;=BHFB=;??BDEHJKGF=@?@EDA?<<=<;:874789<;768;;7796;9<:74289478997<:7<<@@736-2?3.,**,3:75<>=>>BGJIB>;=:63-364,-,*#(+@:,,-,+-'%%$#'41.8872.+'!!6:;9@B?>==C:36644420&/0+25/-32.3/0.270+2.(012+)E=D>:9310+/.+(1..&#%+2@DHB>7;AB:5@:6<5A('/,.2#!2,,/158-(01==><89BEMPGJA@4*3NDP-,/G31@(BB 5/)7/:&$#!"'!.$L=8BA;<<9;(" $')&'&%.,))(J=&$@$$##$%$(-.,)B;<@8>>@D@DA=AC# !$D7@C$$%!!&+)%#$"#!78;?)+"AC@7766= @%B48;95*03/934656"=76-274=@31--6& 2" ,,/&#%)+&##'HFFA84:88<59:979:;DG7886;8481+3:&B40-&A,;6777476:IH=1;A';0)/52G%?F$##%$%(#A"@=A89==<73<8#)(#@!!"=?89<<60DC;=BA<:<  93.,+/++(%$'$%).+.4+(%)82,+/0430+)-) 1#**9&'!53)+$%&$&#"!$"&%# !#"$%#" ##"$#$#"$$$((-*R''#,+#  !$&"$ "%!#&/$.,)!%"$&2" "&"$###2.--./10/-04/,+ *(+0.*)+- +62/݀ +~~ + ~~~  нƵ􄌆셌͈ƻςɀdzüÿĿŵĻ꿊샄񇏙ȷ߀ѿĴ¿¶쀣Îؿʺ˻Ĺõƻżπ·û􂊏ɹ񁇎ܲй¾ƾĻȯǀҍ󈍷L̿ ۅ؀ýùı¬Խ̺µŻĶ¿¹ƿƻ̿ǰ¸Ŀ˃ſŽžòٽż凉Ⱦȿ瀑ǷƷ큍ɱ決ޮűĬ®ҝͿӾЀԯ蓍׾ʾҾϿ޿ٹ녃ȿѹյǨςѪʭçؑľ冐ᆔ߂ރɵ򄋀ɻϵ̸􁂋Əʿ𪖩ʿˀ ᎄ錮Юľ푛/倅*eeaa_`ej68:67:74eabcca`ca^\ZXZ]beg^^XWY_[WOQQPQONPSZ[]c]YU]`dd^XUVSSTRUXXVX[^aXPTSNJEA>=?>=;79@BBCFFFIHGLT`22d_XUNQQVY[`\WTTTZ`cb3674.OZd57876idaa_WUUUTTOMNPQSURRXUUYZ[c232a__ZWWWVTQNNPU[_25872462`ba`^^`c69756586_^_`]^^bj3`b33da_`b6975547868:85446f]13b\Z^_`f479;94deh441bbbd`]`45geh4hgeabc`^^__]^bcb__^\[\]bfce8;:99<<:<;<<< ;9856678;94576566765467756679;:765599<<=;:988::77753135677648865798768:8554367666568:54553332234cc3edfccfbae43568898;=86676566456558<=;cbda_c343bbbe5ffgfe4fc33453212453558;:8777998854ecbaa`__112333789:56>=;<<98:555722[]1475aZUW]XX[VTWUTTPY^[[\^WRKKOPRSQMQTRTY`][W[3577731`]cb]`e_]^^]^a`^27<;61d7=962574254aXW[[WUSQW[\_]]__^]SO55bZV[ddbl7ko763dd34457;=755420^Z\XWS[YX[XTQM@gocf>FJOSWYZ_hc[X_e][bf]Z[VVZUSVVVSJCEDCLJJRSNHDDEFCBIKIMIJGHKOLLRLNWROOTWTQMNOTOB9CKLCBDKLMOKTTOQQHEH?><;qda?6=fbXQSenb79:kkije7;?FNKELTSKDC@EHHNF@DB;>CDFIJ\^cjQGBEFAGJ>ALMOIPP^^TOVbgf_ZVURPNKOFBHPH9CFEGKF>BPKIORRQNMMQRSXPIFGGHOSMFJFJOJEDGFLPPRXRKJHIKGHOSQNLRRNTb]Icg7fd6CYaR@>?AJCO]OBHMN[cPNKJOK>AFG=8:BC@Ann<=>@CDBADGKKGMOJQTZUTUWV\YXURU[ZTQSSRQWVNPTZZZYa37;6aYSQUWKG@:@JKKGGGCDEHGEEJOUUUPOLIFDINQVZfmdYXXOQWWOX]ZX_`_]Y[`YXXY]XQRTVYUSTR[`_]YROQQYa_[VUWYLIJNSTSUSTUVYVVWX[^bd`e^\``^[VVV[__WVXWUY\]b^]]^Y_egeffdfddc^ada`^_icWUXXUW^_cijkieaa\]fgadddfeem68i;A_cl`H8LVe::V=TbrCFB?96??;=GGLH=HQTTY\`a_^\VPSRJIMOLSY_d^W]aU@AY]\bf^\]c^afkppjhgfddba_[a`^^`\Z`bcZ\`_`^^`dgimpjgijprlhffghgffgehjhhifgikihhghlfmtusntvvvrmmusropnjhjnnjjtu{}usprqonmbb^\[]__``_adeejooiba\XWVSQKKOTSPOPSZebYYZSY]]XSX^ouw|~tld]_eggpqqx|{~vijhpzypeehmx~xx{re_WVXMGMRW[^_^~_`__]^eotv}xwt{}||qkigfhs{qgbYUSTSRXQIPZele`cjknieahonmpttlpqwvqrkdcfruwutunrsvsnpcvuw{uqoooijkf`b[dcXUY_bijf_as^ghddde^VUUTVV[][YY^_flinkf`bnhgc^eirjgoc`Pfc]_cd_Uastjknnhhe_\W\ca]YW[^RQRVYPF95i48;BRW`g`gof`W^bvtgem{wlr|omide^RZUKOPUVPQMMN}wm]PkHZc]^id]\^_bbedbbdjmuf_bfcmeegea^^bhgeegeljgcda]ggklqstosomlkfihb[WX]_fcbmjaeb_^[^[JOZ^VT^ghbVVXZW`gbgmwwum^[VU\WUOJQPWeiilonffmonlh\Z^aZVVXaijXXhbVHDP^tbLTY[WOH@AGEHTRWfeZUSRK>61OW7AEGBBHIVM\cdingkolmn`]a`[NPUOT[^W]`RWc[XS`bSLVVPWYWMKunkjcWRUOGEHRICHHEEPcekvifgupje\_nwBLOZRS_E@KJLS[ahZ_YXputx}nmiZ\YTLJMNLJOXYb[\[XSOHNOHHIKIQK}HTYMOQ}qzujkjb^dn}vpidShJRXNoYiNDATCPI<0B1M?PK<8'0+83L?E@GHTAHa\PN_Iw~slos7:FA@LA8866IOG~B~|smle^]`jsf[acflxmbakkpdaQanvn\QtAVurhmckmbttd\um^U_duCB=C|pmiadbYRSTSUWSVUYXJEE[\mp{bmhjdrnZZtw\UQM|oQ`]o\\hjZglZITg?sFxJ{DNEE_PMWT]`e`Zbdn|omHD>wL}l}uGJGuGJIHFByy}Gwnorkcil@KMCoBEDyyugmfi=CFFve[folpvx|v?>n=B;d][_^Y]^USSGDMSU_icSWCH_ccZ_cdgf]Z[RJ?@?9b578JD>ur<7djfZQRQLLKKEE@B@AGCJIKPSLGDC84bJ:DKMVPJPMNQRZZZXPY35`[WRKGAJP<>IJNA?EE=FCFLK@>:f?PXC?JE3ENda8:898<89946jece7;><;=<5<>:>:8>;9:87799:949;9997345535649814576365dg3gif#cdacdb\YYY][VU^65aZ[b567689;;9445jf10.-+,/..+,-.-,.-+++)++-.1,.)'(,**%%%$%&%&%%&'++,0-*',/0/,**)'&()*++(),/.)$'(%#  ! !"!#%,-*&'%&$%(),+)'$#M&)))#*0-,..,**+++)(**)++(%&#%&'(+**+)'&&'&$#$%*+,)*)*+**,-,-./3+*++***1),++--.0-./--/0.,.002110-,-,++*+,-121.--,*+,.0-. E,,002001///00/.--.../112221. .-.,,,*)#%&&%(*''*)'*)')$%('()*('%$&&(+)&'('(*,)(%$*),,*+/,+-,**,,++(&&(('(&%(,+-,--.--)&0-**../3140/p$$%##"),/21-,*&=HBA$%%(*-/02650/36/.12+)+)*.)(++**%"%$"&$#(($#!!""! %%"&#$"##%"#'#%*'$$'*'%#%%*(#"# %#'&#%% !3,0#76.,-5;187774 "%#$**% ! "#!%"! !""!*,04&!!!!#$&'"&'00)%)110,)''&%&%%! $ !" &"#''&&$$$&&%*$"$),' $"#&""#'&$&)'##""$ $'%$$''$&.+%:988#.3,"###("(1)!#$#*1'''(*' !#$%&##::" %%"&++)%%$""!!&*.-)&*.20/*'(&+.."#*'&%'!$)*%('##&&)(),)%++)&&'&$#$#&$%(($$&$#"$&%"%&,+-,++()'#&)&!!!  #(-,+&(((&')+)%$$!""$%%&%'"!!$!"##!#%%$! #%*$(-!#'')*(,, &&!(%+.3!""!$$&&$&'$)),+)*-+.-,*(+00*((()(,+%'+../.1-)%&+-#"%%##$$!!"$" !$',++)*)&$"%()+.6:4-,,'(+-)N.1/-011/-/3.-,./-((*+-+++).110-*(**-320.++.&$')*+++*-+-/,,-035672422320,+++032/-/1240001-15433224443035121273-,//./2346889544039858766325/*)-)!!*3;! 1/8?$&#!! &%'%&*+,-./1001,(+,''**(,0353/46, 232659534757:<=>;988666765876773378:357564568:<<;::;;<=:;<<;:;:<>9>BB@?CCDEB?@ECBAAA=<>@A=<@AGHA@@ABDDB::6446999879:;;?CD?:863210-(&%()*.048@=78724873.28CHFVbc_RJKZZTGA?933:::>AAGHGKQ%RG<:;CLKC<>@ADR\ZRJFFJLTSD;8544-*/245:9988:AEFJOIFOOGEDJMJKKEF?=<==>CGA<:4235201.*.4=C=9=CDE?;;AC@ACFEACCGJIKF?=?HHJJIJEGHIQXYPND@B9GNILWRKHFEGFBBEB>@?F?769==>A?89=;<:??::;=8321353:>;;:>?DJINIE>AIED@:>AF@BN@=2A;68;>;2;JLIIIHDDA=;6;6>CPKC@BMUE>AG@=;;>5,.0383-025734110ZYWLI>3+6(8@89A:5567:9<=;:=BCF;7;>?G@ABA>;:>B@>>=:@?=8954<ACDCD@@?>;<;82/169;:=FB=A;99792)076.18>>70/2549;8?BDB<<@ABA?89;;74248<:-.81)!&2=/$&(*'"#-.1:81/-+% $)499;?:<><=@77666994-.0-147146/0:52.66-)00,231+*G?;;;81.0-(((-'$'&"")78<@LH878>81/,/:>")*2+*4"')*.2570420@B@CFL>==477YO`2,+,,+),2382331-*&)*%&'*L*/*GF*24)HDP,.TIGFED=CGGC=?=615/8H+A""""!.'1 %+(""+?KD>877#& "(.))%%( %1(&'%D@HB$%"$%$%$*/10&>=42:>?DHBED;BA<;B<92/+-)$, 110-*=?>A?=BC;7@B$CBD#%(&$$%(%>49#8"%!!#I56998;>"G79;;7,3/'99/0;<&A64974.:&=1.#,&'6:-,*##> &*%@A#KEHE>8951238>72768:596/,,-./.-//22("#039LNJVRAFJ6;:<5:<37ITZF4..+QNG3>6@:9AD58?4.-RB!B$D&)'9%'%$$"@@HJE@&DB=:=<7498"'("8"#"=?>3CD854 "%%CF=6/6==@@?A>""9!4/-/0**+%"'+,041'+!"/22-03243.,,(&2("("64,./*'('%%$$ $!%#"%'#! "#"! -& $&,&"$"#%&+*)(#%)&$# !%!"%-"$!3)2/$!$#0(/#%"!!.) 30/.B,-/10/.-/00-+,,-+)(,-(),31ހ怄 +~}~~~~~}~ 耆񁋇Yƫ􀂂䜶ѼŹǾµķɿȻ透¾ƀżȾ낞þ뗄Ļ˸ĿͿپ÷µļ¿րͼͿż򎩻תڣѺಧͷÀžͮۅɼüŎ䊚ľѴҀ̹¾԰ɾ¹ҸżüȻƿ샥쁎ÿƿʹļ›ê襯Ȼ솊¿ҿˀϺʀݼͺޕڸ䩠ݹ¶뺜ɽüѦú󁐇ȶ˲Ͼ؄ۥ途úŵʸ ǻαƾѺиƶƸͨͨ肍怀Ļʼ܂ʽ¶ºЀĹχ慁ŭƽȺ卐삛ٺʬ󖜞񀐟fdaba][]k<=<<;7e4gb}dba_^`[YWZ]_b_]^^][[\YUROQNOPPRRQZ`baWRTbgeca^[WSSSUXZXWW]aWQNJIKIDA?ECB?@?=>CDDB>ALNHHKS[[XTUVUSSWWYY[_]WVXVW0137:3X\]\`397ie,ca^][Z`ec^\]\e6578:=633347555332cddgi4h333dc3544324545656644368li654cbbedabb``_001122579:99;==6GJH:6<>?@@??><=;:;968:89899<3`YZ43bQRSTNQRRTVUW[`5411Z]XVWTSQOSYTV[UY\]XY[cde234/1201^\\[Z]`__`dca488:88hfcU^355454^URZ_a`]Z[^111___^[^\]1c]^^a`][bed_^_aa_1V28@944311^WXXTO^\[XYV\ZW}qhrLQSTTWVTTZ]]ZW[]fc\[gdYPKFGMPLIF?EMMOOUVQMLNLKMIHLDCNOOOKLQGLONOFCLNTRSOLMOGCAC<;;?DDDFFDAAHMMOPQQX^YSTQHEBGPOIEJGCHHAIPOBCMR^XNMQQOSTUWTRTNHEEFKLORJGKKMPPURQU]fgj`SPHJMOLN@AFJTMIA9^3=GINOHLPMH:ANPPMGN\SLY^TbhE>o@GLQPPLA>R[SONEFVWO>=FDE?;@FDGMRHGGIHGFHJKNRFFMPOOORUSPPPSRWVRLTROS[`dcb[Z[XimeRNNPLGIKJKRQYZSLK=6?FIOUXYZ\\PHLMLOKMLOLLNOLJNLJIJ@=??ALQOSVYVWSMIOIIMHFMLGIDKOGKQXZSOOPTNNQVUQQOHC>;?CFEDEIGB>=@?>GGB>?<:856=>>=>8`UY5@INP\KMVH_IGWXh\OIILVj58@??CBA@BEIJLLNRSSVYGUZQCOWXYVZSVTUROJNOGKSRQTTX[`\deZRPGR0@@GJIEE@<=ADCHHJILS[YRQTRLIKPRSXZ[XWTTTQTX][ad\SUVPSTTWWXUTQRWX[ZXZ]a\[[][YXRQRSUX[]addTQYXXUW[X\Zb`ca\\_acfbaabhjhfa[YZVVZYZZZ\XY\^[\^^``_ci6kkhfe``gaa__ea^Z\\TSV\_aafkidc^^o:eaefghj6556dbXa9bE6;fWriRGHdh?GB<:9CB9AKCCEAIQUXZ[_egcZURUSGGDKHKOZd`]cqjZJW__bie`^ZZ[`eghd/bhhfeca\^b_^^\\]_`cbab\\Z[]_dhff`cdbmtqjgihfhhhilkkhghikllkmqpnomjhgkjllkkmkgemlnlifhhoz}wvqkprmg]\ba`__]\^_]`fihhda`_[WWYVQHMR^\VVZ]\ZXUXVSVX`dvysxN~ux|||xroonf\X\aag_co}}wus}~seaYXXVZ\VWWW]`ZWTVY\[agjlrqlpy~{wvx~{}wegida^^[XWWZ\WNEFTWW\gkebjmn^[TR]kz}yz{wqontsjekinnjgmokmlk{xurz~ztsy}uosuyumgjid`gjcTSWbihb_^X^dada]_hhaZQMLKQROX^\XXUTeloolroehgkpglk`[[c[WTZ\^dgjlpqvuolib^\\^`]^^a\]\a_SRMJMEA@j``bf:U\RCHX_^]csle[W^fpgeintsjgf^YY\VQPIINOSSSRLGJ=bGGYNVclkhfmnmol_]\_[`aVONUTUZ]eg^S\][[]fZNKYWRSOSQIuplg][ZXMQOViYQID:=CWbe{GqgkshgYNNj@FPZaINbPBATTW\kjWZYasps{z~onk`]S\VLMPJK[`XUao[LGEJTPLJXOGrgM`aJMK~y{yleeeZ^ixJ}mgeeia`OMya_pGB;G0(P7CA0KHA=<%)(%#F>9;78PMM@FPW\]H=zxy{;;cZjm[[ac[[ZQNOKTaf\U]TKIV\[aiahecc^USGC??7hjaQ5O`88q9l765f\VVQQOMHEDEE><8_4E:;FKOB@?ZLXQCMQJ:SL]`:9:::7789:;kjeb28=>=>;=9;7E99;>:8:76879?=9=978864664253286123346743e33edgedfea[ZWZ^YWT[_a2d`acg 677989654fg//--.,+)1,.,,--./-+,,***++-/-+*+++,,*('%&$$%&('&+.0/(&(230//.,*''(*+,***-.'$#! "!!!  ! ! $'#"#&*)(%&'%$%&'(''*)'C&&%%$()((.--.0..-,++.0/-+*(+,,+./~/,**++)(+,+,-/0/..121./,**++**,-,-.-.///..1/-/0/...01-./.--..---./.1++,-+-,+*,+*,-/-./",+./0.-2/00021/-40.,.--,-,++**  &$%($$%'%'()+,+*,-)+))*))((*-)*-)*++(()+*****+*+.-,+./-.-,%'&$$(,,-,))*,+++*-,+.*,---,+01/-,-/.,#"#"'*./1/30/HB@D**)(')+++/10.,..33.-41,'%""%'$#$ "&'((,-*'&&%%'%$% '&&&$%&&&%#%%%!%&(&&$#$%#" ""$'&$$&#"%"  90).*2/.+-2!#$')+1.&(&#""!#! "&&''))),+)*(#" #'&#"%$!$$ %)&#%+'"#'(&)))*(&%#"! !#"&(# #"$'&(''*,//2-((%(()%' "($"/##&&"$%#!%%%$"%+%!(.*59%!?"$%%%'& )/)'("%-.(!%"#!$"#'*%&$%$$"#%%&)##'(&&''((''()(,,)(-,*-02331./-+674+)''$"#%""$%)*&%&\!#(*++,..'#&%%'$&&'%&''$$&%$$##'&)+-+*)&")$#%"!$%!#!$'"%'+,($((+&#&*)&'$ " !  .)*#$%(#.#,#")*/-('&(,6 "!!"$%%'%&))**,"*,%&,-.-.++**('$''"#)((++---)./*&(#& #$#!"!!$$%%&*/-))++)&&()),-.--+++)$+,01471*+,)*++,,,**))**.-+.02.--/-+,*,/1243+)0.,,-0/1.2131/05777324688640,-.++/000/0-.00012124235575330162201531.02-,-13337984422<5467652),%()"#"=.A90''9:$(#i$#"("!# &*,./024650-+,,&&$(&(+38529?9/'1545;:86445799<87:;99862576664246689973424579;:96998@BB>==<;<;<=?==;::;<=@ +?=<;>=??>?A?<:@@A@=:;CD@=55:9656768<=>?;98854440+ "$*/138:97656712255CJEINbfbQKNS^1ZTSZPIJPORRNPNHIHKJEDBBC=869::?::>JJGECKKKB:843314833448953125769>A@C@;?EKIFFGKSKJHHE:<>?;686442452,''1236=@>B>@@@=DGDCBBPSQIFBJMMKHEBINGFJILJEADC@=BE@549@DD?>:47=;?>89>?94,*))/11:?<9856DJMMKNMBDCDF@CA:8;=:6579;?@ABDFLMIHF><;;:<;>>?9:8;:451,,'&%7//-,/4.$+7;9:BLD?758>A;;8796<@?ABB?>;;<9<@=<8;=BDAA>>?==;945?EAA?@A@=:8=56949DF@?=;61128@449;=NNG<;=;41200156:>?BCA?<;99=:4367:<:7653222..2774255/,'$# (..+/20**$'+08=<;9=>=>?65364892.-31145::4.33344:2+)21-1-0.(H@>=:3443,/.1=0*$  089D'E=9:=30&!#5"$+15%(6*" //03;:.116@=@EEH>>?871Q\:3,PP,/)*48109A1)&$%,))'2-US(>7-98JFH)++MEIGJGBDIE=9::/17?N+F=855810GLJQ--F62:C&A'*,*!'# "&&'BLD>?=#!"#3(*!*-&$!$("(+%#&$DDIG$@$&%%$")..)@==*):?>;;@CE?B?BA?830/18+&132.+/*%4=BACCB<8A#%$'*''$ !:%! $#DB@7946888A'@:97;2-4215'/@@%B6.:=925&=*0(%8'6;@/1##!#(%> "$>8<;98453/2A7213769=80,5:5963289IF6*#GE4??71892=AEDJA<9DD;6249AA<=CA2@::52.+.,()+,*./*,,,.6);"/5?$)*(/*)& $,60.159?E=HGA"*!?<@>?C98FD$F7#)))%"=73;C=13?"&'&CF)?717B?8?<>!=; 3-57/,00++,(&(%*15,(-*&"*.-28140-0-(("!360*-35..)')'&%%" !"$!#&('('! +&&! !"(-/-&**)&)$#!#"  " !"!3.*0!""&  +&.,% ,!n''%341..000..010.-+,-*)'*,-/,++.//󀆁큂耋Ӏ~~~}}}~̀  ~ »ǵǚ񁊍̽ɹµǾƿš넔õ²ꢸڴ〃Ԩ̉⍛ֹįةļ֫ĺŹ˱͵ɿ¾µ̀´ôşɷð키̘ʀɹɫ¿Ŀž肉豌ވ򌔊勣ʀǽľɀĽㅼĺǼŻµŷŹŸǹ¾úʼȿ͹Ķ䈦Ⱥ󂇊􋠛Źķ̵îƽɾ¼禱ȿ񇣳πDzŴ臓ϻưޅͳ㣈Ÿ̼݇Ҟȫخ˳ݯۆ샏ͮ¾ؼθǯǶ̵¼㼮̽ûʽЇʺꁄυۂ瀑̹ĵԀҽý®̽懍Α/`dffec`_e;;::93cddedghccdbaefb[XVTW^c]`__a`a^XRQPLNKJQSYVTQ^hfcb^\ZWUSSW]]WTY_a\WQLIIIB8=?@@?CGEDB@ANUTWVVVWUQQVVVWYXYZ\`2003bX]_[Q^554dbbeeedea`cce``a155657768=?@BEC>;9:;::6f^`5:436;978;H>743654353a^ZXXWWSQQT\_^^_ggg2366534ga^[[\[ZWX[`hi3553fba`[XZ\\]`ccabede45434433dbeihigg68988;;;<<<=@A@>8ebM`a]]\\_]_ff33gg37987545799;CC?;;=;<<<@==?AA@<9:99667<<<=:=<2026CKLLE37<=?@><;::979:::8763__`]WPMMKRV/4673b_382017dUT[WVX]eb]]c___[\a_Y[^baZ]_][241b]Z[UYdd``^Z\]6:69985d[WZZ\bd_WUUZ^`dfb`1454324332`]/0_c7igb_\`hfa^]b31_\_015;831000/][X[\YUVWVWYWWUHNRRUXWSTSPNORWWTZ__VMWk_WNGKLLJHFEB@GLOLPSTPMLMKHGHEEGJHGCCLRSRQJPSRQOLQUYUTURXTHqqKLFJGh>>DFKOU\ZDCLNIJA@<99=?RW9a:AEDDCD:e>D58:@@ACHMTPLQQGIMRTX]\Y[LGMTVXZWROMOZRX[UWXac\WRLEsmA=HMMLEEB>B?947HQXTNLLPQIJNQSTIJNMNOPSTVVUTV[]XTKGKPJPhmbeagbPS\YSSUQPRNLJHGHHLIHPIDHGHNWTUUUXPMLLLMKHHIJOMKGIHFNPK@=DCMQSQRY\XZUJIQGFHGGMPPJIJFELPWXOSMAUNLPKMRRUWWRJDKJJFNJBBDCB@>NB>9AJE32071_Qj;9lW1>=>BG@k<@D@nPGU^O@NLHL\b:@CCA@DDGLKNTTTRUSTX\VJG][Z_\XXYZVVNHGGJORTTIDHNYV[\ZUa-Z@ADIJEA?<=?>DGGGNRQOOONOSQPMJNPTXZ]Z\b^WZY\\`gmcZVURRSUTVVUQV]]]b_ZYY^bb\`^[URKLNOU[[X]]Y\`a``V`d^^eg;pmkefeecbb`diijg_\_\WY[\\^_YYYZ\__][ZY]bjk7kac`bdda[]dkjime^XV[b_\ak8kfa\b:m^egf994123\CSB::?Le;W\;KVBWck@A:;;A:];GGDE@GQUQRWY\`YUWWXQMNHGFHJV`_VXba[VW][_efhc_\]\__ef`fikklg^^ab``]Z^b`_b`a[WOVY^_ec`\`dacfkmkmigedeffilnppokokijhcdghihgfecafhjiijliffhgkiijhgjggjouvuujjtzrjhb`_^YVZ_abdghb\]\ZUXcc_HK[S4VcdaXUPIORUW`l}{zTzwzmprtuh]Y\bntn^[x~zzvqqhd^]X[_brrhidahj`[UX]]_``agxymfhp{vppk^YVWUY[YXZemmnttd]aghgnYSYXYZn}{wrjcmyz}yzpptvyphcimtzxuubcb`cgjonbdhiig^ZZdbZXUYah_U[XWW_gjfdjaTIGFD;wOX`b^[WW\adlx{vmj_ovywolWQTVWW^VXY[Z_dgcI^g\MU\MEIYYY`iaUa_cpnu~zrul\VOMX`IMUPGdzeMFDDM_ZPMMHOzS]V~LO{yvkjgeapq|Hpjdcefehv{yEziYahBN|s]6`G?94+CD/%H)%@56>KJA75;FLQXBRQ\bgwz{@>;BAIGCFEzogkejxeeyB_VeogY^V\jhgmtkbivgo`e|wYZMQk@Druclx{olnDwFuino@MKNuswuqe]`gghfnt>AtbWhk`[ag_a]UPOLV[kWX^WSMLOM\lkgbcfd]TNKGG;jq8cW[TG`g;c\c97_XYWVSNKHG@ACBFCCL]bc^PHFB948@>>8>CB>87=@:79LJLC@DFLIYc^b`32251\XYZXTNKFB@>BE@BBG?AA=7cHY::D>A?<879<4EMTBkU[\79;:<9777996iibcb7?@@BIo667668<;:<85506=CC<95456446622346542221247;5e3icdddffcb`^UWXXW[^[Yc5c\^c6 459;9663d+./001.,/...-,//-120//00-+)(),.+,,-/-/.+'''&%%$$"!%'+)'&/310/.--+)((),+)(+-.+)&" !!   " !! #'%(&#$%%%&(&&&'((&&&(%(*(#',+,-..-.,+-)**,)* S,*)*,+)'&&'+./-.210.,*)+,,*)*+.11.//.,*+,,-.///.0--.,-.0210M-,+-+***,+,....P,.+,p,.///,-.01--+++*,-++++)*)'^%" "$($0.,$$*(),/31./3011--.-)*+-,**,*')))+(*/0--*)**-*'&&(**($%&+-../-,#++)*//.,+,//-,,-,*+%#!##$$%)-01/-/),/-,)&#%'&'(),,*-..)%,4,*'#''%$#!! #&(',,+('&'%"##!!"#!!!%&'''#')'&&&(**'''&+)"57&'#$!,(&$%!"$ #&0! )&0 $#!#&&*//%%()%' !!%#!" '*. !""6# !#$'%#'' #%'(*)),$ #&')*(&%#$+&))(**-,))&$"54$%#$ !#%#$" !$$%$&$$%$'%'.$"&#)#,94.55/((" " %'%.=) =697$(,+)'&&'##&()*%''&''')(*++)*,.-+'%)*$*9:34041()0.(()((*'&$"!"$&##(&##!!&,))(++(%%&&'&$'%##$"!&'%  #&('(,.+,*'%)"!"""$&'# #!"&&)*%('*&#'#&)'(''%"" ! $ )"/4+ / 5)%*-* *($#01 !! ""%(&(+**),)+-.)#"/--..,--.,,&#$$%'()+%"$'-**(+-//  ##! !$$$(++(('((*)('$'(+,-/-/32---/02792-+*))*,+,,+),..-0/--+/11-/-+))&&((*./-/0/13223,140055 <:96888655457644//31-/0//10.///1132020235660012442/04788:630/15215;85314 ;1665&)A%34")/!27<$$!-%$#"#*-+*./24/.**)*'&%&'264.175/-/4359;=:855355:969;<=<723543676687621+02559863689:;>@@@>:98:;:<>???=;><<<:89:<<;;;::8;<>??@A?>=@@?>??;;<<>@BEFFE<=EJC>=:;::5249:99<>:786502;82%$(#-<<921.).034:?LPU\[_h`TKIGKKNXbgm7dceZZ_\EBLNLLNI=>DFHB:679?A?86GJHHEAB<<75368:AA<=:8=>852456677:>IT[X[VQPVVPG?9:=DMGCFB9433344433:?@BED:9=BABF727887FUPKG?:AMRSQPGGIHKG@@DCIV[YPGHISOF99:;>ABGD?=966JQRQKF213785=88986;?>=??9;;:===@@<7783^V.0VSSC0+.#$#"#.><=@>29;456GB9:=><=<738832.-+R1222..0WZ10X.SSS+,'$!6(638@=5/35664567=<:89:@HB?::98'?@BCA?<9==:A>=?A><=>=<>:8649?CD==<9~3342;ICFCKK?9==<;769439@BKC5536531,165646;?DDDAAA>:851/47984322.+,/59?A:5/01./,.*(*(#%#!'-2+*451,)&$++28;=:8;>B@A96<71-R,F)5@E6912145150,.4,*-*1,RI?A=59853/)&28-($&%27BJGJ;<@=3&-%47/(/4*$&1225:4-655=;?KIEAD?41.SYZU,NL28').+%;96=3% #163,""###'"!%*2=?>@ "'$"856237-+442,,/*'#$:>BC"":7:AA?>;"$$"&&% < ! $#!#%GB<7837?23?#E4/8>905//625<7-4<>6942-4;3+/41(4<7.20/7=E53,3;6.1)#*985-7;.38DC?<26<@;>?.CL>>6B--N;(,831()**)+40*-,6=DE'%#'#97C:69%=&<6:;"+()>=D=?=8319;:8<=!#=2,570.03/1/)''$--7+-/**'&'$,661--01-'$#"$663-4.$14-*,+(+))&$#"# !!"! %/0/,$!"  !!&#$# ).(*+'q%'**'$#"!2!- !$)!200&.%'#2400+". .1/11011/)**+)-,)(,-)),-򁃀ဂ~~~À ~~~~À  ~~~} ~ ꁆƺ´Ӏ񁁁Ļ󇝪􀃅ͼ̾ƽ򝭯˭«Ц̤炜¼ɼ¸ƹɵõƵҳıǸñƦٲ¯ɽ¶ƻʹּƲı²󈏀ȿ˾䁋̼ǀҿš⠟þļ타ʰǀɾľ̀ϻijüľȼ¾ȹǿüǾӍƸ܅ӻ¶Ⱦ럝‰Ǵƀ阥ʷ˻삊썴Ž턐ն䃋Ƽűɜմ톆ѽ򈍎˵ֿíꆜ۾끀Ʊ ïҳ˿л˳ެܰӁ既Ҳ늅傅о탋Ǻ넉ր»΀⃤˿̺ǻRŔǬ냕*82a3j6hf_^57665eccaefegfdhgdekg`[VRRTX[Y[_bb\__YSTWTWYYVPNTRRU^a_]YUVYZYYXZYSRYZYX[a]QKIHB<8=A>=>@@A?;::ACACHJFKPOSZXTMDACMKJOSY\^^\_`_^ULS[_Y^3eee`^bda^acd^a322246AA<7899;>A?>>?=:<:g]]f5457<=;;98984354433g`YYZWVX\\VVY^_^_bg7976442ff`YZ[XY]aa^fjjifddeeb_]Z\`^]`egj698::9775kll767;<;:<;:99<==<=AHHB?964fcdcc2beggh4f4588534678;@B>:9:8:77:<<9=CC><<:9766878:9;97:=<:;;<;<>@?>@???>=94698:<=9689<;:<<===;:996764634556:9:96435767867757:8665456768:=:8:96446644568:87769::<98:;:9984fe4554344236da_037753214545665750374^_a_`gba1_^^\^03;??=?BAACA?738?A@?>=<=;:::;;:9862[TVVVSUZY18;?BAB?=<=>84100b2dc^Z`ccfgdaca^\^^YX[\Y[\]^]`b\a120]`444iga^acfh67hga\]a]\^\XVWZaabf433556755877652a^`57e\[]^dfbaba142_\011356300221]\\[WVQRVWRRTVTX\W[XXVRRMJLMLVWSSX[RMNIILNPSNIGIGDCDHKQCenEHHJJJKJIJKLMKMGKSXVVYZXOMPSSRWRNVUF=BC:9IJKKLC:4?F?PZTONG>hEJ9CTZHl?>BFJMMJGEGJOI@AFGQSSDc_eblDL=;8;<@=ISNB:@<:9bil:BFBB>CNGGJNMKGGJQHGKKPPPMNLGFJNPRSSMHGMNOROJT\WPIC?B>@IIJJKJD?@==<=7iX`4:>ENNHBIKLLNLQSS\YSROIUK@DAI[jp:g^[HFJRTNORQKOILM=ACCFOOPTRNMMLRVSNQXLCGBGOMQRVVXVTUWPNOT\\Y\^cU[ZV[_NJNOPQQRMJBFIEDCBFGMLGJMMNRUWWXXWQRRLKKFGFDEBCGJINSWYRMJSRRSKJQXXRNLKGHFHJHLMQNHCGPSUZ]\]QIMPSTTVQONORGCGNJW[`WJCKNOJC7<@?LMJ<9?KD?7\697^h@CF><5AAB@;GMMRSQPRWVX]Z^bac][QICPTUTTJ=>FKRSY[N[RB`e]]B8C9?EICOMAA@A>@<;;EIKGJKLHKNROLLKMNRWY^^cd^\W[Z\cgff_\][XWXYZZYZ_b_YWZ\]__\fhfa_ZYVQVYWXXTRRUVUVY^cd]X_b^^^ef_`aaabc\\_ccaa`^]YY^]^^_]^ZWYZ_^ZZZ[[`dcbaba^^ba^^a^ad::mb\]\UXbjmieec_lsrh_j<>814W\[LL`_:Wbd7=X]_c^SUUQ>`bcghfa__elqf]^[YX`fjpxsfcdjokhecihhefnonniihge^ZTS\`b`\c_TQRRS\hggdcv{xufhgZ]YXYS]dikjti_[Z]VSSQ[b[[cjjhlqnga_][WYZ\a`]XTRRNJKR^ddeaaa__QIvbLLKQPRN57QW[^`aTMLKOPIGCB@;;79;ACgO[eknkloqlpwg^adcbWOMNMH[fmihi`b__VTY^STVLNOOTPJvmagkTKFHSX\hSEJGYd=GXR[l~mc_jXRQSa:\lkVNQOGGMQQPV\^`_`erstskkdXYTKQGV]C=hjHkdXPJIO]iYRUOJJQVJJKyspokhgl~NpnkkhhfesvDPq\VrALH{tf?6@&1/EK:*3/#A?=@DHIJJC4_EPWBLX^kpln:=;789DLH}t;Q@eSn><@BDFIMJ@vutqeXVpphdebaheRO^habnvkb]W]bmbUKJRXZrdVTd[_a]^\^fwwsvuq_Zj~khtsqumbbjq]Z^[SOGBMVVNHLYKRRKRSP\ijwz~kXRIDIXJLYcW]][\^dZRixXf^DZqvw_RrqDumjy}TZXap[IRS\WSYXZPCcmrj|>yGDtqsvuqwyxqjrECGIFstslxusre[`t?GKGt|@zvuc`ttDtjitAHJOOzos}qcZVa^`ij>@ube@qcffecbXSNNP[]`T[VRQUSRVUbjfeegeaZULHLB:=CDh^]4CKTX\`dgd___[VTQJGBAGCAKGBUXZ\SLFB<5;<69>;=D?87;:;7=IX<;C=7]N@,-Bh;Uc298:;?7:86g55ggcbc4=?@IRE5;86479;=728%()!'%-><#? 04(6<9::8#!0%%### %//--.20/-.+.*'))'('#+--//010/21267699:8523568877:=>?>::<:55234668997652341345 14898867;<;9;;9<=@@>>@ECB?;:;86797664699=<><::=>==>>:9;=>>AEEIHD6-AE?755455259;99::89;9806:7.%%!)5<<868<:986668:==94-2:BB@><<97;?;AAFB=9988:;CGC=* !2--+98417;:9=@BDKLGE?>EC=989==::@A@A;25;=BB=9888748>0HF14/*%'7>>@BDD=.23>MBBC><::92-;<5552-YX5XQ-00+ZXWYVN+,-0,$158;8223.";::<;:<::>A?<<>>=><>==;740046::6=9201228@@@<>NKGF>@;3733417:>>@G?9657311.5954:?>=?CB?;9853458:8630.0-)+0798868753*'82)&&((($).2576.+*')'"0+29<>;<>@>@E;58;993.-,,(5?A><=78661/14-/0*-.-/.)EB<5:=0+(*344=/%&!)1$2/2>@KI@<=9342SQO,0(L15"/5(?:1,('+4<1,1.*UUJO+04)HIN))LNPMNMEEIDBBA=:8:DN,I>;898766??&.H?1*7!)'F@7* & !+130,-, / $(!&'2643")&@82%.*%" ""%&#!! "%!<%&)'FI'(&D>$-.&EGB>;:>@=>;B#%$#BBB72<911..630,01($%,39@<"DBA25B??:!#$##"$$## !!!#%#EC:5=;5@;36&G1.0?>82)9@9:56H:,5A8A838?4.**8* 5*: !"$(&<<=>80,<>:8433;8**38239?841.15>7.)(.0/?5./926423116B@>A>=41:GH99A??@<75;?4462.,'$+/0+'*2**1)+,,5?@DED1 #/**7?58976:?84DG0:9(4HGK9,J>)>F?9KGG4310>4(,+0/-2.0)49?9?#;%!@<<=?=:=I==;7<$$%'$FCB99C<:C@><50031?;B$<76>"'&*-@;>AA<63/74598!">55#=554422-*&'',//(-+((+((-)03//-00.+(#"& !!3-0"(**-///.+--*'&%!! #$"*)*+&$!!!(!"$%$*2))*&,#()+(+(-($!"!  %)'4 "!, .(! 0#(1120.,%',-,,+0.1/.0210//,+(**,,*(&(1-(*~ŀʀ~~~À~}~ŀ ǽļ½Ǽ郃򃈏􀆅űû򆝷퀁¼ǻǾꐭ¶ɸϕΩ׿󀍄œ؜ЯͺɸɥƀǪȽϯ͙Ϲı̼ºηĿƼīȳ莎焇ɮЀ¾͊ԉм¿׀⏅ûƿȀպĿ끀ȾɭÿþƳ÷ɾÅùԵǶíĹĵýþѸˢҲދĽļ샌焄ζ愠ԫ–󁑒򌗐􄀁ꊍ򄎆܁븫߹˾Բָʾɾͼŵܧ򇙦蔢餬ɺŨʹ艒ʺźԀǺѸŽDz僌¸վ̖򋗤843effgg^^g44deehfchi5gcdhfee_^]\]\YVTVUUYZZY^_XVSRRWYZ]\UTNNORTWYXVRPP[_ZYYUSRSZ[XRVXRJGEFFB>@D@>ACB>;9:>EDCCFGIIFFPSNFCA>;::95d354_a47:;8543da2345ge`YXWVZdkc\VX^`ddfjifd3555ge`ZXXW\cjdaaf773b_bdec`_]\\^^beg588;<96489777689?A?=;=>=ACDA;;<;<>@@CEGJHB=85421233fefifd4675fd3467;<76675433458kj:;7989:<:99776578:;?=64:@=99<=?AA>>@>==>>;;E@;:<=;;<BBA><;9943378433579::;95333568;>>??=::9977889:9869<=86444cb345766778:<<<=?BA@A<44434334442e2a1126C<3d46887W6547?:443a^`aaba^_`]\]``18>AGJ@<:>>==;8=AHB?@AA@AA@?<<>;:;;;98789754/WSTUTRW19AA???>=<=<;753][[`ZWYYYZc`cd`a_^_[[^^`^\]a`[0558653354`XW_chc^c5b]aeccd_ZY]_1ccd3fghhg2dd44hfh43c_\]ZWVW^a`^^ehcbcaa101246626553.22YQPPRVWPRUUWXYKPTUSRNHFHJMRQQMQWRRTNPPMMJHJMIDEFFHGMN?dAKHIMRKAFKQLHFHNRRQPRSRPOLOQPPOHFLOMIIKJOLHLFSTNDDKO=MFNWba`n{AE=?DIIMOPQVXSF?DDCCJKOXZSLC:>9?CHGFC=;CDDAGGEAAHTRLHGJNJ>HEZLL[hEONQW[IMKGMOJCGF7EGIFC>B>9AFGLPRWUOIPSQXYROPNLFCGAAQVRSOTKDB98?@9nclngc8@CILSVYMMLKNQMOC67=9GF>66?DIGIIFEDLLNT\X\RADMRZUPSVWT[ZVG<BGJHFBDIKIHLNPU]XVXXVRNOTM@?DABDBBDHHNTUYXQUSVXVMMHMNPLGDDGIJLJIJOLKFFNTY^]a`TCHNRVTQLKLJJKIEIT[[\bXPJEIPE6a6@NMHECDFKHVK^A;2Y\:84;GJJE;XVhCfbmlmq\WS_59@?CGJK>@HUHKNMJQRQV\baaadjg]VUYXSTPKCBGMMPQS^g\]fU8I8AHGGKIGA?EHA=A<==CGJFJKOHGJKLGJQRUSWW[^][Z\Z[^eccc`]__`]YWW[ZZ_b[WQNJJ[kklou|xsrniaa\WWVTUTWVRQUQXdcXW^ZYVZ^^YY]_`_\Y^``_Y]a[VU_`^[\\][WWWZZYZWY]^__^\_a]\_ea\de`ak;9ha_WV[eehlhabahprspo;>=8d3]\gT[Qb46J]B:XcVfnr9;hg:EH6jHLIEFEIVWXW[YPLNRSTTSUUOLOOTVWYX\_\Zcc^bbcfdcacbb_]]``_[`defggbcb_YXV\dbbee^^[\[VWWWTSY\^dd_\__agjedcgpsurtz}|tqqpkdcdecdca`^\hc_bab`ZZ^affddcbeeabimy}>?fU`a\ZXTYUQWXWWY_c_a`__Zbegfgf^^irnhinjkovy|y{v~QMHSOrpnvvk_`nj^beimqvvpkbdgaTMSY\`^Zeihknjnmlmgcejvuoighikieddccb_`ejjg^_ci_aeiqtmaYZ\VT\cc`cgjnj^Zagbcc^^bbXSSPKVx}vihhddpqkimvqdnsvquvmaYVUUNOSXUVNJIR\`dhmomqtkd`hehgc]XUT]aaedW=6<;kjwNh\STX]cachejl{xpd\[d[Vfbgttnmpgjigpsmhb[UZVUY\ba[ZQW\YUTUZ_\YZ`bfaRQLW`[[\AN6ABUjgenkkf`PIO_h\^[TY\YTLK\[NQQXeZXVZQNKKMQRNNKJFEIed[TOQYV~_lccfke`ceimh_]`\[dvvprurlionjilkijjijijpssmfbb\UU_]^ib\]`XRNPORORY\UZkhctvkYX]Z]ha`bb^ed_W\][RMPMV^]boqkkjcc]UQNSX[^bbXTRQLLIFR[^[[YX[]__XMNP[PMORNF:]?KQRNFwEIJSRKG@@?:89;<@DjO\eklmokggspaZbaeaWSWWNJ^cgmph\\XYXWY\TUONQPRUSsaipSOMIMTLU_@MSHJHFGMScyr]gp\]\YYAhmgH?>GQ[\YQLUYac[afsvz|{nkjb\\WVUJHRTJIGM`d_]WRKNY`RLTQ}JRIK~suslnnhnLMqmlhffjlizOL}o]ayI}zutn2:92+PB ! )'8?CCJRX[oVzhD=FTQU]^lm87898449BDBt=HJACIPOICDFD@?@CEECwtGMMJEy}GPOwoljqxxvtz}{DBAlbjlb]`]]TWYW\W[\_rFIACBvrbi|zu?E?=CDCEMJCDGEBCKND}pmqwqrwxoCmd`ovsaWpYj`py^lytia]vpUM`toONgWlqes>>>IAKHCohjmhOZoigkvkgbY`\jmuvzzh`YV^_VNEFTUO[pfcZLbd_UVanktujqf\Wkzesouvpe^^j]][ZUNJIGMTQLPR@JWZNHTWhbq}wh\W=7WYNHQYbkYJ]YNqRYYc\:LiGnMwv[x~mdnY_OZgdNGOYUVa\SCDfgj_jsDEyrjvv{~z|yA>FLMGHy~usvouunkcwDBEUEhrvooeXoq||imuuILLV`K}DzxwqfZY\^b\s>yojzjohhi^YTQGRWS]WSOOHR[WW]XaW[g7kgdaWPJRH@CLH>>F6dPFSJ>MQQZYa`cbSSZFHX484T[]SPNJ?AIJFDBFF>2I;SI\fFANCAG@?A>BCW>9@<4WQP33JoETa8988:=;>95dg4hh4cg5:<64`^7:=@A75556656962_c46744ccab235543gfbbddd_]^^ZVSUW[_^UPZ7e`a_aef4689-//01,+/.-,.-*-.0./200/,,++,.+('*))+,,+./,)&&&)(*..+*&&%'()**)(('-1-,,)'&%'*+(&(&" !!! ! "!"" !"###"&(%!   #3 "''#&'()'! #%'(+,-+)'&()(&('+,+,]+*)**,,)()**-02.+()--/1010-,,,*(**+-/1.-.0-+-.00/..--./112)//./.-,+`00o.-++-+*,--.-+,,**-,+ "%%(:+**+.+*,,,+1./1/.,,-++...-+,+*+..*,))--0.*--*-0/01.,*+,..//.//.,.,+++)((),--++..-.-,+# "&(+/.024+-0-)'%%%&&(***(*-*+,())'&$$$%#!!"!$$&(#4 %$$&)$!$(%""$(*))'()(('$$&''$" "%###$#&$"&&)&!!#$# #'-/143 < ##$%$%(*(!#$&+.+(#E! !##!"!!$%#!"((%#"#%$%$/-.59%)%'+/$$$%$"!&'# !%$%$" #&%''%"))&((&%$$$"!$ )*()%(" 5/352/"#()*$%%#%%$&$ # !"! !&%&*/,/)"&).*%'(('..,%%).+!"##%$&$",%&%'+/ -+($''$&//.459-#-& $$ !')*)**&"#$! ##"$%%%)/++,++(&'*%!" !"$#'**-+')&'*)$&#&'&%" ##"$##$&%#"!(+,.,-.($')+*)&%%#"$$"$'+('+&"  $2!''$! "$ ) *)!##')3!107339/+(/ !#%#,#%))&)))+/3210141-)),+((&% !&%%'(+/*).'#$"!$#!"%! "$&$'')%#%%%!$**,,.,.0-,,-+-053231/1000-*,/..140-)'&%/8;?>:98511,+,--..10-+.+.44..2/.,.110/0220//1000+/30,.55200111--.0/01..11231/2200263/4534: 853--0768:94448=<=<<*&&."'#,%)7'04,8:9:97886866?;9::98568:<;:;:9<=;<>?HH$$90776431630432247:799684:<<:970/6A@<<>==@DGHEGMEN\bfeicZbje\W[Wb5YU0/U40YM@BAED>55@?3::<>ADCA<79<6/*.457409=;>@=?>>=:8:=FD@<9::=;8:;:;:9:<@@@989<58<=BDB;566207:879@HE@?AIE;BFHGKIA:4332./47894/+08<>?CEEILF>;@@DA>:754;>@>CGTSK?:;B86A=CKHFEG<@B?FEDB=847787:@<8706963359<:89=>?;02,27323"(<==FCC?9+#(6;79714764+-:9^ST-117?97470/.0[WW00.*-+($"$:941.054F8D89;?=:=<>B>89<76>=>?@@><;?BCA;<<625955<748;30/0/3/27f:37C:>?<:9B@7499<:4231)'8=?@B>5524//,+-,-0.QI@59?-..*+1+/6"-/$'%"#*1:JPA>17<+'$#$:=8$ !&,341,(0078279@ADFF>;;7443WOQ32+(-/''&*79430-)+14,)0.QMEKKG*/)MJMP)OQTSPMHKLDDC@@@;>H*+=>;7668<8@E,+G?10<'FEB=:1!$)5?7)-'81#!%+)12!#":#$!&*)%"A""! ! !#$#=;&*)(JI&JJAB%++EBG@<:8<@>=>AE??$##H:5:;40213/1202*''*8%&!##>=27GD@9 $ ##""(%""#" !&)"DC;9=@:730>;.)083(&4+7;1:$ &$#968<9)1>;8:@:94042::?>BB952-24/*$%,-'/=781*974/.3:9?AI9A82-;JD5?:AC?92393432.*)(&*.-**,#&.0(%0/;=7?=@EA>>@A@"!A%'*$$9@@<>B:>?;:5=###,'3:>:95-:>BA6:?:'+*06*?%@>=;821134/8A6;778/-+*#(,).*(%'").+,.+1().20//)&"(# %" ',,.--*.0,+*(! " #$!('%&&&# 1!.)$,#$&'*),.//''*'%(,%%%$"" "@%*#-3%%! )*))$2"%.132-/ (&6*,,,,-//-0123/...,+(()+-.)%(-*,+-./ 򁂀 +~~Āۀ~~ɀ̀~}~~~~ Ľɾ񁉐􋛮܀о¿ļ»񃌛Ӹђĵľĸ±ѿ򙥩≚ť˺µǽʴӿƾºϿý㾭¼ʿꃎĮԎ׵؀Ƕ˜˹ľԀƩڙӋ³ǾſະƻͿ»Ǿľɽõʷ̾®ŽꧦȺµÿЈ¼ĶōӿƬü쀑ꆍƿ̾㒯á큀膈솈׀è˨ȯƤ瑘Dz¸ŹвӺýǤȒӞȈ̳򉥔γż녃񃊚ѽビϿҁʽǾЀ°ιſݹǿϵȸֈȔԃ;8853ecdffcbebfg5:99874dcdcbcdca_`ac^XXZZXXY\[\_^\XVZXUTWWZWUTSQSTSURNNSTQVZVTVWTPUUOORPLE@?@?>ACEB@?>?@==>B@:n<>=@CDCCDIJEAC;>><CBFHB?=;964346755432247fcbg5557656422c2gefhgh5899<=:88;>?>=<<<89;;989;;<>@>=<:;<=<;>CC>;<:9:77:<;8;CB<<8554324544777656873335888=>>@AB<;;:888:;<;6588873aa^[]38:=?CB@A<5ffijlm77535675ge4433355343364bb245237;;;<876521c_aa`aa`][[_`19<>CD;7<@:;>:7=:9;8898765666421]VST]26<9884bYTTQNVTRRQZ\Z^]^][^][^YX\[Z\]ZV\134556673^UW[\__]ac__``adcaaa113465gc`_bcaaace^V]dfec_XVY\^ac__\]da]_ba^^1246;>=8531`[RRTSTTVPMMFINONRWXTQLLLOPQRSPLOMKSRKHHMOQQRMIIKHIGEDFIIILLPPOMIFHNGCFNTOSWRRPPPNMMMQOFACILJLNLHHD;=7=A8G:CO`ikj9>FFHJONFFNMNQT^hd^ZVI?@DKLKMJOOD=gbAEDGEFLPPIKNEDF=:ie9BSUMCEHLLLJMK;=IRK?HQ\fXSVVTLEHRSKC@a^j;g:ACJFJLFGOPPWMFOTOTZ\WNFKH?C9e@DEFGIKKFEBEIE=;B>\]8>?DHPVYLA?>FNOQRJGFKSRTNFIKMEHOLILMGBDA?=GRRNIINTVTTTX\TIGIJMU`\VOX`XSjfQF;HLPPNME=ALPEQQHJBIPKTRKINPMPRTQFEIBAB@CCA@FKFIJIIP[\USUVRMJNJAELJKMHFGFGMORUOORQSWUOOOLJLNLKLLMOPLMLJGACMTTXZZ_\PMKNTQOJFLLJKMHBEJQQMNGB@<@B=:629GIGIMIJIGN@Z^cf]]5:1V?IJPOE7o;i87kiaRETEIONOQGHO\GDAINMLKMU[ba\gnh\RYY]YPPUKIKIKGMX]]4]S==A>BIENPHDIEBB=@DEGFHIJLJHJKJMMKHKTUUW^[XVSTUVVW\^\]^]]]^\]Z[ZYZVTWWXQJMT[_abeffdgeghffc]YYVWUVVTQTW[YWWWYWWVXX[YY\_b_[^ed__afdZWVY^`]Z]ZZZYZ_]\YSUVXYZ[VY]][_de\`ifbdonmjica]jpmkgd^_kokn:=;;96Y]2\ZL^c7P8K^GI`gisEDBDLKGEFQSGDACFBtEDCszLQKPKvrtEGMMDujmyy{xpxnyCDn_c`d`ahZ_RCQ\[ZZ\oAHIC|soqcq{s~ABA@|yCBDWVEDJFFFHLHslw{uj`idcejgh~rYcfhzs^WZfe|GugR]xwhNTqpJMs^g`]u<<<8=JKOMRUX`_`eb[SJHJGVWOLPTQSQOOI;:i7>AA<9=:9679<;\^;aeJONONTNV^\RPTFJR]b4eXc]URN@AKHFJIDG=9;\<<5_ZNP69SaLU58;;<96:>93bejhadc3358==;<;99678::8:;643f:?>??677644647:2a2`b34763debb_b4464edeebfca^\YYUSRV\^`VSY[b3ca`df36<-,-00../-..///--...,)*-/-**,-,,-.-/10.+)*)'')*-+)('&(''(('')*()-+))**&()$$&&$ "!  6!!!""$#  !!'($()%!""&(()***),*')&(**)+,)*'&'%'***+++,,+)(++*..--.1110/*&..-.+)'*++-.-.///./--.../...,+,,./10-,+,,,.E.1.-.-._..,))//0034//-,#-,,,+,-.*)*,,$&')--*))(&*)'&&,-*+,--,..-.+*+**+,,())&'**+**,-**+-/0/..-.-,,.-,,,-.,(+.0/-+))*,,-.,,*Q*.,*+,,*)%$! ! !$$$'%'-,-/10,)&((*)*+,*()(&,,(''++**)&$$%#$#$#"#%%&&&%#"&! "&)%)+'('&&%$%%(%  "$#$$#""  !(0663#"##&&!!&&%')-31-*(# !%%$$!&(#!84""!#"!$'&"%'!"%54!)*& !"%#$$%'$($"'-1+'())%!!()&!!55:5! $"$%""&&$*'"&'#&)*($!%" 0! !"$$!# !$(*!%*+$"&'')%"!$'&(#!$%!$'%$%&$ !! $++'!!%**()(+-)$%&%j%)/+)$&)$!))$# &''(')(##),$,*%'"%'&)(&&'&%()*)%&'$#!!" "#!$#!!%++)()*(%#%""%$%'##$#$')*+''(''*)%%%###$$%'%&&$#!',++,,--''%&*)'%#%%$$'$!#%*)%$" "$"$($$!!*,/1.-'""%&!7243.'* "'%$& #* $(&%''*-11.253.(,+-+%'*%A#%#$ #)+'*& !&!&(#!$"  "#$$%%%''&''&('%$%+++-1.,*())*++./-./0//-.--.,+,,-*%(,/134443232466620./-/.00-+-02/.00/-.-.-///001/.032/01650//045202/0/./411/++,../0,0221366027445<::;9541:>:96634;<::" ''%% ))$+7)(557==!#"3*!()'%%(),12/*+())*.01.*,,./..-.+.773222357<<76778643235217<:675444320/531234543330/.-.1223003646:;<<;:ACB?=@@@B@CEE@=<;:;;:;:63477;:;=8798999:99:<:76668=?2.765412725310147546867=?:877756>BE@AEGHFFFCFOOb:pgrqi_dhgb[[X\[{XVNJZ2WI>;=<9:89;=($51;EFA=<@GEA=<8<<:9AGGHFBA:;<<>==9:<;:6448;:7:;=?=<<<@?>::8=>=<<=<9830268>E@><=?;858?@???>?><=<;;=;@IGGFLMNOL@<=ELEDHRNTQE<71/*KM-0^40/.53338APRRTPD=>=DB>?@788:;5680-($$.4:979=>BEDHKF@@=:77588<>ECBEEBFGEFCDE@?GE@>ACC<7?9/27<@=988875;<=78;74'$!$/4568;5,,60.,&,1.V,36462579BECB?81/011/0..-.&$#$&+/?32101563M@:8:;=>@?>:987830445:;833:;0-/*+265560/58:78897;?@;42458CB=?:61///3212;<77<>;73454676853121.)# #$#(.342/143+#&-/-'& ?&&'+-,*&"()*)$'#,18=;;;:8:>;;;<:93311)G2;:AB>933654755.//,,)0/+)D:39?)+I-*,(0/)5-')&'!)29BMOMPE50!%$22@>0":A(04-0,53.89669BDCEH@<=9311+L)0((.80N1564783-*((*4/,/*PNKMEE+0+OHN./NOQPMQNPLHEBAC@7@M,K:67<:97:?F%(MB<9=;4#!'/1`/7(*&!(,%%&(.(+,/%)#C#""''$$%-.%#!"$!:A@##"D:>),(,)EC?==$%)*J%F;68@@A?;@8?B$$DD:3767238/4+ +2/(%'6"&&$?:;<2D""!!?="!!.-""&###%(%ED<9?EF@=8/4.--1/0D<.941=C0/243?&>7+0B@6).:3$(:071-:%:"'D5224<:3/17:>724--106:8450-($&'()'8/2.+*11)668;;HC<423.9?BC?99;:=755220-,+*(&),,-*(##+++-6)*<;;80"!/-**(),11/-&)O,63CB)1(-;MAB/4>..3/LG*3*?6=3/&0110/-(;:11@G:A;C%%;93D7>%#<'?;",937;<911?CD>AA8%.385+D@B@<7401/ ==?:63.32.,,**'(+++'))�,).**0.-.,1.,0.)###%%$  '""$'&)*),+,/,(&"!"()$$%'%&%$$"2-/23#&%&$&#(-+&$'!%*,.%,*''%" "" /)*(!&0"+/.')'( ".033./-,,+,,,+,*,. .110520/.++)''*,..*'(',-++./׀끅逈逆~~ˀ~~}~}|~   ؀~~ ý¼ùǸǶývǼǿþ̯ĻĶǹøŶµdz̽ɸ½îž⃏ꍘᾠſ€„ַ܀Ϸɽ¹¼¾聀ꃈ舟Ȁ˾Ǻȿþſ¼ǿŽˀ¿þϼíοƿ¹瞗ʡҽ¼Ŀ¿Ͷļϼۋ⒴ϸ򋒉¿Ʊʺ䁙𓡧ׅ΀˼ރɽۆˏҭݨͶ΃ꈓѱ꯱ɩ뽠慌􄊖Ž€̴ηӸȼ¶˸ȲĿɾƽۿك̦̽Ǚӭߧݍã爁ꈂꈀ큋î̺׌¾ǵʵֻྵûܕȿĸǺ˰ψ򀐗̦𚾪񐙢򆅃975dgdcb_`a5;?<875bee__cbeffccb^^^]\ZZ__^^^]\\_c`YVV[`_YUUYYUUWRMQTSRQOMIJRSTUSRSWVPHBA@>=:>BCADFA?B@ACA<:9<>>=>@HOOMHE?;CHDJeg\_`_[c_XTUUXZcb`^]d6___]\ZRQKX[URKFGS\^``a__b37655676c_de`[]`^VU[^__]WW^e5c\\`\YUQ]fe`]WTX[/bcfgc`cg5f]Z_][XT[cda^\\aefgj5553bbc`^]___bi966:;;:9;?=?>:9866569;>@@>B?==<<86:;::?CDDCA@AA=;;<=<=<;76643eccbce23887:<><84c__^_efd349;778;DGEB>;::;<<=>=<98;<;;:9:;<;;=@@97976433457lhmmefgl645433325420_a33453489989>=<=;:9:;867;;85685575i557689hba`a_`a_^ag59fccebb27>:7641121355337=?CA<:8774#2dac``ca`_``003;;=><::??:;A<=<=9:;88:998678631\WQP]<@?@@=<;:=75446:>;<:87321WTTNNSNJMJPSWYX\\ZZYXXX[[VWXWV\__^^^a35=85320^]`e7l`]^\[a59657;:996gc___ab34gf[OXdgeea\Z]hlfoe]YW[]ZZ_`[^b1146<<620ZSSUYWVSQPNNKCJJMPNLPQPIJNOLMNQOKKFJMB?=;?A@FHGHHJHGHHIJGHNOMQPMLKLKOMLMQQMQXRQMONKNPJLNQNNMMMIILJD?9<;9:9;?@BDB<8AFLINJFEELRTRWV\faTFKGCDEFKNJABGJF?;EEHJBCGIIOVUDDPH?9IKNKNNKLHLKHNNIDMH@KSSMDQRMDDD:86;HPRUMKMJJOPOWTLKNNR]]ULHLGCKHHGGECFFEDFE::A>;FND;7;@BHHMQVXRPLAFIHJKIJKLP]\WZ[XRQRQNIDHKNSHC<>KF@DGNPHIMSVTJO]\WY5<7\X\S3;8WPDJLE><@@?>?FMSOHGKSY_d[UV\Z[[WPUXTSVOMFB@8?FGCHJJNNNIIJMOONKOPSSWSROEGKLIMMNMMQSSQQROQMPOIEGLJJLLNOMJIDBMUTTWW^__b_YRMKGHIMMDB<7>EHNPMLG@<;??;:<=6LM8CEFDELQONUWRXYO@4@KNPNNSV[[VY^_YQYXUTVTSRSQMQN_`YYZJE@TD;FILROHD@ACCJFGIJKH>?BIQROUX_ejhXV\\\VTPQU\[\_ffbciea^^c^]ZVTPTTT\hkaZ[^ZZ^\`^[\`fff`\YWUWVUSQVXUTUWURVXYXXZ[_egfhmqollid]YVVSRWWYYVWY[`a\ZZYVTUVXYSTX[]`cc_^eddfomgjppl_cuoojfg`djjl8=<8hf`a99bJTZ43MBfT_cXg<=:=EC>DF?A:a=IKHDRPM^f]STOH@GJNQWTPTUVWY[\_T]^_YVWVUW`dddbaba^]\W[WUYgf`[VTVWWVUQX[WV\][^]\]_\\YW[^[\YTQVZ^gkqnkjknlkhilmmnprqqonlhgeehicXPO[\_cda`^]Z[^cb_ZY^[W\_ZWZ_Z[YVUTU][XVSSQTXWWX_bfheX\\^ckovzq{~}~KSRzwnfgkibflmmlinZ_s{~qgl~wnvrqzytpmhdb_ZOYkpssrqprlihdeedbdZ\_bdjmmhdbks~rnopjntk`]efehmnnmednrkmhjhjddgjpyzucbjndkp~qh`TSWWQLPX[QK[VLLOV_ahr}vlh\WY\`_XYTNLSORa_hnh__`^[VUTY_bhkjmjfa][\^c_]euffgenplrplpvsnksrmnvvtrrtjfjfdc_\Z^\bdgepvzshbdgZAGNRQW[\[UB:QJixRHACBDNKHSUUXXWY[\be_b]WQJILPSRPTVVRJFFQ_br`ZWW[Y[]_e`Ybhfefga[[]ahlrxyumjllkmji{|tvrosrnrqoj`\SSWUX\ZZZa`_WFJEHRV\gkiea\_elr{xbSLN`hneZY[[TWXURONT_bfnumf`\Z_b`b_\[`\YTMFDEBCG5JFKNMIFKU\Y[aiih_N7WDEGPSSRLLORUTTXME@B97BCDFM?Sbefdjidgjfge`WXTOMT]\ahjhYUY`_Z^a[TUQPTPRLre]a[IFVKJIPLNMIIHnQ}PcpJMJwifct}Slk[NlxEW_\^dn[Waffagjopw|ujkg]\UKOP{I[]V]^\lq]QIGJUdVPRJM^Y|yNZY|wrkjztc~KNmhsxogdzyopunsqvzr9;@:F==N$Ka)5CLOtak`wsmngddHE]XC=honjvwrwFLC?tsILFJQKIHDDFGIFzsxkxjd\ZdjZ?GOgq[HqvUYRMNbseQYlt|`HmtDHq^amxr<@IAt}pb[Y\_ggPFU]ccSbSPfYWdp~tpf`bhe]UQJEGO[llZ\RPOSNWae`}zxh]d\_}xxnfc]add[ZY[X[VPMLKJNRQNDJTY__dMGVZ^ipcVRSVTTRNPGIxC}kglnkNbRM~xve{KepGaoSBMPBgOmiOPcX^_]VX`eaqo{KH|iewfuGD|uzDCC}uzjyhlvw}~mdab_vH@ko@Hu_eu|neU^mrw@yIU]b\G}ysz{i\VX[\W^BFFIBELHB?=EKHQUQUbba`KJPLZh[_WUWVTPQRB@:58CDDCA@@B<88:fZW?Q\TM?GRVLQSOEJEHLPZZc2b]YTHD>JGFHLEB9<8S.QWei97;>9:e7@@IR;7?22eRBFOBIEc789<;W0;;73a^ddcb`6435=<7977845:7:88;7448CE<::358666972965e\_`c564g)c`cdfee4fdggbchda`YYZXQPVXYWZ\WO[f3b`cb25 ,-/./--,*+,,./--.,-/--...,,.../.-,,-0,)()-0/+((*+((*)'')*(('&$"&())(&')*'#  ! # "! !#!  !%*'%"  # *-(((&#&'&#%%')/.*+(*+())('#$"')'a%#"!'*()++)(*+*--+)(,+&$%'(**'&)--)-210+&.2/-,*((+-+.0.,,-.)*011-(,0/--,,-..12.,-,+5,-2>,,.-..-+,,+-./ +1/00,-/1*+71/..--,-,+*,.11/../ D,+-,,.-.,+,#%&&,V())'&)&#%#&'(**--,-,+++,-**+)(,.,+***()+./*)*,-..-+-*0/+%*010/-*)*24040,*(++))+-*+-%!  "#!'(*,+)*+*%#%&&((**'($&("###$$!%%#$$%$$$%&($$'(&''&%%&&(''()(')+'(%&&$%'#$$%$%%&%"!$#!#$#(%"!!&))'++-30) #"!" $&#"$"#"$'!"$##'*+!!)%!!#*'#$$$'%##"%%$%%!&$ %(($'(% "#%''($$%#$'%%,,'&'&(--(%"# %$%%%#"$$#!#! " !%%&'&&%!"$"#$&/,*,-(&%$%%" #$'+&##"#(&#$&)+*&)0-*+%#% ''#%'" #!!"&*'$$%)+./+*,-))+*',0,*,((#! #!#"!%%%!!"%&''&'''(*((&!#&&%''('')*))((%'%&&# !$$#$$%&&$$!!(-+*++.../-,'$%"$$%&!!$&))&&$  "$$!#%$ !""*&%%%).2!$#!!! !$%!"#!!%('%'(!$% 1&'(('(*-.*+./,&+*))+)()('$%"*)&%'"!, #%&'&"#$$"!&"#$$%$ !%**'+-28:8-,///+($&*/..044005210020.-,*(***/772/12/.2001014868310//0.-+*./.-//-),.-,,./144569:777652/..,,///0./0134101{1.--.01--/13556425447=<69;<;24@<;77:46:99 30*)($&!(;046,6 %#$&!# 2 &''#,*(482,-+&!')+-0.,/.-.0136.2110.//.079885643140.2<<751./221/-22..234765663421454430-037=?A<<;>@?><<>=>>?@@AAA@<;:;<=81+)126::9863146999657625742364754223975421115444:<=><34555;@EMHCGKMMHKKQ.ZW`jm9mnkab3_OJJNNHFIFMVWG;9;?>8<@?=;9;02BFGA<>IULIQRQPNPU_]UKOG@FBAFECA?<85/*$+;ADFEDCC?==<===<=4348;?@A?<;AFMLA?AA=?E>57>@@CEDBB>=DEAA?CDF?>@BEJGJNQE89?A;AEPUPMC?912551.\4993T-84//17<=AJRRHA989;?;8:5/[171197>FB9::76466:=@EEBEB><99:=A;9?H>?BAHHBFD@CHFCAEEBFQPMIHJ?<@>ASS[A;9:<???86899ADHKHD>@ACCDCEOLEFCBHEBDDB?76/162374339982)+LL)+QEO0/9>A>=<8AC?;66799676567331,&#" "%)'*++('*36411776,#-$"$+,,,(((),*)+"-6888<;<<=:<>;;97241+*/569>?>40376269300.,1./*LM>8352*M(2+++0,F+,)(%5(G/7=F(*(>654:>+=<0(A7@$/4237?2.5896:;>?DIC:;:340*N--D*57LM3553=A4,''(1:0,/*QOJEJ,73PEG154POMKNSRNKGE?=FB6F+.F:9?A<75CGDJJD>?C>B?AOFB:#!')80:097561.,(&')-,'#*+-(&$(&&%$%L28*%#$'*#@? """B#%&(*)#"B@@""$(/,E<8;CBA@>>8CFA>AB:679658;25*(,,)!%"!$5;:8??<>&)#!;9$&"&*%$$"##$'$A@3'8IA*1-()/BD=5(/:>B0#99"#@8215=7& ;B<4/.2199+$-164)1&)6--4;D??965874/,% %-8924-,+-*07:3ICBI837/1C@HA;6413561110.1.+*))(,,,+%',.436,(12575,$(+--.,+.MO*)LB*L?@D@(%?64?6>&#@?@G&$#A=A:@8+5>>AB:5133=&"7:!%<05?B93+/7<="?E'1895%@D@BD82/002+.#<:;6D70/+*-()*)+**'%+(#%)$)"&///--+)(,.-'""%#$  # $$!"&#'(y%'.-,-##(#)1+.('('&$%% !1-+%,)&!'("''%!"#$)(*+(('!!! !"+*(///"*5)#! %a-,//./+! .(**,-+*-.0/.0-12125200+***(&)+*()+)#'.,*,*ƀ򀄁~~ƀ€~Ҁ ~~}}~}~怃~ ûŽꁈԁ󃈉򁉔̼¶مȼ»ȯþƼȻ񐩪ſž̹ƣᳳƽùĻ￞ĿнӀëľҽбπÿ÷Ͳ􇐑ļļſºǻûηՀÿżǿŵźƽ̧󍫢þſº·咮׽獇ǽ憖Ķ郏ゐȾ䋊ـ˹ځ∢ՀŻα񆢥įʸ˷콸̹ځ˵끍⿺˸րȯǿϻϿǼñܽѸ򏵱׷ô⅂䌏ӻӵļĵѷɼ²ij¯ѳ­́䛟̼⣁2479<;743efggc_\\[f9;87876gaabaaddeb`aaa]ba[Z][WUVYYY`e`]\^`_]XUSWXVYZVSWWTOIJHEEGNRPLLNQRQLIEDFB==@BBCD?@><=>><:<@@<>?;:BJJB>:;:;:;<<>=BA@@ADDC@=><<<>><87754edded6:;8:>DGC?8b3bZZ__`a466889>BDB@@>===@AA@?><:88:F=<9899879866954542212dcab`^_beeg31473456788759:8678:999:8:;<;9:;:;:^[.7:99658:99<@>:67;=9ha^^abc]\__\\]`dihf`1563_14676775538:4dcc`]\Z]`0025:>;?DABC9289;;;>><:;:;;;99522786531TQR2<@@??><;9:96668<=>678::7543abWSQOPOLPRUVX\[ZYYXY[]_ZY[[`aa[ZZX^_^2557852012465eea]a6:7ie6::9nfa^^]cf4gdd_\aba\_ebba_][b_WWZY[\\^`YX\^^24:?5\YVUUX[XUNJHOQOIHFOPNKLPOMOQKHEIOMKGHKF@A?ib:ADADIKIIFFIJKLLFFHJMJIDFKRQPNKKJKLMKKLONOMKJIHJKIKMHDEGGEDFHED@@DBBEEACGJLIJIJJLMSTQOKJMFE@EE>>;>DFB?AEHIHJJGJJ??>ACFGDB=??AA@@@BHLDEKSZTTWPJGKMMOTYUQHFGJJHCENL@:KLGRSNLQSQPOKKILA9?:;h7>CDEA=8?BNSUYX`h7ja]cadjbZQPRQLMNJHGFEIGBDHILMJJKGIRWXWUTTUSQRY[WSUTPRPMKKOQONPSWWTPJEBEEEIKKPOJHFAFKQKR\WZ\]aeb\QIENSNH=>CGIJIFCGIIB?@BCCDILRSPOJEBBDCD?>=:8[U[`35;GMQRCa\emlgSOE8CDFJHMRSQNPTV[XQH<>DPRRVXUVVVY[[[Z]WXVVUVVWTOS^`XTQOH@FOKJJMPONOMGIMPPIIKFILIICBIGEMOQ[]binjZXYRKRSOPWVOWe88k8=Ekd_bhgcWMPX^_hjmld]eidaea`fe`dge__[XXUUVXVVUW]\YV[[XZXYXZVYev@??>9h4b44bODKRUJYN^`_]q?ABELLIIJA;>:7=HWNOSNU[YXXUKEEGKLSTTTVWZ___a[_fhc]XXUKOWZ^`]`^\WUTVUT\ghc]ZXTSTSVY^[^[Y]]_`]_a_^^\\_`d]^ZSW]ciwidefihjjhjlnoqrrpkjigiijknje`^_c_dc_]]a]YZXZZYWWWVW[__ZTQRSSROMQWTQRRSRU]\\dihimihjklpty|wtxQSQTVTSQ|}qqxlw}yurtuutyyuwvvz|~xkw|uv{ymaUNSny|zunfhnnmkklilmpsppngdfffhowzwpqustruuljtxpmnqttuxw|vtotuleacb`djjmkgbgxwpimytrwqcYOKOQPTRTY[UMNWRHEQTX[b]V^`^XSQSPTKSVZ^ZWY]`adea^^ZRZadb_]dcfha^[`ec_egd^dmoqw~~}|xnknjkjjrkb^[ZZcd`cvjeghjiif``gcglib[c^P7>FACFA66NGa__xF`ZPSRPPPUQMUXTQMRPYQRXVURHDEKUVZ_a_[SKIahkpb\YY``^\]]ZZ`acddeb_^agnpkolfdiiifhjryojjj^^dijjfdgja^YOSUSOV[][UQMCGGNXY[eimlg`ZYXU_fXSYZCrrcYVUhd[V[[TRTV]]gljjihee\]dmhc_\WUVLQYSJIOQLHBCFGQ^a]_`_^\^Y[YVLDFHNSTQOQVTRNNLF@S`cajnmkgehihhfab]\URZRXack]_YV^ce]`[YRVVUSRJvhabXIG^KJIGIEGd\JHBx=DQ]akDFG|Mgm^SGngw?Za]dm]RUcif]dimp{~ogaRSQLQIRaU~LYaZ_sl[TIMKO\UMPKOV\S|NXV}ysmioyST}pqrtnjHspvvood|Nt8:>W9)'V0PsNMT{_p|tjtrphkha]Y]RTdb^b\R`5fdECFDCCC\pSFGHFD}BEBECDJLMMPOI{@?{{@HKMr{{yutqp|zv}{odac\W]ci]OVed`\\`@D??@E}iktw{u}DDyo@QRGMQNNHDCBEF}|wkxufel\GZeNPXmemgbzbc]SMP_vzrbZ_[Xlpp`Wf@@|eQ]qj:Dztf\fqvbZY\cg]MPfi[bdhglgdcnge\VgkchXQNLENcdiaZZSQQUT^eUz{olqrcYez{vekfZadc^VU[[\XONLDENRVQVUW_`\YXNKUXZdla]YTSTSLKqxmTnrzqi|pbnygxa^WtoL^\MJJPYLKut[]^S]Y[\RXbj{Dt|rtIGutshv@|~~ppxLOLnqjlnUgy|{|vnea`txBBwwvmdam{wpj]_nxuzLRZSBx|ux|k_\becMs@tlmnfpnfcb]XVUTONLKOPX[SFKT]JLV\_dj_VSOYgSHFIKWMDIB@:;HONNHKIEHGGO[ZUTLKKMTZ\`\]e^YNQLHCB6EODLKGBECA99@::>JBKKL5;QQORPLMGNEQTX]a44`\UIG@DIIPQFB=6jS-DhHGDJ>>><9?FNQR:<=73hTDIOC[@m4979<><9;:85ehf`cc27721788865632:8:;78876##! <51//./-..023332246211///.-./011-(+6521254357:77::448<86889::98.')"&$4,2432>"#"$(('''! %0)+-)/3211.%$%')*-././.15334147851//-'*034424331/.0..5<=9651.///125441155675676554468:674/269=F<9:;=<==;=>>?ABDB???===>>@:40./45:9753312435532221148851/1210/-253001202876;>=?B?<>>>@EFGFCFLRMOUVXUNKP[36577542RHHQQIAAKOPNE>GNIGEIHHFEIKJDBDDDGOLGHKO[^YQMS\^bg[I=GMRTOHDEGF<0($(=HJJG?;>BA@?ACACCCEBA@<;<>==AGHD@AFCDCDD@?EIECCEGFGJIMHHDHID@<>=;>A@CA=9=8422/4^/4568457:>ABB>;<93;@BA=;??@A;95;>=9<><9?GGGKNPOLJCAB>BADKF?=:68AA=AaTIAAADCDA;:<:>@?97<6)  '$-/3?(93+--...1-,23/,*-,613631.'%%*2369:62*#$68=?7656;:7578768:DFBEB>=?@A?@BHIC@@@99=>@A@>?@::4,/21.45761/,O*,+S1535>@A@>745208:1/44%GA8423A:5166221475>??<<55:A=:65210*-1-'&**'#!"!(253443100./.,&#%&*.,(%&))($" +474;>=<;;==<<<79461/5-39:B674169:5742.0101/*LJOB:882((9,++*+''<6)&"> $)/3<'&&EAHHF*:>3,%95@!1419>4,.7;949;=?HQJ>96+-.+N/*K2;1D,4825C=30(+)+51*.+QRLP/261RHN/43RRLJLRQJJF@=@IKCH11F>??@;9HL&HIJA?BB>?6F-PF= %6`8;=;6<97474/.)*"")((+& (+/$C#%$###HN5A,$%%%$A"" #!"%&((+,(B@!!AA!&(*IDD7@D@A?@?7 )*"&)('#!"!F%%A?@@6?<237-$)&42;9/DE354/**1?<:3.210;842-5! @4,191#>=506=@20.0581&'67.14539745;892/985:0,((%229521,+,//7:/FB4-6BC@8<705552-,//30*+)$%+,0-1/-252/1,+11-36/...,./)*AD($B><;8?#@AE=;?*+*9:956+4?A?@=7533??#$>>=:737AF<98./:>;AK,14-#AC?@B832554$>">;<=7=;6430--++('&&(&)-)"$*/$$+../3-*)%+5(#""!*% "!&''$%$""!!&+*&($%$%(++,*+1+)#$  &##" %"#%''&'%$% & ''(*+*)% !"!%' 5*!1#! $$&'6(!!! '031-..!+)+*+,.-/0/..4232/.,**+**)'(&'*..()').,*ŀ~؀À~~}~~~~}~~ ƹ򂍍ʹ·ƻۇ󁅋ㆧ運Ƕǿĸ섘Ѻؿ톋ǿ󂀊Ǻø˸ϳɿŸúٸ⳪ŷǻü½䎃ճ݀дƲƾǹӀɽϨ;ļ¼ǼþǯǾøžƻƱ¹ĴɹIJоƽ畭ǾƯ͊ݍ㞩ʿɺ煁؀ꌉъՇЏȷ߁ƀüɸʂ􀂉ش̬ƳDzջηҀȿĩŻȷº˿¿¹ɵĭޟсƪι΅󅒅僄삌ĵƽ²϶Ⱦ¸ŵªоǫķř򻋋񀅆bc3589<845444gedf_WYdg78965b_]^bdaa^`ccefkm^[]ZVRUba`[^a^]_a\UUVVVWZZXVRTVZWOMKLPMKKMMIFDDEIKJIHGFB???BKIEE?tsjglo;?=8m9:8:EC;77,:?IOHDNR_jla[PNLJJGDGQU^ged]b]W[][UOMMOSUWVTUTSRW\d22ea[Z\\ZX]_`]^bba\\_c]WSVZ][TZ_db\XTSTUYYVVYZY_b_ZVUYZ[VX_cda_^]^bfhei89:88:;;>==:835357422caa4566458:=;:@BB>>BAAA?AA<:879977654334349879;>=964`][VWYY\b33b1225677667547988778657666<;87:;88/N7;79:9<>95689757::6246hccb`bcc`^^\X\a568854755g58984574456;>>=:58<<=?<5gk6ged_b540149>>=?9=;;;855879A@>>:3477::651`V_aih^YYZ[\^]\\\]\\[ZZXZ[Z__[UWXW\[Z]c`e5950/]ageaafdc6:84ie`_b`[XY]ccefedcb`cfg^]bbb`ba]\^[WYXY]_]be[UWU]26:7_YYWVYZZQOMMQNNJDKLMNNMMKMMMJDAKNKJKNONJHIEBGHDEGEE=s9AHIIHFEFEFHGJKHEFFIHBB@BHMRNHGKKPNKNPLIGJKFGJEHKLOTPHBA@@EFIIKMNMKILPLSSTWNMJDBDFMJJIE@BGGDEACCCFMNTUOLJGEA@=<<6\d=79<559:BLWZ\O;afdzxy{ywvvqjfX\eb`\]b`^34iuACB??AEHP`dMGHIG@wGFCA~@EHKPLB~~?@{t|EF~xBElCHxsrlo~Btre_[_[XXae\VacdacaX<<>>tCBihxAAFss>@?EOSLY]OGCAAD|}xojkhkscP[\ILgobhuk[\akqgXYgCB`JcdZ`tB;Rv{mdH^i:;^VS[i~NYkdc_miZXmb__hbgpj`b_[TLifhighTSNQehg`edXVX_cYTMwxxydc]eba_Ziolccle_]^[YWVNFEEHESQSVX]c_[XUELfWU]kgYXVSRPErIX^_MqlesDiybppqkWYXzLTTJzDQjjivnWMVUXQ]e_afWfE@snq|HEGCxpuppsvzd^~JSGwovFB~AgmelqfzD?rjqkvezCKHwmsx|IPSE{mlj^UiqkSE>mfqphaachidXZZXTONOSPRd\GHSXPKR\^f8cdZPW[NJFLNKNIOG;=?FC?LSQKKKIFITXPKCFC?MNLRNRZ]cYRMPJHx66ZL]7K@KhK7558:;=?;;:53eeacba75b`28:69876216::658:79755777425556=:448:5adaa^25565jidfieagikljeb_]\\`][ZVXSPUW]`f_TWaebe*,/./2,'(-/.+*+.0///00/0/44-+,+)&*1//+.0.,..,))()()-.,*((*-,'%%#&&%%&&%#"!!#&&$#!"  &'"#!=;71567 ""%""$(-/,+##!"##""%%(---)-,')++'%$$$%&'&%%&&&%$&(,-+''))'&)**))*,,**+-,))+,--*.230-+)'))**)*+++./-*)*+,,+,121/.-+,,.102'//# <,,---.--*,++)*+**-,830/--010.-,,*,.@-.///.,-'%*)(/264/*+,+,.//..-,,**+*-+*'()),*)*,**(*/0-.0000.++.-+***../0/-.//011,+.-,+-,*+-+*++*+,+-1,())-)$$""#$$ ! "#$')*))'%#! ),*)),-,)&(&$%&$$!@ "&&&%$#%$%'%&"!#&+($"$$'&#%'$ ## "!%%&'%!!!!#"$$&&&$$$%'%***+%%$"! $# "#$"##!"" "#21.2"! !" ('$%',/.%$ $%#!"&$"!"%)('  !#!! 65#&&"#%(-&#$ !%&!$&$&#%'$%'2-..-4 !"%#" #'(+-*&(*-,'$).+))$ !'$$)&*+.#%)'%)$!*($#$(.,%!"#"&,0/-,,,*)%)1+&#!&$ &($'%##%)*))+-.+'-0//1*)+;0%%%$%#3!!"""#%((*,*++&%()+/,+.52+,(*,)$$'&"$(*()%!""! "%%$''%%$##"##(+()')-.,.-'!"# !$$(&&'%#%&%!# !!!"(),-'%$"!./ $)*+$),28"#$'($!"%'&%&)((' '((,+-.'(,+,-+(,000-*(*,**,+2$ $*))"! !%*++-,,./.+*(&'('&'('%%$$&'&)+-..-**(%'*)++-/-+/0/47442/3302115638956742:<9:;<521248;41,++---++,-/0/,//-///020-05@?@?DD@@><;:775669:984/25434;=>;>:1)*++-1441210.279;?>@A?;;?BDC=<@CDHKMSRMJLONT//T-1/XZWMQWVNSVUURPMIFKPOT[Y`aZUZNHMSVLDD?BIOONPSMDA?=>GP[OIKNUSONQNNMKB;53>KJC@B=8:?AAABAC@BMCA=;>BDHDEAFMINKHJLQRMKGHFBIOOMOJGKNIE@BC=8878=;78<9COG@>MNA7.+(*/.).2/3218;984`_ac`_650W`_2438>8356951/0148778<><;;?A@A?55:>CA;626934:@DB@GD@FIEHF@HB>>BECADFCEA=@DD?@>?E@=>A>;67;:;<::8793&!(%11-'01<*-5:<>?@:683/375884762471/-/0++&! -.7=:7:;<><5A=;;778999875//35=AFC::<:>?>CBABFG?<=CEBFKB956<=?@A>::840110128740-0,*,QW0...189=EE40/-032235;>><=HBDG<425/640384488;=89BFHLOJ=73641.3:4*)*)++(%$$&+.18821/0352/-($#%&'%%$$$'&"!*189<;::><;7+F''+('&$+>'1.&'CJ/7=;0H4699--,3/)&-6B>59=?CLMF=81%.1**9-Q4:/,49>8@?80-(()-25,+SSSXb7;;/HBGT5?1LOHMQRKBDA?BEICAF/.H@?=@==BRSID<< !!DLPIA=?@@=75*++(('(*(&/A##"">!#$%)("A@!"B=@$(EA#$7$&DA?>;J8E3&0/,--06CB%/9342:90,8101636>84533-)867:;=/-)+489697--/5920*EGACF75087751<<<86<6411..//*&&%%%---026620--%(=0-/86.-.--,&LG-1;5+?>:?)8GE;@NJ?@B254J-0.+?'-8;=@8-'/-.+.4105+4%!::=C'%%$>7?::=?JE82E(.)?8>$#CBC!C?364;>6>#!<6;6B7@B"$$=6=CEDHJC>;9;eb8:>;9:;8:8:=A82355698ha]]bdf43449?A@7443653211222456 887:;;=<>;%=AB@>;;988776544259;8:=AGEA<323^Z\^b23238743653569:89974234b4578<>9769><;:89=@@<97645789756gbbdedd355455788769>976765643348>;7544566;8__bbd3224885337<;A><=;=<:868877867787513776564^1:<=>><:9:7667849<=:62ab^e457643b^3:=73_YWY]][[]^_]ZXWXXWVZZVXZZY\\Z[^U_^d222Z0224dfe3676cb`^[YWW\^]^`bbb``beff3ac`_^^_aa^]ZXY]^_2ca^ZUVX[`34ebZVUXXWTQNMMMHDFKOPNIGKJGGFHCEMQRUZWVTTSUUTNLJHINNHk]9CGGHGEFJEEGIA;inbg:98@DIJQTTNONOPLLMNSRSNPQSNHEOPJFACFEIIGKMOMIJGKJGEECDFBBADGPQJIILVO@<:FNORF=>FC:j7@@EMKKORNJLBDEEDAC>B@p9ACHGFJEGWSGINIFPTSTRNK>@B>FMPNI;9?HF@?ENPRVYYQPOLNRZ\XRIKMNSNMRUYQMTSJHOKBKUZ6cTWh6:@4eTFAD@CDCKLNORTUX]ZX]eaZ\ch5ia]VKCHNX[YXPOOJLMGDHQUVWXX]SOTWUNJCDJU`]]SNIAGB9=<=FKEDGHIF@DITWXW[\XTORUUX^c^`hcWUUNNPLKMGEIPTSRH@ABBBFGJNSQNPPOLHGHEHDEJMKMRQX_\TTD=DIHJKIID?<>A?;BA@DBFNLMOIHHE@=GFD>cLPj5;@2c57>HOQN\RPDQbBFDGHJPP=BB?HNPUUOMLSX[ZY^]ZVX[\ZYVSSRUY`ROSWUS]]V>FIMNOPPVPADFPSWNJONMNNLGMNMHDDFDDJKKLTWXY]d^Zailllkh^VVZ`afc_a_Y[WXcccjedjlic_]a_ZZ\Z[YVUV[`aab`decbdb`aYZ\^a\]]^^chfdbdiluonmkhihhkotrpqkgc\_invnmnkjghilmjemmhcchc`feaXQNJGNSSVYZZXZ^chhhe`^^`ckpswyx{KLLLONzmhfluoouwqt{y{~v|~usqnmvytiszt~|~{wtvytlii^[cjgiggifdhnstwx}x}xoihw|}~{ytw~z}|}y}zqkoqkc`bca^[W[[[\`^bjprg[XMNMHQRPPS[][\XSQPOV_hlkka_`b]XVWWQPVVQMR[]]_``_eencX[a^dc_hje_\`baemmfhffhhhebeielrkj]V^^]adjii``cf_UVbcehfca^cff[OLLJBM\RW[gqpstkidd[Zcihffchhfgc`UPOUVQSRUOD>Wc^c^cimefgmjca_^aa_\XLKRPMW[ddc\\_]YZ^`ceecimccljbflqhdaedcbcb]ZXTQRTSTQU^_XNMPLIINSSIL]c`UO_`MJRXfhbcdacnkklkfc^ZXY[_a[TW_`]]`bVZcv~}m[X]_[\jiUKINRWZbd\RR\eg`YWRTWWTSUTMIGEEFPNLRRSKHEA>=@@2:M[MR[fooikjjlebehb_aWXU[ZYlh^\[dd^]]YTVYT[YPRUOJLON~c[QNXVEEIOWWWPFGQPQLRP@V>aR^JHnERZdcSlpcnQ\TONLScppeUVdnrrkon`NIORQVXW^WW^bbonbZSNwBLU]SJPZVN}trI[Qyqqrvy|wxL{lnmsxx}ilxuuvw{Cm^P@HHOZ1X84b|~nbhj^ScbXV[VX`a3fhtABADA@IOOZZTLKMI~IHxquFGEDGApFAyumxBHxpDEqFLvsvqu{tlDGqgbWa\^ai`\``ZYfe]Eqr=?=Bofv@B@vst>MIDGRUVVQGCABC}ztgjnnigXHOM6CExopoojl?{qmcNrtciGH{HJGHIACpTSw^Vjzo_B|rkrlc][[cli[WZXTMUYYQQ``LIROIPPU\\hjm^YVSOMHMK?JKKI??ALK?FLOHJJOKHMRSNIIIBHQCECFFPTUSGZ\\BLIEGIGBED9FFGG@B=7IHMCJGEGJIFA@GOPQ[W]h5403_J@?KRPMIC=:6F50m:8;:9hXi7ANKJT>95`=P48hNNcT667:<>>;99:52ab`aab54a_V^798;:884348:446::7443466754568;;743685dddabab345iee4fdffbcji^]\Y\[_b_]]\VTTVXZ^^\WXa6+--,-./-*',.0,.-+.,,..,--332++*'"')+,././,++*('')*--+)*/+(**(&$"$&%%&)&#! "&''%#"" !""$'%!! 80! 62./!'""$#"%()&*"#$$%$"#&%'%$%&&$$&,%%&''(***++*()++*)()***()*(')++)++))'(,-//,+, .0352220,* +***,-.-,+,.143221015)*-,+.,+*,--f ,*+,-+/--./00...<*+--/J*--*-*- /,**-.--//0.,*)*))'**()+*(*+%+)+%.0/./.-*,-,--.//-./000.-,+***-,+,+*+,,,-+**()+-/0-'#"#$$"!  ""!!#''&%%%"$*++.2000100/,)(('&()&:5 &&%%&#$&#"$$3925 !!"!"! $&$"$%%#$($$$&%&#%'$#!"!#%%)*+&&%%'$$%%(()%&'+'$!'&#  ##!$$%$#%#$""!! "  !&'$#%&,)! $'')"##9 "'$$&(&#% !!   7 ##!$ ",)"#(%"'*()*(& #&'&$"!$%%''*&&'$%&+-+(!%&&*&&**,''+)#$)'")+-0')6 3)"" ""'&')()'*-,*,/,*-/0-,*)%"#&,+)*&()%&%""%)***+*.(')+(&&$&(+/--*)&!$"%!!#$%"!#),-+,.+(&')*,/0./41+,+&'(&%'$"$')(("!!!#""%(''(&'&$##!$"!#%%%('*/.**!#'&&'&&$  " "" #!#*))*&$$"#"!3(+8 /#'&"+%##0!#"#$%)( $&&)*&##(+-,+.-+)*,++**))(*+0'())'&+*'%&)(''&+'"&.2261)&#"'()*(P(''&&&'('()()()))+**+++('+*--/0/001112224100//347:979;86:=:99864324953/+,--++./00/20-023200.032111//-,/24532/110/++/..//./0/-,/1215630132156659988!:;99-"(('.4//79=;!!#,+&!!%'..0*(+)(()($()'%Q##%$%())*/0102620489:9971-.067:76751213:99=:;==;77897443343201478787:988:966235896O78:8889<=B>???>>>=?BDCCA;6526;?B==>>=:;;==;9>><89=98=<:40.*(.102444357<>??=978:;>ADEGHIONOSX-,+*,,QKJH@<:;=87;@;==>@<9=BEFFFJEJGA?=FIOQMQQQJHFJRPLDHPUPKKQVQKMONSRLEGKD=:;;;:9674569;?BCF?85---(/0-/29<;96444^Wd6_U]^`]`dg:@EIHG;9:<9557612882W[da05<;:<==>B?E<47:79:8?A<:;===@ED@DC@?==:8>C@HMIG;4<;9:=B@A::=@;55=;<=<;:7;<;4*&$%!)1,/3:??BC?=;:45;;9:;:974,,2.,38<>>::;:57;<>@??CC;;B@:>AD@=;==<;>=874101200/3:94./.,+,/22-0:<:2.;:++/2;<8:;89@=?==;;8523489402774476/4>JOIIKM=226734=9.*)+.0276-%&-4731/,.11///-('&#"!$ ""$ &',29==9<;<<87:<978030553=;444:95440/23/42-.1*'),,G84-,21''I*.333.)).--)(!#5/5'I):'/387-F:>5:,3-++(,5?=7-/8=>?=>=4)&*-.13QO3721465>>83/,D>#).5.(OQT`183+MFB@*4/NNMNLHD@@ADJED@AI,\E;>=?BCMUMIIH:=C@?@IK@DGFL -$#8KLMFDFFGF;5991)0.'&(%%((,1:##"$"!C&+*23/)(*(ECA&%>9;$$#"$"8A$"?=8>#)C=&$8%)F@=?<@B=9&&;73,1..182141,+1-)67 "D:4>"" ;9:)$!#*+.-(" ""DCB?=?=54762.#*05F85347.620/,*&$''(,*,/246@5/,'*020563/,,),)LD6+UA?M=.:*1C:>CEQL?>G63GL'(F8?-5:=>A0,")(100687;57B>8:8<>HIF#=<>5:<>?66@AB&K?ACB?!##@A<798<97!A;;6&;>35B#B#BA&&%'HJ)$$B:N10A5/9A<0#B>;>:621/3:70.0.-'+,-('11%$*&"'').-425,*((&#"&%$%%##$"#%!"!%$!#%&$##" ' ! !!&&'(,+,%"!"  ! ""!## ##! $&%*'(-)!#&$" "65(2%""(0+0#'-#,,+,+,,+*7+,,+,*+0-.--/0./43,--+.,-/-,,,('&&(+-+)%&,ǀǁ΀Ӏ +Ѐ    + +~~ Ȼüɼ¾ſW 텕¹êĻʽŹ·ƽѿƵ¸취ŷȻՀĪݶ½ŵĽ΀̿¸¹ͻǝ̀׺κ¶ͦĺɷ»ᾮ򗪭Ŀʾ׀ĮĶĿۀĿǿ¼˼̸ľۀ܏ɦ򛠤ެեĿֻż¿½傸ʿǰƥ􋢧㚭Ŧ̰􍋃󎒅ʀֺʣҵ狉݀ŀƺ۷Ϊ‚硶ʀıŹӷͳȴƲøҶàߏڇ€·膏߁႒ԿǮ̺Ĺҳºӹƾ󀀖⌕􅎈d`d_afcdhg3454gcag4d_^adacdb^\[abaa_ZZY[`_ac96d\ZRMOLMRWY\_`_ZWWVVYYXWSV^\XUSQOLIKOMLNSVRMIB?AEJLMJEC@7o=>=@@987.V159<9:=AFNe[WUUQNORRMMPQSTqSW]abg5554664344ecee_ddabe4696hdbb]VTUWWY]`][YVXY\`da]aa^YVUWYXWUSTX_b_ZWTTX[_cebej57<@?>>>=>DDE?;<<;<==>>=<<98:<:98B:<=:9797667643h43332d_YXXZ\ai69:<;57645L6542dfeb`_hkji66888:<99;?>=>AA:9987654436;967:@EF@73466322113554332433e244456 +5ea`25569>@<<;;;=<997;@@97646975765434454 54543222333457753469=<:89424574^Z[_eh458;:763799<;8><9:<<@<>?@?==;98997886577550Z^]^_2c\4658;:32672344547643][[^adb]]b245136861[^_a\WWWY\ZZYYYXTVYb\V[[YWVVXYVWWSVV[_`4\\0c35423dYVY[XXZZ^`[Y]a^^\_c3eecchf`\^```a`\ZX]_a45f`\XY^_^`ccb\UVTRPNMMMLIHHIJMQOLDILMNMHHSaaYfto_XURZfjdZXUTQYYMCHIFFHFBLMOSOLFE@;m9@DHJKHFE?DF7AIJCEGMS\ee_XUQNKIJLKKECFILMLPRSSRTUW\[VSPV[ZTPJA@BCHIHJLNHJSU[]^YONKLNNPPQURKHECHJJIFIBA;fgoB?BJFCHPOKNG;@GRWWSTWTSRYZW[\Z\_\YTZWQHMPMIFFGLRQMFFHHJMMIFINPSQRNFIHIC?BJMKDACDR]_`]QPOHHLLHGIC8;;8:BIHKEHMFDFJJIBA@HLG:S?Xh<9<<665:EG>>=]>:?OOOLIFLLMKVOGPNLNNOUZXU\US\^WGT[XSRVVSQQVXHFGLTN?BCLO>BJLIKHF@?MV[]\b_ZHCJQVROOJKMMLMOPNMOOPSPOORSTRUROSSRUSTW]a^[XXY\]][ZYY\cgjnmlmp:rtmed\]bjmgho886gfc[Z\]XY]\]]^a^]\\[\`^\\^_^bf_XWVVWZ\_\WVYX[aguh]UOVRVZ\\__bedbXRSYZ__\ZZV``_ckggmp:79::;899llkns9778;876872UCFFGIH`;ZXl?nCGABPNGA;@nFPOGFNRTQMNMKINRLBFJHKOPQTXZZ^a`_febhoookd`]`bbbcbb\\^`ecge^`ba_\Za_[[Z[YURYYVV\]Z\]]_^^^`_[XZ[a]V[^^_`cefdZYclssqrolkikpokklnmkg^alssnopqqsuqw~yqoonmjibQYXYYURTSRROT\a^[\`ljfffc]\[\`elow}|wKKLLLOM|wsss{nghglospp|wekwqlr|tpowrsu}wottq}|tmnnlfjf\QMMUemsiceebhosuroou~}|}z{y}x{~}xnnbR_d]]^^YXZWXVZ[UTRU]mid\YYWPOVWXY]^XQMGw{N[lmillg^]Y_a^b]TOQUNJPSSV\_]XWV[cowrdUQV`abd\Z\RQSSXbc]TVffbgggmononpobYUVW]dfjcihkif_`lickfb`dkjhkjomaceilieeed_]begc]`ngdfcecc_`a^WLNR[R@CyQVLPXCTT`fgb`dkm^YYX\`]UUUX]W\[aabdb[Z[Y]ihdc__beiaaf`dlnw|uulfb_a^^YOHQRSRSTbgdXRRMJPPQSUTW]ZUSRVPCO^]hf\ZWVXeaa^^^`a_]^febcfkbegllhm}yqjmqzh[][WW\\UMHGTVWWbc^XZ^\[WPSRRNLNPSQMMIMQUTMLJIDCHGCFDC=4GO2SS[iummqica_`cc[^^`cX[_ahhkYM[WVZ`VWUX\WRUYZROUPpa^WTJIOHHKQWSFELLKDDRLE:4f\UHKUXYTJzu{fiP\LHNW`rq]cKDcunipwq\LAKUVSPKM`XRW^_fod]WTMJF?HWPINPSXNwquwttrsryKtpoopw|z{cv}~\dBkWN>C8=U}xfpw|ypkidcda\c4YM@CCEBFQPGNVLIHF}wIFtyCHFDEICyFItmpv>ABumstsHIwpoxqvneeBFrd`]`d`jfZRZYSTjaS_v??y>Cvtx?@x>E?@HKFKOSSQULGFFFA~wohddfkgSW]K83BMZomipnVhfkoqnyGxmetqijsd_}GrD[dkQ0cScYkswokha^hr{`W]c_b[_`ZXni`ha]xmia\QFLI^`ergpYQnRg\UY[n^XX[ef[_VZneZSSf_[[`cXRKGGPSIOQMO\iuqdXNCF]cudQLMLGELsLQLZkTeZQKHsoxy}g\vECslATil^Teb_ZTT\YWgjmvluxuipt}}CszD@qxslpq}iivylimqBGB}}{}pnnhm@xmv{fekgmvCJJNTLooEQMIOLpdcuxlmxwpqtkd^[ZZgc_TUUSJO\cWWmjZ[YIIOOOSP]bg]UQUaXOHFACGJF=:BJSPPPROKBDRCMUOHNPRMLRGC@?CFJIG>ZWXKVL@DQIRBDBFMMTJA>::BBBPLJGDBA:=GNVUVUW`bYT^gVKCNQSNJC<=D+7E?99:311dcab594_cb777988:7458;84689442464587448889::54875332`bb`d554d23hffea^b`[Z\^^]`aefd`^\ZURTZ`_ZYc*),)+.-/0..,+-.**+/...-,*)-|+*+*,---//*)&$&##'*+,-.-+(()(*+++)*--+)('&$"$&$%$&*)%$" !#$%'%#! 79 !$##"!67!!9 ! - "%/,)((&$%&&$$&&''('$)+,-0.,,+)+,++-.-+,+(')8,/.-,**,.021/230-*)*,++*))+.10,+)(*-.01/03+S-+*)*+++.'0/-.,-,,2322 - ,++?*++,-- ''&&&*)&(+-.0.)'(,-./,+++-/..,+++*)*0.*+++*)))*()*%'&&''%',-**,-,++,./+),.,,++,.0.-00,()b++,..,+*-.-,**)*,,,-.10*%##"! !  "!!%)*++((.4508A=51/,16861110,//($(*('(%$+)),*'$$ :!#%$$"$&#$!#$')-0/+)'$>%#$""'))('(()*()**-.*(&*-,)(# #$##%&!#('+-/-('%%%&'&&(&## #"$ 37:" $"" $#" !!"!"%''&!#$"""%)'$ !%)',%"%(*(%"''#&"!"##$##! #'&$%$'+-.2$!%&()))# !',$($"(*(&',2.#"%$!%*37.272./"$&$'('%(,,+,*)(*-,.-//-*).1/,,(,+'''(+/2'$%$$'*/++(*))),.-)**)*(*+,*)&*)('%''$##$'"$'% ! #)++()+*(',,*-.-./,+)-+("&('$###%('$ "$$%'&#!"%')'(&"$$$ !%'$ ! '/0/-((($$((&&'$#(')#%*&$%&%% #&#,!07 #!% )((%#!%%%$*'#('%&&'+,*(-)(-.)&-*''**+)((**"""$($ !'*!&&#$" (-.0/320'#&),)()&'L&'('')((*)()++**,*)*,+.-+,141.-./111.///05568989::=:7932599446653..//,-0/2/0/0//00/./124630//001120./0/036A82-(-*,001423544.,-1266422/342594258:;:;='"&'%)(1"50;!9$&!#+*%"#8'-+%$**+)'('&$(+(!$&&(*,-.13245347648<<;963036776552257;:;:798777697554440.420067445654467831338404667788:9227=ABBCA@><>AA>???=<;78>CB@ABACC@DHE@?>>><<7/6445201/..,06;7569B?>><;65789;@>DHOTLDN[-[X++,,-,QKFC@?@FPTSYURUVZebO@:==?AEC@HLG>@IC?CNVVSNOPMONKFA?@E@ABGDAED@JICBA@>9<:5/-,2>CE?;><;?ACEDCDHKMJJLLKJEYQPKHHFKNKHKONQPVTS[USQJOLCD<0:>97886674335634318E?:321/-+054379610-SQPVY^_6`YVRKT;FFDDEB:77;;;>:52471.5758=<9666:?INH<3038:;<568/V3347>?:36C@<=;=CEGIIKL@8545;@?B?DBA>>:788<=:589;98;;<:8=E>;=;99:99:72*&&'# 5+.%%*)2:?>:9;@@7676:;83447725499:<<9878?@:;>;>?AMNIHA<:;;984-+00//-1:?<4/-++2//0124642235/(386=:75334:7989:;:8<6699:<==89:<:9@JND@>>BG:4652353/+'&.000660+-012/-.-.)(*-/+((%"--3;B<<@:6446893679;2578<;=1'21137022350.222-+/-N>872.)(,((+.10(L(,+*'%( 04/FL(G*121-'A@D56+4(&(.4>=06&!7BAH+R?>@DEHIJLF6DKFBCHE15IOPJB.! 2DGLNOMKJOPA7@KD?C@;751..*&)&"""C##!#,+E&+1*''&E?:%#:=#%$"#'#>%&<:9< "$A!!>$ &'"%()))-&$$%%"BD@<<844571%$$$+985;9-58:;=:?A%H=95>D:35;75>F&:(J022&2.6-8G;?:751.5;@2,/3272440/=82720?9854.(+F)237=9@0*1-;1/23?63019716-.:E51,/953045/-)$%+,'-/*,38??5-)%$88B6*)+)''+C.N5-4;4513+'OD?CDFMRUIM<6F)%?@#.<;4)5423,+01.8<6=6;<;59=HDGDF$8<"":?=89:@87>E@:7;:"%"<;>?99737!?9@F9596:=@"E&*),&DE<;%,)C',)=85AA9;A?9;>;7211.643,--,&'.4,,;9/0.##''')(/02+'%(1,'"# !%" $(&%$"(%)&"&%'##(!! !!"#!,*+!)%&!'M""&!%###!!$))(&&,,&#(/&!#$%$! "0,0&623"!&(11%3+.%0-,+++-+3*+++-,/.//-,/-++-0/.///0/-,+*''')*(&&*Ӂр瀃Ԁ~€܀€~~ ƾ»󀇊񀂃!ŭɽټĿȹĿõǷ½̺»ŰǼ¾ٹǽ³ٴƺǺûʭ򄂊ǻ˿ǀžʼϽ̀꙱瘡؀ɹüЀŵꃃŴŽ˿ŲĀѽ¸Ⱥعܤ򋡚򛨝Ʒ›Ѩɑʰث֣ܺ逆ֶśͻǽ̬ȾѶ˼÷ʹͪϴɏ⅄Ѽ܎ӃЮ숀ǼȾɮ˿̾»õűµķ慁䁕ҋ򈓚[`cgffdZaaehfh564ef344edfgc`c`_X`b^``]\_ad^]eigeea]WVTOLLQTW^c^\_^X[VRUSSZ]ZVVYVSOOPONNMOQRSOMTTPPPOMKLID?>??@A@AAC=::7n=:k;==?=<1?B@AC>9:::9:>CKMOQVYYWTTSPRUXZ^abaceedecdg1]a``^aedbabbbf59843daa^YTTURNOVa_^YWXZ\a]WY[[WUUWXWVWVVTUZ`^ZXTVZ\`dabi55678:;;;=BBCECA>645888:::88;;989;<;;:9:=?>:578;==<<99:::9:9id[UeUYXX]c579138543b3568766689;98877667754534678:<:66523dc`]]]\a4455cf79:;;:78;966675gcbdg465446=AA;553354U5566343332200243232d3669968:>@;676778;:77769==:96664221135664355446778:;;;:76678778667K9766679;<9632468;5bd3687532c44457:<<8;:9;=?<=?@?>=;;;<=<9765247663^^`ca`\]8752372_f``h3446hVXZUUZ_`^ZZac464<64332`WRSUY]ZWY\ZYXZ^b\WYXSKKORSORRUXYZ[_1`a[[47555c\WVTU[aa`a[WY^aa\^e4a]]_^\_dkh`ZX]_^][[aj6h_[YY\]Z\^bdba\QKKMTURPNOPKGKRTNGKKMLGBEP^jlkpto\SS`n|we\[[WgjWPPMMNMDAJQLTXVWXWXTWXYWSQMJGKLONROLHG>=O^lpikmYRSPMOOTQIOQOOLLHHNMMSPORSSSTVWQMDCEKJIBGPSPLNSTYZYUSLHHMRVTTQPMLNORPNKKHFID?@ADFIGIACELIAEIHDDB@FHJIGGGF=8?BGIRNDLL;@JOBFJJMUPF<98=CD@B@DEBEKQRNLIILG?FKLIGIMNMP]`XSRRV\\ZVXWWWURRX[[XTRJ?DIBCDIGC?;@AGJEBBOWVVXU[_aVUWYTQSTPMMOQPRSPOMNPPSSVXWZ[VSTTOOSSUVTSWZXZ[ZZ\`cdfijliimnpeYXV]dhjl7997khecdea_]Y\]\[Z]\]]\^__bcbda\]ecX[[URTW[[XVYX_fk|w^SNRRUW[ddchijf]WW[Y_I[VV][]_`ckplhiihm988789kklqtro77;`Le668IL0FJKH;AXSmsl<@=AfeGJHJMQPMNKKQXOEJLNPSTWZZ\ccddikgdgmlnjhjigigeced`aeihghb`bbd]UQW\\[[[WNRX\WUUWVXUVVZZY]a]\^bbZ[]_bbdfjmiegmqqnmiiljijponmjkifb]^nplmplkprrwsmmmkmjeeaYY]^WRTTTUONXZPRZ`ffehjjda``a_dgs|uoIHLJLNL~pecgou~}{qjhjoz{w}v{~|{wttqpt}rfdggfgloi[OHXhmmkc_bhjksvplqzqpr}nxvtqttuzvry|{wxxzka_]YVSPPUW[ab]WYY[]d_XZ`VQUWYa\Y_RIKKRNLOYbaa__\VSRQNRQOQQPMIOV\a_ebRLUWX[^`_[USPTZZY]^jg`_]Y``a^VSUZcbchoomnlfea]dh[Ygigd`abbac^`eclm`\agmjidde`blootnkjic_[efb]\cd\^ec\^ab`]VQMKFA@=;U<^Zp4?D_^^YRT\fbZWX\_ZYXVZfc]ef]Z_gib[Y^ZVWY\^]_eia][Z]cmy{xqjdec_[YUPUYSRQT^e`e`WXZVYVXYWWSUWTOFMLRc^`c^]YUV]ffhfccdbdedcdddeehdl||{}xjkqorpb]`_VUVVVUVQTWSNQTTSRMICFSURK@?JNPNNLLPUVSNEAFJJIDHB=9?HQVf6iYJIKVPLQJvwtiuRWOLNeleZU`LXr}vu}}hOCBPWVSOJW^RS^eepmXWWSMGH?GMLN|KLHz{tvuvvlmnuxKLqjfprvvgIGpYA9peRr}}{urprle]XehOL~EGECHPSIECEJEB}DvzGE=DGGEDFHn~tkv?@CAvz|wr}svvwppcltyCucfgfnceWUISZTUX?TToA@A{yy~CA=@EA@CHMOILTLUOGCCDCwkfgrldcqg``NFLSLY`dwvqUZbpqvzx|HNnWj|tmziL[~JiWFFKZfShtsyk__bdilqm]YTW_bn\_ls~h[eqiWLKIHFZ]amk`b[QFN`XMTUNQc\ZlmS\a`osc\QOZ[M[jshYSKPSNPMII_h`vtoXPBE_`tXKMJFCH\tEhJSOQLzGGHFKHPjQu[tNAti=LTYPQKXdpYX][S_popnot{oq}z}DH{BwxtqhuDDnnv}zmnjt@EG@utpEvprljphghkzEKCKPUP|wiHJKGG{xtnuuk{zvmmrohbYUX__aVQTPHLXd`ajne^WOIMKHJHOWb\SOZkbYKEGGAFC9DKFMTTRQQTECI@DIIG>;FHQB>J>CTJJF<=DOJMHXJ@AFBBHIHLK@GDEGFKMQOJS[aRSe`VLIQTRMD<@H?;Oa6388[6BD=A@CPID63_VFG4C=::e357:8<>=8681c33dab485`b4967998:<8799833685544754675247889:;64586552ab`_bg65444fdddaaba]\]WY[`eeegdba`WTP\dd``S)*--.,)..00.---,+.0--/-,(-.+,-+*,./,+020/.-+(((%$$()+/1-,--(+*())(,-+()+*)&&&%(&(()(+,((''&%&%# !!!  58 -! %&$%(+*)''(''(((+---/00//--/()))()+?**++*,--.,*'')'%%'./.,*,-.11.---+***+,+,+*)*+..-+)*,-/10.1100,*(())*,,'..-,,,.0.-/.-./  ,&/,.,+,,-*+*+&*'&(,&*,)),.-+(())/*()*,.-++-,**+.0-+**(##%'($'&(**)*+((&'.+)))*-0//0-**--.++/,**+,,-.10-**-//.,+.2/*,-+,-01.+(!##!! !""$#"&'))&#%+3898;>@5/.5;B>5013/89.+.-.//)&*.).0...,/-//0.+)('$'()())'##%-45147+(((&''))%**'&$$!"%%&)&%&'')(((&&!!"&%$"()'%%(')+*()$#!"(+*)((&%%&''%$%#$'%!! !"$""!"&$"$#!!""#$$$%$#  !&#&&%'"$#%)($"$%$#!#!$#$$#!!$&/M3((%#&-)$%$&&&#!$(')!!"""'-,,**-'&#'%*)'+.341$!$'()*,-,-/--*)(*+)+,++,+**)('-*(&*,+)$#$!$+-./02/.*')''%'*+*'),,*'%)'%%&##$$$&&&'%'(#!#&*)&&**+,+./,+').*),,((%&'&$#"! #%%$##$$%&+)&(+)&"!$""%&)%"$'+-.//%$)*%&%$!"$)'$  ""! "#91.+5" !!$'(&%#"&$#$&%#$&%&(02,('(*--,**))*(&&+-+)''#"%""!%# "$! (,+,.,.01,*,-))*+)&')*()*())(('&(*)++-../0,+,-*)++,,+*./-../0234445675578:401/13565654234100-01.-,0/00011012242//46/22/-./120.//148DB^2,*+*,.065445651-.0032//43235588734658999<==;( .",()+)"(3,<>7" %&# #55(('()*)'('(,0+#'(**-.133465668:878;;<8676799778867<>=<;89:9;73/2554442,.35101222//033468533783467999:;=:9:?BB@?=>@>=>AA@><<;:857A@>@A>>BA%@DB?>><>;9;94588312100,-46-059==<=>>;979;CILQJBT^YUVROPR*)RPHLMFIR--./,VTVXTPH>9:FNMKMONIHKRSTSMCGJIGCBBABDLPE<;;:89=@>5.+5?BB@:78=@@EGDBEJCBCKXYWMAFFDBCDDFEDMRNIMU]TIPU[VKMHLLLA<:95310/13689858899><78;3/124:88;3/T/.XXc_TYb2c2f26=@?>>=:5322032/4331-2579:@=31879;==;842036558:B@>?<9>=<83158?=<@DCDFFCB><@A76?A>>===;9;87:9@B848>=8:>?@C?=>><:8><956>>88<9469:962,(""+!63<%*9:;4/28=:6459:56517>:6;;66:@B=76;74668:9;@A<988:=BJLJD@<>>975203401/17;7=62232325322/142.',*2;689564227;<=<:;;9:;:9;;<;<=8>FDDFHC=@A?A>5477211121/*+-*'),*'%""!%../) &)+)'%#$$#" #/1:?@9<;8547886566523;<;::80.1-2781-0742;8+/21,MD:50,+/266-*.3,',-1-...(#&72(HL)F*1-+-(=??7>-0*''7<7/-4&.@GB@EE7& +130-)15-/598@>112.(%%B %))SLTQQUMQX[,CK*,*NBGB>FABCC==>ACL)+K=;8?=>IHLOMLD8LQOKIHILMMRRNF&/3)=MMQJKMKNRMFGJHBAEC?=<<93-),-!"A#%$"%*,'%#%)$"C%E<>$""#$##%&A6@F>8= !$$@BD>9CC?@?@;<28;<"<1553934,.$+/*'')-9A! "DB@?A#! $!!"%()&(+%,(#"E?:768;6448/-.$#)&,1/9<<-65:9=@?A&*F/3:1,%%64B1)))&%(M5L-C03+,NM-A()PM)+I+),D/@7C.%<8$)02-,&-3>/.23-2<:889:@99?E@B%&G@#99C><7:""E;:>EC:;8< #&!679G(@9<89=6689DJK$'$L),-*B>?8J&#(#&CCC<39:?DFCABA?=@C?EIGFFOWUUTSSRW\[Zcgfinpn;6gfc367862a24%feeedg8:6``aa_\VUVRQTS\_`^ZWWW\_\WVXVXnWVWXUTSTZZZYWWY[bdbcg553b]059;=@=>@==<:8435559<;655778::989:9fac`^`48;;<;<98777688f^\ZVSY^`ah7;4__^_cee257999:98887678632234567745443cca]ZWWZ]\YZ_278789;97766765ebbbg67543f58<=75745689;>=;;8789:89:966689886665568;:668<=94355569:8667898;<877654G56865678:>==<;;;<;;;9660]1244Y[a]VV[6=:96X[^WS[[]cbZVVRKP\bd`\\Y[cc6<85_WUVZ]_^[\^```acf\YZYYXYXXROTZ]]^\XY_c\^Z05653`\^ZURW]^VOMSYZ^_ZY]_\ZZZXX[`f`^ZWTMQUY``_^^ZWVXZ\YYY[`b`_WPQRITTSRTOFDJRRNHJLOMLKHJSVZXURPPRXjr>=r_U]Z]]V`OBABRVLIUQ]abb\VWY]`diiifc[ZX\_`aZSNHEJRSPVXRKLNWONR^UJJORQOOMMKHJNMLIKIPKMTNEDHHG=>@@GMOMNQTURNKNNNKJPQQONPLLSRQTSPOKFABDEHLJKHLMJIJIGJMIGB:7F?;CA;88k69=?BJHEKKG=?B9AGHILQTLGHNHGOOLNIB1KSNLPRDAFOSJJNFBLSVSKJLAKKGJKHAJIHLKINKNLE;?KRQKIA;HID6886=CEQVPQSNIHHH@?ADGBCGGFO]b^M@@HABBGPUXWWX\\UMPTX[a`WX_\NJQX^bZ]UFJNPLLFD>>IG@CMLKPRTWYZW[edd\TTTQTSOQQONNPROMPNMPONOUSUY[[^YZSOORPMNOPTVUYXVXYYY\afjfegmf`aea`YW]a^aek68ijb`cejie`_]aa\\Z\`aaeea_`bbhjc_a]XWZTQOQW\\[`_aehni]YYVVVTYb]_^bdddabbac]WV`ce^`cbfoiigfm85f79jjil98okhf8K8BM7:G:SDDGG@A=o>F?X\CCKMNPNJLLNNONRQPNNPPTWWXWY\agjlee_^dhlmjnuqonfbgbVQXcd_a`\[\^^[X[_\Z\_\OOW\]\YVW\UQS[^a`\_cejleabeiijijjllkhhjjkllkjjmqstusqmmi_`^hef`]afikonkifa__Z]c]Y[YUTQQROHJOLHOYcegddgiiecdhivwyumnLRQ|rmsqqokr|x~zwwtpnpt|to|{|}{vxpkjkpqonja[WW[]abfdhmr{|onhltzuwtnnnqpsTRzkWW[ZYYY^b__b\XUTXXRQVSQ[WNHGJMPYYUUWRRTY]XZ]VR[\YWWYYXTOWZYSLMOQKJJRST`UIT\^RV]\TOMNKOUUPQU_ddjb[bic[VXX\Z_badaW`cgfd\ZahdaaZUY^a`cbbagknk_]beaacaZ_cginijkkmifdaeifa[_`WVZdfg\^b`]XRLGeX4:bb}afhHOecWXY`tpc][]_`_\[Z^y{gajoghiqkc]be]Y\W_eccej`YWSVadiqmfcdgga^\UPQUSWWZ][[^V]_afc`US\ZTSVRlMVMNY^]]WSU\Z[_`aa`_ehfed_^[UYap|{yrotohfdb^]\YXYXZaf\RWZYOKKPPTVNL?7=IOQRQPUSPONMFCFJICBEA88GRT,:V`vujefeidfhkfca]WUX]efceke^aWRKS\UL\aZ]kWQ\XKwiaX]WU]\SDT]\\YZ[LKGIEF@EaQSJJKJLNvki@W[[Z^b_ZTZ[Rdp}z{~aMGQZYWPII]VOZmkhwiZYTPJG|AEOTL~ypPPQFLLmqbgppsrsml}KJzlfmyMowLlxzzwwxrrxxrh`aoteSPmDDLNOMLGEC{ACxDC>@GCDEEDvjw|rlCEBC}}ttwxt{xsnocpq>GyhikedjgVSMSW\ZYBIyywrtA@A@ACA=CNMJC?FN`SEDDDseggo{jlyvig\US[ZVWj}v|UJ`|uvvbc^TPbxvvoPF^qDIO~^NSVUYgu}x}jZ_d^fhgulWSZgera^m_Kyd]]bjSCCG[k_VhaTWJJT]WOILKH]d[i\VOYermaYRQRKMbuum^TSXVOSCRXgg`kfndYMPOMMIEEEAxxa^K]zLBSMMEHFMTNQPFZBRavqzIf_@AOIKIW_ao[[XQZ_ksnoc_u}vtz|z}GIJwouupowEKJyjwD{sysqGWDj\YnZFngZieTYtGDELWZF~rlDrP?Al~|vtpAA@@slicb]T\a`]XSXRMLMPZ`_d\WXZLLJFNHLU\WUSUYVTRKKKGBCAIANPX\]VY\WUD:P5QVVe79dV=BDDCAE=>5h[9.a@7@GT42369;<>=7576467ba354fb45736<=:9<877786325545444346961585689:73359651b__adh57543c`ca`b`\VUVYabbbda`_]ZSX\[_,,++1,,0.,/../020/320-,+)())''-,..+*++,.-,*(''&&%(*..,+*)**()((++)(+--+&&&)))'%'*..1.))(('())'$$$&'$!#""#" !%"! !"! !$#" #'D&(,+(,..1575/.,*,+++**)+---+(()('((+,..+*+,/30-+,*+,*/++*)((++,+*+,,00.-/*&F--00/.0,,+)')+++.***+///=---,*))+-,++.-/.-//, )()&;(,/,'()'(+'$'&'()))*($&-11.,+**,++)**-/0/-./.01-+*,+*(%(+-..,++--'&$-,-,*)+./,)%(+,.-**+,)()*)*,.2.,*)(%')+/.-,,*((*,-++*+..,)&! !!""#$!!"""&)+**)'(,))('''+.1;= 70-431/)3+$%%13-+1-56761-.0356977673203323/+)&$'*)&*,)&&'-(&'/)$&))&%(%&&$&'%%##"%#$(%!!$""!$&$%&')(&%'&'$#'('&&(%&(('()('&"!!"%#$#%&$$$""$&##!% 8"! #$#"""#(*&#"&! '&$$" $'$#%(!"()"#$"!&)*(#$&##!$#!%%#&&#%#&&#%(($$ &$!')$!$*,+E+,&$'()***+,//,*..21,+-((**(/0+*)(&'*)+/1213-&$G$<#'&)),*)-+**$(*&**$&%('*'#$$%&'('**))%"$%)*',0())&!##"$" #%#"% $%&(-+*+**'$&'" &$!$""#)/**+)&&''!!#%'##&%#&+)%.4 "!!&70-0*1 %u' $%#%&*&"%*$" &"!"#())*,,.-($&)+-0/)*.-%"%*+-)++#&)*'(#!%$ %%%()*-.116<::2+++*+*'')('(')'%(&&(')*.+,/002..*((++)+,+.-+,-.0035644464103010/22/03525223577410/22/0.02114531022561.10/.10-,-033132248<:300...-040102555232264/.46934645:544483467:985- !2(&()!)2.760$""":!'"/0%#(++,*'('()))+*'()*+-///01148:;663369<;:;?<<<64750-19958756777635863585,,267641262.057874689<>:89;<<<;;;<>><=???@?>==?ADDCA?=><776<:;769;<>?>>;855526;746532000.)*/-+/6<<<::<<;999:BJEGFECC>;?>8410249:;;=@AGKPOCA>AFNYVOJFCFD?>@A@CPXYZRPWdhb^d64VOKKF<0476556:=<:9411265/053372-(&*,.662[592139=:<=72::988:95417772-011,SY..UTW1/0<5-6<<47=;632/,032.14:;=@;8=@<7697;;=?=>=6=>A@@=B@769<99=<69;?@B?>??@>==<>@><:><323:;;47:863-'$--02C7;>+098177@JD:76:8;:775:KJ<7?A:=?96829>@@AE=85249:?GD><>=;;:7238AISULKIGFA?>=;:997642110057.&+,*!&'''(%%#'))&$%#!! .5BA;9;9<98;<98752136<=;;>9351.(,40+5:56=1,42)HHC:7160.55.H$.555223**)+&!!1,.FH)+MN*)*+LF>86!.11/1320-10*6?GEBHC1&#*111-((5.+4A<:E;22/,'%EB#$+/+MPKIF>T00/I&*+MF9:15;=?@@>?MRSQM))D>:=BK+NLNQN@DTNMKIILMMP*QPKJDE?5><=BB=713:9/%#6DE#$)*+*)%$$@##F>C$" $!"###E=5=A<7#""$CACC9;?A@CA>;>496%>5663276,+')+.)%#-@# @A?=<" ! "()& $'1+#"!"FD:4469KA55><44/++1/,,4?=B-(6D@=?>58ME4**3>@;@<*#38>!&-C2*-...6=@>?C4,13.332;7-+285>32:0B(=4105<,$E&&2=2.94+.$'/41,*-,*761=30*07;92/+..+-8CA:3./1/+/%/188283:71*,,**(&%'%CMC7:3@F(K<5$%,))&051;000,048<9630=CB;;AC=>%&&>8<=:9;$'(FB7=%B;@;7%."/**.3(75085*,KDKNK'%&QQ+/2$A<;7:ACGKNMMKGHGBJPONOSTY\\XUW[^_befj8;=@:643689;==::<>=;6j5468::6bZSY`^[ZX[]bec_ec_[XY^ca\WVVXWVUTVXZ]\Z]]Z\_][YY\cfc^^`^\_154578998;::<<:643cf97c^^^`ab4778:8]Y^ccaZYbffi56e^_e78774fdaZUTXZ\^a``^^dfc_acdf6768<<::879:66765545789:9985433cda]_cfhf4578;:;<;>@;9S99863e468<=;:877568754434568::867775676549<9:97568:854438975379743465678779::;<=99:9W7779976689<>@A>>>@A@AA??A@A??ABCECA@=:7546:;;:=;<;=>752573344433457877:989:;<:9<<=><;;;;8@LPRTPRWWRWMFMNJLOOOKPYXPOKFEIJFINQPPOUXJI^VLECIMMOSSRVTNLKOSWUPUKIFBBKEB<9EE:6;HOPYZOMNQQGCECDGMNQWXVPUSUB??OMHQV\\cVIFMPKUWW]_^Y]lFr=@?AV[RKRXUXTRPPOPODAGGFIIKMNOPQMECACACDHKOPOPLJJJLMORVWYUVVOFBDAFADGGF?CB>JIIMQUZ\XWXUSROJILNHGMJCAJNPXSONNLGJJND>?ABBGNIKVb3feiQ@:@CA@A?;7;>ga\LKOCL6EGDHQTRSRQSRTPOPH@lc\m;9=IRY[\\Z]`XRSYZ\ZWSSVSPJ%OS[WMQ[VYIGII>A=7GIIGKRPSURU`^IIKLRSPQ^PLNPLMOPWWRRPQRPRPRSTUYXX\\NMMOMLNPNLOX][WVVWYZbefcbbd`]\\[ZXW__ZY\_`fggdhhhkmg`cddbbfgdc]^ccdfgjhihc\\XUTSTUUVX[XX]`^[ZY[\[ZYY\WWY\begdeb_c_]]]Z`b`adbcbghjn66f8:keck:8876245d[M\5N>M87:9R3CMaibd?A<@KLJGKNOLMKQROLMNOOU\XVVX[`fhkefa^WZbdjihfhifaaa_ZZbfefbXUY\YXV\cZUUZZURORXZ\\Y[\[XZ^^``^`bgnha^`fknllkiimkhfijknpnnnpx{xtsqpkdbcigb__ehllhhjjebb_^ba\WTQSPPONHCCDEN_iihdfimnmjihlwvyve_d{wuxxr~zz|uwwsy}}DGI~}rpqpjmtzxyyz~w{y{vrkgkosuwtmqqjsslhnooqpot}xusrrxxwvrosrqs{PRPP||vli]WUXZ[]^^]ZXWVZadaZSNMQQLHIJPQPQOSRU\TS[`^``ZSSZUQKNMPT\YXYXTROJQPRLKQWY[[MPTUSSWXSSRLIKRWSVY]S^eeaadaUa]S\]VWZ\]]_`acccggedgccc_^_[]acbdfif_flliie`_gqytvrlhgihhhghfcdjnbZ``mic_`b_XUOHCAB@78YKipohle\j{prsmhihgegcgik|~slopkovlc^^`^Z]goriedjkc]\\dgfjpf_\^_^[VOMPTVPX\]hYLa`a\ed^_W]dYSSWVMFSab[`cc_YVRTRPQW^c`]\bfee]VPPPU`n|~xppsw}nmh`[]ac_]_]SUW][TTZaZUNKLKHJMRRORTLHGEB??FMQNLHFFISYWX,;Vdwqhhbeigkjf_behdbcdacfjh^Ya]Qyk^\?w|tqwuuolWPSZ\`Zc}vweHMmvnxweUewjk\Zj{|ymWMCJtB|s^\SC\v~tqsHt\e`XiefpumTcedotflYj|fd^nbGCORPgo\``ZTTZ[\PJAtJ\OL|pOU\alxuZV]UKUelorh[UV[UQNT_bicTWbg^YRMF@@vAbzQ|mbTvdPMPLZXN[]M?CXLMTP~tZuKJJBz_aaafVIW`eir~m]XsBB{vzrEx?srtv@EDzm~qF?n@?cYe^CLCeeekkb\jmEFEAJXMxp}ADHB?lsv{px~DA@z{vld[`VO^^]][YUTPLGEHKTWY_fYMKKIEOVWQTURHHSLKKKHAKKIILLQNV`OR]QGCGECIBGMXW`ULMUKAIIK<=BDCDH95FL?:<=71,/20,),)*)'+./1/.47;7431/.1566753543545763.-.03013000221,''*''(*.0.((&'%"%'[%$&'))'*(&$!!""$$%&&)#$()&##&%&&*+&&)++-)*""%"$$" !"! #$)&$%&'$#$$##!#" ! $ 3 "%$&% $&&'&(**',%!$# "%$%"%*)%%#! #$!#%'%&&()##/(#"##&((),*'%$'()*)+%$##%+"!#!$*)/.'&'**%%&&%&('),--)**+"%#+(&*-018.&$))%+,+01105=&A#%!!,.((+/--++))()(#"#$$%#%&&'))(&#!" "!"$'''(%$$%&%&)+++)**&!""!##"!"&$#%')+,***'''%"#%%#!$"$&(,+(((&#&&*%!"###&(%$(+((+$ !  730'&,%)##!#'(&(''(&'&%%!840;  %(**,,+-.*''++,,*''(('$')*(#'/,.$#$%$$%$%)()+*,01&')),,***))(&'(&(*h)--**((*)**++,-/..0/''')(()*)().1/-.-.00454344431/0100/22/-.014443799:952444558975/04433445673454010..-.0 +2..14321101..01676453263221/36556554656735338*%("* ""0 )*5833"" (%"9<''#!!)*(%(*(&''**('(**)/42//02488;7963/278;:889975556438;;;932673226;5003410.044653453236788678;@;8679;=<=<==@>;;<=>@A??@BHMHFA@?@>988=<988;<=>::;<98876885321300/-)&&((/;?>=:;<=><;::=FFEE;8;MP`^_]WUNMMMNONG@KX]UPLCJRLGHAIMMLGEGDDD@@BBH%'(QLKMUNBBDA=@FHLFEFFLLHDKIIMEB><>ABBDC>BA=EG@>BA@@??CJQSLGEBCCFJKMLGFFB@CDBDIU]c3bbd74bZ[2YMLKH@@842577889843347<=<8300240,-,/100.223:3.59;?>722842WP/1/14:7476430.333.R/25886.Y3663377463.,-1416::5<<= :<>;4@<4;<679-:<=@@BFGC@>:<>:8969==::;>;8=??>B>::?FKFFDB?>?>?>;<:89;810+$! 1,:?;6@H>@B?>>>==>:=>ALLGB>A@=BGD>:<<:68>BD==?BC>;99>>;?F@<:<==:3.-022.458@2,9775:65638:31242-(/:759::843/0/.-279978;??>82-0/25;FTPILNFDBABEKG>>;52477533.()),+('*+(# "# "&&$$#!!$ !.7C>:<88;9;;9579<9:<<:<>>=5064-*30.382042/2/LLI?4068,.82)'3:3-40321/.,I$+8<*,(*)(EK**(((H9;@+5632441-.0+.79@AFI;03.22/11,/<0/>D<@B:32/+(LBH&*//PFLMBCH.44,A&+3(7>B@D96>>@:G\TMHH*,;57&$#$$;:@A?;#$"A=G)@:'E?AC??=<89>#D=3(-4/54-)*(*+((% )@!:<>;;;%$!!"" '*$%& '5) ==8/, =@G=:=:879.+,123.1>;B6(.A?9>@4+:B7:.-5??A>1+%%9!?GI?23-!0?C=::'8-41+5127:9*865=?68,7HHC654>6(&H,+):@0451+.123-*%D.6+*L>*1369B?0.5/*2:=@A:3113-,*-64:5+,4731+)&#$AG%4A/C;:6O;0--,K58G+35,#$4+)/,AGH@LM0=,)*%A28505-$0158:A:/,<"!?@;@<$D;>!<<=?D"$#BDID:DD8$!8!,$+/)$2458943;>J'G%IFG($'/*@<;A""#! 7=@C<@B##"@@?:614/(/1/0.,**('$$%&+,,04-%#$"!'++'()&" (#$$&$&$!#$$($*1%'.% ""!#!$*'.'!!'$#$& "!%%$"! &)#"!"!! "#"##+&'#$#B""%&$#++'&""'(1))+3,1,# "/'93(!#%#/,+,---+.--.-.---/.,-,+***./-,++,,)&(~~π +Ȁ  +~ā 􃆆󃅈ľżl򆇅¿䃅킒ĽŹѴŵĿҿйؾʹ¼¯ǺŸǼѾŽƸʴ޾¶ƿ¶狕ɡˌñ߆邗ӀȲɺίϬ¾녁냑髻ߒ婻ýĻÿǸļðŻĺûĭ܀㇏ŀ晰βô˴иļþʿƿ۲ŹóƼ䐯Еމ⽸ނց뀑ȟ殷膋芐Ǻ񇜣Ͽ폆ɬߢչİ㳣݀»逦ɶзٽ؂Ⱥ呯×ồ郂ݿ܀þ¸熏Ձƽπ·˲Ƹʤ;³ĺȿýū߀κ끡͵􅇌WYY[^YTZfje^[]_bfcb5745c^]cmj]`677787aXWa^YY[Za^WX^a_^\[WRVW\`a`\\ZYUWY]dfejoieb]]XUSSVXY[Z[Z\\XUVYZXVTUXWVUUXZZ]UMKNPSSQPLGHCBAGC>BAADINOQRROJLPW^_a[WWZ[[\`ec`bfi678898447899:;=?>>==;:;<==<98kcUQ[f5e^QXi67766jb]][\__ZY[[YXZZYZ[[X]efeeggf^]]\_cc`245402435567555667:9863ea^^^]`fgdb34eceimhlqnigfeehgeb_beee469;7d`]]^aec`]^]Y]]WW[^cceg`b77678856558;:8679;;<;<93798765557754554456866:;89;:977889;>?==;998767963223568:K765766559><9531358755568:77889889::8:;98999:?><:;:::<;9779<=>==>==?>=?@?>==?ACBCBCDB=;:=>;99;:9;::;:;::<=;9997768987:=;779=;8<;<>=<<=?>>==:45949?=984`ZTV37[0799863`UTRRRQRUWXWSPRUT[ZZXT]VTZXVSV[2216;994da\XWWX\]_a\bb^[^`\XUZ_ed]]WRVY]YXY^^__bfjihdXTTVVTURRNRSUX`_[^\\^\WXXUZa_ZWX[_]XXUTUX]]WPSZ[[[aa^``\ZTSSPQRQPLLMLJJOMKMLNJEGPSOKGHFKSSVX\YZXZ\^YLSVTUTLMQTUZX[`b[UONNRW[^```\XWSXXYY_\[\[]b`ee]YXWVY\Z^\WWTMRW`SKJJIFMPLJKQVQOTX[OHHGOTKLHHD8>DGFHNSRRHIIGHJKA>k:6:DC@GMKHEGKNNMNTQMPQROLLNPSMNSYZRKHIKNNTNLMFLPHHIFFFJJGKQWX[XY]\Z_YOIMPQQRSOPOQRONJEJHLQPRQOSVUROPPRMHFLSZYUYXRSTXXRTWXXPKfFE<{iBFIC9:<7=LQXYHNNPQICA?BIKDLROXRKPW[URIPTSVPMRJ@CKPPV_\_UMJ@<@D@KLKRXUVRSVUTNLKIOHGK><:?FHKMOTSQQLIKJKMOLHGGIHOQOTXSRNORPKFECBCGGGEDB>GMILPRPSTVV]b`RGMMJLGDAHKPSTWZVPQSMGDAHLHEEHOPLHINT]YZ[Q?BKLK;`<@;je_IKFB`2MCTUO>GTTUURY_YL_gRDSUTRQNMLOJGIMRXWRRTVUPMMQVY[\WV\\NNQOJMKMLLPTTUVWWYZT[]__``cb\ZZ\VVWZ\\YVXY[_][ajhlleflkimnkjdc^[\]^^bdcf7orpnmjgc^ZWWVWWXWTVW[[Z\\\[\YYVVXZZZ_cccb[[\_a_]^ce_fg_^ddg:7jj99fbc7?=>=;:6756[\aDI94MY=MGZEN\le;>;JFEBEQF<6:@=KPOHHRTPIFLTQGHKKOVZ[YWW[_bcda_aa[WYafiigdc^`cdcfkrz~nh_VPTYWWXZSTSUYcaa[SW\`b``^V]`aXTTXY\`b^__chifhmnllmnmnnmkqxypry}xuttwsolia^ohmtmnpmklnqibaa`\^a^XUUPLMMKHDIPXeggfgkpuuuqnov|ul^ixw{}|svuxEFMK{zurrrsrux|}|mjhffrvyz~~oimpsvwtuy|xsowvqv|}zvqvzsuRSqngfijkgkwthRKMQV[ZZ]XSPOWZXWVSPNOKPWSPPWZ\YON_iceWSY[QKMRLOZYZTKMSZQKSTL]a]XSHPTSTTLKMOTOJJHQ[bnocd[RQRYVRMTTSXUW]]afd`cjgehgkg_YVUX_b`aab`dtpjopf_`iinkjefb`babfihdgmmmfsstolid_a`YWUB83]VdtSlijchp_Hakgwrhmkgflknol|wyw{tgdlkea^YX^l}mdbdgfba`becehha\^^\ZWRPNQORMV]\\ZVZYX_VFT[Zki]UUVROPVa_becc^YRNVVVUZac`]XX_cb[QO[\^bryoimqnkecaheelhegfcdfihd^`_YXX]][\WOPORPPTTWYVSPIGHJKJITYWB>LPXdUQW.;Tbliigfqppsj^aeosd[_XZ[\`aWclePIYZUT[[RV`TPTLFPldndaXYc^PUVNQVVYVNOHK|xK[cbNWSLF~GJMJLOhsF[ji[TX_dVUUS^gfoyeeia\XQ[XJ\oU\gnqifa[WRK{HT[VRuyuITPPLFS_euNuomq[qFL]`psSLKok{GJN}BCrou>BEHGO{zu~FHunvunllmlolvGCAsg{tz{qq}E@DPJm{~}~juHN|yG|qpurtogl}xnkeb`ecjaZVUXb]XYXWT\s>|~vorCMOFEEECBB=JSH=CLZL?8pv_U\mFF~rszwpikWIU[ejpyzrptRlWhswmaQfqfe]pv~sqeUEBTqvmq|\Np}xjgoGxg_YXfclx}UOdozqgd[x}sa]O?z@VSGLaMYiZZ`^\ZQKqXhcbbenegswcWY[]U]dchf\T]f^_TWfks]ZVVLByexufGTsjdeYGNWJf]tO\dUFIPLDY\Lys]rKNVPCZowvjIDa_`bp~_VlB{ICrpxHEqdw}l\m@GE@{}@{t~v{zzj]M`rhodfgkrkjgZkx~v}wIHUNk}FKJH@vqtkhBDEEt:>Axla\]VOWX_a]ZWUPGDJKJORZc[NMPKJLQPOUTLLDJPMGEEDMOGJIOXBISVNTJIFCFJNNDLRIMKRRRL>>>I?=YYKHQH>DIA::89@ACC@CB;>ACFBDKHD>?B?GGe[[2246<=;89953;A?>878>:>7545_05;888568:855345642a_212468543368:>;658;831cfddcbd211234d_`^[]X[Z\Z\addfd^dd\\\'))+.*''-0.++,,--,*,++.22+-,'(-,+,+)/,'',-,+**)'()*,-.,+*+)+,.220120//+*)))'))*-.//..+**+,+)(*,+***,/04/&"%(**,)&#$!!!#!!"$%&'('%%'*..0,('+,+++//,.23_0-($(0/+$'/31//..0/,+-.,+,,+**)'+//../12//.-,.-*d-,+++),230.-,,12159765321222/+,/.-.+)*,/0-,*,,)++((+-0...,. C2,,()&(')')+**,---+(*+*/-.,(-)(.,*'$%1/-,--+-.00-//.,,-,+*-.1/,,)&)),+)+,))*-14210*()*+**))&'()*.,)*)*,+)+,),0.,**+.-*,//+&(,,,-00--.+)%" !!!$%$'')'$%))&%#$$'..///-//111-$+...-(*+,.312573/*+*,.023330.-+../054332598:820/.--.+,,,--),,0+%#$#!&'$$$()(%'+.'#"!%("#""!"#!"$%%%!"#""##1!$&$!!#$##'&$&&'%$#%(*%%',-)%#$%&%&$$%#'#$$"! ##"$'))+*,-,*.*%!#$%&')')%%&$"" ##%'%&(&(()(&&&(%""%))(-+(((+*%')*+(&#$94#$$"&'++#''()&$""$&&"'('/+(*-0,)%),*.((*% "&()-0./))+'"$&!(&%),,-*+-,+'&%%(##%##%%'++**&&$$%%$$%'%##"##'('*+)(%&'&$"! ###"""#'$&)*'(()*,/.& $$"#! "#%')*,*&'*&"! $''%%&))&%$&(,)('$!''%. 2/3)'$"0, !$''')(&()&('!(2!7 %#&#')*-./351,)+)'()&%&&(((%%&#(0*#"$! "--("**+,*.1-(5<.$++**(%%%&#"%'+/-*)+++)((*+.//,,./(()(&(&('(+.-,.//01,02223233/./1.//0//.N-/0/10/3:897348768:88540./10/2445:;98866520/00110.-/03212110211//01103445300012573694354655300%(,%! -5'0/;*,3:3! *%$"$*"!)+*&%+,*&$(/,%'(),1220/03457754651028:;;98645687:>BIIA=71.132334+00/03:9950358:874/5772..235897877899;?@>?@@>+ADF@AGIFDAADBA?=87B=@B=>?=;==?;778857:8432.,+'+.4=<;::=ACBA?=?DGC=5>JNTWYSNONMKIGNNRLDIW_c_SHGKHBB@CGGLOOLLIMQP'&*)MKGFHEDCCEEEFTXXOKKNRPOUUUSIIJ@?><8@DFFHKPNIPPNNB<>?ADEIHBDFJGD@DCBEIKJGDHQKFFMQU^66e[OHC?@@@A@@GE:,'),27779620.5:9863101.UVPLN-2-,159;7/-9@=?62990KM/14.19873/1261.54XKP-9=:73*25554.X/0250/.,18>62238431WS[]\64252369>ED@BEDABBC?:5215;;98::8:CAADE?;=?=AA@<>;7998;>=;>BA@:7:710.!/)0=2?:<9?D5"5<?MQGDEEHD;;AA>;9546AMO@=;>AA@?=>@A>:;;:7410/1.1-4665421137-&247B=71320/1698;;;:96/-112159::724:<;8227557BLQF@:>@@>73277:>:9;;74699621/,)*-,*($ #!"$#&&##! #'%#* ".7=;;:8@?>@;57:BD:79556677/8=7+(341063.280+/)&-H:5=7612;7+.1,/3241-.+.GD+485.4.*&JH))+()*D3<&3;9/+/35--..598(*>>%D>=@>@=79CD@:84201/52/,++2.))('$,;859/'.14;8=B:9A.?0881% +:;CH<=E1'BGH,*6779:>78AA5.024.596;;5.5=43--7:>11320--'$DJG7EE9&.;:897S(+2+R?;C-481'),+%,4,JIFE?5@)+1.)1@AF7$ 4121:C@0,6";$#;:?%$90:?8/9"%%">B"@>BD==4+")65C:3468<:=?5;CFFIE>B<'&-*@2@$%%%!<:?:7#%$&=!#@9300-),,01,,+*)$!&)%')-1-&$($#%((')(#$"'%# ""$&!"$%. $'*$'##""%(%)$$!%%%#"++# '#" !#$!  !%!%%+*#$"!&+'+*&$-&*)-(+1/-! 0&2(0'"!_*+),../...-*++*+-..+-++)),../.,--)+*ǀ~ ~~~~~򀄁Ҁ΀ɀ  r삋ŮɼĹ˿¼ƥɽż»ùξ¹׼¼ЮԿƻкӾݿ⊄ÿɵ¼úżǿ̶¶ĺ𦈖ڛů־€ŽȾϾӿſû¾½󁃀³󆍌񇉃ک쉽񁀂ý´ýþ;½½¿¹􈍐¾þǺн˿ı炔¼̾÷Ųձ􊓃􅏁ꀆ߶ℇϿ񂂌¬¾ΤʽԁĚѹг䏳Ĺرøٻރ쌘񋐙澻׻픂ہҁĻȲ¸ɼ̵í˩•퀁ϼԀé +\`\XVWZVUX\__b^_^_cf43674_\\`_\j6589;93ZVXXXYTP[\Z\_^ZY]_\]^\Z_ec^ZYVVUWZY^dhgeea]\[WUXXWVWXZZYWWZ\\\XXVWVSSVYZ]c\TNJLQYVOMHFGFDEGFIGCCEFFJPQKOQMLU[_d_YY[]``eea_edcd3443245775669>???>=<==;8876ihcYW_ebehfc_cggc^^ab^YYYWW`b][YY]abcbbc`dee`^^bc_]^_a2799446542,eg3de4443dfecca_^__dknjb]^`bbh7j8<:njggghiljd?cf57996e```adcc\WW[^YXY\^acbacg546:99788:;=><98;;:<;>;_X_5788776554543346:=;:9::93:;;=>=<:9::7677665689:;;<;69;<>?@==?<:877788768999:76678866679:::98:;:;::99:;:;:9:;?>=@A@DACCEEDCB@?@BA?@@@AABBA@=:878989:79<<;:<>>:79987779<=><976:37;<<<;;=>? >94<<<84]i^b46542][WSSUVTRVX\][UXXW[[^_^bbb`ZUTTU\Z_65578igd_[UYagk]V]_VWVRUUX]^__ZWXVW^`\^\[W^f[\^]`[SgVVUUJFRRU[\^ab`XXVRUUOTYUTX`][]ZWSRRUY`\SSXXZ\ab[]b`[WWWVTSSPOLJFGQWOLKGEEEKQSPJEHKKKMQRTWX\\XWQINNQUWUVWVZ[[Z__cba^\XZ]^\YWWXRKRWWa^Y\c__[ZXY\_Z\`]T[XH8k?QZPLOSROLLKHMOPNIHHKQUWXWMKE?EBAEIPUZ\\[VOMKJJHCDDILMKJGINNLPSWWWSSX^ZWSQPSRRYYPSZUORG=GOQU[WSMFMPJDHGHGLQPRTZ^aa^]VQTRSSWWXWPGFFHOLHJLOQMHKMNWYZ^aTDCGJFIRUXLJMSSOUVWYWVWSOMLHGF@?><=D@8@EGIJMSX]]UPS_RQQTUVW[ZZ\QT[ccgmd]OLJ@CHJX]YV[^[b8h@AKOKBFJRTUYYZ[[ZTQRRKNNJGDGF<W]higjyyrupf_bbodVTVURMUf]ark]S]dZVVURTUUNQSLMJ|mq_UZ[TLRQV^SUXXRDGGJOW]^TRG}GKJKLgIVhk]SW`dYVUWfjht{xcjia]YYaSOfmQ_hjjec]VSNMUJXq}r{GLOVOKSH~zELJysrdgFK|ft}KQTJtkrPNx=?8[`n;yKGEHQ{nGHuonpzvnlmknv~~xwshs}{nbmBD@EMz{|}~ztFD}Cykquuxply|pomnmgjlkf^U[YYZ[bnldZn>=GF}LYQF>CKE>BHPH@@CQQG@tpsWW`xFA{wvzxmdfdW_kfrugti}O\g{}zhPQ[WrptxrqidNAGKQKNSTOID=:DCCLSPNZZIGDAE?<;DF@A<99BBB;C?;GBEDC<=<:733:AEB=@CC<76335`_3966:55789875645422ab11356974459:<<=868862`ba`a`]b22`^bddc`__^]]\[XZ`^aebcabee_\b*-+)'')&&'+-..+o-,+)*,-*3+(***+'$,+)*+,*)+,,,.,*+0.++*)))*+*-02101.+++)&()((*,.,+++,--.++*+*('*+,/40*'%&)0/(&$"##!!"- ""!#')%((&%*.02-))*+,,/0..10//J00/*(*,,-./.,--.-,.0/.,+**+/2.,**,..-.-.-.--,,.0/-+*)*)+*,U,-,,--++,+.253/,,,--13633201341.-./---,++,,,/)''*,)(*+,--,,/1 +), +<)4+)%&())-0/,./121,-..0{/0/00-+))(*'&133/.+-036/*./+++'))+.-,-())(),-+-,+&(+'(++-+()((*+,-'$*((**+-..++)(++(,.,,-0-+++*(('*,/.))+,-.0/,-0/,(%$!~ !&#$%$###'*,+'%&()(*,++-.00.-*'))+./-..,./-001178:9631-.00/.-./,(,./74127530.../1.-/,&-,%8 '+&$&)*'$$%$'')'%##%(*++*&%""#(),+++*'&&$$"!""$%%#$#$&%$&&'((&&)-+(%%%('&**&&*'%'""'&(+)($ %'# "!""%''()*,//-,($''&&(')*&#$#%'#"$$%&# "$%*,,-0) #%"#**+"#&((&**++*(*((&$"##!"!$ $&$%&*-00+),3*()+,+,.-..'*.1/252/'('"$''--+*--,1;"%*)$ !$)))**,-0/*&''#&'%  "#%)*)*)'(($%%&(&%#$$#$$'(&#%&%$'(&%&&%%$# !$')'#'(++)+--(##$!##"##()*'(&&'***(&"#$-2.,-+('''$ (!"'('%"!3% !#6;/1'-010.-,'('%%'-00,$&*'&%%(',/.-,,*.,++,+''%#'$%*&\%&).*)'$&'"!&)%*/+#%*+,,++.0-420+)&(*)&$###$%$&**'&)+,,($,-./112/-(**+.-*,((,-+,01.*/,.10/3G200/1/-12101445646;;768<8;; # =6268633433138423352000+,//.--.0144310.13.,.02310/--10//13742455657;77:8545%$%%-)!-::.;*9:(&!"$('$%$)'%%#)-,*((,%!$&&,1231/.0337521120013986676455]3059AF@A??=821267754111453222535798579861124569:97679:;@B?=>@@@A?@CACFFHGC??@BCA??>99>=<>@A=;< ;:9744255211.*'-26;=;8999;;>BDIHCMURUROYZWPLIKNMLOKA??K]\_5f]RKJJKIHFAEIFGLRQOT*,,(==DAA@CGIABIMTZPLJMOT[QIQTJCB@@B==ENNNOKDBB?>CC?>DFFIMVOFE?@@DDCCFIHHFGCEFOTQSRQNIKID@:;>8679;;8783+$$')38777889<:64234//7982/,+*+./2,5714=>:63314107437=@A;:::<9454///'$#(OPVYTS11/0.13^X01265.,2=80357:3ZTXWX]459;675585358;<@CAGICDB95428=>=;8;;<;<>;:85:8424/,%!/9CCA=:8:,"2C?=<>?>:>OKGHMJGDA?DD>88;9:966;=;9500//131-140.145537;21110.49432223246:=<85453119?>978;5+.9=84677625=HCHC=>=ABA=AFEDGHHFDA<:117;420.,$*+,)%%&$#%$$##&$ ""! !!! 05;;9;EC?C>9697A:0121/+/<36B;4/7<4121.///+,-()(C=NP>6043.*/02913330(+,P++275K0.'IGKK(*'''D3E)1<=3-/470../9;9BFND4:;7566<0-=B-7>>@=;61/,RKKI+0)P4V?GH>D(,,0,JM)-'JED'*(A?@7BFHFIMLJJFCAGIH@:AEKIC918#%!$)G?DC?FADD@AAB<:@FA;;888667750+.--.-0650,8 %#@?'.*#!&#!"($ '("669)*0;%#@?7),3.:9?I@=7?E8556<>6/18834?I:3737630..,+*+*&<>A;=(A(G;N*I-A)/33;44*63.-/(*,+02)%JHFAE)(-,+3;@;=,$@97@&C;??8606 #($>=:<"%>? @=874!;8:69?DCOH@8>KGEC6.31:&..%C(,'('$E>:7#( @8< >%=4201.-()=50+.*'!#)#%+,'))((#$$(*')*&%&+#$" !&"#.%) !%$%#(+$!"!#)#%''%"!# !$(&#(*!!! ! ! !"$!( **('$$$%%&(#"*&*)*-,,"*3 !##$&('$("! =**+++,,,--*,++,,--, -,+,))-+,/..-*)-ہ΀ ~}}~~܀ހ   񈒇Ǿĺ뀕셕½􄆊ɿ뀄܀׵͹Ƚ»Źƹɀ̿ģĦʿIJʸɼ܀øʱ촮ǺǨѧמ⮻ž¼²À̾º½٘ךƭឭƿӼ¸좿úŀſӹϺɵڀ󃈋Ӱ蔃΅됒ԀȽƷӿ¿Հͽ˾Ŀʀ̽ŹҀ􊔛¹ú»õþˬû؀վƼۯ˴սБ݀􆔍烚󇛣ۂѾ˺̼炃ֿݟϨҗɴ耂ݳ޴áż֑ͼºүʶүꄈ뿍Ϸ䈏兎񐍇쑇ĵƼŲ´õüÿѶȤĻ邆ƽ򫭜b󄔍\_`a^XX]ZUQU\be`^\_g2225:74e_\Ydmgg9=64f`[ZWVVRQV^_X[\\ZZVV[]^aedb_\[XWUTUSU[\]__\]`f\WVWVXVWTSTVXXYWWVUWXXZ^ZYY[]\]]Z]if]WQJIHFEEEIMKGFFFHOTHIKLR^^[ce``^]`bf6jee`_ce55567873\[e7<<7988987633gfccb^\_``_aac<_^^^`_^c6=>:klkj65344dad33ed385dde33bde^a\chedge_]aggeg54589;:=@=789::785aWVg67765557776688::<==>?=<<;;;877f6=::;;:76669;;877:<;<<:9:889989:;:9=>;<<::8976897767::88689789989:;<<<=?<@@@ACB@B?>AB@>=@CFEDDB@DDCB?>@?==?>?@?A?=;;<@B?=:::@=><7585:<===<==<=>??=:@B<==<;<;::>@73g_22355676aXTT\aUWYZ]YUVTU]bdebak66cWSTT\b^1c388aadli]e79d[Z[ZMVMMRUXWVUVURTVY]Z[^]ZXe577aVZUMKNQQQMMJFHJOWY_g_RNOPNPOF>>B?BRXXYYTUWURQUWTTXXW]ec\\^_`]``WSTQOMIIMV[ULOKLNNQVTYZOIFEIKIQSU[WUVVURNMMRUVOSVWXXZ\]adgmmjejh_\Z_`[XTH89GFER[[WYXUWW]]_[Z\^ZPPF6klBPdaUXYVOOH@BLKMMLHGFJQTW\WNNJJKIJMUSSRLEGKKQSRSZQMTYZUSLMQTU[[^_[YYWVUWVWVUWWXVOMQNGJLHNUWW^][VPOKGCGGGHLQRUZ^WZYVUZWTTWZ_ZVQG>GAk;ENPLMONGELY]ZST[]ECKIFDPSTPQUUSNPSSOQRQSPLGJHGIHJKFFDDMXfNEHLOT[]SQUPRVYYX[g6dYLT[Z^bcbXGDKROOIO[\VPWWYilHNTZXPM\eecdjc^cZ^hbENNJMTX`YKC==ALSQOPNKNORSUUTSROLEDBADFIMPPRZ\XUVVPMQRLMKJQVURPMLPUTRYVPMJFDEFINMPNPQNRX[QPTSWQD??@KYWNSWSPOPPCBFCQRPRVSMMQGNS9_BOWCHMNMdb`]\PPRNPRVXWVTOMQ[PT_d_VUUQSPPSQMI?hFWICIMQVZYUQLKIDBEAGPLEIJJHNSTXWSONKELQONPQOMJJMJJLLKGFLOMKMOYWJFQXZ\]\[UKINQRQMPSNLPTRW\WTPRSSTW\^`hhd^[]XTSWZ[]^_bdjikmihls?A;97r=`)(=O_S8?Aib^am9CF<@C>AH>aACKJIC@BIPJEGHD@AD>BDJRUURQTUX]^\XYZY[\^ccdeeb\Z]`^XaqurtruncY\afabc\YYZ]]ZWZ]^YW]bdeegdaaeefkjjlgb_djoqsnkkkprstuyvqu}|vpmox~|yuqmeZ\_[_bhmgfjkihikhedbhhcaa\\_ZTRW\ailoqsrnmipwyyz{|}}pt~{xstvz{~~|xtssmnu}wluv}||y}~ys}|rhltx|{lhw}}wy{nmpnrz|wzvjf__jfgod[W[aZOMLTUTTQWVQRV[_SJGEHT\[[X[acZxGOMT]][RTSSOPROOLJOT^bUTQNPV_TRX\\adb`][Y\\\ceXOOOLEFONKIIMQQHIPWSSUU[SV]bl`X[VWVSXSV\bhlpg^VZTWbbhfda_]_cd`cdccddggjqma]`db_aeb`]`aa[\\\Y_ffcge_a`_`]XTB;\y|soplkgoo_mkadinikq~wrwsjgfgdccenvuloutqlicfaUQY^][\WPR[\[VJKPSNQVSU]]RO[\^bYVYSSWWZT`_SSZYXWSQW\YTPMQRKMYlmjWYgnebkvlYWWVT^djsz|{ic^afknzwopyxyzwc`g`\ZXX^`_`ZGObYZUSXJHNQNHIOU^]G;AEIIIKE?JQVVHDFNRAXb`g__XLhRydUTSepsvuqjeosrmijb\]`evpZfl^][YQNIGKJNIjUgvtHI{wIpaSYHELO_]QVMVNLPVLHIPWNLLHILQQMN^^[bncikY^zc^lwmpukJKkhi`_t~BCxlj^Wl>HAtwqk}IGGFCv}B=>AFrllgnv{Lxmht}y`Yk\rGSZYLIJNSKudrG?mhrliFuf`ZVPSTR}=iXZROLMMLXTNGMNOYLKIRVQQUNKDUWMRPKFHNJFPLMJ@A>HLOEKU`ZRQH@?INUQJKFFA@GHPPOOWWVMKFKNB::IQPWF@@NMNH?AAED@==9;HJOTJG>>KRK^87\Ve5`USPMDda[W[][RVIUhc3<@Bb::6>USV_SWYZ03:99<<>??=968;?@B@==<@@??AEC?CIIDB?@DHGGEB?:467678:=::==<;;<9988==:651142/.137<>ABCB??<>CDDGV\[VRRXa_XPIGMSOG!UK@CMT\]]b`UPTSJJLOGDABCFMRLFHLJHD@@CJG?FFIKIJIMNICGLMLB<@CDHG=9BQXUVUQOONLRUWYTOHIMG@CIKF@@DCDHJGIG@<99?=>A:41596...223325742455*#! %187636;=7XSOB*-,1785-014211...,04:=440.06=51167;=:99:9@>2-/-*#$,.,VVYZYT-/[SPZUTW031+,25334383Z_`_\T]7:<899:<<69=<>=;=;=B>667:968:;989:9544548=<:<9785575/,"!3ADAAA>>9>=7=<89>><<<;BJGACGFBAA=?:117;:995259895./22*.20386//8779123334353:6/25422/.374/++/2++4A=:.4=?9:@H;111/.47;>AKSH<6457:=DGGLNONHB>@DBCCA3471,++)+*))$!)#&$"$  #'* #$/-46:FIABD:6><5=0*11/2%7>4C>841?7.,11./.,)/,&%D?M_B866443---27542.)*+S,.79615,-N;CKI+/)*-&>H$/>;11156331/:;ACK&&%&*K=>@NLGJLLB?EMMMHD=7>IHC>709$B!&'>@A!"CAEBAGD$#DED?:A?>@=AGC?87A>67;9873//1)*206=:4;$% !%-$!#$#$&#"!&&!@99?710:?;??>D858640;C589<;3>&%;(B+4=DC6*(%$EC-8A@935-$9#-=$'JI@>80/37:6>%A2245:3136=-&0.@?..27:4.5;3332,+)&))**:.9H@&(CAG*D2,6)$-0=<,0*0-))/+()-/((,FM(K'+..+-7404>97<00A5/5:6:=9')75742;C""A993-8!&":<;6?'$"""BL*@;9@LFDA2+72='+.0BH)('),(A?8>)$:7>94&>64//++,+C5,,))&&%$-+'"%&&.%$"'*(')%$()$&%%!!$#!%%&$ "$'"$'.-)'" %)&"%!! ##()&&)''!!#%"('+&#%!"$%*%"#&(($--'&$$!01.*--,'-$*3- 2,%$%! "#++  )+))---.,+),-+,++),/./../0,.-+,,-,-0,.+++*,̀~̀~}~ڀ  + ô􇎓쉇弴Ź¿̀Ľ¿̶ȼʿͻҀþսöĕ㿞˻ƽҽ̀ѻÿƟ½ʹ̽Ȭüķοƶ޸Ǻļü³ͩńĽ¹ӎ񋮲ǭƀƼƾ¾뀅·هȾօ¿ԾπϺ÷ƿ쇙úľºȀ̸ĹýȽ̻Ḻ̌邤ꌳƷ⁔Ⱦ瀈򁄂ѺȾǾŸܺоԛ׻Յֿõū˾ż󐧵ЭŧſûºǾ⾿􉎑йʞ󐚛툁ƿ³úȽºīѷ溿»ǯلԺ򀎒Ցھʷ󃎛􄓓d`bded^^`b\TPXaegfde344244674d^`c``blhcedb`]]ZTPRZg\SVY\]^[XUWY]`a`ad_\``\XTUZWXWWW]ebb^^bcb_]WSQSZXTWWVWVZ`ddc^[XWWV\d_`bdd_WPIIIGFJLHEDFGGGDCEHNVWSUW_dbbfeeijfc^[\WXXYY^3575-PX\\`3589877655f`\[^_ZVW_fVW[\XUX\chjh`[YZZXZ^bb^XW[af^ZWUSQV\dhkgb``cd377khde59L<=<<:9:9865g`acd`_eb^]^__a_\ZZ^binrrmkn8863474g565h4443dceeh5789965f343fbbcde"hh4799;==<:;=9546886g\X[\c478666579@;@@7679;8889;=:7j]b8679;:988:;<>>;8:::;999aUOc6:987867::766:768:98867888777899:8;<<>><<<=">?ACDEEGFGFB=<<=>>@AABAB@?BB??=;:876::999::95;;8::889;<><<;6895:<=>?>>>==>==<=?<88:99:;;887Weg303577895cURT]c[VWRQVTVVU[^caWRT[df\VVUVQT\\]ccba_\YZae]W^_TOQPOOSWVSUTRSUVVVXXZYZURX^b_VQUUKHMMKLMPPNKMQUUX]WQQTSTRNKHFEDHTagb`[VZbb\Y[_XRRTW\`_\[]aa_dgZSQLGGLRWYRMUUY[YURPOOIDEBHLIPSUYYXUVVUSSOOPRTSS\_SKX^\WZce^\`b`bb`[[XWGqs\kUFNTY\\UXPUXca^`]\TOIELQW[fhcv`QOPQMKPNMIIGFEGMSQQPLPMNRPOORQNNQNNSPLDBGLCEXieZQEGJSUSTXYZ\[X[USRQRVUVWULINRQTZ\Z^\WUROOMKDBCLRPORUVY[SKMQTRVTPPOOSRUVWZVJ;@DIJEBHIKNMKOROPQJ8;?BDIMQRSNPTRRQQSXZ[YSNKMV`YKBCG@ADEIABHKKOPSYVQNSVWZ^_^]an:cUVV[]\\TRLKONLUXQVZ\WTPPQRTUY_c]^VYisu=pi^X]d5bUUNN\[VQVRKJ96AGGHKLLHNVVWVTPXNHECA=7;HPSVYYbfgii\YVSIGNQVTSQOHGJMJORNKOKKGEJMRTSNLLLPRSPIJJMIB>@JQF?9ADELNOMJLMZdZHRZ_[[[Uc?x<7<@/2B9DGJHDRROTQLJGNSQRUYWNJVbZ;dk@NLMKFJIBAEO`VKJDADJLMRUUSOLLBFNJJMJLPNJKPMOPRQRPPNQUTPPNNLHHKKKOOMNMFFGGHIKPRMMOUVVSVRLILNNKHMSSNKPRRWZXWVUWWUZ^^`ihb]_\VWWWY^aaa_\ejhggoru:8;;h9@DJKHFC>EFEB@A@BFAn?>JSRUXZXWYXZXYWVYaabegnrmeaajpnggghv{qogacfonijgc\]_\\\]_ec\^_bdfhheabchojknpvojklmnopstxxwrpqwru|}vpmquxzwnmif\R\``ebbgffeedehkjnmh`]gedfic[WX[`eipv{yvupoy|~wt{mp~wyuvsoop~yspkilgeekosz{|}}omfbemtstqv}r{~}OLIJM|x|~|z{{tpjjtqljgdbcglj`]\XSTVTPF}NVY[TMLa_U^ghieZVPJN]_b]UVPQVSSQOQOMTNKPUZbceghhefb]]`ca^_``ZSQPQTMS][IGKPNJwzNRRUPOVZXWUY_\YQW^\XQPTTQUZ^bcbacafge_\YX`ddbb_Z[^__\^dgnokokflkecdfheb]_`cef`VPRX[]cddgfc_ccd[TYeotuwjggluytg_[kols}~spjgknmlhab^afbdeljhjlmle^\^XRQTWUZ^[`a^XWSQKWZ\_YWXLGOXWVVPRSVTVVY_a[Ua_WV]^^`\XXZbdZEGYkac_goknr{|sy}%wjafkuvL|j^\URow|zv{}~z|vsmj^]YMHLMTVRUY[`\ZPNW^caQLOQUPSU\227UXIUis{zumeeebig\Y]VZMImqrdc`gg`TRWRO[[VSaRIIKoaUSXZSKFDKSZ_MJPWD{E]cYTMSDG~pp~HSSXYJrLfcONX]jd[W]aivwmcZ[WSLIK]Y\dYS]c_adh_UONKNKKTUMJVfdt}HWN}XU{zRQGIJiegtDGEG{zFNzJKFG~>93bY[`l?HLLPOMMKwyvucpurxsruvuq{~}stM}xrigmr~{wnt|Hot}CDv|}}tkjpquyDEofwzpfpupspidba[_\Tcpvv>=t@?w@CFFxw@CDCF?>=jg[W[[PMaia]XTPRUPQXQLIIKRYPONNNPUQKNJQYYZVTNHKRLGICGUJ@=;GPLNTLW_RPKFKKG?GG>=E?BIPLKRV`MQLOM@<;;UTSGHGNOXVICDHHC@AahBD@ADBB?FGI\i:eTV7hVWVNB5aZUc_cUXUSb;:=@CP+=:>\JNJ[UPX15:;;>@=>=764`^3;:8:Z;8435543`29727;756885444056321^]`149::64588:;<::63443dec^Z[^_abdc^_`ehgdfdedba^_^\ebbcaccc/--///,+-/+'$),,-,++.+,---.1.-././..+(%%)1+'')*+,,*)*+,-..01.+.0-+)(+)('''(,,.--2320/-*)(++(**))()-.--++**+*-4/-0232-($8$$#"$$" ""#"!!"$'+,*(',/0/122320/,+,))('&(%'&'.-++,-)((,2('*+))*-23340-m+,,//-*)+.2+))('')-2333/--.-00//0,-.0.,/+)*,,,.+*+,/05:=<855//--,+--.- +./..10]0*+-,/1,0-(&0  ' +$/3,)+-383./-,.,,,-1121,))+..,*++,((,)&*()+,--,02-(-.)'(+)(*,+(((')**)))(***)')+,*&$))%$&&$&'()(&&()()-+()*++*''%$%%'+02.,*(+01-++/+(()+-1/--./-+-/'#! "#$%&-+-/-+**((&#$#'*'*++/.-,,,---**++.--23+&/5426;<64542320..,,&B?08,")+/10,-(+,21-/..*'%#'G(*-111@0&''(('*('&&$##$(,+*)%('(*(&$'('&)&%('% %!"+2.*("$$))'(+**+++,(+*(()(" #'')+-+-,*(&&'&&"!"&('&))(*-'$%&)(*&$)&%'')++#!!$%#$#$''%(*(**% "#%&))'&()()+++*)'%&+1-$ #!"#%!!%'%'()-,('*-,--...071,,,//-.))&'*(&./*-..*(&'((**-01--),48820+&')(%% &&$"&$"$!##$&&&!%**,+)"*$%%#!$()+,+13335.-,*$"')+*)('##%&$&(%"%%%#"$%'((&###&(''$$$%# "*,&""$$(**)'**.2, %*+'%&"*="&.*$##%$"(($'&$# &*'()+)#!*1-26&#%$### "%.+$# "$&'*++)&$$"'$%'%'*)&&*)++,**))()++('&&%$#%%&((')($#$%&%&(+)(),-,),)&%'))&$)++(&*++//.---...2421663010.00/03221128;977=@A =9667:<<<=864443234762011/0/,..022/./0.-01221047964442002102/-/02245645734:59=98(($!&81<%+2,;918;!" !6"&((&%# $%%#"""$&%=$#,1/0230020211//165778=@<666=BA<<>>HKCA<79?@@D?<;==@AAABEDB>?BE@DIJD@?ACFGE??<;4.6::<9:<<:9::9::8===769668<841148:AAGHJMJKKPJCB=;=@DDEEFMJCFJJLS\0-++-XWWYYYZZTTPIGFGLQVSLKKIJJHC@>?FE@??>;9=BA865300542,MQR/674+$&7818>A@=420.XS19;;71312533311/+0/URMNP.048<<>>==:;;88<>>;<:82,+-.0*/63((.21^W.ZWT[bTMPRW0224/.6;866:>:9`V37<9731563369=<;=?<868:8757::;<>;7479<==930156699:==:5:::3.19>@CC:;<@DEHJJB;43>@@ELKGC>:?BBB?;=:=>:;;@??@@BC?::92/0454797<<:5543W+458:554+)04210./1403257732:72267652216<<3%)7=697>A=ACGEEJKF=7:;ABKX-G:10()AMJCKZSMLKECEFGHIIFDD@@?=630('% $#!"%&'$'"&''!"*/%.7/.1.,43/-5*#%BG-V?920331+*',027+*.3&G(6:31.1)(F@?IN(/.01'DH>+<8**03<81046@>BA@@ABAGIJGLGE??I*NDD@;;>?GGE@8EFCFGGCCGFDEC>:9<;@?#$C:6?@;4;>:<:5/00*18;; ;!7!#"99 !"#%$%$;8;6:A976;=@;:CC?76769;3/1)062<60:#+;FI3/. />+<.>>92-*,+&$&5(+F8@>8--7@:@DE<65354/-175,--4:352;;45967*(&%$6;#$/3F)12:@8.&//%*2)-6=24;'.@;;B!>9!C:6<=<;;>(:59>IGB=<63/=&*+0IDD;E).,#?:6?#A>>;;$"75/-01*%261/,*')*''+(&$#%),&&&%%&*'#%#%**+))%!"($!#!+%!)&&(").%$$!#! """#'%$&'.!&"&$*'% " $$)*! ! *6#!  ! !)0-$$.%(*$1-*0,/),+'/!' 0/ !",**)(**./.,+,++,,,+*,--/0/101101..-+/-.-,.-.ـ~~}}~Ѐ~Ā +  ɀû؀􀇈ㄌ򅈊·ȀоĻ懐żҀƾøĸԺĸʗ墳ʹǿƾĽວ莦ƾʬʽۀϿº߲ƽȸǾĺͼ񌘠ʰýĺ¼»̑σѼüѳʹ€ź¿õĿɿ򲄆ψ됕Ŀ˽ʹـƷ̿Įմſ送ȼĮǹ厢ꆓýǀջļʱм²ǺŀԹէދοв㮚Ńƾ炎􄌇򃜅󊅀񂎅Ҧ񂍄ǽǺ񅇃̿պʿʸɂƖΠ˨ɳӇŶ­˶ףȤʹɖƻƵӋƺ䇋릚䙜㭈Ҧɵ􀜟ɽӿІ낋ȼŹÿ­ñ­ٰͬŅ㠓ҹ􁄁gbe4fddc]ac_XQW^ae3332c`f58:763ggcbdca^`caab_\XTOORTRTVXXWWZWWZZ[ZZ^ca_cd`\Y^hebb_ZSPRW]abcdca]ZXUVVRPMOPRX_cihc_YXYVYd_]_`bhb\YVQMJJIKJEEDCABFFEHOTWURRU\_cijfca`\ZZWVSNPY\/289\[^XOP2554222c^]\ZYXXXZ[[ZXY^^[_cZY^___]\]ZZ^`^^]]^[^_\]^]Z^bZ[___``acfg]XZ_^\Z^Ai89;:;98865igc_^\]ccbca]_a^Z\`eajmijjhhgd`\[acdhj67753244c\]c5geh45geefcdcbcf4466689::97b_d33id`^Z\]b4775789=?BB=:>GD9e_f777gYc9;8gei878<<==<<;;:;??8679:76`VYY]d68654235765445669:;:;<=;968998899d989;@BCEBABA@ACBCDCCFGEDEGE@<668<>@?==:;97633001238==;?C?=:887768;99644;@==;8755413688;;:85;539<==>=>z=<:87:::;;<;:879:89;71588894\\\W[_`YWVTSUTPKP[_a^SLRRX`WSWRQQVXSRSYXPUWUWWXY\aaXNRSQQVXVQRRORSUUZ\XWVTRPRWWVSOVUMLNMJKLOPQPSSVWZYWSQPRQNLGGQU];?:lYSepoiegWQSSQTYZYZ^aaaecZSQNKLTVY\WU`\[a_SOKIKHEDDIQQSRTZUWXUVTPMLOMIOKMYWNMPOL=yO[\\]`_[XYY\\`XE?q~XDKGLKKOTMTXZ\a3d`YTRMPQOPH:?gdOPPRNKNFFGFGBFKMTTXWSSRV[\\\[VNOUUURNHD@LW=gHOWL?>BKNPNLOUWYW[ZPLMPSSNRRKOSQQW[\ccXUVROHFEA;k@GTULKLJLSQMLDMQPRQRPPTWXQW[TPKPHIIGFEFMPKHIO@<<9a[e=FKGIUXQNONNQTTYYW[[SSF:?MVP;=@HHAJD99;<=GMONQUac[SXVZ`caaXGd4A(1IO8?IOOQOMEFGQICSXPNVZVHNX^aYOMDFIHGCHULRWRVOJDILNPQPWVVSMKH@SXMMPMNOLJJNIGFHFDFLOQWTRQNLLMDEFHHHFFDCEEEFEFEEFFHMOPPOIINPQQLKOQUSPQRTWXXVWWXUV[^`aba_]][VYVVX\bbaccdbaacecekgm8jiklnoojhgbbdffha_aea^_^[XXYWS\`\\[]_WTTTUSVY[\^^chjkidgfgdcc`a`\\^]^b_a_abbf7<=>?pg9@8dg639724c331_MLb<$,Z>L[oGKOLCCF;ar~wkY>>=n??=:^mf97|srifokbi|p\fiddXmn]Rf?KwlieMusYOwwfPU\IDWiv|fQR`bVK=FcGP|\~ibivnlotukfdag]][_ch]Y_f`rol[W_\b]ZSKBJ`MAKGpPop[fe\]VFKEROaYiw~nLcsmdY\fqnl_[]Z^f_XUYVMEKJE{hPb_>xILIvYQWMDFCrTNirVGPZJZGych\SPNLipiWWPFNN]gaIj_W`kpzBfhzym][]^adj^fusidios^cFWM~xP]gRDxxvkirtrp^fsgeiKDwrob\wDKJUPDK|qMIwqrdcswuttxy{xo`\`b\PPQOX`XUVSU[WTOOMNTQMMOLILXTQRTT\\\WSMMLVSSO?ANORH98A@ETFJYJGSUYRJ@?IDAI@BBB?CMT]FWRQG=A73FKJRZH;ADNQOROTRHI+[K=?8=;?=A=AH\m7aTgeTVVI?82QUW`aYURJ`AE@>IKB9BOdWWS_QM[038;9??<::763bb`2203784T32b`6414:537:<833651362b21]a3659:8457:=:::933544dbeb]YZ]bgeb^_behf4ffighea`^`^^bcffc1-.000/,-.,)&&*++**,//,./-+)+.-.0-+*'$$%'&')*)((+,,---,,-00---,+)+0.,-+)&$$'+.//000-,,+)*)(%&%'+./11-,*)*)*1/,-/040--,)(&%$$$##"! ""#')+)''(+,05541/.,,,*(%##%&%%)&!,*+,+*)((*,,*)()*),/+,..//-..,+,,,--,.,-,+***)-/+,.//...///)'+/0/,,M0//-+*)+.,,-.*+,+)+/306::986532/,+-//35-)*-.-//./.,-_/+*-0/..+,*,!..20-2001,)-+-/^(-0/2572//...,)%(011.)')(*.*'*(((*+)'%((#')()**)*./*%()((*,*'''%(**)+,)**)('()(('%*+&%'&$%&(()())()*+,.,,(((*)'&$$+,/!6,'099 524+'(('),-..,-.)$!###'*,2//32*)&$&$#""%*+**+0,-/-,,+((*)%*()1/**-,-%I/5533420,++.-0,#7;(!($'&&(,',-.//0-*)*(((')%20$((*('("%&%&#&)*//0/+*,./-+*))%&**(&%#" &. 3"%)$ #'&&'&()*+*,,'$%((&#&&#$)'&+-+/0))*'&##"!6"#()##$##()%$%''(&'&%&()%)+'%&'#$$#"!"&'$$%'525#%"#+-)&('')*)-+)-.+-$%0, 22% $((,610,-=?5,&(.30,"#)%+&"'//,+-+.-)%),-)()'')*,*'#"),)(*++(*23('&*%(-)$! ! -/ !!%(%)**,+#+$%"!#((-//34:@<7741*()*))()((('$#&&(%&%$##$&)&$&(,)'&$&'&$  &&!&##'*)+,0/+)*'(+**)%=/+),#'''$$ &!(`,'%(+( $+-/,%'!!""" !*&)+&'%"#&''((-+*)%#"*.'')''()'&(&%$%$""')*.)((''&("#$%$%$#""###%$$##$$%&( %%(*+,'(*,-+ -/.-+--/-.124.211.20012332589742475696999:>??>987324557324542../.+01/11230...-+-././/256764533113231/120032325647;8$30+( '6#+3=&&(&"8! #! %((+&$#!#""!"$("4@#)s./27310/011-,-3:@:9<<=?>9797330/39679:643567758:;<=@B?>@BBAACCABABA<<=:978<><853224567:>A??CBCHMOOTY]_UTWSVTNEBED@98>BDCU1*RX1XFDHA:<=:<><=ABKA7>=<:6-*.49:?DGNSOOQL>9=?AC?<?DLRJF?6699;<823445102436<;7==69;=BDHB:70.005;2-/53242,/66RO/16601ROMCN4<97;?@=;9:::840/578=;63;??@;/*;A@@>:997<::?@BCHGE?<:?=?@A<>E@;7857?;38:788678;<94177=@BFD>;;=<9=CKGKK>1/8BGED@C8+.28<9::-28<><@>@>:>B?>:766579;67::5/,--352+/61340/+G,63114635-K-5:<7654417<<><9D=>@/%2A@?=>===59<:=DA@<7;@BIGGC=1&&%(:MMBFNQMJJIIFDFFHIHHJJJMPIF%"=92'"!$%&&%"&$! #$!"#$!.+#+<>DIAA<<9HF**((&DE1(:8(),2<4-023;@A878//43+)-53751-38<>DA1-,-QF(-*L*/,MHJOa287=6OFHM-)CEG)8-QOIGU)FHH+K=;5775;&%$EB'+*HHF',(&KLFDB@*'(49%*-,,+,.*JAEJDFJI`DFKE08C@FFIGADDILPSROA6?G&RI?ABD<;BKII=8FIDB?B8<>?DH%$KD=AHDBB>:7>@<>"'$@9;C969=<>@>864038/+3788!6$"!-50!%;37:?;<76:836?G?269780;;2*4 .133'?;-O-:<6'03$%-8=@5+,68-$!2&*?/AD403:779>@9764723246:1.384OA>=1142611.)%)8+$+)9/=>,6;440'I+&/*1-9@G=*;B;6018>?:43633520//.)&)+&GD5,M94P&?)*&>B5.5,%'(?.+;I1$+2&1&B8:50-,,<"B15A@6-./123835?>736;@14&1*A>B)2:-H?A#D?=@<9>?9:16K=569D*&=:<60?#&(-,$'E:I+)@=A74?BB<>CB>?;1/230+*)&/2)(*)+.+*('&&*(&%'$"%-)'(((,+++($%#))(%&&($!)"#,# ''+)#" " $(-(&%!""!&-"%&#'$$!0*  *2,"+.%'(!&))--))'"-%$$"'0'$$#=,-++*+(+%.-..,()+-.,.,-,-/01354531/,-,,-.Āр߀~}}}~~~̀~~~ƀр  ~ ̸ʣº¾ʾôɿÿȼ̀ÿĺͶű¶ټհ¿ɲ܁Ӿ݀ԲžɼŸ׷񑞥υйĿǼ;ñ랩ۄɸȸ€»¶˺óÿƞ掍񇉂ÿ؊Հƿư¶ǽうPĽ֔ƿĻиػſ¿Ǻ½žý¿ŹԾѾǢӀ˻ǤֿҽìƳļʹ釐僈޸ـ񀁀İ遅怅Ӷ¸ʾڳĭϲȻſŹ¸ΩŬډĨǺǯۃلԀïӾ˹Ĺ󌕅燓Կ߆êļİϽ¿ɬͰèՁɚ¥鎨焄̓Ҁ򂑑,ebd33edfedddc`ZUW]`d3ccc_d3444cc544678lfcfdjg_YWXURRQTY[YZUSSTVUUXXZ]ab_\^\XXai896h`^\`hke`]ZYVUUZ`^WQOOQWTTV]_\\\]\YX]\]^`_^XUUURQSUWUPJIJLKHFIHDGIRWYZZURU\^\\YUSTUVTSQQUZ][^^UV]`ZVb332b`cb[XZ[\[YZZ]^][X[][Y[ZWWX]`aa`[[]_]\]^^_`^[XXYXY[YWWY^`bcc`a_`^bed]\bedgije^^c55ggd]Z_bb^\ZY\]acihijiggda^_`^ZUTT]fhlmkib``egedf4_\^bf34433345432fgfcg43gjjiggffd^^^]^bc_YY\^1337889:<>?@?AEKD8cVNj:8fWIKcmhejj6768<<<>>=;:;9434565c`ZZ[[`f43234756688799:9;===>=><::99:;;:9:=BDEHIHIHEBCBDEDDCEDCBCC@;<<96777633322213678::88;;5==??=;;6676578;>88755423468:;:9689::;;::9:98779:;53:;;<==<;:8879:::78:;96\Z[WX]WRTWUZYUXPOY`_fj`ZWVVRR[bZTOTPOQQSUT[WUYYTTSNIKjJPRTUXXWVTWXWSRTXXRMOOQQUYVQNOURNJJMQQNLKJIKMNPLHHLRQRQNNMMOMILOUdDGHJJJRXX\b_Z]``bcgjkmfZWZ[Y\OGLQSVJ;HJPM>EHIHGIEBMTVSVVURRV[ZWYXVX\]YYUT]g]PR^MA@CGFBMJILOOFHIGKMKLPTTTUVURSUYVYYOEIBFLOMLEDIKIHD?7:G=af:BIKLLW]ZOLMMJPRXUVUTRUNJML]\PMVUNIKLQY]\QHTfaWWQRYcchfca_`NLIIOX[WVSVTEnrCHJHMNNLMOSUWWWUVUTWYVTW\lqaV]V[TKKQQMHCBAAEGF;UHc=CBKQSZXYXQB16HCDHLLKLKNUVVKJbmichcVNLMPPKGLPOQNLORVUMKJLOOTYVTVY\^ZXZTVWPNNHIGB>@@<:>CDFHNORTTTUX[[VUVWMFAFU;?I3FZ7CDDGIKLJGIMNPPKMOQQRTUUTV[b_^\^ZYX[^__^\]^[[[X[\[]]ahc[]_chb^bhn?Criggeeffggccdfgfdccaa`^^_\WWWUYXWZZYXYVUVTRQV]_`da]]`fe`agljgdcegggdbgbbfga^bh7:99mhl;pg4747873b`abL;AG3%+D`hPnCB:B@;b:<8>?99oi8;7@Dr]ZUT`>NUSQRUVVUWSSblmqusnlfhhfhimhbcggcd\]bftzztplhjic^Z[\_]Z`ihcYY[]ccb`acglpiijkgfeaeffjlmhimkkpqstvvxvy~|wvsrsl`onhgeeklnprsrusrrkegltlc_bd^XWXY\_`bioonlhlxu}s`RII_ddgrxylc_Z\]YUQG_lr}xtuttvsnotyslkddhilqOMJJMOMHNNIMwngdgnmhe]VYXZYVTSOVbaa]ZW[bffbbabekkbXRVYW[XJL[[\[VQMPVXW]`^b\TSKT_\ST^`db`bjledeb^[SLE?=@HMNLNLDGNPPM~wroltw}OOLLOLW[TPY`b`YVST]UOQYeirpedqqunc`muqnnfbbfihjrssrqspkikijiimndhicbbd`cg`^bfdcdba[Zdd^dHiklqtuoklohgozkgehttxupw~bQXkqkgedR[ZZXWY]_dddgihgdgphbb]UXYVROMPTVSLY]XVPFrvMSPOMU[\[TV_a^^_gijfadgjmkglmgc^^nj^eeab_bcgiejnkjejz|rmac]Ydit{{y|~rgbouspnqrqpqtw{|FxwxD{`RVae`[L;4>BACFBxfnvz;`8;BEAqdflt>=|ojmmrX\irng\`ee\YlpVKdzS@hjbV@UGrhXNXRuPVkla^_a]TWM=Q}JGgivkeijjqru}mgde_\]]]avjckkVkjYT\]`cgSKIIWJD?nEbpkgiVI[eTLCQQOWjw{jWRosnddmj[XZZ\_XUPRQIAoGWNmEJwesHk]ODJIJRNGCF@C=JKDGKEHGQiZKIMFBDACANL:?DHHQWJ@<@84CGQXVH>CAEMMMIP1LJWKEAB>DD?>===CKZ__^a6^YSK@95RTYdb[^IS^9GACMO6KK`97BQ4WJ0236<9>>;89884be`d322685453fb]1871286347:9823754:4abd^]24594:89778;97878444872aac]SRX]_``^^e3dehjkllga][_c``ahfd0..0//.-../.+&'()+*,,*..-0--//40-*))('(((++**)))*+))*+-/0/+)+*((+//*))+/20.,*)('(+/0,(&%%+*()+,+*+,+)*-+*+...*()+))*+,+($$%&%" ""!!"&+,,,*((-/--+))+++)'%##$'%&&#$)*'$',+.-*)+++*)))+,+*)*-*()+,++-//..+,--++---..,*(())()+,++-///.,---,143//120220/+*-00/,*,--+-,*+*,/313434631/010,))(.556521-+,./-,/-+-//-././/121/0/0/+++*,//.++,,!% 0,%0.+%&.20/21/.,++)+-)$),11040-.0/11-/)).31350.-**(&,1-*(+)D',+*,*''&$"$$(**)++*))***)()+*'%%&((*,*'%%))&$$&()'&%%%&''(&$#%(''(%'4&'),3#7*(52./..)))((()*+,-15/-+-+(! ""#&+-,+--,**)&'')-+**+.-+)**+*(*)+0-+.+,,-,'%'().234566211103-(&*+$%.*'%#&,---,,,0.+./.,)'()(')(#"$%"#$%&&',01474/0122331120**,+),% $'')%$e#&&!$%$#$" %)*())*''*++)**))-.+**).2.')3& "## %#"%''!##!#$#%'))()*)&&'))**&""#&'%$!"$%#$" %27!%,/.&%&%$((-*)*))+((('0/)'+*'%%%(.//'"*420/)),0.2210//'&$&*--**(*)":="#$#&&%%'')**+*()+*+,+)+-46.+/(*&""$#!! !!!)$3!!&(),++)L""""$%&%%$&+,,%%395354-('')(&#&(()(&()*)%$$&&&(+)')+,-,+,((+'&'$%$! #()*,***+--**)($""9',%/$&($"' !#!#&((%&+'(,+,,**,,,/10.,*%$###"#$&)*&%))('&''$%+($%(*,**)'()#"#""#'+*,&'&&%""! !##%$%%%##$Q$$" "#"#$%&%$%'(++')*+++,,--.13100200/022344430121441114851224731468"%>879877786343334345321/,./.00/21000.-.,**,.0021//1431247654235664251168536998:80)(()+$"!!2  95 (()%$&),'84?B###&?21//8&031...0/./--7<=9;;;<:<:88::77357?@;<>>@DBCBBEGEHJHECA?A<6??==<<>=>@A?C>98;;733347999>BCBA>?GRYa`\_][VPQUUUTOPWLEPSVVRPT]VQNHC7,)(79:=BFE?:7444/,(!4@BKJFGFCJODCACEGC=@<:=@ACM0/T*+ONRLOQSQV[[Y,..[RR*QV-.,TX0\[RUWMLQRRE@<=?DC><6155541/1/2;:98747;<=;;:;<@@:327:772(*446741135557868621+TW[8?92289:97:AB?==;96.'!)/.+,*#'.13/WLGEA?EGGFDED@>?=>??CC>ACD?=@D=;@MTXI=<:=<:.44755578==@D?;;8356432.U235/-55441,PCH.10/+04650389788<=>;78:=><9;>=957@94;:8989:>?:?@?>;>HPPE@<694179BGDEEIID;9ADC@>ABBABCEFHLPLN&E@?>C#>.&(00+& !!%#"%'$! ###".##.;?FFEC=<;9>;31513&HBH27:772982-(+-272,)-.+&JLH<43:@:3*%-131;1$'.+"65)02)'(,7;524>=DG&$@98)K21&,1<=34602:<<9;<1079+,/43420*9@?HM@31.,)C,0LK+'(GJHIb4654/LHL)1-DHH,3XUQMKQLKK*,G33;G"")0*E?&*,PLKG+/KFKHABB!,%+9"FLNQ-,-+,,GCBBJKHHFEIF6,FICD@EMIHHLNUUOE@EKPNLJDCPG;?BCEA49F&%GAA88=AB&&%GA?CE@A#C9?"" !%$B:9=C::;BC@=>96690)225 A?"!"@$"?46:9-30159<6787:,.7=<6.3761/<=.'5=*121.#0'ANKF80)1.<-/<<31353-/&&B)%15;613249:>JB:767433324C95<=II0><2.2026;/*()2*&$;&4?:;=3(58-)$.*(.:BF<0/@@=8796;7518;92/>&)##@%4=::.J(#>0==:HL683@8;4;;@)-G;==DMP&$I(*&++GDC>9@8.5B'@>F;5$D722245-/'.2,.*#(0-++)-$&()f&'$%()*,/.-)&,*$%"%%"(# # '#(!""$ "%!!!%4+""$''!""&+" %*(! $$# !!$#!!);***&"'*,2/+/!(+!'' (%*!-.)+T.-)**+))+--+%$'*+..-,/013346640,+.0,-,///倃ЀȀ߀~}}}~΀~̀€Ā܀ ~~ ŸĽ¼ǿɲ쀉Ǻ낌¶и7ǻĹʽ̄¼¿ľºȼϷϿӀϹʿȺïĶìǴͱŸԴ¾ȷƼ퉔þÀɻ¶þʽ¼˽߼҉٦턋쀍洤ĆĹ׀ſ㵀ԫꘊоěŻʿſӼüÿ¹¶̽©׀þþĴķ߼ɀθϻټŽ藳㇇ľ󀋑恇񔎂򁐕킆Ѐ󁎆򀉋ȧ烊㇎ĀܠԻʻ釂ӭͿ̔ӿ˴Ҳٷ新ؼ˿ݿᗹٯȷŨɯIJò¿̼ùɵňϱҸ鑦€*ڄdccdcdea_ffjmlhaWTUXZ\^`\\dcgfeba3767:<=87nlld^YWVUVXWZ[ZYYYZ\XUXTNPS[deba^WRT[k99kb__c56hhf`_\WWTYYVSOLNWRQPQWYX_ecdcbdfdhha[VRDQPPQRVWUOKKLMMLIKLNLOSX^a\XVRPPPQONOJDFLRRPPRWXUHCDQVT\acgjeeeb][`g5464359;5cb`^]`efgecabca^[Z[]_cdcb36f``_]]`effdcabefbhnmjhfffhgeb^`aabca`a^\\YTWZWXW\^]YWVY]db\Z[`\VRQRVZYZY]]^\]`cdbcgc^^cee5768:76655665532cdc`^]\\_^\a`ZYXWWY__/1249;968;;<>=?DD95mmd7:89q`bhffkjcj5568878:::97e]^c`efc^YZ\]_ZZ_1122244789:899;=<<==>>>=>@AAA@@?BEHIKJHF@=>?@??A=::9:;974222//035769::988;<;=???73>hf;>==>DGGBAC;873469=<<>;93103578:=;;87;==<;:99862cec35a\389:;;:;95he`ee696573^Z`bbc_]YXZW\W`_UZfhceia\[[ZTVYSSPINLLNOPTSYUSVVSWULIIFKMPTWSTXZXWXVUTVVSPRQPTWVTTWXSLIIIKMOPMGFHMPPPSTLKSSRPKLMNONLLNRTY`TS\sfp[URRQTSQUVWTX^`ca`b11bgdVWUWWWYYUSVZ\\_]WTXYZ\]ca^YUXVPNNOPLMQQPOLLMHVUROOPLOKMRZ]]aea[X\cdTQQVX[YXROQURSW\ZY_daefg[OPVUSUSNLKG?>CKOHFFCER]XXVYPTZXY^_`imbUZ^[]hbTYZYPLKQMOQRRRPPQRVV\[ZYYWWRV\\Z\a[URW[XVUMWVVROMFCCEJQKKJIMNQPNHHKPRuXPQWVTVTSVWZVWW`fVMMSUVRJFBFILKJGGKKEDFNTUPSYZUQPMKLMOQQNOPLJDOWSPQPQPOKKQQQ[_\SPNMEHAJSV]_YW^4faNDKNOTKKRUWULMWW\^WNHFIOKKNLLNLJMLMRQOOQQRTTSPTZ\]a`][ZZXVWVRSK@>>8[]8<>@;:768>m6>BGIGFHFE:fnqpnl:AB?gaGDY>JPPOQSV[UN\iljfinj`cikphltxxuob`dghagrnjccejgcb_^^^\ZUSW\XVX[_bdeiiijhecegfceba`bikmmpwpomjkovwzwtssvyvpmngntpigimpstw}ustrvqjeba_af^WTSSU[\]ckihmpjgnKOQTPOPk`ckpvwuuw|}X]?@jmlhoysm^YXQXWB09hnlmnnmil~xyuw|ukdep{|{~~PXXTVWPJy}{vsvsotqwshkjihfec_WUWOPURPS^hok`YWUW\^]^__^Z[]RMV[^XPROIMRWWW]ede_\[[ZW`]aWOPTZ[TRQRQHJNWcedbb`_\NFAABDNNGDA>;@IJH|>>l6nlnqu~{NHPOKS_[XZ_VV_TWWJ{xRY_blkks|x`aiqttrljffilglwrsrommnmnqmkhhgaf``ddfijaU^kirufc]Z^dfVitsojlwqmojgnzrhbfkvvx}xz{~ukm_S^XPMPV[\^`^cmnia\ZYZZYVVXQMOKUd_cODPWZWPGyJNJOQJ]ec[ZkrofeZ[Ycfffjlkghknomjjjbbgdccfb^^UT\ac^flttmhgmlnddqvz}xuvph_Z_ijeaddeedbdipolmieiijooptqj`bcee]H+@WKCKQW^YQNTZ[W[04RQ?K[jruvwihl`ei_Wf_SMRqe]i\^[T^^WNMSRVTRMO]WJ~wl^h}obRNbTMJROdWSQOa\NSFsM[bknpofcjpqub[fivJIVUZbkcagXQ[bdhdglb[bcPTR`Y]\]\Pcmmvrg]UNMJNMLJH|OUWRPHTJPQLOZqUTTQKoUTNGLUJG{@=6babZ;BMAqaS[8;A>zqophQJ`nmko_T_kjmqIGbLSIe[\Xr`MPIoWTROIGKV\jgdkaSUlFKsIj`^fx|wz}rmfc^Z^^[Yezwbfjzng`^QW`byw[MLJNRNnubhobIhUcrhNO\cnvnc[V`tslr~{eW[VRWf[QMLMG~wN\DG~~qvPm`bLWGBORI?R]:VIO^`PKSkedVtCFMZ]heUWUNIJZfeiikomagp]`ywrqyoeYH^\fs{hS^hsmkfdg~O>>Ib]ZjeUMsiipeZrlpqxjuOH~y|HSWVJG@UL~w{q^]hx|ltniykhbchg`Zf[[Vb:eULKOVZUZNMRRONRQJGGQZ^^dd]XXWROVOEOMLMDMMOIKMJEPFAFB>?IWSORSOPKII;DYE7=BHLWWLA?AJHIH^TK45AC>CLHBAEDB;PTVS]`d^_XSG;cKQU`^\cUTVh>>BNL5RI^;AHI2^U0349;<=<:7::75fa`35466Y6567643Y^5:7574239@0;4`244862b2b_b689879952675659:744684gbb`YSYZZZ[[`cdddfj6kf_]WYdbbaehg.B-/1,*.-04550)'&()*+,+,/./.-.,212--+*)()++,,*)*+,/-),+'()+.-*&&)20+)*,.00,,+)**,-+)&$%*'&&')+)-1/.0/.//340.,+*)()(*+)(%$#"##""#&&%'(-/-,,)'''('')'""'&""#$&$$$')+03212/.,-/- +.001/../0.+a,-///10,,,--.000.--.00.27654321222/+,---/-,-,++)'+-*))*,,*)')/52.-,/,(''')---+,-.,+,..--./-+./. -,+*+--+0.***)**,,!12-3-01//31/2,)+-+/0/.+,,++'&)') (+)'&+./45+,366742001.33042,085135/-,,,)*-))'"&%'('(+),+)*)&*)#"$#&''))'()+*,())(')'')**)*++)&%##$%'(&##$()((*,&%)''&#&''(n),,-1*)-9:.+))())())+)+..0/-.,-)"! !""'*)),--,..++,,,--221.+--)'&()'(***))((&..-+*,))'(+131561/,/33***--//-*(F)+)*,/,*-0-1360))-++,)%%&$#((##" #-2.-,/(*,*+/..12-&+,(*/.(+,-%#%(%'(**-,+**))%(,+)+.+(%*.-++&,)*(%#!"!"%(#""!%&&&'#$%&&-&'))(*)())+*+*04+&(+)+(%#!$&&&%$''""$(*+')-.+)(%%$&&'*((*)'#)-*())*))'&*().0/,+)'$&!&+-//+)+00% &()*#%)**)$7#'%$$$%$&*-/.-*,,--,*/,'&*,,()'!!"#%%$(*""#*-+24#&&'*,*)*)*%!$%(('##%"!# ',-//-(%$%)'&( &%&%$&%$''&'J()('(,,,/0.-,,*)*+)(&,+ #&,+,,*')+++*)(#$*$!$'%%6$$))'%" $#"*,)()-1161.+(,+*,*(%#%$#%&$$ #&&&%#$$"##&&'&#!&(,-')+*('&&&##***+*)(&$#! "! "%*($$'(&%!!$%"#%#$%&')*('((+**--..0-07851212221/2556:953566214780,./13/277 ;531214986255455333147511/.-././/10..//02/.,--.12011444204:84/0888625615;82168::9;'!*% ""8*2:61 !!8"$('%$%$#7;69=>A:57::96;BA>988<977676442/.1511135799<<<;:7768698:7889==??BFAAA?>>CFHGECCFGD?=<9?CA==>?@BCFJGA?@?CA>:8;510//1677:@>=@C@=@O/2352a2YSc3^\YbX>9=BDIHEEDMJFJMG5;'$=>=;;EA=301+,, 9>?@AAB@@HTROKKEDBAGC>;@<9<<==;6440131/3:=@@:66449;7899:676/.6::7-.*%*.2249@BE83466399<1,/24323130')-4<==;;:83' #,-&#!"+,(C##=:78:@J[NT^1-[]42]Z,19635804?646-JEU4899??AGMPC69;?CEEA?<=?@=AGEFEC?@A@ACBBA@?829?=DLC;:6459;7@EEA>?EA@@?:APPKD=;<>GFFKHJPMKOXULF?C7062-+/376798>FE@<77:;;;:::211,6=8;+)1564/+EC+,+0.*6<843>B?<;454<;:9>=;99:=@>?<;79;99::555017:<9=?BA@<>C@?65A>>>;89::>==@>:22343,$ "%"!##!$()'35871882.,1/0--*,5/(KGGC<3:FI?91,8.,+.,9122,86-0';+469:;;54U.--+)H9E0/,PH%*0)GJ(FA E!)*$%OPQ*+,N=HNEGFEB>EKA8?JC@>AFGAFN)-+POMLMKHGJEDGQBAF@EHB?"FG'MEA?@DEI&KIIFCB?@D%";!$$"#(#@><=>:><>!?=B;:=;.*688 #!:8B$#BDED?151553+#2.(-:8895-%2;:9;0,1546B=&%6A&ɘ/=9,I*&:/,/.(((1/66694-/<"&3--1;;:?=HIA;9544133318E@4:?HTB5021..92)))(&FI,2&O)JEDH?D0?7:'1($,.*"*/"(-45,+N1@@92E#(*46=;14N.+)+173898<<46;/1@>::>:50%215;ED3(17=::666@+!A"(;73>6=J+&C>C(133+GG'#E.+FED@?;217AD;B?8@8845862/600*01*$"%).),%$(('%&'"""&-..22.*)*&$*%!&$#%##$!"$# '"" #)'%''%'#!")" #%**$!!#!!"""!!$"#!"!!%%$#)*,+,(' /#&)/.-0()'1%%* *# 0+*Y&***+*+0--,*%)*)*,-.-.0/0232.,()/..--/0ꀌـӁҀ~}}}~ ~~ Ѻü܀ľļꍋ򁋙񀃉ýʼƸĽ¼ɽӀǻΥĻ܀ľκ翵ľõĿƹ˿ûۀ˿ǰǴǰ񍥯̼³ľĀþԊϻؽĸ½º򓕖ƿΏ榄󅌌䀍⒪Ŀ߀Լ˰Ѿȹͽ¿й􆓖θ¿ùƺƀžżĹȾǻпۀě񂐎㇀큌ڵ񃅋ΣꐒʶŻҞ݈Χ߶˱⼣˹·ĵα߾ůżޯҮքʺӶ۷Żº·¯ɭϽe_^_b`aa\ac36kde`ZWWVSQSTVXZ\`dddc4546778:;76ic`]YYWWXYZ\][WV]]^dZNJLPVYZZ\]^[X]_ZZYX^e32cee`cd\ZZXWUVSPPVVQPQUZWZ^]^a`_abghgfhd^ZZYVVZ]YXURQTSOMNUWUUZ_acb]XSQPOLGB?<:i_5767:;1<=;ovpkl865ff544676jggdda]_]Z[\[XZ^_/0037634554457K899;;:<95689?>;<<964b676f58:<978989:;:972_]`^^b`b12799645fcacg789;996a\aef``_^ZZZYRRdZSX]b[V[\^[_]UWZSQPNTSMGLQRQPPQPRQQOOLLJMNPRSPSYXNNTSSUXXVRRTUTSSRRSQKEHLMLKSVQQOMNPRLOTOKLMLKLLKNOLLNLNOOMOOT\UNQTWVWUUVVVUW[_bbb``_158jVUWW[YWWUZ^aabegjc^VZ_a_^VV\^YWWSSRQQLLJKJJVaMAGQTQNPOPWYVZ\Z\_dc\TVWWTVUTQOVZWTTTW\[RU[_bbWTPBHOQRNNLILJEGKLLHHJPNRVOJIMMOVYUVWUWXXSRTUX]__`_jWIQRSVY]^_ad`\]^b3dXW^ZTVSRRVSPMKLMJHGFGFFDCAFJCENJFINMOUTUWQTRNLPLLQRTKGOZ_cNILQURG>GHLIIIEHNRSOKMQTPPKNQOOPXXRMKOROMOQUVOPHB=CLRTV\]TSPLLJPWY^dZUPLJIMSTXYVSU]^]UMRJJPIBFMSZ^YRKFCCCD?DIJMPT]cefb_ab^TR__WQLMNNQLKLNTZZ[XUHGA9ei?IKMQPMNSUU_]ROPSTVVKMRRA8=A<:DJLPSUSPONNJMMPTRNPOJJLJNPRRPPRTW]]]\[\ZZYXSSVVPJJDF@ea37FD@AGJJGOVYVTVYWLLLNXWTQRSRROLLS\NJJLPPPJKJJOPOIDBDEGFGD>;COQMFPUSQMLNVVRNJPROOMLHDA>6f==@<78DGEEEHIMGEDEDGGFJLJIILMPMGNOPSRSVYZ]ehegpofbb`^]^^[emmd]Z\][ZVVVUWWWZXYafgdcedeejifeigeghkjhb`^^]]^``]]\WVWUXXXVUSUVZ^]_]Z^dcbabcca`_`bdd__gmngdhkf_dikgdhi888lim<;;<58;;9:<6[ac_aQ7*+4cPB;Oaml;>?A@A=pn:77@@EDB??C=8n<9lilrJTWZ[_[Wa^WQQOQWcaadims|n`bfcgjllkmnolnopnmlmopsrqqi^Z[]]VY]adfhtofgf]cnywje]_\aglpprnkhjnokfczxnc`bltwqqxulonhfhgfc_^YZ``[adgmkjf`id\VTSQSUVY^\TKKLOX[ZaUQUQPTMMPS][URSZbdWWckhc^\XZW\__bnmhmropked_^acegff_\c_XVPNHFQYYXV\aachr~zwvojc\^_]Z^^[_\[\^`cdcegc_`b`_cijihfgd_`\UKPL4)1LUXVZWVUTTW-5I?@Lamtsuk_he`ihcgdUVTQbspgYV[VWeaSILPQSSXNU`SHyiuzsXRLFSRQLRdRNaMT^PFJDJ]][bqx|t{xrfvDP]Z`\X\\QQYgehjehaPZd]VRZ\X\aNZllhb^XPMNTKQUMNQZVRUJJUNPQM|mQOPLI|P[SHRWKFHw|{94eaq?|DIMLOPOM{yjt~xts{ngpHNSLH||z~zqw{@C}|||yy{urCBB?@CB?AHGnxupsw@@{sYU\lxt{CydnByvpytqnhb\^qwqBBB@FJBF?FIAGGBAIICCDA>;EPIDBC:778999@F$GBAA<;>>;;<9657;;99:;<9776643422468;<:==<;<<::<;;6379>@?AAFFE?@BDEEFDCA@???<>?<9E@;29?CBADHFDAAAB@>;9:>><8442148:;=?@@AADHKUWSRSRU/.Y20\TI:04:@DADGLONPPQMPLEE?>FHD6EJF>62$09-/35>@ADKNODCEIHJMKIIFCB@BGQNLPPPVXYURPQTRQV-1363.TMKNOQNIDBBA@?CEBACC==A?EI=875689;;7::;=<:8569=8557881&,599:;=3#%-12349@A>4455:8620+-1;:462,)(*-35:9:=:73+"!#$!.07>B!302;OdhcaYV\WV[WR,1234755=840.-09A;:;?@ELOJ>68:9;=@A?BDC@DDECCBABCFDBB<5941378:;;EB<:743688:<84.//0546:0//./0,...530./487/39>=;975624769A?<>@@B>:86798:64:753/0+M+164226658:AKNGECD?<:67642764745676899::8777558<;8877321-("$ "#"%#"" !# (6>BBC=5;96;;8<:111-9EB<43622=:0)+...-2+06-'KIHD;DGMD20-'..-+-7+&6.17-')$(3302:HK=ANG>CA>5BL'I.6142143,.2=:;=9<8*084/-35137+6C@>951,+,UOP1+T.0,-LKZ[183/1*KM*2-RS[00XQQOKISSIS*C:F-+,+)HCF.3-TP'-1(L'(J@B?+*7 =#'NQ+)++**BBJKFDDIDDJH9@EFCBBF=9?G'+/)'RLJKLHEHFEIFADFGNFA "DGFEDDDCEEILKGHHF?=D#"" !"" !&%DDB7=;:;;4/5<:?9<>9;>,,316@O-:+-9>;707>;@@A?D,+,13&EA!><==D((:/=D&%@A'*)(+HB7'$DE!C%&E=80;G=8>7@?955873521,)'-324/('###'&%(&& "0#"" $'*)0.+),*&'%$'%#$#$#'#"#&!$"+'%$&'*(%(&!"(!%& $"!# ! %!  #)%(*)))+)&# )$(()*,-..+-!%!1($$*)(+>+**0-+--,+))',./..030.+)*--//.3뀂ƀπӀ}}}~܀~}}~ـˀ + Ȁ ~ ³ɾ݀žǾ뀁󁅇􁆊񉕜테ϻ÷޾¼ǀȻǿƽ¿þǿɽ߼ـÿ«ƽĴʼɺȸ̵ǿż€þƺøĸîͺľĀɼȾʲû¿ǵƩƽ󋎬兖ǩꀃ̿½Ÿ聁´ĺƳƸǸµ¼ƽɸŹ¹ĸ䁀ĸò˾Ȁȼ爩뀃怂퀈ǮŮſↂ쏖ֳʾͺʾռ܀̱ΪޯʾȺ½̮ͦźŸϚְ¾þ넎郅ȭ¹Ƽ˾¿żż˧οӌb`_^`b``Z[^`35ffgb][YUTPQSQQSU^^^d54eae357:;86gba\YYZ[\]]\[ZWWY^`]WQJJIHHEHPY\VUXZ_cb]]ac`^acgc\ZYYYUWXRPX`\ROKKPSTTUUUVX\^^ecab`_\[YVV[__]]XVVTRMMNOTY]^^]VQTOIIFB@:jo>AEEBCEHKOSLJMORUY^bi99ri[WY[12YWYZXUVZ[]_aca``13553efdecee^\]\WRUY[]_aca``1343b^]Z_em99jRll67533gc_`a_^\[^\]`a`_]YYWXWYZZZ\``\]_bdfbbb_\`^_e66kjkj5hefa``]\Z]b24675346767545gdcbb`3d342585357898:;=<=;;ifl<=::;=><774e6<7kgdfecbba_]]\^\]a[VWVTV[135789::<;;:9<;989=;:=<@>;:8:966647962c564d]58:<;8556778863a]]12bce455886afmfcdt@B<6785`^[]_`ca`XZ^XUPV_[XSPNIOVZ[X_\TWWZWSSWb]MLIJOMPXQOMNNOMOQI:WRSRQSPIJLKKLRURQNPRUVVSPLLIDJORSSVSRUTRPPRJJLKIIKNQPOPNLMMHHKNPKLNTWLLRTTZbe^YPOTSUYXYZ]YW\5;7NTZ][XWWWV[a`adaa\YUTTWYUWY_fb^_[WURLIMQRNOT[N=HOOTVXVTZXSRUY\cfa\[[XVUUSTRQVVVZ]X[ZVUZ\]^O;q;>JB@FGPLJPPJOMLKEEHVNEGJKLHJRVXWUXVUTTRMQVVVerbXX[]^``]]`a`enl`YV]4f^XYYTOMMKLKKJFKI;;DGHEBAGLRUJKMJOMFOTQLNRTYSNPHBILJOQFGVeocU[[RTSMKJGDHFDIPUSND=JWNMILLOSTUWVQGMSJAITYZTJD=BELVWVY[YYZVRMJOOSZXWVVWTTTUYSTVWVVUUXYOJOMEAFO]a__db\SLNMMOPRRSZ``feb_ce`Xba]XOIJHEA@BGNTRLA=@@GJACIMTTWUVX[UQSVRPTUTUWNILH=;??@CKMIOSTSONIMVQNPTVTKEKSFERNNQOPRWZ[[][Y[TZVUVSRVPHKHJ=]hf8CMSQSTPPPLJHJZRPMI@>PWOEIVUe@AB??HHA:?HKJOOMQUUSSSPLMTZYTTZVQNNJJOUFJNNONKIILSXZVNF?FHMIFEDEJMLNQPNNQNLQUWXHGSMMVTUPG@B;V9>?=898>CDCCFFB?@@ACDDGHGFCFNPMEJMQRUUW[\`fiegiligeeb`c_^_gleY[d`\ZSTWW\\```a`]`_`bggionkgc`ehhnmgacc]X[`a^^_]ZZ[YZ[Y[VQTTZababaaddbdda``]bfc]^`ekicfg78kg:;:klr7;:98kk99;;;8678:;<=8875g.*,]:;H;OZk^jshp@<>CCFC=:<;=AA=?A<=BB>>@ACB:lge;DHJI?<@KNSWVZ[Z\acfjmpqljf_UPeolr?Anhlqsttrommgehqqnkoqnomfehic`[^bacdddfghgjecnlqrpifigjllipszskquyutrpomhjlnnnjbh~zpjkw{vtwuuwupokkd^bgpttojf`]aeglqsvywuurootx}|{{yohikejf\U[ewOKsv`vmZOiX>QTnx}|xqoqw}~~QUO|yz{wqmkmrg_deiha``drwi\[]VU]`\SW_]bdba^ZXXYU\^]`a^Y@YjfWSTTE@KX]RHKVY[ZUYWWUNQQOSZakkkfZTVXXWW^WTORTRQHA??=<>@B?;;?BAABA@==>=;=<=EPRSLQVVZd[SY^gaZYSOKIFOZ_\cfjx}sffhd^ahknrmmijipmhkmhfkmnonmh__Z]ZTS__flkofimmjjuphfXTdeccgigfejkmoogbhsofmod^di_euyj\``Z[[YVTZ\^beegklmpigd^d_VRSRRQSRSTPOJP^ic``haUW]\_ombchgeZ[fb_^[\b[UWX[`jmibkupif`\]abbddf_Z\`ZO}y}efzIKLR[d_aix}olha]_`ZXUY_\`ZYZ\][_ehgd```_^__^aggeefceb^]UG3?KNRYWNQTYZX-54m@Ncosqkbjkacifb^VRZW[jleRKSSSYgVMKOQPTXRMY]XI}~~uvsfTFIPWaVMQWXEgxHVB;EFT^agcW~LJLLw~z}xv~y{J[RNPOSUNJHafpmgmgPTefYTWXW`hSbojeiaUOOKOO[QLL[ZVUULIS[PQRJLvRPTPWVNNOQTOGpo|s6[Yi^gduccoecE{_hbTHs[yrUHOFQ[IManl^Ecd]tLMizxyxtZKMlrluRQofb`VQ^g\`nm`_hkdijWOXjxlTQTKCVWPHHYWOGGSSU^o_^SXbwsg`ZU_`u}yda]VPSTVVUPMVTPFDggJ]SEGO[VGJTNOPOLPOSWRKDABDBED?KNGG?AFC?FHDJFAKEHB?GGB@GFBE9?KKGCBB%&>:;<;769>><;=?==<779:6524679:99;;;9><8;8>>>:9==<7=GEA=>EFB@B@ACB??>?:57;@BC?<<769;<>ABFIGEDCEEHIJLNQPKJKIB>?B>A<316:FQ/-PMLONLHACNTP4DTPUYTJ7,%5/()@HLMJEB@AAFKMMOVTPKIIGIKLJSRMOPSVZ02.RNSQUURPLLLJGGJKIGDAACF<6:?DB;:9:AC<78932897/377;><;9656748769:94C$6B?5652''25-$(246425564.21.25@JOPF<=>:68=?AEBC@?AEB?AA>>@@AB@@=8922/+*56?IC>?52<<:9:;=<;;>??BB=9=FE@FH<7:;5>FH>6:9766633789;;:<>ABB==<9A?868635432.XRZW08?<:=C714546@>;E@=:768998;;<75674,GKJ;=J-,,/8;66;DPYWNG?><657852-366633454269<;9876656546997652421.(!%#!##!6"+9?A@=8=<68<:752.424BC=/+2005@2+*..,/1.+341'DEFHA?@90(+/290),/-#7D(1$ &%,1065+C)%()JGCEAC@;=7.M,,QQ*-T.6.++OOR_;9310+O)/6/ST00YNMRRPOPHJ*+M=I..0UPJQ.21+,,-.+II&G<<@6&'34.'+S+++*0+9H)&JIL&JKJ<>8CJFGEA>=;AJ)-/)IMJIIGELHCDECFLJHEB@CB@>;C?B?<;82-)/4--2"'1!$&$ADP1/QUC95550,25/3?=75=?:;<.)1;F:,,1)%43/((22-)(1--6>64,/7C?;84055ADA432.+..00/,+10,&G&84)3/$&,42""0+CA+;52(,42*&&*/-*32.2,)+**+27-5/)3+*,47-+%$%,70/08A=?;D:5==,/946?R/B400963-8;<9?A=D*+)'H>H)*"EDFDF'B>7?$#==>$&E@63DEB<>:;=<9?=56:21/&%+-25560,&"&'$$&%!!+&"! $%'&*('*))(&%$&'$#$(#$$ !!#$ "'$$$%$&$'($! &% "! !#"#""!!  "$" *+,(*(%%*$+)($))-/.0 13)!%"*'*,*()*++/,,//,,*(-.- 221/.+))---0⁂܀À~}}~܀ +~~}~~~΀ ʀ Ѐ~~ ꀄ󁅈ǿʽ݀¼怄돍ź˴Ľú¿ķـʸſŻȽ²οѿʼüƶǿ̜ҿϽſϺͼÀɸǻĺȾŸŰμʤ½Ϳǿ܂ýε񁏔ȕ̈́兒˭җȻż߽û댦þÿºžƽȶȾ鄃ɿπͳμ񁃌ۃ󃎐냙쀋ꀁۨ팏¿ƾ׈ֺɳƷ;꺏ѱ允ǀĬɱŬ˾˿ùǼò݊²򇐎߇ı¿ſ¿ľǺùÿéӻꌵ񃈅cba^^``a`]\^24543idb_\ZURSRPRPX]]XZed_b``3467754fc_^]\\\^]\_`[Z[ZZZ[XVQNPMHJQXUSUPOW_b``be`^f6g_ZYXUQSVXTTZa]YTLLOQRVWWWY[[[adba_][WVTTSW[]^YWTTTWUTUUW_b[WUQPNFEAAD@:k;>CFGFEHGBCHHHJLPTWX_gl9ncYTY24aVW\b`]bd33eea_b34443deebae4c[[^^\X\_cfdeb_a3332`]]\Z`dhll+jnp74246hghiedc_]_`ccbcec`^__`aa_^^_]`b`\]^cec_]d8=>;8657mjfdc`^^Zdifi5765566434db`acbegg3ebc2234334457865747>@AC@<8hdefjo8:::6j9>=8568iie34efgdbba_``b_[^]]`14754687989<@A?1CCAACBAA?<;:7689699:=@@7:<==9:876755;=<899877765564442337:>>=<;<<=BA>=<;:9:;::9;95]`k5=B<867751a`367643```_45797854576676331134cbdg55786`ac_^d?:3b_aab[[bgb\`^YSad^YXY]abY\XWZ[[`b^\\a[ZROSUTSQLGNPMOOKJNOMOU[^K772SSUURPLNOMMPKRWVTUTPRPMNPOKKLNPSXVUTUSRONIJLJIHHJLLLMMMNIEEHJLMOPPURNPRRSVXYZXZ\WSSUUW^_\]07AD=Jd^YVUYYVWXTSSRSKNRRQQRQSQS[_[\]^_UMNQSQSVRSRNOKCKVVQQTTTWXVVYXVVY[[[YXVTVY\[YWZ[ZYSOLGFHFKSLFDHFDIMKHILL>ZctCHLNPTSQSUVUX_[WUSYTKJEIPZ]UOLLPUXWH?CG@EJKJGFIGILNPNTYUQVVUQSSL8=;:ma_898<>CB:66;;;?BFFDEEEJKMMIPVVTUVX`][``]__hfccff``_]`bki_frha`\ZZWX[]]VX[\^bcchhhihddb`afj8ne\^`]WW\``adb]\]\]XV\\LT[]`fdcehd`]^`^[ZZ`dd_`hhjgei898kh:CG;l88979:9k7:;=;:63V6:>=66;75E+1;R`V9]hp_f;ll;;;DDFED@?::??<>@A?AB>DHC@ACBBBFORU\XYZ[[[\X[\Y\a_\_a_UXQFDJIKUa_efkrtspnotlaephdijjhbcjiehmkhmnglmmjfecZWUR\utqlmojiiouywtmb\]dgbiklc[ablmlk_X\lpda[ZU_dp~ricae]Z\_]ZX\_gnlceddieZWWTKyrOQQSSTXQPNKFLT[kpnjmjcnyonbbhkbff\\f`]`]]\__YWYWeomggqqc`[\[[]debbb`XUVRDvpFSX`dgbcelx}}mfe``YSOPU[owbac_[\][[[ZZ[[^`]ZYXW\cfeca_bfgaWSPNSVRHCFOSWOT00\]bC`lowiingcdg`bb`_cYcjj`UPMRU[ZSTRSUSVUTR__Uznlt\RNVabTMNWZWRQVQLDq>FVWYlYTFMHRysf[s|sC}CBIKNPSTPMHDVbifdjfZWci`WY_`jp]]fcdleSJRNMQOMHrTYRPUTKPUNORLPL[ULQSNRTSNFxoyy:7[Xu|pgjBNNRVTMYiLJIIoruwrmi}JJIIzvyxvxyz~EIGvz~v~}BBBECA~Cwz{owtktt@AJEcQd9=jegtJKyw{{qhekf\X]^gllbNLX^VM?GExlbXT@JTUL^ijZZWahrk}ajcej]ptac{e_G@Mk\?YRVX@MWaUOZmTZ|VHTdcoBy`Lbsqz|KJIMuhbYR_bf`c[djhsrn_JLQ`qgSVYSHTQPPLNOIEMS][QV[nd\^flbXRQ\hptfb^[SQNJPSSKMO\SDt|AwYYWD?RaRGQ}~UMQ]GFKH}KIWe[_]Y`RGVXRJFMRLSVPK?FBJTV[Y^Ydd]zqu}xguhfg^ScgcWY~PFkbUbighnjmftrqCIILH{qgu|zsgrzLM}isz}zORHInl{}D}qljzK{oxEFjpF{tnph^evrswsikdegYNL_fmnl_YTSSPMIGEHIFLXTONOPNWY_a[USRQKNVRPNQOSUOILPKCCDDGEKIMPOJHKOQPMJKCBKLGB8@IFH?GC;DC@>BKEHHJA?GIDFCEAHBABKLE>Z861/eA@:8/.>@=ACHKFDDDCC@B>==<=>A?===;;;954577755344575:<>98(!+'=GIDAB@@??@@??@@@AADFG<;><<=?@?>:6CC@B>;BA8779968<@@AA@?9568:>BFHFB??AFJIHIKKKI??AB??ACAABKOK@CEFIGFGHJMIEDJPNJMMLMMIB9A.!(2?KIHIIKIFDEJMKLORRR!PQSNKMNMVTOPSUY//.,---TVXXUWXSKIGD?===?::99<83:=672,06:9<=;44659<<8302573476833/+/;;73972+(<'54,%+43588854338;46=>>;=@:8465789:94/,)# #+0.%!*-176787778344258648:825-%%'$'0<;==BGGFDCDF?7A@<=DA>?CA?AB>A@??;<80,)(2EEB>?A>==BFIGHD:55999?@@8398?ABA956CF?;785=>FNC=99<66676569;BD?:==;?=7686.JL\4324458320-(O247CDC@A<;DHB?67=?9;;26;78:8:88:6542CA9746458=>;;;:4341&JJC>H&.189<8::<@DIMK?=<:84/--/4CB67954654434564764231147865324562*($!"#  " (,1$7==B<9B#B%%(*+,//,*(&28<:8<9108=60377=A44:89=9.)/,QP,/R-,G(TMAO592/0/LK(-2.PT-/WNOUVZRNP,.PPE*51RLHLU,01,...+&IGH@4-0!++.1.*4I8L*(MN)KG(M:DC;87;71..)/2/'%((#$#E?:3+, $+-'.66*..67:1B39237,545$ (7@1"4,04",29/(,=+-D( (1/6>!:-#199AC,,N)*M=73.+1143709==DC@5'+-6>7-240)0..-*--+)-/53./3>8128=83-/49=<6311,-+),.-())4/%>A&=**-% +6,(?.CFG1-,7)(,)F.,4=57357/&03/+(+0*.1.,$(%(+'%$'&/3/A:;CED5<6574,59723F,'52+4865:7=6><;#'(((A<6<@>=6=DH()C7CGKMDAEM--$&98BB$D=:9?)B7C&&DD6:'A>:=:36C@<@A56335-'&236780,*))'%#" ## $*)%&&(%*+//+('&'$%,&%$%%&($!#$" "%"%%$! "%%%#"!##!"!"" " !!##! !#$!#$&(*$"/*+%)"&+*41.0!#$"#H',,*)++**+*+2120./-+/0,./...-.,*+-,-Ȁ䁃ڀ}}~ဃـ~΀Ȁڀˀ  ̀ 󀇂¹˿􅋏󂄄žȷ넪ƹ¼¾ƀɲÿϻ¿ɽ´żо'úÝý֩Ǽ˼ڀʼӻɳĹƿżǸŮо鄚ҷȯϺ׀ûڀׇĿ˯̻݀ѿĽǷŵ¾˻öـ񅄈ɯɲ·ƾտûŰᗨ©ï񒣴򉈎킁ڀ⹳ױ߾ŀȽ񎏔ƿ׼˰ûۀƤ傀·Ʊ̷ƸȽр¯ʼ½þȷ ރ΃ƽçҵɷǹĶ̿­òé⃆îߓ遉U_becYY\`ba[Z`25443464fd_[VRNMMO[_aZ\d2fda_bg46655654fdba^^beda`__`]ZZYXXZVSQOSXVURRSWbfb_de`_``]ZXZZUTRRTTW^_WSNKKLNQPPRZ[]]bfhe c`^]\Z\ZY\ZYWWVTSQQ_`\YTPNPIB=8lw=mn<>?@?ADIJMNJEGJOSU[^_eefh_US]d3`]_bd478:95c^[Z]bfffg2c\Y`fe`^_bbb56885d^[[\_cacba`\^acdededa]ZZbcgk65hgfbbdfefhhgdbccbdccdddc``b`\ZZ]__bc`]YX\^`b2cbgjg464hg^\`497jhfda_133ca_ah7755896766d^_acbc341168=<=<94bcdcaacadgd_\Z[a^]`cj7haePgfgfgfddeeca``224544556895479>@ECB=::<=;<:7:9789:;;867:;9B>;56:988:98;B?8:9875432C5623447;999;;=?AAA?@=;9988:<=5dcg786:6\23341134133320\.1524766565565665542b`c22143Zbg]^k:b^^\[YTTW\dd]]^[^b^a\_[W\`UXUZa]VZ_[Y[XQOPTSOMOQVVTJIHLOKMJMR[\ZU-:2SVWUTSRTRRSSOPRSQPQSSUZ]\WQOOPRTWVUSYYTNIJMLIIEDEILNOOMJFECDBIRRPNQQNPQMKPSTX_egaXUWVUY```018BKK3WTSW\\YWSQPMJLKPRRNPONUTQQRW]\aYKKOVYZXSPUUSRIMSSWXXUXYTUTTWY[UY_`\XSQyUXYWWQANQROVSLMNMLOQQQIFIMKKLKOWULJB::?tqpkHYSNOPVYVVSW[WURUWY]]WMYY^`Z\emn::@GE>?@6a]]de_cYUYRUXPLHDCED@GHEBA?ACA@ENOHHKJLLLNJGCGKONC<@BJV[^\ZVXYXXUE;@H?EHHJOPRSUWXUSTWYba]TQQTXQNKQZ[WgeMBFPYYW[`_[W>7APPNLISY]`^SONKPNE?GUZXW_kib]VRUQXaaa`YWXWWWXX\\\Y[TSV[_bb]ZXSROQSQMIC=:;BIA9elBJMNLMOQPPPTTKMOMNPRSSVLD@ELOOMHFLQNOTWUJIPVYQNIIMRUSKHQNNMJLSSRPOOMOPPRVRQPPOTXSNMNH@:=?A=?GMXZUXULF7EPZaTLUdLWiK5;6Eb3=A?76;:edg:dVZZk:C<3ie65889?@ACFONMMPRUWWZ[__^XY]][VS[`bbae_ZZ]]`beekha]_b_a]UX_[RY\\\]Z]egdcda_`cccl8oiemle_[[^_dfb]_]\ZXUSWTWaYWbc_^c`Z\\]^\YT[ehbbfdgfegn85eik7::8:97;<::>>??:77766EOCOss;bql[\=:7;:9>HJFCBA>:?A@??>=ACC??>A>9pxB<:?DC<9DJNGDKOZ_`^\ZZ`glpniejuo_Zrwssrpooqsvrlmlpknomklliki`^]_]Y[][\bccegkmkij[ctvv{ytutspnnonihmpnmstsuqnjmrqpqpppvqmqtlnxy|xus[]c^ejortuvxxqjhkgehntxxtrtyzwyyriwsiahswsrqpllppv{~xz|xyuruzxtuvNNLLLKzkdelhfnqjjhga[_`_`dkkd]]ajlszbp^UR[ec`cc\XY_ZUSSLXgb][abV]n]Tfb^ZZX\^ZXWSPXaXVZ]\gjoolmg^X]bg[\\a_\NGEIHGFDGEIOLJMUdcXLFBCD@BHJU\`gecge_b_][Z[_fbXVYKHKGH_mnjjo{xzojghjgcoiabbbdgcbefhkkgd`dgkkifdcZTNPfw}zuqmoqskkjmyxmebikgpsjmisn`aaga__dom`ST_bnsxpgaagf_X\^_dbajiieg^X]^TNv|RRNNOSTQQOTX]g\]fbicahsuy}gUOSXW^aV]c`b^UWUSX[YXZb_b_b`XQPTVR[c``XUQLJIL||MOSNRl{e_\fch{K}cb^UY`WNRW_kg!]YVQTWWQPMRPST[[Y[\\abZ\``_bfb]ZZ]WJFOWRNMKTVY\URt`kqqlmibcb^af`agc`adf^URV\X[\ZZUVSMZYZX[YQMr_eaW]RGUMScTWU[VS=BV?LXgjNUMKIIujgRZP\j_ZUm~GPPUVMKKR]d\V\^\a^gfYW\`ht][gcdjaQKNMKKPKNqOXXMQPQQPLOSPNQXN||KOOLRSRH~ioz{9e\h|tkwGQXXUOLruHGLJNFJz}tpuoxLLN}t~~vtum{HGrrHQIFHC}{zyzuv}CE~}xo}u~h`q=BFE{tYT]Ul;omz@~FJA{{skife_]WbgY]UHGS_BDl|~pijhcP|HHNRZS[XOA@^~ODdabXe]graftB|i`M:Zi_b^OGELQEv>e^fh=vgNE>GtD@|ka\ai\dpm|Lzwke\\\a^ZRWhonkpWYYQ]ac_QMSGENVVIHTSUPZ_PMY^fcceZRQZWgcdhe`ZUROLNOQJFGX\@NHUDIFKF>FSSKO]MWGFBz\BF@EOPW]hhbtgOQ^cYHELDOENNECJQLRXZd`ckxK{slihjbaadab^aT]Gsf[dkgifgpldj?CGEDK|m`n>vxjivFNUHjhmwCFNJLNHKvkz{zgnvrKE`mDNKow|xtvi^]rct@oihgukVU_glggbXW[_XQJ@9FMJIVYHHRMMQW`d_OLRXMKYYQLJPPUVNVYYSLGMJLPDPOTLGISSRGMOMFLLOQKECCDDHC?@E@;2#/)&''+-,-*+.,,((*,/.W*#,+-.)*045#"-*+01.2+)+&),'%$""" "#!!#! #('#$%$%&%%&%&&%&!""%&((" "!%+,-..*+.$#&"$$$'())++*G,,00-(&'*,((')11/:9)!%)-,,/21/.!!+)('%+//00+(((+(" $,/.-2852/++0+/21/.,-f...*)(**+-./0-,+)'''((&$" &#68!%''&&%'%''**#&(&''(()+% !%$%%""$''&)+)$$(*+'%"$&()&" $"$%#$)*(&&'&(C*''('(),(%&'#!%'-/+,*%"%)-(%)0$-"!%'5 !##%')'%%)),-**),+,52/% "'//**))-+*(!>87/6 !!#%'&(,++,-.-+( " $%%%&&&'$#326 9-/0; #64!!!"$*(&')*,--01442/1322/-13223531159<;72036331,.2/)./-/3410232278549731./1156312110.-,/.160-44102.*-03320*/4413425556:488! !&0%.B@7=;/0!%&$"""!!" !!"$$# !!$";B%!!&% $)+&#(,45644216<>><::<@>/.AGDDB@?@@A@>==<@=?><<<;;=:4336513544988;=>?<;<35?ACGEBEFEBAAB@=<>A>?BBBDA><>B@?G@??@DI@?CD@AABDDA<;><:=@CFGDBDGJHHILQXVVQE>GRUD>9:8:ABFJC6/.6<:7:942251./1.6?:65:907F:3>8534469630.-3;54894;@B@>A=636:=758=97+%$('&&#%%'+% #,97.% "#-5668;?<9?<79963458=;234(%%!$5>C?>BKFJDBA@?=<>?@@A@==:>BBB@=<93,%'8BGHGCACDE?==BKG@;9?>;97:@A9149:DEKND<88<=8479;<;56<?<=;67869;68::87;=710373443301.*323330+*UJGOLM@5:717/&0*-9-/.2/, +&.69()*(&'@:6)-@)1:210G9D(.,/0))),493-12164::1/37;E52:67;5,),+().+O,H;GIOQZZYW.33JL)-.]QU..SPS]\/U*-/MJ-,/2-PGGPQ,0/-//.RMK)E8>EA+)4A@5-7%.21/**N=?J''+)+&H(IAIKE?(-'%'$DCA?B>-+3%4 86>!B$'"BD?;:973/,0/%&""*7?A<7566+;()*(.(//' /?'%455.5067-0;"A:6)-G6072(&$,/*C!5325 9/%""9" >3/*-4-4<:C*H@?73--/442.1:BB?R@230+04:7.-1'&+00)I-21..46**25:5672/.417529630.-*+++,)'$-5$("*!!&&#&+*&&2(1)H(%D3'*'*0279;=5C:/L)781'&)&,#,.($(.'&()/008@)B;9HF8792355442601J&;404<7967>;68 "#$#(B:47!:@;EL%%,***%(=7AAGA49>;'&06$+)B8@>;=DJLQUVVZ\^dfdebbd]PMQW_]\^`ch3e576fa]\ZVPVk444d``bda``abf44687ga]ZYUPPbb^]][\^][[^_\XTTYbhk7754fg47;96hhgcccbg53e22eeb_^\[]^__]ZUTY^c4h3fg568:75553ac`]^^acb_`c1bccgj6hdg6765233`\Z[[Z]13557:95facefa]^[ZY][VV]]YWXUZ^e87c]ZZ\_`ccfi4542444311b21d3322689-876e_cg5455578766689641V9:=>;:645679;:42::7743G465678;=:::>BBA<9::;>?>=<:9877767;<::ib7<<8lgd44257:767223322431b224367678776532bc_\`5a^c`Y`48e`]XVR\dbe3664bc^W\dYXSUZ[WXY[[TY]]\WTWVQLSRKMQVWSVQMLNQOHGOPTW[`131XOPQTXYWVUTVTRQOLOTRPQSQNQSTSQSRRPONPRTQNNMJJIIIHGGNMKKIGACEEKQRQSVSOLNNTWUSUY^_\VWVVW[`001237?ABJS\abeace]WVWSMIGGDCGJNMNRSUYVSXZY^ZUPQV[QOZWYL:?HOJPUX[]`^TMLRGCIQZZPT\[[WMIILPLMKKOUYZahaZTPQPGHOYZ\__[VW[YWWVVQOOPOLOVY\]WYXZYXZVPONGJJEJLMROIKPTTQNQTSMLMPRMKMMMOPNMLKGFILPRSKMQNTURVTRQQRNHFCHMYZVSUWRODOJMNQPNOPRRTWXSNLMNTXJCBCFFGDED@EHLQLMQMJNUQPLFEL[]T[K?BLSKP[9BC;9:8;7\`336?FFEHJQPQMLPOTZ`_\\YXZdh]EGMNOPRTRVTRUXWFJKEB=@DKRPPPV[YX[b^_`_XXX\[VZ\\[ZZZYWZ^^aabffe`^]`bbZVX[]^ccb][]]`caba`_aeaceilkloja_ca`affbcc`]XTWXXUUWUT[ZX^fc_``_][\X_faXgld`cd]behjfcbiln988;=?><8;:<>===<8:=>>=87Y0*MVN^>9YpoYN:=6j;9f:@?<;?>;??<;<=tuCGC>:?CBA=CCB>ADB89FQQOHLZbaa`aa`aegmjjifibhkhffghjfgjjihidegimmpqnmnlhc_b]WVXTT]`_cehmqgloopnnppmnrxqmlptrmjostutswspppqx|yxqnozvttv{wvvwtqx}wytponptuxvwyz}ylggijmstrustuz~wusljhjnty{{{}~vrp{z~|yLKLNNLL}pixpjqrvtpeaa_dhmrrnh^\\_^`^WU[^cedghb[\]TT\`eiiaX[`do~mb`]YY^WSWaab`^__a_ksxpg^bemnjni^^T[\TNNRQVV[`fgkkaV[mf`VOHECLW\_ijbeqwrqyvsorm`ahmidZdfc]X^jkdnzuywu}zsqruphgjb_`db][]ddb`b``bfigefa]RUfidchjhjmlljejsuqmlwsilmjgc^_g``]^\]jwy_VQV]fqurndcfge_]bca\^fmje]YUWRTONMKNUPLLLPNNOQSRLHNOUY]ffmjcd^WX\WQOSUY^WQNQYVRTVNHUXRRZUICJGJOU__OMROOMMwHHRZ^bUMRpjcmmfkymYQMFJSY_cbchcYQU^\WWPONPMRV\[WWXY[YUY_ebdhdb``YRMWYUQSSRQNHPWUX.Osfnpmlmgdd_`hdhmffY^hk][]kfYXdbZY\UT]`b\\\UNtojl`URJMbOWVGRT^_RA@=;GZfaX{TMKnWRauPWN_]fNppo|FyLNOKJQY\WZY[haefXRYW\m_Zmefg\MGKNKJJIL~wORKRTVPWTX\STXWXRNTNLSOOM}wHKPMMONMKqo{}oeqHNPRWWQMJm}KQVRLIKNtG}yyzzMx}zyzvxrspjHHH{xuFRMMPCy{|y{{vv{~wx~zvnlmuJvo`[cp>@\DRNLTXJGWSXKFEmj{DDM[jcblhmRMV[TPJGJI@QJNKX^WNWVokdu}soipfklnlsnfekliU_w}{lcfsmn[gkjhkEE?ADH|n^hFxurmeUWEf_r|HECBADH}szqy^kqpFJw^|KKyux|maeiuollkomghwqihgprdda[Z]a^VQE>>@A?@FKDA@BCC@=?BADBAA@AFGCB@?>D@@ACFBABECBHIFGB@?=?ACEDDFEHF=;;<<>CEDFDDEJNRONMLJPRW[ZPKHEC@?>?@@A@>@DGKONMNMLLNLIGHKMNKOOLIKLMKHIKMNOJECBHNQPIFJLMORPNIFNQRV-,QT-.-,-ZZXTSWXSPOLLKH@=EPM@:BDEC@99:9<>?BBA>88774784377::89:7332+-46<@?;467:BJMMLJ@9874472/2:;;;::9::ABGC;68;AA>@>:80794/.202367==<<5,1>;5+# (/25>?9;EHDCKPLHBC?68>?=84<<71.5>?:CIBBBCNQNMGDDE@:=?;98;<989==;<>>=>AA=<=72',9;:8<>=?CA@>:>EGCA@I}PC==?>>;6:>:<9867?KJ81-179645153[S^21/3520//2221110*+..26:@>A>;:6458521347930/295233,*23.163+*/,,.3:6.//.LFS+*/254)%*@G:8=<7:@KJJ>5/-'*/47878<91.2821/+,.-*,164111230,.263687643+% )*&""!"!"7;>?>=>:8868=:>C<<45>@665=<3298224//578543/+PHLRG@>;>7/.)*8+/0'.165,!"084,A.))O:-)1:*0(518*;@?D'CK+,,)).34/10096890,225?74A9:;3*'+,**+R)*B@FJ-2XNY-//1MM+21X[570Q\4644/+0,H+/-.,QECPS*,/,,,--*KKM=>GJ@2*5FKJE$(+/33.+)K:EL*-1.*'),J>(QMGCBCIIH@M+MNOKGBEGDCDBC??;7F''EE(PBA@H%-))+#CE@@@??CFD@BDC>?AB@=>HFB@=869<'FD=CE9104; :=D@A&,&"ACB?830+%&&"%#& %59747<7.-(@%-("0$/00/,,$821,324:140=CBA0+-::KC6,"**VF43:294;?9/"12#0-A)!0&%)*&!.69DBB=2-167.683=CAEB674./4=4+)*/0/11-*/.3,-.-+3/3;;60..//4914<71,+,.()*,,8/&&F4(+$/-*..!+*.(&&G@>JQN((Q.8@95=7>0)/1.,'%')#,&)'.4/'+*891?DC=;9=69;;9>:33998-4BEC867?==079877$%!$'C;12'===>:O10%32?EFJ($$$""%@;?:C?09:9&(A0B((?=?MIID<38=;8:734>96569902/,,-1/,*#!"%%((' )-)*()*+%#)*&%!&)$!%%#&#(,*)(+!!$ #(.(%$(''!%& %$#!%('&#" % "! "#% " !"%$ #!#&#')*'#()-')2'%3,-$.#%"#,+%-,-'&+)+++,,,,*+,0-,/0-,-.,- .-.--..001146؀}}~ր~ɀՀ ՀĀ~~ 򂊉Ľ;»ƿƧڀ񁆅̀˾ů»ǾŹ׀Ǽ÷€øȼú¹˾ɿķ¿½ʵр»ĺúο˚ȼȻ׿ůɼͿûüξǀþξ»̑Αʱ숏Źɼʿdzƾ᷽ˀƽ¿ýŸÿռȹøϳꀆüĿƾȿɼŹļ򀈐ʴо½ƺƀޗչ삩߁肕灉܇ۀƪˋľ􀃪˵սߚæNJòȾŴѳϹí媥ưŀƲø匎ٽ苒وŽѼɷĽĴߦȸɭքҮچ儈憃󀇌9ohdbbd\VVZY^ddcb57544563ehg^URQLKPNW\a`__ae554dee4864678;;95ggglqkdb`]ad`\YUNJMPUXYWZTSQV[Y\_a\URPOQUTTVVXYZ]^\YZ\WUXZY]a]Y[\]aecZUU^_ZWW[ZY\\Z\^a[\^[[^^]ZZUPOPJGHHHJEAAA@A>?==GLOSZ]`dda`aa]Z^^XN@DZ^\^^`d`ad4566jf`[UXbg464b\]a1`_]]ba^c355kif_ZUV]`_]ZY_a]Z Z[^WSRSW[_`cg433665554f`___`ac3gfecdb^]^^]]]\]ZTU]km6533446779:89:83^Z[_`__ac_25d589icbdd`_bcaf3_YSTW\242046664ecfgfb[VUVWUTV\aea[]][[_gid^XWZ_[_h89669;87553a\\^]Z\0366888e`\]`cggfa`4778<9;82435=778988634e4466:=7652235:99:8779;=<:;<>=;:<;<:9878767547<:76h7?AD?=929?;<;96332479;:864c1253688656688656444111]11efb_m;5hgb^[Z]bddcb59;5cRU\a[_b^_^Y[]XXQ^ZW[ccUXRFUROOWTOEJMIJN\YNRTOPTYZ^31WHRZ][YUUSRUVUSQLLOOMMPU\ZVSQQSSPPOQOPQUSPOOKHEKNIIKHHJJIJPSTSXZXUROQUZ[VTWYXURRTWWZ[YW[123697_\\Z\^\VTVWVYYXUX[ZVTSUVVQOQRSQRKEHGMX]^\XRLOSVVNLOLNRSPRSQWWSOUY_VOQOOMLMNMC?DBBC@BEBGJILJEFFJRYVRPJFKNNORMLPNMIDHNPQIFIKNWSNMRXPKJQQUAHE;>DHKJLOTTRVVRRVUXYYadUUSOQSPLJBLV\VW[\ZTQWUUQNCKOJNQVWTZNONIIORUTPRW[`^VNQSOF=wBWQMTW[[Y][YVUTPRRQTUVUUY\XRQRPMSPPRSMMRRNPRXYY\YVVVRPVSLNMQPNJIJJEMNMLNQONU[XSSRLNSPPUXWMSTMNOHGIOSZ[Z]X\f`PQRQNNQTWXVMNPLJHHMPHFFKLJFEGJILKEDGHLPQNOMOVVRSWX^78L1Uv>85>B<88laDNKEO_69B=B;:8;:jc\n<9:=BFOUUUW\]`bfic_Z\\ZX[\WYY[]YWWUUXXZ__]^]ha][\\^[Z[Y]adfc_\]^_c`begfcaccb7mflkfa_`\[\]]^^_]]]USVVVRPPP\[V]efcdbb_[\]_ef^ccb`bcbba^ega_eij8:kh8<;759:8;9;@@98=;:;<n8<:KMI=998?FD?CHGGJJFGOWTUeOMVZ^__]]^\`fonnjaabmfXY[`cec`bgfhghe`\eflqsrqmgheeb\]eb\``[\Z]aknkfdeflopplktpkqxzxtquwy|{yz{urtv|w~w@DE>xsifnpopnpqlnrwtqstyxtpjkijmpnqooqsy}{okg`^^[]aghbagnoq}}y|z{~~~~||vw~|ry{xuw||}KMNMKLMLMqmzw{uumertimompkiompoeab]ckmnoida\`b`]X[VWn}niholsyuywtskb_VSSWXYdqqliidflkjiun`WWlzycYIDB}EKSTPJHKPZ`mpjknnnaQJMWdehnsmoturikmu{usyoccimma`e_`gklfkuvyspojnvw~}vpophfg_`ca]VV^b]^^[WUX`bchig^V^mkqpmhlilousxyyumwxh`^e_]YYefca\[Z^rynVR]jvyssyqjlhf]Y_ed^Z[_`daZXZWQZPQTKT]^UKMPPQPQPNOOZccagp]\ZXY]][YWSQTUVWWMIKKLJJLMKMXUOMKJFGBGOOLQYY[QwyP]X[cmlhckvkqvtw{}{lZRJLLT]ba__\`d`dee]XUNMPNLUpr`XVSSWRQTamkghlhd_YSMVUSV\_^ZQH\/.4:7Kgnqnniggc`ikihYYYOgola^cg_Wbo`W^bXZeldX\ZQ||zqssohUNQNTTGPVP\c_XRDACy{qFVNCIKFrl^YTRJOPNKHg9edegkhecUIGI{~LMDCKPamlihHDvmd_Y\ehpe_kIMXZWTnq`KPZgmcnhpsgF[aC\J[GMG@TS\QNUcxJue_YSMburnkmdccT`T`hmWQPCY`bROKQQJKUMP[^TUgjidUNKR`^Yaj]TRXYNCBMIRhfXMGCK?5jdLSSWktCIKIVTKEp[}CtEOU]d]cTXgVIJJPRJ@I]TUQLKZc[Wekqumlefdeaa^fkjmsumowxi`_mmiklsleadfYXrLL|t{~tlTyM{vqivMTdktDECBDCA|Bwn=hpd[[[YU]SSLEFA?FPQSFLUV_]WQWOIYWSNNTYUPLLMXONVWTPaA?BGAQ[_URPVMIIJK<=;BBCFEMHHCA;?FHD7>DMMPCDCMUDAIF?GHACC@=9LUTT56a`3`RD9`^ZTa`RR:5f4:%/)&*,0/-0/,++*(*+)+,,*+--,)(*(&*()*,((,*()*..--,*,,)')'%''('&%%%$!')''*)(',-+*+*&'*((+,-&(*&'(""#'),,))%'0-%''%##&)**)#$'%##"$&!""%&%""#%$%&"!#$&('&'%%)*)()&,"**5 0/$&!'0  #)**'*+),+.1/-++),+)$&"&)+,-,-+,.-)'(-('$$$&)**+,*-51+&#%"#&+-%)+*+,(#!!%! "#!!43/: #%).--.0/1236440343///--../..0..0/144344;6211121//I.12342000103123231011183675310//022321/01-+,./-,+*32-0232211202115524324536833699 95 !*&( :"-&/!=4.:!6 921  "5()$!$#"$#$''$&,0//++1356532446:==><877<7022678657;::;<;75<;>?@?>:8979834963652558;AB>9889<>AB??DB?BGGEBBDEFFDDFGCABCGMGCEFDNFB$J('H$FC=;@@@B@BB=>BECABAEFC?;<<=?CDCA@BDGMNIIILTUTVQOKC><:9767;?A<9>CDDKTWSLGIIHJJLQSONLJJMMLLLJPOMIHJFGLQTHAEFEFGLMKKIIKLOQVU-/..,,.X[YUVY./[UQK@=UYURIGMD@@;7?BAB<;;7:?@BA=:72443/,/,.APFBBF@CEEHEBC>98312445:ADA@?=@DB?@I@614AGLTL80)&$CK*.11,('(+28AC<=>A?3'"&/69@ADGCDI>88<>@76955<@@;CJHGB>@?BHGLKEACD><>56:9634>:2.1;<7526EHA01;CHFBEJB?A==658=?:78:=>;76855;4`a42+7>>5/02122200116<:9CH8:646765541/23455/-...++-.,/63//,,+-YT++/./1227/JGJN.2/5;@=918G<;?ABDBEID;3/*+,25665538;7878430+*,*(.C?643011,)+4><::>971,)$*)'())'$#%:=?>?;;:98>?=<345,;A@868:629?615812;@;253,OOHFE>?A@:/+.,00(-2,4:60,#  4805,0.)B25:=#6*$//1I=@3=F;?'.-01).724;7789=81543BB3=AA?2'I(.)S,V*PKPFGS0NFU/--0*16;,N09;:/3452.+.2,+/,*QJE>P*()+**++.)PMKFDGJH=>!KLLP*P*.341-+-OE)-0.0/-)03F=*(KGFFEFFDCKKFJHDB=DFDDEC?8>AGDA$FH(D16!*()+,*$$EDCB@ADEB>A@<;=BA ?AGGDDHH&FI*GA@AC<57;=!>G&/)"F((%;70*&# -03558567/&&(@F(% *38730*$<830,06474/7B',.5.):I?4&H.KNM1/;2:4;E;9'43,!.&(# &'-&&,5FTMJ(<420-*5>=;;@9;:/6.35:/00O&158-,*--()0++36,.;;:6.++/6613;2+*/0*%#*,.:=5*'$$49+0019;!##,.($?<)I)DM*148936.*4+&'&+.' &5-*'##/5/,7:9=9757875436:8:>>87>EA<308:8=?B<5436/*:')A:?C=:)?,D?=<=D+.@26ED=@$C$%"!!A"BA"=74(2$>8D%F<@B+M>?;85;A:939:727137? 4:4--,*)*)&#%!$()(!&++20,%,'"-)'%')+''##$*$#'+)$1 &-.'%&)$"%$$ !#!"   %##$,""!! " #'&%+++$ /-*(20&)0!,(/+'$!#%.+*-,-,++,+*(+'*--1-+,+*,,+./-,,+,.00037ۀ}}~̀~~~ 怂Ӏƀ~~ 􅊆Ž؀ĺѽ퇍쁍Ŀֽʿրǻž̿øſƺøˀǻĽĽIJѽɴ̳ѹ԰˳ŹɲʿĴú⨠Ľȶſʿõµ߅כ݇瀑žºžȀǼö¹ĿꓖȽ¼ȾʻȱźſįĿ¼ö͵ƀѾýǻȀІ⁌¿򀆃󄒡ۀ܂⁎偂ނíýӲցːЉѹͻм考;ޜ֩̾됣ȼĮЅɱϻ¾⼀ҵꃃ׀żɸʽ̺ȭ·ԳҾֳ考끅j54ifdee`ZWXX_`bcd3444334d_]XSONNPTWXY[_bg43dbaaff`c665787789897fdeeggd^`a`YUTSRSSQPSVZVSTVYXUTQPRVVTTRRSSTXXUTVUWUSSRTWXXVV[]a`VVY][WZZZ^a^]]YWSSXx[[]\\__\VNKKMPTRPOIEFCBBHIGMQUWYZ^c4ge_\UKJQSPC3C\0ccc`_^]b8:8655ge^ZY_cdaYNR_ba__``_^a5:864hec`]\acbadc_]]]_][XXYZZ]ad35457654b^[\]^_a`^^aeddccabbaadfeedfg467776789;;;<>;952a_\\\^_269=;<=6ed`__]\^e45a_a0228;8ca564f`\^^ZUTYaaababeccfgfeabadba_]^_`di87e45755dd4b\WSVYa541168865fcbbUUZZ38;75543_/456766688643764452147@>6569<=<;:;=?>=<<<:99;;==<;;::9888>=9;::>96b``g9:>>EF9=B=86]``_bd279996334223589523575e__33aca`_]c76ffgc`dc`_\]^]_ac\WV_^aaegdcfZYYTTRZYWZ_VNQPNXTSQORRHNNKLNZYTWWVWUWY`2/YHL_a^YSRSUWWSNQTTQPQTOLORVYUVRKKRWWUTSQQV[[YVRLKJLJGDEDIMMIJPSX[\\YVOPTVWY\^XWZXVVW\_0[VX]23147:5]ZZ]_][XXWXWY[YVSUZ[XWUUSSTVQKNJEHKQVYZYVRMLJIJKIKKMOOGOQXRCAJVW[UOPPPNSSRQNNHIHFHKKIHINKFBDNTVSNKQSMLLJKKHJNMIMPSUURRRSUXWWUOLPQLNQSNFINJNOMRX]a]XRQRNLQUYXXW\_ZWQLLJDDIKJGCBC@CHKLMNY`]XPLMNMNXZQIC@J?7=>DKIHE?DGGIKOVSPQTSXXTN=DPIIMHKRXQPVPSUSOPW\bVWVHGOTU[ZQRWMGUQNX[\SYYZWJIINRUWKTJKQRSXXY[WOTY[RCJJIGGLMMPQQSUUTWWRPUZYXXZYXXWSTUSX\TSRGNUPQVWRSRJKOY\XXUTW][TTRMOQT[hL?FGGGJJNOPSPSTPNPOKGHKSTTWVVTTYVLJH87[WVXWdcSOTYZRNQRWVQKHFFGKNKIFELQJKACLLNTNFEDFMRONOSY^YXVW_f?E99c=:6;[4^FBDL>Qnj`\b??;;j:977=;:>?AAAB==CDEOIDDC?DKNPZfilmrkkkfgmhc\_kwqrqjbljeipw}rmhefkcDdigowphv{vwuoomkjlprqppjf^\VSV\\]ce_`\WSOV^ckgcfmvv|||np|ti`ZWV]^^djkbb[UUfzyh\ghwyo{snoie`_cfdZ\^\]b^\_d]fi`[VTUKOSVOLQSQQPPNLOU]ea\jo[ZRMTYYXXUQPSSPQQMKNQJOSJNVLJMGHT\SOJUYY[\UIJRTZb`hpmdb[`kamstunkosnk`TOU[_^W_^TPZ`][RQSTPLEAEKPYQNSRLLRW\bghfb`^]a^bif]VTV_a`a]23/2666Ojnpoe]bgd`gc\YRXX[msi\ad_\Z__Z^baXgmj[U[ZNztwzyvnfXTMGNLXbZ]hXOPLEE@>;;CFLGFDOVEBRD;??DGD>>@?>M23/6G6^00242^_227>78;<<689=AH:\8764^`c4788;755::88841137=63`2523013c_\36_`^]Z^a4534673a_Z`g646:84cc45gcc^^[]^ZY]__cbbfjigh`e30/./0-)(((,+-...,*'%$##$&())*-.0.--,-.,,.-./...+,-.*(''&&&%%(*-*')*)('('&'('&&%''&')*('('('''&(*+,,*+-..*)*+*(+,+--,++)'&&(*+,--///.'$#&),++)&"#!!!#$#$&())*+,00--)$"%&&" -,++**++-11..,/...*&'.-+*)**+*+00/.--.-,,00.-,,--+*)++,,+)**+,-.//--.-,-...0120/.-,*)**+..**++))-+*+,+.,)+*(&'*/.-././/.///.*+,...-,,--.0/--,*'%'8(+.---'&'')-++. "!'*,,**,,**++/2452033110//,,))'')212135357...*+).,+,/*%&%%-++*)*)$((&&'0/,-,+,*)))##.0/,)((*++)&(**('(+'&')+-+,*$#'+,*)('&&((('%###$$""#!$''%#(*,,+++*''*,,,..+)+(&'')+*''*%##$%$"!!"###$&(),/0/-,+,++-+')'$%')+-,+,+)))((*'))*,,',-1/)*,.-0,))*+*. -,,*)&&&$%&%##&)%$"#(++)&%()&&(%$K&&#&()**(''')+*,,)&()&')*'"#'$()'),/210*)*'%'(+,+)*-++(%%%#8!$&&#!## "$%*-,+'%&&&%,+&$ %#&%%"#$$&')-*(')'**'#'"$&"#(,'(,&))(&'*-0*-,$#)+,0/(),(%.)&)))%*')(#&')*,-'.')---0..0-)+/1,$*)(%$*+++)*+;,**,,)(+-..-..-,,***),/***$(+)),,*+*%&(..+,**-0.++*(())/;%!$&'(((+'))((()&$$&***+*))),*$"#-*&&%,-&%(*+&$&')*&$"!!"%&$$"!&*&& "'&&*'""!#'(''*,/+*)*++.!, 13)131!$!#&+,0.'-10.,+)*(')(&""(**,--,-.,*'&(((&&'''&'().0/)'& #!$'(%%$$')'%$''%&%$#%&$" !2+5 !$%&*01/..01.010/02420.-.--/011/03.450-..15420010/./11031//-.1359654103258467410230.1.-/../.--..-+++*,.-056562004448962/1323342365656879><88 :!!! '8&"#(,<72/1" 5  !!!#""(%"#"&*(#(*(")'')-/.++/200254464589:::8657431.28::8897456:=527::;=?=;==<==:736<7331124:;978:;>AB@==>?==?ECDIKGDBCDEEBBCDEFFFEAC(%E?CHFHGFB=?=8:<@B@?>>@AA?ACBBABDEFHKLJFEGJOQLKKNMOQONKHC<765336:<=<8898549<;=>???ADGLLNMKJJKNLKIIJHHEBABAADFGKIDCFKNOPPOKLOPUWZ//01/.,+USQ[0011-QNJJQUURRSPJHIEBIE??AABGMKGGIKGC@?==@A??=93/+)*,'-=B>BDJPPCE?8998885012479<>;;>EKF?FJF978?JHLI9)#! !&/0,&&'!!$(*+29<>@C;;969<84/1;7641168:@@=<84108:;B?;>AEEJMKQSQRH@CPRMONIEGFG@;855::8;8997;<B<3795336637981<@>5/21*PJEBEGDC?:0.+'-)2714=3-.)#&451"/.)@:<7?#(-?&+.1F412<>@BC(-//*0665=?989>9439?E?-3556,%IL,,RUU.TUKEQ,0/U02-/1-20-PU15<9.353,')-2,+*ONKF>B*))*,-)()+NMSPJLGFAH(QHGI*0,,-/-/,.1**/330+/2.6-8C'HDFFHFIIJKJFCFC>97:AEFGH>;FMMAA&%IF<8?"'*(*,*&$FE@BA@CCCAA<6:@@ ==CC=DN(*('KC&+-%"#$''?;31/% #5332577-+)=%( "#&'279;9D#?;./.+-58*.6%&*@%)3;<50&N.VRB31;>=9G?9-=62-%0;$%=81*&%8JMG'+%=4/.--?D99>?99-)47200/.O>.66-(/0.10*.171-/7?DC0*+(*2784--0-,*%)(,-0:1%14*89&0-+2631*3-04/*++O7:==B/764105-0' !"('%-.)*' %,///:?>HF=:434V34246526@A6FFJVH43345=79;9632@?B<(!'G?@8-A$$@=>#C@CC!$'%"""$"##@5&. !$$G;;AC?=8?;93378<;6857@" :;2,,,)&'*)'%$ "%%&%'&-.1$+("'&('&-)%*&*,+)'"'%$* '%$20"&./'('#!# "" ## "&*'!" $*%--+*&*%!-*22.)3$!&$$$(*,-,+)')+++(**+*),/,,///,,*+-+*+--.--/1112.1Āր}~ ̀~ɀဲƀ Ŀ·ÿҀǴƹɰǻ򀂏»ʴǽ򁊌žùѴɀȴļݎýǾȽ¾̀ɿļŤηҿģнȮÔʲ½ƷǸĮ࿗Ƭ}º¼Ӿǹ̨ϵ틚±õτŀμ큋µ捠¹;ŸºɽʽžŶǶƹ˿ϸƸǺŀų½󀍊ҀŽ¯ƽŀūȫ󂙠Ӂ逃֯뉈儕׿Չ𔚎􃈗끇탌򀒞Ƚ˾豱Ǣ؁拱۩žͼԻ烀Ž˳įͺ˴ʷ䈗¤ǻ峱ɾȸøͿԃֹ܁ú¿ÀƼõʸĻϷDzʿӷʙ郀֥㑙C\_g57jdda_[YY_ZVad`^_^`352333cf5aWONNORSTTZ_ddbcc`[YWQRZ\]abd8<<::98 kgbcda\WUTSTUUSSUVOLPPSTSUSTSUWUROOSSOPRUQONLIJPW[XZY^c`_cbZWXZ`d^^_^]\[WVX[]]^adcbTIEGLNUSNKGDFFFHKNQX\]ZY]f55d[ZYVTWUQPFZ83c_]^]\]^^\\287657:7357:6hbZY]XWZ^abddgb]^c8;;94`a_`_`43efec`\_ccaaMee473][Z_15;;7b3875ib^^[UY\c47;ibbaccc5:>>>:97532255gf_\]`a39;:989;9778:;:9:789::9;:995456ffg696fb_fi5lg8:DRI@;8kg`jdbe5554geeh67gc33576423345423`Z_3125dWSVX\_Z[\aba[[`ZWYXUUVXZYYWZZZXPX]XYYSVTUWZ^^RNMMPTSVUSWTLQUVVORXZ[\][^[\033/RK_a``\XWXYVPORTXVSTSRTQRRQOPRJDLWUSSSQQUXWWWTQPMJGDEDCFHIJOUWOCMNLNNNPSRTVYVVd3335741./2565420470YZZZ^\YYVWVYVXVOSWZ]XWXZYWZOFJLJMQW^]XWSPOHJLHFJOQRQJHNNZUHPPQRTWXRRUQPONMKIIGKLJGEMVOGAANTSKLQQMLNNLMQMQPNMOPSUSRPTWVVSVXWPSUSPKMRO2JLGFMEHQTQPJFORMLTVY[ZY[b[QMMIOK9A@CDFGILNQPLIMQRNHFGE@@AGLJJD>@FKJMRVWYVZVT`dS;T[JIPKFHPX^]W\[UQSUUY[Z[VNOSQSZQRW[SINNSXNAOTTHA:KU]\PGRUPPPGFDPTQNJRUNOQU``SFSULGQX[`XVWVSUVSTUOWTUXUSUUQPQPKKHKQ\XXUSSUVYUSKCGMQVmb@CEIE@ACELPOKJIIFILIEEJPUUSSW[]WSVH3:JVUKLIKOPRUQMQYVMNNMHJKIMOOLJEINMJFFJGMQQPKHKMMKMSR\SNNRVILZNCPNLIJ@99:;6=n=Sj]j;DB;fi:=FGGOUWdekjb`\ZUOHMRSRKB?GLMMOQSUUVXUMOQSQOPMOMJIHHMPPWfaVSRGOJIPMIGGHPSMKMOOLJFJIMIGHOI9?E7]c7;>>?DHPX^_^XX[ZYYYWWWX\][YWVUWYXZYWZX\YUVXVUdh^ZXZ[][\[\^da\ZWW[\^`bd`_ceghki699kcbitmhg[UUVWWRTUVVUOMOQQROPVcbac\ZW\_egija^cffhkm`]`cdcdefilffachgl<;ml8>GGABA??3846YX:>>KRCNmh_\_<9<@@CEGFCHC@HNILIFICu=PJCOMGCJKLOQRNLMV[[ZTUWXZ[Z[]fiaV\__]_^US_efijf`ZUSV``YY``acjklijfegd^Z_idY\XTVUTWXY]dlnolommootsqqes~{wuvyyzzzww|~zwsprzyxsxDGCzuxxuoihkppljigilmmkkotv||z|~~{ustmd^\ZXVXWYTVXSPNOSWW]acgfccfkntvuutsssqqvvvsonnlqv|~|OMNMKOSQMONLJJLxx|vwrqpopy{xvwrlmvzvqnmhkmhbZW\ZTQ\`i~mWRUWZZX\`^ZZ[^`cdhgfkpsnsolejngjiaSNOG>:CV[NGGDBCINV`ahopqwztvz~|rle_kujdbhp}zsqy~stupkgnpnuqcs}xsrpoljjijgemsvtmwmc^\\[\`YVYZWY`r~qb]\ZZY`vpfk}yspome_UPSSSURX_fc[[Y]qsf`Z[jxspvpjkf_]Y^eie^]Y[ij^]bei^RUTPLPPSPPTSRRPPQQMMSXb^\WTMQJOMSWYWTUUTUKIQNJYWPSFOQINMKJFHJKNIMINTLJQSTRRYZbibaaW\YXZjswtsqhkgfok\UQVWXVTRTSSPKJMPQMOHEDLUVRW[XJDM[`[[YQTWQOS_`bfbZQR\b^/[_1^.0359Tknoe]_dd_`n\^[TVTcmj^T^_^VV\]cb`]Ydd_TNWVMrp}uovt_UNNTXrj]iW~ERSJEHMbqa=R]Pn}pl|BDDKVUv]^bmgdHGPTUPS\b_bspjosm^ZbnsoVMQUTIFRPRVXMIRSJJKTMX_YLSUSKJSYOHwamKPPQUQIJIGJt~|vOSyW_SPKJRUPUTKOTXYTQ\XUWsqwxv}slkgcm}}xiszzJJFsw@COTUQPQLC}yvx}{wlhxo?B@yzszIIJzsouCKwhnrwv{{y~BOTDABzxnd_WNNMELjuj`bmh`W^aVKJKC8EG=o]_]Wp|k[`dwq_RPPTPUKMPKWhXJHXc_XWUMN^`VX_neTM=IVeh^VVOD[^WTDJTVSAGSd`HMURGEZa`Wnb\iVJMczmQuvjPPy]dR[[IBACA?@CLTUQY[\ZSY[Tbqlu{v^^feaa`]W\mozRhhf]\_Ymvnl`rHJ~Ftq}eAD}}gSinyACBC~DGCFJJEC?C=A?CE>`gAEEDApjkb`nopmio_\^[_ggllrmhwsqi;n]XUYTQRQONKPJGFA@=BHIRMfWUPNOLPRNZSMOQ[`a\[PHKMPQJP]PQ^XIK_bZTIKFI<@FKD?D@:B?=<>DGA<:B@=::EIJV[\^T^_P=44fa`h5VY64]6GJQ;;:OJ]0_01123gZ;A79=?B<869?A:09787e`Wbc6:6<:64597766cb^19843^4620_abcTWha_^\Z\ab4435887g^^`e256775_cf3dhbb^\^]]\\Y`edf565ji`)*.2010-**+/+&-/.,,**+-*'$$$%&'((*-/.,+,-*)(%&(+*+,,0-+-/.*'&%%%&(('()&$&''((*(('(*)'&'&&&$&(&%''%%&$#$',.--y,.0-+./)&').0,*--**+))**+,-.135,$!!$(-,'%#!"#"##%%)**))+.,)+,+*+*('$/-/--0)%*.,,-/$)')+,++,+( &.,+,,)-.(,2/--.'%)),.-.--.-,./.+,,))*+,-,.12263-,--/+**2++*++***)((0-*)+((*,///-0.+,-**)**,.../+),.-++E-,)((*+/,*+)%)(+0++*+*(.-)('''r**+---000/!+#0/+42/.-,-/.-*(*-%$&)+.,-.010-.1-,/,*('),,-.0.,,)/4.,+),-$00'('&),+-,*/,%*++,(*..///-/.+ !1.++,-+'&)*,+*))*+*()("$,+*)(&%$%$$%#"#"#" $&'*)%"$#'&&(*)+*+*(."###%$"!!"#$"#%$),.1.--/-,.)$'''(*.21--*)+)*,(%(-..,('+)01OO*,**+-/0--/,,+*)'&&$%%#""',(#!(+*$&)('&((&&(')('''(*,+)'+-**)+/,,(*,*)&)+)&'%$'"$)*)(%$()&&)++,,+,1-'''$(&"$#"!! ""$#$%$##$&'&$%&&&$"#$!"#$%%&"! $''),,,-*-+)/-#%)#$(# "'+.-)/-)&)**+--/-'(*)*-)+.2.&)'(,%!*)(" "'*/"!"*.31)%,.*++'('+,+)%**''++10)#)*%$(,/2.,,,+++*++(,)+,+Q)()(%'''+1,.,*+**-+*&"$'(+81!#"$" !!"&('%&%%$&'$""%(+*)(+-.+))#!(("$"%((''&$',+%##$#%&'&&"$'(&$#$#&(('$$%&%$$*(,'&&() !,( %#"!!:'6-4 13 $%%-1299<;742/*'#&+,+("!%''')*+---.+(''((()))(&&$$'(')21*'(W%%%*(&%%&*-)&(**('$&&&$#"%#!/2 !$%*.232--0/0./..--01//-..02000.0.0.,.0--560/.011013100.-000124213345646226<8551/---.+---.,))*,++*,.532410/23779:62453358325664677:<8844659 ;;!%# $% *-#-A92.0%! 0 !""$##&" &)%&%#&": +%)(&$))+,--*)*0331,--/1C4:<713554540.59:==;72/.078326667:;<<:9:<:525=:441/11123469>AA@B??@@B9DIKIECBCDFFFDGJKGDA@CGDEBE&)%DCDBB@<;=AA@>=<=?@?>?ACDHIGIIHKOKKRSRUUPPLGKMPMDEHE>998544461/1.--.1447;<>=9:>?ADEDECCDDDCHGDA>>?>DGKPOLGFIIHJMPRVW[^[00WQOQV.,*.21../.YWUV---TMKIKMQRTNBAB@BBB@@BGJFEEA?BHIGEA?<=>82.-10-,58@PUKK;//014437:7589;;<>?>?BCNNFCEC?;>B>@B;0,+#!/3,$"!%)03:CBAEHGGFJJ?82.9O_XF?<9???A=:@CEFDKC:778659769766:DKB:777547FNPXabSIA;>KNHFDBDC>;424544/4:>;887;IVUKD>;87@KFBFBBB=9639?BA;759FC:9?BE>k587203452465332100.059=::73/0,1-135312321*,1-*6424SN,10*.,++()++,,0*23-,1321257<8353*20+/9?BBDB>?:;D>5323411..021+'(*-,,.)'&*/.,/52'C$,66220*01-+*43362+%%))&#%$,<>>857::77@355030:@<5/775/055:9864:960*0/)OF?@JIA>CC60,-01B<3>2H'0.% ".9.,3+B:F;:C%&IG%)/-;.12931C(%+./,-3857A@:>A?54DC;AMGHFIJKKI>?F?972-5CJFD:BFKOBD((%D9; "*--+++("CC@>=?DBCC@95@: 9=CE=A(&)BBE>8<#*?5:<<>AA?D$-1$ !AADE??:21)!/85128541320+','%+2+L6F# :)*05/)%,0=(FC15<+0)12:RWR=27%#C8>;;42(060,%+9??66,+08KD%!=!:.10-?E;258F@5.,+/+1)./+191)*383221+,45-06=GS9** )/9:3./,#15/.#&00/$)/86)).-)%187+9319.'+=J?,JAF6=./.&-.)*,.-(.1+4?@=q8653de4de799laa02335664552_d`Y042`YUSY^^eaZY]`_`d^ZVSUXUTWXUTVPTZ[USZZYYWUZRRZ_cb\RSVRRQVZRS[]SVVQRYZ[\`ee\TX[022[IT\``\XXZZWRPRUVROQSUQLPUVMJNPLLPLLMOQQQOUWRPTWOJFFFEEFJMNTVWWMUTVSPTXWSPOQUWb57674YU[4866521012`\[[[\ZZVUSTTTXVPLQRVXZ]_\YTHHKMLKJOZ]_bZSQMLWSINORVMIJILZzpTIMNOMOTVSRRR[[RONNLIILJKMLSUNGJJ1IKLQVQPRSOPPNNPMKLKLPSROQYYSXWXYTOSSRTQSWVQOOOPKPQ9TUVQSVWZZVWZZYOGCJHGK=8=FFDA?>CEILDAGJBEJFKMNPSUQRVNOUSOLOQSOKNKKNGFINNLOSPLRTRMNOJEJNMOOW_`ZWUPOXXUSWUW\XTSVRVUSRW^VKGFHD;IM:=D>=CMQQOMJKNPXUVVUSRX[WSMJGOZ]QIKNVOT]_^Z]WPQUXUMSLLNKSQRUPPRV[Y^`[WQNOKNQQT[[YQOQPTYXMD:?KKMQOB:;>EDFHFKKLFEAACFIIEIMSWXXUY\[[YTPMKQRLFHGIMOROKLRTRQTMKOSTZ^ZRKNNGJGEGEEIJIJKIJLLI>78:>@=N[F:KYc^\8EIFC@BA??=>EGHE@ACBITSKKJHF@i:CCNIBCFHMQTXYUT[cb\YYURSTSXacfa[]ba_df_X[_[ZZ][,YYYX``^YY]`\ca`b`ZVUYWSV\_]]\YW[ZXWX[`eiljsutryygoywxw{x{||ywtrqqppqnltsvCBAAysljiklhfdbdggfhknpuxwy}}{~~}}xstwxww{wropkb]]YUTW[b[RVWX\]\^]\ainlhjljlprnrrollhjsvuv{i~~LPPQNPRRTWTQNJKORQNJ~w}u{}{yrpw{uw}}~yv|~ukmqqtvrkd^XZabprjddbcc_^acbdfefjgdgejignpnjkka]XSTVZYRU[TMTcfdVF><QUJKS[a__\NJ[b`b_hHi\defdZ[Yhkf~x{gof[Y_\nusvuQRHlk{{e}FIzjle`_uF~~AAFLHIGF?|}?GGGEAEJF>|zqflnu~zo_[`a\nhacjrkhckmuoac\`USTONGELMPLLKA:BGOK^dXLTYHJQUNOPIHNY_TPPLKOQRROSYX]ZNIPPMJKJJC6AGBJPONA=<@?=EFA>@LB?>?CL_^VTYVQ?:BAB?;>?ADLS`]T]6YD=58eff9d`2WT7@DD@E88]^`5533042b:686:8468435 " !$38,*1#(050/%&$" !   $%%$!!#"'.-&(&&$"6/#"+&"#%'*-.11//497300.++--17785236669:6135334542h676335638668531042/267654424411137:<=CGEFDFDGGFCCBAAA@AA?=B@BIJFH&&%%GEB>><>=;:98:=<<=??ADFFHILNQOLKIHEEFEDBEDCAC@:6663367<7-///278988<@C@=>A??BC@CCCA@>@EGECGIKLORQPMLLJIIEEIIMQQVVTSTRQ-0/0-/1/021/.,SQU-.1/-*NGCGNNICFFGGEB>=DKLGCCGHIFEHJE>?B@BD@9531256?A<988;<768:;;:9:<:;@>=;@BB???753/1244/03,(/998,$#1@BBEFFAEPTPE634>HIB=>?;=@A@ABGGDDD?>:60/0025=@A=979<<;>DJND=<;840.0011-1;66;;:8;FMIEABB:35=??AA?62;96<>?@>767?@:;?=>77;< +961243224342/47856887.**352753/00-,--01+.=60,),041,++,-+*/.-/0-../+05453.4.*-12)3?@AADEA<:978;;/),,//*+)&).*&-2.0..-$!&*.127;0%)9;40+,.26/--5<3-792**+$!"#"!/<>90&7?88><6=5-.2=:862;61-215=7;..8:7/+.++ND;BA>LHC>6-056CD2+3-)*.1$"*17:9'141GA<:@I&LI@#(.+:*,486>$10.,.-.564:DF=>DC66;:8;3(')&%'&(/-NRRNWdbPW016+KKN.2)W5?2.357/,--+)+.03*'KHJE>0?/1,*)((*(HIRSGAGU8C13.TJ+10-+(-0400TL-696239-0.EEHIIKIBCJLLHHG@CD>=60+(-;>?ACA>65@="! @<=?;@%%B6GF>ACGOA<>><6=AJ')10"!B?AHEEB92/(#! 8/-.74-#/4*08$'##$1<##-'#"@504;3#+&A%@>2M#6;C-'8JD-."!-$&FG?=BD<=-82))"&../6?G4(,B*)'-=62437<>?::>F=4/*+-60-4973,(/1.31-*-//10146CQ=3'%/.52501,#<8/2(08.-'F))351,(-+-.734+#')#1HK<2S/925.MF+-41),/&&*-2110*'587846G'8.54350129?9DKE?GC5961/65>@>=?N--)FGE87>@2>%&@6<965ACB$B@EAG"!$&$%$$ @C $###"#&$ >IC>8>ABDJI@<41581<9238>;7268;912.0)()&'$"'')%$%! "'$.2+#(- #&+$$%"#%+.'%%#"&'&$#&-,/-$!%%#"$"" # #&$# $#-.*()(&  #&,*%))/3010*'! !"#!$)--.*,%)(,,()*./,((-,+%-*,,..-.++,.,+,+**))),/./120쀂 + ̀π׀~ƀ  Ǿ½ƾľр˿ïʲͫʴжָ􀃅ꂒƸ׀õȶŵŀº½þÿ¼ǿɽ#΀ʯûʽ˰״ȿƿ»ƿͲǵŻĪ͛ƦⶽɰѲ̈񎟫Ž󇓍􀄄ꁊইђŷ¿ƽú˽Ž»ùǽþŽʿǷĺރθ񅔎𓥛Ǽõâ¬ކծ̆咱€􀀄󂅋ʀꌎ뇏򂊈β޶ȿԙ鈀Ϳϻ򧺣םۅĪעȜյˡDzθ«īůԹ˭Ͽ숄ؽ펗󀂆過Ȩ۾ƿºƪҸ̹ǸȀֲɼ򁅎󈜔ɟ>ge^X_ef_]_`_\_^\YVVRV^bdfd`2665764a`]ZUQQPSWZa`\XY\]_]Z^b^VONT[`e43288647866679nmk6ljgea\XUUX[ZWSOKQQIINOMHHJMMLOTYZ\XVUOMPYWWXTSUXUW^^\]YSR[_TPTY]\\a_[_cffaWTVVXZ]b``_``\XXVY^]XVW\cb_]^acdioqkfg`[ZZP;;SSF?ELPU_WGNUVVZ_abbba]]ZO=6KWUHAHLLV^NFPSVZ_abcc122feca`]]ajh5554a]\][Z_b][[`_a2345544576gdg3d3gfe23234544hea`abc^XYWUVVXY[d`^bbbhjda[Wb9852343bfjd[WZ27:8876425775d_Z[\XUUVVWYZ]c'fiki5435545:::9875ged`YX\]___[[\03666443-896gc]_b[VUVX\YR]f4gb^[]_a^_b`a//02a`RV_ZZ1985\69613433676667985765434434fkgcbe\\_bc358i^]]\ZT^`\]aps{}lgb_XY\^]UXa_[]^a1356633551^db[[`c`[ZYZ\_^^_a_^^YUTVZZXVWW[\USWQPSTUTQNTYTPSZ`\]Y[\WVXZYY]dcRSWVVT\][ZWXYUTX\131KKX[YWWUVWVUQQTVQNQQNHGNWYNGINMEHHGGIHGGJPV\11\NGEINPNNPPVa2553^[YXX\WTTOQRYZX[_a^VQS`43021[`3321`\Z[[YYUQPTUWXSMNTKKRXXVTC?MJKPRRIKU`cc_]WUU[TPPPQSHHKIJO_uSEKMNNOOPNOQVTRPPOKLQRNORQMNSSONOOPQPKPNKJOQOONLLNJKNPPRROBmwMTQQRQPRTVTSSRRWYYYXSSZ^^Z[WXYUTVTQTRNKKHKD?C?=BEHFFJGMNOIGJIB>FKLTSTTOQRUTRXbXUSTWWPMPRQJIIJMPKHDEJIJLLOT]c^WTOEELJQPQZ_^VTRVa^[VYUV_`XPOYb_RHH_jk_PGDAFJC=HLSSUXRPLKLLJPU\`\WQVVTXYZLBN\d_^\[ST\joee[JQ[ZXR[a^RHJGHRQPRSZUQTVSPMLOOOQRTSK?AIRTUVRPORNGDFMSQPOVOFGE@?DEBA>DGGGKNORPLPV][YXWUTO^hVECDCCGLKHJNMMRXTTUWUSVQRONQT[EtqBGGHHJGHIJTVE59ADHGEAAFCDJ?o__=BFKLNNOOOQNLNNJNMDAGEFDDFG==AFJNOPQTZXXTRVYXUUTVUUTSTTUVVZ[\\V\YWYUU\bdinqmecabb`gb]\^_`bbb`_abba_^dh68789;7hjmihL1F`_^][ZXWXVUVXZWQNRV[\\dh``b_\^_^_`eeijgb_cj:>A@=9;:impaZ]k:8n7;?>=?<:9:8aU>8oS=IddV:?dhalAGFEEEHGDA;=CEEA>?FFOQBFJIJKHEHGLJFFEKQQRXZWYZcaZX^cbbb^[`]__][]_]dga\[^`\[UTVTXY\^^]]Z]^_^ZXVTWPNQQRRUZZ\___`baaffeeiijorutspsupnrsrrooqv~xtsllmlpqkksyz||~}xtupmiggfdeddcbcbadggkpstuxxvwwupmolgedfhnqsvuljlgc[SNKSYYccc]GHT^dbUTX]eijiikkklkllfedcjqxzz~xu|}~|}}|~{MMMJGFJNRRNy|GJMQOF}}~}zvsmrqtz}xmjdfolkhcfgedd]\abbaccaaiokjffkkdcekonmie`][UUQ^g\W[Watuusfswuqyxvw}xvvntwpvpfbccb_bimjcfmlilnmlproiglonqv}~smkmkgkqfURVbZYZbaeff^_bb^^f`WVZa]`bGKNQX\\b[WU^ad]^eoph_YPMSRVYXWUUfg^fpe^XY^`b_VPPRXaakoqm]OYf`cmkhdikkc^[ZZY[d`cb_]^XRNKOUXZ[XSTWWVWU]bZ\ahnqvj[WTOFFILPPJQeTNSY\SQROOPMJOOROEDxkGMLE|EYYYfpmoqsu~xnhgkhok`WRSWPWZYQQQLBJSWWWXVNHEQWY\]dg\PXqkQFEGJQPTVR]_]esqifca[TWYYZ13113=WghcF9agdmj`di\U^cedi\R`^STRWdgcYNT_ZUJMQOQqr}P\oe]V]_uw_FEGLPTRPJTjjs{@OUVPystFhfGGFOTU|K\lhqDU^QLRV\\XWJcr|onwuc]___dYJFGEHKKMMPQU~OYMYcYPOW\MIJKJMQGsi`yTULILHw~BPSUQPPKKJPUWRN^]\]b[OTsz|{yz||{zvoidYUeyogikwzGIEHKJGGGDFDH~zsz~zxrjeaw>BCB~tqptyHw~|Ilmx|}mqJQY\GGEytjYVNVQQS_DnRW`fbQCKU_zqPF@J44P\w}wtuBsH{e[{jXaUKLPgz|HYTOceBM>?>U?FCyuoht}{dUpSHKITVSURb|i^eTU?c[cgrpieaZXdo\^goaXMPa\N^fgXOIPNR[\PPQVV\X[Q]xsmrVPOSMVXT]NJcRGHqn^_`MD~ibWKPLKV[he^IBDU>l~zeSimassigJSXRJ=>?8:S]SCA?>=;=DE:?KFKGAHLNOGOWUSH=FNA>?@DB<>CDE@JWXQR\LHGGC3c3382\YY5<:7LDADev1I]74635b488948;<>:7:940>=8;9413de:738743776462c`298325333431Z[_e`W]d5cX[ac133fdeh96e\^a`a_e474d_c76c\X\___[YX[]^acdhf0.,(+02.,,.,)*)*))*&(+../-++++*)'&&')*-.+()++-+),.,(#"$)./00/21/.+)(&(),-+)'#&(##&&%#"##%%&)*+-+*)%%'++))(v((+)(,-**)'%(+($&),**,+(+./0.))*)++.4/-/110.+)*,,)('+01.+*,0269>:871,+-'))!"%&',) &*()+--.../,-+' #*)"#%$',$!''(*-//-,8.32***)((-.*)(+,+300/0/...-,--.*'8&&'*+-)')**.0.-+).+.0-)%&-,+++(&')C,00010/0.*(*++,,+(''0.,,.(%&'()(&+-,+)'"((*&&**$&,'(S,0/,,-**-../)()+)&+,**.9;;:0/+*()(((&(,*)+-.&,/++-.,))*++)),/...+++,/.,,,+,/++.-+,--,*',0-*-14//-//,+./.-044)*,+--00/.,-,)((& $,.,+*)*++*((*+('))($$'-.($$%$ $&$##!#&&$#"%()('''(,.,*)*+.-+,*,,/.++,.+(&',*+*'$$$##" #  $ !*./,* *'(*++&',13321---0,))+,.''(''*1+1/./..01258:844223052/./0133200113322565687;,&2///0/-,4-.0.+*,/232684331022101437974468 ## 79>512<: (&:, (650 5716!%$#"!%%#"#$$"!%%*+!$'&&'%$%$('%&$(--.12133964247656335243223559;85346662020113466645566410.2.,.//./42366556548889=;<@BDBAADECABBA@??AFJHDBA>??>?A=>=;<;997999;:9:<;>ADDEEGGGHFCBCA=;<>???@DD>=?;85//-1438:84%%/7>=2179;=><<>??>???<;;<:=>857G@319:;::?B?<>CA>@A??BCA=?CCABDHJIHA=>C>;>C:/-.6247<;;:<77899:?721497;>K*/V1038:?855;<=78>FDB=7-,01577513=;8@E<646;?C?86658;:BFHF:08>9>GFDABCC;8;8:9;CDA=;997420[NN0468873112332:958;1TQ/04510/,-.++/./.))MKD;HO)/,%>(2,+6:9:<=CHD?;;>>C=51/11,242-/.(%,/./13/*%$+/0139<3,2@9+'&&(+*-.)0127>90+('% ""!"-:84"5;9?=7;=408:;8=6/87-0/19;72,/730()+*-KFA@K29L<73/68FG6()*.//,+'-98@D!+01-@=?J(L87*'%+-.B$2;7=F#/5+(-255109CI@>CD85779;2'%&$&('MTSMSOQk^].-..2RHHM,2*V6=4-.25+***OKM*+.(LJHH@:/;-/)(+*+,)OMQOICHG&243XPM0..+*(-030SMQ.:976:4,0SAEFILECCJPNLDBBADE?<6/)$#0A=8:;HBB&&"$''&&%#CC$$&DEGBC<9?B??<:63? !!!B<;;?DK'A:HKAGDG)<:AB@7=EQ*.32$BAG&&A>C7-+#" !"'!8)+052)(-2FC(&#$%(;>:9<#<>%?2/?8/3,$)+6;:(J22/5FR;)&%#>@=9BGCF4)@*%(%*+)-+5DF:///.-',19;774009B558@5/*-93-7;;3.)0,-34,,//-1/2.2C?9@.+-1,01,2,%7-%%C@325*G'?<8/'+)&33761'%"3&PHRO@2AF:FICC/G,/)#"'(""-05:4,,,(/18?15=>;297?4&$@6-88:=8@D)$AJ+B@<&+/'%$!BC$)#BD#"#$#>'D>ACJJ'*.'=:-.<:;@4+1::523=731385-+)(("!! ()(&&$!#!&,,'&,"'$"$(!&,$%&$&&%'"(-00.(&"$#!$&#  &)"!! " !##% $)'&"!'!  !('#%)! -),,(&$%,++)((*/-(*/-(*././/.,)*---,.+),.+()* +)(*+,-.030 Հ€~~~ـπՀҀƀ ĽüрƸų̸ӹ邐􂉏ЬꂎȺǾƶ¼怊ýŻ¿ŷ¾Ľɿ»»Ǹ؀ĿĪ̶ĴҬ۸½ǽƼԀɬðณƽȱȾߡĿ¼Ʒľ¼񀑖ʿّʻ½Ů˴»ǹƳ߀¿Ŀ¼ƺ¼׀ƽ¿ưрſıε½ſƻ򄐘ij熒׀ƼƽↄՀ䒲候ҸڏƯʽお􅌑À􈕕􉗙􃉁ɿʴӻдʰ悆ӱ›ݱևلŌ˵έܿǿ慴ǯιȶȽнڀ񁂄دȀŷпʻγϻܹͼƲκȪہygdfe_[`aa\]bb_a^YVUTSTX]ba\]35698654e`[VRRRUW^`^\\[[]]\_eicWMLPTY]_`fggddb`]\`ccdg7:8;?=k]ZXW[]\^ZTRSQPRRQOMJFDBGPTVWVWWTRVVSSRPT\a\YWVTTY[TU\```ca^^bcb]XVUUWTYe_[\\]cd`bcecdc\^c`[XX[cjmo;<=9877632798j`YTTUXVSTTWTQ[bhd^YSW`a_[Z\`2564\YWfYZ045543a^bca233236766544568:;94hcfgggbY[[]`474``^\ZXW^\]aec`XJ{VV\_[Y[[PS\]ZZ\Y266761X0342d`ZZ\]``^`b_[XYYZab`ZVWWUW[\ZTNOUZUOQRRSTYURPPRWMKRXXY`d`ZVXYVTVZ`]UUdaXW^\VUSV]c_^\11NL\bYUTWUSOQPOQRNKKLNLIHLRPIFCGIEEFFIS_100XSQRSMLGEKRRQQW167i^YYTQMMMKLMLKLJOQRSTZ\ZUV[_acd\Y[c2aa`^\ZXXWTSRX}WWURRX]WONQRQNFFQPMMOQMOTUTSSUZb\XVVWRKIEABLGCEJPFKMMJKMINOMLMMPOPQVWTVPSMFEINXSPNKJORMJJJKQTPLJMPOJNRTRSTQQKADPVW[WNOTXUSVZYZXVX\YSRSTUVWXWOLKPMOPLD>?BBADEHFFKLJKJIOROJKJLPSTUTTUVTUXZ]\\XZVQGCGJ@8>FMPPOPQPMOPQT^fdblbUTMKPKNPSVW^a^]Z[WUQV^ekn]PUbfde\XVSW\][XRIKNHKJRNMKJJFPRMJMU]][]_^a\^JDEHKPY`][[Z\_ed_^UYYZYRU[adSOVVNMKEDGROLPSOSSMOSSQPVVOHGLNNLNNOOQHDGHJLSWQUUPC<68;89DADFHFHJJJLKMSXWSTTRW`lYGEFDGBCFHIPWYZWWVUUXVWOHFEKXliUC;MTSPSTHBFILKF:8=?AX?;9=@@9=>>:>GMPUUPNMIJLOPPHFGEHHGGIPOJKHJPNNPTWUPUWXXXYWVOEGKMWVSUQMMLIKNLIIJNSMIMMB=?h|@{dXpeirq\BLm||brDWpGZ[FWD[?=tvsrnlzb[PFCMWUKGDJasHiHiF;7]Ztw|ll[[YZdd^lv[VRQPJYcbVNKQP[]]PPOT``YTSZhfu~j[KKJSV[YYUSN>=9>ADLKELUMRRGIHHFFBRC<:8A@<;99<86=<58;524637826641554354`[b566454ab453bZY`h_Y_cf^ZX^ae3edbch76d`_]_`cd444e_^d44aY]cd`]\\^__aagj2//0,*,--+,.,+,+*))('(*,..*+.-,)&&&()-.,***++,++-/.)$"%(**,-0220-,+)(+---/2+*)(*++--)('''(('&&#!!"')*+***(''%%%'('((')-1,)('&&(,)')+++,,+,..-+((()*)+30+,-.11.//.-..*,00-*+-3788 ?80./,&&# !&***($'(**+*,-/231.--'!"% #(**+%$&'***+++,,/L/-+++,--,+,)&%%'))-,++())*+-,...//-.///.00//-*+-+,/0-)(()--/4/.-.-*(*++/0+-+*)***))+,-.,/..^.+)(''%"$,+(''()'%&')'%(++*)'$'+*))(&''('0('*)**)5-,./..,&)+,-+,*('(&+**,./-(!2""')'%&("$)*)+,) %+,**++,-+)()*,000,*+++-//.*&'*.-))**+,.,*+*,/(')--,.0/-+-.,*+.32--62-,0.++),/1/-*!-2-**+*)'((&((&&%&'&%$')(%$#$$!!#$#&'&#!"""%#"&**)()2-,,(&&&'&'(())')((('*++()+++.0+))...-+)%""#"! $#" #&&&'*+)(%%+,**)*((***+*+.41-,++*&'%""*&#$'*#'''%%'&()))++,++*--++(5*($#%(.*(&&%(*&%%&&),)%#&('&(*+)*+)+*&&-//1.)())'')++*)+.-**+,--(&&)&()'" "#"!$$##$('&&%%)*(&&%'(**)))*)'(+-.-,+-*($"%&  $')*((*+(())*/10/61,,&')&&&)+*//-,*+)*'*.257-'*/001-,)'*+.//,&'(%$#(&%$--*)+0420232302%""%%'+.,++,.020-,(**-,(*-12)).-('%"!%+'',,)++(**)((-,)$&()'&%&&(*$""#$&*+(++("# !#$"#%$$%$'*+*((*(+07* "!# !#%&)+-.,,,+*-,,(##"&+64) &+)&(+# "$$" !"$##'+ ''+*-,'&$(/%0+3"  $()++(()&&'(((##$#%%$#$''%%%&*((*-0,)///0./,+($$'(.-)*)(((&')'%%'*,)&))#)%$##&&$$''!26$$#"!""!$%&*,.0-,-,+***-++/0-+--/,+.//.+,0.,,.0-.212279576320././15401545662356:76561",*+4//131..,S-/,++,,0213665431355642235579:7<"$% 9963;755=9863!-0) $17:--5657 #$ %"!"%#$!&%*.))--)%&(((*)')),021///15996367996456444752336430347797132/0/./3621135646/13.-01/-159:988656:;:;@>7:?A@?@?>@BCBACCAABEHIEEEA=<;>=8?AEHIEDA>::9:;:<><<;;=;;988::;=>?ADDCDCB?>=?=><9;=BEFINOG@<8544002300322589921118>CA?>AB@@><988;;=?BDFFHIKJJMMOMJIHdHHGKHFJMKFDJSTOPRVSS+..-*+,,UOB>DL(*,/.++*QKJKKNOKJLNSUOIJIJKKIFBCKOOVNMLKFAA@ADD@<6668:;96566458=::?81-,9AB=:99@BIPKD;206FMLR[YSRSOIGDCHKJJHFFJKJC?8404?B85>KL>9@E@=;84677727;ADILEBA==9799::898/.<@G>772357:/.56028878325>>8679=CJFB:;>=8148@AA<:9741.5874TQIQ^587>=?@<:<97:@==;875599.0667820VR03544678610236657DB>?DD=952/.++,-0.-.RHN,..1100240/.++,-+('=957>%+,(" %',=H@:=?AEFB?BC>:<<7/-71.94.+15/.---/21++/100123///-32+'%'*+'&'+-*).41+)%$#!!-83($959;99:9125574;319/'-+5<500..3+'$),**MNHEO3/C<5.28;@8)BB.;6-*.13=7A>"+.-&CCFIH:+9,*)+(#0,C=6=BD$-(*&22.+*09ED>=?9766744)$$(&N)ONPNNJXYS13.U-1PFM*,/+*67/+010PMNRMKMS*)KKLGE@7+,*,).*,OOOT,LEBE>D\2[TKW,+,'&(,16W=RV0769:7/++D@GHONIIFEIOJBB>>BHIF=50--2617=>IF%&''$$%I'&EABB%'#%FA#>??><=9488@!!A:=ECEECEGHBAEM'A)L5:@@A>AGFO,./D@GIKL=:H;1)###3"9//201+%&49A6-$)/+!+.6 !3> >2*@88??4#&7AAFF8B-7_X;-' <>>?=11)&$).,&%"'4=)F2';$'*:>A:;0133;:3=@0.,-,)4993-,.-233-+,,660..2:8>E;4)**/01/0-+*"#399>=<9*%5>.,=($1+31,+(Q=L7TYZG?>C;BOXUB5,*,$ "!"')!&574571,4/&/+7ME?E796;LIE6BQEM:JJIM+REGE961)1CF@MO+5LBCDC=359( ;52/05?mge`cceieb^^_\\YXZWQLKEEHO[`[VXXXUSTRSPNPQQZZWVTQTY]UW[^a34cdfgihd`\Z[YYZWU\[XXZ\abbdfdfh5c`__]`ceikjj689qkd`_\ZWIHIHFKPONMLTXY[\```bghd_^]XUNDDEEHQSPNIKRVY[]_^]^]^`cbbdaXRQTUVY]XXZZ__aej5432233243edbdca```_ab`b`\Z\^]YXZ__]b48<<::<;<;7544578kf`\[ak49idhfd33346566654214jeb]^]YVXXWXY\eh54655676gbaaaf68558:64aabcc^Z]a038:;@B>976334h896e`ZTTTSTUUTURSVUch]WTV[\^ZY\]]0`[]YUYY^688873`^`_b22d`1453`^]_\]]\^d32d\\^_`aaabc`bbcb``]d]\^64i]YRTR3@)3Aa00^T=;9GZXWZ\a347540/21d4gccba\XW[_2334d^`c_YW\\]XVVYTURSPHKRSUWQRPORTVUORXTSU^njWV\ZUUTTTUOU[bcbab_W[__2c``12R]aZTQQVSLIMPPOJGJIJLLNOQOIHE>>CHABIW58885[[_[TOMKMUPQV[34]YRKKNLLJIFACC@ADACKSVWZ0b\WUUTWXWX[e]WY\`bc]XWVWZ]YVVUVY[YRONKILKLPRPQQTROKJONLJQ^XQMMQB8BCADIJIGE@CMPQHFQMJNICDFKNNMSVQULNOPIHMORPGFKORLKMMMOTSLHPUSSRXYTVTRSVNBGNXF@QWRV]^`ZMVTJISQJNW[_^XWU[YPRQSRNSWVSY\TR_W[WKB@6LMHMOOOPPQSUSSWTMKEJIGILQRJLEA@?GMOVTPSTVL?rtli>KHEDDBBCJLFPZYTMIILLKKHIJKFGJKJRVZ]_`ZXVTWXZXI<>?CLYUSUVY\_]TOKED@LSJ8^[8FNRNSF\GC?FINNJHLPKBEDJNNRRMILKIKNRNPY\ZTUVUTRSTSX[YZTTUX[]\ZYYZ]celkc``XXZVW[`a^`gfdbeddeghh6;<;7dab_ggllgca^\]]YWWVWVVUVWTRUV[dc`^aba_^egaZ`geack9tjchmhdlicdplj7<:86gddaX776Z05CAEJ^h[GJX]bk9:>ACAGIIHC>>>=>;?DDHTRSUVQJJKFHKKKMNRRTNKPOY_bdYLY``bc``cb``ba\^`a[`[XZTRW[\\^\XXWROVXVUSU]]jcSWVSV[`\Y_gefgkla^bfdfmofiu|wpz|ssxunlmpokgddhrupligdgkhmrktyvpfbghicacdggfiiecccabbcdcdceggghjjklmnhgb\ensuw~~umja]Z]]^_ZX]]WVTPRNMRXbkvunilnllifjkdfpuxxrpsw{zz~}y{}vx{||~LPRMwos}JIHHJ~wossqnkh`ZZ]^_[WZ^`]]anv~{wwsh]SROOdiYX^bqyv{rynbbzqqjnttwxxwvwyvn]OSX`ighox|{b[^]cjjhkb_cehr||qmieb`WSWQRS]e^dicbXRRXf`_bfmsskkgZTPLGT`ZWRRNKMOLKTRKY`^\gtpkr~ynabwysc^a_\YXRIZ_Pxjbv[]ZXXU]_\[XZ[YXXXWWSJLWYZ]dlpNOT^b_ZMS[VZVVWTVTNW[[WY\fg`fldWROLKNYVLEx{zRWVYXVW^`YQMORW^aTJQRQQQRcgbc_Z`eu~tvxyvrqolhecb_ZSOUb[QZTTW[^WXUS[VURPSUSSNMRSRWUNSLFGISSQS[da\UPUYZ[XVVUWZ_2224479=IVbaAKdb`hjimi`SWZZba_UTXPMPSej_[VPUULLLRYSM|mt~m`Ybk`TFvlOr{^OEGSmkaiW~LKMD|fgthiURJGBCpkxsmbnFD^abZU[cw~tkhchfZTTVOHIPIURNQIORTQQVTNK}Hxswwi^`qPRMOJxysNP{MRKJLR[V{VZY_^YWTqvyv|Mxyunr~zrkggfjjagzHKKH{FH|JHFICD|tqjfgdk{EF|FCIF~yKOOObe}wmnsz~ILNyw|wsviWLTXVHGsxhh^SHSY?SpoWQJG]ahgNRrD;;@|^u|i[U^tjwbQhxhizdHbH]ZHccb9Jgw}v{}vptvmmcYSC@QWC>E@BQ_EM^qaN<:`Who?yzg^WPephk{h\SMQSSUYSKLRUU]^TROVcaZOYWhos^kj_SDCYj`YgXITJJU_vwl\]QSUMPpc[GITTPDLkgYcemujhXXbw~f`TW_YRQWPMQNSkzpeabaa^WLaKHuuwynsjbry~dw|zfnb`uRMPvh`ZZf{~IOwusqhcZkIAunie]cqr}E~H{ytov?@FIOCzzEEHOJ{~r{yC{vHgf\}Bpj`]WRZ\lf`cib\\ZZSOHCBAFUOM?KYecUKGORGLJIHJQOJKJ?EGJKGL]OMUODCGEJFIE?:8?=>>CBFIILURPGC38BHG>73_694847@CFB;>W;Z4683/503;4866;;;<639>?;8659424788925652443236G4Yb5664dc3a`c45c[\b`_XZ^^\YVZd4eaabci76da^\\_^acd3fYX`f5h_\bg44ggdca_ab/.-./-+++,**+),.-+)'&'')''+(+,/.+($#%%(*+**++*,*)+,-+*)+*'%%(,/-,-01.+*(''(.10510.00/111.+,*+**+*&$#! "%,0.+*)*(''%&%$'(&+,*'%$%*.('+-,//0/11.,+*++)*)(,,'(+,/0011-/.,,--,.035532961//-+*##$" "%$%&%+,+,,-../142/..++(!"#"!%'%$#%+*+++,+++**+.. .-+--+(%')=-+***,+,.1--+-.-///.//./.+++,-*)*-+),./.,,-01./.-&.-+)*+*)+*))*,010.../0\-**,-+)+,-,,*(('&%&''('''#*.*(&')(*'()'&'&('&(&)*)****'&'')(('*(,,++,,++-.-,,,+**,('(.)'$$&')% (()))-)/0//.+**,-1.01/+*.--,++,))')($&++,/,-)')+,,'*/,)),43+,/.++**,,(+.322120,.001/,!-1.+((+)%#&(((%#%&%&&'()(&%$"$$(%&++'###&+((,-++*'')'''&$!##"#%%$')*('.+((%&'((')1/*,+,-+("" "$&#!!!"$&'(('&%'))+,+,+++)&%))'&(0,)%$' "#"#&&&%$"$)*+&#*'%)'&&&(*)(*-,/(()+'%((*(#$&((&&'(((++'#),+,*,.+-+)*,+%',0% <"*+('(+,*'**()/220,)*---++),//**(($$()('&#!$%$%$%')*((+&./,,0-))+*(*-///.+*),,,+)'(&'*,)%$#$&*,&,32.+().+'.*''&)-,++//+*&&'(-10,./00/-00/4().//.,+#&$"((%'(-&'*&!#00,.233-%+*%$)'#&**.-)*(-,()%(+*(+.*).,.,(# ((&)))()(**+*+.+(&#&%%&&*)%'#!!%&&+(')*,% ;>86 &$"!" !%&").,*%"$%&$$!"## !$&%*,-./1.,*)++,+% #&,)&()*+-.'$-$ $*$.-$((%&&"!#&'%#$%##(#)(." 34"1$&((,./-),'$%#"#$%$$%%()(&%'##**')*4.%..11.-+'$)*+%&%&((),,)&$&)-+(*(#'&#&'&%%%&'"05:!"$$%%"!!!&++--)''&$&(+()/0-*,.-,,,-+-.,-+++,-//../0045861//,+-+,/210253315676675424352443342000,-.-,-.-,./28631244326842232578547;637<85:946<97444-#('$&(27/%+3337!"!&''&" ! !##$-,--/,'*)%&()),,.-.*+0.37791*3758v7446433552367263340.256674211--2200/154;6-//.158626;:;;==647:::@@;>EHDAGHBCHD@?ABA>;9:?=>>?@AAA<<96@B@><9;CGJLFDDGJGHKQQSMKJHGFGIEGHHFJJKKMQLMPLHIQRRSRQ,-,,JC9;CN+)MNLKNKIO*QNNMM(*RRROJKKIMQQSWPNS]aUNE=BBB@=<63578963699547?EKIEGE<2*&%%9?106:DFCMD@E@78JWWSTSOMQQGBB=BIIFFHFEFGGC5+))/9:;@GKJ:799<@??B:8<=@EKOLJHD@=:54.*-+/06=9@@::40.2@968=@DD>?<42.+N*6>7420P0.00.-20.6997ALGBHPLC6=OOI<:;:964/+790LC9K\986676=>=;99;<:;;874.09?>=AJH0126;:7.SV4613244240+045114=:6;7/2638770/2-*-0:=53/,00))(,1-+NPH@DOLG:516>71)C<-CF3,%&0@<49,B)'*%FE68C86D-,'&#"CCG:9B>;5;'$J565/,28EIB<;9;;412/)%&-)Q/.PILJNUSUY-SKV1QMR)-/1./63]Z-*MJIJGDHNS)HFB?BB7)(4+-,-SRM+PORJCDH@I.0YPHSN+.)'*/62IIZZ34387221Q@CCADO-RIJFHG??>:?GGD>822133+0>BGH')(&?D%I'IDBFI)&$'$D"?B@;;:8878?#$?>H&%)(IEEH@EI+,+,J79AA<>AAAP)**CC?>EK?=D:0&%%# 9?7:60(-0 %9=.-($032-$&6! @.=?@4-+0@;?3'4A96BK:*95C:)4%.;A=BDD>:<<7;2.-$"-0"% (/$)+;7+(%06 @B630,?1;>5-$$1;3+6.$.)(/5CC8/40./--@?7&&./+&.DC=EDIVJFE66@KUL88/051,)-($&#%3>:5566610*9.(FDDG<<;8603*">;85/6@>CH$DJ)DB@;>""$&*#>>C#CDG%)+(D@DHHH;AHGKL$BBK)74.B#:510-'//73/373./..('#! ("#!*..)%!%*#'$%#"#")*'%,0#'1640++')(%'!##)!$"" ' "# !*##'$ $"!#$##'%% )# H'-,-.-,+'*.-+()+**(%(/0-,,-/0--++**,-,1('+/0-*,/0/-,--//Հ}~ǀ}}~ۀӀ~~ 􄇈мȿýƸʾ±򀇊邁ᴲ큋¿ǿŶʷŻÿȾſ麝׀ļɷɼɺĀÿƿ¿ѼϿͽ̶õ݄؀κȘ¸òʼn𓌀񄜤´Ÿѽľكݮ̹ýĿϼ̈́̀ÿǿƽѲż̀ķúúĹڼýÿ􈈍ź½Ƭ¾χܲ쀐˪݃샃쇥񇆀㋂僅􀅅။оͶٱЇͷ񰦒ꅊŽЄŲĶ¬ŬєŹϥ辉·ŪίȬŻdzԸΙ߇εƽŹƿ;±别ߣ왝̆f邋"]\[_cea_\[ZZ\\_abbc]YXYWYVTVZ\_34576ibWNLOPQSTSVWVUTX[[_\X]b`_[TQQTUW[_cca``]ZWVQTZ\cfcddbcdhlmofaa_^[\_[WXZSOKJQVURTUXXWUTSPMMOOPPQRUTTX^UNQTTYYTVZ^^[XTQSX\__^]^^j][\aa\Z\`m=i554decbcdgff3323fdeb]XTNKMSQGHMNTUOSVY[Y[]`cccbbb_ZWNIKNKEJLLRPNSUZ]]^]^_^^_a`abbcdaYTQSVZ^e`[Z\^]`e53258667743feddcaabd_ba\Z[^```a__aff455699:997h`\\^^_de4kf]WXZaiaaddaa233563467;92dc``^\\[XXXVYZ]dedefg685eb[Z]\\bki:=;6642ff545779;;::;;8754214id_Y\\YVUURTUSPQMMQQUYYVQSWTUUWYZZ\[[\Z_f5985642251c__ab_]\_^[_a22[WTTUXXWXWXZ^^][]^bhljb_\^13\45463ZZ]34=.,>X:6\U?>XGL`]UTPT]354320\Y\``_\\aZWWWURUZa3b_]YXVVWYNLQVVYVVVPNQTPNNRVNPRRRQRPUWW\c`\aZTSVVUT[`dk9:mdieY`f`_^ZZbdW][`XSVVRQRSVTsOIGGILLLNPPNJFFBBJMFDK]142.WROTWTZZUQOMOS[2\WTLGJOMNJHCDIKKHIJINRW]14d]_`a2`[YTOUXZ_b2`bc[YYZZYTQQSWWVSRNLMJJKLQTRPOJGKMJGJKMNLKHEEFDDFHHGHCdBZ\]XROQOMHMURRZ__YTTVZTSY\[[_\^Z`dgb]ZZ[]YXd`VTSNJLJFBKTZRQPRIBHA;CTYWXZXWTNR[VSWWQQT]caUUXXUQNORUTUWXRUYZ[[ZXW^WE8;GJKJISRQTTVPOOLDCCLKIKHJJJIC>=;?LOTLGMQUO>@AsqDOKGDCBA@JFCPYXSIGGJIHEHJHHINPNQUX\^`^ZYX[`[YVTMK>6=GIMXX\dikZSMBAAS\C^Q[??AEHGDEHGJLOQPUZYQSSRRQOPOSXWUWXZ[]^]ZYZ\XVY_c\X[XTVUTVX[YXZZ_b`chhjlj58g`bdgdehheca]^`[WYZZYY[^_[VUUV[][[]`^\]]g_^YYZ`klcacifb`cikgnrklngg669::7f[Z`254f0.F@ENblc6=ZKgn99:=@@BEEEA=998;:;?B@KNPMJA99B>AHIHJNMPTJ>BIT_bhg]`aYV[`aa`__`b`ackieb_^YRNNX^^][[[XWZ^^ZTRVZ`kh[VWYYRVYZceefec^`bhhjptlit{uwy|yrtsnljlkjkhedagihknljlihtkckjloostrngcbeeedbbccba_```accgffdgikedegikmoppnnmplc`jvyy~{gdc_`]Z]beecgmppsnihhfhoswuwrnrsqrwyvy~|zwvvuw}~LNOTX[TLqoJKIFGFHFDFHFBACGJIPQQ~|vtkfcbdeehfdfhgglotu|yoi_YXNIFLeaYZcghgltqttzvttuyv{pohdp~~|~yzpgd_X]VM[in~p]XU[`cikquz{wwy}rjorod]VTTNIFCOXZZ_e_]\[]WWca\\acfhjjheke]bchbUSWRSYXWSXZVRXZ\YOQ`]anxrlaqu\YFM]\ZXY[\cULLL\dge`USTSRUVSW^_VSURNNPS[^cijfd]\[_hlj\KVhg\NNWZYYRSck_X\imiiaQLPRQNPSQQMHFHKMNWVQVXV\\SJEIPUUWUROX`ffhnqomvrnszvqtvrpnqke_]^a_a__``SMTR\abb[XWW\QJQMNHDKOTURQTRRXWLKQZTTZY]^[VTWX[\]0\PYb111368<IfAHHGGqlk`Y]`_PGRI?HWRLLWqP}`CMjURJM^7ecf[SReohlzm]UNNQQTPKFUV^geVWRZ\VRRYVagg[\[wxJB`mmpdZUYPKPOllP_]LOPKUkfELSMEEbypru[_nhqfTVYyhEMQjgacgVRNN_{o`ol[[iiZi[VESg`honmngght_pxmn\M\|}CCD}s`PUvzzGFGqd\ik\]MCzblvvuNRH|p}r@B=yFCGMIEFEKNDEGzpw}yo}wkgB?@xql`PTX\TT_h_UV\VQPJCBBIVMQJCDOT[ZTOLGNDCEQEJILOH>ED>GUYPUcflf\WVQMHKCEGVTPJAQCCC?ABHEJRE=9<<>?GFFFEDOUROFB@EAAMMIE:9BA:CD@EFJKPLND:O4DMMD;=2987589;S9X>=N326784.774977416<:;7/;`=?=98773368:;;767635425445_Z6873d]d3^[_34d\^`\\XSW^`ZV[ada_a`cg575c\]_\^```fdb_\_bf4b]\g864igb]\,+++.0-,*O+**++,.+)++)**(*+*+1.)%#$''()))*+*(+,))*((+***)'%%((*,..-,-,+++('((+.--.#02361.--,*)-*()+('%$(*)''')*)'''%$%&''&(*($#%%()&&(*+*)'&'(+-,+,-,++-0/--./51//,,.02/.1//..+'%$%((#"&&*+'()*+)*+-//0/000+(%#$'% #$%*)&()++***+,,+,-,,+*+,,(&&'*+,/-*)*+)+/.Q02/2/,)*,-./0../100,++,+*,-0/-)')-0,,--,*-,*+*)***)))+,,//...++,,+/42-..,*')*)(((&'('&'$$%#&))(&&(&&&'((&'&')(*/-*)()*)%&%#$%''&&&'''(((*--,)*+.131,+*)%%$$#"#'+''%%)(&(*,-++.+*))&$&*-.,,+,&%&)*,***&&)*)(()-')*+*+,++/.-41-,-,+*.2235154-140/.-*++&--1-**+((()**'#$$%((''))(%##""%'$#&,$#"%'%''%$#"#%++*)&%&)''&%#$()*''('*+,-/,-../+&)&"'*,11.-,%"##""! !$#"#&&$%%%'(,/.+)&%'(&%&&')'&%#$$#"#%%#%##&&)#$ "&&$%$$ !$&'''$''%&$'(%(*'&(*'%'(*./-.//./.*,+('A=?@D%('%((*+-,)*,*).2)$''(-10,)**,+)''&'&()+'$%$$%$!$&$')))(((-,*+-,*)/.--+,.//,{++,)&)))*(&&&$%$0!--.,)(*))&'*(&*--*)*+,&&*,++.,,*.12/-++*,,,2-)+)'&&%# &+0*)()$"&!$/20/1330,/2-*++('(,/,'*--+(&&()**++(*+*+0+"%''&%+))+++'(('##$)'(($'%&&" !'(*$#%(,( :;$(&# &#!(-*(#"#$$# !"!!"%'&(+,.00/-+*+/-,+*''#%&++-135-)%'.+(/%S)+)$ &'! %$&%&'*$&%%2!1!##%&&()&%($#')&%%&&'$&$&)*))'),+%$)))*-,---..,---('%',(%1(')+((()+-,-*(+*&%&('(&&&% '!%##$%&#!!#! "#&('$&)(+*,//*,-+++))*+-++---..00/./0.,.23/,-,+,++-./..//134698896722441122343001-,.///-/11/-../1321243122843/015;;54475204885;?:;;543,(*+("%*6:4"4*:;"!#'%%"   ## )*+)'"$ #'((*,+,0(!"'/67::24611367655568657=<87652/,,3765323112443..026;91/032-1239::<<8788==>BE?=EGDGHIGBCB?>>?>==::87:;:;==<>::B=7:9:=>AA@>;77:996467754344668989===<<<=?@=;;;>?ABAA??<@=75:AKPOLMKKB=<836.&0;?LRPN@64168:>=BHKJIIHJ?ABB@@D=6;33444984:@@97863126?@DGGC@;96;CEE:-5A=4,.5753.19<416>=B:.-).0.0.21-*SXLABHOL<=;;90/(O.9C2():'4:105/%)+ⅅ%&63A'0-##!$*)C<<103019%.343149EKD519<92/0*-,LQ/0377OMMOQIJJQMDY8NLJJ023GO00RMV+NKJKKLJGO*IEEJIG;+)374,P.+)PN-NGGH>H20UUQOQ+.,(+26P>^3685464,//FDJVFGTT(J&CDEEB???AA>B<430/'7#;?((&%=#&&$EC?M($&%%"DBAAA=;<>>7;"%%8C&'&+(J$*(FGHN**,M58I@?BEDCCFJ)FGC=8DF=771/,&'# =>:;1//,52D=.)$##,16/%3/ $ ?-A:;D;50+,--/.,K(/-087.1,14/.-2.588/21BE( 4<;:3.,/,(/.=K<'25)*.+.;:%)/*'(>MFJR?=HCHB589KU?&+-=9427,*&#+<80:;1/;;.<42(1?8:?<;<9::D8?FE=9=6-5FQMA"!#B<4,/DEFK&%%:518:2-*#B@JF4:A@?E+1)KJ$$FE&+&"$D%(*F%I&(UHAFIF;IJFH@76# >;94*+.2+*072,-/+('# "'!$" %',-*'%"'" %""$&%"!$,,')1384.)*%#!# *)%"&!!!( Z!! !$*)& !&$! ! !!#!$"$# $#&*Y*(.+/,*,/++-+*(%'++(&(-/-,--.0/+++*+,+,1/.*),-0-*(/0/-++׀ ƀ~~À~~ǀ̀ ~   ˻õƽǀǾȼžƽļù쁄􄌊섉􃕝IJøž½ɸɶü˺˹ÀĶԿӽ׀˿ľ¼ɲʽ͹ŀκʵ󂬶þʼƼ芥н⊮ɼѧ雹¾ú½ŹԀ¸þîĹýĻڐƘä½лŽɿջ΄̀ÿýɿ¾ƢǺȿ̸ɾ¾¿Ǽɿ÷˵ĸļIJÿĵƻǶޒ떭̢쇅ꉥ憒薜򄍏ف뇆錇酋耄΀ɲ˴𽯫ьʄä믻ߦݞ牔ȷᎁïɻħئ풛¯ڳԵĵưЭ䅇˻̹ҹᆔ̿ĻĿȹʵǭӺ·ÿʜŷ󵉗ɇg򉍃^`]aad`_\ZYX[Y`dbafe`]`^XVUTY\W]df5767886f`UOPPONMOOQSU\_]_]YZ_ba]`e_USRWZ]^aca_^]_`b^X\`b_^^]_hqsqq:7697mia]\a_XQONRWUPPQTTTVYW~ROQLILQ[\YTNKMJEFFEGLQPTVPLGKSU\fdcec^\[[]YUQUXbf][``bb`23ehbc343ddca^]ZYYVRQPLKOQTSMJOTVTVXZ\^_`c`\WRRQQVSKLPRUQJJPVXY[\`dffh54333eec^_\\^]YX[[[]^\\_bb`i852223de4ebdcceb^``_a`bfgfj68765ea\\]b796hb]]ab`bf8;8678eda]YZZ]ad46566ede6::4faab^Z^^ZZ[YZ\addcaadgif_a_ZXVWYZW`eecc5::@B::844556:96577::4dc`cf^\^ZYYWUSSTVUPMLKMNQSXTNMPVXZ\YWSTYa56896f]Z47`^acdb^TY_]]/2651WTWWVVTSSVWXVXTWZ^bdb`_a531d3377g_a55bBCEDJ-MC\-/05,._YTQOU_24344XVZ]]^YVZ\\]`^\\WSX^^\UPPYZYQPXYYYVXTQUORJIMUOGOMLLSSOROPY]ZTPTOPTQST[_]ahjgQab[^b^YYUZ[EKJIKLC>DCCHKMJLHGIGIOMPPJKPOLLMPTVTQOU\TOB?BDCHFCBEGDLL@DKPZ`^YY][W`g]RLDJVZXZe`]YRPQSUSOKNOLHHIIIHIOOMMPOTRQPRSRUXZ[T\b`a]]eefgigaVMTVT[URW[VQPOLFD07OTRRXWULCDHSQQY_[UQQRQINWXYZUPORXZW[_]\\_]X\XW\UJDCHIJQSUQPOONOTCAU][\[WMBurn5ELJMPQQVVPQSKOQIBFCEG@@C@CJLJHECBEEDGLLLNRTOLORUWW]]^bdc\TPJKON9\6@JRWU[ba`]UE5>AID=INN<7757;;>@BDFJKNORUVOSVSPMNOSTUUW]ZXZ\[\]^aa^XUUZY[\YZ[XTWZWQMOT[aa_cihkm6788kigebchi5ibad_]^ZXXYXZZ\^b_YVWVTUWZ\^YW]_cegge_agmkpw==njjgigkqo:<=8Oiwv\A6Rqq79;>A?BDDA<8i]Zfcj>oDKGB?>:49ACDD?9DKMQTPH@NUW[aefcYIRWYXZ^\Z[Y[]crurncWRMHMX^deehjc^]_b`YZZ^dgi[TRVUSURY`eijgbfijhgjkllmnforomqqrojghikqrnmiiigimrrpoltukinnpvyyyutojifdcccbb`][[]_^^][^cb_]_`aflnjeb`cgmpngfhihjtztdpruphbvxvwljmnkghegjptxq\Ghronjqxwwuuv{||{xvwutu||xtOROIHPTSRWYVPCMQSRMLMKJB8@EC?<;AFNOMLNI||}~|z|snookmpmfpsstvv}yph_PRb^RMKR_adkfbcjiWflpy{y{zliw~{tsouyrltvnlgXUZ]eid\fnoofa^TQ\iyprwzksxtja`VVXVJGHGDG@?P_aWXWW\]`_gmica``]YbgaafilprokgTMZdd_ZWUVXVZiiYQRbe]Zf_\djpfa[Rac`UVabXOJS_hs{srg^WUORQ\]UQW[Waeaa``nxzqkigVS\\ZUT_]ZYdpqpgm{upiW[hb]PQVRKIGLGRVZ^SV^^YXPNTX]SOSWV[ec]jvxvmqqpoqorzzvtqtrnopic``^a_acc_ekm^bb_aa_^V\[NCXaTJJYgj[HAM[ecXQQZbZQPW\^\[YUX\^b3aa123568>|ECGSQGGEEpdy{n~gc{yrBLBt|}uo\TVY\YZ]YORWVWSIHBIJNOPOJAFLPVZ[VQMKGHMIMILIMLE?8CNOPHBCH]f]^XVMSHCEOVVUESJEE@AEBEI]N@9=>CGLTF@IFBIOOKC8B;7DLH@88;>4IK@BCMMOKJG=TJ@QRK>>;<56;7~6?^<7=AP55566446468762]08:974;:==;98758<: #!"%$!932:8<#:%*&"!"!#%%%"&**,.+&"*./259884)-03234324335:DFEA91-*(,26::9<<632377222458;1.-1100.37:?@=:;<=;:<>BBA?:ACA?ABB>;:::;?>==:;;9;=@@>=;@A99;:;<:86555410025787647;;76899=@A?<989DGB2KQRLCFFA<7DFDE?=>@><=<=<@EIPUO?1"9B?=?A@7@EFEDDFIF?;7./73($"'18;>979=:/:=AHKLJKIIKJC?HMKQRED@FIC20229<;7;>>B;84-+1=H@BGJ?FJG>95/11.%"! ,8<55337898?D?<;:<98@A;=C@?CC@@B4,5==74223468@<1-/;>97?99=CHCA93<;814<;4-R,07;DIDD?:540Wf54<<74ghg_Z`897BB@B>=IQMEFBB5263212:855;@??=DIGB@:27<:7/23.*(M+.PL(.16702652/*.336-+-//395/79878;78:;9=A>59757553-2-%!15,&'18:0%$+276/,+05.)+.//*(&#$'''%& 5299869@C??>:2../5522--3.)/++:@/)/24211.//-+ZVN?8DMK@:6773-;A019/'!*377>@:,5,EBD4'A((.(E#")/'6:2(-<>:"-0/2647/7CH@42<>84/+,+0/2118AE-OKIEECEGFN08MCE]]0=YIQ0WCKPPJLKOSKJQTSLID?KI50*6V-0.2+(QR-QLNLCK2YVVTTU--*+.22KK4:?;685.*-PDCC-(#%$"?B>@@=>?@CC=>$%"4?$&%((%(0(BBIDKV+E;?;:BGC=A@+'")383/,477<=<80,/++.,&E'.3:?3/0120,,).).1<6&)3:/(7>5;1-,*+)%*.69;?-!+1/,2/&!2)%,CEAK;JP58==:2)@9*#+2;5+-733)(5E8+9>3+553<3/)$566;;78:639:@ELI:6038?FB29A"H==/8C8?A''C960280%!%>CE?@=:3-,-1011.(),+,*###""#$&%!$&*--+(%%"! "##$!$&"!'&(#!!#07.-*)"(" %)('$!! "-&!$' $#!&'#! $!$$##%#"!&! ''#)n&)*..,/+*-/01,++-,("%*,,()+../2001,+)*(*+,-/.-+(*--0/*+//.,+πဂǀ~~ ̀  Ƽʿǿƀ®¼򄉎ÿƾÿ郈ÿՀꄏѯѵɼǽԿ΃֋򅉁̾Ǿ̻Ӷǀ쀎ŲºƻǻоĺɀüȺтοúƫ뒭½ĶʀѹɯЯν󒀋ž»¹Ŀżƺļ̾߀Ǻ܅ûҾƸ݀¿ؿÿ˴ȿþļʀ˹ɣô색ųƀƾijǷ÷´󌔚ֵ؀ʵ閫홫銊퍕Լ򕣩もڿ˾爒ʽصѨѾ҄Ȧ緡Ȇ䄓ƯѻҼżعŭȜǸǐξ낡̸˾͢ȸ臉ߗ߯󀆍н̽®ÀĵǼþƿ®ʴµ­½ȃ䗕̊ٽ。]^`a`aa\[]][ZYW^bba`bbdea]\WSTWUY]`f556766kf^YWRMMLKMONSX]eeb^Y]]YZcefge^XXY^bd\WWZ^_``mutmiech??B@=;74f^ZXWUXYY\\]\[\\[Z[^aca_`]TYdh4gfdcdc``adecbbca_`^\[[XSQSX^a__`a]]ace4e486h6;87jghic_abdfhfa^^ZZZ_cca_]ZY][ZZZ\]^acfiiihIc`_[`b[YVVVRPTY[^]a7;??<:8325789<85569;53caa^Y\^Z[\[ZXY[[_\XTPNMMNPRQORTQOSX\e65bbb_`d55`[cebge[\]\/1454_TQQQOMMJNUSTUUQTOPRZ\Z_9@h]_ZWZWWTVYZPC6KCC*FB-4.16WF\5cbWVZ`ba262./001]YWVX]^]_``][YUQNNTVVVPGHMOSOPROOKHHLLNIHSUTUYSNQRX\]WQV`YSUWXZ^^XVWXWPee]243_`\YN5]?]W\342a^^^]][XQLLPQPPPOMJJJNNOJGJSWTLILRRKHDCIKQV]0./ZWWY\ZNGFGGEEIFE7HIJLLKNNPPTYVWVWYWVTTTWWWVUWURTWZ\]\WPMKMPSRNNHHORQNMIKJDHJEFF?ABFKLNKIIIJKLIFHGEEGGEDEGIGIIFC>BLJFHMMPPOMFGBCGDEFGHGGJKJIISWQMRPQSUSQOMQNJJIEADIJKLPQNKMKLONV_bYVYXUWZ_eZPQTVWdC;VRHQ[YYWVRPQLEEGIJMOROJMPOORUTVVSVWWWTWZWV[dccd`]^YSQVSWb[TWWVRMKEAKHHJB>>DDB=laai?IKLLIQ[WPQTSTVTLEEHHG>:=DHFDB=?BLRWQLMOOPPOPQTWXZZWY\YTPNNOCtlf@PNNQSUU[RGGGLMDB<]D`=DJSSNMNQSX^beb]TOIB?>OF1b:49<@=<;?BEBCJKMLKMNRRQQOLNRUWROMRQNMLORTQQQTZXWWQOTT[]\VUWZSPNNNMJJJKJHKLKJNQSTVTUPGJOLLNOUJDC=78ABAGPQSHED>6CE=kfZJOOKRjiGE@>@B=<=BGKU^YSOKEGLPMLRULojpomr{yxurqg[krrpljt{solmmg_ZTQOTY`cnoofcckkrJJqputtujjpxtrqqoVPSSY^[VW_abgdd__hkpprlnzslbd_]XJGJPLE?>>;9;SXWTQSY[ZZ[bdc_\YZZ][SWfh_ckljhnf[_baWPTZ]`ljfXRLO[\\`a^_ca`iib[bhceh^\XT_gagytgab^YWSQTTQSSTab][UZeiccjaZSSVUZaVZ_`dgfhrqoqjklljmltmULFINOLLKQZZ`][^f`^]Y[\a^^UW`_dinqmlmiffhljgknoojmqtxtnjkqkhc]]]f\VSXea]fb]Z]`^U\\VbpiXLQ^adZNPV`k_SQU\YMR^[Z[[ZVVXWX^1012469=CLS[XMHahkebfpopkg_WSS[`QQ^]VTLRPRbeURVTZd\SNVTNNedns}pbXVWQwZ|Rbl_RDDN_hrupoR^P}jiWBCRsFFNE}GTZHrkc`frehBKHOQ^djTat~oaXqn\]TSPPSW]gjOwoiqx{}}}PO~}wzXOFQ\WMJNpkLSVYYXW^^\bjSJKod}OIyzvttjnx~{wm00];?sEGRMDEFB|y}DHHEDx~ywvos~@uwBCnwsINKRSJF}~Jltlnumhp~p|upuIka]WW\[\f}|ncfXVdzwm]aXRZeGBcVXKV?IFIBdqxkheTjsvolvzh^Vc\jyEfKPI>KH_=NDxynigvwtgfdbtiVYXPMTSWgzvyg_QY[[YQQXb`SH}ObcacebVVYWOMJFBEUhpn\RSUSUSFLOIJV^cS^gMNPdlc[_WVUQEIYbmv}fKSTSPOW\IJK>yMdl|gkzGOYYKvXPKR\Xhlqiszk\Sed^\kzjQRU``ZWKHXbed`]fjaaZYZwJOyR\ipxqi`chmkowVnqbem|slle^edWlClEotuxusqw|LHthlxsvxwwCEEEMSNJIKOKuz{vuoer]bz}GJSI|utrhe]UX[Z]ZMNUVVQLKBMKMPKMKFFJNQTTb]UTQUPUKKRQOSF?>=FHKHD>;CZXZZYQXLMARQSQJPLD@JLK@6CUQN;?DCBMSIAFFK=DFA;9984;@>?JLMOJHD>eI5OOLA??:7;<44B[QA;<<9897547?=;?;:786446438754c\373ababfbWZ^a56[[`c]XJOX_a_XZZdng[6589;7c\XXY\]^`bde_Z]^eii\UV^e3d`$)*++,/.*)**))('+--,+--./.+*)&&)(*+-/10.,,)%$%%$%%(*+//,)&)+)(+.-.0-)(+/12.**,-,,-39964202"!121+*,-/.+*++)('')++**)'%%!!'*(,+($'*,//.0231/-'" !%&')(('&%&),+*+*)(*,+%&*.,)*-/-,*++,,*)(&&%%%&(%#&(()++*+,+*+,+)'&%%&%&''$$(*+-0.+)(''*++,+,,,*+W,-/.,,)"(-.10.-.-,--/0/-.0/-,*)*++(&'),.,++**+--..01./1.+++--/.+*+(&&*--,,,*),*,,-...0120.++)./++)(('%(++-,+,+--*++)+++*)+,+,,*'%$##%%%$#%&$$$##%(*0+,,+)+,)--*./(('%(%%&&%%&"#'K''()&'$%&**(+/*+&%'&(&&%$ "-/(')+-,+('(),,-..-+)'$(**+)#$%&(%%&%&%$$&%'%%++*+.+)+*/10+',3.+,-..11,*)**#12../,,'. *'*-++***))&&'*+*(()'%&&('&%%',-+'$#$%##!!#$'&'&%&),-(&>&&'&%(&%'&&(('(()))+*+**+**((')+++***()*((('# !  #""#%%' $%&"#$!!$''(&'%"$%$f#$$#$!"*'#%(')''%#'##%###$$$%&''&&,/*)+**,.,*))+)()'$"%&&%&**('))()(+01+*++*+-03-()**+3$ ,*%*/--,-++,(%&))+*'+.-*+,+,,*++,,*++*+.1--.-+-+(),*,2,)-++)&&#!&%!(%@!(&)./,(%'('#!"$$)'#%&&((*,++0-+**+,-)$%(*))'""'&(-,&"')&)(&$-94+,.-(GDH)-)(%''%*+../2.(&(().-,+('))+.***+-*)'%%# #&)(**%(-*,-'#!''! "#" 9536 %''%#'-+())(*,*&##$##!!! "! "$(&#%&&'&''(*,,-,*+w.-)'&'' 830)&&()**,( ""&(! / 1#%))%&&((*-//-*'%" 7 # !#%#"'&'%&))**)))'(*,-*)'+*((()*+)*)+.-,,($&'+.-++,-)'%$%'%#%'%%()++,*,)$&)')*),%"!$$"%**)!!!//,2 "$%'())*,-*()+++*+*+-..-,-..,/1./.,,+/0.../.17.+("%-2642579843563 +1234300032150.//./011//...,-1310257667554238!+-(#7::6,+#'.+$/466/./9 ""!"42,$(+)+;7'%"!#$!;#"$#<<$**//.*+.--00359644410210241049CGD=60**-..4:99;;65556769736=:520101225:==;9>==<:;:>@>>><:8;<=<;:9?D?>?>?;<>6:<:=<@A@EFFIHF@@DCDGIDBEIPJEGIIJLLFDDHHEIONOTVTRTV-VV++-.//.UQ,00--//00/11010-+--*- %*2:5/.,((,/,+V14,OPS>7???BHFECA@<4=BBB???91-($$(-27@CB<7:B@DOTY//VOLOJIMO@BEEEG=>CIFDCCA.-0156535<>=?;955<>EDEBCKHC9<:8.#"$&#/3320488767;:;986779505AC<>?@B@C=56882.268:DC>30*-569>=:>A?>FD=7=@<>>7754?@:>IKF@=>:742XZ4553`]_]feZ\547@@>;7;@?<>D?9653148/489;<9GA3-)+--,,+M0459669<766465743.2649=BD?<98;9:=><=:=ADFD@?@D@>:657>8414:548755664.0/,6?9/(-2271+,-3<4-,/1-%*0--,)'###"#%!&*)%$6::769A?@=94/-.58-.9810,S21099.,0.293-)/0,-XSH95+ %18@B>:+3*C;:+&;%&*$AC&.2&93/,.712 $#()47<,5BH>70@>25/-,P034WV9?B-A@>AIDFIOT_[HJ]TL]ZZHM//HDKNTTQNOMIPRSOJHDOTAF3.(/75-+PIO,QKKA>O\SSPRSVX+/0333RX5977E'''%#B>D@EE=<:=C#<=""@6(+',0BB'%A@(G5<;;>=::AG94?B4/*O6/7D$I:3;/&%#7-11++,),5??B73+-*'" %/4/(D,9767:80121+*)'$$-78;0*-/--,$'+('.16+29')+7<4/3.-,,%'36;=@6'/0+,+/3'(*#F-<>H@;G.J,74+GD3-',1-68;6C<646:<;896245.5$5%;==>;;#%CA%$(+))F)+,*<@FDC@;TXZK>45NBA$$+'?<<<871--0/21(',,,(%% %" ""##"!#&&(&0/*)'*&(!"('%' "#$#" ,+,,*&*#%(&&%!%#$$#(%& #'"! %"(" ""##%"O!. &%$$$ '.)+<.,'*-/))-.*( #(,++)+).62-0,*))+,,--.0.+++/34,()-0/,̀ʀĀɀŀÀ~ 퀧~~ǀ ٿβ􀁁΀ɽɼ쀉ӀȪޚȷƿɾҿĿȼڷǀ°Ÿºƿù߀ڱƼƸȽƶʪӯ·Ի܇ȾµƼ¥¹׀ǻɼü؍Իȯٳߍ¿û̀ʾˮ򅒙ſȼ΀げ˵񂓏Ů쉌Ӊøƾƶր˾蹤ɹȶöԀ̴Ƚɱüöջϼǀ©ɶǰóȾ¼ȷӰ؀ǰ馯ݼŴԼվȳ󆆁ҿ臐񆀕ʿ޽ʼȺׯ伤ʎڡڈdzɻ܀ǮìɫԵ˨ܿɢʐ퉏̿íÿǾɺضλȨׄ郀üŴŷ˾ʸ˲ԻøǴĹ㓠㏓3c_]`ba^YZ]a_\UY^^a__bdge`_`\XWVSW\]b3557:74ccg^RNNLJKLOS\hkkgWZ^]Z]\^fnk_\WQTWUUWZ[ZZY^bfhhhknt>?7895edefehjc\WW_1bbbfb]_d_YWSX[]a`b4666f_^_[YYY]ZWUSQTWW[ZV`gjklhe3667766fca\Z]acaa]\[__ZWUZ]^`_acZWYXUTVVVXWY`a][WSRY[a45bYW]^^047g`__^_`_^`_1587d\WQQQNMPWZSKNQOORLHKW]Y[\iaYTHBLQRU\_YQLIMTTJ82.>.ZY\Y\^[`bb`___b241.10]\[ZWX\[\[\^]YWXWZ\WUSROHEDBDDI KPZRQMSUQMQU[SLRT\__[\XWSOY][XVSRSTSW\a_[\]0\^][UR]X[``_WKHGMLMNPRORRRVZZ^[OMONNOMJJKLOROJFFFHEADEHLQV[Z_.XUZ\XKFDDEDED<DEIIIFJJGGHEDEHGHIJLPTO>=LB@HJHB@GACHKKJHKMPVRLMOSYXSMMPPNLMLOPNNUVRURJMUUUQSZ^^WXYVRSXZXTSQPSUWah\KDORQPNDFPQIBFIKMKFIK>lr<@>PQLMPPOTWZ[[`cZKKOW^`[TWUOMID;DLMKLLJQWOQOLJN\__YOJHHspESDKUWYX^Z[bZYVPJKIKRURQMNPTWVTRZ\`YRWURTPJLRRRNB@PRKNNIFFIIDEIILVVHDiBIOOKKGHPQOPRTUWUQOHBCH=6==9:ABEJC@>CUZYNLQOOPRSSUY[[_]WUUUXUUTRCHA:JQQNMMOPNLLKGLGB@IOU:BDAGJMUTOQRSRPNRUTQVURVSOHOOLJMMRVSONNY\ZYOIUbb]WX]^d`QLLHLHJLMLHKJEFHMORUWYJHFECHIGKKE>7_hDJMPQSSRTTSRQSRQUWXUVUVWXZa]ZVWWTVYWVTSX_mk`aUOTV[_bbcgiljg6iehhe]\adb][^bcccba^]`^^a]VY\XVZ[]]^^`^biikeZ^_8DJ@<999;9k7mj7:k;<=83AJIDIHE@;8WLfHdj>??=?>len=?CA;jZ?IILSOOUSQRRT\___`b_]WVWWXWWXYaih`\[UORVTRUTU`mpjje`agmmlcgkhic`WQYWZad_\`cijijd][[afjihfekoklmlnnonmloqonkfghhihcbqqjiiicalgnsrtmd_^_`\YWVWY\adeb[XWU`ijjgghjnponnmrttv{x{{vsvssrvxsyp}~}}}MOQQMJLMKIJKKIzvwHKPRXVUXYTUWTOKE@=;<=;?BKRUWZXRPLIKKKJIMIZFsy~w}~qnqqpefigkz|rswyrn_XVPKG47Wmouqdcdimihp~}|qmdamrt}xuxwa_fadc\XKES]_[Y]djqme`_[Y_fv|qpq`^hmjebaI=<>?@=<9567?PXUQRXZSXa`ZWVXXUPQWVTZe_\adii[X_gd]aahga]`kj[PPHLONSUWR`eddd\WTZXhob^_VY_\gsvqme_XUVUROQ[[VP|SXZZa_[TQZ`_YX^bYWXTW[a`RN`b\Y]gg`elntx}vhooYPPWWZde[V]chk_X\c`^`a_[_XUZdljovwldW]bdimlkmmjkkpuvuqkknle\YVTWXOCMUUW[]]`b`\[hlrut^TQUYWleRKMWg`TQQRV]ba[Z[]ZTWWX\`bc469<>DQTYXRPRelichkiosh^]YPUa[IUg`Q~wQ[_`WSVXTWYNKOVONL}c^h|{m\PXPmMKcmkcWLU\kqsgcoY^Oyb_RQT]zEFC@BBGTSIwjkg`_[k@I]_YacjVfup`_seZ]VVNKP[RWadNuifjst~{~|tPQQ~zvrw{JSW\TLLwhjUZa\TOWSV]_LPNinNONNLzmnu}ru710/:zz>GOPLFDDB~zHFH{z~sedvEEDDEB~yww}yGOQQEHRF}zwgahjHlht||~EKJLrvKzbb`Z]`cbvwigWaZ`vqfejvnrlX]FZ_jcjJNCwmgNQXX`tgpovcZXXgolQUZlM=FJLWA{txpo|uuywf\_ey~h\VNR[dhaT\rkRWYZffdXTO\REM_k\SW[VQ^aWPNLE{L^bfcSQWLMZVOOHGIRasYVfUOHP`[]XO__GFo|vuvt`WjoOILPdSFhwERXf{P~KLxLNBEMR`c[f|}v__lkb]X\]jfzh\UYa\^\SV]edba_haan^KQlLpbfyjfggbb[jeOnoffngjln|f`rhb>nxxsssqpm}MItmuvkqvq~GLEB?GMNOCKT]Ouklt{|PLtieuzAEGQ_Fvlmfa_^[VW_]SQTUTNLG@DWGILJGGDKZWQK`aXNQ[]YIMQ^aUFDECCEHEJE?;?>EFISSMJHSPPOFOMA:HSPFa8EFNF;68999>FKKLGDA=9PW>@E?>A:27>;?>^3??=Z769:5.]`2a^4577a28<:;==<=7754Y35A?;=:87:964633664452_663a^bfd[XZ`e83JPa^`\QMV]c_]VZhoaai57::6d[WVWZ\^`ad45b[befe_[VX^bcd-))-0/,((*--+')--/--../.+++)(((&(+,.002.'%&%#$%&(+0112))+,+,+*-02./,&'((*-..,.-/0234546962o+,,./023,((*-0/+,/,),-,'%# $&$'(()'&',-*-00//-+&#%$#$$##$##%(.0.+(''')(&)+)+--+*++,++,***+,+*(('()('%&))+++,,*+++,+++)(''&()''&''*..+,,//+''),//---1,+,..--,..*,.1/01/./00.-..0/,++*++)+,,.0-,**+,--./../.-,-@..-..01,)&&+,,-0/,,0.)(&(*+-,./,,,)()*,,)(('')*+*).02230-.+,(%',.,,,+*,,)(&(*,++,-)()(''()()()..,+)&%)+/,(&)++/+,+)+++*)%(**%%&&%%),(#&''%'$"#*,)*,4.))""&''))%! !#%&'$$&))-,+**++,+**)((*)*++-+)&('(('G#"! "#$*('%)))')++,,/*(+,121./--)(.1/-,+*++),-00--,*+++*&,*),,,'""!&% +$(*+.0//-('%%''')*)%!! "" ##%%'''&'$#(,,'%$%&%&%! %&&&'+,*+++.,++,+*)))**))(**+++*(),+&##! !"# !$&)*),-)()'"$"!!#%&&$#%%&%#&&$$&%## &%%$%'),+"'! %%#""!%!#'"#%''&%')*.*''),11/*)++)((')*((,,*-*%',,+)*.00+++)(),--,+)')+,04/'$(()))"$,,%"%')(&$%)"7,*%('%$# !!## $&(*)'&'( &&$%''&+)*--/0,#&'+/2.+.,)(&#$()'&&&*,()'('(/131*'(*D?&,#(,---0-,1--*&$&$&)*(('(()+*))../*',*(+($'*)*)""++&]'*'$%&$""##$+*$!2#''%%"#&()(***++)(# !$ #$(($"'&%')*)+./.0/,**),++**!! %))&%$&'%#&$!!#&+$$%%&''**+,/0-**+')!*#*!0!"#!!%%"%'(++()*,+*)*,,)+,*-+)$)*)')()++'''-.-+& $*--+,0/1/($%"%#%&'&$%%"#$'()*+/%&$##'(%&&'#/6!!$*(()#!!" %!.+++42 $&(+A,--,*++,++,-,.--../31.,-.,-./.,)+/8912+(,.135469998563432/.243113}200100232220,/0/.0233234258673-10$)"47550/01))& ".0-'"&166/.4" %'%!" (':&88!! !!:5=!"%$ 8-"('(-**,+R,023589772122212339;;652-*-/002018?A==956;??=9<><<861.3249<868:=>;<96548;=<:9:<>;;<=!>><=;8999;<98BA<<;:77<;>@@B=61000/2358::83132:@BA?>=>@A?=>>?@ADGEEPSJEBEBBDHS^faVQTNFBDLMLOIHKLRT@EA99:??;9=GGFFA>:7?CHMIJNI:7:47884)&078526=BEA;972/17FIDCD55=C@;86# -63/16504;9433664125627A=:<>><527>9589?=;9;BA5.0+...2355>==DA83362?A:;>5564>DGHC?<7661//3<;:4[QU`qr668<@><6463675367523/.39==AFI?;805759>?==>;;<@A;431+074)0=8.QFC/776/-/2/13+(+0,,,PPH85>JF<3+1+74:15*A73(()/@$$"!!!%-,&:33.))(1$22/87<.7AK@56A925//*,T3:3W5=>/E<;=BAGIFITOTRLKJODVWT[/TKT/0PKIHFBQRTQNLCETMMW,3573NS,LD+SKG?@QTLQQRT\VQ25961PS.30388+-+E9%-%@=>7498G(96>DEE'+(*S>AGJ*A22305774>@75.4-2@>458A:;70,.04-1%)!A:33&(--1C687F>'I8;D.%!>8;68?;=>>3//2@C82/)+0473+0>7*01-210(%%2-$+6<3/251-671,*)%A)3335*).)'/-'*&'&,1=-,8-**+5242+45&"01883112296A82/18554.0496433962;7),=F)UG86@M846:985<9);<78=969;AE60:50!;GHPQ0,B=:@E#%#&4%<7:82031.-12,*)++'&$' !",+&!/0+%(.0+"$$,/(   # #! !#)'%"%&#$'!&%#)$ -!!%"($! &#! !!(!"""#" #(!(#)++*(Y*+*,0-*++..#-*+)%"&*.,,))07-+/0,)'))*+,,-.*/110.+)),.-ʀ̀܀ŀՀ~߀ ꀉ׀~~~Ԁ 󀅇ƾ􁄃؀ʼþ򃅏ȿ󃐍зºʿʺÀʾýķ䷫ͳ˺Ű´­Ķӊÿƺ½󏫲ȸͼĮ큗ƷİĨĺрƺĽ¶žȴĸ€ű瀃􀎖ļýĿĀþͼͪќ鋌ڀ ľȿ¾ž˿öǺǿĺ½®յǿŽļÿîôƮ߇³厰к〙򃑦îϬŰ̾䂕Ƕ򃒌逋򂇁ȻɴǸϳۏӥەɬ«Ÿǫѿɴ狇ЪՑĬëȳõЪǷȼۊǴлȿμ¿űʻź􀑠⎒S䀄׀afdcbbaa\ZZ^aca\ZYZ]^cg544hfc`\YTSWZ\`234687557j_XSQPMIHLV_cfh`]bdddacebacg`UQPRVWWW\`^^XVYp=rigdgcaacdgk875675bgll_VW\bb^]__\\]n[VONJABGINORXVTVWWSV[\]\ZVQPRMJIEDFIKMPTX^_^]abdfcad3443`^`bb[[\\Y^XWWUUXXWZ\]]]^^^_^_`__\WX[]]^^^]Z[\YXZ\]\[[\H^^]^^^a`^\]_ab`\]`a^]]Z`ddb^[[\``aae^]^__]\[^_\_eecacabbdgkfecbb`]\[^a_]^`ca]Z]_^\\`^^`_`a^^__d64:@?;5hgfdgf58ke^`d3eceeba^[RRSTY\`ffefgb^ZZ`eb[UTTTUVSOOQUXXSVYZZ]bbbdbc`b_^^[[bcbcdfb_b^VUSV[^e5heaWWY[ZZ^]MNZY]]_11a_ag97d_\[^c5gdfddf^[`da`a3884aZWTPPQRWYYUROPTPPSQRW[__^hkbWK75SXU\a`WLLY\1,/020?41VSSTTV\]^[Y^`a`2531[WUTUWV[1][VSYYXXY`^XWRMKQ[YOIHKKWbVSSUUVXTSLKMQTQYVUW[[YOSRS]^XSTTVUTUWY][\\\_02_]YRMPUXQNGGFGHFIJLLNNIKQ\d`RLKOQUVQPQMKQSUPIGILIHHJKMONRVWZVTXDDRLFDEHJKHIKMLIKOPONMQVTVXY[VTSSVUROORSUUSVWWY[VUSICJOOQKAEIOTYZUOMQSKQ\]OMJMIJKLJIGGHHFGGKQPLJMMIHIIJMPPSSPJHGCDHGAM5MNMLHGJGKOOLKJLKJNPNMLLLKLNNHHJNPVUUSSQORUUUSGELSXUSWYWTTVXYWX[][SOQPVYW[baXTUPLMNKMWUJIKKLKLMMRNG>m?KNCBLMKLKRY[WYZTRONPYUTMJPOKOW[SGHMKBBFHC9j7?HPTROV^ZRPRVNNWWSRMQTRRWUV_agg]Z_`ZRLW\\RIMPLDDG==FMLKPVLJCEFLQJPUVOJDCGLJS]X[XWX[baTT^SSSLKIFPPMPNNNQRPQRUXZXTZaTTTPPQKMJD86ELCIORQMLLEEOUYXQMB?FMRMKLNQPQSWUMGLQK:6>E>?@>;>?k:A;=ADLMMMQPKJORVXSQTTSPPPLJPTSNSPQMHKPRRWWQJBDEE?i]fod976@DCEDEGNTVWYYX[bf]PLKKhf8?@;EBEHJPMLKNSTRPSQRYQVSUPRRSLELLIINLKMIIMSVSPUUW`ec]VVZ[YXVRPMMPSOMNQOMJJIOMNPSUMLHC@BJMECA?:jb7?HMPNRPQSQPPNKOKLLFACD:=856778@EKLLPQQRTQPQRTRSVXVUSVZWO;QUVYXWXX[ZXY]bjh`b[UVWWX[^]_diji6hfgdd_\_`\\YV\`accc_ab^bilgca^]`a]Z[[X[bc`_flhgead[^g89m59:=:8786ilc8<67i65169:526I;ef\_[Zaii^]j7BC@?W40EQ?@ED=6aNLkVT_h@ABEDs`9CBBADE@8EGDMPQTVVV\\Za]Y[ZZa\ZWVVUWY[^fhgdc^ZTSXWTOMP]fdefa[^edcacb`d`bZS\_]^\XVY\\_``b\ZXXZ`jkeegloqnpssrqnosrrqnjiiihieagmjmmhgjqppqtunc\WWXXVXZ\\^`aeieda[\_cggdfjmnoqtw|~~d{|RR}{{yz}|}yO~~~JMJ~yz}{}JLNQSXWLKJHIGFIF;9>==DJLMLKIyptzrrvpijoqwwsljrwtdSRIGLL=1kYjdgb[WXYZ^cjqlipspg[\_ehimpnkd\QYURJBHW^]^mqljhaSR]decoqb]UU_iksj\UF99:?<:::<=AEOTUROQRRQS\ZQQSUTQPSVZ[WPPPOWXZY^heWY\dgb[\fkf_\\MxYIRLOT[b\\ec_cfeerxjolb[UTY]\agi`UPTSWVVUQPU[b`ZZ\knSKVae\YWW[Z[__]_ebed`hnk|m[Y^cemncZYa^[behonpnlkgb``egggcb``ajlediotspmmuusx|~uoidbdbTCGMSceYWX_d^cecdfdbbdkhk\OMKJUW\gb_[\b`VSQQ\llfcb__b`^^]^_`g:BFILHHKOOOSOQadfgjdblpa^a_VPTWJPcXKNJM[bYMRZWLJJINONJrc^rwno_XLvoB\jflpj^girlhjmGbWl][]]^jvzFF>d>NYNFsh_`\[^8BTkYTW]f`enyadfbY]a[O\_PUUsj[joxyvys{tiW~yz}uw}HVQLKXW}ukuLXTRSMGNTWRRLSXpvJV[NLMK}{sp|~?=;8BAEGQRPHHGDCAyuCHHGF~|{rnjo@NOEEJKzxGMPKHEF|qiebsyKM~pvwGJJJum`c`_bhielkg`X^cok`arIxdUgoel]_FN|{vell[[bXWhxvxpTKGAY`[DHJ@kivxw~~~rvGHH|mmociuyo|@@@CFFDHGEFKMRnvvzozQg\^[jyKLMXK}njeWX`^]Y]^[XVUPNLE:>ZPQQKDDFGPYTR]YSHLT]WYUMPTVJKMGC=G?CIE?>A@<@IPLBUSNKNIRN=;@QLD>=>=BB9A<763W9C>9D89??DZ65896\\`2aZb568459<>9:><<:63335@B@=976558993`4622663265c`c4f_^VTZ35ZQ\``aZULN\a`\XXc"i^ch66767h`VUVX[[]^`47f^]``bca^YWX+...-"+**,-/.,**+,,-//.-+*)(()+,-2+('&&&$"#(,-/2.,.1030./.,-0/+)'')**+/311-++8!=863540./023-143+%&)-.,-00-+,,)%%$ #$%%%()((*+))+,...,(&'%"" !"##$&((,...11t12.+,+*+,-,.-*(+)((&'(((**+,--,+-.--,-+)+,+*++,,))*))**++,+++,---,-++-,*)+,--,*+-.,+,*-..-,*+,---.1,**,-+++-,+,/.J-/../11100/.-../0/...--/1/-+-.-,-/,,--..-.//100/.0/1-*+,--/0/.,*%)*+./000,*(),/-)''()))'$$&())'()*++--,,+,,-+**)(,,,-/1/,.-'&%&**-//,''()**-,! (),+,.,/3-*)*,-.,0.-.*(*,,+*('))%&%%)+,)'$')'%'&&)+,,-22.*$!&&,/-& $%&%$%%'**+((*+,-(&''()(*+,*&'())+.,((&#"'-+&#"$$*1+)())*,))%$')++0.--//.'))+21,*+,-,-,--.,+)()&#$(*&%!"##%$$%&%{(+/41(&%&(**'()''+,+)$#$&$$%&&'('(*('$"'&$$%&((('')*)'')))()+-+++,.-*+*+*)&')*++*-+(()('%!! "!$&)**),.)-55*)(*''()'%+$$#&)('&))&%%%&')*+*)&%$""%$!$$&('&(&(+*('&()(C&&()'()*+//.,+*)+,+,,&$(,.,+-.+***+,++,//+()'+,+,..+)*'&')'(-+&%&')'*(&"<"(+#!'(&&%)--)*,)'&%&-*+&$))'(+.)#$'&!!$#"7#&(('+0,%&),&',)(&%&)&(,*+.-12.-//.*$*,/)$')("$%#'&&*,"$!$$)+'*++*($"%*'+.-/,+,-11)*1*+*&'%$((%('''(''))+,.+)./&(('((%&%"$' $')(&%& "&+,+'' "')$$$&('()+)%#&)&! 0 #$$$''$#')+-)(*)('&(&$(+*&)'&&#%'''*,($!!" 5/172 #!"##$'*+++*)*/2.&#!!-0 !##%'&)(''(**++,+*,**.*,)*()*+&#(('%(('&%%(+,*'(&$(,.-*+..++*('%%(*'%&(('%$%(''(),&&%"!"(*$" 83!%')')'')'''&#%$%%!!$((()*+,.+)*+,*)+-,,+-/-'),,/.-//10.-038722-,-../14346886444232111010.022433123027842213531/00./4532696443501686936 64.20/3880/5!! /!'/&(9+-4:$""$#<3 %$$$%&#%&#)*n**)+.1/-332432754111012238:98852//231-,.6<:9;847;;:9:779793.57665324545557221127=<999<>?=?@@??>@B@@@>::99:<:7:=;9:???@@@;2-('*-.1466689;>;::767:>>>@A@??@ABEGHGHHGTVN6HNJLTb5[e3UNNMLGEEEFIHHPSPOEIKPRX-WNFNQQTRQRULGHKPQQNMIIQSNKQQQSROOPS+-+NLJHEFJHGLNQS,--/033,+*()(&&" "'*+,*)MIIJMNQWUQMSQNLJINROMLGADGB?A=:=@BGFB>=ACA6)&!"$73>9<<636668DFE?879;;=@CA?:4/620)"&2667DC>==;218:;;69AB>867,NPRMH_8^R-30338<88<;9<>=>IKCHE=86,5899>CE>66f]c_gp7564665kl67;@<78?LK?658:A@=;9757;;:;99779?=889=?@@>@FDBEJLGC@<<>?4--*(//59463241--+)19731/+))'%$)"! #'''*+,9898;98=?64650,.1),;2)R-+,581(,20)()(+,,*PMLJ?75CE=>4/(HA=$4>:>A=288=7467&71J;2././6=?$#.*1*$:2+)&&()9.+/4846?NI8:;83572PTQ1:;0_66ZC>2<>CICCMRMMFAGMF>Z6VSTTZ[VRJJMKGFZ_XOJGBCPNFK,51--NP21IVSJGAHRTMUTNSXP+30/0-NP)-2300+/2E;?G*15,JO+,+RQOLDDE@?GIKNLCA "$+-,'%$##!?<%(&'&GENKED=723)*&&('CBABGG&*,(%I$&A:763?DJ,,D<@@F'*)(NI=HTLG:04359;<8=:44-25;ND824?I)?4*8:39//'+@A;155-051/4<9DD?=+($G#.1/%/1-B8!357:=;@98><3/159=A9..47=:4)!-=<8411221*+1108700//+',76.),*&&2451+*01)%08.&+.1*1:1,30* (7+-,/00*,@A>AB40153?6,*6-@;'#,8D1BE-+.6);:)-,'-+9A#FA/)1.34047>:;1348785/049:/24470.5?0$5ADDRF=CB@D<:<8752*<;::>C4.;8>64=2)9"=>?AB@:?'JI()C;9;46>B9A!! "%%$&&%%)(-M=CBHF=F2M;3628@)(&+&C:87--212/12/-,,(('$% #*)',*(#&+.*,)"$&*""$! $"!#&%((#!$"'%(# "*% !%% !"""#!$%! +& #')+-)+*B-+,.,-)')($)+++('!!)--+))/3,+.0-''')+++,+1,+---..,)'&ŀ̀ƀ ڀ~~~ɀ ùրͼƿꄅȾۀ扏逑Ⱦ󁀁˻¼ƿž۩Ųý̾ـɻżĻûľ˼ۀźþǴ÷Ŀؾ̺ƴͼǷ÷ϼİʀįǢĵľ[̶ȹ©ښف۶踯ִ돓ǽʸ˵ҀϟľހȲþŰľäӺöĻ򋍈􁌖Ǽ€Ƽ뾊®񁊆ĹԻվùԴԲ׀؁󅕁ƹ򇏅􃏦Ƹοۄؼ߂лߒˣǀŽݾو뼱ð޸·Ʒɱ˼ѵʿüְЅրɼ݉Ľ¼̡öոʾƸӻ!逆WY[g7ha_][Y[]abcc^VW[_f44456jf_[WVWVVX^d32d23577hb]ZXSLHGNUY[ZZ^hdgoqldaa`\ZXYZWUSPLPOORQOO[hg^YZ\^bhfc`_fhh795aihie^Z\``^^][XYZyWQNRKIGHGGKPRUXVSRTY\XUVWVTSSTRQIGKMPSTVV\afkmkl999:943]OHIPTVT^ehg\VRONQWZ`abcddd`bceeddcbdca^`YXVRRTVX]^__accbcbcdeefe3543ghfa``_^[[]`gfdb_^`c`cddbbdca_^^][\[XZZZ[]_baaeeccca^]^]`]ZYXY]dc^[YZ[\^__`_ZX[\][\]_d6;@F?6hfbdgbg;;:63ca`bed\XVYWUWZ]dfffcc`ZXY[]ace`ZTTUVSMOQQ]c\X[]c`^bhhbcab`YV[c45deeb`^ZVRUVY]e56jhi`ZVXVY\[[56]XY\]/0``385ca^^ag76hag67_\`]Y_a`]\WWVRMMLRX^][[_\XWUWYUXYW`^]`_[TJLMRX_Z[^]NW5679>96<>:ZRSRSTWTTVPQ]cca_32\\^YSONMU^\WS[2XUWZ_WVYVUW1960USPPSSMONIHNJJONOOPOMTVRTTUTORRTVYYSPTWW]b\]^^^YYZ\0235_WSTMHDHNJGGIKLKDACGLP]h`RLMVXXWSSMJNSUTQRMNLHHGIMPNNOQQSSST2QWPMECIJHGGKKFFJJIHHHILPTWZYWVSTXXUSUWTPOMPTTXa]ZSH=EOPIDDGKQXQNJIGLNDP[ZONORHLUZSPSROMMPMPPPOMJIJIHLNQQRTTPMMLJHJLMGHQRQNNHGPVUNLMNLKNOLKIMQQKKOQBBEGLWSNNRPPPOMOQMPTX[XUWVT\^ZX\ZUX\WOOSX[XY[\__XTYQIHIQQOQPNPPORQQRQTXMJNTECIHGLQRWZX[bg`UNO`^ZYYUOLHLQPHAEE@;=CD><@HNQVWQU_eWQVOHOUZ[PKNUSP^ceeehe\[]_\e``[YOMMNF?BPI;f=GECDIILSNLKPVRUTNEEDMXWONTSQTUSNKPRH@>>CIMKA?G?6jn4:CLRPOPOLNNOPONKORQRKGKHIKKLSYURRTVRQVUVUB=@6hVRn9<;:68>BDGA>?FLQW[UMJROMC57^2BCHD58DFGIMLKLOSPNPRTUWWXZ\XQ@PUWVSRVVWUV[\df_^]][XUWXY\XXaigeijfcfifdf]X\[X[Z\___`bccfgheba_`bbaa[YXX]_Z[`hc^]]^ZZ]`bd599:9967:ijo999=s674bd;:76JDAB7df^]fdXW89=CCB>dYUo<2740WKLWn_J_^pFEIHBtDOIGEDFH@DFECNZ`bipcddWTWRNPW\VONGCJSZVS\ahneaTS\epy|ohdehpz|xu_VXZY]adsufPNOSWYWWQNTSQX[ZbjhWIMYdfccYUc]]`ggcinicelomvk`baejjh_][WX[_lqqtpqtmjigjmpgab^^gmoqnnlhnqqpox{vv{unhb_`_ZRBFRNS[VUcafqppibb``]`ZOTUJIOROYcj`Xac[\\a]YWdgc___]aca^\0338G[h_WTMFFHFEt\Kgkork_^dj^ab`UU^]HQ_TNSLN]bXPPQJCDKOJIK{qnfuvdUPgeZUQ_qyzrjbbemkyG^^IoZXVVaq{yHA{EU[dclj`_a\]k^OQNjibzyz}}{}tuNZOw|{}qr{y~|OYKwoinsQSMGJFJQUP}xIS]]P~z~vy{usjEKNMIHJMRYPOHJIC~CBDGGJ{{|tpl9EWTCGPQGJMFwwohku{INLwmqGLJHpnyulaa^^Vbvomwoa_pnoj}zog\mwIJkUmkq|l;Khk_nxo^XJTostxob^MyLukBMUS\WT^lLOZgsg{}np|{rikoki|dgwnfaQ@UzvcXUYZVMGL]mkYRPMIDDOZZSQPSTTSY[WSW[ZRM[YIAktfTPVNNh\IUo[@cIdYSQPk{~\\ZP[}unXSRA>xJc[HIQIOOOIDPXWIOlwy|w][O@a[Pftsqurdko]gifimqoceeb\TO[s_AX^WdlgmtnwlgcYSGokrip}lT[a_aeva]cDxm{DDCCCzxwrlmksx}oomsAHJDBIIFROmzH}^p}i_\rm`fBLLMKC{sk`_[[YY\a`\YTTQKF6EXVVOP=GKIHJOVYUSLPSKP[\ST__MJLKB;HAEOMCCDICAFELADOKLCFOJ=6;HBLHDB9?8;;LMIBHPUWOJ><>AGFEA7DDC?:2]17:4->4=:@Me73663[X`3e_^d4339;;95=A=;974365468?;771257861262a594a673_d6h``[UV^bd`\Y]^_ZVGOXab^YW"_ebdi5g5886dZTSY\]^[Z48f][Z__aedb]&(*1/,++)(+---./-))*,//.,+)))()*,/,/+)))'#""%()**),4359;6/-//,**+*)'''&&%$&''',460,,.02552100//,00..,)),-./.,**+s)%$'#"##$##''())(()+,**+,+*))*(&"!$%&'()(*-04421.'" "&(),011+(&$##'+,+,.01.+,-...--.0/,+,)(&%%%'),++-//.,---./*/0.,+,,*))),/./-,,--+,-,,-..-,,,+***)*+,,-.220//0/...//-+*+.//,**,+,/-*)++,,,--,!//-/1-/,+*,//)'&)('(().//0/0-*))+,-.-,*)(''&$%&$+.+)),0-,.10,--.-'%),-./..,)'$'''*/011-*'(()+*(*(((*.-*+*+,01.0*'*)(+,)'&$%&&$$#&),,,+.-**)*+),,*0.,.,*&#%##&+**+* "$#&((')&'($$,//.-()*(%$$#',*)%))((+-)')''()('')(%&&#"%##''(((''-/,,++*(++,.//*(+.-3711100-+*)*'''%"!#'%$$&()(# #&)*073)&'*+*))*'&),,+)*&%%#$$%')(((*)('%%!$#&%#''Q&&&'(&%&&&%%&&')+++,--++-.-*+.,*)'()'',++'#!! &"#$$$'+%-20+,,.(+15.*,+)((+) (&%%%$&(*+)'('&%&'&#!%(()*&%,0.*'()&&('),*'(*-&&&').,)(++)+*()+)*,//.,,,*/1-,//*+/,((+-.+,--/1,(-)%%%*)'(('))*+))**+-(&).%&'&%(**,-+-/21.**1.-.-)''%())%!$#!!"  #%'++()-0('+&"'))*#"$('&/110/10-+0./,/''('"#,% %''+-$+(#$&*)/+&&%$3-,/2131/+-.0-,0/)-*$&%"#"(,-)())//,,.,,**,++)'()'('-$#!"$$&)&&#&*(()& !!&-+%&*)()**'&()% #%%#16 %(&&'&%$%&'''$&(&'#"$""%&$),)(())%'+))*1+*:!!#!"&)+-("$"")$' "'&%&$%&))*,,--,**,*()*-0-*)(*(&&&%$%&%&#%%%(*)( !'+-+,/0/+'&'&& $**&&''(((*++,,')'&&&$#&&!!"38$&$(''()(&&$&'%!#(#  %%&%('&(+,*)***)*,,-..-/-*#+--X,+*-./.-/04532102/+-/030/5863562146434/,0/./-02123444654322245411..-,12002730023/0234577<:(( ##460065.,!""!7.+4*')1=3&40;&%&%#<$*&'&$%("%(+& !"%,0535624735575100/0448>><;<9103441/**079;:878997:747586--3531//444774566654679:;:9;@><8:<<=@B?=>=;<;99:<8;>AB>:78==<>;62)&%212445569<><988878878<=:;=@@@BEFEKQ,/UMNZVQW`b`/1WMPNRPJGGEBEHINMLRQRS**T)QT-.UQRROPRPNHGHKPOLJELQONNKJKHIIMMT+WRMSOJQXSONQLJIIKOR+-+**++(&$+&.17$&'PONOOPQR,VMHLJMMHHILFDFEB>;;>BAFIJFEGFDDB@=81..% $'$-@?=?808816=FD@>>H>0/668;:77B>787:;@@@IHD."'.033/,.125/++*O,01351,-+# $))Q+38:>BG<=<3494214830-)*.4646;=DF@?1-5>ELNE@??@DKWLNK<8877>=<43:788><9C><=;==<;6652456>?>?=>@<;9:@?>=<:=@@??EFBFID@=87:96/$)-+03/287<@??;9987790*22+-0/,3:=3/5411141--341.-+'(('$#!-5-((%! "!!8.(<<=?=55:=5665./44&,7.H+.**581+,-'#E%)+((*OPME?=9CLF:0,<7/+)3?ED@<77796/)*&))&64& %/287=JM>78:66A9PSPQ/10^[YO>??KDQGCIPROJLIN,3)OMEA>?APRWNKRYUVSO.1,KGM()O(*.0-FBHM)077-RQOPLGJIDBFADKGDC?H%()'$$%(+2*+&''#B#"#'&(IFEIOHED<74!/."',,GEEGK&&(%GHHFA@=99@GN(+*B:?E')'&E;9=LIA:344406B>F@62/131+)*3=<0.-*(&&-31--,...-/0.,-/0,(//& 9@8*)-(&50(,;3"6(;3-+*9@BDE012.3LF?2+,$G#B)7O9&+,*,+-)%*-.&'9??G@=00(31,9BAADB87&043:>;?C>GIMC9861.$=9<4:::>@D;:8:"&'$$()$/+JOH<@N*I2?H=97C@23"('&'#B?:32//.11430,),*'##  !&**('%(*#'-.&'1/$#$%# %&! ""$ # $!%"#&" R%%#!%'+'#"!!!!&" '("* &(&+0+)+b++,-/+-+'(-.0.*(**,*(!#(/.-)'+.,-0./+'&+,--*(0,++,*+./.*ր䀂 ܀߀  ûƼ؀ʼ½˻¾򂌒րǿǿͷ¼ĽƼӾǼźͳŽĿij¾Ķȹ¦㔣ʼų̴èȮʽ¹ǿ˼燩¾̷ˀ»ŷƻȺ"倄ꄀ煐ףኗȼþʀǻַüȾ̓քπ½Ϻź϶̾ûȦlj򒕘񃍓¸ȽȿҴƻѱý󀊉犪ļǝȶЃ􁅀솃Ͻ߄ꀒ؀ûЉԂतº̱Թб듑˪خߋκ̺طŸżȽſǼϼ􁎙£܃ƾµͶ̹̽۽ǹij΄9aYUVai4c^^YY[`ceefga\\^d4544ifca_]XUQPRW\_b2334685ie`XSOKIHMPSQT]cksn^WXXWZXX]ba]`ea[SPPNMKKQUSQQUVcph_YTUUUY][[__a_ZXZ^beaZUVZ[VPOMKGEHHHKSQQSSRSVXXRNPTUUUWZ]\QLMMORSWX]bg543d575f^[aRPURRSTSY`a^ZWXW[]^be44344ebb354c``ace34f^YURRTZ_bdfehheaaf553d23566678866644iki`_^aa_bbcdegecacdc3355356655c__^^`eeaacbadfea`_^^_^YV[]]\ZUX\]_^]\_`ZY]]]ZYZ[[b49>:hhjdcd^bi7::6ec`ab3c[WY\][_chc^^_`_]\``^^aadc`][X[VTWXf44e]\^_^dgdab__``b243dbdfd]WVZZYZ_e5e_^`c\XUWWUUVX]_^]\`11`__3455dabaZX^[Zd34_VU[[Z]`\VSVTQPNLLSWWYXUPUNMTXTQNN!RRVWSX\OOHIV^ZWZ\Yc734479=?=9\TTSRSRV[1101121\VVW[[WY\^]ZVXZTUW]YR\]XTSZ0]ZWQNLKLQURNJJIDIHLMMNPVYUVWUSTOPRPSUUWYZZ]\[[[Y[ZTQQSV\c31[\YUZ^QIHNPNNLILOPOQWYUNKNRQTWWVSNMOQOMSRQMLLJJMNJHHLPMHINOWYVOGCCBACDEEDFJKJHFEEIPSTWUSQNMQTUUVURQPPTYW\a^YUTNGLNJNMNNOSQHGFHIIDKIIIKHLLPVYWW[USTTWVWVUUTONOORTRRWURROLNMKIHHOTSPMHLOKHNSURPTTOTVWWMGINORUXYRKEIMNNJKPQKKKNPPQRWXUURV^]ceZUUWTRUSRSSYWQV\ZPSSPTPNMLOPORUUTMKNROLPQRMLJB:EC@FJQ VX^a^`da_]X[aXOIHNRTSEHJBe\=EFKRVWWWYZUQRLEDGLRRQSVXQQQX\`geXTRTSV\gabRFNSXWMNLEJOQRVYV_ZF@AJORKDCB=:Ibbdkjehf[X`aVKHPE??@@?BFLSXaZSXVY_ZYYUTSSY`^[WSSMLMG>l8DF?;>CFJKNMKSQOOOJKNQX^UNNSTTUUSNLMRNFHNPRJ==??=i^6ELTWQRSRVWRMLLNMPSXULGCDIFCDKPRVWXTQSSMNNKNA:=nr<7e=?>@DC@BDEGFA67B@V>BOtv`ovbCHHGGFMSMMNJHIFDGKOQQ^`WW[ellkjgeaace`WUTOSY[]ikg_\[XZ[\^XVOIGKZcddcbbb_`do`cc_]^YX[XSONU\]]aeghmprmd`ejpngigdd_ajlkkmmkmmmjjkhea^aonnnifhkiimmg_MCIU^_ZXWUVWY[]]\[[\]XTSPRXY[`dgikouyx|{qqhcow||tknx{yzzdbG}~wLLJIGLOPQRRPMICVBOHPTS4AGNMIGHzrqx{zytlgfikowvz|zxpqvzvh_[[REILKJTca]USZ^[WcrphelwgTMKOPQ^ggqsf^ecUHF?<;C_a^`acc[`iXN`hieadoqqkgcjsaD>=>=934774:HONLJKLCLSQNMKMJGEEBV;AuMQYXWV\WVYYQORHv~FGHJMJKV[`ZQWXVce_[]ajlicaa_cfghvvpg\TXRT[]WZWLTOKGNX\\XTTSRQXbb[TJR[[]ca[[`ciikklwsfcchi_`^ba]a_]YVY[^fqsw~|~slkkicbfjmottst}vusqtxy}~|xs\KMOQVPBCFMYZY]^cikhb^]Z^dZUUVZbkbUUWUQOSQKOWUVYZeid_[Z][]cd220`2569Kak\P\WOHC??BEBQmoopf[\aaa`c[WZ_[K_eOLUTNPa`[SNOKIMWWSNJG{{xqimm`][t|bU_cq{unijgcmwJMWaOr_XQS^bnz|BIGDLZTrne`_WU[?YlWICMHYlekttXMUWVc^HMzq{yvw||{{zy~|{voz{x{{~}v~}qpx~J[Yrol``L{|R[]H{wIQJJKROINPK}w|vyrJMQUWTUQSYVOLJIFAzIHIIGxzvirz?T`SFBJL}GIFII{|JD{}jt{O}eowEMSL~rpospd]]^^[Qiwp~aj|zyljwupdbpHEvcszer|n@LIchhvvvsbbdna\]UJIHDaT<9BNKEaCSaGBZnCavxhdo{xstrle{yhb\QLWsGiZUVXPFGPWbf]XRNHF?DRa_VPTTMOXYXYYWZQK^\HRs[\]RPIW_UDUgXDqLEWcJ8hKXaqZ`xxrYOz}ICNcw_HWWUGGOV^eV\rngrqgmXRSGV^Q[no~~wyjbpkvvoupej`NVeaXJEPcdcngp{{nnf_^\Nbplcm|m`ZWVZ_|l[m{}|r~z|zjfltywtst|A~xncrDGIEDEJVInnyxgkcV^`hwmd;FIPE?=rtxke\\XX^aYRLJLF@KSSTTUCSNOJIIY\TUXPUKIR_XYeaPMJJC=:DD@KIQOSNNRLGEKNKLDHPG?5:C>NKBBA=8C>HJC?NTLLJF?@DEF?:@=869@DSB:?DPXRHB=43@GIDB=:325864ZE[>3AV57263[Y]cc^be54579::9:@N?=:8535742176053258874145a07613763a_bac^WZ\]`aa___acYYRPZ`%`a`Z[`abfg4677ic`UUVWZ^_aehie_\]^bg55++(''-0-,+()+-././0/-,+./..--,*)''&(+-..,*'$###!"$(()/37;7-)++)**),--*+00-('&%$$#%))('++3;6/-*((),.,+-..-*))+./-)'(--)%%#! "$##'&')(&')*)(')**('*,-+%"##$&'''),/,+)(.'&)&%&((*--,)&(())*-..-,,*+,--/+((&%%(,--..12.,+-,.00+*+..+,,,...-,,..-,*,,,-11/.//0112/.//./0,*--++*'),,-.--./,+...-,,-++100../-.2..,++-(&(**(*-0-)*,.-+*,.--/.0/..+),)(*(/-(),,,/1.,,+,,,-,+-//*'&**((*--(),.+(&&(')**)(*-,,-,--))-+)/)$!%&(*,*'&''&%$##&(())(%(%$()'&%$&%((%'+#$!!(,)())&+$$'(&'''('&()''(++()+++*'()&'(+ )$)+'&&()))'$|'*)&#$$"%%'%%&(-0./.+*)(*,+,-,-...23210..-)('&%'+'(('+,&#$)*)))')**()++*(&()(*,,+)(()**(+)(%%''&'(%##%)'#!""#%$%#"###$$$%$& +$$#$&**)*)()+++,-,+**,.,,.,+**'"" ! #% ""##%$)('(('**-02002.,--/.//--,)))()*)(-+))'%((&%%%())(&$'*'&)-.,*,,)--,/*'')),.//-*%&((*''++())**)*+-.-,*,2/01-*+-*),+**),+(+-,&)*(*)**)*)'(*+*&%'*(&(((&''!(&%''*)((*+./-020..+,/+'#$')))#&(#50""%(++*)*+++)&%(%! $((&'*-(((,./21*)'))*,201'!')..()($&''(+,*.-$!!')+'##"'20276375/-21,%%+$ !!%)+/+(,*-0+,-*)((,0/,)'(%&'$4"# "#%%'%&)&'('$%'),/)&&*))**)&$&*'##%&&"3-!%)*''('))&%&%&%&'*)#! #! !&)*,+*(&(*&%$"%78/##%"!$&')'$($$" #&'()$+(&$%&()(')++)*()+,*v''*,-+--+-,)(''$''(*%)&###**'&'')+,,,*+)('%'$&&&$%''(')-,+)'',+*(&)$##!&"5 "!!!"#&&'''&'''%&&"   !!#$'((()+*(*--..//..,.--,++-.-,,+.341.03.,0222002343+)21-).1.-.,./0/-044453135641001../551330036200/0-./133587; =965553%1.1227511 !#" !#"!) #)@?0=@2$&%%%$),)**'&'%$')-..54.03:><::98767:700/,.123:=;6541335632-*),5::999::7896886562353/-,15544678;>?;658<@?:<:8968<===??=>=><;<;9757?>>?<::;;<>:50% *0433322466886778742113677:<=>>?CEEHMUTRRRU[\\^[YSH@B;5=BGHD>>EGFGHKTW72R)RRRPMRQSUYYTPPURJINMKJMHJNQQQOLIKLIILQSPSKHOMGMKH@HRX..,*(M+-.../.+$' ,'*+)%++)()TQRTTPKE?@EILLKHGFB=;:<=>BBHIEEA?BELKA81,+%#&&&-895/04776;0+' "875887737<1+9??<9;CFFA=9;C6 "-22/,-/ZUPO(/430-*,)(&'&0"'I14854472164/02+IN*))*,+-58=6143 +2<<869;?A@<843355`cbb:C@;4RX/4868<:5469@@@=?D?679=<8:8;88:7510345;669;;>A@@BGAB@ACEEGIIGB3*-/25,#'(-411569<<:76549<53246>=>9249878:30133(59**11,,762-**(')10,)'&MGEEB>:>@753BF4*15?D?;9;:6:>G&(.5+<0+#$.28AC$'%#@'/,@94+('"!&,8,$")%0=842L-MKJT0TPMU58)EAJ)0)((--KGHMPP),-*QRJOOKLHEBFBCLHJJ=)*+-/--*+0/*)''&#?&&()&GHMMJJDEB79:+4.%#()@GF&(%((CAA($AD9=GDEMK+H5;AO&*-)B;;=?<422343*8C=DOG49C?@78??;47@)(>2=B3;A5'&056?@?=115<2./,&&%A&2')'$8,21!)6?#.?D>319@=;<;94DLGGOA873+',:%G92013.'(-17820,)()"%,45.*..()//../,0+%21%)B211**#-4,".<.#:+(/7)6FJN+-2?37IHLB/(@=*'+9E;%210('-027+-=K<6=;59,*+#.4+2@BLKKDE;5?DD?BC;;>BF@>==B#BA:3:$$'%%C$(/'MN;??@<86hggkkfdbcffgfddec^]\XX]]\\YX]`bc`\ZTSPOY[ZXWV[`afebebeje`aacce687dcb``b33^]`ec_\ZY\`d^YZX\\Y]]]_a^__\a\\_24feda_[_dfaZZ\[Y\b44543bcc32]YZ^b`a_]Z\^d`VTRW]\^dfc^___`ba_243237h^\^[VVV[56442130WW\\TRURNPUTSWSNRVR_ZLQTSRMMPSROKJNOX[SLOZ]]_b`^]Y_^^^]ZXSPLNSPOQSX_2210_0021_VWZ\\X/0//0\\]WRU\[//WQNS]aYUSNNPSSVWTX\TPLSJSYNPNRTUWYXYVGHNNSXUW\[VTPQWWW\XONOPQRZa0/56783\VVSMNLIHLPTUSNKMKHJJJMQPNOMNPRYYY]YNLKIEHMOMKNVPHEJSXVPMGCA@ABDFDDEGHFF,ECEJQSV]XSSOMMLPSUTTSTTVYY^a[\XVNDQROPOQOQPMGJJBEIJMIGLOMOTU[^[XY]_^_^\]Z[]\WUUSQTNMQPKLMMLMNPNOPMOTTQQNRXWZ^ZXgg]YNHGHJLPX[UNJLNPPLIONGKMQOKOTY]YWUX\[UVSSVWPQVXVSNUWVSVZYWUWWTSI?:HSXXYVQLINSIPTRLMLLGEFNIALUTRVXZXVVXQPTQRWPOMSXZRHE:no^fAKLLQW[[[YSQVVVQQEGLMRWYUVZ^XNNTWWZ^^UQZcYPSWa][\VZYIHMGHLNPURKKIJHHSWTGGGICAOa`die[V^fYUWZNGKKNQL@AAA@?@?<=>?CILOOMNNJJLKIGHHEDEBBE?XjBHJILOUPLNPPOOOPUTUVXXVWVXXUWVWZWTUWWTSRUY^[YW]ZX\^ba\\\`e59?;hki\URZ\W]YY[[YV]eece^\]ed^XSQSVY\cbZ^_\X]dlog\UTVVUY]j866778989:nhf_dfhfgj5350<8-AP\W\bZba`m:>BFDACEFIKI@8HKOTZTt?o;I@GEAAEHQWSPPPMJFA;9>GLLORNQTX^inqkd`agf\X[WSTUZfmidZXY``^\YWUNKDG[cbadc^\_a`^``aed`a^ZVTY`_]^`a]\_hkkeb`blfeksogekpqnjhjlnonmmlkgb_gkfnqlmpllhdc\TMMRXXXWVUWUTUX[YYUSPNMLIJNRX`b`bgkmt|{~|{~z~{qwzyyx}vHbML}wx}}z~NLJHtbKPNRUVSORTVVYXWUMPfRq;55[9HWRLR`a[[a\cjlf`adfcZOOJMPMNW`fgb\XRGBE?<;9JUNSejauqkoqjfjrvuuskaYSYcBc35565aSKD>]xMQ{LJGIHIz|tQUddpJ[]V]bYOEt9pkqzLUZYUQTZ`_cgryul\WRSY][\ffc_XVZ^ckcV|uyIITC>Jgc\[\daUPXZ^giUnoQW\^ZYZ\\ak||rw}~xuk]Z`_Y]af_\achpnmu{{{~upohc\fmmnwxs|w|wyzwtytqolf\UWb_XSJF_dddZ\ff\\[[^[Y]hj`\^dlkg`_ZSQKHKMSX\Y[XRekj_UV]`dc^0101349K]ia`gaOF@=::FPITmmjjf]`d\^dd^ZRWWTa_LSRLFQe_\MISTU[h\WOGHo|{zwla]X[gmjffejrrceikfk}GRTYTd\\SSXYgyFFW^Otmjdb^MQ`FcfVJM[ISkgfkoTJFINNJKTK}uoz~}y|zz}xyzyx~}tsqqrunu}~{{wjuQ}mu|h[`w|HL[_xtfanINU\Y{wP^OKLLLHJKLIKKJK~x{{IQZ\ZSUW\]PKJMJEKLHFIFzrgp@CS`Nx@NFpJGGEuoEHIvo~}ts^lmwOLLPFwlekme\_c_[Xhnrygm~wupjjgqskmpdizu@@|cqr}wogm`X_SPGCEB?yiZ77DUd^hquKOZfxBp^eiafsvmuMPHxlii`YMazi[SOOKFEGL[`d`V^RAi>Xi_SWVMGYnaSZY^j`RPYLVdipeQMOx[k~ts}cRJ`waUxr_ZOV[QFXeWQOZU`msqnrlc_]\`^WSG_cOVXPj{xhdiekxnuytwsdZ\ghPAGSVa[Wekrwijgcc\Yeu{pohS^_SZienc[BrD{xwhY`p|psyz|pvprt>EED~z|LRH{|xjklncKU]`dsd>EGSLAqfyHLncaaU\^b^L@CDIOPN[XSNVNOLJ@W^PW^R_XSQMTZdkWNLJFF@EDAIBCGUZWWOC=;DLHI>>NSOA>B?>D??GPNG@;7<8b;:BF<:?LUQMC>;8656664344015356799556403552598e]_ceb\6[\`^bc__`bba__ZVW\`dgVX^Z[]477554b_\UPS[d_[3354`]``c35,)%(*2-))+-/0..-010-,./V./1/-,,*)%%&*/0.,.,*(&%''$'('%%%''()*(((**.10--,,/..,*''%###$&*,494,**(('''&''(*)2,,-,)&&+*&$''$$" "%(((+-*((&%%&(**)))+-+(&%#"##%'($+,)('%*&(**(&&'(),,*''')))*+!)***+))*,,+)&((*+)+-*))+B+.3.++,././//10/.-/341/./1331//10.-.*)*b+./10.-,*('%+,,,+*,../--10020.//.....-,+,)(*.,+)((*,.+)*)+-+.--./,+++-,----,+*(,.0+'(**)*--,,(&'*,*+*)()+.+'&$',,,..,))*)*,-,1,+-+))()##')%&(&$&'''*'$&($**"%((&$%'''$" $$'+&"%+*)*.,*'$'&&%'&#!!!#('&&(+-X,-'(*,,()'(&$&+*&#!$(+''($$%&&)*),-)&$*#)-&''*,../---#%))-/--0.,,)*/.-0-('I()*(+*'*)&%(*-,*'&&&%'&&'*(&&&')*./..+%%$$"$()(%(-)%##%'$"$"!!!""#$%%$#$"$&))).,)*)(((),..-,,+,/.03./.-*%+'#" !"$! !%"%((+('(+)*--0210034322110022.,,)'(&&**'())((**())'(,+++(+/.030/7700+((&''*/20+(()+,)&*)$(*+)'),.0/-+-/.),,()-.,*(,-,*+./.---,+% &+-,-,)'%')#(*+((&'&$$,'"(..*+,+**+,()+**,'((*--'!"6804!&&#&),,-+'&'&'&) !%%'+,)*.0-'(,,,.//(',2,'*+/+,0,-+$%(##%&()(%%%&&&,.+%(&'#(10264.,03-+,/($&&)*%"&*-***)*)(-,--+*)(*+*(0,++"##$"%%!6;!$!#&(')()&)-/./+&#)*&%&&" "%&(*+'&#  %')+*+)(+*)&" !%((()*#"# #'$'+,)&&""&! ! 44"$!#(%&)%%&#"$#!$'''%%''()*+0,*+)*)*++0/,*)())),+,.,.1340..*))(''7(%%'(&(''*)%('%&)*&(((&%'('&&$&'(&))(*+,**)**)(')%#" "! "&()*)*)&''(%#!! *7$&%$&(,*(()*)))+./...-..--+-/.,-..,**,.1.-,11/124311013/01+().1-2/-01.,/44340/0762/-,,,.033/120/159:61,,...029<881556655#)1-02.3129"%#""#"#" "(0/+> 9 '"&#!"$&+.,**+)(%"!'*)+.+-/03:;>9745;<5122./03:@<93127775321-,')6;99;;867876768::8952/.17545552249;<9656;88=B>:;>?@>;<==>?>;75;>>942.+)(+/13222564420.-,,+-/26=;::<>>CJHILNNONQZZZXQQQMIIMMNPRELJADEFGGILF0B=MVMA?CC?;=DGIJH@85237!+/'#"";LZa01]aaWLNX.,W))L))EDGEW13S58D1973=>6/)OZ^UNC =9?G.6:9634689=AHLOID97137:67?@C@<:>>CJC6TX[NKEK.,.-*4IC>=;526<642))9::815<:55578548<=657:<<:662.-)(*-01202-)667/(&(()(%%2;5483% '$*<:9:836844:853-01.55(..+',:63*&-..0:2.)%&G;EDCB;7745::8875;@>46::8:DG%,,0,E3--$$+-4?EJH$A$-1'630*(&' 24*#&0$*:78;?0Q,((-.*M)0*ONTVOJHOYZQC@KJGDHEEHEKGHIILPMGECBBID>CHIHIIAGY]/B8?FILI:/1CH*+47MKHDB6/7+UXbZUMK+054KE@E/6)&()*IIJJNNIJ(***)*NGCEDILJMQI*-013/0.04,(&('%EG))(%'FF(JLJID=5:!!-5*> )&8&%&&@;EIF%('J?9EIC?=JS4:;@-((,$DA949=602654.:=7 "@1>>IJ>:5;302,*%!"!!B7*+637GDF'%)0:"6246/09CGHC=9?Q*+&@9::31'3AID82.-.*(())3354+3-%;!0:4,0.)&0>2+.-/83**0),8366+)* &/*&02-'#8&B!;2HL:F=;D6.*5AH3,@666*13-&09/,,2.07886:8410.1.**$38)/3.>OGG:5:7B=>;-36,1:796.#9B%CDENAA;06AFG;=ABAB;@;>=!%$#AAC)-(ACACBB9::;8+1783=1##*' ;7D)+E;532-0131( "$$#**%#%!! !*0&(,'.*'&#(,17)$%# " !! $ %+((& "($%"z%!$" %"!%''!!'&# ,$)%$ /+!"#)+,.%*.++-/.,,,.-.-*+,..,'*+,./3))-*)),++(%&)-*(,*+-/Āڀ。~ ýȽ͹Ҁû򄉊ʿԀ΀탈ƿ͹½ľπúŷʰĽĤ˽ÿºʹǀµǾ¿öۿȿ㮣̿ع»ɨƹ̀ɸǧż±¾慟ڀ낎댊ž½¸ø׀ľξĿ惈öĻſǽ·¿·Ѿ˴򃏂聃ₜ׿像ļ¸ÿ¸侱û󉓛ÿ˽ų񃋋ýĽˀí怕ㆆ腐􂋞愆̘℀˾Ͽ򐏡ۮ胆ñÀڻñ◫Ţ͵􆰏񻣦ʌʹǼžĸǀȴʣŮþрŻ÷ʷζԸDzȺ䁋􄊆1d4g]WUT`b35fb``afffca^^`_`babcgihecbba]YSQW\^`]^34ebb_\_^XWWWUPPTUUSUUVXYW]dfd``fjijhdccec[TPQQTWZ[YY[a_QEGLNONNNMJLSVVUTQSUWTMLMMQPMJJJOQRX[[XVQNNOQU[][TUZ^_\\][UQQTYYZY[_3676778974ca]ZURRSUWYYW[]^`aa`b345545664c```_][XVY\^^^`ced2e23343456645687765567897887666j3f54fff34gebdf56311459;;<<;9799655565igfgfbaaa_^]^^^\^aaba^YWUQMIRXXWXVVYZXY[_ihec``befeddda_]^`afhb2da_YVSSW\`ZWYZYWZba^\]\`bYYZ^afcbbedcbg6jea\XWXZ^e4633ebbc45a`beb]XURUZ_WUWXXYZa696ea]]\[[`443d^_cVT\`\\^`39:==853156dZWXYUVYTSSRNMKMRQU[YRRQMRSPNLLOTaecWQRZdfaa_^_]_ac[VQPSTNNMOOOWZ]//\]a]^c21YZYWW/233430.[YXY]\XXVV35\RKJNPSUSY^Y^_ZZWRLPQMLMPPNRTUVKHSPLNPORSQNMLQSTXXSPRRRPTWYZV[_133_WVQRSOMKMRTUTSVPLMNMKKVNLNOTSOS]bTRRNKJGILKEDLONHEHRUODCEFAAHKKMNKHIJIIHEFKRWY\\YXURPPQQRV[XTQQQOW_TPRXXMKMOONNNOJECIMMOLBHNNTOHGNQRTUWZZWY__ab_]bdfge\\]]YZXSQQRROMNUWRONORWWUUTQSUUVUTW`fjaTJGFKKMORRMLMLMNPONJIMPRTUTUVVYXXXUTQSVW[]XVTQSTUYVUPOUZYVUTRQKIHLQUWY[[[YX[VTTTPOPSVOHHPOOOHLTY_^\VWSOMLJGJQRQQSQKE@>=78AHHGGJMRY[]VUYTNPIHTWX[ZNOPRWWRWYW[a`WWXYYOVUYZ_cMFIJKMIIGJONIKNNJNZ\XUEC<?AGIFA?BCEDBB;IQWVUKORTZZUUVLGMRSD?EJGJMKPUWSTSOJB:;@HMNNRTOOONNMLB;GPYTIDKNGMNPTY[XUXWSFA:7>ECD<6;=87::=BDFHBDEHRWUSTPQLIDABMPOLHKPOOOSUVUTU:TRS]^XXURUVTUYW[^]^Y[c_WWWYQNNMOPURQRKBEIIPPJJFFJNQEBQMMMNRONQSQNOONKJQMFADFFFGKIIH?=ABC>>A@??>>@DHJNOJHJLJNNOLJHGDFKI@[9HLNLLPQPNPPRQSRRTSRUUTTUXZ[YYXXYWUVVXY[_`[YYZY\[X^ded`^abf46:;87ndYTSUTWWVYXZ\_baaca^]aa]YYVWZ\^^_YY\]^[X_jmf]_a]XW[dj766k7:8:@BEEFJKJKPSN@DG3]Ol@>=?FKPGBABFMRVVOMKNKI@e6<9>DJOblonnkge^_]ZYYSV]epjhc``ba]VUVVSPKHL]b_[^\ZYZ]]\^^^`dhiga[]bb\\ab_ceeijedbaoyyvseY\flsoligehilmklkgfblnhmtpmqrppffeddd`\XWXXYWUSU[`_YSRTXVQLLOTX]_abgkhjmsvx~m}ez}}KKJ~{|OzKLOONOPRNLMPOORWWPOV]ZWVTSRTYVp_][Vh:=CHJMKA=mb__kw}xplinx{~~xjmrqmlyzz{zm`XOOV^_Xcokjllhllbagdaa`^TEEJMKGKWTODFOOLMOMGCCHaa`q|{{qnqxzrjfbc`UVW^UB8cbbYOLNUjubbj{KQKzyJJHEILGJPNLsxK]a^gh[Pukwkkvob_cig{X`abhljlg^TTWOQTW[[_bg_Rtuh|IDTwXd\WUSVRUTW^ea[Zfm|sywmbab]_^bdilgoonnsvuv{|~~y|}vv{zxwtpu}xw~}wtidhd]YTRQTVTUTRXkbZZ[`c]WXYYXXY]`hgbdgaZTW]ZRMIHKPUZ^daWYghgYW\]][XZ]]0258CX`cik_SGD>;86>MAXmlhhifb^Zkg^YLGPYWb[PPTUEWgYXMN\XV^`UTRNJ{}unf`fknn}e\hlh]`ikp{}}INSTFt\cc]^[WampxCGQ_`Lmfik_ESh@YoeVQ``N\e^`ejSyuDKLKLMOM}yqz{wrsxxqpoljkongizztush|UQoipy{^NbJW[\QzzqjiUROQUYQzr{HQPJGDEG~JGFHJL~GM\hYPOTYWRGKGGHKJw~wvzuxy@NXJBHRE~GsiIEDHGurw{voRfiyFDw{ywi_glc`[[XMOXfmrpwyt|yojq@jbghLxzxj\`x>qou`jqceqqeaVK\VQC@C=uixyuJHXeOlxDBCOX^o}hRT[Yak}wmwGKzifd_USdyv`WMBLMFBKVZkjfd\?qM[WO^dRORVZl[W_WTPQZ`b`sckhTGANZ\Q\_ZUPpHWIJKKZYts~d[WSchlrGLrYIJKFJU\GOSdV`r@oSXb_[\Z[WRONTZNFMFdqsoflkbs~~fismklme\_skdLHJXQNQ[_ckeeubcg_howklgOR^^u{|wedqul{Le`_RUejmlrCvnlnumwA|sgMHHH}u~Bzk]_egbYXdihxrvDOVPcaCtka]^dida\[ZJ?GNOBO[[RONUWQCHNPMU]_`ZUKJ^YcWKOJKPMDABDLNKPd[LHHFCFFDJAIFCDIQCE?BAFF?>PQIC@FEI?=@@8A8;CKIEE=9==8D>JH:?EJSJFA9[d<<;96464211.04:B><9879961/00/-*)-8<96754336656768:<<:6248732665888997866?DC@?525:=@=<;;:<<>=<=>;98>@DFFLOPOPPONLKJHHNMMPTTM@PQLIJLNOH6CGFHKNNPS+V--XSSQRQQOLMJIGGHNPOSYST.ZTNLHJQTS*,--,--.,*,/..022--374210//01.N;0/-(/!%(*( 7333<78=<98760$!!"" %/.*"$*)''(% "477CMRUPIJEGHABGLMHB@<;811261#,,-'$$&+AG@4268AAB>9255/23588<@E@5YWRHG>LZ0\XXZY&*F^Y?B=:9574ZTXXSZ[WSUf6337;6217?AEEC??FFKJJMGDB;7:8752002323306A85558:6113568=;88;61-031.,)'(+/1464,-544*('&&$##$$ 058;<1(!$,<99899751=<41+(,3/52*,/1&1:0/)*4/-34,,,)'HFIDFA<:7;=>>HF619<835;;>DDD(*+-%=.21,--+1:=BD$&+33%0,-.')+93*'32&/40485@&%$&F&I>=AGABA>@>;8:"6288N,=D==811<65;2:>77=<45/(5-+#"$ ?:?A>)'1;.8B)&"%),5>5').+05>GKH?9ANE&(@9854.-6@H?41,J&*+(%)//87674$=+2/)18+*-/0:-+3,-,)/543<@H511.69;?(%?1%(*(*/4%),7-.87',32..--)''(/3)&-'9AA@:?;5@OOHF9:B=<:8623?;8+(*0)'*035964C64715;@89:+*33@DCC74C<;5BGJ,716/.68::=A#A<;;:?9@$C=7E+(%'D<@#B84266722:97>;CKKLG@<=HLOQSQSTUSMHIJMONKIGLRVWY\YWTRRRUUYdZWQTZYXUTZ`YQMNSY^^Y^4689;;=;7874_\WVXVVXY[Z^b`e4567;87888679867543`[Z[[X[__aef337867787799899;<<977645334644g465fefhijb^\\[ZY]`___^a7<>;:<;99:999899765463db`_`_\[ZZ[YUTSQQQW^]YWXYXZ\\acheehdafi4feee`]\[Z[ZX\a`[XVUSRSY]\[[\[[_`^__`abc_[[`a[[_bccdg6654d]WW\`bcdf```bccdfc2e^ZXVTRQUXVX[ZZ\`358;6`\YXY\bbbg_\`ghb^\\h623=C?A75775^XYY^e]UTSTTQPNLLPSROIHKNLMQQMLJKPNHFKTUQUWZcdZ[[_c^YYTPRSRTVVXZ^ZXXUTVZZX]154]STZ267775433/-]^^0]ZW[VKIHILOONOSSVXZUWWTQPTWQRVPLLIOUTSQKJLJMORQLJNQRVXXXUTVTQOQUSQQTV[1\OUVTNQTWRMGEEKPNONONM;RUNOQUUMOQQQNHFDEFFJNL@=GSSNDIRUPPJEGLLQLHHMSSSRVZZXX[`dgd__a^TRSZ^_\]]USPJE@FPYWSPMRY\YWSPRWSPNNPOQWZMGDABHNMNNIKOLKMTWXSLKPSQTRROQQXac`a_\Y_`]bbZVUQQPPSRSQTUSQRRTSRRQOMINTPPSX\\a]UNLJS\YYZ]\VVSLBLSQRTVTPNFDKJIHILKIFA@@<=BEONELQS[]aeggZPOJGPSSWWPNLMRI@GKKJJKQYSMOSXV]]\T=;GTUUQNF=FJLX^c^^hc^SJID?JNNRSUVVWTY]MIU^[UTSNV\^ZTRUUWWWZVSOQUUTSSRQTQNNMJJGPM>>CEFFEDJJGDGIOQTUQTWNORURMMKLPQPG=@KOPPNPTUSPJBACFKOPPNMMFFIF>rn=RANTQKEIKMNOQT]_]]ZZTCkuh^=TWK^\9;88HJMQNPSMG?A@AB:6q@AIOOMOOQPPQSMRUVVTUUSRTUXY[[ZYYXXWXW[`cce\WYZXZcaccbbaacb243ea]UOUWXWWVVW\a_ab`ae`]YX_^__\XVZYZ[\\]^\WYafdadca\Z[adgghddmmm:njkifhkfa`^`3267U@;aXd^ai[`9=?CFHSZQPPSUSMHA<]PkHSclll\^ZU[esFw~peENkdb`]V]so^R}zScaH:>EEACGC=::5?GNKJGAWPLV[021_]3455_^b\X1;46857;;?A?989744525;54443545675a141X^368AB5^]^dc_]]_^bfg^\]___dd_cic_hjbY\`_e42133fdcfg[RPQW^`a145e_YX+,--,*&'')-00.0././00..-../11//./0131.+('&&'&&+0/...-.0332/.+***+)**+*+,+*.1102134356543.,+)(&''%$%,9=1'!#$%%!"$%&(''('W&$"##$&%##"%(**+,++*))())*,*''*+*''(,*%##&(+-*.*)(*+)(+*))+,*, ,**+*'),++--,/..0212.,*(()(+---+*,R.,++.-++,,,*))(''&)-.+)))(+.,.021241011.../,+**())()++)('(&%%(***++,,//.X0-+,.-((),,+,..+)(*,-../..,./..0..+)(('%$%'&)*((+--+*((),++.*),0/+**)/S)(*+-0+(''('%$$##&))'##$%$&''$###%%!"&%#%&(-,'))*,+),)'))(()(().+)(%%&))),,'&'K()(++)+' "$%%#$)))++(*(&%&')'),(&(%'-,,+'&'&(*++''*,+.//.,+,+*'')(''"'('&),0.+&$$')))()('''&&&'(&'()*%&''((%#""#$%(' "'&$!(&$*)'('))(*('$%&)-1650042,***)()*+,+*'%'*)'&'+('(&#!""  "%&*(%&+*-)&')+d-.0..145641132.,-012121-,*'%"&+0.+*(*/0.-+)*.-+*+,++-.'$#!!$'(*+)*,)()010-(&+-*+()').34111/.12033,+,*+*+)+++***++*))''$(+*)*-/.1.)'&$).)*,..*,*'#''%%&(('&! $$%$#%%'&%##!!" ")& &)*-,/111+''#!()*,,)'%(+%"$%&%$%)/*'(+,,/,+( $+++)'"$%&,0421631*&'#%)*,,---.+/2*',0-),,(-00,('**++,.,,')+**+-)*-+&'(&'%,*!"##$##"%$"!#%)&')(,-&%),)%%#$&&&"$%&&%')*)%" !$%&'&$%!"&%"C?") ()(%"$%'J).0--,.+"7<4-)*!++!#$##$$!#&''&'&##$#'&%$&)*,,,+,.--,(*)))+20*+,--,-1/+-3-(++,.*$**240.&$"%'-+-)&&)*)'(&$&'%%'('&&'(*)')*-1%(/.$#%#$')&!!$%"  #"%&&%&'*()+(# =$#(++)+*+**++'*,./-.- +++,-...-.,.2443.,./.11/044551011221//+%*---..,-0213323532.-11220-,.-/00012/,.35435540/03455755;::;87644532300&2-4039/2 #&'++&&''&# 3.98!%('&%"$++*)$#%*)*)%&*-'%()'*,+,59::<=87;84233489;>=<96487872/21./,+38854676453244468:<<88;;89<:436667:@A?AC@BDAADB?@>?@?=<:8:;=><<;?:5=B@?AGD@B@<>BC@:77;;989:9;;:67876632113689:<;;:8:BDEHNQMKJJIIJEACJLHMNORRQPORXWSNJHF=?FJPPLKKJNNOPPPJEJLK%IEHLIIPRRTXSTYYPLJJLR+--/..01.0,JK((*,-/210Y24420.--*(*+++,--+%650.203@?=>=?>CIE:3/-+0;@DD@>::;<B>CHKAAIEDLKCDHC>=9763344861(/397;"%&/3ZSblVMUMFOWVQ0//RR)*+++OKNMO19642//**-SNLPXZM5-02:FCFB7=-8;<@50-E@CH498<:7017553134012211,0347754214420315>@<9861++..,)(%$&(,/11126673''&%$&!+36<9/,( 2:459AD$%%&)>97=9::8315>E&)%)2.)2)&*$57+-5=-(47-046)>GKIH(0/+--Z/]SJYYSKBPRGIFCCLSSTF@?CDCHB<8857.>GSY[OI64@GJAIA92@T9715VNHBA=7?<;H93:>83.++)),33:==C;4626=B<48@BF6'75//;?71<)#+-&""-)%/;,.=!51.-2-,%##$$)'*/'-'0;41NX>DXSMJC;8;>@349703:B')98,**..313;:8=:98897453*007:DC:7DB8-CEBL8,4437207? $$C<<@?9;#A44E**?=B#CEB97532<53979?=9 **'>4?==?;++15CA25/,,(&&%" #(*"!%*,$$#')*,--,,$#+&%% $$('!! &+-2-#[! !$&!$#""'  %#"! !!!! #' &#-2"!""!$"$(("*),(&/+'*!***-.,++,++,/-+,,++01-153/460(*+,/+.-/0+%$%),,,0.*)ˀƀ~̀ဃ ¶ƸɾʄŀȽԪփ􃅁͸ހ􃇊Ͻϼ¾¾Ȼźܿ܀Чʵúꀀù݀ºɿýżͿ±Āļ˹ûʼɸ̼ĹϵΫ˽óľ־øŽƀ􂂅﨨􊓚ޙꃎºĽ½}ȼDZ􂋎Ľôžǿµ¦ýᄜ̸΀˴·¿̥żˀɨٽκįȾ숛䉙󁀁Ѿ᳴ȺԿַ燂Ჵž剚ڽӵІIJ׻둴¿´³ĵˬٯ­Ͻ⫅ѵĿΫھƻƷîھ˸ɵǹβ´Įրƪȼè󀆆_񂃀ſۀ\[\^_d`[ZX_dc`bdfeccbbaa^[[_``b`^]_dgjigca\YVSRQSX_dcc`ceec256jfda`ad_ZWVYZ]_ZX[cijorupqsuuqkd^WWZYVSQMJMW^^VPLGFIKKIECABHMNLTWV_UNGDDHKKJIJMOUXYYTOOSW[ZYYZVSRSWXXVRRTSPPPQZYFFX2776:=7689733ffb\Z[\^a2237:966975445346665453a\['^da26777::65564367789;=<;:98997665665454544fccbabcb_`b``cdec^]^`f5766777899:9888754432c``_^]]ZWUTTVTUVXWUTU[]ZZ]WX[YW]^[_egc34fgbba\WUVSSU[_]\\[[^``]^\[\]`bcbabcbbba_`ffihefebceh74c^YY[bf322b`_^^]\[XXZ\\[Y[ZZ]ac_]\[]`_`dj6e]]\Y`453cb_bdf43dg55644=KQKAA=7i[X]]_^[XTRTTQQQNLGEKNMMLOMNSRWXUF=EDONGQRZ_\ZYX\^aa^]XUWY[\^]_`ZUVU[21[\3442_.04764898863/WW_2`XSWXPLMTYZUKIJMNKQT\^0\XWUNQQKHHOXZXTRQPOONKQQMKOQSTRSVUSPMMKKOQQOLLT\][[XQVSLHHDBDECFKLILLIGIOPOONKKHIFGMQOOMFD>>BEFHC?AKRSQNRXUOPVSVTOOPPNLKJMMMNRYYYZ[YQMLMNMKIIJLNMLNSSQNNSQNLDCKOIE@JOQTMKJE@HJMMKIMSRTVVVXXZ]``a`^_ZHCG?MUZXXYX\]]SHHHLKPYSTUVVRRSXYSRQRRMJJIGFDEHJLMSOHIIIMQYYUSUPPRUWTSOV^h:7d_\\`b][[SSWQLKPUVXVYWTQTUUSTRQPSONQNILSSQQTTNNOW[[]VTYTUQPSUUVSSTUUVVTRPQMKLMMLLKIC@?<>BFNLFOVX^]Y\]]VRSRPOLOQQPOPNOIEEHKHIMTXSRSSRTXRPPNLKMLLMMNJKPONQX\XZY[RNMRMJ]ZVKJNPRQTYVLKTTMPSSYX[UPLJJIIHGEGKMONLSPDISWSOPPHAELIFDAv@5?UTG<67>C89?FMPTUTN?:;KVZVVRJ?ENMKIDCENNRRTSUUQQRQPPSTX_ZSVWVSSVSUVXVSUUPRTW[S8;OXVUURNLJKMOSRRQQPQQONWWRRSSOOPNMMKJNROKEQYYXSJUQOJC@FGHHONHC>?=;<=7e38@CHFGIHKMLIFFD@=?@@?EHHLNJF>GNOMLKHPRWXURQWSPWWQOPWWZ_edgkkjjkifca`fe`bfeda]YY[cb\Z[[ZUNJT`^ZZ]]YZWUTSTVY[^`_^bghhje]^eiijorspnrswzzwtrkfjmo,mjggfcgmrrnhnobcnokeluuw~{xwwrponmnquutrpkd_^YTPOS^ejrjZknkpz}|{xyxsst|KRUPytw|}{xrttt|{vvxyxHNLOPPNKKKLONHGHHJLLKEHIIJKMNNPQPOPRSSTSSRRQPQQPPMJIF?m``V\jljy{yypnljlhfjqk`^_\Xcklkjfbda`gmkilipljoolnmgb\TOMLLNU[[YXWUWUSQJGPSbs{|zqkoquzzqqqid`YSSPOXb^RIBA@HQPRTW[\[Vs]X[q~zQJDFphfkWWQIMNEGJ|wy{IMNN_daSGIDB@;@CO_mxpdflliaYVPSRINX[UNPVW^gb`aWVJukQQS_fbbht{w{xmaXY^[XZ`ghdiovxwwy{{|{yywrqzy{urysnkighaZ[elaYZZXURPJPTKKTTOUVQSZ_bZVWU`gd[TNIIMNOMEACCGINTTTRRaffgba``]^b112579FRU\_^Z^[TJA>743527^hdehkspgkp\SSTeq``aLNWQNXcd`_YaaVVVURSQL}nx{mVjtmqptllmxs~xdjvFFGLRo{~pjtef_ZfsiDL>L\Svo;DO\fZU^YKDHcgTIJSQNTIFKUTLLNx|xrrzpnw{r^XWceor\MW\[`Yjklwhbjsvvyvvyv`nxsguT\YaMxnoqsMQ_[NN{JPG>7k?zIJMJzwEEGJIHGGPUGIIDHMzE}KLSMLyuLMMNWWHGHCBDGrblIGG{\`kr~}wjoqkicb[YLQZUW^Yiqb|u_[g|rnx}{v|CtebpD@khsnqxX_faWXTHhkTwc>JPBaGLJDDJRdMBFOZj`Yfe]TQEIRTNIKMIO]\Z^MVYiwk`oztbe`Yep[MQQU__VciseSNcgbmwmcUQMSQ]o{XCvHNM@CTKDIPXf~@po]R^YUFEHDk]jWZQPR_VVEqrjHzwpohqreku{p]eaV[edvscjkg\afYdhmsucbeahdV^UZ`jgiqz|cljmvca`_ZdofjiyCD~vsuvm^stgtCJKqEJ{hrph`[iejeor=:ETXOEzsd\]b[ORLeiU`VMY_RROOLMILRPUVTNHFGPNfga\YRK_\QSJ@JNMLJEFIDKNMQ\SGDKGIOPF@A=9k;FMQKA=@BGFBIKKIDB>?AB:=:c7HGPDIVQQJB=;58=27AEC9C?:79846632<943533665563a24`]a7=GIf`_9^^ddb_```bffa[]``afdfmjedisj^[]cda\^3336fcb`\SPUZ]__agkh\***++.+(('+.,,.00/../0//.+*,/.-.02321/,+*)))('(+.,...//-///--,/,*)(*,.0.-.25478:7789862/-*),+)%$$#$+,,(&%#!"$$$"! !#%&$&(()%" "$###"%&(**+)'()+.-+++('&&'6()*&%&'&&&$(*""(./-)(**+-',*+*)*+-+000-,-.-+,/.,-.0/--.-.v,*,-,--+)('')))((''')++**,))++*,-,.//,./,--*'&'%$$)-++*()+,,*+**,-/00.,,-./,,++.0.,,-**,/-)'''+,,+))*('')+*)*()*--+*)(*+++-0.*++(*,,+.//./$'"/**---+)'%&('&&&%#$%%#!$&%$%&$&(&()& !$&)+'(''*)*+*+*))***++,-+((&()++%&+-*')*$##%()'"""$%"&%('&%&&$()%$%).//,+*+++*(++)(+++,*+--+)'(&%')*)'%&'''))%,,(%&%%%&%&''&''%%&))'&&$&%%##&)(((#"!#$$! $&'&$&)&%&++,,(')))'&%&&&(*...00/*(((''&&&''))((+)'&'**()%"#"!!$$'(%"')**(&),+,.--./02323312/&&*$)-0//0/234.**(+()/+,)++..+++,,)'&%%$#%&&')--''&&**01...**+--*+)-0431/.12111++-)&'*--.,-+*(++,++)((+''*(%'++(')*&('*,,-'(*(+(')*))&()***)'()*'&&'("''&&#"!!#'%#),-/-+.--)(*))(&)**)(J&%#$'$$'*-,--**-.)'''&%&&''()''*)&(-/-/-/+))-'&30.&&)+,+-0.)).,)*+,0//*)('&%$&()))(-)"&*,)'**%"%)('&"#&##%%##%#$#')(*($#**""#%(($!#!##%&&%(('%#"%'&()()&##"""ACB5*4 !"!$##$%$%&'.0/,,/*9'%# $'(N*)(%&+-*)($!('%%#"#((**,,--*++*((+*-0-*+,,+*,++,-++,-***,.)%,++**'&&&(*+*))*)',,('()''((('&&(,+("+//.*$*)+)#!$#$%*)%" 1!#%$$&#%''%$$#! !" #%'')(&()++((,//020,+,,+,./..-/0121/131.,,-,).00/20120.-0212232./.%+./--.+,/1232133100-.///2...--.--./00023113541335645444::662-0.%//,&)#791/*4+/8!" (113)'**'%"(5-?71! %&%()'$ %)*(,/00/-+/-*..*)*/026867;;99;:8755;:79;;;9645487311221.+297436634310/013568668::;=955:;::>?><;?@9:?@?<@ECEHFDCCDA@?>??ACCAA?>:8::99520/2:@BGA3<@=@EHHILKIEFIGGFFFEEEBCDIPQSQ,130UMIIGCFIJMIFAACCJLKKKEBBBDEIPLHJLO)TWTW-ZWSLJQ-.//.--++., (())+-.-*+,./.01/01100/...--.-*)&#0)-)/9:>=?;:=A>767418==8631556;>:8<;C?=@A>@>;83*# ! "%()'&%%&&%$!"$0;?BHHF@=@ADHLHCDE@?;610.-296.(!'.,+,.2563]ZZM@<>QTIQQU3-OJGJ%(KC>65a]d`\0\IFWaXZ1017<9:?EGDFOTXa]YUWOIA72362038=;8:=BDBCCEHIKNPKIHIFGHE>>DCD??DHLPKEFC?<::=744;?9544321/*01*+40+22.047821219:9630**,+-*$#$$&'*-,-+,7764/,)(&&'!*-24311-'4:469;@=9=A4-//9@546(*2-,29954155/...,-,(JNE=CF?.:A<>@A;=>DL>EB37?DG$$%)-C8AC;7@57308@9%+!(2*'*4-$.5-,4/&"$25+%&,,*0'G&(./+,.YRRMIOPHFSULCCIOBBJNG965=?GH:.56474?WL=>F<9AIJFDUJ@BFG:@DA9BP184:+GC<<68KJ&%%LD358;CA;=I>99761.(,4./409>5D>004B=@%HD>16&*E845571/>KD;-B1>@<) '),82/994//%'-.)%')&)1/.2',/8=61;AF;35405>1*-/04303@H:0-;:6;?E:7,*(.-3>DK0#>&+-$"*$ #).4A!64-&/+(33:,2,-,410'AE9G)MD??=>=>?56887<"$EA>?=:1?!!*,'#A?76574+,'78+2+%,1()&'&&"#&$()'%$%%*$43.,+(!..%)""&%%%"!"$$%&-( $!!&(" 3!$%$!!###" !!" ""!-"$ (%%" !"%$%!#$)(*o))**++)*#",,,++//.,--++/10+*,-.33598545:5,*+/.+''.-.--'$(*+,,+/21*򀍁Ȁ ~Հ ƀ̀ ¶ƹրûǼüÿĺ􁂀򀁁ƀƾ탋넏¼ļ»ø»ǺùǹƶǀصĿϺͽþüÿ¹̀ſּîɿ˾ǽ˶¿Ǿ¸ǺúľŽ债ֳ˶ݽżºƴˀĸǸ½ɀ􃃄쀃ɿ嵉ҥ䎆½ɾ¾ºǽ܀Ϳ »ĻـĺʾɹʻŷļһҺȫĩǻ°¨ʽނԀ򁆉ۄ󁄁鉔퇏׻›Ҁϻý׿ךɻĞܹނͽ˶߳冭ˀ˺Ǻ̸ĢǵԲ兀«ݬȸĺ񱀑ʵý·ƺýҽ􆑀ξħ¾Ѿʀ¼ɵηŵ©θЋo񆍎ƾ^^\YZ^dab[V\^YZ_bcbbbedbc`ZY]__`^[[acefda`_`^]\^abb[VY[^ff35754798jcgd^ZZ\\]^^]cmieinrpqps;oje^WT]\^WVVOKMPXWWTMJLOOMGGFHEHQUXXYXXSOJILLIHJNRRTYXTPLJKS]XU[ZVVYYVORWTQQUUTRHGKBINTXZZ]`_\b56567:;83ccefce8;:62^_dd21232345P4c_^]^b2348<<52e442122234679;<=@@>???>=;::8654454323g56885effeab454566887766764456788766554542`_`a`\UTUUWYZ[YUTWZac`\WWUW^b\TQQV\`36cbcaceg_WZXVZc554ffhgg3a^\^^^_abbdg54f3ffg6:>=96ghiji53b`d4764433ee2b\XYXVTXcffedf4h43a]]_cd`]`b\Y\\`3432b_bffb55c__]f776=POGDn_dVXa^\X[]\YYTORTTTWRPLKPPOONLKKNNPU[TR,05,][QPS]eg]VWX_di]VX[a\[a^YQR/386.YX_12331477669977630WSSU]VUX]XVa751UPNMQOLP]113324_KLNSNQW[YVUUWRNKMRTPNNPNQNJORPNJMMMJKNJGCEQWUKJENYVODBBCBHNMJONMMKMMOLJLKHHIIEEIKJLKGKCBGKKLKILOTUTSPKJNQQOPQRQQTWQLRVRMHEFIPQPQNKHJLKJEGJKLLKPWURQSVROQOGFIGGLPPRTGFECADEFHKLNRRPPQSVXYY[YVVSZ\VSODNVMDMUZ[WVQQNMQSYXTTUQOPPNQQRQNNMHEDDFIJIJHGKRQIHHKSNOPNOPNMSVTPPNPVZ\YRQUVUQONMMSQLKLPURSSST\\W[\RPQNNSROPNGHQVURQVPQOSUZXRSLKOPTVVSVXYZY\_ZZXVLHMLPRNQSLD@BAAADONLRVW^bSPNKJGJNVWNLOPQORQQOQSQTOOSZ\UOLIHHLMLMLLKIB@DHLTSNOKINQKNMPLLKPVJYRFDDEJJKMSRICFLMLPSTSSI?j;A>;=>@?EHIJKPOHMSSRJFIDCEGHJF?69<=?DHEBFB;CGONSQPNLLIIIJMLMMPQOOLNOONOPSVTTSQQTRMLJBiVW[njg>BBEGHNNKJGHLRMQ\WDAJLKGICB?825;6@D5;DKPW\THFHAGRXaZSNHECIGGIMORPRUSSRWRMMPPPT[VTUYZYTTVVWQOPPTTSPSRTX]SNQTYZSTRLNNJHLPTVUWXTQTV_`WXWRNJLLMNJJLRVTKRTQNKJNPVQKH?DRUWUKF;=@=><88847AEBCDHGHLD>BD@=AA<58HA9ACDDGKIKNTURONPRUXVTSQSTUZYWUTZ_^^[VUVTTTURRRTVWUYYZ\[XU\a_^`de``][[^`_[XZ_bdccfinlcegffb^Z[ZX]][\v][Y[^_``b_^`_[[]i77896b_f89:oo;;94854dgUGT^]C5TUffach`Zh:=?8;5Hb]USMXaXNCMmG<6>>CADLLGHDIOSUVWVPQOLQWWY[[\YVQMTY\\^acecmdefcfjddja\[][[[Z^aa\Z\YOFGZa`\XYTSX[XTUWY[[WVX\cfcec\]bggiiknoqtvtrsqllkkmmmnoqqsrqpnllhafnmqqmhhruw{|yxwusnk?ntvsrqmf`^]]\Z]YTX\`gjjluxwx|~{|}~~~}|OS~|{{xv{~~y~~HIJKLNRNKKLNNNQNMRMKCFFFGPRMMONLNOOONOPQTPKKNOJ=87ef99wuszz|x{}ynhgfhgdecdgfejeggacgimpmktrrqrojida\ZVQNMQTUUTQQRPMLMQVZd}~x;w{vlmls{yqurmlld[TSSQSYXURPQT_babbWPRRKq{}xI{|QXZVSXWKGJGHKGHUUX[RPOQZktgZNC=@>?CFIIR_eh^RXRPRONKHIQVVRRPQWRLSWQQXSTRFwuklRTUVX\hkquu~uyuzs`[ahhabflhhpx~}}{zy~{HIIsuiknqspgd]_[Y[ZXUPNKLWTKNbXRZXX\`]YY[[Y\\SNICCDEJJIKPQSX_[OMJU^^][\_e`]`_`279@?><7=@Q8AF<?A@;998666427:4`c[_4655584a46a]3@C<0_eb```ddadbbbabeZ_afekhpomle`qpdWZee1Lb4244c]\ddSNRTZ]]`djdK++*)(*,++(')*)+../-..00..,)(*-.//-+.0110.,-...,-.10+&%(*./1,.-+(),./276259:8_51/,'&***&%&%$%&(&&%##%())$#"#""&(++*(%$"!#$"!"$')(**('%%%).,)-.+)+,+''*(&&'''&#!&"'''((')*+*,9-.-,+-,,/1,**++-.!-000/++c+,.--+'''(()++)(()-1.,+(''(-0-)(()+-,,-,,/1+&'%#%+--//0.+*,-,-.-.--///..-.//.,+-,-)'((%#%-/0.,.0,))*-,+(+-*)+*+,+-0/-,+,*.&&! 3,0().-*%&('&('#&('(*)('&('&&%%$$&&'),#%($#%*.0+(('*-1,()()((++*'&)*-%$%',((*,)'+(&%%'&"$)("%')'*/10.../+*(*,.+)*+*+*&(++*&(((''(&$!!$%# !!'/-*#$&&#&+*'*)''&(()'%%%$$&&$"%&&''$&!!$'&''%'(*((&##$$&'&(((''(,'#()(%"!"$()))'&%&&&'$%'&'('*-*((),*'))%"  !" "#""#$$&'()*,*)+,-.//0/,,*.0..,(,/)$)./0,,+,*+,,..,,-*())'()*)(((%##$$&$$'++&%&(+))+**))',.-)*)),/0-*)+,,+**()-*'&&),**+)(,.+/0*()''*)&'&#$),*))+'(&().*'*%#'(+,+))-..--.*)*,$#'&)*'*,'#!"! !"(&%)**./&''%%#$&*,'')**)*)*(***,(()-.,))''')*')('''# #$',+((&$')%('+((),.&.)!"$%**)*-,&$%)+*,-.-,&">$$" !!""$%&'(*)&(+**'&&$$%%&(&! "$%""&"!#'&*((&&%###"$#%#('%&#%&'*()(''(%"""4-23<74!!""$&%$$"#'*((/-# $%%"$ #"&)-.*" # $+-2.)&""!$##&)*,**,++*.,*))*),.***---**-,-*(**,++*,))+.)'')-.*-,''(&%(*,-,,-*)++/0++*(&$%&&'%&(+..(+++(&&()/,)(!"+,.,&$ "#!"!$"$(#"$" !  "%$#%'')+-.+)*+,.0.,***+-10/.,/3341-,-++*+-.,/0111.,1421244110./121/-0234323577134331/-.-,00/110/0122121132012621695,1#%+).,882482/7+(&$$)%$$)9~% "!#(($%#'*+-/0/,,*'+/11000--+(.2333567557899888:=:9=755646647985365/()5994330.2421125753235886874468999<<==?A@???=>>==>=>A@?=<<>;7:>>@B@<=CEFFDBECCC?>>=;999764775679>>?@CEDEGHHGHKIDFHGFEDIHLNOPRSTQPQU/2WQNJIHHHGILIFEHKKLNLMIDHJGLPQLEEJ()*,./16/UMJGGKMOT,+-.-+,*+.+)PPOJHJK'(((N)02///,,TV-.././/12.*$),>@?IKGGLNHDDFD=;;9;;:;:7899;5650159=??=BNNFEEEC?=:731)"!"$%%%$"#%%"!"$%'0@@?>CHD?ABGLKGJEABC<4...-0431-++-58:<;3..-.RENQNRT]YMPOQVPO,JIJMHLYZ0364365,(+)PPP**&(2246-+*.4@D<3,'#'$#$$&'/7;@<49688540-ZTU.265421470,2658@:97/OIBFTUV/24557?@A?=GSXWKDNLHCBGJ>55896689=;;>AGHIGDFFHJKJHIGGFJPLKIJIGCIO)*,MCD:>??@?<:453376420/-.30(/:2252358524454661/,(L%%'+*)),)+/4/(((.31/,*)*'&&%%*-031/1-*(2757569:@A;0367:7-12*,.++,;81423711.0..-*OICG@94:EH@8>06@FJ<3D=52"*/4.*,$:6$*)'%",-/RP-.0+((QFAEA9=DDBHLE>:E=7;@H<1557<@<52@8577:C97<@:;?@KW]_RIEDA>1:GJHG,;9:0JA>:9CNTQ,/3>4IJP00)?:'-!0#$L()()($ED>=E&&&(JEF%'&J@>'.&@@&+*,34G=E%##EB),)1,H')&('KJ'+01/.%H%%H%%$&(IFGHCHEE@6.@L&*#((5*8EKGE>488108:82@KB?=69$<:$/?7+.1(7:%%<()+(,F*1*&CE(/83* '43,*68-)(),78/11/.-$E$%((&%$!4?7+(3,/;603?QJ@D>::>8+)#,3/1#69G?'174:@=0360(+$5JFS-$#$()(1-*!*59<:3&,.(! *;3-.-)2'0.243BFCB@B:=;6@<9AKO4+=76-#D;:===346;@=<"*#EB>KKLWUC;51696)/961+/(/'%*,,*+,2+')*)"#',-)###"#"02..+.%(&"-%! '%""%$#"("!),$$$!!%$ %%! """ &&,)#"\&"! 1/$ $!%#, &!!$'&&#%*(')'')()%)G**(.0.-,,..,.--.-/1*,-2266;==<60893)*0-!+.+*-/'$&'+,*,.2-ހ̀Հـ̀  ƺ¿ܽʀǿƬ󌜭ƷʿǽÿɾϼǾ˴ĿüĽπظ˸ŹĿŻр̰˻ƾ¼žȶþ¿˳ϮԿÿŲ奱˿·ÿ¿ÿ½ЀѽƾĶ򒡢þ¿Āˁƭǿȸ߀ȵſùĀշ˾₏ꀌϭփĠ¼¿ǸԀ˲倎ƪÞڵ܀¼󅒑􃔚ۈÀŸˠ޹󒌍ڪʾےɸǯ񙱹;¿нíŝܪ֕ྡྷ៶ķɺ̸ȼµֹŮĶЪIJӹõĴ𕭡݋耇탓c`\XUY\^`ba`]YX]]__`begilfb`]]\]]ZY\]aca]]`_\Z[[`ffic]^]^_g67534677689hghfd``abgmqkpwxvsrplfefc]ZZZ_YXZYUNOY^_XMKMQWXTVXQ@=EKS\[%YWUTV\XUQOPQTRRRONLKKNSRQTUSOLJPQRUTRNdRQA;8BJKHIOSTPQYb59:=<=?;5444114565d[XZacbf654433357863defb`48873]Y[`fcc553344568:<>??==@@?@@?=<87865'4432e454532445668;<<;<;<<;:;<;:;::998885433ca`^]`][]`]\[ZYYZ_c`]ZTSRU_ebZWXYZ[^^^baa_aefhg258:96433gecda`__`_^]^bfj8mf5i69<<;<=977876i66779;;:8554cc4h``b`b5986434gefec22bdeb\ZXWYY[4h`_a^_be6:<7g]]]`beci>9cb^XY^a^XXZWTABTRPZa`c7bZYVQPQPPNQQMLMMPV^41-U_ZUPOT\aSHF>9=JW[WX]VVYXSY38><4XSQUXZa358;956777553VONLQ\TSTUYWYUQORVUQRTQR[0344675\QRSMORQMPTXTPMQTRUVROKJJIKMKLKKLLKILONPUZ`\WVNISUQLGGE@EQTSRTOPKJLOPKIJJIKJHFFIJIJLKHDDHKLKKNNQWWTPQSPNPNFRORSRQYWVX[`WMKJLONOONKLOOMFCHKJJJKMQSRQSTQNQWVVHINPOOQUKHHJIEACFJNMJPNNPQQSWZ^VLQSVWROUWSPMMQVXUJLIIKTQTXVUSROKNMIKNNJJHKKILOKKLKKIIIPUNLPNPUVRQNOPPW__UPMKPSQKKMSSONLKHKMIMMLNMJOTWTTZTJFLMLKJLQPONLMQVSRTXXVRUWWQQULINRXZYXZ_^]_]^YWUTOMSNMPLJF<9??:ADHQRSTWY\]TQPNMHFLPSLHQQNLNPMKRTVRHJOWYRLB;vr=EFFGDBA?=GNMECAAGFCFMOLIDINOMOOKJJH@mjgknt=>>B@AFGHHLW]TJDAAFHHHME:<;:?>BIE<=?EGJKJLKKJOOJFKJILMNTZWWUSSSRONRSQRQQWXTMHI@;jBFi=DFGJLNRVZXSMLLNLGOMECEMQRG;::6hdd_;>9:AHKONJGEDEFIGFIMKFFFJLHLWUTUXWUSPNMIJOPSXZVSSTYZWUZVSQRPNWRPPQRTVURRSPUUU[XUWWQNOUYXWYZWVW]a^Z[ZXOJKFEGEHHJSWUUSQLHEEIQPMJFKUTUXOD;CCEHFGLRTWTRQRSSTSQPTVUUSUUWYYYXXUSQRVVUUTQTWXSVUXYXWW\]]`adijlkd\Y][[Z\cijgch9<D>m;>AFG@AT^XTUJJJEcY[mEBCGHECFLLJJKMPPRSTSNRROPV^]YZ__[YUUX[_``bgd^`fifb_`cbc^ei`X[[ZQOUXW][TRPOELX]\[XVPRVY\[\ZZ[WWX]djijjfgiijgginqsvxzwvurqljkoruutuwwspnijhdYaqqrojdilkmqpqnnojiimlosssusnf`\ZZ[X[ZY`dkmoopsposzywv~~zvrry|}}wttsy{LOOPPRQUYVVSQOK}x|KJKMKJMNOKJMTWXTNLMJCAC>:999igbchhiihmmtry~|zyqnsuppmmokpplptsuv|ypmlnqmfca_]XQNNSSSTUSOFLOSUZZ\fvyt[Ni~urkcdpz|xngedc_TPVZ`]]da``db]dj[SX[WY[WQMW\XTQTRLRXSGJzKTXWX[RORSLKLNLOWNNTRGGK^f_ULEA@DBxt@F@KIDBENPGIGGKLKIGOPNKH{Q~gXbt{MWXZ[]b_^hlryy~{towskgYVrjtsosqu}}tpsuswwyz~}y}~}{vs{|u~|~wrjnphhfffba`b`[YVNLLHJQIOXQRUTT[aa__ZSSUVJFC@~BFKMIGJOOPVZTRSSTW\_]\_`^^0/48:=GTWZXWSS[WEI<8963344B_fjgbhfmsj_WU\]dYS_\PUSPJUrb`bYVZVVUWQNLI{zyedwqoh`szum|FKKJIKLII|uqcefUX]`cekn|EEJQRLvgh;IfkYG>A9s?ACW^MPPLNOMLLPt~}|vs~yqthTUpXS[GJSS^fb]UVglk`_agnfigcnou}~yonlWr{PVX[tyttyNPQVQRWZSxAMICqtTKPQPJwo}GIF{x{OJzGL}NZ\\f_unJSH{?COHJUMFIGKTLFJHMRMGHJGDEGGGHLD~wkkinIbZ[r{qlqomlbb`Y[_`ZW`^V[b[Z^\XUYfmjpt~buEN]Nvo}pzHwhRMY~`Y_]NUIMWVLK@@GMAyNMEAYibLj@be_^msmQHQan}t_SawCyeZfmie_ba[WKqXffaQ[n^lti[XWWMDra~P]\TSHE]ouj^]ai]aaegekgXrcSUHKgcGFJTl\`]pyW^f[[QDSh|xLJLGEHZfmiVELfkfb`lY=TQKSTF@APQTUUUMFG[]RFVpmqwqh`gpjv|i]badUhjW[hfjhcd`aa_bf^YWWUSR[_bxkeknqttwlyu`\a\Zabituy~~udlx|mprpyqnoFuE}vwq~peleYEIn{sIOIHHPPwobc\W^ZRICPWQQVZg\IQTZRNJKLNJGB=BETYWVS\[XMIT[\MONFHKPOQPJIFKTOGVYPKDIG=DHB@CKHEHB3>;:c@JA>BHHJJC==688gWe=PIFKGFGNVPU6451PZ42aWU\2433_\^39956:<8:>FHC@=97534327987`^3688567dDj:5\4=;664geb`aab_]Z[a^\_]\]bbcdbehgc[Ydl`VY\da\bf233e^Y^b_UORW\`^ad6.,*)'(()++,,+)*,+,+,-/001.+,++,,-,+,,-/-,,//-+*+,1021,+R/0-.01/01147;99=>=;:86212/**+*,(()**%$())&! "&),+-0-! #%*+(&%%&*)'%$%%&%f&'))()*)'%#%&'()'%%%&'(!$&&$$%')&'),/+*+./....-**,*+/1/-  +- +-,,**-+)*,++*(/,//-)&'')-0/*)+++*+,,.-,+,-./---,-,,++,-../1./0++0+**()--.,,,+,+))''('(/**+**,..*,,,-.+,+,+)+..-)('$!%%$*/-.0,-+('&&%%()&w''('%$',0("!$(*('*(&)'&)#$$')+-"!! %,'&&&('(&#"%**''(&%)'')+(*,,)*,/-**-/,.0,*(''&'(')('")+((())&$'%#*+('%&&"%,-,+,)*'%&((&$F%&%$#%&%&'&$##%'&%&(()++('')'$$% *''(('*'&'(,(#$$%'&'('&')))$"%&$#%&&)*V)'(-,-$"##! !# "&''$!#%&)*&))()**+--0.(*+,-++/0,*(*-//-&(''(/,,/.-,+)&((&&()((')+*,-(&'%)-)'*)),,,+)*++/54-*('++)''(**))((%('%('')''*,-*)-*$#'&&%$&(''&''),))*,,+)***'')%$'),/.-.1000-,**()'')'')'&$! !!#'())*+,,('(('#"%(*&$**(&((&%)*+)#%'+,*'#!A@#%%&&$$#!  %)*'#(*'.-*(.0( !"'**&$!$)'%&*,)(&(,,+++)(('%A>;<<=!!!#""%%&%'-0*&$""%&%&+# "%# ##$$#%$%%('$!#""%&&)+*+)v(&%')'(''**%!!6!#6"##%&&(*,*)'&&('$)($"#&)'#3132!!%&'&%#! "#%$$%'&$##'(%&.,++-,,++)(''**,//,+++-/-+.,+***'-)r*+,+*)*(+++0/--,*(),...//-,,/0/---,&$% "!%%',.,--,)&%%'-,*(&'-,+.*$  $$$!% !$#"#" !21!$#$&%%(+-.,Q-,,*))+---,---./000-++*,,+,,+./.+--0/.--123335789:61.1///057841286442/+-/++./14753222342/.2624;:2-&(.''"#-%/-3<;!$7 #!#)$"#1--5"!#%&$#$('&&&')),,.-+-,++163003310-.1345459846;=;8567784:=82443--1226600/.(+476530-.0354433421358::;;889:;:9:;=>@BCA@BAA><<=>ABABC@===<<<917AAB@<9?@??>>@===?>?CDCDB@<:98676886;=AAA@ADBACHFFEIMLOPLPUTUXSTWXURONKLNRSTMJHEABGJPSOMONHHDAB@EQPNMHEBKMHINOPRQLPOOS+-,0/0.041200-*OONNHEHLJJHHJLRST,++-,,///,R+.2442-+(%576698699;:?AILIGHC@BB=<<=>;>>:=AACCIMKKHDCADGC<852.(" !$#"#&(&"$&')(*3?B<*$;JED?;;4)&*06548655985:=4154236510:<84264ML/57/')GEM-144550045---SUTXY,),3.,1.&%(7:4.)%#$'$<:$'$,)'&)2^\7i]`[.0.-00WS.,,1221,QLSd4\WM>5>DG.54447:66>=BMZ^UNIJOQJA>D@==0/A5=<999:9888:7543/-+&).&,/-0332687773..20)(&%I%(*+(')+*+.0,++**,-.+(('&% *-/--**.+38984:9=B=6106592-43+0/-)0C748303///1,*+(CHEC77JL?E=<85@F?=9BDCC$('''()()D@=468,-0147:;C&%',*&B:20!7:.$!:)0&('%'+,-R,/N>EKEELDBCKNHAKJDP?13E1.5),22:@>;10=AA9:;?D=?=9ABGKWVLJJF???1ADIPSQ.335T>C?>AHLN./030RV/12,C:&$.4-KIQ+-,+'E<8@&&$ECA@BK,(D@F'+LFI+254:6?9',&B"",((1*#&%'/)%((+/,'&'&$%&(''($EIGACHE@::7FJ3=E&+3)=:ENOG:?&;5'*0B0-31),().2+)$!&,$B+(&$1:8*6 0/+*585(%*38CE?4+2="F@5/7;961653/+=0;:7*0;/6<800./)%A7C+1/)*%!1<>6.213/2348;;GNH9/=2*,$(73$&(.=LE452;F@,2922.&.@DD@47@A8>@:A=:;D&;$B@A=EMJLM<594.$&=@9$($$%*+?<671,11-'!*-((*-50")+-('#$%&##!#$+.,*(--+$"'-/$&&!"#&%'%"#!"(% **%#"!"! &"!#$#,)"&%" !" % "$! .#! " 2*1%!!"& $*('()'(+++0(//-,.--,,*+.,-.+,*,///112542-,15/))(-+(-/0-),0/)%'),.+-.􀒁Ѐπ +āÀ + Ǽ݀»󃆅퀉􀑗Հɼ¿ԙꅜ삎Ϳ½ĻʹüľȽ¹¹ŷƹɼþŻŷπȱǾźǾŽϯµƾƼƾùĸֹԼƿſՀ퐗­þɀ򀅉󀛨Ǭǿľ¾󅊋ǵ¿ƻϰɹȻ႓鄖¹œй⇉Ŀƿƽᄠšڲ˾ŧӀɾ獙聋ɀ忠ü퀏³ꕫЦʸÀԥخߓǸݲéŦݵܾЧ˶շǵ˾ĶҼռ»􀀇Ю©Ĵƻչſխ낆¾눈킌ư􁂁24]VSTW[\\`hi\UW\_]]_cghhge`\ZXY\acfd^[\][ZWSTUU\fhd_[VTY[\ahk78:<==>;pmhefiot|yrnswzzvoielmijkd\STV[]UPRW`c[TQQRUTWZRD>BGNTX[YUV^dc_\YXUTSROLNQPMMRTSROJJJ&DDCHNQOMLHCEID<=>===?$=>=<:99::99989:7567976689:;<=<?@?@?<8797639<:8767655786e3faa`a^YWUV[\TQRUYZYUSTVY[[^cfgffj5gh4457766676432eb_]^`ceda^\]ee\]b3;>978:=?:667666>=<:86654bf57;::=<;8765334643dc_`c_]]\Z_a25d\[]\]`f9<:8hba^[YXYXZXSRQW\\[WTZ\``7Q6]X\adeedehb]WURUQRPJIIIKMNOKOUTVWRPOPNIDG?>DGSJcjwiH\\\2:;871\WORQS[26:<:67864431XWTUZ1WSSVaSSTUVWXWVTURP[8555655\PMKORRSY`]WWWSRPUZXRMJHJLKHJNLLMMJEHU\_10`_^VLPTPHFGHHGMOMJLNKNNKLNMJJMNLKJGGKKKIJJIIHIJJIGHLPRSUQPQMIJFC?KKNPNJLQXXVZWSUQQSSVVRNPPNKHHMNMLMMLOQPOOQPOPSTSMOMLKNQQKIIKLICDGKOQNNQOKOQTYYZ]^]VQMLLQRPPOQSVZZ[SJHLYXYZVPMJHGHFEHJIEDBGMQPMKLKINXSQVSRSOKLPRRRZ_XPLILUSMLLKKOJHKQQMJQTSPKIJNQTWVUQGDJKILMNSUUTRQRVUVU[`^XUROOSQMNSUU[[Z`b[[^^\[YUUXUQLGMKEBC??AEGHKPSVU[]]]Z[WZTNNORRNKVVMIHLOORTTTLKHPTUVPJGFHGHID>:9;=BGMQMH9:AHPLEDIWUF=crMOMNFCABDDHOUVSLIGHMOKEFGEB>{AAA><:>>=>@BCGMRUAADDJKJHLD7<<>A?@DIKLB>CKJDHKHNOPSOMOLPSWWX[^][XVQOKIIMQRSWQJQZYSo7Nn=FJHCLSXZ]^]a[MED=?EA;;;>>=>=;8<9VY`;AB;AFHHGKMHGFCB9;:;?GGFMSGDPROQQONQPJIKLRRRTTVVOPUY[YVRQSTRMSQOQSWUWUTSTZ[ZVV\_XVRRSWYVYZZ[\\`chb^baWWVQMOLGCHNNNOJJMIHGHKMMPQGMJENN@Tc@B@:5/6324:;?FNOJDDCA@9=?AA@>9ik\g=CLMHHLNQXWVWVURRPPPTUUTRSTWXYZ\[WVUXZ[WTSVWUWWXTTWXVWZYZajlkkiffb[ZZ^_^ejjhcf8mnmkigeaZZ_`XVWUYUTVZhhadfceheb]e7687899igkim:;18542233dh29`IVKJMggj7FNKLHEINICHR[[T\XMDVgID=@AFGIJOPNJIINQSRLQSQRV]][]`dc_YVUUX\]\dheabaccc_bc^ZZbeaZ]]YRSUOMUWWQSMDKVW\]ZXZ]\ZTTWX]a[Xadipsvwvtsuwvqtvu|{=???zvnqxttx{xsy}{ytkhh\ice}|tpjebfc`glqonolikmmnpuwtnkhdba`a]YXXdqupnifffmr{|zxx~}I|x|{spnknu{}xywqorusxzxusquyxPMz|xuw}HJNKGPUVPLLQZYQJ}{|yw}yx{NQPTVTRLGHLNRTSLEC<<>6^88^7lZdekjgjmjo}||}pmsssrmbelgb`jqwvnqqldacdeeaZU_fc\ZOMPTSSW_dQ^GPW]VPT_imX@_{tif]Zblh_\cfgli\LGKO_kf^XY`decb\^ibW\[YY]^elj][_ZVNNSUPNSMMQTZepfWQRRNP\LPSUSRS]aXMENeVHFD?rwqigAVPIQX[hPVUSRSNLKNNSOKYSVTRVsgc\]erNY^dbe_Zeeqws{wuty{wsnkvNmsu}~{~|xwvvy{}|yvyy}|z|urkf_\b`\[\clrul[^_\USRVY]]]ZWRUPMD|BQZPLMQOUXUWWOSXUOMSPIMOLMKLKGDGKOPPSYRTWRTW]`]_a211346;@KTXUTRU[eeTMPS\THFFF}|pck|rpq|x{i`}v\nvaOWccb^`\bosldhlqk[^_oss|sxzrrtogjjahqzNUY[P{}swzQROW^XQUOA=CKBq?SV]WTSFyuH~|lbzIQLFIHRY_a_k^mVTG~AJOIUaQKJGLSPKJFIIKJECFGKMujmrq~~hP^iqrliega^ZTX[_VRXST[\VY\[ZX[mrkkposfzzESkUzp|pla?X|b]VYO`J\YPBROZSzzpHTIMYXRKs=X^^dfgykNKZhype\Zdp|mgabdhfd_[WYL_PX^[TasnvvYOMY^LBrmLOYWVQC>Fbnl{gdv]bdf]UmrVdaQUYTg[MIKIhifz`^pqvbZRS_STXYg_IRQMHUbcoxi[hohdb[dUHPQVHQPK;UWPSPYVRJI\WOXjei~nf]^qin~ndmxjS]^V]dZei_bdgnhnnhaYSIIPV]clog^o~mat{uytfX`b__]oeewC~lfygDEIub`r~}qxw}llpqnwjZZd~DDPMDCGJEylane[_\_Q?PQMOOU_XLHQPTTNHLPMJFABDKUYRQU\ZRMIW_LHNGJIRTTPIKJINJNa`\ZDLMA?>E=3?LNC;=LC@<6J;k;GDADJMMHB;8]`:=_Zd>JNNMKLT]Y]5233R063ZSSWc333a\[b7=37;<<;@LSGCB<85fc336:M944896577??:748:9763ffddbba^\\^\\[\^Y\b_]^[ZZ[XYZZ]^\Y[_YXa333de`[]c`YUUV]^]_J+'%%')**,01+(),-,,-.00.-,,-.,+***,../0-,./.+)''((*.0--,)&)*).253205:=CA=89=?@=84367101/*&&),.*(&%(+)%$$'*++-*!!%(A%&+/-++**('()&$%'('&()*('$#$!! !$''&%# "! $(+)((''()++/31/,++,-1.-,+*+,1  -,+-+,*'_)(%$&'++)'&()***,/11/01///.,**,-/.-+*)-/*++*-++*+,*+,*)++-*)*,0./,*(((&('$%&*-,*'%(&%(''+---../1/-*(%&%''#$$$##"" #$')&%$%%"  !&$27;5#*+,%$"%#$*$%%(+&#"&.%%$&())*)()'$((%%%(+,-163..0,,*.1/,)('')(%')(())'$&-.,&%&%"%'$!"%&&&*+)'')'')'''%$%''&&&%$%&'&'&%%%&&%%$#%()()(((&$$!!%%'(z&$$$'''(&#%%&((*+*())('%$''&%&''(**)))*)(*+*'*'#! !!!$((&"$'(*,+)+*&)+,//.000+)())-+**)+,-/00+&&)30//-)('%$$$#%()'%$&*+*('(&&)0-+.,++)((*+++13.)(&(.,((('&(%%'+,)',-,*&&(*++,+,*$$&%%&'')***(((+++*-10-,)(()(&(+++00.11.//.,--*,+('%"%$#"$"!!"""$&()),,++*(+(-(&'&)('(-+'%%&((**++(&#)+,0-*)(('))&"!$'*(' "',($#%-,& 7;)*'&!$&%&%%*.0.*('*,,)%&&&%#E#""" !! !"$#$&)+ "$$'('%($  "%&'""%"!""('()&%%$'),**,-,,+)''$$$%''')$"''#/&7"%$!&*+-..-/.(%$ $ ./1"! #$#"%'#"" !$$$),%!(*)*)((**&&((,-,,,.-)),./-+**+,,)+)'(),,--,+,10/--15-+**+,.-/10/0/0141.10***'$&%#!$)(),()+('&&(**,,%((#))"*1 "! %&$!##"" 47.2#**'&)*+00./.-,+)))+,-,+++--.02/,-,...+**-0.../,,-.,-02259:988764../33158641278854331..20++-,0../19813434543065587:,,($"%)898%)&'$"$&"!&*("('#':("!"%%%&''%&*+)''&),.,),.--0664345540/0//1227:9787:;:6765349:83564013.,255/0-',4467413553/.0167239:=BC"$##EC>?B?@BCB@CEEEB><;<7:KGC@<99;97;=@??@>==>??CFFD@?=<<;::9665;629AGFBCB?;:>?@@<627;82/%!!$#$+37,5$&*.&"&0:>0"9GD?=88?DA:9=>?@:0# %5>:30169:9869B;041/167>DC;9:541./0-,/,.125;A;422304;-RUSX1321/0892+$-:/''$ 8:88;(2+*0<:JG%'*)%)*',.)%FG=:62//.//./12:I)&)2-*@60)6=,-.6!%**.)#%(*IG@:@FIKJ;;:;:<8:DGA;?CD>368BECKCEFBCD@;<<6;?CT-IJ266/CGD=?@IU]VX00-263-/)#0-EGS370-,#=A9:;<>3DF&,>0A8BLBGMBKD71+G31.0)7&35+$.(/-CA<+4&(43+&9**+/12>6)(17@<5107:DA;724577641.1,32442,7D:=A/)(/1'#=<,*/,++#!$4:8?13@,1484.;PHD<)61&+/)63'%(&;A4G80::A41.,6/13393'+)'$*449>6-39321,/&!)**$&!*+),).-,''22-3:75D;657B=A>6/47453=65>#HC;3CB5F%%)=22F><:BI::@9-07F#"('"$')%A:4<5.004+)(()'-2,'$*'))&%&('%$"!"$),((*.,'&#+.# %"##(((&!###%#'.-**#$"&!!'! $!#"#'%$$  $%'" 2!#$# ,//).5"$"! !$)$# ('&&*+)') $-,L//.../0-,,**+++-)+.,,/,,..+,++-.-*+-**..10--0.+)))--,+񀒁ՁҀ΀Ӏ׀Ā  DZ׀ÿ󀅎׀ºȽʰ狰荕ꈐ܀탆ǿʹ·ú½ŷʹɿôͿž¹ȀľĿȸϻó¾ļ½Ƹò올οƿú܀ɀ󀄋񖩬Ðÿ½Ŀļżüÿ¾ë˿˶úʿل􅉑򈊀遄ϹǽȭƶɼìñބƵ¿͊ʾׅծŶ׼͸®˺ꀗ򌥐󀅆Ԁ߼ɿЊϠ̴򂅔贮¿̺̺ȿ􋖙ù˼ϽʒüƮĺǓҮũ̵»պˤꁆǺǹҸ²½􅚈³]35a\ZZUWXZaeeb][ZWY[]dh65jge_WSVX\`d`_^][XYXXWSRZ^^\[XWXVQW[aefm9;>?:onmqsturu|}z}tkkkhca`ZSQPTXZ\WRV[^[XYX[ZXYVJBBGSWUYZXY_][Z^_^XTSQSSQUXVSSXXWSM=KKJMOMLNPSUOHFHLKHFJPPPOMNPTW]d435657;:8778989=?=;8kigfdd37:6589986566769<<:nhecbcd35:9543fe33479;;<>?>=?@=?@@?>==?@?;9<@?=<;9;:88:<<>?AAA@@@A?@A??=;??===<=;<=<=?BA??=9644hbaa_^\\WTSUWZ][VVVTSVXZ\_bbbegj776455225677633i5fcbch5gb`c`_]Z]e:E@88989985579;:>B@>::<;;98:<;9998;;6455786469:83a_``\Z\]b554e^XYYXY\bgigd_\^^ZWTS&RSSSX_fg`^YNU`24/:>1^]^adc^`a5lZMOTSNLJLMNOPPV^dcXNJIJPLSRQNMQSM8hrCORf=:1/.ZYXSONQW^47989;:9876310SS25/YQMZONSTPQRSUWQLQ0502aXSTOPOOPRSSWYTQTUTSTXTOMMLMOPIGMMKJLMH>KY*^11/\ZTLIMQRPFDGDBFHKJOPLJKKKNNOLJIKKIHJKKMNONKJJKIHKRRQPPRSRNKFDCIOQOJHIKMMNPQNTVYUSVVRLJHJKJIQVSRSPMNONMMNNLMMNMLMJJKOSSOHHLJKGFFFMUXSRQKNTWXYXZ[YTQOONQRYXUTSSUXWOIJOXUUWPMLJGGHHFFFIIEDDEHJJOQPLIJKOT[WWTPSKHJMQPPMSXRQNJMTTNNKJKH@FLLLHHNOQOIKHJPLKNNOOPNMKMSWUUVWRRUWWVY]c^VQNMNSVURUWVYZUVZVVZ]``[TRPPSPIEHGC@?CIIBBCFKNOOJIC=BA?AGLOOKNRONIAWRQI@@FDJWYUSIA<==:68:>GNRUUPRSOKJIGHHIDABBAFGHNOMNRMIOQOQNRQQQSSW[Z\[\aa`ZQRXPNNQUQKLFBFFH<f559==<=:<@;d_X?FDABEHLKMKFHGHD8>8>=??CHKCHMLPRRROVXPKIHIKMORUTQOPRUSPNQTWXWXUUXZSOPWYWXZXWWYlfVUTWY[]Z__Y]_[_hk`[[XXVUXWTRQIMKD?E?CDCGGGHMPPTMPMEGJHC=?CA<>?==<77:557AHIB;>@<>CEBB?<>B@=8:EFHHPRRUTSSSQPQPPPRRVWTTUYZZ^b]XXTX^`\XUVYSSXZWRTXZ[VVX\bddefb^\][^ca\algcbcdbdhihc\YVYab_a`[XUUU[hf__db_adfdgjj765kjikji8:;874baad_TX`31\F[Mh9ebCMLNNGLMFCKUYa`fgbS=YcODHFFIMLHHLJLIFEFJMRQKFJX\YRRTUY]]YWOOPRUW[[Y^lh]Z^ec\be[[]^\`b`]]^[YXQORVURQNKT[Z_b^]\XYYWY[\_]_dfcfkqsyztporuwwtvxw=?{uoiloosyyzyyxzwrllqtkfx~wvpgchifeinsutqlhgkkmosoifggjlhhffgeefhimjfbfmuxz|zpqqrtuuwupuzyttssvwsorssokqsuxyy|}zpiipsqrutwytqkhaer}MNLIHGFEFKJKMKIKLLus{|{|{zxurqrrs{KNMIJMCk[[1daW\efajjbhkhf_^`]]^^]_ckoplmx}skopg`ajlkigb]^a^\YVQONXcmqjkkc\\`c`TTY[e`TJKKQZfjpvzm\Wcfike^\_ekpmdbUMXfppmqyqwwqkkl_[adh`\gllvvsokcZbqcPJGE|rIV^ggb[RRVTQUO{JSVYX]^\UWVUORRHISSNHvuINUVIGJQNMNPSXYYOOPKMLNTQLQMKMPU~KQRVUV_`\eg^dq|vs}thhkhcfq{{}|ncytssuywpqtos{zuvwlehgggimkdYSQSSUV]`fjaVWVSMKLQZ]Y]ZVTRRRJMSQSSMKRONMOROMRQLMRUOJGFIMPMKLMNNKHJMLNT[XWY\_aaa22336=KRWVUTQVbcWVVG9RSW[/127Pbjpl_[Z_][YU^aej^X\XTRUVVfoeZVP\fYYPJGJRSxuEQN|xzFGJIQQHLSPOJxxshgnaWY[\XXYbfkFEHWXPqvQfeU@nf]SL7A/+:INU_VPE{ohznxJygxy{c\tvuutmsh|~h^]faa\X_bptnhjvsc[fpoprwl|qmmfbdgnpvuM}HVO}zrwRSPNW[UTXQA?ADBFRUe[TVK~H|ssLRMKIMT]ism[WK}GYMDGKJFGXfUGGDR`\MHHJ}CEHKIIFD}|voqpqye^imz~kdfda\XWTZQJX\]^[VTWXW]Sfklnvm}suuN\Q{wvw}ZSzyllQ]obZUMHNQYNNQ]bJkyDAHPUQNPB9ER\^]\[kw\Ybkpcb`]^glhY_rqhZ[dc\XWLCINYYSZipfbKFMRWL@@xFNMN[PCNEE\t|unrke`^PO`vwsgZ[UQAMiaYNRHPL\`HTsodhbKM`XKUedZ`\SU\SY`djgcaghhd\[YVNLUHUWQ6Lc`UQYSZaJ\^d_`amqfcV^or}~zodjeJJYPPRVW[gmlpkkfjwmc\KPT\_U\g_\yi]egplSVabfgjjz?wHv{uhitCHo`cq}sttz|yp~uqgt{mnzBFLJCFBBBB38FNE>AC?=>88:=DOMI@;`K_o>F:]_;IKJKPVbb`11100]43XORYb4223a\Z1;e;::<<7=HPF@@?:5ec446=?:8:967:8668CE?=6e29;6533hgcbdeab_\]]^b^Z_a^\]\_a^X[[XX[\Z[YUX_dce3fe__[\_\XXZZY+-+**&())--/.-,+)*++.00./.*(((*,///0/-*))*)('(+,,*))++(+,.22623479:;:<@CBABCEIH<6652/-,*(&%',-.,''())'*+--*+(" '*'((((),+**-.-*((''(')+,*(,-,*'$%#$&&%&'()'"##"$'$%&'((*.000/.-&3/.//.---%.+*+*++,)(&'*+--++*)'))*,./0/0/11/-,,//-,-++*)+- +*,,))**-+)(6)+,---.+*++)(''&&&%'+/0-+("$()**+..++,4)$#$"#$"#4%$$$#',0/(#""#'!#%&$$&() ;69945775787678543/./21.-,*054896532331223557:;79;>@DE?=<>@@@??AA""B@>;<==@DCCCBCDCA=>AC=:GIEDA<:>=<:<>BBB@=<;>??@DB=<<=?A==<;:?FGGHKG?@ACCCDFGCEJIEEDBDFDBDEDB>BEHIHGJJIC=<@A@ACBEFA>:845<:>CHB>@?:44;88;:86400.5:?B<;92-.254-.3584,"!!$,9>BEF?53<<>?<879=AC?96,%/@@76;=?76>BAHIGDA:5JKH><>@CEB>@A>@FFCDC<9;U@JE83;BACDE?I>>@::;:>?BAMY,TE)3-OCIIB%3+$%()''2=?AB41@=L57%1=31-)&.,1),D-27*9@$#(.2-*+%!&),.-+7?//46=345327;902;8400541.0*"'*23.29;56(%'+/("$?&)('/+ '$'/8=84:7422+)3@>:B2./*' &80-),&.-00(-><788)(72*/88.43))/*-2576203443.,++(&- &$!'72.,/,/4'1698549H?6825A?E@A>:5140" -),/013:?=@><97F@;53+./16,/830>K8/77;DJ:,,65999:B!76?$':15==@DD?E;=541///*&&%('!++((%*&))%%'(+(('!!%"&"&+)*((&()#!" #%$&),##!$ +,,(&#! "" #"%$)( $!%!!"&  %%"0$37",-"" "$*'$#($%&)+'&!.,("-010/12/0,*+,+.,*,-,-.-*++)),,++*(*-/-.01//+,-,*)򀔁ρ +  ±cŽǿ􁋏ۀꂍ򅊐郖ǀʾƼͷǬȾʿȾʼ¾þƻƾĺ˹¿ö»˿Ŋ·ĹƺûЀƼ怜õ´􆏞ý̿ހʱѼˮǼՀǹɿ÷¿€ƿף鋟»кúĿüƾȽӀɾǸϸ»ų¶ľɴ·䄎ҿ酅鉑º½¼Ƶȳۀɵø􁃅ĵ΂ꀈпĽۊބ׺;ٰĺɠз»߁󄊊껰ہ脛ܸو̿ǿںӶ٦ɢͅڻ£ƚֶƾ̼Ā̺毬ݿ͕̺ٯŮֹⷤЀҸʺص枧҄񂑡򆗢Ÿ[_b_bccZUVX[Z\bea[WZai8::97lid]ZXVVX^c``]ZWTVZYWVRTWYXX[ckjjbcffgcgr=<7jq>@A}wwtx|Hwppssm_\YWTW[\\ZXVQH?>=;=AEC?@A@>=;9;;9<;9:;9:::=?AA?@BB?>><>A?><968?B>=?==ADA<>?=854ecce^ZVX]cda[ZWZ[[Z[Y[__\]^agljgdbc36544eddegf4hcefb`^acfb]]4;>?=?<55983g46898:<;9;==<=;;>@><:9;<8687784h68:8985gaZZ]c7734ga^]]Z\\\]]\_b]_]ZXYXWUUYc54\^ai31235421b[[de`\_6gae^F][ZYWNNOPPOQQPPOMQUSIJNRTUTa_XQRSVVPD9@KPU\Z[\YVY[[`cgbWQQQVPKJHEIHJNOSQNMQVTROQQLCAGLSRIAHJDDGKIOTRMHKOFpb5DJOOPMSTWVNEH>\XSHKNQURNHAGIDDGGFKMQXTNG>p;FMM>ei:GOEFEFFJQTYZ[YSPTPLSRV\X[\[\eg_QUWTTQRSF?KK::I@HMNMJDEL:6ILNQPQQPUWVNIIIDC:58C<;=@>=2Ya6?CBDGFJNOHECEGGIG@97<<@B:>GOMLNOPRN]_WKBHGCEKOQSSRSSVZXSSQMOSZYZYVNMUYYRTW]UYa_^\XWZ^c`\`^\]\ZaegY\v[YXVUXVTWWSRND6FB9<@GFILOSQPRRNHADJHCACB>@>=@@>o`h=zrigkljkotuvwtuxrsquytlqyy{ymcdffjkoquuundgmnjghfhhkryzqonnnjeaahmpptyyvttxuoqs|vnijeekprvxnjqw~~rha`gmpsppwxplhiornnjjs{~vr~~srOHLNQKIy|~utwow{yxwurt|vrsnmpu{~upx}L3;AA::Jfrxsqega^`^YVLJRTX[]]\XWWVUY`gd]Zadji`^]`b^\[XTNHMRZ\_b``cadebWJADKOW]VQPQS`kmf_`[arrfkmkdcejptwzy{qsrtpv}}zsqr{ze[\c`bnt}xzzsmggkp_MFzi^lKPZdZOV]e^PGRRIMRV\VW`ggik`\ZPROL[\L}mRQTQPssM]ZQMPTLUXZUIFIILIJSW[`[TTPIIOSVX\XUaikcilmnw}s|h^otkkvxOuf]hu||~z|}y~yupe[NPSVY]bmhYRUSU[djlmf__bebTQX_cmh`\RWPMOLQQHISNLOJKNMMSYVNJMIEHIFGIIKOROKJFDEDAJPSYY[[^22112449=LZYWX\Z__XRRYPB>5c124317Tgnog`]^`_\WWihjkZW\SLORMYeTLOKRYZXKMPMSOwkIPTMwEIKNNIDMPIwxvsg^eaYRX[ZRQWgqGCDFQ^^M|B]dYIug^\R7B1II:OPXWOEloifs[n|v||khkhrtdmh|oj|w\bnmkWmxg\_kkliccdic][mpjgehp|hhiY__Zmzzy}wzOVPMRWUROLIzJMPNMYV}W_XUYR|GQSJJSTUNSajneXTKEV[JHKJLP]TGGJY_YLHCHIJMGAA~}wwut}HGe^_nyJQKMlikj``[VUTNR]bUTPLTPWXWRdehounx}wqwCSU~otTm}{t]^h]QVMLSRRQIA?bZtnGHDE7FQTMjFY\[WSV`ns^bhra][W\ml`^fut_Y`aXVTKTVQJHY\t|aPsrqy|~zqp^YXXWSQPJ?CGJEEMMZ]RMORTSVOGJPHRHJJIOOVLHHGLOLHJIPTZWRHAFBLV`[QQNDB?@CDA@AC=7A>6BRcNEBGB?DICADcYDFCAH>:?BHDA4BNKD<\?\=HTIaZ27>HJQ\d0|01/113XacYMTYb52111^[28>:88<=?CMG<=@<7348;:=?98;;88;;677:HJA94b3==543ehecbfcac_^ZZab`]^`]\__`ca]a]XWX`a_WVW^`bff33cZ]cd][Z\\*,-)+,.)&')+*+./.+)***+,00/.,+*))),110/.*&'*+**((,-*()-2341022422537 @@B?>AHLHFL&F?999:7.--*)*+,,+))'"'.-,**)$!!"'(--,*((,++*'+-,+)(((*,*)'%##%'&&&)+*)'&$$#"!A "%*)*-32/.0--//121.0.-+*)(*++,*)((+010,*(+-,++*+..,--.2420.+,--.00//./0-,+++-,)*-/0,)))--***+)*+***+-/++*(())(&&'+)*,.)((./,)*-,20*&%&'$%%&&%&&&%#"&)'"#%'(%"+,(%&(++)% &,2$'&$#!"%'((*o&#$ $0$ !"$%$!$,++)&())+*'')(()*+--.-)-.,*(--)&$$&('&&(*,,--.)&%&$$&$"!!# #!"(,/,++***)*()%$$'(&&'G(%!'%&''%%%$%)'&'&&'(('&%$()$$%$$&%&(%""%*%!"',)&'&&&'')*))*('&&&'&&&(('%$)+($"  !#%%&*++)*('+,-..--,/+(('()12/+*.-)'&&'*'(,.(%%$"$ /2%&)*&&'+.//.,)'&&(+))-/-)'&)+,*(+(*,)('))((('##$" &)*+*'(&')'& $%&!(+++)'),.*))*+*+,**++1. @ $''*,)),+-+),-&#&*/-,'(**,+,*(&&#!$&(+++-,)+,+./2/*('(,)%$$"$#%''+)(')-+)(*)'%$')+,'##$"#%&#&++&#&*%;5#&))(&*)*)&!.,*$'*+,+)&!%(%$&%$(+-0-)'";#&'46#&+.-)()*)))%##%%! $(!"!"#&)+---+)()%$)(+-*-,*+01-&(*()&'(!#$'"&((&$!!&'*)*()**,--'$&'%## %. "!"$$$&($"!"$#%%!!#%*)'))(*)33-'"&'#$'*+-+++*-//++*'(+--00.()-01--/4.16331-./143/210//.134,/0..,+-+),+('% #''(*+-.-..+'"$'&#"$#  "# #$"!%"!"$%"!%&&$%&((&'()**)('(*+++//.0-*,./.,)*.2/,,.0.,,.--.010/-..13001024332/**/6245465107810.-,-124431000263111/.045554104776549&'%" )&.'2345"&(('$%%$"$-+,,+0=+5,.(!!#&$'*'"%)+("$_$%'*'"$',/243335/,++*-0/12129?40481-/;6233255321344322//0//0.*00022101354436767;9:<@A=>??@BB>9;??=;<>BFG@@@BB@=;;>@BACGGEDCEFCBBIEA>?>?BEFHG?;@EJNLE@<:?DFFDAFGB?;:>@>>;;>IQKFJND@ILECIY1X*-11,S*MDGG?;DKNGJKC?ACDEFGDDLJFBCA@BCGKMUVMC>DILRQMKHFJNPO& /9>;8-,(&(('(!#%(,...-,+**,263,+/09>:878:76531,&),27:;76755860)&)-/23,&$"%1;?;787>ID:@A@<;=AEEHIIKDECFDGLKIGCBADG;46;9:AENIGKLFA=>@@6,)F84A,09>5-3;B;1-55//13613;@><>752-.+*34)=4F--112VQFK295/-X12/8<;5+)O)',+,Q/25:5230--.-/.42/6;<:<=>=GIDLMOK>EGHIFEFHDHIEB>83-.11446>:/)*'&*1498302442*+/14<:3/+.%&((,*"$-,-.,-0..461..-'&)+)*)'(+,*(*'&&# %%"&(&&%&%.///1/31,*+/&%+8=>953354411<;:<1/3-)-/-H2;/+.+.211)*+)-+LHGH>9),.+KLM?E&()*+($*-(E>A@>8352-)+*($%)3:G&$%%+43)A= 15/%7,%#++/,'!1;;9?1>GCGF:8::@B:BZQA=;:5+'# +3)(,-P+-52K%%&051)FHL(OKLE@$($ED""BEBDEA=>;;@G((JI534@#,-CA:>N3F6BJ;>02;3,/)(-,.+($#83>6'*%%%,-*4#,,-,*,.8?075B:332/0993/4B3+:.),-((($%#",&'4$')377<81522')/151>:1.,. -=4&,'"%1&#%<@2A8-/>'".?;-77441/71..372043.0,+-,&%*0(##+1,#0/3H.053:=6;A;6710>@A>>= ;.%#+#.$.6599<5?;6:?MD3'*.37+13205K8/36<>H>4+*4:77?A<9E(*I=B !%&$";<:ABBA<;/...,*)*(""%&#%*&,/%$'*++-)#&)#+"$!"&&,%###&(%"%$'()*("! $(.*"## !" " '1% ! $! !.)!!#!&$!,-#(!,, "&("(-*#%&)*&!$&--11/02000,,)),..,,.-+,,,/.*-*(().0/*)),,,/ //+,./+,+,+́À瀂Àŀˀ瀂 ·ǀ¹⃀Ⱦɾ烆ȿű̾ųʼ¾¹Ľ¹ǾǷ»˽ȿǼû»¿¶ùȷȼ·ʼǬĿû˽ƾɥ䉛ûã򍗒ȿǿû̿ȭýƀ񁈂븛䄶ľżĿ½ºýʹƾľý¾⁅ż̷ɺºɾ녔żŷ¶dz􃋑∅˗НιǺȫö߃킇狍ペ凊톈쁀뻧ƶ鄘ͱ°ٿɼݭ򑜞ƶǿįѽş꫗ʹ۸º°޵¹ˬ󂈌蕃ɷ⹛ʽͿ¾ºͯƨذ«»ɍ쀋́][\_abcc_[YZ[X]`aa_[XWZ]bk78;;9jdcdc`[XZ__]^^[VVXWVYTSYec\[]figegknja_em98m9:y|w}|}|xwpcb_]b`[ZYXTWfoUNX\[W\bcYOKEGLQ[]^__\\\]\XSRSSTUX[YTRV^WTVVTQOKKNQPQQTZ[\^^ZUSQTXVVUSRUY[[c5664367:>??7436535788mje^^badbcg435:;;<<;7799658999ole^adacbc_`bba`^][[_c3358;99;=<;<;?CBEGGCCA?9779<>:=C>;7558:;;<>DAAB?=???<<;8:@><8646::4:BBA?=941_\WXXW\__][Y[\]\[YX\\X[]bhhec`^_f54cc`_`bdddcb___^abcghfe59:;8687687fbcdf76j688:99:::;<=<<:::769<;764d4786584bded38951575fb`adca^]^__]SQb^_[YWWYZYS^i78332]][Z\\]^hc]Z_5laWUYS5e]`TMNOOQQM?7P[VTOJNRZZZY\Z_[ZZX_d]UVZ[`52\[YZVTTRTTV[^1146555650[WV/22^PHWaQNPOQQNNPRTX^^a\XZZ_baTPOSSQZVRVYYa_Z[XSNRWJDGJMNKIKrKJKNQQQOMHCCEEEFJD==@@EINV]WTQNFAFFHFGA?@CADKKNIDHMSUW\]XURTQMJNPWSWXXX[^]ZWVWXSHC5;>?=@:<:a7@EEGHIKMLHFFBBFIHA?DB=@:7<@IIJKKMMNSK@ALQOIIMOQWWVTUW]WRTSQSOPUWWVWW\^WSDVXZZ]a]]\Z]_bca[^`dc[]]\]\^__[XZ^[ZYYUQYYPNXC<@GJJMRRMJLLTG=BGIGFDCBD'AAAC?BA<9??<864:;>BCJPONRRPTYUTWYSQSTX_b][WQMNY`X\[WXXSQMMPONLNPQTWXY[]ZXWYYVUY[ZWVZ`aa^`gmrx}zpqx>?=={zx>ziakiknqqpruuttuwrlkoutnx~{}yqhcecfkotvtrqkkmokffhkotx|xtqmkjjgdceilsyuouyww|vr|~j`aa^cehloplhimroleafd_`dghiooigeinvvstoeyzyrlqyM~zu}~xy|~zrqvxxuomgbehhkmrspnsKK~yv|gXZ`fbkDKOQROH?96c\XSQOONHMQRPNQTTSSWWW[[[_dea^`a\WWXUVRPRQPRVWZ^a]SLDCBDEFGKNOSTU\kf\TX_gjsry~xtoljgl~zxutwwvqonllrlacgkklmpmghnjc`ge[UJHr~KTXUSUQPUXPIMKJMQTVVW[[TQQNMLLLKMND;}JRVTNKIJTVWX]`g`Z\[VPJMKNMTW[TQRQKIPRLHMSW\\iuwwyvtry~}oghoejs}xsrmeppz}qpofb^WVUW^_gille`aholpxg^bieaZYZGNfjd[WUMINNRSNMPOKNMMMJILOKMPGCELMMNNMNUWPJJEFKJLPTY]_^\]a21b46=GNWXX_cdjfWTUYRHGD=745445@Zjmdjg_acb_\amfd]XYYSSPOIKW]VORMPVWTKQVNSSH|KRSJiEJMNKFBMME~tplokhrwpf]UOPY_ctGECBM_XKICOf]NG=ohi>VL7EPGTUTOK=hBy}cRT[otkhzzozgjpgVdfacR_vvngueZ^`ci_TTUXZdZYr~pnkc]PXm{~vyJH}x{{ORTUbcSLFI@kJOXehnUztG[]ZX_VH~IJOURZSMS_bXUNU[XN@@?mC_]MKORVLLOUSO{EMJ~@HGHLDCDDBxtqyyFEcSSi{itxoh__\SRSVZZRNTRTOQTWPK]^W_ow{qgetALULwxz}ofrro^_e]Q]ZVeYZDPOwNVy@z=??HIRREUlmYCBXosqhfpf^VP_wr_qokvmc\XQT[WTRSRPMRVqZF@FPIFTYXPG>yyION>QC@nJcutb^Y`]VZ^njjc_aY[S@PhaOBFJi{`@AYvm{fLcTJQ`aVjzcox_XQhqkrldb]WV^\RY^UPVJ@NTTK^otz]PSWakdb]XekZJN[mv~BEJCl[X\co}QB[gi_cXP_`_]_{}^MYajrgaYdijth`ks|kb_hi^\ormiGOI}qysnhhc\l|vlouqzot|nsrjvljowBCKRQFD@wqk|{}xh^][WZYVQJ=FE?EOIOcXKQVYY[UNROIZVZECEO^HADDBNPJNPRQHT_THGFHP^aQMLKEAHH@AA?>@<=D@:AWQE>@MFACLNH87E@=<>;734<>>;;98:<<78:879=ndT68535;<74ffgfa`bdc__[XZ\^]__cc`_`eg]ac_]Z[`b]WWY[`^b g3cbbadbXZZ^,)*++,..+**+,*-.//-+**+,.2J1/.///-,+./../,)*-,*+*),12++,030.02551/156;@DFGGD@BDBGJGEDA>;95...,//+()/5("'*+)*//)#" !$%*++--,+*((''((+.,))*/-)X'&$#%&&'&'*))*+)'&%&)((('%&'(),10/++.-.--.21.+-.-/+-/-,+,+))*,I)(&'((+-/-,++,--,++,-*,,/21//.-,/-.,-/-..-..,-////.1-/-/0-/-,,-.-,c+)"!)(*(&&&'&%")/&'&%())*1.+(+0*&&($)'+&$%&&''$"'&&%"%'*'&%((*)()(,0-++-*,((('$$%%''()*##$$(0%##"#$#$&''*--/-,-+,,-)((**)/-*-//5401.,)+/'$'()*'&()'(*++*(&# !! !""! "$*.-*-,**)'(('%!(%&*'%# "$$!"'))((&&%$%&%&''%%&%#&()*(%%$#%'&''"!"$%$" %''%%()'')*)*(%&(&$###"$'&$$&&!!(-,($!  !!"!&+..-)()*+,,++*+)))*)),.-)%&%$$"##$$')(%%"!#&&*+**)'%')+,*)('%$')+,+)-/...,..,//-('*('()(((*)&'('&'+--,+,,)$$$&&%"&%(**)++*''))+*,,+--+))(+,,)'(()+-++,-.,-,-,'&+//.3)!""&&'%&"#!!#)),0..&%+**.+.-)'##(('#%"$%'*+*+))()''&)(((),+*-*'$%')*'%(,-$!"% !##""%'&%,.)'&# &')),/-())'$',++,(%&),/,))+))&"!""$&3(,0++**%"$$$"# "%%'$"%'*+,./+*(('%$&(+(,+**+-.,*( !/1!$(**' "$"%(+,+*++,$;><700,!##$W'&$## #%$! ##!"'&'('(((+'!")*(&&&'*..-**,0,)++*,)',/.-..13.,/01125333122432/2344./.v011/,-0-,++'%''!!)!"&(()--)))'.&!$&%#$""##%#!!"# " %%##%%#$#$&%%%'((')++)*(&'*+.000/0.,0200,*,..1.//.//-/0/00/..0230/157574,1145895974663/.01/,12354435842/-/20057862345627')%&*!/(-3+)%#$'&###%,.--./222..+'&"''&),**,,)!$'(*,)%"!""#$$(-,+,+),0..01-,-/168762.,-362652320/,,-,,,-./011123100231124321367645:=?BCA;=A"#!!BAA#D:5:;<<:<>@@>>AAABCDA=>@CC?FGDEB>;:<:<=?BBAA?==?@>;;<<@CEHEBB@@?>=>>?@?@EEAEHGFHECIK>6898<>@ABA><<>CBA=;@@:9<=>?BD@;8;>AA@A>5?GLIKLJFGEADHRZ,UUTPPMMMIEDCKPMIECFIG@BEGEB==:79;;>?BDA@BLR./TMJIDBFKKKLIGG4''-449%)+,-+%+'%#"!! #%%$#%&'((+*))**,28:9:;733300+&&%&+2469:70*%%&')++,*&'&&-:95249>@CBHMKHDA><:?LNNOONHHFEFFCAAA@@E@;<=>>>BFC?AEA::??;8.*M@G*044550.351V..,,.0245786/.-++***+--&"L,011.X/.[X.4569;<>76:950**&''-130.-+'%)*)')-022;ACCDAA@GJJMMIKXOA>?A9>DNQPMJHGEAB=:CNNJJ;GSOHE=>>:8510.0238:=;4114626BDD=514832--+)584/,*%"##((%#'*+--.-,+-.,//(&'+,--,*+//+))$&'%##$&&'&%$''!&-./466:8-+-/*!.:>8;:3476447>973012/.--+-250+.+,/00*,1),.'CGJEI*..*HKG7E%(*,)&"**&E=;9=:9>A<5-$ !',0;'&$E#*50''#*:4'$0++)!#%,,,)'3!C>F6)+0@B=8FNENOOPMCK@?B<1;=:<2;FD@:F;6:<>A900022910AHKL;<<85,0<;AA'&GG6/.:ELPEF;@B=9443.,,-24/*/./,.12,)5525=@C>85=1;99D:30/*+/.+,..,)..(*), 4#0::11-2/+-.7331.0+/)(:3)#&):A9 #/A9@7(4O-&+16/;PPE47A0/*8;796330,+11),.*',' (/.&2<>C2*-/4=893.5<3*,3<>A"#% /(&(.6=-$2;>684-56642AE3)066;63-5=8H@83:;@FC853792/<<83&)%?9?;978619C?9<<D;=>;>;89<@ !&*)#" <;:ECDEF@:320-/..+( &%"$)$$0*#(,//1.*,)$-), &1""!&&"%&''&/' !"%-/&#""$# !!*& &!$&#! #%"#4&&(%,1+- #'|)+,%%',)'92(./3310010,+(')*,,..//-,,/0*+-,+)*-/-**+,-+-/.-.,/-)*),́Āȁʀ€ʀ ʼͻp˻ͻʾǾ˽Ƽúû¿ľȷĽƾʀôùñƳĹȿøɼ¿Ƶüƿɴ˴û񊕬՞옫ƿƿľрˏ݀îɤîҹȾƿĿԀŻ¹ں¸þŻǿݿ¼˼õſƸ򑖔иžԶŽŹǾɹ¾釸ñʷϨ¯߱ǽ߇ꉘ܃޳εƻȣ򆜟·ʮ翺ӪΪ;Ǟ礤–ϸ˴ͷɽη䮰ʹżü旒Ƽ񃄎νƴĻ̿ħǽµ虳݂􁃉 ܀^\XZ]aabed^ZYUW^accb\X[\\cgk8::7jiliffd`][ZZZ[XZZZYWUUYce_^^cfhlpjkecbfdknoxwxBIKLK{tppy}{GCAA::;;ADGDDDB>8666841660^0`^]33215<;<<:75hca]ZZ_`ba\\[XZ``a_^bccb`^`cfdc`ba`^`c```^__]\___cc3689866631bggdbec``cihb^cadj89955:<<<;:9858975gg4ii53efdbe57962bbfjgebbcccggc`_^a\6:21\XX[^]\[ii4^[8955Vc`\_^b\[^bcbZUTSUWVZ[VPNMMNRPHEcg^XXWUW\XRONTXWZ[\]_`\UUZRhaWY01ZRPOPTX_b/1312221[TXWY0-VQJL]/SV-[[SGINNPTZZbZRUW\^XMMRYWSXX]]X\da[VOFHLEDIMQTPIHKKLOONOQKMID@@GHDNIJTUKJOVYVSLRNJLLKNIEEDE@FLMHA@CFFFGIOMKMPNMMKJLJIHJKMPNNMNTOGGGJOKGIFA@DIHB>BEDDGIMRTRRQO[^SNLGC=@CCFMOJHKJFFQ[^aVQTMKMMLKJHDGNRSOJJMPSQPPQQPQWWTPNPW]TKKJIF@BBCCDCCC@:7?IMPSRIA?BB??FIMQSRMHR_F:AIGGEDGMKHHHLLLNNQWUW][VUNSLDHMMOSXVSUU[ZWVUVL:fTi;FEBBCCIPRMFFEGDEMPRRPNMJJLOI:bSp8=INIKGV=;=AAA9jfd4:;=CFGFGGGFEDFGIGIONMORRSROOPRRVY\]\^^bgkfe_ZVUW^\\ZX[[ZYWVVX\]^ab^\]dke]Z]`bpi]hjkj99nnghr9:7kg]]^_chgfgd^[Zaec\\ahd\[bie]^`bi:khen<9937;975695ko;eQKKJFJFDIKWYW\bgkW4f^YKDEDJPONRTUVQLDBIMNRRNJLLLIGGHOTUTRSSTSQMSXVZcb_fm`QNOQ[g_`b\YXXXURTTQLMPPSWZ[X[[[\Z]]YY]^ZXZ]^bdcequsv\nt_Dh[aMT_\dNtpZWjfnsdksr_^Z[b^\`b\LNADZ`XTkrnn_RUX`d`UPWhp^Gc}y|?EDBkLS^QTZLYnta_ZZUZc^__`a[drdimdZbk_kogpznwzwnmisxa]iogjNPLznw{tgc\[g|ipxxzpusojutlflzABGPUHFHAwt~{}zuof]i^W^YXSO=<8EIULEV[WWUVU^ZX[SLPVYOMCNZABIA@LOONKVTDH]ZRMGILPSQPLLFCWQA>IK@AA>IF>8GIECCOMKAI@99AK=RYW?]`_Y=GW420020Z/`]_][WqU]145542]`86568;>>?>AE?>@>7338:8::;99;<77;<68??j57::5`39:64fhigaadb_^^]ZVXZb`[bg^[ad`]_bec][^`\XYXY]]^bcccb^cc^WX)/+((*-,,/.,+*')-/0..,+*,,/121233101/-,+,.-+)))*-/-..01249551//1/246;<=#'(**MB=<=BFEBH'#!!2.)).1-,,.,.1.$$''&"$*,'$ $%&*++...-+**)''&')+-,+))---*()(('&&'''&&(()*//,.*)(+,+,/.-,/.,./,,...0133353200///<+-02001210//..+++--,,*+*''**+.*,-+,*Q--.-+*+*,//1/-///.-+-010/,.-,-//---,--,,..-.,.00//1/.,./.+*.-.0,.21/00/.-.120.--.,-11.,+*)%%##%''&%.-%# (**,+.,*)++*%#$"$'$&*(%%$%&(' &*)()**)+&#!!$((*,*(*,,((+(2,%&' ""!#'*,,$!%$$#! ,%&&'$"&&'(*).+')))(&"%(-,*.-01.0640.)$%'$$()+-+&&()(++)+,&'&#"!&'"&""'%$&)*))'++')('(%!! !"&&#!###$%'$$&)((( &&&%&$$&%&>',*$$$%(%"%# !#%%" #""$%'*,*))&,0)&&$"!###&(%%('$$*/01&"$! ! #)-.+''(*,*)w+..*(&'+/*&'&&# !!"##""#! $'(()(''&')*+*(%&'(()*,--/.021/0.,.))*)))*-+''(//++))(),+++(%H**#!&$$%'&'+/20-3/*&%)+-.--++'+(#%+,,-.,,+2033.,'(,+((2 5'&$4!'%$&().32.-&+(*.*)'#$'&$$*(*''++**)**+*))((*)('&*+(&"#'(''$$*)&)*()(()*&$#"""&(*)())(++..)%%&++*('*)(,+&&''& !&'),*%! "!!$%')*)%"*1$"$"!!#$'%$##&&'''(,+-0.,+%)# $''(*,*)**--*)))$0*6#!""%((&"#!##$(*+*)('&&)*' 6+8&)%%#('-#%(((%#"##"!!%$"&"!"!#"%'('&&')*,*'))'&',+*+-*)*+*'),(),+//0.250-030-011343324531247653/1334850...--)*)%"%##"'**(',+'('#('&$&$$%%! !&)%"$#!! ! 443"$%%&%%$$#%&'%&))(),**)(((***,./00026753/-,,.2/0/.0/0/.-,,/11462126;600367?7/5655;=76:440001253564110220-.2740036512559 654: .-+%#0%; #6")'#&#"$&,,-037<5;4.&#$$'+*)---.+)$"&)(+-)&((('&%&,0/-+,-*/2027549=3*+--4<478643331.01/,-.-/222121342553136312336879@@?@ @A"##"CCBCBA?::9987987:=<=>;57?><><>@::<@<:=<:;:780;=@DDFFBBDB>;<=<=>:768:<<;:;=?;8;95FY_\VMFFFCJQPROLJMTQHKMOLLOO*...-VRROLNRUOJB<<79FMP-0-,,,-)'!--+)&(((&! "!!"%&('%%%$&(36>A>;:984/)" )6;>?=5-)'('-12.+*$!!';<65787:HDAFHFA:;CKINMGGGEABDED@AFDDCDDC@>969ACA=66676567:;200/18945=;24:73,,PBGP-/4.*34454-!!%H')@2.?-212//XY/-0655;>=?=:=?74.-& *$+5549>:'"!*-+167<>BDLJLNLQHFHLKLOF?=<9:FDCKOKBCGEHGCDJNLH=,7@>=;658971()-18CEEFE:BDDG$''&&&KJID:32-.*-..(),,+(&" $"#&*-///..,)()),++*))(*-+)('%%*'$"$'&'((&(*+,-0-/852251,("#5;77:633557;>;222423.)*/2./93),+/11,).1+24(AK)MG(-,+IGEAJ(+.,)%',%IA??;41)# &/0D*I##$'*)+*%14%!'"6#(( 1 (&')*!&0?71)(5 /MMDMKABFD?;6IH4D=>H@A9=VQ=413?81%'F2<*45?CD?H:798639=FPKHDDABUSOG&OID>QID++.5065+)$+%6:(2=>3)D>J),/,3.'FK-/0--0431/137860%+$*%14.)HN-+SKPNM*.,NECFG*)MLBD"$"#'"$H%%GCCHHEJC?>?=)''A3&*:EC9=@>OP?5412,+121/,,,.1/()1%F0.+0?>9:77?"%*%E>?9690:8;A85=5.5=99-/#37)!&&%@9 (&(+-1,09;2)3=A<@=59ED53,+0<73?;+.3361.2+*,)*/4//-7>,%'*+"=.33/'<##>'3*'$+6751.,032,+/1/)%1*,1"(02,%'+=6000=;E4"7M05(+357Q-W?9-+:79=2699/0./41.250'/%%361-:>;;3,,04950,07=6E$8LDAA!%#"4 $-)-3)0>A6521/0745313/5?537514=77;5;A:>A=8:69@@957@"!$),##%!@ABHCCCA=71:3,2,/*(!%&-'!(++-*,*20/2-((*)$% &,!%!'&&$"*)!+)%"!$&)&&#"+'"% !!$!"" %## %% ! ! !#"####$)-+*//)$"&&*+)'%('% 7)1335111/,**+*(&'*/-)-1-*-.,+-./.**,.,(*)*++*,--..+./-()܀Հ쀆€́ 󀁅;˺6ο􀅐ꄈ󁅍˿ƒϿ̿ǽþƾúµʀøŹżžвöĺɿ̸üϴĹƸżõǵı혭ɴõάڀ끕ڽ̠ﮛŽ¼·̀˲ĿǼɿ4ǹɼŽлȾᆋź̿ထȀ·µöĽ꽆ϾӶٴ䈞􄍟􋍍殺貦ŦĻϻǴ͸ҾޡϻինɳʪȲȰڿȲþ¿®ϦĤξ·ʴ򎐕üǽƺ¾Žĺ´¼˹ſÝޯŢ󁊊TZ]aX]ea^\XWY\aaab_Z[[Z^ek786hgg33fhiea][YXWY[ZXVWXXXY]`a^\`jnnlgdfkjiknusvLI|}@?A>rj]YY[`acdcgea\\ZTN@.2CRUVKEFINSUWX[\__^^ZWX[WXZTTVTRY^]YW[_]]ZXYY\ZY]]_b5666fehi45766685ebbb^\ab_a233eabcddfk7opkjjfabeeb``c43366653befddg5888mmkfegggebbcdbad54`WUU[\\abc36;;<:8:99<<<;>B@=>>==;=@<8<=?>:795/X`d_ZT`d_^]b3989<>=:5ijggin7ja^\^`_`^[^ca\\]aggda\_a_`a`cb\Z\\^][^^^Ua46;<942ghhggda^]\Z`9:8e^ZZ`nt;;757787898:::6fgdbb`acb`^ab36:83^__^]_bh5gefghebbb2268786558:?:675677436a]]`\VVPJRVUTY[XVXXROQNNLLQTOJ_gJNKfZUXTOZaaZSPNSWWWUOORS9bYY\]WPNPTUU[`]/1211/.Y[\/220[UW0883332[JEIMLKMPOY[XUTSVRKOTVSSWY[Z\aaZUTOKQQRPMMOROLMQUVUQMRRNPNMOMLEHLIOJMIDNVSMLHKGJMONLGEGIGGKRXROLJJLNOPQNNPTTRPPNOMMMNOPRQNGFEA@@EKLFFIFDFIMI?>GKIEHIJQTQOOMRWOLIE@=BFKNQROLHFKOQPU^VPQOJJLLIFHHIHKONGGJLPPMOPPQQUSQRSQTURNMJHFEDDCA@@EDB<8FNURSUWWUWZ[XYTZ]^`_WMKNSRPNPMPTTUTRSVUVUSVWSRXZ[WVUKB:?BFCFGLPPQRRVZRPPPQSSMLJLNUWTRSUY[`b_]RHLRUUVWOJHGNTNJLKGGHLMJQTSNLNIHHKOQTSKEJOOMIIKMOOPNSRLLMNOPQPPRSWZYVWPNHBADHMQPQRUWWWXRNQM;RdAOJDDHJJNPNJCDJSLDBHMOSSHAACIRRMFACDECEKLC?DG87;CIMNPEGF?ABFHIILHCFJFHC:756:;79@EIIKLOLQUVUWUUTWYZjttidUPKNQRV\Y[gc[Z`\WY_ZXZYZY[]\cdfccaaijjebdeikkg][]`cbZVQJKVXFEHHLPQOKLLLOPNMMDCKHLOMGGBCEIFBGDDE@=BDED767h369==?ADFEEDDEJNMHILLLRSPQQQTURTXYZZZ[^_ca^ZTXWUUZYYVX[[][\]]WYZ[^`^\\^a`Z[ZWVbgafjg5999offn77ifhcadefllhfbZUTW\\X[^_[XX_hgb`acisQ_il:;878:642aa\^6ADJSRPSTRQWWWVRWTPSTW\_]^^[Z[WNPOHK\Z]d`\VSSSPPQRQQRPRTXXW\VW\XRV[YXYYZ\`b__bdhfeiprruwvtlkmnomhgikigbega_homnog`ghgkmkifes~zriddhfgiryxvvtlec`]`cehgfggfijg`_`_]]cfea^`fr|{yxh_\_``^_afihhhdegebejgdaba_`h!mkjikjaeilm{ypttsO{}|KNNKKLN~}{xy||tpqsrqoolinou{}|HJPROLMMOPOLJKHwnoljhkdcfZQYWYXVUTQPRQMGHOSVenopv~ofec^TOKKLVcfhicRMNLJLNJMHCBEHO^fWRTXZZ[^_`aa_`iy}wwxwru{z|{~|wvromjd[_hq~xe[XXYXWURQPQRUX^flnjkla^ed^YX_fgTU\VTMPPPUVQJCBIGEaZYiJSQSMMSTTY`[V_c^V\ccj:oh_TU7CUWhjnli`M=CGZ[[gmnz~z}|tprxyrmkhikmv}w|}~}zspjhjgccgqri_[am?LSLHEGF~zyyvtnlgeutnkb[XUSZc_VPNGEFCGPRNQPNKLMLJIHGIHEDCFJLLNLKNQXYTW]_^_a1aa3468;FOMLMORPQYSW[\WKD?<9:787546:Ndga`c^cdfegjf^]a_ZWYMSWSMCPbXWYVXVOOLTXKXRGJKHJJwzxEME|IlljhehomibZMQUXinuIBs7d>Z\GDWMFPZMCEGJOWQMQLLPUSIsMBYCwspxynuykrvhPSdkZd]krahcldhSa[FJLVXfj_s{{uz{vupqtpr|q}xwNIKRKKIKMNUIBnIX]ZRNFzGOXWYRIRVVUXZXVWWQX]Z\SJWI114121WHkfSAAHFEHKI{}~JKGC??CDEEFJHE{}zyIJP\QU|mroXX[YZX^WVXSJOLIKCNTFGOR`hctvos}DGGDEwlh_lmnmin`\~sqfkw`QM`iYvbBKBC=HTU]^addhdxv`iustohyj^[VM^]_j[ayQIPYrbRfXHOPGKURRP[YSUYSLC@K\a]V@:@mTuS8F>>tP\WllY[]^b\``_aTVW]`RWXSNKUQJEENHJXgeYNrlfdV[er\q|~vybVdnnj^hwpcY^\`eb`_`Qr@DTispbiheYLUX\kSTYV^vjUDSvAxwvGJ`bc]_mdarpghbaZXa_`aZaY]fglmi\Xb\Zbbguwvshjoqyo`jmzrqGMSM~{uga]_g}jwrmorscucntyBIQV?KL~o}|xqvtn`VZ_VUYUUQM>ch>ENWNMW__YRM_`_aZPOTVQNPWOA=A>IROPMKSTPX]`b\NIJLNNQPOJ?WT@?E868:;FCB>HLMKKSPLB@EDHOL?B>BFEB6DJA68:>NKC@LI:8NAaOZXF[[7]:J_221021._^]_[YXY^14455512;976:<<=@?EKA>@?7ca6969<;<:=<84697586h8;?:::3a37855hcge`_aa]\\\YWV\cb__dab`^__]_bfcca`\YYY[_^^abc4gabfaU'*))),-'*.,,+)))+..-..++,,,/11///121/.-,,+,--+()*))(,/0/--255520012247;:;EIILO)(LKHHFFB?B! 52,***./0113/,)*)&"$'*% "5%((*+,-.---+))+))+)(**'+.,)(+--,+))(*+*,*++,*-.(,-/.*)++,+,+++,-/3353111..0/.,+,,,../13320/0//-,a++-/*'&**)++*$*---(-.*+*)-/-./32,-I,-,*+--++,.11/-,...//.00,+,,..--.,,../0//.,,**,,*('*37-//.---.-,*--)+,.1/./01/--,,,-.,)(&#$$##%&%$''&&'%$$$&($)."""0)&(%!'**&#%$&(('&"$%#-&&')&""$&(&),)%(*&$%$"%$##$$+-+)(&&$#(+,*),-X//033/,-*(+,,,)))**((+-..,),-**)()('#%'#&#$##'%$%$&%&)('&##$%%$&),(&%$$&'(()'''*++**)'&()(''$##!"&&"#&#"$%'%$'&#$&&*,)((&(*'&$" !#&(((&&$#&)))*.'""! !#&))%%''**())((*,*)**')+*)'%$##"#"!!!#"" $%''(&$&&'&%%''&&*-*.1000.+-.&+.(&(&*,-,.//-+*+,,**(**)++***G<@< "" ""$&'(-0++10*$!(---/-*+*''%*--)),--.0+)(12/0,)+*&%%'+-,+*($ !&)&(***()*,*+(+.-.-)%$%))('(%(*)**)*,++*),-*(,-.,++%  $%"$"%'('*+,+&&&'(((%%%((,-*))*,.1200($'+,++,(%%%),(%('%$%&&$(++'&'&'&')())%"&(&&%&&'(((&+)&'((())('(+-.,*+&&#! "%'((()+++*,'%'$(5")% !$%%')'%""%+(#"%'(*+% "#&**'%!"##!"$$!%(')!"$!!#$$#&#!#&"%"5"%'&('('),,,-,++-007>?85,+')++-1.-65/041/251///0012034_3865213247750.///-'&# '*"#&')+*)')(')+(&%#!$&$!#"#$(&$($$$" "###5  "#%$$###'+*&'(((,+)++)+-,,-/011431.+-,,-/..-/101./0/,.0123322442.00.-251343;6694243133267553/---//./120/.25422469?)39:-/-.!";4,(+Z'#*-'#$%#(-///0105-,,++$#!'*))*--+++)(&(--)++'-,)+,+,0/0/,0.,//145431//1-)+-&*436;861/0/-.-./0/040240,/3211102765688:87:==>@@@?;;<==<879;;:68:76;>;=>:7:;;>><=;9AGHE@<98;;;><<=?@@>99::99=><99;@GNKIPTPI=7698:99:=><;<:;>==@B=;88765;@?=<==46:=947:?HE;555666531.14568<=>;?>77;:8449@B01522/1/011/*%%(''G763:*/.1.X/4336:75=@:28;;AC<6,,!-2<>@=93'!"-,,59:DGDMKEGIG@??FKEB>?<;;?FLGEIIJJNOLJIIILPNIDA;9<:769A@90+,1)-)(')PLMM'KGGFFDA@>;88B>;93.,*)062)$!&'(-.-,--,++*))&%$"$%&&('&%%('$$&&%&&''")('''**-2.020+#&78557466869<9:4454214+150-%,7//1/00++)/3(1-&F)*KH)++KAFB@GK'-'KEN)KF<<:?>;6.$$&(59>(IE#;022#"0("(.% !"%(+'%($%(,,&9!!. 9D?DHE>=CC-3ASB6<8@D8<:AYR;?.:3&**/18:3@ED?BCHA;=:HWUMLHKR@@MGL+)*.)*()(*.%!7)462+($>E',433-&DI.111232001.2534-%.#!><."!&&$'))KIMULCDDGH()&GI#!!"###%'&%KFHLJGFACBBO)(,I3,,BGE<@LSVR?11201/4...-(,+*-&-3'H(++283=;C:4>821/(1029/2A().1>4*7.&+,&)1./,1/*+/,)$")242.!#7*A-$!6*0+66-0-//-,%**.3(-.+)(0.(#%,'*0980'><69-06A4?EE=?2+6;86.2;91.10243115,>$&/:;83765/'/22?-/4./=7,$)>#B@@G&&C2/1/2=;8@C;942//7224/2025599i60.830879AA>=55:<@927:;:6$',)F>==78768D7@GPVS@;==D6?H3@A=5/24..0,+('!58 "'.(%+//+(%01252*'%'.(  "(&&$#&(&+---*$!#$%$'&%$++!# "%%$"'$"#)'# "#!!#&#$%'"/(..$*,*&%&'+))'')c.,2*2042.-..)))*)('+.-+-000.,..,+.0//.-+))(*-,,---/,,0-'ɀЀԀ~ʀŀ́Ҁʀ뀃 򎏍݀򉙘Фθᾲſцοƿžз¿ŷɀ»ĹĻ·ý«ľö¿ϾŰýɾʼŻƹ;ɸǼҽıǷȶ¿Çſο텔˭Žű¼ŽÿÿÿüŷȵƿĻ¿¿ȸ陸ɾ¶ŰĹ؀鎷ՙɸ¾ÛŽاҶӀ􀆀􃗠턐ꡒ텈ⱥ˿ԹſʹйǵξϣۀíìŽܾͷεŤ‹ζмƾ´Ƿ̹ݵ񛨬ĿѼ횋ǿ¾ʺŷ˷׿Ľ¯򤡢ù嘥낆ۀ􁒎İjUW[^]]aYS[^\^`^[Z\`fd_ZY\[\_cegedbdg2eghhgb^[ZYWYYWUWWXVUY\__]]cefllinstusv>>~CJMKIFE|wussqjda_\X[\[Z[[VUSXf]UXWXXQKGGKLJJLQTWZ^b_\^a\V[YTSTSV\]\ZZ]^]]\^]]\[^aee58==:887::85446645jgc_[[\]c4eaaa]]\_cbac_[ZYWX]_^\ZZ]]]`232c``acbdihjlgefeg54gg45eda234gdbXU^aa]^^[\_k=:87547:>=>@A@?>;<;:865755:<:<@?<;::<@>;;<<=9:8896aVY]l8b_d0]49>@?AB><<;966mhcca`_bb_^_cb]Z[\^__Z\__`^]]`a\X^_^[ZX[`ad6885eebcdbacfc_^]dk7853fa4:;<=:684f57789;;7k7ib_`cea[\e169;83b`bd45997ii8:7id_\_37:<=<<;875\8><;;;:72][Z[[VVVT?5H@[Z]42`]YTOMOSSOQTYD>IHB;T:[RZY162/VPQSWZVTUTS[egb[Z``[VPRVUUZ]/2221/ZWZ_]^/12.-01788542PIOSSTTSSRX[\[ZZ[SJKORUWVOPUY``ZVRMSVRQNMKPTUTY]YUTRNPTUTJHFFGEE@=@@GEAMMJMLIJEFMRTRMNPQMNORWTUZ^ZTY\X[ZTRVZYUOOMOMNLMOOQPHBBDEFJMKIMLGEFHHDAHMNLIFGHKIGHKOPONLHEB=@CFIOUSPJKTUSNOTTSUTRSVSKGJOLHJPNKHJIIMQRQQRSRPPSZURLJMJGHHCEEC@BDEFHECEJLNPQMMLLNMIJORSW^eekhZ^c^UUPEIMKMPNOORVY[ZTURRRQQRQSXTOJFHRPLD:@EFGEABGHJNMHFFLNKHNUUUVTPOSXRNTV[YUUX]`_UWXYUPPMGNOKJTYZb\YUSSSYWZ`WY^^XQOQTSWTPU]`]WVWPPNQQROU[XTUUW][VTQRTUX\ae_WSG@>MWTF>BMTXWX^b^TNLNNIPRSUVXZ[YVYVVW[_^`NNPUXUUVWROOWXYVTPR^^XTQMRX[ZVQOMMRQVYVSS\\UPSXUUX\UPRQNMRRRUPONSVY\UVPPJHA=EDLNOWUTW]]PLPG9>FMQMJJGPUPQKEGUWQF?@EILNLJH@;BFFC@?AACHIJHEFD@:FNNSTQMHOIC??HPEDIEACLMNGE:89l9977>DDFJPMRVX^_][ST[ZUOPVWZYNRSXXPAH]`\\^cz]X]^^a`\ZY[_ba`dgfdmk7jcflnplc]`f`caXY]ZVWRNNKMLPPMOPMKMWY]VIKOMNSQOOLJIGC@DDEHEIGA>yV`?m::9<;;@BDCCEBDLOOLNNNOUTRQQSUV[]^\^c\[Z[YW[XVTUVTSVZaba__`\Y]`^__][\]\WZ\WRWc6je48997kjhl55ibfe`dgfiiccbWRPRW\Z[Z^\[\ekjjlnklohloll7879:4_]PJSb:HG>As_JNJIIKOHECGELV[ZVYWPMJ#iIYSQNHPQSVZXSSTJEGPWZXVVOQVVQQV[WSVXWSV\YX[Y[^[TRRSUZ_`aTIRUX`]VOKKNPOPTWWTTWYYXY[XYYXWW[]^\[\^bghfcfmleggilnopsqrqrutnhgswpghjieiqou{uiflsja_cnu~}ukknkiginruzxropnidba_]]_cimhgc]]\YW_aba``abktqkjkiebec\bkd^bfecfgdehihhdbb]_badmonkhnoelwwu}xwsswvy|KLKNNMKLKH{yrrwqefghilpxwyvtqpw}|NVZ\SNKJKPQSQRQJE@qiigalkdic_da\[RGHRSWX]hnwy{xxjmlgd_VQQPScklfXLKMJJOORSKKLRYac^^YXY[[]XPTV[hxwvyyvtty}{zunmhfqqnmlfdehhbURXVSMPXb_POXh~oornlhhchmbe`TY\[[`_ZYSNOMQUSRVVXUMHQQOW[UT\`]Z`^UYlqpxvnogR[mrmjecgf^YT[]gz}{{}~zsrung_gpu{{yx}|rjqpnookks{ynnwHNXUI{vvyrpnjonedfbdimklpqphbSV^aXROJHJLPNFBMNOPMNLJQQPMGGHMNRRPRSV[ibZ^c^\]01222579:CNKKQRRPJAY^WLF?:778:77769?AXikhbbbghhij]\a`b][b^XfXTGPf_cdZSUVRMZQIVRMKOJFwmy}x{{wui][dbbmkidX[lmfsot{n\YYDdWINZLYc`YQF@GTZTPIALX_VHfaQZRIBrncy}bThtyrcdkmOPLQMW[acafwsuopjkbWRWjpbsyvwKSK~s~z|LFLJGHQOVVMJHUY[XSLEGJMWXUQJTUVY]]TUVVS__\`WKWBU032853.\SQBBCDOQRH|HKLFC@CGCBIOMHF~y}}xGOR~[L_yojszszgXQT`bbXPLWLFL}KJPGNNN]lgclywms}CADEsihRjmarti|{dm\sxf][ogVNHLIDR]n`Vcf_d~kYehgqv]`vfMQUWmnmY^n|mXMTpva`RJQOKIOIKO^fTS_cOGFN\c\VNF?A`[N;NLKMI=NeucVgfe\entkWXXY_\VOOTOZkXQE?SOKPVejrukfcfkjnvwjjhzmekjh`Tlaec[_a^RGE\dfp{kmqiZS_QYcKUkL\knw]Dnvxrmx{zxd[U]_hr~{xvif[\`bcbh`U_a_qr`YZ^TYf_dswugghukdevwpOE>PXKDJD7;=>==;:EEBBGN?9l\dGIF:1Y55>Xa^^0002100a_USY[`29646565:;;:<=;=>>EPF===74c4768===;>>9758:9:844:=;9;733884hfbec_cd`__^__YYdfd^^cd]\`a_^\cfd```a^[Z^_\]^`465`^a_,(**+*+,(%*-+-.-*++-00-*)+,,,./0/.-...00121/-m,)'''))')*-/--132474356668A#HIHF&'%&&&JHEA=;9741,--,*,-,+++)))&%%$,,&(()(&# !#$##$'**,/1.,,-+(++)()((+,+*)*+0,+*+,/.010.,++)+---,+))+--+,+)+,,+)u+*++*)**,0/.0.,--/.-+,,/./*&*--*++*)',,),/6,*0(.,,././10---/.+*+,)+-.,*//.--+,/...,,,-,+-1/-++.//,011.+-.0.),0++,.//0.+))%&&(*,*))) $$%(((%##$&'%&(,!!#(+%)('$$%)+))(&%+11,(')(''%&)(')*&%(,++!$'(((&%#(,.,,+)'$$&(+-,)*-0440.+(,/+*)('),,,/2/./.+,.--&% $"""%$"(&#&|##'))('()(%%'(*()-.+'+.+-.)),//,)(%&'('')()($!"##$%&%$''$!"$$!!%'('$#$%'%#$&(('&%#"  !#$&))'$%--+('*)%$"""##! !%&%%&&$(*+***+.+*&%(&%'%"#$" ""#%&$$%'(()*'&&&''&&()*,02/35/11.*+)%'(&'((**,0021--+,,-,,++.-*(%',+)$!$%$! $$$''$##''&%(,**-,)')-*(++.,*m)+-.-(,,-*''&#((%$),,1-+)))*,'*-(+//+'%'))++(+/.+)**%&%('('+.,)**,/.,))())*-/1.*'!&*)# $(*)+/1-'&&&'$(()+,->+,+,-/1//$&'+-+*+,*((,,,+*')/.*)(&*-/.*)(''('*,+)(./)'*,**,/+'(*)++(''*+,-)*''%#" &&'+*)+/.&#%!%')%$%%)-**&"$--*$ !$&&&''&""$#" !"#%$$#!! !'')*'&#'%!$*# "  %%%"!4 $$%%)(*,-0]0/.)+//,))-.//),,--'",002473/2324321//233356537752477;:313500/*+--++('))*)+*((*(&'-./*#%&$#%&&$#!"##%#&&!<'*4 "#""$"#(*)((())+*())+++///.../04/.//../-,++,++-0520/01/.1322320210,.0-+-34278874154145566233,***-0210056558<;;>;==<;'*''-4&$ "=0%(%$&&(%#"$#'./.+-,+/0=)0-.*&++-/10--.'#&,/1011+,./,,/1/.132/143343341+)(*.1457.'.03641,**+,-.010-.///.01012000223I7;<;9:>;78899;<=A@@>>B@<87>A<79;;9<>=@EJIB::>@:547>BHGC==@=;:<>AAEC@>?><979>D?><77643:;:777:>BHGB?A@>:<;6;C?:=?==@>==?ADB>:;88:88<@@>;?B;>EGGNRQMKLJJIGHPTVWOKKJHFMRJILQKJP./-.-.+++*MISRLMNJGBAEA:8:;<<>DEGEDA?CJJHGONKR+046/,,S))-.0-,*$ /-,+'--*-*'++(&!"!%&+5=FIIGJF??>:5/&"#$'6?>:0('&'+.041++)-367563133474/114?INLQJDEFFDCCFJNLIHEFJJDBB>=EC>>=<=9//640--274.-1;JSJ@BD@>==9>@;>9377559864.)('+/./1120+*00/32.08;989616DGFJFCD<.FR3>@=;9:<82,')*0=@CKKIHFIJEADPVMC@;6;@BFILROKIEFHRQTPLQQMLD?B@@?=:;?B=9;>D%*0-'LOUTNHDEHCC@@DA;<=;<=<;>A?<92)-14-'%! " $&)-,-++0.-,'%!!!$$$&&'(.*%((%$&('(*)((&"C45 .& ,8:9667999:<5475633862<30'H,<5892,./-*2-'1.)(+)&ITQC=CKCEFDGKKGCKKHA:44987><;7..772>B.0,0S/55;=9;IFGBB?AU61,.;@5ADALMAK).'@A=CSAAGIEIMHKMOSTQHL+IHJ'*)KI((NK.*//'%A'1340+'$%')21/,'DN000366/001.57560)0 &'/* "!(+.(NHFODCKGC')*%FG$!"%"!%((&%JHKMIFDABBBK)+.F2*2CIG<9AICJ;0./4541*(/)$+LG,L-0*-,+2:72;@>;>B" ":55(4G82=>9BH7E:1L==D<50@8+,%*'%.1;3,3521B9)498>A11@5*-+*987108E;*&-AB24,&-.)'+(**24*+21)'%)153/)$"!66),(&*(&5;2,641.47:A5,.--00-(),,28.,'#A-*%*,:;@A;557::<@DD>663=713531)7244/124.%%/56;B77;60-7/19*.@(-67=43115/0845H>?=676@;66>>58'%,**)K<8636;==H*+Q*E:0+A.8B6:<>79&+-$+-&9<;<;ALKDDEFC~y>=nd^\ZXYWUUSQQRUVSRTV[VTWXYgVSRQPLKKNPPUY^`_^_\XXWVXYYacbcd`^^]^_]\YY[]`^^ej65h54d^^`00265d`dgc`_^`453cdhgg78676hda^ZZZ]dcbb_[\^_d43D2245565677536::9865fca23c^`cd_`cc]X[d6?95654f47:=?=<>=@B=:9:7jediij:=;;9abk644f89ec5996aYal;:jh:>;658:88;=;>><;<9787gghghfg676fda\\]\Y]`ab_][WTQLSXXWWUVZ]^_af77ffihd``aac_cgeccacg35mq==8l5c_`bag78977naY[`gfad478967645ccd55he57hc_^ZXVTW\^a8<;>;^:7??=94a^XTTXYUYXTRV7:;586^[YUVTPUZXVWVRDXlg8VZ?k[XW.0\XRRUWTRRRQSOQ^baa]]]XWTRTTSV]^/_]]00ZXSQRQUXUVYY/3642VRZ[WX``[ZZ]ab^VUZNGJOPROMHJKPY][VTWXPKNONOPONQUTRRLKMLKMLHIHEDB@ABHGHFFHEEEFD@>FMPOOQSRQTUQWZSQTZ][_`WVTPQRSUUSRRQPNMNKMQPIFFKQOLKKLNLIGGIIEJMJMIDEGIJIIIKMNLLMJHF@@EHKOQQZ^SXURPPUV]ZWWUTNIHLJFGNSSOJEEGMQPPPNPQQSSVZWPLIEFIIDGHGEFEGJHHJINRRTVXXROPSYWUW[][YZdf`f^VSSMKGEMTSQQNPUUVUQRRTUSVWTSVVE?DGKKHFACIMLFBDKIDHOMIILMQLHMPRTPJMOTVQOMQWW[[^fe]`^[TLHEFIIKIOVX]]WTPQU\ZY_]][\VLMQSNSUQRVUTVTUNJIPQTP^\a_ZXUUZYRPPSVX_ifZSNJNPWZWYZ\[\^^XTYTNKKMRUVZ[YWVWTRMPSTSUWXXVTUZ^YUSTTVTVUVW[ZZ[ZYWVRSXZYTOJJOUSUXZ[W\ba]^`UT[]]UQOMORQNOOQNSWX_^YSLGGEIDCGJKNLPMRRKKKGA?BNROJGMURLD@FJTWWRECJJFJPI?BB;:==<=@BEFBDEGNPPJQ\UQUZXUTICEFGD7EHE@CQVPKE<<@HLMNORTVTQQQRROIJJQVVUQRRUQW]`[U[bcYUYYZ_a]\][]_`ccchgm9piefkjn:hdda_a_Z\^YWVSMKKJKNMJPSPKKOTZXWTUUOLORMKNLHC@;=@GHJKC>x`_;8=>>@@AEE&FDBDDGHHGHGIMOQNKMNTSU_abaa\XZ^\VUVXXYVWURRU_`b^YXXZZ^^^\YYZWWXXXTTY^dg47766gdikl9:icfeaehifffebXTRRUY\Y]_[Z^i87llmpqqnjhjon668961YE4?SZ`feeWD=HGPUZWOIEEDINONKPOHBN?SB[WVYWTQPMPPORWSFBMWXXUSPOPQOUQLNOQTRNMX\\ZWXYYWXYZ\]^\XULOWWZWSGKOONPTXZZZXWX\^\VVY[\ad_YWYY\]_glkggklmqtsquwwvtssvz|yus}C|pklmikrsrrvywtrttxsibvzojstkjjhiklloqmjloojdfd``^`dc^]cedbdeb`bgkh`]\ZZ[YXZ_dhkcaf`XXZ]bdfeba^_b__ae``_`^dgebcnmhgmu|~zokommqv~|vv}}{KPOMNLHIG{wyvqqswztqtrqprvsjgjmpmpuz{KRUPLIIHGHLPRUUSSJBCnvtqncac`UTVTX][\Yiv~|pkkf_a`ca_VSSOPamgYOMMLJJKOUZ]_Y`c`\\irl`R[]WW]_hs|x~}}|z}{|yupmfdgehklrlhheejbQV`[UWZZ\`ikei~~vqttigic`dcb]]^jmkcXPNNKS[^]acb[UV\^[VQU^`bhic[e{|wtrmptwx{ymjozztlaanJwxzu|Rwoihoyvxrrwxmlgcgnmkqsz||IIqkrsqph_gnhdgkld^_`[`fb``fgkmlec`\_ed]VPOMMNNSUGOTTMHLLOOMTUVTTQOPSWYV>AQTX_`_a2469;:;GLNSTTVQa1rbZSLE?;:::99:9:BFGbmooifdhmkka[b\ag]X]Y[SPPMg]`aZUUUMRUNR^ZPNLH}|psQPvoloyrnnskde\_kpqrrj_diejmkpIDspj9R]PMTWUeh]TI?BW_VS[ZV_ZNOBn=UXOJECuWijP?F@EY`d\Vb`NszxL^\eedmzgdfnofihbS`ahY_s{}QKyxJLIH~{MeWNNFBJZedaVMGFJKOLPRMRX\bd\XVWZba]\QNZUFCAA<424\hJE@wGOSOIFHFKF@EEA@KPIF~y~|LSLqOPivyohlgkk``UKQ_``WOIFcHc~D~OS^\XfaV_`vgkFIOFqj^M^loqrlcqn`uk|{zue^NZfc\ZICGOT[VTeaZfka\XM_mnppkCNqbqrdK^oteifOgn`^ZLMGBDFBFQ`p^EQq\JISSb[RIZWKTRGLVWWL_9RdvgiOWYcqvwzrUeoq{bUOPYE[iYN\V4JWULNUfJ`\ato|jksrokp}rgZZxbbUN\]\PGLni[]hkkophZQPRPNNZNejmxI`lscgmiafqg[YWY`}qv{j]]ceh^h_U[^_trjb\`YT`egro}rd]`qfWXirv;vOLOPS\Vj``\`htGPOHHwoaK_\mffok]^`wLMDJTMn_^aikb\[[XUY[YUIq\ICLQVWUPWYTNQTZ[ZWVOP^\RRROG@@BHEAIPOQRMSQV\]NRNQSTIFMGBPJ=>8=G<9QQOOJOJPWYJMK=EA8=>:BTNENOB9?A=?GIFDBAEC;8;q:<:_Y8Vd:G`a][0210^ba_XURU\`1754655569::;<<<=;:87548956<89:<;9569;<<867>?99;86687ecbaabaec``]\\YX`bad`\\_][]]_a___`aba_\]\Z[[]_c566d[[--++)*+(''+*,---..-,*+,-./.H,,-211/-,+*(''***+083./131133457656; !DDKJH'(#DEG$##!?>5/+)('**()(t&$#$&(&%()**)*)(('&%$$&&&)*---+,,++***+*-/-..,,-,+,++))*,,+*-.+,)*,.+-11.-,--,//./.-,++*+/..-,++,*, g,++,*+/1,,--)&'-"*20/211-+.,..-+/311-/.010.+-///.-,*)($(+,+,*)*+,+-1.-00-,+,--+.0.--,.1273/-,,*-2,)*-0/-/,++0//..0,,,)(''&'()$('&%&*+(=+*))*'&'$%&%(+*)*)'&/.%'/((&%&%%((&&('''$%,.--*)(&'&'**,++'&%%%#&'$%''#"'*)+0/+)*..-+'&)$!$&'(('$&'*/21.,..*')*))*((*,,--*(*)&((%%%#""!!"'%%$$%%$$#" $'(''()('&('+.)&&'((+-)()'(*+,-,*(()''('$##%('%%&'('&$$&&"%(%'%!"#%&&&%&''%&&%$# #$%'&%*/(.-+**++,&##"#  "$##!"%(*)))()*+,+-/.*(&#$'&#%'$$%#&(&%'&)+++,..*(*,0-)+--.-+03150,**&&$"&+,**(+/.0.,--..-00-,./$!$$&'%$"$&('" #(%"#((%%'(*&#')*,)%'')-(&&(++.,.22/2/.,'%$%&$&$&*+./+)''*-++-,-,.+%%(*&+,**,)(*))%##'()%/-/1/-**..*(')**-32+'%#&')+*,--++,-)(+(&$$$),+-..,++*)%'*+*,-,++)*.1.*))*,++**+---,,,++)+-.-+(&%'))+-..*.21/00)*/00*((')+)'&)**--+("!!# "#$%'%(%((%%%" ")*'%%(-+&" &(,..,$"'&$&+&"$ ""## """&&&#&.+()-+**%"#%$#$%"'*'# !%'))*,,,+)**++*()(+..-*++-*,/0/+044.-0//231/10114553537844478: 8542010//0.,**&'*))+)&*+)'&(+-+-)**%#%'%$((%!! $%%'#!>..!"#$#"#$%''%&$%(*)&%(),++01112-+,0/,,---,+---.-*+-322/,-./02321./0--..-**.045536884244246654454.,++-02/13013878:=??><:<><&  *,/555/$&&,/2/(%$$$&)('%''&'530%0./31.+**-,,-/.&#+110..,*++*.,)+,./.*)14430110...0344200*,2220-$),,+,/12220/0122-.123673//12445 ;><9:<==>@>=>?P=>?ACB?>D$C=;<=;=@??@CEDAABBEA:6DE>;BC=<;;<>>=>@><=@?<:;979879976<=:89<:99=@?:898:=>A<:><7789;<===<;;>;9:=875559>;::AA=:>FLOLFDFDCFKQNHGLQTQKGCDJIGHK,/-,..+TVUU-+QGDHGBBEGGDBCEEBEGB;9;?B?@CHHJMNNRRPPO*/1.,+*(()+-/1/-+% "38610*(*(!"&%',(()5>DLJMH@?>;79762.&$#!%3>:2)%$#%*,03688279753@@D=<=:9<915;5//3348>>;>J\YLE@>?@8:=:9:98656>>>91)&$#)0338971/05851/2657>>:6@QULGDDAABEDGIKI>;@GID>5,,6B(RRNKOICFGCH[2RC@;;AFHIHKRTOKCHLFUPVQFIE>?<8;@???;7775;<:88;;==;6652354.("!!!##(,'.1/*())++*)$""#"""$%&#!!#''%&"')-,**(->80+% 1:;=:87:<:;62725:30534.,-HG+=4562../*-/,/85,+*(IFIBDO11K@@@AEII>=>B>9<556796:<;>H)$52.(/('+,*56/+$"/3+)//*1/&(1+,'#"!<-8:+"'#'48=94<;/CKI.:9?><**:?B=9:8;;760(,554-)&'5F*7F)JK0-331:7/2.596)7<31.'+(&&'#&-4>1#*=/&'-,52.(1-'0+&'..-'4*1;54)--19=<=8+6<:>3-'(/$1I92)//'..(*.:N+J4/3><8'56@54;90/07&(#%-'G<325:KG930241/-1-*$9+&"&((*+(+,+')+///,*&%.-'((%# #!"&&&(%(&)--#'$&((! %!'#$)'&&#%"%)* $# )%"&( !" 91-%.&%$#"&)*('%&()000//0/0.+*((..-.,))-,)*+-.,+,+++-+))(*,..)*̀  Ԁ~}~ЀӀ  ƿǹê󂇇􂁁žـ󊖟ր刐􅋊ýʾļȽǾ¿ʼνż²ľɿ½սƶ½˿˾ـŻоĿ¸dz̹ѿ󌖕¹ع¼¿ҧȵö®ĿՀ¾漯ж̻DzŹƿ·úƳ¾¿􁃂߀οʽſľù´ϿóͺзîʶƀŹɿ˶ºǽż€ɪݔϢùŭݿҼȺ޽ǻµʰ򅃂탆򅎏߀ⶫ»˿۫ɿµ־ϳ͝Ǻ޲΀Ť̳ę¹ο阺֠ڽʈĽƳ°Ϊ̿´ȸ̺Ķڼſſۼ˹¶ſưų틜»īꀃ>\]ada^]^\YVZ\ac`]^^[X[_bc\ZXZ^_`^^ab33443576khd`\XXWVSUUW_ii\]a_fecdhn7npt=BA~FHI||CC?wu}@;meaYUY[YUUVYZZ[YMJLLMPRSVXZTLMSUTRQQRRSUWZ]]\`b][VWY[^dcbehdcdb`u][^``[]de65dbb`]\`bcfkia[Z^^ZWX\dec``aac587795d]ZZ[]aeabdb^^^`34gef4459<::98:<<:;<<;:875d^c3dfdcc^\`feZZ]cnc_ada`c57898=A;667khd_^]aknkp:njmg_aa]Z`5iag7642c`eeej885fg652^[]g9>?=<JHHBJMPNILRSQQRRQQZWRJDEKLFKLIHFDGGEFIKOSTSSXZUSZ\[Z\^\WTSSRQOOONOOMNHCEKOKMQUPJQTSQSTRSWUPNQRJGHFILFDBNRQOLLKLJIFLOLILLPFAKINOPQSRPSMIKLMQTQT[^a[NLOLKHIKJKMORVX]\YRQ[c_af`[WWYURLJBIHIHJKNRRPQNLMQZXacZ]\TNKRVPMMV[ZY[\QILNVY\^ZY`cca_`^ZYOPNLS^^[]]ZXU[\VKKPRRSWVWYXWX[YVSPRXXYVWX[ZXMNU]e]SSWTUSTOQUXXVUZ[\a]\\]TOXYVWVVSPQSMJNSSSWZ_^\ZSDAEG7:KGFEFDBGKPPNOE;@HKMINXWOI=CHBLXWNAJOGLPM;_?>=>;9=@@@BA@@ELSUVTW^WWXVUOFA@EKG?3FJDDKNRS`YJC5879=<==>AGKQMNQQSTTSQSQLIHGOUSSSTLOQWae_VZ`]VUXWSY]WUVZ\___bcfh8;q9ldgkjlhgeb_\[^]\[\aXH?CHNRLKOOQMLRUPRWOMQVUSVRJLQQHHB>?GJGHLONQQJ@CFBAEIIHHLHGDBDEBEAEPMOOGCENSTW]_bfc`]USTSVW[`[WZ[YTSPQXZ]\WUX[[VZ]]YXWWWXUTQTZ\^dl:866eaeikn9jk76jikjed`[]WWVVX^c^^^\\^eihihhnmgecelqlig6:996[IELK7EKKI96LbhUPNEC@?>DMLJIQRH75ER|OQWb[NHBAHIJLNQQEIWZSQSQNLIEKNIDGIHJIHQVX\ZZ\]_\XZ^^[\]^WP[a`_YOPXXUUX[[]\[\][]]RQ]a]Z^_]ZZWVXZbdgfhmmoqxxvvxvtrrt||yyuw@@A|uqlqz{uqonnoqsw{tp{{ptvrpommmlljjjeea\\^c^[^^^\]YX`gdiltohhfecc`]YWWWVWVUVYYUTTSRQX^]\]\\^^c``caY[]bdefdcdhb`cqvqkdkkmoptw|sjmuyt{zuv|w{{{~||zqjnqrqrpmnmlouronmruyxtsv}ILOSQPNMMOWY]`[`_QPMF=`[gg`^GGKU[]f}vhdgggjidejia`^WQJLScic\UMIHHLPRNNNKHHMVYcqqkdb`ad_^`ns~yvz|~uuwlnwomjligenwnvte[^cgjkfc]ZUZebfrxww}{uwvuxutsgUT^bfijpok\TQRPNV`^dfedeimt|j[Y\[Ygnnpzjimrlbhuzxzgdnr|}x~J~uv{~rflswy}xz}urqppkfswh]]cdiuz|~{xrnidfjhfgd`npjfa\WSPW_cga^WTY[^_ccbeeije\VSQSNNEX>L_XTROKQVSPVXUUTQONPPMJLPQV\_`24446:<QPQSTYY~ixkbYZfJkjf\R^xafirVZc`|FA@VIxrgY[l}xph^WXWVLb[RM;kBIUZSUWTTSVJKWTRRXYXW__URSNMKLFIEBDKLJIGOMJVYONKHJMHHMMLYN<5eALNMTSVUROLKQUKPH6998BF:>RMFLLH=:8V^;a7:C[2b_05540^^XUVUTXe344475543:;:<>;]@DB>98;<:7896c88579;:7678=><967=<668787742c___acbcc`^\XUY]_dhf][c^\_]^`^]_aada]\`a^\ahh56675b)+-.-,,+**')*-/.++.-++-/0-*))+.//,,-3210-+++))***/56/.0//044224858;#$EEJ%$%EA@CD""9893/-*'(*)('',.*((# $$#%&')++&!#'))'&')*+,.-,**+,.2/./0//0/-N+*,.-)*--,+++))+./120,*(+,+(()*+,,+-,,.+*+,,/1../.-,,-.--+*-/1/..+)+/0*(*-1+*+,)'(32/,-,/47443/22--,)&,1,1-,.-+//.**,.///.--,-/0/.-+*)(&$%*-,+*)))--.14202-+,---..,)))+./-*.50,*+,+,./0230,***,+*.,,-.2/./.,)''('')&+  ,)''*)()++*--,--*(%$##%%$$('(+,**)(&',&%$&'%%$#$#%'((')',/0/-+*)(&&%%&'**)($)"#R%$$%$%)('$(/&*(#%$ !%''&%%%()*+,--,,)&'(('&&(*)('&#!#&%%(***'&')**'$#$B%$#"#$"#&%%$###&'')010,&('$&'# $&')**+*+,--+('('(&$%&'%##"$%%%#%%%&$&%&$%&'&'#&$!"%'((&%'*&*)')*)+3+#$#! " "R %')(%(,+**++*(-,*&##'(%()''$"$%$$%&)+,,,..+*./.../.-+**)*)(()((')$""%)'(+.*',.,+-//+*++(''$%(#"#+-+)&G%!%)'%'')" &#'((*+)(+'%((&)*(*./20(')''%%&%&&()++..,((-1-.30+**+)($#$#$''%''$%).-01*//*&%+-*'&,-+*++&#%&+--.--010/-,)))%('%*0.,/.--*.0,$%(**),,+-,++.-,+)+.--*+*,,*$&+040**-,+)+(),-,++..120/.-((-,+,++*())%$'()(*-.,-+&%!"""!"%('&'" $&('*11)$#)#(/-( $(#)*'. !!!!"! !$(*)(*/+*+*)'"!"'$ "'! ##$$,)!  !&(,*+----.-,+,)('&&*.,++,(**,364./21/...+.1--..02445892478:77420..000.,,("$&+-)()()('*+)*-(&(**)+)$%()$%" %'%%&)())'!"# "%$%%(&%$"$$!$!#,())$"#(+,.013421.**++,,/1/.00.,+*+/.. -++-//,/11/./-,)+/0147325888667687440.1/0/./36122213675669=<8869=?975'$%#((',<>,*(#" #'&$"&&$"(3/D),192*'"$))**+..%(24.-/V-,+'%)*(%&'&(''.016445441/24312241-5764/((./.-02232232133,+23213422311349:;:=?>>?CA@?@>dAFFCCEAB$$$EB?=AHKHEB@@@?@@BD?=ELE@CCAA@>??==<;<774025:7356656537;9=>DD>?=<;<;;9767655347743443268779:?><<;67789;><;AC?@KNGBACJMGDFIILMFDLLHA=@BCCB@<<>>?DA>=<;;;79>;340'"!&6;94+$ !%,130..,,-057>@?>=DHCJF:5:<:;<;<84..104?CCEKPPPHDCA?A@BB;1189=>?AB@5/(%##)029978;=?CL?66533<@@DRZVHA@DFA;;@IJCDJD88?AGLD@C(JHIHEEILLLHEJXSB>?ADPKEIGILOLGAN\b]IIGE@>IH;5488;ADGJHJIGHAGEB@;7;=<=<86BB?<863/.37<=8712555688577:<70,($#!"$1@4.+(%(+)%%$"! ! #"#%&'')++***$*3-*)& !&#$17;=:679<<5173.=>2023,*4*(,,;4464/0.+/0112,)('IECFDIS]TG984?EDGBA@:95489?=BFDB:30588:=C($897#.+()(.35/*%"&3:0&+40),*&(%#+2/'$%!7<;2 8?(*.3@K-0-*+-1176FC@76M?;?05/3KNHMJBD($B9=EEL'GBHF''LJJKFLLDP/+N('C>@E$G.4,&""!A*:C6378)$&&$'***'I*155:=86647<=76..64,,)#?'$#'))(+(IOF()JHLK+LKG@=!"" "%#EEGJI@ADDCCBDH(ORI6238=:42>:;8/1,**0010&B9#")"+'%$):;9/72/27026;AKE%A540),5@$;/9>8/F@04677=8'&8561'<#(,1.(+049>9.%%,97=DF7&$@7122021633?,/<,/1)(%G$('%,7:8*&21**(&39-!3<0&7#%3-74.$09B+<',*1;7;9?;ABH(:+&%/&/;3-8F<02,&+3G,O+26>:IF=72.0/3(5/)%5 $,-*+,*)(,$%-+)),+**/0*((&$$'#" %%"!!'&#*+%%$!#$!"$$#+&/#'',)+*($#"%'#%!!"'$ $$""(# !*1-'&&'*)&&&$$*-,0.///0*.-,*()++,..++/+*+*,-+*++,.-+,./,*-11- ̀~}~ŀɀ~ԁ ɾŧǀ󀂄׀ۀ;ûú»ſĺý̿Ļ½ՀDZȿ˻ƿþŽÿĿżɩºۀʻǾ˹ûŵžƕźÿ奅ɽҀ耄̾Dzģ㶩ԔĿÿۀǽºʹ¿ÿƼ솘Žź;ȿʿ̖ÿĀɾʲĿžŵӍŽĴ݀ʪ۾ʾεհ̭󟻹ûľιо傉󂋔ˀسǻǾێ÷ۅڴ©ֶ񱊛ʡȲĹ˭βÿֽnjղȽӿӥݿͻͶ־ƴހӱ¸÷ӯ©ͱԽ䑟Ѯ톒͵ūѻϽ˸ƬĹ㇘瀇݁ +e^cffba^\\]_\[ZXYYY\]_`a]Y[[ac^]^_aad69;;87olfa]XUUUVUX[\\\YWUVXXUQU\^affjt{yw{}~}}{wxz@=97874fedca^][Z[YVUTSRRV\]YUUY[Y\]Z\_\Zafffeb`abb``_ZVVWY\_][X\ac]_dj6hec^`ceb]XVW]]\adcefe244e4897gababcda^^]YXXWWTUXVah`b6DJJJ:`]Z[[WY[ZYVUZccVec\VVV[\VY^_ba^XZ^a]ZYY[]]]^_WRRSX\ZWRRWYZXXW[\Z[]`_bc`^[VQOQV[`\YYZ1223/WVXXWZ]YWYX[10042232043464XX0W[[SV_VMHIJKNQRRSSSROKJHHFEFILLJIKLOMHIJGBELU[XPMNPPMFAHJIHEFFBDEEEIIGFHLOPNKIINXWYZNEFMLICNQOOOMJMRQPKIIHJLIHHJOOPOIFHMMIGDHOMHFFGIJGIJHHIKLLPMIHE@?@EMSSRPQVYUTSWYURS[1XQSSPLMJFKGKQUUPICGNPTOOQSROPSUSPUQOGEHMNMNKIIHGIJMLLQUTPOSZZVWWUY_WMMKMMNMOONMTJFFJQNLQUOGINOOMMVVWXQOTSRQRMKMIIINPQNMQJDGMGJPTPNOONOQKPRQUWVRQRQVYTVUTSSQRRNNLIHIKNQTQRUYWTWYVT[b\Z_aZXUPNNPQSVI>DGLPSUVVTRPQUZ]a^ZVQKJHMNQRWb`WTRQPQQX_ca_YX\`_Z[ZXVRSTS[d[VXSQTSUVULJLPSUVVXYWXXYZ][TQUXZZ[ZXVSOSVZ\YULNQROWTVZ[XRRSTVUPSWUSUVVRSTRNLJMONQTWZ][ZXZZXULC<7@C@@BCABHRVROOFBGGKRSTXXLHHF>=BHOQPPG:FMI;ah@CBB4:D@?>?HMQRQ=e869>CB:?ACFKLRWVUWWPLKKLLNPQTTSVUSPQXbii`[]\ZWYYX[ZVW\__`_]`fi8987nqkgjkebiecb[Z[\ab`bcF;ADIRRSQMMLKLMRQPLKNRRRTWSTUPMLF>;CHIJJJMLGG@BFEGGGHIHJHCBAEFDCBHPVBSMEHNPPRTW\``a]\WTTW[^^\ZYXVTWTOUYZ\^[XVXTZ\^]ZUVVWVUSUY\^bell68kgehgfl9;97787iff`Z\^[WY[]``[_dcc`bbbf<>nZ_diu;gfj58765dXQJG68AGA:=RheOJHDD?<988E;A7XC=AJ`MTROKCAJFBFFGLNLGA=CPVTVWQMNOMJHKJLNONT_\VW]XX[`_YXZ]`c`_[US]`a`YUY[YXZq\]^]]`\X\\^]]^\^``\[\achjlmihjpsuurswfi{wpWFTWJ}wiSBVpsj`vSa_Jdspniqv{pko|zsiQRrzGEHGxLIIHrNTNIGHGGJUYXQFE@v_q\[`VHGKJPRSOKRSU[`b`[Y[dhkicQVcg[QQK:3220OqCJJIKMMTLILPzst;?GEHCyr}oiw{b^`dggeakcfcVZTLS\YQK~j]iIWRVMGLVae[YcZ\LX`Yhon|zvvufe\TiGMjesnvhYhtqmba`^gWSFLUI:Ler_OWv]FNUkqMkwiZ=Ro_TcgRSI`q^bRQTOG@{IFFYXfd^WM@GH_LEX[\UY]afq`KQce^>Mpl]jfCOTXelhdfom{riXLNWXZOUjlbm{vRKEXkp}t`Wexolrvkh`]hmckbjnbT\IK]`l\blNTfv[PH@^ki_UUOSU^_]\YjGjYabb`df`]Y]]iYf]pTzcaUTZ[\[T^rpmhccQX^c]cnvxmYNam]fenl_DOQPPNLFep}voVZevomkh]`Qjt~wbproBEw^M|vxsjkqvikhXUPYP__[OEB>HV[WY[[POPJKTOQQXU[X^g\TSTQLROGHJJSNJD@FJLQQNNNDEIMOP^WXN<:9AFKQTQQRSFMNOJGPI987<6:>9W8C<>A?Z42d133242^WRSUVV48544665648::<=<<<9:*(&$%! (!(:04*,,+($#)&#%%&**)%" $-1//0,+,+('')(*+++/64/15224773345685430.5652.+./..100013332131/001234246755689<=??=:;>>@?<=A!B@ABDB@?=@%'$F??BCEDCCA@>;;>@BDDEHIECCCFFC@=;964-*),1225534:;;=?BEC@=<:9=<;<=9742112/02321//00488677668;===AB?><:=>;;@FHC@IE>AFKHEHDABEF@;?BAHSNGJGDABFKKMMNMJKJLOIA@BAA@>:>:;@CCCA?>AKURMKFDOXRNNORRLKLLPQSU,+**,,,-,,N,1222331/,'% 20').:>;8;;:62.1458953((%"$)8;84+$$+***),SOM)05;=9:<>BDDDA?GKMNPKDJJIIGJPRIGKRWRKA=ADDBCDB?<==@EFDA>974/.548CMOQQIAFKC?=:>>CJIIFACECGC?;;6.'$$&,2?FHGFEDHK13+8=DBA@AEFCBEJKF?=>FOLIB84<999>?9<>=?CDCC@>CFFFDCA@>?>=<<><78@?<;9971.24796236664346776688/-+%"!"/1?)*&%&&'(&$#! #%&%$%''+()+,*)'/4-,*%!!)(#)47;8699;<942829=81242040*)H+99760262/-,*)--*)JEFE@:@@FFA3II<@DLE91.,D5G?;BD8421221.36>%KC@=/1,)$'3230*%'+,/3/(+,-.*$+0+--'$"/2<75( **"=A;/'6GHE=L8B>,<@GFJI@;,.BDKPJF%$EDCAEII&$BIKH,0,)''GCF%$&./-)"" <<;42.(5%)63FC:6@8,5<:73221:/.').&(7=0)/AJQM/!)+6<,=@7.,E60,26+.)2G8/5)*/,(#D((&00763.(%&4(#031,/334<0$*255'769<662/462726E71*/%#017.4=-18?.&#1;93/0+-06521-7%7-43457730-2180<02HM?1DJLPN31,*..//+3?=8644)-24028@A;-(3:/64:7- )+(%4;DA>.19;?B887./-3-30-%"!%,.,,-.&&'$%*%&'+)+(-6.)')'$'%!"#"'#" !"#&&&%%"$$%.(*%!#()('))5 %&'##!!"!  -+#! #!("%'-+'&&%#N.-.0/1/---,,,+('&(+--*)''((')*++*)+...-.0--/. ÀԀ؀}}~ÀĀ 倀Ė򁄅灊Ȁ؀ȾÀºϳ¹¶Հüþ¸ü¾ư´ӽҀº£½ĽƾʾĽı勞¸ǻ߳Ǽ΀聀ޠΞş֌ýѾ¶½ݻýü؀툖վȷɸƸ·º¼ýüľ聇ûƼހdzκػ¸¹凞Ѕ킚ӻĕ܀ʀԶź´ㆎȾó̒ɛÕ٢ݧжȭ͹ͧ˾ǼħüêóϭʿҜ̶²пڴĿðҺɸȿ萖ϱƼ̿ȼѼѺíڽ̷Ⱦò̸ť瀁』963``bcca\ZZZ\ZXYYWTUW[_^`eggeZW[]]Z[\]`e7=?;89khhf_[YY[UTWY\]\[[]_ZWXXVWWYXZ_jttrqpsv{|qkj{A=;okmoln9;;878lgfggdSB;:@C@?>:5ffb^\`cgihjl7774`[WVVX]f987bW_hk89;:87;779;:78lmmmlfd^[`69643`_bj988ib\YZ]bfeaaiidc_[fjbegcbd57e`^b6:989::;;;<=<9654eb`^\YVTTUVUWVURRU[a_[XXWX]a]YY\^a][]\^]]^^[Z[[[aeicZUU\gm:9je444f`]\`ccdb^_a13435cb36998TMfdcea]\^[UVUVVSSVYe>f\d:>==p`^]_^[[ZY^\Y]c_i75a\YX^\UUV[^[[Z\_c34g]]_]]_^ZWTRRUWPMSXWYXYYXUU_^XV^_\45/WRRX[XY[_//03311011/[WURSRX0\XRV266883144a]]Z/6896OHJKJOMI[YRLKMMMPQQKHKLJLOLMQOHLJGC@GIGMJFFILLKKHJJKKGBCCDFIJGJPTRMJHEDFJMPQLMADIL>OOOQQNIIIHFIIGIKFDDCIQTVVQOQVTLGGHKGBBHJIJHIIKHHMICDA?AAFMQSOMS`4\WY\\ZXUUTQQRRPPPOPNTRRTLHHNSTTNPROPSUVTRTOJIHMRQOPNGHJHJJKHHIJMKJLMGFNQXVRPKGCFHJJKNPYWUUQILJQNLOQOQOJF?BFGECMSVYVRVWUSSMKOQQOKHLIIJGHMQPMJSUUWTW_YTUWWRQTUWWUTUWYSUWQPPONNJIIMLOUXVUU[YRQSOPTUY\XXXWPHIKW_]WLDNTTXeWTUXWYYSSY__VOQRNFHMTUW^ea][X[YRV\ca^[XRKEHMSXTNMLQ\]VQOPRTURADHOOMOUXZ\ZTTTUXYTRQQYZ\a^[XWYUMMKJKMKLRSXZY[XWTQRRPOOQWWYVVZ^VSSMJFGLQUWY_c^VORTUUNKDCB;;BFGIKNQRSSPIJMILRVTSWWOHCC>::CINPH9F;A;[nEMMHDCDC>;:15E6I/M:::PdKPKHD>DHMHGHJJHMHBEK@FMNMLJNRQMLNNNRRRZee[TTTPX_fb]WTU[]ab\KRkebb_^_[[_b`]WWYZ]ZZ_]_Z[]]]ZZ^^[\]Z_de_[\bjotvvsrx=KTpzxyxsnljnqrqq{rsNPM~}p`_]XX^[`c\\hpiWV\intjcdaep~so~rg`_ccfeegfa^duvmfdadjnmieecbddc_dklliga[WZ^]ZWVTOQRQZZQSTUWZ\]][]]XTVUSTQQQROKJOONXY[ZVPOMJGGIJKQU][QZ353557:;=C}C~J\mGwh`pFhFQ6Wx@Gozv{gpy}tnNbFCD}jvHEIKm}NHCBB{IHHIHGEJQUXSKGAn~NUNJEFILMJNOLNHHKVZV\cYS_ffhl`OajsjYOIE:41T^DGIGKRSPTJL~y@s?KGD}xz~~xckv~y{g[c_dnjmi`c][UNPRWRDD|}wFGE@UZELRQVVY^bbP[`TP]jlundfaeezIqvythckumjd`hmaZUKAZZE@ShgET}KvODUj:SGZfzVErNEjn]^gzfWTTRPSIBCH?F_WkhXPKEHNhUpIQibTCPWglo_^YWPYnbG\Q^WQTSX``^XZesth]VQY^UVW]_il|wkPJP\U\fhPcywqqmfk_`ka[pf[qGUJV]cil`XJGYmd^QO_cXTahYL_mgZOcxk]_dc_fkjc^b]cccYtnozof]X]ba^]`ouolj\VVZad`cjojY^e`WhmsaaEKJMLEBsv~oYQ_rwMzsidl]Fly~sdjtx@DnRQK}ypljcf^NMKLR_^aSJNJSQPQPX_PRMJOKJQPPPTRVc_UK\dRHKOS[Z[LHECCEJIFOPRJCIRONWRRMBAJNMDGGFDHHBJILMPOI=729AE9^45@OUTKKPC@=78883>KB>?>]22c2a__1^YWRRSWZ276533556569<;:9;>;=;96:=;899<996fde58687:=>;;93576ad4742bdece`ab_\Z[ZXX[YWV[_`^]ZUY]\YZ\]\[[aeef`cc^]a388879 ++,./.-+*)(()+.--1211-))+,+++,.02121-+,,.*)*-//-++,.-,,-+++-,,/49;<>:;?BF@<635332002530,.//20012301221126545646::6458;>@BB?>A!!@==?>AC@=AD@<<;<<=?BFD@@>1?@>BKMEBCADGB5;DCB@>950-/14667757=ACA?AB?=;=><;:6543/-.157642/-,++.0039968;?B@<<==<<<965<>;:=ECEIJIEEC@@=8578<=?FMLEDCCEKMVVTMMKIIGMQG=>@?BB>A@>BEGD<@FJKPIEKOSY.WT*UWOFEDGRVTUVSOOPMOQUVJ-20/102/./.*&6,,-+%'-)..55:8453/13*)5766($$!#*7:51+(%!"%JNQRUNEHQ29??:5;:88=BDCGGEGJHGHLMIHJOPLONPURQMFLOI@=;==AAA?BJMNC5346=>;=EE?=>:465,&&')->MJDECF'D).AD=9:8;CKBBKPPIEAQ=;<<<;;><86=ID=9:8;@CB>==;99664:@B?;<:74577411/./..75/12234565342/..,*'$$$&#$%&"!%#  "&'"$%(*-,-./-,+& $#$! #&!#18846:;;985135:5.*-20)-.PL+3:414.151++-,,2-)NGEDA:>@BL=9BF7B??>5274.6IJB8BH92142/,-05CHDA>;(:4)#"28561*%((&/2!6$..)"9%01)!1.-+1"< ;?%F/3":23C*?/5&>S*.IKDQI:@PMNHJJCE@?*8KWQL&#$B3=I&$HB''D6@*%"%&JFNN('(O)(LKJI%$',//+&%!8H.2-)%&)KI((&@*+*,()+340492-7:9:<6+5>D<1+& ".%(*()./-1,TSQO*RMMLOFACC!:&##EJGECDEA48BEKNJCF82647=:;:4731/-,.2.&&FB<&)($.2%)./2./358,380.3::CC;:6710/=(:<618@<9529<31-(#43%+7E;$/HOM*;(%,9#%%16@( H;%!8;//1BJ6-,+,-/,&%*"':/:7-)'#$':.=')75,'.896-1/.'.?;$1-7.-,*.12/*,1882.*&+3,.-04<9@?P6*&,4-/57'3?<998460074/<4-KL;#+"*148700(+4:2,')481+694%0?<0'4>K;036516?<40306780LO??@FP[\<50-042335<@<:9/,+-25348<;0272*6:=1,"(&*)$D&A=CF:16:@ $2'(&?CHCQ?><783*,*+.412+#'&,)()(+/&(&%)&#&&%')()1/)!,2'!"$'-,-$ !! ""!('(#"&&$(&$"#$$!v#!$"#$&%"!$!'#'(!"%$%&%%%*++&$$&%/-/:+,,///0/00/-,,+))*'&%')*)('%&)(&&)*))),//0-..++/Ҁ逅~}}~ ~~~~  žȰހԀ׀񀆌􀈃»ĹǼϸƻ̀ƽ¼ýžǼȿ۽ƶϚ̀Ы̾һѺӻŴĽþҀþޒցҮǡ˄žξƹƹĺπϽŻֿԀŻĻ´ƾžȾ񀊈ƺжȼѿŢ튮򂅔§҉ټ钔􀓀􄊅򆏎ⅅĬɻƴȥῠÆܗɟ㷔Ǵĭǯ䆨ǵǭ˵÷˾̼÷ȗ̼½ҀŸȿʴɿѷϻĮŮƶ´ꀔǺüƺãòȼ¨œ䕅½ĵ适7:;5a]\]][XWVY[XXXYYV[\Z\```aefd]]`[VX\_^`l875433ggec``]TPQTUWZ]ZVZ^\Z]aeiklmhhheeifeflnkjelquunhc\[]chifikfdebflnogXC>LTRNLPVZY[]\YXZ]ZY]_^^addb`__a_`cdcc`^`]\^]]ZZZ\___]^_accdccdebdda^Y^cggf588:<=<855c]]d54eba`^\]]^acdcbadcehfb`^]]^`ad489;77877:99;;;::7igkkheijmlfffc]WVUU[adeg6865gn8;:78;:89;;:;<<=;777eZO_5566589678::6dab__\_b``ca^[\^`_aa^[Z^c``2455hefhg4f559>><97665c\VVUVYZ[[XWX[ae_[ZTSTV^db\Y\]]]^a``^\[ZXYXYY^cfg^WVY_fo7ebe56655445434d2687532d46788724=:jda[[[YVVXZXWY[_do8hei6je_[\\]\[XSUZ_bdcUab^]][Z[WVUSW[]ab^ZXW[da_ba1c_^_]Z[]_VSVWUUVXWUUW\\Y[^`d4/-YWU[]]^Y\Z[\143453/\][XU[ZY/^ZTW-0364..12]SUYUX/54SQRNOSSX`WMKKLORSSNJMNJMPJIKKHDDE@>@FHIKHNOLHFFTPKHDB@?DBAFIJLKMMOKECGJIKLKMLIKMGEILINORTXVKDBCFJJILIGFEGNX[XUPOPPNJGCCDA@BGIIJKJKJGFJHGHFEF@?A?ELPROORYfdbZVVUQUXXUPSUUXXWYUPOMOMJORRRPMPRQPRPMMOKMNKKOOOMOLFGIFGHHHINOKBRPLONPQUPNOHB?BDILMOUZ]^YSMKOPMBEGIJJFB==DFGJORVYVPMLGFIJIHLNJJHJIIKKOQRPMNU[a[UX_]\^WVNPSOTUTXY\\WUSQQTRQPLPTRQS\c_[]]UNMPRSTVUVTUWYTIILSVUOGJS[abeURW[XWZVPSYYUQONNMMPTTQTX]_\\__[UYad3hl]B@CBJTTLMRV[YH?LPPV[XNJLRUQSVWZ]]ZXWY]_XX]WY`ge`b`]\XMFD@BKMKPVXTQRORSQOTSSUUUQXQQLBEMQQLHIKNTVWWXWUIILLMMMJLIBFJJKPRONMMFGIOTQWYZXY\^RUEDLI?:=CJIB=:@?=4`;HIB6Pb3;BEHORSTT[^`_cbZTVOGBDDCGECDDA?>>CB??:bn:99C?=@EIHGGFEGJMNNOoPRSUTSTRQPPRUUZ_a^`e`ZZXYWXVSUW^dddjghjjlkk7kknllgb[^]_cggbb[VY[SMIGFIPLPPPSRLSUWTPOMSUSQPPQKIKICCBBDILIFDCAAABCGJKIKQSMHECBCACDECCED?<>>@DFHKJOPLMNSXXZ\Z\WRUZUSVXZXY[ZXUVXYYXYZYWVWTSU[d`dhhhedjhhhc`cdbb`cdcgfgeb_`_^bada^\^abdedb``eibaa_bhqmgdh83d43553X56E9eOkSTLNay_>hw[FVolxg`_RKLYbmSC?FNFKTYbbQCHT^eYh>S`cWR`W_^reTYZUV\\KFUOelUHQZ[ULHKbadV^je^WVUVWm|gnwn^UQEPae_dnxpzhfod^i[X[afq|iJRVaZaZ^dW_YVdhaff\RGPgqm_gnaTeowHyeaig\VZkqkgqtdZUvqfk|}|k^kseWefhpssqrc[UVgiaa_^_ago\[kqia6IBuvtyztg^\]bqNI~oe_hbZgcwrjeboxB:PTRNGxrvhg_UKKHJMY^^YETWQHGJMOXROGCIIQURJGOUWfbRD\bXRVWV]^bZQFDFJIEDFHSSOPTUPOXMEIHHKNC;>C=;=>C?7EVYR@8644DFLF?=FE>JL>R90T7LQMMTIB:38;<<;BC=@D^31]321^]YSTTPSYZa359633342369:76;==>AA@>=77U=<;;<=8:8haafl6999<>>:96e474^`256ccfd_becc`^][YUWYVUWXX[^]\ZZ]\YZ[[[]`ddh4c`_^[]bb135+*+"*)*+)*)**),-*)---,.0/,*-*'),.-.4^0/././.)&&'()-/-+,..-023567:8864376669<;<9;<<;840--.243124113..123/)!*)&$')'()*+)()+**,-,,-/./--/0/..-0.-.-,*))+..,+,---,-+0,-**'+.00.-)*--,,,-,-,,.0//..10021-,+g*,225421442.*+,,+('''+.././4/(!*/.,*+*--,-0-+)*,.\-+,-/,,---/.//*(''()*+*(()*02.+*''(),//,*+,-+-...-+++)))**-11/,)'),/4/./,+0/,**+*))*,**,,/050-/0.,,--.-,*'(,../.&/-**++**)((%')+,-*('&)/.-.-,**+*)**+%$'''('((''(+,++,,.(&'**)*(+***]))''&*)(+)$%'"%($$%'*(')((/*$%&')*)*(&()&(+''(((&$$"!#()(*(,-)&#!'%#"  $$#&''(s)'#$%&&'('((%$&$#%('())+-,&#"#$''&(&$#""%*,*(%&(''$# ! !$%&'(&&&%$%%#&%$$  "')*'&'(/130--,*,..,&$$"##"#" $'&)**)*)'(*'(*'%''((**$%&$'('&&))' +)'*)**+)()$!!""&&'),024/*'&((& #%'('# #$$&)+,-,)('$#%&&%''%&%&&&'(**))'(,/2.,,/./2-,(*,*,,+-./.-+*)(('('%')()(-2/,/0+''()**+**()*+)$$%)+*'"%)/123+*,.,,.+(*.-**)'(&&(+*'(),,,-/.,)+/1370##&"%**%'+-/, &('*-,&$%(*(*,,./.,(++-22,+/+,040-0/./,&## !&'&)--*))')(((-+*.()'!#&()&$&&(*++,+,+%%&%%%&$&$ #$$$')('%%"#%',+.0/,-.1*##)(!"&&"!!1%$ &2"""&(((),./,//+()'" "!!$"!"" /8"  $(&%%$$%'(()*)))+,---,,+***-..03524640/-/--,+,.375376799:766677752/11136722/,-/+'$#$&+(*++,+'+-/*((&))((()*'%&$!"""#$'&#!!!"!" +$&'$$()&$%#!"##  #$%'&()')(*,+-.,-+*-0+*+-.,-00.+,//.-.01/--,,-052476743534643453224324544545457676422578867657953435;?=856/'& $3,$$&$"$".&.802%&'#"#$()*))***-)#*'')**+,--*+*),../279786560,5><86434559<65?>:=945323::50122685022121/0367403987766458;;98;<@@??@=<<=>=<;<@CB?@A@>=<>=?B?>@BA:68=;<>=:67776761.031360***00+OKNQ*/25799;@BA<9:;:9;:<724;FGDGE==CDA?=::<7599<@BCEEDEEFHGHHGEDC@ABDHQG?@@?CC@DIFB???99BFINPMMQQRUWTOHKRUTSQSPOORRRQSTTV//-+,,0566543+ /+)-),.-+,0/-.139=-&$$.9;4/($##FGCFDA?JS.584/*578;<;?CEGHGEDCEJPSTTVWSQPROMRNIKLHA@ABCCDFCDHFHG?63:D?;;;72355BFDHNNLJKNJHIGFEEBGJG@>85:=?JMDDKME72-(0ELJKPNCEBBNNOMMNLJQMGFNSKG@==955646;<64:89=?<5/05;==75:<>HDAFDD@=?<:58<<=??:9:8DB9997=@@?<<:5/1532784799752221.,//-+'-75+)/343102243133121/1/.--*('%%&$!  "'+(&"&(*,,*+,--.,**(&'(&#!!"%%"149658:9:9542484,')..(*91L(+48114/0/.-.1340'ILDC?CB8;?<681%0)40:)%(2?(*KMAARMBIF:*/8K/-#AB?6@%-*%#)+&('7I*LL&IJCJNG')&'%&&*-,(&">G))(&%''DB$&'IR2/)),01122,.9866;3+69>?5,++!% ;())(.0..3SSRPNRMOQNNFF$"" $'#$KHIMQJDGG<@3/(++*255997-140*396D&@:4/9@44H?FBE9C<9;=666378210(B4@,&74B2('6J:=6 4*='*((1C38=,"0>9?E822+((/4>/&#&*%*-053+$%*-503!.75,)1,20E91)..-21-'"-+68)$*./+%#$/-0*2951,,.-.:G4;A9/++#*3624:>:@639307/,133>>:<3.,,893564447;0,4:5.%#@>JF>CFBB>;51122=H*'@;6/53051=;654:;"(*('%CA?A::5/)*)+*/110#,.*$%%(&,)%!##(*'#!&*(31'-/*&))',-0+' !"#" ""('&%&(&%,%!!#& !  ()&!!!%!%##&!'%%'(''&"$'&'S0-.03.)*,-00.0200.--+)()('&&&%')(('&))((*-/.1.,,,*+-.€̀ ~~}}}~  Ľýₓ̶󀈇񃇆<퀇ʼл¸Ļ»ý¿ý½ʸƽĽ֡πºб̲αѸλ̀ŵ¹Ž̶Єò_ȿºĿꀂϑՁݏꢊ􉙜ĵĸƽijͿļº턊̫ǸĶƾʾdzëº̽ϺҀ璙ĺӺͫͰ»˟۲ӔǺ漨ׁ󈑁񂇉ކ˴ʺۆݾԹ˲΂¼ٸͰز扭бװ̥̝Ū˽¥Ŷɵ؀۱Ϟĺϰ̻ӸöΥ齤ԿɈ˷ն׹εϽǥ鍐ǻ̭ʷŮɸ͹Ȁõϼĺ¯îĶˠ䕔ϼ聈W778863`YUWUX]]_]]YWZZ_aZWWVWZbg5igf_XYZZ[XY]abcc1cfedca_[XTPMLUZ[XVUQQX`fkmmpu{{tjgcdb^__]\\bgjhd_\YVY^\\]_^dc]]7>?=zlQNTVVQOSV['ZX[[\\Z[WVVVXZ]^`_`ceabhgc`adhhjmkhc]\]^`bbb47543dbc34cY]ba]\__^1ae4467i^[\]^\]`aabdaahida`bfhhk6776kg`_`c[[i;8754469:88:88:8ptrkkq98kec\`faYWZbgae5jifd`agmmgcjnii:978978878:8553dae55565j8;;9985ddbaad6h]ZX\\ZZZXX[_]^\]afihfigdd``cb236788998gaa]\_`]\[[YXWZ]bcYRRVYZ[WTUVY[]^abca\[ZXZZYXWZ][ZXW[]YY``fhg46557898654478778979867655babb``^YWVUSWXWX]ci459:98jb]]`a_\Z\]Z[^^^b_WYZY[[^_][\\[[Z\abab^[_a]^c232c11b3432`[YZVWYXZYWX]]WV\2205::52641YTRVXW]236620120.]22\[_]XUUY\110ZXXMKORRUVYYUUSRUXSSWQPOMMPSSPKJKHFHEEILNKEHHFGJLKJHHQVSNHHH@?EKMKECCGIJJLMMJHEFJGFGKLJLKJDAIDCJMMMPTSLEACEHHFDDCBA>@LSQHEFKJHIHC@BAACDFGHIIKJHDCFGFFFEC@BDEIPRPNPPPWbd\XUSRSRSSRQQR]\YXUTQNKMPQQPPRSTUQOPNKJLMLJGGMOPMNMIIIHHHILNOONLPMJMMPNMMMQMJIGKNLJILQTSNMKMNLICA@ABIF=@FNKIKMPPNMMKHEDBCDFKGBDEHKJKMJOSUNJS`k_XW[][ZQNILURRONRU[ZYSMPU][YUT]c[XZ^ii__]GAGOUWVWVVUTSRSPMJNOPRNMNTTWYWOLLMOOPNQYWWXKJLNRUVTRURYWUXWY]\[]aihilbbbNIPVPPY[VJkk7=?::`8FJKcS7:FHIOUURTZ]ZYXYWYTOGBCGIFDC?>?>=?BCFHIGIIFHKKMPSUUVVWTTWXZVSQNQQRSY[[^b^ZUUZY[\ZWZ`dggeghkkifkmnpnmkif_`bbegeacbXUTTSOJGGPOOPRUUNKLPP9QUUXTRMHDGFIOIFFHKNNJEDCBBGFCCDGFGLNLMLJJIJAee732_/>aecdhmnolhace`SMMUVRKLRHHEJ]hb[YNLQSQRdbPF}jsffkn\sNyyu|\QKnz|yr~cW_`rjadt=DCHLkhON[XUZ\UTLDBHRR@:5e=]\Gd^8bDIGKJQRKMFGPOJHF~w|}IHGGKFrKJMOPVWVTOK\[XTYTPYbfn\QRPOAmoHEGMPTTNLSM}GFIMKG||nt{~}vzwl[`jgmmrna]RQMOTSKKIG}rGBAkEE_YPNjhZRS`ifjmmqbSN`k]U^wwzwhHKvo|a`ri`]^YJtUtaMl[\ht]Q]^]LkvDWogPQnnV?^miSDSa}uTiikSNdqeWJIKOHEORX\M?F``WcO=EMggRahhnxnsUIUQKSUBQTD`~c@BXOJSILRHN\[`_ZXWN`avhia\utiTN_k[]etu}|gfkWWW_n}sjeU\`^ZVKXQ^\ohSUVJEOXqgvw\Mkxsqog]XdpgFVksu`YLcvdflc^nue\}t`TV`nqqqjplc[ZkxfWSW\[\eg_ab]f?Iwrhnvvgu{vzrdikag~OKykdfd^^llbT_bewAPTNPMpusmi^TLKIQQSXUQGTUL>JEOLV\XLFDK[ZQPJNTVkmWN]`VUbb[WZaRNHFHQZNHB>EMVROQSUUOCHQHLUJABJ9=PKA<>EOPKC;799JIHKD=LIDXVBM;;89?KSIMMF94;;BC86BDHNZa_0243b\XPPSTUY[220368:874356:59<;:?>:7fc5:6]\b65cbfb^bdda`]\[YXYWXWUUXZ[Z^ZV\[[Z]\XYbcc54faba^\[[]3-(')(),,--.-**+,,)(+-01/.*(())+,+-../////00.-,*(&$$'+-,+*().47_8;>@>84134221//0356410/-+,-++,-,00,+62%#(**''((+)(*+,,*++*)))*,,--.01/.00.,,.111321/+*+,+++-4*+,,'*..*)*+**+0+*+*++*,-./1/.11.-,-/0/0G1/+*,/++-566447-++&(--(()-1/130/0//1440/3523,++1./01.-.'''*+)*-/-/,++.10/20..-./-/-.+)+,++*)(('(*./'%&(+,*('()**++,/0-,,,+++*))*,,+*)+-)(,.120**++-.-)(((')+++.130-,-01/.-.-++--+-,)**)**,.-+,+*)()+,,-+*-/,-/-.,)()((***+(),,((,&$$')(*()(*)('%$%o!"%!!$&%'&'((**)+-((+''('((***&%'&$&$$')*($%&%'(())'',0-+'$$ $)*)%#%'('&(((''%$&%$$&'%'&%#!&$#&((()+,'#"$%%%# &)&! "&%#$$! "#$%%'&''&#"$ %#! ""%*,)&'(,/--,+**)+,)'%#'&##"#!!"#!"%(+,*()(' +&%##'(('((&')()*))'%''*)&'')'%%#&'%%%&*,+''&#!!""#'#$)'%&(*+)('&%## !"$&#!#$')'&(%(*,'%+370,+--..,*&'.,+))+*.,,*')*,**''-0+*+-33,-/%#(**,++,,,+*)*)(%')))'&&*)+,+&%&'))((*-+,-$&'')++)()&,))+**-$.2146221'&*-()/.*!"%&()()))((*,,+--,*+6.#*122440**+*++&%&!!'&(./+'&'))--/0.-,,+*&"&'#%)'&%(('(*+()))&#%&%'(%&$%&%%&''$!!!$(*1+)+*,33.,'!'/-($ "68!4$%%0(##9#%()'(,-++**(*(%! "$##!  " "#%'(&&'$&''(+.G/0./1/0.++*,-/01235750--0../--.26754789984688:998552122465334-+*+*(%$$+*5-,('')))--.*'&$#%%'+'%%&'((%""! !%$!"#%%#&)((''&'*$!#"!!"" #&$%%$&())*./-./...-.,-,*,14.-..-//..0/-.-,-1754675456652/02234446112113655563235774553269<8744438C?93275$#% 7*6"%'#$!,"#04:109.$)'!45!%$)/+**++*020.+--*,.,*,12+*,-/696424332+*/25552021,18539BB?76:9653215:75201344337;<;85115888678:<=;85455543679<>=<<;ADCA@>?CFFB>GMIF@;=<>??>A>@?AG%$$IF@@?AA@ACHB>:86+9BB=;:89;;@EB>4+&A@@CEKN*/00.-/0028@HEA@>:9955;88744>A?AFEBDHE=?BGHC96301149;@A@;<@A@ELLHGFFEJOWPQRA@IB>AA@E=@N.2/ONMOLLONLPMKOQLEGHLTUOMNTVWVX,UT+-,)((NLK(-1551,#0)*+)))(%%')),*/-)*+(%'.78.&! !&)((''(,1.*/21-.1225824>>AA=DJHCEFLYYQNRSNIJPYXRJKHA=>>BB?CDFCCBBA@>;9;79BB?9740/6=@AKOHJLJGHFDACGKKLPMLMOOONJNNFDEA<1 $&+;K'**UFEPMLLKS0QFKUOO1e\POTNEEEHE952/39:77:A=&-737;;>@?=;<8535986669;84000,.-...,'K*+I(-,10-)*/10-+--.00,''*))%#$$ "! !#&$#(*))%"#'+,**+..,.-,,*)*+-+($ !#!(57549=>=:95686.++//-*+-(*()4:612,+/0//:9-'GMM=PIKC;>BGO3EP,RAA?D4.)?HDEC?FF70428?-'*7 %#%%:8''1/+.0++'" %,,!-33%/,00$9.$*20"?">;:,&%&/9?4**(8(.G6PFIH\T5/@N;463;;):L*':3BCA#%''&#$&"#4'MEH(&DG(&+-)LG*#$*)&$#A@DGMG''&DA&)&=M**+..2210,P)530.2/,28;?4-.-+ 57('(*-00,,3-QMMPMGOMJJIL&%%('%IKNGFLVOLHJ=>AGEPOGAED<16:7;:=<53*,+-00*IGG<%F%)9('63/,;I:4.-4988;6AE;6/*5=3.4AA@?8))=8?>34;74121(=0E3'=-24=/(410'3:%1:7(%6;-0<6)!-3A>*:<<+(4<80(&(*%"*+.4)#13-3(!')86)4465@7;)$,)'/1 (-"1B0!,'%) ##),-02.,+%1.@972/>D:4*)4;114??IE@A669--+.7?=;6-1201-(2*32;G;,/1)&.1=8C7.A<4007??<<697321:G=0,041/43,--*+%?@:8AB5@925=77D,,@ET:26502:92'154; )+''(@:=;993.++*--.0/,%-,('#&&)-,%"!$.,&%#$((35+'.0*)0/-**1&#""#&+%" $*'%&(*(%!(!#)$ %(# #%"$! "! ('"'"%% $('))($$$%%'&d3-/341-('+.-10./11/.-+**)())'%%())')'%)**)+*((--.0.---+++,~}}}׀~}~~~ + + ¾􄍀žĻʾľрӿɽĶý˿ÿͺ෢Ƚſ۹ƿŀ͵˸ƿξÿԻ»ʷꉙ;Ź˾¿¾żþʿ½¾ľÿĺȿ܀Ǿż̼ʳóɸ􋔍ĽͦƿŽŽʽƼ¿ŰۀøӾǿȿƵπξ˺ž̾ӺįÒ̊넂׽ڂ˲ľѲʲûƬŴ̺¶¸ƾŝȴ࿑Ţςñ¿ĸڴ¸İ͘π̀ˮϞٲǼ繢ƭ懓لлĻŴҽ̤ư̷v󉔍4434555bZ\]Z[`cdda\Z\^\Z\ZYVUZ_dim7ic[YVWUTVZ\]]_bbbca`^]]\[WSUVVWWTOMNU`eebbflw|yvmmklliieaaba\YZYXUSXYXXUUSPONWj7klgZUTUVURSU_fZSUW[[\\[ZVVYY[\[[\_``^_a`\[`ceh68:98jdbaa^[[\_d45532223ea``a\UVX[`]^`c3icXWVWYY[]^^_aaa``aa]Z]bcdggi666`\^g;B5hhhee479:9lmjlptvuuupuyphl64d][ZYY\ba^`a_Y[ZZ\`bYX^e^[ako6fccegdbcbaa][_f68mo8898hk66e`]`cfjdb_XZ]\XWVWZ]YXXXW[_`cheaabddcbcdf5676f478534eab_`^[yYXWVSRSUY\\WUWVTUYZ\\_a_]^^]]\ZYWUVX[^cegf`]_bhi4d333567::88;8335779::9986c^^_a`][ZYXUXXUV_fgf458:8ib^[`c^]_ff`^cfdb]ZYY[]Z[\`bb``addd`^cb^^ad3f`^c25652`_`^\YYW[\ZZ^a`bf59@D@835651]Z_]]/0022521310[Z_[]2551[X]00121[RS[]^`\VSPNPRQRRMJKOQOMNRWWQNPNKIHFJlHCEEGIIJKLOOKGFMOMNGHKHIMMKHHHGHGGJMONLLJLNJGGILMNI@:=A@;AFIKMNJFEHFBBFFC?BCFEJMNNGDGLJJNOKJHEDGHHHGHJJF@>CFDFKMOPX^`^[Z[[0dZWTTVSOQSUSQU^\ZXUVPHFKQOORWZVTRRQLLQRPMNMKNSRMJJHGKONHCFLMNOMLLLGLMOJJJLXTLLOPPNNLKLJIKNOPNLLJCCBBGD?JWXPJJJNSOKJJIGGBCFEGFGEHKNKJNJLVaWQX_bXTSVWSNPUICLLOHHNOTUTWUSV__]XXbjbW[Z^aec^NEMNTVPNQSSPMNTSROOJPVWYUUVWVSOKHGJLKPX][^`MHPQRTVSPWX\\Z\ZZ_cfdc`_^_ba[TPOSQSURNJKROPTXXWUUUTSV\ZWWVWUUSQZXCQZVU[_cc_]ZXZVWZPA?FKOTWUQSTUZ__YWYXYVVWTSWXVU]ZPKMOPOPPJDFGFDDHKPQOPRPOOLLHA?BGLPSbXOMNJO\YTPMLSWSTM=dW`:A5<66DL>\9>GORUYZZ[]_\YZXVVPRSKIIGKJHG@?DHB9<79=@FDBBEKNOQUWXVWVWTTRRROOQUVUUSTUWXZVWXWVVWX]hiddfdeedb`_^^[Z[]^`abhd`^\[WVV[]^][be__^^djitkccb_]`gf`Z[aehhi46`57JEH==lvBiH):TgmvqCG86:ELIPONRSQOT\_\XY\ZWSNNRW^^YWX[aa]]ZY[[[VPOLHMRVVWXXUUY[^nronoojigglhc_\YWW[\]]`bhnigid\YY[\addcaa_\^`\[^__]_aeehkmqnlonsvvv{|xsljnsssuz}zwphgt~}zwxusqnqsqtt}ABuqsxxyvqkkrxqkeb_hljhfhhecacinpnkcWSTTUMGEFMPMIHHLXbc^acca_a`dhced_cnqkajsvzxprxvqpefaWXdggifenwS\XMPPOOFJMLQSSNHNNRRLKOU[]TOPSNKPY[\]\RJB:733456dfjkabb[SMMONOHLNONSVRLNRTX^abdedc]RPNNLLLNOJHHIMVcfkrszxslsvz}z~xsiehopojqvtyyvrollkgpwsywi`hog_]hnpvwxx{xmehouzz~uqyy{iZhfiwGQPNIwn}~rovof`YS[ijhcabQDIOLTVWbd`af_X^baeutrpcZW^ihfgc^WZ\\XUS\cfjk_ZTVX\b]Y^][V_gcYLIIJQNLII}DLMCGMKPLOSXVSOORVWTOKHMQMMSXZWTOKKIEHRTRQW]__\X`VMQWc1_4;<@HQQVTQ[_[USQOQTPPQQNF?AEGFB>952\UYAchddjrpkkf`a\VLPXUUPGHIHPgia`\KM[VS[kU~zpchn]v[tLyru_NPuy|{ywtjgigvDmff5l98AQfVQV\TV\`WOLELSDhef2`?[Z?[\mXWKB957FPVYWP=BGn`TUUzck~npLhEqUnqvqcijdpj_twn|E~wHEIFAFIFDA;;7/SRLE;kNJISPRQMIYNELPNNMoqNRSTOCGG|}MQUXTRT[\RKMOKQV]YQ\_^gUQSNGMSNJIJRPSVPNPJKIJJJ|}u|~{wfcgigkokc\SUMMQMyzksyu[lEG]PLl{mZY_b`cdaeknXOSkbce[i}stpeLS|vHhYqfed^ZOES]aKVcYuxeVKLNIGI?FkfXdfaVM_\^XOMNibK`]k_dkfQMGMOQJFGU`YTKG`\Pc]F@LcqgfnbngnoZ?JMEFBqYXDbdmYCNY[_\`W-?f^^P[YZ]akvofaZbtusVVbbe`U`OLophX\jyx}uukWQ]_YUR\btlJIPLBGUivqkh[bBsged`ST[duVKWzwtv[RZg_^i`\Ydrhm~bVNNeloypnjhhak~p\X_`WX_ba[VZ8FBotkbnrfo}xyzjshonRweno^`gg[R]dnwDNOHCKE}rrkc^RNPNNMVUTNCMJIRMD:CFIKCMG>8?72@FGNLC:<>==;6h;CA@?=;68:g_j:9k77:=?>;:mdb8=9a[c54dbgd[`ed`_\["\[VVYWXXW]YWSY]``]Y\cbcfg56je3e]X]~,(*,+,02220-++,+)))*)(*.0111-)(('''(**++,.-.//..-+++*)+,,***('(+1431147>=::89;75210//2233458<9795111458:998985674456645789;<>?=;>=ACBCGFDC?=@AAACEFEC@;:CIGDBCA><;ABG%&H@<>BBBCB?>BFB>::;@A=;;<=<;;<>??>;3'$$$&$#$',/-+OS+*+2;=;<<;8568;=984/2?EC:>DFP[SIF>=CB>>531.08:;<::AGMNMRPMSRPU4;7.X00-,'LLO*,,021-)PSSPNMNQLKMS,.SMRSUTRRRSRQTVV\//,+/2782/02.,.23100)$'+/0+++'#!!"""!$'*02*! "$&()***,,-,//.-./0/-,--05=<>DGTPMJHE@DEHJOMICHNQUNE@;:=AC@=BFDFFDDB?><;ADBEHD=8@C>76=@BCFHJLJA=?CGLIGLRWQPJB?<88<3,UR-/,114==9;>:5:=<=FEGG<538?>==<825564118:;>>75133671255418:83-+)-20-,+JF&)*&***,*.232/,+.00/,*(++$#&'&$" ""!!%'''%#(##&-(!()--)03/,+**-.+)$ !"!#!$5865:??;:84630*-2//-(()(KH.=:564)+5317@/KHJMIGPL>7?G;G5GV,RD@KNB7--EFGECA?98:6B0H2!0)M4A?COR>48<9A<5BC=GCG#>;%$C&$"%'#! !=.NK(MJ'.++,*G)1("'*)**F:0.0,(*.,)()/.01--1,OKI)(LSKKLOPOL(((MMQQKJJOQLEF>HJGMLDILIGC668879=:63./*,0,IKIDGD:=HB@0:''8/)4399**(+,,&$&.3/.($50(72" %4>35;5<79<,%)#$#7// 357)!-/.0*+(5..&--./26>971,2>:C:,.746406JN+*E=?7,/6@DIBK?90+13..+24?<''-,%'/:FA=53.2#=5653)-35BB1,0EK@>B1-3;52;6327?;4245//1.*%"""";@;5;=7=F??DFC7E>6:FI:C.@3:>31781,22:;#)+& &$B;<743-+.--+2//-#*)'##"(#&.-)'*02)*(&)+./.*,,+*,,0-&,* $,&%&"  \"#%&((!"''&(" !($ !"#%"#&&"!"$'"&(!%$!" !'%()))(&$"%(f/2-3560,+(-/.32,/20.-+*+++)*)&'(''%%)'&%(+--,)*.--./200,),π ~}}~ŀ~~~ހ  􁅂þ¼žπ臊򂍇½ŷ½ϵȹı₋Ľÿ¸ĸƾǾÿ˿γϵοƀĻ½ƿ¸мŲ´ɀ¿Ұ;Ž¼жý¿´þڂ̀ݵ򈔞ݰȶ¹ſ¾Ҟ¼ýͶŽ¸¶򁆒󀄇ƪ¶йǶǹżĿ󁑛ǶꀎóĿሕ‡趀캌郖􆏮ٜ훤νق鶆¾ƸǵӫЅǷĶ닅޴կٳ˸ƤǣȼɯըѶӺʽɰ؅ЪȺʬǴݵˠ߀Ǿ׽ȡ񽪖üѺŵ틎Ǫӹ˿ǿŴĬπ耄߀Vb3b`13eddba^aeeed`]Z]aYWY\YVSV\^c7:8ga]\ZXUVVVX\_\^cdb_]\\]^]]^\WUTSQNLR]]]ceelqvxplkjffjljhdbbb]XZWSUZ\[WURNIHJORUVXZZZ[ZVROORXWRSUXYXVTUTUWWUVYWZ[^^ZZ[[VU\_adec58:85h6keaa_[X[]aaa_\Y\]Z]a]YZ^dl78gdjjf\WUZ][Z[^^[\^_[YZ\YTW\^bca`e56f`_]^]\]cea`ci77njllmt=nACD|wmjnoomh\ZZWXYYXWU[_ZWWZ[ZXUW\i`_^adgfc]^^]\[X[\ZZ^_j8ikkhl6c`ai85`Z]a`bh5b[YYVTQPPQQRSTTUWX^b_Zbhhgc`bb4768:;:84h44cccbbae`\WW\bfb]ZXX\]^\[Y[a`]^_`b_[ZWUVVUUZ_]]bfbaf68gdbbf348:89:8668974687886c_]]`_\[Z[ZXYVUZdje_aaba`^YZWYbfechif^^caaa^\[XZ^dd\]_cb^^`bf343e2cbbbcb_]X78567aZVUWY\^^b^YUYae568B@;521210/000^032232331430/\SJQYS.44ZZa__\Z[V[`\YYWRLLRUTVWSQKLPONJHLOLJLOMONJKJCAFHORKKPRLIMMHMNHHJNJHEGHEIMJJKKQQPPMOQPRSKLNORXZNHC?FFCJFEGHGFEF@<=DGECADILKIEDGHINQPORURRTMGABGJFCEDA>?EHQXWOLJIJLLIHJIGDCEKKHNSMLJINUWZ]\^YVXVVYUSSUVK9BHIFHNHJOQU]`\VS[dea]Z[_[TTVTX`dgaWS>LPIILLLIILSRNKKEHNOXYTRWZWPKHGHKLORYY\]]WY[WQSYY[]\`]\]ag_Zaeaa[[aa[WSNQSPLNOSUTRORWY\[XTXYYY[\WSQOQQQRX[``VTV[^`bb_b`ZTOKFGOUSPQWXWZV[``[VVUUUSVTY[]dddbWMOMOPRQG;=CAECEKMPQTVYSKD@=COIJJJS\UMIEDKSTTTUTTRTPMV]Ifb^5>?:>::EG;?CIRXZ[\_^_]^]YZYXTKPUNLLIKHDBAEFKI<58:<>=878:;=?ABCBAABEBDNVOTQRVTQNKOZ^VUSUUSRPPPOPPQPMLMMPJOUTZ]^\^`fadd_bdfmpmjb^_dj6hkia^]_aa]VSU]\OJSWXQOPRQPPQMNSQPNPPJKJIHHGEBDFGEEDDC_EIHIKLKOQPNMLFEHGGHILMHAABAA>::3TW`l>;9AFINOOSUVSWUSQQPPOONPQQQTSSTTUVVXYXVWYY\dg_\_`b`][]aa_YWYZ_kli_YZ]^YZbkoaY[Ybfaecbdca][\^]XU\]\bYV2.F2_SXIBB>WBR_b9@ED@DOOJ<=@S78Hr\GG?8A:9:@LKLPKKMNSYZ]bdddc_[TORY\^\]]`de_]^[WVZ\ZY[WUUZ[[^cb^\`dknghkmonlmkgc[VXW\``abcbehfadf`[ZXVY]\\]]\]]_^[\_bcaac`]_holoxvljlmoquviRauwxw}|ywrmrz{{|tihnwxvwxw{wqonopoljhkosredhkpkdbfjnia^\[[_enm\JMQTQRLGzHNMMJLKKPW]a]\bdb`YSU]cemtxvqh`Zeoooupj_UXccdfkt~vz{ORNMQPRQLLKHHMMLJOQQUVQORSPONPVY\]YURQRTUVTVZ^YH@>9dihifgiidXPWYX[YVTXVPSRROPNNVYYXXYZYWWSKHJOQQONMMMU^ehm}}}xu{td\ZY[dbbfedmrortjd[`qvuqf_X]kofafffc^fjomjeenrpfk}t78?MUZSOJEFaVWmV`NjaYpE~lNoheaIO`kwm^RZ}udgrFONODvHF~|GMH955.QNO@HiOLQNKKKHOSPIJQOQWJwjUUW^[REyzQQV[[WZb^PJLPRUZTTZda\[RPOJHTWPLMOQNQXQPMHNLKIL||QyocfklfepeVMWWKLJ{y}zvwrtnsvJFJJKauuXSU]a\WPZ_YLZku^W_cvA~ulK~{xabe`_]ZTXa\VTPMgwgYJICGPIO\cVN_UbTaqNV\[XOIIFZT\WqhONIDEJNMPQRTPRGGYf_\TOGLVa|eaWhek{jNNIB;tw[TBIP@aPPYbi^LO\^ciZ^`ZaLUbdexfQVkHQlSVbrgLGpTpOomnib^YuqNTbhudTkkL?EMQMQcv}rd`em|vofd\Q\bcrnw~gmyxlTWY_]bge^^_hzPf]PJZbdsrddtrcflc]Tcj`ZX`[QM[?Fq{mpwrnwzqnj}riktrbdiafqhceWRddbqsyGJB:>@ERHBIMLNJDGPMCEED=8CLNH:6HNVSF:5C?79>DEV`ZSNUZ/\`TVTUY^ZQLX222343369;;589;:;BA@?>=7l=A==><;77>=ccn;lm68B:?>;8kg_f894X^aigb_jd\[`a^]YUX__]^\]\XVVUWZZZTSWYb^\beccceg775c`XT(--,--/.//14421.,++-*'(+*)((+-..+***(()))*-/--000.,++,..///+*)(('&(/0/0338<=><9775335651/11.)*)&&)++))'%""$&(**+,---,*'$#%3)(&&(***(())*++))**,---*)++)'*-//-,.10--,)&&'*)'')()+)'')+/-+.-,(%&),++*,.-./.+)*+*((+-.-,,./++,-,**-.*()-212335 ?;93242101-++**+**+*+-,)),+))()+10/-,,022.,,-,,*+,**!,-444415/--1.)+-,+,.)())('&%&!'('(*--+*.111.--.+,+-/-+((+021.+))---,+)*--,,./0-,*'()))((+,+-/+,/.,-./-+*+-++*))((*((*/3/,---,+)(+*,3410342/-0,++)))(*-10,,.00.+++,./.-..-,+*&,*(''*+--0.*'(-.)&$ "&"##&$#""$%+//--,($$')(*+)'$&(''%$%(&%&((**)))$"$%*.('**'&**&*+&'(*'%%&'$%)'&((++**))+++-()++,03)&$"'($w'#!$%%#"""%%#"#&'%%" """%'&%&'$%)'$"%#  !""!"%'((()),1-+*)**,*)*)&$#!#"! "$%&()))('()***&"##"!"&&&%#%))()($'%!$&'%%&'*'%)-+,-,*''&%&(*'%&)("" !%'+..)('&'''$$&&$"!#((%(,''&%)-.02/.--/--/-+)*,'%()&&(%')*,34/+*.21/---/+))*(+"//10,*%(&&('&$$&**(&&#$''..+*-.,'%&'')--/10,-/-)*,,---0-,+,0-,2411/042.+)')*(%()+,,*(*,-//-,//../0,*)'())),.10+*,///11/0.+&$# "'+)((,,+,*.00-++**+*+),,.1021+%''(()*+$ " $""%'(()*,(#  *&'''*.,)&""'+*)*+,E)%*,"-/0$$"&*--,-../..-+,,+)$%)##$"#"!!"%&  ""#"%##)/+.,*,.,*),45.+++--+**+,,+*)''((&),,012113646645679;87311366774312221,+-11($+--)('**)()()-*)'(*'('&&'&%"#%%#""!!"#"$'&&('' *,+*)*%%('+(*'"!#"!!**07!#&&(((+++*-+*)+,++*))*++-./..00/./10277203553112442.-//0015<<;52467327=A93433317:787666520121/.00/1*&+*.%""!."-45 """"!-'43=1#$!"$*''*''().113798641/+*,/23234799656422564243203334654478<>;<<=>;:;9751/0/47667569<:67963321355467786664447745665766;BCABDBBGEA@><<<9:;@DFE:7:=@>;89;?>986789994)"$%#$$$DAEKN+0//,.0.0489659;:81**177@GRWRIF@;527?@>@<3-+07679MPHJPNNMLMQLKLMECGJRVPE:5434;;:;89@A@BC@;26ADA?9516??:6;;;86<>BB@>>DNXTQOWXUBTWPQSPLB;=FKNB9*3780H=?GNSPOQSRPQNJEDKJKOQQC;>9596445425;84111218?98=94710.2,,334.3750/.)E(*+)"?F&./)'%&(+-47554/123322/,,,)##%%%" $! $%&%%$#&% #%%#"! *,{*.4101.)(+)()*("!#%$#!756789;::851/--66240*,*ML+4;10.-+180194(KFAMLILF=BM4>4M^,S@T.+P;,(0?HJCGE?>LIC(2$50)"!+!070-262,(('+!)#(%.#1+$6)>%,/+)&$%A-&$1+2'54-7#;?A-"4393"&06@:4.2IB88>GGJI$(')$:&%@=E%("! >.,ONPQK-+(()'+-*$$*(*/'=7M1.052-&HCDOQ.,04425;8-)*+-.20.19733--/+'12,(+.0,-3-.-)OLL+*+*MMPPNLONINJS+SJGDQ/QGLKMBLPKIMLKMK>67;:76<90+11*+)BDKFHB=B@B?;@+(+)+;CD?0.0441.*043)/;H6176@!B@<9S+AC?G=/4443//+-42/-,*2E>3,%&%&-*)/91(2,3-5>*-0.,%''%4.4-;9**)'((*)*),/*,&$.610-,$%+4C64+758?5&(%" >>3."'%:.).354.#"1403)01-2',333=4)-7&+5(.8?8'%@NPQ.:,?967634C[RM;'-5:?7+8:' %*.++6@A:4136=@>954/*167;;ESA9AFJ<)-151298433:FH-O74-(/44=?53A>57>64.:=40,*% $"A;D:9A?=8;?>;863b`_[VUVX]`^]ZYYZ\][Z[\`_]^^`_^a]YYYWWXY[YV[db_ejgdb``ace33367779=:754554gb^[ZZZ[[\\^^X_\Z[[\\[^bcdfd]ZZ[_a^`efdfgieceehg\]`_ZVY`b]Z]_adh5554d``]ZYZ]b76fc`YZ^fifcaba_abaaadb5?<61..2110.Z[Z/230/13325671TPOTYX[..\YXZZQMTU^[VQPSSLKTWXVRSMHKPNJEFKIGHKLMSNKLLLKJLPMJKMKHLQOIPOOPSRJHHKMLQQLJJLOOPOMOSSLFFGIJHHJMPBAJONLIGHGFEGFEGGIGC@DGJLNSNKNPQSPLKNOGG?:^\45a03:CECFDDEDFIMQTUWYY]343/[YYX\_`22d_^_`b_\\_^[XX[UTXQNNPUWURSUUVSNLMONIDAQYTRRSRLHHGEEEJKKHCBLGFGLNMJMOPNRTYWSRROMNLKLOSQONQK?DEC;ADEGIIJIGGIGGIKIHFDCKMIOQMHGJQXX\^\XWZ^[WXYVSRSRBCILHFHJINV[caZUX\b^[YWVXTUQRLOSWcfZREJOHHKJHHJKJKMPMJJMPQQPNOQONMMLKJMMMRTUVTQTUUUV^eed`_[\a^]\UVZUSVX\]^ZXVVQNNONPTSRTUVVY___^`[WTVRRTOOPQSWZ]_\\_cc[XY\``YKMPRYdcVROPXZYY]ae`YSRONRXXZ`bdaaa^PFPRSUTKACDDGJILNPUW[[RBDCCDEBEJHIOOOVYXX[[cha\V[[ZYTUVQONKIGFB?98<>;:<87699899;;?BAACC@@CCDLOJILQTTSQSWXYYWTSTSSRSSPOQUQMNKIIOLP[YVTZ^abca]bebbcbab_`dffa_\]]\_`_]VRV^]SLOOKONIMOKKMKJJFECAFFHIEFHGEDEEGFIKE=<=;<@@FKKGNTNJLMJKLIHII$LNKFFHGFEFEB;897:`W6?HMMNRSPNSTTRQSQPQTQRRSVWU[a\XY[[`cca_`ba][\`ff\ZXYWUUW\bcga]__\[^emlg[NQY[X\^[YY[`_ec^\[Z[]^YW\TH\7V_^HKGDCC9ZLL]8[IEjuubsvIRrdxfPZcei_gy~NPNIEFnwMI<65aLEJ?[zISGIJEMJOMJFIKOLNUWTVPCsI[[^aUMuoRQWX^YY]ULIIPUJONYb]SOJMRPKLKQTOMONMNNOQLGPOKKJK}~|}|nklneag[VPXULJDzvsFDn`@DLAt@HXux\UV\fSPR[\hjkohYT`wv}~xrly~tv{ldfZYc_UV]XXYRQmtnfWPPLIHOZYNI[iSPEZvQGW[U_UXLROY[ZOGOIHHW\SNYUGDHPS]abpaIGHLQsdZKbeb|^QH>oEYKOGKYvuwi^H^hWYbZboh`dhfXHW_ackhWWYwNz_YM]\ach`k|HrMeuha_NY{WU`ww^f\KNKHQZbulf^eomoluuvm^S\dtxnjjcppUOZ]ma_did`]mvvwsi]VXbbakr\frjcfaKPekaWSZZX[7Bmkqwruuxwvtoi{qmqsjhjafegemhVYnoqzvkB~osD~mjpmuh_ZaOBKPZ[N@DROKKFCI\C@FRNP\JL^e\RQUXQPWQROMOQXUONS[VL>CC?HPQQNGB@;7DC>JHCHD@8DE9;7?J8>DKMJ;=GE=>ILJC;=@NOJI:B?BECDECFGGIB;>H^`[XTV\_``WWSPSVZZ\\]13314778<=9888:9<<:>?BB@?96;>989878Mk;?9fjng6659=@<9hb_^ei5e^bf6gc`cb`]]Z]]XX[\_]Z[][YXVUTUYXYVQSVY]`__acgh45d_]]?,,--/.-.001224420-,*')+)(''*)'')+-.-.0-+)'()+-.--./.---/0.-+,++*('%(,.11-1:;7574211//00.0242,+++))-/0.+)&&'&%%(*+,.-+*)(''&''')+*)***+,,**-+(()*+++*)***+,+**-0,-0,,)**)&%')*)(*++*-,+*+.,**)**++*+)*5+++,-/...*+++*+-/**.03579!%(&$E=:851---+,-+**'&(''()*+..+*-/.,+*+---./---,,+f//00-/222343442/,*+,)+0.+,,**((('''((''))(*+++,/20,,**('&&'(+-..,++*,--,,,-,+,,..+,*3))**('*-+*.1/-,,.--/.,*(*++,+)(+*&-+u,..//1/,+--//-/233454/,,+--(+.-*)+00,+,,,.1-+,+*)()+..,()+021/--,+-...-0/%%&#""%(&'%#f "*,)''*)$#())('(%"%('%#$'%%&''',*())*)'(+)(()('*,,)++*++,(&'))(++((()**++))-.(%%'(''&'(*##)+*(&&&%$# %%&%$"$&''(+(&)'&#"$% ..*!!!#""#""%&'((*,+,*(*+/++,./--.-)%""%#"%! !"#$&()++)''(&"#&" !"$#$&'%%$&''&"!'$##&('%&())+,/.,++)')'%%(*)((*&####&%&'''&$%&$$&&$$#"!'(%')'$%d%*..01/,,/21.//-+*+,%%))%%&&%*/273.,./20-,++,*+)*&'*-32,)%(*$%'%##&%$&()'&%')*+)(()(('''&%&''**,-+))*-110.-++.-,-*,.**-.011.,,-)'()()+**+,-+,01333/,+,()*('()+-.//./032-,,-..*$&((,21+*'&)+*,/130,))'(*-./000./0/% ()()*%!"#%&%'''+*Y++' ""##$$('#')#"',+*,+./0/+'%%"""!#$#$(&&)*)-.+,..141,),-,-)()%$%%$#" !#""$%#"##%),(&(+,,--/1211/,,-,,,+,,**,*'('%%)((10.-025454367434344224442113213221-+.21*'))&'($')&%'&&%$$"!#$&'#$&&%$%$%$&'" "&'#(.*'()&()('''*+)%$$##$%$"1+!&)()++*)+,..++**++**+,.,---//.251/011454434531113661/./.,-/36896455446;A@=5*+35356211254752100220**-)'$)*%((&&$2)(2 """ %#"*-12-A*""!!# &%$''%!$/212379975410..01478;=>>>=;721454446546554899<>@B@@=<;7664555434688867;<=@=::710//01321465;B@<:9:=<;:833674783(1>ABDFGBABBABCG%%$DAA@ACDEFC?ACFGDC>766=BA??;;:=>>??>95454356430*!&!""&**('-7><70(*/4566567:52./;DDKLG=546>FD>@>;;=4.4=BACC@@BEB@<=A98DJKIEFKNSTF7I+*+++./VPPPRTRPV-,.1100,Y,-//--./-03379;7311/0..-/63012210/1033110(!+'&(+)&(''&&'%&&).+&&(&$$$&%%&&)--*(,1259:;=@CIPNMDEKMLLPSPJEDACHKOUPG@<855334:;??96578686<>?B;6:@9176<;:79;<=:339=BKQOQYZ[SLIIMKIB<>CBHOLFEFKMMHHMR,+JCHLIHGFFDEEB<;=?A@?<63444665367757><>2TR,/-178040672//136540.2552310353374317==B??99;802788<97242210.+'#!"!%#'+$!#%&).340135/132210..-.-(%!!!!"!"""#&$$$)*)&'%-/.-,,/1.-//+((*)'%()&$'%!& "368626:;<:3/)(/94+O++(H)--76,.0/0//.21-'GALOGGFGLF8?76!'370/,+*2=90-**/%<8' ' )&:-)&/(%;/*,391.'$$F4(')*/(=+ .&#DD399.99%.:3IB6)267;58CKIBC))'&%%E8=HI'#'*E*1')*M'+(+*'%()*'(-0-.*#<(5556.*GA?IJK/-1263371*((-1),*174-,**.,***,.++/.,,--.+(OKP.-+*LKOLJLNLHJL)*KGHFKVMKNOMHMMJGGKKJGE;:/,.29.,,4378:?=306A?BC@>:EJED:=A847/.43,.3/.0*(:<63,(+(''+44,&0;,-%3E*&/-+0*.'.*114,$,)(%-1++0*#"'++242=3&&%''=2,%540@H-*& 8'1,.&&+<:>60%27-.61/651374.$,234@:,-0@+>//'3433868B+=$7>E632(3QPKI0D06DC270&)*&).3@;4.29798<;=91)04>C:;G^[D5=A/*0/;4459752>DB?@:1/06766-&&%$% A97;B>>?EDCA>9EGB@@979;76725573:7--9:=B?5#C:;%B97<:@8415,%*.66,$&,*&%$!!0 #*&&/#$/4.'(*+&&*'(%$''+*&#',+&!"'%%$! #"! # "#"" !"# #%"! ! $&&$" !#%&(%'%#$#O&%$$#2 15614/-,/1/*-/1.+--,+('+,("*(())((''&%')**)%'(*+,*+-.01/,+,耓퀂}}}~Ӏ׀ ʾǿЀֽ߀󁅁ǽ¾¼ż샎܀Ž˵ö÷̀ùǿÿþſ»¿Ӏӽž϶ɀͿú·ĿĹ½؀÷ÿïƿֱʬبĠǻþƾĺľ̀Ǵ㉖Ҽ¿ֳϥǹĽ½ɷĵο؀ĺӶ䁠ʱïƀž»þҷƵŲח֭ܝڢʽԴ񈏎χ󉎃އԽǻނµÿ야ĬհȀĞӦϭŷɑͻጀ̴λܾ緧ɨʬ­ʸθ·ɿ⃈áξļӶ¹eebaa`\efcddffgeaa_]\WZ_^]XUVWXWTT[f446799mcYZ]YXZYZ\]^]`cdea\XVWXX\^]ZWQLLPWYVY`ggfdefac`\^acccff^YZac][YY]b_\]ZWTQSVZ[ad`\WVVUTUVWW[[ZY^`[`d\RRTW[[\Z\\ZXWX]_\`ada_a`acl76hfdca_[VY`_^abe233565da478555653a[[]^ZTSVY\[[Y\\ZYYZ_a`ccefb_[YXWY`g675`d69<=?EFFIHILOLF}zqid^]^_a_]^]]\\ZZ]\Z[\^__^_^\\``]`a`\YW]`__[ZXY]a`^ag7997786b]]`^\cfijd_][\YWYZYZ[[YXUVWZ[]fib`bcdgg577768717@A@@@>852c_^]\WXY^`a][[ZXZ__ba```_]_`^]\Z[[Z`a[WZ_eddeb`bd`[]_a`b564568676ffghga_^^UV```cfhb9faeb^[YZ^ceii_QY`\YV[`bbbeeddhonlb_]\YW[`b]\\]Z\`cg44heb[XXYZZ_a\ZXYc586_YX^`_bea`20/8C<40/2310YXZ\0342.//1324593RTWY.\\/]\YX[^\024854e\VRQS[[ZZ[ZVLHHHEGNNJMOLEHJGFGIMKHILIECGHJPMJIMOOOQMHCEHINQNLLKIKLKKKLOHCAFHHEBDKQMEHKRPMQSJFHNOOMMLMHFJQRONPUUPPPONICD<^UOLXU]58CKNNPRRLIHJLNQV\[\_\Z_0]ZRSRPPPQORVZ[0456665ic[W\^YXTONNUUSRRSRQROLKLMJCFHQ[XSTRQKLNGDHILLMLFFLFEFLPPJMPRRUUVRKKKIKMQPKMRRPLMF;>AC@EB;653gn8<97:9;;<=?@@AAADEFJNNIHLSWWXYWVUY_\VUWYZURRQLPVRMMIJNQQUXROVX\^]]\\ac^`dXY`cdc^\ZUVX[\^^`[SLOSSRTURLJLLMNKJOOKHMLIFECIKFHHIHIIFFINTNB9;@@BBDJRKFNKINNLOQPKJLPLJGEGECACAAFDC>A9^^e=IGISUKCKSRQPRNLMNPPPTUOMPRSTUZ^^[\^]^]\]^b`]\]\_be`ZWWVUWX]UW]q\Y[\VZ``fgnoaY^`^^_[ZWY]]_^]\YZ_b^WdMKPX\^RUD?:fpmhdYSQ_qAEEDEMD2J=H1:SMaKD?B?F>>t=JIKIB<8LPY_b__`_]^ada\WX]aeknjlga[Y[\][\]_adecficdfjkfcadccggjqkbaa]W\abcchgdfb]_a\WUVXTQV[YOOQSTSRSTX]aikcc`^``b`\XZbhfa`dlnpqmmtxvz~xtw|DIKJDystx|D~~{qoqljnorutm^^flpld`^^^beeb_VEbFX6;CJOUY\[QJIOYXPJKMT[][UNLS_daZdxohie_^\]bdqqe\VW]gb_ccirnjigba^`^]iepztnifkos|wPv~MNRWRONOPOU[WTWUVZXWRPOMPRT\__^XUUROOQSRMNSX[SIAr;=;98:87;8743e^b`g7kgigec^Z[Z`c^dbSjh]PFFOWZ_elssxruxutrvxzyspmgfinnefhmnmkc\YXW^qnjnuxne\]`Ycfa^\dhg`WNLUUY_dgnyonf`irijz~|vnihlf^TUiuwochpyumlou{ypkmqstokfbee_YX\`]XcghbdtshMBriwx@TV[]XQPSRSWSJELYYWXY\Y[[\giigcfhjgiagjb[dhdfgd[XY\]]ZUQMJHLPRGFOGEFNXafcVLPTRPTTU[\WSUTTRQOKEEKMLPQPSUX_a]_c3344435<>=>EOVXZYUVWXY[ZVRNKJKHBHUK}ts7650WOGHEDBQE_cc`^^[]ih`YIJTVNIMVOEINKL^ZT]SSTNSUXWKtu|{vgcD_KqMkkfqpm}~~}~tlmwIOJKILKGJMLNTiobXRKOK}vid`BQDCyjf16MKxknC_eULJAtxticlqstJMtF?WDFFvvTMMs[j{|VFproifnOxHJKNOKLKMFEHGA;gNAHBL~{JLLJIINLLKQTYZ[SMOZ\YPDll{qJTOY^YTSPNOMQOHL^h[RIx[^PKJHRQNLKMNNRLGFNVKI~IJ{{z~}yy}pojfa]`[UPOPHDDzmHClPQVDtroChq}l`]^^^O`sruudZ]pC{olnhchab|jtqmfYVa_YWaVYb\PSW``WYPNKEJJOJMYWHJrMcRJDZZcejp\JKME:L[XjjklZDU`ROMY[OQfulWHd@\g[VYegfWBeF>IAC{qgfvmfjvsvyumyA@?wrjokhe^[^`Vjcgknpu{o{kjxxxvqeipwnfUKFKXMEHFGONNNHHYDEFKOLIROGCCDLIGIIB=>DEF?FJIC>AC?>GKNQHCHC;@EBAG[fb\]]^^]\Y\[USQ]]`0Y/3524878<>;=:6:;<=<=@CD@>;9;>:8996867>=khpgopm9=B">9jc`_agj6d^bigg`[]d3\Y]`^[]\^]Y[[]\ZYXWWYXUSSXab^_]cghfccdc[//./.,)//.//2563//.,,)(+,+)''())(&'.41*)--,,-,-.--.000/,*)(**,-+))(%%')++-/365223/12/-H.0,)(,.+*)),00-.,*(&&(*+01-+))((()*++,,**+++-1-/3-('()++,+,-+))**,-/..-*,/.,,-+(&%(,++,,,)),**,-,(()*++,+,-+***+--.,,--,*))((+.)+ !!$#$&'&#C?A>82-,--/-*)('&'$%*+***,.---,+*..-.P---..,*)-/---+*)*/.,.2/,+.-+-/11.,--,)(((*+***)'()+,-11-+--./.**))*))*---,*)*+,-,.--, ---+,,,*+.-*((*-//0.,./-)+,,-..-..-+,+*#%-,++./---10.+**,./12-&,/,*),0121210.0543.,,++*-11.,,,*+-.//.-*))*)')+**)).+((+,+-0..(%&&W %(()(%$$#%&%1-*)('**(&''($###"$*+')+*$%'&%%'*)''('$$''(,*''(*)*+)'#%'')*("&'(()))+&$#'((&$%(,)%&(+*(),'%%))('j%$(,-+**++(()'%!''&'+,0 $&''((($#"$&()+/,+/.+.**&''%&'('(())1,'$&'%#!"! !"#$&((''((#!%$"#'+'%'')())%#($##'*)&')++,,.,''&%&')(%&()(&'#!""%# %('&%$%$"$%%$%&$#$(%$'(')*+--/-++),.-.+),('(-# '& #(,+-13/**,,,+(('(('(**')+**'*+(((++(&#$%#%#"&)*('&))')**'##&''&%&)**+)()*-++-21/.-0/+)*+h-,*./,*-/+*,+*(**)+-,+-05982..++)()'''(,.00//1243-)((')+(),..13+%#*++)&(.21.+,,,-131./010.0.+((('&$$$"$&$(',++*%"%!""$$'&"##%&()())')--+%$&%%%"%#K%&&$%()*,.-*)+-.2/.-,*,0)'*($%# "&'&!27! !!"###%$&(++'%(,../0g1530/122.***''*(%&%%(*,-/,)/012122366247..54530//,-/12112/+'),++,,*'%&''(&%()&$'(&$#"&&#%&'%%%$$&(+(! $*&"('%''&*+,('),)'$# "! %$# "113'%%.0)#',-+*+(')*+*+--+**+,-.1431122210124311212352.,,,+./403640220389<;@A83787653224644321//33.*3 $&%)"%""8@>982.,09!"& 0)+8,6)#!$"&!#=!)&'&"+-24534543357750047:=><>>==;632335354556757:777:<764757::=B=6552/25557;;:<:67840.131/254../00/../268<<:;98B75128;:768=>@@??CEDHICADFG&)*)%GD@>@DI&MJFIIGKKE>>@>97v8994.()!*!#&),,'&(-41+&&).5641-)+374-5HC?B>98679:?A;643483.35;B@=99=@?9:;>?>=8431/5A>?ADD?:026189655;=>82--315;<=AWa^UJFE=8@D=>JSPKHD@=?A>811:A@:7>DJE>@CHIF@>>ADFA<86;:3//230.68:47BC:,(JKMEBHB%12445213013V1,+08554596634==>;368<;=:?>86=<:;<82///22/)&" "# %-7:7/),/.,,*,,,*'(')'$  !#'&$%''',.0/-.//020.,)'&&# %.'?87! !47641213:952))/1,)+0,%*,+*63/5--0,0121*H@BMHLHMPG>='9/Z@,@SSK=7<=;JGHMNPNFEGALJ<;>&)&((*(%&('(,9=4/,'*'B@:.($ +#$>0*&&801 36+'%!:>:3-0566(*=$)$%$G:A9&"30D5CF.#@A<6:BL-I@J'&&)+)S-+,&##!+ (HOQDLFIG)*('&&)('&*,221,(DG,242,$;;EM;*/+2620/,+,*-,LH')4;2,'@P23,)((--+,T*,,-/*('LH,0+*LGGNNJGIDL)P(IEEDIIGNV[WLNUNEGOHDDH>><:7361.,+,'%%IJD71825:31;@;<205HU5.3(+0@A:0$$+3./67:8599A;:68>J8-4:8C?;>3@YY@.'(99652;9==:3=JD8=6155437H>668565192+*60(*++*("@<75?;79@ABBA:?C"! >=886331/01*955889>B@:CA87@?ABA67;B=9/*(,3+&)%&*'(%$"-#$%$&*#%-.+')+('++&(&$),+('%&(--$!!$&$"'(""!!""9 " #""""#%# ! !"$& ! %+(%'$^&&()&%#*'%!5493875!510-.02-*+0/.,)*-(&),+(('))(*+*++))),+*)'(,.--+./0.-/0/߀р~}}}~瀳퀣󀂁 ʿـ񄑟􁅄ƾ€üƺɼ򄈐ـĿúĺûրºöľ÷􁇃ӀĿļ˼˺Ƚ־Ǹδ´½½ȷ΀ýƼŹѼڦ飏Ǻقх߇ԉ)Ʉ̀úĿ򅐎׀ĻƢƽǼƾijߎȷ¹üƶƷ¾ȼȬмİ¿ɽ֘½ð̘ߔ邊Ķ񏐆݁ðδ䯷ӆຶɍ邜􇏅ü̀·ºùÈƸźıìȯåϱҭƮήȾıч𨝣̿ߵΞ酠׻ȶƳĺɴ肀žȥ²ӼˬS聃9ijgb_]Y]__bcfghf`^`]`bcfhb^ZXY[`_XX^`c4777mojgb\ZZYZ^_^^^`4^]][WV\_\[ZYTPORTXZXY`c`glf``bgl7mhjjb[\_`baZSPRTZ_`a +`bdegfa][YWXZZ\]]XVWZ\`a]ZYVW[^`bdXa\]_]^]_`]_ba`dgfb_`_^_\Z^_\[]`a`22452`f78850^]_b`_^cc]WVTVZ]_addegd^_```^_^^`][ZZ]bcdfi8:=>BFF?x@A?CIE}zrjcbh85CB:cf99<=@BC<7?EOMKKJJHHIIIHJLLKKMLOPPSXXWWUUSOPNOQUYTMLIKSPA=89Hb]?9_PPY``^bgW5@DEDHC>3GP!5=4f<\=9?>E@E=;741\TMJLIEC@JE`cda^XS`ee]THLRWXUZ`NMKHKP]TNUQY[Z\WRLGD}~~{{xlo]bX~J[qv}y}}zunr~}{xv|op|EJIIMJ}EIKMVgjd\WOIJE|tg`hAKGLKtkfa6TTBCCUmVBC}sstnl@DrgCllbQPe}}FPze\JVsni`dem{Vdn}PNHQRROQWSMFIMQI;iZEGHnumr{{LLGCFKMLHPNNQTQNEBKNWWP}npiRWS[]TRQNNMLMKDFM\g`RKHV_RLKIPMJKILKMIOSLH{~|xysqlifibbc`SKNQHGF~~IqrBQ[FQMxlyVomrjbZ_]YMPp~|qghzxmfYi_QPiQfrvkf]dg`_bcY]c[CBG>?V^VSULDEFAMUQBBHKTfT\]\ffeXMI=r{H\_dRWgPAJG\\X[VRQQj~jVrD[g_N`adkXhf]U[F9DMvDPXbdag\XjhyjYIRc]rKHTEJOT_aegHDfkeVJamevrf\_ipp`pjQUfwrRO]NqFTSWRIE8UhlnYWsCnsxj\f|`fuwiqftp[eqteML`ej_frtungns~k^f]\Vbssnlpwqm]`fXLTUXf\[_f>@}xmge`_\fmlsxzzzksqnmnh^[_\YMZahsmkghwununkovwvmbkhlsiUIOQOIKGDGIDNMUMNG?FGH@EFC7AHQYTG@JC?BDIN_ic`1112_[\\[UPT^\\][024334689=?A<19@:9=;:<>;9=;6886;:nkpnjljnA;<<88hbaa_hj6f_df`c\VY23]\\\]_aba[[^_^]^_aa\ZYYYTRPQYcdda`bh4ea`g*121/.,)+,,./24430.0.00/.0.+*)()+-+*,./21-+,,,./.5--,+--*)+-+++,)&&((*,,*.1/142-,/376101.))+,-/-(&''),-,-./0/--,+*)))*++*+,,+**,,-.,+,-./1000/++,,,++,+-.00,+,-+*)(+,*((*))'*&&),,,+./,)+--/0101/-,.-,++**,,))),/.//0!""; $"BCB@=940/1-+*))(),-..-,-../..--.-,++--..)()+,*(*055/+),-/0-.//--.-**))++-/++*&)+-/11.///1/../..-.-',-.-.041+,--,,-,,,--,+,,,-++..,+))++1224/,+-/0L//1-0.++.0-&%''(*,+,+,,./.-+*.1000-)))''*.014441-+,.120-+)(+/100.-++,+*(')+(,-.,,-011-+**-.,*-/./)*(''k(')'%$#$#$*())*--$%'('(,/,*)'$%&(%"$&*,))(&))(**(%"%))*)(%"$%&$'*'$&)(#%'&&(&#"#$('})%&()+*'(&$%'+**)'$(&&+/-+,+,+),,*% -/*5.)(&%%$#%$%%&&'(&(+(*./,(%%(('(()&%((*,,,-/..+)(%$##!"" !! "$&((('$"$&&$#',+%$&')+*+(&,$$%(*,+''&'('(%$&&'&&'`(''%#" !"""&.+''&%$$%%$#%&&%&'&())+.../.0.))()*-0-*)&'-,#!$$**,0.+,*(&)*('$'0-*,)'()'&)(##'**())'&%%%')*+,,))('((&#"$(**'$&)+*(*)*+)*+,-/-,//.+)).+*+..*)*))./---*())*()++--.5694/0.-,*)''(*+,/0/01011,('%&**+''(*++,,(+,,-'#(-,,++-.-./--032/(%**$$$'#$%#$%$##%')*,&%'%#$&$'%###$'*'%$#$&')'!!%$)*'#!"&##'&!%-,%!+11**+)/254+*+-..,($$$"""! ! !0,/;715"" !$%&()-.,*-./200..,,,))**(&%(&%%&(')+++,/001101/23354-.23210,+-,+./00/++**,+*-,'&%%"%'''*,(')'!&&%'&$%'(&$%&!!%"$("## (%$'($)''\*,/,)*+*(%%&%&&&!! !!3 #*+'##"'(())&'*+)*,+*)***.--133341/00014413730568561--025346301n37;889878655320025754421/24*-$(0-+ 4,*/45367, "##% "++)>#4"##'#' ($((%"6"!0553346665455446789<;;>;9<53343325::;8774358A:437659::=;7:;9510342244-/3652003422201101.012457676336789888<>?CA>?@@A?<>?@CEHJIDAB%)(&$B@??BGHHFABDFGIHIGEC@ABABEGF@??@?;7:=@=764/+! !#%)//*'*020,&"%*.331-,39945AG<:8?BDCADLJ@=<88<=@CCEHFHKKJD8DT\VRT+WUT,,WVSTXZ02.-./,*,/0012332234211018><;3.13452/--,,,+++*%!+()#(*+,,(*"#('&(#'0('(++**((.569>DFHJICBBKONNQPKIKHFIID???=;8<;;EHHEC?;987;<;><CJJNJHJJ@<7658;>>:7;?BB<9@BCHD?DDFHC?DFC@>;>7&'0+*-00148:<:;A7+%%$%%$(,-/3<@=51.+*,I24111483.//0.)-4494537<96469:=<71/10-+)&!"*0/*&%'+*'())'((%#"  !"!!$''(&&&)((&#(-012221/02/,+*)&#%$')$" $"78630.,5884/(*/24/25*++(,-5/*0.24352.*'&EHJIHQSKEG996M&4CBGDEFHGBCA>BJIJLGDCDG==C%''(+)FB$%&&,8840-*''$@9.(+%$)(92*(,- ! ,<, A"<78930#95$783''1A?A$,=.*'98934:?NND*5A=AIFL+DI)&E"#&('&+**,,+(#")+12-B<=FG:/1/450/-+,+*,)G$%)284,(C'05-()'.,**S*U+*,(LKMH*/*PNPOQQPHKN(PIKKFCHIIKQSROHJPIFGHB@>?<;9:6675-(*-(''EG*HOBB%/4'.)?>D/@9;61.21.()@JLIIKPJ@87BE?87282.*5-F19;760594247016/# !/5/-.)$$&!(-,#%I(*-6)00289<2)' ;>(337,.8+ '%0.-3/**+8A6,4"151&1005&76.(/! #7C&(,1105,-96?8.%+61=*&F)%(-/.284NF&%364-%182>=502:9;198*-9FE*(3,>'/-/+%%,:65)'8#F8:A<05FD26??6;6>@37;IE<-(22649AAB<7?CLSWK;060104>>96;CA;1160(../7--02 B@?;760/-3<;>BC?B?5;::9960.10/(.46<8755>?9><7;@@@;4:69>9-&,-+(*&#%&"((-(&$ !'+("&')('*)'(!(//,*)*)))(&!,.,&""%"#'%))&"!$$! !! $.$"#"$!! "$''%',('&${%&&$!$)&$#"7698565640...10/*,.*-*%'*))(*++,-,,/.,++,//++*++(&%&*--/.,+00.-0စހ퀂쀇퀊~}}~~ƀ ·ꀆ񆀓쌒񃌌ºɺ»Ŀ¼ûļϷùþӀȿſƿĿϿ̻¹Ƚ􈌆 ʄ΀βüŶȹҵƸо̀ļ½¼¾ĻȺĀǾµɹϻŁ。򈚠ƞ΀ƽƼż϶ɾŹ˲̼۰צ;;ǾpǾӻɽ˽Ѐķؾ񁊇ɹ팘ռĮʴ⼻􌍓Ԁʀ䀂ùǶɮٷׂĶջɽȱʽޥѻϱӀҸ¯ÀǤͷӶٷʿ̰ʸϺȽ׀٠€ƿѶԼӼ业cgke_\[YZ[\`dgcbia`cbcghdb_``^`a`_]YZ^_ade2di7lhgd_[Y[]\^_^`a^]ab`_`b]ZZ\YWWUVX[\UTWW\_^WLNT_j97klg`ab__cea[VRUX]cghkkj66higca^[ZYXZ[\]][[[\ZYYZZ[\]``_begd``_^]\]\[]ae54ge``aabb``dc^\\ZZ\_1355a]22300\RWa`__^^\[\ZZ\^ab`acdc``a``b`]_`^\]]`gddkjiijiltw}AA@@9558tA}ril@BEGHEC>8ia^`a__ccfhgdadee3eda]_`ce^XYY[[YVZaed_Z``^e`\XY___befeeda`abbcee`bedc_bj66lhdcda^_cdeca[^eb`^]_598;?@B@;;<:866lhd2dabdeBcacgfdb_\[\`cda\]^][ZZYXchbdehiikl5ea^`befccde34455he5eY:=6Z\adcb`_^^bdcefc^YVUVVYZW\``\\][[\\XVUX[]]^^]]\Z]bccbc2ba24gbaaba_[Y[agihgedfea`bb`b4=?8211][YSUXWRR\116631/15445531/0]YTNOOT.3651[VY^^23e^VUV\23|0`VNMDFNOKKLLHLNNIFJMMOIKKLIHIKMMJFMTSHFGGINNLHME>BNOIGKIGIJFBCDFGEDEIKJJMPTKLNONLQUXYUNMPJHMKCGOUZWUTPLGBDKD848=@A<>MPNLJIJPNKIJJKMMGEMWYMINQRSRSUXXTWWWTSWUXX]\^_[ZYXV[XQNPQQOJNQQPNIECFMVXYRJFHHIMQJAAEHKMNTSORBGJLNRURPOOKGFDGKLNLNOLLNROKJIB?A;<=9=A@KHGKLKIHIHHFGIMQTVSVWU[\XTQMNKFHHLLPTRPOMLQNHACQaZRVUSQLKMQNMLGEPTRQQQOKKNOMKIKPVUPSSUYTKJJMRTQRVXUTTUUNJIHNXaa]RQNRWNMOUZVUZc575gaad]U_b^SPRUVTXdaWTTUTWXXWWYVUQOPSUUUVTYZYX]]YWSRRPPSUUU\`_^a]__XIHGJTUQNGJLOUX[^\[[^_YUYVQRSWZVSUTU[bdfc\NU`\TIF>DOOPQNKKMLOTM89ADNQQLMKGIECBACIOIKGABEHJFHKIJPOKGHGHHHFC@=;J[XD@O[^[ZSTVZZSVWWZ\[[TKJLKHA>@>>>CE>p]bgjhj=AHMNKIBDDDBBGHLLKLKLNQPSQPVYXYYWUPIKNRPQSVUPMJMMHFJMNPVZ\cc`WQSSYZUUVY_^_ZWZXTONOQUXQQTTSNNRUTRWQIKGDEJMNMNIBLLLMMMLMOIIMRJEG@CDBFMMNJFHJMNOPPQQSSSUSRWY\a_ZVY\ZZ[]\bgeajouwzrgbdhd\Z[Z\_XX^ZW__\^]\]^^__[TORX]ced^\Z\\T>CJEKcNAQQ0[68^V^cdefg:ABDBACDNK9@14A9CKLxn:=DBHCBHGMQPNIH?Qca`]\\_ggdb`bccbccglkknihikifgfgdc`^[\^^_]`gd`bbabeege`dhaZUSXZWRORPPSXZURWYYVWUSSPU[WRX[_^\[]_`^\XX[bafifbeosvzutx}}zqmjjpruyzvonxBEFDA@}vqtzvsuvx||xyy}|{|upw~}sqpprlghmslSYcccXOOY_[QLX`orm[LRVXZYTPY^ZXWXXYbba_\dk]]fea[\cd^Z\VRRUXadqwia][_owf\Xhrd\jncY\fe_\[bjosvuxINRKK~xrsty}zz~PRQLIHKLJJMRWTTUUTTWWMKKRROIFNNJG?neUch22345452231a^Z]a^]fdbaXyL_^\_bdgeWbolmquxru~~|z{wyyzyxv|to|{vpe`abfpyriim^Pbi^]edrnd``a^\[\^YUV[``_dac]\[Y]elurieab]TUW^adgjkmoy~nkmbYZSZ^`enmggllhZEA;ITGY[almkilkhc_^_^_c`[TUYX[_]WUrNJIJ@CJH@CLRUZRMRSTQMT`qwpkhkhgotqhd_YYX\]]XPLIFFHILKHFFFKNMPQNMJMV^^\Z[XUWUSNJKLJKNQPTTQSSTY[SPTRNSY]b38AQbURRKEVGHg]VQ[\TilcSFC_ZJXipgiW`inaYPK9E:GNa[m[UPDO\spZFKcftIKpg_TII]jrwsuvqZVaYYj[yl\O_ctj[faOP^\CPd\Hw>;KYPIuSZm`b_awyhmra_jeeuxqpiYgjzb[dbW^eb^^dmutsgezmh{m_dYWUevzsxzv__mdVY]f`JM`>A@Bwlf\\Q;U]euyqodmnnpvmfaeheXN^fpqkabpm[kvlsvpkZ]nuwtj]TSKIMSOIBFBBRWSID9FHMOKDCHMOMMGLTBKXXbe]UT\hZPHL^`\SME?>98@DDFGIKIGKLOWOEEBBGLQGB<:>LOJ=5^=JOIJG>8=BAE=A=F?C@>JQXcLCKTffc212`acadd_WPQWY[\Ya33276359=9@A/28:9@@@BCY@><9;=;8<=79978mmq:tqolj77769:e_``deh:6eb`]aYRYee^ZWX\bjgb_\\ZYXY_`^_]ZWTSPS]a\afhbeh4d_],130-**))*+-/20040/22122/-,,,*+-,,-,-/.-/0.04232-+*+,.10../-+..,--/-*+,+**)(*+,*)**,//-$"'-3342/-0/-.1/,*'((*-//010/11/-,*)((+,-.-+**)*+,,-,,---///..-.-,,,*,,,.1/,+,,++**..,))'')*)&& #++,,+**+,,--,-.-//.--..-,-+)+++)*++01052001139;;= 7@CDD!=944,**++**-.120-,.//--.,,,02,)*+--+)+.10,(++,0-**+.-.00..0.,-..,-//,-0//./2420//-,.110/.++.,+*(&).,,0/011...010..,+,./0-,,-,+*+*)02//001./-,,./.-./0-+(""'+.-,+--,,,+.0010.+)(3)++-//-..-./.,+**,-,-/.,,*,..-+*)(--.//0.,+,.110.-,//-,))(%&)(%#(+(&##!"'&')'+*)**,+)%&"$)*&&'(%'))&%&))+()*)('''()(&)--%%&&&*)(%($"()&%((&U'&$##%&&%$$&(''(*-('('&%),--+'&'%%(("$),/.++(&$ ! ! '*(('&&)*((&%%&&''&#"&+-&#'(),-,-..-+-,../*)($#"" #" !" "$$$" "%%('$$%%%(*($$%%'((--),"%())*,*()(%$$#$&'(&')''(*(%%&!" #!(&%&&%$$%%%$%&(+-.-./.11/-*)*($&%'')+*(+)($#*2-)-,+*'&(*&((%$,-+++**'%'('%$%',*'))*.+%##&*,**,,*)*++'&%#',0/.(*(+/(((+-*),01,-.+(.0-((*,+),32+**+*...,,,++*)(**,+*),-,+0.*))**((*+++/1001/13,#$%&,+(&###%)+./-,+..,*-+))+.0-,-,+.1132.%*/-'! &&'(&$%'%&)$""(((%&&%&$##$%(,%''! #%'%&'%&('&#$%%%$"! &1/$!)./..++./-*+,+-/,-)&%''$  6/35765!$()%# "#$""%&)(%&&'),*,+,/1000./-(*+,+++*)'''((%$')**.015540*.-0.,-.0300,,0s/,)())+,('*,-+)++*(,)$%#!#'((()'#(&''&&&(($#&+'#$!"$"#%!&&&)+&)'&)***)+)'&&&%&'))'$"  #$!"#"$)))&%&&(*c+*+++,*+/12652/10//033685268;<@;524650232250/7416646545567751./359995301.( ,!#'2"6/243533!! $#(+&' '(*D<"'$'#$'&+-,)((!.8553223776656556679:::;89<=;8768764446523555248645668:9:958;51/.232/-..-024/.234220//-161-0365679997532477:;968@BEEAADGIHA>;;@BBEGE?=B%&'&$#EDB@BHE@@ACEEBCCEKHGHC>CGHB@BBB?<=?C?*+2/0*# %,,% %)8=;0$(021/,*3831///067644<846200349:AE=8658CI;529@83>?844:;654:BFHJGGLOZ-Q13[SPT,-TQQOLFBFEJLLLMKHGKMOPMR[234/,),.-.03654433034-+-1/,(FA>!&'$!+($*,('&'('&+*,24D$+*'()*-,-9C@@CDKPQHDBBGJHLMFEKKJLIFEHHFEDEIDBGGEFB98868BJC=>@2-;;55:3@<7767555671-.256:><=99758?EFA?=;:8568;;:<<<=>HMLMURG=?B:33.566:??<=CC<0"')!+).4689;840,**)*-*-,16766532.+,-&)+)&)/46:300//)*07CNE?<;<<=CB@;86420.,(%! !"#"!"%'(('(%#%$#   ! "##&&!!$" "%&*',023432/--,+*('('%(%""#D#!8-# #"57740,-.10*)+./.1/4/,+,...1..31594:2'%'JEEFDIOHFGC1(?9&O@9>J(+)HHH?;@DGMLKHC@C=>AH%$')%%%# &$2<:411-'G<40)')"E&?53,"= !,1*%""#!$$=8$$989,452$7>!-3 .* *51?;/=*/,-,.)&(K(+*'HI&*/2-(&''(0*(')(P(*ROLJ''(((POQ+RSNOQJB'(JBACAGMHLGDC?=>;?<973+)*-+,,(&'(J>I();#/5#=A(3;;6/+-,("+=>GE>DUQI=0+0-/*'--.% &"%-4+,1)&/$'6/-*21)8G83*$$30#)1858-3;=4+$")!!-0,4*)( (/>;-!&66=((<6-*%&26;==:2097+0491%&1 !!@#C?94+($)27@C=C;3878<@:626:80+56;>933;:-8>9?A=;129???:2.-'&)-*&#$",.,%"#&''%#"%()'%!%+ $))/2-((,4+&$"0/-'%!"#"""$$!#$%+% #&#$&#,#&"#" ! #%'-!%"!)))&'('''($ ##%$!$679<:9640-/./,.-,+*-),$(..+(&'*-331/,,*)*+-.+--+*('$'--),02./20.+Հ~}}}~ ̀ ö􄇃􄄃ր񂉏􁈃ȳĿƾ´Žƾ´ſøźЀ¹ÿǴŴƻõ̽Ӏʻ²ĸþº½»͸¹ހ¼üǺ¾ʹ¥僷噌ꂄö¶¾󀇄ïľȀǧƶûŽĮżdzɵ÷лžĀøʹƀƻ󇇂¾瀉ɯ姈񈩪ˠ̹犟™Էø»Ĺ̾ĪĻ¬Փ񽮖Ŵ佨ݗŮӽ¯׶׀ľĶʸʵƶƩĽɔͽºǾʀŲ¨ķԺɬŤꀃо郊abi7f^\\[]^`_`dccdabddbb^\]``abggd^Z[[XU[`b^^d3imnmg^ZZ_a^\^__^b`]]agha\YWX[ZYZ[__\XUW[]]SKEFKQVXW[]\\ZVTW[`^YXZ^`bddf589875gcb`\[[\[[\]]\^ca]^]\]\ZY[9Z\_^]]\^]ZZ^^]dlnmkkjhccec_]^^]]ZZ^_`2488`Z[]^ce][^]``^[[Z[Z[Z[_`]]\]^_```_]]^^bb^``bdjlpsq|CEF@85445><=>=<>><;;:7985ijghhikkigfc\YY]aeda]]\Z[ZXWYZY[]bkjgijfdabbbdh5gbc335646:74:8<46fbb_^__`a`^^^_diga]Z]\[Z[YWXYYXY\]ZXXXY[]_\Y]]_`___``^]acefge`_`bba_`dfh7:;9886543a_27:51^\[XVUSTRPKKY03521//2556774312/[VX[WTU,00UVY[\WX[01ZTS\1342WOQQVOFRR;PNQUTPNKJHHJJIHIQRONNNKGDACEGGDGJIKOSRPNIGGFHLJJKIGEGMNOMNMHIHEEHILMPRVTRRPNORMPOJABINTWURNHGHDA>;<@BBB@?CNOMNNMMOLOQNMLKKMMJILOPNJIMNNORTXZ[VXYXSQUWY[^^\\\][[YVSLNQNPLHJLOMKFDEFJLLMIECGIIGFGEEGILNPVXUOEHIKMPPPOQRLHHFIHIKLPOLMKLJECE@>@;?FGADDGIJOTVSOKGFHKOQUXXVQPPTWUSMIHHGLKORRQOOMMOQQQPOZcZRQWSGMNSTHGKHDHGEKHFJJILPQUXQRVVSSRRQOIHJPSQNOTVZ\ZZ^]ZVMMLRVUPVQLTTQRUY[Za77bTU[caXSZ]XPNTX[\W`g_ZYTRWXWTPU[WPPRTUVTSTUUUQWVPSVYXTTUVVZ_aba`_^_]MHHLWWOPMMPU\bc^Z[\beb`^WRSUY[YSRRRUY\Z[[XZ__\QGDJMQWXSTTPIEF96ILJLRWWQMMLQSTWYWWYUX\XOHKB>B@C@BCFDANB;:9;@FIMOSONOROKIJHPVRRQNIHJKOLHLU[_^^ZSKMNKJLNNLKNKJKKIJILOUY^eeg`VST\UTVUTUWXUUYTRMNOMOQONQSRPOPPPTUPPNOIAELNJKIKMLMORPPJKHHIKKNMF99@@@EKOQTSTUY[YRNMPRRNMNNKIIIHIJIIJIECBA>;9787=FEFFCBDFKNPONMLKOQPLLOPRQRTUVZ[Z\][WWXYWY[]``cinqstohfdehia\Z\^^b[Sbe_\a`ckijdb^\ZWSSWZegdc^]ZSRPOF=CWXSI>^@H\fjfcafbg`:VFB9CZY`5:JdmG=r=:<@@DFHD?FMLJTVNV[Y[^*`daacdcdabcchikmijlonihihegca]]a_]WTPQWdgeabcfgb`bbbf_^[VQPQTVXZ\\YZZXUVXVSQQTZZ[`d_\Z]`ehjhhilnkmlhdhqxz{zwwz{vqopwxstyvrmmryACA}{||wihquwuqrsrtrtz}zwsttsqmkifjljijlf]`_cec\[hw{srzyodSMRRTZ`__\TQSWXYZadaafkWJSY\`b\VX[XUXYZXZ`inldb^_ilnsomlijnhdbZZXW\gknmkmpv}z{xutpllqw|xrruuuxztuxy|ypiihmqqtynKOMOQNMNOLOQPPOOONMMI@9765774::567562acecccaeecNNICT]^`bdjoyyz|y~{zwwpquyz||}vjhpqrzo``^[\ejebhedhmc`caHY___^`_XVUVVWX]_]a[UW\hjmnig_Y^`]\Y[Zaflkhcemr{}pgb^hbWVY`d[[gje\^gd]Z[]e]NXR]I^ceinf_^ZSRSVUMT[[YZTV]XTOAHFGDINLKNOMONIHHIDRfo~wsxthbiidbcab`]\VNKKKLMMMILONMPPNRSVY]\>ZWVVTTQNJGJJJMRNKORSRNMKEDJLKKSd8<>ADFFGNW[]]ab_XTTSQMLNNPQPNKEApec^XUPKBA@A>?A8Wbbb^[WXRNKT[U\fSQUPMQTSSSWUNUZddW\PJID}u}umloj`\f[hpLMKz}rnpGI|HFCHOLF>=EONbkkf[RJsdhlj?MDmgon5775AD|?=CMV\\KFMJICFxefa\lfVNSc:AT[?dUIdsSOO[p{~~PIHJHMRPNOJ@?rCUZMEoiN?b~ypmjwst>;>MGEINNMILQRPPRNMNKrvum~POQSQGIRPJLGEJMOQKNOMKMMMOMORRNIIJ~FzMNI}~}~rt{xE}|~}xrrsrsgWOJNUi^XQCFuKGkEU_jRYXNAHMV\_ZUQNGCEHZqxvx|}sh_T\vnu~ln\Sldjtsklf[NU[T\eY_igc_\b[WF>?PUQRKEFIECRa]YYKJGGFORCDFAG_XKIN@\cGc`XV]eceodmiQO\USUWNTWWVRR]hXJ?b\_Fm{XUG=GNV`gZOyo_yory\P^n\`\loqGGZ]U^NmlhWTgla_]SQVKAFLSALNBUfVG@Dca_krwpsmioh\SMKextzv^]g|slo`^gpsdW]jwzsjjsiX`wi^cfWUYewy}|y|qkgfutbb_h]RKf{BB}}vf]WJ/8FV`mhxsfwrmljcccrxpcX^dp~tmdk\VtmnojebY^dyrusjeYOJIS[_JIHEJONH@:CHQQLJEFCPRTY\ZPWamaTQGX`\OPRNLC9:=ACC9:>BBKQ[`RHHCEIKPPFF?ERK?:f;HPNHG>==B=AA=<>DGBD@DO[e`Z221]YX^24fVGMU[^]\a34255454:;>D8-5=7=68;789798qsG;sookkii67797b_^][Z5863d__d\UZ_ccb`^]dfb^ZYYXVUVXVY^_\XUPPU]a_[[\]ddege-,0.+*)),,//021n210.,*++,-00/,*,,+(*,--,/01220,)*-/-+,-.-/.+*,.0/+('()*)+,-.-*(*--,'#!!#$'('(+)++)'(),,*)*,,-..//.-,*))*M++-//-++,//,**+,---,+,--+++,+)),-*,1220111.,,-+)*+*)'&((((&&'')+))**,,*)*+C,,,--++-.,*+**,,+,,,+,-/0.--//236;:?"###'FC#!L+++,.,+-.-.-.-/-+*+-.2311+)*)'((***-.,,-,,-..-./,)+-./230./0.-,h.1210/.01,/./-.//000/0.+**+.0/-+,+++*))***,-/2113200/.--./.*+-,+*+,+--032/-+-,+*,+))*++,.-,,-.+(--.-,++,,))++*+..,,-00/..000.,('(('&$&%$"!(*'),)%#"%)++'&'+((+#"&&*'"**)(+--*('&%%'+')((--*)*))&$"#%&'%'('(+-,*)'%%#%(''('&$%()*4&&%%&%"#%%&%$%'('))''*')*'!"&')++)'$$&$ !""#!!$))(<'')'''&&'(&%&'''%%&'''))*--+--.,*,-/010-*'%##" ! #!# !!! !"#&%$#%&&%$'%'(),//*$&'(()()()*&$$#$$%&')(')'(&"!" !$%!##%''')+*(&##%(**-//.***,.-,)''&%''*++***))++***).2.*(.+#((++$$'%$&$"%$#&&%%((+-()+*)((%$%)+*)),-.0,-0/.+%%$)+*',)',,))+-,+//()-1.*(,,*('+./.)04/--*).-,+(*/+'))++-+**+*)&,*&)*,,*+,,,/001010.0/'$#&-+')&&'*.11.,,,40200/*()+./.,++**,.-.-*+--+$!!#&**)))'#!"'*(((&%##('((%))$$#!!#$&'())'&%#"#%$#!! &(''*-,(&'&*+,-/-,-+,0-)$% )  "$')+'&(+)(''&+-**+'&$&'*(&'-02122.)**('((('')(&&'%''(*.005563.-,0++--,,-.,,0.,(((''((')**)***)+,((')'!"()&'&()&()++*&%#$$%%'(% !$')(('((,,,(&'*,,*))('%%&$%'&&'&#!!!$$%&#!"$')+*)))')++((*+,-.110221/...-.1353468:<=:6654573113461,7853659@==::6531..019:8742.'%! ''&",#%17;742625-2$!()2-)09>& ?! "!#%&$ %*)&--(.202543114456656667899;;79;>=8676554533654/.+,09:85567779966889;6751/..1235542221/00/--./3348:76689;;;889<=<=<:9;AEGGGDCDFD@?@EF-ABFDA>=>B#%#BACDB;9>@@@=>@@BDDGKIEBCCAA?=<9;>=9320354.-4AD7-2668:824841456669;44105ACDEEFHKQLGGGFFC@@BDHFBCGHHIMKHGHIIGA<;9>BDFJRXZVQNMOUXWTUUST,/-./.U,--++*+*)''#')***))++,%))$''')*/4CJDDDCHLNPKIKFEEABCEHMNSQKHHIJJB;;@ABG@77546<>:7;:=>@:787)2697200/11356585346>>BC@?94;:76687;;??=89>CINPJA=:8@94459;57?C@9<@=7446:2).(*"+.28:3/.($$&&&#)046623642/*))(O),**,,,0-+)'%(4;GSKFGCBGD:6==:8632.)'$   !"$&&&%%%&%#$%$#"! ! "## !)'/022453/,-,+'%&'()*('$%%%#8.*&""065420./-*(/506@.,0-,/2/..0/*.28:13,((%KGIHDLIDBFB95<2IK8>JN))(>CC==>HNL'(IFGHDDB&%#&*(#"(&3:971,(G;/-,+'#8386 #?  (/24'$(%%GB"$@7:5/84("$-!-2,"*3%'B&/?FLGEBR-('((HO*-+*+'" 6"/1'!.*3GC=:;GN@@#!$-&$'**)%(,,,+,('((H>@JLDA>IS,+-0.'E'K/.()&&L)++,(*+*(***+)+-.+(()MFIJ'MIKLKJBL,WQV[TQ-)KEBEGLLKLCAC>BGG&LUTECEEC???>?80+)+/940-%&;,+>(04?,33)!').240,+*&$%&/:3F=51.,'7EAAD>3.2><;C:7748C927;/.29BACDCC:676>>44282,$3@##AAB?:.#"-396>=3>:796444>B>8125;C>;580,A79<:87245@;>>771+'$+/4)&'%')(% "%'&!#%)($% ! ')(*-+&+/4.''"*/.%&'%$ "!$'+0&!""'(!"%!-!%&##  " $("!$)(%'%%'.&"$&%$%9:<8865420-,*''/+,/,'(+-..-,,010-*)**)))*&),..+)%%'+..+++,00/11ǀŀȀ~}~݀ Ǽº񃉇׀섁ýûøк·ʹ¿рǾǽüžǵҀƽɯźýIJžـĺҿ˿ȭƸƺûƽۀſþ˿¸ȸٿݶžŸشОijļýúѾùøøľɀͼƶĩóͻνϵƻýȽʻä삐퀓爦Ľ߫ん򃢐ṪǸֵՊ녇돘킀̶¯βĺ׷ªºŠʼ¯ԏίМ뼯ٷ½пڼ׀ǶӱƶƼѵβɰ끇˽ۃθŽ̸؀˲޸ǸʻλƾҰŽ½ʽ˵킊ͩbfciheggdedcd_`bcdcdcb_\\\^^`ac5:7ecb`^XXYYVW_adf58<:6gb_\[\^__chbYX\bgb\XSSVWY[[^ZYXYYUVUQNNQQNJEIJKMOQONOWZ[]_`^\_abf45777544313dcba``^^`dfecdfmrj`[XWY\^]]\_b_Z[ZYY\Z_gbahjii5k7Xjg`\]][XWY[^aa24d^[[ZY[YXZXZ^_]`_]YXWXZ]]]\_aa]^`][`aaa`_``^ZXZX\dccdit|FKIC834787:FPID:32122.WY00389;@@=::858<=;86c`d347;?A?;743443a\Z\a_]`ba][[_^\[[XXZ]]__`__^`b_]]]\_]\^]\\]\\\]]YWY_hiifg68nil:=;754gdd6;@@=<LSQSNHKOKJNNOJEDEFFC@CJOMKMOOLJJLOLJKLIIMPPRPPPOMLMJNSQNONMMINTW]a^\]]ZSV[Z[[VVNTQLIBGIJNKHFEDCFHHJHFDGIIDFJJGHKMOPRVUGFHJLMMKMPQRNKJFHFGGHJHINLLMHGGDA@?EKIFHJLMNRY]\XRHCFJKLLMMJFJNRQQQOMKIJTWVVSPNLKMONJJLOXZ[[Y]YFELKKECEIMORK?;?AFKLMRY_\abVQRPNJDENNOQRNPSTW[WQUXXYSNGJNPOQQOPROOUY^a3jYXPPYb`_^XUSRRSY[[X[ac`]\UXZYVSRYUNKQOPSUSV[\YRSXUZ\\]_a`YUY\[`aZSHOZ[XXWURNSUQRXZ]a^YZZ[`ZXa^\___YUTPNOORXXYZ[Z[[\XUSCLUY[YWTMFA=f;>@KLEIPPIFDB?EMJIGFGCGQKHEEECGJQTQNIFGECGHKK???@EHMTQJIGFIMNQTTX\UTWVSQNLNQL@DGCG^g[WUn?=?DFFOOMFADLDNZXVTQSX```afegigeefbgjhilmlkdceceosrutsqnkgf`]ZTZmmle]][\^chc_[[[UPUVURSQSUX\ZYW\cffefe`WWWZada\Z[\_lnnpnlpy~|vpry~~}{|{ztopw}wrpnnkhinw@@@|vsussroopnosreaotvz{vmkkiihhfklihhea`bacfjjqxzuwob\YVY\\ZX\\WNR[Z]]__\_]``YPV_a`b]XVSVZ_^]^`chjffjhhkostriifisre^abgvzqjkozuusjgfehejifhghlhiszzwyz{vwxsyy{|vwz{zyyyvu{}vxHHLRWUQMMPQJGJE@<<;=>584223[_102_46544`TYXWVSW^bis@~vxz{z{vofsytxwz|zxtrnooiabdcbcddb`c_ZZ]fonnifc_^^aef_YZ`_[Yb`ekloga_ZYWYdfje_[X[cZ\__[Z[_ccgiqw~ymZSTYeui^\bklhfe_XV^^ZTX`_[Y]eeSQYZ\ecZWTJEJLJHSZ^]]VMPYVMKNLHIFHTY\\UORGKJFQVesz{zxmf\dtrkgfcghbZSRPOQQPSQNNNPQQNNVXPRURSQQUVQTSOJIHKRPLOPKHJOPPMFHGLY_b]g=DDGJIBDIW__Y[_]WRQNMNMOOOMLJIHGFo``]VQMIDEIFEABP?]klf\Z[aWRRb[SllJMLHKKRSOOVVRTXbjZOJJEE}~zpekpZCIM]~s}HK{jwpoFGLJEDLORPRM@ojAMZacb\KFtlf8AIJ@mil5456429DDBv@PWWPBHRPEFg`baa\PWXWX`>UYvXUVKsa[YezgzCKIKFCFYGHJTKNNFI9S7LBCGD;_FQztmbrpLAP1JOLFJQSNQNLNOPKIKEy}ILz|LPZ[PJQNEMQKNUPNMPNMILKQTRJJLKJvMM|JJOKPM}}zzxps}xFDH}}xwyytrb]ULUWl_KJFUCtDRZceSKOTSJHI_RMKRPMw?@E\blxK}{|pjbV`wpapso]YbeagrlmgVL]YTr{d\_jif_te]M@>TeXPKIIMHHPXRc^FNOJCBITKKKAIR[NGO[^bQ`_\cbmnemnonX^YRYMB=MFVVE>YbUKWJ&>]CZn^ZKBFMGNQV_jH^|r[UybjgitFnZQRULYEIlveh_bdwlg^URJCz>C@TUTYhXUQOThsyqljtmlsh\VYWH_r{}vt^Rhpytu[stUR[`zyigcf_[\TOhmfhWirlvx}vmwvfjpcV`jbPbtBEt|{~=_JD<2:FXeeiddA|mfYY\fqpie[Zap}{|lj[arijqj_XW^alo{{nkhiWKQWe[MILGIIFCDFCKPC=>:D?49c@@IMPXZNOPOMHKOHWMMVIA?5>FFMJIAA>H6\e6;7@I?B;03;9;>?@CEA<59<;77;6587;:99;8hi555gh7888g_\\[TZ_243ea dncX\a`e7cZX\]_^ZWWXWUY\bbYQTQRY]]TPOU`adf.1-...0//0124000122211/--++*,-///.-+)***)(,.001.+**,,--.20)()+/.+*('((())++**,.)('$#$'('%"""##%'('$')*,--*)+--01-,,++,*)+,..-.16;70-+*,./.-.//,)+*(),)+0/-/11120.,))(&&%&')*)+)'''&T(()*+,02/,**,.//--/0.+,.+*.-./.-..-+)++-10/.2:@#%$!)%BB"!! ''h,+-.+)+.,+-..+**+,+*)(()**,+,++,,-,+**),+*,+++,++,,+*)*/32200213+,. 0.,+E-/0,))*+,*'&'&)*)+---1/,/44/+-/*+--,+,,++-./,+)*,.,++,+)***,,-..++//0/--+'3-,+-+-/-()--*,-,++,//./32-.-*'''&$&#!! !'''%&%*)&"!!$')-,'$'*(#&,''(&&(*)&+,*)(#"'))*$&*+,+))('&'%$&'&&'-,'%$"&'&&'**&%%$$$'*&&%&$"''&'%#%&''%%$&&!!"!&(%""'*)*)#$'$%())&""#$$#!#&)'&'))'&&')'&&'%%'*)*(()(&&('(*'&'&'&#(--042010/*'&$$$"$ #"! !!!##"#%&'$%((&&'((),00%%'()((%()**)'%#$#$$%&$%('&&%%$# !$'&$%&'(()+-.,+$!#%''(()&$'*+*)+*)'%',.--+))((**)&&()...//1.#!'&%$##%&'*& !$'&%(-0.11*(*)(% ")((*+(*,,-/,(,,,-*&#%'('(**)*''*+.15,-))-1011+))()*,-.+.12001,./.,,+,)&%('(*,*,.-*%'+)+-./012-,...00.)!&,-+,,*('*+((+,-0.+,,,.**.,-/01,,,)')'),,/.-***+('&#(++**)%" 0" &(#%)*&%$$!%+)r'%$&!%*&$##$"&(++)'$$%$!#$&'  $')-+''%%&()),+-1-+.-,*)'((& " )# 0!$"%')*+*(''%&'*-+),-**-/000,,.,*.+*%%%&('(+(&*+('%&*-,.023120,++,++,,,.,,/-*))&&&'*))'''('()+,**')+&"&*+("$%#$&'(+'&&%$"#"'"""')+,'&')*,*')**,-+,.+'&&%'%%$%&&$""#"!%3!""#"$##%'&#""%(***(())**,,/00100103475356665344775442043430232487;&G?BF;63.//258:940/) $$#(+!-)'+&(/24596%9#" &*'20*9:30/=!!"$%%*))%"$)#,2.-.,,166337789767969:88:98955655:=<=>>=;:89531+0<<;833258:=:7454/-011/0.013521158988874/11379766558B@?><<>DFIHFCACGJKJHGGEEC@?DJJFBB??><>?@D"##FDA@CC@?==>>>AA76BEEGFE=<@;:::9>@<;:6225347::@CB>CLKD=314334554652-/55:8675989;6.2::8:843025889:;>A@?@AEFE?@??DC:678>HRJEBDHNJHGB??>@?A>:=>>B>>GLKEFIJIIIBFQMEEGDGJKKKJHGGMTZWPLFHQSRQP-YWT*+/1.,(&),&#"')'( %&$$#$&(-6EFC@CDKMMIFHMJEHGC?8BEBFFIIIFFCA@BA:567896577557=A>=<<:76698:6348851:9;?@A9667546<>@>=;8;>55997879::<=BFMNKB86549A;647=>>>;724<;835:522488-*,-062-+*""$$#)-/150+-21,+-+)/*'(/488222(,)&+)09=EHDEJLH@=8=DB<95233-%!!!I"""&$#" ! "$$!$# !$ "! !"$&'%* -440031.,+)))'(((''&%FE9-)'#!"3<;6.004/,,95.>?'*+'*+00++/1..27>3+))&'MGJJKJD;BJ:+/.4HBHO(GJ'<3GF@<>M''*)%MMIFA#),-*,)0,&03432(%D;4,%&!852%$!8*/.+"&+,$EHH&6353/*$%$$&,.07')'<&6-,(0@4E',('%$&'(HJ)/'))$&$(!!% &%FA=4@M<'#-//)H%',,'*(')*,&%'#CBC(*FQI?@),45.IG(I-+%+-)M,0.-,.,*'(((*),//)())(>K-,MEJ((+EJ)SOX]V.+LFDEDCLKF@?HD@%$I(PWUIGJGDBEE>=52.+02A6+)".#@&,4<>0)-/.&')6,*),*)@"#%26=DLXV*QGBA;94.5B<5;;:117405=9<:/'40+;C424:993>40(!/9.,)((,&%,2,1/!)+($#(/()*&)/4)&,/3:+73/119939767)-*%' '#/0$06+"(#+.,7,/'!"$ $'),D7!.=GDD<-*?D-1058$9.*+-(/#';8;92.23)6>DEF:=4(6<:"!.87753"C85--07??95/03l`\`imnpyDEEFKH<8657<><:74225678:<:6347=?=<:96459989;:7643223ea^\YXX]`_^^___^__ZXZ\`cihbaa`^]`a`bdbba`_``_`b``^^_aacbabbek6iedh4ca`Wac69;;::86688=:886fa`^\]]^[WVZ_`aa^^\[XVYZYW[^YY\`]Z]bhk57888:99:6c^ab_`cb^\]]\[_w\ZZY[^^\YYYX\`ccb_]]\\XY_^_b_^]\ebaacbced^^_^]_abaacgdcf69:8jhhjiddffdc36<92^ZWXVTRRZ`]_/YUY\0478432678542236344200.ZYWSUW]0/\RZ_\ZZVROOLJMOPRSPRSOHBFQXMIGFNTTQLNPOKLLIMMGHIMNFBBEDEGHIHGGJJIEEGJIDDBC@DGGILLKJHIHIFBFLFFGQOKDAACKUTUULBIIJIGQPHCDLIEGJNOOKHKONLJJJMOLLMKKLKLMMONLKNNMRRNMOSTOLRXV]_[\ZYZVTUWZYUOKOLGDDJJKGB99AILMIG@=FIILMID?BHORQLKIIGIHEJLDAAACDGFBDGILKKHHJJMQPJKOSRTSPOQMSPMNHEGIMF<:79BKJKMNJGFA=;8:DFGPSTX\YVV +XSSVXXRJMGLMKIJIGJMSXSOOMORUY[a_`e^XWUUTVYVVXWRSQNNNKKOSQPOOQQRSOLNQQSQQQNJLLMLDFFDCFHKPQPKILLLD>DBE>=AEFJPPOQRTUROMQNOONOQNGHHGJIGBBDEGGHJGC=@A:<<9;<@CDDGEFCB7]=PPPOPPPQMIKPVX\^]`[WZ\_`adfle_]^acd`__ehfca_[\\]]^^]Z[dcahgcgkgbc^\^befhie`^^SW\WTZUOIT\W]JMURQRXbecdj@FIJRQQ;94:KSbqSV9??DEDIQRPLKHICN]]\ZVVY[`cbhlkloldceec_dbkrvvoipoqpomprqstmegijdblpjf`__`ced`]YY[WSSTXVQRSVY\\^ab`fklloha[X[df`YVUUXchcgknpx}|wvwpinrqronu|{trotyytqlhea_gmu|?}{wurnopnpurW@\jimu}mw}}yusnnlfdcbdelwyzzvsngbefea]WTVVSQRWY]_^ba``]``YQT\cc_XPNRUY_`bc_[]bcaabehc]___elnjgosx|qjdemppromidfhjlnpsoeb`^fowywwxvuxy~~{z{ynkoqrojeaghilvNRPLOQOPMGGD<;<>A?<<>:8733^a35656655[Ea3\_[Z_akr=AGJHJxvz}{xofeltuppjjp}{xrlqxuf^\\_acdb`da]YW^^]\]`]_bdb^YYRTZ[ZUJ\hmhgefiic]^\WZXSSV_g`TZ`][[_cbafsylfeYLKRYbke_emvsxvk]Xgoecab^VUVVYZX]\cih`WO;QYZZ^ZUSROMNNPSPIDAEGFD}wj^ZUNJFFLNGCBCBGUDgxiY]aa[UVZKQaVGKKLMPTPLQ_c]Y_qrXHFFI}wtpb[cM}E<~XMp^~zszEIMJDCLXaVMOG}klEZc`^YQFBpv;>KN|qjij532443huFC~=DPPJHBUZFvyqV\dh^UUWWWPR_XY]=XR8P/>[LGMUUSPMHKMMHKPHqJKXO~ESWVKKSMXYFDMLMXbYQRSTaQNMLLKRQLGHKJMJOuGROJMK{twx}DI~{y|yrnbZYRURSVVP]jSyK\gaWNMJKQOHIPXNBMMRq@F@ZWoPL}{ldaY`fhdssg\TWidY^c_V[Z\TRmn]LWma_ii\^XJH[hfXPEEJTSQRTfbSRSREAHNRSTEDL`SPHZ^noUWbm`ef]Yl_VPTF?SOD=GLKQL@?DIFJH^iz:L\mkXFDICMOI\kVJG^BGe^Y^zqrfd}vc`VRUXZTIUifcf^Vablgj^HJGA=ISVJ:RSQLPd@wlgdjnfbd^ZUK^vtwyim_bklqucb^user_H\X^e\_^Z^WX^byt[flhgjn|utoZZ`g__qlz@zFIE_GGJDHQ[gYIIDS_\YVLJOVYZWVJRSPMRSbh^IFHJE<52=9CKI@PUMTZUNHCHOQQVNHBCHHDJMJDCGN?SUc9:>AACKLQZQC6Z4>S^a]^`a\[ZU}OK[31b``_W^_]_3523545766=B7,7<9:>@ABEC>6677658757788998lhfi5ied4777kc`]ZWX\^22ceghh_TYW[eba][[YZ\^___^^[YZX[cbYSSRSUY[WUPR\hg-02/*-.0004671.001210-*d,,+-,,.034120/-+,+*+,-,,+0..-+)))(+..-+,+**++-.+(''(*+-.+)&*0*''(*+)(((&&)))'''((),,*++*,-./-,,,,./2661,(')-00-,,,*+-+)*---/.0663340//.-,*('''&$$#%(*)((''&%%('%(.0673.,((+.0/-,,++--++--+++,//-+'&'((+//2;#$#2*&',/049!##A?#&".,+*((),-,--,,,)()+-./0--,--,./00/-,-.--/.-,+,-..,/32/./,.0..-0--,*+++*)(+.-.,)***))+*))*-*(*,+)-/115-,./,,.-++,,,+,+,,+++*+,,+*+*)+-.0/.--,-+,///0/.,,/.C-/0.*+--,-/00/0211321121--..--*('''&%$(+**(%')&&&#%'(T,,'+-+++*(&'&%'(*++)+,)$!$*/)%%%*.-+(*++((('*)&&)++%"#&%#%&&%$$&''&&(('$$#$"%&%%'('7%%" #"""''$! !#'-+*+'" !"*)# '%"$&))('%'))('&&(*('(&\''&%''(**(''*+(&*/-01/00010-*'%#! ! ! $$"#(**(((,,)*+))-.,)-++,('&(((&&%##%%&%&&'&''&&'%#!$$!#$#&))()((''(((&&(#%'()()')))(*+-,)(''('9&%((%())+,+*&%&%!$#"""#'%$"%%$(*'(,-'))''))&$#$(($%((**'')#--+)(('*%',''(),.153*#(),+,0-(&')-+,F+,+,.1/-,+---*%'*(''()+++/0-**.0,,00/.0-*++)(,. &(**+,)))''((('*,.-,-+-.+-32-*,,''),,*../.,,,)*'$'(**('&$ #'!!"%&%%# #'))(%!%'%&(%#"#'*+*''&&#$#"%'" !!#%&%#$&'(((&%&'(*+&&*-++*)(*())&%# !# j ('')*&## $'&---/0/-+-+*-//,)+&(()))(%&'&')+.,*+*+-.1142250--+,+,-,,-,,-+)()'(*-+*)()**,)&)*+-***(&($%$$#%&'))(%#%%&"#!" #&'*-+()('%)()V,)%&%%'&&$#$%%$%&%"!""#$$%$#""+**(()))*(&'+/11102/-1344468>83002562226643200234200665998:;:78324799<<72.-#%&#"'$!$((0+*.+*+.44326#%&#$$&)3-,/6?+- $$#'++*('%'#,4421/./14449:::<:54553/228;>>;7<<<;;:<<=>?;789966<>;:65569:97644520//31../134457759<<<=86315:<8430129:79;=?DFGDCD?<@CCDA?CFFCA>BFECA>;:947@BA2!2?>@DHL@ALIEFJIFCB?<;623368=EFFKLHCA=724897521331/1559;:=<<>:875216<;51-,01379:<:68<=;9:;;=EHGGCA?<;;?@DFEA9667?EGHHHII?GFFIHGHIJKJGFGG@::?BCAB??CJJJEACGE;65679::7798621631015258963//),332.(4>@;:89==:7874751139=92486679;;8?70/248;65;?DDIH?65?C?><=94553565527960*%&/2/,/26?A528:2/,-.02/..7C@0,-158=;7?BFKHDGFGF@749>@:4200+!"$$$!"#$$#!"%" $"$%&$$#""!"   ###$!$).0131,++))**+,*%" $&%#A>6-(#$":BF8-2451-/3*.8/$()**,1.*-6;836@A0&&I'*JHIGDBC96=-HS*!LMLSQNM1(6*>JA?EJ&(*(%KNMC#(170)+%<00!/5220,%"79&)@>850,8%#@"++''#C.2$H>?:)-25,$$### $-/7-17*.#'+&C:-#$@)&##$&NF)&'()($!)''$1",'70.1G +*+'[4)&*.-+)(#&'(&(*$ED;H((0*A%/21)GF(-)13%$**+4;4.12/5+((()(--*'')(+DI,.M?%+)(BCOQKMSV,)ME@IMLNLCBHKEA%HN+OVRHHJFEKGC=:300,0/20-,2<.C,8;51+++,.-((/3+#**.:$'"30=VZ2],P?A?754/3894>=72-.62-2542424-)==2(.<557:131(&2;8/,%&).--/,74),..%!&+-..$&+5-*&22<<0/39056/+4-(#( %#$'(,( #$$#$!%2?#-78.! #"")6*!!."$C31+2B9?84?<22.+..2-#-:664.*338683%''$!""##'&#%/@=8646;84641/'3FCBGC7805:<>E995AH=6@:$125<34424/255D@06<:7<=ELQSP@<8+057/0;7AFC#@%#!#.>94..?>8521238871-13>EFB8;529A=?D>4+2.4ABF=89911380+)()'$'&$%%$"%!!&),2,"#'/,++%#$),-+*")'&$%%,0-!"!W! &$')"(,(%!"%%&)# %&%! "$)1!!"($*#%&$%&%$&''%!&&&&%"%%%&Y54111/.71.,*')++,.0240(*)+-,.,**)*+...-++))*(+22,)('('(**)$%+21€ˀʀڀ ~}}}~~~π ǽ톈݀򂐐ꃌƳʼźĻݽ΀ƻι¹ƀ»»Ŀº༰˾Ҁʿú˸ļɾ̵ɾ½¸ȿꂋоὧ܉٤̾ф΀¹ɺǸÿ|Ҹȹ¾ɼ偁Űľ³÷ʴހǸļòܷѼƼıȶЀͰߌƻñ̹ʼnـ뀉􂔩؂ӓΐ჋Ȭ򃜯Ƞ쀅냀ǻȺϰɻα⽠ɸثþĸŜոָĠԽŵǻø˺ſųüʳԦô̼ǬɄꆐŶؼȽ̽Ӻƴƺȶ˺ʶƬ}考!eceieefdaefgii_a`afhc^ZYZ]``][Y]`dhljedb]YWW[\[]e6643576f``\Z^a`]\``[]\Z`bb]_d]YYZYXUOT[XWVUVUTVXYYZWUSPTVXZWY_bcfedccg57665445655566:<;:6ihjjkkece^Z_de_YVVWZ]]Z]_^\\\eljc]`^XYXY^abbb`\YYXXUTMOUUV[\ZVSRXei`^adilga]YTW_dd^XVVWZ]]`ba^YY[`ea__]XUTU\`cm{}zqfd^\chlr|CHKFBFQP=[Rdif3689:97:4W124aqZb_[f8779:92]ZYY]^043454323552^]___`acbbc`^a`[YZ]`ej4ged`bba`aceggcefdaba`bbb_bc`]]^\bim6jbbcaj7hh53c4584b^_278656769:5fc`^]`\XWY]`de45ic_[ZZ[[YYWTUXZY\`fa`567988hdga^_adeggd_]^][[YWXWY\ZZ^a`^^[[`]]a_XX]\[ZYZZZY]^\^abcccaceb^`_\]_adhkigffhh567gdhigffggca4:831^[XWTRV251//[YXY]288330/2587644667874332/YYWTTVWY[_/]ZR_4cWTUQSULKOPOQKKTVNGGQ[ZQKKOTRLLMRSNJKIKLGHMOLLIGHLKHGIJGKMMONHIIFHA>>AEIKJHGHFEDDA=99<=?D>G=>GLPOMNNPLDDIM[TIRKEFJOFBIOSROMKMPPNNPOPPLKLKMKJMNMNMNRQOOPQOOPSTSNMQSVVUUW[][TUYXYRKMOMHJNLMNE>:AEEDIHLY]ZQQSNNQNLJJMNOOMJJOWUTSMKKJKLKIHECEHHHJJLNONPSQPNNHFHEBHLOQQOMPONMKMLOONPD@DJNONLJLNNLKQUPOLIHGGHGGFGEEJMLIMMLLNKFEEGBDGDDFEHHKJLMLNLIMNQWXTPNPOQQHGIMQRPNNNQRUX\]^`^\UTRPWPLPUW\b^JFHOTVTRUXTLOW_\XUXTQQOQU\]YTW[VOLJRVQMLMOPRTalf```ca]WYYYXXTSTUV^fN>T]WYYTTQPTSQOOMPSTXWWWX]_`a\Y`_\WWYXUSTSSX\__\ZZ[[WTTTVVSRRLFIHHFMOJKNIAA@><739AHKJGFJJFFFADFJIHFFHLJNMMLQONKLLJDB:?HGFIIGEDGGB;3]_lBHNTXcf\V[XXb_TMJDEJNOQQMIH@ELNQQRURRSUYZ\]cc_YXYX\[^ZVVSTTPMKIKMPPJLPQRWZ[SMKGMTPOMNPMKLLLHBILMJLOMMLLNMLGDD?>:ABBCFGJKORRQQPOSQOMLHIFCECCGKJEBEGIHIHGFA=<;9:6fbi9;AHKHGJC2.GQOMOPY_]ROOV^bccifa`ba_cdff[^YUUZb``]`a\ZZYZZYZV[`a]Z^`\Z[`dbbacdcdfggklib\ZV[VF?OTWVWWU`>GRVY^efg`Z\gY_B]Vq;>@AB8VSDGGLXDemk\Z[`e]WSQQZcSKLSVKILKHRfgUW`neQFFMG||txwsiaJYCegO}X^OmwE~xr|EJNIENZbTKJJFFLM[hf`YSHDBy|LRGidb_h4100248=zEFFC}[\p|f[]`dZWVU[SKP9LWAv}J`TJMKDCLEf=:dGGDHONQPKCy]`rt^rKCzn:FT\opU[\J<8X_WMOQXWSNGMRNLKOPHwIWdZFHJHKSWW\XJGNRVU]^SMUgzXOKKLIMMHFNOLI{ULJOQI}KHot~FKE|x|Qxvuuj\WNDOUim\\]KJRVor]QJzzLLHEFG\\HJKOQyPOP~fY\^`VfffmZUUPUR>MVMFZhi`]W_]HZv\d{]MQV]XemaUVPKIVRORXZ[TRSRGCKIMTUTUUWOLAQZ^waUUPKRVH]qpteWU^e^YHKUONJ?fuFD>J;.JF\ZqjZeRVMMRKYiYPDGYnvcl_LYceljvxleX[SgkZRTYb_]\XUWYZiYHHAJQ[XOKLTQQSXuu}sidcbfgbgi^ULcxvmqtj^^inrj^Y^aj{livuQIJTfXZYVSSa_hyrpfVem{OmdOenc_DgwCvDGA\VS[aXU^tzjUgvmcdfe_W[YX`\ZWisxx{}hp}tluviXQNSju}oln__`enbaZRMHBGJEGDGEEB<:c9EHJUVRRMXb___SMJMNT[YLWLOVWa\]_RINHHE;5=A;@E=KOFSZ[]RFNSSSWQLGINHFBGLGJMH<7^f8=C@FIOONOOB346AU[`^^^`YVUQIFX4a`1a\XZ[]_2411443678=A40:<99=>@CFD@:677537858875787efdd45ih46lillea^ZYZ\34a\46dc\QQWZZbifaYXWXZ[]agg`\[_ef_[XSRSTVZa]VT_d/011--/.-/2344//../2.+)'(*-/-*(*,/100132110-*)***++/0,,*((++*)-.**+),.-**.,*+-.-,'&)''(()('())(('((')**+)),--,-.../t.,/113/,-++.23/*)(),-,+,,+*+*043/+,.,+**,--,,+)(&&&%&"!%%$&'&%&%&,-*)*-143.+)(+/22.*()*,--./--+*,.1.,+*'e*.06>=<6.-)',16:A"%'$#$*'#*.+ +,,*(.)()++)+*,+,-..--.,+-.,)*+,.000/-6,-/112/020---.---+01.-...0234/-,*30/.*)**0/-,-.+))*,-/./,)))*+*)**()*++,.2/./.1/---./100.--,**)o+,*)+-,,-++-)),*(*-,+***,+,--,-/00/00/0.+-,,...03533234220321/.//-++*('&%%(&'&)=%&%%&()+,-,+$+/*)*()+&&(*)*'&+-)$$*00+&'*--*+*,,)'((**&'*+(q)(&&((%')(**&((&&" !#&()'&%%$###! "!&')('&&'% !!)($*%!"$)#"&))'(')**)))()*'&'&'&%&&'(')+)''((('(***'&),-/222.--'$!!"!""!!%%$$'+()+**)),,,*(((*0.-,(%&%%%$!#"#$''&&%'()()+*(&&#"$"!#%'))('(('&%%$'((+%"$(*)(&&''(''+,(((''&%0&&&%%$$')'%((()*('%#%"#&#"$#%%('))()'()('%((*..+( *)$$%&*+*))**,/011//+***-'%(*+,0.%%'*,,**,-*%'+/-,(*(!*+/0/,./+&$$)-*''()()*052110//,)+,*)*++/4%$($('$'%#&&%&'%)++-,++,//10--110--.-,*+*+-.0/--,**((()*)''(%!##$ #&"#%#  #(,,+)**))(&&$!%&'*,$"&&%#"#$ !#! !&('&$&&$## "%'''%$%'&''(&)(&$###!" %$$&&# !!++5#').0581,1/-41+'($"'))++)&&!#)*,++.---.0021651.-/,//0-*+),-*('&')**&)++,/11,('&).*)(++)()&'&"&()'(('&%#!! !""$%'')*)(*))*))&&%&$"$!!%()%$%'(&&&%%"3/5#&'%"% $*((**054-,+05664875564467:;450,+.522/11.///0///-04520243245875576778::<<60*'%&" "%$##%1#'---16550--%&$('')56.:43&4->#&$!',)%$$ $.00/12002248655773239;69; =997:9;:;=;:987==;<966;=<;96348:7344334652011245659:86103577787226740/02556248:=?><:9;:67>=ACCAACA>;9642-18DHFE%'%EDBBA>?BDFGE@<@>;>>DKP)(ONQKEEGHB=951258:74:GNPL;20.,2:@=9:6661133366A<=@>82/3315;97:6-*+4=>9;>A:3147:99:::;@EBAILA<::BAB>???>>@CAADFDBEFDHMIFFFHO3V.VIJKHDD@837>BHGEGEGGP41VSQT055/)!"$ v)("')'*"#$)..21)MLF@A@DHGBAB>;>?A;6:6>GDDB8/-28;?@<879759;748;>;4.+0342021/+-1/,++.003126<>;>>70353657876475343.9FC80../1/5=?@@EKOSTVMIIJNJFDA;336976456231,0,'##'/423:EMB7007?2-.11-02/)-9:12??710--//2;!B=54782($($!!!"!')&#%%%#! ! !"! ""## %#%*01/.-,,,-,*+('##"@%$FCA;/'!'":<90/14830.,.39-'(,/)(*)'.<=028A:,%K'+'DEAFFC<8+5,R9>/LFDKNM03)26$CA>E&(+'JOPG$*28/('($"%&/872..'$"<;',&853//BIF??$%$"A@?13EE8>0(),.'#$#'#"(. 9>&3)$''"!'$34'%!DEH&+IG+,+("7(+5:08& 71)/1<7%,.!K23.()+/.*%#&+(&$'($D?G'/70$')(JLO*-0/2/&%*,13870,1>4,+EC,+J'%''03H*GH,*.+Hfc[^Y/*)?2.114-666;-,+',*'.,'4991..44&/@/4E1',0308=5./)'%1/--020,,/-%#)'*--.+*2**!+.4D1+.,&+.#+6262-+.50,#&-()' 3<$ #- *&65/5++$$%)4*')7=470#,4695><55.0*78/**+2-/.+++-.92&&!'),& !%""#&;=?:63434886;2.(6CB<:>81/69@;3168>@B48?D>9AB<2*--9>D;:?2344<981,)&!$%#$"$#""0#"%*)'(%,//.-(%$##'**#,%%)(,(,.'!# !##"%'**+(!%))')'#!!" !%"##*2 $$###$%'%%%&%%&%!%##%#"#$%&141/1054663..+*)()&02.%%)*)-10/*))***+,10-++.22.,+(''&(*-,(&+-΀䀍}􀃁 +~~适̀̀ 뀇ހ󂆆݀ü¾ÀžɿſԀþĻ羓ȸŸȿÀĻ¾¼ĸdȽÿƄˀ¹ㄜոüʾĶȶ˽ߒ㮣ɚǿõϿſÿ˼±¾ûȼŵþ¿Ͷӽù¼ĭ򀄇݀ϹµǺή羀Ƚؙ􄋀󳮺ҹ͵р˽™ոÿ엷иĻŴøʹƿ넛ɬųٙεƲͻнϿӬѱſϬͱ恄ϵýɾɾ˺ͺŵ򀜸ķƳļǻɴ個Љdzò^cfhdbfhecdghkb`bbbfgfb[XXZ]ZVVWX[[]abehggghga[]`]`aed`cd479;:na_^acee`_b_]\^_^_hfb_]]a_[WUSTVYYXVTSTUTSPMMNPRVVV\`cdcaabe5653cc8dh763e687567678:976iggecdhg`ZWVVX[\___]XVX_ge`]^\YXYYXX[YWWYZ[^ZTPLKRVWTRQU_cabcegihdegcacgg`[XWWX[]_^ac_\[^d58:974fa]]]^adefggcbaksEHJJGIOIFGFGKJMW\\L<[OJMPMKLLNOMHGJNRONNMIFEGFMRMC@ACCGLNNMLKKMPOLLKMLIHKPQNMMLNMLLKJIJLLI@8p@CFKNONLLJJOQIIIJIJLKGEDDBCFEGLQQNLLJFAADDDGGFHFGHLKJLNPNNOMLKOTX[YSPROMPPKHJMSSTTRQUXY[^][_a^XSSVWONRVX[djaXSQSSSVTRTSSY[WXXYRPVUXVUY_]XTQNNRTUOIHHJMNS[^^[]`ade]W_bYWWTX]_cecUU^_UWSTYJR]VMPMKPPPRTUVXVVXYZ]]\ZZ[ZXTUSSY_d^YWVWUSSTTTPPRRQSUVTR\S]VSTNEA:996i8:@JQVSQRWUUWRPKNNIEFGGLPOKKOVREADEC97cg3b5?CIMTUOLLIGA:8==;:=CJJHKKMSPOQSPGA:98CKLFA@NNKE4V8@FOV^f_\a\X_d\PNJIKLPRRPMIDEHKQSUVWWSSUXYX^^[[_bZXY^`_[VQPNKKIKOQLEINORXZUNNIHJMLJIMMMNQPNKIILIGKNKJJLLLJDD<:EBCGFHJLNMOPOOQRTVTSQPPPNIFCACBBA?>CIJGIKJGB@<8?=:k\`em?IKFEC>EJJNUVSVXZ^bfklld]]XX^dfd__\VKIY[]\\\YZY[^YVVSWZ][Y[^]_bcgca_acdddhkkjgcYQV[WKEFKOTV^[HYZUUY\YWZ]cggkpjlosszxronjkokjebbcbdifddhc\aegggditonha]^cff`___]UUYXWSVX^_a^\addZSQUY[\`_XPMPVVUZ`caaaeb``ghkkkmjiegmppmlnqvz}}~zwyvqotwtvy{|AC~zxtstwz|}yoljeelz{sov~vnidcknqomxztqmd]]]`owukb]URPNONPJPWaniddc``bhjegpodabc`beb_^ZVTTW`c]TNQPWZZ[\`cdkpqy|yre^_dfghr~row|vplovttqmigbbea_`hou|}|yvqlr~ukiijonuyz~HLNKKD@BFC=:79;;:=;;;797469746jhggj89=FIJJLT_\UK~ytqqommiitxljokhfgqpsvkgb`beli^^WZaa_]_a_Z^mtncb\VQ]d``b_[VUTPLOUX__fjhgd`WZYWX[][`cjjgea\[bgef]ZbqqaSKOMMVV[^eq|w}~rgeeefbejkkb[Y]dbjulk_VUTV^\SPPRTU`cbjkYSVWYX[ZVS]inflyttuEFFJG{~~zsmmqtrddlqwJNz{smijcTJKKUXWX]^ULMOOPRSQPPQSWXXYZXYYRVYb6879;;56?GLOTXSMT[^[URTWXXVRLGFEHKKFB@{wssj]VPKECCDAFJLQMJPVDbild]\a`[TNRTY\VOS[\PKMTZ_[PMV\]TNGLH}|{}wdOOrfJNIO]aIw?tpDLOGHKQSUNEDKOMMMWjmfVUOFD|rDQFg_]U[c40\06=@Cwpu?BBGCCJ^XHFztjg_VUSQQT\NFJrGQMEP[NHH=8AGGRa;gOI~FMFLOOMH|zvpspcyEI[_emkNJ_VmH6W_b`QIRUPWPPOSQLHUXIKZ_PFLJJSXVX[LGKRNN]aZX[ooVOKJKJLNHLYUKIJQXRJIPLnrLMwSWInz{xuL{u|{oqxvj[XXX[X\XSS[X\bVsrRJxu{HIFFI_U{`\LOOUXOMm[NS_]X^^[YPNPGJSCImRfodqgZ^]X`c`tve\XRWZ\cYMQPZPRJNRSSZWNORKJOIKXZS\XNKLFV_ZeaQQJ{CKMaxF~[Uftsf]RMLKKB>l>MDD?e?=TdqhbP_MbfMELRf]QMTbkikuFOeov|ywvhbV\k`QU[a\UXd_XJGRVTM?VfgSV\`\WX^kqrwppdn]`uo]jl[TdmrgcdegcbloYXbcccidetfWDDVOUQZHM^V`x~zqlmdwNwhcpkTlIp}HG{eht;``gmkic^tx`RBBlbefeb_XTWbXTS`jjw{vv|ywkejqcKMO_dgcjm\Z\aju|s_TMLOKGFEHHABAD8g7CUWUUWXd_`_[VUZSRMJKFOOJP[c]ZXRJRQFE?65K?7NLHPMKNWSVJBHQJFMIJRVYRECJJJMEA;657656966766777fffdfg@566766kkje`_\\Y_3d[\b\\b]RSX\^]e7i`ZWUWZ_fiedeiiia]]\WWXWVY_fed`2+.12.+-.../1340/..-/0/-+***,+)()*,,,//0001211.+*,,.+,.4,*)*-/1.-/.-,,+++01.---0/,*'&&')++)('''('&%$%%&))(*+--,,-.0,,-.-/./.0233.+))*+---,+,*(+/32/--,**+,*:)*)())'(**)*(%#! #$%%$$%)*)++-./0.-.-.133.+**++-.,+-0/,+-0-++,-.12441.,)*3><733003689653.'&01/0012/.--/1321133468:75587:;;71-&"$%#  !!&%##))).65:741" #%$20)#:3!5.68$)*)&,)()($&20,-/1//237879<89;==@?<:769<;;644656:86685259:;<9<84469::65576/.00/023666437883//2455760*)-110488677;878==?><=;<:=ABB@>@ADGHGHIFBCDA@DFDEFFG%%KLIDCA@@CGFFJIEB>==;;?GONHB?DKJHIG?70,*04:>>EEA?=93/-0=FF@:62/.,--0-06>GC==:877:><=BC;89976:988521359:62/1.266779::>@AFIGB:67>@@BHNOCAHLHDACGEEEC?=::;88;?BEKKJHEB=AKRPMMRVTPNH?==>BBEGHMMLLNS+SPOPO*+)(" " *+**+"%')+2:60*JFDAAA>??<=CE==A>::6703787579623<<971322356468>=<=:66:;;;438CC91-/,,1167:BINSW[UNJOOE>?AA???F&'(+(IFJJHD@=>?<1289=F)*LGEHC@A=:870'"!%$#$&'#! !!"!!!"#%&$##$&$$$'"%)'%+020,*,.//.+'%%%'))&$#CC?<5,& !%"7:<611541-*/0240*-33+().374.,2660+&M+'LFFEOFC9,T/R@;*MKGO,)M-44%689E%I*+%GN(*...*%%(+))'-9<6+,*$$>8$,%41-&'(#"C@:= "#&#E#'30&&@92.*%$! !$(  :%*(#A*0&#%"#E'*3+%CAD%*'M***(%>;7376-;#$B.4673",(+.753+%--'-()(*)%"-0%HDJ(35+G'+HD)I(.1./1)%(/.J-7:325@A-(&&(')*&(11+)E*L/3.('+)G=BXVQ*+PPNBIU03)LEB510-12381),*/(-*,..-2/**-'&*&'00,31'&("-3-65++&?%($/<%E2+3=<62*&'&&#"6' 3)0420'2%56'"$&40+&)0574G;!*7=AAB;;=55,0;2(*-30*+40-'%,.,) ,54&%(*&##(4:<@;=3;22B@.8>/*5=A:4335329N>/069:8=74<90%$0+/.4((507CIDC>>E8FMQ\-NF@61:8'5&A@:?A>FB=9:@8')*3676:=40/49@FB4,'&)%##$%& #4"+***)*1..-*((,&)$!" %'$&+.,,+' '%!&&%!&'""(%'""(#% !&)+% #"#%!-# $(& ,""''%'(%%&%%*$#"#$m/12///5441.-,+(*+().**/+%&(++).5/+)'))+/0../244/,-,**+*)*,01/+݀‌}}}~ ˀ c̈́ˀ򀌏׀ـºŻžŹ¿ļù¸ +ĿŀĽþ̶̿Թȼļغ݀ɻ̹ſ̿Ъ࿥ƿɫ°ɀϥɻºĽż̼øȖ쓯ъоԽߍýƾԀþɿ̱½¾ĿùûڸûѻԓŻôɻŽûķüºՀ͇¼øʹ傀ԑ̲򂠋򀌌˷ۚ􃎌敤΅Ƚ牐哢ǿղ¸‱ǵɿѾƜΤٸ񁟆ȸŮȿͺ؛ìðӮŧνܼɻʻۃƀĤʽÿῲ˿ľβư߶젞 QjddcgbbdadijgjgcddecbcdfbYVVSUWVUVVVY[\]\^`bfc`_^]^]a`]^^^am:::87fikkaY]b^^\\]^`eg>eegge`^_\WY\ZVSQSTRPMLLNLNRPSY\^]]^abg543cb`]__ZVZ`^^```49965hd>hlkic^]]\Z]]\[^`[XWZ]]__]ZXYXZYXXURSRQRSTWWURPSTRRRPPOKORU\`f4fTeegjjhd_^^][]\YWZ_`]Z\cec2233dcca^^_dkjaa`[[crGFz754eY`54_`_\^.155425VJe6f_^``]^]YUZ]bd^\][^_acc457886gddeg5ij6jhiid_]adfedffeijjecbcc_[Z[\a`]\^`^\ZZ[\]]\`b`b`]YY\\]]]ZY[^\^\^aehffjhdb^acbbaa_``_[XXZWVVUW]]]_be66e[Y[[XXWTOLMLQJ?=ALRUUWZWUZbijgeb__aa`__][ZZZXY\`b\YZ_adeaabcghjoplb\[\[[_bddba_^^]\]^abdfeghhn;:88:97lkga_c6:9766531^_]^13221\WXZ/0//11157553--4878998641.-Z-13444540[YWV\]/1]YWROORPNMPMJGFFHJJMQQNHMRNMQNOQROKKJHEIPOJHGJPIEKLNRQNIOMMNGDA@AADJLJMKLLMMMLNMLK@:>??@@CAA>;AKSRLIDADD=@CGFEGFHLJLLQRMHKQXRMLKLMMOPOOONNPQNNPOPPPLKLNMONNOPSRRUQNPTTTUUSPRVXVVXWVUSOSRQKJEA>@FFFNRKNZ[PIHYSONOMMLJNQOKHJHJGEELKCA?AV\QEA@>@FKMIGHIKNNMJHIJJILJMPIKLJJIKIHGFFFHECDEE>=JPSSMOQLJNMLLIGIJIFCBA@BCAFMQLHGFDC@@BCCCEFHJHEGGJNPNOMOMOPSTVTRPQQRPOOQUSPPSTUTQTWWTWXRTVVTPMORRSUX\afgg[LJNPSSPPU\]_[XY\^TPXWWWRU_c^[WUUVWRNJFDEHLPTTURNVbdcb_baWX[X^fgfcdcXWZZTUOO[[\ZUTXXQLJIQOHLPRQWZ]]YYXYZYWSUTT\c[VVYZYUUUTTPOPQU^dacbXTMKCLXF9ki77:@DHMPSRVZ[_^ZYVVSN@77@HMMJMT__NGGFGEE:e:BKLIMMKEFUQMV[\WTL?=@DEIB9?GIOSJ89DKQSY\XUVWJS_aROPRQNNMMOQLKKFNSUV[[WXXW[\ZXZZ^ccW:?[ZYYVNKNFBCILPRRQPOONVRPQNOQLIJKLKMLNPLKJFGEGJLLMNLKMIEGFGHE?INNLLOORRPSVROPQUVRQRSRJIIIHGHEBEFFCDHIIFEA:DFCA<>@:9?E?>=>A><:?FI@BJNSXZ\]]hkf^XWUZ[^`aa^][RHOW\]\\]]_\]ZXTX]Z\[[[XY[`a]^`[`dd``dini4fZV`_[aZUSRQS^aRP:RXWZkl99opCMIB@HR4"3DZi\DSX^iaVZ_?HOMMQSI=]b;63ei899;9en:;>CIJNUWWXWP}xw{}utsrihkjgjlffgp{qf_cjot|zvbTfgaYV\ZYZUXbosr\J4R:Yoolhe\RLIHIOVcomje]ZZcdbZZ^_]bjnhab^XZ_a^dc\]^ibWTZffggY\dflqtlh^VSSVTVX_ba[YXZ``dpqkh^WVW_d\UVVSOTc_OJKRUX_bki\^hsv~yqv|FEDD}sijfbmtvkq{xy{pnpljnsyxl_V_keaaccb_^WSSTVZWX[[ZXSOV]cf5_Q_59dJO4>CEKU\^add`]YWUMIPXWTROLHDHMH>heqmf^VPHA@FMKIPT`:eLHPBZfhdcea]RMRXUUa^RY_SQSZY^YKJTZ]QRNIHENH|nf_YLhA~szHJPXPxrRf^BhX^|EJPPGHGIJJJHJLJLQQPdtp`SVLIDrd5B=6>MLGRLGPPQJ?INK7H@7DSh^KFIGGNCKHXc?cF\D>AOVXPB?Ae;<8Qd33\QNQNHERX_a_b2a\]_[\0212/267891399:9;>>=>BB>;6477638:56456646jfgddfh667859gh7e^[]^`egfcb^W[^ZVWY^Y\dmmd_[XW]deef5668kdge^]\\XX[aj862/..1---,/3433200/0/...00,**(')***+*,...-..-.-.--,,++,,--+*0/00/-)),+++,,-.1110133321-+,,))**)'%&&'&$##$$%&$%'*+++,..0.. -+**)'(,,+.--/026760-++,+--*),/-))+-...-+*+)+*((('''$$%&('&%$'(%$$$%&$$%%(*-,,..//15651-++-,,+(%(+-,*,.,*+,.,--.387/.,')3=J'&HNO:KA)"(+++)+%.0,+,,,-,,++('++,-+**(+-,,-/P022110/-+-/00/00/1330/-.0.+++-0/+)+--,,+,-.-,...0.+)**+,,+*+-...+++.1//2/---//-,-/.,***) *-,+,./2,*++(%"""$##"#(*)()*)),/1/-.x-,+**((*,/+)+0011.-/0014764/++,,.0031/..,---,.012534338663.,.(***(%&' \&&&%()(&&%%&(('')'%##$%%%'**)%'*''*))**('(''%'+,)'&',(%('''%##$&($#"!"#$&(%'&***)))*''' !;"$"#!#(+*'$"!"""$'%###%'&(&()'%'+.*((''(()))(('')(&')(())'7(()()+*),)')+,,-,**,//..)%""! """!" ''$$&-+))(2'*,+*''&'$#"'%)+'""!!"$'($"$%&)'&%$$$#$&%&($&'&%$&$#&'' (*++')*'&*)()'&''&%$"!"$$"%*,))'%$#!!"""#$%%&$$%%'**((')'*)**+++*+**)(),1.))++,,*+,,+-.)**+)'%'))**,/3544/'%()++))-100-+-/0*(,,--*,12/-+)*++)'%""#$'(***)%*1200.0.*-.,/343121'#&%$% &&&%##&&"! &% #(**,/00.-,--.,*,+*/2.,,,-,))**)''((*-1/00(%!#35!$&*+--.1221//,,++"%&&%&)/-#  ",1,(+)(*-# *$'&))&!!,+(-/0--)"! "')*/1/-.2%'/2*'),+**)()*'&'$#)-..22/00/220./0/32*((),,(&*$!"')+*))'-*)*)*,(%&()()'(*)('$'%&&''%$&$""#$#!#')('(),,*,/+(((+,)(())%$$&$#$%&$#&'&$#"#$" !$  # ! #!')+-0455<>9400/211366421+#(.111212321/.,/3243430026634536886579<5.($*'%+(%""!"&(%(.1.b0:997"(%%%&.9/$.-281(,0!'+((++%&,00./-,-/01135665579<:;832368:745643553457748<;<=BDCAAADILKIKMMKHID?>AFE?>DGFEFFGJKC@@A@ACFHE@?>:99=@C@=BJIGHJNG7.(*3BNL@=7d78<>>;AED@=7555679729=<<;868:>A>=EHFGEDGKKGFDA@>=>=:;:=?BDHIGKOJEC>?DGJF@CLOLNKEABCFIKJKFDJR+WSLJK(*))*%! ""$!#%(*&.!%&)02110,MHDCFHIF@BCB;;=<<=>=<:?F@;8B;87502886<<:99?9116:9=<32;=?AOcbWMGB>75234346:;:6631469?=<:2,*+252146401;5(&(,-.48<:35;>@<8@CA:?C@BELOHC@@>=>BD?70+193.-.,+)'#!##%(%&'&$$" #$&)'!($ !'+-/130///.($*.--,*(%#C&)&HE 54A?70'"!#+2$#49966742+)-20297-24,*,1032*)034-/,L('&-)DHH<763+7#GJ=@)(+1-A<.83.(,=$(,*$J('())(&)*()-+*7@>3),'-&0*)#!""#";9 #"'*%#!)2*&F6-,($!!!"4!,)9"/1&$"<.(+I3%=A$+.-,*)'('">4862!"JOJF@7/'#&&9272*&(# -+'$&*+&14(J@E&,)$;+-'((+-,+1*&K+,6@8779C6-+''((*,&(/1//()'*,,(&++O>A16,*PO)+KN042'NE9FFBJOQJJ-Q=EG?FE>::@@<8:=;8213518318060&F=CB@J,-'BM30E9B.221/5:7:5.8HB0+-.32.*+,+&&'"%$6@;#6<9-967774504A8/.2++*49*#)*,)/*.0)+0'%-+,,*&&-/**.3+"(.294+&-4(866A<;;35MD'6I6--5=:77::50;A.2744/2MTVY[XUYababa]\``ahf_VNQRSSSVX\[XZbddbaaejh6jjgd`^\[\cebcabb`\[^cb`_ddgijig59<;:988;<98=@>8444334554211_^`[XXX[\].01/]2654/W.79:98985662-+.2421///.[[WU0035/ZWQLJLQQNJGEGKKLORROMLNUUQS[YRLJKPOJGGKONKGHJG@DNPRUVPZ^UQH<=<=BEDEFECFKIGFFIFDFC>=@DGFDA?B=@KQPLKKJCGMMLGF@CHIKMNNJJIHIKOMIHJJLMPQRRQOMMQQNON=MLNMHLOPNPQPMNRUTSOOPQQSUONPRVRQRSTTTSSURMLMED?ACENQLIKNKHGIIJILKKLLMJFCDFCBEJKECAKWOHFBA@AEHIIGGJNOMLKJKHFFFDJNIKLIKJIHEFDEFFEGGGH7`GOOPONMJJMKHGCCEDDFFDEEGE?AFIDBABBDDEDDDBCEILLJFDGMQSSQPOSTURRTVVVRSUSRT\XUTTRRTSRVURPQQSVY[VQTYZXSV]dffhhg`VPRQOOTZ][WU[^_YVVUVVRTY[\[YTYYWZWQLLIHIKNOSUUV\bbaa_b][]]_elhaaa_VYQS[XVYZOPQP[`YZTRVYQFHGEJLORRQRTVYVSLOTXXTSWZ^[VTRPPPQQSX]chd`^QFPZ``R?fn:9;;AFLNPSWZ\\WVXZTRQI@9?NRRLMLT\SVH@IPSXWOORKG?=JRSTSSPOQWVSSSTUNNMNLNLLLKLKHHIJJIEKOSPMNJIKNOPLGLLMKGIMLOORXURRVYXOJOQSSRPNMKLJHJJIHFGKMJECBADDB=:9=AB@ABCFDD@DNQUXZXZZVWVXXYY[^``^\[WBHW\\\[\\\[XXWTV[Y[Z[\YXZYUX[^^afijicfjc2c`_c^Xdd`ZUTTX\a9MVcc]ek;JPIDHMKAKPVZ[\VSSSUXXY]__Z\^`ggdjhhjljklgchjljikfhigb_ddcegiwxqmmgb^`_\]]ZUONSZ^a_[\^[Y[^\VSSVY`fmqrphcfgffhggjoplmsqljggigcabfmprrppsxyz~{unjkkhffjmgelwzxwvvy~wtttrtuvohd`cgefkeS@i{yty~~|yuty|ridhmqnlkklgba_aba]DB\ZWWTXZ]_achr}}re_buziaaa]Y[`_]\]`\_mojfb\TWai\]ghe`^\]adgeioqnmrqos||wuia[Y\\\^^ZZab_]_`bglnowwjic`gmoq{tiejnrx}||~}zLJILLLPKGHOOQQPKGE97<;89:<;;>@BMIAusQZBxo_XTOPPMKGIMWWUWfCUK@J^WGFE;862]XBQWBb\NzLLMKHAGLHFFABzKPmfdb`[NFTWbZSQHFNW_THLZ_ONRJIFEGIGDuAME68BBGPXVZTGT\gcVbfbg_VQKJMKIKJIQ\YZRNOIFHMNwLJJKMzl|~MKtz~|tnkhigbafdac__[WS^URRRPNfawnimwFzYxpgLKSND_c]\jm\RQ^Za_uya^WQPSRHBDtQ[KS_\akhpusxbhhpkVW[XQJUkUHKMNWZVSSPROsGH[Oir>HevaX_iIHTUZbDAGQeSeCS]hvkkli[_le^RUN9@SBiC;Pg>?TZUPMGB>?JG9A?`Z\:>AKPPTJGG>lpbGb57_QNPNONRUTYYU]211_[^010221469339:99;9;<=>>?;9635665684545566686kfedag7666cai7d]]_`dfffc`][\^`][]\Z_]_che`ZW`]\_cd`efceibd `ZWYadehj2-),..0366410.-.-,...-+)')**,+,/110.,,--,,-:++,-../.10.-/230,+**,,(()*+,./211231010-./..*'&''&'))'&&%%$;%'((()*-//-,++-,))''%''%$%')-/-.-+.223441/./10-*'%&()('')+*9++*+*((('''&%&&''$#$$%$##"$$&'%"#&),***+-134553/./131.,*)*+,*(('&&'(),-,,-./00-)(+04>=?CA?=<=>;99:<@ABA@ADFFGKIC?=>A@?>>A>;=DGDBBBEJIEAAB@AA@=:856999:7+9GGEHIGHE@?>=@GGD@;8;>A@=>??<975541- ,-14266899;=DKKD;8><8766569:899;76=@>;96239?67;<;98789<=<=ACA@DDCHOOIHA;6588776439;9689;>BDAFOQLDB=:?BCCGLJB;:?CDFHIOVOJHHGDHQ,+*,,,-)&'+++*)&#! ""&')*+,**+*((&KJED?>EHG8-?@>>BA?=8:>>;?AB?=;77677730:973112414:@IMA82B=-6:::8852/0001599665411/7@;99;@@??;>333188897307=7788;?>;63E?7CYbPDA<89<=:7//23/+/w172.5<:6442-,,,+*-254/*(-007=98>?;60-./57=CAAEIIKORPPJIJGHD;8>A>9?@?>@?8:BHHD:547404::899:;624645300.'&(&$#"*('(""%(.('/#'+0113210-+*++),.,+*()*(%GHDA>:.).+$!" &*@-/&$07A62562.-./.3:6/././00-*+.:<:.+6-(&(..JCC=6=8'4=)D3G1),,'$)3<0-+62'+('-)FL&'***(I',*0675+,-)':/ $3.*!!% (% 96*1!?:.'# "#"$/#-&!'4/%%#() )*25)B>F*,,*'"%'$"#A?> =FN),H5/+*)&%D.50,+$#)-4,$'/1'','(&$%'%#=!# "%+0.1-&H17?=28;7:2.+'(**)+)).655.*+&J&'*+LIBK++JQR*KTMN+-RKNA8WQNLDFFN,)C@DFE@<;;=;99=<9;7631.72./.-+J:6FB?AH+I4HQD<-,/*$67328;0(+744/<@42-)*,-'F$%G@04).522768B;:?476<8+,0/+&0=,%()(,/.-.+,,;'-<3>A!%7?/,2:'$,//J9$$)/9*1%,/6?5782,-53/),)!+ 2$ !-!%-3.2))2;4,+(13;5'997589A7')/-@E'69884:4..,//-15;4/(&%*+-,5849<6*$*!=<7:<8<'6B5;D?;9870).545BBCA#B2,1@F>@>87202020/12-.56/??>841105=APXVQPQPKFFIABMLIFGHFFHJKMLHGB@CFFEDBBDCBCDDDEBBECBFGHKHGJNMJMPLJJHDEHLMLMKIHGEFCCCEEDA<8?@d7HOOOPQSOJIHIIEGFEEGIJLLIDBABCBBBDHIKMMK>o=BCGMLGCIPUWVXWUWXYXSSTTSTXYXUSXUZ[UPQMLOSSPMNRV[]``WWYXTPPUZ`eda6pUVYRJIJR]]Y[\^\Z]YTSPJLOQTWVT[^`a^ZUVQKIJOUXZZ[`ba_ZZ]_]_cd^^\^^]ZZ\^\^ZXWP@S[\]ZX^WSPQJCQQEACGQTPRRPHHMSRNRVVYZXSONPRRRTW]aa\a]SNNNTXUM<EGILRVXXWWPRWR@SSNLIQ\RLPMEOZQVULEMRH7fINLHGNIHJG?:C=?CGJJPUWUQGEGLSSXbjnrn_afVOQQ\H=LRNQWe]ZRGKOSMJJJSRLNRRSWYTPPMKLMMQXSKFTZWUXUS][[\bZMnZUTTUWUQSWXRMKNNKEKTUWUSQTVWXUTWWVSVUVVTROOMOOF?AFGGDILNNNONKKLMQRQQOOOMHKNNOTVUQTXYXPILMORRRQPOPQPQNKJKILOMHDCB@BA@?>:::9969>GG@>BBEDGECIMRSSX[VVWUWWWY]][\\YY[_^_\[\\]_^[XX[[VVWWX[ZYX\VU[\Z[^aaeifif]2333c_RXe]X]]QPY^;XP\b`]^n89:>BBA=.3A .oe;KNB<<@BHQOSYX[VTUWX[^`]^`_]]]_eZ``2bgklkkmhgimlghfbcda\a`_bhlt>vtpleaghedfc``]\_bacb`a`egb]^]agnsrnhdhhijfemrvwrrurkd^_aa`^_bioplhgggdbbccb_bfeca_bfghjnqpnmmprtvuutuw~~wupturrtuxxxJI{zvrrppprlmlcaed`S>5H[]WQSOQSTV[^_db\^blo`RQQQTUW\VRKOZ_dc\]ckkihe`]acdaab]Z[^^^dgfltvwz{u}eTUTW\ZZZXUSY]`_ZX]aikeimlibYY^bhosxzvnnvtqtx}}EFGMSSOOMPKIHBB@y>EMROMPQNJGGHD@EEB|unhfihcgifb[a]X^lz|ngf`gijebb_\TRUWSVaeaacadfgmnzwnopnnlkifdikjifhiqpg\TOPTY^X]`bhkotplffUHn]WWTKBvt{FPRMJITaa`adc[\wmih`ajia^^SWZXURPQRIK`gXU\ZVKIMKIQVYVPNPVVZ[bmmid\Z[XOaljjnreajuvw}~vqqqi]YTOMQMO]_[U^]\hqx~{kZT[b_XYbccdc`_[WY_achklcUS^^Z]Ye743da4:99978:>CKOSXZ][YZXPPQQRSSRQRQMLMQSOHytpmg\O?:CGKNRWSNQTOQFAA5,9HZFXrpbbi_[ZUSSRhWc]OS[\^bcXQV\elfSVVOOGIMyzqe{R{7Le[KULOPONWfL<==i[:NYPIJEDJLTTOJBLUS]\[TPTVRhfC@9eLG\34779=8c7749:DL@vCHNUVWW^HSPKJQIFFD=73_J8YqsDINRJ|}IKHGHEMQNFHEqpNUWJvsmb\\`IdHVWWX[NJWfl^PP^[IGNMPJEGNMGA6A>-+,SpKV[g]LILR[Y_cfcaaWSOORRLJJISd\VSSOHKMNHOKumsuzs~vvrng`ac`ecbfgd`[\TVLLQNLh~cYpwXYvLNVIORNQop^`^LcLKSiovr_^WRFGH}ACu[NfVWSQ]tuvnehmorumj^YTPQQVbZJDILVXVSNLEBvm?[g:>FMKQtc[eLb[P[xKHLFIhuW7>Ofk_^jscmvhcTWQ@D\SB;35>><964454556454365748:7ifdaa=j8g5f[`g4]Z_^aehedb^][]`gc\WSWWY\aef`W[XVWV[\Y]^bc^blfWPX]ZXYo.2/**+1431011.-/.,+++,,+-,)++*++-/142..0/-)*++,)),-++20-*+.-,,*+,-11*&&(*,-/01/.-,.0--.-..-+)'')))(')*'&$"%&'(()*+-/,)(*-++,+(+,*(%""#'*++,,-C.././15753/-,+(&%&'&&$#%'())(***'()('(')*'%%#!!"!"%')'%'(&'((*++.10/ +../37643123D10/---+)())*.///...-/2677;>CE@>6',**'&'('%&&'''%0...//.-,,---+*)+++--/'1012/0/-//..-,-..,+,,,-.,++-,.../0.-+,,,-,,,-.+)*+,*(&%&'''(*,+*+,,-.00.,.12/,+-,*))*2)***,./46.'&)*+***+-"#'"%&%&!'/)**)),,+*-, &' (+-),/,(()*/2O0/0112543/.00/-+-010//2552000104,+++)*)'('&()(&'$$n#"&&)*$$ %""%&&%##%(+,-..-,+(+,(*-,)(*+-0/-.,+-+'"##%$(+(%$#%&##!#"#'&%#$&%'$"#%'*&%(& #&(%!!$,0-**++&#"#!" #'&&()%#%&'+)&&(((&'(*)((''(((*('''%%&$$%%%((&$&(**)'*+)(+-))+,,-,+.,'%#"!""# !#"! #%##$%&('%$"!4#$#$#!!! !"$$!"#"!##$%##$''&(+(%%$"#&'('('&%$""!""#!-')+)&&%%&%&&%%%&''(&###$$##"#&&()**!1,++*,+()*-*''**($&+*++*)+./0/./?/-)++-.+('(()+%!!$&%#'())()(''((+*(('&&%!$(')-.,)*,--($''()*++*)d'&'('*,+'%$$"""!!""#$##&(,-.2411200./04301100144423323531//00./002642240/43224668;882)('!*3.,--" %(/*16543; !!'! -(* 536$"!<4))"!%*(,0/1/..//03523332124705579;=;:;987:;9:8577538659<=B#A@?=86:977:854113667767J679634137ADDA@AA>:7899878:>A@>=<<=:78:;;8:==<:78<>>=?A><>@AABCFGBA=>@>>>@BBBIRRRNLLO*+RMNMIHFFCABAABC?==622.+$!075/0,/212588;<:;=DH>2244664740,/8:=<67:?>=>=9688978:745::8<>;?EGGIJGP]YN<044595532204797436:?A>CFEC>67:;>BCCA@@AHEBCDGOWWTUSMGILKMMIHH%&'+/.++((%%#/!'+)())&#"$'%#''%GDC@=<<;:8658:9757:>>81-*.16935669:;=0%@4./0+%CDJ*02.--39:;;<:46GUKB@>99<9664-242.,-..'*9=14:51)(*%"),0.++.1/2139:;953/*#*--/39439@BFJLGEFE=753/--)/:931:88@AEHL@2,031./24653220++-/0252*#$+*&%#)('"%(,.0/..,'),,.--,*,+))*--*&HFA@=;4-& "#$'&$$# #(#1A?46<510-,./2;7+-2358:2-149>;.0/++%'+GAA;3FR+;&ME3*(0I*,++(-6%-&+4/()&%')-,)'$C*1.311,),/-D0/")&%%4$5+;4.+$   !$$+&*('','%%!$+:;#*,&>B),P*'DF%"(*(C#%#65,/0(:61*&'*1%.0002('0;<2)(1.#$+*,&#%*)$!$:*12:4))-/6589:7550-++./*)*)0>71.-*GI')**&CBO+IHQ+SPPKQMMJLJA=FCGGC?EIGSJFIBBA?;79:8<<:;<;85501*)--L,RD0%(6I$,:852240-./22+'-2/-/2941@N@+)/$'A6728:>C8HV=:27D@?5597253804@C@1./19@444@J5194,&&')2)2=>78:<2773>A8?F50<=4">7>832441\^a\WZ11_\YTUTU/430ZXVW3851.X[3674234458754760Y\164-6:3WQTRQPOQXUOVWTLKJILOQQOPQOKJNPOU_]WSTTOLLJQPJILLNQPSQJIGJLUP\]VKBCFHHEIJHJHIIIGCEFGIJIMQD;FJLNOKHGHJRRLLT][TROLGEKPROKJKIFDEHNTYUSTROKIIKNMMKIKMLDIIKKMMKKKIJJKIHHJNQOQRRONOOOQVYWTPOSVVYXXVVURJHB9:<@DHIKLKLLOPQTSQORUXWYUQRUXURTNMLNTUTSSQQTUTWRLJKIGECA@A>=<;;8884277;JF88=?859?BGKIJQVTXWSQRVUVXY[\Z\^eieYY\[]^\[WWXWTTUYY[Y[]YWYZ[XWYafaabgd``06106_OSTPTZ:4U]M7QLV^cgi689:ET^QI0-+85CnL0[jlA>=ic8OWI>;CEJQMNZZ[YX[^]]__`^^\^\[[_WY\YY\_^_][[[_`][[\]]]_de^^cgfgikppj^\adceb[YYZ`edb`^__]`hosuzxsmnopoonllmkljfinqnlqwukb_`_]^djkgd`aec_``_\[]^^][WVX[ZW]ijfeddfkpstrouFE~{|HGwqrpoojdehggea[PC9M[[VV]]ac_Z[ZUWY`ddd_TJ{sPTSXSMJOXalolnwpiffcbb`_\]eec`df``id]afge`isxqfac_XTVYYYW[]\^bdgc_a^WY[acca]YY^a_`ioru|tqqqvz{}}KIIG}yx{LRRVWXZZYOCKC?FMRTSRNNUTKA>trojdbbfhha\[][]\ZXZWWW`aeowvl\Y_fih_Z[\\UWVR[bdjhkopnmpvrmfekqonlhiprnlnmkorsnea^\a^\WMDJPajfclo[SFmIFMOE??BxHE{O_WKGDIYlxsjccche_`_TRYWQC:NVUOQ]ZOPROJGEHLQ_YXSQX_^`gaampj[X`chi67657::wvuz~|voh`UQUNKNSOGQ[MFT^bims{jVT[_cb][_c\ZVVXUV]`ciljaY[fh466675457:<<9638;:FSX\[Z[YZYXWYVUUSMKLMMONLIEyutngda_[LBCEGHKLLMQRD38<Eed^SNJQMFDKlZYer[IQtTZZSOYqyU;@X^abmlkncafWONPLU[dL8M^ACT^XN_cf[_oneQ\ggkbWXZfk\Xlrlc\eiYNMhrrfmg_e]WTbd\SQLMjtfgucXcr|cRmF|ggifoqwopwoW^kx|lfjlgdnp]]fj^S_ZbhiYPYoj\_ba[RQOAFG\foqmpfWc^Y^d`hwplpw|Eypqqqwma`kg]lolrJ}OpIwopllcfsudRXfqiVY^U]tkej\[rzy{piXVkllspffibZ[_^YYXS\`QHN^N9ERLKA67?FJOURJPSVZahfWS^Zb``cXHGMJEF>BROHB9GJJGIF>GLB8?>:CCNWULNRUD?EKVXWWJ@FS\VNA?BFHKHEGE@CGCCvsPh31a[Xeg][[VXZYUSPV310\[021^032011237778;==<>==<;863335584h4345654:75hecac665j]_c5fYZ^aaefe44d_^ab`^]YUTVX[aeid`ZUTTRUUTU\\]^fli`[[YZW*).333.,.03100/022//.-,,,***,,//./--1584.+a,.+)*,*+/-+022010/,*+++--,1/0.)()(*+-+*)((*+.-+*+--.-,*++*(*,,*)'&%%&&'''))*--+)(**,,+*+-//,'$$')*+*)**+,---022213331//1/. /,(&&'''))*+)&&#&('%%$"#"!"!!"$%#&''(*,,+*,---/10/1323,,--..,**)*,,,-,+.//14531594.,*++*)('4(*))+./-+,,---,+++.,././1/..-,+++,+*,,+**+* )*,--./320.,+*+-0.+)('((''))((*++,.30,,--..---,+*,--+)(())+..121.,++,-,-,-$(&% %,'(+--/.,*))%"***(''')**-,''+)(+-./.--.02563000/-**-0.,,.14765-+*.(+/-++*(&$$%%)'&%'*&&$$'&%$""%%!&(($%$#%&)(')*)'&((%'..+)++*)*(-,(&()+-,.-''&&%q%+*'""%%&$''&(''&'&$%$%&&%(*"&)*,.*('''++''+11+)('&&'),*&'(%"""$'*+))***'&&&'&&&%&''&''%&&&''%&%%%&&&$$&''')))()3+./-,**-/,(%"!!"" "%""#%%&'%$#%''$#O"!!"!"#!!#""!##$&$(+)'&(*(''%#&*((&%&&'(('""%$$$% $(''(*+,,*&'**)(&%$%%%$$(&#D$$%&+*&&%%%84!$%(*)&&*.33231//,***))&%*+++*())&).1+%$$%'*+--.10/21.,+*+,+,,/40+')&'%+20-.0/0771**+*&(*+/0/00/.-,*+,)*+,,-///30/)(+)&*/21/010./.+*&$%'('''$$)$('($%%$ $"!*' (+)+,&$"$''),-,--+)),-,+*+./,,,--)&%%$" $$ "##"#&)'"%)'$$#"#'$')%%!#$$" "%"!!"!! !#!!(.23/1*%'*-17>654148.'$#&!.#'$# !'*)())(%%&$N&)(('*./-,**')++,+*(+///./..31 "94-,,./-*+-,(#'-,*)+.-++,...0//020/./--/00,'+$$%" !#%%%'''(*++,+)')++*,*)+-0.+,+*+))((,8**,+,.,(')'''('&%$#$" $!!!$('(,1121/+,/v0232348<:22334322/...-./135356312221017:6556/)&)&*-*+.&)#('/2697",1)(#+((@)699"! 74+/%#$'*()0110/0112 31113.1210232453436::669<:;;<>>9214657621115:98755546;>@ADC?;<=<;<<;>><==;=@A?>AFE=9776677679>><:99;8566645789973247756=@<;;::=@BA@>@E''MMLIGIIFDDGLLJNONLKN))QPMJJIIFABB@@=99952-*(")352379;;95574349==<83-IDU474630/26=AA?@GB=;;<:;:844:9:89:88>;7;=><:BNPH=:=<63465535668:=@:587147<>@A=768;:9=ACEHJDCDCFIIJHKO+TR)('LHEC@AEI)-.012111*"% #&+...+)..' A!><:50/27;;830.+,)(*.-.-359?BB;227::94334411/,378>;<@?=<=B@=78=@?><:8<><;>=<@@@>97448651'!).;A<8?A4/(CL((./*&')OGK*+QOO2<2*)&+5@GD>9:9<9685,-00/$+/0-.53..-,&"""#+),)'+1/28229;;200I-+*===FJIFD?9113.,.0-(/3&&16:?ADLVQ=-(,/20-+/2/,*++''()*,-,(%',+&,0///-.---/..-+('(**,+)&$FDAAA=:830,# "#%%%%5935;3./001.+581.275520*)+*.;5-.-/'G''<<988@1 #;C=85-.&M''()29#$0/%D&'*,41)(&G'1/,18+$*0+%64!%&"!!%(2-#8.*%"  "  &()&%$*)%$!!73(9-)>A')'OLJG&*,,)#$(*96-.)*GC<2*))#:%,.1323**251*',+&&)++('''(&"8((6C7,)*,//369434001266/*,(.761--,&%G$')('E?KKHIPN)+)NLMJHA:8>>BNLBDDEK>;FP>DA>:9;99>?.%(?(/2.+2?C+"12128734103,*+)%*.2%#+(.(!.15./774(,3261)+.68/+9@;1,48,%(889397130-+263.-+):?65@5-7>IC4%3!=1586>?A??IL><13=AB9689629?326:3,417::2*.;925862--,"$'39:;9<7.7445987>;:8<>"=9;<<=:32771::8B5)/7;9//2+2A;8:30=89960244000,02)%'2+#*&%  #$'*)#&()+/21&%,).--0,"!&&""(%!!}""!#  $!%+)"$&*!%**))  )-'#  " ";5!'*('/.()*'+,+('$%!!%//-(1+,--'(,.-./.-++.-+,-,)&'(),.0//+('&'+,++/21.,,-.*Àƀ~}}~䀂 ŀˀ  ĀٱशŁ򊘔տľɿq½¶λžƼƸ¿ýijư³ȼȽĘĿпƾ΀ĽǽʷĹý˽рʹƺɶð̀ȷǽɼ׻ǽ̿»ɴ湢ʪ˦񁈍ų䫖ю荐エ©Žƿɸþ½;ľɼĺ̴¿ùƽźùþż򑚍ɶӾƿњߴငʾȿ╜ߢ򤍃턊ӌųŪ􏄕йּ疪иɰԽIJĭɹ̢Ԫ̟è۩Ǻɾñ˹¹ƤԵ߿зʿڼԿþȵ݆񁆈LJЪǴĽ݀Ҿºӿįʹüīž˽ɋ炂އ рY_daadhjfaacefjhgddec_^[[[ZZ\^_dgkljmnppg^XVVX]^]Y^a_`ddejkijkm7iegfcd`^`ei796fcb_\_aa\VTPQVZXUQSVZ_bb]addbbdcd`^^[YVRQPPSWZaa_]z]\ZZ[\[\^aed^[\\[WWWXZXVTSVYWXYZ[\]aeehmmnmhehnr;tjdb_ZWWXWZUPOONMKMOJIHHILJEDFGEB??BHLOSVXXVVVXYXZ[[ZZZ^`_gp8h\QXaa\\^\[ZVTTXbgkkgd][`dgimj`_\adc]Zcgca^[Y^_].0028<>@><;:::75432b145456543fb`aaa`bbcc`a_]\^`]]\Y[[XWYZXVVVX[ZYZ[[^de_[[ZZ]\[[_cbbda^[XZXWYZYZ[\[ZWUUY[]dje`cedgffghdbadb^]\YXVUVWYZX]^hla]^]][ZB0V2.]]_]X~\P\d^_`eeimg`[XY[_11`]]][\YURQVUTUXURSUWY_a_^bdfhfdicZY\ZY\^[[`em;=@A?>=;;;<<71_]\XTSWULY`ZQKQRMINMHGEDA@JPKJOUWZWSPOPPRUKEFKLMHGLLGIIF@BJKD>FIILMGC@?AGFCFGIKHGHKKMK>BACBAD;DEGGDEKOLHEGFGJNIJMOJGEGGHNVXTG@@ECAC?@DHPNJKMQSVZVUSTTPLDDFBDGHIIEBEGIMPMEDDCDAACHLMNMKKORTUW[WTWVM>?IKGFHKKKJGFG?9CHKIHHLR[_[WX]_`ga_YNHHJKLNNPRV\^aVRUQMR_``^_[Zc]RVY\\VQRSV[[VUWWUTUT]XRQS[_\^egl<6e3342^S[dgdf4^R553d_`355`USTRSPOVXWRMHLQQNPORNEE>@GLRTRJB>CMRRTVUVUVWXVRTQRUZZUPLPTTWWVUQYWVYYX[bcYPILMIJQUTZRU\Z`TTPJNLT[[[aYSKCBHHECGKGCEAEHH48BQNBBJPXTV]UJNQ[\bYOZ\[\c]X[OLKJIOIKKGIJRRRNHECFEELNNMJOVZ^_ZWLNQOPNPUWWX[]_][\ZMIGORXXTVTWTQLMPRLFGKPVUX][QQWXXZ\XVX^\ckoiZQ`hh\RKJIEFFC@<=>=989935:33;A<8<@?:6:=BEEEGLPVZZNITWTVX]aaabgib[UVW[\\\YYWWXYX[]^\_`YW[ZXWWVZbdbadfb_.0YX14^KCBERTPSEQB[PSX`jh7:;k_7LbZLBHX\WSJKTZYUW[\\\ZZ]]]_a_\YZ[XZZYZ[^^ZX\aeifa]\\^]Z[]YZ_\Z]`hihfcacbcd\TWWW]`ab[XX[]aiooruuuwyvuvtsnkligfdceikr~rng`adbbbdilkfaejjihgd_][XXZ[ZWUUVSKR^]YY\afnwywqos}~|zuw}}~}||{zuqommmoppkeXZWV^c_[^Z\bkgcb_bd`XXbc_XTNHLNHKGAIXZQR]]YZaid^Z][ST`orl`[^abdcfi^X[[[X[dfcXUWZXYXTVY[\`db_ajtlkoa__[XV[^_^]]]Y\cjnkgceihgkrxGLNJKKKMMLJHCDFINQUWY[[^]^^]]]URPRVVOJIMN?`lrrt;;8mone]W_egkb`gmeaagfksqhcdilljfghd^a_\SR]fihggjhgifgcen{|smnnnmusrsojkojgccjjgd]YQFScULJKIw?DFGJLJIKNUFEGuxHR`d_[^\_ZTSNMWYWWOLQTWUQWWK?BKLMW]di5fb^aec`jocdmjg_`i79977753Sfs@FzslaWS\b[_cba_\ZKS`[WXZap~p^X^`\XYWX[ZYWVYYZ`ad345551b365688564d588:;<=>DJQZ^][[\^__`]ZWUSPJIHMQNF~xvwvnbab^]^]VPJHEEGEABFIHFEEKORW]5GW[ZabVT_`XSMT[XUUZ^SGSPOMOX]TSX]YGEEzteafbaN=Sj{|NSLKPTffG<::;qVaTFINQRW[SIJFGUZGMdcKKYVHvpATG7aS@*>M+///Ta6:?L[^[VMLRQXWpib`ZRPPRUMOERSLHBHNWJKIHIOPGHC8aW81963AK:FTGFGHoJMOTWPGGLK?DRMELM|qcdekJJLX\X]MEIRUPSZYVRPRVZSLGMRLD?C>jsvFNI`n^PILNSVUZec`\TRW^]ZYOMMT_\SSRRI|LLKLxz|KNMIuhs{mK{kfuostnhhbelzyl\T`qcTLLKRHLHIOLRROKRMI^ZWgKOYrdTHMUhq^TVaULPMF@}y[lNUWL^aYMOY`mZEV_Xf\XkkwkcZPdn_LGRQRKLaUNUTNHGKBGhfXOKGF9F|gYcllRagd`SPFXfslUCEKdlgakW>RbPIXXOGU{TCFJJKQPP`d]Xdmf`[ioebVQSZ`ba[UVW]`_YZ[HRiokjhejgMM\iaQSOIUskpu]TVgyo^m?zb]pierqlkpobT^n}ijejlgfstcXUZ[\[]he]_[[[XTXbfbUZ`ZQIWfedbe^^fb\Qd`XbhehC>C|qmjvxukgfg}z|~DFJsWBB~wum_gfhsnSOhmidZ`^W_khfkdcryxxIMjcggsuneadcec`_fi^QRSNEOcW=:ANPD=?ONEABFDMRSV^feZX_V_[WUYKHHDBB?=PMJHA<>=FGMKHKVI?WYPHPYK;>K`[QPEP]b]TJIHEEHD=]?`321XOPiplhaVZ]ZSSPV5000^^01^[11144Z3:679:::<==<;:754c38565c45446756:7ifcb`f776dbc35f[Zc`__^b76aW[cb[[]\VUTTX[dgie^YUTTUVQSW[\cln8me][ZP+.0//0120--././010112/-,,+*)*++.03669;:83-*()+--+*,---//02210122/./-,+*+-0..-..+''&%&)*(&')+,--+,--,-+*W(&&'')*./-+**+++,+*+,--*)),+()*+,+*))+,+-...,+.20021230..1352.-,*('(')('%$$##$&#"!!"$# n"#%(*++***+,+./.-+*-/.28/*$',,))*))*()*)**+147731--0358:8/*(*+,**01-+)'&''&()(,",*+++*)-.///0.--..,,**,,+*D)))+,+**+*+/0-,-++.,**,../0.,,,+)(((*,++*)(((*,-/1/,///10/00.../.-,+( ))+,*,-23-,-+m&()+($$!'(*-0/361,)(((',+++)))'&&'(''(&%&()+./---/112250+*,*),-+,149 )(+ !")'%$*(%%%'))('''+,+*&$&%%*('#(*&#''$##$"!&*&$&('*,+((+-.0*%&('(%%+*&''%""$$" &('()&#!"$&%#&''(%%&('(&?!)(%#$##$%&'(&'(-.,,//+&&+-*)//*(()()**)*+*''%$$'((&&&''%')((('&&')))''('()))(()&&(*//+()+./.+'#"!""  !!"  $#''!##&))&()%"%$## #$$"!!"#%%""&(%$$&%&()&'**'%$&&%).-)##"!$""$$)'%'(*,,.--,--)($$%$&$""%&((%#&'')*(%$#"##""&('('()+,,.00.,-,( &'$$&''((%$&#!%&'&%$(-34/-/122722.)$&'('))**+-,.+)+(%*12200--2-'+./0+)+,.22.-.-++*).+(*02/0313-(%+53-,'#)''''')()(',-,(&"%'&""!# #',-,(#")++,,*++,.0/+*+,,))+--)'%(**('%%"&%$%$$%((%#!#%!!"&$&"$(&*&%$#'&%)%$" #$ #)+/,,1-'(*123-&,00141-0($$$%)%''$%$'%%$!!!#$#')()(*-.00,+&(+*++,--,-/01]1001+)(++./+-+,+)&()+'#$'+.-/31+,//0020-/1.17;7-(1581+'&'#"#! "#"#&'(),)),+)(,,--/--0-/.,+*,++-,,,+++.-+/-'(+)%%$$# ""  !!!$#$&)-256-'./--/377769;730//233300.-/013586763143210.1564330)'##+&###(($"%-+-/4;7&)(**#1+(4,*&1#14 6/(60(!'33/,''.00--/01101133441/-.1/12112351269;=;7433552364496466::975454572-0//3567411346:@@@BCABCA@BA@?==;::99;=>CLQKC@;68:9889;==;9:<;:;;95554566543332+-673148:>EEC@?@EILJEEHJGDHHHGJKQOLKFFIIJIIHGEHJC@?>??A@=3-#%&'/5526447=;9::;;722:9541,)/2X,.+',;=53:8557::513634:BE@626:9::<>858778:=<;53456543557668978>DBDC:875337::976646:>?=:8:=<:>DIOQ*-/+*)(+,+)(%%&(+-/02335?221,**,/-(%$&')-25725510+,-,-)(.2/./317?:315<==;78965764)&1;<=89<:959@GF@>@?>>A>>A>;<>:97:;:9841)!$'-1,.;2,*()MG')(&(-+MO,.VOL.1((&?D&.6964546300,*./..('*,-+*22' "(%!#',-,,++,-.68115450,-X ,5 G'MGE?8229<689642/*#*1/1349CKA6-*+*))'&'((&&)*,*()''"'-/00010//-,*&%%(,+&EB@ACA>548520/*#!%!.1035-,561/-2531024.(M2+*)+15/-/20%J%&F@>535,&!.>DBD,.*GF),-87"..7-%(+-.03,#&&&.2%)97''1.%:5)"'%"-/-*%%**00E:5-*% !"!! %%'$#&*+$$ %"##I1'%')J8.)+)/+RO.*+J.)20./1-,:64=+G*/B7+&+.9<1-,3,(*)%#DF4>/62*973(*.5>3#.3-<2/<:>640+5=5*(-,-)(6-)//,(&,"":71*+*( "C4.5;<'/721,+'/7?;,!$'451)-&)6+%-/(#,EA'!&)&$&!!,/.*0610-6:33,(),242-***-/10/0#)6:797394%%086,.-',<79<2/19A9+7 =1*964??;==EE;4/5@I897:<87=?60-24523981320./-06=<-/341'-8323657863*79.4864$ !@786<@=7686AHBCEE$%'<)" @><90456=;+&6863.41-4;98:56?C@>G')K;899?A>67978662790*,,(#)5/ '' ''!!!# %('(+20)(+'.*(&+#"#  &#"#"&+'"!&!#!$$ "(!++&!&+%"/*##"(-*&! !$#.#&""01.-+&+-+''%&""#" "[,,--,+*..-.-)*/-.-+-/(*/0++.,(&&'()-/11-*'&'''&'*++.1241.-, } ~~ဪʀ Ŀ̀»Ͼ⿑“žþѼȽĿÀ¼¹ŰȾɿŹ¼񀃆ƾıǾĺлɽűŹ³ȼǻùļǻռϽʄ΀Ƶÿꁆ㻧Ǻ惆❻π½¿ý¶ʀõƺ⃙ƶĸAκ󁅍þƻ¸ǿþſ̺ŻƺȾ􄏬ܙڧ󍿨ځµ¸ݾۀ¾ƨԭ爜񅏂򟠿ľʩ٬ж˽Ƹʠʶªߩdzʿŷ¶Ȼº˶ݲо޷ɶ̵ÿԁɺҀϻϾþĻ˱ȸžĸøƃۃ퀋X^`]^`bcfhb__acdeccffcb`_^]^_fmp:>zsg^YXXY\]]_^^\\]bkolhg44j688mheb^Y\^dgcggefcbbdc^YWUTUVVSRTXZ[\\^aegg5554eeb_\WTRRRSSXZ[YXXYYWXVWZ\]^ZWZ]\Z\\^^^[URTUV[\ZXWXZ[Z`fd``^^_efj787:9kdb`Z[[\]YTOJIJHFDFEEECA?@?>?@ACFJNTY\[VUWWW]][YYZ\]_eea[ZYZ_]UVVTUWUWZY[YXYZ`aadccbcehnlSKOW_ZV[e65543c23P3457778;:766653356689899:<::;;;:9998999665ca``ba__`adffb^[[[\\[[ZYXYXYUWZ\]\[ZZZ]^__bdebac`^[ZYY[]]ba^_YX]]b45jigccdbacedcdfdba_\[[YWWXXUWZ`hb]]ZXXYTLWMFVYYZb8<>?5defacjid^ZYZ[[\[[_`_ab`\\\Z[\[XUW[^^_aaa`gjc_aa\YZ[_aaddfijn9:9410^]_\\\L3F6><1WTVWX_1[UTV\14863211146410235767643342\RU\d5686554431aZTX_ZWQRXYRNPNOQMHzFMYVPLLJJJMLHHKLKJHHPSROLNPOLMLDDFEA@DFIHIKJCDGKJFGLJHKKKOPICEGHD<8?CCFIKIFFGLMRUXZWOJHNSSQQRWTRTXWQNORQPMJLJLPOOMNMKMNNRRPOPQONMPPKILOPPQQPRSPNKLMMQRQONMQVWURUXZYTJIEDGCFKNJHFFQPKJGEDDIUYOJHCBDKMJILH=?A=:=BACCAABDFHIGBACC?BDDBEJOLJHC@<>@@HQVM;97?>?CA<8c35fUV]_g`cc6jij8;>@CEFHLSUQMRSRTY]s^af]TUUTY\\\[\Z[]^\[Z\\\Z[Z[\[YYWVY[_bcgec``YW143\JDCMV[J7C_LKMVYed9;78BOQO`#037X=JNnB`pBEC=j>FSUI<;QWSQNMORTUSVY[\`^`bda]_daadcdfdc^]ghkifb^[[\_ZW\`]]^]^agpqqrmh`_a_]ZXXU[`fd`^^`a_bgjnlortru{zvrljgbaegecacgmqttpmlmjgfghhgeegmlgghhfb_ZZ\\\YXWUTPMT^\WY^cinomkmmou}}{|{z||}~ylimossuvx{||zyurprusrutfUM`nqnmjgf^`b__^Z\^cmvtrgfihhcbZNw}uKW`cbaef``drwlj|~n`]_eljfb\\\TQTSKNQONNNRX\XY\__bfgeefes|k_XWZYXRORY\\[_eggc_`deeacflt~}GIMQRQRQPNNPOONORRSUUXYWVRTVVUSTWWVW[_d`ULG>>=@?>?@z>?><43hffjjnqoo88idenqkgdfhimmhcdTVkga^[W]djnmimw~{rmpqjgnriinokd_`ffhjkd`\UMLOTTSSPFOVVSNIKJGJGEA~JJINRTMXXUVQOMIHHOY_a_[WRNMSUQQRONRONJNXRKPVSRSUUTOQUZ\\[[_fiiru><:;77889:854`j?CCvndagikjb]bb]\Z\^ac^ZTOPVVRPQPMHEFGKKLNMPQMK@G^6488313331V1566c^39;=@CISZZWWY\_^\\[YWWXUPMHFGJLGxtrqpolbZ[ZWX^e_WVMFFHFDEEHNSSSUTTW-4GRWZbbY[d]QLRWZUWYSJCQYSQPQQURU[]UHIrti`ccW6NOmxHRUQPSSPScW>ld6\DocQHNORRPTNJTRSYRHXcVDS[QC99CQ>N_rsS`ZUgkP_`aWGVa`g_]bWAI]dhO?CMLGU`WeTSZ~vRGFGFKSR^k`Y]_jnZ[il`LJT]^a^WP\^\_\PNQVdihX[lihsgUNXd\ZWZ_fjh^YHZcjdr|qpsvWbgk{wkcNSoz[`be`Wdjg]VYU[`[fk]\bgd^ZTOOovg[R\dY\fa_[Z`\Z_YUZVZdd[_?>GDvp`qxwklqmzzsohhDCE|urjfikicY\kcVZpk`_ffenx{utoowwomqridbgekf]cie^WTSMHSbT<<86563475441353466649:5da_^`f7753dffee[Z]\\ZY^fidZY_^[Z^^[YVSTW\`ehib\[ZYVXZ^]_fjm98i_Yb*-.-./1001.,,-./11122/.--,++,+++,17:@;2,))*,..--,+**,-3753322/.-+()*,.,-.-//.,--,*)('())'&(*+,..-..-,,)'&&&''*,++**+)(++)**((*+*+-./.,)'()*/0-,**+-,.10...--01240.-***,-+(&$""! !  ! !#&),.-*)))*/0.,,,-/021-+)((++''(''))+,+,+,+*-//21122357:9&!%,(&+1-++,+.../00//1/,*++,,,++**+**)))(()*,--,+)**,--,-./.-/.-*))(*++/-,-*)+,0321///.//1/./000/-+**)()**)*+/2.,,*)**&%()(*-00-.10.,*()))***,..,+*N(')-.../0/.43/,./-+*+--,/00245*))'''!##%''+)&%'*+'),.-)%',*)'),.*&'&')'%%*1.*'&%$%&'&'))(('&+-+**,-+)('$&'$"#%%('%'($%')(%&((&(('**'#%'&$ #%$%'('%%$0(),../,'&%'+,**+0.+,.-*))+*)'%'%'*)(''&%'((*,***)('**''()('()(()(&&())++*(()+.-,('&$#! "# #%$$%#"#(('&(&!# "!"#"""##$&$!!#""#$#$&('&&#" !""&+-(!"&*)&$#'($&(((*00--)(&'(()*+)'(*'&%'''&$&(%""%$#%*-+*)+,(*/32/0,+0/*&'%%$%&'()'$&'%&')/214432/./.--.01-***)'&+.,+&*,-.-2/('*/121/.0.../1/+'))*,,./0-+**,/.**-14465(*/$$'***-/,++*))&%)*'$!!  )++*'#',)),/,--.//-*)*(,--,*'%&*,*''$#! (%% !!!)+)$b)#"''"&,,'% &&!$")*&$# $#!"#!!##'& %&),27/()*.231++2/,10.,+&%('('&+(#*'$$&&#!%&&'((()*+*(h'),-/10135531.-.2+*)(+-+++(((&(()((+--/0.-+/63353016721)-;70(&)'%$!!###$#%'(((+)*+,.,,//-+++,,,*-+,,-O)%)-++,./.,,+),*''(((#%$!" ! -.'(..5044777 !#%'(*./,*,-,-0223246:5.10.121234765443454220.002333/,)(##*$#!&()+)((.075!)*+;"2*&6'-.B#29"##5 $,-(,.+***+,.-,-/024555357652355566886746;<=<97653484F379666557:>=>=9722200//.-15985446647<>@>@BB@BGDBA><:669::99:<@CCCA??@=;:::<;9%754466433310/.0883589<>=<=???CFJFEFFEFGKME=;@ABACEEGGJHFB@?@CB@?=1'$/9>;:;;:569677457:?FED=;<;=9750RFIKNUMGN-5<>;8<>:8;EMEAJLA7459@?=:6572/12-/2/-,-158556888:::;=>;9:?A@;:986304:;<;:?EE@<:>>:9>@;<=?;6117:<<<875.%""#%(*(#',/.)''&&+'$#F(&%(-/QM*.-+*$#""#%+135520-*')(%&&$#(('#$+($%&&%$"#$!!$''&%&).0/460)2"#IIE?77<<<;51540.,./1410-),00,)&" !! * '&%++*+-132100.../.,+'%&')&E@?@?==<6/00./270((! "! !! "#,0146/185,J+036101-)%/4.,,-,1-.12-%GF(F<=6..( %+>BF(/0++.-+,6,/)$"?6*&++-.,.)'.-.1-'06-#.3+ )("#! '".7743.('.++G74,&$#!!#!#'"''#$%%$$<1'7 .&03('(A@((-,&-/'#&'";)+*(%**B&F;05+H'#(.0-((*+-.-,(,+24*&(--%!%/)+))3,4=5,)-//13464/.,),/0494+-/,+.1..+ICI)(N-QHFBCICQ,(*+)'IA@:@G?HEEFC?P*J(G9<<>@>=HVV-J;-+7B.(*++/FI,.+&A+7340S.1R29-=),10447*)296)*.-$/43$##'3=0-;4980+//-31*.33/:8;@GA73(2<-!"2,20-.0.+-+'..&*7=/41#%,2?<*31/45%/01/$/53610, $*''!''!)5/4()0G='%%# "$$,3.,/158-/772(%*/.1/*&,-,/.')-.465-/745=6-)0622/1448742%37428C=8:<=+27889:D@84++>G14785-8;83/0-0717<0147400/,)?F>4*0733721//6304000-.5611! $":80;?>78<:?FGA=8CEC53#!#A<8646985/094*-:E843986;?C>?==?JPRJB=>??>?BCGKNRVYZXVXY[]_^`aa[Z^_^UW_a^ZYYWTTWXYZVWTQQRW^_`bdgjh_JO\_`QQV[`eeg32335>;;9853345556886323356<>??AA@?AABA=;:643eccabeh5ii5f`]\\]]\[ZXWVUUWVVY[[Z^[YXYZZ[[]^__addccc`^_abcdeb_chlki5iiihb][[\^_ddbaceec_]\[XWXWWWYYX[\^][YXXTCBK+1VSSV[a7;4bca^^^Z\]^]\[]_[Z^_abbeefghijg_Z]cd`^a_ZWbgb]\a_\`]\bak954i7888;>@CEB;6555420^^]ZYYYVV\547621/1110ZVX`79664112356873/0121122344563^NMXbb133a^`dfggc[ZUVUSRSXZ][PGGFJPQTSRSTOIE@@BDFHIGFLUSNMKKNNNJCFOPNHFFINNJF@@BACFB@CEGLNJIHG@?@A@;84dd7@GEBABEGGDBHLJLLMNPTRQNJIHIIHIHKMIHIIGEFGHGHLNJEGMOPXacYXYYXW[_^YRUSFCLQNJJGGJHKHGFFFJPUYahc^SLIONJHJJGM[ZSNPJHHKOOQKNUZ^]_gZSU_lkggkld_WRRJBDHLNOQSSUUXYZ]`c]]_]fkp989;9kj6431bWY556312864105_[ULSVXU\WQRPTXXUSQSTTPIHSVNDBLEMTSJJNNPSTOQWSSONNLIKNPOQMPPNKRUUOSUQCCGLNNRVPOOQQRQQPPRLNQQQT]b^_acc_]VQWVOSRPSQRQRSSTPNPURPPQWXUVUQXabdc^\^epBvpfigeebXQKGHJIEGJHGKKLNNKKORWTTZTTYYVTSUXULHPUWSOSTRTRPSVSRUVZ^\]ZUTSPOPQPLNJFGA==;<9cde^UTWX_ZWZ\\^_bi:;?@@CBACFHKKMRW[[Z\bkppTSXXX[XWY[Y^`]\[ZZ]`_]\]^\YZ[WWY]_Z_hhd^TX_`1`[L?JSWTLIU>8[YZe58aPd7535ikf[\bhlpvpjkmntqkjbTX_dljchorx{y~{mjliccgc^^fhhih`^cZSTXY[[[YZ\^^ad_\Z\`adQ=TYTSXchh]SZdfgmnmkkbQZe^_djj`\]YV\]_ca^_]`a`a^Y[ZWWVSQOIIPVVZ^cj9<>9N2?<<:7788d[d5;DHHE}smheg]Ya`_hda\Zdhd][ZY[^[WPIFEDD@@EJKJPQQNB=<=CLJNXS[3640TDX7758;@@@FN^gmlc^`ca\[YSRSQNGCvszCwpllmgaba^[USTV_`XWK>CCHGIIILNQSWYRSZ/8NRZ[^^X_`VMLRQYZUWTRMKVVQNPO[]TW\[RF{|u~fVbYKBG][hPSUS\ZMMPZ>oqo:@_]NKOWTQKPQMNNPPONU\ZPNXZPA:;Gf[YWMWTVV]5>Xgb`^XOQSLEN|rtogaYWXXVVWLHIFD@@CR_`2GQRMQOKGCyyrdYTOKC?DG7>uSPLIv{IVc^PMPKHLPE>GGJMBEJIHOMysqFFF[dRNSSNRUQQSVWONOXYMFITWLFF\YUSU\LKddXQSZY\b_]`UUZWSRO[gkLHK}PWUSOxILWQwwe{IULwtrB~usHJ|_[cmutrxmbn|\[\IDkObRDMzHXwfuugI>[\JO_VPh`UNFRB{Zla@QHGHIGFgrbRHLbJGOd]TadVegoHSEme[S9BWZT_eo^]ZVVKJNcUKF[SUJDITczkHZTSfbYfhgWQU`SehqjCGY^ZB:A;QQVFVkv^OPgmkrhXLDX_bqjflgtPzZ^^?IDje~ogbYihckzmebI_ra^XULP`d_WX]Y\ZUe]T]appf_fVKZdeVKLRestd[V]_RT^^jX_geYS^rwFL}op|vqimvubclppf=J@yvxyyqjebfempedkwsi_Ya`htujiv~uuwnhoqojjklnmtwjbaipf_UQUTSTTJ@9<@FJICBBHKNMOW_YZYVYVX\XTVWROQOKNMEBCFNRLNJG]_ZRMLDDHGJMNNNPIBHQ==HVQD<5BD0/31120.1226645788756543340/.24/1651,&%''((#&&&#)!)&//38=3+)!/.%!0.,?*595$(# &#'(#'),-1/***-,+-./111/00213235559:==<<@=99::755566335`788446469::;;8713645554457:::7657646;==?AA?>BB=<:;;9:<>@=9;:659;@B?>;9;;;<;<;:<;:;;>=997677456840 +4=98:==>>?A??DFIJHGEDCBEFFECBABAABDDBCCIPNIFB>A@?BB:7<>??=CHNV.,,--,,/0/-,)''()()+,+('),--,*)-2116879;;::/)$4B?$#!#*()-12-/49=AC?:L;;;??=<5),047637;?0%,# 119L.//-43*)+/10,43+)+1/,(++))*,+**.10**12*#A/$! ")4/.//,02+&N,C>?:0)%$%#!"" %%"*+'+)'$";=6-%"=0-+*?A&/74*()%$(*!$%'*"$('%,*=68@$$"26)'+-'+-**,-.'(*11)$&-.'##20--/6*):80-.1039623+-0.-.-3<=)'+FK03/0/DH)PL+50NBBFC:ISJ'.(HDAA=H%BFB>>KI')DC@139AGEAP^XZJB;5>G357S*'9-:0&*HE+Q5VF>RCDaQA,$55),9/,;6-)'.$A4>9!+''&(*&:=5,%':+'*94,25+79:G',$83./!.0(26<133/0)'+6-'(8.0,$&.8>:"0,(63(136-(-3)57::!###"&##$=5.&*4)+'#$&.61-,0=6(05E<%&*0/1/,(,1.+4-!$.:?2(&476>:0(#.24:68=FFKJ?23:;<3& ;9>>=:766:7:;326>;62.646<@87AEABC><@>>;<><<=CE=84:;42+*,)(,-'  #%$" #%%&&*.*++()')+)&()&%&%"%& ! &'!# -/,(#"" !##%''#"(!)& !#$'')&&&"%# "!8:#(&"(/2+)++&$%$'#'%$#,--++--.,,,**++,+**+02.*,**+,-,*&((')),-22-+-+)(+.--1244/ƀƀ߀րĀ}~~ڀ΀ ¾􀁂ƹɿ½¿̀퀌写ŽѸüĀɽüû̺̲ľƀ˿гòĻǿ䁅ȾüεԿ½¿ĿįĺÿʾȻ@տįĿ„廀ϓ㆖Ⱦ¼ [ɩĽ»ɺɷڻ輛ϻϵ񍊍Ǿʾϥہųȵ̈́뇟퉔䊛϶傍ɭâ琀ܵ׭ޑ͹狣ζǫð豦﮴Ґƽļ²ȴη̽ǭ逊°ɾީ¼ǹꘒһ­ƼƺͺЀú¹ɾȵ½ʾ횬݀L󀇅|ga\VYYVWUTX[_aa`_aegjgb^^__^]_`^][Z\`aefghlljb\YVX]^[WX]dba^]]YXXX]bdgjiffc`]\^[^^]]\[YXWVRQSVVXZYVSVVVXVZ_c2224667765hbYRMMPONONPRRUZ[\__]ZXWXY[[[\\]_a^]YVWXXWXYYUTVUUSSY`ZTWVVZ_b^]]^\\[^_^ZVRPMMQSPLIIHEB?>>=@DGKQSUWX[]^^]\YY\]_a_`XT_cecYY[[YWTSQRSVZY\\XXWYZY[_adfeffZSb_YTUVVVX]^___26:>??<:<<<>><986553e3444554f58642_\ZY`59<<>@@?>>>@=<;97544gef46hcg5f^\[]_^][XVWVVY[^]^`]\XYY]_^`_]\[[_cccddcbcddcdb][^ccdge`^^]]\]][Y\`fghgfhgc`__\\]\ZY\\YXW[\][[[Y]8@A;ZSUVVWWXZYZ[^cea\YY[XX[][\]^^^`di6688mjd_^]]\ZZYX[b`\]]\^_aa`il45556:RVNC7GEABEFCCB?<989=@ADGCDH@?@=;=<>BBFF>?CEJPONKC<7;?DDA@;:;?FKJDA@BDEGIKNQTUURPOJIHGIHEBDIIFHLJGGHGHKNOKJOW\^]Z[SRURSV]\XXNGONJFHLGIIFGIHICCDGO[a[ZdeTJ@r;CHFJNMHIQXWPPMLLLMKNONMQ\`aejgh_pthjtu`UPMKGAGNORWZXTUWY]diaZXY^^adk<=9lfaghifb`VEZ663^^_484bZWQKOQPRPRYQPOQTSQPPRUWRMOUWRI?>JPRWZZWSQOMOSSRNIJJLQX[Z^_``43`b_^_ZUWceWT\`RPWPHFIMOTTNV_YPMJJONJKKMPRRNLNLIILMLMPPQTURQRRTWTJJNIC@>DBAA>ELHILLLJNQONOPPNPMMOQQPTMLIKQQLOLHEILPRTUJGNOLMQTUSOQTZXSS]a__^\Y]Y[WVYTPQQPNKLOPNLNNMQVTQRV^[VYZ[^_\^a\`a_ixsa]`jwpleZTPKFHGDDJIGKLKMOPPMORRTVVRUXZVRTVNINPSZZWVXXYYX[^WPQU\_bc_[[[XVURNORPLIED@=;:8lhaYYXVWWUSUWWX_b7<=?>@B@BFFIEHNUXY_fjlen^QX\PVXWWYW`_Y[\Y]a\ZYYZ[ZYVVVUY`j``fhhf_YXZ_3bY:CQS\YL598IX][ajnkg6;C20-2/1?QN]C]g;?GOLEKMPOICHPNPOQPIIKMPTWVVZ\^]][[[][\ad`^^]ZZ^abdeedbchedb^[Z][]^]]]Z`dfowurmjnrnlhgb_^emmjeb`__bfigdfhffhjkhcdgnpqrtpkkke_bgigijf``cccddcflhghhhefeb`__]]_ba][XVZ`bcdfdfpwxtrpquz~}vuww~~||uvyzyzxz~KJ}~~zxjaeefffeiltxwjY[cda_ZVTSQKOSNMNLKPQFMZ_itmlsploqsrnleiokg``b`befablledWJCK`bgaV[hifjpoc]\ZVVVZ_^YPNQZgrphji`\[[\fla`fmd]Y`bbfhgp{FGFECGIJKKHHKMMOOPOQTUUY_`ced\VV]cfeeb[RH?|uppXi;:6`f9<7d_16777578okhnpjeow|zupqxoeU\fh`afiecghailhfggXH`fcdjgd454fdb^\[[XSPQQQUX`d^^Y\\_aNC\hilm779?H]4:=5+P:Z<<>BDHNUalsqoiba`\YXVTPIBylfftz}sgekke^][[_]ZWSTTPPKB=?DEHHJKNLOUWXSQVZ/4LX`__^[b^VTZWRad]TRRPPVNJSSTYVV[_]Jz}uhZVENWVJQhGRQRWXOMWcWJJDCCQUQMOSVRNPUPF@GKFHV[]YNPTRKzI@a]X_20.2,WcI^fdTPLJIKG{{zpkd__YWZYOKC9;7CMZ^/1EYTNUKFDDD}pc^SLCFMT\TMN`hWThroa`g`WPaikpud^btjU_`q?HCmnssoph`iaagehd^LEPf]ZSTXTWYYSXaovSYbTKSZs}emc]VZ[WURHbpqf]YWSJSdif\kw[LYgfqCF|wttop|IIIt}q`nIJ?pu|z|wl`_jpqomljjc]PT^\jxpa_qux|udfokhddklmmaafesqcXTUSRPLHF?87<@CA?@GDGLNQU]ee\UUZaXMQUXXXWPLG=ANWMC98HC7BIEKMRSPKKNOIB==<;755322465452c3487575564dcc_^c378d`376h`YYZYXWVX[cgZX\_]Z[Z[XWVSUVSTZchiig]YZ`aceccf34k1/.*,,)))()*--././101/.,*5+,,,---0011//2551,)&&*.,)*-00/.-,+**+,.001300/-*)++,,)')**)'''()')+, 0.*'$#&'&'&'''++*,,+)(()*+,+,,+,/.-,)())()**(')(''&)-*%'(*+-.,**+)**+-+)'%%$$%&&$##"  !$')+,,,-.///.,-.0100,'*,+*''***(''')*,.-/-**+++)+..13432+"*(&%&''(),}*-+*('*0001.0/,+*,..,+)))(()+...0.,***..-//.-+,./--.-,-..--..*)*,,,//-,7+*+02210121/-+,++-,+*,-+**,,-,,,*)((())*)***+-.130,*,-...-*/2541.,*++***+.0-,---..---12,+)(()&(()*)*)&&,-+*)(&%'*+-.-*+,)')(+-0/+(())*)&'((&'*+% "#'(+*()*)''))),.,*),.//++,-+)'#%%&(&$%%%&('%&&&**&#$%""%()**#%**)'''**(+/.,+,+()+,&,.,*),0,(*+''*+)'%&&')*))+-+)***++,--,)*)'(+--*'&%(*++,,+*+*--&$# ! !#$#!!#$!!" !"%&#"&!!"  #"#$ "#&*)('# #$#" !&*)$##$#"#$%&'()+,-,)Y()&&%&)(%$%''%&)(%&'&')++(&).0/.,-))+*++//..*&*+('&'%''%&('($%%%*03.-33+)$A"&'%(*)&&*--++(')*(').000211*6936;:.+*(('$'**+//.,--.1582.,-0/.,0411530,*,( *&&&*))($)*)+(*.**)*+++*(***%""$#"(+,/0/.,+*)+--,*''&%%&''))*)%&%$%#!!')"$'#$)&#"$&')(&*/+&('%)(&('()+-*)*('(+**)**+,+*)*)*,+%$&$ ""!!#*'&)('%')''()''(&&')))+%!" !!!"&(*,-,$!()&&)+-,()+/-++25332312/1/,/+()*(('')+)()*(+..+,/31./014410312315=7+')/;985.+)'#%%##&&%(('(***((++-00+,,-*'(+'%(),12/.0010./2/**,01442110-,,/.+)&%# 751+,,++,,*,--+02 ! $'&'%&*/027=@@;@6.35,/112439824647:5432244300/.04<547663-&#$%)'!%$'$(0315:;85$%*)%$*43;(33#)'"((*+&$),*+)+*'(+,-/0//0131100121246544433688998778;98753464665453678>A?<98;>:9775338<=;875557:<<;==<<;<=;99;@@ABC@>>?:68<=<<=:779:9:>;9;::889787876777433447:;;;76>CCA@@ABDHIEDEDGKLLMJFDEBACDDEEGJOSY-,PJIIGHKMLNNIHGB@6.145668CA>CHGDA@;>A=<98;9:<=87==75*!#69<802996:?@;8763445795/.03=GG?@@:7778AF?=BI?99<<;=?>ELMLQQ()('&()***)(*+,...,-/..0435772./478531+&7856+.*-(*3139=74=CGFC>?C<2')/2,-132232,33.-/2+#00.//+*0.,+*()&" "!"$'-.+-(''()#'-.,*/0211365132-*(&%'%%%&'&y''(&%&" "%%& ##DC?:><63/,))'#+.-*(&&')(''&%$%%$"##!!%""&##%&& '"&#$#(06;;;95441.,'#A956@CE>87<<710//21.+))*'&""""!#(/4332064..32,693.-.-,0,*00/211464'FE@OIA<2'#%(#*;(/--01,*05,""  *.,+,.0-)*.,%"&)%&/220(+/,'>8$ .'!#$"045.-+*+,)LGJJDDGA94-)($#&& !$!.+(,'$###F?5*& ### $$$@?'38/+&#'()))%#%*(;#$@%+H0D'+''23*(-2**./))-/'"!&)&&%(-*&%.3-,-.'%5:4+)1411120(*030.)/:E.ECB,340,RFW/0P)64+IDC=1G)*,3'CCB@D#>IF8?A@KMKJGF=39@KSROWXMFLLEBF83CA=7$0?2',IB1))OE5WbOPE@0%14+'/3-605,8+(#470(2)*1+$ 15."#/0"&6:0+;:8:4>@(2':6/* #/315*3430.-(&%2-(=*)&',075A1%&+4-/5692*+)323.5(%)4,(/*5413662-,. -+533//),6-!.3>:1/*)120*''/1+-. &18+(2895352/*479=?636AH8*/.6%#89<;:97585585630*%)754..0-.13.25?>954:?>;886631*-207=;33>IG@DE>57;;;88<<>?6586=;3,*+*)*&$$ $!"$%&'-11,()+/)#&(+***'%  %"#%$*('&!$"$(&"'*(! "#*$#!#"$&$#$%&"63!!'($"#%00,*,+&&(%$*$Z',../,+,,*1.*+,,*))**./((*,,+,**(**(((''*/1 ,*+//010//1쀊  ŀ ŀ~}~~Ѐ + ̀ üĿр܀􄖖¾̸ɾ¾üÿ½sȿøƹĶͿ޳ſżĽö̻݀ƶҰ¿ǻļŲĿżþƮʿɼʿƿ»ǿⶹབྷ€փ¿ŀûþͳþѵŶżݽЖ廤野섇󆅅􄏝򁊃ֹӳʹ»˽׀ԟ鎢􉚍ƭě󂋈׃큉݃凘󉎙퀆ށ䀀˹ƼߪޒǼǵ׹íʶĺûнǿŶѨйՀǽú˽ƭķȾðųѾۀ㸬»ʻϺ±ƴ¶Ħ˳Ŀ؀􃑆逎 5if`ZXUQRTUZ\`_a``bdbdea_\ZZ[]_]ZZXWX\accgiosnic\TUYZVRTX[]]]ZYZZYWX\\]_`bdefdccjkhfe`[YWUPORRSTVXWUUWUWYZ\_cdd367767885gd_WTRQOMLLKKMNORU\bc`_\\`ckjdgjd`]Z[ZXZYYYXWWWXWVWUSSVWWUUW]_`^[Z]ZYZ]a`\WSRUX[\ZVRPQPNJFCBBEHLPRTVWY\]\^`_^_`ccceaZdh454\XRPQQPPQU]]`a[Y]__]\^acfhm88kTTWW[_^ZXYbgc]^_025654^ZZ07=<86536835588574i867:51\[UTTTY[_28==;:<=@A?<855654455hfggdc__^]^^]^\YY\`a_^[WX\^\^^^a:a]ZZY[a``^__`^^ba^]]]\`_]^\^___]_a```_acbaabcehifdb`^_]]]^\[Y\^\YXWXZZ\\[YWWWVXZ]a]WVVW[[^]\[[[YX\b4655hedfggc`]ZZYYZ[]^\[ZYZ`ccdj56j348;>??;;?BGPRIB>@IJKMOQRXZYWTROOTXWQMMOQXZY[1`][ZXSNJJJMRWVVWUOOQMMNLJNQPQNKOROMMJPPQPSXWSOOQTXWQMLMNQXWTWWUWYQKLGKMGEA6:O\WHHKQKTPKGAAB@=EHC@?@<;?>=BEDGCDF?<;7;=?>A@@B>?CCEIGA@;78?FIJHGC@@=@BAACCCBAAGJKJGJOSWXSPRRLIGFJGEFJLJIIGHGGFGJLLKOW`\SNNSOOSRPV_ZKKRW]ZZXOKEEDEGHGFBEPYgjga_eYOUMEGFIKPQNNPSTRU]VRSOMOPQNKMSY^b57k\]ifkq{g][VPKGISSRVULORTZ`db[UTXca`akpoDBqbbfjgaejmaie^^[Z\b]XROIBIWNMNJPPPRNPOOOLOOQQPRUVPTL?BLOOQQQSVTKKOOOPQPPRUURQTTT[_caa]RRd_Y_hbVVVQNKHIKJJGGLRQNQX\XHKPNMOQUTRQNPPLKLPOLQUTRUQRW[YYYXWLGFIGGF>?CBGIIHJMQNOY[SPQPQRTRSUVQJDRVbdQLPQONQUWOASIGLSUWSRW^]ZZ[eggd]a[\URTVSNMJJKMJKONKGJKJLPRUUVXXXYY[^_[\`]Z^dp>tfbgl=picWRSQNKHEEFIHIKHKMQSRPQPSUVQRTWWUTSJJTVWZ[\[[[Z\^`_ZRU[[^hfdcb`_`b\ZVVTJGFHGC@=9qm\M]abfb\TRPQMLRa:?BDH?47=@CDGKOSU\fihged][`ZZUQPPQZ`[[[UX]YWSTXZWVUQOPU[bccedghc__122b\FGV^a_`Za3IZ__`gggp:JBK,530].?d@A`_;??FKDHJPQDFRSNLJHMMLMLMSSW\][^`a`adi otngdeca_\\_b_\^bgd_^`b^[\`b`aacd`gpxpgghjdfbdi^XYZ_cbb^^`glhhbfmmifefdddcdfhlonmnjfcbbachkfbbdcdc_`hkcbca]_bba_\[]`cfd\WVVSTX^emifnuuqsvxxutngjkr}{ywsvxuuuwwxwuv{|~||{tooh_ZRMOXmpj^`df`aheNKWWTTRTTPJNUSQW^`XMGDJRZhpkib\g|xdZZbcehqtkgb`d_^aeb_dcSGF]sukkmkospmg\WQOQUXST]cYPQRTYZ][XYWVWY]][_cvzaUUWX[XW\ejgbhmsvz|HJLQRRQSTTQLKPUVVUTTWZ^^Z\\Y[_ehjlaRPJecz@ACGA?8a46998k<;5d`bhb^dh\fbhfgc`^]a^WX[ZU]][Z^e^Ui53f4]U\a`\WH]a\]RGIQSWUODAOVRYXXPZL7Tefg7<=CKF>7]688786;>=@>99:;lijicfe__45333432354cd835hggifRIa48@FEA9:;:8:==<;:45AEA:halomkgi673_[R^cc_\\_abbc`[VV[_^YZ_ZXWI@>QZ[^d6<<7420IRb0.23J0H97wDGS[_``hrpgb`[XTROJIC{vqiiowm^X[^efc`^[XZ\ZUOMKJFGHIIJLLLPPPVWWUW]0115Vdkedcdc]STUQRjdZTRTPSQOTOLVUXUQIEQHBs`cfa^@YNT|ywPPGZccYQNVPHMONLMNOOUXTHDELMJS]^]PIYUNxIUwbcV18,V627UobXRMJIJIy{t|qoulfb]^ZSPPC1DYX\1424QYMJLHEDFF~pd]WPFLS^3P8N6:FIKROHLHJVSKFNGIMRG=n@EvJrJUWVZYUSY\`bWWZPJKSTI21>IQJMTTPMPTRRPOLK]gbTNSUQQTVPGPXb[TOU`kYp\ZSGz~R]POT]SLzt|qLNX_L{zEIJHFsFJyt|~rwlLcNLxzxzlkZWcbidNHT`MC?GGExUruR]FENPNKHPWUWKI@Kak_bXVX^YXMLNLOMIGTZ]^O[qgho]dxNKBoc\SV[?0XF]_\g\SVMIFUXXURG>Mmgfne\e=JZ`trjj[TQHV`c_TOGBJA>V5B<;9?DGDC:=HJHIWcjc\Y`bXIDHWVRQRQG?B>?9?INc`UNMKDONHEBJQRGKSWMD><;876532355233b447<753cA353aa_^__4;6[[3<8e\Z\]\YXXZ_c`UW]^]ZY[]]]XTUTRRWahhkha`bcde``^b349220,*(&'''*+../0//1/./-+*)(()*++,,**+-/0126:850+(&'(''(+-C+*++,*)++,--./00//011//.+(((''())((())('((()***-...--+)))'%$$$&)*+./--,,-.23/02/-+*+,+**+,+*)()**)(&$%'''()+,++)'(''()*))(%%(*+++*'&''%$! "#%'()*++-,,.00/.023220+.-*)&&'&&')-3330*)+,,**,-/1242$!&'+,,)*,24.+,+*'&1((''&&()*3221//./--.../,)**,./.,)*--,-,,/0.,++,-,-+i,,--++***-,,-,,++-,,/.-,,-..--.0/11///..-,,-.-,+**),.,*)''(()++,,+*))***,-/-)))*,-/00--,+*,/1/03341-+*@+,,,+++*+02/.1/.,,+,,+)*+,,*+/)&%'(,-./,'#!#(')+**)*)(++,.--,)'(++(&%$))'&&" !"$&%(*(((+,,+,-.*&'*('*,*+)(()*+*)(&%&&%'*,++*'%%"!!!#!#&+,(%"#(''(()+./-+**((+,,)()*)**(*.***)'%%%&'+-,-.,()*))*(()+**)'*+(''$(())*..,))*+,-*(((*,.-*(%"!$!!(% """" $&" !""!%$$$! !!!" ""#$$!!!&'(''$"#!"$##$$%%##&)+(&&(*..)(+,(&&&)(%%')(''%%$$$%(**)+/4.'&'*'),+(+0.!!*.0,,+(&$%#&''&&#&,/6530/1*)-*%&%'o()*))*,*)-4.++*())*'%'),..5,,449;>50.+)'#&,**,*&),,/363.+*-2.**.-.4/120+)-12-40..*&(,++**&$)/)**'*+++*+*+*()(((&$""+,*+,,,--((+*)**+*))'&%&&'*,+('& '%#&)'##%""%$%''&#"&**''*+)!$)((*-/.-,+-+()***),-+-/,,-,,.1///-,%##$###! %&&%%')'',.*''()*,+++(#!$*.'&**)),/.)+%#'*,,*)-200/.68862522-*,-*'('&''&&()'&&('(++-./0//0/1340032//29 91/36 ;63-+*)(&%$##%&'(&')+-,*+)*-.**++*"$-.0111002113420+,103:9788779:66321)'')($# 87+!+./50+''&'$"&-" "#$&(*.05<@>>;<95512.+--.4956512421..14220-,+/15656554.)&))!"))*(('*(3545976:(%40/)%D'?&'50 %(#&&++ $,-*)'&))(*)(,,0540234458;@A>98987654689874235863469756986547637;?956795647;301158764349;:<8<::;99888:<=??>><977899;=97899:978;=888634777633358984/02//26:@=9=AB@BCEDCB@=?@CIMJKKJFCCCABEDABDBDGGECBBBFGGFEC>;94.*$#"(9?<237<6598-)2422034.)-51-49;5/-+.36>D>>:6>NL=78=<;;AE@=:8=:9;=:683)#$1AB:<>==@@=;740/03532693./102067554345687:=IK;23469439=?<:=@CFGFNR*+,.//-//.-)',..00.,/36868733458::3,,+;6>23"'/,+,.,+.COLLI9/3/20.+(**,)%&''(*(''*,))/-%"&)D('&'+((# ##$#"$#!&%$ &#(&)&"%.--,(**$%&''((**!'!!30355421)&"(+)&%$&())(&%##&((%(*&&%"%%%&"'- &*,-/5=<87752/-*()%CBA:8;GF?:0-/277531/-./-(#"  ##" !$/9;767863-/0/-;70.-.,..M-/,*1141-'%-'DE@!6)*-('$#-G?=L--H'264.)&-(#),+*+,,,/0-&$%))'-231(%1/*I;&.9+'+:2/.*)*,+LLLAHD=DE;;>5.(&(%  &#$).&&(&$#%&KD9+&#  #'$'@&+*%(%&/+(%+&'),#4 $A>,(38*$J%+'J+CGW6HH]47')/.,+)-2.3+Q+#'482620/3.,'*+**(*(,/23(/=67;04=*)!93/(%'!:(.0070+.)&#.01//(#*;66;5/7(209:591-+$,23/'# $$+++)-581/236/",,&03184111/4"%024172,+'''!'/3-3$)'*+2AC5',96238BJ?55.-393-/18A&D8768:=GFC<63683,//(,--14/31*%4:9>E797*C'8>AA;9=8=:04-)0:=;6310&(55982361+3;:><=@@?=<;:ET+*H%'&'G7.=%%$ <>?C@=638;?A>;:984-'+/6;83/8DDA?>B-+@?<=9;>;93872:>4464.)$""#" #!"#$$")/3/+).1+#**'&'($ $%3-'#""&$! "'' #&*$&'$%! !&(%"&$ !&!50')''("! #3301/.10)('%%'+*$%*,-.,**)((1,+,-,*&-.,'(,--+*+,--+((('&(.1/01.0/.0/--)+Ҁ€~}|}}}~ Ҁ 󀅅¾̀뀌ۀۀ񆇂ijĹƻ냈żɽ¾鏥~ż¿¾ýĹǛŀŹƽƿȻѵĿŻŵŽù¿ŸĹɾƽIJºñõǷ䫻Ń¾þƀ¾Ŀ˾ýȮ댠¾+þýݛ􃉉箓黺؍馍½ԳǼ􅐜̤ɀЂ򁅖𑯘㈣鍒򆒠ݥø풗ʈ擿ʀîɶþឋ拣¿߱԰Ϥѽķɴ¿׿Ǿ֪ı჋Э׫̾°Ѐ·ĺ뉍񁁁<488jaWVSQRRW[`a^^aa`^]^^`ccca[ZZ[\ZXVVX^cdbehijkjhe_ZUTTUVUWXXZYZ[XYZVUWVVX[__^aeh69;ne`XTSTVXXVTUUTTWXWWX[[WZ^`b465677676jd_^`XPNOMLLMLMQX]^ZXWX\bge_adi8ka\[Z\^aca_^^_`][Z\]difbdch87igghd_^^__`[WX_ceffb]WTRMIFHFEHKNSVVVX^ehhdb_[]`egfgc`ead4f]XXZXVWZ\dhghhik86gghgedf34789bRVZ_aa^[\][_fcYYTTUWZVQRW[369:7336677547857lef56433a_]ZXSRQX3:76557889955566444igfeeefd_]^^_a^]___^`dc[Y\^\[\ZZ*[YZ[ZZ]\`adhdaa``^]aa`beeffbaddbab`bbbabfc`ccbcecbdeeb`\]]^_[Z[ZZ[YWYZXX[\]]]^]`_[YVVWWWY\ZYYZZYZXZ]acihgd^YXaehijd`]\``]\\ZZ[Z\fjg_^_adj789:=<;9664c^^_ae3caabb`^c678852`ZWTVV\40.///344423652/000110124740/ZZ^3540^[URPOQTY\YWWYXTPPOQUUPNMMMNRQQSRPSSPSOGLMKMLMTUSPRTRLKNKJHHKLHFGKLMNPMKNOMMKEGKIHIKJHGEDFFDFHMMEGMTUOHC?AHNNECFOTTRQQROOVURRQPPLKX14453`]_^XUQNQRW_`\UPLMLKNNLKLPQOIHMPNLLNSSSTXXWTQQPRTSKIKKOTWXXZWXVUQMQNLIEACCHbcWMLJEFJEGFGA@??CA>BB?=;]A@>BDB<;AA@?@AEDDDGDADD>==?@BDEDFLSUSRQQS]WONPPMKG>?LHCGMMIGGJJIGGGJMNQWdbTTRMNPSQNQUXIDRW[TPQOLGA?EGFCDJV][chb_^\TPMJHJMPONKJQPOORTWWSQPNLMQOKMQW^a277cYZ`efea]YWYT<9SQOPNMRXY\^a__`\[^`\d7>AHHD;jf656777e_[Yb]VUVTSOLJKKMNMNPQQONJHIJKLMLNPOPSROIEIKLKKJMPTQNMNLLNQTSUXWRLOQTVUY^^YYc42234_UQMJGEHKMNMIGILRV[`fige[POSXXWROPSRMLLLKMRQSVTXYXW[YTSYY[[OMMDCHJBB?8>DEDFJSQPRQRSOSUQKHT]XSLFMU\ZSMQTSQMMRUVVQPTRSTTVY]age_edec^`ZWONSXXVRPNJGHLMIHHEIGGLOPTSUSW\]^acbab^^`bjortjefh^]]Y(UUUSMJKKJLJIKIKNPQRPRRUVXVTVZYYYUHKTUWVX[XUTWXWTXaceidcc`]^]deb[]dUGEDFBBCB>=@75cKr@84`[g^JFV]14:DD:79:7>BEHMRUTX]hf_[SPUUREBDGLV\[XVVVPSRRVWUVURRTVY\`bbchhb``431`VSQRHX[HPTVCNY]`he]k8G7#+kf`].D15n\xF??<@>CIKL@@NPOKHMPQPPLJNNPQOLLORUX\ajopnidb_bdbbbegcb`chjfab_a^]abcefioohcgsvmjlonmeab]Z^_dlnieffeigfghmnihikkhifeehjswqkfdedbabdedcb_adghihcbdccacdcc]`cchkjf\WWWTPQUcstnlrtruwxumc``cgn{~zH~}xrnloommlkiowxwtngbQJHEGKTgqyyvoogZ^elcPJLQTUZYSUZ[XVWYR{xyNVaijmd`fg]XUZa^[dlihhd_]YY]dehonjeehnty{pid^VUTONOPS\^ZUTVXXZTXXXZZXWZ[\WSQQXZZUWZ]Y]eddaabgjkmr|KLNPQRQLNQT\`^[Z]_cda```\ZZ^`ioplhdfc`_]XSOUTHE=9765eYPqa^bcfa]j8?yspibbe_a[?==@@A:=@?;:>=>@>==?@>:<>?=:6big^]STY[]a_b565744gcjbZX^b]\`YUUSSSY\_e878/-);,)H23Q929K^mT]ahlgdffd_ZVQKFC@zx{ztov{zyphf`ahfjojea_\[^[VPKGEILPPLNRQNPSTZ\[]\a26Unreef__\SPOXaeZZYXPMSQUTQPRVSRKJKQMD?>@nZ]ejiP@^Yt~|DNXKIWabiZOS[KR[RKGMNNOZZOJIFMIO[^`UJPUOJVkk767Lf`[UQbq{eeqst~KJsfZXWU4.BR;Sh^VUUSQNZWWZXTFMfintlf^IITah\\\WQUSYb]YPFMGG?62=GFSMHQUVTT]]aV___[JZ\X[_`_`SYQBWRhtlqkPDIVJEKU]_pPLjNMQ`s{ve`kkfkrfd_c]bdkru}pjib\Xlxldb`UP\`XMNUg`OldFLbagsvfkbd[`a[hnhemvii{oWdpca`c^XIY`hjmfeaenkry?orswwnvwpnmIGJmfd=CELG}}EG{~qWYq{{rfilhbY]egef^XjxukijhNOefinghhddoic`gqkffacSIJLHD>><9?DFF>6;DIGGLZd^WQVa]QH@LKGGCBGJa\ZTTPOPKMNIGIKEELQHCABD997643344365b23276D474e46b^`^_]^39e_`55faZXX]\]\X\bifUVZ[YY\`cc]\]XVUTW]caeikjb`a^__[acf50*)'&&&),/0..11/-,,,-..--)')*,+*)))+.1/24432220,(%&'(((**++**,))*)())(*+-,*+-.2-+(''()++)'()('()**(*-,-20./0,&$&%$$%%%&*,,+))*,./.*)+-2-*+*++.20-,,.0-*)**,.-,..0/-,..++*)*,*'),.00/.,)'&$"!""!"$%(*)*+-1342/.,-/35441.-+,-)()+)( *-/5655100/G000-#%(+,+*)+,+/31()'$$&)(&'*+/,+,+***(((*3320/031.+,-./,*,:.21,*,.,--,+,+++*)++---/.,-,-+,.--.0222..01.-...---.1/./.-.///111/-,-+**((*++,+*++*+++,(-/.,+))*+++,++*,,*+*+-/02121,))/23330.,,.,,+++-343.,-./1.,,--/-,+,,+*--*(*')+.-*'&&')++***)(&%&%'**(&%''&)))+*(*)''%"'*()))-.+))+)&&(((''(('&(,,+++*(*+)*)%&)&&(('&%%$%%$%',,%&+./+&%#$'))"!#)++)()++)*,*)&"*,+,,,*)(++,01/,)')))**(((+*(%$'*)(')***+---+)**+++('(),/0//-)&#"!!+*# ! !!"$"   !"!#"$$ ##!! - '%""!! !#"%$""$$''%&(%#&'""!"#$&%%'*.-,-+*+1-('*+('&!"+(#%((&$#$$%$%&()+-/53***'(*++)*,.&#*,.)'))(&#!%'%$%)-.,140//.*)'% %')+*)'',***,+))(&')(%&(,//1-.158751-,/,+(()((+//123122.-.-)+ 0,./.04/***++)(')()*)*-,,+*(&()*))()*()*(&$#'*+)))*+-+*))((**--,-+(&(**++,-,)&'*&%##$$')'$%'***)++,-+')-12/-,,-,)**+*,//02/121/20++.-..(&&! "# !! #%#$%,*((())')-+(&-0*$ %*++),.--)(,.--*)-**+,,.236515564231/**+.,+(((&$$')'&&#&&%(**-,-,.111354341679<756510//-+++('&'')**,-+++,,..,-/.//,$%,.0./1/.,-..+-24596787566:;956;1(&'($! ,2*'/,!!')"#&*/2246?>74-*,+)" !%(1653233-/..13221/.//02342230+('+)('%&($&",569;818' 3eWLF'A2A&!!!#&(( "*++(&(++)*((***,+))+,/147<@@>:876:;888::7647::6455643566889<:746>>98:<;:65632447<=978769989:>=99:<<:;989;>A@?=>>:97:<7537;97;:;878;;<@?:789558443-+*1570122.+/.1/,+.0-.)('*'!3(+/22$2,;CC&,3)'/4390)-4(,3.)'***,34,''%)&)123-&*.*'BB,B-*)#3=5/-*'*+NFDD@@F===:>A<:5.*&!   !$**&)(%#$%%GC:/)# "($&**(''.-'%"#%)()$"&#??E&)/354.*(/126-*22'&+#) 1((*+.-%',+).-*7A>5-+,,.+*)#)27.-.0/2.(@)5-+)'C.0LIS21SINF7G(IC$20)JJ*/50(MDAJKC;CFE?I@=679-1+,&<,0FR3]=ZBD/.<.O+,0-O-0,%DS>6$690<00(321) '.5- &62/.*7?A668:=D'&:4-,'$#-62+),+*'2/0330%+:67=<87&'-27--.,)+(-41.' %$+*&*.//-/--'+)-.#.0.23334,2+,)5:797( !& !)/0:("7#%&0:><429869DJH?7436/--18;@AC;89431=KRMC:444.*/31**.:6'<=)):68>?6;68666/9?77>CP;8EA,1=576952*249895413;8:?";;:=?8>>::GP(HB%(E943!#'$BA%'GBC=00>;8654daabf542db__13334530]YVW^32/.../.0641.-./.XUY/277210/\[]111`_[[[\^a32b^[]]UQPQTTOOMLPJHLQUXSQOKIGGMROMPQRXZVUSICDIKJKMPNHDACMPRRQLIECJIEEKLJJKKIIKKHJNKJOSMHLRSQJGFGIOUYW[YWWVSRPNPSMFEHIEDNX21ZSJJDFKKKLFGMLORQNPPONIFHLJKQRNGFGMONNUTPQTWXUSTTTUUQMKMPOMPSSTQTYRNPONIGJFBDPYYOGLNJ>AHECHE=AAC>;<@B?AEFGFGLKC;<>=A?3?IFEEDBFEACDE==BABBCBCA?@EEABHBAA@>?AGKLPSNOSSSVYRNKKMMKLHFKGFFKLKPWYXRIIGJMQUZacaXLHMNOQQPPSVUSPOMKLPLFDFLQPILS]`cbdZORVTRNFIQZYRPQPTPSSXWRQSQQMIJNNNQQU^`_133eeeZ[]YRSRSVRNUTRRPNR[\bg`]`fdbbdc^^@JDDGD?48:5<<98f]Z_ZSTRPLIGJMJLQMLQRPPOJFIJLMLLNNLKNLLJHDEEDFIIHHGKLMLMMNPLOTQNMQSSVXYXXV]edbcd_UMMHGGILKJGJLLJNRVW\`a37n\RS[XSUSSSTTROPMSVZ\USY^Z[[SIJPUVUOLFADGJFCE58DGDDGQLNOPUURUXSJEMRXYYYTPOHEEOU\ZJHNSV\YTSQVZ___\ggcdc_^]Y[VQOT\\YXVRIFGLMMJKMLLLJMMJOKNRWXYY\`dc^Zcfddefe\YXWWYZYXY[WSPQQQPOOLNRPOPPMNW\XUTTW\WY[ZTSUTZ\[`^[[XTRVZXY\^bef]]_]ZZ^g[X\di`QC?>@@CF>bH>371Vd5h5ahlMPOW^08?DDA<6858@DTYXVSXSTRSVWVVVZ]\ac^YcfYPQ2c\XSXZQ;Q[D2@A=L^c`g:Dd:9L[a]4IWTQLpI?>BBFHLJFB@CC=<==@EKPQMGB@F;a9>>dWgVYNm`:99=><<=?CB8A/_84626<68:ik@C=>@A??;;?@>;7\1524:j2332_`0UJWe3775899:5f`cfe^_bd^ZZWWXXZWXb8:B>4,+@B9L;Ce8=OP[[_ca__a`]\\XTQNF?ogbcjppropwwtiimlpokhjjdbaa^]ZUWSNKLMQMHHLLMSWYWY^b_]341258Rff`bbdf^[WX`f^X^bYPNSRUOJLOQSUTRPNB?X^XKFNZxQFJADDAE5?FIECHDDKWYWZUMJLGL?:CCBE??V53497ZNNU_jlkn445h`XQV[rX]_c3021XSW16779776<7S8=?<>>;986763332463143552784f43]_ac`^c64b`d44b_ZVXXZ^\\`b6dWX\]ZZ]deaac]XWXZ[\X[dgmh`ac^]^[_.4.+('&()**+-/../.,-.0/-**)((()*+)2;310--04432100,**&#%(*)('''((''(()*,++/1/,**)()*+(**)))'&')((*,-.Z1131+('&%&%$$%(++)'%%(+)&%%#$+.,+,.77/**+,.+)(()).0,-.,+-/0111/+'&%%$#!$&*f)*),/0/0/0155464(%%(**(+//-.-/6;85/,*))"!%,0/+)(*0+#%$#$$$&&&'&'+,*)* 0-,+,,*,5410143/.,*+,+*,+)***+,-,+,,-+*+,+***+,-/0/.--.-,,.//0-+,-+,--/1.-,.0/010120124330.+-0.--.,+++,,***)*,+*)>(()))*,,,+**+*))(*-1/.-..,)-..--,-/0/-,,,-..-.002320.03/-..00.,+*(&',&%&**+./--./..))((*'&'(**'''&)%#&(+-*(&%" !'*('*,,//+*($!$'('(*,*&#"%,-,,+('$"''&%))&%''&&))&'*)'*-(&)+-,('&&').0-/..-,**)&()%"#$&#!','%#&#$'$$%##'(*,+**))*(&'*('++'#$%()))-,)*--,+*,,,--,('),+*+---+++$ !! !%&"! !#$  "" !"#$$$''"! "!"(%%%#"$$!!"$!!"!$$&&&$"#&&##)%$$$"##'))*+''()*+,)'%&)'&''&($$$&'&(*)('$%$&(*-/213-&&)**--+)+,+*()'&'+($#%'c+*')+..003-&())*($&+0/+*++,)--0-*)+*+(%&)'()(+11.243/253.,))+*(+))*)(*/168202431020+&# %.--/-,,**(&')*'),)*.-,-+(%')**)())'')'%&(('''())*+('*())++*,//--++,,+-.,*&'%#$'())())(&'('%(((2.+.21,.-,--.-+,+/2462/26322.%&)+,*&$" !"!$#'$$$*'')(+,*+,+'%**+*&&%$'$##)O-11&%)..00,,*,.232-56345212/1/+),0/,++)$#%&'(&'*)(('((&)'(*-/0012541/453234400/-,-/.,**)(),+)),((.0.++,-0-.00,,.-01/10...-+,.-//15672266436=304:;6.$" ##()+/4!%"') ##&,0226?@4,*)*'(&!/543/1../0132022123.),+% ,,.+.-&"("!!!0<:34%8/AGRRI$*.1.)=( $'&&()$')(&&&*,)(+.,-*)+(%$')*+/0.3541/0048:<9786569;979;96443525;:;;;=<;9;;9:9:>:9;<<=?DEA?=;868::97437==;:;84677787449=>:999620+)**.3:=>===>?<76779=?>>@@@BEKNNHEFGLLIEBC=;:9;?;3<@BDCA>-+/;:9;50.26657851/./.RQOIBN376543242/037;8:>A<:=<98536:=>ADFF@??BLUWPHD>;5*F,47;9:>=978<><975547874536:;50169:9=>?EIF@=539::>@>>AA>8799<;88;;655642/**(%! ! "$$%''%$,960357:320/4730693-,/./)&(*,,.-+)( 1!"-)0D=3KL=II%)*2.00/9B0-0,)51,)')*+*,0*&&*&$/00/%#*+*&%*E.* #-:942.*NO,L@@B@@@9@A>DEB@@:2*#!!&&&+'IE%&$C>8-$ %(-'#$&%#%#"$%)+-*%"#?;$+)(025,'$'*,++&(,,)(�+()*-*%G+5011/6AD9.(*/,)++(+//*/11/.42K(2+)-.C&'()S+,)KS.B@)H?%,)*,I),/,)ICGFEE?C?58AIA)?OE@N\]=@GE@<6AIQNE8A;..*31)06/J@BPG=F,/B-IR*-PJ(.+H@7:#$,%!;1-..*"%.A*-92-$-7?'63>?;9%'>5../- %$.-+,+,-)./2+.;1259HB;=1-)',*''27)5802))''""$#$2%".*)+-/'(!)791"(0)-777;0/022)0?8<=0%#'"#$%'7*$-//'%+6?987735HI>74165//6;4=DA:68:;3*2B>:CC8///.10+%&*<:(/7/,;4GF:25//14*,;?I?85N904.04;>G?96:;<73.9;<8;CDD>9:2=A?<>?BF%*E3.5:! %("=BH%$$C1+6?@80033.186854..8==<=72-.1-1::525433<91447114+&%(%# #&%"" !#$%(+(($'*)%"!#%""!!#',(%$&%'&""%# $ !! !"$!!# "')''%" ! #!$&""',12133.*%()')()#  Q.)*+,+)--+..+*)))*,++,,0(*+,,+,01//1,)(*,-,(*/143/0/+++),πÀـ瀂}|}~̀ + +  ߀ )ބ¶؀ŻѴɀ򄊇úüǷƾüο˵úǾ½ɻkʾĹ»ǻþñþ½ùþƼ˾ÿįͷӀʾǶŦǾĩͷ̼δٸҔӑƼ¸¾̿ƀ§Ƣ恅οѕؿϾ¿˘ӕބ՗񋡭Žſµ낈Ȯʵ򂇑׼ɂԆ醂ȋ솑䠹էؾ׎煔­թȾƾ˲ЭжǐƲ۳ԵӿžʳϥɴȵԀܽ˼Ƽ北DZʳûվĿ¿ûà≌󀋋􅊎d폐dfi66jdYSQRTVTTVY[WVVVWX[`bbacaab[STTWY\fea_]\\^^`iklmkgehhga[YXWWXWXVUWVTSQV[\ZWZ_cc`\WXZ^`_]\YVUTTUUSTWVVUVVSTXZ\_b23457855677Ofa\ZXVRQSTUWVTRMHIOQPTUPNXcfeb_`cgc_][XXZZZ[YYY^ad467;>>=6Z^g3441_[_dedcdfc\WQMIWLJIIMQTUUVVSTVY]``abdfhh]HNR\_XYai678679=;;9788:::98998753343c^]]VV]bb_]`ae4cQOOPPMMMLKLQS^g23cXVUSSYa3459536733374db^^YXZ\]^``1a16;842334545kieehggghd^]\[[ZXXUSRUY[[]``]^__]Z[[[^beghig4hhffdbdda_ZWYZ]_^]]``]\[[^acb__`_bggceed^\chl::5fb]]`a_]ZZ[WWVVVXYXWUVWXXVVXZZ\]^_bei6e`ab`cdcddaab_`bda^[Z\_`^]`cca^`dk:<;>?:422efd_^`bc_\]]\`35432b`_YVY\]`26864223/-./02751//01/YTV\0341/.00/[[_11b2dff3456541``YPNNSWUUWSQPOQQPTWUPLIILPNKIKR%URPONNMKNQPNLQV[SLHEHNQRROMPGFJMPPOPPOKPMHEHLKILMFDIOSPJFJPV^deb]ZY\]]YQKIIGF?DFFHW`ZNDCCBBEA=AA=ALQRUURPMMJD@CHGFKQSQMNOPKJLRTQOSYYUVVOGINPMJMMPURSUROQPNMJB9O]^XSMICEE8FH?=ID9<@@:<>CCC;5?;99@@4766=fa_bWV`6:<@>FMD@ACDDEMVUTY^aUIS[XOTTNNRQGQY`bRUURNPQQQR[WRUX\_db_Z[]\SFSYRUXc^^USPPD>9?}zqqyrc`dfedceffhikjlstmmihhknspppsurolikoqnmkmonjehopkffjmmibckoqoosolnia_homdennjknmgc[Y^]_bfntpjghif^\\]acefegkkgeju}~}|~~tkjjosrqqljklnndSMLXagnkefmsvplnwyunmg^]\VLLOLHLRVTONLJQWUTTMHISVVX\_a^]]Z^_WRNMPV^jponproqt~z{yqa^ZZmw]WYX^c^WWVWXWYYTMIMSTPJIMRWYZVTTRT]cdhof]\`^X`wxv|FHOSRMI~|{wvzHMRTUXYXXY[\[YZ_`[[^a_^``^\\XNB><>h`9fria683877:;755\[\\dda`aaXMV\YSU^[]c^`aYU=X@m:994a^ZUT[ZPDNQbie_^b[^dje`\mr>IPU\biqod`_\^[]]biorqkgf`_]\\[ZWQLp\[kQZRJDHE?A??BB:_Zd8::87=AF?;8;AEEDCCB??A@8H,F^1]YX^_b464897998`89796563c`5:>;8534fb[QQWZ8>AA=83KM&?IGHV19FCEJJFEGLHE}se[RFAAH\S4:DS\TR@IJRK@ADEGHHKLTRZ_XG=|yxIHGHQ_XRJFJMQWOJKOLIP=MRDTXVQMMOPLGSb[TY\XZliZLP^WPVW[LI\TUUVVQQNKGJLLPNHHGGLKRJ}BBMDINUPJ}xv~zzvXix\eja_afkwg^[IOOXLNXWQD|spkfR_W{RS~tIMCvDDGE@PUXUTN[TCGQYblUI]\RYPX~Geettqyxqle]cXHBD0)JHKOMJO]PS0FafWWY]cXM\ae_ffaa[TdplqwgQNIJXRLWWQOPMMdXMSSX]moj]Qctnpg`aagGxgvxmc_bln\ONW]dyjW]W]UKCMMLZfWRVMTYYkmachZnyyzcFM[[j_UZ~liaPTYXf{pldbnprlirj_emqCrkdouzvqmq~KLcVhCJAq{FCvoo{IHzgbgwrgc[aVXeibgi\W`e^cywggg^_nvnid^`]^lzr_TTWTVYUXPLHFCCJLJONNKGABEIJMNOQQTPLFA@DGDEJMA>>:76::?BAKHFECDJLKMQVOQPA>DECE<6AA?=@FINU[ab\VPMKKHFLLFE@e9]84366\QL\nqokgef4hdZPU\_a^175232WX2366;:9?Cp\>=?<<@@;;797332c24211433a37A5ef77caadef56f]`ehfa^\YXZ\]\aa`c^UVZ^\X]ca^_^\WT\deZY]^cfgeab_a`c11220*''(*+***,.+*.,--+,+*+)%%%')*.0...,-./.121230/010/+'''()**''(),,++,-/.-,))*+,-,*)''&%&'&'))(())'')+,-./+)(((%%'())('&%!!#$#$%#"',/01/.010-+)(*,,*+)((*,/'%*)(),..0110,8)&$""#$%$##%')*)**(()+-/0112555.#%),'(.3v+)*,)'+.-,*++.0&#%&&%%$###%&%%)-,(()'%&*/.,,*))**+-.+432232121.+,,)**))('')+-,.1/-..-+ ,/0012001110/-)(*+-/-*),.-,,,.000--.,/11.0//,,..00.,+--++***)))(()***)))+*))**+,-,,-.1.,--,..-//..-+,.0/-+,-/0.-./-,,-17/0.-,,..,+,-++a.--)&(+*+&%%)++./122&&%#$%(+**+)'''((&(*)'%$$&)(&&(+-+)(')**)'*-0-(&%(+,+*('+&$'*,,*)*,*'%%'&&')%#(+-+(%'*-2530,+,...-)%!! !!$$$*.*#!#$$$%# "" "(+,--+*(()&"$'%#%'&&,,*()*+''(,,)(+/-*+-(%'*+*(**+/--,(&$"!))%$Z" #""$#$&()'$"%'" !"!!$%&%##$&(& !$&$"""&%""##$#!#'%"#&""#$$(),,-**((('(*)+)')--*((!!(%%&&""'*,,+-.*&%&%%),+'*,)&$&('&)(%'))*,***/234550-.-++)*.0-,+)*++0.*+-,-/.)(,-+'**+/1/.0/.+*+)%()'+,,,+,+(().2344344222340*,/(()**)('))*(()(')**++''**)*)()*)(())('&'%%'''&%%&&')*'((&')+)*++,-.00.--.//,+,-+-+('&&)'())**+*(&+**+-/--../3310./1/0/-03573./31//-*)*)++('%#""## %)()'%&)(&')+,-++,*%&**-/,$&%"('(,./+)#++**(*+-.35.(23232211*++$')++,---&"%'&%&&'3(*)('*('&()+,,/00/-+.430032/0012/,,-**+-./.+,-.-,,-,*+-/0.-,-.+,.--..//.---,---.12//027::6699814<42,244/"+(,-'&)""##%+1/.035,!&(&!$$ !#",288,.-+(+..-*.,+.0124/+(('&"#'&,060.'$"$"%0:/6)&!?IEQVN$+/(-0$" #+,)&$(&%'(')(((%$),,//.0.*&')()+,+-//..031037511546;88::>?>:77654;>! @@<;?;434556689::C?>=?@><;;=>?<;:;9;@@<9:<>=;66:=><<>=<=<638<<65;<88960+),1047:@C>989:9534579:===?><;=EJKLLKKKHGGFHB;;<>BBA@>>???<6,&%-39?>:;>BEA>@EEB><92353,,/-,OQW.265122-.31..*'(12247:=;875782.+*.38@B@@@DAABIPLJKG@5658HR;4659<9445554554.*-130--/3689301/08>=?C=869707HEAEIMSSNKO((-0/,)NHEDCA@BHM)-00013234665447633676565311.( /1(,*%''(&)))()+%$(%!#(&(-(((%$-.'&&#"'&(-+&%'$%&))('01$(-049820.,-.//27::95340..-,+**)':/0:*,'" '#&&%$&)'(&&$*)'"!!" #!"*3>FP+-01/.-./0-+,-+(#;62/*(.8=@B?@BA@CC=:96407<72132/-//)'#!!!"$'$+44344676:54<95696/000/,**).120.-)#1$#&896%I>DJKR-LF%-876/03,+-/+.40/+*+)*)**(&*(I%+01*$'02)%'I:8 /=7764-&K(L@;==@F<;B@CEGIHB5.(#!##"$')&%&)'%E@5)#&  ##)' !##&&F&'',*-0*??>('&I(,3.+'&)+,/*'(*&###!+..*((*+(&.71-0312>;2*-71+013*(3-0///-.,)&))(+,'J(&&FJ**NJ0+IFH##+%(UN-2-(LBCEA@HFEHOJ@IF+;VLJSYI29=:66:AJWO>56'*,0).552*KGDI@9Y.65JE0/ECI'*$@F%%'$ (,1-,&-) '+0:*#23,/(/CB%B35;64==?863./&!/,-*(')**/A-:1B<7EFDA/*1&--+,/5,6@3'&)--#%!!&%&*)&*/&)/3,-*/3-'348677340*2;78>3''%%.)$(&### "4*$)(-.6993*4=;<700.1?%A3=>8335=?5/.165@E>/4041&!&)'-9/--(-3/670383>IIEFJ:%%32<4.0F<84*-1/8E?>94;;:84D:506<:E%;84:=@>;9;B((D3,3!& 8>$":8;BH&&<326=;42/5./651481.5748C@755109@<854423:EIGIDEOOPPNEDKMNOPRUSN_aVMKT^]VZaVJFJDBHJIGDHLRTPMMRPIEHGA>BEGGR_WUVRKKMHEGKLNQSTUWVV[VLLQSQNNMMRUSXVVTRRSSROSZdaWRJHEA>>GCBEKJ?;?::?ACCGIOTQD;BF=968>?EFKU^ZSQ4PLLT^]YZWSSUYad^VNI8BUUHCDFGNTTPNNOJECFFCDIMIMRIHLMPSxPQVXSTUTST\^cfefddgYYTLRYWVTPPRTZ^TU\^^__ZTVUSOMLKQV[\[23_YQLI>>BFFKQQOOQSRSUZ^]_cededdff4hd3356999;;956964314\NMKLLKJIIHIKMJJJIMPMLLKIHMNMMMLKKMKIHIIGD@AEFIQNMPPOPPPRRRSWW[\ZY[^_[YVVXVWUSRSOQMCFEIMQZYTQQPOMNPSVUTZ`^^WUV\_]URTY[[^ZWXSKOVROOOWZYSMJIGMQKFGJGGCDKRQPPOORRPQXVGDNLXdXQPGEIJNNQQUSLPLLPSWZ^`a^\^__]Y[[^]SVQCMPOQWYV[UKKLIIKKJLNLNKMKHJOSTROVTUTTRTURTYYVSRWZZUSVTPONRUY]W[]\XSUVTSRONRTX\\Z]^^VUWTUVUY^]XVSTZ\]_hi`_^^agb_nnre]da]`GNTWYOA:>DBJNGA7<>BH8^GILB`cfql59>B?07LMKDBCEFIRTWYPNMKLQW[\[Y`c[TQPW]RW]\TQPGe4NWRTUV[hjc``]Z\X[ZJ??AKGPRBMFECU]ie;X_H7\9:50fgkg29GRFQSh==ECGMMLKKECDENPJGGGFIMTWWVVUPNPNNPPPQRUYZ^c^WW_a][]^Zab_afimrtljmlnsv>@???xushbafihfhhijjlnnmleccchhepsqolnpideirskffimmhbclqnjkorroghnsvsppssuzuqnokimnj^dfaagkpmge`cpvulhilhdaadcc`_ajljgcelopqmitzvw{~{wxtporstokkihfjimptrkecbehpvslebdltrgda[LzFJQTJLPTYSa8dWX[`dc_XTTTXTMJLNNOVekknmoijoljfege[W_chneSPQTUSTU[TQRUXWMCCMOQTTOKJNRSUWUV[TLUWVYXYZ[q~vuzFGFGJLLFFEFFINPPRRPQRQQRQUWUSV][\cfccaba`\[ZWPF==7;<9m78;<;5efif[fnqiie>@BEHKLQ\fklouvxpiijpvywtrpnlhglpmsqssmmliihgjnnihgih_\SONIFB>=ADCB?DHKLLGEHOTUSRPNJHE@;b]241af5dbc7779:89;4knS`8::=?=>@?<;:::55ggbg9@D?\PM,*BIi[gYilmid^^^ZVQNIEEDD@xnf^ZXSJJVdfb]Zaiquslgdb_[`pi^[gib`[XROPOQSRNORX_`]\X^357668:?C=AP[fc]\\]`eajnb[X\ZVYWXQQQMKT[\PIDDrUO`;BuzIFKPRJ^nd\X]UMOOPMYWZUMQPMJGLQSVQJIN\cZPKSkaKF~szG@bRXA9Yslebd\KGynmqpumwvyww~|qc\VTKD>2N<9DN59Z5CICHNFCEKKG}qg\PG?>OZ=:LTa6f]nILQNAEICPLMSPRQae]P@uIFDP_c^KHKMRRNG}IVQ\TINSUX[YPLO[XRT^\TY_ZS^jeOEONN]emcX]UXYZWMHNMGFMKoKE{KGJKGDMLMFKZKurs|qxyNRSEskkvrriebXd`Nmwpfzn`^UTWSOGA_`YBN{Iy|beX_uDHBEF:Aw>HVa[WZ^[J=F`qwiXJI\ekdmwlpqZ]ki\OiFyha[_dXWR5NlEPWI=DOMN?sdaclgealjIP]YWZgfYW\j[zFJVRW_RDF?@B5@OJMQMJPOTLTXJHOade`bKTXRcorfi]W[ebd`Y^`ZbNESXXOJF8BZ_WH=8:>HOPOMNV_L>HHDB;;@>3Wd8?J^cbmf`RQNQKQ\_WP@eR765442[QHSkoolgccggieQUX_a]045322113566=;9=@48<9<;;=?:>886431`2K31cd4eeaafgce6874dg56674b`abee_]]ZZ^]Z[^]`a_WVZ[ZXZ[^a^[ZVTXdbac^^`chfabb`e432221-/0,++,--/-+**(()))((*-.0.-+**)*('),-,-...01.v,.134-)''&(*))*)()),-+*+*)))(()+..-,,--,+)))(&'(***))())**+,-0--.0-,+)'&&'*)'(()'#!""### !&*+,-,,**+)'')*+-/,)'F()*-,)'('(,.--+*))('$!!"$%&''')++--*)**+**-./1321.#)/*'&(, d)&(*,,+,/--.+)*,)(+..)%&&$#!"##"##"""$%#%')(&'(')-/-+*(&&').0.1011/.//.--.,b-,+*+,+)*-.,+,,.//../.++.010/00/1330/,-/100//.00/-./-))+,..--,,*,..-,,//-.-,,10,***))()**,--+**,+*(()+,/1221///.R///0/.-++-0/./0/0/-...,-.,0: -./.-,,-,++)),/,**(*()'&&&(*+'&)()+,-/'$"#%%'((()))*+*('&&&%%'&%$""%*+(&'&')))*+*,.--,+,&&+1/+(+*'&)/1/*)*+,((+()'()'''( $&$'$")('('"!(?)+)$++$" '/1/.1*$#&##(('$"&)--+)),+%#%&#!"##$)1,+.,()*&$%'(*,--,/,'(,-,***),/.1-,+'$"!! "$))&$ "!!#"%&)-+#"%   #$$$###"$&%#$''$#%%#""$&$"!$&%#"#!!!!%&(.30+)(''+21..,**-264.)$"%" #$%),,)(()&#"$$##%(&'*%$&&),+,,)*--)*++**/03312114./,(-2.-,*++,/1+,00023/++*+)('&*,.,+.-*()##$$$'+)(()+**+.002343244323.)%''())(('''&'&&(*'()(*,***(&&)+)()('')('%'((%"#&&(,+),,**)(*,,,..10//001/.,+++,,,+,***%'()+.44.+*)++*,./0/48650-05752./2667521-'(-+)*)-/-*%$#!$'&$%(''#$'*()))(**()..%#*),2*&'$#''+++*--)*((*,.///00//00/./011+,*"'(').-*.*%$'$%('&')&)())%&)+-+*/-,+**+-+-00-,,/22-*,+)((*,.0-/1/-*-0/.-**,-020.000,--++,,/21-,*+-//05622126:52=>B837413!')'(# !( !&)*1/"!# !$%(-022+)(%##&()(%'*(),,13)+..*)+#*&'+--/75100,'&#&(!#$&$',/05:(0"&/`[ZS'&+-'-,; &$&*))'(&%$&+*'&&'&'(-//./-)()()+++,-/32352-/4531232785567:=?97778>> ! !?><843789899:;;<<<==:::9<;8@B?><>?966:@A;88;>=;78>?=<>???=77=@?><;<=@DA?:966::8./2+(+07;7747>AB<:;<;877876566=?><;:>BBA>;CMIDCDFGEECA?ADDB??>=;;:;>AB?;99;<@CB?<::?CB<963,LMNRXYTST*,RL.3-,.0303?335:=<9620030,'&')+09??ABC>=A?@X?>=:227:?B<224531157312464-(O)//26730..00133262-45255346BIEBDJ()&JJ(*,,NHLKLKH&&&)OMN(*./00/00/120038648:9977531/.+& 94,))*(%*/0+,*,&)*&*("##%$+D%($!!-+#&(''#$) ""%,267:>@@=987:>@@>>>=<:9<=:<:996665655466553451-'$#! $'''$##! &$%))&&20 ***').*/)258531453/,+)'('&$C<60-+(#&-576315:@B?;876526>91/8831.+)'$""!!!#&'&$#&(/740223596;>63264/001,.,)).22*&""=5#& ;@('IOT+/0KG'4?92.1-(*++)423/)--*)'*--0,&%(260*&+>6'&D<=$* "'@;76:5(J(NB:9<&*0--,!!)&)*(%(%'%-%#'23420%.0)5;;350/36251,02.5*"'(&,/+#!1790*)3;92)/;B@EB9775106=3.4*,13;CB8518-##'$)/.*8:0/+0624787;9CBB?642)-1+368=7/0+*+78141/26;;:DA/-3828H<518!&'8*7&&#A!$"C=7=BFA!A;.3215262+4914/+0266;9;<>=;<===;;<<9883\TZ\]\\ZZ]`cd\UWIYYXX[aa[WTQONNPNHGHHFGJJIMRVVRRTUVZa2212dcee23443c`^\YVWZ[[[^b499775567764ff44geb`babeedb^^\[YXXXZ`dg5hccdeaabccca^^_bcb^]]_`ccbaba`ceddb_]]^^__^[]^cb_][Z[][[\^`bfhgb^^]\^aaa`_^^]]\\\[Z[]]ZZWZ]`ch7766hcLbdefddffg55edda^acaccabbabehfdb_b8;988:74gi6nkecbaaccca_`^ZUSSVZ`542122122/]/A\0586210]\\VVYXTSV\0.YVSVXVV\1352a222342330\WRPPOORSSY[UPOW[\[YXSHFC>?FMOKKNQSPNMQRRTUVROQOJR^`ZUVWTQORZ_]VUUTMHMNMQMJKHHDDADNNIHCACFJKICKQMNPRSWUVf3Y]`24gceb\QCAFJMHGGKSYZWTQSVPFKOPLIIKOWg5YZUPKIFEHMSVWVZYXXXYZTKILOOJIKOQPPTUVSPRUTTWUVVQMLGGJC?IF@HIGF?<;7:;=???BEDBABEIIJHD;9ACCDBDFEC@@BDDCFD?>BD@>AITXSNMNNQW]]YSPSZPECDKQJHEBGHGKORMIHHC@BFJHGILNMOKHKKMRQRSSPTXUWZYVSXY[_b^_^a]ZMDM[YVQNQRQQUPNTVYXVURTRRPKGAIOTW[bb]VTQNNIFDKNQQONOTUY[^_]^`aaaggec5436:99::9;;:8852/0584XTQONNKLKJJJKEDLPJHHLNLKLLKIIKNPRSQNNQOJJMKGB@CFHMOLLNLPPMPROPSVWXVUVX_c^\WUUSSRTVURNJFC@JSQZ^VRQRRQQSX^ZVYZ^^[Y]de`WQPTY^a_ZTUOPOLLMLQVZUPKIJHJLHFEB==BJPMOSUQONNOQOJGROV^YPNEEJKKKMQPPRQRPQV^acijga_\X[XUTUWTZWSSPMMQORWRPNMKKKLHKJHJGB@DJORRPOTV[XSSURNORQNPPSXVSRSQPOPQSVXVY]`^YVSTVPNQVX\[[^`\ZYYVVUUVZ`^XVUXYY[^cdbbcaa`^cmfivif`\]MIORXG>AGC7FGOC4?AC@6CNQKJEFACA=;>GC=9BLOIFFHJKORVa\RPWRGLLQUVZ`_`XSTVPYaa]YUF58H]YUTVV_kkphdY]VVZVF60@QMG>EEA;hA??mW5?G4:b-1gcee2/=J3>FH]Web5FOWQHGIFFONJKLKJJOWZYURPNQUWWWZUSTS[``de`\[bigicY]^_aabeiu?==xkhm=BA@>==z>wmkkljgfimmrsnnlfefelpfemnid_bfjls{yvnkmlkhb`cdghhfhmhdhpollmnlecfknqsljlmgPQc^a`inlighljjpnmlllmkjiheb`]cjd^geeknkhehklmloqsrqnmmsurmihfcaadjmkgc`bca`dje]VKNU\age\RNPNNz`bINHFN[c^JGWZZ[__WRPONSURLECDIT]cilmlonjghh`ZZ^jumdcbXRTTWVVWYRMNNONIMLLNOMLIJV_bc^XZXWVQOQQS[kqqlsy~|DFHHHIMPRPRVVRPOLNNNQROPONMJIPROPRQPQTTTUYYX\_acehgd^[ZXVQGDB?>;kmm7k9<=>:;:o[fphe4>?<97798:;@B?973ad78g39:6d:=A?58@EEDFIKPTUX]eopkggiigdcbaeijmjebbbcdfhb`^]^bca^_`a]XYYXXZ^abYXYWMEFFFHIINQSUVZ]]^_^[\\[YRIFB>:9;85889s;=?==?@><><:e\6:77:==;??<>B@<869;>?DHIKC_==Me^eb^\ZWTQSTQNJHE|xleec^[XSLKMPSWTNLPT]a]ZZWTTXcdcciha_YPLJAELHECELW_`\Z^125778;>@AK?[`3>GQSX^[ZTTNMMP\b\W@I6<62672WICLgklnnjifgil^UZZYX0n24430/256658889758548:;;<9::753442c43cdggedcdfc]eh687gg55432db`b5f]][Y[][Z\W\^acYSWYY[Z]aa\XXUSW^^[\_`edabb`]`\.03210.-//010011/,*'&%%(())*,1//131/.+))'('(**))+++,,-0220*((()+(&&$),+)))(((&'*+.00.-+**+,+)*---+*)(;)*,-//.../-,+*,.--*('&+/+(()*()'%&')+,++**)(()(&&'*+,*('&(),./*$%*)''()+--,*'%&%$##$$%(+-000.+)++,+*+--/13422)#'&(* 1&$)+++*)(*-..*%%&&'')-.,*(%$$%&%"!"! "#"$'))' &'*--../,+*)()+++*+-...0/-//.000.,--,+-//11...0...///.--./10--,,-/.-,,-,...//..---,-,+,-10-,++,,,+++,-010-**))*+*++,,,--+++*++,,+)'),//0100110./10////-,.0/0/.a/.--/101//2//21.---./000.-,)'&''),(((''%$&&$%'*&%$&('),.&&%%&&%&&&)*'%%)++*''&!"#$#"#%(&'(*+*)(*+++--,)))'*00,)*,*))*/11-,-+(%*,+.+&&%$"#$%*,('$"#%'('#&*''*+,-*),$%%012.*'!#'(%$$'+/0--,,/+$(**(&&'',4-.--)'&%&),-..0//..//,'$'))&'(+++,/./-)(&#!###$"!"  #&%%&'**!"%524! !!"$%#""!#%$&%"2#$##"$%##"!#%$#&%"!$%""#)/0+''()*-22/+)+0("!#""!#%!p%$$'(*'&%$"!"#'%$&'('(&$%%(+)*+*),-+,.-,*.-.10././.-'#*3.-*(+***-**,-.--+*+*))'$"&)*+-/.-*+*))&# &()))((+,./00/02 4532$%%&&'%&%$$%'##(,'')+,+)**(&%')())(''**''*)'$"$&'*,)())+,((*)),///--./351/-,,*++--,*&%%$#*2/381.-..-.0373/23564258:72--)/37984..*('%&((),,*&$#%$#&$#$# "&)&(,.+)(&$*),1-(($#'(('(,++,++**,01256522/,/.,+,-,/-+,*'(+))+)('&&(((%''&('#"$(),-+*--.,)*+-++.-*,+,//-++**))+*,.-/132/..01,+,./1//00--//.,++,-0/--,-../24443445524:56B72/,-$ "#&$$%! !$$%%&((+.173+)-( "$#&*-1.-/-&*,--+* ())*+*.66:61''""%$&!1!4*$*!<$4c[XU'"(,#%*5/74&+/*%'(&',)')*))(+/10.,*(*,.-.1.---25578510588:7144576679>" =769!#""! ?!?:9:;;88;==??;=<9::9>@9:??<8579:;AFEC=;<;;;7788::88:<;89>>:99:96458;=>;:<<7)%/(()3;:98:><;??<;9:<=;:987769=:3<<;>?<<=>?@@=?ABBB@@@CDC?<::9889=@><:9:987:?;52)*056873/.1/-WQQNMQIF88,0,'-574**34436851.,+/0+% #.68<>><@@<:=>9547>D@88:4133566550./00-*OQU.-.11//-ON5.589:838854200..1=@A=@DFEH&')**QNPS*Q+-.,-01.---...//.Z-+)-/,-.-++-../01036776631.-,*(% *,,(,&)-)(**)(#)+-/49:8899:75788::8789::<=854337863334100/../01/))*("#%')*,-,.//-...,% -(%&.=K+///11/.-01/-*)'FC@9773.+(&##%&(,,(&),241/.--.066459942/'" %((%$%"*3701001167<<4336/,10(11)J&,,+'HIH%%+!7)JJP+*QK&',48555:6*)(',2/.))*+++,3021,*,03.,)&08+&%&%(&B6-#5D<665.JKI;35;AD@A?>BG:9E=1+&!&$-###+(C"&))'%F=2+$ !! !#$$$!"*()#$$$,)&'/+-033/( #GBD%'08<7'$$,,+*&!(./-,-1+.6250++0/+)/41253+,;D4G-28;9A@5-+4000,**.(%G%%GA5'0";BC+*J'.2/,.,0,H(0*MHEGB@<>;145340,8=:42DGIA1;><301;3&,)72531-LJLD:2+62CO.?+F>=&**8A%(1157857.$ "3?940*%18-11%,)(B:33//30/*()% 2-<#2,*-99768828CH@-*8.',573&.6'9+20+.3)!"*&*#$*#!+$%,3?/)277:71;3%#/-52/04=G9($" !5=$0 $/2+(+02.4"(>6<;52:63-/5.-.))49/29543.-)')(*/*+1;<84268;:68>;>511,9=**+.:632//0&-/64-(,'-02<>BA81/07;:<=><8< ;531,-5;4/3768/&.6.5;DL>8<:FOK;@>8:2+1,),0-+.<234/*+*/&#'(%%'&(# "##&''('$$!($!%%"!! " #!!&#!"!$%$# &,0"&%)-)*&&$###(+(&'#"1434431/012+%(('&+,./0/.-..-+/0.-.-,.0++*+,,***&)*,/(%()*++-01.,,)(*.-+ -.030./0/-.ހрŀ~~}|}~Ā  ɿļ^½삓ƿºųɴø膀ֻö̽€IJ¿¦ſ½úºŷ׀얛󁃄Dz¿ſĶ½ƶǿ¸ƻĽ׳ѹ¨¡̡̿ں݈񺑍̀þ쀅ſۀŻľ􁇅򒀞Ǵ׈󑟥ƩŸ»¿Ȭ³ƞд¹񟀿ʲ񂄋񄁅ƳѸղοͶ˱僊־ŷ׺׹ɷɺ϶Ǭ檿Ӷ囝ԨƿẤDzݼ±“郏ξŲĺҥȻȷ´±Ƴı˭ʀеҨѾľʾϧ獓ʲ؀V[_bcfe`^cgihgea^ZURNMPRQOOQY_`cedehjk6ica\XUTWXVSSTSTSV^c`aigf8:ogc`YXWTQOPQSSTUSQQPSZab__^^ab`^ZUVYYWV[^ab`^[[\ZWSSNNRW^dfa_]]`b_^^]YY]]ZVSPOY^\[\[ZZ[WUUXY^`___\YXWTRQQPRVZXUTTSPMLJLQSPQLTXZ\\\YYZYWVTTTRPNNMKLMNQX]`_`bfj77hfhgedfg4689eSZ_2675567;=:88::99\;9:8663132\\aaa_YVUSTWWVY[\[ZZYYZ]^]XRPPPOOMJMMLMONMNOQSSUVZTOSWYYY\abaed3444e`^\VTVYZ\[\\_g6*776677765567543befeehhda`]\]]^[[]_bea^bbcadb`][]^]\YZZ\\][\]^_\[YY[\]_ahjgb]\]`c^]ZZ\^a\[]`feeecba`__cff5ifd`_^]]][ZYZ[]_][]^_abccda_c3e44432bcddaca]_ba`]]bceggghgek7;=;<==9787nljic`addflnkc_[XXY18:5100/]\[\\\153\/36402210/Y[]ZUNQW]00]YZ^XSW[]231`]\`2210[WVW[\YVUVW[]YTSTY[[_caSLMMIC??GLKHEHLPNNRPMMLLPQQOPTRTVUROTWYYSTV\]VRQMJERWNPMLJLMMOGEJIDEHHIKMLIEHHJPRQVXX^10[ZY/4VKb33ZMMW^[VY\`_`\QUVUZUIUVTQMOQ^75^XZPPB@GLQW\ZWRRVYUUYTNHEJOONMMQPMNRTVTRVWSQSQRNGHKJLL?AIACKDE<;?76=@8a36:B?:9=?=>?@ADGIKKJEGHA>;?CEIJFHF@BKH>DEDBFFC@:DSVYUUVUST`d\VUWXMFCEHLIIHFCBAB@CFEEC@BDB>>CIFEHIINQONQORVPMMNPSXZ]\YUTYZX]_XW[^`^OBJWUSONRPLKQSQRQSRLLPSVRNHDDFILOTWWWTRQPRNHFTXXZXSRVX\_a^]\cdb`dWefb\^a\:96887787775/VW/13fd``bZV[WSS\VMDFIHGKLMPOLLMLJMSZ_^YUQONMNLIGDDEGINMLMLLOSTXYTQPRPPVgh_[WWUSWVVUVSLJD?C]VHS\URTWURPQ\c]XZ[^a_aggf`ZXTPT^`YRNVZWLIKOMMQX_YMJKFFJJEC?=?DNKHLSRNOVWSONLHRTXXTMHEHJMKHJLKLRYZY\]abdghfde_SZZVRUVTURQTTMLMLPVWVWROMNOLKJIJHC?@HKNQQRXYXVTTUSPMRVTTPOPRTWUSPPSUVVWXXW\^[RMRSMPSVVXWY\[XYZVUXTVTWZXYZYZYW[_\Z^bfcec`^YT?W_bb[UXQSZ\NGJNIADKJIJF?GLBFG<7EFICABC@KMIG>?IONNLKLKPTX]`ZY[[TTPPSVZ^`b]WUWRV[ZZUMACLUea_][TFahpmfZSTMNQL>2GCVMICGD6^8r=C>D<,QN@@3b^Z^0O0IPLA;NOS[Q9HSVSKJJMPNIJJIGCFOPQLEHOSYacdg`\XUV[\^dkmgefadogb^\abdffgu??=xoil=>@>vtqrsmjjopnmnihntkeikmmgeic_dmlhb\_gnvzwqikrpiefgfgigcbejokebcdbhql[]ejlnqrqlljflkcabmkgddc]UVaiilmlkjkmqsrokhi^\jiinqnib^^_egiighecejhfhkiifdffb`_a_dje\ab^]XSV\^^``WVWQKMLLNInTWY[Z]bde`WTRVXVV\YTRNB>BCQa]^dfb]bbYY`a]WW_goukc_`_[ZZ_bYQMT\^[TORSNFIOX^a]VT\djh[VTSPOOR]knonqoikt~~}IJQRRPKKMLIVYSTQMMSZ[YTTWZcgfefgijigdb```_ZVPIEFDGEGEDD<@HLOOMJLMHABCBB>9@@@;7357i5A9:;Y5<HONPNNMJG?Xf?DIG<1474b><1]?C=?@EIIMPW[\^`XV`jmi]WTSROLLJLLIH}se\]b_`bba]TNJJLMNMHFHMQUVWX[_ZYW_hf`\[[ULKKLOLIPTVXVSSSX_01225;>=9735DXca]\_a^[_esdYYX[VX]OX]SGIRTNRPXQG?gL=?pFLMK~vIJU`_begreXTPT\\\PIHIJIQ]]USNT[^aXRNIJU\VNPNKLLE|=5VFQvbWXYQreblx}jmxossm^m|cXXTNHOP6YXJ`d\e7>HD@ITGGJJGFFGtneZOPPRSRUYYX^^UWH\Y`VJFENGJNTST]bhcTF=t{CBFDM\e_LGDWSNJKMPTWSY^aY\fYaZNJIPURTbcZXXVPb|lLHU]enlb]X]iZSPT]SRGHKzwEKEz@DJJIJT[YNJKNRNHMMFJMMxGEGuwpi_X\[UIQi}fiyzxwnWVgjmTU`^TQ_XnsncVFadWq|CknAED@ENS_fnzzkfXZ[VfhfkeZTXlxfrr]_o]TQC?5WjaXim^ebcZVTI?AV]BAWcaSWZYgdkkfpvwspYRLAOjkmoXggV_ZRTfdSAHJ:FUTTSOGFJFRg=>?bAhDJ_~yVMmh]YVcv^KMR\eh[aes|bWKIMCMQJHLJHIymipxrsxwl_TS\htrxbcmhUR`Wfgrkho{zs[lzqTRH:TVULX^`Z]^^WX[VOLMOMOTXUONKMEBAMTTQNKMB;FND?EJND?EFE@@>?978:??;>=;8JJGCEIIHGMN924552+,,% !''')*&%'&$$)'%"&(((*+,-,))*)&'(),,+* +*('%$%&(,+)+,+,0-+*)*+,++.893/,,,+--.,+*$$"!#42*05/-.0/.-.6;62236989=<;8420-/783.(-..&#%)('(*.,%%'##&&$"!$)'%(--))-.+('&#)*,-,'%%&'(&$&)(R(+01/10222565441*//-*+,++**,-('(((+++-*)'(*()(')($"!&()+,+..,+*+,,+*.0.-+++-./.-+*-!.01011/,*-.**+,,--.//-./...*++,.-.25112365662.'&)-,,(&*'(+-&#%'"""!$! # !!" "'()(())+/245101/)'%$$%'+-1/../*+,++)% "*)+**& 25;80& $! !"/6! % 53-?3^XSR(?".1,%",+-2+&+++('(*+*'(('&"$*+-*%',,/4678530//1258;;9:957=9753578866?"" ?;88 !" >=<==:9;=>>==;;>@969=@@;:<97;@@=8459>BED?:<754426=;237;>>?>>=;:796003<<8743.*.5;9:::;===>?>>=<=85=<<>><:8777:===<<;99<;<=><<::<<:87879=;479751.1797772340,,-QO,-)KFDG@HLP352335:::5110244384/-(!+656;;979833:;82169?FB948:888:<60.39:72-01-SLQXX,-0:<:51059<:4321/+)+2:>BA@=75;DJLNMKHJLOLMJDBFN))-.//-/.+(OMLMLP01--,+,05640036;><::;999863121/.*%"  "%&&$"" + #'+/145789::87545664//2359:620257984/01-,//.13330,*)(((&(+..-,##&+/.0333445544531)! !#&%&$$$"(&,' #%)*+,.*(,232...//.-++-,+)KF?5-/2/1-*&#!"#%&%! #&())(),1/-+098631/*" !!!#%%"##$%.20.-143258A70212.04+25/(EE',.G*-+/)'?(P++)FAG)'.65689?5-*(-333+'&''',43..*-233.,)&'.3/(*(%((#7 *B5/23.MJ:1/4<@5:C=A?;2=G2(%#!!!#$&!%$" %,$A%'(''&%B81*#  $$#%%!$!.+1,%$$*&()--,0274(!9@$C$%$+4:5(%#1-)%&)*-.*-03.07.40*(&*-,-67211.*7J>**37:>@9504=0++.2+-%DC$&DA?%*$@#$)*(+185-++-0,'++'(*,QH?GE&%&D@=>961/21.),=NEF8:EFLBBH@218;8+0671/:7K>CB<4M(:QW?4AE'8=%''$%*+15781-*2=-%'*065-27BKC2+#%32#".67228!()B5895392/(-4/,*%/4,%,/.2330!$*,05-,1762-@B-1;45I91-1-/3.,-31-+020+,3,+45-(--)345;G8:<:26>86469=?=74:<G>:CGGFDEGFHH?<;@@:;97<>;=BBA@<;=BEGJHDEILIF><@CEKFFC;=PP:8=BECA@?<@ILU^\YURP[ZPPRSURNOMMMNPQJFCAADIJIGDBCFEBBEEECEGGKPQPNNPVQNQRRRVZ\ZXWVWZ]]YTSUWcf\MQQMLLMPQOMOPOLHLMKOPRUSNGDEFFEFGJOSSRTUWTQQVZZ\[XWYZ\``XWZ_e_\_bbc_]bX`3a`12356642[VW][/353a_YXZZXZ_d`KCEFHJIKOOKJLKLRW\_^[UOQRQOKIJEGIHJKILLKKJPOS[[VONMMPPQUX[^]Z\[XVUTRVXWSPIGGGMRROOQTTSPQVZ_b_^_accghfc`^WTUVSNLNRSNIKLNLJMQVPNROKKKHC@ABEIMKIOQJGMXVSROPTXTRQOMJHJPROMHFINS\dab^`b^[VQY[URUVZXZ[TPQLJOPOSWXXYTUTPMNNHLJMLHE??DIMOPQ(XZX[YTSTTRTURUTRQPOTUTRRSXXUVVZYXUTQOSRQSRRUXZYWXVVUPQTTUVY^`]ZY[[X\_ggdggaYT\UR]2b^[\]\_^ZZZVSRPQRS]YFMOHPMA2EJMQNJIKRRNLKNPSPMNQTX\^acdabce`]_WY^^jmhbZX[^cf_ZWTI>FN\]awd]Z[gip:7`^[ZYWWNF76HKB;>F:799?JR>VH6%-8l_WX[UD?CR+nCHOVP7U;HMSRLHFFFEDEE@;>EGHHEJSVW\`_^^\][WUVX[\]^``_]acceieccglruy>=yw<=>;79=DA@=9BEFGCGKOV[bcfkopjb\]`_\YXY_^ZYXVWZ^^_ce`\XXZ^]UUUVWNILOMQURTROOPONNNOV[[Z[ZTPUZ\\\^`ba^[YXWTSVTQOLG<28BGJOUXYXX[^[YY\`\WXVZ_efb]UPQVSWVQSWZ]_afgihgfba`a_\\XPJGGHKLKHGFE|vpe`djifabd_YSMKLLLFBEILNRTVY_b^YUdh\UVXYXXYZTSPSTRQLMW[_`]035:>BB<0230Eceb\\`a_]cem_\WVUSURP[SLzM]VSYZ\YKt\Wa^pIOOKvyELL`ib``hdY[VPS[\SJJKKJJY]TOMMPUYXQPNHNUYTXWJLOJEDEBFZfaTVXXOtou}{toslfnljorbSQSROPUMES\c22c55WUQOk{jjg]TkmVSTVSJKP^c^O>SglnbkxqswkCPaMDkplbK=@VV^QW_OFDJTRCQa^lnRFHZiX7?03M4=KRW{jUQSSOI]fe\PJNWeiaYiqiXTIQKFBUkQ@GKJFE@;:9E@>BA:g>98AI?CFFEADE=5@@;5>GK\YQOMRTEGKUh[^cVBf7566771UIDE]heghi8:5b`dee]V^bY[21\01255253567641588<=99899:8889554353d3ccfAeebZ\ad65cc32223443eceaa`ac``^[]_]bedb][\\[]`_\\ZVVUTUW\_`b^[\_]]/.-+++.../1445320.,)('&'((+/00/./0.,-/010/.-+*(%&('%()*,-.-/.,++,.,(&$#&&$"#%(+./+)()*+*''()*+++,../..-,+,,+,*)'%$%(())&')+*)(''()()**'(**,-.-++*('()**)*+*++))('&%%&)**)))('&%$#%&$$%&''&''()()(&%$$$%&'*./.+*)) +*#%(('(*++---)%$(++(&&&())-30*'%'+1-(&'('&&$$%'*)++)(*,$--++-.,,-*),110//253.,-///-,-.-+,,,++-..-,-//..--+,**,,*)*+*)))+,+***)),-.---.0/+-./--./0.0//.-,,+***,.//..1/+*++,,-.--./1/..--.///-/1//00/../2452.,*,15643,*<)()(&('&*&())()()-+,.+)*((+-/0/-**,.-,+)(&%&&#$()'%$""#& %'(+*'&(+)''**(&$&)++,,((*++&((*(%)+&++%)+,,-+-,(((*+)(()('%'&$(*('()++,*("!%"$$0../.-/0011&%$1$(',.+'&(*#%"&*.1011,)(+-++-+'%&)-,)('*,,-/./11001.'$# !$#  $%&%%%"""!! ! "##"!#%'%#$')(&! "#$)&'% !++K "%#"""!$(*/30-,+*0.()**+)'(''((*+&#"##$&&%%#!"%$"#$$$#$&%')*)''),(')***,.0./0-+*+,45/'**'((()))()))'%(((+*+-*'#""#$##"%(*))*+,*((*,-//,+-./21+-.240.02230/0+---$!"$!%%$$%&$%'+,$$&')***--)'('(*++,,++(*,+,)&&#$(')*)**)*(+*+11,(()),--/0243010/-,*()*(&&#"$&*.-+*+,++*,03697567;;=><9761/12.*)*,-)$''()&&&(%&)(&'&%# !"%')(&*,u'$(.,**((*,*)))((&%)*('$$&)+16440031/-*/.+*,-/--.*()'&)*),.-,-+,+)&()%((**&%! $'(***-.,..++,-+--+-,+++(-..-+,/.-./31.+--,,**+++,-.,,-..,)*,.10/--/1/3375454/(#'$#(('),-.0/...++***+*0-"&&"'%!"$&)'&##''%%$&'*)')*-1434676667301+*-,5752//23682/,)! ''(*(),48<'&#""!"f$!%(')($5fZQQOF5,+2B'(*0,/ &)-,(&%&&%$%%"!&''(&*///253432320./2433344556889:7667:>@B! ?> !!!@??;88:99:9;=>>A?:;;<<;::;;=A@=<968<>=;87=B@;9=AA>=;:9897410345;==>?=<>?AB?=>?@?@?::733/0-(),/5<<>===?@A=8:9:9;==;:75521378889:9877:==@?:977:9:6158765248:98463+,-,-0.-.00,/94,L?T3148;AC<689558>=<95640.017;74259:769732435767=<>DA:5789:7348;;:4457980VYYZ-/4442200245751.,,08CFH?=?@AAFHILIEBCDGIKKJLNNNQRS,..XSKLLLKM*,/358769:=<<989:=?CDAA@=:7:8347779731100331/.0448::8520.* +)*(&%#  %*/3368:;74347530/275431001455897522464//123,)+-,/1..-+,,+*+++131/.,('*.100333420///--/.,)$!#%(*+,,/1.--13/,b---/110,)&'*)*'&)+,./0236443224410/-*('()*++)'''NNLDA;2.031/+,-*(&"!"##!#$%%&)/1/,)492.-,+'%%%"!\ $%&&$241.0443389@630/.-.,+3/*KDF+4/.1220$0##**8),+'NL<=%*(4;644:6,/-+-22,'()13-,,*,/1/**)'+/0,..%(+'" .53-021,LE;69?>:9<96=<:>=1&""" "$ $&$!#!$)(!#('%%&''%FB8+% ! !###&*2:2&!#$&+/.,-0396*#<<6023250-+-/.)$CBF'&II'&$C?))'*,494-')-/'&--%')NNMN(M&'F@<3=?:62401(AU]VJ8:GFEIFD=8698@('1/'08,C=:9>:O,CO<1>;DLA=&@:%').018A:553;0-308>51.8CA3-4;DN8")*(&7@5762,89+,-00)(+24/( +88:48B??=N;"*5( :985*!!1.2(*/&!!%*+$+2089)$%)+&"&-C7+..+)$-44-(&(-562.8=I9/* !&5( %%#$(2:4009"'&F<8><645.+//--.+-**24+,)&94#"$$/1,00//5)?G=36633.'',+/2..+1//+*)4*)5+1622.22*493:B)6@??:<621<>@A<6138;!"!('#G)JJ+N=766<=>BC<42+06:<@7-<@5&*2=LX`cTGEOHB9:732:315 $(+$(0445361/+**'&%#%*')(,*(#"!'**'''$!#$!! #$##" # . $ ! ! "$+)$##'( !&0%(+$('!,2/0//.-/..*%++$ %$*.///./.*+./-,.0./-..//-,*)*,+..-,*(+,,.0/.-*()(())-/./.,,-,-߀ŀ Āހ~}}~~}|}}~~ƀ ~怈 ½óĿĿ¿Ŀ􉏁Āϼ˳デ톀䳰ǃ®Ƚõ˽žÀȿþ»рѢ·ŭŻÿń¾ſǼǜĿý¿¾ƽºҀ􏏉ʝ鮎联ق!üþʭƾ»ƾƀŻ¿ƾüǾȯŽ̹˾ĻèɿŲ̸³½ȯͲƠ򇑄ܿïȸ􌏍íԑխȵǯὣɹȿؾԞ˳Η򺷈᳖շ»ٟлεۦͼˬƯ¸º¸巫р􁇂ͷʴހǾʾŴżž󍛝ɺɸ҄ƭ茏;```b`\\]_emnligiga]YVSQQPSWVUURORUVXY[_db_]]\\]`ehihb___]_a^YVVY_ba\\^^[]\_^[YQJIIHFIPU\^\[[WY\ZXTVUUVY[Z[]`bca_^^``_]YUSQQPNKLNQQPOPONRUXZ\Z]ZWVWXYZ\[[XUVX[[Z[\^][[\\ZYXX`fd]XYYXWVUW[ZVSTTTPNPRTVWXYXWVVTQOMMLMOSUY]aad46899877876423454b[XY`bb`b1012211222345412443325542c_ZVPKHGIQYZZ\\WVWVTZfc]VSUWYZZYWVRQQOPQPUYTSSUWZUUY\]__dg444fcea^bcb_XW^```accgh5:>?$ACB@@>=<<:98776642dffgfcdeed`_^]^_aca db`a_^]aa_^[Z[#YXXYYYVTUTUWWYZ]\[\^aaaddegeedd56hf35767l587864geeb``_^\]^aeik764c\]]_`_`ab`_^]_ba^_`aabfieeijjfehk:@EGEDB=635433fh9:9jbabdh56664222_^`_\]011a\[^\WUTVc8731\[\XZ672\^c0ZX\0.VUWUUVXY_21`^340__^b2dbba``_`2341^[XUV\acaZZ]XVUSPIRgi`SJJPPNKMVWRSVXVRQSVXYWXYXXXWSPSSNHKRMJMIJNUWTQOROPQPZYMGJONJHKKJNONNNRUX\[ZYVPX1\@R121[0U[-V3/RRUSSW[be_AFT.Vcc^RLKMRYRIFIKQUTUWSNOSSPOPPJHJQXSMNORTTXYVXXUQSXXTOTWZWNIIHF@HEGGIE>ACCFIDDDCEBDKIA<>DC<@8f:@??@?FIIHHCADGHGFFGGFHIDDGG@A?<>AE@;=AB=<=>BGHFIU^[TQRWPKLPSUVTSPQSTRQJGFIIFGIJJHFGHFBCB@DHIJIKMPSRQOQQQSTSRSTUUVXWVUX[WWRONY_VRSOKMNLNPPPNIMMHILNPMLPPGFFGGHGGADLPRSWWYZYWTVYXXXVW\aaWQVX[_ZY\b]_bfaa`^YWWUY_ac1_ZWW[[/353/[WTQTWQT^3XCBEGGHJMLIGGHPVVWZVSONPRPKJMSPJGHKIJLLKLOPMOZZURQQQOONNRWZY\\\[[ZZST^bcf^SJKMKKLMPSZc_VUT[_^Z[]]`aab`\WTTTQIJLNQNGGMKKIKMGDILNOOLLIDABADHIJFFJGGKOQQMKOTWUSRQRQHDPSTUPLKOU\`]]Z[_^YUTUSRUVTUX[ZTOQNLOQRTVUUWSSPQMOOJLLLGFC=>BJKJMOSUTXYSSVXWYXTUVXZZQQUSPQQQTTUK^ZVVXVUTWXVUTSSU2WZ[WXZ[YUTSTSUW\a`^ZY[Z[`aefgh`[XVab[`32`cdcb`^^^[XUSW[^ZYZVY\XUTOORSNMRRQSQPRUWUOPQRY`^aac_`cedegdfijqsng_``XXhb]__\SNLPT[^_]_bghkcY67321b\VSNRTJ`7@=98:DIQWG:5;I=h^WZ^SIB>ZNEAJQXjo3;_9?FHGFEEEGHIKHDCFFEIMORRSUXZ]cbef`]YWXVUYXTSUWY]_fikgfju??@<;=>@@<;<=umnqmjlljjlprsomnmlpoomnicghkf_^_^\[^^agihhhjihjhgfhea\X_ddikjllmkjmovwqsusnkqcUhbccgmjg^VV]dglqojhgiddeeaY]ckrstxrmjortrjihgefdcc``fnx}|vspkikljh_Y[][WY]`chgd_]RJNSW]d`aa]^^aheaYPVb]\abjmnic_ZZee[_dgmrrjd\\a_XQUURT[ZWSSUUUWXZZRU[WUSSV_gfca[YVPT]``gl\QNJJKLPSZZYY\__hj[VTXj|{pgloqu{|}q5mswu~KMHLRNMw|KOTVZWQTXYXWTSQSRSPOQQSUY^eefe`\^bb^\][\ZY]`b`_`cghijmmjhefegfc^ULIJJGIOTYYTKNQRRQQYinnmidcba_]`^[[XUS\ksmaYW\abbdb^^ZWSQQRROUUTSRQPSRPOMNNKKLLJJNSWWUUY]`_YXZZWVVTTSQOPPOJJOQSQNKIIORUTUZ_cddcbddfebdilnia\ZXZ\\]_]XV^b`^^afgd_ZWUUVUQPQKF@}{|y~}}j`ly}sd\WSOKEFIKJKMMNOPRFQdfc[WacZVW][UTUPCAMOVXUS\_124579;EQPLC;999Jihdejda_ebkp_USVZYTOMJ}{zy^e`\Z`aSF<7;1@9BQKswUGETL=Wg_iPV[Yd^a^gmZYS[ZYQKGQhhGGQ^\[bojXXXqGJBKtopiaaWTSXQ[v_DpZp]PP?LI38647@BDGFC?>:k`8AA88GVX[QHJOPBAHWeTPQLQ66357:9d_RGDS^d7ij786dY]__^Y:>VZ\^/001562423579:7487=;:98;9::88;642364ecdbhffga=\_d67434322232e65edfc_ba__]YXY\a`ad^Z[YY[][\]]ZXVUWYZZ\]XX^_^!../-*++,/45431120/.+)((('**)*+)(*+,.-,-.00233/-,,**+*(()*,--+)**)+)*(#!1"%(+.-**((++*)))()))(*++,-..///.-..,,)('&'&%$$$%%& +')++,,--+*)3+*)('&'(**)(*++*+**)('+.0.)))(&%$$%&%$%&'%$&()))*+*)('&%$%%'))*++,)('&++*('a,*))&#""!#&()+,)()*).30,(&&'**(%%'&%$$&&%(+'&'(''%&)*,-+-./00-,///0+),02211122(-.//.-./0/...-///0.-.././/---/.-,**,)+++**+**)))((**,,-,++,.--0011/.-.,, 0110.,+5-/0122/*+*+..-..-,--.//-..//.12.05564353h-/2.../3)(+*)))'(,*''&',(')''&'+'%'%$&&%&)*--+,)'(**+,,-,,+*'$#&('&%&(&#!-.-)%%((''(--(*+-,**+-..+*(')*+*)++(%(+'')((*./--,-,--+23*&),+('''&'(())+--/,'$""%!&!#!"#&$&*-01- .)2/+%$%(+.*%$'m'+/-.0,)),+*)*)&%'+0+')*,--01/120+-0/*$%$%$!  "!$%%% #""!4 ""!!!$%$%&"!$''&%&&&%&'$$''#$"$!!!#%"!""$((%',1/+*+-'&')+,,,*()***)%%%('%$%&&$##%$"""!#%&&&'&(**)()))***+++,+,/.-,-1.-*((/1,*+)(((')*)*)&((&&'))''*)"##$##$# "&)))+,-,++*+--,,+,010+)+,00..02123523210/--//,*($##$&%%$$'("#)*$%&((**++(&&',0--.+('''((%$#&&%%'+**,,)*++*)//+*+,,+,,+-02012101/-&$)*),)%"&)())*+**/-*+-37723358889741//.,''(*+*%&)'(''($!$&&''&&%# !!$&&'%$&$$')))'&')+*))*++%!()*,+)')-1321./210../,+-, ,,..,*(**(**+,N-*,*)&))''((%$$ #)('(*,-,./--/0..-+--.00**/-***(*++%20-,-.-,./,,,+,,,//,,-//-,-/1/.--/./213344-)%#*)%&)-.//0121/.0.0--022/./,.0-+*((+,)')))+*)*,-,))()05334633565666567<<:6123,,74000.($""#&'*-26966.('m%#! ##1 #$&&*:7aXNPMA;1+93,&*,0?!7"%&%%%&&&'()'%$'%%()*---/1126798320.1//21//0023489:97;B### !!"! ?:;?;8:;:;=@@?=>?=>A>>;<:9;<>:678776655767:::<=<<;<:9776430377:<:<>A?=?@BC??AA@:;<:9::8236;ABAA>=9646;83232./2000/0013576104321028<<<9433029:9;=6//.u037644566=?42//9DEFD>BIPLCBEK*+(L,/,*OIBHQ+/000.-/2210-,-../.-./0236;:;;9755457753312204774346:;<=??<:8962A442/'! !!!$()+-)#%'('&&,7;::965321267443106AF@7214678976752/--..+/../.,+*+*(()('&+-.--.011201320//.//-+,,,)'+,,*&$"#'*,+,.37766566766556761.-,/0002/,,1321249853221121-..+($GEEILLJGHFDIIEDA3.5;>A8-)'%$" ! !"#$'552/+250,**'#"#!"#"!%&%%!!6537;6327684166+"0B(/-),&E$)'';=72491041,-20*&,,)(+/+)*&(,/1)).*(,*135-&%"1;3.010-)IDAAED<=;3,/8C>5&(#"#!  #$"###"$#(+(""*)&#&()&JJH7.& !$%"&"$4>4*"##(.3+*027:1&%##'GB'&%)167;1#(..%$#$$,-/71,+,2143*+5;;+292350'2>B8).;;311/02001-((*(%#A8H.*)(FJ'B(.'*-170)(-/,)$).FGHGFEBMMQN@=:6DD9>J9)12IYRQMB;E7.CFFHC@=70 9(,,6+$E>:>:(:0QI369.6@5BDH-<+4,)7<0).+-//0+,)$ !!/+:?43A7#"'*%:;;34/-*-*,E7"40?4*,#"12-,'$/0,,+.48$1DH7A>1,)'')+/1/+-/+//-&+.))-3353-34.2:6=?.16;BC;106:#$;:45;07=@C:1.13),99720.,,%)++)&"*.(&$" #'}+*('$$ !')#$"##*#"!!$%""/+ '()# "$%%,$  **% ',/0//*,,+*&#$$$O--.-0/01.+-0-/.00-.-+++*(*,-+,/,*,+,-.--+,,+()*,,*++)),,,݀Ȁ Ҁ}|}}}~ŀÁ~΀܀Ӏ ĽĺƀĿŻЀǵıŀü̿ŷºªâü˾Ѐ¶ƳڧϼƿЭµýž̀Ƽ¿ſַ˕ֻҎ׊գũµǿǀļ»̿¼ȿµŻÿ灖Ā탚̻ýݧƸ˲ނ׀ɴְƶíƼϼøɼ̩ŹַĶοЦǟޗʰĴີǽ↑ǩų̊įƹƿ˲􈎌ԼҲԱƼÿý»û􁌍ɸ󆉃p]^_ehd`adiihgfgedb_]WRQPRWXX\^[YVTTVUX\\VSTUWYZ]``]]]^be696ffceheb^[\\ZZ]``\ZUPLJKOTUUVX[]a_\WVWWVURW\^_cgbadb``_Q`a``^]\ZXUTSRPOOOLLNNNRTVXZ[ZYWXYVTX\][YXZ[[YZ]^]]^^\^`adfimdZYXYZYYZXWUSQONMMPSTW!TSQNLLNOOOPRUVXZ]a245799:;:;:6a\]\^\[[^^^/.n]]]\]^^]]ahfddc34431^ZWSPOMPNIJLLORPOQTY[\^[YUTUUROQTUSRTSPORUQRTUSOQTUY\^[]ab`]^\[[]```a]ZZ]aca_`bbdi774hi5:=><<:87654gecca`b`_^_`b_adbbbcccddca`abefhe_[[\\]\\[ZXXVVUVWVY\^]]]ZZ\_`bcccffeh4553e34555787557887kfdb_```a```abdfj54hgeeeh66ha]XXZXYY[\]]\\\]`bfkkjkks?A?<8543310123c^bhigddf6876311211121/Y^`1/[WVZXWWYY`752331`^.13^URRTVQQZ_[VVUWWXWW]24a\c1a`0///]]_`__^a39:753113431\Y]bb^YRPQa75aVOQQMLKOXWVZWUSQSWSRRTZ^^VSTWWSKHJLNKJHFGMNHJGGFJPRNPPJHPWRJLORSSORUUTTUVSX]0WVYWZ``0^TMHRX.75/\[XYYZWYVOZf^eb_MQROPQTJ@EOSTUTTTPNRVSQTWUQPMPVSTX\[YY[XTOOTSRSTTQUXWSPLFJIKHDLFNA:=:@BCEEDBCBBHDBBEFHRD85;AC?@?CI\lo\E?BEDDFEDEHLNOKD=;8>@BEtGGGECEINMGGMY_XWUONRRVXYXVSOMKLKIHJHEGFCDEGEFHHFB@DFMPMLMNLGKPPQTX\[SPPRSVWWWTUVY\[\\ZWTZZSQQPMLJNPMOSSTPKIKMNKNNLEGFCB@DIQTVVW[bda][ZWUWWVUWZ\__Z[[_]^^_`]\YXWUVZ\^\\ZXZXXZY[_\URPKGGLKJMQKDDFGGHHJKKJHKRQOTZXRQPOSOKN\6XFIPMJJLLILLKIKNRQOONLMPOPQRRRSUVZ]]]TRRYbfeaUNLMNKNQPTbedb`cba`^[XYWW\^[VTRRPNOOQSLIHJHILLQOKLMOQQQSQJAAADEDFDHJLKJMMKIILRZWOQPPMHKXUSRTRPTW\]``_abbaVGTROX[UV\XPOKOLMPQRRQRRSFOPONJNNMMNLGDDB==DDELSQRVVUSSTTVX[YZ[\]\VRRQUVRJNPPPYUSVWXVSXYSUVUUUVYZWUUVTTVXZYZ\\\b_^`^^`dc[WSSc2_ab[X`fhkejg``^\\[UTSXYVV[\\\[XTQQTXWVXWTTRPTWYXWWUSW\\abc`abb`beffhmlkkjknme\]]LMabb\ZZW]`^QV``[cY@=>@;>FNVS=+:I=`YPW[XOI7SM4]LJRgE@Km=@BCEEECEHKOOLMLIHKONNLPVWX[Z[cgcfga[YWXYWVX[Y[]`]aefmxxuqlgnxAB>voonfcjjeinkgfiiifcccejonmtofdacd`[XY +]][Z[\^`eij/gfgjjc^^decfjjhilhhjjqzxtomheidkvsrrvrmjifa\Ybmqmhefd_ZXZ]ejnprtvutwxica`^_`__`beglnprvroomkmnj`[]]ZZ]bemjbdba`abcgc_`babfe][`gifbdbZWdilg^\\VPRYahptwsopje_ZZ_aYUW]_XVUSQQUY^[Y[YYZ_ddde_aba``^WTSUWY[WOPQQQRVXYXY\^ccgcWUYiz}pieozzvwyywwpjot|~xx}GLNSSN~BDEFFFEGHIMPV[]]\^]^`\YZXVWtXYZ]^\ZY[``_adfdb`][[[`cehjmqrmfa`gonilmfeda[\`hnob_^[]abcba\X[_bcfrwmc^_[ZXUUTRPKJIHKNONQSTURRPONLNSSQKHLSUVPNSV[XU!SRQONPQQQRRSSRPRUVTRQRSRV[^]_cdd_^\YYZXYYY[ZYWX_^[XYZY[]]\^]ZZZVSROKJLJGDyu~}z}{slqwuuti]TNKEAEILNPPPQRSMN_iiheefc^[YRHKOMKPVY\cgf23578:=AHR\XOIB>=>Jgmha[^ZYZLLLPNGeyrskkkKL_TI6,15F+A6H[r[TEGTEJUZ]WgbWXNQRSZXZUW_^WSSVen\VV[ZZfe[SWkBKHBshsyfXZc\bVcmC@X_ZRN@ERUR[SP\YMERMif\[ab`kgg_RbY`mkg`\``XQaeZZ]SPR[cg_Yef__nqvwl_]eutjccmio{yjeiFGCnqGPNGAA~ovxp~@A?qjc`mzx|yq]QROKKPgoq}t\OL`ew}~XKQSD@::=EDE>GM?88786:=?B@=FFaa>OWZ\aa`275467:>5`TLKMPZkhbjhbZU[`^^\57/]_a`_//25457567:;:3578873488686584120263ac^ddehgZ[ah675343#e488hcec`_^^__ZVW[[Y_ea^YWWXWY\]\[XVWY[YXWXZ ,,+/3/--02110/_.,*(''*+*-/.-+)())**+*'()*,,,.0.--,+,-/..1/,*(((')*,-*)'%$"#$'())*++,,*))***)((,--.2/-0.,---.$--,+++*))(('&&&$#%&&'(*+-,,,))*(')*)('**())*)*+*))*,../1.*('(('&'%%%$$$%%%'))*)''&$$$%&'((())**()4*+)()((%&'')**))+/---,+)''%$#%$! ! !##$&'+ +**(&'('&%&'G%$&&$&''$ "#%)+,*)+,,*+,,,..-..-,+-01201112411..-.-,-,/-./.--./%0010-++*+,,,++*)))())),-//.,**+---../1,1/.,,++,../02400///03/,)*,+*+,--,-.156676:b.,/022//0))*)('***)**,***%$$$%$$(*'%&%&'(**,.+/-,#$'((()+%$%''&$"#$+-+)))('&',-+-+***+,))*'&&&%&'*+)%$&')'&%%'**$%%&()--)()'&,2.'()***'*-,+**+('&" ##')()%#!$&&('*)+),+'+0-/.-"&('))*%#*,,-,,,*)*,)(+-,+,*+/-,/210010.++.-,,-,))&$"!!  "##$!  "%,!#$!!!"&19:1%!#&%$'&$$&)*,*&#"""%''&%&(r(&&')+*'&*03..+'&)(+-./-*'&%&''&'%$%#""#$"$&&%$"#$')''&'%"$()),.10))*++,--,+,,.0//0/-,./+)**''&**')+,-)'&&((&'&&"#"!"!"%)*++,.120.,--+,,++,,.10.00212I00//.,/1110.-++'&('(+)&&'$#%'%"$&'$%'(())*++*)+..+,.,&$$#$""'"'-,**++()*++*+--./..--.-.1/.)%"$(**)&&(*+(('$$)-,.047886311225840/,,+**)+-(&&'%%'&)($$%'(((*)'!!!#$"##%%'&%''%%#&)-+%'))'%&.,*)*++-/1133234444.$-,).2./0-('&('(**+**+*,*+*)')*)(((%"$###$',,*-.-.j/.000//-+,+.,)#%&&(-++,,-,*,.*---,*+..--./.-+,++,..--../20010013/'$!!*&()'&++.2187221000---00./1210/-*()+-,,+),-..--+)-213455456778:98977873/00$&111--,*+,-(/53/2**%%!(+)". !!##'(%/<7\SHKKGA:(62"8.(-;'!*: "#$%&&$&()++)+*''(**+*-0011/06758951v2102423563578>FEA?;8<8:8:@><=;=?=63454358:>>876424569756878;8336;==88720:>A=6453.-269AEFC@C><:53672025730o10/02486588978<<;=666798852011243023322334455699<91/16%$*&"%&)(//060.-.0387+/::<1483201-/695.,0-(//'%572/(%+($$!=9&/-/)EDF%(*,-3/21FH0-+-)*+FFDFC=:DFC4>G<9=>?TT?34BOB9;G,R=;<52((..20%>@E>77+'4D;7:/2IK&'/(,94$$/),750013/,./1/1;7-CH81,0:/,12,&//#*/4759569;=964()/.10.%".8936=:525>>963869?>632A$$!75#)'#!!@FC@7=D?9B 7643;B@A><1**&'(*9==FJLNR@3*+79CFF.)-.$#"(!&(&38561,&*.,*'+/*&')'(%#!#&')))%# #&%%"!#%#&" !!$"$+/ (*+)%&%#',#%$%'%$+%#$%%*1.+0/,(&*+*)'%%%$$+,*.--02++./,/./.-,,--.+((++*-0/.,+* ,--,*)))*)*++*Ҁƀ̀怄~}}}|}}}~~~ځƀ »ļҀüż¹ù˸̪Ȼbƿ¾ȸ̽ŷĭĪ¾úźƾ׳Ѻǿýʼƾûǿܱ̿ߵ暖Ľڄᠷ¿ŷžĺϹ̿ü˽±ȵƺр􀊍úǽÿÿ耀¾ǭ郈ȗ냋žò̂ĝɵ̸񈜑ㅈگԿǧ׃ɶ󄊛ؙϊſɴĶԩɹѶùεɢ윱ւͺ϶ƹ߀ĕٰѻ̥ǸԾǿĸĿį׵􄓏̺ƸӼͱɽ´¿ˀĺ􅈆׀\_^_figca`]_bdfeb```_ZTQRRQRUYZZVUTRQRRTTTSRRTVTUY\^a```d55567:@>>IJCCDD?89AFGEHOE@:6=><=@@FWeg^O:o?ADGHGHIJMJC?AB;@CGJLNKHGHIIHKNNKJMVa]YVNSYTY[SJMLIGFHFHJKFCHJHHGHGJNLHGEFJMNOOOPOIFKPSVZ\`YRMOTY[ZYwTTY\YYZ]^_[Y^\VUPMOOONHLQVYPKJLNNOPMKFFGFFEB@?EJQVWZ[\d5khc_^[\[YZZY[b`_]YTXY[[Y[YXXWTTSSX]]^]]YYTQMJJIHIGGMIGIIHHEEEDFIJKMOMLLKJOW\ZTQPT[XY[]WEDLONLIIHHKLKKLQQOMNPPNNPNLMPRQOOSW\\WRX`dhgVLMOMKLOTPKT[^a7nbcb`_YXVX]_XUWVTSQPQUNEGLPPRVRNJOWTSWTVTRTJILNMCBDGHGEFLMIHGIMZZPOQOLNSWVSUV^ZTX^aa\_ccbeZPUSKV[UTSRNOROHKLLMMKKOQPOKGFLNLKLMIFFJF@ADGJPONSURNNPRTW[XVXWVXZVQTXVSPNOPUUQRTTUTRVXTSU[XTWYWYYZXVUWWVVVXXZ\]^_aabcdddaRL\XT``afo]EQWZbespgc^Z]]\YWZ[Z[]^^`ba_\\YY\]\]ZZ\YWVZ\]`_XRX\`bdccfggiigegiijqnlnt:kgdYZabdfijeghe\Z]]`a]>:\850333\_57]9BC@BCA?@BCEF@?HIMPKKLKMNOPOJMTUVWTQQTWZbc[Y[ZWUWY_`^_`ZU[]_hib]^`frx~{xplmlihjghpnfgljhkjigdfsrjklfabbgjdZURW[][ZZYY\`fmomkkliejleacdaackmiffgjhdkvyvokgiou{|tnnkhhbZYeswwxsmgekn_\fiihjkmqqmifa`a_`^YYYZ\[\`cbaaeljjkmqxsjf_VU\adgfhjf`ZW`knvunhfdchmfba`fld[^[U^cbc`ZZ__TWc]]glruqmgg_VXZZ`ig]^`\VTNHPRNHFMXZSR[^`a]`jvvh_n[UQSRUTRSRPRVXVOMV[Y`jqk[QQfrnqptxwvtpotutsmjpvwuuwtwHOTNJL|z~~ztwDJMQVXZZWTSQLLRSRQRTWVRQSWVXY[^`\[]eifcbdinomjigeefhjmsridca]^[\bcebfkg_\WUTVWWTQNJLRRPMKHGJLJEFEDGIJHLOONLOQPSW``UTRLKSWXXUW^`aWNOSUURQTWYYTQSRTVTQY[WTQRXZWXWWY\_[YXWXYZZYXVTV[XZ^]]\^_]ZYZ\]`^XVSOLJMNLJLQLEB|yzzwwyovK{wxwvtmkoqh`cb\QKFBEGJRVRNPTWVQTY\``\\\]^^WSQMPR]54d256776:>@GQ[a_UJC>=@@<5@Y^_bb^cgc_\XWSXWQPTOIIU[VUk}cVYUNLJDCztBQZXKvzGIENcbYOTZRQVWOMSRMLLJIGGHFCGGGMQVPTUOLCGUNILMKJFT_]ZSRXSVXNvhc[^aYTPX___YTKSYUS>S]\T_7;?EFGJIBCJPMJIIHHGIycVLHAFB:;<31>LJZ0SLe_RGELQSXa\SV_eYY[MGF~gDPJGTZcnmSGJLR[WVWY\Y^^[YXZ\aj`\ajncbgaYXZTMQXVZSPMQTRLO\]XURRRMIEBz~N\RL|FORYZ^UQM|IMKLIFG~uneo}x\vudcwwn{n_cquoosNKxnc_a`OMEKLNS3b^MYQNLGXVZ\j|CKSVV]]EUbELirfdbWPRSIAfmYbbYl{ihXKbee^eZavnZW_lhaieclzu`US[v]QSLU_\_\HPamqobcZH>Y^da]g[wGYkqnZZVTXNHMRPDg~puumdV^OTXI9R:>>3Y3FVgd_`CEQH;Xecgc\NGEC@G`bOPbjl_ZZ_]ldVX\\__^^g?@@DE@{znltfBVpyqYkyqYUUVWQJJOLLYULZiuWNPelgUX\Z__u~xz|vylcjj`Ud\W`nbRM^fga[shfdhblpr}vb[Z_eggdivtsrdizCBs>FFECww}xqmy~wmf|CCwfb]iJ}n_]XAUQYah{g^SLPXruaT]jUE?DHDNMRWYZSEE\XGJLT[YYUPHPUSQNMMSQNHHGGE=EPQMKOSSC88>?;:C6::;>9CT[d\WTPIO=FPC<989=>:50.0232233357:=?=<<=959<9688789CCA>=<<>@DGHIHE?==<;<;849CFCB?:75:?3-7:;;>>??><;852468623335557887:;>><=?AEB=:4.-26:;79=93117?AED?:9:9;9;623537<=568611-)/2.*(+2511458868?GF=863/002212102462--35262,,;A=@?BCEFDAACDEB=<@BEDDEBDJJJIKQONPR*.0WOKOX]-TNR,,RJNOMIFHIHHD@BF&+,.14552//.*o+.00.--../0242/.132234894139<:889:;=><:778988:?@;9984337:897:>:66311100..,++./.,+((**)''$$%(((+--,*...24=<10/++0/1576/,.011/-010/,-.%,+01/.,.2201/./1444334454320-/1013210212358631/-,,-,)(,1*&&KGDDDCDH>9AQ+MHDDDCBB=;==8543.%" $$" "$%$#&,/341100.,&"! "&'#*/.)"0336626964310,/0,+.,''0410AK7.2.)&$"!?@<;#-3/'>B'&")65/*.1++//*(,+())('&%&$"%&&)+.),-*)#&.)&**('$EB.3/.+,1.14,OQQQK@5-'(*%#$)+(&$"#(%"!&% '!#%'&!"'*(&&'((')VPC4*$ $!'93+$$),,.3/,-36-./&#$B2$.)(047<;("%%)/-++-/-00/--.05;3058934841/2/*,100,+(+-,(*56/,**+(%#"B@C+4.(GCF'--124,,)C?)(')&$%GE@EE<5>FE.@NGA:8ILBO\A:D<28A@NP<=@/.D;6345*+(O,*+*=;2:20/,;9=;>E&+-0/35%*2'):>432.***(#;=095*:B88.&33435/1@:)+0940944;B>2../A2*.)-1+-0$'37:;441' 11610:1:&1;;8//,+/(%+.+"8B:=:65,-%%$! %4411 &,$'+-43.&!  /3''../--.0-61,,..0///3 !!#&"@A;8:8$)?ED/9B9-,++/+()-+*30'1;H8E',8>;037786DRURIEE>B<2463,3.+2=8.'.466-?633716:=CF4/0457636==9922; 5$##!;;=XD><:AC>84@#":31/:NR*JA80/-,(.49ADFCKK85,+1;EE5)/8,%"'(")(,011,##0,%&#(,++*&"'(%&$%%('&#"C!(&%$'+,   " (+0*'%$ #!%t,'$&'#&')*2/*%%%)((&"%),,,+**-0.*-/.,+*+-...*(()*+-/44/+('&)+ **+)%(*,,--,ـހ}}}|}~ցÁ΀€ ſƿ퀃׀þԿ񁅀݀žŻ²ƶξ׀ʾþĺн񂒜¸ǿġ֮»ǰ¶Կ¼ú¼ſº¿ǾȻù¼ȿۄ򄆅;Ŧـ챊»ɻþžýϾƱƾɼȯźȸ˿€¾􆒮Ѵȹ쓓Ѹ˺߳оƸ䄔ǹ숙텰寫ĶнΩȻֻȪƼħ̼۫̀ãΧǵ̩ĶŮђ⹨ũξ÷忮킆ƭ޼ۮ¾ðϥǮƀƲW߀[_^]`_`fda^^`^_`aabca]ZXSNMNQUUWUSUUUXZYVRQPNPRPPQT\c_[Z]^b478;?><9775fdba``ZTTY]`ba`\ZZXVTVZ_^]\YTNHLT[^]YWY]57h_\[\_adc`][[[ZY/XVUTSSRPPRRSUX[YWXY\b_XWXY\`^^`bb`bf4fgffcaba`a`_[ZYY\XUUUVXYZZZ[\\\YWVUTTSRQPOPRVYYZ\_bd2223321231ZTSVWWVWXZ]___]]`_\[][WUUX]`YVW[^^_acecbabc`^]_ZSIFHKNQQQPONKPZZZ^bca]ZYZZYYWKVVXYVVUWWWXYYZXXZ\bbeggfaZZ\ZXYZ^adefeb_affgja_abba]]`c5886655588863dbca`aa`bbgh4453eef34565eeiha_\\_^^^]\][Y[^a`_`\WY_``aabcdbei677667::89879;<;:86565kidcaceedcbaaa```cgl9;:85b\\\Z]^bheaaadeccdf46ldbjp:;;:9653cb`^^\YV[ccc35884a][[a4532346555432111aa23474012/ZVY131[WVUW[VSY_.\//0\YUVY]^^_]YY[^^\[[\./012/\]]`02543210121\ZXYYYSOS^cTW__\ZWRNLMMIKKHIRWUW[^a[[YXUSSPLJMNHHKHKJKIIJGGHHGIJNSOJKQa^SVZa\VOHMMIMMHKMRXYZWTOJJEDDIS]\XZZ[XXZc_Wa`ZY^aa[TQUXXUSPJKTYYWTUZbccde212a^ZZRLRQNSQNJHEHIFINSPMMJNQRPJRWYXVRHFB@>?A>76?<63?E@<9BGGD:f9><;>@?BGHEC>?FGECDGGFEFD>:qqAGMKFDFFGLJJMMLKLKLOQNKLJJNNLORSSRUVMVZ[YWRRVYYXYVW\\XYZXVY_b^KHMQRPKKMRVQNKMPKGLLFDDGHFDDA>FMU^`^^]`dfhgcbcb_]_\\_fb]VQRWYVVUVRSWWVWYZ]a_ZYYOFNSSOKJJKMMQPNMKKMLJHFHLMNMMNNLJHEFLRW\ZVQMRRLKKIKKOSSUQJKMMPMIJMQOOMPRMKNPNNLLNLKNOQVXWV\[ZVMPTRKHJNQTTX]`bhhb]^]]][XXWZ[UTUPMLTWSKDBIRSPTUSPNQTOPTSSRTUURRQQQMMOJHGEGFIGHHGPTNKQQPPSWVZ`fbSQV[`^\[\XXX[[VUTTTQQUTOQUSPONLTUSRTONNNMDCHHHDDJI@===>DIIIJMRRQOOQRTRTRRTUQUXUUXWWVUQTVWXVWXWVTSUUQPUY[[\[YYXXXYYYWXZTRW]\^]Z\_ccglmi^[`[Z\`hnyxhfggsvxkfb`][_\ZYY[]`acddaba`_]]]_a`_a`^[]`cdff[X[cegilmoppmkhikklonklpuu;:kdbeggjiiikdVVV[`]_\Tb6432`21`2bWOLCDGFFA@JNQE,:G:flma[`_W-SRJWJ?QXNP^t>@?>@EHEBHJLPNKLMNPRVUQNOQQRTSSPQPORSTTPPRUWYY^]ZXPNPQSUVW[`dpvwvttuusnklpoqronmmkfdff_^jnhbadcaejlfc`^chjhfea\\agnrqqrnecjnhbdd`adggegkkf``hvyuvurstw|~xqidabaZXhx}~tnklZ@NjqligddffeegkmgbaYWYYWVSUX]]^acijhjrwsoqkgf]Zk|zoukYSTWYZ]eghhhkkijihc`cddega[ficd^SMT_hqrjihhkgee^[VTZ][^ef\VXYUPMKLH}zJRVXWZfuyujb\[]]XWZXSQQUYXUXZ_a^`dhj_]fywsnlljoqkjmntwmjpvyzsssnr{~{{LKK}{PP~}ywwtuyINQONPOPRQMMORUUVWZ\__^]YWZ]_acdikiccddfb[Z]adda_R^]^^`_ciorh_\ZW[ab^YXUXYUPOLLKJGGHIILNOQQLIHIHIJIALSQNPPRONOMLQSW]PNPNQSQNMOPQRPNMLLNRSSPPSRQSY\XUTSTUZYTSQQRSTSQPSVVUTSUXTSSWY[``\XVWWX]VQOJHGCHMRSI|xvxz~xxtywmhfccegd`aba`]VSIBEJUX_aVLLQVXVRRQQTQRPLOSUTWWZYZbb[d447:;?DNW\\ZUOIGEA??=96DY]cd[[adfa[[XTWNOSSK?HMJNZj^WVQNMMKHGIF~ESNBwowFJ`cXQP\[RSWWONSHGGHGCBEFEHLMKHQSOTSLJDKMIHIIIJFDI\\ZYQPQKXXKJLJqdb^\]XUTVW[\ZWTUQECDhjin??@ADGJEA@DFFGEGKKJHsgZNE<69KTKLZRUX140F]^UHEJRU\bYU[dcY^]OKKsOPEFPTXdkQJNQ[dYV]\]_]`bf[UZ\pu`\gjc[ce_[RJIMOVdUOKR[XRY^boq[QLJIFCD~PRRRu{FQWXQQNHGG~~|Dy{~u~g_huuyUfLPwog_\cdkyxzoe_ZUNNuuDMI]aMTPsIQHLliEEOSQVSdhoBZfowRTi^JAI^]X^]c|nna`oukQZS\nmm\Vdfimkbj}r_LM\c\KAQZhhQQ\cvi]WhaQM[W\jc_VH=S`ssVXUPPPLOTS>\~rppp_j_LRNF8;DI<@PXpgfhhRARSLirZRURLJLJ@>T\DM^dtx]SabhrV^i]X]ftBCvoz}umgh^HFUjo^mfX[RKQTOLIRSNKITclyNWde]VRTWTUk{eYanlppplocPOTei\W]dZ[{ncewoifg{g\TM]bdfdlw}Cxnm>?>IE@zwplrqokafqrnl{@CCprh_wrqqwslbRS`_bip}pl{eL~MV]Y_ptP=?ILW]VYRUTKFU`HMYZYVWUSGGQVOOLMPOLIKQNC>AIFFGKPTIEHNIECC=B@EGC?:69@?A@=:GF@>@A68<6;>HWVWQJHGLSO<6J464346668641dYSRSPRPR[idZRSU]Z]\253XX45ace355354679986677::7265344356455d376eba_\]_=b^]e44775223446677675gba_\Z\^^]]VVWYX^dd^\ZSPQRTY[ZZYWUTVYX\].,-,,-,-1/.-,,+,,-.01/-,*)&%%')**)()*)*,,*('(&%'I),0-*)+*-.,+*+,)&&),-..-,*+*)&'*..,-,)&#$'+*(&%&'1,+++,-01.,+)(''(((''&'())*+*)))+.-)))*+-,*,-..,-,-,--+,-,,,++,,)()()'&'())*+,+,,,-+*))(('''&&%')**))+,,'&&'''&''')))(''((&%%&$$$b&*,))+,,**+-/.,+--+((+)% "$#$$%%#$('(+-.-,*))*++**)**((()***(&''')+/./0//.*,-,+,,../0210/1556941/..0,,,-,-1,-.--/0./////10--,-..-.--.*)*+-./0-**../0"/0220.../00.-./12-++*)+,.2/,-.0/--.06227;.,*++*(',/..*)*+.,,(&()(('(*(%'*'('%&)+--.,**+--*('&')*-$""#%'%#&+0*-22/-,*'%%$ !"$*-++)'(#$%%&')(&%%&"$'%(((&&'&'('''&')(%(.89../1-*(#()')*()*))%%##""#"$%'.4,1*))(%&&+)#+,*)-120,+.00.--)*/20.,+/311210+(,+*-,)''%&'%'*-*(('(*($"'&$#!# %'%#5"  #!!$%#" !%'&$$&'&%&%" >>!&)*--,./0-'%''-1-.*/2100-1/,01) !$( +&#"$$$'&&(' &'))'&(&&)(&()w*+*++',...,+++,-..--00/11///.-.241%"&(*)'&&)+)(&(+)%)($#""$"!" #'-1210//02464332100//141.*'*--+++,*+..--/.1320//(%+.,)(*+--,*)((+,,,-.-++*'(,///-*&$''%%%$'(*,+--((,,-,))+,++*+,)(*,,,***)),-,..-+,,+*%'--(&'))'$&'().13587654233462//+)).0,'%$',-)+-+)(()''+G++**,-*)''(&&'$##"##%#$&%(,(&*+*)+.-0484,*.1431/.,--02.--,,))--)(+)'))(-K/+)++)#"%$$""'(! !$('&&(,+*))+,,+*))+,*+-,+-,++*()+,,,--,+(),+('+,.//---./=.../,,.2010/01236784-+,&&(,26>@64228;B?86220021//034345543222132224310014345/.05579:<==<:989:999868:<<7435788899;6-..23/0,#'*(,))(#$'%&"$(/,3395dgfZSSLA5309.$03(*3?!"""#&'$#()),*(*++,-/..,,--...-+-,-0/00../02213321-,..1343556>@A?>@BB@=;==<>>><;<;989833;>;88::8;>>:9768:;:997458;?A??><76;?;678779:;;;==;88:BDABCBA@@DHLJJIFD@;978:74:EIKHA=;:/ &8>=<<::;:98;?A;7732343323357577;=<<@DB?B>8;509FG?C;.,.02249<<<;==<<<;858999;74;>:96/*/8=BB=<;<=:;=85214745793.141...-*LJLNKM-24445:CFC<9655522550/0453036=<79;==65=KMDA>>><@B>>?>DG?=@CFGAABADHIGGJP,++TNEEPWY]0/TOQTQOPLIGGEWCBACGJJJINQ*/0/./..01../12122468:98558:;<==?>>:898:85569<<:96677756;>B<86525995110220..,2*)()*---/.*((*(((&F?!*/-,//0//.,,0/36-+,+-.,*+,,,.-+,+**,--.-./.--230.///0320/-,--.011...02111///,+-0135642123461/-***'JL(,00)IGCCDEKGCB?EMLIC><:89;;8655540-*!#*+.,& $&&$#%&(,**)%###%%&(($'")...+($!.056215686110-0**.,&%+(,3>40/,*)('%%'$?F%-*#@2/48516732.('*),6-)',10.367>>/*(&&#"#BC-0--N@C%,//++)&%%CCGBBD?#K@AHIAID836@BIC/8IKNU-.@=94045;LIA@VRC=631/+,JAB'+C$69,65ZQ170-=61/96,)211:440& ,3=>-0.++*'*// 1G:8:8/3A/$% %'65668) --#38+(+*&$&$*.!*,7;1+1/5<*.5.+-29!"<9>CBA<9870(&-:A6;7,.(&(-*)%,1,*(099GI-D-6650-/301>HQW\R:0398:::8:4+))4;1-051.A<22?=634@I93/(475548>A";54$"=;65::9625<<:5= ""8;62EJ>;>(!((/2-/+-.'#.4"%-,+)*)(!!')%&#%&%$#%*'$!!$'))#!%"   #! "!!(()%! "&#.(%&&#%$&,40*&&%)(*&"$'()%,.-,+**+.-*.01.,,++,-,,,)''))-01,--(&'((+,+++*)()**--€Ѐ}|}~Ȁ⁂恂ŀā~뀌 + ÿ񄄃ƿ׀¿ʽǾij瀀ǻ¾ǻ闞͹ʿúֺ·ŀÿŷļ¿õλù¼Ծ¸ľį¿㼤Ӓ잷ニ¾̿þƻ˼傆¹πɿ΀ƻτĽ񃌑˟ǝĬǼIJ´ɨ犙郂̺ڊϼƺ놘ာ툏¾̭ջߵþ准جش̲ò˱ПøʩŹĝḩ؀ϤڃǵɸԺɺͯں̽пسའƀôǽ¼ùͳlſ݀\]\Z[]]bifbcb^\\]^_bege]VRQRQQPQNKMQSUWYYVUUQQSRPPQUWUVXVOORV\e9>>9\Xg443dgf__affhkmkhfehf^^dihea[URKFGOSRVWRQ\g6e_[\^gng_[Z[]_[9XWXWUTSQQRTSTY^]]^][[YVVUTTZZY\^dih4445ighaZX[^_\Z\`^\YVUTUX]___`_`_[ZWUUWX[]]ZWXZ]``_be45434443332a`^ZYWUWWY\]^\YWXUPORSRPOSUTUZ_`^^^`ded`]]^^\`35dYSNIGFIKLQTSVXXWX[_aab^[YYVTUVVTTUTUWVTRSUTUX`d][aeecZZ]:`aadecc`[]ahrmheecbcdfgk9::857888654fbbdefeeedddgh554346664gg565hfedba_\\^_ab]]_`^]aec]\^_]]bfghil76ki5448;;879:9;9665477fabdda``abedca`a`_`bem996d`2geecchfbdeeecdfh57jci8;<;:7764fe3211_^\big46873^[]a499446876764432234686442/]_][XZa1`ZWVSPOQPV]./243/.//]ZXY_1`\YWXZ[]YY[[[/22/YYZVVXX[[ZZ.]ZYXTRRPMMPUVYa\VW]cbZSOMMMHA?HRV_ZYZUUX^ZOMJHJMLKMMKNOJFGIFEIKQQJJJH@BKSWT]`TLLIIKLMMNLKILMQUUVSOLHFENbcYSRUYYVV\[X10]Y[^[YX\_]XVVTOQV^[WUWaed3342`ZUSVVLHMQOMKKHJOOMJKPSRSSLKQQNL^icVQNHDA=@CA>7:RCFJGB782:GC=6\IIDC:ci=>>;>A@@B@BEIOSSLCCFHHGEBBBzw}A@=@LTXdaQJLKU\TNGP[`a^YZX[\]WRLFIFFHFHKMLMMNOIJLMOPPNNJIPPNSVSUVY\YYWVUVZ\]bb[XVUYZX[ZWXWRQRRPQV^g`PLHQVQQRV[VPIHIGC>pim?@EGC?@CKTZ]eb^]\\_chf___[Y]bbbda_XSRTZZZXXVPSUVX`dcb`YSPNRX\\XTRPOOOQRTOMOONLKKMPNKMLMJFFA=AKNPSXYUPMMLJILRPTWTWSOUVQQJEJOOOKLLLINSRRRQMJHJMNORWZXVTUROSXYSONNPSX\^45aSSX[YVURRTSTRH{zGIOOMJFIEJLMMRSSSPNLOQNOQSUSRSSPOOHHHFEEBAFHLLIIO[XNLRUYaje[UVWZ\\]\XUVSVURVTPRSSTRORZXQSRNSVRRVPPRPMIPPKOLDGG<47;86E?jjnf[^`Z5YZUY>oMXLQg=?@?>;?CFIJJILMMOQOQUUSSONLLMMOPMNMKMLKKJJONPRSVVURQPPOQTXZ[`cjwqn89nnmkkmnlllmqqpqljfd^]gkje_cc_cinlghijnomigc`]`eowwxtkdcglkjlkfcdijiglkfb]dqxy{{zyzzwx}}ukhhghfft}vnr}~|wtnib`dhhiomb[VSTWWRPNQW`fihddlsuz{xtuj\ccaeimso_[\b]VRRRV[ahlnjfljdghb[VZ\\a`_abaeffinrtmdcbaji^SKP[\`a`b^YTQK|pkrKIECFLRTV\]ad_]]\]_\ZZXX[[^a_\XYbh^_gmlcct}{rpqkgc`dimpmmqnjtyzylnw}{{P{rsPQRO{wuuxtsz|NPMQLHGJLMNMIFILPQOPSWWQNS[\]XRNNMOPKMSY[XZ[YVUROJHGLPS[c`]WQNNOU\ZRQPPPMJHIJJLNS`a^XPMMMONMMKIJMSSMLMJJJJIKLOQPMJFHHFEFGKJHILNPQRNLJHGXWRTSOQTRQONNNONLKIKNNMNPPONNNOOSW\^ZYUPJIJFED@|xzvonrIztpikrw}pcfhioopd][ZZ_`^[[_`aaZROH>FZddbgaXUSMOQPLIILPPQVWTTVTWYWTSU]_^28;>K\`\WVRPNNL;QO2666CWVVXZ]]ejb[YWVSLMKHELPAMadUQIHJMQQJMQEHKE|xtFIMYY^V[hQKOSVJOPGHHHEDGHGIJKHDDNOOPGDB@GORLHILMGJV9]]ZQGIIHSOLNNupqiec^UUXZ``^^URN>Vryw|CCx=BIJGCABB@CCGKvjVB883.A^_KQPJVY^31;_iYGCMSWbg\VYYU\a^TMLHDMG}~HHTii]QOTgiYRZ]eibghdZUTdx|hcjda[[fg[QQURMYbTMM`aSP_bdnoZMIKJGHGFHLLMJHyqJUUQEIIDDwy}zGGm^TN|fbaira~}lMsec_]\OT|roogd[SMTWwsMVSrof^AxuFcbrFbsGQUMmfcrKizGe^ZPDIJQ\LG@Ys[P]nvqSOXVag_TX^`qED}txvZ?Dfs\RVRV^LTchmk]_edXT\RQ`e_VPFP^jaXUROONKRSR@ZsmmRY`wFnJAOQJLPVA=VU_VYjraLIK`olUMM;EWVTG;DOQVUSR:773232g443353388hca`]\]bga]e33300354446976654ifc`ZY\_```\XUUUW]][a]UQOMPYZYXZYX]`XZ],+***,,.20...+***,-.022-)''('&%&''())*)()('((&&')*))*)&&&(+/*"),--++-/112331/.0/+*-020/,(&$ #$#$&$#'-0.,+-283,)**,,*(())('''&()''*-,+++*')*)''(+*(**>-00-,-+)'(**)'()))(&&%%&'')+,-.-,-,+**))**,-,*()+,-,*,-)(''&'((('&&'&%$#$%%$%&')-./-*)+//.+*++*)*,'%#! !!$&%&'('(*+,,-,)()))*)*)('((()(('&%&(,-*),...)+.././10./0010-/03:97432221445!,+,-..,./.-.13+.0210/00/,,-.0/+*--,,.10,,-.,,02443421e-,---,--,-//.,,---...30.1././1-+--//--/02050.-+*.0/)),.)**)))+(&%'&$#$$&*('((-.,+)*+,-)'&%#&*-,*''&&&%%$"!!"$$%'),--1/--.12/+'%##" $*+/*&&"!#''#$##$$%&(:)(*+($%%#"'),,'$#"#,//-11'"$%&'(*)**)()'&%#"!!"#$%*55.+**)*()'(*+-/4652/..,-/30-,-130,*+*-/*),.+))('(+*('(+,+++''+,($,0*$ &/'&""49!!!"$""#"#%'+,-+%%'))('%7$%CAE$$$%*,-64*'((.2,)%*1421.--..0,*'##"#&$&))'())*&%''('%&))(*+*+,.0.-,//043.,,,./-//.0.+*++**-165,)%*,)**,/-($$$%%!:77!#! %,/042/...0364111/-0333421,))+.-.---*+-..343230-,,.022/,,,++,-./,,-,++*+s,.,+,,-+((%"%*,+,./-+)))())+),.,--*.1--*%)-,+()*)(+..--.,)((+,+,031.+**)+/0-*)()()((,(+05410./0///&66%).,*'%(')))(*+)))'')*((**,*((('&&###!## $%'(%%(20(&),.375/-./11220-*,+-.,/-+,.++*((/.(+,(*-++.**,*&"'+%((#$%!#%'(*(()).4/*'((++)*,,+,-,+*)),-+-./20**/1//.-/33/-._/00/./0-,1/011253468;656526769;<<2?D!"!A>:72111330,-./0311233123304555333434132353112458;C#E"A<8::;99;;;:87489719:20/01222-)%#L! !((()##()'&"!)*87:<9ffiaURMB%6358&A,3*,8 !"!"!#$&'(')*)*+*+.,+-,++**)+,*+ **++,../00111/.--,-024467;E>:;=L><;=<=@>==<;8744:==959969<><:;<<>><;976569?CCC?;89:<;:;;:979<<:>=9:89>BDGHFDCFFILNOKD=;<;<==?=841/0120/.048;==98>DEHKKF@8-141359?;0.0540..-037=5.+0669:89620.*MKC=;=H*+(%',025868844554522200457986349<68?AA99ADC@>>;:87:=@A>>@?;BEFJE<>ENQLHGGLZ1WKC>BJW011-RLKHINRTOI@>?>@??B@DLR.0..+))+,--,)'N(N(,,*,.00--15761-,,,.-*,0244785330.+('+-/49750,**,053/...-+)()**TQNR-.199860-,,++***))*--+++*+UVTPOPLJOR)))*,..,,*(()(''(+,,+***,,)(('=&22/10-/1/.+))*++**)+--,-/..-,./044785320,++(('$EDEA=>CK+SIFDA;:=CF>8:88;@B;7523553235665.(% !.2004/*(&! !#%%')'#"$!#$# !%&$!-00.,*))'%" +*,/1338;71/.,+((&%$)+#F+8:.,'&'*++'(+GD%')$?>>F(**113-0:*&),.&*+$%&&$$%&%&'(&$%***A+%%#"%*-(%&()$&0542,%('(/,*,-WUL@;81/,'!"$%''')" '8:8.!%$!"##$3:/#"*,-47/,.1-131+''%#(%AC('.<90)')46,(-.461566/-/5AD5296422881,,/,&.4,)'47-+578?A0'%&&$%%%&*)*)'@<'..,$%%"C$HCC=@D>'(EJ?8G0+@5675K@0ELEB6M.>67510))INDHGB><772,)/0?>)20;AB>0TH-CACO*5@'D*/N[/O@73;(6>&C003.%'%',!#!,C:0+3=BA+)-*273,.31<%$?C>?H=.!#8@0+.+-4',549601880.3+*3540-#+062-.,*++',.. /?98(./<'9$""$),*3,-8=4&(*297(%'#-,,"!'$%#!"2$4:/7838/'*4#("69:5<83773/+&-14674-.26*%+,)-.('&8838B<.833=/(&-2437?@E9546524:1/21/+(-3205:+-:>97:@@62;EB9,I,188578@$"!""&'#@<:5854A;7;CA? ;5??@A=BG@<8=<57<2./49:4=@=?<;?>,)$%60+7E1&"#)17021-/*)'*((()%&)''%&'$ "!#%$"#(,* !!$(((%)&$$## $#  # #"$&#%$+-(" ).,'%|&*-.,&''))+(***)+*).1.-+**+,0,).2/--+*+,,,-+(&'()--,/.*'%%%*,+++)'+,)*-Հ􀂁Ԁ~}|}~€ဇ̀ɀǁ~ +܀ Ǿɹ􁆉􆈀п̀ŵʽʴǼİϷɣɸɿŻýƿ¿ƿʀƽ̼»þрüúĿĿؽĻ»¹Ĵ¿Կ޴Հͬ⠩ُɐ톐α¾ĽĹ÷ǹƺ·쀇ȵ񈌌ö򁅎򄐕ٸӔľ鋗݀ȵý˟ͪܶ˭ɵмϷ偈ŀӽƻʵɿֽī÷܁κµƴéկ؂ϲ€Ĺ˼»Ǻފt򂂁#`][\ZZ]^`bbacb^\[[\_bfjgc_\XUTSSRSSRTUVWURTTRQOMOQQSTSOONMOS^i7;9``b352_\^begfhklkighjf_beace[WTVXOIHKLMPPLQZ`bb``befa^\ZY]^\ZYXWVUUWWWXVW[\YVWYXXXWURQTVWUWY\_e79:9h``__\ZZ\YXXZXYYWXYXXXY\^__``_`][WWWX[_af56hdbaa^^23555444554221ba_^```]\YYWTQOPPNNOPQSTY\\^aa`ac1234431123334443a]YYYZ[XWXXZadbX121ddeea^]\\ZYZYXXZXVTVY[\]]^aa__]\^a]]`acbaccbcdellgdchoppmjgfgfie_`i8kfggeg3ebbbaaa``dfikl6654fdedbce576igffeeb_^][]]\\]\[[XWTVZ\^]^^`begm7mlj5554698633235667787hdb^___^_`be4457784edehggb`decea^__]_beedcda``^_g6878:9533446641]\_g789964113478633663133100^]][Zd2010]ZYXZXW^341]YTQQTX[^[Y.0/--/0/ZWVZ^]WVTUY[Z^_^]WTZ00\WUSPOMMKLPU[]\[YTNIGKNMPSSRRSOTTRTOPRRSQIFOORTPRWVSXYQPUPLIGQQIKMNPMNQRMFHKOQSNECCJQILPSRNLRVRKPNPZYMLMKOUXUTVM?FUY^ZRLKNQSPRRQMPTWYYYVSU]bb]ZWTUVYZXXUY\ZSSUSPLGFEKPNKMPMKNOPVZRQQSRRSQNKJNTTQMKJHJLFCGLKGAF==;9>A?AD?5g==6i=DDACBBBFHEJMJKPNDADDEIMJDA>t:BGIPQIINNLLHEEMaa\^VRUQMPRTTNGIROBCMLJKNPMKKNONNOONNNPRU^]WWW[[XZXUVUY[^`_XSQTVYVSTSTQMKLMMOSVXdd`[XYTSRRTSNIHDCC?5n8?BEJIGGJQZ`_adb`_][]__][[Z[^da]]^[WWUW\\\[TTVXWUTX]__bcba^\\[\^ZXXVTSSRQPNNMNQOJIJKKGD?p;BFHILNQSORSOQRRQSWWVYZXXSNQLHSQJLKMNOMQROOONMNMMONORWYXWSRSRT]_ZVRPRUURTZ]dc[SRQRRMOQQOOE69=GJIHGHMMHFJJIIOYXUUPMMLLJGGHKOQQPMOPMOLFECCGKKOJGJOWRQSUX]ad_Z[ZYVQTZ_\XXSPQRSQPMLSTOMPYVQWRQUQHMMRRQNIFLQIOM@=FC>AC@@@>BINNMPRTVZYYUSRSVTUUYUX\[XWTSUUTWZ[^d^X^``]_bddge[QSZ[YWZYWUWVYZ[]c_`Qapklrvu==njgd^]`]B]ZVW6[CJS_k;>>==:88>GJIIJKLKMLKMLLMKJKLLLKLMMLIJLJGFFHLNOQTXWUVYYWUX^`_aderhM\c_gihieccgighjjknolmnmonmkgedaagjlicabdghihhjfbcjostnfbbdhmomkklifhilrmaceejqvsuw|}rnpszysqtrmheckvz|yvtmjlggklkecfhe_[XXYSPQTWYZ`muswuqrzzpe]SRVWZcmrn`]_^ahll`TPQYbjqqqurid`\`c`\X]_`_bghhhgipxyoea^YUQPRWWZ^\_ee_[[ULHDIOQWXTNGDILRW^^^Z^_^behkh`^bfea_]^aaZZ\agkllpoknoe_^__d`_hoojglnnnwz{vosxskiwMOJ|~|}~GGHLKIIFEDFKNMNMPTUSTSW]acaZVSOKHECACFJQ[aZURPPQTUSPMORQNMLIJQQMLLLKJJKNRPJHJKHIGELRSQONOONNPP{?TXUQMKNSTSPNOMKKKLNQRPMKKIHKMQURTRONMLKG{vnoqnihmlltupwyolqlhfilljeaabipjZQNLMPQR[__`__]UROMUaabmwoge\SLHGDCGOTY[YXVXWWVTW^bb458::?Qdd^\ZTQPMH?[HU2;LHOX`^dqhb\VWVRMC~MUVLBDRj_QNJIPQRNFKHGINNGvEBIZ_\]i^HJRUPKTRMKKIEFIKJHHHFDGKFHHCA~CJWWNLMNKJR[YURNJIIHEENN{{}trqmaV[`cd_`\LRSKizxz{|wt?FLIGEDCBBDEKJKIxaYQ>@907D:WP41?ACRY0[7_f\EFJMYcjcZUOMW`aVPPKD~EJMTacfZOTefWMS\cihb_][XWjvug``aa^Rhi[ZZVNEN[WPSXSOTZbgl_TKIHFFHGDGNKKLFzIROINJI~y{xv{zkjMRLkimwr{zxz~oa`bbc_lvsqnmnopigf^Y^[GEOGukN=OV`WdmKvu}cO[ndYB?HesuzY@DHS`^YGBBKG==EG=:9:>@<>@=@FGGFCLN__ZSKJ[6;67677662[X`[PPTSTVV[a`UU[\ZY\5844212b`^]aeb__`3649:889<<:885474ce445552676dba^]]]a4__8422]Y`331236633664fdd_\XZ^]`a`\WSSVWXYYZYXUQOPSVWWUYfga_%-*)*))+,-./-..,+*+,-.0220/-,**))()+*)'W(((''('&%#%&')('&%%%&)-2+(()((+./123320//1.+-20/0+())*&" !""#$!#),.0/./00/,*))+,*()((+,)(&'((''&%&''(j*+.-++,-,)())()*'')('((())*+,,--,,,+(())*+,//-,++****))**+*)''&$#$%%&&%%&''),-..//..(('\('&'&&)**,,,-,**)***++*)*+*(*+*+**+-,,-,+*++.0242//0..00552114898534243420044111010.---,./../1220/0/320/120-,+*,,+*+()()*,--//.0013453/-,**+,+.0//012/.//01-+++*+,.00/..//..1**,1*)++*/+*(())(,('$$%')*+*('&&(,+(+-,./-*%!#$$%'&&$#""#$&(('$%$""&)()+***+(*+)+))*(''$#+**+(()&$%%! #$#!%($&)*+(''$#!#%&%&$ %,(*,,+)'*.,'++,32**,*()(%#%"%22E41+'')+,)*))'()**('((+15521/-0100.-+.0.*,,)'&%&&*-,,-.,*+++/0***+**+*(/)+*&!  #  6" 6!%$"#{%'&)*)).-%$&&%(,*'$#D"&&&)(%%)(()&%%+63/1-*,(&(***'"$*' #*)''(*('''(('(('()*+,2/+,-/.,.-,,,./110-))+-/-+,,+*('())*+-.8620-,*N&##"#$"< "%$""$(.10220./..0110/0//142000.,,+,0//-+-/10-,/2225776211/12/./../ 00/.,,+,.,*)*+,*'$?"&())*+,-*,-,-00./0/0.*,*(..&))+,-+-.,,,+*+**,/21/+*,,.451-+)*)'$$').0/,,---)+,,*+&&))'%%))&&((&&).,**)('&'&$%%%&&'(&''&''"!"!$'')&$').+*+,/0240.10/.,-12/--+*+++))%$*+(&'++(,)(-*$))++*)$"$)$('"!"$!#" !&)('()+,///+*()+++,-,-//-,*))((+--/1.,12211/./144771*+.//.//.-//2221534)4=98;<; =;:89?>???<:975136642//0./1./125/ /2465212223336986554458<@?==:64667:<:9:::;7="18;:695(-,,20..12311,&#!"&()*)'%$('+4:;9ifb]WSOI.9446#:)+06: !"!!!'(' '((('))()((+*])((*,,+)*+*))(*,./.13201431/2565776@8'.0/68:<95699579:<==<=<;<;<<:::88;==;988:::;:;<:78<>@@=:9;===>?=99:?@DHMMGC@@CC?<;9=EGFFDDECA@?;9;::>?=;=<;:64322/-/13347?DDHFBCHH>72,*+,.4;>;1-0./59<7/-.27;@ABCA96526975366767;<>>=>@EHB;7520/11346:99;<8452+)'),/43/)%$'*/177768868:;>=8579:6546872479<>?@B>8>?:6677<97=@@<:?A@?FHJQNLSMC@EHNOHB==962/,*(%H%&'*/6:52//01431/..1/.-+)PPRTQS,/-+*,,,+UROQRS++,,.,))SPR+QLNNMMOOQRTTSQNR+OLM((''HFGGM*//.++,-,B%/21/-,.11/-,-+++*,./1/-++((,-12021000/.-OIE@??>::=<@EDAFGAAC=;9;<;:8666;@=4.+(''(+2456431*(&&-214;@854,% "%()'%#$$#""#&(&&34210,**'"&#$"'/546?942-0.+& =)./)"%-<5+*'',,+)#'%F&(**$B=EE%#'1412:3#&,,)&,+'&'&$%'(&%%%$$%'$%&#"C$'//''&('',310.,)''((%$++SNKC@B<:83)$'))*''& !!3>>!%(&%#"$H&+++*RE61)" "%260#&('.4930.*(/34-)*($BBG&)*.546-&*57-').254431/.-9@@634453+9;2130)#(0.*,2/+.257:3,&%%$$&%#$)(((&C>',*&EGEC(''JDADCAFKGE;8+0*K989>F;EIB=A=CH<5676608A@?><<=?:9:6242#$.)OFA3).4?8DF\/OABLQN@1:C:1K%!$6;.!#%,1.+ ))C7,)198;11;2,,../8><#%%(90:98"7=A5++21''-3883742023/(06,/:50092//.,+&(-+'"-975-014552#&#%11) 3$&*.,4=24*!275.&&!"'0+#"#'+*#"+7'0744@30---6$)=1;>>?4482740-5-)1-2---1/*.1/..,-#,695=>;@5+0,&$&/04888;52:>C900/*((+64(55*14/8:><:96G*@5?JC80)*24998;"$&#:$,+&B=:8;8:$"?@C>>#"8B>6DJDFBAB<5*0522:6;<59<;9;<6@9+')-0&1;81"!*250.742-('$"(+( ""#(&%%&%##%$! &($!!!#%'& ')%&$ !% "!#!"! !!+*'%# $'&+*$$&%(**,//('**)''+***,-++*(,.-,,***),*+*(*/---,*+-+-,,+)'&()***+*+*(%%'))'&'./-- ـÀۀр~}|}~րȁƀր  ¾ȿĿѽ»¿¹¸¼ſӽɾúÿ̻ـǼ¾ֽ𰹯¹ƸжſþӽĿżþ̀иûƸð޶ֿΚႰ:䎍DŽʀĜƻôȿ³¾ĺĿĶĻųȿ􋗛¾õȿż¨ݵ֯Ⱦӷ􍹫Ƽ󔐕懄ɸĽüجȽ¨ĀܒΧ¾˫Ⱥ͝ŴϾɿƿľøӴɽŷɀ˩γ®얲دө̮î赘Ջˤ̿ƿ̹κƟżȿ䅎Bjkkjfbbcbaaa[]aaa_[Z\]_ehhf_ZXXYXVWWTRQSUWXVSSQQSSOPQRVVTTURNLKLS\gf`Y[`2a^Z]bcbbchic^\^cc_`kif`SPNR]]VQQRQPPKKQWXZ\[[XY_^\\[\]Z[\YZYXXXWUUUSSQSU\lDHCDBABBFIHGHLWT<;==@FMKJ9=DBAACGMJENPMIHILQ]]VVTTRPLHNURLHTbTG?EIJKIGILONOOMNQOOPQRTXWUVXXVWYWVUSY]`]YWQMRRRONRQQQSRQQQRVXWdb[[XURPNMKMNLJGGEEFGIKLORPRVXYZ^`adcbfd^\]_`^`dcbb]ZY\^[ZXWURRUQQPUWVVW\`^^bikeb\ROWVUUUSTTRQRSRQQRMOOGGHIKKG@psADEEDFHJMNORTSILNQX\\_a`]WTPLPSIMMKHJOSRMKOQRPRRQQRROOPUWUVUTUX\[WVXZYTNKISfl[RSSRPNMKIJNPMD@FKKFINLHFFIIJO_g`[ZRPKIMKGHHJNOQQNPNLLKDDFJOOLIFHJKKORV[``\]\[]ZUPMS\`]YVQOPRSRJ6=SSRRSTPRWU[\TLPTXTRPOOPPIKC::FGCgFGFFHIMMMRTRPTVUTQSXYYUTVW[[ZXVXWYYY[[[YXW[\][]^\[^djmkeWVZ\Z\ZZ[YY[[Z[]a`aIJ]cgimoporlgjotphigjjebab``dbb_]_aa__\[ZZ_^W^\]^`cb_^_he]^emmnljdceehkiihfgihghkjikgfiYWsXc98jkjeZQQY]]\X\_Z`c_a^[[PCFC:1_e9GTTNNKH@.B<==pjgb`a`aBOMOO3Lq=M`cn<:fh>>nmAGIIHEFGHIIHFEFFFCAHKLMMNNJHJHGHGHHHJLOUTS]`[\[\`abaa`b_CBEUQ?9@JMSSYW;[XPEDJU`e_`SKNU\aVTTLEzMPQUTXajbUXddVJR]_fc_fd`adnptmb_\`d\jh]]XPNDDW[TROLVcdfjjWWTLKKJHECGJIHID}BIHDvnRRUQpuzuPO~tyEHthxuq}}ljvpddabdgmpikpssplmkePegSMIGyjdq]ppqb__WyuyqlVCKb`iumKMK[VUbmjSDIMWm[[UMJRV]YZYV]bg\bUDNjvorsltHN`adZqDfmpOLfi\YLJgsumgfX]`NKDR\o{ecdgb]]^YTKKU[GFTc^[ddZLKck[MROVbaXKHKP^_fc]efSNWXYWRIELNKGCKM]ZUUW[bltl_`eTMHbzuXclosmjk`\h^[Y]XL}NWUPU]Vf^K@F]YBH]\T]hqypPFSVJIDMYdRSZT]fmoXYRJGKVZQHmeT\Xaliffcaf}muiWKHWb^guEHE?C<;EH?><<@DBBEA?=@IKACL`]QQQBHg>;7642`WY\TQTRWbXY[YTUZ\[UX596321efbb`bc``c_a33679;<==9775465246663334675a`_^\]^e3^\bc^[^22_[\b3234466ec^^YQXZ^a^_^ZUSUUWTSVX[^\OKPUUTS[ehh11100-./.-.-)*,,..+*,-.02331-,+*++,,)('((***)(&&''%%&'**)(('%$%%&(*+)%'+('''+-./0230,)),..-231/)'&&-/*'&()&&$#%)**,+,+*++))*++))*)(()*)(&&&%'&'),25.)&%''%$%$$#(1442)%%'*,))*+,+*'(*)()))***+--,,,..+*)(&%'(*,,+,***)((('((('%$%%()('&(((+"001010/)((**+,.*)*+,,,-/---,..*)+-.0/-,+**-1594./0/043320/./0021/.,,,++,,-+-0/-.0011110/.001116532231010-++,)**))(())+,+*.1/,,.012/2322111/---,+-<.0/...//.,-00-.30001322,*((+/j)(*)+-)')'')(((&')(''***.*,%$+0+))+('''&%%&'&$%%&&&'&'+.,-/1.+'&$#"##! #&(&# !!$#"(+(())((&#((%$$%&!")-/+(&%&()**##!"$##()+)%#! #&# %&!"%*,.-,0.-,+..*.2,+*)*++,)$$"(2100++.//-()'()(()**(')+)+-.023310/0/-0/+)-.,,+&(,-(%&((**+,..*&&),++,)))'((**++)$  !!%"""  !%'%&%$&&(*)))*1/ !""#%)((!(%$$%(/,%),+(()*-32.-,,*)'#',*%#,2*$#'''%#&))(()()*())*+,-/.,-.,--+/12/--)(++*(())**-,+>-//74//.,*(''&'(&$##""#$#$%')()*+-/01121021//0210355441//030//,00/.024336:<641*)/.-{../0/../,,,&')*,,)%?A%'('%&((*+,.//)*-/2422320--+(,.(*++*),/.*),..+,-,+,-++-././.01011-,./,(%#"'/4.,--*)))(%&(*'#!&**&',*'&')14.,.*)%"&%$%&&''(*(('&&% !#&)((%$$&'')*,042/.0010-++/451//+*+-+*&*+*()+((,+00+%',.,+*''))&& !""!"#&&&%&%'((*+*)++**()*+,**-./0.,+,*+,--,,+++-/0/00../37996.,.0.0//00022011434))1566899:<977;><775664422124555453245554310144/1/2334211285006;;;:855779:997678767998:75900@/58852,(+0320*-/+-,()(%%.2$,,))'$ /8;9kgd]YVNK-/.02!0E#,55>! 44#!89$'(('$$&(('&&%%'&!$%(++,,)()(()())@**+.0./55223567787566%%,255752332//128<;86564)/;:978879;=;:;<:;=W>>?>=<;:;@C?>>>=>@=8BGFC@A@AB>:9:>EJJIHIGDGNME@==>>45G=??=9:50143357;<@F?88=9696654314531&!&.149;:338869>BCEEBD?=B<52-588=@<:AEFEB?<600/,+2865-O.4688989:7:@:8;7,'(,398566568:?=;:?DIIC><=812432;>CQE@<=3..130456;=>;;=@71=JSOTYRA<@CGJEBDKOTWUVWOD@KOLKQUWQP\`1ZTRQV*LHE?=??ADCDIQ((+1/-+,,0.*LNPU.2423899;950-TSNGDDGGBJ.581./.18<:3/00/YQUURQPO+,TSPOMJIIILJEIRVRMJIJKLMLIHLLKNW,TSST+RMKJJJLNKJJNLHFGHLNQ).00/10.--,+*w)***((*261--,++*)),/.0/,**(&&()PLLKLNORSTNFCD@878;=;>A=769;<;9753358;87857;5.'# "+33101220.0.01,+;EA:60,&!"%'&%%&&%k&+5553/-+)% '698?>1/,/4.*%#+21-&"#&60*,++,)($&,HF'&'&#C@GF"=-9768:0$),)''-1(#"$$%'$"&&%&$%%!@D%'-,''')*+*)**+,,)&%$-1(CA@;FMED>3%1/-.)%#!&49:98;;@#''('&&%#!$%%),,,PC/%&"##"##0.+%&E&-3613,'),02++-($?E*,-/-.383*-65,%*0055044224;<>8321471;:342+)!"-/,,,+076699.-*'&&'&#"%'&&(%GB!&%#I@:F.,/.:>GB@G.-C=A'GG&;8CEFHK@:AB88A=6888:;=?;C9+*'0,+19:*!&(-:0/*''23/-/2126948-"):@;>>7>E%+E/1416$:>CD-49:>;<:40952.21*KB*30+*2,3/"02#&65.4=AED-!+1+(%)39.,305::E;./,$%(.1.!:8.104:744349ELA59CMM7.($3907<###5:&&#@?B=967BIEH&D@CH<9+'78?68E963:??7@A?=<@@?ACCDA=?AEGDCAABtm=<>?@CDG;@ID@?>EUTONNRNOPRU]`[YZZURTONQMGDS\RG9@HNQMILNNMNPMNQOPQQRRQSWYYWW\ZWWVUXZWUTVTOPNLL2OUUPSXWSWUUTUTVUVVTSNLMPNLLLJHIJKLNPRSTWY\cfea__`bfd`]`aachgcb_[\_a][XTQNNPQRQQSW]cbb_]^`eiieYOPSTSTTRONONPOLNPNLLIFEGJGB>=?CJKE?BCGLPVY^_WSPRWX[b^Z^\WOKMNOOOJKKMNNOSUVVVWVTSSQOPRTXZXTSSSXVZ]^][YWVTRVVSRUQNMLNLHHKMQJ?CLNHJKEGILOSOQ_jfc^SLKLNKJKMMNMNQONMMNLFJQURKDFKMLMOQRY^eb]ZYWXWTPOTYYXYUOOSSUUSQSVVTTUNBSWYVQJ:LW[WUSWYVSQPKLMMHFBABGIMQOGGKNOOQNOMOQSUVWXXWVXYYZXWZZ\\[ZY[Z[Z]^[Y]`_]]affhid_`_[\[[[Z[\\Z\^agkfc^`eeecefghebglnniaac^]^]]Z\^`eefd_]^\YZYZY]_dda^\[[]^_adki_WYbefhkjghffhfdflolhffghhlnhjmhkggl8:7mhg`]ZZ]]X^c\]_XVXYZWMG<>M9@DFIMMOOIEABHKKKIIHDIHB=CIGLMMMIFGHHGFIIJLOTXUV_[VXZZ\\[]`bdmmdedc``cdde_^\_b_cmokihffUASe`__``aejolhhijljloonnnkiiihgfirtpnppqsunmqnjhgfgjkmqqqppqrprurqqsyvurppliffiox{z}|zz{}|vsqj`dffinpjbhlkhedefikllkbqwurlinlpnjc^Z\fe\[bqsovnhjklljkjgjllvztrwqhYTgfejg]UX`db_[WNIIIMX^\TTTJJOY_aea`bekpojc\[ejjilnroaZXXXZZ_djmpppqutjeiliiolfb`\ZdgegaWRPTZ][UXcggdcc`ZX^ckttehhhlllpqrqsxskm}Gyssqiijedhlnrvtvy~GIIEHHJIKLLLKF}t}HJM]ZOHIKIFKOMHJI}ywvtr|{vuux~~|yuvv~}||zxvx}}~IIJMOPPMOPNPQOJGHFEDEEDCGQSMHGJNNLIF}yxointtrvvtturljke\Z`fjfbcdfb_adefi:g_\_db\Z\]ac\UOMPZfg`][YWUX[^\Z[\]nuplbYWTMKJFJRZ`a]_a12124678;@JXed_\WSPNIB<8664221..=ECCD{wpoggw|y~}wspaiDDvyokra[VZRBKctwmghniTYfijkhTSNVb^Q>Ufn}{e^XKPVXQJIKH@<;ITHNOQQPPNNJFDDCFEB>@CEC@=@CIIFEHFD@AJG@=89>89:49<47B<@>@?;CDEEC=6BNMLPYTADA;?Z<;<<>?>@A@H><<<=<;;@A==???@@==@>;<;:;=?ACCCB@??>>@>>>?DDDB??=<;=@DFGEEHFDEDDEGFCA@>:9;=;97589;>>><5?EDC?:<;;:8421175.-1;?>D?9;;;<;;;79:9>B?=B@;2/::9<;7428;:865/*)(,463-.3.,-39:;868:=@?9525;==<=@CA94456658;??>??ACB;9=>::>>:88:8==;<81/,/353/29;;99:73256?>?>=@@>?BMZ]MC>?GJIJJHJMSSLPUW,WNC@AA=<<98<>=?A@ADFP())(NNLMNNQ)(KLNQV++,-..-)PMLFMTQNKL(+OK.95.+,,*(+..*SXY[VQPQPKLO+*QPPPOJGEDBAAGIFDDEFHIMLIHGDBBCJIEEGHFDCDGFFKR+PTSOOR*+.12/,-.,,/.+)('&%&&%%K(/0,)NMPONiP(*,-+**PNLIGD<8=955:;;988;=9779:9<:535874223674/*()/444310//244/,0//:?><5/,(# !$''&'(G"-7731-+)($$'2;9!%&'*+*QC0'% !#!!#""!!!"00+ED#.03325320+01.0.)%"G'&''+/274+047;/.22/*.9976454;:6524865751+()$#/6/+(-:?:61.,35)(**'&&%$%"##""#$$GE>?'/20*EB&IFC)/'B?EDE$@5BMJ@96;@:76;=:9586479>CCD=;ZQG>?*!L0A@IF&1&9.&,/0-&#).7,-0-%%0?5.2/<=717C6$1@=;?;2@L*H6647#=658J+F6/B22+7? !$" !"@?@<<76@HDBEC?<:26&$=@ECA86<3GG-+1,"(8-CC<67=;-07:><9,,*.64- 1;79=>::KRIJKMGCEDCIOIINTZYRT^XQGFJR\UFEFHACCKONIMMJKMRSRRNKJH@>FJLOPQSUU\`_]WMKOQKCBRTJBKTNQUTNKMLCHNNMMLLNHEDHPWYULEGEJJHFEJNX\IGEDDGKJJKJlGGXLMRQQLJLSTPKHKMLNPNIIILNLOPLLNJEHMPROHOOIEO=6?GID=57B869>@;/;@BHA<><;:=@EGECHECBBGEEIHEC<;AHTTINSZdifc]\WSVYWVOGEKROKJLISVQNPOONPQRPQS#VWVXYZYWVUUSROQVWUQNNPRUWVNPTSQSUTQOYTWQOMMNRQLIKKKLKNQRTWXWZ[]afd``^``bcc``^]`a`_a`ZZZXW[\WYXUSPNNQQORVY\_`_`]^dc`bc\XTQSRTVSOMKJKLKJJGEFGDBBBCHKF?@ADKOSW`qm]USTSRZ^TY_][SQPNLKJHKNLKLNTVTV[]WSRRPQPQTWVTROPSVX__[Z^^\\WTRRQRUSPMKMRRMJIHHEDGHMJGHHMQY]RVY\bc|`RPTWWSOPRRPLLLJKLOSTUUVSOHDKROMILRW`aee_\[[ZVUQUYYTSTRLMPSYXSSVWYXVVLK\WTOOPRVVXUXX[WVTNNRQNKGFCA=CIPSOJIGIHKOMMKLKMSVVTVVUXZ\ZYXYYXW[__^^]WV^ab`]^acghfa^`^]_\ZXY\_]`cgjkjfc`ccbbfbWde^^^cfd]`_YXZ][UWY\_acea\\[UTUY\]^effeb^\]^]bd^ad\\___`bgfdeedc`blmkjhfdggjkffpofeecdkiia_cbX^^^]ejebc^WVXVYVSQEHQ3:DIKOMEN1#05rjijhhfc`]BWWVTT5E[OmxtbX8STCD9hS]FGEBDIKKLNNORPQRQSSRPOPNGFIKIHMKINQSVWUY[YWUUXXY[^_clqroga]`bcdhdccegghmlfggehh[IY^ab__dfeegfecbhifiljhhfghjgedelpnqutsopuul_ehhiiihijnstpruwwnnnlmssspmomjgcdfkqw}~vonsx|zwtuspnliihggfjkmopsutvttvv{tywrkhjonnkgjilsrmmgjmggmnnlihlnnmprusoc`jijgccWMW]ZUPJuyKakgdZZbcc\[cd]XZadcdllov}nfdbbcc\YWSRRTW[^bcbhjinppwtiffaTMV[\X\`[[^TV]b\W[dggbZX[_dknmkljgdjrkd_`gknvyqg\_gkmnqxxplnstqlkopmpxzy}ytroopqrqpqtqyz|rihhgir}KNMLRXTKKN~x}zz~zwuvursv{{uz|~|{{zyupolmlqrrtvvssvz}yy{|LLFKOJyrBHHGGFIJGLMJIG}xuyqkfjvxwwqkjfegb[[ZWX_a`\VUX^[`_\_bdgfdgnh_YUWXWUQSW\[]big`ZVUY\]\Z]\Y_irpfa\WUTPQVZ\\TOW\\]^135668:<@Sac_\YVSPKHC><952433343=S[ecbhe]\XX_WSTPPIA;58GU^i\VSOONHFGEDJJHJMQMFGJRccR^\]dNKRTJ@LWPHFKE{}KVZ\NFBEGKONLOMJNPPT\\WROOYYWOKMMLGHNQNJHIIroqntvkaX=NEZmnow:99sBJMIECGCppBLLKHGzdRTVJ?=./beb?cPMXd_F?CWQ@HSGPSSZPPmm^]OavbfjpePOk}tyvo{}rmdfLBhc`q^RhkeZ[lnbltkgtiaVNfvjhkkcSPIVovhZ^_ZWXWNSYdkbjb[^d]Odb`\`^`]_daRI_v}q_YYSPmfNLMMA@S^aaca\oGnH[h[[_jxz|vbVXbj_QYXRUHCU`e\\S>JQDDT[UUXUNMQSP[Dy_eoe\\WXTPIJQIFADFEC_kjep|gTW[LL[cihe^gg[Zcagjl}{qwxXRNPe~}@@uGLA@~?{pjf_]pskp|xslcckn{y{FxabrguotocRNY]WR]pidR\hoqkUKNBSla\Zp|xomfebYMU[UKPSHA>69IFCLOQLRUQNMFCAJNIAADJGCFB=FHFFJGGCADAEC47DBC>98732;DMA?BBEEBEE>:JFHJUQAu?wHXf9:7446421cda_^baZcaaa[`b^Z]`UYa588434643ffa[Y^jc\cc`bc5;93_ff36O42267d`55d2652___]^\Z`ih_XURUah77i\VVYa_2681bdc\YWX[[Y\]^`b_ZYURPPTW^_UOMNNU\]V2(,3421/..//..,,-+)))*+-//00/--//.-+**,..-*(('%#$$%$&&&'''&$#"#&(%$%&'(*,,+)'Q%#$$&')))*+*'()+-/0,+*)(())**+,-,,+*)('('&')*)+-/11.-+(&')*,**()*-*'%&'&&'(-/,)('&%&'()))*)'&&%##$%$#%())(('&&&%%'(#*))((*,/10/.-/-+*),0...,),,**+---/,++-/0.,,+,-0/..0235531/...,++-..,-/.--+,,-,./../-.1/--,---.020021.-//-.//0110.,-+,--.,,..11//0;-..1/+/231.///./-,-,---+,+,+8+-.),**).*'()'(+,)('('t&&''%'(')**+,($##!#)./-+)&&&%"#"!$$&'$# ',$&()%#$$#(,'&(+0/**1+'" !%,+#!"$ "!! !"$$##$&)*%$*-.--,/1/-+('),*&$--&!(/*-/-*())#&**)*)*,('''+--)%!$$()))()+0/##$#$&()*+*(&0*)//.+)*.-+(&)+*,-,*)(**)*+)''$ !!!!!%! ! %&%&&'**'%%'**&$(&&$$&&&(('%! #(10((&'*-18<;942/,-/-,($#'+)''(%+-)')))*((')**)))*++*,--.-//.-,+**(*-.,)'')*,,*'5),+*+++)))**-.*))()+*&%&'&''()*+,--../14200//01121000242///..11/0/..-++-+*-1223324248623300--.-/0..-,,-+*)*+**+)''(&$%%&()&###%),.27??50/10-03/0432.-,*)(*)+-+*+-01.0451-+,*++-.//-+)*Z,./13001101.+*,,,.-+))+--))'$&'')(+*')*-036-./.221('*,+***++*'''%&&'')***)(%$'*)'$&*,12341/V--+.0/,+,-)*,,0-*+...--.('0-+***+,,.-../,,-)+-*('$#""#'+-($$$%%&('(('%'+-,+,,++,,,-.-,+),0//00--3221//123432021031/,-/2/246788653455476/7721/242/33.--0/+.01455752220..0112567740/232560240244334886665436;;98666899988>=87757;:93133-221/350*)&$#$"#""% */$')+)$,!.8{mhfb][YTH-2./14#+5,;CB4/!+.%$><852457772234668:8454456/$,/56548988:::88;<;=?=<<;9>A@BCA@>?CD>5:?><=>?BC@@@AA;;==>ABA@>??>=<<=>CGKKHC?@DFFECABA?>==>=<;::9;<=@BBDBBDEHLNSVMBCC?747;==:6877;>=?<<=::=;;:98<>>=>>@A>64===9784-2863.)HBE+7<98548:944973138:98<>CGLB<;;::955532124669:9>>=?A@CHIA;;:7.-589799227/04631389:72145:@CD@@?<:?C<999;=?CFKUNC=68@BGJKJJPWUVVOE@>?CDA??CA>@EECFJMNICAA>??@ABCDCACCLRPQQPOGA;<<=>FNV\Y+,+)-10,SPOOQNKKMLO,-ZWTPJGLOEDNQPMGDCCEBABEGEDGGIHFDEFGEAA>==ABACDDBADFGDCKORLIGEEHMS++RPOR)PO+.+PMGB<$&%&&'*,VSOOLKN*,+*+)PMGDDFA=9:BCFD@>>;<>:443248742/0345975789<:973/)'%"!#%%%$ #%$&%(14310-+)&$ '-567;721..3.+,))#$/5=3.-*+*%$%$E%(('()+($$%*67+4314&%+-& (-*%%'#=?'-./'#C#$$(*(')(%)*)+0/+*(*0..(')**&')+*('((PMJJ@>><@@6.(!+678;6!()&$#'#88")**)*OG9*)&""#"#$33(AC)016998061,54Q22.*'%FF%%$*,.43--+5:5004.,/;=4112474442087/76/,-+++250)&0<@61,/254,(*+)('$"! !$%#C>9$7YR<:%7'*.83&!-,!$/)-,,0*(8:43)4BMM26:B9();E?C?:DCHC8:4;)!;63;UJ2,:;6/0<<25:54>751,6E:7997-,&-<>6.22/-//,.28;493.283)54/03131363+%2>B9../-+:3('(*"!,14230-6@%7/7-.18>>@?3,.5=5*./+-'%/59210F&*-&#,110,*'(+.,5*=7?@50311-*%(.(%! !0::6;B;,-4))05974/66,,126;;BGAE;961169?;5)(//-+2<75*2:?>:.'(#/>510>DC@>762+&*/,&*+$ % "%'#'(%%$ !$(#$" $""#" #!!!!"""!"!%#%"22#%,.+**/-*0/0/*.0+()*')+01.+)+0,)+**+**..,*,+-,+,++/21+)'&&)+-(&'),)*,-+*))*)'++-./.,,*'&%'',.($(+,'Ԁ~~~}}|}~ Ł́~~ -»Ӏ􁆊μƹͺŀϽɿʵѲ¸»򀍔¾¹Հ¾ûÿ¿Ľ¼ʀĽƼ½ǿĸ΀߁ܼЭࠂѨ镘󄐑ȶ¾¾nĿ˻ǽkɿ½ľ˾²ل׀ڀǽۀžℝǸŮƶ򀄊ñ˵򀆗÷¸ĵɾٻ̤þӾ˺ѡѷ蟙˲ȯ˾±ƾ̫ƻּӀιþºŲƵ῟źԿ˺梉ϭź·ֺϹµɿ̳рӳôƿ咽nɼMYY]bcb__bab_a``^[YXUVWTVZ^^\ZYYZYYZZZ]__^ZVSPNMMMLJIJLLLNNORUVVYXYWTSTUUTTUUUVUTTSQOMLKLNOQTXY[ZZ\XWWYZZ\[ZXWWZ\\Z]__`]ZXUVXXYZ]`]]^ahiged^YWX\`_][_fha][[\YXVUZ]ab]\][ZYXXWVVUUVVTUYXTSUWWVWVUVUTTUX[[[YXVSQT1X]133244555455579987876620\]]]\ZZ[]begfc_\[YZZZ^25.77653334631355345446653345520be432dd^\\_`ab`ccdFc_\[XX\acde`_b4hhdad3343569963ddcaabb_]YX\afee57643b`_]^`bbaa``dda``dcab`^_abdg4ihhfe356766554577654446543ddgfefhfdda^^^]^]]\]```df44334322444hhke^_bad69767656655899;=>@A@@DC@>>=98675fc``abccb54f348999:97421b`b36885446730_b47853`[Y_`]b42\\^`23430]\]1222357655fegd]YZ^\]b1`^\\ZXY/43/236775652_`^ZVTW\_``\UOJGIPUXYZXWVVQMPNKC>>???><>FHFGLHDHLMGGHECJG@CHLSVR[]TRSVVQRURJMJDA=CIDBJKONLGINNLLGA;?FLKMQRPPQSX\^VMFGLLHELJGNWTPSONNKQOGJQPPMIHKHKJKPUZVLHGDGB<f`DG?:4__>A>@B<96?IHE?56di9=@BCEFEDDCABGNLGFMNPJILMLHGIJGHMRWSMIGIMPRTY\^XTRQTZ[UMKMT[\YTRRTUSQRTUSPOQUTTTSTUVVUXXYZWUVVWYXTSVWWWRNLNTWYWTPORNLNQSSQNONQSONNONOOMJIKJKKLNQUXXXZYXYac`a`_^^^_]\[\^^__a`\UUUTTVWXWWVUQRWTQSVXZ]`bbabgia`adoiXWUWUSQPPPQPMJHIKKHFCDECDCDFHECBDGIMRUXYXYVSSSQQRSTW[[XXURQOMORSQPQSTWUV\``\XXVROORUWVTPOSW\]][YYYZYWXWWWVTUWTQRVXURVYRQQMNLOPNPU[XYYXVPUVVXTTWYXZYWVTQQQNJLLPTXZYUOJIJLNOKLUX[deea]\\_]YURSVVSSURQQOORSSSTTVWXZXY]VTSRUVUUZYYZXWYVNPQRSQLFCA>BIRWRONNNLLNNMKJHHKNRPOOPQSTVYZZYXWWZYY_^]b_XZ`a_^^`bgkhdaacbbb_\TTX]_klhhjga`^]`a`c^Z]]\]]\`b^a_XVZ]_WVZZ\`eca_^__YVZ[^^eeegd^YZYY\\TY^^`ab__bikhefb`bbc`cjfaachhge`eebb_[ZYWY[WUXSUXVUW_53a^_^][_]WR4;F?63`=HGHHB@<@JRMDCDIDBHJDIGJJLKJE>C=CD65=@EA><7b\AB?><>BA;68:;:;;<>?@BCCDCDEB=<;=><;:::9:;<<;;;<@FKC<<>>ADDA@>;<;:879978:=AEFB?ACEIHHHGIMK?=;502/5CC:33,/;>847:99::89=<;>>>?CCCA=:5<=:875:84:92/++17;=@BEE@><8647865569=BEHIF?<>??<85331101344557<<::;?C@CD?=>=:0--+-.03238646657967678;@KTF=>778;;;96766:>>=@EB?>87:99:=?EQTIBGHGFEA<;:879768967;=?@DHJGBA@=;<=;;:;>?;7HPOIE@?@=<;;<>CHPZ]VT+**++UQNLPPLHIEHJJQWUOG@<@HLC:=BFHFEECCBCFIJIFEBAACCA?FGBBCAAGJNNKDB@CGJJJLHA==>DD>CJJIIIJKMMIKPSQQKKFG%&'((QSRQPLIECHHINRNJGFaFFCA@;BLF@<<><89:95210345122-+.155136888::950.11000//257@A:862/0/+,0-&$)6=;764.(%%&&%%"#$$%%&&%*22../.,*(%#-05983///,/1,,*-,"&(*8;=5/+-/(##%%$&%#&*0/)%%(/6465-02,/63($'**&$"?B(--.,(&$&&&))'$&'(+)*,0/*+,-++-+,,+*'L&/*C%*MNPI<8;;BA81,'!*9;;=:720!-*"E&&>7?&))KL)H9+'%#"! #$$!31&#'.14;=40+1,.5481+*&%$ECC$$*1331/.467202234;:431/2674/269716910/-*+46/*%+1441/510/.+***)'&#!""$&##$$B=I-)&-)')I<>>C@?FD>%#$*E;8A=:6:C519@+"?NLB?<:<=<:7-125.'+OGBCHF/%<]B43,&<1--2 #+ ,-(-,1/(6=9.52:>?J8.&-4:55;??>D68@4)&(3403+2DC<.!/043296286/88981,;@1;<960'"&/D?.13211.$/1397:31/-41456,/40210-()=A???1.)'/B3%('&)*12-09+.26;<03:637;<>=62234.+-+'')-474,*E?8))('-3?620+'),.0,'6FB..8334-%*+'"!!"!!'/963121/.,),4<8-(46257;<;87:AA::9A@=>7436B" -8('#@<==<<62..8@>?:=<23;69BF>8<2/67:B286561,,'()-253.13;;+2=0+6,-2>J>1.4.76)-,**,,&#$ "''$&#"%!$($ #!#$ $!#"##$""!!" .(('  "% $!"##$((++,+,,,./0.,.(-*'-/(*,///,+*+-/,*+-*+R,-+,+--..+*,+-.1102+%%*--)%&'')---,--+)),.0110/.,&&'&(),,'$#"#&*,Ԁ߀~}}}|}}}~~}~~~À 򀳁 ˁҀ ŸĻÿż򂆂􀂀V󁄅􂋏̽ؿʼ¸ȹǀοŻбƱ¼ƽ܆󋙛ƽƸƾÀŻǺɽ̺üſýӀƺ»ƺŽȺŻϽµ׻֙ꂲ㉎٣儊ހȹ»¾ƽ؀ʹþŵŹ̷ĺɿǾ适րʷżôލ̴񄒍ö˫IJʽɽǫƻΆʮ̽ľŷ©ო傜ƀȾֿĿƹ½Ʒ˻Ϻ;īݳűƼĀĵ퉆õóǸ܋߁€͵ƻ˫ȵıöտށ򃐒%ȿ€WWXZ[_\Z]^abb`^[VTWVMSXVW[]][[ZXSSTWZ^bed\YUPMLOMJIJLMMOMKKPSUY[ZXURPOONMNQSUVVWXXWVVTRONLNPQPRTVWY[[YWWYVTW\^^ZXY[]\[[`c_^`^\\_0a_ab]\b464ecd`[Y^b`]\\dkhbddcca_[ST]h776mkifb^[YXVXXWXYXTRTUVXZXXVTVXYZ[ZZ[\^`12312578:;98402441__233431ca_]]_]\XSQVZ[]`bba1255667676554233369:989976320/1332a\[\```__a12b`af4gdglfdd_YX[_47642aa_`]Z[\]`_c3hc;=63cb`^_bda_^\Z`ihg44233222caaccfhgfhhgc```aacec`_digba`acc246777643cac367767776543dcdg35fddded_^_^bfhjhec3433eeheb`^]]][[bk55544435469;>;<=BFDCBCAA@;78;97655fe4hhgb`a25;;7544553`]27952002210/25665e`__c2133^[_124542``11454589867;=;;;62a_[[\^\XVWXXY^/220///120111ba`^WRQSVY\]]YRKFGIOTUWUSUVWXUKA??BAEFDFJJHBDDADEBAF@;AHLKJLLSVPNMLNPSSJJPSKGDABAIQQUROQQNKLLMKG>;=>>GMPVYWWXW[WSNIDGIGEDJOQSTSSOFHHIRTPOOJGGFBCB@@FIXhe\MBB?9:BKPXa`SFDJOQPNFBCHCEGHFFKNKEGMUUQSTTPPRNKPTRPOLJJIHNTQLKKB5\U6VD61[58?@B>>=?CEL@g5fccfj?DDFGHFFGFGKNQONMOPRTUUUQJHLQMKLMOLJIIMNMLKLKKJMLKKMQSQPRUWTOPTSQPRTSUTLLORVZXVVVXXXVUWYZWSVX_d]WVVSOJMPPTX\ZWWSSVMMPQRTSMLMOQPPOPPPOOLJMLKLLOPRRSWZYZX^daaa_^_`a`\[\[YXZ]\ZUXYXWXYXVUSTRQUUSTVVX\akpg_^c`\\_p==zpkieb_Z0@J.2,W6_Jg9996h:;FB;i8CGB?@FJLLNPOMORTRSRPOKFEGHIIFHHJMONLLKJMNPUWUTVUUTUWVQVY]\\_``cc`dijjijhbeihjlnhefga[`egllgdgggidbcjjhijkljilmjgdcbbeijihinpja[Z]cghjklmswzzvqlihiklhecba\[]_ab^\[ZX^jmomjlonlkkjifhfW^ehikommy~yww{~~zppmklgfpsfVHCXpsmfdfb`__`cfqu|{nlnupklmjgfgjifdijjifcgrtvqlecfjku~xxrlijkhdchlpollf]\``\YVUVVSOOPTW]_]abaaafnk\acfeea\efYWWPPYTO[__`cfjkid`gt}|wibdhfab]RRVUV^hng`^eac`W]]YWX]\ckmhegjmpsrib`]`fdcebcgnsy}}zuoppicfnuurnmno{EL}plltzz}}|{|JKIwpxv{{}|ohkpqwvmie]`ivwnqvustvvsoolhouuv~ursps{~~{yvy}~~xrjkmsv{tw}zx}~z{JGFHJK~}|yy|~{{wsty}qe`cb`^]XTTRZaghge^]Z\]SJJPVRQOSVWVV^d^Z]]]^bgjn`YVNFFKNORY[SWfttkeih]YZZXZ\ZSTa66da5[Q[39;<>Web]YYZWOJE|s656777;?<86AZceeb`[ZYWTQQTY\UJEBMSZW\YNJR[MFDGJHEFCBKUUME?BDQXW\V]kja[`RKHORNIDBEKOLNLKLFCEEDACHJQTUTQQLWWORSQOTTUUROMGDMV~nJP}|mflhql[T^jh``twvwvuz~?CNSFyvxDLIwu^QPNTQE<=CHGHILRTTY\[Z`1`=k^MMU^`ful\[VVQXbdfWQLEHH~~DHUW_d]\Zgsmb^dfjupkg^\^brq[^gjpgdi^WVSNR]e\OJUaZ[W]bYUROMNOOPNOHCBDINKGEnmEHJGEFJJ}vExv~EG=PFQ~qrzuohlwufhhvqsobU[twqpfdbhnplc_XXOMKyqc_]ZS[WwrfcbWZ~jsK|q@OUQA?gAQFLTXSC?mjbhkfaegg\EOek{i^ovnoxkdZOPRHMQQYsl`XN^]g__b`Z\S[idfeb^^ilszxqf_KJQtse`a]YYRxYcdnVheZ_Wgh_TSK^`Zc`XJNe{yiYTPdtYSJBMZ[_QYb`UYcuu[mvabhkklomg`ZUTRUVRRPV^dbRDoHJAXOKHUVM]aUINMJIVSOVbZ^b_bbWUURMJONJDENWfcXW^cYQRQU_bXWhqkmokqvtlhktsqxv{sqy~|jr~vcBGGIwkdn@qfh`^rIqhprtt}}wfgionidZ[Z]cdcLCHNS`hcRPLHHDRehZjbSUZbWSURLP[WQM^cfn]R[SA@=@EGNVOMMQPJ;;<4P2CFA?FKB>H><;FKEB:Ke45678667:<964aXYYW\ab_bggb[ZUWf]Tb7aYa49754554eddeb__]]cje247;=997a`b26gb563f5643ea_de`\[\__]`_fhXOUag32ec[STRV_06::7h``bc]XZ[]bfgebaZQTRRTVXWUSNJHJQK*())*,*)+-//0.,*(')+('++-.//./.-+*)*,/122-)(%##$$! !##$$$#!""$&''&%$##%$$%')*) ('%$"$%''((*+, *)*)&(+**()**)+-,a-..+,-*(+/000-*,/-+*(+/.+--,+*++'(,032/-+*)(((''()((''()(&%'''()()(&()((()(()))&%H++***,+)'%%'*)**,++)'()*)**)*+**--,/.-+,..*++,*((()*)+-),+*)+--,+..,.320:.--./1211100/---../0/.-00.+++,./....,,-//-./1/...-02231.-0/11.,**,-++-0^0/10.+,.++.,--/**,())*))*+*'&&''),,-.-+)(()+-..,'$!#%(-,,)$""$$#! "#%%#$&&%!""!" !$ #(+*')*+.)&&'((*,&&)*&!""$#!"" ! !# ###+//230///1.*'%$&''%%(+***,+)%''(-/,)*(&&&#$$""$%0851( "" !&-0485-&$(+///*'&(%'(''(,.*%'*.-+,..,,.,),.,+,-,+*(('$##! !)%*%"/43678"'((( )'((')-/0.-+,---+'&*-*(')*(*U)*)()))'')+-+*,--+)+.,+*+,+-+'(*+,..---./.,,--/-,-/361-++)(&(*)*-0.,,*+,'(*++-,'&(**)'(&&('(()*+-...-12120//01220.-.0/-+-.-,--,,-,.,+-//015>B<6685323?!951/,..- ,-.,**+*(&%$%%$$&(*+-0123650&/-++-++-4652../0135444569==;89>>3-,..,-c/23110264311/10/121230/0431048::7564/0..55/165000--./.-,,.0/.-.-.*(&(+-+)(('()*('$&/543554.)-10..34-./,,()-,-,+*+.0/U.,**,-01-01//-.2/-,.2-)',(%&&(,-***)**)+,+(&))')+*(((%'*,*),.-+*././20/0001342122332230210.,+23663344333487310//0/.0224752..0122123563243/0223471,130-++,///235535432465434544555;:656:9994577521..(",/10..//.-+0600/+'(+''+ 716$7"(<<<<==;9<=::88879<>>=>BB=83249;::<=>@A@@?=<<<:;==;987545798435557<:69:24;;@C?;>?>=<==;769=>==87>?@>:78::346::961:<213/04/,46546:=><87;FJIGE>:::7//1005;?;75;:;928744465@AB@;7425:878658>@FJIGEAAB=68?DB@==<>J+-SG@>=CGGHEDFJHDFMRQOP**)POQSQSPFBECFKHIOLFA=??>DD>=;45;DC>BFEBCCDBAA>;ACDGICFD>CIHKOKHGDCDGGFFC?@?BEGJDEIIFDEJJJIFGIOQQPR)'&()+TPNNKJKJFFIKLJMNKHFA>@FFJNH>:99766630//39=<;:64343+)&D/1/.-001016622344578;<34/'##%&&(-+%+6==7244,'&'&&&%"!&'%%#*431/01/*'#A<3-651010/,+-/0+# ',2020)&,4*$$&''%&#")//)#!*003/4;93.3+(&*+(%""#')(+)()%!$$$#$'(+-++*+&,-(*,*'--.-+++'%*.?5(,HDD;8<9B?3.250*.<=>@>=<<',$>FID@>#)(B@KNC2($ $ "#""##91(*.226B:11..+067:/+'A$&&BB$B%--363117>931336<9650/03=>0289<88;3/.-),591*&*2- .,061-++)*)*%!!#')&$$F:8E''&%#%''A=I&==C$#'%+BB;?7,-ARCAA999;<<833/0,+,QJHF;7673>7TD@>?;12O;BOP/QJ?%/.+!"3"/'+///$<7557636373 $45@8.9@<;G?84-&$#"%((,>G821(4061230-0*.846751076:70&$*B=2131/0-?265:,64.0*681++&14/320((3FD?=D<3.-)4>++($*.03*.3/)+0<=+8A227:98:9720,*+,/.-+2498,$>*)%60,)-/'16-%()'%23--9743231,+..)$&&#!'.43-,160*+,/23++8;67:7:>=:78=<9?=?;9?CDB69@:.##$'E<838!734/0?J&84:898DB??A;7668744.012796'"$')/32***'%#,79/<7+,.5...+&+2-*(/027-'-' !&+%$%&&% ##""#$!##$%&%$$$!! %!"%# #!%+())'*+++-00.,+)*1,'10+-.---,+,+).1-++--+.-,-//,*)+.,+,*.1("%-/,,'$&%'*0../1-+,./1342/-*''%&&())('&$""%ހπ~}}| }}}~~~}~~ဆȁ ؀Ҁր  ž˺EĻ2÷üƺþöغþøŽŽþ¿ǿ¾ƹـĻÿ/Ŀ̄ɀĿͽ¼»¿ûȀـǵоƵ̪׬܍׀샊¿Ƚ¼˽Ԁɻƾǿ¨ųź½¿Ŀ׀Žý¼ǺʸǺû򄂂琜жı̶«âɾ±ͻκɂýǹԾЂԲ£ϵÜ˸Ǹƫż׾ȷªĿʺ̺ͨ޿ɺɾ̀ׄ࿺༖è˺Dzɵļú肋M󅌎ƿNPSXV[^\]_][_^WURRTZSNSTVWUVWZZYWTQRUZ\_cgf^TNLLLORRQPPQROOQQQPPQSTTQPPONPSTWXXYYYWXXWTTQPQPQRSTWYZYYZXX\[XWXZ\][\]`_^`dghhda`bec^^`_]accc`ab`^[^fhe`\aggg79754li^^cfgcbdgkkjdachhfc`___``_]YWY[WXYYWWWVYXYZ[[[]ab123331/46765310010]\Z\bcaadb]ZZ[]]`baac22233211122455345577999632442_]_3455564aZVYbfg34hdbaMIXeh553hgfccb^\\`f454`]]]^]^`a`\]cc16ja^_bb1bd3d``ba_aabgie``222ffdbabccddgkhddbacdcfccbe35665hghi676569;:::;;:::98776642efeecacb```_aa`dbbe3234fc]\`chijg`]^_\Y^a_ab586668<;8;<9;<9:;;==:65455566564`_]]``]Z]eha\]]^1101344 54cag66543b`d21011358;<;:;:62474431][\YZWVWXXY[_012-UUY.YYZ\[[]{[YVX]`a_^]WMJJKJLPSXZ[\VNIHKOPNLIHMMIGFGHKMHDEFECDFIJEHLIJIIKJECJMJHJOPKDCIOSTUVRTVVRPMKLJG<>?>HWXX[\Z[\Z[YVPLMPMG@AELNNSZSN,QYYPJLJEFHLJA:?DJ\bgbRIEEEGOQTX^_b`XSRRRNIIJNLNQTTQNSWZYXXXSLLNOOQROPQNKNOMKJLMNLKOLB99?FI=315?@A@>=@EB=02MA879<=;;>DFEGFHIGILNPRRQQQRTURRRIIOPIDHLQNNLKKKLLLMMLJHIIHHNSTSTROgJILQRRRSQNQNJKMRUZ\ZYVXZYVVXXZ[YZY\^\XURPOPTWUV\]XSTTSRONLKKNROLMOOQQRRPPQRMILNMNNQQQRSW\]\]^`\^`_^_``]ZYXY]\_cd_YY[[YVVUXVWYWUY][[^frqeZV\gcagt;mc`ZTQNMLOQPMONKMOKHFDEFFDDEDDFHKMRVVWXYZYXVTUVTPPPONQWWWURTTVYZ]``^[\addfcfmgWW]^[WXYYxYZ^^]Z[_ccb]][WTUWWY[WUTRSRQPNNPORUWQPRSWZXTUYWW\[YYZWUVVWY[YYXVUVWUTTSSSTTOOQRPQSRVZ^bcehaLHY^`]WUQPSTRMNNI=LPTVVWWTQOSVTRQQUX[`c[UWX[[Z[VXUOJHMJJKJHJLKMOOPQPQTTRTYXUVWWVSOLOQSRRTUTRQVUQSZZXZ\_`_db`ca^`bdk`]\^]YY[[^ecab`bcb`[\^cc_]^ZZ^\]\]`gokcYX]_]\^_bcca_`b^[[YYZ[aoodXW[WUSVWWXXY]`bbcbaaabcba_^^\[[^a`a_`eddheccb]U]ZZQL^XVba__ZYYXUW_``e`SUZOHV836>wmmmkihed`[U5GQ,+S1T:V`8i]f;?B>98:CHIKNKJIKMOPQNLHCBGKOPPONPSOLJHGIMOPOQTSRSSQQQURTX[][\^]_`deca_^]Y^fe_^_aeffdcbbdfkkicacddcadgjlprsqmmlgegjlgcfjjhfhmoqrnklrtrpnljnsqqmgefgfeigcbaa`abdc^]\\]]Z]gw}xxzqmjjpmnvrmlllkiils}~}zzIKJyqiddjhec\SOTSZovsqsronic```_l|~rklloknonmfcgffiopk_`lopwywjWS\ZW^dgkw|xqvwxwv}~}yqlb\ZY[WSPQTXWTSUZZYWY]^_][bkhdeihd_afgghgfa]\TVXXZ`ikjljb_furgeeginsi[QPQRTSZeg_\\[^^]UNVWXYWXZ[^dfaflkloljieeijhecejpv{|zuokheklfdlutsvwvw||rnoswz{}{}G~}wsqqp}}xroguyqpmknpssrxxqlnomkmpmmtpnsphmlhqroz~zttsrrrhbmsvxwxutwustxzyzzz~LQOIF}~{tqkjoy}z}zuswzrha^\URRSTTW\^`acbd`XWZXSTPTdYPQQPNQV\digeegeade`^Y\SDHPVXWX\]Zdrsomhc^Z[`d`Z_b236952561`59<>@Q`][WVUSNHxtq7668:845650/6N^`]df`_ZXUTVWYTONQUUSNMPJHISPGFEEBBEFB:krDKAL[\_le_WOKKJGLMJD@AFHIGDDNSLGFCBBFKKOQQQTMJRVTVTRRXWVSQQOIHOGtLUFwsspmnlp^Q\olgrxppvurw}DJSPAzyBHKv}zhTNMP@;:FGADEGNQSWWVW[^`4YnZQRUTY\aYWUTZX\`_[WVLFJNICFEIP]hjd^[isjcknijsmgh^YZXksjhistheh\TVN?HS]eWPSRQOS`_WSQPONNPTSPMIGGJOOGC|GJHKHCDJPRH~|l~SMohEG|trjdnrsmeggostkcohgjnkpqnpjmzzsg[UTUWLFzt`hmRLKL`bfrlnkli_WT{v|HW]^If\?JFJYUEKVb^Rq}kR[wdPURYefYg{wktG~kY\YXN8CF59^ee`_PTdhXS[d\[`_^adZ__d\YHL\b^rbPGEaql\[[ZVHN`d_fjdTX^`fbZR9Sh`g]OFQ_kkimnTINfj\KHT`V^TUX`^bhieplYaijdhjgc^ic\WX]XNU\W^VKAr{OUQNWTSVUTS[TA~^_RH]i^Ydg_ZT^ed[RNHDR^g_YTY_aWVUSNX`]lzqhifadiorklrstxy}pmIxrjBD|~g^l}Bobvpfs}y^Xsux~}yts{ybca^\^`h`FIJKW`_PKDHTKMY^RXn^X``VCCOFGTWNGR^e9gRQSUJAAMLKOLGGOWRGBGIIGKMLDAENUXXWQLIECA=>D>;8<@AA@:@B5:=>;8DG=5>AF;n?EB@]2347875689:9994Z[YW[aaddgcdd\VW`^S`8gW[an686765f3fggece``cfbc46:=96:5_`363b5852664fe`_bd`^\W]^]\Z^b]WPQU[baef[USTY[`58:7geeffd^\ZZ`dc__aa`YRPPSUUSTUSPJ&'(+(*,*,.-+--)(('(,*'')*,+**,.-+*('(+--/23/(%$$""%%$##$%$##$%$$$&'''&&'''()***++*))*)((('&'((()*+,+*+*)***)(()*))*,+*,.//1.,-./.)()**++,-,./0.+*.11.)+.////++../-,-.00/-+-11/.-,,+,,+*)(()(()('''&''&'()))**'&$%()))++)''(**-.,++L&%%($#'-./.+*&$..-..-..-+*+-*')))()*++*+..0,+,---.-,-0/.110-,01/.././0025411/./.-,/0012.7-,---,,,/.-/../00.--/2230-+---+,--.0 (((),+*+-10+8,.,0,*.''***)'9()+##&''(***,-,,+**+.010-+*%$%''()))&$$" !"$'*))'')(%&'$#$%&$#$&&##'&&&'((%"$(''(*+' "$%%$##%&%%# "#%$,7534521200/.,)+,)%!"%(*)+0-)**+-12.)+)%%&)(""%(2363+&%&'(./0354673///0,*p**,-.-+.121.-0343211/*)+++--*++)(***('&$!!!  *" !&'&(''('(+./10/.-+,-+*+&(,+'%()+))()U*)**)'&''&&*--,,+*''*,-,,,*(+)()*+,.210./0/--..//.//00/.,*)(*-.+,/0.+,+*)('''(*-+''(')(()*'&&''()*)))+-00/011./0/.001/.-..-0230,,..-,,,/.00..132129CB;305;647A!;550--,++,.,+-,),,*('''('$%%$%&()*.000123221/010.-..-/2221/01233478877;==>==?<11886222344664336877431.-.00220...//. /.043/-/156300210432110..--/0.//-f,+***)+)()*()**,./12363'#,/32/.,+,-,())&'*-.---,*),./..,*))+,-150-/001/0..-+'&)'')('')&'()*)((+**,/-+,N+)'(*,*)*+**)+,)*..--.122543541344920022/.00263232345423234322002011037;83./221)35554463110/025><6002.-,--./01234565433443q4100254623777998773*0-+$".**54330/-+))-..0-&'+%"*&%#"673*'6;rjkigb]WWQJ@$,,02"367-5 " $'')+((())(*+++-,R+)&$&*...--/0,+*('),././00010../2/02320010369966442-141../0357522467:<<:89::88;<>>?/==<::;==:69<;;;BC@?=<<>A?><988:98;=999:9R34335656;EKHGIB?=<@>=DC@?>>>=;=CHGDABHKN)**OJB=7447421.)&))-;A@?B@==:76553:DE>;=>@=??;9<;:=BB?87>??CDC<0.6737::=FKHCFFEFFJKIFB?8433641/.02212275324658><99<:868<99=<:644112026:;:>=86:CB;;<>@DE=4/-/10/4;<75556772.345536779>=9<@>??;::88;;8634:CGFEA><<B@ACCCEGMPKEA?@BEGHIHI LMNJMTTROP)RVXPMLFCAA@JPLMMGFB>:5CD???>ACDCAEFBAABA?@A?AC??DA=@>;A@>GJGBBAAAB@AB;8?ABCBCBBDC@ADEEEDEGIKNQS.1.)'MLHGIKHEC==@EKMJHHFCBHPSZYNDA=9750--0112445786761131..+3<1,-..,/479;999;:7986445* "%')))+,+4><972-*'&(*'$&(%%///../-*&C:50'342894510.,..0-*'),-,))+('(//IE'%$DD&""%&"16#( '346?84/*('&%((&$""%%%$$$*-($#!"#%)'()(),'%++*,+*)/..,*,,'&*$8)/%?@@=;<?>!$,+"@FG@D#%(E?DKJE7(!! "  ##$-<0+-.-13600-,102552/.'@$'*&"$#&*18953/6=727957<8582//-9>79:@C:8;3,/* '/47-(++'&(33-+*)*-,*(%#%&)($"@C%'%''$$'+,%EFDA8A-)6/&(FG@=?95:<>;5648==<7:76:A=@A>?;=C;6@CE%C@:1"#?BBGD4.7B#82?;4>F?.+;;=DB>3/12,"$+$%.1)#)033')+*$%##&$!!&*(!!##!$%%!!&*+++'$# !!  !#"." #''))(*,,//1-/1,)).,&/2*+*--.`++-/,,*,,-.,,-.,+)'++,*(+,('"#%(+*++'%%'*)*0/0100/...131.-,,-)&%%')(')*)'#π~}}|}}}~~}~~΀ 뀉ρ~ƀŀ .Ą¿Ŀй̿׀μǵǾĴƼ¼¼ŵƾ½Ӏú½ſʽŻŻÀļ¼¸ÿـ׽ԬɿεÅϜЪɩ۱݋ɿ»Ƽȴ¾ѸȮſӷķ÷¼žÀӾſͼŸ¿Ⱦŵ̽Ƚ򀉌Ѻ܄չļıϽϽĽͽ󁋓ŷҼߕ̵íƺ󟠳մȼԫ܅įƬõǿƺýǠ˴¹ꗤƵ˴Ԁ􄎉鉄ŲϨżǷϽډ鄏NPMJNSUYZY\]YUVUTSTTRRPOOQTU$TSSRRVXXX_fe[USOKMTUSSPRSSSRPOMKJNQSW VUTUWYXY[ZYZYWWSQRTTUWZ\YWWX[a_ZXWY]``^`dc_aeikf`]^b__]XYYY[YYZ[_`cfebced^[^baaej76b__bdc`[XY[`efdcbf566gdedcghcbb`^^^_abdb^]^]\[\]^`245765882[Z`bc2121`^^YTRPRRSYYVWZ\_acd2456654332211122553369:97521000`]\Y[_^Y[^[TV[`da`a`^^^LMUb6fe3ecda_`^]]ZXY]ac_[^bcc`ZVWY]__a\XWXY>Z^bbd55d___]\\\_a^\`46gh89iec_`ceiihfdbcdbcddf5fedegkjhfdfffhl688:::;>A@??><=:87555gdbb`^_^\[\\\^]^]_g6434c_[Z^bg677f``^\[\\Y\af786444gac565gfjggm=<98:=?@>;8778899<;3XWYZZXVX[[ZWY`aba]024675c^afda__`b441aa``b248=CC>:87543551133365200^_abb^^10`0242]YYYZ^[XVW[ZZ^_[YY_aab_]aaWQOMMOOSXXXVNJOTVWWURQTQJDDJMNLMIGN]cRKJHMNGCCEHKMJECGLGGMW]XOMPSUY]\YVUSQURNJIC;FFHWbc]Z^]\USSRSQRXULKJIIPTRSUSPJJOQONQLHFHGMSL@>@IQSSYZYTNMNUWTSTSRY\WSMJHEILLQZ]\XW[\YYVe[^^]\YXUQOQQTSOMKMLLPOOMJJKPOMJJLPKDC?535;ABEHHEFKABADN<:@BBJF=9@BBEEHGFGJNMQQSVUQPNNNPPQSMCBMRVVSOLMLKLLIIMLHHMOORSTQMMLLNMNNKIOONQSUVW\[ZXWYZXWXWUVX[XVQQVXTUYXXTTWZYXZXQOPOJKMMLNPLMNNOPRSQQRQMKLMPQQPRQRWZ^_[ZXXY[^_^_`_]YXWXZ]_dmoke^QPWXWVVRXYXWWZ]]]\\]a`ZWT\klfgpr7gd`URNMPSXZSQNLLPKGEFHJHFGDEHIHHOWXX[XX\YSSTUUSQRTSRTRNORTUW[deb]YWTWXX\[[Z]XWaif`_b^][Z^cea]_dd_ZXTSWZXVURPQQSSRKFADJMIJLQX[^WX^ZY[\[XUVYZ[^_\Z]]VSSUWVUSTSRTPQPRRTWZYY]adhjh^`]^c^USTWVSOLJJJHSY]ZWWURLKNPSTUVVSOVWY][UTUUTU[\XSPLEEDEIJMPQONNNMOPQRW\ZYZYRQPOHOQTGSSRQRTWWRSWUUVZ^^_cc_`_]]`dmgb^]\Y[]accb``\\^^\Z^]ZY[_`]]\[^\[^ehd_XX\^[Y[]`bba_]`^\][X[]enggf^_^`_[YXZZ]]`effbcdb__`bcaaba]^[X_`^V^bdaRL^YD]eaZRa\[ddba^[[Z[Y[YXWSLMKHCG>\OF90;-97S<9=vqnopld[\\WHDBIKFIKLQPNKLMDBDDFMPPLLNMHIGHJMNIJNUWTSUTSUVUSRWVYYZ][WWZZ^`[Z\Z^e_YWY]`bba```^`bfgfcddcbafksxwyxuplgbclrtqlmlhfeeglqrplkklppmhdhmoqpmihf_[Z[]]]_abefJ7V]W]`][\\l}zxwwslkjjklkkjir~~zyx~}udV[cfb\agdchjowxt{unmeYLFScedmlmlikomigilfaehiouy}~hbefh][`add`a^[XUX\`iomt|}onsmb][[bcZSTVVUSSVXXVSUSPT\\affdb]_houmjqyvmbZ^c_\]emoihhb[\ehgc__foqh[PLLV^^YZ^]YX^gaZSJIPWYXX[WU]cffinnpsppw}vnjknop|vnohbacbcc`cmrojiefillnuwrv{poqqppllpvIypqquurmuwrv{voqpqponoppnjhnnffnnnqnm{~upnlhjicfr{xqlqywspnouw{~{|}vlojjmnwytpptrsOwhcegebXNMOOQSVY[XVWY`^`]VROP`jYRRRPKIPVY\afgjmimm`\^[OKWacec]SWaikea_\WVX^eg\Y]dg42347589;=@CJXc\UPMLJHE~rl6765672.-/1/.14IWYalfa[VSQTXZYUUUVUQOLJKLLJOQJKLFFBHLD{nkfamIXLlIUSWXUXQMFCEFJHDBCEIFICCKQRNJHFCEGIQTQROEIPVX[YRV[XXWSPJHLI}C[P{ttsqnkgcXUjq_kxvorrogvGHGMRFuKLCv{yv^OPPQMOX4@Naebd]dnt[dmj^QMO[Zcw>tywqoxjb`[XMFE7hNP[kunVXYNU]^]_eeig^_`V^D+^ECU`lkm\APrgSR]eZWOVPXkemmeh^[U\ZLP]]SS[[\QOS^g`wjIEaydLQS\RTV_YZcojd_uqaehc_eebU[kpicca]UTRSLMKt|kdCLS[_[YPOXYfVELdf\N[^]XYg`[Y^YimXRHJS^[MELTY\[\QCJfrimmiY_`\X\ehhntqpqtwpv~CIE}gqGCz|uekuw@vqssyupoaSdkpoxtlu}_^`]^[Yjz\LSOHEOUQLGDMQQJNLHf^RbsgQC67@ME=9>C@FA<:469<;:BK?6i9_7b22358988:::774_WW[^^`cfejdajdXVaeW_gaVX\n366774e365gcf4gf4d\\ae4752584bdhd`c44247743a^`fc_aZ[\\_]bcZ^_UPQV\dfh^TTVYZ^e8854566if`WRXda\ZUT_b\WRQVWQOSVYT(&$$'()*+,-+(()(())'&(*+,-+)('')+,*,00,)(&#!#$$$##$%%%$$%##$&')**+,*)))**++***)**+*)(''(*))*+*)))*..*(()*--++,,++-/1/,+,-+**((()+*((),,.11--.-+)(---/1,)*,-&,,+)*+,//,,,./...,-/-++*)))*,,-.*)*))+++%$(++(''$###%$$''&(*++,--T''%$%&'%&('%(+,..--,))* #',,+*)**,--+++)(*,.+*-..-*&$%'*+,.-*)***+--.0.,-.-.,+-/1300..//1121/,-.-0//1/.,-0210..01245T.-,-,++,*)))+-,,,-00//--/10---,--,+,.0/,,-..-.1'))*)('**++),/..+)/,.0.,+++--,,,...///***'&'&&('%&(+**+-+*),..0/,-.+('(')))*'$" $&&((()*,*&""&))&&%%(17.))'+.($$$%&'%#!#(%',13/'$&'*/.,(&&'+/*$!!!+++5>>85763-+++,,-1.'&)((+-++,+)&&,.,+.+'&)&)/)###)-.,.0/,**,020/v0/.020.*('&())+465216632025765310,*+*,-+*())),***(&$#!!## #"! '# ""%&'&%&),,//140,***)**,.*#$,f**+*)))())())(%%)+*++,+)+***)))(',,+-.---1120///.---+,-0-,**./+,..-++-///1/*'('$&())**'())*)***))('&%&)+)*-.11/.-../00/010/--,-.0015630.))-,--,*///..12320/15631.3;;89>>:85/-,,//340-,**,)('(()(&'&&((''+12352242//0010/./0/0/-./0124:$:6301013365545208?=98:76537::76677520..1530/-+,-.//+)%&*,)*,/58833832322//1321130/11.+,,--,+*)(*)+)++*,.,,.12465010053/--/.,*)'%$#)/10-+++''*+-..-,*(+,-01.-,,,.12/,*)%$$%'')*+)())(**()()+.1/-..()*)"&(*")((())+,*+-+*+.0/0331331023975210.024554330012102311254321010026732..1310002344323112/.126<877222331/011313688556423455432201.,01/(1465(&4."13/*'.+-46542/,)'')(''%!$#"!'$!#"$<679pkihg`UKMMG71)..0.:)50#)5#0!%$!9#%)(**$"!#)*&(()--+)*+%$'&'-/.++,+&(&'(**'(,1P2102210/2020//,+.10351022441-+,.23453343469;;99:;::=?DFCCCB><867=ABB>>?;::9:=@A@?A@=:9<>>><<;985444579:9''.,366465=MPPHDCAB?==;<==<=>AFJM>8:;=3276786:7521489?B?DGHJH=>BA;776883/02200/2443120-.336;=9635:?@<=?DC>83595348=@=<:746<>=:67>EF>5-,+1672266449@;82+,15423424:;<<=@@AA?>BGB<9;;=>EE@<:8775787:@BA?<89;>>BDA?GNMF>>@>==9;=BJSS*RMKKLOOPRJAABCDB=COINSLKNNILWNC@BDJUURJDCEDDBA@@AA@??A=9=C><=;?>>==:9>BDC>;?DC??A?>?@HJFCCEDEQ3_YSC;7:<;7/)*--/002301259:=71-*+7:200-+*+/1459;;>?=@=5452+(,0122/(+17840.)%$$&))%#%() *0.+**+*(%A70&/06=8630-)+-//--...+*(&'(**,.*()$%#')#>73/,4$-&5&.-0.-0+(#!#$'&$#$$&$&#C$(*+(&%$#$&'),)*)#&*--/-)-2//.,+)'*(A#2,?:4<%%#(-%CCED3=65579;>=CCEGF>6-%$**'%LAE9=>)-4@I4@01HH@66+6D0N,/54+.,5*>%(4.#)6844/6=>,2=81,(&/+.8699:6<632-)!5--07>8+01(+00-,00330.0*/%"-3;;:2!*>6)+360/*0-,86:84710,1/$+42-,100)'(/5/47::.120-15668<;999F?9;A"%$@27$"<:9:=?ABEC@>:kdc`\ZYY^ehdbaa13441_[[d432125675433457;@CB>84333201/Z.11/_11_]\]]_`^_31/.//]ZZYXZ0^XUSUXWXZ^_]\_^_1a`a`\WUPLKHGLSSSQPQSUVUSSSQQONPRNIGDGNTYZZYSMRRQTWWUTUPFDLLEGJRWTLPXUZ`eg]ROQ[_XUSJ=BPPPSX^agicYSTRSTTVUPMSWUPOMLHEMTOSXMFFJMGIKDJMKHC?EMRSUTTVSMPQONOQSRNOQPLPRRJKLTXWPHMWYYWTSRSWYWWYUSQLHHJJIKOPQPPLGGINOPPPRTKHGB<:>EFCCJKK@:9<==<CDGHB<8ED7;??EH@=>:eb4>?AE7jgb\Ae3224557::7974b[RS]b]^dhim}kbjj`[_c\\^^YZ\c54442d466fbe3423cZZ_b2355486dffd`^23b246442`_bfcdda^\^]`_TT\\\WTWYY^d`ZZYZ\^e73`]b7974YF@ZaZVSQY_b^YTVWUQNRWXI*)'"!%%')+*')(&''(('&%&&'((+,*('&&$%&(+,*)*,,*(''&%%%$""$$''%$%%%$%&')+-.- +*)*,,+++)W**((+-+*+**)*)))**++)+,./-,,..+*+,)*.0.*()))*../230.---/.**+**,,)&&())+.-,,,-/.,-,,.-.. ,+++*+,++&%$')(j%#" !#%(('&'(*,,-&'(''&#""$&&%%&)-.+,/.*+..-+(())+()+--/+***('(*)*-.//*'()#*+**))(*,/0-,,+.//.,++,+*/57642210/0M.-..--,/122210-+,-,++-,,-,,..,./../.../21110.-P.-)+,,,.10+)+..//,,04 "!0-.,,**)-//.-++,)*/'&()(*+,,,+*(&&&'')%$$'))**+--,.../-./-+*(%%$#$%#"!!"""#$$'('(()+,)%$"$(-0110-)*++-/.,++' &'%().1.(*104786.&&)37/+(% &131258;?>91-.,../0/d,)-1/+*('%#(-+-1)%&*-(()#(*('%"&+/0.+,.-)*,,,+.0/+,-,*..-'')/11+',2431//00344430,*'%&))((++,*+(%%$$"!_"  ""!$ !$&'&&'(+.+,./-+)))*)*-)"+-/00/.460+''()+-,)*)),+-,*))**(()'('&,-./10/00.-..,,-..--,0/.241-../10-..*'))'()***(&()*)**)***((()))+)')+,./21/.,,-./000112320/0474441.,+)))*+,.//.-,--..-,./0.-.4;>=:77;:-*(*+*/37630..,*)*+**)))(&)+)'()-.0/.00..././0//1452.*,/20.0341.--,---...17547774599601<><<99864.,/0-.25864/...10,-,+())''*'*29;67630./.-0342217<8/'+-.,+-,-*(*--,(&).0/,+/2245/+-++/120//.-,+$ $ ')+*(),+,--.-.-+*(+..(*.,+)*+-.,)''&('&''()*++,*(*+**()),.++/0)')-++&(-//,))')+,-,,..011012010002445562112034135632441001001235322423132111/-../11256444223510102776867977610114357868886466111$*-/0.+*+*&+//1//3028;:743212321-(((%$%%%$" "+& !7)D788mjhdc\ULJMK==)0//.$5/-*8).<#!<"$'**($"!#%#&)*)+('()&#%3$$%&&$$'+)(()+0.()+.241.//..,()3/.--1/./00230,+.133/I34455443236:;8889:;;;?BBCIIEB>;9?<864566789;;:>><;:;;;74699;:88522464'"#%/58976206EONNLEA??;9::;<=@ABBB@DIE>==;:8753*&.+-00688<;;<>>=6%';>:825;<:==;;?@?<=8641/2432322569>?>:<;99;<=?AA>98:;>BD?=BLKB9348>@=66<@A>40.059<<:<83//8A;1,,/3587426:749;:<>?BA@AEGEEHIECB><9<>>>?@@?@>=>:99<@?>@GHD?AG>=CFEJKHIJGFBABBCB?>A<9@EEGH>:?FKKNPTVXWOEAIMU`ca[SOQQRMGAIPMOKIHIC??ABAA==:6;?DCEFHHGFACFHHGIJJNNMNSROLJJGKLJKOONMID@?<@A><:<>CGHHB@?;:999:610220002469;873-(E%),/85161)')((,..,.6;<99:643676542020+*.0.*(%%$$%''&%&!,11-+*(''&E=4/!""#$$%/17;:4/,*,.112100.)'))')+.,M(M*20+)(#A=4,2!%'%"!#&-)&+)((#"##&$"#%&'$&$"%(,,)('%#$(,0.'-*%&)/..,*0//0/+)*)(JG(*KB>;8;8/35/2<5.?<<=:97;'-('*'CDCFC>%*C6:CA=@=.%#!!##062,(,,,.--.-&/5631310/)'#!-/%#$+2GFGJK/.(LN'B&+'BCDFD#C?:?><;6:=0)*)1H?6152.654>E@BDA:2)305/8+KG2GX0'*.750+*%'0.$.5)$&'3:-49<6A>1)23+)*88510%,11=?541/+/11151(/83)%(*,656;>6/,/>7))*1/,-50,6=864;C@<9753311.55::7775-+,/,+*#=;13'-%)-/%#*49411564)02*%/8311.,.27C3(-.,'!&+/1.'"(3$F5/47/31.+145678;>:6=@B:>!#$;9&$@:@B>=30BC?B<::<:;93/4=<97:32:BA>?:0/0.0-,/6-(.+(').0-+#&)+70*),+)-123. :'/)&(*1,,,+/)''%#""**,//+&$'''#!%$%#')%$&%##%!! ##   #".,/0-*$+(#$*,*+/3354.450--,++--*+)*-101.*)+.,P./.,,,+),/.//-+*+)))"$())&$%%'*.,((&&'(-+)+%,0+(&&+.0.*&'((&$&)*׀~}|}~큇 + ~~~Ȁƀ ½ºʾ󀈇ļ¿ķƻѾúĺǸŽ·ƿȽ̾ÿĽüȫĿÿ¾󂀀ſÓȿùڀƿúȲȹôúſͽϴۀȽȫʱӿ҆»¿½€½Ž⃃ƾ˿ʀĻžüʿ½¹Ź¹ƾɶƀλƼ󞻷ǶȽѹ񌗚Ǵø¿̳΃־ǶøĶɾ̠ᷖ񶖯􇕘ꄃʸĸʺ̀ݿ׬۱ɿҼþɾДʼ½ιͮ凫IJܼƽȼùƫɁрXYXYPOOPQQWUTZWSSPRSRPQQPNNRTSTRQOLJJMQTTUUUVVRQUXWUURLJMOQPPOOONOQTWZ\]\\\]^]]\ZYY[]]]\YXXXWWXVWYXVTUWVWWUTVZ_```aekkgcekjd^\[YR\]_d^Z\]^`efjmfedaagjfbfe_Z\]\\^^ZUV\\[[\ZYY\_^_bbbd434456357776326;86653b_^^]]\]_`]WTTVTQQVUQPNLLMNORUWX[]_b233200/02567533348:;977971XTX[^aab_UQMJJLOUYVTXYWUVZ^`]^f66fbea^22e356fabddd^YZYURRSRY\]cgb`YTSSRQPQTV&XXVVTVY\]`_b`__a`]_^\^_aeghk55666544gefdba`af44hihi345665567984hjifdccd4776654578664gdccdefeeddceh555ihh4hfb^_acbaa_^_abaaba```bdc_ZY[]`d887<@=<=BJMHDB:679<@A?:77:=CII'IGEA8eej66679=;52ba23320\XYb575345667789CBEFCHGC>AJVZUOTXVQOOOJGKLKILSVV^WRQSUXQPJOUVVWWXVVSRUW[]][VTNILPQOP>PPQOLIHHGHKNNLMJJKD?>BGFFCDEGGFGIMIKLNOSSRUQEISX\[VJ:AV[XVQIDJMKKMLIKMOPPONNLILQQSQOOICLNKLQSTUTTZ\\[ZZYWZ]][ZXYYZ`a^VYZWXWRPSRQTUSQONNOLHKLJJKKMNOONOOQSRQOOPUZ[]``[XWURSSVZ]^_beed`af:9jeca\ZWSTRPPUYYZ[XURQRTUVWYY[]dr|qd_adYA{v|JLNTZZVTSRPMKLLLHHJIECEHJMIJMOPQQRSQPQQQSUUWXXWUPQTWTRQPRV[[[WTTVVVQSWYZ\[[ZZ^][SPZgfgkiihgaYUTVY[`dda\X\\]`WTTRRNNMJLMJLVa`Zbd\XWXXVVUUWZZkxpREPX^XUWXZVXYYXQFP\_`bXV\\_fjZZ]\]a`beaYSSXXRMECDFIKJLSUVUTUVVUTQJOXdcURRSTSRQRSQMHEINNHHKLLOQRSRQRQNLORQTSPQRVTRVYVWVXXYYX[YQOQTWVZ^]]`b^cgd_]\_dd`^___a_]Y]__^^_`]\\[\_^PLSXafc_ba^]Z\^^][WRZ\Z^`]^^Z\`_`add_\[[`_adcfha]\^]^^beffc_bcejliiaUL;Uc6754b2eeef57ojfchjjnnpmid_^YVWOQZ\SOKMM@1=;:?951XNGLA4@e>>><;ttsogkmecb_`;KSW\NLxEM@][Q\<>j9=@CDGMQTRJFGNLNRRMJIFFHGEBxw@?BHLPSQMJKR[_[Y[UW[[UVXXUPFCTTMMOX`d`][XZ]]WNNOY_]`ccaa`^][__^_ac_\`b`]Z[ckou}{wqjjmjegihhb^[WWVY\_`biffgffhfca_cjkijgb][[[X\b`XPQ[`dknka\VReHFzpotruvsopuyvrrrpnjdaa`_a\SWYTUZZdkmqqxvniflomhcisy}zwz{unidekopphiokc[Y\WPORSVY]dje]KHSUTQUYW[`Z^_\UXegbee\VY_fooldbba_[Z[YXVUWXW[]^bb\SYdjmlqsng\\bdhsunjp{yke_cimmjkstmiaY\^abadgdb]WMN_WX[]ZWZ[aaZY[dglppnnvrmlqy{wuvtuwrpuwyzzwune__abdhpnjhfku}|wwzrqmlijllmha]`_iy|wsqmhdp|xvT}z}xbTYqxqoqsnkg`Zfu||~}{{zvmaWVXUXYY\]c_]`ddfhjgbca\^``\ZYXZYRICmo=HSUVYULPKDJMJOZ\YUS[]ZWX\\XNMYZTOQPQSVY[\YTMU^__c4555:;:=88AA@CCHQZb`\XSNID{pk3311_YSOKMWXXY.5,SEY^bjc\XW\\``ec\ZSPJU[TT\WOIZ`[[TD{D~zFGINJECBMSNQNHMNGHHFIBAHNXRKHB@FLUWVQLGCCHOWTSZPJHMZZWUWUWYVOLLIGGyrno`ZfdWbjY\kdoolnoOTRRMC}CFFEPGqp{tppdWUQJC>GG;i8ABCR[XSPQP[`\Feg_NIOQONKS][OY^WSTVXYWNJEBMLEP[mkfm`[ekga\cdc]]baaZVXWesbTYijd][TMJGJPLJSYVMRRKK`mXJKLLQN[SDFKDIRQLIHvcGIjwGMOLIOOJEyss{}vu|}wp]nqqfWWSLTptfabb`aQF`mikxujeZPT>/KM7NiaG:TcVeyvqxmfyzwIUWrb];=yKLVWUZ_hi]fu~}`VUUY_a_TMXRMljUsmh`YW]]UVTJ=D_hf^gia^Y`bD,)O_Y>:QOZfkc`fiuljjrTK`_[af_gcb]TH_~e`cenldU\ujdXZVVJF][8IY^_e]_f[]]PPXee]\ceh_`cbksuuwsmc\RORTV\gggnplZVWXWTOI}bSrEROGOMCh_AU`__`_^QFQH@;ERVW`YOTYZxn]TRWTPNPSOJRWdnym_SUZZ^ZSUZ_bbcgq~tnow}ACHFo{HC~vov?o^uzshgovvvhopbhpb^hhddb^dd[R`]SOX``]XG]XZWOSRLSOJMRSONNRVTUKFA=DTRQTRKMTZZZVRPORB@X^\ch^RHKPTPJFEHIJKPOHFJICBHF<:>?:846>BGK8im9=V433364468:8573eg_Y\a^_bdej7flnedc\]dfa_a_b43332e577hdde434fY[^cd3575983464df342cdbb3gd`_dfhgec^^]\^VRUX\`bf^USX^Z]_$^\[[af^URVb:976\NZ[Z[XTU[aa\ZUWVSRSWK*++)%%$%&&*))+)''&''&&'((&%')())(&$""$(*+,+**)'%%&''('# !$'&&%$%%&')*,-./.,-,,*+,,++*)))((('(*)(&L%&&&'+.-++,.10.*+/.-**+*(()-,++*))+./2100/.240-./-))((),+($%+,,,-,,*+.,+,++-',***)*)(('&&'&%##%'&""$$#$%&'())*+e%#')**(((%" !#%()&%'((')*+-++/.+,+)+-,-/.,)'()(&%%&+,+.1/-)&&'''&'()**)+**,,,..0.-+..,,-/20.11//0/.--0331034430///-,+-./.-/.--/20//11.-..//.-,,,--,..---,-.-.+*,--.#$"+$#"!./1.-*'(-3)*('$%(()(()++'()*(&$$&)'('''(*.00/.//-++*'&%#"!"!!"#$&%&,0100-*+),+()/1,)%(/200.**,((*)')-++.1-.2/113/)(**+/0.,,,*/100029@CA6431--,,(#%('%&**)((-/-.("&*+$ #"%%"()&"%+240+-/-+*)*)),+***.0/4.*,-.1..+/22232311..135430-.,(*.-*+**+*(('&$"!"! ! 2 #!$%" ! $&''&&(+)+***,,+*,++,+%'*-11.*!M$2420.*&),))+*((*+***)))(*,--+++'$*+((+-,--.122210/.0100/-./0320,//-.-+*++*++)()'$'(''()*(())+,+(()+-.//0/--+*+*,.00246741268422/-,++*((,/222/,+**+,-././06FI?74695)KGH***/431.//-++,-,))**(&'*+-*),,--...-,,-,-//121S0/--020--,,-00/-,,...,023467755874/,4=<=985/--1356:97514446200,+)++(+,+,3;:5::40.@//-.009@<,$*/2/-///-,---'!'.//1,*-/025--/./11343/,,0/+(#"#"%''(,-...-*'#'+/1+)*++,++*+*)%$(,,'%(()+,,,**,+*()+),,***+*(+,*++,+,-+//(''*+,/2112415641/-04421333531002112464320354+(.046535410023420-*/0/0213413544245311033453562/0221257765356599771*"&)(&'')35449;:<<=:840/+()$#&%!&! *G47767kmlg^][RONKK*00/-*+A((!42'-!#9 "#$&)*,*&$&*)),-*))&$&'&$@@#"#&(*.,)().35323025500231-&&1/*++047542/011.*)*144698676333676678869::856;?@CIKKHFDA<=@?==?>=:75344469::=:88::9645349;8:974343.030*$%+05:;943329K+)ID>@B@>=AFE@>??=96577662*+...228==>?CB>;9;=;779<>?CFF?>@BDEC?;978=??>:CA?<;:986762111233556974/5;??>@A>;54689BC?>AGD<968;AABC?>ACDEECB?:87899:?=9659DKKMHEHNSUWVUUQJB@A?@>?@BB=7688=HJEA@??=DJKNPOMKMJHISYc4gbXW]YRQOLJJLNJ8+-?MOT__\UUYOCA?@BA?<4.;CGMLKMMIKMJEFFHMPOONPNLQOIHHGHLLJJKKKJJGA834458679:<88:;9;>?<8863456421364-&&KD>F%)-/02/+/(#)(%+2432375212653*,65/,,)))*)*+)% #'&&'%,321/,)'&IGB83'$! $$#$(&355940.-11347621-)&.4.,2/*GBK(1401,!;";:@##%*($#"(,(**&))#$%#%! %*1,'$""%)//-*(%#%'+0.-1)&%>&/.++/./1/+)*(KIL((NF@==<2196-6<02<5<<9:=BA?>BC@>1;<=6)'$%:?637512)!4>::CB72'  "(4-!.P;2>QUTMHOODWKGF)14G=52 =((-0//4::07=@B3-.*+*&#//';52/+*00+-,%#46503633.0.!(%'$,493$/47@:78;)&32/1537561+$0C4/35864,0>:7/%"/1)1136115/11)+.671044723337;=<>=:51,(,.03998;=>/,-/10+'B4-<%,-)-+%;7".542212)"(# ",4471)+--@@3**..+++,($+.4;@:4,*1040+-.2533;?EH?86=B! %%8=%"@A=:< 6-=F?=65:=>AC:5;<24?50/77655123.)1/*&+//.,#2/21+.+(,(),./,)),+*-($" &.++*)$&),..+('%'*,*/2.)#$&('#!!#$$$''#!## ""!%$200%"!#.2"./+')++,..03057110**/3.+,)*././..')+...0..,E,-,**-.00.,()(')%"%%'*,.)%%&(&)*)%'(,/+&$$)*$*+)('&(,/0-+&((&&&(ހ~}|}~~Āˁ € þ¾0pɼ±ŹŵǽƲ²ºǵƿÀĽƽÿ֪򅞩Ľͼɿºŷ½žſɀ˽ۀ뽮ª­𫕕ۀƿűżøºøĀ˽ʺĿþû9½ބڀ٬ºɦôƿ̲ƿ􂎕€Ǿķ¯ׁӿ׻Ƚ̻ޚ՟þ誗喙̢ʿϿͻĿŻѮջýȹɳȽϿ׼ҷϯҲ˾ͷıვŲȧ;í胅Հȿɺ«ü´ƶ䆛惋ISVYZYYVTQOOTTXWSSRQTVVXVURNOPPQTTSQOKJLQTTUUTRPPQRRSWWVRNMMOPSTSQQSTUY\\\ZYVVXYZ\^_^[YWWVTSSRQQQSU\hlf^YTSah`^bfgfghagnme`bifa`ceb]Z[Z[__]]\ab__\VX\aea_^[\acc_YVXXXZ[[[YY\\_`bbce33ee3566896312665552`]^`%a``^__^``^\ZXZZYVVUQPRSRQPPNOQX^^_a136;4102479987632200112a[WUXVSTWVRPNNMMMLNQVZWVURTWZ_bcceca_a``aA^aeff4gcb^[[ZXUSVZZYZ]\\YYXUSRQRRRUZ[ZYWVUW]`cbccdddefdef456556656 776543fhh45655568998hfghhebcej9:9856878754ecbbcc`aefffgjkkk5543fgebb`aaa`]]`ba``_`addeba`]^_]]`58:<;:88:>=8434335;><6447=<;BEFGGC<54ffh6:;973113 54321a`02358:;::976679;820/0231023458873`^]WTVVYZ\_^\UTURSRQSTW[a2^[]]][XTVY\`_]`0]]0121a`]WTROIIOUOMOPRTTPPSVWVVVURRRTYVNRZYSQRX]\[[USVWVrSRMJOPIGMRPRTOPRTSJIOGBNWYW[PGNTVNMQ]innd_YSQPRSKEHMLNVa\VUSTQNOJHJH?;>FQZMNRICCDJPTTTUQOQQMNQLGEHJIJKLMHELOLHGKKPSPQQQJHNSTWZ\[ZSNQUVUUUQNLMNKGDGKMPPONMMDBCDEEDCGCAB92:=:=CBFE@>>=?CIOOIEBEJIGIKHCMPKNNORTTSUVRQTVVROMHGORQRURRUTIBCDEHLNPRROMLKNOQRNTNNSRQJ@==>A><91YZbgUBB>?><<<=xsprqmgb\VYKXVYFMJPSE_wm[8@@>@EGHHIMOPPLKLKLOPLLSTJ@FONFGIKMRVUSPNKKLQY\\]\^\\[[]^ZREF]]WURU`ed`_\\cijfd^]```dheccecda`_``^[YZZWXZ^djjowvrrqoljijh]X]cfe`\ZXVVWZ]`fgeefgiedfimrrmife_Z_\[^_[RFHPX`ed_[Z[ZTXktneemruwxwrtuqpwy|{oe^][XWYZZ_ca^bjrnjnoliiijmrlkrxzz|~~~zrrtqqljjiiklf^Y[ab[\b_bfiosmcRSTSSTY^a`\[[aedjmovphhieiqqljfcdfd`^ZVURPMLMRTQRTY[Z]fijmjc_]ahovxiejkhkigkhfhglpqme^cd`\TU^kkddeglpgYUU`bSRTUYYWZ\cmps{upvsq{|yztlprtuw{|xsojd_\YXY[]_eqwtw~zzzphbdcccgifabbgouuggeeeber}}zzx|Z>gvpwvttyywsr}zz|~{zyuoic^ZWZ]XZYTVWSR_kie_\ZYVVZ\ZWXZZ[]e^TJIOOMKPSV[YSPQSOB?PWQV^`]ZUOEBCIRWVQKRQNNRXafe[[][`eh55de5689=?BHLQRPRTX[[YWTSPKFtqjc``]XUQMPMHLTWVSPK:&9H\^age]X]^`b__YSPLKMWTRWSJHGJRZT^fTGNLBDGHESYHA}ANVRKHKRRIJHFG~FNOQJFCAHOWUROIFECCLRRPKHLGE]d]X[]TSTQMIEIJxsqibrp]ZjcZ^cenllz{CINPLEBEGHI|x~}plh^Z[QLJHILCEEOZ]YQPRVSRa9VcbVFKQPQQOU\a]ZXQPT\^\ZOKHIPLDFPV^ipjW]b^c_ee_\[addaZWX_vi]Y][ch_ZPKKKEEMRYc`OKNFNfdSGOPONLMMMOJDILDEJJFFJMGxoihCMJIELKH{ntuvvxwdYvtupTIIGJS^czsb`_MD^vxvvned\TW6IosGRWb\VNKSD4:8SNuXa\V[UKX[`OPLGHNT[V^mtl`W_n_a^[^WTU[cbS`ox}qehy@DF{i=CB|vrnssjnqokonijp~FEmhlkbwwhd_[bffghgXQVf]MN[]ZZN_geUIMKJPXVWWSOWWNSROMNI@=DHHOPQNRSMKKLIR^RJMMOLXTMHHKNLJFHJJGGJKGCEHF@AE@=A??HD>>EA;g^e=BA796d;?>?HPC<>AH_434489G8658;772bf53]XX^bbch7dnnbee]UZhf^cdg43432f5884defffebW\^ccb47g564477ddh4Fdaabe4ddd54ecda]Y^_VTYZae662`]]\X^2d]YUY[ZWURb775e^[\\_^YTQUY[\[UUUXWT&(*D('&%%(())'&&%')*+++*'&'&')*('%$""%()*)(''&&&%%'(('$##$%&((('))*,./0.-X**++,,-.-*())(&%&%%&&'(+04/*'$%.4,(+..-/20144/+-/.++,.-,)(((*+**+-//.,'')+-,++()+,,*(')*+*(((**+++,--,**+,+**))*+*)((&()('&%##%&&%$%'++)*&$$$'&#"$$##$#$$$###'+(&&$%')+-.-...--,++*++)+-../+,)'())'%()+,,-,+)))'%&&'''(+,,+**)*,,.-/00///../111121123320025-,,,-,+,./-./1222121/0/.--./-+F,--+-/-..,+. ""## 0//,+,,+(%''()+-+)&$%###"$%(*,('(()))')+,..,.----+)(('%#%(# !" "%')+,+*))*./+,00*()-/.,,(%&%$"$$%+-)',/./0--..,A&$)'%.32/1,'-14/.19?BB;61.-..0*&(++*.62-,+,,+,)&('!!&,3)*-'$%&*-.X,+-,().*&%'++))**&%),*))**.0100-...)(-0..00/0-+.0/.-0-+*))'&$%&##!! ##$###',(%()' (,(***-o,*,-.+*))(-.,-//121)#%$%(*+,-,+)((++,,+,+*)))**,.-+*,/352011//..//+,-./--,..,,+,+)*))+)**&&'&$&'')+(((''(')(),+*-00.,+**+++*))+,.2551/28:6200/..,,++-02341-+*))+-.///1:JE82466.(KK')***,.2-'/-++,-*')*))(()+,+,++*)*+,,*+,*,.010.,+,./---.,,-//.,*+,+((,/478:;<@DCAA@?>=>??718:;;8543223589:;:868:?<;@AA@931221012135326:?=;==;988:<>:9>BDBCCCDDEDFEDC@@B@?<89:<>@<63467339669:;>;6.-/.-046874658;9<==C@:<<8;A@>=<;;;844101/.++.232004766:;<>=:66;?CHNG>41/66,,./10.017?ACIC?CAAJJDDB@BAABDFFFD@<:642233358?DBEIPRNLJEEJKOPKFHHC=:7999:<<;9:8:AGPRC<=::;9;DKKGEDCELUVQORWYUPSZYTTRNNQSTUL1!=MJS^]ZVSMFBFDBBIHGEEPWZUQOPKHNPSSKGNSRPMMOPPNLIGFGJKIHIHFC@=:757835425533=B?<864301554101137;62--11.+--.0/-.12-##.1.15544/)###&,01.,0-*)))--+%&&%()*&' "%%$%(+//0/..,)%F><6/,)'$#!!#%$$#!)634871-1346550-*'&)1.+/.(&F&(,1,28,#(&"%%"+0&"B"*/-&%&**$$$#$?$())&#C$#'*/-*)%$$$#*-,+&$($#350-/3--.,+(LIHJ(**NEB?>83@>11;70354867BB$(*+(%$GG#$$&I@=AFB<<;4.,#! &)&!!!# &)12,#'++,-*,05333.+,121/(&%&+(#%+-27:F:.341304420.14530//2C<3/226930*&'(%%),/63)(*$(88,$)*('%%&&(&"&)##'&$#&($@><56$+*(%CI+)'KDA>?>5.CA?:(&15CA631$2ACCD?84*!!%+!!)ENWIEAGNSRQI0)IQ)>(2(<<50'*!&'-/.<=7=94:37:239.022CA93/-*),-/6549;61+(,(+-,'G?<#()+'B"A=&+,52+&"#'$<173/0.(/26)*(#$),0-06>83-2>640-1.+.266+2=CGGD?53= "$<4!!BA=98;:48<978779;D'&9684/?>5431466688/'+6.$&-../%2880(*+)-2//.-,0/*.,)')'!%'$**(%))%%&%#)0'!##$$,)%""$&%#!#$$""$%" """ # !3/2 + "&#+,)&(-///2.55.0/,')21+,,,!-./././,'*+.-+/./0F-+,,.--,/--*(&(*%&((+,,**'$(+('&))('%#+,*+,+,-+(&(*+,,(('**'倄~}|}~ ¿¿?򁆄ÿ˽ȿϻн£ſ½´ɰ阤ĸɀŹž̩ǿ»ǀžʾ°ŽꁌӾżхڰ雈µȽÿŽŸ»ûɿ¾;ĺƾ·ȿüȺд셤ʲʻòٹżúĬȭûū枴ݿԟ܆〦Ͻƾ˸ĽǽپؽղɾᾸ܀Ⱦĥ˶ЬȪ􀍝ǰƨ¼񉊁ɽӼƦӮî܀=׀TUWX[]a`[UPPRSRRTTSTWXZ^[XURPOMPT[_[WTPPQQPOOPQQTUTSQTXYVRPPQRSSSRRVTVX[][[\ZXTSSTWZ\_``_\[YXVUUTTUWY]bcb^ZVWinhfje\alnhimic^^__\\]\YWX^ba]WXXY[^[VPQYceddb`]]][]cd]ZYYZ[\^]\_cedf2dedad4d23321101037522c__cfd`^^_^aXW[bd`\YZXTPOPRSRRQRRSST[`0354334564432246=8r1..00]_1`[UTXYWUUVRPRTSQPONLLOWXUW\][[]`__^_efa_]^]\[Y^^_efhg64b\\a_^\WUWWXY[]]^[WWUVVUUTUVVUUVX[Y\`ci556654456777545687766888655564345789:866656787gfiiihgjjcag88fffececa_aba_`b3hhefhhhg5656kfefffgecbbdffggea_bbd3ge2dadebbeihfeed12344cab2212475a^`3553357;@B@:6db27<;8410257641b12013457:<=988876478630^[\^\\2226;:6aXXZYVWX]c67531_]YUUY\0012662``]YZVS[][][X]_]]/230^]ZUSRPOMPQHDDNSQOOY\TNKQSUSPMR\]Z_`_YWXWSQSRPMLQOLKKQRICGTSX]ZYWW\XPQLHMPNKKLKKLNMGIOWaggea][YUUUQLPUVX^^YYVOKIFEGGILMHJS^\NROFGELQPQUSMIHKLJQSB=@@IICDHIJLNLEBBB@ENSQLKMLJE@JQTY[ZXTQPROQQQUMKHFIIFGIMKKNOQQNGLQE@AEKHB><84=I>9ACDE>`=@>[PMOQN@>MKHLNH8FPGIJJOUVWVVVSR#RQRTSPMMKKKOMQTVWRJ;>IOQPOPRNKHJMPQR[QNMQSSRUURRU\`YV\`[WUVYYVYZYWUVZ]^YURSSMJHJNOQOJLMLJKLKMQONOPNONNMMOOQRTU]_^ZWTOOSTURQNMPSV[ahhhf]VX[[^]YXXYYYWZXRTSQQSUUWZY\cli[W^ae]KILOPOLLONQSONNKJKJECEGIIHFFGJLLKKIHHJNONNLKKMTVQQPPOONPSSSVUTRTUSOOSOLJNU]a`afnledjhl3rlifgd__YUSW[]\`ejic]_``b_YTTTUSNMJGU]ace\[`bWTUVWWZ[]YXXYXWYXSTUPQSVYXX^egc__aa[ZY^dda[\^\\[[YVVXZYVUXURPPPRTUTUWY\WPTWPMMMQVSUVRLUVRQOMPSRQIGHHJMPPQPPUUUVRHMQRSTRUUWXWXWYZUTVVY`_]\ZXY^_^^b``a^^b6;?FFE@od_^bcb^_cc^]`_\\]XV\][ZYX\agea]^`bed^[[]bc[WXYWXVUX[\^[Y[^]]_[Y[\^bdbab`^]`adfegklmklookikf_[U[010TX122a1]`_ba_moqphhkkl7da`TSVW=.MA6SOQ`[PQNJHDA9ST893:=@A@;u>;ok3b]T,LXWW?EJIKP^lrcl8<=AEHKKIHGLRQONMNNPRORWZUUXSLMPRSTVVSQSRONOQUXWVWWYXSW[WOHG]^\\ZXd`Z\[^cjlliihghf`YXUQR\`_^`]Z_aYY_a]\]`behpyrjhjmmnmpdMT]`behfc_^[WXZ^bdfecbcfghkmljibbbdc`[\`^]YMIV`fjhff_[MHN[afrxxwtw{~vqtvtrvvmf_\Y]ccfigacmqqmjnnkjdjwzrjaenw|x~~|ysniiggkllf``cjolmqstuuzxqpmqjejlnob[flnmkjjkrwv{xnpqkkidfigcbb^^]]]WNHKNMHGKSYYYZbed]Vcqnlsurmfddcea^___`dhlkfbbdd^^`bguwifow}rihspfbcinpompuzsmqvwvrr}|ztroinwxxsqlb]\Z[XY\`gpx~xussvwuv{zplhbbb`cjmnpsnmsttqb\YW]ba]fyztpoons{zz|}xz}~~QPPO}wvuwwusrsuqlb]YRPOSUSZ[SRKEENXb`VPOOMQWWVTU]dghaZXWUSQJIOY^`ZMIIIB9CRSTWVXWXKGS^XRRVXVY`bfpdh433467_^69<<=?CIOUYZXUX\^YSOMJGE}unfb_^WQTRNMVVOPQTFE9SIU+>O[[`c_XZ^``_\XPJMOMKLSRNMJHIKHRWZe]PJOMIHHFKUH?A>HPUMLNRWQILIFIDLQQTMFEDDLNMKPKFDCBFIKKFDKPL[iefba`URROJEFHyunpkiiWY[\VZ_ap||DFHJIEDHKJDwmfc^c`STP?HMCFBKPSVOPLRU]4F_edPJPQNRWRYag]VTQPXb_[a]VRQSOLLMR[iuydOWma`Z^aZ]`iggbZWXcsjdb^X`hc]OHJQHEMUXdjZMRTakYQMQQNNLKIHJKILLGFFFEJKNGEutm~ILLEH{KNzptttfUhtyaFEEDDLmmengXg|sjef[XQII:HG??5GZkJVuX||KRkmrRWHYLDAKyOfFTNNqgnC\hjmfp|vect}~|xhWRHM[?GGnyhnsrccec`igdYV^]UU[a]ZYXSOPZdabgfbdT_bfjemznbu{w^`afZKpo]dvigtU^jmnliqqfqiN@QeirjlpYXqvkrrfe^XQTlcLWvn]cXdkd]e`ckzocYOPRJL[YX]etgVTBETZdYQslrywxx>B<>GHPYRPHKL=9:[G`7CNYecRBBY\LJGHOWaomltzeTOVfmrfb`UL]ijghstwsx~rXh{Du^uFE@ytrwrhjgjryr{B}ee~a^bhhplc`bYRocan_]QV\\^KELVOVnehuZBG>3?BUUV]`RPRSORRTMIEEC?BDBAD>>KJ<@=8:?AD8hg3=E;9:S5G<]5DGFGMV_0233359979==;4__a42`_fgedi9g7ndeccZWaf^blkVc2a^a258644h66iha]\bb`fibghd4784e45455fc2C45444bbgf_d2aYY]XQX]`d32bac78_Zb53]UUWWZ^\_34653b`[Y_c`[WVTU\\XXZ^Y ())')+..+($%&'M('(*,,-.,+)'&&&',/-+*'&'('$$%&'(('&%%())(&$$%&&'((**+-./../.-+*((*,,-...-+**)& ()+,,-+)'(151143+,251233/*)('&&()3,/-*&')*,-*(&&*//.--+*++()*+**+,*))**)*,-+-,,-++,-,*,-*)()))+'&*.,,*('%#"#$&0%&&&)+#%'&$$(*(&%%##%&&%$<##&(%&*+*+,,,--.//.,+,-+))++*...,)&(,+,+''))(+-,++(''&&''('()(('(*,/124u3541031110/0/.,---+-.0/-/000132110/100/./0110/,+,,-//1.02..000///-/,-+*,0.,*)))&%)')**('(*/*)*'&(*+,*(('%*++,,),-,,,**))(('&&$ "  $&#! &)*)&#'-.-010*(*$(%%&%$""$# #**%#'2246231021..+(,0.+)++)+/3:>?=9531...,*,0/010-,+(')(')*)*+%&,33+-,((',/,+--***)*',." ##,,%%())++)%%%#"%+.-**-+)%"(,,/0/.---/,,,*.)('%('%%&(%""! !X$!#!##% $6'!#&'!!.*()*(%*$&('*./0.--+++**,+))*))*,+-/00/* &,/-,,-+)')*+)(+-++..,,.240-140..-.-,.--032.,*+-)(''()*(%''&%%&%')('(()()*))***.//-*)'(,,-*)((*,.0/387650,,./20.-.//0/2.*+)()*++-/.16=90.2473*)**+*)+-,./,,+))+*'&')*+*)())++**)(()+,++*)*,/0,,,+,+*+,,-..+)+--**,+))-2799;>DA<;@@<@CA>=<932/,-03547:>><8999;60---.-++)'08;<=769:1.--.-0111230.-2..,,-***,,++.130//11.--0321../--...--.02.+.,*(()*+-/1.*,-(&&%'*')*(#++(''()*('""#$&'))***.0..,&*+,+,+,,,-,..-/+*,+-3200/./33226555202 %%$!:424666314400342230/242110258641344772111441000./.-/1341/12223002234554433356665667988:8532+%$"%"'%''+./:=>=89;::1-*#"&'"#)'!!  #0342468885j84^Y)OKA 020.%'((%*18907 #&(*)('%),,+,+,-./,-/0//0-**,--.//.-.-+-./23211242/241,%&4333228524479<==<<::;;6320..465464268448855689;??><==842115:879856=??<9<=;86:DE?:46>:668;=;=@BABBEHA;98><7<<<=727<><;;<=@DFJD=@A=><;==;987332363.))+-*))/5556;<;509B?>ABA@=<;::643567:<>=:78::78:;=ED:7>DIMH?;>BEC??FIECA@=;?EFGFD@95542/0348>BFILICJKGEB@?AADJPNME?><9987;@BBCB=@FFDC95216985:FE@>?>=?EEEMTTRNPU[Y2MLOMJQTUXWNKKGEQZXRLGNOGIKJR]^Za\RLNOOKOQPPOT///.UNdQRLGDCDECABBEFE@<9620/1207511,()-3<92/..,03320058::656530-((,0331+))(##)+/0.132'&.1-+*--/.-++,*+-(,%%!%),.-*,021.+,*('LD@=60+(" "! !%" !"+3/242./365520,(*+*)*0.))((()'-0172)$''&%%$'.% #"),.('**,)$'$!$!'*(,(#$$#()'&*'$##"%'(($"&(%/966534-,-+)MKLLJ&()JA>9;899.001.143;BBEKF##$&'%FAB#&('$FEGD?:88440&'#"!#$ ! $.34)&)++.1-048311-*/53/31-*),*'((*/8BG8(-921-02..174441./4?:685/4:62)%(-%$+/06:0(,,4#27;>6=1226/%<5:;441,)(95(.@:03.5:404247AFF<30,,/+(44145C7--$$-06-+632*#29887@?B@BCH@,5A$<-;#$ <::=;5647;@;B$?03B@4115796334/*;43:10(,.12$%-)-848A1$(#"$///55+-/-*X++-)'%%#-# .1('#"&!-*')'& !! !#$! ###""$" ! !'&"13!&")"$M**+-/433242621/.))./+,20$*+,./00,**.-,00,02-/-- ,,..+++(()'$(+*+*)**&*+'),*,-.+)-1/-)(''+*))*-+򀇁~} |}}||}|||}~逆聅񁅀~  Ǿ½ľþþĸǶ˵Ǽúijȹƾ´ń½ý¹ſۀĿžɿʿ½üųžϹɪ¹ýʾƻĹÿĸ·Ǽž¼ѰǷzɽ肙Ż󇔌Ƹӱﺨ¹턑怇ϚűDZξЀЍȘڕΎ憗퍯⺚߉ʾϼǾ˵޻♫ìйƳѻ²仢׾ȥֆðڽ̮솈¹οŬ̺̀ƿü󆝧󁗙큈a􅉂[Za^ZY[_^\WRQQRSSSTUWXX[\[[ZXUTPMPRRTY\WUUQOOLIHJLOOMMORUWXTSSRQRSLPTUWVUVVYZYXUSRTXYZ]`dc`__\ZYVSRSRTVX`hkeZafhjiZV_e`\_Z]abfgc<^\WTTSRX\^b^YWVWXRPQU\_cfcb_\[Y]hli`[ZZ[]\]]\_e33454hf``aab`_2`_]d75ca_\^cc__^^^]XRQUXZa_[ZWRQRSSRRSTTRRSW\`1443200]VTX^1\WUU[^ada_`b][YZYVRPPRSR_QNMNTZ[_c`^]\\]\Z\^^ZUSX^_^^^``^\]_c0VR[a``_ZVSSVY\adeeda^^_^\XVYWXY\^ae468866765556776867888787 +65777545465r9=>;864gi5hhijihihec_]acdb`_][\Z[]`abbefffeffedbdeca`a`cghghghfeefef46544655hffdab7jccb`^_`][]^`abc3456641ca369:64357744676410\[15641`b2ed34677657631167532110]YXXZZ2:5155f_YUSRQRWc4542112110_1220]]1432221_ZUV[b1\YXZ\^022\ZYYZXVUSQMJLONUYUSV\1]UTSSTXUKJSYZYXSMKKKJJMPQTUUQUNJNI?<>EMMOMKU]^`^[WPNNPQLMKHFFLOOKITabeff\WUSVUTRU\[WTPTVSJGMHDNQRSNGOWZYRQOMIBILHKMJEDCCEDIKFGA?Gc?>AEHJKJHB>@CDFJQSNJHFDCHRZ`c]WROQPMFGIIHDGIKKLIKLKIHKNOOPNOMCADHJHE=753AL@AdML@FNNWWYVTOZWRJ<56[<5<>@CEFEC?<=;9652`XZAT[]J>NUFPflrfhf8o?FIJLKMLKLMLLJJKLPRUY]_^VQPOOQPKIJMQSPLQUTRTVWVY_`XTWXSLIZZVTSVY\Z\cc_]\ZZ[ZY^]XROUVUVZ]_cda``^[afhfcfikswvqmljjmnpoghkiiljghiijhhdacdefgghhkjjljfd\Xbbe^[UTX\\\YY`bdcb_ZWXVTRXelz|zzyyyqnidflqrniea[aehkmv}zvomtrnkhiijmmiowz}~wy}yttrssqrwustqmmjimoicnqkhknnovy}zwux}wwuokec^]_adejt~}vnkjlpphb`\]^XRPOMIGKSXVTW_aYLBGNS_mpgce^XZ_`_[\cacefhcb_aeb]bhjonoz{vv|~{psxy}}}{v{{wttqpmgiswrlkhgd`ZY[aaclryjSlrpqsvxyxrmoopkgfgdddbeglkkoowvifeaYR[goiefuxsuvtsvuvzyL~~}vtywnic_XQLIILPQPSMFFGEHOT[YONPQSWXSQQRTWY\\_\RI@DGOPQPDw>EE=nl:@v;>BEGJOSUWXYXWVWWTQOKHE{uodace`\TOTWNJKLBIPPLGJMOTVIXNYY[]^]\dcb\VTKITVNIMWQNQQJKWb__ZNIFPVRJEEOM@HMOMR[[WMHKHLJDYWS[ICBzCMIGRQJIC}FKGLJEJMGM`jjc]]ZNQTLH|vopj`N>\cV\decp~mmpvFIIEwwGLJF~uplfb[ZPNUK@NOMI;GMRSMLMT`6@U`a\SRSSLIOQYXZ\UPRRWYTVb`WQSVRMKOVXZbwoX]rid\\\[caeb][UVX`ispha]\_`XMFMXUKHQWapt[YdcbVNJKOQRMLKJJJIIJGDB@GTRLLQGJSVOJstzHJDJzkbj}vMZy]OLIGHBZiwilndZmqsoc[UN.-BFF>9N,G^R2IA|JSPRFfcnahppvn]kSKwyx{J_bdmozdK^K{EaJPPMJQ_?EH{pmpqe[[c\_gek\XSO[aghff_TVYbcddebdd\Y`foxzdWcttbcZSTYff\^pytFV`YeeioaT^eaRF\fowifUdl{}kXlf\]b_VQWbnbfYX`dae^]hoxgZQRYUT`\VVksa\a`VS_aXU{{yry>>?BHKKNUTNI8:6\J^A?>FVg^S:BSW[ZPXZ^egbgxscSO\`hpmrjVL[_igjtw}~fgw|oauEF||xruynhdcsup~AC~ew_T_hbirddba[ia`iaZT[cROGHMNDIpseh^TQHECLRUOU][PJLQPKSPJIGCI;?DIEDC@@HC:?=6c7AH9bc5>@97>7>J;5:9895/.011138<=>8689;<5/--+--,+**0577320350.*--,-.///0../.--//,**+++,-220///.-/00.022000,**+,+,-.V-++))(*)+,--.02/,+,.,.+)(#!%#!%+*$%!&*+'%!%%)*)+++*+00/0/,)),,---,,,-*'.,,+)+1322++,0354441/.25797677654442.100/34520/.140/1332323111/131001220/--.//-/142/.15613211235774456546544778999($)(&&,.-18:9<=<=S=;:96+++'%)#"%#&&$&$!/%-11148::;97850+(&HAA+343+!)0%-8;;2359"'((*)**)*_)*++-.03332/--,-.-*(),./,*.10/001026720121+)31/-.124359:865456536420/2200247::977648;;::==>BDB@> ?A@?::<;=:7527:::9>ED?:9?=86469:<=;=@BCGFCBDA>@@??<=A@@A=;<;::;94=>97656789?:654551/..-*(*/2235;;4)%(*.6?B>;<744776448779:;8867:859=?C@AILKKIEACIJOOG@AEFHHGFHEDJQPKKHEBA>>=:=FIC@??=;8313523:?CGILIH9+>A??BFFGFC@A?@<;;:8999;:<;=??EE>=<:2,4=B=;8$(#(1/.-+.25/.0*')'7'(''!#%(*,.//.../.-,*(&JEA=6320*&!!$ ('.,/23227662..*(//*'(/,+,-)J(06442*%#(-+%##*)!CEF()*),10-'$%#%% 0.*1%""@#)&%-+&&#?$)$('#&(#'4;;5232),/*(NMHHHGIID@<;60&37,0776B%)(%IGGFA>;:72/(')$#$# """%(/41,,,.*(,-1/040,,+./+,42-)*,+('(-..2@;,/=52-..,114211...29>=9523562*&)0.(',/5@A11767-(&&()+'&%$$%%&&$"! BE$-+(),%CB)02,*K?@@'+)*GHD;58HB*2DLG1$!2=DH9;=405)##$-%1(L+/,.):7=O8:BCAME<38F/,@DFJ@C)436=>CE4&2K)IAE#, !!"!#,!$;87993/172496:1.-,369:872++-333453763/478;<1+4>?140.++75./2.27/)04-,ECFD?AE! ""&'&$# &!,#$$&/81- *-03(.057847@?5*'378=8:7+&.1988>?GFDBFD76?A<1<##@<;<>?9633<>9?!#>/?H/+1616<3312.:21830+05+*##&("&?<4;4++&%#*..+030*'),+*/,''&"')3/)$!!'"#+-++)%(((%##%&! !###"#!" %!!$/#/0$"#"$'*++145455773-,-/.-+-/0.-,+)-.-2.+*++-23/0.+//,-+;+(),+)'$$&(,--&$%)+()'$'(*,,,+*),--+*)()**,,./ހŀ~}|}~쁂~ ¾½¾¼¼ڻ􄇅􂈊þսʶȻƾŽʼºƺ»¿»Ž½н¿ƾºýŽǼĽ˾рƯ񀂃ꂉʾʹθێýƻۀ¾̿ı¿ƿ݀ϼǴļ΀̼ĵԽ郀ʼ½´ɴ̥ʿȣȼ¸ŽϺŰ·꾴۶Ǿ˴ߥԚڏ˫儘ꃋؒӸዂ۵´ɾǷƾ㳚˰ޡĵͲǻɮҭ˷ó准뀇ɽیÂЭǺѵûּͺ²ƴ뀃񂇃񀂈􁇍GWW_aa^YYZWVUVXVVUUSUVVY[Z\^^\ZYVQQRPLOW\\WSTVVSOKIJLLMNPPPVVVWWUSSQPPPSUTTSRRTTVXWUTW[^^]\[[YWUSRRQPR\c^YTSTUUUQR[]ci]Yag57micXQOPQNNU^^XTRRTXXWWY\`aZZ_\ZY]ipmfe_[Z\[]`_^^cf778773`[\[YVTVXYZ[`gfb`]^_^_`aab`]YWXccVZ]^a]XUUTVYVTSU}W\^`a]^\ZVVYXWXUUX^\[UH?IOZRP\hfeb]YWSPQRSRRSSSQNNQZ^]_]ZZ[\ZXYZ[YSMLMPWZZ]\[ZXZ^_0/-//]_```^[YVY[\[]24477655544467:=?AA@@?=;9:9867889:<:99888;<:9766567876555776654 j556khfba`^][hZ[``^`bbbabdcacdbaed`^\[[^`cg45gefhiifdcad335565hecb^\^ecb23433d^[\\[_de3gd_[Y\c25973367632235447973/[[.10][bh569==<;9764217;61]\`a_\ZWW_3650^ZUWYWTVXZ`aba]ZZZ[[X[]_00\XWUZ0123321][]_10[WUW\___^[XU[^[ZYYWVZ\URUSTX\][TQRNOSYVOPTVOLB4FKDCJKOPTQ[XY[TPNFGLKECGNJRchb^[\YXXSRSSPJLOZ][YRUacafe]WVSX_XYVZaYXVRTUQMLMJKNNQQMKTSXTQNNMFAHLNRSNFA@BFFFKJA8BHKNLLORRRJLLIGIMNOQQMNNHFMSNHFD619CGJBCJGBJOLHHIIMNIFE;?HKHKLLJLOSQLNRRTUSUVOORPPSTVTQQNLMNLKLHA@LRUVVWYYWZWSTVVUVYWWZ\\ZTSSV_dZWXTRX[Y]_]ZYXXWUVVV[`YUUTONMMNKKMQROOLIMOOLKQYTLGLOPPNMOSVWZ^\VSRSTRQRQPNPRUTQSTX^dknljid`_2[XXYYWVUPNPRTUWUTUYYZ\\[Y\ZX[bge]XVVQPPNHHKMPTTPLJI\MRROMKJJIIHFEGKOOMNOONPTWVSOLLOQQVVZZ`^\YTRTY[[WV[abbdhlg_`iloqqvuqgclnc]^`_[Z`fkndV[]]\[YVURPOOOPSWWUUTWYUVTUTUSPQRTYXY[YXWWVTRRRU\dge`a_`dcbegdcdd`]\XVVTUVTSVWVSUWVQOQQSRRSSRSXVUUURPRWRUSGFHJPLLSUQQOUTPOSPMNOQRUUSQRUTU[/_[OMRTWVWVUSTRUWUUUSWZ\\YRPLSYZ[\]_a`]\Z\acc_]ab^]\Z]__]\]_[YWYYVTVY\]\_`b^[XUVXZ[[X\][VTRSVXWXZ_^]^_bfce^[\]agihcbceecefdcilnlk79:<;:>A=hf[S\VIa38:;8q:okmpnmonlmiPU1444e_ZXPJE=JPM@>E:1RaXQHH@N!9?@BEHGDB@?=;8853c\_APV\FqMZWVgmge78qjAEIPYVTRSQaPOONKIGHNSQIAy=GPOPKHDA?@A?@>DHIMRYXSV^momdbjxynik[\l:<;;:AEGIJJKMNOQTWYXTSQPNKJJIGDtog_ZWX_[XSQLGJPRVSUW\fgdf2/2KKFUag^__\_YTPINUKKBPQL^UGEEGY]\ZYQKSSQNRVPGCHKJGJJHBHFC?BKFFBCAB9@DBrca=F<566==;?n9@E<9=B>;T[ZZ/0353-388;<:51\Z]_aa49;789:77jmla^ajfa[bdeg44eZU_444d3c`575c`__`dikicjgYc54c366H653cbafaa33b]YWV`32a_[YROSY_gcUWXY`22587dXTTRQSSU\a2585e^ZXWXYXXYZ[]^]\Z])*,+-,)*,*('()))((')*)*+*+-...-+(()(%#'-/+')*))'$""##$$&&%')()))(('&&'(*+,-,)(('''()+,+))+-,+*)(('%$%'+/.+(%%&)-)$)+.3.*.1110(%$%&%$'**'&%&&((''),./+)*)(()-21-/+((()*+*((*++()**(&'(((),//.-,++)**+,,+)'&(..'(+++*('''()('&''&&'))'$"$%&%"$$$#$$$"!'%")/-.-)'%$"#%Y&##$)+**(()*,*)+--*&""$%(*))(()()*(#&(*,,*((++,,+44210//.-+-,+*,/.-.-.--,.X/--10-,++-/0110012330/.-1100/,+./---*()((+/0.,)''*-)*++/0'')++**)'*''&),+)++,/0/-*((())&''()((()(')**(')-.-,*+*'*-,,-.-,--(&(%#%%%$!! "'%"#%&" "' "#% &''(%"" #*($"%.-1:<61020/.+,,+'#'*1442.18869830.,04//-05/0/,-,*((*+--,--*'--1/-,,-(%'*-./,'##$((')("!&&(,*-/..01.++)&&()'$%&().57981,+*+($!$&)+)(+.--'(('''(&$"! "  %%"')%#"" "#"#$!#(,))(')*-.+(),++,,--)+-***,.-+,())*))*)()&!$.0101121120.*--/.-/121-,-.5920/-,030341/.-,+,.--03.,,,*(&&')*))&$'(('&+0,&"()))(((+,-/00,***,*))(('(*,+)+,.26;<::<6320./0/.-,**+++,,++,-..011020.26983/--*+-,)(*,042/-+**))-11.,*)))('&&p')++**++,-01/-+*+,.-//214320-,./12002689:<@<88>?ACDIIE?=BC:5676448<@B=2476431/.,-,--+*+-.110..//-.,,,-,-..,../1/.,+*)*.231././100021256300-,,+,-*),,,++,,*)))***+++,//--,+)+.,.,$!!%# $%##$'&%%**'(*+-.-,**,+-031)(+--++,++-+,,*+**-/110++',0001233300/03553246533024431130.-/0/-.021033420/-./000.220-,+-.0/01232346877312347774467767533688870/(#)#):;9;><<<;:;6'&'&$$ ##(" )/2335:;999863/,&$HCD+024'=*1/.8;53;8!&))**'++*)))(&&$'+.351,+,*)+-*))')-.-,+///123211476431+(0451157642133101,'%%*.141465346989:;743579;>?=;:<@@=<;;86569==:89;=<63/*'&!!$$$*2.'$"%)'%+/./1442//3:<=A?>?@BD@=<<:6423127;;8596568<>?@<=@>=::EFFFE@7;==@?>=@AADHGHGA=BCA8337;879;>IQNHJOMC>:75234555660/7;:3269<:2-,./04:;DIB>@?:525:;:=@BA>==>=;:7545:;>@ECEGJMLJHAHNGDEFEEEDECGLQILSRLEEDDEA>=AEMRJ@?=:98655636=EMPNMOKKH@@?BBFIB=8971159:<:9=AFCEC@?=;??:<<::=HMJ?:80+*)+(%" !"#%! !#'&%'$$ +58334240.,(+/'' '+-/*%(4::.(&%$$,-%%')+$ADCJ*-/,365.# '((%,2)-*"$%$'&$+/*--B<'&%+'#$*/79<2-.0-*-*''LJEABFEB@@=94$2;72593;@G=1=HG%)*)$=8,# $$! 27'#!!"#&+#-180,/*+)'(-/*/4,+//.)(.430+,/,)))+))07810952,*-.41/0/0-+,/4AD;73-29.)-.2/'',14;A9680,+)&'+-+&'%$%&%%$%&#"!FM,,)'(J'LO(+-))E?D)G5*&A?;7>EL:4J/A.1+&'&,9<@D8;<8,5DD@DB6-##*,2B3=14J5;B)-D78*,3=4#/;HF61@GA-%,%"36:5)!%,;;#&17=0')& %6968;72-,'&37,342-+16198532;EJA421331351.2/60/46/*+)*"8='&;=$)*'&#"$"(%&#*%%+%+/16?1..54974:471'554=8>;.-,133>A=:B;1B>21006946882177862/13'$#!')'$0>3(023.+''-2--78/+(*,',-+,'%+"*)&/*"!"!+..-,'#(((&')&!!$%!$$# #"$ !  $"81,!!3!##!E('()++476/-/1/-+/.-./+),..,/.//--.00.21'./6.,-0,+,*(%%++)'&#"%)-1/'()(+.)''%%%$%),.+)*))+---,ȁÀ~}|}~倂큂 + + ¾ýۀľЀƺúϺԀѾ̿ƿȼúмʷ¶ýſ¾˨ƾ,ĽľǠɹ¿ĿʽøʽԼźȺꇚǿùźŽƼȼɾÀżºļŶ˱øĽȻʾ¼րúȺƽó䂒쀆̻ǿЀ邐пø¶酙ƿĵ͸·拐⃅պĿΠɠƼҬʬɸĹ㉀䎇ꀃ۳ij˽÷Ŀó⧸ɪѴɲ廌؛ۀ´ƧɲҹǮ؆اõǸǷ܀Ԁ¾¹Ƭùƻ÷͹񌌧񃊇6퀇ހTT]aab_WVXVVX\\YYWUVUVVWWZ]]_aa^ZXWUQNQUVTSUVVVUSPMLMMLOPNOPQRSVXVTSROPQSWWURQQONOOPSVVUVXZ\ZVVYYWVXXUQOKKLLKJIKMT]XTTUXXTRW]^[Z\[VRQRRPQRUWUUTW^b]]aYVVVUX`b`_]\_]]`^][[]_aa_^bcefedgkb[YWWUTX]a_^djgfeed`[\^``_\[[Zd6n^Y\]^YUSRRTVWVVXY[[Z\ZSWZYVSQQUQNNORTRQROKGILQPPTY\__]__ZUTTTWXUSRSQTWXWYZ[\\[[[XWVVXZYWUUVZ[\^]]]_c1114520c23eca[Y___]\_25778:<>>=:9<=965348=;975468720[Z[]][XVZbbXTSRQSUSRUZ\^]Y\\WVWY^]^`]\\[XXVW_423543320^ZYYTPRX\\[\/11]\ZYVSV[^^WUYWRRSRQPLKMHFLOHEDFIHOMJSP>3CMSWWZ1/\UQNFESXQOJINMUZ[XTRZbkibec]X\]]`^a`\`f_agb_YXXYXUXX_`XUXYUNJLOU[]VOPTSRVVWTUWSQLQQORSQMFIIILMNOKIHHIFFPLKMMLOSTRTTPNKHGHILORX\[YWTTWXWOKJKINWQKMMHDCEGJJLNLOQPOODDUVPLPIC76@=GXdQYj=>f;EILKLKMIGDEHIILKNRPMKMNJLMIEFGAEPRSTWZ]cha]]`]_YTWVRMZcec`ae_YWWYZUV_b[YXZ^_a`]cea]\eecbegb^\]_cfkpvxy{ytollnptx{|ztnlonqtronkc_^^bijhcbdgkkki`VK:W>JZcowyysg_\Z\`a]Z\`_]]WQVcottqopwxzwohddb_`bjokidbacdgghpwxxxz{||{|~{yyzxtssz~}wtrrv|~~{x{|{}}y}ztrkfca^bjkkijnwz||xw{uja\YZYZZXTZ^abdbcnvfZTPRWY_`bhknxvme__ejf``cgkhnssplhgjgeimqppu|}yw|zidkpqmllms{}wtslqtrrswtrtzz|vkdfb]`defeddn{~xus}Hwlbaacdfihegjtwwwxxz{{{rnrmp}pelvypmkhjxyy~GG~~zxyzwsuxxuw~z~z|~OROMO|wtupi^ZUPMJIHEFJJHD>6347>DIT[TKQRLKMNKJMMJGFJNNLICDJNKIIKKDBDAFHHKNSTSTTQNRUQLPUW_6cVcc_b@8;HHP[\Xa\imbZUTPZW_XYifQRQ^lcrrfdZ\Z_rwnzFIID|kdCollprtpfcnlXZcnyGD|wntsld`[dmluqidknjc\`c`UQLCERRFQ`XVRRQW]OJLOYd_]a`[PJIUWMMNQB?ABDELRURHDY]YXPIGNWJDNXVKAADDEJICCINME>?=?AEC=9=DA8957>97:hgj?Fae99HPIE?=T[a01/0689798:962_^]][^]37657=:7kahg_[a5f\Y`bef34fic\^ehieheafg6g_bfiii9:hei]_3b_c46532aa^bbc34c]YWT[ab_]\[\ZTSW[[XZ`][^]c8<7^XTUTURNSX_257875b\X[\XWYZ]ab]X((-//.-(')(()+,**)((() *-./11/+))*)%%'('())(()(&%#$$#$&%&&)**('''(()+,*(''&%$%&)+++*+++*('())()*(&&$##$"!!!"$*(%%&(++)+--+)()'&&'''((()(''),,()-)')*))-.-,,++))**))*,,**+*,--./..0+''(('`'),.-,-1/---,+))+,+*)(((,2,(**+(&&%%&&'''(()(((%!&&%%$## "##! !! "#%$%&')*+*++)'&'&(('&&&%&'())()*+)((()**)(((+)()))**,(/.,*+...,*+- 20/..-,+---,-...,+,---,..-4..,-.2200/.-.2/.-/3210///0/.-,12/,,,..-//...-+*+ *+/+'')++**))--'%&%''('&),---+,,'&(*,*)*((',)'%'%#%*-.-,-,+*)&(,/.*(,-)(&$!  !!!""!&& #%&'+&""!,0)&%%*.1210,-1451/10,)+,,./0..2834732///0//0/350.121.+-04785/-//-.//-03/.+12./.,*(+*)+,-,)'(((%$+)),,+-/0/.-*(&%%&')+,021/.--/00*(()'*0+())%##$&'(()''&$! &$! "''n'%$%$"! "#&%%*--.+)),-,,+***+,/.*,/+()+,,.-)')*)*+*)&$"520./00///-,.4656532/.1311/-360-..+,/-/34310-++-.,.-+*) &&')*))&#'((,.*%')*)))+-/01/-,,.,*5++**,./25766;>;9863430.,*))*+.//0010/02211/--2560--.,* +-.12100/-/020-)(''()-.+(&((*-*&()**$"(+-035841//100213466688983147789=A@<;=BB@?@>;;=@BC=756533510/..-.421//26540..,-.-*+0%$10.,-./.,,+-*))+./10-.012544433,(/44,**,+*,*()*+,,+***,/.--,-,*)),.,(%"#$##&++''',.&#"%(*+-+,,-++..++,---.---0.,,+*++,--/-+-&,..134214243343433232450//03431025/+.131-,-../125652./02431./10-((*.-/123269646544434678745434855668986m4'$('#*2:;=<<= ><2%#%)&!"!#" ,00468:9766541-*%#GD".022+G$ &29+08!!3%&(())+))&'*))+*,-,++,+(+,(%'(#'./023449<6334352/120+4887479521132007843235565479644:;99:<86667:=?ADCDEEC@?@@@BDEEDC?>??@B@?><74547==;7688G::84-& )$-5;>??:2)&&(,000255431-/7ACA?>@DDCA<7567556:=9755566767>CBABCAEDB@ACCB@@FHFDAA@@ACDILLOQNLKJKGHHFGFCFHBDEEDGGEBADGIHFFC?<867757<==::?EHHJHFDEHJC;7423345303778:88>D9420354768::>EB>;77:?><;;=>:?CCA?;;<87??CGGHDBB?BCBCCFDACGFHF?:;957:;<<96A<>LOKHA;AHHA?>=;4)''%!!!!"!! #"#% !&/212/20..*F*/-'1',--)-134/%"""#'+'%''&"@ADM,).-*0/+&!%,*)'*('-&$'%$E$)..13*!%)*.*"A'15543.//.*&#&'&IHDBEDCFDBA?=1,4:71-)7=:>67ID@#'((!:AE'-+(IIHEA=<@A5'! /;0&&!!! && ',01(+-&*,('-,+-.-.-*'*/3453,+10-*'((()-462641**1///.302/--./7B:5.+/500/,0+$'*135<830)(.-**+)'%''&'&%%"'($$#D5:J*5280-:D-)8>*@5H))B2?,(09;5-*/,1FGBC%%?757877BC$;5;<=8+,3;;32+46250<9BEE>8644/)-77*/0-.06340+-4,;='09*-=A5=M;10+ #/7<92)%(5=0,45&$(((5+>A8:81,)%2D7**,).531:?<304>D<42669543-+-29/,)18/*(&:@&'($$(*%#(& " ! #0$&&+3.439=9300-32732:;..-4B8?>45-000:?;AH%&&$@74"A98:;;<;64<@<86553100246420/\XZ]\XVXa65_VSOQQKJRY]^`11243345552b``^\[Z[\055223111.[ZWXVPS[Z\]`10`^[[_db]Z[ad_\[XVTQNORPNNMQQLIG@CPPMJF:FHMUUSU/0]YSEBJFN\WSRH?DW\[\VKIV]^XTWY^c`_^_\24433ekg`YWWVUUZ[\__XUWUWPNZhjhf`VRWZVTSRMQTOOPWWORROKQZSJJNWZRPOKHBHNFEDEGJMPSTSQNMNPTVZZVZYWTTWXXTURMHGIMPLLNKFDGHHHJKLKKNPRONHQ_VMKOF<=A@66?GILG@IJFGIHJFDAEDGIKMPSWTNLOORRMKORSUTTQTVUSRPNQUTPKLOMLII>>WRPPPRTRPRX_gld^Z\]_]Z\`a^[WZXSRVXTQVVV[_^`_[ZYVWVVURNOMNOMMNMMONPJFFHMOLMOPSVUF3BKNPRQSW\^\ZXYZYVUVVVTSTSQRRQTUTWZ]]^dnsigc[`c_[YTRSTRUWY_^[]^aa]XZYRQU\a_XSTUPKKJMPQRSSRRSTX[YWWZXPKIJKMLLLPUUURNMLLMJNVTSH:=GOQQRTUQRVZ]_`[Z^ccabcdb^XY\\ZY\^]]]Z[fkmornjloqqga^\\ZZ_^WYZZUTZ^^`[\gmh_[\ZXZ\[Z[[KZ5IOSSRUTTONSSUYabaccgfbcaah9?BFHGEBA?>;8532debHSYd\OOE>JW\M_]eBqlBEEFIJLKJ?ggvDDJJINRTONKJMOLKKEDIKJMKKPUXZ_cZXXY]\YQPSWU`kgb`bf_[Z]ahecgnkihjdaageakle_Zadb`ehgcdggfgjnruuqommoomlrz}unkjjqww|zumebeg]cnjigjmnkoiVGGNT^abfnyyomptyvib^_]^^[YTWbijhffklnl`]``_]_fjljilomlrunluyvt|os|gfoqpprtvy~zLOLI{}|yqlpvljmqwypkkmnqnnrw|x|zroa[^_^`_PINX[_ejmbUY\[_WNPX]_h{uifedffcbe`\[^ouqnliiklppkkpnqpu}~xsuxzudgpnlknt|xmomnlostsoonjllihfdcehkmmjfecchornpszl`ZZ_djpzuop{~~yz~rwszxtoflpsqpqs~yrnkjnpkkrzvpsyytrtqpsrqrssutlmjnv~NSTNILPUXRROK|wtolkcZTSPQPIIKIILIB926>CDGLU^[WLDFDDIEHIGGJEFNSPPRSSPONNUXWUSTTOOSQLQUWXVT_n:j\h:BR]c&ccecbbb^\\\]^`]YVQPMHFFwic`YXWSPQPMNRV[YPORTQW[WZ1125203AMLIV]]XUZTUSHH[XNFtvHNRTUUXZZSHEEIOMHGD}}wyMLINGMQMKGCIKKGBCEOTKIF~AJONMSOLWRW][MAN\cdd`]]WRMA?FG~wz~{}wrrh_dkl\MPjb`_bo}vzBLLE~STM~wlffolZOG=<<>F\lbUSSPKDBNPUHZYXZOHQQKQQNSWROPWVNIGHNXbedaYSW\TKGHIGH]kfac]YZ]d^\`ahX\]WRSSaqm^QUZbcZQOQNKLPV[cdXOOMS]ZXUPONNMLKKHIF@GPKFEiHYWXJzonvDDw~FzEFocempila[SUUW[SIL\woV~r{FIpli_HA@D6-42FMEeBLL_du|jSvKFjJSy}u|M~{Yn_yRJrT|FH~DNESO`f`]i|hnwZhkinyysijCEpaqcRV_khbZbjaX`toea^foaUQTRVUPKPJeicaVGO^buFt\TQ`nh^beb\X]JJ@1]{gUOZ`awwSUQAAE^gfk`Xhhhia^YQVgeWMSWST_aeoolkmrj]Xabgke^\OPU^\XWRW^YXQGBOOIGS[OHEHXXSHFc5J?/PcZ8?5WKCXEWma^aehobVOPPUYP[g]LRP[h^mkikZaaetws~JQNOFofxHqfmwvqiciq\_bepHICmsv{siabfe}{vpghgddea]b[RH?KLGORSZ\ic[\aWRI]kcUSci[MJVWTe`TBILC67>BHNQJY`\WNLAHUQIHOUSOIHGGIIEHOY[WTTLA@FB<>::i^i<>A;imidf@E^Y;6=KNKB?S0224658::;<9:84`[Z]^WW_355548h4lYeda\a5dZVe64354cacdeh5geecebjkbaglod]h6g7kchMd[]28831^a]^^_c46d][[\bb_[]__caVSUTTV]`]][Z19;4]YYXUSPPPQY`25785f^`b^[]_adjh` +(')-..,)())*+*))()(')+...//.,(&&((''&&'''(('&&%$#%$#$%&'('&''('%')()*)'%$###%(***)('!('''(**(&%$%$$%%#!"&(('(%#"$$$&'K%$$%'&&&%(-,*+-*''&&)/.-+***((*+*+-+((*+,.,+,-..-)&&&()(,,-+),..-++)'&%(()*)=*,)(('(&%''%%&'())()(('!"#$&$  !"#""%&'),+)(**+,''&%0&&&')+*(&''('&('&&''&(,-+*)'))*+('()++*)+',-,*)*+*)&&*)*)!)0*&$"000100/5.-++*+,.//100120/,,--..0//../.,,./1012441/..01/.,+,,031/.+(*,-..,*+.232.,,-.+---.,-+**-+'&)--+**.-('%'&! &*++,++*)()(*+((&&%#&+,,-.++**-///..11/--,,*%"!"! "" &#!  #$#$))&!!(1-(%"#0412.(&.1-('*)*-))(((054/..//./21/21..005-209CD@=:2-140/.-+-1--/23...+).40+*,25.,,*(%)+'^)*,.//,*(),01222020.,,-/0-.,(%&'))')+)&%('&%&'&&''&# "(#"!'($$%$'$"!$#"&*+-/20-,-)'*,-,--,,+*),-,)')+*C)%$!2.--./0.,.258941.0120/14432020-,/1-*-.-25444110.0.-,*')()*('(()%"#%(('''(+-+!!&()***,01//..//-,++,+)**+++*,-+-/1138?A:8514631/,+*+-/114300/110.11-,.3630-.0,)))-//00011235763243.)())**))+---,)('())*00/) !)-..-,/1358536::878865224412678:@CBCDB>=@BC=9746601320/477856?C?7341/0/:.&.$&*++-+,*),++-10./.132310331/01('/1/*(+-,.,*)'&'),+*,V-.//.--,+..**-.,++'$### (*''*/,''%&%"#*-../+*+,,**,..-,,.20--++*'*+-20./..//01312554O56501143.//044,(.14.)-/33/-.///224561,0)&1/-*-/0/*$$*+*-,//221230145347874121/156886644497<::99; -&$'#('("#"!""+33479;97420/+)&#"HHC.1253**$ )00)704$:9#%%&)*+,,$:9C'%)*),/0,*)(+,+++'&)++,++-/237:310/332/.02/7=:779;75434877;><::;877;96<=:7378659;;9;=<;=>?ABB@?>@BB@?BGJIC>===@DDFD@=957:2.:988:<=::6)#)1579=CEB>99:;>=852233212//6<=<::=<;9/.5455579::8:=<:>A=;?A@=EIFE:=>7;>>AC@<CF@BA>>4136664*%(156:?@9366682+,256=GIA:99:<;;>B@:8:DHDB@==>=BD>;>?@@CIIDBEEFD9=EDB@BFJLME>A?>>ABBC@@?;==;<<;9;=?A@?==::A@FQLEC>9@AA@AACKLLOMGBA?>@@=>DHD?@CGDCAB@ACB@ABBCB=<<@GKPSSQPV.12-RNJIHGIN)+.2301.+SEDEFBBB;52301.(()&"!$-543.+*((QNLO(MHI''('*,''-/,---,*)&$%$"!!"" !! ##!$+% +!)-/02322320/0134530.,-+'LL('LJHB}83/*(%" !!!  "$&% "!!#$!#&$"*.0-,1/0.&%30'"8:&+-..-11.*$#C$%('%%$>CB?CK+*(+')+'%#"&((&"#$(,%%&GB"(+)',)(0*-10(@!*15440-)!"&&GGE?BFFDHKID@>60499.&*;6777?GAA#(("?BAF./,NHEEB=;B%(E<85- .!!$04C[K:H-@*,=,5IHBF2LL8D4B1*I4A(+I).%-(07109BLD69B<.;:7:A@=54""80:2*+/552.373-5?G=7516>60-..10.)*&6811,#'0.;%<0-(2<:1452/-/"$#2@6+&,/1A>*.+ .67=4-536831/+,88,&+.+,235;978=B',)*$80;%CB=8:??<74:>-0338E&'HGF#59=A<73453><<:687545422/*"&($(*,2383,03-,'5>7--8<2)'01.63- &("!#'*)",W0-,'%#,'!"&)(%#"!"##!#(,-+*,(!2-5 22111#+( "!!*('*+'&*13)1/-*,-)(1../0.10.-33.../1+&.00,./+*)+)-/+*5)')*+,-''(((*,-+*)(**((&&%$#$(+.+--+++,-.21. Ҁ }|}~  1˄ʀ¿üþྟVٿۄڀĸ-󀅇Ƚľ·Ŀǿº¹͹´ľ½¾½þijɼ¼ȼǼ¾Ԁ¼Ԁ±欺偓񆑗ýĶǻüϿüÿ̫˸˾ȷüƾ¹Āɾ¿㊣Ƹ򄑐ѹм烑遌ʼӶǶꦴžýİӳ鄏儌ļ¾ˀŵɐ±Ճөý㷱¶½ָ˷ëظ냂պɳûؽ¢̀Ƶư򂇛ͧ儬ѾЭ䄆ƺӹĺıҀ񀆄Ǿ#Vfc_YZ\]___[ZZ[[ZYYWVTRSTUUVWZYX[XUTTWWYYUTUSQQRSTUUVUUTSSPPSRPPOPRTTUUSRONPPPRUUUTRONORuQPQRSTUTSPQTWWWTPORSSUSNMORTUTSPMLNLKLNPQONLHGFJMPSTQTVUXZ[XVUSQQTVYXY[[WWZ^_]ZZ\]^afe`^ZRJR][WRRY`^[Y[XX]]add_]\]ZZZ[ZYWWYXXWVWWWYZYXY[\[\^a``bVMDAHLIHEEDDEGHIIKMNQTW[^_\]ZWXWYZXOMNMOQRTUVX[_b^\YXYYWWVUUVXVVWZ\\YXZ[]^\\\]^__]]^`bbccb23da^`aabca`_^a4741132]Z`2458;@ISbld]WQE>;9666544566554433344679765gdcd332345fccecc345565g33321ca`bbdgfeeeggcbb`abcbcdcdccdgj76lhefgghjkkjgeedccdeedb``c5jeb]^_\Y\]]]__^^]]_bcgjgdgggcbeb`^]_b^]\]\\`c453234568997542232_/13431/]^[[^\VV]d4d[VUVWYZ[e43111000_]010^_]]]\_1_]024421.]].\^01a^^^_`_\YY[023332c^_``^`^YVVTRMMOPNHJNMILNPXZSOTSTSMQTUVVSSQOLHTVPMKIIOTXYWPE@OXVQMLIUSO\_`15655533ea^]\][\fiig_VUTWURT]gkcYQKFIKPWVVYSLNUTKJPUSKMONIHJPZXRSTQTURKGDCDFHJGKPPQTX[ZUWXVVXVTPRWYWMKHEEEILIJQSRPIJJKLLNRURQSUROQPNPNKFBA>?;3>IJOLEGGDFFDGFDCDEELPORXXWTTSRTWRPTVTSPRUTSRSQOPRSRQOOPROMNOOOGIWOSVXZ`cdit{zwj^UWZ[Z[]`_\]ZXWURYZWRTZY[\ZZ\\Z\\XUQTUSSPSTPRRRSTQNIFIMMLJMORTRJ?9GLPPSTUX[[YXXYYWVTSTTQOOQTVUUYYX]eikhe_Y]\YVUTTVYZZ[[\_``[VTVVSST\a]VONPONMMPOPSUVTV\cee`]`^UOMNNNORSTUXXSRPNMPPPQPMA:CS[WQOOQSWY\_dgfdjmheec`ccba`YWXZ^^\]]^aafostponk`ZdZ[ZYZ[\XVWXYWXZW\^_dllf_^a]Z\]^]ZXXXVPPRUXXUTQRW\_dgb`bdiid``]bgfba^^]^]^^XUTYYYZXSMIIIKOPPRUUVWVUTUVSNNRSSSNNQPQNLLHMOJKNSWPPONLJB@JOTTRQSSTTRTYZZYWZZ``ZURRNLQRW_b_XUUWWWY\]affd^\[aee_Z`cba]][[\\VU[]^ZWXY^a\XYWUW[_effd_^LBXaa`ac`^ZURRLMQOONSTX\]]]\^cgggec_^bdegghjk678999877:@B?99::;;8mm9:jhhikjl9=>>722542_Q^d^b1c^Y[\SMMFA@HHGORJ:?@>BGJKIGD@=;8542fh6OUV9rV[RRcdWOcVXokd;BFBDGIJJD=ncmsBJKMQSOLJJNSRMIEDILKG!LQQWZZ\WX\XVUUXWalc``a]WX[]]dd`ahle\Ycf][_adfhllikkkjhhjijkjkqtrnmlmkecgmsi^ainpsv{~zvolni\iurgfnomotqbSOYeljfbcfloqvztokh`]\\WQPSTUR\a``[SZZZ\]bhjfUYo~}zwwyvv~I|vyvruzyuusokd`eknu{}zyKOQUURKLPSTPLNOQRMJ{zyz|vs[fywxzrhgVDOioprqoldaac`^[Y_e`UNW_[STTUTJFYgbhqvvmbgtzoc`_gfbisvuomjjjikqncZbklr{sttrmf`efbdioppstopniggmpmlgfbaghgghhiimmlighedgeeiu~{upje`ahqw||z|~xxy{}yrla^^_fqj{wqpnnqnqzysoieggknllfdbb`___bjlnpqpqqoostxLQSTO~{JOQKLKKNMGxnmjge[TROOOKINTVWTJCA?AKPLMSVRMHEGF}yy{FE}wvurEVYSSQPNORWX\ZVTSRUWYZZ\ZW]ipt>HMJJQ[bheaaa``][ZZZVRPOMLHGIIv{H{qf`[[YUTPNQKJLPPS\[RSRUXb/WY]^^c542/2CQMMSZZW\]WTNGSXKKJKKQRSQRWYUVOF|FKGDEE@~HEKLFBDHPNMHGKHFBBKNTSIHELQKFHMHPTP\cYGBFN]gggaXTSRNLJFDywztpw{uwr_asxm[V`SVa_iqnvAGMIB|uCLK{ymeb`a]RHG?:9D\weNRYTNE?DIM`S`ZSOHMYOJNOTUQLLP[SGKKJNYehd_UOU`\OEGNROYdild\YZ[fdZY^g^\]ZVUVc~{bYZ[]d]SOLMPNLTZ`dWQSTPSVZWQMJIHLMLKKHEINKGHEzFOPMyuupzqyDGyuGMMiffv{h_ZYUYUOMPHJUhk`q~~FEylh\QJED>55RJVM6G[SUVMWmfHjuFbvi@W{c\ovEJKPFbkRIDEFL_Xacp]VlqUhF`Yruoxt`_itJqjBrZPfja]Y_ja^r|rZ]X_o\wqRQPRNL^iVT[`plUQ`gn>@iYZda^Z\]VLN\WPMSovcWS^fYniVNCCI\b[`g_hk[V_iaKNWV[XZVOKW[WZbhsvnjgbdf^g`]cc\XXSSYU[ZPZXQUSOGF^aKERXaXWRYZJP))=WNB6f[8PUWqobba^]`a[STRNNPXgMELPRY\ZU\`[^fnqrtTSJIFDt>EBwhuzqogbkkTWdlxHxwok{zx~plkj@C}tljd_bbZOdlYNEEECPTRWXepoegmtdefehne[UNNVSOYYSGGRTJF@=>;>BJSURRQIMONLJJKLMIGHIIGGJSZ\[]`[MFLFCDA>ZRjAHMHB>=;j9E>899?IJIKIS03349869;;<;:61`\VYZWRS\e5698\_4Xc`^adeb_W^e5674c`_ghh54fefdf77cbhmBNU3bm88hggb\a4521`^[Z[]`c54b_]]bd4b\]]_`]WSQRRVY["^2550^ZXVQQQUST[^`b343`bb^`b366563 1.,)*++,,-,,+*))('&())**,,++)'( +)*()*(&%'()'''((&%&'(*'&&'&(***)'&%%&'('%%%'n%%'('''%$%%%''$#$&'()('%%'&$%%&'%$$"!!#%%''%&&'+,+*)*))())*))**('),,+**)))+/.*)(#"*)'$$(-+)'))(+*,.-)((*))(()(%'''(('&'('())((**(')+,,/(" $$!!!  :""#%'(()*()(&'(())##%%$$%&''&'*,,*)'(('((('()((()***)*)+**+,++***+.-',,*)*)+*), $-0,($"=.--.1/-.-./..--.021000230//././.--/22/.0123444310/<00/.,++.61.*++*)*))+-.--,,...13/,//0//0/.-*+-+*(('')+2)**'(,,)),//*'&'(*++0+))+-++f()'(++./..,)))*1.-..--,(%$$$!!! !!!""%'%$%$""!#$%&&&'%#"+-'$##$(,11.+'$-1-)&%#*)%))'../13434;;86301132249?D>60,((*,2004/*+00((-0.),-,)(+/320/0.01.)'&%%&))')++*-034021//0-,)*-//)'%$%%()((--,,&(('('(+,**++($#! ! " #&%%%$&$""##"&))-121020../**,.,+*,/.+*++*+--++**+.+*++)($&1-01126879?BAA92-/110034312100/,02.+,002332221120-*+--,*,-*+++,,)(%$&(((''(*,*#$&((*++-./.-.---,+*,,+*)*,.-,/./39<=:941335420.,,-.00010/010.-,.0---132-*),,,+-///122237<>>9676/*)***+,..-/0,++*)+-,,+*%%064.,,./04468<=g=@A=::97998661023566679;7324324431000112536786<>$)*+-.+))*-0.+(&&*+)'()('*--2345//20001418=86774123448767<=9419:44679::<<;>R<;=<>?=>@B@>==?>;<=?C;37<>?BCEIGDB@=><5:A>75;=<==91%!*4<<98:;>=<=CIHEC?==;831121.,.58531.3433469:7+->HIFC@BDAAHO+TIB@CB?BEC@@?><868:;>DILNLNROKLJFEDJNP*,.12.)),..+)*,--)&ICA@>>?;;-5EBBACKPLA:7*$5;<;=<:655864104:5-+27512131*I&3;6:@CD>68BGA989>@>ELLJEC@??>>C@938>>BNNFCDDA>:8<;78A??<;::<<;<==<<@A@>?A>>=::=EKKKIKLKID@=;98;AEGFB#BFLRQGEFILOKC>8668<@:GSQKD@@@>?=>DJIMLLKEB@:8;>?AB@BBABDDFKNQSSW-011-SLGEINN)..+TT-.-//+LH???>=742//.*&())'%"%$%+.-,('))MIGFFJ'&KHGFEAA<='21-,+*'%&%""! "$%$$'$ "'+/!""#'-25435544332330.-,+(%%((H@EN(LGB<50,)'##!!!"#('!!!#$(!"&&%(*%$(./-02/.*%-0'(''(---+-00,,)$FA$&$#%%"@%$FGI)*$"#&+'&##'&$""')**$%%BD(+&#%)%+,(160$"%*276960/-,))(&$CE@AKC@>BIEAB?22??8.,4+075;?;#++OIGAA<9:886-$!-A2"$)&" *)1.,*$(1)&)+/.*'(,4-%((''.5631,)-52+%%)*'-4650-,-,22,-1811430//5EC4/12361+(()+*)-/35-(+-*,-0/*(&&%'(('(&#&)&#&%>'--+H>>?=B=CMML%&FA>&()E68:BHJFD840/+,(##$ (691?FAH'%E>84,$"&!(*').05>9-8@(4A<&8JUa@9GC(*)0+8=8-L&'()6/55<1,9K>+6J(30@@;@>127='82";+'482/,4;53>EA02/2<2A>,.-.,)2:++-196('047 "6./542/01-''2.($%9>3+).3.:G5,)""$04056.35,,184&)1././.)&-/-.04;?=:<57;0962783/.*)-,23)-/(/,(%#/6(#-25-*$&"&!*)')+<:24423464-.0++/29*%)-0343.35307;:;=F/.&%"#<#!C?7@E@;95299,066:?%A9;95>==ED;874 "?=8730451)6:.'!""!*-,00;@>79:>48:77952/**/-)10+#%.-&# !!&++))("$('%##$$%#""##!"$)...11.%!%"! !!,(7"$%" 4!!!  h**')+*'&(-+.*1-*+-.--),--,+/010/0,.../0+*.1../-)*++*()+,,-+**+*+)**+,-*'&'')+*,+))(&%$'&(+,-,,.-*+,ɀʀހ}|}~ŀŀ뀃  »¿ĺžĽ׼ĺڀ؀ǻƻ˾ο򂅅ĿĽȶŶżż3ŽƄɀȿǽľ¾Ŀļǽ˿πĹƿǾùٴίӄ㝄ý˻½ȷрļȾ󁉆Ĺ̀ӻ߿Ͼļ¼ƀ¼Ľ̼񀋌Ǽ܅ȴ񀌊̼˿µìǂĺӌݸ倅ɽȹܼз߭쀀񢫢聅Ȱºׯॐڹ̹ɵԀزѹӹ׷ɸʹ۞빜ļѮƺѱƳ԰ſ䀆Ie89g][^``ba^[[\ZXWUUVUTSRRRUZYY\YVUUWXYYXYYWSONPTVWVUSRSSTSTSQRRPRVXY\\YUSPPNNPV^^YYYWTSSPNNLJILMOOMNRTTTVTPNMJLSVWUTQSUSPPOMLKJSJKKIJMMIGHKOTSQOIIMQUVVXYWSRRRSUVWXZ[ab^^^`a]ahf_\V[F@XYURQV`aYTUUTWX[^_\[]aaa_^`^ZX&YZ]]ZZZYY[_^\^^\^b2_VQLLKGFFIOQQPQTVTSUX]\^_]ZYWTPMKLOMOTSRTX[[ZWWX[^^\[\YTVWWWXWWVTVX[\^`aa`cfe33dgf2``1233232be3343cabcd3554469:987677676i9G_^WQJ@88<;986544556765665F454668633ff2335867:743edeghecffdcbceeffdcba`acdflmifecddcccd34fcceefge345567964fg4hfdef44ddi6geadfb`^\]_cecbbcb__dfcg897hdca_`_`a_``2445763125787556630/13321121\]^]]]a`ZX`dd_\ZZYW[be5521110^_]\^10`_]'\[^33a13334530--00\\00^b1_]bgbaca__b344311464b_\VRRNIHNOPKEDIIFGKR[ZURRV0\VCGWVUSWVNJQ`]VRTWVRQ^e_XTQU`aZ[]`c\\]Y^ada_12244hf`akjp:hcc^XZ[WTUWTTTMKNNEDOXXVYXNMSQGANTXRPNHEDEKUWURRRORSLEECBBDGG?ENTTUUPHHOMKNRQPKOWYTLFFGCDKKLKRUSPBDJJKLNTWSRRTURNMPPKHGD:;<896mmkpr98b^Vbi53XU_Z]2_UWV[SOQFDKWWZXR0(?CEGHHI?y}DJMNPPNMNRSRROKLJOQOMKKGFLRQPUW_`X\^][[_ZXie_`dhaXUT[^ccbjoouunjd_b\[XWY^_foqmkiffcglnpnmnmqsppniaZT[V:>dprsstw{yxzxwy{urqmmnpndSZfjjfdecdggfegjkpmjmuutvtj_ZYWSOQ_hfcb`acca`ciif``nsz{zvuyyqr{|yzwttwwuvtnljecku{}GKH~{}OSSUYZYTYWQNNONSYZTNGKKxlw|~{~zvt^MF^v|oquue`dnzycTWd^UQPPQKJT^e`aklwsgfhnlgc]\WU]hrpjhd[YYYagaX[ehfjuxwwusqmg`^VU]edddhjlniehknnihhhkmlihigdb```\]`bbaadkrwxxyxytyypkjljddmvyvrsyxnijnppf_\^djnnieu}w{xxwspfhsywroplhkmlhjrvrmkmmlrwwuy~IQSQKH|y{HImf`_`^UMKJHM\fd`VMHEFGINPMMMFD>;<|rxDMSOHFFEIJGEN]_SMKKQSVVWWXXVWYYZ[[YVcb[\=LSZbdb`_cca\Y[ZX]]YYYVRMG@AEGC~~HIyoca`Z[YSSPJJF=08URQK>FPUWZ_ZZa`ZXWW[]-/GUSUOIY]a]VTOOVNUSOPQOU`]YTMPSNHDKFB|zEF~xBIGCFKTYTRPMLEKHJTTYSJGFEIPNHHOSSWQS]WKEILR\ab`RMMOOPMGEDob^eplqwn`n|m`ZWOK^^\mlm}GIHFEEFG~|iZUJMNGFE::8@^DkU[UJFEHHGV>a_SOIHORGILPTROMNORPLLIKQXcgb_VSYjdOCGNSWZ[\jd]XU[edTMZ]ZXZYST]ef[XTU_[RQOOTPHRZ`eZRQLGMQSQOKPPNQQNLJGHJLHGFFFEEQNyrroayFGGJA~vGDuoh\q}tozi_YRRNF@C@DCKjojryx{kgb\MDIH2M>e6mbKSeS2OdNg~?r=?N9e~`x``PQN~uyFJFIHHPYUY[jmddgY[d{rqvtrtrne^b}{sC}sT\Z_lb]hglv|xUU]ajfxNB^SLLcVLUd_kzlV_cmo}kck`[ZYMKRYTMQ^ri_YbalkXgsl^OIIJWXRVjmhdT]hgnXQKNUV\WOJTXROWX\dgna]lZUb^adffig[VQWiXPTHJg_YUSVJCJ]hngaQdTDHI<6JbNHXbgmgr|nhd`\YW\cZa`MLPSYRJDEQPTOJN[b`hkjnmQPAAHK~DEA|qekmjsnehX>I^jpuyA~smsusprp~|@E?qnia^_]WFO_LKKLMNORS^g]hjYbxH~qimlXPNPNPJOOPNLMLNUIBD>8>FNPRPHCIEEFFHHJMLLNMJFFNY]ZVSRPJELJE@?>\P^sHJLNIA?AAGQG?822117500212--,'())'%,--2:;@ 63552343//2333./22*'/33042+*-+&#-020.,'$%%*131/.0...+&&$##%''$'-220/-'(-+(*+*)&).0/)&&&$%)))',..,"%(''((,-**++*'"!"! !!#*(#$%%#$&&()-.00.-,176652442-+++-.-,-.--..+)+,**+,-,+/179:;<=>==<")$3.//./3410..,+++-/2.++-../1222004310/164025210001///+**++**(*+(#''**+,--,---./-*+...,)(*-+)+--./013445762 11.**,,,-.0221...///.-07842/.20-/--130/1258966982/.-++./0100-*+**,,,*)('%$(/21/..-./11248;<<668;978:;<;774132334579@?<=<<9631032.011/.--..P./01/38986321-*+-/.-,-.,+++,---,,.31121///1123420233210002//00.+...,+)')*((+)*--,i+,.--..-**(*-+)%)*(()+*&(&"%(*-)''(&%&')*))++*+*+.-,+,/0/,)+)&(**)-394,,/..//235540*0*+.(&#-200025201/13D144451---*),.1488340*%&.++,,..#',*(*/563126624522552/.22/23356888  999;< *% &("$#%'##"% !$ %(&(&$1449::<:730-,+*('M)262.%$65)09;1,:63=:2.:"! #&'())"AC%)**+,+**-.-..,+*---,+*('),++0154.03445833<9677:71.-24889>@@CC@>9564422455:?@>>=:98:>@A@@?>ABA@?;74243 8?>?@BDEECEDCEEHNQJ@>?==<;6-$*46977998::99899<;9DIMRNGDEEBCCDBC@;:9539@CGJJGFKN(+)KFDDJR.0/0224262-**+*-12/+LCCF&)(G=9?DCIDABCBB@=2)#1>?AGF;=AA514:BHE6+0961/-+)%'19;66;9CA8;<><;95523:CJIEB>9985:>:338<<>ADFEDCA?<99328<:<>???A=;@BA?==;9757868:;;;9;@DDEEBBEDGF@=>>>;9>CCB@@DIKE?<>@@>:756:=>=:8AINKIEGIAAEGJLKHISZ]PHC@?79BFDBBA>=@@>;=EHC???>>BEECCEKSSLN+11.*)MGGGKON')OKIFLUTSTTSUTJ>:9:;93.-,'(./+*&#  "&('''&$A5F)'$&"B=C&$=:70=D>@D<>D=551.#!.30''3*2=M-:C@!9#&-$ATn;KZ=:..-FGK+*'+*(-4021;9469/07HO=;C@;<=8611C=5"@;'///63398;DHB+,01:4RJ*!2-'&7/'+5/8>6)0267AC6391//.(%&,+&)2:62.4275(5>:1*'('./*-9753),5738G*JC<8;H;,))**+')***'(('-%"$! #')))%"%"#%&%%'&$! %-0.+*)(%!%%".)/7%$$%$! ")!&$ ""(++'(+(()&(-+//0,*./--,+,++-.1011//001!-0M.+(*,--,+)+)(,/-)'(()++,)'),.-'('(+)*++)***'('('"%),)')*)*,-(&(*/1-,Ѐʀڀ~}|}~ 󀆁~}}Ā  Yǽ҄ǀÿ¾þƽ³Ơһ̺Ȁŷ³ºȴƹ¹Ǻ¼úü;¾ȿǿ8ëÿلtن򀂀̬ߤ˨́ȹÿƿļǺȾżӿɿüŽ¾ǾƸ¨ɴӨɿñ໦ʚƹ¸ʹ炐ͻᄉڐ߇ɖǻ΂Ǿ­ԻԼѼƽ轹;̿DZǷĺѼλöϰŀĎǽǺŀЬпƺʻ᎞0&X_684caefgd_]YXXWVVWVWWXWXVUUTUVUVUUYZXWVRQRRUWWVUUTRQRRSSSTTTVYY[\[ZZYWUTOMOOOQV\[ZWSSUUSPNLKKJJNQOMMOOOLHHMQRVVQPOMNNLJKJKJHHGHGGIIIMNLLOPMIJNQTWXWVUTSONPSWYZ]gmc`bdgc^\^]a:E@U[]XUST^_Z]ZVUX[[Y[\\^_`aa_[WSSVX\_ab`^_]\]^`_]bb`a_ZUPQOMICCEHNSSUY]^YXYXX[\XTTUVXZXSPQPPRSTUUVWY]_`^[USVWWWVSSUTTSSRcRPOPTZ[\\^_addbabc355345787665454343e33fg4666558;::>>;YoaTKC;52387667887666556898543356kheg445+4554543cbdcaacbbcf54gl9mhgdbbdegeffedefccbbcbefgi4457655668974ggg4eb23g43f694335654567545654566hh457:<<95hhggigff6:=?>>?<99:;;62245323676323453111``g7d\`fc^]]]_269864100025786565531234544676430/.Y/2200_\]231_adbbekhfg467522344479885`WH;::AINJCCEIKNQVXYVGCTZd`ZRWVSQQXZ]\Y`\VVVSRXcgdd`_``efb]Zafeg346b^WZ10123323468:ngffb]]c\TVUTTOJQVQFJTQPRZWWaZSOPQLNPMGAFIEMWVSPPMFADIIIGFFIKLOPUYXTRQJJJHHIJKIHKOQQLFHHDDHJHFMSQIAJNNNONOSRRQRWUIPNMIIKIB:?@=>DIKLOQQJKDAEFDDFINSU[^YQLLJMVbd`^bd`VQQONPRTWVVWXWXVYWPORPMQVoY[biqtplifd`cqoYTXWW\cb]YUSSUTSSVYUUVTRRPVYY]]Z[ZYYXV[]ZZb`XWVRUYXVROONPPQQPPNGCLOPQSUUXWTUVTVYXTRUVWVSRSUUUXZY[\^bacc_^^_]XTSSSPOTWWY][Z\^^\^[XUSUXY^bgge`\YZZWVQOSTPNNOPONOW^_\ZWUTVXXXVTRRSRRSQMNMJKJEDGLMOQQPOPONRSUXX[XVZ_``_cfhkkhgb^\[]ZYWUXZXWWYXWY[VVXVUXYUbVYWUUWUXbgfa]\\VSTVWWXWXXY[[YXUUWYY\ba`c_\^_ba`befaeghgb^[[\\\^^]USU\YURPOOMPTSKLPRRUVUUVWTUUVSQOLNUOQPNMMPOMPOHCCJNRVTRSVUTSRUTSUVQEOPSW[YTVZWTRPPKMPQPNPW]YSTWXYZZY^dee_Va\`i5\M[[Z[Z\^Z\^`baY[__^[ZZXRPOQQW_^ah^Q248:7[_g``a^YYW\^^ckpjcekmiigh55466igd^acbgkih78787778;:9:>@?;:9:988:=@=;8o89;?BA95^Z4457601212\_a[\[XVEFOLJUYU@:6?AEFDDDCB?>=;86id9T40[FBWJSi\WP:DD@BJLlRd^RJKRSNEGNPPRONLHKPRMFGQ[edb_XZ_rjUGHQPV]WZg]ZWT[\^WXgaYbd_UW^eqtcYUPORUQONQWUQNW\XROMJNSRVXQTgZP\cZMIHIJC}G?HHHEx|q|vpryEPEzurskqtvxmk|o_\YUQMGE@?;Bd{{v}wnjaagV?CG3X\5@>@CFFFHKKIECFLMNLMOQKFJIGB;mbRR_BGILJ@=EHLRH:?VPJJHQ_2246578;>@DE=7`^]YXZSTVRVg9;;44egka^ee4dcaba46:7gcdf54ehh57he7:l9n]e389:98:65heb]`eecbb_\]`b^e4fc_\\ZXYZ`_[YY\aa\V(QSSUX]_[\_`b][[XWRSVZYPQSVW[aa_[RPQZ[^]Y*-.+,./.-,**)('((()(())*))(*+***)( +'(()**)(''&'((),+*)'$$&&%&*--*'())('%$#c$&&$$$%&%#"$''((&&%$%%$##"##""! !#"$%$#%&&#!$$&)+*('''&%%%'((*03.+.//-*)*)*%&*(&%&++(**(''**((*>++)'%$$&(+,,,*)*)))*+**,,***(&&&%#! !$''(*++))(&%(*'%%&%(*(&%6&%&&'()+,,,)&&'('()''(&&&'&%$##&**))**+--+*,,a-./..:0'"31/1-/10./00//0155210/00100.--,--.02221110.//T1121001//.,-14,.1.+*+,,{&(&'),...0311/*& "%#!!#"!!$&&$"#$$$%*.00-1/*'%$&/9<9:9798973-*,-,-*(&&O<99:86695--,-,*+251),2.-.523:3-*+,))*(%"&)'+12/-+*'#&)*)'&'')+./1430.-('('&%(*,-)$&'$%()'#(,+'#*,,+,*+,+-+,.,'%# !! $! #$""$%'++.0.*()(+1:=:66750--+*,-..-,,-,-,.-((++)+//./1269>>;975424;;0.10037630.--,++,-.++-+/00321212111353286321.130.+))*++**)**%#'())*++--,,+*,..--.//.-,,../12121121025676333430.-,,*),./010001103200/124888642202210-,./r.-../0./477421/-.000.-,,.---,*++)))%&(+,-.-,*,,,-./1343147888:<=?@>;74213212135543320140/10121-.//011/0103:=;6321.,$-/.-...-+++-/132242.//1113430233420/.$/0/+)*./-+)*)()+,'(*,*,,+,,.,,-.,**)+**)(*)()*%""%'*,+)*,,+*))*)+,* %')*-,)+..-+*)%&)**),01/+,//10/.1554/)/---*$/0///11001012355014420..-,+*++/2125,!'*/*-/-,.-K0213696249:884424203337:87 !:!"%$%'(%&&%& !& #%$+259964321/.-,*)MD%5 1(&3(!(*6=08:8<=!!#$%'+..-+&%&')*--/344760+-/1/2220---///1/../2566565631554547;75455579<;:AJHDA=999533448::89:878;<>>@BA=<94,&,59:::;::;;;<<=>>=>@A@AB?<620.33216<:41147<:246434>57<>99<=9:=>=AHLKDCEDGIGEBAA?><=AGGBAB?;?@AHHIIGLLJQ,,+,01*+*)*('-1/-*()+*&$FEHKOLIDAADB>>>?CGIDDFGCA><;4128>:6::2/.02028:8:=>ADA88CGB=:64229>:==5//2426;:;=<;=<;9BG@@A<83-248<965468=?<<=@@=;;,=;;<<98976202257642458BHB?ACAACC?;?BA@?@B?98::97449:779<>B?DILKIMNOLGFLOKF@CKS1T@CD@;>FD@AB@BBDB@CIVZK@?@??>BBDFHJMNLS-+SOMKJJMLJMLHFHJMU\UKIHFFE?9321-**+)'&%#%+)% ! !#$"!$%')+,)))''(*)'&*--)-+!!"#$&L''+#*,/016:8446633465543331,**(''ID@DIJJD@<500*%$"$$##&-)$)"###$$!#$-*-%*425/.-*-(+,''&'*/1/-+'$CD%'$#@AED==?A$%""%)+*&&&'"',+.("#"$')*+**,,**0*&%%'*-1221-+++,*(&GEEEHHA=;<67==91,+462.8>?AC#%'&%%%$#C?>=68A<53.*'$5FD>C@9><66336,')!)-@:7CI$='A:@?B6'7DQIT^<7('/E8+.,&'*(*))*/8<305,2:HQGF>:;;<#;429DC87<4*)5:2:@==:=91-4<4132.6F22.-"!+3.6CE3+5;6<)C58510()0*+,-/73*0;:>=3585/(',#***-0870+59570--,**-0.+*.-)'&%-6;663+-2117834>GC532'(%"/=88=1-%/434990-,)+#&51435216877?:620-*013572510.,-++,G(/&&#.8;9:=;BC"%'("<$#"A:56;A92534::- %'+/,*./1371./25=>!($<9610386-)'#')+(*+*/B<;9-24CFD=40543,*1,)'-.*++*+)(%%'$&+*,'! ##"$%$#!"''(&%&)$!%%#!64*(2!""&&!#%("+%"!%)))((*&'(%'/.03-,/../.,+.,-./100-4 7*/1.-)*+---.,++-.+..-,**('('**)()*--+(%&&(*+,))*+,**)''%%'*)#$&''(-./+&$%**+,+ ~}||}}~~}~ɀ߀ ~~}~ »􂌔ɿ܄#sɴ􅅈&ϣ遂Ŀ݀ʴ÷ȳüüµ˼źƼľþ¿¾ýŀ½ż»̱¾ż솄ꓐՀر۳䈅䝞ǺþżрľѲӛͷľ¹݀ƻԻƿºöûսӱˌ臅ȽǫϹ̿ЙǼ̵İ䎁ށŵȴնᥞ׽֦㐘ÀεþĽݺ巷ʳǹüԾĮ¸ݻڇ矸šĵǽえ֢ɀϳ䁕źȴҹ̹ν쁉邇$-[\]`e8745m7g_YXYZXVVUUWY[]\\YVWYVSRTYZ[\ZXVUVWVTTVWWWRQRSTTSSUVWWYZ[\^^[ZYWTUURLKSZZUTVWVVUSQNKKJIJKKKORSPLFEBBEFKMLMPOKJJJLOOMKJHGHILMMNPQRTTSVXYZXVVWWWUTRQUVUZcb\X]dgf`_``3]:BC`aa]Z[\\[Z]_]ZY_`__^[Y[_``_a`[Y\]^`cgccg45gcbbafia]YSRTSNNKFDCEJORUYWUSRSRT[_]ZWUPQQSTTTWWT$UX\[[]]^`\WUTQTVUUSRSRRQSUVSSVZ]^^`b35454223357;>=978:8765`66546::=>;;CHE>:=:;:9::74311354232333d`[SKLKF>8K82GOT^/-Z11X.5/\0^YSTX]_[VYTRUSNNQW_bikiheeeaXU]21222a]\\ZZ^`21112454kokda^a`[UXYY[UPHFEHMTQLNUYRSVW\VNKFLONLQ\ZUUTQIJKMIGMPONNPPPTUSQPORQPPQNHHFGJIIGFGJKFEOKEIJGADJNJCAIPTRMLJLNQPRWXWSNKNNHA?CIIGJKIIQRMIL@>>=:oq99:9;<==;:889=<:865b:Z52X>gNDCGHWjaknku@@CHGHKLLORQPPQTUMLLRSSX\]fjcZUX_]]^_^XWY[YY\\[ZZ`ffb^^ZY[[dhabfeded_`ba`diia_lxxtqmkjfc^][_^Y[YZZZ_efeehorpmmpty~s_RVgqpoqoprnortvromklu~{xwywto^Vf9pmmjhhjmpolnuxpnje`_abfjia[YDmKPV^jpplc_bUFT`_]_djf]]bcglmsprv}yqrv|wvy||wtvrjlnpzKLyKJJORj}FJNRRRV\_][YVQRSSUSKIKMNKHHJKJiGEFw|{tqjjnnmj`]co|zxyurllnq}ibiqqolbZUX^`cgd]UPJIIQ^cbekjfcbcp|wnmja\RMSQU[^__]^ijfcdgnic^\[YXZ[\^][[\ZYZVSU[eqrgbq|vqqnlhekmjovvtrsuwvpd_ba[XYWY_acdkpuytvzxzJKxvcYlM}|{~}xtrwzxsr{~}ruvvuqvHKIGzyw{zQSQP|ogec]SQIBBAACC?BHKF;83U=IQO][.58=FHI[VPF?CFFEFDA@EEHJMLHKQRTV\\XVXXXY\^^b33469:988?KXYXZ]^_`\UV\]]__]Z[\]WRQPNMMIGCyurnkklmg_`c_`^]]_[[aZ7AH>HQY[]_^]ba_246989;:976JV]^ZfcdcWRJJFRMKKLNMQXVTOMMMDAz@FMKDzvyy|CABHMOIKQVUVSKJFOPOSKAGKMONLIKSXMGJOPQKGIQUVRRPLJGGIF~|uywstNK{ohhlkdY\cb^TUfjmntAHKHFEEDC|w}vlWLKQSRF<8=A>=\dQJC1:@;FMTF\^XNDMZSKJLLKOTPLIHKNPMHKW\efdd[QSjgSKKMMWeol`ZYZWXU\YXV[gwuf\XZ\mzcYTMHLSYSUVTWVLV\XSPJGR^_`WVg`LO^gYKKSNDnzPDBINGBvwF|uuuqs{pQLMlBMzm{zprmTgfnjZWWZVTMRE:]yxpjihb``fp^IME2VV\dla[\\i{oe`YTUY]^`]fab^^^VOHKQKJ>zNaomecl?DFECAAADAGSTMHJFED>j^QRm?@BJOB@CEJM@3:YRRQP]235579::>??CE?<5a^^ZZVTVOVa7876;768e_a_c^3452349754de44e4346hd6:9?CZ``458;;8haaa`]3^defeb`]_akde54ccb`]VUY]c__ZYZaa]VPPQUX_`\]]][\__^ZXUSRSVWW[]^ZUOTWV[]++,,-30,)(#'(('((*,,-.,++(%&'()*+*))())()+))(()#'&&''(''(***++*,-...-+))**'#&*+('))(8'&$#""#$#$$')(&"! ""#$#$&&$$$#$%&$""! "$$$%&%&((&()**)(L'&$$&)()-,*((,/0,***,++)')**(')++)')***,)')**))+)'(**++,.,,..,+++./,)(&a$#"!  "%&)-+(&&&%')*)))(&%$$%&%''&%&&&(,,+,++,+)(&$&(((&&'''&'**''),..,-/ ,+#22211231//1001./10///11/00-.366642300//00//0/.--.1220/0102101)3)(((*-+,12.. l+)'&##!" #"$"&$""##$'+/-,.-)(%#%)/89>CA?<:860,-.,,,('+*59:9:8962//-,,'(-1/,-/3///04/))'*,*)-320//-'+-/+)//,)*-,+.0...,-,++,*&&%&(&&%%&((%%,'$*+&"%'(($#(,/-++**)*+-//-*'$"  !! ""%)#$,.+--*(('-/343235621/,+-,//+++,+,-,-+(*,+,.0154576986535422121///.2652110.-,-.,,*,/00-,0/,-+++,,*))*+,+-+)'&%(,*((&),,))*)(+*&'+,))*)*--++,.034213301&246864210/37:9643321/,,*+++-/0112331--/03459<=>=41100020,+,--+)I,144652/./.--...00.-.,())(('&'')+--,-,,.//-.///104877659>?ED?=:5430/0./220F453/0238<7356;CA95545:@>9520/-.0,,,.../-../-+)*.2321383,-/220230132132/'./0.*()+,,+*,+*))+,,*)*,--.1/.--.-,*'*+,-.+('&&%&$%##&'(**,.---,+***,* !! /0,+*,,-*)(),,,-010.(*,.31--1511)&)**+1.)/1330220/22234454//001/.,+-,*(,/023-*./00)-112301421 985"56645888687:;  #"%%$#)'%(%&"!## (,25766433100/,*)'@%7 /";,&**)1;3:;786=EFC@===;9554765765548<=;:<@A><=>>AB@AA@A@??==BHJIGCA@=60(&.67:878;<=<9;BF@>=987779;;413#/).009?<;647.??EM**NMKDL,*)+,D2BLK&),/114895212..-,-,(()**('(++*(&&JHGGIKKOHBED?<:69<;96/07CKDA@==;<9:DA45<@A@>9402668<:840**+/677:>?=;9:ELICA=850/1-/557769A@<;9??=BEEBACDEEA:7:743557989<@BFHACEBCHR**PJKGC@=0+9H+[SJDCBBGKFCA@DFD@@GGNUIEjFFDCBHQXTPT-/+P)PMNOKGFCCDHJLT11/.VME=;<95//)$%'()'!!!"!4&))*,( +(& !$%$%%#"$!#%(&##&%(*)&#$&$$$'.#)+,034563/1678875455520/.,,+(&$A>;872,**()('&'%%((!#%&&$'(%"+--,4355-,('%J/+&''('*..,*))*#$C#&*'#>B"!"&)*'&*+)*)$%$)*)+%$()+*(&(-1)&(+**&$&+--+++(''(*'JHEFDBCBFD@@G,*B;79<;813664./:;==@#%'&&%$$#A=BFB?<0(%%$%,0$ !#02.(")2,&&)(')+*(&%(*+)%&./3654/++:8,'(*(.7;70,+,,--20//17A?821341"&!%%&'$=8<@'$K:,FB7:>>>JB53JPHW32002'A084+&)&&$&06713;5+,DSOQME9:;=$E743:<85993)*23;?@9?<5324:>:,/?OE1251)&&)$.DLB+7905DF:8892$&2-"%).3-1))+535738310-/!#),.1<8-1354276-*+,.12/.//-+)(.57431/-,**.+&,7DID@5)'&(.27@=4-.-+06::55/#"89A547>81239FC;41/+-/1122965112.-(M+-+,%@(4?;428!"%%" "%''G>6=A810691:F?) !"$" &/0(-,/4=95 ("87523APB-)#$%'&!%,,-27::03.7@BA6-'/760,,,*'62,,-8-'%(+&3%)')%&" ! ! !!!!"!!! # #*)&#%$#!61)): !$) #%+('$ $)(*))(''#&,/-,,.)-..H0. !,-+/-/.-+*./0/.-,,-2-.-/..-('')-++)'(,-+(%$&('+*))**((,-+)(('&%((),,-*(&()(+,؀́ˁ  ~}|}}~~}~~쁂 ~}~ ÿǜ񄀁ŕ󒜲ꆏ삉·Ĩ±̿Ϳº´ǾɿºЀÿźĽû؀ҿžڀ¿ļǺ½龭쪂üþĽøȼǽϿɽ³ſ¿¿ـ󀋍̳󀐛ڏǠ´ӸֹȄĤą®dzɹٳ򀉋᫦ힹĻ֛߯ڣςȿ񑤙ǼĨӀ˽ìϯͮİμµߞòϹēϾϳĹǸյȺƿ󔧵ـ׀V]Z[]]^h4567h`]\[YXYVSQRTUWW[_abaZTRRSUWYYXURRTUW[ZXWVVVTTSSVWWVWVTVUVXYX[^]_aa_[XVVTQPRST UUSQPLIJLLNPNLKLMMNMMMOONLLMOOOPRROKHHJLNQPPQQRVZ][XXXYXVUSQPOPRQPTXZ\[\]`__```_gh`aa^]_ac_YX\_`ab`]]_\YZ]__aec`][YY\_a_bfk6hdcbaceb^[ZWTSPM`KIGFCBBADIGCBDIMQRRTVZZVSTV[_aaa_\ZXXXYXTTUXZZWTQOPRSTWYZZY[^ab__`ccca_]_2232_13111`2479985587646_7766445667:<;:=?>;845BMI>73ce3345779<:88787423facdabegdf66fbbcbd344895dabcbdfgffeca`ceghj5666765676544gghg44346778876776fg45544567987665556654!56655677665hg32cacee345567633322307_]`10^^00XRZ3221112530[Z[]e339<:97666456:989;84312445456 5664200112333117<<;87?C<9:9;==:7301221100123c`__][O6S9<>U141TR+-.]`44000]WSRRPPT\`ZVY[ZXSMIO\_Zagljjopmd[_edc`^Z\bbYab]YW[1232a?<^Z[XVNJNS5WYVVWLADOW\a^]aa\ZYbdSIKKMOSWSOYZRNJLSSPFHVUIFJQRQRQORQPSSLGGFGHHGDDEFE@BC=>KPNHDFKOPMJIGJLMNRXYSLMRPKFEINPPOLLJMTPRPMF>MJFIPKPYZRTZXSQRSSRMJNSSUVZZWVVW^\SSVYXZWTTROPRRTTUXcbae`^l`bcaaa_a`\YVSSUZ\[YXXXVUVSRSUX_]WSONRQPONOORQKHEGMMIIHIHIJKMMMNMOSSOONNJJMNKNSSRRRSTVVXYZ^aa\\__YXYZZY[[]^]\Z]ac`\[Z[YYXWVUTSSTUWYZ\^^\TPRQPQUY^abgmmke]ZUQPQUSPPQPKIJLNQSUY]\VRRQQPTVWWWROSTRPPOQSQPNMNONMOQRTSQPQTTTUVWXY_dcbghnuutmhc_]^_YUUWWVWZ`edbbc^eqytjcdoypd`^]behhfc^\XTWYYZXZZ[Z[YZXVVYWWWVY[^`\Z\adabb_bed_]`]^_^]]]^YSQPPOONPPPRRNOSRMLPVWTTVUQTWWVSRNOOPPSUTUUROJGHGGIJNIGJMPSVXWXYYVUULOYYQPOFDUUQOTUTTRQTVVTTTUWZWQQU]aZTTXZVZPPXRPQYWVWXYWY]^a`cec`[TVYZYXZYVWSMIOUX[\`egd_bfc_`\^`bdeeh86a4:;:9lgefg785.4<:5efeegjiii5778987789=AA?>=;99:99;;;=<<;::=@?:68:97786854436521_\[NQXY\^YUQNO8?EECBBBCB@>><:8971D_52^E:oeHKGM_c`ianADDHJNQONNPPNORVZUQQSQMQWVZ_`^a^]^\addb_a]XYZ[acaaffb^a]ZYW]pkbfieba`^^^\XTTZcgkpokghjjfa`abddda^\[^_`a`emqrtvy{~{f_grtqpprpmnou|zrihlorrot@8'7:QJ4CEGGGILNMLOLKJLNOPSXYZZ\`W\b_\_ba0027768ALTX[\\YX[_`^]__]\ZUSRPOMKJHIJIGGHG~}wqpgccYX]\]cfaaeW@N_j85b21`^`d`0567968;;98:EU]\^chiYNMFKJPQIOQRTX[ZNJMQMHAGPKFxzHDCDDEIMPLFKVZVYOLJGNOSTNIPMMNLIJLLJEFHIMOLJLJFHKNNIDE~{xpsxpkr}pghnmh__XUTQ]banmvFKIDDC~qm^JHSRUJcP3AE>6_]DCE1.5>JN;VXXTLJUUJJNNGJRSLIEGIMMKIOVYbdfd[RTcXQMEHQ\fsi\VTTTUWi_XS^puqjc\Y[t~eXUNMTY]Y[XUXMJW__[UKHW__VPX`WOKMKHGJQND}ADHELUGBz{xih|zOI}LOG|Vktzsjh`[Yy{WU[]b^cg9;Tpsmokfafkcbb_[TSMFMNKLLKBgL^hwFqhqj\xCDHBqNcRuMAQ]pcXHXOyyKXQFQ[QTeaR_ilc`futxyfiYgyfh{aRX`iprpy|rfWP\ntojpe`aT\]ORZ]MJcsjYgddbpsqifro\IINIQYa_Ph^OYYagreZU]adaXTV[XNamfipo^]f_cWTU`]YXZ\WNHIKS[``\WSROJGGDKR[gs{hZNLSZhu{qg\OFQY\bd`YzhQ|fZ_PM^np`[Zcjsym^\]SSYVVYYdikoylTKH`kURRF?E\li]Vbq{?{@HQTSPIxfhnd`e`t~vppoXH>KBBMLY[f_ZQM]aepn|Dob^\nGHGHFEIIGABDGA>==:8;@GGC@A<9?HIJIHEC??>=?@<70./.,+,,/45.12-+*+-$%22653-),,--*(*'!$-258557765478.''()),0,)02-*)+/.,&&/0)'(-, //1/-*,,'%&%#$%%$ !"## )+)%#&)**(('&(*)*-11-(()% ! #" #'%(--(+0/+)+,//+)-//13530//043-,--./,+,,++,,-../67675457643325642/A,,/2221100../-,,,052/,+*,,+*))*.-*)&(,+)('(('((())((),,))((&&()&'*++,-../1441232///011222432112224520//0/..-,+,,++,.00122/,+,,,.0268:<=;6311-+*,.,*+,,)()*+-/14751..--+-/001-+-.--,++-,++*,,+*+,-//-,-.0/J026:98<>BHFB<863122/./11/147;:9897;AFE=9;CJD;8779<>=9620.+.0/.,.//./...,-/./00/--/14100.244001/010../1.**)x**++)),+((*.0../.,-..--,*+,,,./---*'%%$%'(*'&(),,-.,,-.,,-$$+,'&%""+,*)+,+,+*,--,,-./1/**,13.++-/-0**.**(--.../.022421234H2./..-,//-.-)%),///1454225311/0013434+54454455567666! -!!$$%"%(&&'%#! #/65565542/--' +90'#;6,*)*464928"##&'(*+**+*(),/0-+-.+(,0.0453523437865562.001555699645311/3?;59;855544541--28:>AA><=>>;877899:97556688m8;?BBCDFFEINNE96:DD?=>A@>>?BGE?:8;<>B?D#DB=3*&')*(25447=.@?3??<;<<@C@:9;=?EFG??CFJMOM''(((NNLIEAAB?@BA@?EK'((PLM)()*(#%NHH%&&())),,)()+*,//01.+***)'('LKK()((&HIMLF??@;7578;=>A?@JQK?6;CGKID=<>8:@<<<94/17=>AA;8:@B;558:7;>>91.06=BEA<<<601379438;>CC=<==CE?<9764222345668981/33488:=@=?INH@AB@@??B?>BCDGJIA??B@<7214578337FGK()PNJFHzIQTMHGFDHW0``0-TRNGD@ACACLW^[PLHIIEFKOPW\YUTSVTLKKIIIC>=AFLPNN+25330[ZYZUB60,)'%E?##$% (- *,$#""#$&&$$$ &!"$&%%$%&!&'$#%%$"),022004686674011//-*))**(&&&%GECB<64-))""'&%)+((*'&*&'&&(&*0/1588.')%((,-&)+,-011*'*-)%DEF#'+'$<>H%$B"""$&)*'#&..+-'&%#))+*&$+))*(&&((&#$&'()'&(&#%(*+($FK(JEFIIC@=AE@;@IQJB;68<<:450/0-475==?%(&#EDC#"DCB@<<3&#&$&",!10++-,'&..&&**&(-+(&#$%(('&),-3455/)+70)(#%*06=5-+*,-.-83-*2?A?:6311CM:10*'*-1-0/-0+'.342/)&/42-(-5-''))%#%+("="$&#'.%"EEF@@?99GL?B*%A)+%?Q3M7=A;85/--CE//2362/,0@@9:9657612342./(")+***)$8'59>)>6?;/<""&'D4H?N1Q'.2<62(J5/JBA*3-&-4--;9,3:?;7:IN=:;:8?843,23**/3($4?:,5320:=<65<;0&(*$)/31&5.&,.23;4/,0121-+-0.(5:3488/.645-+,1/..121,(&'.2543/-,,*(&%),17>GMF9/((/38@D<72)$,57972-7)+*2Q70;C@42179;?80/2,+1.-//5<9;G=+('6?/-.)$%1<:1+/5:=$(+**'@67:2/1.=?;==<."! &*51-(&.2385?#A830,6 :(&+%%#"'.22/.441139\?>@A7)*/6520/26<;70-3-(*-0(%%$$##%%# !!# ## "##$$#"" 61**29 !!"%%#"$&)$'""+,+**(('&)04200-.'),,*+35120(-//.-/11//.-,+---/,--./,&'(-..)(,/.-,,*&%%)("**,.#,)*)('&'((+,,+*(()+,-Ԁـ ρ +}~~}~~~~~~ ~~}}؀ lýſ󀃃j񁅄ȼǷĀǺùĹ¿ƾʸƹžÿϼżżǼýþùƿþȿþǼŶȵՀÓnjɹɶùеĽξʹWƼľƽ¿텐нӨ°񃕪΢ͿŸ큕ӹãѼሔǻɾõý͉뀐Ƕ˻Ц핷ݬ႒ŭ;˾IJºν᳚Ҿ̀îø̷»滲ʺֽߘλ˿Ᶎ􁚯ӺڨΤܹغGY[[Z\^aaceefdbbaa`][XVUTTSSSUX]aa^[VTVWWYZYXWUUTSUWY[[VTVVUUX\[YXWVVVWTSTXZ[\^__[WQPUVVXURSUTUUVVURPPONMMMOPPQMJIILONMNONMMNOONNRQONKLMLLNONNPTTTWYXWWWVSQRRSSQOQSVW\cdb\Z\_bb`]]_`a_]_^^`ca\\^^]`bb_]ZY[^baaca^]\YZ\Z[^`aab`]^``^ZVXZYVSQMKLKJHFDA>;:=@ACIMKJLMPTYXUSW_d_^`_^\[ZYXVSQQSTTQTVVY\]\\YYZWWXYZ`ff`[XZ\_13664aabcgha`bh32210/01246899:865565568c86567874b_b5654c_ch686569;532234543c`c__`bfefkkjga`bde346fa^^`_bdhjij5gdef45i4564445577767788754h554156;>>;864gh4hhi5j45556667765545444565445678::<;986456576433210/[/10110`a1]\47732224753/[d689:=;8:< =<<==;8875679:<<979;:74311223301223223687525:<<:<>?><9741___[WWV[132111`^^_bi4258:LE1DKNQY]YW[]ZZ\Z\00^`\UTY]ZTONU]\`bggdcjnooj_ag`XWTOTYRNVYVSPU^^[W[oRPS[]USSTTUTPRJ@M]\\^\`c_\Z\^UKKMNNMRRKLRMJECCBBABFLMJAGOPQOMPRSYZTLQNFDHIGEGFCEFFB=?CA>@ABBKLC==EHIGMMHEFJMQUVRNLPTUOLNTQPQRUUNRMNNJSRHGNQVXVPR\\ROVQJLLNU]_][YZ]`^VX[[ZYURTSPOLOSVTUZ^^_^`eghjkdadc^YVVY\VSRTUUSTXXWVX^`TMKMNTUQKMPPSQLHCCJJJHINTJMOMMPQPQRTRPNPMGINNMOQRSTUUX\]\YX[[ ZXYZYXVVY[]]\[Y[[ZZYWWXXXYXYZVTSRTVVXVUVONQRQSVX^ehgknh`aa\TVVUTSQRROPQQTUUVZ\]XTTTRQSUUUTSTUTSQPPRSPPQSTQOPPPSUQPQPRTRSUSW^knnnlnssogb`^\ZYWVUVZZY[^_cktvtuz{~wolp}}qkifabifcbd`]ZVVY[Z[\\Z\`\YWZ]^YTTUX]bd`\]djgfcbb^`c_]^bc`\ZWYTRUQNLNLMORQPNPPOJGKPTMORPSTUSRRTUTRRQUVWXRPQMIGIKLONMLMRTUTTUWYRTXOQWXXWWVQOJFKWUSRSRUVRRSRRTVUSU[caZUSQQV\`mnhe[VVZ[]]]_`ada]_cehfXYd`[[WW[`[WVPIHLSYX[aa^\_gigeefgedfhi9935997i`^affg69?DC<8jheccfgei77788767:;<=<9;<::;:=?>=<<=?@>83885435696133435633aY]][Y^ceXKQEBDFCAA@@@BA@=;9833O12`7SJ>M;ABFBZfsssADFIMPWYSPQTVXVVWTW]^URYa`bcfhll`[ZeopkhfaZVYZ`_``bfd_\][YXWfnjlprmghe_^\[YWW]jpmhhkgcefdccdfd`_`__bb_`ccehqwz|}~zjTTiz~ywtnouzxtldcehhP:NfptrncWPMNV[KQ^fllkkjjkkjkmniecbUT_d^Y]_ZLYpvwsqsolpqspppnoonox~tmhk{~|~}tlkpwyvzzuqpsx}~HJHFDAxqlnrruy??AEHKMOOJHIIGD|xrps~GIzyrrqszHIHvceuHHI~}yug]^ZXUW_jonkc`\\b_YX^hjgkkfa`\\^\[bgied[PMU]WQW_^YZ[XVRLWb_Z[_`[USW[\][Z]a^XWY_hmprvus|skkkikllighjnruwwmcaegb_``a^ZVW]_aghir}NPMOWSPNKMNSWY\`WLLRTOHtlnnruutqtmovwwtgeghjkrzHHLKNOs`RNMMJs8BIH@88:CNG@`Zm:gc106AGHH?-K1=@@yEOJGF@8>IPMwp|}zxwrgi|zpijlllheONWZd_erzBPTI|BEFHGE|ztq\MTXRESLZ<@A=gWMAHLFHFHQlSSPWQIJPKGKSPLPTOFDDGGLMNOTU^jmg`YSTXTVMGR\\`g`ZQOKOW_ndZXfkhlqh`ZZbhc[UMOWYUZ^]ZSJT\_dbUMMT[[VTUUVTKFABCFJLICPGKSJ~wyqdvbUEQKPMXnzzvaerqgn{l_^Z^a`QV2F^[eyttjdoi]VRUOJKLH>sJRRGoalnDN=;:vA@8:=odZMdMvMe}WBIGD|hAMOaMCHHCNVY^bgXNvN~woifdl[kCzuurghm__`dktyuscL[jwtghehjQEU\jkXSZa\X]d^`Xipa__dwdOLNUXaaYih\mceogYKIGTfkia_edXRT\Xcpi[G@ccVO]_TTZZVNFHPUZ\[WXWROMGHPWXYVYnf^_^Y`rxntePNMUWUV\Yli]Osb~Yjk`Y\cnejm_VT]WUWRTSM\e]oSKRd\STRYX[VhlaV^fnuo?MXVTMHzrlrmpsnlyo\VM;;OQV^adk]SZ^dnnnq{rtvaVL<JXcddhujKKWexvrmpf[dg\qz\Zrvywok|cPPJJRPEBFLLFGKMNHBBB>>>=::;;>@FJD9i9>>=>?@?;96ngf_Ul=@@FNMJFD>8b>LSR^434403::;:>==FJC=65hb][XZ]]_ipo557:9bca263ac_\^c8756644d35334c3:55iigg54e59=<6\Y`ba^_adBa]YX^ce3a]][^c_[Z\^db\]]\Y_dd_UQUZTV\]p[FXTW[]aaa`YWVVST][ZYYXXX[\++*+,.,./*.,*)))('&%&&''()+..,,)'''()*++*)(''()*,,('(#)++**)))(*)')+-..0/-,(&&'((*('(('&() *('&%%%$""$%$"""#$%$%&%$$%%$$%&&&%$$%$#"$$%&('&(++)*)(''&'('&$&%'')*,+*()))**))**+*())(*--*)*)')+,+*)()+,--..,,+))*))*,...,**,--*()**)&$#"##""! !#$""##%'))&$&+.+)+*))*(5'&&'''&(*+,,+,-+**)))**+..,)()+,,,+*,,**,.#.--1./1.-/&03224322///00-,+,-,./132210111 0/12223)**)) (, ---*,-*)))($!$$#$%$##%$&'&&')+*+.11,''.64;<<<;9<=>>;4362-+)'*.)(01..,,0-+*1E?-,379210/./-()$ +542115631156.'(*+*(+,)*T,''$$$##$%'++*$),+,*)+,-130)-+&$'''%%%#$$$" "%$"#$$#''# $&&&,*'%%(),..,*)*,+'" ! "!  !##$''&#&--('-+%()((+-.2885322453..0/..,*,-**(*-.+,0334469;;=>967740--03/-,,-,+-1110/11+*)**..+''))-,*(#$(('&&),%()'')*,*)()($&('&()*,*.111//00/.///.-,02210122311100.---,,-./1.+,%*+,-/---*+---//049:8:=94342.0/...---,-..035630/.,+,.//.,-.,,-.,+-00.,--+-/-+,-..--..26>A@@@ADC?:53200/.-.0443477;AHHGHKLNIBADMNDA><88>=:7541/,-0/..//..1/--/00.+,--0341./3752211./5300210..+-+*-+))*((*,+*)+*)&$'*.*+-+,-.+*+,.-,-.00..+*,*'%&()*))**,-.,,+./,,/)(,-,*+,**(#%/,++,,,.,,+**,-,,-153.+*)),139974.--/022233464036776+-53-.--/2/,,)%$(-003764227976445434433013676"!776445545  !(%)(%$&(*$!.54356r87521,)! 05 0*!%"#$&"08>;:!$&'(*./+**+-/--/-/570.1424678::4019?>;:960/1376778:843431119<:<<>:8989;:88988:98899:=BEEGGGFIGA9.->ILGAA@==BED@:52357+#4<>;70'#" $( #06;=;;:;<<<=@@=:85665($0741453+/?DB?>=;:<<@=:;;>>==DKJMOLIFA<:@@CF$%%'(*+-.***)'%FDA=>>CFM'JK(NJGD@@>;?BEGJ&('JA69DM(()LIFBB@?84630/28=??<654487438==;>>:8711534:>?;:3,-24/.3::567552-3=;657741/2466788862//5<=?CGEBFJFA@A@>@A@?==?BCBCC>88<<867997412778>=EJFBABA?9:HFDHA;78:;;98*,4373570.7;8;>:51069720))-.,.111.&,2465/*)/1/+*,-,,&# !!"%'%EC"*%(-'FGFE@AD<5@I4+%+=).KJ-6R6>?>33=<6;E:452651'**826B@@96=70-,0-)'%%!>)/.';2:9%, ; 6551@_1H@*5E."(&&G<%,+5+#',%+1258<3+AGN,FC>95417*2">9:945900248;>>>G5&07?=8848;*%..7:0,/51-1710,7;4105@I3)**.054.97.;3382,$$#*4762155,)-0,191-%!73*&14-,021*%&*-132//1/+(%&),-1//M9@@8225>8681-*20,/+,+'05-7OJ,'.61-.,103+6;4,.15>7%.,*'&F?DF;7=B5:<66C:.+&&%)/259/*//29:89?995%--,) !(05676?7&(06A=9:;5-152?C24EEEB;9D6**'',)"!#'&#$&&'# ! "&"2!N7252(4! %%"" .%'"#-,**))+*,276./-,-*()+e+.3322,+*..,*,-/0100-*),./-+++,-+)'().,*,,,)/1.+'%&(%&))3( (%&()*,+,)))(&'-+*)*)))*+ȁ耇}~~}~~~큂 ~ þњ܀ǿ¶źϾɸ΀Ŵþڀ¾Հŷ»Ŀ½ÿȾⳫɿ햨ʹ硘ꕯǼ¿ſҡ㹜˵Ԁݳп»ûȾƾŸÿ½ꂓ݀򚘏펜ɯŽư󂍘󉇋җƵξǹϳꏗ⡣™ñյ⺲λĴ޽ŷȺ鼙Ͷ¹ƶ˾̷Ѐʸʪо¾灄šŷ샘乥άĨֻẲݼꕬÿgځ̀XXWVV\^^bdcd3edddc`]ZWTTVVTTWYZ[[[\\[YWXYZZZYWVSSWZ\]\YWWWXZ[\[YXXVTSSTUVWWYYX[YVUUVWXZYXZYWTRTUUUVVVUSQONOPPNMLMLKKMQQNLNONOPQPOOMNNPPOPOMMMORTTVYWWXWUTUUSVXYYXW[]^aec`_^]]_``aacc^\^\\^cf```^]afe_]\\aca_\[__]]\\]\\^^__a`__`_[ZWWXXUQLKJHIIHGGDBCA@CEEFJKMQQRUYZ[XUY +]\^[XVYZXWXaYYXUVY\\[Z[[XUSSVVZ]b3ebac6874488752`a```12441``a__b248:::;:8754333453ea`efee]Y\`eji`^ade467864556.7896gfeabedcc`ahfa__`^\]]]^_`abbdfgg4g334566556 77765677654h455656657798765445556S556654422233443223565433456iefi6765fcabc467776433211211b`_0232a01222342`2433431_]39;F>=<<>>===>=;=>?@A@@?=;:<;888677898534433246=A9559=CHJOTLB>=8641c^Z^a_]`c`[Y[^]ZX09/:G,3J8O-WQRX[VVa110^YVVTUVUXVOKOQMN[a^\[^`d78hddf^XVPLRQIPWSOOPUWPJLR[[RUVUY[[UURPMLH?AKSWX[ca^\ZZ_XLJQRQOKONJMIB@<=9=CJMLID==EHKPRQQONMMF?HKHFKLIFFC@CJJGEDEC@CDDBBCDA>>CGKPJGB9CKNNLKMPRTSSRQRQRSSURTSTTSQOPNLNJHGEOYYOLUSJMTOBHMJFIMMMPQWYZ[&^^]XW^\\\ZVTTRMKPRUSTY\`b`_chlrxsljgb\XDVRRSSSUX^_^\WSPLOTVUTTPGJMNMLKIBBHHGEGLPMLMLNPPNOPQRONMLLMPONPQQSTVWVgUUVYZXVWXXUUZ^^]\\]^]ZYY[ZXX[[^`\ZYZWTSQRSSRQMNPOQSQTXWVVUW\dkgdce`^bba`]\[ZZ[XTJBGUYVUVXXVTTSSUVUUVTSRQRSQOONOPPRPQRQOPQRSNKMT[cillnmnqlecb__\YWXWUSVXVVWVW`kyqnrxxnkjfc`ijfdgfdb]YWZ[[[\]\\]YZ``YXWXZZ_dgf`]`hiedfd^S^a``bd`^_`YWUXYXRNQUROOONNOOOMIIHHHLNMORTPPRUVTW[\ZXXUUYWROIGFEHKKLNORTTUOOVUQPNRSUWTQQONH9@STSRRSSQORQOPTVWWW\_ZXVY\XVXZ^`__\YWX\_`___`a`aeabecEAW\YXUY[[YXXTOJJORTVZWSTX_bbdfk7ibbg7;9::9676ffgegfh6;<8ceghiigfgggj67888778;<:99<;:9::;;;:<>?>==?@B>99:954546553a_1123022]3ib[W^ccaa=6CEB@BDDCCB><;84Z:]1/5OnKH_=QKZ]fdq=@@AAHNMOPQPROR]^YXWWX[\WZ^`egdglppb\krnf`]XSKT^ca_][[XW[]_[VX`ghjkmmiegdbdeghfddNgecbdjlkkihhgge^]a`^_dhiiigiqwxx{ErUSf||yvvqhfkppkeicF8;JYksvncaYRSUO[dghghihfegjggloopkTYinkaUVdmnpsy{wwstxunlhfjtz|}{sy~skgksoklou{{tpmnrtpnywplkjlnor{{{zz{z{yuw~zz~wqootvy~{{|~DGGIF|v|~{||~}oxytyztogWXp{qndafd^Z\fnpke_aggc\VQJI[gf`]]dosmnk\W`ejgga[eg_VW^]QHFMLFDC@KTSTZ`YWVY\\\]_`a^]aissnnqpruvrmjihfgljeioomiikkjieba]YXY\VUVTUZ[^bfnQSL~}OYVPPQX`a^\WL|~vuqnpnlojipupiaVTYfqu|Gxvy{rg_``SquNPJCFHHHB>9VP8@E>34GI?;=>@HQMHID98:;BDDFJMPTO;FJXgdab\WTV]d2f44f7:<>@BA@@BGU_ejjfbacb[VRRVVQMMPSPJHIMLIGFDDEEEDypld`cc]X]]_]0675]Za0Qa6855759@;VX69IVSYge^RUTFHILPKGLJHPQHELWNEHIHAHOKFGPYVKHNLKKQTVWXZ]XUOLJHMKIIJJKEFIJIMLBus:ojlJOLIB9fwMPIC|rq~ECtvt~sEwmggkppo^GNY\`boCHQRF~KMKHFnnpmn^SQMCVTm<77?=;WQLZ^[]SOYIWVZXGEOQLJNSOJLOLGGIJLPKILOUmuk_ZUUUVTODKTXZZX^WUMM[ab`QTafkjihcZV[a_ZYRU[VS^daZSPQTXcaUNMQXYVQMP]XKGCCDHJKJGEH[MHQNw}}i`kbW|SNwvrnlaefsyd^^bru_YZa[IBIUWSl|t{}pd^]UPUK@OSJ@uGMONE?GFIAGMFE>UVm`9X:BKEBAQfhQCz@Ak]XZBzDpuL^abedYT|}ytpmeo|qdy@xutmnmmppUUdsztVSagpc\ji_ULDVqxu`[f\_ZX\XXZ_if_^XieHKRTdo`ckddftke]QMIJMWlwmfd`ZWYU[ei_OVecb]TVST[ZVUTOOSVVVT[]XQMQSTVZXJL`wxigikdaoxqg`Z_VQOPTV]cRM\VXPR\_ded_^oumh]YWaXW\ZYTW]YR`rgXVWXYVXZnp^aif`bgtB>DS]UQMILMNJFClvj_brhbLEIKRYY_\RKQgnxtroxwBD5,O@?NXinU@DPYcfckun^ON_insnypckpds{`ZYjpw~AhUTOHDHMMIKONNKOSMHEDEKJE>A?;=?>988<=<=o[cq@A@HJCEA:e_@KR[a122578:9:<==>ANMC=864c_[Y\bgn::8o;>:^_da2ccea]\c8863464b25455f2eS46c`b5g`^f9<6`Z]`^Z\^``aa__XVX^dfb^^7\Z^`b\XX[`]ZUROTdhb][^^[WWXY[VZXSVZ_ddca^YYWTVZYZ\ZXWUW;))*(),-,.//0.--,++*('%&()((*,-+**+**)())**++)(&&)+,,,)()))+**))(''()*++,-++*''('()+w*)'&'))**)('('&%%&&&$$%%$$%%&%$%&$%%&&$%%&'''%$%$%%$$$%&(''))()((()(''()*)()**+.-,++)()*+,,,+((('(*,-*++))*-.+))),--,**-,,**))+,--,,-..**)*++)%! !!  !!!#$%'''()*,*'(*,-*'%'('&'(+'()*++**+*((())**,-*+-+,,++**+,/-,/.02-+./143/-..-.//-.1110..0/-*)*,,,++,...0110 +0  @2000-,,,-,**++** $%'+&/-**,,.0/-/10-+*+(&$ !$ !%'%&.(%#$%&''))&$'*+,48422446856730.*'+,&,2.+++F..)&*032.141323.00,*'$"(-./064221141+),,+)&*+(*& ! $*+*(%!"((),-,*)8% %(&$()'%%# "%%$#$#$"#$$#$$%#! #%(+'%##'()(')+,-+*)&$"! "y!  !'% !))$'+)$(+(%(-,+-/24556541041210-+,,((+*+,,0357447:>CFEA=:720011/--,+*,/3542/,*),-..,-+%')(())(##''%$$&('()((()))((''&&())***+,--,---,,-./.--..,-03217241/010.././10//1/,,*+++))()+*+--.0///-.27<86564356664320/(#&/0./0232/.-,.//..,+++,--./0.-,,--,.-,--,,,-.,)*06:=>>@AAC@987420/.//.-/10/1139BLOPVZZVJDGJICAA>:6<=:997440../0...//..-.22--1,-/./244101552232/*0211220.02.,+-//-)*.,**)((*))(&`'()*,-**+---04541/-.10,*&%$#%'')**+,,,)(--**())+-*()))&*,++,+**)++()+-...02.-,-0.-//110100/0132#32264455# ,/--+-//---,*''*,.042//0463863243344455/25787654457 !"'%$-*&#%''&$35448:::9841/*%8%8.;*%.#,)15;5= "! $((**++-*+12/..-.0301346758<==31;@=853/+(.5886323102352/07::;;!9:86999:767:9979>?==<;<<;967:977:=;=BGEEGJL&KKA1/8ELJDBA?A@869<:5/11##*5;;7.+&""%&*/589889:;:878:97:===:--6;:9996108?>>>AECAC>?DE><88:AEGGF@BF>99=A>;=>CGFB>==@CA>EIHLOVQFA>===>?AGHGGDDDGFBAEHEDFB><=@ACGHEFFHKJHJKL&'(*(JEBDFFIIE@BCDFD7:6(*=MOMKLQNIB;:55;:524:?@>97;><941/((6>=7226<>;=<428;<<<74::525872-+/-''(&-4336:53236757998545;@?<=?=ADD@=<==<>A@:>A@@=?A@>=;9853236222/03468:@JS.-(LJHHJPPIO/53/..4::972+KFHLLJIGLNNLMPRXPHGC@AA@@<>DC<71,-0;BCGLMJKNO)ROJEDGHE?;:<3?F/.)%'&$ '#!#!"")('($"!"&))* (-158646873100330-,/2-**+-+('&%&&%%IHHFFCC!=70-*%'(&#&%&'%#&&!! -*.762+,-#$&(+&#''&+.'$)0*#%&&EB"%*%"$*2.'$)(&&*..-,-/+)&%%%*'%%&&($$''')'65314&)'&!0<),(GD$GC==E%"BGD=BCGI;C&>978:<=;2%+2334;C#'+,$>&(&$#I:;;99/&$!&)1+("('#$ !")*/.#$++(&*-*&(+(%$&&(*)&*+,:@91-++,-,)#C(-..-.0-,(*2443*+3678;:82.15420+-0,)/220,+--/780+),./,*(*30&$! "%&((%$%1(%,*D@FIEDJC528.'@-)JHCGCC><<5629>6335=?20360$#(350?JCGE=853.,0*!),& :)+**$ &%(%&*##'%.'*!'M.(&!+9;)!B##H6H727%@&:827?9/o;75332cd`^ZVY[_a[Z]__`bbbca_4544gcb25676T8:;:89;8643dcedcbcdcbabdcbcfhljg344hg344455876899889888::9976556677656655564357656676542cbcd3435776753343gfca`aa^\`36875432L442320]^^a1b``02221211354222/^c69;;<==@DC=<>><<=>>@@@ABBB?>=?><;;;==;876547876553367=A=;?N]b`[YQA;=>8>HGGOWTQPOGD@DJIECEED??@ABFJMLGBDEFFCEFADHLQPOOQOOLNSQPOSYURQYTYXUPJPOOOMKB6BY^XRNOIKQQPQSOJILJHFGLS[]\^][Y^_a^[ZSSVOOUQRUW\^ad]YZ\_dgiijhc^]]YWUTVXX[]]^[XTQPONTWWTPOPJGIHGKJKFCEFGGIJNQQSRPRQONONNMNNMNPNMNOSTUWYWROPRQQRSSSTUWWVUX^a^^]]^_^[Z__]]`^]``ZWVVRPNPRRQNMNONLNRVVUVVTTW^gg^[^_^`ba`^\\]][XPG>>MXTQPSUVVUTTX\ad`WSTQMLMNPOONMKJKLONOONNOMLOMLUhjd\XYcihokgccb`\WVUUTSSTRSSUX^glnuvgjmke`cecabf`^`dba`]\Z[]]]^]]Z[^]^YXXXZ_ddeda^`fgd^_g5ff`]^bdc^Z^`\[]`^^[ST\YQNLJKLOOMJMJGGILLIJKMMMPQQUZ[XXUVYYSPQOOKKIGGMQPQSVXTSWTPQQRSRTRQPQRUWYUSSUVTRPQSRRTUXZZY\\ZY[\_]\[XZWUYYXVYYZ[^a`]_aeiLa`bfccc_XYTW[[YZZVRPQROOLJFAGPVY\_bcfc^\d59;>;84hjghifddfgo8gW^efhkpmigjji67878;:996kmo:::;;;==??>>=>B?<;27816773345`[1_[ZZZQYa_[]``_ceZ9BFCADEDCA@@?;52/F53/8F_II>L\OZZofpAEFEFIOPONPX`aZXYY]_b^WVXZ^cghfhihmusszujc^WOMT[\`baaa\Z\]^[UO[id`hprqihjkjjijhb`dcdiintvwvrrrplebgec^_cilmllrutuzxpvBGF|iIMjtq_ZaUVV]dmyoo{zuh[MSX_olfmlkkjjhehlrrsxxvxtonpnkjjgccabfijmwwwqeabeedfhijmy}zunhbYcruqoljjmquzumnmpsrppmljc`^`a_djmhegiqqlefmuwwxzyvtplmoptuzwnkku|HKMLLLKFHJD}oEwokY8Ot|rmuwytjhhnmgb__hune_ZWOM^e`_gms}~~{zsslfelm`Z`bffbZWYVROFFGGEELOMNOKNUVXYWYZZW`lu~~vrpg `emnmmnkinffmlkfdb`_[[\ZWUTUVWZ[^eijhjsx{ww}{zJOPMHxssx}}~zsqnhnnov|~ywzyyyvsuxvxurd`fjkos}wiehlsnfed]\]BvRXRTVQLIC@<69DDGFHQ\gjkmkgd`[VPMNTRQOLKJNWTKHHIECFGG{y}FEFFB?@>rljh86kq88e_1[X3863ZLWGULA<:9889RZS^d`XTVQEDRSLMMILQKDDHTKEGH{BLSGACNYMEGMLMTY]][Z^^SHCGCCIEHJIHGGKLJLOE>=BGGDLURKD>:mOOJy}FKEzyolE}ulhisqgTK\ffkxy@KOOJCEHKJ{qrjjmbSJJ=dAB=7:FMNZSQZZ[^^U9[YV^RAINSSOLIJKNMJIJJMOMDNMRknaZVPTTPOHEGP[`_cpkcOKQWbeT\igjecff[SX_d`_WSSX[ae`\YXTVR[aZUUVUTQPIEUYQLHEFJKJKJFJVNIPN}z}ypbckqIN{vcbbacU]v~{`^UWjyj_]c`X[SMLNgnlrkT`t`UYRKNJGDBEY[ODEIAIDHRPG;^P4d^]^fHA}BC?FH?jktOKyDIUXE=G[^ahf`^lvmcfsps`ntsuuvtmqvvnqum_UauszlWYhnig[\c\WFETYbrx^T`^\P[_KJWT][QRRp}|ZHEVhma]ha]jg\LHZZTURRcxphaZ_cXQY\_a]]ksgcXWSY]ZYTRTRRVQLMVbgeb_]XUTPGT]dif_]_ipupbZX^bUNOPN\ZFPVOSQOQOXae]Yihkrl__fbdmhd[]_\TNNptgON\cj`auvdcigcc`l@AEQYVQIMTSNKH{XnFeSV]sI|pb@NUSTUZ\QJScgmxxkpsw=80A.8>_mmUlhS\]db`ksjcU]ciqu{wg_afotrjs~Bvxl_UE:DMFGOQPKJLKHA@CDEGEBBGEEDGJC;AC@r_\h<>?FMF@;984d_XW[h69;<9=A:`[`aaZ]acd`g8:9ca66c35786445^3:6a\34_[\d67_[`Ka^\[]_^[Z\_[WVZ_cd`]\YYZ^a`^YY[[ZVQMWab]\`fd_[VSVXWWVTW[_db^a`bb^Z]_]`^ZYVS()*++,,,+--,,,++*)(***))*,-,*)*,-,+++,--+))'()*+,,-+*+*))('&'('''*-,+*(('()*+***('()&&'&%&%&''&''('&&&%$$%=&$##$&((&$$%$&&%&'')*((*+*)((('(('''(((''+-.--.,)*-/00.,+-,*+S*,-+++*(***,-,--+*-./.--,,+++,-/.-,,.+)')*)'&$"!##"!""#"##"! !$&'((*()*(&(,.-*(&()**)+*)I*)+*'&&(*,.--+**))**+,--++,,,+,-++*()*-.++-8./.+)--.000/-,-//---.-,-..010//.--.320/ +--.,,+,+*+),P%372,*&!"0-,.0*(*+,---*),.-*)*)'(( !&&""$&(,1/'$#"$$##!"$&(++(),//2543/02/+**-2/').-+*-0.*)(&&-33.*-26.41.40'%&'+09:621.+,)(**.-,,,+'$"!"" !(, "#+)'*0-***%$#!$*/0.(&%#! "%%""%%$ !"#$(*+*&#$$%%#$$""%'*+)()((()+*(%%'$""%#&%#!! $'$$%($%*++,,*(),*(&),04557764556300++-)*-(),.12461/01379:;;9733310.,../11121/.-,**,..,))*(%&%%(((%"#$%)(**-,**+*)('''((&%&%'*+,--/0.+*++))*+*+,,-8/331112221//21/010/02/-./,)(*+**('()*)*-/..//,,.265014445,3223420,("'.--.01100//127:4.,,*)*+---,,+**)*,,+++),,+1?A:4118>=A@;87520.-,--,-.039@EFITVTLCBC@;9;=:78:64685431101202210--0./,++,-/20121024430/524/.01210-/1//01011++//*('&&')*(&((%$&))&(()*)--,/2212/0190-*+)*)('$#'**+,-.,+-+*+***)***()*,-.))*,-+((*,+*++,./.0/. /0//..--///-/<2430123642352220--,,./.--+**-,)+*)&#&,/03453541/2453323496.24578:85588678: !! "%$$$%%&!&+*&''%%&%%-4448:::7652,'"+!'4(%*.'-/=7A&''%&'+++)*0440./034651013579779;9>BEDDGKLKMRQLFA@EE#'&EC9$%386*&.%%(.6;C;6=<6.&!',8:7<=;;::97:=?BBB@<<;:98976899:;9 878:::;:;<;717BFC?=<<=?ADB=@>=;8645658=>:9:<@A?98=AB@ACB?==<<;:@ACB=:;AFHHJ(**+,,*%&(&IHECA@;E%CACD>:7.&:FLMKLOLG?=DGG@::842.(+8;54;?DHEDFFGEG@<;AA5269>>:53541.''&%$&,1.,,(*02332342/7?AFHEA=::=A@@?A=<@@@A<;>>><;9863455332224546:=@>?BCGGGHFECDHMPNJHN*--*N)QJGFFHJIIF@=95=877)L12,.1,'$! #!'$$!$&%%.358:;;9640-,030-,,+*-30*('(&I%&''LHEEDBDFCBE##"!/,*(+/)%$""" (!&/)163-+,*"#A,.(''').*%$&.("%%D@E!',$!(/'"$'&'+/22//0/& """'%&&%%%&(('()#"$#"&,+&!1<)+)FEJFCBE&(#EHFBLIC>;K&C>:89?>8,D)4:89>< )+*(#"$''HC?>7891&"!+ #+'$(&%'%-+*1+ "(),-*'&(()(&())$F+)+;=40-)*+(($D%'+01.0:97*'-057*086744892-.3533.,,-.1410/.-.+140.--,,**&#..('$"#'''('#&0)%+*AAIKE@C@:2577A)+IGCC45667-0;;.9=:::;;7:=?<;=;0*2=:@8,+4:67.0741&#+-4=B2-731*03&%.+10*+)7@LB-&$-8<3/61,66/%%00*(')2@;63046/+/247218<53,.,/0/.-,.-..,**079852/-,*)$-59974219=?FS>4./25/)**)24'.2+-/...2692/;87><10314:74,,//,+(9?7*&-4;52?B67<74415$*,+*&(/,)'%@*5'F3*+/<&=91 )+*+,//'#*449??79::0:=/9;0446207951*257<<@>5167<6:64423576446752_bdbb_[^_][[\\[[ZZ[[\`cfh45554c_ae337623678<<8897544433343dcfhge4756645666776999887789::865556455665664 3gfggedd354323455445445655655445igg3Q45543331a]0102322b``bcba`_`b232322343122237<===<;;?B>;:;<<=>@@?>;::96565479:;<<;::;:9756788;>=:6a`^Z\ad443aYVWXXWVWWVRRZ^_]ZXX]b26873278.RUTOJJPPQTUXYVQMNQMIEDGNONNOOMRVTXXRTUROS^jjVJV]`YUZYSOPKDGdOQKERZ[TNSR^jbY\\XX`bRQRRSTQJMONYYURQMHGEDJKLJBIQJ?BEIHFHJGLRRUTOKNPNPWbcXJKJFDDFJIHGGB??DGGHMPSSOLKHIIHGHIKNMJKJLMNRPKMRWUSSSOSUTLHRUTSQNIDFW\XWMOPNSRSQJHIJKKKJLLKMPPRTW[```[YXSRQOQVQTXY]ZVWXWTUWYYRRVY\WUZ[ZYW[^^_\WXTSSSQMKNQOMK/KLJEEGGIJGCGGDDFGIKOMNPOPPONNNMNOPPRUQJKMQRTTUSQPPOOPRTVWVUTVZ\][YY[\[\[\]\\\^[ZYXUSSNKKMPPQPOMLMMMPXXWYWUUXY\`_\`aaba^\YTVXYYVURMNRSTTRSWXWTRRVgueYY\YNLNNMMLMOMLLNPPPONMKJKNNKR_kqrka\^^bilkgea]\YVUUUVVZ]\XX]fgadpuroigigd`_dc[]``^\\_`beb_\\Z[\Z\cji]WYXXYZ]gfbc`[]agfc_bkhfbY\ab^]^[\[YY[]]]ZYZZVRSRPNLUYKJPNKKNPJHKGJKMPQPPNLNQOROMFFKLPRPPPLMQUXTQSVWVRQTVTROOPRPU]cke[XZ\\UNPQSUUUTVXXVX\]\[ZZ[[]_\Z^`[VTXZYY^b`\]]_de``abeb]ZYVUWYYYWSRQQPQROKFGKPTUZ]\Z\_]Z^a38<;84dgl8nkigeekomkjfhjmnlhgm6589888::;=96omllm;<;;<==>??==<=@@>=69=:;;742352_1a_^YVOQZbh45421`c;3ADCEED@>?A?92]4Y70/:BYL?CV_EMW_OWo?EBCFJNNMNRVWY`dfknttogefedfgfknlmwyqfcfgdacd_`ed`bb_^_`_^^_iqlhnplfcgljjjhea[^babfiolijlnptqiccfgdbabdgilqtsuz~~BFHHGxv|oRV^lx}yv|~vz{hWZjxysonlilkptw}ytusuwuurjkpspmmnjfe]ckku{~sgffb^\``]\\alw|Islorrlffknpppqphdeikkgehida___YRW_`^adgkrqhbelosz~~yqkjny|y{|{}xslp}w|GKHEGEEDnlsljtDI|vvtqrqjfiswsjhgmtrmg\SRMOfrgZ^tyx~}zrnmimo_UTX_`[[ZXVSPMNG?twFRRNJLLNV[_`a]WT]iu~ymimrmjkoolijljihgikmkh`^]USTSRONOSZ]]ansuvtt|~|vwwtqprwyzztpx}~}vnoqrv}~|zwtpuynovpilzy}wqmirvmmkoqg^VQTYURWVWYTM?59===588;701;==68DHKXgfefhlkgb\VRQPQQOLIEIIECDEFFG}zywzGGKLLMLKLOPLIGC?9_[i:85773243`_X\9KMHEB@>=7=Y_Z_`]WUYPHEGPMKJKLNJCFRVLDEXYFr{T[KEJNR[_]^]_a[QG?lo=GNILKKILPKJLONHCDFJNSTTMA}EHENUWL~CHDyzvzDznfjlfcOKgquopxnnFNOPDBKOJ~ypkqnbRI@GNE7=?>N[XYSRZZ]^[aVhXSYKHMUPLJMPLKJHHIINOJ{KKIY^VTVVUSRQLJDFNV]dg_[SNMCIcjaW]accba`ZORYec]YTUWXZb_YWYUTOUdc\TQRPORLFQ\VMHIKMKJJKMGAKPLID{y|}}xqe[nIvz{jjmdchbd|tqvn]_fa_lc[RPdVJNLXhqqnY`uujYOJJPWSUWT`GAXTUOQKJKIDDbRUZc;?CvnmEAyzFBDAY\tLMMFGRNNLVjj`boncVdpmxCwbeont|ouuqklY_mmmqleUXr|wlcbid^YNV]\[fhaXVTYS\\SIJK[QNKVkswybWNSab_[`dchcS`UUal|k^agb_^RMX`P\h]OUfxsbafcWTZ[[SHIOR`QHKSSXajln`ROLNWWWXYWSW_cmvqkf\YVQRSLQOQ[VPKLKMRX]^RX_Zanleimiehkdgqh`XKAclja\Yivyrse[itqed_ads?CR]_TJGKMHCl`|zo]GA[lnJ_GRSPIHNOHOU\erigsyzw;3IA=9]nuXTLKIMUXW^oigkbchhslakbXRecbjrtsyEBB?sbVM?;?BHJMKKNPQLJ@=>ADFIIGA>BIMKCA@>7B:?D88;61I13335576698<<<=>AGE?<::853`YS_d4k:<=>9ee]ef^^baffi8:94_473348865566467hcf4d_^b56bW^`_\ZY[^\\^_\YWY^bea[X`YTX^abb]YXXZXQTWWWXY_cbdb\YYXXUVX\`df`\\aeefiifba_\\\+*(&&()* (*--,+*))*+*('(*+,--.../..//-*)*+++.-.,++)()(()(((''')+*++***+,+,..+)('()*++**)('&'&%$%3&%%%$%&'*,+((**))'&'*,+),-**((+-.+*---..-,,-.,,/,F.1/-,*),--0-)(+,++./-,+,.-+++,..-.---+(&$#!"%%$$$""" "$$""!  "$(,,'%'(('(('((**)*+,,('''()('))(),-,+*)(*+**+,-01$-,+*+')**,*(,.,"+++,+*,,,+,*,.--. 0/00/// + 434-,++*,,,+-4## /.-**-/-+)*+**,-,+((,/.,*(&%$ "###%((&&%&%#!!"&&%##&**''((%*-+--)())(+297+$/551-21-)*)&*/.+(0860,//4;4.230045,+--./-'),+230-,*''&$(()*"&-("#$(*((*)*,,.,)&"(*)+.471&((&%%%''&%$!!#&('(+,..+)'&L%$$%&()(&&&()),+'')*(&$$!"$#!#"! #$#%"&('++-,&%')*)((++*+,-.0368640/.+*b,(+-.1.,...-,-//,,//1/-132/.0102/-0./0.,*'*,+*())(&&'%'(%"&&##$%&')**+*+*)))('(((&'('$')+*+,,,*++*)o+,--,+,-///.-.//...//../0//0/..-)''(**+*(''())+///0.,+,./1213466312/+-/10//-+*+,-.-.220/./19B90/0/('*+++**,,+++,+*))++).8ACD?86669=?><96220.-032014;77::3377654666852110/0./376/+,-,,,.22010-02332026421-.12//0./.-./000/...,++*)((.2'&**''+-'&*'()*-,+,+)*+)-,)$"&')++))'(),0-*+--.,+--+*((),*-36:5-,.01,'))++,+*+--+-/0/..--.12//23/-+-/.-032000244221242/...--.--,***+**++)%&(+--022001//00335459:8774569;965998 !  &&&'('#&*-,%'14599975430,&?!6"$5,!$03$)16)/="&"#%(+,*,.//0467:;?@<778766659<<<97:=:9746867:=A><<>?ADB<89<<:878:;=?CEDEGIIHHJMNLIHG%((&&G??CCB:)(,6>@A?CE@?CA?7,$%2<><;;:8::=>ACA@<44:>><=><:826<8;@D>657753563247>FHKQ*RQLB<<=?>:9=@@?@@?:79;=>=9:;744332.278689:=@A<88;<>CDEEA<99=DGEDFGGHIGDB==CIMMKE>AH'*)PMJJH%'$$$E77955:$(LJHIHEDB@B@<:>?<>B61259:77742/,*)$9>*10.,-,-159;:6205<<::<>??>886100/00/036767=@ABCEJKHEDDA??ACEFFC@FHIHGHIDAAA@BFFFEDC?CKKLHEA982./20.0//-)$!  $%$%&&*+3357;=<974100/0/.,)MLM(,+(NLJ%'&&%%IDCB@?AK&&((()(''))%# '%-#%$)#$ )1.01/+*,)$%&,*('()*(I$&-/BD'JDK##//#7;+2&"&(+1423223.' 04'+%'&&&'+'&(+*%""#%')*+(!="#"(,0*DCHGGGD#'$FGGDGCCACC$D>947853)':>>:9;43#))+#!'\*'FB@:6;7/&!$#+(*'%'&'%"&+4,*0(F&*.*'&)*''&%%&&)*(DB*)&13,+-,,*))('$%*.04840,)*$&583035672**.540.++...32/-/--)-872-++)(+(#+1+&#$&(('()*% &)'%"B@>>>?=93-7&J@JF@@88=86;54C<;?;02985<84.*6.(,)1;@=I:.4A>6.)&&*0,-./7'"0,,*,'%%# ".%%&+ $HAA>H&"BEH&#((46@,+,&&+++(.<<56>@8.7>9@#;/2:7:?7=>=87-/878<95++;C?942542/(,311782.0.0*14-%'&0*)(-:<>@4,&+221.12<031(0,.35@8038521)(04(183*+6?=2376.,/01,'(+,4+'(-.1499:5.((+/0.,.36=HG?<:610/++.*+,/42-)*++/242,0525;8579856959@50.*!28733/5;A><718BA61/129#)-0+&%'(-BEC;.!-64B(."++)$$)*%)-05=87>?=93=<@G%#$#>4.( #%&%%&&&%$ ""##"$(% ! " "! !40;<;: "",+(#*,032*/0+,-+---)\2/0.++.-(,--,+)*+,,-.,)(),.0.*)0*&(+.,,)&&&((#%&''(),-,/.+((''%''*+--,*)-00/353/.,*++Ձ򀆁~}|}}~׀ӀĀǀ݁ŀր΀ ÿFLNPQRPPSXZ[[ZXYZ[[]ZWX[]``]\_baacdbaaa^]]\]\^bggf4443233daT__]]d2c13554454338:632443_\\`a__dd`]^`]\YVVZZZ]d47875fb``_`d4993343465447644566555446566566655656878876776767545&677654e2d332e344ebdece44gegfddccde34334554455456543e2231/011[N030][^25544554543(44332236>B@>?=98:==99:;<=?@?><:;<=<:989879<;9889::;<;;;976433357889=>:9<>A@8a]\_fegg573[UWYZ__WX[Z[]]`]XWZ].,,-//./.VWWVQJJMLKKMUUSQPSWUPPPTRNSXYRQ\WQSRRSTRRV]`ZKN[ei^VVTOIJG>HMLJNWWRV]YRZcYU_]XTXZRUWVXWPILOS^\VQJFFMJEDCEHEKONRKCDGB?FKHEINKIHNPLC<@FEGRTJEEBEILJGFKNNQONMMPSRPPNMJKKIIGFFHLMKKLLMLPPZMRVTOKLQPRUTKKPTPKHMIHLNMRVRPQOQNQQLFHJLQONSOLJIHEGIS]_ZWUSQQNOQRSUXZ[UPSUXVSTXXPPVZ][SXa^Z[\YVVSQSTTPLOMIIJKKLNLKKJIE@ILFDEGJJJKKJKMNMMOPPOLNOSXUOKKNNPRSRPPOOOPPOPQRSVUUVWYYYXXVXXXZ]]^]]`a_YVUTURLGHKMOOQSQMKMOQSSWYYWXZ[[_bc`adba`]ZTU[YWX[YXXUTUWVSONOTUNOUXXSPSRQPONOPNMMOPOQPLKFBKQOOYkuzwne^Zcmiillkc^\VUVVVUW\`^Z]`c\Y`hgcc`diea]^_]\]_`^[[]\bf`ZVWWUVWanob\[[Y[]`cd`b`[\figec_abcffdab```_^^ZZXVZ[[XZ[XSPNQTRLLOOLMLKHJPLJJMRRPbQHJONKFDJLKLMOOPTVVUQPTUWVRRSQQSQNORVW[_gd]\^c^XUXXXUVYXZXTQU]b`_\Y[[\\]]]\WUYY\^^`a^]^^_ba`abdgb_[WY]VTRSRTRNNTW_b_cdb^YVXWYc59964ff698mkkihikiklkooloomlm657::87:<=?<8lklm8<==>>==???=<;<32:=<;853432`_ZRUPHIT]cg567432d^IJEJIFB??@@>83Y4X0/112XD=NdeaTR]YNcj=<:<<@FDGKKLPT]cjqtrnkosne^_cfgquwxqfc^[fgcccb_]ag`^c`]_ba^_kpwwmjkjeadke^dhe`\ZacZ]_dgcbgjikje`]afhefeefgikmqv{|y{{y{zpdm}CFGFFHIIF|wqv~FIKKGBriy{yysqrwz{}on~~zu\YtzwqaT_nusnprnigky|usvtpqqmd_ab`^^__fnsv|xtnmifmtpjjnpoplfefefkjdbba`ZST^bcgebcfjkggnt}zxwyxtv}slsx|~~BDGGHHIH~|||vwwwqknoke]Z_djmrror{{rmhdfmusjfirwsqrokqoglo_Y]]\`Y[^\ZWWXUPIGL^g^YZ^`^^bhjc]YWX]gnqpsuppjkmghfijfgkuzm`^][Z[[^`ZPItPZZXYbjnnswwrqqssnkormmrtsow||}zxxurqrvwqnsxJHJKPPLKMN~Izpq~sjkjg_ZXXTONRUWWVSPPRVL;>BB1Y83D*?i47:LM@AIJNQSY\_c__8=<7YP;FH5[dhxBMUZ^^\\XY\[X_ijea`_ZUSQPPPRSPLIFEFGG~{}{|xy~|v}DFGHHJJGEJLMNQOMLC;;o^`42`29978;AA@;86;@>CIKEA?A@<>pe_mqj8>57A;3Mb34344778:;<;<==?@?><<;7563a[1157<=::8fc\bfa_a\_hh7;:6bd754578645786664gf44a\bh5h]\\^ZWYZ\[]_bb]XXX\`b]U]_TRV``b4e]VW\YUVWUUVZ[]`af45d^UVVX\_bfe[[adeh5hb^_^_`--*)&&)+-+*(((*+/))+,,+,-+*)(((''(*+,++,.20-*,22-**,-/-,,))*)('()+,,--++*&%&&'')))((())*++-/--.,++,,,+*('*+*)'&&%$#$&%%&&&%$$%##$#"#&&'')+)))+*('(+./,)))((('+..-.0/...+,+))+.//0.,,-./000/-+*+.30,.1350/21.+))+***+-.,//*)'&#"!! !#7"$%$$$%&&%%%" ! #"#%&$#&()*+)('')(***))*-,**+,+++,+D*((()(+0420,,++))--(%&())*+,,,-,**(('))(*,+++,-,-/--.0..--/0/0100/.--/.%*(*  9 0/--0.//*'+--/1-,0.././.**))$###$"#&%$#%)(&%#$))(()+*'*,-*)1/*+*'&&'*-00-$&.693./.+&%$!).,+-22/163/35/,20,+/41230/.)%'+-420.)%%*'$%%&)'(),0*#$'%"&*'$&(&&&),t+#"%$%-0'"$#$&('&&)++,++*)+--*)(('((&&$%%&()(()'''+-),-+(%$'&&%$!#!!"##$&&(),,)%'(),**-+)'('%')/672/-++*(*+Z-./,*+,.-+,.-**./12-1740.../0.-.-,-..*)+*((*+++-+*)(&#!&($#$%&'&('&&()))++))(''(*(&%&)()**)***)()*++,,,--..---,-.-.000/0122---.-,(&''()*+,+((**+-,/10/.///0343585531/*,/..02211.,,--.00-+,-10++/0/,*+,+++***++*+,,,-+*(#(-++3CJJG@9628@==>@?8330.///..2431137548==;;:=?<83443235764332472.,--,,-1771...--..01.11-/443220012223221220//.--+-..,..-++*+)(+-,('**()()'(+)'&)-,+*++,&(++($"&('(((')./,-*),,-,+,,))+*)*,/.026510152..///+,-,-,)(,1311/-/01//00/-+--/11010//02322234641./10-...,-H/,+**),+((+-2313542-*,+-23244676665676899<<:88 8688 ++&%" $$"#)..+&"/7:;:85541.,'<"67&!,865,*2/)7:!!!"$'&(+))+-248>?><:=@<611568?ACC?7632898778647;7696246634<@DB=;;;649<7489864386157:<99<=<=<9758;<:;:::<>?@CEGIJGFHFDCC@7;I(''%%%&&%@?BA??@@?@@84CEA>0-?CA<1)0:?>=>A>:89AHE@@?>@@<7577435557:>BELMQUQIC?<=<;>CA==>??B?:89;<:><766652/0689:9779;<:8;=AA@>@BAAEKOOOLJKLLMOONKE>@EGHIK&'M('KJIGEEFCA?>BGFA@CCEB??><:437;>@CD@ADFDA>;:CD96::;;45753012.*%$)7=52257668=A<73/05;ACCDB@A=??==;<=;;>EH=7755642564.)GAN2752039DHGIFDCCA>?AB@8;@BHIJO)(NKHLRWQR)*.-*)Q+*OFACHO*OLMJLKFA?AJOKGFCAA@?96540,+.00/.*'&&$%&!.!" $%')%%"!$$#+%*+---,*+-,,05766752/.-./0110-*)))+*OLEGJHEFGGCB@?>AC@;A$%&'&''&%'(&%&%#".$%&#'&$#"" )86220--,'((*-*&&)+&E$&(+%A*1/('"&-) <$3-#$(*,3613632*# 3$'%#))*()('').'$ A#(+()*'"!%(-013)BI&&GHB$*$EDDCDDCAE#%@<>?=:<;27>73=@;0/"(-,#%*+'E@>::92-)*("#.),,&#%#2*)-,%?#*)''&$#$%%$$#&*+'CD'%#),.11,)+,*)(%#$%*---,&'-')783*14333-+2/+-660---*+03/.+,))-,/51(&)''(($(13,'')'D')+3+%+)#!"C=;AEB>:4/@GF25HPH<;A??><>F:09A40,$.EC/ %51.,""'6EDF=/;D;6/(+56465(.')2.6,//#!##!!E&9+:F$FA?&*%HN6%F&$((&8)"$277=A7426:66#%;-)6=!87,+*('*/0-1599:BDC7//-,(-9+(*/7/*)+,,54+*.-01/*4/1BC6-3CR=/0.,2155<<>;?>7579EJ>464)-21 )0*>CFB>;<<657A2!(--A1N-0-,+(&% !(,7B84;=E?>044!(2801>("/+'('11+59333970@8,,.*(36ŹþȽùÄĀɵ􁉐ÿ̀ûɼtƾ؄ۀȵÒۤȸɀ¼˷섕ڷԙہļȹūŢ͵̴˼զ񍉀ڈƽ䅎Ǵµƺŧ̿íǴýὠȼ»ƫٯī֯üήб޿퀇󄍊񁌎怈_abb`XVX[^^YUVVXZ]^_]]`ba_^]^^[YUSUVVY[XVW[]^]ZX\bg464filmg`YXXYYXWUSTUWYYY]_ab`YTRRTUVWVSQRSSRPPSUVZYTSRQPPQQQSURRUWSPOPQNLLLMMgMLLLJJKJJKKKIKPQRQSUSTTUVVZ`egd_\\YWYZ]cca_^_ba`_]]^\\^`aab`^_bcb`_ceda\Y]grurkjkfbfb\XUTTQPPOPRQTSONLKL'KJIHHKMNNNMMMNPQSSQNJGHECHMNNPQRRRUWWXZYmWSUY^bcdhd```a`__`_^```ac2cdggige4fbc332bbdcbbcbb39:85568878533455643cab`beb^``^ac_][\[Z]cggcb`^WIM\abafg35535454355455655566644567765444576322334554456765443'4457864hed2335668:644edeeec`accbce445665 665687767775434543212ca^U121113689::865665431`b59?B>;:<=;;;:7667:<965569<= ><<<:977:876778631c3567899:;;;<=;;=>A;hb][bghhfhieXQ^dc`\Y[]]^___ZY[^`^ZUOLIHNQSTTTSPOQPONNRV[\\fd]XY[ZX]a`^XYXVUZZY[[VTUZ\\ZYafd[SSNLNKKMLLKEGTWSV\XTVXYXWYPILLNQPG:>HKIBHKB=CE>CEHHGCCDLNC;=A=9?C?@DGKNOPPG69@ABHSUC6ABDGIKLKKHHIIJJKKNMKMNNJKKHIGGILOOMNMHFFMRPUWTOMRVUVSPKMPPMIJKJHJEEKHUZVOOLJLOKJKMRUWWRQPJHFHHIMRSTTRUSPTQTVTTVWQPRRRQQUYZSQZ_`c_[^YXXXVUXXWVQNMOPMLNJIIKNQOPQOPMKJHJKHGIHJJIGIKJJLMMPWUONNMMPPNNMMKLMPRSRPOPOOPQQPQQRSUWXYYYXWYZYWX[]_`]\_XSRQPOOMLLLMMORSSRQOPQPTZ[[[^`]\^bcabcdcba]YXVWZZ[\ZVVXXVVTRMLMNNORTSTTTSTSQRQPQQPPQOL@ANRS\mqmmha^Y]ikgghd_YVTSUXXWY[^ff`dggd``bfgc\]^^\\[\afdba]\`b^^`ZVSRSVZ^``^bb^[Z^bdecee^Ycfdced_`chhc___a`^\Z^_]ZUVUVYYVVWTSTQQRSRONMKKJIJHNOPLGIJKPUTQNKPTXTOJJKJKOQLMTVVUPQRUWQNTROQSTRPNUYVRSTWWZ\VSV[^^ZY[[[WSRVZ\^^ZZ\ZVW\^[WVUQPV[^ba`_^^_a`__`_cda`aa^Y[]][^fcYWXUWZY[_`cilnhcb]YWTXaf5775g78897jjmn98fgk7:9ihhhjl6669:9779=>??;977976976420`\ZZYUA9BUbh335533434U6@KMHCAAA@;84/9T\653iazaCZ]cdX\d\eyBCB>=icr?EGIQTZdlooqqnoqplf]]`cdc__beihfkjfecca^\cggcaZXafhdgjouuqlhb]hqlgehf^YY`h]YYTY`dfiklklib^bffhjjjgfghnv}~||}r]ZkEEDEC~~}|}}{}IMOQPLG}~hwox}}{tw|~~ztpqwtnmppnkifkzyplnmllpojf`^djosrv|yussstronnihkoqpkc`^fmlmgca`bb_XW_`a`_`cdeiihiiibelpw}~~~ynlns{~CDFG}womnpsokllga^`cgjljebilnpnhjpxwwwty~upmkkmpsrkikcYWUUVTPZeebcfge^XZbjic``agmjcZWX]^[\bchqwwojhiljhfefeggirpcYVRU]__a_\UMIGJVXTRU`jjhghmppnnmjlqvolmqtnr}{y{y|wmyKJKLKIIzvurogYTTY^]ZUMJGGKRXXY[age`acb_XYXZR7:J80:WNE[bcc_]^ZV7\\NQQIFCILHJKFADFFFEGJPSMFCFHGELYaaZVXYUNLH~zJWVNLJIWfc[hjg__^bjc_^e^TS^lcYZWSW\]YWUSLKQMSc\OMLLMNMLQVTQTQJDER\iUOPKEBAA|x{~}ujbjwpmoxsy}HzmthWnkNQNQll]JGK\m\RWjjdrvYN]ed`\VW^VMkkRHNSVaYY^JIKJFA87=E@Du\ddu|~rvHEAJBAgGDMQDTSEKNTYeshffXcn_n@D;lkp}vv{A{qfw{wnjh\SFKetxqnlhajid^Xgxke_hVUi{haUFvKWV[]ggmska^]diia_\[XUYkj^_Fj[bTBU~{^QOTYY]^[`a`ea^[]^ZRPSPMEEFKX`a`_^XZaaVLHEDGJU[`bfgjijpw{f[YWOYZT^TP^SOLKKLUTJHKQW[ZZ`WUejbZ^fkebcjqocbgr}{wqlg`itz|zcPTZfuHYYG{too}pOQWktu`NWs~oSW_]ZYgomWRX\rpXet~nimorpSUNGLTRPXRIMTTPL^bTU^afjoraTRWVW^ery{srruuaVNILOLLOQOJGDIIHLKA><>CMLHFBAB?;7jdff6;:79@A@:88<>>?@=:52342c^09;;<9720.-/121246::79:::888;<9545432104654432353230,+++-.00/-/1/--/122122/,121132/003410/0110.-000/,,,+-,*+.,+,***++))(())''%)))($&&(,.-*)(,.2.)%%'&&)+(',,,-+++,/*(-+)*+--+*-1.+,-//01.,-011//0//,**.0///--0/,,/0/--,)(+./111000122111033222'30./0/-/42-,,,./-/112468312/,+*-244689;346677789  !!&$#%&% )/."(:=986541-*' $03:;C1#1277/3717B$$$"!V74>"'')--17;=A@><:42;@=98994226:333/379;=>-<759<<=>>=<<=>AEHJKIJKIFCDA73>K('%$$DEGGEDCDDEI(+,+*(%C>GE6=FHGHNL=?FCCCBBDDD@<;8?@<<;8;CJIIJIHE@=>=;<>=;:749>BDCDGECABCCB@@?;;=??=:5449AA@<75477632578765798:;;:8737<=@DE +GIIFGKORRNMGA>=?EJJHL((O''MLLLKHFEGFEDCB@==?AB?=<<96779;>?>:9=>>??;=@ELIAABAFIJJB>=<=@CFDAAE=43234305;;9:;<;5/38<;75459><8323672398;BGGB@>@A@=;:::<;;@=50/-1543.)(%'/1.,*2<<;::?AD@?><<@B>=>@B=BIHHGDCDCEIHC=:CJHKKIGKMIIIKLMKHEFGIM(R+,-,)(MPRNKOOMJGGGC?70//46542..,*,231/169720/+'" !#!)w"#$##" ##%'('))#"&!$0",2423897987:8543341/..01221,(HEGM))'JB==@ABCBCGFCFFE@>  "#$$%(*+-030-)$!.,()#&'&%###" 7?753.-.,(&&*+('+/+$())')((371-,%&)&#"*,&%&&%)-,,3341&"#"$" %%&('(')()&(/&%#$(*))+--'%',0142HAH'**'E'*%FDEFB@AAEG&DCB>;=;:5988?E@6-. *-&#'*(%D?<9840+! " !.420*%%$ /.'**%#"&($&'$!#%$$##%),)$#'(%#&.44/+,.,(('C@<%.-('&%/8507740346;52393+*2:4/0/+-12/.-,((.*,71('''&''&)-+)+*%"@$+2=.*,'#!!!?>?BC@;517?>;=KP@=?AI&GB;?6*8I8)+();H:/%"#/;1+.;<7@E0*48850/262.>;,(*-/5.13 E&D377CHH>?*(%K.(9($+/$20"&&*,4A<::37<25 "54:A;9=!=B;3555/,$&5>?:87518631/7?6518+,;H:4,$:'1/2147:=:5425861100.,-98.:,?#5.3,!,EA0(&*.-00/111531011/++,)(%%&(/35434/044-)'%#%',/4878<@EJG8.,-(-/+61'3.,+)+*0.)&(,230-42,2874565334:??427>CFE?=:7759;>AA4)+.27#,-";;99BBA:((,9><0',=H=)+0.029<9+*/2A?/7@ED869;=9')n&"%-+'/,&),,*&25-/2366;>3--/,.039=?<<==<2/*&'(&&(('%# ###%% !&$"! !5242!8/.130"/,%3-*/.,,++)**a34/10*,/22/.,.-)().,+++-.*(((*+.*(,-*''*'(.,)'&%)*)'&&%(*''))()')++-00-,--,-..,*+.-Ł}~~~}~~~΀~~~ 5ſƽ¾Ōǹӷù̾ĺôž¿ĺĹſƿȀĿǵǽϾľǾ̽€􁇄&à鄉Ӿ۝øǸȀ¸ۺͼúƀøļǿʼƻķᅨ̀Ǿͯ崟ǀĿַ탒񆏚ܿ姶ƵſƝ㳢ʻʫؼҪ̿󋊉ô׽úӼƲΫŹлȳĿԿòǼ¾怅úɱŬ»ͮɽ¹Ⱦ¾Ѻëÿ͂愒\Y_dgd\[]\^^\ZXXYZZ]ab___^_`ah\XWTSTXXVUXXX[][[\]\b65677lb^]][YYXURQRSRSTWY^a`^[XWXVVWXWVTTSTSQQQOMMLLPRSSRRQRSSSVVRPQRPNNMLNOMKKJGFJJK!IJKNPTTQRQQQRV\bccd`YTWYY_ccaa]X]a +`^^]^___`_`^_bfe`]Z[jxn\SRW[]YUSQMLMOPPOONOQQPNKLONMLKLMMNOQTY]]\ZYTNPPPRQQQRRSRRTVWZZ[[\^cfba```addcbba_^_134hhfcdedece3aa1343dccb2f34334688869;<940.11356776734653b_\^ccbehkib`b^ZY\efXYahih4hcac37:875444553334556777323466532234<3a_abad4454567765676455455664hf33455644554654dacca^]^`cfhhf34[5655777899:8532ceg4543322dcd_^]\]__136654323466432ba^\Z_357;;988:;:8647:9753221259:87:;:<;86237668:8773]W^6752763667853bgp<;8m_[`h7njgdde]Xdrgb\UTWZ]^`^^\[XX]]WOMOSL4@JEGKKNPPQONVWbjkj_ZY^b`^^ZUQRLQ`f4ecca]Z[egddd`[[WSRNQTINSKKNOJHILWXVVVW[RLTWWRFFGFKQPF@GIIQPSQNQMC:FIJIDBFIGDB@AB>9=DMOQOQQNLMD;AEDIKPPICD@GECIJJIFGIHHLKIIKKKLLKLIFIHHMONLHHGGGFLPQVWPJNUVQROKIJONOTROMKFBFFGWZXVTNJELKKLLPQSTSTRKKMNJJHKMPRUXXUVW]]TPSUNNQQMKNQUXUTZ]]_][ZXVVXURUUVUTPMLKJIGGIJJNSPOPPVUQQRNLMGGIKLKIJLLKKLMOU`VMMONOQONMLJKKNRTRRSQOOPQPRQPQRRTVWXWVVXYZWY[Y\^]YWTQQQRPNNMMMONQSSVVVSOOQRUWVWWZ\\_ab`^aba`fgZPTX[[[ZXWYZZZXUSNKNQSTTPQTUTUWVQQSURQQRTUTUWVPEAPXV\ilfa\X^]]fljcca[USSQTXVUXY[bidfoomhca_gc]VXY]acadjnle`]^ab`]ZXRORX\_^ac`^]YY\_aa^cg`Z^ifcdbR\ed35b]^bb_\\bdb`YUUWWWVWVTWTQQRSQQROLMNMLMLPPPNMKFKQXWPOJIQXTNKHJILQSPORSTVUQRY[URXUPPTSPOORXWRQRTSWVNOSYZ[\][YWUQQXY[a`\]c^TTWXWTVUPMSXZ\_c___``]Z[^]_dhi`^^accdfeomb_a[VW[`cffn=>k`^]_[Y[^bhgeehidf7:9mjq<;7hii6khhgffj678:;95559=>=??>>=<;=@A>=?@?:9:>?AC@79667555432c[]2aL<@GVd66344111003?3VYMGDAA?<940?PV76@GeMDN]]ff[kwfdvBDC=9\Qim;DKQQWblmlqtssrqlfea\dljb_`dlnigggfcdga^cghdaa^`dkmmjdpvsqqkdlvpeckne[TU`fa[UV[\_dimosnhdgidbcdhgfdglqw}lZ]m~AByvvv|IMMKJMNKJHGNL~~zbWhllnptusnifhw}|yupopvwsrtsoplgcbbdcdffhkjjljfgggbclruuqjifaddfeb]\]]]YX^`^_a__^ahlkhc`ckgiouy~~wsv}~~|||zzyztmnoiadlvx}|xz}~{xswwsoollnomjjiikjlc^\Z[ZXVW]kkgmqrx}|wmpvy{rjjnnmkifi^YZZWUVY]_cjgchmg_beegfhgcejibYW_hnmmpmmpphjosqohbbacimgdiihdiotsf__a\YZjh^]2^WWV>2>NXapvwminopqonprqqoqwxx{x}{wvz{|}|}DINQQPOOLtjjlaVT[ecb\WVPMJTbjmw{yw{wf]gje^[VVK]qvRBVBTWVV]dhk554b263VJGKUemrkrG^pwpkgiigcbb]_`ZWURRKFHKMNONJphfjy{jackusw|CA><<>?@CGLQV[`deec_[VUTOIx]d533369;=IOLMPQPNKD;:\nchjb^YWZRJGJNIKSSJLMNNOURS]YTSJGMWO@CMMGELHEMNLT[YZTNNMMMADQPPQOOPNNTKKPMLLMPPQTXZWOHLWTPRLy{EPQHBGGxlszstJzqmi`^[aesujisEOTOIMOH}ysomkgXDGK@7>=C9:NYd_`bY[[]QcTOSNGGGLJDFFCCEEFFHJNRQJDCFEEIR\caVYWQNMLFFKHEFBIgmi^_hha\Z`he\Y[`WMXjeXXSQW\^ZXVOKIJHL`j\RHPXONPOMLQTKEFAFVU]VJHKFBCE{y{suockkquv~yFI|hozuuvcDIXV^fl{YJKVjb_]_\TV\^`UTZvrUNshYxyiGHKQgsRUUNKLF=;<;9qweasyytBxzECBB|rm~CGFDDDHOSXYZW_Ukuelpmx{Gfmlcf^Q[cb][^a`ad^Z[ZAFVSOGFMHN^^`_\UTTWUNIB@DG[geahqqnlmnt{ngc\WMQeaUTKOJGLPNHKIERdlijmcTPUbcbc[ghp~e`isy~vommmvwhcgm:=AQQHicemwK_cu^QqqiY`aWSV]dmbfuvkdighhwyu~}jRQdsu`XXPZ`PQ]XTSbZNDKQGRgc]xth^QHWfflefrrqTlblzt]MHQSNJIPURKJHDBEIF@<@=FNNNKLKHAkc^b`dj8758;=::9A@>noc^igehf6:;P112215887:=;9;<=?B@:83374bT2:=?B:75a]W^a_23fcb`38996554567775jjj79997feggcbdgdcc_^a[VSYZWXYY__WSTUW^a\Y\]WSWWRZ`f5dYSVY[ZWXVTVSRRWc69bYTRUUX`56e __]Z\ZXTUY^*(,/0.**,,,--,*-+./-,,++--...,('%%&(('')**,,**+,*,2.,+*('&%%%&'()*,.-,+)()(')*+*( )'%$$%'((''('(**(&%%$###$&'%$###"$##$$#$&((&J'''*,---+&#&**,.--.,),../..-+*)),,--,--/.--,-/10.,+*097.(')+,+('%$$$'(('&%$&%&&$##$&&%%%$%%%&'+.0.,+,*%$$%&&&'&''%$ '))*)))+,/0.-,e+++,-+*+-.--//02//-,-,+,/,*(())())+,**+)*+-33+),1000,*---/*2/-.11.../0001/.O/02/0/,,*(')***)''*&'(/266.+.01/.--.-+2:3/.+)+,../...-*)+,)%##$#"( !#%&')//3753+'&'))*,,*((&(130,))'(*154331/n0-,-*-.&(-**,,)*,,321.,-/)$''%# %'')+*$"&'(..0.+/,% &())%#&(&%$#$$" $*++*+**))$!##&'**&!!!"*,+)'')('('&&(('('%''')*)'$%%&&%(*+..)&),,++)&"!"!"#" $$#$&$# &&'()*,-.+,+)*++()')*++,.-+,-00*(++('*+(')+-/--011210/.---,+++-,,*((''&%%&'i(*-+***//,,,)))%%''('&'''&&''*/91('(()*(''%%&&')+*)+*((**+-+*+++-.//.-,-./-.0/230//-+++,*)))(()()**---,*+.02223431442267.*,02 00010/.-+*)+/00.,+,-,-//+*-.-+,-/z0/+%$.414>@=964654;>=98761.-+-00/0337<9;A@?;997:72./0135438:952012220./,(*.11/022/.,-/0110240-/43120"(111..021/.2543.+,-,+*-,**++*))++))()(7%(+..))'&+/-*(&'&'++*()*+,,*+02/,/-**,-++,-00-+,,-/.)*.010.,**+//.01//42++,--,-,*'*,./24112320/0221355//033213288102/,,033548 !83100../036421353588;6556665547 !! !  "'$&+"#+/?D<9853/,*&!*/0&)8,$+4286/;A56@$$$! 2.=>@DDA@?=:552.5::6468<=:;;<<9::437:;86658:=<<:8@B???:7>D?759<72./5862/2457:>@AB>::==:99:<<<;=?CFIKKNQOKGHJA46?I%$FEEHJIIGHIGFEFHECDCDK)++**+,+*('KIM((KJIED+DEFGHFEA5-6;<>@A@@>=<;8658:>=>@>:99966AILNMIHHIHFB@ED@??948;ABFHIHGHJHFB?@ADB@;=AA=;<;=B@?9776420//5?>;>>=CHHD?@DGHA=?BBBCBAD;788512568>B=9<>:3679:;>;87:9646;>A@?AAACC=AGIFC>;:99<>;:<=<9?EFB83472//62--,(()(28BGF=;>???=DCAAB=/)0/*%#!!%,9.!%"##$'(*)%$ $)**%+ -6:889;9756757620///*'+*+,-.+H<536BG@5017?:=?CFFEGGD!!#&*-26999841-,)%"4%(#"###"!/<48:32/./,(')-)(-,&()***.--.42..'$'.) #)'" %%#))',200+('()*"#+)(*)))'(.)(+(***+-..)%)/-,/*EBB%+,'$''GDEGB:>E=FC9129%*-+')+&EA@<7640'!#%,510,$$#%'1)(*($$$&&"#""###%%%'),+'$$%$$%)065,--*)()%CBB%)&"#!#7;712762005<92..2-'.:6/0-*.13/..*'&'%(48/*%).)()(&%),&"# $/.4/'&(%"B""@==B?:<92::?BCKSI@A%(GE8;?:?B6"$-*/69C-##*:6437502433/11@<,)B<1HH9%'(+9>)'#;BH75DFD@&@A'%$%JD8B&'(('&'*,--//5-;A6<@7<<5 A@>6-1;;>:9GFA:20))#'3;88<>:9;;=236-+245674/45*"),.8A,3?;40-29?;3(2/*'.723:A6/80!6<7030'-42..1123520/.#.,)%%+',64331--+..)%""##/741689779;@FFB=51-.))562/(*)$).+%))%-:>;;<8/+*8:78488;HNL84:BCCGHB<89;:@EB:4235))#@646:@L).2;-(;<4+22-)*17<38FG>89578@A?DF:++5;=.((&-/&)2.*+50(!)0'-:40><84-'0955/2<<;828B=/(&++(%%(+)%$" "%"#''&$%&$!50/3135 560+43/0/*#/0+--*-+**333V//10.-.20//--/+('+,)*+*--(''(*.0+)+,(&'&$)+,.'%')))()(&'&&&',.)''*)+//*+*(**(&'(+񀃁ŀ ~}~؀~~񁃀ʁԀ ýŻ¿¿π󂆊ͪÎ셂÷ɼؾνžǽȼȺ³Ʒ»þ̀̽态ý½ƽľ¾Ļǀ·۰胉͗ϭ낒儓񂇃þ̾¸δĿ̻ӿûǾÀĹѕ¿󁅈ĹĽвڂɼ۾žȺ𑓈øŮ䉷󆎌˸ƺҿԹ齫ǧҀ̱񆍋و郂įƽƶÿ͢ռɹ½Ͼþ² ²ߺ؀ȭվȾ¶ŲỨҲӻʸ쑩Էȫ還郤炉G񀆁VSTZ^ac^]\[]\^_];^accb_]]]^]^bb`^\\^][YWVXY\`\ZZ\^^`dff3fcbbba`^[YXUSTUTTTVYZ[\\ZZZ[7\^]\\[YWVRRUVVUTTQRRRSUTTUTTTNNNOONLJJHGIJIHJJJIIILMQRQRSX_cb]UY^`fe^Z\`^^ab`\^^aa^\^]]\]]]\[\^aa`_][_igZQPRRSSRPPQQSVWXYTRPPRSSTTRQPOOPOOONMOPSUXZ\^][Z[ZWTQQTSSTUTTTVUTTWY\``c34fcaaccbbcc222dcab1a`^\^^]_chjhhgddfh45lh_^aei4ge24455565ed4765S458:889632ddbb25569:85h_YZ]^aedcg9<<9f_Y[_ccedddccca`bb1222356643244333443344ccaac45+665456767999753e34khfeggfg4fde334897hbbcbabcdde3fe45L65432ddcddeccbab__^]_^]]`12442112245663`_`^]\^cf58<<::9;=?@>=>>>=<620022124678:=<967999::76798864357663231]^cZRQUY_diklcXZafkopleb`\[_`]ZYWW\^_a`]_^`a_^^^\][TEE2[CDKOVac_^bei7gb^YYZ/0\a_TMMPP`55443210\WZ]]cka[YXZRNXPDFJMOOLOQRXYSVWXWTKHRY[]VLGLNWZQHIPVZUZVRQKB=AFIJHKPNIHECEGGHKQSPPMLKOQMEBCDGJMUTWTLIG=?>===ACA?@A>89<;=?BE?;7788:9642332aVB?FNZd654562]\]\^P1,\NFECBA=:51;LR55HuhH@Nc\]RHgs^`o>DGB=gewlh=FIMZgpqttmmnRr=?;rwrpwAwmiebdcb`_abdb_]`cd`_adfghhjmimxrmtohinrnjmpmh`WY_c_VTW[_^_ceegfbbc^[]bbafnsvx|~~h[_sDEzy}~~}||}DGKLNPONMHGFwwwx{|}zqmmptxxwxtuunimstmfbbisxsnrtoib\\[YVWYZX[^\\^acemqssrqtwvuQ{xkfd``cb_][\[Z[\^_ccbeffdbacgpvwy|}~xonppqonpqu}|z{wwwsnllpz}FFC|xrle\]_fnt~{okdgkfb_a[Wfnljdcmutonnry}zrpmhdegghl]^`^YWYZ\_`]VUUY_^cfhihidfmkfeeijjqsmlnojebgojhhdbb][`fbZ_hjgmplda^]]ZZZcddf20O6;21FI]cmlhjorwvvsrqoolinuv}zvw|}~yv{{upotwvrtzHJLNNLKOLGNOQQJwrphe]RT`pwrqnib^[WXZX\`jqpjjouyp[k~tgeebWWYTPMT`fgcae689<:4164[_38nbf?N^n{|zuoif`[ZXVSQPONNMJHGHCEHKHxrr;<;mi7rnkXlIORLIFA>?@@AACFIJNQRUY]\YWTRQNLLKLOK>7557998;>@JLJNQJD>:75?_djoea]USVOELOMQNEHMLMNSTQPRROHDHUWFuQOEHLIKQOQVRMNSTNMLJFVVVSMKKINQLJHKOKKMPSVUYUNKLKJKL~r~KPJy}Aztp}|JJ{ttrja^_`lxvoiluNVYOGIJ}{ztlfdZHFI@>=BOTLPZZUTc^[_Z;]XRNKIFEFFCABEFFDEHIKMMMLIB~EKKJOXYYUTSNNRQGxtDIEECOeood_b`^\[^YZUW\`YRYceZTPQSY_`\WPLGDGIN_eVKSVNNQOMFLTJDDHNONOLKKJKGDCCz{vnlc^dmu~}]wHqf^tmo`OV[]acl|s`JX`_kd[RMJSV`clyj]]SWjonVOKSZfgfZLFLLA1P^ff;ApnouAn@FHFBFC?|LIYBHDGQ`\LTRKMVafjbagzqt@?@k`_zB|u~|uttgYPASXMNassq~D{rmlfaZSZYWeh^WSQROMHKPONWZVVlvm`Z\zte^Y\ZXXY[kmjhfmaJFWgjeefZX]gi[TY[Z_fc\g_WWUTRQSODHOU_ee^XVTWYOB@HTcgcijjhe`afoyxf^VKJ]fhWNMKIOLIHKDJX\xypng`SKc`Z^ivhjd\Zdaeqx}~rptwzxvuqoq;@ADLJDAueOZj~Idkmadejgc]T\h]\jm_`]XRWYer~}J}cTYgpljfOTtn^XVVSbZQSHqGSWPn|nWCDSUWcrdaelqtpfgldOEJOGBDMTNMMGJGDEA=DEGNHFHIIE=dek:888qlhj<@=9CJD=:7b_:=oWTZ3=Tb123258979=;88:=>?>@A?:86576`Z37:;A:4f\dd_[Z`43hg\58787565379864jghk7:;:6eeijiffa`b`_bb[VWZY[[WY_^XWVWZ^6`]Z[WSTTQSW_264^\]\\[WXVVTPSUWZgia[UUWXW[g6hec_]\YWVUW &%'*+.0--,-.,,-@./..-,--,,..,+*,,+))())*+,*)*+,--.//0/.-,***)('&$%'(((*,,+*)***+ ,--,+**))(''('%&'''()))'&&$$%#""#"#$#"B$$$&%%&'''(+.--++*'),,//*'),+*-0/,,+-.-++,-.-,,,.-,,-...,+++-12,''(<'&&'''))*+(&$%&'&'&%%%&%%&%&&%&&()*,--,,++*(&&&'''((''&''&&)+-.-,,.-,-.--,,,*+,,.034210.///31+*-/310;-+)+,+.+)+-./0./1.,)*-..0-,,-,--E,,,-/0421022//101/.010001/.../0000100A/..00110//.,---,+)*,,++*)(*-/ ()-)&'*,035430*+//02440.,+,.-+)***-..00-./.00.--,,*$")#'.0//13651.*'&%),(&'))1(&*./3:4/002,)/+$&)*,,p(+-.12-021.*&%()%%%#$)+01+$&+.0,/.-.+$ #&'(&&))'&%#$%&&(,+**)'')+(#!"#%'*/-/,$!"'/-+)+*())()*(()*))'')*+)&%&&(g'()**((***)))''(%##$# #" !#  #$&&&''*,++*)+--**)++,--000-,0/+'()(())'$&+,-,+,/00//.-,,++**+-,-,)'%%$&'(),(+'(+)()*)&%('((()(),/-)')*)+*('&'&&'()))*(),++*++,..,,,--..0.-,+*((())*++)'(*)**,-./,*+,-,./0023345434502771-.11/../001220/-.//100.,,-...-,+,+,-,++-.+*++)+3734;A@9348637:<9U631/-,++--,.012575;BB;7;>73/-.11022002330///.//,***+.120-/46/+,021/./11/./.122-%*2120/00101.++,+.0,)'('''+-+,+('('())*(&%%%'''(+00-+'()**)''())*.,...-,(+/./0/,+.0,*+..00.,,,.0/*,..//0///,+,+,-0010/12/.,./1-+,*+,..13/.00-.0/1223431/0432466630/,)(+0023589741,-/0150.11203,&067646654467666-%( "#" !" q+' !#&,0%%&%&"!H>99640-+& '13)E9( *604*%9>35=!&'$!7;D:8"((+3;@BFFA?>A"#!?@==D&C=<97888779::7424796679;8<>=@G@<@;89;?<9:<<:4/0474//03667:;:;;99:757:;99:9;7345322354787789:;?ADECABDBAFE=::7587544421357::975457=AADFGGHC==?ADB?@@CHJGFEEBBCB@=<>DGMQMK''LJGGJ%HIIFCCEGFDA92348>CMKA=;<@=96843=A?=86=DC?ACDGIFA@?<;=?@@D87:964568:;94301659<=<::7:A>:9:=<:>@>>@A><:=@<77641.,),++,"%'36>=:<>?ABBBA@??>=BEEJNOPMJDAACDFECFIEB??BED?@DHP+*+,,*QN,.+O)..1/*JA@?<:4.29@C?=<;6544651249<859>@A;17@@=6.+(%   %((%%'#%%%'/8ACEC@<83330.,,++*+++))'I$')*'F?72200//& 7F&*+'&%!!"#'))+04310/.,*)(% !"059>630,+-*%E*,+,*#%)*+*-.,,-.+'$%,-$;@*)!"%$%)(*-+()-.)(('F$.--,(''%(,)'$'+(&(*,--00*)*((++ND;B)+(G@CI$FEC?=FJCG((IC@@>:6234#&$#!(8;:3032212411,-13/*.560,*+,/220/)'%#$$(57-&-0('*)&"&-&"#$)+()('()(%#B" ?>A=99526;LKCETG0?'J=5/>=.)'+/62/%!(.0$=>@E%<$&''%(&#E-+/%(%(,43(.-((.28;556AGE77 !6/+9 >==5-(),$$/:77?#HB=<:21/*0/,682.,*+*($(,+*10-.8>:201,B>4.-0.,,.-68765:2" -48535,-067/+///363/81,.,/,%')-2430-,+.0*"!%,24132//19@DG@50-(%28;.*''&+)'((#(43DG;8540(6933:LG997/1978?EE?DC;8<@?=;9777 &%!!=5*2:D*E296-248530*/833>@662.*/28=FGBL)F6,/69655(*>7-+*+)5/*.'E='/0);D:/$$///6<4247:;968:3(#&(# "&*&&&#%"!! " "'#""##"1269523  % /.5'(+!$Q)(/)00-*(+2/(2113..122/1...--//+()++,+)*--)())+//,+,)&,(+,+,+,+)('('$')((/0-*()*-*,10.-+*+*('&'݀ŀ~}~߀ǁʁ þ·¹ɀ϶ΦǼ˷¸ʾǽžǹ¿ÿƾÿټƵ¿ʀĿļƾŀĿ¾Ľ߀԰么̶􄃅͉Ҷ֤ր¼´Ļ€½þ»¼þɯŻſŸʷ͵Ƚۚȿƹ䁕ý􌛠䍦삁Ÿſ򀉎´·һۂƿɛö˯ƺϷϧ፣ɫƿ˽ɲڽƾݿϺȵȽſ¢⽮ªѱ၍ջ¿Ƹ˶ŗȾʀ̝ϵ색{yWVSTVX^c_[[Z[^`bcdca`_aeaa_\]ZXY[[[\_cb^[ZYWWY[Z[ZYZ]`_bedde3d2ddda^[YWWXWVWY[ZYXXXZ\^_^]]\\]^`bb_]\ZXVWZYXZ\[YYWVWWTUVRQRPNLJIJJIIILKIIGFEFEEFJLPSTUVY__\^ab_YUW]kja`efha_`a][Y\]ZZYXZ\[\[[\[ZXSNNQQPPRTTROORUTUUTUWYWWYY[^\YXZ[WTSSRRTTQQRRQPORSUUVWUUVXWVTSRRQQRSXYZ[\\]]^_^^_abf4cb`ade2443dcb``aaa^]^_`baa`dijjgdddacb^]WQRVZ[Z[]`_be5653^Z_f3`34357::75323f4g`_g57874a\XXY\^_`bbacdc9_[\]]^_]^\]^]ZXXY[_cdaacdcg3ecdcce44eecd3b_bg69;:8557986567:96gcddccdfihdbcdbc3447:7ga`bbcehhfgfdcde3geccdcabaacffedcbbd22fedccaa^^`_^_dg43322b_]]a1ca]ZY]b245778;=>><99;>><::;<=<81/03455g33244237><:8789:8545565332`]]\ZVPONUSIHCEQ]bfecdb]\bfj9;;9lcYVVVWUSUVY`a_][X[YY\]\]^[[]^\E;NVUX^ed`YXXX\[]221g`WVTV_e`\`b`\[ZYY[`c68_WTZ^VTQMHKPNRLLSTSOJBLVTOLIIQY[^XKHORYXOJQTWSMJFFA=9=>@FRUOKLLIECHJQRTVTRNJLQRQLEBDFLNPSSVOICA;?98SQPPSSQNMJHIIILMMKJLLOQLFHKPRSONOMLLNOOPQRRNJIMUVQPQRTRLOKIJJPUSOOOKJLQTXNEFGLNNPPMLMRPQRTSUUQRZ]XUVTRLJKKQVTN@:FMQQPRVZZZ\[XXXUVJVSTWTRRPOMJGEFFLNPPNPNNQRONNJKNMKKLNKFHIILNPQMMQPMLNPORTQOMMLKJJLNMOOOQQRRSRPPPQPQVWXVWXVSTUSRRSRSSTRPQRQOQQSTUUVVVXXUSQRQTY]^]_```addc]]he]WVZYSQOORW\bd`[YXWVVUXWVWXXWWVTSSSTSQNMKKLMOPT`_X[hrphbada]_fjf_\[XSQPSVTSUVVTX_]Zdmh]_cb[WVWYYY[[ZZ\]]ZXY[[ZZWVSUY`c`]^\YVX_^]]_a][__^]][\_bh578664fhfcdb\ZYZWWgh]YVTWWTQNMJJHLPOMKJIIGJMNOKJGJLLJGGHSWQPLIIJKOSQLLKOSTUUYUQMOPJORQPMQVORVXXVWWUSQQQRRWWVXZ\[YZYYZWUX_`]\][[^`]XY\URQPRQSX\a``db\\]Z]\[]`dgghghhklib^^^XWXZ][_bih\\[YX\be`faYZ^`_bW@Lajiiged`aedfghj66678k589:;6=H=5@@>?A@<>63672ZOIIJS]h72136620`][VF&NIECCA?<83.7LQ45AmfE:DYYaK=\ha`_pCJCtimysuDJLPW[^]__\^^bgloononqyj\^_\[[[XRV^a_]ZY[^XZbchifkpqpp{{mssgiopqrttstlif_ceda[Y[ZVY\`ee`WX[[_cc_[]dVejptsstw{{}q^^hr~}xyy|}|~}CDHNPNKMKGEEmbkrx{z||yzvjdedcfmstsrpmj`XVTPLHINTXVVTW]dilqupgcgkotofbdd_^]^daa_ZY_bded^[\Z]`aedbglrrrpomilnljkfeimszz|}|z|}xz}~xusptdMXciifediopmlllijljrurh_cp}sb^dimomjklfefdeihcTUWWXZ[WOLRUVUNM\fjnljglwxhimd]UT\da^dlfda]^__a]^b][]^^Z\cd\\b^]gf_ZX\ad`XQM4D&4FiZOM_ca^dmopswuqstkhiluw~vlghpvxyxxxywxxumnqsxPIIHHPWYYURMHEDv{vnkknx}ywvvyrortx|{wmd[YTTX4::67;=>=;775YZkk4:Slwuuslec_Z[ZXWPLKMOQQNONHDEFHEBAAA?>=;:=>uoovJXXYUOMLE=AIIJKPTVVWXZ[[YTOMKHD?@DKPNIB718:::>>AHJ.4E9@??955@U^lh`]WQQRLDELMLNPLKMOLINRPMROFBELQH?rI\WOPSUPNUWRLLOSNKKKIDKYVVMEHKJLIDAFKHIIMQUSPTSNHBzDH~ypLZMD|ozEE|vuv||JKzzztke`\hvlabmzOVOAJE}zwpc^_\[VHCBCMRMN\]VQ`k^]`fO_PNLGECCDC}{BCCEEEJJIIKKIF{@HLHFVXWWRXXTTRJ?||CMJCLQXgvxkb^Z[\WWUVUZce^UTS]_XWSRX^c_XTPJIGFAEZ\PPTROQSMGOWLHIGHIJHFLTKHGC{z}xzuo_`wyxzHMzfJu~qpx|vmge_T`jkqvmRDUnmc`YPM`[YttFgnYDOVYqj`zcSSMR\[YFGM:0\/0a9>wtTnEwDMFxPKDKVOvHQKQimZJGBBQ_qm^\brrnl}}lr>@yyG@icsyte[KEPaW_fjopyBIpjjniaZZ\]^]WQJOVOUOKPPNLKHWw@tfi[qu`cd\WYVSffiei\kkYNL^ZVbggZU^dZRUTNZ`kojea\]WUUUO@EOMFRak[_ia[SXTFCNY[``\`cZLGN_qzsh^PFGR_eQZUNMLFMPICLSWkzud\]cQS_W\h{xnZIFRXTM\roq~qklheo>DEC;AIGIHECHH^GW{m[Nanmqeff[YbkbZ_aONSU^`Y_xxwFyp`agesc?Kfkb\VYZah^UJ;@M\XP_jG@PPMIX\^_fit}n`^`SC@GIEHMGFGLNEFMMIFGGIICDPTUK@7i589;:8g^Y_hj6DLE97lel=?FE?;9;:648;94431-+*,.--/00/0554:A=45883.--..-./..022.,.//..,+**,121010-++10/./11.11/..//124132/.,,+*470.-,--,*('%&%(**(&'''&'**(%$$&(('%%%,/,+*((('*-,'''*--.-/-,)*+'*..-+-/)+.0..//-,+**+,...-./...//1.,-21//.-./10./0-**(*)+/120/2202300.-.023666567751010-./01/1377000.-/463650/00/1,#)2645322015444566$!  !"!""2!]+)&''+-0'%$$!A=8752/.)$$02'@?(%139("58763=%)$=9>D@D),./24668867679<=<;;@@?>>=<8510.,*(+03331149ADF@989:8545:7541059:::73444557869<=<=@?<;==<<><9<>@FGFHKLHEBCEC?@CEHJFEFJIFHLKIFFFHECBCCC5&4:76=;;=<@??=?GI?59>95227:75:4.+)')(# ! .$(44207==>BDB?BC>=>?DEHLJF@<::@CEGHFEEFGFC=<>?BJU,SJFO+**+/2661-*(&'FAD@><;>DGHKJGDDCCEABDDFHPRMNMJGIPQSVQMKE?<3)$#"" !!&&.;==??;98523331,))+-0/,,*$$&((%#CC"!,-18%,-.,***$!$""$(+,-/03221-+*)'$ !$'*'"-4;:42.*+,($%**()+'&)+*')--+-,%##'*$ 7%0,((*-)%+,*'(*+(&&''$'1.-'"%'%&&#!%(&%&'*,+*..+'#>%(ID@9)3*#B;A&&HEA@BHGDH()G@BC@;841:D<54;BEK+.)@!)%DB@>:0..+,) ""!-.+)46+'%(%/(('$#""#"@>""!#""%%%&()'%DA#''#"+...),-,-,'!A@")'"&)-6>A:53111//,-,/562-,+12--,,.153.+)&&&% #11)*-*(*+(#(/(%&%&%%$#'-&&&#A@DFB?@><12?CMFD+-C1C*L>C:;@GB@:663-277;A;(#/==753/,61.>PF(:<1$*02?:5C4**$','##+@A-<'>$+'CI.*&+3.8'/)+;425<;;:BA78;=&"52DB9?>5/'#*3+.4665<#(I=99:63012220-)&).*-*'-,***&+=">67.?@021.,-+'36835/::-%&1/,598/+360),,)14::863/1/.//,!%*&#,47./431+.*$!).,.-*+($" #/:A<85*$$*2;,0.)((%(,*%*25=CB;87637!!$##$"!%&E0%2EI7,$2;9:3560-2;6169-,.044/3CBACC&KE>2352;2%581.+./3:3/*!#,60)4HM6#!-+'&120045;C7014,""%&"#&$#"%&"#&&#"""$$ '))% 44-+162!%!2-3'*)($ ~-+00,))+.100+.00/44301/-.---)')),+'*+.-+*)(+-,-,+))'))%*.1.,,-+(('(&%)*'*,,-,))**(),.///..-,++*ـҀ~}~~ˁҀ ;󂈋ҀιɺǼŽļ¿ź|ǿŸȰþǿĽ¼Ǹ¾܀󂃂ȿĹľɿǻꄒ׻ら無ʵ勔ǓⶼĽüڲſ¼Ľ½¾ɻ¿Ž¿퀈¿A„슡Ž¸Ϋ͘иȷùㄊϻº¿ҳĽ߾ö𑒞ǿ煐ɸ뀋Ʋ˽ǾÿżůĺþѮħہáľ⻤µ߬ù·Ýǹ놚悢򄇊YZXXWUWXX[^[[[Z^bdddcba^^dijgdb]YXXWXXX]_\\]\YXWVWVVTRVZ[\^_^^bbbdcbb`]\]\ZYXWYZXXYWVWY\\\]]\_fjikg^ZXWVVVWXZZXYXXWVURRRQSSSRQPPPQPMKJKMKKIGHIGFHHKNNNPRV[^]`aaa\XVYcqusmjnicef_ZUUXWVVUWYX[]XTQPOICBBCCEFIMNMJMRTXZ\_bc`]XUTUVWXYXTSTUUUWXYWTSSST +SPPQPRTTUTRTUWYZ[[[ZZY[^__^I__`cg2cbaa_]]^__`ac22hda`_aabekomkjhc`\ZZZVUTPOQQRSUZ^`bdd]XWY\b24678789974`[XZ]\_cb]]^aa__[Z^^\[Z[[\___bc___]\[YZ[ZXYZ]^`dee466432333445547767779<><8546787765ebefaba_aeheelnkgb`bcdffhha^]___abegfeedcd2Q3gfeccba```ab`_`abcccdcfhfgfcbcef4554421_\[\[\__[WUV[b345568;>??=;:;::987679963145443220b5993`[_4675431`bc_VQLLRTROOT_iaYWW\`ca`_^[YWX[^i679ocZTSX]ZXVVXWX]\[YWZUTYYYZXVUW]`bc]]acd`\[YZ[YY[]]_^\\b222a]Y[e4e`bff`[YWTUUWW_f^WPS[`]PFFIKJJIKLMHGLILPXYRNOQRRUUUONQSSRTRLLJHHIC@JTN>>EUSNOQOICEMVSIJMMLGGNURQRNKJKNLLORRLC=B?H<6HDGLNLLIIIGHMONLNQQPNMMKKLLOSSPNONKMLMOQQNOOPRTWWUTERMPPMBIUTTPOQPQQUVWRJIMQROLLNNOTTSTTTRSPNQVVTROOLJKKMOQM@7>JQSSVZ\\XX[JZZXSRTSQOOOLHGGFHLOLOOPNNNMJKMJIIGIKILLKJGEINSQNPOONLMOOORSRQPONLKMNPNONMPRSSSRQPRRRUWVUUXYURQRRSUUUTTTQRRQQSTTUXZYUTY\_YTSTTY]_aaa_`add_]]`_[WVWXVSPQTY`b]ZYXXYXVWXXY][WVVURQPQSVWSNLMORTZfi[Sdsrjjrnga\ad,eb_]ZURRSTSRRRSTV\_^^be[XYZ^]XTTW[YY\]]^`^WUWVUVX]b`ZWXYUQR[a^YYXXZ[^^^\WWZ]]d543475gkfhkcafdc`guoc[URTTURNMMMLMNLHFJKJHHLNMJIILONPOKIKIFILHGFJRYVMKMPRSVVUWTQOOLMMLNPUURSUXWWVTPNJMQWZYYZZZYWXYY[\`^]]_`^_a```]TOOPPIQXZailmjda[Z^aYWX\`fbbeh576hbZV`a\`hb`cjk]][Y\cklgc^ZZa`]`_bfiljjmkhc`d`dhihi5iik557799:pl=B@@?=>???@BDEF@:jk889:@B;;::;<=<;::6PGMLOS^e7743335412c`_1(BHHFEC?:52-:LK049HMC;J\^mRMa`dn[g=D@njptnyGHJMRW`^\^\^^YY][\_bglrg]]][\`b`YVXZ[][[ZY[\]^`eeejliggsqyrlz~|{}|wlgphbb`^_]_a^]^bedbcceeed_XLP`mqsspooqrsux~pdbfjlovzzzxwyz|~~zvvvttrtsprtx|FGGHICdKLey|yy|}{zvrz~vkkkhjjfglopniklgdebWSSW\VJCFOTY^^acdc`^]`fedaZU[bcb]XZ^]_^YTWZZ[^]XZ^^\_ff_bgihhgb`__^^`cgcdjpttv}|EEG~vtsppe`qrrokjgjrokfdcgjhfhjkd_irtib```]]__\Z`efa`d`ZYYWXY]^WSUXXY\cfknqollqtvshefhb^errf\[dhdc\Z\]baZZ^`ZSQQW]bb^[elnof`a_\\UPMIE<0\@SF:3@fmifmuomnnnrrnkggfox{yoiedktzyvtrpmpvxuqsux~~|{HMLLKQSQLIG}}zz|z}~~|~~}tfg788977:>>?EUagirqd^[WTSSQPTX[\UPTVMLPNMJEEIKIFEDCDEGIGEBACDHPV[`]ZWSQRHYB[FOQTSSSTVWSOLHECBA@8]5?AEILJ:]T1:98511BW^c]a`VOMNHHLOOP\ZQQTRKILOKLNIFCEJIEw{TZY\_[TMRURLHJKNMNOQOJOQORLJLMLMIFHOJEHKNOPNNPLGByxzs}ETUIDxE~{unmz|vGznidV\lh\\l{LItB|yxsnj_`MKXRC@FPPOR^lbX]piZRRC]UNNG{zGRNB{|}?ELMKLKHGJNLE{DEGFVYSXUY[WQOIDDGEAHMSZjx|seZSTXYUSPNRfpqj_TNVjbWSTXZ[YWUSOLNMCBR^XRSUSOKHKSRJILJIIE@DMXQEEDB|xpohmrkmLO~{wzqwyno{xsmuo_Tad`hhhbNKe`\\XSS^ZPpuceaWLZZTifOr}aPRUUPNKMEC;604/5GDtkmomdUV^YTWVQGBOSYUBFPVP@Bd{pc``Y]SXhpmfc`]ZWelnigd\WTW\WRVchf`\YOLQWajjhfgfjd]YUSTQNLJEBENWexvi_`[RTGIPOOPOV[ODFScgbf`TKFFOQPVSOQOIEIMGKNUcmY^lTWa^Y]`gvjYMMMGFQ`imoutokfl@GEFG@LMF?EKHE||fK`od^T\]i}cRORY^cdh]JLLB\hg]kmnu~xpoeknzsTNeeaba[Whd\PLEJPbc]VYv}eIL\WW\_ecb\dorpg]WNB<;:<@?8aZX`8CKGC>945:?Ahe\2>^1233456778999:;:A=G*)+,.175554530133346;?D=766558850-0012134457;;:=><;855544457667;=<:;;<<;972)-8>@BA@@@BDEFFHIGA:8;>>?CFFGECFHGIIJIFCDCBAABCBCDEHKMJJK'((''#1!"2ACAABDEYDBCB=BFGFFE@:;=:9<:8;=>=9;=95660--052)$&-035359;8877:??<94/368743454442/25434534883378569;86545568;97;?BABFJLOKFGFCFEDHGGGFFILLM'&LKJ'KC??A??:8@A@?=>=>B@<:88:<;:<=<86;AB=:8996788549<<98;:6985546631222358:<=A@@?CDDB>?><85:B@8349<:965559844674/--3798519?@@92/,('"'%3755;@<;>?@CC@?<<;BGGC=:98@@AFILIEDDF)-,,,00.*))QOMMJCDIGCdBJNMPQONMHGJLLMLLMMMNMJIIGEEBCFEDBC?<<4)* +247=<74211/.--/133/.21*,/-,)&&''%###"#!!(,031/.,,-%+ /$(*++,-.01.+(&$#!! + $%()!!!!/57255.)()%&*,,,52**--)&(*()*&$"#%%";=,0/020+&)+*(%&')(((*)'*,)+(&(''('$$)&#%&()*)),)&"@AHD>BI$-.&#C=E&IEC@;72..23.,+)*5==82+&-950-./01/-,,)()*"!,3.++-+)'$%,,'%'%%&#")0,#$$#EGFE?B?;95;?:%2<&%*&#D*.)&)/-11((2944)&% -:75+/<99;;@<38"&!!"=;35>CD?61($$+-5=7675%#;78:;6..31..+)#!+,0."%,0-"!3@9435/2-,6;71/...,267566/,+.1.+/775310+*-/47877789631/./+)(&# #**2>=4/1/*+#$%"  "(28354-(&')*+-+(*,(%&+(+-19GL>/-9./772555>:0()'%).5<=;=<9747"$ !!%'"!%$#CEJ3#3<30*/08GF4*)+/24484((( 1872==;>AFF@>=477@>)&66231e.+552,)$'-873.1DD2#)4/-01311-2:<:50.)# &+" !&" &('%$"!!!"$)(&! 1-*/!%"!//'$\140++--/-,,01026320./.,,,)((*+),++---,))+-0.,*+('))())+-1/+ ),+('%&)()*+,-./,+,+)(,-+/0.--,+~}~~сށǀπ ¾ÿÿfɵûоżÿϿſր½ƾþ܀ˀòрĶㄑг凍ӵހ߿ℎĀº½ýξ¾½վùǴοǴĿкø»쀙úղ⁇IJ܀샃Ȼƿ»Ý񯢘򍞕􀃊ꋚӻ¯ìǼ눋ͿƯз狓ļʻ򈉁ñűɷ׾¾¯ƳúۿõÿŶ³̬􌒯ݶ־ɲ­ƵƵƮĽ܀Ͱ󅈎^߀ZZZXVY[]^\Z\[[]bdcbb``_befhheb`_^ZYYXXZZZ]][ZYVUWUSSRUWXZZZXX[___`][]_``^^_[YXWUUTUWWWXYYXXZZ[`hgefc`][WUUTTUUVUUTWXWTRRRPQQQRRQTUXWVUUSQOMKJKKJJKIGFGGJJKT]`aabcb`^[[gwq_VUZ]a_YWUQNMLMMMPPRUQMKJJID>:;;=?ACFIEHU]^^`dhhb]XTSSUTSUWUTTVW[]]^\YYXWVUUTRQQQRRSSSTUWXYZ\]]\YZ\]][\`bb`_a125fbab`[\]\\[[^_`adfggfecaf7;?CC{rkfba`^^]YWUVVURQQQSVUTSUWW]d7:88789:::;:h^[\[YWSSX]bdaa`_ZWXXYZWYZY`Ledgecc`]__^^][Z]`cg57778998769868:<;;9799:;=BEC=854565gebb_`a_`_^^_becfd`fjd_I\Z[\_``bfgef34gfdce3444hgfeffcca```cgfcdb__cddccdf33477543aa``^\\\[XUV\bc2.369<<::8778985321247778854543368537734_VSSUTQTVTQMMONOQTZ`gp<>sd\YXZ[]\XTSOOQRXak7cUOQUUWY[^[[[UUXXZ\\[XY]ZVUUQMV]bcb0//122_][ZXTY]]^[WSV^1332`a5776g35d_^a_VTOPRYb]XPP[a^RLPNH"FHLKTUORTTTY]XSUSOJIGIGBBFFEDE<:GMJRVK>AGMOOPUYRJIIKMGEHLMPKHKMKJJJNKMQQRPLLKHGBHJ7=?<>>DECFIIIJMMIKNPRRPOONNJJLOPPMMRMIKOOMJNORXYVYXURTUQNNPTTPR]^VRNQQWXVSQRSQKMSQLJLMQVURSTROQQQRSTSOHMMNOKIHIIHC?FMQUY[YYW[]\\]\YXVUUTRNNPNIJLJJMPMMNLLJJMLKKHGHIILMJLNNKHGKQRPRQQNLJKMOPRSTVVSOMNPTQOOMMPQSSQRSTSPOOQRTRPOU[ZWSQQSUUS1QRQPRSUX[[YXZ]bc_[WUW[^__bcglmoica^]]ZWWWXVSSTXZXWtYYWWZ[[_aZXWVUSSTROQSRPQSSVW`kdV^v|rknrni^^adgea]YUSQSQQQRRRV[`cc``ZRSVUWZVUV[^\\ab_[YZXUTRRVXUW\__[URPRTVWYWYZ\\]__`YUYZZ`c344764hjljhnihia``\XUUUVVUQPPOLKHIKJLNNMJHIKLJJJMOPROKLOKFFKEFDGKNMLQSSURZ^\[TRPNNJHLSUTOPPQTVYXVVYZTNMPSSSTUXZZXXWWY[ZYZ!\\]^ZY]^`dbXSONKEKRX`i898h`[Z^c_\XNZ\`h9;9mbZac_]aa_`ab^]]\_djlgid`\]^_`_chh68lkl7ligdhdcefihgg677678887;><;>?>>>?@??EHE>6gk688=D@:;=>?<<;992D@INTYa[6:64443011a_^@9AGGGEB>:541;JJ/30/4|ENhbhOIS]amhh<>lcjpmXkCEIPQW``_cdda^]`aabisqvnc_`]\`eb]YYWT_badd_ZZZX\^]\_`aafnu}ru}{zxqehighfgc_adedaaedehiijhgb\^bekptvoddkmnnns{yrlgeeccnvvtkcdgosv|ztuusqmmkffjklnorsrxDrnz~}wuy|{~|{uptwxz{sfhqunrxrjklligiifa\[YZXUWWWZ\^gng`ab\XXWX\][WRQS\a`_``][]_^XPMORSXab\[\X\bfcbeedbc`^USY^achkkoqqprzvxHKJLPNIHKJIIH~|z|~zxvsko~vtrolfa`dfc`]]dlni^Z[__VQU^`^dh^ZZ\`[RTV^aehdddjpmffr}xuleigpyyibchgb^`fjihdbbbaab`_^\^afqqjifa]jsnid`XMISSOPHBB5c@SPHFUktvwzynf`cid^_\\]cqqib_cjppnnnlihjnqlllrx}~zNO~|}|xy}{~AAA>@BDFGIJIIIHJLOOVaiid^YUQPOMGyjJNRPOPPOOLJJHFC@?>:\KX/3@QceWOOKALUJ>BC>5457542.0?R[VTifUNONLMLJGXi_VVQJELOIHLOGC~AKJE=JTUW]\SGIQPOIFIKMLMMIHKPLJOOMNRSOGDJKGFFKMLMLMJC|{to}IHGJHGEBFEAuilwvr}DFtfb\O]`^ah|yFItvytunfkh^VHRXNLEL`TSU^rkZToi]Rg]UJRPAvIYWHw|AEISVQKJHBDPOGy~DFJFHXbdYQX[SNJFD@vnDLPVl~sfYKIUWW]ZKFR\ht}ti\SVrjYUVXVWWXYVPOSNCDT`ZTRURMLJLMOMJKLKHEECL[XJDDGD~D|vvsjacoQRtpnqqyuu~vp{yse_b_b`ZS\ZZZX[OR[XjvuskkcTWVZ\_]c{ogbMOQQQSKHJAPNaHARcCHKLH>IM@?{INKAJk[MNNQUOBBOLPWXWXc`clopljg|CBFqlgr}Jvqm`O@Q_kog`iq{GIFvsmhbXZ\TVY]ZSMV\ZN?CITWTS]ebWXLNSIMVoxzp]XhnT_jc`\TQNSaYOZipeZR?DT]imhZ[fhje`[XWUQIHGCEYggdgfmm\_[@GIIMMOKGFMX`bab]YTONIGPQUQSNJLPJGEFMlxxd]a``Z]SZUhw{yx^AtIHRafiloptEIJJEABRQFDRPC}uqz}legdTM_b\bpgPCEMSZcl]ICRO\fkZ^fmmmlqzwxmsurl`V_fabXW`bVJHSSXQSZ_cZQhqfTXO[TZ`ckd[_lqjffkaQD<@CD?=<8BDBDFNOHFGHHA=AOMJA?@@<87BJG9a`die=>EDA<96:A==47B^2246-5259:99:><9:??>=>=:888767:<;:978::lbbcdfffe353e13658:4eeeh557:=;77;9qnedfgnnfa_\WXXWY]]\^add_\\[\_\YZXSSVWWY^afbYYY\\\^^YURUVWYXZ^acccihaZX_Y[aa]]`\++*))+,-.-+***+.//00//../2.-,,*))((**+,.-+*)()(''()***++)(*--,+*()+,,+,-+*)(')))*+ ,,/21/0//-+( ')('&&&)**(&'&'((*+*)))''%###%##$$"!""##"%,-++/88/)(+-.-*)(&##$%&&'g&%#"##" !#"#+.-..022/+*)*))(&&(((''')+++)(*)))(''&%$%%%&%&'()*)()++)'')**()+,.,+,-*+,,***+***+',-.../..1 #$JHE?952-,++*))*(()*)()()*) ')++)*+,,*&%'+./.-..+)*+()+,---/-+--+,+))+,-.>/0..---,-..-.02220-02/--,,))*,-++,.000/..-.(10//00/.-,.-/20///-,-..-...,---+*('(,-,*'(()'$&'&('%#"$'&&''),045-*)(*-..+(('&''*/61)&'**+++-++*&%(*,-.-+,.-+++)&+/0/,&%$%%$*-,//,('(()21/..-+*()+-2.+'&-21+(,,&%')+34+-.--130,-,*%" !#" ! $,)%$&++#!%)**+-1,&'((+&$&))+)''('&&%''(**+*(''#"#$!$"" $%"$%$&&&'&'()*+*())(&%(***''+(&')*'%()*./-/0.++*$  !! !'&"!! ##!! !#$$(.-*)*+.20---+*+***)**' $""$#"#$%%"!%)+/0110/23112320///.+)(*%)&'((()+)))''&'('((&$&&&)*()**'&%'*+*+1)'')*+,,-..+)*+,.+**))**+*)*+***)()*+***-//.+)*+,+o,+**))+,./10/./2452/.-.023344577976643310110/.../0.-...00/./11450./.---.,+,-,,-/.028@;27JPGACEA=6688:9630-+*,++-.1578642,,,-./-+,-/..131/./.,,+*+,)*/00.+**,--,-,,.../001100-+-./0134543633610/,+*---,+***)&'&'(())('%$%''%&&()*,)&')(%$($1#"$'''(,-./.1432-+++*''*./-))*+--/.++-.*'(*,-+++-.[--.-,-..//--/0142-*(('$(+.2541/.120/...--./0361,031023222432212479776410//..0455446832245435  $&#01! "&*,/3-&') 398641-*(' %,+H%-:8:-)-57=;;"#:6;@ECF@976336751./-*255885357646787;=AHE?@GKEDEFFA9;:99899689:977999<=>?<;85789;>BD=6:@AAA@AEEA><;<:8=DDC>88;@BBDDBCCA@>>>99<>>@BDEDHLLIJ%E>B>>EB<;;99:<;72..010---04317<957952236:;851/0576478524430,+.00166345258:757998975/-03568<=@A??@FKBCK))(),+'&LMJHIM)'MLMMJFEEFDDECB@>9;GHDCB@<9659;98537?CA84367103776<=8668:612478::667=A>98=FIFFE?:;;@FMNF;8:<:744;><;::<:865556456:A>;<;86;8;>:675447??:648>@=;<>>;;;==;==@BDMMG@@DHN++OKJHGGGLMKKNJKLMPPOOTSOMNNKLILRPLJJJKIIKHFHJHJMIFHHDDED" %""$+.3863341/,+,,+,,+-00///11,'%'(%#B!""#$%&%$"#$%%%+277520.,++*'C;E&)+++,,--+)(&#!&'(24+%$"!&!-40,;9-')*'((&%1>6./+(%)+&%(*#!=&%"&---10*"$*('%#%&('''%%(,)')*()++)$!$%$#"'((())(#DDBC>9C('C%(&%$#%&$GF?8;AA>E%%HKI>740)13247FDCJ')H=?DA=>:585,("')$##/%"#)9:-&<7+"/0*$+) <)3/%B;?!"$+-*''&"$,*&F?B$$'%'056.(.0,)&$%#@8#)*,9C=60(&.0031'$)6?>:66>CA?C@>E@F>5474555662-30/015/.1,9CA>:<5*1147606F=40#%#""# # % 4?'((*'(*##A)-+$)?4+,+-2-""))+/104<66<>>973?"!$E9:7;@'G<<;3) (0694077<$%"::774.14---//,(.22* "&./+(042-.)+/%',9B<<7.+49)-6420,+*.4.'.8<41/#%/39;8/19:JH:7410/-+'('#!.5313376-2.!"*/3451.-+*'$(*...)'+/+)(&)@EIB70210.3/4-9???B5";%%.57:9<;9;;;81+3613..25/''/.0+.357-*8>5*./+14582-/7965593*"!#%! ! %'" "#%$$\!$"./35/"!#2.+-./-++0Z671222530./,)**)+,+*,-..+***,/.+*)&&)*((*,0.***+***+(&%&')*((*+---22/+*-*+.-++,+~}~ˁ€Ѐ ÿÿ¿ր򂅃ϯۀ;ŸĻĽ8Ⱥɿ€ƺúȱ»ýûŀ¶ûʸľúŽþƵɼ϶펑˱腍֏풠½þ¿ɺμöɵ½ļȿû궭¾󆗗ľ̀Ҹҿź¾Ūº厄ᐩļȱрӼö㳪ɩĈނʵ˼ȼȷɾͳƀɶħůҹʼʢ½ۿճļʹ佽űðʳ􄆏@y^^\]][Z\^]]^^]ZZ]^^_aa_afeddcb``^\[\]^_aa`__\[]]][WSQSVY[YXWVVX\]^]\\]`bb`^\\\ZWTQRUTSUVWVUWWWYZXYZbg_ZYZZXUUUTVYZZWVSPQRQOOONORSQRSTTPMKKMPLJGDDIHFHR[[XZ]^__\Z^hi\QORSUURPOOOPSSTSQPPPRRQQRQLHDB@>=?ADGGGMQRUVWY[[\Z\]Z[[XWUTUWXZ][Z_a_[YVTRRQ*RSTWYWWXYZZ[\]]]^```acdcbccd33c^]]_`abcdcd2345565568=ACGJHE?:764ecccdgighf`]\^``][][]]Z]_dd1c32`cdba_]]]^^]ZWTTX]^[YWUV[\YXYXYZWZa344f`\[ZZ^`__`38:99777411c133358997766679 ;<=>;745544gde!455ecdddefdbaabcbbcbbacedce5566434543566544gfhifdbccbbca]]]^_^^`d2344222baa][Z]]]\[_b233211236655667::952249>AD>964344322578::4_UOMNOONMLNQQONNSXXX`4667;CIBqhWIHMVXTPPRNOOQUWXUROOSY][XYZ]^ZSUUSW^b^]]\]_b`YX^_ac33221/././11120_a_]_a012220/00`adfbaa`]_`]YXX_b`]ZZad`[YYPFKMQ[hc[ZQLLOTWUSPKGFBCDFHHFDB89>LVUJGOOIIJINWQRW\\QKRPOONOMLMNKGHILRRKLLKMNNLIIJGHFF=.64]^6?A?EDDGHJIILMOPQQPQQLHIKKNOLKPPOLIKJJOPRUTRRSROQTRQRTWZZY[[WURUTUWVTRQRVOINOMMMNQUTTXUPOMLNOPROJELQTWRHGHLNJHGBCLRUUUW\]ZZ\\ZVUUVVRSRSRQOOPNPROKIJJKMONONKHKKLOQOOQPLKHHJPONPRPNJFILMPQSWYTIHMQSRQOLKNPSURRTTPPPOQTUROPRUVXWSRQSTUTQSTRQRQQTVUWXZ\Z\^ce`\XVVY\`ehkoDJPZdn987kd_][WY]_\XY\]\`j8996degd___\Z[][\dfgdcca^^]^bdh6ijligedfjhg5hcefghghijp656678::98;?@A?==?@BB>@HGAA?;:9;U\YWenk_\iyp^vLROWW[_`acbddbb`acbjxyuhda`][Y[[Y[[YV[`__``^\\[ZY\[Z_cgmnmqskimy~{zxwyplrnmnjd`bddcba``cdegjiefheabglrme`jomlkikqrqojgglnnnlmng`dnrokiloptxvtmeaceimljimqrpqsvyx{~~z{}yxyzz|}vjhfjldfmonsqmmnmkouvupi`XWX]`_bglkc_YVWUTTVXVWWWZ]\YY[]]\[XWXPKQWVVXXWVST]eea`dfdbaacdfec``_dmpnmv}HIKNQSQPMJJJLNPMKJIF|zvrf`hopprvrnkkjd_Y^mvsh^WTSUTRSVWYYWSPPTY[USW]^^aecdmrsuz~|~|xqjhmsoikmniirtonmorlfdacgpsj\\`cbaagjc]\aglnlgb^VP=,9ISVSB:66IIMQZs|ulhfa]XTT\\\agjlfcchpvqosqkoqplkkqy{vvHIJI~~y|~|}~{{|z?BEFHHF>cTMNYb3<==?BFJT\ehea^]ZXWURPPPSSQSRRRSQNLKIF{w|}urx{CFIMQQPOKKPUVY`ed`\WSRRSTTQNLLPONLIKKKIGFECA@@@>9bIL112@gt`UTUQF@6\:;:7./2520.Z2APQIVh_VVYRKLKFGSXVWRJFIMKEIWVJEAKQJDDQSKOSRLDJLKNHJQQPMMLJLOOKKRQQSRNGAEPTNDIOMLLKKFDurvIKDAILGFECEFD~{{rsFzna`iecotqu{w{Exlu|snikrrfb`a^hfRVZWZPQtvC:hb\iH]QQYNDJSTIC|DGEEMLGGHDDNUNGyu~DB~G\nmgX_bWJFA??t>LQT]nti_WLPRRT]aWO`nkmin^NRisc[ZXXYX[`_YURLFFT`XTPRPRONONPQMKIIDKNGISRLEGLIF~wxypc_lunpj]asprw|znlssrkdfa\WXc]RXYSXWacblfjh`ec\S_[gkieqv{{]MOLIX^L9IIGLJvJF>HS]VOLEEDCTMRQEKWUWY[[cjj`ct{JmdfprEMvdjfWMUW]ed[a}{zGPvsjd^ZYZ_cc[TW\WJHNSSW_`S[jbKMMNLMZ`vwmswldge[^bdip\QJEaaMR^gfWUORTRW_i\R^mLrhc^[RW_TOD>S]]aa_[U_`dbMLKPPPKKMQTY]cba_\XXZVPS\_`NBJNJMEHN\kxxwwxg[XVVQQpxaRG@>GKQ^mvsu{EQOKE=DPNJCNL{wwsgnCs^JO^iic]XQSUHBKIWh^LIENY_Q_igt~\Xl~lkqqrixbdmmm`VeXT[MSUYVHSTXWSTS]]X__^\KPW]euyka^ghg\OLIFA<:9<@EEBIJHCCGIDCAHKFA?:<=ADHJIC=:omb668;=>9539;<9:E^11456885005;;99;97688:9777878:==;;879866ihhhihe563ee33ff44585ffdhh357:<868::m`bhio:mdb_YY\ZYXXXYX`gfb_][[^][[WRRSUY`def`[YXZZ[^^WRQRYZWWW[_`aehfdb ca[Z\[Z[\?-,*,.-,,---,,+*+,---./..0/...-,-,**++,-//.--+*++,*('&')+,+*)(()+*)*+,,,+**++*)'%&&&()#*+***)**/2.*))**)(''&(*+*)('&&&''&'& ((&%'(((&%%&$#" "&+-**+-12-'&('&%%%&(('%%$%&&%%%#!  !"#"%'(***,,,--.,++,*):(()))+))+--,*(('&%%%&&'((*))'&&'())()**++,--,,,++-+*+,,+,!%(&#/-,-,-/010-,+-/.-,-,..,,+-,+)+,+)()+,,,-+)(()++*)((),,*+,+*+)()-+,-+*--+,-, +/...---./0 /.-,-/.-,-.00111/.00../0//0.,++,-,+,.?-,+('(++,+)+,(%##%&&&%C$$$%(++*. &!40*##%*+)&%'&%%'()*)(&')+..+**,-*&&((*.1--,-./11..1)*++,**-231210./1/.-,100..023/-,-)$'),2:930*')+/0.+*(&$"#%&&%%$# ")00(%)(%'(&)/**021+'-,+++,)())(&%&(,.)**(((''&''$%#"11"""!"#$&&&''(),*+'$%&')*('**+(%'&&()+,,+,-,)**(%###$$#$#"#!"#"! $#"'''(*+-1//30++('(((*("!"$%!!$'(%%%#$)-//.03300131.../.--,,+,*)*+,,+)&''()*)**(%''()+**,+('%&'*)()+,*(%'))**+.0,&&+-,+*L)'')),-**+*))***,,)(**+-.,+**+,-,+,-+++)),--./010024521.--/037889 !996441/0M//0/-,-.,.330013464/.../10-)(*,.033/.396235F/1-/.15899776565676>EGEDCCD=>@=<=:769::9876788:<=;9:;:68:=@?96=A@?>=>ACgB@=98=?>>==>:69?A@=;<>?ACB?<8679;>=;9>AB@?@ABABEIHFGECAACDCA?@@AC@:;9;>:9>?=?><==<;=ACC>:4/./23479<=8520145333124331344321/0,)-1/.0111/.488436997778:;:75535<=<7316CIB:411120/1222320/.1552259756866=?=>EJFD@==>?@=;:99<:851.06327<<=857;?B>>A@?BB?==<@FNKFCA@BILLPNONJJJHHIA@;:=?!"$'***)&&*,-144322/--,-..,*()+*)(')))(&&$" , 2=1*))'!'!,,'-:4--/+'()&&.20/-(&'*($&/.%! %($!"+,')+*'"%&%'#&,+)(''&()*'&++*,+($!"),(!&)(&&''%$HF<:>H'($#()%$%$%&%JHCBCH==E&JGEB;31863<@=@DCEGI&?6;D@:977;:2/...53')*((!";= :2*2%0)*.("&,.'%D@#$"#('$&'$$+0)%D?>B$#?$4?=7+13,%$!"#> (+,0@=639GMJ?;>;36C?@KACND=:<>A<77631063+/1.2/666;5863762-637753<>AC-%&#'+"#  !,0%'(()((&%!?+(!$*4/+*&&$#/)-*"'00133269921:E@A'G956<=&*>5:8/&+,043,/@=<$*B;:664211453/+.30)%&))+12*.61$'')**.1<<48=6497,.12480+L')1770.*-/,05<1+3:J+<861.*.3-+% -100/+(&./33$$#$#" "%(-/34333.-/.)-135+"D(,*,&+.1;ECB@B5-.-/+(;ELM?1,'""&)+1:>;=C%*(&!((% ((;;=<48C#90%(3863/.*,-&"(&/90%%#+25+4;8?F@,.AEDA<9877669::9555689jffdeeb`^\ZYZ\][[YWVZ_ba_`bdggb^ZWWUSQTXY[]\]\Y[_b374b\Y[ZY^^]d6677544554221122466435678876778:7656753ed2224887668%9765433fdcde3fdbehhg464566455567645554fegggfdbb^[Z\`aaac232101`_`^^^b5653e37:8643335642322:@=;865468::7hedfb]_bchffcUKFFKNSTVTSVWVWY[\_bc3764347?>?EGJJKLKKKMOQPOOPPKGHLNMMLJOQSONONMOPRTTSTSSRQTXXYY[\YSOMTYURUSPNMTULJRPMONNQOPVTONJILKNPMHHNUVSUMGILOMLF@@DNQPNORXXYZ[\XRPRUWYWRRSSNMQRROLJKNPPQQQPMLMNOONOONMLJHHJNMOQSROKGIMPONPRSRJEJNQSTQNMOQUWQOPPOPRQOOQQORSTVY[VSPNPSRPPSTSSSUXZZXXZ\[\_bc_[XXZ]bflno8;@C=id]Z[VQRUVX[]]ZXXZYW^dec`^]]`_\YYZ\ZWTS"QMMPTXWTV[YROR\goqrprxkcbgfjtk_\XTSRSRQSVWUSRPQSTSRQSTUVY\\\_cc_][WTWX\dc\SV^W\fWIQUVYYQNPSTUXZ[ZZ\]]^^_d5642h79::9od[X\]`b_^^ZVRRUUVVWRKJCBMQNQWXRNKLOPQNIKLLMJJJHKKIDIKJNMKLQUY][Z``a[OINUUTRSTSOLJKOTWYYTSQTVVTSTW\YXZZYYUT[ed\ZZYTOSYTSUUQLE;AGMV_km556hb``]Y[_]\\[^_d56667llljd^[]\ZZY\`]aiihgabc]^]^aeihieegeeddeeefjgiljihjga_ikkkij69:77@CFD@BDABGD=;<>BBA<;;;7784N>CHPRP\l;<914X1634421aKNCKJHEA><;>>8MU.2;VhpFQG^eZMAOUP_Nevpbd~xFNIINLQ^aa`XY]``flpsxwfa_\]`_\\^`_]\\\^^]ab_^`b\[`__afrwu|phacotuvtqlhonkmpkdb_^defghikokifca`fkorsttsokheefhklhcjrqmklleZZbjosqmlighkmmoos|yp__jkiedgkmnnqqpvytwzzzvw}|vojrtjif\\bfjruttrrvx}~skdcefitteaa`_^[UVVRQPPSWSRVSRSSY]_^]``_WRTWZ[]\Z`ge_\]cfeb`bfkrrnoiagmmswwpr~GJLLPLKNPNLMIIG~z~~ysnmngags{{tsj_\_ltn^SNQX]\\WRSW[YVRNJKPQS\`d^[^dfiu{{zwtmkjns~wknnqvyz|}|{xqjhf_UT_jomnjdagli^[YZbijotyyzqaL7P0>INDRfDHIQ^tza`gec_[Z_dlnr}vsegqyz{rot{|ts|FJLNMM~~x}G~~zzuy}zsvwpkieadegjiq<<@@?>?>@BGE737;>AGA6?ACDFBKKB;>BHQKFEFIFBBEHGGEC>;9<;<8:=@><;758?AAI]026974038<;987897878799753579=?:8;:7886kik6ihfc563fe5765488986kgg4hg45885e5:jZ]fgiope__^^b`[ZZYWUYd4fa]]\ZY\_\WTQQS[bcff]XYXYYZ^]XURUXUWWXZ]__abbchea\]^^]\,-,+,--,-,***,-,,,+++,,--,--..,+---.120-,,-,4)''(+.-+(()))*+,---+,+++,,--,*'&&'(((''())*+*)*,,,+)*5)()*+*))((''&&*(%%&%%$#$$$&(('''&'(**'&&%#!! "#"!"$#&)*('&(*))(('()()***,*'%%'('())%$#"!""##"$&&(('*---,,,*),,*(('&'*)(''((%$&()(((''('%%&''()()'())*+,.,*,.i #"2/.-./.++)())*)())(()+,,,-/011/.,*)('%%'()*+++)*-,+)*+)*,++/  /.0/.../--.///101721230..+**,00/..,-,*)*+-k//00-((+,.-,*%"!!$&()*)(+*)*,,,-/0./3/)$%)(&%'))&'(&%%&%%(*,,,++,-.+))('(*,+,--./..001013')*++))+*,,**(,///,01/-+-,,+()()&)/0+$"(..))**+,*+)'%#&'('(-,.,00,('+,*&&,+,0+-.0320+,-*+.))*,//.*(''&'&%%#%((&''*!"2#$&%$%&())(())%"#&''(('+++))*,-d,,+)()'&%&'%#! #'$!#!"" %$$')*-,,0/,*'&(&()'"#$#%" #%((&#!!%+--++.100012/+)+-/0.+,--))+,++*)()*+*(''(**)))&%%(*)*---+)&')*((*+,-(%)*++,*('(+.-*))(((*((())(*+,-..,*)()++*+-.-,,./10/.01001341/./0247999 "653241--0112320-.11/377541332320...//-,,+*),.110032.,06>DEEDCGA9:>>=C<21.-,+H,..-**)*+,,+)*++,.00/1330//-,-.021/,-0+.60',.-/.)(*+,,-..,..//0013372--/013100.+**,+-..*''$!)+()-.*'&'))*)&'(''%&'&&'&$$%&''')*))-015435652+&(,-.-..+('''),,..+*)*-.,,-03/---,-+*.34.,,,*'+.,+,-*'#!%)-27631120-021100112577640/11/00122355341242310133443344433344355576456510556644!" !$#!!" $" $!$))&.6#&!)9:7520/-,0-$//!6@A+0'8?9,&152/?HD9<;:978:>@ACBBB?<;7<=?>9;@?>=<<9227<>BB?>:889:;=>AIJDB?54;;:879<=?@@?>@A>@A)CGHHFA;8=>9;:4489;@CA@ABEFEGD>;778:?DC8554/00.041/0/-..35653434/-/1343322214985437997679<@A==:58>>AAA?@FKLNN()**,**..,+*(('KIHFGJIHFDFGGGIGFC?>A@826>FGBB=648?B>61--24330-.1442/+(+1008;:322336?DFJOMIFEC@B@@CKGAAAEHHDFHGD?<;<:4-.5;>>>;759=92.+.478<@B?>7,$("*!,8GROMD58<;96336;@?AJKB>7:48?:9>?@?=BDFILB=BE<59:;<;43258;3*&"&*%*:1)69)*?***+&"BB$)%IB70.--,*/5630-)'%(0-/,**-)),*))(&$$#((%$'+*%I*&GH@BHA=:@IC;7:;?>=@?>AAPJ<39KME@8740,+87//*'882618;:69933-375+& 2B;. ($'*"*(,%,@%-+)%))'B#("#>%53)+(&?A)$)(-2+-2*-94..64567=>877973.+(-5D6,+*1-%.2-+,3:7//-),6245=H>5230#+A<5+$*+,/*,("!&,22&%"%%&+04-+-1:?743..:5.+!??I/-''20019?DO1R7123$.7;?@931+*-($&.7;>>;!+''#$(##'(":;>829>$G7+),2682)%)31)& ,1/,)%"&(-828K1N.-016;979>?99<::..4.,56,)./*(('"(-(,11,$&,47.+4552,/1-($$  !!"!&% "(&$!!$ !$" "t0/0.-,+/.1/./.*1)-22255/-/.-/-++,,*()/-+*+++*,-+)(&&&),,-/+(((*)*++)'%')'('''*+,-.-.0/-+,.-,*~}~߁̀ ŹDſɽ􂆊􁅆ɺ͹ȺĺӿúƽΈþ΀յ;ǿĺFž¿ӄ_¾üľɅˀſźĺ¾þȼ½ɻ횛򂋏Ѣŵ򄌒럧Ϭ¼ù¼πƽ¶ɿҀƾ¼¸ǧоϽՀǿ뀉¥lj〆̵􇔕쁊ĽĹí˶Ժεȫîþľӳ˝Ƞķ×鄇ڻƶŹǼĺҭĻư±÷ǽѮӦ􋚢ŵɹ͹̣ħɹ·ø¨ȷ뇎V^__^\\\Z[^\ZYY\^_^\[\]_aabeda_`a``\\^cb^_cee_ZZ[\_^[[YXYZZ[_cb`_]\]^]]^`^[ZYYYXUTSVWVVWYYZZ[]\[YWWWXWVUSTTVYVUVUWWQOONKKKJKLMOQOLKJKOSX\ZWUSRTURKBABC?:8:=@CEKJNNMJOSSWYZ[]^\ZYXY]\ZYZ[YUV[\ZXVQMKKJKJLKLLIIMOMOSVURRONSYXVWWUTSQPONRQPQRSTSQRVXWUTSSTUVUUVXXY\^][YWVXXZZ\`eebcdceh679;<<>==<;<;;<=>>;:;=<:;>==;99658;;98:<:878:98:;9lgdbbacbZUUVURRUYbkkic^bdh89:qnic^XVWSWWXXWV[_^^___ehaZZXX\^^_``^ZZ`468864555447866764465335446889644665553e454457756875434335666556676665554 542ccde3443fefhgfee33ebceefg42a_]^_a256664336764456433349=;:;:93\\/23^UUXWVX[YUQOMKLLKRZYVUVWXTRVZWTUWWXYUVZ]YTPLV]^ZWVWTQORURNNNMOQQPRX\^_\XY\YY\__ZRRTW\^^__^ZW[\\[\__][\^[Z[[]^\[..0220abb0//020.\\[UQOKLQQSWXYXY_dd`\\ZXXXWVUQLMJKMSWWSMLUXLGMLHIOQOKMQVZSMPSUSNKNQQOT\ZQKQZY\^[]^]^aXOQOOSQNRV[[SMIJJEEEDEB94`O6HEDV@GPSIHNU\_beb[URQUXZUNOQROMMLMNNNPPSSRQQPNOPMNOLJJIKNOOPPRPONIFJOROLMOMONJLMOQSRRPONPROLKMPRRROMNPSUUSSV[WSOOQSTSRTVVVWYYY[[[\]^^_bba`__`begkkm8<><;maUVZVSRVY[]^^\Z[\ZZ`e@eaa`]Z[[Z[]][WXXUNJKQWYXVXVTQOQTY]agebb^akojok]UTSSRQRTTSSQOQRQQRSTQTXWUVZ\]^_`_^^]^aff^SSQQUUSWZVQSSTUSMLOPPQTVVUUX\\^^`acf467=@CB;pjhke[W]bc]XSTTUUUTPIIJGJRQPSX[VXTU][XURPMLKJIE@BFGFGKOTOMNKJOQSQQORWXWTQOPQTSOPPOKKNOPSTWUONOSSQOQPRVTUVVXXVUX_d___]XRTSRUVTNKICEHLRYcg443eeded]XWY]__[[b587665789ka\\[ZYY^beihhkngcb^__adfefgdccddcbaaccfhhijjjkkijmlheeefj8755;BEECBA@CDA@CB?CDBBEEHD?>?><:87Y8:FKQW\hl9::876422233dbU7AJKHD@>;9>?7JU,/4AQkJPBH_hUGXWKAPy8{vCDCD>MRJNSRSQMPUY_fprzpga^__abadihdddaada__abbggd(ccopmowumdbgilqspnllkghhegfccggglpommjhlonlkiiqvwwtokigb__dmpkloqpjhmphb^_bfjnmkjgifeflqwxrqqlljigffgikpokmqtvwyxxtrtyzzukinojmpkegffnsqjhkkh__ekpsqnhgki^Z__][\\WUOJECFLPRRUUWXVUY_a__cf^WUY_`][[`a`ababbaikgcbehkpqnpnlmnlortrrv{~GHGFGHHGvnpsmmnquqmokcdhheda^___`caa_[XW]_`\UUZXPMRKEO^cem{xvrtsnjecgpx|vzzyqjhggpvrorutpkkortumfdkty{}}hZB:BHMIS]l~ut~ztg\`fffeehmrtv~{w{|{}umfegu~|yuqry~{}~{wrpqruyvspjimsvyzuus@A>CFEEDGKMQUVWY^abc`^_fjiihd`\ZWTSQPQOKKHFJNPPONQMFDFFELPMIIGBDMRTWWXYYZ\^a]XYZXURSSRNLKKMKGDCCDFGFFEB?tc_5<=:3\a4644AceXMGBpWQa51\\XSSX//-/-P_=CGD>8AMRMMQRSNOMJFCDA:k7=;:79;;<<9c`f78:?]4589875551037;:8939986777:;;9XU68;<759<:997fa6;75ee685445997787::96445V899946:6Y[_cf7:qiffhigbba_\XY^def`[\\[[\]\YTSSSY`aa]WXXWVW[]][ZZ]ZXWVWZ[[]]]\`eecceb`_+,++,++**+,-,+**+0-..--/.--.-,,...+*+--+,./0-))+,--,,+**+**,./.--+,-,**)*+,)(((*(())()***++)))(L'''(*-+)))++'%%%##$#$$#%('&%$%%&(++('&&'&%! !$&'&$&))***+--,+**+,+* )''())((&$$$#$#"%'&&(I&%'))(*)((('%$$%%&'))(()(&%%()))('&''('&&')))+,*)()*)*))+--++,-./)2/-+,-//*'%%(*.310-+-.05751-)()),-+*.1-++**-,+,+++)),- ././/00101222110/23,+,&%*'(*)'(**(&$"!#$#&++(()*+($&*)(()(((&',.,*'$),)(((*(&%&('$%&%&''&%*./0/+,/,*,--*%&(*-.-.-,-,.//./11/.-.,)('&&%$)*+$&$&)++-/0.-1310.-+)('&&&%$&'(*-.,)''-/(%((%%**)''(*,)&(+++(')++(+0/)&)//02001125-(+++-+*,/31,*'('%$&),-'#>2"($$/)7""!"$&(%"$%'&$#%'&''')('&((')'(*)--,,,.0/./.-b+,.-*('()$"&''$#$ ! !!#$#"''),.+((()'*,*&!"#!,&"!"$'&%!#,0'&*.34674.+**,..,(*,,*))'()***)+W)((())'()'&'&(*+++,-++*(%(++(&'))++())++,++*)()*)''()+)(('')+,,++./,*()++,+*,..///./1212g443322235676752.021/.1234432112104675443000/.//.--.,(&(-/0/.0/--+,036:>=:968?D?@>4-,,+***,,,++*++*)**,,*+-.,,.000110/0002440**)*,,*,-++,++,*&&*|+,+++,//000111 86475/,/350,)**+,,,)$$&&(,+*+02./-,30-++*)(('&# !#$#$&).+**(*-..-.-.00/,+***,,***)&'*,,--.-((),+**++,.+1,,,-030///,(***-.,('%"#%(,/33221330-,.011.,0 82/00/./1356335952211224434534!3220223567767776677424567!"!)"" "! !!  !'#&*-/65'%"19751/.,+/0&/1%-B/0'+9=.(85-'3MTJGTQLK('%"(+(+/.0.*,/26:@BJWL@:64557768;:888569765788::865668@@>@C@;88::;>?<<;<;89867779;:8=@>>?<:>?>>=<<@DECB?==<9779?B??AA@=:<=;:998799:;=>;=??@@AABA?@BEFB;:<<89=;8997;?>;9<<7226:=A@<769:4{27963340,)&$$'*.0/00121./45557730/155322665665687;<;77::<=?>?>=>><>=>??ADGHKLKHDDI(*)OMIJ')**(NJIJLKJNOLLLKIC=>?=?AAA=ABB=:9;=??BHLNKIJJLL@5,$,7@9;=CHHHI+JJMOMDAEDFJKLLIEDDB@=<>>BC@=859>BCCB:3/0\!"%()**-.//./1578:;;865310../-+*&%),//--0-(&&$ED$()'%%#!$'(*--.112233102220/00-+)()**'%$$%&o%#!;/(#%/5,&#!5% (#"! '&.,02-+14)&)''//(+,'%"&%*$!/,%$)+)&%)'#()%'##)),,.0)++('(+*++(''""'&*)$&((()()&HIGBC&)&%&%%$DEJFJ'JLKJLGDFD$G@@B9679:?;:<;:==>D'*G>E%?;><:;>98879=90&&-1359977707C%)*,)&#"%&GMCBJ*+),/'"$$%))''#==#&),--7;712-.(%%"(''+(&)/24)$$(*+28=6,091)-76-,0880-+++-34112/&%*,6420.,*%+20-)'&&''%!##$)%"*+''%,H>(HCIB<%&99DB4""%-/((;ADAE($:523,',/1,234)!/).-,02/.019:0232)%/1571/+)31+$&26/5/)&"$(,)$&%$&.6:4458:7)"%C,2,)+,23338=FWZB2BC)26765430*/4/.+014567"%+)$#)#"'%!7843;=EF>;4.+)-7.$&+392/4)")--+-,-+,,1;BM=,4;71/:B>@C;3235*%-1254,)52+'&S'-/*'(+)&""(09CF>3*+),*)*12*'/.*)'%$##$! '(&&())&'&$ ! 2+,0$+"!0,++ +6'+-018544342000.,))+.-/,*+,,++,,*&&&%(+***'''(')+**++*(''())+++*,./.-+~}~􀷁πǀ þů¿ľÿ¿рـȯDZθ¾Ʒ˾ـҿεܜ቟¶ƾľƺȲº˽Ŀ»¾¼ɀÿſɿ¿ɄȀȾǽʲĹĽ»Şぅɵ삋ܒ󔷤̬ЀſȀȽĻ¹ûøŀżĶǻü糺󇖡끌Źŷڃ󂌔ɭʺ̸茍ɠܾۀмƸúپ϶ú懃ݳľȺŻϨſѷȾ½¸پȸʺ˵Ȫ׾ꈖϸĺķ4ǾƷîǶȂ<b``_^]_]M^][Y\^`a`_]\[[[\]]^]^aegb___]\\ZWTUX\ZVY`ceb\]][]]^`^]]^^_`aa`]][Z[YXXXWVUUWYXY[[^_^_bb_[WUWXVUSSX\_^]^^\VQQROOONNMJGIMNNMLMONNRTUVUU\]\VLEBB@;hg79??>??@?=>?=;:89<;97679<:998789:86665542df69:t97hc^_bhmja[ZXWXX\eikkge_^dl8;??=qgcaba]\ZX\`\XVSRSVUSTUW`]Y^^]`bf7:9G88987434645456654541`][]1368522456533cbcbbcf32245344gee233455653346865434333b`acdeef444gfeeef356676656643dc`^]\^a2444323332113545556779;;:82[]afe\TSTTSPNOPPRX[YWX][UQPSURORURORUUTTQOWTHBACQ[VSTY[XTQQSQMJMMPSSRSVXX[\UQUWUY^e4_VSUbc^afb[VU\_[XY[Y[\\]\[YWVRIMXXVTUTRQTXWX]_/\[YVROOOPUZ]dhg``c_[[\_[WUQLNOONGFQ[faZZZ\^UKIKIFJQNHKRWYWSORTSPHCBEJMUbcTMOW[`a]XQTc`PPTQMRRTURTQNKGFCC82W>G)JNW>{buFONPRMKKKNPIFHLNLGEHMOOLJKMSWPNLJKKLLNNMVXTTVUVTUVVVSSROSXWZ[[WNF@HW`]XXXQRVUSQTTUUWTMPSKNQQMIHMLKSPMHCDC;TQHEJIKPPTOA?EJNFGLQY]be^VYXUSQOOOPPMJMORRSQRQSUQSTOMLNOMLMNONMNNNMNPOMLJJHKONLKKNMNPMNNMNNMLLLKKNRPLOW^SMQNLPUVSQQTVXVRVXTUVVXYZYY[\YZ\^_a_^_bacddccdeikj69;<83g`[WXWUSTYZ\]\[ZYVUZ\ZY\^b`\[ZZ[^][YTSMJOV[]\[YVSPPPRUTOQXVVT`giedlkaWSTTRPSWUQPMKMNMPRPOPQRTW[[XY]bb^^]]abelnf`[WSNOTVXWUSQONSTMHMQPQRSQTVTTV[^_`]\\d56:BFAnellhaSBPcg\VVXXWTRQNLKIJPQPQUXXSQNVf]VSPMKLLIE@>@@>>CJOX\[SOPOPQPQPQSSPOQSVSPMLMKHCBELMLIMLIKNRMJMSQOPQTQQRUVSQU]_`baZUWWUVTPNONJIIKSY`g453ccaacc^[Y\``\X\e6865gfkkc__[Z^][adefeek9pjc__bfjfcdecedcccdcbffegghhihihgkklhegiggj5558?FIGDB???;9=@<=AEJNNOF<;<;:;;6J9CKMNVh<:78:==98454211^\c*FIGCA?<89<=JS,/269_HC8i@SN>_eQBMyxv}FFGLSF>>JUSNLONKFGJMQSX]dstrogefgefecilmnngdffcacdcdiinokifhpnknlmjhgdfkszyrpmhccdaacegiksyyyxuont{tpppinttsrpomid_[Z^][^diighmrqh_\]^fntxz{|}{uxxwurtsqrpomoonjkljnttsttprwywqqtoeipplmppoorpkjlmjiicW]gdelnpm_STVRR\dc_^ZVRKDBGJHMRVZ\bhf\WZacba_\YTTZZ\^bggc__`cgfgefgiiggc^`eikjgimkqwyyutv~{}KLH}}{}x{~ysplmqqqsu{~zwtoihllljhiiijihlic_\[[WZbaaibYZUU[emt|tijoqoie_]bcdkmlssojmqpgfjp{~xz{zvsqwz~silry{}KPSRQQPL}hXTV_gx|{tof`chjlruwyx{ywpqyxu{zmfjszOxrstogcefmxIIMTYQLHH~z{~wmklvKNQPV_cfg_YZ[^abdffgfgeca^^`bb\[YWVSQPPPOOQQMIFINMNNLLPQJHGEDFLMPQOIDIPWY]_\ZYVWY\]ZVUUROKHGEBA?@AAAAAACB@|=e>Eo=8e[Z/3764IXMG{pdca]YYXUQQTX010^SV4DNPVUMR]UJNOGHMLLNGDJWDVy]\QLNTSJGNNDDKHDECLQRUXWONQMNOLLNRPJJGBHNKLIFLSOIKQMNPPMI{v{DKJDFEDFCCEFE~~ut~}yyrhaeeoulha``\c|MFwozunpleipnssnnuqcUW[^dfwximroopAJKQVOJHJIIH~HOPQTRHDEGHLKIHE|v@IRTSUjtqYSUSLKMKJJJMMKOUXRSRS\^a_alk`foneX\b\Z[fm`XUVVTWZ[^]XRNNRckcZTQNKSZcgYQHIUTKDB>BJHMRLKEJ@rIOoWu{{mvzqlmpaSizupmrkn{|i]RWc\VbYRddb[Vkt|{iS]{y3GBO\()A5=hf[UR^b]XLCF;sKRSSKPLIIGBDFKGp}LHZWEFTY]WQKHKJN`plonkmtuK~v{tusyKGvp~uY@ATf]Sg|pjlNKzh]YSRSS^dVVe_MOY]_woa\\^YNAIBUqnQ\d]`goqipq^XSSXfWLVjo`d[OWZgkf]TV\^\]ZV][S^ixp\ULOmhZqfVYTQURFDGTWanofVJLPLJSYLCAVa`[X[drjWLJLONKPSSRWYSSW\kvjkzvekljjhnmaWZ`egaafredl@JPPAKHOMy}FKxffekzAwuwfYVXTT\PHQexvtplYJ>nhI]ogWVYaisjephfiew~~jaX[Nz\i`\VT[cc[TQRU\``ZSRZQFLS\immf]ZWQSTUZk\VTQLLLPHVXK>:??H?:@JMOQQOQMGBBEGB;59<8gm9<9?@:^\aSF4P584788865454479:;;78657879;<;54877:87:>=897gc5=9533786f7:776799974446k69;;=<:=;[Y_bdo;;=5/,,,+)+.-*)('()((*))**+,,./..023000/123773/.,+))+,--+))((+,'#'+)*)**+-++,.010../3 # 50442/(&26/**+--+++)(('(+,*+.10,+),72,*(''()&#  #(,244/,.-,+*,-,--*)*,-+)'&(%#!!"'((&i((%&'+)&',-,*)+)'),.+*,01/12.*-,++*))*)&%%',/2311022320/021/,.24257323101103654326;720114742333553213334566787546654357666 #!   !#$$$""&((-6%%,67631/-*+-,00 !@/( ;&1+!:>2'4QHFOY+++02("$+0/++-.+))+,/048=EDB>98999:75:=>=<8799788988:;=<:;;=B@>@=<987569?DB<<;74442357:<=:6668876;>><:;??;5467<@BCBBCEEDDCBB@A@>>>=<<==;=@?=>?==ADB=<@>9:??<;=<==@@:9:<;:9714:559;<=6112.,19;873/,)%$()),/1358;=7125775310./345569864468;<<:9:;;;=;88=@@@<<<:?DDD??BGHEC)FO++)OPMGDFEIQQONONKFBBDC@=8:<=@BBDGHGFC@;<<;<;:;;;=;7312401556;5/1//3;@AEDITTMJGB;>BA=9721457=??CA<8:=<66:=EQMBACDB=;<@EG=8:<>>@K*S,.--,*(LFB@3'#$.7BJLKIIHDA:669;=ADEEEFKOOKG@@=?CCCFA98?DHX0SKLLGB?AA?;78995::ANC;854548G+'A:?E<8::88=:=>;:>:4+,1365AB78<==:$)).0*&#$$%$>C&)*+.+%#$$%''&&#@>"(-/-,8>?1-,,&&(&'$#&''*-.+*))/121398/2983-/41/.470-,-/-/0022/+**,5951.+*(/566.*%%.0("" "(&B)-))#*#:(*IE=0GMK=CH?:<@5+;ED?=?KJKK<>HMD70)/9306-*5760*8=KGDC7,3@7# :7,'%/41/'%!=*/.-(.+)*'##%+(H)I?=A@?<>=@*'>:D?/!-82'3C855C*)?5/.))+,26..71%)/13?JE:2/01/( '#,<:$+0**/474:9,(&&*4,&,7;261*029<4.,-00/0/,1/)/6>8.,(*>:0<5+/,((%)*0:;4+#&(#%**$##1753/05<;/'&+-+*-0..463246#'<32154,-.**0'"(5A@>?<-%:8)5>6,+,39A>8>:993;C@AJJ4/*/';4;31,),10,*()+011/+*1+#(-179:610.+--/33.-,(((+%-.& % %&''(((%" !!23)+/&" +d1/1&(-/05;869710120-)+*,32.*+,,+*,+'&&%&*+)+*)')))*+*,--,))( *,*+,-/0.,-.Ӏ ~~}}}~~~}~~ہ̀ŀ ¿ó½Ѐ󀅆C½󀇊ˀøӿ˳ƛѓЛþŽαɽûŴ½ÿʺɻļƿǽ¾ľɼ¾܀÷񄈅傋퀅Ѹ慕黄Àǵڀ÷¾ÿրõο뀅򆌇êɽɻ􁓙ǹԻ˽􏦒У˻ɿʹǾ׮銇ʲ哎ج݂ŬԺиþ徻ǿγƾϿƽ代»̸߽؀ŲŭǼ͡μʧƾؿ®ø썒8ccb`^]_aa`^\]\[YZ^`dfd``_]]]\\[[\^digcba^]\YWWUVVSRVY[`c_\[[Z\_abccba_]`edb_\[WTTTSUVUUVWX]]Z]_`dc`\[^bdb_\[\\^_[XZ^bb_\ZZXUVVTTRQROLLKMONLJIMPOORSQOQVY^[SMKJHD@?><;=@CFGFIQSVXZ]``][YYYXXVTVWURQSSSUVVURSWWSOMKMMHIGGIKLNMLLMNOPQSTSRPOPRSUSQQTWWYZVTSTSRTTVUUUTSUWXWUTUUUX\^]g^`c46679;?@?>==>=:;<<=;855578:<8642be69988;<96432333eb`__cinooidc`[Y]ba__^Z[\[Y[`ddeec_a578;?@A?siec`]YVVSSQNOONOPRUVXYd56768<@?;hcdd`]^[WZ`48866keb`a24776ica2686faa`^]]^be464454553cabce35676355332443244cabcf5776444hD4454445678789:986654fcbaeg32112110011_^013531224557779:95123faWNPTTRPU_dbZSUVSOONPQV[^_[[\YVTSUUPMJKKMTXWXZZXUQOSUVUQOQTWVSTUWYWVROPYaee44a[Yaie^[^^ZXWYXTVWUTWXY]_a^[WQNQSQOPTPICDKOYZTSTWTOOTWTRQSVXWVX]\WVTUYZ[YPMTY[[Vgqpm]VXXYXRJHFEINRPJNTQSTSNQRTYQHACJMMOPJNQUVL8EQNU_\TTURT[YYWPKHGD;2VAF.FA^nUhl|MSTWVSSPOSQMMMJILPMGFGGOSOJIJJOSROIINOQQPONQPQUWVWSPRTSSVTQQPRY[XSBBLITef]\WSVTTXUSVTRQMKQOKKLOQONPMLPHFGGIMMKHBCJKLQQUWPIIGBBGJIOUZ^\USSVYXSOOQQONKLJKOOOJRRSRQTQQSOMMOQNMMOPOOPMLLKMOOQPOLKLMLMOQONPONONKJLLLMKJMSSPNPSRNOONPVURQSTUYZVVYYXXZ[Z[\\]^^^_^`baacefiiigi7889cXVWYZ]ZWVVXYZZVTTV\^VNPV^ccc```^_``\YXPOSVWWWXXUTSUWXXVPMORQXb\X[ajkbYUTTQOPONNMLKMPQSPOQQRUVX[\[[^bb__afl788ma[WUXSSXYZ\[YTPPNQPMNNORSPQTUSQR[__]\[^g5259<::===tib]]_a`[XYYVRRRQRQNMNPQQONMLMPPVTSOKHDAAABCCA?8;CLOTUUUTSQQSRUUSRTROPSSRQOQTLHGDCFGHIJLLJIIJE>FMOSTTOMOPTROORWXYWRPTYXVSPTROOQLHLSY`354b^`a_`_YZ]bc`[[a68653g5g_^\XX[^^cidcdadhkgcdgigfdbcegeabddebehihhdca_bcaacbdfjiihghk667?BCFGECBA=:<=9:>BEHJLB:999;<=547HIKNXh<:779DR/43:=TxrebRVWRPSOLHGJNUULMPKEFHHLIDyqOMTTJJ]_ZTIBFKNQ\glhfchfr}|nfuDqrrsysmxoTKCTa^cchllh@IEufa\ORTOWYRT`fTO[cWgupk_[ZYSHICdMiidkeGHGJkzfii^VW_fWL_ngff\NX[jpbceY`a[SS^dh`YYdx\PLN\T`[PVZKGLKDDJQ\``a\^VRLHLV]bfk_[ZWTRXe\JKHFS_TUQMNOOX_dffrwxlcep~xaZ\`dejnbaclg`>PJ?OOLM}fsE>cab`k>FwijbVUXaOIN[hx~qek}tOMC@OQIVgztwwdXV^cmKvmprx~ulT?P`_YTT^beb]U^cdadbWROKPTSW]^[]^``XMQOILJKMLOJAAY`VQIMRMC=@GKKJONNKD=756;84f76fcg88;:hTT_[Y;a8957898:;::79;::;<::4589<:89778778987:<<698eab9<6448:9::9:996c6><;74fehhi6:;>@><=bW\^acj7:sommn@hb_``a``_Zbhhb^^__]]``]ZURW^^[\]ZZ[[[YXZZZ][]^^[YYZZ\^]\]]bg3dac---++*+---,++**++,...-,--,--020.-,**+*('''&%&()*.0.-,**,./ .-,,.//.,+)'(&)))+.,-/.//.,*+-/.-,+++,..,-/22/,*))''(X&'&$$%%%$#"!#&'&&&%$$&(++&"!!  !"##'()++-..-++,,**)&&('&%&%%&'()''*,)&$##$""!!"#$#$%&''&%$$%%&&%%'('()'&&&%%%&((' ()))(&&'(*++) *+,+-.--,,.2588300/-,-.-,++)+,+++-.-..-+- 92/.-,*)('''((&'&%%$&())).1./0-++)'),2/-,./,,-++,,,++-. ++,-/#,+,-////0F.--.//)*+*'#$''%$%&%'.10+'&'&%%%'(),.,+**)))%###$$&)''(%%()**(&')**(**+-,-+((,/10.++.31,*,,+**,,)+,**,--///-*)&$&&%%$%#  %',+%!#$#! "%%')*,.-,.21.,*)*(('$#&()()7@<9/+,,*(&#"""&(**&'+(&&&"$$&,&" #')''(%())(#)'+0/**-,.4100,)*+,'!9)0#:3>B.12;&''))((')+)'''$%&(&"##"')'&%%%(*+)$%((()(()*)*-///,*+,,,-,**)+.-)%$"(31($" " " !! ! !"&(+*))(')$$%&''&# ! !$!"!!!&''+.131-++-/.+*)+*)('('(+++---,+,+++*)*+,*)***())'((')++-+*)(()(')+))++*+*(''')(&&(++*()**')--**, +..,-/0.-//.//0011221453445666546/+,.024210023420../340*+1476743322331//++./00///,,,.0/.-*)*-,085147:94/-++*)*)((''')***)(*+,.--../.0221H124870,,+-++---.-,*(('()'(((*+)*,,,*)/10/..05400//000-++,*)*+++*+*(*+)+**(&$" !!#$""'-.10//--,..,+,+(*,+)('(*%"$$%&&''%#%&!!')**+('').,*)),('+.-,*'++''*(%'+,//./1/01..0120..035110.//1/3621213575246653322464112332344453332343232347766557!  " !""%%&(.7$"( &497530.,))(+.$#6HE%9"70#6H8#>:IHQ--(F/4+'*.//**...,,)*--/357;?@><<><<<9:;<<;:96567778678766689=?BDA>?@@BDB@=<9821G4788:@CCDDCEDFDGKGB@CD>=AC@@@<;95431001369;:89@>@DIOJD@?AAA@=:=m><;<<;;?ED;79==?@@A@=<=@AAAEFB@BFFCBBCCCDDEHGEBCB??<;8410.38982-/31)%&.555678:>866544322363./5542.011367:==<:751-06899:>??@=<>@A>?DJP+*R*)SOHCB@BGJNH@B?>DB;=<70/16=B@<<@@<;<;;<99:>@?<998742/4:=75648=7/046<=75;ESXJB>:=@IIGC?==BBEHHFDFECDBDHJLNMKIFGHFGOTOB<>@@BEKOPR,,V++OMKHEGGC?>EJFCBA=<>?>:8:<@??BA@?BMSRLJGADMPONHILMPOMKE@>@?=@BCDCBCDHLMKLLNQO'&JK),-,-02.**PO)(JI'))()(&&&&$F&(+/369:99878976554557:;99;:85343210/B--,,,+)*+*))*)')+SMF??A!"#$%#%)++,-/01222100/./11/.-+)'%$FDCDDCBAADfA>8431)&.(+ $*($$B=<6.($" $%,),0,+//('('$&,)%/,%%+-+',2,'$%('$&($A"&$$&%)(#*..,+*()()(%&&%%('*(&%&()***''&IC?AH%('#$%&'%%HDI'KB@AA=;<=9DPE91113>50358@>?E>9<>75768A@BC:5822.-248>EG@::=#,/==6,-/,*))&!&(&)((,+'*0-135216:;:;=<0120.,183--.///121110+**2:51-**+*1=7-'"-3.+&#!&((I'*CA$&A<'4+D=-9=A?FC9789958=;:AGFDBBHC::>GF5,.(-9;463670/1:44BC..:,#! 12)--*),))&'+-//)+/+&&%&('$@>0,20('452/)$&*+,39:997:6D:*&#.52558885"&"92.-&*+)/0()15+)14*5@<7/./.+%'$/(:701- 4;033-()08-%1<7684+217:222,340++0361//5F?0*)-5-62',-# " "&,012..*+'$&,.35:311/.,+2/&BE+*'/;101N-/10689:8>A@712:AB3/03225701031.("%%$&=19@$012.3E$<573,,-3'#'08BE=7;E>)&"#//(09D?AA5/.24;K*>78:=@95* ,751.,2331.)022/N22+))&*-+-00/0003-(,+(*(()()& /2,*&')&!$&%%(&%# .1./0%%(% %0..*01100+'*,./288877531//0//-+142.,,--,,//,*'%'+,*+,+*+,*)())*+**+,,+*))+-,+,+,/.+-π~~}}}~뀃~}~~~̀ہ Ԁ ȼ¿˽Ȁ󀋖ٿͼɾżͺҿɺٿƗώبꪯ»³€¿ȣ˾½¾Āüľ¿þ÷¾̸ƻǿ酄􁊌ؐ׿ц酋üÿ˿Ľ޼ùöɼɦǻǿȻĹĹſžƴDúۀ쀃Ƿշ¨စͼ큍񂍎»ͽõķĸٰؼֹ؁ڹ°ݽ돗îͷ¹ۼŭ˽ÀǻѶɼʿθʼ퉦ҵȀöʮ޸ȭвʽ­ƼƹŽ񏊆8 edca`_`bb`_][A^bhhfdddcb_\Z[[\XY^egeddba^]^[[YWVTVWVZ_]Z[YZ_cddccbb_\^aa`_\XUTRQ'POOQVYWWUUY\^][^c_\][Z[]`^XTTX\^\XTUSORSTURQPQPOMMKHHIIJIKKJLORWXTV]^WQMKHFFEFGHIHINPQRQSVY\][\\[]\WUTTRPQQPPQRRPPRSSRPOPOLLMOPNMNOPQRRQRRRTUUTRRRTXZ[YXZYZZVTTSTVYYVRQQWSWXXVRRTVWXXWYZ[[[_27<<;<=<=;9;<;:989:996644554dc_a23547;;88898775565433f`\]_ehga\\[XXZ[|YWWW[^^afkl7877973147=A@MSQQPSUURRVZ\YTRUWZ^]TRV[\[Ybec\SUXVUYYOIJMNOQROPQOKNNLTQU\RFCIVUKGIOYYRRMGWRPTPUUQSOKRQKKME3OEHHILU\\URTVWWQLMSUQOMKKILLIKPRUUSQONQMHILORPMMMPQMMNNPQRSPPMJILPRQRONPPOPPKIIKNNLLLPUVSPLKNPQQQTXRQSVUTUUVWXXYXXWY[YWY[^]\\\]^][]_^``cjljed33e24cZXYZ^b_ZWVUWXWSQSVYVROT]fjjklkd`__][YTSQPLNPSSSRTWZZZ[ZWTQRS[\VUZ]cgb\VSSQNMLNPQPORTUTQOOQSVXYYZ[\]`caag9<;99j\\[YZUZ\Y]^_\VQMHJPRPNOWTPRSRPNSZ[\]]\aebbd458>DA>wutk^WT[ec][VRQRUTSPPNLNQTWTQXXRJHLJIE93<@?@;9;8BJNMRTPQUWTTUXZYRRWWRUXXXZURUTSOJHGGJMMMOMLRSH?>ELMNPRQIFOSTMKRROMFINSWXVR[^URVQNLNN]66hdaa_ZYYWXZ^a_[\_h763de5gab`\[]aaac`^__^]^]_clmgeecddgebbeeedfhikkfa^[_`a`^^]blnkjjei8:9<:75@R075@ASca?;6VM9NueHjAg{CGCAp>EEDFHHGDCPPMMNKDECBFLUbonllnmkihedde3he`_\]]_bffa][[\[`ehjjjnyxqnljo}A@zsrjakmpompwuursucrwysnmkfdda[[\[ZWSUQOMKLKOanqmijmnke^_dknlilxypljijjigcbeghjjjllhkr{d_a\nmqvzzomstsurw}zussuz|~~}zxqgfedeb^hnjdbagok]Y]^[WZbc^^`]\ZWYZYX[baYWX\_YOU_`\[[Z\_cfb__\XZZ[UOOPU]kjfikmpojkrz}x{tunlr|}fivz}}{yugZQFJ`fcdijdccglmmgdjoha__bc_^bgmupeegglnhaelq{qlwukgbeq{yuty{|}{|yuwx}{zHI|zqnkilnoljmkhkrt{{wsjcbk|{ullwwrqu}KHHIJMSXQLKJJJNHOTYZ\_cdcfb`_^aca`__ab`a`\XVUUYZ[_^XQNOPONMKKJIKMLKIGFFEDC}IGD{zyGMNOONQWZ\]ZYXVUVTPOMKKMNSTOKLJEB{vwwvsxzy{~yqqpjgh68;?B?<<:55@NYXRLE}wrrqlf_UEQ`c\]]XRMLNQSVNV]RIT_hbY^ZRHBJOKIMI}w}GJP]YZ\VRMNNMLIKLLNHIOMJJONMLMLJKKOQRPMJHww{FGGMMKQQMKF}}~{uyuhadhjjs`ZRIS_hmh\ST_djlbxDtDGriiks~zhj|pod[Y_qzpgdoxyBMLOYSIKMJDJMKGCCFMMJKPRMFCDAyBGKOPV`[b^ZYVRLHGGDBINS]]\XX`_mutc^cjla`ltgYZWUWWagcbdb]\dimc\ZWRJYkaXPGHXcjaNMKHLPUSFEQVMKF}sh}KXUGJSNs\uyq{iqqiivjTep|}r|wawv]boBDrZTScknvpbdf^UWVSZ}x[_dWPY[;1:@;1<8HLIQTOPZVSTMJLOONMKLNGEFKFCGyNSKIHL[aTPG@KIFJQQa[Xghwroh_mv}wstwslgnzoeOBT[PPZdbuxq}rf_TNQD7Rc`clcUT^neYYafi^VXVUI?>H[ZScVGNC7@xvdd`\_d[PP^kmomfRZimg`cujVOCN[mxpg_`_yzkcZONDGQKG^ZGDF@:4deg457:=?AB=9bXW[^_`fgffggjkhaXU_dc^[^ceffc_]^[]db`(\UQW^ZVWYZ[[XYYWVV[[\]^^[YXY[_`]\[[`dgfe///-,++->,***++.0220/./...,**,,**-00//.-.,,,++(('&(((+-,,,)+-00/000/.,+,+)(('&%%&&$$%'**))(**,---10.-,+++-.,**+,..+(((%%&&'((('%%%$#"!! !!"""##"#%'(&&+-)&$#"!! !""#"#&'()(),--..-+*++(''&&$$%$%%&&%&'(('&%$%$$&))'%$%%&'(&0$#$%')))*)('('&&%&'(('%%&)++*(%&'''(''(()))+++*+1-,-/2541...-++,-,,*d+,+,143 643/--,('(('%%##$&()**))*+-./0242--*)(''(**+--+++*)'*//.,--,+,-0.-,.-++-./#.-,*+,,,./-,,..,./0 +=))(%! #'('&')+)*+)((''&%%&'().2.)*..+&')+)%&()(&'(('&%&%#&,,)'5)+)())*,01)'--**+-0/0.)(-.,*)+))('''(*+.//.-+'&'&&()(*+*'""$&(*--*+/364.,-,++)&&)+*()0672,,-*)))%#&*))**)(('#$&$((')%!!))%"$(/,%&&%-'&(&++'*)(.-**/+!5*5!0"-8.-!$$#$**+**Q)&),-+()*'((('%%$$''&'''(*)**+-*)++***)()+-./.,,*+//-,..-,**)(&# #3.'$##"" !!! !#'()'$&&%''(%!"##"$&&&'-12+)+-/0,)),-*(('''((')+-/.++))*'%&(+-+*))++))+*+,//-,)'&'*+**)*+,*+*('&')('''*--,*'''(**),.**+,++,,---///---.--..00///00//1223247752331.//02642111231.-.010/.06;>=<<:644330.,,-.++-.-,+,/110/.-+*,.44/.237961-+**D)''')++*+,+*)((+-/0/..021232136.//..,./-.-/-+)(%$(+)'(-,*+,++)*-.25323 5695/+),20-,*)(),++**)(),031,//,%"#""  ! '-/.01++-.,,.011,*+,*,--,.)()*(&##$$%('$%$$**!!&''),+&#),,'%))(&#%),,.-*/0+),*'%&%.42010-,-/1/./020230230/032220/010138853434454102443453210223200039976514 !! #")%%&-38$ (&".55221/-+(&+/%%3;;)$4*,D8)>&>K*+'%@#&''()('#!*+*+,+''%%(+2><=BD@<;;<>G%$B;:4179==<>BBB@@BCDBADE@==>:::9545332/1///,,,-8@A<88:;;967:>A?<>ABAA@BIGDFGEA?>?CDDEEEDEFECBC?:8778746254424:;755333110.,.2200113.%*46444556:<967423352,+,/5><:B?=?DLH;3)#!398:??99:<>==;7?AAA>;;99?B%&&)(%)*''%HDDEEC>BA:68:=?PTA53.)/7<@;0,-48;<5?$C9$&9468?FEEA67C::4004?JIB<75:BMF@$*)+1+$&('#&((&$##''%&*+'#"#!>$((++-402/-.,*'%%%$!%)+111/-318=>40389228;4..-,-.4623331/368510.+%/;5/+&'06<8)(&%),.-$"(.)(&C?4?(/,"%-)A>/@D@JND7<;76?:-9?FH@C@3ED339$%;/-,6;;?:036/)-/-/GMB.0.# ##%#*-)*0..0+*+,,+,,++&$#'$#(C/2*(&)46-+'#*)&)..41.67<828;@@71,'$)$+31283**084./3660,-,+&!'4/)0%=901/-061)(2:9995)2995/1?5,*#'-:A<832/AC:73-/&(,$"1, %.00,+3,'&&+./3:5122,./.'%&CC(F)6821-G+.0373347;A>:9667,(/13667:4**,,&&"&))&608;<:78?!!@C=762,)+/*()+.6A?/+8?-44%BCL*377DJM=00.7@F:7:9:>?5/,0<9.',21/7<57;:3010,'&*,+-/,().0./+++*,$&'%).&"*0/)"!%&+('(-+'&## .  /.#0,-c).01-))+,+-1113334431*(.00,*.01000-+-,-0//,'#(,))()*+,***)(())*+,-,*(**,-+++*-010/Ԁ~~}~̀€逅}~~ɀڀҀ܁܀΀ ¿´ĻӀƀèÿ˾̻ƸɸӨ¿F¶񎅿љٚżȄfɿȾի`¸ۄހÿƾ񁍓Ņ̀ļĻ»ꋒʿ¹˹€탅󁐕􄏖©渦·ٿюǀȼĽμӀ˽Ľπ̶ƽÿʾـɾƿ°؁ݿƼ˺􀁊Ľī´Ƹõꊝ񌙝ϸʫǶԈ鹾򊊉߿ʭȼϺ¯®þҼⱡŦ¼é¹ֽ¼»ռѸچƿĽʰ ˪¼ϸĺDžExgdbaccbbb__`_^]^]_bhjihgedbba`^]]\YYZ[`cacecaa_[ZXXWVXYZ\]ZZ\[[]adcbca`_^__]\ZWUSRQPPPONMNQRQQPQRU\a`aea\ZWVXZ[XTQQQRQPNM LMOPPSVUUSPOLIHGHHGIKOQONONU^a`^[TNLLKKJKKKLKJMONPUYZXWXVVY\XVVTSRRRQPPPOLLLMOQSSSRONOQTUSTUWYZYXWVTTVYXSQTVXY\][ZZ[\YWVUTTVUUUVWWYXVRQUWWUTSSXY[]]`d7;9655787677789865764gfdddb14664467654323e^d653575ecbaaacca\ZXWVYYZ\][YY[\]bl9:88jg5h_^`dj898789liigeb\WUSSRTRUY[\][XTVXXWWXYWTWSSVYXY\^_^OZ\^^ccbec][^`aaf699976896jdacbceg3223da``aa`_[\`bcf33edc1de3g4546878988:>?=9644544559:99754579887556655543212211``122111_^03566533-QW][VROMMPUZ_abbc]VSPQONPVVTTVVZbc[SV]_WLLKGJPSX]]ZYZWURPQQOPVYTRQOLMNOPPRVVY\YSWZ[\[\_d5:7c]XXZY[[W[eg`XTVUSTVXZ[[[YWUQMQSPONNRYZTQTXZZWOLPQT[\VOMKNRU\dYSZ\XUUQIJRXWVUTRWZWVRPPQSRTWUMMQQPRTPGCA@ACCDEC:@\U[NHGR[P?@HF;8AHJRNFC?::BA9b7(::AWEVRiLZXY]XQSRPQQOLORRQSXWQPRTRMJJKNONPRQONNPPRSQSTSSSPMNORVUQRUY[\^\WVVVUSJIHSu@:f\VVVXZYVSRRPKHGBFKMPTSRRLMKIGHIJHFIIFEDGAFNQVZXRB<=BEGIIPUXTPRSTXSOPTVTSROMNMIJKLOTTPPPMIGIIJNQPMLNNOONPPQQTTQQOMLOSTQOOQSTSQOMMMOONNQOPRUVROKKPTURRTRSTTSSUX[XTVVUVWXY[]][]^\[[[\]\\]\^`bceggg33e`]]\[ZZ]^\XWWUUWWUSRRRSTUZ`cdhlnlc[Z[\[YVTRNKNRRSTTTRQSUXVTQPRTVUTVY[^^\XWUUTRQPRTUTVZZXURRSTSY[YX_a`^`bb49<;:8lf`][WVW^c]WYYVUUSOLPQQQSWUUVYXTRQT[`^]^abddfhk;@A?>;mhb[UX`b__`^YQOUSQSVWW\ag^]bfif`^XQRPD23?EA6XWg?CEGLOPV\XSSTXXUSQRUVXZXVVTTTVXUPMOOPSNHQSMOOMOKILLJLOOMJPVVQQQPOKIHIHEELTZ_^[[XSNLK_:j`_cc^]`]\]]bb]Y]b665g^\debb```dfeddb`^][[\]_bcdfffggbfhgdgeegghhigca`bb`ceca^`iln88hh8?@A@@AAA@ACCBCDC>=@B@>;667:;<:37WDSMJMXdhl9<<:4.6;974441dfTCIECB@?=<:8ome_givAulr<=?BEGF;n;IQQMMNJFBCIIL[illljhebb``a`^aca_b_]]__acddb]Z[YZ\bfdfdbcfgf`_^bq{}rkkkpuurqqqusmkkqsmijmkjlkgd^[TNMMSUTRQRSOMNWcnsmdcgnmhecfijjhkklljggfcffdcc`adglnorvx{vi^lvrnnnmikouxvw{~xw|{vpnmqz~{{}~}{ywxxwxsnljit}qceifgfcgg_XSORU[_^]Z[\][TQVdiikj_Z]YQT[[YUT[[YZ_^[Y_higgcYQQW\_\Y\dggfiossv{{wvywtnlxwswztwzrlf_WQLBKgprmkjhjkjgefhgihcccdjnpmmptuplprrx}tmkoruuytmnojr}qhejrxx}||tmnsusswvy~|}z}~QUT{~|}{y{zuttqohffbdinrrnjipusrqz~~{smu~utsqnhm|wsokmor{~{{}|LPGKMMJIMOLKLMMPQRVYTS[cc]^cc^Y[]XTSX\[^^ZWTSTUSNJJJIIIKMKJIIIKLJIHHIIGGFzvqnifn|IMQPMLNRSY^]^babcc_ZXTPPONMNOOQNLKKIHFD||{z|z{{vxxw;977:=>A?9EQQKJKE~xzBHKQ`fb^XSPOQNJIINKNNKMQOKNQPNKJJJORPOJGHGz}EFKQQRWOIz|ziXblic^^eeieXY\^abPJUYceeipvELKzqJopuw|}qgq}vocY_n~oagljo{EEGJPPLGDDB>CGIGBADJNJMRQLFBA|}HPORacgb[XUQKEBDJS\YVS^edkoiVV^eZ[fx|f\]^WYY_ovrha]`dgf`^]XQFPdj\OBJbpkbWSOMLMKFzMXKHDEznzHRSQRJGEwjri^isvqvmrujYZmyuv}ofcgxrlfYU[cgfrp]ZUGI[arMP`T[UQYV=ADC68?73OTQNLPYWQSQNLQTTQORTQRMGFBBDAHGGFFPW[WJwvKHCLXvx]ciy{sd_]lwwhjwvkimstnjVINNWZZ\_xjmmk_WU\V@7Q``ffYYZbnoa`ecng\a[YKFGHJWTTYTIE/bbvi\^a_l^NX^[\iikmfgaW_aenPIAI_m{iTXckkebeiWDGHKJQ_VPNA7;@FOZjfYYWPW`b]bhkebaZU^d]TRQHwiMRRPLNPNNPQSXY_dighjdkhWR[_acs{trx:XJ\g:EI>EMLPNw[hEHCP]L}xxuhb]`_UUTPT`befUMS]L\lkUJdWnif|FUohcTTZhrkfdirhX`aY_cdcfeTNNQOSZ`abhcYOMNOMT\[ZZHYYXVQaeXMGJKCBLG?IVVMH@9FGCQUTZ][VPIH?:=BHPQOMOSTRLC=8:<>@ABN49644899;<;9889;:999:89:988;>>>:;>:6796a_h=>649;89989<=;65:>?<8fcfi57:<=<><8`ZX[\Z]`deeddcbbaZSX[a]XY]^cggf_^\[\\_b]WVZZ[ZXXZ[[[\ZXVVX]^^_]ZXYZ[\[[]]_bcfg!0/-,--+,-,--,++---.233220/..-,,++*K-.,./.---,*))(')+,--++***+.../0//.--,+**)(('&&'('&%%'('''&&(,12131-+*)*-.,*( +&%$%%##%&&%'&'&%$#"!"#&))'%#&*+++*'$$%$%$#$''&(*)(),)'('&%%&&%%&%$$$%&'&$$%&()('()*++*)'&&')'$"#%'')))(''&&&%%&'()*+**+*'%''&''&%'()**+,.-,--,.*-/02354/-+*)*++,-,+,-30./**+.1434321-+)''&'&())**(&%&'&''*+*(*(')(')++*))-//1/./.,**,++-1/..-,./-,+,---,**-.-./.---/ +++* $*(&%$$$%(*,-../-)'''&&&))(+//*')-.)%'*'&()*,+)&%$$%%%*+))('%&''(()+,,/.))***+,-0.+*+-,,,*+03/*)*,+**+...-,++)&)+('''(,-(&),--+('*))-.,'$#&*,/5/*/0.+*(##),)&%(*.2.,)'&&%%%()q&&**'))&" !! %"! !'.'$# "%&#$&$!&(";$ /'(3%?&"1$++*+)'))(''&%'))(*-,(')*)&%&&'('(*)((())**)**)**('((*,.-*+-/0#.--.,)!"#+?"/(#""###"!! !#"I&&&%&&%! "$#""$$&',-.+)*++/-+,./..,)))(&'(),..++*)%%&&')+*))*+*++-.-+*''),-+**,---**)**)*))+..,*''**++,-,-,++*,02-+-.-.--..//./.../0123255630/./../132/0210.--./014899:<;;620220/..-+)*-...--++,,.-,*),/00..2332/-,++,,*)),-,.//.,))+-,/2/-2411232761.-,,-040)+,++-,)&(***+-,,-./-+)*.2/./1232234541.+,0/+,..-'',+)+/0058=549;9620-''&!! .0;$'()+++.1.+,.0/.+((*,-.,))()))+)'%'((*%#&$%# """&&%')+('*,*()&$C""',/11/0/+'&%070/22//2//0/21/./240/331101133323110//../13334334 6624334443332112214642028::42   ! ,#+&%'.555'("-76410..*)*/.FUNG.G1-F.$DI@:7;;F&A?>;:97887776689;=>@AA@>74@CECACEFCBEEB?>=?EHFDCDEECBBCCBCA<:9:BG>47:76428:621/01586422341+)-687761/10,-0221/455587425::7750++/131038::;=@BABFsDC@?ED?CJIECEILFA;75/($!&6=?<:;<=>=:89;:9766339=?><=@A><@ABFH?99;=@BMLGDA<=>:?HF=67<>ABBAB>9;?@?@BCGJFFDFJNNLKIHGFH KNV/20TIEIxGGFGHIGEDBA<;<99=ACB=:9@DA>>EFGF?=GUTFACB?=9>HIIFA?>=>>@FKJKILNKHGDBBCCHIJQ--R(,,,)(,.,,-.W+-/144/.38635862012/,-24577421-+*+-.,***+,,**(')('''LLKFB><638FKJ(,.,*MMM()*+.003678;:642.,,+*+,,,+))*+))(&HEDBBABDFFGGC@>?>; '--'$#@<;;><9960$!# $.61--11+'+*'()+/-&)2.**-+'" $,+&&'$CAD%)+-5741-,++,)&%%)())&(+*')+*)('&&*,+,)''&JLH@BD$%'*)),'$GEFEBBGFFA7.6=;9658797035589,'01898;?=F$@''=87:>@DE>8>E?:404>FF;59;9;BIF%$&(,*'$### "%&&" !&)&'++'$""B@BB%+)*3252.,*)&"!"#$&(,1.,)/437:6+,04--2>B5/22.0/3;=<62/03662110+#*9:1*"'9A<5.-+))**&;&.(&%$>7?',+*)%$#C>7@;2:AJ?=@9:8EL60.2588=9.-,%&05A/0M1*,% $ )-+)((//,/.,,./..-./++(&'$&'',(&&$,0/.'=B+)%+/CB167@B<5408=B>78>>879=>97,%+*-1011BG8997/))/- )2036.-.2:9//3196-2./'#&'(/+*'"(4?5.010:1'-0./89;:794+//28'%%3;F9*-49:858<1&'&(')4.'$!(11+,+'.331788632/+050*'*(IE9645;6,260487565-*+/,-231142-(())'+0/...--,+35/*&(("!)& %--($!" -)++..-)%"# #&&%$%''&",,0.,/1,**+,)*-//0110/01,(**.,*+.-0212.-,,,+./,(()*+*)()*,++*)((),+,.,+***+,./00 +؀~}~~πꀆՀ}~~~~~ҀӁ׀ր΀ ÿÿûÿ΀ۀ ¿ɴÿξǾĿȹѼĀ肂źǗ׼𙥔Ɍ¿ļƮĪý֝þÿžžʀżÿҀɽſпŶ瀇˼òº¼ߔ˰ǃʊڌ̿ÿȾǻɾƾ̾ƼžӦƽɀ󀉅˿̽¿Ǿ򃏐ҿ䁆o섅ވ󁈌Űؾθ㇊ɮǾ̻ûͺѵž¸Ŭ򅘒ʿ㆏·޼ֆַļҾˀŻľԿʹȳ̻ij¶əΠ̺΀ʹۇކ۾̽񏔐Dz˽q°ſ˵鎙ecb]]23dbCdeda_`begijgdccdcdeecbcb^WW^ZY`a_\_^[[Z[ZYZ[^_^^_]\ZZ\^^^`b^[\][ZXUS6RQPONOSQQSTUVX\_aba\WVUTVYXVTQPPPMLLMLKJLMNONNQTVTRRRQPOMKLNQUY\WRUUUWZZVRRSTUQOLJJIFGNMMOSUROMJMSVUUWUSSRRRQQROMKKKNQRSQPOOOLLPQQPQRTUUVUUVY]_]YVVWY__]\]^^\YUUSSTUXYZZTRTUTVZYWWUTTWY&]]ZYZ_db\YYYXY^accf56676hba`^_`_`b23fdadgedaa_]\_a__cfffijga`abb^YYYXWUUVXYZYYWY^ehlq:6ifc`_]\bdf58989rpotsib]Y\^_\Y[[\]\__`\XXUW[]][YY^`b2356448;87655gddg568:@D@>@??>7543ecba`bbaa`_`a`^^^ZZ_ad57976568668:;;;8789;==@@<85444344gh45677642dd34455456654445431_]]_1232b`^^`1244311]:4OTNNOSVUX_ca_`aa[WTQQNJJNRTW]cc[VTUZ`_]\YWUWWUWY[VKJKPTTTROOLJMQOIJLNPQQQUVYa_[[]^][\a479j\WZb`ZVV\dii_TSVX]]YXZYWVXZYSQSOHGIKPVY[\`cgd\VWUSX_a\WPQWUMKMGJPRTPOF?JSZYYXRKOXYWRPMQVWTPLGIJIMW[UKDC>>ABCBELTWNOOOUWD%'Q*(=ADEIH5:Y<=N9OQ^N{XT?N:FSZZX^bZNOONNLNMLOPQWVRQRSQLMLJJKMLOQNLMQQOOPRPNNNKILNPTXWSRTSQVXY\ZYWURQKEILX]ds<9fZSSV\YSOPQOOLMIBFEGQTPU]`WLIGFEGCBNJHE<@79PTUVUR=:@BCBHKPNNPQRPLQWRQQRVYTSRRMK!LNOQTQNMMLJKOPPPNKJKMLLORQONQPPNNOPQOORWXVTPPQSRSTPLRTUTRSRQLINQQUYVRRTSUTT\gcVTWVVWWXZZ[]][ZZ[[]]_^^_]^_`_bhk43f_WV\\VUYXXWTRSUUSRRRQSWXVXZZ_geee\VWZ\ZXWUSONPQRRTWWROLMQTTQPPQTVUTTSTTUY[YXZXVUVURTYXUUVTSTTW_\UW___agj669:6dZ^^ZZZ\_bcd[SWVSSUSQQPPRSTUXYWXUUTSW_cb_]Z_g579:=@KS[\[ZVSRR`qk[U_b]ae``_bjj`Z[_m7d_[[a_a`]bdhggjh`a]YYZ\^_`aacehfcccdebfgfhggghih`^adbbdb_^]ekm99kh7>@CB@ACEEDBA?@DFD>?@7068:;=;<=\TVAORPPYchj6:=<:236565673245B7CHECB@=969J165\M\SOBFKKJHKQVXXY[XSLJPVUU^glje`aa``efcbdeebd_\_bgjjfa^ZWWVWXYba`^]VU]__]YXZ[ciiiopqqkjllijghknkd_Z]bjrronmh[TWSVRJGLUXUOLQ[fmnhcbipkfgiedhe`^\_cddfilijottnklmnsx}}~~~{xxwwtgaimqvwsruwwuz~{xtplo|}zvtutpv{zzumfa^YWUZgqfYTSTSX_\XX\`_WNO_g^Z]]WQU[\\XVY[Z\`_ZXX_eecehhgjklhb_ajj_ZY_filqxwvx{{z}zyofx~wtwzysi[WZC?U\ckw}omnlgb[X[bejsyyyrrwuvvoijpx||wsvwrsw}yusqpst|~pityljmptvwttvz|KSMzrpqry|||ytvwzzxtph]]``bilknppnmkpy|tim|xz}|<}hdhheffm{|xrmnswwttvxy{srwwttwPMJQRIKHHQUVWXTNLOQPMOPNOPTZ[ZUPMJHF|HGJKIHJLIIIGF{wtfZWW_dsHOMOOPMMMNT]aa]^``aa^YVVVSOLORRRQRSQOMNLKIECzuv|DDBCC@:6kel=;?KPKGHFFFHHGxqli`XYQQUTQT\_XMDBT=RUUQY^UKMPKHMQQMILVXQVSLGCAGMRNEIIE~CIMQV\]_\USQRMHIJLMKMJMPPKIOQOKGDHKOKFDGGHKw{BHJNVSWSKE}}kZh}zhRIQZlsfZZUONKIV]]eeemllGKG{rquuzvj^chggaZ^hlgY\kljksEEIJLFHGAGDAIKLGFHKLIOUSLHCCDyzORPMRbff`YWSNIGD>xxAN^\QU]hjffc]RQ^h\\gtlYW_c`^\apwokb_adgda][XRJK]q^PMLTfjeYTROJJJGJHGDJD|wCQKHHAHGwniceefxrfqzyofejx{rxsovrjh{xuHNwb\_ffarvbXB=d{tsKXLu^WKO^gPFDA3=D;.M`VFC\[SWXSLLQPTTQS\\VVPK?EBqEOLMUPM`YJpyKt@\jmshbhlucVcpu~mYbqqngknpol_RMTWL[nt|uf__b]_Z_eYQV_e`ZIWmmiddjiba`abXPQNKHKVbSLRQYWQRcnlUUW_bTVc^Y\X]dpnwveeZVUTJNbca_WSWWW^cbqmIORPKNQT[jM7;AGKOYZWOOOKP_ilggkkh]V]a^[PSOFq[|GTS[dXNLHFNW`b[[ZXZ^b_[YZ\e\fY_@Du:<<@B>;=GRN]a|CIG@ywc`cgaZYVWefecZQJIGWY]VLl[O`tORKLMHLNam]KTXa[\UVea^gpoqig[NJD?EHKSUOPQPUTTVZ\X\YWSIM\_TPLGCHIDBFPNGDCDH@6EQT[[VPJB>:@A>===9687gd37=6d8<9557^9><97`;@@<;9gefi69>=<;96a\^]]\\`diiheeb_^\UXX\[YYZX]dbdhje_[Z\`^Z\\]^][YWV\^^^]YYYZ[\ab\[[Y[]\\]`bbccd....)),,+,,-/0.-/1124420.--,-..--/.,)(,)*..,*+,-,+**+,,,-.,+**++,*(k'&%%(('()()+.0121/,*)'(**)*(&'&$$$%##$$%%&$$$%&'''&%$$$&())&$#$&)-/,()('&()(('')*'$"!""!!%&&''(((&$%&&&()'&%&'&%$&&%$$&&'&$$%&%&&' &'(*+*)&&&(++)'&$%$%&'(()*)()++**))()*+*))+-,)&&('(+-///Y0--.*++**,--+,-.010/..,---,)),./1443123310..,++))*))+++**,/035/-,*+++/0/68:>;41.+*)(')+,(''&'+-,*))++,/-.1G/.,+,--,,++--,+++**+,/210/*))+,+**+( $!"$&*)),/-**,-,(&/#!$&)+.0/*'((*--,,+++,,**++*"!"%(('%$%$$%('$$&'()+-21,*+*)*+.1,)+..,*)-010,''*+-.,+--++,-.*))(#"%&(+-,,012.)'))),..-,**,+'$(%%&(+*(# '+/,)'%$&.0.+)')*(%""!$%%'-/("  #"!!  "&)"(!  #";)++,57-EH*(#!'*,-01,%%%&&&(''(**-,*)(('&&'$$&'&(*'&'*)('(*(&'&%%'('*,,**,,*-/..,,--,,%!&)003:3+%##%#U! "  !"'+*'&%$$%"!"!!"""#$#&'*)'))*(%).,,,.00-+**(()*,./,*)((('()(I'),,*)*++)(()()*++,.0/.-++,-+,-*(+,,+*,,*(&(((+--++-,-,,285-,.-...//./0/./w00010011036640,,0.*+...-,,0210///./2201447:9672./121//.,*)++,,-/0-*))+,-,*++.//./--,,.//./.,++,+,..,,,+*+,.21-.322599p2-/0,,-/2433/),,+*,+))**,-,,-.--,,,*+0220/,.44.674132/242-)))**'&*+1;CC878739??7.//(')""$ 358 "&)+.010.,*)),.//,,,.,++,/+%'*--' !##"!&%('''%'(+,+(&$'(('&&$!!  (,010/-+*+3=:-*.1/120101670-./720-.2010/2465355000.--.01122244423338535556654455/.0333432106:;73 !  !!  !!)+."++()/465996320.*''.:180NN,&R2'+48A??;;CECCBBC#&'))((*-/01242/*(,10/4:;96455436656799894356:<;8431011344:8643--3541//0/3555:<>@>=>=;<:<=<9410137=>>?:6.''&)(%%)/10,+.4:=;4015;98:;88:953467988;><<>BD@<=>>@ACBCCCBACBBA:6;>>@A?>??AADGFD>:8;DGFHGGHJHHGDA<;;7=DBBA<8442204;A:3221027511354/()3:3-02.*.4430.1444784338=96787699:9756<:2004::;?FEBDFFGLKED=7AJEA>@BA;4-*5,'),5>DGAA>;963237:=CFCB=;AGHD=:??6779=@DCBABCGQ+/+LLNMMJFBA@AEECCHIHKRYPGFDEEIQSNIEFEC=78978=?@CDB@><>CEC=5;GBCEEIMLE=::9877=EEB=9;?@@=?@ADC?>B?;<@DEFJQBUQS-*+0/OLMN+,*PLJK*.//1331000--/11..,**+/6761.-+*(MKHFJLJKPT*TOL(*+)))('IDC?5.++03?(+))+,,,**/466333456642220+)-/.--,,+*)*)*)'&JE??DGFFGHI$$FEED"" .+0%*'$$EF%$#$$$GA:60,%!!  #$#$--4-*04.&(+'%(,-)'(--',,'%""'(+*$&&$CB$'+-/3220.,+-*'''(')+,('*,+(%#%'*(&%II'&&(K@A"&&).*,*&#CAFGEGKIF6.;GD;.*.2?A712/,,))176:99=::(*CF'D;8;?@CC<37:67524:=:14>;8:?FI%%&')%%%!B%$"%((%$&'&$).,(%##$A@*-,'*3441-,*(%$# ?>!(11)*.56211.((06/05>:.-4521/1:>;72013432010+%'2@3)'*/;=81//-(''$?''C&#'#@=#+&#$ $$E>;96876D>7=B@;767BD?CA=A<88C=8&-A523881;?1.!7ICB-6,>1/(&(*(60%!11-/1/,+-,..,-331/,+#)'<&,)(-*(40'9@,E#3;?B636721)()+%(5553+(-00488B?',,)'*,,/;& ()(%'('+48;77;:82,0200'))$GD2D*00071+***-26;3232021/.,,-/*.)+!;;5!((D,/B#A&&!AB>GJ?43473/.+.5543.*$$",040*C8,H9F,+'(+)*+3:.$),3/1l/.765:=;=73-)'$"%&',-*+,*-+*+.0.0--*#(34,*)&#&'" $+)%#!!$")*.,(&"#"!#$#$%%#!" w1/0%,--0.+-,,*),.01100.-.-(**,**++)+/,/254.,,-/.,,+,,++*'(+,-,+)))()*-,))**,.,++-.---.ـ~~}}}~~~Ҁ逅~}~~逅΀ Ŀ€žԀ턄鼽˽Ǹľ֞΋Ⓟ̬žºö󀆅ᾯ¶ϼܯĿĽ̀ºŴþþՀĿĽ݁ޗ󃊑πóծô񥝾ဈǿóԫ͵ƀǸöҾվހþɹľ큋ͿԱ̼û߀ȿϺĹż򘮱Ǿ򀌉ǸξٸјɿȬöƽƶ·ͼŶȝǒҶǺ֭Ѝſ܀´û»´qaad_QW`34432d34hghhgfijigdb`_ad`gifc_``[Z\\ZZ[\`_\]^][[\\[[[^_]]]\]`cb^ZVUZ\WUUVUROONMNPSSSTTSQRWYZ[[XUTSSTTSRPOPPPOPQNMNLKMPROOP'QRRRSRQRTXVQLJKKMSWTQQOPRTVWWSSYYTPMKLLHJKNQPML{NQSSSRPPONNOPOOMLMNNNMKLMMOONNPQQRTUTSTUTSV[\]][XWZ^_]_`_b`]YXWUTTVXXWSRUZ\]ZYYWUVWXXYYXWVUXWTUTQQQRUX\^`dgdbc^]^]`bcbbeec`\ +]\]\ZY\^^^\^`i8ohedda_^][ZYTQY[\ZYXVX[]_aek65553cbaedd466678::;vnfbbdea`_`bcab24433e`\]\ZZ\^ce4445643f4443566h58:9;>@=7897::4a_4443cccbbc2344d22hiijk565545455469:976789:8:854455444557:=;854feg4675666555455654311234443dbac2333100cT?IX^][]`\W\hmedb]XUSSTSPMNNOQSTRPRTPS]][ZXXXVOJMT[_ULMPY`]VOLKJKNQNLMQUUURQOPX``]^`]YWZ^f6jb\bhfa\YXZ]a`XTSPOX][[\ZXVWWTQQRNJJIHLRYZZZYUPONOPSRRPKLRYbdabfa[TQPOJBIPRVY][VQQWYZYY[_\ZUQNKJHGNY[ZRNMHDECAFILQVSPQRRT??06HBId1KIF1/"HW^EKOMRQPBK64QTUVY^c_SNOPQONMIJMORZXRQQNMMOHCHMMLOOIJNPRTOMONLMPQTVWUTUTPOTWY\ZXUSOI:BZchgg466g^SMSXURRUSPLOMJCBEKW\VZ]YSNJIHHKHDKIMKA@@BMRRSVT@4??@>@BDCAA??ACDABB;7:<<=>;9<[Q\DNQPSY_k999;;:634457553`\4T,@HIFDB>98;M^38e_j]SVy]\gwup~op@C?>>ww?EIOQSQQUY]_`_XUVQPY^[\afiea_``agmlikkgdgd``bgpvmc_]\\WXXTZaa\Z`^_cd_YT[htqf[]bbddaaegiknpnjfY?7SemqnfZVMKYW\ZUKEGGGHIKO\XKMRPZgggjmiecb^\]]`gkklmjinvwsrrqsx}|{||{{|xpklnnmmnmmu|z{}~{|yvrlpruztwri`^ahikidbYW[_^Z[]VTXYWVUUX^_YUXXSOPUZ`aca]Y[_\XVUZZVWZ]bkooqstrql`\[Zbosx}~|yut}uikp|rtuj`]ZXCHXV\ityvvtd_^\XY]dgmzzonolgr~zvpquru{{vrst{|zx|}yx|{wtilyHIJIJIIG|upsvw{~~~vrwnhhd^_`ahrrppiccho|wrrvyxqszzxnfbouopqosx}~|~mr{{yyy|KLKvr|FMRQOMMNNNONLJNTUPNNOOPONJE~zwvzE{tlc^afmJMMKLPRMNNQZafg_[ZWUTTSPONPPPRRSTTTQQRQOLIC{|yrqsyBBDEDCCCDD@==9;ISTRQQMKLKKJ}vsqnnhVMRRV1bQQ]0\SPRaANYWRVWPLOMLPSROHLVZRXXJGGDFFM^TLLKE~ELPQUTRRSUSQLILMIKKMONOOJFHMSTLDGPRRLFEKKGFv~IQ\[SYVQ}|wizr[NNUjxlaWOGDBN[[T[\a`ewFDtSNywzzqgXN_[[ihhaababloffno}EICEJJKJEHEBGKQOKIHFCFIIFFEEBouGONQW^dcXVTOHDA?>EGJPWUMSch`XceYQU`iZP`f`Z_ghc\`gnngecc__bd`YX[[PK\j\TQB{Tde\XSMHGIGCAuJTRG}HDD@BIGwpnkkiarshyygbqshjf{rfIz^oFNLyi^]\]]lmeUJMWhuUSrVBdn[LFB:9?D@5M_RIJQPUSUSLNPRUOIKXTMZZcfZIFMTSUTJLU[RAyrcRhlidpmjmzFuZaqvoh_gdhqnonrpjfYD@HIitkXDM\\a^^u}g``fWPO^qlaZYafjlhdXRSRLJGTXUJRae_[[]PKZUQU]jdYfg^VTVV_zOh`a^^adZYYWVYTMR^dqnlbKOPHBMVVdkhGc=HNURRR:AXTVelK|GX]YZb^`VNBFoW@SkxxrjcbZXYSRMEFJOONOU[XW\[ZUOORSVXJCC>=KVPMNKHCDD:>GRa\WUF<;<<>EGEGKKJQTJIJ95=DF@;FY25679:;=8787889:8774147;=;:;;?B@AB?><<9i565467<;534ed4;17?>=;;AB>;=7ecdih79:996d___\]`eghefca_][[VZ[\][\[USXWX_eki_]\`deb[[][\\XWY[ac`^]^[[[Z^_]^^]_]ZY]ddb``.-/*#',,00210.,**,--,-/10/...+*+*+-,+,.--,-,++*,-,s-00/,)),/,**++)'&&%%&'(())(''),-./-+)(())'((&&&%$%'&%&%$%'(%$$%%%&&%&'''(),-)%##$%(+*('&&&'()+((*-*'$##$""!!"#%&&$#$&(('&%%$#$%%%&%$#G$%%$$%&&''('&&''&'**)))'')**)*+*,+((&&&'()*,*))+---++)''')))**)))()(&''& +')*+,-0/.-+2,,---0//.-,,..,+++**--,*)*)+./5;746530/.-,-+).-,+*5,,-.02,,-../:741...-,-..,+,-+**)(+,2//)(---,,,....// +.-.T+++,($"%%&*-+'*151/0-('&'(('%&&%%'('&((&',,**))**&#%),.*##%*.-($#$%%%''%%'*)('+00-,,*))*,03-+.21.**)+,-,)'('&+-,--,++,,)())'%&%$$(+-,-,*'''((*)''$#(,/0.-.-*&%%&&"&+,,+*'&&'+.0//01.*%#""$##(.-%!!  "$"N"#" !!!$( -!"#2;;&)H'$%$$!)()*+.2/'%'&''&&%%')+/-**)&%&(# $'('))%%(),)'(''()*+,+++,+*),-//.--,)$$3464330)$$$" ""! !#"&+,,)'&%&(%!"! ""##&*&%'((('&'))(()+--+)(*++,+-0/+***)))(*))* *())*--,,*)*@(((*-//-+***+++)*)'&*,-,,,*''())()*++)+-.-,-.00...-,,---.///0010.01646247/,,-.-+*++*,--/2445870)),18734730...--..-+*)()*, +*+,+,--+),-..-+,-.../00//-,..0.+1((+-010.03:>?=96445431,(*,,-,-+)+/-*+**)+,++,,*++,T-++,--22/,/4670.3442221032/,--./..05;><;61.01234/)'%!! !!$!+149;!%*-./0010...-"01/222540.,,,*)*,/0-)(&$#"!$&''(*)(+(#"'()*(%%%&&#!"#%-.+))*+09=8./.../121.*3--28865.+33422455531330/-../14562267423331048435532342//01122321376576  !u !! )(/%**)+.16%#!5:8641/*&&18;:?613HI81=HHFPTRAB&'#%&HF$'),-.-.135443.-.+,36335797548<;:<=<:;9767;AD>85454254147622642530,+09>:2+.369:88:;;<>?<95- +38<;7/,# '%*)$"#&&%&'')10'&&%-779<=<97631235:<<<>=:;@B@@@?@BDCBACDBBBCA<<<;;:9:::?DFCCGLOOKHDGGFFDFFFDDCA=78;=DA>A?8225:;>?:8326863340/2210023451//0.,+/36688534653214412248=?=<=@@=821337>ADIIGECBGOPLB7;?FRQLC==>60-('%%*7?A?@?54642258:=DHHGGFD>=><:CMHEC@AC@ACA=<>@DDBADEHJKHFC@?@?>=57@LOLLML''(()()(NJECBDCCDFFFJOPQRQNwIJNQTONNKFA?><><7888;AAA@:77:?IJB?@DDB>@CED>:7?A>?><>BFIFHJNKHHHIJLH:AEBBB@@EJNONQ*+)MOOKJIJOOKF@>F'+..-+++**,--*-12/--.G-)'MKJIGEDCBAEKQRTRNLMOQPONOMNNN'LHDB=5124;FK'(())--+,+-25::63210/00/,,.)///.---,+*($CFC??@DJJHHG#$$$##""! ")*('((()MHHC>950.-+" !'$" +)/-*-.*'))(+,,)%)01*-/%#$$%$)6/('(%AA$),,/.+**.-,)'*+&'()+*++(&&)-.(#$*,,)&IG&((%$D>BI'*10)--*F@AFHIJJE=6CRK@3-.3>E<60,(&K%-42-34648C'&=I-)D=>BC=81,72/97955545;>87<(+((,022-,+)%" #%&*0.'*360+01,'*29/(163.0662.038:543311331./22*%1;/+,#@/8820/*&$&$"B!:B'-+#?>%! &&DB@=<;=<9A=7AB74=?8:5B<3F)C2>G%**A834431:;5-&'1=LCP3/K>/!25''4,''.,..1.*,-.0,'(1/*45<<4($).,-.''.1+"DB2-==96=:87>%<,1:=;70657>;;:<;881$#'%7PHA<1$)1.331>B4014+('0=81..354546.)()&&#-0/'*48420/)'1,')/62,450--/-1@*B2/.-045-10..0-)+37?;<8%)+&#),+2:9%2! " !"!!$-5227@EC<0..0/)))%&E*7)37366.&,467@BA>>>7=E?A@89860./240/.*(*22)06,)&-.#$221<74500/+*(#$'**)*,/-+...,<((+-//'"# ',(''%#!""#(1.+*# %&#$$"!%&!!"! +10//-,-0..,--*+,-././-,<*,++,+,+''(')-054.-,.12/**,+++('(*-.,+,-++**+*)+,-.-+)+.-,,-ۀ~}}}~Ҁ݀ဂǀ}~~倃ȁ߀怫΀ ź¿ÿŀjۃ 邚źſǿ߀ұڽɻƒȴþ±Ⱦǿŀۿڵźĺ»ÿ¾ÿۀƽĽ;5񀎙ƿʿń€ý􀆍ꅑ񎸶Ȥ˹΀»ǿԾ򬈖½ʺ܀Ծŷý񀆄π߸ӯѺǻ̿򕥮ȴɀȿƾ𕬲Ƹӿɸɽ⇙鷭׻€¶Ʒۨۙɹ»ưδʻÂǾ濽đ툞Ϸ̎ĬƱ獰¾ž񉞮ź뢱ʻĶź³LW``__WXY\]0334445jkjklkkkgca]\\]_bdcdeedggb][]^^]]_`^\[\\Z[^]ZYY\_aa`_`abb]WTVVWXYYXWUURONMMLLKJMNMNQSSQOQSRQONPQQQP MLMOMKJKMNNPRP%NNOQPNLJHHHLOMLLNPRSUVURQSTTRPNPOLKIJL!NNNLLKKMOOPQQQPQPONNOPONOPRTSQPQQR"SUVVWVTSTVTTTSTUTSSWWWYZ\_2eb_ZVWUTPOQVXW4UUVWXWVUTSUTUVWWVWYXWXZ\]][YW_b`bbbddcedcb`^[^^[XYX[\[ZYXY\ahoiddedb^\]]^]]aa_\[\]^\XX]`eli464dfdcfjihhdbgkm7hfehifgc`_bdbbd320012d`]ZWZ[\^a22``232`^`a`g885576557852ge_`4dOG3765443345I6679;;:9665ca`_`21366435678876676798985456667889;;;:7666565665445677665445443345775420^]bXI/;<6f^YX\hmihlj_VXYXVVVUTSSTQMKNUTU^a[ZVPNLFAFLNT[WQSY]]YRQRPKJLMLKOUTPQPLGIPVZ^`][YUUX_ig`]`fhddd\[[YZWWUPOSX]]\[[YXVTSSQNMJHINTVWSPOLKMQROJGKJHMSZ`ae442`^[YVWRPOOMSY[]\TRWZXYZVSSRSPNMMOQPMLNNMJJOONNNOPPOONJO4@VaC>EI@82ab]VQW``Z^^WVWVWWSMGDKOKKMK9GN]jhj9@FMRTTUVPJORVYY]`^_fgghec_ZYXWRQORUTOKLOPNOPQQQNNMMONIIOQSSSPKIPPFGG9CNOMKJMQVdp7b_]\ZZ]abYSf74_Y`6ife`\``bccgieb]]ac`\Y[\_aejibcffda_`^WWZ__^_^\\\_c_\]^]_ccabdffeg69=>;99:;=>>>AA?>?@AACD?75458<<77b98JLORTUZg9;9;=:765578642_[cba3IKFBCB=7;Ud59SPeefna^wc|LJCGE?=?xrv@FMONPRTWZXVWRQWYW\^\Z[[^\[\\]`bdgfefhhddedcbfqnfb]]^YYWX]`db`fd\XW^d[Y`ikf]Y\^[VWWYbglrtrw?A=ffjiooofPJAHORJWZPKECGKOPOU:0-08S_cgkkhjkg`^_aikjjkjjquuyvrststwzzzxzxxzrsvvw~zonzIKKJzvx|||ug^gq{G|rppkZO[bc]\YXWRSWZ\^_]SMPTVWY_]\^caYWVQMPX^_aa\VVWWUUZVORY\dmlilkhjkjkkjhgjmv}{xvuy|}zlWtKNLJ~sjhc\[YRMNXiqod]VQTZ^bb`cfpzuqmpsrmjpv~~xrhlprttuutvw~~{yzz}}KORNKHG~|wuvuqv{NPM{sqpssme\WVV]hljf^UW`iszy~zsuu~|}|zww{~LNPMMqyLQPKIJNQPJxu}GOPPMIHIIHJJJICHIIJHrmsupnkkouz{}~~wqnmijrNONMOSUTPMNQW]bb[VSTTSPOOQOORTWWWXXVSQPMJHEvsx|~{ywusw={{ujo;;9=ESa^UUTRPMJKJ}~wpkkc\WOJDGRVK45MSOWSLP`AW`XTSROLNNONNOJKW`YUVLGIJIDFYZMHILDDMSUSRNKMTXVPKJLGCHORPKONIHIQ]WLIPVTMHECEHKGDDCDGQ]a]ZYTH}CEF~r_KEEVadfTGQRIIWWZ]\]hejqHEKTV~~vd[W\b_kwrqhc`fihb]d_btr}@CFEFEEFCADFJHCGFCDIHECDDpyNVYY]`c^UTSLFCCDUfZPHFJMTafc[gj[QNXegbkf^`ekid_bgje_`fe`\W\[XYZZRMSdcYUGWehogZPIFFCAAACDIWYGCDEDCBFHFrnlgdPMs{q]Xcwmkfoqpzcayqh_[XZU_kgXcfQ^tvO\MyTRyeSSTTOIOUMEF[WINQJUQQ\TRNHHOYhiOMR`oaNGSUUOJPSTRJfnO[adlosmeqIfilcafoqqkgemkjhhlaELOH\}f_[HKVacT^p\X^^OPZjul`UV[zzeZUOTVM]\WYVMT[`_\``MFMTo{h_`^gob[[QT\eC}e]b^Xdea`VPJIYhjghi^UWQ:t]%,D55CLHKK?vryymozzB|tgn}wlcbhntqhad`[[XUW]bpiilhREPVMQmYLZhTxDOZYY__b\ZQCHFitV_mrkhkvulkksnbYSQRVYRMQSTX[\XPNOJKOJEF@h>SZSOLGERS43K]fdXRK_Qiqs=<<<@BABD@@?>9hhjj575<:753b_]_h8=@DDABB+A?@>6ccfcd48:8ha_aeeabfeecbbc`\\[[]]Z\\[ZWVW.XZ_\ZXZ^hi`Y[[\_][XVY^__d45c\Z\^^`b`__ZUV]ca_` -..+''()*%133245430-+*)))++--..//10-,+---+*+-, ++,,+**+,-.-./.+))**+,--,++*&%&%$$#&'&&())(&&('&'&%&%%$#$%& %%$#"#%%$%4&%%%&''%$"#""$%%#$%'((()(''())(&%$%$$%&&%$$%$$$%$#$%& %&&''%$$%&'''&,%&'((()('&'('&%&'('%&(''('(+.,+'&'((()*('(*+ **))''())()(')(&((())((&+-*+,,..00.--.--.-,))**++,-,))*+,.1485344320.--././--,,01..+*,-12.,/..03211/.03642243010/...-,-.,,+)*))+, ++.,,,+/1.++,  --,*,  "(&(%,('),141033-()*%('''&%#&)((,-**)%##!"&%&**&'*-,*&''%$4%%'*+'''%"#')*+*)**)*+-11.-,/1/..*++))((('&)+--,+--+*&%%$"#&)*+)('%%'))(#!$$"%),-,-&&%$&**)((')+)((&&*---.+)'$%"!!!$('$! "##$$!!!! &+ ('7?/%01/1*%&!*)+,../1-%&))'&''%#$&%(*(''('('""&(()+*&&(&&'()+,***()**+,,++*)))+*,--,++%",/36431583)$#!"!'$$$''(,,*(%&%%%&$#  ##$#(0/)(('&''()&%&'(*,)')+-+*)())*+-,))++(''*!) ,)(*+,.0-++*-/.,*)(,,*('&'*++)**(&&(*,./-*('(')++*)**)*-.,**+-.---.,-,,-...01120/.,:,.12331020/341.+,..*))()*-.14654541.+-1431362//10../.,,,)W(),-,+,,+..-,,)+/..23012210130-,-00+))+,,-/0011.19635545235675596/+'*0--1562/-022012178;?@?B##12349:<5&"##$'$! "#$&-#)369;<:<<743448;;===>ADBDC??@@AACC@A@A@@C@@AAACFGC==CHIGDK)(()ODHIB@CEDC=4-/7?F%FB><=90)14401013/.232.)+.223654566100-*+0445641122/.21/068<@>==<9;;;<<;<=<2BM**)'NLE<50+&$#!!#)5<;50+'(+032136>EA?=>@A>;?DINMHD?:<>@A@@@?AABDEGIJLIECBABBDFGF@AEJIEK*,,*(('LJHIGEEEB?@BGLNQQNOLMV-..^YMIHB@===:4-***3;<<:4/279=GHFCBD@>@BIIFFHGB@ACDGNRQNKKNS*,-++NFA=EHEHMP*,)&(*,-+(MMMLORSSMB=?F',,,*''())**,*LKHG'***++QIA@DD?<<=>CGHGFJJJKJJKJJLLKJKLKKKF@?=<76;EN))(),/-+)(),1598420/0.,,--++-/12333210.+*)'HBADFIJJFDB@=:9<><613 (10+,,++)'((PLD?@;61.)$!")/4.**))')*+*))&&.4/,,'#$&&$$01)%&(#C#(,.-,*'(-0-+(()%"%*,+(,*'&',4/(&+/.*''&%''$"##E$&,331/.+$?E#FFJ%$AAEQK?3)'(5:::/%.0(I(1/1423;9:>G(%',-GBDD?520153:@=>83369854837A=CF"#%$%$lF$$#!"#$$!@$$!#&%$###C9=)-.-.031*+,($!!!*60)$#&'*241,35,((.77164/05851/2574126531-//.010+',750/'A/:;>90*&$#"!"&01$!!" "%$HG?=<:;0)AL@<2.4=7648C:6KND34CHMK>:31/.).54-57+7GDH-5+B+'B4%%('%!$(" .+#(+&/**2.,*')+08:,,09E]X5*&-.,*'*...*I:;-4569;<95;'I249437<==:96:9987;6#')$0JD653&(.34,1DH8-,1/&)/8=61++.>@50+&)+%01.0.&,144245& %)8?31206=511*+.2%A0-1/,3FD344-*(&.687891,.- 4'0,/3<7!&($ ,'.4.-3>E=6.2211)%$+,B-<.9>6233/15<58?=C#CC@<47CB<7788<93/220/-++/9@7598*$.1)+?4+5@1@%+/+,0151.( ('3<149=779>>998;82.++-00*(+,+-/0.)((&(*'$&!2,1+(&$#**$.52*)&/(5:;"$#'+'%$   0121/+)'- *-/.-.,,.12/.///-,,-,+,+,-.-.-+*(('(*)),.,,++.11-***+,+*((*,--.1-+++)+-- +-.+'&*-,,-Ɂ~~~}~~~р݀Ԁ~}~ۀ~ހӀȁ߀ ž¾¼ù¾Ļÿۀ¼󃇂ɳĽ˿ߞÂӣ΀˾ǿͿ¾ƿ㲱žػՀݼƺÿÿýـż¼ۼʫķրŽȼˀ􀆐䅳зۦσú˼öý񂐕߰ȀûʲžǾþ񐻽ɫŸ˽ſĴ͵ҿȾȸʫĀǾ³¨Ɵʺļԩޯ򈛺֬ʶԀǵθѼõοɴªĿպ÷ĵþ˵̹óۀվú̽ǁg뇗񁃁:`_^[VVX[YRMR\1344568:99okdb_\ZZ\^`a```_`decbcda`_^^_^]\\[[]N\[\`abcdbbb`[USSRQRQPSWXVSPOOLIHGHIMPMKMOPPQRRSUVVRPPRTQQONNMKKLKJIIILNPRSRRRONMKJJJIHGILMMOSTPMNNOQSWRONPSUSPRTVXWUQPPQRTTTUSRPOPRRPNMNOPRRSTUVXYWUTUUUVUSTVYXSOOQSSPPRSUWXXZ]_b`ZVURQOMLLMOQ;RRUUTTSUUVUUSSSTTVY]^]`cccfjga\[\^dc```ad45hgeabbb^[YXXYXWXYBZYYZ[]\^_`deeeca`ba^]]^^]`imd_]^afigaab__``__cddeb_]`gke`\^afhdb`_^L_``][[[YXX[\ZY\`cbaacffc`]^b4798542aa_a`_`ab23104878866679:8866799:9777653d23#686677534532edbdg4774346776556568;95 456776799876568:;;96321^\]`_0101e_\ago:offlojd^WTSTVUTUYZVSRVZ\[ZXVTRPONLIIJKRXVUTUTRPRSQMMMKJJKOQMJJJGGJMRUSU\[VTUX_ebb]\fl;>ob_[\_^\ZURTUVVX[^ZVVWWUQQQPPRWXTQNKIHIMOONKLMMRY\]\]11.\//`]YZ[ZUQPY___\WWVUSSQPSRONNNLKRNDLNKPOMQURMKGHPOLIFGK;b=W?>@44K(8InfBHY_WQ][@2Z0R8?WVY]YX\_\YVTQPSOG@@DFKQNKOVWTMJLNOPQSRLLONNOPQRQQQRRSSOMQTTSTSPOVVRPQONOLJNMJ\eeffe24699eQOTYXTPQPPOI@K`\WUYMDINMKGEDFILPPMH@:>KOOQTH84BABEJLKLU`cd`\]\QQ]]^_chdZVb5fe^\^a_bdf3ga`]^^_^[[__`bcikhgecec\^a]XWZ]]``\W[[ZUW\\\]`cdeedfgf6:@@?98869:9=CDC?47Pj>GfSb`hg_dix~ofFE|~{svqxy=ABBIOOOQSVTTUUY`ecZVVVTUWZYWWZ[^_`ce`^\]_a`abehjke\VVWSSZZZ[dhffaWN4,P\Z[[^aba_adeda[_ciqsstL9G^hj`URLoXY`_Y_n<=CPRK@7\3?@EBF.4789989:;<???==>ACDCB><@A:jikm66h77fde5$4cSS]7?DFEBA?;:871075/1555630/2575+! '# !!"&'+<;7< $(**,0/.,(*-..022266546430-+*+,,)'')))+(%$&$"%''))('())(&$%&(*,/*'+,'#!"#&*+)(.3352-./'&//00353.+444//021334310//./0//2212256664454/132--010330,//-*-10/0136643454"#" !"  %##*-/..24'')'17553-##2>%(<2:9>;7;@PVYOD@.,LLHADAFE"$$$(-,--.0/00/16:83100-/24422345569;763369899;=?>;4012005544:<984-&'+*,,-/110256530247;==>!#!+)/6;<=5+"'+(%'))('$!!#%''4568@?<<=?@?>?@CDA@@@ACB@BBBCEC?>?@BEDBLPN&'%DEGDCC@@;/&&.8=<@ACB=: 67985442..0026953684./121132478753002210-*-13430,'(*,1213445569;<;<<ADEGIN+*)'')(?53/-& &%,35000,/000157:@KJCA=99<@@ACFIHFFCAEGCA?<=ACFJKMOOKJKJECCEGHHHEGK%'*+),,)))*)(KHHIHIFDEEFFFHHEEDBDNVVTRPNPPF?>>ACCA><;:;>?;9::>@>EJHFA=?>CPVWOKE@@BBCGJN((JDCDKNOOMIC?=BR-+P)+..*&%&(()))(Q?SST**R(PM'*+)&JJKMNOPRQPMHFJOPRQOJD?=969=;9>C?<99=?DGHHDDGGGKMMLMG@=@B?8BK&&((*00.--,).5:>;51//1.,+*++)*+,043100.*'F@96548@DBA?<85521100./%+.+'$!%&%&'&GACD><=842,#!! % !*$8811I.)('())')*+-/.+,*'&&%#%+-)%&('F"&02/,*)*.00-+('&$%*,+''+++)-21)&(**'&%%#"#j$'*23531/*##%$B=G'&EDGD=1$'+*15593-/3-,/2<;54783/3B'))'$ABD@;77/5A@CD=?=75974456456CFF$$$%)(%('$"%'+,)'**%#$&&%C#*+(,/0/*())('%#".8/%!!'().43*15+%$/=E=80-0052..245412410/-/00122-#(??0-)*48;@A9,&#$%!"%$%(+$#% "#"$$HC;:<8*'<9HC;655721(#*$1A01AEFO2-L;7?01./6-+./,% $&-)&.-+/,11&(39BC2*.=EXU7("*-,')++./,,KD&-88>:95-8%E8:6///6BA;=;67678>C0,1,(.@=88--27602AA4-,071*.24;6,).?81.--+/+,-/,&+/290-62--217<93325>7,42(*/89-%-3**>A=<5*&"%56455=;320$'-&(*4=2'%&$!","(4720,1=>;764/64*(%).,FH2::-02+(.453<;2,-/0**-./00.00/#+(&'*(@243--;A""B=:30676535:?>;>>92+291$%(*+2/-1*190.=830+%@?*40-153,,++&$=B&Z&/00;555138??9697/,13-+,))/10,+,))'%%%'&:'*,)!*#045/(('7+,10-07 &&"&v 21232/.//&%(+/0,-10243/..-.-,,./-,-,--/00-+)))())(*+,,,**++--,+,,((())',-+,,,./.-)&%'*,+,Հ~~~~~~~Ԁ܀~}~݀ۀˀʀ灴 + ;ȾĿ¹݀ùýǿ§􁂂ʾڋîφŹȻúήڀ̴վξƽ¹ĺ̀¿̀̾ռύ섄ɿʽµꢰՇŴφɱʽľƺ̺þ¾Ľ¾;φŻ˽ķۀ¿߷⋶񃔦ƶ󉓋ķľȶľùĿĹѼ̀ҾʶͳʿؿĪþ÷͸۶⵿ӯ¶̽пѶæŵ¸ͽͺſŽ͸ӂĉӿʲӹÞͽ񅡥Ǯʲۉñ;_]\[WVXZZYYRHIPYadeh7778nhfc_^[YXY[]^]]]^bffheccdb``_]\^`_^];[YY[]adecbda\XUQNKJIJLRXUQPPNLMOKGIIILOPQQSTSRUWVVWVSSTROLLKLMNOPRTUUTSTTTSTSQPONNMLKJIGEFGHJLKIKLMNQSTTRPONMJMSSSUWZ]ZXUSSSTUTPNNNMNPPONNPPOONOSTSVY\WTSTVVUVY\^YTRQPPSTTRUTTSPOOQWZWTRNLLNBORRPOOOQRRRSTTTRRRQSTVVVZ_begfffee47lj6nf`__][WX[]^`dc_^``]YSTXVUUVYZRQWXXY\^`cbdeddec`^^^]^^\\]^bhgb``a__]YY^_^`dhd^^cc\\\[\`baabb_[YY[[ZXVTSPPRYYVYZZ\_bdde4452di65763dca]\^]]_b3553575567767;<:6455678646889975654466754 6664553b_[\27hf578642334443ef357655678887888755679<>?=8532b_]^]^]]djf^][as>8ecbdigXPQPPSTSU[\WSSZ_]ZYZZY[\[XQLLOQSVYVSUVXZWXZXVSQOLOQOLKNPNLKPTOPWVQNOUZ_^[Z^dg7@E:da_cec`\VSQNLPTUXVUVVUUVSRUWZXTQTRNOPOOPPRUUUW\[\YOHKTVV,-.[\`a_\XY]YXWVYXVWSNQV[UOSWZYZ\UU[Z[d^VUTPLIHPRJGFFJB]tK752;8\>4JpWURPMGDKRG108(F8ZXWVWWX^f_UTTQRPJC;;@ELROKNWYRNOPPRSRPOOOPQSTTRNNQSSRUTPOOOQQPRPPWZRKJJJNRQQGD]ffhig3443hkYJQ\YVR=PMPMORRU[SJIHGJIFFFIMNLIE??GKNOPJ81=CDFKOW[QORUQGEJRQMLMORPIHJMQMLQQMKJLPTRNLMNOPQSPPQTSQRSSTRJJKOQROLKOOMOWVVVXUOLMOSSRRSZ\ZUWRQWYTQQNMMMRSSUWXVUUVZ\\YYXX[[XYZZZ\^\\]\\]^\___^Z^_\YXUTWVUVUUWXXZYWXX[^_a_^`a_\Z[`b`\Z[^^YVWY[]aca\XWWSSW[YVTWVTSTTVZ_[XZYVTQQUTVVWVX__ZTUTWY[]bhe`_acin7kjmkd^[XTQUYYZZZWUSUTPVUPQQRRRTTSVZ[{ZY\][XZY[\bi566mkhjv=>yqonkkkadd`VRRPQRRTXWV[`[]bUKDHP3A:GHLF@=KETf?@==@BHNQRU\YWUSSRUXZZ]``___``a^[YWWXURUTSRRTPNRSLKMOOQQOLIHHHGHJMKP^`YQLGA<735CIDAIMSbfXW\OMTW_`_^[UVfkffa^]`bdf44faa`aa_^[Y\]`eha_ejlhdc`aef`Y[`]]]\\][ZWZa`][\dlkhdejlk6=>;88:89;;>ABDC?@BB@?;8633527=_>LVF;GKNRW]f8=:;::88:999874ccegcZ+HHHD<22JfD\AVSXccVF|eD{^Simjq=f\`amz@BCEMQOPTXWUTQW`gbYWZWLGNUXWVZ\][]_fdb_ZZ^_^YZchcda[ZZYQWfc\anj^\XWQKVVQTV[`cdabejnibffinnopt>A=647867;:i\bme_TW\^^[UPMILKHCDMMUabcgkljfdbcgfccfgfhjnnjlpprpnpuxspuzz||ux|}~|z{{ysu~~~zqny{tsyuqongiqpnjhiifedgghiihihb][Z\^_bedb^[YZ\ac_[Z^]ZWTUWWUPHwe\QjFJNPOTSTY]cgb`agnqrtvvwxtqqplpt{GGEF`Xaed[VVSL`gd`YQUcklkpyypnopnpsv{yzzwxwplmnuzwy~MPOLJIGEFIIIG|tosz{x|{tu{J~sjhnxxz|yuvtwL~xzKOxsolpwz{|nfnvvx|{snxRSQNMNMOQMJIGGJJIIIKLLKJJOMKJG}{xvpouxutx~zy|ujglnnnpqsz}~wrst|}w{}|KOPPV[[VRUWU\fourgaZVXYTOKLMLLMNMOOH~wqjfc_^imkmqsnmlmjisxAC>PRQOVX^ZlrssnhZW`YXWS[]]QSU[VLa]FAIMGQRHIJR[[VWY\^bdfeaU6DaJ243aEVSOGGJ~eTT^wGGume^agdT`insruypbS`vu]JDA>?SYXY\boeSNY]PHE=r>PRY`Yeul[RKOECKINIPd[QJKP[ntigu~vkjkbcg`]`^\cdSINND@GIJ:Z>EFB>9^d8GQZ_YPLH9ifada[pB<;8946:;:866:;<=??>=>??BCBB=:8;=:6jk787776d_^3ijgbce8ADFFB>97=>94cgf458667kcabec`]__[]^`fe`\\]^8^_a^\^b_\\ZYYZZZVTUVVXZ\_\[[\XSSRTRU\^12a]^addcaZQPTZ__`,,++(;)$"(-./1410-,,*''&'*+,+*+-..0.,-.-+++**+--,,+++***+,.//0.,)(&$###$$'++'&'&%&'$!"#$$%&'&'('&&''())'%&%$# ""#$%%%'(())'6(*('&&&$$###!!"##$&%#$&&%&('%%%&&&$$&&%&')**)(&&&'((&$%$$$%#$&&&((+)())**(()++(%&&'(''('&&&')++)&&$#"$''&'&''('&%&'h(+,.//..-,,/03.*)(&&%$&'()++*+/.,)'')((**++***%&+---./221121110-,--,+,,-,,-.//320/0/./.+,./0122.,,//,+ -.//..,)***)&''&%'+*()))+-.../-/.-,+,,+-..=.+*,-.00#-,**))((+/0*)+.521/.12+&(*))++)(),/.-+*+,(%%(()+-,*+,-/-+.-+(()())&$$()'$#&)&&**'$%*...--./0!0.-.0//,*('&&'('))*++*())(*,.,))**'(*)(()+.,+,...-'"$(('$&()*,,./-+)&'&&((&'(+*%%%$$$&$$$#&*'#""!#"$5& '++'''%""'*%##/.,+,,-/3/))*((&$! #')'%%,-(&'(()**))(()))+,)')***)++))((*)()((,/+'(((+/-+%$37554447/%$&"!  "&$"$&'))&&&()'&" #  #$%()-.(')+)##(-,)))+.-(&'(((*-))-,,)''()(&&'())*+))*,++---,*'((+-,)'&''&(.//.0-)''(+,++-/0-'+,*),-+**)(((**+-.0/.--///---./.,-/0/01/G0112000.11/.-,,.,-/--.//0/./01467633320./2320//22/-.0002430-+,**,/0.-..,=/31-...-++.--.-,-21.+++-.0138865769<988741.-.-./..--,+)))',-*k+,,++...-/0-,.../269779@! >88977834530-.,./.042/-.,-/'! $!$!$3!" !$%'+,,-1.,,+,+.0202555653330-+*()))(()&$)*&$&'())()))*)&&%%$%'(')31*$ $)&$'(*35,,0+(*,3321/+,57442101234211//0/0/.0/0351047:85322352/030//.//..-/3300276<9533677!! "" +!*/#$'(+-14'''()(6763,#-<(7(305<:2&IAS,J64A@=B$:487=D#$&&,.-,/1110-28<61020)&)032254333598753366512:<8973233-3=;58@;320.)%)'$&(+.23356:<71323678:;0'/7.'"#&&%$! !! %%+4669;;<:8669988:<;<=?>:<>=???@CC>>DHIIFC?=85@ETA>B?=9:67<==:898779<;:;;:::61/03436::754212565313421//00.)$;540?()++,//.037;867;>?@ACB@><7;@EHK()'%C.(+*+'%#!(,+,)$%,/016=DMOI=98;=<>AADHKIFCDD@@A>=>=?DHJLMKKPUQMOMGB??CEJMN*,+*)*((())('IA<:>CEEHKHFFC>=DKNR+OMOVRMQOHA<<@FCEBCDDFGD@@B>?FLQ*QJECDJQ-.QICB?=;;=>AFEmB>=@ACHMJIGFIGCDIKLKKMNMJGGKLGCH'**,030-,/0.39>B@840-/0-*'))**++*,,(KE@:541..4411342100//42"'+./.,(" !#$3%$D?@ABA=CG@<9845BDeACD=<:63.+4>:7828HH"#$%(,,'+*&',06:<;>7+$##%'))'%#'++11.*('&)*'&"?$'$$%$'&'-22,.0)&)2?F;2/10-0../36530101143221-$*E=,,+,.37:203244)-120-("$/%'-*%*.26'!,69<6559<;4058<>D@0-1% :EJA+09>/0HJ>554<=72*4/-+2278340.,*.32,((!,28@2/:,+.6.279840d395*2413993+)494,05775-$%.&)0*9CA221,*+,-142/-&!"'++*//2/;<=><81/3.-,,435-./10)77(#),&,-%((+//-.-//-$'!(((#$&>1*).;"#EB:62//33,2:=>::=:3)0=?3%!"!!+../04>8++25.&$ :!,,/3/7B;0-*-%$*'*&*70*''+1:<4377:4363131/45+%*+$#(-*+ ."&%#!/2$(-3/'%$75461+4!!#!  v211-+...,,++-.62011/-*,+('(*./-**,../0-,-/-,+***,,,*)(('((+-**+,)&'&'&(,,,+,///..*$$&)*+,Ӏ~~}~~~~Հ~}~~݀ˀЁ ǿýüÀþ܀9̄ɀ»¸þŀȸĸ͈ԍºýſ¹ɺ̮Ƽ鐨ʾþҀ¿ȼ̽聉ŽοþлӋâ±Ķþľ·½Uýȼígί ʻԽյƷ˻¼Ź׵׺ʽƀ³Ⱦ;°;Ż̿§儅ѹݺˀȿʿ޹ȼſּʾűǰç͹؃ü˳Żĺ弲ʽ׻၍􌎎o󀍛{\YX[ZY[\][Z[YSNMPV\_cegjlnmhfd^XTTY^^\[\]^^afgd`abbb`_^^`a`_][ZYYXX[]__`dhfb`\VQNLKIHLPMKMOONRTQNNMOPRRSUTSRONPQQSTQOQQPOONM'PQQSQQTTWXXYZXXX[]\YWSPOONKGCDEFFGIKMLMN KJLNOOLJLMOPQPOPPOPQPONNNONMLMLKKLKKLPR UUTTSSTUY]^[XUQONPPPRQQNLKJKKMNNPNNPTTRQPRW[WTTTRQPPPQUVWXYZ^ehgeeeca``]]acccb`^^^ZSTZ]]]\[bb_\XVWXVUUTTUTVWWZWUW!Z]_`aceghecccb`^[\^\ZZ[ZZY[]]\]^[Z]`_`_`_[Z\]\[[[ZZ]^^\\]^^][ZZVRRQQSTVZ[[]\]^_aacee37967<:5ihdbbcfgcc2434543468777666778999879:;98765fccb][_268756ic``d55jif_^`d577645565222ddefi6434455666544676g8;>@;6322b``abb_[^cca^\c77d_YSTVTQPOPSTQNQUTSSTVWYYX[^__YSNLNMMKJHDBFLMLKJNTWZZ[_^]ZTNOTQJFJNNNPOKHJPVURV\ehec``^^dgihaYUUSPNQVWVVWWVWUPPUYYWXZWTRSPNLMQTUUXYXXXVNB9=ABFRYWX\]ZXYZXWUOLOMOTUUX]`VQUX\ZWWZ_\Y`bZVSOKDAHIAAHLLPMHQWN+:?CVF6PAJEHME8>GKA3BTf8UZZZYZ[YWVSRRNKLLLGAABBB@?=>><:88679568N<5ZS[aZP[UNRQSUQOKHCGO\ffa`bfeghga`bQcbba]YZ[`gglpoqrswyxrprsux{||}{|}w|{vuutrrxF{z}zywvrooledeeddfgfa][_^ZY_eejmic^[YXWWY]]\\_ab`[XY[ZOHIOHSZ`ikaYZY^fhjoopnosvyzxwyyxxrihiilqtyxqf`b`]^UQY^dhh`Yemtw|zy||z{}~|wuvqmrx~}xz~I}CINMKK~||NNPROJFzvpnqxsZY^oy}~yz~JI|{urpppruz~zwwocemnqzDEFFGJKI{sqlgdgkhloovxvqjfgmrwtvyyy}~J}yxxzFFGDIORW^]WRPPSUYbjihjc\WUTPJGJOONNKJG~}|xvvreakuz>@A?=@CCDDA>FNPMNUYVPJF?@EEHJMPNIzz~z{veWG>A=>@A@IMD0L6CEPxT_]ZXVSUWTRVXWUSQOQURLIF@FLKGJPKFOZ`]XXZ]c^VRNIEJPPPKLQRTXZQOSRKEDEHIGDA|DCBHKFIT`jiaUMHFFDEHLHrc[RQLJFCQ[SEJJVZ[lnaTP[^_`uNTJwqwz~}yskiupokaYXZl~skgbrDJIFJKNPMLRLCEOUZafih\OJJMMKLKGAFPSOPSRSQLIIIGA>@ECBFB>BGISfg_^aZPT`krrkdcaWZX[Z[^ab][[]\Z[Zjja\YSKEalXSNJOV[_\TOMRKDEHHJPQH>??BENY`XOLMJ:gc\Ydb;@BHG;AB=?@?1;W00/27836::;<=>>>:846;=<;:;>??@><<<=@AA>=>;769;;7jk8977:95dbedc`bd38@BHIFC>99=<6213569647kgddcdba_^[Z]__ca[]`]]\^]]_behha^]^]YZYVVUTSV[WUY[[TRPSUTX\`d54d fihec`XTTV^ea>*((***+**))+*&""$(,.00/112100.+'%$'*,+**++*,/0/+,,--,++*,-,-,*) *+,...020---*'&%%%$$&%#$%&&'(&$$%&((&&%$%%&&'%#$$$#$%$#$$%&&('(+$-120-*'&%%$" "#"##%%%&&&%$""#$%%$"#$%$%&%%%&&%$ ##$#"#$&&&%' (('(*+*)'%$$% +$$#$&%$$%%&R')('&&&)-,)))'&&&%&)**+,,-./.,,-,,++**+,,+*'&&&$!!$'&''(/0.-,*+,+)**)((()*,*)+++-/0-12342/,--+*+,-,+++***,..,..,*++,.00/,-.,+,,*)+--,++-..-,,.+(&&&'')**+++,+,./331.--/.++ 0..,))*81.,,0.0/,+,..///0/.---,*(),-/-+./,*((('&\(*(%&(''))**,,*+-.-+'$%&''&%#!!$''$##%),/003431,(')($!#&'&'&$#%(**''(&(+120///..0121.+))('%&*+,++*''*--,--+)()(&&')+,,-!,)%!"""(%$%%%&)*)))&$%$%&&''*-)%$""#%$"%'$#! ! !$(&!"#0!+#%"%(#$&")47+-..---,+*())'%%##!"&(&$$*-+))')+)('((),-,-.(&(&%&')*))'&'(())*+-.,(%$"#v"&*07986511571.)%  !#$# #'*-*(()'&$  #!!! """$&'*,)*+,*%$'**)))+,...-**-++)*,)+$('&&'(()**'')++*)+''(((),+)'&'')+--.0/)''(+././.0561+***+*)*)* ,,-//.---/0.-.0001310001131/./.,--++,-./.01//./0147886578757;>>720010/00/.06:2+,,+)**+*++*+++,,,140.-..,+,,+,,**-//.,.15650025:;235856:63440//-.///-,+)+**++**,-.,,03f4135114423467447=@=93))./0002321-*,.24340,*.6F'#5%  %$.0!!"&''(+,.22-.010,-25366311//03-**,+,.++**'&,.*('((('%&'(*)&((%%##$%05.)' !2# !')+02--054)+130-,*-462221/123543230(.111-*-24586788410/1510210.-0/.../1211489375568 !! &!*/*&'&'*+-0'()#-462,#8(+7(.(/8=902@M/K1;F=6AF?99:?F%(+()11.24232+0;A7-,,-/.)&')/884685433322444225767:965864;;52;=>@DHE?;<=?ABCEGFC@ADFGJKIHHD@CB??>??>AFHIK%HIBCMRNHDBB?>=;:95456999::7214522699>A;753211123322345310011*$#'$H036=>50205;<>>?BCDDCCDEEEC<9779;<@EFC:4-()&%*%!$*.01,(059=@DCA?BEGFGGDBFDDEDHHHIFBAA>@FB104>?BHIEEB@A<68??AGLJPVQLKJOPMN'((''KGIQQNQQ*++TPOONNKKNMMMKGCC@>=>?<>?AFGB?;878=:-$&<.51.-,*+,*)+--+*)&(,*&%$D#%''&(,)G%*041.-.031-+)&$',++''--.02,*--)%%&&'%%$HDF%#!%)&H(.5;;7/*'HH%%$$&)'LKC84..+*'&160O(++332<=4,)2444@P+.(?;>?B@>=:8?FHIE:;:3000:E>964?'*(%''**()/*#$+.16:=<3*%%'((*)'"$*,)*+)*+'%&''#! #"!$"!#%,64/-/+&)17;:620/++*,,.032/..11010;:400-'#7=.,)'*.265/+),(##%&'**$"  !$IDCB@9;>@8*8?39=0*04232782.33/(($*0*++61./"*12=>@77I@2.+)(*&'&,521/261*$-357931:&(>631//27?DC:0+7@=:>C;/-,)47BD6364*/<899::73,/-6=.'0664610.*''.0(!'02/'!)62,.051,19<-,,&+,.//.044//01|*').,!"+.035;<;7/***%$"#"#.+'(($"(...35407=8?A614417=90--/.*).(  "!!#',/+'%&$22..2. 22/-..-,,- 631210.,,*'&'(*.-)*-,,,---./143.-,--,-,)*(('),)(+++(&%&'&(*+./13 2/.,(&%&*.,̀~}~}}~ՀԀԀӀ}|}~~~ـۀĀ Ⱥ¼öƻ¿¿¹ƀ½ȽրþƸָݐչ펞ҀǵĻĻüĽɷ½½؀ƾɻć˸лŹĿþɴ늓ǵ䴸݀ȹδſ»̼˼ӹĨ̀οѶù󇌇ƾ른ڱƹл¹ĶŶĶ仮ĺĺ¼ŬÜȽǿ澤ý¿ǺƿӺ̱м׿ƾƴ̲˰αͿû˿θϹ¸ƚ򐰶ɽƺ呙ۅi󅕥h`\XX[]^``^ZY\\XYVTUZ^^abfgggfhhe`]^`a]]^\\[[^bddbcaaba`_aba_`__][\ZYX[]`ejfb_ZXXWQLIGIKKMQTWY[ZURSTTSQQQOPLMNMLMNLIKKKLNOMLLNSUOLNQWY\__beeb\\chiaYTQPNMJJNONLLNONMMNQSUUUPNOMKJKJLNNQRQPNMPRPNMMMLJJJIJKLKJIKNOQSSQSRQRRUZ^^\[WSOMNQVYUQMJIGGIGGJORTTSSVXYWUUTSVUTUTTVVTTTW[^aaa`a_[Z\_cb`[WXZ\]`_^[\]^\XWZ\][Z_ZWWWTUWXWWxWVUUUSSTPPSUTSTWZ[\]_bcffdggca`cd`\Z[YVUUXXVWVSSTUWWY\]\_a\\bda_^]^]\\\ZX[^\\YYZWSSRQQRVZ[[[YYZ[ZZ[_af8;;<=?=p>D?755gd`1343115:96b14::9::8899:<;6ebb_YVWTTX_cfb_][ZX\a`^^_``c479:977;9653432cb__`1464gig432ce46775568;;96443dcceg4eb][^cbYV[\WRSWY[ZVUTWZrYTONRSQSQPQRUY[[YXUPKIJIKKID@>@DGEEHKOQV_\XXTVVPMNPNKIKMPQOMKIIKMIHKIHOVZ\YUWY^cceijeb^\ZXTVXVWYWSTXVQPQRRTTRMKMLJKLPTVXYY[\[\^\UF::@ISYXVUTRTVVWVUTVUTTWaaZXVTTRPQUXXWVSMKKJGBFE80>GKNMLLEVC 0)/S^F>_8JYYG.7BO_!2BoHPVY[YWVSOLNSPKLPKIIFEDEOSMKKMRUUSPRRNKKLNOQTTTUPLMIKMNPQQONMQRPNNSRRNE:_hpAQ]ghhjjji67543cbeifghgXSUQQQJIGPRRVYYQIHKRLKLKIHGC@FLFFD=:69?BECDGIIKLOOSPJGHIIKOPPKIMUVQORPOQPOOF84.=OUPQNPOMNMLKNNLNOQQNMMGYCKZHSYWSRQPONMMRSQPQSTVVUTTW[XRQRTUTTUWWVVUSRSUVWXWUVY[YZ[[\[\\[^`__]\^_`aaZV[\ZXYWVVY[[Z[\]ZYZ\]`fffefghjkknw{ph_\]\[]\X[dlg_ZXRPPRUUQNLMONLNPSUWUUUVTQQQSRSTVTUYZY[`ijf_ZW[W?Y8fddojcclni^XWVUVUWYWZ__]WSQQWXWTSTVXW[adbacefffddcegi4jjikor;ui]]\dgc^_daYUTRMRYXRSWZ^gzDzng^\NNKD;6ef]jm<=:9;744799942\GJZ`]WWVX[]_f30578656663554310aabhQoQNKB8\:;UIfm8FUbcZULPjkNWlli<|kiooov|AKPLQWUQRRQRMFEOSMGBBFJID?;?L[ZZ[WURQQQOTX]^\\Z[aca^_dd\\_jz}urkhlmf][ag]Za`\]]YQGHWYZ/]KDRd^S\0./7?:\KRWX^dd]UD9?ABMRIEKWcieghhhklkihb``]_ehgdekqvutsswxssuwyxxz{}}{|~}{yw5vx|F}{|}yvutqlnqkd_\][WUYYSOPV[ZY\`flc[\^]\Y[\^\XW[^adbdjpu{xdelqu|p^__\fmpquursvvvuqprsu{NKvkbguDDBxo

    JEz{BC{x}zz|{zz{KNLKJH{z~{yzvuz{urvILMz}ywsrw~PZVysy|~RSLKLKyttvusv}{uv{{w~KKPLyt{{ytkknrz{vtqiabdlu{{}CJHysqstv|}}z~~wrnnjgiiilmkmnnijlmqv||vsrkmv}~zxEHIFBBADKPWafcWMLLKIOW``YVVUY^\VRQOMNMLGCDA~>BGQWZ\[VSROQW]\YYTWYWWWSSVXXWRI@ttBHOPONNJF{uphhnnprrqwxqfWQQONKKPZZQKFCFGLiT\\[\WTUSRUUTRNLLMTVPKHDNSRPNNMNOVZXWY^e`TNQMIHOSRRKMNPUVQMQRNGCCHLJHFDCHGIRPDDMW\][PJHGHDGLK`RTMKLOLPTSVPOMU\QXgpi^Z^cgctDNHoemx|wvt{~rvoc`_`ksvwnp~GFEICHKHMN}DPRMKPROLKKLOLJJGECBHIKNTZ]RIFFFD>>@=y==yGNKFRge`ebWQU_dnuj_e_UZ]`\Z\be_\^]\ZWV_d^XVOIDTcWNKLQWYUQNKJKHDIKJMNPB[sFzzxHzxpr~Dsok`hrxnysi_UUe}i][_^be^oqfYJD_ia[ahc]`pwtoh]`i`XT]d`^\[YXMHXOJTYTSJLWO[Y[g`j^dwqUMG>ABETLNQTIOW^YFIYcX]ah}tcXW[]XU\r~n_^]hloyyu{]G_lqzEx_\a`Y[Xpvh^YPTZbih`^`bc`XTVPLOONEGkiYQNSOH?NWXpgVYeh_izufcVJGHVfwqb\Y_acbaWVU[pr_UVUKM[\`c`QZaMW`kln}i[JAABBGKNTV[cmwjb\\[WbaXXPLQVZ\baPNPHEHakhXMQNMPZZ_[ZZehd0-X3BD::BD;HD7HUK?shw|rtbWVW\Y~M|ofbYZafWMNWWTQXfh]XNHhdDJLU]^c\d[JPYPQLCGKLTbljig\LIJ=?YCABvCPQNNE?JMFCHKJGP[akqkcVWY^VPQZhfJ=EEA@@9ga=PRSYc]USWPEF6U[]VdBFHJCmj1MQ@6K-3+**L358;==<><<;=@???=@AA@?;9;98668<:kko8768:7gdcdea^_`5>DHGGFA=9::622357=:58::7idbeg`WVZ[[ZXWWZ[XZ[ZZZ\abjohcceebb`ZYYSTUVVTWXYXVRSVUTWX[ai5jkifc`YSW[^bd+)'(*+--,*'(**))(&'+.--/..-,++,,-+,,++**,.0/.--+,.---,,+***))+-0230/.+)*,)&#!"$$%'(*+-+(%%&&%##$#$$$#%&%$$$#!""##$&%#"#&)&#'(*,/100221/038;60+(&&&$#%''&%%'&%$#%&''*'%&$"!"#" #$&&%%$#"###$&%$$# $$#"""$$&('&-''')+,+*(&%$%')+)'%##""#!!#%&'''(+,-+)*))((()(1'((+-.00.--,**,-.-,)&&'+,*'&%%%''&$&'(((,)(**()++*A)))('('&((()*---../0131-/-+)+..-,,,+*()+,,,*''))**+.-,-.*,/.-,,+,+A*,--,+++)((&$%&(-.-,**+,*++,,/ !;"'$/0.+ +/..-)(),.-+***)(,.+))*+*,/.--.0/...///01/-*(*,+(&()'$%(*++)'(*,,)'%&('((())*,-,*)(%#"##$%#!!#%$##%'(+11/.-.,)''('&%%&(('&%$##$! "" %*,.-++,/331241/-+*)'&((()*((*(&'()())(&%&&$$&'&&)+,---.///0/-'  #&&%%$$%&''()*+(&%%*,)*'$" !###$"!" !"$&"+%) c($'%4'10&!'1#6#)...-+,*'&')($%'" "!")+&$$%(+,*(*)'&&&''(*+**(&'%&''())&&%())((,+-,$3:@'058960/2310//%"# !! ! !## "$(-)()(&$"#&#" !!$##$&&''()+)&%%&&)--+('*.0-,.-,-,,-( $)()())('()(**)*)++)(*)7341"'-+)((-))())++))*+,---,+-.-)**+,**+,++,,+++-/01/.-/0/.//./110//01122-,//--.,,-.00/../001/-./037898889<=<>CHF>:3121010.07:620/,))+-.+)((+*))+,--,.-.-***,**,--,..-/26741./14(:#>:39622i5760-.-+++,--.111.+**-/-,+,---/143225655543455578:;:82--,131,,01,,..*.52,-/159BH#=51,+%$$!24078"&(+*-/.-/2554566552*-.+*-0,))+,--/0&#+-.+*-,+,*)(%((&&'(()*$'*&"#$,/-.,&$$#! " %)*-.-1;9..--.***-264101/3655533442--//,*,18435.*-,0/121020/0.../-'/43787645734*#)130+++,-,,-&&()!/*44/'< "2'<=!,3;<75.0C?,4?=<#H>>A>>BE$,/,/30,--./+'%+.,($$()(&#!$-655531///.,125646558975599458996<;:655238<<;:=?A@>?@DCA@ABBBABBCEIJJIGFGKLIGGGDCFECCA?@@@ADHG$JHGHGKNKJHEA??>=::=;632332121.,-1433568;844664101222330034355678<>;139<>@9134269>@BC@@BABB??AABDGKR++ND<43:D$" 86;!'#;=##DA@?>=>@>ACCF)+)('&LMOKHC@HLKIGDBCCBCHMKJNLIIFA?CKNQ)++NBHEBFGIIHC@BEKIKJFGL,2/OE@=AFHJLU12-,-,TSRPJBAAAB@AFDAADIMKF>==@GPWPGIOOKGCA><737;@CEDIMIGN+.+MHHEAABBDIOLGLONSVRKHKJHHJMMKJFB@@>>@??@>=>?=;=>>@EIFB@?<>CFIJKLKFGJIHDBFLMKHG%'(&GED##!#),05:7.''(&%(.43.-.-044/--,***)%"""A #(.10.,*)'$%(-P,+*&(*)**((*,+*("31 %((**)&GFFC?<:66:;;;98::5,"!##2-1//1.++)(++**(,.+(&GGG#).,*)))+*./-,,062+(*)'&*,,,(*++./,),-+'%$')('&&LI&(&'-,%%)0233,)(JDG''$&**MKI6.1+,./,/0.3.,,36-08>:302797BH%+'728>CB@?A>>CHHLB>@;>F(&E%&!%'&)*IB$,.*(,-*(&%%('%''%""%%%(+.2+&$!> <#'%"(63/21*'+028<6/2/),.0-,/571/1221/.560--*'#.9.)&'+/1/-+*)*&$()'((*!(9$;=<&IAFH?9;C%F:::28=EN@;C>6EE3.-6DGEHD62143562;=61)#394014302;@=84-3<3,*/63211//)"+,*-1/0((0)10/96<03EA/+)$%$$/*,/1,K-183'*36.002>D<4//22.,03/-//113,*+0<>1.00()10032).4'07=;7C@6/&!"#$'(*..16;A95345.21+-*)*+.145**,&&'5?>1*+)))..2-)*1-)# !"*$41>E<<2+))-,C*?831+,16-'*1/+)-35.,($99$F)(-224051&*/*,)#$()/9?=<:2(&& #!!<#+,+,&!()$"$%# R&.18HD973+-/4/,+1:7&!&%"! 20 +**-2.)*-(!#)-.(- "$!52!! O1240.,//,*+*30/01,'&''&&%&&))(*3+./3830/00030,,+''()(())**(%%('&''(,14530.-)'')*,-ր ~~}}~~}~~~Ȁ~~~}|}~ـۀ。΀Ɓ ƻȿɼþſºþրſۀ탊ȾĽπŭݘߢўŢɀ¾Ʋȿ¼Ŀɵ苠¿¿߀ƽž̀ϽȀǾлɷľ򊘛ɛؤԑ¸烋Ȫ킌ՖوúϲŀݯǿżN섆؄߀򁇃󀅇ľڂ׿ǿ¹̼낅þǻ¹ͷŽعžôږ­ȹؾޘۃǾϺƷɵ޺ɼõŸмـΰŽ􀉋ǫѺ;ȍՃ´ǬĪꄋ +8c]XX\ZW[a`][ZY\\XVWZ]_aaaba`_``a``___^]\\]]]``acdcb_^`baaabcdfgd`[Z[\^acbbb^ZVUXWSLKLMLLMNOSXYWWZ_^ZUSOKLLJJMNMLMMKIIIJJKMKIHHM?L=@HNRV[]^_chd\WY`ebZVROOONMPPPONMNQNLLLMQUWVWVTPMNNNOQSUVTPOOOPONLKJGFIJJKKKJJJKNPSSQQRRRSUZ_]ZYWUQOMPTXWTOKJHGHIKNSTSTTVX[[ZZZ[YTSTTTUWXXYWZ_ab_`ccb`baa`][WVUUZbdcbc`\`hhe_``WSTSPOPQQRTTTUWVPUTSSSPNOMKOQSSSTVWY[bho8kheee_\`b_[\[[[\ZWTSTUWXWY[YXZZX[]^a`a``^\]][ZYXZZXWWWYYX1Y\^\ZXVX[[\^]^`5:;<<;;;@HI>:8:=<97if334544e56212464578765cbd]ZYYXZ\]^]Y\_`3444ga_`dg47;BB==?==94333db`___`abda`b246679:988767998654gcbdhjihhga[ZYWVY[WRRZbig^WUWYXUWUSPNONLMPPQRSQYRRQNMLMMJGFEDCCDEGJLLHIPOJKKKLQVXXX[YTRUTQONKIIJORUXRNQTVWTPPS\``aa_^`_a`]WSU[]YTQUVSRRSTSOMMLLMOONMONQTWXZ\\\^`ba]ZSNSXWRPQTWWTVYURRQQLKQTSWUSSUVUUWROJCADDD@=E@5=BANM3>L-8-3nK}phMVOOZ^[P:@@<5LdEOVRMNPRQMKMLLOLPY\\XTPJJSSNLKJIMQNQVRIGHKLNQQRRURNNNJGILPPLOSVTQORRH7RZ:67CCCKHDFDEGEGFGHIKGEDIPSOIEKQTTUWSMPPMOQQNLNRURRQSQNNOPONKHIJMPPLNKP6CdJOabVSRSQNKMPSSRTTRQRRRQQRRONPRSSSUWXXVVTRSTVWXXYWY\ZZ\\]]^_\\`]]^^\^]\][ YZ]\[\^[XX[\Z]^^]\\\[]]\ahljnvtps}B?rha_ba_egb]WX[TPTXZWRQPQQPNMNPSTTVTQPPNMPPSWYYXYX[beda`\]_as21Ml___`abdebYVVTSTXYWUXYWWXTSXZ]YRQSUY\^_bdcdgcR`mcbdddfgeecen?>qliimnjehpgX\`SKSYVTWVWY\fpyoe]VNCBBAA>hbel:BFMPNROOQV[]ZY]```ddb^_]UQZWQRZ_YVSTTVQ^^SRWZZWTUTVVSSQJW^[ZVSQOKIPWQHJLOPQWVUZ\TMEEMUXH@@=96:;:67759;765NCOY^c`[Z_fh35646798678:;8556531__aaNKhJFmqq;:<>?=8N-+B,47321/YaSBX`WQLHSWOHDKU`gcdfhmonldmkhdcjopqqqpuxvsstvtsu}~~}}zILKGMMLMGragiqz|zyttxy{xvvxrjd``_[URTWXTTSSX^]WXY[\]^aca`aa^\bddhjknuvmijorvy|zvurtuutrqtutqlmoopKMNOMNLD}z}~zKLGGIHFFHHGHKKH}yz{wv{}~}}yzyzHKHFGI|z}ylhpy~ORN~~zxvtxz{FHJLOOMK|su|}{~~wurpty~zvrole`cjnuzzx{xrljkjimqu{yruzzzxy~~wsokgedbdegmqqpssruvx|~umijovz|~}z|~z{HGEGIHDAEIFGLS[b`]ZTMHFCHTWYYXXXWVWVTPOPQRSQLQWUZ^aca_\YZZZYXY]bda_]Z\\ZYY^`]YVQPLKLOOIGG~yvw{}sjfhmtxtswrf[UPPRSNKLORTSPKJJJP>Z[ZZ^ZYWSRPLMLLMMPUSOI}EP_[PPONMLQVWYY[b`XPNRNHIPQROMNMPRRNMOMKHFGMLGDGHHPTLDEMYYSLFGFDFHDDJL{jLLSILRPINMYcXVVRPNVclppkhf_^lqzov|x~wwyyzvzsf`bchs}~upjsy@GHAGJJIEGOROJJFDFIJMMKHDCGKGDDLRVXWRLHJJFACMLJRUPILNOU]iqvtlfc`OAENVUOrg:<<@;jguAJQSUTPQPPKE8IY]]s=t>E<\g=AMLKU,002/.468:<;=?==?>@AB@?>>?BDA?><=?@@@BCA?;|98767;;lm8:8548:5f`dfa_b`d6>A?ADA<9:7212357=<68<=;8jdaba[XZ\ZYXXYXXY[XXXY[\_afebafihlj`\ZTRVYXVWVY[YXUUVVWXY]`degjjgb^VKQ^b6,*''))(*-+**('*)'&'*-/ +.,*+--.-,,+ ,-../.-+*,-..///-**+-.010/0/,*(*+)&$$#d$$&**))*++*('$"$%$#%&%$$#"!"!!!"$##"!#% %&')-./0254/,/4860,)&'&%$%&'&%$%''%%$%'))'('%$"#$#$$$&)(%$$%G&'&$$$#"$$##$###"#%%&&%%&''((*,+*)(&%$$%&()(%###"$##%''()*,,--,-..,*)()(&)*++-//--/00/00.,+'&&&%).,+))(%',+*())$#$$%%&'(()+***))('%(*+K,--014.,+,-)(,.,*-...//-*))++*+-/.+*)(*++--,,--,,,*+++-,*))),,**))*,..-+**,-,-! #)(!//.&-./+**)()***)(-00/-,,/0 -,+,,---./.-.+0..034420/-)('%%'('%&*.22,'&(**)*)'&%&'%%&&$#"!J""#$%%$%((%&'(),020.//+*+*(&%$$#$')()&#&()*(&&',000/++.-//,)((,-+(&)('(())(&"((('''(*,-.//./000./,'(*(%$$%&&$$&' &! #&%'(&%#%$#"%&"0'3#H=4$('(-/.) &3!',($&())&%'%$&%&+.-)''%#('%$%$%(*(+/+$#$%')*)*+,*()(&$$&()&'),+)(+-'-7%+/15789A:;:97555422110//-&#  !"" ##!%'')*($!!##"!#"$*'$%##%N&(%$$',.+'#(+,.02.)+,*+*)(''**)*)+*(()***('&&')*(**.&(1!$/0+**+*)(),-,+,-,,,++*.))*++**++,,+***+,-..//-.1//0///11./0./00.//.//./0.,-//..-.//0/1215;?>?EEABG%#?7325532336840,,0,),..-*)((***))+,--..,*,)())+-//.../344220/01? -;20//024550--,+,-.--//--.,*,.1/+)++.011243355(-:3134455565473120121/163+.2-)/2/.//036$%%#$'*+../35765j6631342/2BJHD;78:872164.24431.-)"$##*3 "!&"&)$!#('%%*/58568:>A?==<:759>==>??@B?<>?@?>>BCEFEFJJKOMGDC?@FHHH')(LHGHIHI&)*)*';,7ACB@?>>=97555300011///0256234321335457545642678:::9:?AB;745:=>?AHHFB?>@BCA@@CCA?<>><<==<==?@?:6457;><::6.'! $20..20/-*)'&'()*)*.-*'GBF$*41(*+**)+.-/0042.*)-*&'+++)())++*()+)('&&))&$GGKL('%*-*%$)0/,(%'&F%'(%$(*LFD<)*1)+.-(++3;221.,+08<>>:8622>@AHC9=CCCA>DD??AADB>B?73569@EC>;8?D#'&"%&''%EG'+,*''$#$$$&'&%$#%(%$#'+...*&$&&$!<9!(-*%&/60.0)&(+2235-*.,,142311351/001100462.-,*'+73+)++/0..+(''(+-,+,*( 4 ::9JGAMNFBBBD&A>@CD@=?94GH823:LL=79;60003-0@=970+)-2*('%#%/9<>:3+002-0/.21///.-/! .1,.0+01-240.:9>9-E,&#--0;770/*K..9E(6-96/06>E?1+.3<5,0>A:8<<:/7JHC#&=#.3.:&D/,20++18C=300)*/0264.14552.+')+,*''02-'(2*$%0/,<=.-04649:531/-')27442+,.0150-'.67.$(8>>40+023--,*+123:7393(8D+8'+04-2/671.14,,2.--&-53y7;4(16)((%%"$)'%'&"%*)'**&"#%'+08;=;7534*"$*.0+94!629!%(),+((''$!!-0,85"+.j23/+/0,,---21000+()*(''(())(*)(()*+-.01/-011660.,(&(*)()()+))'()+-012220-+(!%+,܀ˀۀ ~~}}}|}}~~~ƀ~~~}|}~ȀဈҁĀʁـƀȀ »O󓘔ƹƼþ¿рڀǿúƴ⡍ͰļȿĿʾ½ƿƿФͺϮҴĸĿ鋫¿ĀƾĹк¿¿ɿƼ썥¢πوϹƬ၈✯ƽ񁅉̸ÿր»Ƽ􌚪Ͱö솊ºʾſ·´ဃ?µ³ļêǪIJï끚ܶǷóɪނ̽ζɸεʶ¼ŷʿù񐦷胄ۀϳнĽúܒֽȱ򰚢=:9l`ZYZZ[^]^_][Y[_\VVX[]__^ad_\]_`aa`_]\[\]]^^__`cba_YWZ]^^_acdhkga_]ZY[_aa`^\ZVUTUUTNLLJKLPWZZZ[]_``[TMIKLJJKKMNMLKIIJIJKKKJHC>4rtKJIIMOPVY]caZRPQSSQPNMNMLKKMMNNLJLMMLLOQQSX][ZZVTTR]UWRONOQSRPQQPNKJHGIKIHIHIHGFGGFGJLNSSTWX\]\YYXUSQNLJLMMLJLMMNPQPPRTXZZXYYY\^`_[WUTSTWY[`_`ejfaabcd_YWXWX[ZY]`___ba_a^[[XWWUSQSSUMNRRTVVUUW[[XWWTQQTXTRRRPOOQRRW^f6654hbTV]ccehffea^\[ZY[\]^`cca^\_bfhggfaa`_[YZZXWY[__^_^^_^[YXXXWXYYY\][cm78:=B<>BE>:88=@<7hjjfbc231`23422333ecbegj4faab_]^^]`c35hf7:765445ge59::=?A<7764783ZT24ea`a_^]\_b2578779<<;:887764455hbadgiiigfgd_]VRX[[WZ^`h5gc^ZXXY_]VUTSOLLOONNLKLLNOPNNTTMIHIHGGFFIHDCDHFEGIFGMSUYWUTQOOPMMLLLKIMVXWWOMOQSTQQRVXZ^^XTYZ\_\UQNPTURQVVPPSVXWWXVVTPONMORTWSPPSWYY[_``bccdefa[YYWSQQTWVRPQQLHE@;@FKJHHHLJMLFB:657=EFD@FMFAB/;:K9'4BR|r\U`aYVSPPTQOJLOo6.N@=<98B@CJGEEDEGECDEEFHGFCFJOQDWI_YVPLOKMRRNGGQUSRRQSSUSPMNONMKFEFGGJMILCyuAKNTVSQTVSPMNPRTTSTSSTSRQQRRQNORSSSRRTUTTSSTUVTUVZ\]cc[ZZYZ_a]]`^\]\[]]\\\^\]\ZYYWUWYXY[[[]^_^]]^^^\]ahklt|}vruurnihhc_cb]]cc]WT\]X\a_]\^^VSSTQONNPRUXSMORNJJLOU[]\]]]_`^[\^`a_I{Qbaa`^bcceb`_ZXWXZ^[VSRSSTWPSWXYXUTTV[`cbcfddg`R\c`abbcfdb_]`e89icd`ltttqj]WZ[Y^^__[VTTUWZYTKIIIDA@=ACA:9;9=FMEONQVX_dfjme]^``^_df_bd\YWXYY[]ZVUUVYZ_]\\^ZSX[YVVVTVWVY\__ZUQPQRSZ]SQPRQSVVTPLLNTYWPPTQV^[^bb_\YXW^hd^ZYYWY_c`bcca`dd^^]]ZZYY_9B?73e666eee``acba\XZ\\[YZ[WV\^]aca`efbdhi49@@=<;5h68;=B@857>>78947:7cT?ENSV]^[_ae346669989::99:8437756eZ]bjbZ0D@8>WdUOqT^=IUNCEESOicOPBajRGIQd>CCA@tYiNUQJ@>@BILD@?CUN?md]ZVZiqmn{E}cQK]h]X\lf\\[PIVwsjc[dddf^pnMQ\d\TP`hc`V^cldY^XXTNRWZ`btn\SPIHF@HMLMJDJJEMX[RRURRTQV`_hukekhZTVQFC>=m;>?9_rE>:=EIOMLEGCD=GAHV[czhioOdL=:MSX,.22114898;=?><<>CC@?===>?BA=<<;=?>=@j?<::869<;mo9::846<:5cab_`aad59;;88:723468;8geg57998lc``baca[XWXVSUXVWZZZ[Z\\[][agfi6ib\WTVYZWXXY^[[\XWX[\\_ahiebbcWMP\i&2+'(**)++,,*((*,*&&(+.//./20--.//.-,+,..--('*+$-..020,,,++,-/0/.-,)(&&'(&$$##$&+,*+,**'$#$%$_##""!!"""### 89&&#$')*+..11.)()*+('&%%%$$$%%%$$!"#$$#$%&&(+*(('&&$%'''(&##%&'&%&&&$#"#"#$$""!"! "#%())*)+,+)(('&&%$""#7$%%&''&&()+-..-..01120-+)'''),..-.1/-..--.1/*)(&())*++)(*'''%&%$#!#&+%"""#')))*..,++*((*,)***((()*+,.0*&"%'),122431/--+*,,-.0352-*)())+,.0//.+*,-,++**)*,//..-,--,+**)()*)*,--.2!9#!%'!2330.-,,,-//0/-,,,++*+-/./)/.$#-,,--,++-.'1./2344320/-*)&"'***,/./1/.+*++..)())'%-$#""!!"#$$%))&##$$###$%#! #$#"#%$%(++--*))(('&b%$"$)+)(%$$&((''(+,-..*(+,,-+(&$%'(%%((&&*,-*(*)))''&&')+-+('*+++.1112332330---,)()*,*)'''# !&)'L)'&# "'$(B=1A&+-*('''*)'%%%3&()($#&(((%&'%%&&%'./'%)($#$'()'(--('&',0-*,+*(()(&&'(**''*)*(&&(06-4445686568:9974331231110011.)" !!#"!!$$"!%'))'&$! !"!#'&%$#$%$#%%#$&%&#$H'*-#$3.,)'*)),-)$%+,*+**++-+)((())(%#%%$&(&'#?9#&)**+-.,+))*,-.---.--,+)+*))*++-p/0143/---.12001//0-.///.//.//...-+,-,-..///00//1110259=?CGHEA@A?=;;:524511551.-11.0530/00,*+,+***+-.0,)+-+'%'*-01201120+!?+5310/1346433/---.//,++,++,)*--..,,*+.253242341+/2112447554112/,.)/47662,*-00556850//1343.()('#"  ! ! #(..-.249<<<=:82265235724731.//--.,++,-/00/./0-(,/-*)***+,-/00-+*)*++.1+*7)*)*+*)(&''*--((*)-2/12100-,,-,,0630.-,+,131233113200/.-T/ 13231134430-.0/-,-.-,/003420342354 3.'#&()-,*+**]+(*,.*)3/$.8-,?26#)1+%'*3.C9-/&>@B$&&&(*,.-.100/01223463154.-4GH?99:77;<742.0459::;<958!#$"#$#&##  !&'+-)(*19:669AHFA><;989;<=BEGIFB@==CFEDCEEFGHECBAACFILN(NMKK'),-+)''(*('')03/)A--=@?@BEDB???@?:9;963243247521*,00/04689751268:;;849>>=9:?BBA>=CFJ'('N)*STI=@BAAA?>>=@CEGHHN)(&%&%'*,-,'%)"855@L)())*,))'&*-+,*IDEI&'LIHDBABHJKKIDCDEFEEBABEHHLKECGJMKK'+.*)LGHIJGEIKB@FIE>849FMGAAJNMO)+,,++-XTPJHIKMIGGIHFEDA?AHKM((+/.,-+(KFDCDFGEB>>AFOVSMIGABBCFB=??=C@;:>=:966:;9=CC?>>===8338BGFDED@@>;:9;>A@BEDDB?CGHFA@CEGIHJ'%%&$B?@#%# #&'(**'%&$#$',---/21/-,--+)+/23213578863001101/+-26546973/---169610*! !D''ADGIH@:>DCCC=89=71*/=89?%'A:;?>>BCAC@:677::E**GC$)"@>AA9<8+0.,-154)<"..2*/57D1/1,--9;%'$=<236;?:5/'';217<;8?CBF61AC'+C64/%+@SE464'#.;6;&=-/50,04:8038763/+&(**'',-(+/../*#&29452/68934530,/2$++1,4?6,'+/2-032/-0681'15-.,*22&)240+*73'&**&$&($'&)))/0/.1/+4>97=9331/+*'5$+35351(++( !($-$!+'5/,++.3:87@$?0&"/7/--52.01+%-AE:72.56467B>,-3:3-*5:65-4i597/220-*-0364>;/+*&$$"'+**($))%*12*)+))+)+105<76:70-.+%$!7 0:$#%(&$!"!! !),/;046!+"835.--+,,,-/-.5/.A//+)()'%&(')+))**,+++)-0.042.***,,))**-,,,*)))(()**,.22/,-.'!$+2ڀʀ~}~~}~ŀʀ~}~~~~Àǀ́΁ـȀ žûżÿԀԤ¿ȾļºȀŝцȊˁǼ͔ʫǼʼµüعɡϴÿ ƿ̀܀㴱􁇋ĩźįħ艛ũހ񁅈KŽž½ЄӀ¾􁁆㓵ìп򀐗ȼνƾǼ˵酃ķʸúĮڵúׂ̱ɀí͂ĹýεĶϼȵƶ̮Ӹ쀚űǼȻֿ̿¾dzʻ솘ĿĀڳIJv󁈑whjg`__]VVYYY\`aa]]_]ZXY[[ZZ\__^]^`_^___^][ZZ\__``ab`a^UUWWXX\_`dfb^\XWWWYZ[[[\[YWSQQOLLKKLLQVUQNNRUWURNKIJJJIHHIKLMMKJIJKKJIGKKABBBEHNSW[[XSOLKJJKLMNMMMNNJGGGILQSPOQUUSUVWYXUSSROLJIJLMOPQPONLJJJIIIJLJJIGFFGFEGHIMNMMOORY\[[YWTRQOLJIJLMNSUVWSRRSTUY^a`abaa`a__\XVVWY_efeehfddb^\\)_\WUUVXZZZXVVTTV[_`ZYWW[WTQV\TKDENSTWUUXY\x_\ZWVVTRRQOOOQQPRXah54_XY]_c45kgfhhfa`a_]^`acehjjhhiigdccegf`]^]]`_^]]\ZZ]]^_bbaa`[XVXZXVXVWY[\]`djlij47=H@868<;8:8ljhff3L54442331```^^_aabccbbccf445653edffef5764687669942fd__2cXS4664fdb_accc23566776554322ceffegjlj54fda]chcYX^abehhc^YYXWUSRQPLIKMNNMNLMNQQOOLOQLHHLPNLOKIKMMLMKIKLJGFHKMMNNKJMONQTWURPPUWMNSPJKQRQNQTTUVUQSUUSQQQOQSQPPQTUPNQRSTSSSRTUTSSPOQTTPLNTX[afhdcdeca`a]YYZWUTUWZ\\\]\P?]?TP1@>;<86/08AEDQ:LOKJI:PQ9n2.:/7>U7@BGT]_\SQROMNTWMILSZBK3[OOMKJJORRUUTQNPQSU\e_ROSVUQQTTPLLKGCEMSRSQQUWOOUURTRMJJNQLMPKJOOMKGD=JRH_ccfdcdcbcdhiik5hgjhijfdedefhhf\MNPNNOV\]XX]bZMB@IMMJHFBBGLEDBA<8?BACCDEDFGEBBBABDDGGLSV[T7D]^VJ:;EJKKJFFMQMMNOTVUQONLJJLLIDEGEGJKKIIMLKKKLNPQSPONLLOQTUTSRQRRRPPRRPOPQSTUTUUWVTSSTUTUUW[\`cb][\\_``adc``_\^_`^^^[\[XWXYWYZY\``^\^`__``ab`\]`dhlqrngglqrtog_^^[_hliebca^\ahjgd_YTV[[YURPRSSSPKIOPLMOSX]cc^^^]^\\^a_\bfefdca\\_^]]\][YYZ[]a_XUTQOPSVXWUVVVWVUW_cdec`_`bcdc^\]^`aac`\[]`a]fdi::njbTNPVYVZ\^\UPNLLLKIFCEGIJMLJD@>;DBBGJQT[_dfeecdd^YZ^^[_fb[]][WX``\YXXWVVX[][YZ[ZTMV[ZWXWTQQQSUWZWTQQRUVWYXXVTTTPOQQPPRRPLQVXUURV]\[[[ZYZYVVXYY]cc^PPXYVW\_aba^]`ccc``_]ZXV3AA=946::ifle`cgec_YZ\]]^]^^^_^]_`degifiljgi8:99<>;9779?@9:<=><=<7679ZDGT[\\^_\e566554477468:;:88767865cY_fb\M8;>;BHP_XE:8HU[PBKLSIhoWWHLZTD9E^knmrzBAggBLG>;<4145771U/22SKTNHXVMNSTRRY``bdmvoikrzzuuutv|~}|{z{|~~|yvvutvvxLOOORSUUQONRU]`\UKMRPJuw|~uv{{wvxwtuvtsrqplgdc`SMSQTUUZ\^][ZXW]ed\]gkmnonkinpppw~}ILKJNNNOPRRJyx}xvxvyH}wwxCEINT\a_[RGwyDB|zHDJL~~}~@@ACE~wuwwyxvspv}JIKOLGHFEwsu{IKLJHJNK~~}yxtv}}~tjfddb`bdcggZU]fge`_\YY_a`XPU]bfghefrzvrroomlkmpssqnmidcea^]\\YX[cinrssomlgdeiikolqxxyutwzwrhkz~~EEGGDA~BFFDCx~BB{~HGAFNRRPQQW]ZURTVVV[^^^\XWVWZ]`acb^\\\ZY\cc__bb_ZWZ^^]\[VLGEEFHJIFz~ztrpopttspmpneUFDJMLKKOPRTYYSONLJZKYYZVMKNNKIMRONNHIPMJGCIT]g_XXPKMPTX\a[ZYYWTRQLKMNNPNNQOSTNMMNPOJJJIHFz{FJPRNIFHMKFFEGJFFG{xjZOUNMVUPT[KEHLUZXNITZ]]emoqrpnmwIExnorttx{|||}yzukhjjmr{tl||ABDGJLLLD|{AINMHCGKLMNPSQOMMMI@BGORY_^\RJFCvzBGSOKKQSSW_fa_dbjhdbVYjfY_c]_id``cimhb][[YXZ[]ae^WQJKUhbUSOOPSWYPJKNNPMJHEFJFCG{}su{{~DIKFAz|uoj`\hyoxHSMqha`YiwIGva]`\\XNQRUUVY\PI@:DPZgrnlmbXSU[YU[ZQQSQQULXa`\gdW`kf_VSVUJGEHBPTRHBKYgt[OTSRY_VutJX`\\[cfc_[TNKWlomquuIodjlFEcSedZA@aqqru_M\lb_DBb[flntmjhda_]i^WVTUVTRPNRQ\wgVTNC>Oggankhje[ZZWOPLWPOPVYozfZURMHQck_P]\QVtn`ac^LDKilYTRT_jZSNUegYYWPIEGHKHIB;ntL[c_ahibksnpqg]YZXJB]SzIR\jmjeb\LIbm;?@?<ltJJz`ZVYY`v}meiFyh`\^`ZUmulaVQU[\ji`]YTQX\LJWM<@LVXTIHEB6NG46VOZZGNAH>?ABCB?;:9:<>;99<=@@?B><<=>=<:7:<;kk9;;:649>9f`^\_bb37:9569:??9776347:>:b\^be4ff54bf6jjje]XVWVVXZ[[\ZZ[XXVWZ[_`b46jfZWY\^[WWUW[Z[\ZZZYVSVYZZ] +`__ce_]\[c11/+**)&&)((*+,+)(*)(()+,++-/.,+++,,,-./..+''((()+--/0-,+*,-,)'%%$$""!"##%))&$$$&)(%#"##$#"#$&&&''& "#&)**+,-+)'%%$$%&%"!"!"$')&%%'&#$%'))&%%%#""!"#$&%##"#$#""!!!#"!!!"$%I$$(+*))('&&%$##"#$&())*)((***,03233222111/,)'()+.-,,-.,,,+**+*'&''()))(('&)((%$$%'$""&(#!!$$%'(*,-.0/.,**)**)''()8+/1$!$%%(.-.121///-+,.//0243/.//00/.-..*)***,,-,+++,.+0/.--,+*+*(()()*,-//13533!+#32100**++,,.-%,,,-..00//0.++,')^..-,..----./12212553/,,*,0/,*.//./0/-,++)('&&&$"#%%$##"##$&&&#$%" !#&%$&$"$%.#!#%$##$&''&'&%&(()*,*'&%')!!'&!!&('%&()***(()('&')'))&%()))'w('(((''(**(&(*+-243213431110.-.,+++,./0/0/( /+,#!"#  ! % !!/!%1 !"(,-+()*)&&*,%"$(+ .('&%%%(**,++)'(+/,'%'))$&((&&((&$$(*)***,.)(++)**'&&(*&%'%$)*)(%"&-'365875543457678657545411102320+#"!!##""$(%" !'((%"" !!  ""##$%$%<&%#$#"###$$(-./+!,0,%&((''%%(*)))*--,)((&&'(((#$%$%%&&$#%&')*++*)('')*,-,,+++*++***)+-.-+,,+*)*+,---.002430/002112431220110/00./.--..,-.-.000/0100011220158;>@@>:9;>??<721324:<:743211379631-*+/0/.,++,+++)&*,(((+/2540231320132.0225543//01"/.-../10--,*))*-.-,--+,,+-1345411020/002335300021.333441*()-0.24650++*++,*(%'())*)'" &%&*+/37:<=<:99940021/262-///..22/-+,+,-/00.--.-*&+--+,+*(((),-.,,++-../0/U..-,,))***)++*&*,-**),//...///.,,---/23-$&...-//0110/1322000.-,+4273125432../!.///000112334246533 (!#),,*+*'+ ]*).2-)&(/& &*3/&! *14+%,,.'>>11'*44*#+;A@=AG''=9$*'!!"!#%#AAIB>B&%%#%'(*('*--*-.11-..+-12332m87221214@?88;:9:=>=956668<>=97:=> "#""##!#%% "" $$%&*/0.-14466:;?CDA@@?AEHFEDCBCEDEGHEDEFDA>?(@ADI*-,,--.-+*+,/573/(J(,+'D::=AC@@DFFC@?=;;::85542+&)),-.13542100389317:;<<<;9<>>@CGHDCFK()((,+**+--)JFADGB@BBDIR+OGFGD@?@C$%'*/4741+%B?CH&%DAI(&IHLJFJ)*IDEFEFG#$%&&KJMIGFCBDCDBA?<@EJLJDBDIP*)+-*JFIHGHJ%&&&OOLHD?>ADHGCHMQ*T**('O+.+RPQOLMOTXXSNIGEHJHHINRQOOPNJIGDDABDCFHHDFHLNHJQOLGMSSNGB=<;98898797--5<><:9767:<;2+.48;=;8:CECABA@>=<<>ADC@?><==:98742249;>ABB@A@<:<><=>:?DDCACDFEB;=EFDEH&$%%$!@"$$#"@AC>@"">>%$ "'+*)))-30,+,--.12220-,--0233442111/./57213640./21121.(#"C""$'''D>DEGFCDGGA=<;;=??=:763.%  )&2//.)'))(&(+*))&'+*(&$D&-18400+(*+-.14/./.-+**'&'(')(()(*+(''())'))('%EADGGI%'+,*'&(+)%JGCH&%H&(%%'LEC;1*-+*10,06+%(*131,(04537>@@B?:<@B%"<79<==@DBBADFFB?A>77:::=E?:DFB"!"$&()+&HEB"'))&#%&&&'(,,*())'!#%))-000)%#":CHFDH$&&$!@B==:329D>DLN)2,;8440:BF)'<0/.'$"!#&(),)!#+4<;:;3,)+00.22,-.,,/)1641:9/5:3/*),-''%&"+-+&"*06?/(-*+/60><(151/.36320+('-:<::<=B&G:275$$0'670"#8?;==/%/92/%#.*368>9863354:4/.+,,)%# "#*=6-.)!(761:88971/0.)+)0***..:B6-*)(%,8<3*21)/A;2452'"'::--,.49-('-65-.-+'$%%&#%"6;)0310587:B==?9/,)$))A(+067852-#+/!% "17((;,,*,)-=A724C$<41021,*9=72,),0/770/.+).4, &.66:BC74532278:937/043/68<=F@3.,(&'$%(-+&%+.*,.-+,+)()'*10.--.),1.*--&!'$9 ";5 (/(',,*#$""$ %")(% 13/,+)+,+,)*-./0/11362-*))'')*,,,***(('(**,,,54-,-..+(('(+++,+**)'%'((')*))+-+,+*/ހȀ~~~~~~ŀ퀂}~€Ā́Ѐ퀂 ¸厮ľþ¾׺̑ýȾѶξʻŀɱɷ񘐽þŀٲ²톏ơɾħаǶƿ¾؀þϻͻۀŻĽҀȪλȾ˷臗è韰˸ƱŹȇ댚ƶžì쁃ӹƾ΀󂃁ȹz󃈃˸菭򀆍󁇀Ŭ􁊌Ž􁏖ȿ̺ƽý񈓗ӭǶƽǸ±˵̺ĺՂü˝ʀӡлʺϿ˿ǺúŸþҽӸڽп¥ĵϷĿֶ􀈊(񂅀=nfgc[XY^\]\Z[_`a1baa_^^[ZYZ\]\\^_][Z\^`cda^\[Z\_`aba_^`^\\ZVSSUY\_befb\VRSUWYZ[YXVTTQLJIIJIGIMMHGHINRPMJEDFIJJKM"LJIIJJIJKLNPSWWPE=ukdo@JPQOQRQNMLMNOONONNPOJJIHHGJMIFILKLOPU^c_UPLJKJJHHIKMNPONMMMOMKIJKMLKJIJLIIJIHGFGGJJINW\\XUSPONLMKJLOSTTTSRTSSTTVY]aed_^\Y[^^[WWXY_a_^]afea^[YYYXVUWVUJSSTTSUZ\[UKQXVTSVQ{H6*?Z_ZYXYXUWX[Z[]^[YWUTUUTSSRONPT[af5_ace7;<73efhhhgiihigfgh5467:9mifbdc`_bd`_`a_]\[\^_adfedb`^[XXXYYYWXYZ[^_^^__ae4;OL>87po754gg33236544455b``22443edbaa``c22db2442`^]]]f8976631b`a `_`ac34336755543deghebbb2468777654432ggea^Z]ehhhie`dd`\[XTWX\]]]WRPOMJHIKKJFEGKMMMOSRPRSRPQTTRMJKRUSONMIKOOLORTURMHILOONOPLKORQPSWTRRTXJK`VB?R60CQ1CHY\URTY^ZSPKKMJJPTRKOSMKMQTR5IDRICDFHLLLPSSMOUTW]8>?mJGQSKU[]O=68?@?FNRUTSRSON\_WVSMJKMNHHMLJNPI<\]tETYY_emjdaabbcffegk6576fi6ec453eeded`UNOU\]\ZX[]ZRECILMIC?AFMTOHD?;9:>BFCCEEDDD@?@@CEFGN[a`^^SD?UXK<7>CD@FKIHMNLKNQSRNMMLIJLKNJAEHLGHLJHGIKKHJMNPQROMNMNPQUWWQPQNOQOPQRTRPPRTVWXZYVUUVVWXXZ\[Z_a__cd_[YZ]_^^_^^`_\^_[ZZYYY[[Z]^_`aa`bbcghffgbaddgjlifdefhiigedc_^cmuwsnhd_^]_ccca\SS[]]]XTVXUSQOJKZ\ZTGIOZ^LI]a]ZXYZ\Z]_^^^]^\YZ[XWYY[\ZZ[[\][\[TRRTUUVWWYXUWYVX^afgddcaadedcb^^]\`b^]]ba[\_dope^YRKIKLLORQQNLKJJMTVLE?JORMGEEFGBCDDINQUY\`c`^]\`ccb\YZ^baZVZWWWYQHW[Y[XVVXWXZ\[WXXWVWWXYTSSQOPSWVVVOSXSTTTRSWWTSOMLHKLOPPMQQOMRT]`^\UVQSVWYXUUZ`hbL;L]YYZ[YYXYWVZ[Y[`bc`\ZS[6;<;88;<6g87hflkcc_]_^bcdeb]]\]]^djkkknopjj543346:9:::=CD?<<<;=>>:5:hTV[diii4f34566443566777:;99878874TT`fVHJXC9>KGnLSDEJQ\`TEU[TKakbZQHELFfY>]hjfqx>?tm<<:dRPSXUUTY]\cgmzDJLOSVUWVPOQKFLT[]^]_aeglqdXVY\W]kf^_^\\\``]Y_dhlpvuw}{vvrrx~|>>ww?CFMPLG@:61K$5-/B7LKJVRFGLSY[\\]b`VX\_ep~~~I}yvvy~yz{vp~FILOPMMLIHJMT^]WM~EIKIDzwz~~xmmkYIKFHKRY^agjgcaemvunfgnrrprupgehlqruyz}~}v}HJKRVPLOQPGIJOOMKKG~opxvu{~x{~xqruuu~CEC=uxEI{suwuwsw~DDsr}~HLML}{KKJKQTWZWUTNMMOMF~z|{vvzuruv}wtzwuusogc`ZWWXZ\bkiWX]``]]`_\WUY]VP[degcZ\ntic_a`beilljjklkgca^\RKMPQYfjgdcfiknqqmjowsuxx}}xstztrqompww{FKLFCGJGCBsoxBC}z@>:BMSWRNQRTVTTUXXWWZ_^YVVXWWVTPRYWQPSWYY[\YWZ\[[]bb^WQHEGFEDACEGJ}~~sy~}yoljkmgaehggdec[HDJMOLKOS^`YVLILMLK\GS[[SPNJJIHLRRPIGKNJDDDCQ`gfYQLIINRUZ\VX_`^[USOJJLONNOQNMPPONPPPMJFCDDAz{CEIOTSNJEEF|BDGDEMNIGFwm]TVf_ZcXNQIt@FGMIQQKTX[\Wauz}fkqw~Cxzwqqz{y~zqpndg{s~DHKLKLMz|~DLKFB@EKNMMLKKPVUTRFDFOX\]]\MHJE=svMYOSZ]\\[_cb]^`_^^[W^ssfjl``e_\]_``_]ZWTTTWWZbpjZOJKVsoZTQLMWYTNHLLNNKKHFGEEEFI{{jo|{LPPLF|soeoqgnwr|JSyYOQcpGH|cTBKTXK@Osn_`MDEHX_``hbWeo_QQWROUWXMDNUJ:Xkom[V\ipri\VTSOQPOK]^X][YRVcb]qwtDv]]lEFxbZWfMCKZguG}_]aBGruhedfrpcZSXa[]odb^]P>JVURPJRd_XWZ8ET\?Ze\X`sh\TRPOOQQPRUb|xhbcaYPJSb[RXVMLh|ui``WMLVXRIJDEUXWNJXa^ab_UMJIDBAzu@P\]`cdgf`ZWWcldab[YRFgh>IV_jqqmg_Pav>>>=>=?TWA=A>?ylp|B|[MVN[dcqpddsyzpc]_no_Z[ks^X`lq`XXUUQJSYUNR_obXYd\SVY]]imfba][XXgoyvjg\RTTNLALapXJJLQSXdc\YVTSRMNWZQMKKIGEE@=HFKGBCo8s=rC@==<9678;=<><857:?@BD?;:;;=@=:<>=lf6:97657<;5icaaad358;<30468;96785139=9`[[\]^_ab]U[346799j`]YZ]bcdb\XTTTVWX[ZZZafhjd\[]__\WWVVXWZ[ZYXYWUTUVY[\[XZ[Y^be00.(&'*()('(**+*))**+)=++*+,-.,+++-./.,,++,--.//.--,**)'&&(*,-/010,(%&(*,.-+*'&'&$""!#%#!"#$&&$#! !$#"!"#$&'()*,*$;98?#&''&')('&!%$%'(&&&$&'%$#"#""$#""#""#$&*.+&#"#$%&%%&&$###$$##$$%$##$#"!""###$(+,*(&%$##$##$&('&&'()(),,,.0256210..//-*))*-,)))+0.,)'''&&%%&%%'''&%&'&&''%"$%#!!$$$%#$$%$#%)--,./-++*)(3+.0*(&&,./.../10/0110/1120.,-,++,.,+,..-../0101/..-+*)))*)**,-/E./1,,"78%/.+)*.-,,-,,-,+-+***/-+ ,,- .///.,,,m010.,+,033220-.0-+,+)+,-.,+)(('%#"$%%#  "#$#%)(%%&&%&'('%#$(('%%# "%%#%'(*'%#$&((&&'%$'))'(,)&(((#&,$ "$& '(')-/+')**'(),((%$&)('((('''&'),*'&&&%%&)+/51,,02110/10/.-./1222330-*$38>10!-,*&###$+$"$.$01+'()+)$#"#%"#&)'"$($#$&(' )%!!$$'&%')*&(*()+ 9$&"'(,&! !%$!')+++*+((13+**(&'''%%()'*+$*.@&-0047;942343356844210//00,$!##$#"$&%# #&((%"#"!$&%$%%"N$&%$(131--'++% #%!%(&&)*('*+*)''&&&'((+' #&(#%(&$#%'&%&(()*+)&(('(*-0/*++()#+-,*)*,,--.-,,,---./11//2311451/./010./0/../w../0001212335433422458<><97669;:8754335;@A>;64212366420**.000.,,-+)(('&/41.&$(.3)%041/--.0//000100.-./../00/../.././0,+*,../-++-+-02564553223344111023111440/01783/,*'%'()*,,-+*))*,02+&"+./*&##$%$%%&+/23458;97769;971.-.10-*--,..) +/--,*,.../1/,,,-+++,,**))()+-,,.)+0,,,-*+-.,+(()&()+,*(*)&%)*.10/-+),--/.++-03-"&/-.//--,-,+-.,-0120/-*.1436612/.2023330.//.//1555678855 -&(*,.,+(%*12'",*.)&(>+/$'+.36-$15-)6:62/,+2.E9(=B@@8102317>95775558497479:<>A?@DC@?==@DD"!@@!#$((#  """&*.1254-/248>GIIMNIGKKGFHKN(PMIEFFC@@BEIIFCDDA>F')+,,*)((*.04750*HFF%''&$GGGFDA>@DEDDEGFGLLEA@=555+"$$')-135886669BJF=78978;=>>BDFGIFD@FKHJ(('ONOV55.TPU,--,QMJIHGHIHJJGI()())('(&IKHHKH>;??AGKIFGF?8;?ACI%&#:;@$'MKD=ADAB>@EGIKFBEHJK''MOLHF??DDHLI&)+*LJHA?@EM)((,0124100---..)NMNLLNMMPRRPQUWWSONOLKKHIIFFHC@BEJMPPLMTQJKI@CF@=>GLDAA<:94224448>:/3668789864134/-6;:<714CB99887::;==<=?AA?><97/*++)3;;978::;?CB@?AB@BCFHFB?AC???>=>BBDHL&(*&#EC%'$"#D>:=""@=!! '+-+(+,--,,-/.--/22/-,..---**.,((+.0/12.+.11/0674/+(&&%$#"k##$'LGDDHF?AECA;878:746996220+ "# !+$.32+('%&&%'+,+'$(+(%%$#+577/+)()+-.01-.342/,*'%&'('(*+)()**)((&$%%#AACD$%'+-,*(%%&GC%HB$&$$**'''GB=1+.83070*-(A%''*&,/+133516DERH68=?@"B;?>=8>C=51,.402>5310("&$" %31-,*&49#08203>71-+)))++**-3FD5132/(%+73,10'$:H?855.&%.0*$&#$..,&&15/252-*(&" ;A%.412436752/,592/1*'#/6%,17;;74.%+6)+935>"?-%($.12<911q?HKKJLOP6QQPPPQPOPOMOPONMMKE@BCCHQSQQQRX^_\WROONMKJJJKMOPQRSUWUTRQOLJJJKKMMKIGDEHHGGJRUQMJIJKMPQPPRTSQQRUVUVWY[\^_``]\YVVWXXXZ\afa\\Y[``\YVWXWVVUTRUWZWQPQQQSV[_bf6da[VD05MceZXZ\_`_^\YXWVVX[[ZZ)YWYZ[ZWTRPOPRSW^_`c586c_ae55c_di67655jji45iihd_^]_^]]]`][\]]^_^^^_^^_aefeeda^\\\[Z[ZXZ\]^`bcdeei:=plk68=HE84fa`efe`d443e34c`12332221cdeccd3321d24hec^]af466g2c`^\^^]`bd3543553345544hfd2333469987kii566644faaeebegfedc`_`_\YTNMQWXURPNMIGILNNKIGHKKLKKJKMOPSUTQUYVPIFHNRQJHHFHOQNPQPTVSRUX\^__ZTPNLKMX]YXXYXQRVNHIMLLLMOPRQQV]aYRQRRSVWUSRUSOMMPQPNNOQUWRPMNPRUZ_^WTVZ[XYXWY\_^]YWWXZZY[__\Z[Z\ZRHDCB?CHHIHFFLB;6/.SFFMLQ]20RY4:>8;DIEDB@@A@AEEFIJJJVhfZNKOQFHLKKHD>@F=<@EHKLKJMQONMKIIJLKGHHEILMGHJKJIFGKJKMNOPRROPRNPQRUVRQPPTRQPNSVVU,XYZ[\\[Z[\[]^_acdde`]^`]ZYYZXY[Z[\^^]\[[ZY[\Z[]]^`feceimljigfgfj:tmgca`bdfilligeghkonkgdfea^aeegg\VZ[WUTTW[]YTSQPVaba_\UJPUSW\\\[WVZZZ[\YWXZZXXXWQJLVY[\\ZYYXXYVUVTTUUWXZYWUV WW[_ciheedofjfc__]\\[]\[\\ZVX[\^`XQOFCHMQWRKLC?CCCEGLORTXWPG9c>HKLHGJKKLMKMU]adedc`^_XSY`SUTQVVUVWQLY`_caXVUSRTUWVUVXVTRQRQSRTTRTXVUUTSQRQRRSRSQLIDADHHKRUQ@CPQTZ\\XRLRQVZZ\[`98]WZ\ZYYWYYXXYXUTUTUWX\^[XUTV^47:<=?;7654456bb`]ddhjgidcbb`adgkn7987nlmnkhfdd458>@>@DB;=>>;<=5fg58889544567544656565688898998gUYckcWY:,3;ZbFLVEALMOVQ<@RPZeg_SOTOIx^F<8\jjknomjkp;ojjkqtxqegd`_bVFN_jocTYlrw?AFKLKNVZOGIPW[]bgimooi`]`a_^efc`__[UUYYXcmrqokgkv|qpspsvw}AA???CGLVWP@541WQ,21_0WPRE;@DIOSTQSY]YTSW[bfejroks}z{x|}GIIJIyvJJI~}DEGFG~~GGHHF~|wjffmqleccdcciuz~~rqsuwussvytjcelmu~~xuojdfswzFHIHIPQLNONNKHGGFFJLHFEDGNRPNGyz~}{xvlfsBHHzyLLMLI~yyy|IJIMOLHGJMLMQSNJID~}|yx}}|}L~{~{vsoppmkqPSMymjmmxqkjfca]YZ\\^cic[c`SRQQQTY[PFH_qskc^\l~wjgddbc`cmnmhdffa][UQNLPQVimda__bksrqpnnqmkpv{yxvv{zqmmklmlkq~KQOJJGrpq|GMIByw9=JRUUQPQT\_\XWVSQQRTURPRTTPMLNT[[RMKKPWYWRQRRSUYYUTQMu{BABDHG~zzxx~}~xutokkmkb^]^ddb_[VSWNKSMFHOM>FXA9ADEGWEY_VPNJHLKKNRTQIHKLGEGEFV`c]USPOOPSWQMSbmic\XPKKMNMLIFGGIONLORQNIB~ADB@{EEHNNLKH}}FHJHIONKKMKJJxkYNPapaUPFGGCBFFEDG[XPTQO[UJM\vxurv}vnos{z{}}{ztqqozwxyzFORNGABD|}@FLIIGGJMLMKHHMTUX\ZPOLOZ]]_NGQQGA?>JOFN]c_ZWVV[[_^[^b]Y^pt`bfZWZ[Z[Z]^]]]YY[XXW[eolZRPNT`g]WQHHVWNPRSMMJEORPNJHJE}{tQNQOIF|sppsjft~}HQyQARk}EDhsrlbY]hCJEEJOM?=_P_>CMRC:78;iOfB@KSW133468;<>?>A?75535<:96689::<<889;?CFFB@===>><;=@>967986657:96332c456864689;:646866:;7a^[[]]_`22`a4777>@;7ic_]__`^YTQSUUXZZYXX^dgh4f^^b^_][[[\YXWX[\[]^[XTQQUWXZZY[\]./+(''&&'(()((()*)* +,,-..-+)),,- ,,,--./.+*,))*+-/1222-'&')*+***)'''%%&$"$'&$%#!"#$#"""#%%$%%#"#"!!!#%')**())'# < $%%$%''(q))**(((&'('&&&%" !#')(&&&')++)%%%$##"##$%%&'(()+*)(((''&%##$$##$##"! !!""#')'#"!""#%%&&'(&%&')**+,,--011211.,+,+-.0.,+**,+)(''(&&&%$"$&('%%$%&&'(*))(''%%! "$''&%%&''))+...-++-..-*)('&&'()*)()&&(+)'*,000/00.-,+--**+-++*+A+,-.---,,-/2111/.,,+++*++*+---.///015 :65!)%/++/.,*,/,*,-,..-**,./-,++,+,....-,221)/--01..010..,,-,+*('&(+,)'&&&$"#$%%#"!!#K"#%&&'''%(*(%! !$&%!  $%#%&%')((*,-...+((&%$%+/,*))(%&&" ##$##%'('&),/+'(&'(*+)()**'%%'&6%&)*(&'&''(**+,/0-++-.-..-.0210.,,.//.022/-.--*%!"#" "%W$%*$/))..28'*#$##"!%))-22-(%')''(("$ !!"%&&%%'())*4-',/'&".%.*)%(/&&(03-*'%%'(+(()#")11331337730/001103572/*$#$#"#" $&$"""#! #$ $)'&# !""#&%%''&$-85,"%%!%&%%$#!"& %'(((')+)'&%$%'))%&'%&('%&&&'&#$&&&'(('))((*()*+*,,*)()+**)*,--,++,./0//0002212333578731120/-.{/010/.//./00/--.//0254357865423447@;9643467:;;855668;;8534531379871,-.-,,,.01.*)))+24211.')--.//00,+/0.01/../.---,)$!+/./0.)-.,,.,++,-...,*)++-02554455434744221100121001001,''#"&,.0-()$ #%$%&*-1353/) 1!()*((++,,,+-3:<=><;733.),0())'+,+,-+(-1022-,,,+,+,-,+++*('())(())++*-/1/-,,+,++*+***'&#!#$%&C)*('(*-.0.*'+*,--/,,)(-0../...-,--,++**,,./-,+++.03458662+023235765532323 ** ,'*03,!!+%-3%+0&%,+,2. $.+2662,-1/-KB4-&;@>>??>==A"A;<=BEGB<=;7692)09?D;24>AD#$'+,+,24,')-1448;;>?@<746766::87774014219?A@=:68@D>??B"""#"$%*.-(! &# !#&(+,-,-140+,027;:;@@=>IKECGHHIFFFEHIFCACEFGGGIGHFGGIM)***(RNECN*)'GCCDH%%&&KJJ%JIFEDCDCCBCI&%%%$C@=:1-.5:9677666:ACDLLD==@@A@>98ADDK()*)Q+/0++-++*SPPPMKJMNN(((&'*+)((')-.,*&FGGGDACHPRKHGECCDINPNMHC:20=$''MJAAO,,--*OKIFCDKNMLLGBBBEGHIJL((()+*'JJLLKL')**+/0-*)%JLLJHIMKIGFDDGGGFKQQPW.XQNLMIFHFEDA@?;8=HU01-NJIA;;>?DGKTZRH@??;965356436:5185./0//178/'C&4<>:623@GB<;;:9;77>?><;>?<:62.*((&)7;88768>BA@??@@;:=@AADCCFD@>=<<<;:=DGEIM)-+'(&D:9:@&*(#?=$),-+**+131..-,***,-+)*,-*(&'*//)''')-00,*+++-01/-+)I<@#"!"%%D@@?@@ADCDE@>=:87983002420.+'#$"!(%32+'(&%*)(),.+&%'(%%&%&.461-,,+++,0-),6<83/-)&'(('&%$%%&*)()+*)'$F$&$#D?AE$%'*)(('GA@%%&&'++*(**((LB:-&'1<4-,(((%#&'&$'52-10,41)*3CBA>@FCDB?=9;/***.8<40-&&/1*++,))($+,,+'&(%GKFFFAII?N.*+*'%A=>>@:7>ICBKF&.A*!+:C%#.12/&"-/+%(/1**542575.*11010/(#,2-(/204100:?:81.+*++*.79''&26,--+,-,1-31$ ),'/66422,,226>?<=44@337>@?<708/((+6A&;4+0*5!73343?B:/&'.0106400-+,-,//,,../-)-8C*245,0:90-,.,+*(#&+6A;8332200353-1,'''*9D;3/0+(+)&%&&%)-/,*+..2:::3/)%">")*0154;<6.*%$/578730.('*(06:::7864,30"'#!?;=?@;&!4555*0:69<9;A5,19B?3-/:9//491.'*--,-/3-+2530,)IX161)/8//-03648CT\ZNB7.',.-)$/98-&%'*+)+/10+-/1112-%*)"&'$!"$%! !5;;72,.6#'#!#'' !;/%.%( 8%+!"! X+*)*++*++, 3/,+,-/.+)&&''())*)(,./11,-/,,+*+,-+*)*+++,-+)%$%'(')+*+**р~~~΀󀂁~}}}~~̀ƀ򁊀ǀ€ׁ ý˺Ҁǽſ󁆄Ⱦրǹͼȡܦ憋¼Ƚٝ촳ÿûǼɪؿ¿ýՀʼȻĿпɻûкŴ쏄킑ϱ׹րιƲȽΠد̀¿Ǿ͹źľɿŀȷýԇꂈ녝ހľֱЍ«վɩ˶¿ҶıЀˬįǀŴ׸ʿȿɼؾ±ֻ׺ضЀ˺¼ĸɼſ߁۶̲ǻȻȳ¯ŭ兂Żȹ˻¬ހſ󃂌ѐұ傍c]b3451^/]\0\XXRKRY]`^]\]__^_^__\Z[]```__^_adgid\VSQSW\`]WY\_adfkplbZWTSTUUVXXVSQPONOSSOKLNMPRMHIKKKLOPOMIHIJJKLKJKKKIIJKNPQNKLNOOPQJCCDDFHKNOPPRUUVVSSSTASSTRQRQPQOIEABEJRWVVXVTUY[XWYUOLJHHIKLNONOPPQTTRQRSTRPNNORRQPOPNKIECGKJHGGHJOSSRQQRRRSSVY[\ZYXY_`^^^\XVUUUXYX[_b`_^ZVTTUVUVVUVXYZZ[_c^[WQOOQRV]c321a_\UZba[UVWLNbbacb`\WTTZ`^\[YZ`b^ZWTTRQQPNNNQW`ec][\]bfcZ]dfhkkhhhfdegihfdfjfed^^\YXZZYYZZYZZ[\]]\\^dhfcbabbba_`a^[Z[[\[]__`_^^\\]]_hmq>:c\^__bb`[^b`aa`aa_``0``023e333dd23332234564fhigh88heeb`abdifba24344421d5874bb356654ggikkjjklmkgb`chiffh565if`][ZWRSQTYYUQOMKGFHNPNKIHHJJHHLLKKKMRTSOPVZVQMLPRNKGJHDDJQUTPOOQSTXada^^YSQONPUYXWVWVRPQSTROMMPOOQRSUXWSRSRRPMOQX[ZWPJLKJMPNNNOPOOOLKKKJJLPRSTXVRRQRSSSQPSZa`ZUSUUTUWY[ZXZ]\^]ZXVUTNNUXTOFFIC>IXWUSTZUW053P=7?C?v:292F64VAFFEHJNPKFEFJNOSYb^`[SZ1^UCTX;a/D6>3ePMPOLKGLRXZYSPONMLIEEEB>DGD@?:?A@EJIIJHJL]k^M@AEHOLJMLLH@<986@EFGIHJMKKLKHGJKH8cFRQQLFJGEHKIEHKKLNNNOQRNNNLNNNLJMMOTS4RQPSVUUWWVX]``_]YZaghhjiikopnjc[ZYZ]_`[ZZXXY\]]\YZ][Y>XYY[]]adcdfik543f56799lida__bfltxyrmmkhfhkhhkrrjadopond^ZXTTSTWVSRRV^a[\YKMTY[[[^]XUWYYXYYXWWWUTUVTQA>NPTZWURQSVUTVVVUWYYXXWVXXVX`cch5hfdcdhjfbdb``]ZY\[XUZ]][WZ^_YTMA?HRSRONNH@BAADHPV\XOIEA^]HRPLKOOJGEDEDJUXXUQQS[b[R\aYXVVUTTRV\^^`_`_]ZTSSSPSTRQRTTSRQKMQTTQPNLMMT]XWWVURQQOOVWNLPOLGDFOSVGJONNOPRQNLMLOTZ`Z\;5a\UWZYXURSVRXXXSSVUTTUXYXTTVQPTZ388<@>:875456655decgfc_gjifgl677998kjj67876fbg47<>@A?:78976744\MY4777644545669;<9g```hkfcE;2>DIX^NBIQN@NP95@Ng}@t`RLNNyD<]-`Vkhgecc`caTKHGILNRRTW[[agdZRRhv{zvw@qk>GHHP\\RNMOTTYdfeeedbcccba`ddb\[[[WWX[grupljdbflc_`bhqtvC@>=?ACHNRSQG:84/02/---]N<>HKJNNLJNSY_]ZZ^\NMX_erxqoroluwu|}{}~zvvvyzzutzHIIlP^}xsr}CDEFHKLLLJF{hvCC|wtzupomijmr{|{xsos~|so|}srihnljsyGHJKHHFGHFIHNNKKI||HJLMIHMPONtgyIFHLMLPPC|HKNPOKHEKNQSRLJHFywwyxvvtsx{zxyyzz{~}~|urrqomnruuvz}zzvppnnmq|wpkkfdbaa`ZU^lh\W^]OHIJMRYZTRQYhljdacouihijccmmefjc_aa\XUQNKLRY[^b][][V[hqpmkhhikmortyyuutqoqrqor}ueX_HSSP|t~GKORJwfcA|pjoCMI>=DIFF@wC}w|qlpkhqBhSMWbVVpxo_Ni{jtIIud]Z^][UNSY`hgZTTUYXPP|[XDIb_WQOX^]bvJH}j^YVbcmiZXQMPPLSVRQ`h__a`^ZZ[NMYPH@;:BGIJCFNJ9;MHAjQ[r;;@HBnllegS>TNOIH=XG7G?AFIJGECCBA?><>;60.-/113//.,,-.000--/..-.-U/0035435662;9643136;@DC=888668<;9:>?:76=?<<61/.,,,-..---,+,.3610/('+,...00-+,/V00..-++,-*( '(+/-,+*+--+---,-..---+,,+-133655543575243322/.//.,023/,./.+($$--+*))'#D&)-141*'%$31'.,**-,)'&%&&*2331.--/3/(.1-+++***),/0///0/0.**++)*+*)()*%&*--*)''(%(0/--.-+*+)(-.'%)++%#"'(*#$&()(()**))'().0+*+,(,0.-,*(+,,-++-*))+,,,*(,))*- 3434420575445433115}!!.,++.-($'$#&.3'#,3/",/")7B"=3,)+/J**G!A9C>=<==:;:2.,++-+++-021474.');:769<64569==>C#"""#$$&)*)' Q("#''&***),/2522355-*179@A==>>;?C@DFCAADFECA??ABACGB@AEJMR**)P@2;IJIFB@=;C%&&M&')'%HGHJC5?JHFGFF#"B>:79?<::;9:<EOUUJC><<98610:E>3275,(),03540.-1888548CF;7;=<8:@?:;=98;:7640-*(('&)+/46415;98;=?>>@HPNIE@@?=;;==;>>=?@?@=;:1861,,-++-,*'%%" '&.+'')'*/,+--*%$%&&$'07512/-,)*1.(,5E;1-,,'%&''(**&$%)*('*++*%FFFH###CA?!#$&)(%FD?##8 '*-/*(*+)%E=3,--9A3,($((%#'+$C(4/),,(/20&(7J(GBC?AA@:6::=;>?>>;>C=:>CBBC@:78=><;B@>;6+%+6<8&#%&)# %#!/:@;.(.:9443,/1)+51&)/41--( +9939>E>232..*((%#$##*?7/''/30/),81'"(5*#-<2+'%%'%(+,-660,+,..4856621.,-+3467:8? <601%$ #"";#@A91'9JC:>'&811011/+)+/387/+,.00+,JBM41#$52.*+1624@IJT*'A5/-+22;90/)&((&+,('14./222024*(/(# #&))#$+( -(#9+0># 56731%($%"!(##!V# #$$#!1.J-0//021.,+*('''%%%'),./00.///0.--.-+++,,,-.//.+(&$%)*))+, ̀~}}~~؀󀂁~}}~~~~}~~򁉀΀Ł »½źµʀ¿ĽՀû¾ٿ؀شǾɼ̿ϡŹ¼¾~Ŀ̄ɀ¹¾IJ򋓚ɀȿηŷ׉븺Ë炇ƼآҒ뤮ѫꁆ½Ǽ󇑇Ű􃉇̀ȺԷŻįžـľǵԃʭøûƀȹľϷºĮĀձ貶ǻ¶ſͱºɲ˽ʷûӷЀµɾͿɶպɻЀǾõά˹źŽʽǾ˼򅐕쐤̞撞h\\Y]a0/_\WUSTUTOORUY]`^[[\V]]^`ca_^_bdba^\]^agkmmi`YUTTVWVSSV[^__cecaa`[XTW`[VWVUTRPMLNNMLKKHJOMLLKJJIILLHDFJMNNLKLJJMMKMPNLJHGHJLKHEBCCFIMPPPRSRRRQQQPPQSTSSONMKIFCCC@BLSTVUSQLJLQSQMKKKLLMMNOONMKKNNMOQQPONMNQV[\YWUTRTVWSMGHKMNONMKNQRRSSSVWUTWXY\`]ZYYYZ]^ZWUVWZZWUVXYXXYWTTTSTRRUVVX]acdfgd`ZVSSSQPTWXWXZYZ\_aaac`RN\\TRSSRUXUX\]^\\\]`dc^[ZXVTTSQOLLNPU[]^aca]XY24f_]bcca_\[]abbcgjd`__^\YYYUVXXZ[YXWWZ\\[[^`_[\`bccb`abba`aa`]\^^]\[ZXX[[^^[]a_\Z\`ba^\\]]^bdh563aacccdc124654543332ccbccce586j8;:on<>;655443354e23443435632234432ddhi1km6ieedZ^ged4776lhb^^[WVTW]\ZXTPPLHHKPPPOMMMNMJJLMKLOOORTUTQRSRPKHHIHHKOSSOMNNLOTVZZYVRNKMONU]\ZXXYSRQPQROMPTTPNLLKMQSRQRUW[[VRNMPTUTQKHKJMOOPQPOQPNMKIIKJHJNOPRTTUTQOPNLMNPV^^YXYWVXYVVX[]\\^_\XUUURU[\[ZYVQMJLTVX[VQRQMTX\2[NKKJQY_[PGFKE@>717?BGH=0SO,=LNPQRRSUUPLKOPOSVZ]]ZVVYVQQRSOKPB4MIQ6XUYTQMJNWXTSSVZRLKEAGORRW[][Y\\\^^ZZY[]_``_]_beghgfgig455545686346775aZXXVVURNNOJHIKOQJA7RdU@=>BBAB?==?@DBBGIIJGGKPf`PKGGKIKGBFFEE<7<<69<>AGJHHJNPNJHIIJE?GRNMKFHGDBGJHHJLMONMMMOOONLNMLKJKMNPRTQMORTTUUTTTWYYXVW[]^^^_`afjmnlf_\`eegeaa[YZ\ZZ[[ZZ\\\[Z[\\]``bbcdgihfe358877icbdc`adgksAuppqx~wogeieachg?fd][[ZXVSSSQTZZWTUTVWUUXWUUY\\\]][YZXVUTUZZYYXUVUVXXYQLSRQQOPSUT4XZYY[XVVWZ_b__g5jhdaai86hda_]ZYWY[]aa[TQY_YX\XWOEFGDEDEKHDHGEIJC@DGIJJNRX[WW\ZVTWZWVRPTZ]\Z[^^^YVTUVTQPONOQQRUUQQW[VURMLJCH[YWVVKIMIKP]]SLQYVA6=JPVUTTSRQMIIHBHLPU^aWUh65bUTVZ\XSRTRRSRUYXTPV[WXVSUSRTUYYPK04489::<<:88897kiegprpjhkj67:<;7hfhk8:;jfkk6:=<=@AAA>839<>==<=<::9876341-367654554443346i69:;9lfa`ejbEY8Iunuy];AWWD=JfgGW`q@B>o^ZcsQ>LXAoPSG@AGKHMMJNNIKS\a`^\drwuk`KDOc{EGGD?=BJMKJJOOMMKJJKQW[_[[^_]]_]]^aa]Z[]][[WX`jpolb^ch_YYZ[cnuy}{z>?BEJOTTKGA;7-K-2..VHFMSQRQMIJMRZ[TNNWVS[bgkmuyy{z{z}}z|~{zx{}ztmnqrtutzKQO|ts{CCEFILKMLHF{w}wsqtx|yrvsrtvsqtxv{~zxxyz~~ysrsz|lggeilommrvuxz|xxz~~GJKLJGFHHILLKNMLKJLO}}KKIGNQPNN|ILMMIDBEE}wspprtvvxwvtux{}~||~}|}{urrtwy|}}|xronorrt}|qnqomllnnilu}rspiedeefgejvpYZ_`ZUSTPIEBBN]pzqgcj{zrsvtkilnkgif]]_[TQNNSXY[WSK=DU]^^`egmomjmqw~zwxzxvuw{{z@skboQQ~}IKKMLE=>Lamh^RKHGKPUQLIEFIKKLKLLJKMMKJKMNLIHFEHMRVUSPMMMLK|HD>CE~qlmuzvrrprpihjlnonga\\^``bYNOOMMHBGMOVUONMLHsidgifXNHACGEFCFDpKJJJKLO\^NJNlD|vnnuswysmlqusu}~{rpwqgo|ACEFGKJGEGJJGEFHJQaf]SMJEN[`afklm`QJMILMILUUQNKS]gknkgb[VVhyp]Zfe^^ba`^\Y[_^aa]YWSWZ]ec^ULKMPafaXLFTZXVTPIEJKOVTPKFzvyvltHGQSKzjloumomvta_cigRMQVVOCBBDHZseJVl9_QRNJF7KtG_Yib]aa]ZXRYWTX[W\aa[G=Zyyt}Js\ZWSVRONLPPMEdjRGL\icaZ_kfYTJMXP?Lmsecfif[cb`ilu~whgqHvpxleloYLWc`]`TVffmomga[YYZWtp][[^abb``gadcYZXQ\WSQNMMJCDW^WUTUd]WTPCVb\RFMQRV\chlhacfSOlf[`EJnlolab^VNLNMPRNONLPNQQS\eg_^ZYVSPKHEECDEFOVYagcbgdajigfb`XUV[ktzww?BDAgft?HYL:>CE~unmhox|vu|sfs@wfc[\TMQVcspcjhah~EJIhMTZ\^WT[eik`T\_OTWN}SQFLZah]\bWU^\kwpk{ylbZRYmvngaZSXbc[Y^_chhfhid\Z[RNPOMKMHEO\QPSOG9j>=;9gh:d:@D9VdmW^ae=GHCABCB>;61VVXTZZ]359>@AAACFJMLJFDDCA@A@>>>97997323469;:7\/2369:>538;;965335988:9ll89:r9=>=;97553473[a665kmld^\ZYXVRUTSSUY\`bbb33bcceeb^YUSSSTVY]^`aba\[ZWUVVY[[6**')*)(&%##$# !#%(*+)'&()*+,+,.0/-+++---,+++,034540+)$('(*--,-..//0.+)*20+*)''&%$#$$$%%%$!$#"#"!""! !$&%$$# $##$%$%''&%# """!"""$&()()*))())*+*+-,+*('&%%$"##"!&*)('&%#!!#$###""#$%%%&&&%$$%%$%'('&'%%&'*,+)''&&''%"!!"$%&%$"#%&''((*+*()+,-///.--./0.+(( )**(')*+*))('('%%##%%%')**+-.,*('z&&'''&&'((''))()'!")(%%&'&(*)+./10//136730/-,*+,+*('&&')*)+,+($%-)*001//.,,-//1230..//-+)(())**,+***++,,+-.,+,./.-.,-.//.',+,,-,,,+-../.-/1/-,,./-+++*)+-//,,,+*,,,-...289!# .0./01221241.//()21-00.,-,)(((,,*)(&&%""#%%%$#""#%$""!""##%'&&$%&'%"! "$''$"$')+)('%"!#$$'+*)%$##$$#!!$%"""!!"$%$#$&(,-*(%%')))(%$%%&&&'('%&&%$$#$%$#$&'()*+++('('&')+.11//.,+-/--/133221/,*)*')-..--+)&#$**)+)'('#'*-,%$%$&)/0+&'*&#! $%"52!&%%%&&&((#!!$$$&()**(&'(%##$$ #"$$(&&%$'..+*)+-*')%!$*+*,00-.01011..01112221320/135653453+%##""!  !%0(  ""$" $&&'$%&)72*(%%&#$"""##  #&'%%&)*(&%&&%$$&*''&$&$""%&%%&(()('&&'(('&'''&&&(')+,+)*,@+*+-..-,-.01122247:<<;9302446531/.//./00..00/..///01123335643285Q3357;@H%B>>>CHKIC>85764598751//..-++,)+//.-/./0.-//,+-///00/-//././110//,,+*++,*(+)*,--,./../-++,.1201566412664320/.,-./10,'&)+'&(''&!#$"$#$##$('#''%''#!"2!#%'(%#%$## #%')))**,-+-0.+*,.,+**+.00.-000.,++,+*))(()))+,))-1..,('&#'2/---&&*'&)0/)%&,+$'**)**))'%&$ %')+0/)(//**+./,))*)()(*++(%*-+,+(*))++-2-'64249:96564233465365/0,(%')%,"&?8=D3 %42%#+57'029!##>437D0#7?,G0/'$&+-,/-+,*%%+/220/5?@:64+%*8H()'%$#&+-,++..,,+*)).159657766766576222432202 +7<>;9428;62 6<@BEGFDE#""#&(+*"%!$(+('(*-22-)+2205;==;@CAACCCDEB>ACDEDB@AACEA=89=?@CDGL*--PIJJIHGFD@?CI&&'&&()*)&$IJHGCAFEA><>@BEFD=8;::<=;:=?=?DGIGHHEB?@??ADDC?>?DIJD=<<<==???BDBDFJOQOMLGCCFJMMQPLJKKLMNJGHIGINLLLHGHGLMJHFFFK)*)(('')((*+),,+)**+QMKJIFFFM))'&MPMNR.10-,NCBFHILNNNOQ)*++(%%JKMMLLM&'JFC@??ABCBBCBAACDFHFEGEDGHEB@BEGIJIIIGECA@@ACACIIELTJ@?B@?>?A@<>CKMFBA=75689:98>GMN=347740/0,('&%)2=A:65;FJABFFA;;<=;:=;5587Y3/+,//,*&"$06889;=?BEIHITXQICBBCA@ABDB?C!92+2+,IDBBD())**%%3<93)$##&)-+'%""%&&'''(&&))'%%'*)'&$#$'*--,+*((('G?:;"  !>757<>;;<;<<87789:;61.+)((*& (!-.***(*+++,*(&$!#))('&,4730.--+*-.+,3BF2Q)+.*%$&')+.)'(),.*&&'(&JEDDDC#$#"#%##&($D&G"(#$((,.**()&HE<513870+($&('(%&%E=?DLHEEC>;@<76:I()PMKP/0*@7::>F997>>31485)&%#!)91#)4' "" %>H(F.-83/3521/*/0--.*-110%2EC>DF*S<020,.+)))-,*&C8>.&(4;64.0;:2-%'.(&:8:>?<8jf4gde333b2444222baaace2466654ea]ZZZXY]e5hgb[\aeb]\]\WTQLJIFGIJNRSRTVTPOOPQRQPPNOONNOLNQPOOOMJHGHHIKOQRQOONNOTWXXZWRMMPQTX\ZWQKONNNMNMJJNMJE>@GINTUQNMRTUVURPMLQTTTSRPOQRUXVRQQNNPPNOMIIKMOQSTVWWWUPKIJMQRUW\c`ZVYXVWY][UY]`_]ZYWTZ_\YXZ\\ZXSQSRLEDHNPTMJ^_NJEHU_1[VSPNRVXWUVXUX]/0//ZSPQOOOIFHMUWPNQTYZYYZWPOOPNMMPSRJFJD=G_^UVWXNLLOSQOPWYPMKC=ERTWZ\YTSPUY`aZZ^a`^\\\^bb[WZ_fj5567h5545433553366775c\YXVTPMQONNNMQYOG>L]TA?>@GIGF@;=>BFGLLIHGHMQ[QJHEEDCDEACDCA:78:8569>DIKIIOUNMNLLKLOLGFHIGKHJGDEHJLNPTRONMNMNNLLJIJJMNNVWRQPPSVIUTTUUUVWWWXXZZYXXZ[[\_fiknmhfffeda^\^aa]ZY[[\_aaa``abbaccefgggfde478677ecbcbfsBGE>xx}Etmfcfda^dje_[[\ZZ[WWWUU]ZWVTSTUTUVZZXY]`]ZZ]ZXUTTUV[b_[Z\ZUTZ_ZRPNKIMNPQSUUVVXYXYYVWXWVX[]^\\adfgfdcch975he^]aa``bfd]WY`2_^\XRLKLG?<>AB?=BHFACEDADFGKB47==A@=?>2Ve7:<::;;:;;:987887kjh6743gf``dben:=<;86eg8{keanR_ZYEH@egCV\c[LMculTWkwvsrwHMCs{nQL`zDEDBAFIJIGBBGGIIHHGHJJQTT[a_^`^^__^]]^ca_ZTTTYhvtklga`\TU^iquu{AACCDEIPV^[@334675683]^e^WSSRUSKLQTQJHLPYbgnz{{}{}~{wtrrssy|yy{FEEGJIGDDGG~|{zyx{~y|~z{~}wspopqosupfeffdabhijjjknqxyplmpquvuuyy~JIHJRSIEDEBBBCCDDFGFIKIFEE~ztvKMMRWTM|~IKJ}}{vrmfimpppnprppptwsrnmqpmmlfa_cospqorrpuxrhgkwqu|wpjfa_^\[\_gr{wonpojiibbb]_kql`ZYZZWOGIJLPP}_y~zy{y}tnpxungdfc]\bd[ROXa_XTRSUY[`ecbbcehjkovyxz~y}~~FE?=BOSG~4{JKILKA;?Rlttm`XOHJKLNMIFCHIFGHGGHKLLKGGJMPQLzINPMLIHJNMHAuqmoo_IPYW`jmqkimoprleijkjfc^Z[`^\XPNIEGIGE?A?2-18B?DFFHA?>?GuV[ZWOKJKNQRTQFACOPKHFJVac[UXUOMNOPOVhugVRXVKDLQT\YNOOMQSrLJIHC~zvx}DGJMJGGFEHMMCLKTXPLLIRYTMKGEEKrf]agbVJBCFHGlvCDyxlLKMJOa\TQJJXkHJMzy~y~vp{rnrsv}yz|wpokqxDDCG FGFFFEE@CEDHMQ_`RNKIPRSY`hqkdXQPONMJIMQONIFKUfuoaURZqwddlmggle__]^_]]\ZWWTTXZ]dhe\RGJTcidXMFUdVSRNMNMMNMLKF{zzmmkrJOZf`Gty}vrpngZZbilWIHIIFCEGGJUorXWeqiUOTUNJOoJg]WZ_]`fZZXLMaj]Zah]SWaaozxd\YXTPPTRMJINCiiHWl_`dhiehfmjEDYZbkjhjfe`UWlmimacoufjMUOKFoffmfX^_ZSYM`xikpzob\\^WOlBibefhge]V[^\[_`[NLRXTQJBLRMPLNgpoe^VRP@PiqeNNWSEPchm\JLekdif]e[XnlbkWR`jl^Wca\W>DULEE]fruxth`U[XZ[VLGEBFBCKNSUZ^_b`cpnurmok_YOTZ_]rzCBzvbanAZ_B|xzsgfsqgnA@vrjXTahdabbX^^LHPlrpohcr}{ebe`^XQMTOQMDfxYGW]GhSxHUNTLX[^g[[h`Toxkrla`]ZTckbei[NMRZXX_krupilnh_][RNPNLRTO@>S`sqk]MISQ;hDM?gfs=_=W7qd]ON5:5_UI?S[NP6@BFW378978=8dWYZSSW^;ADJHCABDGHJIIHGGECBA??`?=99;;8313446899654128;=9248972464586696il:=wtu=?@@@?=:6323]]e477ljg`YYWVWXYWWWZ^_abb`__[ZWVWUSRORSV\^_]\ZZ]\ZYYXUU%"! !$%%#"!$&'&%%%$$$#$&()+,,/0.-.-./.--,-/1231.-+*++*()+,,.02651--,('((*,*&$`#$&'%" !$&'((%#""" !#"""#"""$%%%&''&'')*(&#! !"$'''&%')*((('&'''()))*+**'%$##" !  "$$$%$%%#$$%&$&)&%%%$#$##$$$'('&%$&'&&'%&)()(%##%&'('&&%&&'&'),-+*,--./020-./10-*(*//.-*(''&%%&&(('&%%%(*-+)(**&'())(&%&%$&('%%'&&((''$$&&#"#$%%&&'(*)*-120//010/1.--..-+*(''(()*+++*+.-)--+-,-.-,,,**,-,**))''(()*+,-.//1/-,..-.0/.0//.+)*,+,--,+,/0-+*+,,+*+,*),/ ,-u--...--0;<=#)( 001.-,,,+,--.,+)))((*-0/.))-/0---,(&%#!" !!#&'&&''%##$%&%$$###""$""#" B #&&$"###%(*+)**&$$&'(+-,+'#%##$""!!"! "''$"!$&())('%$'***+*(*,+(''%$&'&&&#"$&()*)*+N(%$$'*+,-/31.+---./21.0121.+++)-1.-,-/0/-*&''$ $%(#!..$" !(.,))((),-+(*+*-/a,&#$$$%!!$('"!$'*)''('$$%%#""$%% #)'$&'(#$%&((%%+.)'&"$++,-.,**(,/32-.2531000132/-.0462u+'$#"!  $ !'# !!! $%()'&%%'*0)&%$#!!"#!"#""!$&'&&*.''('&%'(&$$%&&(%'%##%&((*,(&&'&%$$$%'((.,)**+,--,+,-,--.../001158:;=<9644431//1330//0//12111223211234e33323344459D(*($DCFM(J@<9786437<930/00/.--.-.21..-../././/./02/./0/-,---.165211/,*-0-()*)'(()*+-j.../--.---/110/134443336751/11//13/+&%''('%" !#"!" %$!#'%""$$&"!#&'! !!"" $&())*,+*+(*++.0,*-00.-/-,.+-.,,)(''(g)*+(,,%*,+'(%'.20.0+%!')('(+,--%#$&*-.-*()((&& %'+0.+-0.,),1/+*+*'')*')+)),,*)(''(*+'28*,63743544564224666*2033//-//-14)())*>>@?4&)6436$'3@<7<#D<939I.9:6'&#:@)49>6*)6<6+,599;<>&(!7=G<,*7F'()&&*++*(%%)**)(('(*+02259::8&655542236552---09AFG@;<:542-.4=>@ACGJHIHEFILLIGFDDDFIL'&%&))&%%((NJEFKHCAABCDFGHC@@AFHHFGHKLGBACDEGEBEJHE?=E?BCA;:;;944:=>=<;=@FLKE?=>@ACEEEHGKPMEEO++,RPNKM+/0*'LNSPLFEI'(NLK&&&'L&'(('''HHJJGEC@AHNNKKR-.-01/+NHCDIGEIMONR+,,LHJIIHFEDEIKLHEB@>;;=>??>??>>>@@?@?>>=966:CDAA?@?=@C@99=EJNOH?AEB>;:75442249AHE@@@>;<:35525<=8200110,')*-30NBH6ABEHJJFFDBD?;?GD>;;;625<;4.-161*%"#)/16:879:;<=<>BCADKRUPLGDGFEIHLNKFE$$'-&?>F()(*)$&8@B=3-(%&'())'%D!$%#$%$%&'(((&&&(++)H?@&*+++*)('&'))'":4013,!&,,179<958;<=83688852.*('$#"!:23--*)('(**+*$!"**'%$'.44.*.-**,,,+.:A7*).,%B$)+,1/'()(++%%&%"BB@?@"%''&#$$$%)("D'',.*''$+0,*(&%&*I;O525770)%'())G:A%&CB;J.,,).84/.,*/:IIFK&&(G>?CB=@<8C=9<>C$#"&%%%&HFF%a!"#"!!!$&)34)&%$'+,/26;73+''('&#"%('&%#'+4>CA70*)/=KA32995474220010///--,,.027960+%&,6:60)%0;2//,)+*('$DA@@A:::>HGHPVS,/7=:)=@CFG>==;8//37;,!(=>++371%#'(&"&'1@6579969844:=79679>DHLOTTSUWZ[Z[[XWUPNOOLMMLMLIHJNNNMLKMONOPSSQORVY]\VSSTTSRRSSQQQPOQU]a`_`a_^]^^][ZYZ[ZZ[ellga[WTR PPRUTRQRRPPRNLKKLNRVXXVTQPNOQSQONNLJJKJHHJJHGHIKNOPQNMQSTVURQTWYVVVUVTRRQRRPNNPTW[^_a`[VSUWWWUTRRUWWVVXZVTWVSSVXYYXXWWVVWXXZZ\^`bcdb`abbcbbbdghggiiiheec_]\\]^^^]^ac_^\^_]]\_f47;974c`d4578768;;:8641aaa``aa``h89:98<9;@D>987;?<85kkhee234335443232a`122211ccbbb_^`[VWVVZ^__]YYWUV^gje^UOOTTRPNORTUSRTQMOTWTQPQPPOOPTURQQPNMOKJOUXZZVRTUQOPPQRQPMMLMORTUXTQOLLMNONMJIKA9>DEHJOTUSSVYXUXWSRQPMNSVUUURPPSXYUUTRQRQPPQPOOPSWXVSUWWVURNMNOPQQSZc^USVUVVSTRSW[^_``^XVXYZYWVVTMMMIMPQONSSQNIPZ00^ZWOGNW]ZXXXU.0/123200]XSQMJGFLRNHGJPVWUSMKKMNLLTZ[\O?79?7=E?DLLFECCHKINVVOHAAHSSQQSVSSUONT[bb]]ab`]\[\_^]_dfi657985654532234356565bZVSQOOPVTPOMSPJIHIB@BA=>@FMROKHIGFGKGCBEGDFFHGFCA@xy@BDECzojgkib_aee^[\^^]]\\]^inbWSTTUVRSTWZYXZ__[WWXVSQVWW\[YWY]baajplYKKJIIJNPTWWUWWXXWXYVWYZ\YY[[Z[]]^addbae5786gdhje[YbeXX_1_\[ad`USQPLEDHMICAEIA9?EBDJMJEBCE@>ACFIFJGCDDDCDFGMNNNPSTQOMOOPSUSRRPQVXYXQNTXYXYZYWPONOQNHJNPNJQQHJOQIJME?PPNQRG>>;6g7mihjkkjjj86m798:==<>?;9dQWg7868<;;=;99;==;:9:;:8nijm7lheacc_ai8;<<==;:86mTD?Dgkba^OFW`QVRNWWhxmhornhfdnqoYI[ifaXUPIDEJ]tAHHJIGGKMNQPMIFhFanw}BDCBGIGC~x~CFGIMOKLIJNOOORUW\abaacbcipof__bdhossqprtrrjb^_dny{wyBEEEJQY\WMG>9;:8:<976hhc\[ZTI?>FLKIKRZYcsz|}wqnqtsomrwzyz|utqpqposvxz}~|wvvx|}~|{{yzFFFwv{|xvwy||zwqproqqpolfcbcfgimrojgefhnwvqpop{{tqkglqpwxyKKLHFFCJML~|z{~z|}}LNLJHz|~HKMJvvwtp!uzzwspmknnklkjjjmnmnmkjknomlnpkilmifilsuttrplkuxwvnjjfa]YXY]`ipvvtuxxz{qd^X]mwskc[Y^b_WQONNTVNY~|vwztr|ndlmb_fnfVQZagd^^\]nvmid]]aaabfhhnpjmv{zusw{{nCADFGGC?:7EEe`YSLOXZYVNKGEFNSOJIIQbjb__XNLNPQMLXeh_VSVRKJNTS[b[UONOQMKMLF|usx|GPPNJDGHGKSPJMRU[YPMGOZTJJIFGOOpioheaRGBAA?r{FMNiuMOGEKY\TSX[REQqGKPHz~wnq|ppuyxwopv~~EIEFIGGFEFIHHIHCCCAFLLMQONNMKJNTQPRYfbWVQNPTKGJLOOJGDDJUbnyticVTXh{vfdjojhha^__bbb`\ZWUSSRU[gqf]TGKP[e]RGMX\\WSOMKJJR\TF}Fpb`wQSSUX__Nq}K}nv|vkaVkc\ZZVLFEHFHNSZ}JvhrqcW[__XPY|qeo`][S\bfljcSNV]gTKYaX\egafzZeY]YUSMPVVQNLECSm`gj_VYchfYYm{LF[\gma`hg[LQfkhhgjsujggvJJH|uxti\XWPS^oxo}{fRS]_^`amlcechhdZVUUZ[[\TNTWWSRM?I]PLCPtq]LXa]UxDZ`i`RSFoSjji^RQX_g^]pp^NPdljZENbuhYkplbTTSEAQ^Ybiv}lda][ZSHEAGNRSRKEGJPSV[cp|~tkghcc`[RTawx|sijabdk;NSDxploo]Ucmz~{xtmbYTV_[OVYQ[njkZV\emlhmwoeims{_RLLLIGDBLUZc^\TJEF?IQLCF[aeTOVfhqqmjbU_f_\YVccUPTZ]WXesxngkmjgih`]VXZlrf`QHPX_dbWTFVJ:?AIGHF=ML_7::A=:>KSOI?4\7?46?GIS0027=<:=?>>DC@<86bae48;@EFHIGFECBCFKJHEBA@>>=<;;>?;4344678;;7551058:;869976443467773hiiihijl:;<=<=@@;lgb`cc6:97e^\XVUSTUVWYYZZWVUSSSRSSPRTVXYXVTUWWWZ\^]ZXXZ\[Z[[XV+( !"" #))&'''&&&%$%'('(*)((**),0/*+.0110-,.0/.//.,+*)*+,*,.0///13662..0.+(()*,-,+)'&&''%%%$$%%''&$"!!"!!!#$$#""$&)+,++,+*l,,,+)&&(()***+***+,+*(()**++(((''((&%$$" "#%&(('()*+**+**)&$%%#$$$%$#!#%&'%$##%&&&'&%$$&(++(%%&'&%%%&%(&(+-../0/.--..-..-.-+*/330.*('&&&(*)(&&&%'$###$%(+,,+)&%%'(**(('&%%$%&%#!#%&%$%&&('&(**,-+)*+,++**++*))**('*--,+)(&()***)'')**)*,,)(*)(()*)())*++---./00/-,-./0210/.--,,++,+,..,+*+,+,+ -0+*,*,-.-,,.--0" #&"332//**?,,-..,+,)&'&%(+,-.,*)''+241-*'')*(&$$%'('%&$"#&(&$$$%%%$$#""%%$E#"$" "'**)'$%&%$%&'(&&$##$&()*+('&$$$#$$$"!"!"$&'&%')*)**('&%$$'*('&(,-*)))((('''&.(,-*(*+++*'%%&()**+.30**-,,-+,,,./0100/,+,-,+,-,+**)$$%#&&&#"'(&$ #*-+*&"'+.,)('%+(&%#!"%" #&)(&&$##%%#"&*++$"""#"%++(%"#)/-**+-**-)(,/33/0354100121 01344+$" L" ! %" $(*(%$&$$%'%#"#$#$$%$#! 64"$&&''*((('''*(%&%N'&&&$$$&('),,*('&'&$%&%%&&')())()**+++,+,./..,,..,-,,--/10137:=>=;941110/373//01124434b55344452137;?ACG''#CE&())'F>:8;:523552../00/../07;4-,-.-.,,-./../11/--.-+*.0.10.,-/111687.%%&(*,./-..--,-/--..0.-010010012212352441*',1'%(%$%(**%%%#!!$"$! $""%'&"!#$! "##%#%$"#""!#$%(*)(*,,*)'(((*+*)**+-..,(#),,,.//-(&'()($&()'%*-'')+%$&!()')-( &*)(),,-,*))(''(*,,+*)'('$$&&'())+-.2.+0/,++*)*++('+,*++*('('')++"3 "*+,-0332126444554446)%+35245642/11-.30(#$69676.(56*.,+1.8B=9>A?;97:>>5(F2<:50/,%#%(/8 $%&%#%)**,+)'&G46BFHI&(('+,*'GEJ()((+,)+)+./0.022%576566658<<734669>BA><>@??;536:?DDAAE# $%%'+00)!f..+)+-+&##(,+*+.225>HJFDEHGD?<;;>><:>BEDCFJHA=>=<<<=>?CEGFFGGILMMFAABFGKMKIGHGGJLPPOOPPQJCBCBBCAAFCG%%HI&MJE??DCA??@CDDA=?@===?><75437:=?GGC@;8:?@DCCOUPMO+++(JJK&%$IM)**OLJHIJHHKJHDDKIDEHJJIKMMKJJJD@ACABHQVTR+,+)*(KGFHGHJJGIJKNO)*-+IAABA>???CEEB@>;;>?=<<<=<=<:::>@>=>A=;>>=>;878;@??=;AIRULFCCC?;:86542335;=@BCEGGFB;61,2>D@=81069740.,+--(G2KQOKB>@MXNB@BIOTL=8@?88<@9..2351,*(*7;9:868;::9::;@>;AHJGDABFLPRPMLJGED?7#+,%#$&(&"!#$&,15632221,-/---(J&&(+'!"$#$%'&#B%)(&'$=;F(-./-*'&%%%&&#B=:5,'#41-4>?>;<><<>=<><8543/)'$!! !!!$:4/+'*242/(&%$$(+(&%&+6:412.)),,-*(0893-*,+&&*-,051-)(**&%''$C@<;>>#*+*("$&%&,*%(+.20*(%)1-'((&&,-I<:@:65,'H%$##?C'**F67C..(&*460.151%+=KKI%&)%A>AC?:9;HC::=HMC@A?;=?BAA$'$%&$GDF%'''&&### "&&&)'&&%$$',+*+.53+)&%'*&#$%'&$#""'-38?>63+)-9C=326865520113322/.-,,--/29?93,#%)293,%F*4551.+*)'',3.$B?D$D:32DUOT021249:/:B*JIIF;?D@:3-94/+)%#',B(<3:90)-0.,',A95>3/0-59:@=6+)/4:-'1826??8;FS5L4/30.-*,00-*(&%J2B6>?5-.4760/:SF'#217;339:3*,9=:99865?TTP((%?:=;5210*+1:A:@CA4(+1212294/10575/,+,0124.*,..++)#0(& (@?2&.30,9#37;3,-%7,9893*+25611<>2'*6:9. *8C9/:67552/))/98=71400/1')!;97<938:=ID1+'&'&%#!)02523-&#%!'+(!$146+*2=;@PG:884,1610-,66-),/1..4;868:=DLNOTXXZZ]`^[WSQSQPQPOPNKKKLONLJIIOPMMMLKKLNPRSRSWZWTRPPQQPPPQXadfggffgf_[YZ[i[ZXX[\Z^]]`^XVUQNNT[WSOLJJLMJIHHIJJJKOSUUSRQPQSVWUROLHBDEDFIHHIJKJJMSVWUTSPOMJLQUVUTRSTWWUUTSRRUVTSRPNMNPRhSWYZ^_XNLONPQSTQOQRSTUWXZYXZXUUWZZ\_`___^_^\]^bedcdegkmlkj68986jfc```_acdbbc]^_aaa``_\\]]^^e:;8hb_`b12468675321cdc`^^aa`beg57nohh7AB756:<8;>855hgg33246554555c_`1]ZYWV]aZTTRRONQWYVPOQTVZ^^[YYZ[YWVTTUTRPORUSOPSQRPNOPPSSSTTUQQTQMMMLEIRVTSRPQPIHKMPRRSZWLJKMQUWURSWVNTXRJFFKNGFNUTSSVVVWY[XWVVVTRPPQTSUUVWWWVWYZYXWXZWSSVVSQONQSQMNQTSRRQQSTTSRRU`cWQSRNMMNPSWWY[]^[VPQUX[\\]]]\Z[XVXWWO@EFKLFEFHGHILMNNMJDBNUNILPSPSYVRRXce\Y]dc]ZY]^^^`i89756764}5454223444566786eZRQQRTXUONNOICB@@>>EG6P6@JJCIA@BDFGIFFGDAADDCFIFFEECB@?=:7inpl:>?CGJKKJJHGJJIIMMJKJHIILKGHIJJKIJMPTXSQNKIGIKMMNPMJKMPRQPPPSTTVXXYYWWZVVWY\[Z[YXX[bhihgggc`cf`^b_Z\_``abbbddfihiilnnm66lk6687]kfen>A@gaZ[[]`e49=?@@?=:9oljfffg6:>?=;;84ij:>?>?C@9VMU`i9;=?<:<;67:CJMIR^QA7@HPa2WGE@==OF`\WNKUhnaMHLPGHQPVWQT_ib`dZQNNPSRKO\beaVORQLLORX]XSOMLPQLLMJED{psuuFROTPKQOLQVRNPSUUMJIJVRFHKMJKM|onj`c\OGBtuA|BJMHDDSXUPQXcVFWktszFRWQ}vvz|yKzqmv{HLIDFGFEC{w~BEEDEGGHNRRSSNJKMLLOMLQQS]XRRPMS[MHPPPMHGHEHUkxoac`ZVR^~ybaikeeb]_abdccb_\WSQKJU^r{lbYPRTVYTJRVWXXPKJIMQQKHDEIykerVVQPPNmMMxtj_r_e{x`WZUZdjfX_I[dmokf]\b]ZexnQKZcWNX_ipm|rWUchsyiedcimjl{K|]Y^UTURTYZZVQFB{bcZ`c[]fc]PPcvnPTWYeidaZWSMPfjqlceou}oVYqqp~HI{FIdOHISV^oktwppXIW]WV`mthdcgigaa][XWUWZYXWVVWNFLZOGHWdXKGMVb\SIABZcRRL@K\a^[^aPSji\]a`TCQ\`ww^[qrV[SNWclQsQXVZ]``koifd^ab^ULEHJTQPCDKJKHJXeksrigjf]arym_h=lqpi^V]j;=AOKvmiia`io?G{omg\^[PWQILOM\tjdihjfqkcmk_WZfortre]VQED?;D>AWVVYRNREFLPRH;B>@CHJJLIECA?=@FKLKOQNJF=6332468;=:7851/2::58<:9965347994aOd3eceeb_^abhlj8;<;n``cdg:;78c^ZSPMMPQPQSUSPNRTUWYW\YWX[Z[][ZYWZ[[YXXWUWZXWUW\WKC$++(+2)#$%'')&$$%%$%&'*(&(()++**)((*,,'%*...-)*-1/-,-.-+))*))*,-./(132.)(*+*('&'(*-/..-,)&&''&&&$##$$#""!! "##$')+--,,+)**)+-,+*+,.../010/0//.-/,*+,++*'%##$$!& ###&((**,--+*'&'&%&%%&%$$%%%$"!! #&%$ #"#$$%$%')(&$#*$%&*./0122243.+++,--++,+*+))--)('&&%'++)&%$>#""$&%#"#&)**(&%'(*,,*))(% "#!"#"##$$%&(++*)))('%&')+--,)(*+)()*,,++)'&')++))(()*+./,'%'&&''())**++**)()*++-/0/.-./.,,+-.,--01244430///.-,-00..-**+,,,--+)*+,,,0-*)*,-//.,*,---.05433&& 0//,)*6)(('&*.)%''%#"$()'%%'()*,-+++,,*))(()('%$&(&$%&%%%$%%$%&#$'&##$#%)(&%$%%!!#&(('*(!!"%(*+*((**%'*'#! #&""'+*)(('&')+*)(()(&%%&()*)**+*)*+,,+*+,+('**''&&')(%%'))('&&(*+*))+01+)*)'''((*,+,-./.+&')+--.//.-+z,+,&' & &+))-*'%()(++)'('%%$%%" "$&(%  "%''(+*()%!!$%! "##"#%%&'&%#!).*&(+*(+.,++.44//2661//12 51,&! !"# !  !"#$%$$$"! #:$#"""!! 8996 "%%&&&%$$&&%%((&'&%%&)'$%&&&%$%'(*.*)('&''()*(&'()*)())*+*,--..-,-,+,--.-./379887621340.00/02<123457667898765544;!$%"@"!:;"%(%#$#D?;;:5/,.0.+*+,,.067++-,,,**)+,/201/./.-+.422..,*,/2682/(""$%&)+*,.--,++--,--//..,/1211121-)''"$*&"%*&('#"(((&$$&&"!#! " !"!!"$''$#$$(,**,-*)*,+*(''(''()&%'))++*&$'+,,-.11*'),-(&&)*'&),($#',+,$ $ #))#!$%&(++*-0.-,(##')+++)''(()(()('')**+.0440-..0100/--../-,+()))+-./.#$.*(+1552--,.02 676432101'$&-4 ! 6640142/4/$'%29)242+1,"/8.*+3;614<;=:755328BEA@=:4358>CDABF##$&&&'''(.21'!&%$ *)).0+&"$/446:>==??<:9:996779=>:7679>?=:9:9<==?=<>=>HKFDDEILKJKEACEFCDJNLHFEEGLPMNLMMONMFFF@=?CDCF$$$%&%%%KIHDCA>99==<=8238=>=>@<98:=AEFFCBAB@=<@?>?>=<::=ACA?BFHHJW/,(LKLMKC@@@>==B(00-'MHDGGDGIHFBDIGEJLHFJN-KILQ+TOQ)QMKMQ*)OKJIIGCEEDEKIEHNQNS,)IGGEC@>>@KA@=:9977998876634668:99:<=<<=><;>BB>;986:AEGFCA>C?;<>BGH?:61-*&(2>JU\VFAADHIE@DKJGEIH=8?<:BA;56<<87205:CFA?=:4+30*'('&%" "+2/*()-,*)*)()(&%$H&'%$$#$$""*0(C$&EE(-12/,'$###%&%"DDB=7)"$1CJLKHFDDFIHEGGDCD@>:872-) $'$62.*)/68:;$,*-+&++)*-+(),//)'''/+%(*+)(*ME?=:550)&G#??#A#)+'$HNJHL&/21--290$-9?>@'.0,D?DMI>>@FC@>BK'FDC=:@ADF(+(D"$$###FEBBC"#$$$&&$')))*&$%&%$'((+**2-()(%*0'%*)(&"#$#%,7>;132.*'.BA3257432/01134332/-,+('-4BI=5/)*,/1-&GJM/4434-)(''+,'$"@#%=935ALMZ42/.-,H9I-/RLLTSNJA>9/=00?@0+-')/43+-&4H28;85//40-1=7'%,2-'06=@;F@.-58>B;99;@C>=EI,G2060./.0332/-$#CE89597/0752((6E?*+./7:5421.))68==7:>?A:,-===D&(C>#%F2)&&,-195>?98( ,1-,189/015885631.-,0101.---(!#.'#",6-%#&-51+&" 19--('352023)+:7.232+ +34AB21@?+1.+/6=*7*0.-/35>?9651110-($&&,))! ##$#$,47==6696049772/47 $>884/0-&+)%(+(1=6353318419:2.06:;=;4/+(## %"$10.0-,.#$)**"$<:...41<>78==453--.-1610002//3<@82351.-//0(,7:A<:810(&*+'-2$*&(,-#4#5!## $%###!>+*-!##$!"""$%#!V+--,..-+**+/115-+,+,.-,'%#$%&$%&'&$"$&')*(+***+**+***)*+*)()(')))(%%(& ڀր~~ +ဈ݁Á žſ.½pրƿþ˺ɽ́Āþϴ݀ùꃀṧЀʼžɀ®ɷ¿ҿꀊ;Ƣʸ̲ž;퀈龣ƼӀ¿ɽ¶ûȼˀǼؙ㕈ā˷򅎏艝ꁌᇒпͰ󉓢̡󀋘²ݯɀײ÷ηǣƿøü̳ijƳʹŽȿ׿ť̼øŵտÿ嗭ѹم¿ꍛ󄍕Z:SVZ[[`5dZSPOQYb`_]YWTSVWVWVV[[[\^`_^_`ejihhefge`]_aegfda`^Z1\^^_`aabeiolc\YXYYWRPNNQUX]`ab\VSSUSRPLJLMMLLLNMJIJJIHKNQSQQPMLNNMNOQUYZVTUXXY[\7^`a`]ZVTUUROPPPSVUSQOOMJGC@>><<=?ADFKPSUVXZYXUTVUUTRSTQPJOMMMJGFEFGGGIJNQPOPOPSTTUVY\ZWSQQU_ghhhgbbee`]\Z\][WW\]][WX\[XVSQNKKLLIFFGI5KLLKIIIJLNMIIOVTRTTPMKHGHIGECEGHHIJKLMRSPOPQQPLKJLNQUWCVWYYXZ[XXXZZWVSOOQSQSSTUVWWXVRPPQRSRRSTWVTUSTVXWWWXYYZ]`bcc__^]][\`aeil6665445567874daa_`bcbacc^^```a__^\^_^\\^bcadedbbee2344ea``1343fcbdeg44gedddbacd4@MB:6mmo@G?75gcbefe`c3hfdceb__``_/1321_]_`\VUUUVTSSQPOORSTSRPNOPQQSVUSSSPMMKJLOQQSTONMORVYZYVRTWUSRQQTVTVWZXTUUSQOMLIGGHKOWULGHGIPQONPSSW\[ZUNKNPNOPRTUVWYZ]^]]]\ZXYZVPQTSTVY[]\YXXY\][ZZYZ[\ZTTTSROMKKMOQSQUYVRUSQSWZTPOMMNONOSXYXWVVWTUX[^_`_``^^^]]XVXXVUVVRLOVTTVPGJW^\ZXQTSNGM2<=<742-XYZ__\YTQPMNOKILMMUOOPPNMJIJOQSRU][URRPNSSNLMMNNLLNNLJIKLKKLLIFILKINSTUVUSSTV[\Y[^ab_^\_aabe68643465543242223445567545g^TRSTUVTPKHE>:@@BCIIC=DHKNOWK?9=BCEGKKD??EGFEHHFFEFFCCB?;kj8k:?@AEGGIIGEFKJIILMKJKKHHLKHJHFIKJGHJMQONMJHIJLMOOONMNPPPQRTRQQQSSTVUVVUTUWX[[[ZZYZZ\ZX[`bbabcbcih_[[\\`cdbcbbcfgjijjlmn7898666899877669>?>:nii;?=:9lkmliklic]Y\aca___][adecc]SU[XUURPPRUWWWYYWWWX[_\XPUZVUWc^Z^dacr>@CFIIHILPOJMTURQQPPOOLNPNMLKIIIKMNNORRSUURQSSTSRRUTRPNOMNPOHCB<@OW[[_ZQKHHHAjpBEIPRPQ]d`YSIHKLQSRPQSTWXSSSRNNSTQSY^bdd`aa]YVW\^^^`^\]`hhhb[YYX[]_di^LQXVTU_ifg_ZZYXYY_g6<@=:9keiigedbel9=?>><97d4<@=;=ocd`NIRb6;?@@?;78><<>ABA@@>:76lihic_akofh9q76l68qaUVJpXuqaZLESY\cmt|qdXeoowumo{{pgeaTQ[gnzAj]\Wg}CEIKPQHIPSONV]YQNOJHGGF~i_fifkvABDHKHOPNQNJJPMCGUbotqkhggb`_[ZWYYY\cbagtwxvld[W]envx}CHJHHHFGGFDFHNUXXTQH8`Y[`d_LALc`[VPX_ccgqvtuxropqruvtry~{vtvvxyxwrnhiqutqmootzxtsrrtyzwuxy~xrsv|}z{zwzJG~yx|}~}{yvspnklnlkottmjpxzyrosy}wsv{}~{vxzyxtooqu{~{|GIOUXQKG|}w{}IJJLMOOKJMRNLNLJKILJ~|ONzxyuslihhilmkkjihfegga]``]ZTY`bb`^_abbbefccfjlkhhqvpntxxvttst}~vrsvqqv|LPPyomqtpgdgjpnjd_ZVSPPk}y~{u}yqqwwmhfhome`ejfimos}znd]WUVTRZn|zpgjnszvou{psGRZYSNJGDCEMZba\VQPRMGGHHCEJLLOOHGFDEIJIDDFGJKLONKIJILRWZ]^SKFDB@BFJIFEGKukqqlsyzywtqrv{{uprqokhlqpeZPJD;4*/?IKLP]LY592DZ6X3*5:<>K@TXUPLVhgSILOKIPOR[WYah_XZWRNHLTWRPY_a_VOOQOKPSTVQLMMORROQTK@D{uy?BMONQKLQSW\YSRPQOJDAGTUKHKMKIIGwpf[\`\SLFBABDGGCzFJKNOJGKQSNXae_[pKWTLwu}zqmor~sr?FIHIG|bVnBHEAEGHJSQOPMKIFGJMLIINQRVVTRQPRXROQMKHGHHKV_imcdgaWTUaplZZef__^ZZ\_```^]\YVTRSZbikgc^[XVUUPIHJQV^_TMJJPSNJFDAA?jab_`]Zao>BD@{xmjhbm}|t~toodQVYV]WC=BO]jjhkdhkHl_YUUW]^\el\^r{dPTRFECIOND>EIEGAHRHytJOQVjzughjlptzoaWONRVc`WUUY__cilibbhhdc`VRNGQW[[gjXZ]`aP<>IEdbCOYbTA7aS;DCBIFJKBA:7CBFJFJPHU26879;;;<=>@EGB=9gZc7BEINONPRNIHDA@;9;>@=6223579<;877646>?:89::976579;:4bdba`adba`aa`baemljhcccd3795689e[\[XVTQQTZXSUXY\[YYZ\[\\[[ZZ\\ZXUSRSUUYZXZYT;%'))).0*&$##',++)('%#$%%&%%()*+,---,--//..-,//-,+-/110.--+*)+,-//014761,**+-,)'&%%(),/10-)(''('%##$$$#-$#"""!!###&()*()('&'''()*+,,+)*,,,/1320024420-+)**)*,+*'%$#"!   !!"%()()'&''('%##"""! !!!"!!"#%()('&%'&&((*,*(%%%(.21//10-,,+k**,,,*''**))'&%$$%%$###%$$##$%&%$$%%&'&$#&*)'))(('&%&%""!"#"!$&&'''&&&'(('%%%&&)+,+)''&()+,./-,-..-.,()++**)()))()*('()**((')*+*+---..-.--.-.1/--..02../-+++-.-,,,.,+,,++-.-,-.-,..,++--,,-,/.#/10//0/./0#,%779"'!/+,/.,*,.,*t)))*+*&&''(&%&%$$%&'(('&%%&'''*)''(&$$#"$%&$&'$""#$&()('%%''&&%%')(()**''(&%$#"! !!!$*)#!" !%&%$%()*--,*&$%%#%&(R)**+++,+*+-)%%(()+,--,*)(*,,+**)*+,*(()(('&%%%&'(')-*'*)(*,,)''&&()&'),-,+*)*))+./0100/..++,,+*+--+,/+**& !)-+*)%'(%"%(()-,*(&%$$%&#"#%%%&'&$$#"#%&'&'-,(&''&))&%&%&&%%'(&&$%%$%&&%$&'((+,,---++--/1/034421 /01224-("!!! "! "%"$&'''$"$$#$#"""$#!! 687 !#$$%%$#%(&%%'('%''$$'&$%$"%'&#$&()()(%%&'''( (('&(***+++)*)*,++,+*+,./.-,--./0.,/34432#64.-../134322124576689:9 "! ;87 #" <;<:9:;82-))++*(Y*--./-(*/.,,+*)*,-..././../1/-''.*&&/-),1..7 4'#%%&)*)+.0/.,,,--..+---64/-.00/./1124522,+&&#)(!$(&&'$!$%"&'"&)'#" !#"  "%''&&'**&&,,*))''(''((&'''()))***++**,,--+**+*)((''*'!! (,-.1-(&$$$"58"$%()((.43.*%$&%)*)()**,,***)&&*,))++,./0210-++./..//-.04330---,--/24.%(+B05351--.--.02 5046432125,.)--# &1 63440./5723745.*)#8/>DGA95)(1015:@D?6/7>=C@:;AC=540)).25@$623.7D##%',,'(.0-,263,+-))'''H;7<><@F''KPN'*,),*+.,*)-*$'07>?;#9::96675323334755:CCBA;73159?BAC$''&'%$%&)--,)($*&&())!%32/,*15767?B?<>@ABB@=ADCA@BCCCBA?<88>?><9;;?EECB@=?CFEDDDGHHDACCEGFHGEFLOO))JFFGIHKJFEHJJIGFC@>ADFFEDA?==<:=>;<@EE>:>CEC=;>BIONLOLGDCEHKLIDFDA?=<=>?DILLKJJPXTQNJFDGGDEMJEI')-13/,*JEFBDHKJIICEIM())*+--+),.+*+)JK''LN(++POKFHHEDKPPQQNLP.,MDEECC@>>=<=>===<;9:;:646530,05676558999::99:<==99?A==CEDB@@?@EIGGFB@@AABFGKNT-/-STQOMGIORMGA;:<=:669;<::840.)$%@HNNGC?@ED=:;=B?97:8589:=DJGA>96321.,4AHILNHE@=?@BFKQSQNJA:=A:7#+0/+)(&$$$'/442.*),*&%&&"#%''))%$%$$''&#"%$&(),-*'''(+/134.($"" #&%##HGDB%(J=7<<8:979;92*#!  $ .0/,*1;9+%&(&&*++2./593..+))%(.0-+1553.)(*)'*-,-+())*,,)*,&="=9= !')(*%'+-030++*,+(#!%--'&(*(''%DB@91231,(%#%LH#%((%HFGC(++,.)'*./,0240/<)2/*KEEHEA?CGHIEBGJFDB>;;>EEHD<< #$$%$HE81:"&#!%'''+)((%##""#%&%%()(--*))(*0,*,'%##$%&,26:4362-**0;9-.65010../0132100/.-+,15;<8420/.-.*&&(NHM.065.*('*+)&#!-("/O^0254*KF?8KSGQU++-*B9B66C6=@3/.6767;?95I-A-3><<5(-705;,&*1=96:;6:DB69:?=EJA@?9=AFCA<91/230.).2:<@;54/&$/0--37512/,--.355*(1>=,/3+2;893557>I@45206=AA<9A'*B,++-,(*/%'1586133369<=4/23632142111220+)+0,#*,')33.*(1510-'#%*))0.%!*-++2=/(*,+*--,)-07CB9444%+.,2065)+&&/00&&&)/0,4:740+('(&%$$(()&*./335436325:=400/.+*,3 =<88826>=8A:662),-)/.""*19845035A%2/.,,-10.4:03@E3&*)$#!$))##'$%!%+%:7(,.19@;358<>?A;4-()+/74-,.0325797116642S0+*)&.13267-0344)!*&22%+06-"2*$"!#"#"!.(--##"$&# =-.-,+,.-,,,*)++.3221.-,,/*--+*(%%&*)%&')*)***+**+,+***++)'&&%&''('&((%ۀـր߀ ΀ǁ߁Á ¼¿ĿˀŽÿ¿Ѐــɹµ÷򂃀Ųǭēǧ²€ʼ˺ðºùÿ¿̿¯ͻ⾡ϟ̏쇗눍ú󂇉нĽр¼ǿȹƸ󅏋ͯ󀧥Т񜪵ǀϼ쀐ꀃܪ揗õî怒ФꃐـƲܶЪȻ¼ʶ¸ȼɱ刬֭ƵӰͼ⅗ʺ̯Ⱦ¸Ž˷ҿ򉑘ƹ̲ȯ˿ν샀ͷ ǵŤѾ¾ŷŲԵㅙýlWXZ^]\^`_ZVSNJOTYXXZ\]YVVVTTVWXYYY[^`__^_bb`bhjgdbelomkfcb_]_bb``_^_bejnrtrka]]^^ZZXTSRTWZ[[ZWTSRRQONMNPPNLMOPOMLKJHJKMPQPOMLJHFGHIJNPRTSQQRSTUVY[\]^_aa]ZWVUTQOOPQTVYZUQLIHIIHGDCDFECB@BGJMNOQSTPOPOOPRSTUUUTQOOPPPNMMLLLJKMPRUYYTRRTY]`acd_YVSW^a^[[ZWVVVXZXTPPRSVX^a`\YYXVVSOLJIIJHFFGJLNKIHHJKJHGIIHJMMOQQMKIHILKHGEDFEDFHIJIIJKKLLLKIIKLLNQTWYYZ[ZYZ\bfc][]^^__XUWWTRQ"ONPSWYYXZZWVXYZVUUTY\\ZZ[]acbcb_]\[\bc_`addg554gffg4ebabc`_cddb[XY]`^^\\^][]_^]`a`][\^c68ld`cf479951a`a344ebad69;:7jiiijihhgjssjii7:=HEnba_]bca\[aa`aaacc_^`bbc2431[11`^[Z`a`1b_\YVTUXXSPNMNOOQTVSPMMPSUOKMMPSRQPPQPUXWUTRS[]ZVQQRQPSTTVXWUVXXSOMNMLKMPSSTPLIJLMPXYXVTWZd4ea][YVVVYYXYXVX[\Z\`]ZX]cca`ab`][[\YY^_^]]__\Y[[ZZXUTRPOPOPSSMLNPRTUROPQOOQRQPPSUXXSTWWY^a``]\[Z\]\\[YYYWTTVVWUTWYY\^^__]^[WWVYXQMO_67970.^ZTV[]XSPPOOMD@EIMOPQNLNQPQTVUVXXVVWWX[`1_WRPRTRNOONNOPOPRSRTQLKJMMOTUOIKPTVY\YWY\`cc```bcf773dc2444545776522234337;>:779:4[VTTWSMHBDE=AADEGGHHHJLT[SHA;>>bT7OKA@CEGGFHLLNNNLFFFD>ij>;9;AINRVY\]YTMKND?EEHKKKMXab`\VTTRQPPRUXX^`YWXYSMTYWWY[]][_]YWVUSTUUX\\\XXX[ae_\\\[Z[]agkke`^[Y\`cgc]_^[\\]aa57kkhfbegfedaadg8?C?:89549:7e^PBBM]M=N^l;;===?;76jkkle`^aheaghhfcf59pb^_E`wv|sdY92JVXWeyEBtgo}}{vhjtutnlvB?FZET`ouDKGCEGINMLHFFKNOLFJLIE~v}wkddehfgwNOLPTQLNQWUPMII|BPUZ`b\TQRRLMMQRPQTVXZ[Ydprpnke_\`fpswFIJJJHGIFCDDDGKRUQLGGFBBEDDGJOWVXQJQOQ^^SOPOOKHCGPUPJGGGHNOKHwn\QV`h]QMLwxC|z|x{CCDHGGILBFDCV\XRQam>IGDCA|xwxHHKEyqmszyyomyEL|Z=LnDLIEDHOS[WTURQMGGJMJFJOONXe\UVWUVQPOMLIGFCHWagf\\`^VQT]fgYX^b_^\VUUWXYYWXWWUVWVXZ[``_]ZXUVUNJIKHKW_ce]SPNOOKGD?oc_[Q@7fU_kqVztx}{~n{SkjmzuweVWRknrt}{phlze_ZUzalviKHSfptscgumckgbfr|kcZUcfbbqwnbZVVQXqhVOWP]vuiYOINN}nG[`\WXVONZ_kuWDEP`kfllTajjl{ug[eiiuqb[crpsonnrEUdXUXZahXVchjkmhgbchejttjdpnfdbab_\XUPKIJSXOM`cXZUX\TS[\YVRMLLIFILVM>EHUcb^WOTUNR[WXcsyfaiiUE?O_d`IPdj_WWULEHFJNQXSanph_XQNMKOQTTRUVWUW\_[VV^_[dqAGJQLgWeqxiegpBGrTbkeXfo|Dzj\fqcSW]\c[LLHCOam_icYh|@>wg^ZVYWUZ^UX]ddVYaLR_jiZICMKEDACG?;AIKIM`osndNNWbtpc^VRTOUXYSJUa`dea]^db\Xbg]WSF@GQNW]STSYeb>mhmAIFHSQKEB:eji=GQH;GJE<BGG@=94aah:>ACA>;610-5;=;898W7688994ehgdbabbb]]^_aacged343dcc27:8887nh`YUTSORTSQU\\Y[]\\]ZYXYZYZ[Z\ZZ[YXXWUSTTUX[\ZX'&'((()+,)&$!"&(('''(%%$%%%''('&'(*,+++)*+*)-00.--144420.-++--,-,+,./3679:70,,--,,,)('(*+++*(''&'&%$$%&%$""#$%$$##!"$&('('&%$#"B###$())**('))*,-/00123452//-++*(()*+,..,)%"!!"##!!##"! !#$&&%&(&%&'&&';&%###$$$&'&%$#$%'*,,)'&'*-,,..+(''),/-+*)(')*)*)('&''(*-.-+(U&&%$#$%$##$%&%%%&%$$$%$#"!###$&&&()(&$%&&$##" !!!#%&&%$#$%&&&%$$%&&'(*))()*)))*-110001\,,-,*('&&&%$&(+,+,--++,,,+**)-/.,,,-/0/.-,+++,,-./01/,-.//010110-+,,+,/210+)*+--,,+,**-.,+K-.++,--++..-/1112200015<;644"'#5..,,..+**,,+++,..+*++**B)(&(--,+*(('&&()'%$$%&''()'&$$%')&$$$%'&&$$%$&((&%#$(+)'%%&%%&&&'(**'%$4"#%''(&$"!"##$#$&*+*))+-31.+++('&''&''')+*),/-*),00/-++*+*)+++**+,*)+,+,+))'&&&%%''$#$%&((&%'(&%&'&%')*,,((++-1221/.../00.,+,.,))*+,--...02000/.,*)*--(&*2(&$&*,)'&$%&% !$$% &$"$&&&)*)((*+,-/.)'''(('(.)(()++),+((()((--)$'*,.131./134310023400&" !" 2#($  3-+$!"$$#$&%''(%"""#36 !"###%%$&('+(('((&$$%$&&"#&')%%))%&)'%%((')-.*$&*--,,+*)*,-)(*,-./331.--.-..--/021V22321/0123566542346787789:79! <9888:721.+*)'&$&%&'$%/-+)*+*+-21.**01/-,-)"&061*)'',.)+22+'&'((***++,./...--.0/-'44.-/0/.//0046601453$%$&&!! ! #  !%(*%%&%$$%&$! !  !%'y)*+,+))((+,*'&'$$)$!%&$$%#$'&'&')+,,(%'*)*,---(((%&%$',*"""#%(+,-.+*%#&# #"##!#'-121.+*+)('(*,--01,))*(%),+*,-...11/.-+*--+,,-01.-..-,,/13441//.,.1362.././//0056430243321124 *)$-$'16  554631014203543122-.3#2ACCGECC87>?>98?F#!'5&,8AA&)$"%'(,-,)'&)+,*%(*'%GCHD=888:76@I--+.0.++/30.+*)A$-.0463-,,-)*,..,-0111218???=<:546:?@B)G%'''(&&'&#$$$&(++(%##" ,)'%).165114:???@?@BCBA?=?@@@?<>DLMMKF?:;?CCBFHD@9:===<<>>?@CFEEFCCABA:8:;AECABEB???@DIKIHGIIHGDCD?:769=>=;97569>?>>@?;88:?A?;9=DQQHJNKJORSSTTWWQGDCA@BB=@HNPT`0TMHHECCEFHI'+*)MJ'(((OQSQQOHNMJIE=:BHJN)))(')*+-+)))'%%*,/1/,QJHEEGKIIOR-121/,RKE?>;9;<<<99;<=<<;98::7446763267434556632589;=@@BEDA=AGJKIGFGEA@BDFGEFLPJIQPJC?=?B@>?@???=;:<=>@=50+'!!5QYTKHHLQQKEAJ-.*OJDB@?BFD@@C>9;:35;AA=<;=>=<9/'#(,3AHLQTRQPOIGKMQSLC>=7216!+/04.(&%%(-331.,+*('&#"$!83&&$$%%%!#&'%$&)('(('((*--(&.31,)'''%"!%*+(&KIEB=;<87;BCAB@??B>?ADDA=:>=;76864100+$-'"!!!# 11-),1/++)))()$%+/1320,-,+-))-13/.3640)'**)%),)*(*,*,,*++(# #"#%')..0*&+)*22+(***'%#&*-)%"!"$**%BA=3*.5:2*()O=C(ECFCE&&%(((*-%C'%%12-((3:!*)'('FCCCH('K($ABFHFDA=:>BBB<:A$''&'KE4#(9#'%#$&*,3/+*''%!!$&$"$'('-70++,,-*)(&%###"%.244..10,)*/45--25110,,,-./.-,-..01144320/-..*'')'E)/3793-+)+,(%!1(#">V26>C2JDBCGFFTG=CR/Q8=57>;9@<68=GC;843;>76?C<41/0.3B=1+2-7ERI@90*(,.K>'36200.**35;1-4<:;8768%.C0..0/4;/.667876534636:9519832313540.+(((,.(&24.0./2,+0111-+*+(%'*1($%-452.()+&)/-.5ALC:688-$(353%*6<3-,,'##!#&)-)29962/*)(&(,,,+--,,-140,-43/49 "$)'2+37>90.17 "4(572,38?#>5+2:2(,0040''#!)28083,3=" :0,++--,/3,/498-04&+375.$!(&!" "'!"(('*6<;61')/6C?64/+,)-//-(.636630/330-36/..'"(.)-1*,,0:8!758!%#$++($"285")!""#!!%!4,-0!"!!U.0/-++,,-+***++,.-,+**530-*(&#$%$"%*)(*,**+**)**)**)*)*+*)('&%&%%'())(߀րЀ ~~~⁌ր݀ ɽ􇎌΀ɾȽȀʴɰĽ¿ſĿ€ľ׵ʹòŸºüϼżϸ񀑜ՖÝ셏ӳѷ΀ļûƾ󇍎ԀƸƻ僚ڀƾ˴҂ȸͷֶڠو󌚛üݹ쌟ǸɻŠ׷ȣƺŻѽ̭̹ٜ̺ó܂غǽ¯ך߯¼ƽ胏䂆ƷȱƱȺܻͱʲƴ¤ꎦ°;ކĹ邋baXXY\]]^`a_\\ZXVW\ZVTTUWYZWQQWVUSSTSTWVVX[_`_`dd__``cfjkjigecaejgc`^]\\aejqupgb]\\ZYYXWVVVWYZZXVUTU7TSTUSPOPQQPOOMKLOQQNMLKJGEDDFDDHLOOMMNOPRSRSWY\^^_]YYXTQPRSTUZ]YUPJGHIJHGILLIGEDEGKNOONMMLMMLMNNNPTUVSRRRQPQQQRTURNKKKLOSUTSTW]^Y[bdd^WTUXZYTRQRTYYVVXYVRRQRW^ee^ZXYWURQPMMNLIHIJKMNNNOMqKKLKIHGGIIILLLMPQQMJJKLJIIIHGFGHHJJHIJKMONMJJLMMMOSTSUX[]\ZXXY\]^^]^^_a`^][WSQPOOONOPSUVXZZXVWZ[YZXY\``_]]_aa_]_^] \\^`_]\]_`bccbcddcbb`_]\^dhfdb`___^]\[[[\]\[\]]]^__`e7975e`\]d4666531_^^_a`b4785c``bfihffca_\\Z\beemi`Z\_bb_]\]]\af577742ab111232`_^]]\[\\^`_ZVSQUWWUSRSSQOPSSRQQTXWTQORTZZWXUTUW[\WVVWZYVVTQLP^5763a`^]Z[ZTSQONLKLMNRVSPONLLKLMMNOPUTSUTV[ZZVQORX[\ZYYWUWXTU^ba^Y\35d`_[bfb_^\[_aa_`1`[ZYXX[\\XVTTSQONOOOQSTVVSSRQQRPQXXZZYXUVY]_^]\ZXY[\[]__\VVXZYYYWVXYXXXZ\]]^_``__]_]UNTa532430YV]3`XXVVVSMJKLMLMOQSVXURQSUVW^\YZ[Z]_a2e\SPRPJJLMPQRQRUWXXVSTRRPPVVPHNUVY[Z\\]^_ceeefhffh4fcbc233465578533432235:=;989;:70USRMLICEFDFEDDEHKJIKPTSJCDA?h573HYODFGHIJNSSSQMIDCEIF9Z5<<:=>>?ADFIKKLNMMNNMOPPMJIJLKLMJGIKONHKNHGLMMKMMLNSTTQOQWVTRRQPOPOQUX[\XW\`aca^\\Z\YYYXY\](^^\^_]]]\^_aehikjiifhjkkjj679:9864h4699878no7ljjjhggghgddebb`]\UW_`]UW\^_4456e_^YTRONLNW_`ZSSWXY[^bfe`fhYSTRQSTTVWRPQRRSTSRRQPQSUVVVWXWTTURKPTTUVWZ[[]]`eedbe44ge5412663Z^VS\XXIA<5AKNUYWM@@JLIEHJFIKHHIHFEEIGFEDCBFMRRPQRQLHJLLNQRSVVPSXLEJMKLJGIKKIFKNPPUSJKOQTQ@DTOLHIPMDDGFCJMJNPKHIOSVX_WQPPNNTYYKAPYWZ]]\YYZXUUTQWX^fa]\\USUUXYZ[\`ba[ZUMOORUUW[ZWVTV[^\XWXZ[ZZ\]dk6kgc`^[^cec`__`ad5897lkjjjhfggedccd5=AA;755785XRZ`T54US8GYe8<;;>@A?=>=;;::<RZ[]ZPW`YZcca`TPJBF@ORYikgd^WTQSUWZZWUUQPPVZZXWSTXl?EJHFPFh\h>AXNWYNXfhhe`]dgbTQbjgh^VUPDOg[_Z\rh]ltvgZ[XTTSY[[e^NNPNJLdu^TKL[kib_QC8=D@?MOV^cdVEDNS[cbWRPX]aaSJVdimlf`adb\W]b^`aVRPMJ[naLbEWhQcfWf?JQQUQPMDB?fQZKUH=EEACINOSVPKOS02579;=>?@@BHIF@;84ecd8?BEC>cZ2559;:;;:BC@>@EDBA@@<:9779:754i5789:86444;@<;989778;:99khi54gdaeea^\\^_cd23332aa225<=;::phbZRTTSTVUTTV[\VY``]\ZYXXVUXY[ZWWXYWVWWWVUQQUVYR(('()()+,+**)'&'*($"#$&&&%"$''&%%&%%(('&')***-.,+,-./1233110-,./..--,,-025762/.-,+( )*+,-,*))('5('&$$%%%$%%##%&&%$##$"! !! "$''&&&'()*+,-.01132.,+)()+,,,/0.+($!!#%##$&%##"!!"$%%$ ##%&&%$$$%&'J&%%%&')+-*&$##$%'((''(*,)+/0-*('')++(&&&',,))*,+))('*/32,)()))'''%&&%#"$$$%'''&&%#"!"#"#%&()%##$%$#"""##%&$$%%%&'%##%&'&'))(()+>-/00//013200.,)'&%%%$%%&''()**)*--+,+-//..--,,-++--,+--+,//.-,-./0/0/..-++,/101/..--,M-+*++*++*+,,--.1.++-+**+,,-.,,-/0/../000/-.113860,,./.,+++)*,0 ,,*)(I)((())'%%$&'('&&'('&&''&&&(**)'%&&)))*)''(,,(&%&((&&&$ "(+,++*++(&%%$# $'*)&%$#$#6$$$''')((**)'%$%'))''('&()'',.,*'*0,*'+.---+*,-,+,-*,,,*((('&%%%$$%6&'((&%%%&'&'++--,+)*-010.,+*+--./00/,++,,,+**,..,,-/00100010*%(0%%*.**))*($#\!"$&')*)'&()**-,*+,,-.-0+'%''$%'(*++**+,,-+*,,,++..+&*//121244213443354342/.0! #%# "! 5"(% "##$$&(()('$""$'$ ! !"##$$&('&'(())*(%$&'&''&%&')($'($%((''(('')**)(*,,+*+*)+-01./36775210/0- ./000121/010 124578876645677664_;<;:99744677322/,)&&#!&'&"#'(',+,*))(((*/451,*,-,+**,.-01+(**)***+,*(())*+,++*)*+,--...-b+)+-+,--.//0/14432341%'%#)'(!!%$%&%! #""#$!$&##$$" $"!" #'+,+++*'%&&&'('&''#$(# "%-&'(&$')+),+%$'(,* ,(&#$)'"!$$!%'%')&$%)**+0)&a(++$(.,-...,+,,+*)&+-/40,+*(()(**,-.2430/+$'''))*,,+**+./.,++--,-..156320/-/131///0125655543#2111$!%*%(&#-36532343311/+*/1.!#*/;L7$$<@4,.$)03=BAEG>.-+++)(%&*+*'(-0-*(+.024;>==;63346?A@??>==>?CGIHFB<::>CABA?>8788:::98;=?CGIHEEEFEBB==BFFC?>::;;>CFKLKGBAEGDBA=999:<=>@ACA<<:88:=::=>=?<7?===>?>>?EHFGHECA><<===;;?EFKMJGGEB@>=?@@EGCGHC>=:60('''1I.10-,('*-+MK(,,RLJIHFDFIHC=<=;?C><>CFD>;=>@<:5) #(/5?A@@>=>@BCEDCDFDDGDBCA=>>>;85:33469974/+**)'')#!%!/.+*))*.0.1/)&(/.01-+,--*-044--24.*&())(),-+*()&%'(+/+%$%%$%%').570&&,-24-&'**)('(++'%$(*'D;97/077+/5+(12K<@AEGJ&&%D?'+!(.&)330.35675//23;C87E(($&j%FDGJGDC><@BBB@A$''%%%?/8: %''&%&-011/,('&$$&&%$'(&).60-10+,,)'&('$#"%-1331/32,*+.43,,/1/-.-,,-+,,*+*,,+-,/120//110-+'')(&(--+.-)(&(-'!2# :P4=CL;G@@RPINQE9D)*J:4>GI@723DG>7>>@@942:AAE>6AI@C@3%*7HH;-(8I:-9E<:FK>750')+84582-100+7IG;;8997>?1)4;788:858%)*>2/&/CF518988=;008605=85;7652153*+1*'))+2,%/7/,-03,)-.../.0--,(&,,'&%+5/,''10+)%*7=CMB%$3H/)/000',4115530'&##()-66553/-*+./21.,,)((-10-.,,-6 ###+#1-5 52001 %"*-%,2343/-362**58671,-( (7/1--;D3,6991+--++,02271&')(%%3>3-((/7500*"$"#,,-.12(!#(+155.,+/134-&.8;;9502540-14024.-,*'1;4(#/;,26-3%((+)('""!2$)%*!;#"%%"! .-/ *$V10//-,/0.+))*+,,((841,'))'&&&$$&*)&(,,**)())*('())'%$$&'(Ѐۀ~Ѐ€򀊁⁏ր ľʿüĿ"˾Ǿ܀܀샐ހľ˪畽ɽÿ¾˷ÿɀ˿ָļöǰƲļöɺ􁌔ɤ򂌔ĝق삉¹܀źʀƽ|þĿ탋µĹ옫½偞ĿúȰԕᅈ󁋍◛Ź۽慌ηο°ڽȴπdzڻ½ӻŹüɟŪἷ팅ɯüʬתݸҪûةµŷֱ÷µëƽźžǦѷʵĴľǨ𜪩õŽ½˴LڀY\ZYX[^_`a`\Z[]^ZXVW\[XY[[ZWWY\[XXXZ`b]VQQQTW[XVVX[\^_bccf4434jeghggid__aabcffcba\YXWVTTW[^_][\\[[[YXWVWXWUTTSRQQQPOPOMJIHFGFEC@@DEDDHMMMNOOPQPQTWXZ[]^\XTSTUVUSRRVYXVSPMJJKJIIIHILMMLMMMLKKKLMPOOPQeRRSTSRRRUWRNLJIIKPTWXYY[\^afffb]USTTQMNQV[\WUURQSRRSSV^gbWUSWYXTRQOOPOKIHHHIKJJIJKJIIHIIKMMNPQRRPQSOLKJ*IJKJJKKIGHKLMOOMMQTTSSSQPQTVTU[]aca__^\Z\]_]`_[Z[[]^\YVUVXYZYYYXXYY\\^__]\ZYZ[[ZY\_`abba`bc`\[\]]\ZY\\ZZ\^]]__`aa_`cca\RPYdfa^][\^\ZXXZZ\]`i889k^ZZZ[]^bee3c`_]]_aaa``a_][]```a`^[YZ[]^[Z]]\\Z\^][[]^\[ai899764b`234663_]^__\Z[XVSPPTUUWVUSUWWTQNQTSSTSSUWXXYYWXTQQTX\aca^V^_b2_^[XUS/552/[[ZVTRVW[a`[UOMLOSWVUVROMJJLMLMNORRQTTTVVYZUSW\\ZYZ[\]]YTW^__a_]14ebcf32Kb`_^0``_]_a^[Z\_]YXWW[[VSTROKIJOSSRUTROQTUWY_a^`a_\YYZ\[ZYYY-.[[\ZVWXWWZ\]YVUVZ[[[\\]^^]]^_`^_``bbd2^_]]WVWWY[ZXUSQPPPQSVXWTRPQUWX^`_cc`^\]___[VTQNPMNPVUOQVXYY[ZXYZVXYYWTX^^a_\^__]\`dhfhk54233453254235552121123478:99:9::3WMLKJIIGFJGGEIKIGGKLRQDACEDB{oi>OWNJJJNSUXVRNHB><==<54<<9=><:?EFHKKLNNOONOOLLMHDLOLJKMJFKOPMMSLLNKMLQQKKMNMPTSSRQPQQRQPOPTZ`ffcb^\ZZZ[[ZXVVXYXZZ[]]]\[[_^\]^_aaadfhgggfgjjhi56898765gh6676679;===;mijgfijifb`abeh53eda]UMTbdYXZ[YZ^`bei8j^WPKIILRZ`]XUVX`ih7rjXPONPTVVQNOSWVXXVVWWUSRRONORX\\YWVTVYWWYWUVWXZ[\]Y_```befg554121252ZMGKOMC?@8:FLU`c`]L>?CDCDFGKIHLMLGHKMLrNLIKNRXYVPPSSPLIDFFMOPVVP[`[QJOTSQMOPOJHLNLGONLNSVVSEIPNLJPXVI@?ACJQTZWQJIKOWYa\XSSQMOV]THKPVWWUWVRSW[YOLWWV^fjle\[Y\WY]`^VSLALNORRUYWVUSUZ\\YXY\\\]][]adf465hda^^_^^_^`d6=?<8nkjnjgjlmlidcf9@DA<5^15952c^RA8=CAL[e67gc59>@@?<;;998mijihgdca```ba\UV][<HMKPVTLINRUZ][USONLHHMVXTTVOONKLNMMMP[_ZVSRU[`emjhje^Z[`cjsqtGHDDAD~CBDFCo][[X[`egb^^ky{xsnkilppqpomloruyxsrsrsvtqv{{EDzwxrkhmpqosyullv~|~|}|stuuronor{EEz|zy|ihqrib`bhovtoqkkrwvrproigioqmpx{|zz|plkdbbejfccehmluyyKLGF~KJF|}GMMJIFGLMLHIIJNLJGvojgaabaabdddhhggegjigbcggegd`bcda_bda[Y`fe`]^``\_a`^^chfcefijhffnojhigeca`a^YZ^_aju}yuv{|zxsoosy~skklmh_WUSWgzNXZ[ZZ\SLJLEGI~yxyqfcgxy{}z}LKHPV[`]UMHjZYZUObHW\\`b\VROOMJJJIJHFEGOOKHGJPVUMHJLNMRWUUUX]ZSPOOMJKLLJFENXbca^YSNH~}}sfiq{~{zxx{zvruvvogcaadhd`a`_^^YXXSCbc5A???;::8@FJJJHIZ>OOLIHMV^\\\USW^[YXROKNVVUWWVX]aWLQ\YQNLNMFGLSSOLGBCGIMTWPKIGDGJOQSVUWPLNUW[WOMTTTUTSSTPJLNG=6?MLvlkmZOXVJV\TVrlutu||AB?=?C?=OTJONQRW__VURVWJFalHIsDEABFFGy{}yz|@GIKMNXfggFKNJIHGR]adcZSNNQQPSQLNNLONO]`[]VTXUOQOJFGIKMNOYbf^\^YTTYa[RTYYURWXWXXTTSPRRWYSRPNOTU^b^^[[ZWXRLKHEDCEHMWQFPPNF@CA:ZPF=VvNSTidxFKKz|xpzwqs|}kblmpb`prtnidNJc{zxq_aid|zg]bdihhx}vrxqkgeXKWv`M[`mvnabtu^phfpzlbopQAP^`a]^`]ekhcnrsfSGCO`ja]XZcavtolkfaovY[afjmri\cneoOMmWGNrycYhspvuhd]aigjvzed_bgjbbfOKRPVldPigPWXTNOWYVUOUa[V^XK_X?<\fa_VOOGDFNY\Z\WSau}kZ\hPC[dc[UK[[VVVa[_arx[IDMODVedccZWVU[[TY`aeZXVRUUTTPMUoEIGB>?B?j^afegiidgtufJ?PYYa[SX]_UTRS_gv{s_^`RS]^dYX_diZXfkb^\`^ZMEBtBQaVCCIKZhTKIGQYfjx{j[TVPJEDP]babVHOSVaifaON[e^[_hlgdlqj`XX_YXX]`a]YTPJMc_ONLQtRamfiKPNWRPMIGG=_kMUOEFHIMNOMKKNLCMP0779<>===7=SNF@=953fei9;:89898548957763249:8:;<84249;<;9:;<=;997jii565ig4geca`aabd35431aZ\03:=<<;kcc]SQQSRRSRRSVYYY\^`]\[ZXVVTUWYYXWXVUVVXYVVWWSSI'(&&&'(()**))*,*'&#$('&&'''&'(*)'(((,/.)%$$%%&'&'(*++,-.-/1--12233/-.0$10/.,+*)'&')+.0.,-..,+*)(())('&&&$$%&%$###! $&%&'(()+.../0/,)()+-+*(()*++)'%#"#""##""$#$$#$$$&&'&$$$%%&&&%%('&'()+)&$#;%'(()*+-,-0/-,+'&((&$$&),-+)'%#%%'(((.30*(')***)'&%&&$$#""#$%%$#"#%%&(()('''%$##$%$%&&%$%'&%'*,-+)('&()(&'*.120/r-///../0.++,,-.-,*('((*))*,,+*+,-/.--++**+**,--.//..00.,+++,,,--,+++,,-/...---...,&%+22.-,+--**))+,-+**)*+12+**+,,-+X,.--,-/.,++--..-,,,-...--/.,+++,+*+,,**-0++*)))('%&%%#""%&&'&&%')*)'&&(''(()*+)((&$%(+-/0/,++,*)('$#)*+)&%()*.-+(%$$%&(&&('%$##$#"#$%''&('&'())%$'++(())+,,*'(*++,*).,,,.,,,+++*,/-**+-,*)**,+(G'('%#!#&('&'%$#&((*+01000.+*+,.-++**,-.,**+++,--+***+++,.../000///0121p222*+,'')*+,,*)(&%$$%()**('&&)*+/0.00..-,,-.,('&&('(),+'(+,--..,..-///.-/2454233321357436 "f"% "#" :1.$)&%%$&(*++)'#  !! $"#$$%&'(''((''(%#')'&&(&#(*)''+''('(')*&&()'(+*)*++*+16899732Y320.-+,,,-./1110..0//23344346654445665435 967669963212345.+(&# !)+&%&t'()+.0+)'%%&),032,*)(*-*01*'(('*+,)((),,--++,-,+*+('(*-00..-+,.--.-+,--../0.01132334'#"&(&! %'(+.,+#"#"%$$''&"#%%%&&#%')--,)())(&#!"!$# ##"')($ $(''$&))&$&'&#&%%'*++,&))&&&(-,% !"%)*-,(%&')/-0.+('&##'*% #&*+)')+()*.,&%+,*-2441--i,,,*,*+/21,*& %'''()**)***-..-+,---./-.012331..--.--./53365446565201 $'&"" %-33064533322000111/++.*#/8$5*&DA*))#8'8>$&#;=>?D$$()%"!=!#$.2/-,--+'&%# @$*+++*+02/.251,+22.-/0/*&&$@!()(-10*(-035761/,..*U),23001,-,**,,+*,2420-.0468<:89731247=B@?HLKIH&&%$E#$EB??@ "!2%&&%)/47522:DEB?=;9;<=1<<>?@BA=?@>??=<>ED@>B$$EAAB@;58:;;>CA>>CHKNKGDGHDFKKB<;=>>>??@DJ''ICB@@FE75:<95458;><:<::?B@?>@@<;=@B>@DFGEFJOQMMTWWXVSSOHDEEHNSLMVRDAA;9:=>:78:<>;=>>CEGL)*)O(POLJLPNJGFGHIKNJFQ+T*'HDD(,*('&(+,,)ONJHINT**-.+*)OLHJD>;9557667988::;::<>=;;:;::<979:;97897436:976665467;>::<=>>==?BB?>?>;868;:67778=CHFFGHIFEB>>CHJH@::;;82+)')2>)/13355.*()NH'()OHFHMMIA@A;516DEHFCDM)'HFEDEGEDGL(+.251,)&GGGIJJKNQG8-,)$!*$.22573.,**)'&&&'&$""'(&%&(,/.(%(*+(*---,.10+**+)'()*)'J$*176442.+'HGFB@@@FH?68<@GGDCDGMNFBA@@CCA?@@@=8532365332211-++)'()-.*'&)07421-+.4300-+''--,.///260(+31*(((&#$(+*('#!"&)+-/*&&%#%'+,-.,/-*+./0.''+,+*+*+-*%%$((G@<:>2*11*28J03>>B@AEHI%%" -2+-*+,.21,-,11'%39$%<##!#%%EDH%IEA?@A@@@!%&''(G/845#$%%&&%*0355/)&&'&&)($&'&(((03/1.,.-)*)'$$%&()(/450/2/++-2-()-/+)-/...++*())-/++*)*--2412121/0,)(&#  !#*(E%--,%!-CG,/0@>O>E'IFL**F@A@:?C?;978-(4BA@=14;9HE8038=:8CJHDBD>:86-$+A4(149@<33@HD5=L:8?ONA:5>?+#.97646748;96=BE8,&")2820-/64><::;84BDGIIJMOTVTUUTSRRSRTW[^`\XVRNLKHHKOQRRPLJKJKNONNOONKJJLMNONLNMJKORPMMMNNNPRQPPPNMMNNLKJJKLNQVZ\[[_ghefffa\UPNNNPRSUVUROPOKLNORVZaidXRUXYXVNMMLMMIFEGJJKKJIIJJJI;KOQRSSUSRQPQQQONKIHIJKKLMMMLKIHIJJLNORTW[ZWSQQSSQNQW^aa^^__a^^``ccbcefffeeb``aceb^]\\]^`]\\][\\[ZZ[[\^abejkjhffda_^\[[ZZYZZXWVWYZ\]^_^^]ZYXTUZcid`^[YXXYYYZ]]]\[ZXWXZ\\\Y[]^[ZZ[\^`c3gedcb___`dhe^[[[\][[ZZ]``_\\``]\\^^]]\_ef5:;85d`_a122dba^[YY\^\YXXVVXYZZYXYXVVUSQOOPONPSUVUWWVTTVVXY]a][beb`1232220//]XVVSQTVVXVUWVURRTTSRPONLKIMNLJKKLKKMNMRRLJNUYTOT5WXWX\^\Z\\[Z\_^^\Z`2323455321101124421``10__^[[ZZ[\[VR8POPQRQOOPOPQONOSYXTX_a`\YWVY\]\[[ZWUWVWXXUSOPSTSUVTSUXYYZYY[\^`a_]^_\]bbbddd\VUQNRVZZXUSTQPQSSPOOORUV[`ccb`\YXY\_\VSRW[RC7S_XVZ_\XUSTXXPPTY]ZZ^^_bba\]][[^a_cgee4542_Z/221344567665323332346677669:4XPNNNMMKGFJFNMIIGKPRMB?ACBAEEEFLNNPNLNSZ\ZURJ?9446hfl:<;;;::?GDFJKJKLOQPONMJKMMSSLHFKMGHPNMNPPSTNONOPNNPQMIMPPOPPRRSSQRSU]gic_\XXXWVWZYYXVWZZY[\\^]][Z\]\_aaa`_adfeecbceh44468987654ihj4456:>?<:8liecfigddeecbeggfgc^be`W^a^XWVPNUZ\`h4jf\UNHHKOV]]YY[]bb58hZRSROOPRRRSRTWWXXXYYZWTTSQQSX]^ZWY[ZYWWVY]\Y[_][[[\ZWU]hke\Z_`5gMDDECBCCAACFHMNTWTOGBEECDEIJJMQTRQMKIJLNQUY\\]]\YXYZYOGGHJMMGNVYWWd^TWYXUQOOOMKLMNOOQVY[\ZRJHCDEHLONFA@@CFJLOMJHJIMWWbd^WWSIMVXYZRSY\UPTURSU\a_WXZTVbhhb`ffgc\`[UUYf_VRQQPRRUVYVUUSTVWYYY\^[]abb`a`_addfkkda__aa_^]a4:?=9mklkkkml$jhebcf6>DGD966456fWL<]R5GU`68gYR_59;<;97mhfhhge`[_`bb]\fi\S[ehdl?SkD@vKKW_]fxwxwxofgo?DABIGEFCDFCIW^VMOXYRQTJEEBEMQUURT\\VXbea^baWQY`_YSSTWVYXST[^YTRSUXWUOOOPQKFFPVSRY[\ZTNOQUUPRZYQPPSVW[fmhgda^^`cflllz~{|yuxvx{~}|{{AFF>stpiejppov{}|tqrqpqsuspnnprvyzywsstuvwvyDE}{zyyurropttsqty}tps{HIEyfjlnv}~uw|{zxqmqspf^Z\bjprw|{z|xtrnmnosz}umou{{y{|rruz|njfYU[_acfkptroklt}FKPUSNK}yy|{xw~z&pztFAAzttqnrvnhfddbgllmljhecfgeefb`dfe`^_bdc^[ab^]^^\XQPV]^\\[YZ\^[WY[]]]^[Y_a`]ZZYXXVUUVY[^`foonklnlswuuxuoh\YXXZbe\ewOQQTVURMGFEHJK}xkcgx{ysqu}DDFHORSVVWX\_ZSMKIEzj^VOHZHX`b_^\VQQRSSPOLFDCEMVZUOMLLPPMLJKMOPXXVY]^`ZQNMKJKKGDEIMORVWUOG}|}~{wx|ug`lJJ~ywsvxqnnkje_ada`a^]\]]^_aebYROQOHFA727@HTbcSLLO\:IMJGP]c_[YWWX[][WTTRPUYZZY[ZZ^\OMY]VSTNNKGIQTONLFABCHLPQLLLJGHJNOONW_WLHKSVRRY\][WWWVTPMOPOHFIF}nglqgNE[WJIJNCm|{y~C{@F=]Qc?EGKORQTZ\aehvl_gK~IHB{}BBDHF~rrxx?DIKNPMtD@eCJOMJMMMTRJKLILOQOOLNOMQPNQPNNUY]YUXVONKFFGKMKNT\cja]b[RPVaXNMUZWPLQVY\YVSPRRUVPMMMPTW[^^\YXTSWRNLF@:7525;>CMQCrr<6.QF@EZxOYSZ\zljt|v{~~ueatqd`mmqz|i^ptoluvtodaTUc``iqtxg`fiju}n`^_NFQYv}kdgl`Zttajz{stwuwvZGP`ggXR`sf^]cmifws_S]dfc\YY_kriihfcrfZd^cH{eeIk]tIJmULN\ebH{qic`Z^fe]fD~\Z[VdcWULJLHXjb\]`W]ZTSYZUWUW[\[ZWJA[cM@MbrrjeWCDIMNPQTX\eoknzyqvu[NL]\YHSbXX[d]XQ]o{jaP@EPb`^XOQRUZWU_immh^XYSDKTUXX38>CB>=;xtg__dddfg`hvlUX[VZZRTZaXNS_c[jxwnqmZ_ojUKWjk``d^TT`eaXM>bk@JM=wCRMFJCLHDNC9B@f@;Y:IE:7AIMTZUTSJBJPVU0:<;;=??<7CWNC=:7544a`6:87:8RP199:;;998789<>=:y:;<=<<:78845764358=?=;;:755799::;:<>?>955655687663cee32cba1122`WMS_343479ldcbYXYVTUTQRSUTUWY]__``]ZVUUUVWWXXXWXYYZZXWWXZX%%$#%'(())*)(()('''(*)'()&%'F)+/0-,*'')*)'')(*++**+))+00)%'-/..+)+01.,---,--./.,*(),-,+,,--,++**,,)'H))'&&%$$$"! !! "!!"#&())(''&&'((*+-/.++,-//,'$$#"$'(('&%$$#$&'&&&%$#$&%$%&$$&(&$#$%#&%%$%&&%$##$$$%')*)*-330///-*(&&%%'('&%%##$$'+-274,'),,**'''%%%#""#%6$#$$$##""#$&())()(('&'&&%%%$$%%%&&%%&&&%$##$%%'(*,//-*)(&'*/10/0132/./010..//...//-,,,--+++,++,.--,+*))*,-./2211/-,,,+.,-,+*+++,--,++*))(()+/1.-,+*((**++--+*)))(()))*+++***+,-/...-+,+,.10,+,,-,,,-,++,//,**,,+,+-/.+)*++++)'&&()(&%&&&'$()*())('&&'&%&'((())('''&)*,.,*-/-,H'%$%%$%&'(((***(')(('&$#""!#$#"##$%$%$"''#!#')&#%()''*++*++*)*,++*)+-/,,,*+*+,.-)'&&'()'%%$$$%%$$%*+(+00.+)))+-.,))(''(()*+*(&&((()**)*--,-../-,./0110/01//122321+'&$#&(*+*(&&&''&&&''&%%%'()-/1//-,+*+,.,)('+.(0'-)),0.+***-.))+.1//122443012001223642,*/#!"!!"!"&'()'$%)---*($647!"&"#%'&&'(,,(%$'($%*('&'(,-))())*(%()*++,-4::531. -./...,,,-./0..///2433212344322356W345 86535653223323321/,'(,*%(-,(&& "''(,--))'%%(*-10,*))*)1,(+*((()*,--,,-./-++,**+-02/---,.000--++/0-.21//./.,*0552+)+*.$!"$#"## !#%&)'')('#!#"!"!#$$&(*)(&%$$%&)+-..//.,*+**&!! !"" #$"",+&(*)('&'+--/.($#!""#%&&" "$&&('%&''(,,23/**("$),--)(+,)&)+))+.00++,)*232/.3341+,*('*72+((''(()**)(('(*+,+,.0..11122101112441.--.-,,,/44544454332000 !*%".($)/2+(064433245430.01230/34+%(..-9#+>&$=$(1649A@BBD?98<#$##'%$%$%&#'/41+,22,,.&#$#&*+..,.32..454475.-3640,,,.-/.,.231/./2442-//01-)'-0-,2343/+,-0/+-32-,,.113:=998633479=<;ELIECFEAB?=@?@ABC@>>?? !2:<858===AEFF@?@>==>?><<>>>@A??@>>???@??ABD#$IFCA@??=;;::=??@BDGJIGFE@<;::9961/148>>?>>BGID>?BB@?@DIKOTUQQRTVMD=?BEKJJIJOH>;91.25679<@B@=88:AIJIEDK(PMLKI#$MNOOLKHDAA@@AC?=<==<:969=>===<:9;<::;769;:7689::54::754443-+/5534435675346888976;7644311232356BGCAA>:60/-,-24/5>CI(*,021-(&'%G(**LEDGIKNONIFC<525>@=879;ACE$$%',...,++/1/,**)'JGGKNQRND8/("&#/45443/,,---+*($"""'.1-)'''**('&)++*/0..1341*((()((%$%'(),/10,'FB@ACFFDB?@D?6/4B''IINSRMJHECB?AC?<=:963565442101112342-)''$$% +)+($*36420...143/-,+),..//00022)(03-+,'''$&,-)((# !"&),,(&''&&')++*061(&)./**./1/,,..,*''&$ !$$B=:=@8)$32))*H-&AB"!?!$$B?9:==@ #&')*)="3#&&&%((',,'()'())'&#&'%)(&))'(+-0/,/+,()'#$%'(&),1571.1-('+2,&&+.,)(+-/1/-+)*)+,(*-.1110//,,0+(&!!E*,!52!0CE-4/57PBFGBCKLMHA97?BDFC=64=;55=;:FME?C@3,:>88???<33,-8649>?PUE949;:@C:105*%-2EKD95:>5/AC4;FF@A@?CE2$+59:2/8A9426=<8A=1*2895.,,29?87875>H9/744D'B42L)80?F))9,'*370A&?;754139504#A--.+45-.(')$-<6.02-43.-00,-,..01//& 48'*8AA=6-!#&''().139@IP9/3>:+&+76//3/))152-'/3 )+=$,(&'!'%$)-$,940412.)/./.--.))/0/.44./439<;623883/*+,*+../010,+/61*(-1,:&'A&(-# +#" 2!(#!"+&($#"! #,*-..,*)*(#"'4/0/))*(''&%''(%$&')**++*)('''('('()('(&Ā􀋁€ր〇  Ȁ ŽŸüһ򀈊ǸʀµǿƿĽþļýۀŸ׀ӿ̽ŽϺԬȻ炉ցِҺ¾ʽ»ـ򀃂º܀ýǺŹŀŽɶݻ拙ڬҊŹ̹퀎º킓׽ƶŸݽպIJĻ̲ùтո敃ҫ΀¹̼ҿ¾ëǰþљǭε˭Ȳȵ훡傠̿ź¾ʀƿʃЂ⊜Ϸ늙Ʃ񊘛d򈍌wXWWVUVX[]\]_^^_`__ae52`^YWWZ]][ZYXWXXZ^acgfabfd_[ZZ]_][Z\][[_dkicfiggea\[^_befda_]\\^a_[YXWVVWXYZYXWWVXYXVSRSSSQPQOOOLJI+HFEEGGILMQQPTYY\^\YWTTSRTVY__\ZXVVSQOMLJKMOQvPNPQSSSQONMLKIJLMOPPOPNMMMLJHHIKMNQSRRSQOOPPPONNOOQSVX[[Z[]fmiklf_YVTPOQSTRQPRRQQRQOLLPY`hnj\SSUVTSURNKIHGFILMLJIIIJLKJVLMOSYXUUTSPOONMNNMKJJKKMMNNONMLLMMMLMPPOQW[[XWXVWYXVWZ[[ZZ]`cegiggeddeeeddc1acdeeeaacdetabdeedcba``_`bccdfhhhihfffca`_][Z[\]]\[ZYXY[^^`ab_\WSUWZ\^[Z]_]\[ZYWUVVVXZZXVUVWVXZ\\\[[]_bf4i56faa`_^^\\_c`^_abbaa`_^^_ab^_^`_\\]\\\_hnhdb`aabcb`aa`_\[[]_\YWWZ]a`\ZXYY^^WUTSQNLMPQRRQPONPTVURQUWW[_^^1110/[Z]YWXVVVUUUTVXTQNMLMOPRSSNMNMMPUTRMKJIGDFHIOSVUUV[[VTRUZZ[\ZZ\^`_]]\Z[\_13665565321243366532011a``___ZWYZZXWXXSTWWV]`[VSSTROORTUTXVU\^[XXXWUVWXWWURQSTOLKHMTYZWTSPPTVVXZZYYWUX[]a{`]__]^_^]^_`b_]VMS[\[WX[[YZYXQMMOQSTRUZ^_\VVYZ\ZWVVWWSMNU\ZTFM]^YTTWWROORSNNT[_\[[[^ehb[\^]ZY[^adb36531_\/12235542135632344345556774]QMMLNLC@CBINOMIHPPKCBCC>>BEDDFGIMLKMRWY[XSNC:e_iq8im::8789>EBDIJLNOSSRPMKJJMNNKHCFKMJIKLOSTSU[RNOQPMOPOMJLPRRQNNPQRQQSRW[\WTTVVVUSSTTWWWYY[\[Z\^_`\Y[^^_``a`__cdcfhedfh44456876444dbcf5547<<;:8kgeeedddcdfgfdefikfe7k[SXXUTWTLQWYYWZb5gZPIFIMPW[\]\[]`e*6fZUVSMKMMPSUVRQWXXVVY[ZXWWVUVWVZ^\]\XU[\YW[bb[[[]a^][THLaVXYY_XUYM@<<;Nn@V`ELSajgml]T_nrlggEMMOQROMLIJHIOQRTTZa]Zb_UROLR]_\VPX_abccaadaZZ`ikgbd_]\YXTRUVTRQSTTUTNLMPQPMKLT\did][XTRPSRNPSQOSRPPQS[hjhedhfaadjpmkr~{y~ACvquvzwwshgjklilzukg`aeioy}zuqpmklkjls}|xtuwy{~}zuty}}{||}xusvwsuwuqrstvux{{}~|us|IJEJJs_klc`dgnzBA=onuvxxnfce`]flt{|yrlkmopnmnnlmlpx{~}y|xwyuv{txsnLqphd_^bfiryyyxrt{CGLPRQNMKIHJMMy|~HEGECCEGFEHG~=749>~|zxyzxqonknnpwwutsppqqlgdeea]\]ab`\Z[\\^bfhdb]^ccb`bd`ZWVTTWUSSSNIKSSSUUUTRNKLNVYWTNNQYcjonhcabcflxvlb\Zalt|KNMNQQNGJ}NOOPNKLwyEPVXTSyTTUPLHIHHE~||yvx|ymcYQNdOfkfa\WSRSUVTRRROMPSUXUQOQSSTRLEELOSX[\Y]`_ZRKLLLMJ@:ANY\WRNIHyyNOL{wrsrupgba``^WWZZ]agmg_]][[]^]ZVQLL<.45=FHKVQ>9BJ`vIRNRYYSY_[[X[a]VXYZZ[aa]\^_`a_QFS_^VSIKTQNR\XQMG@=8g@INPOLIHFFHKQST`^PILW]TSZ]^]ZZ[ZWSPOQRNLMG|qiafg^RYeVGGLOQF~{zqpCH9VBINeAQ^`XU^isxzj^apJLLOKC~AAHIGGHHGD~?ACDCIOSWVMsOZ>FJIFIMKIHDDORTVTPOTSNNQSQRQNKGQ[aaXUUQLMIDFMPOTY_gh`[g^RQT[YOHPXZNMRPZZ[WWTUVSRNLLNPQORV[\XUPPUTPF9642/-TB@nDMOGDHF9\NBHco~MX^][OHIGFy|xv|ofyIIusk]YxgYs}|Dhl~wjgkifalrkb_XJRYgwvpyyklbUaNydYUS[YJXemntle`aduuYa{kghYYZcif\ISctnjlf|}vIm]VPZgkh^]bbcgjhluwcgg\\wEw^gCFn\\]uQGkOBO^oqojd[U`b`VYsxf[WZ_`UFECFNWRQ]ZcolVBN\hc]US`hddTJIT\_^[^jgcgdTN^^QTSNPT\kgVcigsvK?GSNKQVGSfeb^^^cob_jgXKIMNMMNTYUTZ_ejlomd^\XHQZYZRMKTc9;;<:o??kadchibcdujenbVQKJR``]YY^X^s_WkNxXfiTISpvebiidb_bl]PKIKOMHoYmMOs9GKD;g=LSJT^VTSamme_`ec[\]S[TEEMVTZmhhggc`ef_ac\TQPLMMT[XRPUWXRSWQMGV2I_>MI?@LFYnAbgji7AE9WT7@LQV\\TFGW1578;;;8<<5XV3:;:<=>:::;?A?:9=BA@?<86643773bc3438<=><877679;==8:BI@898765532fec1_1a_a``1]XFGW14566je`__]\\ZYZZVVWWWTSTVY]_`^\WVWWXY +WZ]^][XVXX!&%%##$%'(()))((*))*-*)&&&(*)'(('8*-.11-.10,))),.-,+,,*)+-/3211./0-+*+,/220/-,++*++*)))(()*-(''('''&&%%$$$#%&#""!"##"!! !"$%$&)+,-,*)('()+,+,,++*)''&&&'&$'&&(('&%$#"##"!"##$%%&&&%$$#"""#%&'('&&''('&%&7'()+**+.3575/+()*'&&((&%%&'&&&%##$',07;90)(**)(*)'%$$##$##$%#""##%')*.-)(('&&&%$%&&%%&%$$%%%&%$%'&&'&%&),---,,,/-+*-c.-/2331210020.,,+++,+*,++,,-..-,-.10220//.---...000//././.--,,+*+,,..-,+*++---//-+)&&'*,,*++---,+*)(''))((()**)***,./0-,+*+,.-,,-.../.-,T---**+,,,--+)*+,,,.11-,,+++,-,*+,++*)())'&&&')+++))*+-.*(()(%%%&&%%%$$#$&'&%$'((*-,*%)()'&'%&&&''&&('$##!"%%&''#"##"$''%#"4 !!!')('')-,(&$&)''(())+,+)))()*+,--,*+,+))**(),++02.*((('$c%&)))-.,*))('''((('%&))%#"!$),,+*)'')++-./..,+,//00.01//0//1000/.("&+,+(()('('&#!#%&&'&(,/0.*)**,,+*(%%)-,'",-*))*+)()*,)(+.0.0452//01/./1332,+ +&   ! #$##$%%'&$$'*+,+'%203824!$""%'''(**)('&$%'('&%"%()'&&'*--,,0*'(*('())(&')**)'(+,-+*++"./10--.,,,*+++,--,,.///1222/-./0001 343454335e1012 6433323322333122230.1*'*++**)"#%%&&(+.*'$#&(*-../-+,-/2-+-,(&''()++*)-/.,,/1/-, --+.10/0-*./- ,-01--++/-+,)""0+,//3+')%!#$% '*)%$(*(#!$%K&&''(+++&##$&%*00/000.**(&('&# "$$%#&''((''&('&'(''%''&'*+,.-+.($#$(&$"#!c$%&##%$#%'+-.+(*(&(*/530+&)+,+..---/.++,+-462.,.3533/(/0+**)&))(()(((&$'))**.1.2412132/-,-.440. -.04 2343210 !(%&  *1*'*/44666544344320-0346345973/-,-)6!28$#,47265,)5BD=96',+,,-+))()&'+*+-/252/32/-+*.564/,03666788952359965620+210--/0/--.//11-,,.//-,+/1586221..-0.*,/,*,-.3;<:89:8567:><;@FB?C#$C=;=?B@?>8899968B=674478?<>@@=>?@BCBCDDDGGEA?DJO))LI%()L@49:63667@<6454169@DEB?==?AA>==>>??@EEFGFBFKOUTRUUNIFHIECHKEBFMNC?@@<:75689@FECB>=B$'*,.,,,+)()+*NHFDDEC=?FIBEO)')'$G$&)('*4*NJI#!%KHFDEFFB@@><=>??BFEBBB@>?=:88;;85432359:8656:<=:968=<9:?@;6321242100-),1/034310-,+,1211.**07;==;::;::;BA80./6<@IKONLLIFK()(*-.,'HJMLM(QLHGIHEFHN**+,+*+MFDCE&-32/00/.)&JEBDLP)*))&JeHD@BHLE;3+&"*'8;8530../120...+(*,.0.*()+,--)%%),.023/2431-(''K'))"!(.1.+)''G>?DIJIGGFFEEDEFJ)+*OMLKGEB>??A>953342-/22247;8422012320,& " -<(.*+00,04110164./110/330134465*"+42.+$&,*(+20+(#4"(++)'%&&%().//65,)+13,,0001/./0.,*)*)%%'$@=;7::4-16.&&**+%CBAEGFIE==$%&#%3#.54.*07'(C=<9/,BE4+778653:>:31-&.09DB<-4B74KQ:1//5861'.9C=898FG>'K:1.*0786017668878?D6780->%>07'):/21>/'7'!*28EG;9651-354,,?C3,+,23,#&%&*/*(/.5<:.")2930+)3869/(%-46402<;9;8,)44)*+)*.2:9/7:7>MYD(&.*$'-$*6630/1384174*$&++))).0-+02577:9411,!##!! +82/0/11.01;318/*)'(-6420/3-1<1.;P1S=-7:,$):>204410./5.)'%'*)&7,<..;%(%!7!,*#,3+))2973/032.00*/+!!(.,/:776r632572240+((&''-22.,../**-+)&/)4 *( !*&,<#1683!&&"$&)(### #!H)*..-**)++*($$21.--+)'*+(**)'$#%&'**+*)'&''&''')))(&(*++*(&'&݀ɀ󀋁݀π遄 ½ÿĿ5ȹ؀þրŷѽǽžÿȿ¾dŹÿĿτрÿĽʾǻȻɿЀͿȿƿů̞ſ€¹񁃇ʧȀӾ‡ȿǾþ»ųż˞炐큋턅ě喟ҿŭĬϦȵ̹ºƮٽ񆊆ᳰȷрͬڻ˹ᮣƼͿۮѼҾڀӿö¾근ȰҲڊ띚þӳȩ탐瘵Ⱦ_]ZWVVYZZZ[YXY[Z[]__\\^^]]]\Z[__`a^[YXYZ\]_`\]ad`[WUWXY\_bbaaabdeggcbfjidbafnpqpica_\\\ZYZXUTVWXXWTSUUSRRSUTSTRQPNMMPQOMLLMMMKJJIHGEGGFGIJKLMRX[ZZZXVUTUVXZ[]ZWUUTRPONORSSSQRSTUSQPOMMKIHIHJNNPQOONLJJKKJKKLNPRTUUTTTUTSVWWWVVXYZ[]]^^cd`bdgc^WRSTSRRQPNPQQTUVTOK4JKMOT]eh_TOPRQONMKIHIHHHIKKJIIIJKIGHIKLMOQUVSQQPNMNLKLMMNOOMMNPOONOQQR!VZZ[[[Z[^]ZW[^[XZ^abba`accbdf3432c2233ffgh56555677765iihgfeeg@h5543ddc`\ZZ[\]]^_`a^][]_``adec_]\ZX[\\YY[\]^^\XUUTQQRSSUX^cfb\Z\]^]ag76553b```^\[^a__`cgjkiecca`adeccd_^`a`a`__]]_`_]\]^_d5nhbacde444d]Z\[XXY[\``^\\YYXWVTRRQNJJMNONONMNONNPSUVXYWY[\]_^XXYWUVXVTVTRQSSUVUQOOQUVROLKMNPSMLOSWVUTRLKKGGPSSX[YUQSed][[ZYZZ[`210/^\\[[]a22321_0012235412697543323dba`[[[XYZ[ZYWWY[[[]_]YXYXWVVVUOMLQZbdb_ZWVUUVVUUTRSUSTRNNPSSPOOQRTXY[ZZ[[ZZ\^``bddc`_a`]]]ZXVUWVVYYY[[]]\^23[ROPRRQPQV\YPLNQTUTTVVTRPMQX]`aZQPLOUZZXVUUTRPSUXZ[\],_cffa_bc^ZZ_baced24677532323554345543211212235677663ZPKGB;7DFGIMMKINSUNC@<;>ACBCCBCDHJLNQSUSNJE=867;?=769=558>AABFKNOPSROLJKKLMMJHHHKMLKKHINUYXRTWNLQTPKNQPNPSTUTPOPQRQQRSRQSVWWXVW[XTUTUVVWWZ[[ZZ^`a^\Z\^_`ab``aegfcfjjfef445676555gdaaf54eg7::7jgfgfdccbbdcbch66787lg]YXUUWXZYYWTTRQUZ[WQKJKLNRUX[]]\[[^]VR`UUSOPRPOSUXYZZXWTUWVUVUUTSTSUZ[]`a[U\`[[][_cfd`_`45hea]WWWPOP]`QPOIC>>?CFGIJJHFIIGJJEA=?FKMMNRSUWYPMQRNLQTQTYYdd]_UQSTUNIG>9DNSRMVXSUTSQMNMLMMKIHILMPSVWXWX]XRQUVOJHJKKHC76BKDEHB??BIMLHGMMKJHJOSTRNVY[^dea```^\]^]\ahlha^X]aada^;;>;XDHDEJR]g86^V[glljikkknomljijhffjlidb^^`cddhfemog`ad|TKmcl\rcipmt?=gVYfnoioFFEHMOKHEHHHRWVQQYdd]]adc^Z[bfgd^^\^d`^]chhegeaaccehgiigeb_]]ZVVVQTYZSQQRQMKKNU\^^]WQQQOMPRQOOOTVRPQRU`hkopqogbaekmghyBBCCEEA@KXWUVT`gjlijcUTbd_`VOPQNJ>Gc;qa_;?C838>BA>AB@@>>DEB=>:86766:><8:'@@??@A<6454234311123`[[\\SQTSW]0145dba]Z)XWWY\[VQPSVVXXYYXZ\[XUX[]\ZYZYWVWX[]][Y[]*)'%$'%&')(''()**++*)(&'(*+-.,,//,)&%&(*,--.V-,+*++*+/1/.-.3667400/.-,*)**)'())(('&''&%%&''&&&%%%$$%&%%$$%%%#"""!!  !"$%&)*))+*) ()**,,,++*)(('()***)())+*'%$##""!#$$%$$$#"""##$$$%&((()(' )+-.-,,++*/,03/0240,)'&'((&%$$%%&()*)&$#$&&)0671)&&''%$$%$#$%$"!"#$&'()+,*)(&%%&%$$$#$% &%$$$%&&&'&#&)*+,-,-//.-/0.-.01///---../0)))(*+,-110/...//./00-..,+++,,,-../0.,+---../0/--,+**++)*+++,-+)()(&&'&&&(+-/+(())*3)+0-,+,+**-.,+,-/011100.,-0/-..,++,--,,,++-.--,.0-+,,--.*())'&'')***)*)(''&&%##%%%$###$`%&'(**(*,,+,+(()('')'&(&$#%'((&$#$%''%$"!"#%'##$&(''('### &()+,)&$'31,)))&&'),)'''*,/+;/.//,,+)*,-,*)(*,+-/1/--,+)(('&$##&-231.*(''(2''(&'&%&'()'&''(),-.--//..001123321011///-,++,++,,)(&'&"#$&&%$&*.,'%%'()((&%'+./1,%&#%(,,+* )*++--/0012310120..021222 &! "#! "#+"""#%%&(**'$"   ""#%()((*)'%%'&&''&()(('%%(,--*,.'%)+)&')*(())**)*+,,*+.,-1-)+++,,++-..-.0110/.//01 24543366323D320132454345433212311331.--,,---+**(''')+,+)&&'()*,./../0,*+++))+*(()+,-,+***-,++*+**++,.-,--*'+.,+,,-//-,+,-,+)'&(&'(04)('$#!!!#$$%&&$#%%%''$!#&''())*,,,++%"&(&%')&'))//*+('(('Y""&&#)+)*+)&$&&%''%%%$%%')*,,++-+((++'%#%&&%#!)#"$  %('#!%%$##$(*+)(-.-.10--..--.I157510*,/-.,++#))+*'**()('&&&**('*+,+-'$/441/0.,))*.2432//022013333' " "'-2+).45443332466556654467521//0344753671-,-=.);8=2<1498="";./8>=8;&&%),,*'%(''-//,*076214763014675122585449==9:98897789:::986442010,.230/0/.-*),/2322/-,,++-.,+*)-.-,..07;<>?@>:658=>;:D%%$$%%# ?AA@=6*(/22-*,)%&*/14;BFEB<88;:76:>BEHGFHJGCAEGFDCDDC@=<<<;92./..*-;<<>>:99=@AFD?><>=;<;:<<9;<=?BGJKNMJJKOTWUOJGHLNHBCGGEBABFGHHLPH<9;=?DGGEB=56=BGJKKMR++O).+NKHKR,00/01-*+*+,)%&*++'M)NFFG23)FFCEGJIHCB@;8<;<<>AAA@@>>AA<6334551487320/012589767;<79BE@963010..00/12/.010-(NNL*+-11132/-4<;879=:7:AF%(-/,))+*MHFHIB=9:7/+*($$"5;:72221124551,+*D+,++*'%',344787651-($#$(,-*'#"&-1+&%$%JGEFF#FHJL'(PNIJKGDBCFCA?>=:::76413776421211355323754640-.+'")(3463,-540,+-0*).10-4:3./1267-$'480*%)/*'*./+(=),6 &((+++(%%%&((,.0.**...,-/..0.,-../.+*/.)(&F@:9889:862/)''()($C$%DGE?=@" "!$0 *-+..3>?A>63334>%&(*'$%$')'%&&%#"""#$$(+02.H/0#&%%%&'%$"")1/14+(+/40..+*)%%'&)/292)((&''(*)+-./3=<2+0-&')*0/((,/+,-+0-.+./163+&*((()**-11/,*)+-&)' 7''%#$#()$228BCDJ)-75.'??!ACJ<=D#DFGA<=EHD>==968=8083:@=79=BA213.79530%%1:;@;83)2;&K*.FA6>=6226;82.-7?FC@@9@@=HE72));@:<:2.015>;8=@23853@A812>@3+)2D'))?**187/4>:60,374146983/.--*#"=%020-0512=9,&&4<.,27;95(%1641.692),0204:3.,-./&$41'0712FTG0+)& ,&)9419928?( &0<:3+#"#)0.,.-4799663,+30(#,6.-!"0120-.050)3;80-)(-,)')'#,=8725DSK14A7*+7:135333/.60'%)),70!12%,)(13*;?@6($'+&%*/-.304<:7=8=HJJFEHGNUQMF?8;@?=?AA?@BFIKHJNLJHFD?<;=???;8be658;?@BEJLKLNMJHGMONNMNNRSPMJIIJKNRSSTU[ZKKRWUPNRTVVUUVVUPPPOTVTRTSSUWVTUZZTSWWXZZ[]]\[YZ^`]_``bbddceggedhkifgf4645idccghedh5786khfdbbdgggifc27:8lfb`_WUXZXY\^[XUPNMLORTQMMNONQSTUVY\[YYYTONMRWQPSPPTY^`^\__[WTRUUWWRNNZa\Y]_aZWbm6gga\c20_49:84e^bq_XXNJP]WJHEDFFEFGGIJJEBEIKD==>899@FIKNRPQUVTTUOPVURMQZYZ_[][b\SLMY^Z\_\ULJPOPVRMQSSRNNLKIJJKJEHLRVWYYXYWTQRTROIKMPfE9@LIDIJH@<>@??DOLA77AFC;==hZWQQV^afe]X]ainmmjijkkmlijkoppohddb`]ahiei;>rfe?Y^PGRYQFBAEIHJtZWcpvopsoCKKLHBDEJX][XVU^dhfcgjga\__`b``^Y\YWUQZec_`_adc]_ddbfikkg`\\cg^VVZZXZTPOIDHMORRUPIHPWQKRZVRQRPSTRSV]fhhgmslecagqmflx~BEFE@sttz}mZY_\MLNVd`QPUVZcoy|ywuutsrjgimppqtwz{wsvy}~{u{yrrvuuz{xwurx|~_|uqrw|oHIUYL84_Zlnkjjkkgfmr{}rhdhkfcdfkkfbiooptxyy~~~qnsu~zprx{~vrryyy}{ysiacmw{HPNLHGMT\dfa^[SPONNMLGGIG|zuupD@`b_dgnvxtporplmqtme_X]gmmmoqqrtria^_behb]ZWUUTRRRSVYZZZ[ZVTWZVUXRLIHGGKMJKKKHHKMHyIRXUVZZ]bimoy{cY]cfa\`l|||EHJNNJNKHNWZRMKKMMLMPPUXXUTPHLQQRUTPNLGzzGQTUUVUURL~vh``gorsoh\VTU[CZ[YVNSZWVUUYWROMJHHMUXWSQPNKLNNNPT\`dghfd^QIJPQLKKMNKFGJEz{||{CD{yrnpqroqthd_cfadlji`YZflifebabcc_[YWW[a^^^\ZX__WRMKNQJGILRRMIIMb=LYYUOKRXTROOUTRUWWUYhm^TRSW]VLKXc]RMOSNGNMRSRQAqKRUQSWYUOLLKMMMNQMAAHPSW[\Z[_\VQQT]YSPU\UOK}oigddikj_VPIIIOHjvJCwwvrmmaVWddg8>CAMadr~skqtgclDS_faYWVYYXVTRMGEEBELNQ[\QoB:T<=9554d27?BGKC?B@;8;BFCBCFJHEGIFBAAA@><>=><:98766887678;?BEC<56788;=730/455>B:545643442`aA32]YXWROOU_47752deea[XXXVQRX^]WSKEQY]_\YXWXXZWVZ\^^]_^YXXXZ\]]^^^3)+++)'(((*)&&%&'''()***)())(('()-)'(*+,-,)*--,*'&-$#$%'(&'(*,+*+.,,-.02465674322.+*+*)()(('%##&/'('%%&&&%%$$&&'''&%$#""$$#! ! !""#%$%&&'(*+))(+/0.+*,.110/--,+*(%&(&#""!!!"#%%$#T$%&&&'''(+,--./.-26875300038?"@2*-/+(%$"#$%$$$&'%%&(('('%$#"$).1.(&&(*'$###"###$$##$%N#!""#%%&'()()'%%$$#$#$$$%$#"#%$%((''()('&((&%$&''*-00..//.0/../120/.++,-,,+,-+*(')*)-,++((*++,-./0242000/020.//--..-,,,))(((*+***))('&%%&()('()*++,,++*+0/-,++*)*.10/---/00./0/--,*)+---,+,,*+..,,,+++,,,.1.,+,--,,0)&&(++*(''('%#"$%%$! !#$$$')'$$##%)*'$'&&)),/,*(%&()(''(''&(('$! "$"! #%%%&'##%'&$""%($&./0-)'(&&0+%%(()'&&+10--11-**+,-.0/,,,-./1450,+''(%#$(-2640-)'&&&(*,+)&%%%&"$%%&&Y'*)(*,,-,+,-.--/.-/100///0.--,().0/,*)(**&$#&'&" "$(+'$#%''(),.+(&&),-./11/01+.5/(%&'+(,/0220-,-.11/-,01-/22f% #!"! ! !"$%$%'&$"! 03 ""$((%&''%$%))(''()+,*('&&&')+,+,,0/%$),+(&(+,++***),-+)+++,-,*+..++,+,-.-+-00//0*23431244324532435323464246433345653520/.)(00/./0.,*('(()+,*((())*+,--.00//.-*(')-*(*)((+..+*,-,*)()**,*&%-1,(('(&$(-+*($'$,(*)%'$#(0,%%$"#$$$%&''&"#&'#! $%&()((*+)(($#''($%)''+)&$,)&#%+,)),+(" &((*)'**)(''&%%%&'&"#%)+*,-,,+('***($&((()*%'&!%%$  "(& #%)++,.//1/v/.-..0.-.-.//334-,+(')+21//1/**+)(&$""#$%%$&-+)+/54000.+*)*,0221023223345 2,(%&(,02/,,./433322454555444788853210/25645 :22!37D+)-/*#! "$#&;1/4<@<=><&***'#$$(01/../378758:951223535523100.3<:57679735887:;:::512794/03445/-.*'(*+--.*%%+/+).3.+-/48898<@<877:?;7:AEC"#$# ;>>AC:1262(')0:7-,/.17>CDDCAA@AA=;:=>>?BCDC?<@CDGEBAC?;?BDEEDB>>BCBEGECCADHIFDDFGFEILLKLLJFA>>@CG835=BDHKKJEEHJ)--+)'*/26:764-++*+++(()(HDIKF BB?%'DD<==@DEB??B@>@AC?;625:>?@@B >953335:84321.-/246568754541350,)((()++*()a+)JFG(04235569<=?GD414895239CKKGCDGFCBDEF&)***'HHJO++PN(-32,*))*))+..010.0.*-00//.,++(LKGFFL+13212.OIIF=76;??=95-'##%-00/+.3100121.+*(&%'*..,++*()))**.3479:873+%EC%)+)(')*)%$&#DA>ABCBC#"BDHLNLKHED?::9658;7523734;:94//7==<:75666421114865420/33,$ ,(10.*(,/,((),-+,---08;2,++.2.(&-40+(+-)&+*-.+*!9C'+.+,11.*()()*))+)"#)+,-/0..10.,+,2/+*/3.*'G@;9:::<=<50-('&+%B5A.(@F?AA<91,(,)*%14?KB?8489213!*161,,,-.-+*)&#!"!"'(*/0,A$%$$%'+)((%#%.3.,.**,15010,,(##)**./,++),)#',--,*,/4<8.))(%!"$+.-)(+,*,*,`/46==1,1+('+)(-/0/*))+,'$"!%)% %(%""%%)'%$E;8&,&CL+0,%C86BED<9A'($KIFD@@BC=?A;54><4704:5:=5I'=3:CCCD9-*()/7C?747@=2-0:A7* 2?14E:9?;:<20:A'="-CA5443776442'/936:?A@EC>EB:4HG8>EHI>1-0;BB=6994669@:756<9-*09&'C+*D4/.*,6@9;9.07469229=82&D0))*"1;3,.41'/71'%.,.?74/77*%16:4)273)$(-2630/+290(.4+(02-1=LO9/,+(&&-+*70&,*(180(%&0:<;90"%/0.'&1164234++-.+$$33/353! 962-+*/./+.7;<<;82,)''"$'#'7-(.22+108=634320/42/172,'$"5OD#,:')'(2B:"<&&( 3#)&)' #"'-)36025;=<<=<8.%%(,*$'*+-0/.10.+)**)j*&#'174-.+)$48'.0,1.*65)7:1' !)'!! +! #" ^)*'&%%"!!#'/01.+)(('$$'**'%!$(,-+)('''(&%'')))*)&(+*Ā考ƀ򀈁рƀꀄۀ~πɀЁ Ļüºμ¿»ڄـĿԀ³Ѽɼǿǜ»؀ɾüҲ򆋆耂ðþZŵʿþфҀ󃁃ό넃郑ÿ½ŸüpǵijüȎω͌źƾʿż¼ȸŽŵɿɻͻ񍟩ֈ䏓Ƶ醍±־şǴǘˀƶϺ즽Ⱥijꏗ˿¸ǿիѽīӾIJԼɴԶȺ˼辷˿ļɹѹӺʿðѪ喴򀋐ŷ񃐐)^_]]c21_UWZ[``][[]\\]01_^_[Z__^_013442^[\ac`_]]\ZZYUSSTTUUUZ]ZTSUVWY^_[XWXZ\^_adfgghgea\[\ZWVWYYZ[WUUTSRRRSQRSRRPPOORRRQPOOONLLMKKKMLHJGHIFGJMOOPRUYWWVTTSSTXYYURRSSPRUXZ\[\\YXZXQNSUPMLJIJJKNPOONNLMLMQTRQPORVX[^_adfe_[[bjnnlmqxAEFu[PSSQNKJHHHJJJKMNONNNMNLK:LKKLKJOUUQMNQQMKJIHHIIHJKKJKLLMMLKKJJJKKMNKIKKLMNNMKJJKLLNMNOPSTUX\]YUTVXWX\\XX]bdda^]\\`a^ZXY[^a`]\\[Z[\aebc457977765544fca2bc47789975422355543fccgaWUWXYZ\]_`bbdehfdeeb_bb`_^\[YY[]bb]\[YYWWXYZ[ZZ[ZXXVUXYXVY^abca``_^]]cih_YXWVWYZ[`g5lhc`^]]]^abcc`\[\^^^][[\[\]\[\\\]^_``c5887ka\![ZYYWVX[]\[ZWSOJIJLNNLJGGJKLLLKKNPROQV`_WVSOPUUV\_[QJKNQRPOQSUSQRPORQONLJHJKLMNPPMMPQONOPPMNV_b^Z[``]YUVYe652_ZY[]]^010][\014687644433223787789CB=@CB@CJGEFC@BCBAA?=??DE><:e`cg6;=AC>?GIJLMKLMMPQOMLKNTVUQKIHLQRRSTVW[^VNNRUVTRQUXYZ\YSSSRSVXWTSVXY]YTSVVV=UWXY\]]\^^]\\`b__``aa___acbcdcbbcdffgede344345geedgj4fg45776gcgj56lik77fa\\``XT]a][\[ZVTSPMKKNPOMMMLMMORTUTUWWWXZYQMOVUOMONNOV^b1587haZ[\\]UH?IaZZ46322bad2d3YR]1V[23c[_a_db^_`baTKFFDCCEHKLLNPKHKLFA<<98:>>CFILNLJKNNICKSRSZ^WUZXWWKERZSLKS[YX\\ULEJVVPIFHMNNTTPKHGFEGFBGNUVUXVQUYWVSQMIIQTQOORQECIJIOQRPF?79@FKJA749?CHMOORWPZ\]]]aehf]\YXXWVV[_]_decbcdcace^XUTSTTURRUQPUZ014e[ZYXZeneXY[ZYWUVWYY\_abbefhggh5679:<==??<<==?AIG@=9gca``cbdf`__ZZckqqlhjlklmmonnmjfjpspokkiedinjc^cmoidnEHe;rg:DEHHDDKKV`\W\efdcbabffe``bceedd!a^[XWRHN\ZYZY[\Y[`\Z]accfheefji_XTPLNROOSSQORX[]ZYVNLPRQPPNPSTTXZfqpjkolifehs{tsyFJLIFD|ukkqeX[a`VX][]YOMQQRY^dkmmlhbadb^`cb\Z]^drsnnoqvx{|rkhmxyzxurnmpporpopmltp{}}||~}|hIQPNLIOUW[ad_ZZY[[\ac]VTSSTSOJKWXPKLMKIQQRZVVSKFIQ_[V[]ZRKLLMRSOLKDENT\a_[Z^]ZXYWZWOOSXUQNGvnfhje`[UOJIKLPIQ>GLiw@AtqkrwtyrDIMEMafdgph[\dTHT]fy{m^R[jeWfoZXZONZZFIWTDJgslXTjXbdYUVZQWiwmef^XTQQWZ]]TCDMV^ZWRFBVjojuCyb\XVRJIS^^^ajrh_[^`RLOIDFFHTgjgmswAzdVROFObdhsyvpkfb]VLJIMRUTKKNMJVXg^I[s{zqsm\RNhtmbWVjjVFs7@QXVQPK?rQ\ONOHKX\^UHBLRY[RU\bciqtz~xh_WSVRUWVVYVRSY\YXVTUSMKN[heWPDv;ls=?GKRMGQRJ@peYD=`@QTQJFFHNOLNXUMU1134489:;;<;=DEA=963b`8AHQWXPGDAB?=?@ABBDFGGHJIGFB@@=879:67::73259=:679=@CC>7369;==731VY_Z178424873235410_^_Y=;98:AE@>CG''(&$"><67=71484+.2253,*-,.369==;:74366358742436==:;;;>>??:669???>==<<>>>??>?<:?CEEDDEFGHHFFHIGEFGHIHCA8 ,$.7!,"'&'.49:88<>?AABB;4446528?;547>@?>AHJF?99=;::>=BJLKJMKC:=FICBHIFCCA???>=AHPX\YQNNQ*TQ)+*)*+*,0/.-***))-0,NIB;>CEA=<91,)099689;,?A@?>=<<==;:<>?=<<=>>;6455;?95423553-+.0254102598400,,-*(*,)&'(((+.01,,133..443679>=8536988=<;<==:665433432321/151*%"/'-+*)&*/01573//./12552,+(&&-.)'()'%+++0.-,&"&,63.220+'((),-)(($C%+.1321033101/1.)),1.+)$A=<9;>:741.+),+,'&*,?M(%?>:@D=B;2"(5G$"B?BC<4-,!167/,/1100,*(%#"!),+*,D) 0#$'('),*''&$$,-**-++*('(,.,*)'%&),*'),-,,.*)/0-+,./020+'&'+#"%',/'#%(+,--,./154:9410*(((&(++./,+,,,**('(("&)*%%&)+(%$E:9#((IHJMKFBA=@BB<:B$%((KDEEB??;@E@838<=A?967962;CA73522:<<;3.)).16C@15=A>5'*498750K3LRQUO>?AB>:EG6%.;@92/2455/1.&'7/*4=<9:BFAA=7$B9DHFBD@56;<>::013568782-264337>H&>;+.<0/+,650AA661/9?:2279:-"&),%+7834;6./6+#+04@C<3*1<7.7=/-.()01$%/+!$5<7++9,35-*+.'-8@:5620/++///0+!%)-++)! +784=%@/,*+)$%(+**-273.+*($130489!AABC=0)'&"'214>874,'&5;83-,9:.#6!+.,)))!;C,3))+$%-0.)!')..(*.138<=?C@60,+,(+,*+.-*+/0.--,-,($%-662.%>!;>!"(+.+&-.("<70"/&(&" !#"$"+($)*$ !$'#''(%!  #&10/.-.-+'$(+--*(&%$'*-..+)))'%(***)('&'()*,,(),+׀򀃁󀆁Ȁ~݀рā ¾ʹ􀅇ɼ+߀÷Ľƾɯýû̀ʨžȿ»ýǾձĵľпιȽŻзʓ쎕״¸ǿŀ»ɾû쀆ɱƿ͹Ľ˹€˾ı÷ۀ򉍍Ζ¶ʲ퀂ƼړµބʿķIJقƲϪͪɭϾʽꊖ˼ŹـʰϽɾܵƷƿ·öѶ޶ӿȵǺƽĀ끏Բ·ĴQda`_`11221^^^\]]`b_\[\_3751023I1246651_012`\[][WX\]YWXYZ[]bgg`YVQONPRSQRRSUUWX[`figd_][YXWXZ[ZYXUTSTTRRRTRPOPONLKNSUQKJHGKSYZ`_RJGCDILMLKKJNRPPQRQNKHHLMNPQRSQORY\^a_WW^`WKHLMMLJJIHHJJKLMNMKJKNSQBCJOSW\^^^_ehc\Y]bgikn:?C@nbVMLJFGJKKJHFFF/HKMOLKIFFIJJKMOQQNPWWOIHIKMMKJIHHHGGIHGIIIKLJKLM&LPOJIKKKLNNMLJIJLLJJKMOPOOOPUY\^ZURUWXWuY\^bc`\Y[^]\\\]ZY]`__`_][\]`a_^dgff34f`]aeg324c]]acabcdcb_\^_`begd\XYYWUWXZ]]`acddcdedb`__^[[]^_][[Z[[[^`[\]\^]XYY[\^a_]\[ZY[`eb`_^]]][YXVUQOPSUWZ]`f65fded_]]]\^bcab_^`a`^]]\\]\ZYXZ[]^]\[ZZ]`ccb_^^^\[YWXX\`a_\ZXUNIGINPMJIHHJJHHJLLKKKMPONS_db]ZXWWWSPQONLIKORQMKLKMOOQQSTORRMHEGHIHGNNKOQPLKMQUW`53]USX\\ZZ\035542ca`_`10^[YY[[ZZ^13479986777997656657;98=ACF@832b^_`[WWY[\^\[ZXY\__`adecZRPNIEKUYYUQSVWWZYTRRONNNPOKORLKLMMORRNORQQQRQLLPRSUVXZ]aa_`_\\^c55h57igb]\\VKFJIA=<32:DMONNMD=i:FNVSKKRXYWWZYY\\]YT]b]QJ5IE@GQWZ\QKOWZVRTTW[]]\]ZVY]][^c3322210/[.0/./00464123434566787667654_RMOMICEHHHEB?@CABDBBHLJHESPC@?=<=;9:=<=AGL81@DHLLKOOQPQROJILS[ZSONLMSWTQSXYVXZWSPPSVWTQRSUZZXXWUUVXXVT=UZYZXVWXSRVWWXYXZ[]`___babbc``a`]^___ab`^_acfecdcdeee355jifdg5676heedddi676ghmicb`\`dfl8kg^][WTOMNNNMOSUQNPOKJMPRTTSUWY\\ZVQPTURLJMNKIKS^0132a][]\]TCAR_WW/7:774100046442XOVXUNKUXZ\_^c5fWJIFED>>ELMNKEFGIIB??A=9<:?DGMNKEDGHKNG9>RTW_^KCWYVVTYXRMNTZ[RNOLJKPZ]TMHHLMLJU\TLIIC@A@@GNRTTTQMWZXVQNNNKMSSOHEHIJKLNNORRKA5:BDGB57::>?AFKKKOQSVXY]d64b_\\XTSQTY^ck98id``djia^URW]ZXXVYYRRb9f\[ZXX[[bbaXQV[^ZWYYZWUX\]\`ccb`behkhgk898:BDB>5YT^gecddhgeaTR]elokikmnnnoqrspppqAILlwFHFHFELNRSWYX]adgcabbcb`[Z^cccb^^]^^]TKRVTTUUWUSUWVTTZ_ckpsqmnh_XRRSSUSSWUW\]\\_[ZYXVNHGHIKMNPNQUWZcnmjdahmjhfejlsuuCGD}yzttzoeUJQ\acd`XSNJMV[PLKJPV[_^[\a`_]VLLQ]edccaacccjtxtpsxyzvpptwtsqppihihkpsttx{||}~}wuyyw{{laf\H}88HYb^SR^mvuqroiimkhbdhedfgmg^`cfkopov~{qifhilnmnoqjbfga^bs}ohhhdfnvtorssutwvtwskmtTWSNMOOFHHHJIFEDDCEFHJGDLJuolkmjd`^ZWTVYXVWWYZ\^affb`^^^_``aceffefghmoljox~j_[XZ\YTSUVTRVWUVXZ\^]]\[\`_]PCEKMMKJOZa`b`[_ee$edaecbfggga[X[alv}HIGJIdJNNNPOMNPOPRRRSTPPOMMLJJIHFHE}vty~zrprvtj_chig^X\]..5L[RJHFDELQLHKQROMIMMMQQQMLNNQQOPQUUW[VOJHECGOSLGKOMCm{KNNJMFzIKIEvllpqvtWS>b\vrn[Wejrroiiu|wurmhilkfbeebec^`a\WY^YWVWWOPTGBJOONNOJJaMLZuwi\SZ[T^aqwxpdien{badZWWNTZYTOMJ>?^qni^_[KXW_aQUebmua[ZOCJ\_XUOEIUSORUEC_himwzqjsvfSGGKSYVRXpobbyG8ZRZI6BJPdiooldjvKylpZAC@91037=<7142YY\_`2365434323212aYRLOVXT[43254a_*ZWWTVZ\cf`\ZYY\_23e_YWUQQU\`_^\ZZY[_dd_]ae.,+))&'''()*++(&')A*,)(*)(*,+(''()()-13/+)'%%%''&&'')*+,.15762.,+*)**++*)'&%&''(J&$#$%&&&%$$%*,(#"!!"'+.87*#!!#$%$$$&*)((''%$$%''()()*)').//10*'+-(!!"""!"#*%%#""#'( %&(*-./01363/-/35657 #!82*%&$!!#"""!"#%&#"%&&$%&&(((,-($"$&'%$#""#$$$%%$$$%%%&%&&%$ +%''&$#"#$%#$% +&),-.*$"#&(B*,.//.,**++,./0-.010/11/++*+,,+-/...*()*+(&()***+,+*)()+,,-.-+g(()**++,-../01221/.-,+++-/.,,-,,++,++,,-,)()*)+,,--,,,+)'(,/-,,,***+**)('&'(*+**,/../.,+*++,.../,,./.,.-*,-.,+))***,-,,,+*)((),..-,*)(&#"#&'%#!!!""! "$#$#"#$$$(.1.+)''')'%&%$" !$&%#!!!###$$&&$%&$! !"! $$!$&%#"$&'',*%#&(*))+-,+))('%%'(('(""#/,..+()+,,..--+,./002653.)(&# $*,+(&()))++(&%#$%$%%#%'$#$$%&''$$&&&%&&$%'(()*,./22111/./23652/.-)" !###"3 "&&"#(+A,,+,-.*(-/-%!! &)*+$"&+-*(**+-..//-,-//.02)0*" " ''  ! "(*"$%'&&)$*,*&$&*01+(''',-+*,/.++-+)''*,,*)*++.(-++,--,++.-.,,.-**,-,--.0//0/00212221122012100123322233234543632233354487322-..,.4410.++)''))(*--*())'&(**++*,--//-*))*+)%#%'$! "')'%&''%#'!!%#(**'%*,*+*&(*&"#$())'"#%%%" "" #&))'##&%&($#'(--!&)'''**'$%)..)&'&%&(-0*(&&('%"*1+&%&# !! #')**)($*-++)&&($%)*(#!!"$%%&&%'&#!"%!_!"#'''())++,.30..-+)*)*-015/.-.2661/(&)+(%$"&)%!(+(+-,-..1..)&*-/,)++,+*,./-033200136425.'&+/../1321/((.134333467788::8I 78989<;::6042.63(-. ! $%%(5*8;2C("8@))'(&%(),-010367853345642369 5446771,.0/1//23222347=@B?;<951-00/2002223420/.-)&'(()))+*,//17>=:65:=;9889;?@?#$"=<>;=A:7/(.453552.,)+36-*)'+0343015432/)'+27677445547AAA?>=8676:=?>>AEFFHGECBCDCEIIIJLFA<4,+%35 $&%!+6?B@A?;;=;7225436:;7369:<>?>AGJF>989;?A>=>B?799767BOPF>;<==?DD@>ABAAACA?C@9;AIZ561,,,+QLP **))++('&'())&N*)MH@=<<>=:7641,+-012445778::876656789:;;:99:;=><:@DLI=510351./100/2322446753247::7,&)++,+(M+38551-3979;:;88;<=<74357CB@>:99;;96888:73462..1/-*'#"+#(''&'.228<80-.-111//.(&(*('''*-*&$&(%(,,.+-.& ").0-0/++)(('*-+''%E%*0142/.11002465+((+-+*)%C?=::92-)(+*K/(E="*179B/E36;GFD&# "(1:>@BEEB;15&552-,/0.-))('$  (/)&K=%5!&(***,-)'(&""#$&'%%##&(('&$*/-+-..65-*,-/0,.1,),,++..+&"%+'()'+.*%%(.+..(,./327874/*)))++*,*..,,+*))('&%"%$)&&%&&" !C>C&'MHCABE?7&(?9@AAEAA54;@I;6;;58;;/..5><50/172*+($.4073%+3;@<<;6/.28=@?AEB=<<750(18<46984526OJ:07@<8>).D44-'-82<=6958CB;5:9@E236.,-%*00+))(2=EE67240%,+13)*416=2//)#'13.-)!")(&),#"2756;>;7;=1(##"## #34.-7!% $+04433:AORT+B76+$029<<=769;>942'&)*,-%)(%070$:(3:?"#9-"-=<77@MK1'+#-.%&(%":=#%*-%$*'%',+$(,,,*"",321.;BEFNC/)*.240,)''&$&+++.*)./4:3/.& 98!% #)#&+% >@2$!&#$'!!$!]#&*)# $$&'(?*&" #$"&..---+*)&'()-.+)('(*-/-)(&""%(*)))'(()+.-**-.ꀂـ􀃁ꀂ؀ـ Á~~Ȁ؁ ȼľ󊜛ÿ5ĹրľĽ慔ހĶ倃ο³Ĺ۾w»ƽøžź½èĴdzƿɽǽź􃄁邒ƿڀζ耍ýû͹ǀǸļžƀòĽƽ񁂆㔻þـ膉ъ󁒰㌍ɿ²πƿμµ׫Ӿご¸ŷѲȶĹɿЅͿ׺æ̶ҿضȿźΦձȵþ־ýȽ̰λ¸Ĵŧ늈F䀄`ba``^^`b222a`__`aa__`_`d`_25564223554420/^1ca`e4`]ad^YWVUVXZ^deefa]`ca\XTRSUVWVXZ^ab^[\\XVVWXXVTSRQRUTOHKPUWWROLMMNNKJLQSVQJFDBAFMQSRPOMJGDB@A@?ACCDHKKKLLLKKLMQRRUWVSUXWZ^\VV^aZTRRQNJGFFFGIJJJIKJHHGGHBnCIKKLPPRWY]aa]WVY^__adghaZVQQPNLMOMLJHHFFFGHJMPNFFIJLAKKMMNMLMNLKIIKMMMKIHGFFGIJKLMNMLKJJLMOONOONMLLKMNNMLKMOPQPONOQQQRQUWVVWUVXXWWVTUVWYZXXWYY[`de`]^^]^cea[Z\]\]^`a^\]][WVXXXZ`ie33_[\]\\\YWXZ]_cdc`ZWVVX[]]]_adddbaa_]\[[\\[\[ZZ]__`cedcdd_]]^^ba^^]]_bddb__^^\[\_b^[\]]ZYXWYXVTSTVY]]]b44fceeedefbabca`\TSZdid`^ZZYYYZYZ\\[Z[][ZY[^_`aa_]][ZYXZ^`_^ZVUQKIILPOONMMLMMKIKMMLLMMPSW\bc^`VUSTVUSTWW\]WRQONKIILNPRRPOPRYSJFFKMLKKPPLKIGCFMX4;;4ZVWYWX_1342^^^[[^^^]]__`_`113457653455798657L6676444cdk;CB;jd_][ZVS]baab^]\Z[_a`^Z\bd_\]^]WTRPPQNMOPPPOKKLHFJMOOMPPJGHIIKNPRQPQPHEKOPRSVY[[[\]\[\^a33_[\[ZZXUSQLEEA<;=>?ADE?><:<>>=:66<<988:?BD:-9@DEFKSUQMNQQMMPRU[XOQTRQRQMOTXWVWVVWTTWVVUQNPUX[]\ZUKVVTUTUVVWWXXVRQSWXYZ[__]\]__ca`__bedda]]^_abba`abcdeededdf445ifehl776665iefg587fedbbb`adb_bfda_^[WRKFHLMNQRQQPQPKJNQSTTSUXYXVUWVQPQPOQUSPMJR[^234f[OIIPMQVXY]./5:9630155542c68cXROLLRW\_]Z59i^XQHDB;=EJMNJEF0C?@@A?:;??=ADKSSH>CHILMJ@@NZ_`\WY]WRRUWSKHJPSOKLPOSOJILPRQIALTOIFGC>BCFKNPPRUTNUUSRQPNPLMV\WNHDGOKILNNNKHB9>ACJ@1q`dsn>GJOTX[GDKP_pwnru|x{E|lezzKNohDI||ztuz}}{qtu~rp~pl__pn`a~ob_]cc_XPTU}j`pyxu{urkk}mXR_rfQOX^^emftETMzulgha\\b`YZZ\^ZRNLP[YV[VJEUbgeb[kt]LP[hf^hejpma^T]tvnebmfYd\jHcfxwpkoGFwpg^TTjgryrtuz{KGo[\Y\bSCIEyDFP\ain\YaacSboxtbfeo{_VWcXQXXWUMC;G\djt}ikf^c_eg`fMFVOardbqoWNYYTQFJK[\QNQK=Qb]amqeX^adebWNLTYRO^vad{DD=_OKOV^hgehklcYjzKEVL\deedis{~lgoia]kg`YQVX]\dgVCo@EHOSUVVRMHCB@>==>>?@?>DFEB?>=??=6330/29@?6118<516<>?BA<61\19:64442_\\_cabd34333531122^ZZWUTWXPO03abba\ZZZYUUVWYZ\_a_[YWVV[`bb`^^[WVWZ[]\ZZXY_ee`[[^ +,*))(()+*,--+++**,)(),,+.++..*'&&%&'(*.//1.+-00,(&%')***+-.010.//,)()*)('&%$%&&$%())&$##$%&%$%),,(#!  $'(('%$#"!  "#""%''&$$$%%%&'(()+*()***,,)),-*&%%$#" 6"""!!##"#"!! 7"&%$&)**,..11/+*+././1441-*&'%$$%&%##""! |!#&&"!"#$$#$##$%&&%%$%&&&%$##$##$&'('%&&%%%$%&''&'''&%$#%'&%%%&'&'&%$%%%&'&&&'()&$$"#&''('()*)+,+)(*+.14530100022/+**,+,-..,*))*(''*-*%&((()(*+-//-+*)))+,-,-,,*+---,++,+++*++-../232100.-,++--,++*+,,--,+++*)*+,*)+,+))((**))(()+-+*,..//--./.--.--,('+130-,+*)()*+++,+**++)()+++,,,+++*))),-,+)''&$"#$%%%$##"##""#$$" $%(+/0,('$%'&&'((,-)%$$#"!!"$%&'%6*("!"!!!$%##"  #'(&&'''*,-+(()*+))***)*Y114$"30-+*+)',///0/..,,/0/.+-2421331-+*(((%$%%$%%"#$! "%&%#%&#!!"!"$%'&"!$&&'(*-.../0/../1.,-,,+*)('# #&'#!#((&$$'('')*..&)0(())),,+*&""(*)(('*.//.-++*+,.1////-.*+$$"",$ !! "" "##',,)'(*)&&((*/,'*,))+*()+..,,+++*+,++,*')+-110.+K,,,++,--.--.,*)*,../1210//01211002334200112221112334433234544683224(433211//0.,-22211.,)'#$))*,-+*)))&%')*r+,.,++--*()*(),+'$ !&'-*% !"%#"#%/,*)'(*.0/+'*''%"!"#'))&### !"!! !#&**%#%$%&#%,//.D+('),)$#%)+)'(**++)+)&%')))$#)'$#$$ "#$&'('(++'++**)(&'%&*/+%! "($"%g#"  !% #!!&%&%$%&(+(').462/.-,+.1130.-.13.(')*(%%! $$#*&),-,,.450-,,.33-,,++**-.,*-0232134)()-12454333*-56587678657:77878889766776500/*12(,(!'$ "#!!!"!=48>;!(%;%& #&##&)++,*)+.32//023200111.,-0022010.03242300//..147:===;8:=;5249:85200035530.---10+)***+*)*,0234767547<=;;99;>=:?B><:996871.)*1442-,*('))*(LJ&,--5846853/++025852002432477768<@?=;:>BGLIHCACBA?==??BFGGJKGC>?BCCCDB><:974*# #&&&'++,0==>>@AA@>>=7789<:768;=>@CD>;CFDCA@=<==<99=;76438BLTPG>::?HKHB>;;>ABBBA@>;;?DIV11//21-,,TOICCEEEFGGKLIHLNKJKMJJIKJD<50-**+.13-(.234677678:71069::85788876447:>>?=;74663.+,--.//369??;:73212354/.0.,,')3;?A<7129<<<;:853347?HJJKLHHHDBDLUPJL'))*)O')+-/0,&$'*--+(&'(*)((()**((('(QJGHGGIMNMHEFEBAFMJEEB>=<=@B>=A@7-$"#-*()(&# "++)+-+y(%'))+,..-+*)))*&#(+($$%$E#%*.+&')% @$,0.)HF(**+++(CCK*+OKKPUQPPHDA$$'1A>946=BB@@ABB>@DGM('!!!"",:@9<>?8!,73-))--+)''&# !'($FD,( #"%&$$(+)*,)%#$%%&%$$&)'%&'&(/430./..(),-2574-/-+-)(*./*%!#$)1)$**.,'+.++-)+-.4268<91-,,+-*(+*+..+++))()'&(&/,!*$%(%";@#JHJHE=:GKA?),F:6&)BB@=ADFIDDHGDCC=?;?;;HB9811=>54GNJ:310452/+.1H;8@B?>EA=99D;/*1?8+.788;>6<%.(<:777411640//263-,*+2/+.*"*4753/;B4*-4<;5<:;>=55-1>?;54=907.5)F35A?:7:C%$<;61,.<;AD>=>@@D'$7-0057+!'%;%',359:/.567-7=A?476=QH5//5.(..--*%!%157>E88514/5517%",&1=31;9*&./+*#%$-.&&*&,5/067/(-.220*%!""'7-/;"!+# &+11/135/,;SOGE>A($'#0545469<>75:842961.+./1/36.#< %2=?=C@57,5H<6;>D:++*(,-%%)&$"#&&%'"#)'&%#&#(013/'8@03*+-.,-;JA<>921430--.,))&$$#!#').2.(%%<3;((9:"# ""'$74A#(%%,%$ $&'((%"K'(''*+***('&%#"$$ )+,-+))**('#),-,*)'&&),-.,**(%%&(()('(')-10,((*怂ۀۀ΀܁~瀃Ё ľȿȾǽ,Մ܀Ǿˀ퍘¿V½퀅Ӷ½ǻĿ½Ľƀýο¹ļݮ½ɾƸƵ】$¿ǽ»򁆍Ⲉ¹ĺǼʵ˼˴ɵϻſž¾Āü̾³õǽ»ǽ̸ľۋƸȸ²īǿ넉¶ȵۄ޽ʫ胛Ʋͥƺ䅏˴ɨ̀ϭŴҦĺՠȼɶIJĮہԳ݀肁ѺɷϚպѷĪȸƾو͈߬傂팆ǻNr`a^`1]^cdeffdbc_]_c`]_dc_ZSPS\a_]]]^022210]^_^_aa\^c4421`ZWVX[]_`dd`bfgc^YUTTUUWWTUZ\[[^b`[XWVTSTSPRUUUOFIRUTTSPNNMxNPQROIFCA@@AB?>=>@CDB@;78=DHGDEINMKLLMLLKKNPORWWSQSWZ[[ZZ[[Y][WPJFEGGFGGGHGGHHIIGB>s=LHBDEFHJNSV[\ZVUUVUUVWZYXWTQPOOQTSOIHHHGGFHIIGFGJKIEGLLKMMLLMMOPONOOKKJHGIKNNLIHGHIIJLMMMOQRQQRQMNOOORRSTUWXVUVUSTTRRQQRRU]a\WVYZYVUTUVY[\\[Z[]accba`]ZXZ\\[ZYYXXZ\\8[XWWYYWYYWUW[^24488c`ba_^_ccdf56gb`^\^aaabccdbca^^\XTRSY[\\Z[]^bea`g5eb`^\^`aaa`_^`baacccbab`\YY\^\[[YX[\YWTTTV[\^c33cadfdbdfedcc`_\Z[]_cb]]_][[ZZXUUUTUUVVUX]ehd`[X[_ba^]^^ZXVQMMIGIIJNR +RRTUTQONOPRLQSTTUVWWWYZZ\]Z\^`2a[UQPLGHJFGNSQMLPSNJJIJORPNPSRPPLIIMY671-Y[YZ[X.431^USVXY\]`]]^_a2598652121`e685`\acd4f`^cegd``dlmke[WVVVZ^ac1bacdba`]\\^cb__`bdc`[YXUPJECFGGFGJKJIIGGIJLKIIKLGHJLLMMLKKLIDCKPRRRUVUUW[\w^bdd`WTUVUSQQTWTPKHGIKMLKKKMNNMLROLNQRSSOSUPRY_362_[UQTWUNLOOVZYZ[YTRXSLLPSYYXUVVUTRTRT[]`2`\^1b146320//0133213334443234688;=<;976bQH@>@ALPOTMNK?:==>@AA><<>?BB<8;<>=877748:=ACFGHMSTPOPONPTSPNKMWYROQPLKOUZXVTTUVVUVSUWSTUUW[Z[YWWUTSSTUVUTVSPORUZ^]^\\]_cda_\]`a`^]]^^_^^__`bcdefgfbcgjkigfh6886klii556765i3filmkgbba]^a`][]ZWY^a]WQIEILMOPPOOPQOMMQTWXTSTWUQTZYTPOQSWWWXXRLPW[]d4c[TMJMSb`XV^10^cbXWX49753\ZhcVPMLNQV`^Z\d4435h[GCDBDHIHGFCEFA@BC<:=@CFEDFJLFDJJKTOEFSWYWU[^ZVSRPRUQHCIONLMMNOOLIHEHFIGDLKLIFDCDFHGJLNPRUVTRQOSNHISXQJNUZ[RLIFJOFCEDGNKHB;?BCGA:>EGDFIHJIKNOSVQLJLS^gpmfdeec^^\[5=;98jc[VVYXWWWYVTSTSQNR`d_ZVTXWX[]b_[YX[ajfbea\WW_ba[Z_f88:;qo7765665445668=GIDB>97=8afjgfdejlpqpknttpnpnosnghmlloljmqmoqolhfjnonlljgbZVRZ_\^\TYWN?9A?>=psytu??BCAACF?ps>?@ADGGGEfI3KX^[ZYYYZ_][XKEMPQUWY[XV[ZZZYTPPNMLMU\dllf`^\^deeir}xi`YWUU`mrpfc`\YUSUWTOMNLMSVY^^^eihhhlswyxqpwxtvwsnhjjggdWSVY^_UMDACBABBCIKDGSYYXUPIGMRRSSQRRQSSRRWcgionqyshlsrs{C~~{yxx|zhahpwyywwurqokmnaWVMJLMG@HYfjhfhv}xqtwt{~pcadejopqtummqnnrqnkfabhjiigedaaiy|~qfahsspppmkppsw{zojlpw~~z{~}{yvrqrtxwsx~}|~}zsqxzka\ULINW_Z=gXfcbcddgfb`\Y`b]^_]Y]_\\`a[W^ddd_Y[^[ZZWRPOORVY[[\dpsjgnj^XTRRVUSRQKAhKnxxumihlnotwzwmkmid_[YYWU]lz|yyz~HJHGLTTPOLHC@FNNHDFHHJIy~CD|{wuwwywwxtmkliebkxxnhhdaagntwtkdcdg358?NZWUTSPLJKOUZZTQSTQNORSXa`YRLNSUTSTVVUQLJHEB|PYYRIEFECLRQNLRVTQKIM~Djbgtxz}ystru|}~ysowqhooljgfd_Yae\XXUVVY\[\WSRMKORVWQJIHIHES=GMQTTW[[^bkpi^_d`_emdUPRSVYPGIPPKGLUKKPRUUUNE=?CK]koXSUOHGRVQQRMKOV^`][\ZWPRTSUTROMOQRQMG{xqhjoeTQRNNPMILLwnztv~{}D?;@LOW^a\PMIISegakx@AHUbj^RPRWWUPNOLF?:;?B@wmUEKQnFBBGMNPTVQOOLGDEJLKGGJNOPPRQGNTY[WRNQRPV[ZfssiZTNMJKT^c]KHMKJOTLJOORTUYYZWYUSTT\[[aed^YVSQTQOODDNSSTRRPNPNKGGHCSVHCBDomDuN|i_{KEPMFFCu}@ymuCHKE{|ycddhqw{woggdaiw}KdZXY`bWLNS=}dasGncpkiyza]dlgSGMdXXdixJYWM{fiqc[]aI<\`[css^Wbeb\]\[^\[_[_]`wtZ][W\^``nwnh\^uzhad_\Y`dacnnffnkgboCIBwnhYLZZgwKhOVTJdqRSRKEFLOZihkf\VHJZornruyZWad_]_c\XS>]TgecV\bhlcV[bsfaVHMNOVZOYge^`^SNFKUZUPQ\_QFUUXkok`^`\c>~mha_PFToi\lzvvhUOR]`ba``dfaRTht~utzDn^_^\ebayGGl^nlbXioppHFNR]{cSKBbEct|n^n^XxHv{}qlj]KMVPRMFHLSYOLKJGEJRUJMQHKSbodU@=JvpqDWTS^dmhgpsmjfe\SZb[TUXZ[VPKLPGBDArr==a^>ADJBL[EUU=Z>S]VW558<>@EEE;4V53L-87447:;::9@DAA?>CJPUUK?EWa^ULEDFDB?>=<<::>?>?=868;<8;=82/29>;326:80c1:==?CD?81/3401793`]YX`a\Z_e320354334dXSTWZ\.SGNX034hZTVXVRUWWVWX]bd`\WVVWY[^_]_^][YXYYVUY\`cgga\\]o++()''*,.//-,,*+,/,*+-,*($##'(&%%&''(()*,,*+-+('%&()+-00./00-*(&%&()++(),.../12/-++'%&&%%&'()(%&'&&&% &&())(%" p"%%""%('$%$$%$$$%%%&()'&(+,+)()*)')(&# !" !! ! !!!"##!<%#"$%()**+--++***))*,,+**(&%##%'&$""###"# $%%$""%&%&&&%%&')(''&##$%&&(*)'%#"$'('''()((('&'(''&&(''&'&%&(*&!!$')''()+,+,./134420/-,,-,+*)**++*))**)('(')*(&(++,-,/000-,-,,,--/..-,+++*('(+*)*,.00,.21/-,**,-,,,+**,,-<++-,**+-.+*+))++*))(''))*,-+--+,--.-.-,+*+++-.,++,-,,,**))(,'&&(+.0-,*')+--,,-,*('%##" !!!#&'%&''%###$&&%&(((')+*++,,*%#$" ! $'&#$&'$"3$%##$&%%%" #(%'&()'*&&)('(('()+))**,d,.+),,-/-.///120.-15430)''((*,-.--02110.-,,0201257641//-)%!!!"! "#"!#""! "! !## "#"###"#$# $'r)**+,.//./0100.*((*)''')+)'$""$&'&$$$&''%%)&#$%$$$"%&$&+-.-(%'*)%$'',-*('(&&+($$&),--,,+**)*)+.///-/1 ,"J# !# !! #&%)-,)(('%')(''&)0.*)*)'&(,.-,*+*+(*,*)-0..--.-,*,...--.,*)*,//.0//0/../1210./120121234542256655565545;4346885110,+-,,-//,-031,)%#%(*+,,+)**)&'*+-,++*++)+.-+)()*,o+'"!$%&),*'# #('# ##%% !#&%./*((&(+.62,+-,'""%'&$##!#$ !"!"$$""$&#"'''+)"")+,++/1.+*+))*)$!&)q(()*(&%$&$%" ##'$! !"$&$&()()*+*()*.)$$*-)$'*++&!  %!" #('$! " "" "$$&%$&'*,('''*16;964421//..52.-,.,+))))*)'%'.22/+*--../0.,+*,/42121.+*.//,*.266!!).000/033887779966777:6236678747979:8643699867751-*).0-0-(+)% 69?>@E"#$$##$'%??"""#&(''':*&)+--.//04332)&+-.024f422543230,,+**+/48<=:6546999:?EC;631//5;><87510.-./.+**)+/125448;:99:>ABA=<@@<==<9556466.-02560,(&IHJM',,&(02220-('+...-,,-,./.-0788<;DH>4379=@>?AC@?@>==<=<955;<;<;::9:=FFEIG?98;AA?>>>?@??AEE;7:>DIKJGHKKJEHLIEEEDCCDCCBAEHHFDBCEEB=950*(+052 83;7589:<;76559856852542368537;:<6332///,++-,.113338?@88><31/./20.-,+$;+?BA?:99<==?@BA<<=<:8767648AGKKJGB<>CHIEGHJOQQ)*)).2/+*)'&$(,+&%(**+*NHEHL('KKNJCAACCDECCECAA@=:78;BB=<<967=@?>?:30..&0/.-+*''&(-/0-*+-,)*-./573/)(+.-,)%$##"?A*12-&#$$?!&*+)(KFO030-)EBI(OJEDGKOPS,KBE(L<6:EEBB?;<=>BCDA>:@A=>=<;:994/4830.+,---+(" ! #*,..02125:=:236338>5*()*+.)$&**&$',''*,---'! "'2;>.*-)&I&-1---('*-242020/)+.-0/-*(***)'$EBDA<=?8,+-,,/,)KL((H<8DKABFEGLM'# #$"$.106>!#*115.('),++)(($;5'"1"!"%('(+,)(*($#$&('$$&)*)#'+./-,**+),0/7>=6-,+)%$(.2/$"%%$(,&&++,,+./0.0-+,,2017873/-,+-+*)#"'**++,+)*)'$$%!<+/&$%H#@44A#A%''#DAAGB0.CI56;=??:7974:EH+N3...23-&*/>71:&F82=;9CA1/6<9-'+92188?'31)D68?7125&0405==2-442011022132436GA.2435686GD84751-2535::8:=:838"&">:7-&33;FPQIGDG&E3'-+$7K9)++'#%(*0:7::4/$'2@I><>@KF008:40031/.!/0;87.225:4.12<42,#&%'-.'.85/1/)'#%),)&(02' +,+564/./*. =1/*&!30)3;;=3'$'-./--.031(,;@B<9&&6.<:2,:>=<"$*.3BC3,("-$8>AC7-:.*@&B9=?844/&)/,,(#%',0+)(&&%(..%&(#&,6<5+'=@PA%/++249539:7422.),1-)*,,-+(%&*%"$":900!"$(%-4%(,".(,&'!%(' )/.("))'(,-('(*,&"#%&'!$/)%&('%''&&&'),-+*'&''()**)*))('&''$$&),/22.*))ŀÀŀ +ǀց Ⱦø썪/܅݀þ̀ހʾö¾ǮηĴǨf퇖݄ހƿķ岚¼ڀŪŷýʾ􃐝̩ǿļŮǾ̺̿ºȿ˿ǹƾ슖ǽɂـ̧ӉƪŸ煈ƽį܂ö䆏ıɳᾱկɻ³ǼŬ̽ǽú½탋րͰ­Ʊ𻥠κļԶ³ȹ¿懓΀Ⱦּ٩̲Ⱦẕ̥́񅗪ݶ¸b`0`^\[\_dfhfa`a`a`_^]_cc^][WSRSQQRTUTUWY[[[\^^`b3c^]^`13421]XXY[\\\YW\ceeb\XWY]^YWXXYZ[\_aa`_ZTQQOOSTUY]ZVSRTUUSQQMMPPPNMLMLMLIIvJKJHGEDC@?>?@ABFLOMKIKLLOQMLKHGGHIIIKLKLSZ\WPPTVUXaaZQKJIIIHHIHGGFFFGIJKMPRPE@{vmiq?IPQONRTVTRSVWVTSSQOONMMMLKKLMOPMKIHILNRTQOMKORSTSRPNML"KIHJKMMJJLKIGFGHHHJLKJLNNNOQRSTRRRQdRUZ^```]][VUXXVWWVZab]XYYXXVVXY[ZZ]]_`abcda`^^^\YZ[[ZYXVWWUTUWYWVXXVWY[\_b35898655feebdecdhhdceecb__a1ccbb_ZWWVVWZ[Z\\[\[Z[\ZYY[Z\\\ZY[\]`abefc`^[\_c2ca_][ZZ]^`bda\[YURZ_dhiheccbd34c\YWSV][ZZ[]_]Z[\___^\XVUSPQRQRTVXZ[\][YVSSU^gjgaZTQUXVSPNPSUUSRTPLOSWURPPRRSTUVVVXZ[YWVXX[`]^_ZYYXGWPNTUOMOPRQNRVSOMNOOOMMNNOQPMMQZ32-XZ.[Y[//00\ZWSUX]_^`a``^^`cdf66532342~3dbbcf4653fda`acdd^VX[\Z[]^bdd]XY]`\Y\`2333a`3642cdcbbcc`^__[WRLKIGEEGHHEDEFIKIGFILMI@AJMMLJKKJJKMTUTSRRSVVVXZYWWXZ[\\YVUUSRQONVMKJHJLMNNOQPMLKMLJIHILORF1^=[b^`\YTSX[VSRQSTY\_b]ZZXUTSQPRVVUQPOPQQUTQVXY\\\]01236410/0244311244233323456889;<;98889lVIEHJIBBB@@BBEFDEMRYWMA87969?DC?;=ADEGB<:=><741`Z5?BDFGHFJOONOURMQTQPQPRVVRSPMONQUWTSSRSUVUUPPVWWT~RSYZYXYYWVTTTUTSTTTRQTZ^_]^][]^]\\^b`^^]^__]][[]_`_]\agihffghfchmkhgh56ijkkjk77666jijig58:8ifeaae4icZVRRRUXYWPKGIKLOPOLMPRRTXYXUPQRRUUQQQMNSUTTVWUQQX_ecZTQPTZ`ccb^[\_11^URW^22234_\_WSQPOSW\]XY[\d22dg]HA@CHHCADFFHHFGC?<=@AEHFEFHGFINMNRPNQSRRPRUTPNOPOLMQMJOOOMKGEHKIHDFKGG=;@GMJIEDDGIJOQT[]`_RGJOLEDHOTOMRUUUNHHFHGC@C>DMKHB=?@DD@>?FIJJEBCEKMMNLKMKLMNOQW]g445jh`^4=;67mi_YWWVVWWWTSTUUSR,SUW[^\ZZ\\[YWXYXWVVVX_ddd^\afhh`^`gk77l5669986443e4:CHIECAC?64kia`gnq:tp9;;rnjmnln;9jijnrqkhkigim89melnmkm8peYRPXc``\SQOH?66;;>::=rktDF?|{BEHJikuzyu@EHGv>SDaEYYVWXX]^_c_VPQV\`cb]ZVTUWTQIHHISac`cddcb]Y[_cccbeigb^ZUNS^egb^\[YUSUQNMLKMPTVY\[]ikfhhiovzzuvyrvrkjkf]]\OBFQTUQJIE@~DIGBADFHHEFNUUROLHCDGHLNLJKMUXTVY]^fkgafnqtxywvwzyvwvv}}yy{{x~|ywvocahrsmjjkong_abQ>;?BCCBHT[^cidepspihjntzwogejqoloroloomlklmnjbaiiecb``aadkjlqpmjjjmtvvwyxsrrtsmjnt}|usuupmmtzzwvywussqqrv|}||}zxrntvmefhjhfdcaa^W[mrkfge_\\`daXUWWZ^ZXYNGYdfb__[XUMKJGILMORUIOUTYZW[`^YX]\XXXTVWTUVZbcXYfnlggiilpv{vsmc`gkh_YTNFN_lw~}vsxwrzHIOQMHGHGEEFGxplmqw|vrrpnjotttrniknifc^WT_koligceilmr{zofm@EFOamiea^ZRLIIHO\aZSRPSVQJPZ^TLIHKOPOOTWVSPLHFDDGKMKGD@AFGEFKNNLKMT^_UJD~}~ya`JXPxsrx~{utxxx|~}zztnUvUpqrk`Z[_^XV^]VTRX\]^ZXSPR,275-RNLJHFN;HNTVWY[]`hg]Y]jibad[PNSY\\WQNMLKIIOSPRUZVPIA?CEHTg{q]YVKLTVSROGHQY_^WVWWQLTSQRPLFFLTUNI}vleinbROSLIKJJIIJH|Jxyxqw~zyJRPV35^QLHDIPSWev@?HQZ_VPOSUSPMNRQLA::@@:f[RQRPg@@BHLNQUUNJKMJGIKKGFFHKKKFGOKQU\b\QJMPMR]UZpyj\TPQONUZYWRPSPLOUTKKMQTQPRUSWZTWUYVV]_^\]WPPONMG:;CNTWVQMMNKLKJKEEMONHGJFHrFLtpsJKTNKIECCCD}x}CJQRI}rrolpq`d|x{}kjaXg|INw_Z^ac`YTLFDUbs|vtvm^_rx\PPfx\M^is~vnj|NvrxlaYKDVdVbx|qeaarlYPT_bcfhbc]Xkpd^RU^_cmmbejp~thd]]bgc\YTQjl`]cjnu@BEErljXO[jYcLOKlcYIT^Q[taOLKMMDGT]`]SSYQGL`i]mxkndYVScinf]\WNEQVMHJKTdaYXbk|kWf_UUSOURSURYX\^RHUVMUfZUaa]XSZnrhWVZ_fsFOHnYNVl=m^\bhkf]ajttkhccffeb^Yamjmppg`\\bfqviiji[QPW[[ZUaqRN_RFTaTHQ^UO[a`d^N_hcb_dpqwgTRUTRQJINLLLROJCBJOZaZRLMVUPVnotsVy^j;ERWNS]diijquiQGLQPQVZ`fc_]VMGJPNHHNNAji6ALGBHEo\dcZ_8eB^CMB998AOTRURUY[.-/1225566:BB??=AHMSZYRJQ\_WMDBDCA???=<=>>?=;73337;:=?=8226;@958<>;66889;?A>;::7118:&72a_VUXXZ[^b1a`24334d[QRW\/-YYXZZ088`TQ(OOQQRRU\ceb][ZVY[ZZ[\^^][XTSTX[ZZ`ehb]]] **)'&&),-.-+&,++**,,***(%$$"""#$$%&'('''((*+*''((d)''(*+,-+)+.//-*'(+.-*)***+.//0110.*''%$&&')+*(&&())(''%%'((&&%%$#$###%%$$"!!  !!$&%%$$$#$%%$$""#"""&*-*$$'(&&,-($""!"'!! !"#%&'*+*% ==;;A#%''&%())('(**)'&%%$B#"#$$&'%$##"""$%&()('&%%')*)(&%$$$%%$$$%&()'&&&%##$%%$&'&%&''%&'(()'&t(+./0/,++)()('()'())&%%&'(((+,.,++-/0234421//10-,,,+++*)(''())()*)()*+-,,,-.-.../1/,-00/.-,---/11.-+*))**+,,*&+*)*+*)+.-..,)*+*+.../0/-+((*,,***+,,*,+,..,*+)'',,.000/-O,)+*%'+*))+,,+*++,,-,+)))'&&&%%&''((*,-+)'''+121.+)()+*(&$%&'(&%&$!#%('%$$%%%& ')*)'&'(*,**+($"%&""#%'&$&)&$%$#Y$$%#"$)%&(&(('%$%'))()***)*,..0//..00/.--./0-()++)*+*-/0-)),-+)+.G.-012223310120-)&&$#! """!! !##! "$$!!$$###$$##%)))(''(**+,--,,,-+)*)(&&'&&&%$#"!$%K&('%$#%%%$#""$&!,+.,-,*(%(+)))()*-///,*+*)''&&(++*'&&'()+*'*+*,,+, +2%W!$$! ""!"!"0,!##$$(+)'(+)&)*((***-,++)'((*,,)*+*++,,+((++*(')-..-,-.--,-,,,+,.//./0/ ../2210//1/01"3442158986667637975455678774(3210,)+..,+*+,,-.,)%#%()*++))*+*+./.,((**++()*((*+*)**)$!#&)*'%$#%()*(&%$#%)$#&),+.,)(((+.23/-*),)+) !$%"!!"#$$#%"  !"#%$##%#"$('')('))())*,,)((**('*('***)'&%&(''$$'$#"&##""#$&(+*+/012+%&*& !$&(%$'('(#  "(&$!!" $%%%" "&'&'&&(&')*))-16541/661.//-,,,+*)*++)))*+.0.--/.,,+,-,+).012.,.011.-.2431!!-.-/47687864665643468864545567267646;4-)(-40.+%$$  !<8=&&!@>"#%)D79=A@ABA>>E@;>;7552--.( $+-.-**'%JLN(+*&%')**'(-0/.,+)&&()+,*((*/1//1347:637<<<@@===>==?>>BEDB@@@?=@ECBA@@=748>@:777972,,+##&(*-+,388668<>ADD@<759??<=>=;>@=;;;==<77;;76546889==?@?<;:;=@A@ABB@@@B?;9?CFFEDDFFDAA>=BB;6899764234404@B<9:85347:82/1235214-'3:;8540/-*)'""$')--!7(+*-./25423431/0+,.--,/69107<:78::;:73-P(.7>CGFA>COOG>=DIM(OPQNO),.,)())PJHL(***PJHIGCB@@DF@<>?@=?BBCB@=?@>=<80/8?A?>;9<>=<>EC937!#"'2:87651*&$$$'040+**,/,')04/)'%&)*)(+./,)&#"""#'**'$ ##"#'**)(MM,1880'"BCCBEDAAB>31(2,OGB??DEDDE@;:>@BDFDBB?=,6+>??;51122.+01,*&%&%$""&$*0110134981.2;;6450(',./.+)'%%),*,/3/*% "%'-9GA2..'GK).0,,*%$*/32.-..*&++*,,)%$&-.'%IIEB=8:>6++0,*+**)()(@L)PEECKFAFJMD=#" $"$'1:69=11A<=@DE672.8FB)-?1/1474/.*%".3;@>=?>43?LA0*+8A0)9>AE>97ET,N@?B;50( )5,2?C>4./96,),4779:552/=L<74,/568<;467:DB873469731+(9<42788:!"#A;98,)2711-4684//.(!,2+&&%+54/,15B8+50()'$)&(*(,,./(")*%)2+*20/-*,783)(,.18$)"1%#15+,0340+.277331145432.2966862.,-029;3575,').000-5@*'2)!,6-%,4,&.334/$1611149:<@ID4)*-,+*%%'&''*(&#"(,23.(%'++).=;>@.?29 %,.')/37669<4% %(((+.153/.+'#&+)$$*+!56#)%#(%7,22+./, $! "!""" $(,+% $,/*"**'&(()()+)'-("#%'&%$$$,%$%%%$$%$$$%),,+()('))((''())('&%$&(((,01.+*)ŀ ǀ~ ƀ逃ց ¾cû􉤱ńkۀ􀆊ֽǗ߀ÿфЀɽջ爚Ȁžü̹ĽǾ⾢ļƺѼĮ恣ƺƾȵ̸нʾŻø؀ɼǼźſÀø¸㕚ั±̹ó߀յ쇍ý潪󁏒ʻʾĴɭּϥ릙ƸȽսƿǻDZɵƹ⃉öçǶųçȷŷàˣʻƶ逆μƵηĀɽĹ˵ɺũჀ¼&\^`a^]``_^__]]\Z[^246654b^\XUSRSSOMOPQSSTY^001/U[a__02243`\Z[\_a_^]^`cec_]`a\ZYWUVZ\\]^a``_][[XUTONONMNORVWVSSPMMORRONMNMMNNNPSTTRPOMKJGFFGFEGGCILMLJIHIJNNHEEEDEEFGFCDMXUPRZ_\^a`[TOMKJJHGGGFEDDDFILMORTVTMEB@=o;FJ +MPQQQRUVTQOxNNOONLMNOPOOLIHGFFGJLNPRQPOMMSWXTPKIIHGHIIJJKJIJJJIHFFGIJKMPONNPRPOOQSVXVTTSSUVWY[^`deb][Y[\ZXXWUVZ`ffa\[[\[[\][YZ\^aedb_`fd\ZZYZXVUVXXXYYYXZ]]]^^_a24765e`_][\]_a`][]``_bdb_^\\]^]ZVSSVWXY\^]\\\^^ZZ[YUUSJGNWWYZVUY]_`ZPS\a`\YY[]_d45e\WX\^]Z[^`][XY[acehgggeccbGdc\UPA4A@AA?@CED@Q,,Wpcea^UTXWQPTX^]YZ\]XVY[Z[]WRSRRNLKMNPRX[[ZZ^/02458:55862230/../12310123343321346788899:@CFHGEB@<;=;eZRX6@FPRLDBHJCFNRRPPTTTY]VONRSSTSUZXTRRUTQRWYTMNUXZWSRZ\ZZYXWUTTSRQRSUSTWZ_cda^_`^6]]^]]_^`aaa`^[YXY\`ba_^aeghfefhjjhkiijjiedhknom76ghii5786cbcc11699k]TRSQMPV[VKDKLMQSPQSTUVX\\ZWUSNMPTTOJLOMMRTRQQSWWWX]`a`]^[Z[_c^[[[WV[a^\[\^_^\^i6b_]ZWTSUYYZ[\[VX^^[_g^NDACEGHHGGHIIVHD?=;<@BBADINMJIIJFHMQSURQQPPQOKHJLJFOYVTRNKKJHCBDGC:@GGFBADHJKJDEFFHMPPU\_cdc``]WUZYVUSV[YWSRNJIEFDFGEHFDB@AB@<>CHKMIDCHLIGHFGKGHNNLKMP]gk887545<;98nk]VYWUTWUSQMNRSRQPPPQTUX[cb\\XSRY^VTTST[ac\Z_cgke`]^dhgfhk66888::65heeg58=DHEBFHB=:ofkqt;;;:;==;;9::s9@Bvorrprrnjilmn9=>phjmidjme\QLM\eh`VNOLC8o>ELJHIBwqEJKLDGMOPNEAz{?si:PYVPS\_a^]WQRRQU]b^YYYZY[ZXVPJT[\VUYZ]ikfc``^ZWUUW[[X[^bfdc`YUUX\][XUTTWWTOJJOONPRTTUWY^dbamsssrtrv{nomoqle]XM<GMOPQV_kn^SU_ee_[\TRUYYWVUPLJLMJLTUPSVSI|>|FLOaqn]TOGRXXPJHFFOXbaXPPXZTRSQPQLGFGS^QHGwle^gnb]e\LHKMLJotSP~rCzor|SWOMX4^K:=7>AOVWVQMMNNNMIGGFDGPUTTMHFD{w}JxGPRMOQNFDD{HMY^QwlqvfU\wx~}xzunfjuy{|rc\dgb^`WKGO]aiompkZNapxq_O[qVWcvTKhnipmde__`YVamo_Y^\[\RMMVeebiooc_kqg\ZUQj{gYfx||k\UMTkshYQXaaY]`^rDE>>DAAzniaZU_eh{aP\f\TPKeqea__PJLHCK[TMLPaXMQ\heq{sv{ePJUog\PT\VZVPIEIIJIMQaikebaTcbc]`ZUUPNXXT[XPVc_DKlaKUgYOU``]`[RXiqrxAD{okebhjd_fjd_\bwFNCg]kshbifY]c`]_fhha^nhl{}l[]_XJKPNPKHI2fQepp]@:FQ]mlbX[dXROS\XSPa{ngpma\XRWPDTULMW^VLNSNJJP[ZOUSDInw~mn_OJKSSRQQY\bcjstYi]WSKDCFRY]`daWKOWROORSNCCD=@MKH<<=:ilg=DE.5XSB<<|=;:84312459=>:74358::978<=:7678???=768875gea]ZVUW[adbbc333fc^RMQY0\\.-[ZXa4f\UTTSPLLJHJNRW\b44f_\\\]\Z]^[TSTSRUZWX\_`^[\\w()++((*+**++*))'(('').-+(%$$%$"""##$$$&(#$'&'+*)+,.//.,--/0/,,//-++*(*,..-/0100-+,,))&$$#"#%'*-,*)'$$$&(&A%$$$%'())'&&$##" !! !"#$%&$" #%%#"""!!!""!#))%$(++*+*'$"""##"  "$&'())+*'"<#%$$$%&'(('%$ %%##$%'&$##"#%%&'&&*,.*'$#$##$$$%& '&%$$#"###%')(\)(&&&)*++*)(()**))*+---+*+++('(')))*+*))+,,,--/.,,-.0321//0/.21,+**+***)()())(((**)*,+++*)),,+*j,--,**,,,-.,++,,---*'''()***+*)**,-))*)'&(&&),+,*'(,/.,*&(,-*(%&'(*-.)(*++*()+,+)(()+,.00121//..,)'%',+)*+***)(((&$$$%%#"%'&$#$&'()+,**+--,+**)*)('$$&'%$&&%%&%&''(())(((''(*(())*-)%%%))&%%&((''&#!!##$&)(%%')*++,+(&$&()*R)'%&(*+)*,+,-../...11*(,.-**-../22.*))),./00102;4321//.+(%$##  #%$#$%&&%&()(('(((*+)*+*)**'&**)t**'#$'''&%$#$$##""#$%$""#! !""#$+5-0.-'(+,('(*..+,-,)(*+)*+)'(''%$$%&()-..-+,50*"!$  "! !!""! 2,(,"))%!!%& "'*(()+,,-0-'%*,++*+-,*((++)*./*%',,,*()-.--..-++,,**+,,,./0=1240/021//0001.332110///013554347887778;9787666543578975577=,***.,)*,+(),0.'"&)*,-++,---.01/.-+'')++($%'((*,*))*+*('('((&(*-*''&%%(*+,,-./0.-20//.,+,-//000.**-+))/,$ "#$$$##$%%$# "$" "%((&&%$##'(())'()**('%%''#*50-+)''('$##&%"&&$!!"%%%$"#$$%')(+/1344341-*,*(((''#$((&$#  !##%#""  "%&&$!"%&%###%&$%(*)*)+146780,/.,++,,+((+,+*))()++,.43/0.*%'-*)**(-02.-/02410./2422343102 30478T9769768:754675844632783.(&&-10*%!#$ 9$)'%&"<;'*,,%&*+,+&!:>!<3.0.*@D*024220.057634521,(.22/0314;<987753112355356:<9752//0220/../0/.*''+++-./../15745=<=;=FA9:7995/*($)1.,-+*''())),.-,-//-**-//020,'&#!#&(*+,/32//0/2563257558::;<=<=?=>ABE#D@@D&%##EBBE@319?<;?A<876410.-+##+,,*((&&%&*120/5<@CCAA>4,.7?FCA=9;><9536::=?97676430.5>?<<;::;= =>A@>>=>?>*@CBA??ADDABEGCCB@BA?@ACDDEFFEFFGGEEFB98:987@E@>BB@??>92-,,.38EMJBAIOKHIJLOMJKNNOR,.*NR-+SVXSOHEFB@@;338;=>@BA=99:;:62/38:958><8568547>EFEEFA>$.673..-+,+'$&)074/-,,+,031--02.,,*(+36.(%$">@$&'(%!@ $-1+%%**9+,,,15895.'">E$%HG$%@/>164.MEBCFFEC?;=><>=>>;=>;::7/0--0,''$"! +&+---06<=2+-367300+)+/-+**(&%&(&'/.)-.+$:;=C%*-7@?3,)B$,00+&%$$).22.('/2,++**+($%&.4*$%KHC>95:>87=6,)+,,*PM:A1,LJHA(I@BIJG/,% "$!)37'*//*'&()(%$&''%"-###%*,+%!#&%$&((&%%%&&$A '-/.37/&#'+(/968HM7.+*00')-()0.)*)'*+('+-,*)'')(.-+-/.-04147/(((%$)-,,*''()**'%$$#&-.--)&IF%$?FHE&./*,.,'F$$AF*,36.LGA9;>6-/<>BDC?B@847;ADAED>3.363351'%)12699>?3*4B:/+-33/250<#""!!?873.-433?MNI4&].5.*)%4;5400)&(&#(2,*)+72*,5<6=F>>A7+(-<6.%(/,.-*&$'&%#&)178422)222.0*&('&-.),-'*41 $80!(4.(+1-(,499<"$<41.-251-020-*.;%*!2/7<6276--0..1522/.847AA5+.0+#&+))%%(60;>:/ '-2;<5..2*&&*/,))2CB=9:61/-(+&!+,&&-0,').(&&*1/(-,"%=CoJN@A6+&'-+)')/12/4:;4-*($""#*.0142,%).+((+.,%$$",)' 672#+' )#%*-("&**&!1,-,)(&'(*,,)((,+*#!"&&%'&%*0+'(&##! "$&(+/,+*)))())(%&'&$&(''),-+))(ˀр ށׁ Ŀ½\ڄLӴ𛩕Ǜπ Ĺӄ؀ξĿվаʾǿ؀ؼļĿ׿²ž¼ĹѸȬ􀏓ôÒ摤ųüýÿʰʺǾþđȄʀ󉥶óÿǿƻýĀĿμߵ숤됕Հ书Ľϴɽ˲վųė˸ŜĭӲƾوڀ•ί¶Ĺӷ̷¹ÿĵ灐˾έȷɗóмԾ˽ҺøŴڀҸ̻Ƕ붇ꫯa􇈄Z]`a`^`3fbb`][ZYY[^^^`245665431_[XXYYXUVXXTOPX\]12Z.22111246762_^12c`[XWX\`a`^\\\ZYXXYYZ[\^acdca__]ZWUROMKKJMQRSSPOOORSPONNONNNQ%QQPPNPOMMLHECCDDEC@@BFHHFCCEGFEEEDEFHI:KOPNOQWZZZXUSQONONKIGFFDBBCEHLNPONQRRPNPLEBDCDFHKNPPPQQPPPRQRRTTQPPRTPMJHGHHGHIKMKJJLLLQUUVPLJHGGIJIHJKKJIJKKJIGFGHJKMOOQRRUURQRTWZ^][[YZ[YTQPPRTVWWWVUVVXYYZ\_cb\Z[[ZZ\[\\[[\]]__\ZZ[]\\ZY-[[[]^_`^]^]\ZWVVWXXXZ[ZZYYZZ[[Z[]]][[[YYY[YWXZJY[[[\ZYYYXXWWXXWYZ]^]]\]_[XXWXYWPBCTY[[WM?irLQC>==>?DMPOMJIKMLJLOOPPPNNPRQRSPQSNGGMQSTTRQSROKMPRVZXUQSXVROLJIGHGGEACEFEGEFI>4PibXX^VJHGELQU^b^]]ZXXVVVY[SNMLLLOQPQUVWYZ^`]Z/0148;:8885331]WXZ...0212455446788766679;<>>==@AADPOFHKJGJID>7:?=<@FC@BCA=@EEEDA;99h[_i9<@GKJIE>@BHMPNNOQTVWXWRMRVWZXUXWUSRVUSQSYVMLSY[YWVY[XXXYYWUUVTSSUVUVZ]behfca``]\`a`\MRjcbcb^ZXUTXZ[]_ceeccaadhi\[p;skhefim7ll77ln89::8886e^\^`\\_g:n]SPNMKJORPKKNMPTRQSRRTVVTUUUSQPQSROLLN +ONOSSRRRSUVWY]^_ZXUVVUW[ZXYWTSTTVXY\[\ab`aa^ZZYYXYZ[ZURPKHHQ`fZOKIJKKJIIIHFGC>=:=BB@CGLRUTNGCEHMSUSPORTPNKHHII@2F\VROIHKID=?CJJCBDMOQTSNKIFEEDEFHLMQUY]acdcbdc`\Z[YV[]\^`]ZZSHQVQFA=9;?ACC@<@DB?AEJIDEGEDBCCEFDFFGNRTUY]`gf5:;7:=<;9ncZZYUUVSRQNLOPQPOPOOPRRSX]\[ZWQT]ZVWWVX[]]__]_cb_^^_abddei5679::74fgj6898:?AACDC@=;9;<>??@@?==>@@BB@A@?>>@=<;:rpq899:999pnnleba\VMHGP]fb`ZVS@SZrGROC?CAAQTRTRQ[holg[MKSVMFOQVYVPSVTV]`^ZXWVSRVYYWTRSSWZ_da__a]YZ]_ccca^\[TNPXZWTPNNT[ZUTWYVVXYWUTRPUYYTNMNNOPQRTVUUZac`gt}B}rns@tfYfomg`VLJPTVXUOKMGEG3IJKMOSVSPSZ]]]_d_VUSQPPSRPRSVVUQNMOXdlt{upmkjijotwtnt|AB}?DIJIHFB?>>>?AAACEEDCEFDwqqj`SQY]bdhqx|~{xwvvpgbhyvknponnmmmlmfcdiolgccbfmkb]afmsrnloorvttrprx{zywx{{wvsutrqrsutuurrtuvzxtstuumdfiknqtwx|~{~}xvsldbca_bddc`]_edagmiiOhM[TOU\\VSQNKJPUUQPJ;k:BED@FXa[TUWYZ^`\Z`hhnvqgcdilonqwz|qpsompqje`ZTNLRV\glnsurrxunu~tvxuxwvqf_YTRT[ekjhe`]ZWVWWRLJNSVWY_ih`]]]Z]emrwyutuDFJHEGHHHLMBo>Sa`ZTPMLKOTUURUY]a]WXcgfbWPJGEDDECCFHHJPX]TJLSWTQRQRYbhf_XTOIB}}{}BB@}~ywsoljihjnmlllpoib``[UYXVXUTOLMQTSUU,..21[[O.Z<@H`r=CDJU\^ZVUWXYYXZYTPRTWYXUSNHINPSTNTUME>CIwiPTUXXWTVQQX[ZTKGJMPU[^ZUT_kYPYTPOKGJOX]SHHH|tliif`Y][MKJJKKHvOQDDxvzquBLY_1M\YQ>05;CFDEJP[g>QX^]USSUVUNMPOOMGA<71/WFKQJKP^BHGKNQTQJFGHIIJLLIJLJIFCACKRU]^UJGJOXgu~zdUOSWQNSRMWgaUSWVWXTOQUVVRSRROWTPSSUUV\\^aYPMNKH=:BEP[[WQLJLPQNKKOMGCHTXTKCCEF{ID~t{LV[POUXO{}FKUa`NylnpnXKo|~vd_`psjwmhlqmd_aee^XVaedheaa\_QSfmic^dto^POT`jidOO]aad^_hm]RR]C>Q[cTNPLOp=TWT\ea_qjNACXji_Tfvu|bIIRYllbaafdd\XiEJA|@JKEA<;BHNTUPHJLMMJDBBA?>>===?CA>><7422556:A>8994248;:89=<:998;??>?@=88:85444eb_^ZVTZaccba]^1a]VSSQRX32/ZZ]0132`]][[ZTQOMNNOSWX]_cea^^ba\VRQQSUUUTWYY\`_ZUWY(*,,+(+-,,,*)('&'(((),*'&&&''$!!%&&!?,+/-+)((+/0/-+,-,+**,-./..01210..-,+)(&$###%''(('&''(('$&%%%'(('%$$$###!  !!!"#"  ! !"L!"#$$##$&((('&%$%%%$#"!  "%'(*)''&%$"#" "#$&'&&%%%$$%%$%&&%&&%%%'('$#-""$%$"#%%&)+**'%%$#"#$$$%%''&&&%%$#"##$%'(''()'((),..,,++,,)&&&'()*)((())*++,,)()++*,,--,,---..-,+***+,,,-./...,*)('((()*+*) +++,,,++*++);()*+,*)()))()))()*,,,-,--+))'(*+("$,-,-,' 8<'*"),'(*('&).,/,)'(*,,,+))*))++-02211.,)'#$))()*+,-,+*)(6)*++)''&&'&%%%$#"$%%''&%##$&&&()''('#!! "$&%$&'%##$%&'('(p'%$'&'(&$$$" "%%&%%$###"$&%&&&$(+)(&%'(()('''$"$&&&%%$$)(%**())*-0,+/,,,,-./../,,,+*+,.251-,-210033/./.-,+)'$!!"""  %'%$""#$$""$$%''%%'()))&&('#$'*+**()*)&##%&(+*(&&)'$#"!! !!"!!""!"!$&*81)+/*##"!%(*-/,--+*)-())+,($%$##%'''*+,,,./,**(()1$ !"$$ 5/28 $%%%""%&('())+-,++('++,-+*,,+)(**))*.,'&)-/,++-.,,-.--+,-,+,-.-/1355543111//111/&-822330//,,011245665543489.0>:65446877891-,+,)((+2-*)((('(**('**,-,++**+--+,,,+**+++)''()((++)**,,,+*)(()*+)))**)+-,*+,++,-../10/110120././//0/.+*)&$%(03,%##$%%%$$%#"%#  #" "$'*++(# #$&)*(''),*('$$%&"$3/+)%$'&$!#(*%""(((++'%##$$#$$%((+-/035643420-,+(%(*(()&$%! #!!""!!$# #%$""$$#"""#%#$$$(+-.0014394///,++***)()*+*)*)()***-0/.-,S)*/-*+,+,-./00./210/./002102223 !!  !! 8887666211-+'%#',/*(&&&(0<'.*#!%#$.//1.,1:?=:2))/2+(-,.1.+,...24433320/13310/00136864464235678875550+.3421.+*/33//110/21/..--0312/+*++,---./..26648@F%C;9<"D;3,141-*&$%,011/,*+('*++,-.0351..120147400.-,,.-,-.00/,*)*.59>A=:87:>@>:9:;>B##FEDC@!$&$! !  ""!!""!@BB?;50/,'! %&*.4<@CC@===?>956AHF@9;=<;<<;<;:778;?<98:98;:4159><ABAAB@@ABCEC?=?@@:78;<9668657998645876;>;<).)1*'+0-('%#""$$#"$#1 +1.,/11/1100598>=@CEGE>?A??BB=;963/-125;>?AA?@EKF?<@GIHFEFGIIJLMNNNOQPQTQGBFHGIIID>:51./5=><::86434430++.1225;A=865326:=>@A><=B#$''$%&'')*$8+430-+))(*-/.+,/131,,37870*'$#"#$##%'&'+03.((-21/#4<@<4.*&";;:989<;;:961,)*++),*&&"    *8 &%(0440--..//.0.*()+-/.,,(%&*+,-)-0)""%;3E+.021.-/++/10-&$&)*,/1.+,3:5242*)+*++)OLD..%&MEAIFAB&L-51#%"  %+2),0/*('())$$'''&#)!%#%'(+*%#%%%&'()&&'&&$#"#)--23-&$&+19BGECLK4*(+.)&++&,73+*,+-.+((*,+**))(,*)+,.-.3344/)'(&$ (//-*&&'*+)''*)$"&-0-'#"$&E@BI)%D>CJ)14,,03-AE'HK+2<:,GA89<=/%9H@A=312:J;7FKEB=9<=9524662/.474553534*,8;9515AI>3+*-4::4&(3767225FK:/()0 ).3*%)'*8./+0753@997--/4530)**,,),*$#,0)" !$(+,.20*),('%%'&#(-&$('&"%!530.& (#()%!""!\,++,*('),+*)(&&+)&$#!"$%&),+,,,+(%$# %&&)*-.,+*,,)&$$$&''&%'((*--*&'(Ԁۀ耇߁  ºŽWօԀʿȴ̼Ӿ¾¼ù÷´ӺľʀĦܒĹ¿Ƽȳ³оĽ๱ؾ҅W¾̺àǼˀŹƾüýՀóƺͽ¸ü؁̼Հ¿ļƳڀ߁顲񀀈˸ڻؽǽɺ÷느̡ijЁֽηۭɷǮŝϵ팰˼끈ʹĻ⮧ɱijʯˢ˶ϸŻɻеڅ˾ĬȼĦԺٿŴ˾ľ&虥僊[Z[]]]`aa```_]\YY]a3c`2444544532a\\_`]\ZXVVTRTV_565677765346556311123c`_cdc`_`^][[YVUVY[\]\]_bedba`\YYZYVSONNMLMOPQQRTSONLLKJKMPRSPMMNMJGFGEEGGFDB@@BBBCDDFHGGFHLNNMMOOORTTSQPRTTUVSPNNLHGECBABEHKNPMJJIJKLNKIGECEFHKOQRPNNPSTUUSRSRPNLKIIH EB@@AEIJKKLMMLNQOJIJKKKLMLKJKLMLKJMPQQQNNOQTVURQOQSTUUUVWVUTSTTSTUVTRRTWYYZXUXZ\]WTTWVVXXY[ZYZYXXXUTWXYYY\^^] `bbb`\[YYYXWXYZZYZ\[YYZ[\[Z\WSZ^\ZYYZYXYYWWYZ[[\\\^aba_^\\\^]]__a^[[[Y\adbULPNIFEJK=djuDQX[UNT]__]]\^bfjidca`abaa_YVUVWYVUW[]`cc`\[SGRj8gZUV]X[]`_]]\[ZYY[[\]]\^\WUTVY\\[YUSSVXTOMLLKLMOOKJJHGINPIHJKPSRRQRSSVYZZ[\\[\[ZXVZ\]\XVUTSQNKR\ZY[}YXXVUTRSVVVXXUU[]XW/10]//0/.XSOQSRPMPTTQQSTQRZ_ehddb`dg5764dbeea`c32cc`WRU[``^\YVWXY[ZYZZ^_`_[X\aejnmc^^adcbcg44335643dee58534 3_\ZZ\^__`^[ZYQPSSQRSONQKBCHHHIMRUSOMMNOOOQRQSPF>FMPRSPLJMQPOQSMD;108>FKMQNKLPQKG;8=>ABDDFNTW\]VUWVUSQTTRJCFU^]YUTWWUOLMMLJJKPUX[\[YYXX^1^]^/ 14433321/VT^/263230.0497434578999877878;>?=mWJHHIIKKGCEGJJIC=;7AA=<>::88;><98;@GG??HOOPNQTQQVWRTTW_XQSTSV[ZVWXVUUSRTTOMSYZYYZZeXWY[ZYYWXXUUVYWVY^dfhiifa^]]^acf`Z`a_`^[\_\VVYWY`eda`^__`cbTMeE?kgijil66ll668<><;:9oib][YVTTVae[RNLLNL-MONMMQRQRRPQTVSRSRSRPRQPNOPQQRPPRSTTTSTTSSTTTUVTTUVXYXXYWSOMOSTVZ]][Z^cc`^\\[WWY[[YRIB?HR\a`[VRMJIJLPOHDC?@BBDC@ADGMPSWL?BHJMSUWTSTROQJEHJJEEKPOONKLKGDBEFJKE86FIKOMKIGIJGEGKMNNQTWZajbNLY\\[^a\W^gfhh^\a\SZaXJGB[S7:<>;>=:99;=>?>>>?>>@?@CCCBBDB@=;:879:999:tqqoh`[RNQVWY`ge^Z^[L>CEKPQUSWWRTROMPOUdkgaWQSW\XLGCGLPNLNSXZ]`_]^[XTRUXYYVWYY[ajrsmfbaekmjc^]]^`ZRKLNNQRNCCILLMQVWVYZYVWVTUWRNKJNPSRONQQQSX]`bepy|~q`fu{vi`]Wbd_RCHRVW[XPLKJIKKLMLMPONPSY\XWX`feaa^XXWVTPRQKMNRTX\]__^dglttqqrqmhimnuxpoos{zstspzCDGORNC?@ACB@FKJIGGHGECDEFC@?re^ZUWirsw}}{{ukitzvqouww{skgjmqrpqywnookjpqoqrvroqvvrnmpu{V|xrotttsplnldfoturqrqqry~}ullppi`\_cekyyllsw{~wpqopuxztplfc_Z\cdbisqp{i[eaQNZbWJLNPJHIEFHM=CAK0=<7@X`[VWZYSS^cefkqulhkkklnmortrolmnd[UWYXWURTSR]`^cnutpqyzstxz~~~IIwpmooiebdgjghic]TLKJKOUZZYXXWUSQOKIHGHMNJHIOUW_ghaZ]cgkmib]]evEFGJK@jrQff]ULGJNQNHMPONLR\][_a]YTLGGIIFBDEEHQ]e^O/EPUZ]^]^^`hfba[UURNIw|{{xux}{x}{twzsihkliefeghgbbbglc[ZUV``a_ZWUTSQQTYXNJ,00V11<58#O?FUep<48AGKFDHJThCV^b`VQPQRRMJHIOPLEFE:1/SK@;GPgGNNLLQSPLKKJIIKNMKPNGECDEIJNQPMIDP[\_l~pigZPNNRRQQNPZdfd\_`ZWPMRUVTSWXYX\WRSSWURV[`_ZSQPLH@AHMU__\UMIJOPIFGLMG}vCMMH?@HHF~D|yyzGLLEGOSSp~QW\_K~wuqonPM|tlrdX[kErw}txt]^grna\\QVdc\XVWSPTZZRTpwpn]JJQ[ao|XVce^Z\`enmihYH[fUW_[PTVRI>JPPV^Y]\s}|mOCFS[XUamn^W\MqJ_gbulecehf\]_kEBwkl>Czmhc]SP^^tHlgc[VW]ZPMMY|ZRZWOLEGCHWMKZbY[bekqbQhiXWWOJOKF=4FLGJHJKLRYbbU]_UXdULMPXYXVWTMMRdgbjYU_`d]>?\UEVaUSY]_`jomzGBwgaaenuzx@wtroxDtma^f]OLdmhs|rnljx~|vtiYTQ>[B`si`ZNW][\PNQOXVFj;JBhE[ihbja\jePMTV_fi\X__\SOZok][VNLKRWWVPQPG8C]gaa`NOX^ab\PD_oji]SUTSVZ]_ZKA=@IV_c_`db[MHF>mhqjcv?A@CMMML96gSHX?D@BDBBEDA>>AEHHGD?@BDEFDA@??=<;::<>?=<:42312676<=85:;404;<98<><;;;:;=>??<99::63Ldbc`ZVWY^__b3431^[[ULQ/342/.00^_a`\[][XTQSTNORTZ]`ca``_ZUTUTUXZXY[ZYZ_cba^[[*)*h+++)('')++),))**)(''&&$"##&.--.010/0.---+)'(+,-.../233211.+*)))'%&'&%$%%&'&$##$%)*(%%&'&%$#! ! !""##"  !5"#$$#! !$%%$#$%$')(&%$%&&')'%$$#!  "$$')(%$"!! !!"]###$%&'&$#%'''%&'''&$$&')('%$$$%$#""!!#$%$%&&&')'$###%&'''&&'''&%&'&')*))'''(***('&&''((')***(&')+++*(&()('&&'()),,-.-,,+ )(++,++,-.-,-..-+*)((('((()))**+,,+y**+(%+.,**++*))*)()+++,+*,--,,,++*++,./1/--+)*,//*&('#!"&(!8=@#),-(#&++)()(),.10-./.---/.*(()*+('(*,.//.-+#&.%"$%&()***+)*0++)(''()(((&%%')'$$$##$%%%$$#! !$&""##%'''%$%%&()*)('()++)&%%%#!!%##%&''&&''('&&&'()'$#&(%$(&#!#$$" "&&%%&'$#&'*+)*++,././.,+,+,,&$&*--,,*)*++,,++,/01/.--/14761///01102123-,+,./0//+*+*(((&&($""!!"'))&%%&&&'((()("$)*+,*'%')(&&(% !$$&$"#&'#! !"!"'+,0/*)*++*())(#"*.-*((**)&$%%$###&)+,+,,,+*,*)+'&+i4( " $$#&'('*+)(++(**+0-''**,//,-,*++*)+,(&(-/...- ,,,--+,-...037 520//002351/2Q00141,.0.047543221156-'9*#65775877 9620.,+)().0-)(''))''(*++**,,***)(*,+**)**)()*)+,,-,+*)**+,-..-./-*)+..-/00.-/220/..0--/0//,&"!'.121.+)&##$%'(#!! !""#" !!"%&(,&!%&&(*,+*+)'*&"$''&'*,+)'&''%$"#$&%##%&(&&$$''&$%')(),._/16>8(%-//-/1.)*-,,,'&'$ !$!%$ $('!!%&&# #"""#! !$#!#%(,,--11 64/-+,,,++**)((*+1*)())+,)'%&)+,.-,-../0123/.00./00/14433d   !! !"!:9;:60-(%).-,-/-))-+% $$)+-311/-00.-.,0:?<70,-031+'#&*-,++/2446E520/0233235456:?@=:78;@A=:667995/**+,/0-%%)+++.111221/0/./0.+()+,.-,,-03568>DFF;14=@9.'(%**)&!&.0131,*+,-0../0473226751230122/+--*++-./1133256:@?<<<;978:;?FGA<;;=AEE@;;;9>##&*,(! !"! $&%%$%%##""## 4,'&%(288>86>C?<B?=BC>=>A@>>@?<;<8:>AA?@AAABEHHA:BBDBBA<9601666=A<:A;441('/3+#$$&!3  "! %,/-+,.-)+2766;BC==@@@A@>?AB@@?AA:4124331.5636=A>=@EJHC@CDCDFGGKNR..NECCDEA=99;<;AIJD@>><:;@DFFD@=?@>@B?:9;;9;:76789;;9863/% %-.0.)$!  ## $/7 !',.//..+))(+..,***+-./.'%*0-++(**%"(-&#*0120/-**//),00)"'--,-01149A;''+('%$%)0/($%%HDDE==9)*/-+.5/OO)+(LNNBBH?09HB;>@:&'!!!&0!,032*&%&'($###')(#! -#(''&(+*'))'+)$#"#$''),,*%!)224>HNJ=880*('))()'(/442-02/,'%(+,+*,,,+.+*,-1/,/263/+))&$#',330,'$%))%#$&(%A;")'$ %&%FEK&@?@BI'++$%+01O@IDD-058*B?=;;=)%DO<7:2,-7&G9@KQG?BHRR=117=:324,.540--0,)-11+,=A=<2''+03:D.-5632235=;64+"/6+-2-&*.+(!&)(,3022AGEF:*"#-41-4<=436-<'4:5CYI842686/./7D$"=65 #?753.)(0/<'E9440./20*(&.GB+)/.))%( %3*'15.0448;3+98.,+&"$!#)$'%&'',175+/1,07,&(*-,+,-,(',6528,(-,.*.+#,0('-011699>D# 91//169<:>9898@%C;;3171&%4:5;/-+''(.1/.)'& &5;654()/122-$/720)$&&%(,.0.&! "&-120022.&%%!:9@;4= !'%%%1& ( )L--/.(&&'*)((+*)$!)*,.--.,)&%&%!"$%()+-,+++(&%&%%')'((''),...,++뀂ǀ߀̀À ~~~Ձ퀂׀၌ Ž½¿ƹͱ󈄇؀퀄πżĿ偔􈒔˾ؿŻنȾ;܀ȿýøʹ̷ʿǻʾ¾ȸÿʻ^¼żƸǹǶ¹ļ¿º˾Ͻ把낍ź¹Ͻހɼ¼˽񀇏ÿɺȾþ϶؆¾逎Ȯ󏪴퇕ƭʿηʷýèʬȿýĞπԽ̙ˢӹ󉐊ȴùҸحĶڿ¾ο¼ĹµļĺطİѾۀ򀈈]\]_]\[\\]\[\\ZVX]_0abc231_]5[YZ\[[ZZ\XSRQT`46642224454321113323444jieb`ba]YWVVXZ\^__`a^[ZZZ[ZYZWQOMLJKLLKIKOQONOQSSRQOMKIGFFFGGD@=>@BDGHFFHHGFDEILNNLMKOYXRPQSWYWUTQOMLJHGDCBACGIHKNNMMKHFEEGJKLMMLMMPQSUVUVWXZ[[ZYYXVTUUSPOMKJJJIHIJJHEE=GIJKNMLLKMONJHIIIJLOOMLLMPRPPRSQQTUTRQRTUVVUTRQPPPTUTUSRRSSRQR TUWXXVVVTUSTUWZZYXVVUUXY\\[ZZ\\][[[YWWWYYZ\\]^[YYXWWXZ][\\\[YXXVVUVUSY]][[]^^^_^]\[^__`cfjnmha_]^\[[\\[^][]``dhihc\WTROJHLME::McgTEFLPY_^^\[YUTUVZ_```][XTSSRSU`VWZ^dgc]WQTXWTRUWVTT\YUWZ]^`]YYXXY[[ZXUSRTWUSSPRWYZXVUTSPPQQONNLOUXTOKLOQXXWXWVVVZ]]]_^^__][YY^0aXOUSEFh:3332aZZ[XTRSTUXXX[ZXZ[\ZZ]\Y\/.ZXZZWWVQQSRPQPOONMMMR]ec`23235789754da_^a1`_\UU\daZXUOQWXXZZXTTUW[^^[X[^]`eb_ZX[^_^b69:97#556544i565457884`Z\aaabcb`]]]^^]Y[_]WRSRQRPLLOPROKJLOTUQPPONMKIKOQQPNNLIIHC?>6RT5?DGHHJKJHGFC=83\6=?>?DLSY^a_[XZ]YVVUVWVRNHKSZ]]WRKEDIPTRQOOQTXa54a]WT\01a][\[/3541/!2420135444346312111476313335775458e999:9mki[LGFGA>IPLGGD=9;8348AFHGFCAAEJ<016:?CD>=DB6ZQ3>FHBDLQUWTRSPMSZYYVSUVPHMUWYZWWVWZYVROSUTRQUXYZYZYXXWVcY[\[Z\cikmkhb`^__`affaa_][XYZ[ZXWYYY]a`]][\^bf_QTiqlhl6hfknjfgi7:;;<=;pje`[WUVVVXYXVSRRRQOMKMPQPQRRQRRVYXUUVUPMNNNOPQRRSQQRSUTSSUVUUVXZYWWVXYYXRMKOUTTX[\^_`_]^[VTX[\]ZSKJRVUV\eaXLIJLTXUJIGEFFFEEFGGIGDGJB@DFGHKOQSWZZTOIFIKLJHFJJJKJKIGGGHGHHF>AGJF=9=BBACEJPSTV\b26:><:=:7kllheddhl89:r89:<>@@><9mfijgjnlhk:;:tqpsuqfYPLPX[aghg_UUVW_k^XPGMOPJGQRKDGNNT]]WOSX[XOIKD?BGKLLOTYZ[\\][Z[\[[\_`<^\[^belqsngcdjlhaZSQSRPMHEIMSX\WMLQNJJMQSTY\YXYZY[YUTQQSSVWTQV[^`dmtsutrrsstk\PU`daTIIPSRYXLIIGHMPMJIIMORVXX[YTPQXbige]VPMQW^]\^bkllogb_YZbdhnoorrompstssmigfimnqxAEHHC?>|@DHNOIGEBA@ACGKJGEF#HIGEDDFFB>vqswxvtspt{y{}ztnnoqvriipyujfaaehmy|utpchooiddefho{}wsommiiossokknpnquusopsvxuuvuqnopod\`degoupgceiorqpsyyx{zxtnebed`bfgmwtijuyun_@>DC?7ZW75587;:6gdi:;<:AIUWRRTTD?HFDHMMF@EFPhBS\ZWRQPIFHKQRNGD?842]E;GPZ:CEFFMUURNKHIIGILOSQKFBDKMOOPKIMRLNTRWaiqk_[\XRMR[ZTSPMW_fh`^_ZVSPOTWVSWUVWZWTSTWXRQ]h^][UQMJIJMRVZbdXOIGJKJIHEDtsvDPTKHLJH}E}uBEINPJMO{tFNNQTGyxrmkfUUmunpssh`hsyOMtlppi]NHMf}jX]c`_d[Z]SSlzzsdTKQ\i{tZ^nlfie`WUl}bLTXNUgn^TURF|JUSSTLV_dggsoGCU]a`hnlSHPEV_`[j{qrpnnWPcjialyynnAE@upmh]TV[l|ohlc]WX]ZTPMNatp_[XMG@GQQKGQ[a`Y[kgb]XhqTU^SQUVQJDDFEFGJIHFGLPV\gjhf]RF?HPXYc_^`jrm_ZYYVQT`Q;?QY\_cg_FKx|itDJHwooihu}ytsvuqovywjbahdYLJS_fkdvzrwvuLIEyi`[VK;s=AFFQU^bTROXbTNVXRMD9h?OVYZTTU^d_UVY[YZXOZa^]YMX[\kn`dd]^Y^fsdO4MAPMVYLOW]Y\mjbeensjfkhecefb[QFDJW]XT]eaSJHErchY=Bb9<=;?KPN@5382O5CCFLOPORVW/10244368:=@A>>?@CC@>>@CDC@;9;?CB??@@?><;98:<<;:73341Z/32257589756<@:248;:9758<>?@<<=<9633323iikgca\ZWWZ`38854c^ZRV//^01110_acca__][WRSUTUVVUW[`b^YXYWWVVXYYYX[]Y\_ba]\]^+*++*)(())(%&)*))(*)+Z*))**)'()**)))%! !(541/.//-+*)**+-/0//.-.01/-+***+++,+,,)&$#"!"$%$#""$&&%%&'(('&%#"i !"#%#""#! !#&&$$##)*'%&())(''&%$#"!!  "##$%&&'&#!  !#$&'''&'''()(''(*+,*)((''(((&&$##"##"""##!"8#%%%$$&(&"!"""#&(('''()*)()*))*+,+*+,,,+*)('&()**))(())(' ('()***(((''&%'()+,,+*)(()+,,+**++,**+*(()***+ ***)(()*++,,+)(Y),-,**,,,---,++,+*+,,.110-+,,+*+--,-+*+,,././.,*))(%#&'$ (35)!$%),+,,+*'&'&(*,,,**)('''( +)**+-02.)%"'!!#$$#$(&%')+,-,*((()))*('%$$&%#$#$&(('&'''%$$"#')(&##$$'((*)(((*,*)***++*)''),-.-("%%.*('(&%%&&'((()'%&&&%&))'(%%&'&''$$%%$%$$%$##""'*('.,**++++(,'*.-)('#$(*+,,+(()+.0/-+./.031/,+,...04 .,-00/01110//-.1/*((())(%%&'('$$$'*+('((''&$$(*w)'&&&#((!$&''&&$###!,! !#'*-022/,-/,***+-,+'#$(,--*'$!"')('&%'')--+(&*,***)c433*"#"#%"+'"%$ "&)-/,**'&+//-+))+("&+,..-,++.-+)')++*),-...-j,,,+++-//000159;;851001210442100/././/..0..14311//1473+*6<96964796346 ! <8630-,++,,---,+,,+*('*,-,--,*"+-,+*++(&'(''()***++,..--.--+*++*+,./.,,.00/,(')./-.00../10L/-+.000/+&',0.-/53/'$%%),*$$%"##"!!"#$&$!#% #$%%&))*,..+'%$&'((&&'&&'&%$##$%$!###%&&'(*(%%&'('.9:5543/('+--*+.0--/+'((''%%('$!31"#!#&$"""!!$%# "$&*,++/2 61/,,.--,*+,+))++**+)(((),+*&$)+++**+,,.0012211/.-/112322342024222567421236< 4245367526:99<=:3,'&(,-1321-()**070/,(+.0*(./*%(-,0682-1452,(+&#%(+++,/222457534654577655799=ADB=::=@?:50./0/,(&),0240*+/-+*,/0034112213200-,-.00-,,,+/2457=A@@><<<;92("%-//)$'-//43*)*)*,.-+**-/03336s51-,06:862.+)-154246:99;853/0447::;=>=;<=<==:8679;;@@?<=@DGFA=:;<>A>559@GLJ>542259=ELMJFD@@GI@7:??;8789;@EFCA?@@>=ADD?==??=BEFC@@CDECBBB?>=>>84799:?B=9779C@:;@@>;/&%!**-++$)-37:>=9559>@@A?=<<977<@BDD>626:3,-0468:9=>:9;=?FMLGCBFKLLGCBFHJHGHMQL?8;<>>;88;;:9<;4/)&&'(-0/*-///-,)IGNNOU+,-,,-05988;=;7971,)&%)5?B#&)*,-(%*3><3,'&+.-,,/.(',-+)&$%))'$#&(((''()+/592'G%+.0697449?CA><94/+(&F>BDA@BGLJH$IEDB93267787;?ABBB@<=<85676576.!;.70*&! ")8 %)+..-1,''(*-00-***+.///)%*-.1/(&''%'(',010.-,+(.4-*/30'&,0--0597697+%((&'()*..)&%%GE@=>:7./96/,**(FM,+MAF&+)+.%=?=;;9.,<@77;;516>DJCAMUSPNR.+=8;;71)((6G;/13214013+)9BB@8-(-4:DN?05>;6753-)7B1#+0)-69.),-&?'.++,'.3798?J<$#.3548==.)0)I3541;JE;<;::-(48739>>89"$ 8664.(+-5?73:52..32-*((5@;0/0)&"&-+&%,141-/9840+8A,,1)&*+'# "%$%%)))'(*+*088772,%&*..5313:?<1,('&#&,"')+--03)+BK@3:F$'%;65229?<99:988=@@711660)&)02309<7:E?@KS*&#=62/.'<"%((./57-+)/6+(-,)($2*./0-,*161++,.---'-1.-+$-00:<22412015:1&#!+)..&'-1-/8B4/2168325432353/*$$(/2.*064,%%$<6:3!"3%(' p$/020/-)'%%&),*(#%()+-.'-+(%%&%%%&%&)+,*(((&&&'()))'))(),-,))*+Ā򀇁~ԁ ƿÿ´¿Ϊ߹m½¿¾½ɾ􄆁ijƿ򀜦肖̀ſˀǾſǽüijĹźѿ쀈ˀȾľžؿºö񃍓´ĺ̽½Žý¾Ƭ䦅ýÀ񃍜ƍ½􇛪ȹøŚռİƸǹ󃝩󀁆􀂃հ׽ķ׾ܸۥˬͩʱŸٵ݂ûʹȺٹϸɶʯþΙ螑ٸƾĸꁈ¹òŵظ鉒Ļɰ󿓄耄_]153a^]\[[YWWWXZY\aa_134b_`_^\[\[ZYWVXZZY]a^ZUOKKSYXVWXXY[^022000_`23g4467ja_b`][ZYYX[\[]^\Z[^^][ZXUVZ\]]^ab^ZWSOLLMLMNNMLLNPPNLJKLOPQPOMLKIHHIIEB@ACGJKKGGHIHECDDFIJIGDFHHIMUYWVQOOQPNMKIFBAACFLMMNNORVUTQNKLOPRSRQSTWWW\\YURSVXWSRRSUURJEGKLLLIHHJKMNNMNNMLMOPMKKOQPNKJIIIJLMOQQQRUTTUVUUTUVSRTWYWVSQRRRTV^TSRRRPOPPRSWXWWXWWZ_^YVVXXVUWZXVVWXYYXXVVXZ[[[WVWXZZZ\\\__^]^_`abbab_[[[]]\\XVTUVVTTUVVY^_^`bedEb`][\]]]bgj6lha^^^\ZYZZYYY\_b343222001`\WTSSQIGVagt>sn::ibXIGOVXWVXXWVUSRRSTSRQRSV[bcZROPQTWXY^32a23\UTUSSYZ[\^[WVVUUWVROLKMPOSVVTRRRSRQQTVUWXYZZ][WVWVVXTQRUX[_bb`_0111/]]]\]]ZZ_bVGXYI[84]XWXWW[^ZWXYXX[[\.]/..[YXZUTVWWUTVWUPNMNNQQRPMMPVZZY]`b246667655321`_^]`a35cSLMU[^\VSTWUVWWURSTUWXYVTVYZ]a__dhgc`_ci5lhfi7kdbacdce699531`[\ a_cgfec`__^^^`_^\[\__]XUSSSRRUTSOMKJIFFGJJHJOPOMKNONNNKJPTNQXYWUSRRRQQPOONOPLLMNPTWZahjd[UWXWWWYYVUUQOONPQQOJHECM\][VNLNQRU_442`[TW]]XY\0/15787566303442220/00010010233101354224789899989::;??hOFEA@LSNIIG?<:0R,9@EHFCBDBDPC30a7>GSE?J=[XR2AGHFJNQSROMRTRXYVSORONRPSYZZ[YVSTWX VTQORZ[VTRSVYZYYYUUVXZ\^_``bdemlhc```aa^bcba^^[XZVUWYZZXXY]\YXX[fmncVZa`cgigefhedfgijjjmnlkjhe_YSQSSTWWXYVSVTQPNPSSRSSTRRSRSSSTUVVXZXROONMNQS/RQRSRTVUTUUSRTZ\ZWWWUUTV\\YVVYYXWRNMSXTSUZ\[ZZ^_][YVWWWZ_]VRRPLJOSRSQSX\^]SNQSRRQOKJJIKKHDCBBCEDACFIMQVXWPIHHIGFEDCEFIOPNONJFC@@AEGHIGGJMNOOPMHJKJKM[g_RLKMQRTVWWQMRYafgd`]ZURNS^30RMGKK?<;ngd:@EGIMHAGKHBGKIE@;<=>@BDGMRQTZ`2469<=>AA?;nf\Z[[[XVWXWSQRQOOQQQOIGLPUSOPQQPQQRSTWZ[\]^^_^^^_\YZ]_`cefcb^\bk`Z`djidg68:<>==<;8klkfcdejnpmikmn78;;74ecbfhgm97ijmnommoomkd[UTZ]TU^_[]WROOU__[RGEFOK>DIB>DPPJJOPKUchfaRLH?>@GNNOPTXZ\\^[YZ]\YY_da`aa__Y^bhfa[WWWZZVOFAADEEEFKORSURORRPONPSQRXUQRUUWZ[ZVVZXUUWVUTSY^__agkqvuy}xohkhdjljeWQQRQRTMGFILJFGILOSUVUVZ\YPKZstmgc^XRQbnpqib_`hia^^ZYY^jnjlooqtvy|}wohdekpqwAGJKJGDB?{tnvAGMOPNIDDHMNLJFDDCDCA@CDABEECDFGGJIFDD{y}xrleb_Y_suoiffbZ\ft|urt{|oXHM\cbbchowzurne_aediqwsnkhhioyzwsomryzvvqnqtvwxwzxqokhggb_dimmnprutqnjddfggejmruqoqvvrppWV>8XS1)#Fg^dZQI=AKKJKEBIN?;Jb?QURNQPPPNOLGFGKMKFAs9932XNR*-6AGJLTXVROMIHJJKOUXPKIHKPNLLNKQahXOPJPX[`aWX\edXZZVONQNX`jh^][TNMJJPRRSUTSRUURRUY\QOXb_acZTQNPRSUVZceTJGGHKMNMGC|x|FY]KEGGE}CEHE~BCEIKJLGTM~EGHJF~hlpoWQ^]lywzpbdmF|z|schwzHpmn`[GrUuqhklh`ire`[Q\ux^WWSPP]wTPdjqqvpVObpRRTVXoscTKKEI=:FMUTV]cfdk]ERWYalh]RE@J]\ca_bkssu{~pZ[_ahcowjdA@>@56ECFNPIIPRSVUW-.../27=@CC>:88@CA??@@?=<<<:::98;;;<<<:87:=>??97;<=<=;446457688:@F@64;<8536;9754Lgfgedca]YTSY25653d1_Y[//ZW^12221aaa_ca[ZXWVV\][ZZYWY]ZZZYZ[WWYXWVW[]_`_]_`ab ,+,+*)((' &''(**()))(V)))''&&'()(*+*(%" #%$"##$%'))+22-,..,+++*)+,,,..--...-,*)**++,-..-+)'&%%%$ #$%&&%#"#%$##"""##! !#%&'%$# !"!'"##%)*(&%%&'&%$#"  !"$%&&'(),-,*(%%&')* +,-+)&'()('& " #$$$""###$r%&&%$%%$%')*)&%$""#%&&'(((),,*++,,++,*)*+.-+))(''()(()))())('&&''(()*++,*(*,+(''(((')+*)()*++*)))*+*++)(()*+++,,.,+-.,*)))*,,*'''(('(-*--+-.//00/.-,*))((*-/00.+**)))*++))*++,,)'&''#!*017862/,&$'**))('&'''())(&%&&&%%&'),0/)#! !##$'%'$$%%&)**+,*((&&%&&%# "$##%%$#$%&&&'()('(()*,+(((''(&%&(*,-//,*))('()'(-/&'((*%$&('&'))()((''&'(%$&%$##%&%$#""#$$%$#"#'))'()(,+*)+,0($%(*+*&%&(()**(&'()*+,*(*,,/20045531025742452101223d.,.1024432//00/..//010/.-.010,))*+*)+,+)('&%$$$&'%%())(')*)))&&+.,/44310.--+,*)**+,))*+,/124684.**+;,-,++)((''('&#!$,..*%#$&&'+,)%'++)*, 2!"""0&+! '+.+!$$$&(+,+***++--,)')&%((+-,-/.,)*,-+*(&(-.,+)*-/.-..--..++e,--/0112345:874232332334310.-0,-/111/./220//05772,/32466644543567887:;:997630,*+,,,-...,--+*)*--,,,-,+H***+,,,.-('(('(*++*,,,./.---+))-0.,,.--++/10--./..*((*.-+,/0/..0/0121/.,-K0/+*,+*(*,,-++-010)%&&'''&#!!#$%$#" !##!"$&)++,,(%%%&%%$##%%%)*'''%$" "$%\')*++)'%%'&(+5<6-)()+*+,,.*&).252/+(%#!"( 322 #$$(% $(&!%'%" "#%)-,,/2 )63.-/..,+,..+))('()))(%$'(+*))++(()*+,,-."12/../-,.01113320/.28/,/144235565223579757892124447555688987640,*+00)(-.,.+)(&)/00,''*0,"'*$!&..+*--*18<;8.)&"!#(+*)*/224564245533798899877:>>:52335O51-($%'('(),/0//.-./..--.-.21..0/1221/031//0//.-044469;?BBCD=968527997/+-.--/,'(^+-*''(+./10.0353-)3@>7442/,-9?@?:52388310///28979<;:"&('&$#"!?;:?#&)**(%""$'''&$#" !" !##"#$%&('$$%HGIHFA>?CE@=;72.)1?FIIC=;9996118AHIC?=@HI?0&(17666:?EGCA>73689=CFC@>;;;@FFFCA@DHIEEA<=@CDEDDJIC>;7568757;=<;<?BA?>;8:8;>@CA;98)(1-*1 -/)48783.+((*.12134569;:4.-*FAFLO*.323:ACDIF?>BEGJMIC=>DJHEDDDCDGECDA>;9:>?<71../26740-L*)&$&)-.,++//,*(GFRSHGJKJJ')/78443.>+/(3+%#!#*.0:$%##(/4:>=8.((''((*,..*-32,(#!"#)*'&')*,043)@9B',.010)J+7ADA?;753/*RQLE?775569?FLPJA=?@?@;67888<<::*%,%##!A@954==1-&I-+',.QC9CIEABAFG@>! !!#*'!!" -),)&'&%%$&&##$'(&$ 6""$%)--+)(&&''(*/1+'%#'*)((*(+5;.)*&*0144./065-/0,'')',175.-,(%%$#()))**))++)+.13+)05235.))()))+-/57+###$&()(%"DA?@#03%!$$%FBE%$&$A##$')'*K'2+AE%%&)'DDC67==-)2/7>;=8139H&BAFB69ABG(G;9:1.#8/FA88:816?632,/?KD3//-,,5DII-*69<>?AD<+,026/7C@71#"!:640/22.04331771..+$+54972-)" &/.)+.48115,'9H?0""*'-..8+#$$#$&$ #.-#-8.+2579-#-*!%+19?>AKA1+'+&'1/-.486*%*8KB::>?@E:7<:9:651487547847?FD6) %-002-278><97@H(&A:41//020(65!'()"',031*+0---%)---/+!!)-.+*-1.-3,$-71)!"(''./0>4.347>=3(0#(&'%'**/,/54,)/68//9=@A>93498+),/-+--)##$! ;, $,8 " !#$!  ./00//-*'%$',+'''%(,,---0.**)'%$'((('''()()*)))'())('&()*++)++,-ր뀂ɀ~~ƀ~~~~򁄀逆~ځ + Ƶ„Ā¿ـ᳆쌢·ڀ󀆆ŷΨĥ낥ʷfýĿ¿τӀȹµþÿúۀε熏ƾþƿ򆊑̿Ȼʽ¿¼ҿӀõǸƀòýʰ񑡡̼ź򅏒逄ƾѹ 򘜦ԗάـ̷ý툘ظûƻŸĴ󨎡ۿкнӬ򃌑ƻܳƹ½Ŵ­жͳüƶʹݾпЀźȱɫȶȮżѻÿ٬ᓮS]^ZU]1`_][ZZXXYWSSUX[]\\]cc^[YYYZ\][ZZZYXXZZ[^a32_\[WSSQNMOPROMNQSVWXZ]`2fi555775fc`_^][ZZ[ZYZ]\[[ZYXWXZYX[^__\\\ZXWVSPOQRSSTQMKKLMLLMMKKIGGIIHHIJLLMMLJIJMOOOMGBBBCEFGHIHIKMLLJJLKKLMKHDBABFKOPQRTSUWXWTRPRVXVTSSUVWXXZ[YTOMNMKLMMOQSRKFGIJJLLKLNPQRRQPQRRSTSPOQTVWWUQNNNOOPRUVWWZ[YWWYZVTRQQSUWWTRRVWUSRPOQRQQQRUWVVVUVVXYWWYXWZ_`^]^_]ZXY[ZYYXXXWVVUUUVVXZYWVX\a_]\_`^]\\XWY[\\]\YYZZ3YYWXWWY[\\\^`acefegijihgffeb_^__`cfdaba^YVVWUVX]be34P2/]./YWY/0//]\\^`_]dliinrtjR?nwCFPZ]^]YXVWYWVYZXXWSPNLKMQUVRNSUTV\033431]VTRSRPRVUUTRQTV*SOOQUY]\ZYYWSPRX[YYYZYZ`a[XZYWUUWWY[^b`\_b0 10111`]YVWY[[\YXY]_^]YUVX]^\]^\\0123321/]^`_ZXYWTQKHJKLQTQOPSVZ]]\]`1467633223321___\^ffda_[TNOTWTRQQQRUTSQNNRUTRTXYXTSQQVZ\\YXY]\Y[]^`ekmkheffhh56531\XX[_`cfdba_^^]^_]]_]\[\^aaa`___^]][TSQNIGILJGGHIHJNPNNMOTVXXVWWXWVY[ZWTUTUVX[[YY\]\VSTVWXYaj6dYTRTRQTYZWTXZTQQUWUQMLNNO\h`WQMLMMOWad3`[XVW[\VTW[[0233443114100--/00016983124 6:;;;::989;FGAAC>;MQA5`Y3DRGAB;36867:@GNPMH9`ITV[TKFHISTRTXZ]\ZYYVUSRUURQPQVY[[WRQRSUWXXY7XZ\[^cgfeffeddcbbdc`a`_]]^[Y[Z[YVZ]][YYZ\[WV[ciia\[]_bfghgfdccb__`_a`]ZWVWVWWXWUSSTTRPPRSQPQRSSTUTUTTUVXYZZWURPOOQSUWWURQSTTSRSTUX\^]Z[[YXTQV\^^\[XYVRPRVVUUUY\][YZ]aab_\YWWWXZ^`^YTNJHHGKORUY]adcYUX^^\WRLFEGIJHDJNLLF@@@FNQPRQLJIHHCAAAGPKEIKGLMIFC@=>AEGJOPQQRQQSPNPRSUXWQNLIILNQRQSUQOQV_hk67d[ROF?L[PCB?JJG@:;=<>@DG HKKHMNIDA@@>?b>?AAA@CFIOU_78238@ABD=mkkhb^^_\[YXTRWXSRTTSNFCIOSTTSVUTUSRTSUVWXWWY\\Z\][WUY_c^]bcb`c7@GSbke_cpm]SQRPPOKMSY\ZWW SOMIECCFKJJLMMMOLG||yMRRUVV[_cda^ZUMHysx}n^Zbiq~}{soligfeaaeiigdc^XQMMJAupBW]XOLJGFGGHJ*.S3.!$)9A69Puy?ACCFFCCEGLSX[UMILV]XRJHLRZ]UPMEQ[QEP`bURRQKJR[dd[UUPPOMORSLBESbfYTSOPONMNOPPK|wmcX[UXgbQPOQSQNL}||xxwt|A?qDT[^c\G=<898HV[YTNF@;>EGC:30/-.5CKLQZXSOLLJILNMMNNLKOLJLLGGQWcmk^WULNV\`aWXgqn_XYZQIQYakxwg`[VRQKGJLPQQWTQVXUSVZWPPV__af_TPOOPIELQZ_SIFDEGHQTIDCEEEEBDJHF{EJIFD|MWWJErxF}r|tf[W_u{hQZj{yphahsyHxdjf^WSPXdmsnhlpnc]VQYixqqvl\QIE[YEOZq|bNc{n`]Z]add[QHGHFQVSPTZa__flw{xp[KIQRTXY`W{Icddhfbfly~rsncbc_^gvvnmp<@DHD@xspkfed]YWSNY{tXIRi_]a\\gnaWPH?>NX[VOcpeXIGf~zbTPKLWLYscUSOL@uun>\kZUUSQNHNb]GPbX<<@Jewgpd[qkVJOZbb[^gpoP;k=Qkr_^_bmwxyvyDG~igmkgknlokmrle`XYYSPRY]Zceadpvxoiqqmfbcgq|e[ki[MFC=BLCBC@WbWPPOHO[kcMBBFFEFIY_SNRBG]XUa_UMFAtBVZSSS^lxibZJDDDB94ES]ZYecUQbltvj^Yk|{|vgYW[[_`\TNGEMOE^MLADgDPPRTL>9:7<<>@@@>845532^1348@C;4686335:@@=>AB?;9753367ic`becb_\UPVc65_Z]][]a1a_a`_abcba^Z_a&]ZYWVVZ]ZVUUUWY[[[ZXWYZ\[[YY\[\``\^aa_,($)++*(S&$$$&()('(++(&%%%&(*)))('&'(())+))*(&&$" !"#! ""#$%&'*+020..-,+*))*))*,-//-$+**+,,,./.,*)**)))('%$$%$%%%&&%$##"#$<#"!! !!!"#%&'('&$##$%%%$  !"#$#"#$$$###""#$#! !$')**+,+*)()+,+*)))*)*+-.,)&#$%$$&"%"!!!""#$%$%&&'&%%&''()('')+,++*'%&+(*++-//-+*,.,)('')*++)()**)''&&'('(((*,+)()*e)*+*)*--+*++*(()**)))*+)((()***++)((),.-+*+,+***))),-,,+)))*)**)()+,-,++-../1123421/.00-,++,+-/.,-.-*()+..Q'&%%(((*,,*.4103683':A$#&*++*)))**((*+)*)&%%$$%&('%!""!"$&###%%$&'('''%%%&*%#""$&((''((&%&*+)())()+-*)**)(&&')+-.-++,+*)'(**++('')***'$%&**()**) ))**'&%" !""$'$$%'*++,***,,,*+.E,($$'(&%$$%&''&&%%'))()+,+*)(&'*,-+*+..,-/002565333443,*+-/024310//.-.10/./0233321q20,++)%#%(&%%&'''()(((*,./../010.0320.///./10/0233/--//015:4-)()('),-+)+-*(')+*(%$%&&.5/)&#$%%%).0-*)'(++('*,* j+#&&"!$$!%+)"+$!! %))'%)(,,/)#"#$**'(*-//.-,+++*-+)((*+.00-+**++- .--.//0364344343122340../10/12210/010..03751//12356655544566655664443331/-.---,++,,+++,,*)***++,+,-.,-,*()+,./.-+*+-.-**+,-.///00..,)+/121/-.-+)*,?.//.-./2121/-+,--.010.,)''('*-/002343,&'++*'$!!#$$!$(&%" #()d'&&%%"!"!$*'"%'#$&%$"!!#%&*++,,+*+)'),/010+)(''(()*()*('),056.("!& !#"$%%''%" !"#"#%'*-2  34641--/--,,)'*+((***&" #()***+,**)(***++-,+-/.--.-,,.23/.120/03-.23433135677887895321442P67636 .1551,)*(&082.10*')())(*)++*,/,&39*&<)0/+-/+.5;<:4+&#(-,++-11356531125779=:655533221-,0/-/.)').001760-,,-.010241/01114796554320.--06987:=@EF#"!>82/02470&HO))()*)+*))()+-,++.2/069?@;8651/0/1210110--//-+,..3:=>>BC@?BCFD?BHKD969<=A"#$'('$#$##$%'))&"!"%('$###! ?@A"$&('&&'&$EFEDEFEDCBDEC@?91266.*3=><667;EG?72247::9=CGGECBAA>;;<@EC@@ABFGFEEFEDCED@>ADFKOSWRJEDDDEHGCCBDE?956;>DEA@CEEA:865:::=><=>:8862(344""!"&#%,./1-&! ",221/-+))+020/..1442/,+04752/26:=;CGHHLLGEGJOOHEEFDDCC@><:99:;<<732/,+**'&)*)&"!$#"'.20-*(OQPQSRIGP-1134685018@:0+.1-*&% #*4;736?<0*)*((('(+/210/, )(%#"!#''()('=(*+'C=@DCAG+101103699631/)&LOTOA;>BHNMHINK>2/4:?EHHFFIRWVI?<:8|4469996430+)+,&E?#..(   "8< "##$$""%&)-/1.(&).3.)%%)-23,*)#D-4,I%-87-*,-*(.3992..+,,*+,-*#%-68.*+***)() &FEEC@93712<9-,+PHIOJFCBA?C" 7$#'-* &(&#*#+)()'$##$" !! "#!!!$$'--*)(('&()))*)'&(&%&&$%,19?=4.-'(.255..7?<2-./)$),06><2.+'&'%#%%(()-*(,.,+-1.*)-32482+(('($!&)/2)#!!!#$)+$""$$FH'%!!&%%HEGGEGHA%'&$$EBD*32(C&K=@KL%@8CA>60-1>DDA4&+4ACCD@:527;3752.+,28>B<3-(&2LT."*09 3;-+.+)(%(40!(4-%5DG>692+:6(!&.22+,286%7-<>21116;<<;=#%@33885687967:974---**+/0+/202:=>85:987447=E60:90)&%"$)##$!/5-(()%)/8DE2%!"!#&/3*(*"/+)//+'$"=$21+*+19@94/%"## !)/,+22)&29;;3.,5AJGADEC7..002J2/*'#"&($3,-%(;$*())%  &1/-./.-+)%"'.*(++)*,*(**)*++,,+),-+*(&%$')('&&&'()*+*('(*+++*)+*)++)+,,- €݀׀񀃁ɀ~ր߀ e󁆋DŽ̄ˀȾƮ ǻ¾€ÿùʟÿþڀƾιǻӾýƾľ܀վȾ½ÀĸȺ񊦱ƛſ킃ҽǀȶŹ¸ºϽþþ½˿Ǿǿξ۽曯ĹڴӒø쇙ڿ܀Ż٫Ȕɴ̮풯·²»򁋑ـĸȜŽ޳ݲޯĻθҲ耥ȾƼ¿̸IJɧȨˌǷƦøŽű³ɶήѸ߹Ľ˷gǼŷ翲𓟸Իƭ~]^^_aa`_][YXXXWVTSRQSVZYX]_[VUVWWYZXVUTTTUVX^2579973a_]YVVVUTSRTWYVQRVWYZaj6kh566jfbab_]]^]]\\]__][ZZXWWX\ZXYZZYXWVWWWXYYXVTSTUVWY[ZXTON^OONMLKHFGHIJMNNNKIIIHGFJT\WMHFECDDEFCADIKLKLNJIJLJFCAAEINQRRSTRQRRQOOPSWZXUSSSRRRSUURLGCDEFILMKIIGGHHJKLOQTWZZWVWU&ROPSX]_]XSQQQSSTVWWWXZZYVUY`]WVSRTUWXVT$SPQRPPPOPQTXZZYVUYZXWTTWXWY^ba^`deaZYXXVUTSTVXZZZWVWWWYZ[[ZZXXZYWUUW[^\\Z[[^`aa`bbbccdefjkllkjghgdbbgiggf`WNIJMNNNPRV[__]\\\YWXVVYZ\].../[XUUVVY`dec]\ZIiegbcuHQTWZ[\[[ZWUX]_,ab]WTQNLIJNPQTVY]^011/[RMMOQOMNNMNPRUWVUSSRTWzVUSSXXWWWY[ZYWWUVWWVVWZ^\YWURORWYWSQVYVU[_]]_`00a23c[YVQUXSPNOUUSSQONMPRTTVVTTUZ^a2123331^_a`ZSRQMJHJPSTTSQPRTV\`_]]`123321221a__ab_^fhc_\XSQRQPNLLLMPUUUTSUWVXZXTROOX][WVXWXXVVXZ]`bcbdhhddcdecc`ZVUX]_\`b`_``_]\\]]\]_^_`aabcbacc```\\^^][[[WVVVUVYWUVXYYYZYXYZ[[[\]\ZXUVWXZYYZZUUVVTVYXZ^]_`_`^\[\]bfc\Y[^ZSPZe`UQPQQPNPTTRPPOOPRTWYZUTUUTRQNPTX[^_\[[^^acca_1342/..-.01000231.-/1247;>=<<:<<==;=?=<<<:jYLIGCF>4^YZJ8A>5D\R<3114?D?9=46118CNOIC:-Fa[XO==IKRWVUVVY\]XOQUUOPTTUUXZ[^]XSNMORVY:[^__`cjmkihd`_``beda_^]YWWWUUX[[XY]]ZYY[\YWY]``ba]]`ceffhjihhgecba]ZZYXUTVWVUTVWVXWWVSQ(SSPPRRSVVVUVVVXXXWWZZWSPOPQSXYVURQSUTQSWZXYZ[YWVSRWZ[[VVZ\\YVUWY[[YY[\ZXX[_`bb]XWXZ\]`dc]VNOOMLNQUTUVX`e\VXYZ[^caYSSURPQTTOROIJFDIJIIGGJMOPIGHFNSMILHBEGFEDBCFHGGLSXWRRPNPPQV\]VUUMJKKMNOPNLPQSVXY\bg584d_a[MILD;?AKOQNJIHEABDGFEEGHFFC86<>>=>?>>ABC<;ADGKRb7]SX6BDF>7ouqeVT_]\YS@@Va[XYWUNIKOSWYYVWYZZUQTTSTVYZYZ\]YYYWTRTX]ZY[[\\^f:74f57678=??ABA??BD@:ieknmllor;BE=9:7ijfebbdilt@?@FB;96bi8dUYYRKRcebilcSJ@qyLY[SJCDIHAcKuGqj>FIIHRTRY`acdYNHBwqr>CFFK[nsojjrwsnkf\[`ed`Z^]XSXaYRRTTRPSXervztw{wuz{onnimyFFHHGGIJMTWTPNONKLNOOLIHBcYnyzurxCDEEEEGG~|rp|}uj\Zjojhjnmw}sjfiopmoty|zupoonrsrrnjpunkorz~z|~ysuxuqptz~}xkfnrmlmnrx|sfbb_fvupv}}|~}zcRNDKRPHIJLTVcwuoke`YSPMG>9d[BNONQV[^^]`\]c\OGGONJLPQTVV[]VUX`kw{ogefkrzztx|utsnkonjfa``_^\[[UOOLKOOJ??~Va`\afgggem|raXYS9A5CPbnqvwtskefd\WOFJPRS]da]UNIIJIHGFHMRPLLMPSOIHEAyq|LWYSQRX\^`bb^WQLKIKMxr{yeX\gq|LL|pg^_hihhgfb`b`bhkbSQTVZ_][ZVOLMMPQLT221ZAF9'&%'3)@N-1=Wgoy}ABAFHJNRW\YRNQVUPMJIJNPNNPKFWcTFDJU]XSSSPHFR_npaWOJLIHLOOKET]ZPNPPROKJNQROGtfVT]YbcRPYZPMMIEGJ{yx}BC>r>DB<6322478=DJPTQMKGHLPOMLKKLNMOLJJHCBFQ]bc`\XS[ZW]g]Vempj]Y]\UX_dyi`[WURLGIKPOPYQMRVWQSVQRQT\Z\_\UPOMHBBKOSYVOIGEEEJNLKHDxq|AHMIHILH~DGHGvGMTM|{vyim~ziqrqljidbinpyloojkt}j`b\\rOAUkneqsb[ZXUUjslq|XEGRlt\NISt{`Tgrjb`ceeg__]VSNCA[q{dWbojdkynl^@lsIZlkf[vAXahf^aovotxpliceb]Z^iwztyDFBCGC}yrle`WRUWWX`_`hkiYJS_esracbTNLP\XNEXe[QG@\pTGJa_RNZf`YFsuFQNJGAEKOc|DeTJDB=\kFNQJPI?RHBUWXZUPNJJQJGKFJYVUURRRLOOFJQYcc_XONNPavxrifkqsx}smkaY\`deaZSTWPBfTL:2GlAGSc]OMJ?APJ=-2CIRWPLRZ-//--,.1237<>>;9:=?><:6:>?>><87677655776876758@B@=;8:?A@?=97m8;9a[Z06:<9559:51359=:6:>><97532245e_]e4a[bc\TS\ff_ZVX^abccaa_^`_]_^[\^]\_b]WY]\ZYWVXYYZ[ZYZ[[\ZYZ\\ZY^`\Y[]]W++)*++,,+))('(''%%%$$&'&&()'%$%%&(('&&%$#$%&(.-+)&&&%$$#$%%#"#&'))-11042/-,+)-*+,-./.-,++*)*,-,,--+)((())*+*)('''&&'())''&$#$$#"!! !#%&&'%#'+)&#"#!  !$$%$$%$##$"  #&)+,+++)())('))*+,,*())(''(*)'$" !#%%##"#! !! !""#$&'())''(('''%$&'+010,)))()*+,+++,-,+))*//,+(0')+,,*))('&&'(''&%&&(*+-,(')***)()(()+//--./-)))*)))(' +(''()***'')**))**+-,)('')+*+,,+-.//0234432110-**,/.-.-+%!!!"#$&'*+)'&''%%&%$%&'(&%%&&((+--+()*$78;9:?##$')*++,*(&'(*+,*((&%"!!##!"!"$$%! "$$#$###$')))('&%&'& %$#&&%%%')C(('''((+,+)('&%%()&%$')''*,)())++'('%')&$#"&&%%$$##$%''('&&&(*,()++)%$$"! "'()('&$&')..-+**,,-//,+00-+)'%%&%%$$#$$&)*)E***+*,-,+)%#'(''(**+++,,-./00024422133220-+*,./.01//010/.--./000233234 3112/1343211/.q/0.--/01000//01100111/./1211000--//-/222433321/../0243.,-/-(&,1/)'&'('%&((&%&&&''(*++'&'&&&%$%(++,-*))**,/1/,>4(10/$ )&"#! $)(&#'3.,&%&)\*,-.*%'++')+,+*-/.0/-*'')+-.../.-.12234876553123335422232000../11/02210013/./1235311234446776K7654442000/,+-..-,---//.-+**++,,,*)+++,+,,,-..--,,020-***+,./-,**,..++-/0//.-,,+*,.--,,.010-++-./-+-//../01231.,,-.01320,'()))+.11/.-14.(((''')(%#&('((**%()$'&#%&&&$$&'(*&%&$(,'&($!#&%#"!!%('&)-/0,-,*+++.(11,-/)%%&'(()'&((),000240.,+$!s !$#!"##"#"  "#$ "#%)-4/'* 5;91'$-,,-)%-+*,**&$%(*,--++,,-*(**))*-.--..,+++**+-...---..21 !21478669:"#2/-/./0349 (-*"()'$)33/13.%!6=)34.'#$(($3%?'<:#((''./-046991+(#!*/.././3557:646731005857;9897216873474..0-**-+'&(*.07>820.,+/1134210225<75542010024569>="$&&)4??:67=?<;;7104774033/+.3/++,-+*-/6=AGJD@=?B?>BFE=67736<@D$%'&$%&'(,/-*(('$%')(%##!2,7=><9;BDF$%%%FBFJ&&HFF%&JFA>::AJMLKJIGAAEB=70-463258;CE@<99<=<<>BEDA?>>?@???>@DIPOKHHJHDFGC@>ADEEKSSLJNQOJKOOMOMLHA;9=>995466;C@9+ !%&" !#&1;:63/+(#"!&#')(*-144221384-(LG)10-...24464//19CJH=879=BGJHDlAFPSQLHCDD@?AA>;:99:9878510-,./,'&('# >!#FJKPRQNOQNKNQNHR3842587655;DPTH:0+,'$/8<@DB?845520)$%)*)/553-(&$#$(,+((*+.*&%$ =???@<@)140//2555641.+)(''*MDBHLMMIB>DF7,/8@GSULGIKP+,PC<8216998785332234/().03520-)#!! + *26;?> ""%'(*+.20+(+/.*'&&&)+**+(%09,$$(/40-,-,'&.5?B90+)*(')**)B$-1.('**,+'%()*($FHIB:0/53:;.-34,*+)'K)+JCBBEFF$##&&2,%#$/29.*%!#19%+)(*('&"! ""!""6" $'&&%$%()))(&')&$$%"#'-48741/+01.17/*49:70.10+-14?HF5/+)('$!#%)((.)'*,-),-),+,21120+('%"$&(-+'$$#""&($$##FEAG(-/*DBGA?IMJE;57BA8;:<9993/479AFH?8::78==66?$&?761,=H>=<>B7*.0/6<3+**+-+/774476330-5:=>E:+/45463-),';;&.+'%!"&(4F'F3)# ,1%++&+$*#-//0-+*%&+'#%#&2/-.],-,'**#&*-10-+'''(1=>;536:<@HC<850-/1442-)*-+#81. *8 "(2.%$!""!C)&&/,*.,(-.(##*0/+(&'*++, *)*))**(*,++,,(%'++*)'&'(()))(()* +,,*,-+()+,Ȁ怪Ā~ ˀŀ 2ºý¾ɻῳ/ǂƼʅƀžn*܄UӡӁHĺᑁß𤸹ͷ܀ȾĿҰÿ÷οż®߼ѓ̽ȸźĽúٷҫ拹ɽ¿ʾƹɸ½񧦤ٓٳݠπͻΰӲǀǬ»焗߽»ԼзݶƢ±ǽθǸ뚸Ƿ􋤫¿Ǻ­dz´Ӽ­Ѳ۲˩¤Ͼǽ϶»ʹḹĺʹͺ˻î֫ꍞǻ¹fH/\\]]Z]__^]]\[YXXVUUUTTWSOTZ\ZVTWYYXWVSRTUX\^_`f5@641_[YZ\][YXZ_\WXZ[[[`fij6667ljigc`_^_a`_abbba^[YXUVXWUX\]YVTTVWVQUUVWX[]_a_^^^]]ZVTUSSTSPLIIJJJIJKHFGHE?83;GLIFFGFFDCEFDCDEGJLONMLJHFDBBDGKPQOPOLJKLNPRTSQRRQPOLLKIGGGFDDFHIHGFHIGH>JKLNQWYXZ\]]]\\[XRPPS\egd[UTSRTZ\YWUTTUUUTSSUWXZXVXZ^\XUSRRQPQS UVUSSX[XUTUTSRPQRVZZZ^ab^\[[]\YXWVUTUUTTVWX[]\YXVVVXYYXYZZ[\Z]^[[YXY]``a]^abddcbcbabbaadgggfg58::99::878:985ec`_```]ZYVUTSOLKLNSZ010].//]ZVPMMNU^cdc^UOCcWUSU[9LRPMOSWYZ[]\\\[\]\ZXWUQMIHILNT\\WSPNJGGJKKLMKIKKKLOQRTTVWXXXZ\\]ZVTUYXYZWVWWYZ]_\YWY[YUSRQOLNRUWWYZWW[^_^^[[_```_\WTRQONOQPNNKHINRRRQRPPOPTTW\^aaa]XVUSPMLLKMOQTUTRRTUY^__00/^^02aZXXY\^]^``^]^\ZZ[[XVWWSNKLNPQQPNPRVYXVTSLLXXTTWXURQQTZXUWWTVXXZ^_^^^ababcabba(aba^YUUVX[ZZ[ZYZ\`a``^\\^__`abaaa`__abdcbddaba^\\]\[Z[\ZXXYYYZ[\\]\6[YYXZ[]]\]][XUVY[[Z[\[^`bf4d_YYad_Z\aa^V=3O9hV^_WSQQTQN#QTUVUWYVUY[VSPNPTY[ZYXVVY[ZZ`1^\///./../.010..2448?><;;:9:>@>;:<>>???=8[JFFBRE&<"-?3-A]_@7;>?CKMGA@=847:9=84^\CNNNHCER\ZUKBCLOQSSUVUTX[XNNVVPNSWXXYZZZYTRMLQUXYRYZ\^\[^`acbeijggda``^[]_\[ZZWTTTSSUVX[\_^^]]\^YU]gbacbaceeeddeeefghgfdbaa^ZYWUQLNQU_TVYXWWWVTSRQQQPPQSUVWXXXY[ZZXWVVWYZYYXURQRSSSRSTUVXXXYZWUVZZXURQSTSRSV[`]_a\WUW\_]XXZZ[[Y[\\^`_^addbc[SRSQQSUTPNNPV[ZWWUSQTa66e_[]]VPJBHLKQMEACFEBBB@>:nkkihim9:?DCAAA?;8ollmmtAA<>CD?:5135]MbeTLLYa_aege_N8RbM\\QGILMNJ=o>>q>IHF@ALQQQTXXTOJ>AdWaefg_TOKFt]X`luIIIHFHKIFBA?AFMRXboyzvqkdeaYY]cdbc`^_dknjf`^edflmpmimu{}{xsoklqyypigggmuqponnoqvGJKPTQMHGIJORTRMBzCD?tmpkgrEIKJHGF}}wolhkvtojjpwxttuutpjhjntqjifcfpmdfklmqxxvvvsrwustxwusrxzuosGEJJ~yvvtjeeecbb]]dmpssmmyv[QKM^h_H5]:VnxtlaWQRSRSPHB=DQcrxwAJQSPRSTZ`\PR__TTVQKLNQQOOMOWQGEGILOOPONJCFNU_aREDHKJJNPPHMVUOJMOMLJHKOONKGxl`Z^a\^QGZe[OKGGIKGCFHKPRUH2\\N:ItSnfYSSPKC?;8FftCOTVYZXTPOLHGIID?DEGIHJORPKGJNNJHGHJJIENZ^chfb`a[W_tp[]gfaYRYb`_cog_YQOLIIGGNQOSTOPSYWVWT]]WZ[[[ZVOMIEDIQUTUVROLECCBEOXOE~lnAFJHIKMJEDJHFQQFjd{LXSwnpryoSXiFwmknbZdsm\LU|gpxljw{l\WZcv_JP[rzrsrfa_YOSafpiLMS`d_ZFQouj_UXZYYSYhd_\]_Z[X?Jfrsc\j|yrrwtqlkaFktSftog]L~HXZZblwp^iola^YUcdZgwzz{EG~FMSQDxph`PG]bV^kbWXhrlZ]ozqcbhpcUTWUOQNORRTQJLXVHCJL`h\Y^ZFFVMPJbHqfsbifPT[TF;FMRTS[pyvj[N>:EBALGHC8<LUOSWYXU\]_iXJKNF;:h;JGBCGYjj_XPCGWcdcWT`\[dgekswkZUYbc__]_]PB;sZB8Jc=FL\aXPG@FLE?9=FFKKHHMQV.-UQPV038==;8668;<<;=>?=<==<96566654455768:87:<<<;9;?@AA>;;>?=:7105753334774357867;;:;;;85543332353b^__[[[ZYY[[WY]ababb_[\][[^`aa`^[XY[YWY]_^ZWWXWWXYXXZZ\][YZ]``^^_]+***(*+*) (''&%'%"%(('%%&'(''&%$$%&'(()+?-)'''((''(+)%%'((),0225421/-,,-/0/./0110.+)((*,+,/0,*)()(>'&&''()*++*))*++*(&&&%%$#! "#$##%$##$# "" !##"! !#" !"##$#"! "%'()(('&$%&%%')))*)('('&&&%$"!!! !"""!!"" !!""#$$%))()*))*+***'&&(,121-*)))*-.,+*)*+*)((')*++))*,.-*(''))'')*)(''('&'*1-+))++**)('&&'),-,-//-+*+++*)())(('''()*+++*)()()+**+-10,,+*+---.,-///0/ -.//.0210/0&.---...-*)&%$$# !$'(('%"8&,.--*&%"733346$&$#$&)*+--,,,+*++*)))%" "%$! !"!"#"#$&&''()))(9)'%$$%$%'&&'()()*)'&())'&&&%$$%&((**((*,+**))*+,,,+(%%$$"$"!"%''&%&$%%&&&')*+++)&$$%$#"""#$&)*)(''&(+-.**)'&&(*+*+,,+*+**)))'&''&#"#$%&''&'(+,,+)($$((&(+,*'&$%(''))(),,.///./11011/010I011/-++,-.--.-,-.121/.../01222112210112113456633430010///0/./0101112321110133200/--0221332333631-.352//110+&0&,-)'%&)(%%$%'()*('*+(&%$%(*,+*)'(*+*+/,*'#%),+-+#)'($ !)..*#!#''()(*+))+-+&'++('*,,+,-..-,*''),---.00../124456544322330110/...--../124454334-*5;4244455455567876544420/.-*'(+- ,-//../.-,,*)*+,-@//0.--,-.012242.,,--,++,,.0/./0.,,/.-+**+,,++.264352.,,.1/,+-/10/02220/.-/1112/*)+**,//,+++.0.+*'$!"(+++..*($ "%$''#!!$&%&()((*)),/--,*,,*)&$$&*-,*-1/,+.-,./,*)((*+)(('&%'(&%'')-21012110/./0H,('$"! #! ""#%$##" !" !!!!!$&()+2*'*320.,0,+-)!!), **,,+,..,++,+,+,,- +..-)'))''*-../11/134 #"!!!656 : "! 37 %+-'$&-0-./.,)!'2*34-&()*+*"<##?#*)(#$,/-+.22.,) !(-.-12.25522333566623971365784347834<;410-++/1/,+)*,.154333111/-)'-2366314865653499669=>@@===>@ "D4.58894-)&$:016=AJ)())'()(&%$#$(+-.3;?BDA@=9552-.255343237;;87449879:;97:>AB@@?=99;AA:65547=;999::;:=AA??@CDA>>>?B@==;9?@CGGFEDBBDB@ACCDCBEGDAAGNN&%IIL((MGCA?@@:89:888449>>>=8;GONOOKKIIJE:*&" .61#0.CB?>=:66979;:>IKEDDB@A?=B$&OOQS*+SNH@ALV++/59623:>=>AGMLB3-.2&),389;=>>==92,,,)&%'/2341,+)'&&'&&'(())'&'())&$$$#%&FA:8H.5641011/1333.)&&()'A69@EC===:;@=41588AKG??DO)MGDA>978;::;987762121 %6,-+,.,()'$$#  $#/9<5,*'J(**(KFGJKIG#"!!!#%!0-%'@,:4,'$ 19")*)++)'%$#!!"#! ##%)*)&#%''%###$%%$DF+469:74240-2A>//663-).3213;EMF40,'&$##"#')(,-()+/.--,21.110//-(&# !$)+*++)('#!! !'-)$D;D@8/.05D3&,4DG>?;674%8?0=FA:6+F(10/39?G<069610.+45.3>><<#%=#(+*"=:61&!/3,094/09<7,.:@;426:3-.00+-*+--..)*42&"$&26/,-* )'.*5&>27HLFD@B"9-++0037;A8.+#(-) #'())/;@>6.'"! '$&"0l !*/+-/11-0105,$&)#5)'#"$.760+&!*355.,4215756:>6-*,23/0.00*"?5$(4!#,/)%  +!2,*+,**))((**'')+++,,*())(')*+,,+)())(')*+,)''( ))()*++)(*,..-,-,ŀ~~~}~Ā􀂁Ӏ݀~Ձ怂݁ŀ ž ÿńǀưʿ؞(لҀ⼲ˈقҦȸĽ˷Ͷɻ½Ϲ¼ȀǽĿȽƾɿ肀ľ䃐ǻüIJǮԾȽ܅傚øРĻݗ䄉ĿĽ¿źĽݷ˺Āü󄊁ݹ߆ɨӳѼ𘀯Ŀ㇙ĺŠ¼ŸĻȺ҂؀¿ׁٽ֪ڃǷƬϮĻͼ􏱿˾ɫϾƻ͡ɻ͸̤҂ѿ߽˻ѽߨ·ôڸΦ˶¹䅁ů½ĪŶιʾþ,u `][TS_`_```]kZVRTUTUUSQQUY[YWWXVVXYXWUW\b3d`24556655542^]^``^[ZWVY[\`cdf]NVeikij78onkhhihfc`_^_begd`][[[YX\__][XUUVTQRSSTbY]\\]\ZZ[_cca^`cdfb]ZWTUYTNLMNMLKF>5\Z07;=BHIFFINQLFDFHJMNMMMKHEDDDGLNONMKJHFDEFEFILNONNOONMMNNMLLK JJHHFGIKLMMOPsTWWUVYZZ[]_`[UUVXY\[XVTRRSSVWUTSSSTSTTTRSWZ[ZXYZ]]YVVWZ^__]]][YVURONRWZWTTVUSSRRPNNNQTVXXWWYZZWUTSSVXY[\\]^_`^\YWWVXYYYXWX[^`^^cea`^]]^^`ceddfeca`_`_^abbdg58;<<854310]]^046545664a\[XTPMKOPRWXX]ac`a`a]VQRUUQNQW]`[QE=78:k`k?LQMFCKUZXUUWZ]^]\\YTQRRRPMH@G)*CGGECBEMSVVURQLLMLLLMNNQSUUVY]^_]ZWXXYZ[[WTUXXYZZ[Z[ab^]YRMJHKQWYSPUUUW[^a_\][Y[\YUOOOPRVWSPMLKLOTXVVUTTVWUQLMQTVVTVWXY4VRMLMOOPSTTVVRPQUZ^a`]^001b]YUSRSUVXZZ[[ZY[\[[Z\YRQPQ:TW\\XX[][\[XUSSQVd^TRUWWTRRSVWVTTVXXWXZ\[[[Z]`acdbaaa`__^]^_^ZY\acb\^`ZTV[^][[]]]^___abbdfddefdaa`^^`^ZZ\\ZXXYYYZ\^^]^[YZZYYY[\\]]_accb``ab``a``ceg674\VZ]]ZW_cbb`XMGY421YVVTQOLMPPORVXYXX\\YXYXVOMRVZ[WVYX]ZUUX[^1200/..//.Z--//01123568=?;99989:;==;89;==<<<;7WGDB7T@cS:%" 1$H241H6:2>?<94T7JINSI?JY\TFJRRL-JQRTWURQUVROSUTOQUVWVWXWVVWSOQVYYY[_`_a`_`aaab)ccda_]\``^][YZ[XUTVXZ_bda^`__^QDQtq`adcddbFddaacdb`___\VTUVUQMLOQRUVRPPUXWVUVVUSRPPQSUXXYYWY\][XVTSSRTUWZZVSQTWUTSVYYY\]XSUWZ\UNLMOPRTZbda`\WVVX]`_[WVY\ZWX[\]\]^bh435gbb`YTRRTUURLIMOOPRRRVVQFD[5e`\[\XUSOJLICCC@3Z9?BACHIHMQPQTTVZ`eaVQRMMPSUWRMMKILQSNKGEFHJMMIHKNQSPILPMHIMQVY^_aeb_YMDPY[^[FHPJILKJKRPLHAAEGJJGGJHD=><889>@=;;7;@>BJPOLMY70UR0;AC>95cdghdZY[ZYVWVYZXZ[ZZ[ZWWXVTTUVVUUWWXZXUVWXXWYWUPMOPKINUXZ[\\]^[WY^bdcdf4558;><<;7788nmidcjmln<@BCDB@??>=;9:@A??DD>85674cbhcSPUXZ\`eioriZF>KTRLFQTPOOJ?qtlpADC>:>DGDFMPPNM?6AKONRUNMUYXSSSUVWWYWQRWTOPRTVXZ[WTSW`fbYVRNORQQPJFGHIIJOQQTTSVZ\ZZ_efd^XTTVTTW[^`_]]_bdfjppq{|xyyutg>B]_YONQQRO:WhCGC@ADEFEFLOMHEFFFJVdeafknkjlkb^ec\WVWW_a]_cmvslhd`a_[_glgdlzzj]XY__\_^\WRTZ[XZZY\bioqvEHIJGGECDBCHLMPXYRPQOHvt~FFEDCC^DDJHzv|rjjlruwwpmnrpokeghkjecdcelmgdda]_djnqpoklllmmfadfhllkmlox|shca^YXXX]myyxpgsxomopruwpiXCJY]NCOailqne[TONTUQMNQSQOONOUZ^b`dmni`SPUTNFwrHJFGKNRVX_jf^YYepnfkoffgejqlhkmmiefiigfaXUXUNFFBDAyvvp^Vd{DHKNQU[WL{RTU[ekmjhsJKMLJGHNWckf_[YUUWUTVVURQNKIEGLKOVUVTRRSQMJKMPRRNKKMLLJIHEECuhdtJUW_jjc]\^ab[TOJIKMM|pp}rk_`muzvolkpNOQL}|{|wojhhiihddge^[`bTyvGDDNYYYaa\VTTUSTVTHL1%1;5#';CD>B@@KUcqslh@MPTVWY[a\T^_QOUOGP_]VOMLJIIHHIKKHGIMPOGFMRQMECJLJKMMMHJTSOHGKKIHGILLKIGwngec`URQEWxfPNJFIJHGFFHGLTPKJD;\TNQ`Rip`TNNJA;999EbuCRb[SSSONOLGEFEBCDEEA905KH<4/19;;95;NQRJgV7LT`i^LN_h`M?HTdvp^ODkAXVP`kipzpnhbZPX]_h^UQTNPS7VMhcV]r}{?Azv|xz~veqwog]_`^fbWVTPECQbnpZB]I{|FL]TRXRW]eqrmmjSDKIE:66=NSIHK[nokg]X\VP^[RJE@=;ffqg?HTWOEBIJQgqrl`[L=878679:62343466458868:989;=:654ffce55d`ceb^[[^[USRSX]```ac`\\]\YXY]1dc`^\][XXZ_b^ZYZYXYYZ[[]]^ ]\[YXZ_`^_cfd-*)&%++**+,+,,,+(%&'%%'&$$%')' ()'&%&)+,)L*))*+)'&%%'(()+-/*#(24533565224442/.--.0120--,--,.00/-,*(''%%&&&''&)+*Q)&')+,-++,,./+('&'*(&%%%$##!75!$%" !#&%"""#$&&%$%%" !!#&'''&%$#"!""!!$%'('%&&%$$#"!!""!! !###$%%'((''())*-.-+(())),+*+*)*))('((&'*,,)'&(+-+*+,.01/.//-*('&%&(**++*+*( +'&&&()+,**+)())(*+*+++,./.,+)'(()*A)))+-/.-01.-**+--.010033/,,-.,+,-./0''(/+*)'%#/'('(++*+,,*%#$'(%"$'*-+& :6<"&'$#),,(()**+)&%%$##! #&((&%%"#$#4$%&'')*++)'&&'''()'%&'('(''&'+-**(&#! "&++'%(((*+,-+)\+,*'###"#&'%$#"!"$')))'&'()'$"#%%''%%%&''$!!"#$%'((+*'%&(+-.-+++)'&$#$%&)*)))()*+**)*(%$%&((*./,,--+,,*'%&#'/+&&())(''())((()*+++-.-./0010//...///010.-/121-./,)*.//../c0001223433575321//10../.-+,-.//02223200/.//02111246664355445433460,./0-,13111,"+*((&%&$$&%%'*,,***+)$#&)+,))**,+)(),.)%%*' #" !! *%$(,$%//)"%++%!()*+*((+,))+++((++,,--,?*()+--,/210100233233223332345663110120..000355434333*#,?;0265654 675566543342.-..-*((*++,.+**.0.-,'+*))*+-/0/.-.021.-,+,,-.0230-,-0/---,+,/0-+-.12-)'')*+,058641.--.021.,,.00/./010///00///,*)**+--(')+*+-,**)& )+**)***)''(&"!! )!""$%%%')),./159<90,,)(+-/10-,+*,.t0-+('%%&)(&$&)*+*$&*'#$')-/112310+$%+,-* "!" !%%&% "$&&%$&$"! ! "(,*''+'%./020+,+))()(*,,--,*+,,**+++*+--,--+++,,+,-,(&))&$&*,./.-./,*,013235665448977!!!')++&'+-+,.//01,' */-)%..*)*(!=@>>=>7/2/*i&&$%%+7%*'&'(('%&*,+('('&)19859<><;=<74751.,--35346DI&'&%%$$$IGDCCBDEGJJIKMKGEGM)(JB>=:898:??;;;979=AC ?@><;9438;>@?BDGKMNMKKJKKLIC?:77543236?ECB=;CE>?A??ACHLG?52)07))699<:4.)&$'($""#$$%%"$(-3524:;94-,00+%@@K+-))+,.139>:6329>:8>A=<::>@><==?><>A?<:73561,OJ)+'LONN(&GFG@0,;I&()+.384+NNJGV10/27:965>HKL'()('&(*-3750.,*+/.-.--+*(''%&)(*..-+*+--*(((*--*('())('&$$$EFE=51:(01R6=?:544561,($$&(*OB87BJHD>922:?A@<;;975/..&4I9+*(J'*+)P('LJI&'$$%",)$%-C.9:1)%#/9 )1,&&&%$&$ !! !"! "'''(&$$')(&%&'&&%$%)))-3>C;573/050&*0-)&&,2314:@JF71(#%$%'$&-.+/.)(*.1-+,/000./.-+&$#$$#$$%)*+/,# !#(,&#A37&&##&$'&%&&$%-,CD..FEC:&,*%GC86568CG5+-3$*?6:E<.395/<*OB@HD>;>;897/+198..4:AEKNF=9:A;-+677DXT5$&0530& '054-+,*(%(481+.0..)7#2996@D:6424-0334-9#*,8=:4+$"/646:DI9*.7@:11-1406;:;@E:$(?+((/,.26>>::8(&&$(*""&0;=;80-0*(20,'# 14;5"',.)#"''*9>;820'(1:"&/5331(,10*((('#%*),3760&%-31*&)26/'" 7?;28!#! &)%" $ #  R/.,.-+-.-*()+*&%%%'*++*+,)'())'&'),,,++-,*)(+-,))+*)**++*+**)**)'(,--.00/΀񀋁~ꀃǀڀ~ĀՁ ŀπþ)Ŷǯɹڀ/²ӕţϾкĺĀɿ¿ֿʿŹŸ􂏕ƨ󊏇򆍐ʀƽԀùŽŀƹག¾ǻźµǀĺŽɻ䄷ӿͽƾѴï쐊õ¾Ϲ±㿳ˀ￱îǻɵл¿ò򓤟ųμη»Ϻ¹ɹ򆀔늲Ÿ銭Ž˸üת(rl^bb[Y[[\^_`a`^_c`ZYXWWWYYWXXZ\[YYWWXYZXST[^`_^00bbb221221^]\[\\\^]Z[][^ad4iehmklmjdgjiggihffda``_`_`cbbbaaa_^*][YYWUTUUSQONPRSRRQQQSUUVTSSSUY^``]YYYVQMKHkGGGFEGLONOTTOMNPOLMONNPSTSRQNJFEFIMONNMKKHFDCCEDBEHLMLLKLKMNPRSRRQQRSRRQOMLNRTUVVWVWWWXWTROOSUTVYXYWUVXWVUTSR:SRQPQSSTVWWWVTVZ_a`^]][ZYXX[[ZWTSQOOQRSSRQRRRQRRQPPQRSVURQSTUWVUVZ]^]\^_^]^[YXWVVWVVX\^^]^aa]YVYZ\`bcgggjidcfghgff4566776542_XUUTTTQNLMRY]\[\\\YVSQPUVTUZ[XX^eec_\WSQOPPMOQPQPMMLNOJINSSLGHFA@FNSSSPPQSUXYWUTQRUWVQMKAA\fOEDEGILPQqPMMMKMNOQQRRQMOUZ^`bba][ZYWSQQUY\][YVTTTRTVSOKIIP\d]VUROOTWW\`_ZSPRTVVSRSTWYZXVUWY[]][Z[ZYXVWWUTVUTPNSTSSUVTOMOQOMNQTV\]XQSYZ[YWSPPQSRU[[XY[^[WVXY]`]XSSVTTVVWWXXY[\_a`]WTUTTWTSRQU[YSQSVXYWVVWWXX]hd][Y[[[^`_^^]]_bbabba__`_]\^_][YZZYZ]][ZY\^_ab`^__\^bdeec`]]^^_][ZYZ[[Z[\^^___`a`_^^^_^_`bdecaabccaa`acgj6774edd`ba^_[\^[WUSSUTRSVWUQKKMNNQVVVWZ[ZZZY\]\ZXVWXXUSUYZYXYZYZ^354210010..012443334447: 868;9899:;l<<<;6XIEEE@2157:==?B><:9AFIOL?BRXVKJOVVEIRRRTQPQSSTUSTSQSUUUVUTUUVVUUUVWY\aegfdabcbbccbaba^]_ehe_[\^a`]\]^\^dc`^^__\USZcd]Z_a`_`abbca^^__^__^ZUONQTTRPOOQSWUQQUYVSSTUUVVUUUVY[[YWWXY\[WVTSRRUXXWUSUTQONQTQNQTVWXUTTV[]\SKNQRSTTVXZ[WTUWZ\]\[Z[YXXVW[`a[[f76565eb`\YVTTXYXSKHKNNNPRRSROKO[`bge_TSVLJJKJGHII?;>:3l?DGKMMPSTUYZ\[TNPSSTUUTVROMRRQTUL;p;?DHKIDDINTVVRSXUNLPV[^cfhgbZPKELNOSTTSRKEFJLMIJOIB@>BFHHKMHFCCA?>::?CFB:;@?@HMLLLUh4aX_68;>=95hegcYX]ZZXVUWWXYYWWWXXYXUSSVTWX[\XVVVWWUTUOFEKMNNJMTY\][[aYOQV\ab`bfgihffdeilmn7898nmlmqlj8?BEEDEFA>>:79=>?AB@;5585498aUU`f`[_eghkjdXMJLJIGKSQNOME>tlcj=A;688^8:>GPPLI@dbv@CEHIGKONLOUYZZXVVTRUTSSRSROOSPHGMQTUTRRPQUSOLJGHJHE>@A{DMPQTSSY`_ZYUQQSRRUY]]\[]_gckmrD@>?{wtuuurkcZURKLMJIGGGB@@@>@BDFJNLGKMLQSTQKMRTX\_^ZUQPOLLQU\bbe`_iqrlebeha][^abiw{|zrhdgjjorstmdb'hosvutsuz}FHGECCFGGHHJMPMFEEEGE~tr|DBEGHLOPRQLGKI}peeks}wnkihhghhfaeggedegkqofegd^[ZZ]bglkijhffd_[]dlsuuwwvutw|znhea]YY\cnu||{{}xk_aghilnoty||{xnUBgR9Xa][^[[a_Z^ge[NGIJLROMPT[ba[]`^YWTNHGKMMLNRUROPSX]a^VMKLP^lqou{uqhcgkijopnkghlmf^YWZWMIDCJLHFEDDDC~zvlejzJOSTZ]TLIMRV]deghr{}JLQUVW\bdb\TONRRPU^]QIFGILNPRPMIMSSSRPMIFHMQQMKJJMMKIKNLIHIzlgqJMLMSVTQNMPSSNMNLurrywmkkng_ekouzEIMMJI}||slhgfgihea_ZV[^`c`^YPPS\dc[[YJJRHAEIB0C%9,MJ=@HGHKS[achxJSQOSYXVVUUYXXTKA?NZPGHMMGGJHJMNMKLLLMJNTPJIFCHIHILNNKLMLHEEHGEFGFEEGG|rkc\YQLNELi]PYZNIKOIGFFHJQRJJMI@?ABJWansqi^RRXZG<558@\wBKWVPLIJLNLFCCDDDFCDGB=JTF802AJC<934HPMLMLKLNMLLMLJDCKW[WUZ_cnzqjfVOXa_VXXQMLQ[c`]elziYRTTQTYYW[]\a]ZXUW\YTUY[\XWWUPMKHDCCBBFKNMPUOIHGGINNIFy{FGNWRHCFJLSZSzFryOJFbWfptEliotJum~wokejytttnylgfa^dnuhXVWcbYQJYo|eZqxg^VScwvhaYXYTLC@GMVUPW_XU\ejfVVWUQLDPejlq`XZXQ\`KS_f\NNPXb^XSNKLQZ[]ekZ^hwzkeloha`cbksjdm~Bvwn__^UCI`USpwnsxpj]S\ge``XYVNHHFDBvJVVTTW[\NLW]]b[OSTSWI<>FVfpe\SMLQTRMSW[lreYRCi@Udiegmmkhd][[[YRR[^VRRSTK?IT_]^t{sxDzjcmz|st}kfi[\`_`a^[LCOZSC>Wiqphxsd`ZGI_da`_^cli_VNC5e !#%&%##%(+,+*+-+'&(,02565441,%$!&'&'('&&#!#$%%"#'%!!%%%')$#!! !"  !!%(2,40*.1030**.-,,+++,.--,,+,,--+)*,+***,-//-,**+(""%&('#&*-..,,1,%'+.132345765534788::979;75 !" !*&*24/+.110100*&&''('(-,*+)%!@>9?&($!$#! #)/.+)$76D&'()))+--+/245533421332200.,,.,'(,-.0/..-.1/-,*)+,+(I#%%F(/001/-15301/--/.-/24532465459>>?H&# !@>>?>=:4.'"!$&((**&$$#"#$$%&)(%)*+.//-(*..03430,***((,.3668438<;731573235658@BDD?97;==???@;545448<>@?>==>ABBC$%$#!!#$$%&&')(%$#$&%D>=BH%%%$"BD%'&KGFGGHHHJM*---,)MO()(GC=89>CHHB=:9:;<<=<89<<::;A?==<999746BEDBCCA<79<<=>>?ABCC??=.+%.10/1//30+.*54.&""##'&&(+1750241..-($#&'&&'*..-0367:70-5>?<758<;=@A@><>BD>84230-,)*--+)())*)KGEAAFMNO,/1254/+*-/136765=BDILIFGK'),/002564/)%%))(,22+%"#%')+,,+')---,*)'%'),,*)('()('(*)'&&MH@85;F(*().1/-+)+--(&'(QMD<::>GMKIB<<;=:59<=@CIM'*-,)(JAADD@:7779;;965302234320)&(-.)$## #'+/8%*('*..,-++../+& '/*##'(#$%%'()('))(('FH-0+&'%B#&'&&(**(')(%#$&&$%%$#$&&GEC@<832.*,&+@4-56-)KNRN,/*)'''%(&"!(.8<<70)'((2+9%,*$"!!"$# !!"#""#")!"(&%&%$&U'('#"&-0/-035:C=7526>;<@;DOK@866414:?6,,.65/,)3@EFE4.=MIA73/.7CG>3/,,-*%$(/.).3-*.475,-.-+(!'488;IE0,/.(04&+380)++1751.+()-2335GK6,07@@836952353:@739FB"=8?B=91/1,#3+(9=79>;91*/6632.10+%&&&%>,31/.132((-.-.)#'+,0) #"*3:61+''+-,),-/9>5-*!2!+020145454/.*)/2.+**+%&.40/;64EKOL957./433540& (/,!-9<:3;CDC;21."$253111596/*'!0!"$$!"*,(,1.4;<6`WSQbOPSWVVVWYXVWXYZXVTSV]_ZZY\]ZRPRPOQQPNLMPOMLNRTQLIGHHEEFF@75>GMPOPRQOPQRQNGAEMTXUPMMPPMIEBBACEEGJKLK>NOOQSTSPNRVXZ\^_\YWVWVUTRRW]]\TQXUPNLHGIHHL\gga]\YXYYURSSRNKMPR,QQPRTTUTVZXWWVVUSSUVWXVTTUUXUQXZYYSQRQPQRPPQRTY\ZZd42``\TPMPTSTXYZ\[XY^bhd[WTRV\YTRRSSTVUTWXXY[_0/^[XWVTSTX[TONSZVQQW[\ZXW[^][[]]_a_[WWZ]`__^]^^aedcbacd^YZYWWZ\`_^`bddc`a_\\B]]^`_]_bdda^\[\__][\^_^^^]]^^\\]]\`bcddbcddbdccdeh4gfgfdaa`abfl89985466b\ZZYYY[\YWVSSUTTPNQSSSWWRQUZXUXZWZ]\YSRSUWUSQRVZ\^^^_\`466200//\01123443331028<:7546778:;==<;;:::9:;9^KFDCDG83-><!)O>4UQQTtRQRSPOH;4643:<<@BB?AFHHJJC>CMSPNKOXTQUROPOOPNQUSQQTSRWXWURORUVWWXYXXZ\`dihdddeccffeddeecb]Z_a^^\Z\aa][^_]^bdbaabb`^]Z\]_^\]_^]^__`^\\\[XURLJMPOPQSSRRRSSTWYYXY\ZWXZZZYXWWXYXXYYXVUTVUTVWWWVROQSPKLQUOJMSVTTUVSSUUVUTXVSRQSTV\]ZWWUVXY[ZZZYXXZ[\]_b5;86653b_\YWXVY_\XUOKLMNPQTTPNMNPSX^ehg[XOGGEJNPOMONOMJ;U[HVRPRQPPRQMLJILPTWUUSQQNLPTRNOQMHKKJJGFECCCJVYXZ^_[TRTSS\i876[KKOMONMTXVXULJLPSRPSVSRPFAACDIJHIHFHJFCBABHHBABBADHMSUY\aea`aeggl;;5354^[__]ZYYYXYXYWWVWWZZYVRSQRSTVZ_`][ZZXY\[ZRGFEIPMHMRUWYZ^e_QMRVX[\^c`a^_aZY`effhkntAAB>96578766dPM\ee]]gkha[[PJFEEEMLJMPRQIB:>AGT[al=FMKHB5IDZn;:<=?EGGHLSY\WPLIFGJLOPQSTPMPNILOOMOPRUURPMLLJBoiuBC@DJMPUPOTVTQKHOUTSSTUWXU\eijggmozFJGFCSIIL?:ED4HQRDE)16:?D6*?JEHJQ,-08BJNLHIOQONQWZXYRIHLOOKHSYVRSVRRRPMMMJFD}LKHGGCACFHGLPPMHDDCEHGF~?BEEDxe_[SIMNIZXOfs^M~HIMWSKFEDCGH83BMB585=UdlusgXUWXZXD5L,0;Xk|CDLNNJHHKKFBADDEE?AIGFIHA>CIMLDA<42AKLKKLNOMLLLKNOLP[dcbhrf_ioklgYU]_[XWXWSOPZbaadfmzkURPOQPSZUYgbdif`VV[[VVXZZY[ZUOKHGGFCABHLLLMOLIID@@BGHDDyxGSMFBHOTZYKw[hJE{LOIQOpxxrwooihxKNqYi~hVgl`cJr`^cmjopWGehRDJ\r~YRpui`UHB_mlxxg[UPKE;b=OZdfc`^efgg[`aXSNFQk|tbf`TMXXOUZVYclqZDCIHKWb^LJR\WW]twd``cuva\cozdZ`\LJafge`ywv|{jkibWLRVUepfXNIQ]gswqofZXVTSTSKBkiCLRRMN]XUVV[en`XYZUCjBPcoodYXUNJIJMUY_he]WVMA9Gclc]^fc[^cb_ZVPMRYXTSRVXGDOakjnqkdk{{_T`jqruFprmpummolcaeaYNII?>Sfe`]hslpu^Vdffdpokg[QQb{~peWCGRKEIDAIMSTSPHHSZafdhkkdhp]NB::<=;;;f\k>;89<;8443dac3334587678679989:::9720244697202354359><99:8D7ge55fdg65edccbdeccbaa`^[[[XWZ\[[_`^[YVOUZXZ^bb`]\ZYYZZ[]^dmg\Y\]]^]^ _^^dhjiec',++,*(('((*,,+,/-,++,)'(((''()**)'(**)('2*+)))(''(*()('''(((*+**)*-02..0//2331/,--//-,+.110/./1452/,*('&&'**'&%$$%%&&%$%$#$%&'%#!!"""!!!$)*&&)*+--+*)(('(2''&%$##$$$#"#! !!!!!!"""%&%%%$#%%&'(),.*&&&'('Z(''(()('&'()-,*+)()((('&&''((''(((''(())()'%'(')))*-/.*('((&&&)++)(&%$#$&&&(()*)()'$$%&'))' &)++,-,+,-,,*(()***-.,)*++))*-../0,)+++,---..//.-/24-('&&&%$$&())(())('(())(&%&+,(&'))(%$%$#%%$"!!#$#"#%(($! !! !"!"$%&'&%&&'&$ !$&%#""$$!  " #$$%b$#&''()**)(''((('%%'*+*%#((%#" !!$.53.+)''()(&'('$""$&%%$#"#$$$%%&)(('&&%$%&&'('&%%&(%"'(((%%%##%&'*+*+0/.,&" "%%&()(+,)),.31,)'%'))&%&''(*(&'('('),+*)(&%&)+)&%(,*''*,,*))*++**,+-//-++,.00/..--/0/...02/,-,**+,//./022100.,,-./11/01220/-,-/.--..///...///..//223332233232234676787433446:1.,++,,-.+++))**)&$&'''))&%(*)&)*)+,+*'&&'('&%&)+,--..,(/)B) %   !! $%#$%! "'+*(&(,*)*(()(%*+*(()((,--,*(*,,,-,---.02455123432543<4430034330/245103434565567653200013344334445665422110/-+)*++*+,,+>-.//01/./1121//./01/./.---..-..-./-+,.+)(+-)&&)+++-/,,,++*+-.-,-/0/--,,//0/---../02-.-,,.-.21-+(''(*-.00,)'()*-0221,+'"$#%((&%&&%$$(&&2-**+*+-,))''),..---+*))+-+()*)'(('&%$#"""%,.,-10-))+('.7-"#'&''F&*,(++%%&()((+-+,+$ "#%%#%$"#%"""!!## !"!"$'+-./120/02443/-//.-+,,,--+**)T+.120/0/--0.-)$#!$)&"'*+,--/30(%)*+.02420.02..3654689;;77:;7  !33-%'163,+231,+.*(%''&,+(),-,&" >,! $&).39>"',,*( *'7D$###$(((*-16950,*)*,.//022/+,,)+-.-.---.022120//,'BAH'(&)-.01,+..-,(&+0/-.%/022/39;;::==C')&$"9<>>=" &-32-)t-/+'')),-.1540//00.-///35520.,.1/,+,048:76:AGIF?979;9<<<@>97:=CE@?ACH%GB@AA@BEC<:;9:<>ACH'('%#%$!!#%'&$#CE$##%FA;8>H&()*+*'K&'KJKL(,13.+**+-/-+QIFFGFD?;:<;92*+258764136678:=@B>9:869;:66=<92/32134458?DDEFFDED@@@CEGKOQMIFC@<<:76435;>ABBBA:6:837=A?<:9;??>DKE&'3%+12-.12200484/+% %+,*)/42.,(%&(%#"!#())),02236:985323006;:59?@=;<>?<===><:!%$#&(I=658<@EIIGHGB><;:9;@?>AFHGGGHGFLMFED>966767:98:<9;?83564&&0.-"#  $'&"#((&&(,//0+$"&((%"*/.**-+++)'((&$$FCK)(&%%#"$%%%(*)(%##"#%%$GDFEC""$$#EDB853-'),)21,=G7+JOH**-52+('$!!"(04:;5-+)((')4; !%%%#"#$$!!!!"!%#!#!#'%%0&('&&'))*)&'.4549A827;775,*131/..,*().101568@G9+*,0,1;78<:5--11-,.//./0,(%$#! #$##$&$$$" "CE%%##HD@<$*'"#'+01(@19IN)'GC--(//L8>E=8;5424?)*8*6A>2)2HD811CI(H9113968FH8+!3F7,#(4=3-+(%"/*1565203343,01,)'#)6>:151*(00+/2.060-20'%1333.F?/)29=?BG&H:?LOH89=868865652*''! ,74/-197:=1-67526764/('2@@83,!#+&"%"#&+*+*$#+.242597148.& 87< (,)/531+(02)+*',.0/,''&#$(/1*($(021.('--"="'*//'!:; #""%**''%"##+%,+, +%--0.0.-0,+**++*)))'')*((++*('%!&(&'+..-,*)()*++--163,*++, --,,+,03431/怂 +~}}~€Ҁр「ˀȀـ ǀ mׄـȀ¾􇓐½¼р/􀀂€»٠µ³³܀ƿǺ܀ŻǾꕶźżЀѾýȻɽֺ̀¯ۉɵ¤̀ɺ»¿ʫſºǾؽô􆐔򂌑˼ÿúЀܺ󅋏̴÷֫腔ƿĺŽſӀѯ񃃑݂½纮ǛĽ½ҹ´Ʊϼĺ˿нþݽӿʹ̽ϸڼ¿灋ƀʾ©¿ԿȿòƮ藹¹Ӂد탈3a\\]\ZYWUUVYZY\``_]\\\YWVX[ZZ]^]ZWTTUVUQPSUY\[[Z]ba]YWVWW[^[YZYWTW\`bbd2dcchki688678kfb_`cfjkkhdb`]ZYYXY[]]^^^_`adegea^\ZYYYWX]^=\ZXSQQQRSSRQRPPQQQSTRSRRRNKHDDEDEFFGJIGGHJNRSSTSQNLMOQRSSQPPONLKKIFDFFB=>BDGJKKMNORTSSTSSUVUUWZ\^]]\ZZZYVVURPRTTSTWYYVTQPQTVSQQQRSRRRQPOPRSRNNQSSRRUWXWWXWXYYYZYWWYZYVTTVXXTQTY\[WSQPOPRTVZYXYWVXVSRQORUTTUVXYZZ[\\]]\^^[XXYZ[\[[[\\\[ZZYZZ\afkmha][[Z[\\adecceg579:8653a^[WVX`9B@7aXTVVUUW[\ZURQQSV\^[YXVTSRQQPQQOMNLJLKIJJJIINVYXURQNJGFEECA>@INQQKINPJIJMJE@>DOTRNKJNONMIHHJKJFEFHIHHMNMNNPRVVTQOQSUVUVVUVWXVVVQKLOQSSW[\WSPNNPSUZa453]WUSTVUSSUUX[WSSRRPNMMPSTUUTU\VVZZUTSTWWXXVUUVY[[ZZ[[YXXYYYV\_]\\\^_``a^]02101c^[VTUUTUY\]ZY]`_]^[RPQSY]YURQPOQRPRY\][[\YXWsTRPPQOLGIOUQOQRW]][ZYYWVX[]_^][[^`ab`_`^]^bb``a`_]]_^]\^ac32dc_\\_dd_[[]]\\\^^]]^\Z[_^`b`^]_a_abaaa_^^``_`ccc23321134igfefhjknnk67:96565d_][#^^YUUVSQRSRQPPUWWSSWYYZYXUOKNTTQQSTU.TX]]]\\[[_b25a\/./1564223211344325544358;<<;<;:9::;:;91QKKJKMFgLz_E./TaPOOQQPPOLOOJC>==<996?FCBGJGHJHB>?INPOORRRUTSQNGEIKMMNOSVVY\[YRILVWXZ\]\[[]_aadeggecbeeccfffec`_adbaa^^_`^\]`bbcccdfdba_]ZWWY[\]\[ZXWXYYYZZZYXVTROMMOONOPRSSRQRRQSUVXZ\afe`ZWVUTSRTVWYXWXXYZ[YSPRQPOOOMMQSNKLMPOMQTRRSVXUUTSRPQUVRSSTX\__P[ZWSVYYXTRUYZYZ\\]ag6866676ga_YWYY[\][WSOLNPQLFP[PMOMLMSXZ\ZVQNLNTYXVY\ZZ[WI3TBQPONOLHCDJRVVUVVSNIJMRPKLOOOLMMHCBBCBAGY]Z\`aa^b`KFLO\h6RDMTPNMOXWW^XNJIJMMPSPQSSLDABC@=AEHJJJHIHFFHKKHHGFLQVY[XUY]`ecdd^Z^hi]\fb[ZYXWWVWWXXWXYXVVZZ[]UPPQSTX`jke_]_ZY`]YUOMMU^WOQTSQTTPV[YUTSPRZbkh_XSTUV[_`bfgeglllnopr:>BEDA?BDA>;on985467445YLUad[U`ee]NH?ia@PQVXTNNRUOHABBBE>gbjs{BEFJKKHFINRUROMNPPQQTVX\]YWYXVQMJHGHNTSUURPPOMEAA|tr{AB|wNSNMOPNIC=AHMQUWXZZXZ`bdoxyINLKNJA=zuh][aaZTLFMRV[ZRIDGKOQQOMS[WSUXTRSTVZZURQRSY_a^[XZ]Y[hoie]Wahikmnnpsyyqnokc`elrv}~{wu~GKLIECCFKKF}twwwurswDDCHKLIDjCCDE}skgbahs{FBBGHFEGGGJNQTUUQKHtmigkpuxuporskcbeljb]YVUTTRU]_acgigjopllkiecdcaWSXWTVVXYZ^^afkmklqx}}}~}um_YZXX_gffhmqqled`\`cccaaegijjpv~rhfjkhfdb\TT[_`ZW\YUVZ\[ULLSY[VPMKKHILPSWZZSTUVTSRQQOMQRMHOZbggfntus{sjb`]ZYWWVWVTQPSQMGAAD}{uic^Z^ca\VTPHCPf~FIKOUZenrstwy}GKLHD~zyxtx@CEHJKMLHDBxwBGHFHJLKLNOQPOTZVOLNLF~vmfgp|EtvDMROMLHze^gwF|sjhvKIzyHKxuspmjhhiecccbcglmklpnhedcXUVRJE;3897@D8,-8?DDNVR@>EDEFCEO+-/249DIFMOKNPMNRUUPOV^XNMRWUVUUYZ]__^WOJHHFDBDG2JLJFEEFHILPOLIFCGJKKKHKIGLNIte`RHIW[TRV_cWJK=>?AB@>ACBB@AFJHFHKMLJIC7[>Mb`PR[afld[[RU[feU?C`rdVUSQEHXSYZ[ct{scPHKF@Kct`Y\YRTfpie[JLfmfbfk|qcccZTdfbjwDffo|sqoma\`\XURNIBEGQqt`_l{teXWRVWVK>??@FINXSW][[anla]YN?@MW]_]a]UWUMIOQVWX[_eeYMJHEYkelma_]bhhdVPZ[SPS\^UU[PNVM[cbgwohqvtcZedajqyCIteb`bib\nv\botfRGVCoJX`^U\f`aodKTeWIcj]ewnZ_szo`\GEot\PLKSPMW]TONPLHU^ZSXU_wkpwgUKEBC@;fZ]BWZTHKGDGBDJNV]SMW]^_UPMKVZSPSNLHNa[UOBFQSIC@>CJMH@;:38>K.,G:.WXZ2229K]34325778999<>>=:778:723yeccd3689744675577788:;:9986542136877632455459=746767897f`c32d34dbcefccba`aa```abcfdb][[\`a^]\ZY\XYZ[^_^[Z[[Z[[[\_gmngb^\\] ^\[]afjlhl.+)**)('&&&(**-///-,-+)'&()((*,+*('''('##$%')('&(**'%$##$'**)))&$')*,++---/10420--./1210///.,**))+--./010/-+*")(*+*)(&$%&&%&&&%%&''&&&%$%$$! !$%$$#$&('&''&&%$%&''&%$%&%$$$" !! !!!#$$%'%))(&&()*+++*)))(''&%%'('&(*+*)'%%')('( ''&&'%%&''$$&'b((''(()*)()*))**))(()++(&(+-,+(&&%&&'(*)(('()(''&''((''((()))*+++-,,,+--+*))+,,,**+,---,+***-0110.-.--../E1,*(''(, ,(')(''),,*(&%%$&*,*)('&&%$"###""#"!##""##"!#&)('%&'(&#!+ $'(($#&'$#$''$ #$"! "###!!!#$#! ! # $$%'&&$$%&&',&'())()&!"$%&'(*+(&$"!#%&).,('$%'&&&'')+(%#""#&&'&()'&%&'&'''&&'()*)))()*)'*+*0+,,,-+*.+(&%&&&'*++))+-,*,+&%&'*,)(&&%$&&$$('(J))&$##&&%"#'*'%&&(++*)))(()+,-.-,,./01/...-./.-,,-,,,//../1100.--.12.,--./ -,,.-.00/./0/ 00///0001211!876679:9:980.,+**,/0,***(P'&$%(**'(*,+)))(%#%)(%%%&'))('),-,,+++-/.*/$."%("!!#$#$'%!%()( *)))'""$')O*,+-//.*%'-,,.00.-./12145543323312444533345443124432356555668766541//12334310012W1100.,+**+,,++,-,,,++**+,-./1378520//.../00///0/001/+*++*)*+*+,.*())*)()+*)*,.,,+)(()+.,U/120.--,-/0/+*+,-..00013//.,+-.001/,*)(*,-+#*6.()(')-...,)'&%(,0.,-.,++)#'!**)((('%#$(-/-,,,*(%&(+*'()))(((%"""#""$-0..0Y33%!%%+3'&+('%&+*+1-'$##%&)+))++'" !# "$%%%$%#""#&&$$""%)+-//-.0254430-.43**21.-,,,++,*+,,+,...0,)())*,08840/0.-2.,*'&'-2,&'**)++(*,,+*)').2761-*+,-022257568679899!""  ! 67*&,33-)-..*$$#:3$./00.++/0,&" :3-*-/41'&4BB"%%&)%>:>CG'((*+*)(+.13210110//1146521321/-,+)(-2132.../,'%&F?=D&'GBK./+*,,,*% #'),02231/0467>DCE(+('*("!B>5,&''$" ")-144/*')*,--+*.20.02/-...11-,,-.1453103411:?<92-48789989<@@;:<:745:?AEDB@>D')(&$##%((%?:=>=;9:=AF##"D$''&GF$#EH#$$FDC?:60/4@@>986356542468:;:<>AA912763221.()-00+(..+,...($&,/0-)&&%!!!"$&)($%%)+,-..*+02,'069:88>@>>FOOHA;88754001442..00/+'(*PMNIA=;8863-*2>J(*+,./5:>?>=?BDFGGEDF%()&#BCA??>;= "#%%&''%$$@>"%'&&)***+,-,+/42+(('$FDDHHDEFD?;66;!'+)((&A3/5@HK&KGCDFGE@;:AIMOLLO)'LIB@F(,K?>?<::9:;988999:9;;7523-('!!''! $'%''$$'+,)(,1/)'),*,,,/01232/*'%%$##D#%&('$###$%'))&%$C"%'''(&GHK('$'*'HG?75,&'14/.4:8/(O*)()-01'###$!&&19:;9/+,)'&#"-8;3"  #$$$#"!"$%%#!&&'$#/*4.&$%(+/41-..158<99<8697000.-.296,')2622359>=/%((+0./8748<9.*-0-(+00231,&$#$%##""%$"#%((&#;;? #&$%'G8;>$(&%&*,*,+IB99?J)E()0;2/19/JD:78;?=45D&?13A!3+4;0,2:%(EA:21:=:=C%>+&9H7)% (:>7,,5843897-%%+4<<97/+& &44**02583./)*-45-0:/')*,%(4-1227AD>5)&*% '6A3.01,+5:53/%&584258B:233-(35149"D22:DG>;::3020,+)%"%:=/.7@C;4--+/10( ###&')/*.3002:921/(&*.0031,,,&$)),..1142+%$# ,83560.,/343,+00*),23-.2*).(2745=94:>?4/7748:>#'F:321372.:HC/1:<4*&0$6'/20(.611=6&-8.%46-4>7+/=C;30#">?.'%$*(&,0*()*'$+1.)+*0?7;A6,&#!"2-0#-.)#&%$'$$'+05.*1322,)('/0*(+)(#&2/,*"$,/'#! #?(+'! !$(*+*)(&# $%%$-,,, -*,./--//.-,+**+*+7-//.*((),,*)(&&(&')*,-,*)***+,,,-2650.,,-.,++*+**,/2452ǀȀꀂ~~~׀ ׀䁃ÀȀȀ /ƽ܀bľ҄Ѐɽ¼ϷȺӀ¶듰½ξǸ˿ü€ĿĿǵμ澹ͿŽ¼󅖜Îշȿᅐ򈙤󒗙öƔȺ³ɿî܀îɼĺѽԙɷ÷򉠹ڊżƱ˻´³ȿñ聜Ž¶퀆ӹʾí®¿ѪǠǷۀ̼ĸޱܹĴ¼˾ÿȦͼȿ˜ε̷ķȽ̪̺¼»ϛ놪g)d^ZYXXWWUUWZ^ak;rkf`]^]XTTVUUX[\]\XUSTTSRQTY[WX]^[VUVUVYZXXXWXXVW^`ad2edf44ge23577ljf`^_dilkjjjga_^\[\^]\\]]\[\]`bdda^^]][]bb`_\YWWVWWXYXWVVYYZXUTOKJJHD4V8EFFCBEHLMKFGHJIHJKIILPUVTRPOONMJIIHIIIHGGGFFHIIKL;MPRTUVVUVWUVXYXWSQPPNLMOQSSTTSUXXVRQONNLLOOOMKKLNPOOSWVRQTVU VUTSSUWVTVXWXVUUTTQNPUVUSOORUUTSVVTQOPTVXZYWWWVVVWXVVY[YVVWWX[YVWZ\YZ[\\\^][Z\]^_^]ZXX[`hmkkd^Z[]addcchm7i334542b`\WSPPT\e664c\WXXX[\YURSSRS"UWXYWVVWTQQPOPQPNJILMLIHFEFIJNTYXTRTSPONMKC>?EPYhoe]SJEOYUJJPI>o;20;@FGGGHHB98?JRTTSTQPSSTUND?BGIJNQTY[YYZUOLMUXVW\_a]\^^^_aehgbbddedbbfghecacffggb_`a`bbegecaacdebba_\WVYZ[\\Y,VUVVUUVWXXWUTRQPPQQPPRUUUTSTTTRTX\]^_bdc^WVUT:VWWXXXWWXXXRNMMNONMKKMOLKKJKNLMQRRSUVVY_\UQOMONMQU[ba_XTQTV URRSUVX[_``af4675f45`ZXWUX^[ZYVRRRO?1?NKHHHGFIKMSVSPMLOUXZ[\XY`\WN>>KPQONNNLLNID@@?@HSXZYVNGHJMMIIKLLJIJFA><=CDI[a\[]hnmldPQSSX`^IHPROMKKOPUZ[YOHGGIKMJIIHGDBEFC8147ifiaVW^ca^bg56dO7GBkGPRQNLJJQPKF@umsrv{yxjPNlz;97`UVUXZ`foAFJMPNJLNNQTVWSWZXVWUUUSSSTTPJDCE@iJTUYZUOJKRZ^_[URSUSSVWURSW[]^chla]bc\VSU[]\cfa^bYOFIT]bfjmmmh_`ehpwy}~IF|ELPRRPJGEDEFDvolovvw|EHKMI~tnkglrnhaVZpFFGGHII}tonljd_]^__]^emmkpuz{qgflgYTVVX[5ZSR[bbdba_]`aa`^[]_]^ckkgec`^[\\[WVVW]]_egioy}ysmp{~Fwdcjmnqmb\\`ada\\XUY`iklopoqoorx|{}~pkmjaVQWW_p`Uaddc\RMHIZ]ZXWUSRVTUMLRQQRUWXVWVPOOHsgPabbadkmjipwvsqfbd`VNKIFIONJHF{}vicfcZQFBHKGxtt@MZix=CIEH`y~wwz}|xxvsr}HLD~{tieisx{}}@DGHMPKFBEJIGDDFHLNMLKJKLKLLJIDytrqrzCEG}slkidjHVPHIJjfuztnov}ONJKKMMJ{pighggilookggfedeifa]`ijimpgjsbPE::;=?>AB68CG?6>;9EPSWVT/1-+.22234;EMQTUWVTQUY]`^VOJIQWVWVVZZZ]aaSF@J]c[LDBDILJFGKKJNRNIGGGEHOMIJKJIMKJNLxldXJR`[OPVOFQZIENKGG=AJRRMLIIH@845ESanmh_SOW\_]0_=GQc:@O^gm???EGDCGHHHFBFMKIHGF@:CNQPR_fUKLOYa^[XTSSX_dgjuylgc\Z]^`cgf_VLKU`^WY^``YOKIFGEIQSSTTY[UZ_\PKQYYUZ^_[STPJJIGDCEDBBAEJNTWJE_thnwkcbZUXYVTA>T`_j|wjYJ;K_\NER_`^[NBGNY`_Y\__`b^UJAMQLYgcZYel~vUSVHB[ndctbHTea[inbW^ifclnxl^knZ^eWRkrv{pyzvii|}ujbaZMCAIURQGK^\X\Zn}}w^aLIUrt[UNFHKSUTSVdmkdZOCK]]__`]RRai^PQ[]ZVUSLIR_msdXVLDJQYXT[ijcimbMTaWPOTTT[[XUWVRSX\lc[YZ_YZ\[WXmzCze_klea_^_baklavcIIE;IUTVXYRL_yaMMSJDYbRQiuqri^^UPY[``b^_][^jl`Y[WVF7EQIDRUNTRYl|lQMPROMLECTlocURRPLEJSSW[P<=N\b]XSNONMKPQOGCTYQMKKE?FOOE?ACBA?>?BEMHMTXSNMNQLD>3.>^51VPSG1FK.@OZ_021256899;;<==<8767:6333453ccbc2579963d3679866789997434326;;:986676667721345Q65hb35443edcehfcaaabdbbbaabcba]]]Z^a`_]]]UNV\\\^`]\_`]\[[^bcbfnkb`\Z^_]]][ZXY^dii1-*)('''&&'*.06<63/--+(&&'&')**+*)'&''&%$$$#%''%&))'$$%%&()'()(('%&)**+-,---652.,-.0110/00---++,--++-,,++,-/./.,+*+**-/,+*(()))('''(''('&#!   $&''%$#$$#"#%((('''&$$$"""!!"#""!;  !"#$$%%'())(()''(())'&%&%#$&'&%%&&'**)'&%$$#$%&&$##$%')(&&'*)''&&'&&&%')('()()6'''&%%$%())(&%%''&&()(&#$''()((()(()**))+*(()))*+*))++*++,+)(***+,,+)()+/101.,)*+./0/.13/.,*(&$#%)-,(&&(')**'&&'&%&&()('')'&%$$$%%#" ###""! !!#')(%$$%&''%$#"! &-7<5/)#&.*$&+& 9#)+,,($$"  "')(&%$#$"!!!#%&('(%&,,)&$%')+)&%$#%)+...,)+.,***)++('))()*)**+-,*&#"#"!!"#$&''%%&''&$$%&&%&&()))**'&%&'()*))()./,-+++*)*)(*(%%''')+*'&'))(('&%()+,+&%%$u""$())&%%&'**(&$! !"#$#$&**(((*,*)'&%&(+*(('&'*,,..-,.-,././/./12010//0430)(+.-,,-.-,,,+++--,,-,,./-,./110./0.-/1 .99;;:9W7,,/.--0/,+-/-+*)+.//-,)'++'%%''(''()(')+,))++*))'$'*,,+)(') m# #$##%$%*+***('*)*+'!!&&')*+-../0,''(*++-011/../022353123344324132366763244345786655578766530/1223310/00//0110/.-+-..-...-!,-,,./13357840.//.//00//00/./..+(*+*)*++)'('()))+,m--.21*'(())'*-0331.+)*-,--+***+,-/01224..++,,.0.---+,,,$!*(%&%&&()()+))(')-.///,,2.*%%()((('''(&#!'+,--+&#$%'(&&'(('&&$!""#.30-.49984(()(*--!"(*('&&'')-.-(#""$$'%%&%$" "" #$$%%"!!#$&''&&#)230..0,+/353340,,//*,00.,***+))+,-,+.-***+,-.-+,2303:741/,-.,-0//0230*&**(()()*--*)()-38852/--00-,-0235888:;;97"##"! 47 ++--*+/0/,,,*#$&>'+,*()(&,,(%!;5;<=@>=7)*>D!!!8110227:A'),-/-,---/253-042221220/0221.*)+&=$-3581++,,,+++%81:E%A3B,+))($=!&+,-04564.-035:>@CD$%%&''&# 4('''&&"'/0230+((.354/*)+--/220.-02458:<52562..03328;8792,'&,2469<<<72479=@@CDDJ'%C@B%(+,,*'&&%FF%%#A;767;;;?D$&)*'EBEGIHEEB=<[:8:=<83,0>GHCCH%HH$%''()LE@>=<<:5233115:?@>AFJKC97;8/,.0366249::;:97567896566337=?=<966545525569;><7446672020.05::8:;=>>>AEE?<=@>75881(%((/;0+3432-&$!$-.,*+*()-,+'%&"##$'+..11...)C>4:7545:=;:<>AEB<>A=2-//*+0/+*(KGGMOIDBB?=:6587/VSRR+18BI$'*''2BFA?>@CDB@@@==:4238<>@@ #%'*+(%"BB#&&$##&(*+*)))**)**('#@>AAADGFA?>==BG%&&JAT;88833%/+&%'D62;FKKKJJLJHFHHD?:;;99658742489899325+  ## %)+,+)('),.23/*&%*.,-++...156-$%261&"!"&('$$&&$'*(%##$#&+)&&''HH&(&%((ID?96/'J-74-.3.OL&,4'$.,(' #$!'.9852*()('# '$-25%# "!!  !" "###" "&&%#"" (*(*5;.&&)0421.+*),0346>C;74/-..02563-%$+21,.133.'$##$#&*,,-,.1.352+'*..,/121++)$##"!"##C#""$',.&:!## &,#;@@>98< ;6=<622//,8EC"<7<0(4=B&D:A>8<80,&"2<27>734/,01/- *1.4B=6.&%11(!*341/( #&-2300/023-(#(+'197107F4#&$%-+,./)&3D6)+1*"-3&%5=9<821++1.23300/..23/-0//$#+%!**%*(.:E;*')(%&(" *991++*)($'-,/3- ",461/-*+*)(+,*$!,/*(%%$ %+,% "$#1"  !#$&*+'$##$!# "!#&,,+,,!/,..-/21.,,+,-,7-..-+))(*,++***$ &*++--+*,-,,**-..-054//+),,***))(),043ǀрŀ耄Հр~ˁȀ k݄ۀǽǼȾ¿ހ®ـηƹ˿ɿ”ĿľȀ¿»Ȁºľܺބ콮DŽƀ½»ϾɈ̸˶ƯᏛþݱǺĺҀ;ſǶ⽑܀¾źɾ՟򓘩ȸ犍򃇁񁆅 ¾üƽƹ򃂃̽򄏖˱õʸ􇮻ǯԁ꿶ɩƮ̪з÷ݹүڀ鄌ǵ˵ά㿨»б­Ѿžֿ̪؆ȳǷ̽޵˽ʈ\b\YYZ\_`_^[YZ^dkkikga`_\XUWVQSXZ\\[ZXUSTTTSUUTUUPNTY\[USWYXWZ[WVY\_^]]^`cfeab334797776hfc`^]`eghhhihgfecb`^]^^^_`__a```^\[ZWUX`e"ge`^]]]^]ZVUTSSSRRRSPLIJMONLGGKKIFC FGHJIJKKLLLM)LNQSRPNLLLOOLKJKLMMLJJJHGGFFGECDGHIIIJKNRTUSRRPPQOHCIKJMOPRQPQPNKJKLOQQQONOQSVYZZXXZ\[Z[Z\[XVSRTUTRRSQPQRUXXX[ZVRQPONMNONOQSUVUVTQPTWWWXYZ[\ZXVTTUUVTPPSUSRSSTVXYYZ\]_]ZXV[a`[Z[YYZZ[[^abca^XS\hmo9:63cab_[XWWY[\0331]ZZ[]\YWVTRQRSRTVXYXVTUVUSRRQPPQQOQPONKIHIKLMQWZYTSSSQPQRTTTVZ\ZY[]bg67k`WQJGIG@<>>BHLQWYTPNOQSSQPRVWY023_XYZVUSQONMKIKLJLPQNNOQUWVUVWXZZYVTVWXVUWVSSTUVY[ZYXXYZ[YWVXY[_^^b^\[WUQKLQNGJOQRQOSXUQPPPRSSSTUUSTTSSRSUY\[[ZZZY[^^\XVVUJ9FZ]_10^\ZXWtWX[]^^\[[\]]\[YXYXXXZZ[[WSSTPKKMR\a]WPOQQRRQPOLLPUSPNNQWVRPPPQPQRQPQQSUSVQNX^^[YVUTUVWWWX[XVWZ]_dfb[WY\\_`^\ZVVVYYXYZYWVVWXWWWYYZX[```a_\]^__``///001249<8325675hfegiihhgfgfe3530///\[[ZYY]\YZ130../001210_^]YVTUXWTTWUUVVWXXXZ]\[XVUTUXYZYUTX]\]15732576689987679:96468769<=?=<:89;<<==8]RLIHC=@B@>;=CFHLOPQMKMOLG@>?>FGD?338=BDDGHB=>ENWXXVUUTUTOKHB=<@DHMQVUUUVVTMOUTUWY[^cdca_]^U@Wnfcdegl7iddfecabdghjigdcabddfeaa_^`cba`^]ZYYZZ[[XVVWVUUVVXVUTSSRSTSTVWXYYZ^cdc^Z[_`]\ZXWWWXZYXYXWWSPQRSTSPOPQPMMMJKNOPRUXWTSU[c]USQPQOOSVWY\YVVUVSRUXYVSRUUUY^`_cg455569;;7aUPOLRVTUWYWUTQOKGHKIGJLLIJJKNOOPOMMRVWWTQTXVUMHLPQQNKJJHGIGCA<38HOV^[WPLJHGJHFEFFEC>=EHRhi^WXdjf_SNYZ[]cZIJMKKNTUQPPSSRNKKOLFKMJIJLMLOLF?ACFHHF?>BFHJIGHFIc<:gRGWXYXZaa^a^YZ^aejkhca]\\ZSQTTVTRTSSTONPNNEDVed_^befgc^ZWURX_b`_Y]d`WVSSSTUSSW[WRQQSYflle\ZY[^_WORZafjjijr<:lmu?>;:HQJHJIHD~ykehzIPONMzebxFEyomnmjihdbafknquuy}w{zvmnponqsnnstogghgfe\SWglih_EGeg^\bhfcYOKB--AMNQVPLLHKQRT-*)-0234569EU[[Z\[UMMT`bVNOLINROQRRTUUSQNHEKaiZUNHFECACEEFKKNOIIGFJIGJJHJKKIIKLKKJFwme`WPMWUKD}zKPT__IHIBwAGT]YPCIHGMFC=CNP_ifbWQPPLGBB;C!B?3:ES^n=T^JGNNGBACEFHKKJGFGD?AGTVMIFA:>JT[\VRQMHLUYZZOEKQRQPU[^`ebWWWSW_dkqfUMPPR]d^WVWZ_ZOKNNKKNNMOUYZ]\`[UTQS_^Y\XURLJIKME|~DDzKJKLQXXTLD@>AHJHMK@u~BDHOW_VJFEDEGH{jFSHIJGSSNLRS|zqeo{~jdhqBAy|{ndbfluvlhcWg|tkxvfMUSMLUbZ\^]nxi[OBJROF?DScfmshRAS^SH?OZ^[O<@Q^jcZbmn^`keQNRLEN\^WZ__^guzfY_\HP[ajtj_[[XYenoheefikowocifRRTQ_snlu{xookrBKGzj`^VL@AKUTDLe\PUUihZWSZU]l{}mrmVRNPVKUm|dQCh=Ud]Z]`SFWjeTPX`]VMDCISU]jrf\YPJJQVWioYRcplbXQPUUTUTRQSTQWfro_YW]^\VV\\ab]ekkksnnojr}iPPZey|koqaPGGGU_USOLPHEgjN>;BKY_^guzvvmab\QLV][^[bXRnINlf{hXTQH;BLRJGEIZm~aVag_Ziz{`NAGYZWOHJHHLMKIIPTOJNUVLADIHE@>>=?AEFEFGHV^XOHKUSJA32H14200-UOT263_\\02245579::;<;;:874446667984cbd3566543e2458:755777669:;:646$9;:8766787687cb334433455dd4664edddeca>bbcccabeb`a`beca`bb`^^\[]_`_]^`__`b_YZ\^`bcfmkc]Z[aa^\[[\[\]`d)/+)))+,--,*)+.4:8563///,)())%&))+,+*)('(('9&&&#"%'((%$&''')*'')+,*)***,,,*+21/.--.033311001/-,,+*++,7+**)(&',/10,,-,,+**(''%$$$##$%#!  "!!#$$#"##$&&%$#%&%$$#%%%$"!""!! ! "##"#"$&('&'((('&%%%"$%#$$$%%&%%%&&%##$$&')*)&#')**)((*(())*)''&%'('&&'%%%&'**+-,(%&%&&%$$&)+**('&'*,+)+,,-,*)('&$%()('&'()*++))+,,*(')-,*`+,+*))*,---(%+023--.-+)(()**(&&'(''&%%$%%&%%')*)'&''&%%&&%$%%%&'&%$""##""$'*(&%$$##$%')+**+-1470+'"!$$ "!"$$$%%$""#$$$""$&&&*'(+**(&&$#! !!!"$%$##$&'&%&&')))(&'()('((&%%%&())(''(**)'&()*+**,+*)'&$!!$"!$&'%$&)'$&&%%&&'&&'&%%&&') (*+,*(&''!&(*+)'&&()+-..-,+*+*))(((+(&&(&###%*-+($$&%E$#"!$'''&&&**&%%&&$##$$%$$&$&"%***)'&&&'(()*+*))+-/231-+,../0/.,)**+,+,,+*)*,,,+,///0/,-.../0 [8768987667864,--,++-,**-,,*(()+*''(('(()**))++*(''&')***'%'+++& !" !""$$" "'+,,+)*+**&$#  #&(*.-,,-.,')***,--/3310..0&.:4331469634443345679997644667534445665554212223210110/ 00///.---.-.--./0.04553014421220m..0/-.,*,---.---.+)))((*,--//-,+-/30***))((+.../.,,+,*(*-.,*)+,-/12235'! !&+*+,--,+*+)&&('$&()))''()**,/.-+)+.,*&#&)))('&%%$%%"!&(+0.+'&&%$&%%%&%$###"# #$*661--3872'$-,)*.) "%$%&)*('&))('%%(%!$&$%&''%'%" "$$#!#$&&%%##33&,-/..34232..02477420.--,((**+*)++,-)()((""0;9544566310.,),1320-.31,,***+,)'*-+)(()-3783/.-.12,'(-367766; 94#$#"!! 459! 5469841-('+)1')'*,)()'')+-)"8;DBA?873+0?HEDA6108:68/1:F)..-000122-C%.01/---,*-2,B>AACA@J(*-151//011/01-%!@@C@=+1+)('*-.,-,,/5;?;200.037:87BA<630++./.,(%*0234476200124357899;;76<9644356578;?CEEBA@>:68:>>=;:<@FJECA<831210/46*'6?ACAAA><:;;835:<61027;:433110,&#)01/*(*,,022/*($#%(+38:9864/C28U1.0789988;BGB;4/-T)4;60+)++)'GCHOJE?>A?BKI>83SLMED/E*('**)(3AHD?;<;==:>?945>"# ?<=C$$A@@?"$%',-)'%%()'$')+++,+'&''((*,*&E@<::"'$?@FHH')('%GBB@733<&+)&&J?2/<%&IFDGGC><==;;;8657:;<>>AFD@CFBCF>9;<<;=@>>BB>9898983,-7:870!"1/('+11/(!! " ',-,--)%&+23*%'&%'*(**)+,,+)&#"&5<2-($""#"#$#$&&')&&$$'%#%$$&''&&((&&&%E?;74/,,00*'HDP+-,24((*%>#(&!#'2953-(('$  ! &-6,1$#()$  """$%$"!#" "+-&$# %,01.++)%',.00*#%))((+.//32+,+()/26:4)%('(03.++-01.'&''%%'(')-013240--,-53.0.,*%%%'(#<>J>58)*2+$)//0) +282,1:<3262'&*'!'13./2337@JE5,31$*025=80/0--5:;746789;@:188*+,(.<655)$$#-4+*''+%%==) #&.1.19=<>;440)'.1./A-2-):(+G87DI5)))$(/'!!+71 #),&$#&/:EC2-6942OOMLKKKMNQQOOQRSUWYXUVXWXYYXZ[]`][[Z[YVTPOQSUVWVSRQRTXZ]fg\VTSQGPOMNRRNMOQSTTUTRUXZ^\XSPPQQPONPTUUSSV[_cda__```^_abb_]^^\\]]]ZWX[_adc48;Q<:876gb][XXYYZ00//.[[ZYYXZZVTPORTX]ac_[XVXXVVUQOOMMMOQQPNMMMOQRSUXYZXURPQTTRQPQSQRXVXZ]\XTPNPNMPPMBk^\a9CNWWRNMNRZ^[\^^00//[WXYWWYYYWSSQNMHEHIFEFINUWUTVWX[\XUVWVWXY[XWYZ\]/..ZWVZ\YX\^]_\USTX^XTVWXXTSTRNLMQQPQRRPOPQSTSUVTTUX[^^_^[XXURTVUSPPSTM6H61\ZXXVRQT[[Z[[[Z[a``^]ZUUXXZ\]\ZXUTSPMMPS\b\SOKKOSUUSONOMNQQLJLORVUQOPQSUTPNRYTRYaa02a\WVVWXVSQPPQSPPSUVTW\]XUX\\ZWWY[[Z\\]^][YYZYVSTUTUTUUUWWY\\Z[_`^]^_``_\Z[^1223468:9dZ]cffh6778766655kijmlmmjgdabb2210/]\\[YZXUUVZ0110../021001_XVWY^1bZVSPPSXYYZZWVXYXZ[\]^_][[^_[_477423446;<84334775556887:<>?=<;:99:<<==:2SIIE@>:=5RPWZ^]Zbfd`^]^]ajomigddda^ZXWRPPRQNNRRRTQK>CBxphee\JDLJFS[RDJ\agi\W_kw}yAHMPRSQLMSY]YTNKKJLTU?YTXXYdr|AEJNQRPQTURLHEGGFFD>n?XVPPONOOPRTRSXX^kp`WWZ_hmorqsxz@AyegDE=95`^[PJLPSNF?DR]hlke[XZYWVWTSTTTSQPQQRUVWURSYWPMOQT[achjd]USX]]\^^\YZcknlhddeddcacjrx|}|yvtsrpsvroklotxz~~xuqtxuqjgijihjmojdb[RTahqzzxvx{{{yslklllot{~xqjd^YY^_[W^g`WR{PLOWWSRSY`_^\\^`_]afilkkjXMWghc[RTWVVTVZ`fhlmifghid_`cghffhlqvyy}zqdYZ^ZTw|^XVTlstpjcafkjjfgpv{}z{~xrmiqy|rebc_YSMOKM\gie[Y\[ZVUZQ==EKRY]db^]aglgTJXaddinkimmlovr`YTKJLLTRLGCB@{x=>=?GHHACFNc?VaQGEBDCHQIGNPPME@>s;H?HMHFCFSc`WLDDKOH91=S/24X[^/04632[RX0467659>;999:853259;<<:844568:;646y754689:9889:975676777654568977:9457554344432e3554edccca_^[Z_caab_`db_\\c59:jedbc`\\XY^``\^acde`[^`^]]abbi8l_[Z^ec]\]^]\]^R-,*)),0///---)(,1/.//00/.*(!$*))*++,,,+(&$&&%&'&$#$'('((**)+.0.+)+./.,,--,(''&_0.,-//01266544320//.,--,,,--..,+++)(''&'),*)+-,+((*+,,)'&$##$##"! ##" "##! !"!!"$&%"!!#$%$1#$%%%&&&%$$""#$$#!!"!"#!"#! #$$$%%%$$%&$##""&&%#"#[%&%%###$%&'&&'()*,-+))+*)*++*+,-,++*)'&&%$%&'(('&&&'(*+,24-'&&&'&%%&&%%&&%%%&''(((&')*,,*('&%$&)))('(*,/10.-,-.--, +++)))*,-...-,+)((&'')*('%$%&'*--+*)'('&&%##$%''&%c$%%&&'(('&$##$$###$%$%%$%())++*)&%'&'+,+%;423!%&#!!#%),++**'%&((*++*)'&%#"   "&&$#%&')*'% +&''(('''*+'(''(*((*,*+*&%%)-)%&'(('&''$"#&%%&''&%-&''&'()***+*))'$&''&$$&'!)((('$$&++*++*)*.-+)()))*,+*('&'&#$%&*-*%#!!$''&&$##""%&$#$%&''$###%'&%$')&$&)(+*)*)))(&%%%&&%$&()'(-/,+,..-++-/.-...0/.,,,+)'(()))*((()*--**-.+,,-,+,-1,.2446>8789778775221./.,**)'&'*.*()),-)'&%%&)*(()*)*+,---,*+-.+-  %&!!$&()&#%(*,,--+*+*($ %&(./,*)+-/-*(*-/-.4654212/'+753457888665454258y;=;8653321221245656688654432112221000/00011/--.--,,-/.011123115::72-/474135541//00/01/++,,-/.00,*,--,,,**+.011/--,+,-,++*)#+++..-.1/-'%*-.-,,**-/11245')++*)**(&%(+//-*)+)&&&''),,-++-+%$&((''*+)((&%&%###"!$'*.0,)('&&('&%%%$"!!#$!!%74259722((+*/4,'& #&'*-*'**((()*(&&$!$&''&%$$""!"%#!""$&'&%!!4 *)*-11/3652113017<954211/.--,)(()*)())*,+(!!+221/.---)())(()-/12100.+**)*-2.+-///..--02654860.//.--03660.4;!!95#$""#" 576 !!##  751/*(+7>*0)*/,)***";%/-# #"=:5340%!'('.5/&)26=A948>EFB$),/110-,/231/-++))//"/-258=EI&),.01/122/+(&'&%&&#:$31,-./..004<=3./15:=>><=??!!=24"#'&'%&(*+(# $,39;;60/11/00-,-/0.-,,+,--/.,-0.*)*,/489=>83.-02113430059;96456654336;>AEFFEBA???><;>@=<9:;=>?CEB@ADB><9>=1*0<>:4./332002477;<97899757:<:89:<>ACCED@81120.EK;44/=A?<7238<;:89>@AAABC@<858=?82251+(&&$&/551,+-,,,./+')%"$)/554469:6,)1347:;77=<:>FB52/,/1031.+))'ML()*)NKGBB>89@>:61S=;*E.1//467;=B@<>CD>1+/4410218A!@!#DCB=:>## @!#$&&$##$%&'(,26551)%&'((()+*(I@;2&%+=CC<:!(+'f')%?729G'I@>A?964356435::7;@@A@>=;=>?JLHLMB;::99;97;=>>86766;B@>@A=96-#,9:9<:6530,('+0335.&""! )0..-,+(%%%$#%'')3=82-)((()*)%$-6-&,($=9:<$+( !"&($')'&#!(*)+*('*)&*)GA?=964201.)'KEL/;@;90(%$ &$#!"+8:65-((&$ &!"-.6)"! ! ")$"&'('# 8&/2200,#",9?5-+%#%'*/0,(##*,)&',-/23/'(+*,3653*""%((,.*%&*2:?6-+)%%&%&*,-/42/,--.3:;2-)&&&D=$($%**'%#$'))(())-1,$ &))$87C###'05.# # #&"%#@;>===64" 56<9/-5912984:A9:FE3/.*(&"$2/,8C<,**,0.%"*-+.1;;*)*$!+5(# ,A?>FA70+)=H7+'++(+-,&,.-13000>G>3)%%,8=62(%.37=B:5436:85343.)/5035489;<67B$(*&D=50-)"&),+(+47,'%-)"%%+.0:>829A62:6$%(/9CI3)*').,#&066-).+05023-& #)*(*087-,1+!#,.28+#*30-//0741/+*-+)'+6(0B4.12+*-,/:@>1/2.08?$@6=JA/))5AA741-)()-/1/.*&>=+41%!).$ &)29:@8+,4>9(%37.-+&8CHF928DIH961'#'(#!%''&$$$A"#&-#!-6:0,060)06@JPTNGGQROMMS[]ULT]][ZXUQRUTTSRONNNRUVXUSTSTRPNMNQSUWXWXYYYZYZ\[\\[\ZWWYZZXYYYZYWWVSRUTUXsWQPPPONPVWWXUSRQQOLMNMOQRPQVWXZYZ\^_^[\]]][YVTSRTWXVQOQSTUW[.YWZZYVTUW[[]]\\\]`]\YXY[[[\[[[ZXXWUSQNMOW``XQSPNRVWXTPOKMLLKLMOY\UPRVURRTTSVTTY_\URRTUUXXVRRVWVVUSSVYYXWVTSSUXZXY[XTTWYZZXUTTTVVTSSRSUUXZYYZ\[XWWVXY[[Y[/012o342_`_`bbbdfgi56775b`bdehj5kiij68953b]ZYZWUWVTTX_20]ZWWY\]^122_SLRWZ[YSQPQSVYZYYZYWXZ]``^\]/][\^_b246876667:;9656776566889:==;77:<;<<=>==;6ZOIC?<>CEHFEJMNKJKKORJ@:789<<724;;;?DHMSKDCEMQQORRQRUVOIIG@97@JKKPWWTSUVZ[URTX]_`beedddgjhcdc`_begfhl,kkmiffddghifdcb`\ZZ\\[[[^``abbb`^\ZYWVWXXWUVWHXXXWUTTSRRQQPQUXYY[^`bdfhigd`_aa\Z_bca\ZZ\[^`\TQRSTUTROONMLNMLNORSUX[]\VQRSTUTRPPQRRPORTUZff^XSSVVUVVQOQSTTX^bdg56:>CA;::<=:cXWVQNPNMLKLLLOT^_TNCGTPMKJMPRSSROTTMFHHFIJHHIGGHHIJIGGDBB<6;AFMVZYXTSROPOLKK)ICBEIJFB@I\=;`bjmaVZTKOUWX\aa\XKDLONLMPRX[YXZXSMIJMMNMHCGHGFIIHFDBDDGLOOPLI]8;8jeb_\YW]aca^`c^XWbccdccc^Z[`_VQRSPNNOOONORPIIMMMLLKIHECCBEJNQTXZYYZVQRSRQTXZ_c_\^\\\Z\_bbdlrmc][]a^^\_fdabj;=9mk:AEDCEE?9nq;?A>:9<@DEB@@dQOZeqGNSTPPQJDCCCEFECFKIES^ZVUVVSSXWPOU[`ejeaacdgpssuy?CGFCog;6a^[RJJOZbfikh`_a[VTSUUUX]]ZWSTTROSYYUPPUWX_`TUaea\YSPSRRONUYSMOU[_`^]ahoojhdclsojhnz|wurpsrpkghjkrxxy|EC}|yurnkikkfaahpurlhefjic]\[bovxsprrnjga_acefehjjgcba^[YVF[52r[\YVSOORTXYXXY\gnnllmklkgehgfjoqlhcceb^\_\SLKT\```abeeegiga`cdachmnlifgkmortrlidOhXynxoiggfgllptz}yzyuojfdhnlilql]XXSOOSVXXXZ[ZYZ][XWVQFBFKUafaWSWahgiqzstvtt~{i^ciihg^O~yqpum`ZVPMLNLKNQPKCrlt{LhERirdYTRR[_]_gkplelrrng`afov{yzzxvxCB?@AABCz?FIHLQQOPQRRMFFHKKIvK<2CEpQMurvz@?HROGGKG}v{~GGyqokedcaafjmsqq{xtsrsmhrux}z|{njkligikmlkiijhdcemqjjmgcbcfhllorpmmmgceow{|?>=;lc\Z[./047885233/0JuztsmaVOMKKMJFGOYfe_[TNPSUXRHFIHEAocir~DGKRMEFEEDJUUMJJKMKKLIHJMKEGDyvpkjfa\WUOIHIOSarf\[PG~6255:;5S;-6xaa\RHLOIIFEIA756:IcbST_[]daPHCBA;CK?PcfaSNOJDY]KNX^hrxwmgeTMTQRLTcZPU]hjbb`WRSVUV\^[\a]\\\^``[X^WPSTOYv|xvrTJa|u`cjpp^KMboukfkmu}ra_dd`[]]VUTUVblf[SLE?CHC>DNGFPW[^amgY]ZdmWUqui_]gsw|wbTXdovmieoyt^PJFCA@@<;etACOMDHYa[dkbVUZ[clgajhSQXTV`kpfWPRX[_]WNJKW`\VXYXZSKA=CNLIEB&J\nn]LDCHB??:DU//00.-0332/00/148::79;<=+;:986436;@CCA?<8877:=<9;>84656754578:::899767899764345667986676433234G3fecba^]^adefgcdedc`ZY_egdba___a2`]^\^bd_]`dfdba_\Z\__`g77g]Z[]]]\^_^^\)+,+))*++,,-0.)(*+++*++*++)"!(*+,,,--,,..+))('()**('&&'&&((*/10/.,+,..,,,-,+)('&'--010/010/024467531/.-,,./.-,---.--+)))*,+)*'*'&)**)('())(''(('%$###""###""!!#&(&$  !"""!"$%&%%$ +%''(''&&&%#!!#&)+23)#!  "#"""#$""##"##!"#$$%$#$$%&&%&((''))*+++*)()*)*$+,+(('&%&%%'(()(&%%%(('&'+,)&&'(&&$#$##$$##&()*)(''&%%&(***((*,/1000../012/,+*())**'&')+)(+*)+..--,+-1*((*)'&%#$$%&%%&%%'(('())'$#$#"#%##%&&$#$%$$&')***)(''&$$%%%$#"##%%J%#""$&%$%&%#""#" #%&H?<=>@ #&%#""&+-("',+('&%##%&&%%$$$#$&')(''&&%$"!"$%&'(''((())++)*)&''(('(('(,'%%'&'))%$$#"!!$%%&&&%$$#!"$#$&(&&())*((*,,+* )&%%$&(*)'%&'( &&)*)(&'(**+*X,.--+*++,--+**)''('&%$##'-,(%&$#%'('%#""#$#"""##$)+'$&('&&''&(&%'+(%$%(()**)'&*+*)('&'**)((*,,+,--++,,-,+))(()()(''((*+*))++*(''()***+//001224433//234567X1/-,,+)*)((*-,+)*,-...&"%(*+*'%%%$&()(()()**+-..,-,**,-/ t&!$!  $%'*%##$)+)()***+,% " "((&(,-,*+,..+*+,.00244322355345325664689;<:753356554100231124777875420011210/0010//./1223453678753342158863112101/+)*,..-,+**('())*,---.021.+**+,,+))*+,++,,-/672-+,.-,+,*)*,--/2435*)+,*)+*)(()**+.55,)##+*(''*+-,,,+--($%&$%&$%&&%&$$&%$$"! #&(+--,*))()('&'&"!2#%%# #.028:2+-*%(*,,-02/,%!%''%$&'*--,,++,,)%#$&#!$4''%$#"#"%)*)*)'131120--13421241-+3323321-*,/0+(*+)x(('(,-''+,,+*)''%$#"#%'))-../1-())('*,-13/./-//-./0/16;94/.01/0014655786!#!!#"46  !! 1.1+( :!)'#'((!#*,(**)($ ;=>847646761-(18=?AFI$$&'*./-.,*,1567530-.,+-'2++05?I(.11011,'''&'('$'+*'1740/00--10+*-047:746779?@??A"%'&$60v&%&&&(+2678885661/.-//./110.-..,+.21.**-./45--686330-.++*(-0,)+.1320/17;;98549><87;BEEEB>==<<=<976899>AA??D$#CCCA><:9767:>?<863377410/4=AA><==;975557888:;:8766410/)4D6421.+,.0221346@??<;<;8785/**/355677876886336756:=>=;98;==?><;95+>7H<:8558;968;8.,+&##&))(()))(),,(&$!")142/.17:9;@@?BJF<8;<<;:5+HKIFHMIA@>;973-)+--*%ACIJJK-='-:?60,++0311446516<=95127<>?=@FB><<@""@ ! !!?;$'&(,,+-.,+(#D%(**(NGCEGJKE=%%(@O/.K=:?BE#!%,+&%'&@:>AE&'KIGB=:84455579;?=;:60)%%$$%%""(0850-)&'*+-*##&%#!9238@$&)t/*#$$$#'/.)&%$%$$&$#%)'#%#?>=;;96410,('',/7A801+&ID"& "!!'W<52*$'($$"!"$#(*+,+($$'$#&+,(" !!#(-/0,,-,,(&& ')-/*'&&'((*,+*+011,#"*26:<5,'%%&&')*)%%'')./-))(%'&%(-,,54.+*.5;61,'('JGA<@BH+*)*(#!&*)(')'*03.&$())&D#&'&"%,+)+*% %&>"$DB$'(*&!'-B!)$93/6>?A@?;85'#"#3427@=/*'+-(%54))1.052)$  ("+38<>86+&1882...86++0/*%%-T8842-+=RA1*$%2<:96/34228:9558<5//34*'5B><63898<=8?$)I89>A9,! +/1/--./-)(('&&!!(&)+*.1;E,+575,(+($13%&+.5:=>866+)/,*&*4.').45///+((*++/0,,0.,-.0220/1-***&+=?D=+$2A<028::0%%06:5258@D<10662./0,+++,493-*&#!$'# %*%#(,.01:8-0/5:+(;>60/4>?BA5,.7=@975;A=0)''%$#"! 6?#$,)!%050494,+/04:63:8,+/*+3:;6-*+./10,&$&.40,.---)%!#+*'# #-54+!(,0/.-,++,-/011//0/.,))-/0---++)+**,+-/0--/00. ,)*,-.23-*++,-,,*рԀ؀€뀂р߀~πրˀ쁟 hĿû݀¼뀅b؄݅܀¶н_«ćƀ¿ſ»½ĽŲかӀ¼눋½ۀ뀉ခñ̻ȬÀ§񓧩˱¹¾ǿ÷稁Ž¾ϾijĹ۫뾣䙻ə披¼倖ɼQ߄ǹǺ™ٛúîĮ׶򆐏󂆀ν҆ݺϿϷļĴŶƹŰƮ̀įȸǸˮƺ໘¹ϵŹɹȟٹȼǷĻ޼´ûȹó޿Űδîںg][\\ZYXXY\^^]\ZXWXZ\]\[\[Z[ZVUVW[^`ab^[_a^[[\[WWXXXWXXZ\[XRT^a_[X\abccba_\Z[\]]/11_`abbc355ifeghhhknmkjgeb``bdede3ecdfgdca___\YXABDGHHILOPPOOPPPOPQQOMLNRTRLJHFGMTW\^VPLIGEFIIHIIGEFHHHJLNNLJKMNMLKOQQRSSTTRRTUUUVTQPRSSTVWYYZYVUXUTVUSTWWVUTUWUSUUTTTUVTRRRSSTSTTSSPNOQQOORTTUXSNMNOPSSSUX[]]\[XWZ\]_^^``acehie`\YWWZ[[YWVU[]\_``eededea___`244dc^XVVWY[ZTQSVXYXWVVWWXYYVRPOMNNNPSQPUWNKLMLKKKNSVWZ\]^^ZVTTSSSQPQPNMMPPQRQPOPPPQPOPPPMHFBulpwyAJRWWVUURMJKQVWVWUQNMLIIKJIIIMOOSWVVZXURPONMMPQSVVVWWVVWY[ZZ\]\[\\[YXZ\[[ZZYWVXYZWVTSSSROMNX[YYYWUTTSSQSSRSSRRVZWTUXZZZ\][[ZYYZZXWUUVUTSQRSUVVWWWY[]]aa\ZX[[XWUUTUYWTPOY`abca_^\]^][XTQTX[\WNNROOV[ZVSSRRUWTPPPQQQWYSMNPOOUZYV\\VSP#PPQONPU\]YWVUVWRPRWYUQUWTPPPRVXWUUSQRTTQNNQRSROORROOQTWUTUWVVTSRQQS:UYZ\]\\.//000bbbdddba_]_ef]X^^YXYZ]`cggf58:;95`YWYZXVXXVUSUVVWXWY\]^`24_QNQSSTQPQSVXZZZ[]/^[ZZZ[YWY]/^[[\/1234668;;:;:86677644565689832356228===<;:97`PGDACFEEEFILKKKHGMQK>9759@:36>FFDDEFEHC>ADKLJGHLNPPTSHGG<46AKPLKRX[ZXZ\__\][[_cb`a`_bdfhfb`][^`_^`gjjklkifcbdcdedcdb`_aa^]\[\^^`a``^[YXWVWWWVVWXXWWXYWUUTRQSTSPNOTY__]^`bdcaaded`\[XZ_ddd`]\[ZXVUTTSTUSPMLPPKIIHIMPQRRUWWURNLLNPPPQRQQSVTPQSSQTZ__YWZ[WTSRQPQRTTT[dfd47;=<>?=<<;;7^YWSQRSPNLJLPPQZ^TLKIMNOQQUUUWURSRSROMLGGJHDACCCFGHGEEB@A@;59@FKNPTXVXWSQPQPJD==EJGBAH]8=6acihc`ZRQTZ\TOQVTSRRQPMD?EJOUZYYVVYZXVUURNMLECIHEGIIKLJGFEKQQPRSSd973_cki^UUafhfdfffc_b`_cccdc`_eh^RPRNNOQQNKLNVQLNONNNKIIKID@DJOQPQQKJVXTTUSOQQSZ^_\XSTXY\_^Z[`ed`^]_`]]b_[^bdj:=:mln;AC@CEDA;df99p9:9:=CD@>;6edgigj7974]SPUWOOKEDB@@?AFGFFEIKJIJPPJIJLOH{{|cUVVmzHIIJMSVYYXVPPV\^``a_TPRJJIIT[P@ndgxyxIVVQPNGDGIJIE|w@FGO\`_][[WQORTY`gnne\]abdgmvEGJLLKD;7:<953g`PJOSVZ\]_[UTUTSSQPPNKMTTRPPSSQQSXYWVVOUT[e[Ufomkkrk\WUSPUVQKHQ^_ZXYZ^ba``__frnijilorsuww{zqmu}~odgnsstvy|{{yvqlke\[\^a^aqxw{|wrqonfemuwtnnleedZTUVVSRUYYUUXXTTN\L0/=@B@>^>GScaZSLIOSPPVXI;@KMNKOV[^bhnhUOPPIFDINS[XRQRVTQSY[YR[lmkZKP`dfty]MRUSNLMNLLLIGEJU`bWVTLJIFISPP]\VPO[hm_JFFFqhqHMMZbVONRTQLKKFO`b`VPPOLJJGEHLGEEFPXRHIIEA@{FLIHHMSNMNIKBm~d\ltmnodh{DHE{jg{|uuwwp|GJEG~nnbY^fcbc_sL~>>]QEU`\l{_MAGWSJ[j]NMQRT[dXLH?::>DGKRei\Z^eb\bnobXe]\]^^Z^``YWacswcS[fUNGIIQn{ofVTRUdrkn}~ieiaPROWju|ujaWdzuwM|c\]kzz{dRPR\`]SPSONQJ9CZPDBKWYWZgih_]ot`HISZZMHRRLOUTV\_ct{kaYX\_]`b^^_`eg\\XKQ^]WSR[_][[`^XQ[hJ@c`INXY[q{mhpmZS_vj^^bdZKXs``i\Udt{`LN]c_XXY]UNT^^XXVJBC?qFQKMX`YPVWZYNERjaZhe[QSbhmwkXY\diZUNTbpzn`][^X_aQL@njr>>=8EJGMRLKSTTZfbY^iR:BQQHQTSMADOZa__[SMZ\VSV\ag_QGLRJEDB?BJXgaOE?;;=>?HSWZ001452/.002679==<;<==;;?B@<86521469AFDC@<>A@AA>:::6#444551`0149:8778766789987776346677654434433443456664452``aadgeba`3_^ab_bb`]\Z\abaca``db^_`_abb`_]\```bdfjf`YX[]\]``aa+*++*)B+-,++)((()**))*)())'&&'*+,-/-+./,+*,,)'(((&&&'(('$%+--*')+-..,+*)()7()*,--200332223232/-+**,-.,+-,,--,--**++)(('&&%%&'*))'&$##"#$%&'&$%%'**($ !"""$%&&%$%"&''&$$%(,)%"" #(+./+&$#"""!! !##" !$%%%$##$$#"#$$&')('')+*('&%%&'''(;)(&&('&''&'*+*(&')'&())*)((''&&'&%%%$##""#$%%&(('()**+(&&%%&K'))*+++)(*,--,-//./021/-++**+*(''&&(*,,+,///.01/-,,,/-*&$$%'()%"#%&&&%%&' $###"##!!$#$(*$"$%$###$&'(*+*))'&%$ +#"#$%&&%$%&'(*+*((&DBEGF$%&'[&# !&)'&'&$##"!"#"#"!#%$&('')(&$$##""$$%''&''&&&')()++**++*)((***)))''&')('&%%&$!#%$%%%$#$&(''&%%(*($$%&&&'''((''))(('('&''(S''*++--*('()('&&&(++*&%+/000/,+**++*)&%'*++(""&$#'))&$$%%'*(%%%'&%()&"#$#"&++(,,(%#$#$',.,+*)**'%')*'%(*)&&&')+*()('&$%''&&%&'(%$&()))((('&&&%$$$%%&)*,,+*/./13222011561-..++--/024551.-./-+,,+*())(((*+*,-.//.%#$%%&%$%&'()))*+-++***)*+.,***%*!" !!&$["##&**(%%'))(*(!')&%*./..0221/0.-011011002354332145323678::996423346668754555443345764320/000///011001000//.///.,,.1664224443356630//0478863210-++,,--.,+)),,(&&&')+++,--.-+)''),+)))***..*+,,*-032/-./-,,+***+,--06z74)*+))+-+)'&)..,13.)(')))**,-,..,---,)(($$&&#!!""##$$$#! "&(((*--.-+*())%#$&$! $0014321-)()-1,)),)('&""$%(,++**+,+))+)'&$! $$#%&%''%"#$(+*)+-,5-0660*,3786566732310220120.261''*())*+)()*.-+,,,+*'%&('$!#&()()*$"*,*))(&()*-01.+)*,,./.,-0320/011./4302446669##!!""!+,8"",,-.,,(&&+-*)&#%#!""$'())'()'&&,,&&&''"BDB?@GEB4./0>EK()(().14452,.2546775*&&""($338B=:'01.--(&'*+*'DC&)(.564311.+*+-/37;:4025778;@DF%(+,+)$))&&+./02243./00//-,+)')-.+**+,,+-01/./-,0792.8>>==A<31/-*./+'$)23/...25434447>9468;=??>>>BB;7:>?825:=>?>===;9;82224666513>HE=;=@?=><;66;@@=::95550-.//,,-0/,,-,)))0+#"(2*#"&*,023447635;CJICAA?@A@CHIKNLIB9640,,+)*035;<987656::;9678@:7765689=>=?>;<>98>A>:<;859>BA97>BAFLNMF?<::@ID=CGC=4.5==:;;99;:::54888>I)(KIIGC=7:>===9:ACAA>@B<82,(*/)""$'+./-(')*,.*!!$%"86!'*($"&((%'&##$'%"$$"! $$#"!"#$E>>>@A>:741..,+2552,-0+'%$$%"!"( %" 331+%#(,*&$ J' (22.)$!%'$%*-% &((&(+./2684)&''$" $(,1/***-+)+./-(.:;9/&(366>A/%()(%#%&$#!%,33--,''&#&,**43/*(0;=2%#$%KOI>7:E'*)04-('*,*''(#(220)&'(&%%$"$'$#$$).+#$&# =$(''')+((+%=?2.7=:<<35A#%%B63?A===>:BJ%&F$'B7:50496696?+C0*#.408A1' %1-%0<3'&+*)090&% $&(,8811153-2:;1,733311010.+*2399@>/+2@MH6/046.%+DD7,-5-*5=C>/%(262,,./(%+0.,.-%!$#<'/('.40*-.0/'"+;4.86/()367>9./3790-),4?E<1114144)'437&)%).)',--074-18))("'*+)!")/22380*&.1.,-2461)"&,'$#! #*1," , *G,-../10--,++,,,./,-.-+*(),,-/.-/21...,,/0/-+*,--/1464/*(*+++--..πހ׀€~~~π~~~쁇ˀ ˀÿŀžр܀IμǿưoĄ º¹˺ႇùŻ¼ǽſ倌Ȭ;󅈈ïôȵĿط렾߼؃섆炃޷ՒŷȺŭɾ꨸Ӂ¼ħɪĩǦ틇ǫǿπƼ»ݭᙹˮʲĸӼɾǷƻͿŸڱµɷõ˲ŻҶɿÿ?ľǷȺеK]Z\_]ZYXYY[[ZYXWWXYZ[]\YXYZ[[ZZYVVWYZYY]___\[\\YWVY\YX\^[Z[WTSRSRRW^acb``\WURQSUY14555422356kklkjjjklmkgdb_]\\^`ceeecccefdb`^[ZY)[\XWVUUTTVWURSX[XUTQOMLMLMPRQQQSTUURMJHHFEFHKLMNOPPQQONLKKNQUUNHECA@DHIGDCDEFEEECDCCHKHHHFECBDFHKLMNNMMMLMPRQQPQTWYZXVTRUXXYZWSSSUTRQSVVUTV[^]\\\ZXWXWXY\[Z[YXYXWVUUUTRRRSWWUUVVTSRPOSVTRRTUQPORRRWZXWYY[\^bb_[WUUTTTVXZZ\acba]YWW^aYSUUW[]]_cei9;7geebaa^\Z[XTSSSUVVUUUVWY[\[\\]]\ZXWVTQQPMMKKLKJIIKLKLLIGINTZYZ^_\XUTDTQOLJMOPPNMMNNPRQQPNMNNNOOOQQONQRNJIIGA@@?BP\^YVWWWVRPQTX[YVRPPRQMJMRdONPUVWWUTSQPNNQUWUVUSQPSUY\]\YX\]]]^011/\[[[YXVY_aaa_^XSTTMEQg31211`\[[YVSSSTWXWYZXWZ\YVY^_]\]\ZXWVTRgSRRRQSVWXXYZ\`cb[TUXUTVUVY]cb`c563aa``ac`_^^]][XZ\YURPQPPTZ^[UTTRRSROOSTTRSX[VRQQRSTUWZa]VQNMMOOMMPTUTTUTTTSPPRSUSRRPQVWUUTOMNPQQRTVTTTSSQONMOOPTURONPSTSRQRRRVYWVWY[ZZ\]]__]\]^^accf5f`[XXVQMIIORSV[^`bef5676h_XWY\]_cf`[]_^ZXURSVZ\YX[a]bcYNMORRSSUYZY\..01231/\YWY[]_1122211345689:988899889:941355579953454335668<>=;:::972XLFEIHFGLJHGUIKNMC<::;==:6:EGJNMOOME:=?CHIKIILMJHJGCFBACEJOMKMXdd_`baabfd_`ceebaccbdeeeb][\ZY[^bfhgfecaaa`adfecb``abaa`]\\]\[ZYWWWVWXYYXWVTSMJQY^``^]`a`ba`^\ZWY]`a_ZYZZWUXZWUTUUUTQPtMJJKMMNOMNRRQOKILOPNNORUTTXNLQSSUVY[WSUWWVWWTSTVYYWX]bcf69877;?@>9797aYUQRVWSQOMQSOOTSONLJJMNPTTRQSQOQSWWUSNIKLJDACFGEDBA]:48=BDFHKNQQPPQUYTLFABFGGHM`77984365c[VXZZ\]XPNMIGMPKEAA@EFHMRTSQSXXTSUVRPNJFIMHFHHGOTOJLPTTRS\k85aZ`g^\cimppon88gdbacfb[_ghho;lXQPOQONOOPPJKOPQSTSQMJJLKGGKPSUUUR>1?OVYYVTTWYVV^_[WWY\``^\]__\[[[\^]XVXX[_`cj:<:kbf:@A@CGJG=47lgj99ll>DE@<9654eed3576[NPU]_^VJLMAonp:@EGEABEDA>@vwFOTQLJIJHID|plhmxGJJLT[XX]^]TPRVVX[]`Q73;@@BLYbec[SNIEIR]^UQNHFJPOH@=>ACWd_]\[XWVWYZ`jmmh`\_cilhhxEGFFGHGB>;434`\\XW[^`^]\YSQPOSTSXYVWWTRSSQNMMNQROPRONNKKPVTR]fehe[TMMOOMR[`fjjg`\[ZWZ[X_]PS]^]\`bddfknkjsCDAB{usrv{~|{{yvtqkcbeegklliediotvxyzzz|vjdehmnnnhcd`VPOPQPOOQPORRQQK@6-:QZTKGHPWWSQNNV\^Yas}wqty||ywx|od`YTTZ^`bkmoqme_`bcgkloqppuqjgcbefglmkihlsyuvwrplhhsvrklwvomlhoxvrtv{JPK{toihfa][ZWUWWVVXWSONOPPRTUX[YTRXdkmpw|ulgdaachjeacffdcba[XRD|FIgNxqVemjdWHGTL9>KWnFRX[__corw{xFGsniep|vrqtv{F?suohq}~vuy~@@?AEE~yBB~Dyooqx|vqjdega\^dnxHMI~njl{FD>DMMKGHMNK}snjglspkmzzmkplgbZ]krssrlhiq{rha^eorlghiea[UWXVWZ]_a`afjifkwwvvpkiemBD~qhlunfddb.0482K;;4D3+?2^uuog^WSU\bZHA@FQ\ebYUPQTUVPFBEHEEGNXZSMJHIMNNQRQOPRNHJLKLKLOOFABB}{xsjca_]\]ZXZWSQQVYTMLKMNKLMD6U>DP_d^OE8576=GS[/02543/Y/13367:;;:;=?@>=>?=:7674a`b39CFDBAFIFB>:756544453`^`148966897456899876553354675544433455434445543eb145564fegeddeefgecaa_`aejh`]^_^agd]^db `bb_^^_`bb`^_acfheacfea[YZ[\^^^_,++-+*))**++*)(''((()*)'{()))('''(***-/..-,-+)''()''*+)()&%$$%$$'+,,++*(&&$#$&(22432234453/-++**)*+,-...,,-.-,,+*((+-,*)((('((('(,-)&%%%$# %&&&'()**)%#"!"$%$$$%%&$##$%&&%##'*,+&" !"!  ! !! #%#"! !"$""$%'(*+)('&())**(&'()(&$$&'&'(*-,+*))())*((*+***)))((('%$$%$"m###$%&''(*+)('(('*,)(*+*)*,..,*)('&&(*++,/0/-+)''+,&""!#'))+./0310..,*(()(&%$$%&'('&%%&'&%%%'(((''&$###"""! !"""#$! !$'('(*+(%$$%$$"!"$%%#$&$$$"9#$$%%%$$'('&'('%%%#$*-+'&&''&#"$%)*)'%$%('%#%'''&#"#&'(('%##%()()*(&%%'(*+*))+,+++B***)('&'*,--,+'$%$"!,*)(((&&'&&'(())&$%'&#%))((('''&&%#$$%%&')Z**,--)%%'%$%%&(+00/0..--..,++,+++**,)&%$%%%&)+)%%&%&&&$$&''&%(*'%$$$%&'(*.-(&$##%$""$()(")('''&&&'))((&&()'''%%&''&&')(('&&%$&'&$#$%%%$$%&%'t(***)++,--,,,-.02133/-,--+(%%'()+-/013651,+-/01452/01/,+)'(*--++--01,%#$%&'()*)'*+))*,-.'&o %%%''('%  #'()'&()&$%"! "#&)(%&07423432254233441231035565201..134676654443212346766555643454443221000///.///0100/+)-24542/021233344220.034541///.,./.--...-+***+*'''()*+)(+,+*'&(++(()),+,.)',,,..01/*+-,,./-,-/00/02555((''),.,))(+$.,+.-*)('&((),-,+,++-/10.,)&'(&" "$$#"! ! "#$%&)**)))+-+(%""#$$&(2-*)*,./0-)''$!%(%!!"##&)*)((++('()&%$#!$&$#&&%),(%'+-+*,+,,073-06239=?A@=<4211232./22167*&'(*('()++'(+,-..-+)&&'&#$&()***('*++*)),-++//-+++-00.-/100//./11-+-.02348714##!"%&$42443 ,*)($&*.13-&)+"9:<$()(%&&&%!!<=%,/,)&&''&"AA;:9:AJ()()/301454/,.0/1234( '-11-*)'').450-+(&).-($$%&I&4942221/.//049<;720259;87@&'&&&'&"'&((+0465430,,--./.00///-,--+(()+--+,.-,+)),/-*067983/**++*+037876200/,.0-10'(/101445568977ABBA??>;::734889;;:8447:;:;>ACCDE>7468;<;;7353,()**(''(&&&%$$ !/3,%"%+120-*-4:=9;6234479:=>>>@>9756777<;;:769=?=>CB==<868?A>:=FMMJLNMIB=:97;@>=@ADI*-*JA=9653.*(&$#$" "%')((()/8<<<@CEGGA<9778:==:9/HCQ.1/,*'#$+$#*9%-/1434:=@C?D&&E:754=HC><=??AC$ 9:96:AA==:9@@::?<8612:?@AA=87:ACDFJIBCGC;52/3:=:789630--.,,.0122256537@A@@<7403!<50273.,*&/?EE>:60+()-1.$#)/42,)'(*+-)"!#%$##'./+'&%&))(*+)'(*($%&%%$%''#@!#$FCBBBA=8753121021/--02/*('&$ &&+$ $4,1('%#'($"  10)#!$%$""&(#!')*'*167:??6'%*.,'%%$&)--+--+++.0.,278:2(%''*8:*&)*)%%&(*+)$"%),//-+*('&%(-,,1/+&#'++*%"C==V-D9C(+/39?<.(()&$&('*/-..)'(&%%##%%###&*.-*%%&#! #&$$%-9:4-)'=?*%/#4=9:7116:>:74/,488648L-)1%.' *206;64.15.)/64.+*++*,,+'!#((&'+141+)998;93-++.25147///0430-770+*7E:*'((7:,7?;-..470)1=B=;AC6-,2AA9640*0<:9@;210+4@?>>?82./1.I--''11&$($$,/*)07:65008:761,,+$%.4-%/50/**;DAB?960,/476411.-244540/121/+)+3/)(0>. *)".72+)9=5/,6>4//30*+/-3,!2JH4/44-##(5F?1-)),*#+9:8:>;2''+-.++'#%'/51.393-("#/138510./2670150/50,*-420.,7;749>8411/11-/[0+# !"9!(')'*.+-1/().-%+)()""&')*)('$*.# (-)'(()++'&&#  &,.*# ,*+ !  **+T.,/011000/./.--.,,-/21,++,,-0/++/../.-,++-...-.001320233/+)**+,--.рŀրπ݀ ~~~πꁄ̀ 􀅇ӀĿ¾΀þ¾½̿׀еݱĉȻ¸;ĀľĿż¿ǿ󀈐ĴRľ󁄄޹񐟬胍̵ʺļѾ󁃂Ʒ ŽƷƿ̮ĺĶ􁁀ֻŻɾþϧƒ׃Ųöŷʛ»偢¯¾ǻ܂бȶͿüټ趂ڹװɵ̾ʷƧһ»ʹ̼ǽĮͺòĽôӴʿȺ셅󂋑V􀃂GYYWY[ZXWWVVWYYYWXYXWUXZZZXVXYZYXVTUX]^`l;qjfa^`_ZUTVTSVYZ\\ZYXUROMNXbc`_b_UMKNT[002444545556679;:9qokfcb_]\[[\]_aab``abc`\YYZ]]]^^]]\\[XVSUXWTRPPONMNNPQQPQQRTWXUTRPRQOOQPONMNMLMLLMORTRNLKKLMMLKMQTRNHF"DBBBCC@@?>???>@ADHIFGGHKIGGGFEGHLONOOPRWZZWUSTTWZYWWUUW[_^XSRSTTTRRSSSRSX[[[\[ZZYUSV[^]^ba]ZXXXWWUTSQQSSSWYZZYWSQPNOQPPOMNPRVWX`d^\]\YXZ\_`_][TOMNRTQPRW\^\XXXVZ\YXVSTY\\`fhk6788gbadgd]WUSQQPRTWXVUWXXX\b11cba]YVTRRQQPOKJKLKIHHJJJKLNPSW[[VTRQQQRROKJIILNPOOQTWZ[VSPNOPPOONOPSUY[XRMLLJLS\^ZZ^[WVWY]`aa`^``YTQPQUZ\_fd_][]^YXXWZ[ZYXUSUTUZ]\ZWVTSTW^^Z\TDZkdba__/00_\YXXWXZZXZacQASU?K:?40]]]XVZ\VSUVUUXXX[ZXZ[.][[\WUYZWVUVXVUTQ6QRQNNNORSSUUSTWXWTRPV[\\ZZ\_f65445gdd_ZVWZ[YWY[\ZWWVSPO@QTVVTSRRSSSPPRSTSQTZ]ZUTUVWVTSQPMJKJIJKLMLKMNPRSSQRTWWUTRRRSSSPPSQQPNOOQTWVRQOMNRTrUVXXTQOPSVTRQRSSRUVRPQRTUVWXVXWXZ\[[\\^b1]VPPRU\_[Z]aba_^_aacefdcc``^\[[`_XQT]de21]XWWZ[XVVXYXVSPQTSRSX[[/24567653121245443479:988765456653373122126751244322465456886679975aWONMKJLIDILF>>IPPNJA=>>AH>7BIJOSWXTOH@><@EMNHIKHEFIKQXVPKJMNNO^qlhc_bcg$mrpmfcfgkogabdeed_ZYYW\abddcddcbacb_`bbaaba``^[ZZ[\]^[YYXWVXYVVXXUOMT]b`]]]^a`_bba``ab^ZXXX\`]XY[]_a_\ZWVXXXSPONOQPOLJLNONMRVTPMMPSTSRTSQPPQNMPQOQUVXWU"TTY[XVX]^\]^_behhg4348=@>;;<9h^WSRTRMPVSRRNNPGCGLNOQPROKJHIMOPSSOMKIGCDFHHIJIEB@CEGF=37>@???BFGHHKMPPNKHEGIILPU]d3699:<9bYQS\_ZZ[TLIHDLOI?8AEEEFHJPQOPTWUQQMMMLJFJMKIHJJNQPQUXYWWXUQPOU_fh__edlldbeggghlgcadgdaaaceehom^URRQMLMMONLKLNOPOOONLJKJILPSTRSVVUTUZ]]]\ZX[[XYZ[\[YX\_]\\]a`]^^[Y[^\XWWUU[`djorulacm9:;@ILLGC>8k89kai=B@<:98;><76564\OMSZ[YOHJLG@A@>>>yy>=yCNLF>havJRWURUVURMIBAweoBGIJPZ\WWVUTNOWWWVW`_N@=>CFJPWcke[VNNSXY^`YROLHJJHGED@viybm`[Y[\\[]`hj_Y]`abdgmgYcxBDCCDECAnMJ]^WZ\XWXYTNORQRRQSY_hlidaZWUTRQPMLPXRONKLKAt>GU_`]ONRNIHJRVW[`aenrtod]__]_dhikg_XROT\cfgjqy||FEsrvyzyvux}~zvvxz{yxzwpkknoqspnppnrspnnleb_^]ZWVY]dkja\ZYTOMJIJKMMNRTTTRMLJHGKMIJQWXXVPNV^enmmu{xz~}zz~|vponifijjgimptvxxwwskedikjkifgjkmmjjklmljlonlllrqnoqustzvsrnifjq{{xwsnijklmmllfcjqt~wrmiga`]ZWVVTSUWURQRTVVVY^_]VMN`illosxunhb`adhmmi`XYahmnaUKEAAISWS}r9BH@Q]HMIm>IZhqwsjijmttt~Dsiabipx~vjefqy}yywkiwAykr~??AADF@m{OSGwuDC~trqfXTizzumfeksm_`hmsDCDtnrxGQIJRTPIEFIJH}wqpvy~}sjbism]^osf[_lqopmkpuHNQROHwg`bdhkmmieff`YX[^bb[TV\\`ehebgt~|wnknovxspnmmgd\STUPA/3DG2>"23^lsi\UQVXVSUYRELV`jmkb^WRRTTSLDDFOVSTSQVTJHMPOORUSSNIFKSK@=FQOB{zzx{@@zrjfjkc[UPQQQPOTWWTPICGKNOH2SA>:713876DQSSPIGFHLQTKEKTJDEHHGFBELIS3JbcWEQ_XQOQSOJ@9HSPMS_hrwkcdfcaUIIINW_bba\YSQROKHJVae_UKFJUYTUTQQLGBFLQUSLFJUVX[WSROKKLJLQQSRKE~qHGED@wzKKJKHHOVWVaibZURPOPQSVZZZ[WRQNJHIIHGGHGNWSNIABLQKIKPTW`cUEDDECyj[QfApgp??mdcchvwkijpJrijlkkb^ab\WMPkuo}pSQTSUNDFdyjaTLGNbi]SKHQXX^`NFONLLKPTMRWXUWirqf^TUX]_`dedghm_[^ccdgln]SLLvTE`li]Q[q{^EdtqFjThOkY[^ZVQW][ZULHZjyymyCrjfYW__QKTXNMQGJQSPW_aj[gf_fnni`NdlQ_^[aZQQPTjrf`hgZX[Vdvsg]]defmuuolro]SPRTRPTX[[]gbXUMNQRZZLUgmxph}xd[VQFHVWRLN[`knqtmhecXR\p{se\]XEL`lmjmoqidYVimueXcZOLGLV\`bWTURX`_YUXZY```]^cji`WUZSQWZTHJLHThfZSFTbpwnikomXNRMDBGNJIJPVMRZZSQSSOLNIEGILNMW`XRWOHU\QFDDECBIKE=:?FSaa[SI@=51;FV'10-2758/04545569<98=?>><::;98655gd`^^27:;==<96433565444b_c479635:;7545688987765563465334432346544455444f^\b36643edbaehefecb_^_^]]bjg^]bed465ecgd_`db^^adabcdhjikkifcbdaYUUX[[XXk*))*+*)*)('()))(())(')))('&&'((('&&(,./7;630..-)'&(&%'(()*))'&%$""',+)*+,-/,% !%)974/-,+C)*))*,..-,-.,*'')+,,,+*)*+*)(''()('%$$##"##$$$%&(*--+*)'((&&'&%%$%%$/&'('$#"#$%%&%&)*)'$!  !!  "#! !"##"!"X#%&$$$%&&&$&)*)'&&&'*)((''(*+*(&%&%%'&&'&&%')**+,,,++(%&*--,//.---,,,*'('%#! ""#$%%$%%$%'v&&'())*.0,+,+)&''*---.+(&%''%%&(+.,(''&''%&$"#%'),...2.-01.*''%$$$%&()'&''&%%'(()(&%%$%%%$#! """! !""!""$%&())&%$%$! "$%#"$&(**'&$#"""#$&)+)&#$%&'+//-,.,('&'*+,,,+,,)%#""&*,.11.,+-.*((())('(''(''*,,,*)'&'(,,*+&)3/-,*)-+)'&&&('')./$%& &'(%$&'$$%'''(('('%&&((()&&''&$$%&V%%&%$#$$&''()(''(&$""$(())**+/0-.,)&'()()*+,+))(%#"#$%&'''%$$%%&%$$%&&&%&)*(%$$%&'&$!!! !"#"""#$$&'&&')**)(&''()*(&(&$%%%$$%%%'**'%#!!"$&''(*++(%$$&'%##$&&&((%$%&'''(('(()+,++,-.0.*%&'*03/-/121//0112444320///.+/11,()/32.+**,-*(()***'%&(('(*,+,%#   $"''(()(%$" %+*%%&$###%)-+(&'(('*7A:;72337<@?<63549<62345442../-1444343322233012334545Y665642234454322100/.///012110///011/,*/4740011122344434520001353///13320/--.0/-+*))*++)&')+./,)(),.,,-,*))*))+h,./.,,,+*+.0/..22023356644)''(()+++)&).,+*()+$!$())**+*(('(**)+,*(''&##$$$%%%# !!!#  !!$+%'('''$"#&&),-04+)&'.1-.0+$!" %'$"#$()''(*)'&%$%%$!#'''%&&))*),//-,-,++*-1462356;<98;:9767410241///00./44-*))('''(*)((()**))((&&'&%&())&&(''&'*+,--,+./.0//0.++..-9--.10//1/.021///-,02479:;845: %&%" 32,0&!"'---'%'*%!##"##BC$!A%.,($;2?)/20./.-,*("D%@4;$'()-22000/.+,1220052%!%*4973/)*.0034/++*')*))'&$?4?9=411210013892/245568;6}-3@#$#"#$"!4&&"$&'+.0-*+,,-.-/14:<96410/-,,,*),1-++*+*"9$,232))-+'&(.112337;=?;4000/2466650*'&*2789<@DCCF%$B::=>?>==?BB?<;=?@=::<<=>=;<;:;;99::874210//036972/.,(%"!  "#! !"&'##*/231..39>EGEGKIJNPNIIPMFBAB?<>><;=@@BBABBBA=88::9987:::;979<>;99:==;:<@?>>>?>?CA>=:87;AEGC?@AA>;<===<;;848==CHJJKJF@<852,(''%$$""%&%# !""$&''&$'38:;>AB@=:6679;>>=7227<>;2+%#!!%)-,ULEBCC:2 ##(!'#2$08=A@:999>>7106;?D?746<@A<<<65>"?69@ !"3<),%=;A##A754-%%3?@>8436<90/579A$$$F<7;?%,&$*,*&#$'''LGC?<;=@BC=737A>22<>613>;9<>A$(+,*'BBKK?3/13679:86662..0145/((**,/20.3;BGIE>91-/046320/.,*" 09=7-)'+-+)+.)!%+17982/,))*++&!AB""',++**-,&%)+**+,+*(%#',& "))"?ABAA"#EB?<:<<61-)++-..1220-'"#"!!"'((%!! !$)+%!$)# #"12+&0,'$%'%$$,*'+39>INAC:34532*$&'(-2322.,)()*'%&-585.'"$+.*)*)*'$"$'*-+'#&--,.,**)&'(')+'#=6>$#">?))''&&*..+271-,*('(*+-/000-**'$$%&%+0-*&CC""(+%%'+/0690%D##$$?5+'1B!606 73226>C>778;K*H82567830462.'(;C?EI8**+,/*$$6IB;5.)&+7:1*%"',-14'"**))(,.),-.,-7<:20-/12104435592//32/13>?70,),C*#1860*0=B00HC;:E':,7I-O6.030/,/321.($+2=<3:#C943,+02)&,0)((!$*+)-44FE5,44038862(18+20,20++**8HC92/66-+.T-3<92,-2214774254+'')*)&),.01:7.+%&*,0/%+79?:7D>2-,("$..+&&-053475320)&.:<8/*,*!%068610-,9=B7/60''#(.3560,**,01/,-.-210-.1551+*-*+/1-'+.*0;70,&18>@648:8-')& $)&$'*-(+11,+*)'&'#"%&&'',1,)-(#-2+##%&$#')$"(//+'"/.-+*+)+/**,?11.-.0..-,-+***))-2/+,/1/0/1/,,/-++,.-/0245455431010+()+--*)Ɂ׀~~~ +€⁃􀠁 Eŀ½EÿۀǶŵ̿܀ýƾ.Ƶ¼Ŷżü¿»½뇑ĵ€ŭـȹʻǿƺ½ԀºĿĴüۀ鄓ƿξͮ͹֩ҽ킔􁉄ҺԻ٪Ćށǀʿͺȶù򋔑ӽ»߳ͼŹǾϹʹͳľƹȽٽƌ۷ֆ綰Ųâ¨۸ɞǴټȭٽĹ͟ŰîþɀȾƵɽĻţ·ĺ͹׀Z[XWXWWVTTVWYZZYXWWVTTX[]ZVWY\^___^ZY[`gnliljdba_\WXYVUYZZ[ZYXWSNKKR\22a_]\]^\VQQRUVTMJMT\1234455789889njigdcb^XSNR\cfbVU\^][YYZZZXWXXYZ[[YXVTSUVVUTSRQPOPQSSTUWXWTTWVUUURPOOOMMNOOKFEKNPPOOMMMLLMNNOONNMLLMKJKMOOONLKIGFDCDFD@?ACEGIJKJIKMOOOPQRSTVVX[[YXZZXXYX*XXVVVX[\ZVUUTUWWVVUTRQQSUUVYZ[[WTU[bda_^]ZWiVONSTQPOPUY[ZYWUSRPONMKLNNOPRTUXZZ[\\[YZ\\]\[\[[YVUSSUVWY]^]^`_[XX\`a``_^`a_`aceea^`dfd^XUSQQSWYYVSSRTUWWX=YWVWVUTRPONMKJKMNMNONMPVY[]]^\VTPMNOOONPW[TPQRRQRTVYZXWVVUSQPQ{SRQPQPNNKGKQUUVUSQPRUXXTQTXZ\\WSVZ\[[ZYZZYXXZ_cab111343_VTVXZ]][[YWXX]gib]XVgia`]\^_`a_^^\ZYY[YWVWXXY^_[\^_`]\[XWY\_\Z\]\[_/10//.[[ZYYZYXWVVWTONNMLNOOPQRRRQQSSSTTWZ020ZXWVWY[YVTX^cefc_ZXXWUVY\YWUVXWUSTURQSTTTUVVXYYUSSTTQNOU^^VSTSRSQKHGGLLGGIHKLJHINSTRP,OORWXXVTRSUVWVTRSSQOQPMHKRRQQOLMPUWVTSSSVVTSQRSPONMMNQSUV.6HPPROGEFEGE>>FNUVUTSSTMC<;BIMLHHFEEKXYYYQPNIEFL[hcbbYXdltzyqd]cks?xkebefedbaaa``a__`bbcdbacb`__`ab`_`bacdca_\\]]^^_\[[[ZYXWXVVUVVURRW`ec[XZ^addcdca`ac_[YXWX]a^[Z]cfb^\XWZ[XUTSQQPRVVMIKLLKLORRRSRSWWUVUSTSQPQSSPPQRWWTQQTWWWVZ^__abcdedb33b369=?<7`WUSTVWRHIPTTRQPPOKIIMNKJKNLKJKKJGILNNJFDEHKGBEHIHGEEFGGIF=9=EFCCDFHJLLLJHFCACHINSRPQUXe67;B>6g_]a^W]]UKCISWSOH>DGEEFFGPRQRTWWTSRQPOKGIMLJIMRWYWVWYYYXXVTQMNNRVXZZ\\TOLQSW]]]_bf5id_^agid`^ZXUUTRPPOOPOOONMMMNNMMMJJLMNRYYTVY[[Z]a`acb`^\VVZ[Z[\ZX[^YY_cgfb`cc`]]\[]^^_cefeehhddfk9;miCC>853a8=:64674[RPSQLEFKLIEDCCB=kcorhjBKQPKvWfuDQVZYTUVVOHMQIFILOOPSSTSSXZVRV\_\ZalmcYPMMNOOQVYZVNJMQTVZ[TOPPNLIF|v^xdg`_]\^_`dfdbcb`aegikg^_kwCCCBBC?ma01^ZSKHJQYXSPOOQSTPPUWWVUQPRSRQQPNNLDEOTV^[PJGGMRXXTQNOQMQUU_j]Pbouustutqqrmfjppqri``fjjjkpvxzvpvzxvuwy{}zxyvpnpsw{~}|{{zzyuqcXX[_`^^`]]^YVUUTW[WQKIOTSOID@=<:8?GQY]YWVVYWW[dpvxvuxvxyzxib^\aksupou{vrqtwy}slnnkklkhhhgkmorxzqhgfffhkptsqnmmrxnlidbdaZUUY\]^`eihigmspmkikmlmnonkjlnme][[ZWLJPUQT]_]ZYXUVXZ\[XVblqwyxqieb_`ba^_bbWF>CIMOIB=<<94_UUk=8e__dbZVSNLF97?JLD;8HJjooaVRQTTSQTWNFJNXdjleTJILQTOICwuEHILNORSPMNONKMPNPPJFHJJ?n@LOI}wsr=B?}xoir|sdYTSVUTRPQQPOOMGM[dg_VYiLG*2_BCKYQGDC@DJOTQLJMME9:>EIIEAAHS4G]a\WNQVRRROOQNC=HRQNUbr~wfcopiee_QHIKPXaefcYPLMJFIKMPX\XXYPHNUZce]VLGJRZXVXWOLNLQRPPONJIMKJV`[USMx\wFHKLHHNOKJOONSU\cYQRTRQV[^YSZ_YPLMMLLKJGHJNTPKFDzJNMNMRTLJJxnlofyC|vyxxt`]ki[^nokjnv{z~wicaelhc`[YVKI\^^e}w[QZRJIEQuvjrfZT[c`\YUQSUUfm_RK>=KQX[TUai^NPaw~lZeqnnkb]Y]lwi_bfheSO@Em\TEruX^G_kVK_pv]SqIEvpzz]]lyyomjiejg\RPSSQKFc}ztpszyrltnebYFISROMPUbeRNSQZ{]\jrsosqkbK:CHQZ\YTSTWapvv`UZ[`poZR`sqidffdcmqprpeVGFQVSOMOY[]^`clmo]MNTPORW`fdk{p]WRJ@?GC<;DPWeswkdkoedpxm]WW[\HAL[`ZUTPE=7>Whk\RSRKHLU[fcOCT\\_ed^[XZ[YTZ_ca]QNT\opd]\ZRJ@@INGGLFAHWhqb_lbKJZd^QJQ`aORhplg^TUWX\VPWUH>KYSUb`TPRQRRKCCHECEPVRLE@CMSNEBDDg?6/8IV.,SW26944555689;><;>>=;989988974c`cb_b23211478974434554343b`c599525:<97655689876555643565343332345<433244fce577hb_`a`acb`^_``aab_]\bifccefeeedbdfeabef`_a^_beghi he`^_]ZXYXXXW*+))***)('()***(''('%&(*+)&&')+,--+)),/6<9574111/-**+)()))++*((&#! $(**++-.-(%$$%&%! "%)421/..-*%" !'-1/%")*))(() ((())(((&&&'&&&%$$%&'')*+*('))'&%%%$$%$$!!#%$0%%%&'''&&%$#$$#$%'''&%$#""! !  !!"##$#"#$&%%&'('')*((++*)+,,+)))***)'&&%&&&''&&''&')*+,++*)'(,00.,--,,,++)&')'$"""$$%%%&&&%$##%'&&&'()*++,-,+***++*),--+)))*+,---.-,,+)'%%')1**))+,,,-/10.--./.+(&%%%')**(&%%&&&%%$%%%'&&&'&&%$ #"#$%$%%#"%(*)&%#"#$$$#$(*&# +$&))('''&%#%$%&&''&%&%#$&'%%&&$$%'))&$&(())'%'((()p('),---,'&'')+*)**))*.44/-*'23,+*())*+**))(''((('(*)(,-()++*))(%%&(*(')**)+(('&&'&%%$&&%##$#"#$$$%b&%&&%&&('''(*+*(%(,...,*('))((*,+*))*)'%&(%%&&%%&&'()('&&%%%##&*)$#$$%'&#! !" !#$" #&&&$$$&(%&&(*,,,)'''&%&%# !$$%%$"!"$%%$%&'))'&$0#$%$$###$##$%'()((()'&'(*+,,+***)(*./0232//23442100/..-,+,./..123+1.-,++)))(('&(),.//./+((* +w'!  !!""$),+)&$%($"&('%%###'0.--))(&$#(29752,.6',m.-+A-8?&/131---.*'+-(')*++,--.-.130,.34115::2,&$%')),0220,,-./033.+--,,*'FCGIB/B:8542132367433224689;8119@F$$# 0($""%)..,++,./.+,011//,+--,#*))$%,./41+(&%)+/.,+)**'*,,3:1(3;>>=_::;958<;>?9449:978;>?@BB<8?ABBB@>>=:9;>@BCBA@??@@?=5..1441120131/-,+-/+& ## ")/321025568=EKLIGGFGIJNQG>:979>BB><@DA?>@ADJHA<>>:9::988:<=?@BA;799879:<>>><<;@HJHE>9:843431//1368689897<:;>=>=>=:;;;7-&%%%# ! &&#!"$%&&'+3:>ABB<765455325991'#'(*+&!%+,-,RNKD=1('& '"'/&3=>AB;7;?BDF%&F@=;755:BCA@ACDEBAA?88B&$A@! ?><;:849%,+%F&*(%D@=:832:?@A>;=BC@>?"(-,)(&C:7:=&++/,'$$&%KKF>=76765566565.(($"%,2136:AC % +)%$%$ $9;:0)''+-+(*-("%'-3683+$$'*,)%!<:A$%%%&'*,*'())'')())%#$&&5 (*%B@><;"!B@<8=D>4/,,///-,--+**'"&,/0,&*9)$3"!)%#&*)'%&($"!/2/,&)-)()''(' %+)(,4>FC85==7430(#%'*.3553,'%''%&&&(.1-./(#(+.450,'%',0.,--(')')*()('%%(&%,30-,)?.@&$##%))&E&**&&))'*+05.)*+*),/0.,251+'(('''&%%&).+'%$D>@'*()*,/*))E?BEED?9761?$@::9;9-,65,0=>:9;@BCF@510387441/.&$11.3E@-)3.((%+CTD:?92.3962-+(*,,6;2*( '*.0++4:1&'1?E:/6>;:610./8A714441&#!%7/-&CB*-%4;,#0>:59600-"$,+(&G*+36+)-,0LTB/.69:8::63%"%)/1.*++-2;?>1*-.1<:+&.861.01.-24343.&'+*)'(0139::.$'*((+,1416A8-*(## &+4<=637;42681(%%'+!'//)%$!0:=1*+,(%&,/52'#.32353.,+---*-11/.('*/;<4022.)#$(+&%(#!&/:>3/82%%0H61)%+33'+:>950*+,-0,(,+%!*2,,42+)*)++(#$'%$$*.*'"!&(%  ! /-+.,*,,*+0/02/-.-,+*+)(,0/-.0//0/,-//,+.,-/133432221.-.,)()(ŀĀ̀Á΀؀Ҁ€耋~ぃ퀂 :¿¾ɿûPڄҀ܀ԀȾ¾MƽƾŹպ퀀̹¼÷ռ鄗Ʊ䗀˵˿ƿɿüրǽɽɭϷրƿŽûĿٝҽ􃂀ļθ¯耈пĸƯ蕷ɸļ·ɻ˵Ե񒡩۾»´Ͼʻӱ¼䄄Ϻ㘑ƻūŷøţ˲׸Ŷôǿü􌡡ʶ덅Ѻǁɴ;һʶ̦˾ȯڀ􀉍ۀWXVUVUTTTUUW[\ZXYZZZXWWX[\YWW]h6he2aa_WT[ccabcfedda]ZXY^bcbabb^YVOLNR\22_]^^`^[URTVXYWURKEFJNT\_abehhj66ppmjhgda^[Z_ejcZ[]\\]\\^][[]\Z\\ZXXWUPNRTVVVUUT VVVTQNNPQONNONYPQOQSTQNKJLMOOOPNMPRRQOMMNNMNNNOQSSSPOOLJIGDDC?;?BCEGILLJJLMNOOQWWUUWURRQTX[XSQRTVWUTSUUVXVSRQQPOOQONPRSUVVWWVUY^cbZTRQNMOTQNOVZVV\\YUUWYXXXVSRSSQPPQTWZ\]\]_ba^^a`][^`^]]]^\Z_fijhc_\\b5642_\\][WXYWX[bfe`\YXVTTVWURRSRRSTSPNPQPOOQQRRQPNLKJJIJLMPQRRPRUTRTUSUXTQNMMMNMMOSYYWWTRRSVXbZXUSPQRRSRQNMPPONJG@@:6jfaaac]NFHAKn85bSIMKFFGIHKORTXWUSTTSNLKKOSY^_][]]]`b_WTVSPOOOPQPOOKFBGLNSQNQU^ccihfh797jdZTQTUTUSQPOQQQROLLNMKKMLLMLMRWXY\[ZZXZ^]^cdb`\TRSUYZYWPS]ZTY`cdbbhmh`^]][[]cjmomghh`_fjq<;77:;?DFFECEFD?:62/143[R^564a__YRKIJIGE>;@A>;u{o_tCKOQO}xAE@70]\WSOG>:ALUXURTVWUPLJILOLIIOQMLLLOTQD=IV_cWC:=@@IYdiigaYVV\mpid`bjmouwvvvtricgd^]afkrwwxxvrpqqmny}|yuvz~yuutrvyyz}}}JKIIIzoheeb^\^dfb^^`cbbcc\SRRME95330V@-2K6BLWXOFK\a[XXWWWZ\Z]eige_^^bcadie`]^^dikligijfeehpx{snnmjjnojeehjlnmkgcbdacfffgjnolhit~zvtqqngecaZUY__[]``adipqicbgkha[]adgijibZWWYYSSUWVW]_`d11`^\\aehqzxpeba]`ddbZUNJMID=9>A?<;@HSVME@=<@>aAnTt<;CVm|~DGHEFGrqi[TQXp~xqnmrwxwwtoq|yja`ly{vj_eozDIKJHKLIEzyspw}HNVRJyqpAMPQLLItoxzvolrurqurliossosz{|FGFFHG~qmg]`egklolecelvr`\^^^YU\dc_ZUTSRI>CQ`ljdq{w:8fZLHZl7i\T03PIPMJKMMMPPKHD@]Uhjj`RQTXZXUVWRMLOVZ[_ZIBJKGIIEB~vw@EIOPOPQQQROLGCEKMKECGFC?APUQQJA>xrBJHICslwylbXTSQLQ[VSRPX[[alsrf`bdbYWMFNYZ[MBYXY\[]YVXUNU]cb_frwuwmX]kjqsh^]puluGGyl]IoAwklQKMYitlbkErlmsskd_\_ddfhhl\KOONNUn{zskn{o^cnvng\UUR]_QWa]UMJOVjtgVZgzxybQUMBAKW[aSCYsvq]YV\_UZcZY`hslfghdosornbY\dbZQMPLIQcgghd\^][V\dc]YUW\V`c\XURIAEE9j@JHEP]\\ddZ]zLEe^a[T[b[LJKB@EE;]qMaZKOOHCFTXL]B^D=?DBIUZY]jmkb\`d`TKCDSdd^_VTXOP]PIPPUREKU[UTTWLB=Nb[PNWdYIQ`lt}~scdm\WexqVNZ`^`^WXURPNF;@IJJNYajj\LFKMIHE?81^0AP./1231366567668;>>=<<;;:78;;97764dbd a`c332114688543 2c^16873247::75666788644534313984U3322235665544333455jfcbdca```ba_`bba`^]\[]bccdgghic]^bffdd34fcdfggffecfjgeb_aba__]YYY())()(''('')++)'()**('&(**(&'*110--,)).31/0033221/-++-//010/.,)$ #(**,,./,'&&'(('&% "&+./02211221110-*('(+.0.*+*))+++*))*,,***'&&&%#"%&'('&% &&())('%%%&%#$$%&%&()'%#"$%&&%'%$%&((&%%%$ %''('%%%#""!  !##$""#$%()''(('&&')**'$$&(]'(''()))'$#$%&&%&&'(()+*)))((+030*''&'''&$#%''$$%%!"%%%$%'))***((''&%&'''&&&(*++*)*--,-0/,++,-w/.-/232//-**,-+*+)()*()*-/.,)(('&')*)&&%$%'('%#$%$$$%$%&%%#"""##$$%&&'(&%'&$$%$$&&$"""##"!"$((&&$"""$%((&&%&&&%%$""$U## !"#"!#%%$$#"!!$''(**)(('()(&&'%#$'+--.--*'(+.//+**)&#%*,./*)'%##%''()()*@)&$&%$&)'&$#%&&(''&$$$&**)))((*)++*&%&%$$"!"#$$'&%%''('&'(&$%%#$&&(&$&'&'))()++)())'(&$%%&('&&(&&'((&% +$##'+,(%%&';&#!!!"%%" !"""#$$" #&'&%$#$'*+*'%&((&%#! #''%%%$%'(&%%#""#$$##$#$#""#$%&'((''(()+,+'&'*,*E++(*.02/,.220/.-,+,-++,.12000.+)'()&$%(+-.00-))), +b&  !!! !$,1.((++*'"%%%$'%"#(..++*(''&"!'00/0-1=9:>:779>!A>;756415994113 13564210121001 222124322343 444323310//1/-,--02110//12369998531230--13677543565420122000,* )())+,(())++-,+,--,,-.,,--./-+++,--/0-.02478764464,+,*+-,(*,,+,+*)'&)(&&'&'&&'&&'&%$%&&#"%&%$#$$$%$"#" !#""%()(**(%"$%%$&&$$%$$%').310/012/$ 70%!%# #%$$&'(+*)('''%$%&&'%%(*-00.---.01/*(*)'()))X***)(%$(+,.+)*+142553320+('**))('(())*,*(()(%%'&&'&'(*+**(&%$&('')+*+*((*+...-)+0-)+/1#5:71011001589;:6662156;""" !"""%&&)&%##$$$#!AGJ?6C',..-!:?>%+01,+,-/-+,-,-.--.022.*-35207<6-,389730../.+++*),45.(&*/320.,)'('$$&*%7->73345346999:95432111038=BFE#D?!#('$"#!!)/2/-/010,*))+,*((++)*-) &/57/#!##)268874/-.0;?;744:;:>@>=>@?84763368:?BBBA@=;;;87>BB@>?ADCA>>=;>@@@ABBCG((&%&H?95321014785223554550*)(#?&!!#052110026857;><<::;=>?><::;999:?EJHB=>=<:8:;;;=<:744535779::<=<::@HIGFB@?=>>:98730242/254469>=968<>:613689972+&%$%$"!!#$$$##$&%"#').7?FJHC?:554246772.*+.)%!!!&01,NNR*RI ,0$/,;DCF%III&&#$&E;;91.+.;DB=::>AA@?=99>B=51/5=@=6/16<$((&&))'%FA>=97;:!'(+)EG((IINJ>9@DA<9:<:;>=848=?=?DEEFHGG&''&((E;:8336676996448??623330.2541-(%$"",3309@<*#"-*"%*754.'&),/.++,(%$&*-/30$$'&''$"?:;!$'(()***,*'$!"%'%!!%%#!,/**'!=9!'%&#;6>B;50--+(*0---,00/38<<3/25620)%*002* " ".)($&%# %),-,+*'#"#$! $,1.$ $''-8?>526<:7772*'((,/132-'&&&"'1-($&*+/1+$$'-45.,/6>BE<0--(!#))'--(&&''$&-.)G7($9&,00+'-1)%'*.*%%$!!+73*(((*-/-)(/762*(()*&$$"""?AF#C"$EDD@CHHHGDBAA?>G@643EJC836;9650+)*.;=62,!/000./.-.+&*27428?@>?9+-8:==601::39''@93'<&K?79-&'.6=606B"@99;>>;731476679<3(,,*)*8@>;68AC8.28:41+)*)10',42,)(*/-*47332-.,)))%!()))/376/%"%%"! +/--'*)*+(H1/.-..,,---,+,-,,,++*)*,-./1233.)*-//..00/01112101210.,..-,++)))ˀƁʀـɀڀǀ~⁅ ؄ـÿ¿€¼̀ʹ;ۀĿـþȹͷƺ¾Pľ̿ôԹϺIJżÿ쀄Ȼⓣƶô÷ހɻžɺùĺÿýÿÿ?ľ󀒟샓˸񀃀Ɍԗʽ˽¸ȼအƵ˼´匚ȶǽҺ¸ʭҳǷΩ̍ı̸ƵŶȵð˹̵խʮȾòž¿·ɹDz쀄3 TUVTTUUTTVUUXYX[][[\ZYaeb]ZZ]\^__bebZWZ^_`^]^^__\ZYWX^f7pnnkf]RJKPV]aa``^\Z[XVXZ[[ZYZZXUQOPPSX[^``cdfhhihgiiigeeedefea]\^``]YXYYXXXWWXXXZZVSTUWZ\XUUTTTUVUWYYVSQOAPQRSRPNOQQRPNKIGGILNNNOONMORRPONNNONNNPQPONLMMKKJIHC>BECA@CEGGEGJKNQRRTWXUROORRPOMKLMOPPPQQRTX[\ZWSONOOMLMNNNOPQRQRSSVZYTOMLLLNRRNMMNMMNRUX\]YURRTVUTVWXWUTRQQRRSRPNNPTY\^ceedffa\ZXWWVVWZZY]dikgcbc233234e]XWUTUWUVX]bb_\XURRSUUTTUVUTTQPNMNPQU_bXQPONMLJJIJKMOQRRUVURQTTRQTUPNOONNOLKKLNOONNMORSVX[^WPNNPQQQPSVRMF;j8CHJJJHDEIMOnPOKIJJKMOPPQSTWVVXYXUTRRTW\\ZZ_fcZRNOOLE?EV[ZZXTRUWY]_^b7:74^TSWZZYYYXXYZYZZVQNLLMMMPOOQOLKKIIJORRQQQPRSTX[]`a1 /\\]\YTPOMLKKNSTTRRRQRTUVYYWVVWY[ZYURQOORTTVVUVRJHKMMSVUSSTSQPRUWYYVUVTRRUWVVURSWWRQTUVUVWVUVXVSRSTSOONKKNPQQMKJFGLPPPNJJNPPRVZ\WUUUWUPQSTOMPPNMOPQQRTVXXWTQQQONONMLMLKMMLOPONMMKHHJLOPOOPQRSTTTSRUVVYVUX_/WRRRSTTVXY[[XUXWVWVVWWXZ^]Z[^01221/]/0bb1acc`\ZXUUTQPQSX[[^00///[W[2568;9756643479:;83 34433556664321133122112223455469<>AFHDA?<:;::99<>>;71UOLHB=>BDDNUVWXUUTJFCACNUUONUXRPG>;CHHFFKLEAENSQOOMHBEB?FPWZ^_]ebZ][_kvwrlc]ZZ_a^cjlkgbc ddda_adcba`_`]\\[[\]^^]][[]^]]\]^]]^_`_\ZXVTSRQRSW^bdaZVUVWXY]bffebaed[WWZ`cb``^^^]__]]^\Z[\YURQONOPQQQNMMKLNPRUXZYWVUTTWWUV[^_ZRRTVXZZWTNKNNSXXUX[agjllgdcb_`d48=ABBA?9f`ZVVUSPNOOPPORWVTRPQQNLKIIGGHJJHIJLMMMKIFGLMIFFHGEEDBA@ACC@CGLNPRURIDEGFGJJHIJIGGHKPa:=:774a_^\ac[PE:D\]PPRX^VKIKRQNKLRUPNONMMKKLMMOOPSUZ`dgiijigfbVQ^aWVTRRSRQPNGCEIMOKGHKNTWZ\`g9;76f]WXXWWXWTUXYWTPNMKKMNMNONNOPRWZZ[XTPOTVVVXdf`[UUXXWWXUPTYZYVWZZXVY^_[[^]YX[_hihijiieflllnp:9:;>DFDA>=>@A@@><9532331SGS/21\Z^b\TQONKHD@@?t=@>{ucZasJSQI><=<@KTRPQOLORVUSTY^a`__ddXQSYXWW\_ZSU]cc^\^^\[VOOPNJKNMICEIMOQRQRSTXYSJKNEEdqlbXX\`eg`Z`ec_YTNHLRY`dfls~A==>>=iXVW]\TNMJGGMPOMJIHGIKJKMMLKMPRSPKLOUTOPMJOPLINUROVcligfefc[^\Z\\ZZ]_cacihd`^[]_^[]dghigjmlfbaelqtux~ztzBA~@AA?x{AA~zwqoklqsruvtrsqi`WV\dffjnljgdec`]WM9/7@EKLF>>@=6UO+0997?OTXZYZXWUTUUTX^_[XXVVTTVVYZZYZ][[^enrnhefgjlotxtnnmiilmnopnhdba^`dijgbejkjjhikmmntz}{wuuvvuromkhcac`[Y]cdfgea`bgnqleb`cgijjf_ZURSUX]_aca].379852c\_kxBGIJIzsjdcb^^bff]UTZXMIID>;<=AJQRQNwt~EFGLQPJB=<<95`c\[ZURSW^beaZSQQPRTOHGHEFE@AGKIEBGNMMQROMNMIFEEDCDFKTUNKHDBDIMNIECC@BJKHICyuzsf`][ZYX`k`VS[hlhhlpnc]UV\]ecZRLCDFNMINMC=>HPK\qyvj\RE*+*'$##$'),..-./00/00/.-,,-./0/.-,+*+,,*''())*)((('())(&&&')*('+())*+*('&%$##$#$$&%%$$%&&%$#"!"#&''&&%$$%''&/%%%$%&(('%#$$###""! !""!!"#"###$%%%&()(&$%$%$$$&&%%%&&')+*)(&$$%$#$%%%&'('&&''(++(&%$$$%(+(&%%%$##$%'(&%%&'(''(*+*(''&&'())'%%%'*+-/001320/.+))''(**)+/220../,)'(()))(''*,,+*'%$%())(())(''&$##$&'*02,'&&%$#"""#$$&'&&(('%#%$##$&#""#"##"!"!##"""!"$%%'),($##$%%$$&(&# 2 $###! "$%$" !""#$%%%&')A('(**((&%%&))()-0/+&#%'&! )+((('&())+,+-,&%&'''(('&()))*(%$"#$$#%$"!"%''&%&$&&&()*++''))(&$#"$()('&&%%'()*)('&''('&%%$$%&'((()'" """%()'(('%%&')++*))'%%')('&#$&%""#$$$%&%&')'%%&('%%%##$%&%#"! #$$##! "#""#%&$#%'))&&()&%&&%$$%$$$%&'(('&&&%$$$""##"###$%$$###! !"#$&()))'&(,(%%&'()*+,--*)**)++*#--*+-/100221/.,)''%$$%(*+-.+,"!" " X"!!(**''++'&""%%$$('" $(++*))%"$"!$)-0332641337>DC><84014437:;953445311243331221//0T///00/001223332344554442121//.--,++,-13650...00/3799742440.-0465554321231121/00.,**+*++)()))***,..-,--,,..,,/11/**,--.1/,)'**+..,-/267885432003 ! --+*+++*(***+*+/.,+*+*)''&''&&%%&&&$%&''(('%##&'%#$%&$##"!!"# #"#%())*,*%"#%.$%%%$$%&(1-..,./+%*,%(),0*#!#'(%$%)*'%&('''()*,/11101J0'"-0*)**))*))(%"$(++)&&'),-.0141-*+,+++*)+//.+)))'&''&'(('''(++))'%" "-#)**('(+-,,-,),.--**,.-,-00..11..0277677763498 %&#  !%%'))&%$#"! 9 $#DA724?,0-' !!$,1...,+-020..146534881,/2332353./4984342220-/0.+*+)&#%(**,---./00-)*+#$8?=6..13682.132/,)&$'+04458;B# ! /&%&))%#$$$%),+*)(('())*++)()+,-+(()-,((%#(*&%(-+)/8=954243/2201100236448853212432269]:;9:;;85447:<B$#DC!"" =?""A@=9866:;;<=<;==93..27769;:865531.+$$"$)-./>0112599655542269988768779;;<>>?BD@=>=::;;<=<;756755799757;::=?@@BFGD@??AA?<::985442/.1447986679<>;876798641*&"!"#%('(*'$'%(1;!%'('IC>9776545982./1,%##  %),00TGBFL%" "!0>DHIE$(+-+$@92134558AGC=;9768:=>@B@@>625:?@?D')*'%$%((&('IDB@:3.2<@?;;=>BEFEJ*-,*%B?D%$@<".2-I=E(KDEHD?AJLHD>:<:16>:9:<=>>@CB?=BH&'%$HHHFB>=;=AC?;8423665,%*23235773.*'#!07: !4,$"0/($!" !13-,+(&'*/341,'&''*+'""##%$ !%&%#!$)((*)'&'(&$$#"!"#%+-)'%##$'))&#!"!!&(%&"<;A?84221/.4=5.+08:778970.*,01550+'!"%!3&##  !""#%$! $$!,11-(%))()'$%(+.,!"&$(-0/0447<=401/)'*,///.,))(&%*-&#""$())*.136651-3>@975/.-' !&'&/61+'&()% #&>04#')-/00-*,/*&(/61''$'.2:=3*(*-,+*-3237/')+)*+,*&#! !!"!ACD#CC@==@@?ADB<>DE>;>;515;?74;70380'&2>L)KB827842421461/0--1-.4+$6H;-(,77,(3@=<::=BF=A<1,,17=:83)+/))+-32*.0+.,-024899=>6.08HG6/.8@AHK@4=<,'#=A?1((&.76.+6BBA=88<@:3323306>A7..*'**/999;829>61/08CD$>52.**)%&0+!(1569:45=4(*,('-63/1443.052+)+,--*$"'&%06220-((1.1>JE5-26++0/'%+)!#**'$%'$!#+$%5=9496'$,8C4#""$##('$()#"& *7>=6/+%!((#!&,1566;931,&).'%/,()).0(~&534;3020.+%"##!%'))&)00-+,09<84393-'0?@<642247862.-'"+-*),02562*(((***$ 0,*+)$-.,**R,,,---,,,--,***,.00.--..,*)+,-,,/-+-//--,-/-,-/00/.//-,+*)))(((Ā̀ˁـ׀ۀ퀆́⁃䀄 g/օՀ¼'þþſ҄IĿτр»ǸՀȽՀعӾƹ΀ʹÿƿۅƾµÿԯ¶򂍒ýͳۜ»þ¼żùĿ̷˴ƴ¾Ӏíȼҕ¹»ǿ΀ƿ茨ýųǵ񄉅ƮôȾͶؔ̽γ̥ہɲνGǽӶƾȰν;伹ͺý̩務ȓο»ǵĿȾıºŴҺ׹䋠θȹê˾˾VVVUTUWVRQVXXWVWWWY[XUXZWZd7h`[XWY^abaa^ZYZ]_`_]\[YY^_]XX[blrsmgd_UNORV^3e`[XUXZ[\^__^\YY[][Z[XUTVZ]^_bcbccbb_]]^`bdggfec`^]^_\XVUVUSSVVVZ[YWTRSUUVXXXWUSTTUVWWXZWTTTRSTTTUVVTQPONNLJIHEBCGJOONNPOORRPNMLKKJKLNQSQNMOPPOOOME<@FEBCCCDEFHHHILOMKNPQPRSSPNMLJMPRSPOQVURPRTWY[YTPOPQOPPMKKKNLLMONNNPRSSROLLRVUTRQPNLMOUXURPQRSQOOPSWWVUSRQPQRQQPONQVY]b`^]^]]``\XTQNNQRTX]_`_^`a^[YXXVTSTVVY[^^][\aa^[XUVWWVUSRQPPPQQSSQSTSRRPNPRQQOMOPPMLNOOQSTUUUVURQPPRRQONNNMLKLPPKKPSVUQQTXYZZTNONKLMLLKNMHEFHJJJMMKIJIHHGFGJMLJKLLNRSUWWZ[VRNNOPSXYCSQSSTTNHHKKMNLMPQTWWTQSTVY\_be586feb^ab^XUTTUXYWSNLLKIJOPMLIHFFGIMPR'VWRMILNOTY[^_^]WTQNNMLKMNQRTVVTTSTUVZ\[Z<[]^\\[\][WSNLJLPQQRQNJD8;LVWYXUQPPOOPTW\^VOQSSRRSTUVTSRPQRSUTRPOS\\WVXVSNLMMLKKKOPMGBFOUTSQPRRPNQUZ01a[XVQNNMPOMONLLMNPQSRQSTRPNOOMNPNLLLKJLOPQPONNMLJJKLLKJJLNNNOQRRQQPQSUWYXVTPPRPNNRVXXWX[0[Z[YUVWTUWWVVX[/10^]\[]^`_^^^[ZYXXXZYVUVY^1346743 47;9888620 13654321143344344310/131//02232128?BDFFF@=><<=<<<;<=<;93WG?::?JPUXWWYWWWXTMIGENTRQQTNFIHC@CGFEDFEBADIMONKIC<@ELONS[][X[_`][`cegb`_ZVX]^]^_bfebcdcb^]^`bbba_\[ZYZZ[ZZ[Z[\\\]^^^_`^]^^_`_^]]^]ZWTUVURQSUVZakmcXQQTSNNRV]cb^]_][ZY^a^]][[ZWWXXZ[[Y[][XURTTRSRQPONMKIIINUZZVUY[YTSSSVXYXTRSVWWW^d\TI?DLT\[VX^aadjifeda__`d349<<@A>9j]VXZWSQOMOOOSTSUVVVSQNLMMKJJFFIJHIJLNMNPPMKMPPKHIJHECB@>>BGHDFHKMNPPLJGGHGHIJJJIGGGHHT5787784deaZWY]ZRMMP8?bQlEWRKKKTUPNNQPKJKLLKJJLPQTUTWY^e4677nkgcYA>k?qe[URRQPOMKIJKLOQNJIIJMPQQSZ^_aa`ba\\\[YWX]^\VNNPLKMPRRRVZ__]YWUOIOPQTZbfd`XTUWUUWVRTWZ[[ZY]`[WVTVW\][\_bddeijjkjmwuqrqss9;@FKIB==>?@@=985/RT07961_a`\WVVY[WRONOMJMNIBECFMORYXRQSXXTT[`bcdjqsnaZWUZ\Y]^[UTZba[XYZWSPPSSSUSQNJKPUURTRT`e^XVNGD?kYUTZWOQ_cXPKHIJHJ-OSTNMOQRQPPPVXPGHVYQPPQPOVbkpl]UV\bn|i]YXWWXY[\XW[__]dd^[USVWYbfkmkebejou|}Byz~}@CGKOPQMF~|zohgd_[dryyspqsrnlqrmjjjffiiihfe\SC68=8>IOMD;:>738;6>$JHapsnhd_\YQRXZYWVUVVQKKOPIMTVVZacjnnlhffimkmswuvxvxvokoqnjda[SRcnpppnkjjkljjjmoomkhc_^_bggaZUY`eihhjnnlghhd``^[altrighfec_[WROLNPGLY]^UP.6;8.JKYdsBHIHEskhfdb`^\[]^YSTUROKF?:@EEIOQSVUR}|PLCFQSLE@@A@@Xt}}~vqpwskrsknx}}}wmfltuqryxbXbknw{@EFD{r{DHF~y}Ewttvujb][grt|DEy|DE@BM\^N}yy}{sx}rgS^1dytnqrx}||GHIF|J|pebtkdfefg`ROUYa\TPQX^a___bbVLB6.3Ibp}DBzsj`YW[bkoh^VURGELS[221ZC=GE@L;BMNC?ACCGMUVMHU8CNT\bc^PMTWXXQPWWSOIDBCJRQKVchq|}xoedb[RONR\\Z\[VURMLMKHEDAALVX[`b_[]becafbZYXTTQKIHKNXf`W[YROOGB>rn=HSYSQ\ZUWUIAJVWYcaNKHEGNVeje]XUTTTSTTTYbaURRSVWUOIJICDEEB~x{DBztrsyzxzx~EFBxpigjijf]iphpsWOWh}ujv{leca]\bd]]cfg`[]aincPKfzfY]VGI]illqhz}slicPM[bjli^_\IBMRU]^[ZUHLSY_UUbhpyzoVSjrkiZUl}vkkskVNDxz|ipGSLF\kqwwtuwmegde``Z^`]iyqKvPWWSLWiuwyzibejlmqvv}pf]UTV^ZLFSUWPC@S`Z[bfinqq{m\ajkcXPQVKAERWV]ifixmcdgid_Z[p|odaellc^__da\^]WRLJNXac]ZWJUVTun_`aaUQZfbLJRQBgC\a`^^`faTKGVUQ_ngWfupnq{|xm\IA=elFLC6]^8f]a9?AL^bbfh[LQ[bajqcPOTPV_`WZpqisjTIMLEIROQXchhmgdvja_VOLGHNPPNGGJKPMDUYLQVUUSNIM[Y[emmegiiqtng]VUYRIS_`^RJKKPNUX]ZSE4:JZ001//0233588449=>?>=<78;<<<;:86443^a68::88875776557776543`Z[16;;621488633457;;::53336752147531242b23456653224642ddedddcbcda_`"babgigfcbc``a`]^^]\XWX]b][[\afea__abdd222ea][ZXUUYYi'(('''('%$')*)()**+,)'(*(*02,)((*,.//.,)))*,+**++**-.,*+-0588421-&""$%*.+)'&(*++,-,+(&'**))*(&%'*-./0//0g/,+,./132/..,+++,+('''&%&((()*('&$%&&'('(('&&&'())*+*(('%%&&%%'('&%%$$#""! !#%&%%&%%&&%%%$$#"###&((%%& $"  f!"!"#&%$$&&%&'&%$###$#$%$%'*('%$%&&(()*)'%%&&%&&$#$%&%$%'&%%')))'&%&),,*)'&&%$#"#!!!#$&'&&'(+,+*(''&&&%?&(**,...,,+-..-+(&%$%%'),---../-)((('&%'(()*,,*((+,+)&$%'((('''&&%&&&'((()(''(('&%&''%$&&%%&''&&'&##""#$###"!"$$! #&)(%$&))*+'###!"#$$""##$$#$#! "%$""##$&&&''*,*'%j))&#$%&&#!$%'(&&&%'()'%&(()**+.10/-..+'&%%'*+*(%##! !#$""!! !#%''&&'((&#"###%()**))&$"!"!!""#%&(**)('7*,+**))(**)((())(&$#""$##$%$$ #(*,+(&&&%%%'),-)$%''&&'%$$#$Q#$$#"!#))'')('#"#$#"!!$%$ $('%$$%$#!"#$(&&'%$$$&&$%$#$$%%&'&%&((&%%%$%&$##$##%H$##$$#"!"""  ""#$%%%&'&&''()*('%&'&%%(+,+**,,+,,)*+)()*))*,..--.//.-,+**(+z #$"% ! !!"! !#),+)+,&"$$" "$$%#"! !#&)++(%! $)*'*0/.-0343266586531.0320135764676520012210/.-.//000/0111332223454290/,,--,++,,.28;60++--((,/3884220///1331110/-,./000/01/,+*,++*(((''').1/+*,//,,,+,--,*)*,./-14.)% &,0/+-13236433210013 1+(+/.,,*(*)*--,,.--*)(&'('&'$#%%$$%'(()*)'%&''&%&'&$"""!!#&'%&')))*(%%$%$$$%%&%$()/10-**,)%""#)3"+&""#()&%&''%$$%&)*E+,/00///*6 92,)(()(''&%&&&)+)'&''*,-,+01011232///-,+,///,''*(&'(3))(*-..,*)'"!! !$(+//+)*+++,+)*+-..--/1/-,+,,-,,.1478787:@=;;99:!$'&!$$%$#""$&&$###"!"#!7!B>??>5)8-3.%"$'&),-.21.-/21./35678= #"4*&%)(#'270*'&&'&'+./++,+*+01+%&/0**-,+*.5;?;2-/47=GKE90./..//00133001431551/--00179:;:7358<>AAB#C>?CC"#%(***'#B??>7311/.4=A><<=>;88<>;99866777542-( #1<>:86421-.24332021.++,,)O,2338?@CC?=<;:;=>AEGFFDCFE>;>?;8894./>@<<=>:88;<;:;<=><;9755568630-/48;;:=A?:788766313;BA;9974/+(%" !%)%)*# "+8"%&&%HE?:98865643441-,*(&" !$)-042.OGGO*% $'%!+?DEHFAFG?;85997=?9:AEJGCB?;69>=;@"&'$?7<"%#B?>ABBG$B<;=>=742/6<=AF$$FB?AG%%"!'26*>82,'&)-22-'! ").,*+*&%*..131.-+)))&#%'"!"!#')'%#$#"'(''((%! !#$+0*'(&%""&'%$#"# !$$#%#A?=<:A:;503653/+4AFA704:6.+-::;>@>?C>A##"=988::9617:5;C>/*.6D@9ABMI86752245004761/139=7(%9E7/30'(4;=<=6?EDA=;96*)37<<8233'")+,1211-$&+/3-.579==7()9?:5.*7?DD;55>;,)%BFG7=(.*&18<@@<;>848796724419EC)<-22.&,698<>2037989;:?D;4/*+,1/'$+,.)!+2.-/02778@7,08:5-(*/( ")+*.755>70122/,**5=60..21,*++.-*+*&$"!$*/0..-%.-*?J:0023.+184'',,!0 /1/../31*")($-86,6=635;@@8-$" 48$$*2!8.-"-00370'*15257.%~&*)-32,.::4:4(#''$&,*),465964AG812,'&$%'&''#"&)+("-/'*-+--($%/.17:93688=?;94/03.'.552+&%%(&(*-+'!!))+'( ++-),*))**+/100///,,,+*+,,+)((+-*((),/.,+,..-, /-+*)(&'**ဃ瀃ׁ׀́あ Rÿ¿½uǻ҄րĸ-τׄ􀇈󅈇ՀưŻ̿½ƀÿ׿ÿǹܾõį򀃄慢žźðȽúĸļ˽žͫ철¿ʰߍˡ˭ْȽ끋逈遂򀅈ɤ߸ο㓲ȺеմĿ¸ˀ¾օ¾¾ĺ٪ôȾº๤ºȀ¤˽βº±҆»ĻƻźȀ˵¿ʻ̻¸Կú념«ʺο°偉삆􀍕) XWVUSRUYZ[ZYWUWZ\[YZ]YUX^_^][Z[]^\Z\][YY[\[\^\[\^^]_bfhioturlhc\VSTX[a2ea\YXX[]\Z[_b_\[[ZY[\[ZWVWY\]_`__aee`__`cdcbccca_^\][XVUSSTRNOTVZ_[VSRRQQQPRWXWVUTTTSSUUUSRSR5UVVUQNNNONLIFCCEFIKMOQPPPONMLKLKKKJJLOPNNNMMNNLLNOKGFE +GIIJLNQOKLMNPOQSRRUXX\_^[YVRPONOOQQQSUUSQQSRMKLMMKKNPNMNPRSSRRRSTUTRQOPQPNMNNLMPQPQRTSQQTWYWTSQQQPNNQRRTTTWYZXSPLKJMQTUXZ[[Z\_``_\[]ba\YWUSoSRTVWW[\[[[ZZYYZ[[YXXYYXWSPOONMMNNOONMKJLOQRSRQRSRRRUVUSRSSRSSROMNPRONNPPOOPRUYWOOONOQQSTUXZZVPLKKLNLGDED@=BHJMPNNOOMLLMLJIIJJJKMOQSROJJLLMMPPOMNOOPRSPMLMLMLILNPQPOORWXWWZ_baYTSU[`cd^YXWWUTSRSTSRQRSVYXUTSUWZ]_`\[\ZWWWVVSQSUUTRRSTTVWVQOPQRRRTSRSSQPPSW[^]ZXYZZ[ZXWWYZZYVTTRO;QQPKA=@JZ]YVSMOSTUUTY_b`ZWVVTRSRSTSPOOQSQMMPQPOMNOQWZ[VQPOMN$MNNNMMMPRPORX\XUVWPLNTXWUROMNMLMNNLNPRROOPPOMMNMLLJKnJLMMORUTRPPPONMMNOOMLMNMNONPRQPPOPQSVUQPQQQPNOSTSRTWWXXXWVWVVWXWUUTTWZ[YYYVUVUTTVVTRSSRPNRUSWZ/223334456543235640^[R[56434322212112342//0210/...///0012459< +?CB@ABBB?<=<;;:5XGBHPVYYZYXWVaXURQPRSPLJKIEDFGECCEGIKKF@?EJMNKFB?CJSZVSXXUSV^a_YSQRYZVWZ^cc_ZWY\_bccea^][[\^__]^][ZYYZ[[ZZZ\]\\]^_^^^][\^^]\[[ZZXWVUVVUUXZZ[]aaab]Y[ZRGIMNT[[YXXY[\^aca`_\YVSTUVXXVVY[XXWVUTTUUSQPMKHGKOU\][[YXVTSTSRSVVUUSSVY[^b^YVNGHNX][[]^ae6fecbaabbaaccc359=??=9gcb_ZVTRTOLQRRPPQTVSROLOMJJHEJLLMNMPSTSRONNLMPONIEFDAACDCDGIMOPQNKIHIKLLKIHHGHHGHLV\24445543dc\[_`^\[TAli4COLNTVVTNKLLKJJLMLLMNOPQRPPRV^g68::6ijg^TYtGEr_ZWTSPNMLMONLNOLHHE=?EJFEIKNPRTXYX]`WTVYZWXVONQPONPPPRTVWZ^_`aa]O=CU[Y[``^`a^[\_\Z[ZUTVZ_bhkjjga^_ceb`ejjhikihkmlknwwqvsps;=@B>=>ADDA?=:8775312357641\YWTRRQOJECDFEGMRJ>ts;=AC~mf?TUJEDGGHJLNQSQQRSSPPSWWWY[bfc^[ZWWYY]^]VRUWWUUWZYVSPQTV`imlgb_bff`ZV\fc`]UJFD>Fdkf`]^_WKR\`a^VUVVWROPT[^`fnrrr<@B?jSUTV\^XXURSRPRUVUWXTLIKQTOPURLHDBDGNUSLJKMTbg]WUUWZ_^`f_XXZ\YSRQPNKINOOU_eddhpri_YVW]cggfjmnpqrzCDDEHIHGIJJLKHGGGDACEtlmmiilnmjhku|yusplhcbgmmkkhdZONMMLG:7ETWNJIDC@?A5/CZcbdfgggea^__\UTUTUURTTPNOU]_\Z`b][YWX[]^bgmw}|~rkoqpqv]V^RUcfmsrlffnw{xronjf`]YWVUUQIHNYeihklkrzysnmnqldadqy|vkfb\TNJHJLLIA2L0LTG?QOC9-G3UnEzvqidba_aefeb[XX\^`ddedZMEADJMNRQRTPLPWWZ\TF:;<99;<=D\p{~~IJxj__aipnpvy}}y|{rlkmoqofbgmtsgdluBFDCCDsvCIF~yskowxttuyrjiuBCCFHGFzww}BEHSZTF}}E|y|{tpswqgV[x|sruyyst|FGFwkjljfc^VSVVTRLJNT[bcc`__^YLDO`ouwwnfirvjb_`aehd^]\TLLW/VQLI7):C>DS89GX]XQB>NVPKKKIIY;DIS]\YTOSXWWYUU\_]WKA=EQXXXahhmuusmgd^VOMOS[[WZZTQMFGLJHIGGHMQTTRRUW_efe`]ZYWRNMNONKKOTTOOW]UNKFB?>BHU_YRXc^VQJAHW\QMZ[KGFEHUafkj`YUUVROW]VPVYXTRSTTRNKIHFDE~y~}xsroptx|{zD|vnjifdjxmdbc|yWQ\wxh`emG~wpa[Y_iecdh}`X^fg`b^l{`PNLOX^WYaj~}pgdgfa^UQ`tuedcQMRZ_dd^QDEPVYcfZdumfioaSX^Ycjp|ug``]`^SNCxDgb@FVpm^]gr{~wnd^]ZZ\gkhe^RB@LMOX`]\dghmtyl`W[ip}upple`YVTPLNQVSJEWfehgcb_`efc`\Y\iqgYUM==Mdc]``[jsibceeb^[djlfacff]R]gdab_ZYTNOMMTSNOLGDHNftgbjijm`Z_XCAR[RFRXOGEQX\XJT`]UYcmmc]mqnfnuaXZ_]QE;CPC7aOYbaj>@>CJLMNMHFJMQSZwE|xybQPOGCS[Vgqebj[>?NNLOPT\^WRVUQPSUROIGQZYVSQIFRXU[\WRUURVVQV_XQTY`lrpnlrth^_`RKMPWZWPFLLOQTXYXPF=GT.121YOT/137::659;;<>?=99;:8898533F31[069:99:954786567786543_X]236997667533235=?45=931c466547:73223ed3f35642267532d``bddcbaadb\]bfgd_^a_]\\`\Z\\\^_a`_bdba_b2a^^^_^ZWXY*)('%%$'*++**+*)''(+,+)*,*(*--++*)*-.,+,+)()`*+*))*++-02347::841.+'&&'(+-+)(((*++**,-+)*)'')))('&()+-/0/./230///010...-,+,--,))(&&'%#$&'*-*&$1%$&(('&%$$%%&())'''&&&%%'(('&$#$$$#!  !"#$%%$$#"!!!""!"#%&%$$$%%$#"#$#!  !""#%'&$#&$$$%&&'(''())*,+))(&&%%%&&%$&))'''('$$%c$&'&%%''&%&&')))(''&%%#! !  ##!#$&'((*+,,)'&&%#!!$&&&''*,.-+(%"#%'()*++)()+-..,**-/.,)(&&%%&&%')('&8()))()**)(&$%%$#$$##$$"!"$&'()(()))((++*'&%$$$%$"!"#$#$$%?&(+*$###$&&&'()**(%#!!!#" #$$&%%$##$$$#$$$#"!"#""#$%&&%#"$#!"#"#%&%##$$%$"$&'&')*)'(*,,(&&'*-/0,)((('(('&%%&'))''&'(*+,-+))('&%&'&&%$ &''$#$%&&'((&%%')+-,*)))()'&&''((('&'&$9###$"#-0+*($$''(((+/1.)''(''&%%&'%###%$!!$%%$"""#&()&$#$$$#"##$$#$%$$%(*(&''$ #$##"!"#%%$%%&&&((&%&%%$""!!""!!"##%')(&%%%$###$%$#"###$%$%&')(&%&&&%$%(*)'(*))**))*+) *,,***)))( )))(&((&')+*%+!! &!"!!! P! !"&''%$%%#"$%#""$%&('##'(*($!#'*-**-,**,133/*),21.015983.-/135567420/..//0/ ...///..//./0 1112210123310/.-,-.023242/00,%&+,-110..-./0233210.,*,..//..01/...-,+,.-+)('&&'*-12///..,+--+*,,++**,.023/,*'%%',0//001342221211012331010-++**'$(***))+,+*('((%%$"%' &''')++*)'***&%%&#"###$%'*(&$##%$$%$$%##&+-01--/.,**(!98"'$%)))(&$%%%$$%&&%&'()*)(')+.1.01-+.='&;.-,++(''&'*)''(&%%##&%&)***+,..,01,)*-/-.,'')(''('&()*+,-../0-#%%#%*,,/10/12/./.+*,/12576630/0352037656766899:;@>9<:89 !!"!$$#!! # 8; """@96+"0/)&%'&()+,..,-.//-,.111237986541112454/,./022/.--./5;=;96479831048544.(&$%8;62011,%*131.**+,-*'')-/159:::#"2&('&)+*,,+,*)*.//01-(%',.+,/-)&##%'*-*%$&',7;50.--.21494--/10,,,-+)(**),25436:;61/.0478779;<=<;@F##""$&%$%&&'&%%$#"!#$C;7897778999:>CB?=;97336998863+%"! ''.54689997788851010011452//378558;865435558;@FLIHKJC>@A??B42?7379=@@<88>EIGBA@=9640..--*$#%.9;9;;8=BA=99;<8326@EFB<861*"  & %%#%'4C$GCA@>:88646::852102347895-%#&(**,-)&+..11,$ -;@CDDEJ*)F<51237<;;>ACC@BC?;::;<;648;@>427;!%#"#$F<<"&%A=:6:?DIIE><=?A<76;"#"%%%$E@??A#%&,2.$<=F%JJGC?@INNJC=9:>=6),BIC<;=@EE@<<@CC$&ECG'MIKICDKK@88;:873-+--,+'&)-1564320-)! ,6:;=835:=61.--/1.)%#!"  )-+++*)))*)/6651*'((%"&'%&&&(*)%"""#%&&#!%&(%##! "##%())(''%&)'&%%%&" ! @>>?=:54640,,.1CMA76661&%0;:-&12..-&$.1.("%! (#$(.-+($'+*+,**/0.+$")..,267:@@=9530+(()+0/+-.+(%!"%%#$#"$'*++*+..255410.,+)'')*)&&)--)(-1,'%"  #+2/*/73.-(!%/3+'02&$$$%,36772-+,-+(-1,(,.-*)+,-+(&&&%FD##@>AA=::9:=?BDA>G$E?;876547@9430AWE-(1DF926;H(D>:3104:6456EE3.2894408HB3+*)*15//25ADB;425632-*2==568+(+14674,$%+//66.292-17/(.1,377BD@>725452,+%D(O94#%-@>438=BC?;7452128;886/#"*,,040.3447<>72-/58AD><=940,++(%&'+)$"-6242//-.230/-.17;5,,((31.//,5;4/021.*'.440-.00*$+1/--*'&$"$##)(&&'#"&(7>41777:3041! ,3,!(-'" &*-,#)1/),2::3/8:618$>;>1((("+/+7?515-)(&)*,11,),-+*+.-+&%+0.++)%$.1.33.*,-*,+'*1,(+.39<;<;@C;567.))*/1/+$&&''(***%" &)%(+,,-!,++-...,+++*((-00//0/,++*)+".-..+***)*+++*,-+*)++**+,+)(('&)*ɀ׀―~€́À倄 ڀ¿¼žրÿ¿Żڀƿζڀ̾؄ـĽǿÿŻ½¿Ϲzοż ˾žDŽĀ톍DzĩĀƸ»ùƶ½ǼĿƲŹſúķĿĽľǽɺʅښķĿ綸錖쎒ñހź􇠝ǿπǬ˭ᕵȽ¼õȀòо򜺸̼݀ĺǻɺ̹ȼЮƺк̀ױܿνجƶ݂űǷëɿǀïԼ̻ƺԿǀ̵½ƴȺĦ胕¬ĸ«{􆊉%YWWYXTSSVWWZZXY[[XVXYWXad]VX^^\\[[[XVTVXYZ\ZYXUUY[]``__adfimqqokgeaYPKP\ad695b]WWZ[YWZ_^^__]\[Z]`_ZWVXZ[[YXZ]]^]]\]]\^bdgm8k_\][[WUTSPOPRUUW\_\WVVUTSPNPRUWZZUSUSPRUSPNNNMLMOOLKLLLNPPONMNOMKLONLJFEFGIKLOOLLLKLLMNNMKKKHFFFG*FEFGHIJJKLMNOLJIIHGGGILNPRTWZ\[YYYZ\\ZUQPONlQTTSQPKFGJLLLKLNNOMLMMMNPRUVSOLMOQQNNQTVWW[^ZUSSSRPOOQRUTRRWWTSSWZYWUUWZ^bc`ZSRSTVZ]`acdcbccb`XPQW[[USWZ[XVXUVWY[[[YXXXWUWYXUSPNMMMLKIHHIJLKKKLORSTVY[\][ZZXTSSRNKLNPNONIHJKKNRROKKMPQOPQNMPV\XPLGEDEEC>;;<;BILNOPONNPSQNLLMNONNMNQQPPNKHEGKLMQVZYWXWTROMJEDHLO2STTSPLHFIQ]`\XW[[[ZYWXZ]]ZXZ\]YUVVTRQRSSSRRSUVVUVZ[Z[ZXYYXYYWUUVTTOKSVTUUTUTRRSSQOOONOPPQSTUX\ZUQSUTSPQRTTUVTRUZXOKKMNNPOLMORVURNKKNSUSSSV]baad^VI;>PWSRQPPOOQQOOPPONPSRQSZ\TNLOPPOHNPSRPOLJLQSNMPV\YUUTQRVWWWVQNNMKKKHHLOPPONLJLOQPPNMORTSNLLMNNNPQSTUURPPQSURPOLMNNPRQPQRPNOOOQSUQMLNNMNMPVSOQUVTTUUVXWVUUVWUUVXYYYXXXYXUSRPPOORUUPKKLOQV]12122430_\]adgf cXMTb34666542 100012221010.X,...12346998;>ADBCEEFFA=?@><<=<::;7-*+-...[XWTQRTXYXZWQKFBACGJHFIJGEJLEJTSF5>IIILMNLJRUTVXYXWZ]^]_`WPT]ZSUX[knaYST[_bfe^YVWYZ\]_#]\[Z[\^_^]]\]]\\]^^_^]\]\\]_^[ZYXXWXsWWZ\\\[\^][^`]]_\VTTOLOTWYYWVX\_cd``_]ZWXZYWTPPRTSUY[ZUSTXYRMMKJLORSW^cef`[WTSSRONSUUUSRVZ]^[Z]]XTQR[`_a_]^``acbacdba`abceh676566ia]]YSKNQSSQONOOQTSQOJHIGJQRUWTQRSRRQSSRNLLMOQPLIJKJGC?>@CFIKMQUUPIILOPMJHGEFJKGIQVRRZc5433b]VW_c`ZZ]]ZZWTSSZehfdbZRMJIJLNOOPRSSPNNLNNRZi7697fflkYKObGtde\WUNKONNQRQPNMKJF??BCA>@CDEFHKMLPWXWY\`^\[URTTTSUWTV[]][[Z[_a]QIPZYX^`\Z[ZXW^b]WWYVTVY]`hbnq:9hhmopqpsvtssusoloqlioqinpqt;=?B@=>@A?4WT16454412320133`[VTYYROKA978:=CIPPEfe}BDB?usAGCDCCCFJKMQPOOOPQRRRSUWXYZXVVSU_adjf\YXSSVX\^XTZ`dfffif\W\eijdXRQZcdd`UHCA=JacZ[ZUVWWY[`bTQXYWNBALRVZ^ekqzzzBFBjULIS_``_YXWTRUVVYZUONNSTJ@BINQNFDEIQWZ`b]ZYVUURMSXZ`]WXWVTTTOLKKMSW[fnrsstuxEDzhaelqrommnqqruyBB><=CJKILOMMKHDA|xvtnlnliiknprqqromquvvrklppmllkf^[[ZXVLFNT[_ZVTVRMLJKSZ_\TRV[_eopigffe]RMOTXYYYXZ[ZYVTUTOKQW\Z[`ekopry}{wwrlkosyysXmkbeioomljggnwrllkc[WSPPQROFBEDNcgfif][_bfiklmkc]gtf^\XUL=:BGD=4K-A8FGCIOSOGFzv~zx}zokd[[_hqmn|IJFC{xL^YIwplmqqpkfb_^[VRSTUW\bbaba`__`be`[clmmru}vf_ac]XZbjg\TRQC7LUD89?CDAN?V``^XSUPJNTYZVMJMPONNPQRTUUXYXSJDABEJLLIHKMMIDBCCEFEDEMQNKLKJJHHKLHGC}}?@{w>AA~{vhbcc_\akpzlndZdjb_dbVB>Uaf[G>A@<5XPW>SUPJ=DYVLGJVWLL]:KVUW]\Y^b]XWR[r|ygPBBMW[Z`musquxtib`]UMLNPX`^XRLLLKINNKJKIDDKW[[aciqpmh^WUUSPQRRSQNNSURPTXVRRNJHJMPRX]YTTSYUDvBQ\_SHP[TLHGKV[_mpc[VSRNOUQEDTZ]\XTPOOMKGDDBELJDA|yvust{A}yvpqvxxsprpjlsrgahsmZY`dpvl_]^qKGg`facekvuDjYZ_agndj|nVNQ\c\YRPdzuf\^dekmleb^^ro_]gpd[]__YTK@@HV\bfk{kyIKNB88>:79:97 42352[\35543:45544679:8653a_1224677654212335;;249831_12344797433e233e356!7632456653cbdgfe2b`^]beccg5654e`^_$^]beihb^^\XWX[^_``ab232`\ZY[\ZXYXWWZ.'&&''$#$&''))((**(()*((.0,)*,,+++,,+*()))*+**)'9))***-/25698520/-($"%*,,+)&&(*)'(++,-+*(()+,+(''(*,,++->,,,-.--..034.,,+*)('%###%&(,.+(''(('%$$$%&((&&(&$&'&#$%%$##%%#$%%$#$$$#""%%#! !"##"""#$$#"""! ! Z "###$$$%&&$$###""##$%''(*,+*('()*+*)''&%$%%$%&&'''# !$$$%%&'&%$#$%$$%'*,)&%''&%"!!"$$$&&$##$%&'(8*)&%%')+*('(*-010-++*((*+,--,+,-//.+&$&()''*++)'(&&%$$%&'&&&'&())'&$#$%$#$#"! !##""##%()**-.//,*)&$$%#! !""#" !!"$''%"!"$%$%&%#%*-+'$"!%'&%&%##%'%$$$%&%%%$%''&&%#" "##$')1(&'&%$""!"#'((('%#!"(02/+)*)(('&'()*)(()*(&&''& %%$$%%&''')*)('()'()(&&'&%" %&%$&&'&%&((&%%$$%=&()+-+'%&(&%$$%%%&'&%'++%!"#""##"$'*-,)&#"$'('&&(,/.,.,)"$'%=$#$$##&&&%%&%$%)+'"!"$%%$&('&%#"#'($"#'*(%%$""$%%%&#!""!"" !#%$"#&''&%$%&'&#"!"###$%'()(&%$%$&%$##$$%'&$&&%#$$%%')'$#$$$%$&*)&'()(,++**)**))***+*))*+*)(&%%%$'))&$$$%&)--,.021/--..(!&0&! !!! ""!!""  "%(&%&%$#''#(' '&&()*(&*+(*-.,,010/12.,-1/,//3?>6.*,135762/-.../00/00///./0110//.//./11121011001210/...-..-,,,./0///01i./0//0/,+,*(),-.-,+-01342110.,-//.,++-.-.010,+,/0,)(('()++-256630.,+,+(&)++,+*-./0..00-+**.2110./111211331012244461..+(#%')+*(''((+*))&$%%&)*,-,**+++**++)((()**('()(&$" "$%&'()**'##&((&$$%##%&#$(-+)-2/-))/20+,.-**++**-33000,'$"#$%&'&'()*(%%'''),3'(-/'")4F&<45/+*&%))()**(&%$%$!!##! !#%%%&''&(*+,-/100.+))*)()*((+--,,++./-% "&##(,-/0/--130.,-+*+-/04.7943788879:::<==;9;=:8;<67779! !! %# &%! !" 15D$#"!==%)''&%%&()+..//.--,,-.../11233221.18:;?;420--/0340.368989:82/38::50-,056650'$"'53./.+++,-.13*(+,+%#'(*-259>=3047;==<<<=;:<>B!! #'&%((&&%$"!B@>=::<;7569;=<<<;:<>>=:77::98972,**)((!"'))&$%%! '-20,+.25:A?99<=;5-)),./02445332243/+/34357:>A@AFGGED@<=@BFE@2BD^89=A><<<979:;731/,+-.+%$&$*59:=<755789:9850.9IF>6330-&#" &390 ;(>@CFHGEA<9988;=??<:8/*02*$"((&%$&''-9<::3+%7&$)!5$('D?>DN(GCC;57;@??D%%E>>?8203%,-&"""D;25?DEFG@:<@EGFA<88:=@!$&'#CGGB?=>AA!#&),+$@CEFFK'KHJOOE@HJDCC?ACA'53)GA=::=>>:64221/,,--/26654110./0/..26658:AJNJ>400/,**-0-%   (///,(*'#%)-/-'$$&''&'('))*,--*$!!#%((&$#%&&$" "$#"#(*(&%%')&%">=;9!"CB@95564238B@933/)&&()-10-*%$$#"&'%$%$"!$+//358>>:60,++)')**+*''+-*)-0-)('$#$'(),1.,..2/#;"+23+$(0,(&$'.//693/-,+().," ).1/,+**)(&$#$"#((#"D@>>=;:>B!A?>::>@?<;<:79=;406A@0.36<>9333=IH)(7499:89=/(*140-('3A>7103477511./=<23:=5124531*G$#'.0344-+;8)&+5C)OD9455.*.373&"$78#%(/52.047@F?8/*-2248;82.*$)0,*3<9/%+/+1<:3-157==;;6:??<7,$&))*(#$168950.0.)/;71*&,7:3-,#00* 1915D<1/-040.11:>5-**++,1-)**)$ !&'&'%&)((#!$.;20;9>3./.+*,/.-*(&')))(''&" W''++*+,=---/..+*((,/.-./,)('()*+.133/,,+)'')+++***) ***((''()ʀ׀ހ΀~ǀƁ ـ逃Ā [¹ľȿ½üрŽ؀Ƚū܀¿ǿÀ½ǽĀƻ򄉈̶󋍈ĿøǼüɼ׹ȺހĺÀþŵʽ񌪻ζ˛Ⱦ¿퀊ű􆎎ļÿɿǞ܂̻ǸǺĪ¯ֹێǀƳŵʻijԼʴļٻεǴոƶüފʻøɹɀȷȺüǼɬĶ¿曳Һɼ׹ðŖŶ큃0WVV\^[ZXVX[[YVVY[\[]_][\^][YZ[]_[XXZ\\]\YXXXWSQTWXZ]`bbadfjoplgaaaULNU]g898jb_\[ZWX[[ZZ]`aca^]__^\[ZZXXY[]\]_`ba]Y[^afh4igfhjhc_^^^_ZWWVTVYZZXTRRPNMMMKLMMLLKGGJKIFDDEGIJKJJKMMMNONLKLOSRLHIMMJILMLKJJIIKLLMNNMKIHHGFEEFFGGHJKKKL&JKMKKKLKIGFFHKLNQTUSRSSTUUVUROMLKLOPPNMIHJLLMQSRQPPPOPTWXTTY\XUT`W[[\^^_``_a`[WUUUSPNMORV\_`cecbca\XTRSWZZ[^`_[Z\]`cg554gedc`YRONQV[^_``__]\YWZ][XWVTUWYZYXURQQPQP&RQOMKKLMKLOQSTVXXXYZ\`_[[[ZYWTRPNNQROML+HEGJLLMOPMIIJGDFINTXWTOJGGHHGGECGKNRTRNMLKLMORTQOOPRSSTTPKGDHLMPTYZXUSQ&OLKLOSWZYVQMLNRRRQOPV\`_^^dgc``^\^_^_[V+WUUUTVWXXWWYZZZYXYYWYZZ[ZWTTUWXYXWZYVUSRSTSRSTTSSUVVV\a_[ZYTPNOQSSTUVUTVUPIGHIKLNNKLLOTYWRRUVW[^_`121`\ZVSNJOVVQMLOPPQPNMONMPSUWVUTVTONOPRTVRNOLLMMKIJNQSTUY[[ZVOSYUVVSNMNLKLNMR[^[VQNIMWUOKKKJJLQQLJMNTWXVSRQQQPQRRQOONMMMNPONOQQONNNQQOOPRNJNSSNMPQQSUUQQRUXZYVUVXXVUSRRSU^`ac]ZTPOPQRRSUVWXWVWZ]//0221.Z]^]]\\WLGDCDIS\[WUW`3454223<345530-Z./1442/WSUZ.[X-.--01333789<=>BDGHGHID?><::>A@=>ADA7/-UZXVRSTUUYZXXVTNFBBHMMLMLMMNOJIQOICCHIHKNPRNNRSTY[WVX[ZWXY\^__]YXZanpdZRSY\^ad`YUWY[]_a ``_^_`bba``_]^ +\[Z[]^_]ZYXZY6\_`]\\]]ZXZ[[[ZYZYWVWZ^_\YVX\`bccb^[YYYZ[YTQOPPPQRSUTRQPOOPQPRUUX\`a^[WVVVRMMYa_^][ZYWVVZaaZVSUY][[]]\[[]``_abcdfge`][\]\]_`bf67lkie_[\^ZZ[VQNMORUTVUPNOPQQPTWUUUWXWVSQPMLKMKJKIJLKGC=7>9ppnmmmjktzxtollmkhilmpqpr;>?A@>?><82ZUY233213452ZY340ZQKPYOJOOF;3357:>HSFa\uEDBvkuBBDEFHJKLOPPRRQQPMMORVSQTWYZWUWYUSX[[`feba]\]_aba^]__bc`__^WTV\a_WRMHMTWVTNB@?:f_[WY\^acb`^XTSW`feaaccb]VRRQKSZXUTSPPRQOQX[\]ab`chkmnlkkifeinv}|ywttspmv{mjppgabgmpiea[UQMLOTWVW[][]`acfhgbcgjmruwwuxtmljc][WMFBA=>BB~IX^bbnkmsnerqprttqlebabdfecdeii]Xg~xj\SNNNPTVUSQSZefa_YUPICA@@MuLRQLD||IPPI{vrvx{xtql`USV[Z_jrHIFC}z?ACA{Dvmp~ur{xnnxELKHCximvzzzw<=@ITUOIFGFEGHxkk}}zqhnrnoofdirIMNH{GMNEshgjjdhstpjd`[VQNWabcefebb_[\cfb`Ug:HJn{}}{qd\]_a`^bp6?JCAV_SKGOXUSSXfgSO_BSPMWf`UY_[VTYthWLIRXVPR_nususj_VVWVSNLPXa_WSPQSTPKJIGFFFCFQTT^iqwvtoaSQPUVTTQMNPRWWRPNNQPOQOHFIOQQRTTRLHPSLMU`lldZ[`\KEHOURZmrcXTOMMOICFNSWXV\ZPLIJLIFDEIJGCB}wvz|}A|tpuuqspknnijsug[WOLZgdivzmbgmqrlxlnvn}tlfcgmnmkhitjafZ^cNPho]S[^\_emrrg`a``^cngUSXRQUPIIDAS^]lpnnXHNvFubWq~sk`]_XLDGSajg[IhbBOQYbXT]\]d^[dgtuidefaWU[_XSSVY[_^NNUMHWfadla\WVY[]jz@|xi`[UPICISclqpgglnhlpi`YRPT_gb\UHFRVNSmwdURY[SVbimsvl^XX_giaZYYURQRSRQRRRQRMCJW]VI[uwnjc\[\[ZSNOYZ\WSWXGAN`d^bc\^baebPL\ZV_XV^abZNIQKsuofK[c]NC@IOJA@AC@;@FLHDGOW`n`ZYdrwo`ZUWafbY[juaPOLENXTPLBth]sRCbzJ\qs[QGEV\[ZXVVVTW[\ad`W^bblvoJN]ZXSUeheicXMEHPPNMQTWVSOU/0022001233578:<;;<<8689987766d^caWZ243ed34446778:8543c223652357631144358'752__122344675211232123567887544456664db8aabefghfh67543b`b``bc_^addcdfd`\[YWWXWX[a2`\[XVVWWXYZYWW1(&&))((&&'((('')*+*+,+*+--+**+,,+**,-..-+*+**'%%&%w'),../1345540,-.&!"&+11,*)))'(**))*+,,+(()***)))(()++*+,-//,**+-012123430-,+++('('&(*+*)(''%##"  """$# "#"  !!"#$#"""%'&! "" !"! "$#""!! "#$#$##$%%%##"#%%&((''&&&'2&%$#"#%&&$###%%%$%&%%'(&%%&&%%(**&%*-*((''&$$%$%&&'))'$"#$$#""$&),,+-/S-*(&%%&(((+-,*)*+,,-//./.+(&%(+--.--,,**'&')(&&&$$%&'()('&%$###$$&%#"!"""!!#%&'(*0,.-)''&&&$#"!"##"! !!! !"!"#$"!  "&*,,*&# !)#&(((&#"""#$$$#$'(&%%&((())&$!!""#$'('&%#7$$! "$'**(%%$$'('&$#&*+*)*.1/,,++,,,+)''((('&&&%&'((('('()'& ()(&(('&%%&&%&'&&()((,/.,+*'$##%'&&&''&'(&# !!!##"#$&+.-)(***+++,,)(&%""'(&#"###$$#"###%())('&(&#""$&()&$$##%%" !#$%$%&'''%!#'%$$#!!" "#"$))'&$" "))%#$$##%('#"#$'))'&%$##"###$%%$$&&$#$$&&%%%'%#%'(%%&&&')('&'(*,,)((**)(('''(.//0-,)&%%&&&(**++*)*+,),---,,*%$$#"#).,)(*-)'%&))' "#""#""  !"! !  !$((''&''((&&)%  #%&(*+)&'))*-.+*-/-,-,022110017@?7/*+./13530./0123443212100134311100/00/.../011/..--.//-/220.--./.- ,,--/10.-.131.)0.++*+,+++,,,+**+*)))*+**,.02342/,+++($$+10/.,+-22.,*+./.-./..-.01223441/./0///0147663/-.0---+(''()++,,*))***)+-,,,-.-,++)'&&''&'(())&#  $%&&&%&'&&%&')*)''%""%&&'')(&*-0442.)*,---//01122-+-33/.|,(%#"#&&&'()())&$$%$#(+5* !'.27=7-),.,+,*))+*)()*(%$%%# "%&''%%&&&(+,+--,--,,-,+,../011//,)-0/+'')'(+,,/0.,)(*--++,+,,/4; 87677657=:978778::;:99 !'####$  % !# 0/@&%#<6?$&('')))*+,,..-.-,+,.0../1221011./3447;;96311245544557755762//264/+)&)-...*#8&/.-))+++--/0//-+*% !(**-/4;>> "# +!#&),/10,)('(-0.*(+..'"%*-/24892//01.+*))*.0//,.211220.,*+27746;:9:;9::;9879;?BBA=;;;?!"!!! @?<;:66;<9788999;>>=;:9;==<;8;>=<<<=>95446679 ,(&$&),03431/-.05886456752///+MO06532201210/34347877:=>?>>?><;>BHJGDBA?>?@HJ??@@@ELJ@?@=50,("6!)-//65:J[;N2:;<8668987767:;43?MNC;3,&#"#%''&%%&')/664310,&""9).-(">>B&++&FEHGDA=:<>?>;:92+*,10169A'('$@="#!=A#GC=7:CECEFD>;?DJLHA:9>$((&$?56>AA@?  &,.+'$$$EE$&&KLMJC:9FNJGDB>7:;9;=757;CI%(*'IC>BGED$(+'<33686:AB>:630.*(-445786420./3531+0&(;?ADCDA:3../0>.,/771)##" .54-)++&##$&'&&*,+,/2.,,-+*+++($!!!$%&&%$" #&%$()'&''%#!==#$!;;999!$%$GB:899;?>:77;73<92792--++'*7:2&##! "*1*%"(.+'&)46($.!+(%,72+-1.++->QH5*#!&+*'(1:=<==81,,-,*&%'-44.*('))'%%$"!"#!"*-,19>A@=:1)((++**)''((,.,)((*)()'$"$'(((*+*)%+.'&,3::4./41'#%)+(+7;2,,*'')'"#(+./.1/)'%&'%$#$&'%#"EB>>ABAD"BBA<:==:;:7:945<=5..*'/657?C;58=@HKQR<;E=>MKG>8BA:5324877754;625.14'(8;/)/21359:;4/23437>8,+0.-0-((%"-319987($>'>4/?OIA<4251)$'/8><4)85%,+/5/,21174057=C=52454/-250--.0143().)%.733930,+0217?D!>:2--)'$!&-59;:436604940-'&(.20.+"!,-'+:EPM=2*(,0('-038:5,)(,01+$! ""#&())*'!%-2.&/?D?;94//0//+)*100,'(*$14056013464(%..,2,*023.'%,*>A<6+373(!$'# "(..+,4;?9/,+,376..9>2i(&&"(/*)'!850>.%3A'1>?0)#"-00/-,,,+-..264.244:?F9$*531,,47563-'#$)(%#$%%#  -)&,-'(,,-,,+*+.,,-,/-//0101+*+))++*),..-.10.+)'&&'&&'+*))('''()((ˀ쀃€ڀ怃 ̀ŀ~~ 2¿¿º¾݀żľȿɀվź{ɶ񀁁ෛ¾¾ȿڀĿ¾̀̿炋̸ɾŀ쀂Ѿƺ¿¾ŷýȵM􃆆ƿǿʾĽ郙̀øµļdz¼ѴƱǹï´žʊ̷ûɲδ͹ο޷πιžž¹ہҪŹǫʿ􀋐¶ô¶ȼŻſIJӔ¶ƾ7ԞѷZVRRVXVUUVYYYXWWUTTX]_^[YWVW[ZZY[^_aa__][\ZXXXUSRTVWXZ[WX[]bgecdfgc][XX_fhif_\^``YXYYX[_`a11cba`]^`][ZZXY[\]]^_^^\YXUW]adeec^\[ZZ]^^][]`^ZXY\\[[]^]]ZXTOKKPIIKMLHJOOLLMLKKJJJLMKHHHIHFECFKGDGKNOMIJKKLMMNNLKMOPPQQQOMMLKIHGHHJMQTTRQNLKIHHHG JJHHILMLKLNNOP0QQPNLKJIHIJKLLKLLJIJLMNNNMKKORSOOWZZUSY^^\XXZ[Z[]^acdc``ccbc`^[Z\_bceffgfdc`_][]]]`dikga^aa^_bfgda```]YVVY^bdcaa_1221_\YQPRSTUUVWUUTPNNOOPSRRQQRQONNNOQRSTVX]\[\]ZYXXYWVUTTSRSRRRPLKJIIJIIMMLLJHFEGHIJJIILQWXUQMJJKMOSUVROOQQPNIDEHKPTUUSPLKLMPRQPRRQOLLNNPSTTSTUTSRRTTSW[\ZYXQKLLMOMMOPRUW[\\[]dd`]YZ^bhkhd][]^[XUT=UVVUVWZ[\]][YZ[[YZ[[[YYY[]][XWWVTSTTVWUVWVSPOPRQQRSSSTVVUVWUSQSUWXVTSQMIJJJKJKNPQPOV^^WUWWZd78531_][WUTVXXUMIJMQONOOMLLKMOPTQOPPNJIKOOOSUQMNQUVSMKKNSQMOTZ[VPDCKTb`XQNQSRPQSX/]UU[^YSQPNHDCEGI?LMIFGIMQQQRVZY[\VRPONLLKLLLMLMORUTPPPNMNMMNRSQLJQWQGHONPUVSNPRSTVYXTSOKIKMNPYc3`\YTOKLMNPTVY[ZXUTX[.000/.\[YXZYXUNHIPX_ce`YVZ121211320.0650VTUWZ./0/ZWW[//0//./0//022/.15:@CCBA@>;;::=CGKG@@CDC>5,)*VWWVVXWUUY[YVX^ZIB@EJKLNNOQSUVTSQNMNMKGFKLKIIKKOUWSOOPRQSPSY[]^^ZX_puiYRSXZ[_cb]YY\]afkkgffeeb_`bghb^_^\\[[ZZ\[Z[\]]]ZXWWWY\\YY\]^a`\YY[\^]\[\\WTUUUY^^]`^]]^`bbcbba^ZWXXXTRQOPRSSRRRQPOONLNPPPRTTUTUWWZYVPPVWTOR]ca`_][ZXVSU]b_YY]ee_[XXZ[^^\_aabbdeegfa\ZZEXVW[]_a`]]_a`aeghda^YWVWWVTTVWUTTUUTRRRSSUWWYUQPNNNKLJIIJGFHF?4\l?GKMKaLMJJMPQRQOKHILMNLKLHFGIMSY]a\UWVUX[WU\dfjf[VX\\[ZXSPMKNRQSVWWWYWQMNNJILSd;968;=:7^JLSVZe|~tsuo_SSRUVY[ZRMLJHJLKHIMNNQTTRQSQOSTTUVW[[[_^^`cdcdca]XZ\XWYZ__]^^`^[ZZWSQTTTSWYYVVUTTX_k;;:::rrngikifeeikoomihiouw==<=@A@AA;31`[W\`a\^fk77^OR]]ZXPLPKBKSQJC<9865:CDACGJwnltwwEC|FKG}zKQJC}zz|@@A?=?CKQWUIGFDGHHvlg`_k}|xpjadt{xtrqu{xkjvIF{qgclturjlvh`ZOIP^l|}tsw{}s`Y]ff^ZTTY]dmtnd][]J@P^djmpszuiaZTUQJKN@,#.BKN]@R\^_]UMLKFEJOUXWUXakhZSSUTRQOMJEA?>>BIJIMMKGDB>?FFELQOSVRQPKEBDGGJB=>=zshvEGIID|u{~qmi`Zaknlrug`dfUP\\YY[bjnbWD2:FIQVQPXXJBFK@,*)*)'')))*--.-.//0/-)(,-*&&+//020///.+*.0/--/430.+*,-//.12023431/.-./1210/010/1241/-+,+**,-,-,+-../.*('((&&%%%&&#%%"/5!')*((''(('&(*)('&$#$%&'&%&%$%&(*-/20,,,+-.,*/3474/-/00100,(&&(*()++*)++($&&$$'+3)"#(+.5ADBC@8-&O''()('()+,-)&'%"$&&$$''&'('&%('')**+,,//02000222442/,-,))++-.,-/10/..-,*,-,,-.-+g,.179975774223569875469<;!! &#!#%''*.2*&%"#  "!9?(./(!?66F()((()++**,-,+)*+*+068645423432027::866435655421101.+*(&%*00(#$&'+/-'# &'-30)&+/01124640--,%##%0;7..5<@ (! $+*),+(&$#$%))$#*/+)+(##&,027:2+('(+-.16831/,++*-6>@<:8305;==D$#B<9> !!@?;535879<;9769<=><:745326:8677679::976468887789788:=>>>@C#"! !!#$$#" "$$"! !! <875320134667755642231/5:4-*U*ML)+--.1323568;==;:88:=?ADJNMJFEDDA=>@><<:7655547950*(+.136679996-).33346:??@EIGA@AABFGB<50,)$&+--035414502789;<858=><<=966520///1335=@=83-(#  !#$%),+/32.)&&',(.)#DGA:87>$H?8;=;??:8<>@=:873.-2:DJD?!#!=<;; !$'KKI@:9>?>C%$AD&)'GEDBD(.*$A>=?!"#"!!#',11(DE%%E"$&&JF@:74453:AH((HED=3.5<>=78GQMB930+'*4=ED>=?@B=2-/651.*+016=A=4.+-$%+.1247<;3/*''$ %'-...*%$# "&*..,-286,))*)())(&#"! !$%#%%$! """&(&(*(((%"!$%%'">;4<$%&%"?@@>=A@<;9778882/22,"*8A>AD>;:DE:>CN,C0:AFQTSG=C"%%<8745537<=5/0-./(,682142-*,5<;411046621--/)*./.-("*20486;;5<(0+A.2;703<;7:;-$*/-/79-$+/'08/+,-/(&-46?II?;;86414;:741001-'-1+*5>83-+0/* (26;;"% 4/-,("!'1AHC>=AB??6-++*)()35241+*+$2DD4/.)**&%&,$+70(%%)*&  !$)('''"&34)@-BSG:9:942.('*+(*,&'8>:53341.+*0/!16..++)(+,$'/-&!"<6#)+,++,-,' $!!!! ")28757553/*%-:4./3432.)'&$*0*().A#+/*)'&.4433/--*(-.)-3:685005H-B&!%()',/3:?7-% #  #"" /.-/*$*--,--*)+**)))+"1../002200/0...,+*+-.-+-.,+++)('$%)((()*(&%&((*-+݀̀р怅뀅πǁ̀Ҁ ߀½¾ùŀ¾¿ĺvфЀÿпüĿÿʴþ¼Ⱦ½ɸ󃅇߁µ˺րųŹ򁌓ĽİʸҾހĿμ½ûŻ¿»ÿ쀐ϹȀĻʾƿܶý؅Ŷ󇓑ͿѼưɽȻĹƳ½μƺʽذе咣ôǵ戓ͻͿ̀ùȿ¹ƾƸëľƾű聇/^\]^]ZZZYZZY[``000_YVZ[YZZZ[[YX\\[]_afkiec_]^_\[+YWXYWQQSTUWZ]^]\\]_\[`acdfhe_YWWZ[[\\^\[^^^]/^]\\\]]\\\[\ZXYZ]_]\ZZZYZ]]\XY\\ZYXUTSUYYXTRUWYX0Z\^^[YYVSSTVURRSRPPNLLMORROLIHIIGFFDCFKNOPRTQONOQHRQONOOQRPONMMMNMLKKLORVXYZZZWPJGEEEFHGFGGGJMNNOOPROMLLLJGFIJJJLLJIIHGFHIJ$IHHHILOOLMOOMMOPPPQTZ]_`ca```ab`___bd)ehjkmnkha]][[^``cfhjkihhiiin:=<:6d]ZYWVVY\ [ZY[]^_^]`aa0//_]\\]\ZYY\][ZYWTTSUUUSRRTUTRSTSRRSVWWXZ[]\ZYXXWWXXVSRRPPQOLKJIJLNPOKIHHGHHGFFEGKKIGHLQTUVXVTSVYZWQOONKGCCEGIMONMLKKKLMONLORRNKMRTTSSSTSUUSQPOMLNOSaXYVTRQPOQRQOOPPOORZ`gkdZVWX_bcgjkid^\[[YXXWURRSUUVY[[ZZ[ZWUUX[\][YYZYVSQPQSSRRQPNMLLLKJIKLLMNONLLNOOPPQRQOONMLLNPOLLKJLNPPNPSUWXWZ]^a`a_[[ZUSUVWVNGCBAABDJMMMKIJOPNLMOONLIKSTPNONLKNUYVQLMKJKJIIPTTTURRW`2b\WUVXVRQRSW\^^/`\TJFFCAENSSROMOTTRRRPOOQSVVUVY[VONOPNKJIKKLMILPONNNLNQQONKILOMKNQQQSTQLMOQRSSSRRPLIFIMLJKMPPPOPSQLIJMMNNPTWYXVVXZ120..-WURQRSRROLQUVV\^YTTW[/014775213>HB4XSRSVXZ\-Z-./../\/01/.YVX_7=>@B@@>;87:AHKPVUPIDB@=5-)OOQSVYYVUY[[\\[VMGGLOPTTRTTVXWSRQMNOOKFDECEHIJHJMKJLMLOOMPXZ[ZZab^`nwl]Y_a`cegf^Z\_bflrtpifba`^^a!eif_\\[ZZYXZ[\\\[[\\[ZZY[\]^]\^^^])^aba`^\[ZXVVSRTVW[\\]]][[_baabb^ZZXUSQOPQRQONOOLKNPNMQX[XTSUYYWUUYYWUW[[XWWVVXUTVWY[\Z[aimifa\ZXX^`cd^\\]`abeeb_YVUVZ`b`ZTSVY[\^^]_`ba\[[[YVUUUTSTVWUUSRSRRTVWXTQPQSPLJJJIIDCEFA944;BHKMLJJIHGHKNONNNORQLJIEDEDDGMQUTSTU[ecXTX\]`^YWVUTTUZYQMMNOPTWVRSVZYTTTQOOQV^h7669;<:6fei:>sgmAC>m\RMPRPLNPTVXWUUTOOQQMJKOUWY\XQPLLQUTTTUZ\^``__beea^][YZUKMX^a_[[_fe_[YYYVUUVWXZYWVSRSUU[fl8;<:pjggfc^^``blrsnhglrp:=;:3b12ecbior9kUEPUKPRNJB;FQPMMNMIDEHIGFDGKPRQMIBrpAILN NORTSQRXZRMMOSYeigdcca_`_[Z\_dhkkoslgeijfb\YVWUNKIKLKLNJDDILMONI@;@P]ga\\[_fkkjid_^\X^d[NG@Gamh`bmtw?CC?8aWWY[\TNUSIKLKLNOMLT^jhZVVUTUYXUTQSSNKNRTY][_da_^]__]Y]ghknrx{{}~FILGBBA~xvrpolnruusporsquwvtsux|DBxsx|~Fk^cqxrgcgjjijieec`_][WW^immklsz~}EDCFEEE~{y|@DHFDC@}xtpolkjjpx{uia\WUZ`aemi[RLHEDHOPQUTSTTV]aejjjhea_cifciv~~yv|zogfdcbchkgb^Z[ZSOKHKMNQUXYXVTSSTW[\]]^`bhrusjacfknnljgknppkdafligfggfcabfluwpoqnmoqoha_de`[WVWZ\`c_WQT]^[TNJGHINRTTONPUZdovrh^\^_g:DIE?wwzxk]Z_ivyphggkrvx~|vqog[Yct~HKGDC@{yyy?DEyf_hzCEIKFCJOIACFGJNPKGKSSNJHGHGwnjmnlpxsmkmrx{xuvy|{sjefkrz{E~mouvuz~~wwzvmhb\`jtx{wnghg\SSUVZ[ZZ^dgfd`ZXZ]e]EFYitzxuqh`\Z[[[YVSNGDCCFHHM6JUahZOMLJGIMPVULJMV]_ZUUXYUOJIKIFBAFLKEBEFGHHECFGEDHOPOJEGKLD??>?CFECA>suCLLFDBwreYT[fijrm^Y`bTTcd[[\^bcXL;qGMLKJMRQE?>BKFAFJMLC@KjKW\ikghdcdefjwyog[MGQVOLOVWV[`a][^ZXYYRMKMSUPKKV`_]YRHDHJIMVWVVXXbqma^\YZYVUQLJOQNNONKHKPMGDBDEBAHRUXXUQJMNEHRSR]ll_\ZZ[VPPUXX[_\XTRQPOMKKHDGORZgg]QGFGHIJIIJHFFD{{~tnoswvsoruslluujb^`_NC`|}{hiOmthkrvwz~}{zBABB}qihhdhg`a_Z[\ZQQ]cdbb`YQUY\ca_jk_YWT^je[X\[[[UKDP][TOV\m}xtf\^]ah_\ptWNHKPQdsdWZ[YUOLJEmmMYUS_qunmootylvGydZVRJOXRS]\V\fTM]i[OR\hkoEKFBwkaZWOGBKctvstzvbbaRRWZfmkkf^VQTTRURECLW_ZVOIIJGD@FZe_WXWRRPKLQPOSVWYYVPLGHLLFICDQ[[`fgaZ]ki_^_ZTNOU[YW]ejg_[`a\SRVN?rNgg`UORUQPMJKPKC@=nGME?GWabYSMJMPPNF=:@FFCEJMLNRTY`]X[_\XTIGIGGFJWinjjd[YLuxHNNMGBLPQLEDKW]ZWTUVRP^i^T^b`ff`aeftdZWYSLMMNQX[[VOMPQMEFLPSV.136840/2684049?@:889;;<=956789:::>@>6[W3754geccd2ed47887874344568873^2676512444699752011123C553122b`_abbb13556556655543fgggf575eabefgfggfeddba```ababdc``b2322b`^\]]]ac`\]]\]011`+*++*)))((('(*+*''**((('()((++*+.035421/...+)))(''))'$$%%&&'))('')+*+..//01/+('&((''()('(()*)('())())*+*+++,+***+-,+*))''**)'L(**(''&%$$&'&%$&')(('&&())('(('')*)'(('%%$##$%''%#! !" !""$&&%#$%&'&&'&$&&%$$$# $%()***)(%"!"###"""$&%%$%%%$" ! """!"#" !!!"#$$"##$%&'$$$###$&(*+,./-+)((*))(i)+*)*+,,--,+(&'&'*+,.01220./0/.0.,*(((')+,,,++,.///.-...+)**+*('(**(('&&&'&%%$$%&'&&%%&'&%%&%$$$&'(('&%&%$#$#! "#$$! !##"!!$'('&&'*+*&%&%$!!#%&%$$#P$%$#%''$!"$%%%&&'&&&%$$#!!""$'(&%$#""$%%%$$$###&)-/,'&'(,..23440,,++)(('%$$%&&&'()(&%'))*)()))'%$$%&'&&%$# ""!!"##$%$#"#$##$$%&&%%%$##$%%$#"!"$&&%%(***()+,-,+)(*+(''())$ 9!##$#"!$%$#$%&$" "&'$###" "')(%##" "%$$%##&*+'%$%&%#$K''$ !##%%$&))''&%$$%&((()+-*&%%%#!!!""#$!"%%$$$##&%$#"!$'%$&'&&')&#$&'&#  #"!"$%%$$$&&#!!#$%'((''()(&%%&0%$(+,,./,))+-$ (&&%%&')')'%&+ "$(,,(# "! !###" "%&)++***+-,**)&%%&$#$$"$&'&$%'&&()),+(-2341/6756?B;2/3336787212458<#()**+..-,-23-**+//..-09:998765541147;<=:?A""<8<>??C#?4-1;?;4256656544433320/4:;:9:=ABB@C%$DBCD#%%%$C><<<;979@GHB:420/278:>92.,*((+./02///.0468;;<;966;?;7CDA;7;?CB@=:89;=<610352012233346:??;;>==@AA:658:84222349<80*-573,%! $')*'&&),2:>=81.--0!%%!<94447;>?BEEB@<974.,3>FHEBA$'$#"!>===!$&NNC604?#%'(&GEGIHHFE$*/*H#$%&),-)%'-/,(&HEGHGF$$%GC?:89;:;CJE><::;>@B@<<>?>;7436;?AE%C99=><>BDC?=?FNOkIB=:623:@CD@96881**,-00//058974/,,,1+'07;::83.,++*+)'%!!(04,%$$" !$',,'$%+01.++-.,(%%('$"!#'&!!"! "#! #(('$!"%'"  "#"" 99"('#"!@DMNGA?81.2998=;1-36,-882123681(4$'&&%'+,% "(# #%% $3&-/8954112468A@72,#&*&#&,-*.01//10./^.*'%&*,)&&,110-*$!"$#%-/./105?;1/.,,,+*(%#')&&''&#%)'# " #(*,-+)$'(#&-+(1;;1.--.*'(*,,.0.,*(''&#$)*.890'!!$%&'&%&%$$#A?@AAB@968<@?><=??::>>95377+!4FFBEB88K-G8;DQH55;@CEHFBAC"!! =7344244/01.01.()024333/,.115329:410.384.,../1/(#+53-*.3P@-)&'*,9B6.1/..*)*(?;+1-+2>A<:=;=D?5:E&@520.'+3-+22/29,'2:0'*0653!&#!;51-+'"!'7BA<<@CCA9../''**38663.*(,,+-,#"(-0)#)/*$$# !%()*('$#&'$&#%.423550,/75/02/+'&*-+*/5851/341+,0,":+:73,(()()'&(,("" 7%*% %/55/*(')+)($ !! "&*-20,/31/-'%(((&)0:;663..)<>(,*)%#*++'""(/20.++*'%.5.)26464004:;1/0,(())*.11-)()($ "##!,(&-,+,,--'#*))*+++.010/0.0221000//.-,++,--,**++*+,,-,+*))+-+)*-ˀ򀆁 ۀ쀅€Àрȁ݀ /ˀĿ¾&2΄Ѐû½ɀûÿ€ǻý˹·׀úϷՀǽ¿ƿȀ°οǞ낌˾Ǿþ̀ľɘƽĺÿżĽՀ쀅̹û÷ľȿр⃑ȽۀöϽǿø¾蚰ľֿƶ唤ƹȴǾ˸iƸξ־ȿɹȾҽ»μö爟里ǽƧ󁆀ѬĵɠЀ˽ſĭơ銭ȷӺɺ烌4d50]`a`^^`11b113431_]\[]]_b_]^[[_ceilje^YZ[YVUUVWXXY\\YUSSSTVX[[YWXYXZ[[\`4664b\ZYZZ[0/XYXPGLTX]abba][#ZZYYZYY\^\Z\`a_\[[\YUVYWTUUTSQRRQQPQjUZ^^\ZXWX[ZURSUXXVTTUVVTOPRQQRRQNLLIEEFEFHILRWYWSONNLKLMNOOLKKLMMKIHHHIKLLORTUUVZ[YTMHFFEEFGFFGGJNRTQOPRROLKIFFHIIIHB?@@?BHLMMKJHIMNONLMPOJIKMMLoMLINUTOKIGGIHGGINSSTVXY[^_^ZUXZVRONOSVXVSQQKCBGJC:L]WPNSWWSQSROOPQRTSSSUUSPSVTSSQOONLJKOMJJKKJKKKIIJJIJMNNORRPPOMNOPQPMJHGHJKJFEIKKLMOMLMMNPPKFJORVWVVW[22\WXXVVPHJONLGCCDBCKQVXXUWYWX]29:7@TacaU?^POQOOQTVVVY\]/001220/.YWVUY`48<=>>><978;@CGIC>@BA>><5-PLKMOPPRW\/\][ZY[XTSSSVZXVTQPOKLOOIHJIHIJECKQSOIGB>CINPMGKTY^XP`onkffd`^cfhooljc`dcceilnqmeb`\ZZ[_dda]ZZ[ZYXZ[\\[Z[]]]^^__``a`_^]^^_acdcba_\Y[]]]ZVSQRVXY[[_`]\^acded_[ZYXVSRRPRVUPQRSSQLGHMPNOTYZWSRTVTUVYZWWX[[WTTSSVVSU[^_^]\^dgd`^_`]VVZ[]^]ZWX[]^cb^[WUVX\_b^WRSVZ]\[XZZ[_^][[YSRXYVTRRTSQRQPOLMOOMNOORSOLHFGIIFDFGFA<=;89;AFGJKJFDFHHJMNNSX^WMLNOLIIIGEFKOPMMNMVijb[WXUOLKG@BDBGUVC@HJNTUSPMOPRV\\XWXXVQQZbcdf3468764585]X7?@=i]Y]]WPMOPQSSVVUSOLLLIGNVRS\\XSONPSPOPT[[YWY^`dlqe_ed]ZXTMN]d^Z[[]_ZWWVVXWWY[\\YWVUSTUVW]hq<=;ohcddebcc_YZfoollmppr;;<@A@A?<>@>9457ha`hn6fb]_54YWWQKGBBHJKPUWX\baRA@BBEJMRTSPKFFLQTTUURONQW^\RPPSZZ\^]diffebeljc]YYY\bjruwtldacb^YTSUWU[]VWYSNMJJKMNOJE><=Smzywrj]W`lsypcda][agaZ^gouxwnhltu;?A@7`a^ONOFDBHTQOPSVZ^ac_UQY^[TGCINNTafbTHFFKRVZab]]ajrtqstpjkppsyCDFEDFFDsorx~}zsnnonoonoqpnichsy|~D{z~AE>hfpzBFuhVMZdb][Z\^`aa__`aeiortxyutAFxwywtpntA|ttx|DHG~{xvtpljkuyneceeddjnpusidec\TSU\cd]UVWTTX`defijgejv}xux|}rllhfkoomgecbeifcddd]QIHOUTSSW^aca`dc__cdfifaitzsaPEGWfv~xttutrmjifcdbbcg ifca__ekke]YWX[]^YW]b]XI7>JLIHILNMMLJMQXan>CHIFDFFEEGHHDyjfid[W]gmsytkd__`^adcbejgdfjf``cdca``l{wv?zy~Hw_bqAKLILNDzvzCEEEHR^dc[XXXWTOKJGGIKLJtibhwGHzrh^agkpvwtqjdc_cnqprtw|scn}xHHH~yvttxEEzoe\RJIMQQ\m]Xbowtkmof^Y[ZPRMH]oh\]]\[XTTTSPPRV]bYIHHFBWEWb`SOOMJJKMPTOHLQSW[VOMPQOJGILLGA=BGGFHJIECCBA@BB>ANSKDCEJPHB@<:=BEA??>??BB>>BEHI~phb[]jvush`ckj\bjg^XY]][UPLIIFFLKNUEf7AGJJLMKNRLGaENWcqyvoje][_i~n[PJHLLIEFLSWX[YX^egpvlUIILMNLGLhoZSQJDKSSUWXYYVV\dipqicbd[LGNKENYSQROKHIJHEEFEECHQUWVSPNOOFr>T`\X]_aic[YVSSTTRROKPWZUQPLIIHCBJQSQPXWMHHJHFJLGEHHA}?@AB}z{trv|ujyMLH}oeZQTftv|xotOotvpmsl\dvurswx~EGHCuniegdafchc]aYT[ac_Z[WQRIFbmehe[MJXjz}yiba[URYUOPUXY`hjikquppugrqjj`W\o{k]WXVNWeih^\THJF@ssGPSSPW\WVW[``iixKMod^UTUUJ9G]ZU\mnVL[cecfpuv?C@|yvni_SJJOLHI\px|rtmlcMPZaed^dhYQUZ\UNJF@ITWZTCCHKQND4.LTUQKQHsu956432128<;879:<>?@A=8;@BFH@h[29855iea^acc25788655677564][13>2235789874`0332344345640^b3311ca`abbb2445654555gda_^`e55geecabc*dedcb`_`ad44gbb65b111aaa`^^]\]0220./0//135;)*++**,-,+)()*,-+*))*-/03653/,++)%%%&'(()+*(&%K'()('&(***+**--*('&&%%&&" $'),--,)'&'()**+*)),-,*-//,)(())''(&$%&&$"#"$$$%')**)'&%')(&&(*++)'''(('%&'$&%#"#! !"$(+,*'%%%$#$$#$#"!"###"!6""##$%&&&'+,*&# !! !"""#%&'$""#%" !""#"! !! #" "##$%&$#&%#p%'()('%(./,*))(''((''(++-..1342/..//.+*(&''&%#$%&((),..-,,,+*,,*('')+-,++)))*)%##"!! !"#$$#+$%%%&%%'('&%&**))(&$$#""###"""!#%$$$%%$%&&&$0&&%"!!""!!!"&)))(''(**&$$&('%#"""#$##""" "!!!"!Y"$%#"#%$#"#$#$$#"" !##$&&%#"##$%&'&%&('&'((&##%'))()***((+,-++*(&&''&&'('')*)*)''()(&%%&&'&%&)))'$"!!"""#$#""" !"""##! "'**(&$"! -"$#"##"!"!""#%&%'(&%&)+*%""#%())(&!!#z!"$%%$$$&%#""$#"#"!!! #''$"!   #&&&((()*+*(%')&$"!"##$#!!#!!%# #'(''('%%%&'((''()'%'*)''%$$$#"#&$"!""!!""! !""#$&&%%%$%$$%%&&%#!  !" "$$$#$ ##$%!!#%'9))&'('($ !$%$! #'*++))*)*, *353**$##"#$%&&&')*?'&%%',!"!"""!!"$$""$%(++*)?''*)$$%%&''#"&*+($##&+-*&*/150*5?><86641358=>;96565579:<>;531/25542///-+,./00.-.01112210//00123321/.+,../.+)((*-.//110//022321/-,,*(())),.**++*)'$#'**+.11/-+-.-,-/0/../0-+++,.-+,0342100352/-//-*,..///.,-03222'/.---./020,(),.0/.-./.00110/+).20-++-,*+(()))**)**('$#$%&$"$$$!"&(&$%&&'())+-1.'%'(&%$$$"#$(*(''&*452-,-,**+)&''%'00!!$'**(&%''')--)'(**((-1212/-0,+,,)%#&'((()))('%%&$#',(',-*(&%'K)'&&)./.,.013792/33/,++%$-1.,--./,++,,.-,,...,,,+*+--,.37621122000/+,2798 :!!--/460*&'"!""$""%''%!"$#%(*-//,)%&),--//+)*-164.+*,123327:9<:79=:6212347<80-39=A=45410373026;>@?847;; !'(&#!"%(+/2452,).00-&#'**.586.&&'*-.043/.06;<:<=956999<@D$%%$#%%$B968=BB?:66769:9:;:9646;>>>B"B@><<= #107>"$F<5*$+21/..01355345578<=>??<<"%C<<>=;86:B"@;;<@%'&JFCA?>=:99;AB8334458:::@B=::71..05973/121039>>>?><><:9976:?<9:;<:1++/4432135656:955788:86?II@5+"#1;EJIEA@A@>:752233369:99778;?>:52243345660-152/'"%&$""$''('&'(,/4"%&# !Y##"$&&#@86861..39>B>85223234435741264125752/.5?=< ?>BC@CGIN)E319#)*'(*MGG&LEA?A#%&&(/7::521-)('IGI&''(&HA;513><:632018;;:<=C?49IOKHIGA>845;;23;:401344/+)&'&&)')/&4!$%%%$"$&"+!(,4 !"C?=>:9>D?8BMOT++*H=61,.9CDDEE?8;L.L8=A=78HH:26?><="#%"<974543646414/+045301/,-&"5<6883*&.:DC?521.,*//+.1126:;:;??<>7/2>C80.//)0;<714/(*'$?9$-/.*-1/..25376<')F:43-./1+%2.+0<;+&/3432675!>=;750*%%)(&&1=AF?9;685%'-00/.24+%*.0,((% %+*' " "*.-'&(('&%$!@)((/1-(%(/3/-.,('&)*,1534751134.+20*# ,641*,1/+(#"*46)! $%%;?',**<7%%)+10$!$&& !"#%(+*-/'(+/46552*(&": *,,*&,&9< $)0+4#1420'%475.*/16<<851'")39>>6,)3641N.-0220//././.'""# "$.'.-+)+.-&&*')+*+++*+/.-*)+/100.-..-.--,---,!./+,++*+,+*)))ۀҁڀԀ  »ľû½½ľCʹ݄ÿȽ¿Ӏʵʿ½݀Ϳƴ̼QǿúׄڀۼʰþȀ슙ܱĽžŀ슏˼ܚĀû¸οȿ󁅇ǸǷ¾ʼҀ􋗝࿻ Ļľ̹Ó놩ļ»Њ²û憎дȺеƿꁉ»úԀƽ࿸ͽ׾ºƷۼ޹喝ƴȹ蒀з͸ǻϵ̳ǶҴȿ˸Ծûپѵùӏij퇐M򀁀y[ZZYXTQONLLMLJLNOORWYYXTPMNPSWVTTSRRUVX^cec^YZZWVUVWVY\]^^^\ZWTQQSTTVZ\[ZZ]_\_cd342100/[YWUUVURPPQSTUXZYWWYYYZ\^^]ZWVWXVUV7XZ^][\]\XVWWVVUTSRQQQONOOPPRRQPQSSSQPPQQSSSPOPOONJILNMLJIHHJKJJMONORSUWUQOMLKIGGHIKNSSRRTTUTOHEEDDDEEEGJKLNQSSTRPPPOLIHHGGIIILPSURKHGHIJJJLMMSQNMPUSRUTRQNNNORRRQQSX\ZVW[__]^`aa245678:;;;=??><<>@=;865676665hfca^\\[YWUTUUTRQOOPQV\_^\ZXY]__]Z[]\\[Z[\XTTTRQOMKLKKLMNNLJIKMNRTSSUXYWUTRRUVUUSRRSQONMMMKJMOQPNORQPNNMOPNLMNMLLKJIIKJHGFEFGGHJLLJLhOPPNLNQSUSQOMKJLOPMHHIFEFFDDDAADIOSTSSUSQQONNMNPRRSSSTWXWVRONLMMNRSPKKSVPOUXQHCDGKQX\\[XUUWY[[\^^]ZVTTTUVWVTSUVUSSSRUYYXWVWWWVVUSSVVTSROOPOMNQQONNOPQSUWZ\XSOLMMMKKJIJKLKKMNLJIHEDDEIMNMPSRPQTUSUUQKKID@=;99@RXWXZZ^]TPQSTRPNNNQRRQOLLLNPRSSRW\]WOIHHJMNMMMLKKLOPQQOMMKJJJIIJKKJHFGIJKHFGIKLMOQPLLNONNOOLMNPRTVVWXXZ[XTSROJFIIB9;ABCDEIKQY[\\ZXXXY_cb8JYdZAdWNIHLQSQNOQRUUUWZ/110/0/[XUVY]a3566886679:<>?><AC>;:7c^5:568f_afjm7546:9632]LDFC>@NRNHFQ\`X=4=A>GPQQMIIGFJSZZWTPMLKMRVROPQVYZ\YVZ[[^`cfe_YSQRRQS_jpnf_]\Z[WPNOOJMUXZ\YSPMJMPPOKHEBAK[iqw=>xm`Z^imkjkh`[_\TS[iqpg_^cjsw>AA:d00URWUST[1`XSW`hjijgebcc_[UMINTUZ\XYTNQ[dgcbhmljnsrqyADFECDHGxwutvslmoqtwttzvnkkijnpqssokijostqpt{{xyyAJOQOKEznli\RW_efginttsvphgggehqvwwy{@CB|xumilsv}AByuqms}wtpnoh]\_]_`cfjfacfmqnkf`YX[ZZYYYX]a`_^``adecbdfluz~mdbbiokeeifbdknkhhge_ULHGGDEHKPUZ]_b`VWcjopnpuobVOC^lZpxxxz{zzunkijifdcb`]\YYZ\^\XUTVXWVYZ\a`\ZWTKDIFDFIFBDFKU`cYQPRTTQOLIGLMKJIyuqmowywsi`]bfkt|zslikllrvolnuyGFGIIILOMG{rjea^VQSZccIU5[qsonneZVW_ifW=Y0DPY\Z\ZV(TSOIA>GOK>.-?DIILRQJFDDDA=?ABGQRF@@CIOID?<=ACEDEFB@@CBAEHGEC}of[Vfv~p`U\jhfhgb`\TTYVRSPNLDBENSSI<=ITTMDIPQU^`Zc>@A}}~}~|yuKPLvq}ganu|JLxoksbZ\r}xldi{{m`fqy?EKEvf^agb[^dzu_[\]^_]XTTRQQKBJivk`Z[glffp~vb\\YZb_UGHWTZldcb_jh_pskjhfikryzf]\IBMcjESmPRLUXOKMTema_cXVak`bzDxg\[ZQHpqMWVW_kiXQU_ioE?spvzxyBDyg]RNOLICJ\bmvmc^\VSRZht{vnbPKRXdl^ODAOYTX_E:BFLPNH=24=EHKTUKGOPKJGIXejaWUQJHRI=?FPPT_c]UPLECDDWlf[\\SUl{utn`[XWVRWUPF=NUO]aacc`UEDEPhp_bhYLFGNJ@D_n[LLMRYUKJKOLGEEIIEIMNMKLKLR^^Z]c^SND@JL?pCLLJBn>HI>XcGVYPI@BONKIG\ntytfYKL`mmicQHGN`bWVZXVRVXTUanj]QKMU/134336777654579;989868;<<>BB<8667;>?@?:1329977875a\_bc2578769;9756779<83554543223468789731123Z56454^[c42aaabcbabdde4544cX]233a\\]_ded2ecb``decbb`_^_adffgh4eb33102214531000/]^0/]YZYY[[[(())'$"N!!"###$())(%#!""$&%$%%%&'()-131-*))'&&&'()+,,,-,*(%$%&&&'*+*)*++*+-.'&%$"!""#$&''%$#%&'()*+)(&&'('%%&(,,++*)'&&&%&&%$##%%#$#""#%&&&%$$$%''%"!$$#"!!"R##""#$#"$%$$$#$%%''&$""#""!!"""##$$&%%%&&''$! !!"!!!"##$%%$#"!#$$"! !!!""!"$%'%"!*"""##%*)%#%)'&'(((%&''((''(()+(&&'**((**+,+*+*()(&%$$%&).0/-*()*,-+))(' )*'$%%$#"!!""! !###&*'**)''%$&''&&$$%$#"""! "$%$##%%$$##$$###$#"#$#!  1!##""%''%""$&''&%%%$&''$!"#! !! $''&&'&$%%$#$%&'('&$"  #%$"!&($#%&"!$'***)(())*(&&''('('&&'('%&&&'*+*)))(''((&%%$G"$&&%%%&%%&((*-*'$""##"""!""#"""#"!!!  "$$#%'&%&))())'#"! "!! "$#"$&&$"! "#"""#!"%# !$%%%&&&%%'(''&#"#$#! !! ! "&&  !#$'(&%'()(&%$%&'&%#""#$%&''(*./+&"!!"#$$$##$$#""#%%$$ #"#"!! !!" !"""! !##$%&%#"#>$$"#$$%%&&'(()*(&%%#!!" !#$',..-+*))+/0.%.4/!/'$""%'(&$%%%&(!)'%%'),!Q !!""!""!%&#$%%&%$%&'+)&*+('&%'*,)%" #)*')/21-/9<:8662..6>?><9877788878<=9530/.010.-.-,--./0/../0"1233221//233444310.,*+-/..,+))),//0./12321.,++**)**)*+***('''&&(**,/01220.,*)*-/.---,,++*+---./1344751/.-,+)''),./022-$#,310/-,,+,..//0,**+--+*+,++---./,#&,+***( '(*+*&%''&&&'(%$%%%#"##""#" 0##!$%'''('&('&''%%&$$$%%%''')'&)043///+%!FE?A#$&04)!&'&$#%'&&'+-,*+--,+-./00/./010.///4--.-.1246(%*()))(%##""&+'#$%%'(&&%#$&-2/,+.0103742771+*-.-/2221110///..//02541/--.,-.---/156//13522342-.26789757"#)$//1432$$$ #''#$!(...)'(&$'-220/-++()-/,**+.123103445688753..11//5;?>:653251,,.,)+03442.-+**,,+)'%"!(3:=A >80,/8;9::82021,+08<:51027;= +! ##"!$&$$)06878643552/*&$'+.120/,))-362147647<;9="#$#""CC$$B?@?=?=8778;=<;A656646<>>==> #!=;974479?!"C?=;;AJMMKHDA??A=64666447:7258;>>;950031047666888;<:9::>CFJOQQOMNTVRJ=4249><9:<:78;==<=>>;4/-++)(()+-02465/18=CEEFG@7/+$5?4AEEDEHIDCD@:76777899744335797544653233477630.(3#%(,---+++*0"&(('(+//)&%%#!?<::8404>E$&%A967:@A=;:63323565117;>A>>#'$ ###%$D@ABE@1,9!%(&$&LHIL)&DDBA"#%(/793.-.//-+*)'KL)*)('KB=<;89>FGEHD>=;720457=CB<88;<;?B>::>FF?D'(LIHFDDE%&&K'+--RLNQ)MF@:5542-))*-1&*/<;88:5.+*,0.&#$*-,+)%$$"# (/.(&$"""!!%))(-,)*+'%&%#"! !##$))$" ! !$++"!&,(# !"!!"! "! "$$##HLI@:3/6AF>3+/98789874..2/-.,+($"$*,,'#*+& #'').,(- '2?G>--,(-6984,&"! ! "&)*+,,.03421-$!%(),/.1=9,))&%(-//0/,+-.157:;;950("#(#%,&%(%#'(&(*($! $()'&)&!,5."#+.-(&'/70)(''&%%&''(*/3/)'%&&$$'('%%(+..+&#$''('%$# !B?@DF@@I,1-K@:8IL;2..:CC?714@?7027;#'$<41362.04A?2012342/--,++'!&9?94116:75;D>2//-.43,$&0.0;7553981=@;<:8<<@BHRH@512'")7JP=(0@00*/1+)*.9>5370-3901C%H>5000+(=8(0.-199.'*266A#659;:<"$=3-((*(%!%03:>7100-*)-49=950%!&,37.&"!(-&%%%/40**)&%-& %+)*//)"  +84,..*+:B;:81/...,11-& */)122454.%$%,:=137/*'',)!!3;.%&(-3/)()*'#"#%%#'))(%&%%+430263-)# '( 6!|('&"7 &&!*1'01-)"#,-*(&2<>@>6/''29754+&&*55--/--+-.+,276.($"!,)+-,^(&*))*,-,++,,-,&),))*,/.-/.-++./-,,,++,-.0010.+ )))''&'())Ѐ䀝݀퀂ҁր ǾúӀƼ¹€þź$ŽŽŷž̀ǽî¹ՀþǾɿӷɽȷɾӷǻ"ҥՐɵũȽ򀈃ú´OҼǹóö냍ˀͼŻÞ̗ǹǿűŻȳĸǺĻ̀ηʶƵ̸݃½ĶηǼij˸¼ؽЙֽȼكֻ˶ͱפ۶˾ϼՀļշؼó¶ݭؼ뉫̾鿍Ļ񉐐_׀RTUSPMLLHDDIGBBDFHIJIMRQOLJMRY\WSSTRRTRQSUWWW[^[ZYY[[\^_`bddcba_[ZYVTTUVWZ]\\]\XZ]][ZYVRQMJLSXZZZYYYWWYYWTTTWZZZ]_]\]\\[VSSTROOT UW\\[YXY[ZWUTVUUVVWUUUTPNOQQPQPNMKIGFEFIKLMLIFEGIIGHJNQQPPQQPNMPTUUUY[YUUY[YVRMJFDDCCDEHLMPQOOPQROIFDCCFJLMNQTVSRRPNNORQNLLKKLNLKKMPSV[ZWTSRPO'NMLMQUUQORTSRQRTUV[^^ZTNPTUTVUTV[`bd356579:<:lif_X_g698l788id^YWXXV&UTTSRRSTUUTSUXXWVY\[WTTWZYYZYY[\\ZZXSLINSUTOECLOOPOMMMNRY\YYYWVUTTX[XUVUSQNOPONMMNNPUTRPMJKLKIIKMNM)NOKGFEDGHGGHKOPOPPOPUYVPNNMKHILNNMKIHGGHIJKNPPQQTSQOOQOMLKMNOOPRRSVVUUTQLKNOOPQRPQXVPMJE=:?FGIHFIMORUY\\WQONPUXXVUUUTTVVVUUUVWUTTWWUUWVSSUXYWRPQUYYWVWWVVXVSSUVWTSUVZa`][XTRRPNMMLJJKLKIJ,IFBBDDCCCEFGILKJJJKJFBBAA>:;>@??ACCEGGGIKJJKJHHJJJIJKMPSQQPMNMJHHGEFEEDGIHGIMPPPQQOOSVTUVUSSTSQNMNOPSTMHGIKJINRV-/0011\Zaf^UQOMMOOMKJJMLKKMNNMNPRQMIHILNOS\ba^WSQOPPNNMKKLKKLlKKJKKHDEJKIFFFEFGHLPRNLPSSPPNMOPNNQSTWXUTUWXUOKIJJFB:04BIF@AFHMZ_YVWZ^[VWUSW]`6Bo>b7<<;GMGBCGNOQRQONW`13462ZV UVX]01455789:;978=@AA@=5-)ONPSVXTY[ZXVVXY[^]^]URPMMKJIGIOQOOLIJKJJNPQNLNJB64=C?:68@A=433SYh`\`hr852135458:8bTL@SQAPSQKGIIE6e>C>BOROH@DHDCLVXUQOORQIIOPPSTTUVXWVVY[Z]gpof`TJMPNJMUZ_^YXXVURLKOOFCFNW[[YUSTSRTRPPNJFGOVZer{?B=h``0/14/VW\0`[Zdwui_XW[dlh_``[UWUU[gpokjb\^acfjlr|BBD~H}sqrtspmmnptw{~~xmijd\[bluvsrpjedcdca`ekmkilu@EHIGB|upponqy{=?ACFEA?AB@{zwv}@CGIIHHGFE=ZO_>B@AFJHCwllvwrmha][bpvustvsquqjhecc`[WRLOYellme\XUQJIKOT\^\_ddekqw|n`\ahljhjlorofb`_^[WQNNMJHEIQY`ddcdcabhlottk^XVY\][_imlkkjknmlpqnnponmib^[Z\][VQPQV\a]UOPSXZYWVVVUQWbb]ao?BA@ABIRTPMLKGCFHJF}vf[_hqzud]\]esyuolihklf`^agp~DCDJKIHEBzxgTXepspwBGIIGHKLNURF}DFFBCJNPUUONQSUUSRNJz{~zxxvu~wpnkghkow{ngfikjhc`gpzFGE{xwwqlhb_ejle]\a\GC8<[lrmb]YQNQVEO:,E9?KW[ZMDADLQHBNXUQICBC@>AaKcfXOKJLJBCKMOPTSONONNLHKMHCA?=BFHJOUUQKIKIGJLKHDGNTYOEBEGINLA=ACAEMQNBIIDDFKIB~}zqhaYZkvwj[Unpjd^\ZUPOJEMRJJX\RMPWYMIILMPX]ad^ZY]a[YmEYmvh]YNL]tyh[TOIFHIHECFKORUY\]\WPJJKGGKLOW\^`]\ZTMKRXdib^VLN`jcYVbkzxbXULHGCCCALRMNY`eqq]QSUTUURMKUSLYe^RMKNSLLU\`[TRQOJDJSQPUZ[_`VPMJJJLKD?EIKO\_ZPEHMMQSNHDA@??ACB>=z|}|yuqrFLGugYRnEsfY_mwvpttwzobgs}BDGugadhdbhhpukd_[XYXWWVOMUVS\kqmdZ[kjZblps{qc[V]jl^UX_n{o]Veuqgecciiinlt}{ic^LHRZdtwSv@JQPWXPMS_g`e{vbc\gzfZjCi___XF`FbUVgmvo[TQ^qvCFzb`otwyz@B}seYWSKD@M]O:>R]\WUV_muxvsdNOSKRttPCIOLR]V><LvvcY^dYQQOQTSTLBGQDAKMD?@AEILNORVVXSCDNSRPWWRQN@@X`PCA>A@HJBA?<;<;879::978<;640.//.-././//.///01100123444565444320.,++.///..-,+,--+,-.022.++,+*,--++,,,+(&'))')*((*+,-0320-((+,,,+*)*--,)),-/0//..043/020.,-+)()00*+-) #)-01/-+*,-..-,,-,,,**+++,/-)),-,*((*+*(('$T%'('%##%''&%&%%%'%#%&%"!#" !$"!"!"##%&&&%$##"%'%!"$#"#&&&'&&)*+0340,*(#!#$&(..,*('*)&$%$"'++(),./0/.-..//02002/+,.00/1022-*,/2.$!**'('%%$#$%),.+'&%%*+)*'#"#(,-,,///./00.1552/./01/-.0243100/..--.35463/--./,,---.467`40022/.268:668 #.,-169%!!! #" ;$'"%/1-(#%'$$)/10.-,.-'(+++-.--.02313:A@;7.),0/,-1345310..-**./)&(.4664100///.,,*(%&+/27921326:;!,&'#&%(1>DDC=83//17<8222.+,*+/7==973./02468:>?@!"#CBDI&JA<<=<<;9989>=<=9553442259:856; $%&$!=97998:?? "%%"!""!?=<;> "$&&%%%$#,'/"!!$'&#C>7:BILLHD?;97768BFDA@AA@B@;:97851-)')1;BDB:420.++*+18957;;=;:;AEA==<;985/,--*'L&(.378998987:;<@@9100121028;:;;::<;:==;;=<<;853123442014;A@:3//0220.-..-*-660/5  !%*+*(&&%"@AA??B#%&#BB@8139?CEHH?62358>EGD@;965562/-04:B$##''%$$"EB?@7,,2:<:>#&''&'*+-10(CB$%&##'*,00,*-.///.+QP)RMHHHD?@CA@AA?CJLG?::978:;>CDGD<88:;:84263+'$"!"$# !$&()+---*&#$%#!%').000.-.+%$(,3631+$%074-+06BK@2+*%#" " &+'&.24<>2))*))**&$+*%094*''(+%$).1-(''(%!$(((,..12,(''&&''#"'()140(!#%%(*'$" "!>@BBAA?;5,/8?!#&F<424742559<533300/.--*)/.)/9=:4.0::04;?@B:40-2::0+.27786:::==CKIGHD975(%,2;GG,:#+.-12+(-5:57DA33/7C5+4#B4123.#.&90-7;?:-*(/:<#$<..7:;<=!"=81+,+&!'1) $-1.,**/7;<;90$%&"(>K<&$($$' !(32+()#"%!#(.*'/4/(%)#&.5;;0$2;@B8-),530/,($()!$-660-)*10)/5.-AF1%,,$$'CA3-04.++*+..,& $+"&'!!$&((*-//+!!)-+)-,()' 08/QHE$" "!)*%!;9$3B?63($09BG5#!!$1#92'+2-'(,--.0/*'%%9/-.-++*@(*)*,---,+,-,**,+*+,+(),.-**,-...,*)+./.-,,+)**)*(('%#! !!! !怂ހ݀πǁ׀ǀ {ü¾ľńĀрýĽSýÿľۆր½¾̀¿ľĿπɨĹ¿ü»Ⱦ̺р¾ÿ󂇂ÿ·񂊎غ䆈¾ų셍ĽꋍҸ˾ý½ɻɾп߀Ĵ넌񂊆½ͼ˽˶Ű㭙˿룴ž¼ǽƩˀ󍞴Žȷʷ;η½ĻŀºɳŰڹƺŶʻϿø·ľ˲̳ųľýûͼսɼؔڗǮ׀{)cFCfDNWWUSLLTRIEHQWYXUMKQXZXWW\356998::998779:979<>@BB?5-)ONPRSUWYYVTTUUXZ-[YZYVUSRUSONONLIJOMFEEFKQSTRNOOJHD?823=JORVYZ\`fjjlmkjkkhgffecdffgfdeec_\YXWVWWY]]ZWYZY\]\\]\[[\]^__^adfi77kl6jeeggfc]ZXVY\^`bddb`]ZWTQNOPPQUXUSSTUWXURSSTUUTSSTTRMIIHJMPQRUYYWVVVYZZ[\]__ab\UPQRRTVWWWY_c^_c_^^\\YVMW`NHUXWOD@FOQPOQRTTSTUVUX[WWXWVUTUWXTQVWUTTSSTUQMLIIJKLKHFEDFGHJJHGIJGFHKJFFECBEDBEHEB;:@?;<@EGHJKLMJHECFKLHBBCABFNNLLIIMRZgc\`gaXX[WRQTVTRRUZ^^[YZ][VMKMOUXUTY\]h7kgcaacddihegb\Z[\[[`576osoe``cggffjg`\XWVQONQWYUPLMSUVUW[YSMJJOU[ZYVQQTVZ[]_dfecbbb_[\_`ca]ZYXWWWVUXZ\ba\[[]``_\Z\Aagkkp9rpolffijifjllp;=<=<<;9:<>FNNE840]5cWZbm:;97662Z/6853[@V^46AHD@>y95/T,/\[XVY[\\ZTRSROJJMLIMU]`_YUZcimqh_c_X[cfks{~|xvuohiozxrliggkmorroopppuvohfheafptsqlhghilllkjknnlmpposvy|@ACBAABDEDCBA@AEJIFD|CGJIHHHGIErgpBD@@EJJGEB@@BDFFo`YXZ[cny~vldX`ooga\[[[YVUZddgjgda`ZNC@DHP[__[]b`_bedfpx}}unllrxxusrrrxyqg^UNKJFCBCDDGOUZbhjnvwqpojpy}l`[_flpsvzzywtpmlqwvwyywtkejoosyxqh`XX^XLGGKNTY[\]\]_`cmxEFDB?zyz{|?zrsvurqqtxyz~xnigksvuqnkh_WWVV[jrllstpi`dssd^dq{|xouEIFD{{yrrpgempqt|BGOMIIKIFpvD@xNOILLMPPON{zyyuposx~|vnjhgnzDKIshc\XaebbfpzFE~zyx{}zsomlmkiknplaZXPHC=Nhsria]YTT[`YL;1,5:6AVYK4L3.WMYX]_[UPMIA:<@`MXUTNJNMJHPWZ_ZUSQSUUWPLNKC=risFJGDFMMHKMMKKNPKHJPTXYQnKHGDB@?CB<@EFJLJEBCA?>ACD@>xkc]XZ_emi[Wcgchfa[SMLNLO\[OPchQHNNNLJF@;G[^Z^[ZaflkeqEQboi`[SR_icXY[SIEFFEBAEJNOTYTKGIJFCCBHVZXVVWNISWVYfnhXNOQTZ`]XlvnnbWPNKIIE~}DOROPSW^jcMIUZYZXMKU\WRX\WSPORWTRQRVVSQRTPLQXSQV[WRW]_ZSOQQJFELU^hoeZZRQTRPNLKIFBABDHG@}??{wsquwsxHNFnfuBDC~tgXY^_mxxroi_Y`pyxjawB|vv|zysqri`]Zf|Jjb^[XWV[]XROS[adgd]Y_c_\dcbkj[UWjyhWS_qzmYPNVhd\bege_c_`abfmaRTXYNS\Z[geaSHNOVXW_[[_UYmrhfekslnqrrk_V\^SDKRLT\bki^Yerkapyjhjhjnsvx{ykdb]URQQHkbAO[ea\bs}maebZbmbQNYddjiWFFUYB9=@Q[H@CA8.+4=FPLGE?>@BEFHSWTQPRMLPQZ^`nsh`TEFMSVNHRWU[YPKMRhwuaTQWb^YPMTTPRRJHILOMGIR]didUGLZRCLQFKJENSS[sueh\IDGb|o_WTVa[KC<8BJGDCNCA@HFB?HQRUe`RYa]_fA1F]eKQSOJJF?>@BCERU\`KPVOOVN;AP]b\WTPLP087VN+25^41/28:86788779::<==<989:::82.4:542__353124212432123Decdeffefeca233dbbcccb^]^abbaa`abba_]\[XVWYZYWVURRSUSSTRQQQPOMLMNNMLKH9#).+()*(&()'%%&()**'&'('$#&(++*)(''))''('&%&&&()()**+,-.+)(('9(('(%#  #$! !! !%*)&&&'&&&''()&$%&%&)*++*+-.,+*)%""#$%"#%'''(())++-.+)'&&''&&&%&&$##$$%%$"#"!!""#%(+.//11001/-,+)(&')(%###"!! !#&'%%$##"!!#$&'&%&%#"F!!  !"#""#$%()(&%%&()+-/.+('''&%&'&%%%$$&%%(-010-*),,**,..+*,-.//./-(&'(&'))+,-*)()+,++*)'%$&%%&'(''(('()*)('(**(('%#"#"!"$$##$&'&$$$%%$$""$%$%&&&%%%$$%&''&$#$%%$#""##$%#"!"##"#$##$$#""!""!#$##%%%#"$&%%&'''(**(&%#""%(('%#! !##"""#""!  !L#$$&((%"!"$%$##%&&&((&"!##$%%&''$  " !#"  ! !#"""$$$&)))(%%%&&%&&%$%'()('''&&'9(&&'&%$###$%&&+0,())((()**,-*'%#"%&&$"""!"##"""! ! !!!#$#"!##! !!! #$"!"#%$!""!!"""#&&%$$&(*)%%%$$%%$=#""###""###%$$%''&$#$%$%()&%''$#""" "$%$$$"!"$&''(,01/+('&'&%&''%#$$#"""!!! "###$&('%###"""!! !"!!"#$$$#"?!  !""!  #%%#"##%'''&$$&&%#$%&&%%$$&''$"$%%$"!#%)+,+&&+,)(*),('++($"8)'6!%)(&$!"('! $(((&"!$'('&'*$ !! !! !B"""#$#!!"&&#"#$(+,,)&&$ !),,./0259;:<=<;<;9876445667655541/.- .022/.//.00/!./00010/1346666323432/.,+,.0/01/-,-,))+,,-/.,++,-.-+,,-..-,+(%%%')+,,.11.-,-//.//02111.+)*+,-..///241020//--+)"'-"$'&$%'%%(+,+*))**+-,+,,++*+,-+*++))***+-,)(&&'''%"!##$%%&%$##%$$&''$$$""#"!$" ""!$%&'&#! "$$# ! !#()'(&%&*.64,.31,+.,)()*)()+-..---..,&%&&*+*)+++2100../003202/,+,,+*,6961../11/0220.**)'%%(+,)'%%)*)(),+(&$%'*/.,*'')+.///1420011/--/021/./-+,,-./231.-.//0/./1443687641244425669#'&%*'+05#\%&-/(;&&$$%#B!$&'''*-.,,+*--++*+/3431/131.00.4<<960*'(,/-**+.10,(')*&#'++'',142-++,w*)*+(*/1,,17= <758;>!"!>;:7/+,,-1110/0135:!!!#!!!#&)-.---,*'(*)')-000.+.35893.20,-147<@BA@?><<;7349>@<:875368:<<;{<=9656647<>=;8557899987888789989;<> !!! !"#$##""!AA!$'&$"A>@A!$&&$%&&'$927#$!!$((&$#""$%'(OJ@5..138?FIB;4+0<<842200.,-4=<<;95-%%(+179:88977;@>AFE?@@=>>@!@:;=>=;:;===?ABA=8557;;972./124<@<:>=;712::1,07>?>9:#&%"A?@?;:920489;@"%))&'*)MN(H::B#!=D*-)KM))+./..YWUTTOGBEEBAAB@<;;=BGJIFB<9769@%)(E<740-36558=DGJN&%IGGIJJHC@@ADEGIGHIHFC>;988657;<90)& "4;<72/,((+.(*,#"2(*'*+("(&-++(%((&$(,-/+)(')*+,(%'&!837"$" !&&#$&&$%'(&#%)+-.(#""!! !!"#&'&"!#" ! D@831..0262**3735430,)()')21((48)#'&&$# !/2030.1463.4!(2:5/-('073*)+'"!"#! #$$(,,,+(#!#%# !"*-+))+'#(++-5:6,%$%).1/+9A>>5+((&%%">=#*,()+-2;7&"),+++%$+1.).1.+(')-+***,+)'(*)&*/*(-1,(,031,)*+&$$)/4:>70/(()(('%$#! !$# > !B><;<=:>EG'+';4>EC"#"B=6./0.6?=8850-18<<1,:"?;;?A?>;::5//,3ACD'B63210/.01-)),145640.2632874:NO8/,.:C7,*1?6658?879::50-24, (/*-36;91.4=907B=213357:;;>?:312/*(()$1.!+041-0@EFEFILKEA?<>FHGHFEJOMJIKMKGHKLNzLNRRPQQQSSSRMKOTTRSSRPPSUXWVVUSQOOQSRQSUTRRUVTSRRQPONNONRY^bb^XQMLJFFKJHKOONLKKKLLKIHIKJJKKIFGHGEDEDFFFEEDBHMJFGFEDFGKPPNKJ GDCDGGFGJK JKNMJHJKIJKKMNLJLOQPONLKLMMNNLLMONNPQ#RUVWVVTPLKNONNT[\YVVWVUW^b][bd`]ZZXV(TRNOPOKJLNPPJJMLIGGIMNMOOQRNJIKJGFGJMKHJKJHGIJKIGFGFEFGFGHGEFJNMJJJKJJNQNIGJMNPQMMPPOOOQSPNONLKIFDAAEKJHOODDIPW__^aca[[[]7CIANY.7@GGCFJFA;6:?EHFIMMQ[0/...255467677545436:==<;<>BDFA4+MKLNRUXXWWUVWX[[[ZVTUUUTSRRQRTUUSONPMHFCEKRUQLKMKLROC71d8EMQUUV[`fiiklihgb`_]Z[`b_^aaa`_[Z\[XXVVXZZXVXYZ[]_][[ZZ[\\5\^^`di9;866jhddghd`^[WVVVXZ]aghc\XVTRQPPOQSSRQQSTVUPOPzRSUTTTQKHHJNQSUY\ZWSSXZYY[]`ehc]ZYYWTRRSTVWXZ^]^bcba]]_[POR99T^\ZULCEJG?>DKLNQPPRSVZ[YWWWUSSTUTTSRSTTUSQRPONKKLMNLJIHEDCCCFHHGHJGGHGFHHDCJPI<.8ABBBDGHIJIMPNJLMNJIHDACFHIKLMOONMPXgdVQX\[]ZWWVTSRRRTUUTVWVVWVRQQSUTSWZW\684gecff`\`a_a^\[ZYXXY^ehgcabcekmkiFjpxyo`YZWQNPRQKHHJQRLMQUVTQONNR]_[XQMMPV[[[]bc``abbcegeba[WWVUUUY\Z[[Z[^adb]afjjfhmnhea\]cimnnljkm9aINQUSZb\PQ_e`d`TNOW_dYMIFABIIF<><8@OQLRVT]bdjnknAKVebVPMMQPJM\\OGDDDAAEHMOPUWX[]YPLNMHDHOV[UNNPMO\_TSZiqgWRSSTWWSS[\WVUURKHDACDysEOLJGHT][RVdgccbXSWWROSXWSRSTRPMECISXXWWVTOINSQKNVYZVTTQUTKHGM\nzxdVY^[PJIIMRPJFCBBDEFGFA{xwrgmxqpxFK~[Rdp|FD~lOJcllikqqhfijuvnouyqrx~{medswgb`myKLuef`[WRNbgXVVXYZZQRabWNSetnyk[Y]qzof`gyvgabUHSZ^lbAARZ`dcdih^XbdebUN[b\\m`F@JTWLJOSPYbeiopowuxlefaWVZXQHJNLNcka]`oykqzvqokhmoox}FPofbbbc\ONOLP^]Q_iu~m\X\`]]]X]_ROaxkNIZM35CFESJAHKG:14AMHBCB@?@CCCBMRKCDLQNQVXOOaz~nbUFGVf_W_\Xb[LKOOIM_XQRX^\^XRXUPNLHGGNRICGZ``c^VSUWRENYROPPKGJPQfoggeQDBG]nxtg\er`NICEGFJKIIF?stnl;AMUIg=OXdAnMLAxViwj][RBGUSOJ;;9889;<835;??:66;=9631233bc49;746:9764358976755873c2`[^27;84441^b564321_02221`]^26753443edeAdbcd234eccddbfhfca_^`d333fc_]\ZYZ[YVVXYWSPQRRSVVVWYZZ[\ZYYZ\ZTNHFF &+//00/*&')*,.,))*)&$$%')**)(()*('(*+)('$#$%'(&'()*,,++***(()*)('')+)##$$%&')'%%${##%$%&%$&(()))((()-,,./-,*),,)(''((&%%%&'&$%%$%&%$"! !"#%&%$##!!#%&$! !"$%%$#""%(*,-.-//---+*+*&$'*(%$%'(%#" "$$! !"!4!"! #%$$&(&$#"!!!"!  "! !!!"""#%'%$%&'(((*,,*))***(9+..-,)(+/110-)(+,,..,)$$''%#$&')+,,*)((('**+..,*)()**(&%%&(),-..-,**,,--+(''&$$%$%&&&%# !"#%''&%$$$%4&&&%%$%$$$%&%%%&%$%$##$&%##"! "%%%&%$$%$" "#""##"""! ##! !!#%$###$$$%&&$! !#! !%&&&%$#E"!##"#" "$##"  "#$&&%$$',-,'  ! "" !"! !"#&'&$"$%$#%&&$$%'(('('&%$$& ''%%&&%$#$#$(*,,*(&$$#!!!!$&''$#3!!"$##$%#!!!  !!! !%#   !#&'%#"!!! !! " !"$$#"!"!!""#$Y%#!#%&%$#"!#$###! !""!!"#"#%'('&&&$""#$#$(++)''(''(+-++01/,++*)))*)(&%&&$#%&'&"!##! !###%#!!"" !#! !!"#$#" !!"! !##!!""!!$&$!!$$$%##%E&'&%%&%%#! ""!&' "&+///00.+**,$)$(.!$"!$" ""%*!! W"!!!  !!! ! !##"!!""!! !$*,'$$"$$0&+-0//258:;;;:864431/0232221210/../..-,/01/./...-./X00125653123100/.--,,-./120-+,++,,--,./-,+,,,-++,+++,--+*,*('&'(*+,/10.+*,/../01452/-+**+,.0001114432../+#"$"('%#! !$'')(()*+./-,+++**,,**((()+,*)*)((''(('%$#$$$#""##"#%&&''%$%$$%%#!%)&!"!!"#$&&%&'&%%'&#"#" "$%%&'()*(').54,(+.-.,)+***)))*+++,-,++*))((***-/+-10/12.,.///-,+*))**-1210.-./121138<;7/**)'%')'#""$))%&(**)(('&(/0.,(%&(+/...010123420/-,---,+.0//0/..012213455357742/++/36765577!""!*.33$!!##! 719ACCC=30<#&*+)*++***+-.-)*.35673036333017;6321V0,()-,)),...-+*++(')-.*)*++&""&+,+*('(&!(0--..038::;<;>B"B?;7477/%'.38;<<87:<"!P$"#"! "%(()/650+,7A>;CE?>:5:CDFEC@;88::988::8=B>86669<;:;;=?@?:6546;=<98C9::863588897457ADDC@>>BECBDG$%%&&'')+,*&##""$'&$%'PMF?:75;CHGA;99<=:5,&&(***,36321134.$55CN,.03789879;=;89:868:::>@@>>AD@8/*&GGGFFHIG&,-15337::88;<@HPX__THDEHJIGFEGIJKKKNQQQNJGGIKPLFHF><==91,-.-+PJN+.00012344566656:7211377544201115;>:5313891& $-8?>=??>>8310-1;>@$&$C;>%%:314A$B88>>;=@;<@?B$%#?;<> "&-.(%%IGCCC@@$&#C$-0(>9AL)+,,VRLIHIKIEBADHIIGB<<>A@ACCC?;::;>BGF>73246::6336@ACEEGGD@=:889::<<511(".345321.--00+'!"'-/-)$(-",30-' *$(),+061('/4240)&&*.1+$"!7'+'"!&%"#(,*''&""%&$$&#89#)($&% !#%"===!"! @>=<6222/+&$##&m+36.(%"#.2-*+.13,$$#(+'*-+0236622$*53,(&%('##,-&!!!  "$&'*++-.,&#%&" !$(,)$$&##-1*).7=5*%'(*,,))//*):%#! !"=:#)(&##*21(*24001+(,-*'),+))*++*'#!$+..,+++(%'**&'+,*..(&&*3>ED7-/1.'###&('$! !#$$%%"A@?<58=:8=%*D-)6;?$#@CB9(&69634896454;B<55;?99>CA8209D>2//7@E(*?46432.*5GE5-+,/001*,770+/9@;DL:0-/;A:4/3?@636-$.46@9%$+/3646993.6:=8.*1631>6%")13+'+.,/47:==:CI=<@8442,-0/+'')))6;524=A57>GC;::858::>>#)D5223340)*+)+44+15<>2)((.1//0-..'%1@8'$)!%(&),,'(4AA83,#$.71*0/-40&&*)$&1+&(/5450*-*''&%%&*,(#&13241,)+/,#*3-*++)&'+,:>777)#5?A;3,3;1&$!#&%'(''$ ;=75!'-&1'*/!;B&'#C0:A7--(",+(%,0,,(#'-+*(&%!5 /3350&! #)*'&%##_++-)%()**)&'-.//....--..-./.-,**+-/-+)('%%&''$"""!#%&%&''()+*))**(%#݀瀋ρف~ ûЀ¿Ž»ù½ŀļǶӿ»ȼǿ<ĿļǾѽijɲ½ýü͸Ѹ]Ľǿ½¾ĹͷÄᯔ쀎ʀȾÿۺǜûȼXſބ݀􂈊ŷĸ񃉐ú½¹ۿ¿󀉊Ԁȸɶÿû䛨ƽ끔򄈀ҬŴƼ􀉍κĺ˺̽ļͷսſð˾뀎䴨ɻڷϳӻݿ˽ɸĨԽ탏ϫꅎo聎hNTX^5743663ab35aY\_\[[]__^^\WW[^]ZY[[]``[Z]]_`]YYXWXXVTVXYZ]___][XXYYZYXX[]VMPWYXVZd6bSQQPPRUZba``][ZYXXWVVXYXWWWVTSSUXZZYXZ[[Z[]\YY[]]^]\[YZZYXVWWXWWUSRRQRQOPSVWTPNNJHIIKMKIKNQQPQRSTUVZ^\WVY]]^`][YXWUSOMLJIHHGGIHHGFFEDDFHKIECFJONKMQOMNONLJHGHJKMMLNRSQRUUSUYZWWXWXXY]``_ZPLORTUVY]acaacdecb_\XUUVWXWURMKLNMIGIORRTWWWZZXXXWXXZ[YYZZXUQONPSUUUVXXWXY[\[ZYYYVRQPOOSQJIKLMLLKIGHGIIMRUUSSUTPLKKJGEFIJIIIJKJJKJHJNPOQSRPNKKLMMMLLKKLLLKJIKJKLHGFFFDEIKLLNPPQOMKKIGEDECADHHHGFFEEGHGCACGJJIIJIILNNMLJHHJJIIHGGJKHGJKJIFDEKQVXTKEFHGFFFECBBEJ6OSUXXOFFKPRRQPNIEFILMNLMOPRQQSSONNORSRRTUUVXWSSSTTTSQRS/UVTQOONMNORVXX[[YUPLIKPXcifYQMGGJJGILJILNLHEEFGF GJLLMNNLLMLKLOQRPPNIIKMLKJJLMLKJHFEEEFGFGJKIGHGGHHJIIJIsLLKJJKLKIJMORSRNMMLKKMPOKKO[_WRRTTPQVVTVXXVUTSSSZ_``abbekqsollljb`ca]WRRSQOPPNMOPPONNOOLHJLKLMMNOQQOLKKJIKNOLHFIIFEG'HIHFDDFFEFHGFDCEFGHHGHJKKLMNMMNNMNNNMLOSRSUTRNJGEFGKRQNPMFIQWWXX[`h5dc_VUZZZ[TKBAKND>ABA??BFJLLMPQW_479=AC?97554457788778:>A?>>?BDE=1+(OOQPPOQSUWY\0/[XVUSQRPMKMOLMQSRSUzVVVTMIHKQOKPRMIJNH>=8/8CLTY[^^\_cedb^ZXWZ]\[]_^]]Z]_\ZZ[\\\ZYZ[XVWYZ\]]\\ZZY[[\]\[]`d588864hfddea]\Z\^ZUUUVZ^`^ZXVSSWXVSPRTVURP.OMLNRQOMORRSSRSUWXZ\ZYWUWYUSWYYZ\][ZZXXXVUVUSTUgY`cb`_`ee`[VMELTXYVSGBY^UF::AHLJJLONPWZXVUTSSTVUSSQOPSVUPONMKJIILOQRQNKIFDCEFFDEEEGDCFJIGFFEDEGG?78=BEEDGIGHJLRZYVROLHGHIIIHIKNPLILPUXUSY``YPMNRPMOOMMMNNOQQPQTUVTTUUSSVW]n:73ddhg]XY[\\VVY[Y[_\]``_]YX]aehebege__c[VROMNPQMJKKIJLNMMPPPRQOQWYXYUKLMPTVZZ\`^Z[]agklidbb_\YXYXZ^`_`b`][YX\bdb_aa_eilonjfba`cjnppmhlr;<<;<;;<<<;<>>8^]_298b^cfl:9779:;9764X?46BJHCACLLEDBzwzuptyqem?ELNLJJJIHJMONNMLQVWY]\VW\^]``[\a`YWUUURPRRRTXYVUWWVVZ]]\\ZUSRPQTVSNLNPQPLJLIIV]\[Y^egd[W^acejmhdgmsteVZ_\XW\gnnpsuz?AEGF>988:;;95c[H25KURLIFKZgleXQMJVcadjga`emyyrstwypktwvtqmnpmpwurqokotrqqnoxwpjeb]Z_fjlnpolklmjd_afhjnopqqpstrpoptx{}}zsnmo[qqrurjipwtnmpu|FJLKIFIPPJEENSPLIIHzx{xpmlifc]SMMOQQQOF:9;YHRWY\eg^U]lg`aZSTZ_]UJEC@>?AEKSQKGDFHGDDKQUWUSH~{{sANG{EKt@C@AEEB@@A@@xqnou=AEFBxihnjddeaZUSOQ[\aaRECCCIOTQJIEFHDIJ@@JQMGFHKJILUifcegko|DMUQNNNMKIJJKMLIB>DGEGKRSOPWZY[YQNNLJKNPQPKILNLOQJKU]efYPLJNQPOQTSPNPTZYQNKFDECAHNIGEIW\XPU^`^\YUSNLMOTXWTSSVUQIABKS[`]ZX[TKNTVUZ``a\VUY^YQKHMYdneNIS`^PLJJMPQLHFDCCACECA}wpegswzzLPkhq{LM{bH^msmjssfitsnooproonpwzppJDCBynimrot|ym^YRFXnsIha[XXPLT]`[XUUe{{y~xgXfxjfijf^Z^dgc]VS]Vyasoji`bhhoq`Wi_HT]agejeFCDFR[YOUmm[Yegmw{x{vjhg`_^]XOBDSYaonaV]lz|xprunhd\_jnkm|FMHre_\[SFESWTVTRV[fx{r`T[]Z[bqmPMWd]GHaePILFADIDFIPJ=??AECBFGB>?ACCJTOFGPWTT]`YV^p}mZM=:N[YVVVWUTTTUYXRRQQSPMQ]^V]_UYgZJOVdoo[M\nkdVGMTVWTHFLRVTLFFMSXZ[ZTNMPZdo{tgbhiZOOQKBGRRIEHFBCJJCLQK>l=CFIG:n:?DO^ZTQMOQ^sww^GAzNVWWSX__XSWNp?>=<:97559;73334564c4995258865225787654675b49_U058753353`a3442100_a`a22\V\464344fe44hhhgddeeg4jjj676igijfbaa`\X]dca_]ZXY\]ZYZXY[[\\]\\\YX\`0132]Y[\ZWQJIA"%'+,.-(*,*)*+,,,-+'(*,,++,++,+))***,+(((''('%&'')+,,++*(&)(&&'(%!$*+*(+1-##%$#$%(,+++*))'&%%%$%'(('''&$#$&'()((()++,-,+,,,+)')**)*(&%$'#$&(('%%%#!""#%$"##$$#%&%%%&')(&%')())(&%$##"!)"#"! !"""%$""$"!"#"  "%%$&&$&('%&()))*+..-+&$%()))*,--++-//..-+)'&&&'''&$#"$%$""%'(())*..,+**+,-.--.-,)'&&'()()***)()*+*)(((&%%%$%'&##%%$##" ! !$%%#$%$"! !"! !"!!"! !##""$#"! !"!!"""#"!"  !###$$#""!!""!  !!  !""!!""#%''(&$"!!!   !!!!$()'"!#""!! !"!%&&%#" !##!"##%%%&&$#$ %&''&&&%&(('&'@%&'''())(%$$%###%'''((('%#!"$(.21)$" #" !#""$&$! !"!! !#%%&'&%*$$$#$%&(())''&#"#$%$##%%$#!!  !!! !""! 1!! !"!"###"!#$#!!"$&&&$###"""$$! "(*'$#$$##&%%&('/&%%),,-.//1479767861/10.*&'('&&'%%&'&%$#$$#!"""#$&&%$#""!#$%#   !"!     !!"#$%$$$%$S##$'(('()(')*)'#  "&%$%%!#(,,,*+.3/.,((**,-)$&(!!#"#%&(-"!U! !! !"""##!!!#'%$&$ ""(-0254468:86410/011122110./0.-../01/.01/..//0/.8--../0/./13332220//./10,+,,.01/--,++./.,++-.--..+*+)((+*('),+*+-/00.-,**-,*-///01000...,,-,,.0/.-/23320/11.+(##$$"!'-&$(&$&(()-/-+**+,-.,*)(('),+)(('&%%$&()*)'&%#""##"!""#%$"$&%$$#<"""$# ###$$#&'$$%'*/.,)'&$$%%$%%&'))'%')++*(+11-'%&)(%')'()(()**()*+**,,.81233.+,-.-*)*+*+-,,.//-+*,.01./132//3.*'%%%&('&'&$$%'''))*+*))+,,.*#%'(*+../10./015775211//---,+-/01210/-+.2310110466776300/04788647;&%%)*./2T"(($##A@D? !"" 9)%%%###&.573-)%%-424751138@@<<=?>97<=<;979;99=<:9768<:;BIHD>:632//389:;<;88:<:512468: <=;989<=>@a?A@<99:::;><76:?=979;@E%()(&$&,-'$DB#+/,)'&&HHIKLNMIEDEILF@==;:72*$"###$%";?HMJ%F?;=CL+-/26::9966798438<==<<82/,+,,**)&&&',39A?610133469;=??BB>99>DECB>=>?@ABCDA;9<>=:883//-(!9=@BFKOS,.1432576534321220./0-+.5;A?9555349@EB9.*,242-))/:>?>:8;?"&&!"$!?<;AF>;?@CC:36<957< !"###EA@>=? !!DA?CCAEC>ADCD"DDCDFC<;AG'++XWPEEIJJHB=@DGIHHFA>=?@ABBA?>@@AA==@=9635659620-(# #$+/(##$%*,-,'&#$$"')" %,*&%&'%&(,7511223: %+(%&&%###$%%$#"#!!#((&'+--/-'$$$##$&&%" "$#&)$#+166,&$#&('&(**(&&)-,('&#"#! %*&%#%-1-(+01//,*)&$%&*,+***,+)% !',130--/+%(-.-0200-**.30+)&(07=7'#)2/&#""$'(%"""#""#$"!A@=934;<=>D+/N97;@?@&(F@1"/8;85:;46=<9:::;9889=@::F&#"">97;<:=B?910-&0<@L)D52000+)-353/-.:GEBE@4*1B<414650.16852/-62?0,579@C@A>76520*!#-03=?6.2:;>854/0:<89A$)&?93101,"#.0-.-),.3=>8/*//++/:9&#+63%%43# ',++02-+/:C9-&'0.,,,...-,,-+'))),,*,31+//*,5/&*.7??1*4=:5-$(.//.'%(-0.(%%),//0/*&%',27>:2056-'')&!%-+%#%$"#&$ &*'2"#%%8"$*41,)'((1?A@0$"C,10/+-12.+%.)7*)&-1+(%$%&$#%##)*+)$** **)*'#',--//00//0/01220/01/-,,,*(+/.-,+)(())(&'()('&)+((+++)%!ŀ耆􀎁ހЀ ـ¿¿ɼӀֺ¼ļǿĿþúϾɶǼ&Є׀¿+ȿɺžÀɵʯάЀĿİ˺µŀǼ˽̿児yÿ⇏ȸϱѫ¹ýĽ􀄃¿򋔠ľĿȷـ˽þ㟪˽򍢛ʀ®ڼمͺ¼Ȳijķϕƾ˸ŷͽǼνƻúĭʹտçƺŷǟ޽̹ͷ󘺴熑)׀ORUX_2`YX[^^\^12`_`[Z\]__ZY[\[ZXXY[]^__]\[Z[\_bdcb^ZXZ_][^^]\ZYXWUUXYXXWUWZXTRUX\\ZZ]2d`YTRPLJLQUXWUWXZ\ZYYYWPPWZYZXWWZXVWXYWTQQOUUSQSTRSTUWXWXZYXWTSSTTSSTTQPQSSRRRPOPPMLMMMOPQTSPQV\[YXUSTVTX_``adgecbche]UQPNLXMNMJGHIHEBBCFIKLKGHKKNONQUSSTPMMOQQRPJDEGFFJOSUTVYYURSUTSPPRRSX\ZVOCFQW[\]][YY\`fgc_\WSQPQQOJFEEGHIHIKMMKIKNTVQNMKKMMMNPUXTOLLOSSOOTY[[XUWXWVUUUTQOLIFFINMKJLOQQNMLLLPRSUTRPOKHHGFEEGHIHIJKJJJIGHJLLMLJKLKJJIHGHHIIIJLNMPRQNLPPNMLJKNNMLLIGEEGFEGLMJHHHGDBCDDEECDFFFEFFEGKNPMKJIIJLLKJKMLJHEBAACFJOSWYVQPMGDB?>?@@BDFHILQSMFFILMPSRMJLPOLLLKKLLKIIKNPPNLLOV_a]]_^YUUVURTUUVXXVUSQPOMMNQUZ\\\[VMCAFJMRZ]XSNIGHGGIKIHIIGECDFFEDBCEFHLNPPNMMMNNMNQSUVWY[ZZ[ZWVTPLJNQSTTSQNKKMOPNLMQROMJGEDDEIMJHHJJIKMLLLKJKJIILNOOMJHHIKKMOLHIR\^VQQPNNUXRRW\\[]\\]^`aaadluuvy}~yx~wne`_YVTVVROOONOPRRUWSNKLMLIJQRNKKMLHGFGJLMMMO"QSMECDGHHHIJFCDEHJHFFGHGDDEDEFGHHHI)HILNNONLJHJONMORRRTXZXTSSRRSTROOMKKNMLOQRQNNNKKOONMJGEFKONMQPMKIJLNOPQSUXZ0578:<;:853111369;:867:AGGB??ADE?4+PNMLMOOQTX./1/ZYWXUQNI>3>IJIIOQQTWVUUTTUPMMNTYVSQOE;>@=;7@JS[`c_[Z\\YZ\YUU[]^_^\]\[^^\[\]^^^][]_\YY\]^^]\[YXWY[\]^\]_aeh553bcffca^YUVYWUVZ]^\[[\\ZZYY[YTRTVWWVVWURSTRQONMOONNORW[ZYYY[][YYXXYcXXWTVYXVUWZ]]SQ[\WXVSRRRQPPRVY\]^_`aa^[ZWUTUUQH;I^YTME=8=EFILNORVWWVQQSVWUSSRPMNSSQQPONMMLLMPRSPLLJFGHGDDEDFIKJLKIFGGGC?@AAA@ACC>7@FFGLNPXWTSQNJIIHGGHIJKMLKNOPPQS[fcTKJLVRKONKLNNKKLMPTYYVSTVUQOQSUb:<6cefd]TSWZXQOTYZ[^_cc`]\^\[\]\WY\]YUWa_WQQQNLOPOOLIGGJKKIHJNPSWSJMPSSSVXZ][WZZ[agjlkifefc_]`a_abbeeb_ZUW_fc^\ZZ^bfeekieiorssttspnr;<>>>;9<<;6699855425755cX]99547:::8764YNGEIEB?9@IC??AAC>lfpyx~BDFFHIJMLJJLMNOPOKLNPRTUUVWWZ_]XWXZ[ZWSRSYWNMTZYSPTXYYWWYZXX[__]XWZXRPQQRPKIGDDNUZ\`krqh``a^^bghebch`KToqje^VRYiuwploxBFH?lh2377423e\UNFS^[`cahifMaE_d]VUWXZ^fmpledhmry|{E}uvtrsy|sqx~~wtvx{~shcba`b_YW]dkquuqmkmoplecfghjlnmmnpsurrrpqu{~zvxwropuuqmkjhdcpxpkklosw|}~DCFLPOKG{||rnmkie_ZXYXUQNKIGHIHGA;nmjgrBHKNLNRVY_cdddfgfddhf_\\`homkh`VQKGGIKNLIOTTX[]_YRSUVWWTSUTSTUY]]\^`djooiea_``]YVUUSPQUZ[VNGDAIRQOIBAAA>;ldc^U]|JOUY\^`a`\^elmg_^``_]\]`emlfdb^`hmmhfjqkdfimmgn~AyqkqHMMEyzBBzwvrnmvugZ]fqyBDGGFD~vlipz~EEECHOK}~}BEKKwvw{yuttrpoov{{|}{usw~}xtx|wolowwjfosqnpsyKL}zsnonovuoljlv}{tptujcbdffhgfdcb^[ZSQVX^gh[RRX_a[UTZ^YVRSZ_]XVUSVTQOMKHEA>?A@<77\KRWYWPGDDKX^`a]ZXYYTLGECDCELLDBHKGCDGIGEHMW_WFC|IOMEEOSGrx@@HMKIGCCEFBwmpvv?CA=phntqng]VSQSRQRNIFGFC>}EQ[RFHKSVJCB>=;oABBAxhhuC|tvKJLIAGJE|mqvqibcipszx_Pbr{x{~rvJPGDFBulsxjcioja`W>Ov{zHub^]YUTX[aa^VLPcoy{]\oejrh[UWUau|j^[RKLEGcsg[YkmahvztcMBO_acepoIg{KRV^^aec_fdZajff~xxga]YUT\\T\kwk`acegqvc]dikaYbcggbpGq`YTNLNIILNSYVXcghmldguyvtgWVXRQRLFLch`Q?CJKLJFHI@;66BFCBIG@ACA?FQRKLSYTOOOS_fquleXHCFGFDINPQQMJQ]cYPONLMIJdmdb^UYnfP`vgdeY^fWFISXQIECHNR[[RGJUWTRUWUUSX^bkuzlc_SORXYI=BOKGOSGQmxm\\XPF@ACA>=>>9pl=gRbll9>qdC\[OFw@EIF@EKOMFMNCEJCDQ[N?>CKKDAEKV02233356632335787765321259:98;;1.6<=>@?=:88765774223468857:822642246665545531_a]_599852244323 221`][]c3d^]be3564333455543fffh6756765igdbacc`bfi5cZTPNS\010\]/10^^^00_ZYYXZ13b[YY[\XOL"$&'+*%$&''')**+*)*,/.***)('()*,-,+++*))((*-./.,)()+*)+++*)))(''()))'%&('%$&(*)((+1.)&$"!!$&('%%%&('&&&%!"'(((&&'('%&'''$##&&%%&'&'('&%$$%%&%&&&%$%&%N$#$$#$%%%&&&(('')*)('%$$$#&+,,,-/-,+,/-(%$$#"""#$%%$#""! ""! ""$$$%(&%%"3 ! #%&%&((%$%'&'%$%%%')'%!$')*,,+)()+./.,*'%&%#"!)"$%%$#$&)*(&%$%&&''')*)&$%&('$#%)))(''(''&%#! "%%"!#%'&$#$%%&%##$$##  "#"""! !"! +"""!"#"""! 3!""!!#$$&('$#%%##" "!!!""! !""!"&'%"!!  "$&(&%$"!!"!  !$'))'&&$!s ! ""%'&#!!$$"! !"""!""!!"$&&%$#$&+-,-..+)))(&'(()*)('&&&%#"#%&())*+*%!"&*-+(%" ! "#""##"! !"""  !#%&'&&%)$$%(*+,-.---,+*)'$#%((()('%#"#&&&%%''%#!  !#! !"!"#""!!"#$#" !""!$&$ %**&###""&)&$'*))*+,,,.--.15:;;;>@>?BC>930/+))**'&&%%%&&&')'$""$#!!%&$"#$#!  "$%$##%'# !!#! !#! !  !! !"#"""$#!"%%#$'('),-,*)( +)&%%$#$&%%&-%%%###"!$#""! "$$#%%$#"""#"#$&'('# } "  !$"!""%%#""#!(-047742420132..12232210/0/-.02100/.010//000/.//.--./100/01235113310/-*+-,*,/1110//0//.+*+,-.-,,-,+*))**)(),/10.(0.+--,,,--,,..--/022+&-1/--+++-.,+-.01210.,+)'&$%#(&# !$%'()*+!)(*-.,))((&&**()(''((('&(*+)&%$#"#)""!!#$&&$%%%##$$! !! "#!$$%'()-,))(&$##$&%&'&&'('&'&,20*%$%+*%&'%&''%%%&'),,*(*,+*()*+1 1453/)(+-,(&),,--.10/--...--,*,..-+,22-*+,)&')((&$##%%&%#%'(()('*,*&''***+,.0/-...13468744651/0/.0124421.*+041/.-.0132264247899:::98:+$(#!'$!"""$":5;@?D$$%'(()*)()++,.12,+,-../0///3541012452.-/2/**-00,*-00/..120146630//.,+,,-,)'$!")-025<>=6012137:953362$+;<961,*/8>=879=!#$2-(#"'&+--476'(/3/*)*,.049;:6359>AD@97?A@=7432242//38=@@?=;:<=<:65667899868:;==<<:;=?A><==<;<>><::9832:?;7679<>BFHEA@D#"DEEF&*-,)%GGGDCADJMMIC><::961+++)$!  8;:6;#'KHO*+*-23368889::977985347<@>>;5.+)''(**'&+./11130,-013422322468::998;@CC=;::;:8643310245530*'%).+(%!7=8;F%C=8:B%))$;8!@=<<;::@?7./5=@GGBAAA@=;<@A??@@>>ADE@=AFD><:;;;@A><:9>CEGFB@BC;7K666541/-*+025:;1*),02/*),0/-++-0/++)(*)'%$#!(%+.0/*#!"'/100.,+++(#!B"'&!#%#!!#$"!#&,31&#F@C&*+%$+/':>"!%('%#!!##!:69=< #" ;68;74/(# N ""!B%,2-$%'.1)%5!*'! # 2%4513556:"%')&%))'$"$+-)##''&&*.--11..-*)*)$"#$""'*++('$(./*&'**&&((*/0,-,&#$%%%')()++)#'12.+)('$ !$'((*((,-*'&'*-33/--34.-0336<<2,)*8A6,%#),+-+%$*21)&%&&'&#!! ;!!! @AB<34GC=?DB:;),$"$#=9>B826:723.*BB@L&;1132.-01443.(+8>BEI@*(70395/,.,2>ED910,)($(9B:30<=5:CD@8+!)3244<:4+*-**,)#&35/$ " #*/,'((+25;=61*!!"! $'())'%)03-((()*&&6:10.(,;7*5CLTM<8946;1#%-1,'$"%),10)"&--+)++***,.05:<40/)&)..$#,(#)-&+>>=;<85689;?CD@?ADFD>2*NJLPRST+--i-YXWVTRQROMIBCGIIJOSSUXVQRUTTQLJIU\ZWUQD7?>=;:755887886320`hnd]fhbY.38405985aZSKC@><;=@@@CFIJGrnmlkmqpdWZ[MIMLKC2`?D?APVRJCHZaWQRJHOK@BGFCFNRYa^[gtoghmyJY``hlic`\[_^WLCGQSQQZ^VU_db`a^YTNIJLLLKLMMMJEBGNOPPOU_giaTNLLIIUXVTQLMYde]UPLILZ]XWTPQRX_\TNJJHEGKPSQMLRXXWWTTZWKLV_aTNTbjhaWPPPVddQGDCJPV[ZPIOZ_YPLMMJGDA?ACA?>?@~{{}tlkmpn{DKRTRNE}>@{vojf`ZZcpuwztghp~Cwpvy{~CFE}koxuplgiecaROevux{c^`]Z[\YY]]YRR\mplGwgdekmi\TYaipmbYZ]QJOKFM]cZWjwkiy}_D?[od[copW;oBJO_vwd^`]W^bedkt{vstfZ\acfkg\djopqkfc_abXVamrj]W[c_ajiffjx~wocWQRURFEKQUlzsl`g|ymaixufVPMJB?GUjtcMGSYPIGAAG@:848HRFCKHFDKPQVWTRQLIFGJPTV[]cnh[]itujk^GIKGJT_aYODBEJOY[`\EESVRUYYTWXYXZ]i|~lUYZRRTVUOHECIBDV`lhjk`XROOOLHHKJFA<>=;:988764235567999:;844676642354323225652\Z]c45676534652c2345432`ZZ]`ceea`b34554334554334=69:;;:87kjj5gdb``ab`_``bb^YVMFDKW02344420010_]021[WZ\^_^]ZWTO#()'())(&D''(+,,/00/.-+*++**-.///.//../00/.--,*((++*+,,*('&%%$%&&&((())('&&'(*)+,,*))('&&'*)&#"$$$%&&'&&&')+*(&&%$%%'((('&&'()*+-/11.,*))(('&&''%# !#$#"##$%'&%&'&%$%&&%%%&'''())*+,,+,+)'$#$%$##$%$! !  !3"%%$"!$%$#!! ##"!!"! !$&&%#"##$'(&$#! #,.//,)&'()*(&%$##%$$%$"!!""!>" !! !! !"#%%$#"#!"###!"$%%%$%&%#"!! !#$&''&&$%&$$$###!  !"##"! !! !!!"$$#"!  !"&)))(%##$##""! ! "#$$"!"#" !"#$$##" !!!"!  !"!!#%()($   #%$! !""!!"""  !! !#%#  "&))('(+,+**++**+,,,+)'%##""!!  ! !   !  ""!"!!! !#$$%%$%'('&''(((*,-,,.,)(''()***+)&&''&%$&*+&! ""$#"##"! !"#"! "##$&&&%$"K$%%$$"!!"#$$$#!"%'*+-.//.--09A>9;BC<9?@:42331.+*)('&&%$%%&''&$$%%%$&(%! "$$#Z%%$$#$#! "$%#!"""!!!" !""!    !##"#$$%$""#$%%''%&*,,+++*+,-+'&'&%%$"!#'&%%%##% +$$%$#$"""#%$""$$%%###$( !  %&$$#"$#!%-0232,+---.--/23123343320.-05760-+,./021//0012&1.-.01221112210124442121.,-,*),24310001$/--,-./-,-.-+,-)')*+,.,+,./.,-/00.,,.P/0/../0/./23.)&(,-,+,,+--**+-0332/,+,-..+)&&('%#%&$"!'&'***(())()+,,,+++*'(+)(()*+('&(**'$"#%&&%$"$%$m###%%#! !2#%$$%$$%$$)*%#$$$%&((')*(&'*'&')11*(%%(,.+('&%'(&%%&')+,++,,+,+),.0623401.*+/-(&(*+,+,..-,-,+*+,+*))+(!&0.'&%$$$" "$%&''&''(,*%'()*(()*+,,++.-+++-.022000330/23599755540./12330-/.---/037887;%+0-+//*$%$#  ###%&(('!65:!%'&%&&'*,++,,.4AI9,**++.20//1232/-.033.*++*+-//-/23452134641245322112310.+((*+)))(),059:8532/.25424666;@?>;;82-.5<<<99;<<= 2$"$#$&'*& #'+-/./2+&+3657:51/+,../02558;;:;>AA>759;;=><@EC@><:;=B"B836972010.03566544479::7689778:;;::767;==<::;;;977789;;840./0587652113679;<;=AA?@EEBEHIGECCCA@;8:=BEC?;76761-.0/)"  !!%-12576420/049:9:;=<:853457757<@=3)$##%),,))+*('(-11/1110/.//--15669<><997544556530...-.11-+..,,041)#" :50_YB461,*,.221003673247764459?C=66536985335657<>>>?BAADG$&'''&#$)+($A>=826BHHIFA@D$#"""!BA?@CB@>>DJ$#&'%FA?>???>?BG&*'EL&B99=#&HBBDEEFECADC@A?>@???<:<@BDCA@A@CDBAA@;8:@AB@==>?@>AFEGMQOLMIB?@DJJC?@@BFEB>;:;;:9768865776664330+)*.572-0.*()2=;1./+1>>6-($$%#$%%#++*(%$$# #-442,(*,-+'%$! $%!!%**%!!""!"(..&>@%&&*)$#y)+&C:A%&'(&"!#%#8;!!98897652+$%$,!%""+/,(#&170,,(',)"#&%""&).52.4;7114:%/2036410/032-%!(*((.1,*03201/+)%!!"#$$$# "''(('+0684+'''$#+.-,+((/65/*(&$(01--+(((.31+'$$#! !""%(*)'&*,,+,*+/-%%,47.).7;84,%%%(35)"!"'*,//)$'-0,&$$$#"!!  AA??@:468:6=#)//-*#<;:CHE;:72..6??@B;35;D%@9=EICAEC@!$$A7;A=:856555*(8B?>H@213213422552,+2>@;F'=1026970,16:@=4.03,(-)$)382/?E:8CPG4#!2?5.2;=-7#(+5EB5242.2464693,(*+)#"'+,8?83-3@>815=;3*((&"!%-:?2%#$#'('),.+%%&*23577740*# #%&*+))*(&%%&*,-/018813=EOQB9:5&&*&'-560)#"%')./2/"$-/*,0/,--,*,.5?@6),-((*,+'#"#'"#/5:7e892-*(''%$%((%!! 45$&##(,-&",2+$#&)&&''(($#($ !"(')."-+(((),..+**"3220.-,+,-,-.../,(&!%)('%')**)('&$!ŀĀ~~Ё Aº¿ŀĸȾŻ߀˄hþʷֽހüǿȀǼùŽſ¾⾤򈪪ƮǴ胍¸žƽ׀»ƽҷ½Ļ·ɾũķ˞叩ɹɽʷ썔ƾ׀ʹû¼ú˲׼Dž􅜹ŷ̼ɲȷ׀׻߼νٱǾʺȼɻֲ̿ڸͰɶ̹·¿񇑚M^CT]1]X[01_\\\]\XVY]_d44gghccaab`a_]]_beccdda^\ZZZYY\]ZYZ\[[[\\YXWWWVTSRUXWWXYZ\\\]^`a`_][[\]_[XWWW[^]\\\]]][YTRV[[Y[[XVXZ[ZXXYVSQPPSXZ^dgdefdceedcb^[YVTSRQRSRQQQPOLKLNQUXXUQMOTTSVX[[XWXWTQTXURRSUY]^ZRNOPOOOMJIJJJHHJKNOOOPSY^[TMHKOMIJNOMMNLJIILKJLRTRSSRPORUUSPOPPPNLORTUXZ[//./02332da\UPQTVYXTPMNMKJKJIGFFHHGFEEFGIJJIIJJIHFEFFEFHLORUURPQSTUVWUVX[]\UOMMKLPOMMOQTROLLMMNOPTUWUPOOMJE@@BDFDCEGGDCDDCCEGIKMMKGEFGGGIJKLLNNJJJHGILLJGEDCDGJKKMQRQPOPQPPQOMMMNNKFFGFFEEFHIFCCDFIE<77;=<>ACCDEFFFKONLIFGIJKNONPVWPIGFFGKPVXYUOHDCCB@>>BHNROKFDDB@>@DJOOLGEED-EECCDEEDDGJMMJJLLJKLMPQRTW[`de`WUWXZXWXXVTSRPOXMLJHFEEEDDDEFEEDCB@ADCCB@@BBBCDDBADFGGHKMNNMMPQOKKNPSUTQSVWWXWY\ZWWZWRRUXZWUVUTRRRSRRUUUVSPQRPOQQNOSVVSPPPOONQQOLKMNNMOSSRTURONMJKMMLMNOPPSTOLJJLIHPW\\[]``cgkosvvw|Esqv~xojd`[USQOPPOMNRRNORSRRTUSRRURPPQOLJMMNLJKKJKMMKHGKOQQPOPQPOMJHGHJKIJIGGJKHHHFGHIKORSSROLLNMKLMMMOSVY[]][ZYYZYZ[[]_]YVVYWRROORUOKQSONNPTTTVXSQTVSOOOPQQRQRUTOQRRUY/1577655899:;<:8:>A@;:;;<>AEFFEF@2)LKO*+VVXWVUSRPMJHHLLJKOSUVWXVUUTSPNPQSVUVSI>;AKLIIC84BPTTUSQTVXYXVX\_^^__aabba_\Z]`_][XX]][]]][]bcc`\[[]`dfea][[\]^_abcfggb_`^YWZ^`a`^]\[[]]^_^]_bcb^[[[YVWWSNRVUUXYWWWXWUUVX[[[\\]]`b^ZXXZ\]Z[``\Z[YWWVSSTRQPNKKLMNRUWTTXYZZWVUTSSUVVVTUVQJ@41BKKNOQROMNNMNQQPQQRTUUWZ]a_ZUSRTURPOQRPKGIMKHKMNQPMMMHHMQROKHHIIHFDA?=82bhh:HOKGHHGFCCHQOIJKLNQRSSTXWTQSVUWZ\cbZTRTUY][XWUSTSQOOTWWYZY[]YUWUSX_^^i6dbb^a^PNTRNNOOQPOPQSQPQSVVVZ\ZVTSOD1>S96=GGEHHFGJLKKMPSTSRTRLJILOQUUQQSTROSUSRTTUY\WSTTVWVX[_hq>>8ZU]4899;8cVVYVZfljjkjd\ZZXTY^034cZNGDBA>::=?BGEfPUUsZhfcgori_WNQZ`bciokeel{|hVQSVUUY^`^ZXXW^rCAtnno{BABFIMNH}|xvvuuqs}DDB}pmx~B~yxwoc]YYV_s|~|st{{ux}||ru~B}t|}{yvronmnonlikqw{{wqos||vtnpzzxy{}FEOsstoopnljfceebdlroihnj_ZZYUSQPU\ba\VVi{|vqswuf_]RTgnf`TECKNMRX`aWNOTI:99;D9SX[[XWYUPQ[egbXZabc_RKGC@@DLPNOOJFEEDIIGORKCAJN|CGHMKAzwwCILJIDBDDCEFD?z@A=;>CDA|phfj=kZOMML:J^?|H[R?:EU^aTKMIJIGILTQDGNNRZgk``ba`asKYbjpmjkoqrspbNBGPVSPPMIUcgjnkaYQLHGHKMLNNKHB@BEHGNVZ^ceYJFHJOSY_]VQOMO_qyn_VPOQZ]TNMRWZXWWRJCBFEBIMORQRTSQWZYWWUSWNBL[]TECXe_VRTURRZ^VJGHGHNVWTPSblh_TKILKEA?>BEC~xz~}||ywn\ZsJLMRSWSFpl{zxznd`ecXQVl}xg]itv}{h_^i{FHD|nu}wtqnpmgca^^a]cogZ\bff`]]Z[[afhi`YiLJznjihaZVZ^XWb`TMCAJPZjmng[WZ`_bqzqdKPwvcbfr~b;hsCQbzzeb]VW\ffhkkk_VWZ_er~o`UU]`o{oa_eg\W_b^ZZadWU`edLC\wq[TOKILMQdrnkkjsxnWYtA|cWTOFEKWttWDPVKELKGHA;?<65DLFMQIC=@Xrywuh]THKPVagoxk\]c`\VMF;//:<>QUOSVWSMMPPTRMI?Igo\\dgfbhia_`TD@CCEJ^mcI=CEEOUcraHGJJPSMIMTWRQT[goeUcrj\TVkyh[TPQV_TRcpqmjaaiicb\W`c_URSK@>ENRJ>=FHIE?CFEFDELIFJIFB@P]1367455346643347766651_1369:527=>=<<<:99::98775479;<<=?@?<;965776643554234324675^X^554665433431b__256431^[YY]eifa_af336642344555666:;:9776hfdccbbaba\ZYZ^b_ZVQKFDIT[.023224431025421^[\_cb^YS@$**')*)**)'%$&)*-23200..//.-,,-/10011/.,+***,--++,+*)*++))'&%$$&'('))(((*++*))*+,+(&$#$(*)))(3'%#&)*)**(&'))('''&%$#"$&(*.0/01//12111/-+)('&%%&&%&6'&$$$#%(**(%!!$$"#%()''))&$&)'&%%&(,/,'%%&%$$#!!!"#!!#$X##&)+*%! "!"! !!!  ##"#&&$%%$##$'('&%$#" !"""#$$-,*(%$&')*(&$%%$###"" !!"!1"###"###"  "%'()'$""###$%$$%')(%##"!"$$#$$%'&$X%&(**(%$$#"! !"$$#"   !"""#%%#"#! "##! !"#$&&'&%%$#$%$###$$" !##":#$"!!""$! #$#! !! ""!"&(%!  #())&" $&%" ##!V "$$"!"! !"$&'')+-.11.)((**)())('&&%$%&%$##" !  !!     ! !$,##$%%"#$&(*)(()**))*,,)(*(##%())(''&%%&'&&''&%#$%$$&&%&(*)&$$%%%$&'%"!!"""#%9'&$$#!"###$$$%%&'$#""# #(++)+,-/1457:::;=?<;9762///./37::97421258868<<<=<989=?BEA<:75689964443.-.0232/,1785200./2333106@B>;:<>>>=;:99;>ACCB?=<9:94+%#"!"$%#! !#" !'040-1;@:339;==<:9862/.030/35321-'$&+//0453/-1564010.02342035433457652//011/-020-..-+-/+(-1/-,,-*##$4,/.>19757F%$A;9:B%##%&()%>:AB?;::;::@I''%C96=BCGGF#FA>=>;40//+.9?CB<:>A>;=BFGEAAAELI@99>"E?:AJKIHFCBB@=<;;===<:;?CDC?;:=CIHDB@=>FLNMFCDEEDGK''FFKJIR.VLGIRRH>=><<<:98768856<@=89==64320/,*,1530+(2=>;9;@?401+)5;61* $'&)-11*#"% ),.-+*,*'(0672**.12/($"!@!"$()'()&$$##&%#(*&! &*E?"$$((!==<$))'%" ""!"$"; ! !!?9412"!-#.!=%2- ",44,')&()&').,"#'(+08:1/0//.8%-2685469;<=<3&!(+)''%#+57785/*&" !"##$%#! "!&,-046/$"#$').31-*(&'1=A:1+(()03,'&(-0/..*$ "" $&'))),+*./-+,,,.(#.1,"!/83-)))''*-*##$%%)/.,))2861)#"$$! "!=;<@CCBBC@>9/,9')*,,/-$53<==?BEC80.6A&'%B7;B>;87:955423514=8.0478433123689;82:J+(=666740.140/54.*%$(+1:;<90.3842;E@8()EF646;B24<$-6DL?330-.17677783./159=FE<3-,02:@910470,2320046.,376' /ARNDGH9-*)&"%&)7?9544<>6(*<#@/***$#)0AMA,%&!+=97326521.,352+)*%"  )' ## %+.( &'&##%$$""'$"%%# &(&)'*.,+*(''*/20,*+- 0/...-*,*)**-/,)&# ")'(*-,)&#ǀрԀ؀ žоn¿ƾ¿¸̽ǿþ¾¿ĽBͱ˷(߀Ļſ½ü 1ҿûÿ􂉉൚󄎗ë΋怀ѺƳꁏ³ۿø¾ÿ܀ȼƿƻйǴԀ퀉鄆Ŀ˽靨»ހ¾ܔЋ̵ĸ΀ɷοنѿĀȾúɿ򑠄ϽľʹʾƐǺó¥ŹźꁋϦŽۅҼؾǴ¹ŸрŬêªɻ㸜݀WCU[__\[]^][Z]a`]ZURTY]^__bffb`ad44eaaa`]Z[]\YWVVVWXZ\ZY[[ZXVUVVWVUVVWXVTRSTSUX[ZYYYZ]___``_\ZY\^]\]^_cc^[ZXVVWXYXVUWWVWZ[XWY[ZWWZYVTSUWXYWX\]]``__]\]]]ZXWXYVTU=<@DFFFEFGIIFGJLLLKLRY\___dji_Z\]]^_][XTRQQSSQPOMKKLJHGFECDGHHGFGHIKLJGEDCCDF0GJMOLJMQSUURRRPQSVXVSPOQTVVVUSSSTSRTVWYXVRNMNPQQORTUUVWYXWZ\YUTSRpOOPPQTTRQSSSVWSOMPTVVVWXURPMOPQQQPPQPPQQRSUVQPSYbda_`acg6olkoutrrt||vqkhgaXRNPSSTTROPRSUVVTRRTUTSSSQTUSRQRRQQRPNMIGHKPUXXURSUWWSQOIGHIJMNMKKMMMKHIMPRRQRPNMMNQSUUTTUXYYZ\ZZZXX[\ZYZ`ed^VSUWQIIMNMQSTXWWURSUUWYWVVUVRMKLPRSRONRUWZ[Z-.1332369<<;;:H=@A?;99;<::DEEFKMKJIHHJIHHHJLMNRTSRRRPRTVXZYYXVTRQSX[\ZYWVUTTSSUVVW"TQU\[ZYWY`fa[adbacdc_RJOOKMOPPPNMOQPPPQRTTV[^YOKGCC87B?ENOLKJGGKNOLJKNU\XTROLKKNQTUVSQPNPRSSTUVUSRSUVUSRRRUZbjqpke`\\`flmkmprqlgginpoq:;9p9;vtssu<<=?>>?<5aa6:98994ZPVXZ_cfgjlkb]][XY\\^22[JAA@>===wkl>{wyyuuwxyxrmkhb^agmqspmpplmlkloooqog^Z[akuyrjilnlgddb^^cihgjnni`[Y[`ba`^[YWW[``\`jpnklqqllmkgfggknmjigilqw|}{ytqqne\WUSLHPWURQQPNMQWVNLQW[_^[\_`]bhieb?ba]VRRWYVUWXTOQUVWW[bc^\`effhqvoe__\Y\\[[Z[_a^[YZ[[XQIHMQQMIMNMKIHHCDOVUQNKJJHHGGFINWZSJU^[_``gqz{tk`Y\gnrsruvvy|ueYUTVZ`ehidYLHNXcr~ymiovy|ADIKKIAwIKrtxtmilwuxzv~BGGECCwmgehnogapDKJGFIMNF}BILEFLojqzHJK|wtmeglifkptwyvnjqywsrv|w{~{nmoprx}zQR}vpqmihebfif_]^_bfhiedbYTUXYVSTWZZWU^lv}Btjhmurgbc^]a`ZXVNMNJLX^_[TKHMK<-0548\HPU[a^WROOWbf`[\\YZXMC?z>@@FKNJFB@HQRRSTNBxBCxIG@ABABCBBCB@ABEFDDDEFDwgikkq>AB|mdi;BFDB|eOGC@<-3PBAAJPLOVWTRHBIMKGFLMOKEKOMKPY`cjbD6?]BR\]Y_ipx|uo^LEKUWOGGvJNW[\`gjdYOIHHJLLIFABHKJJJIKRWWUOKJMTTRTTWXWWUX_^^epobZTPNMNSURRQQRUXSNE@CEKSRPMJLOLJQZ]YWVW[OFS_aYLDN[\WVZVOOUVOJKMMLM]KKS\WRROLJHHEEIIFA}{|~{uhYiDONNQPOItpupknwwmc`da]`beppbet|ofep{ABBworssurmkjg`\YTOV\ahnlecfc]dnifaZiXcNpbejf_VQOQRQQCn~LZclrrocWWPP[hlefrs~zt{{a@k>OWiqe]SKNUYdh]QIIKHSr}fPDGLOfvpideaYXeiaZU[h`XUZaVWb]dsvzDNHiKR]Z\[RV_a][hpi_YSgDg\RIHNf{s`THCKRTPJHHE;=HOKIHS^]ZULHIRevxusm]Y\V[cmsnkb[Y\_\RIA=>>EORRQSUSXSOY]X_eTHMVYa^[efYLFKZ[SSOKB=N^ehVB@AETdqvdSNIGHFFKLIQQMNMUWKRaaSLVbj\PPR[e{y^LOVVWYhwyvurhhjmeahhhe`XF:@H?@PVUPKKJGGFHLMIFDA>@BDFEIMICBDT..022021014432124434776568;?<<;;;===<<<86788658=?>;:=@?<;966766544664236654443_W[i888754da^a44b_`ab3552_[Z^bedccbabcf4fbbe35667789766644igfdcba`__^]]\[]^]ZVWWRKILOTY--,-010// 1467641^\[XUS@$(*)'')**)(*.-+)%#$(*+++.00.-./.+*+,+*++)'&'''()+,*)*)('&'''('&B'''&%$%%$&'('&&''()))***((())('(((,,)''&%%&'('%&((()+*('))(&&''%$%&%&()+-,I*)()*(''((('&%&)+(%%%$%'()(&#!!""#$&'&$#"###$%')('())(''(('%%$"!!#$%'&%$"!: $# ##" !"#$%%'(&##%'*)('')))+,)&$#""! !! !#$$#""$'())')*)'%&)*((&$$#"h!!!#$##$%())((*+*('),--./00,'#"#%%&%$%$$$%&$"#%&&%#"!#&))((***)(%$$$#""$%%$!  !!!  "#"!!"!!!""!!"#"#! !"##"#$%'&&$$&''%#$%$#$$%#"   !!  "!  !"!"#" !"#"!  + #&#"$" "  ! !"&*,../144.+,,+-.,+)'&A'&%%#"###"! !""!!!""$$#"! !"""! !#$%#"$&'''&&&%%')++)''()**))'&%&'())(%#"$%&&%$$%$%&*')('**)''&%&&&$$%$%''&&('&'(%##$&(''((&%$#%&&&%&'''())'&'*//-,,-.05446:; ?B?<:6530,(&() '%%&&''(('''(J'()(''((''(&$#"##"!"$'**)'&&&'(&&%"!!!"#$#"!"#$#!!#%&%%&&$""#%(*+)()*+,,,+* ++*))-00-)'()%!!$%%'((*))'%&'&'('&%"!"$%&%#"%''))'  !!   !#" !"##$#!-1/]01/.00//0//0111232000/--042/-,-/001221/.013664100110/023223334200221100111368:;:7545630/0/./0/-,-..-,+,./.-.012498-),../00220/-*)*+*('&'+++-/...-,,+))*++*)'&%"#'&)++))++)()(''&(((),01113540,,+++*)(&%&'@()(''&&(&%%&%$$# "! 3 !%'&%$##$$##$%&'')+)())()*++-,*)( )*--,+***)%***+*')//..,-151.141/121/)$&'$&())(''(8))*+,+,.1.&" $!#*+'%%##$%&&%$&*/-*)&%%&()*++*)'%(+*)*2))*,-+)))(*.1587542/.0387467996555799:7<;::;R+*& #%)/255540(%%%##$$%("  !!A99 #'&!7( "$%&'()+,-1;Y7O9644676420.-./0-+,.1332220+))*.10/-/340.-../133/043-(')++,/.,+*+/35324665685123469=@AA?9542155-+24006@$''",$!! )('-,**,/0.0674236569:953577>ED@???:644558<=;> @=>>;;=?@>;876436:=>=:8:<:;:89:99;:4/--17=@<779;:6565337:878:;940/0343310/--/2203:=;;=@@;::854568;:::;=?ADDDCCA>?;5-&"!##!  &+*')03354225427==:77750./341112.+-.///2784135458>B=74421432102453100342,(),..*N+.---,+*('&##),"+)'%#"! !'-.*&L.313227=@?<71-07:<<F%II)*OJEA>:459979<>BFIF@CFIMMLPQF<;>>>@DGKKGFEN13UKEIOH>::75765798323359;;8771--120.-/11.,05:A>869>=7441144/-+&%&%&-241,$(#')-10,)'&+24/,,-,,+% < #&'&'(&#! $*+*+,( :"#;@'&!!"!!""#$$"!"#$#"!"$#<34547!"@6/2!%$#D@0"("!!(*')/0-,&#),,'%)*+'!%)((*03261"!/"*//,/49?DC?;1% #),'""#&+..0573-&! !"$$" !"!!"!"(,,,)%$%+,+++-.-,++/./4<:2-*('&'*+**))*,-*&  "%*)'&$%(&$)/1-,+,1(!)02/&!*21,,.+&%()%"$'('()((&%+1.)(%###$##%&%"A?>@BBCEDA?8-3#+)(+++'C97;969??821552456><5..++3;=99ABIPF?CAGI44+09EKC830,')./692+&&(%+>RRE7*"#&'4@<7343..683/-1:3-,/4,,415>>@%*%3#)1/0.(+00-+153.*'4%E4.*&%'6FB5-$ "#"  %,+(%! &2>@=<:/.0+-16:74-)')+*$  '***+-,/+(.0.26,$(.0653991)%(23,+*(#*478+ u$,4>?@@@AABDDC@==??AABCDEDB@%??@BCBBCEGE@>>;:<@DGHJKJIIIHFC@==?DJLKANRNGGLONMMPV\ba[Xcrtrqj`Y[_]UPPNLLMMLNNKKJIIIHGEFGGGHIJJLLIGHJKKIHoKMMNMJINPPPOPUVWWVTTUVWWWXXUSQPQTUTTY\ZTOMJIKOQPOPRRRSVTRRQRSSUWWUQORXXUQQUWWXXUUWXWWWUTUTTURQRTTSRPQRRSWYTNPRRT?UTPORW[\\]bdeeb]VUWYYZ]acb_YXZZ[[YROQUWUQRTVXZXURSSSTVXZYVVXXUUW,VWXWUTSOLMUZ\^`_YTSUZZWVTMHIMNLMOMNNONMLMPQOPQRSvUWYXWTQSTWYXXX[\ZZ\_aaba^XWWVTY_bcb00a`\XZ\\]_^[\\WUVWTSTTTUST\_010./123236:=<7313<9789>JW]__][\]^^`a^YUTV[_^^cge^YXVWX[^[VWWY\^`bb``][\_eifb`^\\]]_add`_^^``_]\]^_bgklmmkgdcb`]\\[\]/\YVWVTSRRRTUVXYYWVVWY]cdXRVXUTWYZ\[]`a`_]ZVRPPMK0JJGEIMNSWTUYVRRPOPPPOPQNLIEDFHHJLLKLLKLPRPNMLMJIGJPVWXY\^\VSQPQPLKJIIJJIIILNPPPOLMOMKJIHHKG?;?CCBB?:;>@?=@EINOOMKMKIIHFFIIGJNOMLKLNRTTVXWUTRRSRQSWY[\ZYXZ[[ZUQQQNKOVXYZY[aeb]]a`_Nbb_[VSROMPUUTQNOQRPOPPPOOPONQW^_[UQNRUVXCh@MJFGGFMQUSMGGNU[`]RLMPQSSSVWUNFOWTUW TTUUVVUVUSU\cmpmhea]XV[`^Z\agklnoq9:<;:9:utttu<>@@<;>?<:89<<6ZJY44f[RTSW[_di`UX_]Y[\YY_ZOJPJ9cbfmien=AC>74_0>MMHEFGGIIJMOQVc_n`\YXWXXSQRRNKKNRVTGFMRX\ZYWSPMKJIIJLLJKNLJIKOW\\]\XXXUQMKKMRWWROMORZhib`ccddeeccachjlot{|m`_`[X\ZY[__SP_mtxDMQJ8]XOGFD>;;KZWPKN[]XX]`gplgnvtqprsqsz|zupqrrsw{ztpmnry?ABB@>>?@xhckqrvtlilqty|rqyzrjknjfdc^ZWWZ_flmjhea^\afea^cijknkfa`^^aa][[\^][\^^]^__][[\_abb_^aehnrsrpooqvyyxwvtqqoome]TD@INPQQOORX\YOLQVTRTV[YY[[]dgda__`[RPRRV^ab_[YX\_]YZ_`^^dhjlkjjiifceklhc`^___]]^\XULEINNNKEAIPPQTTTSQQOMPPNOUWSQONS`ki^YVWh{zuorx|}|vlfbdiortvywsoi`\[^_\XUQSWVVYX[j{A>ttz=slhiqCLIHLDzvwsf]`jrKH~w}ADFDB~|~CHF}GLJEFHGCGIGILGFDxr}FLQLzuqnjnwqlpqrtwzywz}zwuvy~}xuwtmmt}rdbjqsuy}~~ynp}N}zod`]^hnneZWZ`a\WVXY[XUVSNOSRSVVRO[xjZTW[anpjklea][]]]^_UKQVLABILSS9)+1449ZHUXYYX^b_XT^gb]YQR]^NB=?EILMMLLJMLJGCJOOSTSQHBDFE@rl|FHJKHGGB>>?BFJIGEC@xjentx>??>|vsu=A?Hbkqh_`YRSTYVHyGOJJC>GMLTTJ@EUUPFAFRd|{fUHGWSXgmjfec`]TIR][XY[XKBDKOKU_``\UQNS^aZW[`\LBACAAGD;:CT.//13o441-.232357879:::;<=97:<==<<=;765443334:BB=;;>>;99879865445654236875454bYY`4775222b\\c42]ZZ\`2443a[[_a``cba`_acd344789976433ecdffecaaa__^\[[\[ZXZ\\ZVOIGKSX./. /14556873`[TN:!%)-,++,..,***)'')+..-,*,-+,-,,,***)'&%'''&(+*(&%''%%&&'''&&'))'%$%%$##%''(()f(()*))*++**((())*,,***(()*(')-,'%%%$$##$%&&&'(*,--*'%$%'('&&''%#""%()**))('((# "#$''&&# !! !#$$&&%$ %(*,+)('&%$#;%'(&#! !! !  ###$&'&%%&()(''(&%%$$&'''&%&'&()''%"!  ""#$%'(''((&#$)++*)()*)(&%&(*+,M+*)'&&&'())*,,,-,)(''*/0-)&#!#%&&%%%" #%$!!$&'%$%%&''&$#$&())'%#"!! !"""#%&%$""! !"$$#" !!!#%$""$$$#"!  "$$##"!!!"$%&'))&#"!  !"!  4 !  ! !!! !!! ""!!$&$ "##""$(,0/+(/89872,*,0.(%$#" #%%###""!!! ! "#%%#!"$%%$###"#%%%# "$%%$$(*,,+**+++,---+)'%%'''&(++'$"! #&'&&%&&%&'&%%$$$%&('&$$%))'%%()()('&)++*)'%&&'(&%%&'&%%&''(*+)%&'')**'''*,,+*-/0.-+''(**+-/120,+--..,('*+,)&')))++)''('')*,,*)**)*++*))**)(''&$%*---.,(%$%)*('&" "#"$%$#$%&%##%%###$%&&'''&(*++*(&''(**+)(*+,-//-)'&&&*.110/.,*+,++,,+,-)''(&&'&&+- !  !!""!! "&" "" !"##!!  '-032/./001220-++-02014L541/.,-./0/--./01232110./14653100/0123443100110//1320//0148<==<:8655432211210U.-..,*)))+,-.01///00145.*-.,*-./000120/.,*((*)'&&'&'&%'()+-*+0-***)*)*)))'&$#"$%%%&''(*++)(('%$$%%%&*-.--/0/,*)))('&&%%'&%%&')+,+*(''&%$###$" ! "#&'&$#%$###"#%%$%'(&%%&(*)()++*)()*)((**+,+++,---+(((&%(+",..-.1430022111/.,*)'&(,,+(&'))(&'(*)(*/+)()()*()'#$$"%')'$"#&*-0.'#$')*))*++("(-++,+,,++,+,,+++*,048975531/-14200368898789:;:::; #!+'%))+./00}( !&%"""!#'% $!/13997;!$$!* !#$&')+,-09XDn@9644332000/-**+-/.('*,0211/-,***))+--,.0-,+*-244432220-*''(+..+))+,19:42456579::;>CD;333/.10/131('2;==#&&"%$!,+'%'/2..026:3/499877879>?>:89::;>A@;8779<!"#"!!!">417==<:99=>:9;?@BFIE?>AA=7887421/<-,-/37::864211598535877986332133101221/02223342223554410246;>==@DEDB@@?>>==8.(" &,/+)+//-./00137:;865674-,.-07972/01452./3435:<:::9;<;88;@@<96434543342/*&*,++*(&*../11/.+)''('%',,)%  $-440.+,6?@?<>@@??<631259;;<@A>;71./01/.-+,.--/-09E%#;8<;856<%+'HD>@%*&A??=4/06;B((D=A"#$$#DCCBAC$&&DBEF&*(%HI%'&#E&)(ED')%D#";8?%*-*KJJGDB?=;89?<79<=>@CCACFEB??BEEA>@A==BGIG@649=>>BEFGD?@HV0[NDCORG?:54106:<70.0452/.0231./.++...//,).@E8,()-3;;8;=974112,%).'!!"!($*+---/1/,*041.,()00&"%')(''&)('$!&**,-+)# !$$">8>$%&'%$$"  !$&&$"! >517:;>:7: ??B@81+&&#!+**'))(''+,*.2($(+)$#%&)-)(+) 0"'/*%)0:>:302.%"&)'!"')+,.000.*'#"#&&%"$()*(&$&))&$#&,/-+---,,+-033/+/9:3/,)'&#&(&'))+-,(('" %*,,+&"$&'))*--)%(-)&*..*%"!"(.01,&&+.+)((('%$#"$$%))()11(%%C'1.(D%(I>:DL(%C>63!*(%%# #$?7698668865588789879;:>>9755544540'(;:6:=<869:56988<;>ABBADHE?;;>A@ABBABCBBCB@>>>?@BCDEDCBCEEDCBBCCCA@DIKGA@>=>@BDEJQVVTQPLFB@AEIMNMKIIJIIFDGNRQQPPRRTVUW^b_\[ZVOMOOMNPMKOSRPSUUUSQPPMJHHHIHIJJJLLKLNMLJIKKJKIGFHJLMLKLOQQQPPMKPVY\_^[XVUROMOQRRUXYSMMLLMNQTTSSTTSWYVTTSRROLIHJKKLNOONNPRVVUSQRSVXYZYXTRSSUXYVSPONJLPSSPORTVXYZYYXZ_a_^b4753fc]UPRY\^^_^\[ZY[\\[\\ZVWZ[ZXUW_b[TRUWUTSRUWXVUTSSTZWZ]_`^XUUTSRRTX^`]WTUWTONNPTUSPOPOJLPQONNMLLKJJMRPOQRQQQRTXYYWVTTUX]^YVUVXY[_bcc242_.]]0112454d10/]/01/R[WX[]]^01331.../12466798303BCA?<975458:;?DGE;/('MLMOQU++WURONLIIJKIFEGOUYZZ[[Z\^ZLGLMJGHIGFIIFGJKHFGGIPTW[^\VVXY\__]XOILU]^^ace`XTQPSUSOOTXZ\_fjgb_^\]^aa_]\[YZ_bcddc]XWY\]]]`fhd`]]^aegfddeeedca``^]\\[YY[^\\S\YTONPQSUTTUVVVTSTVY\\ZXVVVXZ[[Z[^bb`]YVRPPNLJIHHJMKJKJMOGDRUPNPPPOOONMMKJHGGHGGIJJKdLOROMNOMLLKJHFGKNOONQSRRRONMIIKJLNOKHGHHJLKKNLJJKKIIIJIDBBDDCB@=>ADC>=EIKLOPMKLJKMNNNOKGEHLMKJKNPQPPQRSSQQRUZ\[YX^b][XQONJIKNRUUUW[^][XZ^]YWTVVUUSQRWXVROPQRQOPPPOMLHBN`YU[\]_`[UO9K^:;dh;>JSSOIEEKNRUUQKKOQUUTUTSURUYVUWXWTOMOQOOSY[YX\aimlida^[XWURUY]dilqolmq:;;;utqopr;<==;::;99897g55/04563ZTQNPX[]`\VX^__\ZZ]VF=PcT@?A{xwqr=>@9\`8COSSTWTLJKLLNQWaw\gZYWVUUSPQQQOMJLQUWVRRQNPSUTPLIIJIEEGFDFJLMNMOTY]``_\XVXWOHGNPPPOPRSVagegkpqrstrmhilighlnle]YYWVUSRVZ[XUQPVZ^dl<@>7_XUPPY`[WXadXQWahiggjr{|}zvru{{wy|xsnmkknppooowzqipDEEGFFHF>k_WXepsolqsv}xrorvtlhfda```_\XUSRUZ`cb_adffc`^^`adhheceb^_a`^]]\^acgkkea`^][WVX_ccbelqruz{|yxz}}{yyvpigjonkidXRQRSUWY\afeb_\ZYWTQUdlklnkfdb_\ZUSSROLS_edehihe_[\]\Z]a`ab``bfhijihghjkkc^`a_][WRPSVXWXWWTSY]__\YWUSSZbZPKFA?=>BDJS[^ba\[]dkoosw}B@{upooptwpiklmoruwyyxuokklni_al{CC@}zvwzz{ypf`o}zvqouxy{?FRSKFCDEHIFA~{zz}CGDur}@@DIIGHH}zGHHNMFCCEJKJI{sojfgjidhnkhkv|utrrurljkjjlkkryzwwupkimqrqstwvnit|vpd]bfkqsupf`]\[YXVTVWXZSKOZ_\VTSU`u}n_XWWPEN^``bcfimjda^UJFHD@BJPH@290L232;VAOTRNThwxcU]d^VPLKMQLECFJKHDDHKJJKJDENSWYWQFCFGFBBKPNLID@=AC@@DHLMHBA}rnqxur<@B@?BB{rh`^gF}qpne[RD/Q6ELKHIJKJNRIIPRNPVPFEAI`kDPRH>CQWWRIINTUO[deic[MEJPSPPOMNKKONBEHFPVY\hyveZU\_W\]RKG?szEIJKBAHOQLCBHLU`e\NINOC}K\ofTSRUZULHGOU\ZQIAmnKMJOQPQTPD@@NhaWevt[ROGCFBCDBQ^0111025533. QS/223666789:976:@A?<;:98753234337?CCA?=<;9887799864456433368876443a\^47631abca`b3gc^[[^befgec`]acbddbc`\]_cf34334456654333db121bbacdccbbaaa_\YXY\[XUROJFINRVVVWZ/135642/%%'0-,++**+*)+,+*+,***))-,,,+*)((&$%&&'''&'''()**))('&'''&%%$#$&&&'('&'&&'()('')))(()*"))(('(**)+,+(&''%$##$$%'((())**++)(7''())(&%#"#$$%%%')))($""$%%&((%"""! "$$&('&%$#""!"%)+)&%$$$%'(('$"!!#"   "$'*+*'%H$$%&&'&%$##%&&&%&&(++*(%#"!""$&&#!"$%$$$#$$$%&'(**(&#"!"%&)-01002441-*)'&')++'$%&%%%$$# !!"! !"$')&##%%$#$"#$&()**'%$#"!"##$%#"$&%%'(''%#""#%&&&%%#"+!!"$$#"""! ! ""! !!""#$###&,0,&$$##$&&$#"% !"""$$$#""#$##!  "#  $''&%$"  #$$"! !" !$%$$%%&%&'&(-1.*)*'$#$$##$#!$&&%'())(&&&$#""!! !"!"$$##%%%$#$#""! !"##"!"#%%&'('%(-/2320.,+)&$$%%%&(*'#(%'(('''&&()'''&%%$" !"##%%%$#$&'('&&&')*\)'%%%&()(&$$%##&''%$&'()*+++,,/0/.//.+'%'*,--..-,+++,-,--+*+-,+)().1-'&(**)('(**))(''()*+(' +(,//,(&&'%" $%%##$#!"%=$$#"!! "%$$&'&&&'(*+***(((),,*(''(((*,-.*)+0* +((+,,,@  !F "%%! !"#"!#$$"!! "%'),/.++--///.,&"%,0/03463-*((+-+**,-..16641/#12310//./2443431--.01002696300136776<44431010/./1001/,*()*,--...//-,-./110/,+,.//.../11/.,+)'((''&!*)'''()%")+('())(()(('&%%$%&%%&%%&9'(*)())'&%%&$$%'*+)()+*)*('&$$&%&((&$##$&(&%'&$$$#"""#" !  ""!$$%''&$$#$&'%#"#&'%$%'((''))(('())(')*-.-,+/2.,+('(%$&(*--,,.//.-.10.,*++***)),-+)()))(''(''((% )4.).//21-*(#.34#('$"!!%')))'%%'*,+*+)*,+*+-++,,+*'&(*)'*..,-0367654210/.,*.02568;96799:989;)'&$"$))*+'#"%%$##%&" )#!@?@<= !"()! !##"%(**+.39NFJR7532120./..,*)*,-//-,+*,.00-*'())'')'&)*+,++,.157763101/*&&*+**+,.-.5877;=<<<=<:89;:89;<:5/./-+*))+//-*)(*+,-1)%$!!',,+,25-),3774359>??=:9<@?=>@>;86458;::99>@:36>"#DG&&%%&% 7/*+198;97:ABCDDFGFDCDB=:9;><63-&#"!!"#$'*.0//0/10.*,7>>>?<966521110.,)+48889::732465467657789=???<::;=@A;7786530,,-/0./24541.,)&&,0+'%#!!%,0352259;<=>@CGHFDBC"!AA=989:<=83579:;=???><855565019B$$"A=:<==??;41:ED?<;?AAA!&-/*%#$%''%"A@@ABF%'%=9@! "&'&'(LIGCAF((L(,*$B!"C$(IFIJGB><967::68<;9;AGD??>>?=:9:;;;:9=BDCDB=:9:>??@BCB<8@Q\[RLIJKE?;3/369>??<63220/.--/003/)+263/...3?E<1,,-)"'1456567:9542-&##  "& '*(%)5@?2).2.)&%&),'" "&'&##%('''&"?#),/1/+$!#$$!!(,*(&""#! !$'(%#"A<9:><9! ""@:5005F'JIG?=9.%##('%'''&*.((..)+0,&&# (:8/--&!.3,.)),.02/)-0+$ "%%%&),.03331-*)&$%&''$ "*13/*%&))&%%&'&$%''(**+-/0/,+/8<3,,+)'$"(/.*%)0,$"%+-,*+-+'),(+1-)-/'#(.-))*,)'#""(0/-*((,30)'())&%$"&**))++//(%$"%+-,'%%EAINF<7:=="')'%$#$%$ =;:758998777513566?;>B:67:?EM,/+'&%EBA>;973:?81.,,+,175+$E$)5CBCHDC>:<42;=34>A?BEJ+*J>5;;6*"'%,::3/*(.0)$$'(,)(.,'(/9BA4,)./&!',1./50/32.($ +32..1/*5=:525=$$A@DF/*13320+!'53.-/14-*)%#%(%  &.02553+#"!'154652&%,*+044459621.*0:/'-41-+''&" $,,%!,10+&'*--~)2:9;61)#',-+*)()('*)"$&%+./07A@5/,13.12+'%";>$'((#!&,,(!#&+250(&*+$GJ(4?6))(),(# %*..*& 58))&()')+)#(84-4>G=-)(#!$! ! !.-))+,-,,,0.+**,./000/,+---.-,-+)**,.+***)*+,&+++*(&%&&%&''%#! ЀʀȀā ½րºȽ€Հȿ¿¿¿¿Žɸ¹ĺȻـſþľ¹źȷľĚ½ؿױ޻¿ĿڀοȿԀ¾Ƿ³ǽ»Ŀ漊ڀŹµ􁃋üɰҼ˻ϏŬ儌Ѳ╠Ƿь˿ʦ¼̾Ȱ惚ñ˹ոƽĿŻž􈐞Ύ끃ƿ¿˾ʴijӼºżͯǪ׾炐쉖ۊɼĝ̄ +1ʿ73126::62026543211c`]^^_abcddccba`^]]_c2112e33ca]^``[YYXWTTVXXXYXWZ\]^^\XVWZ\\ZWVTTWYYZ[]^ZXXYZ\]]]^_010_]\]^^]\[\\]\]\[\^`ab_\Z[ZYXUQPSXVSSTVXYWUSUWWVTTTV[^^]YSOLKMNNLJJMRSONOQPPQOMKIIJLNRVYXUUVTTTSPONLLNRTTSQPQTQPROKLPRQNLMKJHFFHIGGHJJIJOPPQPPRTUY01``_][XVVUSTVUTUURPQRSSTUSRTYZVQNMOTWVTUUUSOLMLLOSUWY[\[ZZ[]][WVTRQSUSOPQTXVRQONLMMMOONLJIKOSrPMKKNMMNNOPNJFFMU\^[TPNMKFEKONPMKIHKOPNOQQONNOOLJHHKNNKHIIHHJLNPQPLJKKMMKHFHJJHIHJMPQRRTVUUUSLIMNMLKIHHJKIHGEEEHLKG:FFFHIIGFFFDDFFDDDEEDDCB@?=:649>BEEC@@AAABBBDECBAAABDGFCBBCBpCCEHIECBACDFIKMRWWSPNOMFDGKNPPOPOLKJIFDEGHJMOPRSSVUSSQNLKKJJJIGHOUSONPTVZ_dc^ZWVSPMLKKJJIJJKLLJHHIJKLLIIJHGHLNNNO4PPRVVW[__`a]XVUW[UNMLLLNPSSNIHGGHKOSUUVWVTUSNLMMLKJKM%LJJKLMMOPPPOOPQUZ\][VRQRTVZ[XYZVTRQTVWX[agg_[_h896a_363``c`WOOTZ\_a`__bb^^b_[\__[VUXYYUT]]VRTXVPOONQTTRQRTTVX^24cZRWYUSRRRQSVXWVZZUPNOTUQPPOLJHGJMKLMKKLKKIIGGIMMKNQSUVVVSOPW[YWVXZ[]^`c33342]XVY/100.-/027851110-./00/.XSSUV[^`1`23223236963456;?@<999=@>?A@<986679:::;=@DB9,'MJGGJRVWXVTSQICBDC>=DLVZ[\Z[.[[-.[XWNDEJGBCGHKMKDHNOMKNMHDHPSTWWSRUXXZ\_ZPJMTY^bfhd[SOLLQSOMOSWX\hnid`][Z[\[ZZYYY[_bcc`\WUVXYZZ\`ccc_[Z\acccbcfggfeda^\ZY[ZY]`^^_\WTRSKSTTTVXUTTSQQSPPVXWTRV\__^ZXZ[\]\XVVSOMLLJHGFJNLLMLMNOQSRONQQNKLJIJKJJKHGGGHIiLNNNOPOOPPNMLMLIHIKMLIINRRQQPPMLMLLOPOMJHFGJKIJLLKHGGHMMHEEFFEEDBAACBCC??DIKLNPOJIKNQY]VRNIEHKMKHGJORQNOPOQQPQRTWYYXZ`a\ZWOMMKJKNPQSUVVUSRRSY\YVTSRQRSPLNOOOPQSSSQOONNNMF=ENLMQSTYZY_dZCtq:eg;DPWSPKIMRQQPOLJJKOUVVXTQYba[[][YVUSRTTQOSX[\][Zbfed^^_]ZVQMT[_hjfjmihklmoqsttrqomnq;><;;;<<8654_O-:;<951.[YWQOTQQ[_]SQY_]\`a[QGGSWL>@B>?=u;;<9XMZ5A@{@BAypkrDICunqrk^TL?G,J?JJILNOOOPLO\^TJJNKHA@B@>AHLHDMSH@TBae[_hntrd]isgPBHWXMLPPU_loic`_\WOLMMJHF@AMZ`ecYTROPRQOMLHKRTW]]WSSW\]Y_kjZSTSRPLDG[aZZb]BiAOXZSLOQRVVTNS[VQWYROU^`UOSXTQKIKQRLKQUPPZ]RMMNNJJKKJKKIKNNTYSJDCFGEEC||{zxvz~~xCTQEEHIJKIC@{unjknqoorpd\^gnllnmegwsb_kqihr~XaZVZSGF|somgecb_[URWfjfb^XU[hkf_X_pqh`cfd]WTW`_YVQFyFJOfko|gajwppuhmotG}lmz|zlEl;>Makmg]MKURMGCDKPJJSZTX_`gogYTTMFWfnke_^baZSLOSQPQCB^tz{kfa_eighrGGB{ytiZRV]_dfedfe`de^VRJMVZafhb[RJIJLSVQLLMNTZ`giheZOIFNdpiZYUUYUWW]cagoohda^_aNB_C~tppdRF>AHFCEFGIECHNU[VICLUWQGCJSPNSTPJE=CMJJLJMODpLu|gZUY_[\ceWFzm>GFEE@GTY]ZQQSPMS`bVNQRKuuDKSTMLKLPLE?:GTYUHCH?S]ALQSQLKIC<;?KK=>QkobZVVWWMMQLQ[/30<,C/2.,-ZY][[2GA87788999:;;BMJ?<<;9875334665579;=??<987644557998872`v25665434553a\c6753baaa`adfe`XVZ]__ag5f]\_bdeddc]XX]cg565344543223321121`2344c_b43bba][\^\XVWZ\[XWURNLIBAHNSZ[ZYZ[.1345  -,***+,,-.8-+*(('(,,,+)())'&'&'''&%%&()(('&')*+,+)&&())('&$$&'('&%&%&'()+*)**)((''(x*+,..-+*)(((&$#%''%%%'(((&%&''%%&&(+,*)&$#""$%%$##$&&%%&&$%&$#! !"#%(*)()*))*)%$##$%'''&%$%'&&'&#$&&%#"##! !""!!"#"!"$%$%%(*).'&&'&'(('''&%%$$%&'&&(,-*&##$')(&&''&$###$%')+,-..+)'%$$&('$%&(*(%$#" !"C! !$&%%%$" ""#%&''&# #'*,*&$#"!!###"! !%$#%''%$#$#"! "$#! !!"5#$%#!!"#$#!  ""!"! !#%%%&''())$"$%$#"!!!#$""! !#&%"!"###" !    "!5!! !"#'(%#"$" #$%%$&%##"!!!"""$&&&('%&%#"! $((%$%&(*.11.,*(&%##"""!"#$#! !"##!!"! !#$#$%%&(+,-1566740-+,/+%$$###%'&# l!"$'(()))'('#"###"!!"$%%$###$##$#$%%&&&(+,,+(%$$$&(*()+*)(')**)(((),00-+-3-,++-,($%)++-..--//-,..,,--+)f*'',+&$'**&%$#%''&&'('((*,'#&*(&&''&'()('**'$##%&$#$#"! "%###""##"!! "$$##%'()))'$$)+*)()+,-,+++,.&(&%'(&&&'+---     !! "!!!!#$$&$!$&&""&$"%'+,))+,+,-0.)%%)-03453.+(''*V+)((*+,/58631.---.//...--03531/-+,--..024441/.04554457988875310/0/.142111.-,---.-/20.-,)(,.-+)+.00/-,--.//-++*('+&%%&('&'&&&'())'&'('&''&&&%%''&%%%&&%%&'())*k)'&%%%$$%&('&%'**))((&%&&&())'%#"#%'&%&&%#!!"%%"!!""!"!  ! "$%%%&&#"#%(.0*'&$"$&&%#!#&))&'))('')('()*+,02/-+'%%%&')*++-.,+* .0/,+*)(*+)'h())**)'&&'))&"')'),,,///25/!4422 (+('$"%('''&%$$%')**+)(-32,-0/,***)+,*)+,-.0./48763/00/-((.25<;5676689::9888779(!%$# #!"'(&! %'%%('#"$# ;)$)()&(+-//2;ClG]:51+).0--.//,,-057550(',,+.10+((+,+,./1.)(),.-,-1675200-& ++*+,-O,.138?DFGB<855677555420.+'&(%$$&&%$#$'*))*-5;!!67;><=BC><>@CC?>>=;:=??=;8A9<=>BFD?<:9;=A"%$#%()(*&8887:==<<;<=>AA?<;<DL(&GCC#"@><:648>@@ ?=>@"$&'&$#"%'&D;83,*.58:;;>@ @"),('('%&(l(&$B?@"&((K?;B#"&*($FIKGA>@BN1553/*%B@BDB>=BECDHHB;7875430--,+/7?GC=;8:>;777579:;==;975788:;:::;>?;8==;::;<=<:88:<<;;=>@BB=:;@D@616;<610//7A=30130($-30,-37::521,%!"()*-1:?6($'*-)#"!''$$%%"!$')***&"!#)-.-'!A$'%$##(,)'#"!"%%#$')('!; ";6; =:!!@"%$HE@:6:%*&?9992(!# &%%&()()*')24-&%((($"$# "# #'!$35-.47:90,4<6'!+-&%))-39:730/.*%#$$#" d%.132+''%&(''&%$%)*-00,))+.0-199.**++*("&461197%4 *12-()+)+-,'*/,)+-($(./($')(&#"$),'%)+''./($%&%##%[&$%))+.*$ "$##"BABBC@=?BC>",* #$%'&" ?<9669=<<;<;46B@309<66>HFI282/2.&%D@@BHE;86430-,/8:631.+.6852.2=<636750,*-3310.'C')-=>>GLB86799;J'C66@CB:"6 !'2774.%%-,*%#$),((-0),236:5.,/*%18;83/1330,)*.,,-%#4ABHE;84134117B&% ;;82*%'+-01/.031+)%&+,05961,'&%&**&%$$%(+.0464,%# %4:6-,)(,)*),0/276221/02( 0B!<8794*#"'&#%&')'%')+0-$#)/0+$"'.*(++)&#"*&%('(*"9+DG7-*-0.1L88/%=5!'&%%!&.12/**,(&+34,'+-(:;#&+,&$##'&!#+/,$!$ %+ &()(%%%!&&)9;2.,&%' #"$##!@*+)++++***-.-+''*,--.2/**,./..-,*''*-//),*-,,+(''('&%&'('%%$#!""! !"ˀԀ򀉁܀~~ځƁĀр ÿýÿ¾ſľrĴ¿ǽľþºþƿa½ÄĀټǼŽǾļ̿̿ˀ˽ǻ½Ӷ݊˴݋ýļէ¹ˀ󃏛ǸʹùŻ͵ƾδ෱ГŦ¾ýրоóöĻ·üƹŹýŵĹüϿ߂ĽɿַµƼƹ兎׷홽愧􄍕a;H0023576532347840_abbb^\^a1245420]\]^``a__^`c2210/00__`_^]\[YXXXYZXVVVWX[]\]^^\\[\]\[\[WY][\__]\\\^_12ceeb]\]__^_``_]_bccca^]_``_^\\[YWTTVX[\^_\YXXWTTVWWXYZ[XTQPQRRRSQOOLKNPSPLIGHIIKNQQRWZYUSRSSRRQOOPPQRSTSROLMNOONLKLKIJJIHIKMO!PONOQPOOOSVXXZ_`]YX\01_[WSQOMKJNQR PPRRSSSRPOPRRPMJHKMMMLLMMMOSUTUWYWSOPTUUTSSRRUY[]ZTNKLMNMNNNQRQONNOPOMOUXXSLJJJHIJKMOPNLHFGKOSSQMHFINUUPMJIIKMNLKNQPOPRPMLNNNMKKJJKKJHFIMPSVXTOLJJJKKJJLMKIKOSWWSRQNLFA?>EKLLMKJKKIHGFEEEHIGFFGHGGIHGHLPTSPNLIGFFDBBDFGHGEEEDEEDCCDFEDCCFKQSOIDCDEDDDEEEGIGDDDBCEHLQVXWTQONKGDCFIKKHECBABDGHFDEDFMRUWUSPNKKLKLPMHGINQPLFEJNQRSTTRQQRQPPOONMLLMMKJJJIHIIHIJMPSRRUWVWYWUUUTSTVYXVVZZTSTWWUQPOOQTTRPMLLKKKJKNONORQQRQMJIJLLLMOQRQPONLKLMNMKKJKMPSXZYWUTSRTWXVTUUUWYZ]`_]\^a^WX\beeca\YWVTQPSW\^^^\^][ZVUZ][WQQVZXTSX[WQMMNNRTSRUYXVU[^_``23aWSWXWXWVUTTVXWYZYVUUVYTHEGIGB>>CFGHHHJLMMMLLMMKJJMPRRSVWWXVUTRSX]`^\\^^]^1574a^\[[[Z-/2/XUSUY[\\.-XXY-+WSOOSW^340]0356743320/1333213668;;:9:;;98887#89;>@B;/&EFKONMMG:7AKKGIKHLT/221...-I..\XVUSQQMGBFJLLMLMORSPWVOLKKHHMSSSUWXZ\_`[UPRX[Y[\ZWTQQOOQOMNPSW_h77ke`\[YVVWUUY\]]ZZZXVVYZZYZ\]^\Z[_ehgdbfiihgfb^]]\[[YZ]]^`a_ZVTUX[XWVTRQSVXVSPPQRUWY\^]\[ZZZXWWVUWWTPONMJGDCEGIMMLLMMPSTRPPPNMMLLMLIKK HGGFGHHHJNMLMNOONNMKKKMLLMMMOQPPPOPOMLMONMKLNONMOPNLJIIJKIGGHHFEGECEGE@>??@DIJJKLJFHKMQZ\YYTOLKKKLJJLQXUMKNOPPQSQOOPRVYYWX^a__]WRPPOPSVVVYXSQRRSTW[ZXZZVRSRONONOPQQRQPPNKJKNOLGIGDIKKLNORX`bXLGFB>@KWVPKJNSSQQMKLJIJJJNQSPLRafache]VSY[ZYWUVWZ^_\Z_c]]c^ZZVQLQY[`mm]\dhinr;=y=>>@?z?DFCFMRNFKJwnbUMIF9OUw^KAR[ZYSTTRVdskedYRVbd_\[YSMLS_ZXUNOVURUapmc^ad^XNPUSPLNQQPUZ]`Y[ipmhc^\cd__tGNJHp^SID?>EII?rjoMciec\QKKNNLMT[YXYURQV[SKVd\LIMJDFVYRQW[[YUSOG@ED?ACCHLEHOX^XKK]eXY]XSQOK>f?X[QHIOVWHGKAAB=aTsUc_RTYUVLCGNPHDIPSSQP\d_YTLMV[.35[KN[0/TINVVW]478876667779<>@B?<=<:986543467532114:>;6688301357899830a35641146664ac4664da__acfgd_ZWXZ]ae4992\WYaddabc]XY\`cg5443332533211abcddaaabcda_aa_^_^][XZ\[YXWWX^dUNOJGKMNRWXY\[\/=*,---+**,)(()*++*)()***,+*)((('('%%%&')+++*))***+***(N&'(&'))((('((()*,-,*'')+*))**)(+./00/-,+,,-,,,+)'&%&&)*++*'&'&%&'()***+)'%%&(&%&$$&'(&#! !! !$&&')**)Z((&$%&&&'(((&$#$$%&$""$"!""!!"$%&''&&'&%$%(*)((++*('))(&%$##"!#&&&%%%$#$$%%&%$#%&&$#""#$#%'(''(**)))(&$%&&&%M(+,-+'$"""###"!###"""$%#"$()($  !!"##$&(&#  "%''%#!&&#!  "##"!$'&&'''$#$b#""#$%$! "$%'(&#""!""!!"#$" !"%((%%%$# "##$#"##"! !!#$##"!!""#"!!  "$%&$#"!  !"!!\!$()'"  !  "%''&$"!! "##! ! "$%''(('%##"#$$%(%!!"$&%# #%%%''&%$#""#$###"! ""!""$&(''()(()((*,.///11-**+,+)'&%&'''%#"#"#$%$%''&'&$"!"$#"#$&'&&%%$$$%%$".#%'*,+)'&%%&'''()))()*)**+,--+*+-+'(*/10.-./-*'<%%'*+,,,*)**,,+*''*,+(%%(+*'%(*(%#$%%''&&(+*((+,,+*+&%()()()*)*+)' )& !  !"##$##"6!"$&&&')*+*)))'&)-.,*)**)*-*)))*)'$"#&'''%%&#%#!#&(,*" !"! !"? !#$$%%&&(('*(%#" #'()*+++-//-)(*---./-+*))(()(''(),15520.-+,,++-/11/..-++,-.-./02587435888764101)00111232/-,,/2321/-,,.0/,++))+-.///./...,*++*(('''%$""#%'&')*)(' &')(&'(&%%%&((())(A''&''&%%&&&'(()***)()('&')((('%%%&''&''%$##%&&$""$$"!"" !"!"%&$""$&(,-++*'&%9$#$'++'&()))())'''(*--,,020/.+('(()+-,,--))**++,---..,)++)*)()(&%&(*(%''$&'')*+,.01,&#!#*)&#$%'&%&%#%$#%&%&()'$)2412650*'-00/.,,,./0/045//61--,(&+016=9//3569;= 96678911#'$&%$"#$#"! !'+)('&&""*&" ""$""!,'# $#('')/467<=@ABB<9899:>DDA?;779;;:<=?A@<9:?DCA@CGGG$&'())'#  >>==:).CB@A=86659>?<989;=<963346766520137999658;;99<=<<<:5356775343455630047788779;@CCB?<:88;==<979961-)$  !'-13786424643554589640/1139:76:@GMMF=2.-*&GI'()+++--+&$)*))*,..,.01245551/00/-'&(")($"#"#%$GIS0566653.*+(%2:;<=>BEGJ%!:69;>B@;9:<==>!#$&&%FB>98:=??>>>=7/,+--)'(1;@C"C=<"')(%$%&FE$$$%%'))&$EB>:@IFC$$EFJIFA<:;>H)+..,PN*,+MA9:CGA?@=7200.+,3<=?A=5-.464001/-040)&(+(%(+-/032' &*($$%')#! *(+2320,'%''&$###"$**&'('##&(()(%"""$'***'%'($"#$%),+&"%'$%$""&'$  79 >!%'&(,0-LDE%''GA=7-$"#'$%(''')-297+'),+&*660--& %)$(#3732369720=34/*').--481,2@B6/01/*'$#"""##"$*0584.&###%&&#"+1++/-+*+,,*))+;,---(!@,4311*!!),//0.*)02,)),+''+--**,+'%&'%%%#$%# !''$',/+%$$$%&&%#$"$)01+#! "%B= !>;>::;;=BCBB?;:86:<4.05;=602:<:8=I&(-.-44'%$=%.*C86743221.*),/.,35.((2<:56>C?:7;@<0,-1540+**$%)).48AJB65;GQQC7@:.'%DGMMK<'!6GDEU23310///.-..---YYXYZZZWSPOMMQRRSQOPSUYZWTQMLHBAHNRUUSTY^[ZVSX]]YY[XQQSUTRRRPPRUY_fk7kb__a_]]YURQNMPTXZZ[ZXWY[[YYZ[]__`acefda``__^[ZZZ[[Z[\\\[[^_\YURRUXVQKKNPQVZ[[\ZURV[`a][[^]XYZSFIW[ZWSQLIJHECDDFIJKLMNNPQSSPMMOMJIKNLJBMMGFMRTRPPNMMHGJNNMMLIFLUZ\`cdeZRWZZVTUWY^_ZTW[WF>Raf`TKGS\Y]ec\^fklos:<;f[SC:>C\AMOLIHKPSS[k|IwYY]YROIGIEAGOSVZ\^bnvj\_d^X[ZYYUPQVTNJGFCCDAAFJMT[]XVYVOtNU]^ZX_inoeYUTSMKQV^juzytnlkhht{pd_\^_]XY]/10[Z[[ZVX\XZev~}GIGKOJE~wrv|~yurqty{uoookjljiku|tnpokinsy~HJKHB@BCA}tqrnmomox}@DGExspkiknqtvuog`_dffefhkjhf^YY`jnlgdcaba^\YXZ^acebabcbba^YVW\bdbacdgnuzzvspljkllhbacfiifb]VSVPLKJGHKQYbhf_XW]a`chjmnmkmqole^[[[_jxribZUROKLNNNKLPMINXXTUWYZUOOPQU[__`__b_]^\XWSTVTGDSYXWWVUZ_cdeaZX[]\WRPSX]ipquxz|~DFLPQKGKQOGAynjms=@BDEzpgec]WRQXdnsvvspi\QJHHHJMNWent}A~ELLGC|rsoltvwz@CDC|tnrvx~FFKPKw{SSKGPTQsnrwtrqkaX\jkjlomlnoyyryuiaZWY\Z^b`a_ZRIOYWSSUSPSX`e`\\\XW]fkifeggfikfb`^Y]r}{vlf`TT\XVZZXQJS^]^ce`][VQV```_^XFZYGPQb7jcZTL<75/UT*+/47:=>SBNNYltrpgWNNKHHEBHRYXVUVUSQMLNONJHIJJILPQSRMKMHELORVUQOMMH}uz>zs>FHGHE@?zpoyz{DIEz{JKHycckgWKLMLH/BR7R`TJINU[`[ROORUWbqgWY`[Y_dYNMPQbD]pof^\bgb\\_]UNKQ[cfea[[^a__cgaTMJIJNQTURWchghhaSKKKOSTNNZ]URURNONIFLRNKRXUQLD~L[]VRROMRW]`jwn\^aZVURLGGMSWUW\ZUQMHLPLFDGEBACFHLQWZRLMMLLJILQQKEAEKP]`P@m;FSK~?A~@CGGFIHDEFGDCDBzvts{}wstkcdpx_SXfxrkrqmntGGHIIKTRKKLHHRM{qpmnofadaWQTVVW]c\TZc{}{LRL~sha^]_]SJIXVIFIP^jibbiqkdn}zwtcSRfxpike^_s_xbeqHPS_keIHODDFkJWyObkkf]ZY]ca[UbpmbZWVTH?DLPPXb_SSUMIZgieeir|?n^e2VF;L{xbZWWRLLKD>@JY]YZ[[^``\\_eZDDIWZSUVZZNBJ^b_XNR[Y`mnh`VQQSWXSRUW[ebVUi}tacj^n|m_YTKE=uEML=j=EYjmdc`VOMNPLJRgwtgTJWjuxqfUIHIKLKQUSNKX]QIPPDD@=>:osz<@@ISIOWMHHOTTUYYNGE=fjDQSRUSRRD<>DJMIBCDADBtBLEJPSVSNH0@?EGFMWTW[MDHMLGHJHPWY,./TS][XVTUWUYd67766677667: <=>><988655676P4113552/05631246788763ba3552`b37975c14665ea`bdf4hc__^ZUUY]b475[CG[acaafe_[[\^`c2322246653cddcbdecaaa__``bda^][[[ZZ^_^]ZWWZ^]Z[][SLKKJMNO!$,,)*,,)&%'))''(''(*+,,*()*)&/'(++*)*++)*++*,%###&'(())++)(*+.++*))(#*.0/--,++,*))'''&&''()*+,-,*(((&&(*+,,+*)())*))+*(&$#" #&'%%%$%)+)('&&%#$'('&7%#"!"#$$$#!  !""#&(+-,-//0131..--,+*)''(**(%$#""#&&%$# +$$$##%'('&$&&$%&%$#"#%&%$%%$$$#!"$$#"!#%')++*)'&'&%#!!!#%%$##"!"! a"#"! !#$##"""  !"!!"#"#"!""#%%" "$(*))(%#"##! ! !"#$%%$!  !"""!""#$$%&)+*(('&$#$&%&&%$#""! !#%$$#"!"/!"#$$! !#"! !"!  ! !!"!!!"$&&#""!O"$&%$#" #'(&#"#&%" !! !!"!!! !#%&# !  "###$$! !$&$! ! "%&&% #"#%%$$##"L!! "#$&()(')+,,*((()*()-.+(*,+('(**('&&'*+))'%&('&%%&&&%')(&&$#"#%'(''((('&'''(&#$''&'''()('((&%'*-.-,*..+((*.0100/..0100/.,++,+**)+4*)*)()*+,*)))**('(*)'&%&&')(''())(*-..*(**(&'-.,++)(6'(*)((''('  !#$%$%$"""$()('&%$$""$&&'++))*+*),//-+*)**+*)))''&*&%" &,* !   !!!"!!"""#%*$$%()+,+)'##!!%(**((,/-,+),.-+,.,'()*)()*Q-03540/010..,)'('')+./00/.-,...-./123345565433220--//..023210/11/,,++-/.,''+,,-/06-*,.120.-01-,-)).,+)'%$%%$#"##$&&''((()++)&'))&%&('&%&'/(('&&&'()*+*)**()*)))'&',,*)(**'&&'&&'((&&&'&$$%I&%$###""!""! !"! !!"#$"!%'&&''(**'%$&&&%#%'))'&())+*+-*('()+,,-010020++,--,,,*,,*+./14/)()((*))(&'))('()''(('&#"&(),-/0.)&!$%""&()'%&&'&""&('%&&#"&*+-0123-)+./-,,,-//+(,/+ $.30)$$-30364/14679;!"#!756'#$()''&"$%! '*(&%! %)+,'$$" "#6,&$(#$&(),146B><@#%%(*'#BA>:<@BCB@>;;>DD@;;<978889?E@;<;658=ADHGFJKJHIK''&%&&$  ;77:88<:;BEEEDB!$&%E?<;9679;=??<723687679::9830.29><;97655432001224422333442/./26632457;?ABA@><::98757888973-(''" "&.4763003657:;=<:;>BB@<64336=FNUXWRG:3.*''&$$%%$!#&#"'.,*-1452./0235655324420-**'%&$"&%$##%(,./0.,,-/,)% !&,38<@AAADF$$'((%#&+,'$A967: !?<6100.+*+1:ACCCBA=5-(%&&')*09>@D#C>"')'#DA==:7;=>?"$$#D@<89;=BFH%&FDK+.*E<<6+%%$"#" "(--,+,,+*('')(%#$&&&'))++('($!%(),+)''(%>:= ?;#%$$";66=B@@F%MP)(FDD@@F''&?1041' $0)1+$$',140(%%%''1;6+)*%""$!'-883.-230,,--*%#'.4752--131013/'#"!"%'*+(*254662(###&*+&'/0*)**)*)%#',)&),,-.-+'">(22-**('(+/17?8-02-+*)&"#'+-*+..)'%"$C&$ !! "$%&(+,($%&'&%%&))&" !%(13(4 #+$; B@ "$#!##!!"#!!"!CB=DEB@A;54;ID2*.7AF=7;<::;B%%$%$$++&&'$$,)=776782021+)-.--272,.4DOFFLP+.*JB:3/..12,(&10&%'+3:8338>:5;C@>?7+*7OQEA>9:611>J6?58<'*,6=8$$,$BA%'9$+?+79861/.1540,2:93/...("$),+073++-)%,58657;?3&(! ;9,'&&!*..//./01//15/"!$-.)**,-&#01.+(,303::4/+)*+-,)()*-21,,7GNHA@<..4-7A90.,(& =&+,"7!'2=<333,)()+)&- $$(-'*/'#%*--/20(%&"35%.-**'%&#')&!!6"!"!7 '$&(*,*)%$%$(/--.$"  #"!! !! $)U+*++,/+++,./,,--+(()+-(),-,,.-*)()*+-7-..-+,,++,,+***,,++*)))()**))(&&'+*()+)#πĀ䀃ۀҁɁ݀ ¼׀ĿýȿĿɽ쀆ɺ̽Ļ̀ȺýIž„¿żĹɾºɷ􀂀Ҽ¸덨ȇȷӾDz0߄ހĻſӾ􁆌ļµȾȿþʴπƻʺѭ皪ɍö脎༨ֆĨ3żPɲ¸ȻƽĿӹʸѠҾǷɸ큛ʾƨĿľпֶμź򊠗ѾԵ뉢tVPNLKPWYXY]^].0/0235764343233115973000121`\TSX\\\_0/_01b_\]_`bca_^\ZY[[\_cec^]adcb``__a121'0a``abccbbcceg4ifa^^`bdcba_^___^`a^\]^\Y XXYWWY[\\[YXWVrXYWUTUXYYZYWVTPOSXXWUOKLNNNMMNLLPUXWVUUTQSSQQQOPRQOMLNPQPNLLKKJHHJMMKJIILPTZ^`aadca`_][]^ZUV\]ZWSQTTOKIIKNRRNKLOQPO\PPPQRQONNMMPSUUUVX\\ZWTSTTPNNOQOKILNONMMPQMKKNONMPTTRPOPPNJHGIKJIIJIHIJJKMMHCEGFCABGMLHFFFHHF$GJKLMMMLIIMPNIGJLMOPQRPKHGGGHLPQSSSTU +TQMJIHHFFGJLQTUUVUUUTRSTVRRRPNLKKLNOOLLML)MNNNPQRQPMIFFGHIKLJKKJJJKKKJKMOPKEDEEDEFGHILLKKLNNLKJJJKNNKIGGGFGHIIGJS[]\XUSQPPNJGFFHHGGHHHIIHHJMQSROLJJKKJHFFHHFEFFFGGFFDDGJMMOPPONMKKKIIJKKLNOPNLKJKKKLKKNRTVXYZ[\^\ZXVTTSRRS RPOOQSUVVVSQRSQPRWYVUUQOQRPQQPNLMNONORTUUVWWVTSSSRSSRRSTTTUYZUPOQTUX\^][XVVWY^e55e``ejni``eggfdb_^_agn7jea^][YZ\\Z\cdb``^ZUTUXYXZ\^_\YYWUUTU"USTTSSTWYYVTQPT[]]][ZZYWVW[]\][VSSUEVVSQTVTPMOLGIOPNNQRSSSTROOSVVTRPOPRUTSVWSQSVVWW[`_^01/ZUPPTXZ[..ZVUW[/_011135530/---WVWVUXYW[1334568654310/./0122123557753568;;:99:<<:99:;=?;3+''MHGHGCDHHK)+,--,VV+,,-hYYYWWXWWVVXZZYYXXYVQNNPWWTTRKFGGEHNSVVSSW^_][VY``\[]^YVXXXWSRSTTTX]cca`__acdc`YRKHFHMSVWWWYZXVY\^__][[\^`^]\YSKN\_YWWX\_ceda^\YYZZYVRNJHMPSWY\]]][[\]^_]ZX[]ZWXXOJSZZYWSOIECBDGIFEGIIKMNNMNNMKLNMJHHIJJHGHIHHIIHIIJJJIJLLKKLNQOLOPPTTSQPMKLMLKMPSRNMOQPPRQNNRUTQNMN.LJIJJHGGHHGFFDCCDFFDDDC@AEGGFJOPMNNOOPPNLLOQQPQPMKJKMNLQUTSSTWXUTWZ]`aa\WWYWTTSRSSSRTWUVYY\d^UQPOOSUSPPPONLLMMNNMNJDHNMMMKMOPQTY[YVSOJEA@DIJLQPKGGKPRLDDOSMIJMLMQRSUVTRPPRSUXXVWWWX\YPSWTMFM[hhZOQ[^]_dedfmt<<;utuvxy=<;:::;<><5_YZYWW[a]Z0_WWWLB8-@Y\ZUMHHPX^ZNINNOPOKIJIFE9^g874485fcXRV^:HJFHHED?aYAjHdY\_\UNKIGEINOR]c`]]`]UUX[`_YY[[WRQTROMKIFGHEEFJQXYXWXUMHMSSTUV^hgYPMOVWPJIMXdmppooomjntrhZQPTZ\/1100/./^][WTMEFUcccgkmouwtyzuvy{ysmpw{tnr{zvrosuuqg`abfotsty|rmnxGGGHJIHGFDA{wuuuxFJMNKBsikppnmlmou|}yrlkkkiknppkfb^\_dfdcb_]ZVWZZ\_^\\]^`abcbcc]XY[_deellgintutuuqmjebabeea_fqrlgec^YUSRRPOTZ]adegkouzyqjilpttoiddgnxJMPQOID?9545ibUJFHKNMNQSNGIPSVQMKKMNQSW\_bca_[Y\bb`a`XW^b`^]\[\\^aaacdh8@>@[GTSVamqneWNMKLKFIRVTUZXSPLIEDDEGGHIKMPSPIIMMPPLNKFCvssnipw=DJLEws}CINRSJqlmr{zvpmpx{sd_lKlbVMF.)2?`aXXZZTNNKGHLNJEGJKS\497dWDABBDFIJIJQVQKLMLLIDEPTUTJGIJOVSG>AF@=?GRRICCBCCDD}x?ACGKLKJD@~ytolnsqmosvyohebgkmknuxz~w{LJHHJMLJLQKHHzpmjlmjeba^VPHGMSbf[^fxHJG{vvskfc`[SMPPHBI\q~iejke]bty~ubRP\r{lb^^_[X]qqQsZ`{OQN\h^SGw`XhhgnvHOW^^X[lsh]RVq{oeZSWXHn=MWTOS^icIkEeo]Uairuojfd_WK@Mk:h^VWUMMKDACDG>fuZxoaa`alo`TROOOHJPUUTY^[VUYQEDOW[bisxi]\[RKSZ[eqgTPXiy}wwpbZZ]]UY]MEB@EDJaq^>GNWele^[ZVRMGFOWYVVZdhgi`OLLKPTTVSPSXYSOMJFCEGFDB@CLF;mAMHNXZSLR_\ORfj_RGA?@BCHQ[f`LB=;N@DEB=:8;BGQR>c;ISUJA??opJROJP`\URMIDBEHKOURLQYY^^WRTWY[a245324788778999;>???<8765444334565201255335778\6212564b^`58641058863b`be56fa`a_[USTW_eggbXX\_abbefb^]]\]`bcd3343346543eef4555432c]YX\011^]^\^_^^][X Y\\XXYWTQONMO #$""###*'$#')F))(&'(()**))(&&())*,-,)),.-,,+))*)**,--.,,--.010-***++*) +--,..,+**)( ''&&&'())((&')++)))*,,,+))(%$')))'$"#$""%'((''(''(('&('&$$%'''%$#"#""!#%%$#""#%(+./0011/.-+)**'$%)*(&%%'(%"""#&((%#"$%$$##$%&&')(&%%$$'*++*)+-.,)'&'&#""#$$""$%%%##$$! "$#"$'('%$%$#  ! !!""!!" ! "%$! !""#" !$#!#$%'('#! !#%&&'((('%"  !""!"!"%'&'((''()'&'%$#"#$$%%$$%$##$$$%%&&%#  !!"#""" !"#%%": !!"""#$#""!##! !!##"!  $)*)('&%$$#! !! !!! !"$%%$" ! !!! !!"##"! !#%$$%$##"!!!"""$$$#""#"!#%&'()*)('&%$%%%&'(('&%$&()*('&&&''%$%()'((&$&'&'('&%%&'&&(*).('''&''&&'(((),-)%$%&'),-,+)(()+-00,,/241,,/10..-.1530.,,*()+++,/0.--,*('()+},-+)))((())(()('')))&%#$'+,++*)*)))()**+*(&'((''((&%&'%"!"! #%$%'''&%%$"#&()'&%%&'('&()'&(**)(+.-+)&##%'(('&%&)%%$&&%(*(+   ( "###$#%&#""#&**'))%""!!"%'))'(+//.+),0/-3++,,-,*)*++*,/1110//12320,(%##$)-...-/0.+,.011100145[320/,'&.30-/0256764220.000.+*)(*++-/0001/../00/-,.0.+,,(%),--,*'%#!"#$&%"#%&'(('&'''&&''&%%&$%&&%&''&-''&''&&'(+)'(((+,*)(&%%''&')++(&')('()'(+,+)(&%%$%$$##"D!!"#$#""!! "$#"$&&%&&'''('%%'()''(''('&%&(('*-,+*+,,*)+.//0/-+,-,*)*)))*,+,-,/50+))(')+*(((''&&'&'$!'%%&%&'(),//.+*'!#%&(&""&'$'*&#%&&'()*+,,)&')*+---,,++.,&(,*&"&-44,'+121233126;<<<=??($$$"!#&$#%!!#D$&&$! %),( !!!"!05+(#!#&!##'+-1-C<-J^/O8//0-(%&)**-5975673/0136411341-,.,++*)' */221.,*%$(,%.4;:0)(+01+((+2:??>;::858:80'! !$%%%$$%&$%/643589:>?=?BC@=>@A@<9:>DFC>;=CEB?=;=>?>72336=?>?CHLLJE?::@GGCCF###$&%$###"?===?BEFG$&))(#=78<<::99:=CDB=989869;<<9641025776651/./00120./0123444540--/24459:77;>?>>=<:87579;9635<>941/*&"!"##$)/146889:>AB><>ABEC>:768===>?>>? #$#!""B@>?BD#"?942220+(),.07<=;61-'%&())')*)2;@GHDD%&%#DB?@A?=BB>>?@B#$GDCA@==A"$''HGIGB<9;@D@87:=?CDCCDHIC<98654543/.@,./+*++&"#!"!!$!)(*1:=;4+%$$%$!"(,+*--*(&$"""$%$%&&&)+)##&&)(&'%"!@<::75:<"&'&&&#<9?"&)-/(D<98:?@?<;=@@9/,5F(F3+#!66.-020,)&! !!##(960/2873..31+''+/0./55,(,05==0# #)--,-/5855652-)'&(*)%)0/,/60$'++))+**/35760+("%,+*)))'(*-/4<8,,.,,+)'%$'+,)(**'%%$#&$ "$&&%%)+'"$&&&%!"(***##$$'+ )!"$,+$"###?: "%%$$!><;:8:=<9:<=?:7635799:>=>@BA>AEL('%$%'%$&+'B%&?9767863231,)%%'+68015A*TTWPR+'D?=<943331-*-,'"'3@MF858:713=BE?3*)1BG;30130-1@B-@58HN.-)3<4-'?3/;>99=G&+/21,-7;50)+;B:4.+/0&6*1.)+175&0 6<0+26:;73/-*& #4-& !!!:=.?7/0019=3+*(('!"&+,*,/.**,)"$*./37>@5.-.)%*/.3;4(&-:EFE?::6.)+/.*.3)#! %%*:E6B%*/8;5/..-+($%,34/./56693)')(+-+,+)+/0-*)'&#$%#"! "($4")$'..*&)21(*7:3,&#!!"!$).2-"!##!"%++,$++# 99&,)%(0*$!!#$&&!!$';,*,.,,..+,--+(&&(-///-(()*+,,..,***()+++,/.. +,)'')+**))***)'&%&''(++(''&$#"! 򀂁߀ဈȀ~΀ ļπ¼Ŀ¾¾킈񁈋􀅇ĽƶCȾķҀþÿƽ­ü½ÿº܀κϷ卫»ƭ܍β¿㺟żžǀ¾ۖŴȶɻǿ³ķĹôʻĹߋ握Ľ☫ÿ삇ѻ̟ºЙ۠аïн惍ֽɼȸǰ̷̼끕箴ۼǺ̺ϋ̼±ɮɹѲͽӹϼꓲُȶۀǹ샂91TUTOLKGDHQWVUY\^^//011/..04741122212201442^ZYZXUWZm[[ZY[\^bfc`^]ZYZZZ]`cb_\\^abcca``^^0024443ccecaab32`^_d3eeffda]Z[]]\]02110a2fcab_^\YXWUSQSX[]^__^[ZZXVUUUTTUTUiWY[YVRNMPV[[XVSPNNOTVUWZ\ZTNJJLNQQPQRUVUTRPMMOPPOKHHHIKJIJKMPMMRUVWXYZ]\WUW[^^a`_^[WSSTQMJKMPSUVVWVSPNNOOPQSVWVUTUWVUW\ah675e^ZXTNNPMLLMNMKGDFFDGLMKHFHKOTWXWURNLMLMMLKHCBEHIJJKNNIFGHIHFED=;<=@FHFCBCDEFFFGKJKJMPRSQOMK?MOPPNLMPTXYYYXXXVTPNMONMLMLIGGHIHGFGHILNNMMNMMOOOQUVPMLJJKKLMKKMLKKJIIKOQPPONMKMPQNLOQQQRSPKJKJHGIKNRSQPPPORSROLKJKLQTSQPRSOJIJJIIKLJHIFDFGIFDEMX\\aec\VRQMIHJLKIJNONNPOMKMSUSNJIKOQOMIFHIJMMLJHILLNNMORQONKJHGHJKJKLKJKJJJKJKKKMNOPSVXYZ[]//.[XVTVVURQMLLLNTORVVTSRRPPQPQSSQPQRRSWXXZ[WSQROJGHKKJMUXWVUVVTSSSRRRQPQQPOQUWWUVVWWX\`^ZZXROSY`ddce57lfeigefedefc`g:=<9jgc`_bb\[``^``^[VRRUWYYXWWVSRRSRQRTSRQQUWX\ZTQOPRTWZ]`b^][WVVWWWZ^]XWZYVTTUTRRQQQRVVNKNQRPQSWZYXVQNNT][USPOSUWZYVUUTUYZZ\^_`11\VQJHQ`d`__ZUSQU.231//./22002320...-.-WWUTSRV-/0/011234779:63230/012356533359;=<:988;=;8778:<><3*&GDBCJQTQOSSMJKJKNQT+,-.-YXXWWWXXWVSUYZ]a\VSSRTVPNTPEACIMOTVUVVX]_^[WX]^^abbb_]]^\XSONOQUXZ\[ZZ\`cc`[ULEEHLORSSTWZYYY[_a`[WTUYYWWWXYXZ[XTTWWUWZ]^bddc^\ZWVZ[XTQSUUVY[[]_\YXY[][YZ[\[Y[[YWXWWXYVRPJ>8;@KSJACGIKLLJJKMMLMNMIIHHIJIHJLKGFFGGFFFGGIKKLNPSTONMMOQRQQQLHKONLLNOONMNNNQTQPRTVXVSQQSPLL KJIGFGHHGHJHEFECDEEGLPOOONMNNOPNLMPTVXXSPQSRMHGHGGJMRVYX[^YTSVY\_^ZXZ]YUSTUTSSRSQOQTUX\]bc\VROMJNSQNPQPPNNNJJMOTL:qqrrqmos;<>?>7h`dd`]_342221\\^XM@BLPROD3N1@LQLFFMSSQJFINKF?d^g78669@FEA=<:99=GLGGHAc=?%GSv~QtSRWWK9=NQQQRQNLOPPSYZRQRNPVYWWYUNGINOPRRSQOLJHGLSUQHDNVVWWUROLJMOQRQQSXYVPOW`egkrwxvrljt=l]]]XV[1553221XEFb5`QFDFGMUVX\_^[aintyxwtmhekwCB}~}~}ytuxvsurqw~yqmpw{xwyzxvstyAJMNLIECuorusqjXOYgnqtwy{vmiihd`_aa^\[\```bc`_cltuof]YWVW[^abbabbadjqxxpllmkimrpnmmmkhgd]RQ^jlkjifa\[^``_dlnotFJIhZSQUY_iqxIJHKLJGFGFEEFD@AEDk8<3g?>SBSSW^bce`VOKKNQRUWVSZ^VMJIHFDDBEJJKPSOKIHLSWVW[WQKFHE~xroqtpiwFIHGGEDD?tzDGEEC{ldpD@y{th^_ionovDoh[QMCQBFde_\WJ<=KVUQMG>;@ACGUaN6]58;1<3Clk_\ZZ_efcbc_WNKOOIDCJRTSQUi~uXNLMOTY\cggedc`acbYTUQLMPQXepni^JINNRUUTY`gpzyk]VPKLRRROKSVTX\Z^a]Z\[UQUWQPPLIIKLNQNJKLILLFBCEGHKKHEIRZZQLLIECCIRW`aRHCGKOSTOHB?CLORTH?@@DCsrBGLQSQKHEA~vrppsuwxxuwwfdlyxo[VmLPODmlIIIIMQNMHIKwvtokkhehaSJLPLXedgpvytt}ww{~EEzkc]WQQPEEKU`nkY[mmdev|tpeY\_][[cdXSSVY]aVDeX\q}GRYa]Nyop{|SW~EINLJGL]jorgU[mnef_QPSOCEKOVWTY_]RHPal[Qbv{mbchjhbXLKU^YNMT,URNLJEBC;87789864S22589633456533555689986555653`0466520256664d`^`cb``b`ZVXYY\^_cdb`_\\_abbba``]Z[_ab246333443244369769952^\]^][]_^]\]]]\^1331_ZXX[^\XWXWRNNQS$$$!  #! "$$$)'&&%$&((&&'((&'((*+*)))('(((*,--+*)*,--+*))((,,-,,-/,*+--.00.,)'())()-/-+,**('''&$#$&())**)'&'()E**)))***(%""#(,,*(&$##$'))*+-+(%#$%'(('''))(('%##%''%" !"#$###$$"#&('#()(&%&()(**)(&%$%&$"!!$&()*+*(&$##$#8$&'*+*)')**)*,/1/+)'&$$$##$$$%%%$! !$$"  "$(*)'&%"G!"#""#$%!!"""!!    "!" "#$$#"! "#%&%$#"#%()('&'''&$#*""##!!!  "###""##$$$&(($#"!""#$$##$%$###""#&&%$#$$#%''%#%(''((&$$$#D! !!#%&%$$##$&&%$$##$&)('%%&$  ! "#" ! !" "'()-10+&%%# !#"!!#$"!"$&&#!!"$%#"  "##$$$#$&%'('&%#!  !"!"##"#$&&%%&'(('&%$$"""#$$$%%&''%$$$#$&&%(()*+*&&&$!!"$$$%)**)U('''&&&%$%&&%&(**))**)*+--+,+'%'+/10..3002212234420341.--/0,+..--.--)'&()**)('&&'((''')++-+'$#$&()*+--,-,)(()''),,))*)(S&&&$$%((#!#%&%%&'('&$"!"'-*&%$%'))**('&&')***,,-+($ %./,*+(&&%'O'('&%%' 0 !!  "#$%# !#$&'$%)' #$$'))++-0/-,++/=11/./0.+(&%&)+,-./.-.0110-*%!"%'*,-,,-//../1220/./22/...//00/-,.0257876421/./1.,+:,--./11121.-..//.../.-..-,,++,-+)(&! %,' !%&'((&&&'(''('% &'&%&('$##$%$%%&''()+,+*)(*++))*($%((&'("''(((**),..,*)&&(&$&('$""##""#$#"#$?###"""!"%'&'('&'((('%&(*+,,)()++'$$%$%'),-.+-0-**+-/0.,+-.,*())())'(**,/143.,*))'(*(&')(%%&')&"'%*,)*-+(+,*'(+*"#'(''&"')&$ #++*+/0-+,.0.-*%',,-./011/.0/**++-01121-+053/.01228> :::;:78:)%((&$%$$'$ ""!## "## "!1-2 #"'.-I2@*D:S^8C*()'%),///,+,,-/54/..)*/1012/*%&**+,--,*)(''*./-&!&*+-/.,*'&'*,.-,/220++1799:<==<966<1'%$! #$,.($##$)-./232/27;>@??=:747?FHFFI$$DBBBCEFFDA==>>=?=@AA@>;89=CFDC!C)EFJ(**(&$#C=9=?>=8-'-48:;=@ACDB>967753455364245436;??;50-,+-/2344333248;@A;99;:8:<<;;;<<;973-,29;:84/)%#&,./3998:@DF&*)F5,)(,17=ACJ)*)OQ+,+('&$"!!//3*)..)'$#"!"#" #$#!!$$#$'('())(&&&'+ $'))('%%&)..+'$779977999;<9657:;>?><;<<:;:742-(')+..18@FC<;<;61-+*+0454659C$%C78A##CBDCBC@:AFA?CD@BEGH%%K''%%$$''MNKF>65782./149ADC@;5697447>><;975324668855:AKSQE601231-2CTRA962122541/.+)))'&%%&')-39<6125886567889=EMJFEBA@:520/0676698-'/;9;=93;$%$##!!# 9<#$$$#F@6/6C$">@>7115766:A%C70'! (9721/'&*%""&890.--/220//.+&%(($! %*,++/:FH<+%%'),-/365322//10*())&')+.6<<90$%()+-,,/36><>D=327@A<0+7F(**#54BO(KK'&&(+))&BE''B<;;9787574+%'*(07349521/,.-%#(1:D=//;;44=FD@>7/1333167/++-.15/%848CG&-164+D?=FJ--EI$'*(&"$.7::3(.=>662)+.*!#(+/-)-21("(3:/'3?B9126640*$#$$("%.23455895,%(($*-#'9>1(%(14& 0.(/-2<99=3))(+;B90/*$*4750494/+)*&%*0;>-$*/.:KLD1 %2:87455/(%" '*''(&+.//-*().1+&&*++,*'"#')%##&,.+$"(,+*.243-'-5799/&"&($),*,10+)N$ #'$ 0,4(53)$%(/-%!2,#+$ !!"!#%$## +G/,++,-,-/.*(***,--/0/-,*)++,,-,,,*((**+)(***))*)('(+(&')+*'&''$#Հ䀅݀ ~~}~ـ퀃~~~ Āʀƭ€ÿ¿¾€ĿȾȽڄۀ܀¬ƽþľÿĺſžȾ¿½þĿȿ¾öǽۄȵ쿩厓þźŀ¼½½¾̅׀;Ͼ󎙞ǸĺߵƼľŸ¸»ܷ運◵µ؂͗ꇍѺ˺ʵϬĿüIJȽ邏DZ򃏌󀃅ϳˀǼŻùϯـЫϸƀĦȺһ¼¸йк􆝮٨սƭ者ԥl6`OOPRRQOLGFGILORRSTVZ]^^`ZY.00130.14210.0341110^^]\[ZYYXYYVSSUZ^]]][[[ZY\bghc][[\]`a_a1`]0234455fcMe221__`aabbe454gcb1a][\\^__^]_b`]]]\\[YWUWZ[[[\^^^]\ZYXXWWVUVVWYYXYZZY[[YVUSUTSTUSRUTQPRSQNNNOQSSQQRQPQRSVWXUQPPLJJKLNOMMPTWWVUSQRSSW^_^_aefdcbdhe^WQMLMNNOQRSTTTUXYVRPOORY_^\[ZXUPNRX\]^^_ade`[XTG.0GNMOSTSST#UTPOD43=IPRRQQPNORSQMKLNQSQONPQOLIFDCCBABCABFJJGEEGGFEDFGFECBDGHJLNPPONMLLLMMOU[]]\Z\[YWUSQPPRSOLKKLMNONLLJHFCBCEGJNPPPONMKIGHJKMPOPNMMKJKLKKJHGHHGHHIMNLJJKKJJJIJJIJLNMMNNOMIGFEEGFEEILMOROPVWTNLMPTWVVUTSOHDEFGGFEDCBCA?@BDFDDILNQV\acec^YSPOMLJLOONNMLKLPRRQOPRRSSQOOMMOOOPQQRRQPQRQPQTSRRSSRQPMLLNMJKNNMMLMNNOPQRV[\ZXWY\\ZVSRRQRSROLKORSRPPQQRTRNLMKIJLLLKLMNQRPNMMOPPTWWTPONNPPRX]\YWTUWWVVUTSRRPONNPRUZ\]^\\___^[YYWUVZ]\_e58:97jilmoojimprsollvEMKC=90(HECIOQQSSMEAACHNRU+,,--,,++-/01///.[YXZWX[[ZWSNPPE>?FMPSVWZ[\`_ZY\]]^`bbejic_]\[WQNMNSUTVZZY\`_]YTQONNOQRRRSTUVXZZYYXVTSTSRQPOOQTVVVUTRPORX]_^[XURPONMOTTTSRRRTXZZYYZY[ZVVXZ[[ZYZZWVX[ZXVXWVTUVURNHGGGHFBBHJHJMKKJJKLNPQONNLKJHGJMMKGBBBCDEEGHIILPQNJKNOMNNNKIJKHGJLLMNLJLMLKJLNNNOPTURSTPQSQMLMNMIIJIHHJJHGHHGEDDDFFGHFCGLONMOLJJKJKKKMOOQTTRRQSQLGGFCFKQUWWVWZWTSSU\ab^ZYZ\ZYYXUQNPUVRTVW\bklc][XSKBIRONOPQPPQOOQQU]_[ZWTXXUX][Z\YTRQQPKEEOVVUTTROJGOY[YVRPTUU[de]XZ^^ZTRQTYY[]_cffcaa`]]]ZY]^ZXUQS^ki]X]chkortvsmknpqnlq;>=:57742c5873`^ZTX`^UPOMIEA<327;DHEA>BHNNJEGJC;7028972b3579;><9<@GNOJE`Z,CHZXe]{cF<7>HHINQRTVVRONOPPWa^W[\UUWUQQSRQOOSUTSTVWUTTTSSQFpoHQSSPONMLJKLMQSSPMOTVV[cgktuqpqpnjksoZSX_\?0Q9<::9i^^fmnmjgc\Y^caaioqqqpsz{upopqsvx{CDCDGE}z|}}wv{|zuvxph`\^be_[\`hqtrrsv{D~CDF{{ytqtvusolhhlojdkruxwohfdb_ZVSPORTW[`bcege`^^___]\[YZ^abaa_\\_dhigeglpmihlnmlllkigfd`\ZXZdnqrommkqxzx}CIOPKysmheeggec`_cmtwwsoovC~><;:@Dq`>PXXUQMKKKLF>;<=>>?ACB@@AEHHHIHGILIFGHJLIFGIIIJJJLNLHCyst{xsqppkflrv{{sjgfeb`_dijh_UMKUafkppquwtomlg\STX\]]^^XR[wHNRRIDGE|yww{|yCytru|CGGFGHJMGJKyx}Dyw}~vomkimnf`]^^ZUTWZZ\]]YVWWY^cjmgaemmlu}~dZdhfecfhb][YVSNG@wrFB?ACDDFVCZ^YXY]cbXQRWYWRNQSKILJHGGGFDFJMRYZWUOIFHNUWUTWVROJFB{rvEJB?AAACCBA@B@{sou}D~yoxEsgcedjrtspjgkh_TI6H3PSRYXJ@@M`Y6L-6=?;5496K/%'0B')KUpdZVRT`gfddedZKCDFECCHS[\VVhpTPQUgricb`\[\WOU^_YSOMPYXPS\fjjdYOHIONNU\foqqrk_ZVMHILOOQUYbg_VY^_ZWYWSUYVTRH<NXRRYcvtPAHQPHJaqnllhikotjXSQMWclwm]ek^NCDINOJHFDIOJ61FUX[UE?FVc]X]b_[]123432579;:;=?@?<8667886544654216<<74I54345544787885222441]]b3675469:96f`]]`cdeea\XYZ[^^^`aabaa``aabdec`a`^^_a245532243_`1/Z1532442a`__``^]_`^]`21^`1b```_[VPMMOB!"#%%%#! !!"""$%%&&#"()))('((''%#""$'*)))("+/22.*(())+*))('-,-,,.,+/,-..---*)(()**)(**)()*)))(&%'))''()**)))())())*,+**+**++)('&' &'('()(&&()('"()(&&&%%&&'()*(&&&$"###%&%$%''&&&$#%*,++,..,,,.0.+'$"W##%%%&'')++)&$##$(+**++*(%#&*,,*)(),-*''&##%((''()(&%#((('('%%'&$!!!#&&$$$&'&$" $"$$"! !!  !  !"#$$#"!D""#'*,,*))(&%$$##$&'$! "#$%$""! !$%%%$$$#  !#%%%$#$#"##"##! k!"%&%#"""!"!"##"""#$#$%%#! ! !#"! "#$%&&'&$%*+)&$%(*,+**)(%    !"#&+.01/-*%$#"! !#$###" !"#.$&'((&$$""#$$&%&'''&''&%&(('''&%%$#""##!"$%$##$%%%'*+)'&'(('&%&&%%%$#!!$''&%$%%&'&#!!  !""!"#$%%$#""$$$&(('$##$&&'*..,+)*++**)('&&%$$$%'(+---++,---,++*)*,.-.03235774478;=:76;$)(":5344100.-//,+)0()*++*'%&''&&'&%%&(*+*))'%'(*,,*(()**))'%$%'(*-+(=''))'%$"#&(('''))(&%$$$# !"%&&('%$$$&&%#"%'(()+,-,+*++,.0$,)((&#!#&*+2 "!N !"#$$"!$$ $&(+,--.0.,,...020/15520//.*'&%&)**+..-.//-+)&&%%&'()**,,,.0/..- .-,+*+**,.//..-,*+/12210/-,,+)*,-/10/00.-./ ../-,-..-++,,+)&$%&%%#!"%&%'('''&&'()(' &%%$%'('%"9#$%&'&&(*)(%&(*))*)(%&&%$%''(('%'('&&()((**--)))'&''&%&''$F%%##$%%$###$#$$# "%'''(&%$$$%$%&&''())*)**'$%$"$'+./.--.-**++/231-,--,*=(%'++))*+.1672..-*%$+(''()'))(())*./-,*)++)*-,,/.++)('#! &**)'%"&+-,+)(*++/43/,-110,++-//000344211/---++./-,+)+3;80-/3579:;<;8778:97:  ! (&&%!$(&"!!("&'*?J1I87BFGFDD$FCD#$$GA@A@<;===;975579638=>@@;8737630-+)(+,-033457510/00110/-/2543432136876459<:76798Q99976421.-4;<:64547;=<>"&*+(IA<95334454446;>??<97@CA<877630/25651*%%-6:=>==?A?<;;80**-012451,.<%),,%"%%DBA@@DGB?E%F@<;<@$'''()+-'FCG()MLPOF=;>A#DACD?=ADA=9659:621452..011232/...035:<7139:9>CENXP;28;975685221/-+'#?;"#%)/68433344349>?>EMQSMFB>930/+(+7BDB?;78<;94-'#&.32-)(')+.2/+)*++)"%!!-/,++-22,'(*+*'%()%%'%###$#"#&)-00.-($"$(-.,*,,+($"!<78"&" !!  ?>;9=ACBD"BABB>7>&K>62225:<;94230)#-.,00(" %-* +=4.,)*/21..00,$ !"!! #*02.-8IL;*(*-8?9332../+&)/0,)(')/.(*05774-($%)('+06:;;=81/,&#$&'&'*.483,,//-+-+(*,*)("!(+*(%##%&&$!!!#(+(&%&).0,&#"""!$'(''&!;?AA?@CDCA?A<8==;6,,9BB$)(D<;?G'))(''(&&)(F&,+#>:9537:6+&()*.04:8442.2=CED>9:@"#ᰶ-'**'#%)*-01:@CLI<656856B>32355+',1000'?7--@N,098"+;)O?./G'E"(,( "(07=A:31598.#(32*%*-*+..+(%#36138;72049>B?*!"%#"0737=3(&+-&%13+).32)%$&) !9=86/+27=A91/+%(037:94/,.0..1221/.'!%+293+.0,/0,,+)-0&"(+$)59502>LI;1-,*(*.2551+++)*--,-,)"5:!)/*),3>?)$++$%4>;984589<7-*+)06;?6,16/& "+*%$#AB@708BEFHGHHGFFHIIJKLIKLKHHGFGGHKNRWYUPQQQSRQPMLLMMKJIKNONMKJMPQPMKHEEFILMNQRMHGHIKMNKKMNMKJIHJMPRPLJIHGGGIKKHHJLKKKIHFDDEFFHJJIGGIGFILJIIKNQQONMNNKIKMMLJKIHJLORQNLGCAABBBCDB@uBEGGEBEJLLIGFGJOSOHFGJMMMLKLOPOLLOQSTRPOOSURNMMLMPQSVVWYYWVXYYVQOPTWYZWWWVTUWURRSTTSQRSUZ__]\ZWTRRSUXYWVTTVTPNMLLNNOPQRQNNPPNNNONKIJMNMNMLKKKLMQQNLKLKLMNQUXWSRTWWUVXVQPPONMOQRSVYXVXYXXYWUTVY[]^ZW\d6876np9;<==tpsx}~CHNSTQNHA??>9-G@DKMLGFGFEFINRV,-,./../0=//...-YWUUY//\ZWRQPIBEJMPSVX[^\]^]]^_^bge`_aca^^^]ZXUPMOPRUVXY4WVVUTTSUWXVTUVTSTUUVVTRRRQLJOPMKMPQOOQVVRQSUVTQPPNLJIMQSSUUTVVVXYURRSTVX[[YXWTTTSUWWWURSSRQPQQPPQPNJHFGGFFHJHGHFFJNQQOPRSROLIFGHKLHGHGFGHJKJJLRUTNIHIJKLLJFDEFFEFKNMLKKJHGFIMNNOONQSP4RXWOMOMJKNMIIJHHKLIHGHJIDCEGFFHIHIKMNNLIHHGHIIIJLNNPRMLNKIHEEJMPSSRTVVTQRRRTZbe^ZZ\][X[ZRLOTXXXWY_f7of``[RC/9KNNMOOMPQNOSUVYZVSPNOTUU]\]`]\[TRQOOQXa^ZXVSQRQTY[XSRPOPT[b`[XX]\ZUTXYXV-XZ]eigeb_\]``_ZWVTRROS^hjcZYbmsqkhkmkjikqr:9<=<=?AB?=:jdUX783_VPPPX]]ZVUMFEDCA?@DGEBEIMSTNHB=:;;_V[i><8763`c54c`5>HSO;=0M`{w[]PHD;0:T_]WRPRWVOIHKPNKQZZYZYWXUOJKOQUV\a_\XVUUXZ[ZYVROLF?AINNMRUROORZ`a\XTSTUX[]]`cbddceghlm`MDLT;:$:@Jb8:tsqmmsvxwvuuw{BFD@|{{~@A??@??}zz}HLJyusqryxpnqojgm}{rj_W\a\US9VY^cgjkotwx{}zupmpvz~xpmqpnkedjpsqqokfdfggededcaYSRX]_]YXY[][Z]dga\ZWVZ_aa_^]Z[\\\Z[aimpv~ytttpmlnmjhd^[bo}}BFHJKLMLFqh`WRV^dd\PDurJgtpory@A}xzCB}y@FIGEHLNOONMORSUY`aZSMID=?NZ^\YVUTUUWYVQOSTTX_fgb\XVRNHDB~DGIJG@uhdb][XZfnu}|tmlnjfege`[WVWX\`gnttqopojfecbdjqsrlbZUTkFOOSWUNJGDvkebirw|lgnv|ADHJGFINO{trsw{tsrgYZ^^bedc_VJFMRPQUVWXVSSSUY]]_dluz{|}wiROizwqh^UU^aZPJHKNPQPNOSW\dd_ab^]``chjju~~xpkc_[PN^o~vkb__^_`\WJBSine[SNPTQICEJLKLRRG<51.,W,/225;;?6ME-6;=;65448944?PPD7gznb\\amuojie_TH>=63PMHShn\HFILNJ<8KZ]`dbVShpdYQLU]^ln]_gWDCHMNNLHAr`Ygn_[`e=BA@?BIIFHNIB?NYSKIGFIICADNZ^YXVNFR4b_a`//^_1356215779;=>@?=:8767776568854228<;84335542356356741a1343^WW^36767;=<8hb__`bcccb_\\[[__]_acdaababdeBcbcda__c34445458742`01342_\__]a3332ca`__`aa_]^_``_`aaa121122b_\ZWV:%&())''*)&%# !  %&$$! ,+*)'&%&.'((%%&(+-.231.+))**)('&'(+--.-++,+*+***,---*,-, *))+**+,+*+**+ ,.//.+))*)(&&')(()))(()*-.-*''(('))''(7)('&&%&('%$%%%&&&'(('&'))('&%&('''(((*+,,+,,*)()*)(&&'&%k$$%''&&%$! "(,.,*)&"#$&%###$'**(%"!!#%%%''('$ !&*'#')('&$!!#$$"! "%$! !"! !#"""! !""#!  !#%()'$$$#$$##"! !#$%%#!#%%$#"! "$$%&&# !"$$""###""!!#%'('$"!! !"$%##$$###"!  !!! !! #%&%$$%&%$"!""!"$&'%###"$&'))'&"  !!"!#%" "W!!#%$"!###$#"#$&'&#"! !#$%'((***)())(%##$&'(&&''&'((&%&&''&&'(*..-,*(&$$$&()'&&'('%#"!"#$$$%&&$#%%$$###" #%%%$"!`#$#!!""!""$'+*((),,*++*'&'&%%%&'()+*(()(())(()+-./,*,056;9:>ADBAA!$)-.,)&#;41/./10,*H())'''%##$$$%&%%%'(%%&&*--*)+-,)&%'+-,+)'%$%&*.,**)'''(**(&'&$%&'&')*+)&%&$$&)(&%'*+)&$&*)# $**'%&)-.+*+(++''$"$&(%&6  !"! !  "$&),-.---.//./253/.010/01/--,'$%')*+,+*)(&&%%&'('')+**+-,+,,+'$'+*)*,.-+-10-+,++,,*)()),---.-..-01/,,,-./00//.-+**+,---*)*+***)(!'&$#$%$#$%$#%$$&(*)''**)(&%#"$&(&%&(()(()+,+(%#%&'(('%##$$##&'&%&&&$##&()()*)))((+-'$&&%&'&$$%$%'(&$$$&&#"#%$##$$%%&()'%%$"#$$#$&'''((**'&('&%##')*,-,,--+)*+*+.24/-..-,+-.*&')+++*,/262//,(!$'&$''&()&&)**,,*('%&))),-././/+)('''+0.,,,*)))*.0.*)()*-021/,+..-*),.-,--.232320//001.+,++)'+2673/.4;>;75677767:; .) "&" !"%%$#"# "#!-('.*+'%'&!$;@ZLC.-'%"'--+**-10+'(*-+(+22110/0/,)*,-.046530---/0111.+))&!"&*+*,-*)(*/442/-,-./34222123246588,%,;<;99=@@?>=>>A#%$!@??@!!  !!CBABDEDG'+)KD?=<;=A@9799769CKH@:73.140+),.1469:;=>?BEGC@?=:8:<=?BB>:9;;:9526;=;;:755667656541+((,//0131.--0210268300.-/354320//./00//..38;=@CD@===;9897554104:BECAA!#%%&&((&C93.+)+/341,&DD+;@;78; !@=?D$#@;!#""$')***()*+-0573.)'#)132/,+*))*,+)()*)+0452-+**($! >?AAB"#%'%C?BDAC">63320..5:?DEB<888531.,**,/27;??;9886443347;==;4.+)4$++,.-(&&%F>9415;>DD;68=@!$')('NJGFK(O*,MA>==@EIKIHDCEA<=?:0/21245550(%),*+--./-+**+.0259>DHGFIJoEA;-)8IJEB=61,,263.+**++,+**+-/5546732334899@MSMGFD?;642+)3>HMJC=866422/,$*;@:2-)+-,& $&&(+*#"#*0-+.032*',2/)%%)+'&$"#""$%" "#(3;:4-&"!%),+*++*)%#""%(,'95"$!=<;< !!!>9:8650173..5B&&B??D)+)))'%$&-0,&&%@957;;:>?2-1.0:5*292,18529AGB=@?A$&#:2583-)(*(""'/48>AF*M75436306>IH;:A=3-,,+..<42+;91*F?!*1CNH7%!4@!'15-!+/5EF74<=60(*1.*'()&"$%''&""*117?85;5-037CH/$)((,)+)# #083/))+*,) #4=5+/7/'$"$')*-5A@51145232+'($%<'(>-*12/155884.(,/,'?!&&)22'#).35-#!:<"'()1:>;?NK@826:112,*,+*().0,((#{0* +)%*6;2$"%&($'/1352**6;3,)'-3299-/5, $&()(&";1/9<0,06!"!!%$"#$ %("$%"!"!'%&%""9++''*0-++,,,-..,S..,-..-++,,,./..-,,--,**+,'&))),,+++,--,*)**+++,--,***)'&ۀԀ~}}}~ ɾ؀˾ſþ¾Ľ€ǿĽԀ{ƿļ½(C»ǿļſ而ĺȾπ¾ƳȾȓ喷½ü߀ӴԀûͼͼ°Ʒ嗫įǭҭȴij׀˹оȲ򋗈ͺ傉ʲɾЃԶ蚻ƯðûĺоӸƵʽǶͯſįƷ񆂆e '\\]`b`\YWXXYYXXWSSRKDHOPORY\\]02323332123320\Y\_`_^[YXWWYZZYXWWXZ\][[^ceea]]]^^_a1a_^`deb`aa`_``__`__^_^]^^/012111_[YXZ\]_111ca_`bcc_\[\]_aa_[YZ]\\][Y[\\]_acec[TSTVVSON!OORW[ZVSTVXZXURRX[[\\]^\XTQOOPRUWV SQQPNMMLLOQPQRPORUUUVXZ[YWXYWSRTVUSRTUX[\[TQRUWWWVTRPPQRTUX[Z[ZUOMNOPQQPPQQPNQVXXYXTPOPRTSNIFEGLOPNNQTPLKLKJIIHGJMOPOMLMNNLJKNPPNKIGHGFGFEDBBCtFKLHFFHJLLJHGFEEEFJLKKKLJHEEEFGKT\^[UNLLLMMKGDEFHKKIIJLNNNPQQQPPQRRQONOQWZVSQPOLKJIJLKIJLIIJMMMPQPPOONLKLOPNMLLLMLJIH +IKKMPQNKGFGKMMOSVWWTNKLMLKHFDCBBCB@ADDCA?@BDDCCD|FGHGFECCGHFDDDA??ABBCEHKLJHIIJLKJIIIKNQTTSSUVTSRSSSRRRSSVYXWWZZWVWUTTTSSSUVUW`d\XZZYYVUWXX[\XUTQNOPOOOPQQQRRSRQQSUUVTRSSQNMLKLPSSTPJIJMMLMMMOPPQSTSRQPQPPNNNPQPNMNPPPOOONNNOOOPQSUWWWTTTRRSRQOIKVXVW^g6678por<>yutuqjqCBGJIJOTUPJD@A@=9nkgba_^][XVVWVVUSROLJKPTSSSQNNSUTY^]\[ZXURQPRX_1[UROPRWc420^YSNKOTXXVUTTRQQQRTVWXYWWWUUWUUWYVWZ^11\WWWVSTVVUSWZZZ[]_00/-[03445557755654210024434557b97530.XY./00012332331//-+,-..-WWY../1211436877889:;:669<=<:;==<<;;;5+KDBCCEHGGLQR*,---/1001110/.-ZYYXY\].[YUTSRPQSRONRUX[ZXXY[^^^adb_\\][Z[]\\]\WQNPRUVVVUTTUWVTTVX[_`][ZYVSRSTUTUWXUOJLNNNOPOLHHOSRSUTTTPOOPQQNMMORUTRPPSSOLOSRN?MMNOQQTUTSQONNPRQQRQOLLLKMMMKJKLMLKKLKIIJJHHGHILOPRRQTTQNJFCBCEF*EEEFGIJKPWZWRKKNKIIIFA>@DEABFHHFHHGGHJLLKMNMMPOLLKMPPLECFFDFHHHIIHHHGGHHHGILONMNONKKKJLNNLIJNPQSWUSPJIJJJHHJKKMQTRRUWURRRQPRVYXWXYYXXZXTTVUWYXVYa5;9idaZURGCHONLOQQQRQRTSSROMMMKLS[^]ZZ\\\[[]ZTOPV\ZUTUROPRSVYVPMLMQVY[]a_]][YZ[_`\WWXZ^bccb`_`^^bb\[\[ZXZ]][YXW_p=yrkijkljnnqpr::9;<;9n8:::9jaYSd863`YVX]`bb^XKAKOJGEDIMH?AJRTPKEBBA4J7?Xh>=<:5aa6JYbhspedgfb]WYblooojjppcZY^jsyuj]UV\__ZSLJNVWX\ZROQURPTYXSNQPA548<=602899:@GPSOKHFDCSAQV\dliZROQRNKLOSVVSNKKJGFEECCDJWbdb[SKHLNQW[RFAGJECGHDDDz~JLHAysnq~FJJGssw}EKOUVOEzqqEB?ysuxwyvfdnmopaP;QgMZ]ZUC9>AAAB@85;?==:29FHFEF?FMAF|mgilnpojg`UJC?@ELNNRXY[\\bfaXQMRY\YW[ivhXXXVW\[SJCAIPMHJPR\khUF@GRRTZ_kreYROPQS^aWHDN[\VQQY`_]\[\^ZSSURNIFBADIPSPNLGCBGPVUQNKJOY]TPPRTPJECBBDG&FEEGJSVQQOIIHA:8=CHIFCAAEFDCDGKJHJOPLHF}ymafuwsssqlgWLZitDNEnl{DHHEFHJLMQWRE}}B~xIiYennbSRbkkfea`pCGyvLOMKHE}iZKAP]R@CXhegsNL}oia^YXXSSMLVYckfa]TVXA[dpongCbZAaPX`^`faWehdJ_gZGBKYiniehx|sqwwqdUKADLNKQ[de^TGVJiimje^XX[SKPX[`XMQRPPQZef`TJGGG@;@GMQPIES_]^WPORYZXdr`K?DOLKPX[erobXRVWX^QFA;8?Wimg_dnu|q`alng^SQTTPJFDBAFGFA?EJJKSWV_YGA?ql=IPSOCCQ\eou|tj^QOSTW^dZJGJIILGLTMHObhSGLV^gbJ:nilp:eWo?<=>=A@BJH@ALQE@CB@=9951///..'!#(1579;;9;@A>?>:; ""#$#!?<<:98:<9799425>KMHDA;657779<==:5358=BB>=?A@><;98?GJIC=99:85468779::864568989;;;98862000.)'*/3531.*)+,.1101210///11232/.//--16;965689;<<>AA>99=@BB@=94358;?"C?===>@?;756668951,*.4>O$()&%'(&&%#>:::;=><> ?@$&%%&'MLJHHD@=85>NNE;30257537:6221.+()6@<421-,,+*)-1100.,.0241/0330./13223.-8CD<9850+-9A@7.+./*%!'169@?758862./6<==><414678732/(""&'&),-/0/141*&%(-/-,.6?6++,+,0/*$ &+($%*,2;9-##***.19?7.*()*+01+# &-.*'',22/.,+-+(()(%#!!$()'%%"!'*)'&&&)02*&&''$  ""! !#(*''&#"  $%$" "# %''%&*+(%#$%GBB:13:@DEB>===<;:/'/6:#)$76@$&&$$%&&&).+#@A=>"C@GKK(L7/4:;3((05300-*4!%>731-/3%/7@@>4#:3 /'.66693,440&38.!!(09:513<>97<=;4,'!!%&$&-320+")B(C458530./1*$'-.-% %*+'! %('$!)1//+&%(./,4>4' $+(%'++086.(&**+1+$!,795./5;@:/1:;50*),,*&###"%&%!"%$%*-,2/$ !=9!(,,*"#.48=?C=70('*+-050'&))**%','#'37*#&+054%&+('&##&)/71(++(-0)(,*%&,<2,$%''$ 858;5*9! %%!""$"!!'%'&% #)*,+)*++,)') %!.*',..-,++,-,++,,--,,+,-//.-//..//.--/+()/..00//.,*+,,++***+*)))((*,+)߀Ҁр ƶƿۀ¾¾¸Āƽ򃏒w¼ƻÿƿĿȀ»˻Ѐ³ȼ삇ÿþ»րûǽ쀋Ϳ̹ϱĿ퍙􃏑Ƽθ½ùܮɴ虸Ϻǿ¹Ժȧ򁅇ǽǽгǵƻޅʺмįӿıȼǧڼԷ̪ꅒíɌl\\[\^aca\YWXZ[[XUUVVQMNMIIMPQSTY\ZYXVW]23210][/0_]^___^__^[Z[[[\[YXW[[XX[]_^\XWYYY\_aba_^b44334321b10^//^^__^_```00^[Y[//_/00b`^]\]aa_]^]]_a1a_acdcba^ZXWX\`_][ZWRPRRQPMJKMT^`]XWY\\]_^]__]^^]ZXZ\[ZWVUVWUSRRSSRQPQQOLLMNRW[[YSNLMQPPSUYYVRNMLLLNOSXXUUVWYZZYZZYYX]WTSUY^c`XVWUTVWUSRONMMORTUXZXRNLKKKF<=?BBAB"CDCCEFGGFDBDGFDDDCAAA@?ADFHNPKGGEFIJMNOPTUTTSTUVVUQONNOOOQRQSWYXXY\ZVTRRRPPOPRUTUY^ab`\XTRRROLLKJKMOONLKJJKLMMKIJMOQSTSPKFFFCCEILMOMKJIMQSUVX[\[WUVWVTTUSQPOOPRRQPQnQPONLJHIKLNQSUUSSSTUVTQOMLMMKJLNQUXZ]^ah898jhnsvvtonruuwyx|DKNJILMORSPLJGFC=8keddb_[VUVVVSPPQQPNNQTSQROLRXZZ[YWcTPMNQTZ^]WQQSTTYc430[WVUSQQSVVUTTUWVUTRSUVX[]^_^[XVUUV\_^_\VUWZZYXUQQW_]WWYZ]352//15751./23111/11_^/i]\\[[^158510013420256544563/-,-..--..[./00/-.12278998779::989:<=<:879;<=<<<><4(B@=>?BGMR+,-,,,.02344320/ZWVWXXZZ[[--.[[\ZUPPSUWZZXSRUTVY[\]__``__^\[\]ZZ\\URRSSRSUWUUWUTTSSV[]\WTVY]_[WUTSTWWWVSONORUURQONOQQSSRRPLMRTTROLLORUUSPOPTTNMOOJIKMNOLJKMNMKJJHKNMKPXMBFIJJJGFGIKLMMNMLLKKJHGHGEEGJKKLOLHECBABDDDEEEDDCEGIILQVXUPPSSNJHHFA@BEEABEECBCCEHLOPNNOOMLLLKKJKMMKMOMKGDCDFGFDCFHGGHHHGIKIIJJJNPPPNMMNPNOLHGHJLRURPOLJHFCDGJJLRXVSSVXVUUTRRRPQSRUXXVWYURTVVWUSRT[e787jif_XUSQQQRTTRSVYZYXYWRPQNMPW[\YVVUTRQSXZWRQOPPMNQPNLNQSRRPMKJNUZ[]befdbaacgif`]]]\`deb`^[XWY[[\_`bdgc]WTVX]huwtsspolnkmljlonm9<<8]Udqo9879659644f`W\df4h_TKHKNPSQKFA=AINRNIB>@A;cXZp@ACB@?@CEDCA;657<=@HKIJQXY^ec`^XQSWVRUWQMPUWZXSRRQQU[^^[[_`]YXYZYQIR^bb_ce\Y[[\[VW[YTPNMHCFQXXVTQRW]ba^[[XQNOPQUX[_dkonnnmosxtlq{|ussrtvx~@CA@@>>ACB~~zwy{ztmlprw~{y{}}wu|yrqplb^irk_ZZWNGHMU\_cffddcgpuwtsssyzz|{tqqmg^[]afgcchmpme^\_fkifeb^^becbbb]Y]_][[]^][[YUPRWY_gfa\YXYZ[ZVQNSY[]^_enzEHJH|volnprqp=DD@wsw?@BDEFGDzvuoe`[TWizBCDB|{ywwz{{||@CC{wvy}FHHILORSV\a`[WTVZWPJJKHDBCDEHKLKK|uocURUXZ`kry}|GKIFDCDwkdfntqiilrxzzz{|}}zyzwuutojhfddefebeqB@~}zvzDEDA?@ACFGCCMRGB>xpklonilx|qgcacl{|jTLTWQHtb|NRSQNS^jwoWLNROKLNOMJHIPYWGsuIRPOQSWZ\^YRFIPLGGOaknqrqqqigouePNSTSQNLKKGC@Yq}tmoonia]]^``bdhkke]]jz~ytrk]SLKORVWTOMNLJLSTRSVZ\XRQSQLMMGEDISU>*R/6<@DLOOKA0+9CGWBX``_]ad[QLJMPQSUZ]UKHGGFDCCDEINT[]TNLJJKLOSRMOPIMTOID}}AADFD@?|z@EMQKEDBzvAHKPQGyIOSTROIAuljqmchqsqj_TPPP^ojYLC@DLRNG?9:@A<9;@ILDCEEUGsBzolknomjd_[ULCCEFIPPLR\\UV^cb_YRPPSUWZh|p[VVUPOY]ULGIP\`TOSYcf\OGHQVUVWaldUSSOMR`qufQFP\][WUX[]]]\[[VPOQRSQMEACEHKLIGGFEKV\YUTPLLLJKQONRWTJCCEFEDFIHHJMLJHFHNM@sv@EFDBAABDCEFE}HFEFEIKH}qmns}CB}vmdWOZjvAFEriKOHzxBFFIPQJ{CC{}{u~KR[`giih^\chdWNPWaknoOWTPMJNPLgUMMZhnfQD]vxKSKogokbZVUPKHJMPZagpbMQVPD}nYZnzAJEqcppcdhCB}BIMU[UGBEJVX^fppa`p~fYRRUTUWV[[ZXN_~@rghokg_LAHPTVWYe4[OKKIFJNNVdh]VWRFFGDEC:9JjykZT]]PQ]ba_WG:AHUZOK`|{jZQTPJLNK@=IQV[a``mokrvlaaeaVPSRIL\\NHKMKE@?CD@@HFETYPS\_WHq;GLJFDCCFJWcii`[_[[]ZOIS[Ozuv@LOOU_^MCFUcru`OGO^QKUWSKALivmYQSWWTRSYX[gbNDHLNMH@:8;=:s=<9id=DABGGGLNKA::AIF=8:BMRF>M8CNRa2244478778:;::;;9:<>A@=9889986434422343236899764\PU^356556556873ba2442`__a7>g?CMOAic`_^]]_cdca_^]^`_^`ceghe_]_bddbchhggh43ed23566774332cbb22247;<:;=;74_WZadedcabb_^]^^^_^[ZYWX\bb`^ (())*-.,*)()*+*(&')($"!!!"!!#$##&&'*))*)(('(**)'&()'')+-,*('(+,,+)(+,*)((*(''')+,,+++*?+*+,-,++*(((*.0/..-*'&''&$"!""'-.-+*+--./.-//...-*))+,,++*++)('((&$&%)++*&# """#%((&$#""##$%&))'''()*+***(9&%&(+-+''(&%''&%%##$%&'()+,+(%#"!" !!  "##$%&%!!"#"""%$$$#"""!#%&''&%$"""!  !"##"""!! !$&%%$$#"!  #''$#"!!""! !  !$$!!&.1+$#$$##"#&()*,.-+*)'%#""#"  !##$%%$##B%'('%%&%$%$$$%%%&'&%%&&$$###$%&'''(+-+(%#"!   #!! !%%! !!###"$%&%&&$#"##$$%$$$&(('')(%$###$f%'''(*+++**)''(&#""!"$&&%##""##$$#""$&'(('&# !#%$"! "&()**+++)''('&&'%%%$%%&'''()'&%$"!!#$%(*,+*)Y(&%##$$#"##%(*+,,,/215899854788:;:@>><::8977555666*$-31(&"&***$  #"Y "# 7109!"#"! !#$"!  "#$)..26420,))*)(-0,),/032/--++-2564565332022,).46549;421//0.+(()%!#+10.,++-144301/*())),.1469:76668;=:47?CD?;<<=?>>B!?@"C@A!! !""CBBCCA??@A@=::;=?CGE@?@AA>=BC?;:9732:?91.0/($%)-257865548>AA>><;>?>@DDA>=<94/./0453258:82.-/36644200354322.,.1112444332.**-.0551//00122/+(+.01126:AIGEE$&'%FB@=989:;98 #"979 BD"L#$#@ABBB>>@>973-,4?#$#!?=>?>=>?@>= #"B>;;=@A@AE%&%&()*+.38740-.0/*&'('$#$$%'(LFDFGEB@?>=>;83+*,/029=ABBBD%'&$##$F@:55:?=768;?ABBBA@CC@>>>=<=<:86411243128@""B?<;978<;7:CIH@9543:EG;-&*-*&<3E,.-+(+2;DB2((+*'(+-,*)*.53)AA)-,*+,/0242.'D'-,)(*4::99:;;75>F<.+-./.+*('$ 1/>E?9:;;8312344458<=:319EJHED?6.((+.//-)'(&%'-1/,/22/,,,)%%&%" ",110/12-'%$%')+,/2-&%%%$#"!!!$'+/1*'&$%&')-,'&(&(+($!;; ?!#" =< #(+(#"!<:!%(+,&A;?%*./,)% ;66:803:<:74.+**2;9/&  #%"8";43467640.,)#!"$()%)00+*/220,'%&)+,-5B=.)*)&&-/+&#$)03,*,/693)"#*.,,,2<7,*+(&(/:>6(!'/0.,)+.,,)%%&'''%!!#$$"!"""%+/-**'%''$$(&%')'  "!!"""!#%$#" !%$14"$#! !#"CCE#$%GBD%"!!"$&$FB=:8:A"!ACCDEEB<6-(/6;!$#61B(*%::!$$%*+&?=!!>@?($?? $'+/+"!#&-+,055-.9EJC4-)*-122/%/C":23875/%!&,-,+*-""+.*')'  !4>6+(//'(0444/$ #*,&#/?=3+&(%"%'& %(+-10.796:>60042+'*+%'12)%')'# "# $##.2+-34.#5(*'$"""$%,599301..12,',1*??A"()(*23' #,4>A3'"&/("(*)$$7@9,(),+)'*.-.64'"&)*)%  < 40"#! ! ! !!& O)$&*++*)() %&,,,++**+-//.-,+,-,,+++-//-+,-.-+,.<---,,-)+0220/-,,***+*+,*(''&'*-,*)ЀՀŀ  [¾ЀſŽþ¾ļ2DžȀ±̀ѿͿX¿ùƿľĽûƽŽѺ¤¼ÿŽʿǀſĺ򈎊􀅇򂊎Ժú͸큈˶ʥΊŹƿŵ̞ǵȷü񄍐ĸʳȺĽƸǵ鈀݀þꀇҽ̶ɴɹԷʀ̸˂ijǺ·ŷĻʾŸӲÿȿʸͲ˝뛵÷ȿ򄋏k>\]^__affc`]YWYXWUVXWUTTVURPPOMJKOPPQQRTUV[^\Za443cabbacc_]\]]\Y;XVVXZYZ]aa_[XXZ[[\]^^]^acbbba011100010_\_10]]]^\]///00^0110/^][YZZ[\\[\]__^^_acc_ZYYXWVWYZ[[ZYYXXWUUY^]XVWVTQPSTTWYZ[\[Z^cc]ZZ\^^_`^\YVUUSRSRQRVWSOOONNSVUUTQPOMKLMMLJKMNNPPONONMMNQTW[\YUQO OQSUVWXZ]\XURTTWXYXXYXVUVWVVTTWUTTSPNLJJQRMJHGGIJGEHLLLOQRRRSTSQOOOPPONPPNNOPONNPQPOOONLKJJKLKIHFGIJJKLLLMNNONONNMMLJJMTYZUOLJIHGFEEGIIJKIGFFGFC@@FNOJEDFFFGHKPWXWUSRSRQOONMLKLMJHHIIJLMLLMNOOPQPOOMKJJLNQSTRPPRRQPPPOOPQSTTTUVTPMMNPQPMMNNMMLKKKIHGGGFDCDEEDEFEDCBBBAADGIHFEEEGIIHHIHFCCFKNMKJJIHIHGHHGFIJKLNRTQMLMNQSQLKKKMNMLKJJLMLLNPTWXVWXWTPNLKMQYbfd\UPKGIJGFJKIILMLIGGIJJIIHHGGHHIJIJKIGIMPPQSUTRRRQSW[[ZZ[^0/[Z[]^[Z\[XUTRQRSNKfKKMNOOOMLLLMMMOTYYYVTSSSRRQQPNNPQQQRUWWY^bgif`]]agkmkip={xwzEILNMKIKPUTOLLID??;1K:9==@EJQ+-.023320.YVUUVWWWXWWXXYYZ[ZXXWWURQSVXZ_aa]VQMFDLW[XZ_`a``a`][\]]\[ZVQPRSRRRSRTWXUSRSUVSNGDGKT]`_\XUTSSSQNMNNMNQTVXWVUUSOMJFIPRRQO1QTUROOQSSMLOOMOQTTPLKMONJGHHJNMKLPNGIJHIIB9?9448::;9:9j686D544aa67ebZSYVNJHV]TJCCFKMTSNKI@5bgqnhmmimqos>CDEGB:69>BHKIFEGLQS[bca^UKMQQRTTVXXYYUSRRUXY\a]WUSNNQTVY\]XRQVXX]ehha[__ZWUWWROQUTSPLLQW[^ccab`\ZWTTSTY^beedhmnopquyxvwzy|BC@?ACC?}CDB~uty{yy~|vpnlf^bnzEzxsmiilpqnpqld][XVXVOOUVTSTVX\\YWXY[\\ZZ_fp}ujjond`eljefglrsqlmokgc_\[]acba^]^^^`cc_[XVVUTTVZ\bjf\TOMNQRRUY^cc__`^\^kILJIHGFEC}urpnqBDEDFE;h:DHJHHGFJtgd`^acc`[Z\ZVQMORRK?i[PQZgqqjp{y]BCnKNLOTXZ[^]YUNQ[bikilttruuqmdZSQLECIRWSOLKLPQPNNMMSblptvurnjhea`bglljknqwzvmd`]UMNRTUVYVNKMMLKHBBKTY[_WIHOPRVMFFGPQ;B9Y7;@FJKG@=GE65BHVF`]WZ]^^_ZRRXZ^a^`eXH{sAEEEJIEDHNUXRONJEAx=IRRNIEP^WMNLHGHKKIJHCBAABEE>qu>@DGHKPPKKNPNKJIJMJC@{uqhlysgc\UQUgodUMLHBDIMMIEDDDB?AGNRUQHG7_ywleadilj`XVWTKAELLKMNQX][RUbgd^TQTTV^efmqcXWVVWY`aUMKILPG?CKUULJQVSQRW]`ecZ[_ZPQ[joe9ZSORVYYVQOPPT\_`b]RJKPUVRKE@>?CHKKLKIKQUTTYZSMIGHLQQRUVNFDCCFFBACCADGINQHA?@B@@DFFEEDC|zHVTLIJMNJykqCHDBB}rid`^XWfHLIAx~DJLGGILORN{}~}wnwJng\W]b__`O?:8=DGPj?FNPKJLKEA}j_hj]Vfm^V`pxxyj]wubWNGNXN?~KT_vs^SX]TK}aTVdorr|qmMVlhuDGLQQLPUI>IRakhfdXM\wzwte^^`]PMLKWaloigaY\ad`QO_e[SQZb[NHHKKKNB@LZfnlhb^\WJCHJ@>A?q<>9f8GD@HPRH3D=T<5X]dba`_^acdddb__aa``abdhieb`_acccdeg43955445666543fe344458;;:9899:863c```dfedca```\XZ[[\[ZXXZ\\\ ()*++-01/-*('O(**('((&$##"  !!"""#"#$%$$),+,,+,-*)())('()((&&'(()+-.-*((***+++*))*+***))'((' +(()**)))*+,--*(()(1**,,+,+++*((*-,(')*)''()()*++,++.0/+))+-./0/-,*)('t&'*+(%&&$$%&&'&%$#! !"""!"#$$%&%$$$#""$&(++*(%##$%&''()+*'%%%&&%&(()(())('()(('()(&'&%#! #&$#"""#" !""$%&&%&'&$$$%$%&%%&&%%$%&$#$$#"!!!"##"  !"#$%$#"!!#&'%"!;  !!"#" !  %&$  "%(**)('''&''&%&%$"""#! !!"#%%$#$%&%%%$#!"$&())'&&'&&%$$%'(''((&$""#$%%$$$#" ##"!! !  !""!  !! ""  !#%$"! !"""#$&$">#%$"!!!"#""!!!"##""#%'&%&&'&%$#""$(-//*&$! "# !"!"$%$"!!"##""!"#A" #$%&&&%$%%%&),-,+*+**+,,*)**)''%%&'%###$%%%$$###$$$%),,,*('('7%&&&'''())),/120-++.122104:9:=B#&''&$$%*..*('%"963/,*++*('n%$%'('&%&&'*,,*)*+)'''%&&'**)'%$#&'&&*)'&$""%''((()++)&%%%$$')++*)*)'$"%(*)((&'))'&&%&,/,))*)+#&*))(((''((''(**+)()%?"!!"$$$#$$#"""!""!  ! "!"$%&$##" &,,*,/000///-+,..--,+((**)***&#! !"!"')*++*+A*))**(()+,,--,+*)('%',.-,**+*))+-+(()++(&()(()++)'&&()&##%%((&'))%&'#!###$&'&&'&%%&&%$""##%#"!!"$%%$$%$#"#&)()*)''()'$$&&$!!#$##&&%#!#$%&' +%%&''&%&(('&&$#"!##! !$$""##! "#$&%#%''(*,+*)'&&&%#I%&')(#!$%%$$%&()+-..--++,,**+,,-,++*+--.,))+-+(''(*-265221.*(**())()*+*,.-+f*,.+))*--*,+$#'()((&&))**+*)(()+,.154200/015630033126532/,*)*-0235558840--//3:=<=;:8:865477647(&'(($ $$ $)# #!37=;68958<;>!$#$$ $$$#%(+.265310001-)+--//.012331/..03379610/,,-/12440,,//048983/11.,,..+(+..,*((+036997740.+**+,03564358889:=?>?ACFHGBB""  ##!@C$$"?99=?>?BEGGEB>;:8525=DHK&FA@<9668<<;>?:51/,+--**./-,,.022/./0011//159AEFDBDIF=77970.2775557:;96788630/-.1332/.//.146630...--/01275/+(()+--/13542232029E(+(&%%$$"@;::9:!"#""#%$@99==>A@AB@><:731354.)+16"#$&%$$%%!@CFFC@?@A>>><:83' )46669=?=@E$%''IEF##EA??>><952159;;:63210135890&%'(()+/233458<>?BFI$D>:87657:98:=?CEB@@CFGD>:76689754321/-++-3=D?88:;9;!$%$!; !!##.!$$%%%JP+OA86423441+*-.-+)+..)!92.18?C>78661+,//..0/*()(''&$#)/223-##'((*&  ##"20**-/00.((,.132690&?9 #a##%%!!#',.*((&#!=&,,(%!'2.'('%$$%%$&%" !##59 #%%&)*&&)+*('&')&!;;;67>EE=652.+-8=4*&'% "" 8->;3/-/3550+*+)# $%%'')/31)*253/(&()*/34:=3+*\02+&$#&)$ &..'$)-+*,02364./3/)(.694,(&(+--,(''')-.//-&!"%)*(#"$$%$"%),*(+,)&$##%'''*)#   !$&! "###$$#EFHFE@=%.+%##&(%E>7;%($"!CCDEC=9631-*2>$&$9?#'(%EG'()*+(A;>@>?<6;FHK*K85/,12.-.%!1$**$"""!?5/691-9?3,3?A@@FF3-?K@4-)%*1+!C).4CA3+/4.)D4.18=?@G@>06S:8@FG$%'*+'*.&&+38541)#-?E@><31343*(('.38943/+-00.%"+/+&#$&" )0552/,,*"'.0*+/-*,-)+120-(# *982-/0,'*/*#'1993267545998411432-$!'//+-.,('(&&(% &(&#"")7@0!!%,/*%$$"'..-,,*+48+".55&(g*'4-)03,((%%(()'#*34/,-/,&$,794+'),++*%&.264,('')*(*)$! "!:!6&# ""!%'$ %*% !$-,+++<*+.*&(),0/.-,+-.///.,,..-+++-/11/.,--... /.//010.-,)'()))(('')))(ɀ€  ½ҀƼÿ¼zĿľǺɿ2х̀Bؽƹ¸o¿ʄȀ¿ķþǷֶûοýûIJðƺžûſƽõƿķż򌠣ñͺӽíºİŻǾ♧ڏ¾ž޹ˍȼǸʶɹ􁇈ºȸȸ³ú޿ֳ񗓆Ϻÿ÷íϙηȿþ۷ΤƳі惟̲õ瀚†؄ɼ􂈊\0w^]\]`chifdb]YY[ZWUTUWVVVUWYWVZ[YWTQQOMQQNQW[]becdeccdccfea^][ZY\]\Y[\[ZY[`cca^\]]]\[[\]\[ZY[]```a000/012321/]]\[[[\\./01 +210232/YZ\](\\]]_bbaa`bfifa]ZVSSWZYXXXVTTTROLLOSUSPRTkQPPSY\]ZZ\\YWYY[^ab`]ZXVSRRRSVVUUTSSSQLLNOPRRQRQMKLLJHHILNPRTSQOOPONMLNTUQJHKMNQSWZXUSSTTTUVTRRRTXYWXYXVWYZ[]_]VPOSSLGGIIJMPPLGFFGIKNQRSSRRSSTSQQPPQQQPONPSRPQRQPRRPKDEJKKLNOOPOOOQSRPMLKIHKNPPPNNPU\/ZXWSMIIIHFFEDCEGIKLKFB@??AA=76:?CFKQUUROMLKKLLLNQRRRPONMMNONLKKLORSRPQSSQONKIHIKNMJGIMNOOOQSSTWXXUTSRSTSRQQQPONMLLKLLKKORQNJGFGFFFGHHHGFEEGIJIIIHFCBCEHKMNLIFA>@DHLNOQRPNOMMOQPOMMLIHKNNPRQPPQQNKIH2HHIHFHKLKJIILOUZ^_a`][ULDEKPW_fdZSOIGIJHHKLKKLLJHGFVEEDDEGHJKLLKKKMRWXWWWURPNNPTWZ^`00/[WVWWUPPSSPPQOKNUXUQNMNOPRSPOQVYUOMMNOQRSVZZVRPPNNPQ@PQRTVY^cdddcdehllow?@@{qmqvx>BEFILOMKKIFB?>;plifdbcb^YYZ[\]\WURPO8QRQSVUUWVUTTUVW^b\SSX]\XZ^\XWZ`231_YSNKMQSVXX[1b]XUSPMNRXaYYYZ[XTVZ_`\WUV[^\^[TU^bb^ZZa4673//0/./342/.ZYYZ\ZVTTVWXWWXVVVY]a124666530/0223430-,,-.---...Z\/01,23478764338:<;:9732357889;;;::;@>>@@>=;9721675332_26c]a`afcWENb]OGHILLKMORWQ;_SYbaabYS[gt>ADFFF?8853?NRQNJHKQX]^]\\^_``ZSMIMOMORSY``]ZVSNJLY]XQLMRWY\^^[TLJIHINZehd`begf_WTQNPUVXUNMLJIHOWXZalrrk`XVVY[VG>CKTafdfiid]`n}|x~DC{srrleju~~z{xtv|yzwmbZbppkgee]RKP[edVJJV`_ZXZ^_]ZYZaeghfdhpwz|||{wurprwywuuupjhlqsoold]USX`edbcb^XVWY[ZYWXXUTX[ZTNJJNLIKMIGHIIILQ\cgjjjkmmjjuEGE|wsrvy@CEGGE~|{vmc\ZYXZZVSVVQLLPZbej8?EGILMNMGxuvuwwtsrrpmlnqty|f^it}sknvxrmjiebaa_\XRRTVWXWSQOMIECINQTSNKJIMTVVX[_bfhhiiecceis{ytsrpkfehlu}{uroh`^`a`\YTLIHFFIPZ`WPNSdu}BCDC@>?@DKNKGCqO:#D5=?AA<9:;=EJHGGN@JRQMLLKHGFILHEISSG~~g_c\JCTjyoXRSNKLLMGADGEC@@JW]XN8:6[sqjf_[`ccc^YXXVOIMPJEMXZWWX\hrrh[TSVWZekfcddcb^\]\YSNNPOHAx=DILNOSZZTLHP^ccd_[[[WXdnfYVTNKQVYXSPNLR^cfdXJBFMSXWPG>=AEHMQPMGDFLUZ[YTOMNPPUXSSVRLHDDEEGKLDx=BDGIJLONGA==ywBHIIHECzuy~CKSWSLHIHGEy}GIGCBBC~ub[ouq|DIGBzu?FHJMIMUQMKnlIEymp{{wnaZTRZ\YTIGNOGIWYKDXp=>BF@ddw}ta[acc`ZZa^e{HttthccYPNNIBBKMLX`[YYZY\[GgXaqpY[`aZZTcqGTUIEO^gZ@=JQSX_MAOZruk_RSSJKNPYgwusviUPONOPV00RDCJOKFEIG97II?EFJYijcj~~iWPOMJIGJXWNV[SJGGJUcr|pZONDj=T`fc\WTXeyjGFX^`dggfcbehd_Z[hnni[RNNLRhsfbwomyz]FHOSSOBpLtoOBAUbWJHMSYYRU]ee^YVURQSTQ?UaIRLC@EMNUbaYMECpf;LYYVU[accbXNRWZZHADCJ[cec]WNHILMNLLI@`3@LU]3`G.EF.:?;<;:75431b2443c`_^_ag5447;>?<:989:964469:865468658=?<8g]`6;><767633hgfdb```_aeeb`bdcbbcbaabffa_ceefhhg442259855,45655543e224458852dd3678887545653ec`]^]\ZXX[]bda]**)*+-120//+''((&'&()'')*('%##"!#" !#%&+.,,-00-+)('')*)())('(),/.,,+,,,* )('&'()())z(''&&'''&()*++**))**+-.---.132/,*&$%')*)))(&''&$"#%'(&%'(()(&%$&*,,++,+(')*+-/0.-+*)'&&'()))(('((&"!"#%'d%! ""! !"$$%'('&%%%$#! "(*'! !!#%(*(&$#$%%''&%%$&(('(**((('())*+-,'##%&# !""#$%$  #&''('&&'(('&'%%%'&%&''&&%$"!""#$$$%$$$&((&%##! "#$k%'+*''%" !""!  !"$$$! %''&$##""#"#$&((('&$##$$#"!!"$&''&'%#$&&%%%$""#%&%! !#$$##$&''))(''&%$#"#"#%('&# # !  ""!!"! !""! !$%$"##"#$###$#! !"#$##"! !"! "##""!!#&()*+0(#!$(-10*&%" ""!!#$##$%$""!""!!  "#$$%$#$$$')E(&$#""$')+,,(&%&'&##$$##$#!"'*(%$$$%&''%$&)*'%$$$%&'(),-*('&&&((''&-%'(*-0100/0003348=74567!"#&('&&%#!85310-*)*,,--+)'%$%%%&&&'(1'&&'()-/+&&(++)*,,(&'+,)&"!"$%'('(,)(('%$$')('3()'%&(+,*&%&()(*)%&,//.+*.'&%')(&%%&'((''),.(*%  !"#%%& +%##$$#!  K"##$#$%### '+,,.//0//..,+,/10-*'&')**)((*+)&" #'-/.-+)(''()('()*p)'&&(*)&(*+**)')-,+***+*''()((**+-*('''&&)(''&$$&''%$$'(%##$#!"$&%&'&%&&&''%$$&'&%%%$##" #'($$%&&%%%##$$$%'&$%%&#!!##&&# !'(&%#$&'''&&'(('(*)'''&%$$$##%%""$$" !! !"%'%#$&(***+,*))('''$""$&''&$#%'&&%$%(***+***(),,+**,.-+,,*)*++)('(++)(**+-0386244.))+)(('(,-+*,-8,++)(())*+,/,(*,-,*))*+*)*)('()))**+***+++,/100220103897504410/.,)),0368656740///1177889989887566%'%'&')(#!+' !$"0+-24682-19B""$%$#(+,+('(,03321123221/*(*+)*,-166310/,()242,)*.234542-))*)),2895236762.-*)*-/0.*)(''',1016::;626>EGGGHFEECBDECCB@BFEA?@HLKHEC@@?:2-3;:7543/'$(055-%&.552136620/146887646:>?A?=<<=;79=>=<<;8447:;7761-(&*022100-)(()*+-+*+-,)&$$&%$&&$$$%%&)-26876667756=DFF$$#CA@=;;=?!##$$#DAA@<5/+*++-/-+,,)&%&*-.1##%&'('$@:8::;<:9;<;989;>@FIB1+4?<876433431/+++,-..,))'$! $),..*))'(*,-/2445656543346=CB???=:8778>CB?>;72134431.*'%$##'/50)%)4>BBA!"## !&)' ")*240*)..J7//0--6?@;4-*,/12/-.+&#=:4,-:;697--8FJHC<4P/!()/'"$&&%(./,&#'0898;>=625777534546;>?:2...010+((''&(/;A@<:9:=;767:<:98899963231-*(*.//0.(!!()&B9;=!)10-)(+.00,'$! +--0/+*26100121/271%=!'+,)&%$%'),./21+% $'*+(&)+-*(+,)(+*% ? !!!#$#!#%#%+*())(&%$%'%!#*+%BCHIMF5154)$,:B<-)*(&%&%  $# *9720,+.011.,,-,'#&*%!'-/-.017=<4-((*+.484220/0/.//-*&'))$7!$&'(*/0,'%+4653/-./,,4:3+)($#&)+,)'&$'.012,"$'+*&  "%&&$!!%)+,*(%$&''*+(()&"!!#% 7 !"""#&$!<;!%&&&$#GF@<=>!&,.*%#%%$#B=@F&'%#!!"DB>408CA86< ##87$'(+'I).,*(C65B'$=56=A@??92-)',-*' "!&3 .0<@BD?40487523844A(G9<@9660**,(##*,*26/../013&5-4BA04:;\?<3N4?NJ'/0(%,7:/'+*-2'%,:DD>92,-.''((/7?;66.# ! !!*32-2@@2&!! !++%+.*%$$&+2ACEDCC|yzyxvpgffddc`]^^^\ZUQOMNONOPQSVZZYWVUUUVX[][UPV[\[[]\XUW[[[_a^ZWRNNPPRTUZaaa_\ZUPNOSX`b^\ZZ\ZURQU\]ZXWX[]//WRV]ba]Z[0255121.,/20-,XUSUVVUX[^]XIWWWVUXY[_b12223442/../011/-XXYY,,.01/.--..0244221489520136796667668<=<:9:989=BB6L>=@EM*+*-1/--/500-,-.[ZYXWXWWWVUUSRPPQONLJOX\^]]^^]ZRE?HQXZZ[\]\]_^^]\ZWRNORTTSSTWZZTLKOQQNHGLJBCIKPUUUVURNLKIJKIHIIIJLNPOLIGGGFFJORTTTRRTTTSRTWURQQSRPLD@MSOLJIHGHIJJIFFGIIHFEFHJJHGGECDEDEGHHIIIKLKJKLLKIGGECFJIFGIJGCEGHIIIFDC>DCDEFGIIEBA@@BC@>CD@::DNNMJHJMMMNMKJIJLNOMLLLJHIJIFGMNJMOLHFFDB FIJJHGIMNMLKFLLLJHGFGIKJHIJILNLKIGKNNLKKLMLKNTUTRQUXVUWXWROQPMMOORTSTW[_baahjihf\ROQTUUVUTTSMGHMPVYUUVSRRQPONPSUTRRSUVVWVTRSTUVWXXXYY\`fnqqqnmnlkjgffeccb^\__XVX[^bbcbfijdc__\]`aacfil8<=;99slio;;:9:==>??=856547765553cda]]_23dYIEOUUWUIFNNKMOSSE;8micbjplceuBBEKLLKFCBBHPTVYVRRX\[\_^YWYXVTRPIEGIKLIFKRSQQTSMFIQQNKHKSZYSNMMKHJMPTZaa__][[YW]`[Y[\XVSOQUVWVWYVMKOU]fga\Z\]ZVPMPZdeekopqootwxCA?>=}}vnknmpy~xx|}{yz{zwttwywvspu{}|}~{xrrusrmea_[ZY\`djqsmhgozyutojlsuroptuusrqjcbcba^^bb^XX^dgg]B:Qbe]VVZ^__]\[YXY\^_`cb\WTSUWZ\XVVWX]fqxGMLGA{}FHF~zxxz?ABBB}xpeZUW\]_ckt;8j6<@BCEGFFFHKNNOOLGB|wutssqoqrpjc_aeebafpuwyE{wuvrjca\QHHMPSWYXWTMGDHNRTUTSSRQQPPPNMIFGKMTbouuv{~yrsx}{usoeeoupcWTVX^jvzzvnheccb`[OHJLLNQRTWYYRIGLVakoosx{}DEFEEEGHHGEFEu\SiCJMLI~_MNTY_hrwpjf]WVWVSPMJLR[eg_PBlRB1@LLygKnP@ZQlALFCHMNPT\]YW[beiotsqmlpsqeSLRSRV^cfkjd_\[]^]YURSSPOOQ`mmljc]]\^`_``]]`_ZXUQNKJIF@DLPQTURQRSKB>@DEHLNQUXZVUZZO@@PNB<3Y.4=?;;>@BBFJNPOMMU9HNQR[egeb^ZVSRSSTVRG@GTXXRMJFDDHJKLMMKGAFOMOSSUWSROE|ALRQLD@CHFC@?BEEGLNLHB?CKPKEEGILKKLKKLLID}smjkj_YcaL?DUivq`VRLKMLGCCINKLRY_1YC288cuqf_YT\eecb_ZY[]WPPLDENRoMKT]gxtdWQNMQUX\\`egb\[]_\VMJMMG@BNUSNKLQVVUURORZ]^dd\\]WV`hg`\VLGNX[YRMMNR[cgaQD@BDGNPPLB@EIMPRRPHBBJX[VWZWSOMNOMMNICCEEFJLHEFFFHHIKONMNKC@??ADFGDxltDLMMKGBAADIEEHJOOIC@?~znfov|zifzB?CGC?BDCHLLNME@DDyryGNqquxyrjsj^ba_`bab^VVRBCKCAJWddevnZROF>JX_SAELQYesrbTMQVX\cfcYR_e^Z[agiaUQODlWecovgp|x`]ig[ODC_rlh\X]_]VGBVe`VUVRSWV:QKIJKE?B?AHJMTM;mESQIFBAF>oANOLIGHMUWPP^hcc]QKCIZhpdUUSSSNJ*C;wGSVSQSTJ?HV\/0ZQJ=0/679HTWTMQTPQW`33344678:<=?ABFD>;8433ea`beea^^^_bg7:=>>:878:;:8668:;96>78>GF>;;:54579:987764feeda`bcaabb`^^][Z]cd`^^ae`Y[adfh456765567875433443$235679877764c``14674c``_^\\\[ZYYZ]^^3*++,.//-+++*'%'()(&&')*,,,+)(*,,,*'&$#$%#! #$')))++*++*)()**)()*)(),-,+*)*++,+,,+)('&&&')'%%&()))()())*%+,..---...--/022/-,+)'(**)))'%##$%&&'(7)()))''((*+($$')**)((()+,+*)'%%&'&&%%&'('('$#$%$$&((%" !C#%()())*))*)&$###$'*)&$#$%%%'()**)))('&%%&'&%$&())**)())*(%#!  "#$/#"$&$""$%&&$$&&&')**)((&$%&&%$#"""!! !$$"%$#"#$#"""#$""#%&&'&$""#$$$"   ! ! !  #&&%$$###"#$$#$&'&&'%#""##%%&&&''&'()((())('((&%%%$%%&'((& %%$$#$%$#!"$%%$$##""  !"!""! #!!#$$%%$##""!""!"#$$#$$%&'&&$#! !##"! !#%&%&'))%$$#""! "#"!!  !! "$#   !#$##! !  !!  "#""!  "#$$$#$%&'&&''%$%')*)(&%$&'&$#$%$##$#$$&(('%$$&''&%'('%$" +$&+//.*&&')%(('&%&&'(()*++-.-,,.00247995/+-4 !@<;;:;;8322110.,,,+,-..-*'&$%&&(*++)('&&')+,*'#'+,**+*(&(**+-/-*(%##%b$'++,++*(%$%%'+-*)()*)'%#&*+)''(**'#%),,)(*&$#%&&&()+)&&%&&&()+./&  %#$$$#"!  "##"!"#$# $),-,-./-.-,*(&()6+-,&" ""!  !%&')**)'&%&('%%&&&'(('%$#$$$%'*+,,,+.**++))**)('# &+(&%&&&%%'('&%&&&$$$%&&%$#$#""##$%%$%&&%&''(&%&$"#'&$%''&$%& +$###""##"#$&#!#"!$$ $$$##$&'v%$$$'(('&&%$#$%$""%'$$&$"!!  #&''%$$')('''&&'''%$###%'&%&'&'(&&&%'**)'()*)'(+++)(+-+*,.,)()*(())+,++-03665778871*'()D*+++,+***++,,(##&(,.**..,+*))()*+***+,++,+***++,--,,,-.036777545553219/-/1-,/0367668873200//12245678426&'&%'&($!""$" $% 96238=<57@#"%((&&#! $),.0/-.232231../..-,+'%&'((%#(-.+,//+'+/-,+*+/22/,+,*()+,/24322100/.230/00.,*)+.000130*(+/498310110.*()07658:::88=??B"!@BB?99<<=BFHHHGGC??BDDGJKIHGFDEGDA@?ABA@><>AA>>@@??=>@><94332101469>>:76:@CC@>=9548:879;<<<;:63220.,+,,($%(-02/ '11*$$%&'(())'&%&''(*)&#"$')-/-,,-/05:=A$((%!=?EGG%%$CA?>>? !""!CCB@<6/,,-,,/493 !##"!"$&((()&# ><;<;;:9:::853454336=ABCIU`_ZVQO&GB?<<=<7210*%$&(*,---,)$#%),.-,+,+**))***('(**-6>BA?AC?<=@CC@>;67>CA92///17?BB@;7666553,''(((**+-..*%#&+06:9:<>?B#$$#""$&'&%&%<+%2#*+)'NPG3&'-149?A<850--./.,+))-3:<7-$;,&&*+GRL<,C5)4-<%,'#&)*+-340/0479<==<;:<>>8.+.../489;;74224541.-..+(''088785233354477421.+))('#%+-,..,+,,(!!$&(+,+,-.,*--'&&""#&'(-3531/,*)())*,)"#+..)&%#""$%''(('# #)('*)+-+,*$A"(,+'"!%$!"###%%%$ !&)&""$&('''&%&&&#@<99:90+23'",6>;0++('('$! !%'%1<92-*'*0100/,+-.*&('"#),'%+18CF=3+(&%'(+./1453//00/,'&(($ &+*'%'*,++*)(+11/22../+*164/,)# %*-,(%&&(-02/&!&''$!#$%%$ !*,))+*(&%%&%&&%$$!!$&" "#"###$&&$%#!"#$FE$H>6:"''&&# #&$CDG%'(**&"@@83:>A=1/9 "  ##&(())# ##>:?&*D77:=?<8<6/1/,+)''%!!"5AGKHBB=8621.-05?MSI;2-++,./,,-)%!>'01.-0582%9430*,3.,?V36RM)B*:5+,-/5;6""&#  *06;;4.*%%&#*3.)/8## %/<=0&%(&%(00')2."'.522|~BDAxoighifc`^\]\Z[][SPQRQPQQOOPRUY[\YUWXTQTX]0]VQSVVTRRX`45_VOJKPUY\]\[[XSOMLMPVa`ZXUQQSTTQOPTWZ\ZXY.10ZW-//\XV-17::83.,-12/...[XWXVRU[]\[ZYYVTUY^^^`a`b24430ZUW/23210./0//.-//.--.03467532122455567:;<==:777678889;>@B>0H@C%(())+,,-../0//0../100/-XWZ\[YVTTSRQQNLLMPVY[]/.\\ZXPHJOSWVTTW[\[ZZ^cd_ZXVUUVWWTRTVY\[UOORRQNMNOMOSUWXTRSSQOMLKKMJGHJLMLJIFDCEGJMRU"SPQSTUUTUVXXTPOPQSOKIIIHGDBGMPICDEFGIHHGFHGDCDCBBDFGGFGJLMNMKIGEFEEHLMKKNMIGGFFFEGHFCCBAABBA@BBCEEDBB@??@AEIJGEIPQOLIFFFGJMMJJJIIKMMLLMLIHHFFFHMLLMMKHGEEGEDFHJJHGHKLJHGFEGJJJFEHIHIKJILNMMKJLMLMNLKKLNNMMNQTURPTWVUVVTQPRPMNQSUUUV\dghhe`]_de^UPPQSUTTRQRTVTQOOORVUOJJMW]SKT]ZXVRNORTTUVWVUTUVWUQSTTVXXWW[_`djqr9;>>=>=93]_455786/\][]^_1b\YWQKLW_YQSVSORTNGB@B@shiq==\:BEDCEHIIJMQQNMNOOMJGB}uqpqpmhfgfb`bhnrpkjjfccgjlqw{siehigc__^7\[`lyypkkd[VTRRQNNPROKJKNQTY\]\[_^XQKINQQPT[`abgjkpwq\JCHRZ\YVZ_adpyytmfb_]ZYYVSVXVV\^^^[[]ZVSYiqmjnsvz~@}vru==<|~DFCEGEy|s[JJMNRSVi{vocPJJLMNMJILQXZSJEDCCA=EVT:J89FW`jGXVLQlvjf^VTVZdgfcfovsjlrxwrmfbb`ahptsrldfnsx|~wfXSTWURRTZdkie_bgd`^^`^TJHOUURUZXRMJP[]^ba\VSUTUYZXTQOPXbfa]\\\UKFII>@KGCCB@??@BFGFIORSUOMQ3GW\ipc\WTRMLMLNRUNCFORRQNKFELNIIOPMNNLQWVU[]YVTTRFwAKLHDCwsBEHNNIGJQYUMLGACIKKGCCCDEDDEIKHCB}jYRTZgtq]SRThBJEq\RMS[ZOC?IRV\b`VRR[=Tlxri^Y[`iidaba\X]ecVJCDJPNILX^agic^UOORV\ab_`ce\U\`ab[W^^VQKFMYXLDGQYVRRWXTQVahf`[YUWbgc\VTTNLTYXPIHLPU_e`PGCA>?FJOPKIMPQRRPLD@CHU_[XXUNHDFHGEGPUSOKKHEEFFEJNHA}y@KQPPTVPIB>yDGGFEErv@BCHIEDFEGLNMGAFOMIOWPEA@xnighmtyzur|DGFDFHNQKDCuz>xxCrpuwre`tuedfecfm5XF@@553R,3/Q-:BNmEIF}{MTPeT^b[^ae{fUQG}@HT\]`UHHNNNVQDEFI[gpfHmhYQV[YSVijReG{|GSM=@_u^D=8h>QfnbXX\_[TJJF:Ne_Y`m:6/PB>CIKIB@GD@@7'EQ4BJSWXYOFCBDA<@EECNm~o\TQRVVNFQZKv>GQ]fs~j]OBCFOWVC5@EHOS]gfc][_\XZdgUGHJS\X[``[SMH?ypAQ]lyuVFay~kZjaJFJUYSMMQPS_]U[ebYSSZYM?@S\RAgjEJIF?!"!A!D@;99;:7:?CFGE@><<=>>?ABBA><>A?;842489:;77;>=>@?>@?9448:;>@A@@@=:965766:?G''IE?;99:=>!?@B@<;:72.,**(&'&""%'(())')-)'(&'((('&%$=%&'''(-1/-/39=@DI%$%&%#A?@AAACCBA???@A@?==;99::82/15!##""$&)*('()*)'%"?<;<<=;86653336:<;99987579;?DFA966641/02104=DB9674.+++,,)()+)(''()+.021033/,*),.--0454589:?EC6)$$#"%-452.0445=CDA=84311231...++.111//0.,*-5962469=A!A=99ABC$&$C$&&F@AGJE=/%')*,,.:FA=6+'()))(''*.22.(%$$#!!.1#+&./4&20()8@850+,/169866:>;67<@Ai?;646658=A@?;57>2121.-/!#!5%(%?>G*/+C3*150346DTK5+)$= &/456/''*(&--$$%&4;>7$66.+141-2??.:)JFHG(0+ 3D3 4'3;4..130+%%$'4/*+/  #9B8,*))*+&"*3*;&+25:A@5.& !&*)!$,554/-0-)*00%"(-*,01.)%#:>6"-4>E?)0@C6+8JH4%"&/2-'(++/75.2970*)--(!",3-"34$'%##Z'!!**&"!< %'&&&# !+,'.,174/''-5;7.*()*(&'()$9=*15:943/)'"$#"" &! $3+**,-,--+)**(**"&&# .,+//00.../01/,,,++,,+-, -,,-.// ,+,+++** 0.,))**)()׀ +ˀ ʀ   zрüـĽ½¾¿ÿ̀¿؀κɾ»úhĿø¾÷þļþ󁅃ǯôƾ̿ƿƾþ遅Ȼİװ탏Ⱥ¾Àһ·ƹ½ʴ±öú¸³¯逌ܨĵᓣӀ༬ƹ¨Ǻ®DzހľòƷžǻк소ջʴ;󡮵݄͕ür _][ZZ[[ZYYZZZ[[YZZ]`^]\]][YY\\ZXVX[[[ZWVWVWYZZXVWX[^ac`__^\\][YZ\\[ZWX]]]^aa^]^``^\]]\^b2221_]\]^/0110_`11///^^]]^]]^^_``0011222=10_ababd33ea^\Z\]\\ZYZ\]`ba^^]ZXXY\[XXXVTRQTUVWVSSUTTSRSUUXZYWVVUSSRQQTWWVVUTRQPOQRRSTSQQNLMNNLIIHILOPPQPPSX[ZXUSSSQPPNLORRNLNRUXYXX[^__^_chmnnke_[XTRQPNLJGFIMNMJGHLNOQTVWVTSSTTRQRRPONMKFJSTSSTVVUTVWUSRQRRQPRSSRQPMKKJIJK+LJIHHHIKNRSTRPONOPRTWWVWVRMIIJIJJIFEEEDBDGJK)IHIHGHJLPTWVSQPNMMKHGHHIIJKLLKJIIJJKLKLNNMiLKHFHKLJIHGCABEFGHKLLMLKLNPQRSUX[[ZWSPOONMNPQPNLJIHFGJKLKJIIJLNOPNKMX^[XVTSRTWVRNLMMNPRSSQPONONKLOONNPOLLKsJJJHGEEGHLRVWVUTTWZYYXSNKHFCBEGHGEDCDEGGFEEEDCCEGGGFEFFFHIHFDBAABCDDDCCEHJKIJMPQQPOOPONNQTUTUWVVWXWVVUSQSWYUPNOQTURPRTUVXYYYXVRMMNNNOOORSQQPNMMKLPRT[`XQMMMLLOSSRTXWVVWZ\ZZ\[XUX^`^[[[^cgffb^\XVapuruvyzwvsmhfhgdbbegb[VTRPQSSTX\\XTUXZ\]YXZ``\}YVRQRRSSQQSZaaYOMSTPPRSW^dc\VQLLORW\^[VQOOONNNPPRY\YWTRRSUURPRW\\ZWY0430--.//.YX/9A=60-VV.0./010\XURSQPPPW_`[UUWUTX^aabace3ed346642231.+,2641002345422333445458;=>A@>;::<<:8:;<=?@@>91*'''(()(),..-./../0.-./.XXVTSSSTTTUVWXY[.][ZYWPHGOUXYXXZ\\ZY\`a]YWVTUXYYWTTXYXWURPQQPQSSRRUXZYWXXVRNLNQQQOLIGGIJKbLJGFHKMNNPRTVWTPPQSWZXWXYWUUTPOPOJEGKJGCBFNSNFCDFIGEDFHIGEFECBCCBBDFEDCEIMPPOLKHCCEEFILKHGIJIIIFDEGDAABBA@ACFGDDDBBDGJMPTX]_YSQLIIFGJLLMNMLNPTURPOLHGIMOGCIKMLIHFCAAFFEEFGFHHIJJGDCCDHIGIFGJHDFIIJOTROLKMLJJKJIKLMNPQRTVXVRRVZTJCEU^WOLMNPRTXZ^ffca_XRPPQPOOMKORPPONLNTUTQLJLNONLLLONFFLNOPSRNPTUUVYYVSSUUUTRRTVXXWTTW[\`ejl7<@>:qnjijmia`ba^ZZYUQTVXWSSUZdprle_ZZcjjgfgm;=;>?=:ml:>@>7i9wuz?~?BCC@>>BHMONIDBwjaZVWXZ[^huteZRKFCDFFGHHKSZZVRMILNKIH;N>M[2:<5^eBNMTl{{qe]]cjnrtx~zy}}yskecaahqxzy|~wwzvx|vbZZYWWUSWdpqnnomlnpqpkd^YUVQP[[TSUWXVW^dc`^\ZZWODDMT\ik`XTTY[TLGCCGMRSONJC?@@BDDFIIJU^THJL\DV\bgghf]TQTTQNMNOOKEGNQRNGCA@BJR]hd[XRNOQPR[]VTQNMG{{HLGEE@>AEILKGGKNNMNOKFFIORH>wvutv=AHKF@|raZ`hptmWM`oq@HDth]RPTPPSPT`kidd_`i8F\inpj`XY^cgeb`^ZW[__VICFJLOQQSW[\`bcdYPQU[`db`bee[UXZ^`VOORYemjb]VNILRSNGJSZZWX^b`WQUYZZ[YTTX[WPPRPLGAGV`ba^TLIIHFHLPSSPLKLNNLJB87?@}sns{zxnfpwmd_\VUYQ9K74N7>KZemtzCMRRMHGNQIs^UXfrvpcguzkWRRPIEDEKPOPYeg^UJHPORYaddjkZCjULXYGL]SPoEGA?@ILDFW]UNAipHT\XRSSSWVQPSNFQ[PMZdk4OBEC?=BGEDC;)M0:DFKRV\ZSUUOMGA>==BINHBO[djf`ZTPLKE<=BGMRZivpf`ZPHIOPRI9;AGLLOSSKTdgmomibTHFJU\ZWVUVWPCne=EFKRZhu`Ramp`LTnvi\SHDCEFEHKIKnSUQOKS]YUYWLLVVQNMOSUURK?9=DFHKID>=:i9EJJIF?:<=<>EHEB@>84eeffcb`\YZ[[]cf479:99::889:<=;8679:977889:9;AB=;:853da28?>954443efihecbbceeb`ab_]]]^__^_bc`^`cf46-8988:;978::9998877764344432`^`cf3ebabd332212232baacba`+*)(()*J(''(+-+**++*))**)'&()))'%%&%%&&'&%&'()+,*+,,***)(*+***((*+**,,**++,,++*()++*)**)*))('''())***;(*--.//-,*)*+**)(()*,,+*+,*(')++*)*)(&&(*+,+)((''&%&'&'()*)('&&&()))((''&&%'(())'''%$&&%#!w#$$%&%$&)*))('((&&&%$'))'%&(*,,+)*,--,-0479:841.+)(''&$"  "#" "$&&(***)'&'&$#$$##$#""''%%%&&''()(&%$%&%$&&%$$$#"""!"!! !"#%(**(&$ %%&&%%%$"!  "#$###"!""#%)+*)'%$#$$"!"!""# +"! !"""##"#D"! !#$#""! !!"""#"!"$%%&&&'(((&###$#"#%&%$""!  !"#""!!!"##$!"'&%%''%#""#"$%%%#"!!"" !"#""$#"!*   !$&&%%%&(*))(%"!! !"!  !"! !""! !""! !  "##"#%&%%%$$%$$$&()))*)(('&%&()'$##$%&%#$$%'()**)('%##$%%%$$&'''&$##"#&'(,/+&$&(('(**))*++*+,,*(),.,*)((+-,,*('$#(1 7678:;::9643431//131-+*)''(()+..*''))**((*..++)&%%'(('&&*//*$"&'%&&'*/22,($!#%'*,-*'$#G$%%&)*('&$$%&'&%&),+)'(&&$%*('&&$#""%*,)$$&&%(,.%//.-    !"""##" '*+-..-,-00.,+***,,,*()+++*)'&''&&'('&')*)'(*)'%$%'('&%$#$&''&&&'&$$&(***+,--.+(()*,.-,-.,**+('((&$%()(%#%(+)$#$&'&#"#%&%##"! !"""#&%%$#$')++*('&"!#$%&('%$&''((&$%&%$%%#!" !!##"$%%#">$%'''(*,.,)(%$#"#%&%&''&''()'%$# !"&(# #%%%##" !#""##"#%&'(%#u%%$%##%$"#%%%(,+(&%'(''((''(()*)*+,-,))*-*$ ,4.)'()*,.135::8751,***))(&%')(((''(+++*'&'((*)(()'!#'(()**)*+,,,./,++,+)+-..-+*,/12346 54313860/210///,*,.0/,--04;;730,,266545867!! 4*)%$%&&'$&&&'%!#"" "##%&"##!!! =<<<><98>@DFEEB>=<:::736<@DD?<;;<==<:437<><=?>=<:9758:;=>82354321248@HIF" ;9:=ADD?9630-)'%$$$#" "&%#$%'&!#&$"Q!!"##"  "" "$%&&)-4;ACA;53227=@?:78:<>@@>=>?>===<<>?>>?A"!!! !!"##""#$$$#$%C$#"!AA?=<;;:9:<=<;;=CFD@>==>?ACDD@=CJD;9;952/12342037850+++,,.-,-.-*,0662//121/-*)))(')-26862010+(()%!!$)/246:95018@>60020,)&&),.01.*,00.,,1:!!:44;:> @ !"! "'*,,(%$GHHF=51-,-.0105=>60,(&%%''())*/32/,(%')'&' %%15"(&*9CB;2--29=?@ADFD@>A@?<976559?DEDFGBBHIEBBEJC6121/-+(*2;;:;<;<>?@@=83101..660..00.-167520///*$#'+09:3.*)-/,($ !%)*&%"##+/48885/)'**('&())&##&()'%" "&*2:70-)''('(.0+*(''#;;$'$"" !$')($#&((&'(&""$')$:;:89 $'I$ >90,/59<:-$-68!'%>6/**.++,*+2751/+(, .6895.)),021//-+*-00+# !$&(('(,012,&')-131./22,)+,/0+')+/6;72/*%"$(*%!#*..,+/20*&)-...-)(+-*&')($!!*/00.(#"""!"%')(%#"!!  %&$$" !" !&'%%')$  "#";8;="',,)((-1)27#*+*)(%BC"""$%&&&#"$''$#+20)&,.&"""'*&@87A&%@:9 %%#$&%$#!  @;69@?=AGA618?820/.-*%$% #+26:>$*-,($$),&:.*-6<>925?A8,)**&#$'+0-+/683.'%+*,0589:8.#9/+32%)5-)@()$""))!".3-(!25%.40*+-,10,*-*$+3*&-.+" )25740-)'&'% #&(*-5<70-+'##'(*$""$)*&*236632/&  '-,))(*,)!73 $$',08@1'077.$*=C8/)$""$$$%'&'-.+)(-30.1/&&.0,(%&)**)%##$&'%"U 8&(&%" 65'((&'0:;60+'# (00+ ,<-0140*'&0()&(** ,!"##$+,. +-+*)*)*-.L .,-.12000/0330.//,***+,,++-.,*+-.  ,*+,-,,+*++**+,++؀쀅񀊁 􀉁р䀛 ؀À /ـ΀ýŽ̀¼рۀpž¿̹¹¿ÿÿ쁍ūîކƻƾހƸż􌑍ϳµŶȷզގùꂍ񍌉ѺžžĶ¼ƶ􂇌񊊄ʺŸƹɷ¶ҦƀйʬԼɹƾԀ½ǽ̚ű˽Ƞ弴ǁű񚪳劎ݦҫXX][[ZZ\]\\\[YY^`_]YY\_`__^[WWY\]\[]]YY[[Y[Z[_`\XWWXXYZ\^^]]\ZWXYZ\[ZZ[\]\Z[^`a]ZY\^__`ab12a_/0^/011_^_`11/\[\\^/`]Z[_1a`1/01232cd2b``a`_^[ZZYWWWXZ\[YYWV\f5iea[XVUXZZ[]]XS~TTTWXXZ[YXVUTSSSUYXUTTVWXXYZZYXWVUTSSTX\YUQMJHIKLMORPMLOTWWUVWURSTRQQPPRSRQPNNPSUVWXVTUWVVWSKKSX\``__^^]ZWRKIJJKKIIJJLPRSTSQQPNkLKKIEBEJLNNORSQNLJOUZYTQPPOMLMOONMLJHEDDEGIGFGGGJKMPRUYYVSRRRTVX[YTNKJJKLIDBCEGHIJLNPQONMLKLLMMMNOOOMKJKLLMNMMKJKLKJJJMU]c4431_[YWURRQMJLONNNLE:5=EILMLKMMOQRTVXXUTUURQQQPMMPPOONLKKJGHKMMLWKHFHKKLNNOOQSTSSTTSPLKMLLNRWXWVSPPPNKKOUVRPPNMNMLKLLKJIHHJMPSVWWWVVUTRRRPNLKKIECDGHGEEHJ>=="?A?81,)''LM)+,+*+,-/00///./..-,++UVUUUVVVXXXYXWYZYY\\XPFITYZ[[[ZZ[ZXVWXXYZZXWUUTSSRQPPQQRSQPRUUUVYYVRNKMPSSROLKKMOPNJIMNKJKMRSPMNPPQSTTRSVYZYXYWX]^[WQKGGGEEDCEHNSMDDDFHHFEDCDEFHGFDA@??@ABuA@@BGLNOQQOHABEFFHIGEEHIJJJGFHGGIJIC@BCBAAABCDFIJIJIHIKLMORWZ\][YVPNNMOONNOOOSUW[^^^XNLNPSOJIMNLJHFDB@BFHGFECEHGFGIFDFHHGFFJGBEIKLNSUURPMKIHIKLKHHLPQROQQSSJ<59ISRPPOOPOPUWWWUWYYWSNJJJLNLKLKKLLMMORRSSNKIEFIGDJF@CEFGEEHMOPRTUVXVRSWYXWXXY[ZYYXY[ZZ^d8>=;:99ljwzk`_\_^dba\XVZYTRUZ`iqplga`gmmjhin;>??><;qkp<=?>{=<<>><=?<::87jaYW[/`XQZ0bd11b^TU`gd^XUWXUOHFHHGDA?;qe:[WMDDEBKZk@NTMIOUVTV\b^UQQQRUYZXTPQUXY]`^YY^[TPMMORX]^VPNLIGIKIGHLQX\WURMQ\a```glcZVX[Z[`hmppfYSUZ[\^bbYQPPPTY\`eils|AEHF?w>BB?xwC~yvsrqrw|~{{|}{}xnfdfnw{yrnoqtx{}volqqgemrqmkkjkqxxtvyz||xvvvusngccglnpt|@ypmopqrnfba[OKKKLLIGKNMKD@@AEDAADGDEOUVUTRQRPMLMNNKJKNQTTTUW[iw>??xkdcafmopswwtqqrqqqojjpuxyzz|YACDEFGFEEGIKKJIHGD}wrpoomjoyzsnjjnssqrtutsuxzy{}x|zh]WSNJLRWYZ]ab^XQPPNHFbEFGLOKFHIHJQXWOKLPV\_]\[ZULFEHILQRJHKOSW^eeb_^`jpjc_ZSKDBJSYXPIEDIRUSNKXxGHE@wsuyzus{ACHMMJHECACEGIxspkedhnptFn]SNKFA?AEIJGOZWRSTSUWSK@keFIJORI@?DINNGDFIMONG?=BILDpfel>DFINNHGEtaYZdoobZrDB@A?xpogUMV\][^kqskb_a;EHP]gki_XVVZ^`egeddb`^ZQIJMOOQTSSTWWX\ccYQSVY`bbdgjf]WX\`^WPHFNYa`\XTQOMJKMSWVTPKOYbd\VWXUPOQS[ce_SLSVSOIN]ea^]VLD@ACGLOQTQLJIHFB>82240-3@LNJEA@DFGHHHJNQRROHCCB@zuv?EMOPQPRU^meHpmxAFKLJIIIECGLMJG|yLNIJSQIGFDGIHLMEB|Dxc[`zJJGJn{DFE}mzCBunkjq}KH}xrmlaVYbcfdWGHOK>=HFBPiy|}KIFIKnf_Zcqwmc`gw}n`VNE?|tiUaefe]TVZXOKJHFLeyrTDs_\\XY[enuyzFMQURR[_\VAJPNMR`khfp~eFCIN\hdWNC?DC?FLNRTTQOVVNJKNX^XS^ib`gjmj_VLGLR_viLGHD?=>AEGG=UA?M9GJ@8869>@FINVX\flhYH;tBMRMBkyNUXYWMIV33100`R7(B831=[CNHJS^b123343017:::;:;>><=BIIDA>9544heb_]\YX[]_`ae489879:9:;;<;9657:;<9569=B@ndYJRi986i43359>>:6542deggeccabegda`cc`^^___`ceea`abbd4667776677767999:;;:97544433eca]YZ_aba^^beg3335543212223321b`)()))*H,,**,-+)''*,,,-,)&&')*))+)''))('%%()('&&'''(**++,+)''()+**+++,-,+,..+))+-,,+**)))'&&'()'%')*)+,-,,---+)()('''((('/,230/-,**+,-.//+'''&'&&'&'')**))(('(),,*))*++*+*),()+,*(%#" !!"$'&#"$&((&&(('()(''&&())(&%$%'('&'((()'#$)-/2221110-+($""!""!!!"$%&'(('&$$###"!"  "$$$%%#"! $*-,'%$%$#"#%%%$###! !!  !#$&'*,,)&%%&'((*)&#!   !"#$%&%$#""#$%%$%&&%#"##$$$%&%#="!!!%)+++*)'&''%#%''&&$!"##""#$$%&'())(&''%###$#"$$##"! !#%$#"  !2"#&'''((&"""!"$&''&$#"" !%&%$$""##"!!!  "$&+%%$##"""  ""!!#$##$#"!  !!! !"#%%$#"#"# $%''" "%&'(&&(C)*+*('()+*))'&%$$%&&$##$&(''('&&&'&'()***'%$%&&''&%%#"!""#$$%&&&$##"C#$$$&&&%$%&&&')'$$(-/,(&&((()(%%'*-/023335776553100011.,,+*)'&&')+*((''&&%%&)-.+'%%&'3(+.132.++-*&'*,.00-+++'%$%(,--+&##$%%$##$(+)'&&%%%&%'++)('$$(&$"!"'%*-*&$%%&)(')))*,++     !"$$$"!(+,--,--,+,,,+*++**))(''(())('(*)++)'%$%'()(&$%%&()(%#&(&&'(+-+)*+***+,+*,. --/10/+&$%%$N%')'#$%&'&$##""#$%%#"! !!"""%)**++*&"#$%$%&%##&'&&'&%'&%&%$! "! !##%'(''&' (*+-/.-*('Q&''&&()*,+,-*$#$&(&#"$%%#"!! "##$#!"#$%&&%$%%#"$%$""&$ #%'&')+++*('&&'())&&(***+[*))*& !(+***(()++.//0././.,*(''))'&''&'&'()*))*(&$!"%#:$" ""$%#"$''')***,+*+,--././/010//0/./232:<500/01422/--//,+-/159985114664458 97=! ;*&$%&(%!''&'%&)'%#"#$%$"#$$$! ;3.,&!$$"(2<%.2-*.32./363#/-,+,.0/-*()-/03531362-*()*-0451-+*)()+*((*,/2.-+(+13221450+)+...169;;5-)+.//132-)(()+/14789=B"$&$ <!! >>C$HB@?>>>=@CEJLHCA@ABABGHD<755:?BA<99:>@@BC?<88::426998775D58;:89<=?@>==>=<941136669=;6678::71-+&"%$"! $!#"#$%'08!"?720038:;<=<:9:;9669=>=<=?BCBBBDDC""##$$$""$&&&%###"@>??=;:9;758<<;;<<;<@EFDCFJKMLE?BHJLLD91/-*(),./02453/+++)%##$$$%'*,(%&(().32,((*,022000.($%'(*/0+(*,./1675325;?<752-($#'-0-'"!(+*'%*<$%"7469;85;!#'+)&$#!!#%'(KD<876336:;=D%F90,--)%%&(++(,31,,-,.0-&/*!&# #"".:?@BA=87@??>=@@:2./4;@?<::=ADDEB:79>DJH;1.+*,,**+.49:9;=95589;=8476&31,,/0/,,042/.../-)&'*09<8-#$(,1.$',+,)$ '*+,09=6,),+(''#$**'&(,-& """&-030+'$%&('&)*+/,&# 41#%%(*&! #&)*$!#%'((%  $'"7215"#$'&#$$<3.-3::2,9$" ! <787.(-/0/19<=70-/#$'.3650,))*,-/112210/-'##&'&(*))+-.-/11,()*,0100352-*+-0/*%! %-430,*('&%%&)--+)&(.45/*+-,)()),01.'#()(%!$.<2/--)#!%'((%! " !!"""#%''&%! <:; #'()/:4"34>#&((&&''%DC"$'(&$C>>G(*&&,+%##!"##'(#!A>B$?2,.?)*&(E8?#$#=4=""B;789>DI*'A=;982+-2220(#!" &7BB??AFIK(&#%&?41.,2A81,(# A=7F/57651,/21*'''%'7EH<*#<3441215UXZYYXTRRVSOJGDAACEFHIKLIGHJMOPNLKIHJKMOOPQSRQONLJIGGHJJKLMMKLMKHHNZ10]YWWXY\^ZXXXVUVY[ZYYUPS^f`XTPONNNQX^`^YTLIIJKLLLMPSRNMNPSXYYZ[ZXVZ]^_^[Y\][XVSPOPSUSQQRTVWVUSQQSUWWSOLMPPQSSPNMNOONNKHGHI?JKKJLNNORUUSRPNNLJKJIIJIGFDDEFFDB@@BEGFEFGIHEDEFGFGIJIKLLJJMNNMJIHIKKKMNMNOOQSRSROPTVY[\[ZXURPONQSQPPQUWXYWTRQSSTVVSRTWYYUOKIJLLJIILMKIJMNOPOPONLLLMNPRPNMKKJKMNNOOQRQPQQOQUWZ][TOJJPTUWXYZ[]_cj7iba]X]fhijiea_^\[[[\ZXVRPNNOQSUVVTRQRSSSUXXVURRTUVWWVW[_bda^^``__``\YWUVWY\\ZZ\[[_a^VNJMRTTTVVVWWZ\YWUQMMPSUUW[^\[^0//\YX\///..022210/023320//..XROONOlRW\]ZWUUVWUW\].02430//13554467664210/0/-.25421234441//0135798655577657:;;9789;;<;=<==>>===:4.(J&(()*+-.//.//0*.-,+++,XWUUVVVWWX,-ZZZ[-.///]ZYSLOW[\[ZZZYXZ[ZWXZ[[ZYXVTSTTSQQQPOQRQPPOQSUTRPONNONOOOMMNMOPPNLMOLJKNPQQONNLLMQTTSSVWTRQPORTWZVNJHFCCFHJLNPOLJIIJHFEECBDEILKGDCB@?>===>==AFGIKLJIIIHHHIJJIIIJIIGDEGGGFEECAAA@@ABDDFHHGHJKLLMOQQNKKNPPRTRSTROOPPPONPSWY[`c\QOOQQMIJNPOLHGGFEFGFGHGGGFFGGFFFHHCADHFCBHEACFIJJN8RUWWQJHGGILJGGIKMPQPNMNOPQONORRPPQPOOPMKMOPQPNMPROMLKKLLM LLKNQSRPQTSRMHFE<4:FKMNOONLGFMPQRUSSSTUX\[Z[YY]``][]^\[ZZZ_djm77:;qnpmjfdb_`a`^^^[YYXXX[\_cgkoomp:ronoqr:<=><:pdbszxO<<>???;:732573[NAO4521123aZZ_c`YVXZ\[UOLKKIECA@?=:9suqbNACLT[`bqHVZTQSUSQPNMNQSTUWXY\_adca\XWWXYZZZWSNKJJMLJHGGHHHLRWZXXWQOZecYGAS^^[[affdjjc_`^ZZ^^]_hv{srsuuoghnrtsstuwtqt|CGEyy}||vpklqsstuwuqlgehkptunijjd_\[aedcbfrvqlc^]Z\bimpqle__gqux{zwvtmc^agm87ihovuqkgb^\\ZPNOKNQOMJJMNJDET_]VOHCDRdigeffb][XWTNJILLJGDGE=@Tj=A@@}yuplijmnmlkkhfhpxywutusqoprttvvx~FHGEFKNMH{trrollljigdeijijifddcb_^bjlhaagrwd[]]YY_eilhb[Y\^^_`cgjdYQOTZ_a]SKGIORNIGDB><@FR_eea^][ZZ[ZXQJBwkbk>@>AINOPU\j{|ti_YTMFGNW\\WSSRONOOLQcBPPMJEA?zwx{ADCCEHHHIHE{uuxvjZT[abitwum`O@99=AHRTPNR]ekkd[SNHFD>7:Tsuhcff`btDKJvmnw~zpjknnha^h{tg_]]_aa`beddjrvxzwpnstk^USUVUTSRTd@@orzsjmqps}xuvrg__chijkovn\VXVSSQNP[`a_TJIJPZbe[JDKRQONOQSRMEABBADEEGIKMNKECCO?RPOV`mk[RNMKLMJHNRPQQMJHCADJLMNSX[VPOQQPOKINSTQLKNFrdfCIKDxw>AEHHKQRONLCslnpph]h@GHKG>uttl\\otmc^_bghj7:BLS[ejg`YRNS]cehfb]YXXUKFLUXUSVTPQSTV[`a`\TRYbfda__`][ZZ[\ZWTPOOPSRPNPPOLIGGVdcYPKO_mh[XVWUKFPZbffc\SU[ZUNPZ[XVSPJEBABEHIKNNJGEB?==<843+AJ:MOJFDBAACEEGJLNOMMMLHECA?sqBKLMNPX^blkWHzxCCDILHHHG{qxKMNOUVSLEGQTLFG~ookfddk}DFHCww}HIFHrliggjxPSzxtmg_YYXZjmf^TRRPX`aabdgw}xrlyIPPLske_]]]YX[gxlb]LBA}{Lemnl^Xac^TLDruOk}v_M|kelpjhf^[l}EQ]cje\_^UPOKBv|HRQPR[ellf^XX\ZVU]\VYRFEKMJMQMLQQNQ[_XNLWb_RKIGEDGLNVgw}A{m`W\jrpjeaYMF?=ELLOUVX`cWGAJLGKSVSRPECLW]ZY_glf[PP]eikfabcXMMUUJB@EQVMGOUX]dslNHDCIRXYTMKLJA?IQRPRVZ^\WQKIRY`lk^NN\adf`[VU\aiwwidgmnaWL@DPH4RAJ6A?>==>?=;=Smnjhikg\RKGFGGE}o{OTPQQKNZ242^_chjaCH=?GNMGB=97653c`^][\^bddfk7:;:9::9:<<;976337::8558:<;mj8779:::74cc37:<:7433fefhgca`aabccdda_``][_ceecbbbceg45677886556789:::854"3edca_^^^][XX^b`]\]^`bcc`]^^^a12444.-+)'()**+++-/.,+++,/0.,,+*)((('&),+))(&&$#%(*)()(''()))('(**+,,*()*+-/0//-++,-- ('()/$"#')*+,-,+*)**)'&'(('')*'#$',///00..--//,+)(''&%$$%%$%')++**-/..-,+***++,+)))&%%'(()(%%%$#"!"$%'(*,,)&$$%&((('()('(*))&##%&%%$#%&'(*-/../2431//.,++)'&'(()*)'%##"#$#$%%%&('$"#$$%$$&()+-+&$#"#""#$$$##$%%%$#!!"##$'))(((*,,,*'%&'&$! ""! !#%%$#""!#$%&'(()('&%$"!##$$$%%$$%$$$""()(&&''+.-+++)()*,.(%&,0-(%#""##&*-.,*'" !"!!"#%'&$#""$')))*+*)*+/((*+*)'%#"#%''%%&'''&&%#"#%&&$" !"""##"! ""###" !! !$$$%''%#""! !! !*   !! !""!!!  !!!#$$#"$&'&$###"%###$#$'(*)'(*,-///.-*('%$%&%$$%'*++*('()('&&)++(%"!"$$##"##! !"#$#V$$&'%$$##"#$%$%$%&%$%$#$&(*,*&#!"$&'(()*++,.21--+)+./0220..,+*++,+))*+)'&&%%&()))(&&&'^)**)(()***)()+/13100110///,))''(*,-++---/1/)# "%'&%&%%&&'('&&$""$%&'(*+***'%%'2&#!"!"$'++)'&&'(&&)*    #""! $*--,,--,+,,,-.,++- +,,++*++)('( +))('''(*)('K&&'(''(('%&''%&')***))''')+,++-.-+))()*+,+(&$#""%''((('&&''('%##""#$')'$"!! "%%&'(&&'(('&&'&%$% $#$&&%$#"! A !"#$&&%%&&'''())'$$'(()**+,*''(((&%&()*+,/-'%&'(&##&('%#!"" !""#$%#$%%$$#%$!#&%""&$!!#%%%&(*,.*%%%$&(('&(*++)('()(((*++))*)'((''()*+*('))('&&&'5('&%')**(())(%""!"$%%%&'&#!&())((())*++.///0/146532D10/1245768863221122111/..--.///2568989;878997//<@>;^% '$#%'%"!$'*-,)&$$#! 131+%"&,/454<(11.-./.,,+*,---+++,-/135797530../01 /,*()++)('(),./---)'.64-"(-+)*/345994220-.23238BGC=<>><8448;<=<<=<:8;@$&$C?@DECAADGGHHGC?=;;==<;=>=<95578:<<955631//354225<>:60---.145541W.-.27:=>=;960*'),.--278752/+)++$! ! &-+&!%031...+('%#!&3 !CDFHHEA?<977999898657;??=;;;:999;<<=>?BEGH%&&$E#')($C@@?;998678887557878744433213798556;DGEEFF@5/0/--169:9621343456895.)(+/362+'%',-*'%#!!%,476200//0121.(#?7/3!!$)+**,1:EGC;40-($$(.12/+*)'''&$%.!*)'%!<:;=!###%'&&'&$DDEFJLKHB=<>>7.+.236:2*# "%(./-+,39:950,)&%$!)990-0202<$('E<66@AB@<;?@;2--.-,+)('1""9;B?9:>>?EGB@A?:568::99;@<1-/.,-,*+2675,%$%)07:2% $)('''()'#*)'+3<;0)'&&&(&%*,)))&%#! #')()+./+'&(((&$"&*+*'&(#7/1#&(*'""&**% "%(((& "%&";; ###%)*(((#:68:;5.3!%&'$::<9/0=?:2012423 %(,3641-(&(-0021/-+*+*$!$*-+*,,))+,-/111.('+031/./1/-,,---+(&&&'))(())(%# )34-(%'096-*+++%"'-2420,&(--*%&,-*'&%!!#$$$# !# !!"$%&%%$#! 87!&&%%'+.199,#?<;A##"&(&B?F%%#GGE?9=H(*()--*&!#+.)%E?D&A8973218E&%'#9:?E&%C$&E<96446?J-.H<<:74/+++,450+&')',000355@GB@<9B(++(B752/---+*,3>GD820& !CDC*9=<;0-584-($<;);DILB3*C;:=<9:940:C%,3586133,(**%?C'-,+,28==930132.,.+&'%!!$%$%'%$()%&+,(# $*(!"#'1:> =3,'+6<:7540($ #'&(++,24-#&(#&+,)*( $*-+)+/21,'(15795234-&&,-'"!%+.'"(,.03;G9$""!%,//+&&'% &*+)*-1551.)(.15<;1&&/24631..36:CC84697.("#!#,=>:77982,'$&'''F;9:<>:1*)'&()++,./0//0/..-++*TTVWV+WVWW,,,-././//.ZURQPV\]]\\^]XWZ[Z[\[YZZZYXYXVTTUURQQPPQPPQONQRPNMMNMMKKMNMMNOPRSRRSSQONNOPPOONMLLORSTRQSSOLJKMNOOPPNKGCAFKONNPPONMLLJHGFFFEDGJKJGEFFC@?@?===>ABCEFGIIHHKNOMMQQJFB@CFGECABEFFFGJHEHJJIJMPPMIEDFHHJNORTRSTSRSQQRQRUY^`ZQLLMPQOPQPNLJJLKGGHIHHGHJJGEDDEEED@=@B@BACBABEIMMNOQUUOLHDCDEGHGGHJLNPMKJLMMOQRTSRQUWSLJKOTRKJLKIIHJLJFDFKONMNPQRRUWXWVSPNPSSQPRSSTSUTOKMRVXWTSSRRRSUSQSSPS\dc_\\[[_abba^]^cinqpojokgca__``][\XWY[\\]\YY\`flopssrs;=;::;<<ADC>=??@?<9776873YBJMLE89BFHPWY\cjrtpjeben<AEHF=q>DECDHO[oDOUTNID}upnopv=xy?BCC}ztrw}xoc[\grvv{{usphbcb\\cg`VOMV`eieVJLRQMIHNfEJDBGFs[[lx|}slnqrqojihggc^`fdjzyl^\cc[WWUQUeuyqiqurmlkfb_[]_^]``][dswx}|yi_YWXXXbmsx{dVRQRTUOP]d[RPMFDHOROLJJKRYURTTU\c_SJGA?CFHKLJNQMECCUCRRV[aa[WWTTY`_VQQQSSNIGHIGCELQTXUSRRTRQSSNLNRPJILVWCgkCKLMLHDCFIMONLPZ]XQJDBFLNH?;@CBBFJMPRQQOH@tnokk93.NCO>TTNMKGECDEFIKKKLKKNQNJGGHD@CEEHLORW^hh\QH|{zy}CED}urxzzILJJOUXVQKJKE}~~zvrf_grswzutKKJDsenFHwprpwOYK~FKF~|wsica_egd`\YVSV]indY\p|wvxTM{tld[Zae^RS_jkheaYRMF?}miTllg\Vag_^]PEHVdg`awmTuPtQFk^`hzCHL\pnfa_ccOq_auJNHKNU`ksxxfZ_ec_[VQW[^\XTNOY[\VJN^qpSN`{E}fUI??B>DYdccgq@GCqd`_V^steYSKGN\aRFCGQVPIQZQHEPcX=l;VcVUega[W]f`OB@@r^kR[NKNV0110.WM@?B9PBM[057BKW]_122125786578:<=>=<>??CLPID@<97864fd`\Z[_dh667:;;99:<===9666446889668854hh6:;:::;:6b^`26::86443ghhiiea`acddca_I\[\_`aaabddbaccc23467765566557889986544ffee333da``^ZY]_\Z\\\]][Y\_^[YVUY_.-,++*)))+../-+*#+-,+)(''(('''$%)+++,--*&&),-+,+('''()*+*)()*)('*,.-.1(231-,,+*))(()))*M))('+)))*+++*('%%$$')+,,+)&%).011/,)%%*//-,,,*'$"#%%%&(*+,-/01/,++,,+*+*)*)'%##%),+*)('()(%&()('()*)''(N)))*,/-*))('%##""$')))(()+,--,)(()&##$##$&'''&&'')))((()*+.1/,)'''('&')**+,.,)()**)$ !$%%&'(()((''()*)'&&&$$&**%"!!  !"!!"#%$"!$&(*)&%$#"##"!u ""!!$('#! !()# !!"#$$%%%&(+0.+($#$%&(*,+(&$###$&'(('&&%$#$'*(((&%&'(-..+'%$$$%&%$%%&&&%&&$#"!!"" !"$$"!!!"!!##! !""!"! !!  "#""$'**)'$"##"!"!"##""!&"##!!! !""##!!"$&&'))()-134530.+**(%$4%(+-,)'&'))())'%#%'(&%"!!#$$#""$#! !""  #$#""#&(('$" "#$')+)(('%%')))& "&*-,)''(***,/1,(*-(""',--,))+,,+++,+**,--+)'()**,...,*)*,+)'%%%&()+,*''&&')++-..-++)'$"#%&'*.03/(&()'%&*"..)&&&%%&'('&%$$"!"%&')-.+*)*+*'%#"#%%'+,*''()(($ +   #"!$),-,,-.-))++,---,,--,+,-+**++)( +)))'&'()(('&'()(())*)(()+,,+*++('&'())(,&#""%')(())()*))'&%$##"#%'('%##$" ""  !""#$%&&%%&))&&()&#! "%&$#""! l!##$$$'&$$%%$%')('%#"#%$%'))***+*)*)((&%'),.+&#$%((''(('&$#%%""#$$###%&%##"#""#  ! "!"!!"#%''&'(**'&%###$&('?()*)'&()(*+,,+++*))+.-(&&(*)%$%$#""$&%#! %)'&%'(*+,-,+*('&%&'%%' ()%#%(+-,)()*+)(**(,3875332368774100268976586521//12/..++-..//.-./14898::9:9647=="%#'$#"$$" "#/+" !!!!" 1137;84<'-.-./210/+(((+,+,,+,/2358857740/1441.-.-*((**('%%&&)0:?:3,&(4;73010..026?"A==>><;9779746:@@<:=><:997679:=?@AA?D&&#B@>?A?BGIIFA?=<>;6589:<=<=?>98:=AA;67:;:5/057:=7110)&-21/012.&!'598753.'"!!%*,&"# #'(*.379630./697640,(&&%""#"!#%&'&)0"#FFHGCB@>?:30/..,.242.-26776556654699:;:=DHIIIHGDA@A@;51487313554357:>?=::8520//..049=<67@DEGF>61.,+*,/221477:>;1+*,,+,.03795.+,..-*((+.00//1210010/0389631/,)'$  ! 1"+0/-.2452-($ !"!!$##$',6!(,+($!<86568<=>!#%%FB@?=;>EJLNJHEA;3--3;><>@<<;733300585/**.4797-%&+-*&$%2%(#!$&=.-6?BB;67:::844434301534=B@92278311/,,4>DFDJMHHQXRF<4/.0017=ACHE7-+++,.+,6;4,)'^#!$),+(&%%)-*)**)-1/&  $"-,-033/,,++/44.**+*)&#"#$#!"&)+--+)()*)**'%'**'&)00#35#'$!!#%&((')01,'# #')% ""!"$&'('(($ :8844#'(*+("=;;306=<4,(-33"*/333452.)%%*16641.-.-+($%),+&&/0,+,+*,0342/.0220,,/003310-'%'~('$&)'&%&''&'*,37/(%)065,(+,,*#&130-*)'#%**(&&)(&$#"! !#"# &%  "$$$%%$&'%""#$!"""#%'(*0891*%@<<==E&'&&),.-*&')%A>@@=;92.4;;=><;D')'":38%'=9;:<53379.@88A*,'().8=ADC7/25531,(,021/.))/01.)+2=;('1>";-$(/..07 $!5/./+1==5.+&"(24)! $,0f+&*0+$"+80!$(*+-/39=92-'(-231//1.& '0.)%#+56.)*)).11+(+-)'&*-*'(')+'$$(,/20/0/./-.2899:501.*-1431/365;#&!.!$-'! 2-6,*3630.286,$#$?16,2)'%""#"(!!"#$ --,+))+-0;10+))233465101221/-+++*)()+,,-.-,--- +-,+*+*()++''() (')++)(&%(,ԀÀ၅ʀ ǽ¿ąļÿل%ȅǀ¿j냊T¾ЀȽŹÿȀýބ񂇉ͮ腴įʳſںހƼĿɴ¹úރѾʩ׾܀큉̻ϵ􀐙ܖ򈕜ľĻȿſ¾˼؅聊ž̹Ӏվǀڦ뇯´ٰ̺úּငɯſ聆˽˿ٹƾɹȻǷǷӴލ廗셍 ]XVY[ZYZZ[\]]\[M\^aa`^[Z[[YY[\\]]^^\ZXXZ[ZXY\_``^[XXZYXXYYZ[ZZ\]^^_`^[Z[\^bdffc^^aabfgea^^__`1m002332331/158841^^__`a``_]\[\^_0023222dbcccdb`_][ZZ[[\^_``_\YWXZ\``]XVWXUTW[`a]ZVSQRTVVUWYXXYZ\^_^\\ZYWVTTVXZ\[[ZYZ[[YWVUVVUUUTSVYYVRPQR6QOPRSRSVWWY\[YZZXUQOOPQPPRTURQTWWWXXVTSSTSRPJFFGHKLLLKJ2KMPQQRQQSW[]^``^\\\[YWVXY[]`a^YTQPRTVWVVY]][XWWUTTS UWYZZYURRT UURPLIHGHHHF +EFHLNNPTWYZ][ZWVUTSSRONLKJJIIHHGFFHIIIHGIMUXQJIHEBBEFDCCEGJMNNMMMOOQSWVWYYXXYZZYYXXVVWVSRSTTVWVVWVVW[_`_]ZD[.]YURRV]a_\[XSRTUUVURNNPRSRQMMNNONKKMMNPQPNNNPPNMLIIJLLJHGEEHLNPPQQPNMLJJJHFEEEGKNNKHHJMMPSTRPPPNMMKJKKJJJKLKKJIIHJKJJJKMONMMQTSSVVSRRRQSUVX[\[]_[VUVWYXRNNNMNPQSVVTSSTUTQPRRSRSUWWTTSPOQSUUTPMLKKIIGJKJJKNOQSUVWWUQNLLNOPQPPRTUUVY[ZXUTSSTRMQUTTTSRQQRSUX_c]VTTXZXXYWTSTY\ZYXWY^`_\XWZ\\[[\\[YYYXVUVVSSUVWWVUTRQOOSVYZVQPTZ_0^YVTPNPSWZ]\ZYXVVYXVTTZ13\SOQUXY[ZYYWQJLPQRTVY\^]\Y[/353../0a``^]]_`a0135;<5365q/TOOQRRTY_^XSPRVUT032330.,-022/./014530,,../25432355444556653211234445766654335676667889;;<;=<=;:9;=>=81,)'&()+-./ .,+++*ST+++,-",,,-.-..-ZZZYVTUWZ[\ZZZ\^ZX[\X[`]ZX +WXYWTUUSSSRQPONONMLMMLKKLMNOPPNMOQRPPPQ#NKLOQRQNOPQPOPOIHIJKKKLMMNMIFGKLKKJK:JJKKJJIHGGHGFGHHGGFDCCDD@>ACCCDFIKIGEEGHILONNSWQFB@@@AABCCB@CGJJIIKOQNORPJIJLMLGEC>FMLLMONNPTTSSUWXWUSUX[YRLJHGJLKLMMLKKOQNLMKHHHFEFFGHGFFEB@>=@A?>ADHKLMORVWSQMIHGA=@EFGHIKNPNJIKLLNQTTTVSPPPSWYVSSUVTPNMLJILRUTOGDJPSTSTTUTTVUVUTRQSTVVTVXXWUWWSOKJLQUTTUWVWTTTRQROHKV\]\[]]Z^dilhebd`gj9uqllljhhfege`\XTVZ]^^^][ZYZ`hkhfb^ep<===<:;=>=yxx;vv<@?:8876655bSQ_d]\24542^ZWY[YO<11lk\.>SVRNB=;65?~ysiYLE@@GJIHHHILV``[WVQKGEEIMRXYY^hpsu6-PKHHN5KUQOMIFCABCEGIKNNMOPOLGDDEB{y@DIPUXYXOIJIFC?@@A|yCIHosz{CHCzCLEDOWXOJHF}wg_l{xw}EDDGDupxxrx}{HQF{wpls{wolopgenic_[Zali]ML[_bp{ohnu~~}zmeaall\Xcie^^]SMSWOBh^@[f_USTTUak_QIMTOESr~YoB[UEiet|ABurKY^bfhaRAfNJiFGHPW\]^]^^`hiejfZXY[XLN]bccZSQS[_^M50=Rk@CqYJ@<Dujcfihd]Z]UPU^fgg`K>?DJMRM>p?SP;GYQLPV\][WGALU[\\[XTOXb`agg]Y][PFJ\gki\T^d\[c_UPLLRZ\XTRNIK[bZXbli^]`\TNS]ba\_fhcPHS[][XW]dffkryCD|k_V[_XMIGDABFHJKPZ]^epxmUPST[ecTJDEtVcCIFHQ\.V./XXUB4:>_NZ257@=NX^12233467656998;=<<<=>?@FKHC?=;:98653c_[ZZ]e55589:;89==<:867644678:t854449==<:9::732224897555hgddhid``aaaba_^^^\[]]]^__ad3dabef334445565566787656775554edd2332dbaabbaac21`]^]]\]__][YXZ^*((*+*)*+P**))+,--,*)(('&'((*+++*)(()))(()*,-,*((*)))**++*)))**+,+)((),/1120-.///00/-+++*)t()))**)**))''((,+--.//.-,*))*++-.///-+*+,-/.,)'('$%'*--,*(&%&'(('())())*+,,+,,+*)()*+,--++*+***+*)('&'&&'()+-,)(''((())')***+*)+,+)'&&''&&&''%&())*++*)(^'$!!!"#$$$#"! !$&'((('(+-./00.---,*(''(),./.*'$"$')+*),//.,**('('&&&''(())(&%%''&&'&$#"!!!"" !#$%&')))**+***))('&&%$$$##"! !"&)%!!  "#$##"##$&()(&''()(((''()(%##$%&''&&%$%'))('%('((&$!"%),+))'$$&%%&&$!!"#$$#! !"""!:""#"!"#$$"! !"! "$$$##$$#"!! !"!  "$%$"!"###%&&$_#"""! !"#$$#"! !##"""$%%$$&''&(('''&&(+,.233452.,+,--)&%%##$&'))'&&'''%$%&'&&&(''&&$$%()))'%$#"!"$$%&'''('%$##$$%%$$%%&'(*++)&'%"$'&%%&'()+./*&%%())()(&$&)+*r))()+,+*((*--+,--,+++*('''%%'(())('&%$$&')*'%%'*,*'%$"!#%(*,,**)''))'%%)*$"$&'()))(&# ##$%&(*+*)()...,*\+#!"#$$%(,,(%#%'&& !#%'(**('(((,/-,++,++,,***)))*)('&*''()(&%&(('''()))*+)&&()**)*+++*+*'%&&'('&' $##%''&&'(1'''('&%%#$&&%%&%%%$$##%%" """#$$%%###$$$'('')+)$!"###"$&&%%&)*('))%$%&&&#! "('&()))+-,+**+,+*(()++'%%$$%&%$&'&%$')'&'&&''%$#""##$%$#$$"!  !  #$&&'(*..+)'%''# "%'(&'')*)&&())*,-,,-!+('()+--++,,+(''&%$&)+*'#"%()*(()+**)((('(())()**)()+)&%$&)+++,,,+++)(*(#'.234]2479:8545258=:77654433430.-++-/00//.--.27976304; <<=;:/#-& &(##$"!"##*'&%$" !8:=;;:8778::647>#$$$#C"%&%$"CABDFD@>=;999;<;=:9;;8899;>A>>@BDFGE?97;<60-+*+/1.,.10+((+19 >;71'"'(%##  "%(*L)+27:; !!:973/1762/+))*+)'()+/37$)+)%#"BBEGDB?;878:;>@9,!#)/47854578778:89@CBCDDA?<9630--/012347;>=;9876225520-++)''-35534;?:42110//0/./258=<4..-,***+.133/,.0121//1/,,-.157522358840.,*'%$$'*+,-,-.263-,./..//,&! "#!  ##!!#&)2 #"! >=<;978==> !"DDDCEFEEILMLMPOKA723:<;>DB>?>7347=DHE9,&%*134432121,&#&2C#?;=>80/6?>86300331012247768=CIG<312210/02437@D@<<@ACDA<:9669;:98647 %$DA>;<!#'*,/0+&&%"!? ><#'&C9;>>#&"")..)&$$EEBADC@=3-5>BB==97:><75782163/-+,067/&%0455,').+#,AJLK17#61%76BI&&A=)123685-$9+';N)((-2456553367476/-/20((2655/*((***"'5!"8*"(-)!&0#A:423465/-/*'*05672& !$'*.+ 8!0-$.&! $'&&! ',///--+)/654882020(!$0786.)04.-33-*&&*02/-+*()25.,2870020,)-59747;<7+&-4530/27657;>AD#"<3-)-0+$"!  $%&'+0236;@;-)+,,198/(%&=)/"&$$$& "##*"(!# -,*)'(.!2101551/-+))*))**))**+--+,--!,+,-,,--,+,-*)***)*+,+)'&(+߀Àꁂ 뀅ȀÀ怂 z܄$ſÄŀž½½ɀſºÿ̀섌E¿Ŀ½̿oüÀƿþשƴĺȺȀ˿¿ν˸ûǀҼǽžþd¹¿ĺɿĺƾ뀄ܿǶŹ΀ĻǷݴͻ΀؀Ľ􄓠Ož¿DZɽ釆򅒞򇏉ʸöɵ̀ͼ接ξ;Ū˻ºɲ耊ǷȲ̱ξɽл錍ԫ򅋓񀇊<[_]ZZ[ZZ[\_`_^]___^]_bca_\ZZWVVY[\_1cca_^]^^[XWVX^`^\[[_fg`[XX\][\]\[^__^^___bimo898kebacdb`_acba122b134540ZY[03531121a__``_`_^]]^__^]]_^]^^^_`^\\\[[\^_acba_\[\[Y[`a][Z[``][[\[XYZ[ZZZXTSRRRSVWZ\^]\ZXVVXZZZ\\YY[[ZYXVWYXWWW&YYVUWXZ[YTQQSZ\\[[]_^[UQPOORUYZZYXWUSSTUVUTUWXWUTTRQPNMLLMOPNKIIKKJJIIJpLORSUVTQSUWWRMRWUTWY[[]``a1a^][YZXYYY\__]ZZ\[YXVRPRRQPPRSRSTSNJMQPMJIGHFHGGHKMLHGHHILPTX^21_]]\Z[ZYYYWTSRPNLKJJKL*IGEEHIKLLLKLNMIFCB@=?EHFGIIJLLJKKJJKLOSUWZ^Q\ZYZYYZ[XURNQVWWXY[./146641//0100010/][WSQQPRUTRRRPPV_`ZVQNQSSROLLMMMPRROLLNPPOMLM>KJKKHDCDFHJMPPOOPRRPNPQQRRPLJIIKNPNJGFHKNQTZ[YWTQOLMOPQRONMMMKJOIGFFFGIJMRUUUXYZ[YWWWXWURUZ[WSSXYUSUWXVSRQPQTXWUSQOOQTVTQQRRSSRRTX[XTOLNSY\]ZSNLK8NPSTSPOPQONQX]][XSRSQPRSTUVURONRTRPNJLTWXWTSTW]h87b[YXZXVUUVWWVX[\\[ZZ\^]WQRWYY[ZYWUTVXWVWXUSV[ZWVTRRSPOQTVVRONPU_1_VOLMNNOT[\[Z\\ZWWVSQOOUZ\YSOPTWXVUUWVPJNWYVSUYZWXZ]01220]/12663caa124I4236=DC>;61.UOPQOPV[WQNLOSUW0445421/-1650--144310.WVY/464356643235544564233224566543344565566678:;:9::;;<::9>@A@=6-(')+++--...-+)()+SLQ--..,++,+,-,XXVVXZY \[YYZ[\^^]^a^Z]][YWWWUUVUSTSQQTTSRPMKKLLLMLLNOPSTQNLKOUVQOMJIIKOQOLNSUVTRQPNMNNKHHIHGHIJHGHJJHGILLKJJJLLJHGJNOMKJFDDCCDEGFFEEDCDFEDEFFFGHJLLJIIJKJJKLOPOOLGC@=;;>@A@ABBCDFGIJMSTRQRQLJLLKKJIIFGLMNNOOOQSRTROQVXYXY[ZWTOMKFCFHIJLLJGHMOPPOMLMMNNJGGGEJMLJIGCAA?AB@@CDFFFHKQYYWSMLKGB??ACCCEHLOMIILMNNPRRTUSPPQQQSUWWX[YVTSRRRSWYXTQTTTVVVUUUTSSSTTSSSTSTVTTVXWUWYWRONORSWXXZ[XUTSSTQNQTTUWWXZ\_bafabababl<=uusqpooqswvld_ZY[]^__^\"YZ\`de`\XTZhq9:<=<;:<>><=?=rq=RZXSKA;8:=@BED>lhlpyEMQTSPNOSWZZYSNJIJOVYZ[`ee`[WX]_\UONOSURRUWYYWVY\ZYYSOU^c`ZVUVWZclh_WRS[bhlmja`ionkgcdkpppssrru~CDCEFDA|yDD}{DGEBCE}}{zzurv~ztonljkmqsroiabgfchjebdea`gkigfda``]_ehd[RPUZ^bgihjprpliaVHBGJGB@EGHGIQVUQJ?;AHMT_my==AEFDDGJKF>ngjptvv>@ACCCDEFIMQMC;:<=?CFFDCCCA~||~}xsoiaZW\aca_^\\]``]]^_fnqnmqrme`chijifckrnijljfd`\YXTSX\^_`a`]\^aeea\VV]cdb_\\]\YVYZRKMPRTY`a^^`b^TI@;@KOOQQPQTVQMKJKOSX]\[[VSRRRSTTQPT[acefffge`YVW^cb_[URQPONLMNNJEFNW\\\ZTW_einj_TMHCABFJHGKRa|MPG?zzAHHC>>AA@||DDFGtkb_j|vyCFHMzbXPNYdc[TQU`ijd]YVSQRQPNP\q{tooorlciy@|topkaafb]\_```ciou{vmlrynnppopneYV^dc^\\^bgmrvz~RRIysyOfUPNNKLW\Z]jvzzpb[[]]XVZ`fiaVRQPLGymlt*ojBQLEFNTSRPHBDFHHGHFCDHLOIFHM4LTU\ehhf_VOJLNOSZ]WQNMOPRWYTNLMMLJJLKHEFHJMMPTTSTQIEHJHFFGD?@J[jfYZ^cicVG=v=AECzmlt>BIMLHCCDEBwkjr?HQQIHT]UE|ursCRUTXZZVRRROJHKNPQQTYXVWYZVNGIT\ajh]SLLRWVM=wET`bZTQQPICA>93245;OYTNHA9215>GLKNTTQLHC???=>BKTRMJIMVVMFB|tlxFOTYYRIz~DKONJFCA?>CKK|fxHIGHLKGD~FPY_YMIJGE~}tv}|vnhmojlozEHEttyEEBBEKNFzmcet}yqoqieljc`]ajph[OJMJ_okns~URu`oy|xomi^XY]eopaVRRSWODDDOU\^WV[\]VOMLIEHWjtspia^dfc]L;sACmVpKZa`baTD>trwurs~P`d_WUTY_aciyxh_UT^``abffYKLG<1,6L_bdaUPV]ahpldce`[k{oltn\WY`c^\_gnql`TLCDQSI>rnj>>?ABA?=<<:t;;97652a\VYacd445:<::;;:87775456667:<<=<87559>@@<89:;;854479864hggfcdfeb`^acdb`^^_^]^^]]^^`dg3dcef345665445444566654343caaa13dd22`^^\\]^^]ZZ^^\^%,*)**)()**++*+++,+*+,-,+)('&$%&'(*,,+-.-*)''*,++*+/23/,**+*()***,..,(/46851/---.-,,+*,-,,+'&&*))***)()**)*D+,--,,+++,-./10/.---+)*--+)(),-,*+,,**+,,,+)'%%$$&')*,---,+**,--,-+*)((()(&&&'#()*,+*((*-..--./.-*(&%&'*,--,,*(&'(* )'''('&&'&$##$##$&'&$#N"!!!"""!"$&()*)'')**'%(*(''())*,,,-+*)'(()))*,,+++,,++)&$%%%##%%$%%%" #&$"!! !#%$! !#&(*/.,,+***(()'%U$"!!""###"!  "##%$""$#   !"#$""#!!!"$&()*,,-,*))())*,*(% "##$%&=*)&%$$##$$#$$$#&,-*'#!"$$$"!!! !"##"!!"##"!!"!!!  !  "#$$#&$&'%"! !#$$"  !"#%()('%%$##%%%&$#""#"! L!"#%())()***)())**)(*-/-++..+*)**)(('&&())('%$$%'('&%&&''&&')*(&#!#',./-)&%$#"!!!"$%&%$#$$##&*-,*(%$$##$%&'(&$""$%$"! "'**)'''),2-(((**))((('(((')+,,+)()**'$%)***+*))()+)())'&'**)(('''&%&()(&$#$'-,'" !"#'+,+*++*))(&$"!%(*($"$&(('&&('$"()'%%)+)()+'0.-$"$%#$(*&#"!#%%%&&'  +  $! "#%$$$%%&''&&(('(**))*+*)**()(''()'&%&I%$%&'((&$##$(+(&%%$$$'**(+..-+)*++**+)'&''&''((&%&&&%%'('''(**(&%'*+*('$!"#%%$%$#$%&&&%$$$%&(('&&$#!  ""!"#|$%&'(*+*(((%$&&%%%$$#$&'()))*+++,+''*,+*+.-)'%%'# "$%%%&%##&'()'&'(()'&%$#"$'&%%%"!! !!"##$%$%'*./-*'((%#!""##"$%')('(*+++,+(''((()+,-/2/+**)(()+,*(')))++)***)*))*D++)*,+)*,+('()++--+,.,***)'&&)+,./01346757332223: 9:;;:889:=<521.-.0/../13421/-19= + 98536 &"!$#"#N%$$%%!""$%# 879;D),---,+*,010.*'%%%$$&),/003773100353/+*,./--../)1210/+*/573.,,./05;82-)*/25897217;:7656:=<;:"#DA@D$&&#G%&IDCB?>><;>CD@<;;;:::<===94698599545433676443000/0354.((,/12675688642.'!%$!!&,5> "%%$#$%&#4137:;<  !"$'%"%%$#"">ABBDEC@=:4/.03321/./13201238=?<9;<:63699:975:><9:<:8530.-,+.00134422367741..37984/-.0/.02-))+,.16755662+%$!!(*)))()-.,))((+.25432/.---.00.,.252/+*.342/,*+++***++(%%).2332..13464-% !!"%(/<'("8:$%" ""!@AE%%GEFHHGFGJ()OQSLA;639CF=<#%&)RA3-)(0870+)-6<<830.,,,-+)(,7=967785/3= =7564./32..022237:>A>88;6!*'!!%(' &%!%,-168762.)&''&)./+'%%''(+.+'&''%##%&%##$%''),,+,+%"#%$!""!$0:80/0241)!8"$">76;"&(($ !" :449 &**%$+2.#>;::"" #$$&),-,-0/,+(#")12-+-,(&('"%*(&+01121//38::70'%*03454339?8,()*)$*++-//,)))'#"$&(((),+)*,-+%!#*.154/)%$(+,&5 )12-)'&% !($!!#"#%%" $*)&$#$))$! =839"'*/0-'B=$+261(%&$#EEGCAA:;AA<739><;:@&(&F<?72-,3423466+!,/20*&(,-054/./,*6A>64:8,*,02/-/47883-'!#-/(!;:8 %99(&!#%).*)(&'(+/155$8/>::>7-0682($" &)))+5?GF;0,))-27;4+'"#.<<43770+06a5/).79.(+.1.)+++..02441247=ABD;0)"#).-+)&!!(-)%"%/6532,#&-001/( !%"6'*"$"!!%'&!\,)%(,,-122100210.,.//-+*+++**)*,..-.- ,++,--*)*)(())(*ҀڀÀԁ〇ɀ΁Ӏ р²ƿʀ¾Ƽ݀¿߀¿ۀ󀊌»ż¾¶Ż¼ǀʽĿ͗ýļǹþ½y˶ùԿ»ƵǾ»̀ͱ̹􀆒ׂĸ¶рͽ˸Ǿ􊚜Ƚȱ׾ϻ扖ŷ־ǼĻ˻ȹ¸¾Ʊá¾݀ĶIJ惍ͽL3]\\[[`dcaa_][\_`aabaacda^[[[ZXWWX[\\^ab``_^\[[YVWZ[\\]^agkib\[]^]]^_^]^^^_^[\]aglq::7gba_][ZYYXZ___`2432244320]\0595`]_bca_```][[\]]^01bb`_``a`_^\[[\]^^_``__][XWWVVXYYXXZ\]\]^][YVUVWXZ[XUSRSSSUWXWVXYXXYYWXZ\^_[WVVWXVROMLMOU[]ZUTUWY[[ZYY]]\^_^[YY[\\[YXXYWTQ$OOQVWUTTUUVWWZ[ZXWWVTRQPNLKLMNOPPQRQNONNPQSUUTSSTUVUSQOLEAKRSRRRSVY\0YVTSPHGNRRQONMNRTTSTSQOPPONLJJKKNONPOLHFFEDCBCEFIKMNQUXZ[YYXWUSTUWWURQQONNNONLKKJHGGIJIILQTPHC@@ADFHJIHHIIJKMOONLMMNOPPQRRSUWXXWTRRRSRSTW.121/.02223321100122/.\ZYZYVSRTUVUTSTSPPQRPNNORUTSTUTQOQRPNMJHIJMQQOMMLLJHHHGEA?DJMPPOOQRSSRQPOLKLLKLNNPRPKIIIJMSX[\ZWTSROMORSQPQQRRNLKKKJIIIHJMORUWWXXZ]^]\YUTUTTUTUWWSPPRSRSUWWUSRRRSVVSRQQTVVUTRQTVUVWWXWUSROMKJMOQSTSPLJKLKKMMLLNPRQNMNPSRPPRV\\XVUTSSSTTUUTSRSWZYWVUPLNOPPNOWZ[_`^ZXVTUUVYYWUW[]^][XX[\XUU[a`^\ZXWVWXWVUVX0TPOONLMMOQPOPV\\XSPQSQNMR[_[WWVTRQSTTVVVZ00]\YVXZXVWWVWXVSQRUXYZ/34100231/01232223687556;@A@@>82ZRRROPUXTRTUTV\_Z\257630/011--25432.,-,-15665565324566776311354421013454322345689:986578-9:;<=<==>@@?@CCDDCEHKMOQSSOJFJNNMMMLKIIIKNPQPOQQMOTUTUY\XRQPME8^6CHHGGHHIJLMLLLMMNQRRQOMKKLKHGECCCBACBABBCDDFGKNPRRQOIEDC>;=@ABDEFIJLNNMOQRTTQNNQSRPPPRU[^WRSTTSQOPRSSUVUUVSWRSTSSRRTVUTSRPPONNNQTSTWWVSPQPRVYVTW[YUUZZQJIKLHHFHMQ[ab`^]\^`bfnsqllmopoprsusmgfedgga_`bgig`ZURWakpop:<=<=>?A@?><9:?@>:88q:<=?=88;:865674`^_^/0\X^453ccb]]_R<\_7<=<=@?:9:89<>@A@>vpnwFKJMPSUTQT[]]\ZWUSPNPRVZ[[\adb]YWY]_ZQKJKLNPUYXUUWXYWW\^`b^WPMPSSSU[dlle_\[ZZ[`da^aiqrnihmsvvy{{{z}BDED}}}vojlv}}|yxvw|~xsqrsvxz{{yxtolmnkd]]^K=N`:b^]_``abcdeb`_^]]\Z^beeddabfe_TICCEKRZcimpqlhefjnu=?@BFGDA|BHLKJKJGECA@??ACDEHMNMNOONJJJIHIJHFFIKHCzxxrjdcegjmhddffdfjlfa_^[[`fouurnhd`_cca_]Z[dgda_]ZWUUWXY^cdca_\YUROLPWZ[]^]YZ^diklnok`PB=DIKNQTSNNRW\^^]]a_SKMRUVXXVUWZ]^\]^YURPONMKIJNSVXUSSUY^`__cjnoolcXOKKLLMLJIHD>w@JRWVSRT]hkhbZSLFB@BHOTX\dtDMOKGCBCCBBCB@DJORRK|zFGIoc]aisuyHIGIKn_WV[ba`acggc_ZWXZYWUV\`cnGD~yg]blx{rjjib^^^__^\Zewugcccgmrwyrnlgbbca\WSQU`fd`]_bflonot}MMF~uqsrvwdZVSOMNLCFYq}qc]\___befefie]VRKE}vxto:?GUTE@EJD;757=BGHHGHGGHHEFIHGN6FJMS_ji_WPKIIOSQPRUWVRQPOORTUSOIGILMLNQPKJQ[\UONQOHDDGLLIEDFJMMNSXTG@FO_lcRF@|zCML@io>ADFIIGFEFHGAqeiyEMPNOTTMBwsswAKKE@>AFFEGNSU[dcZQNTY\adb\XUQQVXSNPRRU\^[YZ_glmrvurle^[_dgkkfhmsteWVTPMJOWYX[\\_^YUSQNNPSSTSRRSTTWZXOFENW]hqfPGLUVSND@BLVWX_dffUA<<3)).07L^a[SME:7>FMQPS[[SLFCA>v=FHC}xGHFJQGtowEINUSPQNG~{vtusi`cfc\_r~CDFGJPGEJMEtmnmowugfliacmmecegicULMI@Qqy{zu}HIvdrtmnh[]ehlh\XURRUWTOQIkmFOQUZWNLOOMOQQYhostvyyg[df\^bWChi~DL\h^RLIF{tk]XrMSRTX[`daguwnhd^]al{|sle\SC009AG>94.=??ACxp?FMRRQU[X[]ML[XOMFERVTUTKGQWRRTWZ\SG?AJS_khYK?APYaszdMINRS[caaa\MATvyme_`fdVKEBCHFoc=EFIXba`\ad`^`]VOMQSRPLG=?RVHi??==;:7335543b`ce2478:<=:87876ij543454459;<<;998569=?<86799876567985fcdda`bccb_aeecb`aa`_aba```abe33hhfeg5 4321_`345664322344332ddcc33c`_]]\[Z[+*!-/.,,,+)*+-...-,-,+((())'&&&'((),-.-,+(&')*++,-/354/+*+++,..-,,+*+,/3693/.,*(' +),---(')'(*+**+,*)(()+,+++,+**+,---.*-,**)'''('&&(**+,---,*)***+,)'%%&')*,,++,-,.++,-..+(''())&$##"#&**)''(*,---,,..-./.+))+,--, ++)(&&'))(()**('''&%$##"!!"#$%&&'(&$$$#I%&&'('&&&()('&&$!&&%&&&'(**)**)'%%$"$%$#""#%&&&'&$##$$$#!!""#$#$$"  !##"##%&)*++*('&$$$%%%&''&% $$$%%$###! !"! !#&(%!!"! !!"$%%$#"$$%$%%%&((('&&%&&%%$%7(''((&$#$%%%$$%%$#$&%#!"#%%$%&&$#$$#! !#$#"""!  "###""#$ #!!##"#$##$$! "%(**(&%%%#"#%&%$"""#""!!! !#%&()(&*+**)&%&&'(')++)&'(('&')**('''())'%$%&'_%%')))*++*)'$#!"$%&(((&$#$$""#"""#%&%$#$&('%%&(,,)'&&%$$%%%&'&%&')(&&%#!"$%%$%),,--*('&%&()*+)('(+-,+*((**)''+.-++***)7'''(()*('&&%##$$%$#$(,+)%#$%%#"%*.+)(('&&'''('')*)('(*)(('''('%$&(*)(A)%&&#$')'%&&&'*,('   +##$&%&(''()('())(&%%&'&%$!#""#$&&%###$$%$!!"###%%$$'+--*(()*)'%%%&%$##$$%&'((''(*+*)'&')+*('%"#$%###$$#%%&'''%&&'(&%&'&%&()'$# ""!  ! !"$%%##$&((())'%#&)(((''&&%%&()*++*))*+)()***+-+(('%!'"$##%%%&&'&&'((()+++)'%&&'%#""##"!"!!4"##%&%%'))+--,)'&&# !"#%&&(*+,+)*+,,+)'')*)())+.34/+*)'(+,+P))*+**))+,+++*)('&')+,++.-+*()**,.-++-,*+.-($$%%$$#%(+2564310/025:=;7778:999:::73166101112236752/-,/59;:9 !! 2$"#%#"%''$%'!## !A>?>?BCC@>=>>>?@A?;99:84012&&351012>44223320//144310--0/,%#'-12452/../27 "%%$"AA@?!%('&&%#! !$'(((**(%$$%$&(&%%&'&#DB>>@=955568974554248953321137<@>=:85436544201785321/-,,--.1554210.,+*(+.00221//269:;;;92) #(*,.0/+*-0344d2255.)),-..///146755530/../.+))+/121.,-02210379:;94.*()*)*))((&"@"'-1/+**/7:84.("#'*,08"'(&#! !"! "'+--)HBADIJJIFFJ'(*SI=4138=>=C&'&()J;2-,0554457864200220./3439E&$@>?A?3,/5<>93441./01110/5A?52336<@EEA=;622320.+)*15422468;<;L<>CN,,(F=9:F=40023235668:840/+(KD?A?:#,,"" "%&*2882,)%#$(+*)*,-,)(''')))(&##%''&')(%#(00*&&((#!"$'(%" !$&%%),*#!&1:3(!<;"()!48 !"#$$#"!"## 713<#(*')./*#=;;;!&'"H !$#!#&('+11-'%(+.01/,*(%%)+)&'**,01/--04679<<:73-,/2587458>?5++,*(%(./.l10+)((&%')**)((()*+--(#"&,/6;4&!%,.,' %*++/343& "-.*&# $'%&++% "$$$#$$$*10'! @:<%./+'GH%$(-0+$ 9%&">=C&&$',&:7;B$',/,()($BAEC>;:::3-02202>EF$%%&'+&CJJDC"%($;8989?=5474/067101463*$'& -DFEC>DILQLG()>2;ED<896.069<:410-,.0.+.)8;',,/1/))+,++,,1=BEEFHMOH;3990161#47D%'082*('%FEB<30B/2//114646>@;86224:BC=94+#&'(*.9@>:66889:;9791-./032*# ""#$=6"$&&*.-/1&&21++%"*.,.-&#)-))*+-.*#!&,3<;2)"#-25>D6'%(*+16311/&+AB:40264-&#"#''90$#%/764211242010+''B)*)('#*+"%(''-135598/)'#$(' #'%  !!m,+,+220/01/.//00//0/.-,--,,---+***,.0//.. ++-,*+,,+)())(*Ҁ؀ހЀ׀瀄逈΁؀Ҁ Uȩلք؀»þɾلۀÿȷ߀рʾ½ɻù¿ƾľüƀɽもæ ¿ɾɾۀʹ¹򂍕üÿƳĺηµϿݼ¶ʿр񅓖򄋌ǿżѰžɻž灀­折ô깕デ׼óǻ־Ѐûͽ􇝯и˿ÿķȾЯʻ邅Ͷ邏rdeeb`aeecaa`][\]]_`a`]\`cb^\YYZYW[_\XY]`a`_^\[[[\\[[Z[\\_el88je`^][Z]_]\\^\[YXW[ai8::6d`___\[]_abeec33cbcba`_^]/0143`Z[]^`0a`_\[ +\]__^`bbba` ^]][Z[[ZZ\zZYWUSQNJJNUYYVWZZ[]]\\[XUUTSRRQONPTSNOVZYWVVYZXWWY[\]__]XTSUTSRPNOORZ_]YUVZYY[^]]][Z\bd_[Z[^__abb^[XWWTPMNPQQQRQMIIJLQTTSSRPMMORTTSQOLKMORVYYWUTUVURQPPPOPSXZVTTN<-4GPSUYZYVTUTSSTTRRQPQQRRSTTSRPOONNNPQRSTSQONOPPONMJIGHJKLNQQPPTWYYXXVTSSTRONOQTXXVTROMKIOIIFEDEFFHIJJIIJJLOPOJFEDEHJKLOPOMKKJKMNMLMOPNNPQPQQQSWZ\[WSRQRSTTTV,./123322111/^ZXVUUTRSUVY[YXXVUWWVTRSSTTTRpPOPQQQPOMLKJJIIJLMMOQQOLKJHFCAEOQONNPQRTWVSPNKIHIKLLMMLMPPONMMMOS\1_XUROLKMPQONOPPNNONMPSTTRRTWXXY\/...[YWWVVUTRP6OOPNMNQTVWVWVTSSRQSTSSSUVTSTTRRTTRSTRRPMJJKNPOMOONLKJJHJLLKKLMNNOSWVTSSTVY[ZYVTTTRSSSTUVWZ\\XKADJLNQVZ[^bc_[YWX_dba`^[XTQPQTWZ[[\[ZXWWVWZ]\[\YUTTUUUTTVUSSTUUTRONNNORSRRPNQVWUSRTUSRQRUY\ZVSRQOOQTVYZ[ZYWVZ01/[.01p0\XWYYWTSUYZZZ\132/05862/024422334554228@EEDB?91VSSROPSTTVVTTY[XW]026861WR,../220//00/0223553320036667641002221123S4665689876545789:;::;<;:;;::<=@AA<1+'&''(*)PNO)**+--,+*-/.-,UTTSRRSRQRUVX,--.---./010/r_ab_]\YVSSTVWWVTUWWTQONLKJJIIKKKPUVUW[\ZUOLJHHKRXWQNMNSTQLLNONOQQOLKIGECCBA@?@BDGIHIHFGJLLKIEBFJKKJJHEDDEFECA@?>?ABDGHHIJJJKJIIJJKKQWTMI?79>???@B@>?@CEHGBAEILMMNLJHILKKLJIJIGEGJLLLMOPQRRRSRRTUUTTTUVUPLE@@CDEDEFFHIJKKKMNJJMPTXUQNLLKGDEDCABFF=lo<>ACDDEDCHMNLJKMMHB@CFFFDCHLMOQOPRUYZVRPONLLLMOSUOLJJLPPMIILMNOPNNOMMPSSQNPRQPONMMJGFGKNQSTVW[\VRSRPRUTUXXWW]a^\_YTOKIEFIT]_^]^`bdhkllkjhfgjliedcdecdfglnhcaaacdgjljbZWVXZ]cilq;<;;;:=<<=>>=;8hj;>=:669954412674/VV[O<755119<;>A@=wz}{x{@BbBEKRY]\XY]]\_]WSPNPQTY[ZXWZ]\[ZWX]^[RLKJJNU\]YX]beeeb`adffaSIHNSUTPU\^_^XQMIHJKPUZafffktyrpqsuwxwurpmko{~urtwxusuvuvuuz}yrlhhntvvx|~}xrle\WVQNOV[[^dgfcdjia]^bdcba`]]^bccb^SIJR_iqx}{y>@??AAACDDCEIKE@{wvwy{yvyAHOSNF@xx~ACFGHJHF@>vrswy|Cxniif^^gg_\]cnrmjlnpqnjgc^\^afhgdbbddffca`^\ZUPPWZZXUTTTX]^\]_]\_daYXZZYYYZYWUSSTVURQMKOXbhnqiZSQ#JBACB@DMT\eg`XVXWSRQNLNU]^XTVY[ZTKDADLSQLGCDDHPV\dmsuutocTG>9:?JVZSPQMDAJXZ[bjojbbb\QKKJHKPV^behqBKOLCvmmpoqvyxx{BHOJtbbm{{w}GF~||ysqmo|ELRQJrb\Z[[YUSV\]ZXVTSW\`bdkrtwy~CCzlb^ZendY_ie][\^ZTPNOVaeb^[YRFGSY[djgdfgf_Zcszia]XZgqohdeimqvrkijnvo]UVVSRUTS]y~e[YZ]^`fh`Y[][TIA}rgjpw?GSQKLJFJRI64>DDDHIHHGFC@@CFGD?AO6AGOV[ZTRVZYURPMGEJNPWcaSLNQSSRQMKOUTPNNOPUWXWTRPLG@?EIEvm=HMRUVWVRKAxEP_kbN@xvvBJMHz;DILOQOJGHLOOI@vuAEEJRURMH@svAGKOME?@GMNLKMRY_ba[TV\_^^aa[WVUVXTNJJLQX^_XVZ\`bcffa[XYZ[]aa^]cjid`\VQLHGITY\a^TLMSVTNKKLMPQPLHMTWWVVRIHPRRTczrZNLKIHJIC>FSVWYZ\`YJA:4/-05BWeg\QLG@:?JMMQTURMHEC?5e=JNJIMOMMSTRNHDBADEusIJHFINSZ[SJC@@AAED|jm~EJJEGOSTMB|{z~zzzsplgclKRTQQSQIxm~HKKMLD{qmkfed^]fh]_uzsnigkje`ZTLHTiurpvLIueuvmny}nfinqhZSPPPRWUPSU`rEPU_cWJAsTZY]chpw|kda_byaKzhk=BIRTUTROJ?f\\_^oEJKLS[YZlpgeilhcm|l^ZTNTP=LNMWaVGELPEFYVJFD;m~>IT`\SNNQSTVURSZ]YQFAO\]]WWWMIIENem]C4BPLFMWO?H^dirvymVNKKP]i\E@IS[0.-ZTJKKB=;=>@BB?<974334432d_Z28;<=?>;976hedcdfhjjhg58::;::;<9548=><755777898677532ddb`__`aabdcccbcca``aa``aadggfgggfdf4555435543345543445 53d233112454hed3fedb`_^_^]\\^`c1.//-,-..---,*)*+,-.-,+*,-,*))(('&)*(&'*-.-,,+*))*+,,,.151/--,,+-,+*C)('(*.32/.-,*)*+,/000--,+)))(()&&()+++*)((*+*)*+,,-,,,+*,+*))'&&$ "&'&%&()+--,,-+))(&%%%#"$()'(-/.,,-..,++,--.//-*''(('%$#$#%*..,**,,+,--,,,+-00-*)*,-.021/.-+*(&$$&'(''&#! "%(('&%$$##$#"$&')('&#""#$&)**(' &$$%%&%&'*,)''##&(++*'&'&%$$%&'&?$##$#$%&'(()'&%%&''%$#"! !"#%''&&(**)'&%$#$$#""#%&((('&%#"!!!  !"!"%&&"!"#$%&%#"###$%$#$&&$m%'()('&%%%&&%$$'%$$#$$$%%&'()))'&&''&%%&''&%$$$#"##$%%$"!  !"!#%%#"!! #$#!"##$%&'%$$"!"##"!"#-"""$(*(&%$""#%$#""$$""#$$'()'%$%''&&(('&%$%&%$$%&&''))(''&%&'&&%&'&%%&$$&''((''&$""#%'%$&&%$#""! !##""#$%%&(+*(&''(*+*(%$#"""#%%&&&''(*+,)!"#$&)+,.00,)'%%)--..-+(&$#%')++*)***+)'''(('&&''&%$1%'(''%$&)*(&&'''&%&'*,*(&%&$$&()++**)(&(**'&$#%()))*L'''&$$&''((%%()&%(#!   "%%&&'''&%%$%&&%$$&&%$#" !$''(''&$! #''%$$%()(%$&'&&''%$$$#  !! !#%'&&'&&()('&$"#%&%%%$""$&'%#""  "$$##$%&''('((('&&%%&*.+&#!!!"$" "$&&" "$&%$#$&&&'&%%&$#$&(('()*+;-,+,,+**)***'&#!"#$%%&&&%%%'(&&)*,/.*(&''%#$#! "'& 45!#$5#"%)+)'(**(%"#%&&$$'**+,**+,./-*(''&&'()-.+)'&')(&$%()z''('')*+)(*++*)(('&$#$&(**+++/0,)+,((,**,,++.0/.1.)'''##&-2321222357788864466432345333489521002357872.../12578<""/0!!%# !!! >BDDBB"""$(-153//1100/,*)(**,/0.--/2221/0343-**)()/11..256664225663,&&*-/.,/3343/*'$#%&),/47658@A?><<;:8779AHJE?<>@@>=>>=<;;>@>:757:;85/,.-)(,/.0565348720/2432330./0111.& %-38<>?<:  !"##""&'$!?=<<>@?=@"&*+(#:;@B!"#$%&%$HE@> ;9:<>@D#D=8553//562004;<8789:;97641/147986323467543321.**.0/.,++,/22012103640/23112210/-,-.-*(%$',159<:30.)$$$#!#).3:;5.,./.-,+)+0783003540+'$$$#$(-,*'$$$'-/25:==>=:3*# &./+*+)$"'/0/38<:6661*'&# !#&*-/15 &)'":557669<;:<@"'-*=007AC@BJ''IDBA?<;8:BFE$(--'@=@90...//--03420/./023348=?AEC== !A>70-,271),43.,.00-+*+1:;62/.+$")-.27766651.3=FJB831/18=<7558;=>:657:@HLJKMI=1,-/..0/-1ANE4--/222782-.00-($F>657:#++'%""&  "&+/0,*+..+**($!$(*.53*%%'))('%%(,,*('''*,,+*)(&##'$<6#&*,,.-*& 9!(2;6(<:9!'(%=#$$%''$"$'))&!;:!$$(-/-*&!;="%(*(##'(%$&*-/1/*&(-/.-..+(('()'$!!$',0/+)+-022441-+,-.0221049952/,)&%#$,0042+%&)*)%#$&&)+*&#%)+,,-*$#'(((2A<,%$%$#%$ !(*+,,-/((00*$" "##$&(&",%(%#%'%%))(%" !CE#$GC>?ABA<;?A;76665:996530.44-,:>86325630.,''2@FA>@J+)=1=F>79@FD>AB958;<7/-,,+,/.+.0E0>&+-37/(#?K/3148;AFLRSK?8546DVO6(@7: #',-,,+*'!63454@())*.30/;>769;959EKIB80-(!  "%((-2!)5960,//)&)--o+,/4:>=8784...("#(*1=DB?>?<4..54.+& "()$ *'"%,'%478=?B;-(&%)080"!#" " ##Z+&$320//0111/.10/././0/00//0 +/.,,++*++,/01///-0../.-,,+**+-.倐߀ځ̀ǀ뀆ƀ Ů_-҄ӀH넒Ŀۀ¿ý򂋌þþ테ƿ¼̺ο€Ŵ񉘚€ɾǺ²ȷ󑣰R񄒘¹ƺ˽Ŵ׀큍ʾɳº˰􄂀ؼپǿ̽ѫȽƪѿ̭¸ϻӯñѻ5eggb_af3eefgfdcb`_^^_^\[]`a`^\ZXTRWZXXZZ[\]^]ZYZ\\Z\\[[]abbcfknjda^[[^bb_^\[\]\\]]_f78leaabb`^`cdffdda][[\\[Z[]^0a``__`a`^^`a`^^_`abcdc_[X:VUVYZZXWVUSPOLIJNRUX[[XUUVXWUSSUTRONONNOQSW^a`aba^]^][ZZ[[ZYQXVVX\^[WVTSRQQRSRRRTX\\[[\^\YXYZ[]`b`^]\ZXVURQQQPNMMJ?9CKLLKJIILNMMPQQRTTSRQPOOQTU/SQONOPPOOONOPQQPONOONMMONNPOMMMLLMLLMNOPPQSSRRRP^RSRPNLMNOQSRRQPRTUUVTRRQRQPQTX]_00/ZWUSQONOMIKQSSSQNKIJJIIHHGGHIKKMNNOOMLLNPPOMMPQRSRQONOPONKKLKKNOMNPTVVUTSTUVXWTSUVUZ02323432/^_^\\\ZVTSSRQRX\ZWTSUWVTTUVVUTTSRQPOOPPPOPOLKLLLKKLMKJJLNPTVTQMIFDCCEHLPRRRTUVVUTPMKJJKOQONNPRUUSOOPQSX^_\WTOHDGNPMLNNNOOPQSRRTUTUWZ[ZZ\^00/[WUSRSTSQOLLNOPPNOPRUWWTPOONLNONOOONNOQRQQRTVWVVUTROMLKMONOPPPONLJHHIJLMKJKKLOQQSW[\ZWTSRRSUX\ZWYYWVTSRRQPPRSQRPNPRTVYYZZWUX`3c[YYWX\^[YWVURPQSTVXXZ]`^\[YVTUVVWX\^[VWYWVUUUTRRSTSSRTTONORSSRRRUY\\YUSSTVURSWWVTSSQPRUWY\^]]\]__/00_\\\ZWqUTTSSRSZ2431/YZ\0353/ZW[02321123442004:==;961YRQRRPOOOQTUSRV]_^00038:6[MM-577511343453/-/00_\Z/13566422332234544435566655677556678789989:);>?ACDDEFFEFFEB@@ADFGGFFFDBDHIHDA?<:9>>?BDA?>=>CFFDEHJJIHGHGEFGGGFCBCBCDEGFDFILPRSSSQOPQOONNPPQSTURLHFECCDCEGIJJHIJHEGIHINOMHFFCABDB<9@GH?2d5569<>?><=?BBCDEDBCDEEEB>>BEEILLLMNRTQNKIIILOONNNLIFFILKJJLNOONMIGKKKLMNLILNNNLHGHGFFGJLNNNOPUYWUVVNNUTX]\YX[[][``WRSUOLPU[^_`aefhlmjgeec_`cda]ZWX[]bgimrolhgefgiigc]YZ\^`cegjp:<<<=:k:@?>>=>DFB?@CDFGFFFC?{xz@@AB?=BJPTUSV[\_?^ZWQKILMMRY``]\\]]]\Z\^`\UQOMLQX\\WZbfc`[VTTTQNMJHLONOMMPQSSQPSTV[_djkigilljiihhikjgggca`a__bekopkhkmmortrpoptz|yxyyxwwyywspt{zvuwww{}zxvsmiloolid`_`^^`^\_aacfgfdccb_^ZWY\ZVVYWTSRSYafffkrv{DFEDFKONChhBIFA~zz}~{xvyAED@>yspomlllnqtvvwxurqrttqligfeb^\\]]\^_agsG}srvvqljklljgfgdccceffdcca_\XTPMQXYUTUXZZ[ZY[]]_a^WQPV^ecXQOMLNRTQMLORQPPU_gh_QJIJLMOPPPMKNSW]`^YSMKLOPQSTWXVTTVXYYWRMKOUZ[XVUVUSQRW\_emtyytnf_\\douqh`^ab__hrw{|vlecefc^^ba_`chn9IMNZiifmxyrkkmf]aszoXh`XX_dfgga_dkrunfcemw}voe\WRNJHKNXn{lb_`a`^]^]YTQPNLJMRRQQSUQKC9:?@?BDDEDDEFIIHGFFEEFECCEKa@LTWXWTSVY[ZTMJIILMKRaaUOPPOPQOKHKNPQPQSUSQVXUTTQLHGIICxwGU_b\RKGEEA?EOTUQLC{trAKOKA=EMRTRMF><@DCDEA|?FPX`daZSFw=EJPTQKHIKJFGMT[ekle[Y[ZY\]WMHHIHHJHDCGLQUXXWX[WU\cfc]WUTUV\gjd`cjmic\XSNIGNW\^[SMILSVSPMJHJNQQQTY]^[UORWWVSQWaeYTTRNKJKMKFHPTTX]^ZTMA76:?HPV]a]TOONF>>CGJMNMKJHEA>==?DGIKLKJMQSTTQMHCCC{yvtx~CEGIJOW]_WMEBCDCDEEAA@~CEEEGPSRME{z{BDFH|fipu|EONHJOMvmq{GGEyrhdbaca^^]`nB}u{umjg`XSKM`ntvwwpkongq~{~vmuyi\VRONOSRKKROC|zGX^][UJwxQWNXhmlh`\b`U[_bgowo^YRDtqm;JQQV^XI?skltsqKJHGFDJXdc^cjwoYTVYYOA<:;=:CMROPQNMJMWQC;9:?HKMTUTTTYWRSRLKPUTPLAv>FP`s|kWTbbRDBIPZgjaXSFt>JT_bVMR^fkqk]\kpfRHV`ez}rh]]hldfrtog^XQLQUSKCEA:AP^i^INbklsv[E=CLXcV=f>LZ1.TRSWZWNEACDA>:DMS\_0012223567776Y8<=;9789;<=>>===?AA?;985236753]U]59;<=?@:655ebba`cgij5689:;;:99::6447986423567885455432ca` aacdcbbddc.b```bceghi5kk555444565554fegi55fd3543122344335455gfedcddccca_]\[[[`/00-,-..-.//..--,+,-,*()+,+*)'&#"%'&'()*+,,,*)*+**+,++,-...035300-*),.-+*)()***++,151./0/-+,./00/.-+***('&''(*)))*+,+))***)) )*+,,,---,?*))***)()++*)((('&$" "$&'))('()**)''('%#"##$%'(,133343100/-,,,+*)(),-*( +'''(('&&'*,/*((**+,./--,,,++)((()'%$$""""! !""!#%%$%&&% +$&()))('%$#$$%%&''(''&%%$##$$$%$#""!"B#$%&'&''&$$#$$&&%$$#$%&'((''&')**)(&&&'&%%'),,(%$##$$#"!%'''&$" !! !!"###$7#"#$%%###%%%&&%$$$%$$""#$##""$&%%&()(''&&''('%%&'(''&%&'('&$#$'*(%$$%''&%&&&%%&+%$$$#""##!!"""!!""! !!"%'&%#!!#%&&%&&'$$#!!!#$%$###%''&$#$$$%()'&&$  $$#""#?$%%&'('&'(((''((''&%%$$#"!!#$%%$$%&()(&#"""!"###$$##$$$#$$&'( +'&$#"#$%%%&$#"""###""#$%'('),-.,)' ()*'#""!! !"#<%&%%%$%&')+,--+)*/0*('%&)+**))(%$%'()***+,,+,+)''(''(+,+())('&%%%&&$#$&'''&&(*++)'&&()(&&))('&&%%&(**,-,,++,,*))*)'%$$$###')()'&((%%&'&$$$%''%%&*+)' '&&    !%%%$! "#?"""! ",+"!! "#&'%###"!"$%$""#"!!!##! "###%$"!!"##$###""!#&'&#!  #$%$!"#%&&'(('''&%%&'&$&)$ !!!#$#!! "$$##$&&%%$$#"#%%&%#""!"#$$##$%')**+*))**)((()))**)'%#""!"""$&'1'&$$%%#$%$%(+)%##!!!"" %&!2!##$$%$"#%# "%$%(' )*)'%$$$&)}'%%&'%%%')++*)&$&''(((&%'()*(%%&%##%&')))((*,+*,-((-,/20-,--/.01+)**&%(,/12234457766564113420.,-/03668;964223466530.//035667;? 5"!408" "#"$(&%$  !#%" @ACF#"##!#(,..,/12531/+(')((+154224+323452.+)(),/22/056420,*+++**'&(*++*)+,-.,*+ ,/2479768::98666322211248<;75689<@A><;;>AB@>i?@@?<:>BA>>@??AB@?@=989::864222000.-/001344345421/-/0.**,+('')-144359<>B#$#"#'**#54"&# >=>@@@?=>"$" ;7554758:<<==;977877534320.,-./02336=CI&I@98;:8568876445433345331/.*(+//,+,/1//01133.*),275/+)((*-.-*)*+*)),3:;5,'''(*,-,+*)+-/1231.*((*,-/03320012431-)(+-12/--//.,,.1249>A@=82-+,18>>94356327=?AB?9535763353.-.03%*($?89= !"!"! <83.,19@!!B@C'+)I@<<@?957A%%HFCCGM'LA50-+,,)%!!$%%&')-148=B@735:;744201586/,-.273-+,,*&" !$"77!'((.8:7g:@A<8894-/;FGA:52./489972/38820.+('(*/;9!(*'"&)**'"!!"$!>#)/5850,$9!%),*&%&(($#'+/5883,*++*+*'!#(++*(),+(,121-*()**.563138;73/,)&$"&-01/*&#$*,*('%$%(++**-01/+(*--,)(+24,(((&%%&'&##'))+./,& #(,/,&"#$  !#$#!  #$%&&&')***(&#!""A??@@BDE##$&&(-00+%! """#$#CBC! ??#$$$H%+-,'"CA>BB<B&,,''+*I=9>EHK%$#@<:5345541/..4A"CBB91-+)()--))/-%DB&0431-'>A04,0;??<76;904789?E@41-$;;8'+*-30& :79??7-&FGHK&KMNL(*,,*,/01/-+TQMJKPTWWX,-./1/[ZY-/0/^\YUQOPPUZ[\ZYYXWVSOKIKKHFHF46"+^WfVPVYVTSSTVWRMMOONPV[YVTTVTNJOXXTRNIFECA@ABCEHIHFEB@@BCDEFFGGECDEGFDA@>=<;;=@ABCDFFFEGHGHIKLIEBA??FMLFC@>==?@@>==>@CEDEGJKHHKLJIGGHHGEA>=>ADC?>BCFJOQRUQLJKJIJLLKLOSRPMMNNKGFDDGKKLLJIHHFGGDDHJGFJIDBCED?=BDEB=<==<<@JRUSLGHKKIKPQMHCBEHIIFFHJIJLMONKOTUW\[YUPMMMKLPVZYUQRTVYZ^bca^YUSTVVX\``_`[WWVSU[YNHKOVWQKJLPPORUUTTW[^`bdgjhb_^[[\ZYY\_`_^_^\\\]_dijhedcceinqqrttutrpniisyump{}||ysnrxsia][X\hrz~ukgecceefjnpnlkhfc_ZY[[YVZac_ZVSRSW]_`bcbchr{~DEEDDFFHOQMHGIGDA}xwyIOLBxs<BA=>|wrkegifa\[ZYX\_aeozztrw}{phhknqttkdbfihea^^]]\[ZVSNNS[]ZY\][WUVY^bccb\TRV^ca\UTVVSOOQRSSPJIQ\db_bilhb^YQIFDEKW]]_dda^djlkkjgb^XTTTSNGDEHOW[XTRRVUMHJOV]bfggjpwvpotz|zvoe\VUWZ_hrvod^_]XVW^ijd^[^o~EIKJLLKHCzux|@BEGGFB|yy}CJJFA??@CKLE~~ss}GGwne`]VNMPNIKT\^]XV[cheddb\T`LGw_RLM^tt^IBHPTOHKT[]ZVVY]ba][XRPU\^]ahnsspqzvgdlutkehprnlf][_glnnmnmhefqoc^UNNKIOXaeekogZSTTQPU\a_[WSPNMNPSRMGBAAvb`j8:;;>CIKD@AFLKHEBEFDCDEDA@BBIlKSX[ZWWUPPY^VJKSXZTLMZa[X\YSQPNLKMORRPQSUTQSXWSNLNONLKIEHTbll`PMTZ\XOFCEGJIAxx@HQTRMHFILMNLD@FQWTOKE@}I[^YXYYTHACHJJJKJFDDBAGOX_difXPYcb^YQHCBB?4UU.,T3DOVXWVVXY\chhe`\WSRV_ebXWajmkicXPMMPTWSNMNOOKIIIKMNNPTXXZ`caadgjg[RMHKV[YWUUUQMKIILMKNUXVSSSROIDFJLOPPRQLLPPNG?<=AEILMJIIFB>><7:CJKKKLPQUZ\YTOIC~tt{jh{GMSVX]aXJEEEDFFD}BDHLIHHDHIOV=RKF|x|EJJIosF{zFKLGqlov~}w{th[\diikpyDG{tNqif^ZWNQbpww{ylft{ldjptv}Byh`\ab[URTRE~BGKIC{P^`bhdI>ORKQ`b\YSGGUWNNXbea]^b_[ZTMIEFJLNMIAvy~t`cFWQb[PP^qncdx~pfc\SPLNVXPGMYVOJEGNUVTRRRTUQG?EVa^WX^^^_`a`ZRLRUZea\_myrkibUMLKC>?GKLHEDDD@CT`[SJ;jC`gSGGA@:44f`_figeeeff4689:;;978974f46776b^b34676322cddcccdfdaacec`abeh5km76541543ed`Q?9EUaffed1233455434554hgcabbaa``bba_^]ZYZ]-..-,***++-..--.11-))()+-,*w))($#'*++,--+)),-.-+))*+,..//27851-*)*+,./,+,--,++,.134311//.,,././/.+))'&%##%())(('')*,,,+*)('(()**++,,*+-,+)())(&&'c&%&&%##$&%$$$%%%#$')(''()(&%%$%&'*.36530-,,-,+*))***))((''('%#"#$&('&'(()*(&&()+,+&"$'*+*)(''(*--,*(^)(''%##!$')(&$$%&())),-+('''&''&(*(&#!"$%$$%$$&(*))*,,+*)+*(&$"!  !!"" !$()*)'&&&%$$$%&')-***+,,+,*(%$$&*/++)&%$"  ""##$$$##"""$$#%&&&%%#$&('%&)+*&$%&'&%.$#$$#$#"$&&&'()'&%$#""#$%&(*-0# "&'&$##! !!%**)%#%&''&&%$%&()'%r$"!"!!"#"#$&$#"#&&$###"  !"#$%')+,+**('&&%%$$%'))(&$&'&%&&'(()*(%$%#!%('%#"#$%$""$&)+*(())('&&'(('&$%&&'&%#!!#&%%%$$%%#!!! !!! !"$%%$""!x"$&%#!"#$%%&&%&''%#$$%&('&%%&'()('(+--,*)('''),)%#$#! !""#%&$$&),--+++-/0+(()'&%%''%&(()))+--+(''(*)))'%$%''),.*'(&'()('&$$%'('%%&' (*++*(&%$%)+(&')*)()))*+*'&$"!"#$%'$$&'(*+)L*'&$$&'(&$###$&('&'))*)'%"#!' %    D #"!  "##"!"""! .(.%!"!  !"#!p !$&%#! ! #"  "! "$&&$#! !"#$##$$#"#$%$#"! !!"#$%%$"#&''())'%$#!"&&#!  !! !"#$""#%&%%&'&&&%" "$# ""$&(**+*'%%&&&'r)+*(&&'(&#"""$''&&&$#$$###"&'$$&&#!"#" ""!   ! "$$&'&$"#&%%%$"""$%$$$""$'(''('&%$%'&&''&'+,,*&$$&%9$$$%'((''&%%%)))(()))())()*)*-.2210+)*--*))(*+))*++,,.1245421/./02210/...01248:889951/-.00126865;><:: 98 6/432%#%# %&# ""'&#!"$%%'*+(%!!$'''%%'''))*-,+-0014520-)('&()+./,*+,./1466541...//036532/,-+*-10)$'*/1,((*,-,-.-++-/0012366422//0/..1221233122335776544458<==>???>>=;67=A=9;BEEDFHGEDB@=9<@=7310.09?CD?8552133469:8887641..01.,/22.*)''(*/0011236D'+(!;93*%&*,,-.048; #!;87435642//0001236:4/---/27<>:4010.,.28852117>!#$$%&'&"<9;?!#%&&%#B>;;="&'$" #*,'GFCBEHD=>CJ&&GHJHC@:2.,)&&((%%*//.,+/486432-'-D*(?/&"",9=1$ "&)&#$*01/--0377431,)+133468;<;64/*+(&)/588;<6.*-/.,.3531/,*)((*-.+'#!!=1-00%+-.-+,+((.2-%$).0+$$,1-,.,)('&%%&())'()+*()++(%%'('''&##+6==4)&,01.)$##$'&!<; %+-+%!!#%&'%  ',+)&#>'341///,$#%$$%%$""! $)/3784*$(..,(# !%*,+**+,-15420-+)(+263-+178762+'&&'*-+'&&((&%%%'()*+-00023335685/)&"#*-+))**(&%$%''$%*,)'&&%" "$%%&% $&&! "##!  $%%&'**,./-)'$"A;;>#%&&@59G$>=A@?#')%B:8;?DB=>CGHB>91278657;#&G=:K,J9540/1221+,7?CAC@619>626:;;?B">62/340,*,,#>"&*)$AE,65597%,/(,6621-%%01+-4;<8446411-(&$$&'((&!;?E?01&3/L51K.3-4=925COMJGDDA821-'%#"(*&!%-)# $('%$#$%&$ (/.)+0132/*'+.171.08?943/'"###&&#!! !-51+%3#47*## ,A>61)"$(**))'A=(7?>=;4,+370'&)+,-01/,$:;%.21*##)*,7;539:2+/7:308>7*#*4,50/-(&''#1(/ %#$)&'..(&+.) )252*   ! $$b()/,,0210//0/.+*+,./.-./11//11/.-,.12/.,#%,//.-/0.---,,+,,-,++*))*,񀃁ۀ򀄁ā󀇁Ā́ ܅ڀʺ݄EɄWż¾фԀɽ8ʾ¿ĽӀķƽ½׀½ѼȽ»¹ʿź򁉐¾рʿ«½˿ͯԿ燠ľļ녜öƻƳ쁆øȾ຦ϿíչϺϿǯȰԶľ֋ۆξĿ>i_acdcccbbbcfihfdehige`]]][\_aaa_]\^\WX\_``^]]^``_`aa]Y[]^^]]^bbadj89lea]]bca``_`cecacdcbdeecbba`behjhb]^a1q21/__]^___][]a22a_]ZYZ[]^^___```aaa`^]\\YVUVVTTTSTVVTUURPRRSSSRRRQQRSQOPSUVY[\\ZZ\^_ab`\YWTRTVVVUVZ]\Z[ZXURONORSST-UWVUWXWVUUUVWWVVVTSSTUVSRQQTUSRRRQQQPNMOPRVZYXEYWTRTY]_]YURNJIILOQMDDOUVUVXZZYYZ[[[\^__`abb`^]\[[_cb]XURQRRSTTRQRTURP,RTSQQSSQPPOLKLNNMLORUWVWUX]_^ZXXWVVUTUUUSRPNM"KJJKKKJJKLLKLMNOOPPRRRPPQRRRQPOPQQR8QONOQQNMLLLNNMLNQUUSQRSSRRRSTUWY[\\_11ba1`]]]XTRSTUV[]YTSQOMLNPNHCHPUUSPNMNNOQOJHGHHILNNOOOQROPSQMPUWXYYYWQMJIJKHFILNPQTWXWTRRUVVTRPPRTTRPNMMLLOQRRTX[[XVXYUQPPQOMLNPSRQQQSUUVVTTTRQQRRSUIX[[ZYWUUTQOQQQRQPPQSRQPQPNNOONPRSTRLHIKLKLMLKMMMNOQQONMNNMMMNH;:HSRRSRQPPOPPQQRVYYXWUTTUWZ[ZYXWUTRSPLIKKMRVWURRSTUVWY\b33c``^]][YUTSUUW]_^[XXZXWTQQU[`_[YVSPPQUZ^_][ZVSRRSVVSQPPONQTUTTUVWVSQQSUWUSRSUVVY\ZVTTSSTSQQTXYXXY[[\^][ZZXVSQOPUZ]]YVX\\[YVWZZ[\^^^_^\^133017:8533342`]YVUUX[\YSNLJJOVZXVWYZZ[^\Y[/11/ZX/34320/1210/-UMP[012466542/.122354 5665445568765 45676667999::;'<=>;2)%HGGGB=ENQ*SQ+-.-,+*RQQONPS*+,,+,.///0/.-YWVVX[[XURRQQQSW[\ZYZYYXVSOMMOPOMLKF=623CV]\\]ZXVSSTSPNOMLKKNTWXWTSSOMMPPOQVVQPRRNJGDACKQPNJFCBBAABBDGGGFDDCBCDB@?=<>=;;?CJMLIVGGGHJJJIIKLHDDGIIIGDB@@@><=>?@AABACFGHHILMNLIGFEEEB?@DHHGEDCDGHJMPSRMIILMNNLJILONLKKKLKLNOOOQQMLNOOLJJKJJMOPMHGHHFEEDEGECDFFEEHHGD<=@<:;<=>@@@BCEGECCDGIJGEFIHFHHFGIJIHJKIFFFHKLMQQOQUUUSOMMKJHHJLMHFHJIED?BHHKMOPQTTSUSPSRTTQVXZ[XTOLLOMJHJPWXTSTVUUTUZ\]_`ceea[Z[XVY[[^_][]]\\]_fnt;==>>pc[TQZcdegiiint;sqputos<>><:9<=::==;989;;:97569:8530[_^U[45hdb_[Z][RKIFDHOMFDDEIJLPRROLGGIJKKKLPSWWUVVSTSNJJOTTSOKKNSWURSTRPOLMORUW[^_^\\^^[XY\ZUTSSVXZ^`^YXWSPQTUX]b_[\^`^_bdggedeeccddgjigea^][[[YY\]]afiigcbglib`cgjnrutpkkouz~~vpoqsvyzzyvrolllha[Y`ejoqpmjkoqnllkigfghhiheccfhggijjheeedb]ZZ\\\^_ajppqtwwx~GIKLJGDDEGJKIEBAsZMVemi[NNXclruw|}xogfo=@A@ztsrrsrpmifbZOIKOWdlmkkppoliggijhgea\Z\]\[ZWVTSOMOU\cfec_ZXZ]aba``^\_ehfa\YWSNOSY\ZXVUW[WP)LJNSVXXWVVUTVX[]\XUVZ`gnqqng`\ZXURPMIFEEDBAAACDEEFGJNWafeehmoib]ZZ]]XRKIILOU^fjgdgosqkfdfmrroryHOOGyCD~rt{?AFJHD~urv@DIJGB@AA@BCEEBDFEwjdiqz~~tkd``_ZSLGDCEQ[cgfaamxyskhfb]_ippj`[Z^gnl`RHFLTXSLIHFGIHHKLKIGECENZba`dfeb^alvvlfimnjcahqtqljim|HJupqpoopsrhfigb__aaaflt~}x{zhTNMKQbvwh\VSQRSSRNDtmostjc7?FGD@BDFGDBBCDD?8;DHC?@BDFGEDJiFOU[ZURRPPVWOLV_[UTUZb`VRTXYUNKLMLMPTUSUXYVUUTRQNMKDBIOQPOQQOLHJNPTRIEEFHJKIC@AFKOQPKGHJLNbLHKRWUTSNFBAHV]\ZURPNJGHIEABFJKIEBBKRTV[^XSVY[^XMC@A?6UFJRSX7FPX[XWVWX\fnmd^XROQV[]YQOWdlkg_UMKKMONMPSROJFEJPNNSX[^acdgkmohZSMGJV\\[WQICEGHIKLMLP[a]WSNIHJLMKJOROJGHJHEB>;GHDMTK>oETF79;6?:4edbekkfb```be589:==:888mhfeg96773_]`b34675cacfgfdcddcdefedccbaabbbaabbceh567778998765543b[]g5ih44332343233234553edb```aaa_]]^_`..//--,/11///1210-*))()+,m+*+(%&*,,--,+,--,,--*()**+++-...0572.++--,,-./13211210220/..-.02442.**))+*+,++)(*,++)('())**)))***+**+*(())' ())(('$#$%%'@&&((&%&'((*+,+++,./021.,*('((('&&),++*)(&$##$&''()(')))((('&%&%'('&()'&%%'('(&$%%&(*+*+++*(&%&)+,+)&$"!!!"$%#%((())*))*++,-./.../01/..-,,.0.*&$##$$$%&&%&()(&&''&&&'%$$%%$$%%$#$%%##%&(('&%&)*+)('&&&%$%&&% $$"""#""!" !"##"##%%&&'&%$%&%$f"""##"!!!"##""#%((&%%&%%$$$%&'()**,.-)''&#! !"#$&'&$$&&&%#""#$#  %('&$#"##$%$" !!!""#"##$$#$&%"#&'D$! !"! #%&&'(()(&%%())'&%$&'&%$#"##$&&&%$&''%$&('%$$%$""#$&%%$$&((('&$$%%%')++*))(('%$$%%%$###$%%$#%%%&'&'&" "##$$"!"#$$$#$!!&&'()('&&%%%&'(e*++)('''()**)'%$#"!"! "%)*)''()*)))+//.-,++*)'&&'(*-/.+**++*(%%(+/.,*(&%$%'*--+**)(''')*'&%%$#%'()**(&&&'''%$%%&&'('%%%&'%%&'''()***++*)))(&$#$'*,+(&'())(&&(((*+S*)**(&%%%'**(%#""!#'('&&'''(*)'('&$!'  !""!!#$#"! #%###!  "$$#!!"!!"! "()'%#"""!!""#$%%%$#"!"""  "%'&$###%&&&%%&'&#""#$%$"! !  !" #%&&'())(&$#!!"%&%$###$$%'(*+(%%'()((''(*)''&&''&')(''((%$&((%$$%%&())(%$$$#""!""  "g###"!! !"$%$#"#&&'&$%''&&&$$&'&&'(&###%&&')*)),,++)((''&%')(&$%&$"" "'&&'()*++*+)(*)))(-/11.+('%%#$*..+)*,,***-/0125663/..,+-.-010./0/28:80,'$*1235887:?<98<=:< $'&"&('&%$##"!"!"$%'()+***'%&&'((()+-//-..-.-)&'+01/+'&(+.,*+--,+)**,-.133322321001/,+*+../120--.+)*+,.253013422345433443344688765321110144567886436:83369;=?@?<87:>@CECBED>::=>@BBCC?;978851..367:;;977:<::98645676775335544566422232/--/../028<;<=?>?CGJ'((('$""#$&'&#@A#"<+!&/30(!!(06:;<@B>8217!! <9:::;;:8654/($$&+388m657887545788764101221/.-,+(&',167763/./1343210/158740.-,)),02221//0-('&(,/10/..-,../132/047;>AA?942220..-*'&&%&%$$%%&(+068757;=:51.-/0/+(''(*,16962158731148;;:?92.-/4992)""&,.+&&&%%%$#&''&%$"#)05435775239??847;;8316;:88@&'F<:==>>>@?86875335558;?DC?BC8+(('*5DLF;3/.---,+)#968;<5//"'*--*))'',-(&,20,**.42+()++)%#%&&&(**)+--,***)'%%%! $(**)**)&%&)+.,&#"#$%&%" #&)*($!"#$&%"#(+*))'" %/330,)(%#"$$""$&%#!!&***,-($&)*+'   #"(,.-,,--.49830-)(*-11.)',48750*%$%&'&&&'&'**(&##'*)),011233579;6-)%!"*-,,)&!!#$&&&%',/,)&# !##!!$&$! !!!#" %%#"#&&'+13.& :968?@:9AF@79E)..,,170$ !!""$%')'),)&F==F()()*&!!##C>=99?%(JCBC?9789<>AEEAG'?0.4?FD@=79>@>::BC:64//01760.03425869BB3,135=CA@=:::72/.-.-)%%%')&ED&.33:C90.*$$*./-)),+0/'H&1<6,+-.12/.,('&#!#">BD=9:FK8.=C>89"/:6/3:<>CIMLLKC7/3:62/)""*01,'%"!"""'.1.$""#%'(*-3577-")4,+259:6338=:4.*'%%&%"#"!#"(,&2!+!.=FF8&"),'')#'4753/0-&(,*')+.1-+/52)# &'$"  $(&#$,42)$*06:<<:6453/04300,&%%'*+(#!/."+)"%++*(%""#$#!"&)$ #"#!$ --,.231.0/031/..*)*+,,./00///001100//.-,./ *%(/0/../ -,+++,,+**,-.€݀Ɓ쀂€ހ ۀ%NÄŀ¼fûׄӀ󀃁~ӾۄـͷüºϷͺ¿ħ¾¾ȼż̀ƿʾԀ½򃊅ĻѾůƿȳǿϴ̴􊧸ȿ݌ɳ¹ǽúȿ􌜞􀊌􈓋怊÷Ľɶżڂ˗µǺ¾żνɿꂇý»ªĶȰĻA䒭󁊏  +cdgggfdcbcdcbdfdbcb`bddca`abbaa`\[\[Z]^`a^\^_``cedb``a_][Z\__^_ci78mea_]^`baaeklklnkd_`dijhc^]]]^^\XWZ^13433a^^\Z[_c2ca^^^\Z[ZXXYZZZ^dfeb`]CYX[^`aba__`_]ZWWXUPMNRTSRRPOOPOMLLMNNLLOT\aa`^[WY^``beecb`\YZ_`_][ZYXVVUTTUSRRTVXXVTSSSUXYYXWWXXWWVTSRRRQSVVTROORUVWXWUUVVTTUUV^220^]^_1a[YZZXVSONPUYYXXXYZ_aacdeeca__^]^\XTRSTUTOKJKLNMNPRRSTTSSTVXYXXWVWX Z/11/^]]]\YVUWYY\]0^]\XURQSVXYXVSQPONMMOQOLKKKIIIHHIKLKLMNPRSSTWXZ\\ZYXVTUUSRQPNMMNPQPRTPNMLKLLMMMOONNOQSTVX\023463XQTY/_]XTRSQQSY_cbe73WRQOMMMLLLKIHIKJKLKIGDBA@ABA?AEGGJLNNNMLKIGGFFMSSRTUTSSSQNKIGGJOSSSTWZYVTTVWXUSSQRTSQOONOOMNQRQPQSUVVXYWVUSSSUVUSSSRQQRSUWVQNLLMMMLLL(MMLKLMPQSTRORWWXWUUTQKIIIHHIJKPRQOOKHJMOQSSRRSTUUSSRPPPQPOOMJKRYWQNNLMjLNNNOPQSUUTRRSTW[^\ZYWSQQOLGCGLNQQQPNOOPQTUV[a332]Y[]]`_YUUVUTWZYXZ[YUQOOQTY^b]VSPOQRWc530_\WQKKPVZZWVUTSRQkRVXXWSQRRRTUUVZZWUX]`a]WRSWYSLNV\\XWXY^a]ZYY[ZWZ]^^_ba^^00/\YWWZ^0101210^//01114751/14541\YWWWVUTRPMMLMPUUUX#YZZXWX[^00]Z.243212320../.XVW\134421000134567653 4455579864445444678999::;;;<(=<81(FFE>68CINQ+**+**+TSRQNMQV+*+,-//.//./-,YXVWXXWTROMMPTWZ\][Z[\ZWURPOOPRSSQPOPNJHILQTVWSRUUTTTROIDCJRWYVRTURMLLKMRUSRSSSUWRH@>FSUSQMIEA>@ABBDFGECDCDEECC@=>?=<>DJPPMKKHGJLMLJKNOLIDADKNNLFBCB=8;??>>>@@ACEGGGIJIGDAACFGEEFHJKIFDCEFGHIKOPLKKLMPOMJIKLKIIJIIKOQTVUTROPQNMRUQPOKIMQQPRQMKIJJGDFLRKGFGHGEFGIFAAA>=<;=>?>=>?@BEDBDIKLJEFFEFGGFFHHFIKLKJJKML5KNQSQRPKIJJKMKIJKNNLECJSRJE?BIIHJINRVYRMOMPQQRTUVWTPLJIIIO[a[M>ATZVRQSRRTW^bca^``\ZXUV[``^_`^\[Z\cims;;<=;odXXdhgeeffgnw<:;=;89;;s88olj7:989876642`[[ae^\`235653`YURPNLF>=C7FGGJONMNOOPOKIKMQRTW\][XWY[WPKLNPPQNJJOW[YY[[[\YVVUTUY_a"^\[XXYWSPPRUUX[`ceffgijfc^ZUQRTTTY_`bbaa`bgkkea_[USUXWQPSWY[[^cfhmrqnmjgfffhmrsrqsuzC||}|||vux{}}wsplgdejnmhc``ceehmomhcdmuvtuy~}vsroprrmgcb_ZX[^ab]VTUZgv~}||vkipv{|z{EEC~|zz?ACEFD@?>;stvurqrqlkrx|@DHJJHEC@=xupjfcbcb]Y[adfd_`b_\\\]__ZUTSRSUVWVSPNORVWVZelomjhgc][]]]\\]adfhjjiga\WV]ed^[ZXVW\_ZPHFHFBAFMTX\`a__[TQQTX\XPNONLLLMNNMLJHGFEC~}@AEHNUVZ^]XSMJJJHDCBBDFLYcbds}wuyCE{klt}IJEzsk`X^pzwxBGFFKRVPE}wx=>?BDDCAA@@BCDDCBEHCwlilm:?ADDn`WRQSSRXcnstuxyz?DHIIGwjZKDEJMQZ_]VUY[[[WRLJNTVTJ:dmCPULBDKPUZ\]cpzshf`]`drKhY\`bb`][WVZ_fpy{pgegggijkmprohdgkjijmpt{jZX[`iru{tbXTRRTTSRPJwjhll:CGA:78<<>???@A@<3,2;?ABCEFGFA>?YAHIORPQRRRUTPMQRLHMQPPPORX\]XRSXURV^d_VTUUUTUVUSRRSOPZ_WJGGHF@yCFMTSPMMQVWRIFGFCGOQJEGNUXTIEHIKPPMJJPV^ff`[ZWPHA?=xAKOMHFDBCGILLKPPF?=DVZNDA>81/45325?Rbgd[TQS\gnpy}p_UOMPRX_ZRPU`ijf_XSPNNPOPRRSRPOMIDFOSQNOT\`dgebcd]SMOPJGMY`ZPH@=CJPMGHKLTad]UPH>:AOVUTUTMFHKJGDA><>@CHLKEA@CMNHIOErqolpzCiFL|Dqn?DDACRccUZmrnsss}te[RLHMWXPOQRQHDHNRRRQUWSRTSOMNOOW`gkdZSNPJJW^gja[br?Ar`^aa^\YQMK<_7=BLOCITLC>@EE@@A@;?Q^d^JBD>:K]UJHJNO\daesylXLGFHKPSVWTTW\\YWSLFDF[GHFEGApwEE}@HS^ebWOUbaQN]aZ__UOOOQQJ@tnadCPXTJFD>BILONJGDHV]M;e4;DT[-/.WOKJJIGFE@>B@L[b2334532699::999:;<;;<@EHGDA?>?>=;98G9878;;;<==:65jjm88le`abeg46789998996ifcc47::61]]`d4774cccegfbadijhgghfed cbaacecd5678928887665567765445653221c333dcegfedcb232cbbaa`_``_`c1220/.-v..///.01/-.-,-/.---...-,+))**)+-..,*,--./0/-,-..-+)*,-,,/4830-++-///26779;930023321/.--..+'%%&)))((*,//-+))((('W(''(+,,+*)'&(*+-//.-.-+*))*($!!$&%$%$$%'&%$#$%%#"$'*.--,*''*++.0110.+)*,-,+))(())(''&&') ('()***(&%%&&(})*+*)))(''&''())('%%')**)('()*)()))-)))*+'&(**)'$#$&())(((),.-.010/,+,,+,+)((('('$!!!"#""$$%%&&%&(*+++*)))*,+**+,*)))(*++)'&$##%'''&%$##$$##$%$#:"!!! !"###$%&'))()*+,*)))''((('&$#""#$$##$#""!!"""!"#$$##%&{(% "&**(%%%#""%(++-'$$$#$$#"#"! !!"##"! !!#$$$#" #&%#"#$%%$#" "&()(())(&%')*+)'&&&('&%$$%%$%'(&$ #%&&''%$%'('% +&&'((&$"##"*###"#%%&(('&')**(''&%"  !"&('%$" !#%&&%$%&&'''&&%%''&%$!"%)(&%%$$$%s&''(''())'%%&(*+,+*)'$"#"" "$&&&%$$%&())+.+)*++-,)'()((*,,+++*(%$%&'*./,'%$#%&)0+*(%!!$(++**)(&%$$$%&)+,+)'7(('())'&&)*+)%#%()%!!&*)'&'),-*((())()++,-..,+)('')+*('''(('&%$#$&&%&'(((''()('&%&'     !"#$#"!    ! !#$" ! !"!%(((&%#! !!!"$%$"#"""  #&))&$$"#&$" $&&&" " !"!! !#%.$$#"!!##""#%'&%#""##$%&&()'&&&(*)'&%%&&%%&&&')*#)(&%''%)+)()'$&)*)*('%$%&#!#)+%!!!"!#! !! !!!#&&$&)))'$$%%&''&&((&&'((''()(')***,+'%%%$'(''()('#!%++'$!"%%%&%'*,.)&''(('(*+++)&%%$%%$$%*262').,))*)*+-365351330.-,,021011//..0346960++14334666;@:79=><:563/-$""&'%%&#! !!!&(((*-,+,*(()+,+,.231../1/+**+++,*&%(,.-.12120---,-034$200/./-+**,-,-/134666775420,*+,,,/432325996430,,.10,,.01002577:=<;:988777:<;:::;>E$GDBDDCCA==@BDFFEDCA=:854347::742367679;;844:@?<;=@@<::889:84221.,.122-)(*.6@DCBB?86; +@CC@@C$$"A?>> !"""!8:<=<;;9658;>!#%&&$#" ?>;864232.+,03420131/124552/..--...-+)(()+-,/6;;:76540///0///146899862.,-39951/.-/253,'&(&#!#"',/144331.,.0452,*++*+,-..,+*)(((&JMOPNLK%%&(,..033/,)(()(&&%$$%)1742:BB>=;!%%$&+/,%@<< #$$"! "#$$"!#%":2000!"@80-++,,*+2:=<;=>="%%%$D>8/&""%&(-11//2221.+'&),-,'26#+.(!!&*.23239>;663134=L+N8.0345200.,.16ACFC7--04:?@CF@5/.../.-,+'FA:8 ;7<&##&(())('))&%),'#&)))('(+..*')-+*,152-+,+*)''(&'.2-$""$$!?91,)()+.31K+(+2773/,)(''(((*)**))(%"$*-+)),024531341*%''# #*/,$!%$"#%$)12-(%!$('# "!"!/+!#"""#$%',/,!429>=86;AA@BA?CK),-.077*":: %'&*,&C?D%D=@F###%**!9#*(F>8;"&((#<=>=<<<>><979?@BDAB&)D428:;:71'*7==95238;843h7984.**2963568=<5.)(3DLB43CMKD;7541-*)'%$%#E#&.1028:94+()(''&#%+,/1*B5$;=.**('*+% #))%&+%:<=:;B&H5&G&5.")44,0>B=AKOG;;C=3.*&#'--'&('%#%(*'')(&'))(,14750*(,(&-1692,.7 ":0/21/.-(&$* &&#+'! #"+5;8)#%!)6/'%&)*1635=A8.(%%&),-./---/.-,+&#$&''&&%!8?&$<")/42:,'+44(&03034,'&&()& :801$-2-%!"$&&$"!$.2'/!" +#%11240.-.00$31-,((*,--./11/.0232000/. ---,---,-*,,-//..-,--,.1ĀĀڀ̀Ɓڀŀ€ȀȀ Ŀ;҄рɀǀú2倊ӹKp¾óƶð¼Àý»Ƚ½􀅈ɾ˿̹ـĿº¾Ͽև߉ӵǻ¼򀇈녏񅇃Ƿſ·˳ɺéֻ˰ɹɸîƷ¾WGgecdfgebccdegfcaefca_^]a369:6fdcaaa_`b`[[]\\_beb^^`bcbbaa_^]\\^aaacccdilkhb^\]_bglpqqppomkhjlnlgcbbb`^\XTUUV[^_\Z[[[]^_bca^]^]ZXdXYYXWXYYYZ\__]ZVTUXY[\ZYYYZZYXWWUTTUUUTSSSQPQRSTTUVUTTTVWXZ]_a25543ca][\^^]^_^[WUTUWXWWWVTRQSUVWXVRRSRTWWX[[YXVTUTSSSUXYWVWXYYXZZZYY[\[Z\_``0234433211331``2c[UVYZ[_ccdc`\ZYYXVTUVVVTQMLJIKLNNONOQSUW[011000_]ZXYZ[\\]]ZUSPOQUWXYYZ[[[\]\ZZ[[Z[YXVRPNMLLLKJIHGG-HGFHIIIJJJIJJKLKJIJKMNNNOQSWYZZXWWTSTSRQRRQQQPRUTQQPPPNNOONNORTUVVVWZ\/00/00/ZVRNLMMJHHKNQOMLKJKJIHHIKMMMLLMJHHKMNNOONNOMJJKMNMOQPOOONNPQPPQRQNLMNOPQRTVVWWUTTQONNLKLM1NPTVWXYYX[/000_\XWWXXZZYWVWUTRQQQRPOPNLMNMKJJIJKKJHEDGJKLMOOLGFHHGGJNPPQQPOOQUXXXYZ]_]ZXWYZXVWYXUTRQQSTRONNOONNMLKJKKLLMNNOPQSVXWSPOPSWZ\[XVTSTSNHDHPRPQQPOOPTUVYYY]a233210_^^\XTT-WY\\ZXYYWUSPOORU[]]YSQQSTTYc431]YVTRQPQTVUTTTS5TUVWYYYZXWXXVUWYWVY\`20[XWVVSRUXZXUVWY[]]^]]]\YZ[\[]a20\Z[[\]a2342a^]]/093320///\[[ZZZWUTROOONMNORVXYZ[\]`a`\WVVX[^]/2320013431///./111233221012464 5688766543456665455542 4689:;;;:::;,<<92*%DBCECBIRQMKMQPNNHDDI+0.,,-/21..//..-,+VjUUVTSSQNLMQTW\/]\Z\][WRPOONNNOPQQQPNLKIGILOPQSTRRUVUTSRQNIFHLQUUUWZYSNONKLNPQRTVX\WMEA?CHIKJGECAABB@@BCBBDFHHE@??=;<@EMRNLLJJORPONMNNNKFDJNOPQMEA@=97:<=>=>@@?AEEBCDDDCDCCFIIFEGKLJGDCEDDGJLNPNKLKKMOONMKJIIJLLKJLMMNOPQPKILEFSSQSSPNNONMNOOMKJGC:==??AHKHCBDEEB?>>>@EHFFJJEEEHHGGIIGGJIGILIDCEBAFHIKJGDCA?CLONJFHNLJKIJOTWOHIKLNRVXVRNHDGIIMPNPSX`ebT@=;;<;:;<;:999nfhmga]_ab356457642]Z`3c_`00`2542b`\YURMC:q88:y~yoc^adhqxvonjfjsuqq|EJHusk_US[fovz{~xibguygYMGMUWSOLIKW\XSRSV]cehnvyoa^bfijoKLyxqfbba[X[bjoqrstvtlgedehmprqnjfabm~|{Exlfca__entvsi]VPPSTRPOLDoen|ABBA=9789::99:;98657:<;;ADBAA@>>>@V>HNUVRRSSPOQU_fbXRPQRSRPRUYZXUVVRQU\d_SRTTRRUXVQPTVSVZVKFMUUOHFGKMLMOOMMQX\YQJEBCIOMECHSXULCAAADJLLKHJMOT\^ZZZUKC=u>DFHNNNLHEEFFDIRMC?=DWYPKF@<<:94O?N8Pba[XWW\gouyr_RNKNV\^]YUTV]hmh_VRTUUTSQPQSLEHKJJLONKHGMU\did^_]WTSURMOUVTPLH?4`6CIDAENW]_^XRIA?AKSQNKHEDHMKFEC?;<@EMTRHB@@A@=868<@CEDCGNQSV^]NA{Byr{~wtxyqlqHKMTbhZLGFFGIIGFC{v|BFHGCBDIKKFttCvtyJOV^VG{xyytrx{vqu~|ojsJJJsnh_XTV\af_\hhfrusspigea]VQU`jjdbfhd^^ZTT[frtd_iv}tj`VUTOJC@CGINUXYTXmwgVPOLIHDBDGJLPOHGT_UOSSOIC>r^oLNKOSME=mkkov}tlrs8;?@=:>MURKIMSXUKCHR_ksth][YWG=G[hmnpvukhibZYaffeZPQJBDDEKGAEIJG@???@GW^TJGFINPLGHIFGKLNMIThmfgu{gXOLKE??IMIM`tvd[ecSS`aYPIGJEnTX}JJNU]a]]\XYUOOQPOPSQPRSOD:DGMsKAFKGACKIB==97789:::;;;<<:98788876579:<<::;86779:9nhccdegh57887=6jgcbf68;;83`^bf5653fcbehfcbeg5666554333ggfeccd22c23345689::98 +76678765543222d3454h555432db ccbaabcddfh10///0/--./011/./0/-,++-/.-,,+)*,*()++,-01/..//..-.//.,**,-..011268740,+,-/48;>?>=;975689841000.-+'$##$&)+)(('')+-./-*))(&%&''')+++)'%&')+,*)((()))('&%%&'&&'(('''((('''((**+-,+*+++**++*(%%&()(())'&&(*+,-+(&'()(*,,+*+,,++*)))+++**+,5---*,/*&'))*,../0.+*))('&%&'''%#"!!!"$$#$%&(,+*(() ++(%#!!"$%&'()*)(&'('&$##"""!!!   !"!!"#$$$%&')***(('%%&'&&'''&% &'&%%%$$#" #$%&'('&&(("#""!""  "#"#$#!!" +!!!"#$$#""#)! !"#$$%%$%%$###$$#"""#%%###! "###$%$"""#$%%%'''))'%$#""#$$##$%&'()*))) )('&''()*)(((''&%$%%$$%$#$$#"!!"#" ! "#$$%%#  !"""$%$##$(*+,-,+) (&')('&&%&'('%8$$#""###$%&&'''(*+*'%%&'*++*((&%%%"#$$%'&&%%'()++,./ **++)'()*,,* )('%$$&(,-,(%#$&''*/('%$###%'(<'&&%%%&'()*+++,,+++)()*(&&'(('&''%$%')'%&')+,,++*+*((***+-)()))*,,*)*'#(''&%$#$###$%'''((()+,+)'&&')**  +& & ####$%%$#!!!   N !"! !! !#$!  !"$"!"#$#"! !"#!!"#""$$##"$$"   #'*'&&(*)'&&''&$ $%&'%! !  ! ##!!"#$$#"$'('$""##"$'()*('((&'(0&$#%&'(''('''((('%#$()(**)'''&%%&&&%$! (.$ !"!! !  #! "#$')(%$$%%#! "%'&%()%$$%&s'%%'&$'*)&%%""%&&)(&##" "'(('%&)(''&&(+.*%%&%&(+,*(&!!""%(')+.365-"',,,--+)(*,..-,-/000..23332211002344689:6434238>98  4./1-*((&&$#&'&'$%#""#%&# $**'$%'&#%(*++-/0.-,+*.0..2420//.,**--+,042//1001/-,-034432477310.-,++,.-+))*,,+-2434312421463244566544L4212468:::843320-.37669;=??>>=;96456568;===>?AA?@CDC""DCBDEFIL'&HHH$"?:501367M68;<>?CGIFC>;9;==?><::99876667643359=>93/,+.1.-/..17;<<842.2;@?>?!""#$%$$"! ;;852344589;:998883./344323455454348961.+'%(.01320.*('((&%')+--)&(.5;><;:72//0/.-.0221//02331.**/4761--01/,)(*-.-,+)(),./13332/+((**)'''((()))'&'((MHFGHGH%''*.131..,))*(%#!!#&(+037:7640-,..-18::89:748C&'*-+('(*+)''&$#"#$#"#$$#"#%'&%%&%!2:>?>93025897648<=::@$((E=;6.)(-5;>@ACEA969AGC90)%(,,)'&%'/42.-.04788;@B;203689?>=><854457:=??=;955;FMIEA@E%G>6323337=@BA;3.++..---,&<47>  $%"&+,***)'&'*286/,+,)''*--+)++)),272)'))((*-,('**').-%"&+,)$#$&('&%'*-,)%"! $)'!#*.,& !%''&%'*+.21.-,)$!<$$$&&%%#!! !&$(+%!(32-***.491*'%&,/110.,,0684/*()))*))()*&!#%&H%'))'$#',0473/0/,**,+&'++)&# %! &,//-*&""'&$#  $""&%  $&')..%9>!B:8?C?B'*.4/#>;:<<99BCDDA:8=I))(F<;82.,-14731875;><;965442.*,29843696221-,19BB738?BFHE=72,++)&#"$&'*/0/+-:@6+)*('&#"$')*-+'%.7/*,-*'$"AFF=7::1=4-/03414::8:<<=5I,*(%"$($*43,(!"&%"!$(,+'#',3:==600/-$#/68779:5440,,1443-''$""!$! $&% #,1*$#$&*-*&&&$%(*+*'-:<66?HD6,'()% !)-()3=<2.66,-670*%$&$:,-@&$%).1/..+,*&'*))++('(*)# ##$%! #%(&1 #%# %%  !! !!% 31/--./032.,.*),/0..021/./0...--,-,/,/++*+,-.-,,,-./02Ѐ򀄁܁ +̀ρ怃 7þ¿Є ͅʀ¾ż¿򀈍܀ɿҷ¿9Ŀļބ3ꂅŰþ¶8üǺ½ŽƲĿĸҸϿ˼ګʿ낍ȃû󂌗޶㕱ɮű߀逍ҽǿȽ½ȶ̺½ʹ͹ӿ˨ϿŒ郙ҽ E3hfcba`^\_decdfdbdfecb_[Y[_cedbaa_^]]]a1aacca``aba^_`___`_\\_bcfkmkgegjm88i`\^ciptsqppqqpnkknnkhfeefgc\\^^]^aba`_]]_`ba0^]]\]^][[YYYZ[YXY\^]ZXTSTSPRTTSSTUXXWUTVY\^[XVTRSW\[VUUVYZXUT^VSSVY]c5776432c_[[]^]ZXUUX^dgeb_[XWVWZ[\]_^ZVUUVWVVVUUTRQOLMPSUUUVZ_aaa`__^][YXXY\__[YXY[_23454Q33468:<=@A@<742b_^]\ZXTPQSSRQPOLKNPOMLMNNOPRUVUVXYZZ[]01110/^]]/2310/.]^]\ZYZ\\ZXWVSRRQSSSTVWVSPNLKMMIFEEEFHJ_IHHHIJKLKJKNQSVYYWUTTSQOMLKMOQRQONOONMMMOPQRROPPPQSRPMORX]]YVTRRUVVWWVUUVX.0/SKJLOQTVWVTRPNMLLKL!KLPSROMMLKKMNNQTSQQSTTV[\YSNLMMJIHFEILLLKJXIGEFILNRY__ZVTRQPLHGHLLJJKMNNPSTX`2333125520^\ZXUTUWXXXWWXVSPMLLMQURMLMLIHIJKMNNMJHHIHGGHGFHHFHOV[WTRQPRUXZ\\\^//.ZYZ\]\ZYYWSRSRONQQMKLLMNOPQPOOPQPONNORTUVWUSQOOOQRSTUVUQRUVUUUTTSRQSVTNNUWWVWZ0455420//]ZWXVUVWUTVXXVTUUSSUVWXXWnVUROPTVVX_231_ZVSPOPTWWVUUVXZWVSQRTUVY\^__]ZXVUUVZ_^^/[VUVYYXWURQQV\\XWWYY]a`[YZ]0a`12210`_]^^\]^^]^000_]]][Z-.C000^[ZZXWUTSSRPOPPOPSVWZ\\\]^_^[XSQQQUY\0220/0124542/./000//0101222124541234578876 77554432223432368877788989:;<92(DBDC??BBEKNLHHJIEGNUU+.//22011...,TSSRQQSSRQQPORTQLNRV[../\[[WQNNONNNMLLMNMLJJJHEEHLOQRPNQTUUTSPMHHIHIMOSX[\YSPMKLOQSRRTXZU!HBCGLKFDDCDEDCCC@>@B@@DFC@BEGECCB@VACFHIKMNNPRQPQQPPPMJKKKMPOJEB@;7ihn<@??@AACCA@ABDEFGGHIIGFEGJKKKIFEDFHJLOPNMOMLNPQRROLKJIKJJLMNMNOOPJ@HOLNRSQQRRNLMNPRPJHH@=IMKIKKIGHJKJJGFHIHC96=C@;=@@<:;;;:=@@@BC@==<<==@?<=ABBCEC?@A?ADACHD>>>?@@BGCADGLMML~KJJOSSQRTRQX\[XVTQQQMJOTSUZ\[]`^XSTVWWXXWTRSTSRRSSVXZ^^^abaaa^_accdfegijjl8;<:8onjhhjidagt=wsqrv;;==:::;;::99ohf65432112`^34cb135c[^241]^ad44fc_VOKFEMQME@CC@?ADFFJORRONLFDGILQWXVXZYXWSRTY]_`^ZUQPQUXWTSW_efc^[]_\XXZXURQPMJJLNPPNLJUchfa]_hlbYZ]\ZY\_`eihc`^_bgmtyyvpmjheaacd_[_cfmqtx{yskfipqlhiloprx}ysssty{zzwtqomf^]bghdckrx~~{wsolnnkjlnnmnpqnbajmmnlgdfjkidbdfe_XW]dffgmuxxz{utwzz{~FE@BA<;BIID@=rf^`hjjmnnqvvojhjklnliihiihkke\WWWTSY]]_`\WVVUUUV[fib\YY]bb^ZZ[XTX`cbbccdb]XX[]]]\YVSPNOQRQOQSUVTQOPSQLGHKKHFJVagkic]WRMLRapwshZNKKIIIHFDA~|||{zyzxvvwwwxyxvxDECCGLMOSVXYZ\`ced_YX\\WU\dgig`YUSPLKPWXRNQV[_esPXXQLMSYTIHMOOMJHGGGHHIJJJHGGGFD?9nlmszHMua]`kw|yx}wh[UUZckr{ud]]^^dkmryAB{oqN]F>CS]ZRMMOV[TMORV_`VMLQZ^`ekprqklvDE~qigiiklmrtrruy}}v)njfdgntvuqlifdgpz}qotsolhc\WTV\aca^YROOPNEumu?ACC@=:;>;7678:==<;878;=??=9:::99;<OVTRUX[aluvm[OKHLV]_^\YXWY`ikcVLOUWUSQPMKJGIPQPLFBFQWWVW\cc]XVSRPKEGKOY^[XRKD<;COL?3c@OT\a^XPHEEDFJNKGLNKKJFFEB>>BGOZYKCBBBA?==?CCA>@CEGJMRZXKB>{yuonuzzumdbmzBHPV_fZLEBDHIExt}HKGIRVNtuumorvwtxENQU]\I?BECvjgnvy|~|qbVe}PM|fa`_YSTbcKKbfbktoknojaXRLKXlsmfbdaYY]\[cggc`[RL]rzyy{xslea^TB9@RQLOSXZZ_d^XTMEHNNHEDB@IUXTVTIHNPPPIB>gi=BFG?r=;;;97779876565ghi5678876665hfdb`bg56665`[_ce34hfdbcfihcbf578876=56653e23344554469;<;;9788877887899755443eddc`af566655655421cdeccehih21/..-+*,/10120./10..+))+-./.,--,+*))+,-//.-.01/...-,,-.---,,/101365334684/-/37=@><;:;;<:99;;86433430,,,++,-.-+*))+,,,+)))**>*(('&'((''(+-,+)'%%$#%&%$$%'**)('(),-+*('&'*.-*)((*+)('('%%&(,#,+++,+)'&%%'+010.--,+*+,-./10,))( '&&%%%&%#$&)* -00010.-,,+* +,-,*)(()++*)'$$%&&%$$##%&&$#%&()('&&(+('+,,**(())('%#"#"##$%&''&%$$###!  !"F!! !!"#"!"$%&')(('''&%#!! !#%&%$$%%%###$%%%$$%%$%&%#!"$'*+)'%$$&&%&&%#"!#%&'((&%$#" #$$$#""%('$"##"$&%$$%&&(,-+&#"##! = !!   "#%(++)&$$$#"  ##!!!"#$%&'(,))(('''()))'%#!!"%''$$%$"!!"$%&&%#"6! !! $(*,,+*'%$#$%(*+,,+*)))+++)))(&%&%#$&&$"#$$%&$$%%%$$$%'())('&%%$%& +''$%&'&'''&%(*)$#')(()+)('(('()''())(&'('J())((&$#$&'&'*)'%$#"#&)))(()**('&%%'&()+-./.+*((('()(((%%'((&'&$#$',,*)*-,)()+,++*?))***+))**)()('(('&%%&&$$%%$%&'(()))**++*(&%%$&()+  #%$%%$#d""! !    !""" "$%$! !"$# $$! """!""! "!!#$" !#$$"! !""#$%%&''('''((('&%##"!#&&#!547"! ! !"#! !""#'"""$%%%&&$#"#$%'((''('&'()))(&%&&'&%&%%'?())% #&%&))'')*&$%%&'&$#$ $'%$%&$"#%%$#""$%$#%%!$&'&%" ""  !"#" "!"$#$&%#"" "$!!$" !!#$" "#((''&&&*,*((*)(-0-**)()'%#&)().0/021-**++,--,*)+,++*++,,.01244331/023344567888 7753466327> >:88;i50.&&'%%!$$$%'(('&')'&+-)$"%%#"#%&&(-.,,,*'')*,.0/-.0/..-..144332/---/0.+,/4876324530-+*)(&&')++)'%+3631/1892,-/.--045798642247;>AB?<;:84114631468;==@A@=97:@@;76889:>BE?;:::=ADECEFDDDEEA?>=:8532/,-145338=@CFGFFFC@]=9678768:978:;83389898545898535662,,045558;=<=>;:;=>?ACCE%%D "!4.*+/00354688422235765445785/+++*),//01/-,--...17:4.,+.120-./-+.354445430-,.//-,)'(*+**+,./.*'')*(&'))'&(/79:953/,*(,5?DA90*)*[(('%FEFGGFFFEDEFFFGHGFGK((&&(+*)+.022246785/,.0.,1577741/-,)&(,-)')-026?K,22-)(,0.'&*,,*&$#$%$#$$#"31038>#'I:/-/8ADAADD=3+(*.369@FA5../.047;?C"#FFGA:=M0bP5%!%.2.(&&',1-(*-055.(&(,./16:;;89?G')OG?989:;::<>=<<>@A>;9767<87741/-.267530,*+,+&?:?## #&))(*)&%'+00-***.66/++,-.00.-,*'&*251.,*()-/.*(,,,/0,&%+12,'$%''%()*,/13.&" ="$'%! "$## 97!'*-/-(%'.1/0.($(-) 57!$(./,'##&**"! %$ "'&"!',*'(*,/6<>90)&$&+/0/.-...2884*#%)**('(&%%#$(**($!#)-.--042.+*)((&""#&+/.,(% #!(%',0.,'! #&$!$%##" $,,"!#&,,$ =<978>A@>:427>B"%*.46-%! !#$"A;8=#%"#+0+D<;@DA;789%*,.32% "!:438;=@@?AGIC=4,6EGM-,C63440,-79'&4749>:68962.*'%,8=94353..221476564.(0;?>>>=:5310*"/.)*,01/262.,(#%**&&&$"(01-.-&%*,-,(%# $--)(+,*$!!60<$&))"74$05596-%%$$$*694/"3.:/!#*)'(''&$!!!&.352#%2873,*+3<8/)'*1:>8/(,455:?:674-'&'($#$%$##%(&"!$+*$"'+..($',*";;%7<2+,2;?@B8( !%%$%&.53/,-/37;]:2-./78!"$(!$&$'/0.//*''#"%'%### 57!$%& 8"%" 3,&((%!!""!   "&& ./01/.-+,/+)+./10/..022/-/- .--+*+/+,..-..-,.000Ā̀ꀊʀ΀݁À΁Ձ݀ā ׀¿߀󀆉žŸ́΀ίՃļ¿»½򆥠CǬɼ¾Ż򆌇»ǻκʿǿ耔ƾ񀁋Ѿ¸ȼ󀇉ĽɾɹɽӾøÿũǹƿ·̻Հñ𒤡򍚜ç¯ٍƼ®􄝚ሎV̾ugfdb`_`adeffghebccbcca_^\_b`acdb_]]\[]`cc^[]bdaaccb`_]]`bca``abfhikmnnnmkhhm88kffjloqpmlmprommnlmoqoieccca__]]adc`]\\]adedb``_^^]]\\\[ZZZYYZZZ[\YWZ\ZVRPPQSTUWXYXWY\^__``_]ZXWTQPPSVWY]\XSRUYXUVYXY^aa^]]]\[YY[ZWSUY_b`_aa`_^^`cb][[[ZXTRQQRSPPRTVXZ]^`aa^[[\\YVjTTUX\abcfhb\ZYXY\`245432123457:<<<:9887656652`YTQPQQQPOPQQRRRSTTUVXWVVVXZZXWVVY\^`_\YXXY]15740[[\\[ZYXVVWYZYXUSQQPOORROLIIJJIHFDEHIIHG*HHHIKJKKMQY^^``[WVTRPOOMMOQQRTTSRRSSRPOPOON0LLMMNPTX]02220-XWWWUTSUXXWXXWURQRTWZ]^\YWWUSRQPNMKMQSUWVQLIHHHILPSUWTPQSSRRUY\ZVSPGABEHIFC=7=GIJKJIHHIJKLMNRX^[SNMOQQOLIILNNMNRV\``]]24431\WY][XWXWVTRSUXYYXURROMLJIKMNNMMNPRTSOLLLKIHI{HHGHJJIIIJKMPSVY[YXXVSPOQSVZ\_`_]\[YVUSRQNORRPPQPNNSWYXUQONPRSSQQQRSSPMLLLNOQRSSTSQQRVY\^\YVSQNMMLLMNNNORTUVXYXVW.231/.-YVUTwSRSTTVWWUTTUVY]b^SOTY]\YY\]YVX[a221_ZTOMMOPRUXXZ^`\XSRQPNOTXZZZYZZYVSRV\`^[YXWZ]^[YXUTX^_YVWXXZ_21]ZZ.00^\]]^`10]YUPORX\[XWWY\/$^[Z[\][XTRRTUUVWX[a2b^YX]11]VRRUVWX\/D014762124551..012112223322342124443368866887667766776543200234555433457899:J99:;<:5-JA=??>@DA;;@BCBCEEEDEIMMMOPRSTUTQPPQQRPKHKMKHFGGB=86:@BBABCFGD@@ABCDDEFFGFFFGGIKLMKIHIIJKMMOPONLKMPQPONNONMIFHIHJLNMJKNPNJHIHINQOMLMMMPRPNNQRRTNKOP%MJGHLNNLIHHFFE@8i?LC9;?CECA??@?=<<=>@Ae@<<<:89=@=;=@BA@=;;96f7=<<@=;=<:=?@?;614AGKMLLMQTTQPSSU[^YVVVXYWVTQQNKNPOU\[YWUSTTSTUUTSTSSTUWZZYYZ[]^\\^``adgikighkq<y|{tiecaeny{vrrog]Z]d~lsvyzvw~{piimtvx}xrojgeb^[UJCGPYepl^QHJYee_YU[cd_]`ekotvx{|yuw~voc_emmgc`ajorz|slloonrxwtutplkq|Goa]^^YXZYXVW\bed`]YTQPPNJkcc3;HMG?<<84557;><87;<;;>@@>=<:8889;95E8GMTWTS[gjedeaXRPU]]UTVVVXY[ZWWWVUVY^b_YTRRUVVWVW\_][WSRXbd]TNMQUTTURNPTTQJFC{u?DHJHD@>=@CC@BP\_eg`WQTae[XXTPSTHv=EINVY[[ULILQWVMC=<=<;@GEAJZ_YM?f\^5ANSPNRX\_afnpgZPIIQX\_^ZWXZ]_`_[USTSRPPOMLKIFFKPPJEDKWZUOLPVZXAX\_ZTMGLZche^YQHB@DMWTG;;ENTX[[XUVYVMKPRRNLMHBACILHA<=FQXXNEBDFEB?>:;FMKGFJSXSJE{unjks}{poz|FPQOSbaPGDEGECPRLHIMMwmqyrovDFDGHIJIDABFFyjfjxJ|{yzyrpvy~~umc^]b`VTVRXega`lk`[`jsl^WU_rvfYU`jc_`bfjhfcVORXcosnrEsigge]K?DQYYTMHMTWXUVWQKNRQMLIEAFNQPRRMHIJILMGEGLVWPIKOLHHF?>CFHMM|]YpFKD<=IQQVbf_UGvt@GRc{sdh`C?Xfd]QNPJIT\^YONVPEKXbaVIM]\WZZVTZgqk\W\aedXIHWk|xnqz~uhYJCAADKKEIOLKLKJOYXJIOK@@?hhEONMQQSWO>cjDNOSWVY_guydPKT]^_a_WQNMG@OcjcSJLhQY]PoJY>FHFJOOT\]WU^`SJEHQQNONLLKE@?BFFEFHF?CEDINORRPNLFC=625?=@FO`4556788776556640/2469;;8999867778779::9863a2579:=?=:89;;978987567kjkl5677755664eccbcdegiih44ccf4445ifdcdf43dcd3677655567764246654454446:<;:88899988999:9755543eeddcce34566433342aacddedcdf 1/..,,,-/120.--,,++-/--...,+*))*,..,*+./..//-,+++,-.-.//1344566776545853468:;:88:<>=;;:9:;<:64221/-,+,-//-+*))+---,+***+,+*))(())())**++)(*V+*'%$$%&'()*)(()+,,,--,,***(&$$&()*--)&$%'&%%'&'*++**+,*(''((&%&)-//.00/.-,-//,+,,,+('%-$$%')*+-.00/-,,--+)(((*-0/.//-*))()*+*(%$%%&&%%&&'(+))*+*'&&(((&%$$&'())('&%&'''())('%%%&'("'%$##"""%&$" !! !"! !!!"""#$#%)+,--+)((&$##"!#$#$%%%$$%&&%$#""! +"#$''&%$%'&%u$"!"#%(*++*))(''&%$##$$"#&'(**'#  !"$%%%$##$$##%(*(%$" "##%(+)%!!#&&%#""$%$#$&(,..,+(&'*)&'&%&()**)'&&%$#"!"#$ %&''&$$%%$#")##"!!!#$$%&()(''&$##$%'*+,+*((('%$$$#!"#$#.""%)+*(&%%&()('%%&''%##$#$%%&''('&&&')+,+)'&%$#$%%%&''(()(&(%$$$%&'(p'&&'(*-/-&#&*,+))+,*'&(,,)&#!"#$%')((+,*(&%&%$$'))**))*('$"$(*)(('&'))(''%%(,-*'(*)*,)()*)***,+)&##%(*)(&&&'* **))*+*(&%&')('),,*('*+'$%'(''(" !" ""#%%$%%%$$#$>#""!"!!"##"  ""! !""#"!"$&&%" !""!D  !"! "##"""!"$%%$#&))'(())*+*)(()(('%"$&%$##$#!"!!"#$$#! !"t! !""#$%&''%%%$$%&''(''%$%'(''&'(('$"$$$%'('%%')(%%'&'**(&%&%%'((&&'))*'%(('''&$##&(('%%%$$%#1)$ #$#"!!"!  !##"P#! !  !#$#! !4! !$&'&'(+,,('))*./,*))*+++*('&$&('+//,+*)*:+,+**++,-.//...012210//000135665568< 9/,/1022014:@?;9:776422*'%)'$&($"%$##"%#""%&%&+''())++*)'%"$&'(('&&%$%&&&(+*)+,-,++($&,.,,/0-,-00/--047742221/--./0125411211/-+(*3;:9998654202566899;94220/3875:78:93+*,---032003663111259<<;=@BB?=<=>><;8:@@=<;:985588898554321147753365102567>AC@:76844551/.--./254.-573//135422355310.,*)+-01.*'&'+..--..-/0/.-,,-.-*'&),.034540,+-..--./-+*)))*+.221.-1430.,,---,+*('),./.-.//..3774/,*(&&&''()'LIFDEHJJHFPECH)+'D=:9%)+,-./.+*),289656631453/-*)+052--00/-,.49;<=@BH()MN))'%""$(***('%#"! :;@CEEA:5447>FHC@@>81./27;=>?==A@9557:;?BB@>?EGA<82038964348:;?DDA=889:;>BB@AB?;::"$&%" !! !+459:4.*,5920/+(*,%9"%(,./0+%#%),+%!"-1-&,&'(+)&(,/025:;6/($%)-///.+,-/00/,`)()))(''&&&%#"%)*&""&.1.)')./,,.0.+'#&/353.+'"$+*" &),..,))*(##&))&%&#!#!&,,% %# "(-*$!?=:767!)*&$&**H?8;?;9=C$%FAB$&&''&" #$=415>DK(JB@AACB<;?@CGC=941242--.*-5734=<426;?9/+(.>!$+4AG:152 -761(%&##*.0,&%*'!&0780&(44021/+.7=:1-/266.%$,8BD=78=?;4,#$$ $('()'').,#"&$ 44%-+*,,-.).3$*+.0-/36=?2%$,333550+**&!*694)#%)T/4-8", "! "&'*/1,,24,&#$))'('&%%" "%$##%$4(%0",!"#  %#.00100/..-./010/-,.10.-./-,,...--./**+,-././1̀ŀ倆ށ ́ÀÀހ q̀ºɿýǼۀN̻Õ8νļüӆƺ¾ΰĿ½ŰóĵѡſؖǾǿ¾¾鄌˾Ļͽ¿Ҷɿ¼ډDZûðȹҿ􅟮Հǿ¿ք̻йµĴ׹ưɬĭîǵ􂀄Źည:765652a`bdcdffeefffebaaa__`bfjkf^\]`bbc5765fcegd`]`cca_]^ca_abdfhijijlljiiecfn;;862^YURSUVVTRQQQPRV[]]\^]YWXYWVVSONNOOONLJKOPLIKLIFFHHGGIKMPSTQMNPPPTY^(ba]WI?DMOPPOOMOV]0]WSRQSSQQRSTVXVOKKIHHGHhIJKLPW[]YQPV\_][ZWSRSRUXXXURQTUTVWVTSPMLLKKLLMOONOQTYZTNKIGEDDEGGFGJJJLJHGJMORX^_/][[ZWSSVZ\[WROOPSWXVUTUNTRQPSTTRPPQRQONNNMMPQRUSOMLKJJJLPW_^XSONQRUXZWUQMKIFHJKLNQUXZ\]]\[[\[[\..ZYXURQSUV8WWWVTTUVWVUSTX[[Z[]\YVUY[Z\ab^XTQMMQTSSTU[12a\YWUQNNRXYXYo[[XTVZ^`]YVVX\]Z[YUW]a_\ZWW[`221.Z[]\\\]__`0`^YUPMR\d2```\VUSRW/2320/../11/.///[WUVXXYZZYY[_`_\XV[01\UQQSUTTVZ]/.0598543343/US,0320123310001014665446:;964334556532343233431/122233346778:9:;<8,D:;:34;BEFJMB.4! L452/---,)()+,+++STVQOPU-/XQKFFHOZ00//^\XUSQPONNOOLKJGFHHFDDHMOOOPQRSUVUVSNLKIKPSUSI>?JV\ZTPLKNORSSSRPPQUXYYWTRPNKIGDA??>>??>;:=?ACCCB@@CHJIHJMNLLLMOPRTVTQQSSPMJKKJKKKLLGC?>?@BBBCCEHGFGFCBAABDDDFGFFGJLKJIIJJKLKMQSURNJIJLLLKKMPRPLKKIIMPSQKKQRMHAskAQUPLJFEIMOONOQSTSQPPONQOJFDDHKJJIJJHHJI>5;FD>;;<=>?==??<::;=>@ACB@?==<::<>>=<;;=@=;>>9ki68:<>ABAAA?>?><8f39AFEFJMQRNJMRSSTTTVUUWXVWXUQNMMLKPVXXYYVUUUTTTUTRRTWYWZ\]_]ZYYYXXYZ[YWX_gkkjgffjoqdIBWefjjb`dlvywu;==:p9:<<:877nopolmkd[W[aa^^`b_[\[UPQ\451\TPU\[WTSU`8;jVMLMKJMSTPF@BDEGHIGDABCAABA?@DGIKNRSQNJEAEKMKLRUQOPRRPQRTWYZZXUSQPNOQVZZZ\\[XUUUSQOPXlvum^Jz|GPWWX^dhhijiecehkplbahmkdacabjrtrljjf^USWanuwupjhjmolbWUZaipuy}{sljlqtx}yrommol^C9Pfhgmv|~|}wmhfecegeely{vpnpsvwtqqqnlnruspnnkijlikomf`[YYZ]`dijimrtvz{ywssuwtnklqtqlgdcdikhddkppswjB:GOrrfdghhlnjc^[UTXZZZYYXZ]__^__^][ZVUY[WPPRRQOPQNKJMWbfc`^YUSRQPPPRTVURRRSSTTUVTOKILPTUQIDCFJIFFHJLQUUQNNNMKGCABCDEDB}wstxwna^fmmlmoqzCGHFDCIU]_`a\XXZ[XUWYVTY_``^[VQRRMJNTTOHFLU_`QHQ`d\X[aehjrMPLHEDGHGEEFGGFDBCDDBC{tlcYQQX]cnush_WQOOOTSMJS`hnsodZVUVX[^_a_UKQ\adege`WPS]dildQIEBPgsqmpuywmccfjpvy|~~{ril}vrtGExb\ckot~}rlmrvxxy{vohcbgmypd`][ZZ[YZ\\^a_[\a`][YW&UUUTRQOK=FNSV[hpdVV^b[SOPRQMPVX\_a_XQQV^gic^]YUOLMOMNRVY]\VQPONOONLJLORROMLHHRVPHDA}AFFBCGF>yAFJLJHMSY_\SNOWb_RNPOPUWMGKNMNS[``[WVWZ_^SJA;:85:FE@ES[ZVNHDAFPUSQRSTVWV[ekbUPMMQTVVUSV\__]XURONMKHIKLNNLFDKWWNLNQW]ZNILRX\[]df_XQHK[gnn_RLGDFKLLL@jAHNPMKNTWUQLvrsrsy|wxzyyCRXTQT\^TLIFC|z{}JJGFrfgt|CAA}w~GLKIHFDCADE~rqxOR(rknpnkheebZVUUZab`^ZRIJY|OQErgmwwph\Y`f`\]fjYJ[wzoin~Dva]_\XREBO]aWLKQUUSUVSNFBHJMW]YUQJIKPWVJA;n=GJS\[YUI=>JNAwNdeWKKQN?aazFHHEDFGGHGP_d]USLIS`hidbd]I@JWWTW][VTUQQTSXcaPJPTTUYbiaWZ\[`joj_TSXZ[UKM[kv|t`V]r|kPFD@AHLIGGHNMC;@ZmlswricXGFMNOLLS\b]PC>EEriyDCALhkTLR_gaTIHKNI:?Wcg`QLMLF?>9bjCKHBCQLLIIFEPXRMPW]WJL\fhjkjcXOJIIGB;q;@EC8^g99;9f28>AFHJNJEDA<::;8645H\478646778887655469;;:888:96577767:;<<<:_JT4789<<95469;;:98986hdci898665445665fejgk666j67khi55765i4gedfffe345666533566gcc357754455457898889;<;:::9:98765543233444ffg4igeddd222cbcc2dbb36788i,-/0//11000/.-+,..-,,-0330,*+.///0/01/,*,.-,+*+..,./1245544543331039<856789:999::;<<:88:;:4/../.,+*+,,++,+,+*+)('('0()**(%$%$$&(*,-,,0+))***('''(+.,*/.+)))'&`'&%&()))'$#%*.011.+)%#',--+++*($"#%'(()**)))**+++,,+**++,-/0/,)((%"!  $*)%(##&-+*)))(())(()*-/.//000.,8*+,--++*(&&%%'('&&'''&%$&''&&'&&$"! "$$$#"##!  !!!"#$###%')($! "#$%&&#"""#$$#"!u !$)('%$%&('%$#$$##%'((())'&')(()&#"#$%$$""#%&$""#!  !"#$$" !"##$&),+)%"''$"##%%$$%&'')($""!"!"###$'*,-*%$'++*('&$%'(('&%'(()*)('%#$ %&%$&),,)%#"! :!""#"! "#$&)*('()'%%'*+)&#!!!#&'%$$$%%%&%$$%%%$##$%%$#$E%%&('%$#"""#$%)..*'$#$%')*('%##! !"""$&(***+*)(()**+''&%#""###$%&''(4'&&'(('&%&)++))+*('')**+./,)'%""%'&%%%'+*))(&$$')('z())'%%(*+*(%%&(('('&'+-,,+))+.'(**))*+,---*'#"%,0,++*'&&%()'&&'()**)'(+,+)'&(*&##%%$$$&'""& +   $#%A#"""! !""!  !! !%$! !!""! #%&&&%$##!   !"6! "&((&&'(''()))*-/.+*+*)'%''&&'''&$" ""##$##%&%%%#"!"#"!"$&&&%%%$%&%&(*+)(%$& '()'&&'%%')*)&&*+)'#8/*-)'&$#$&'))***+*((+*%#$#%(W))&&((!"# !"  ! !"" ! !  43!""## 4"%$$')+,(#'++*+d,,,.,'&'''&),--..+*+***++*))+./../023100/---..-+,/46777668;:/*2254..17<>>=866640/.)$#$&`%$&& $%!!%$"! &0)&)*(')-.,%!"$%'(('%###"#%%##%'(),..,+(%#%'(').1/,-.-+,-./13320...--.0210.,,+*('&,9AA>5(@D).00026874478:=:449<9435447<>=9775/*),5?CB@=879:;:5..047:;=?@>:657:<>ACC@<:99:8-#1325;>@>?BB<7432235438?EGEB>98:;<<:999879=?=988668988q:840-,,-./03336;;<>?=;98:<:6445530-+*,020-,022483 ,,;9103457852/-)(*,--,,,-..-.///.,+)(*,(##$%%$$%$"#%-47532/,+*)+,.-+*+,,.00-*)*,./-(%#%'&##$&'*--+*+,+*('&%$$%&''&$FFC@BEE>54:>@@ABBG'))'$#&-34552//121/01/,/24430,*+,*'),-*%#'-56+#*571-/3788;G*-)&##$%$##$%%$#""#"B@A"#FB@=:61+*.15=BA93.)('(*)%#'/6;>>92-,,,-..00+%(.366653-(*279;7+$#1:;9:=@?832358@ACFC>;868;BJF;410///0//1247622542110/..-,,+( *#-!%)*.7=5*).1.)')+*().01221-)),1672.-,)&%%'&&),.10,*)))*++)&')++)&%##)-)$" ?= $%""%$ < #&'&&),053,))/86,))('*,&#')('*.11.++,.21)" )/0-'" !(+)'()*++)+261+(((+,-,+*,/11.*('&&&%##%&'('#!&./)'),041)%&+/1/0683.)#%0587.&" #$%%0&,+((**+,.-)''*-*&%%#"'./)! %&%"!$$ #''%$',..+(JC=;;:9>BA>@B@=!*/,)*14-'%#"@=>@?D''$#FGIE<45>DFEFI$#"A=@I&))&%""! A"E$JJE=<@FJOW..SF:7::985454.++,/43/))3H/1':38>=83-,166674127;/%0CHB;79C$:-,.,+''25.&&*//--.-*%#'')/20-+''(+0/'":"().320-%),$B-98-''+*"22B')(%%&%%%$)362,+(&+2662152%&/.,.21-+,++,+.86*&*./038=7123128;;4-,023/((09>B>1+.;GG@5&"!#&$#%'+*#!2?<=?<64.$$)*+*),164*!#%<6C'&$(6FE5'$*395+$%)a+',472(%&&# +/ %" $%$$! )/+'(-1,$&/567982+%#$%&#9 "!)10%'!/0.,00//../01/./0/---.--.,,//020/.-,++,----րՀހՀဂ́π׀〄܀ဂˁ  ĿЀĻ񀈊ȿƽĿƽ􃄂܀׀ʀǍſŽă򈌍æȻѻŵߎ¿Ҁgúச֤Ǻ¿ƿɿ½ľžȿ򎟩぀򀅄ȿ¶ƽ&¶ǿĽ؋øŸͳ󃏟񄏉ʀž½Ļ̼Ʒ¿𑠦ǽ셓µǸѮ¿ŵ¹Ǵ׽|󁍎" "8767753ddffeegihfggedb`_]^]_diic_`cffddffecbcfgfcbe44ebbaadghhiihfeh688lheegknpqolkjjkmlhdeilnnlhginqmifa][\[ZZYXXYZZZ\ ^^]\_a_^]\ZXYZYZh[\[XTPNMLMNNQVX[[Z[^`]YUQOPRRQSTUXZ\1444hd^\]^]\ZXVTUXZ\\[XVVX[]``]XVWYWVWY]a`\YWVWXYXUSSTSSUWYZ\]][YWVVWYYZ[^ada\VQRTUX\c44336786aSKMSVVX[^^affa\[[]`13323321ccchlkigeb__`_\]14553d`]\\\[WSQQRVYZYYXVUUUTSRQPOOOMKKKLMMMLKLNMIGEDDDEEEDDDEGHHGHHHJKMNOMIEEHJLOPQRRSUVVVTRPQSSRPOlNMMNMOSX/352`][WSPOMLMQSRQQOPPOLLMNOQSUXYXWUTUURQPPPNLKNQRPMIFHIIIHGGIKMNOPQSSRRQPQRTYYUSRLCBKRRQOOPPRTXYWSONPUZ][TPNLIEBBDFGHHIKKMPUZ\[WUWYYXWTSQRUWZ\ZWVTRRTTUWVTSRRPNLLKJKLMOMJHLOKEA@BCDEFGIJIIIJKKMPSTTV_431^\\\[ZYXXZ[ZUQOOQSUTRPQRQRTTTUVXYYWURONNNMMNNOQRRQOLKKJJMOQW`e\SPOPPPRUVTSTTRPPOOOQTX]a1010/\[\[XX\\[..XTRQQSVVWWUSTY^\YXVTTSSSTQNORW\]ZTPPSTTRQTY_ed\UOKJMRTV[^^_`^[XRNMORWae`\[Y[\YTRQU\^\XVVY\\^^XSW\__[XX[\ZYZ[\[ZZZ]01_\\/10^a333443343232^ZXZ/121/.--/2332110/\YXYYZ^adb\WTSVZ^`^[XUTS!RTXZ\]/0/.2:<742110-WV-13320134210&1355423699621233347877531123211221/-.0123434689;;<<8/J:48@GKKKMLG=)1+31-***+*)*++***TSRNNOKLOOLNPLLQWZ-[\[Z[ZXVTQPONMLJHGGHHHGGHHILNNPSTVWWUQNLLMQUXXSLHGKUURQOMJKNPRSQKFIOV[\[ZWUUTPNLIGFC@=:9:=@BCUA@@BFIJKLLLIGHKMNNQTVSOOPNMMNNLKMNMKHFDBAABBCDDCFIJJJGCBBAABEGHFDCEGJKJHHGIKMLMOSVTOJIJLLMPPNLPSTTQPRTRPK9JD4IPONLHGIKLMNOOONNOPPORZUJFFEGIHFILKGFFD@>>>==??>;;<::<=<;:::;<<=<<;99976l779;:79<:9;=97882bhl??><9fe;=;>CISUF=GQSRPQSVVVUVW[^YQMNOPPQRTSQSVVWWURPRRQQSWZZXXWY[YXWWVWYZYXWX\aehiihggjqoifhjjkmgdglqrtv=>=unllnq8mlmmnq9mj7h_\[Z[\]^^\WY]P;=Sc222aXTVVSOMIGQ^db\WRMHEHMOMIFFGIKNPMGCBCBCED@>@CFJOQNJFDFJNPNNNSYYSNKGFGGJNRVWSLHHIIIGGGHHGHIIHD?:jablrqqpgQ5GDQ_g8ASsN^bbed\W[^_`afnngca``acdb`abdeekwztqniinpnnnjfdb]Y]cfir|}{}~{wtpmkiggknnmjfhkighkprssvwvw{}|xrnpswyywuuwzyuux{||}{z}}wsrmhioqmmljhhiiffklkjmomfdddipt{ypjmkb[\^]\UMNTX[\]]\^bglrjQEXk^?ADB?=<=?@CBA@>=;:;;98;?@?>>=>@A?>O;KU]][]_aeddf`TJFHNRY^WTY^aYPOQSX[[ZWTRPPNMOTYYVVWRMLHFFHIJJKKKLJHKKJLKGDCB?>AC@?GLH@@IUZ[TKKPSUTPMMQX[ZXXVUVRJGHGHMV]][ZVUXYZ]WND<848JXVTWXVSROKGDHNPMLNOQTXZ_ef`WNKJKORSRPT\`_ZTPNLLMKLRVUVVRLLQVVUROOSWWYXWYZYZ]^]\[TQZfptiWNKIFBBFKKC?CIPROPQRUY\]YVY^\RFFS[WSUWUOHCBGMPPNF@FQQLHB9k:@GR[YPJKLLI~snsx}zzxzCJTZWVY^]RKGBBCE|LUNzunihkrCB|xEFHLLGDDFGHGmdfnx}~NQSMnmqvsjddc`_[QJMW[^aXMJPiMRSN|z|}uf_WMO\ecdec`bp|{uoihlt{saUV^^TU]afcXSTWZWSTTLvmGRW^b]clfYKAGXYMCppBMWYYXXXOD<=ADMP^eVHIPGqo@HOROJHJLMGGRVPVaXKOX\^_[TQZ\MFILNV`hh]PIQWNJXaVPY\[XV[_[XZYZmvg`\SQQPUYWX`c`ZPJMVbxiOMOLR[XOKLOLE?COTUY_d``horpkiebca\Y[__VG@A@|{vmA^jca_YSSX\YLHTWIJWWUWTOMD;Rf687557899879;;:898679:98:;<<97853567899:9:<;;:63687779;9779;>?;8998kgdb5<=96543458974hgggi6765677540ggg346787776456774b`c2345545678777887779:98877765"43455334443ggiigecbb122dbaa``b3556r/02210120./..--,+++*))*.00-,-/11/01000//00/--//...-/1223443345211257997556679863369::9657;<9630-,-,++*)(()***++**,-,++*)())('())**++)&#""!!#$%()))(),.-+)&$%9&'((*1.+)***))('&(*,--,+))+,./.,)'''&%&),..+*)))***(&%D'()+,---,+*++,++**)(()*,+(&##$%&(+& ""#%'(*./,)(()+%//0354310.,+++))-+***)(&$""$&(('&'&&%$$%$$$#""!!"!"##  ! !"##$%$! "#$%&'&''(''%##$%%%$#"!""!"#&+*(&$$#"""$.#$%#!!!""#$%&(((''((&%$$%$##%''&$! !""!!  "#$%#$%'(&$#!"!!!"##$'*-,(&%$" !!"#$%&),-,)(*+,+)'&%%'(*+*(('&&())*)(&&&%$$$###$$$" "%$! !!!##! !!""#&'('',)'((()((()*)%#"""$%%$#$%'''('&$#$$#$%'''%#"""!#%&)/2-'%$%%%'(('&'('&&%')+-L(())(()(''$###%&'''&$%(,+**('&&&'(&$$&(++)%#$&''&&(,.10+'$!!#&'&(**+-,*)&$S&+.+)(()*)'%#%*+*(&&(*)*+'$&*++)((*+)''())(()*+**+-+)'((('''()*,-,)&%%&(*+)(&%%%$%'(((#$   !"""###"#""#"!!!"! ! 2 !!!"!  !!"&&&$##$$"!!  !"S#$&'(((''&%&)+,+,.0/+)++*+,,*(()'&%$##""##$%&%&)))('$#"" "$$#"!"#$&%%$##$%%&')+,*&%''())('(((*,,+*)*,++)&#$)((('&'#(('()**+1.(&&%'('&(**'%$#     6.24"$$# @21 $-.##*+)((*+,-,+,/0-(%&'(())+*'(*+--,*)**))+.11.-+-//./.--,,-/135676657:86543345213799:< :6667876787730-(&%#$%$%&%"%(!&'$""##!  %)+,,*'$#%())'%%&')+,*'$#""#%%" !#%'*,*&$#$'))()*.32.+(&'''(*-12.*'(('&%$$%$"#$#"!1+.:@=:6/##$1<@"(4F.66565/,/23469><866556764345556;BB>;977:;::;96540.0346<:99g8779;:852575346889:<=;;=??=98:;>@@>==>??==>???>==??=<;856;:778766763367679;9433359<>A@;52560,,,++'!"%')*+-0494%,90-::863123/)%"!"#$&)**.0+(((&%()&!!""!#$$&''&*--+**)(((''(()))*,/241.,+*))**++,+***,-/0-*)+,,+(&&'&&&''&$%%JGDEG%-''%###%'('&&%#BAAABC#$$%&)-13324874213577642245773-+186.*-250&<<%+//./.*(-9K-*F=>D%''C:8;?@BEJ'JDCDFGFC?;632115:>?@BDA;8997666565531/-+,*'%%+21+""+/.-*)+.,+,,)((&$(/8B%#<9=B="@7228=>?><=?<438@C=98=81.28=@EIA624531 24899898420/..--++,*$6-!!%*//.01132351*%#%(*.1-+.12-''(*-/.-+*)(('&'*,-+,-*'&%#$&'((('('%#$$$&%"!!!!#! %)& %,//*$$')**'%%(-/.--**+*%#$}$#&,110-*)*,./+%",+*+-,+)'%" "'(&%&'')*+.240+'%%&)+,+)+/20,'&&%%'%%(**++)&'+./.-++.000/./0//01000+(,4;<4)#"!!$%  %**(*,./+(*./) (-*()*($ !%('%%&" .!(..)&&()'GCA;8;=@EFBAA@?"&,0-+-00*%$!A!ED#$E@C(/+G?>;778=FIGFDB"#@=C%%%''$"A!"#$$A845;BFGLV,--)A68@>::86751b./11+# #$DC=5 29420,)*.1.&$-/$#,,+,*((#"%%$#$$ #/2+((*,,(%%*/-$"*/0/.177,"!"##"!!%))& 0! <&420. +///./'///+++ 01121/-,,--,-򀄁րꀄƀ׀ +ρрɀဃ߀~ɀր ̀Á ҀȾİüĹ׀ǀԀȹȿ􃐐ü¿ʺ샋ܳ둟ż̽ǿûƺ̺șĿɾŸƿូϾɶø̼˾ؗƼ鑧ý˼灇»郎Ľʀ̱ó勞̸ľ󠽺Ļ¾ͿɽR숐'_2467543efeccfhfcb`adb`a`ab`^\\`figedbeh^gb]]`befedcf565gdbbdfhiihghj6665igghkmmlllkjijkkifefeddeeggefkt;pcYUUVTSSTUUWYZZYWVXZ\`a_^\\[Z[XWWYZ[[[ZXX[^][WRNLKKLMOPRUWZ\ZYWURQRUZ^_^02369:85gdb_\ZZZ[\^ab`_][ZYYX[`a^[Z[_a_]\[ZXVWYYYZ[YVTSBL*+*))()++*))QPPOOONNONMLOQRSRSVUTVZWXZZYZ\[XUTSRQOKHHGFFGHFDJRSQSUTTTSTSPMLLNRWVRPRSSRONMKIIJLNOPNKLMgPV[][URUXUPRSRSPIA9569:;>ACDA>?BFIJJJLLKIHIKMLKOSUSSQNMNPOOMLMLJJIEDC?=>?ACCDFHHHGEDEDBBDFGGFDCDFHJJJHHKMQVWQLJKLLMMKKKLKKKMNRTUTRPPMIGFFHJJKKLLJJKKKJKLHFHIJIHKOJGDEFHD@ACBBBA@=>?=:>BB@<:=?;:=>=:kf9?=<;:<:;<<98899:==@?=;<<>???AA8j9;=>:=MTH@FNPNPSVWWYVTVY\[VRPPRSRQRQMORTUVYWSSUTRSX\[XWVRRSRRRTXXWYZ[\`abbabaacekqzA>pgelnjjnqqptwspomllljikmmpqo9:mdb_^^[Z]]RKPRNS^b111453_\\UKMROIEHQYYTOJECDGIJKLLLJGFFEB?>?DHG?km?A@DIIGDDIQSQOMJJNPNLGDCAABCEJJFB><<<=?>BIJHECBBA=3XRH?>EP.1/O>1)IFKKG4cFRaqpd\WVVVWY[WRNMORVYYYUTZ`_YX^djg[SU`jmmmljhe`[XXYY[`cdbbeilmopojggdccfhiicaa_ZVX]dhlpqrxzutsspljnutlbajry}zvwCxvvrmihhdabccceghb[RJIHHKNPT`u~{p`UQPPSVWUW]``^[YY_efffgjjjgYGJ]efc_\\[TPPOF918HKEABJNHGMOJLQL;1:LUSLGHMNKHGEDEKQSQPPPQQOLJIIIJNU]dfbZTSVXWVSRQNOTXYXUTX\ZRNIDAAABCB?>@AABCBABBCDFIIE?x<>BGKKGDDDBBCHNUYYURUZ[\bkmjcZQHDEGJTahd__bfkmjge`YQJtWjRflh]PHITbir~}susfadgnv~p`]ceejvzufYYajtz{GE{tmhechqrkghmqtsnkpuupbTPQU\\UROLTb^UuW^]VY`]TU_iu{vwymjhdadlrrrpmjhimw~ysrpnowIMRSQLHG|xwurnja^eow}wi`ckkc^^_`aabbbde^TS\`[UTSSRPLHGHJG5@@5FHGDB?@@???ADA?BCCCEGFB==BGIIILZ?OX_^^`abb_\^`YQQUWZajjb__^XSQQPQTXYUPOPQQPRTYcfc`^`]RJILMOQOLJKLOQMHGHIJJHECDGFKWZQHFKU]_ZROU_caZTQUY\][XTQOICDEELVXSOPSTWYXUQIA;77>MVTRWbbUMMKHHIJMOQQRSSSUY\\XUOLQVVSPRSRU\dhdZTRQPQUYYXWUSPIECFMQQOSYZ\dhicXSSVZ[[ZV]jnlg]TQOLF?=C\LQNFADKPSRNIIQY]bd[QPOJP_jcWRRSROKGGIKKMJEHNOLIF>q>DKU[VJFMNJD~EECBDINMKKQY[[XPH@w|A}|POCxlhiknzFHCDHE@xwJRPCvEEFJLIz`\jrruLSWSHwqkmroiegic^][Z_b]ZWLHOZhzGOX^QthzrfUJSbhftCojoncbrvmlrwvne_[VNTgofYRUYY]_aff[KCJW_]PEQhqeULRacXOHC?BMWWSXheXLA@MXY\WKHGE;_lGQW`gdWNHDIXc`ZWWRLHHN]eZMKRYQIMTUUW[]\ZY[ZPDGSTPW]\\^afbXWXV[_]_e^VW]a\TQW[WUUQOQNWnxl^VSSOKMLHJOQQQVXURU\fgZNSboyzx~nea^\ZVOF>>HItiL]Y\\WSRU[]TTelc`hpdRJFF?jclCORPMOPP\ffaZTSQNICBDDJT]_[QOWZRGBCDEGFCBEJLONHACEDGLQSOJFDABCCDEDBCDBBK[36410/268889;<<;::9:;<=<<::;<<;;855789;=;7798767987678998779<>>968984dcaf9<:75444699877666567666i#58::76765gefgggff469::99987789732345967767888777887543356665567654544433445664dbcdbbehhecb`\XY)121.-./-,,++-,+,+*((+/0.%022231-**+-//.--/1/..0133322233845666877678865443334565458=80+))*)('''&'()*)('()+--+**)())'&&&'()*)'(*,-+)&#! C!"#$%(*-.-,+)&$$%&(()0.-+*))+,,-/0/.--,+*)*-.+)(),--,++,+))+ *'&%%&')+,,++,I+*)**+++,-,,.-,+)(&$#&+-+**&#""! !!"%)-.+((('%&'**-,**))('(?*)('&&$%&&'&&&'((('&%&&&%$##$$$#!""$&%&()'%" !"! !"""!< !!"##%%&(('''&$#$#"$&'(((%$%%$#" "$'*(# """$&$"B##" !"#" "##&)**(&$"!!"!  !"#"""#$$"!"$$%%%$! "$!"1"!"""##%))&#!"#! !!! !#$$'++))()*++,-../0.+**('](*,.-+))((('&$##$&''&$$&'&$! "$$%%$#"! !"$%&'&$&('('%$$%%#!"%()&#"##%'&&%$$$%&&'))**)(&$"$&%&'&&&%$###$&'')*)&$#$$##$''&&''%$$%%%'+,'&''&%%&$$$%$"!!"#$%&&&$#%()&$%%%$$%&'&''(,.,'! #%##$$%)-10,($!!$'(*++)'&%$#"""#$'<+,)(&$#$%&&$#$'()))(()))%$&)'')*('(*+(&&')-.-,,((+**,?'&(&&')*+,*(&%%%())'&%$%%$%'(()%%'      ! !#B$$###!"!!!  !!   "$%$! !"" S!#$# !#&())((''&'))*+*-//.//+(*,-,+)('%%%$$#! "$$%&'&&%$$&%""$%$$##"##$$%2&&'&&'),.+'%'()**('&'''((*+,-,,--+))'$###%&&&(*)'%&(%$%%%$#&*(&$$%&$"#$#>!"#!4/  -, !5!"',&!#'(&(+--./-+,-//,)()++*)*)()*++-/.,,,+++/20.-,))++**,...//..012212212368; 821685579;:; :887765656887875/)(&$%$#'%&! !$%'''!!$"$)*'$#!!#%&()'%$$$  ##16!"!$()'$%'+,***))+-+*'$##$$#$'(&# !%%#  " " 7(.8B@72//0/.020-*+,-/110--131--1476.(*17:9751.,-.-.023223678:;:8665445677311/,*+.257899<@A?=<=<<;87:??93148<><9;A$HC><=;96664223322453/+&%%$%'')/:0)&&&'))()-///,)(+.;03443* /652/--,(%&&""$""#  "  "&)*)*+*'&%%(,1464/,,.00/-,+*+.0/.--131,*(%###$%#"#$##$%&'&%$%&'%"A !$&))'&%&(+/11/,,,-/2214:=:61+&""#%,4:832359;97751,'<*7.:=80)%&/9?ELMF??FIE>51468?<:=AA=5,(&(*/0,)'%,64+)--*+0/*+27>B=:>DE@9653248:48667:?C@>>=;;>G'*-/-*(&KIEA?@?=<;62696679?$&"@"&%!<;B&,-$;A$$$&('@/.8==>EL)-/,%@:989<954451/0/.24120'#(/8B'-26-;5BE;3*$*595;"@54::22<>758;:50-,*%(383,'*./232581& %.30( &5;4*$(372+'# !(01-0;:1)"!*200/(&&(#48%+-274,'$"$.63.-.,'$$)391(&-2,&(,-./121/./0*#&/0+.1//0354///.142362-.242,+/20//,+,*/=B91-+**)*)%%()*+-/.,.399/'*4c`^a355455je^YVSPNONNPQSWZ[YVUVVWXYXWVVX[^00```^^^_``_\]^]\]^^]+^^[XVTTSTUUTSQQRQOLJIIHGHKMLMNOPOPRSSQMIHGED'EFFFHIHIIJJKLNPPOONOQTWYYYXXWXUNIHJLNOONMMMLMRVUTTTSRNLJJLNOMKL#KJIIIJJIIJKJA5ACB??ADFDABDGIILMIDCFHNPNOOKEDEEHIJKJHF#IJC<9;@CA><99979=??ACEFEFGFFGHGGHIJLNPTXUOMMNOOMJIHHIJJJKNQQRRRSRPOMKJJKJKLJHGHHIIIHFFGHGDAFKKHDCBCBAACBDFFD?9779<9bPL0BLC@HOHC><=???::==>=<9656d_;HLIC=<>A?<=>@@;66::77=BCCA>9l9>BDAAGKJJLOPQUXXWWVVVUUVVUTSRTVVTRQQSVVSRWYXYXUUUX]\ZZ[WSTSPNOSVWX[]^aehe\Y\]^aein<@=mgjomign;<;<@@>==:rponlkmnlkn88974d][g6b\ZTKKQW]_]^c_Y]2b[]VHHU``ZSOLKQZ\XOHHKOQQPOLIECDGHGHJLMKFCEIIHJNPOLLMNPQQQNIILMMJD?=@CBBDC@@B?<=@;558@D>89<>><:8540XZ1468730-X14[LUk>FNQMIILQUWY[[XVTUX]elg_`ehf`[[]__]Z[clpqqojb^ZXZ\_`bcddbadedcbcb^\[YVSOOPMIINSROQU[^]^_bkuwrllnruxzzyytkegmppnqtpkjnrsqke`^\ZZ[]_bc_[YYYTNKNVZZ[_egdafoobTYdebaabcc_ZUSSVYZZZYZ_eiiklifb^XQNSUTTK;03ERRJEDBCC7.0==?BEGHJMNOPOMKJJIJJIIHGFFEFJMOPSRPLHECCGLOQTX[__][\^bmtpheb_]]_`\XY\\WRRUX]ceca^ZTOH?nrCLXiwwka_gvxqL{}vrpmt~tmmv~ADFHIHDvnotskc_\XZbkuxvx{vqpmgdd^UUXVVZ^`begbXRSUN;1Hab[^emuuqrsssoidb_`adijhcbfgdcgmmkllmuCvqwBJOPKzsnkjgc`do~piggffkrnfba`\YZ^cdda[]ef_XVWUPNMKHHIJIAi2=@9=C:7@A:6779<=:99::<>@AB>:AIOLGB@BKQQPRXZYYZ^bZPQSTX^dbZTPNJKNOOKFJQUROPRRPNIA@DILIBKPRPLIGEDDEDEGFFLRNEAEMU[_d^PFDDCBB~~BFG{wljnswx}?yFFDCCBFRYNuyCFHHFwwzufe}HHIG}yqgajtqnjeb[Zb_Z\``XLCIU]ajwOYZKoafig\OSaihm}kZdoidppflvpb`mnbZTT_jkd\VMMV^d_NCI^g\VTOJKPTPMXjrfWQME@BJOMNU]ac]RMS`e^QGD@mX]zLQXo|qf]PMRSNMMMOMIJPPQTSRRPQUVWZXSONLJOZcfd_VNKMU]][[bkgWOPY`[UU[`bb]XWRNMNPUVPJFDFP[]`c_YQJIMSRQWZWTPNPJENZ[VX`istptwpn}pe^ULC<@FAr>RbhhcWRVVROU_b[Wasp[PMLD9:ISSSVY]_YW\`cbYNIMME?>DHGJ"OMIIPRJBCFGKNKGEFGFGJHDCFGHHJNMGDCA@BDCDEKS_599765468999:<<;:999:;;989899:;99::9:;99::9876U8:;<=<98:::9779:74c_`d8=<854459<;::;988988875c_e9>=;:85fddeffeeg579::;<<;99:85444566656545556799877654565433454cc34455674cbddeecbcfif_\.00///.-,,---,+*+,<+++*)*++,-.//./0.,,-/0.,,+*,//-++,.000//02245678::86!532233322232003796/*)+*(&&'((*+++*&+,*((**+*))('&&'())('''(*,-+(%#""##"  +"$')*(''*-R31/,++*++-..--,+++)(()('&')***,..--*()*)))(&$#%()()-/.-,-.//-,,++))+,+++,.,*)*.,)'%#  !!"%()('&()))*)'&&'())*+++)***))*)))(((**)'&'''&%%%&&$#"! !"#$$$%&&$"  ! !"#"#$%')+++* +'# !"##$#$@#"!!!$('%%%$$" !"$$#"! !"""!! ! !!!!$"!!#%'((&"  !! !!"#" $&&%$##$%#$%$""$&&%$#! !"##$$%'))'%##$$#""!!  !"%(***)*,/4787630--,,,--,+*+*'%&&%'*,,+)))()*'#""!  4#%&(+,+)(''*($"""##%'&%%#"$&(*)('''&'(('''(*++)&##$&%$$#! !"#$%%%&&%$#5$##$$$##%&%$#$$&&&''&$#$&()('&%"#&&%#$$%%$&((%$%''&%h''(+-/00/,**+)%%'))+-,*''&#"#$&),,*'$###$$#$$#%)*)'&$$$%'&%%&),+)'&('&&'''))('&'*++**++,%(+)(&&&$%'& '):&&')#   ! !"!!! !!! !!  !  "!'!""!!"$&$"!"$&'),*%#%'+-+*+)%#$$%&'&&%#&(% ##!  "$%%$$%%$$$&&&'((()+-.-)()*++*)('&&&'''*,-,*('&&'''('%&'&$$%%%#"%((&$##$Q%%%''$ -#!! %! !1+!! $$#" 4"#""%& ''(*,+,-,,,+P*++*,--+)((),-+*-...,)*-.00---,*,+)()+,-.0221354.,../0246 757:965:!! 986>78656,&&.)%$"!#&&$$'%"%(%&""''%#!!&'&$"$'))**('%#! "#$$$#$&(((*++)(''()*,)&()))&" !!!#" #$'&!*:#(,,)''*-0112310/./27;8226873002320./5:;<=;730/./12334543234332220/.,+*'&&$ !$(('),0200028=>;878:<=>?AA=7346776787557:;:84110.../0220..--+(&(,.--0452039:2)+22000/01.*'%%&((')u((,03455432/*&%*,**&!*)"%'&%%&)+)%$#  $%$',-,,,+*(&&()***+.132/-,-.010.*'&')*++**--(#  "%'()*,--,+*)**)(''(*,-..,*'&%%'*,./123322346;@>98642344201563.-.149;:741-+'!8;$*1;CB:204=FG@9:=<71.-,-18>A??@<9875552,+...0113575.(()&"450158<;9:::9743211245542146435888:::>DI$D=8;!&)+)I@<:998535?A :<#$#"!!#-2*?7:@!$%&%C==?<21@&&'&C>>:417>;8633..43/045/'"$,027=G,33(70586.&(1646AC5,3;84<;45;8//780+''/772/-(',153(!%260,,)$$(+(%+6=6.+*%!"',*)-3563,(,595,%$#<02C*,.:CMG81/*&!!%!7-5874-+./+(*13.*1<:.)()$%++*,-/.*)-032-'%() $ "$#&)($#)+&!"$%)*($"#"!"$#  !"! #2.,-0,)+ 0./000/./ +..,,-...-,-020,,倍ɀˀÀہӀ。퀂׀ڀƁ K胎Ľ+½,ń߄ ׅր8򀉋#MϽ· +ȗé﹙͉ĀƿĽ+ꈝ·Ļ¿ƾμǿ¾¹þ˾ȿĽɽȿżнӀÿ뇖º€ކ¹ſſ²ڀƳ慜̼ѻûʿŭ퇔Ā¼Ӽź÷炋UQ􀇇#gi6776heddedb``a``ababdffdba`abcc`^]^_^]\ZWWXZ``[XY[]adecb_]]`bccca__ag79:7hfeeiklkgeffdcccb_]]\^`_^]`hje^YVUSRV\`_][XY\VTWYYWUUVXZ\]^\ZYVUW[[ZZZYZYVVVTPNMOSYYSNKLMMNSWXTOMP[6=?>@?=>??>;98ld]XY[Z[[YVTSQLJMRWYXVXZ[\^^\[ZXUUTRPNNOOPRTSTZ_`abdb_^_][\^_`_[XUSUXYZ\^_021]ZYWVWZ[[\[YTRTTQMMPSVWTRRQPPRUWWVUTRUZ]]]^_^]\^acehgc`\\3_`^ZWWYXVVVTQPRTSQOOQRSTTSPMLMONLKJJMNQOLLLKJHFEEFGFHIJJHHKPQPONNOPQRQP6RUWWVUPMMMKKLNOQPNMLLKKMOQUYYVQPSSRQPPPNMJGEGJLMMMKIIKJHIHGFGMW]TJHKOQPOMJHGHIHEDFIJIJLMMKJJLONKIIJKLMOPONMKKMONKJIHKNOPQSUSOLLNO|SXXSQSQNLKLNNMKJJSa79862\WUSRQQPSWZZZ[\]][Z[\\[ZWUTUWWVTROOPRTUUUTRRQNMOQNKJHFHJJKLNOMKKLNPRUX[]_^][ZZUOMNNNQTRNMNSX[\YVTSRUV TRQRUVVTPKIIJKJIHHJMLKJMNOPONLLLK9MPSTRPNMMLJJJKMOOQSSSTUSRTVWY\ZVROOTUSTVWUSRPRUXXSOQTUUSQR:SUVXZZZ[]^]\[\\\[[\]ZXWUSTUVVQKHGHMSXYWRMJKMNMMNOSZ[YVUSRRQ;RV[\[YZ/110.---[[\][[]]XUX^_[WXZZ[0441//04663/-/22111/_00_^/6]]]\\^0357520123320^[YYZ]^]\[ZXWXZ]12234334578300.POZ01/243001100363.-15797643200135420/277212213210.-.1235667776422356679;b:740+('KIGFHKLLKJKNONLJJKMKIHGHJKNQRRSTTRRRQMKLPSUVUTUSSTVSRQPKHILOONOPOQRRQQRSSSRQQOKHGEIOQRSTTTSQONMMLNOKKPTTUVWTPJFDEDFHJJHFDA?@@ABBBA@@BDECA??BEHNROGC@>AGIHGFDDCAABDGHHGFFHJORH@>AFGCA><<99:846=@@CGIHHGGGFGHJIIJKLLMNQSOKJIHGGFFEFGGHGDFJKJKLNONLKLNQROMNOMLLKIHFDCCDFDEJLKKJKOOMIEDCCEDDFGHJKG=`[i:7D@3+U::7=KSIENKB??><:87<;:9dRA1-D3=FG@:;>959=><:87896g;DEEDB<77>BCCDFGHIKLOTVVUTSQQRSPQSTVY\[XROPSVVUWYY[ZVVWY[\\[][YYVQNMMPRTV]ackrl]VY[\_cfho::9nlprkefpt9:=?@?=<:pn799qonklnpn88h][dnja\WQLLPW`^UY`ZW^a]ZVQORY\ZVOGBIXfie]TRRQRRPLKIGEEILNPRQQVXRNQUVWYYXVRMIKLKLIEFHJIHFA>>=>GNKFIHD>97pnhaa10\TNX3576689:=?BFIHC=dW[dhjmkkAQTONQRQRRRSTX_cbdksskdba`bdc`]^^XMDHT^_YPMTZ]__[XY^bggdba`^_aa^]^__ZRLLOOOQTSOMNONOTZbpyrb\_dltwvqmnoiddhjhghnuyupljjjfa\XTSVY[ZZ[[WU[_UMMQTX\bdb^]ckqtvvrjb_bcdggc_]]\WRPSZ[WTUXVRXdheaada\]flj_TSTV\\RF<77752133-H??Q?NNLHBBIRUQOQQT[dd\VVWY[\\[ZYXSNMNQSUTRQQPONLKKJHGKMMMPUWTSUSMKKLKLOSUSOLJKORSOIGFDCCFIJIIIFDDDB?>>=@BBBDGGGILLKHGGKNLHHLKB;H<99<><8558:85d]^d7>@;74479:989;:999:;:864b15:=>=:7hccdf444568:;;<<<=;:864 +55544566654678766766654345434553322233da`4897iggfcbb`adfff121/.-..-,--,K+,-.0//-,--//.,**)*+,++,*(((*-,)'((*,..-,,++-.---,,-.-,-/22112566642343210/-,-..--0563/,+)((*./..-+-.*')*)'''()*++*)'&%%&()()(&$"!"%))'$###"#&**'$!"(3/,*+1*)''%" "$''%%'()+--,+,+)((&$""#$%'))+/233564210/.-7+)'%&&'())*(&%$$$&'())(&$$%#!!#%'('%&&%&')++**)'(*+*)+./010/,**++*'%%'&%%&%##%%%$%&%$"""#"$%&$!"#"!  !"###$$%()(&$##$$$#!%'(('&$###!"##$$$##$#"""#$&))&#"#$ %$#"! ! !-"""! "(+% !#%&&%#! !!  !""#$#! "$%#!!"7#$$##"!#$#  "##$$%$" !"""!"#&&#!##""!""##!!!$,)' (+,-,,,-,+**,*((('&%&&&('%%%#!#%#""! !"""#$$#"!!"$%'())*)('''$!!"! #&%###&*,-,*(('(()))(&%%'()(%" "##"!!"#"! "###"!!""!"##$%'('%%$$$"""#$$$%&&%&'%$%''(V)(%$""%&$%'''&%%&(**&#$'('&%%&&&''(*+++,./.--..-,,--+**)(()**'$""#%)+,*&"!!#$$###%()(&%$%&%%%&(++*((,'(()('((&%',.+((*****)7()*+***(''')*)(((''')+!!&    - !"#$#!!!  "##!!""  ! !"##"!!"$%),+&#" !%'&%$###"""#$% &)%  #%$$" #""#&&&%%%$$%'(&%%'(()),-*'&&&%%%$%%$#$'('((())'''(*+*)**)()('&%#""#$$#&'(++)&$#"#$$$&''()%-)/ & $%& .$  "1#$##!!###$%$%%&(*+***)(()*++*((*+,.0/-)''),--.-+,..//.-.-,-,)(()*,,.1238:5-+-../0136868:846;<53655335650(&),,)'&"#)'!$(%$'('%" !###" !',++)'(('')'%$#! !#)+'&),-.0/.,)%"$%%%#!!!""!!%!361+*%!"!#" +#'-14866#.0-+-///.-..156226<=853113431123/&!%-33/)'+.022/N,.268742210/00/.//-*# ! !$'('&'('(+/4<86566420-*)*,.++03-'')+-04540.169:<=;50.011220-+**&##&+,*((*)&*2530032127:70)*+-0/')"""$'(*.450++,.0111//.+)))+-.-++,,+)('''&&)*)),./-,.-***+++,./,*('(+-.,('&%$$'*++*)(&&&%#!"$$%(*,.2432347::865444666750+)())(((*++,-/.*"4-%+.01017AIJGGNVX+QL',.,,,]QE=:99;CJMM'JEC$(+,*%C=82.,/442/,,,+/5:;76895320,+,+)+/466534797556771,163027>#"<327;9897543230-,/379;=;9:>?;427>%++&GEA=97556=<<<9767633456775233-**+++*($:6"(*)%!$'((+/36799865/'#&+--,)&$##$%(/32001/,*)'(+-,-2982,(')+,,+)&"#-453232121-&!!%'&)-*$$(-,('$'/0,)'%$%')*,,,+'#!!$)-0671...,+)'&&'*-.+'$#%()#")-*&',021146532210.+*)'%%# "(,,+.00-+,.//-)&(,,*&"$,33/)%'-49;;95-&$%&&*/0/)$"! 37"*010,+/4-'(/2//.,+,+)((+,,*&%$" "',,#'-*&$$%&''%@;=??D)263+$#&'b)*)%#@;>"$(,*$?B%'(*+/1.(&$!AB@?!$&&#B?;;><;<;:<?$$?=F&$=7;>?@??=9744<=649:5.,12/0,)/41.4<;8#/."3/9?3)-37989;5')893:>:862.,3;7.)'*,-.0.**.12.&!%0532/)),,)#!)29:3+$ "$%(+)(*/111-0::-'''(%73J24027993033-)'%$&&&).+),/000/245420-*'')+024795.)*,*'+251++.12100.+.1/*()' :C,30+*++(&).10/.-,/32+,0//-*(('+1673,,6>?<<;65CHQa4d]XTQRSTTUXZZ[[ZZYYYXXYXVSQRSTTTROMLNQSTSTUUSOKIHIIEBCGJKMOPQRSTVUTRQQSUYZVSVWVTRQSTSSSRPOPRW]`^YVVVWWUUVUSQQRUVTRPNMMOQQONNNMLJIJJKK!JIJLOONOPTVWVSPNMLKIIJLNPTWXXYZYXWXTNOUWWVUTRRSTUUUX[ZTQQQPQQPRTUTiWZ[ZZ[[[YWYZXUTSSWZ\]^^^`c`ZWYYUNIFIPQPOPQPQRSWYWUTROMNQSTUWZ[ZY\_0/][YYZZ[\][ZZYW[ac_\ZXW[1576200220-,-/10/]\[YYY[ZXXY[\]^022235666520^^\]_`_][ZXXY[/0123467765320/XOQ^1_YX]12221110./36421232110122212467631279779::841.VT-/./1233344456555 +6654446789:899;;;:4.*'&KKLLJJKJJKHECDFGGEDCB@@ACFJPV,,+URLFFMTUTSRRRPQOMMLJIILMNOPRRSUUQNNOQPQRPNLLKJKLLLMPOC=ENPPPMLLMNMKKMPQTYZUMFDDCDEFFEDDCBBBAABDCABBBAABCCFJLIFEB@ACEFFFGHFGIJJIIHFFEEEDCCA?@ =969>BEFEDEDEFHIIHGILKEACCCDDDCCCDEECCDEDEGIJJIHGHKNNMMNOOONLKLKHGFFIJJLMLKKNSSQNJIHDEDDHJKMLG>5]Zk;mci<>4Z3<@C;5A?>@;46:8:92:C7VKGB:>Q6B@425569=>=:9997c`7?BDEC?<;>BDEEFHJLMNQVVTUUSRRRUX[ZXWWVWX[]^\VSQQSUUWWY\[YXWVVVUUVWYWTQMLMNPTY]blog\YZ\^`cefimo9qkkmjfeikjkn8887799789:::87kkllkkjd^[]aaa`\YXTQZc_\``^^`_]]ZWYYWUPG??IVdklj_TSSPNMMMNNMPTVZ^`]WWYXSRTX\_^[YYXSNKIKMLKKKJIGFFF?57BHHGC>71XJIQW^39===??>>@BA?@A@?AGKJECDCBCDDEGHGDAAFIHIKNRTUY^binpppoopquyyzxusqojed`^[VTWXX]`_]]``^Z[]aeggeca_][XVRMJKPYaddccgjhb]YWWZ]bhkhgjlkklprrnhdcdfihecdca``_]YTOKKMNNKGGKNOPRTVY^enrqonu~ynd_][]abcb_[YTNKLNOMKJLQU[_\Z_eea^_hqspqslb^ZUNG@941`XPY5<>`34/==<<810;LQQQOQY^][[\]\XVWXXXUMFBGPVWTQNMMMNNMKKKJKMOQSTRPQUVSPONMNMLMLKKJHGFILMKHEB>uq;>>?CIMOPTW[aiomlke`\ZYY[[WSTVWWYZYVOGCCEGHHJMMGB@I[d`ajrvwvtqmkqKLKJIGHNJ~lcZSZmx~LX]YOzrljmtulfc_YSPPU[]\]___\XTPOOMKS[]][Z^dgjquqh]UQT]ehoAJMQSLyhjnokhhfdfggfffgggknt}Cvnnrx}{toonq~HIztqopuy}oea`]\[Z[[\]]_ab_]^^\]aa_\YSOMNONMMMKJMRRMIFEEGGA;;7XY9@=;;:;>@??BEFGGGFEGKMMJIIJR7EHKQVYZ\^]^bfc[QJLRRPSTVVSONOPQUYXY]]VPOORV[`_XUWTRSRNOV[ZYRGFQ[ab^YVUX\YTPNOSSS[_RHKQSTVVTZ`ZQPPOLNTWXXUPLHCAEMV_d`XUUWZ^d_OHNYbgd[VXXVTPLMQTQHDLYcd^YZahhec`\XUSOLKLQUTOJKQTSUY\_aa]Z\\YSOOOMJJQ\^[[[WPMRZ___c_XUSQMJQZUPSVVQIDA==JZfnlbYWXQMVacdfdb`ba\YYYWSNKJHC?FTZ\WNINY`^XQMLKIE>vy~BFHFILKJJKJFN[THDEIIHC{svDIGEHLOW`aTF?{???@FKLJFxzyuw|AACECA@{{~GKIGGGEAAEC}D{}ztswwvsnkovyn_RVmysifeaZUTZdiovrbUYikakFKDwip}z~mggeecWLW`YT\lsokjkfabfd\XXZ`dec]VX]\WLALgspaPGDKP=hLhld^\YSJEHPUOHFEJQOIEIJFCJRKBqmCOZdb`\WWWXYUOKLLLQUVXZZ]bgiiihc]XVURNLMRVURPNR[ef^WVUSUY]`^\YTRRSSRPLFGOL}yPMKLNQSTUY[TJKOQPONJMPNT_ce^PGHJOVWRR[_YTUXVQQWYVUVUPLJNT\ddgvzeN@AJNS_`UKMSOGJQRLGEFIGHPW]a^YVUTSQKGGFIMNMJGB?AB???@A?===>=;867987h`cfe8><7ef7<<:87677559<<;86569<>=<<:74edeh55567:;;;:::9874334 +334567765676 5434443346754334hgfede56754gecb ,-...-.---,,- +)()*+-/0100/ ,+,,+**,,+---//,+***)))*,-./..-.-../.,*)-21../12L442100/..-,,--,*+,/22/+*,06<<8538=7/,***))('''&&&'((''*+)((*+($! "##"""#%&''&N())'#!"$'+/2331//01122/-+)()*++**))('&%$! !#%&')('&&'())''()(&$$$##$%(,25642/,+A*)'(***)((()+*)('&&*--+*)(%$$$%&('%%&()*(&&'(*+,-.0124663/-+*,-./1/-+('()*++,+)('( ''&$$%&&%$ ###"""! !L  !"$$%&''(('%%$$###$$%&&''&''('%$$$%%$#"##$$#$#! !#$%%$$%&%$"!"#$%&%#"! "%''&$##"!  "!]"#"!!""#$%%$###$$%%&%$#!!"#"!  "! ! !""! "#""! $##+.)&#""$$&())*+,,++*#+*)&%%&'''&%$#%'(''(((&$"!  "$%$%&%$$%'(%#$%$###%&%"###&).0/,)(())''(('%$%'''&%#"#$&&&%#"!; !#$%$$$&(((&%$$#"!!!"#$&()))*)('&'(('%!!&'''&%$$&''((*+*&$%'('(+Z,+*(()('&&&(*++-..021,*,,*%!!%%%#$$###$&'&%%%#"#$%&'(**)()*''&'''())'&''&)-.,**))*)())((('()(''(**++)))(()**)('&%'($!)+(') $"  J   #%$  !""!  !""!!! !"##$&(&$$#""##$$$%%%$$$%%$$$&'&$###!!! !! #%%$$$#$#$%%&&%%'($!!!"#""#$##$$$%''(''&%%'))(())**)('((&&%%'(')**))+..+)'&%#$$#&''('#,%*-'*$'#!#..!"#"!!$$##%'()()++*++**))+-.-.///.,)((*,+++,.-,,+++*4,..-+)(()*,/03883.-./0012246785677656778760022210,(%&(()))()&#&*(()(&%''%%$#$$#" $)*,.*'(('%?&%%')*+-/-**,,)*,.01/,++*(%#!##"! $ #&) "&(&#!""!"$$%'('%##'*V,...13579;<;:;<<>AAA?==<;85320/+*,-.13200232..014543320.+(%" #).122368630.--/258965679;=:63334664332120-)&#$%''%""$%&'()*-16;<:76;BEE?70-,,-0110.,*'#"#&'&$#%')-0.-1686227<<9:=;530,(#'"!("%&('(-1/./000.,-...+'"!$ */0.,***)*)('''()*+-..,+,/0.,,+*)@(((''((''')++)'$!;999: !!#'***,-/38<<;:6310024431011//00/+&$%&())$!#/53158:;<<<98;GPR)*)(('L(,)D940*-8?DECBG*263,JC@:646<>820/,)''*/10/011/-*('(&%).010024449;:62.,,1559"')+-(=358:86765566543&32357:A#D=99;>A@;7889B')MIFA=;<=@DGD;43445556653443467542-*)*+*)(*..*&#   !#&*,-.0/0242-&"#((')+++)''()*,.-.11-*)*,.132-,.,)++()-00/+#"*15630-,-/.)&%'*+*/2*#%*++,+*-1-'&&&$%),,,+(%#! #(-252-++,-063)$'-253.+,+)'&$%)-,%"'0772./376430-,+*(&%%'**'$%)+++./000.,--+(&'('%$)020..,'%(.32363-+))'$)/,''((%"%19?=60/0+'-454420010-***)'%##""*..*#!$+/.*&$$%%":>=:;?B!!"#!! =;<>#&%$$$" #">A"C?A@=<=<<;869=>7.&)7A=7552-*+/59DFILNMNNIDIQQNQSTVY]_^\[YY[ZYYYXVUTTSTUUSPMKKOSY]^^[VPLKJLNMJHJLLLPQPOQW]_^[XWWY\\UNMOPRQSVTPNPRQNORTVWVUUWZZWTPPQQRRRTXYXVVTQRTWZ\ZUPMLLKIIKKKJKMOQSUVUTTTPLLNRTVVURQSSTUVW +Y[[XTRQRUURTVVVUTSRTW\djcYTSTUVUTTUXYWTUY\][YVTTTUVVUSRSSTX\][ZZYWWVRQRTUTSTZ`^WQQRQPQRSTTSQONNMNQSTVZ_`]ZXXZ\__^][YZ\][\]WSW\__]ZY]12442//00//24420/.ZYXY[ZXVUVXYYXXYXQWXYZ]`1123455420\\]__\[[ZY[/025766898631/...-ZZ[XROQY11//1331\05763000/..15:;63345.43579:98740-+,./-,.4740/122455666554557887789:92:;;;72.*('MKIGFFDBCDCB?>==>AB@84===>?>;89>AA@>>@AAA?>@BBDFGHIIECBBEGGGHHFEFGFFEDEGGGHHIHFHKMNMLORURNMLLLMMKIKMMPSPKJMRUQPQOMIHEEIKLLGCB@6X]9988ITID@?>:4jt=B?:BICA>8dL:>W8:4211445<EFCB@9eci;@@ABA@@@BEFEFHJNNMNQSVYYX[\\Z[_```^[YYZXUTTVVTUWXYYWUUVVTRRSUYYVSPPQQPRWZ^cfeb[XZ^bgkiffhiil89pliecdfh79853332358;<=<966776lhb`eea^`cfif_YZ^cl86feea^YTW[YXXSJCFNV\bjjb\\[ZYXZ[YVWXWX]hqk`ZYYYZ\[Z[[ZZYXVRHEQYZXVSQLFCDC@<:=@?=<:72/3:>@CGJJIJIF??EFBvtBKLE?=CJMNPTXYXVXblqrpmkkmlkt}{qg^]a_ZZ[\_aa^XUX]_]^`ehhfefhhe_XUW\fmmhfgfeimooquywogfhhfegnssme`adeeggdabc_YWVUTTSRQPPQUY[XTRUY[`ff\UQNOTZ]bn{tgdgjjhecefc^ZWVVUTRRU[`ba^[\__YTPNNQSRT_mrneZUX\XSQQLDFKGBBIPK8B+4I_iX7'GH]YTQQV]``cilg`\ZZYXWUPMNPSUUTROLJJMPOORSSUUrSPQQRQNMOQRRQMKJKLLJJJHGGEDCDEGIJKNOLGBDJOPPSWXZ`ege]VZchjhdba^XVVTQTYXQNTZYQIFFEBCGJOVZZ[bljb`htwsomkfbhvJ{okls|ECyofaahw~}{wsh\SQU^gjea`ba_]YX[_dfgig_WUW`kvylcaafowz}@?>zrqrqoliq{wppqmihlrurprx~~sgdiou}{xR`^Pqjotuzujd`[QHHMOPUYZ[[ZYZ]^^]ZWVVVWXUPORRNOQMKNQRPPPNIII@7qfB?%98Z4/07=CHHFEDB@ADHJHEB?BHJK]=FOW\^afjbVPNOQQOONKJOTWZ]_\XUTUX[^b_[XVX XWYZWRPRRQPNJLTTPKEAFOVZZVW_fg^VTUV[`YOQVXVUSSW^^TLLMMMOOPRRNHDAAISZ_^YTPQQRTROIBGYkrj^XY[\ZWOGFFDA@CGQ\[RNRY]_abdc`^]VOOZdaUNJHFGQ]aa`_\WW[\XTOLIGFLY\VV\YOFISWWVTRU]\UTURORVW[\XQKIHDCHQ_e`XTW^]\cmljnqpjc]RNSVRMLKG@>BHORRVVOJJPXXNFHMQSLFD@ww~ENVYWTKGSRKHHHIH{vvEFBIU\^`cZKFDEHFEFHFCB +}rqxzyvrv~?@ADFGE{@GJFDD@vzA{rx}yx{yrkjkgjtq_UZehgipx}ud]ahpvztg]YbikxEDADEwtFLF{nihijjdZRKECMkpigd_]dhaYXaif]_d^_d[RRSLNWZTIFEINKJNRURJIR\ZNILQQND?GMIGCrhBWXKDC@zokzDObicXOJIKNQ[`ZZ`b_]_cfhknoopsqh`]\ZXWTTSLDJTWZ]\WRSWYWTT[b_WNJMSSOLLF|~KUQLMMKIHHHGHIFGKKLKGGJJLOT\gjaXUQLIJS]\VSSNHFDEPWTNLJIIKOUWW]o{ti^VNILV\YUPF?@EKLJIHJRWWUTY]ZUPNNMLMONKLMLIFEEEDA>92\2:ACDHHEABO.25779::;;9;=<;<<;<;:;:669878:;;:87875d`2578;=><:::;;>ABA@ABA?>==<<<845666kgh569<<94cf6765449;cW5<<;:977:>A@>;;<:5eeefh567:<<;;::876543457875357888755666765 +4543344434577545653235654gfeca_^ade1124+*+-+**++*)(*.010//00.--+)(()&*.02441-,--+*))*+*+-..,*+,.010/.-,**-0122210//110120.+**))*,,+*)))-1.*(*09=<7239;5.+))())'&''()(''((('&$%%$##$&&''&%$$&''()*-/2334/1+('&%%&&&'(('&''&&&%$#"#%$#$$%%%$%&(*)(''(('()*N,./0120.,)&$$&&%&')-1.+(&%$#$%(+.10.-+)(('&$%&'((()'#$*--/1242111/..///-.- )())(()*++*()(''&&%%$#"!! 9  !!"###%)&(#'&%$$#$%%%&(*))(&"!"#""!!!""##$%&'%$#""$&&%$$$&('%$#"""!"#$%%%$"!"#%%#"!  !"  "%&$#"!"#$#" !$$! !  !""$')*+--,,+))**))*)(''%%%&''%#""$'*-.-+(%#"""##!!"!"$%$##%(***)(()**$!"""#&&#"#$$""%'()('':()+)'$$%&'&&&()(''&$%'*,--*'%%$"!!""!!!"#$&''&&&%$"#$&'(('$%&')*+*(%$$$&&$&%%')+13.'%$%'((''')*)',(*+,+)'&%%%&&&$$%&')+*)))(()'$#$&'&&'+.-)%$%$N%&&%$###""#%&'),-+)('()**))('())()*'%'*,,+*)+'&%'(('&%&'((''(4)+-''(**)((''(&'('#!"''   "%&#!  + ""!!!"!"$"!"##%&%%&%$""%&&%%&'&&%$##$%%$#"!!!  !!!  !!"###"#$$$" !"$$#""###"!"$&%%%&'&$$&(*)(*,.,*(&%%&''%&)*+-+))+-.+++8*)'%$$&'''$! '&$-$ **+#&R/05!! !  "#$%%&'))(()*+*)+---00.,-/121/-,,++*)),,*)*+,-,**++)'()+./.+*k+./04663/-/13574224555:7521333.+('+,*)+.120+'%%',)(('&$#$%$$$!#%)/10...///00.,+(.4861--,-..-++,+)(&%##&$#"!  "$###" !"%"!##!"%%!9:#*+&"!$()***+++*,4;>>;868988>DB=6114201101220-,.10//157654332.)%$&*0686455459:9:<@?;7 7885348<;84123 443452/.-,++,*)+./-*)*-/4870*(((+/14635664212430.,+***))+.1220..0/,**))*)'(/7:93-+.0.+**'!!# $!',# %1,)'(,13248:841/.---+'&'*-.--,*(''()))+,-./-++,,,*)+,--+('&'()('&%%%$$$%&'(((**'# $'((*,--04650-17:<<:9974220--//*(+..+&$%%$%'),020/277217>?;878548@JNJGJJJM))((OJB:88:?CG$$FFJKHC?;6336?EEC@=70)'*/69754442/,*,/356861,**/6=DGB94215;?AB""!CD?9899985;B?::;8557;;977;@A;437;>BGFA?F.::"1NA;=?>AGF?8421.))-/-02454223565431230-,..*+-+*+--++*(#!"1, &%$*-01350)%$%&%$%&$#'+../0/.,+,.0253/--///01.*))*(('$%**(%!"'+..++05S60)(()*+,/3/''+-,+)()./)##$$$&'())'#!$*/11.+)(()**)%!,7<7/+-/0/.(#$%#!!#%+22+(+02330//,'&-43,&$#"#(.2100.**-,*)'%%$#'02,,0/(!#)--,,+,10+*+)&(**,,*%"""! #+495/,.3205;;9:;:63/'$')'#"" "'((**&##'++%!%()&#" ==@A#).00.'B%0.'%%&&%C><A@>;;> !#$#A?!%%"!" 9>A@;77868?<1*-5777;>A<2.16;?B>6.+153;##!#$<9$($>65679;91,)$ %6EB855410472,*053-/30282,,,'+12-&#"%*'%(+-*%%-41)%(+,*# %*'&$:5$32)%%#C<8B$*6:6/)&&(*,23..13213689:<=<<==831110.,-/.)).13784.-022103983,()+,))+(CDOOM-50*+,+(''()*)'(,-+)'((&'*.2893.,)&$%+12.+*(%$!").,(&%$$%(+,*-8A=5/+'#&-0/+(# $&&&%'+-M+)),.,)&%%&%%&&$%''&$""!! 848>:40/15$'&#& :)'20111;+$,---/ 220.-+*,.ԁԀ~~~ˀƀ ,þþʽNſǽۅ„¹ð¿؀ÿϿ튕ÿЀӿĿõĦɀ݉żľĽ񀅈ϼʽXӺϔܩ྆芛Ǯǻż;򊞭Ƹ񂕤ö³ŲŹ̿􂗢󇍘ȿȿ쀎셢ƾŷ$瀉ހ 3653caba_^`bcdcbbb``b`[\bdddeh565543c__bb``bca^_befedeggedc``a``_`a`_^]^addccb`_^\[]`cegeb`_^]^`abbba]ZWUUXZ[YWWWVVZ`gfcflnjc^^cRb[WWWUSTUVVVWXYZYVUTSRQRTSRRSSSRQPPONORTVY[ZYYYXWY^chlnni`ZZ[[XVUTSQPOPPOOPQRRRQQRUSQRSLRQPPQQOMNPSW]___^[Y[^``bccb``\WUX]``^[ZYXWVTQQPPPRUUUXZ[]^__^]\ZZ[\]aegda`ac234553cbaaabcd2c^\[\]^]ZXZ[ZXWXYYWUUWVTRRQQQOML.KHECDFHIIHIJIGFEDCBA?=>CEFEFHLMMLE/??>=>@@?<=@GMOOPRSTSPNMMKJJIIJJIFDFHHHJKKKMPRQPQQQON MMNORUUSRQPMLMLPRSTUQPNMMNOLJJKKLQUXXYUPKHGFEDDCCDDFIIGEEEDCDDBA@=<=>?BCB@???@ADFFGGFDCEHJKMMLJGFEDCCBDFEDB@><:99:>@?@BDDB@ABCCBABDEFFFJLMNOOOMJHIJLMLKKJJKJHGEDDDC@@DGFEGKMNMMOSTRQOLLMNOQOQRQOOKHJMPTRSSQQNJHHGGIHECDC>736>FMTSMF<`5MSIC@@AB?628AB===<@B@@;^Vbb\_eaZZ/3:@BDGF>f`h9<==?@@>?BDFHIIIKMOPPQTY[\]]\[^`add`\\^^][ZZ]aa`a```]YWYZXUVUUXYXTSTVVTTWY\`cec^[Z\aiqpjggfeej:;oidccefj99cX]10\[0468::988:;<;7ijkf``cfhgecaZRYk9nh3f`YTW\ZUVYXVY^`abbejkhc_][WUTSPNMMLOW]_]XVVY]^[VWWWZYUPJCDNTVYZWQLFCA?>;9::99<>??CIKIIIJJIGGEA@DJKLNRROLJH=[Y;GF?:9XYUSNIMXZXUSRVXXWVUTTTRRTWVROPRUVUVXYXVRONNNLKJKMNNNOONKIFGILPRROMKJHHIJGCBDGLPQPONORZgrumd]\ahif]USSQMLLMQX^][YVRNLOQOICCGHGHJMSURSW[]`__dkmjimw{srIHsjcdks}DHKMMKug]XYcr~~skb\WUZckopnidceeefgjllmmklnnkigfhkib^`ekqspmovvptzwqomjny|uolnswuqnnpqpprv}zqib^aioqqswtommnszrba]QFDHQXZbihaZY[\\]_^\[YWUSQNIHJKLPOHEKQUWXWSMHHG9K/A,! <<<758998899:<;9889:974358;<=>>=<?BBBACDC@?@?>=;7hhi5@6768<=:8643ebabdl9638>>=>><;<@BA?=<<=94gebdhhf46899888755444589878765554577654323554 33343323334544544457754664eb]ZZ^,+++**,-...--,***)'(,./-*)*)()*++)*-/0/./1210/-I,,---,,+,/110/.,,+**,/0231/.-,,-./0//.+)'&&(**)((('()-10037862/032-)((&%&'((()(&/%%&&'''(('&%$%$$%'()+,-,,+)((*-03663.+*++))(''&%$$%&J%%&()(('%$%%%&'(('&&&''%$$%&(+---,*()++,-/000.,('(*,+*)(&%%%$###""$&&')))*+*)(*,-.0332/-,.+,,--.--.-+**+,+*)))'&'))(''()(&&'('&&%&&$#""  !""!"""! y!! !###$##1 $%%$$$%&&&''%%()'%&&%$##"###"##"#$%%%&%#!"$%&%$$'+--.10,'#!!!"!!!"#$$$###"##""#%&&&$$%&%#!! "$&''%"  !! !""!  + "" !""##"?!"#"#  "! $&'&&(+./.,+***++*+,-,+(''&&%$" !"$%'0&%$%%$$#"!"#&'&#"!"%&&'('%$%&%##%%$$%%$"#&((&%%%# $&)(''((()z**)'$"!$'*,-,)&%$$$###"!!"#%&&%$#$%&%$%),.,*(&%%$$$%%%&&%$#$&'%#"!!"%'('%%'*+-11-('''(((**)*,,+**+.10-(%$$%%'(('&%%&*,,)0(&&&%$#$'++(&%&'''(**('&$""#$$$&'()+*(('()*+)))(4))(&$&()((&$$%&&&()**(''&&''()*,-(()**)) (''&$$% ##   +   ""#$"   !##! !!!""!""! "$%')*)'%$#!! !""  !   !"!###"##$#! ""##"! !"! !  !!!$$"#&()))*,-+*'%$%%%'()**)4)'%')-0..-,,*&%%$$&&#!!!"# )!#X*&*(&),+('--3 !"$&'&&&%%&&'''(*-//010/0/0231//00.--,.10///010,,-.,*6,..+*+-.,,-.024541///0598543322595311102*#%#"q/020-.03420/.)"%/-*)'#!$&$" "$%'((*/10/.//--.-+**+().232.++,,+)&%$$&&#!!!$%" #$$%$"!   "#!&)&% ")--.1573-((,.,$!"#%(08:9;;869:86797544654433466322124764334567740//1671,-001369;;987643334543111/,+,-/00/.-,*&"!"#$%&&(*,-,+,--,,,++-..2699863005=BDC?:86444320/013446<><:83/.../1342/..158960*&%&&&(*(% !#1.+*'%(01.-+,.//.--...-,,,++-0/,**,.../1110.+))('''(+**)'&$%&(*++)(('&&''$  "%&t'+19>?:4004:<:4///-*(('*/4431/,(&(++'##&'&'(),.--/1122259:77:BLPJA=;DM''KHC=846:>C$&())(LKG?71./5?GF>93/+),169:842245788997788643347620259=?<89=<8:?>;:967>A=:99;=<:8899877:?A?:52027:<<=@IUXMA=<<=?CJK>321,&#&.359><73123456654320/.,)(***,,'%).011/,'" #!)/232376,##(+(%$$$%(+,18:4/-,++-//.//--...,,++-,(&$"&*)&%%&(,0113674/,)(('(),-,)(**(&&&(*,+&$&''&%%&'&#! "&+,-.+&%$%&()'$%(-4860,+**-/,&!#''?8"*00*%%'+/2344200/)&(181%!"$%'-1/,(%%).021-(%%$"#%&(+,*'&)+*))*+//)).1-((+,++)'%$"  "'./-.2687412781+)('&#$%$%((%"!$&$"%)+'%$$(*&"%)++(&(% !#&*+-,)MFA#+34/($A<=@ !$&%ED%''*-/-)%$%#! <;=<;AEB@>@   !=8@&GE(+'$" <<=9;$&EA@=<<9510475792.39=BEA@A:6:?EE=:6-)6J%CA"''&&%B><;<=:654/)#%+3??96641-.5;6.2;:312210-*),/+()-/,%"$&'&$$%#?"*/,)*))+&")0*$"CBE)*$F%D98E''+495-,./,))+27:<;9669;<>BED@>=;86520010.,,/4874210012100/..//-,,,+*,.+NM(LJ(,/,(%'*)KCB&-/-+&##$%&*,)&)-*'(&$*12.'@:?D$$A:#-1/*'*+('+,**,0123540-++,.,)&%&((%# %/63,(('')*)(''()())&#"$(,*! 9;;710  ""! 0010.--.0--,.0/. /-*((*ɀဂ 뀂ۀ~~}}}~~~~ȀƀʁɁ #ſʀĻĽǻŀ΀ȿ¸ľûøý˹þрû̷oſͰƸ̈́˄ǀŻȸʂ׏ٚù±ú͸ƶʻڀõ؜ԽĀ߅ķµĹ¿׾¼µ󂌌䀌΀ýڿ̭􅎏ĸŹż򄎛逋ιĽ酛ٳƿþǸºڀ9,󃑚A`3666543fcaabegfdcba^^`dg45hgi6874g32b``__acddb``a`^^^`bccefeca``acdefecbccdh4eb``__`abeeca`_\[\]__]\]^]XSPQUXWVZ\YSSZbeinomia]\\WSUWVUVVVTTUUSRSSQPOOPQQPPQQPORUYZ[\\\_^\_a\TOQ[fmnib\XVU VXYWVVWVUTTUVWXWRMMQTSQRQPOOPOMLLMOPPOPSW\\[]^^^14543db_[YZ]\Z[ZVPLLMLIJKKNPRTXXSPRUWXYZ[[[Z\^afihhjkgc`^[[[Z[`234320010^[XVWWWUSQQTWXUTTUUUXYVPLKLMNNNPQPONLKMNNOPQQPONNM.LMJHFDA<::>ACFIMPQPNLIN_9?>6YQPRRQQRSTSRQUWUTSQlPOPOMKJIIJKLNQSTUTOLJMPQRQRTVXY[[[YVTSRRSTUTSRQONOQRSSQMHEEHLPRURKFEFHJKIFCBAA@?>>==?BCBBCDEFIJIIIJKLKKKJHGEDEFGHIIHHIIJKLORROFAMQHCEJNOPU\]XSQRUY]^_``_`gp97jigda___ba^XTSTSQOORVTPNNOPRQNMOQNMMMNPOMMMLKKJIMSWY[XPMNOOPQSVVVZ[WTTUVUSQQPPPQQRUVTQQQSVXWXYZZZWQNLKJLMMNPPPNLJJKJIJLMLKLMNOMLMPSTRQQRTX\YUTUTSSTTTUUUTSTVYZYXXWRJHLMMMLPX[[]_]ZWVTRUZ]`b_[\]\XZad^XWUQQTVWVVWJXXVW\24310/ZWVUSRSSTTRRSWZ\][WSTTUVVTSRQOKJNRRQTXZZXXXWWXZ[\ZY[\\[XX[020.-.bZXY/2687631//0220/...YWWWVUV[___^\\\ZYWX[^__a1a`01221^YUUY`221001110..03652/...-XXWVUWZZ,-.02331001?0/./01110025665455434431//134420/0111/--132/UT-1443111234332245678999:;840+'GA<;>@@@?>=?CHJHHLNONNNKKLHEGIJIHFCBCFHIKLLNOOORUUSPMMOOMLMPQPONOPONPOMJHIMPQQQRPNNOQQPNLKJIIGJUZ[\ZVSLJJKJJJIIILLMNNLKJJIGFC><===>?>=<==<=@DGGB<@HLLNRSPMIFDEFDDEHJLIECA=81\6BC@DLOLHDDHIGFFGHIJGIOSRQPRTPHHPSRRPNLMONNOPOLKLLFCEHIIJMNNNKLLLKIIJLQTSTVWVQMJHIJMSURPONOOJHGFFFECBCDB<658:@JOPSRPPMF@<;<=CMRKGJHC>97:<=ADB>8k66d[RP\:?@CCAC@979:;;99;=>>?ACGIIHHIJKMMNNOPRUVWXXZ]`fmjdbdiic^]\\_befcbb^ZXYZYWYZXYZ[XUVWWXXYZ]_aa`^]^]^eosokhfffek;;romgb^`jmdWSY^[TOXb1026:;;<=<;97nib`abddbchneYbs:8873ZOQZ\UQWXVX\`d342begbZVVVTTUSPPSTQRW[]]YUUWXWVRONQVXVRQOJ>6=MSQNLKJFDCAABBBDJNG@BGHFFHIGFDB<7=CDBBDGLU]ZPE4^@OOKIJKOUX[_cfjlg`YTQNEBFLSY[Z[_gqsj``inkmv{zrhfheb`__bfea_abcecbgmrvzwqmlklmmlhed#a]Z[]\\]][WSOLKMOPRSRPNNPRTUSOLMNNNMpNOPOI@::?@ADGEBCDGLKGEEGNYfqvx~xg`]][]acffc``cfhgc]VROMNRYahjkkkmmliiie_ZZ^ficZVVYYRLLMIEk627,.?<6eKVTQPNG>=EMQSUTQQSWZ\[VQMKMPSUVVWWURLHHJKKIIKLMLJGEEHNRTVVTRQQRRQMIGDDFFHJKLKJKLJHE@=AGLT^`[UWhxwmf]RJIP[ed[QLLOOS\baWIABB@>vrw?AA|u}HSfqkdhAklorvsqzrdbnvrc[dgcftvj^TNLNYlrja[VQRZhvHKItohdglmoq$pqswzzyxvod\VUXYX[bmty|Cwsnkpx?=uuxvtrqrrlggp~vkjmw}|vssrmmnruphintxse^][TPWaa[YY[^a``efb^]]\\^a`\VOHDB>v>EHHOY]]_\YUOHEHB4I/:,,+P149>IW^_^YK?<=@BCEGFDCEIIGT8GUdormgda[VX`f^QJHKQUXY\^[X[YRPRUXXUQLORROMUb`WUROTYZ[XTUUSTWYZ\^ab`]ZWUSRTVVUQLLPRPMLMPQPMKIHHE?=DLQRNJIHIKMOPNKIGGLRUWURT[bhe]ZXUSV\YNFFOWO@CXiaQJIJPX\__^_b]SQSY`im]ICFIKOTYXQKNUZ\__SECHEA|yDRZ_a\VSRPMPX\]]\[_ac]OINSW_ca[VOIEDELRST[fnnid_clg[Y[ZSKEFJLNOMJKMJHILMPRPLMPTWYXYYWXZ[TIDEHMQNGGHHFHV`_Nxfkv@HHCDFEHLORWWW[`^VME@ADDCA}zzBHF}}HFAD@}A}qvDKJJLQTQIBzx{DIFB~xsrniedea[\lyi\\V]aegk|~nYRaowIPOJIOOFxomkliddgdYSTWY[]_cegryqc\[^dd_YV^gdZVVTQPOQNPWZXRLIHFEEDYAtqAJV_^SIGHGEB}zvruut{xjsHOT[ZNFJ\on^QMT`svokjknquz|zxyvrrttojd\XX\_cecaacc_^`b_[Z[[YUSPMLMOQK|hoFU^^VLEDGE@}|~@BGMRSJzzsilszCB=@GHILMHB{kRM[ediMLFDINNKKNVZVUY]^_^YX\^Z[^][\[WPKOYTGBMah^TMEGQ\_YVUSSRNOPLKOSPLHDA<;&pedgch=DEDFKH=8>CB@>==>?;^/>N-0112567879;:899:>B@<;:7797679;;<;8655789:=>?9>>==>?ACDCCCBA>=>AB?:6iijkk5565h6::755444d`]YTT^f6;>ADFFCA4@??@@?:5dceffef3479::96554569;;:98766775322358:;:9876 765554333222456766578765665553c^[,)/.-,-./.-,++*)+-0101.,**)*+,.-,+_***,../121/.-,.00011//0013/-,,,.//122100/,*+,-,+*+,*'$"$&''&(*(%%*02588751...*&''&%&&&%%''%$$$#$###%(+++,++,--..*%#$)0563/+)('()*)))**('((('()*+*&"!$%$#$%&&%$##%&%#$')++*+++*,,+)))+*)('%"!#%'))%#%'((())(((*,.13335641.,***)*+*(&&&''&&$#%'&$#$%%&')(%" !"#$$%&&%$"""#$%&%%$$$##""#"!  !"#%%$#"!#.! (##$$$%&'''&%(*)('&&'&%$%$#"!!!""#%&&((&#! "##"#%&()*+*)'&%$#$$%%%$##$%''(('$! !#%&('" ! ""! !"#$#"!!  !"@!!!  ! !! !$%#""#%')*+--,,041110/-,,--+)&&'&%$#%''%$u&&$#%&%$%%&'%##$$##! !$&'(($!!""##%&'(*,)'')*)&%%$##$$%''$#""#'*+++,,,*&#"""$%$$%&&%#""#"!!"#""##$$##$%()'&&&')+)'&&%$%&'/())(((%!!"##"%*++,,*'&&$"$'*./.,,-,*+/0,)('%%&()))(),'&'&%3$$%')**)'%&&%&'&%%%#!!#%%$%(*))((''()))(()**)(')>&&('&&'&%%(*)(('(((''(+---..,)&$%'*&&&%%')(($#V   !$"! 2 #%&'('%"  ! &##!!!!"! !"  #"#"! ! !#""!!"  "$$%'()(&''&%"!!!#&&')**(%#"#%(,.,+*))(&$$##%$#"!! !"!!'"++'%$'9 !""$%&%%$%&''(''')++,../027=;634662/--/01121221/-...,-H.0/,,-,---./23321231038:853344259762.*+22,%!#&&""(53/../1592).7$ $$ ""!!#&(**++((+--.-+**--++/121.+)(&&%"! "$$"!"  "!! !! "%!"#"#$#" !&('"/"**'%%'*/D12468:;83/+)& !%+13336;@?7005857=AA=889742003653344455455532478:<<87887555665542//02211/,)&%##&()*)('%%&(*+*(&'()***)'())($ "$#"#$%('$""#(.5;==BII?7310/135641//25751-+('&'*/4777678:878862/-06W95/-.01,&'(%"6 !4(.+)('$#')((*+,--+*,/132.*((*,-../000-*''()('&'())(&%%&*,-./.,+(%#"###"+! !! "%(,11-*+6@A>:3+%$(1882+()**,1550'#ZC@C$%$B:@'.8>9469:=@CLUQC?BFIF<219?>4.4756E%'&F?96203777889:99:<=< 93-+,./..17<@BD$G@=:89= ;:;<<<;:395229BHF=648>B@>=>=;::=@=88;>A?6133/+0783101344379645763/+&$$"A#()(*133320-)# % " ""+389510/,().1-'$#$)-//130-.-*)*-//,(%&)*'%*32.-*(,/00.*++*+-./00110.,*)()+--,)%%()(%$%')('%%%&$  %))'$##$&&''&%$#"%)+,+()-153-+*)'*//)$$*1-!!0:4)$##',/00/01.(&(,28;0"!#%(+.-($%*.022+#"&%"@>:41495-+-,(#"$%&%#$%%$%'()*'$#$&)**+,,,-.+%!!#&*)$I'()'D@%.44(9/3: %%##$$%')*-..131,&" !! <:: $#=EIB8?),.32*$&2>?5,(,3?FA=;;<>?AEGEDC@==?@>;84236:<=<:9;<86787534420./00.+)*-0/M==&0772*%%)*&FBC$&')-.)B>EA76;@$$!"%%%')'$D;,(0779G++'%&**(&'+.,*,. ++./,,/0//.,($(.*!'481+'"#*01,*)/'()&&)+)&$" :33412"! (  11233410-+(#!', *+.///. 0,*΀ր퀂ڀ߀ +~~~~ +̀~~~ɀŀ́ˁ Dل.žǿ3ӄҀźǻþڀƀÿ,.󈏎UķǀǾǿ¾ǿɾ¾ǶȾԶĀꀈļɺźȼŽĨ€˿ʺȾᒬȹȬ¾θрǽɀĽ¾ͯ剗ͺ˶ɿ ŻúɺǸ²Ľþ슐¼ɾ¿µļRރĻꋡԃü䀏2򂌗B```b2466654dbabtabcdeecddeef44eefedbabbcde22a`bdcba`_`bbaabbbabeff455gfddeh566hfdca_^^adc`ZVWYZ]^\[[[ZYXXXYYXXYYXWVWZ]acca_][ZXVVXWVUTTUUUVYZWRMKMPPQSTTRQRTVXZ\^^]ZYXWVVVTRQT\deb^]][XUSQPQSVXZ[\\[[\][YWVWVTRRRTUUTSSSQQRSUVVVWXWVSSTTTVY]b46775433d`^^__^[YWWYZYVU*VUQOONNMMNQSW^dggeb_`bdffdaaa_[YXXXWURTX]_0 +1`\[\[YURSVTTTUUSQPOLIILMNOONNOPPOPQ +RQOOPPPKHFE2FHIKMPQPOLKKMQVYYTPPSUUTRQPOOPRRRSTSRQQRUWTPOPPPQRSSRRSRONORTSTTUUTTVVUTSRQQSWZ[XSOLKJKKJJIHHJKJJKKJIIEBDKPQQPLGC@>=>@@@ABBCCDEHJJKLLJIHGFEDEZFGHHHGGGJMPRNHLY]ZRKHGFGMSVXWUUY]__`dip;AGIG@:997g`]\\ZWSQSTSRQPPOMLLKJJLMMLMLJKOSVURNNOPST@VVURNJJLKJMOQQPPQSRSRPPOONMMNMIGGHKMPSTTRSTVUPPPMJJKMOOMLNNLKIHIH JKLKLMNPQRTWXVTSSRSUWY[XUUVUSQQQRnSTUTVWVURLHJNPSUVVW\cfb\Z[Z^3642b]WTTUVWYYVRQPORXZZWUVXWX_44100/.YWUSOMSXXWVWXZ^/^[WUUUVXXURQQRQPPRSSUXWVVVWYZY!Z[]^]\\/120.--../.[YY/5851/..-.010/.YWUTVVWWWX]01/ZXYYWW[^a1`^\YVQMO\4752100//--/4520.--.0I340.032111/..0355531026766754330.-.02477423221001100/YV-0121100/0124445676 +5566689:::;:950*KE@==>>==?AAACDB?=8/-5?CDEHJIFDFHIHFCBADGJKLMNOPQRTSSRPOONMMMNOONNNLKKMQROKIIJLNMLLLMNNNOONLJGFEFJMRZZVRNJJKKKMMLJEEGLOPQOOqQOMJHFDCCDDB@>=;::=@FJIFINPQRRQQPONLKLJGHQTQONLJGB>;;<;:DRVSNGCGQQKJJKKLLLNPPNNNPRPNRSRUUQPPPMMQRTUSPTWTPOLMNNMMLJHDA=9;CNQRUWXVUSPRRPNKKKLIDBABCCCDDDC;2\^/038CSfj`TLE@:cSZAXZSQNKFA<;;:>DGC;9=:cYSGC`??<;:<<=:9:>@@ACEFHIHIJJKMPTUUTSSSTUTUW[agc]Z[_`^\XVX\^M`a___^[YXYYZ\[[]]^_\[ZYZZYXX[\ZXXY\^_cjpplhecccdl:urplf_\djhf`YY^]VPRVX]c7;;:98mhd_\ZWWXY`cYVam:<;83a^]ZTW`eb^[YWW`i66787id`\XWWVTTWXVUX\]]]^ZOILPRQPRUQIGLMGAAJRXZZZXSLGEGJHB;:BFFDDEGIKLJHHHC:9@KOK=/S,;ILK@~[I[?OTSOR^dcejlkoqojbZURV_hmnlnnihjke\UW]]]bioronoppopmc]ahkiffda^^`bdeinpprurlgdccdeggcZQORUVUQLIIKJCAKRMFB><=?DHHFEEB?<=?ABCDEGIJKLNNJD@=::=CHKMOSVVY]\YZ^cillmqpia]]^\Z^flnljjhc_]\[WQLKMPTX\\YWWY[[]_`_\ZXWUUSQOPPOPSTTSPH?4OF[APWXYXTPMKHGJRZ^\UNKNSWZ[YXWVVWVPIFIOSQNNPPMIGFGIIJKLMLJHHIKORSPMMNONLIHIJIIJKGCBDFGGHJKKH@;=DO^kniadqula\[ZYWWWSLGGIKIIMQQLGA=:poleadmt{AEHN_qlXOU\_`adiife[eehjhdbhv~q`Y[]_frz}~zqh_VQS[hrvtngcafkoppqoia[[dp{ADDDFGD}xv{tkd``aaemtzBCB}qgfnx?@BBA@@ysnpv}|vrty}}{rkmsxz{xtrv~rnwwke_WOT`jnlifdfjkkmnkd]YXW[`aaabdaYPQUW[cjkjjf_XQHD@:6:@>865.,08@KUTPRSPD529>ABCCCBBCBADY;DKVcknlgdb`ahl_SPOPU[]_bcemvsbVRSTUUSRTVVW^ioibdc``]XUSSTOJLPRRTVWY[ZWVVUSOMNNMKKNOMLKKKLKGB=w=@ADJMSXSIDCEHKNPKGFFGJMPRPLP[ee_ZYVRRROIADMVPEEKNNKIOVWSPSY]ac]SMNRUWUMFDEKRX^hh_XUUWYYTICKURJILU\ZVY^[USTSUZ\^aa]YVTRLEJWcfhhaZSKECFLOLJMU\^eotrj\QKHFDBCFJMNMKIJKIHLQSV[]XSRU\`_]ZUUXWRI?BHE}FNTWVUTPNPRSQMGA>?BDFGGEDECBCCCHGEGJLMQSOH|yyEE|{td[XTU]ipjeeecbbhr|Omgc^X_wGKIFKWYMmea_`elrohge`YXZUMKTqnXU_e`]`dif\TPQVVTVSMLR\_\WRKGEEDBBAxjdsI\iaRF?@EGEDB|uxwpqxAB@EKLRWTLGNZ[UVbkmpsnijlmmov}zwtqrtvvutojfc`_cgfb`aceedb_[Y\`cd_WNKKKJHFDECxkvHU_ege]SMGEHJD=xBJNOOLGAvxAEILIGJMKIIG}rcZTOIQnHMGAB@BFfJPROPU[`aca]^^^_]ZYZZ[ZRMV^[TMJUa^VQOV[URU[]_\TPPMIJPSOJG>ffsuj^^i;ACDGIGC;lmh4BPOF>77ET/21,*-.0585248:;<=>$<9884369;<;:98779;<<=>>???>===>?>?ABCJA><:9:=>=96kijln78765565eb`_c4565g]TWZ^5;?BEEDCA@?>;9:=?=84dcfihe2358::87768:;:98765 4223578898!77897677753222344432333467656655542c+**+.-,,--,,-./01101///.-,+,-.//-,,-,+,,+,-(..-,-/001100132221/...022/*()**++*)('((''')(('&'*-/010/.-,*'&%& %&''%#! "$$$%0$$%')+,-,+)((''(('%$&+01/,,,+*('&%%&'(*,--,,,+*)(&$#$%'&&'()))(()))('&'&%%'(*3-,,---+(%$$%$$##$%$#$$#""#%&),022/-,,-/010//0.,*)'%%'())''(('&%&(&%&&&%$$%%&%%#""##$$%$$$%%$$%&$$#$$%"! !""#$$$%''&%#"""$')(%""%''&%$&&'((('&&&()'%#$$$%%&&''&%&&%$##$$##$%*&%$##$')*)&$"!!"##""!!#$#"##""" $(('&# + "##$%%$$#"!  -!!"#""! !"#$#!(+)$ !#$%%%&)+---/36#%# 2.,,+*(&%&''&%$###""#$%##%(**'$$%&(*)('('&%" !! "$%%$#%&&&%$(#!!!  "#%%'()(%%&$""#%&&$$%&%#"!"! !!###$%&'(()++*'&'''()**'#""!! !"$%&''())(&!"%&')Y,02/*('&(.,(''(()*)'%%%$'*,,)'()((,'&&%#"%()(('()++)'&&''((&$$$%%$$&&%'((''&&( ''(*+++**'&&'&%%%'&%&''')+-,*)'&$"#) %$6)#$"  + !#%%$#! & # "$!!!!"! "#"$$"  !"#" !$#"" !$$$%%""##""$#%&'&$#"%'')*)(&&%&$! "#""#"" () ),'"%$'&!+'%& !#$$$%%%&''')+,+,,,**,.2431//111/,+-01011/.--.//..//120/5.-,./---/111257876321117:9852.,02/-*%%('#!"#%'*R420.-+*+,+./*(.5'%%# "'('%$#! %*---,,---++-.--/1100.)! ! !" !&* )$  "$$$#!  $-"+/.*,3767;;:;;:72,*)-4;?@>?=98::60+,01048;=<;;;::;93/17;:87642123335899:<;9522233564.)(+--,)'&&('"#&$!  !"%''$$$"  !""#S$$%&%%&&#!$&')+-,-//./247878984/-//-,/478766631//.,)&&(*,/21.,-022234310//..-+'**+,,,+& ("/$.100/,*)(&$'-131,(')+-010/".*&%'+-,**++(&%%&''(()))('''(+,,*('&%%&''&&&$ $*2:<735>B;410/.-..+'$$'('&),+'#!==<7459>B#&'*4?=/(+03679<;8656897315?F@502338@EFEB=82,(*/7>A>930/26:;;<;81--29?"$$###!ABCEFB=;>BA<84344459<>B#$#B:438>!!  ! =:88:79>BCB@<8:>@BBA?>AFKH>:?FLKC<:72-/7==;75469:;<=<9542135677886.1,,/0149:9973/*%!%% %+377520///470(''(,012334:A?4,*"))+-,,19=9455331-+)*,*&&)***++,-,+* +(&&&%$$&'&%&%#!; !%'*.+%! !$&(*'$##$%')*(%&.43/,+*('((% @#*0+##')'%#&+,)&(*,/1-'$$')*)%  #'+0770,++,./,% &.+&$%+0/,/10,)*+,01232/-,,+&!K$,35771,(# !&(%#&,136<>=8.'#! "$%$#"$%$$&)+-00,'&(,//-+)),,("!(*%"%(,)*,03*8<"&#=?$(,-+++(')**)&#  ""###""#!>BFB@A!!!B#''&'))*,-*%@<<97640/0-)(-ARL8*(040/13760+)*-,,-+'&)031.+(&%%$"#$A84=(7A;0'"#'('&%EADB<=B$%#'*),.+&#)23//6<<>@=:;<==>BHKGB@??ABBA@>;8789;==;88:;:::842357740+()*++***(E9>(29<<:5.*'$')& =")-./.+&CB$&(+)&'*)()'JGA830-*-?*-(G"#"#%'+,)(*.0110..//10-,,,-,'%,20+'&-54.*).1,)+/020+))(%&)*(%"03==6.,1!##!440"  & 211240/-+- +0+'((),,.00. +-ց΀ဃƀށ̀́́ @؅րP¼ʄɀýû灕ǿĿـùҿžƽºóĪꆢɹʀøꁆ肋»ÿþûú휴̽퍏ǿ̀Ƽƿɿ̸ö´úϸȼĻǺ˾ĺ͹¼ôԽҳ˄֟㇜°˸ŷǸƯ􀊌ؽδͧ󀀀ȾźȀƫŻżɶ̴¸DZڽ򈍆焖H43E2235676hefghgdddfghihghhggfef443eeecbbddeg44gdccdee22ec``be43d2ffdccegfda`hbdfd]WSSTWYZYWWY[ZWUTTTRTWWVUVY\^\ZZ[ZYWUSTWZZXVVWWVUUVWZ\]ZSLHHHJOWZWTTVXWWXWVTSTTTVWY[YVTTWYXY\]ZWVUTSRTVUTSSUXYYXWVVXZ\\ZXVTSSV[]XTRSTXZYWYZVSTUVVTSWYWY^bc`_``^ZWWY[[YXVUTRQSWZYVTVZ[\]_`_^_`_^_`_\YXXWVUVWXVTRRSUWY\_`_[XWUSONQUWXVTgSTWY[^^]\YWWVTW[[VQONKKMNMMLLKKMORSRQPONMKKIGILMNNMMNNNMKJKMOSWWTQPQSTSQPPQRPONNNONMLMNONLKKLLKIIJKLNOPQ%RRRQQRQOPRSUTRQRQPOOPRTUSNJJMNMLMKGEHK LMLJFCCCDCDEILLJIGECCDDCBCDDCCDGIJJIIJJIHGFDCDEDDDEDHCCDFILNPQS\keSKLHBBGPXZXXYY]cecbfq>BEGFDEFEB?<9pmjgc_\ZXUQNNNMNMIFFKOPNLK&OT[]ZUTTVZ\ZXVTSPMJHIJKLORSRQPOOQSROICA)EHINSXWW,.[YYXXRMIIJKMPRQPPPONMKIHGGHJMOOLGORQQU[^^[WUTSSSUX\^\Z[-Z,YXURPONOPQPPNLLNSZ^^\[ZXX[a33_[[\YXXY]]ZVSSSTUTRQQRRRUXXYZ\`221/00.-._`_\YZa21_[ZZYWWUTVYZWSQQRTSRUXZXWUUVWVVWXXXZ/10\[\\ZY[010/-YXYZZ[[YX.10.--..-.00.,-.ZWVUSRTVWWX[010\YZYXY\]\///^010^]\]ZVU1:?<620//.-./1232Z000/.-WV,/0/0220,T,///010.-.14554.O(068866531000126:<94210012220/..,,.1210//000/03432245556 +899877789:;O:60)F?=>@A@?@BA=:9;BFHLLIFFIECHKLNOPONMLJKNPRQQPGHSSNNOMLJGINNKKPVVXTOPPMMPNKLNMMKF:/06>CGJMRUVUUX[[Z[XRNKIJE95AEC@@ABDC@8]SG5@9MW0\SMJJJ@0T4>EGHJKIGFFGDAAEHE@=:6g[H9=X7546876:ACA@?>=<<>ACE'FEDFGHILPRPPRSTUTQQUYYWVWWXZ[ZXUTWYZ[[ZYXVUY[Z[][YZVQSY[[[YVVVWWYVVZ]`eikmmha^_airspnmke]`hiije]\bb_]ZVW^f79852ccg6jeca_^ZWWVXZUMJTd78742aab\XZ^d3`YSICIR[48997jfb]\^]WUY\ZY\__]][VPNNPRSTUTRRW\][WX]a_ZWVUVUQMKLNNJIMNNMOPPOONKGED>76=DHFB>>A@<>GI6J^GXbfglqkaclqtzADDyrtzDGGD~tt}wmjkigdbdjquspnortridfjmnlhdehny{rnmkihfa\Y\bjmnmpsrkb\Y[]\RHBi<#-I15420]XSMFDGNT]kw<:tst{>CHIGEAEOZ_^^ekldUP]nturibb`[X\ivueZVWZ\_djlmjd]YZ\akqleaaacgijg`]`a^XW\aehedn|BBs_[ekjfc_XRPNOW`kt|@?xusi]f@HGA=@BA|zAC@xtw|}sjkruuspmjlrtpoqqlkmruvz~tja]]_en}}utuqib^crugXTXclnmijtzoknrstumd]ZXQICCFFGHFC=2I8D5J^od==:J7;(;7EB?@CBAA@ADU9HSX[^a`_bccegcULKMRY^bgknqrtpaTQSUVUTQQTTWbnwwy}wlcYSRPKE@@LXYSOONNPQRSTSOLKLLJILPOJEEDA>=?FKJHIMQRNHDCCBABGIGGHGGKRVTSTX_`]ZVPLLOPLFAFS]VGDFJNQRTWWSNOXbheZQOQSTSQMGEIQVXY[[YXWWXYWRMMTXTPPPLJLPZdcacedcgieaWONMIILKJS__Z[[YTMHGJNNLMOPRVZ`jmdTJHFEEEDFJMMKIGFDCDHPRSX]`cc__^WMHJQZ__YFlp?CEDDKQTTUX\agfVG@>>@ABELT[]SHMRRSRT]ddb`_bglnoruy{xrjgfgimonlgc`abcca`afhgeb_]\^grqbSKIMQQLGLZd^NDFIHFKSY[WOMRXZUQRTTSRQNIB{HOKB~zxvssmXC;>KfC~~|ww}>=@HPRLGM^ebcaXQOTX[^ahpqgTHGIJNTUSSTUTROKKLPUSPOK@?FHFFD:YLMLP^imt=;:::78;>?>>==<<>?`@A@><<<;<=>@ABA@>=>?=:7579;<<:7kijm899778997iea_`deeeffddfg35;ABCFGEB@=:76:>><953df3444577546777679::977899877666545766776667 654445567i`\[ZYWX]b2577655445554 10012320//..-. ///./.,,-.00.-+++--010./010J../010,'%$%'))(''())(&%&%$&''&&')++*)**+*)&%%&(('&&&'&&%%%'*+)&"! !$()'%&'I('&%%&&'(*,,)&$$&('(*+*)**)'&&&%&()(&%$&()*))(()*+,+*('&')-.+('&'*+*)++)&%>$$&'&'*,,++-.,)&&'''%$$%%$%&),+)()*+*+,,,++,++,,,*)(('&&')*)(&%,&'((&%%%$""$')+*('()*+-...,+*)(*--)&$#""#$##"K#%&'&&&%%##"! !#$%%$%&%$##"#%&)+*'%$$%&%%$$%&%%%$%%$##$%&%$#$$#"!!!"##$$$%%$+##$#!!""#$#"""!!!"#$&&" !#$$#$# !"!"#$%%# : "##"!  !#$##$$$#$%$##"! !"! !!   !#%,73'"! %*+)(((*-..-/5!"#"!!"" 5320/-+))(&$$$%%%# #&'&$##""$',.,)''),--,)'&$#! !"$&'&%%$$&'&#!"""&'()*'$! &!"$'('&&%%$$$""!!!#%&%$$$%%'(('*.0/,*(' +()+*'$"!"#$%%#""$',./.--,+,/,))(%%%&(('&%&'(('''&&%%&&&(*))*+,*++*()-+)(((''&&'))'$##$&%$%'(('&&''&&&'''())**)'(&'''&%&%%$$$%&''%&&&')))** (&&%$"  + ) "!  !  & #  #! ""#" !! "$" !"!!!!#""#',,+./+'$#$""%" !"""! ,%! $''#! "+%( ##$##$$##$$%'))(()+++*)),/.-.020-+,.00//.--...---./..0../,(+/0//.-,,,-/.-/023347861//05998764/()..//,$#()''%#$(,--./,++-.-,,-/.)$"'1%%'&$$%(&#!!&.0/./10-,/2/./10//,(%# "#$$$%'))'$',//,*('((&#""#" """#%&&&%$"*%1677:>:338<=?"%$E?<=BG&((&G@@EGAg:77542259=>=;:;<><623689864458?FFA;8875431.-/27998:==840./10*# 3&(%!"%)2:988 ! "$%%%&'(&%#"&,///0478742333237;830025765430---,*)(&%&&&''&%##'-3531/-++-/13[2333/-,.-+('(('"!&,./03783/,(&)--'$%(-36873112/+*+,,*('''(()))'&%$$&)**('(*+*'%#!!)27=;62331./6?@6.,./1259<=;71/0139=:5332467751/120,*-134328A##CDFC;/-376421-+++*,17;>! <:93,1 &&! ! << " ;9<@A;56;>>=<978<=<;:;>@@BJOLGA<989:;AKSRIB@A?9403<@8/,/7=><99?GID=;<>@BB=830/+% (2, ##*.00210011241)$#$(-1479:<=><2*(*+,,*((**,4<@?@C@92,)))'#&/0,)'&&''(())'%$%%#"$''%#""!!! "&$""$')'$"!!"!"%%#$$$#'+-,++-00-+)'%&()(# $-50%"#%())+-,)&%*032,&$&((('$! #(+,---,,,-..,)%%+/,())'&&'-55458758973-'&&##&&%+21-,a,+($!!#''%&')+-/49;4)#!!  #$$#"!!! #)**-/021//0,%!"'-00, .0 "!!%)++,.1499.# <@@@!%*+*)'%$%&'%8<"$%$#"!CDB>=BHIFB@"$EDD@?BH'),-*"8;DCA#(*&D$+':11/.28AFA5--39=@@>CP**,1.;(2<;7:A"!!$*/.'D?;8446;<<;94,*063.)"!+;A;337745:=5('/0-++11*,7930.*'''(&#@B@?ADFFDA<:9:<>>>=<:889;<;99;==;975448?@8/)')-0.*O+4;7,%&)*)+0330,*,153..0221/-*%EF',,&HHHGGGFC@BB6("!(:O*LHDBBF$##&*+'#'04221-)),../15993)#$%&(./-,--,+($%&)-,)(&#%#"!)#&&'.4683!4 "6-)/!!  6322430.,,-.-,-,-+-,1-++*(&'*-πЁՀŀπ݀~~ˀŁ ބUτBׅIþ¿¾؀Ű#ºļȻǾ·𲊞؇ӹʀ¾ˀ˹ųļýſÿ¾ŀʷǿͳ¼Ĺ¿㭮އÃҵ¿ވƻ±ǶĽ󂒚·ҽϵ޵ʹƳǹ̷ûǴĽĹ©߿Ҏ. 44565433443fmeed3676id`bddbbcdcdeeefg443fee3455gddfeddcba`a`^\\^^\]`a`__ach4gedcefec`^]^^]]bda[WSONSVVVUWXVTSTSSTUUUTRRVYZ[\[YVUWZ[YWUTRRS4RRSSQMJIKNQRRQRRQQPPPONOPPQQTUXYYUUW[[\\[ZYXWTSSSTTRQERSTTUWWVUUWZ]^^_`__]ZWVTSRRSUVVY\\[WW_45d^ZYYZZYZ[[YWTRRSRONNOPQRSTWZ\H[ZZ[\[YWVTTRNJNRTTTUVUVVUTRQRUVUUSTSPNNORTWYWSOOQRTX]`dfda^[XWXZZYWUSQONLNOOPOOOQPPRRSSSRPONIOQRRRQQPPQQRRPOMLMNPQRPNNONLLLKIGGHIJKJJLMMNOOQSSSTSRSRPNMNNMMNORSRRRQQRRQ3PONNMMMLLMNMMNOOMKIGFDCDGJLMOPOMKHFDCCCDEEDDEGGFGGFGFDCCBBCDEEFGGEDC.DEEDDEEGJLNMKJJLKEBGOUWTPORW\`ei689tu{?|>>>xv;DEFGN+,VVUTUWVOJHHIKMNMNND32DQOMLLMOQRPONNPQ PPSWZ[[YVUVZ^]ZXXY[YXWSMLMMMPRSRPOQSUXZg]ae2d2b_^//.ZVVYZZ[ZVSTUSPPQPOPRVY[]]]_c23321^ZXZ]_`_]\]000110]ZXWWVTTUVUQNOPQRSSUWXWSQTVVUTTVY\/110\Z[\6]\\[ZYWVWXYYYX[/.ZZ.///123310.-,--WUTVXYZ-.//\ZYYZ\\[[/012220..[Z1787543220///012@0//0.YURS,..-//.-.000///.--./0342-T*.36766530//.14568741//022100/121/./0110123322466656776789::;.:::973-'FBA@@@>;960& %6GOKHGFEFFFECA@@ACEHJLNPR#QQQPMKJLLNPQRSRSTSQPONMLKKJHILMNNNLKJJIGEDEHJKLMKIHIKKJIHHIKLMNNNMLMMKIHEFLMIEB>:52149=ADGIIJKLMOPONNOPOMLGEKRSSRPLHEB@><=BHJIGFFEEIKJKLNNMLKHDFILOOKFCHPSQMJHFCBGIGCDJOTVTSOIJTWOKLLLOPLB70Z1;BFHIKLLLMQQJJMKDAFMKCBHGDBA@BDED?cC.2L3;BHD8^5M]VHBFGEBABDEDDFGJJGEDB?:65776km8:;<>A?98=ABA@@?=<;>ABBBCEGEA=:;CHIKMOPOMKJJPVWVUVVWZ\XTTX[\[YXWVVWXWVVTTUVX[ZZ]_\Z[\ZWUUTRSVXVUY^bcdejqpg_]cn:tomnnjc_bdcedXP^54`][Z\b48:610`^_b^XZ`a`\WTZa\USU[`cd`][Z]_[WW[bd_YSMGFJU_e55c\[[Z[[YVVZ\YXZ[\]\[]]ZVUW[`bbcdggf`_dfdcdc_]^`]SMPUTTZ_`^YXXYZ]`a_WLE@>BIMNJEEE@9;C>Z]DTZ]`dijjr|}?@ADFHNTYZVNE|sry|vxB~zy}|xyzwuqmpxyvwvqopquyqf_\\_ceffb^[[]^___acb[PG@<?BA=:9;?EIIGD@<:::;>EOTUUTRPOOQTX^ba]ZXWWYYWTTX\_a2dghihd``florspjgd`^^^\XUSQLIIIGEB@??ACBCBABDFCBGQXZ]bgknqnjd_^_^\^_]WPJHILNLHD>oi:DO[beglppiaYTTVWROQUVUWXUTTTSQMKKKJKNONMNPQSUVTKB><<<>?ADHKLMNONLJIGDCCCDFJTct{tg\UTUY\XUTSQPNMCMNORTWYZYVSPMPZb]OAy?BEKKJOZbb]\]^`enytlf^VTTXbfc_\[\^bc_ZZ]^]^df`ZXX[\]`dfgkpokjkoqlfehkjgju~iWRVY[evuicb^VWgy@@A@}sr~FHE~}zz}yxtonmhefjlkkihijklic\Z[^dkr~}{}~yw~|wqjedjvf{pb\[`cbadhimrtxvplkigfaYSNIFLX]\WPI=U87L0356671C%%?D87BL.:?AABCEECACV:DJPXbicWRSVZ^[QKLOQU\_\YY[`jqi[USQOPSU[gkhjpqj_UNLJKQPNRVUOLNPQRSYa_WQLHILONNOPJB?BEHKJFEGIKLKJLNNOOLF@>up>GJOSPJGJQVZ[]bec^\WPMNRTRNJLRRDs?JNPSWY[ZXWX]bc_ZWVSQRSVVOIKPSTQOPSUUTW[[WQOOMJHGDEGHKU_c^TMNRUZ_^ZTPTZWPJGFHIGKUY\ZUPLIKJGGIHKRY^b_WPLIEHMMKJHHLICDINRV\eje\SNMLHGKVbgdXH?><=?>==?@@AAA?>>?ABBA@@?=;:;=>?==>AB@??><;:986668:<;8kikn897667:;96gecdedcc`_`bce48>AAEIJHGEA><99;<=;7311345679:645766567766786336:==;:::85455+433468:::8534565679;=<8idbca]XSRV[`35567754..000/.1/-/00.../.--///0.-..-,+*)+,+,-./11/../111/-,/1.*'%"!$''&&'('%%%$$%&$%')*)***++*(&&'**)'%$ %&('&$"!"#$%$#"!!"##%&(*++*'&&()***+++*)('''&% $$%&')**('&(*,--,+*))(&%%&'()+--+((-/+)())(''(()(&%&'&$"""#$%&'),-...,+*)**)'&&%%$#!#%&&%&''())('&%&%$#"##"!"#%&(+*'%%&&'),/121/-,**+---,)'%$#""#"#$%$$%&&''&'(('&$$#$$$%%&&'&'&%&%$# $%'&%%%$##$$#"#""###$$$%&'''&%%%#"!"#"!!"#$$%%&&&%%$#"""$%$#""!  !"##$%%#"!  !"!!"! !Y  !!! "$#"!!"!$(*(%#$&)-/199<<:831.+**)'&%$$#"#$%$#""!!!"#$')(' )**(&$# "$%&F'&%&&%%$"#$$$&(($! !"#$$%'! &$#$%%&''&%$%&'())(')*,,,*(;'(*,*'$##$$$#! !"#&''%%&(*+++**,/21.+*(%%&'''('%&'%$# +$%(*+,+**,!*'&'(*+*))*)('&&&%%%&&$""#$%''&$#%&'''&'())()(('&%$%&&'&&'''%##%&&'('&''()(' &% %#""%!  + !! m !!!"!!#% !!"#"#"$  "$$""$%#"""!""!,#(")#!10!  . !!"#$$!##%())('&%&),-,,---/1/,,-//.---,---,-../..031000.++,+*+,--,/132236::40.28;87653/,-,+-,$ ')'%%&')(()&#&*+,+)'+.)%$')*+,*&$#%'%""%((%"!!'*,-,-./00/--.0/./00/.-,+)'&')-///000/-.121.-.0/($&(''*./.,+++,--.-)##*#.1235897<:7:>?>?>;::;>@<40..024431/./01110H1451)$!$$" ")--,+)('&'(+/21.,,+,./-**-01136 2/0479;<:86421]/--,)&'('&$"""#$$%$##%%##&-23323479:;<:7422332342.)%#$'((&#63$+25568;;72-**,-*(*,,+-.,++,,*'"(*+*)*+,---,'! !!!#$#"""! "*6>@@>70,+,/0.,+*))''()+-./13320,)+165,#@!#GEDF&++(*/21//0246;AILG>961,*+.464210024430145443335630/.00024558;;989<<942465229BHD6*&(*+2>?843/))3> AB@97>$&$B@@@>=?BB?><::953489987789:;:5112359C>5114765799=?@CA=<<;::82-*'$'.1.*%"*" #!%).483+((*,.,&"#&(*.10///28<6.++,++*(()),47558:6/)%$#$''&*//*'(())*-10+(%#"%&&&'(%  "#%$""#%''%%%&'(('$! ;8#$'*)$#%),---131/-+'&(*,+)&(--$8&))+-.//-++-01/,*+)'(+*&"#')*)'(+,+*-//,(&&%$#"!!##&,252+(),.020-)'+0/*'$#%'%&+./-)&$#$%""#$&+.020+&$#! "%%$#!!$# !$(*,0474/(%%$"!#+353,"2 "%)*).68:<6*":;??== #&%"$''%%()&$$$! #%$$#"CDFEB?@AABB@C%&%"==B$&')+'B76:>A>>#$!"&E820'#/;>@A>2(0?IHE>=FONLOJ6(-:CH'(IEJ+10+LIJE;31268742/*+36477,)2<@@??BGF<465.4?6,(*/0.4BE9363.*(&'(%###HE<9:@)360*'$$&%#!$&":!'***)')02-+,-+%!)1630244799;BDA=9877789:997678:<<;:<>@>:61-,.4=B?82257:@EE@>BE?5014772..-,-/.*)++-278631013671(E@??<:;>>;84/,--178558:<>:7B*/,&#(+,.1.(%$"!%+0571(!%,+&(.330--///-+***'#!""##2&#(01+%$*64-,16. "" 2124 +1/.-.-,*+ $30/0/+'%$&(+ǀ ɀ؀ ԁՀɀင䀄쁂ρԁ *؀ضȰW½N¿ƄȀ샍ûۼ޻Ǹ¼ȀžùȾļżրĽʿʀ¸#Ƹńƀƽ󇐌νŶþ»þ¼ÿ¿Ľ½ûÀžĸĽǼ肜ǿÿ̼݂ÿе蔝ߌ¬ɻǺ񊟥Ų˻؀ʾùŻǻ쌭ȷ̵ȽĿճ!eB*6gf444334455gdb_\\\]_d45433fecba_aeggedfecbe4665ecba_^^`abb`]\\\[\]`deb]^cgfcbbba`_^\[[[ZYWWWXXVSTX[[[XVXYXXXVSRSVWVTTVY\^^^]\\ZYXWVWWVUTTROOPRRPMLNRTQNLJJKKKLLMNMKJKMOPQRTWXXWXWRNNS[a3fc`][[ZYVVXXWTRQQPPSUUUWZ[\^_`b22345e^YXXYYWTQPQRTWWZb4ggge_[\_a`^[YUPNRUTRQPPPRSTVZ\]]\XTRRRPNPSUVVRA'H;RX[^_^\\[ [[ZWROMLMN3OPRRQNLKLMOQSUWWVW[\[Z[[XSRSTSRRRSROMLNPQTVURONNOOOP'ONNOPPPOOPRSRPPSUUUSQPOOORTTTOD;=HLKJIHG4FGJLMMLMPRSUWXWURPQRQPOPOMKKLOPNMLMORTUUVXWTRQMKJJKLK+OQPLJLONKIIKLMNPQQPOMJHHFEEEDEFGGHHHFFGFEEFEDCBCFIJJGCCEGGGHHIWGEEGHJJKLNPQQPQQPLKNSVX[^``cgjmpojebemrtrppsttroic`^[YZXUSOLLMMLLLKIHGGIIJKMNPPQSVXWTQPQ:TVSOMMNOQRUVSQRSSQPNKO,02332/TMIIJKKJJLONMMNNLMJ58=A[\WUSOMNOPONNOQSSTWXWUTTTSTVZ[ZYZYWSQOPPKGGIKMQTUSRQRRSTUVY_e553_]^_`1`]ZYXWZ]^][XVSTTNIJLLLPUZ^_]\]_`_][S?3@RUUV[_1/..//]\[ZYYWTQPOMKK/NQRQRSUVTSPPRSSTUVWY\...[[[ZYZ^a1^ZY[]^][ZZ[ZXWVY\023456630/1452/-XYY-.//..02112220.//../12223565310/112210/.XTTW,-//..03431P.-/0-+.10--0477766531110/..1453/-.023222332110/0220/0366421123466655567743346889:;951,'E?::<=;536:>?@,ACCCDD@>?BDFHJMOPPQRSRPNLKKKJLOQRSTUUTSTQNNKGIKLMNOONNLJJJKLJFCBA?BHIJKKJKJIIJIIMOOLJJJIGD>:AJPPKGC=731223359=@BDHKMLKLNNOMHCEMRTWVRMLIB==>?BEFDA?ADFHLNMLHFJNQPLIJKMONLKLOPRRPKFDEEEFHGFGJOQOMLOV]YPMMOOPPMH?T5X0:ACCDFHGB=@GEBCJOPSROKIHFDCCCDFED?jTJTf4.SSJ67*CQTQMMMIDA>?CDECBEHC@@?;63j:?@?==BD>B@ABDEDB@@AAA@BDDCBCFHF@96:?BGKNNMLIHFHOSTTW[VQRSTVWXXXWXYXVUUVUUX[\\[]ceca`]XWSOORUWVTVZ]_`beklf`_fq<;pkklkihfd`]\\[^i62^[ZZZY^563114552`bdeeb^XUWSNQX[VPSY]_^\[ZTQU\`_[XUOJGGGIXhbSMMQWYXXYXW)XYY[]][\^^_`abcfgdabgjjklooljjopia_`_\Z[^`bfhgeddd`ZUOJA:=EHJLIEDIMMK@VMlEQY]`ehkqx~BDEC@?@CGMTVPF~|}yx|{wxyy{zslkmlje^[[`_YVY[ZVRRX`fhfdb_\XTROLHEB@@?;3/3789>DJLIFDBBEFEB<78;?EKNLIEB@AABGJIHLQTVWZ]_abcgkjgfc`]YX[`dkpqonpqqqrssoib^^_cc\TOMKJKKJJJHFDA?>?@ABCEHKOSWWTV\^\]acec^\adb^[[[\[YYYXTQQPOQV[ZSLMQU[^^dklhfeedc^XWYYUUX[XRLKJIKMMLLLOQQNMLKJHGGGHHHJKKJKMNPPMKMPOLHFFGHHFEGS`c`\YWUVVW^ggc_[XWTNJE@AGMNLKNOLJKNNKEy=ssx>=tkfhm|M]hg_WPKHMXcgioqi^XZ\WM?l>Scfa`ejg`[\\UNLPU^dc__`accglqw|~{vromkkmponrz}~|shbbefc_\\]Z[fqy~@BEGDzwttv|xomk4qwqgcclyxnmoqqmiijhe`XQILUamzncabj||wx{{wv|vjb___adddkqszxnc`_\[[YTQRV\][YTKB?ufa6CDDA>?ADDA>=:?W?LQYgneYRRUUWYVPORWcnkb``\Y]]XTRQQQSVVXZ]bhifehf^QD@ITakg[USPLNSX\]`dfbZRKGJS[ZVSOGAEOSQNLJGGGFCDGIKPW^[MC@>@HT\_\UNIJQZbda`bd`YSMKMPSTPIEDBysCPUTUZac_ZYZYVSVXVSPQTYZTNOQQQPPSVVTTW]^XUTQLGDBCFIINZgk^IBGGEN[ZRMJNTWWSOLEywM\\_cb]TLIGCBFOUY\]WRSVXUME@?BEHHGFFIKF==DIJKSci\RQRTVSPS^imfWKC=y@DEEEHNSUTT]d`UIA?>}}|}@ADGHHIKMOQTVVTTQLGEDCCB~}wrkhs{tt|~~yqqt=?>AFFD{rhVFTorlowvqu~xrnkib[YbuvlrwoouticbfigZR^mlabkh^]p|qnmmwvqoigmqqombZ^ddabgpoe^YTRSOF@CDubhorIaj`RJE=@NQLIJFsyS\TJGC;;K[^\]__XKFGQZTLS\\\]_cgjjgeccbaaa`\[\ZXXZ^dny~ysgYSTUYakw~vh_ZWU[cd``de`\`jqn_OIMONNSVRLCxOXXVUSPOT]\RIywuponkeccdc]WTTQGBJVbmrwKPOKGDGNQONOQOG@CMUWSJBADKOI?s<>BHNRVZZVRRW\ZTPMJD9acg!eh=B>9h\URWVHAJF??=<<=>@BCBAA@?>>==>?@BCDB@?>=<<=>@ACDBA@><:97776568;<9lkmo898mj569;8igeabdeec_]___b5:?DGFEEGGC@>;89::8422334568<=96689998875322b__`024347988876543224687545678887779;==:lm99md]XUUY\\^d456/-0.-,)()*,///..-+,/0/--,--//...,++,-./-+*)*))*,/0.++/0/.--./.-,+*(&')**)(()*)((&%#$&('&&'(*++*)('&&%%%##$&%#""$'('%#"!! !!  !"#%')+*&""%*.10/-,,,*))**)'%^&''&()*+-,,-0,*)***)'&%%&()(*.101/+()*+,++*(%$(*)('&%%%&&(*,-.-*'&&%#!"$%&&$%(*+,,+,+)&#"""#$%&&$###$&&&'('()*+*)''((('&%&&$#"#$%')(%###$%%$#"#%&&%$#$&'&$$&'''&$ %'''$!$#"#" "#$%&'(**)('%%%$$#$$"! ""! #$$$##%&%%&%$#-"!"!"$&%#"$&&#!!"##$%&&&%#!!!  ! !"##$#""#"!" ! !###" "#"!!"#$=&&&%&'&%$&()*,-.-/2469851/03676556656531/-,+++)'%##$#"###"!!!" #%&'()+-,*('(*+)%##$%&&'('%%%$#" #  ""! !###$%%%&$()((('%$%%$%%%&''()))++)''&&'')*+*(('%#! !" "%(*(&&'()))(),0,+,--,*(''')*)))'&$%%""%(++)(()*+**&#$$%'*='''&&&%$"""! "$%$$%&&%$##%&&&'''()(()(&'),*''()))(''((''&(*$%&%##%  +  Z !""! !   "&%! !$$$%$ #"#%&&&%$$##$$##" /%'## "#" ""2 "!!!  !!""!!!"!! !!! !"$# "%&%$#%),--/1,((*, -,--.-,+,,,-.01002444331.-+((*,..-../1224662./39855431.,*)'%$#%*&%$%# "'(()*))'&&" %(%!"%'((&%%" "%&&$#! '1.'%&*.0011/-./0/0/./0001221/023456786679:61010/../00//13321121.*&#!""8%,134578;?BC"##"! "$'+//*#@BFGFC@>@A><=>>?ADEFEDB?;879962-w,-0/,,.//-**-2554332/-+*'$!#$! #%$#%(***,-/12357643321--0358;<;::<;::;;:63001450,)(0))**)('%#"##$$%&'*,/110267545775325764323430//-*)&+/33-(),.0125:;8655541,+--*)+-,(&%%%&'(*+*(''&&%$#"#%%##"""  %.20-,+/57520..-)&# %*+('*,+**+,*$57>#$D>:;@@<7213540./10/4:=>? !#$#A><<<=@FF>8789769<:5349AFF?:9;;<;89:974/*%&,27>ED<767=JQQSXSHDDGHFDFHGGF?60//025558<=AINKC<54554540..0331/+% 70- &u) +'%(-6;6-(')()+*('(,3:93220/22-*)((*+---..1673254/(  '197/++)'(*-///253-($"#(,,*)'"!'*)'&%#! !#%(-32)" #*/21+&"#(-230/010-)&$$'*,+'$$";6"*-,+.363///.+(*+*(&'),-*&')))('),,++-12-**(&#! !$&%(1:=3% $$"'0.(%$&+./-)($;:)33R242/*&$$! #(,/11-))*,*$ !""! !$! #$$)26.'%&()'%'.693*$ 8 ! "&*,+*/41*$ @ !#$$$%&&''()(''&#!A@@ACCA>;859@BBA>::>DGHFDCGKIA<::  ##!@@>;7+!+=?:9=>;=CEC>;9::5007BB9AHOQOH@8436991-4>>7596/.=JF?><:@JI>::75:==:70,0K44236;;62/,+-*$!#$>37;<'5;5-(% "+.*&'%8<.5.(&#&00..02.'$%,2-',2234569;;87677754665568;@EJKIEA;2--/04:55;AC>:4134/+.4IJKLMNNOOPOPQSUWWVTRQSUVWVVUSRTVVTRQRRRQRTX\][WUSOLJJLMMNNLJJKJKNPQTWUQOONPRSRQNLKIGFEEFGHJKKIHGFGGGFGGHKNPNLKKKJJKKKJJJKMNLJGEFHJJIJKLNOOMLMOTZ``]\[\^aba`cghggluytlkpu;;pg`_`aaa]WRPLJIIHHIHIIIKMOPOPPQRSUWVVUTSSUUVWVUTUTSSRPPRRSVXVTQOQSU!SONKFEHGDEHJKKLNPRRRSQKEHT]ZRMLLLMKKLLKKMOQTVVTRRSTW[__\ZXVRRROIA=BJMOPPNMNOOPQTXXX\`d21a^^_^021_[XTPQVXXVUSQQROIHMOPTY[][WVVXYXWVTKCJWZ[\a2210/.[ZZ[]^^[WSPPPNLLMPTWXWURQQSRQQTWXYYZ\^[Z[]^/]YVVWXYZXWXXXWUTSSV\2799887543002442/,,-./00///...//00/01002210///02200111343100120//0110 120../0220/02D34420,QQVXW.22.+.135776654220..012454200121110//../0013310/1222111223466520013567898679:K;;:60)GA<76:<<<>=45<@@ABDCAAA@@ACEFGHKORSTTSQONLKKNPQQRSSTTSRQPNLJGGFGHJLMNOMLLKJJKIEA>===>CIKKLKXJIKLJIIKMNOONNNLIJKJHLTTOLJE?;9752/--.269=@ACFHIILKFEIOSSPQTTQJ@;BFFINQPMHGKNQPOQOLKLOQQPQOLIHGFECEGDDHLLIKRXYUROPPNMMJD>9:>>ADDEEGIGGHHJQTSUXXTTQNKIFEEFHGFEB?=gZ9?71^WTWXW1ANKEBCEB?ADGGECCB?<;974cbi8;>?ADEB@?>?AAA@?>ADCDFGHJJGEEFFGF GJLMNOPOMLMQSNN[c[QNPTVVVWWWYZYWVWXYXWY\^bgiggfeca_ZTSUY\[XVTTXZ]_`^ZTWcn::9njhigc`_^][ZYXZ]^[XX[0.ST152.\142^\]1674edd^VUX]^[YWUYa`[ZZWX\___]\ZXURMEK\d]QKKNQSVZ|YURRTVWWY\^``abbcdcb``ekoruxyxqiec_[YY[\[Z\`dfecdillmjgc_[_]H78DHIIGCBCEIOIbLnLZbgnrkflvyvsstqmlmqxEEB~}xqmmoqollnu}}{z|ysommoplfbforme`]\\\]`ba^\]ZWVVRMKKJKMLHFFECA?<:;>BDECA@?@CGHFC?>@CFGHIJIHHHJMNOQTVWXZZYWSRV^cdec`\VQOU^fiklnprsssplhda``a^VPRTME@@ABCFIJIHJKKHECDEFILMLLNSX[]\^abddbaabddcb`_^\YWUVXXTQONLHDELRYaglomdZWWXY\_chllifc`]\[WUUWXWUSPONMNMKFA??BFJMPSSSRRSRPMJIGFEEEFFFGGLXebYRPOOOPTampkf_XOHFHIHGGD@@EJJFEDDDC@@CEGD:cZWXcp>GQXYTNLPYbijgb^UJJXfgZOKHqxFOV\\YVTRPNOSX[\\[YXZ]dkpw|xtmd_^^^_a_\YXZ[\^_^^]^^]\[ZZ\dyHMPROJFGwklmlkiilkfdinojimpmjlr}}tonpuysh_Z[YWUTRS]mxysh`^[]eowxin~wmfdfe`_aeksutrqld_\Y^ehe]RICCKU[_b`YSSY[UPLF@9W3"-M6:87;==?@>;:<>?=;86=\CPW]a^UNOU\]_^UMPXcopggmsx{zsh_[[ZVRQOPV^cghecb\QDFKOTY`da^_``_YPLPUXYVQMHD?vw@EJMOQSY`b^WPHBAA~wrtzDDCB@GNQSUWY[YQF@@AB}v|zmej}HK~~}CFHHJMRRLytsvxnXOZktxyzy~ylihaZWRShyxwnhid\anri_[VWey}wk``hla[pzmb`gllx~pnidhopsv{tlgc_]_^]\WTQQUXRD;DUO=t=@IY]PB?IMFB@CKUUNNQNIILOPOMOSWVZ`]SIHOSOMMMNMNV_a^`ca_`^Z]b`[[ZWUX]clvyw{}xtqpomjc[YZ^hrvuw}~tgaa]UPPSUW[YMCFNOOV_aZPGENZ^VJED|{ywtfULLSZZUK?xP^gmopu}DFFHMKD?BGIGDCIMKGEAupDNJC>zxxz?DJKFCFHHJLICBB9_Zb8>CJPQQLA9eb6:7cJ6=Z;DILOQSVW.0234579:9889<>>>???@@@BCB@><<;;;<=>>>?AA?<;;<<<=>@?=;::998679;<;pkm89::985h48;:64gb`dfda``bbabe59=@?>?BDC@<988974212334678;=:679:;;::8754321232256667655566444665679:9::9:;<=<:89:9mf_[YYXVUUV[-//01/-($'-//.-+)+,,+)+-.-+**,--,*--,--./0/.--,++,,++,.--,+*))+-.--.///.+)*,+!,++*)(),+(&$%'()+-.///.+(%%&''(**)?()))('((&%%%&'())((&$"$&&$"!! !#%&'(()*,,+**+,+*(%$%'(*--,+++*('()*+)'$"!!""$%'()(),.-,*'$.%%&'().-,+++*)**+--,+)'&%%%')*+++)('&$*%$$$!%&&'(**)''())('''&%$"!!"#%%" !"#%&%4$$%&&&(***++*(&$$%'''&%###""!!#%%$"""##$%'('''(('&&'('&%&&%%%&%&'(&$"#$%1&'')**('%%&'))**)'&'''%$$%%%$"#%(('&&&%#""$$$%%$#$$##$%&&')(%$$$%'(('%$#"""!!!"$&&&%&&$#I""!! !$%$##$##$$$#"""#%%$#!!!"$$##$$&'&%%%'*.10.-,,-/0//1342149;7214772.,('&$"!!"###$%& '()+-..-,+)(('%()('%%$*#"   !#%'(()(#"'($""##$%%%$#$%&&')**'%%&(*,--+*(&$#$# "#%2$#$%'*++-/0-+,,+,*(&#$'('&&%##$#!##%(*+*(&&'(& '))*-&%%%&'''%#""##"!"$%'''%$#%&'(('(() +((())*'&&'$&%&'&&&%%%'+ + !!#$# ! + +F ! !"! ! ^ #$"!!#%%$# "%#"$%%('&$$$##$$$"",!($$&'&!%224 "  !$##$$$%&$"###"#%&%&'''&&'*($'161*()+,-..-,-.1/025886665321.+*,/00.-++,-/110-+,276310-*(''&%$T&'&%$$ ##""(()&##%'(((%!$)(%%%##%%%$$%$### &+(#"$&(*-0.,**+,,,.0133454311479:<<<;84220/..//.-.034435788862.,*-+"!,%<+3669<859?A?<==;988:=BF$%#DDFEA;8788777996567762027:841//012331/./.,+*&"t !"#%&&'(+,,-,,,+))+035663/+('+16899:<=??><96322231,'()&!!!#&)***+,+)&%%&')*+**+.256667V66678654310/.-,,.-+)(('%"#(,058:<:5.---./13577532100/-++,-,,**)(''&$!!""#$$#"!!!  '/0+(()+2:<962.)%$%&%$$""&'%%$$#"  " .,-/7?"'-10-(&)/5:;742.'&.892*'&B><62104:<:6/(##'-14650+,13.*&",#( (,/21+&&+./00*%'+2:<88737C(*MEDCBDDD#%&&%'+,'C930..7DGC:34;<50=F?7238<!"(24* #&"!!"'./)*.-)'(**('(*,+.22,&%),)'()***/67458756525973454357:?DIPUWUOIDBDIJHEBAAA?<978;BILJIIID<8971,,/0122-&&+-,0685/(%)173*%#ECBCEEC>60/38995,JM1=DFDBFLP))''))%!"%'&$#%('%$"=;%,)# @@@B#%('#!"##%'%"#$.+0!%'''%-,/  #3&42410-,/0.-,,-". 73/+**)''&')рՀ߁ށ򀃁΀~΁ځ +؀Ľƿ̀ͅν݀þـŷǽӀɽb̈́΀͹Ŀ쀇ϻĽȺʺ٨ϋ¼Ⱦ¿¾bûǺ¿º„ŀźıưɭ򀂃ƽǾõ˽û÷ľߋĽ섚¼Ƹ½򀀅ҿʸϿ炄ϹŰǾˢжĽ󂐓ĢĹϾ߯żżý􀃈܂ᇚh/\`chlkj56h]Z\_c32ccba`aaa_\YXZ]`ceeddb^^``abcccd"cddcdccdb]YXZ^`_][[[]^^`ehihd`\XWXZ%[[[]][Z[\[YVUVZ]]ZXXXZ]^][ZYWVVVXXVTTUVWWWVVUSQPPRRRPPPONNOQTXXUSRQRSVZ_1221_ZUSW^`_^]ZWURQQSWYYXWVVVXYZZYZ[[Z[\^^\YUQOMKJIJMOQQRTVXZZYXWTRSW[_1213678:<:88997h_XVVSQRTUVXXUSRSTTUUUTUVWXVSQPRSRSUTSUVWURPPQSTRQRVZ\ZXUSQPOMKLLJIGFFLONMOOLJJJKMORWYXWYYXUSUVTSSSQOMLKKLLLMNNNMLMOPQQNNPRSRQRTTUUVX[ZU!OLLMNPQRSSRPONNMNNMKHECCFJMNNPRTTR#SSUWXY[[[\__\YWVUSQRSTTRPOPQQQPONNNOMJIJLLKJGEEFGJNPQPOMKKLMNPrOLJKLMLIFEGHHGHIJJIJIHHGFGGGFEHNRTSPNNNMKIGGHJIIJKJKLLMMKIHJKKJLNOQPOPSY]][[]ab`_[Z`imjgfdcfjlmlhb]XY^acd_YTRQPNKIG DCEHJMPRSSTUWXYYXWWYYVTRRNNRTUWVUSPPOPOOQW[ZYXVTRKB?BEIPTRMHJPUUTSTTQONOOONNMLLKMONLKLMLLNPRUYZWSPMMORVXYWUTSRSSQNNOSTRQQRSSPOUYXXXWY^1456642111`][XVVVWWVVVTTTSRQQOPQS\ec]WPNSUTRTVVUUWY\__^^^\[YXWVUVY\\[WSPNMKJJNV\\YVRPPRTSRSUTSSTVYZ[]\ZZ]/00/[WVUTTTVWYYVUTSSST[4:<97654541/034310110//0110/./021/-/11232110//1330./12210/G0121/--02221112110.-.00/./00/.,RMOTW.130-.01257753442/.-./.05641/02221/- 023320//012321123443200123Z5653345677889:;<<<=;5,I?<<:77:>>>AAABA>>>=>@BCDFEDCDILMNOMLLJJKNQRRSUUUVUSPLKLJGGHIKLKJMOOMLLLKJKJD?>=<<>?<=DJKJJIHIJJJKJHILNNNONMNSTONRUUTQNMJGDB><92,\0.--058:=?@ABCEHKNLMOQQOJEB@AGMI>504;?=>DMWYSOKJJMOPPPQROLKLNONNPRPLIIJCADECBCFHJLQTSQPPOOPRQJDAACC?@GIFEGGFHHEGRWTSTUWZ[XUROLIIHFFFDED4Tdie76ecaYSV393+,7>>?ADECB?=9544fehik7:<>??@@==?@CEC@?;8BA?>?BBDFGGHJKLLMNNOQRQOORSSSRRUY\_^[[\[Y]cgfeddb_]_aa_^]\^^[[^_^_`aa^YVRI<48AHHHGEEEFECDEFFFEDEHKOSZ`dd`[WTSSTW[_dgjqxzyxxth^XTQSUSQNMQQJEHNU]bcaa`^[XTSUX\_aejlljd``bdfkpqkc[TPOOONLKJKJJMOPQQOMKJJKJIIGGHJKMPONMT`hc\VQKIKOYgnle\TNJGHHGHMSWWURMFAAA@>;;AHMRSRRPEshjAOQLNSV[dkosx{wj^_jrn`OD@wk[PUm}KLLMLKJILSYZY]bfkomi\USROKGFGIKOV[\]`ejpnd\Z]elquFGBymcZX_ffddghgghown__honcYV\ehhimnjfeilmqrkhqth^]]ZX[_bb^[Z\[UWdtIJNKwlb^]^^__ajv{wrnkgca`adig\TQRUYZZZYXVRRY[VSOIEA:31026;?DFB?>>?@@@?>>?AFV@GIGKNJAqlpnic`[U3DIEHOND;984759:7_PW8ABCJQPMT/343346778:;;:;;;>@A?==AEFDA?>=<:88899;=i>>=:889;==>AA??AA>=<<<=?>=<;:768:;=:nkm9::;<;8536;><8je``a_^_```bd468:;;:;=>?@?;7789752234568::96hhh455678:653113444554455434664345679:976656678:;=><9777nmkkjgb_\YVX+-/2443/)'()+-,-.-+)'')+,.00.-+(')**+++,,-!///000/.*'&(+,,*))**+,-/111/.+)((*))+*(()*))'&(+.-+))*+-.-,*)('D(&%%&&&'()((('&%%%&'''&&&%$$$%&()'''&%%&(+-)&%'*,+**('&%$$&(**)('()*L+,-+)&$#!  !#$$%')+---,+)'&'()1-*)(&%%&''()(&&&'()))(()*+*'&:%%%$#$&&%$##$&&$##%())('&%$$#""! !$$%&&$""!!"#%)*))***('&&%$"!H !"! "#$$#"#%%%$%%&'()*,+'$""#$$%%&&%$##$###$"  "$$$%'()('&&''()**+,,*)))('&''&&%##$#"!a""##!!"$%$$"!!!"#&''&$#!!!"#$%&&&$###$$#""###"#$$$%%%$#"""!!! #$%$"!#$$#! !""!!#$##$$&&%#"#$$$%&'%)-01/--./.-++05864310134442.+(),.//,(&%"!' "$%&())*+,//000//.-,*)(&%')*+*)))(&%%$%)+*('%$# #'''())(%$#$#"#$ %$$%&'),+)&%'())'''%$$%$"!"$&%%%')(&%(*+-***)('(()(('%%$#$%'(,10-(#"%&%$%'b(*+--,,,*('&%$$$%&'&%$""!! "&)('%#"#%&%$&'&%$$%'(())(())'&&%$$%&('&&&%%$$( I" "##   "& " #%"B!  !! !!!"#" "!!"$%((&!%$$$###! "'(&)((&&'33566  !""!!"$()'&%$#"!"&'%%('&'( +)(#"*.-,+*)**++,--./001`244589741/-..0474-((++*+/10./12346772./.*$#'&#"$#"!!#$%!(%!!#&%$#" %&'&)--+'" "##%&%%$%&%$%'((''**(&$#"'-/-*(&&&'+01245554579::99::9851/013557762/1674-''+00/.,*)&  !  !""!"!.!3'17;?A>99;=?A@:44568757=BBA@>=<<;;=>?A!"%)'E>:9:;=?@AAA?><<<>AA=7430.,-/1.)'*,,*$ !!!"#$$&()*+*)+.00/--/.,/58:9752.-/232211121023223442/,)#!!"#$%&''%%'('&&%%'>)+.27;;841/.//15799:>BBABC@82.,+,.-*('*+&"%*/47876520.+)+-023576555448;:61,)'&&%$"   $-43/-*('(*/6:850,)&#$%%&(-//.+($##$#!#%(*,.-'@:;%--))+,.38;=@A?912;B@6+#!@:/'*83331/03441/034007AFK))JEM*)MKKKLLIC=743322237>CA>;9754469=<4.,,-011100.++12/-)%!$#&),02/*)-/,**&$&)/2.*0:AHOROJA941-)()+--+,032/*$!)-+(&&),,+,/10-,+)''&%'+,)$"$%%&&&%$$" !"! !#&),/.&""! "')'&'&(-1451,+-,,,)%%&(**(%$'&>5 )..*'')+--++,-.,('(+/594+&&(,.0/,*)+/0.)((())''((&(/4336:7.('&%&*`-../+(*.35.'(.1243//45,%'*--,*+02/,++*% "()(()(" "&*-./1/-,--/*! &((+.,)'$<217!%%$&(-0.*(&&$"B?BD@=<<;=!##$%(.30%>?"$#BA#$CAE%%F@<=?>=?FMNB9=D#""$'&',240'B>:87:=;3.4>A84:@AEGA3,175.0511>$$#!?>=6-+-2894*"&1ITVRQTRMHFFHJHFFGDAA?:9<@BFMQTVUK<3256201116?A8/++**-0.+++*+04/($"." )59:h93)I+:FB:;<;85-)0;H(%@9:>BA@ #%%#"#!;319$'%C>@"""%%$%'% 868851.+(  %%2&% *H2251/--,**+,,++-/.. 7766641/,*()À􀊁߀߁Ӏ€πʀ~ρ ߀¿򁇈Հτ̀ý¹HՄҀԀ򃋎˵ƾƫрü¹Ǹô¾ᾬҽ̿ſŀ̿ǼS¾¶ŷ񀆍¶㸔򃏔ÿǿ򃐓ȶ¾ƽþ틝¯ſ˻󈘡ıŹ̽ʼ惁ռʿƱʳʷ̼׼³񖬯ıȂ2w􀆊adfgfec`__a22dcaaabdfdba`^\\^beecc354c`Paa`__^__^_][ZZZ[]^]\ZZ\^``cffda^\[ZZ\]]]\\[YYYZ]bdb^[ZYWUVXYWUTTVWWWXYWUSSWXVUTUVWY;XXWWXXXWURPPQRSWZ]\YVUTRPMLNSVUTTSRQQPPRTVWWVTRRRSRSVXWUUVXY[XWWX[]^\XTQNNNOOMJIIJIHHJNRUUSRRV_48::;???@BBB?>><>ACDB>?ABDGIKLMMLLLKIJLNPQRRT+,WTQOMKGFGHHHJMMMNMKJKLLLKKLONIFHIHDDFIKMMKHEEGJJJIGDDEHJJMOOPQRQPRUWXVTTSOKHFGGD<7520/-TPQW.158:;@CBBCCA@AA@BGIJLNPPPTVZ[ZXSNKJJGDDC=85f574365di558@BBB?<>AA@@?91X[f6gdi8;?AA@?>==:7;@DGHGD?;;>?@AAEJLKLLIFDCEJLGDHMOQRQQRSUURQTWXVVWVSPPQRTUUX[\]\[]_`_]\]`a`_aimliea\[]aipkUFJV[YZ`b^YY^bbbeikjfdebUMU_`^\YUSSUYZXOGKU[XRQTZ0aZTRQQU]^\[[^aaXNSeq:shYSTTUXXWXY\ab_YUU]ef`b58864b[Z`fea]XRORY`b`__]ZZ[[\^afikkjlnonib\YZ^begegpqib^YUSRRRS[`VKGDRbr@ABB@zurpmjfeglnpqquz>=ywx=@ABBEHID|ttusonquz~vncZSOQUWSNKKJIKNJt<8CRZ]]\ZY[ZQD<>@?>>=<<<=<8669<=?BDHKQX]]WQPPMJHFECA@DKRW]ab`_aa_^_abfmruwule_[YXWURMJJJLMLJIJIGD>42;CFGIIGFGHIGFEEFGPHJKKKMQSSUWWTQTY]acb^YUTVX\beb]YWUSPNLGBCHOW^a^ZXZ_figa]\\YRLIKLLNRVZ]aegiigb^ZVT SSRPOOPPNKKMLKJLMMNNNQX^^YUUVX[\]_fjhb[UQLIFC>;>CHIHE@;nfcg8>DFEDEEDAxpr>CHOPJDDJRZbgjige`[Y_ff]L|snhm|v^JFP[]]fu~OUXZ\\ZZXTOJF@EIKPW\`bbdhjjf_[[\]_bcbba^YTTY^_blsrlfa`bd`WRTZ^[VW_feb```afllgeilptsqnow{tib\YYZ_b[RS`wKONJNX[VOsd^chgedcfif^_honhddegjhc_YVVWVUXWTTURU]a^XRLJGB@BCDDFIMJC@CEEEDB@??CGKY9FR^bbejonibZSQOMLMSYZ[akuy{~~|zxwqaSNMNMJLS\ceb\VPMNPSSQOPQOOSWVQNLNPPMKF@CKOPNJJIGGHGDBBBABCA?>>>BKV\XMFB?|>@DHMPRSW\alndYUUWXWTQPPONMMJHIFyrAJNONMMRZ___bgkdUJHLSY_`VJFFGIPWZ\\\_`ZTUVWXWTPNKGBERZ^cfgb\VND@DILNQTUUUW]dd[STZ[YWUSUWVSTUUVUW^cYQPQU[\SJDCHNRVZ__SGEHOVXYZ^\UUYYURLGFIPVWVSOLEwnvAA}JSVUTTUVTPJFA~|xssuvyzvt|DEHJNUYWPKIIKLLIEEEC}vryFE~BDDEKRUVTRLwutpg^dqrnnpromrz{xxvmggijifc]^kuv{}z~{lbhsnc^UR^rujif]X]gNOs]KJORZkxwngkmfcgnnbSVhk[PLJKMPV\doshZSPLMW_WHCMWURQRXZXSKB?FMNOV[ZZ]`ZSQQTXZ\^^_bd_[]_]UKFFHJLIEGIGDEHMPRSRPPT[___aenv||vuvvttuuuvpf][_ekoqwshfhe]WUSWaggiszoZJ@:xDLQQPPRQMLONG>si^Zbmme]TDvD`ttnjfb__`\RJKWj{BBzqjhhfju>=:s@F@g^izBA>xunjn:<@@eQH@:?T:GHA=COY\/123445678:;<=?@?>@B@<7566767;=<::856789:<<<=>=:76679;>@@ACDB>;::;;<<>?><99:;==:kfi89;;:975458=>;7e`_^]]_bccd468;;8435789<6daacd355433588765654456776545554579;;:865565436898665hhgffhfca01$0.,++,--,,,..--..-,,+*))*,.-++,*+,-!+)(''()*)(()+-../10.-,*)))*,,,++*))*-/.-+**)'())(''&'())**('%%'('&&&'((()***)*+++)'%&''')*-,*('&$"!!"$%$#"$%&'''&%!$$&('&&&'(())(''(*,-,*'%#""##"  A"$'))(&%'+5/*''((()(())('()*++*+++)'%%''()*)&%%&%$#"###$%&&%###%''&%#"#%%##""$#"!!"%())'&$###$&''&&&'&$#! "###$%&%%&'(*+)'%$%&'((('%#2"! !"$%&&'())(&%%'()(()*+*)((('''('''()(&%%##$%%%$#""#$#"!!"$&()'%$"! !!!!"##"!"#$%$%!  !!!"$$$%&&&%%&&&''&&$##$%&'C(*.220..-*))*,...-,,+,.2:@:1-*'')*)('&$%&&$#"#$%$!!#%''((('')*+,./010.,*)**+**,-* *$ )***+,++**))*+*)&%%%$%&&&''&&%$###$%%&'()*(&&'&&''&&%&('&%'()''(,'&'))'%$J%%&(.30,*('&%$$%&()*,.11-***)(&%$"!#$%%$#! !"! !$()&$$%'''&$#$$$"#%'''(()*/)(%$&((())'$"###$$#% %$##""$'''1 0B!!$"!"" ""    !!!! !"%&(*(%$$$" *)*,/5656 !  "$$#! !!#%&%&'&$"!"&($!#')**)))*+++*+-- ,,-,)''()**+-/R13320/033213798541.-.0484' %-.,-12/,,/1223566421-# %&&%#! !###!%$! !%(%" !#$&''#'163,$!"&##%()(&##'+*%$,*,/01/.,(').232231/"00256655765688862.,-/133128:61.+**) ,-%$(h'&'*'3/-#/8AHIFDB!"##"?<:997568;<<=<=@ <;< "###$''$?;:<;878:<@CC@=82.+)*-.+'%#" "!$''&$"!!!%('$ $)-03311343234568:;=<7310/-,+)&%%&()(&%%$! "$%%&')('&%%&&'(('''()*))+./.022/-.0367630--/025642/.,*(&%#!"'-279620025751../.+'')))*-/01345553/,)&$#""! !&-0.,,./00014762.+)'%$# #&''$ 50-, ""#$#!<8;!$(,-)$#&*/3677762.-2893(@;:79CIC6*',344;FLMKJIL*.0121110-)&$GFFC!$&'*.1344577751.../0120-**-0016;:7433574-)).1/,,167533347;:7579;==>=;>A>8410/0352,+1>J(**'GF)252-UTSRPJB857::7657:8228==:878:;:640./0/.//-,,+-2420,(&#i$&-01358752-)('&&'*/015 #%'))),.29;3,++,-,*(''%$&$<9")+*)'')-0//1463+$#&*.33,%"#%&*.//..00,)*+,,,*)(&$!#+1357861.)#!#%'')*+*+,/33-()--,*)(*-,**++,,.581*))+..)#"&(*,//("!#'+,,.1/**--,*%"#%)..-+)'#:49 =?&-.,**+++)%#!@@?;;<;<><;@E$%&').1/*&%$&((%"#$#EHJHEA=:?F%&FBEGEB"#""&*-.-,(C:9:;615=>;9:;:8;AB??=73466520--4;<>BA><>A>616><63-+4BB:993/29K/.J>2'%(*.8@>847:635::2(*57/)'')**-15:;4,)'%'.40&!(0/-+*,..+% #(()-100240,**+-..000131/033.($$%()'%')'%%(+-/0/.-/366678>EJLOSUQKFBACDCBCDEFE?858=ADFIOTQF;79:620025987;A>1% =#(,../10-*+-(!:50/5>C@=:0M(8ILF@;8569:4N-,2;9; !" 937<81298/2 &&%$"""!/&$ (!  # ;213.,++*)+,,+,,++,,012224433321ǀ߀ށ߁׀π~ڀ΀~Ё ǚ)þĽƾļľ̀΀􂍕, рžþʽՀſ¿Ľ΅ˀ̧ھžǽڅȂ·뛼ƿف÷ſ³ˀȺƹ򀎛齛Ӹ󈛪¹϶²ʿż¹¸ՁȾ½ƹŻʶɿ°큆ѲͻȻ¬̩Կպÿ̽˽Ⱦȿ€ĵ󁃇ô򍪿Ϯ⾷񋑌󅐒̪Ӂ󁉐û򂋎RB6kigeffghfcaabcd3hgecdfiifedehjifddb`YG1,C^453b_^^\[[\ZXY\`aa`_\\\[Z\^a&_\[]]ZZ\\[[[\]]^][[]``^[XWVUTVYYXWWXWWV XYZXVUTTTUVWYZYXUQSWYZZZ[ZYYWSPMJIILOPONNPQSVZ]^[XWWVUSSRRRSTTTUWYZ[ZYYYZ[^_^[YTOONOQVXVRNMMNNORVXVRMLPYd6899866677p9;:k`XSRTUUVUTSSRRRSSVXVSR#TUWY[[ZYYXUTWYZWRQRSSSQNOONKIIHIKLLK MNMLKJHGHIKL!NRVWUUXXTQOPQPOQRPOQVY[ZYWWUTSRPPQ +RRQRSSTUUUTMSRRSTVVUSQQQOLKKLMLMNMLKKMOPQPPQRTVXZXVTUUSTUWXZ\ZVRRTTUZbfhhb[VSPNLJIIJLMNMLKULKIHHIIJLORQPPPQSQMLMPQQPPOLIHIIJLMLJIIHHHJMOPRSRPOPQOJEB@BFIGB@A<@@CGFC@@BDDDB?<:9;>BGJKJJJKLKKMOQONOS*SQPQRPNL"IGILMJKMMLNNKJLNNNMJHIMOKINSSQOMJHGHIGDCCDDFIMPQQQPPSVYYXYYWUROMLMLIFB>:850WPHGOUVX./147:=?CIMLJJLJJPY\YSPLIJMLJNRSQKHHFCEKSUPJJNMGEJKGDAA?=>FLOLHEDEEDHLNNNOOPOPSRiOJHFDDCFIHHHFC>;:<>@ABDFGEDINRSY]VQQQKEBCEE=226733775665;EFDBA?AFE=97`JEUejjk8<>ACB?>>==:4`e:BEEFD@<:@DEDCDHKLJFB@@@|{==?DGHGGFBBDGIIHEB}yuposzACDB@|wtpmkigd_XUWUNKH<__=HKHA@@?DKOQTSLHFCA><<==<;9788641ZKE*9DGGILNNNLKIGB:8=IRVY\^^\[^ckwGE}l^Z[\[SKJOPMIFFHJIIHGECEGGECDGJKHB@CDCBBBCDEEGHFEFHJNNMLNQPMMOQQRPLHCAEJMPSYab\RLLMOQQQNHDFKMPVZZ\_floonnpple\TNJIHHHKNPPPRUW[^]YWVVUSSRQNKIKJGEGHIJJLOPPPOOPQUZ^\WRPQRU]m{~wmc[WSNJIJKMNKE>;8c^17?FMPSOIHHDACGHJIDA@BGMNMPTZad[MGDA??@EMSTTW[`ehbYTRTVRKFEDEJKGFBk\nFPSSUX\^^\\agi\F9?~CGIIJIILT]aekqxzvv~smnrwyyuqjb^^cjswtk_UWagltzujaXT[gmlklh`YSNIIMPPK{BCIT[XN}vnhbWHxvFUbipz~lN9ivM\oKGtb]YWc|IJFCDGICxsu?DFEDC@;rw=nV~LWg89h[VVTORb;?@>9ga_TD==DNZ9EGCDIRX-0222468876789=BGEBBA>;87752[[2678875568999::;=<9889:;=?ACEGECA?=<;<;<>>=<;;=?@>;7ii68:977608:;:74ecbbabc234678:<:51135678:;97667752136:<=:ha%bc2210245433345676557:;:8667775568;;8754454567766899765554567t310/0122110/../00../0220.-.021/--,+&*,*))((*+*))*-.-,+)(('''()*+,-./--,*)+*))**)))*++,+*)+--+)''&%%&()('''('(('&''(''&'((**++*)(&')*$+)()'%#!!##"!!"#$&)++*)((('&%$$$%&'()))()+--,*&#"""$'((&$#&)+)&" !&,43-(%%&%%&%')(&&())*,,*'&&##%'('&&'&%%%$" !"#$%%%$#"!!!""###"""$&&&'))(&%&''&$&(*+++**)(('&%$%%%&&'(('''())(&%%%$""#0"" !$%&&%&&')++*(%&&%$$&')+*(&%&&&).122/+)(&$#" #$$$##"""##"""#$$$&''&&%&'&$#$%&%$"!!"#$$##""!!"#$%&'''%$$ !$$#"!"$%%#"##$$%%%&&%.&()(&&).3689841/../00110,)'')/782+&&**&" !#$#"! !#$!&*+,,-.///.-.-+*+-.-,++,'%&(&"!%(*+,+ *(&%$#"!"#$%%$#"##$%&)+)'%$"!!! !"$%%%&())(')%##"#4$$%&')*)&%%%$"#%&'(**)('&&%%%')+++,,+*+,+'%$$###$$$#"!! #''%&()'$#"#S"#%%&&'))('$#! #%&&&'%#! !#%%$$-(''&$$&&$$()) "  !! $!!###  &(&# 3! V !!%'$#$%#0%#-5778 !! */0 """!!#$$##$$$%#"#$#! #''&&()++,-././.-,+*-0100123563.-02103665443.,.1342+'),,++.01/.133224442/.-+(&&&%$#"$&&&%#!#&'''&&$!!###$%&&')**)#,5:/*)($#!!'%#""&**'%)#$*-/110-+,.122232/-+,./0133579<>>:6322334456::4.-./.-+(&&*-)$"(--*('),-$$1%2<;9:<!"#""#%'((&$#""B@  #%&%%$"@B#$R&''&#!A@>;769>!###!@=;876642-'$$" !!#|%+.0110//15:AI'%B7/-.0/*%%(('%#$%&&%$""&('#"$%$##"#$%&(('&&')++*)+--+*,.--,*&"!#&)+.1550)%$$%$$$#! #(*-2321258.:<:5/+)'&&%$&()))+-./.*&#"!  !$)...,,---29BD?82-+(&##$&()($!/) 00121/28= "%&'%"B"%(*.0//3651/.,*(%!6-1;8* '#&,//..026E5BB?EOV[-+OE>54787%*3=C?73/,+.352002320--00,*))''*1540+% !&'(+//-,1771--/38>@<9>FJG:-),5ENE4--./28;:9;BL**&A<=@DHGA<=BCB=60/4::410/0223573/25886238:6340,-1//357:=>8-$"$" *157:>?:4/)&),**/6:7117>B@=;:9:>=2&%%%&''*4>>82-(#"&*)&&+.,**(&()'&%$"!#')*'""#" !##%%" $'((*,0460'"! "'***+-/350*('())+,*&$#""%'$#"6.:&--++-/0/--045.!#')+.*$ !%),..,'#&,..---//*&%#"#&)+-/2569;4)#%'%%(.29323672*$"$'(()+*))((*,--*%""#"$.2/)%##%'*.46.%!!%'''+01+'&&$"#%'&&()'&%"@? !#'+..,--,++(%"!BB?=AFK'MGFECDGEA<::==::"'(&##"AA@<:85/*4BEFN-*:*.:BCIKGA;8648<826958@?9;E%C3,2769@@@DMRJ?8/.0++.)29=>>@@6-4CE=9CH:/1552/+'&$%&(1;<4021+'&&$%(+,)%&(*.1/(!!(+,388;>?=6,(-8;60./04631-+,/-)+,+)'$ "#FF%'()**)*069;>BFIFCGPUWUOG?;;>CFFDA=9656:@DC?:659<=@EC=72-/6;857840,(%%)-.,PLNMII&&(/65,JFFC?:4+DF/=FHFFF>.";>E(1=K+)A556H45@')&$$&'#=<@$'&%$#!;=7*%-86-*+*&&-0//*# #& &$$ !"" !55,**+ /++,"߀́⁩ڀ󀃁~~ـ׀ʀ~~ 3&τ?„&ԄҀ̀ĿȺ¿tڄـI»˼žüſʻս쀊ʀǯ;߀ƿ˼ك̢Ŀ׉ꈝŶȿ·Èƭ¾ƾŷ¾Ž؀ㅟƷκƦ·Ͽ¿ſ󀅆ɶǻܽÿӹĺրɼɱ퇆õͿο񂏖ĮǷׂ胉戛ၑ H55666mmnlhea`bccfikklll79998onn7khhh43cZQORX]^]^_aca^[YWVVUTVZZWVXZZ[]^]\]^_^][7\]^^]\[ZYTLMTX[^_][[ZXVUTTSRQQQSTUTUVWXYYYXXXZ[ZZZ[\\[Z["ZZ\[YXXXVSRSRQRUXXSPNNNRVVUTRQRSTUVWXWVUVVUTSRQRUXXWVWZ\XROOQRRQP&RSSRRSSTTUTRQOQVY^bgjlnnlkkke]WURNMMMLKLNPRRQQQRSUWYYXVTSVWXYVSPOOPQRQPONNMMMLKKKLKJIIIHIJKLLNOQPOOPQQQRSTSQOOPPQQPPQQRSRPNLLNQQPPQRRTVWWYWRRRQQQPPOOQR_SUVWVTSRSUUSQPPQRTUTSSSRSTSQPRTUUSPPOOOPRUWYYXUROMMPSVWY\[XVTSQONPRRPNONKIGHJKKJJJKMOPPQSUUSPNKHIMQSQONNMLNPSSQOPPQSRRTUUSRSSQLIHA;AOVTONQRQQRQPNKKMOONOOONMNOPQQPQSUVURNLLLNQVZ_djopkd_\[ZYYXVTSRSWZ[YYWVWXWUSQPQRPOONMMNOOOMLMLLMOQSUUVVVUVYYXWVVVSRSUWY\\\YXY[YTRSUY[YWVVVUSQQQPPU.131.*OJHJLOSTSQPQQOOPQONLKHGFGIJKLMMMNOQQPPQQPPPQTWVTQNLKIGGIJKMPTX\^`110/../]\\..-..ZVSRRRSUU%TTSRRQU[\YUSSSTUTSTTVXYYWUSQPPQRTUVVXZ^_[TRQQSUVTSTRPNNNLK OTTTX[XTQQPOQRSTVZ/25640YSSSRRRQPTXWPJHKNP'SY0233222442,)*/2221331//034311234322343F2100/.-./0/011/0233222100110..--.00/.[[/0/.--.00.---..ZW-010/-,.022213420..012344567885210/121-U+.12346642100244432344333455311356776576899:::;;=>>;72-*(&KIFCCDD@>@CDB?>?@CEEEGIKLKHILNNOOPQQPOONNOOMHFKPPNLMMLMMLMNNOQPNKLMKKMRUTPMMNNKIJJKKJGECB?==@EIIIKMMPTXZ./00/\XTSTRQOMKGC>:6432/RJLNJHEBCH+4=EKMLHBADJZkqj]UUROPQMLNPPOJGDDIMOOONLJJIEA@>;7678CQSNHE^FJMNMNMLLMOOONMLIGGMRQNKJGC?<:;:::9;@DCDGHIMNMPUVRJGGEA;77764357899:=AA??@@BGF?9gSCHU^d59=?>>>?-@@;414;>@BCC@?>@EIJHGHHGHIIHIIECCBADD@@CJPQRUW.XWXYXXXYYXWUW[[ZYYZ\`db\YY\__bda\\_`_\\_acc^XUWX[^^]_cdccegge^UQRX_0^^243c`_d3da^XSQUZ\^a`[USV_deeb^^agjidTEM\fuDHGC?;:jZUSJHQSMMRWZ[ZYXXUTSNLQ[d6:9kd``dhihfda_^\[Z[]`cdegjnqru=?>vmgcceggec^\`ed_[Z[YVUX_`abceb[TQPPORP82>-ZRntspp;>@CEECBAACEFFHKKIFGKPSRONMKIFDDFJKMLHDB@}yy|}BCAyvx8)4<*>=:<;61058;>@@ACC>:;@C<_PY;LY``^_dedefca_^]\]^\VNLOONNOQPOMLJHlGDBCFGHJLMKIGFFFGHHHFDDEEEDDFGGHKQWZ\[YZ[YWWZ^a`[WW[aehibYSSRRQLF?=BKPUZ^`^ZVSPOW_cdhms{wf__^YSPNNOPQRSSRRRSQOMLLKIHHIJKJIIJLPTVX\_^\WSMIFEEJV`bb_YUTRPOMLLKIJIE@;:;?BCEFC@<;;:9;;:7568=>BJSYZZXQJFFJQZ]YRKGFHJJKOUVRLHGIJGDA?BJMKKMLIEBAACEGILOQRRQONOOLIGC|}sjsCFF DEKNQYdh^PIGFD|}xrqsrvEHEwuwy}unmotwuooqrurklomrz}xw{~ugefp{}{Ihisl``ltpfekqrlaYZ\RDEWr{_Ufywl`[fv}k[WY_eedbaZQNOUWPM[gaWQOQRRPMQVWTOIGPXQFN]_\dnmkkmutlilpmbYUVZ]`caWOOV[XOFBH[kqaJvd`vGFDGIGHQYZ\bhnrrsvz~ofcehhe\QQ_qxxyyvrmlnruz~~vootxwvw{xne``b^VONONHpxmnzGQTOGvmgfjossk_O@qyJYbaXRSXac[U[]SGDFHQlCIKNNJD@~}zAJNKFC?<?<95e6>DEA;7d[SH@GX]WON[6=CGJJN-46786547:<>@AABCC@><:741YTX^__``_0246558:;<>==>>>?@BEHIIHGEDB A@@?==<;=@A?;87778875565578998643U22234556776556899:;:96445787558;<;7gcbaabccb``13443344456775458;=><76898558:<<;;:::876567886445334431/./0/12334444452001,'"!#'**)**+,,+)('& (**('()))+,+*.+,,,+*))('(()('((('##%&())(('&&%%%$###$%&'&&'()**)()*++*))*(&&&%%%')(%#""#%''&&$#$$$%&'(()*('''(('&&&%$$%'))('()+)&$$$%$#"#$%&'''&&&'())(&##%')+/245543451-*(&#""#"!! !!"!!#$%%%&&&'()*)(&$#%&&&%%%& %%$#$$#"!"!"#%%%$$%&&%$##$$&"'()(&$##%&&%%&'()+++,*('&%$$##"#$%&_'))*)(&%%&'&%$$%&''&%$$%&((&%&'(('&%%%$$%&()*)'&$"#$&'')**)'&&&%$%''&&&%#"!"#$$#""#%''&'(('&%$#"#$''%$&%'(&%&&'(((''(''('%$$$" $" """#$?%%'(('(*+,+)'&$$%'+/269<=940.-,,,+*)((),.//.,***(%" !  !G"##$&)+,-.///0110/.--+)))*,,,*)((*(%##$'(('&&&%#" "$&&&%%& '&%$"! !"7#$%%$$%%$###%&&$#"""! !""#%')+,,+++(&$###$%$$$&*+*('&''('&'()(''&'($)**))*+)%#$$%&&$$$#""###""!!#&&%&('$#G$%%%&''$$%%%$##&)($! !"##"!"%((&$"    +0 !""  T# !#,1.&   "# g"  !#$# !2)"%,14     ! !#%&%$#$&%%$"!!! "" !&***+,,+,-&,,,-///.//146520034456400121//0111.*(*+%-///021123343.&" "&$"'$#''''%%&*,)*&$%*-..-,,.2331' &/3<#&$!/'$!!!"$%$!!"! #'*/.--02210/0122345788:;6312355430.1430..00-+-00../01243/++*))+)3-::632"#""! !"#%%&))&$$&),,*))(&$##%()*)&$#"A>>@BB?>A"#!=<=;70(!O!'($  !  %((&!($*)264112445531/(10+&&()))*+*)('&$#""!"$&'))('%$$$%&''&I'&%%&&'')-13432221001355311368860)$#"" !'+.23420-+((-3568<@GJC7121.+('&%$"! % #%'*-..-+)&%$$'.4542/,+*)'(($ !"#%%$%(+.-+*)('&%$#""$%%"5(&%()*-23129EPLBAUI)*)+/35550)#!&*,-/025630/23.'$&-461+('()+-.1683/.,($#(-1359=><842/,-0102`43./6=9432249>BDCB?<8655668;;:989:9511221//..---./2358;==;74212366115410110/-*'$#"  ',159<:2+('()*+-19?<2--//.08BG>.(&'*./5?EA<71($%)/33342-'#"#'))('%#""#"#'++'%%! $(*(%$&()('(),045.% !! %)*,-.0132-)())'$%))$ !$(,+'%#7.:%*.131,'&+169;5#0$),-,*'&'())*($"&.21//-,-+'##&,00-)(+04697.&$).*(-574000/.)%$%),+*+,+(&),.+(%! $*...,($!!#(-/-)$"!"###',-*&##%&%" "'(&&('&$! !"$%')+--,,*)**'%%#A??AA:49A#&&$EE%()*-471)$$#$ECFKLLJFDGGDB>;;<;;:89="$#@::988;>=:;=>>:5699;AB>=?ABBBDE?6459@A>AJ(C23:824>EA:7:<;83.02+$%0AMD2,7BGF@80.6@@CGC6-,/267544/)&&*-'%/85.)(*+*('+..-+&%-3,$(23/4;;9:<@@967;:3,)*-1342-((-1.)$"&1<=2&@64B('%&'&&-3447=ADCBCGJLNORQJ>88:<<;70,2>GHIKID>:<>@@>>AB?94453.*)+,)JHG@:;A%,0.)JFA=;5-'FEFEB=9;?EIGED'EEEFGIIJKKJLOPONOQQOLKLMOOMJIIKMKJMMIIMNPQNMMLLNOOQUVROPQPNNONMLKIFDA=9730049=AFHLS[0110//00.ZXWWVURLGC@>==;72XPLHD:14=E+9GLLMKGDEKR[_][WRUWQJILNOOONKKLKJLKJJKJGC?==<;:9;;=>?BEJMOOLJJGD@<::73245679=>==>??>;986hcZVX]ae7;;<;9;=?@@?@ABA@?@A@?ADC@@CEFFHJIHHHJLLLKJJJIIIFB?@DHJKNPPONNNOQQRSUVWWVVWY[YXXWUVZ\[\][YZ\__]\]^_`\VW\__^]]]^_^\]bghih`MABHUb`SQZ^[SP\443f\QOXad`]_a]TNQX\\YUPLNSX^]QNW^cq~A?=CHILJA835>INL:8'$*R2+(0;CLSUSSVWWURMJIIHGGEA?>>>?@@??ACFHJKJCk_9KWYZ`hg^WVZ_][]`_]XOEDHJJOV\[VPMK KLMKGCBCEGIJKJJKJ^HGFFGFDABDEHJLQUX[\[[\[ZXWWYZZYXXWWWUSQMLJIJMNLD:8>BBCDEGHFCGPVUSSVZainprtuxxuqkc]ZWVTROMMNPSSRPNNON+MJKRWWVUTTSRRQPMIFIT[ZXSNKKJJHFDCDDEC@><<=?@AA@?@ACEGHGFGGJPO@R9G`msx>>=>BB@@BEFEDDEFGE?:HNOONPOIGJPSROMKJHFHKOSX]ZOHFHLLJJLJJOSVYYYXTRUYYTPQY[PDAEMRRPMErbkANXZ[cjhcdipxwfL;>INQRSROMMMNSY[[_gf]XWVTSQMMQY^]XRMFEPermaVPPRTPKNV^bcb_\[`aZPGCFLRTWZXUUVVURMHB?@DJPW\^\YTNJIKNQRROIEFKLJIKMOPQPNMJDA?wxAEHKLKGDEFHKKIFGJMNMLLLKIIIC}vjkz}yF|xKKKU]XNJGB?>{{D}wtrpsxwqpu~EHByvwvrnmfX\wOof_WYrEGGrgfkuEEEDwlb\Zj|vrqqm^UY\QHSdpwwuh]VSONR]nshajvxsonj`ZfFxeYSIFUgmfa_]ZWQLNRTPIFDGLKMSWYYXWWSJDIMQ[c^VXdrwlbccenqeYVXVQQSX`a[VQPUTE9@KNZzjJmX[ejxITPLRVTSTX]bdfhgekuv`VUY`fdZSU^fkquvv|z{skeba_]^`_ZTOKKOV[ZPEBDFIJGB{usrsw|}ysoia_a\RPW__XRPPRUO@lh7CUeyFGFC{qq|FMVXOC<@EJQUUTRPIA93/5@B7.]6???@BCA?>=;73_WUXYSMPVYWY1568;??ABBBAAABDFHKMMMLJGEDDDCB@??@@>==>@>:756777643345789::9886334433467413799:;;::8522368:<<:86hghhhgfe34543579989:;;:::;>@@>;;;:98765565556778874h577o224333224865585321/021-*)('%%&&'*+*,-,+-.-,*(&$#"$&''))*)*)('&&''&&&''((())((&%&'()))(&&&'()))('''('&&'()()*++*)**)((()*+,+*(&$##$%&&&$*&&$$#"!!"#%%$%%%&')))(('()(()*+*)*+,*(%"!"#$%&''&%''(**+++-03552/../-)'&%$$#!!  "#$$%&'+-,)'('&4%%$##$$%&''%$$##$&'))(%" !""#""!  !#$%%%&&%%$##$#"""#$&'&#"%*.122/-*'&&'''()++--,+))*)(&%%&'''&$#""$'(*++*)(%#""##$&''&&%%$""$&')*'$###%()(''&$##$$#! !"$&'Y()***(%##&((&#!"$&'''()('''&#""!  "#)+(&'&#!  !!"#$$%&'())*,--.--,++,-.133.**,,++*)'&')*,-+('&$" ! !"X!!"$%&(*+++./001210.-,*('(+---.-)%$$##$&'&$$$" ! !!#$$###$%$$$##$$$# !##"C#%&'&%$#$$%%&'&%%&&%%$#! $(&%&('%%()'')'$"""#%%%$#"!"%+,)%$)%&%$%'((''&%$$%&''&')))*)(()($"#$&''&%%%$#$'))'()('&$###$#"#$$%'&$%6#!!#%%#!!"#"!"$$""% 6(('(  + ! #! #! #$"! ! !#j 430./135 !!  !!" "!!"""$%%$$$%'(''&&%%%$" !#%&'(***)((())*+',,--,+,-/10011//221121/./00/./000-*+.00/00.-/35665-"!'& "%$ #-*%'-341/01/*'(,./-+)'(*,/-''-039? 32541+! &&%'))((*,-,***(##(.//.-/0//010/-.//0110/--255J42/-,-/00/+(),,*.36888;:875441-,-..-./.*(",&#.0,()!#$#%(***,-+(&&')+*&##$%%$=%%IGEC@=?#%#@:5/(""!$!')**+,+)&"6!"#0+'/0/2782..131/010/-(!!$&&*.10,)'% #  "$%''(('&'''%##$%'(),/24544432101233210.,+)&#  ! """#$%&$!#*..,+-06;=>@BBCA=82,'$""!  !  #')+,,--,,+*(%"$+010,9)&&%%%$##$$%#! #)+"(#18:; ! !"$%&('#""! * "+11/.--/277.,-,**)'',/.*(+02220..2694+'*.11/.//-,-,)%#%+/12210.-,*(*.21-+(%!;&++)()'"!#'++)(''%##%&)-0/'"!$''%&('&*.0110/+*,9./,)*/1*""'**)($9/5!)0237;8568;??5$%())**(&''&),--054/,+'')-11.+'"!(5><2+('+/-))-0231/./24/)$"#&((*,*(()))'%#! "%),...-*&##$&())($""%%##%'()*)((&" 89!#%''$#$$&()'%%')*)('''%&&"?AFD=55>A@F&HA>F)(&*/+$#"  AACFGGHHI%FB><:89<<868="%"<;==<<>;12AR,H72/**:%&&G9248B@<5/-,)(*3?A718)@B>:971,3C&KA4-,&$,9<74310.)&'*,+'$#&***.0//,&$),-263--4>A;5776;=6-+,+(((,341-*(,+"%(0FP;'9-/6:A(-)&,.,+-1688:;;:9765422551.,+*+~.22,#!%()(%FBABCEHJIGEA;8:80+08:50/1330(CC$+4<;:9998pmjfefedffeffc`][YZ]^\YWUSRQSWZ[]]`22b^[YXYYZZZYYZ\\ZZZXXYXWWXYZZ[ZXXY]Z\\[]^^]\\\[[YXXYZYXXYZ\]^_`^\Z[]]\\]\ZXWWWXY[[[ZYZ\_a_[YYZXVTRQPOONMNONLLMMMLMMMOQRRQQPQSUUUTUQVXWVUTTUTRPONMNPRTWZ\\[[[ZVVX^h7::ri_ZWVVVUSTTRPNMLKJIIHHHIKMNOQTVUTTSQPPOMMNOOMLKJK\LLLNONMORSSRQONMLLLJIHIKLMNNOPRRQSUTQONNLHFFGHHJMOPQRSTTSQPQRSTVXXZ]`ca]]^]ZWUTVXYYZZZYWVTRQPOOMLJJKMMLNQQQR;SRQPQQPQSWZXTSSRPOOPQQPMJJLMLKJJKLMOPPNLKIHHIJKNPRTTSQNMNOMLPVYVPMOTYYXWXWURONNMJIIIGEFGEHLLH@6:GPQPMJJNV^^TJ?35IOHEFHLTWWY[][WUSPOPSVXYXXXYYXXWUUW\`cgjlorqld^XTSTUVUUUWZ[YUQONOPPPRSUVUTUXWSNNMOPNMMNNORTVXXWUSRTVUTWZ[ZXXXVSQRTVXYYXUQONMOOONPRSQPQV\[VRQPMKJIHHIJKJIHHJMMMLIFEFGHHIJNPPOONLKKLOQRUXYYWVTSOKIJLOQV^242.WTTUTTVYYTF7;NZ\ZVQOPQRRQQQPPPRVXUPLKMNMJILMNSZ[ZZ[YWTRQRSRTWZZYXVUUVTQOPTVWWXXXVRONOPPOPSWYYXXYYWTQOOPOOPRVZ.000//.XTTWXVRPPQRSTTQMLKJIJLMONP,13N1/.02440*ML)-021.-02454346630./00//00//.-YVTUX.010/...0233210.-./000/01/-Z-/21./121/-.02441-*+-./010\[.01221//11/--/1210013565331.,.01/--.021.,,.1333443234443223456543211356410123578:98887766679;=>???=:4-'$EmB?87AA@@BGJJGCA@ABDGHIJJIJLMOQPONMLJLRSPLJKLJJHGE@=<>DKJD=:;99<=8321^0149<=><:96aXUTY``_aegddfeec37:<==???@ABBCEC@?@@>>@BBABDAADFFGGFFGGGFB@@A?>>AEFEDDDGJKKLKIILPTVUROQUWUQNOOMKLMPUYZYYZ[[\[Z\_cdb`affbabcehihhijmmi`UNLNQX``[[\][ZY^d3hbPDKW]^]]][VQPQSTSPMIGHIMOIGPX[^dkole_`ehg`PFHMRW[^_\WSQSSPQVVTZabc4688666544555hggfda_^XRS]cddefeeggc_aeeceggfe`ZY^ba\VW`efgfec^YWTRTW[]YVYMS1WEQWZ`37:<<=?CEFEEEFGHGGGEDCQBBBDFHGEB?{z?@AAABCAztsstvy{??>sdXQJFE@?FLMNIB:768AJH>65;DIIDBC@=@IPRPMKJMOPOONLIF:EFHIJJMOQSUVVUTM?m@OUTTX[WTQLHIJOUYWUTTTSSUX\ac^WRQTUQICDGHqGGHIIJKMNMKKKIGEEGGFDCBABGNRTUWZ\[ZXXYYVTTUXZZXSPMIEBBBCEEEA=?@A@@BEGGFDBBCCFLOErZKKSaQWRRTSV\`]RLLMMHAtjqBHE@>;987520ZK9*@50,*POS.6::;C.L=PXVTUWVMGNX[ZZ[ZZ\`dfdbipokgdcdghfe`ZUQNLKJGC?:>ITZ]`dd`XLEHR`hlvuh_[[\`daWG@I\ioqoid^[]ciha_``^[[[YVVUQJAEMUZ_abcegijllkkje_WOMPTUQMLLMNQVZYVSPMIFDDFGGHGGGHJKKMRVTMHGHEB@@BDEQ>T[]bge^VQRTUUSOOQTVXY\enne^]aeddbXKFHNUYWQMLLMQTTSQRV[_`a^YURRW^a_[UPKFAyw?HM/KIIJJIHLSVRNKIFDCEHKLMRVTQQRQMJIID|vyEOUY[WPRY[YWRLFDIPSTQIFNSSME?;qlc[g>EFDAADEEHLJFDDFE@::>AB=;AGKMLFDHMU/330.17<>><;<=>'ADDBA?<976c[\_`__`a127=BCDGJJGDBBBCCEGHJ IGFFFEDCBAAA@?}=:889:::86311234468:;;:70Y]12247999=>82369;;;:86654334689879:9866789998767::98876543211244566423566678767;>>==<<;:9988776556787656898202 5530010//0///.-,*))**'%$#%')***,-+)(''') *)(((''((''(''((''() **)(()))('&'())*++*)()***++,+)())*)+-.-*)'& %%$##$###$$#$%&'(((''('(('&$&'()+-,*'&'+093-*(!'&&%%$#"!!!"$$%&(*+*)(&%$$$""#$$#"# $###$##$#"!!!"!"I! !!""##$&&&')(&%$#"   "$%%%&'''%$$%%&)*+,.020--/.,*('(*+++,,**)('&% +$#"! !"""$&J''%$%%$%&(*)'&'&%$$%&&%$""#$#"!!"#%&''%$#"!!""$&'())('%$$%$##$%%'+-*&#$'*+*5(&$##"  ""!#')$ "%%%')('&(*,-.-,-..-,+**+/259;> !!""##"@<<==>@A 6,$  ! "&'%#! !"D!!#&'))*+++,) 6!,0-,./-+)%##%(,--,,---,./3661-)(**&  !"#%}&&&'(*+*))*('&%&'&%$$""%),./0122100120///01/,(%!%+/3530021-**-033212689;;;962.*('(&#!!! #$##"! !##$%%$#"%')**)(&)(),020,)'&&%&%$#"""#%((&#! "&"9,%'-4D,/,+,,.132,(())&";58"&# ' !""!!??B$'))*./#,/-**-.*&)13210..0268648<;8655688641.+)'%%%$#!!&-013564/($&+49;@EE?60..0363-#$06998530.0498434432343110.)JDC"$',/23223457899::84.)(+..+('()+,0441/-*'#)--0330*'(*+*)&%')+,,.3993/.14331+$!"&*-,(%%$%')))((+.0110,)(),/0/-*'&$ :9%)'$$$%$"%*,)'&$#!!!#%&'),+)*,,)'&'#?;=#).02/+,120//.-*&" ^#'**)%16$-138BLI>9;AC8+# "'*,.,(&%##(.220//...-++-265/*(''&%*240)$$%&&$#%).368:>=6022,'(*+-.-+*+,)$!"" $)-0,'" "%(),+(%$$#"w#'*+*'$!!"#%&&&'())('&%$#"!"%(%#$#""$&'#=>BA@BEFB@DEAAD$%%'*)$"%'$!!!CDEHK'(((&E=779:;=<::=CFB>==;70)*2?MS(F<61/6D'('$B?B$&%$E@:786.-5>EE;52201996:>943107CGD:1..-(&,6>=3-18AMN?48@<32762-),5>:30-)')+,02/)%$$$!"*00-,+,10--..29702;?=6.)((&',.-*(&$'*,.12.*+/,''))).2,%#@=<85?T<4,',8;3,)(.9CMPMKIFB<; %*./+&!<9507"%&$!!"""#$"   +'(+,+*)* !##!% !"##""##"!!!  %'퀇选ĀȀ䀇~}~쀃ǀɁÁ 'ÆŀˀÿĿπĽĺ¼ϵ%DŽ`ľτ̀炑󀅆XŻ󀃅ƷĿžрŶɾø"ĵ÷ž˝쇐ѷŋºƲżĿǿě򇋂ƫ݄ɺ{þ¼ƺƼȵεЪꓰýúÿĿŸþȶ¶úķǤŔüӿſĹùȭꄷѻľ‌2 r6689:;==;8766678:=>?@>===:9:;986ifdcbaabcc`\ZXUSUZ^12YQSUUSPPQRSVY[]]\]__^]]]^^`aba_]^_^\[\]]\\\[[ZYXWXYYXYZ[]]]\]^_]WW[\]]^_s```_^]]^^^]]\[\]][ZZZYVTRSTTSOMMNOOOPOPPPQPOONMKKLLMNOQRSSTUUTSQPPQRTVY[YWWVTQOOPQSUVXYZZ[]\[\__XQNQZellf`]\ZXWURQQRPQPQPQRTX[ZUQNLIECCEGHHIIIGFFFEFGGGIKMNOOONLLPSTUUURPOPQPNNMLJIKLMNPPQRRSTUURNJIHGFFGILNPQQRSUVXYZZ[\]^^^\]^___[VSSSTVVWXXY[]]\\\[WSRUWWSPNNOPQSUVVWVTSRRRQPOPQRRRSSQPQRROKGFEEFIKLKKLNMLNOONMLKKKMMLLMOQSTTUWYYUPLIGGHKMOQRRQQRUY\[XVWWUSRQPNMLKHD@;:?DEBBGIFGLRUUSPLIGFEBAB@GL@/1=M[]XVY[XRNMMNPSW[_abcdb]XVVY]`cdfjmoswzyrha\ZYYZ[[\\[YXWWVTRPNMMRUXXTSUTQNMLMNMKJKKLMOQSUVVVXYXXXWUUWY[]\[ZZZWQN:NOPONMLKMQPIFJJIGFILPUTNJNOLIFDDEEFGGFEFJNNLLMLKJJKLMNQQOMKmJJMPSVVUTRQPNKJLOPTY[\[XVTSUXYZ[-YXWSOPUY[YVTSRRQONMMORVVTQONOQQOMNQRTXZYWWVVUTRQSUWY\010[YYYXURRVXWUUTSSRPNNPuQRUWVTTWZXTRPONMLNT03420---XVV,-YTPQTTSSRNLLMLJIIIHLQV.232/--.011,MCC'/52-,/135544541///0112330-,XUSQQU-01/XUUX-010/./M.//..0123212454320-,-/0110//010.-VRRW\//.0354322244420/.02554211245520...01110 1343345677653#233311368764213567:===<95335789:;<<=;70)HCCDE]FFCA@?@ABAAACEHKMMJHKORQOKJJLLKLLIHIIHIJJKKJJMQQNMMNNKIIJLNMMNPQPNMMMLJIIE@=<96335799:>BFIOV-.--..-XTSTSROIC>7/UP,8?=:527>EMTY.-.0/YTQMHDFMRTSRSURMLMKKHDBCFFCBDDBA@?BEGIIFCBBCCEHHHIJLOOOQRQMLNPRTTRPPPNLJKLJB86@PRKC>;88;@?:;ADBABA=:::862ZUW\17=CC9b_]WQNLS[,`gknme][YUSV\_1358:<>???=>??>???@@ABABDDDB?>@qABCDDEFB?AB?=<>ACA>:8>EHHIHD?AGKOQONSZ\XSNLKJHD@CLRVY\^acccaabeikgccgd`bcdghhjjgc_\YVSRRSRUY[]_][[VWa7:8f\X[`ee]SNPRPNKGEGF@CNZaacjppnidcefgcVJB;8=BHIB98B0V=EIQ`9@BBABDGJJIHGEEFEDCDCA}|{ywxz?ACCA=;=AFMQNHCBCDCA~zxupkidXG3>:0EKJGGJLG:3;EKKKHC@@CJV_fcTEACGJLOSTRPNMOPOKJJMRVXWTQPOOPRSSQOMHA@HPSW[ZWVY`de`\ZVQOMMNPQTWYYWRLHFIPQNKIG/HIHGHIHGFGHGECBCCBABCEGHGFKV]_]]\\\]]]^`]YWUSPPQNHCA@@ACDEEDCDLTVUSRQQPPOOQSSQQVY[\]afhgbVLFGWjqkecb_^^_`a`^]]__^\[YVTSRRPOMJGECCIUbjg_XRMHD@ABDDEFGLOMJIHHKOQQQRPKGDDDC@>=<<<;<@HOKEy`I:oRCTRONOWac\SOMLKGmjxEG@ulfdg579;>AFGB<5\NCL]9DHHJLHM[eaWSUUPIGKPTWZ\_abbehrzvuwyvqlfb`bfijd\[]ZTSY]bgg`VT]cciwwk-jljd_[XVXcpqeXTTWctytnmnptuc\[ZVOKLPTVWVWUSV\dijie^XXYWTUYWROOQRVZVMIGCFNTVVWUSPMIDCGKJHGJKLNVa56`I65=CCBDGJKKS;NU[bbXPOPRW[[XSRTX[`eilkghozzkde_PEGPUTSV[]YVY][VSSTUTUWVUWURSTQLIMQPJD@z>DIJLKFCBCGKLJHGECA@CJOJGRbaUUVOCuvwxDMU]`^YZfqk`ZYXYYTIJTWVVTJ?u=DNX_ejoqnjlpnhaZUPOTX[\WJACKTZ^_[VSRRUVUTTTRMGB@DHHHLRTQMLKFCA?BHOSUVX\dijidckleb^URTX[]\[^a_WNIGEDKTVSQRUXXTPNMKFBEOXWLD@BFHFDDIVdbQB?EJKONJLRTSTTRMIGIKLOPI@?BCEHKMOSTODzz~|{~{|DLONMNLHGILOONKF}JKzvxxvx||xux~~wlhig_ZZfz~xxwuquMPJA{@EIJII{tpieda\\cfaWTXVNOZ_`hppldZWamrqmkkg`YQOZicY`d`clwzkdbbc`[bk`U_qsjaYSS[_YTTUZ\ZTLFJPPOOMJJPVX\gqmdbc_\[^a^UPPNKJNMHDHQUTUWY[[XYagljaVR[`S?2L9gkqBCGLH>@JMHCAB;34>EC@DJJGEIOOIIR-15885248:;;<<==<<>@CEC@?>:643edf579;>ABEGHGHIJIGlEDBBCDEIKKJKKJIHHFECBA@?>>>==<:89;=>=:532234456778998765541137:;<=:5235899742356545687668975ik7:<<;98889:::98 75dab123432345!68:;>?=<=><98:<<;::99899:;:988998F 220/--../.-+*(&$%')&"$&&$#"###$&(***+* +,--,+,-+*)*)))(''()('''))* +))***)&&()*+,,,+**+***+*) +(&&'(('$##$%&&%$$#"!!!""#$&:'(('&%$$%&&')**)))(%##$%&()*++**+,,,-,($"$*0441.,,++*)'&&&'+&%%&'+.-)&#!  !!!  !"$%&&%%$! !"! !"'#"! !"#$%%%&'()))'$"!  !"$$&&''&')**) *+--,*'&''(() *,-...-,)()+*(&%$%%%&'()*)(''&&%$%%$$#""$%&$" !#$%&%%%$B%'()***+,,*&#"! !"#%'('&&')+,,)(()(&%$#   """ O!&(%#%'&$##$&(+.13445541.-,-/23469<>AEGE@:40.,,,--..--,,,*)('%#"#$%$"!!!  !"#$&()+,,,--,,,+,-..,*)))'#!!"##""!"#%% "" "! !$$" !"$&&$#"1!!"$&''&%$$$#"!"#$%'(('&%$#$%%&&&&&# #%&%$###$#"%#%&'%"!!"$$#"#%%&))(&&%$%$##$%&'(('h&$$'('&%%%$$#"##$$$%&'('%$&('%$##""!"&%$$'$#$&'&%$! !!! !# '%#!!#&$$%F$!"$' 6! &!"  "! 0 ! !" ")$"#& /01-*()-259::840..,+-01  !"""! !"##"0  !""" #%$$$" $&()((+020-+)('&# !&+--/12#111356411320011221231.*(%#! "#%&L%%*.+*-144/)&'((*++***)'$#$"")02127::8521122.'  !#&%"#P)(&$%)+,--,**.11///02233578645551,(*/0.--,)&$$&'&$" ) % "$%&&%$#$$$#a!@?>==?@!"##!!$)+)&#"$%$#C@><731.(%+/," """! !!  "$$##%&'(''$ &+,/10.-0576200.+)(()**+-..-)$! $('# #%&&&%$##$$$%&''%###""#$%%&$"%,1221001234676310-*)('&%# $*/1/.,,--,**+,,]*+-011246650)$!&03/,+,+**+,,+)('())*++*)()**)(&$#!!$*1562.*'$! !"""#$'))'%$$&((''&%" '%#>2';.'0-*((,484.*(''%A74=%&!:41/.+*'.9#)+*,,)+4;7/,,+'"!%*,.02344468=GONE@>=>@?;863237:;94331--023772,,2569CIB979840/-+-3:<6.**-5@B>::;=?FOOA62320+()+-///0/-,+*+/356651.-..+,..+)*,-02/(%$!"',./0/-*'#!#%)-11+&%&(+..+('(*,03565339AGC9440'!"(,++,//,*,-,)())*)*++**))*+)%#%((&"<"%%&%"! #&&$#""!!&*($*54--/+#;51/../*#"),*+*%:$*046:=?<99;950-*'&),-.+$ %+.00.+)()+,+**+)&" $%%(,.+'''%#! "%)+,-.0589855:;651*'(*,---/21+%"""!%,-*))+--*&%%%# "(.-'! "#"""$.76+!#%&((%&+-,,+*(%#$$%()$ !$&&(+,)";=@?>BD?="(*('(&! #'*+)(%DACHO*+UROJB;8999<@@=;>BB>8699512:HMF@??=9 #'(&IK&KFA=:655411585/-0/+-4548<<:60-3;=<87873/*(1:4,/103:BGA843232/47/(0=>72-)*/30-,-010-'#&++**)&&*..18>;5441/.021+'(&%%)($!$)++*,.11/.25750)&)*#$ BGJ&*5I,/10*#!&,16:642.,++07?DFEGLMD:558>CFEA=;::;@A@<:97jfcabdfgeFca`\WTOIIPW\a442a_^]ZURRSTUWWX[^\ZYYYXX[]^][[\]^]]_abcbbbcfgfdb^[[[YZ\_7^]]^][\^_``aaa`__abbbcddcba`_^_^]\[[]^^][YWVUVWXXVUSRPPQRTTTSRSRRTUTSSTVVTSSTRNMOQSVXXWXXUSR UXZ]^^]ZXWVUTSSVZ]^\[[\ZURQRSUVVTQPONNOQRST SQOLLLMLKJIIHGHGHIKMOeQSTVXYZZYYZZXVSPOQUZ_]WSQPPOKB:?KQQOLJGDEJORSTSSVXYXXXZ[ZYZ\___^\YWTTTUUTPMJIJMQSUTTTUUVXYZZYWTQPPQRST SRQQRSSSRS TSROMMLLLMOPQPNMMNLJIHGFGHJLNNLJLOSVWWTRQOLKLMMMOPQSTTTVVUSRRQQSUVURPPQRSTSPMKHDA>=>=;::;<@FIIHGILQW[XNJIFB?=BLVZXSSW[YUTTTUXYZ[^``___`^ZXXXWW[_bgmrtvusme_]\^```^[WUSQONMMMKJKLMNQTTRNJIIJ +KMLKLOUWVTRfPPSX_efc_ZWVTOLMNOPPONMLLIDDFKRVX]`^\ZXYYSLJHFFGGFFEGIKKJJJKKHGHJLNQRPOMLKKJHGGHLQVXVSQOMLMNNNORVZ\_/\YZZZ-.ZYXWSPQVXXUTRPNOPSUSOMLMORTSRTWZYXWVUSQQSWZ[[.011/WRQPOPRTVUTSRQPPPQONPTXYXWVW^a]XTPMJILQW\00/,VUUUTTTQOONKJIHIIIKMPPLJKKJKOSX/1/,+-/010/-*P),-+PR,/25542110/.../0220.,WURQSTUWZ.ZXWVV,./010/.--,,-,+,.1320..02344332/+,.//01M20.,VTRTXZ-.//13321112221/-,,/2331..02332210/0112110/./012223578852012210/0136 55544579;;975W6678::;:;;<=;83,&FDDDBBCEGIIIFCB@??ACFIJLMMMNNMJHJMNMNPPNKJHHIKLLNMKJKMPQPPOLIIKMMLLNPPOMKKJIEA>;85348:<<:89@HPUX---,XWWWVWXVTSROLMPPOMJHFD=3+0>AEGFEECAABCCEEGKOPOzNPPNOSVSPONNOMNROE;8?JSPHC?;:A=6eeaYRMJOYfq;;<:lc[RQVZ\a21`38;<<=<>??>?@AAA@??AABEDA@@?==>@AADGHECEILKIGEB?AHKKLONJHIHHMSWVUTPKKLJEDJRVXZ]aegijiijkkifccefeedeecceea]XUVVTTVXUTWZZWUV[``bhkifddfggb\YWVUSRRQQPMJGC?<9:BKNG0>Kf::40;V8=?@ACDDDEEDCCBAABFJJHGFC|yy|AEJPTVVVWYYXVVTQJD~}zvqkd[PEBDFJKHFFEFEEHHFGKNOOMH@76@PZ[UMJJKOSUVTSQPONNMKGB=>CHJIFA>>@><;=?=BJRUTJ9SL^Cbz@?ysnkigfhhiihfedccca\XVUTTSPPRTUWZ^]WPKGCCHNqPMGCDGGFFECBBEJORVWSLHGFC@=;<=<<<=;98:?lRAnh?UiwBHPUUO{{{z{}{~Avqojefi7:=?A@=9F0;?CHLMLIGM4DLRWVUUYYZ`gkicaekrz|snqx}vqni^VW_b]]frsg__^YSPOOOLLORSTSOMLNV_dd[OHEA@ELRTOFCBCINOLIE?z>ADJMNSbqqd[YSICGIIKMS]ejf_[[ZXWY]_]YTRQPRVUNC;>IU`koljkllpuvpigf`[\_ab]TRX^`bca]XSSWZ[YUPLIFCB@>}BEHKRWWTNIEBENW\ZURUZ\\_ejmi`[WRSW[\]^_`^[YVSOKHIKLIEGQXYXTOJF?xI^ji^RJEEFEA>@JSSLEENWWRNJHHILQWVOMQVVQKHB@DHHJMNNLMQVULsnhl{EIJJIJNUZXPG?{CLQNGII}{xuv{|yrkilopmknoke_\^\V[s~{|~FEBBEFCEHHGzvzylc`dkj`WRSVTOPZgnkaYSSX_cfkmheghc][a_MAHLC959LerootvogjrkZLN`rula]`a^WSW_ec\TPSVTLDEKPTYYTYcd_\_`[VX\ZVTVVSMHHMKJOQLMSUOIGK]zt]UX\[UPLBiXXaimzGMNOQTWWURNQVZZWTUZ[WPJGLYjx}shiwzmmrsqt~uomnozolihikjg^RSdspbZXZ^bca[SLIKOLGEEyqomf]\a^L<9AMUTLA;<>ADEJXoEKSZYVTPHA==>vhZVcANOMF>>CFEB@?>@IPOMRWQFBHNKELW/478989;;;<==>>?BEGEB?=;7f]Z`h8<@BBDFH\IGDCCBA@?==@CGJMLKKNOOMJHEB?=>@?>>=<<<;<=??>:63444346788:<<:765641/1578:;<97689987664454346676445iijk667787887.6664dbc1122334433345778999<99:;;:::99;<;86787 +F!" 0-+*+-/00110...---,*'%"$(,,++*'$""#$&'()++)(''&'()+++*)*,---,-/0110.+)(('(*+*3)'(*+,,---,++,---.//.--,,---+)))*+++**))()***)''&%%&'&%&()'&&'()'&&&$""##$&'&%%$$$&)+--,+)((' (('&%'*+,+)*+*'&&'()**)'&&%%&'''(&$#"###"! !"#$%%$#$%$$$%%%$_%',//+('&&%#!%%$$" !#%&'&'(**)(()*)(()++,,+)(&%%%&%#! !"$&'&'((()*+,,+)'&%%&''(('&&%$$$%%$%$"!!!"##$ +%%%$$%$###"#$%%$#$&(*,,*)(&%$% &&'''(())(&%&&%$#$9#! #&% #&%! #&'%&'')+./2465462/.--,-/136:=?@AA=830/-,+,-./.-,*)'&%$%$#"!! !##"! "$@&)++)(('''&'),0330-*(('#!"#$$$#"! !"#&(''%$%&$   ! !  !#%&&%#"! !$'**(&$"!!"# %'()*(&&%$# ! "##"!! !""!!"$&%#! !"$&&%%&(('!&&%$##%'))(%#"#"#$&''&&%$%%%$U##$&())(&'+-+(&#! !$(+%$$$##$"!"!  "##  "$ !%%##$$$&''&%$$  +$#"#%'/   +   + ! !!    !  "!& "11.*'%%'-6:73.*), ..1.;  "! "$#"!  !$'&$#! !%&&'('%$$#$%$$'+,r)%%'&#"%*,-./1355665666431234443321010-*&$##!!"#! "$$" !%))(+-...//00.+*+++*(()+*(&$!$),./38<:63110/,'" # $%&&&$#?))+,-/0233222346:=;7674/*,.-)('%$5'!#$#"! !!!"%('%$$#C@??A"$'*,.--.010...,($EB?>=962.(!$'&" ! "*-./0/..03343(210.,+,--/0/,'#!"#!!"$&'%#"#"! !"k!!!"#$%#$!!)02320/../.-++*))*,*&!!""'('&$#"#%'*++*(%! %+,,&)%, 2?! <965422564321011121.,*)'&'(*+,./+(&$""$(*'#!" #'*--)$ PB9,$?;#.7="&+..+LEBBCDDEBE$F?:961/.*4787532122103::." &+./,'%')('(-47535:=<9655754331--3:;83/-.,+*(',7;504;<9411452.-.03642378559;85457=FHB;645642/+($"$((')+,,,./-)(),+*+++--+**(%(-..267535760+T))(%! $(++**,,+.35300358>BA<8;AFJKF=9870+,130/5=>6/00,(&^$$&(*++('&'+1550($" #'++'"  $''%$";!%((*4?@721.'B?"%%%'(+28:7200/-,-010-)(('(*+'!&-4:<:8:>>;7551-.012/**.23220-*''+..-*'%#! ?A"$%(+..-*'#!#(-/.+)+.//159;82.,((*---./0/.-,*(%%%''%"#)..-*&#!7#1:8/'" ""%+,&!!(..+)&$$%&)--(&),,)&# !$$&()('(+.-'@:845>#%&&%&(,/.)$="(,*%EFM)*PJDB?;:<=;73258999::85336503BKHEDDEGI%$" "#!"$%%FBEGD@>AD@9546;<60-.0-*+19=:4.**-257:;978850.0- $!'5<98<>:57<6*"%0;?91/242-*,2761+(*-,'"#(*-1/+.662122/+,/.+*,,*&$%('&+,('+-*%#&0BK=-(*,*&$$!7017<>E(++,-./.-*'*.120,,/1.+(')1@?@HQSOJC><===<:::<=<6/+4BC91./14652.*(*--*((ONMLHCBB<4145-! (-+% #&')>,06AL(+0441/,(# !!>4+(0 ''&!  $" "%#"-)(+0!"!! !#"""$%$#! 4000123+)) 䀄쀄؀Ҁ~€܁ҁ݀ }!ن؀¾Ҁÿſ挟̄ɄȀƺ½@Bjǻ÷ǽ·ꂉ意ùǾʼ»ÿø7ʼòüŽƿ˲햔世낔˽󄞲ҽƾ썡ɺŽ􈠀¹ºĵӿľȼÀľĿϾ􀄅ŴּŽ׼õûĸŸ뀞胏󅢺øÿp1L779:;;:87667888;>???=;:96ige`\[\_ceeef44gedccca\URRSOKNV[^`abca][\^`b`][ZYYYZO[^^]\]]]_`acefedccdffdb`^]^_^]]^`abbaa`^[[\YVWZZ[\^acc`__`ba`_```___^\]_abdggeba_] [YWUVWXXWX WVVUTSSSRQRST[X^a_ZTQQSSRRTX\ZVVXZZYYYXWUTSTSSSUXY[[YVUVWWWYYXVUTTRRSUTRONOPQRSSQNLIGGGIJKKJJIIHHFDDHJIHIJZKKKLLLMMOPRTW[_bdca^[WSPNMMJHGIKLMNMJGHKKKLLKJFFKQSSRRSTUVUTVY[ZXXYXUSQQQSTX]\UQPQTWXZ\\[Z[ZYPZZYWVTSQQQRTTTSSUVVUUUWWUTSSQOOPPNOQUYZZYYYXTSSROKHGGIKMOQRPOPRSQNKKMPQRQQRSV[]\YqZZWTRTWY[ZZZXVTSRSVXXTOMLKIIIBDDEJNPOPPNLIFDGNTTSQORWZZXWWVUUTSQRVZ]^]]`a_^^\ZYZ[^eimqvvtpke]UQPSTTRSSSRRQOJGEDDCEIJMPQQPNMMLJKLMMLLMMKIJKLNOPQRUZ_a_\WRONOSSOMMORRQONKIIJKQ[]ZZ[\[YYZZVROJFEDDEFGIJJKKLLLKE:29EKMNLJJIJJHECGMRRSSSRRRQONNMNRW[\\^a220][Z[]//]\][VTWYYZ-YYXUPLLLKHHLQTSSTUVWWURQTWWVTRRV\134420.\\YTPNOPSVVUSSR[QPPPSW[[YWVVY]^[WSPQTXZZYZ\]ZVUSQQRRQNKIFDFHJIIIJKJIHGHIKNPSV-//./222100/-,*SPOOQU-.14420/.- .../-XUTRQTVVUUWWUUW-./01/.--,Y.01/,++.0122111/--.,T*-/.---/131ZTU-./121134420/../0/.--/012211000/00011100//..--./1210012112/++/002442357521000268:::8546789::;;;<<<960*%DCGKKIHLMIC@?W@ABBGKOOMLMMLORQMMPRPMKJJKNMMNPMKKNONLOQMIIKNMIGIMORRNHGIJIIIGC@>:769;?BCCBA>>@ABBA?@@ABCBA?<?BCCDCAADIMMLJFC@ACEHS]XROKH*ILOONRWUOKLLIFHMPSVVX^cefghklkjiecgihfdcddbUcb`__^\[[XVWZ[VMGKU_b`_```^]][TKHOY__ZUSTUOGB?:8<=BIMSY^dinnlkjhdcc_[YVQOQTW]_\YZ\]^[Z]`_]^c222344454335410120ZY/4:966poid`ZX\adfkqu;;usroiddgh4210013320ZVUVTE0\4:GQH89Tr>=xy|?|z>@@>@BDEC@?>>@CEFGGFECA@}uowBGJPX[ZXXYXQHB|xwvspnjc[VUNDB@928??=<>EJJIF@;7/(,7AFIIHLRTUY[YSPNKFB@@ACDFKPSPJGGHILNI@;ALU\_acc`\Z[YSNS\^\\^^]\WPNMMPRRPNOQRPKGDCCDFGGHJNTX[\_cggec\RJE?76>DCELPSTSTUVUTUUSQONLMPRTUSQOLHEFHJKKJJJHDBDHLOQTWWVSNIGGHKMMPTTSROOVbmw~|wvvrnmlkjhfefhjjigdb``bde,efeeeb]YTMIJMPPPQRPMJJJKNPRUXWSLEABEGFB=:989; =>=<;6aYPF?::HqLK?x~u[HC>kg9EWkvwvj\[fn;<:988;BKQQPNLJJLNPTUTX]ee^Y[ZNC@??A@:k:JX]ZUQOMJIKMRWXZ_djsviejsxysmklkmtxy{{wj\Zew|wrlgilib[XYanronqqicn|yru{{yvri_XTRUXWPHEFHGosHSUQPOMNQUVVVXXVTSRQTWYey|wsof^^bee^SNQWYZYSNJIIHHFD@>=?AA@@CDEGIJIJLOT1@MV\[UQRSV[bihb^_bgje[\fmopuxgZW[]\[]bhjd^\ZUQOMNNMMMKINSQMQ]hnjcZPLIFDGMQQOMKJKOQMD?@DJMLOTUUYclj]SPOKGDEIMPSSONYiog]ZZ[\`cd`\ZWRNPUYTKFIPUWWUUW\dlswwrkikeZUVY_a\W[afjf^Z\^\YVSQKEGOQJB?@@@DINSY^\WRPPNOT[bc^WUVW\djidcc^TMQXYY\bc^YXZYVVRKFDDA@GU\YTNKLMKIMV]_^bdZMGFC?>CHKLNOQROJIKJFGJOTY_c_YVPE@FFCCDFKOOMNRWWRNIMRQT]--2689:;<<=>@@@??>?BFHHD@>=:73_]bik8;>@@@?@A@@A@==?@@???>=>@BDFIKNPPPOOPNHBBEEDBCB>;89<>@A>8433R2235678:<<;:8787410./5:;9658<<:99986543346889852bcf44feefggedbbce34565545554fddcb12%3555444689:;<=?><;::878779=@?=98:<<:7( 1/-*)()*,..-./0/.)$"##!#&')+,-,+*+-/0.,*)'%(''()*++***)*++,./..-..00/.-+*+++*+,,-,+)())(&')**,-./.--.%,,,-.--,,+,-../010///00/...-,*)(())((),(('''&&$$%&&&%%'*+*'$"$&%$$%()(&&())(()('&%%& )+,,+)&%&&%&()))(()**(&$%%&''&%$#"!! !!"# ""! !""!"##$# $&')*+*)('%$"!8##$%%$" "!!"##" "$%$$%%&'&'(++*(())'%%$$&&(*)&#"#$&'(*++*)()(('%##$%&&&%%%&&%%%''&%$#$$""$')))())(&<$"!!#$&'))(''))('%$%&(((''(*-.-+***+,+)'%%&())((('&%$%&'&# R '  ""  #%&&&'))*++*+-/1100232121/...169;?ABA?;60*&%&''&''('&&'%#!!#7$$##""##$##$$$"""##$%%&),/0/-)%"!#&'%##$%&%#"  %&$#$%&%$"  !"!4 !""  $&'''&%$$#"!!!"$(**))*'&%%%$$%$" !""##$ #! ! !$%%%&%##%'(('%%&)''&$"#%''&%-$$##%'**)(''),,*'$#$&)**)*+*)&%$##$$#"!  ! ! !"#%"!!!"#%$$$###$%&%%%&&$$%/$&#$ k ! 5 G,$ %/*$#&,.2 3/.0/--121 !"!  !  !!"! !$&%%$!   )0-)'&%')*(&)--)&'(&$$'()**,034555665531134553221//.---,+*)(('%##$%"#(*))+--,+*(" (-.,**,-*$ #&'*-1467534540.,)%$"!%&$##$ +##""$&%$%'(""2321/-,/2457:<<;:85/---" ,',%+< ?@B"A?  "#"!! !"#$$%$$$#"!A;9>$&(,1311121,&"@=<;8641,&#"!"!/!  "#!&,0235530./.)&*0200100/+%! !" ""%'(*,./-*'" !&*-//011/.,+*( +))(&$!N !!"#%'(&#  "##%)*)(&&+3=DHHGGFDBAA?;98764212467630.../00011120.-+(&&(*(&$%%'*,--..,'" !/-+'$ $;))"?C>/#"!:6 )6=>>@AA:0.46!&()('&&()*.//04982-/0*#!!!"!0%.20-+*)('()+-/0259@HMLC847;>?;76667:===?>6-,4iAD@<97:<93.,,19=<;>=73;EC>@EECB?952//132-'##%&E98$,.+)('(*,--.00.-,+*,./6ADA?=82148:4+&'*+)'#<#(,,)'''(+/32/-.0475/.4:;=:6463,)*,020.046750.00/.,+($ !&(% "&*-131.+*)((+0452-+,,.3763231+%(,,,.22/,,--,,*%#$$#!%.20+'%%%$#%,10/13,$"! $%&'(*+(%%''$"#'+-031-+(!8 %&##%&%!=A#'+-+(%#"$'*,*$#',-QE??>:78<@=964331./6>@A=510,-:HIECDG%&%";$%" $D:=KS,+(JE=779:9764/-/31/032-,1448;99:839B>51-+&!058"-2118@A:227;5*(01+,/367630...,**)*.1/*$#&,0.++.10+*.11/)#%+,++(%&,/)!$*,'!"+//4;8,$$,1/)%$%%%&&#"%'''&(+.0/,*(')+,-/0.-,(%'0@NUUPHCADHJGA@EKNMMMKIFCCFIFB?=<=?@?<;=??=:7558;71-.1221000.+,00-*)'%$D=5//144/(! &.,#:6&4;::B',-.,($! =95%,*$  ##!"%'&# !# #%+*-02 +!#$$%$ ,+,.---.//.--,,--++** ׀߀Ҁ뀅π~݀ǀŀ~ ſĸҶˀ1 žĿa·􈜬ϲՀͺƺ»Ÿ¼ ƽѿᐦʹĽŹ̾¿½ĸ̷Źɸ¾½ýķƺ򇓕ĻDZº¿ǷҺ촘ʺₒľÿþq0=;;==<:87889:989:989: +8654geba`acefecba_][YXYZYZ[[\M]]\\^bdddc`\[[]]][[]^_`aba`aabbdfedbbdfdaaa``bfh566hedcbaa`_`b1a^_`_^^`acb`_^_ ``_^^^_befffedcba`_`cefffeeedb`^][YYXXYXVUTTUUVZ^``]XSPNLLOTWWTRSSSRQuONOPQQRTVVWXUPNQW\addb_\ZWVVVSPOPQRSSQPNLKJIHGGGHJKKJJLMLKJKJJKLMMMLMNPPNMLKLMOQRSTUUUTSQOMKIHIJKJJIHGFEEGHHHJMORSSTUV#XYZZXXXZZXVUSQONOOPRTSTTTSTVYZ[[\[ZY%XWVVVWWXYYXX[_0_\ZYWWWY[ZXWXWVUWXVSRPQ$PPPQSTTVXXVVWXVRPONNNPRSSRRSSRPPQSTUVUUVWXXVUTTUVVWWWVVVUSQNMQUUTTSQONJFA8/6CKKE?<FJMMKKMOPQTXXXYXSNNSWVVWX[]`bb_]\]][ZYYYVRPRW\_^\[\^^\XTSRRPNMMOONNOPQRSSSRQOMJHHKOQPNNOPOOOPQRRPPPOLLLNPQPNNQUZ]]ZVUUUROOQPNMNQRQOMKHDEMSWXYZ[[[\ZYY[\WOHFEDCDFHIKMNNMLLMKGIOSVUOJIIIHGGHKNPQRSSRONMMLNQRTWZZZ\`22b^\\ZYYXWUTUVVVX\`a`]XRNLNNMKLNPRSTTSRPONPTVUVWY\012221/[WVVWWVROMKMRVXVTRQRSSSRPRWYWVWWTRSX\^\ZYYXYXRLNTXYXURPOPPONMLKLMOONMLKLJHFFFEGIKORW.010/5.,+TRRUX./144320/.///.--..-XWUSPNOQRRRSUVWXXY.//00.-,+,-/00/---../0/..--,--,,-/10/0110/WQPSW-010.---..-YXY.0110/../0121100//00100/..//.ZXXZ]0121003566787531//--023334542111/03566787644345556779:;;<==<961-)'%IIHEA??ABCCDEFGHHJLKJHGIMMLMOPQRRMF@AIPOPRRQQPPOMLMMLMNNMIDAEMQPMLLKHFFHHFA>>==<<>ACEHJJIIJJJKKJIHEBBDD.B@@FMONKJKLNMLKKKMNPQQRTUSTTSS+-...-,URQTWURQRTSPMLJIIGGLQQOPQRQNLLNLHFDCBBBA@><;=>@CDEEHKMMKJLLLOQQPSSOMOQSTTTRMEABFHDADEDDDEIIKMMLGA?<7578:9gZUUWURTZc6;>>?><:6^]i:<<:6fefe`_dh69;=?BC1DFGFEDDDEGHFDBBBDFGIHEECA@AABDDBACHKJKMMKHD;02@LMK+IFGILONLMRVVTSSQPPQQRSTUX[^adfgijihedffeeedcb``bbcb`^]]]\Z[\][XX[aggb]^``][YSKGMV]^]\ZXY\WJB?:nm@BEHIGEFIKLKKIFEEGGFEGJLMLIGECB|srx~ACDEFEFEB>yxupkd_YUQLGBCINNLKLMLJKKLNOMKJIIJJKLMKD;9?GMMG?>FMNOT]cdb_]]^_^\XUTSQNLIFA6TT395c9HRSTWYXXZ]_bbaa`__bdd^VQPNHDBBDHILRVSNJGFGFDCBBDEEFGHD9.-BCDCCEIJHDA@ABA??@@??ABC>m^UOOcESTLFEFDxqlijqJyonosrpry{>>><;>?@@ACGIIGEA=;975fdcacj:>@BDEDAA=;85321148<>=<;<@CCDFHIJKLMOPONMKIFCA@><;::;=?@?<73222345679:<<:86'546;?@>:8899:::976655679:;;84ddefedcccde ff334455543dcd3334432223445568899:;;;9764347;?@>=>AA@? :0.,+**,,+,-..01110/-,*('('&&'(()))*+++-/011/,*())**))+, ./0/..00/-./00..--,+*)*++*+,./10/.---,+++,-,,,--.001011100//..02211//...-,,+*)*))('&&%%%$%'*,-,)&$#""$&''%$>##"#"!!"#$%&(**++($##'*-/0/.,+)*++)'&&&''&%%$$#"!! !""###$%$" ###$%$$$%&%$#$$%&%8$$#""!  !"""!!! !! !#$&''&&%%&&'()))()++)(&&%$###$%%$ ##%&((())('&'('(*)(&'('&&''&&()(&&%%$$#"##$$%&'&'(**(&&%%%')*)(''() ***)))**)(('P&&&%&&'&&''&%#"%''&%#!  "!##$%%# !%)*+,-/134420/0/.-+('),/22101330-*(((&%$%&&&''(()@('%#!!"$%%$##$%%&&&''&''&$###$%%$#%(*,+*('''%$$&&$#$&&%#! "#$%%%$##%&%! !!!"!!" !##! !"$%&i%#"!!!##$&())(()(&&&%%$$$%%%$""!!!"$&''&$! !""!!"$$%%%$##""#&(''(()'%%&(('%#! !$'((&%%%&&&%$%()(&$%(++*)())*)%"$(**)&%$#"! +"#""!!!"! !"#%$##$%&&&$"!!#$$##$%&'''&"!#%'&'%$$%'   + + + .   ! 1'$$$#"#%(*))/2122/.02 ! !"##"! !"#"! T!"""!!  ! "$%%&'&%#!$%$$%&%##%'('&&(+,*++***)('()*,-/13344554223222321000/. ---,*))'%$%%$N&)*('),-+*(&#!$(+,,,+*,.*#23%)+.01342/0342/+)'&'%##"!"#$$###%''()*+,-,+,.01$"!),0123312478:<<:7776420/11.+(%#a"""#%%"!"$(.1357:<>@!!#$&&$"#$&'''&$$$%&%$%&'''%$#"!=89=B#$%&%$$#!<;961-)%"]  $&&%$##$%%$#"!  !+$+,,.//01456543311233/'" !#" !!! 0#$%$##!$),.//0/.-,*)()('$""#"#$%$! "! "##"#$$%&% '(*-036:9654346655776679<==<<<=<;:987421341.+(')+*(''&%&(($!"" !! !#$!61-))6'00)$$'&HC@=<98646;83125:BD=878:;C&J?<>@ABA;64445762/,*(),-.-(&*/0.7--.,*+./1453239?BA<86435960,+*+-/.+(%#!7'/0.+(((*.12/+'%'++().37:;<@HI>3,()+-./.,,,)(''&%&&%%'++(&(,363,(&%#! !"##$%$""%&$""%()(&'*++.3783.,)&%%'()*--,+1<@:2../145421.($%(,.-&!"&'$#).159961022-*((*,+*-4750+,..+)&$#1!"&,,% "$%')-2552-))-/149:5.*)+.4860,./.+(()((+./-/33+";=H)+,,-//.*&##%'('(,/,%!!  $%%&),,,*(%%&''(('*294+(*&99>"EA@A#$"!%+0.'88976:!##%'&$%&''()*&#'./,&EBBB@=:89:;=>:3/049@A9568756?IHEGJKJHDC""  @:6AT053)=45=D?77:83.+,289731354316>=:8768:9986673,%&/2/*).34475-.:AA>6,$#)..2<<=>@A@>;:;=>?@><;::97301331.+***)+,+($ -&)&$*.#!&+.,*++& #+48637>B.>78?A;1/  !!"$%#"! ""P/.--.2  "#$$$#" .../.--,,-.-+,Ҁ΀ԀÁ쀊̀ဆˀ߀끑 P΄bÅr¿҄р»ԺÀºþҀ¿<4Jɿˀ;˸ꋞ+EžƿƼýijý̺ڀũƼ򃏗Ƕïü˽µϹĿƹĵµ􀆁􈗣ÿĻȿĭĀĵزԾħԼʵôð0˹ń€¶ޯۍ埈̱􃌕ĸ挤Ÿg '@BEC>:74458;==;:88:97543332baa``__^]`cc`^\ZZ[\]\[YY\^]]\]^__^^`ba__``___^^abcccdeedcaacdefgfdbdfeb`_\[\`d4564ebaa_^]]\]`bba`]\^a`^^bdcb`_^]^_acb_`abdf7gffebbbccddcbacegfeeffdccbbaa`__^\\[ZYYXWVVVUUUTRRTWVRNLMN2LJKMOPRSTVWWVWYXWTONQTUW\`ba``_[VRONLKLMNMMLLLMMMLK+JHHKMOOOMLMOQQQRQQQPORTTSQPPPOMMNONMLLLMMLKJIHHGGHMTWWUSRSRQSX]^\YVTSST SQPOONORWWUTSTVXZ\\\[YWTRSUWVUUT STUVUUVY\//^]\]][Z\\[XVUSSUUTVZ\[YWUTSSTUUVVTRSRPPPRSRPONOOQSVXXXZ\]\ZWUTTTSRSTTTRPONOPQQRTTTUTTVZ[XVUTSQQNGAFOVY[^b33465[LIRaaQC@DGIJKLMORSTTSTX\PXQNNQTVYZYZ\^]\\ZXVRNLKMNNJGHLPTUTRRQOLKMNOQRRTWZZZ[]]\ZXUOLKLKIGIKMPQOOQRRQQRRQPQQPOPU\^]ZWWVUUTRSVZYTRV[YSONLJLSXZ[]^_00/-[/0`XOJJMNJHHGFHJLJHHHILLJIJKKIGFGGHJMNNOPQRSTROMLLNPPPQRSTTW\_^ZWUTSQOMMOQRQOOONMOUZ2]^[XSONNMKIIMU[]\YUOLMPSRRTX\02220..\XTQPPQRQNKJLPScPOOPPQRQSXZWTTVVUXZ\_010]XOHGGHKNRUURQQPQQQRSQNMNOOPRQONJFGJKKJHHLQZ121/.-.//./00/..-,,,--.034221//0/...-,XVRNLMNONNQTVW,-,-./000/.-./000100/...010/.-,,+TRT,..-XWWYZYXWVX.0120.,,-//012210/../00/.Y,./11/-Z/01235777678864210.,-135541/135421113456998654434555679:;;;::;<963.($ECBCCB@@ADFGGFD;EJLIGHKLIHIKKJKLIC>?EJMOQQRTTPMJJKLLOQLHJIHJKIJMNKHHIJJIHECBDGILMLMMJGFGIHFB=98:9984f59:6a\[WVWVPLNU\037?HJD>95455hihgihh579;;=?@A@@ABDGHF%GHIHGFEEFGHIJJKJGEDCCDEDDDEFGIKLMLLLKI1GFHIIGEEHKLMLKLOPRUVY]]YWWYZYXY\`bdddfhjjjfccddbabccb``_][ZZ[[^`01bab135jfcdca]\\\[[[YWVURPQTTPMKD7VSg@JQY]^`_\^dhijhebaa`_^_`_`aa_\\]__`begjnpppqs;;:86543320ZWY.[VV.488dVPSX]`aa^^ciqx||}|vnhc\Y_ec`_^]]\\]/0^]\\bjlhecdjsx{?AAABABFLNJGGLQRSRRPLHEDFIMONKJMRVWVQJDAA@~~?ADB?<:75d\WURQRWXTNQWVOLLLIHIFDDEFILJFmDCCFKPUY\]\ZWURPOMHEHJFDFHJIFA><;::>BHLLJHFEEEC;118@EHLQTX]`cegiknnke]XWY]\UKCA@><;@HOSSPLJHGIJJGEDDCA:21ABBBCCBBBDEDDCABDDDC>8e[PM];B|mhdaaenrojkpjS<46?JRWZ_is;:EOW[^emnlr||xwvw{|z{{upmljfad9AGGB=xvpg_^agqvqifb_^_cfea`cipneZYbip||}}}wk`WSWZUMHINTX[\WRSX]^[USTWYXVT`oj[RRUURTYP[ZYVSPNMNOMMNPRSSSTRLGFE@::>CGIJIDBEHJLNNPRQS2DWcd[SRUY]^bjmd[X[]XQNQZ_aeqr`XVUVYaimh`\[ULHLQTUVUTSSPMLLLNQSPLIEAyx~CHNTYZUOKHGGHILLLMQW\^]^elle^WOHGIKMMNQV]cjnh_\[XXZ]\ZZ_d^PJOW^]OBACDEHHFFMUZ^dfbYRRSRRTW[]YTRQRSRRTSOKIKNPQLGGJNTUQPVZ[ZXWVSQU]gkg^VQNOSUTRQSTTSQLJLMPSUVWWWXY[__PB|BEBw|ISY^\RLMOPPQSYaeaVLIIJLKHFKSYVQMLKJLNPQPPRUX]^\][Lygi}EE~v@ILIGJNRSMCxqoqt{FKIGFGJJKORRNIC}ulfiryxtplgabfdcgoz}wleoEJLGB~zC}rMLLJWTjfkf[TQPYhswwvwyr^FCWp~~vnd[]ejonh^URXq}^H>GWdi`SUgz}qaQOTRKIRcePCJT[difdgllhkj[OTf|q`XQMNOPONMJGMUQP[\ROX_^UQW^\RLPQKHR\WOOSVWZ\P:sNce\WTPOQVaeWJQ]_[XVUUY`d^TLJMU_eilryxneb_\Z[\][UKK\pxupnkijnqsw{ysnmmlkjjklkklnpdnjea^[XUPLIFDA>::CQUK8L4,2I>O0(*05=LZ[VSPNMPVZ[^fi\LGMWeq;<>@=8g`c:BFJPW\YVTRRNFACHKLPOGJ/9<;::;=>q=<959HSQLGC@=;964feedej9=@BCCB@=;8533345655689::975323579;>A@<989987667899:97iefh4hfdccdeef33345443dde34 556788989:<<;876798767678:;>>>@@  ++**+,,,+,/0/-++*++**)((*,-,++,-/10---,++**+-./<.-,-./01210//0/.-,+)*,/.,--,+*)()+,,--,++--,-///-,+**++,-./02 10/0//00/../10/.-,++*)('&%&())&$#"!-  !"#%&(**)*,+)&#"$&&(,/0//00.*'$#"""#$$%%%$###" "$%&%$##%&'&&')**('&&$#"###"#"#"AA@?<852.+./-*('&%$###%&(-4653347=>@A@@AA?;74210-*+"#7762..0Y39><7532112431026::4-+16;CEB@CEFIKIB91+),/,'$$'+-..,)*-021-+,-..--3><2,,-,*+0221/-,*)*+)(*A)))'"'//)$$&)+,/451+),.,(%',014:DF>2-++,-.27950..*$!#&(*++**)(&%%%&()(&$" ;9< #(,//+&$#P$''&&(+-.-.27740,($$&'(''(,048:60..-,-//.-040(%',11( !"#$$"!%),/241,((**)*,./.+*(())&#""#%%$! #',.,*-0/.,*)))+18;91+&$&)*+)'(***)&$%&()*+++,-./45+!="&#>?%+032*%%&'((),020)#"#$&'$#&,0.*)(''()))'&(*-00010':/3B&%C="()%$%&()% 9668:>AB#&%$$%%&%%&&'*,+(%"@@ABA>9413:>><:852352038>CC?<63:EMMHE$&&$ <:@#A9CV[,,+)LIR00H54:81-++2=EFECDE@3$"/>FD>:4.05:<;71,*-?NG2$%.682)*5AEB;1'&))&$*56) $*/4641365147-%)5EI=3.*'()('''%#&+*)01*(.31+'+0.(%((%#)0,&&(+,./)6)9;3/-++,/56-%)12/.0..-/474.(&(,3899=BC<6441//000-&"*9BA=<<;<=?@BED@<=:>BIV_bb0//.[[#ZXVRNLKKNOMKKJIHGFFHJKLLKIHHGGECDFILKMGLKJKPW[YVSPOQSWZYVTTSPNMKKMPRQOOMLKPVYYXVSNKKMMJJOX`a\VRNKJMQRTX\]\]/.ZXWUSRRTTQNNPUWVTSRQPRSTUVY^111_[YUPMLKLOUZZYWTPMNMLIJLORTSPLIGFFHJLKIJNQV./000.-+,-0120.,+*SUVX-/24310/011331.,++VUSRPOPPPQQRUWXWWVUSST+,,--..-.-/022100/.,T*-00/-,V,/022/VRQTWZ\///.\ZY./010/./0B/.---.///...0121-,-023345543357741/.--.1356520/27620001357899876554556789:;<<:60*&#EDBCDFGFEDCDFIIGFEDDB@@AAACDB@BDCDJLKJLOQTSPONNNOPNMNLILNMKJHHJLLKKLKGECAABCEGIJJLNQSQONMLJFA>@B@945789;=??=>ACGMTWY,++,+,,+UV+WW,VSQOOPOOORURQQPOPSSOHGMPOMNNMPSUWXYXVQMLIFFHIGFFDA>>==?DGFEFFIJKLKJKMOQRQQPPPQRQPQOGCEFEEHIECEEDFKLJLPQNLIFD@=;9620_^$^_ab^XSSPA31?@@ABBBCMDEEEFGFEDDEGHGFEEFFFEEDCCCDEHLLKNRRPPSTQMMONLJIJKLLKLMORSUW[\[Z[]^__`bccefefjkhdceedccaaccba`^[[[YXXZ\^0259;97jeb`_^^\YXWTQPQRSTTOH?5d7@GMTXYYY[adeee21000/.0111343dbba`abddfimpqr:;;::9988642a_][YWV[155f_\]^`cjqvuqljiknpqojfb[VX^`_00111/.ZYXN8/B\jqqory~}|}?~@CFIIGGINSSPLIIKNOOPRQMIGHKMLIFCBCFIIFB@CFGE@93.ZZXRLC8/16=IV^]VLGHHFFILLMMLIGD>:>>?CGJJIKOQSS&QONMLJE?=DMSWZ]dmpnkknrtrlcXOF?@FJKIGFEGIJLORROJFDEDDDC@=;:513;BEGIJHEBAA@=;;?EIKKIHGFC@>>@BAACHKKIFB??==<;97641/3;??@BDHKJHHJMLIFEDCGTahd_ZUOJHIMQTUUUWXXWWYZZYWUSSTUU.SPNMNPTZ_`_[WURMIGFFGHIIHGEDEGHGFEDCBACFHGDAACDCCDDEGGFC?:9=EJJCm\Z[^eieWKNZ_VE;@O_hjo@GF?rlkpBPUTTX\`deefffgmjcZV]ec]]_^XOJIKOTWWXZ\_befgls}Dzrpw@B|tr:;>?@>;9877nhaadjDs?CCskgktxrjghmsundehbW[q~z|vojhe`ZVQQUZ^_]Z[_`\VQQSVXUOP^rve[]`a^ZYZYUOKJKGB>>BGLPSTROLJHEDFHJKIHJLNONNOQQRSV.7J]hkh`XRQV]fnoh]TRSRPRZ^[Y^iphYV\]YVWVTY`ehkje`UKKRY]YQJIKNOQRRRSTSOKHE?~IQONU^`db\XXZ[ZXXWVWYYYZ_hlh_XXYTKHJKMQUWVW]gkf`^^\[]__][Z[]YMHLSXWMAu:AJPPOPUZ\]`b]RJIJLNRX]XNHHIKQUTQMJJLPSVUPKIIGEA>@ELRW[]ZSPV^_[XURPMKJJINY`_WSROLJKNONLJJIHHJKIC>}BCCDCDGHJMQU[``[X^ipj^TPPRSQOLKNRTRKGJMMMNNNPRQMKMRTWYRFzrt~EGCA@BGLPSWWRLGA|{|~zxFFMPNNONKHCDFD~yuogflv|zvsvzwnjosswDvmpwsfbvGOTQIAxoknvLMPW_d`Mveelrttmhoyxoq{}cPUfvyhakwk[Y[[`fhmuq_PJMYejh_WYforure\WL?DNVWPMS\`aZPQ`ryul_TPWemmg`]WRRRMJLOPOPRPJEFPVXYWTX_cge_ZSMN`pnd`\VRX^VC>DNVXVSOMMSesiTT`fd]YVU\juvma_n||yspmifdb`__`aaacfjlnonkilr|zrnookfdghedfhmt{}|zwspmid]TLIJMOL@0LO/5:@D?1E:;IY27;9cNCBDBDVsEFAqaZ\bd`WMECK`;DGD@<4XS[b4:AHLOTXXWSLDCLV.035679<<;;<<=?@?=;9:FSVNGB?<;:75544fbae68:;<<<=<=<<=<;:987666899776555433 44577789:9864,6=@?<;;9889986678;;98886jij5554gfede345544543 +444fd233223c_b345679:;;:889: 98766678889---,,-,+**+,,*(()*+,..-./00../000/.---,+*)((*+--./4.,,.///010../1/..-+*)*,..-,-..-,+*)*+,.01/../011/-+,-++-.,,.012233321234421/.L///0110//..-,,+))('''%$$%&&%%&'()(&%#$$$"!! "#%&'())+--,,+,,+*(&%%'*,-,*('&%&'&%$#$%&&&%$%'&%$%%&&')))(&%$%$#!#%'('%$%%%&'(*+*('&''&%$5%$$#$$%&'''&&&'%#!"$%$$##$$%')*+)'%##$$#"#$&'((&$"!!"#$#!"#$%.&&((('&&'('%"  "#$%%&&%%%&&&%$$$#"$')+***+*)l('&&'((&%#"! !#&'&%$$%&&%#!!!" "&"%'()(%$&)++,/630--..-,+)('&%%&%$%(+++**+,,*(k)))+/12355410/---,+*)))(()(()('&&')**('&&&'&%$$$&(*)'''&%&''%&((%"!$(+("'))$$$##! !##"""! ! !#$$#""#$"!"$(*)(&$#$%'('%$$#"!  "###"! "# "  !! "'++'$"! "$%&(+++*'&&'%$%%&$""#%&&%%%$#$#$$$%&')-,+*(%#"!"#'*++*(%#" +! !"$%$#  + !"! !"$##$$%#!!"#$%'&%$##(#$$""$'(*)(' 0  +( +) R  %%%&'('%$$$!#/.///  ! !"#"!""!!  #&%#$&&&'))'&T$##$%&%&'()***+--,++,-./02345545666552//121//..///-,)'&%$$###$+*++*))'&'&#"!!""!"!. $'*,,,-.010.-(()++,.002477880('&%$##%.--./026;=<97544688742.)%%'&%+"#$  09<<:;@DDCDD!BA@? !$%$##$&)*(&%%&(3)(&$#$%'&$"!!"%''$! !#" ""!&)'#%*.010-)$"!!"!#&()(&%%&&%"#(,.027=@=:992*# ""!!%(*)(&%$!!! ! !$,58631.+(&')+--,-./0110.,***+++*)(()*-00/,+*(&%$%&&%$" ! 6"')&;/-.06::3+,471& #,5989!%%!:559#+.,+-0356:83-*.32..00-(%%&)-./124458:5346:<83350*,:FGDBCGKKE>:7652/+)),/1210022/,))+./-('0>B9122235530011.+())'#"!"$%&&$" ,341-(%%'-2773,'&((&',/.,07;6+)-/-++*(+0345420*##'+.,'##$&'))**+,+(%$"<$)(',2650--//..--,,--,-/4650++,+&$&'')+,**/5740/0.Z./00/-,.0.&"%*--&7 &)*()+.00230)$#%&(*.0-&#$$&),+*))(%""$')++($#$$" !%),./.)(+130-+)'%$&,10,)(&$#%'('&%&'%%&'%!< !"#%%%&(*-01.,/6:6.(%&())(&&(+-+&#%'&'((&&(+-/1,#<9>?ADFD@>>D%&DE(+))**(&"C"#"B?=;8205;?><;=A?:6898:A#C;57==52=&+.,&!=768;E*,XYXX.27=:,=227;>>;8>>=;;>CILJE@==>=:8:<;:::=@EGFC@=:73/*% %(%7#%!Q8.*,031,'$"&0""!(&*- !"%'&%##!#/-,.'($&100...--.-+*+瀂􀄁􀈁ʁā݁ U#󀄄gȅǀ¿ʶ腈Cۅڀۻ¿Ӏ(#퀃ƾµľ;¾ǹʾŸ׀ͻÿŀýV߅ۀ¿ÿ̸˾ȽñҼ񌡦¾쁎ƹㄆꂆѴƺôȿ²λGɹ㋯λǼʿľɿղɼ灊򆘦􊓚¿н耍[9:::<<<;:8777887767775433dcc2334eccefeeg56554gecba`][ZZ[]acbba___^\\]][XXZ\]]^`a``bdedba`^_befffghebccbbba```__abbdikhc^\]_accde4554ecaceghfcceg44433eeeddefghhhgfg5554gffebabcdeedcbbccb`_^]\\[YXWWWTSSTTUVVVWVTSPPRSRQQQSW\0232b^YUSTXZYXXWVUSQPPQRSRQRUVRNMMNOQPOMLMNMMNQTRPNMMLLLNPPPONLK9LMMKJIHHHJKKLLKMNMLLLMNNMPSQQRTW[[[ZYWVVWWWUTUVVTPNNMLMMML]NOOMKJJJLKLMNQUVUTUY[[[ZZZYWUUSQONPTWWVUTSRQNLLNOQPOMKIIJJKKJIIKORVYZXVSOLIGEDCDEGLRVVSQPQSSRQRSRSVWXWUVXYZ]_]ZXXXYYXWVWVSOKJIHGEDFIIHGHIKLMNONLLQVD&:/JRMF<6C\54\SLEADLOMLMRX[][WUYZZ]48;:7554e^[[ZYZZYXWUVY\]YTRU[`bb``bdda\YYZYXY`fffeb^]^\YXWVVXXYZZYXXXWVUSQPQRSTSRQQQPPOOQQSUWZ]\WUUUSQSUTOKJKOTSE*7,Nb\UUZ^^ZXUQMLKJIIJKKKJIHFEEFFGIIHIJHGEDDCBCEHKMLLLNPRQOMLLKIJR]1_WPKIKMQUWWVR +NJJMOPRRRPOkRUWWUTROMKKKLLIHPY[VRNKJJLPRRSVWWVVXXWXYXVUTRPOOQSQNMOTUSPPRTTSPNOUXXYZZXWXWVZ`221_ZUPMKJJMRVXZ\YQIGJNPONMLMLIFDDEFHJLORTUXZ.0/-USU,-/10/.,+UU+.255310/.z-+++---ZZ\[YVRMLORWZ...YTPOQTUW,++,,--,,,++,.0/,,-00/...,+TU-00.,++-//.,USPNOQUZ//.YUTUY/1210/.--,-./0110.-,-../0013430--.0&1345410158753321114774223334443345667765 422235689:d;;<=<83,(%$HGFFEEDEIKKKJHFDB@ABA@@AA?AA?AEHIFDFL*+QLMOOLHKOPKILNNLJJKMNONMLKIGDBCFIJKMNOQ*++TSRQQRPKJHB>;:976:?>;8:@GKOSRRToUTQNNQOKHLOMHINSUURQRQNLOPOPQQPNNOOQRRRS,-YTPOLIGFDACGIGFDCBCDEGIGEEFGE?;?HMOQPNMLMNPOONKFFHIHILLIHHDBGLMJKJHIJI +D<730/][_12331YROPQNP394^]\[\_14533456689;<=?@AAABDEFEC?;:;=?@@BCCDA>?EEBDHIKLJJKHDELQMHMRPMPPPOMIJNPSVVUWY[[[^_`aa``beggiihiigeec`aegebbbaba_[XYZYZ\\[WRSWWVZa4:>><96gc`_ZU=UVSNOQQPPONOPKFGE<9?FJLOSUWY^cfff33311124433455322c_^bffedfj67899::952588654h5798njggiloomkmljgdcdgihfb_^]]].//0123430[XVM@>Qdpx{CC~DGHGGECABBCDDCEINPNLJHGJMOPPOMMLIGHKKJIHFDEKPPKEDHIA9643541^]ZTPLF==DJIHIKOPNMOPRSUXXQKIJMOORUWYYYXVSOLHC>859DLONNNORSRQSVWVROMKIHGIKKJGGJOSX\\]_`cehmsupaQHEFHIHHHIJLNMLHFGHHGFEA===;878988767:<>>@@ADGGECA>;779<;<<;9:>BDCCDEFGFEGJOUZ[WTSTSQONMLHGGGFGJLNPQQPNLKJIJLLKJIGGHHHGHIIHGHH FDBCBAABCBBAABCDEGHIIGECBCEECBAAABA@AA?:7887nr~JSSKC;o9@JNKIJKJHHHIHDCDFFFEFKRW[[[^cghfcaaenohhovztmmmib^^``addbgpvxwri_[Z`kvyxwx=zmW@67>9+G2T585`UNMPQQRW[brDKLLHC}}lejs|}yuuvsh\aqthc_\]`a_]_bca_^acb^ZVUW]cedfnn`QNTZZYZ[[WSPNJD=7f26>DNX\_a^Z[dkgZLHLNKGEGILRZa^VQPNLJFADIJEBFJLNNLJHEDGKHB?AGQZZYZ[\_ac`ZUTSQPPLJIHHJMQRPNMONKHGHLQSSPKF{zCEFFFHKMOQOLLKHC|x|EMNJKPROLIF~|HMGxttxzzy{yyz{zvqmnomib]ayFFB{uusi^hLPPNV]UCm`altvx|{vxqjnpvnZPUguxz{rja^eicXSWXWTT[gi`[]]YNJ\uvjcWKOY[RIGMU[][WW_nti^VPR^if[VXXWVVWVQLJLMNMLJB>IUYWUW\[WYYTQUYY^ekuydXY[R<]@VYUWZUS]pug\eke^ZYYYZdoqlfftORNtlhc__abccbcdd`]]_^ZZdnw~xvvsmgfijjklnrw{||{yuqlheb^ZVTTVWQ<%8>Q3=HLD5TSY-,19-!8!#%'&$$'))%#!! ="'+/1/-,,,+)(('%%&%$%'()+,-,*)('&%&'''&% $##$%%$$%$"!"!  D58@'.0+&!=#+/-,,,+*)(((&$#$$$#$'+.000157765447<<658>A<778731233038;==;60--18==:9:<5'!$ !"$'+.7"'('%"@>>BE>404:@A=:;<;4-09BEFEEIMF<521//24322454223531.,-/26767=>4*(-22111/-,+%)'# 4 $')(%" +122/)&(,/2442.+*+,,-.//1473,+030+*+**,+)+/.*'').6=<3*''*+*))**+..*'&$"$*+''.8=:1+,351--,+)(('(1>>3,-/.($$&(,.-,-.142-*-0.)&*.///0/+&""&*)#-/'*(')-00/00-($$%%##)/+%#&*,-.-,+*)&%%&(,/,'$$$# !&,/120--4:9/&"$%$#!"#%(.30*'&%$$" @"&'$"%'(('%$#!!#&$ #*10 ..--.010,()*+)&%#"#%''&%%&'&%%'*-./-*&FA?C#%%#"%'(*+)'((%"?ADEEC?@IG;58;@HH:-(,6>@@ADFFA;610584-*,-../3993/0/-'%2BC:3*#&-/("!&,/0.+*/9<4,'%(186.+-.976456778789:96567425;@GMQNHBABB?:9;<;;<=?BEGGEC?<841/+'#!!   !#$!&6"!8/,/5:<70/3#(&! (&? #"*+!"/./--,+++,-,)'),Ӏꀃ큥ππˀ΀ցƁ€݁ ŀ¾ĺĿڄـ𖩞󃊋݀¿ǽҀ9 EĽľˀý񂉎Žȼƾƻ¹ͷ݌ű큓Ż΀¸˸ȶſøĵͻƸǾüϺɻƿ˼<ЄӀзǭ􋛨̼򃏖@H445689998766799876544565245654222344gedegi55iea]ZZ[]bgfdcccbb`\XWYYZ[[\^__`abaaabcccdffdcdeefecbbaa`_`bfjiea_aceeffeffeda_`bdefeedddf465ea_^_`bcdccddeffeca``bf566jea_^]]^___\[[[ZXVSSSTTTSRRPNNOPRUY[ZWUTTSQPOOQUWUTTSRQQPPQTVXXWVT RQPPONNOPONNMOQRPOPQQPPONMLLLMMLNOPQQQPOLKKJKHHIJKKJJJKMMI@8=@DHMQQOOPPONLJFBDGGIKNPQPONMLKKJHHIHHJMOQRRS*++SQSSQQQLDHOOLID@@BA=979=ACFIJJLPUVSOLNOKGGGCBIRRMMQRRRSRROLJKKKORTUTSQOQTVUV,WVVRIEFGHGFECCDEGIIHGGGHIJJJHFEGF@?DJLKIHGIKMMKIGGHHI=JLMLKJHGHHKJHGFECDEDD@:6200YSTW[0368789867:73220^b21/136789987!5214434422468;<<=?@BBB@@A?;867;?@A$??@<9AHHGGGFEEGGE?87?D;5;GNQNJJKMRWXWjY[]]]__`bccehijkkhedeeddfgedefdcb^WUXYY\``\WSPIBCHKV4987665432`^]WRQRQNLKKJIHEEGD?@DFGKNPPQTVTQPNJHHKR[0245C45652001234335787677789::<==<;9onooonlkjkorttsmgdddb`^_bca`_^]].-../0.XTWalsyCEGGGDDFFCAABDEGGGHIKMQRPNLLMLIDDHIE?vvy?DILLJJLOOLHGF@83220-.01/WQQTSPMNTYXRMMPSRPNLNT\``_^ZUOLMMKJNQRQONPW^ceeb__bcb^[XTQOMLKKLMNPSSRPONLKKMPUY\`efedgklje\RMJIGFEFHKKIHHIHFBBCCCBA@><;<;<>>?AA@>@DFHIHHHEBBCFJMPQQPMKIGFFGILNNLIFCBBDEGGEDA>=?ABCEG0HJMMMKLS\`\XXXVTTVXVSPMKLNMJEBA@<:;=AFIMNLIHGFFFENFECCDEEDDEDCBCEFGGHGDA?>==>??>>ADDCCDEEEGGDAABA?>=>@@><;:99;<<FLNNLIGDCGJIIJJIGIMRRLB:@R15679:::;;<>CGEA?%BFHGDA=;965567631148;>>=;:;==:4^VV059;5<<==<9899::<>@@?<:9:<=??>>>=<:877864467765433569=??><; +87544589:9: ;<=>>=<:865j56777655665333445566543222ccdeedcbabba^^^`f566655543343456667753..,,-/020-*(()+/2210110/.,)()))*+,,-,--.-/00/001/..-,--.-,,,+++-010.-,-/01001/-+,-.//..--./.,++,./00/.../.-./120.-,,--...,+)('''('%$%'*++)('&%$#""#%&%%%$#" #%'((('&%%%$#""#$%%$$%%&%%&''&%&'&%%$%&'&$###"""!!"#$#""!"##! " !"##$&'(('&'()+,--+)R(&%$###""###"! !"#&*,+('&$%'))((''&%%&''%"  !#%&&&'()))++*(&%%%$$#"! !"##$&'('(''&#"!!"#"""$'(((''())(&$#$&()**)(&%$$%&&&(*,+))('&&&'&%&&%$##" !$%$  $ )&!$%%!"""&)*%)(()*'(*+++,.//.../27<;;<=;744565542 +31.,++,.0010001.+))((''(*--,)'-&%$$%%$#""#$%&%#  "()#"!$&%#"!"!  !#$$$%$##$%%%$ %*($! +!"###$##""#"#%&&#"!! !"#"! $(&#""! !#$%&'''(('(&%#! !#$#%&&'((''&%%%&''(:)))*,)'&#!!&+,)%#$&$ !""! !#%%"!#$#! !#$" "#%'($$%#"#$%''&$#""##%$#!"$##""$#$'*'$""%'    +2%  %!!"$+-!!!"""!!"" #%$#$$&),++*)()+,---.//01234'32//00..00/./.,++($"#$$%''$"  $$#! # "$&''(++)'&# !$>55777655569<==<842221/./11/.,*&$!!%,4:>C$%'''%GG%&&$""#$%&&%&&&%%&'*+*'%&&&$""$&#:;= #&'&%$&))&#!!!!"%%  !$%%%$#!  !#$#!!#(-011 0../0/-,*(&%$`#$%&''&%%$#"#%(+/1479889;<83+#  ! "#$%%$" "#$"@ !""$*152.-.-+,-.-+)'%'((%"!! !$')*(&%$$##"##$$$###"!!! 2#((&(+*'%%$$%)+*(&%&$##"##$)-024553/++.45435788764117>CDA><>!$$##"B>;;<;99:8532,!.(  ##"(-#()((&$""#$#B;659<===>;3,''0B((KHHD;55654588=7556765566651-.2677@=83.++-..-+*W+,,+**(&%$'++'##$$#""$'+,.240+,3991($%$#"!!!%)*('&((&&&%"@@CE"$*//-)%" !#$%#!!"$'*,+**,7-+++('*-/-)&$"$''%$&('%$%&%$"C&-/-)((&GA==!$&&$#$%&'''%$FCDFHJ%&''%FCCGE?=CEA>AFJ(+-/.)JFBAB@<:9613=A=;;<<:67=<78;=?=745659ADB?=;>E&)("AA?=?BDEGHKLHC>968:?FIF?8;CD??CB:64/,/49@:8::4+!!)--02/+)))$!%+-,(&*00-,/10.-+(&'),-+*+,)&'))((*+*'%$$%)+)')-/0/.,++,09BD?4//1/("%)'$'163111/29;61/241-18>@@@BGHB98CNQKC=<954699755898543/)&*4?GMQOF@?@@@A@?@BDCCDDCBBBCC@=98631.*%"#"! !!"!',/15997542343-).7"%&%$#"!!#$"!! !! 4&""&1,-,++,,*)))*- Ҁ݁ĀπЀ󀆁ۀׁہ gހÿſՀϾZĿԄр{.üžՀúý½ſĽ񀂄ڀŸĽĽ¿ŽXȹヒĽٺ牉ڻހ􂈑ƼȮɲڀ˾ĻŸµи個Ƽ;ıü¶䍫ǰƀž½ƿǻžþŀֻȹǾ̀򇎑_D 345544345457876553223332cb134432 cdddbbcfggea^4]`cddefgijfa^]]]^]\]_``acdddf44ecabcccbbcfgfeffecba_^D_^]\\^dgigfecceggfghgc``acgheb`_][^dgheca^]]`ababbaaba`_^]\ZZ]chhda`_B]\[[[\\[[[ZYYYXXWTRQQRSVY\^_\YWVTROMJHHJNPPONNPQTVZ]][YXXZYXVUUTRPOpPPPOMMNONNOPOLJIJKLLNQSSTVWUSSTVVTQPPQRQNJIIJLLKLMMP`8o]TSRPQPNMLMNQSRONQU[`dcba^YUSRQQPPPOLIJJJMNONNMPVY[^][ZZWVXXUTRSSSQMNQTVURQQUWXWUVXXVVUPLMNNNPSTTSQOLJIIJLNNKIIJJK0MMKKMMLLKKJIIJLNNNORTW[\[YYVSSTUWVVX\]\[ZYYWTSQPO*NMMPRQPPMLLKLKEBPcfWH@>BJW1/SJKS.1112d`[[^_`]WTVWXXY[\[\]_bbcd47:<<;99;<;989:;;:9:;854321a__``_]ZWUTUVXZ]_ab245543321^\[YXZ[\\\[Z[][YWUTTUVVUSQPRTSQOLJJKKJMTWTOLJNTXZ^_]VOJHGFFGUIKKJKKIGFFGHIIHGFFEDDDEEFHKOOMMNNMLLMNLKJJLNPS[0`\VQOMLMNOQSUVTQONOPONMKJJNRSSQQQPMKJKLLOUXURQSTUVXZ\^0110/\.//.YVTSTSRQRRRTY.00.ZZZYXVVUUWXYZ[\ZZ]0/\ZZXSNKJMU[VMJKIGFGILKHEDCDINQRSSPLIJNNJDABEIMPTW,--,,WWWUT,//-,-,+TPLJO>V-/11/WTWXWTSTVXXWURPNNNPQRTTUWXYXVRMJGEFHJLOQST+,VSPPRU-/1210/b.--/110,RPS+...,WUSQNNPV]12/VRSUWVUVY/22210.-.//010]YVUUVY./00101342.--./1566687410/.,W,/5786421234345786434 56653101358::9:;<;7.H?C%&&&'''(PMGCA><=?@>97;>;74348@HNQPMKKKJJJE?=@A@CHLOQQOLJGFFHKKJIKNSUTQPQ*++TPNMNQ**S)**RQQRRNJLOI=9>?BC@=;97565-NQY_3799;<==>>?@@@AA@@AEIHEINMKJFDEDCBABAADJMNORWWPJKPRSRQOOOQVWWVVWXY[[\\]`bdehiihhijjheffecba^\adb^ab]YXZ\^d4dZUROMMMLNU[^01245420/][YXVWUQLKHECBBCCBBBACHKMNQRPH@941047:=@KY/..01233220/034323455431/0246899988oonmmostqmihiihiigfghgcbbdei55310/00//012220]c7;={|~BEGHGFFEDEFEDCCEGHIJJKMONKGCA@BBA@?>xssx?CGKNPQNJFA:66:;:85431YSU\10YMDIRUQNMOOOJGIMOQUY\_11\VSTTQNNQV]^[X\acdddegjifb^[[YSPNNPSTQIIU[XW[^_bdcbaba]XVXYVUUSOLJHGHKLLIHIKIFEGHHIHGHHGEDC?<99:;98;ACDFIJIHHHILMIFEIMONMNMMNONNRVWVRNHC>=@BA>@GJFDCDDDHMOMKJJJLNRVVUUX[[YVTROMLNSWVSOIDA@ADFEDEFECCBACFHIHHIKLKJGFEE EFIMNOOQQNLKKJIHGGGEDDEFIKLMMNNNMLLMOPOKIHIIJKKHA7[QKLX6@BBHPRTUWX[^^ZSNKHECBDHLRYaa]\]beeb_]^chnqoqwyoheefimsxz}~~}@FMOLIGDxniikleSC;>CAGHGHJK|JJKKKMQPMMONJGHJKP_ABCB@wmd]ZXPU8EHJLIDDHMOOMLOVZWPJLW011466568989;==<<==<>ADEDB@=;86566543248::=>=8437;?ABA>>@AA>=<<;:<@BBA@=:9;?CDCBBA?=;9777643478642abc2)33348;<<=>=;987766778:;==<:89<@EGC;6578776 +77665444554-5677665432ddefhgdcbccba___aceffg43334555667776433322,+,,-,,-/110.,++,,,./.--./120-++*+, -.///0/...00///000/...---,+***)((),/0. 0112231.,,-/00.,+*))+.00.-,+++-.-,+,,- ,*)*.10.---.-,,-,+*+#*('&''()*+-.,)('&$"  "#"!!!"#$&(* )*++*((('&%$%9&&&%%&&%%%&&$"""##$%&''(*+*)()))('&&''&$#""#$#""##%08-'&%3$#"#$&('%#$'+/1101/+('&%$##$$" !!!"#$##"$')*+*(('&%& %$#"#$%#!"$&&&$##%'('%$$$%''&&&$"##"#%'''&$"!!"#%'&$##$ ##$$"#$%$$##" !""#%&'))((('%%&'(''(*++**)))'&$# """$%$#"! *+# *(&&(*(%#%&'()))+,-.../1223$  /../00.,+)))+-/1,+*('(*+*('%$#"!"$$#"   $'%"!!"$$#! !  !"! =!"$&&$###"!"###"""#$$&*-+(&#"""##$%&&%$##$$$#"! "%&%$###"!"#"#')&###""#$&'()*+('%$#{%'(()('&&%%&'((()(()&%&&$" "'+'"!!!!#"!!$&'('%" "# !#$%%%$###""&%$%&%$##$&&%$#"!!!"$%&&&%$"  !##%%#"""$5!!#&&%#""#%)%##%&&%%&(&%' +#   J"&$#"### "') " c "##$&''#!"$%&(('''),,+*)*++,-,,-.012344323321///.,,,*)*+)')+(%$%'(+)# !#%##"!"$&'((&#2#777678::8543344321  &+?ACEFMEF$%''&%%%$%%%#""#$$%&&&'('%"  """ =:8: "$'())'$  #""# = !##  !"$'+-,+.24431245431.--*&#! !#%$! &*)+/12565;42.-..+)(&"  !""#$#"   "#M""##$&(('%" ##  #'+,,,-..+)('%$$&),+)&"!"! !"""##$$$"!!"$$##$#! "$$"!!  /+)).$$"#')*,-/133/+(&%#""#&(+/32//035542/0369;:;>@:533458;>@BBBA!$)*(&%#B>954674+" '% $%$%(-!',.-+'"!$$"\>878;=>;742/+(,:&*'#DFHC=:85457764469=@@>;;>>;87304AHB7.,.0/./00//.,))+,*'$" )&")-+''),-/1571)%$&)+,-/230-02/*()-///*%%)**,-+),130+(&&())*++)&'),166443.)'()(&'+..*$#(/584.))**('''(,/.+('()+,)&%&&(+/4;?;2+%&)'#35 &('%$'+0249EPOB4/0243-'" "$&((%&,/,'$'+,)&%&)*(')+B,(&'+,+.5<=6,&$$#"!#$%(+-.-+++*(('$CCI&)0442/,)&%%%##$#;8"'*..)'*-/.+().21*%##&,+'$$%'&%$&'%A=%/41+$"  !"""#$ <>#()('%$&(*(%$$GFH%''&%%$DA=9>KMD=9;E'+-..--+($B=:89:9558:>B?<<==<:61.3==>@@>;= @#%&+/-'HGKLD:40/6COSLBACCB=3,/45544889BF:453.,6<<:840.'71#1663,&$$%%&'%!)=A1'%(+..+''()+/.+(&%&+01/..//-+)(',0+&)-230-+*+/7;70.--///010,)'*382,'&,5:8678::6.((1=DFB>;9:<<<;<>?AB?;99;:9766779=>8-#!(3>>=:;@DFD@;78;@DDC@=:77751,'%#! ! <$$/!##$#@:62/,'("###"##!!##! #%$ . 9))* -,-.//.-,,,++**+,-.݀Ҁ̀ڀցʀ遃ǁ v!¿Ҁ̀¾¾ހýP¼򁊒üſɺý +悌ĶـƱ½þ΀ſĽŵƿȧ󄈄򁍗熑øκ׀ºƾ¼ĴǾǾĹķ̮־¶µþƾʻǺø¼¿ǹʸ邏󁈏|33345678876554556899:9777642`ab233221a_`ccbcdf3dcba`__``^]`acccbbcccda__accbbd344665hedcdedccegfcba__a`__aaaba_]]\\[\^^^_`abb`___]ZXYZ\_`]YYZ\]^_`abbcbGdeedc`^]\[[\^_aa`_^^^\[[[ZYYYZ[Z[ZYYZYYVRRTVWVUUVUVXXXWSONMMOSVVUTRPQPOPiQQRSRRSSRPQSSQRSSRRSRQPPNLJKKJIKNPQQRUVUTTRPNNQTUTRRTTRPOONLJIJMMLNSWXXXZ\^^]ZXX[`ba_\ZZ[\[YWVX[YURNKJJKMNMNPTUWZ\]`_^0112320[XXXYWTVVUWY9XWWWUUTTUWXX-.ZYVUUWUWY[[ZXVVVSPNLJKJHHHIJKKLMLJKKLMMLLMMK$LIGGIKNRSSTUVY\^_b233b_^__^_`acfhf`[XWVUTSQQQRQQPOMKJKJJJKMUYXUV\37534669=ACBACC>965799885`YSPQQSSRSUWXZ^1220_acdeh67767787667N52]ZXVX\][YZ[ZY[\\^1456753466543323321/[Z\\[ZZYXYXWWVVVUTTSQQRSWYUOKHFIJIHINPNMORVWUQLHGEEFFGHHIIGFDEFGIJLLKIGFEDFHIIIKMOOMLHEDHMOOMLLNT[^^[VSRQOLJKLMOQTY\YQLMPQNLKKOVXYXXWWUQMJJMNNNPTZ_[UQQRTUVVWZ]///00^\\.]/00.VQQSSPOQRSTUVWYYXY[[XUSRQSWZ[[\]\[[/121/YTPKHJOVYUOJGEDEGIHECCCDFKRWXVRNLMMJGFHKLMNOQTV,,-,+,/22/.--,VPKKNRVY-/00/.ZWVUTSTSQPONIOPONKHGGFEEEHKORTUUSSUTQPS+++,,--./..---.///,SQQV.//-WUTRPPRY033.URRVY[./0231---.021/YTSQOQVY\012345650,UTV/2467532/-Z.//269=A@;8777655455422467776422334589730/012467778:9779;;;:963/,*)()(('MKKIEB@@@>97980.39:9>DIMNMKHFGGFC=:ABBCB@@@=;>FKJHFDA?CFA93/,-38:=??>@@@ABBCCA@BCBACHKHIPQNKIFDDEEDEHKMPSVVWY[YWUUTSRSTVVUUUVWXZ[]]]_`behjji4g4fc`aca^^^_^^][XWWSLC?<>HSTPONMLOQSSSRRSUXYZ042^ZZZYWVWVSQOLHFEDA>>??AGNPQTWYYXWTQQSTSSTVY\/00//0110.-XY..//0124541..01245jhedcdhm88mheegfzb__bdfjm79::852124543236897mr<}}}CEGGEDCCCBBBABCDDFHIIIJIIJIIHGHLMMKJHECBBDEFEDDDEEFGIKMONI>dZ_1ZJDM.331000///ZQJMUXWUTSTVTTQLGJTXXUPMKHDAELSXVSUY]befecba^]ZXWVVY[ZXRKC?GQRONMLQY`deeec_[XTSSPE;9>DHHGHHFFJLKKLKLPSRSUUTROLJJKIGGHGB><;;:;;::;=>?BEEDAABB AACEGIMTYYTOMNOOPQOJFFFDDFGGHIKJIHJOSVVTRTX[\]\\[XTSQLKNOPTY[XSRRSTTTWZYVQKHGHIKOQQPONOPPONLKMPQRSVYYWVTRQOOPPOKKMONMMNOPQTVXVRMJIHGGINSUTTWZ[[\^^[UPNMH?:@MX_cb^YUSSWZYWUVXZ]_`acgkpuwsolkihhjntz~{zxpd^]bimpqsvz}ABCC{zywutx@DFDycOEBBGUf798e\XVSTVY\]a5=ELPRQOKD~|AFKNJD{vx{@B@tf`^\[[d=EB?FGxmijlkihfeglnonmib^_eilnnpvzsi^RMNPRTYYODADLUYXVTRRPLIHFGJLLKIFEGIMOMKLMORQNMNOONNJEDK2FV[YVW[`gjiif_X)SOPUYXWXXVUUY]add_VSUXVTUUUX^``a]YZbhd[SPOT[]WRONMKIHHHEBEJPTVVTRQQQRSRPNLMT^fgc^YVUTSUVSOOQQPQU]dhiid\SORY_`]YUTYZRJKRWULA=@DHKKHGIJKMNNNPOLKJHIHE|vttqlq~FGFFJNKFMVWXZUJ}yytkhovqdf{z{wmdbbdbadnuvxyzC|slks|@CCDKRSSURI|zxkXQ\ghp|tsp_PQY^bf_X\clpstrqtwtnjicYUXWNILSXXM@ALQOPSRQSZ_ded_ZTOLLNQTX[[]`^ZWSOMT^dge_Z`knf[UYbhljfge]TSZaegirxrf^ZWTW_d_WSV[]ZSHBJ_rwvqljjhbYTYdqvspmlr{~xojhfdejkklnnkf`\[\cpund__befggffedceglnlbWSYafinsxz{{yvqnmoqpmhdb_^_`^VKB>?ACCBBBDDA;4-NGK[l9>@FQWUOIFEI_PWYVSSV-0355213446789:::;<<<;;=ADDB?=;:876543358;?BEHKNMGB@@A@>;99:=AEECABCCDFHGDBCFHGEB?>>?@@?@6A?=;:976677765543343b_269::;<=>=;9865676679<>>:77:?CCA??>=;865556544456654333467887665433fefh455544gda_`bba`_aceh555444544467864  ++***)*,<-./.---,+*++*)*+,--,,---.,*+,--,,.1000110/./0.-,,++,,+,,+++*))*+,---,+,,,*())*,-*(())**+,-.---.//00/.,++**+,...-,+++**)*(&&')('3(()(%#"""#%'''&$##"""#$%%%&&%%$%%$$%&'&&'(''(('''&$"M!"$%%&')**))(&%%&)))''()'&$##"! "!!"%())())*+*)))+./.,*((*++*))*,*(&#! !!""#/%&&'(*++*)&$$%&%$%&&'())((''&%%%$%%&&('+('()***)(('&$$#""! !!!"##$$$#$%%&&%%%$##"""!"$&'&''()*++,,**+,-.021.,***)(&&%$##$##! V !&)($#$+'$###$%%&'()*-,-/013+)(()++*)*+++,)()**)(t'&&%$#"""%''$! "#"!  ""!  !"$$"!!"""#$%$#" "$$"!!#'+,,*'%$##! !"#$')'" !$$#"!!#&'!&$! !#$$$%'+-*%""#$%%&'(*+))$!"#$##$%%'((''(('&$##$&('&&$" "')&# ! "'+,*'%###!!!!""#$%%!!#%&'%%$ #$$%$#"""!!!""#""  !#$%%$""#("!"%&%$#""#'$"#%'(4&$#"!"$%&"!#&   &V E#!"#"'$)$!"!  !"#$%%%&'(***)))**,,--,../1233331.,,,)'(***(()'&%#  !"""#"""! ! !&'(*+--,+*(''&$#"##% 4324762001+/-,,.02455:@AAC#%&&%%$$#"""##$###$%%%$##&''&%$"! !"$##$$%&'((#& #"$ "$" K!!!&+.,*+.012310//-,)&$##$%%#!&(((''+04656652.+('&$B !"#$#""#$$#""$# !$&*,*'$"""#"C#$#  !$'('&$&),.///0.+)'#"#$%'*++)(()*)()*+*($""! "! !"""!"##""!   !"#$%&%# ""! !##$%'(&#" !(.2541.,++.00.,-/02333458;>?<97754469=ADEBA?;3//269;<=>@BD"#$$FB?>>U<;:;#$$?2'#""#(.*&%$##$&'(*"%)**)&"=<"%('"<9:< !!;3//.-,1 &%!AC$%F>86676655458;)842259:;:;AEA:3+()**+./*%"#',.-+'#~ +/,**,0466751,(&&(+*)*+*)*,/233/)')+*()((+.000.+,275/*(())*-240+(&&$#"##"!"&),--+*)))***(&$$)/442.,*J+-+(())''*.35663.)&(.242/*(++%!"'+*%(00,&"$+6=BFJLF=621255+# !#%(+--./.,)'(*,-,*)((%!$*17994-($$$##%&'%!!$*4;82.*'%'((('$#%)+-020,+-/-)&$#%'%%&(*,/246850,)()*++)'$#"#"!!! "'))'%"=9B)/0-'#  %))% "%''&&'()*+++*)'&%$%$!ABB?<:;979AF$%$$'+(%)0001-'D?=?<648=:12?GD@A?832353028<<=>?B#D>9659> ! !%)**-,&CABA9-'.66;INEAB@<<;0'(.2572,.27:;<=>??=9541,*-.($&*..' (+*+,*()-15651-)'&')+-/0/011-+)&%)/4640,/794.,.3797576/((,0345:>;4/,*(*/2/*(*/10+$ %2=?>;88875/+,4-?DA<979?B@955666:<;;=><952213;BA92124667787667 62,*.49:=@CECA>=>??=952/,+*)$A" (5 #%&''%B>=;822!')'#"$$" ="$#  "!  + *(--.//-+++,,+**+,./ȁꀄ׀񁂀Ł Z8υр„N0Ž˅̀ý¸û̻݊ƻƿǸŷƿ;ĻëĶż;Ѐ»˼Ͷ􂊍ĸ¾ӀʿóöʻƹʼȯŹԾøրſ퀆`?786556863234556568::9876776 543de33dccdcbabc2ebaccabg43hfdba`"_\[[\\^`baa_^\[\]`cg44ihggfffecbaaba_]]_abcba`_^`aacb`^>]]]^^]]]\\^__`bb^\[[\ZXXXY[]^^^`aa_]\\]_addcba`___]\[[\]_bba^]\.[[\\[ZWVXYYXWXXWTSSROLKMPQQRSRQPPOPPOMMLJIHGIMN#OOPOOOPQQONMLKKKJIIJJJKKLNPRQONNOPONMLNPRQPPOOPQRQPOMLKLNNMKJLPSW]25541_^^[XVWXYXTOLKKJHFFFHKMNOOMKLNPQQRSTWZ[]..-.-YVU,/111//046653`\ZXUTTVWXZ[[ZYYXWXY[[YYZ\_`aa]XSQMLJHHIKHGEDGHGFHJLNNMNMLLNQTVSPOPQQPPQSUVWZ\[\]^`abdd`]]`fmpnga^]\\\[YWTQNLLLMONLJHEIHGHKOSY0468::87666532554468973[RNMLLLKKLNPTY]00.-YVVVWXZ\^__`b24566652^ZY[..//\YYZ./134689:87655432$10^[YWXYXYZYYXYZ\\YUUVVTSU[00[UMGEEFH/JNQQONMKIFEGHHHGGFFFEFGHFDCCCDEEGHJKJEBBDFGFCBHLJJGGKMKJJLPTVVUURQRRNGCDILNOS[00ZTQPNKJKNSWXVUTSQPOLJIKNOOPQTXYTMILS[/][\/][]//1220\WTTUUTTTSORRTWWXYXURQQTY]\ZYYXXY[/11]WRNKHGIPWYVOIEDCCCEFEEFGGHKPUVVSOLKIEEHJKLLMNPRU-00/.E0230,*RRRQQRSUWWXZ-/110.--YXVTRRSUVUTRPNLLLMNLKGCDGGHIKOTVUUWTPPU,+UT+S,-./.-,,-...-+U,./.XTSSTSQOQW/342.VRQSV-.-+*,/12.UUXY-.-[YWTQNNPTZ/0/./13530-,WXZ.13)1-YYWZ0368:;:878997410//01234677520013444344689J8889:;;84/+)))('&JGEDC>85674//4568=?@BDEGFECCCA>:538CMQRRQMKJLNNMLHC@@DMV,+URNLJGA99E-43110.+*+-,USPLKOROJIJJKKJIIJJIHGHJIFHLKHHJJECIMLLLID@AGKKKMOKIJIGCCNXWQPRSQNLMNPQQOOPPLHFGFEDEFECCDEFGE@:9>FPUSNLMMJ'FEEGHJLKIFFIJJJHFEHIEBCDB?<9510///...-.06/-YZ]\YZ/26;>@CHMOMKJHEB?<;@FFFIG@DNV]bcdfiie_ZZ[YX^221//00/000/-YYXWUTUUSTY///./00110_`eklgdefeefijig4D324543356779:::7521366558=CHHC?>=wsv>@@AABBBCEECAACDEFFGHIIHFDDFJLMMNOPQPPNLKKJIHGHIJJKLMMKD=742/[VNGIORUYZYWSNNQST+-..-XWW,-YXWSNLMNNOPPMJIFA;635;@DIOW]bdeedb`_[TLKORPLIHEDEFFGGGLQXckhaZVSPKHJKD;;@BCBACEDEHLMLKIJMRURONPRSUWYVPLIGEDDCA@AA?;98889<@CBBA@??ADHJLLMMLHEGLPOJGHJIJKOQRROMNPPONNORVWTRYafhgfc`[SJCADII?1OM8OXSNKIE@<: <@DFFFEDDEFHIJKNPQSUVUTTUUSOLJGDCFIKKJHHJMPQQPPQSUWZYTMJKMOPQTZ__\[[[ZZ\]\YX[^cf`RJN\eb^]\ZXVUSOMOTVVWZ_cgknsyzxvvtrqqrty~BC|xuvyywussv{@A<yvvwvw{BFJKJGDCCC|yxn`Z\XQQUXZ[\^`b5?JRRMGDCAADHNTRI}rv|?vgXNPY`euDHFFILKE{rmihijigedegkqwz{wnf`YUUVVYakodSRXYYYWRMMT[]ZVUWWTSUWXWROOKFBBFKNNNMIHKMNMLNPPQQOJEEHQ6KYZURSV[clqng`ZSOQVYWVVSQQU[`cc]XTSTWYYXWX\__^]YTTVWSOMLMLKKPWZVPLKKJFDCBA?}@CIOTTTVVTUWUPKJLQVYZUOLLNPPLHEFMZeie`][[^^XPLJLORTVVUY^\RMNTZXLA>?HSWRJEJZ%rtf\TOPPLFBAGNSVVROOSVVSPQQOMMLKJIEAAHPZejg^SMKHFFHHFCACJT_ii\QMKE@CLNE||DHHJTdnlfgjkjdSC?DHGDCJT_jokfa\[XTONKJKLLJHFEB@@CDEJRTTTRJCHKOQPPSVVW[]WH??BCDDDEEGGHKPSQKEA~|wqquvvy||zsr}ELTXPUUSRPKHDyussrnhfp}}umigfgiihlsukbbfmuxrkn}HNNHFHGC@DxrmgghgiuxqidXFBVkf\]\Verpeglg`dkijrrf\VOFBJX`\QIFJRYUMIHP[bc_UMVa_VQOMOQQLILU^adjh\RQTY^_`ekkcSP_qy|vmheeghp}zqnrvrcX]efc`ZTRU[[TKFDFRet}|m_[ajia^i{}sjdelrrokjjiijjhecdly{rnqtsmeelsqjfeddc`ZWZbfd[NA;>HUevztsux{{vpkhgjlic[RLJLLHDCEGGHHE=538@GKJFCCDEA}{==<:989987:AHKJJJIECFLPO PW.0126875579;9658:;(=AEDA>;9765432149?CEINSUVTOIFDB@AB@=<=?@A$CEGHHHGGHIIHFFFDBAAA@=;:;<<==<;::9876178987766799;>@ACED@<756676668:<<8543224789:>CD?:754 +56665322356054445554ggj6665jhfeeec_]^__aeijigef3445554567766 ,--,,,+ ,,++,-,-/.-,,+++*))*++-.--,*)))+,.023321/.-.-,+*+- +,,,-.//.,+*+,,+,,++,,,-//-,+***)((()+/,..-+**+,.021/.-,+++**+,-.00/-,,,+***)()**)(()*)*)'''&# !#$%%%$#$%$"#"!! "$%$###$%&''&%%$#U"""!!#&'%#""#$%$%%&&&%&'('&%$#$%%$$#! !"#"  "%'*,,,)'%%%'(&$#""!!"###! !#%(&&()))$"#*('&&%%&'''(('()*,-,**+-...,)&%$#"!! !""!"$&'(('&%$$&()(&2%%%&'()**)(()*+,-.,+**.47730/...-,*('$"!!""##"! !"$)'#""!"! !"$&(*''&'())+,--./Y,))**(()('&&'(())(''(*+,*('''&%%)*'#  !#%%#"!*!"#" ##"!!! !#"  "%';%$$%"!!!#''#"""! !#%''&%%$##" !"$$$%'))%! $(*(()(D)&%%%&&''&&&%#$%&&'''%###%'))'''&%%&&#!! "&(&# "&)*)'%$$" !""#%""#9$%&&&'&&$###$%%%$#"! !"!  !"$%$%&$""%$$ F$&$$$%$"!!$#!!"%$$%%&&%$" !#&$%&&&%'  e##3! J()*+** ""! "!"""##$%%%'(())('&'()(&)*+-..///01221210.,+)'$ !%# %%#"!  !"##"!!""! '  &*.0112330+'&$""$ !>(*/45201210010.- $&#!! =;=!!"##$%# !"###$$%%#" !#%&''())('&%$$%&&'*&##! !"!    J!"$'+./00/-+*(&!! "$$%%%(+/5:83/+)&"  !#! "$&'&$#! "$&( +&# "$# ;!"#"! !!"""#&)*))-133321/,(# %& %"'-*'&%# !""!   """! +   !#$%%" !!"%((''&%$%%&%$$$&(**&$(0520/.-,+**('),--.03568:=@A?>><:89:???><=?B##D@>>>===? #&''%$#$$GDCA>7/",-*%#%&''')*+$*+($"!!#'**%=69= Q;3)#$).1:#&%%'*)%?9655676543458<>AB@<751.---/54-)&'(%" "&(+,)&'),,)'&&%%$v#!$*19<:3,'%$""#$#  $+276.'%$""(*%?="$$%,6<9458:94* "%$"!%+29;9620.,*('&%&&&%$#" !""%)+++*&D@#&(**)()+++-/+# "B#$HHJ&&'(*,)%" ?><956999:;<;98?#(/2-ICO00--,(%#B?=<=<9538BEBBCA<865658<>71037;<834=$''"!##!?B#E@<;856767>EEA>:64,!*9501/+5=:35:714767;:4.+'" %.41*$!$+20*&%)1663,'-32,*(')**'%'-23365-''*-0004994A*(2=BD@:643448?B=76:=;2+.3420-)'+00,'%##*7@FD;1.2:;627BIE?9438<=;89::877;AFC<9;?@>97:>=96545530,-144.'",6@INMJGGFB?>@CEFC=9535640+%!$((&$%&&$CC!!!"!!!>!$'()($! !  D +//120/.--,*)*+,,.010/.-倅݀ȁˀ׀́ Sgτ7?¿ÿs¹¿Ĵ␴ՄрǾ􊞮кXŷpΪûľ¼׀̽ÿĻنǀ텙̾ǹӉʺ½Ľǿ񁊊ĵ´󊖓ǿž˽h놋󀏛/675322456896323445788764K5677754443edca``_`a`_`dffda_befec`]\^__^]\]^^]^```^]\ZZ[^abdfghgeeeffecbaaa`5abcefffedcbbcca_^___^^`a_]\[[^bdfiifb`abb``_^]_``__``a `_`acdcehgdba`__``_^\\]^^]\ZYYZYX'WUTTVY\^]ZXXYYWUSRPONMLKKLKJIIIJIIIHFEGIJKKKLMNMKJJJIIJKMONOPPPON8PRSSQOMMMNNNMMMOPPPONMNOPONNQVXWUSTVVTROOQUXXUQMJIJLMNNMKLMNML MNNNORX/12Q0/-TNNTZ.//^[VSX145431\WSSUVWVSRRRSUX\_`aa00122a\WSRRQPMLKKMPRSSRPMLMQUWXXXWVVUTRQ RTUUWXWVUTTTUSQQTWYWTTUVWYYWTQMJH,IJKLLLKLMLLLMNOOPRVYZYXZ//]]/00/YURPMKJKLLJGF0GILORRSUWXXUSRRTV[^_^\\[ZZ[]/13568998632112467654 55654321110/ +.]]][ZXXY[.//0/][\\[WTSSUVUSPLJHGdHJNRSQPNLJHGHGFFFGGEDDFFECBBDFGFFGHHFC@?ADHJJIKQTSQONLJIHHFEEHLRVSOQSOKJIIHHJNSUSQRVXSJEFHJLOQSTTTROMLLLMMMNRW\^[VRRW]/\XVVVUWY[ZY./00//ZSOQVZYWWXZ^ac_[YWWY[\YUVZ]^][ZYVRRUUW./[VRPOOOTZZUPKFCCBA>:@?;72SEDNY00//010/.0210110011/.//.-XTRRRSUWXWUTTSQOKFA?BHOV[_`]ZVRNLLMPSSQPOPRQOOT[abaaa^XQKJJIFCAACCA=::<@DGHGFGGHKOPMKLOPPRTTQLFBBCEFGIIHECA???@??>?AEIMMMKHFEGIGFGGD@AFKNMJIJMPNMNOPQRSTVXYWRMHHMW_ceb\WTQNKFB?:ibh@LPKB::?EJLMKHEEEFGJLNNLJJLMMJIILMNNLJJKKF;3368;?@ACB@AEGIMPRSTWZ[WRPRTUUW\_a`\URQQPRVXZ\/13697cXV_immjgfgfea^^]ZWWZ_flrvxvsru{}}BDDDEF{xttsqpooqvz||zz{|~CDEDCA{wttuuuvwurqnbWV[`cdddek:AHNOLJJKLMMPTVSKAwrruvsrvysjfjppjj?OTQQRPK&ztoljihhgcdmwyvvqf\Y^a`_aeijbYYZXWY[^dg=eb`^_^^__[TNLLKGGJNSXZUMJKNQTUTTSRQOLIHHEH7Wg_UUZ\[[[\_ef`WSTWTONQV\_bed[TPOPRUUTTY^]\YTOPRTSPKFDGJLORPKGEDEGKKHFDCCDGLU_dbZRRVURRQMLQTVVTQNMMMKGFIMTZ^]XSQRX``YSNLMR\cd`\]`\PJPY\UG?wqqAMUVTW_ionhdfie]TNKLPPIBDJLKJKJJMPRQNORQKGHKKJJLMLJFDIPUZ_a[PJIHFFIKKJKNTXZZXSMGBABCGIHFFGHJKP^ijea^ZYYRIDDFC>;BO[fmmhb\YWSNLJIIKMMNOMGB??ADKQPMNOOMJEELTXY[aaXPLMOLJKIFDCBJNJDELSQLHEB~xpnxAA?vj^\cnGH~tuFIIILLuwomopnmqvtnjmtuj`bgiijljc^gw}{|FKH?tty}{vyDNQMFykbdgffihgda\XXUSXbgfg`WVYWWZ[ZZ^``bed`_ZRQUY^b^RKNROIILLKMQW]`YMOZ\URSSQSVQBgrKbx~n`XVZ_\XXXWVX\_adfdfihdafyHQM@nec)a^[blrpg]XVWVWYSKOY`ejlid`ada^_gq{{vohgjl9nprqonlifegls{|xusqpokhkpog_\]_`abaa``_^^`^[Z[_bddgmw3~zvrommlifc_\Z[YVRNG?>>@>qn?AEGGHF@:CW354/T,49;:999:<<;:::;;;<>AB@><:97667899;>BGLOOOQQQOKGDBA@?>=<<;:;>ABBBABCEFGHIJJIGFECBA@@?=96469:96679:;:7312358<><86<678:=?ACDCA=8534689:;<=<7431[VZ021^16:;:865456754345677653345/65554433dbbbcehkkihgfca`bdfgggfeccddfg567876655 ).-,+*)(()))*-..-+*+-...+**+,-,-,+,-.-,+*)*+-//012321;0/...-,,,+++,-/000///..//-,++,+*)+,+**)*,/02332/--.0/..,+,-,-...-/110121/--,-.//.-,,-,***+*))( +'&&%')+-,*('&%%$#"!  !"$#$%&'&%$$###$&&%%$$#$%%%$##$!"""###""$&'&$#$%%%$##$'((%#! !"!""##"!!!""##""$' #&%"!#3(&%%&''&%$$$%&(+-..-,)&%%&'&%##"#%&&''&%$%(*+-+*))(&&%+&''()*)('&%%%&&&%##$')(&'()*+,+)'$"  !" "###$%$$&(('&%%&&&'(())&$##$%'&(*,,-,++)'&')*+*((('&''&# !/  "$$$%%&$# "%'))'$"  !%(*+)''*/454320+%!!!! !"#"! S #'***(%#"$%$"!  !  ! !"#%'*,,+(%%)/3564/,**(&$"!4.0 (+("#&'('%#"!  > !!#$%#! !#$#$&(((&#!! "#$%,)+179865741///.,,.148;:<@CDDCAAC#$%'''IEA?<<<;:::;=@BBAAABDF$#"B@>=>???@@=:970*),.00/--/#'('%$%&''(+-+' 9569;99<>:3025633 *.--/-)JEDB?<;998765228=?>><60.143236994.-.,*)()+,,+*(%#!!!"##!$!!-82*),-0451,(*,++,*'&'*.0133.)'&&'((''*./.-*''(*)'$!!#%&()(%"!!#%()'%#"""$'-4860+*+*(('%%(***)'&%&&%#"$'+/20,(''+01-)&$$'-331..0-&"&,01,$:78 '++*+18<;74574/)%$%()% !%&%$$##$')'%%&&#!"$%&&%"!$),/240)$#$##%'&%%'+./.+'$" !$&%#"###$(19941.,,-)# !#"")17;;730/.+(&%%%&''(('$! "&))')++*($$(-00154-&$%%$##$#"!!BAAF(+)$#(,*&$"!?<6384-''+3?$&LE==DLNK%&&'))H>DQSH>989:979<<978;<6125776761/4>B@?B$'& 88<>=9:")+(#C?72475566531.-,)(,47672++.--./--/1013211.*(*-141)$&*(%%'&%%(-14/'(01,*+*(*-,#4;)6BHE;1++.10.//.-,-/13423431/0<&+( 5111.,08<:4/+*++-/+')/359;:62243236;DIFA:4258:;<=<<;96446;@B?=<<<;745:;7201356654322110/.-.14678:?DEEEDCDEEB@=;987531.,,-,*'%"!$$" "$%#!=:9=!"! 77!  ;!##$%&&%" \$"$%'.--../12210/.,+,-./0100/.--.//€߁ʀـ؀΀ 󃇊üڄۀ̼Ký߀ۀ󃋇ƿÿ􀇎ɻ溕Ϳڀjü·ľǿļ܀󅓠쉘ɾǷíĿՂŽȹǿľǼɾ݁Հ̹¿õĸ׀µº˽¾ǿľû[Ƿ *^553b[SRY135532245654345433456689975554c11`_``abc23455gcacddeggd`^\]aaacdcba`^]\[ZYXY[\]^_bdefghfddeda^\]_``_acefeffda`aa_]]^___`ab`^^`cffeddf33gIedaa``acddeh4heeffefgi665gdba`^]\[\]^]]\[[ZWUTTTUWXYYZZYXYYVSNKJLNONKIIJKL KKKLMMKKKJJKLKLLLMNHMOUZ[ZWUSRQRSTTSRRRSSSQPONNNMLLMPSSQONNMLKJKNOPPQQRRSVVUUURLE?@CGJLNNLJIJXKLLLKKLMNNNMKJJJLMMLKNTZ/0/,-...-,WURLE@@CEFEHOVZ\`11^XTTRPMMOSY\]\[[\\[\^_]YUUVVSRRQQOMKLNONNOSUVXWWVTSQRPMLNQRRSRSSSRQPOOPOMKKLLMLKJJIFCCDCABCFJOTWWTOLJHGHIKMOONNOOPPOOOPQSW[]ZURQPONNNOPRUXZ\ZUPMLLKLNRUURRSSUUVVX[//'][[\_b3443ca`01343334566763111247865544234321/.//0010__^]]/+000/[YY[ZWUUUTTSRPNKIGGILLKKNPPONMLKIHHIHGEDEEDFIJKJGEEEFEDCCFJNONNOPQQKEEIKJIFDDEFINPOMKKJHEFHKMOSVWURPPRTTSQOLIIIMRWWTQOONNONLKJLQYa30YUTUX]121`]ZXY]00/131[TQPPOQTUSPQTVX2\]ZTNLOTY[ZXY]//_]\[XROQV[_0/\WQNMOSWWSOMKGCA@?@BFHJMNDMMNNOPONKIIIKMOT-//-VRR+-//-+*UTQNMNQTX---...///.-XWVUSRQPONNMMNOPQRSNIHGEDELV\]ZVVXWVUUTV-/12331/.-VV,..--,+,XWSQSW-..WPNOPOORU-//.XURNHBBFLRVXWTRQTWXWXXY031[TSTW.2421220--.0135531-TRV/255665420//000//0011479;;;:9876654334433100123346898789:;::9::98751-)$CA>:::;<97:>?=;865530/4;94/+)'%GFJ.A8.,.39CKOQSUZ]]ZWSONNOONNPSTSPMIGFHKNNKLPQQRQQRSTUWY[\[\_a`^^^_`aaa`_\YY[_bdghged2cc10/\VQSVVTTVX%ZWOFA@=6116?JPPLJMRUWZ\ZYY[YWUTSSSUWXW!XX[]VC438:@LXai8987642122147633443:431/./0/..0011000121121100__]ZY]135530//0134334566532234445%4459@GJHECCCDCBBCDEECB@?{xwz?BCDEGJMPQRQPOQQPOPONLLKJLPTTRMIHHJMPQRPJFINQPNIA7\H?H,1223462RIR.//00.-..-,-//0/[ZXTQQTVX[_`]YWVUUWXYWTRQQOLKOSUVVURNLLPVYYWTRQSTUZadb^YVVY]`b`ZQFAEIGDAADHHEBA@>>?BBB@>=@FJLKJJJKMOQTTPLLMOONMKGDB@@AABBCEFGHHFEGILLKJGFHKNSUQJEEGIJKMNNMLJHHHLRUURNJE?=@EIJJKNNKIHFEDBAqCGKLKKNOKGDCAABCEILOQROMKHECFLMHCABB>:9558<<=?BDDFIKKMPTVX[\YTRSVX[_ce31]XY]a2466789:;8fafmooonligfilnqy}|yxyywzDEDBDCyuvxzwwvy||yxxyy{~{usrqonprsrqonotuqmlr@IQTRMHGJMMJHILMJE~vuusmnt{~}xqnopkb`lDOQQQNH}zzyskfeedbbcfgdafptpmmomkntuspmh_XVY]ceZF;9vuAP^a^YWWUQNRX\\ZWUSRRMFACGHLSUUSQPOPQTWVRPNMLPWZSLGCFOSQRWZVOIEFFGIIJMPPPONNONLFDO^aXOMPSSQOLKPX]\XUSPNMLKHD;9?@BCCCDDEHLNOONLKIFDBAA?=<=>?@@@ABCDFHHGFEB@@A@@?;4].25J7:=AC?820/04:>>94359;<<=?AB@=9400246:===;62243]WX\^`b1246654445675544556765,667775gc`^^aei555gc`_`adeeedcccdegi555665434 *'""&I.+))(()*/-,-.//00/-,+-///011//..-,+*))*+,,,-.//0112100/.,)(()***,./000///0/-G+)((''()*+***+.///..0112210.--,-/1112200111233210/.-,+++,,,+**++)'&''(())('$" "#$#! !""###""#"###"!"#$$#""$(+,,+)('&%&''&%%&&&%$#"#%&'%$$#"""#$##"""!"#$$%&%!!#$$#!!! ! !""###"! !"##"!"$&1!"#%'&%%%#! !%)+,+)))*))+,+(&%&&%$"! !"$%%$%'()*+++*)''&$#$&'&%%&&&$"##"!!  #&(**(%#!  !"#C$$###$$')*('$#" !! !#%&(*)&#"""!!!#&'%%&'((''())(()+.10.*)((((()**'%#" ! !"$$###"! !p!"#" !##""#$$%"!!  !$&%$"""  "#%'('$##$&&%$#! "%((&$###"##" !#(,(&%&(,,+)((*)%$H&()'%%&')++*%"!"%)*)''**)('&#"#%'(&$" !"$((%#"! !! !"#$$##""##$$#"  !$$"!$$"! "$&&&%$##"e! !!!""###$#!$*..*'&'&%$$###$$%$$&&$#$'%! "#!!!#%$#!!$&'&$""#%&%*'$#$%$#%*    * %_&$%&&&'')!$" #!!#%'))('%#"#$$##$%&%$"  "##"#$%&''())*+,-,+***++,;+*)+,.01110/,*$!  !  !#"!!!   !$"$*.2 '''%$% +"%#"!!"F#$$%$""!@=;> "###$%'*+**+++*)))(''&%$$##%'*+)&$$%&(*++)$!"&('%"!i! "$(+,+(&%%$$%$#"!  !""! "&*++***,,.04530-++,/11/,&! "#!- !#$%&&%###$#"! !#$" $*,-+(&# !$'C()('&%$##"$'))(''(%"""!!"""##"!  "#$%%$! !"$&(*&$$%' 2158985323689>BB@@@?=?C#$#DBAD$%&MKD@??@@??>`?ACCA@@ABCEFGFEFHJGB???><<<==<;:88;<9635#(+*&""$''&%%'('$@:9;:88;>@@=97884.+2"*--.+'HDA?@A>96553p56424;=<::;:8:>@><94.)''(*+& %0/*,167521133210/0350($%(,-/3892)&'()**)(('%##&()(%#"$&()%47 ""$),-,+)'(+/353,%#)..,*&"$)--+*(''(('$##&(**)'%',1563.++.3442//10,'&,20("98 *230,*+*'%(-00/.,+**'# "##&*,+*('&&'())(''&&(-0,'"!'*))-/-(#"#$$%%%')(('&&%$# '23-'%(*))(&%(-10,)'&%$$##!25",6>A@>7.***(()(''()++)&" !$&)*&!!'+)$#',5-,)&%$$!!$&&%$#!<;B##"$&&'(++**)&!5.084+!%+/247:<=@DJ'(,,H?*55,#@<7688896/,5@A822333785016:<:87;?=868>E#A<@$).-&<2.04786347863464/+,021-'""&)'#!$(+-030,(%'/77.'# !'*%!$''*/1121.*&&(++($%)+( <$,269<>;73-(#%+3;BD=66754551..4?" 831-,/234542//2431/-(&)1:<73238><64:@@<;>@AB@;5469=@CC?:65566423554225;BHIFB>:54+6;??=96457:==>><962.,/6=CF$$%&('&HDA?=965554@6971*(*-.,*&#""#$$! !# 5/1%++$"$#!!#$$&&"" "#$ "!  A&%#$&'()/-+++-02/-+++-./0/01߀Ɂ߀ƀـ́큂΀ꀇׁ 6DŽŅʄ̀ʿـǿπǿ懠ꂁþP8轓¾¼þſٿνŀĽιý焞øſ̾½оʾ䀇ҿɿ¿ÿ¿þǼ懞T4543$200257764334210110024433443343`\`100`hab232babcbba`bdda\[]abcdgjie`^]\[ZYWVVWX[]_abcccdefecdfhgebacca][\`cccddfi55i44fc`_ac`_abddba`aaa_^^^_``ababcdf334fdccdfggfeeecbaa`_^^___`_C^\ZZZ\]]\\ZYXYYWSOMKKKLMNMLKKKLLMMLKKLLMNMMLLLMNNNMLKJKLMNONMLOTXYWVUUTRQPNJFDGIJKMOONLKKLMNQSQMKLNPRS TTSSQONMLJIHGFHKMOPQQOMLMMLKKLLMN+PRUY.//.-,,+V,WVTQPPNHB>>@@BDFHLQTVVUUY^__`0/\\[[[\_bb`]\\[YWUSROMNONLKLOQTVWXXVSR TUVXXVROLKJIHIHGFFGHIKMLLNQTUTRQPPRSRQPPPONOPQRTWXVROMLLMOOPPPOMJHKNPQSUUSQSVXX[/]]/035677887433443111333221234443210/...[1ZZ[\]/01110_^]]\ZWVVWXXY[...ZWUTTUUTRQRSSRQNLKJHHJ LLLMNOOOMIFEGH3GGFFFHKMLIFCDEFEDEHLPSUUTSPNNMIEEFFEEFFEDEGJKKKMPSQNZPSUSPMMNOQTSOKHGJOUWWTQNMNPRROKKQY^^\XSPOORV[011]XUTTUY./0.VOJJOSUUUTRPQTVXZZYWVWYZZZYYZ\[Z YWTPQTX\][WQLK0JJIGDA?@ABEGGFFGJMNOOPQOMLMPSSQNKHGHKMPU,.//.+TSRO+,,UQNNORUX-..//01110.-,XWVUSROMMMOPPQRUVUTSPMKJJHHJNSZ/...-,+WVTQOPTW,.255310/.T,VTTVY--WRONNNPU-//.-TNLMPRSWZYUQKB?CMUXYYYXWUUVWVUVWXZ//ZVWY./0111220///012332/,+-/01223332211/../135789687654322121011013565456665543479987789:::998630+'HC>::;D:877889976655432/)E=:>&2778=ENX.,SPNMLMMMJGDEGFFEFHJJKLLMORRPOPRQOOR+*))QMKNSQONLLLMNNMLIHHIIHE@?K,,TOLIIHFDDCBEJKKKJHGGHINTUSRRPLLOTWVQKGGIKLKGBB@=<>ABFIHDBEJLKLMLJHEDCBA><<;::;;:>DHIKNONJGED?;9998669:74587465+J+8BGJNRSTV-02211001368:;;:86531/..-,+TQMIEDFLQUVWWTPNOOPRTUVX[]][VSSSRNMNOPOONMNNNLLKKKORUWZ[\^123321b12445542ba_]^`b111210110//.--.-WUSQPOMIEEGJMQQPOQTVX5YYVTSTTSSSUWX,-XWWVVVXZUC207>DMW`h78998741002577898665321@000123320/02233443332/SLIJOTXYX,--.011223455300233323469=CJOPPOMKIGECCDDCCBCCB@?@ACDEFHIIIJLNOOLIFGIKJJJLMNPPNLJHFFHJLORSQLJMPQROG>854321012430-Z..\YVV,...-WUWXXXYZYXVVWWX[^`__\XUROLLNQSSQOOPONNOQSTUUVXY[]^^][YXYYXWY]]\[ZVTTVWXVPKHHHGFC@=:76:<;::=ADFGIIHHILPRRQOMLJEBnCBAACEDDEGHIJJIIJKKJJIIJMONKIHHFCAAA@?==>@BDFIKNOOOPOG@?DHIHHIJIGEECA??@BCCEHLNNOOQSVXYVSSROLIGDA>;868<>??>@AA@-??@BCDGJNQSUVWVVWXZ\]]\^_ad455e_\]c59;<<=>@AA@?>===:;BGGFGIKMONMMMKIGJNQPLJKLNONP1@R`hklmoojbZUTVYZXUQNKIKQWZ\]bfcZRORX\]]][XTQNMKHILOQPMHGKPQMFABDGHGJS]de]VRNHBDHGDHPWZ]\XSPRX_deaZTRQNHCDINQTVUPLNW_iqne]YZZXUROMKHEELV\XMEDCBCIS]^WQMMMLNSX_ff`[ZZYRGACHNXckj`TOOQTWXWTQMJKPVVSPOOPRQPQRQONMKIGGGEDDEHMPOOOPQNKNSUSPNNMIEDBDIOQMJKNPPLJJJHFDDGLT]dbYOLPVYZ]`]UQPMIFEEIfMMKJKLMLLLNNQTSOMMORPIEHMMLLMNOPPOKFEEBBHQTOLNPOKHHEwgdmwzxvska\^fkhfjv|{}rzNRSROKJGB}wrleceijnsrg`bgihc`cjs{|uqoqw~HMPMHzvrpmgdit}xlfdfif^UJ=9ALQOF=;<;>HOLJKKNVZSKKPV]^YNJNRVWVSOOUVTVYXSOLMT[VIEMXZV\jnf_]WJ>?K`uDIE~xsfX[joe^ft|{tkcadlnf^`cefknkeabb^[ZZYUMKS[^`\Zajmiflv{ric_`fkorutniffhhea]\ZYXURRV^fjjgc`ajw{xz|yqiinnlkljgkt}}wrv}IFLwqmiea^]`gig`YTQNKHD@>AFJKGB@???@A=lbc:EMNJD@>>?DLRUUVY]]ZWVW\1321235665066788:>@?<;::99;>@BDEGHGD@=>ELQSSPMIECABCDCBA?>=<=<;99=ABOA?><;;<=>=<855541/./26;@A=731027;<93126:<==>@BA>;730/.049<;96323442a^]^`a12223456654567654567889::9863c`_`acegfdbaceffdcdefh5665hff)')))(((*--..--,-./0.+*,/0003552/-,+++*)(())*+,---../000/0110.-,,,*)'(+-...-.00.,***+))*+,-,+++,+**)*+,,-..-...---../ +10/./11100/.-,+,-,+)))*)( '%#"!""#$$#"#"!"""###"#$$$#"!!"""#"""%(+*)('&%$$$%$#  !!!"#$%$#%%#  !##$$%&'&&%$##"  !"#;! ""!!""#$$$#$%&') !"##%(+,,,@)((()*-//-+**)'&%$$###$#"!!"""#%&(())***+*)'''&&'')**)'%#"""!! !""! !!!#$$##%'(&%$%%$$$%$$$#"#$ %%&'('$"!!""!"##$#"! !#%%&''%#$&&'( ** '''&'()('&%%&&%%%&''&$$%%%$#"!  !!"""# .!##!!#$%&%$###"  !"""$&'&$B#$%&&$""#$&(&#!"%'(&$##$%%&$! #(+,*(%#"#%'*)'&%%%'&" $') (&&'()))('&&()()*)('&$""%'))(&" ! !!! !"$"""%'&%#! !""$#"-#! !#$%&&%$$#"! !!!"#$%$$#"!"%(,%%$#"#%&%$$$&%"! !!#%$! "#%&'('%# !%'&$$&&&%'(&&' +  "    H!! +j!"#$$$! !#$$%$"!"!!"$%&(*++*'%%%$"!"#"! "$%&())++))(())*   ""!&+.0 !"!( $(*)('&''('%$#"###""##"! !!"#$$%%&='(((&#"#$%%%$%&'))(&%%$$%&&(*+($#%&''$ !   !""#%&')++**(%" !!n!!"%(*,/00100///.-,,,-//.-,*)*+--*%   !"!!"#$%%$##""! !"!% "$&()**+*% #&'''(('&%$#!!"##$%%#!! z !"#$###$$%&&&%&&'(,*)(*=<;::;;=@!!! =;:;=?@ABAAB"$$$FDCCDEGF@704>EECBACDEEFEC??@ABCDOFHGFC?<:87778;=?@B!!><>!#%&&''(('%##%),,'@5/0233469=B#%&$" <82-3"*..+&DBBA=974207//12118BJKE;5568;=>?><9762.,*'"'035577751-**,./-+)'%#%),./0253-(%'*,--,+)('&%$##%()('$"%(*'" "$%%',3883.+*%"#%$"$*./0/,)(*.2441,)))($!"$')*+*'$&+17<:3.,,,+)('&%$""%,0.&!6%,22.)'(('(+.2773/./0,$ $(/7<;3)%&')*,,*(&$%(,,)('')+*))((&%$##"! "%'&%&&'%#&*,*(&&%$"! !$'(&$%')(%###"! #',3871)&(,//131,)('$" !$'('&'())(()*,.,)''()'#!$'&%%%&'(((%"""!!$+-*'()(&$3$"8.-39;:851,*,25325=DFB??ADGKLD;?N,-,+)'%#!=:841/254457::4037862/048>@>9778;?C$'*)&FA?=<;:646=CGHD>61//0.*%  %$#$$'-0*$$&).0,&#&),-,*)*-.+,.-*(&',1-%"'./,/7:51/-% (4@$&#><;4+,582-19>=940/1672..0125761///.--..,(',2340.29<957=BEED?941159<>?>;85578630/-,*(%%',25765339BKRQKEDDC>87;=;:<<98AGM$(&GCBDD@;766520./37851.-,*(&#!"$'(&# !!711!%%" !$'('$##$0 !""#"#'((&#! C)('()*.---./ ..--,,--./01101.--ŀ߀せڀρ 6ÿƀ¾󁇇 +ºڅـր½􂇆󀌕D񂈅̀þ¹º򐧵򅈈þsþŭۀżþʀþȻрø½IJƿǻـ̵;肋ʴĴǿùÿǼºJcf443#11246776432b``a10^^010/01234443456534577533444554fdb_]\]]^_`_]\[ZYWUUTUVWWXY\^`__^^_```acddcb`^\][XVY`efgfeg5675hfffdb`_`bcd2332b``ceedccb``bdedd2eca``acddba``abcf44fedcdeffda``a1a_^]\[Z]``_\[\^``_^\XUTTSUVUSQP:OOPSUTSSSTTTRQRTVWXXVTTSRPPPOMKJJJKKKLMNPRRSRPNNNRVWRNMMKJIVJKMNOQRSSUTQNLKLMPQQQPPPSVVSPOMKKLMNOPQTVTOLNMJGHJKLLMPTW[1431[TQRTX\00/-,-..-,VVTRNNPQMRRSUY]010.Z[\]]\\\[XVX[^adfd^YVTUVXXXWUSQPPQRSSTUVW[``][[[YVUUTSQNKHECBCEEFGHJKKJIGGILNPQSSSRRT UTTUTTTUUTTRPOPQRRPOOPPQQQNLMPQPOOOPQ +TWZ\/.[YXY.ZXY[]^`1345679;<<;:9753212E3310/00100/.\[Z[/0_/0231]YXVUTTSQONNOPRSSRQOOONMLKJIHHJMNOOOPQROIEEGHILOONMJFDDFHJMNMLJIHHJKKLKIIJJJKORTSQQQRPMKJJIGEDDDHKKHEFHKMOQUWWWURRRQPQRQRRQNNOQSSOLLNRSRRQOLKLMNOONR\11YSRSSQQTWY[]/]\YVRQV/11L.RLLORUWWUSSUX]`a`000//00\XWY[ZYYZZZ[[ZUQPQRSVXYYUNIFFGGIMPNLKLLJECFIJHGGHILOLKJLNQTXXSNKLNPSW.0231/-+SQS,/3320.,,-.///001110/,+UUVY--XTPMKLOSUW,..//-UNJIJKLKKPW]0220-+SPMMNOQS,046310///011.UOPUXWVUUTSRQPOBMOU./YTOMLLKIJOPNMLMPTZ^//]\[Z[\\WTSSSTUUUSU.10-Y.0110//..022244310/023320//023456543443310 12111356665323 21234689877677889973/*JB<;;:9:::;;;:9632210.+**)&C:44$5AFKSSNIHGFEEFE DEFEFIIGGKMNNO[NNPSTSS**)QMIHNSTSOKJLOPPMJIGEDDDEHJMOPONLJIHEBCDBCFGHGFEHLMMLKJLOPNKKMNMKHECDEFHIHFDCBCEFHIEHIJIGHKKLKGDCDD@<9533227?CDFFEC?;:<:7.(GI.8?CGKQX-VQMF@ER.0001234556789:;;<;P<==<<=?ACCBABBA?>>===<:9740YQKFC@=@JUYUPOSVUQNNRVVUUVUUTRPMGBEMUYYY[]/02233357876 +544323443345433234442110//.--./0.-WUX.00/[YXWVVWWY/0/.-,,WWXZ.V>RI_>FJS_j9:::8742224568:::99:98876556544554311247754322210/[WTSTVX-/./0232223322249@HNQQPONLIDB DFGHHGC?=>BC8BBCDGIIJLMLJIHIKMNNNLKKLLLMNNNMMNNLHECBDINQTUUSRQQQOG<5310/,*U,-,,-VLEIQXYTPRROMOTY^`_\YWXZZYXWVVURPPRSSRQP0OPPQTTSRPNNPRTWY[[ZXTPPRTTRRUXWUUVWXWWZ]VD1,6BFFEbDBAAEJOQOKJIJMMLKLMOQSRPNLIGGIIFCACFHHKPTVUSQMHDDDA???ACCA=:733688646:>?@CHMSVSMGEFFGGF@:q=BFGFFDA?@CGKPSPJINTVVVUTUSNKIHHG FDBCEJMOPPNMLLMOOPPOOQTVY[]\[YWSOMNRTUUW[cm:::;=>?>===?@ABA@>=<<>??{yxxyyy{~@@?~|xuvxyzyyz}xw{~~}|}}zvstvyzyupopomkkid^]`dhntx|GHIIJJIHIKLJGEDDC~pfb^ZYcqz|wqpsuxyywwwpf`oFRVTNIHGGqieddfeddeghffn}}umeaerIQROI{tqu=:i`[UQPPNMLJJLNONLJJMPT[ba[WUOKJLNPRTUSPQRRSTSUVZ8Qfmpssohc\WTROOPONOQOKHKPTWY]_]VOKQY^]\[YVRONNMKKPVZYTPPRSPKFEGHJMOT\ejh]RNMJGJNOOPSV\bc]WTW]bgje[USSPJEGLORVXVRPSY^_=_`^ZWUTQNKHHOXXOHIMNLE?>?BKUXQGDEJOU\dfeca]YWWXVSOKLQZdg_QIKMNONMKJKMQTVVTPKHJORSTTSQNJGGHIJKMRTOJJNRTRLGGJMMKJKH@ppCORKEDIMOMKMQQOMLKGCAABBEKQVYZ^elg\UQLHGHKNPRRPMKKKIGEGNVXQJJMQTTROMPUVSQQSTTQMIAsuFSTLIPXVLzFNVSI{xwvqf`htvspmichnigoqqzJORVYXQLJIE~uokiihfc^]ajv|sg`^bfjlmotywplifju|LNF~zypfakzyusqtpdL=;;@EJG@;82SGK^:BEGR_c_^]UE=FS]cd]JDQ[XX[VMNUWVTTSUbnkZNMQX`gldXTVWWey~qe]\cluwuplkoqmhlv{zvofefcafheaabb_[XUTPIGMV\diga\_gjhmy}ytqnljihilqtsojgfimmf\SRVYWRMIGGHJIFEHNV`hjfdkw}zutwzxrh[U\oEC~|uu|~vmhda]\^a`]XTQMLLLKJFBCEEEFGDCDGFC?:p9?DHIHFDCDFLRVXZ]0][.134457887642479988:?CEA=:876789:;<>ACDEDBCGKLMLIEB?>@AAA@?=<<==<;;<<==>>>=<<;854557:<=:9:=>=951/026:>?:521368:83^.28<>=>?ACDBb>:62\\04663125775212b`_adg4fdcc23565445666433456655678889::976542a``_^]^adedcba`__adfffedccbaaa`_`,-(('(&&10.-,,--,,--,+***())+,--,.--./0/.-,*)('%$',/00//0/...-+***,-/-,,-+,./.-+,-,,+,-../00/.-./00.,+++-,+++*)*,,*)()* )('&&'()('&&%)$##$%%$%&&''&%&((())('&&&%$$"!  !!"#%'%$#$&((%###"!! !"$%%%&%J#!  "##$$##&((&%$#"""##$#$%&%" !"  !"""#$&(*)$!!!"#  !"$')&&''('&'*,.//.*(&%%')**)'&%&%&),,+***)'&%%%$"  !"#$$#"!!"$%&&(('&%&%&'''%$#$%%#""# "!!#$$###$'%(*,)'&'(()*+,-(''())'&&%$##"#$$###"!!"!!!  !#$%&$  !#! !""!  ! M"$%$###$#! !#$" "#$%'(**)'&%$#$$%&&%###$&&#! "#$$##" !"#$$$"$*($#$"%'()*)('&$#&$!!#&)++*())+.//.#*('())(()(())(%###$%&''&$! "$$"8   "$$$#"! !"#%((%"! !#%&#"#L$$%&%#!!##%$! !"!!$),$"!"""#$$!"$%%$# ""!! !&(%"! !#$#" %()'&&&'((&$ %%%$%%   " & #()&$ "*#&('$#$%$! #%$$##"! !%'''()    !+ !"#!0 $&+14 #"  !! $(*)(&"!!!"#$%%%$!"#""#$&'(())'&$$$%&'''&"%%&())('(('$"!!#&(*++*('%$$#!!## "&(('%$%&&$##"#"! 3 !"! !#&(*,.000/,)(*++)(*+*)**,,+*+,)  !###$'+--,*'# !&+-,)%$$%%%$!: $&''&$" !"#$" ###"!!! @ !  !"!!!"#%&&''())('&#! !#$%&')-3?>=>>>?@B!!!A@><;<=?@AAABDFHHHGHJJJIIHFDCDEEDEEFGFDCDFGDA??ACDCA>>?>=<<;85589;=?AACF$&'''&%%%&'&$#""!D@81/.++3=DFB=:;<==;9>984.*1!)-,)&&%%HA94201232234445:CGEA;61/19C',-+'GC?966,'$!!%**%" 2 $289;;852.+)(''('&&((%$&)+,-/0.*%#&-/.-++)('&%(,0/,(')+*'$#%%&'(+07<;4-+*(&(*+**+-033/*(*-1463-))*)%"$'))+,*'&(,/0110-+*)'&$##(//(#$''&"!&.0,%!#&),167762/,++,,*'&'+2:<5+$$%%&&'(((&%%')+,+*'$#%()**+,+)%###$$$%(*'$#%(*)%""#%%$$%$54 ()% #'('%&''&%%$"! !""#&*./026:70+(%""#%'*,,+)((('%#$)/0+&%'*+*('&(*)('')++)'%!66"+,%#)//'@:="',*$>;:;;82/4=?=;:7479548::@GHFH(+.00/*&%$!<74223320--/4<@<63135788997661* -!""'.0...+!"*0561$!)0./0,&',...-,,5>;/''),16;70./.*1=A92..17==953369624:<;;6001/.021.-..-,+*+*%#(/36863027758ADA=;:::9889;==;9669=>91*&'(&" %,5>@@<71.1;H(&FBBDEEE@:8;?@<8421/./021/-*((*+*)'$##$%&%#"#%$#!9 0"#$#!  !"$%#" !!! #$%$" L(((*)*+-..,++"/.-,*)*-/100/.---./011100/.,,+**+Ȁ偛ـȀ쁂с (G Eüׅ؀π=􁇈ÿ˿¿wʶżȿ˸¹ſMЅπй퉙󁉎逊ɽۀнŹᅥƾɾ򆈆お·Žmÿž;*]`e357:<<;98787644432a]]_00`][\^_]ZZ^011234554434567754333feca_^_bbb`_^\[ZYVROOOPRSTWZ]_][ZZ[\]^__``__^\\[[Z[]_`bdddeef43dcdeddcbbabcdcbbbcddfg4hgfeeddcaaa`^\\^^]\^_abba`_begfdccba`^[[^b1122211`_^^]\\[[[\]]]_ab_[YY[[[ZYZ\]^^_023321`^\ZYXXWVUTSRQQSTSPNMNONLLMNOONNNMLKIHHHIJIHHHIJKMOQQQPPRSSRRSSSTTSRRQQPNLIFDCDFFGGGFFGJNSVUOKJJHFGHJLORUXWUTTUTRMJKJJQYYUOLNRWYY[[YY-Z...\[ZXVUUVWWVUUWY[[ZYXWXYYXXZ]][YWUUUTSRRUVVUVXZ[]_00_]YVWZ]][YWUSQPPNMKJJKKIHGFFFGHJMOONMKKKLMNOOPQRRQPPONMLLLMN=<;9753100.,**++,.027=CHIGDCBA?@CFILMLJGFIMPPNLKJIIIKNQSRPOQS)QOOQRRQONMLJLPQMIB=AKMIFEFHIHIKLLJIHGHHECCBCDEEFGHHGGJKKJIHIKKLLJGEGLNNNJDAJVXTRQPQQO)MLKKJHGFHIHFB>;<;88=BCBBEGGCBFKNQPNNOSV,./0/../12356789::;;;<=>?@@@?>>?ABCD EEFHJKJHGFFEC]B@>===<:999741../00/./00.,VUTUXZ-/134446655579:99:;<;9765554346765456653334665433211100/./11101221/-,WTOIC@CLW/100/.-/0R4>9P6AHPXak;?@?=;:98789:;;<;::985455567899877532245he2100/0010012334566643236;CHLMNLJGDBACFHHHJMPROJFDCCDFGH IJKLMMLKIIJKLMNNOQQOMLMPRSPLGDBDJOSUXXVSOLE>98641//00//00..-,+VTUTVWUTUTPNNONMR[aa\VUXZZZYWWURONNPQQPPPNLHC@DILOQRPORWZZ[\]\\[\\^`dhhaYTVZ_a a``a_WLEEFFDFIJKLNKEA@ADEGJORPKHHHFDDEFGGGHJLLLMNOQSSQPNKHFEEFGIKKIEB>::;:869@GLLJIHIJLMOPPOONMKJGCA??>>@CEFFGHJLNORTUUSRQQRUVURQOLIFDCCCBCA>>?@??@DLV`cb]YWWV/UTQQSUXYZ[[[YWVUVXZYWVW[]^adfgjnq:;<>??@CDDCBA@>?~ytsttuvwxwwxxxyyvronllotwwvvttvxz}~yuuy|}|zwspopqstrrtvwz||}~CEGHHFDvfXQOVcmtxzxvqkjotuqpv{vg^h@KOPNKJKJ~rkgffgillihhfdgqxz{{yvsqs|BGLLF~spomifc`[XUTTUSPNNOQTVWTQOQZcghijjhaZVTVXVTQPPQTTRQPQSU.:P^^^`]YZ^bfh`UPQSTUTPMORW +[_cec`\YVWYXURPORUUTTX]a]XVRICDFEFIIILQX^`[QHCCDDFKNNOSX[]_`^[[\\]^`^[WSOKFCFNX__]ZWUUSQRUXZ\\YUSQPOPPPMHDDGNSLC?@BGLMJHHIKPV[ZSNNRWZ[ZXURNJGFGIIGEHOSPKHJNPOOQRTXZWQOONKKLNNPQQRROLMNONMLLLJJLMLLJHGINSSQNLJFDDIQVOECIOOLMSZ\XSOJE@yvx?GOUYYXY\]ZUQNKIIJJHFIOSNFBDFHJIIMSSQPRUWZ]\XX^deb_][[ZRDtuBGIFDFIGA}zxyJRRMG}z{xqmostmc_aelrqruonwHIGGJKJKNNJAvssponmlkklpvwqloomklnqtusqrsont|GPPHtpquxzyv8sv{}zurlc\]ac^VI?=>@CCB@@BDEGFD@9-F??CHQ4ETUQI@89DPX]_\SIOWUPR[`\XSPQVXUPOT^deb_]^`abfkd[\ddahyDEC@zurj``o@DA=v<>?xnfbacffaXQQRRSUXWPJO[cc^^fkgdgknqsqkea]]es{zuplhgkomha[VQMJHGGGFEDCEHG>CAGUdlnlg`Z[`eksxwof`afjkmpstz}wsrokgddefhigd`\XURNLJKKLKKJGD GKLJHFDEHIGEEFEIPVWVVWZ]^_01244567:<<:88899899889;>@@>;864334678:<=?@@>=>AEGHIHGD@?>?>B=<;<===<==<;:96443224899:<>?><:621257;>?:5358:<>=954579:::;=@BB?<975640^159:852aaba^]aeedcbb245665556665544455567887888643eddca_]]^`abbcbba` acfikifec`\[ +(*+)'&((&&&(((&&' +?/--,++,.//..-,+,+)'%$$$%&'(+--,+***++,---,,+*)()(((*+,-.///01.-,,+,,-././/.---.//.--,*)*+,-..-,-00/..---,+*)+,+*)()))()++*(()+--,,++***+**+ ,+*)()*++**)('&&%%&'&$###$#""#%%$ #"!  !"!"#%%%$##$%#"!""#""###" +  "%(($!!!  !"$%')('&%&%#!!%%"!V%%$$#$%&&%%$$%&'('&&&'('''()*)('%%''&%%&'&%%'(()**)'&&),,+)('&%%$##"""#$$#"!"#%&'&%%%$#!!!"""##$%$$##"#"!"#$%&%&')*+*)))(&%&'()*(&&'()+,./'('%$$%'((&&'()*)'&$#"$')**)&$#$""!  !"##!!"""!!""#%&%" !"!  !""!8 !!  ! "$###%&&%#""#$$&''&&'&$""$%$"!"$&'&$$##"#E$$'((%$$&''((''(*'%%''&$$)6 :1.,,-/)(())('&'(''()*(&%X&()(&# "#$$%&# $%#!"%&&$$&('%###$$%''$!"%&&%$$%#"# #! !$%"V "$&)#" "##""$$##$%#!  !!  #%'&&%%%$#"!! "%(+'()'&%%$%&    I2  !"$  "##$&' !("%),/2.-.!%'()**)'%"  #%&''(*+)%"!!!"#$%%&&'(''&%&'X&&&''(())(&&')+,+(%"!"%()+,,)&$!!"!  &++($"###"!""! J!""#'+-./000///0124772,)*-/10/./.( e!$%%&'()**)'%!!$$#!!"#%&()*)**)('&#"! !"#%$#"!! !"###" !"!$),*'$#$$$###$$&&''(('/(())'&(*++-/01357 ><:9:<=>??>=9>=<:988:>???@@ABCEGHHHJNQQNIFCBCDEEEFGHIJJGC@ACEEEDB?>>?@ABBABCCCDEFH$%&'&$#DCBABCCCA<3+&%(.49>AA>9547:<97:=:1+/%()(&&''JB:645665443249>@??>;98:>"&**&A;99742/+'$"! !##!$*-/00/-(# #,--.-*+-0340*'(*,--)'')+-.0220.,+-/../.+)''(,*+++-130-,)$!!""$&&&').464.'$$%$%())(*-/111/,Z-./.,*)(&#"$)/330.,**)(),.///-+*))**,+($! "'*&  $(('%$%'*.10+'&),-.--,*'%$$%''$!"')'#!"%'(),.-)&''&&'(()**+*(&&(()(''&%%&''&$"!"%)*)('&$""%+-(! $((%&*.0-*(%# =;< $).0/..00.+(&#"$&&%#%*-*%##$%&&%(,+)(),-/0/,,0331/../0,#98 $%" !$# <;:;A&--($A==>>:8:>>931127<;=?:8>EHGJ()(()(&&''%878766654457;=:7897678:<>=;;<:9;961+*,+("@"!**'# '-01/("#$$(-+')031.+*+/0-)&(.366432474//4414>#" :873-,4 " :93.,,.00-($$&')+-,)%)06512697469:;>=:63003 >?CEA<998765@665410/-,*)((()))(&$##""$'('&$##%$"!!!  ##"""$%%%' !!! :!)**++**,..-,+* 00//.,+**+,--.-,,,-/1331/..,)(䀈ʀ၆ȁ׀ Ą2¼tļ҄р3+dĿľ̸̾ +Ŀ߀􅐚CſÀŷ¾ô߀Ž˼úûùĶԀĺҷѫㅠՀ˿ǿþ)()444569<>>=<:9:;:877875eba11b`__aa_]ZYZ\_01 013554321378753cab244geb_\YWURQQRTVWWX[]^\ZYXXYYYZ[ZYXZ]_`aabdcdf43fede3554fccddcba_nacc_]]\\\[\]^_bca__`bcdca]ZYWTRTWYYY[]][YZ^`_\[ZYXWXXWWY\__[VQMIFFGJOTY]_`11_ZVVWYZ\^__^]]\\\ZXWUSRQQPPQQOMLKJIJIHIJJHFGHLPTWYXXWWUQOMLLLKLNONMMLKKJJHGGHIKKKIGFDBBC%DDDEGJLQUVTRRRPMJFDEEEDAAACCDEHLQW\_02 3431a^[XVU,VY[[Z[\^__^[YWTRSUVUTRQQQRSRQRSRSW^00//\YVUSRTVXZ[YVRPPPOOOPQQPOOONFOOONLKLMNLJJIIIKLLJIGFFGHIKKJIIIJJKLMNNOPRW^3541_^^^][[]^^_^[[ZZZ[YUSSRTX]_`aab233222346786420/013443210/..[[YXWXVWXZ[^00/]ZXVSQOONMMLLMNNPRVVTR PMLLKIFCDFIJKJKKLLLKJIIJKNRTQKIIKLK3JKLKJJJIHGGHIHGEGLOMJFDGLNNOOPQONMLMORTWYXVSQPQUXXUSUX,YWUTTQLJMRSQNMOQSQMLNQSUWXYZ\\.b-.0120ZWZ0220.Z-/2228GQFiXUW[_0/]\\[[ZYXXY[ZZYYZ\/0/\XTQPRSSTUWWTOLKKJIHHKMLIGGFFILLKJJLPRMDADHKNONgMORTUVX---..--,VSRQPNOQSVX,+UTV,-.-,+*+-...-+++,,,+TQOMMPTUT+,,---WSLFDEDFJMNPTY...-XUUUSRSSRPPT-//.---/&-WTTXYVRONOPPOMLKKLQW[\[YXVPKIIKMQUY\/0/.ZY,XWWWVUVWY-..///..//0012578655421/-,+SQRUY-../0//./000//010 1234688621110///00../134443344543454!320/.-,*))OKIFDB?<986678;=>@BDB=98%987557:@IPRQPNLLN((PMKIFEEGJLKKMOQRPOPtQQNJJJIIJHD@>?EKKHECBDFC<9BLT[00/WNE<1,1:BGJKJGFHKNMICGOVTPMKJLQTRLEBITZXVSRSWXVTTVURPONMMPSTUWXWV+,,-.-,++,-.//.-,-0/01 23444213699978:::9889:;987788: <<>???>>?BDFEEFHGHGFGHIHFFGHHHFEDDC@><;;:975.44458::99;<<;::86324:>?=:6211221123565567665556556641,)+1554443256 5210-M>79@J,12510//022U6DAU5;BJPV_h8;>?@CDDCCBA@@@???>>>?@?<975544469853357876jfef457887556-533345667789:<@CGJJJKLLLKIFC?98;@CDDCBBEIJJHGF EDEFEDCEGKMOPOOPONMMLJJKKJJKLKJFBCFJNPRUWUQLC:55665542/./0112210/../0/.---..^\\]]]\\ZXWUQPRRNKIKQTQKHIIFCAABEHJKLPV[\[Z[^_`_^\[]ac`[WSRV_ghfc^[[ZTMJJLORRPNOOMJIKLJHGGHIF=57@FFB@ACEGIKMMGLJHIKLORQONOQQPMIHHIJKJJHFDDDEFIKKKNONLJHFDDEFIKLLKKIGFFEDA=99=BFJNOOONLKJJQXZSNKFB@@AAA@>>?@=:;>BDCBB?516CNVZ[[]^^YSRUZ]^^^]^]\[[]_cgijloqrr:;<<<={{|||@CFGFDB}}zuolmopponpsuvuvwwvutsqruurnnppoonprts|opuu{|{zyy{{~||}~zvuuuvxzyyzzyxy{}}}~~yvuttx}EGGyuuvwz|{xsqolghnv{}|upoqrnhgq=ugmCNQPPNJE{uqoljjmswtolnqv~DHGEDCAEHGDwrqqqolhaZXWWY\][Z]_`aa`^]^^`glkfddb`/.-WUTSRRSRRTWZ--,+-3?KRVWUUY`ceb\WTQOOMHGNW^ceb]_kpg[UWZ^dhd][`da]YSKEELW][UNKKIQDCFJKLMLHBBIR]hlouzuiacfgfdccc_YUW^egc[RKGHLNMOSRQSVYYSLKPVZ`fbYSOPTVUROH@{AJSUQKGhFDAyuzBIPRRSY`fgc^ZZZWQLHFDEKQTVWTPNNQSTVVTSTRNKKMPRQMIJMRW_feYKDB@@GQTOJGEFHKOTUROPPOMOWYRKIFBDILNNMNPSTRLC=>CHLRXYVTTRNMOQPNKHEDDDEIMMIFFHLPPPQTVWRKKPYjvm_`fhikiaZRG~BCB@=n^V_o|AA~ztsvyukafw|~|}}vrv}IMNKD}ywvz=~}|ywwrlmtvruvuuwuoihmsx{qgcdhkkkpwz|DCvne__ab_YTSPKHF!D@?AEJKGB?;3+JM-/*R-26751--16=ELHDMZ^XRRV\]TIJSZZV\mvgWRSYbq{uVCG\oy{~EPZTDma_cmxxolp;>?>slhijhea[[_^RC;urhfoDT]ZVX^cfimpnighe`ahoqpljlqttsrstusmcZRKHGHIJJJKNTX[\_dgcZPJHIJNSW]bfgimqtw}~~|xupjfddeb\[^ced`XSRW]_[WUTRPMJIHEDEHHFDEEIPROJILOONMNOPRTVVWZ^a11124579::987789::999889:<<;963345}667889:<===?BDDB?>>??>==<<=<<<;;<>??>=<<;965421124556:<>><:864333579:9888779;=>;9765678:??>>><8434788865443fdbcdccd334456567)654443332ca_^`e5787gb_^`abcccba`__bfk787j4 ,+++))*++*(&&'()+10/-+*)('&&'(())*+--,**)**)))*)**+,-.-///00-,-//-+*)*"+-//.-,--..-,*('&$"#%&&&''('&(*,+('+&'(**(%#! !#&(*+,+(&%&''(*+,+++,,,+*('& %$##"! !* !!! !!  !#%()**)('%#!  ! !!"!"!! / !"&))(&%%$#!!$&&&&%$#$%'()**+*)(&$"#$%%$$###$%+&%%&))'%%$##$%')*,-,)'&%%$$%'(())('''&%& +%%$###$#"! !##"!  !"#$#"#$%&''(+/,+,,,++,,,--+*)&%&),../.-)))(()**)((()+)'&%$#"!"$&&%$$$#"! !!! !"#"! "$&'$! !3 ! !  !"!"#"###$#"!!"$&(*+*('&$$%&&%$!%''&$$$#  "$#!!"#$#! "$%&&&%%'()(&'')3*9,))*,*)('6((('''(*(&$$%&&'()(&#!!!  "$#!!!! !$%"!"!"#$#$%%$$$#""#$&($#$#" !##"&$  ""#%(&$%%%$%%$"#% %$$%%$"! !"! !$(*+*)(&#  !$&(+(((''&&&%%$$%&""#$&0x!!! !##!!$#!  #" !!   !"#$$# +  + *!, !"%)-13211%!$&&&''((&%#! !#&'&%$#"""##""#%')*+*)))(())('&&%%%&%$$%&&'%" "%&'(**(%!J&&&'&$#"!  "  "&+/10//02}101331-)'&)/3430,))(#  !"$%&()*)''&$"   "$%&())'%$#""#$&())(('%%%&%#! $&"  $&&&'('%##%'(()))*+,.12345556=<!#$#! =<==<976899889;<<==>?>==<;;<>><;;;<<<>@BB@@BBDFFDCBCCCDDECCFHIHFDDCCCDDCBCDDCDDEEDDFGEA?>==@CFHJ%&&ID@===>?@@=:875225:>@B,CA=:77751068.0&((('%#A=:876668;=<8789;?#%%#2!@> "$$"?;99:9861+%"""$%&%%%&'(((''()*-0/,+*(% %()('*/243/-+((('$#&,0220--495.+.148:8314641.+&! $+//+'&'&#"$&'(((&""&,3:=@DFA8224543110/+((-353.)%#%(***,*))*-.*&&*/0374/*((<+-,+)$9$*+(%##$%%#!=9; %)*))-1553/-,,+)'%$#$'*,,,*'%%'())*)&$$&)++)''),.387/'""!!$*-)&$&(+,)''('&)/1-'%$! #%')+,++,,(!"$&*..+**)&&'%$#$'))&##$'**)*+--*&%(/:B<214679951-&@=@AA 1($+5>!!@??@>>BFD?<==;67<>;;<<<>=;88;>AF"IHD?81//24436<>@C#"?:61..//-'#!! &$ l%.0,((+/0*#$*/.+.:@7,'(-5>DGHA,"1>BAB%,1-"4/.05;>=9312620111/+'&))$BA;9?&/40,.13579::8775226;>=;9;=??>c=82+%"  !$')+/4872*$!!#%'),1689:<>>?A@>?A@=;:75457520268752.-.130-+***(%$##"#%%$###$()&#!"##"!"#$&' ).-+1--+*+//+))*+,-..-,+*+-/1/րрہˁ 7݄܀#Å6̿؀CʄƄŀ¼#6ǻʼֹȀԿ+¾ަ򄑛)ÿ¾ʿƿʕ탈G߄ހĽоûŽ􁅉üŸƿѼҺºѾþ׾Իు⌜þƿҀŴi 8 9:;<;:9865689754C3344311ccaaab1100__01345654332345654332`^\]aed`ZWVUWY[\]^_`_^\]^^\ZXWWVVWYXXWYZ[ZXWWVXZ[A\]]_`aabbdedccbbcdf4565gdba`^]\]^`_^`bcba_\[ZZZ[]]^`bdeec_\ZZZ\^\Z[[\\[ZEYWVWXYZ\]`bddca]ZXVTSSROLJKLMNMKJKMOPRTVUUWZ[\]_``_[WRONNMMLJJKJJIIHHI-HHIJKLKKLNQSSPNNQRRPONIA>FOPNMMNNOOONMKJJJHGFEFGHFE.FFFHJMORUUSPNMKHDB??@A>;;=?BCCCDDDEFGJLMPQQRSSUTTSTWXYYZZXUTTUUUTUUV-WYYWUTVXYZ[]^^[XYYXUSQQPPOOQRRSUUTRRQRSSSTUVWX WVUTSQPPOMLJHGGGFFGGGEEFHIJKKLMNPQSUUVVXZ\^aa^ZXWWUROORW[]__^\ZXWWXXZ\]\[\_b245665433222321121 +245543210/./0012221/=][[[ZXWWURQQSSSRSTUUUTTUTSQPQRRPNMMMLKLNPRTTSPMLMPQRPOMKJKLLKJKILMMMLKJHFDBABBCCCDEGJNNMLMNPRRRSUVVUSPOOOQSTUTSSTVZ^110..ZYX-./0/-WUQOOOPQSVY[./[YWUTSTUX[/>000/.ZZY-.//.Z-/00//.Z-/0_[VNGHOX_110.[[\\\[ZXVXYYXXZ\///0/[WSR0SVYZXTPLJHFEFGJLMMLLNRUQLHEEHLNLKLMOQSUVURQRTVY-.#/0//.,TQONMORUY.000/-,W,,++,,-.021/.-VQNKJKOSV,,,XVSQOLIFEDFJLLLMRX]/020XPLMOPPRSVX,,./000///.,URSW--XSPPQPNLKKKMORTWXXYXTPNMMQVZZYXYYY[.YTRUWXWVWZ..///00/.---,,-.0H246642112233210-SNMOTWY---./1233322320...//00112220/../00023432112110//012233212323 210//..---,,+)PMKKMNNNMKJJHFHQ-.-,*)j**)OLKNPONMLMP*+,+*))S*+*RPMLJD>99?EGFFGHHFA;0%D,FGFGKOQQQOJ@9@OYXQLKLNNNLKKLNQSSRNHGJMNPRTV, +,,--,-...//./ ./0132112234543;22347<:99988:;;:9878:<<;::<=<<<=?@?>>@BDDBA@@AAABCDDDEEFGFFFGIHGFEFGHGHHGGGHIIHGFEEEDB@>;988864345776654567776541-++-048:976556765310-*QPRS+-./0123552P:36:=?AGLOT\f8=ACDCBCD&EEDCA@@BCCB@><98779;<=<;:9987534565445678 78889:=AEGHIHHIIIHFB=6`^38>ABBBEILQVXVTTTUUVX[]^\\^_]\\_bhmqtsoh`YTRPONNOPONIDACFIKKIGHIHD<448=>>?BDDEFFEDEFHIIIJJJKMNNMMNMJHFEFFGHILOPOLJKMLHDBBCDECBCDDCEHKLLJHEDEDA=;:=AFGFCDFGFCA?=91D..8ER.//0123579;<>ADGHHHE@?DNW^aa`_^]\]acdccbbbcdfhhiiiklmmmnnmmorvy|~{z|}{uojijkjiijlllnpruwxxwuromnruxvttvyyvssrrrpmllnqsuwvuuw{zxz}ywxyxwvtrpqtwyyz~|xwyxvy|}{yz||ywuttuwz}~zqiedddhoux<>DJOJ?1()2:=80.389;==;6+A:FSX[cl;AIS[][\\VRXdg]Yag\LMZgi`^jvraTPU_luwtuEgWW[`jtwx@B>rn9<=<<=>><;9753ZG2F:9>GShDLKMV]^ajuyvrplfefffhiga^akrrpoqu{wj[RSXYVQPRUWXXVW[\ZURPNJFFHHGC?@HT^frIztnkkmoonprrpomiaVPQV\][Z]^\XUQNLKJJMONK8GDEIKJIJMPQPONMORUVWY[^ad33358;=>>=<<>?@?=;86434579:98776 566689::87789 :<>??><;;:?;<>@@?=<<<:8544312454569>A@<97997422348:;:9879<>=;9988778<>?>>>?=:8765432cc23A446776665666555666543dd222ddcba]ZZ_g7:;:9753dbba_]\]_beh689877788 ,+***+''!*)(),/0-*)('(*+,--...-,---,+*) ((()*)('()(()*)*+,+,-./00. -+**+,,+,-+*)))**+,--...,+)'&&'('&%@&&'(''((('&%&')))*+,-.-,*))('&&%#  "#"! !""$&'&&')++,--//-)&$#"! ! !"#%''%""$$$"""!! !"#""!""!  !! !!"#%&(**(&$#"! "##"! !##$ %&&'(('&%%&&&%$%&(('&&')*++(&&''%$##"""#$%&')))'&''()**+*)))('&%%###$$#"!!! !"!("#$$#$%&'())**+,-./00.+)(''&$$&*,-./.,+*)*+, -/ +**)('''%###$%&'''&%$##$%$"#$&'''&$###$$##"! !""!! ! "##!!! D!##"!"#%&&%&'''&%#""#$&&'&%%&')+'&&%$" !!"###$&'()('&%')''''{',*($ !$)-()**))('&'((''()*'%%&&'''(+,*'$"  !"###"$&'$!!"! !"##$%&&%$$%&(%$#"""$%'&'$" !#$%%#!!  !!!"%)*&"!"# +$&'%##%%#!"##"!!!"#$&'( %#"""$'))( '((%$&'''&&'" !$&'00 ###%! !#," &%! !!  !!  ! "%&(,1!""##$%&$$# )("$%%$#%'()(('&$$###"! !"$%1&')++*)('%$##$$%%&&'((('%#"!"#%')**% C "#"!"&)-.-,++*++,.00.--,*(')-158:950*$!  "$%&&&%&'''%$#! "%&%#"#$$" !"#! !"##$')*)'%$##"! %!&()))()+,+,-./1235[666789;=?@ABA?<<>@B@<8556887667789:;=>???><;;<>ABA??@AA?>>>??><<=>?@@ABBBDFECDEBAABCCCBA@@AC3FHJJLLLJHGFFFDCCCAABEGHJIHFDBABCDEEDB?=;:9:<>?A@=71.0489")--,+*($C><:99:;<=<;>B"##$&'&%%&&'()&$#$%$C?=:7436:93/../00110.-.35541/..-*'%#" $'()+,+)))+./.+(%#&-5851/28><4.,-038>>93/.--.,&!!%*..+'$$#$'**&" =:$,1687557840/1465432/*'(-341,)*+++'%&)(&'-1/)%&*07=?<84102552-& !%)./-)&#@:8=("$%&$$',/035752000/*%#!!#%(+-/11.+)**)'&'K&%%&+01+%&+06;?=6+#!")141,('())-240)%'+..+)+,)$ $)+($$),+*,./.*'$#"! "(.-+)('''&%$#!#&(('),+(%&)*)()*)&#'4;5/2:<9983,$==#''&%%$".+/8>??@AA>98;?DFCAB?9656;DLS+RKGD?9787446;AG$$$"DFE?>F*+(%C=:8654436:;89F:96328@CA?AI'F5,+-/145656>"$" =<;73.+'%$#" D$&(,1#',.---)&)24-+15.$$.67209A@4+(+08==:<;9545679;:523:AB?==?BDD@90)'*,,)'()+,,++-0/+'%"  !)16@@>=;:60++-13201210.+)((''(('$" !#$#""#%%$#"""$%&')*" ++,,-,*((+/.--,+)((*,-/ˀ쁐ہځҀǁʁ̀À 5'څ܀¾ƶلڀ¾̀󄉉񁄆y VDŽ„͒3ϼþƿþجƿ-ӄҀ󀅈ÿÿ¶þ 򂆃ɾ򁈌˽˼ƀǢƷŻܪ若݀ºɸŹ/5/4689:;::999:::99889::9765453a_`abbce3321112345542110/013433eca_[YWUSONQRRSV[]_beec`^\ZZYYWUUVWXWUSSTUUTTUVUUTUXYZZ[[\]][ZZ]_`^ZY]aaabccbbccdeeb```_^_`bca^ [YY[]__]\[Z[\7]_a`_^\[ZZZYYY[[YXXXYYYZZYZ\\[[]`abccca`__^^^\\]^`a_\VPK NPPQQQPOOOQTV WXXWTQONNONMKIGFEEEDCCDEFGHIIJLORSVXTNIF?<@INQRRRPOOPQQPNLKKJIIGEDDDFHIHGFEEFGHKLMNNNMIFDBAA?>?AACGHIKMOONNMLKKMOPOOOQRSQPQRSTUWYXUSRTWWURQPPPQQPONORSTTTSSSRRTUTTUUUSS6SRQQQPNMLLLMOQRPNMMMKKMONNORUXYY\ab_\YXWWWUSPONMKJHGFFGIJKKLLLNQTTUXZ[\\\]_bcb`]YVUVX[^`bcdca__`aaccdd37998 63112343222345665544455432000110.//00/^\ZYXXVVWXZ[\\[[[ZWUVWWUSRQQRRRSRQRSUVWVRQQPPQSUUSRRPMMNNMLLMLKKKJJKKJGFGHFEDDEDDEHKOU\000/.ZWWWXY[YWXZXUQOQTY046521124530X RQT,./11.TOPSSPMNOPRUX.011/-...ZYD\//\Z[\][ZZ.01221\UTX\^/0/ZYZYTOLLPX1320.ZXWWXZ[\\[[\\[[\^/^.]\[YVTQPRUTPKGFFEDCDFJOSROMOQSTSQNKIKNONMNQUVUQMLLLNQV-./1110/.,VQLJIIMQTX/010.TMMSWWW,-.0242.,***TTQMKKKMQSSQPPPQTYZSIA@CGIJIGHNY111231yXNLNPQSTSTU,././00/-,VUV,./0/[YWSOJGGHHJPUXWWXXVRNMNORUWWUSRSTWYWSPQSTTUY/13221210.---,+V+-/24543212233432/,PJJLPU---.01343210//.../0112220/.-!./00111222331///00010012333430/01212223321001110011222100/.//..--,-.-,-./12100110(/---/2345665455676445543210//..-WUUW.///.-YZ-.//.../011100/00/./0233454534566653233433455442000146888765432358:::98778876788:;;<==>=<=>>=<=@CFFEEDDB@?ACCB +DFGHGFDDEGHGF +GIJJJKKLKKLMGNOONMMNOPOOOPQRTUVWXXWSPNKHEC@=:7556898654430--/134554569:97654310/..//02&46881E.QU\5?GKKKOXd8?BB?>@BCDDEGHIIHFEFEDCA?>?@??>><;:97897789:>DJNMJHGHHGFHKMONKF>aOVk@GIIJJHEB>?DJNOPQQPNLKKJJJIIJKKKLKKLOQQPONLNQTVWVQMJKLLJKMQUWUOID?;865l43210//.-,-/111012223332224420/.-YXWUNHHLLG?@BKXXPLMNLH|xvronqvzz{}CEECDHKMMLJLOPMIG,ExtyA|vtv>@A@}zuonosxywrle`_a`^\/1221/[YYXWVTSU,-,+SS0AT\]][XVTSSRPPSZbfb[X\_[WX\`bba^ZXYZ\clqnhc__daSD?AFLPNIFGIMRUSLD@@EJOSWYYXY[ad`]aghfb_][YVSV\cfc\VRNGDCBACFJPX_`]\]^`cgjigcaabc^RKHEBBITZZSJCEIKLLIEDEHQ\cfgfeeb_[VPKHDACFJMRW\\ZWSMHGJMOOPQRTVZ]]VLFHQWWW[_]WRPPOKHKQQOMLMPSUUROOONJEBCEFDDHMPRSSVXTTZac`]ZUPLHDBCGKORSQQQRPRRNKMRUTRQTZ\WQPRRMEBGR\___\UNOSVUPIDACHMONJBp`]eq{BFFypgfqGJH|wutmgmyztib``afjlllmpuy}~|uln{GKMIEEGIHC~wokloppmg_WW`jlp{KI}j`\\^bgkmopsxDDCCD@ynihf^XWWTQPLGB>:9=ENRSNA0(,14:=>>>==?@@@>80XNC>>BIJJZ5=EFDKZcehjf`^]VKFJV_^Z^^[UNJQ\emtwvrlfdcaZPMVbis>@@B@;3\Z^bWA0VW7E?[O[xKV\\[_hqtpkihgfd`]]`b_XVWYY[akvwf^[[ZUNKNQSTUUTRPMJHHFDA@@@?=<=??<>Mcprnjd^\`jsxuojhhhkopkaZV2UTPLKJHGGGFEFGJOSTSRQNJGFHMORTTROMMNPTX\^ad4678:=?@#BCB@<9887656678:;<<<:8777665ihhi5567678:<=<;:9:;5::98631221/.1467558;<:6359<;62/159;<;:99;=><;;<<<;;;<= >??>;977899753D443224567799988766777653caabcdc`^__]\_dhkl678876id`\XVV\cg58;<:75433+**+%.,,+)(&&&$#%&%%')*,.00/.-,+*((()))('&%&')* ++)))+,,*('),---./.-7...-+)'()+++*)())*++*++,+*)('&%%$$%&&%$$%&''()()))()+..-,+++***))*,-.-+($"!""$$%%%$$##$'('''())(&%$$$%%&&%$"!  -!"#$###%&$  !!"""##$$$#"! !""!  !' !"#$$%&&&%"  !"$$##"!!!#$%&%$###%%&()(&$#$&'%$#"!!"#$%%%&'&%)$#"!! !"$$###$$##$%%%&')+++,.0/.---,+*(&%$##"#$%&0')***,-...-./0101110-+*))**)*,./01210.---..//0/ *)((''&%&'()))**++)''((&%$%&'('%$$%%%&''&%%$#"!!! !"! "#&*)(:))'&'('%#!"$'%#"$# !##"!!""#$&'&2''''()(((($#%')''((%"!!#'(&%%'()**) *+****)'&%'&#  !$''$##%&&&$"  "$&'%#! !#&"$" !#%'# !$%%%,##"  !#$#"!!!"$&&# #*'!!###$%%%('&%#! !%(('$""#$%'(('%$$%'('$##%%%&'$ + !$##!!"&%   !"!!"#"""#$%&''())(&$" ($)-#%$#%+1  %((&%$%'((('$+!%3#$%&&&%" !#'('&'((&%$%&&&'&'())(''&&&'&&&'())(%#!"$ %(*)&!- !"$'*+*)(''(()#&#"""#$'+/257763.*&#! *!#$%%&&%$##"!!!"!  "$%&%#!!  !"G#$%$##" %!%!#"! #&*.0/,)((,/0/./02445%68<>@ABCBBA?=;:97421234456789997789:;<=<;:7568;G<=>>>==<;<;<;;>!"! =:$-.)&')(&E@>=;98:=??>?A"##!B"%')('&')*'%$#$%&&%D<9;?<757=;632358:963/,**(%# %+,,+*(()))''(+031.-020,+.0100/-,-/04:=;741253*!"&)($#$%(*-,(""'*,---,,.24201576310/.+))-131,)(%" !! !#%(-111011247874210131)$#"!!&,/.*&"?@"%''(&$""$)/34433321/,(%#"!"$&(+.00.,)%""#%&&'()*,/23/)$%+.,+.10,)''&#!$()('&')*,+)((('%" "$$#"%()))*x-.+)-221/.+(&$"!"&(*++*)()))(''())+,)&'+-+((*/0-))++'!")./011,((+-,(#  #&('$1('.7>!$$C=833:D&('HDB?=<849AFHE@=610258:;^=>?BCB@::AH&()'##$%#!=:63358984/++179;BL*)D70./0247889:>C#"!!" <5220*%#!  !$"*//132...*$ "*/,)+,+($"'-27;:9740011-'%*1481./0$$(*&('" .(/?'.10/17=><988776421342.,.1347:;AGNTQD70.01-(%')++**)'%# %4?A><95139AFFB>;7=>;5/,++(&'('''&$$$%')***))'$! !#$%&&%#"""#%&()*,2100,  6,++,--,+**+**,/1110/.+(%%)-1ހ׀ځҀۀʀ 6ׅԀľހƿ,#񁇉žȀ' g…ż$3|ĽǻƼĿ¼u³¾ˆ؄ڀ퀋Ŵĺºſƺį˾ƺޚޏ˷ôźɿ򈖙ƾ¾ǿ¿ҹݺ񒦫> PIbe3467776669;>><98X754455432da^]]_aba`^\[ZYWVX[`24531_]\]`232dccbaaa_\XVTSPOORWZ]`cdca_\[ZZXUSSTUUUTSQONNNOPOPQRQQSUWYZZYXWWXXWWYZ[]^__```_ ``bb`_^\YX&YZZZYYXYZ[\\]\[ZZYXY[\\[YWVWXXVVVTRRTWXYYZ[[[]^_^]\ZYXVVU +TRQQRRQQQON OMKJLORTUVXY XVSPOMLLKJJIIJKKKLMMNNOOPRRQPPRRPNM +LLKKLMPQQON=OONLJIKMNNLIHGGGHIIIJKLNOPPPQPNKIGFEEFHJLLMNOOPSSQONNOPRTUTSSTS)POPQQOMLLLKJIIIHGHHIKMOQRSSTUVWWVTSRQPOLIHIJLLMNyMMNMMMLLLNOPQRUX[]]]^__][XWWWVUTUWWWVUVWYZ[[[\^^^_acca``abbceghgda^[YXWWXY\^aba``abceeeccb`]\[\^`1344421001110/03455566778*7778899::;;:987665445554443455420]^``_`ab12 10^][YVSRQPPQRSSRQPQSTSRRRQPPQRPNNOONMMNOPPOMIHHHIKLKIIIJLNOQW/231.YWVTTSRT-2677666532466420]YVSTX..XTUX.0110.WRQRRQPQRQQRSSTWXWY]/\YWUUTUX[ZYYZZZYZ]0221.YVTTX]11a\YXZ[[-./.-,VSRTVXXZ]12220/][ZZ\]\[[ZWUSRQPOOPQSSQOMJEABEGJMONMLLPSTSQMHDEIMPPNNOOPPPOOPPQTV,/12321/-,UQMJJLMPSWZ--,WW--WUTUX-022/, +TQPRTVVUSQQR1OF>AQ01WLGFFGHGGHLT[[\142YKFLTYYWUSU,./-Y,-.0110/.e[WUSQNKHGHKOUWWVVVUSQPONNPSWZ[YWWYYYVSPMMORX/233210/.,,-./.-,,,--/257887666531/-*POOPSW-./02344322110/00110,/.-,-/01000123321000.,,0455431001122332210010/01222100/0110//..-,+,-,++,,---,,++,-./110///.,,.257 6655665556544333454322332100100101234565422344567787665545677644643344456899987%5455455677765678887778;>@A?>>>=;:::;:9:;<>?@ABDEFEDCBBBCDEFGHHHGFFED"EEECCDEFFFGHIJKJIIJKLMNNNOONNONNOOPtQRRSSSTTUUUVUTSQPNKIFA=:7543212455655445678986433443210011233345797/MC=856?MWZ[_f9@GGB=;<=@CEHJKKLLKJJJKLMLJGEDCBBAABA@>==>=;98878999::<=>@BCBCD1EGHGFEDCCEGJLLMNNMLHEDEFGHIJJJKJFCABEIKKLMNOQTTRPOpNONMLLMMMOQSSQOLKKLLMOQSTUWUND?ADFGIKMQTVQG>;:8766301345432/ZY-.//.//0010/.ZZ/231./00.ZYYYWVWWWUQMOTXXXZ[\ZWRPPOPrNJGGJMPSUVVSLFFJRZ_bfjossomqurh\RKJJJKLNSY_1`[VPKGC>=?BCBABDHNUYWUWY[ZXTRNIGILNOPRVXRHDJNNLKKJHHIKMLIFDEHLOPMIGFEDEDCDEEFFECA?>>=<;<>?@@?T@CFFA=<>??>>;3/2:@CCBCDEEGHHILSTMB<=AGPWZYUMFGOZbedcbbccbabbdfhhggffhotvvvuuutqpmiea_ `dhjlljihgecbfkmmmlkjjloqrrppqrrpnmmnoooprsqory{ysnmnmnnopqolilsvurpqrrsuwy{{zz{}~zwuvwwvutsstvvvwwvvy{|}ACC@zx@HOQQMJHGFC}sonn>mmr@HNOONMLMLJIIJIG{uqrw|~~~}yvy{wrpmjjqx{zzwmaYX\eoutqnjgc`^]XROT[\YWVTTVWY-./.-,+ST4J[^[Z\]__]YTQQTZabXLIPVY\aca\XTQQSTTSU[bc]VQQXYPE?@FNTVSPOQV[^`_][YVSQSY^abegd]WY`cb`][\\[YXZ^cc^VPMKGCBA??CJOTY^^\[\_bcehibWMJMOJHIIGITcnm\IBCEEDDEEEC@AK\jrrpnlkhd_ZTOMIEGMOMOW`c_YTPNMLKLMOPPPQSSOLIFHNRSSTVTQOMHEFHHFB>=@GLQUTQOPQPNKHFHIHILNOQSTRNKMSZ_bb_YSNID}EILPQPS[\TOOSUVTROJKSUNLRYZXVSPONORRNJHHIKRVRMHGMUZZRHEGIHEA{zyvsnpw~}wqnlowGHHF~}{~~ulfddggegllimxyi`eqy}GLNOR[b]NBww~wogfhedfijoy|yogdefksyvtuy|~}DHIHFGC|z?@@ysmh^RIC??EMOOONI@721249;=?CGJHB<+=;::<>>:6459<>??<8679:<=<:75444hggfefh56777899:::;;<;::;<:974224541]Z\0111225775689875447:=?<72258:;;:9987779;<==>?>=;:975432b``1233445567899:;:99642deffdb_^^]]_a`]]_abdi77jd_]^`bdh554fecb+, ",+*))*++*)(''&&%%&(+*(((*+*,,,+*)(''%$$%')*,-/..-,+++*(''(((''&%$$$##$ #$$%$$%&'('(('&&'(())***+ ,,-./.-,*('&&'&&'()*(''&''&%$#$%&%$%%&'&&''&&' &&&%%%&'))('&%%%$$$%%%$""#%''(())('%$#"!"# "###""#$$#"! !##" +!! !#%%#!"###$%&&''()('%#!! !"#$%$#"""#%''&%%&%#"#%$"! !!   !"###$%&&'''&%$"! !"""###"@##$%%&'''(*+-.--./.-,+**++*)*++***+,./00012223455433212235532/-,+,-./123*20/.+)))*,-))++*+++ +**)'&%$$$%$#($$%%%$$%%&&%%%$#$$%$##$$#"""#$$$#!  ! "##$'%$##$)'%$%'%##&&#"#$%$0%''&')*)'%$#$%&&%%&'(((*&%$$&*-*('''(()) %#"#%&'())((())(&&%%$$##$%%$#"!!#$$"""#%&&$! "$$" #"##"###$&]$"  !"#%''%%%$#$%"! !#$$$#"""#"## !$ "'+*)( "'((&$#$%(&%%$"  "$')('&&&%$#K$&())'&'((('%"! !#& "# + +  !"#$$%%&('&%%#"!%*,-/2"! !"#"! + "&$%&&%$#""#$&'()***)&$#$%%&&&''('%"!!#%&'()+,+('+&%%&&%&())'&$#$%%%&'(())(# "#%&((#>!! !"! ! !!!  !#$$#""#$%X$"!!"##"! ! #(,0258:9646860(" #%%#!"#! "#%&&%$"  !! !#$!  !##"  !#$$###" F!$%"!%(*)'$"#',010/.//0///01357;?@???@@?><:752124689988876654457:;::;<=>>=-<<;:::;<;<==<;?DFEB@??=<<;;;:88;@A@?@@AABBBCDC2EFGFGHJKJIIHGFDBABCBAAA@?@A@?><;;=>>>? ! :9#'**'% $A;889879 %)(()(&%&''%D>978;?AABCB?<=?<9741/27;;<:5-(&).4897530.+(&$##" !" !,.+**+-..,)&&)-24.&$)-./242/,*))+,,+,0451,((-.("#)-.,*)*-0344320.,*+.111353/+-13210/00/-,,.00-(%$$#!!!"&),/120//1334773,%#%%#"#$#%,7??2% !"""###" %/8;:8666431.*'&$"#&(&&,341.*'&&%$$%&'''()*)'%#$(,,+,,+('%" !""! "%(+,*(()*(&$#%&%%&''()*)&$&+03552/+(&#A>A#%'))()./*&&(*++*(&',-(&)-.,+)'&&'))&$""#$(*($!!%*..(" "#$"9776435;@A=:878>FJIIJKK&&&%E@@@?@CA<74347879;:79AGID937?CDH')*)+162( 99=A@<7334313569>A?941125;?=;;=?@?A#%%%$#!><71-+& !! $')**($!!(.475431.*)+--.15/*'+++$&-+&%&&$0'--+-//02442102322112478852-)).5;BIMKGDA=8641/,++,,+($! ! "$""!+=)25542/05;><86775578741000/,($""#$$#$&)+,+($#%%$$$%&%#!!!"#%(+.100/./0 %$% +)*/-.///.--,++,.-++,-..-,.23/,**+,.0.-,,܀Āށɀ~~~ɀ ſЀӀľ¿ـ󀅆Հ󀃆E8V聏0¿ڄـʿζþ'ӿʼӼձȽAżԅ˄Ԅ3ԄՀۿÿ¿ɸJÿ ſʽϤоʮ儚˴õ߇ư2¶ֵ4`_^_b34432112344569<=;99888764ecbbba``acdddb^[ZYVTSVZ\\ZYWUUX]bdda^_aa_\[[ZUNJJPVY[ZZ\]_`^ZX[__ZUTVZ^`_YRNJFFJLLLMNOOONLLNPRUVVWxWWXYYY[\\]]\[[\\[YYXXWWWVVWXZ\\[[[ZYXXXWWY[ZXWWXYYYXWVVVUUVVURQTXXWWWUTSSSTTTUWYZZZ[]^]\\ZWUTSRQPNMNOOONLKLNPQRROMKJJIHGFGIJLNNNOQSTTROMMNPQPOOOPPPONNMLLLNQRRPMMNNLJIIHJLLJHFGJNQRSQOLIHKNOMKKLLMLJGFGHIIIJKNPSUVWUPLJIJKMNNNLKJHIJGLFEDDEFHJOVXVQMMMOONMMNOPRTSRPNMNOPONNOMKKLMNPQSTSSQPOOONLIHIKMMKIIJLMNNMLMOQRiSVXYZ[^bfh431`\ZYZ^^YWXZ[\[[[\^ad45668::pliijhgggfecca_\ZXVVWXXYYZ\]`ceffgj675d^[ZZYYYZ[]1356653100134579;=><:99: 97568;;:9865 654310/23_QGIT\][Z[]___`1332`ZUQPOP QQRQPQQRRSTTTSRRSUUUVWWWVSPMLKLONKJLMNOPTZ/]WRPSWVTRTZ15776530/\ZXURRSSRSUUSQQT,/0///[RMPW\\ZWVVVXYXVVWXWXZ[WSQPQRVYYWWYYWUUX\010/\[YWX]c32b]XVX^256520.---,Y--YWWY/24420.\YUTVZ\[YXWWVTRNLKaLNQTSPKHDCCDEGJLNOOOQTUUSOJGFGLQSRPNLLMNOOPPRTW-/1221.+TSSQOLJGGHIILPSTWZZVQNNNQV.//,TTTU+,--,UQPQ5RTVUTUX.YRMJHGFFEEFIOW./122\NFHPX\\XUU,.-TNMQX04532/-W7VSNJHIKNRTTUVWWVRNLJHHKRX]/0/-,XWWURPNMOSZ034432/+QNQ*,-,,W,/38:;8421221/,*)RTTSTVY-./13 +2210/---.017220/--../00///01221002331/./13443210011122210/02343210.- +...///00110///./010/00/.,+,---,+**TTSTVVVW+WTT+,,,+ ,,TLGJ*0355432110/012320010/./../0011001332121101333210//012344431 00023566765542124543456678998778876668998%99:;<=>?@BCBBA@??@BCA>==<:7789:9:=?AAC$BABBCCDDFGGHIIIHGFEDEGGEDBAACDFGGFEEF GIKLLMNPRSRQP-QQRRSTUVXYYXXWVTSTVVUTROJE?;853234455544456665444332234@68:6YHABFMSYcl89<@FMOMIGFDBBCEGJKKIHGGFFHLPSTTRONMLJGEEEDBAAA@@?>?@BEINQQMIFDCBCCDEFHJKKKJIIHGGFFGGGFDDCCBBBDFHIIJJJHE@>BFGGHHHIJJJIIIHHJLNOPSWYYYZYUSRQNJFGKNQTWWY[[SIDDDCEHIHFHJHB<8656641110..&0441XTVXY..-Z[-VUVTLCFNSSWYXWWX[//0//.-YYXZ\ZSLKIEFNX[WPNOOOPSUTSPJB:>LZchmnnqvyyvrqpkd\TMMSY\[UKA<=ACDDEFGHFFGILMMLKJJKLMPUY`454edcb_\ZWOGJQQPOONQW^cc_ZO<*%3CMTTQNNMMLJGEDDEFGHIIFC@@BEGGC?>?@ABCDC@<<>AB@><=??@ABBCBCDGIJKLLLNNJGFIMLJHHLPSRLIMTY[]_`aaabcdeeefiihhigeejpqmjjklkhfda__`beilnnmlmpsrnkjkkmoomkiijjknuz}}vpnnoqsutronoomouupgfkkijkmnopopsvwvusrrruvwxyxwwy|~~}xuuvwwvsnihilorttspomlotyxurssrpos?HMLKIGEC}yusrsu|DJMLIFDGLLF}zsoqv}ymgjrz|vronqw{|||xssw|}xqkgghhe100/011/VK=0/:EKQVVRMJHJLQW.0@BDFJMKA83/)D823>N.7BKU]_YMKOMA87769;;:<;6*?C-8@IU^aaaca\XY^befjiefowwsw?BCBA?~zo`[dmjaVJABJRXZYXY[^abdc_\[[\\YUTX]aekprtwxrh_\^cffeb_[WVWXVSQPQQONNPRTTSTWYZ\_difZG6TM`MTTPKHHJNSUVUTRRW]`_WQNNOPQOLJHFDBDJQRPMJIKORSTTRPMLKLMNNOSX_e4679;<=>=;8668<==>><:8789;<<<;=>;7435653368778&:>DGD>8435:<;9864347;=>@A@>;:;<<;:98754I3ecbd23445556788768:;::;;;:997533ggfeda^\]`a_]]^_]ZVUX]cj9;;7e\WWZ]^^_``` +***,,,---,L--..-+)'&$""$'((('&&%&)+,+***+,+**++(#!!#&()))*+-.-**-0/+((),.0/,(%" ""!""# ""#$%%%&'(''()('(()***)))('&&%$%&''&%%%&%%$$#"##" "%%&%$##$$%&'&%$%%$#"!"#%&&&$##""!! !!  !!" +#$%&%#""#$%$$#"!  !"#$"!  !  "$%%$" !$%$###$$$#"!""#$&')*++*'$###$%%$#"! ! #')'#!!"###"#$&&&%$# "!"#"!"#$$$%&%$#"""! !#%%$#"$%%&&%$%%&&&'(()+,--./145/-+*+-.,++,,-,+,-.02:866765442100/-,+*))*+,,-.//01222462-+**)''()* %%!&((()))(()*'$#"#$##$ ##$%&&%$$%%%&%%%&'((()(((&$"!!"##!!"#",#%)*&#"#%%$##&*))'%$%$$%&&%#"# ($"%),,+))(5'&&''&&((&$""##%&&%%'''&&')(('&'*.,)&%'+''&%&)(&&')*)('C&%#!!"#&'&$!!#$%$#$&&'&#  #&'&$#"""#$$###$%##$$#"  "#$%&''$! "%#$##$" #$%$""$&# # #'*" &*,*'%$$! "%%&%" !#%&*'&$"  !$')&&&%$#! #&! ! # !!!"$   !!  "     !!"$$$##"/!!!"##$%&'())((('&&&''&$" R" $'+05"&&$"! !"##"!  #&'''%$#"!"%''%#"! "#$%&'(('''&&%$$##"$&'&$!!$%& %%$$%&''(),-,))'''%#!!#%')***,*%!"" !! ! ""  ""$%$!!""A ""!"'(%! !  (.25668;==;8640+'! #%%!V!$')(('%$#!!$%%#! !$#! !$&'&#"!"###$$#"!##! !"#$$#"$%%###%')(%"$),../001122335777887569<=;::;<:8653212358;<<;99;>=;99;<:98+9<@CDFGFB=:::;<=>><989;;=AA=89<<:9889:;;<==>?ACBABCDFGFFEFHHFC?>@BCBB@=::;8768:<<96554335#'&%%$#"DA><;:;;?"&)(&$"$''$?;=@@<7458=A=6359>ACCBA>:7447<=<==:657<>=;7310/,)  $-.,,-//,(&%$%&(*)&%*4>DE?96431.--,)&%&('$!!&**&"!"%*./,)'(-5<><99961,*,./0330+),/10/-/35433443/*&%c$# << @AB#&+033113579985.)(+//-,*'&'*+($ !"#$##$&(,3;@A?<978:<93.+)'&'***+-.-,+*'&%" !$&*,--,(&(&)*+*)(&%%$%%"644"%(*)',34-'$#$&''(*+U(#"&++,17;92+'&$A;>#''%%+6:3)&(+-+)'$$'(%%*./-+(&%&'()(&"%,-+)'&%%$$$"!659 $%#!>=>?@BC@<89@F$*4961/,&?:=>;646:>?<:854=GHB;525976><5,)/64/)$ %),.-,-/134431//0220.,-14a8υЀ½ #r򀇇z:#)܄TٮƲĽſӄԀû¼솘􂅄ʽȺ适ü輖߀恅~ͫľꁅθſ¾1_aabd35654c`_a11224554247:<==<98s75c^_e56iff3565fa^\YZ[]^^\Z[\^^]\\[YVSSTVVUUWZ\_aaabdeeb``accbabeilke\VVVURQPOMLNQRRSSSRRSVXVSQQQRSSRTX^`_[XWVUSRQPONNOOPQSTTSSUVVUUVXZZYWUTUVWWVW"XWVTRRSTUUVWXXZZYXXZ\^_^\ZXWUSQQPOPsOPQTUUVVVWXXVUTRPKHHHGFGGGHIMPQQOMMMNOPRTUUTTUUSPMKKMPPNLLMMLKKJJJKMPQPMIHIJJJIHGGHJLMOPQRRPPPONLKIHGGFEEFGIKNPQRQQROLJJKJHGFEEEFFFEEFGGF +EEDDEFFFGHI JKLMNNOOOPONLKKLMMKJKLNNNMKJIIHHHIJKKMGNPSW[^_`cea\YZ\]^^^`cfeb_\ZXXY]c43b_^^_aa_\ZZ[\[ZZ\`ehihhfedb_[XXXWUUWY[\]^_``acefffg454fedd245788776544456654457776434454578887654555678765444332220/./^\YWX[`a^ZXY[\\YVUWXWUTPMNPQOMLMNOONMMMNPRTVWUSRSTUUTTTUTTTUTSTVWYYYZ[[YYZZXTQOPPRTWZ\YSNOQSTWZ.00/\ZYZ.//.[ZVRPOONMLMOSVXY.120YRNOOMMOSTSRSUWZ`22a\WUUX]00\WUVXXXYZ[\YVTUY/331\YZ\]]\\]][ZZZ^379851-VUY/00.-XXLZ./00/.ZWUTRQRUXZYXVVVUQLIGFEFILNMLJIHHGGGJNRTTTX\.\XSMFCDILOQPNLJKLMOQSVWY-.X-,+*TSPMIECCDEFGKOTWXYYVPLLPW.0220.,+++,,VSRRSSQNMOSUWZZWRNLJFCBDFHJOU[..-,WTPKHHLORUXVRP QTY/011/-VSRQPOOPRTVUTRPNLJHGFGJOVZZXXX,5+WVVUVWUQOR,..,RMNR+,---...--,V+,/2332100342.+)***UTV+",.01221//.,,--/1234542/-,,-/0010//. /034310.-,.0322100/012320///.../..--..//.-.../.-,++,--...---,,,+UUTSST,.///.-,++*TRQSTV+,- ,-..//..-./01122210///../02334431//000//011/-,-./010//.../23211000//0122211123454754345567656654567878:;96679::;<=<<;<=?BDEDDCCBBBA@>?@@@BCDDCCCBCCDEFFGGFEDCCDDEFGFEEGIJJJIIHHHGEDEFGHHIJLLLMNONOOQRSTUUUTTUUVUUTUUV TQOLJHFCA><;:876543565322100246797,8%(7ENXe9>BEHKOPPONLIGFGHIJIIIHGHIIJKMOPOMLKJJJIHGFEFGJKKKJHFFEDDCB??>>==>???BDDDCA?>>?AA@?>?@@ACEHHHIJKJIJLOQQONMLJJIGFGIKKHFDCDEFGKQVY\`ba^[YYWURPIRTVXYZXVRNJIIKKIFDB>72001588620-WSUY.//0/-XYZYWUTVXXVTRQOMNRVVTRPORX--.../..[[\\ZL904>ITZZXWWVTSSRQPPOMKKNV`hnsvwxyz|{ywwvqkc[WTQOLHDCB@?>>@CGMTXZZYVPJHGGGHIIIJKMQRQONMKJHGEEEGIMRVXZ]]XRMKJG@:8:9:=BGIHE4CBDHKLLKJIGGFEDFJLJIHFDBAAABDGJKJGDBACDEFHJJIKMNLLMOP;LE?<>BEEDA>@EJOTY]_`_`beghjlmlieaacegghfda`bgkjihgec`_^_bglnljkmomihhkosvwuqoprsuvuvx}}wqlklopqrsrqqu|~{vqkjihihhjprsrrqonopqstuwy{~||~~~~}|~}xneacccehjlnnnorsqpprtvuqo:@FHHIJJGDCBAFKOOMIEDGMNJD|ups|CEEDCBAABEHJJHHGEA|xz?@AAACCyxyyxuof^\^a1/-W,--ZXUQONKGGGIKLLMOQSSRSX.3AT[XURQQRSUX\^\ZZZ[YW\hwxnhecbbcb\SORVVRLIJMLJGEAACGHHIJKLMRVXUSSTUUUVY\_bb_XTTUVX[]]\YWX\ad_VPOPMGCA@ACDB~z|DPZ`a_]^`_[VSTZ_ba^]\YURPPQQOMKIFCBB@<=EOTUXalrrolheca^\[WSPOONNPQONOPOLJJIFEHHHKNNLKLMMORTWXURRRQNKILRTJvhniq?ABA@@AA~~}}|qimxJOT^db^YSIBzpc[[`hmmia[Z]^\ZZ\]bip{EFxhm}EJMOPRWXSKEug]Y_imgb`cn{FHILMHC>z?BB@CHJFBxmbXRPMJGEHO+.,L<-&(/6=?;89=@BA<2QGK,5=BDGIHFGPa894[Y/XE7689:98;<9679637<8/1:ADFILNRUVVUSPLIFE FE?wpjjuAIQRJ}qzDEEEDydUQUV8XYZ[\\XTOLJLRZ^^]]dp|GG|tpnmjfcbbb_]\[ZXVUVVVTTTUUWY[]_^]\VNFEJQUUQLHHJKIGECBCDEGHILMNOOMKHFFILLKJHIJJIGFFGJNPPPNKIJLMNNLJLS]dh45689:::989;>BDDDEGHIIIGC<6fde345666544332egi579;==<:644\5678899:;;;::99:<>@A@><;:9:;<>???>>=:6335543320_144458;AEC>8448:964333469=@A@?>>??><;:::98765654gfff3455567899754678:;;::9877754fec`_add`\\_bc`]ZZZYZ^el897ib]ZZZ[\\^,---.,*)*b/,-020..,*('')+,,*)))***)(('&&&((('&'(*,--../10.../00///24663-**)(&%#"! "#$%&'&%%&()(&%$$%&),-,*(('&%$$##$$#$%&%$$%%%$$%&''&$#"#"#$$$%%$%%%$$$%&(('''('&%'&&&%%&'('()*+++*)('%# !   "$%$#"#$%'('-&%#  ""! !""!!  !#$#"  !!!  !"#$%&'('%$#" +!! !"#%&()( '%#""#"!  !   !!!""##$ ##"""##$$#$$#"!  "#$& '(*,.//131.,./02442/-+*)*-0/.---./.,**+,-0123332220-++*)('()+++,-./0001 2310//$$$#$&)*)'&'())'%$%&$$""$%%$#$$%%$###$%&'()(&%%%&&&%&&&%%&'()))*+,,*(&%&'(*,)%!!#$%'((&%&))(&$$##"""#%())($#%'((''')*-.*('&(**'&'('P())(&&(+***++***)('&&(%$&&&''&%%$$$&())'&&'&$"  "#"! $!$''&&(**(%"!$%&%#"!!"#$$%&&'V%$#"  "$&'(((%" "&$#""##"! !#$$&'&#"!  #&)'%"  "$&&&%#"#%'%$#$%&%%##"! !$')('&'%$"!"" "##! ! +  ! ! !! .  !!!""!!!"#$%%$$%&&'&&&'&'''&%#! !%*0 "#%'('&&$"! !"!!!"""#%&&%$##""#"!  ! !"###" !""!  !!!"$%&&&%&'(()+,,+)('&&%##$%&&$"!  !"$&),./120.,++*(&'()+@*(&$"!"##" " !""!  !$ !"#"#&%#""! %.48<>??><;973.($! q"##"! !"$#  #%''&&%$###"#&'&&$#!  """#$&'%%%#  $'),/0100245567876433567;54359;:88764322247:;;:;;:99:;:8668:=??><;<>@AA@@BDEB>;989<<=<86778:;;:98a54"$#$%%$#""DCBA!#'))'$!!#()'#A=967=!###""!!!#%''%%%#!=:; !!!""?::;;;95/*'''! ? (.-+)(()))+-.-,,-.,+.6AIIB;64212331+'),,*&$%''&%$"!#%&n(+./,**+,+++,.011/,)*+,-.///-++.130*&&('$"! !##"A=="*15420012/,+-1564210-*(&'(('&%$#!!!#*--/38;;853100/.-,)()++*3(&$$$"!"##%('&&'(()+,..,***)'%$&*,%7/#!#'+-,+)('%%'*++**))(''))+-03684.*&7;#&')+/1-(&%'**)))(&$"#%%%'+-*&#! #(+($"#$$$%(-/+%! "#!206!"!! ! ??@??BA936@BDDB?>>@BA??ADFEDCCBBBCCDEEFEDDCCCDDCBAAACFGHHIKLMMLKIHGFFGGIJKLLMMNOQSTTTUUTSRRSSSQQRSSRSUVVUUTTUVXYXWUTSRRRQRRQPPQOKEA>>>?@?>=<92Q?4/.7Md:=?AEIKLKJJIGDAABDEGIJKKLMLKKKLKJHGGHJJIIJHECEIKKJIEB@@BCDDCA@ACEEDCBBDEDCFLPPMKKMOOONOQROLKJIHHJJJLNPMHF2EDCDFGFFGGHJLOU[afgea[WSQOOOPQSTUVY[]ZUQQQNIEDD@:654335553210/.YWWWXUPNNQUWWWZ/1210/..ZXUSOPV,---WTTX[.\ZYZ]``[WXYXVTOJHLQRNLNRVVSPOPSWZ^acdfimqvz|{zzwpeXMFCCFJLNQSUXZ\^/.WUTSOKKNRUUSQ=OLIEDC?:99888:>CINQTTSOIECDEGIIGFEEC@><>BGJKKLKIGDCEHIJKKKJHGEDCCCDDC@<:<;9;>BEHJJIHHGGIMPRRQPQUY[]_adeb[TMIGHKNQTWZ\]_dhjkkmpspjfcaabccba`_^[Z[_cddba`acfjnonlihhilprqokijmquvtqppqrsrpnnopnk4hggeehmrv{}|{z||{xutyxvy|wux|zvsstwz{zzzwttw{~~}|{J|{{|~|wsolihfa_chmrtsplklos:;;=ADFJPSPJFDCBADGKMORUUUSPNKGtmiktAFH6IKNSWXTOKHGFDCDILLKIHHHEyrnkieca``0/-XVUSOKHFDDGJKIIJLMPSW/0\1>HKLLMPV\_^\YTQRUWWX[bnwwmc^]\\[ZWQMNSVTOLLMMKKHCxqt|CHNRQKEEHLNONMLNQUX\`deaXPNPSTVZ\XROQUY[XUX`jl_NEB>trw?BELV`hmh`][YzUSSYagki_XVURNKKOQQNJFB}xy?CHNV[]_elnjecb_\Z[]]YSNLLMOQQOPQRPNMMLKJIGDDGKPSROQWZXTPNLLMNQRPNMLF=tAGEDJOPPSWWTRQPPMKJIIJMPSRSRMHHJKNT^hh_VQI?xAIPTUSNNV\XSTPJKSYVQMKIIJKMPRPLJHGFIPVTMKMQOIBBLWVMFDDFHHD{sv}ADHKLIFCBA@xswFKPSSRRSUVPBnpGFxd]bkokhfaWMGHTeljjnsx|yma_jyFHLRVXVTQOKE|qi^[\]cov{}~~{DGFC?<7\NGWo@EIIFCwhdktunbZUPQZ0.QF7(CL4?;.HG_DIHD?;:?JVcpupgfjnnifpIOTQGxjaZUTUX[_aa^ZUPNMNPSUW[\[Z]huyuttrokhhknoomkg`ZY\`a\VQQSUX[[XQWWWVWY\^^[WTQSW[\ZVRQPPRRQNLJHFDCCDEGHHIKLNOPQQPONNLJIILNPOMKKKLLMNNLHEIUd6766679:4;<<;867:>BEFECA?<964346776654443eef469<@BA><:8666899:9889<>?>><;:878:=?@C?=;97679::5_YY[[^158<>>;853468853224679<=<978:<=<;::9987543334566554=5677643224579::9:;;<==;975fb_addb^[Z[]_bcb`_\ZYY]ciljd_\[[[YZ***++-///.-,+*)*+,+*)*/.+('()*)('&&''(E)**++,,-/01220//..30..-+)('&$$$%%&&'''%$$$%'(((&#""#%')*)(''&%$##"##$$#""#$$$#"! ""##"!!"#$$% $#""!"#$&''()())('&%%&'((('%%%&&%$ "!!!#%(*++*) +('&&'()((()9'%$&)+*)'%$$"   !! !$%%#""! #&&&%#""! !"""  #%&'&%$#! !"""!  !! !"$&&%#""#%&%$"! - !""#$$$%'*+,+*()++)%#(06888940..//00/-+*7)'%%')))('()**+-..-+**+,-...-./134/../000 !  !!"$%$$$#$%%"!"$ #"###"""#$%%##')*)((()**))(L'.-...-+*)))()+-.,)&$#$$%%%&')*)'&%$"! !%*'$ #')'%#$&'()(%!!%)).'%%&),*&%'*++('''($  #''%<&'()*+,*'%&'''$"!"""!! !!  "%&&&''&%#!"$&%$#"""#$%$"! !$&&&(($!!#&  "$$#"#"""#$##""! "&()('&$$$%&&&$ "&'&$#$&'% +&%$###"!  !#%'''&%%%& &#!%'$"""##   "!""!"""!  !  !!!"$%%$$%&%%$$%%%###$%& ''()))'&&%6$$#"""## !&2 "#$###"! !"$$$% $$$#""!!"#" "$##"! !!! !!!"#%%%$#""##"!Y#'**'%%'))()*,,+)(('''(('()*'$""!!!""!  !##$$$%&'(+/36752.+('&&'')**)*+-.,)&&'$!}$#"""!! !#"!   "$#"#$%%#!"##" !"  #(,/13457:<>??=:961*" "#$!  !"!H !"#%&%$""$%&''(('%$#""!! 3 #&''&$%'*+,,.01/+%! !#%'(*-./1479987:<;96444554?321003576543458:<<;:97679<=<:7568;>@?=<<=?@@??>>=:8788657;?ACDCBA@?>ABBCDA?@A?<;<>@BCCDDB@ACFHIHFEFEDDEEFEEFGGFGFFEFEDB@><;9742369;;:865457 !#(+)&#""!!"$&'(*+,+*)('%A95338 #%%&&%%%&(*,-+(.&%$#"!"%''&%%$$"?9532/,)'%$ $"$$%%'*.00.,)'(*+++.4=DC;3/./...,(&'*-+'%%'((('$?:84.-/04;@BCDFJLGA>?"$#!' )8!$''$"C<304::4,&" ) !!#%&$"$'(''*1772,()!"#$#! '0795//245328EMK&+/-&<3/,***,.021/-+(''')+,-00/-/5>EHE?=>>=;988:<<:87641/0231/,&,-.0220//00112331.-,-/110-+*)*+,+*)('%#%&&%%&'( '&&%#""#$%$#"#$$$#  '.- 0001(%&&''*/-,-./-,+***+-..-,+*((),/10-+)***))ހ€ʀׁ€ƁӁ ؀1ńQ¿ýل ɄȀʄ5Ŀ*􁈋)cI!3I½߅ހſ¾*ƼĽ􁇎񑟢¾ƾ񀈐Ƚú냈ꁌ۷ꎡȻǾɽĹ»[ \\\^`aaabeggg4!3efeca^\^cg577754feefh569:8ia^`256%5gda_[WWYZ[YWVTRRSUVY\\]]]_ac234677752J111355565hfggc]YVVUVWYYXWWWXWUTUTTSSTWYYXXWWY[\\ZWTQONOOPOMLLMNOOONMMMNOONLJMMOQSTUVWWUTSUWXYYXWWY[[ZZ[]]]^__^]\[YWUSQPPQQQRTVWXYXXWWWUSQPONNMLLORUWUSRQONORSTTVZ]][ZYYXTRPPQRQPOOPPNMNMOQQOMLLMLIFDDCBCDEFFGGIJJHFFFGHHIJJLMNNNOPONKHEEFGILKLMKHGFFEDDCDDDEEFGGFEDDEGGHHIJMPSRRPNLJKMOQQPNMKKJJKMQSRPONLLKJIIKMOQTW[^_\WTUX[[YXXWWZ]^\B[ZZ\]^_`__^\[[\[XURQQPOPQSTUUVWY\`fkkhda_]^beghhgeba`be468::97433454455432X344434567789;;987532246776556752//01234454420.-YXUSRONNMJHIKLLKKLOQRQONMNONKJJLMNKGDEJMNOPQRTVZ\^]\&]//1344433420//.YXWVW/34420^00_]]/1221010/\XWX/YYXUPNNNJGFGIMRX.0/ZRLJLPSUVUSRRSUY\^__///_/00/.ZX-...-.[[[]0220ZXY[]013332/[YXXZ..ZWW-/0011100110.XVTSSTUUWY[\\[ZYXVVVUUSPKGFGHIJJKKLLLKJKMPTVWVTQPPPOMKHFEGILOQQNLKKLMOQTUUUTS0U-/0-USQOLKJGCABBCFHKMOPSXXTQRUY/11.+SOLLNRTTSTTUFVVUTUTQMKKKLNOOPSVXXTOOQV/231.TMGEHNRTUTTUY[ZWVV,020-W+--[XVUUUSQPNNLJIUJMQUVVTPKHHJNSWYYWURRRPMKJJMW021/-,,,-..-,+TRRUXXTOOT-.../13673-((-254443/,,./12332221245421/...///0110.-..,++-//.../024320.-../000.-,+++,-.././//.-,**)S*SRR**+,,+ +*T*+,,--,,-, --,*UUTSSTUUTSTV,-,++,,,++,,--./0/.++,-./0110/.-...0121/.03556767?631/.,WUTU,.1211346764440,T,022112310//011000//01110/..//,++-./01012123468::;:::987678765469;<<===<:Q;=?ADGIHEB@@BDDEEDBA@@@AABCCEFGECBBBCCDCB@@@ACEHIJJKLLKKIFCBEJMMLKIHIKMNMMLNOPPQRS +RRRSTUVWXXWVUTTSSSTTSQPNLHEDCCCDC=_A>R5;<=AFJLJHGGGFEEEGIKMNONMLJIFDEGHHHJJHGFFEDBAABB@??ACD5FGHHHIJLMLKJHGIIILPSSSPLHGHHJLORRNIFD@>>??ADGHFDDHNQQONNMMKIIHHGGHJLPSX\]^_^]ZVQOOOQSTVXXWURQSVVNDBBA?=<963235542/--./0\WUWYYY[[YUQPTYYWTSUWXYYZ.-WUWY[\.]YUROMKHC@CINQSUUVWXYWUSQKDBHHQVWWWXXY]`beiossrsuvvvuph]RJFGIKNRX]^[YXXWTQONNPNIEHNQOLIHHHIIGA;9=BCA@?>r=;:9889:;=>@BDEEDCA@>=;99=AFIIGECAABDFFFEEEDDDEGHHGGGFDB?>?A@?BHMQUUTSRSTUXZ\\[ZZXSNLLMORVYZYXX[^`aa``_^\]_cglookhg>feeddcca_]\\_dghgfefgihdbbfhjloqssqnmotxxvspljiiihjmnnpqrsttqnmnqtx~~}yvvwwxvtuy}~~}{xurqqtwyyyxvuuuwxxvux||zzxvwwy}AAABDFHHFDCA@@AACHKMNQTSOKIHIJLORTUTSSRPLGB~vnmu>BEILLLKJKMPQ.RRPOMLKKIGGIKLKIIJMNNKE>rnprpkc\\_0.YUROMKKJLMNMMMMLLMNNOQRRQPLEH]?IMOSWY[ZWUSRTWZZXUSV_jnid`YQORSSRPNQUUSQQPLIIHEBBDFJPUYZVOJIIJMQX^bfih^OEFMUZ^a_ZVUVX\`^ZY\adaYRLE>svBHLQZdlmiedb`_bghc_\XRQSURNKLNPQMIECBBBEKRZ]ZUUYaffc`_^\[\]ZVQLIGHLLIJPSROLJKLLJHGJMOPPRTX[^[VQOPQQRTVVTQLIFDDHKMORVZ[[ZXUSRQOMKIHFGKPQPQUZ]YPKIKMMLMQUWWUOHFKQWZXSRYbb]YUQOORVZYSMIJNPOMNPPMIGILMNNONLLMLIGJONE?BHKJHFFEEEGGFGIJJID?zxxzGNPNKIGEDEFD}w{AFMOGxnqsttrld]XTTW\][Z\`dhmlaVU_jsEILMKIJMRTNHFHGwhagquvxz||wqszBHIDtg]TMLZrCGFEGGErltAFGyFE@9h341VJ=/PF>M7ELQSNGEFFGJPTRSY__[ZZ^eovtnhda`dgd[RKD?@BBCEGE@9/RU3@Tac^XRNLNRUUTROJHFDB@>=>>=ARhvxuof\VRT^ltwzC}oc\XWWXYWSLEFPZ^[WYahjhhlrutojgfffc``abcca]]_`[UUZcknkfdba`aa^[XWXXXY[\\ZUOJIMRTQMJIJJKMNMJGF]GIKKMOQSSSRSSTUTRONNPQNHEFHIIJLLKIKR]gjigeg579:;;<=<<<=>?>>>@DHJLLKJGC=85457899887543gf33468:<;;;<<;:99:;=>=;:::;;;::9888:=@@A@@><;<=>@@><:850Z\2577654333469:853235568997679:::999877766543334543322234 +21123468876)8:;<<:75feedbaa_\XXZ]^acddc`_acefffeedc`^*)*+-. ---+)('),/+.../01-*+0.-,)'&()))(('&&&''()*$++22331-*(''&'(%''('&&&'''((*++*)))*++*)(&$$#$$$#"!!"#"##"!! !"##$% +$$$%&&&%$$%$% &'((())('&''()*+*)(('&&&%$$&(*)(''(&%&() *+**((('%$#"! !"#$%$#! !"##"! + ! !"##"!"#"##$#"  ""#$$" $ !!!"$%$##"! !#%&%$$#"! !"#$#"$! !#%&'),..,*((*,,,+*)*+-.-,++,-./0 /...-,)'&%*'())**+,.15875320/0367887531002.##"!!!  """!"#%&$#!!"##!!"#$#"!#$%$$%%')+**)(())&&&%&--,+)'&,''(('$###" "%))$! "%(*++)(()*+,---+('((()*))+,('&&''%$&%$$%%&&'(*+*))(' &$! ! + !"$&()(%#" !  "$%&%$"4#%&''&%$%$#"! !"##%((%#$%(#"!!"$$#$%$"  !##"#%'('$""#&$ !#$&)*)(&&%'&%$#"!! & "$&''&# !$'(('%$$#" $#!!#%&#!!% !! "!"###""##$$##! + +%  !"!!  !""!!"###$$%&%%&&''()(''&&%&&'&&%$#! *& "##"! !""!"#%&&'& %$#""###! !"#$#"!  "q#%&''&''(('&%$$%%%')+,+)&$#$%&(*--*&#"  "$#"!!#&(('&'(''(('&%$$$###$&),/233321/+('''(()*++*(&&(*)#V%"!!"! "#" ##"!!!"#""#! !!!! !"""##$" !!!"#%'+.0148;<;1:984/'!"$$"!!"! " ;"$%$"! !#$%$$##"! !!! !#$#$%')*+**)(%#""#$&(*+*)*+-/0/0146:<<965566776665%4322369:9766899645689:;<==;::??@?=;:%;;=?BDDEEDCDEEDB@>==>@?>?BEFFEDCCA?>?A@???@@@?>@BDEECA@BD"j#$%%$"!  !"$&'')++)&%%%&&()++*)))(&#!>8326"$&&&%$$&'())('&%$$###$&'(&%&'((&#634540+&%& &"$&')*+*)(()*-//-+)+18:742.)()**)'')+,+***(&&&%##$&'),./,(%%&''&%%&*.256870& !&+.021-+*+-/10..0585.)%!68 $&).59953220/2686M320,+,-*'%%&((&$!  "&+030,,.36520/.,,-..,)'%$%()&&*,,*(&'(('$#%''())+-032/+*!+,,,)&$" !$&&'),...-+)'&''&$$#""%(Q*.1.)%$%''&&),-,+(##&,020,+0662.+(&'),..)$!"$&&%%'(&#"#%&&&''&'(&$#%)'!#&%$#"""#$%&%"<@$(*(&%$##$%#>9=!%*+%<7:==<:62/,**,..-,-.--,*%"&19=A"%''&%$&)*'##$$D<3/4:<=>@AA=9:?#&&!5-'# )8#%$$$%$B:5:!%$" )!#H&'%"!"""#%&$#'+-+**,07<;853/,.0-(# "&(//,($!  =%3:;950+'&(/9?@@BE#D@82.++,,-./.+(#$*130,-177546;>>:8656642121/.020,+.5;=;75420...0012331/+'%'+-+(%$%&'())'%$1%&'&'()**)(()))('%##$%$! !!"!!""! !%+01/,*+"$%%%$" 00-'(7..--,,,-+)()*+,.00.-,,-..-+ʁ€΀򁄀耫聂恅Ձ XфҀ¾ĿW؀¿܀J5Kׄk¾OZºʻQ΄̀ +Ā»ü/􄌑9¿܀񃐗좳񁌓آܲߜŭʽ"âȽƾѶûþ,f + 3^edddedbaadeefg56654554ecdecaafk79998765ji6886gcccdefffggedb_\ZZ[[YVUTSRTUWZ\^^\\]`c22233320_/0124564545664b\XVVVWVTQPOOPRSUWZ]]]^`ba^[YZ\_``_\XTRPONLJJIJ!KMORSRPNMLLLMNMKIIHHGFGHJIHHHIJKMPQQRTVTSTUVVVWYZZYWVUUUSQPQRSUVVUTSRQPPPSTSSTTSQNNNOOONNORTUTSRRQONMKGIHIIJJKMNNOONMNMKJJKKKJJLMMKJHGFFHKLKHEDCBAABDEEFGGHHIIJKLMLKIGEEFFFEDDEDDDFGHHFGGGFEDBCDCCCEGHHHGHKNPQRRPONNNMMNOOMKJJIIIJ,KMOPQQPOOOQTXWSPPSVTQNMPTY_abdec_\Z[]_^ZXY[]^4\ZXWUSSSUUUWXZZXVVWZ\^aflpr::rpq:::qmhedcccbce4555443223332221100122234567886432323h234564211221110.--02211/WQOPQRQPNMLKKKLMNOONNMMMLIGIKMMKHGGHHIFBCINPRSRQPNMMNOQSVY[]_`00/][YXWVVUUTQONPSVWX[010/.././0232210.ZXX[/0/[XUROMMOQQNIGKT]11/--YYUOMVfof]XWXZ^a232100///131[WX.0/../00123310///.ZYY[[ZZ\..ZUQSWXW,-.../01210/...-XUSRRSSSTWXXYZZ[ZYXVVUSRRQPMKJHGHIKNPOLKLNQUWWTPOPQSVVRNKJJKMPRRQNMMOPQSUTSRPLJLSYXUQPPQRRMHDCBABDGHJNTXVQNPUX-/0/.,TQPSVWUSTVWWUTUWXWURMKKKIIJNQSUWYXUTUWX.01.T#NJGCEJPTWXWUVWVUVW,03321//.--YWUSQNK%JIIIJLPTXXTNJHHIJLNPRSTUWZ.\XUU,/00/-,7WUSRQRSSRTWXVQNNRW.024689730/../122321025642001356643332100232/+*+-.-,+,---.//-VUTTV-/0/.-,,++***+++,,-.!--+*RPQ)*+,,*RPPQ**++*SQRTSRQR*,,-./.-,,+,,,+VUW-/0/.--,+,,,++,-,,X++-/0/.---./01522210//00..//0//.//12332101122210..///0232135665433321\2345455310//00013774100//011///00331.--/012220/./011/--./133323468:;;:879:;<;;:8765544458;<<;::9:;;;<=?ACDBABDB@@@ACCBABCDEFEF EDA><BHORMC:67::8520//02331/.,*W/110.WTWWPD;>HPSRPPPQQSU[TSSUV-121/YRLIHE@>ABBCFKORTUWZ[XTNJJNQTWZ^aabdgkowxnjhhgeb`^WMFA>?ENRQNOPRSTSRQNIB=<@DEFG IIGC<7579:;<=>%ACEDCCCEEEDDCBBCCB@@AAA@ACEGIJLLLKKIHGBIIJJJIHHHIJIHHHILR[dhd]XWWX]dhhfeca_]YXXYYXWXY\`bdfghgeba_^_acfghhf +ggijihijiih@fc_]^dlnmihhhihghjmoqtvvuutrqpomlkjgedeghlqvy|}|yuqqtwxy}ADE>zywwvwxyxwx{|zwsqqpmihjmprttsrrssuvxz|zzBBCEGHJKKIGFGHIHEBACFHJKLKIGFHKNPRUY^`]WPKE?usxAGKNOOQSTTRQPONMIB@CKQRONNMJFB~upou{~{xx{~~ysmg_XXZYVTTTSPNORRQOMMMPQQPPQRSRPMLLNQRTa>LU]b_XWY4YTOMPXafcZRQW]^^][[_hi`XXXTPOOLKJJHGGIHDBDGMT]ehcZRONrPRTX^abcaYPIHLU\^][ZXUUX[\XQKKNRUWVROLLLKKMT^glnmie`][[[WPICCHRZ]\YVQLKNQSQLGCCEILJFDDDFOY]]ZXX[_b^XRMF}svBGJOUVSPNMLLMOONPRU[_]VNHFKX`[SSX]]VKD@?>?CINRX`db\VQOOQPMHEEFIOSSSRQRTURMIGGHKNPPQU[^[WRIDHORPKGHLOSUUSSTUVXYXTRRTSQPPONJFEKPPRUURQRQOPVWLJSRMIGEFILJGEEEFGFDBAEMNHCBAysrsvKVZSIytssqj_VSW[YTNNQU/6:8\@G&.,Jbjlljik8>DHLW`_SG}vwyxvvurlikpu~FLG{iaclsttx|}~}zzyy~DHJHFGGC=5_[]Q6>3VG\ZQSbok[NMPQQRRV_efddfimookc[]lwpc^[WVWXTNKMV_^Q>.Ub9AO\\VW[^[SPTWWUSNGDDGIJIHFBAFP\iqof]VSQNKLUiz{gWRV^`[VOIEB>=DOV\aejqtromlkkkjf`[Z\\[Z[]___]XTTTRRV\__^\[ZZ\`fjjgd`[YZ^``_^XPKJJKIECCDDDCDFIJIIJKLLLJJMPTXXTQOOOPRSQOMLHEDDEFJORT6W\adedbab47::999:;=>?@@ABBBCEHJKKKJHEA>;8644569::976543 458<@AAA@?=<;<=<: 987677789;=>=<<=?@?<9888765568874212455433567765567898889987677654333ghhh43ede34443(23355432235678:;<<;9865gdba`_^]\YX[aefffghijjkkjh...///.---.../ +-+,--,,/2 220.--.-#,*))**)(''&%&&'()**)())*(/+('%&%$#"##%'(*,-../010.+))*,--,+(&$###"!  "#%%%$#""!"###"  !!  !"!!"#$%&%%&&''(*+*++,--,++**)'&'(((''&''&&&'((()))'&%%&&%$%$#""###"!  !!!""!"!! !"""! !""!  """  !!!"""##$%$#!  +   !!! !#$%%%$##"!!!"#$#"!"!2"#$%$$$%'))'&%&'&$""$'*./0121/.--./.-,,-..///.--,*))+--,++,./147;=>><= =:6432110/0   "#""!"#"! !""! 0!! #$%%$$###"###%&(()**)('&%%%$$$#"!"#$$%%' &(F'''(('%$#""#$%$  %*((&##)4940-,+-/0)&' ('()'$""$%%&%$%%'((())*)(''&&%$#"!  !#$#! "$&((&#""#%'(%#"!!"$%&&%#$$$%%%$#  %(&#!!!"$$" !#')(#!"$&" #%%#"#%&&%$%&''%#!  !#$%'''%$%&&$"  #&(('&&'&%%%&%$#"   "$&()&"  "#$%%%&()&$$%$""!"#%'&#!"$' + $###% ! !"#"# +#- !  !!  !"##$%&'(';(())((''&$$$%&%$##"! )"%*. $%#  !"#$$$##$%&&&'()'&%%%$##$%&%$"C#""!!!"#$$$%'))'%#! "%()))('&%%%&(+/11/+($#$%$$#"! "(+,.0/.,+)('J&%%%&'()+,-./111/.-+(&&&%!!%&"" "" M "  !""  #&(),.137>CEB;521110/-+&! !#$%%&%#"! ="',.+'$$$%(-00/.-,+*(&'(())*+-./013543210/0246788755566778889e:963126;=;989998889:<>ABA@?>=<:999:987779;=?BEFFGIJHFDB?<;<==>@!#$$$%JKJFCBA@??ABCBCEFFEBA@?<988:=>@?>??@A@==AE#EDD"#$%%%&'&%%%&"%$"#$%&&&%$""#&(**+.010,(%"537#&(?)**)(('&%#"&(('''%# =9547;==:779<<:73.)$##! '"',.,(')*(&%'-463-((,00/-,,/450,+,*((('&%%$$%'&%$$%(+0463.)('()))*+,/24442-'##%+1220.-++-00-($%'(+-,*'&%&%$%)05776530/.<01/*%!!%-3531.*&&(**)&#! #&)(%###$)/10-+*,032.+($?9:!#%(,,+)(k'&&&('''(+/22.($#&/40*)+/0,&!!$&)-132.)&%&((&#! !#'**)))+--+(&%%%&()(().0/.+&"%*,+'%%')+-,*)**+,-+('())( +'%##&))*-,*)*./'>=&,,(%#""%&%#!!"#$#""!CBA$)*&"!BAA!@;879:?'02-&B;99873.)%$$#  !".10/,++!#*23-%?:;==<>>;7458:>#'#:/+-3889??>@"$$"! $"$&"/.'(2;7,$%&''&').220/0147861--6<7/-,+*,,*&$%)-,%#+%-,((*+)%"""!  &-5:83-)'&$##)5@GJH/@3*(,131-)&$" #*/2357:;:987778862../0.-./000.+)<(*.221110/037::9741/024432.)&$%&&$"!"""!"$&'&&&'(('&%&(*,+(%$%%$"!!!$&(+.00/-,, !"#"     0112/../-,,---,+)(*.00/0010//000110/ā񀆁ā ƹ¿= +$τ-҄ЀtB¾󽣹功̹Ǵÿ¾!ýþ߀Ĵúɾ¸¾񋒏췅ʷٍõľ»ɿ¼ʻ·ȵľ»üü_67776jfddefghj6 5hfddfhj6678$77887mifffedcbbcddbaa``__^]\]^][XWWXY Z[[\_d4454<321aab12223455544455433b^[ZZYXVVUVWZ\^`acdeeeghd_][YXXWTQNLKJwIIJLORSTSRSTTSQOLKJIHHHGGHIIHHGGGFEDDEGIKNNNOONMLKJJKKLORSTUVXYZYWVUUUVVTPNNPRTWZ]][YXXWXXXYYZZYXXXZ\\[XTMEBAABDDCDFIJKJKKLM=LMLKJJKKLLMMLJIHIIIHFEFGHHGGFFGGGHJJIHIIIJKLLKIIHHGHHGFDBBCCDC DDDEEDEEBABCDEFFGHJLPSSQPPQQQPNMMMLKIGGFFGHIJJKLKKKNPR:PNNORTVWXYYYZ[[[ZYVTSSTUVWWWUTTVXZ\_bddcb_\[Z[\^_acefin9<=>??=:98765310001baacdefee2356665544434321000/00///00124578741/[XVTSQONNML MNOOPPPONNNM+NPQPONOPSVXXWWVTRRRQQQRSTVY[\]\...///./12334{21/,WVVW[02211001/[WUVXY-.158730]\ZWSPRUXXWSPNKIILPSTTTX[./.YVTW.2323=<<:7432/+*-25643467531/.0245310012454235541/4.---,VSQONPU-01/WSQPPQS+-./000/.-,++**SRS*+,-/000/.-,*))*++**PNNQTTSSRPNLLNPRT+,-,,,-.---,,,+UUV,--./00/-,++,--,WUUV,-.//.,,,-.---./0124542101 0.+*+-./1321/-/11123332455310.-,-/01112245532210.,+*,/0001210///04762.+SU,.02357899:::;;;:9779;;:75434678889;>?>===?@@ABCB@@BCCCBDEEEDC9DEFHHGEEFFECBA@@BCCDEFFFHJKJJKKLNRTTSQQQRSSRPNNPRSTUUTTTUVWWVVVWXWUSRRQONLKJIIGC=99;<<==<<=ADC<_C6C\z{??=vroqyBGKNPPMJGGKNPRUWVRKC>===<>DLQSSUXZ[ZXUPKIKPOBcfCSYVQMIDwrmhdfmplilv@Byqjfedb_\YWUSTUTRRSTQONPPNMMNPQOMLLNQRQMIK^CYff^TPSWWTPNPV]bb]X\gqvwtnf_[XUVYYTKFFGILNMKKJGCCGLOT_hh_VPNNORUUTSRTX_holdZPJMZhqrndXQQTXYVQMLOQTVWWVWXYWSPRVZ^^ZTNGAzzBIPVWUTV[aehf_XW[cgc[TMFA}CHORQONOT[^]\]_bc_WNCtqANVXXWVVXYZ[ZZZXUROORZbc^WQLIIMTTNIJNPNKIGC?=AFLQV[]\YTNIFEGIJJJIGHJMNMNQW[_^VMHHKMPQRTY]]ZUNHBBEHIGEEFFHNRSRONQW]bb_[WRPPPNLJKMRURPSY_`YPKKNOIDDINOpNJHECCEHIHGGGFEDCFKOLHGFEEFFDkX\wHMJFEEE}unid]^e41ZROPONR-.Q9%4-<.=DFFGJLMNPTX[alvzpfbfkquyD{sqty}ype_fsHGB>9gac588olg_VRV`hifcdgjjhc_[WX\^YX_jpsutme_]]^agkkhe`XRQSVXURU[]XMDBDKPRQK@77COTVYZ\^^ZRKEGMOIBEPYWQPYbaYSUTPLNPVbmu[{{uj_YXVSRQMIHIJLNNPSX[]`dhigec`]ZY[ZVUY[ZYYZZ[\\XUVWZ_bb^WSRUVTSUVVVWUQORY`cfijga\XVVVTPMKJHF4GIKOV[\ZWSPMLPVZZWTSQLGDFLT\`aabccf56776665568;=>>?@A@BDFGGD@:5d]Z[]_acf455543334ffg57;>ABA?>=<;;:99:;<<; 9767789977789973123332469;:8410124567655567876678876678887765677654hgg566544gecbcdffe234554445%689::9875gc_]]_acb^[\^`aadhjjjigfghjk20.0 /.-./13520/0/-,++,-,+) ('''(('()+ ***'.+)(('&%%%&(*,-./00112341-,*)(('&$"! !"$ %&&&%$"""!  "#$$$%%$#$%'))**+,,-,,+*)'$##$&()+,,+*)))*++,---,-..-+(" !!!"!"!! !!"##"  !  !! !!"###"!"#$$#"!   + "$%$$##$$#"! !""##" !!!"#%&%%&^%$#"#%')***++,---,+*((()*+,,,*)*+-.02343210.../01235679<!"!!""!""! .../00111 ###$$#""!"""##$%$#($%%%$#$%')*))('&%$$$##$$%'()**)]%%%&(%#"#%&+**'%#$&(('%#""!!"$&&%%&(&%$& -1'7-+*+-(''&())('&'(()**)('%##%'%%&&''&&'()))'&$$#"!!!"##"! !#!! "#$%#""#%''%# !"$$$#! !""#$%$"!"%'&$"  "$&%%%$A##%'(*'#  #&((''(('&'''(%#!!"&))&$$%&''&%$$###"!"!  "$&'&#"!!! !!"#$&()))('&&& %$#!!""#:"!!"%* %#! #%#"!!"####  !"""!!  !""$## +$##$ !"   !  !"%&&%###$%&%$##%&'''&'())*)''&%$# !!- -$$"! !"#$%%%$#"-! !!"#%&''()*)('&')*))(''&%%%&&%%$$$%&%#""#$%$ +###$$$%&''&3'()*+,.00.,*+++)(()($!!%*-.-,+*)('&%&&&'('&'((''(+,-+,,-.,*'"!"!!!"!  \!"##! !'-1566655431//010/0220*!"&&"!#%#"!! !!! "$%&&&$$$%&&&''(*,./0/../012443223455654456789:9765556789987765310/15899:<>?>==>@ACDDDB>965568;=><;<>?ABBDGIJKKKJGDBACEDB@@AC&CDCCDEGFDCCBBA@@BBBAA@@?>;987779=BCCBA@6AAA?<=A#%%$"!AA@???@ ! >= <978;!$&'(('%##%(*+,-,*%  &)***+-..,*'%#%)( ,-!+/-*'$">9530./253138 @<720.-*'$!&,44.'#%)*)'')-143.+-4;=<:731/,++-.+%""#$'('&&&$""%')+1772,)((),./.-++-17;94.(%'.7=><6.)(*,,*'$$%'()*++,./.+()+-//,)%!78%*./.-0379:83/-/4860+'# >@"&+--*)),020//1454/H)#:8!).//.,,,-..--.-+)'')/452-*'%&)..'##&('%$# #&(+...,)%"!!"$$%$$##%&W(,033-'$#$&'((),010-)$ #&&$""##$'**)'&'+021/-+('(('&%&(,.,)+/33.)&')*&!!%)*)'%#!!"#$#"#""$(*(%$$#B@C#$$#A4'):%(&#""!@<852.)&'  !$*4<@EJHDB?:5358;<=?A!@;768;>@@???>93/3;BI%$ )%'110,(&)@18853358973/,**-.+*.4689950-,,-/378530,)(*,,)()./,% #%&%"$%t&'&#"%" &+*&%+22-)))&%&'+2:?BB>71./.-,+(%$%&())*+./013564331/..0/,,./.-...///-++,.1442.+*,-+**++,..,*+.2579:740.,*'&;''&%$$##$%'+-.-+(%""#&('%$$#! $(***++,.(%%&')+,/0..1010.,+,,,-,1/-,,-/0/-+*++,-/232100//011؀ʁ󀆁聃 1¿Ҁ¿* F>ۄ݀Ѐÿµ݁b-[M½ݟ䃒i݀ͼ˫Źþ»\Ϲ¸ǽϾóÿӿքֿѮ݃򀈏ļµ̼򋞮ͿƿýĿ.ƽ0-d7V654gecbch7999876655667789:::<=<;:9:9njgfeedefd`]]^__`cdcbace3fedbabd23566554433223443343222334456764332a_^^_/`beg5665h444d^\[WSQQQPOLJGGGHIJLLMOPPONNOPQRPNML0KKJJKKJIHIIHHHIIIHIJLNPQPNNOPQQRSTUUUTSSTVVUTTSQNMLjMPSWZZYYYZ\]^_``_]\\]^__\YWWXVTROLKKKMOPPOOOPQQPNLKKLKKJIGFFGHHHGECBBDEFGIKMLJIHHHIIIJIGEDEGHHECBBDFEDCCB@?>?ADFGGGFGDCCDEHJJIHGFDDEGIKL KJJIJJKLLMLKIJKKMNOPQQRESSSRRTVVROMKLPTY^bdeddefeb_]\[[YWUVZ]`cdca`cgjlnonkhhikjjijlnq:<=>?@@ABCCCB@?>=;7ga][[]bh79;<;;;<==<;:975332100/0///11235554'3320.ZXWUSQPOOOPQQQRRQPONMMLKKMOSUWY[\[YZ[\^_```^[YYZ[\\]^_00/../123478755421120.-/11035530//.[YXYYY,.024651YQLJKKJJJKMQTUVWVW[a2bXMIPVWWYZYWY./\XTLDBGPY02210/..//.[YWVX-...//01121/...-ZZ[]\[YWUUVXYXVTSTVXXY\/111/,UVY--Z-.]\[ZXWVUTRPNMLLLKKLKJHFDCCEILNNONLJJJLOQQOLMSXZWSMGCCDFJLMNMJKORSTTROMOPOKHJRY[YWVUTQNMNPQOLHD?969BT5:=ADDA<830/.-VPOONMNPQRUZ^`a^WKCCJSIZ//]ZWVWYYXVTTTROMMLJHILQWYWTSSTVVVUUU+,-,WWWURPPRSRQPNMLKJIIIJKNTYZWSOLKJKPWYXVWZ.YTUY./.-YWVVUUTTUWYWSPONNLLOU^5;??;86545651,+-/0/.02346630./035532248;9520001/.///00.,VTQOOQSTUWYYXWVTQPRU,./0110.,*)QPQST*+,,--.../00/.-,* +))*,.-+*RQN +PPQ*+,---,+, ---..-,,,+UUVVUUV+++,-...-,,-.0I/.-+*SSUW,,--/013310/0123566655664/*S+--/1331//0/--/110.,WVV+/49951///0110.-,,-WU+.023344432110/-+,,,-/01120/.../013676445532235689:;;<0>?>===<;97567876665323555679;<==>=<<=>???>??@ABCE.FFFGHIKKIFEEGGGFEEFGHHGGHHFCCBA@@ACDFHIIGFHLOPQ RSSQNLMORUVVUTUUVVVWYZZYXXWWUSQPOOPNJEA>=>@A=?>>@AAEHJKJIHGEDEFGHG IIHGFGFFHJIFDEDDC@=:878;BKSY`aYH8-*/9ELQTURLHEDEFGGGHILMMKIIJKJJJHEBAABCDEGIKKKMOQSSSQPONOQW\\YVV\cjpsusojginsspkihijkmoplgddefgfc_]\]]^_`^ZURQRTVY\`abdiqy~}{yyyxupkd`aeijmty{yyywqkhijmruwxxwtrrrtvuttx{}|{yvtsuvyzuplkmooonlmprrqsy~~~|yx{|{{}B~{wtrswz|???>?@AA@BDGKORROKGEDDFGHHGGD?tor{CGHGHJNSW[]ZSMJJIIJLOSWZYUQPQQNH}zyumb\[_cd359;9jc^[]a`[VRMKLNSZ/0][XSNMPRRQOLLMOPONMNOMKIN`@SYSJFHOTTOIGJQY`eecfmu{zqbSICBEHJJIGINTZ^ZTQQQMGDGKPXemgYMDACFKNNNSXY[bjolf\RMOVcqtfTIFKS\_\WSQPQQTY^^\[ZVOIHJNQROKHGGFGJKMOOMLOWbhhd]XXZ^`^YTNFEMRSSRQRY_a^[[^cii`SHBCO`jkkmpplgeedb[TPPQQQTWWTOIDBDGKMMKJIIGFIOQMIJOTX[]^^]\XPF?AFKMMKIIMQTTX[[WUWWUTUXYVTSQR3SSSPKGGHFCCFGB@ACEEEDDFKRX]_`_]XTRROLJJKMMJFFKRWUOJHIKNMJGGHHGGGIKLKLLKIJKMSWTOLKIEACBzg\kDNLE@@BCA}wqq::6\PKJIGFEFHMQQMB-AK5?@ADFHKMNNOPJ;2BhFNNJ~tpsyEJOQFvlmvBvomkgdcgp|CHLIAy?@;g]]dknmihpwvonortqja[Z[]`dda`bflpmjjiheb^^dkja_jtj]USTTVYZYTNGBCKW_]SD2PP]6@HMOSVWUX`c`]ZSOWgwyf[VTW]``^[ZYZ`hjfbaa]WTUYZZ[^`aa^YWSNIIMSWYZYWX[[XUSPNNQUXXWY[_a_XRONORVVRORX]\ZZZWTRPMMOSWZ[[[]_aa^ZWTPNLLOTURONLIGFHP\gje^XRMJJKOTY[YVPJHINU^ccb_^`g8;;:8666789:;=>>>=/<;;;<===;9743467653da__ae5776533344iiihgh68:;;<=<;;:;;<;9878:;<<:::987898620/012223589631/012334 555678876778767643344689:9753e35787654fe5cb122344455543356898878765igda``bdbabca^\]_aacdeg4567 +0/-,,/ +631232.,-..--.00/.,+,-+)))*+,-./1 +1/+))'%$#"!  !" ###"""#$$%$$#"! !"#&'('(()))('(*+++**)'$###"""$%'((()*+-//000.,-..-+)))('&$"!!""#$$###$%&%$#"!  !  !"#$$$#"!"#"!  !  "!"#""!#$%&'(''&&%%%$>&('%#!!"%(+.133323321//..--,,-/2466544578:;;:7657887789;> !!""# """##$$#" 1-+**,03 $$%$# "###$%%$#"!!!#%()*+--,*)))*+,-./.-,*)())* Y"!!!#$(%#"!  "%'(((''*..(!"%%%&''%&*)'" %**(&&&9(()**)('%%&'''&%$%%&&'($$&(*)))(''&&'(('&&%##"Y!  "###"!!#$$" !$'('$!"##$#!!#%%&&%$$%&$!$((&$$$#"!!!#$#" &6'$##"!!"#$&)+,-+&#''&%&'((&%&('&$"""! #&'&$##$%$$%%%$#!""#"! "%()(%#! !#&''&')(%%'&%$$##$&%#! !"&+B&%"! !"#$%&'&&%$"""$  !"#! !!!"#""##%$##" +  !!  !#$ %&'%$""$&'('()+,,+**))('&%%&'&$! !*".!#$#"!!"##$%%&&%$% $###! !#$%&"%$""$%&'())'&&%&'()(('(()('&&'(''&%$##$$#"!!#$##$%%%$"$%&'(***)(&'),-*&$$$#$&(*+***+*(''(*-/000/-)# !" +!   #(+.0210-)')-,)'(*-.,&E"&(%!##"  !!! !"#"! !"""! !!!"#$%%%$#W$(++)''*.269::7423699854566679:9643567653223334542/-+,-/136767:=BEGFECCCDB@<85357889=ABAm=:9::<>@AA@@><<=>@?><=?@@?=;:9;;=ACEC@=;;<>>>=<<=???AEIJGEDDEECBBA@@BBAABCE"EB@><:;=>?  !! "#&(++)&#"!!#%#7227!"""#&(+./-)%###$%&(+.10-**++)%C>;::83+'')**0,)()+*&# !#!')-("!&+,(%##',143248=@?:1(X"!#$#"!!%*/31,*++($"#&)/8>:0'" !$')**+-./38:95/)&&+5>A8+# #(.0.*('&''(+.///0-($#%()*(%#f$&()**)(*07;:60,,/231/+'">=?#)-.-+))-12/..049:4+$ "+7=<:;==:65542-(&&'()+./-*%"!#%'('&$$#""$)+(%%(+--./e-(""%''%#"%')),./---,*)*--+*)()+++*&$$$" ##! "###"!!%*.010/-*('('%$$&()&#"%*-,($#"""#%))&%&&%$$$%&=%%%&',/-(&&%"CCB!!">2*3#*)# ! ?=831"4%+,)KA;9;?DG%(++$9349?!B<76631028@#&(&7)%&+156438>=879<>=81-,-.0220/0367532210.-.1550.4:5.)')*,/0/,'"#+1/( 'r "%(*)+01/..*',6AMK@5/,+,14420.,-16752332/--./..01220.,*'#$&*,..--/11/-,*))+-.---.021-)&%&)+,*(*.11/..,+**)()+-/?02320-+*)'&')-/-+*(&$"#'.352.*'$!!!"$&&&$"!%)++*)().-+*+,/0// ..-,-10/-,-.//../.,,-.///023ـ၅ӁƁǀ W¿ʀuŷƺӀ׿ل􁉎뀊0օqաļ¾ĭ߀ŻЄр񀌕鉡ȿ½ſſ鿎돡۽󀃁톔Է݀Ŀ޼üĵU򁉍 2 `54344545N79;;;::;;;::878:<<:9889:::97lkjhgeca`_^\[\^bfhfede34566544544579;<<:86544677765/432232101110___`aa`__^___][Z[]_`_]\Z[^b2332`ZURPnOPRTUUVY]_`]ZYZXTSTWXXVUTRPNMMLKJJKMLJHIJKLLMMMNPSUVTQNMMPSTTTVWWVVWXXXY[]^][[\^`2343221ba```c47998776543c`\YWVUSQPQRSRPNNOOPONM&LKJJKLKJIGGGFFECCCEFGHJLNNMJIHIIHGFGIKLKIHIJJIGECBA@ABCCD,CCEFFGGGHIKMMNMLKIHIJKKJKLMOQQOMKKJIHHHGGHHHI LNPPPQSWXXVUUV(WWWVTRQSVXZZ[\^___`acddb^[Z]bgiiil89:999:4tttspjfddefggdbabejn9;=?ABBBA@@??=<:87654334443eee345>689;<:8665433455443211136788765430YROOPQTUVWWVSRQPNLLLKKIIJLMML*MNNNOPQQRTUX[\[ZZ[[Z[]`b1a_``^[[[\ZXWXZ\\\]\]/024652//0//...023210/./2540-[]ZQHELUWSMIMQRU\`_ZQIB?@DHJKJKNSY]`abbb_[VQMMRZ`10\XVVWUPMLMOW/2210.ZYY[\\\[ZXXZ..-./1332101110..[YX#WUTUUUVWYZ\.01121/YVVXY[.///./^^\ZXW +VVWWWVUTRQP +ONMMLKJIHGFGHIKLKJJKLMMLLMOPPMIC>=?CGJLMLJIKNPPOMKJJIJKMQTVWXZ.//-TOLNSWXWWULB;>O3@CDB@>=<:9;>@?>=<965554 5679;;;:99:;<>===>>=>@ABCDCCDFGGHmIIJJJIGFFEFFEEFHHIIHFCA@ACFHHGFFHJKKKLMOPRRPOOONMNPRSSRQQQRRRQQRRRQQRRSTTUVWVUSQNJFCBCDDCB?;:<=7S:14>KXf:@DGHI JLNOOONMLJIGFFHHHFDBBCCBAABCEFFEF GHJLMLKKJJIIHJFGHHHGFDCCDEEDDDEFFGIJIHHIIHGFFEDEFGFECA??@@AAyt?KSSOMOPONKHEDEGIJLNPRRSSTSRQRTUXXTKC?<::>@?=?DKNJA:5458986420/.--.023236;?A=86431123553_YVVUVZ]\XUSUWVSPORSQOPTWVOHFJNPRSRNLMNQSTQPQTW[`13jlkhgijkmmied3332347764_RJIMPPOMMOQRSRPNMNMKHFDCDDB?@ACCBBCDCA?=;99rfcee]W[fmsz{vphbdd^YZ`fhfa\XVXajsz{tdRN\giggkokd_^[WSPORSRQTUUTUVWSLFA??CHLOQRRQQRUZ^_\]bjs~v]MMV`hjhhhf`XTSVZ\]^``_\ZVW]cfhkmic^ZTRSVX[cjeZPNPRSPLJKOSVY[ZZYWUTROKJNTSQQTUUW]Laa^ZURQPPRVZZXVWYZZWSPOQTUQNKJHHGEDGLS\fmmf[RNLKMQSQOPQNKLPV^dec`^^c6;==;;;=>===<;: 987789:;;;:97 6543dbabdf44434hhh45567889:;<<<;:::;;<;;:99988:;;;::987652000245567776410112346899654566764211224577765432e45$43ee22dcb1233235677789986555656665fdcdeggfd`]\]`ej6776 65543210/.-+**+,/0/...')))**+***++,,+*)))*+*)('(),+(&$###$%&'")+,,+)(((&&&((('&&%$$##"! !""! !!"##$&(***(&$$%&'''(**+,,+,-..,+++-/-..//0.-,*) (('&$$$%%$#""#""!"""!""!!  !!"#$$#"!"##" !"#"!"!!!  !!""###"!!!" ##$%&&%##""! !"$&'''()+,+)((('&$# ""!!#%'()*+,-./0134430.-/257669 ?>><:63223455422358: !"! 001&" !!"$$#!  !"&##$%&(*,-,+***))*,./...,+***)('(()(('(9)#$""#!""$(++)%"!*#'*,./00/-+'$!!$(,*'&&'%#!!!"&(&&(*)('( (''&%$$%%&&''('&&'() +***)('''&&'&%%$$%$#"!! ) !""! !!""##"!!!"##"  !"#! !"#$$"! "$&''((%" "%'=% !#!! "#$$$""$')++($#$'(%$##%&&#! "##"! X!#%%$$$###$$##$&$" !"$%%$#"! !$&'((&# !""!  !$(*'$$'(%"#&($##$$##"""##$#"! " %%#"!"###$%$#$%&&%%"""!""!#""#%$"#! "$##" +%$$'  !""!!""#$$###" #%%&%$%%&&%&&'((()**))(('%"!!"""! ($*1 "#$$#$&'((('&%$#"""###"  !! !!"#$# "#$&'(((''&%%$##$%%%$#:$$%%'((('((('&%%$#$%%$#! !!"A;8 ',,)()*)(&$##$%''()+,,++,+,-,'!#  " "$&%#!2!##  !  !! !$&.11//00110,)(% ! )#&$!  !!"##"! !!"#$$""#$#$&&%$$##$&')+,-...02479<;6223576301346665445787530.---./00110/-+,-/2454346:?EHFB@><;;:89:<>?>=<=??>===<<<=>?@?>==>>??@@ACDEDCA?<+;<=?ADFF#C?=<<>?@@ACEHJLMNMMKHDA@@ABCDCBCDF#ECA??!#&(('%$$$#"f#%&%#! @@ ?>;9887655 $%&'*./.+)'%$$%'(*-1453221/,*(%C=95321.+())$$%%&)++)'# !% "$"&%#""#%&(*))*,/0c4885/)#!#%$"!"#$%(.11//0/*%#$%&)-11,% %()((*/34101453.(%&*/20*%$%(,./-+('&&&'*.1231-)&$%''&#>=B#IHG$$G%,5::8630-++,-,)(&$" !%+/0048730.-.0231.*'(,5=ADGGC>:763-(''((('''('$  #'+,*&#!! !$)--,+-/10//01231-'%%(*+*('&%$&)*)&&(++,,,*'$""#%(**)()*)&$""!!!#%')+--+(),/000.,*)'%$$%&'('%#"$'))''))&$"!?!"#%'('%$$&'(*+,+)'%$%%$##"!>?A>4,/8??= ! 810# ! (8BFECCF%&$?9<%,,$=7567556773016:? =;;2,*-/+(*06;@DDB>;83/00-+,0342/+)')-26:<90%#+3533697300/-+))++*)+-,+,-.+'" !#%'())(()+/121148=EH@0&&-38987762-+*,02223320.,,045679741/,*+-.0596/)(*,-+(''*,--..---,+*($$'**((*++-0220-+))(N(*,..,+,-..-*('),-+)('&%$""#%(-2540)$" !"#! !  #'*+*)((+  /../01111 +  ///.--/.--./0121.,++-02ۀĀ݀ˁށ ÿ¼iӲʷ̴4üÿĺ􈗞л́ʺἏضſhþ¿߄ʾ̪煙¼¿ʹĸ󁎕ດ֫۽˽»жĽ¹󀃃G=N^4gfgh444555789:;<>??>?>=<<;9667:;:::;<<;:987lgcbaaba`][[\\]adfg43f34553221`/13678:;:9889;<>?>;8754fe33433ca`_```_^^`ceffb^]^__^\XSRTVXZ\_122b]YWVUTRSSSRRSVXZXTRRQKECHQY^ac2232`[XVWXWUSPMLLMPRQOORTTSQPOMLKMOPRSTSTUVY[[Z[^`a1221100/_]^_^[YY[\]`a00135642a"`c2a][Z[\]^][XVVUTTUVUSRPNLLKKKLKJK(JIIHGFFHKKIGEFGGHJKLMMLLMMNOOONMLKJJJIIJKJHDAACDEFFGFEFEFFGGFFEFFGGFFGGGIKJFCCEFGGFEEDEFFEEHKNOPQSTUWVUUUSRRSTTUWZ[ZYWUTSSTUWYZYXWVVWYZ\\]^___aaa`abdffedegiklnnke``bcdcbaabdfhiijl8;=>?>>=<:98P7665432234455566776652/\ZYZ^13444569:<==;84210/YSONNOOONMMMLJIJLLKJIIJJKLLLKKLLLMNOQRSUWXY[]]\[ZZ\^^^][YYXXVSQRUWWVVVUUUVUUVWXYYZ]/0.Z.11.WUUUVWZ.///0110\M>BPVPEBLUVRNMLIILOPRQG3C:Q:GNRUVVUUVVVUTSRPNLOV_d2c^XUWUVXZ\\.--///.-XUTTUWY[^/00121002443200011/-YXYZ[\[YWWWXXY]0110//.YVTRSV[^/010^[YXWVUUUVW UTRRQPOMMNMLK IHHGEEEFHJ KLKLLMLIGHJLLKiJHDBCDEFIJKLMOOMLLLNONLKMOPRRSTUY/11.UNMRX.[WTROKJLRVY^0/./110/0110/-,,-.-VPOSZ010ZWY/11.XVUTUWZYTNJJMPPONlMLOTWTQNMNOSUROQW/232/,SPNLKMORTVTQNLLLOV/0ZTQNKHIKLJHGHIKMNPRSSUX-YVVZ./.XTQQRQONMPSWYYTNKKKJKNPQRT-157643230,(()*,.02221.,,.124&3444310///../011/-VTSRRRQONNPQQQPPQRTUV5+,WTRQQRT++TSS*++,,,*RPPPR+-/231.,+*ST++TRPNNPT+-..--,-,+TRPOOONNOPQQPQTWX,,,- ...---.00/ -*T+-.//110-,++-/2444334688766555443 20///..//.6-,,WVTSTVX-./010/..04531122344432100010/...[[[\//ZYY-.0d11000110/-+,/124676432220/02456789;=>==>@@ABCBBCCB@???=989:;94112331//037:;<<<=?@@>>>@AABA@?@ACBABDFHGHIJHEBAABDFIJJHGEGJLNOQONMNMLNRTUVUTRRSTTUUUVVVWWXYXTPNLIEBABD@5VSYWKDIWf;CGGECBBDGJ3KMOPQPOMMMOPQPNKHFFEDCCBAABCCDDCDDFGIJJIIHHHGGGFECCDCCBBCDEEDBACGKOPPNLJHFDEFGGFEFHIJKJJGDB?=o\MV=MPNNPQQPOMLKIGEEDCCEHMRTUUUSPNJGHNUVPG@===;622:DJMNH@:51./36887655420/0126>GIF@7ZOPWZYSMMV/1_ZVNB85?BHPX^__\ZXXXTOMSXUMGwohc_^]ZZbn8hYKDBA>;?HQUW]eiheb`_011/XOJMPH6/6>CEFGGGFFFHJJIGGINZ9FMMLJIJMMKIILPTZ][YYYWVVTNE>z~}@DFGIOZdf`ZXVVUSPNOQUXTMLPSUXYZ\_deaYUX_cb]WQPW`ffb``^\YWWYXURNKJNTZaippf[RKFCxpmqzKOMJLHEIR\bb`[UQRV]`\WSPKGDEKSXYY[]]_aehlnmmkeZOHFKSZaefc`]ZVRQOOPRTTROMLIC?BHOSVWWRICBFLQQSWWQMMOQQSUXZ_caZURRTUTQNKKNSVVRNNQSSTVXXURPMLLNQTUTSSPLJKKFA|~BGLQUWTPPTY]_adc]UPOPQRPMJJLLIGJMOMMQUTOHB@??@ADGKMMLLKKLNPRRPLHFDJSUPJFBwh^ajoqv}@>sl7::1PFEGHIIHGFFGHIMTUL=.NP/24;FLJHHJMU\[H2()1@Xny~~EFIGEDEGDzi`fs{ztnkiilpokq>@?>thabgpGHByzFGFFEwuviUIO_hfdb\RLTcq{Avh_]\[[\[[]`bc_[WY\]YVVWTOQZ^ZRNOSQG>:?GOUWWZZVRT[ba^co{ylYNMVenmighe_XUSSSW^ddefe_WW[]\]adc_[WVY_eimu}ob[Z\]YTQRSRQRRROIC@?>=?FLOPPOKE>:98765igfdcbd4799863ee356664geb`^]]^`be46788654 556665679;<<<; +<===<;::9989:;:98875323320//37999:;;975457885323X2223455444321bb235689852ba_`bfh444554334565433357889886544334679:;97654fca`bb_[WUX\bfh45/../ 6420/-+*,../.(-,,**+:-/01/,***))***)&$#$&'(*+-*''&&&%%&%$$%&(('%##"$)+,-!-*'&'()(&$"!!"$%%#$&(((''&%#"#$$%& ')+,,++,--,+,--+*)*)*++,,-,*)*+,+)''&%&&'&%$"! ! !!! !#$%#!  !""#$%%%$$%$#"!! !"# ! !"! !!  !#%&&'()*++*))('&%%&&%$"! !#$&&%%%&'(*,--./010245433579:;:8311211123455668  )''')%"!!!" !  !!!  !"!""###$$%&'()*+,-,*))*+++*)('%$$%&%%&'() &&$%A%#'$!''$"!! "$%&'"%!$&((''())('&%%#"!#(-0/,('&'()** &$##$&')* ''()))('&('%$##%(**)('&'&%$#" !!  ""!" ###! !""!  !"#""!!!"#"!!"$%L&&'$! #&(&%$""$%'$!!$('$%""!!!#&&$!!##""!; "&(&#""!"$$#!#&%#"!!"#$%&%#"!!"#'(#"!!"" !!"##$%((%%&'%#$$#" !$&((&" !"#$$$J$###$$#"!!"###""##$%&%%%&&$#"!"#""""!!!"!"#"! !##" ! !"##"#%()    $##"#$%  +%%%&%%&^  !"!  !"#$%$$#"#"""#%'(())*)('&''()*+,+)'%# !'',+$ #*2"$$"! !"$%&''((''&&'&%#"!!""!" #$&&&%$$$#"!"#" "$')+,*(''%$$$%%$$%'())((&$"!7,#* )*(())**)('''&%$#"""$'*,,,++*(&$$'*)# ""#$"$"## !/#"! #$%$%$#!  !  "#$$$%'.7 !""#$%"!  !!! "#$%.')+,-*$!"'((('$ #$" "##" !#",#%(*)(%$#"!"%''&%$$&)+-./.-,*(&%%&(+.12234443J11001233322111/--,*)))+-/0/..-./0259<>=::9889<>@AAA@><<<=>=>>?@@@>=<=>>???@BC0A?<::=@ABB@?><<;<=<=?ADFIL'&%HEA>=>??>>==>>=;9:;<>?>=<=>!#$$#" >>>=953347< "#&(+,+(&$"!&+0210/./0.*(,0/*%FA;741/-+'$'.,# "%)+*)'%%!I$ $%$$#$&&%##%')-//-,,+*++'":>@><"#""&-352.--,,+)()+/0-)(*-./1452-*,032/+((+1551/0/-+**,,*(&%%'*-16;<70+'$"B>;9;@I)+*KEG'(%#&,2541.)&'+030-+)'$!"'-0/--...024565553-'$#&,1588631-*(&%%&()*)'&%#  $(+---+&"!$(*+,//+(()N*+,/21.*(()**(&##&),,)&&()))*,,+)'%$%'(*+***(&%&&$!@A"&*.0/,)(+-/0022/*&&'())&%"!"%&%%'++($! !"$&('&)'()**(%" @B%+,($" :2,/599:> 60!!  ,:ADDDEHIH$$&%$##$#<1*.6;;84223586376/,-17A'($@?C#$#"">99:3&"-31/.*$!&/8>!B:1,,-...-,.1331.-.02.,,-+()/2/*(*-,&  %),--..+)*/3202;DC9,%%+5;;88862/--,,/3788861+*.00135531/.1589?@AA?==>?>;:9:;<;:9998mjjl66ifedUccb_\Z[]`ceffeff3ecaa11`^^_02455420001334457::976789:;:976567763cadi787kd`acdc`^[WTTUVyWY\`1c`][XWUTSRRQQPPQRSSRSSQPOOPSW[^___^^\ZXVTRSSRPNMNNKFFKQVXXWTQOOPSVYZZYWVTSSRRSUWYZ\]/1221_\Z[\]_b2221a`_\ZY[/134431/-H[\.][WVUUTSSRQPOONMLKKKJIHHHIIIHHFGIKMLKKMNMKJJIIJKLMNOPQQPONMLKJIIIJLOQRPKE@>>@CEGFEHIJJIIIJJIHHGGF+GHJKJJJIHGGHIIJIHHIKNPRSRQQPQRSTTRONOQRSTUWXY"ZYWTQRU[afijkjeaaba_][YYZ\]]]\\\]^_bcdfj6765hgi6899765568997543210/\]135667875457 8:;:72.XTRONMN MKIHIKLMLKJJK`LNOQQRSTTSSTTUVWYYYXYZ[\\[[ZYVTTVWURQQQRRRTUVUTRQQPPQRTUUX[_`^\YWTPNLKMOQRRQQSTSQPQQPMKJIJJIIIJJKKLKIGFEDCCFKOSWZZXVSTX^b`][ZXXY\`a_\YUTW]2687520...-,VUWYYXY\14777654221110/.#-../0/.XUUVX-./110.YXYXVSSW^23310^[ZYXXYYYXWVUSSRQPPOONML3KIIIJMPQPOMLKLLKJIIHIKOSUTROMLKJIHGFINQSSRQOLHGIMOPOQRSTVY.//.+TSRQONMLMMJIKMORTVWY.2589;;83.,,--..,PJKT0452.Y.132/ZUPMNSTQLIIJMOONMLKJHGLVYSKHIIHJMNLMRX./0/-XTNJKMPSVWVTSRPNMPUZZX9UPKIIJKKKJIGEFINSWXWXXVUX-./01/ZTPMMQTUWYYVRNKJJJKOQPNPX02e1235421/,)NM')+.132/,-/0245654210//.--,-..-...-,WWVTQNLLNNMMNQSUWWWXYYXWTQNMORSUVVUSRSTV,,+SPNMNPS***+*,,-...-+UTRPPSW--.//..--,,---,-..-+TRPPOOON MMPSUVUTUVWWV,/243/,*)+++,-...//0120.-. /0123332235654432321/-,,UV,../00.WUUWYYY,-.8023211234331/.\[\]][Z[\]^/\ZXXYZZ[...YWX-..--.02322235776532 3335678:=@-ACCCBA@?@AA?<::9975333468:<>>?A@=:9<@ABCDDCA@?@@AACD6FHJKLMMIEDDFGGFDCBBEHJLMNMKIIJLORTSSRRQQPPOPPRSTTUWXY[]^^]^___][YWTSRRRPNKHFEFD>744dWHBL\6=CEEDCCDEEFGHHJKNONNNOOOQRRPNKJKKIGGFFEDB@=;=AEGHGECBDEFFEDBA?>?BEFGGEB?<=AFHGGHJLNOMKHFEDDDE"FGGGFFFGHHGGFECBA?o__rBECAABCEHKOPNM"LLLOPPMIFEFHKPTTNE=86669?DDEIKG>7312334432221112332cb_ZVWZ\ZUMGGHHGJNPNJGGEA?AFLQVZ\]\ZVSPNKFCEMQPOPPNNOPNKJMRTSSVYZ^14565310.--0343-OGGKMLIEDEGIPWXWTRRRQJ?658;<==<;:?:1/6<>@AAABBBCFHGFEDDBAFX8?AABFMRSQONORX_dc`^\XRONID@?ACEIMPQRV\df`VPNOQSTQMKKOTUSRRTW\afjkhaZVWZ`fgc^YWY^`^]\[ZWUTVZ[YVTSX_eijhe`[WRMIEAzqq}EJKHws|DC{xDS_b]ZXVSPNLNU]`ZPJHIKNQRQONQW]befhiif`YQIDEINSXZ\_bc^WSOOPRTWVQLHEBAHPTSRQKCCJRY[]bff`WQNKIGG(KNOPSVXVSQSX\]\[YVQMKIHKPSSRSUWWURMHFILMNLIKMJCACC@~CLTVVWYZZ]aaZTRPNNNMNMKFB>;<@IQOKIHD@}ACFHGFHKMNOOOMLJJIGEDEGJJFBA{wsrokjmrwwu;==5VJGGHIIHHGFFFGHNW/ZE-:;S39DSVLDCDHPVQD98<;2PXB\kpu~IRPH}}~~zurqojfeehmrtvuqoppovAD||~~AEIIEvnh`[YWURPRQJABSj{Dqd^[YWX[_`_]]\YVWVST[bc^YX\]ZURRQNH?pq?HQW\bd^USTV[bhkpqj^[]agkia\[\YZVQORV[_bbbdffeb\SNPW_cc_[XWY^cgimokfehpyzsh`WMHJPTOE=8ji8@GKKKJHHHGHKMMNPQSTUUVXYXVSOLJFD%FJNMKHC??@BDINV_eggd]VQLEAACDEHKPV]d45D4ffghgfeh7;?BDB?<:997khffggfddf455543ef456776jfca_^_`cf57899864334578:7666789998889;;;:9988775444589::997422455321259<>><;9876665f677752bbc11222ccbbbcc2334332bbbc357753db_]\^`cefhi5444567754346679:93]]1445678:;;98887idaacdda][\^`cfh000///. !  6545421 00/-+)*+,-./0.-+*)'&'R.-/32.++-.-,+)'%%&&''&&')++*)(('&%%$$$#""#$$$#$$#"!!"#%()* ('%$$%%%#" %)++*(&%$$%'())(''&%&'((()*-,+,--..*)('&%'$%(&%&&&%$#"!""!!  !' !#$&%$$$%$""!!!#$%%%&''&%$##"!  !"$&'&# !  !! !"#"! "#%&((&'(('$#$#"L!!!"#""#$$$#"#&*/355652000/.-,++,-.//.../0110133456556'(%#!  !"##"  !"!!  !!""#$%%&''(''(()('%&'('&%&&%$"##$%%%&(++*(&%#"! !#$$$"!""" !##"#"!= !#%'(*,+*(''*/10.,+)(),..,)'$$&*%$%&'&'(&%%&'&&''%$$&*)('''()('&&%$#("!! "$%$#"!"""!  "%'('&$#""!!  "$%#!  "#$%&'"T!!""! !"##$$$!$%#! !$$#  !#"!! !'($   "&'%"!!#$%&&%$###"!#&((&%"  !U!$&'&''&%&)&#""%&''((&$!  "$" !$ &&&$"! !"!!!#$%&''&%$"!!"#$%%%$$##$%$"! "#"""!!#%#"! !!"!!"#%&&%$$$%$#"##"#$%%% & +%%%'())((' &%$= !""##! !!"!!  "$%&'(()*++,---,,--,,---,,+*)0(&$" !!0*!$-"""! !!""##$$%&'((''('''(('%$#"2!  #%%%#"!"###"! !"#$$#!!$%%$%&())(&%$#"#$%%%$$%&%$##!7,.:"#! !"#&)+,+***('))**($"!!"$&('# !2('%" "#" "$%%%$"  C  #$""#$$%!"! !  !  !!"#""!)"##$%&##&(()***)(''(*,,,-012444320.+))*,./0122110.-*)(*+,-.///010.-,+**++*+/489:;;=?@><=?@AA@><<<=>>?>?@?@@ACCD8CCDEDCBBA=97668;@BBA@><:9;>@@>>>@BA?>==>>=<=@@>;99:73/-,,+)%  + !##""" `% %()'%$%&*/210//+(&%# !"#%(*)().462,('')+,*'&&(+,**+,.1357762.+,/3663.+*+.0/-+*)+./.,*)+0367642/-*'%#"?::B%)*(F<:A%&B<",451-,*'&&'(-23/)%#$%'))(%%'+.12234331-($!"%(+../011.+(&&'(*-,)%#!#)+***'"!%+0124773O-(&%#"#%'((),-,*)*-//...,)&$##%())(()*++)'#"#%'(('()'%&(&"@ ##!A#)./--...033.)'&F%%%# %**'&$"=?!"$&%$$&'((('%$###" !!#&&$! ?><:986469;:7  $ 1;=?CGGCC&+)#>=@@><<;;;:7776421014677644688=#%E?>>>"$$">840+(&%#""#$ '5?E$D81.-,*+-011//s/-,,,**/341..120,*+,*% 77$)+-130*))+-268<=80..16:830/0/,**,/367768:9852-)*/477420/14689::7436;??93.)$!"%(%!44"$%##"!"$%&&(*+,,,-//.-+)('%$%%$$&(**(&# >!#%)-/00.*'$"!$'),,--,,,-/...//.--./0 20.--,,,-. +++-,,,--./+**+/.-,+,-.//00&'0-,-/0/-+**+,-./Ԁʀ ́€Հɀց l¾ǿȀĿWƾþe΄Ѐڀ򁇈󆒖H󃄃ƀ½񃇈Ⱦɀdɺ¾»¿胔»ɾë½􆌎򃋈Ƙ݀޸ňľý¾ɽ򂇁ѽŭ5Zeeedcccdcb125689:;=?BCDB?><<;: 998887ljj65ifcccdedcccbaabaacefec#baaa_^_1123321^\\^012233210136998765G67776779:;95dac3443edb`][WTRQRTWY[\]^__^\[YWTQONOPPPRSTTROMJHFGJMNONMNPRSTUVWXXY$Z\\YVTRPOPRVY\^^ZUSRRQOMLJJKNSWZ[ZZYX)WWVUSQRV^356520..023445787532/WY154`XRPNMLKJJLLLMLLJIGEFHKMMLJIIJTIIKMOPQSUURNJHHIKMLJIJLLMNQTWYZZYUPKFDDEFGFGHFFGHIIIHIIHHHGGHJLMLJHFFFGHJJIGGILOOLJHIEJJKMMMLLKKKJKMOOPSUWWXY[\\[YVTSTW\_^[YXX[\[Z[\ZWUTUVXZ[\]^`_^^_acdf57947655689::;<;977652a^[YXXXWUSST[1344579:;::99753223445665421-TOMLJIHHJKLMOQQQPPPRUVVTSRRSVWXXWXZ\^_^]]\]]^__]ZWVWYYWUSRPNORRPMLJKLMNOPPONMKKLMMNPSTUVXYXWUROMLLNPRRSSQMKJHECBBA???ACA?ADFGHHFEGHHGGGIJJHHJMMJFDEHLPQRTVWXXZ\\ZTWTUWZ]16:;9740,V+-0210/.-,-.1468864320-++-/0/..//0//..ZWWY\///00//[YXZ]/1110/0110_^]\ [[ZYWUSRQPONMNNMMMNOPQQRTUVUTTTRPNMKKMQUVRMJHECCEILLIILOQQPOMIEDGIKLLLMORWZZYWTTUW-.-,+SQMKJJLPQLHIOTX.26;;940/./110/.-VPMQV.00.WW.121]WRMJJNPNJHGHIKMNMKJKLKINTSLEBCFJMMIHMU/22/XTRQOLLORTVZ[ZWUROKMT[...-TNJHGIKKJFDFKQUTSVYWUW-./00/.WQJINTTRRRSQNJHHKNONMOTVTQQU.342/-.024541-)IB@G)/20+QQ*-/12233210.---..//.-&,,VTROMLMOQRQNNPSWZ.//.XTQONLKJIIIJLNPRQRTUTT*R++,/25531//-SNMPT-//.-,+URPOOPRU+,+UUVWWVVXXWUSSTSQMJKLNOQRT,/120/-,-/.,,/1220.-./013541..123455456665567654210/ .WQPX021.YZ--.A---..--.///1232210/../00110/[XWVX011_[XXZ/10\[YUOKJJNV17984223456766556764:2100137:<=<;989:>@AAA@@ACCCB?<;;<;977;?BBA@ABAABCDCBA@@?>>==>@@BEGGFEFFGHIJIIHGEDCDEEDDDFGHIKMOPNKIHIJMORSSSRRRQNLKKNSVWWVtXYZ[[ZYXWVVWXXYWTRPNNMLLKKIE?;96`OGUg9=ADEGHHIIJJJHHHJKKJJLNOOPPOMJGFGIIGFEFIKMNKHEEGJMNMJGDA@>8d5=BCDFGFGHIIIHFDEEEDEFGFEDDDEEEFGHHIJLMKJIJKKJHGGE@>@DEB?>?@CHMPPRUUOHB>?ACFIKKHFGIHEB?@HRTOF>989;?ABELRQH;2000/../01100//\YXY-.\ZVPKJNTY[[\/0]XUSRQONJFB@ADFIMRTTVXXUQMLNRSUVRMIKOOLIGEEFFHMRUY.0221124541XJ@>CLX13331^YWVTUW[.\ZWSMIHJKJIIHIKJFEISYZTMKLMMNPSTTRQNKGECBBABCCCA?>@BCTA@?=>@CFGINRW]_^\ZWSPOQSTUVWYZYYXWSPQRRQOOSW[^aegikjfccfiifc`^^^]\ZYZ]^^\YVTUWYXWUUUVUQNLLLMOQQONOPQPPQQPNMNRV\_bgmqssrrsutrppqpnlkjklmmljiijlnppprtvxz|~~|{|}zupnoqtxwz|{xqljjlpuz||yvsrstsrpprttsssvy|~yq@kigdaabejq{G~wuvxxtnjiieb_]^cgknrw}ADFHIIHGGHJMOQQPOMJGD}{Wzxwvtojgec`_`cc\VW^121.SIB@?AFJKIIMQTTQOSXYYYVNB::>BBBDC>=??=?FLJFFIJIFEGGFFKTczvrpsuttwzujcdjpsog^YY\[YWVWZZXX`mxytoic^[[]y\[YWWXXVVWXZ[YUUWXXWWTQTYXPF=9=FORPI@97?KSVX\`b`_^^\XPKSdonh^UQW^b_UPRWZ_bZKFPY\]\[YXY\afghknqqppu~DGBtbWSV[YJ<999;@FIJIJKLMMMLLPX_ba^\ZXUPKHIMNKGFFINTVTOKGB@@BFLT\aa^[YWTQLIIGC@AEKPU\a23445565fddh69<<;:::;<=<;:9876j5666544456668:;:::985gb``ad48;>>=;:8644456765556!55689;;;:8643345556899987643235543479:988765677766678:963ee2#dccbaaac23444321babd3456665gca_^^`bcd3456545554674[UZ134567898765gcbcfggfdcb`^^`c-...-, !"! 5334200010/.---,---,.///-,'++*))*(''(+.,-...,+)(&$$$%&'(())*++*)(&%$#""#4$%%#"! !! !#%&%$##$%&'((())()*,,+)'&$#$%'()+*(%$ #! !$')**)('''&%$$&* %'+'$#"!!  !6 !"#$#"""##"!!!#%&'()**'$! !"" !!"#&')+-.-+'#  !! C!!!  !#$# !#$%#!  !!""##"!  !#$%%$###%'+--+)()*, -,+))*+,-../0 13445(/.,+***)'&%&*%"!! !!!"#""#%&&$%$%&'())())()*+,-,+*('''((('&%$#$%&%#"#$""! !###$%&&&'(('&$"! "#%%&&%#!![ !"!  !!"""#$$###%%# !#%'((**+*+++)&$$%&($ '&&'('&&'))))()((''&%$%$%5$$##"##$$&'('&&'&%$"!!!#'))&#  "" "$%$$#" !"#,$&'((&$#""$#"! !!"%% "%'k%"!$'%$(%#! !$%#! !!""! "%% ! !%&$$#"!"$%%&'''&%$" $(&" """ #%$#%'&%&J&#!%&$$%%$" !"#"!!#$#""$ %$#! !"#$#!!"#%'&$""!!  !###$###$%$$!# "$$#!  !#$%&&&$#"  !"""# +# %$$&%%'),)('(*(&#  %  ' !"$$#! "#%&&''&&%#! #&()))(''()*0))((())**)(&%$$###""!-# '2 !""##$$%%$##$%&'(>&$"!"#"! !#%''&#""#&()('$" /!"#$%%$%%$$$#"""#"###"#$$$##"X#$$%%&'))(''()(('&%# !$$" "'*++-.-)$ !"$&'&$"#$#!"'&!#'& !!!"#"!""$$!< ! !""! !"" !!!/$"! !#$$#!"# !"!! "%''&%#! !""#$%&1%#"#$%$#$&)*+-.02331//14431/...--,+,-.-,,,+,-//.-,!---+)()()***)))*,,---,+*+-045579;<=???>>?>=;::;<<=<:::;=>?@@@AAACEGGGFEFFFC@???><989<=@@ABA@=:99:;>@AA?=;::;<;::<>??>>?BDEB=976542235:@GL'IB<99;<;8656531/.159;=?B#$%%%$#"""$%'))(('%#"BA@ZBCDCB@?=965320.--,'#!$  !! "+"')++*)())*)'$#$&'%!"+463//3650*'%%&'(('&%%',352.-./149<;72002467740,*+,,**-00.+*-0100/./26861+&%&''&$"A>>?AA?;9:?A>;>>944%  ,&7CEB==?%,.)!7337 &*(";: !?5/.13689;:88:;98:;7/)*.364/*&&'&%%%')*)(.7>?;840-,-.//000/-,,--,**+./.,,.d/../.,.10*# %'%!%*,-/120/.//-(&*4995/+*/476/,-03671'$*1454210/1577679::87:A$%!8-%$(-,$"#$_%&''&').24420/.-+'&(++)&%$&),.-)&#! "%)-0/-,+*(%#!! "$&(.,,...,+++, +,,.--,+++,+**+20/.--.---. (')-,-/1110///.-,,-瀅āˁȁր؁ ,0߀ºt¿ÿӆրǘˀüۀր7h¿½cº؀Ǹı㏠Ļ«¼ʱƹɿӀ½ɀķ¸ƻFzabcbbb24677789?@@??>"=<<==<<<>@CGKKJIHGEC?<<>?>==>=;=@CEEDCAACEFGGDA@@?>>>@A@@?>xv=@ABCDEFHIKKIFCABCCCDCA=<<>>?@ABBCDGLRTQGoVWh;:;>AAACIPPG<6542/-+UV,-,+,-ZXVVWVRLJMQQOMMNNMMQTUWXVSRTVTPLJIJJIFEHMPTWZZZXVTUWYYYZ\^^]\\YTQRTUTRPNMLMaNMJD?=@GMQSRRSVWVSQSTTUVXZZVPQ-131/ZXXZ/36642/RGCHMOONMMMOPOMLJHEB@?>?@CFKT]efbYOHEFHIJMORTTSTUVVUTSTUVWY[\ZXVVWXWTRSW\`dgjihgeb`bec^YVWY[ZYY[^^YRLIIIJJKOQSTVWVTRQPPRUWWTQNID@>?BGOW\^_aabehlqtvvtpljhghjklmoqqrrqpprtuuvvwz~}zwvutttuvtsrruwvtqmjhik2lotyvsqoorutpmmnnonmkihhhiiklmnosutssttuwz|}}~}|zxrlfaahiglqvxxxz}ABCDEGJKLJHFED~|zxxxvrkd_]^`_][^fpwxvrk`VVZ\YURPONNNPRUWYWPIGIKMPQNIEC@>@HRXVOJHHGDBBDEEDEGIKKJHGHIF=6?]AMRWZYWUSQONONLIHIOW\][YWWZ`b^WSUYZUNLPUUSTURMLPSUVX[^`bcdffeec_]]`bbdfe_XQMOUXY\adc_[Z[ZUPKLQW\aec[URSSRNG?vvz{yvvuohc]X\jzEOY^\WUVURMIGKWfoj[RNLFBCKUZYY[^acdfea\XVTQNLKJLNRYdr|t`PKLOUXWTRSW\`debYMByAJOONOOONLJGB><::ADHMSZada^cklbUMLMNOOMHEDB@@ABBEILLIFDDCBCIRZ\YUTVYUNHCCGNQMFB?yvw}DGILNNLGA{ulfgo973YMIJJIFDDFILQW-L0<:L/36?NXVMGGMSUQJFGILQRD-2A&F>]xHGGHHGECCDCBBEFEDFIJG~l`_dkoqv?BB?wssrmjlpqnf]TQU^fgfffeca__bcbdjt|~ztle_[ZYXVUW[]\[]^___][[\^`ccb__aa_cjle]UMJLPPLE?<>DJNQQPMMQUTPOMMPXdjifec``bdcZPIDCEGJMNLGFIORTX\`bca`chnsx}yne]WX\^XPIGGHGGGJNPQPOOPPOOS[ce`ZY[ZTNJJMONMMMNOTZ^bgie^VMFEHNQRQNKHFHLNNMKFB@BHNSY^ab`][]V`dh69;<;;9888:;=>=;99:;<;9889::974ecg7:;97679973a^^`d59==<;::99899:::986544hh4456897420124677765433456899:9887655545677789;;96532cccddedbaac234 332caac234576igeca_^_`_^_beecb23 +22ccce3456565554ihggfeeedcb,-...-,++ 0054310.-,-,,++**+++*))(()))*+*(&%&),../01.++,,---,+**)(('''&&&''& %%%&&&%$#$$%$#$#$#"$##"""##$%%" $&&&())('&%#!  "# " "#"! !"1##$&''&%$$%&()))('&%%$%%%"%())(&$#""#$$$"!"$%&'()(''&%$&&')))('&$#"""!! !"#$$%'()*+,..+($! !!  "#"! !"#"!!"!" #""!!! """!"#"""# $%&'&&%%&'),.../10.---./01246776540)$  !#$&(('&%$$$"! !###$%&''('()**+,- *)***)((('%"! ! !!#%' &&$"  !"$&)($ -"%%%$"! !#%%#"#%&&%$#"#$$%&&%%&),.-,+,,-./*('&'# !# &%%%'(())*))()*+*)'&&'(()))('&%$%$$%%%&%$#"#$$%&$"!!!"#$%%$#""!"#$%%&%$#"$#$#""$(*)&#!!#"! "$%$!!%) %#! "%&'())($"  #%#  !q""!#"  !  $&&'&%""$%%&''%$#! !$')'&%"  #$%%&'('%" "$#"#&)(%!!""! ! "!! !"$#0$$%&'&$" !"#%&&''&%$!!#$$%$"!"$%$"!!"#"!"$"!  "$$%&%#"#$$" " ! !"#$ +" !$''&%$%'&')&'()(2)(''(&$#$$$#! #&'( !!     !!""!  "%&%$#"!"#%'((('&%%&%$T%&''((*+*(&$$$%'('%" !#&&%#!.&&/ "$&&%%&&%#"#$$$##$$%&''&&%&&''%$"!!"###$$$#""#"!   "$$#"!!"##$$"  ! =; !"###$%'(('%#!"D##! !"""##%'*,*#3%'1 $''# """!#&()'" $$!"!  !!  !  !"$$$#!  !"#9"  "" - #'(&" !?"""! !!! !"#%&'&%%%&&&%$$&(+-/0101100/.,+,..-+**++)))*,-+(%$%&()*+---+*))()+-.,*(&$! !"$)/354568;=>?>=;98889::;<=C<<=?@@@ABDFGGFDB@??@@?>=>>=;:;<>>=;:86789:>A@@>=;<=>;98889998766679:<>=">?AAA@ADFFDBA@??@>;7436658=;841/010-++06:;95/'! "#!' !"" *%(+,,*)'%$$%$#"!"&+/0.-,+.352,)*-.+'&),,***(%%'**+,/13345566642112334541,'%&*,,.133/,,-,)&$%(,0465/+))*+)$::<>=<==842.+.5>#)/2/+***(%""%-8>9/)''# !&-0.--02334430-,+*(&%%&'(-4=E@3($$'+--+**-04785.&7$()('('&%%#!&)*)((*.121.+)'%%'+/1110.,)'6(**(&&'()&! #&'(('&*00-(%! "%(+/341039:4,&%&'''&$"! !!#&))'%$##""%,130,+-0-(# #(*'" ;::>"%&())(%!=84113!$#($6CI$###$#"!!"! "$#"##%'%@4.-0467:!!;865201452.($$'-22100//11014:@B?:61-,++,021113j211234675446769=>81*$"#&&#"&)*)'&&),+)(&&(-59864200354/)%##%'(*+*'&(,--.13553236:?GNNLLOQQOOQRSUWSNJHGGJMNMKLQY\ZXWVUSRRTVVUVXYYWSOLKMQSTTW-./.VOIHGGEBACGKNPRV[02431.WQORTSRRQNLLOQRSSPLKKJIHIIHIHKORV-0220-++-/11000/..-,+TRQPQU,-./0244210//0112332/-+*+-//.YWUSQPPQRRSSTRPMIFEFGGGFHLQUUSUX,UPLMRVVTSRQPPOPTVTT-38951.-,,.035651-*STSQQQONNLJHGILLKKMOQSTVXYYY,XUQNMNQRNKLMNMNQT*+,-/121//0110.,+,-/123321223579:97767776679972.,-035544431/,TOLLOS-/11.,,ZVK;5;EMRYbj9=@?;754320/010.\[ZZ[0\WUZ/000-VSQOMLNNKHILPRRRUY.024566555676434688876677789:;<==<<;987766568:<<:9:;=?BCB@><96568:=ADEFGGGEDDDCBAABDEDCBAACFHGFFGGFFFHI HGHIJKMOPNML +MOQRSRPNMML;KJJJKNPQPNLKIGGGFFGIJKKLMNPRSRPMHB;6`\dp;<=>@CGILMMLLKJIHHHG'FFGIJLLKKMOPOMLKIHGGJLMKIFC?;99:=?ABA?<;n<>??@ACDFFDCDEDBABCCA?>>??@BDEEECBBDGIJJIIHGECCCDGIIGC@?>==<=>@CFJKKHGEEEDDGJJF@@DJNNMMPRUXVOE?<;>CEDCFLNH@8310121//269951^\ZYXVVXZZYWURPMKJJKMNOONJJKMPRRPNMOTZ]\XTSTTRRSX^dil77630.---ZZYVQIB=<<=@DHIKNRTSRPOQTW[020VLFDEGIIILW28998779:72UF<wpjeba`\VOJGGIJHEB@@A=724;AFKNOM LPV.2563ZH<;>?ADGIJKMPPOORUURNHCEWEPZ`_\XWZ\XRMLNOLKLOMJIJJJHFCBDFGHIHHJLMNSZ\YTPOORVWURPSZ^XNGGHFDCBCDFJLLJHECBxplkVi431YPKHIIGFHKOTQC/&,9@>=BLSNEBGOUUPKILPPMHD;N(1$FBiDIHGIIHFEFJLJFzvHPWYSHurrpnoty>?jdn?DEDGP\aa_^\\_fnu{}tha[SLKPV[\YWURMJIJMQTUVVX^cedfknonkg^VQPQSTSPNOQUX[^binldZTRQPQSTSQPOLHDA><<>AGOVZ^_`abb`\Z[_dj8;<=>>=<:99::978$:=?@?=;<==;964gfgeca_`ch665hda_`c59<=><;:::9:;9754iii445666766431013565454455689:::98776544456677788765 42dcccdde3232333445jgeehjdSDCNY_aabcdf45543dcbceg454545hfddeedc .-,+,,--,+ (42110/..//..-+*)()+,,+**))+-..-,++,,,.1 3223420. +-+)('&&&'()('&% $#"###""!""!"$%&%C&''&&'&&&%!!$$#"""$%%$! !!!"$$#"!"$&'&#!  !""#$$#"""!!!"#$%&')(&%$#%&%#"#$%&%#"#$% +$$#""###$%&5'(*++,,,+,,+*)('%$""!!!"#"! !#%&')+.//-+)&%$$%%"!!  @ "##$%')*)(&%$##"""!!""! !#$$"! !!"!! !"#$%&'''&$##$%&')*+ ,,--../134456710//../010135e&'()('&%$%&(%%$$#"!  #&&&%%$$%&&'(())*('%#"#$%%&&&%$#" ""#"! !"#'"!! !!""!!! !$)..*&# !#&)++)(()*+1*+,./.,(%$#$%&''(())(')+--,++,-%#"#$&' + **+,--,,+++**)))*)((' &&&%%%$$%%&%$5%&''&%$%%%$$$%%%$"""#"  !"#$#$(*)%  !$(*($""#$$#*"#$%&'('%$%!!##""! !"#$&((&&%$###%'('%%%&'&&''&#"^#"!! #$$#"#"#%&$!!"! #')'&&&%$##%&%%%&&'%$" !$%%%&'#! "#$$&)&""#%$$" "#$%%$"!!!  "####""#$ %$#""!""#$_"! !#&%$%'%" #%%##"!!"""%&%$#$#" !!   !!#$$%%%&%$! #$"  "$ &!  !#&&!"$'+/8'''()(%$&&$#"! !" !#$##$%  !!  !#$%$##"#%&'&%$#" #$&&%$#"!  !" ##%&&%$" +*/7 !#%&&&%%%$#$#""#$%$$$%'''&&%$##$%'(&$#   +!"#$$#"###"!! !!#$%%$#"!"$&$#$%'&$" 4 !#%%$"!!!"!!"$$!"%%$$%'()'!!" $"!B"! "##"!!! #$$!"&)* ! :!!  !#    $(%  !"""##$$%$$%%&&'((())*+,,,+***+,-..,)&'*./-,++,,,+(%%%'(*+*+,---,*))*++*((*.1246;AEEB>;::9I:<>>=<<=?ACEIKKIGFFFGHHHEB?<:9:;<:976422345667668<=<:6423567776678898889:<;;<>@AA@@ABCDCBCDDC@>;;<<963235668;@CEH%&%%%$$$%&'())('&$##""CBAABBCDC@><<;96554447;840,)'&$!  #$)**))(&$$%&&%##&+/000.,+))*+,-.0.)$#'.210/.-.00-*+.232234431/-/12100231+&#%()((+..+*,01.)'+3:==<94/,**+,*&$$$#B@@?=>>6+(1 )02/+))*+,*'$#%*-.-+'" $'+.12232013530.-,)'&%$#$(/6:9/$!$(,.///27:<:6310-**,,*(('%"!"#"!  $')*+.0/--.-+**)'%'+,)&$$&).21.)(+/11-&  "$%&(+.-)%$$":"(/320--/10+'&''%$%'&$$%&%$" "$&'&&'))),032.+**-00-*().2.'""##"!!!"$&''%$#!!@:542/" $   6#&$"###""$')'$A<:?%,12-%>778767;> 2026751,%$151/1332.**+-2=G&KJKN)(F:312332/*),16763149;:9::;;;72379865558:6.'##%'),143.*)(&"!#&((('(*,058;;9631/+'%%&% 4/6 ##"$*25531/.049=ACB<4/,'##',//-+\*)'%$%(*,---/36657:;;::84.++-/0.-,,-.01136884/*)('(((&%%%$"  #&'''(*,,,**+-14 (1110/-,,.120-,++111 +-,-3211340%#),0/./010.-.Ԁ者׀ρ~Հ􀞁  #ބ߄p·܄k½Ȅw ¿ſľͿU򄍒Źʾεǯý״轧҆лŻüũýϱ̶گ십żü½Ǻ¼ʽaba`_^^`abcc257::;:::988877677765 6788765556667877654456788876544ihgfeddefggebaceggh466655565gbacefgikm7878 nifeeddbaaa`\YXXWVWY[\[ZZYXXWWUSQPONNMNMLKJIJKKJHHILNOPPOONOONMLMNNNO6PQROID@??>>?BEFGFFFGHKMNOPSUVUTUWZZXUROLJIIIKORUVVWXYYX5VROLJHGGGEDFIKLMNNLKIHIJLMMMNNNMMPSUWXYZ[[[ZZYXXXVSPNMNNNOPPOMKKLNPSTVWWXYXVSPPQPOMKLKLMMOOONNMLJIIIJJKKJJIIHHHJKKIIIKNQQPNMLJHEDEFFGFEEDEFHJNOONMLLNNMLKLNOPQQRSSRRQPPONMNPQQSVY\`bcc/cdefdb``aaa`]ZYYYXWWXYYYZ[[[ZZ[^`bdfi79:;;;<===<;:98 7776677667 654332110//.C/00012221/-YXUOJKKKNU.010/0231\WTRRRSSSTUVWXXWVUTRQOONNMMNNNMLJIGGFEFGHHIKNONMLLKJ^LNPRUWVTQOMJHHJMOPPOLHEGKPUYZYXWWWXXYZ[YWWZ]]][WTSTXZ[YXWWWYZXTQRTUVWZZYWUTTVWVUV,./01123431001 +0/-+UUTU,.0 123222331/../0;///___^_abba`_^^^_^^^_``a``aaa`abb_\YVTSSWYWTSQPNNMNOPQRQPON4PPPQSUVUROMKJIHHFDEGJKKKMPQPPQRSRRPMJJJKKLMOOOPQRSRPOiPRSTUWWUSQRW.0/.,WVUSPNMMPSVXZ[\..-,,.00/.-,TOPT,./0//---...[YYZ[ZWSMJLNKEADKQUSPONIBBO_2b[TOLKKKMNOONOPTVWWXYCXXYXTPLKLMORV\1563.SKFFGGEDDEGIJLOSX.158741ZSPPQQRQOOPRTUUTOLLMMLJIJLORVY./122210/.-,++WWWY./13443100//..-. ZXVTRPOONO1NNNOONMJGDDEGHIIIHHLQW\^\XUV,,WVVUTSPMKLNPQT-14430B12331/---,SPSVWVTQOMMLKJIHGGHIIIKNQSUUUVXXTOLMSY-WROLKJJMR+.0343210/,++-///./257988754457:;:975432345]441+JFO-135420/..[TJD@=7/,4CMQSX\/13431//02210//011/./0110/-WUQLKMNLJIJMPRV\011222101234432235 44432248:;E=@A?<97643579876679;<=?@BCCA?;7543002578:=?BCCBBA@ACDEEEDCCDDDEFHHGFFGHIJKL)KJIIJJKKLMMNNMKKLNOOQSTTTUUUSQPPQQPONNMJHG^HHIJLORTSQK?^LO]jprs;>ADFGHJKLKJJJIHIIHHGFEEFGHJLLJGECCA??@EJOONLKHFEDDCCA><;==<:8moqqprw=??@ABDFFGFDCBCEFGHHGHIJHFFHJIFCCEHKLLJIGFEDCBBAABEILLJFDBADINQQPPQTVSMJLQVVND<98:>ELOPNLHC>95321/-,-Z\^[OC<;?IT[.--.00/YTRVZ]_]ZVTNHGIJHGGGFEDBBDHJG~DHRXYWVY\[[_a]PFDJS[^]ZVTTUUTRQQQRRQOMMOQTWZ[ZYYXX[..YSNNQUUQKGDB@?>@FOWXSF<6337CS`ff34h`VNHC?@GQY\`h54_QA1G1)->,:GPROJGEEFIKKL>MNOOONMMNPSUXXVSQQSUVWX[_```abceg566f]SKKOU[_bdfggecaaa`^\\[ZXVWZ_dghfcdfggc\WTUX^cc`]\]D[[aly{vttsrpoopqsromllkknrwyzyxwvutrolhdcgmqplgb_^_``_][YYY[_abbcgieccdhlptz}|xtqooprrrqpnnoqtvy{}~{vsswz{yvpic]ZZ]cillmoqrtxEIKLMNOONLIGFFFED}}}{yz}AA?:keddca^\[XSPSUTQNMKIG%GKNPONLJJKJHHLRTTUUTSM@407>DHJIHFFGILMNOOMMOQSY4BNRPPSUURRTUTSTZckoolg^WUVVTPLHGJNPNMOW`eedb_]]^\WUY`eghggilnja\\^^[WUUVUQIDDJQTWZ]^[[]_]XQKMT[_cfe_YY^bdd`VKB~~@BB@ysqpmrALV\[XTQPQU[^\YVUW[][ULFFKNPSW[][WSQSW\acddd`ZTQLIILRRK@tyFPWZ[\\[ZYYWSOPRTTTUTRPNNKIHKORSSRQOMKOTWXWWTOKKLPTWUQLJNUZ[WQJGKTZ\\[YWXYXUSPKGDCBBEHKMPSW^dd]RJE@=@FLOPPRURLHJPVXXVTSSVTNHGIMQQMGBACEFDBCEHKPUVSOKKMMLKLOQTZ_]TLHD@==?@@ABBCB?y{ADB{usrqolhaYPJE@DFILORPF906CLJ?5225;AFKQVXVROOPSSI5$<>DP6OnEDztyHKIIJIEA~wplkosx>@A@ynec`]^dc^`o~{qie^XX\]ZZ]agmlfciotvuuwzwqlcS?qyEIPWY[\[XTSV^fiic[VTUSPQW\`ba^ZXYZ[]^_aba_^ZPE@DKT\cfbYPMR\eknooke]Z^cdaXKBCINQU_innkiiijhb\ZYYZ\__\WROORUVVUSOKFBDLV[ZWUSTYafhilnle]XX\\YXWTPNQW]___^YSRRPORVUVY[^`_\VPJC>;:=DMTZ^aaa`__^][[^`bfm;>=@@?>=<:97l79=?A@?>><;;:98889:;:8kgeefgggfda`b258:;;:99:::;;;:9 87654ihgggh4332234676543334456 +77655543456d555677887755445565442cbaabcd333fedccbce344332333dcd355jiggghhe^XXZ]^_`bcdeg56544gggfffg4455666543edf4hgfeccb..-, ---100//../000/.--..// +.+*+-/0245 620///00/00/-+))(('(*++***)((('&%$#"! ! !"#"#$%&'%" !""!!"#%&%$#! !"#$$%&()(&%$#"!  !"###"!"#$##$$$#$%'(*+ *)('&&&%$#! !"""###"!!"#%%&'(&%$##"###$%&&%%%$$#"##$S##"!! !"#"! !"###"!   !#$#"! !!! !#$&&'''(''&%%$$#$%''(*,/23332234310.,*(()('(*+++, +-.//125"! &$#$$$%&&'('&&%$#"!"!  !!! !"$##"!!!"#$%&''%#" !"#$$# !%(+,+*)&*+,+*+-...-*'&'(**))(()+,*'&'(()*++*('%$$$ $##$*+,-,+*+7,,-./.,+)('''())''&%$##$$%&''&%%$%%&%%%&(('%$#"! !"#$$#$%$#!"#$#$%$#"1#$%%&''&$##$$$$#"!!!#%&'((($""%-'&&'''%# !"  $&$"""$-,($! "###"#$%&'(='&&'&$" !"$%(%! !"$&'$##$$%$###$%&'%"!  "#%$$%& &%$##""!!" !!""#"!  "%),-+(&&&%%$$##! !"##$"!"$$$#"! !#$%%$! #'%" !#+'$ !$%$""#"! "#$%' & +  !!"""! !"# """$%%&')*('&%#"!""#$%'())(%,#&.6::9!"###$%%%$#$$###""!""#$%$#! / #'**)(&$#"""!! 78:;:;=!""#$$$#$$%%$#$%&'''&)'''&%&')(&$#%'(('&%$#"""!!  !#$#"! !%'(/)*+($"#'*)"!##" !#&&! $:" #$$#!   """$'&!!#$$#!  a  !#%%#"! !"" ")+*(#!"$'&!!! 7!"#$$#"!""#$$$%'((()**+-.*&##$&(*++,-.--,,,+*)(('&&&'&(*,./.-,--,+)(()+/2320/.///011139AGHEA?>==>@@?><%=@BCDDCCBBA@?=:757:>?<852223443100024689988543469<>ACCA><;;<=-<;:;<>?@ABBCCB@><<>@AAA?;842138<>>>?AA@AE%'(() +(&$$$##"EECEGGFCAACEEB@=:9;/+**)'&%$#  ! !#&%%&((&&'(''(,29;;95/**+-,*'%$%()(&(.36542/-..-*),046}8;<93/.00.,*+,,)%!!%)+,-//--./.,'$%*.13640--04675/("AA"$$"?;:857 &-10-*('(*./-*()+.0/,'"#&)+,/11/,)()+.011220,)'%##%*+&79")-/I.---*'$%'((())'&&&%##%)+,,+*(&%'*,,,+)'$#%'+-,)&$&*/1.)$"&,1220-+,.-+)'$!!$%&'(*/34/(# !&)**+,+'$&),.-+)')+*&#"#'**'# "#"""#$&*-.,)'())(''()*-10)$"! !!!<=!$#>986530-(#   #&8DGD!"CA>;=D&'&&''%"CEFECBB?;64469<93/0/./22-.8CC<740,,/.,+-0489547;?@?>?A@=<8.!;B'*.344431-+.38;;72J/..-*+05898520112335665442+# !$).353-&$'.49:;;:62/0343-&!"'*+-3;??=;:9973/- /11/,)(()+G*)&" !&,/.,+*+/478:<>=930134321/+*,044432/,+*(')***+,-..-*&"$'()+,./138 !! 1 631001/// +100/// +,+,---,,+++---.321/,))*+,,-./1000///.-.//.--..퀽ЀŀǀÀ 2½ņbÿýƄJ¾ʄLJWIDŽEԄV򁊓:!þ΀Ӿٿƪ绯ҭՁϹ ΄.ƽļǿ¶½º񁒤ųꁉؾǠҸΰ󃍕ʿɾAw-bbba`_/^^_``_adef467889987543445666544469::887778887889;8668:<;:99876665gfgh567876iggi566688877764gfg44567889::<==<:19nkihfedba^\YWVUVY\__][[[\[\]][XTSSTUVWXVRNKHEDFIJK)LNPRSSSPLJHHJMPTY\\YUQMKJKJGDCCA@>>?ACDEFGJMPQPONLJGEEEFEDEIPVYXW2VUSQNMLLKKJJKLMLJJKMMLKKKJJKLMMMNPRSSSQONMLKHEBDHJK0LNPQRSTTVWWURONNPRUWY[\]\YVSRRRQQPPONMKOSSTSRQPON.OQSSPMKHHHIKLLKLNPPPOMKIGGGHHHIIIGEEFJMPQQPNMKI"KNQTUTSTUWWVTTTSRRRQRRTW[]]^aegfc`^\[[[ZYXYZ[[ZZYYXWVVWVUUWZ^ci689:9889::998Y76456899876545565310001110/.../0124687531/,VX[ZTPOQRST+/222110^YURPPQRSSRRQPPOLKLOPPPONLJI!HHHIJKMPRRPNLLMNNKJLPQQRRPNLKKLMNONMNOQRTWYXVTRSUWX;YXVTPLKLLLMOPQRSTSRPONNOQQQPONNORROMLNPSVVTPMMPQQNNR,058864310121.+UW,-.---/23210/.XVX-./^] +^a1b`^]\\\]*[[\]]ZYZ[\\^`bba_][YVUTTSRRPNMMNOPPONMMMOOP)QRQNKHFEFJMPQQQONKKOX//[UPNORQKFGKNNNMOQTWxUQNPSSRSTUTUVUQMMRY036640,TROKHJPUY[./0//--,-.-,,---../13431.-,,-WTSSSRTXZZVSRQPNNPRTWZ[ZYWVTROOPSRMJJNQSTTRNKLRVWUTTUX-.d--YVTSQPPPQSW.376/SLIHHGFEEEFFGGILPV-./11/-UQQVZ[XSPQTTSPONKIIKORRNJIIJJKMPRTVY./000/...//.//0110/-+*.+WWW-/24433220/---..YUTTUUUTTSSTSRQPPONMLKKLMNMKJIHECDFKPTWZ^/-+*RNJJLNOMKMPU+,.000/.0221/,TQS,./.-XWUROLIFEGKNPRRRQOMKKLLJIIOW./.WTRPMLLOT-0234432342/,,-...-,,-03566653125899:;;;:99864211235542125765543321101234320ZWXZYWZ011000123321112232321/[UQORVYYYXUSRRPKGFJOPQUZ/1344434443211246777667864323445679;=?@BCA=:9::;;<<963357:<@BBA@@BB?<:753348;==>>=<=?@ABCDgFHIJJJHFDCCEFGFEFIMPOMKIIJJJIJLNQQONMMLKJKMNNPRTUVUUTTTSRPNJFEGIIHGFEEFGFDDFHJLMJ@eG6=N]gkpv>@BA@BFHIIIJSIHGFEEGHIIJLNMJE@=<<<>@AABCCAABEGGC>:756798ole_`h78pprstvx}BFIIHGGGEDDEFEFGHIHFDBBBA?yx=ADGIJIGEC@??AHNQQPQOJECEJOQPNMOTVRIB@CIJD;65679?FLONIA9445542/---[YUPOQSTTY_1/..0123322235652]QFGOVXWUTTRMGDDDEHKKKLMNLKNSTRLA4.07?GMRTVVVSNKJJKLMOtRVXWWVVWZ/000//.YUQOQV.///--\[VL@9=JQM@621,E1)+028#2ET^37:;:97aO:*?1(&*7I/9BKPRPNKJKMMLLMNMMMNOPPPRSUWWWX\bfhfcdhjifdc`\_e565dZNFGQ]efb\Z^12/WRU_354+566565ihih`VPPW`ff^SH@:;DS\adgihgfe`\Z^dmuz|D}~|wrnlkjifb_aeiklmnmmmlg`ZVVX\aeeb_]\[[ZYXVURQRSUWZ\\YYXZ[YWTUY`ehij4lnoqpnlllmorsttux{}~}ywy}~{wpkjmty|{vrqtzA@ ~}}~~}zwtrrqokijmprsrnkjjihj6542edc`]\[XSNKLOQRRSSSRQOKHHKLHB>=<;:995-(,7AHMNKGFIKMOPPPRRQONQVYYZ1BJQVY[\^adiljc\WWYXWY_flmiddjrxwm`YUSPMJJMPOIBCJRX[]``\YXWVVUSTWZ^chihlruupfZPKHEEFHIIJMPSPMMRY_`\WSRRSV]figb^]^`b_ULGEEIPUXVTRRUY^cefgfc^YUPLJIIIGBAGT^`_^][ZYXUSQPPNKHFB>ABBA@ABEIOY2651[WSOMKGGJB/7+@>cx~|xriclGKKIGB}wsnllovCwqoprw~Azriddc`dlmijs}p^SQU\acbeiicVMPV^bcgq{{nYF;pu@GOX][XUSTVXY[^cd`VKHQ_faXRPONOQUY\]\YVX^caYPKGEHOVZZXRLFEKPRRZgpkb^bmtqiu]PIOY`aiw|vpjfdeghdbhrqh]XTNFCDGILQRPMH@>FS[XQKKMNPU\__\ZXXYZZXSNKLMMOSWXXWTMGFJKKLOQQTX[^``]XSMB98=EMU\^^][XVVXZ[\])`en;>@A@>;87789878;==;8khhi5788998nkhecbabcdcbbch7:;<;;<=???><:97654hgfefg4442465543456520123567654445654433db`__`bcccbbbcb`ad34fdcdfgfecccddc`][Z[[[\]^_adfhgffeefg4556665543ffgg444hfecc-,+++,,--.//. +0/01 1000/./6432 11/-,*(''(+,,+*+,,+)'&'''()*)'$#  ! !)"""#$$%%&%$"  !$%(+,,*)'%$$$#!  !! !!!  #&'&$#""#"#"!! !"""##$%''((('&&%$"  !"#$%%%&''&$#"""$%')(&$##$*%%%$$&))*)(('&&%%%&'))'%"  "#"""#$$$#"!  ! !#%&'&$#"!"#%'(''()**)))('''(*-/112467520/./.--,,+*)))*+*!)))+,/15  "!'%#"""#$%%%$###" !"##$$#" !"#$%&''&$##$%%#"#$%%%&%$###$$$%$#"! "#$&())('&')*+*)(&#! !!!"#$%')('$#""#$###%%$#"#$&(('$##$$#! " +$%&%%)*++--++*+++**))**(()++,-.//..-,+)((''&%$%&&%$%& +'&$#!!#%#! "'*'$"#%%""$$###%'&#"#%&('%"!#&#"!#&((D%$###"$&''%$$$#!"#$%&'(('&&%$#"$$# "$%&&%"!"&(('&&&(&%$##"""#$&$ & #&$""%()'$#$&&&$#"  "$$"; !"#$%'%%&&%##$%%$%$#"! ! #')+,-9#!!""! "$#!"''&%#! !  !!&%#"!  !$"'%#$%" #%'(('%$$$#  """$' ' ! "$%%#"!  !#$$$#""#$%&'()***)))(''&$"!"#"!"##"""$%''% .'/468;  "$%%&%$##""!"###$%&&$"< !!! !#$$!651/0599:<=>?A#%''&%&&%%%&&&''((('%#" =<!#%&&$#! !%)*)('&#  #%'&$$&)*("!!"#"#"  "%$##"   !!""  ! !" 9"!   $&!##" ""#$%&%&(+--,++-/-++*d(&&),(" %+..+(&'&$%(*+--*%! #(+,)% ',/136887530027=<;;:8668:<=<:630/0246764210011000/.0233110110/.-/25788998899:@99:;<>>???ADEFFFDA?@BDGIJJGEDA>;:<@CEDA>>>@BD"!!! @???@ABCCCBA?=;:8778:;;:86431/.--,()(('&%$    &('&#!"$%&'(('&&(*,-,,+)%!!&+./001234541,)*+,*+.2675237=BA:1-+)'%$%')($ $)-.010-++*++*))*,.26679>BB?91*'$#$&(('')+,)'&).220,)()*,05874212352,&#""%)-.,*()*,.133320-+*(%$$$%#"+2310.-++*(&$$%$"!!#&()()*++**+,-,)'&'())*+++*+,-./0-'$(/10.---,*(&'))&"+* (/453,%!!#" =!%(''),.,+-..+'$" !$&&%$#" !#(-.+))+,,)&$##$%$#"&+-,-10)#! !##!! =::;;:<@B?<72/.-)###%:DDB@=:416B&(('%"?;86557930/0/28855;CJMI9>1(&*.2223563,&'+/235;BD=0&9>$(-3641.-.///14785/(%,6;82.-{.034430/15860+'$"$(,./.+'##'+,+1:@<4018=<70(#'/46;CLLIE@<98887426;:5/,*'" !$%(**(&""*/-'%%&(+.13332101232.*(())),/00/-)$#%''&')+-..-+(%  %'&&&(*+,- /26 !  311275320//01112210//10/../,,+*++,- ,-,+*+-..-../01110/..//.-+*)**+,-/010//....///0/..-耿π́ŁŁƀ /Ŀ.¾{ľDŽȀjքb퀉˄ʀ +#¿ÿҸ킍ǿоrل؀¼¾;Ͳ邓끍ǽز뀈ƽпºſƦȿӀǾĸU +]fedb`^#]\]_`aa`^_`ce4567765fc_ZXY]a23221245655567789:989986565 4gfg6:<=<;::9j888:<=<:8889:;:98onmjgda^]][YWUVWWWXZ\]^_][[]`a_\YXZ_cggbZTRRRQONMMKJJLNOPPQQPNMMOPONNNMLKKNQSTTTSRQQPNLIGFEDEEFGHGFEEFFDDFIKKJIGECCEFECBBCCDDEEEFFG HIKLMNNMKI*KLMOPRSTSSRRSTUUTSPJECCEGHIKLNPRTUVVWXY[[ZY[[ZWTQRQRSUTUTSTSRQPONPRSPNLKLMOQPNLJJIHHIHIIJKKLNNNLJIIIJKMORRRQPPRUWWVUT.VXZ\\\]]`cfjm76ifca_]\\]\ZYZ[]^^^]\\[\]^_aehl78:=?AA@?>=<<;;::;;;98_75566654333221112233444334567652/-,,..YTTX[[XWUSRT,/10/[YVSQPONNOQRRQQPPQQOMMNOPONKJIJLLKKKLMPQR QPNLLMORSR,PONMNOQTUUTSSSTSRQQPOQTWXWVUTQOPRUXYYXVTRPOPQPOPQSSSRPOLJIJLMNLJHIJJGFHKNQSUVVWY\/010.-./10//00///01101222100/.-!.\\\]/_^]\\]^^]]\[ZZ[[\\]][ZYXYVTUVVVXZ]_`aba`_^][XVUSRQPQ PPOONNNMLKNRTUTROJDBGQYZVRNJHGGFGMTWTPNNQT&WXXURPPOOQPNLMNPONNR-02320-+TQLGHPW-/0210.,WW+,-/_000/..-..-USSUVWZ..-VSQQPPNKJPX//VNIGINTWSJDEKRWXVUTRRUXYVRPPSWZ.0220.--WTRQNLMOPRV/22/XROMJHFFGDHIKNS-/00.--,+UTV,WTPOONKIHGGGHIJKKKJIHGFFGHJLMPT[1320/.///.,,-/0210/.-,+VVWW,-/123320-WWXXVUTTTSSSTUTTRQNLLLMNOQRSSRPMKJIHIKLOTY]0342/,UQNMNOPO +MKMRV++,.010//.-,,---,,,---,WUQMK NQTWWUQOMLJHILORTTSRQPPPRUX./135!420.-,-.//.../012223444334568875323356X5321//0232211222344432233344321110/011002455521012/\ZXTPNNQSTPKHJOTVUUVXZ[[./134554432234,55543223566543344458::889:;=>>=;;:99:;=>>=<;<;=>???><;;:99:;=>?@AABBCBCDFHIKKKIGDCDGJLKJIJLMMMLLLKJIHHILMN&MKJIIJLOQTWXWUTTUVUSPNKIHGGGFFEFGGFCA@?%=82VG=AThsw=@BA?>?ACEFGHJKLMNNLIGGFEFG?>=>@CCA><=?BEFEEFILKE>85j689rqrtttrqquy>ACDCBBCDEFGIJJIGFDBABCBABBBABDGHHHGD?:9-WTSU.132,KDFPX.-VQNPQPJB:2/./146740---./247:>BFJLNOPPMHDEILNNONMMQV[__`bcdfgiiihjlmmmp:< >@BBB@=:::96f136763013541/`244556r40YSOJGIPX^adc^YUSSVYWTRSW[bggc_`ekooorvxyxuqlhffilnmlmnmjgdbbbcb^WOKMQW]ced`[XVUTQONNPSWYYXXWWUUUSRNNOPUZ]``_^_acdofhgcaabdc`^_elrrpmkhedeimsy|}{zwqkimquwyz|IKF{xwusqruxzxvwyzyxvsqopqqpomkgefikkigdbaa`YPIKS\dikjhc_\[ZYWUSQP'QRQPOPPI;215:?EJMLIEA<769<;AFIHJMPW`hif_XUX_fijls{uof\Z`jqla[_ktsnha[VQKILSXYVPHCFMRSUZ`aZOGIR[^]\]\\^aa\XWXXWVTRQOLJJKNQTUVWYZ\]^^\WQKD<;BJRX^aa`_][XUVY\M^_^]^_bfkq::97iedfi68::986jgdccei6655ihggfdbaaabcdefedcbaacf69=<;;;:9876$5hecbabdfggecbcf4678986545689952a`00123345456655432cddb`__ace343dccdf3332ed+ca`abccb`^^][XWXZ]_`aabbcdddccbabc2345566554g..-,+,,-.-,+**+-0.+('(*,.--g8776421//.-+)(()(()*+,--,++-00.,**+.1441,)'''%$#"!  "#$%%%$#"#%&%$%%%$#"$&'((()((''%$""!!  !!!  [ !"#$$$"  !#$%&''))*)''(())*)'" !"#$%%&&&'()))(((''(((&$#"##$$$###$$%'''(()(''&%$$%&((&#!!!"#$$"!   !"""! !"#$&((('&&')++*)())*,-.---.0369631/.,++,++**+,-,,,-/01358 8 !#" %%$###"""$%&&%%$$%%$""#$%%$#!!"###""#$%'$&$#"#%&&&%%%#"""#$&()))(((''&%$"!"$&'&&%%')+,,*)'%#""##$$$##$%%%&%%#"!!"#$#"! !#$%'(((()++***+*))())**++*)((()('''()+-.0/.-+)(''&%&%$$#"J#$&'('&$ #()'%# "')'$##%&&%%&''%###"#$#" "##"!#"!!%&&\%##$%&''%%%$#!#)&!!%'$ %(('&%$%'))(&$$%'(%$##"!!!"#%'$#"! !$##$&$"""!  !  !!"$'$$$%%%&&%%$##$$%$#"! !""##$#" !"#%(*+$!  !"! !#%&%#! !#$%$"!   "#$$#"!"#%"(''&#!!#%&$!"$%$#$%'''  !"##" !#$#"!!"##""!  "#$#""!!"#$')**)(&&'(('&$#"!k"##"!)5;=!"!  !"##$&&&'''%$#""!!""!!"#%%%#!  !"!"#$###%'&#3989;<=<<<>A!#$$#$$%%$%&'((('&%#""###""#" #$$$#!!$&(''&%#'*,,(%$%%" $((%  ! !!  !!   !##!   ( !! 0"  + ! "%)+++,-../0111233223,(`'&$  $')**(&%$%(,,*(*,.37863359<==>ABCCB@=:778:;<<<=>=;96667751+((+/37:9730/..-+**,.022100/.-+***,/24432234566642357864359<<;98754579<@BCCBA>:89<>@BCCDFJ&'$B?=<;:9:<>@???ABA@?=<;;;:9986422321.,*('''$ %),./.+(&%#"   #%#! #&% !'**('),..,*('%$""$).3675201231.*(*.234577630123551,)(''&%%(++)&'*.10///.,*()*+,,..0221/,*)+/36640+**)%B?!$&(*++-0442/-,*)),020-+O,*'$##%')+-.//-+))+.11/,*(('&&'('%"$*/245530/-+(&%# #+0222111/,+--,)'3%##%()()+./...,*+-//.,*('(()(''&# ($&$'()**(%"! >958 %(('&(* +*)+++*)'%%%$J""##%)+*'&&(('$  !"""#%&'())'&%%&&$"! 999:=>>===:76652.+(&# " 7/>CC@90,2=#&'&%$#C?=;:87789::<>@ABDB><<>=:50-+,4=?7.*.37765651/131/28:84/,2=D>1'%$EE&,1441+'(+.0379861,+07:83/--./..---.011010.-,*'&&'&$##!  #&''(*,/48973.,.27:::51-*'$#%*--+'" "'+,-/21-'#&-35322212330..//.-,++*('&'()*+,[)&#  "%'()))((''(*+,---./136930//1310//034322210///00122100/.--.20/.-.//00.-&'-...,+,-.0.--.//.//0/.../00/.--+*)(()+,-. //..--,--.À쁘きɀˀ򁂀Ɓǀ ½)¾yüՀ¼F􃉌Ʉ/񀆈ſþCֹɓиېü¿ſʾ􆐗ɽ½Ļ񂐗ťƾƻľǴ½|Ʊ½û2#9665gdba`abdfgik6897ligeca_]\^a`__`b1234578998986567Z888777654568:=???>??@>=;:98768:;:99:<<<;:9986ifdba``__^^]\[[[\]^___^^_`abcehjlmljf`[XXXWUSR]PPQSSTUVXXURPONLLLMOPQRSTUVXZ\]]\ZWSPNNMMLKJIHHIJIIJKMPRQPNLIGGIKMMLJGDBBDEFEDCDGHHEA@ACEGIIIH2JMOOOMKIHHHIJKKLMORTVWVUTSQPPQSTWYYYXWVUTSSRSUUUTRQPPOLHEEJMOPONNOPjOQQQRSRPNKJJLORSRPOOOPPQRQPNNPQRRROLJIJKKLMNPPQOMKKLLLKIHGHJKJEADKQSTVVUTRRRTUVWWY\`ceedddegghij67888642b_^]\[ZYZ\^_`be468:<>@@@???@?>=<<;;<=>>>=;9877876-789875321.TMIJNU-.-VRSWZZXWSPR,./.XVTSSRQPOPPOBPPPOOOPQRQPNNOONMMMORTTSQOPRTUTSTVZ\^__^]\[ZYYWVUTTSSRRQPOOQRRSSRPN5LLNOQTUUSPOMLJIHGEDEGIKKJJJHFEGIJKKLKHGHJKLLKJJLNRW\0233321.VSU,.023443334443c22234555420.--/12210/..[[]/0110_^^^][ZZYYYZ[\\[ZXVUUUSSTUTTSSTUWXZ\\^___^\[[ZXWUTTSRRTUUUTQNMMMLKKJKLNQPNKIIMRTROMKGEFJOUVQIFFHLORRPPQQQNLKKMOONMNQSRNKJOX/00/.,+TQNLOU--.121/-XTQOPTVVVX-.0233223332001/-URSW/21.WTQPONOMKHIOX]YPIHQWTKB?AEKQVYZZ--/11-SJFHMQTX/110/.,TQQRQPNMMNRX.11/YURNIFFGHHHIJNV/2331.-+++VUTTTRPNLJGDEHKMMLKKLLIFEFGHIJJHHILOSY./000/,TRT+,-/1233310///-,TOKKOSVX--.0 /-,,,YXVUSRS RQOMMMNOPQQSUVTQNKIIIJKKLNPTWZ.///.-XWWUQMKLMMMOPPQQRT,/0/.-,,-/1344430-UQPRUVVV+,UQNLLNQRQPQSTSQPOOPPPOPQRQPONMORVX-.00112221/./01123443221/-,.02/344431011245666567876420.YWW,-/02332223456777643=210//01344323310133111/[XXYZVQMMS-011/..///---.012110001234556#764369;;<=<:6422112333579:;=>??>=>?@?=;:;::;=?ABA@@@BA@??ABBAAA@ACFHJMNMKHFDDEFGJLNONNNOONNNMLJIHHGGFFFGHIJMOONLJJLORTWXXURONNNMLKKLMOPQOJC>;:9998643\I?K_n;?BCDDEEE[FHJLNPQRTUSOLJIHIIJIIJIJLOOONLHC=9546:<=>>>===>?ABBBFKLJDA@@AB@??>:>HOPMIIMRTROLJHB;79=><:741/1331/,WZ021[SPRTH/5%/&:IOQQRRSRRRTTSQQSTUSRRUXXWV WWWVSPLHEC-BBDEGIKLLMOOPQPPTY[YXXXUQLKMPSUVURQPQSUWY-...-U./1231,MINZ1332211/..-,,YZ]]YTPNNLHD@=;;<=@BDFHLPTWZ[XQJGGIJKLNPRTUTTTWZ^bdccdfhihgfgh#iknptw=?BCDDEGGHJLNNLHFGJLMKE=633578:<<=?BEE@9gcdiou=>=>?CEGHIJJIHILNNONLLNOOOPV19==;=ENOJFDCBEKRX]_ZSMKJKMPPPRZfpuspmkgc_[WTUY]^_bdc`]\YTQQQONMLMMKKOUYYSMJMSWVUUX\]\YWXYXUQONPSUUTTUYajld\XXUK}nmwBGJLMOU]dghge_XSMGEKRVTRQPOOQTUTQPPRUX[\YURSYcnvyxri]SMJJJLNPSX[]_aba_][YWURNIDABBBA=96e_apI_lmhc_\YUUYZTMIJLMNOPRVWURSUTQONNNPV_giaTLKLNNOPQOKE@<::8lj;DJKKNPOKGDCDDCCDEFHJJJKLLKKNRSTWZ]^^[VOKIGEDDEFGHGGIMQROLKLKIFCA?ANY]`hkg`^ac__dkmkcZMDKX]SKILLKKON3KLW`]SMNW`defea]ZXXZ^`_]YRNLJHECCGNRPNS]jrrkb^_]UNIGHF@rqALRPF@BJR\eknoppnljgebabege^SLKR[bca_^\WQPRSRNJGGGC>@IVcjlfYJDHQY^^[^gnlgdeec^YTPLHGKPSVXXUTVXYZ[[YWRMIGHKOSUX\`ba^[WTRRUVVV-X[^`bccddeffeddba`adfhj578875gghi45jiihgffeeedcbcddde358:<==<4==;:987779::85fcbaaa``_^]]_cf578875445664^WW/2344333456544454+332effeca__`bdedcccdf3433hhgfddcddcbaa_^^_bc"a_\[ZYXYZ[[]_b23fdcbabcdeef456554565.-,,,-.00123531/-,+*)*+*))**! 5321110//..-,,+,,-.-..///0124566530-,,,+)'&%$# $%%&'''&$#$%&'())*+,,,+*(&$$#3"!!  "#$%$#" !#$$#"  !!  !"""!  "#$$$#"!!!"#$#&')***)(&#""#$%'((''&&%$%%$%&'&%$##""! !###"##$$%%%&&&'(((&%$$%'))(&'n%#"""#$$$#! !"#$$#! !""!  "#!#&'(**)'&'())***+-.010///0233450/..--,++***,./001"" ""! #$!###%&&&%$$$%$#""#%'('&&&'(('&%&(*+*)(''(('&&''((''&%%$<%$###$$##$%'()(&$#"!  !""!!!  !"""!! !"""!! !"$'$#$  (()+***)( )*++*)('(()')&&'()++,,-...-,,,+*)((('&&''('&$#"""!! !"_%&&%%$" !$%$##! #&'$ #$$##$$#" !"""!"#$$"!&"!!%&$"!"$&&&'Z$##&&%$#""! #),)#$(& !$'((($ "#$%$##$##""!!#&'&$" "&$#!"!!  !! ""! ! !"#% "!##!"$&'&&%$# "! !!"""#$%$#!  "$&'(&%%$" !"0#" !#$%%%$"!  !"! !"##"! !"! !"$$  + &%$'&&()'#!!$  !"$%%#!  !"$$#"#""!  !#$$$#""$%'()*)(&%$#%&((&#!"/7 "# $&'(())*+)'%#$%'(('&#  &!"!!#&'&# !! ;;>A!BAB"$$%%$##"""# %&&&%%$%&'%" T !#$&'('%#""!"$'+,*&###" !## !&&#! "%&%"  !"!  + !"!    E!!"""  "$%# !"###$&),.//./01221112 34579; "#~$%''%" !"#" .,-/263+$"#$#  "&+1576447<>>=?BDFFDB@>==>@AA@>=;9875421221/,*+.1221//.-,+*)('(*,./0001110i12578653/-,-./-**+,,,+*))+-038;;9878:;97665459=??<7459<>?ACCCDDB>:9875569<<:868;8554431.+)(('%$2&),-./111/-+(%" !#" f#%#!"#"$'+.230*%##$&'(').5:<:75420.,*((+/012331/.-)'''&%%&''&&(,/.*%#%),+**,/0/.,*('&(*,,+*+.5<<7100/)A64:!#%&&'+0588873/,'$#&+-,*)((()+,+)(')+.00.*'(,2:?A@<6.(%$%&(((),./0111/.-,*)'%")&(3%3=?<8520--00-(&'(:)*-.-,-/.+)'&&'+0571)$#%&&''('#-.!%%&'))&"!!!"!"##$%&''&&(***,/010/*&#"! #$%%$#%(*+(&=%#! ;< !"%),,)%$%'('$!878""9535:>>8/)(-486-'$$###" #'**'#.",588;?@9106;=?C$&&%#FDCBA?=93-,29>BDHIIHC<644320//-%'.138962134115:=<60'!&15/)()*)),,**052*&'-367885200#025642.*)))'%##'-0.+-27:951010,(%%&'('$7:$+.+$ !',27:<>??><;853236972+%%*155200.+((*++)&%&&$ &.7;;6-$!%+/21/16::643320-+(&%$&)*+,+)(()(()('&$"  !"#%(***)(&%&''(()+-/01210.-,-/001123332210/01/.-,,+++,-. &$%-. -,++,.///../00/0/)../12210/.,++*)())*+,./..-../0/..Ӂ́ՀǀׁÁ 0SAĄ_Q񀇍􀅆򂌓􀃂#؄K»ƾ¿ĺ³䀊;#ֹ=W󃈇ȿ~ƾŽ¼¾½¸ʹü!Ǿſ¿ƾȿ큏ĺ>h655443"fedcbbccdddfhjlmp9::pjgfghijigfecba`_a356665445789L::99887667888766688876545789<>ADEDCB@>>??><99:;;<;:9887lihik66jgggecba`abcccdecbbcd2S3466676ifeec_[WUTSSTVWVTRQQQOMMNQRTVVVX[]^\YWVX[^__^[WSQONLLKJIIJKNPRTUVWYZZZYVTQONLKIGEEEFFFEEEGHJIGEEDEEFFFEFGIJ%IIHHIKLMMNPQRRRSTVXZ\\[YXWVUTSQNKIJLOQP OONNNOONLKKKL +ONNNLLJJJKMOQ POOONLKKLMMNILKJJJKKLMNPPPQQSSSRRRSUWXWUTTVYZYVTSPNMNQUXZ\^^___`abbbd22468:=>@@?<964332,3456677789:;;<;;:98765556788776678::;:99899;<;:9876678762.UNJJLPUWVTUWY\/ ../010.ZWVUSRQPONOPRTUUSQPQTUTRQRSTTUUUTUVY[]`123321"/.YXXWWWVTRRSUVWXY[\[ZYYXVUUWXVRNKIHHGFEDEFFFGHIIIHGFFGIKLMPSW.0221/---,VTTTUY/23455432212333234531.XWY.0100//.[[./000//0`_^^]\[ZZ[\\[ZYYXWWVTRRS +TUVXXWVUTTUTSTUVURPMKIGFFFGHJKLKKLMNNOQRTTSRSQOMNQRSSQNLLNPSVXWVVXXVTSRSSRQPOOOPQQQRUXZ[ZXVSPOQTVVTSV-/0.,TRQRW//WNKP,/1355456543211/-VTX/00[U:OJGHMPPOLIIPZ]VONQRMFBCFGIMRX.010/0/-RKFEHLOS-2431.,VUTSPNMOOSY/0/\WRNLKJIHGFEEHOX.00/.XUSSRQQQRQNKIIIJMOPONNOOONMJHGHJKLLKJKMPSUXZ.///.-++,-./00/.,WSNJKMQTVXYZ-.012100/.ZXWWWVUSRQPOOONMMNOPQRTW-../.-UOJGGFFGGIKMNOQTVX[./011/YSNKJKMQRSRSSU,.//,PJIMQTX./1110/-,,--..-VQONOOPOMJ8KOT+,XXVTQPQRSSSRQQRUWWV+,,-.--..--,,./0123467752/./122101222346 7885200010/-"./012345567898765433322111221001232>00144210/.ZXXXVSQQS,024554432211123430,SQV/498510134578:;;<<==<;:999743468887666789:;<<;O=@BCDFHHGGFDCA?@BCCBCDDCBBCEGIIIHIJJJIHGHJNSUWWUSQONMLMNMLIEBBCDFHJLNNMKJKLMNPPONNOPPQRRSUVUQIB>;:86531-L<8E[8?CGJMMLKKMNNNMMMNPQQONMKIGGGIJKKLLLKJJLMKF>7444689:;?DFFFGHIHGEDC@==>?@?>=>||~?@@?{xutw|@@ABCCBCDEFGHHFEEEC@@@BDFILLJGECB@@AEILOPQPKE?:7668{?ELTWUPMMPV]ba][^fnsuurmgca^[[`eeegiga[VRNKJJKKJHEA@FQ[`\VSQRUZ]]\_ceea[VTUURONPRSSRPLIGIKMLKJJIC|xz?BC3EJS\_]YTNIFCA?@DLUYXTQQSW[]^]YRMLOQQNNU_gls{|obWPM[NRX\^^_`_]ZYWVUSPKHGGFDA>:poonq@JPQMIHKT]bd`WLFJRZ_`_`^YQJHIJKLKJHJS`e`TLIJKLLLKJHEA><:9;@FHIJJIIJLNPQOMKJIGB=:6fccegijjjiihfdcdgk66gb`acf456667766677887665$66776gda_^]]^^^]\]^`e554d1232ba11123543 +456776776543K4hgedcbbbdefedcddefh566jgedcbbba`]\[\^`aa`__adfea]ZYY[^`cccba`^]^`bdde3455678887660//.,//002345795211122200//.---,*)*B "##""!  543345323221001100//000110/.//>433320-*)'&&&'(''&%%$#""$&()*++,.//-+)((*+,,,*(%$$#"""! !"#$$%&(())('%$#"""###!   !!!   !"#%&'&&&'(()))'&&%$$#" !"$##"#"!"""#%%&&$$###$%%&'((('&%$"! !"!  !##$$%&')**)''(+,+*)('%$%')+-/0 @! "###$$##$%%%$#$&'))'&%&(((&%%&'()**+ '&''&%%')*+++,,,+++*))*++*'%#!  ! "#$&$# +%%$%('"+++***)(()**)))*)''&%%%&&&''()**))('''&&''&''&%$#"!  !"""!"#$#$#"!"$%%%#! "#%'(&&'((&%$##""#'$%&'&%%#" "$$""#$###&'""$-$#&(%" !##" $*+'""%&# #&)%  "#$#"!#''%#! #('%$#$#"  !##"""#"! !!""! "#%&'( %#  "$%&&''&&%%%$$##"! !!!"#%$ ,!""#$%&()'$! !"$$$###$! "$&$! !  #%$#"!!"#"""#$%%$ &%%%$#"#$!!!$  """!",!  "%'''&%$$##$$%%$" "$$$#"!""#$%&&%&'(()*$(%!- #%'(('&&'((('&&&'&%$"!!!"#$%&&&%$$%&%!"$%$(%$#"!   @AB!""!@>==?A"""###"#$#!d  !"$&('&#""! "$&''('$!&)'! !""$#  !!   +""! !! !  !  !#  "$%$#"! !"#&'()+,--../012221 +2234679;=>=> !!"##$$%&'(*,.-+)'')**)'%%&()'%$##""###"!6-%"$'%(,3:=<96667778AEJNPNIB<98754469<>>=:9:=?@@@AA@><:9876520/./.,*('&'()*-/4.,-./.+)%"  !#$$#  %%#" = #(./-(%%'*/22/.159;;:8520/.,,04556762-*(&$##%%%$#! #*251,)((+.11014653/+*++)'')*++*)&##%')(&&'&">;>!"##"!"%+1320,-)&$! "',//,*)*,.010-(%&())&&+28<@DGGB;2,'&),/0F/.,++*)(&$"""!22347 ',,*(&(-3785/'$&+133222/+'&&'''&$"#)152*#"#$$$# +!"$%$$$%%&())'&%$# 7#)*)&$$&')p+*'#!"#&))(&'('&%&'*-/0.*'%%&'&#98="%&'&%%&'&&'&" ><<!! =:78?H'J>3/1587304>FF?952-)'%$$%''&%$($')-13210137<<975423:CGC=@BDEECA??>=<;:;:98mhgghijlmmlkjihgffg32ca`12345677677667885d_YVT$RPMKKLMOQSUXZ]_`abcefc^ZYXXWWVTPNLJHGHHIJMQTTSRRSUWYZXVTRPOONNMMLJIHIJJKKLLKJKMOOMLKKKJIHGHIIJKKLNPQQQPQRRQPRTTRPOOPRUWXWUSSUTQONOOONNMMMN+LKJKLNNMKJJJMMJIHJKLLLMNOOONNOPQPONNMLKKKLMN MKIGFFILNPQTWY\^_` __^]\[[[ZYYZ\_abaaa111a```a234567 64323445567898875455443346876789 +:<<=>>==<=<==<:9887421/-+TRmSTRNKLPTUX-..--/120/..\[YWVUTSRQPPPQSUTSSTUWYZYXWXZZYXWWUSQRSTVY^1331_]\\]^^]]..YXWWY--..///02445heb^]]]\[WROMLLKJI;HFEEDDEHKMLIHGGFFEEEFHIJKLMNQVZ...-,TNJIMRVY.134677653200012333222110///.ZUSUY[[Z[...[ZZ[]/%0110_^\[ZZYXWWXXYZ\\ZXWUSRRSTTUUTUVVUS TUVVUTSRRQIRRSSROMLKHFDCDHMPRQONNPQRSTVXXWXWSONPRRRTVXYWUUVWWVW--VQOPRTTSRQPPQRRSSTVWXYXWUU,16740-UQS,13/QHHP.232100111000122.TSW..ZUOIEFJPTWWSNJKPTTQPQQPNMLKJILOSWYZYWVWVQKHGGFKV14321/.,VTRPONMLLKKLNSVXXZ[ZUQNLIFEEF^KRWYZ[]][YWVTQNOPQPQRSRPNMNNOQSTSPLIGEDDDEGIKLOQRRSTWZ/00.-,,WWWVUT+-011//.-,VTRQRSUVWXYZ--.../i..-,XWWWVVUUSPMKJLPU-//.-,++,,XUPKFCCCDFILLLKKLQW`2101441UICEMUZ]/-XVVVUQNLMNOPQSUV,-1453-QOQ+-/0/-,++VTRPRU,-,VTTSRQPRUWV+,,-.0221/-,,,---,,,-0356543334443223443334321122100123433234565422234)30/01221110/./100022211231/-,.0233567776432/XUY0442^ZWVX.258:::9988789:V;;<<:9899:::976543345789:;=AEHKLJGFEC?;:=BDB@@BEGHHIIGFFFHJMPQPLHDCEINRVXXWTQNMNOOONLIHGHILMN4OONMLKJIHGEEFGHJKMOPQQOMLKHEA?=;:83YORd:?ADGIKLKJKKKJKMNNNMNMKGDBAABDGIIHFEEEGGGEA;63deeeca_]^cm<@BDEFGIHF@<::;===?ADDCBBCEGJMNMJFA=;;>DJOQNHDBBCEHJKNRUUOG>8446:@FJKLMPQPLHILQUSMD<7444545542212467764443/WSUWWSPOQW/0ZQMNKB=BJRWWWX-.\ZXVTSTSRRSUWVVY]`aca]XUTTTSSRNG>9;CHLORSQMB87?JSY.\YWWYY +URPQSUWXXXWmVTRNIDEKSZ...---,XX-0221.WTSROJFCA@@BDEEDCDFHJJLPUWXWURMJKPVYZZZ[[\]^`cgihggilnlgdcegjmopppqqrrqppopqsvx{|}??@ACFHJLLLKLMOPPOOPQQPPQRSTTSRRQNJFDCDFFDA??BEFGGGEAxpiaYWWXZ[]_bfhkotxxuqnkihfc`^^]\]`ehd_YTPMJHGFEDB?=<=>@CGLPQSSSROLKKNRYcnspkebab`]ZVSPNPV]`a``begggiif_YW[cijgcafpx{xsqmifdceglr{OJujdbfjkjjlmmlihiklkga]_ejnpsvxxwvvvutsojfddda^\\]^^\Z[_cfgijifc_\YXVTQRRQPPQU\dlq:utqojd^XTQPPPONOPRRPKIJKKIHHIIJKLKKKMNNOW6EOQQRSRMFCFIIFDHOVY\_achidYRT[ckszzsg^\^dkmia\\\[XSNKHDABHMQROKLQVXWWX[[ZZ[\\]_bddb_\[\]WNHGJNNMLJFCBDGIJJJIGC~{|@CFFEGLRXZWOGCA?{{{xw?HU_ba_]]^_``^WOKNTYZZ`lw}}uk`WUWXTPNPRSRSTWYYYXUQNMJHGHGDA><;le:JY]\UKD@BEJOUZ[YVSRPPON(PTVUSQONONKGEEHKLKMPRQPRV\03332100/^\ZYYZJYXWWYZ\^___^]]\]_bfhihgi69;=>=;7idbacfik66kjheccdgjkjhecbcegh4567776567887653hfda_^]^```_^]]_cedaa342^[/2344311234443223578765556543322355433455543edccdcba`behihgghihfb_^]\[ZZZ[^bdc`_a244e`^\[[[]]^`be334678899;;;:86001123667897531110.--/121-)&$%'*,,, !"##" 5211123456665431000.,+1.*(&%%#"!!!"$&(*+-./0012341-+*)((('%#"!   !#$$#""#$&'(('&$##""! !!!""##"!"#%$#"!!"!  !!""#$&(&%&'&$"!!"#$%&&%%%$##$$#"#"!%  !"""!!!"##"! !"###$%%&%$$$%&%$$$#"#"! !#$%%%&(*+-.000//000/.-.0110//0/../  +  %&&%$$%K&''&&&'()+,++*+,,+*)(('&&&()*,)((()))((&%#$$541///.-,*'%%$#"!""! !"!   !#%'#  "#$&#"$&'''()('(( ++***))(' (())('&&%%%&&'P(()(''(''((''&&&%%$%%%&&&%$#"! "$%%#""#$$$%%&&&''$""$%%$%&(('%%&&&%&'$""$%$$#$%$$$%&''&&&'&%#"#"#"#D$#&'%" $'('$! #%$""##"!!! !#%'(('%%&%#!%$$#"!#  !#%&&'('%#"! $'()***)('&&$#$$%%#"!"""#$%$#! !#$%'&'(%%%$#"%$###$%%&&&'&&%r$#! !$%$" !!! !$)-&#(+,'%$%%#! !""$%&&"!##"  "$$"""!!!"$%$  !!(&%%& K !!!  !!""! !"$&'&# #&())(&%$#$%&&%$#"!!! "#$##"""!#"#$%&''(('%$#"!&!%0 !#$&''&%%$$#$%&&%%$$#  "#$$#" !""!0012210/03: "##$$$%$#;=? "##"""!<;< !"##"!!!"#%&&%$"#'*+)%"!"#$&''(*+*&  ###%&'%!"%'&!7 " !# !    "#$%$#! !& "#! ""!  ""###"! + !P  "###"! #%&&&''()*+-/1100135521113467889::;<=>>?@!!!"!!"#%&')*+*+++***++**))('$"! !!"" .:9741/01112358;=?ACDCA>;:8765321124798630-+((' &$"!""#$&*,.w-,+*+,.16:6445541/,+)*-13432367889:952/037985349>A?<:9865579<;;;:86310//-+**+*+.02$0-*'%#""   #(-366520-)&" "$%'))'#"#%%#"$),./135895.)*.27? #$#"#&*./,'!::;::%-3431/./001/+&$&+/00470+)*+)'&'()))*,--,+)&%$"!!"" 549 ! "%&%#!#'.58;<91+,.-*)*,-,*'&'()(d% !'./+'%$#""##"  ""! !!""! !!"$$##&+/.*&#!99 %((%  '-.+)+-.-+('%$$%$%%&&&'&%&(,.-*'%%&'('&#! ?@"%'&%$#"CB!""!?836?GF?87>AH&KFB>=<;71,,/00/0 "-685334432465210027=ACDDE$#A7//3:@FJJIIHC<:B)/,MD@?>?AA>82-)&$&*.35430,'&')*)),.021//257740-,.00/-+,./024422697.&$%*1432247861-,-,)')068:;9510/./02+ +!. %%$$&).230..,+,/,%"&-1/.144/*'&&&'(**'"73'031+% "%(+..,*)('()*,--,+*(('$!!" +##" !#U''&'())***))**,-..//.--,,-/1332221/./013465421113565420../0110/.,+,,--,,*))*,,+*)%$ .---./0/.../0 12320.---.---,,,./0.,,./,**+,+**+,-Ɓ߁怂Ӏ܁ҀҀԁ뀄 "&F݄߀þA+'򁈍JnÿƄ<¿쁉}¿Iһzºÿù샗ʹǻȹĺļˀĶʸ֨½ľKV􁆇օ݄$876667888776655567888qponnnp999876ifcdg56ifdb`_^^`abc2344554c56778899:;;:9766556544579:;<==>@BEFFEDBBA?=;;:::999888764fdcdg5666llkkjhge3321`][[\]//01246777655545B43b\XVUUTTTUUVX\_`bcdfhhhij5hb\ZXVRPOOONMLKJHHHIJLNOPRTTTSQNMNPRRQONMLKKJIIHGGHJKLNPQQOMLLLKJH0IIJKLMNOQQRTTTSRSSRRQRSTTTSSSUVUSRSTTRPNMNOPPQQPN>OQSUUTSRPNNNOONOMNONMKKLNOPPONMLLLMNNOQRTTRPONNMKHGILNPPNMKKJJK>?@BDEFGGGFFEEHKLKHGHJKLOTWYZYYYXWVVXY-/01121 2344555443200/1][[[ZYYXXXYZ\]^]\\^/00///00/]\[YWUTTTUVWXXY[\\\YWUVUVUTSSRRRSRQPPPQRSSSQPNNOQQPOPQR*STVZ[YWWVTQQRQPPQQRRPNMNRX..-VQONOOOPPQRSSRiQQSUVWVTTVY..-XTQS-010/-+SRSW-YUQRW./0001233210//0/XQNPRUXZYXVTRQRTSOJGJQWZ--ZXTPLIIIJLOSUVVUSU-.VLECGOW/1121/-,URMJJNRRPOPTWYYZ]0]WRNKIJNTZ]ZSOPTVWWVSPOPPPQ"PNKIJKLOPQQOMKIGFEFHKMKHEDGILOQTVX,"---,,.2430-*QOOPQRRSTTUVWX---.../01[/.,+VVX,--YURONPS,./-+*+,-.-YTOMLKIFDCEGIJJHGHLRXZZ[02320WMFDGKOQRRTVWTRPPOPRUXYXWVVV+-/0//.F--./000/-,++UTTUTSU,--UPOS,..-,,-/121110/-,+,./..-...//002244543210245655431/-,,-./00///12456556766654344554321245666543224442/../03887764334578999877766556766543249>??=<<;9643344679;<<;:975323433323455679<>?>=:8789::85239@EIIIGEB@@BDEEED/FHIJIHHJKLMNOOMLJHGGILNOPPONMMLMNNMNOONLKJJJKMNO*NLKJHGECCCBA@@@?>;88;==<;<=?ACDA=:99??@@ABBA@@@BCCDCBAAA>xvv=?ACCCEGJNQQOLJGDA?==AFKOQRPOLIH!IKMJC=:754359>CGKNPPPNKJMQSPIB;6321/,+-/1233223443444320/.--/00//..[[.01/./11/ZWVVX]`b`^\\ZTLKR/3420`^]\\[XUTRPONLHEHMQTTROKIJMRX\]]\\ZYVRLFDFJMORVZ]]ZUPMORUWY[\.#..-,WUSRRQPPQRQNJFDDEGHIJLMOONMMOSWZFXQMLOTXYXVUXZ[\]_cghhgffgikifdfknpqtvwwwxxwvvvwy{|~@@??>@BCCCDDEFGGFEDCD*EEFFFGGHHHFDCCCB~zxyxvwywoaTMJIHJLORTUXZ\\ZWSQQRSRQQU[aba^]]\XUSRPOMKJHGEEFIKMMPTXYXTQPQUXZZZ_gnqpke_]\[[\^__[WUV[afhknswwrmhedcdjry{xurqrsuvwxvpic]ZZ`fmsyzvmecehmpok"hgfc`]XX^gljfglsyzxwxywuronmlkigghi=korsux{}}>>xrnkgdb_\[\`dgkpt:<>@CEDA>xrlgfgfaZUTTUVTQNORUVUSQRSTV/9GOQTY\\XRORWZ[YSMMU^deaYOHJR\dghfdcb^[[^`^ZWXZ]`bb]VPMLNQTWXXWVWXY[]afgc^ZXURRV\`bca^YWXZXRNPW\]ZWTPOOPOPQSRNHA|}AEIKLMQW\\W@NE??DJJD;ij=JV^adgmrux}~s`RORTVWZ^djpuwumcZUTVURPPRQPNPSVXXXWSNKLAJGDB@=:lm>>?@@@?@@ABBC""!"$%&&&%%$$##$###$$%$#"!!! @@ABBA?=>===?@;4,'%%%')+-./134541.,,-..,,.268765441/.--,+*)('&&&(*++,.132/-+,.122248<>>;72110013431.,-058:;;=@A?;864336:>@?><::<=>>??<841//26:=AB@:52369<<:86642/,+-376335:?@R?=;9876532112223332235799;===62.+)(&$#"#%(+/36!"! :61-,--*&"! >#%'+./-)'*-00.)%&+1553.(#$)04554310.--/0/-**+.022/+(&%&(*,+,--./25740-,+)(*.12320-,,-,(&',00.,)'&&''')**(%!>>!$&&&'(,00-'!!&&#22%-13469<>AEG?2)'*-./036:<>?=71,((**)()**(''),-..-)&$#$C$%$" 23!$&&%" "'/43/+*+-/242/--./.,)'(())('&'*-/.,*'%##$$#! !#%'&%##%($$#""%*/1/*'&$" #%$ (13-'$&)+,-,+)()('%&())(()***++)('%###$#"!! >=== "$%$FFFGIL''&%C;89:9659BK''IDA@BDFFB=;=>=;;==83121+$#6?;65443455321027>GMLGDEFC:58=?=<:988??@@@?>=<:97654456 5432ccd3gfgi5<443221`^]]\ZYYZ\/012212334567887642`^\\]^^_aaa_^aehgd_\[\^c35"2_YUSPONMNNMLMNPOMLLNPPPNMLLKKKLMMNOONLJIJJLMLLKJIHHIJKLNPRTVXZZYXWVUTQMKJKMPRRRPNLKIJKMNO NNMLLKKIGFFHJKKJIJKKMK!LMMMNPONNNOQQOMLKJJIJKKLLLMNOONMKJFHGGGHJKNRTUUTSSUVWXXXYZ[^a2456542100///.YXY\/0112345676643332112233221010'12358;=?><84210/.+QH@:8=EIHHM,230-,.2332Y1/.,TRRSSRPPRROKJMTZ.0221.,-/2221113442/[XVUSQPPONMLNOPPQRTWY[\ZYXYZZYXVVVWXXWVVVWXYYYXWUS5TUX[ZYXZ\///]][WNFEKQPNLKIHILPRQNJDACFGFDA@??ACEEEFGHIJNRTROLKKLNPRSTUX.122110123311121101235565542/-WTRQRTWYXWVUTTTUUVWZ\]]_```0123331/]\\ZXVTSTUVXYZ\]__]ZXWVVVXZYYXWVUTSSTSQOMLLNPQR!SRQQRRQPOMLNQSSRQPPRVXVROQTVVTQOOPQR>V,-XUTSQPPPQTXYVRNNOPOOPSVZ..-WVX-.-,,,-./110-,VVW-//.-,-./0012 +10//.WTTXZ\GZWQMKKLLLNPRVZ/00.XSLDAACGJNQSTVX.01-L@;AM-22/--./000/.WRMLNQRQPOPRWZ\[YWTRRTUUTQMIGGJMOQUXYXWVTQNM/NNNMMMNOOLJJMONLIIKOPLGCBCFIKMOPQSTUX-///..---./.,+++VTPMKKMPSVX-..//01*/-+**+,---,WSQPNMLLNPRU,-,WVTSTY.ZUOGA@DEFGYHKQW[/0/.-VQOOMJHGEFIOTVVTRRSRTY-ZWUTTV-0220.,UTUWYWTSU,.02441.+**SRQQPPR,/0.+PPR+-.-VTV,-.012#1/---/10/./01124577888775420.-,--.-.0356899887643332212334,321122345531/../00259<;964469=@BCCBA?;8667776)566532257:=><:9:;<<==?@@???>;87678997533343236:<<:88:;97657:==<:99;=??=98:=@CDDCCBBA@@BEGHHFEEFGGGIMPPONLJIGGIKNPPPONMMLKLOPPONMLIHIKLMOQRTTRONMLKJHFDB@?=;7gbchmonnno9=CGF@:89:=@CEEEDDFGHJKLMNPSTUVUSPMJHEB@?>>@CEGGHHHGGGFC@>==ELPPJD?<;:99<@CFGIHFBAACDEDC@;767776,9>DGHGE@<=AIPRNG?953212354321/.XVX-0257776542b33310025531.YVTUX./0//`de11352/XWXWUQOPSUTQPSWYWSRQQRSSRNJHLQOJEFMQRNJGGNU\e7@CGJNPQTY^_\ZZYWURPNMLLMOPPO +NNMLLLMLHEDB~}~@BA~xsprzLRTRMIzsooqttvxxohm{}wrnoswz|@BCCuh_]]XQMJIMVajlhcdkw~qbWTaqwx|}zvqnnoppqsttsuvtqopsy{uoeXNIC@AFLRWWQNPV[][XX]bca`_`elpqqrqolf_ZYYWTRRUXWRMLQZ]\_ehe_XTUXZ[ZULHJQSLAADIPSNE??AFJMNONNNMLMPSUVY_ba]YURPNKIKQX./0"12468:;95c^XPIGKRY_cegijjifdb`_^^^]^_acd3ccbbba^]\^`ceg469=@B@=:76556776hedfj8;<;:98778898865Hhd`]^``__acdddcbab2467664322345530^]^03444566655678766677899:9853d344433455ihfdcdcbabcdca`^[ZYZ'YYXYZ[[[ZYYZ\_adfh44fda_]]^_acded12234456775423541.-.//00/..-,*+++,-...-,+*))*+,--.1233+*))('&%&'#*)))+-../0/--./00-*(()*, +(%$""!"# $$$"!!"###! !!"#"#"! !( !!""#""!!"!! !""#$%'(*+,,,+**)(&$"! "! !"*!!!  !!!"! !""!"""#$%%%&%$###$$$"! !!!""#$$%$#"! ! ' !#%&&%$$%'()((()*+-(((*S!###$#""###$$%%&'(('&&'((''&%$%&4%$$###$%&%$##$$$$# ##"!! !#%''%#   "$''&#!  !#$%%$% %##""#%&&%$%%%&'()**++**'''&&%$$$%&''()*++)(&%&'())*))(''&%#"""#$(%&''&&%%%$#""#%&&&$##$&'&#!"$%%$#""##"##$&'%$$#%()(%##$%$##$&'%$% ##$%#$&()(&$! !(""$%'(%! !"##%' "b&#!!"#$$#"#%()*)(())'&$$%&'&$" !#$')**))'%$"""##$$##"###" !#$$"! "$$"!""##$%%&%$"  !#$%$#!!  !!#$$###&&$ !$')&#""! "%&%#""#$&()'%$$%$##$%$""#$#""!!!  $#$  +'&$p  !#%%%$#! !"$%&%$$#$##$%&&&%%#!!!""#$%&''&%%%&%%$#! 1./3676678"%$!!"##"!!""#$$%%&'()*++*('%#! "! !!!1,)+1%*--*'%#"""$$#  !!"###$%%#!<9644469#')(%!!#$%&%#! !!! 5 !"! !%&##"  (*+2  !   #'- ! 6201 #""##"""!!  !$$# "%''%&'*,.//011244578:;;;:;;<=>?@@AABCD"""!"#$%&&''&%$##$$%&''&%$EA???ACDDB?===<;:98862/+)*-04895/+*++,,---,,+*(&%%'*.00.*&%(*-./011000124788665432220-+*+-/148ADFGGFC@<97668:<<82,+-/1320//00/./1233210.-/27988:>@ABDDC@>=;975458:;:988767899889<>@B!""! =731221/-%/12223469<>?=9669:8421/-,+*(&#! %'),020*')-2674.(&'+022-*/;4.+*+,+'""(/110.+*,033/+'$"#&&#!#&*/0-)%$##%'''%$#$&''*-00/,**(%#"""!!#$&(()-120/..-+)'&%%%&()('&&%&'&#!!!""!A@>> ! ?=;;<@I*//-*'IC>:98:;;<=>947@FEDDB=74469:<!! ACC@91+)(%"!'/575226ABDIMLIFEC@=<=>==>>=<<<;9779=CJLIIMRRNIB?=81*'$#$&*-00,)*.132002675e8<>>==<;950-..-,++-/.+('*02136751,**-/0/,'%',.)!",24651*&%&())((#-!"! "&)*+/341/./0.*('&#""%''%$Y#9<#'((('$  !#&*,(# "%&'('''&&'),---/0/.+*('&$"!#$*($ #(+-./01110//./011210.--./0120/02 +1.+*+,,+++-,+**&&&-110/..-,-.//00110/-,+*++,,,+*)((()+,.020.,*)))*+,---Ѐ䀂׀Łȁ׀́ qτoľʅʄ-( ξ@x񀄂) ¿3¾Ŀť»žKFǿ󃎐耀¾ľƯǹŶjC66789889:;;;<<;;:99::9878877lkk6765gcbcdefec`^_c45654edccca_\ZYYZ[\[\\^_`bbce34566543221234579:<===<<<:98776655432 3456655443 eddef3332c`^\A[\]^^]\\\ZWUX.011100//_]]]_acedb`^]^`bba^[WSQRVY[]_01233c_[XVUSQON OQSUVVUSRQQPOPOMKJIIHHGGGFFFGHJKLMMLLNOQRRSTTTUUUTRNKIIJKMNONOPPPONNMLKJKKKLMNNLJHF EEEFGGIIKMLMLKLNPONNMMLKJKMNOOOPQQRSTVWXXY"XWWVVUTTTUVY\_1234432110/..YXXY--./023234679:;<;;:8765544556678998779; 986655544347:=>=;::984112320.-WRMJIKNSWZ[ZYVUX.0123310/\[\010]WRPONNMLMNOPRTUWXXXWWWXYZYYYZo[[ZYYWUTSTUVWZ\]]\\[YWTSSUWWSPONLJLQSOF@ACEEFFEC@>@EILNPUZ/1343210121/ZWVUUUTRQPNMMMOQU-/1220.--./02445677655567$6531/-WTSUWXWWXYXXYZYXXWVUTTTVZ_c4554%33210013431/-YWVWWWXYZZZ[[[YXXWWWXYYYX!YXWVVWXWUTSSSROMKKNRUVVUTTUWWVSQPQUPOPQSTRPS-/.WQMKMPSVXZ[ZVQPQTTSQPPQRSUVUROLLNQSVWYZ../01223343210//...---./0/.,WV,/123N223552/[ZZZXWVUTRRTVURPOONLLLMNPRVZ[ZWRLGEDDEGKU^0[URT+,TNM+142-RNQTUUTSSRQPPOPFOOPRUWWUTUVXYYZ[ZXVTPLJJJKKLOSWYZ[[ZVNHFHKMMKKKJKNPQPPQRRPMKKLMLIGFGJLM&NOOQU,.000.XUSSS*-./.-+T*+USQQRSTVX-./0/0X/.-,,+++,,--,VSPMKJJMPRRRQQPMG@?HX11[SMJHGFFEDDEHLQY..YVTTUW--.-WQLGDCEJNQTVWWVTSTVWVVUU+`,./00.,SPNNOSW-/1442/...-++*S*+-/010.,VVVUVVUTT*,/3699741-++.232/--./0245556655565310//0221/..012345676311244433444310/012332110.--./046766678;?BB?=<:98789:99887655543123676557:<<=>@AA@?>>><95335641^/259;<<;:889::99876544569;<=;:; ?ABB?;8559=?A BBAACEHJKKJIJKMPRSSQNJGFGIMQSSQPNMLLNPRQP OONNNMNOPRDPNMKJGC>8gdfjmnnnop:>A@:g`afo<@BBA@?@BDEEEFHJKMORTUUUTTSSRPMJFDBABCDEGIHHGECA?>==;8jil8;@DFFGHIJKKJGDCCEFILMLKIFCABEHIGA9d^_dhiil:BHLLIEA@@CEFHJLKHECCCA=9877543357875335:@EJNOMIDCEKPOI?86530.-.00.-./A/..--...Y,-.//13677630.--,UPJFIS/232110/ZTOPRRQQSUVVUUUTSSUWYZ[ZYZ--../.,+UTRQQSSSUWXZ_flr;<=?CEFFGIKKJHFD@;5200/S..//0121/-XUTSSRQQQRRSTUVWX-./01233431]UNIHJMQUXXVVWY[]_acdccba`_^_`cdfghhgghjloqsuvwxz~CEGHGGHIJJJIHGEDCBBBCkzxxz{{zzywqh^WTTWZ\]ZTNLMPRV[^^\XSOLLNRUUPKGECEGIIIGFEEGKNQRSUVXZ]_^\Z\`bb`^]\YTQQQSUUTSSUWY[[]`eeddcdcb^]_abdeefgjmnmkgdbbaa``a`]\\^__^]^]\]^__^\ZYYXXXYZZ\`ejmnooponmnooonljjjlnnmkkmpqppprw{~{slhhigecdgeWD8>Sgnnlkmnnnopqpnnrtsniffhiiigd_\[\]\[Z---,VSQRVY--,XWVZ4CT_`\Z[`dddehkmmke`\[\_bdfhmoliea[USSTWYWRMNTY[XTNLOT[adc]XWVVX[aehfc`^^_adhlmkgedccb`]\^bdb]XW[v`b`ZQHCEJPUVUQKD?@DGILOOLJLOQPMLMPQMHFGJLQ[kx{skgda]XTQNLIHKQX^`^[Y[\\[[YURQQQRQPMLPUWY\_^[WTQPPNJEA>:8;CLPOLHFGJMPSTUVVTPKHHKOQQOOSZ`cfkmg_YXWVURPNMMMLJGFGHIIHFEDCDHLMKIIKOPNMRY[XRONMJEB@@AACEHMSXZZYXZZYURRUWYXUQNLMMLLORSSTXZXQJFGIJIGEB@wi]c|KOONNMKGC}}zvvxvsqswxvoe\\frwqklpu{DKLEvms~umfga]]]\Z]bec`^\]euBGHFtgbfntwzzxspopnhefjnrtspomlkhdcfmswy}KLwl\NIJJEBDJOU\_][[\\ZXWY^bdb__aglomjks{{tg]XYZYTQQSTRMMT]_^]]^_^]\[[]_^XQPWaaYQQVZYWXYWRPPOJDBABCB?;;@FKJFCCFKLJLOPMIMW`aXOJGGKPRPNNNL9JHEA=::@@><97655665hfdcegi567%6555444hi55jgcbdeecaabba`^^_a233456543)221222344556665568::97655578865457898754343fedddeggfedccdddeeddcb`][ZY'XXYZ\^_][XWVVWWY]bgj6553c`][[\]^_abd3345 5550.--.00/.,**-/.- +*))*+,,++*) *+,,,- /-+)*)(''&%#"$+)))+-/0110/-+*+,,+*(&#"#%'()+,*('''&%$#$%&'&&%$#$%$##"!!  !"#"""#$%&' &%"! !!"""!"##"! !!""!!!"##$###$%$$$#""!"#$$#"!!"#$%&&')))***))('''&&%%%'()+,'&&'   +!""!   !!"#! !"###$$%%&'''&%%&'('''&&&%$#""#$$%'(-''&$#""#$$"!!! !$&$  "#""$&'%%%&%%#""! !!"#%%$$%'''&&'&&'&%(&(+.%$%%&&''((())('&'( ''(((''(())'& %$#""#%&'&'&%$%6$$$%$"!"$! !"$%')))&##$%&%$###$%'''%"! !#%&&&' $#G&'(('&%%$$$%&&$#"""!!!""#$&')(&# !&*(%#$# ! "$%$$# %&''%%%'()('&#!"%'))+,+)$  #$#"! !#%/&'&%#!!"#"  """!!"""#$&$####$"#$%%#!  "##""!! %'# +!$((&%$%&%" !#%'''&%$$%&&%%%$"!!"$&."#$$$%%$$$  +)  !"""!"#$&'&&$" "$'('&%%$##$&''&5%%$$$%&''((()))(''&%#!2136888777! 1./28!""!  !"#$%&'())**)))(('%"  !"##"! 335"$%j&'''&$"!"#$&()('&$" !#$%#-)*.1224"&((&#! "$%&'''%#! !#%%$!"%$   ! ) !!! !!  !"#%).38!" $%$#"   ' !!""%" #%''%%&'()+-/0/1245677789;<=>?@?@BDG$%&'R&%%&&&%$###G#$$$#FCA?@@AAA@@?<83/../1231,(&'*,/35653/,**+/230,)'MLLLM'(*+**)('')+-/201220//24432210.,++,..-,,-.010126776665444555642356 776789::9643%45554323444332123321/...--,-./03579:9:99:;;;987789:9889:;:989?BEGFEFDA>>?><:;=><71++2:=:5579="()$;5:BEEFFB;611.---+*,021/-,,1;"%&$C:204:>ADDB?>??=978;=@A@><:9874359=@ADGO,-SIA;1)&()&#$'),020/012200259:86558<=;9:>CC>6/,,.-+**,,+((,242111221000343.))-45/('+k--,-.-)()(&#!!""!"$$!!$%$&()&$'/55/)&##%)*)(''%%$" !#%'&" "$%$"  !""! !#%''((()***+++)'%$#""#'$! !%),-.+((*+-./00//012344332211123210/012111/-,-..-,,--,+*))* 0/./0/.-,+,-,+*)*,.13.+*((())*+,-ƀၐဌ̀ဆ΁؀ց +PWЈ>ք׀½x􁇊;ļ5ÿք؀󁌕 +44򀈏Ŀ􂊍󄌍ſ'̺¼eļuͰúǼ􄍒úǿǿƽľžžϾ˿򂍖Pa=65679:;?@?>;96321248=@@?>>?@ABBBAA?<<=?@!AAABDFHKMNNLIHGHIJLMOPPNLJIHGHJLNObPSTTSPMLKKKIGFFGIKNPPPQSTUTQKD;dZWZ\]]]^bh8=?=m_WW]dl89988:<>>>?BFHIIIJMQSSQONOPPPONKGCA@?ACDDDEGIJLNOONMADGHHFEFHKLLKGIGGJLH>6456531125898742/.29AGKMMJGEGJJC=::;;:998742134431/-.121/.,++-02354543223200124565320.,VURNIFJR.2210/ZVSRUWWY.024431000/..-.146678999::uw<=>?ABCDDCB@=9520012455542/.\.//. --.012334577642\SLHIMRVWXZ[\pZXVW[^`abdeefggfb^[Z[^`cehknruwxxyzz{{}DFHIJJJIHGFFEDEGHFEDC}xvuutrswyzwusqld[SOOSX\``[TPQV[_a^ZVTQNKHGFFEDCA@@ABCEFGGGHJKdLNRVZ]aeggffghgggfecaadikkifefjoojc]YYVWZZ^]\[ZWTSUX]ab`]]`bb^XSSW\_]VLFEJQUX[\\[\]]]ZVSPMKLPX_`^[Z[\[]`gnporvz|zuqnljiikmoqpopqrsttuvvvsolkjhda`___`a2`XG88H]ihfeefeeffgfefilnmkihfdb`_abbaaa00/.-YX-///.//.YWX2?MVYZZYYZZ[^chjhc^[\`ejmolcZVWYWTRQQPPPQQPPRVXXUOKKOU\cfda]YUTW\_^\YVVVX\bksxvnhfgghhd_]`cdc_ZVUVVTPKHGHKOQSSQNJFFJMONLIILRY^_[WWXVQJHJPTWY_jv{vka[YZ[ZUQNLKJJLQUWURRVZ[YZ^`^ZWWWVSPOSWYYYZ[ZXRMLQUVSPLGCBGNSQJECDFJOSTRMIHJMNMIHJOUY[]]]\\]blz}tf\WTSSRRQMHEFHJJIFC|}ADFHJLMMMLKLNOPPPNLNRUSKD?yy}DMUWUROLMORSRRSWZ_bc^WSSTUXZ[WQORTTRPLGB@BDEEED@yrqzCIMQTY^]UKD~~{rmqyzsmq~GHJKGsottollosw|~vjdqIF~v{EBxjjpwyvqlgc`acedcbdoFDzplkiijifa]^djlieddflrusmhddeffhntyumg_VQPSUSQQSWZ_cda]YWVXYXXXYYY\bedb_\Z]bed`]_efc_]ZVUUUSU[bhjjfa\[_cc_ZVTV]bb`\\cmuqcUMIHHHD=on:@FKMONLKMMIGLX^[SMKLLMORSQNMOSX]^XNINV]`bddb\UMGEEFGHIIIHFB=:@ACCBLCEH%&&'((''&&%%$$GG$%&%%$$HEB?=>>>==?ABA>=<:60+)),04651,)*,035520/-,*(()))(('&'()*+ ,.02457887778<642247:;:8668<=:61..,-./1110/-+*+/36875567861,+-1440*%#&*-012A0/-+*)(*.2430/00100/.049:9:@=60,+,-,*'&&%$$%')*)''*.//0331.,+,+)&%(+,,,-..,(%$&*++(%"!'+)%"!"#&),,+($#%'(&$#%)-/00/.18AC<3.+**)))(&" !#% #B?@!#%'()(&&'(['%%)+*% 9:="(-/.,)'()+++*+.14662-**+,.11/+)+,,+)&"!""#" <87<"%')+/22-&!BA@@A@<:=BC>;=EL'r$@858964469;>BC>52=M*'C=?F$"<438<=:752/..//.--.5@%$?866677751/05:<97668;@A@=9656668;>@DIMMHA<84.+,./.,,-.036530//023213687520.046620256520/-^,-15898630036630,*,0452//28<:1*&%$%%#78"&()(&$#$$! #,10*&%%&&(*+*''(*.11-&$',012343/*&###$$$%N$""(+(!02!$'+--,*))(('%$"!"$% !&# $).*'&(*,./. 01333222346 +32100/01221000120/0110/0/.-,+***+ 10/0/ 00011210/000/.'-+**+,-.--+*)))('')*,-.///-,*))*++,.Ɂˀڀ܁ŀ %¾(ׅׄ؀`΅̀״򃉉ͺB󀅈K,kĿĿ򀆈½HԄрÿɿùûƿþǼûɹɿǷ,N345656678889:;;:9877766556555jij56kig44455445443ca``aba`_^]\]_`;aaaceedd345677764ea^ZUQPRUX\^``^\]^^^_0010_^\ZYWVUUVXZ[ZYYYZ8YXWUSRRSUWWXXYZZ[\^00bcdfg57985b[UQONNOPQQRTUVUTSTUVWXYZ[\\ZXWUTRuPOOOPPPQQRRQPNNNPRTUUTRPNNNMLJJJKLMNPQRQPOPRTWYYYXXWWVVWXYYXWVVVWVVUTSRRRSRQQPPONMNPRSTSRPONNMLLLNPQQQPPPRTUUUTTVTTRRQRS RQQPQRTWXZ[^aa_][Z[ZXXY\//^]]/.---/0123331.WTTUW,.01210/00123322111/../0"1234434445679;<<;:840-***+,-0256776379:97532221.XTU.377420/...-,,,--.[[YVTTSQNMMMLLMLJHGFEDEGHJLMMMLKKLLKJJJKMNNMJIIKMOPONNMLKJqKLNPRRRQQSW\_]R@.*7HPUZ\[YYXXWURPNMLLLKJHEB>;989>DILOQQOLJMS]343/XTRQQPPOMKLOPMF=669=AEGECAAFP,/.---./123455777654*5552.WSRTTTQPQUVVTTUVUTSRPOONNNQRSSSW.12332 34431/./134321/..//../00///..---.(/]\\.//...///]ZXWWUUVVUVX[]]\[YWVVXYYWTRQ)RRRSUWWVUUVWX-.//00100.-XWW-.//.--.--XWUSRSSUW-..-XWWW-/00/.///-WSSTUUV,-./013456653100/.YUSRRSTUUTSQQQSVXXTQPPQPOMKKNPPNMKKJIGFGLRVWWVX..-/120-URQQOKIHKORSRRSW[]]\ZWTQOPRSSTUUWZ^//0/.ZVROLIIMU]`[SLJKJHGkFGHJKJGDCCCDEGJNRVVVTRPMJHFGJMOOONMKJIIIJKMPSW-./00/.-,VSQRU,.00/.,VSRRT+,---,+U*+,-.02431.,+*SRRSTUUVVTRPPQeRSUVXZZXTQOMKIGGKNOPSTUWYWSPRUWX-./.XROMKIGFGJOTWWUSRRQQPQRRPOQW/2320/.-XTMGFGIKOT-0355410/.+)ONNPT,.0/.-,,--.-./135543210N/.--.///00135676531136776654320/00.+U+-/12344432112355432210/..--,,-/013478889:;::987655689;;:::;<;98889:;<#=>@A?=;:98765665322100124579<=???=;9767:<>??>;85458:<=>=>?ABCDEEDBBBDFHIKLKIGEDEFHJLMMMLLMLKKKLMOPQQPPONOPRTTRPNMMNMLJGFEDDEGHJLMNNLIEA<6ecg7;=<989;=>>;5`\_3798778:<=>@A-CFJNOOMJIHIKMONLJIJJIGFFFEEHKMMLKJJLORSTTRPMJHIKNQRPONOOMJHGGHKNSUSOKGB=:9:;8434445789:97654332>0/./00/13555431/../2331122234442112221.,VW,-,+,---,,TPMORRPOQTVX-/01123455677789;<;;989:<=?@@ABBCDDB=7aTOPUY.01u233344334568:<==<;9641^ZWUQOOPSWZ^`aabba`][ZZ[]`acdeghikmmkheddb`__```acegjloqrstux{ED|{{zwusrsuvwx$y{}|xqi`[Z\^`aa`^^`cd`ZUQNKHDDEGJMOQSTU9VWXWURRSUVX\bjptuvvwvtqoopqqnidbcdefgfea\VQMKLNQQPOOQV^ehiUhf`YRLIKQ[ceaZURQRUWYWTPLJKOV]cfiklkjgeehlprsvwxyxuqmkkjjjknpstuvwzzyyz|}|yvsojfcaacgiklkifd`\XW[adcbaa_VKDFP^iprqnkiijkkkiea__^...-YWUUWY./.XWW,---,WVX0:HV]\XTSTX_ju|zm^TRRTY^ba\VSTUUTSSRQMJJMONKIJNRQMKLQWZ[XTRRSS^SVZ\ZTPNPSW[_cec_\[[\]^^_abcca^ZTOMMOPOLIFFHMQVY\\WPHC@@BEGFFGO[cda`^XOJKNRTRPQ[gpsrkb\YYZXSMIG'IMQSV]fkha\[\^^]\[[[]^_^]^`a_[VSU\bb]WSRPMJGGIJIHIKLKIGGJMONMMPRUY]__]\]__[WRNNQUWVTRPMJEDGKKJFyqmq{EHLPTURQQSVYXSMIILNPOMIFDDEHKKGBBDEGIKJJLQXaih`\_cb_[WRNKIHHIJJIHGGFEDDCBBDGMQQNKJKKMMKIGD{vrrsvyvngjwFGHJJIGEwoosttv{{tkc_^aht}~CHKLIC}wvtme_[XVX^gkhfhkieglqojghihc^^bgjmpqponmkhdaaemv~}tle_XSQRSSSTUTRRW^cda]\]aglnkd[UUWY\aed_ZVTQQRVYZZZ[[Z[^beghjkjhc^[Y[_cdb_\Z[[XSQU^joj^UQNNNJD>;?DILOQRQPOPRPPWagfa\XUUUVUSOLJJMRVWSIEKU\_`aabejmlbWNJHEA>==>AEIJF?8n:?><>AD(EGIJJJMPSX^232\SONORUXZ-./00/XROQXb578765!4d_\\`ehjkjigecccddfggfedcbbcdeefg4579;;:988776lkihgffeedefgijk555hgedde(fggfdca__`acdc`^^`123320^]/01234456677665445677653434 5544fedefffedc>deffgfedcbbba``aa_[WUUWXXYYYXXWWVUTUX[\\\]^^_ae4432ca`__`aabce2 +1220/../-+++,-,*+*))**+++,--./0/-,/-+)&$$%'()*+*)(*)('&%$$$%&'( ))*))(&%###$$%+&%%&'(+,-.0,(%$"""#$$$%&&'&%%%&&''(()*()('&%$###$%%$###$%&''('&$$%%%$#"#$ %&'&&%&&'((('&&%&'(('('&%$$$%$##""#%&&&%$##"##$#"""$%&&&%&'&''&''(((''&&%&'(*+ +**+,-,+)('&')++, +$""#%    "!! !   !! !"#$%%$" !"#$%%$$#""!""#$%%$##$&)+)# !$$$%$#"! ! !"$%&%#"#',$! !" !"##"!"%&&%%&&%$##"$$%$$& ))))('&'&%%&()))'&&%&'(('&%&'(('&' +('''&%%$ +%%$$$ +$#"#$%%(&%)&'&&%$#"#%&&$##$%$$"""$%$#"!!! !$&&%$%'#!!!  "$$##%'())('%$#"#$$$%%&'*-C(&$"! "&+-*%! !!  !"! !$')*)(&%$"!!"##""!  !"#%%##$%%#""##!!""##$%$#"!!"3##$$%&'&$#""! ""#%&&''&#"#%&&&#"!!"%&&%#4"###"!#&&%! !"$ !#D" +  "#$#" !"##"""#"F#$%&&&%%$$%&())(&$$$%%%$"!! !""#%&&&%#!003 .,/ 7"$&&%#"!!!"$%%$###$#"""##$%())(&%%&()++*)('&%%&'')+--,+*@+*)'%##$%(+,*'#!"$&&%%&(*,,*'%#"!!!!  "#"! %!2%$#! !#$&()*++,,+*))*+-012356789::9765679:<>?@???@BDEGHIHHI%%GCAAA@><;;<>?@ABA!BB@=85223677642014642/-,+)'KIIKLN( ''')+-/024544322112320.--.0137;>@%AA?=;::;<;964445665541.+(''),--,+,/38;,:73.*&%(.4641.,+,-///-*(''),0456899765457:;=>"<:9887789;<=>>@AA@??@@@?=;9631/.024:565320-+('*-/.,,,*%!)0565310/0110.*(&&%  !*..+))*-29AED;0*))+/5873-*})((('%$$&(('%&')(%"#&*,-+(''('')+-,)&%'),.0232/-+,-.//012210.,)&%&(('%#"!#&),.01/*&" !#$#"#(055321-($$')*)'(-5:;:50,*++*(%#"! #%()*/59730/./../0111//121.+(*.341-)('(('&$""#$###%%%#""#&''&&'()+-//.-.01/,)%%'*,,*)'&#! #'('&G@;8:AG%')+--+)()+-,($""$&''&#! "$'(%!?@"$%&''&&(+/6;93/1441/-)%#"#"%#""!! !#'+*(%%%&''&$#"A><;;G%`#"@:65788:>?;620149?BBBEF#CDG&))'#?;:950,)&%&*1532365459<;7578852258:<>?=<<;:852148=BFGD>:63/,+-.$-,,.255310147:;:60+*+-/1330-+*))+-/10//13556676520.-/355420///-)(*07;81,))**($"%()**)'&&'&&+2641.,++,--+(&$$'+..+$ #*/1222358:81*%$$&&&$" !$&&#4!""!!!"##"! !#%#  "##!!$* +-+)*,02431100010/..//011211032211000//012333320 111001100/-,+,,+)''($$ /../0100//.//01210 11/,*))*+++* (''(*++**+ -/.-+*+,ȀՁŁあπ؀ހ %}f҄%z퀇؀큉GW>-u hAſNG/ŷ¿ſǽſĶ$ǽź˻þ¼ιŶͿĺĻ½ʿĹ-:.Eabc245543456788988776554 +555j5566kigfedcbbbcd2333456777655443@gfda___^^__][YZ\]\\\^_``_^]]_`abcefghihea^\\\]^][\^`_][ZYXWY[]]\ZDXWUTSSSQNLLNQTVWXYZYXVUTSRTWXXXYZZ\_11_[\`2332111a`_^\ZXWVWWWXXYZZYYXYZ[[[ZXVVVWWWVUTUUTRQQQRQQRRQPOMMMNPQRRQQQPQRSTUVWWXZ[ZYWWXYYXVTRQPPOMNOOPPQP7OPPQQPPPQRTTRPNNMMLLNNPRSTUUUVWXYZZ[\]_aaa`abba_]]\\ZYWU*SSTVX[^023467765320///.--,,-...-,++,--./010j10//..-./0123467864333457:;;;=>;5.(&(+/1234665310013444566765422346764347::5/UQQRSTSRQRTUSQONLIGFEDCCDEFFFEDDDFILPTVURNMNQRRQQPPPONNNOQSTTSPNMMNOOMMNPQRSTWYYWTQPPRSTTRNKLR-011/ZVUTTTURNIGHGFECBAABBCEIMOOMJGFIMPRX0441ZSMJKORRQPMKJIHFEEFDBCHKKK'+06:;731124687755420/01 0.XTRRSTTSRQ>RTSQNLKLNPQRSSRQQSX/1455422344531../1343322344310/./0110/.--./0.--///./ .-YXWXXXWWYZYwXXWVTRPOOQRSTTUUVWWVVWY./1210.--,WVUVX-.001110-VSQQQRTVXXWVWZ./.ZVSRTX..-,,,+UQOPT,-.//000//01234567887520..[XTQONOOPRTUeTSSTTTSTTUVURKFFLQRPMKKJKLMMPTVWVVY-,+,//.,+UTUUTROLKKMQSUVWY[ZZYYXVTTTUSQPQSX^1220/\ZVPKIJNUZYUPNLHFEFFEDEEFFGGGHKNPPONMLKKLMNOQSSRPLIGGHJLMPSV-/1320.-,VUSPNNOQSVX--...---XVW,XWX,--./1331.,+TQPQT+--,URQQSTSQOLMQTTTSTSSQOMKKLLMMNO QSUXXXWWVWdZZVRNMLKJIHIJMQTUSQOMMNQRPNLLMPUY/121.+TSTSNHHMQTV,/123552-RMNRV,--../121/YWY[..--./01224320/0112221/..//124555455688876544320///01 /-,YZ-../0111210134566686656:9:u;;;:999;=?@?>=<<<=>??>>?@@???@ABCCB@=;9631//02345667765200269;=>@AA>;9867:>BDC@;743358:::<>ACEFFFDBAABCCDGIJJIGFFEEFIKLK2LNOQQPONNOQRTSPMJJLNMLJJJIHGFGIJKMMLJHFDC@><;;<<=>?@A>6b`d476579;=>?><:778;@EHIGFFIKLKJJIHHJMNM{LKJIIJKLMMJEB@??AEIKIGFFHJLMNMJHFDDEGJMQTUPF;4696665322468999876534579<@DJOQMF=50-+T,/24567765543235641.-.//.-.012455433455421112355544321/.-+VUW,-./000//.--YXY./01223356899975445531/^`48=@CEGIJJIHEA<:srstuslc[URRTWZ\^_``\WQLGC@BCFHKLMMMLKLMOPRTWZ]^^[WTSTUUSOJHJRZ^^\]bfkosvwurpqqojcaZWTQRONNPTVWXZZXWZahnpmg`ZUTVX[aiopkbYTRQPNMNQTUUUY\_dgjmoqpoooqstsrssrrrolkmnQnmkihhikpssqooopqtwzyxuplhffgikkheefghfedcbcccb`]\\^bfjlmmlkklmlida`bdfh454332211011100///.704=GNNLKKKNRVWUQLGDDEGGHJLOTXYZ[[YVSQNMMOQOLLPW\\ZXWY\^`abaacff_XTTWZZZ\_`^YTQRUZ_cca_][WUSQPNMNPQQPNKJMU^cc_ZTOJJLOPQTX_flkd\TMFBDILJFBCL[gow}tic``_\VOJGGJLMQV]chnttl`YX[__\XVW[_`_]^ceb]ZZ\]^__\ZZ[ZYXWUQNKHECCDEGHIKLNOQTWY]ab_YUSSRNJHGGHILOQRPNMMLIEB}zzy{OPPPQTX\]XRQTZ_a_[VQKHGJOOKIJLKFAACCA>>?AEIKKLNRW_dc __aa]YUQMJGDFGGEDDCB||BCEFFEEDB|wvx{|||{wspnmnxOSPIB~|{{}}xurj\OKUbitx}~{wx{~CDDDFGE}|zwromljihhgb^\^ckomd\Z^hrwvrlgedcbfntsoquz|{ukddc_YUSTWZ]\UKFLYb`ZW[bhnpojb\ZZ[ZYXYZ[[ZXUTSROMMPUYZXWY]`chptqh_[YX[_bbcefaXNILT_d_WSRRRPNKGFHMQTUUUVWY\__[WW[_bdea[UQPFPPNIC@ABCEIPW\^][XUSTW\^]ULGEEDDCDEDCCDHMQQOJA968><:99:;;:98876kihfdca``begijjhgfedcbabbcddcceg56763c`__`ac3331_^^0122345445665455665432cbbd34344gfdbaabccddeedca2``aba_\[ZYXVTSSSUWXYXWX]cfc_]\[XUVX\_ch55hea_]\\^`*+, +2310///.-/.-,,,+4*('()***+-..-,+***+,-./0135420.,+***)()*+*)(('&%&'(('((('%$#! !#%&&'('&%%$$##$% &''(*)''),,++*)(''(()(((''((''&&'())*)('&%$%$##$$%& ''&&%$$#$$%%$%%&'()))(()**)(&%$#""###$#$$$#"!! ! !"#$&&'(()+++*++,./0//./.-+**))('&%%%$$##%&(+ L   "$&'&%#"#$%+$$###$&''&%#"!"""!!"#$$%&'(('%$##$%%%#   +%$$$%&'&#%!###"  "#%'&"!"!  "!!!"##$#%$$%%$"!!!"#$$%$#""#&  '&&&''&&'((('&&$#$%&&&'(('&&&(&%%%&&$###$%&%%&'$#"#% #"!!#$((&$###$$&'((('&%%$&%&&&%! $''%#"!"""##$&'&%%&""# +" !#$$%%&!%$$%%$##$%'*''%#  #&))&#"!  "$%$#"'##$%&&&$"  !"#$%&&%$"""#$&(&&&&%%#!!!##" +##"! "##"# "  !!"""#$%'U&&&''(+*'$#""!!  "$&&$##!!!##" !#&$$%%"!#$%! "$&%&'  $$   !! !"""#"#$%!&'()(&$##%&&%%$$$#"""##$%&%$"   --/ "###"! "$%%$%&(((''&&%%$$%%%&%$! G!$'('%$$%&'(('%#"!!"#%')++'  ()0 !#&(+,,*(&$!8"&'#  ! !#$&!"###",$  #"  !"#$&)+,,---../013443222356789:;8976543101345689;=?@AABCB@?@CGKMNMKIGDBAACDF#$%%%$$#! ==>U==>??;72/../134545530.+)'%JJKLMNN'()+-./.../.---.//0136788741/./0.,(&'+03300258:=?@?>=z;761.,*+)))+.011220015:?A?;730..026:?A>71-+++)((),.../13689:;<<;;;<===<<<===;:9:<<<::999:<>>=;;:::<>@@?>;7543344542223320/.#--+)''(*-/111000111/-*))+,-9!%&%$$%(+--+)%"!!"$$%&'(+-...--+*('&&'('%%',/.,+++,./9..0330,))+-.../0/,(&&(,/221/-,*(''&&%&'()('%$&+16640,(%%')M+.3773.)$"$$!$-5;AEC=620//-*&#!"$%&(,036:=<70+*.10.,+-034311353/,,-./0/-+*)'%$" !!"#$%&&')*+-/0.+(Z'%#"""#%')*)('''&$"CBABACLW..-,,-/10,('),./.-*'#"!$&&$"#$$!!"! "$&((()+/46411220-*'$" _ !""! !!=;;>!"$$$#"! >??=;;=>>>??<:8877?@BCA?=;:7/'%+26=@CDCA??@ABDD"##$%&%EB@?><9767652//15:=<60-07>BA>:7544349<;89;?AB?:556520../132.'"%-330-.259;<841/.--+*+-/0/.,++*)((*-//.--/136;=;51///13556774.($&,372-*+,-,f*'$#$(+--,,,-.///,**,/1331.*)))*(%! !!"$(,.//.,*))+.00+%"!!""#$$#"""$'))(% !!  !!"#$#""!"# """#&*.-,-.035532210/./0121/.-/43221/...0134442100//0/./0,*))**+'''+**, 0/.---./11261100//00/.,,,+*))('(*+,+**+.12/,**)('''(*-00.-+)(()*适Ȁ々̀聃끃׀Ҁ́ Rd܄҄ +6Ʉ̅ˀ¾؀P¿a􀅇ހ½ ĄSû˽Tɽ¼¶»ļƿƺĹ^ ހ<_`acf343222356888999898876555443345787jgfeedcba```ab235677787653dcccbaabbba``_^]^__^^__`a``abccddfhihda`abcdedcb`^]]]__^[YYYZZ[[ZYXWUUVWVUTTSRRSSTVWXXWWVUSQPQSW[/01110][YYZ[[ZWUVWY[\[ZYVTSRRSSRSSTVWWXWWVVVUTSSR QQQRSSSRQOMLMLMMNNML$MOPPPQQSTVVVUTRONNOQSSRRSTVWYZZXUSQONOPQQRRSSSRHPONNMMLLKKLLMNNMPPRSTVXZ\]^^_`abcdddc`^[YXWWWXWWVUTRRSTVXYZ\/02355543210/.-,,,-..-,+TRRT*++,./01 +0/..//01221/0/../1467765567762/,++.0122111/-,++**S+-/234543210001000110]XURPNMLJIHHIHGFEDDCBA@@@ABCDDCBAACEGIKMOPOOPRRQNMNOONNNMLJIIKPTXYYVSPNMLLLMMNOPRUWYZZZYVSPNNMMLMNOQUY\[WSQQPQRUVRLHFKFGHHGECDFGIJLLKJJIJKNNNOQUXYUOKKNQSSQKFDEJPTX\010-+-28<==;963100134665433321&0/-YXWVTSRQQPOONOQSSSQNMMNOPPPQSUUVY.02 122331/,*+-/11122344310/./12333210/.../0 //.-ZZZ-./.ZYZYYYZYYWVUTUUUTTTVWXZ[\\[ .///.,XW,--,-.//.WSRSTVWXZ[[ZXUSSTVXY---.../0//01345545654320.\[ZXVSPNNOPPQSUVVTTTUTSSVZ^`]WPKJ0LOONMNPPQSTTSRRU-0331//011/-VRNLJJLOQSTSRSVZ\ZVTS1RRSUX\010.YXXWTPMKIGGJNSXYVRMIFDDCBAA?>?CGHHGGHJLNHPQQONMMNPQPPRTSPNMMMPT,.1320.-,+USRQONOPQSVY.01110-TONRWXWVUUVX-/01/-+++,.VTRRSSSRRRTUVVUTTVURMJKKJIHJNSW[[ZYXWWWXYWTQONMnLKJJLLLMQVXUOJIIHFFILNLIHLPU[01/-XWVTQONOQTVWY./1231/---,++,,XWZ/110/.ZXUTUWYYZ--///./133466652/--./12345777665431000//./02444344320.,X,-./0011234554211237;==:731247665 66555668:;<=.<;<<<=?BDECA?=<<<=>@@@>;9877641.YZ/2468:<<<:976.7:=@ABBBA@>;::<85456789;<=?ADGHGEDDDEFHIJKIHFGHIIIJJKKLLMLKJKMOPQPNKJIIIHHHI JJKLMNMKGB=96<5j555hc]YXVTV\b21aabd47<@?<864h69<>??ACEFGGHIJJHFEFECBAABDGKMKKJJIHHIJKLLKJJJKKLMMLKJKNPQ0MGB@@ABDFIMONKGEDCA@>=<:999::<=>?@@AEJPSUWWPD;6321/-,-04788779;=?CHMNKC:6566555666789 8643358:975434456554434676410//0244433321/-URS+,,,-//00/.XX-/012332100112o33323456531149>ABBBCCCDFHIHE?9cXPMNPSW/24443321_[XWURPMJHFHKNPQSVYYXXY[[ZZZ\_cfgfedcbbbccehmqssrrsttromkjigeb_]\ ]_bdfilnppommoswz|||}}}|}BDDCCCDEEDCA~zxupmlmnlg_VOKHHJOV\`a]WQLHFDB@@ABCDEFFGGGHIJKLNOOPQSVXYXWVUVWYYXVSRSW]dkoppqsvz~yrnkigeb_][YZYXVWWYYYZZZYZ[\]ZVRONPTXZ\_`_\WSQQQSUVWUROLKLOTXZ]`baYQR\ejkkjhec`___`ejfc`\YY\`eknnlklmoruwwusqnkhdb`__`aabba_^^`aaa_^]\\\]]^_bhmqrrpnmlmmlkkkjgdbb22210/.-YWVUVWX,,WWWXZ\]^e:DLQRRQRSTTTRPLHFEHLOPPQTVWWWVTPLIHILRX^`^\[\^`_][[]]ZXXY[\^bd`YSONLKJKPV\___^_afntpf_[YWUQPOONMLMNMJHHLRXZZ[b]\WQNNOQSW]cfc^YUQNKHGGIKLLOV_ipuuphb_^^^\VQMKIHFDFMV]aeiliaZWZ\YUOLMRUVWXZ[ZXXZ\^^]\[YX[ac_YSNJFDChEHJJJLNQSVY]__[TNIE@<=EPX[ZXY\``ZQIDAABvqv~GGIQ[]YXZYTPQW]__]YSLFDIPSQOPQNIEDDB>z>BEHJMNLIKQ[``^][VPNMKJIHHGFEDCB@???>z=@BA?>@BDEEEDB{|~}|||{yxvuux}@@{vsrrpnqy}{uqnmmke\X_hpsuy|~}{~}|{{|EHKMKEwqnnpuxyvqnnnjc][^ab`[XW[biklmrz~~|woifedeghea_`_\XURQSX^a`\XY]adeec^XTSVZ]ZRLKPSSRSUQJDCGMPSVXYY\_adfhgc`^]ZWUV[biljf_XRMIGHMQSSPMMMLJIJLQVXYY[]`cb`^]]]N_`]VNIHJMMJFB@AEHHHJNRSPLILTYXQKFEEEFGHHHGECCEIMOPPNIB=;>BEGGEDBBDGIJKMOQRRRQONOQSUUTTQONQX^acce3567 6544ggghijkm7lifdb`_^]\\]]]\]_beggffg57:<=>=#???><;:::98oligdb```bcefgfd`\YY[]`bcde3468;<:6daaba`_``aa111``124556542234433345433dccdf34gh445666543gfeeddcd +cbbdeeca`_^](\ZXVUTTTUUVWX[^^]\\[ZYWVUTSUX]dj79975fb`))*+, 0/../..-,,.-.--,-,--..//001245420.//.--,+***+*)('&&&'''&&&%%%&''&%&&'('''&%$"""$&'('%%&'''%%%&()**))('&% +&'(())('&%$%&&%$$#"#$#$%&% &())(('%#"!!"#$%&())('%$##""#$$%$%&&%%&%$##"!!! !!"""##%%'()*+,,,--./0010/.-+)('''&$$$%&''()#"""  #!2 !#$$$#$%%$#"#$$###""! !"%')*)(&$""!""$%&'%#! #!!"#&'&$#"""#%'(&" !""! !"#%''%! !""!!$%& "#"#$%%$"""#$$###$&  '''('&&''(('&%%%&'())**))()%%&$#$%&'(((&$##$%%&'&&&%#"!"#$%&''&%$ &(+,+($!!"\$$#"#$$$%&&%$#$%$" !"$$$##$&(('&%$%%%$$%&')$#$$#"! "%'('$! A"#$$$###$%$#""#%%$$%&%$"!!!"$%%$$#""##%&(#! #%&%$&$# ""#$%%$$$%$#!  !$&(('?('&%$##""#"" !! !$'(&#   "%(&&&$#!!"#%&&&%%&&%$' +$%&&  ! +  !"#$$#"""#%&''(('&$#$%$# '30-($#!!"&*+,./ 2 !"#$$"![  !"%'())(('&%$$$%&&''&%%&&''((''&'(*++**)&" !"$%&%#  "%()*+)$!$$! +# !"" ("!%$#!  !!#%%$$&'(*-01 00112358<=>==>+<;:::98753334334689;=?@A?=<=?CEFFEEDCBBD$%%$#)"!@>=<97678974/*('(),/35641.+)('&&%KL'(()*+++,-.../0124431100234420//037;>><;<=?ACEDB?=<;:86431/0/.--./112332233320-++,.134688730.-,-./0/-+)()*-0112440+).4899986432233697.6420/147:;;:889:;=>?>=;976420//..///.,+++,,+*)()))+/354321001100//.,)''!#%&*%(('&'(&%#"#$')*+++,+*(%##$&*.1310/./0/-,,..,*)**+-010,(&&%$$$'+/1100014:>;50.-+)''&&&%&'('%#$&*-../00-)'&''(*.3530,)'%#"!""###$)/5;>>:3/-,--,)>&$##$#"$(-0246860+*,.-*'&'+---../-+**,-...,+*,01/,(%#! !! !"$c%&()*,.//-)%" !).1/--033/*%"!""D??@?==>><<;::<@!!@<988768=@?<:88:95/-28<=>@CDCB@>?BEDB@A@?@CF%')+)%C>:88:>AA>;89:840/156620/047888:@EECBB?;75556898544420-+)),033/,,.267752.+*+-/-(%$'*+*+-+'" #')+,---.02467642110.--049:961-*'&$%(,--*)(('&%%'+.//./12320/../120,($$&))'$" !#$$$%(++)&#%*.-)%%"!""#$%%%$#! "$&'(('#!##"!    !"! !$')**+ 00011234 4210/..-,,,-/0233223 976431012#1/,**+-./0//.---..-,++*)))('&&,-...//01 0023421//.-,+**)*+**)))(('&&'*.1-*)ဆЀ€πׁӁހր Qׄ1Ԇwlҹ¾N̈́yڄ׀􃌒¾`ͿMº½ͅ΀ƽƽ;ƿR»µýþƼ¼>,,?a___`bccbbabce34567789998765443457875ihgeddcba^\\^ad35554568998765432cdg455jhedddcb`_^^^_`abcfikjgddffea^]^__]\\]_aa_]\ZYcXXWUTTTUUUTSRQQRSTUVVVUTTUVVUSQPOPRUXZZWOFCEKNMNPSUTTSTUVVUTSTUUSRRRSUX[\[[\\\ZYXWVUUTTSSTUUUTSQONML +MMNNOPPQQQPQQPNLKKLLMOQTWYZZZWTRQPO MLKLLMMMNOPPONMKKJKLMORTUTQOMMNOOON,PMNNPTTVWXZ\_`^]^_`aabba_^^__^\YVSQQTWZ[[\]]/00110/-,,+++UV+,-//0/.-f,--.--,,,-.03555433445678:<=>=;989:;=??90(IJMOQRS*+,--,VVUQG;45=>CGHHGFFGJLMNOPPOMLKJJKMPRUY\\XSOMLNRW-.-+URPNLKLNQSVY.///.-,,-/.YSPNNNORW-/1221/-+ROOQTTRQPRSTUUUVVUTTVXXWVVUTRMHEEIPW\//]ZWVVWXWTQNKLNPPONOONLJHFIOUWVPIDBCFIJLMMNMKHJQZ.\YVUTTTUWXXX-.0112/0/-+TTVWVTSUX/2552.VRQRTUVVWXWVUUW-.148975322346$7899741001110///011/-,.133431/..011121211014554456410..0479::754466542135789;=>=<;:;<>@AA?>>??>=;975333431YPOX39<>?><;:99767;?BEFDA>=<<<===<;=?ADFIKKIGFFHKLLKIGFGHIJLOQRQPONMMLLMNOONLIHHHIJJHGEDCBA@??@BDGHHGB:3][[\\\]\[YTMF>738GUZZ[^``b5@CEHKNPRQNLLLIC=97678;>DHJKJIHGFEDDCCCDeEFGHJKLLNNNMNOOOQQNF@?ACFHILORTTQNLJHD?>>??>=>ADGGEEEFHIKKKHC<754458<<93.--./000//1479:98657:>A@=98876(533589;===:8531000135789875322552,LGJQV,-.02432135640.-/0123211343211000/.ZWUUV,--.../../01122235665567889:;;<<=>@BBCDDBADFFGJMOOPQSUVVUUSMF?>EMTWY\`gmmcUJDBBBCCDFGFCADMYbc_[UNIHKNNJHIPWVPLLNOOOMKHGILMKHGHHGGILNNLJKNRVXWQJFFHLQUXZXSMHD@}|@BB?wu|CHHEDEGGDA@ABBAA~~}{z{|zvpliggiknoooqtsokhedfijfcdjkpxML}yrmouwvsqrxC}{yz|zvtvywrle_[\^^ZWX\`dgijkifehnty}~}zvoheefoeefhgeca\XTRRV]^SC9qAKQTUTRONOSVWUTTTPIDFLTZ]]ZWWYYXVTV[adedca^]\^`cdda\VQNLLLKKKLJHHJMNLLPUX[^_]YVUUVVWVURLHGIKIFFIJJHG3FFEFHGDBCFHHHJMNMJHFFGGFFGKNNKFCCDEGIJLNPQPNMMMLLMNPQRRQQRSSRPNORX^bcbabdeefgg34hhhggffghijigeb`^\YXWVWX[]`cegi579;>@BCCD=CCCDEEDA>uqmieb```abdddb^\[]`d3565heddde3344544333221bbccbaaa` _^^^`234545566654565igfgf g4443fedddef*eddcbbcfgfdba``__]\\]]\[ZYXWVTSSTTTUVWXZ\^_^\YURQRUY_f6764d*)))*+,-2221000/-+**+,.,-/321000/..-$..//00013465310010.,+,,++*)*+,+*)(''&%%%$$%&%&'((('&%$#""#$&((&!!#%&%%%&'''&%$$$%&'))((()))((('''(''&'('&%##"##$$%%&' %###$$#$%')*)'&%##"#$$#"""##$#$$%%%$#! !"$&('&$#"&#"##$&&'(()+,,+*++-./00/.-...-+)(&%%')*#$S  !!!  "$#"!!"$&''&&%#! !"#%%%$ #"""!  !"#@"! !"#$%''&#!"$$"  !"#$$##$%&&%"$ ""'$###%&A%$"""##""!!!"##! !#(&&(('&'())***))(()(('&%%&)*+*)(()'$$$&'&H&'&&%&'(('&%%%$$%%&(($""%((&$$$#" !$&&%%&&'%" "$%$#"#$ #""$&'()#!  #&'%"  !  !"##$""!! !#$&(**($""$%$#"! "#%&'P&#! !#%! !"$$#"""###$$%&%$$%'''&&&%%""%('&%%%&&&$"  !##"*! #''&# !!! #'('%%%$$%&'('0%%&&&%$$&#! "##$$%%$##"#2$ $=!"" !"!! !!"#"!!!"""!!!"$&'&&&%%$$$%&''&%#"!!"!   !""+*('&%# #%'*,-/! ; "#$&'('&%%%# $')('&%$#"""!!!""#$$%%%&'(''(/)*(#!#$%&)++*(&$"  "! !"$$$#!( % ," "###$%&%#""#%'()*+,-. +/01358:;<<;p:::853222110123567899:;<<<;;;:;<@DH%%$#"CA!"$%&''&$#! ?<;<>@?;852100//0122320-*))**)(&&'()*++***++,,-.00//../1110/.,)'&%%&),-./159=?@?>;842123556545454321/.../012/*&$&)+-/0!1357:<=:4/,*)+.1210//25897456420/.--./0/ +0246789:<<=<:9776531.,*(''&%$$&()*#))(()*+,,,-..-,+*++-/144420.+ #&(*#*-,+)('&$#$&'''&'''&%$#"$$&).10-+,/220-,--,+,.0/-)%! $)-/00.,++,-/121/,)''())((('()+*)))+./.,+*('(*+*)()*,+)'&'('%$$'*.123579851/-+***+++*)'%!!&,011147998643220.+*)((('''(+-.,*))*+,+)'%$$"!  """#$&'''(*+,--,+'#"',./038<<6,%"!""##FF$%%$" !(0552.*&#"$&&$#$)-,'%%&''&&$"!#%'&$#$$##%'((&%%'*,.-(# !$(*-/.*'$"<= :8="%%"!"$$"! !""!!BA@???>=>>=963111368998:;;865446:;987::;@FN*)JC@@>:79=>=;;=>@?=:6301452//02478886436:>ADEECA=977999888766543320-+))+01+!3%),,,*(''*-.-,--+'$$',/00.,+,-,+*+/356543100012443/+(&&&'''(('&%&((&&(+.0120.,++,+)&$#$&&&'&%#$%&&$###$%%#!"$%%&(**)'%#""#$&&$! !"##$#"!  !! ! +"""! "%')*+,--..1110#1122110/.-,,+++***+-.01123 !' !###!<:8631100011210.,,-/21/---. ***))(('&&&%%%.-.//...///.-./010//013554310///..-,+)('''()*+,-..-+)'&%&'*.,āāɀˁɀÀ P"Bل/ۄׄcل]¦ľþý»SĽ'򁇋݀Žžr{ľFɀʿFĻ¾·񅓚m˿݄ހƵĿUÿL׆ԀIe321a__`abcde233445667889 87655565433fg34gfca_^_`acd2233455433445556554D3345666554443eca``_^_`aaabcdeffeedb_YVVY\\[[\\]_a`^\ZZYYYXXWVUTSSSTUVUUUVYZWSPRW[\\YVRNLJIIKMNNOPQRSR1QQQRTTUUVWXY[]`bccdeeca`_`abbbaaa`^\[ZYXWVWVVUTUVWVUSRQPPPRTWXWURPOPPOMKMPS4TTRRQRQOMKKKLLLKJIIJJKLNOPQRTTSRRQQQSSSQPOONNMMNOPQSTSRPOOOQPRSTTUTSRQPPSUXZ[\\]]\]/0122110///../01123 +4455532112321///012344455689;=>=>9;5+D>@FJJIHHILPSSSTRKA98=CGKKD5*.8BEFGIIFB@ADEFGLRSQLIHGFDCBA@@AAABDFHIKKHEDCDDFHKLLKJIHJKLLMMLIFDDEEFHKLM LLKKKNPRTUVUSRPQNLKJJIHGGGHJLLKKKMOQSUTRPPOMJFB?;:?@BCDFFG HIKLNORUVSPNONPSUVX-...--/000/.-,UQNLKIJKMNOPRRRSTTTVXYYXVTROLLNSW.03430,SPONNLLOSVVTSTUWWVTRSUWZ\/10^WNGDHPX]/0/-XUTTVYYVPKIJLMOPNMLKJJJKLKIIKNOPONLJHGILNNMMMPRTTU7TTUVY-03552100/-,,,-YXVUTTSQRTX.//00/.-YXWWVVUUVVW-/2443457775 433456543210 1/-,-1566310/00/../25554433321/./e0110..0013679;;986667876434568;>@?<;99:<>??@A@>=<===;8655543357742358:=??=9668:;<<>AB@>;:75469<>?=;<>@u???>=;9899;@A@>:520/[XY-./.XPHB?@DKNMPV[^`dk:?ACB@=;97789;=@CGKNQSTTTUVSNHB<8678;=?@@ABDEEFFEDCCCDEFGHIJLMNOPQRQLB8117=ACEFGIJMPRRRQPNLJGDCCBCEILLIFCBDINPME=979:;;:<@CB>830//.,&,WVX.03442/Y[28<;97655666421358:==<:765X6678886547:;;865567753210//02221134321234420//1330SFBJW032110.-,Y-.01110/.---./000/.--./0012333456643348<@BDDC@;hXMIFCBCGMRUURNNORSSSUX[./0C122210//`aabbaaa`_^]\\]^`aba`_]\\^adgjlnmljhhggfdca`^]]]^^__abcdehklMjgfefimrw|ADFGIJJHEA{xwusqomjhhhihe]TMIJLORUTRQQQPNMMLJHGGHHHJKMNONMKJHFEGJLNQMKIGDCBAAACEHJLMORY`fgc^XRNMOQSSTUVWXXXVUWX\^acb_\YWVTTUWXVRONOSX`hlnnmljjjid]VPKIHHJNRUVWZ_fie_[YXWVVUWZYXZ\]_bhnqqokgda_,^][XVVVWXZ[\]^^^]ZXUUVXZZYXYZYXUSRUX\`cefgijlm65421122334331/YUSTUeVX[^c5>JV]][\]^]\YUQONMLKKLLNNOOOPRTVVTSTW\bffc^[Z[^``\UPPUZ]^`dghaWQPRSQMJJMQV[^\YWVVTRPOMLLNOPPRVXXWBVTSQPRV[_a`^[XUTUWXUSRRTUTQPOMIDDHNV`ikeZSQRUY[[YYYXWWWUSQNKGCBHQWYZZYY[]`ba^\ZWSPNNOQTX]``\WTTVVSPMKJIHGFEDDCCDILLKJLOQRSUWWVW[^\TKFEGKPUX^cc]VPJEAADFD|sxEOTSQRV^ehgb[TONPQOJDABJSXXTPONMKIGHHIIJJKKJIHIJKLMNPQPMKKMOSY^`_[UNIGFDByxINNLLORRPJEytuz}}~@@}yxz|zvqmihiklljiihfefih`XTUSQ\kxHJLLIDulhimoopppqrruzzsoopmjjmqwyumd\XX\bfiknqrsuuqg\SMNU_hnpmgbab`\[\^bis~}rga^\YTNLPX_a]VQPTX\`a`\XUTTUUSOJGHJLKJJLMNPSVY[\]^]]]_```acglonje`]\[XSLGB?=>DMW_cc`\ZZ\]ZWSPNMLLLMNMLKIHIKNPPPO7NKIECCEFEB@>>>?@@ACDCCCEHIIHHIKLLJIIHGFFGIJJJIHIJKMMLKJK MNOOOQSUUUVWX[^ac22b`aaa``___`aceh56khecbbcdfhjjifb_\ZYYZZZ[[\]^`cgj5667:=AEHKMPRSTUWZ^^[UMF@ysomjhgffgfda^\\_dk8::85gdbabdg45554443c``b23343dc122233322334443334456 777666554hggfgM3444hgfedefhiihgecbbbdfhhfdccba``_^\ZYXXYYYXWUTSRQQQRTWZ\\\]_aba]YVSRQSW[^`ac-,+++,--..//000.-,-- +10/...-./011221100/-)'')*+++*)''&&%%%&&&%&'&&'))(%##&())(&$"  !"""#$$%$$$%%& ''()*,-./00/.-.///000/.-,+**)('''()((''&%%&&(+,+(&&&''%#""#$&''&%$"! !"""!! !!"##$$%&''(''&'('&$#$%&' +&&%$#$$%$%&'''&&%%&% $%&()++,--,,+, )!"#"!!!!  !!""#"! """##" ! !"#$$%$$#"!   !! !"#%&&%$" "##""!  !"#$$$%&&&%& "&%$""!"!$"""!!  !!# '&&&'&&%%%&&''())(''(())('&%&'&%&)(''&&'&$#"#$$$&)%#+!!""!  "$#"#%$#"!$ !"###$&''%#""$&'(($##$"  !"%()'$#"  !"#$&()'%$##""!""$%%&$"!  ""##$T%$%&'''&&$#! "$&#"!"!!!"$%$#"#$%&%$$$%&(*+&!"&($"!!#%&$" "##"!  !  """!"#%%%&'' ''&%$$#!!#$&% $$###  U "#" !!#%'&$"  !#$$%$#"! !  %#""!&*,-/3 0!$&'()**+++)&# !!"##$$##"""##$&'()))*+*&  ""#$%&')*)(&&$#!G #%$#  #&'$"#!  $ .%!""  ! !#$')**++,-.0/./13579:::988776665432334566679;<===<:8779;=ADF$%&'%# <;:9865567762,(&'(*,-,++,++**(())**+,-...-,*('&')+,-,*('&%$##%&()*+,-0489740-+*+-.L/01221/0023565420/...///.+))*,059<=>>=<;;;95/*'&&''&&'(*,,,.17:840/...---,,,-#..-.//025:>><9754333210.,*('&&&''(()('%$%&&&%%%&&%$$$%'*+-. +/1110/  !#%("*/0..//.-,)'&%%$%&<'()++*))+.1331.,+,.00.*''*-/014673.**++)&$$&),/0/,++,+*)('&&'<(*++**+,,+*('(+.010/-+**+,,*(''())'&&&# "%*/462,'&&(+-,+*++*6)('&#! $),-,+,-,,,-.0110/.,)'&&&'(*-//-*))*+)'%$##"!!! [!$''&%&()))*+++,032-'#"$&*,/2662-)%" "$#?9=$+.-+*,16873/*'&(*)%!$*.-*'&&&%#"#$$%&&&'&$#$%&&'()(%#$%&(-1320,'$##! o?::B&*)'&(*+*&#B?<99<==> =;:<<;9754456665544334661-+-,*09@FJK&())&#A;6458::;<<<==>ADED@<:::8767:=?>940/0269::<=B;4-(&',39=?>:6554201236720.,)&&(-220,)),/1220.+))*+,,*'%%'((('k)*,.///00012332224688630///.+'$"! $)/46530..//.,)'&%%%&&''&&%$$&())(('&$"!"###!  !!""##"#$%&&%$$%&%##""! "###"!!!"""!  !! !"#$$$%%$$%&')**)**+* ++,./142/-,,-.0233320.,+++,---.#/135 "$&()*+,-.0232.*%!>;98765431.-,.151/.---.)((**).///.../01233212345542111000//.,+*+ *))(''&&&')*,-/00/-+)(&%&')***+сŀ́сʀЁɀ #bޅUPԄф{X¹¿υτ=ÿ»݄߀<؀󀈏zĿƿȴx遍z ûĹƼƿ´örϽŽĽS(!ل%VZ^bf45432cba```aacdddcc234579:::987787654433feeddcdeef"dbaabdeedc12233456679;<=<<;:987666514eb_]\[\]_bdfeca`_^^`_]ZWUSPMMPSUVXYXXXYYZZZYXWVVW-X[]]]\ZXWX[^```_^\YVTRQPONMNPRTVVTRQPOPPQQPNMLMNPSUVWXZ[]^^]^_`_^^^__^^]([YWVUVWXYXVTRPPOOOQSUVVWXXWVUUUTTUUUVVSPMNNOOOQSVXXUQMKJJK +LMORUXYXWUSRRRSSSRPOOOPPQRRSTSRQPOONMNNPOPQRRSRSRQOMLKKLORUXZ[\]^/000/.ZYXXXY./012344455689: 98877655544567999889:; <===;988779: ;<==:4,LGILNSKFA@CHLMKF@=:405AMRPOQVXWSPNKHDDIR[^ZWVSOJFECB@@@AABA?>=>?ACEEEDBBCDFILNNNMMLLKLNPQPOMLJIHGFFGIJKLLMMMLMOQSUUVVUQNLKKJIGFEDEFGHIIHGjHFEFILKGC@@?>?CHLNONMLLNPQSSRQPPQRTVVVTSTX/255422345653101320023332210.ZWVVVUTQOLLMOPRTUVWY.//.YUSPNLKJJJKLMNPQSTROL6KKLNQTX.23310/../13430,PML(+.0221.,,./1355422357876433432233321110/.ZYZ-.0//..--,XWWXWWWVWWWXWWWVWXY[]///.[XVUTUWY-..-,,,-.7--ZYXWVUTSSSTUVVUTSV-010\YXXY-./135899630-WUV,.../1332/.\ZXURQRTUSRRQPRX_`[WUSRQPNKHGJOUYZWRNKKLKJKLOQTY155410/...,+*RLDBDGHIKORQNLKLKIILQUWWVTQNNOQRSSUXZYVTRQOPRVXXVROMLLMPRTROLKJIHGE!DBBDEDCCFJLMLKLORUURNLKKKLNOOOQSTS TTVX-../1210/.-+TQOMLKJGF#GHJLORUWXXYZYUQMMPTWZ.0100.,+SQQSVWV?UTTSSQPQRUWY[\]^]ZVTVY.//.YWVURPPSTRNJIHHIJJLMNLJJLNNMKKNRVWSNKJLMNPQPNJJOUXWUQOOQVWW-/22210.+UVYZXVUUTRQPQQRSUWY./1331.,URQRSTTTU-/1343222321135665556531//135777520/.02345664211221-SNQ-133222,1135530-,,WWX-02467799866677787642369<<=>???>+=<;;;<;;=?=3SJMTWUTX165.RPV.259<=<:9863248;<(>?=95347:;<>?<72..18>?<8410135:?EJLLKIFDB/A?>?@BDGHGFDEHLNMJIIKKJIHILPSSQMIGFFGJKJF?:7679:;<<<;963100135789972XQMKHA6RBGZ8DSbp=ADHJLKIE@;8666788:=?ABCEGIKNPSUUSOKGDCA>95ecej8<@BCDDDEEFFGHJKKJIHHHIKJIHFDB@?@AA@=<=@FMSWXTYXVSPOMLLLMOQQNIDEIMI=1*).49;;;867763110.,TMHEGNZ4ACCA?<8eYUUVUUVX-..YUSU-///.-./001 2100234420]\ [ZYXXYZZZY ZZ[[]^`bcefg%fffedcbbaabdghhfca`__`aaacflqvyxvsrrtw)zCEEC|zywsnmmljfeeda[SI@<>FOVYYXWUSPNMLKJIHIKMOONLIGFGJMMLKHFC@=xvtstvy{>??@ACEHLORSSSRQPPRSSRQPOOONSXaded`_^]\\[XVSRRUY]`a_[WUW[_bdeffedb_\WQMKIIKNTY\ZVTTUWXXWWVUUUVWVNTRRSUVWWWXZ\^^_aflqqnjfdcba```abba`^\[[ZZ[[YVRNMOQSTTTUWXXWVSQPQUZ]]^`abcfj6889487668:=??=;97531_][YXYZ[ZYXY]b49BKSX[[YUQPRTUSQPQTUUTuUSRUZ^]ZZ]bghf`ZVTUX[[WSQTY_fmppomh`YUUVVSQRW_hnmha\YXUNGCBEJOSWYZ]`^[XWVSPPRSUY_cb_\YVSRTWXTOMMOQRPMKJIGFFIMSZ^]XSOMNONLKLQUUTSQNHCABFKPSQMJJOTX[^_^[VQLJLNPQSVY\\YVRNKHGHKLLKJJIFDBBDGILOOLHFGIKMORTTTSQNLJJIIHIKMNOMIFHMPOJFDBAAFLRW^dhgc]WTVXWPG@}CFINRSRQRTSOLKJIGFEEFGILPRPLJKLLJHFEDEGJLKJKLLKJHFDDGIIIHGDA|{~BEILOPNJDzz~DC@|~DHIFCBBvja^erxsomlh_UQUY\clmklqwzxvwy{{wrrw}tkhjjjlu{mb\ZYZ_iu|rh`\[^bdcbachlonkdZQMPW]`^\ZZ[ZXXZ\]^befcbdiputk^RKKQVWSMLOT[fpsnhb\VQMLLKJHHKNPQSSQPRUXYZ\`'eggeb``dinrvyytohc_\ZXUPH@;=ER]`]ZXWWVTSRPOONNNPQQPOONMKJIHHHGFDCA@=:ss;E<=>?@BDGIKNPRRQOLLLMOOLGDFJMNLGCACEGJNPRRPNMNOOPQTVZ^bd34554432dcbaaa`abdeedba__^_`beffedb`_^]\\[[]`cfghj7:=ADHLRW\__][YEXUQNJFB}xtqnkhecb`_^\[[]`dghfdb`_`adg5677763a]^a2467642dcd2eee34456654 5443344566777655hf g4555hfeddef45666igfffgijigecba```_]ZYXYYZ YXVTRPOPQSUWYZZZYYZZZYYZZYUSS %'),.-,++**+,-..-,, +..--,,-.//0 /.-,,,-.---#0.-,,+,-.//0/.-,++,,,*('&%#!"$&''(('&&&''((()*++**)(((*+*)(&%$ +#"##$%&&%$#$$#""!! !"$%&&&')**+++---,-,++*)('')'&%$$##$%&(()***))( )))**'$"!!!#$%&()*)'%#!"#%')))(''(())( '&%$$$%%&&&'((''&%%%$#$#$$%%&&'&%$#""!"#%()++,,,+** '&%$%% - "" #&'$!!   !##$#""!"$%%$$%$#""!! !"#""!!!""#$#" #  "" !##"!!"#%&%$$$%&'('%$$%'&$$%%$#"  !!""##$$#"!  + !"##$%$! 6 !#$  '''&%&%&'()+ (&%$$$%&'&&%%$$%$#"$(&%%%$#$7(('&$#%''&&&%$%(,+(&%%$##" "%(('$"!!"!!!"$&')#"$#"!! !$&'''&$"""###$$%%$#"! !""!! #!"$&%#! !  """!"#%&'%#"!"$%&' $#"!!!  "#$%'('(()(&#!!"$') "! "$%%%$ ###$&'())*+*(%%%'#"!! "#$#! !!"  ""! #&&$!(!"##$#" !$'*)(&##$&&&$$&'&%$$#"!""#%&%$#$$%$#$%"!$#$#!!" !! #h "$#" "#"! !!! !#&(('$"  "#" L"  * '.6 !#$$$#! !"#$%&'()))(&#! //03!##$ +##$%&''&%$#k"! "&*,,,++)(''&%%&'((&""$!"<!""#! ! B!! !!"##"""! !%)+%""!  "  )(()**++***+,,,-/023455677655565789976546678:<>@AA@><=?ABD#$#!@=;9877642221/+% $*02110/.,+*#++***+,--.-+*('')+,+**)'%#C@>>>?AC"#$%'*-/ +.,++,-.-,+*,.36765442221/.-,-./14542/./245765420-*(&&'(+.00-+,+',+*))*,-..--./00/027;=<975543200///.,)'&''&%" "##"#$%%%$#!!"$&((()+-4$"!  !! !#&"'+,-+)''(**)''')*t)+/10../14540,)()+--+(')-159;;;:72-++,,*(),16::61.,,*'#!$&)+,-.0.,++*(&&()*,/21/-,*((*,-*'%%&(('%$$#"!!"%)-0/,(&%&'U%$$'+,,+)'$  #&)+*&##%)+-.//-*'$##%'()+-..,*(%#!!"#$%$$$#"  "#%()&#""#$$&()***)(&%$%&'''&#"#'*)&#"! @A"'+.147884/+*,..+%!?>@!"$')*))*+*'&%$##""###$&()'%$$%%$#""!!#%'&&'(('&%#"#$%%%$#"<;?!#%')*)&">;;=B"";=!$%#!!!CA<6106>FKIE@<97640*(+-/49877:=?=;;<>=<9:=AEFD>878878>EHB930.--06>FLMKE>831246776557:=<93,'%(-2443212210001147864369=<7/'"#(-/-)'(+05;<951-*('8&&)+++,,+**,./0247876411258:=@?<941/..-,)$#,352/---,+* +)((''&'())(''&&%%$#"!!"""! ::* !"#$%'()('%$##$%%#! "$$"!"##"! +"""#$&')***+++,--./000/.--,--.00100//.-A,,,-/12334 "$&)-0210.--./.-,*'%"A=;986543210/.,+,.02210/.,,,-/)*))******). --,--./ 33222344320/ +.-,+***)))* )('&&'()*+*))**)&$$ƁĀ쀏ށ̀ ""LɄׄ0Ɇʀ9ÿ2¾+򃍕򀅆׀y釤ǽ¿é􀈑Ϊ󀄃- 9E¼ƾ½¹7ľ퀇󀇉ɽ¿¸݀ͷ¿ͻøȿBDŽɀ5R%WTTUX[_bdf3332dbaabccbbbc1234467776667 889987643fddcdeffedcb ccd23334579:<;:98765544eb_\\^abcbbba``_]\YWUUUSRQQPQRUVVVWXWVUUVWXWVTTSTTUUVWXWUTSQPONMLKJJLMNOPR)QQPPPQSTUVVUTTTVWWXZ\^^^][XUTSRRSTVWXXXWVUTSDQPPQRRRQPOOPPPQQRSRRSTUTRPOOOPQPPPQPOLKJJJIIJKMOQQRSTWYZZXVUSRRSSSRQP/OOOQRTTRQOOPQRSSSTRRPQRPONMLLLMNOPPONNNOPSUVWXZ[#\]^]\[YXYZ...///01233444332334556678789;=>??><<<=>=<:9`8878899:;<;:73/-**)***UUUTRQONPUUQMKJGEFJNQX032.URQQONKHEB@@CHKLKHFCA@?@AA@??@ABBCDEFGGGFECBAACDEFEFGHIHHHIIIHHIKMNOPOMLLLKLNPQRQPNLIGEDCCCDCCDEFHJJHFECCCDFGIKKKLNSX]`1112*0_][ZXWWXY[[[ZYYXX-047888776667789;;:83^ZZ."\YVTRQQPOMLMPRSRPOOQRSRPNNOONMLMNPQXPONNNMMLKJJJKKKLNPSVY.00.,++,-.0111/+MFCG(.2430--/1234543235676421012210//00/.--../.-YYZ.///.---.-YYXXWXXYZ[x\]\ZWTSSVY./01110//...--XWUTSSSTSRRRTVXZ[[[..\XVUUVW,--./244310-VPLKJLOSX.//-WVX[/]ZWSQPQSUWVUSRRSUVVVWWUSQPPRW.132`ZTOMLMPUY\[[\]]///.WQMLMLKKKNRUVUTRONOOOMKJKMPRUVVTRQRUYZXUUVWVRNLNPRUY[.[WRLGGHIIIHHILNNMLMPRQKGFJNQQNKKNQSRNHEEGJMNOQTWXUQNLLLNPRTWX-./122320.,*SSRQOLIFDCCDEGIKNPQRRRSVXXURPPTWZ./0123310.--,+TQPNMLMORTSQQRUY]000\YX.02220.WSOLLMNOOMJGFFGHIJKLMOPPOMKLS\11\UQMKJLNQTVVTRPPSX--XSMGFHLOQU.:25530/.,++VVTQMIJPW].YTSTVZ.00110/.-,,WVTT+-/123321///02334Z31/-.03689::987665432223457863-QOU.23310/./00/.../00/048:996558:<>>=<:87789:<>??@@ACDDCBA@?>=8-<&739C)4BNUWVTUWZ[^37<=<;:86556667789:<;9779;>@CED?5P:2;K-4898654568:>ACEFGGFECA>=>@BCDEEDCCFIMNMKJIHHGFFHKOQRQOMJHGIKNONID?P=<==<<;<>?><9643212345799852]WRMG=/=%9@.IrO`ksACEGHGGIJKIFA=:86jhjo:;<>?@ABDFHJOKMOPRSSTRPMKKLKJHECBBCDEGIMQSTUVVWWVUUWZ[WSRTRI?:9877888669>CE@82/.,*+.134433346P79975454457850-/24678764334431/00/TF6*$'1BT0345443235541ZSQV./.-WW-0234531.YX,-./013443210/.-,---XVTSRQRRQOJGHMSVWVVWXY[`38;<;9 864210//.../00123332221000/.011/[XWXZ[ZZYWVVWWWVTSRRQQRSSTUX\`ceffefgjmooonmkigdccbCdgjmoppnmmnqqolkmquwxxwtqmighihe`[YYXTLC?@FMRTUUVWYZYUQMKJJIHGGGFGHIHHGEB@>>?@BCDEFG FEEFGHIKNQTU VVWXZ]^^]^`d{a`[XWWXWVTRSUVWXYZ\^ac_YSPRW^dfaVLJLPQRRTX^ceb]Z[^bfijfa[XWWWVTRRTXZ[[\^aceedcdfhkkkihfdca```^YTQPQRSTTSQOLKIIKOSUUVX[^acccbcdeg45i6899::;;<=@BEGHHEA><975ea_^//000/.XUTX^38@IPUWURPPSVYYWUTWYYWTSXajlgbab`[VROOOPPONOQSUVWWVTV\cgfb]YVUWY[]^_adffc_]YSLD<9ADGHIFC?>BHMPRRRQOKHFDDCDEGGFC{yxz~CGHD}topv~ADxrnkjknqttvwvoc\_emptnf^[]chiijnsvutttvz{qjgghmruqjc\YZ`iov{{vsog_ZYZZ\_cghhkr{|paWVZ_cgjjgb`adedcb`[UQPS[gtzwm`VPPSUVWYYZ^flmic]XSNKHHHIHFDFNZcjptrg^[\ahpuvsponnnpqpkebdec]Z[^a`YPIGLSY[YWUROLNRW[\ZWUTSQPOPOOPPNJFEFHKORQKB==@BA=:;=>ADHLPSRRRQRSUUSNHC>wroligec`][\^befedcbabceg567765432345542dccd345542333445665554434 gfdccdefghiklllkjiihhgedba`_^^]]\\[ ZYXXWVVVUUTTUVUSSTVXZ\^`a`^Z +(&%%&(*+-.-,++**+ -,,-.-,-0.,++,-.- ,+*('&&%%$%&'('()(('((('&%$$$%&&'('&&&%$$#!!!""##"#$#$$%%%$$$%&&'()+,+)(&&%%%&'(((''& %$$$#"""$%&&''(('&%&&%%%&%$#""!!! !!#$%&&'()*)('&%$$%&'(('&%%%&'%%&$$##"""#$%%&%$%&&''()*)(('%%%'] ! !!!   !!!""!""!!!"#$%&%%##"""!!!""#$$#"! <  !!!"$')*+*))(''')))(('&%%(%%'&%$# "! !"$$$#""#"! !"!"!  !"#%)&&')&&&%%%&&&''()**))***(&$$$%'%$##"#$%&' (&%$$%%*$! !#%$#%&('%#""$&'(''%$$%&'&$##"#&+($"!!"!!#'*+*%"! !! !$%%%$#"(! !"$%&&%$##%''&$#$$$"  !#$%&$"7 !###"#$&%! #%%#! "$&%# !"##%&'&#"! !"#%&'#$$$#"  !##$ %'((&$##$&'*&$#"! !"#$#""#%(*(%$"! !"$$$#!  !#,"!!$))%"  "$&''&%$$&)(%! !"#(%%$!!%(&###%'&%## !"!#""#$&&'$"##"!  "$&&%#"  #%%$!$! '>)169 "%''$"!"#$$###$%%$"3369 !!""#$%%$$$%%&'())(&%$$#"  !#%'*-.//...-,,.0/,('(& P !!   + +  !#$%(%$#$%&'''&''&&%%&''())**+,.14676 89;===<;:9876G5579;=>?><;;<>?=;9:;>?>==<;8533431.+)**($#).11001221/,**))*)))())**+*.)(&$###$$%%&&'''((('&''(()+./0//000///012454568Q6520..//.-,,-.///0135751,**,0464.'%%(*++,.1453/,,-035641.+**++*))+-/00012455544568.75431/-,*($"!!"#$$$"! !"#$$$%&'((('&&&''()` !!(%#" !%#'*,*'&&(*,,*((*,,,++.5;<954430,(&&&'&&%&(*++,++*+.36640-++,-./0:13431.-*'# (/4763.+)'(*,,++,,++,.0/,*)(''(((&%#!"#%''&%)$$%'+143,&$%&'()(&&)/442/+(%" !'.0+%"$).1/,(&%%%'(*,.00.*($))('%#$%%$" #%'(+./,(&&(+.00/022.)%"$&'%#!"%*-.+'%#!>>@C$*276311/,*)($<46>#&&%$#$%%%')+,*(%$%&&%# !%)*(%##$%%# ;;!"$%%$"!%)+,,+*)'$#!! "#$#"@=<;:3.05:=?;5/-.255446:;;:;<>BGKJC<8778:>?=950..27;?BEGGEBA>:521101246668>>?@AA@?><83.)PQSTSRRSTUVVVW-..-WSQRTUTRQQRTX...XSPNMLKIHFDCDDEFFFDA?>=>?@A@ABCEFFFGFEEFG(FECBBBEGJKMNOPPOMKJIHFFFGGIKMNOPNLJJLMLJI(JKJHGECCCDDEFHIIHGGGFGHJKKIHIKMOOPRVZ.//0#_]YUSSTVVSMGEGKOPQQRSTUUUY15788:;:98&9::74210.ZWVVWVTRQPPONLKKLNOONMLLMNPPPOMKKLMOQRSRQPPOMKIHHHGHJMOQSUX-.//../0100//.,)P)+.0.+T*,.024555420/.-./.-YXWXZ./00/ 0100/..-WUVWWXXYZZXUTUX[/13320.,VTTVXXWUTUTTSRRVZ.///^\ZWUSTUUVUTRQRV,M+UQNMPTWWVV+,.//000.VRRV[]][WTUWXWSPPRUXZ\[XUSSV.2320.YTPNKIHIMSXZZYVTSSUWXXWUeTSQQRSTROMKLOQRRSSRQOMLNQRRRSW[]\ZXWWXUOJHILPSUVWUSPNNMKGDBDFGGHJLMMNNNMJGFFILMLJHGEDEHLOONMMMNPSTTRPOP QRTW-.01210.-+USPMKIGECBBABBCDFGIJJKLOTWVQLKOSWY/37;;:852/..-*OLKLOS+,-.-UPLLR-25630,,-0221/ZVQMIGIMQQMFA?AFLPQPNMNLGABLVYUQPSTOIGINTWWVVWY-.010.SKECFJKKQ.3543211210.-,VQKIKQTUSRRTUVVWY.0133442/-,,++,03541/-,-.0/-,-/110//0233568998999:997433445431/./13332234663.SKGHJKKNQV04688:99;<=>?>>>??=;;<=?ADFFC@?@CFHHFB?<;952.,-/01135531]ZYWVTST[38;<<:8779:998878F9;=?AABDEC=5.+,/259;;:987799:<@DGGEEEDDEFHJJJIIKMOPONMLJIHFDDFILMNNNMKI +KMNMJGDB@?>u==<;:86432111013320/[WSQOG6D%/*5&@iK\dhm:>DHKJHFDBA>;99:;<<:88999:<>@@BDFFEFFHHEB@?><97778:>BEFEDDGJMNNMLLKKJJKLNNOQRSQOMLLKKIGEDEGHHIKLNQW]``^ZSJC?=;9751+LN.7@GLMIB;522589:8532234454332221012331.XVW-03431__1320..010-VQLHGKSZ/..-./01369:9632233321/-WUUV++UTSU,./0//.0120110/..-./.YVTUUSNGDDHMPRTUUTSRQQSW[^02465311122201100///...//0112110.ZZ[\\\]]^^]\\\^_^]\[gZXUQONPRSSRQQRSUX[_cefgghiihfdeimpomljhfeddeeeddeeefhknqrstsstvyxupliikmmlhda^][XSOKIJMPTVWXXY[]\YRKHFGFG FEDEEFFFHJMO4NMLJHFGKQW[ZWUSRQQRSSSTVXYZZZ[ZYWURSQQQSUUTQOOQTVVVUT&ROLKKNRY][UPQW_`][\bimmieccfkpuxxrh^WUT1UVY\^^_abcccdgiklkihgggffdc`]ZURPOOPPQQQPOQV[`cddcdf4566544579:::<=@CGJLOQRRROLHEA=:8765322233221/.YVVX^37<@EIMQQPPTWYYXXY[\\\]aflrsqmie_YTRQQRTX[YVTTTSRPPPOOPONOQTVWWVTUX]bdda`aa`^YQG=7g6?NZbghe^VOKKLNPQRUWXXY]adb]Z[\_bdb[RJEDFKPUVTRONNNPRTWZ[ZUQOMMNRWZZYZ]bgkmmg\URSV[bghgedhmpkd_\ZYXUQNNNPRTVXWSNLMQVXXVTRRSSRQCONLLNPTX]cgikjebabceipusgXOJHHIJKJF@<@JSZ`caYQLHECDGLSY[[ZXUPLKLKJHGHHGD@@DMV[][TKCBGPVVRONPSUUOHDDDB?>@BCDEFEDCCB@AEMUWUQNMKHFFHJJGDA~zwux}~|xtpqw~~ywzwplhhkortsrpkhfglqwxtqmighkmljhhijijlmkiiq~zi__bda^\[Z\]^`fqz}zxwupg[TQRSUZagjlnsz|o`TQV_fijkmpqpquxrgYPPVan}ylb^]]][Y[`dea^]^^\YWUTTUSNF@AK[jrrssohb`bhovyvpjeca__^]]bhkh`YVVVWY\^\XVY[XSPNNNQTUTRSW]beeb]XSQRTSPKIILNNONKFBBCEEC@=;;<;qnq@EIIGFFIMNOMKHFDB>94249?DGHIKNOONLJJKPUZ]1355566651432b_\YWWX[^abcdddb_\ZYYZ[]`bdeeddcccdgjlmkigedefg,h579;=@CFIKLKKJIHGGHIKKKHEA=:qmkhfdbaaacddca` abcegj677654*332eddccdefffedccdegggfedbbaaabbcc1122234565432223343fecbabcdfil7mida_,^\[[[\\[[]_``^\\[[ZZZYWUTTUUUTRQPQRTVXY[]_bd/.,+)&%$%(*,+*+ ...--,+,-.-,+**)()+./..--,+**('(('''()**))(''()(('&''('()*)(&%$#$$%%$###$$%&&&''&&%&&'(()*+++,,,+*))((()(('(*,--,+*)(&%###"#$%&%%$#! !"$$""$%'())(%#! !)""#%&&%##%'*+*))(('&''((''(('&&&'(((''&%%$ %'*./)'%#"$%&%%%&()+,+*)(''      !"!    <  !!"!!  "#%%&''&%$#!  !#$$$%$#""##""!!!""#"!   !!  !""#$%'++)&%&'))&" !!!"#$$$#$$$#" +!!  "###" +#$$#"""##" !"#$##"! !"#$%& &%%%&%%$%%%&'()('%%%')$##$%&%%$ #""%')(('%$#""#$ $" "$%%%$9$"#%(**)'&'()'%##%')**)'%$$&'%#" !$&''&%$##%&''&'&%#=$#"! !"##$$$##! "$%$#$&()(&$$%%$! "$%&'&$"  ""#""!!"!! !###"!!#$%&%#"!!""# $%%$#!  !!!$'('$! !#%%"  #V#! #'&$" "%%"!##"!!"! '*'$#$$!"&(('&&'$  #%" $&&%$$$%&% #>'&&%%$$%)!""!!"#$$$##"! !"###"! V !"##" !  %=*1457!#$$"  !")!"#"!"$$#""$&''&%$$$#""#$$%&'('%$3#"#$%%&&'(*.121/,&  ##!(!!"  $#!   ""#"!  "$ +""#$##$$%'(('(()**)(&%%'(***))*+,.035678986557:<=<;:98777637789:;=>>=<;;=??=:76567752/,+*)'%$$%')-/011135663/*() ((())('&&'()+,4+*)(&%%',03421/.---..--.0122332210.-,,+,---+*)*,-...-1+)('(+/11-))-3652248;;953246:=AA>80+)(()))+-/01124,67888766654320-*(&$#"! !""!!!#&()))(((''( "#%&''&$" 4!!!"%!#%''&&'*++**+-///149>BB@<851-*)(((),-,*)(M))(''(*,./.,,-146531010/,' )%.46750*&##$&())+,,--/242/--/0232.(# !#'**)('(*,./-*'&&'(+/10/0379;=<70+)*,047753248:61.-,,+*(&&'(*+-.-*&%%(+,,*)((*+*('%$$%'),048:<;976777:?C@8.(%$$%&&'$ &,15640+'%#"#$'+ /0///-*(()('&%" !'.242.'"!%+00,)()+--*%"!"! !""###"! "',.-*(('%""$%%# ==<::=ABCCBA@=977;ACB?=?DHGC>;8668:<===;85459<@@>;8544687544566679877=FIC7003431//./0126A>6.'&(.6?GGA81./121002331///0//.P-+&!!'1;74322210.04761,*+,.0221..021.+*))*-.-++-035541-*)*+*(&%&'(A&# "##" 756!##! "$%%$"!  "##"!  "#%,+)'&&'),./01221/-,++,-./010///1257764210012 + "#$###$%'''&$!987643100012210/ 0012--,,,--.--,-,+*./0010/./135640-,,,-..--,+**++**+,---,+*)('&%%%'()))*,-//ȁ€́~~~ҁ Pք1Ŀ }¿ÿC̅4 نۀǾƾ¾"恊tױ帼u(̼¿ÿ̀¼¾'ú¿ԶŬƿƿ˽򁇋q 8߅^__`cefd_ZWVWWXY\`ce!cbbcdedbbbc22334556789:::;;;:865543(hhhgfedcbaa``a`_^^^]\ZZZ\_`aa```b23332ef4gfecb``_^][ZYYXXYXXXZ[[[ZXWUUVVWWWXYZYXXYZYYZ\^___^__^[XUTTUVW VUTTUVVVUTTTSTSTVWWUTTUUUVVVWVUTUUVWXWVUTSTTUUVWYZZ[ +YVSRQPPPQRS>@BDEEFILNMLJHFECCDFHHHGGGHIJKJIIJKMNONNNMKIGFE FFHHIJJKJI*JLOQQOMMOQQRRSTTUVWWVVUSPKHGHJKJHFDDFILNNNPQU[146875310/ \YWVVTRPONMKKKLMOPQRPONMLLKJJJK MNPRTTTRPNMMKIHIJKJJJIIIKNQV[/110%12211000//.-+*TRQPOOPS,.0245543222110/001123320.--YWVUSRRTWZ./0//.-4.//00///.-XUTSSRRSSTUUUVXZ[ZXWWXZ.011/-WTRQPQRSRQRSTUVXZ[[ZWVUTSSRSSTTRQQQRTXZ[ZXWX,XXY-./000/-,USSX/11^XRPPSUUTRPOOOPQRTWY/1331.-XVSOMKHGJS_33_XQKGHMRVYZ[ZYWUUVY\]\ZVSRSUXZYVTSSRPOPQRRRUZ]\YVTSSTTPLGEFHIKMORUXXUPJEBCEG"HIKLKIHHIHILPTUSQNMLKKJIJKMNOOONNNONNNOOOPRTWXZ-.--,,../.-,+USQNLKKJIGEDCCBBBDEFGHIGC?>BKXe8ACDDCBAA@?>;86566420//13431^^02331_\ZWUTX_4:>>;778::;;;:987779:<=>@@@??ACEEDCBA@@??=;:9765679<@EGHHGGFGGIJJJKKKLLNPQPPONNL)KJJKLMLKJHFDDEFGHIKLLKIHGHIHD?:620///133324552[TTTM=Q0;+-A;mThqqo8;?CFHHGEDDEDB@??@BCDB@<74eei7;?ABBBCEGJKKJHD@=:76678:<>?BEILOPQQRSRPNLLLNOPQRSTUVWVVUTTUUTQLHECA?>@DGJNT3[`ba_ZTMGB?>=<;::;<>@BEJOSSQNKJIGFDB=84333212221/./1400/[XTQQPONLMOSVXYYYZ-..^\YUTVY[[XUSSSPMJLPV./0//0112E10-WWY../000/.,XXWWY.00/../11/.YWUSQOKHGILLKIIJLORRSTTSQPTY^__^\[[[././0//.[[[\]]\\..//010/.-FYYYZ\_begiiheb`][ZZ[[ZWTRRSTTSSRQQRRSSTUWY[^aceghijigfgghgfeegikjiijjijHlmnprw|~|wspppomllnppnmkkigd`\WPIEEHKNQRQNMORUUSPMJF|}EDCCDEFGHIJJIGEFFFGILNPRTWXXXWVVVWVTS RRQPSRTRRUVXRWWXXWURPNMJE?;;?CFHHGFFGIHFCCGNTXYZZ[\[XWX\__\ZXWWVUUUVXZ\]^_```_]\]__^\[[\]^_aa_\Y,XVTTTUUUVY]ch55eaac2445566789:99:;=>@ADHLPSUV,USPNKIFDB@??>=;8643322110.-YWWY]b5:?DJOSUVXZ\]_abbcfmu|}ytplha[VSPOOQUWWTSSSQPPQPONQXafgffhjhd`_^][[\^\XQKE?<CGGEEEGJJHC?>BFIJIGD@;88:=@A@>>@EGHIKOTY /12345677788765543c`]ZYZ]aceedccb`_]\]_cfhijkjjiiijlnppnlifcaaabbcdfil8;=?ABBCDEEECB@@@ABDFGFDA><:8nkgca`aaa`_^]\\\]_acdfg45543eedccde344gedcdeefeeedccba`__`bc2 345567655434434hgfedba```bdfgfc`][[\+[ZZZ\]]\[\]_`aba`_^]\[ZZ[[[ZXVTRQQRSSTUVXZ\ +,-.011/,)'%')+---,+*++, ../...-,,,+,-.-,,+**)((()*+,+,-./.--,,++***++*)('())*)((() (()))*)))*+++*+,- ,*(&&&''((''( +''&&&''&%%$%&''&'(''&&' +&%%%&&''()*))'&%&'())*)(()('%$#""! !!!#%'''%$##$%&'((('&&''('( '''&&'(''&%& $$#$$%%&&&'(('(''&'' +   !#$$#"   !""###"""#$%&%$#!!  ! !"$%%$#"#$%%%&&''&&%%$"!!!"#"!  !#%$#"! !"#$%%%$#"""!! !#"#$$%$$#"""!  !!  "#$'"""!! "''%$#""#%&%$$#$$%%%&'()('&&'(%$#$#$%&''&%$%$$#""#%'((('&&&%%#""%*&$$%')('%p$#$$%&'&%#"  %++'# #&()***)'&&'(**)'%$#$%'('&%%$#""#$%$$%(*)'%$$$%$"  !#$%&&$! "#"! !"%''&$#"!  ""###"##$###$%&''%$"!   !  &+'!"&&&&'())(%#!!!"!  #%&'('%#!!%(& !$')*%"!  $%"!!"#%&((&%%&' &%% #!((*('&%%'* !"#4""##$%%%$#"! !"##"  !"""! !!!8# ! ;,7;;8 """!! !!!  !! //2 !"#$%%$#! !"$'()[*)('%$$$%%&''())***)((()*)(&#!  "$&)-14430-(" #&&%#"! 1!  !"%$" !##"     +!  !"""!"%&&%$#"""!!"##""!!!"#&(*,--,*('&%&&'()(&%%%&'('())***,-.012345665545679:::9 +::;=?ABA>;:-8778986420.,+)('%#""%(+./.-,,.00/,*)'KHHKOQ('& +''()**)('&%'()*,.0111222100110./--.-.--/0121100//00/.-,+)&""$&&&$$%&'&$#$(,/0 /-./10.,*))()+-./023443111231/..- ,)'&&&%$###$ %'),)&&& !$')*K)('%$"!!!!#%) #&)*++-...-.012346?!$)-.+%! #&)**)(&$#"B>;9879?DGECA><<@DD?;:=BFFEMDB?=;::9754467789;=;:;=?><:744467753212249<<8435762/.0110.,,05:>ACB@<8521/-,-/%16=ACGMNE5(#&+/1259>?@ABCDEFEDB@?>= ?BFIIHJKLMLLKLLLMLKJDIHHGGHKNPRSTWXXVSQOMKKLLMMMLLKKJIHHIKNPPPOPRSSRPNMLKLNOPPOMJHGHJMMLJI JLMOPRTVX\03454~320/ZXVVWYYXXYYXVTQPOPPNLJJKKJJJLMOPQPPONOOQSTUUUTRQPOOOPPPOMKIHGGGHHJLMLIGGILOT-0110/.---.///..///.-,+*RPOOQSV,./1344310//...-2./02220/-,YXVTSRSSTVX[/00\XVUUVX-/000//.-,UTSRQQRST'UXZ[ZWTTUWZ\.///-,URONNQTVUTTUVVVWWXYYXW"USRQSTVVVUSRSVXZ[ZXWWVVX-//.-XWVWX,ZWUSSTX/11/YSOMNPRRPLIHJMPSWZ/25652/-YXXXVRLEDGOUWVTPKGFINTY]]YURRTUWXYZZXUTUY]/]YVVWWUQNMOPQRMQPRSSPLIJKKJKNQSTTROLIIIHGFFEDEFGIKNQRPNMNOQSUVUSPLGDCDFIMQSSRPOMKJJKLMNPQRSTUQVX-.00/-UPNNNOQSSPJECDFHJKJIHGEA=:876;I^8=??>:51/011126:;72-++.0//.-VRMKMPSUXYXWWXY[[ZXVTQMLMOPOMLMPQQQSX.0/XRLGEGPVULC?AFGIKOSW[..ZXVTUX-XRKDACKV031-+*,,,+RNLLORTVWXY[/12320.WUTUWZ.ZVSU-/01221/-VSSV,XSNMPTVX.0A110001369;<<=>?>;999875320///022234552/.035542/VNKR/47656655565578x7778999;>BEFFDA><;;:::9753101231]ZXWVWZ\_b22a]\/37973248<<:8445799;=?@@>===>?@BFHHFDDEGHHGEB@=:8667:<>BDDCCCEFHJLNMKJIIIJIIJKKKJJKKJHHGECA@BEHIIJLNNLIGFDA;62/---..//.ZYX]baYL:Q2>*'44kVlw>>>@CEFFEC@?@BCBA?=<=?AEGEA<74edfilo9:=@CDDBCFIJJGB=731cdedcd5:AGKMOPQSTSSRSTUTRQQQPOOQSUVVVWVSPLIEB@?>?BFKQ;:;=??>>>?>==?CGJLLKIFDDEDB=73235899620.../001110/\WUV-...ZWTNIHLSVUQMJIKMMNMKHECEHNSX\02443210111.VRR+.02344310/[YZ\^^\YVUVWXXYYWURPOOPPOMKJJID=9=GPUWWTPNT.0/YWWXXYZ../111/.ZYYXW'USSV[_`]ZXVUSSV-/0/-XXZ\\\_bbZLA:;@IQWYZOYVRPOPQSTUWXYYXWWVUUUVXZ[]`cgjlljihhgda^^_`bdgiklnqtvy{{xussvz~}xsppqng\UZcjidb[`\WRMKLNPQSVXZZ^bdbZPEynkkllmos{FHHFDA@>>??@BDFIKMOTZab_ZVSRQRSTUTTTUVXWVUUTTUUUWUSROQOPQQRJSROKJKLMMOQTUUTROJE@=;=DMW]`aa^ZVTRQRTY]][YY\]][YWWXY[\\ZXWVUVWXXVTRSTUWXZ[ZZZYYYZ\]^]\[\\\]]ZXXZ^accba12358::;<>@DJQV[]]\ZWUTSQPNMLKJIHGGFD@:eVJB?BJRXZ--[--,WW[e9>CGLORSTUWYZ[\^__^^][XVUVWWWUQOMMLLMQUVSCOLJJIHFEDEEFGMXcjllkjheb]ZY[`c`ZSOMKJJLPUYYWSRTXYUOLMQSSSTUVYYUPMLMNO LGDDJQX][VPM*OTZ]__^\XVW[_cff`WQPSV[aghc[SLE@|HQ[aca_]\4]^^\YVUWXXYZ]_]YUQPPRTTSQQSUVVTQOORTSSUY\]^ahnmga\ZWVTRPMJHGEEFHJKOUXWROOQRPMLKLOV_db\VTTUXZZXWWTNJHGFDCEHMQOKGGHHILOQSTVVSMGFIMONLKLLLJHECA@@BDINPNHDDGLPRPLIGGFDzsoljmu~{rnpzzutttuwy{yrljmlkmpwxwvtsrplgc_^`hr|xneaadhklkihkprphcdc`\YXY]dmv~{pd^\_ba^\XTQONJGGMYgznZNIIJKNVcs~si_XVY^`a`^]]\YYTRU[adddb`[WUVWYZYWUSRPKC<;BN\ehggilnqw{ynbZUQPRW[ZVQNPTWVTUWYZ^fmpoljklmjd]VSRTVYYWTQPQRzSSQMJHFEEFGGFC?9jl:>?>=;<=@BDFHIHHHIJJIGB?=>??>>@CDCBBCDB<77>FMRX.01223344567899987666543db`^[Z[^`bcdfhiiihggfghjk677766778qqqpnkhdb___adgk7:=?@ A@?>===<;9 ;=>=;97ljheb_]\\\]__^]\\\]_abdeg43edccdfggedbcdfggfeddccbbdddba``__`abcdd3445566777655444hgedeeedb`_^_`aabcb`^\[Z [\]^^^_^]\\^_`abcccb`_^^][ZYXVVUUUVVUUV+'()*+,---,+***)'&%%&'(*-++,-...-,,,. .-+.00/-,+*))(('&')*+*)()**))(*,,+**))()***)())*))()***)(('''((())**++***++, +*)'&&&'())*))('&'('()))'&%$$$%&'))**++*)('&T%%&()))**++*++---,+*))())())('''(*,-,+*)(&%#!!"#$$##""!!""#$&')*+,,,*(&%$$$%%&'((('&%$$$%%&&'(()*+,+)'&$$$%&''&'''&&%%$##$%'&'())('&&&%%%&B   !""! ""!  !""#""!#""###"! !!!""!!!  !#%'()*,-,+)'%$#"!!  "#$###$%%$#"!! !"#! !#$$#!! !"#$%'($#!!!""!!!"""!  !!!  !"#$ #$$%''('&&%$$#"! 5 !""!  "$#"""##$ &'&%$##"#$&'(&%$$%&$#"#$"%'()(&$$$&'($#! !#$%$##$$$%%&%$#"#$%&&%$$%&())('&'&%$%%%%$##$&($#"$&''%" !"$%&'$%7# #'(&#!!%),-,)&%%&'())*)'%$%(*)'%%&'&#!!"""###$% $$%%%#  !#%%%$"!" "$&&%$###$%'('&$!!$&''&%#"! "#$$%%&&&%>&$! !"$$" !!! ) +%#!!"#%&''&''(('%$"  "#"! !#$$#$'($ $('" "$&()(&%%%'(%!!'#! "#%&&''(%$##$&&$"##""%&# !#$%!% "*%$###$&(+,+)(.   !"$%%$""!!!"!   !"$%#!"! #&%! ;,59!/   "#"./1468 !"! !"$$$!02 3!$'((()*+*/++*)(''&&%&()**+++)'%#! !#&+/357871) !""" n"! ! !#$! !""! !!"""! "##!!$" ! ;! !#%&%#"! ! !""#%')& !#$%%&&&%$"!"#$&&''()(:))*+-/1367876544210013467899:<>?ABB?=;;=ACDC?;:::95/**-00-*)+,,*(&&(*,-.013346883,&B>=?@@?>?DJ(*+*(&$#$$$%&()+-15652/---./010///0/0/.,*+*++,,,-...,*)**+,,."-,*'%" !'-13320.,+*((),./-+*+,-,*+-./..-,,,---+)(()('&%''(''&&%%$$###$&'(&%%A %*,../.-,+*)('&&&%%$#"! *" "#"!!#)!$'()**,-.//010.-,+)'&%%$$%'*+*'%%%$$#"!4"&-378875320-++-143/*&$"""%(+./-*(),-*&$%'()***+-/,)'&%%&&''%# #(,/.*'%+&)-/1110-+,.25773,('(+-15740+&"<=#)/343200/20/.,*)*+++-/0/,)'&'())('&()++*)'(+-,+,/1235:>=82/,*P++**)'%#"!!#%&'(,/.*(()*('&&&(-3762-+++-/.,++)&#"""! !#&)(%###$$&),-/01.)%#%)*)('&$"!!!"$'*,*%"!#'*+*'$#B=97656;BGHE@;8:@GKKIFB?>@ADGIJGA<879778:>??>=;742015;BEB;522368876569;:633320.--/39?DGD>61/134431/,+*(&&*1:FSVM=/'$%&'(-5>HMLF?92-,047875321/,*,15775320---./0/.---,("&/58876789;?BA;2-*)),/220,*,.0/../0138=>=:99:;;73.,+,-..-+)))*+)'%$#$#" 14 !  "###"#$'" !-,+*))*,./001233322100123:;;;:86420///012'76420/.---.///.---./011/.../0110.../1110///..---,,--,,++*))*++,,-..--..///00/..---.-,,+,-/0/..-..///..--.//..--,+*))((('&ˀ̀ꀆ~ʀ 85O܅Ԇ"ڄـ9žĄ3Ʉ˄OĿȭ󀂀҄T +ȿ̱ˍʯŔ򀉓ȼžк½2ƽŽ׀ž÷μƾȿºĿE,$:TSRSSSTVXZ[]_``_^\ZXWWY]bgj5gdbabceeda_^_bdghhgfeeef455443454 fdbbaaabdedb`][YWVUVWWXXYZ[\]]^`bba`aaa`Q^\[ZYYZZ[[ZYYXXWXYZ[[[\]]]_`123432a_]]]^^]\\]^_```abba`^][ZZYYYZ[[\\\]^_^\[ZYYZ[\]\[ZXWWVVWYZ\]^___`aa_][ZYXWVVWXYZZZYWWVUVVXYZZZYWVSQO(PQSUWYYXWVVUTRQPQRSSSTTUTSRQQRSTSRQONNNPQRTUUUTTTUT UTSSRRRQRONM(LMMNOOOPQTVYZ[[ZWUTSSSTTSSSTSSRQPONOQSUVWX7Y,-/01221-RMNT.1355677642/,(IGHLOQSTVVVTRPKF@>?DHHFDDGIKHJJIHHIJKJHGHIJLMNONOPRTWYXVUTSRRQPPONLJGDB?>=<<==>?@@@???@BCDDCBAA@@?@ACD EEEFFFGGHHHIJLNPQONMLKJJKKKJIIJLNPRTVVXYZYVSPON MLLKKJJIIJJJKJLNPQQPNMKIHGHIIIHG+IJKLMNOQUXRE7/19FS-.-YWUSRRSSRSVXXWWVVUTRPMLMOPPNMLKLMOQSTTTSRQQRSSRPNNNONLJIH JKLNOPQRTUX\/0 //..--.//0/..--,++,--../13443220/...--.(//.,WUTSRQPQRSSTVXYZ[ZXWVTTVX-.///.--,,+W5VUTSRQQPONNORVY[..012221/.-,,XXWVUUVWWWVUUVXYZYXVSPOPOePRTUVVWXZYWVVWZ.0121/.-YYXWVWY-//..[ZYXWURPONNPSUWVSOMMNRV\26741/-WSRSSQLGEDEIPW\\XSPNOQUXXVTTVY[[XTRSFTWY[...-XTQOPRRRQOLIHIKNPSVYZWRNJHHIJKLNOQSVVUROKGEEDCBCCEGJNPPOMLLLNPR4PNLJGFFHKMNOPPPOMMLLKKLMNOQSTUUUTRPNMOSVWWWXY--YVRNMLNPQQQRRSUVTOHDDGMSWY[\[Z-/146:=<940..011/-,,,UPNNPRUWWVVXZ...[ZYXWVWYZYXWUTRRQPPOLIHIKNU\_[TNORSOHFGIJIIJKMOQSVWVTSU.11XKC@EO.331-SOLLMMLKKMPRSRRTX\_01232/YV.USTX/36899751.--,TPMPVY-./00//../025789::987678997530../122/TKIMS-/12113407678:<<:98776669?EIJHC>;:::9889:;;:8533320\ZYYZ[]V`2479:8545:?BA>:779;=@DIJJGB>;;;=@CEDB@@ABCDEDCBAAA?>===>@CDDCCDEFGHJKLMOQRQPMIECCEHJKLKKJHC=9:=@BCBBAABDFIJuIHEA;40...-+RRV[\VNKNSWRE2B(0&-&J@Xem:?CDA=96fd48<>@@@>=<<=?ADFGEA<97778:<>@CFHJIIIJMNMKGB><:9864fh7;@EJMOPPOOQRRQPNNMOPQRSSRQOLJGEB@@ACFJOSX^dc[OGA><':8779:;;=>ADHKLLIGEDCA?;853345676544333432=0.,VTSRQOJGGJPUWUPKFFJPSRPLIGFGIMPRSTTTUWZ\_00_ZSJDACEFIMQTWY[zZVQMKMONMKIIHJMPRSTUUTSSTTTRMFABISZ[WROOSVXWVUVWWVUVX.//.ZWVTRQQPPONMLMNNMKJLNNLKMQTUVUTSTVXXWSKA::@GLNOONOPQRSRQNKKLMOPQRQRSSTUVVUTTTVY\_aba``acddeefhjkmprsssrqppprx~AA@|wsmf`_`_WNJNW^ceffec^ZXXWVTRQQQRSTTRK@ob\XV]iwEEDA?{|@BDFHHHIJLOPPOMKIIMRVXVTQNNPSVWWUTSTTUVUUTTRTST>SRQPPQRTTRPPPQQRSRSW]bda]YVRONOQTY_floojc]YXXWVTSRRRSSQONMMLKKLMPTWYYZZ\^_`a`_][YXWVVVWXVWYZ[\^ad222346789::;=AHR[acb`^][ZYXWTRPONMLKJHFDA?;6bZVVW[^///.-ZYXXXY\036:?DIMSZ`ddcdgikg_UNKJMOQQRRSTUUSPNMMMLJGGIKLLLNRX]`chnqng`^^__\XTPPRSQNNPSVWUQNSZ_a_\YXZ\]_adc`^][XURQOMMNPRUWY\^^\UNJHJNRTTSTTSQPOPRVZ^beeaZSNOSY]^\YVTSTVZ^^ZRKD?~CLXcih`XRNLNSY]^^]\\[ZWUTTTSQNJHGFFGJMPPPNNOOPU`jmiecdffgjmpoke^WROPUYZWRNJIHGFGIKLNOONNQUXYWUVXZ^cfbZTQNJGILOOMIEBBCCDCCEGIIGFGILMLJGECDFIHGGINRS(SRPLFAACGJKIFCABDGGDA}~DLOMGB~zurqsw}}{z{~HLLJFxvwxz||wpkgaYQLNVbnwzwqljkmnmlkighlrtqligd`ZVTTWZ^bhnrqooqsuwy{yqg\QICCGLRZenqkaZWUOHEJUdryxrlgd_YUSTUUUSRQPNLKMT\cikhd_YUSUVVWWVTQOMJHGLT\emuzype][\\[YVSOJFFKRWXY[\\YUTW\`a`^^aehjllkga]\]`bca^YVTSRQPOLJHHJIHEEFGFB:89::9:ALSTPKFB?>@FNUZ/0110///012456,55432cbba_]]^`bcei7:<<<:86hfefh55678987766kjihhgecbcgm:=?@A@@@?>>==<:86421357876khda]YWVY]`cca^ZXWZ]`cfg4343fedddefgfeddc deec`]\]`bcdcde4543ecccbaaacdedcb aaabba_^]]\]]^]\[YXXYZ[\]_abdeeefedccba``_^^]\[YW')((()))***)(('&&%%&(+-.-+*)*+,-,*))*,-///./.-,,,++,- ...-,*)(''&'(()*+*++*)(('''(()))((('''(()*+,+#**)*+,,,--..-,+*)((''(())**+,,-,,+*)*+,,+*('&&''((()**++,,--,+*(('&&&'()++,+***)***+,+*)'%$!%%'(***))(('&%$%%&&'()))(&&&')))(' (())(()))( ))(('''('&%$$$%%%$$%%%$$$%')*++**('&%$%%%$##"""#$%&'&! ' !"$$$"!   !  ! +"#$%&&%$$#" !!"#$&'()*+,,+)'%$$$###$$$##"""! ! !"##$#""!  !!! !"#$&#$#"! !##"! +!"###""! !"#$%&&&%%$$%&&%$#"###"! !!"##$$$%%&' +%$$$#$%&'(((&%$&$%$ ###"!"#$&'&&%$%&&%&'(('&$#!""#$%&&&'((('&&&'&&%$#$&y(''&&%$#""#$&(('&$"!"#%'$##%%$! $(**'%#"#%(**(&%&())(%$$$%%%&'((&$"!"#$$#"  !#%&())(%#!  !""##%'(('&$! !#%%$"#$%$#!  "$%%&%%$##"$##$%%&''&%$#!!"$&&&%%%&$"  !"#$9%&&%""$%&&%$%"!!#%&('&%&''&&%&''&&&%$$"  #'+,*%"#%&$ $!!"#$%&&%$%'""  ! !"$%'()&%%%&%$%&#!!#%# $:&%%%&'))**, "#" 7 !"$%%&'&%#! !!  !"!B  $%")",03 !.- !""!  "$%&%!&'&%"23"%()*+*))***)('&%&'(<)(('&$#" !#%(+/253+#!"#" ( ! !!  V !!""  !""##""! !!""! !""  $$! !! !!! !!!  !""!  !"!!  !""#$%%&' ()+.02210001126345578:;<<=<;::998:=A""!@=95/*(((%  &+/135553101110//.,(":41003:BJ()(&$GFG$%&'(*+,,,+)'&(*-..-,+*+-/00/-+++,-, --.-,++,,-/367631.,)(()+.38<>=;62/...-+*('%$#$&')***+,-...-,*(&%$#$#$:&' &,023211000/.-+))(('&%$" '#!!"#%!"$ #&)-2443357872+&$$%&'()***(&%%&%$""$%& (,/1369;840.~-+(&&()('&')*+)'&).131/-,-..023210/.-+*(&%%&()*+-/110,'$#$'*++***)('&&(,.02330,(&&)-00/.,*))*-01/*%!=!&.5:93.)&%&),/000/..,*('&$#!("$&'('''((),3:<:768999;>?>:61,('(+-.-*'%$%'()*+)()+--,++,.04650,*'$##&((&$!  ! !"$$#""$%&&%#" !#$$##%),--,,)%!!#%'(&$"!"$&&$!>>"'*($ ?@A@>;99:=ADEEFEDA?>@CFIKKJKKLLKI&HGGIM)++)&C>==>?@@>:752.*((-4966897547;=<97642/,++-037;?@><<>ABDEED?92,'#"$',18>@;4/-,)%#%+5>BA=9641.,,-...-,+*(&%&).489751.,+-..--,+*)(&##&*/37:=<81-,-.--,,*(&&*.1<220-,.245433579;<=<941//13431.+*))(('&%$%&%$#"#$$!41023335 !"##" "%$"!",,--,++,-./02200015445 431136 +431/-+))+.0121.,**+,.001100/0//..-, +-..,*))*+,-,+++,-,,+-./0//.-,,,-.--,++,,-,--/0010/0///.---,+++*(̀䀃Ӏ~~~񁩀Ȁـɀ ?x̄ۄ Ѕׄրȿ"̄̀Ľ ބEžڀĿĿ􁊑Ǻӻ穟ԐƶȽļz邏º1*7$ļƾ̶؀ʹǺľ¹¾󀈎t  Ԅ 9[XVUTSQPPSX]bdd22db`_^^^__``aaabbceffedbabbccb_^^`aabceffgf3345 +43fdca``bcdcba`^][Z []_abcbbba_]\\\ZWUVX[\[ZYXXY[[ZZ[]^___^]]^__/0012334322caaa``___^]\]^_^^]\[Z[]^_+^^]\]]\\[ZYXVTTUWXXXWWWXXWVVVWYYYZ[\\[ZYXWWV WXWVUTTTUUUVVU VVXY[[ZYYXWUTRQRS!TTSSSRRSSSRSVXZZYWTRPOPQRSTTTSRQPN*OOPQSUWWWVVVUUVSTRRSQQQPQQRQOMLLLMNNOQSUVVUTTTUVUTRQPQQRSSSRSUVVVUT UVWXXWUSU,/01%2210.,*OKGC@>=<@GNRSSTW.00/-YTOJGGFFDC*DEFGGHILNOOPSSROMKJIKMNOOPPPNMNOONNMKHEA?<;<<<==>>?@???@BDFG IJKKKJIHGGGFEFGILMLJGFFHKLLKKLMNOPPOOOPQRTTTQOMLMNNLKJIIHI9HHHIIJKMOQQPONLJHGGHHGFGGGFGIKOSVYZ[]011]Y.268851.WTSRSTVW)UTQOMMLLKIFA;9=ELMJHGFGHIJLNQTVWVUSQONNPSTcSSRQOMLLMNOOMKIHJMPRSTVXY.///.,USRST+,.02210.-,+*RRTUVW,./134322210/000//..---..-,XWVUTSRPPQRTTUTTTVUTVXZ-./00/.-,,WWVUSQOLIHILT_4689;<<;97531/..-,VUTRRTWZ[\//]XSOKJJLOSWZ[[ZYXWVVVWXXY-.//-WTQNMNQTXZ\]\ZWVUVWVVUUUVWXYZYUROOQTX/47751.ULFDGKNRWXWTRQQTVVVTUW\021^YUTUY[ZXWXZXTNLNSiWXXXYZYWUSQPQRRNJGFGJOTY\[XRLFCDGJKLLLMORUURLGEEEFFDA@BDFGIJLLMNOOOQTX\/.ZVQLFB@ACEHKNPPPONLKKKMNOPRSTUTRQ4PNMNQUZ][XVWY--YVSPLKNT[/.ZVSQOLIHJNPQQRSUW-158:8520/-,+;USRRT+-./..-...-XTSSTUUUWY./.-WTRPONNONMKHHLSXXTPNOQRSSROKJI(KNQRSTVZ-,VUV,,VQR-3773.SPPPMIGGIKLMMORTV(X[/0/ZWWY[ZWROOSX/25898740-USTVVWXYY---./ 023456554455678:<>@AA@>=;964210022/+RT-/O00134457;;::;>@@>;976679>BFFC?<::<=>=<;98654579986310_]YVTTX/478753359=@AA@>>@BCEIKKHDA><<=>=<;==>@BDEFGGGFFHNX`eea\UNIFGIKL MOQQMF@==>==>?@BDFHKMMLKKJGB:52J3589874aWLB;5U8A(%.C3R=Thw@A@>>=;88;@CDCA?<;99:<;:;=>@AABCDDFGtHIIFB>;:;<>@CFHJKLNQSSQOLJIIJMOPPOMLMNPPONMLJFB??@CEFHIKMRZbijeZMB<74359>DJMLJGDA?=BFIJHEGLQTTUUVX[agklid`]\\[ZYWVUTSPMKJKKKJJKLNRUXZZ[]`bcba`_^]\[ ZXWVVVWY]be3f4678899:;;;<?@@>:9;BIID<6ggl:?BA?<;=@A@=;85ea__`cf589998865gffghiijklll679<>?@A6@?@@A@=;98764334579:;;:86hb]XUVY]aeghfc^ZXXZ\_acdeefgh4gedefg433dcbccdedc +bbbcde33443 432b``aabcdeffdcba` abbba`_]\YWVUVWZ\^aceedccd344gfdcbaabcb_+))((&%$#$&(**+*))(()**+,---,,+,--,*)(*,-../0//..--,,+++,,,---...--+*)(' ()*,,,+++*)('&%%&(((''&'()))*++,,,++*+, ++***+++*))( )**+,,,--,,+*)((('&%&''&&%&&''&%%%&'(**))(('&&%%&&&'')*)**+*) +**+*)**('&%&''&&'&%%&' (*,--,*(('()('&%&')*+*)*((&'((('&$%&%%&'''&'(('&$##$$%$##$%$"%&&&%$"!"!!"!  + !"#$$$#!   "#"! "#$ +##$%&'('&$#$##! < !"$$%$$#"!    "$&()))*%"%$##$$%%$$##""! "!!! "! !"$%'(('%$#"#$&'&&%$#"!!#$%%#" !#$%%&''' #"!"#""#$$$ &&&%%$$###$% $%&&&%$$%&'$#"! !%*&&&%7$#$&()**(&#"!!"$%')))(('''&&&'''%#" !$&')*)('&%d&&&'())'%###$&$ "%'('&%%%&'''&&(++(&%&()('&())&#!"%&&%%&&&%$#"##$$"  #&)++)&" !"#$&((%! !"#$#$&(*)'$!!#%&&%$#"###$$%$##"!!!#%()'%$%''%$" !$((&%$#! "S##$%%$#$%&$###$$%&'(&%$#"!!! !&)(%#!"##$$$"  "#!%'&%%$!"" ! !!!"#%%&((''()(&#!"#&!!"$$%%&'!"#d))'&%&( !$%$" "%%"   !"&,1442.(# !#$%$!!"#4" +$$#-!,5=!! !!!  "###"!  !!"""#$$$#Y"  !#%&((()+,+)'%$""#%&'&&%$$&'''&&%$" "#$%&(+16993+!  $!""!!!  $! # !""!!""! !""!!$  !!  ""!     "$%%$%&&&%#"! !"$%')+,,--./123332/345789:;<;:97655568;==<;962.+)(),158:;<=>?><841/-,*('$!0+*/:#(+,+)'(*-//.,+,-/00///03577530.-./0123442/,**)))()1*+-..-*&"  !#%%#!!#'*+,../148:;:742100/.,+*))'%#"""#$%&'))**+---+*)(('&%$#$&()  &,03542100.-,+*)(&%# 2/"! "&#'+/36789=@A>92,'&&'()**)('R%#!!"$')+,.00/-,,--,,-010,)&&&(((''),020,+/6;;60,,/12112331-(#!$)-/-+)(*.220,(&&(()*-//.+))())+/49;6.'#$(-2551+'&'*,.//.,)%#"$)/330.-,--../.,*(&$#"#$&'&%"!!"$&(+./*"!(1;CF?3)%%&(+/37;:61,++.142-'#"$&(+-//-,+)'&'*--,+,+*'$#$&&$""#$$$&&%##$&&%$#""#$$$#""!!""#"! !"$&'('% 857>#&)*)(&$##"A=;;?DFEB@???>==@BCCA=:9;>BFJ%JHECBCFIIF@<;<=>?@BEH&'&$C=98;==95210-))-14567778;=>;96557788974100121110.,,.38<<:878:AJPPG:/(&(*+,.145422330)#!"%(+.135641.+(''*-//,*)*,.02456761,+-0220-++,,)*% (0795/*'&&%#!!%*,+(').26751.,-.0110/0/.--/35676530-,-,)'%$$%%%#" C!%%"114!  6 "  #%%$"! !"""!!! 41/,+*+.10.,,-.02122344455562/,*)*,.135542/-,+,-../0 0/..//-,-.-,,-..,++,,,--. ///.-,,-./.-,+*+,,-/0110/00/..-,-.-,ȀȀҀـ +~ H_$5ý¿񃍔16󀇋9L½ſγ񹮻ؚʾĻ˰0ƽ;l Ŀ󀂁ľ¿ѿǽĸû󁍜&)҄_^]\[ZYWTRQSVY\_bcba`a1``acefghhgffg45ihda__bdcba`abdfghhgedddeg445566543eddcdeffedca`___`bcdeffedcbbbc?bba``_^ZWVXYZYYZ[\]]]\]]\\\[[ZZYYZ\^`1124566431b`_^^_```abba_^^]^_`aa`^]\\]^^][[ZZZYYX WVVUUVXY[]^_^^]\ZYYXWVUTUWXYXXXYYZZYYXYZ[[[ZXWXYXWBXXXYYXWUTSRRSVY\\[[Z[\]^_^\ZYWVUUUTTTUUUVWWVUTSSTSTSUTTQQPQSUWXVTRQOMLLNOPQ%RTWYZYWTRQQQRSSSTUWXZZ[\\ZXWVUTSRRTX-.2-,,,++*QOMLOSWXWUSRQOOOPQRTUUTSPNMKKJJJKLNNNOPRSTSRQNJGDCBA@@AABCEFDBA@ ?@ABBBCEFGIJKMNOPOMKJJJKJJIHHIJJIHJKJIHHHGFFHKMMLKIIIJLMNOPONMLKKKLLKKJJIHHHIHIJLOQSTTTSRPNLKJIHHIJJLNRW[^^]\ +[YYXWUQOOPQ#RRQNLKHFFGHIJJKKKIC>=EQXWRPOQSSSRQQR4QPPNMMNQTVWVVUSQONMMNMLJHEDDEGJMPRUXZ.///.-,++,,--/02210/.-,++VVWX-/1344210//001122210...---,YXVTQOMMNPQRuTUVVWWWXY-../000/.,WVUVXYYYXXWURONOV069<>>=;97420/.-,UQNMMNOOOQRSRSVZ]^_^[UMGEHLQVY\]\ZXWWXXYZ[[ZY[..ZWSQQQRTWY[../.\ZlYXXWXXYXWUSRRTUUTSTV[010.YVUTTUWZ\]\ZXVTQOOQSVWY]122/ZVSQRUZ]]\ZUOKJMPQQRTWYZYWTSRSSRPNKIHHJNSWYYWTPNMLKJJJKL5MMNOQQQOMIEBBBCDEFGIKNQSTTUWYZYWTQNKIGFEEFGHJMPRRRQPNLMOQRS4QQRRQOKHHMRVWWXYZ./00/-UPNPSTTQNLMMLJJMPPLIIMTZ../0121110/.---+RNO*-/13331/-,,,-.-,USSSTV[121\VRNKHHLORSSROLJJMQUVXZ..ZVSNICAABEGILRY//YUSSUX-ZY-0331.VTSSSTUUUROLJIJLMNNPRTUTSSSTX]0/YSQRTVUSSV-022331/.-+YWWYZZY,-.00/01344333444322233457:=??@?<9743221234%5789;;::;=?@@>=;;:;;<>ADEC@=<<;;;:::98 7666789875320 1`]XVY`37:=@AAABDECA??@BCDC?<:::; <==>?@ABBAAABfA@?>??@BEGHGEEGMV_fhe`[UOJECBBDGJNPQQPPONMLKIFB><<>@CDEEEHKOQRQOONKFA=<<<=>@A@>7[I>5S6B,(.>/RC[ksADFGECBCFGGECBAABBBCEGHJKLMMLKJJKLMNOONNM3OQRQOLIFDDEFFEGLSY^bc]SH@==?BFLPQPPQSTSOHDCDFGEC?=;: +9766654333531/../..-,,XYYXTOLK]LLMOQTVVROMORTVVSRSTSNF8*#$-:EMQSSTVVTQONMKIHHHGHIJIHHKMLIFGJLLMNNNPRTWY[\[[ZYWTQOMNOPQSWZ.0121:2221.VSTXYYZ[[[ZYVTSUWWWVUUTTRQOMLJHFDDEFEEFGHJKLKLOTXYXVUSROLLOSWXYXVTRSUVUTSRRSTUW[_cddcb`__`dhknquy|>>zxungdeinqrpmkllkieceinpponoppqpnllmlic\VRQPPPOPOKFBDHLMKIHGHHIJJIGDCDFIMSX\`dhkopokd^ZXXYYXWVUTSRQPONOPQSAEKS\cggeca``^\YWUSRQQONLJHEB><:976544433211000/]\ZZZYYZ/38>EMTZ^_^]\[\\\[XTSRSTUUTfSRQPPRTVVUUVWXYWUTTW]aa\WSSTSQNJE?xx=AELRUVXZ\\ZUQPW_b]UPQU[__^^_``]XRMLNPQRRRTVY]`]YTRRSSSTUVX\_aa\UOL=MNQUYYTPNPTY^_\WRQRTVVVUSQNLJIHHIJKLOUZ]][YVTRPLGA>>AEINQRPMJHGEFHJKKMQXahigda^ZUPLIGGHILORRRPPPQPNMNPPPNKJJLPRQPPRUYZYWVVTSRRROLIGGHHHGGHILNLG@==@CEHKMKGCAACGHE@>=>><<>@AABCDCCDEEDCCA@~~{pfchnomiimrwz|yrmkkns{ACB}zyz{|{xtojfccfkquw{DGGxlgfhjjhe`[Z^dd[OHIPW^dkt~zmecekrxyvqmieba`_^\YUQORY_cegimsztdVKHJOUY\]^^][VQKGCA@BEGGHKQUVVX\`cefdb_^_`eikhddffaZVUVWX]diif_XRNNRX\`cba`_[VPKJKMOMIFEIPVYZYVQNPSTSQSVZ^`_^\[ZZZYWVVX[bffb]XRLMFB@ABBBA@?>?ACGJMPTVVTPKFA><=??DIMLHEGMRUVWZ]//.-./00111210.]/14689"88777887765gd`^\]ag689998765iiijk6789::8migghiijiijj667,89;;950[XY^37:;986665kjjigd`^]]]^^_^^\ZYYZ[\] ^adgiihfddegh4gfff343dba bcddcbaabbcbccdde332221112233223332dcccddca`__```_ ``_][YWUUUVVWX[]^__`aaa``acdedcbbaa```J,,,+++*)&$##%&()**)))*++,,++***+++,,,---.0/-,+,./..-,-./01110/.-,,--.---,+,-.-,,,+,,--,,++***)'%%&'())*))((('''(()*+*+***))***+,--..-,++*)('&''()))* )('&&''(('( )*++**)**++*)('('(()*)*+-..--,-../..,,+*)***+++*))((('('(((&(*++*('&''('%#"!"#%& ()**)(&%$$$%&'() ('&&%%$###$!  !  !!""!"##"! !"##$%%$#"!!!""! !"""##"! "#$$#"""##$$%$$###$$#"! !  !#$&&''&&$#"!!! !!!#%(*,+)(''&%$$$#"! !"##$#"!  !""!&*)%$#$%$#"""#$&(())('%$#"!  "#$&'(%%%& &&%$#!! !"#$#$$%&'$%&%$" !$ %#"!!!"""#$&)*+,+)% !#&'()('(())(()(%$#""#$%&')('c((('&%%%&''&&%&)&$###$%')*)('&%#""#%'()+'%#"#&(***)&# "$$##$%'('&%$%%&%$"! "%()*)'%#"""!"""##$#"  "%&' +())(&%#"!  !!#$%&&&%$#"#$$%-&&%#!!%'(''()$! "#$$#"!"""!!#$# !%(#!"N$###$%'(%#" !#$%%#"  !$%%%&(&$" $('$##%&%%"!-"#$$#"  !"""#$%&%$$$%(+(%#$%%$##$ &%$%&''  +,*&%&*  + !""!!"&,27862-)$ !#$%%%$##"! !#$%$"&& -%18;  !""#"!  ""! !"$&&&# &!"$$"! !#$$#" !!""#$%&%%%&&&''&%$$$%%&7''&'())('&$"!!"#""#&*/233.&!"""#$%$! ! @!"! !! !!  +  !!##!  "#$$$# ! !# """!!""! !   "#"!  "$%%%$###%&'4())**))*,/232100//13689;=@C"!A?<841147:;:76665543469;V<=>>=<;;;<;83.+(&%$#$$$"!#'*++*)))**++*)'&&&(*.14678:;<;841///12210.--,+*))**+,---,+,+,+++**)8*+,-,+***+,--,*))+-./0134431.,++*))**)'%$$$#"! !"#%&'())*)('''(+#)/4777544321/-,+**)((&%#!"!! !" %)-01/-*)()*J)(''(*++***+,,+*((*-00-)(()('&%":9"'*,,--//-*'(-362,((,022111331-)&%&'()/+-020,)''((())*+-022/+'%$%%%&'*,+(%$%(-120,)()*+,*('&%$#$$$%'+-//.,*(&%$! #&(('%$##$%$##$&1(,2786410.+(&$$$%&'()**))*+*)((***)'&&'()('&')+++*)1'%$$%$$#$%&()($!"$&''$" "$%"  !"""#n""!A@@ABCB?82149;9779=@ABCDEC@;8667;@"##DB?>?ABB@=:743368;<<=@B#%%F>734577653102661*&',047:?EJIC:4236;?@=:864321/-*)+/35678:>CKRURI?4,&$%(,.0110/.,(%""$%%'+.0//02467642001356422331-+*++,.26874/*&%'+/24310.,*'$#$&((%"!#(,///,)&'*-,++,.0110/.---,+++,/36741-*&#! !"""!!@!#$%')++)'$!62356422"#"!#$$$%&% 2/-+))+- +11123631112221,%#$&2344310/...//00/.-,,--.- /02210.../0/.---,,+,,,--.--,,,---.- .. +-,,--..- ..///.-,+***+*++,-.-,,,-.//..---,ɀ򁆀~倓ꀂ̀ȁ瀈 .6`̈́˄uXˇȈH˄=N]'Ⱦ6¼ÿ݀ĿžƾWþ󀄄ɫʿ̼˼¿ľĿI y ``_^^^_``^\ZYXWVVWY[]^^_abbcdeeedcbbcf576jhecccdeeedca__adgii432c22333edbbbcccbbbcdcdeghihgedeefffed cdedcb`_^]]\"ZXVUTTTUVVVUUVVXZ[\\[ZXTQPT[addcb`_2a1211a_^^^_`a100`___`bccca``aa`_^^\[YYXXWVUTSSTVXZ[ \]^^^]]\\[ZZYZ[[[ZYZ\\[YXXZ[[ZYXWVWYYYWVUVWXYZYXVTRRSTUWXYXWWWXZ]^]]]^_^][ZYYZ[\^___^]]\[ZXWVWXWUUSTRRSUVWVUUT UUTUUTSQPO*PQRRPNLLNNONOQSTUUUTUWZ\^^]\[YWUTTV,./0/.-+,-./0//-VSPMIECDDCMFIMPQOLLMNNMNPQQRSSRQOMKIHFECB@?=;;:::;<=?ABCDCBBABCFHHGFGHKMOQRRPNLIGFFGHJLMNMLKLLMLK LOQRPMKKLMMMLKLMNPSUVVTRPNMMLKLK!JJJKKLKKLNPSUWXYYVRNKIIIJIHHJLPSUWHUTUVWY[\[ZWTOKJOW]\XTRQPONNMLKJIJKMMNMLLLMOPRSTUUUVVUSRRRQPQSTSRQPONNOQRTRPNMMNMKIJLLLMMOPRUVX,--,,,WX,,.12:10/..-,VUUV,-025653210//0012220.-,+*+VUTSSQOLLLMNNNMNPRTTUVWY./0 +.-,++VW,,XVUUVWWX[/11100100.-,+***+,,YWTRRTWZ\]]ZVRQSVY[\//\ZXVVVXYZYXVTSTUVVWXYZZZ[../00110/ZXWXYXWUTSRQQRSTUWXXWVVWZ]/000/^]\[\//0/\YUQOORUXXWWY/122/VPLLPVYZ=WRMJIHJMPSSRRSVXXVTRQPPOMKIHIKNPSUVVUTRPONMMMLJHFFGHJMOPNMKJIHGGFGIMOQOOPPOMLKJJJKLMNOPPNLKKKLNPRSTTTQNLKJBKMOQRSTTTUY0341.+TTTSQOOONLJIJLNPQQPQU[]\[YXWX,---.010/--,---...//0v//00/-WTRU-00/ZUPJDDGLPRTWWSNIGIOV-/000/[WRLHGGGHGEA?CIPVYYWUWZ..-,,.//.--.011/-VQMHDCDDCBACGJLMPSW[//.ZY--,XXWWXXX,.0210.---...ZWV,-..///01233310//00112479:8642122456787 +6433359;<=>G??><;;<<===<=>>=;87689;===<;;:86322234445678763b^]_257778:;=?BFIIE@=<=>?=;99;=><85369;=>?>===>???@@???BFJMLJIKOSWYYWTRPOMLKJKMPSTTSRQQPNKIHIJIHFDCBB@><<>BHMQSTSQOMJHEB@@ACEFEB=82T;D%1+0C:7Xox<>@ABBCDDDCCCDEEECA?=<;;:;=?ACBA@AABDHLOPNLHFDEGIJKKKLLLKJHGFFFGHIIHGGGFEDDDCBAAADGIJIGFFGIJLLMMNOPOMHDA@@ABCFKRX^cec[QIECBBA@?@BGKMOQRRPMLMOPOIA;889:;:9987664432101P2320/.XSQRTVWVSQOOPRTTSSTUUSPMJHEA>>AEHJIFCDIMONMLJIJMPQQQSUUUSRQONNPQRSSSUY\\[YWXXXWWXZ.00/[[^00^\[ZXVUW]1331/.O[YWWZ.///.-WVVVUSPOPTWXXWVTSRRSTUUTSOJEDEIMNOPPQQPOLGC@@CGJLMNQSRRPMHEEHIJLOSWXY|ZZ[\\[ZXWWY[]_acegjkjhd`_`beimprrqppqqrstttuvxzzxqeZU]jrtpljloonligeca_ZTPMMOQPKHHLRVX[\\ZXWWXZ\\YUPLKLNPSUY]aehloomid_[WUSSRQPPQRTUVVVWUVRTSSRQONNMLMMNNOPPNMPUZ[XVTSSSTVY\_bgklib[VTTUUVXYYXVUUUVTRPOOQTVY\^_abcb`]]^``aac22322cbbd34445554334578899::;<=?CIQX]ad$eec`^\[ZYWVTSRQOMKIHGEC@>==<;986532121000123569?FKOQSVY\]]\ZWUSRRQRTUUSSTUVUSQPPRUY\_ab`^[XVUVX^eihaZUSRQNJE?wzDMU\adc`\YYZYVRPPQRRRQRTWYYYWVTSQNKJKMNNLLNQTWY\^_^[YWWXXXY[]`%ba]WQLHGHIKNQUXWROPTY\[YWVVWXZ[[YWTPMLnMNNNMNQTVUSPMKHD>v<@GOV\``XMFCDCBAACGKPTWXXY[^begd]UPKHECBDGKMLKMSZ]\YVRMHEEHMSX\]]\[[ZXVSQOMJIIKLJGGHKMMKHECCD*EFILNNIB=wy>BGKLF>rovBIMJFB@}z|AEHIHD~vv~CFTEpeekqssw~EE}wohefkqvy{}~xtqopponnmmntvwz~zunfa___^\[_kyzlYLKNQTW^gptuvx|}wsnkiinsuqjb[VV[`ba__`emv}zqjhgd`\ZYYXVTQOLJHEA;kcc7AKTZ_a_\ZYYZ\_cfgikiaVNKJJIKPUZ^_^YUTX`hpvtkb]_elolbXPNPRSTTTSRS2TVX[]\YUPLKKNQTZadebabfjhd_[WSQSUXZ[ZTMHFGHHEDDEGIJLNSWZ[ZWSOIDABDED@:g[ST[h?@@><:9[8899:<>??  A !!  !  !#&()*)'%#""#%&&&'''&%%$##$$%&''&%$$#"!  "##""!!"#$%4&'''%"!%)-122.'  "$$$"!!"#$##!   !#%&%$$##$#""###%%$$#"! " !  U   !#$%%&&'()*+++*)))*,-/0234555310/01479;=<;:;<=>=>>;4,(+3:=;8668:C987542.*&%$$#"%*.233322234542.+))*+,.02479<==<9741/.--,---,,++,-./ ./-.--,,++**)***)(),00/-+*))*+-0357:=;83/.-+...-,*)((&$"!!"#$&'((()**('&'()))*)(''."',03677643210/.-,++*)'&%%$" #&'(+-/0110.-,++**+],,,+)('(*-.01110.,*)*,04884/+***)'# ;<"(.36863/---,*)(()*))(()+,-,,+*))'%$%'''&&(*,-./00.,+**+),.011.+'#!!!#$%')*)&$$'+--,+**+,-..-,*(&&%p&''&&')*)(&$#" 6#(-254/'#!!"! "%')+,,,-.137972-)&$"! !$')(()-24320-)%#"$'*.00/.---+)(''&%$%&'&$#$%'''$"!!!""!V"$&((%!9:!$&&"537 $'&#!>== #%&%#@:9>"$$$%$B9238=>>@EJ&&JHGFB>842258;>@AAABEHHFC?<;:9T:==>?BCCA?<8521122102;FF;8679=><94/,,04665557=CHJKKG@:5321.,+*)'&%#" 4// &+/2331/013567873,'%%$#$'*.0220-+-16;??;51136861+&%')+++*)(*++,.//-*'$##%'*.25542257751.,)()+-/0/+'##$%%$#"#$%%###$%(+-.-,*&#  "#" 1*''*/!$%%$#"!"#$%&%$# +20/.--./B51/02221000123320.-++*('%%%'*20/./0123221000///...-./01221 23321000 -,-...--,,+,-..-+*)*+,---,+***+,-%,+*))*+,,,++**+++,,-..//00/-,,,-..-,+*))* +,-.///.-,܀ۀ~Հ끂 g.AB܄gKžR[ſý1ɄDߥݗ䄹Ÿۀɴɽý#(/ȿȿǿ»ûʿڀʿ8%dcba_]^`cdedb`^\ZYYX YYZZZ[]^`a`^]7^^_adgj66776653edca_][ZZ[\]^_aceff3322ddcbcdef34553eddefedddeeg4566544fdbbbc12ca___^^_abba`^]\[[\\[Z0[]^_```aaaba`^^]\[Z[\\\[ZZ[[\\]^___^^^]^_``_^]\[\] +\ZYXWWY[\]^_``_^]\[\[\]_bdc`\XUTOUVVVTQOMKIIIJKNRW[^_^\YWVVXZ[[[Z\]^_^]]^]\[Z\_bdda^[YYYZ[\\]^`bcb`^\[ZYZWVUTTRRSRQPONMMOQRQOMMMOQSUTROMKRLMOQSUUTSRRSUXZ\]]\\[[ZZYWVSRRSTVVUUTTTRRSUW-..-XVTRQOLJIHHGFEEEFGHHIJNTXXVROOPQRST RPMJGDCBA@@??@ABCEFHJbKKJJIHIKOQQPONKIGGHKORQMHEFJOSTUVTPKGGIKLMNOOOPRUWWURPOONLKJJJLNQSSQPONLKJJIIIHHGFFFGHJKMOPQPOMLLMNOPQRSUWWWVSPLIHIKMOP:QSUVUTUVWXYZZYYYWVTRPPPQQQPPONNNOOMKIHFEEFGHIJLNPRTVY\][XVTSTTTSQPBONLLKKJJJKKLMMMNNOOPRSUWX,,,--,,WVUT+-//.-,--.--,VUSRSV-/1345421/.-,-YXWVUUTRQSUWY,,Y, +VUTTUUUVWVVUVWWYZ-./13444577530.-,-.,UPMPU.011^ZWWZ/0/.ZXWVUUUWYZZWTRPPQRRRSTUVWXYYZ-..//ZTONPSTTRQPPQSUWXWVVWXZYXWY^1220^[Z[\/01110/\XSPORX\\ZX[0342]TLGEFIMPPOML.MOQUXYYWVX-..[WTPNMMNMKIIJLNPSVXYZZYWTRQPOLHDA@ +ACFIKLLKJIH/IJMPTWXYXUROPPQSVWVROLIFDDFGHJLMMMNMKJJLMNOPNMKLNOPQ1SVXZYWUTUW-/11/-+SNKJKLMMMLKMPRTVWYZ[.//.-,--..--,-./0112A355432210/.-XVWY-ZWUTSUWXVSQONMLLLMMNOQRTUWWXXXVTQNLKJHGEFHKNRUWWVUV,/3421122210.,UPLJGCCFIJIGHJOTXZZYXWaXZ[.///.YY-/02221000/.ZXWVWX,,,-02542/..01234320///0/../02358863/-Y.1589987667763357:<==?@AA@><;;:h;<>AA?<:877789:;;:::97542ddf4455hgf4566779::;<>ADGJLJGEDCCBA@?>=<;;>@@>;99:;<=?ABAA@??>=<;987:@GMQRRQOMLKMJJKMNPRTUUTSQOOPRSQNLKLMNMKHC?=>@CFGGHKOPPONMMLKIGFDDDEGHGC<4S8C(:5$E@^p{ADEFG/FEDCCDDDCBAABCDDCDDCA@>>>???@@ABCEFFFGHGGFFFGIJKIGFGHHHGEDDEFHIJKLNNNMJHFFGIKLMMNOPQRRRQNJD@?BHOW^cdb^XM@611368:=@CFILOQSTTTROKE@=;<=><9644431000/../11/[ZZYWUUUVXYZ\\ZXUROMLLMLJJMPRSSUX[\\YWVV.X[][WRLHFHMSXYXVUVWXZ\//00/.ZYXXY[.0111/ZUQQUZ. +/000/.\]^_abb`]XTSSTUX\//.ZYX'YZ\\ZXVVWZ[.\\..ZWTRSTVWVTRRRTUUVX\^][XVWWWUQMIGILLJGGIMPSUUROKJLOQPONMNRW\bhnruwxwtrprtuutsrrpmjgfeeefhjlmnnortttsuy>@@?>@AAAyfQCBJW`ba_\ZXXYZYWURQQPOMLMOQRTVXaZZZYXYZ[[[ZWUSSUY^cggd`]ZWUTTSSRQQSUWY[]]^^\YVTTSSRRSRQPOOPQQRQQPPPNKIIJLMMKKMQVZ]`begfc^YWWY[\ZYXWVUUUWXYZ[\]^]]\[[[YVTTVXYZ[\]^`b233456672889:;;;<>BHQY_aa`^][[ZYYYXWUTSSRQNLJIHFEB@><;987654K5445689;<;:986457>BINQRRQLF?x>BGJHEBDGJLLIDwstx|~rjiov{~~xrmmnoppqstuurmhehpzxmegp}zutpkkov~|wrmgb^[YWWY^djljd\USTWYYZ_ekoty}vmd__eoz~zskea\XTPLIJP[goqolouy{ytmgc_[WSQOLGCA@?==AIT^ed]SIDGNV]`_^]]\[VND>>CINT]dhhgfeegjkhd_YST^n{yne^YSOQYcgee_WSRUXZ[[[ZZZ[[[YXX[\ZWVY^bb_[VTSTTVX[_^ZSMIIKMNLJJMRVXXVUTSSRQQQOKEA?ADEDB=8ii8=ACFHKNPQPPQUY\^_0012 +33444556789::;@AA?><;;:98776.ifddfhjjihijl79::86hc_\[[]_aeks>ABB@>=<:85fcccedcb`^]\[[[ZYXXY[^adghihgghij56'543d22334554433eeddefffeca_]]\\\ZZZ\_bcdca`^_`abcdeeddccba`__^]\&]^^]\ZYYZ[ZZYZ[[\]\[ZZ[\]^`bcdeddcdeee!.-,++**+,-..--,*))()(('''(())*+++,+++,--.!.--,+*)()***++,--..,,++,,-.++,,---./,+**++*)(()*+,+*)())*+++,+**))(())**)(()*)*)(('(())* +)(&&'()***)*++*+ ,-./01110.+)'&'())(&$#!A#%(+,-,,+***+,--,,--..-,---,,,-.000.,)(()*++,,./010/-,+***))(''&&'&%&%$$$%&&%$$$&'()(&$#"!!""#$%&%&'(***))('''&%$"!!!"""!  !!  ""! !"!  !!! I !#%%%$#!  "##!"$%&''%" !"##%&&&'(*,,*(&%%%$$#"#$%'('&%$##""!!!  !!"#$$$#"###""#$%$%&'!&$" !"#$$###$%&%$$$%&'))((('&%#" +!!"###"!  !!"$%&&(*++*(&%&%$#$##"""!"##$%%& %$##$$#"#% %%$%%$$$%$$$#$%'''&'&#$$%%&&%$=%%#! "%)&%%'$$###"#$%&&%$#""##$%%%&&&'&'$"!"$%%$$###$&(('&&()*)('(**('''=(&$"!#'))&%&'#!"#"!!!"#%'''%%&)'%#"""#"! !"#$%'&%$"   !""!!  5!$&())(&$""##%'('%#!  !"###$$#! !!"##$#"!!""!!!#$% $%&''&%###$" !"##"!"#$%&''((&%%''&%$$%'''%##""!!")#$$%&&&'''&$#! !#%&&&%%&%%$%#! !!   "%&()(('(()&&'&%&&&,&  ...-,,!"#"  $&''&&%$#""#$%&'&%%&'('%$#$%&%$"!! !#%&%%%$#" !"!#%"08> !""#""! !!! !!""!!!  !"#$#$% $#"!"#$$$#"##$%%&'''%$"!!!"#$$%&&''(''&$""',0220,'  "$%&&&%# "!""!! !""#$$#! !###! s !#%$"!!  !!"#"!!!"#" !###$&'''(()(&$"!!! !"!! !!"""!   !! !!!  "##"!:"""! !""!  !! !$'*.37:<==<:989:;;;::986432]3467889:;===<845;DHFC?=;87:>BDCA>;8520/.../26:;951-,-02457;>@CEHJKJGD?:5115;CJLJGEB>:741/-+)'(,29=>;99:631/-,+))'$! #*1673,%!"'-1443210/-("!%(,05775322479863/*(.8BEB;4/-*().48 84/+*+-000/.,*+++-..,*-0331.+)(()*+-//-*'%%'()'&&(*,,,*)(!)(%" !#$$"21 !###"!!#%&&& 43210/../0;310013443323440.--./01259 00013444332210/.-, -/0233321123-.-.../.-,,+*)*+,-,-,,+,-.--,+,+ +,,-..--,++, +++**+++*) *+,-...--.//.~~逆 ,j̈́@¿ɅȀǨƿ¿G݅܀􁉎ſԆрȄǀ䲆đۡ·¿-ʹ􁈎׺ijǽĿľ󉚥􀄄̀Ƽηþµù¿ƾøK&@cEbabdggfeca_\ZZ\`cb_\YXXYZ[ZYWWWXY[\]][YWVTSSUZ^bcegiiheca_^\\\]^^^]^_acdddcbaaabe35665323454edba`^]]^_`aceggg433dcbc23edccca^\[[\]]^_^___^\[[ZZYZZ[[[\]^`bbba`ab111a`^ ]]]^_`aabbcd23 dba```_]^_ ^^]]^^^]\[ZZ[ +ZZ[\\[ZYYZ\]^_&`aba`\XURPPQRRRQRSSTTUVUTSSVXZYXURONOQRSTVXZ[\\[[\ZYWWYZYZi[]__^^Z[XXVUQPONNNMLLMNOOONMMLLLMNOPONLLLMMLKKIHHIJLMORTUUSRQPPRUX\^__^\ZXVVUVVUTUVVVUSQNKHGILNOPQQQPNKIHFAGGFDCBCCCEHKMOQTVVUSRSTVX[[YVTSQOKHFEFGHIJIHGGHIIJKLMNOONNMLLKKJJI0HECCFLRVVOC4)%+8FOQOMLJHFEFHJLMNPQQRRSUUSPNMMNOPQ"PNLJIIIHHHIJIHFEEEFGHJLNOPNKHHHKNQRQRSXTUTSRQRTUVWWYZZZYXY[\\\[\\\ZYXXWXYYXWURPMLJHGHIIJJJIHFEDCCCDFHJNQTUUUVVWVTRPOPQRQQQRSTTSRSRRQHPOOONNOOPQPPONMMLLLNOQSV-/00/../..--.035420/..--,WSNIGILQVY./1220.,+,-./.-YWVTSRPNLLMOQTWYZZ-ZYWVUTSUV,++WW+,,WTRRTVX,-/147998631.-,,-./...,SMKMS.25540--.0221/-XVRPPSUVURPNMNOQSTUVXYYXWUUW-..ZVRONOQSTSRPPRUY[\[XVTTVY[[\_110]ZXWVWY\/.ZXXZ]/0/]ZXWXYZXTNIGHHHILNPQRTW[...--..-ZWURPNLLKKJIIKMOPRTWYZXVTRQQSSPLHECA?>>?ADGHIIIJJJKMMLKKLMPRTUUTRPNNOPRVYYWTRNJFCBBBCEHJKLLKJJKM LLLMNOPPON'PSVY[[ZXVTST+/2442-ROPSSRQONMMNOOPSWZ\]/0/.--,,VUTTVW,-/013444565421000122/XSPOOQTY^_^\[XUQNMNONMLMMLLKMNNNMNPQQOMLKKJJJKMNNPQSSSTTSU,047752/..--+TPMJIHKOSUSQPONKIJMQQP5NMMNPSWYZXWWXYWVUVWWXY[^13310.YVUUVWX-.1589730.--/12234420//012235566654333578%:;:8534468;=>@BCBB@><::;<===>@@?=:8765678:::864c^\^d69;;:987(89;?BDFHIHHGHHHIHFDB@???ACDC?<:889:<>?@@?><952149>DHKLLKJIIIJJKLLLMNOPPQPPPRSTTSRQQRRRSTSPKHFFGIJKLNPQPNLJGDBCGJJIGFGGGB8Y@,:%83:,TF^mv?BDGHIJKKKJHGFDBBA@?>?ACDDEFGHFDBA +AA@@ABCCBBC"BA@@ACEGIKMNOONMKGB;6gh6:>CGJLMNNONLKIGGGHKNRTUVXZZULC=?DLU[`a`][ZVND=:99889===wvwwqaSS[hqsqoopo65420]YVTRPNIC?AGMRTUTSSROMLJHECCGP\fmmg_WTTTUUVVUSRTY_fjlkie`\XURPONLKKHJHKDMOPPQQSUUUROKHFEEEDDHOX`gjkifb^[ZZ\^_^[XUTSSSRRRTWZ]^^]]\[ZXTQPQTX\^_`accba `^]]^b345667899:;;::??>=<;986jhgfedddfi68: ;<===<:876lkihhgffefgiklmmlk lnpsuvw<<=>?@?>=<;975hfedcba_][Z+YXYZ\^`bdeffeeefhj6665444566777653222344555433eedcccdcb`^][\]^^_``___abba`aa`_^_`abdeffedcba`_^]\[YXWWXY\_aa_^]]^_bdefecbabddd. --./..-,+*)((*-..,)((()*+*)(()*+,"+*))'&%%')+,-.///.-,,+++,--,,+,,--,+**++1--,++***+++,,--..+**+-,--,+*)())***+**))()**+,,,+ ,---,+**)*+ ,-,+,+, +*))**)))((() (('()*++,-../01220.*(&%%&'(''&'(((&%&(*,,+)(&&&''('()*+, -,+*(''(*++*++,,,**(('&$$##$$$#$$%&&&%$$#$%&&%$$%%%$#"! ?!"#%&'('%$##$&(*+++**('&&&%$#"""##"!  !!!  + !  "$###" !!""!!!""###$#""! 8 #&&" "#! !#$%&'''()*++)'%$$$%&'''&&&%#"##"  !"#$$#! !#%&%%$$$#$$% &&%$##$%'((()(''())('&&&'()))('&$"!   !#%'('&%$"""#$%%%&&%$#$$$#""! +"#$% +%#  #&'%$%$$$#"  !"$%&''''&%$#$$%%%#""#%%[" ##"!!!#$%$#"!!!"#$$$%&&&%$#$%(&#""#%&&%$##$%()*)'&%&'()))+*(('&&&'S'%%')*(&&&'''$ !"###$&('&%$#"!  "##$%'(('%$###%%$" +!""! !"#$&+$"""##$&''&%$" !"""! !"""!!!""#$%$.%'(((&$##"#  "###"! !"##%')))%&'&#"!!#%(*++*)'%#!!"##"! !!"""#$%$##""!"###$% +$$I#"!"$%$#""!!"#"! !"$&())(''((('&'((()*+&%$$%&&%,*)),     "#$%&('(()))('&'''())&#!!!"#$#$%'''%$#"  "$$#"+!% -$/6; !"$$%%&&%%$#"!  !!"  ! !"#$%&''&&%$!,- "$%&*%&&%$#"""##""#%')**++,,("%+0331.,*'!Z "$%&(*++*)'&%$#!"! !!"!$%$! !"###$"!"$$" %$# ,+(#!$$!"##!:  ! !"! &%$$%$"  !!! !##!#'+0368866689::;::9876 +77877653221S357:> !!! ;:<>>?@=2'$(2:;:8653#"! !!""  $),./..--+*)(&$! !%,4:<950../0/.-.148:;;:8531/-++*)((''&')*+F,.//.+(%#"#$##$',16898530/./01210-+)(''&%%%&')*))('&&%#  #&'('''(())( '&$#$&+$+0234431/---./000/.-+)('&%$EBA>;84#(,/0121112466420$/.--+)(()*+++***+*)((),132.*((('''()*$(&%%%'*.36876531.,+*)))''*.0.+)('()*)"*+,..///01232/,+,--,,-/12/*$ $)-01\0/.-+)'&%%%&'()(&$"! !"$%&())'# "'-2552-&4/4 ',,+*)*,-,+)'%%&())''())()*,,+'#!!$(**(&'*-.-+*)(4*.342/,*)(('&$! !#&)+*(%$$$#""#$%$"! ?>=>!"#"! !"#)""!  !#$%%#"BA@BD#$&'&":0-/4:?#&'JDAAA@?=;732358;61+& $3C'))OIA;=BHJIGD@=<;=>><9668;=<94/,,-/13678631//-+(')/5;?@@@BEEA7-()08@GKLIEA<987520.+&""%),-0369<=;979=><731D0-+)'#&.22/,)%" !',/.-.11/+&!5)5=??==?CFEB<5.)(+04787630,+.2565493335652/./0/.-.0356531-++-00.+***)'&',254/+(%$%&(('()+,+*)('%" "##" """! !#%&3210/..0243221122345678:<>?? 4221100/.-.--,,--./012221 22/.-,,++,+,+ *))**+,-./.-.&--,+++,,-,+*)(()*,---+***+-.00/.-..//.؀⁅ +~~~Ł܁πׁ߁ r ( ݄ ҄3̈́Մtžƻÿ:¿ք׀?݄ހǿźڀ*¿ 10䱃ŝߘ󀉒*ŸǵȀ*#@ôĺ+^¶8 %ބ߀οľɻɵýv¿úļ.U51^_`bbaabcdeedb`^]\]_aa`^]]_`aa_][ZYWVVUUUWXYZZYWVUVVXY[\]^_`accb`^^^___^^]]]_acdeef32333457788876532cccbcdfgffeca`_`a`_^]]]^] ^_``011221a_]\]^_`a`_ ``abba_]\[\\]^`1a_\[\^abccbbaa`_][YXWVVWXYZ[ZY8XXXYXWWVUUUWYZ[YXWWVTRQQRSSSTTUUTSRRSUVXYZ[\[YURQQSUWXXXW;VUTTSSTTUVXXYXXWZWVUSRPPPOOOPQRRSSTUVVVUUWYYXWVVTQOMKKMOQQQPRTVUVUTRRQRTUUTSPKFCBCFHIJIH'IKLMLLKIGDBAACGKMMMNPQRSSTVWXWVSOMKJHGFEF:GHJJKKLMNMKIFEDEEDCBABBCCCDEFJNPPMHDBCFLSXZWRONMID?=>BFJLMNOOPPPQRRRQONLLLMNNOQQQOMKJ-IHHHIIJLMNNLJHHILOQRRRQPONNOPRTVWWUTSRSTTTUUVWVURPPPRTVVVUTSSTU3TTSQNLJIHHGHHJKLLKJIHGFGIKMNPSUVUSQQRTUVUUTRPNMMMNNO NNNPRSSRQRQBRRRQQPOMLKKKLMOQTX./0/-WVV+,-/011/.,*TTTUUTSQOOOPRTVXZ-./0/.--XWVUS +UVXXXWUSRPOPQQQRRSTUW[.//.[YURPOOQTVWX,,+VUVVUUUV,-.../023442100/0010/.7-VQNORUY.0/.XVX.0110\XTPNLMPSROMKKKMOQSUUUTRQQONMPTVURONOPRRQPPRTWYYXWVVVWXXWX[./@\YWX[022100/.ZXUTSUWZZWTRSVYZWRNMMMLJIKOSVWVVWWVUUV,-ZVQNNNOPPPONsOPSVYZZWSPOOPONKIFB@@BDEFGGHHIJLNONMMNMLLMOOPQQQPONMNQTUUTRNJGC>;=@DEFHJLNPRRRQPMIFEFHJKLLMMNNNORVZ[[YVSQRV-/000/.-,2XVSQOLHILQVY./0233220-VRPPTXZWQNNQW/24532000122110/*ZVSTWYYYWTSSTUTQONOPRSSQOMNOPPNKIHJNPQOMLMN PQRTVW,-.0133310.,SKDBEMRUVUTPLKLNPRTV UUTSRRTTSRRTVVURPNLJIJLQW]01210/.--.14688741.../.../013454332211234555677889986k7876558::<>ADFGEB>;:99::;<=?BCA=95310//03688642_\]b58;<>@AA@><;;;<>ACDEFGHIJKJIGFFGFECCCDCCA?=;;;<>@BCB@???@ +>;878<<>@AB2A@?<5U>(6'!#1O@Xfo;?DILMMLLLKJIHGFEDB@>;86457:;<<<=>ADFEDCDEFFFECA?>>?@ABDGHIJJJGC?:7558;?BDFFGGHIJKLMMNMKIFDEGIKLLMOQSUVUQIA<:=CKSXZXTQQRSSQNLLJGCAABDFHJJJIJMRY`cc_XND<8643223332:11210/.-XUOF>:=CIOTY]000112100//.-ZYXWSKA858@GLPTY\.../01123455420//135543222358::986543210]112467764d^XRNMMOSY^0110-URRSQMJKPV\//--./00.YWVUW[`d233210/ZVSRSTSRRTUUSRSUWWUSSTUVVW,.//.-,WUTSSV\bf4ijklmn mllmmoppponm nprtttsqomljhhjmprsdtuuvwwxwuutssstuuttuuuspjd`_`ba_]\\]]ZTNJIJMNOONNNPTY]`bdgiiigea\WTRQPPOOPRTWYZ[[ZYWUSQNMLLLMLMLNMOOP2QRSTTSSQNLNPRSTW\bgjlmmmkgc_^]^_^][YXWVVVWXY[\^___^Q]ZXWX[_ch6788742babf5640YTSUY^13579;<<=<<GNSVXYZ\`eijgda_][WSQPPOMLMORTUVUTSRQRRTX]bc_XRONNMLKJKMNNLIHHGGFFHKPV[`egijkifcbcfhhghjie]VRQPOMMMORUVWXwYZ\^[UOLLMKIHIPX]^ZSMJKOV^fmswwtlaVPMMMLKJIJLMNMKHFFHIIJKNPOLJJJKLKHEB@@BDFGJNQQPPSY_`_^\[XVUVWWXVSOKHECA@@@BFKORSSTTTRQPNNMMLKJJKNQSSTUUTTSRPLHFE0GJKJHGGEDBCEECBAACFHHGDBABEGFCBAAA@@??@BBA}|DFEB{ogccfimt~DFDunlmnqw|{sjfgikmnmlkjf_XW]jw~~~xtljihhfc`^]`cgjntz|yqha\XQMMWgv{uj`XOGDFIMR\gqyzn`VSX`fiihec``abccyeggbZTQNIB>=CLU[\\\]biprrrtusng`WKCAHRY\ZUOJFCAABDIQ\c_SG@ADGJQ[dijkostohcab_YTSX^cimonic]XVWZ[[\^a`][[_dfec``bdeddeiljd^["\\\]]^]YUQQT[cijiea\YWVVWWWUROLIHGF1CA?><;<>ADGJMMLIFDCEIMPRRSTVXZ\^/0122334567788999:2;<=>>>=;:988776llmmmljhfddefik66778:;=???><:75gecbababdfhkmquz@CDEDB@?>=<; ::876jhfecba`_^]^_`aaa``abbccdeffgg4556677887754 556777653daaacba`^]\[ZYZ[]^^_`abcdedca_^]^_`aaabdfhhgfecb(cccb`_^_`aaa`^\ZYY[\^__`abbbaaabaabccb`^+,,--,"---,,+*))*+,,,+*+,-.--,+**)('&&&'()'&%%%&&&'(*+,-..--.-,+**+*+,,-,,+--,+,++*++,-. +--,+++,--,+*)*+,,,+*)))(())**++*++*))*++,+*)))*++)(((*+,-,,++***))()*+,-,+++,,+***)('')*++*)((('&&&'()))('&%%&')*+,,,*'$#$&'()('(()**)((''&%&&'(()**++*)**+**)(('%$#"""#$#$%&'((('((''&%%$%$$"  !!!  !!!  + !"#$#"!  !!"###$$%%%#!(!"$#!"%&%"!! !#$$$%$$%%&'&%$$##$%&&'(('&%$#"##"!  "#$%%%$$##$$$%&''%$%&$"""##$%%$#"#$&&&''&&%#""!"!!  + "#$%&()(&$%$#"#""#%$'%%%$$#"!!! !!"#$&&%$##$$#"!!!"#$%&&&%%$$###$%&&%%$#"!"#$%' (&%#"""#$%%%##$%$$#$%%"!"$&(&$%'%#"!!"$%%#! !!"#$ #"""! "%&%#"! ""###""#%''('(/*('%%&(&%%%&())&$#%(**'$"!!! !#&'&&%%%'$" !""###"##%')))'%###$$#"!U !###""!! !""#$$$#"!!!#%&&%$"! !"#$%%%#"  !""##$$###%'))('%#""$%$#"!  #%&%#!"$'('$##$'1'$#$%'''&%$%%&%$"!""#$$$#"#$%$#"!!#%'&%#""#$%&&'# #$%%$" "#$$%& %%$##%%%$#$%%$#"!  "$'+(0('(+  + !#$%&'('&&%%&&'&%(&&&%%#! ' +#/6: #&'&&%$#""  "$%$#""#$$$#"  !"#$$##"!!!"J##$%%&&&%#!!!"#$%%&&'()*)&!$*-.,)&%%%$#! !! !"&*.11.)#"! #%" !#%A*'$! !#%(!$! !#%()    !$(+/01232123"44456789:;;:9877788766689:::99::;;<===>???>=<;:73-)'#&&&%&&%#"%(***))*-024678:;;:852/-,-./002333210.-,+*+*+++,,---,+)''(*+,-0478::;;:7420/.,+*)('&''())***)"(('%$$%&(*'&'($  #%!)/122100//0010/.-+*('%#C?<:8752 4#(,-./0248:;965431/-,++*('')*++,,++**++-/37850+('%%%'(('%$%%%$$&(+/258:9754468878874/*('&&&%&')+,-,o-/0/*&$%%%$#$(.230+'%%(+059=??<70*%$$%%$###$&&&$#"""#$$%')(&%%&&'&$"! "#$&(*)('),/0//.-,***+,,+*'%#"! "%(*))()(('''(('&%%'())*++*)(&$"""##$&&&%$$#"""#$#"C""DD#%&&$"! !#%$"! @!!"!B@ABE$$$">61/0246989:=ADC>743468876653.)'+5@GHFFHKMLIEB@=987776531113579=AB?:50-+(&&,6>B>73/*%#$'+.28<@BB>7/(&*059986422356B789972.+)&" %+.//--05:=<<<==;73.%").10,(%#  !$(/43-%!!$%'+28<*==;73220-)(+/369:973/,+,/111355300256531013-479840../000/...-,(&%(-49:9630-,++,,+*('%$#""#!  "#$%%$"! !"#$$%)66777643100023421100///../0001124578:=@!###"! 433210 111000/000111010111-,-. -,,+*)))*++,--.---,,+,---,,-./000/.///.-,+,--.- +,,,-.00/-,ـ܀ )RLބDׅ5÷ڀlЄ΀/򀃅򁈊\¿GҘڈžƻ +ξn/ùƽï?żþ̹иĿĶǾĿĽſԄd& +__acdca```a `___``_^]\]^_`+aaba`^\ZXWVWX[]]]\ZYXVUSRQQSUXZ\\^_acefeca`_ ^]\[\_befffed2 +3567876544543fdcbba`abcddcb` _^]]^_`aa`__^]^/0011210`^\ZYWWWXY[[\\\]^_``a`_^]\^`aa_^]]^_^]]^_``aa` aabcddc`]ZXXY XWVUVWYZ[[ZYXWUTSRPONMKJJKMPRTU0TTUWYZZYXWVUUUTUVWWWVWWVUTSSRSSSTUUSRPPPQRVVWYXXVXYYYXXWVVUTTSQONOQTVWVVVWWXWVUTTTVXXXVUUVWWWVTSRQPPPONLKIGFGHKNOONLLKJKLLLIGFGHGD?BEFDA><;:8776567;?DFD=61."/24666531]YWX[`3579;=???><:;=@CEFFG&HIKMOONKIFECB@?><;<>@ABBA@???>=;:;>ADFGHIJKLK LMOPQQPNNOPQ@PPPOONNMLMPSTTSSRPNJGFEDB@>=>>?ADFGFDA?;3L0;2>1GYdjr>EJLLKJKMMLKJGD@>=;::;y<=>>><<=>@BCCCBA@?=;:9;?CGKMOPOMID?:88:=@AA@ABEHKMMMLKKJHGFFFGIKMNPQRQOMJHEBABDGILMOPPRSTUUVXYXURNKIJKMOOMJGDBDHPX][QE>:87!654321235542/\YXVTRRTW-02455544454!33322210][[/02334566543210123444567641//0120//0235554321246899876521012210//.../0110 //000/..././012b\ZZ/0/YVUVVTQPQTUUSSTWZ.011244420*1001123445566556799987423344eb^\\^afkpsuvwxWwwwvvwvsolklnppqruwxwuttvxyxtpnmoqtvwusnh`YUUY]_`aa`_`b23eb^XRNLKJJJKLNPQSVY\^``_ZVSQQQR,QPPQRQPNLJHGGHJNNQPQRRRSTTRPMLKKIHGIMQTX[]_`a +`__^\ZXXZ[]\\]^abccb`^[[\^aceg45V678886434455665432124689:;<<>??@@DLV_a`^\[ZXVTSRQQPONNMLKJGD}wromllm6777665556787530/-4./000/.../012225:CJOPQSW\afghhgea]XTQPOOOPQSUVXZ\ZXVUTUSQPOMKIJLOOMJHHIIHFEGILPTZbjpqnf]WWY]_bgmrqjaZURPNMLLMOQSUUSPMMOU[^]YSMJGFFIOW^a`\XVW]dlry~xiZRPRTSOLJJJIHGGIJJHFEDDFJOQPKFCBBA?>>@5CFHIIHIJJHGKVdoqkd_[YWUSRQOMIFDDCA@?@CGIJJKMOPPOMMLKKLKKLMPPOMKKLMNOOMLJIHFEEFJLKFA}~GIKJHDCHMPQOKGEEFFEEEFGFC@|{}Bxtstuutux|EFDsnnqrrrux}|tmms|}wsrqolgcchs~}yvrleaDgsHJLLIzqib^]^`ekpomklqyEHGudVMKR`s}n_SKGEA<:?JYgrvrieflrtrlgca]YWVUTQMKLRWTPMJHEA>>?CIR[_`_^`cddflsvocYSRRSPLGCCCDB@=<>DJJE><@FKPV_fhd^\[XXZbkkihjnoonmkgaYSRTUVVWWXY[]_accb``acb_[YZ^emssokg2c`^[YWX\bhifb``cfgggfc_]]_^\WTRPPONLKIHGFGIJIHGFFEDXEGIKLMMMNPSTUUVY\^00112223567789:;;:9:;<==<;987mlkjkln888nljihfecbaabdfhk79<=>?=;964feeedc4bb`^][Z[\^adglqx?AAA?>=<::99::;;<<;975iiihggfedba`__`_gacfhigedcdeef346789:::9876654445556777643ca`__`bdedb_]ZVTRSUVXZ[]`bdfffedccba`_^^_`aabbcdfhjjjhfeddfggfeddccbbbaa`_]\\^_``_^]\\^bfhfc`,-.//.,+,,-,,++,---,,,-.-+)(''()*+,++**))'&%%%&()*++-.-,+++***)(''()*+,,,++--,,+,,---, +,,,-,,+**))*)**))('&'(()))())*+,+,,+*++,,---,*('''()('&'())***+++***)(' &%$#"!!""#%&())((()('&%%&'('&%%&'(((&%'))*)**+++*)))((('%%%&'()()(''&&')"((())('&&%&&&%%%$$#!!  "#$$#"""! !!!#"!( !"#""!  ""##$#"!  ( !""! !!"#$%%%$$&'*+,+)'%%&&'''&%$%&&&%%$$% $#"!! !"#$/%'()*)('''(*+*(&%$##"! !!"#$&&&%$""#$%%$$#"! !#$$$###" !"#" #"""##$$$#$%$$##" #$%%%$##"!!"$&('%#"#$#"!!""###$$$%&''' &%%%$$$###$#"#$%&'&&%$#"""#$%%&&$$$$%&%$#"""#%&&'()*)'%#!  #%%#!"#$$#! !!  #$#! !""#""$')*+*(&%%%&(*'&'#('# !$&(('&%$##$&''%#!!"%((&#!"$%&*%%$$##$$$%%$#"!!!"#$&'((&#"#%&%%$$#!  !"#"  !##$$#""!  !  !#$ ##"  !!!"#=""#$%&''('&%$#"!#&"! "$$###%##E''((''&%$$$%%$#! !#%''%#"#%&''&&$"!!!"!! !"#%&&$##%'#! !!"##"##$#"!!""#%''%%&"!#%&%" "#&()*,%##%'* !"$$$"!   ! !"#$%&'''&&&'&%%%&())((''%$"!!!  !! !!'/47< $'((&&&'&%%$#" +  !"!!  "$%&&%$"+!#$%%%$$#"! !"$%&''(('%#!!"$%&&&'()*)'%" !"##" $),*###""   +'&&($"!  *,*)()*,.1479;<=>??>===>>><:8889:,<=>=<<<=>>=;:99:;=>>><95/)%#$&(())('&')('&%&'()*+,-..0234431.,++,-.R,+++,,++*)('''(*+-,--,+,---+*))('&&&')+./11233221100/.,+*++,,,+*)))+,,+*)(&%&'()*+  "(.00/.-,-,,+**)(&$C?;731/.-!'*+,-/2589741.,**)(()*,,-.//.- +.-,,,--,+*)b'&%&())(&%%%&%$#$&'),/49>?<60-,-/147;>=82-+)('''&'()*++)&%$&)-/.+(%#"""$',021.+**.38=ADE@7-'%')(&$#"=$$#"! "%(+*&# ! !#$$$#$$$#"$*4;<840.,+*)))(&$"!!!  !$% &'((&%%%$$%%&/(('%$$$&'(((''&&%##%')'$!>>C$&''&$DBB#'*,-+(%$#$%%$#!@?AD#FC?=<===<<=?BE$%$A955799:;=ADGHGEB>;;>BDA=:98753225;AEDB@?=:5139BK')*)'D>952111248;:8558=C$&%D;2)#!$-;GJD;2,(&%# '08A<<830148::75334431.-,--,)().20,(%#! #).231013557:=?:2,(()*)&# "&'$ $(,0588511100049:9X86652/+))*,-./0122233321001331/-.049>?<96310/.--/367520025788640../0/,*(((''&%%$$##%%%$#"!!! !!!"""!""#$%&'5677543222100012345 32221221&0/.../13578;?!""! 333433211122211000134554210,+,--.--,+)'%$$%&'()+,--...-,-.-,,-,,+,-/0100//001010/-,,- ,+**+.010.-܀Ҁꁆ聄ɀ􀝁 -6 ݅vʅ DŽ9$͆΀w݄K߄bžW´H˿WkŸ…%'¾ɿ&Ľ̽ƿ¾Ǽû¶؄ـĸŻL!`abcbabcefedcbbdeeecba`aabccde$da_][\]_``abcba^[XUSRRPPPSW[^`bdeeffgfeddcde233433222344565544433fff3444igfdccba`_^_^___^]\]\]]^__```_^^^]\[ZYZ[]^]^_^^][ZYZ[ ZZ[[\]]^_```_Aabefggecb`^\ZYWVVUUUWZ[[ZYYYZZZYWUSQPONNPSUVVVUUTSRQRSUWWXXXWVVUTSTUWXYYXXWVUUTTSSTVWWVTVTVVXYZYXYZYXYXVTSQPOOPQRSTUTTUUUTTTSSTTUUVWXYYXWVU +TSQONOPQRSTSQPNON&LJIJLMMNQUXXVQOOONLJIHHIJKLKJIHHIJJIIIHIJJJKJHGEDDDEFG +HHHGGFEDBA@A@BDFGHHIJJIHHJLOSUVWWWVUSQNMMNNO NMKIIHIJLNPQPOONNNOONOPPQSTUVWVUVY\^^[VRPPQRSVXZ[[ZZYXWVUTSSSQNLJIHGGGIKMONNNOQSUUUTTTSSSTUUTTRQOOPQR;STUUUTRQPQRSSRQOOOPQQQRTUVUSPNLKKLLMOQSVX-./.-WTRRSV,---,++U[SQQQRTUWXYYYZ-./01110/..-YXWVTSRRSSUVVUSRQONNMMNNNOPPQQPOONMLJIGFFFHKMNPQRSSTTU+,XVUTSSSTVX-),,,-/000/..-,+TRRRSTUW,,,XWVVWYZZZYYZYVRONPRQMHDCEILMLLMOPPOrMMOSUUTRRRQPPQRSSRQQUY\\XTRRUY_2320\[./1210.ZYZZYWWY[ZVRNNPRTUVURPMKKNTZ]\WSQQRTTRPOOQUXYZYZ[\\[YVSQONOPPNNMNOPRTUWFVUTTSRPNLKJIIIJJJHFECBBBCDFIKLLMMLKJJKLLLKJIHHIKLMOPQQONLKJIHHILKIHILOP +QRQPONOPQQPFONOPQRSSTUWXVQNLOSW\023320/-,+URNLLPTUUU+-/121.,URRT,./.-VSQSV-.//0011235540.--.ZXUSSST\SSSTTSSSRRQSW\00]XSQOMKJHGFGILOONNORV\13320//.-XTQPQRTUUUTTUXZ\]]][YWUUWZ[\.../00/.-,--YYXXYXVSQNNOQTVY-./0124568753100012 10.../13455432#1`^/024689::99:<=>?AAABDGIHE@=:86445%69ADGHGEDDEHLNNLJIHGEDCB@?>?>%??@@@AAA@ABEHIIHHGHIIGEDDEGGHHIJKLLMNPO PPQQQPONOOPQRTVWVTRPOLJHFFFGH GGGHHFA9/J<8=ISY_i;CHKKKJJKLLLKKJIGECBDFHIIGFEEDCCBBCCCBABCDEDkEFGJLNOPPNLHDA@@AA=98;@EGIKMOPPPONLJGEFGJKMOQTVXZZXWURMIGHKMNOQRSRQPOOMJGEEFHLQUZ]\XQIB@DNX\XOGA>=;99::97543e45665435665432223335776545677655541/./1334689864321001122357;=><:889;=>>=<:865456776532210023456654334565432U33221123320-TOKJMT.2322111/.WSPONMKIIILQW/2210/.-YWUSQNORUVUTTUUUWWWX-./00122334566776.54332223332b_^`d4676mmnnonmnopqrsuvvvtqliilrx{= ?ABAA@@??>)=?ACEINRW\_``^\YVTQONLKJJIIHHGFE}yuqnll6543322342/XTSSUWXY7ZZ[[[\^0220--07AJPTX[^`bdgihd_[ZYXVTUWYZZ[\^``^[XWVTSSRS$RPONOONLLLMOPONLKLLKJJJKKNT]dhfa[UQONMMOSXZ[ZWTQNMLLMPRSSRRRQQSW]cd_UMIIJLOSW]befdb`adhlprng]UQQSSQLIHIJJHGGIJJGEEEGIKLLJGD@??@BEHKLLKHFEEC@ytu=DKOPPRVXXVTRQPNKHFFHIHC?=>@DHKJIJJKKMNOPQRQONMMLKJKKLKIHHKMNNNOOOMH}DEFGIIIFDCDGIKLLLJIHHGFDDEGGFCCEFFyrprv{}}~yrmmnonlmou|HLMH~l^Y]fqzxl_WW^lzxlda``bhvIKJGEC~woid`^ahnrstuy~~yrlijmpsrmd]WTROJEBBEJR]ipnga`beec`_cluzxrjb[VQKFDGKPSUTRMGA=?FOW\\ZURSMY^_]]_bbbcca[RKGEEEDB?<:99@?>>=<<;sqq89::;:99pnkifdbabdefggfdcbbcdcd233456789:::8754$556788765443fedbaaabb`]YVTRQQSVXZ[\]^1_aba`_^]]]^`abdfgggfeee23444hgfeefghhhgffeefgfdba` __^]]]^`bcb`_,-..-../.-,,-/010/.-./.-+**+,--.///.,+)(''&%$%&)+,---,,+-,,//..-..--,+*)()))(()('('('())**)()))*+,,,+++,,-./12210/.-+*('&()*++**)))(('&%$###$%'()('&&')*))('&%&&'()))*)))(''(* )*)**+,,,+++*+,,,+++*))***('&%$###$%&(()('&'())*+++*))( +'&$###$$%%&%%$##"!!!  #%%#!  !!!   !!"!  !"""!!  !!!"#$&()*)(&%%%&%%$#$%&'&%%$$##"#$%&' &'(*++)&#"""#$%'())(('&&%$$$%%$#! !#$&%%$$$#$$%&''&%%$%%%$$#""##$%%%$%%&&&%$$#$%&&%%$%&'''%$"!""##$%&%#""#$$#$$%&'&&%$$# +$$%%$###""!"#"""!!  !!""#$%&%$$$#$$%&=$###$%%&'&%%&&''&&'('&#""!!"#$$"!! !"#"""#"! "$%%$#$$$###%())'$##%(+)(&3())'$"!#%&'('&$"!!#'*,*'$##%&&%#""$%'''&''((('&%#""#"""#$%&'(((''&%%%$#"!! ! !"#"! !"! !"##$%&&%$""! "! "$%$#">#$$$%%&'('%"!"#%'#!!#$$#$""$%#"#%('%%%&%$#$&)+(%$#! !" #%(*&$""#%&''&%%%')*+**)(&%%'()*&('%#"""$%'( *) $""$(! !!! !#$$#!   "##"! !!  !""#$%%&'&&&%&&''&' ()***)('&%$#"##""!  %),/5#%''&%%& +%$$##$$#!  !#%&&%$##"!! ! !!"##""!"#$%&&&%$"  "##%&%$#! !"#$%&()*+0*)(%"!"$%&''()('&%$#" "$'*++(##)+'!,!! !# +"!!! ,('&(+11234445689:;=>>?><:779=AC!! !"!! !!""!! 9643*(&&%&&&'&%%%'*,/13566530.,@--./111/-+*('''*-//.+*)((''),.00.,)(&%%'()***)('(*,..,*)('&%%&''()))('''&''()**)**("&),/00/.-,++*))(()('&IFC@<8520/ $"!!!"#0$%"(-013455678852/./.,+,-./00123331/.-,,+*)(())('''()**)(&%%%&&'+16984.*'%%%&(*-//.-+)'&&&')++*)((('(+/330*%##$%'(+.13421/0147:<:5/)'())'$"!"""!!!#$$#"!!#$&''&$"  !"$&''&$"!!!:66!&))()+,,+*)('&$#"#%&$! "$&&% &&'())('&%%$%%$#"#$&''()*+)&FBABDCBBD#$%&'''&$$%'()**)(''&&%$$%&'%#DD#%''KF@<:<>@BCC@??A@<744666579=AG'**&A5-+.4:?AA@;5.))-5?FG@8311004=H''&i%$#EC>9521027;==<;;61.-,*'$"!"%*18<:6214776425:@B@<83/-*'#"$(,./0.+&!!&+./.+((+./..03430+&#"!"$%%&'),.147751.*().47731248;<=<:867873.,.27;==<<;::9852-*)-378779=AB@:40.-,,/379985322577520/-*('(*,-.-+)'&%%%&&&%%%$$"!!!#$%'('%! "%&&%%&'((('32 34577654321113632223210/.-,+++-05:?!""! 98786543222345566543211100///0/.-,+)'&$##$&()***+++,-.//.---, +-.///../0 22122345545432100///.,+++,-..-,,ڀ䀅ɀāā Q86߄؄iׄ=þ̈́2†(نڅۀJû̀2»_ÿPĿź.Oʄˀ"üʲ"¼~큉úòƳ̺ʿŸļľK(%]^`aabbcddefghgebacehhfdbbcdeffghhgfedcb`_]]]_acddca_]\ZXURPPRUX\^`abdef322233ee22ddb`__acde333445566654 32dccde33443$2221cbbaaab10`_]\]`111`^]]\]]]\[[\]^/___``a1`^^/0/\YXXYZ[\]^#_`bbbccdddcaa`aacfh55hfeddc`^\ZXWVUVW`VVVUUTSSRRSTUVVVUUTSSTUUUTTSSRRRSUVWWWY[\[[ZYXWVUUTTSSTTTSTUXZ]`_a^a_b^]]\[ZYXWWXXWVVWWXYZ[\\[Z[\[ZXXWWWXYYYXWXXYYYZZYXVTSRSUVVUTUUVVVUUTSTUVUUTTSRQONMMMOQRSUVWVTRQOMJHFDCCEGIKLMML MNONNMLLLK JIHIIJJIHGFGHINJIIJJKKJJIIHHGEEDEEEDEGIKJIHGFFFGIJKMOQTVY[^`aa^ZVRONNOOPPOONNOOOQSTTSRRQQPPPOPQRRRSSUVUTSRRRSTUVVSOLKLNQTWYXWWWXXXWVTRPPONMNMLLLMOPONNNPRTVXXWVUUTTTSRSTTRPPQRSTUUTSRRSRRQPOMLLLMNNO2PRSTSQPNMMNPRSUXZ./0100/-YVTQOOOPSV,,VRNKJJJKNPRUX-./ .-YWWVUUTSTUUUTSQOMLLKLMNNNMLKHFEFGHHGHJMOQSTSSRQQQRSUWY-//00//..///.-,*U+-/01110/.--.C[Z[..[XVRMIHJMMJE@@DKQSRONOQRQOOQTUVWYXURPOOMMORSSRPPQTY\\YWVVY\/00/01221/-W VWY[\[[\[YVT QNJHILQUWVTRSTUVWY[] \[ZZXURPNNNOP1OPPQRTUVVVWVUROMKJHFDEFGGHIIIHGFEEEDDEEFGGGHJKLLLKJIHGGJMPUZYTOKHFDBBEHLMNMLmNQUXVQLIJMPRSRPNNPQRQRSUVTQNKLMPPNMMQW.00/.-+SPNNORWYXUSS,047520/.,+TRQQTX-//-XW,.022334443345531/..ZWTQQQRSTUZVUTRQRUWXWVUWYWTPNNOONMKJIIJKLKJKNSX[\\[ZYXWWVVVWXYYZ[[[XUSSTVVWXXWVUTSSSRRRTXZZYXZ./00/.YW)UTTUWWXWUQOQUZ/12445689:974322234579:9630/0*123332210/^]]/0356678:<>>?@DEDEFHJJGDA?=;:9:;<=>?@ABBAA@?=b<;::98640-VSTW/5;?BBBA@>;879=BFIJHE@==>BEHJLNONKGECCCDDDCA?=<:99 ?@ACDDC@=:86543210/01243235677752/-,,--,YWVV,.0135 421/./011/-URSV,-,,+,,,++VUTSTUVW XY-.011222321100123444324443hj677ljhiknprstssrpmjjntz@BEGHHGFHJLLKIGGGHIHHG$FFFGFD@<;:::8631``bddb]WUVY]_```]ZVSRQR!PNKIGEDEGJNRTVWVVTSONLMNNOOOQSUVUS6RRRSUVVUUURNKJKLNPTW[^``abccb`___`be4555446788753fh5789$:;<<<==>?ABDGJPW^dffdb^[XVUSQOMJHGEDC +B|xurolih432211ba^[XVTRPNLKLOTXYYYX$YY-/12`TF<9@SpFQWZ\^^^`cefedb`]YVVXZ\j]^^\[ZXWUTSSTUX[\[ZWTQNKJJKMOPPPONNNLJHHJNRUUSRRSTTTSSTSRQQSUWWWUTTUWWSPOPQRSUUUTTUWY[[YTPNNOPPQRV]eif_YUSRPOLKKLNONMLKLLKJIHJMOOLJIIJJIHGFEEEGJLMKGDCCEHIF@rjjnrv>DLW`dedb_\XTPMLMNMID@?@BDDB@BHOSTTUUVVWWUSOMKKLMNOPOOPQSSRPPOOOLHCDEEFGILNNLJGECCDEFGGFECCDHLNLHEEGHGGHHH|wsrtuvuuwzyungdfozCHIGC{ofeku~A@ypf`_bfiie`ZVU\dmvDFFAxpmosrl`TNPYbkszKNKndj{JI~vsrncUKJPVWTRPOMKKMQRPNNT[\YTSW^it~yj^XVUTRPPQQOLGB=;@LZdhe]UONQUXXVSQRTX]ac`[WSPMID@?@DHKMMMLKJKLMMOQTVTPMNQUX[`dd_WQMNQU[cnx|rh`^afknQquwwussuvvtpjc]XWY`iu~umifb\VTW`iopomid`^`bb_[WROMPUZ[YWXZ]^^]\ZWSONNOONLLNQSSRQPRUWWXY[]^_/013456678H7654hgfeddefhkmnnmkigeca`abccba_^]^`bddca`abdefggfec`][YXXWVUTSSRSUY_gnrs::9oljhhjm7899::;<<;:987nmkjhgfeffggfdb`^\ZXVVWY\^`ab2346789::99876656676ieb_^^_`a`^[WUVXZ[[ZYYZ[\]^^]]]^_bdfg33edccddefh455jjjkjkjhfdcba``_^]]]^_```_^],---../..///.--.0110.-,--../0110///00//.-,,+,,-.-,,+*)'&%%%&')*++**+***+**)***+,+,,*)(''))(('&&'''()((('&&''())*+,-.-..//0121//...-,+*('('&''(()*))(('''&&&%%&'(''&'()*)()*,-/0/0/0/0.--,+**+++**)*+++**++,++*))(('(()))((()))* +)(((''()))()))('&&%&%%$#"!  !!"##$$#"!!  !"!"! !!!  !""#$##"!! !###""!! !!"##$&(*,./000.,)'&%&%%%$ %&'(('&&%%$$$#$ %&''((''&%&'((&$"!!#%'()))(('&%%$#""#$%%$$$%&()*))('&&%$$# $%%$##$$%%&&&%$$#"#$2%&''&$#"!!"#$%&'(&%#"!!!"#%$"  !#$%&&&%%$$# $$%%%$$"! !"!   !!"#$ ##""##$$%&$B'&''&$"  !! #$#"!#$%$###$%%&'&%#""!!!"$%%$#"#%'))'%%%'($ %&')*))*)('& $" "%()(&% &&''(())*))(('&$"#$$$#$%&''('%#"!  !!!  !"!!"! !#&)+*'$!!"#"J#&(*(%" !#$%$#!!#$%$$%&'%#! !"$#" "%!!$%%#!!#"""#%%%1(&%$$%%&&'(''((''%$$%&&%%%&('%"!"##"!!  !##&)++*)('&&%%&&&'())***('%%&'(()('&%$%'''&%&'&%%&'((('%#"#%()))- !#"#"  !"""#" !$'**)'&$#"!!!  !!""#$% $$%&&''((('&&%%%&'(*+,,,+***)'&%$#"! #$(+.2"$%&&&%$ #" !"#""!! !""##$$$%$# $$$"! !! !"N!!! !"#$$%%%&(('$"! !#%'('&#! !"#&(**)'%$##"!$).0.*$)$##&  !  !!!"!!!/-/2223479;<=>>>=;98:=A"#$%&%$$%'()('&%%&%$$##""##" &%&')* ,/2345541.,+*+,6--..-+*('%%%&(*-./0/.-,))''()***+,./.,+++*)()***)))'%#"#%&(* ))('''()* '(!%*/243210/.-,,+*)((''&&% $FB>;852/-(('%#"!  #$%%%$W%&,%*<(0344433356776531/,,.011122233220/..-,--./121/-,*(&%%&()***))('&$##%'*,-,*F)))**))(()+,-,+*)*,,*('()))***)))*+,-+)'&'''&&&)-243/,)((()('&%$$%&&&%$#U%''&%%%&&%%$#""#%'()'%#!!"$&$ 722468 %,144320/,*'&&'('%"!""! #(+,++,,--,+)'%$$%&'(* ++,,+(JFEGI%')**)('%&'('%$$%'*,*'%%'('&JFEFGGEA=::;<<<=>@?<73127?#&&$!:3..29@""?82.-/2553/+((,16878;<81*'(.49=?BG')(D702BDC=5.++,--,-..-*&# '18:72+&%(,//.+)()-26972.+)'%#  "%()))(''(()*,./0.+))+-.02451,(&')+-18?EHF@83137;=?@@@?>>??>=:73/-,-026=DHF@9531.*(*/59:97532245531/,)()-010...000/..,*('&%%&()('&%%%$###$%&&'(( +2221245677665432111210///123321001233443210/.---,++,-16:<==<<975323455654 310/-,*)(()*,++, 0/-,+,,-..,*(''()***)*+,,,--.--,--./00//000111245666532100/..-,+,,-...--,р퀈€ဆЁف퀍񀘁Ȁ I%Y6ބD |Yӆ$܅ހx&*¿ÿ]ƾ"( I79̆􁂀ż¶ŻþĹHþo5``aa`__behihhgfedddeeedcbbbcef3344333fedcdefggfedcbbbc +baa``_\ZXWV!WY\^_``abcdde23332cbbbd2edba``abde2332 cba```abcccd232333211a```_^^^]]\[ \^/0001bba000/01232210.\]]\\[[\[N\]^_`abba``aabcddccbbcdefggfffggfddcccba^\ZWUTTUWXYXWWXXXWUTSRRRTVVWWXYZZYWTSRSTUVTSRRQPNNNPRTWYZ[[[\]\]\^\^ZYWVUTTTUVWXZ[\![[ZYYXWWWXYYYWVVWXYZZYWVTSSTUVWXYZ[\\\[\\[XVUUWZ\]\[XWV"UTSRQPPPQQRSTTSQOMJIJKLLMMLKJJHGEDC DFGHIIIHHGFFEDDCCCDDEDDEFGHHIHIIHHHIJLMOQQPOMKJHGFFFHIJIHGHJLNPRRRSUWZ\^][XTQOONOOPQQRSUWXZ\^__\XSQSUWVUT UUVVWWWVUTTUV UUVVWXYZ\]^]\ZFYXWVUTSQPPPRRRQQRSTSRQQQRSTUVVUUUVWWWVUTTSSSTTTSRRSTTSSRRSSTUVWWWUTSRRQPOONOOP+QRTVX[.//...-ZZXWVTSRRSV-/1211/.XVTTTUVXY--./0 /.-XXWVUTSRRQPPNML(MNNNMLJGEFGHHHIJKMORTUUUVVVTRPPRTUUTUV,-.//.--.-[..//01210.-,,,---WUTTTSSUWZZXURQQQOMJIKNQTVVUSSROJFHQ\120]YURPOOPPQRSSRRRSUWXWVUUWZ./00/.../.-XWWXKWVVXZ\\[ZZZXTPMMOQSUWWVUSRPOOQTWZ\^_//^\ZXVTQOMMNOQRSSRPOMMMNPRTVWWWVSPNLJIHIIHGFEDDCCDEFGHJKKLLLKLKLNPQOMLLMNORV[\YSLHGH +IJLMNNNORUVHUSQPQRRPOPPOMLMORSSPNLLNRVXZZZYYXXWWXYZ[-ZXURSU,./110/-,,,-/00/-WVW-/12345566420//.[XTPONMMMOPQQRSVZ03552]WSPNLJGEDEGLRWZXUROMMLLKLNQTWXZ\\ZXTQMIHILPSWZ[\ZWTRRUX[\ZWTSTWZZWPKILPSRQQSUWWWX.0121/\XURPPPQPPQRTW\02456665543223345677753444334310//1379:964458=AAA@ACEEEDCB@>=>>>=<=?@A@?8@AAA?=;:865421126:>ABAAA@><:889=BGIHEB@>=>ADGJMOQPNLKIHGF+EC?<989==<;:99;=???@BDFGGFEDDFILONKGCAABCDDCDDEFGIKMNPRTVURMGC?=ACDEGJMNMJGGILNOPPPONMMLKIHIIIJKMQU[_`]WQMKKKJGD@=:8765446787665678 789:::9765 6667787776 54334567766554)3334579<=?@@@?><<=?BEGHGD@<976543223334320/.-./134!334443223442001223344432223321/.,+WWX-. /0010/-+X-./ +000100/..././001110bbcbb`_][[\]`dimoonmml#morv{ADFGGGHHGFFFEDDEFFDA?zula]co>?>=;87532db`[VTVXYYXUQPOOPRSTSQPQOPOOONMLJIIJLOQSUVVVWZZ\ZZXYWWVTQOMNRWZ\]_`_\ZYYZ[\\]]^^^_abccbaaacefhiijiii579::9N;<=;98:=@BDDCBBCDEFEEGILORUX[^`a`_]\[ZYXUSQONLJHFC~}|{yuqlhggffedb`]ZYYYXVSPN`MKIGGIKMPSVWWVVUSQNKIEA<4-MEBE)<\BT[\[[[\^`bcca_\YWWXZ[\]`aa`_^][YWTSRRQPOPSX\^^\XSOMLKJHHIKLLKKJKLMMKIILQW[^^[XWV/WYYYWVVY^_[TOLLMNOQTVWXXY[\YUPMLLKKNSZaed\RJGGHJwKLMNMLJIIJJJLPUYYVPLIHGFGHIJIHGGIJJJIHHILPQPLHGGJMRVZ\^_^^][WRNNPRQNJFC@??ADEFJOSUTRRRQPPPRSSRPNMLKKLNOQSUVWWUSRQQPNKGEFHIKMNLIF~DGIKMLJHILOONLJHGHLRURK}xusrqqrsuvwxxwusrqqrtx|@A@|wtvy{|zwsnjgfdbbcdffegnyABA|yvtojhmxth`ZY\dnuz}|vmilx{trv|~tib_]\WRNKHFFGEB==DQ]cb`__cipw||wndZSNHB@CJQUVTOJHNZekic\VROOOPPRTVVUSRSTTUUVWYYVQJFFHMPPMJGGHIJJLPTXZYWTSVZ_aba_[X TQNNPUY[[[\]R^`cfgedejpuyyxtmd[TQRW]ab`\[^dimnnorsrnhc^[YZ[\[XUSQPQRSRQONNQSUVY[[XTRRRQNJIKNRUVUTQKGHMSXZ\\]\]^0235678c7766554gffeddcdefghhgfedccbbbceghgda]ZXWXYZZ[]^`bdeedb`_]\ZXVUUVVVUTSSSTWZ]^___`aceghjjklnnnljgggi56 lkjjkkkjih#ggfc_XRNLMPSWZ[\]]^`b23445567899987678(765igeb`^^^_acddca_^^^]]\[ZZYXXWWWXY[]^`bccddd22d%eghijjkk6mmllkigeca`_^][ZYYY[]`cdedb` --.-,++,./0/.110///0/..-...--,,-,+*)('&%%&'()*)**++*)*+,-,,+**+,-.///.-,,+++,)('()*)(()*(()))*+,,-./..-.---./0/. -+*(&%%'()**)*))('&&'(*+++,-..-+('&%&&%$$$%')*,---..---.---.--,+*)( ))*+,--,,++*)('&'((('&''()*+,+*((()+,,+*('&&''&%$##"#"!   !  !3""!!"#$%&())('%$#""!!!"###"! !!"#$%&&&'(*,-..,*(&$#$%&''()*++)&$#$%&&'&% &&'()))(('''( +))**+,,+*(' &&%%$$###$%&'((''&%%%&&'(('('&%$$$%%%$ +%&&'((('&%$%$$#$$%%$ ##"##$%&( '''&&&%$$$% %$##$$$%& &&%%$$$#""!! !  !!"#$%%$$%%%$#""#$ +&%$#$&''&$#4! "$%&&%$$#"$+)&$"!!!""#$%%$$$%&'''&%%&'S%%&&&'''&&&())((()(&#""#%&((('&&%$$$%&(*+,,**)'&%$#"""#$$%%%$#"""#$%'()))(&$#"!  !!"!"!"$&&%#"$&)*)&" !"#$###$&$###$$###$#! !#%%#" !#%&''&%%%%&'''&$""$$## *(&$#"#$d%&((%#!  $'((&$"!""!!!"$%&'''('&$#! #%(*+,,*('%%&()*(&%$%')*($ !$%$###%&&&')'%#"##%&) K!"" !"$%$#"!  #%&%$###$$%$"! !#$%%&&&'(*++*)(('&&'()(%" !#$$#!!#$##"""#"! + !""#"!  !"#$$#"!!!#$&%#  !7 !!"""#$%%&&')))'# !#%%$" !#$%&&%%$##""! !#$&),//-(# &  !())**+* +-/247898878789:>??@?><:99:;<> =978;==<;975433211233237>!"!A?>=<9657>EFB:3/--05:>@BB=512:DIHB<:;@EFC<51011/,*(&%%%$""+376311369=@@=72.+)%"!#(-00.*&$'/8=;72-)('())*+,,+*)**+++,-..-)%""%(*+*'&&'(''(*-./.-+*+.256641-*(&%&*.01112211123479:8667:<>>=:61+'&(,0331.-/379988:=;<:7410/02321/-+++,-,*('')+,-/00.+***)'%$%&())(''&%# !$&'''&211122321 24566520.-../0123332100/.-,+++,,-,,+-.0123455654210125556765 +30+&$#$%&() **+ 10/-,+++,-.-,,+*)&(''()*,-.../..---../00///001222345543200//-,+*))*+-.010/.-Ҁ́瀻ۀ EU>݄ń!Dž$~τԄb"Ԁڄ<򀇋򁈈IAₖ9"¸6҅Ʒ7¿÷ȷżżù,/…VǾ] `abbbaabdefg fedddccbbcdefeedddcbaabdf33feefghij3ihfdc`]YVTSSTTTUVWXYZ\]^_`aa``_`accb`^\\\]_bddcbabcdcba`__^_`bc11cba``_```00122322110/_^\YWWWYZ\]^__`_^^]_000_^]]]^_`a`__`aaa`_^\[\]A\ZYYZ[[\\]_aaa`^]\\[ZXXX[_dhk6jgdba^\ZYYXXXY[\]]]^___]\ZYXXXYYXVUT%SSSRPNOPRSUWYZ[\]^^^_`bcba`^__]]ZXWWVW1Y[\\[ZZZ[[[ZZYYYXVUTTRQPONMNPSW[^__^\ZXVVWYYXVUVWXYZZYWUTSSSTVWVTSRQQP QQQPPPONLIHGGFGFG"FFGHIIIHFEDCDDDEEEFFGHHIHHGGFEEDDDEFGIKKKIIHGFEEFGIKNPPOMKJJKKLMMML%MNONMMLMMNPSUVVVUSSRRRSSTVX[^01234455430WQPUZ\][ZXXWVUSSSTTUVWXYZZ[\]]^^^]]]\[ZXWVUTSSSRQQQSUWYZ[\]\ZXWUUUVWWXXXYZ[[YXVUTSQON OPQQQRSTTUTSSRQPPOPQPONNOPRSSTUVWWVUTTUVWWVVVUTSRQONOQTW-..-,+VUUW,-.//010/.--,,XXXWUTSQPOONOOPPQQR!SRPMKKKJIGFGJORTUVW,WUQNMOSV,,++,-,+VVVWXXXWX,,-./0//.-...,USTUUVWXZ--YVTSRRQ%PQTX]00^YVUTRPNNPTUTPMLNPSTTTUUSPNNQTVWZ\/L..-[ZYZ-//.[YWUTTTVWWXY\/00^YURRRQQPPPQRSSQOMLKLMORUXZ]0110\WSPNMMNOQRQQONNNONNOOPQRQPONMMLKJIHGF4EDCDEFHLORSTTTSRSSTUTSQQPPNLJIHIKNPPNOQSTTRQPPNLJJKLMNPSTUUUVXYYYVROMLLMNOON OOPQRSSTUWVUUVUVVXZ---XVVW,-./.-YX-//.-.X//02357887420/.[XURPMMORSSSRQRUY/342.URRRQQPNLJKNT[02210[VRPNLJHFFHKQZ1551\UPLJIHIKMPRTWYXVUUVXZ\///\YVRNKJHGINTY./24431/.XSONMNOQRSTW.12211222456 +543210../123457876544457::8644579<@BCABBDEFFEDA?=<<<;<=?@AA@??@@A BBA?=:7668:;<=W>?ACC@=;:?@ACEHLNOPPNLJIHHIIHFDA?>@BDEFFGGHIJJKKJIE@;6430+KB@F+5>FJMMNNNMMOPR!QOMLMORUVUTSSPJB;88;@CEC?9522358:<;:864445679;>ABAA@@???BEIKLKJJIHJGFEFGFC@<8668<>@?<:7679=@BCDDB@?@CFHHFCA?>=<<=@BCCBBA@@ACFHKMPRTTTPJB<:=AEHBIJLMOONJFDGKOQQQPPONKF>746=DILNNPRTWXWUQMJFC@=:765677654467754468:< ;:9765678989::;:98779:;9876777678\:;;<>@BBA?>==@DILLIC=:9876533344321124554320/0233210/.XX.256665420.-,-/1233344322235544333210/,TQQS+++,.0110001010/.-YXXY--.//000/.-[../001220/[YYZZ[[[\]\[ZYWWWYY[]aejnponmllkkmpsttsstvvvtrrux=>?>=wvx=@ABBBA?{xww9766789987643b_[XVWZ]^\VOJHHHGC?;9:=@CCEHLOQQPNLJIJMPRSTUVWVUTVTUSQPTVYXSLGFJQW\`dfea\XXZ_dggeb`adgihfcaadgijkl778889:;<=?@BDGILMOQSUUTSRRRSTTVWXZ\^^][YXWVVUTZSRRQPONMKJHFC}wqlkjjheb`___^\[YXWWWVTRQNLKKMQWZXURPOOOPQSTSMFBBCA<5/+TSV.49<:64=TxMWZ[[\\]\\\]]^]\[[_bdb_^_a`\YWUTSQPNMMORW[[VPMLMLJFDDFJNPQRSTTSRPONMMNPTZafge`[XVVXZ[ZXUQNLKLLMKIGFHMSY]\[ZZ[]^\WROOT[_aa_[UOIEDEFGIKOSVXYWTQPNMKKMOQSUVWWYZWRLGEDEHJJHFEFHJJJIIKLORSSQOLJGFHMSX[[YXXYYXVTTUSPLHGGGFFGFFFHKNQSSROMMQTWXXWUROMKJKKLNQUXXVSPNLKKKJH|HMPQPLIFEDCEHJKHEBCFKPQPLIHILNLI~}~yokmrw{|pfa`dgils>BDC@{xx{~~{unha\Z^acfjotvzztommpv~BCzphb`bgjlmkigfgikkkjkmpsw|~xtrnjc[N@76>>=<;;= !! <;< !"##" >;::b(&$#""#$%$! ""  !"$&(*+*)'&$%'(*+-./0/../..,+)*+--+&"!"&*-02330,)((*-00/-++,.//-+*))*0+!"$%&'(('&%%&&'()*,-/0100/..//..-G,++*('%$GEB>:88752/-,+*)'%$##$##"!!  #%%$! !"""';'.10/01112.3211146653345420/.--,++**+-033/+'&&&$"!!#&(***+**)((''(+/36751-+*+-/00.,)'&%%&&%#"!"$)-/.-,,-/0.+'%%(,0221.+&" !"$%')+-..,+)'&%$$%'(*+,-./0.+'$"""$&&%#"#$%&%$$$%')**)'&%$#%(,0110//0/.-+++*(&$#!$&(*++*(&&(*,--,+*('&%&&'(+-/0/-+*)'LJIIFC@BG'*,-,)'%$$GFEFFF$%'))'%##&),-,)'&(*,+(HDCBABEHGB<9;>ACDGJKGA92.-/2458 ! ;::=?A@=:742023469<>>@BDEDB?;7569?E%%G@:511_36899764456776569CA80,)'%#%)0441-+**,.134455420.+)(%#"#&),.147962.*)((&#68!'+./11221/../11/,)(*-01/,,-..-,++-010.-.03578887764357851-,++,,-,+,.259=@@=854442/,+,.145531.,*)((()((()**)))('$! !#%&%%%&%$! "##$%&' 32221101222322210/..-../0121/.---./01121100134430-+*+,,,+++,./1368;655543210/012234330,'#"#%&'()*+--./ 1/.-,-./0//.-,+*+++*)('()*+,-./..-././/0133210/.--,+*)(('()+-///..Ԁ߁‼Ԁ 9K0AAф0ƄǂƆD¿҅τwhh8΄^󀆌_ +׷ 62 Ⱦ3Ƽ,SƼƾ¾Ѐ넍Ъǿ,̿ļ55ۄ>¿^3```abbcdddccdfikkjgda`___```aabcccaa`abccddc`^\]^ace8f3456677nlifefffeca^\ZYXWVUUVVWWWVUTSSRSSUVWWXXWWWXXYZ[[\]^_abdeedcbaaa`_^^_``0`_``__`0110///000//^/0/^]]]^_```aaab100/^^_`abceg3433db`_^]]\]]^]\[ZZYXWXXY[\\[ZYZWUSSTWZ]`ccb```abba`_^^]\]^`ccb`_^^]\[[ZXUROMLLNPRTUVUUVXYYYXXXYYZ[[\]]^_]]\\ZYWVVWWXYZZ[\]\ZXWWWV4WWVSQONMLLMNPQQRTWYZYWURQPPPRSSSRQPPPQSUWYZZZYWTRQQRSRSSRPPOOOPPPNMKKKJJIJIJKLLM NNNOOPOONNMN +MLLKJIIIJKLKJIIHGFEDDCCDEFFG IKMOQRSRQPONNNMLKLMNOOPQRTVY\`23444321a^\ZYXWUSR7SSTUUUVWXYZ[\\\]]^_a1123321/]\[[ZYYXXWWVUTSRQPPQSTUWXYZ[ZZYYX2YZ[[ZZYYYXXWVTSQONMMNOPPQRSTUUTSRQQQPOONMLKKLMOPPPONOPRSUVVWXYZYYWTRQPONOPRSUVWWVTRRSTV,./..//0@/.,++UVVVX,--YXVTQOMKKLNOPPPQRSTUUTSRQPNLJIHHGFEFJPVZ]][XVTSRRSTUVW,,,VUTV,..-,--/012211122110L.-VTSTW[/0/.YVTSRRRQQOLIHJPW[\WRLHGINSWWTOIFFINSVXWVUTRQQSVXXVTSSTWZ.///000/.ZYWURQPRTVWWWY\010\WSPONMLLMNNNMLMORUXY[]//[XSOLLMOQSTSRQPONNMMLMMNOPQPONMLLKJKKKLLKKLMNPQQRRS3RQOONNLIFEFHJKMNOOPQRRRQQRROIFGKQTSQONOPQSSRQQQRRRQP RSTTSRQPPPQQRSSTVXYYYXWWX-/12 11/.-YXXWXY--.z///0113456677642/[XWVWWWVUSRPNLLMOPQRVZ^_\YWUUUTRQQPQRV-02320.-WUSQPPONLIGFHKLMNRW[\ZXVTSSUY^1221^ZXVTSRQPQSUWWTPLJJMORUX.0/12431/..-YURPPQSWZ.///02454322332110001122110001 +23467887665444568:>@BDEFGDEFEC>:88::97779<@CEEEDEEEFEECB@=;988899:H;;<<;;;=>@@ACFGGFECBA@@@BCEFHJLNPPPOONLKIFEDDEFEDCCCDEEFFFGGIJJJIJJKJJKLMNOONoOPQRQMC4N=:DY9EMQRSSSPLHECCA>953233347:=>=<;:8654432cdgk79:<=>??@@ACDFGHJJKLLMMNNNMMNOPPOLIFEDDCB@><:9876669;>@ABEGIIGFDCBABCDGIKLMLJHHIJMPRTTQKC<7669>CFHIJKMPPLE=88>==>>>=<;::9899:9876789:::999::;;;:98876555678:=<:5^SLMQW\^_ ]YURQSUUSQPOPQTZ_b`ZURQRTVXXWUTDSRRRONLLNPQQPOOQTX\_bdfgijkkmnnlhda`aceghikmo89:;<>?ABCDFHIJLMPRTVWWXWVUUVXYZ[[\[ZYVTRPONNMLKJIGFED}wspoomkihgeca`_^]ZUQOOPRTVVTQNMMMNOQSQLEBFKNOPQPONKIGGIKMOQTVWX[^``]YVTW_8BMTTQLKLPTY\`ceec_\J[]__\ZZ[]]\ZYXWVTSPMJIKPTXYWUTTSPLHDBBEIMORSSROLJIIIJKMOSY_dd`ZTPOOQRRPNLKL>MMNNNQV\```_^\[YWSQPRX\\XTRRRPMJIJLPTY^`abcb^ZWUSROMKKLMOONNMLKLLKHEDEGHIIJLNONKIGGFEDB}DJPUXYWVUTSRRSSRPNMLJHFDCCCDGLQUVSPNORUWXYZ[ZXTPNLJIILORSROLJJJKKKIF}xyELSWWSNJHFDDEGHIGFFFGHFEEGJLLKKJIGGHMRTPH}||{tkginssrsvz|zwwvwxxvpjiozBCAzsppqrrqnjd][]^adhlklou}FILNK~}~}||~~xtrqpmida`aehkkifdcdfgebaesLPLgOBAKX^[QGBAFNX^_^^_`ba`aelrtsqomje_YUQNLJIINV`gigb]YVUTTSRQQSSSQQT\gnpnida]ZXSLD>AISYXSPOQSTTSTW\^_][ZYZ[ZWQKHIMRUWXZ^bdec`\[`ipuscne]VQPRUZ`gmpmga\[YWUV]fkliea]XSNMNRTSQRUY^addcba`^\ZWUUVWWVTQNKHGHIKMNOPNLIFDCEGKNQSTUWY\^123444567 6544555igedcba bcccba_][YM[]`bcca_^\\\]^`bdfhjkmpqrrokd^YVUTTSSTUVWXYZ[ZYXXWXYZ\_bdfggfedegijjifb`^_`bdfeb]UOKMRWYYYZ\_abdfi565676789'87766kigggijjigecbaaabbb`^\[[^aehj666543feeefghhij56lkjhgfedcb``__^][ZZ[]_aa`--../ ../024420/.-,- ..//0/.,+**+,-4322233321/.,+*)('''(()((('''()))**+,+,-.-,++***++*))()) )(()))*+***)(()*,,---..00.-,,++**++,+*)('(+''&'''(('&%&')*,-/00///010//.-,+**+-///.---,*)'%#""#$%''(''(()*))())***++,,---,+***++,-,+*)('9()))'&$#"""#$$%%%&(*,,*)('&&&''(('&%%$$%'()*++*(&$$$%%&%%$##$%%$#"##$#"""! !"#"! !!!"!!  !#$&'&&%%%$#"#$%&')**)('&&%$#$%&'()**+,**)))(''&%%%$$##$%&&'()*)))((('''((()))((('&%%%$#"#$ %%&&''&&&%$$$##"##$%%%$###$$#$$%%&''&&''('%%$###"""##$%&'''&%#""#$$$%%%&%%#"!  !""#$/##"!  "&),-,*(&%$###$$$###$$$$###$H%##$&(('&%%$$$#! $(++(# "%&'%""%'(''&%$$%&())'&%%%&(&&%%$#""#$%&%%&()'$#""###""!"! !!!"#%&'()**'%"!!"#%&&&%$###"""##$###"""!!" !!""#$$%%%&%&&&%%$$$#! !!"#$$%%$%&&$!"&('%###$%%%$ %$$##""#$%$$##$%&&'&% %$$$%&'&%%%&'''&&%$#""#$$$%&)++)'&%$#1%&%$#"!!! !"""$')))('&%%&),+(&$$#"$%&&%#!  "#%&&$#"!"#%' $ !"#"!  "#%&&&%%$$#"! !""!  !"#$%&'&'()*)'!#&#%& +$"&/025 "##$%&'&'''&%#! !""!o"#$$#"!  !"#$%&&%$$#$%&()*)'" !"#$%&&#!%'((('&%#!!#%&(()('%#"!  !#$$##!   !   "#<"!! "$$%%%&'(()+.01110/..//01345566776534689::;<=> !#%'()('%#!+# #&''&%<#! !#$%%$###$&''*.2552.+*+,-//.--,,,++))(&%##$&'''&&&'*-/0112 10.-,,-./.0 !"#$%'(*+,-,+ ,./001110//.,+A*)('&&KKJHEA>===<:8642/-+*)'%"  "#$#"  !!""!  !"##%*&**'$"#&*/25677641124420023320/9.-,)'&'*-010.,+*(&#! "$')*++*(&%%$$%%&(*-2553/+(((*++)('&%''')-0333210/-,)''),//-)((('%##$&),/2320-+)('&%$$%&'''&&&%&$"!"$'%&'('&$$###"!@?A#'+.//.-,,+*+++*('&&%$#"#%'+--+('')+-..///.,)(&&%')+--,*)(()***(&JGFEB??B$)-//-*'&$##$%''&%%%&&%$$&()*))(''&'*./,&C?@CD@;77:==<=?BCB?<;:::96337>"#!=8668(:;;:740/02468:99;>BGJ&(*+)LFBA@@??@BCC@=:v96311258:;:9778:<;968?I*-+G5$#,21*$"(.22112466446:==<;;;:741.,*)(((+/6;<;72/-++*)(()*++**,17<><964310-)# &-11.*)*,d-/1331/../11/*&$%'*,-.0356541/.047750,'$"#%(,05:<:62//.-,-17<><8530,)((+--,,.03566544321/-+++,,+*(&%#$$%&&%$!!"""##$%&2210 1223210/-,-/122210/00134689:;<=>><951.,**)))**+,-./.-,--./1245544344678975310/01120,'#!"%'))()*+,--./32101210/.-.-,+*))*+-/1/.---.01233321110/.-,+++**))*+-ʀҀԁՁŀ΀ā e 'ք)݇لфπ +%^ԄՀ')¿Rù#s@ԅy¿* ſ뀆˿ƽĿȺxҿ݄M EZ\_accbaa``abdefedcba`_^]'^_`aabaa`__``_^\[\\]^_`aaabd3456776jgfef5edca_]\[YYXXYYXXWVVVUTRPOPQRRRSTUVVUTTTUVWWWVUUWZ]_`_^ ]]^_```aa0 ``aa`^^^`b110`__^^__^ __`aaa`0012221112211011223332c]ba```abbba``_^\[ZZ[\\[ZXWWVVWXYYYXXXYZ[[ZYVSPNNPTY]`bdeffdb_]\ZWTRQRTWY\^_``_][YWUTTTVWXYYXVTSGRRRSTUVWXYYZ\[][[YXVWXYZYXXWXYYZ\^`aaa_][YWUTUVVVUUUVWY\_``_\ZYXVTRQQRSTUVWXYYXXWWVUTTSTUUUVWWWVUTSSSRRQPQRTTSRPQR7QPONMMLLLMNPQSSTTUVWWWVUSQONMLMMNNNOPPPQQRSTSRQOMKJIHGFEGILNOQQRQPONNOOOPOOOPOONOOPQQRRSUW[`232a\XVTS$RRRQQPONNMLKJJKMPRTVXYZ[\\]]\\\]_`ab10`^[YWUTUVXZ\^]\[YWVUTRQPQRSTVWXYYXXXYYZYWVVVWWUTRRRSSRQQPONMLKKJIHHHIIJKMNOONMNNOOP+QRSUVXZ[\\\.[ZYWVTROMMLLKLMORTVY[.///.---,,- ,+U*+,..///.-,-MWURPONNNOQTVWWXX,-...--YUROMKKKJIHHILORVY\\ZYY,,WVUVW,--,,WVTTT+-/121/-+V,-/0122232210i//-WTSUY.00.YTQONNOPRRQOMKJKQZ/_ZSNLOTWUOHCABEHKOSVWXXYXY-/00.WSOLMPSVWX-/000//.-XURQQRRSSTUVVWXY[\\ZXUQOML%NOPPONMMORUWXYYXVVUURPOOPRTUUTSRQPPOONOOONMML)MMNNOOONNOOOPPPQRRSSRQONOQRSSSQOLJHGFEFHJL5OTZ..ZUPKIIJJFDFMUYUOIFFILNPRRSSUXYZYVSRRSTSSQPPQRSSSRQOOPRUX[.//0234 33210/.,+UTTU,-/0112343457752.-YWUTRQPQ:STVVVUVWXZ[[YWTSTV.0343110/-YXXYYYVQKFDEGILNQRSSTTTUUVXY\01220XOIEDDEGIKMNOOPQSUWXXZ-./0112320-WROMORUX.1454200010/./01356530\Z[.012445778766566789:$<=>?ACEDCBA??@CGHFD@=:765568;?BDEECBABBCDEFDA><;;<<<;;:86557<@CFFEDCCDB@>===>?@BFJNQRRPMKHGGGHHGFECBCCCDDDEFHJKLLMNNOPQRQPOONMIC<65:BINPQSTVUPIB<8778889:;;;:9874cac5;@BCBAAACDFHIHIJKKLM NOQSSRQNKIGFEDYCB?;73be6;?ABBCDEGJLMNNMKJJJMPTVVSNHDBADHKOPPLFA<99:=ADGJLORUTQJB<889:=BHNRVWWUTRQPQRRQOMLMOPPOKGD@>==<;:98766654455678;=>??>>>??>>=C;:99:<=>>==>>??>;989:::98768:<>>=<;:865569;8kgeef33320]YWWXY[\\[^YWTTUX[[YVTVY\][XUTUX\_a`]YURPNMNNQPQRTUVX[_bfimprtwz}@@|ywutstvy=?@ABDFHILNPQRRSSTUUUVVWVVUUTMUVVVUUTRQPOOONMKJHGGFD|xusqpnlhda`^]^acdb`_^][XUSQPQSTUVUSOKIHGFEFHIIHHKNQR9SUVWY[^bfiigedef344321//05=FMLGA?CHMQVZ^``_^]^_^[XWX[\[XUT$SRPLIHKPW\][VSSSTSPLHFGHIKMMMLJIJLNPQPRV]cggc]XTRQONMMNPPNMLMPSUWZ^bdc_YTQONNNM4ORUWWTNIHIKMOOPSY`eea\WSOLIHIKLLKJJJKLNNNLJIHHGGGHIIJIHFCAABCEHIHEAEJPSTSST'UVVTQOMKIFCBBDFILORRQPOPRTVXYZ[[ZWTQOMKJIHFEDDFHHGD|xy|EFHJLMLKKJIGEEEFHIIHGGFGGHHHGGHIIHFCGLMKH}unhb_ahpuuttwz{{zzzywtqooqv{}~}ti`[\ahhggkorttstwz{|}HJIEFExqnlkid]VPNQW^ceedefda^al{IJJIGzmd^ZWUSRPOOQUVVSNIDA@DN^r{nhilmkea]ZWWY\_aa`^_adffd`\XTQONOPRV[`dhjkkigfda[VSSTTQLGCDHMPQRUY]`aaa`]ZUOIDBDHMOQRTWZ[]^acefgjntwtmaVLFCCHQbxJJseXQNNOSWZYVRONNPPOMIFDEINSVWWVTRQQRTVXZ[ZXURQPOMJFB??BDFGGHLPUYXZZYXXXY\_012334556665443gghhhfeccbaa```acdedca_]\\\[[[\_cgj677mkihhijmpswz{|||{zwrkd^ZWVU$VXZ]_abccb_][YXWWXZ\\[ZZ[\^_aba`__`bcb +a_ZTOMPW]ac bb`^[Z[_cfhj54455667877678889988776jigfdc"bbcdedca_^^^`di676433443fda__`beh45ihgfedddb`^]\[[ZYY)*,./..---../0110/.-,+,-..//.-,++*)**+**+,12232210/-,*))()))*))(() ('&%&&&'()***) +*+++*(''()*)***+++)*+**))()*+(++,--,,+++,,-..-,+**)))*++*)('&&''(0'''(*+++*(&$""#&*-/011210.,+*)&$""#%')*+,--,,+*('()*('&%$$%&''()*+,,.-.--,,+++,+,-./000/-+*(('(())()*,.//-+))(('&%&&'()***)((''&&&%%$%&'('&%$$%&&'&&%&'''&&%$#$$%&'&%$#"!""##$$$%&%$#"!   !#$%&''&%$%$ %%%$$$%%&'''& '(*+)'%$$$%&&%%$$#" !!"#%&''()*++,-- *)(('&&%&'&'()+,,+*)(''&%$##$%&'()**))(('&&'())(' &%$$$###$##""! """#$%%$$#$%%&&''( ''&&%$#"""!"#$%&') #$#"! !"#$$$%%&%#"!"!#%'*+,+)((&%$$%%$ $0%##$&&$#""!""##"!  $)-)%"!#&('#!#%''%#!"#%&&&&$#""#$%$%&'((('%#""###" #$$$#"""#$&'&&%$###$%&'''&%$#"###$$###"##$$%%%$###$$$%%$#"!"#$%%%$#! " !""!!"%))'#  !!!')'# "#$&&()))'%$#$%%$$$%%&&'''&&&%$##$%&&###$$$%c&&''(((''&&''&&%%%&&%%%&&'''&&'(())('%$$&%$%&''&#  "$%&&&%%%&''()*%  !""###$%&''(%#"!"$&'(&'    !"! !!!!#&((('%#!!!"###"!  !"#$%%&%&''((' %!"%&&'( '&$  --/ !!! !#$$$##$$%&&'&&&''()))('%#""! + -/!K"$%'((('&$$$%')++)&#  !$&'&$  !#$&(*)&!!$')**)'&%$%&''&%$%$#! / """  +e "#$%%$##"!!!"$'***)('&&')+,-./0124689:;<;:;;=?A"$&()(''&&%#"!!! /,+++d(&%$%&'()))**)(&%&(*,,*()+-..-,+,-/011/,)'&$#""$$%&&''(*,.023555689;:98877889 !"#$%&'(()*++,--.-.-,T++)(''&%JHGEDB@?>=;864310/000.,*('&$!  !!""!!"""!  !!"$&'('&%%&'K#$!!%(*-0221001220.-/1220.--...-+(%$&).231-***+*)&$##$%'((('&%&')*))*-158851.+*)('&'())(&&&(*, .035762.*(''&%%&(*,,*&#"#%'(((),032/,*(&#!!"$ +##$$%&'&%$#$$%&''&%$"!#$&%#B@!#'*,,++,-..,*('&%#"!"#$&(*++*)()*+,-./!.-,*)((())(&%##$&(('%GC@@ACEH%%&'('&%$#$%&''&&%%%&&&'('&HE#&)*)%E?;851139?BA>=>?@?:>=<;:9;>BDEDDEEDA<72//255447:;==<;=?ACEHJKKJJ%&%IFEG%&%F?:7}62.+*+/478878886227AL*,,+(H>4.,,,+**)((+.0/-*'$! "'2?KROG>99;=<96420024787532355531/-+)))*+,/269;;;:988763/,,./-*'%$&)++*+.123 +1/+'$#$'*-./01234f68983-&  %0>K**OLG@8/)'')-032/,)()+-,+(%$%'),...-+*((()*,-.-,+*))(&$! "%&&%$#""#$%?012332211100//00122210/.---,,++-/257654568:>?><:99<@EHIHFEDCBA@@ABDEEDCCBAABCDDCBAP@?><:76544455568;?BEFFEDDDCCB@?>=>>?ACEGIJJIHGFFGHIHHFEDCCDEGGGFDCCDEFGGFFGGHIJKLKKKLNOOOPPPOOMLLLMNOPQRSTUVVW USQNJGEDCCCA@? >=;:86557;?@@><;;=@CFHIIIHHHIJKKL!KJIKMOPPONMMLKJJJKKIHFDCCCBBCDEEFELGIKLMLKJIHEB>:620.038>DIKJD;3\/4:AFJLLMNPSUUSMF@<988:>BFJNQRPMJIJKMNPRTWXWUSRQNIFDCCBAA@@><;:9998889:;<<=>>?@ABCCDCDDCCB@?==?BCB@>?@>=;;;<;::9878:=?AEIMOOLG@93/.-./13467778899876544567876434568#76433456530//14565322100///02333210.//..-...,VUV,--../ 0134433221110//..-...[XUSSSQNKIIJKMO5PQSTUVWWX[_aa^\ZZYYXXWVVWY\_acdefiklmopswz}CEFFEEDDDCDCBqCCCA?=;86gdbaa_]YUSUX[ZXVVX\`a^\]`b`[WVWZ]___][YVSQQPTUYZ\[\]^`bfjnr;=?BDFGGFDB?>zyyz|?@BCEFGHIJLNPRSTUUTSRQQPPOONMLKJIJ(IIHFE}yvsqpnkgc_][YXXWVUVXZ\\ZXVVVUSRQR +QPMJIJLORVXZ[ZVQNQV[]_a2455543223'4442100136;@DGHIKKJIJNSWZ\\]]\ZWUTVY[[YVUTRQMKJNSXYVRNMNOPONNOPUQRTTSPOOPPQRV[clpoic_]\[ZYXWWWVTPMMNOQRRSSUWYYUPMLNPQQPOPQRSSSRQOMKIIIJKMOTY]_]YUPLJJKLMNPQRRQPNLIGFFFEDCCDFGGEDDFHIIHGHJKJGCABDGKPTWXXWTSTW[\YTOLKJIHHIJKLMNONOOQRSUVWXWWWXXWURPNLJHECA?xvyBB~zvuw}GJJHCGIKJIGEEEFGGHGFEDEHKMKFFJLKGB|yxuohcabfkpsttsrrstsohcbiqyDFGFD~wpjhlu|}xuttssuwuqlkpzGHGEysooruvusqnliea\XVX\acc`][XTPMNT^jrsngdgp|zgWOMPV[[WQKIIIHGGKTbp{{vqoqw}~xqkea_^`chow||wrqtxxtkc\WSNLNSX\`ejmnmkjie`^_cdaXOIGHLOSWZ]_abcca_\WRLGBBB@@ADIQX]_^]_cjnolmjikllhc`aelvuligfc^WOKLQW[[ZVROMMMKJJLORRPOOQRRQOLKJJHFDCEFFB>;:;?CHLPSW[_ab1122211000123556655433eeefedeVdba_^][ZYXY]dm<@CCA>:7mmmnoqruwz|~~}zuqkfa\XVVX[^`a`___```^\ZXXXYZZYXXWXYZ[[ZYYZ\]^_`%^\XTRSVZ^`bbba``abbaaceghgfdccdeg4556766787655568555445567665hfdb`___^^_abdedca`__behigdd34443fdbbccefg443ggffeedeefeeddeeedca`_^]\))*+,++,,-.///.--,+++,,++*++,-,+**)*+,../01210.,+*) +(''&&&''(() ***)(''()+,,++*)(()+,,,++*)()))))('())&%#""$&))***+*))'&&%&()+,-.-,+*))*+,-..//.-+)('&''() +,-.-+*)*+*)('&%&'(()*+,--.,,,-,.-...--,+*)('%$$#$$%'()('&%&&'''&&&'&''()*+***++**))('&%%$$%&'&%$#"!  !!"#""!!  !"!! !""#%&'(()(''&&&''(()))*+ *))((''&%%$# $$%$$##$$%&'()*))(())*))((''& +'&'''&&''()((''&&%%&%&%$#"! ! !!"##$##"# +$$$%%&'(((&&%%$#"  !#$$&') &%$$%&&%%$#"! "$ %"  !"$&)+ +&%$%%&4%#$&'&%#"  "%&&&$"  #&'&#""$%$! !#%')&#  "##%%$%$%%$$###$&()*(&$###"! !##$###%'**('&&% $$$%%&&%%$$#"#$%&%$$$##" 4 "#%%# !%)(&%$#!  #&'%" "$%')'%&&#! "#%'))'%"!!#$%&&'' #! !#)(('&%$##$&'&&%%$d%&'((&$##$&'%#! !"%'**)'&%$$#""#%'(('&%%'&$"  !#%'(&%$$%'('!'%%%&!   !#"!  !!!  !"#$%%%$%%&''('&%&&'''((()('&$"  !#$$$#$$%%&%$##$&'(('&&&%%$$$%%$#"! !"U#%''('&%$#!""!$ "##$%'()(&"!#&&$"  !#$%')*+*(&%$$$#!  "$&%" +  !  ? !"""##$%%&&'(*-..-++**++**))*,.01345679::;;<>?AC#%&&&%%$$##""#"d! /,+*++*)'&&(**)'&'),-+))*,,*('(*,.//.,*(%$$#$%''('()*+,.136 !"##""!:889: !""#$$%')*+,,-,+**)('.(()***))('&KJHFDA@?>=;741/-+**))('''('&$#$$#"! ! !"#$%%" #%'(<"#$$$#""%(+-../00/-++,/120//00/-,*(&&(+/0.*('()()*++*)'''(()+/49<;731//..-,+(&&&()-*+-..+'%$&'(('&&'(()))('%$#"##$%&),./.,(&#"##$%&'((('&%$""!"##"($%&%###$%%$$%&'&$" "$&),-.-,+*+-010,)''&'(()*++,,-.V/00/-,+*)'%$"!?>AF$%HEB?>?BG&((&HCBC$&(((&%$$$%%&&&'''&&%$$%&)+)%DC#&((%"><;:7411258;=>k??>;6326;?BD#$%%$GC?:646<@DDB?=<;;;<>=:769@G&'&$FC>9779;==<:887530-,-15775310-)''+2:@A>:78?BGJIEA<8655679=ACC?;:>=;:853125761*&%%(*-/13456677752/+'$FH%%###$'+/2321148::976899742138>EKQTPI@A:65431-)'(,03431.,+++*(()*+*)('()(('&%%%$#""#$$! "#%&(*+* .///0112221 00/.-,+*))*-14579;<=?@BCDCA?<852/,++,.12320/-,- ./000/.--../.-*('')+-...-,++, -.///..-,-./ 20/.--,-./00//.,,,-/00/.. /.-,,-./0/.-.-,,++*)̀ހ́򁃀€ǀ倖瀥 I>$N5pۅ.¿Ņӆk̅ʄ|9&Fo#' pŹ#LCۀ;н¿žĿaĺ xKccdfghfeca`___``abbbc +ba`_]\\]^_`a `^\[ZZ[\\]_ad345434333fecbaa```_^^]\ZXWVUUUTTSSSRSTTTSSTVY\_``aabbccba`_^_```001ba`011123443210/_^__`b12211221110 `__`000123 2cb`__^__`__^\[[[ZZZ[\\\]_abbba`__^\[Z\YYXY\_aa`^]\[[\]_``__^^^\[ZZYYWVTTUVVWWXYYYWUSRPOOPRTTRONOSW\[][^\_]]\]^^_^\[ZZZ[[\\]]\[YXWWVRUTTSSRPOMLLMOQSUVVVUTRQPQRTUVWXWWVUTSRRRTUUVVWYZZZYXWTRPONOPQSTUVVWXYZYXWVVWXXWVTRQ RSTUUVUTTSRQPONLKKLMNOONMLLLMN +MMLKJJIIHHIJI JKMOQRSTUUTSRQ RSTVWXXWVVUTTSRQOONOOOPQRTUUVVWXYXYZ YZ[\]]\[ZYWVUVVWWXWWVVUUTUVVVUTTS +RQPPPOONMML KJHFEEEDCBA@AAABCDEEFGHIJKKJIIIJKLMNML MMNOPRSUVWXZ[ YVTRRQQQPOMLK"MORUWY[--,WTQOPSVWWVVX,--./123431/.-+TQOMLJKMPRST++,%---XVSNJIHGFFGIKLNPSW[/13442/-,+TRPPPQ RTU+-02332100/ +001110/..-.XTRRRSSTUUUVVVUTSTUVVTPLIILPSNTTSRPOMMLKKKMPSUXZZZYXXXWTOLJJKJIJOX144421/.-,XWUSQPPQRQPPPQRTWZ[[ZXVSPNNMMLLKJIJLQW[.\YWVVUUSRQR QQPPNLKKLNOQRSSRQOMLKJJJIIIJKLMNOgMLLLMNOPQRSRQPQRTUWWUROMJGEEGJNRVXWTPMJFCBDIOSSRPNMLKKLNPRSSRRSTWXXUSPNNOSW./.XTRRSRQOOOPRTUTROMMOPRTVXZY,"-/00/.-,,+VVW-/01110/.../01110//013210/.r[XTQQRUXZZWTSSTUUUTTSQOLIGGILOPQSVY\14676420YQLIJLOTY\]\[\]]\YVTRQPORW[^]\[[ZXUUWZ]\YURPPQRSQNMLNPQSSTTSSUX-/1233210.-XWX,-/12212355420/]]]/01210//01234420/02343456789;=?=<:;=>@AAA@@@?>>??>>=>?@.BCDDDCBA?<963111479;;:9:=<<>@CDEFGH GFEDDDEFGHIIHIIIJJIIHIJKKLLLKJIIIKLMMNO(PPPNMLLLKKKMPRUVVVUUSPNLLMMKIGFEDCBA?>==<-;<<=<;86j6;?CFHIJKKKJJIJKMPRSRPMLMMNNMKKJJIHGFGGHIJtKLLKJJIIHGGFGHKLLJFB?<94^Z_6>FKMKGC?==?ACEHKMPRUWXZ[ZUND<879;<>??;4,(*2;CHKMNQTVVTQNNPRSQOMLKIEB?>=<;:999:;<=>=<;::;<=>>?>==>?ACDEEEDCCCDEFFEDCBBBA?>:8899865566555789:<=>=;975310012345678998754599:?HQWZZXUSSUY^cfffddcb_][Z[]_``aabcdfgiklmnoqty?@AAB]CCCBCCCBBA?}zwwz?@?>==>?@A@?=:7dZURQOLKKKJGD?<=CHKJIMU]a^YVUWZ\\][XRTYel::;;<==>>@ACDFFGFFEEDCD EHJMNPQRST SSRQPONMLK7JIHFEzuqnmmnonlhc\WTUVXXYYXVTRPMJGGILOQQPQRSTUTSRPPOPPQRQNJHKQX]^^\ZYY\_01B2466653200125:AIOQQNKJKLMPTX[[ZYXWWX[^__\YXWVTSRPNLMQUVURPQTUUSQPPOCNNNPRVXYXWVUUTTTUX^dikkjihgeca``aa_]YTPLKKMQTVWWXZ\\YUSSTVXYYXWVUTRQTPMJIKNQRSSUWXVTSSSRQOMMNORTVWVTQNKGEB@?>}|}?BEHKNNLJJKMOPQRRPLHEDFHKNPSUWWTROMMPSSROMLKKKLLMNPRSUVWVUSQPPQRQONMKHEB|z{}}yurtzHJKJHECCDFGHHHIHGEDCCDDDEGJMOPOMLLKKJJIIGBwkjsIKziZPOVet{xqmmnmljhd`afoxABB{wtmoiffmquxz}~|xsolkigeejsIJ}tmjiiijjjiijjifdbbccb_\YYXXVRLFEIR[^^]^acddfhijkkhc\SLHGGGEDDHNV]ab_XQLMS_kqqomljjlquxxy{}~}zvrnkige`YUSUXYWUTW]emuyxsldabfhhgeca^\[\\\]^``]YUTUUSOLIIJKJIFCCEKSX[ZZ\^_]YVTSSTX_hqx}|wohcbceghhc\URSWZZWRNKJIHGFGJNRTUUVVURMGA;9:;===<$;:;?HPUVVVY]a110^\\/1345666777654433fefedFcca`][YXXZ\^`bdefec^XSQRW\aeilptwy{{zywvtqmhc]YWWZ]acdca__^]\ZXVUVWXYYZ#YYYZ[]_begiihedbba`][ZZZ[\]__`abdgi5$jhfc`_^_adfgg456766655567899988766543845677766554gda_]\[\\]`beeecba`abbaabcdefedb`__`bdeeeddded cccdefffeeefeeedd,-.0110/.,++*++,,---../ .-,+*+,--../.-+)('(*-..-,,+***)))('&&'(*+,-.-,,+++,,+**))*)()))***))( ++***++,,-,,**) **++,-.//0///..---,,+**))+-..-+*)*,-,-,,,+*))*++*)(&%###$')*)('(+.101010101110.-,+**))((('&%%$#$&'()))*)('%&')*@)(('&%%%&'''&&'''((()('&&%&&'()***++,,++*)))***)(&&%%&'(())('&%%$###""! !""##""!!""#"! !!"$%&''('&%%$$%&&&''()*)(('&&%$%&'()()*+*)('()(((''&'((''&&'&%$%$###$ +##"! !!  !!" ##$$##"""##$#$$%%&&&''(''&%$#"!"#$&'''$#! "$%&% $"! !!"" +&%#  !"#%'*$#""#"##$$&$##$$$%&%%%&''%#  #$##"#""!!! !!#$&'(('&$"! "'%%%$#""###" #%&((('&%$#""! ! "%(++('&%$###"! +"$$%&&&%$#"!u""#$$%%$$###$$$%%&''&%%%&'(('&%#!  "#&)*)'%" "$%$$#"!! !"$%%%$$$%&((&$"!!!#%&$##$$##""#%&&&$#!!"##$%&''&&%%$#$ (&$##$%'))(&&&()))(''&$#!!"$%&(&"!$')* (&%$#""$')*(>'&%%'*,+(%$##$$$#! !#$%&&&%%%'(''(((  + !"! !!"""!! !"##$$%$###$%%&'&%$#$$%&' &%#"! 2!"##$$%%$ +%&')*)'%$%& %$$$##"!!"#$%$]##""#%&&%"&$&""!!#%'(*++,+(" "#$&'()'%##$%%$"!  + !#%&$  "!! " ! '"&(('%$%&),.01100/.-,./11234578899:;=@!"#"""# CA?=> !!! !< 0*'&&%#! $*-,)&%%&'(*)($$&,/ !"# %&'())*++,---,,+*%)('&%IHHIJLNOOONNLJGDA>=<<==<:72.)'&&' &$#!  !!!"! ""#$$#"  ! !$&&%#"""#&B"&)(&$###$&*-.//..--./12210/.--,,+)()+.0/-+,-.-+*))( ''()*,-.-,,+-147887766542112210.+(&$$&(+,---///-*))*+,,,+++*)(''(((&$#$&()))*+,+)(()('&%%&'()+++)'%#!;<>!#%')*)(&%&')*+++)'$"!"$&'()+,,+)'&&(+,+)((()**)(''&&'')*+,-,,+**+,--,+*(&$"DBAABDEFDA=;<@EJ&'('&$#$%%&%%&%$%&')*+*)(S'&&&%"<426@%&H>3+&&*3<;95459;=>?ABA?=:98887547>FN))NG?9422345,6777542345542/../.+&"!#*0320//01258998642/+(&%%%'+/35762-)(,3<@@><;;;:::;=?AABCCCBA@?=;98740,+-/11/./159=??<95358:;9753110111235542///0/,*(()))(%#"$).121/01331//../159=AEGGGFC>8433467751-+,/231-*('&&(+- ,*'$  +#$&(*(''/ +00112333221<0.,+)))*+,,,---,*(&&(+047:=?BDEEDCA@><:841.+++-0355542100/-,+,-...--..013455321110/.-,++,,-./0/.-,+++,--../20/.-,+++,-/1110/-./0/.-+**+,.//..-.---,,,-...--,--.---,,ŀˁ恎ŀ݀΁Ȁ RB!,!<مىx˄ʅ=ބI[󀆊c݄քW/u9c" ل؀@̄ӄڄۀ'&νqĿ˾¾ȽN!hgghiijihgedbaaabbcdefghgfeb_[YXYY[\^__`abcdcb`^]\]`bddd2345543234555654455hfdcbaa_^\\[ZYWVUTSRQQPPOOOPRTUVWWXYZ[\]^^__``ab1121234678988654210_^^^_abddcba``_^]\\\]^_`001123332dcbaab +cccba`_^^]\]^^__`abcca`_^][ZYZZ[ZYXXYZYXWWWXZZ[ZZZ[\]\ZXVUTSRQPOPQRV[`efgffdeca_\[ZZZ[ZYXWVUUUVXZ\\\[ZXWUTSTUTUUV UTTSRRRSSRRSST+UVVVUUTSQPPOOOPQTWY[\\]]]^__^\[ZYYXVUTSSTTTUTUVWWVUUUVVWVUTRPONMMMLKJJIIIJJKLKLLLMOPRSTTUUTTSSTUWXXYYZ[\^_``_^\[ZXWWWXY[\]^^^]]\[[ZXWVVWWWXXYYZ[\]\\[[ZZZYYXXWVUUVWX WVUTTSSSRQ POONNMMKJHFDB AA@@ABBCCDEFGHIJKLMNMLJJJKLMNOOONNMLKLLMNNOOPQRSSTUVVVTSSRRQPOMLJGFEEEFGHIKMPSTVWY-..[XUTSTTVX-.023320.,+*TSTUUUTQOMLKJJKMOQSTUW,,--YWUSQONKHEDDEEEGILMNOQTW-./00/-XUSRPQRRQQRSW.123210/ 0011100/.--ZY-ZYWVUUVVWWXXXWVUTSRQQPONLKLNRVZ.//..YVROLJIIIJKNPRTUVVUSTV--XRLHFFIMRW.0111000/.-,WVTRPONAMNOPSUWWWXYZXURPNLJHGGHHJMQUVWVVWXYYXWUTRRRQQPPONMLMNOPRSTUTRPNMKJIJJKLNOQRRRQQPPNOPPQQQR%QNLKJJJKLNQSTRQPPPNLJKMPRSSRRSTUTQONOQERRSSRQPONNOPRU,,,WUTRONOPRSUW,,WTQPPQQRSTVX-./.-XUSRSW--.---.//0012234 +310.,++,-./[01220.YVVX.00]XSRTX\/010^ZUQNMMOPPPOOOQRSRPNMMNPSX^244420/[YY[\]]\[]0122110/.ZWTSUX]00`]ZXWV/USPNOQV[_a`]YTRQRTVWXY[]_a123222355530.WTTV-/01233210//.[YWX[]__^^^`1234321011245 79;<===?><;::9 +8889;<===>? +><;::;<=>?@ABDEGHHHGFEDA=8447;=?@@?>>?ACD+CCBBB@>==>@BCDEEFGHIJKKJHGFEFFFGHIKLLKIHHHIJKJKLNNNMMMNOPQQPNKIEA<99<@EJNOONLKJIIIJKKIFCA?=;:;=>@AABBBA@>=<:8jil:?CFGHIJKLMMLLMMNPQRRRQPOMKIHFFEEDDCCBA@???@@AABCCDFGIJLLMMMNNLOPQRSTSRRSSTSQOKHGILNNMJFCA@@ACFHKMPRTUVWWUNE<4.,.27:;:5/WV/6>DHJLNPSTTROMLLM OOONKHEB@>=<<=&>???>>>=<;;;:9877789;=>@BCDDEFHHFB><;;:98754433211358:;<; :9889;=@A@=:878763113468;<==;98778887767-652.RIEFLT\b34455655432235665410//01222110/.-,!VTRQQRUY.000/.-YYXWWWY[.\\[ZYXXYYXgWVTRPPQRTTSQPPPQQQOLHFEHLORRRTWZ]`aaabcdfghgeca``__`abdfhiklljhd`^]_cfjnpsux|}xttv{@A@@>=xww;<>@ABBA@><:mif,ea]YUPNOSX]`ba``_]YVTVX^_eg67::;<=>??@@AABCCDEGIJKJIIJLNOOMKJKKLKLKJHFEFE{vrmhecbb`^\ZYYYXWVUTSRQPQRSSQPPQRRQQPOLKKMNPSUX[]]\ZXWVTQOQSUUUVZ]__]\YWUVWYZ[]^_^^^`c3554321a_^../05<ENRRPOPRSRRQPMKNTZ]\\^abb_[WTSQOOPRRPMLMPQPMJJKLMOQRSTUUTSR SUX]befc_\YX1WUSQOMLLORVXYXY\_a_][Z[[\[[ZXVTRPNMMOPPPOOOPPPQTVWXXXWUTTTU"TRPMKIGEB?;pmry@DFIKMMKHGHLOPPOMLKJLNONNNPSUVUROMMNMKHHIKNNMKJIJKMOOPQRRQPNMMMOPOLIGD~{ywvvx~GJKJIIHGFFGGFEEFGGFEDCCDEEGIMQTVWXXWTQNKJIHFEILKGui_YXZ^aekt{}xqjfegkry?A@;qmjjl9>?=:657;@BBAAEMU\^__` _^]^`24443444333ffgghhhggfedcccddeeedcb`_^^^`acdefffdb^[ZZ\]^^_aeinsvwyyyxvtrqomjgecbcdeca][YYZ[\[YWVUVXZ\^__`__`behlq:;;:8nkihgeca`__`abdefgghii5567776igdbbaaabbdfg4556789W876543dcbcd33445566655hfdb`^\[[[]_abba_^]\\]^^]]]^___^^^`bcdcba``bcddcba``aceghgfeeefggh0 1223332210/1112344431/-,*)))(()*+,,---..//.-,+*))()*+,---0/.--..--, ++**)(''&&%$ %&&''(())***+**+,, )*+*+ *)('''(((,+++,---..///..--,,,+,--..//000//..-,++,,,+))((()(('&'(()+,- ,+*)))(('&%#$%'(+.25655531/.--,,,+++*)(''&&'(*+ ***))('&&% &'(()(())*++**('&'&%$ %$%%&')++,,-,+*)('''((())(((''&''&&%%&&'''&%$##"!"###$%&&'&'()**+,---,+**)((())*+,--,,+**)()*++,,++*+*))(('''&'('&%$#"!  !"#$$%%&%$#"""#$%$##"#$%$##"!  !"$$%%&&'%$#$%"""#"  "#$ %%$#"!  +!""#$%' +%$#"!!!"# +""#%& '&%$$$%%&&'&&%$$###"! !#%&&'&$"  !"#$$%%&%%%&(%!!#% %%$#"!!""!"#$%&'('%$#"!  "$&'('''(()('&%%$###"!!!"#$$%&'&%$#"!"##$%&&&'&&%%$%%%&*%$#"!!""#$%''&%%%$"! !#$$$###%%%#""#$%%$$%1$""!!""$&&%%$""##$%&((&$###$##$$%%$#"#%$##$'%""#%'*(&$""#%&&&%$%%&&%$"!!!"$&)'&&&'''&&''%$#$&(,+)(&%%&'('&%##%'*-.-+(%$ #$&()**+,-. %##$)(''()**)(()  # !!"#$$%$#""!!!"""#$$#""!"#$#$%%$$#)$$$#"!  !!   113!#$%&&&%%&&''()))(('&$#"!!  !#$%&&'''(#))**)(())*)(&#! "##"! "$&()2(&"!"#%&(('%#""#"""##""     "&(       !!" +!!  !""! !"!!!###$&(*+,,,-./02221/...//01234567887520/./1479;=?ACEGGGEB?>?A"""! >== !"##"!! 1.,+*+*)'%#! "%),,+*(('%$#$&)*-. !"##$%&'''((())**)('m())*))(&%JIHHIJLM'''NMLKKJJIHGDA>;854310.,+))('&%$#"! !"""!""##"""! !#$&'(('%$$#"! "##"#$&'&&$#! !"$%%&%%&'%$$ &*+)('))(&$"%).00/023320.,-..-,**+--+)()+,+)'&())**++*)*"+-035531.,,,---,+*('&'(+-//./02320.///.-,*)('&''()(('(*+,---,+***+*(&%#"! 558=!#%&())'%#$%'(('&'(''&')+-..,*)))(&$$%')**('&1'())*++**))()+,+*(%#DDDEEEDB@>===?BG&(('&%%$$%&&&%$#V$%'),/01110/-+)('&$C@B#'))'E;3,)),0246:?BA=8410137;! 9643222443358=ACB@<97789;=>@CEGHFB=95320//024798765443110/z.,*))*+++,.1343/*'(-6?DEA<61-*('(,16861,))*-16:;<;;<<:745:@DFEDDB>952123456654221/-+**,/5;>>;6212357:>@?;60,**,./-*()*,.//.',)%!!#(.24431/,*)+.013567643210//0132/-,++,-./.-+)'&%$##"! 97657  "&)**) ((''')//0001121122232110/.../06/.../0123457:=@ABBBA@><:98876543455420/...//.-,+++,-./0135754333210/...//010/.--,--./0',,+,,100/.-,,+++,---,+*+,---,,,-.///.-,-. +---,,,-.//.//00/0偃䀆ဇ́逅ǀ C ҆f:lZՅhƄĄpۀdt@Ū퉫󃆇ɽπĿû_fƺĹkׄՀ퀉݀% iijjjiiijlmnmEllkjihgffedca`^^]\[YXVUUUVVWXZ\_bddca`__`acdeefeede222123456665554333455567776654gfddcccdcba_][YWVUTRQ RTVWXXXYZ\^_` +aaab112211210_0135788764210` ___`a``___^]^]\]]^]^^]]^_^]\\]]^^_^^^__```_^][YWVUTRPMKKLNPSVYZZYXXY[\[ZXWUSRSTVVUTSRQP%NMMMNPQSUVY]_ceggfc^[XWVUTRQQRSUUVWXYZYXWVUTSRQRSTUUVVXZ[\\[YWUUUVVWWVVU TSSRRQPPPRTVWYZZ[[ZYYXXWWVUTSRSTUVUUVWYZZYWUTSSRQPOPQQPOOPPQQQPPPQRRSTTTUUVWY[]]\ZYXWWXXYZ\]^_`a`^]]]^_abdeedba`_#^]\[YWVUUTTUWXZ[ZZYXXXYZ[\\]^__`__^] \ZYYXXXYYYXXXY ZZYWTRQQQPOONMLKJIIHHHGEDDEEEFGGHIJIIHHHIJ +KLMNPPQPPONMMMNOPPQQPPQRSTVXYXWUUTRQOMKJIGECCDDEEFGIKNQTVWXYXVSPMMMNORVY.010.,*UTSQPPQRTUUUTSQONOQSUUTRQPPQQRTUXZYVRMJGEDDEGIKLMMMNQTXZ[..//.ZWVUTTSTSSTU+-./0/ 012210/..--YXWWVVVUTSRRSSSRQQQSTSRQPOOOPRTW[..[YWSMHDCCDEGHKNQRSUVY./10-PGA?BHQY0110//001110/.-XVROLLNRUUTRRRTUWWXWWY[[YVRPMKJJKNRUYYXURRSVXYWTQNMNOPO NMMMNNOOONMLLK +JJJIHHHJKMNMLLLMNOPQ0PONNNMLKKKLLKJJJKLMMMLLLMNOQRSTVWXXXWWUSQPQRQONNO:PPRTVWWTQNNPRTTTUV+,,,-,WUTSRRRSTUUVXZ//.-XVTSRSUW,-./01234P568:=>=;840-+SNLKJIJMRV,---./01110/.-WTRSW.02220[VSPNMMMNPRUXYYVSQPRSSSRRRTWZ\^010/\[\.//0a.ZYWVRNKLNRTVXYZYVTQNLJJKNSX[]^_^][YWUSSUY\`c23345787641.VSSV-/1232211100/.XTRSVZ..\ZYXWVX\134322321124567 89:7698"764469;===>>?@AAA@??>?@@?><<=?@BCCDCA@@@ACDCB?=;::<>AEGHHGFEDCBBAABCDEEGHIJJKKJJIIHIIJKL]MMLJIHIJLNOOONLKJJIIIHFDB?>>@CGKMMLKIGECBAAACDFGHGFDBAABBA@><<=>?@AAABCDDEFFGHHGEB?<96ikp<@BDEFHJKLMMNNOPQRRSSRPNLLKKJIHGFDB?<99:<>??@@???@@BCEHJLMNNOPRTVVUSQOOPSUSPKHHJMPQQOLHEDEGIIJLMOQRTTRNHA:4.SLM+4>EHGFEDDDFILOQTVWXXVKUTSSQOLHECA@@@ABBBCBA>:779<>@@@><841/.../025789:::;<>BEGIIIHD?;99::;;<==;853k4432/-+V,/25787641.]048;<;:75323455422356655566654344566776532100.WMC8.&BC(7HW01100//000124577643210/.../11210//13553432210/\[[\\[YVTRSTSQMHEDCEHLPRSRQPONNOPQQRSUVVURNJFFIKMOQSVX[^beghiiheb_][[[]_acdefgilnomjgc_]]_cfiigdbacfimsy}@@@?|xtqprtvxwv:wz@DGHIHFDB>:63110^ZXXZ]^`bcb_[UPQV^ej779:<;<;;<=>>?@ABCEFGFEDDDEEDCBCEFFEzuqprv{}zvqmifca_^\ZZZ[\[ZWUTSTTSQNMNPQOKHGGFEEGKNPSUUTTWZ\]ZTMIIKNPQQRTUVXZ]`cd1^[XXZ]`bba_\ZXWXXXWVVY[]^/00/.-.29CNUVTRSVY[YTKEGQ]ddbacefd_ZUTTSPLJIJLLIECDHMPPNKJJLNOPQQRTUWZ\]]\ZYWTRONLLLOTZ^aa`]YURPNMLLKKJIIIKMPRTTUVVWWVVWWXWWVVUSPNLKJIHHJMNNMMORUXZ["ZXVUUVWYZYWURPMKJHGFECBBCDEFEDCDGJL/MNOPPPOPPOMLKJJIJKMPRRQNKIGECBBEILLKHEEGHIJJKMMNMLKJGECCDEEEyutv{EIKKJHFGGHIIIHFFFGHJKLLMNOPQRTSOKG}{}~ysnkheaZUWcuFFDA}xuuvwvvxyxtlf]Z^dornh`ZWWZ_cfilnnnmmmoty|ysmhgikljheb`_^_`aa`^[[\_bdcl`\YWXYZZYXWX[^`^ZXY[_``\VMC>AM^nx{ulb[YY[[YTNIFFIOW_dea\YXZ]_bhov{|zvoiecbabdeffgjmoonlkkkjifc`^^___^]]]^^__^\ZXVUVVUSRSTUVWYZ[ZYXWUSPOOPPOONOPQQQRSSRPORX^bb^[XWWWX[^`a`][WRNJJLPTUSRQQQPNKGDDGMQQJ?l`^d6:=?@AA>;9889:;<>BFLQUXYZ[\]_a23443ca_`abdefg444ihgfeifgiijihggfeca``abdefghiiihfdb`_]\[ZZ[]_chmsx|}}{yvuttrokgca_^\[Z[\]_`a`_^^]\[[\]^`acgk8:<==>>=<:87ljhgedcbccdeeghj68:;<;:86igeccbbc baac233445567788753b_^_acef4-3fdccdeffda_^]]]\\[[ZZ[\^_^^\[ZYZ[\_bdffeca``a``abdeffgh556655hi>111223345678889998653211100/..---,+*)('&''((()*+-...,+**+,,--.-./...///00/.-,+*))('&% &'''&&'(())**+))*)))***))**)))())((()((()*)*))**+,--...--.-!,+*)('&$"! !"#%&'(''&&'()***++,,,+*)'''('&%$#""##%&')*,/13455530.+*))(&'()()()((''&&&')**++,-///-+*) +(((''&&%%%$ %&')***)))(()**+++***) ((''&&'''(((' &&&''()**))'&%$%&%$$$%&&' +(()*+++*))())*+ ,,--,+++,-./.--, ++**)))((())*+, +++**++*))((()**++*)('&&%$$##"!!! !"!!""#$%%& %%$$###""##$%$%%&''&&%%%$#"!  + !"$%&'@%#!  !"$&$#"! !"##$$$#"!!"#$$$#""!!!""#$%&&$#! ! "$&'((&% $$%%%$$$% +&%%%$$$###$$$###$%2$#"""#$%&()('$! !"##$%'# $(B&%#!!#%%$##$%&&''&&'))(&$#"! !"$')*)'%&'()***)(&$#""##$$#"#"!"!  !"##$###$$%&%$##""!! !!"""!!!"#""!!"#$$$%%&&&'&&%$%$#""##$&'''%$""$%&''&%%$$$%'&%$###$% ! "$$"!"$(&$" #$%'())(&%%&%%%&()*+(''0'&&&$! #%&'(())('%#" !#&*,---,+*)('&&')+-/$""$&$"#%'('& ')  !!  !#$$$%$$##"""##$(###"!!!"#%%&&%$$###"""!  026 "#$%&'(()))('&%$$###""!  !#$%'(W)+++*('%%&()(%" "$%&&$" !"##$%%&&$! "#%'(***)(''&%# : !! %#!" @"!!!"!   ""!!  !"#$#" !#$&'()+-/01t/-,+++,-/01234568:;:8631/01368997434568;>AC!"!!@=;999;=>=<;< "#$$#" &$##$&()***(&$!"$)-0 !"##$#~$##! @@AD#%&&%HEA><<>AEHLOPPNMKIGFDCB?=:75310.,+*)))(&$#""##"! !  #%$#$%()(&# !!"##$$%&((&$""#$%&&%$#""!!"!("###%+-+)()+-,)%!!(0553224431.,+)'&'()(%##&*,,*'%%&'(())**+-.0/.-+*)('&&(+.0220/,*('&%%&()+,-,-,*(&&%$$##%&''&&')+-/00/.-,,,-..-,+)'%##"!!!"#$$#"""$&''& '()()))('&&%&')+++)(&%#"!"$'))'%##$%%&&&'()('&$###$$$HHGD@==>@CE$&(('&%!$%%&&&%$##$%'(()**++,.//-*'HD@?ACDEEDB>;9763/*&(/:D%%#!>:8.:<<940+*-17974/+*+/379;<==<:99:=ACA=966789864312332000245530-,-...-,,-/120.,-03442.(!!)4?EFA:40./132/+'%%'+16::830//01137<@A@>;853222334456788755566531///0223334443334331/-,, -.-,++,,,-../.,+))*+-.//.@-,+,/24420..--./012210.,)'')+--,+**+*)'%$$'*-,' 5--1 """!/ "$%%&&&'()+**)***+,-.//011100011234565543210//0112234322100/'01358;?BDEECA?===<;85210/..-./01222110/.///024 444321101/.--,,-../..--. +***+,./ .---/010/-,+ **))**+,---,+*+-.//.-,+++,---..//001ÀЀ⁃ꀄހ V7H 1ڄЅ ՅυЄԆӅҀ2 ÅLτ!^2ڄ Ӆ2Qq¿^=w󃍗CD¼16Eǽ¿ĿǿµźH'J),hhfddefhjkl6788876kihggfedcbbaaabceedb_]ZYXWV WYZZZYYY[^`bcdcbaabdg456676655545432deeefgijjigeca_]\[Z7YXWVVUTSSSTUUVVVWWXYZZ[[[\\\]^__```a111`^]\\]^_123444321cba`_^]\[[ZZ[[[\]]^`abbaaa``_ ``__^^^][Z[\,[ZYXWVUTSQQPOMKJJKLNPRSTUWXYYXVTRQONOPQSTUUTSTUWWVUTTUVWXYYZ.[^_``a`abbcccba```_^\ZZZ[]_`aaa_^[YWUTSTVXZ[[ZYXWVXZ[\]]^`aa`^\[Z[ZYXURPNLLMOQSUVVUUUVVVUTSTUUVVWXWXYYYWVUTS +RRSTTTSRRPOPPQRSTUUTTSRRQQPPQQRRRSSSRSSTTS +TTTUUVWWXXYZY +ZZ[[[\\\]]^ ]]]^^___^]\[Z YYYXXWXXXYYZ[\^_a`___^^]\[ZZYYXWVVVUUVVWXYXWVUTSSSTSSRQPONNMLK JJJKLMMNNMLLKJIJKJIH +IKMOQRRQPONEOQRRSRRRQPNMMOSVYYVSQPPONMKJIGECBBCCDDEGILORUVWXYZYUPMKLNRWZ/0110.-,,+,WUTRQR.QMFA=@IU//[TLC@ADFHIJJJIHIKOU[_001221/XRNMMNPQRSV,-./0010/.,WVVX--YWTRQPO>NNMNPRTTSRPNNMNNOQSTUUUSPMJIGGFFFHMU[//[WUUV+WUQLKMU.120-VSSV,- YWTQONNOPQQQP3RTWYZZYXXXYXWVTRQRSTTSRPNKJIJLMOQSVXXWUSRQQQPONNNMMLMMNNMNMLJIHGHIKLMMMLMNPQRDQPOMMLLKKJIIHHGFFGIKMMLKJLNOPQQRSUXZ[ZXUSRRSTUURPNMMNOQSVY./\YTONPTX,-..--XVTRQQRSUVWWXXZ[.//-WUV-./0001234579;<<96420.UNGBBGNT,---../012210.-+UUVWY-./.ZXUTSSSTTTUWXXXVTQPPQSTVVWXXYXXX[_1332_\ZYXWWZ/12332100//.ZWTQMIFHLRUVVUUTSQNKIJLPTX[]]][XURQRTWZ\]2^0123443210/01234579::9741-+TV-/0//.-WSPNOSUXZ\//012223346788876678:87669:878899:;= +>?ABCCCA?=<=">??@ABEGIIGC@>===>@BDEEFFFEDCCCDDDEFGHIKLLKJIIHIJKM8LLMNOPPOONMMLKJHFC@;730-,/4;BFIJJIGECBAACEHJJIHHIIJJHFDCBCDDEFHJLMNOONLIB9_TRXbkt<==>@BCEFGGGHIKNOOOPPQQQPOMLKJIIGFDCCBAA@?><;;<<==>?ABCCDDFHJMOQSUUTRPNMLNOPPOMMMOQSTSPMKIGFEEFIKNPPNKFC@?>=<:99;=ADGJMORSRQOMLLNPQQQPNKHDB@@?>>===>?>>??@@??=:877789:;<=!<<=>@BCDDB?;87789:;<>@BBA?<8643221c00/.-WQLIJNW06;>?><9656777678862/./23467998520./0210.../00.-WUTSRRRSTWYZZYWUSSSQMIECEIOUZ./134543210 .WPHA>?DJOQS TVWXXYZZXUPLJHGEEECCCDFHIJIJLOSVXYZZY:[]^][XVTSSTWZ^adgjlmljhgedbbaabcdeghihgedca_\ZYYYZ[\^`cgjklkklkkklmptwyz===>?@AB.AA@@@??>=<;:865jk6776545689:;<==>=>>>??@ACDFFGHGFEDCA?>zzz{>>??@@AB2~|zyz~EGHG~{xurokfcbbcca^[ZZ[[[ZXVTTTUUTRPNML$KJHFC>:89>GQX[VPLLMMJFBAADINQTUUVVWWX WVUVXZ^123321234556678876543358?HQVVVX[_`_[WWZaffdbacffd_YUSQNLHFDEGFEBBEIMOOOMKLPRTTUVWY[\]]\ZXWUTRQOLJJMRWYYZ\]][XUSQOMKIGFEFHJKMORTUTSQPNMLM/NNNOPRSRPLIGGHJMOQRSTUWY\]^^]ZWUTVXZZYYZ[[ZWSNKJ!IHGGIJJHDA@AEJORTTTSTUUUSQOLJIIJKLKIGFFEEFILPPNJGFFFGGGHJLMNMLKLKJJIHG~}|{}FGHHHIHGFFGGHHIJJJKKMNONMKHED~|zxvronqx~ysqrtrollnt{@|wsqrw}zpe_aejoojd]XSNMNTZbkv{tngb`adhhgdb`__`aba``aa``aybcddca^\Z[\\^_bfilljd_\\[ZZ_ivypf\TNKLMORUXZZZYXVSPPPSZdowyvpi`YUUWZ]__^\\^__`bfjotuupjea___``aa`_^_``_\XVW[aimmkhfedb`z_\YWUTSUX\^]ZVRNKHGIMRTUUX^gnrojd]WQNMNPQOMLLMNMMOTZ_db\SJC?=<<>DJNNH@;:=@BB@>@DGHHFEDCCBBEHMQTVWVUUUVWXZ[\\[[[\]^`abcde345oihggghhiijiihhgfeca_^^_`bcdefgfedba`_^]\\[[[\\]^aflrvwwusrqpnkhda^\ZYZ[^adfhhhgfc`][[\]^`bg7:=>?>>==<<;:987khedbcdeedbaacfk79::99876jheca``abbabcddeee3567876543ede1degiihecabccba_]\[[[\\]^]]\[[ZYYYZ\]^^_^^^_`bccbbabcdefhij5kjjhgfgh 110/.0245560531000/.-,,,--./000/.,+*)(''&'()*))('()*+,---,,-,,,-.-./01210/.-,,+**)('&'()*++++*))()))++**)))**+++*))()*+*))**+,+++*)?(''&%%$#"! !!"#$%%%&''('&&%%$$$%&'())(('''(())(('''()**+++*++,-./0//.-+*)))*+,---,+*)'%$$%'(*++*+*+,-. ///.-,+++, +)(&$#""#%&(' +&&%&&'(()*+,,,++*)((('&'&&%%$ %&''(''&&%&''(('&'('(()))**+*)*+,-,+**)*)**++,,++***+,-...-,++**)('&&''()))((''&&'&%%$$###"#$##""! ""##$$##"!#$%'''&%$###"##$% $$#""#$&''%$"!!  "$%&'''()'%"  !$&'%$##""###"$&#  #'+-&#!!""##$$$#$$&%%%&&%$##""!"!:"$%%%$#""!""#$$%&&%$#! "%)(%$$%&$! %$""$ &%$#"!""#$$$#%&()))((()))(&%%$$%&$"  !"#$&()))('&&&%%$###"#"##"! !"#$$%&%$""!  "!!!"#$$$#$%&'''&%$%%%#"!"#$&(*(%"#$')'&%$%%&&%& '()%$$# $=$$$%&'&%$###$%%&'((('&%$$%&'())***)(()++*)(&&%&*(&%#! $''((''&$" !$')+,,+*(&%$$&')*+5!"" "$&'(   !!""##$$#"""!""##$#$#$""   !  + !"#$%& %$ ,''+06< !"#$%&'(()(('&%$$#"!! f !!!"$%'(()**)(&%$$%%&%$$##%&''&%#"!  !"###"  "$%'(('%$$$%&''&&%%%#!3!  ""!  ! !#  !" !!#$%9&())('&%%%&(*,./13555432110001233456676654210/.//01122357876 +8:<=> !  ./  !"#$# +"!! @@@A!!"#FFFEDCDGK'(('KHFDBA?=:7420.+('&%$#!!!"#""! $)*'#   "##""# "! !"#%=!',,,+,...,**-14543356752.,***)'%$$%%%$$%(+,+*(&'*+,,,--./0..-,++**)'&&(+...-.//-,*))(&%$##"#$&'()+,--+*)('$('')+,+)&$###%'()*++,-/123331/--.0110-/,)&#"##$$$#$&''&$"!!#&),--,++,--,*)'&%%&'(''&'&&%%$$#$%'))'%#$&())('&'&&%IHG FECCCDFI%&%$$%m&&&''()***)'&%KKJHECBBBCEFFEEDCBA?=;989=@A>;;=?><867:>@ >;978:=;50-.159962/,*('),05:@EJNONLIFB>:74336898743234n323334443233455420../012347:<=;8420/..07?EHEA<61-*)))*,-//0//.,*'&')-4;@B?<72.++-/1232112323358:=>>;8421112233455420//048::8643210.--,+++.1320-+(&$#%(+-b16;><950-*''()**)))***)*-15762,'#  $)+*& !"!  #%&%$"!  "#$%$$###$$%'(())((()*++,--.322233445 443210///01234332105111247:>ABA@>=<;:8631/.--./13567766431/.---./0343210 12321/../030.-,+++,,---.- +- ...---../111/. --,++**++, +++***++,,,-...---,-../0111100011ɀ݁䁇؀ۀˀ " ׅBIυ΅҄*̄̅ ˄ń2S1܄}¼+Pp +gֽS̿ľ*ѸX,ȿμ¼Ǻûþ¿;w . /55iea_^_adfgghh4455444554hgfffdcccefggecba`^\ZXW +XXXWWWY[]`a bccddcbbbcef3434343433edcbbbcccb`^\ZXWVUTSSRSSTU1VVXZ[\]\\[\]__`aaa`__^\\[\^b357763b^\\\^_`bbbaa``_^]\ ]^^^]]_`abFa``_^^^___^]]\[ZZ[[[ZZYWVVUVVXYZZZXWVVVUUTSRRQPONMLLLNQTUUUTTSSRQQPQQQRSTTSRPOOOPQRSUWZ]_ ^\YXYZ``212ba`_^]\\\]^__^^]]]\[ZXVUUUWZ]adfgfeca``a)``__^]\\]_bccba`_]\[[[ZXVTSRSUWXYYYXVTTSSR SSTUUVWXXXWWV UVXZ[]]\[ZYXYXWVSRPONMMNOPPPOPPQQQP QQRRQQQPOONM NNOPPQRTUXZ[\ ]^_`abbba``_^]]\\\]]^]]\\]]^]]\\[[Z%YXXXY[\^_``abcefgggfdb`^]]\\\[ZYXWWWXYXWVUUTUUV UTSRQQRRRQPNMNMMNOOONNMLLKJJIHIHIIJLMOPQQPONOOPQQQRSTUTTSTTSQONOQTVVUSQPONNOOPOLHECBBBCDFHJKNOQRSTVWURNLMPTX.024421/-,+TUU+,,,WUTRQQRSSRQPPQRTUVUSRRU-/0/YUPLIFE,EGHHGFFGJOU[//../1331.TNLMOPPQRSTTUVWX,-./001000///.-,WVVVWXWUSRQPPPQQQPOONOOPQQQRSSSRRQRQPPOPQRRPNLKJJJIGFHLSXZ[ZXVVX-.-VU,/2442.UOLLNPQPOONOPRSTTSRQQQRRQQPQRTVWVUTTUVXYYYZ [[ZYWVTQNKKKLMNPTWXXWWWVUSQNKKKMOQQPO:PQQONMMNOOONMLLLMNNMLLLMNOPQSTUVUUTRRQPOMKIFCA?==?CGLPSTSQOPQ%SVWWTPMOT-00.WQKGEHMSWYYYXWWVVX-/12221"/WQNMOQRSTUWY[]]]\[Z[\.//..--./000/.../0112346652.,*TTU+, -.--,X,-.//./00110/[XVWXZ[YXWVUTRPOOQSTTUUWXYZ[\]_12320/.ZXWWZ/1110/.--YZZ[\\\ZWUUXZ[WROOOPQ RSUWXXWVVXZZYZ\/12221234445568<>><96320/..-g../00/,SOPTY]/00012233443211258:;;;:8764457:<==;97545578:;<<===>>?@ACDEDCA@@@??>>>??>===>@ABDGIIHFDBA@>= >>==>>@ABCDEFHIKLKJIGFEEFE FHIJJJKKLMMNlMMLLKJHGFDBA@@@A@><;@BBBA@ABDEGHIJKLMMN MMLKIHHFECBA@?>??@AABA?><;;==>?@ABDFIJKIGEDCB@><:999:4=>@CFIIFA<85579<==<<@FKPSTTQMJHHIIHFEFHII FB?AEHJMPSUUT#UWXZ\]\ZXXYZ[\\]^_```aabdgiklkhc`^^_``abdeeeca_]ZVRMJIJKNRUWWXYZ\\] \[ZZ\_behlprt$vxyzzz=>?@ABCBBAABCCDDCB@>;98o89;=>?ABCDFGGGHHIJJIHGEDEEEDDCh~{xvtuw{~}zwwwvurnkhfefhiie`[XXYYXWVWY[]]\[YYZZYZ\_dhlmjc\YZ^ce`TG>:@BCEGHI+JKJGFGILORUY]aceeedcbba`^]\[ZYZ\^abcccdde334ihggfdb`^\\\]^_acdcb`_]\[ZZYZ[^aeilopqqpnjgc`^]]]^_`aabbbceeeca_]]^aej7:<>>>=<;:9877665igfdcbaaabcccbaabdfik789:99765gecbbcbbbaaa`___`aa`_`bd34455566654fdbabde345666jgc`^]]]^__^^^_^]\ [[YYYZ]`cefeedefh5566kjjihhh5 420.../0010/.---./010//.-,*)'( )*+,,,++,--.-.../.- .-,*)('''&&%&''(((''()**++*)*++,++*)++('''()*++,+*) +**++*))**+,--,,+++*)))**+,,,+*))()*+*))(' &&%$##""#$%&&%&' +())('&%%%&'(*,,-,*)(((*+++,,,--,,+,++**)))(('&&%%'(+-010110///0100//.-,*)*+-.00/.-,+")(''&'')**++*('&%%%$%%&'()*+,,---,+ ,,-.//0/.-,++* ))('&%$$###$%$#$$%%%&''&&&%%$%%%&&'()++,++**++,-..//.-,-,-,,--.--,,+*+*+,--./0/.-,++*+**)( ))**)(('''(()('&%%$$$%$%$##"!!!"!""##$%&'&&%%$$%&% $#!!"$%&&$#"!""#"!) !"##$%&''&$! !#%'""#$##"4#""!!"#$%%$"! "&$!!#(,%"!"# $$$%%%&&&%$#""# +""!!""###$%$#$#"! *!%'(('%$%&###  !"#""!!!"$$%%$#$$&''&%$$%&'()('&$#!!"$&() ('%$"""$%&&%$%%$# $$##""!"##$$#B$$%&&'''&%$###$#"! !#%&&%$#$$%%%$#$%&'&$! ##!!$'()$(''('#!!#$%%%&'(*+,+*)((("#$%('&&''(''&&'&%$##%&'()*+ '&%%&())**)))***('%&')*'$###$% +&'(('&%%&'())   #'*   !!"!  !!"#."!  !"##"! -!!!"##$%%$!.#"*0479; !!! !!""##$%&&''&%$$#""!  !#%'()('&$#! "%&''&$#"!G""" !#%'(('$"!!"$%&&&%%$#! !#$#" 1 !!  !!"#$$$%$#"   /!"#" !""  !#$#E$$%%&''&%%&'(()*+,-..///02355430.--..///001233221/.-+)'%$$%')+,--..//. -,+,,./258;=>%?@A@? !"""!!""###"! 3 !"#$%&'''&%$%$7#FCB@>=;:;=@BEGHIIJJIGEBA@@?><:85321110.*'%%%$$#"""#$%$#$&),010+'%%'**'! !#$%&%&&&%%&&- #')+-.//.-.0234579:962-(%$&((&$"$&(('%$$%$R##%&'''()))((*,..-+)'''()*+,--,,+++***)('%$#"#$%%$##$'+./.+)&#!  !$(-120+&#"#$&()* +,-./.,*)*,.0110.+('&&''((() (&$#E#%(,010.-+(%#"#$&((('&'((()(('%#""#$%&&&$" "%(**)('''&:''((())(&%IHIKKJIHFDCCBBCDF#$&'''&%$#""$&'('%$$$GFDCCDEFGGHGFECBBBCCCDCB@>>@BCA>951--.259=@B@;635:=>;730/047873/+(&&)/5:<>ADILLJGFGIGA:65678775431000135653100124568=CFD=71.--/146775334652d//4;BED@92,))*+,.157631/03551+&#$)/5:;94/,,/24420.-,*)*-14689875322247;==:630-*'&'*/4:?BBABCCB?;7410/;...01356898741.,+**,.1468:972.,*++,)$!!%(*,-./121.*%" !!"#$%%$%$"!!"#$%&(*,---,++* +))((''(*+,- .4343321/..---./12334332210///0/0257:<=>>?><:74200/0011212221/.---.022221101110/.../023/-,,---,,--.--,,,-..,*+,-42/-,++,---,,,---,+*++**+**+,--.//0212܁΁ʁ쀇ڀ L=ц/ 'ׅ͆<Ɔ yЄ3CօԀۄs21Uμ¿ـUŭŶŻÿǀȿľľaý Sۄ7((i5kjigda_^][ZZ[^acegg455667775hfddeeedcba?_]\[ZZZYYXXYZ[]^__][XWWX[^aceeedca`__^^__```___``ab1245543211223433ed22345554eb_^\ZYWVUUUTTUVVXYYZYZZ[[[ZZ[[\\[[[\]_`ce33eb_\[[\]^^_`_^]]]^__``aab +cccb`^[ZYXWVUTSTSRQQQRSTUTSRQQRSRQPONOOONNMNNPRTVY\]\[[\\]]_aa235676I5432dca_]\[[\]^^^]\[ZYYYZZYXVUTSSTVXZ\]]^`bcddca_][ZXWUSRSUWXZ\^`aa_]ZYXYZ#YZ[[ZYWVTSQQQRSSRPOOQUXZ[[\]^_``_^]\[ZZYYXWVTRQQRTVXWWVUTSQONMLLLMMNONMMLMMNNOOPQQQRSTUVWWXXY XXYYZ[\^`a`__^]\Z[\\\]]\\[#\\]]^_abdeedcbbba`^\[ZZZ[\]^__^\ZYYXWWXYYYXWVVUUTTTSSRQQPQQRQRSSSTUUUTSSRRQQPPOOONNMMLKKKLMNNOUPQRSSTTUUTSQOOOPQQPNLKKNRVY[\[YWTRPNKHFEDDCCBBCDFHIJLMPSWYYVSQQRTWZ/1331.,TPNLLNQTUUTRSQOMMNQSTVWYZ[ZXVSPMLJIGFEEF"GHJNTY\].02442.SKFHLQUWWVUUTSTUW-./0H/..-XVUTTTUWXZZYWUSQQRRRQPONNNOOPPPQSUWXXVTRQQQPONMKKJJKLLLMMPSWZ[[ZYXY[.01220.XURQPNMLKLMOQSTUVWUSRRTUVAA>:74210/012210//..-./0233323'2211247:=><:6432249=@BA?<9876544457:=?ABCCCDEFFEDCA@??@ABBCDFGGFFFGGGFECA@? @ABBCCCDEFGGHI8HHIJKKKJJIIHHHIJLMMLKJJJKLMNNMKIHFDBA@@?>=<:9753458;?ACCDEEEFFFEDCA@@ABCDDCCCBCDEEEDBA@?>9=:73/XNE?BN]ipt<>@ABA@@AABCDEFGIJLMMNNOPOMKGDCBCDEFGGFEDBAB$CDDCA><:::<>ADGJMOOMKJJKMONLIHHJMPSUVWWWVUTTUVTQMJGFFGHIJKLNONMLKKKL KHC=98;?BDEEFGHIJKLMMLKJJIIHGFEDC8DDEFGGHHGECBCEHHE>61002467899::;<>ACC@;7420.WV,/146777543[45554322110../12221100/.-YVTSRRQOMKLPUY.--YWVSOKHIMQTTQLHDCFKORSQOMKKLKKJKMPSTTRPPRUX]_0/[XVWVTQONMJHFFGHIIIJKLMMMNRVYYWUROMORVYZ\^_`_`acdddeef$ghikmonmkigghjlmljiiihfc`\XUSQONNOPQR7QPOOPQRSTVXYZ[]_bddca^]\\^`djnrttuuwyzzz=>?@ABDDEEFFGGGF HHIJIJJKKLMMLKJHFEEFGHGGGFEDB|{zywutrqponmnoonmkheb``abddb`^^___^^]&^^__^][Z[\^acc_UG9e6@HLKHGHKOSVXZ[\]]^_^__^][[\_bdeda^\]_135\67899755679:;<;;::99889::;=BJQW[^_^][[]`cdfghfc\UOLLORRNHDCFHIGEDEFGHHFDB@?@ABCBAADKMLMPPOLJIpJLPTVVTPNNOPQQQOMJHGHJKIFDCFKQUWVSNIDA?>@BHOW\^[VQMKKLMNONMKIHIKMNOOMLLMPTXZYWUTTSQPOQSTSQOMLLMMLJJIHGEDDFLRWXVTSQOMLKL$MMOPQRRRPMIFB@@BFJNQTWWUQKFDDFHIIIJKL#MMMNNNMLKHFD}yvtrtw}ADEEEFHIJKJKMNNLIFD~|zxxy|~~|ywwx{BCB{urpomlkkjihgghijifdcceipplihjpwteXQNNPU^jyvkdbcglpt{JIwtttqmfa][ZZ[]afijhebcfjlklr|FEtia]\\\]^_^_adilnmlklmmljhghkpvzxqhb`ab`[VVY\\XSPQTZ_ceeeddccbbccb`]ZVSQRSUTQMKNV`iljgggihfc_\YVUW\cilkhecceiotxzwtqprsspj`d_ZWTSSUY`hpsqle_\YWVVX\`dfd`ZWUTUVWWVUSSTUUTRPOONMJHFDB@=9jden??? !"##$%$###$$%&'( )))(('&&%&&''&%$#"DBA@??><;::9988988778876420.,+*('('&'8&%$%%&')**'!+!"###""#$%&&%%&&&%$#$%&((('%$$%J!',/1221002467788751-)''*,,*&#"#%&&%$$%&&&$"  !"""!#'((*,-+('&['),..,)'&'()))(&%$$%''&$#"$'+-.-+($" !$(-12/,(&%%&''(('&%$%&()*)(''(*,/00.-,,+*))+-.-+)(' &%%$$%(,00.,+,*)('''(('(()***+**(&#! "%(+-..,)&#""#$%%%&'()('&%%JKKJIGECA?>?BF$%%$$%&' &%&'((&$#"CBA@???@ACDDC@?>>@BD###C?<:9:::;;::9888999765557::8657;?CFD?7/+))*-29BIMJC;5347:;>CJR+)LE?=<<;85321112369<<:86578876:BK('G>50-,-./10100136887545687654358:511222/,,.01/*(')-14544344320.-,,./.,)&',39;97678886431/-.048::864457;?CDB?=<<=<:852/-,+,-038=?>:51.,+++,.146630.,,-.//.-,+,,-,+*)))('&$#"!5128"$%%%$#$%%$$%&&&%%&&&''())***)*3232110/.B/01233210/...//..--,--.01223334567776556789:9864211122322100112 65420.-, -./01112/...--,-.,+*)**,0.-,,+*)))*+,,++*)***+,-./.../22Ā؁€ـ H߄""Մ +N̄˄ ۄY Є¿=ބ +ƅ"΄ʄʄ*Є˄х 8G = +?@*¹¿ ۼǭ㈥j»HӽHcN''҄eǾѸþ¾ބ݀¿ľĹº¼W0DŽ3A& +hgfedb`][YXXXY[^acfhh4Ogfeefghiihgeca_\ZYYZ[\\\[[\]^`acca^ZWVVWXYZZ[[[\\^`bcdefggecba`___`ac2332221223454 34443db`_^ ]]\[ZYYXXWVUVVVUUVVVWXYYZ[\]_`a`_`_^]]]^]]\\]]]^]^_```a `aabcbba`^]\[ZYWVWWVUVVVWXXXVSPNMNPRSTTSTSRRQQPO PQRSTUVWWWVUUSTTTSTTVY]]bb346665hecaabceeda_^] \[ZYWVVWXYXWUTSRRTWZ\_`aa`_^[XVUTTUX[]\\[[[ZZYXWWVVUUVVVW%VTRQONNOQTVUSRSW\`ceeedca^[XVTSSSRQQRS UVWXYYYXWVTQOMKJJIHHGHHIJKLLMMLLK!LLMMNOOPQQRRSSSRRQQRSTUVVWXYZ[\\\]^^]]\[ \\\[[[]]][XVUTSSSTUVVWXYYZYZ[]^_`abbcbb`^\[ZYZ\]^^]\ZYYXXWWVVVWXWXXWWVVUUSRQPOOOPQSTUVUUTUVWXY[\\[ZYXWVUTRQQPO PQRTTUUTTSRQFRRQPNMNORVYZ[ZXWVUTROMLJJJKKKJHGFFGGHJKMORRPNNNPRUWY[./00.-+TQOLKKMPSTSTTUUT?UUUSQONMLJGECBBCDEFGHJMQVZ.//00010.VMGEINTY]/.ZXUTU+-///.,Y,--./.---,,-..///\ZXWVUSRPMKJ"KLNPQRTUWXWVSRQQQPPNMLLMNOQRSSSUWYZ-..-,,,...-XVTS*QPNMMMOPRSTTUVX[]///\ZXVSQPPRSSTUUVVWY\/00/0\YVSQNLJIJMSY^_]YSOLKLMLIHHIKLMMMKIHGFFEEFGIKMPRTRPO2NMLKLMNOONMLLMMNOOONMLLNOQRQOLJIJLMNNMLLLMNNMMMNNONPQRTTUUUVUVY036642/-,WUVVUUTT+,.000//012210^]\[YVTR"SSSTVX[./..\\..[XVVX-...[YWVVW-.//. +[[[./0110/. -WSPORW-/0123B442/VPNPSVUSPOOPQSTUVWVUTSSTUWWWXZ_37::830./023443321/---.../0/][YX*Z\^_^\\\[YURPPQRSRQONORWZ\]__^]\]_000]\\/1246:?BA>:6556764100134556P76410012223345667778:;=>?@?><9646679;<<==<;:976558;?ACCCBBBCDEFFHJLMKE?:9:<>@ABDFEEEFGFEDCBABCEFFDCAAABCB CDFHJKLMNNMLKLLMNOOMLKL'JFB?<<<===>>=<9765579;=?ABBBCDEFGHHHGFED.EEFFGHIKLMMMJGC?<:999888765431ZL??HU`ir?@AA@?=<=>ADHKNOPPQPPONNOOPRTUTRPOQQNIC?>=;:97653/TMNW29?EJMNNMKHDA@ABDFGGFEB>:6322110124666420.---./001122210012220.XVTRQPPOLFBCHNSVXWSQONNMLMORUWVVUVVUQMyKLPVXWSMC6(=6?*7BHKLKJIJKMNOONOQTVXY[[[YWTRQPPPRSUWYZZYXXWUSSV[_11a_^]^_`abcegjnqrsromkjihhgghijjkklmoonlihghgfc`]\[YYXYYZGYXUQKGCCEJQW]_`_`chlopomlklmpsvwwurpnmmnnoruxz|}}|{{{}BCCDDEEEFGFFFGGHGGGFEFFGHGHIHH~~}|zwspo;mjfdcdefd`[VTUWY[\\\[[]_acfggeca`abcegfaTF?@GMSYah6779:;9742321aac2333222346789:<===>?>{|@FOSPPTZ]ZSLGEHMPRSSRQOMKJIHEBABFJMPQQOLIGGFFFHLPSRPNMLLJIIJMNLIGEFGKNQPOMMNPSUVUQNKJKLMORTUSPMKKLMEORTRPNKJJKNOOMKJIKMNPPPONNNOQSTUTROMKHFDCDGJOTWXVRPOPPNKIHGHJMOPOONOOPQPOMJHGFFFE|xwxz{~EGGECDEGIJLNOMLKKLLJHECCB~{yyz|~|z{EGHGFC{wtpmkihgggfedcfmvwrkgjhgb__dp~raXVVVX^gnqpmjgda___`j``clxKMIrd^`fjjfb_`ekptw{{upmqx|ywusqnmlklllkkllmlkighjnrutpjd`^^]\ZZZ[[\\\[XSOMNSX]`bbdddb`][cYWTQQRQNJGEEDGNXepwyvpjea]ZXX[ahnpkc[X[afhfbaadkuIqf_\YXWVW[ckqrnid_\Z[\]][YVSQONNMNQTX\^``_\YVT3QNIEDCDDA=:86568=<:9889:<>>=;98889:;=>@ABBCCBBBCDE##$$$%%&'('&'('&X%IGFEEDDCBBBA?<9655432/-+)))**'$  "$&''&%$$&')*+++*)((()*+,*% !$'*''(+('%*,*-.268976430-+**+-,+($! !""!A"&)+*'%###""!"3#$%%%$#!BC#%)++*-120+&"!#&)*+,,,*)('''%#""$&'())'%$#%(+,,*)(&%$##$%'&%#""$&)**()+---+('&'()*,--+)'&&'Q(*,,+*)('&')++*('''()***))())+,--,*)'&%$###%'*,--*(''))('%$$$&())((''(()**+*)('&&'CLIFB@@@AACF%%%$##$%&&'))(&%&''&$##""EDBA@??@ABCCA?@CF$%%%#"CA?=;:876`5469>?;7578740/18BOYYOA4-+**,29>@?<97543345545:AHJHFHL)+)I=5248;<;8779<>@BCEED@<98:?CDB><:98765456 543468:;9740/..//0j/-*'&')-023345542100110/-,,-,*'$"""%)06<@@?;86320//148<=;61/0479975559@IQ+PF<51/.-,,-/37<<:741/...///.-+*)( *,./12320.,+-*(%###$$" "#$%'))'#"%&&$#"##$$%%&'('( ))001122212221100/01223432100/.-,,++,,-,,+++***+,.023579;==<:87677876544432223456 +543210//../012100/..-,+,,--- +--,+***+,0/.,*(''())**++*) *+,-..--,,-./01ŀÀʁƀŀ퀏ۀ 'ԅd߅x7߅ބ!Ņͅ΂υ׆&ׄԇɆÄƄŀſn&րEc*½ռ􂇊 _<;ĺ7en´ÿm»!7#ghhhgfffggffedb`^\ZYYZ\_acdegggfdb`_`aa`__^_^__^^^]\ZYXWVVUTSTUWZ\^`aabcdde dcb```ad34556 55567888765443dccba``__^]\[YXWVUTTTUVVWXXZ[[\[\]^_`_^]\\[ZZYYXXXYZ[\]^^^_```__^^^]]\\]^_ ```a``_^]]]^_^\[YXWVUTSTTTUUVVVUUTS RQQRTVWXXWWVWXYYYXWVWXZYWUTSTUTVWYYZVUUVWXZ[[ZZY.XWUTTSTTVWXYZ[\\[ZYXWVWWXXYYZ]_aa`^\[ZZ[\]___^]\[ZXVUTSRQPONMOQTVX[]_abccba_]\\[[Z0YXXWWXYZ[\\[ZXVSPONNMMKJIIIJKLLLMMMNOOPQQQPPPQRRSTUUVXYZ[[\\]]\\[ZYXWVWWXXXYZZYYXWVVU TTTSSRQPQRST UWXYZ[\]]\[Z[\ ]\[ZXWWVVVUTU VVVWVVUTSSRRST SRQQPPQRRSTUUVVUTSQNLLLMNO PQRRSTUVWWVTS;TSRQPONOPQRTUUVWWXYZ[.//.YVSQPOPPQQPMJHFCA>;:;>BGMQUXZ[[./0210/-+TSRSTVWVTSSTUVUVVUUTSQOMLLKKJnKMPRTUVWYZZYYXXXWVVUSPLHFGIMQTVWXWWVUVWXWTQONORU-/2444310/.-YZZZYWUUTSRQPNMLKJJKLMPSVXYYXXXWVUTRPNLLLMNPQRSTUUTUUUTUUWX,,-./.---.[ZXWUSQONNOQSUVWVVWXY[[\[[ZXWVHUTSSTUX[/122110.[YVSOLJJLPUZ\ZVPMLLKIHGFEEFGIJJIGFEEFGHIIIJKLNPQRRQQPPONMNNONNMLLMNOPONLJIHIJJLMNOQTUUSQPOOPQQQPONNMMLLNPSVWUTRRTVX-/1110/.-,,,-./.-,WWV+,-./0123444320.YWWVUTSQPONNNOQU[14542_[WUSRSUY/1220]YVVWYYYZ--.--ZZYYYZ---../.ZZ.0234320-SMLMQSRRRSUWYYZYYWTRPPQSW^3576432344310/./000\XUTWZ\][ZF[[ZXUSQPOPQSVY[[[ZYXWXY[]^][ZXXZ]01222358<@A?<97766531//035777676543221 233444555678"9:;;:998:;:::;;::998899:;;<==>>?@AB8AACFIKJHECBBA@@@BDDDCBBBCDGIKLLJIHGGFECBA@@@AABDEFFFGHIJK>JJIHHGHJLNOONNOPPPOMLKJJKKJFA;643455431//01248@ACEFFGH4IJJKLMNOPQRSRPLGB?<;:97654320.RD:7?ABCFILOPPPOMLKIGEDCDDCB?<9644456676655443443343320=/.-,WVVUUSPLHEDEGIJKLNPSUWVSOLKLMOQROKGDCEGIJIHGGIKMMMKIIIKORSTUVWWXXYZZ[./0122123467877654445678887789:<<=xsolkkkhea__`acba^]\=]]^^\YVVY\_acddb_]\\_adh5789:973`]^`c2356541``a1234577887655678:<=>=;6_RMPY1478989:>GPWYWSQRTY`efeca_\XUSSSTTUTQLGCCDB?z|BHLLKHGGFEDCCCDDEEFFECA}yvvy>?@BDFJMNLHECDHOW[^``]ZVUTRRQNKHHIJLORSSQPNIC@ADILNNMKIFCBCFILLKJIIKNOOONOQSUVVUSPLJJKLMMNNMNNONLKJIHHJMOPPOMKJJKMPRSSQQP(ONLJIIIHGFFGIKLLLJIJMQSSPMKIIKNPPOMLMNOPQONKJHD~zy{}CCDEFFGGIKNOOMJIIJJJHGFFD}|}~~|{|~~}}}~}}|zxtqonMmkihilsuwvtsmgb``bflrusme]YY[]_`acgmtz}ztkc``acegkqw}HIsklpuxwrmms~I}xuw|CCDEGHFD@yvsqoligeeefgfeeefggfcabdffdb``ab`]]^``^[WVVX[]`aa`^\YWVTSRPPQSTTROKIKR\ekoponkhda]ZY[^bddb^[[\^__`bfjllnqu}ypga]ZXWX\cmssmd][[\][YWUSQONMLJJKNTXZYWTRQPOONMLKIGFEDCB?;8kecg9CMUXWUSPMIFFHKNOQRRRSSTUUWZ_c22b```122212234ggfedba`_`aabcdedca_^]%\[ZXWWXYYXWUSSUX]bgmsxzzxw;<=<:9778:<=>>= >>>?@ACEG$$$G$H$$%%&'''&''&%%JI%%%&&%JHGFDDEFHI$$#DCB 841.---,+)'&'((('&%%&%"!!"%')('&'')$""$&%%&%!%+.-+))*.25765320.,+*++*'#!!""!@@#&))('&%$$#c$$$%%%#"A?=>? !"#$%&()(&$"#%(-146541/.-,,,*'%$%%'(*++*)'%"!"$&())('$" !#%%%$$$%'(''&'(*+,,+*)'&&'()('&&%%%&')+,,+)('&&(*,,,+*)('&&%$&''('&%%&(*+*)'&&&')**('&'()**+++*)('8MKIFC@?@BCDDEE###$$%%%&(***(%$$%&&%%%$#DA@?ABDEECA@@BCDCBA@?>=;:9876668<>@?=<8410/138=BC@:3.-.134457:=ABA>95445678;?CGJKLMO)*SME<8:>CED@=> <9643321234211234455444321/../012333310/.-,++,,---,++***++,,-,0-.0/,*('''(*+,-1/-+))()))*,-.//.--,+**)()***++,,,+,,---.../12ӀڀȀ瀃ۀ .J%ڄۀ!ۄք-Ƅ҅̈́ąV܄@ɶ򆏕,ÿ~J L, *񀅆%M6􁌙eùǶȿ³VĻMN2;fhijkkkigfeddeefghgfdb_][[[\^`bcddcbaa`_^\\\]^`bcdcb`^]\\]^_ ^]\[ZYXWVUVVUUTTSTVXZ\^_acdefeda_]]\[[[]`cf45689:99876556555hfdba_][ZYXWVVUTSRRSSTTU'VVWWWXYZZZ[[ZZYXXXYZ[]^^^]\[ZZYXWVWWXYZ[\]_acdddcba`_]\[YX Y[]^^^__^][YXYZ[[[ZZYZ[\]^^]\[ZZYXWVDXY[\\ZWTRPONOPQRTUVWWXZ\^^]]]^Z\\dh88864eb`^\ZYXYZ[]]^^]\ZYXWVVUVX[]_^^]]\[ZZ[&ZZZ[]]][ZXXWWWXYZZYYZ[\]^]]\[ZYXVTSRSUV UTSRRSSSTUVW(XZ\^___^^_abccba`^]\\[ZXWVUUVVWWWVTSTTVWXWWVVUTSTUVVWXYYYZZYYYXXYZ\]^^^]\ZYWVTTTUUVVWVVUUVVWVUUTTTUVX[]_``_][ZXYZ[\[ZYYX YZ[[\\]]]^ ]\[ZYXXWWVWVWXYYZ[[ZYXVUTSRQPQQRS,RQPONLKIHHIJKLLMNOPQSTVXYYXVUSQOOPRTUVVVUTSSRXSSTTUWY./00/.XSOKKMQUXYXXWWUPH@:67>M_7<=>@ABBA?=:86420.--,+VUUVVVUVVWVUTSSTVWXXWWVTQNKJJK]LLMNONOPRUWXXXVTRPPPQTWXYYYXVRNJHGHKNSVXWTQOOPQQPPPQRUX-/112110.-XVUUVVVUTRPMLKJJJKMNPQSTTUUUVUSQPONMLLMOQSUVUTUVWY--..//00/./..ZWURPQRSSTUUTSRSUXZYWUTTTU'VWY\/111/.YXWWVTPNLKJIHHJMQUXYXUQNLJHGEDEFGHIJLNOPONLLNOPQQQPNLLMNPPPOONMKJISJJKLLNQSTTSRRRTVVVTSQOMLKKLNOOOPPQRSUVVWXYZ-./01110../110/-,VUUU++,.02466531/-XUSQQRQ;RTX\0110]YVUTTTUWY[]]][ZXWY\_000/\YWVUTUWZ/0110//01110001234 3322210.XVUTVWXXWWVWXY)XWVUSRRSVY]135553100///[YY.13320^ZUPNPUZ/0I/0010`][ZXWWWXWVTTVXZ[ZZYXXXYZZ[ZYYYZ\]//...037:<<:876667788789:9876420/01 2344456789:998(9:;=??=<<==;989:;=>>>===>?@@A@@??@ACFHIJI'HFCA@@@?=<;;<=@CGKLLKIHGFEECBAAABCCDEGHJKL KJIIJLOQRRQPOPOONNMCKIGEC@>=<;::9:;=?ACDCA@@@ABCDEFGGHHHGGFEEEFFGGGHJKLMNOOOMLJIHFDB@>=<;95bZW[bi789;=?ACDDCCCDEFGHIJKLLMNNOOONLKIHGGGFEDCBA@@@AABCUDEFGHIJJJHEBAACEGHHHFDCBCEGJMOPONLJIIIJKKKJIHGEDCCDEFHIIIHHGGGFGGHIJKLMMMNNNOONMMMOPPQPOMKIFCAA@ACEGHKOSX[]^^___]YSLGC@><<<>???>=<::;=@CFILNNNLJHFDBA@?=;9754 56788876420/$1110.--./0/.-+VVWXZYXVSQPPPOOPPRSUUTS!UVVUSRRSTUVUTSTUWY\//[WRLGEHNV.00/0123%20\YXZ.000/.-,-.1356654457:<>???>>?@@A@@@AA@@?>>=<<;::tplgcbdhlpsttsGqnifefhjigedcdefghhhgec`^^_adefgiknruwxxxy{|~~}|ywusrppqsuwy|CDFGHHGEDEEFFGGIIG!DCB@}{zxtpmkjifc_\\^`aT`_\YVUWZ]_^]\\]]][Z[/246888764310_][[]acb[QIHOYc56899764334554d`^b5@BDEFGGHITHGGIPX]_]YUTWXUROKGEEFGJNSXZVOHB>vrt{CJPTUSPLIIJKMOQRTUVUROLLOSVVUTRQOMJHGGGHHIIKLMMLMMMLJIIIJLMNNONNMLKJJKMQTUTQMKIIHIJLLLKJIIJJJIHFFFIMRTSPMKIHGGHJLMNNPQRSRQPNMLKIHGEFED{zz}BCEFGHHIKMPSTSQMKJKLKJIHGFDCA@@|zwtrqrtwyyyxxxwusppqsutqliiginu~{wqjb]ZYXWSNKKNU^fjigfhmtyywtplhecflsxxrlknrvy|MLzi]Z\clsx|~~|{{|~@A@??@BDEEDDB|wsqponkheefhhfc_]^``__dpz~zpf_[ZZ[\]^^]\[[\\[YXVVVWWWTQMKKMQSUWY\^`abcddeedc`\WSSW]adca\VPKJLPV^fpx|{zwuvxyzzzxsk`UPQW^a]XNTTVY[[[ZXUQLIGGJMOQPKFA@AEIKLIC=:;>BFGEA;757;AHMRWZ[ZWSNJGGJNPQPOOPRSUXZ]^`bc23221bb112334454443334 3gfedccbaaabcdefggfedccdefggfeca`_$^^]]\\[ZYXWUTTUWY\_cfhhhiknomjfdcccdc.dfil8:;<;976jihhhgfdcbabcefghijllje]XWZ_dgijjj56789987kgda`_^_```_]\\\]]]^^__`5ace455hc_\[[\\]]^_abdeg44554geb_][Z\^adefghhhgeddcccba``___^_``abde45432100/00110/-+*+,-.--,+++,-./0//.-++*+*)(''(()*+,--.//000/.-,+*))*+,./ +0/...--,+**))('&%$# +$$%%&&''(()*) **+,,+++**))()*)**+,++***)('&'()*+,---,+*)(((''(())***)*+,++**)(3)+,--,+)'%$##$$%''())*,./.---,)*+/22/.,+)((())*)(*+-.-, +*)))***)('&'()*,---,,+*('''('&%&&&'()*+,-./ .-,+*)('&&%%&%$%&'(''&&'(()( )*++,,+++*)()*+,,+++*)*+-/0110.-,++**++,-,+,,--./...-,++*)*+,- ..//.-,,++**)())*+*)('&%%$$$#$$%%&&%&&'()*+ +**)'&%%&'()(''&%&&''$" !#%'('&#"*%%$%$$$%&'''&&$#!  !"#"""#%&'(('&%$#,%&&&''&%#! "$&&%#"!!"##"""#$%'%&&&%$#"! !"#$%&&'& %%$###"""#$%&'&&%%&&'(&%$#"#$ ##$%'''&%$$%&&')$#$$$#"! !$&(((&$"  !"#$$#"!!"#$%%%$#"!"#$##"!  !!""$%%%$###$%&'''&%$#"""#$$%%&'()&%%%&$#"""!"#&))'&%!&'()***)('(*,)'&%$$%&' &%$%&'(()(((''&%$###$&(&%%'%#  #&*)(('(('&&'(*)***)(())*2!!! !$%%#"! !"#"#$&'((('&%%$#""  !!"##$$%%& %$"!! ,('+05 !"##""!""#$%%&&%$#"!! ! !!"!! !!"!  "$&((('%$%%&%%$#""! !!"#$$##"""!"""###$$%%%&%$$%%&%$$#$#"  + !"#$&),.01 0-*% !#$$#" % !!     "$$"#! ! :8520/1368;<<;963346776543445625310/0245789:<>@BCCBCCDEEDCA@?>=<<<=>@BCFH%'()))('& '()('LKJIGGFGHHIHGHIIIHGFGFFEDCBBBC"! ;98630.-,++)'%$#$&&'&$###%&'&%$$%&''&'4&$##$%&&#!&&%$'#&'%# &%-00-+*+-012210/.-+*)))*+,+(%#$% &''()*)(&%$# $%'(('%" !#$%$$%%&''&&&'+04652/./0.-+(&$+%(,/0.)%" <99?@@@???>=;;<>>><965458<9757:@DD@=<=@ABDGLS,+OC80.05;?BDFGIAJLMNMJHEBA@ABB!!  !""! ?=;9899876434565310012114:ACA;520/00123222110/.- ,*(&&(+-./0124!5554320-,,.2678640,)(),05:?EGFDB@A[BA?<6/($$(-0.+((*-//0//-*'%%%')+,+($" !$&''%" #%%$!!%(+--+)&# !#$$#"""##$%'()*+,++0/00012233211011234443221122333210 /.-+*))**,-/124687642345633222111011223456752-++-0343431/.--,--,,++*+++,,+ ,-.01/-+**)**+,./00/.-,*)**,-../0100/...-,+* +,,-./123򀟁؀р؀ʀՀ )ˇʂˆӄ""Ѕ ޅ܄)ۄ݄ނ߇6üل؄Ƅ΅τ̄ɄȂɆʄ +8F:yÿH9ąĄj ʿ{%9/UJ񀍛ހ¿½%Ʌl݅I abbcbabcdefedb`^][[[\]^^___`a`_]\[\]^`accb`_^_adeedb`_^]\ZYXWWVVUTSTS TTUUVVWYZ\]]\[YXXY[]_`abd23445665678876655ihgfedb`_][YWVUTSRSSSTTUUTUVVWXWV*UUUVVVUUUVVWWXXYYZZZ[[\]^_`aaa`_^][YWUSSSTU +VWWWVVVUVVWXY XXWWWXZ[]^^_`ab +`^[YWVVWWWXWUTSR STUWZY[Y]^23455654fdbbaa`_^]\[Z"[[[\\]^`a``_^^][ZYXXXWUSRPOPPRSUWXY +Z\]]\ZXVUTSTSTUUVUUUVWYZ[\]]]\[YXWXY\_acbba`_]ZWSPONMNOQTWYZZYZYXWTQNLLMNOPQSTVWXXYXYZ[\]]^]]\[[ZZYYXWVTSTUVXYZZZYYY[_bcddcb`_]\[[\\\[ZY"XXXWWWVUUTTUUVWYZ\^_`abbcba`^]\[ZZYZZ[[]^^^]\\[ZYXWWWVVUUTSRQPQQQRRRSSRQPONMMLKLLMNOPQSUWXXXWVTRQPOPPQRQQQRSTVWACCB@><:7520//..-,+SQPPQDRUWYZ[[..[XTQOMJIHHIKLOQRSTUVWXYXURQQRTV,/13321/[VPLHFFIMQUWXVTRQRSTVWXY-/0110.-+VTSSRQP ONNOOQRTUUUTTSQPNMLKJIIIJLORUWYZ\...-..---..-,+UUVVW,-ZXVTSQPONNNOPRTUTSRRRSST SRSTWY[\./.%,VROMJHFFFHJNRVYXVRNJGFEEECBBA?=;<@DGIJJKMNNNMLLMNOPPOMLKJJJKLMMNOOONMLKJJJKKKLNQRRPOOPRUWXWTQMKIHIJLNOOOPQRTUWXYXHZ.012221110/.,VUUU++,./134565531/-XURQPPPQRSTUUTTUVWY[]]\ZYZ\^_^]ZXWWWVVWYZ\].[YXXYZZ-./0111/.ZYWWX-.1367653210.,VROOPRTVXZ\]]\[ZYYZZZYXVVWY[]]\YURRTW\145653100/.[[\_000^ZVQNORW\^/`_`00111cc2333db`_^[YWVUUUVWWXYZ[\]]\\[\]^^//024678:;<===<;;:9987765556676544334526667887789;<>?===??<:753369=>>;8421259;<=>?ADFHIJKLKIHGFFDB@=<;;<>@ABA BCDEFGHIJKJIIIJJKLLMMLLLMMNNONNNOPPQPO$NNMMLKJIHHIJKLLKIHHHIJKKLLLKKJIHFECA@?!><9889;<<;:::;<=>??>=:7hdbbein9<>?@@BCEGHIJ KKLMNNOOON#MLLKJHFC@>>?@BCCCBA?>==>?@ABCEFGHGGFE FGHIKLKJIIIKMOMLKJIHGEDCCA@?@ABDEFFGGGHIJKLMMLKKJIIHIJKKLMNOPQRSSTU)TTSSTTSSROMJHFCA?>>>?@ADGJNSW\_adffaXNFA><==<;:87679<>?@? @ACFHIIFC@>=<;:98765n44334555655432110001100/.XSPPRUX[\ZWTQONMMMNMLKKMPRRSTVX[]^^//00/ZWVVXY[//\YXX--./01122334320/[[^13556899::;;<=>@BCEEDCA@?>>>?@@ACDEF EDDCBBBA@?>=>=yuronnoponooppooonmlkihhiknpqrrqqponljhfghijkmopponmmmnoqrst,uwxz{|{zzyyzz~|DD} |{yxxxy{} +DEEEDCaDDCB@?>==>>??>=:767@BCDDFGHFCxrlgc`__adfgfda_^_acehlqtuspligeda_][ZYXXXWXZ\^___][XURPPRTVWXYYYXXXWVTQPPTX]``^\ZXYYYXUSSUZ_dgikoruutttvxywrke`\YWVUTUUVWXWUSRQPPQQPMIC=tu=BFGEA<:989:<=>>=<:999;<>?@AABCDDEDC DCEEGHIIHGFFGGHHJ%%LKJIHHGFDCBAAABBDECBABBCDE""###"! T20.--,,+*(((*-+**+,.+)'''##$%%%%$" $+"%&%#!  &,1444322120//.,+++,-,*(&%&&&%%%&'()))('&%$%&'(*,-,*&$#$%&'''(''()+,,+*>,-..-.--,+)'%$##$$&(+,,*&#" >968%+/10/-,,,-/01210.+)&%%&()**)( '%$###%&''()(''(('&()()(&%#! "%'''&%%%&%%&')***('&&&'''()*++,---+)('&%%&'''&IECAAABCEGH$%&(*,---,+ **))((''%$#"D"B@?>?@AA@?=<<=>=<:98999889877886432C10-)$"$*06<@BB@?@BDDB?=;;<>BIOQNG?:89;<@ELQRNE;4249=@A@?=<;<<>@A@?=<.;;:: !!"#$%$#A=:7531112456531//013469<>><85432100///./011210/.-+*))*+,-./00/ .,+*,03665310/'.--/269;;<=>?@???@@@>:62/-,++**+,-./.-,+#,+*&#;< #&&%":9; #%'&$"  !"#$$%&'(())((()))*///./001210/./.-,+**+,-/2479;:9765565450/./0122210///0234320-,,.0123100/.--+*))())**+,,--./0 +.-+*)((()+,--.0.-,+*)))*+,-/10///...-.//0 *҄(LJd؅ڀ ӄ2ۅC̀ͅ6>¾Dž4ހ ·Ą z3Ż"ŷ#)F TƿM߄ހƼ񄌎˿ƀ¿¿ſƼ@RPن'\]]\\[[\]_abccdeedcba``_^]\]^*]\\[[ZZZ[\]^^]\[[]_abcccdccbaa```_]ZXWVVVUTU WYZZXVSQQRSTUVXZ[\\]]^_`b2334445677888776766kjhgedba`_^\ZXVUSSRSTTSSSTSSSRSSSTSTTU VVWYZ[\]^_`aabcba^[YYZ\]]\\[ZYWVUVWWXXYZZ[\\]]\\]^__```abcdeeda_][ZXVSQPPPQQR&STVWY[[^]0022235689:98654ihgggfdb_\[ZZYZ\]]]\L[YWVTSRRQPNMKJJJLNOPQRRSTUVVUTSRRQPOOPQRSSTUUTSRPONNOPPQTW[_abbba``_^]]_ac3454gdba``abba`^]\\]]\[YWVUTUUVUVWYZ[\]\[Z[\]^__^]\[[ZZYXXWVUUTSTTUVWXY[\]^_```^]\[\\]\[Z[]^]\\[YVSQQQRRSUWY[\]^_`a``^]\[[Z[\]]\[[ZYXWWVVVUTSRQQQRSTUVUUTSRQQPON +OOQRSSSRQQP;OONNOPQRRQPOPSVZ\]\ZYWVTTTUUV+++UTRPOMMMLLMMNMKIHHJMPTWXY\/09/.,+*)PONMLKJKLMMNNPRRRQRVZ]_`aa`[UNHDCCEHMQUX[\\[ZYYXXWWV7WZ.00/-VROLJGCBCFKNQSUVVVUTVX[[[YWVVVX.03431.-,,,XWVUUUTSSRPOONNMLJIIHGGFGILOSWYZ-.-,WWVTSR+SUWY---YYZYXUROLKLMNPQSTUVVWXYXVTRPPRUWZ\//0/.--../.-WSPMKJLOSXZYWTQOMKHFDCCBA@@ABEFGHHG HIJJKLLNOOONMLKKKLMNONMNNNMMMNOPPPOjNMLLMOPQPPPQSUWXXXWVVWXZ\024554321/.YVUTTV-02345665420/.-WTRQOMKJKKLNPRSTTSRRSUVWVUW[_1221a^ZVSQQQPNMLLMPRSTUVWXZ..//..ZZ-.147986410.,TOIEFJPUXXYZ[]___^\\\^_^\ZYXYYX:YYXVUWZ]/0123320.[Z[/0110]ZYXWWWXZ[\]^][YWVVXY[]_acba^[YWVU*VWXYZ[[\\[ZYYZ\`c34689;;:865679::999:<<;:9789:<=>@AAA?<:99:;<=<;98654446789<;<=>@A@=94/VU.39<=<:977789;=?BCDEEFGGHIKLNOQRSSROIC>;:;=>?@@A(BCDEGIJKKKJJIHHHIKMOPQPOMLMNOPQQQRTTTSRPOPPQQPONMLKKJKKLLLK LMLLKJJIIHGFECBA@>=<<;:864dbbeh56"77889:<=;8ic`acfjo:=>?@?@@BDFHIJIIHIIJJKKLLLMLLKJIIH +GGFEDCBBCCBCCDE DB@>=<<<=?ACFHJKLMNOOONNOPRRRPMJHGFDCCBBBCCDDDEEFHJLNOPQRRRQPOOOPQRSSSRQ?PONNOQSTUVVVUUTRPNLKIHFECA@@@ACEGIKNQV\cggeaZRJC>;853359>DKQTTSQOLGB@ACEFFEDA?=:9778:79877665432100122210///.[YXWY[^__][XVVXZ\[ZXVUTUVXYYYWVVURMF>7338?FLRV[_00124688987766788:;=>?@AA@AABBCDEDEEDCBA@ABCDEFGHHIIHGECA@ +?>>zywutssr1qpoonooppqrqqqpqqrstttssstuusqpoopqqrrrqqqomkjklmlmljgfgknqstux{}~|{yx:z{||||}|~{zyyxwwwvvvuuuvzGGGFFFGHJKLMLKKLMNOJNLKJIHHGFECA@>>=:7ha\YXY\cj8:;;987666789975311123454421012345568:<>AEHKMMMLK$LLLMNMKIFCA@><99>JYelnnlhecccba^\ZXWU$TRQONKIGFEFFGGHHIIIGFEFHJMPQPLHFEFHIJnKKLLMNQRSRRQPONNNOOQRRPMJGDBAACEGIKMNMJGECA>tnozFOUXXWWXZ[]^``_\XUQLGEEGKNPQOLJJKMMLHEFLSY\^][XUSRQQQPNKIGGIKNOPQSSSQOLKJJJIIGFEDEGHIKLLMLMLKJLNPRSSQONMLJGDCBDFHIHHGGFECEFFGIMQTUTSSTUVUTSRRQOMJGD~~}|||{zyyz{{zxwuttuttsrnkkmrpnlifda_]]^aded`XNEADO`p{~||vlc]_ixKQSO~rmpuy{ywspnmnryDB~uld\XX^gqxxvtqniebcejosvy=>@BEHKKJFB}vnhdbaabeghfc`_agntxywv{IGxpjgdba`_^]\[YWSPNOUapHG}sjeba`^\ZYXXYYVRMKKOTXZ\]_`aa`_]ZVROMLMOQU[bgjhd`^ais|~yrkd^YURQRRQQRTWYZYXVSNHC?xw>>??@AA@?>= <;:999:;;<";::;<>@@ABDFFFEDCCCDDDEEDDFDEDFGHIHGFFEDBA@@A@@??>>==>ADHL&&&%%%&'(''()('+&&'(()))('&$#""! +(%$##%).!#%&'&&%$$#"!!"""! !+4:=>=96431/.-,+,#+**)(&&%%%&'(()***('%%&(*+,*'$#"$%'( +))**)**+,-,+),-..,*(&$#"""#$&'(('&$"!!:66<$)-//..//012!0.+(%#!"#&())(&%$&''%#!#'-13430.,+*('%%%'(*+++**++,,,*)'&% $$#""##$%&'('(((''&&'')+,,,+* +('&%%IHH%&'&&%%$#FEDE#$%%&'),./.-,---,,+*('%#ECCBABCCBA?>==>>==<:99:<;:98765422358::82+$ ")4>EHHGDBACEFD?94117AL+/0-NB:79<@BBA?<9767CI&%D=965433343)21/,**-4=FN((JC<63222100/0011/,)'')-012234G331/,*)(()*-16:<;85238?FJJGB<730-+**+++*+-/1110.,)%"<<!"" <7434468 !"#$$#! "$%&&'()+++)())())*/ ...//00122334321//.--+*)))*,.1357888754321212231/.,,+,-/13443 4565420.--/01 +22133220/-,++***)*+,,--,--..-.//.-,+))((()+,.--..///.,*(&&'*-0 0/.-,,+++怇́ցˀՀ΀̀ t6ل؀(Ʉބԅ΅ ؅ ܄ʄDŽÄ Ն#ޅ܀ÿ[ Z7O$ :ú¿¿9B +݄;<ùbþC¿¼ѿW?$\]^_``^]\\\]^___`aceffdca`__^\[[ZZYZ[[\\[]^`bbbaCbdeedcba`_][ZZ[]^_^]\[YXWWVWWXXXWVTTUVXYZZ[\\\[YXWY[^`bcdddeeff44567!665566677888776655jihhgggffdca`^][ZZYWVTTSRQRSR STUVXYZ\\]]]^ __^^\[ZZYZZ[]\]\[[ZYXVTSQPPQRSSTTUUVVWXYXXXYZ[\ZYYXWWVUSTVXZ]`b22122556789:;=<;;:::98olhda^[YXXYZ[ZYXXWVVTSRQQPONLKJJKMPRT SSRRQRRRSSRQPO POOOPPRTTUVWXY[\]_`aba`_][YWVVXZ\^``_]ZXWVVUTSRQQRQRSVY[]^_```^\ZYYYZZ[[[ZZZYYYXXWVWWXXXYZYYYXXYYYXXWVVUUVVVWWXYZZ[>]_bfilmmkhfdcba`_]\\]^`aaba`_^^__`aabccdddccba`^]]\[[ZZZ[\]^__^]\[ZZY +XVTSSSTUUVWVUTSQQPQRSRRQPPQQRQPfQQRSUWYYXVTQOPRW.02331/-,+TROLKJJKKKLNOOMLLNPRTUWXZ.023454455664310/.-,++,,--,WTRQRSVXZ\^^]ZVQMKKNSWZ]/]ZXWVVWXW8YZ[[XUQOMLJHFEDEHLPSVXYYWUUUVWWWVVWWWX-/1210.-,,--..ZYWVUTSRQQPPOOMLKJJIIHIJLMOQSUVWWXYZ-,,,WVUTSQPOORUX-XURONM.NNPQTVXYYXWVTRQQRSUVXY-.///.-,+VUTTTUWXXWUSPONMORUWWURONMLKJHGFDB@@ABCCCDEGHIJIJJKLMNOOPQRRQOMLLLMLLLMNOOPQ PONOPQQQPOOOPNMLLMOQSVY[ZXWWXY[/1333210/../0245544555420/(.-XURNKJIJKMNPQRRQQRRSRQOPRUZ`2321]YURPON MMMLMNQSUVXZ\![...-ZZ[.024688752/,TQOORUY[[\.../"000///00/^\[ZYXWVVWXYXWVUTTVY\/000/0234320\XUUX]0232210_]\[YX"YZ[\\[YXVVVWXZ[^`bb`]ZXUTTVZ^cg4543223567654 56899::;;<~==??>=<<<==<;;:99:;;<;;:9877888999:<<<=<;9789:;<;:98766678:;>@CDEEFFFEDDEHKNQSRPLHDB@???ABCDEEEDDDFHJKKJKLMNOOMLKKKLMOPQRSTTUUT SRQPOONNOPONONMLbMMLLLKKKLMNOONMMLLKKKJIHFEDDCB@><9743f34566677788876jgc^YWWXZ^bi7:=>?@@@ACEFGGGFFGGHHGGFFGHJKKJHGFEF +EC@=;:99:;< =>@BCBA?=;:8(:<@CFHHHIIJKKJJJKLNNOOONNMMLKIHFDA?=;:998 9;>ADGIKMOPPQP +QRSSRQPONNMNOPPPOzPQQQPNMLJGDA@@ABDEFGIJJKLOSX]`bcb]WOGA>==?ADGILLKJJKMOQRRRQONMLLMNPPNJD>:889:;:975445431000/.,UTUX.//.[YXWWXYXWVTQLHFIPX`23456543 4579:::998878 :;=>???=<;<<=> ?@@@AA@@AAABCEFEDDBA@@@BBCCBBA@@?>zyyyxxvtsrsrq'rrstvwxy{}~||}~}{xurpmkjjkmorstuvwy{}|xusssrqponnoqtvxz{||{z}z{|~~}{zxw'vvwxyyxvuuvwz{||{zxvuvy~CEEFFFGHIJJJIIJ IIHGFFGIJLMMNOOPPPONML7KIFB?<::9::97ic_^_aeh4432b_^_a2479:::9877889::;<>ACFHKMONMNLOOPPOONMLJHEA<:=HWenqplhdcdfffda_]\[ZXVUTUWWWURNJHFEEJMNMKJJKLNOOMIFDDFHJKhLLLKIHIJLMOPRRQOMKKMOPPNKHFFFECBBCEGHIJJIHGFD@=y@FMQTUUTRPPRUWWWUSRPMIFCDFHIHHILOSVWUSQRW\aca\VSRTVVTQOML"MMLMMMNNPQQPOMKIHHIJKLLKKKJJIJLNOONMMLLKJJIJLMOONLJIHFEDADGIKLLLJHFEDEEEFEEEDEFGHHHIKMOPQRTWYZYWVUSPMIFC~|{yxwwxyz{{{zwtqqtwz}~{yyyrmifc`]YVSQPRW_hotvvwy}|zy{{zxy~HI|qida^[YY]eoy~{yxvtpmlnpruy}??{unhdbcglptw{~zvsqponlhda_^[YX[`iryKNMIulgggfd`]ZWRNLLPXaiosvzHI|rjeb_^][YWUUVXZ[[ZZYYYZ[\\[!]_acb`\XTRTZbjqx~wj^TMHEDFILO=<<;<=>?1@BDFGFEDDEFFGGFDB@><:987789:;<=??@@ABCDEFGFC@><<<=>?@ABCCDCBABABCDEDECBA@?!>>>?>>===>?@AABA@?=;;<>AD#$$%%%&&'&&%%&'()))('''&'&%$#" +(%$%&)+(&&&' "$%''(''&%$$$##$$##""!!! ",6<>>;7445787532100/.--,,--.-+)'&%$GEF%(+,+*)()*+++)'%###%&&'(())*))(''(()*+---+*))*+,,+)'%%$#""!""#$$%%%$D##" <#(+-..,+**+-..-+*))(&#"!#$%%$%&(*,,+)(),03530,**+--,*(''(()**)"***++*)('%%$%&'''&&&%%$%&()*))(())('&'')***)(''&&%JHFEF$%'('&%$#$%%&&&'(*++,,./010//.-+)'%#CA@@?>>>?@ABCCBA?==?ACDEHFCBADGHILMLHD@<:764320.-,,/4:?CDDCCDEFGGGFC@>>?@@@AEK()OH@:64210.-.28>CCBA@>=;865568:=@! ?;61.,-/258;=?@AABCDDCA?=;99886410/.-+*+/4:?CEEFI(*+(H>8545654321/,**+/49=@BDGJM((MG@:531101134320../023322112234443/3221123467752/-.17=$<;97mlllkheb_]ZXVUTTUUVWXYYYWVUUTTTSRSTTUUTRQPQPONOPRSUVWWXXXWVVUUVXYXWWVW +VWWXYXXWWWXYXXWWWVUUTSSSRQPPPOONLLLMOPQQRSTUVVU%VXY[\]^]\ZXWUTTSSSTSSTTUWXYZ[[[ZYYXXXYZ[[\\\[ZY$Z[[\\[[[\]]^^_`abceghihgggfffeeddcb`_```_^]]\\\]]^^___^]\ZYZZ[\$^^^]]^___```_]\[ZYXWVUTSSTUUVWXXWWVVUVWVUTS RQPPPQQRQQRRTUVVWZ.02331.UPNNNMJHHIKLNOPQPNKIIKOSVX-.0247:<>=<;:8630-,++,,,--..-,SOLKMSX.0010]ZXWXY\./.[YWUTTUWXYXVTRQPFQPONMMMLKJHHHIKNRVZ\\ZWUSSUVWXYY,--./12332100//..---YXWVVUTSQONMLLLKKKJIIJKMORTUVVVUTSQONNNPQTWZ.-,,WVTQMIGHJMPSUUTSQQQRSST0UUUVWXXXWUTTUVXYZ-,,--.-,VRPPRSTVWY-..[XUQMJHHIJK|LMMLKJIJKLNMKHEEGKORRQNLLNRVXXVRMIFGHIJLNOOONNOPQPOMLKKLNPRSSRQRSSTSRQQRSSSRPPOOOMLKJIJKNQTVWWXXXYZ]03676410/000/.../12455445320/..-XVTQNLLNRVWWUSR4QOMKLMNNORY0453`YSNKIHIKMNOONNNOPRTUVWXZ\//.ZWVVXZ./0/-,-./00123321W0.YVTTTSPNLMQVYZXUSSW[010][[-../00/.ZVSQRUY[[YYY[]//\XVVY\_0``^][YXVUVWY]258741\XUTTUXZ[*\^`123444667665421/./024689987656677789:;<;6<<>???>=<<<;;::999888:::;>==<;;:86557:=@CEFFEDEFGGIJKMNNLIFBAABCEFFGGGHG HIKKLLKJKKLMNOPQQRRSSRQQPPOOONNOOPONMMLLMMNOPPONNNONMLLKJIHFEDDDEFFGGHIJJJKKL-JGC>:51\ZZ\^`b1122332a[UQONMLKLPU]f7:<<<=>?ACEDE(CBAAABDFHIIHFDCBBBCCDDDEEDCB@=976568:=?@A@?> +=<<<>?AABBCBDFGHHGGHIKMNOOMJFC?=;98777654h569;?BFIKNPRQQQRRSRQONLKIIIJKMOPQQPON:MLLMOQRRQOMKHFDCCCDCBBDHLRX\`ceda[SMHECBA@?=;:;=ADFHJKMOQRTSROLHFDCCDEGHFC?;97530.---/00012$10/.-YWSME>;;>DJQVZ.013467899:::9:::; :9::;:865569;<;:9::;< +;:::;<<===>?@ABBCDDEFFGHHIIIJJKJIHFDBA@@@???@AABCA@???~}|zxvuvxyz{{{zyzR{}}{wtqnllmnopqstttuwyyyxwuspmjhfeda_^_bfkpstuvwxyz{}~|yxy{~ }|{{|~@?@AAB AABBCDEFGHGGFGHJJK0LMORUXZ[[ZYXWWVTROMJHGFEDB?<98nnnonliecbbb000245678889:=@EILMMMLLLMMNOP:OOMLJHEA>;977;CRakmidabflookgdbaa`^[XTRQPQRTTSPLIECEILMLNOOONMLKKKLOQRRQQPNKIIJJKMNONLJIJJKLLKJHGEDCB@~||@DINPPMKHFDB@AFLQUUSOJHGIKMMNMMNOOMHCBEHKNQTVXYYXWWXY[[YSNLLOQQPNMMNNOOONMLKKKL8MMMLJHGGJMOPPONMKJIJLNQRRQQPPNMKJIGEDDEGIKMOPQRRQOMKIGFDCDEFGHGFEDCDDEFGIKMORTVWWWVUSQMIFDCB~{zyy{~{vtvzKNRXZWSNI~vqprvz~th^[]cinrtx|FJNQPMGvpke_ZX]guEFztnje`[XY\aeimqtvusqkqsvvsleadkvBCA{xvvvwy}|xtqnkhffipxxqjggffefhlqsttssuy|}~~}{xqh_XVXZZVMC>?JYht{}}{{}ukd`^^_```_[^\[[[\[ZYZZZYXXXZ^bfgfda`^\ZXWWXZ\_aejnpnh`YRLGDBBCDDDCCCDFGGFECA>@@?>=<;9765443210037<@BA)BBCCBA@BBEGHHFFCBBCDFGGFFEDCA?=<<=??  !""##$$%%$$#$$$%&&'2()*+-.0110/-,++)(&$#"! //..-,*('()*  #$$$#$#":!! '29;96446:=>;7433321/-,**))*+,,+(&%#FEF%')**) ('')*+*)(&')+,-+)'&'''())('&&''(%'%#"!! ><;!$')('%#"!  #'+-.,)&%%&()()*+*'#@?!#%&())*+, -.//.*'&'(***)*)))())(&$##%'()))('&%%&')+*)(''%$###$&')*+,,,+*)('''&%&%%$#$$%&'()+,-.//...-,)'%###FEDA?>>?@CFHHFB?=?CGKRU,-04641.*OJDA?@BDFHJIF@94248<;;;<>@AB@>;97642247>>==>ACDCBA@>;72.,-/0.)" &0:BEDCA@BDGIKKGB;62101234 322332101110a13589976554210013568:>ACA=82-)%#""#$$$###$%&&&%$#"!@>:4-(&)0!###$%(*+)&"   "#$%%&'((('&&'()5556654433210/./.-,+**))*+.035678887653223345421/..0!21/.-,+***+-/133210///01223332210/./000/-+)'&&&'(()()*+,--110.-+***+,./01 +2455541.+)()*,.011/.-,,+ꁇʁ߁Ȁ V #DŽɅІՄ +˄Yׄ҅Є܅7ń?ׄ1Մ +ɄʅɄۄ,߄) +B{ J&†l:4!ĹMĽ 85þ "Ŀ#˾Ä/X܄߄c6  ccb`^]]_``_^_``aabaa`_]\[ZZZ[\\]^]]]\\\[ +ZYWWWXZ\^`a``_^_`abc ddefgggfdba__^]]\ZYXVUVWXXXVUTSTTUVXZ[\ +]^_abdde3345556667887654556mmmljheca`_^]\[ZYXXWVUTSRQPPOONNMMMNOPQRSSSTTTUUVUUTTTUVWXWVUTSRQPOPPQPPOONMNMMLLKKKLMNPRTVTSQOOOSUZ^dj68787mkkihgffhhhgeb`][YWTSQPQRQ STVWWVTRQPQRRST SSSRRQQRSUVX)WWVVVWXYZZZYYZ[]^]\ZYYXWWX[^befeba_^]\ZWVU TSRQPPPOOPQPPONMNOPRSTUWY[]_abbba^[XUSQQP QRSTUVWXYZ[\[[ZZ[\^_`aaa`abccba`___`bbccddeeddcba`_^]\[ZYZ[\[[ZYXYZ[\].\\[[[\\]]^__^]\[ZZZ[\\[ZXWVVVWXYZZYWUSRQQRSSSRQR9SSTUUTRPONPSW[///.,VSRRRSRPOMKJKLNOPPQTX\//.--.0245665310/05///..-VQMKLNSY/24542/-Y-.02221/-YWVUTTTUVXYYXUROLKKLMNMLKJIJLOSUVVUTTSSSTUV +,--.--,,WVUTSRQPONML'KKJIHHIIJLNPSVWXVTPMKIHGGHJLNPRTVWWWVUTSRPNLJJKLMNQTWYZYXWVVUUUVVVUTTTVXYSXY,---XUROOPRTVXYXXWVTRPMLKKKJHGFFFGHHIKMOPPOOPRSRPLJHHIKLMNMLKJJKLLMMNMLLKKKLMNOPPQPONNMLLMNOQRSSRRSUVVVTSRQQPON ONNMLKLNPSVWqXY[]/13455320/.--.//.../1357764210.,VTTVVVTRQPPPRTVXWWUTTSRPNMMMNONMMNPTWWVTRQPNMMMNMLKJKNQTVWWWXY[]^//0012333210/00//.<-,-.012223321/-,,WVUTSRQOMKJIKOTX\]\[Z[/13431\XTTUWXXVTQPPQRTSTUVWXZ./&_^]\[ZYXWVVXZ\^]\ZZZ[[\\]]]\\[ZZ[]02343 +4679997643232345678:;<;;:::;::877999:=<;:;<<=?@ABCCDEFGIIHGFFEDDEFGFEDC DDEEFFGHIJIIJJKLMNNNOOPPQRRRQONMNMN MNNOPPPONMML=KJIGEDBAABCEFGHHIJKLMMKIGDA>;97668:<=>??>=<;;::9975`TJEFMXd7:;=>ACEFGFEDCCCBB@@?@ACEFGGFGFEDCBA@i?>>?BEILNNNLIFDBBBCDEEEDDCBBAABCDDEEEFGIJLLMLLLMNOOPONMKJIHHGFDA><;:;;<>?ACEFGHIIJKMNOONNNMLKJJKKKLLMMMLLKLMMNOPNLIGEDDCCBBCDGKPV\adeda\VNE<51/025799:;=ADHKNOPQRSTUVVWXZ]_``_\XRJC=97654334554432223445443211123&4567889::;;::9:;<==>>>??>=<;:975ii689:;<<==>??>>===>??@ +ABCDEEDDDEF GGGHHHIJKLEKKKJJIHHGGGHHIHGD{wvy}@ABBCCCBA@?{ywvvwx==>={|||{zxvutttuvwxxyyy==>>?->>>==<;;usqnkihgghijklmmlmnoolf`_ckty|~EEFEEEE@@@??>==<<;<<=>?@ABCEFGHIJLMNPQSUVXZ[\^_acdeeef#dba_]\ZXVUUTTTSRPOMLJGD?vld_^ae45543 4455679:;<>AFKNOONMMMNOQRRQOMJHFDA@><:98765556:@JT[^__aflpokfc`_^]\ZWURPONOOPQPOLJGDCCEGIKLMNNMLLNRW[^]ZVSQQRSTTTSQPMIFEGIKMOOMKHGGGILPUWVNRNJHGEDBA@BGMQRPNLKJIGFFHJMOOLHDCDHLNONLJIIKMLHCACGLPSSSRSTTUUVXYYYWUSRRRSRQPNM$LKJJJKLMLKKLNOOMKJJKLNOPQQQPNMKKKMOPQPPONLJGDCDFIMQTUUUTRPMJHHGFEDDCCBBAAABCCEFGGFEEEFGGGHHGFEDCCDEGIKMOOPOONMLJHECBAA|yxz|JJHGGF|yz}EGHGEzqjfdb^YTSXamx@A@>xurponlifb^[YY[`fmt{~~|wqkhginty||ytqppruwy|}{xsnlnrx~BkA}zuqmkijmqtusoiecdgkmnmkhfcbabcb_YQLJMT\emrtrollnsz|yqh_[Z[]_`bdfghiigedcbaabcdca_\\]_bccba_]ZWUUUVVWVTRPO NLJGFEEFFFECA@/BCEDB>tle`[VTTX]cj:AIOSUVVUTRPNMLKKLMPRRQPOOOPPQ%RTUWYZ\\]\[ZYY[]`123445789::;;::9987765 jhgecbaa``__^]\]^^__``_^][XVTSSTW[afjlmnCoo7mjgdccdfikkkigeb`^[ZXXY[^aeghhgeb_^]^`aba`_^]\]^_`aabcdeefgg44556 5ihfda^[XWUUTUVWYZ[\\]]]^__ace4577764fb_]]^_`aabcd eedcba`_^\[YXVVVWXZ\^_abddedccbc..-,+**++*))())**+,-./.-,+*)* +)('''()*+,-.--,+,-.---..//0//.--+*+**))(('(()))(''&&''()*+, --..///233321/-,+***))()((''&%%%$%$$$#$$%&&'()((('''(())**)))(''&%$$#$$$% $$##""###"#$%'()**)('%$##$%'*,032100//01 0/.-,+)('&%&%%%&&'()))'&%$$$%&'?&&&''()**+++**))(()*+++***+,-..-+**)(()*,/010/-,++*('&&&''(('''&'(('''&&&%(&&'()(((''(()*+,-...-,*(''&&%%%&&''()*++,+*+,-.--,++,,,--,,,+,,-.---,,+* +++,--...--,---../0//.-.-,+*+*))()**+,,,+*('(''&%&% &'''&%##""#$% +#"!"###""!"# $&($"  #&%""!"#$%&%$"!  !"###""! !#$&&&%$$#$%%$#""!!! !  !"#$&'(('&$"  !#$%&'''&&%%$$$#"  "#%&'&%&&%%$$$%&%%%%#"! !"#%&%$#! + "#$$##$%&&$"  !"""!! !!""#"""!"#$##""!"#% $#$%&&%$$#%$$%%$#"!!"#%'((''(()*1$$$%&&%$#"##$&'(('&&%%%$#""##$$$#$&(**)'&%$# $$#"!"#$&' ()**#"! "$'))('&''$##$%&&%$#$%%%$###$$%%%&&()+,.-,+* +,   !!  !"!"#$%$%$ %%&&'&&%%$*##"!  !!!""#$$$#"!.'" $+1 !""!!  !"""!  !#$%&%$"! !"#$%&&'''&&''())('&%$##"""! + "#$%&&' +())((('&%%$%$%&'&$" ) "%(,/1221.+&! "#$%&'()*+-...,)%!11 !"#$%%&'()**)()(%FB@ADF$ %$$#"!@?>>?@A! CCCBA@?>=<=>? 76654321211234652.,-17;>?@ACFH%$$G$H$FEDBA@?K !!"##$%&'()*,-/023456788999::998654310/--,,++*('%$$#!3.)&%')!""!! !"###"! r#)/23347:>?=96432210.-+*))**+++*)'%###%&()++,,+**+-14652.,***+,---,+*'%$%'(*++)'&$$%&(+./.,)&$""!  #&(('&%$&')*)&##$&)*+*)'%%&((%"!!$')**) *+,-./00/.-,++*)(%'&&&'()(('()**)'&&&'()*+,,+*)((()*+++, +*)'%#""$&(+-.-+)('&%%%$##"#$$$##"##$%%&&&%$#$%'()* +))('&$#"""DNCCDEGGGFDBAACDGLQ++*QNJGEEEDCCDFHL'((LGB?@BEGFEDDEFH&'(('IB<7421/,)'(.5=!"" =:8376420.--./26:=@A?<730/149=@A?<988:;=@BCB?<9778:>BDD"J!B@?=:9889:<>>=:7423579:98754445663/*&$',28=@@?<989STUVVVWX[^`bcdeffeda_\ZXVTRQONLJHGGHJLNOPQRSTUVVWWWXXWWVUUTTSSRQPOPQQRSTUVWXYZZ[[\\[ZZZYYZ[\^_`bcddcba```a"bcdfhk66654gedcba_^\[YXXWXXWWXXYYZYZYZZYYXYZZ[\[[ZZZ[[ZZYZYXXWVUTSTTUUUTROMKKLNOOONM NNOOONMLKKKL3MOSW[/1345420.-XVUTRPONMMOPRSTUVXYYXWWX,-./0122210/.-,4UQMKKNQTX[/00/ZVUW-/13320/ZWTQNLLNQSTSQOLJIIIKMOPPOONM NPRTUUTSRQRS RQQRSU,.//.--,XWVTRPPPQRSSRQPONNMLKJIG HJLORTUVTROLKJ#IIIJKMNOQRSTUVVXYZ[ZXVTSRSV-/1221/.-,W`,,,WVUUUTSRQRUXZZYWUSRRTVWWUROLKKLLMNOPRTVXYYXTPLHDBBDFGHHHIJKLNOOMKLNMIFFHJMOQQPNLKJHGGHJMNOOONMNOOPONNMMNOPQRTTTSRRRSRQQPPOONNMMMNNOPSVWWVUVWY[/123431/-XVX-./M1355420.,+VTSSTUVWWVVVUUUTUWYZZYYXWUTRQONMMMLKJJLNPRSRQPPOMLJIIJLNQSUVWXYYZ[\];/135541/-,-.0121/-,++-/2688753100110/-+QOPSUVSNHCABGOUY[/01012210//...\[[ZYXUROMKKLNQSTU#TUVY\/000`^]\\[[ZZYXVTSRSTVXZ\^__^^]^a256665568:;<;:8654733445677643358;=>>=<;::;<===;989:=??=:755567:>ABCDEEDCA@??>?@ABCCCDEFGHIHGEEFFGHI +HGFEDCBCDEFGHIJJJIHFEEGJMOPPOOOPRSTSRPNMMMLMNMLLMMNOPPPONNMNNOONMLKJIHIJLMN +MLKIGFECBA@#AAABBAABBCCC@;5aWRU\c34469>BEFFEDCCBCDEFGGGFEDCCBBBA@@BDGIKLMNPQQPNJFCBBBCD EEDDCCCDDC DEEEDDDEEFEDCCDFGGGEDBAABCCCBCDEFGFE DCBAABDGIJJJHGFEEFGIKMMNMMMNOPQRSQNHB><=AGMTZ_aa`^\[ZYWRMHDB@?>!?@ABCDEGHIIIGFEEFHKOSUXZ[ZVPHA=:9899987654567888789876766678:;<=<==>?ABCCBBBAAABAAABDEFHIKLNOOPPPOP OONNMMLLLKJIIHHHG}yusstwz}ABCDDCCBABBCDEDDCBBA@~|{yy{>?@?>=<;::95::;;;trpmkiggffedejr}DGJJKLMOPRRRPPMMKIJGHECA?>==>>??@AABCCDEEFFFGIKLNOPPQQRSTUVXY[\]6\[ZYYXWVUUTTTSRRQPONNMMMLKKJJJKMOPOLGB=;9886544457899:; :99::;=>??@BDFHHFB=96335:>ACDCA@?l=;976654457ADGGD?qe\WVX[^_]ZZa7AJNMKIHHIKNPRSQOMLNPRTUVVVTSRRSUWY[[[YWVUUVX[_124556677889:::;:9877666544gdb_][\^`cdefeeedcba_^^^_`abbcb`^\ZXXYZ]_cfikmnnopqrrqpmkjkl7&6kihgfedccbaa`^\ZYYYZ]_behiihfca`___^^]1\\[[ZXXY\_bdfghhhg33344556655hgedcbba`^ZVSQQRTVXZ[\\]]^]\[ZZZ\_c4689986iea^\[[[\^^__`abcddcba`_^]\ZYXYZ[]^a-/.--,*)))*+,--./..-+*)())*+,-..---..-,+*('''()+,,- ..///..--,---.//00/..--,,,-,,,+++*))***)(('(()*++,---../ 210/.--,,+ **))(''&&%$%&&%%%$%%&'''(()((''&')*+**)('&%%$$$%%%&'()**)('&'((())*$('%$$$&&(**,+,.0134456554445430.+)('&%&%&&''(''&&''()))*(&$#"#$%&'& '(*,...-+)(&%&''('()((()*+,,--.///.,+*)'&%%$$#" !""##$%')**+*))(('&%$%&'''()*+*+* ++++,,---,,+*+,-.,,+++*+, --..///..-./ .--,,,++***)()((''&'&%$%&&%%$#$$$$#"! !""#""!""$%'%$$##"!"#$%%%&'(('&%%<%#! !"$&')'$$$$"!  #$$##"  !"##"!"#$&&&%$#$#%&%%$#"!""###"#""!  !"#%&''&%#"!  !""#$%%%&&&'()('%$###%%e%$$$%$#""#$&(('%$###$&&&$"  !!"#$%&&&%#! !"#$$#"""! !#$$$"!  !"###""!!""# """!""#$%&%$$##$#"#$%&''&'')$&&&$$#$$%&'''&&%$H%&'(((''&&&$###$$$#""#$&''&&%%$$#"!!"#$%&'()**)**++*)(!#$#!!%'(('''&%$"  "#"#$%* )('%%%&'(*+,-, -/*  !" !  !"! !"$$$###$%&'&&%$$#$ %%&&&%$$###$%&'&%&&&%$$#"#$$%$#"!  +%$&+/!"!!  !!"!  !#%%&&'(((&$! !""###"##$ ##""! !"#"! !" ##$%&&%$$$##"!  "#$$##! !"#$%&&''('&$!!%*.1221/-,+*'# !$')*++*'#   + !"#%&'()*+,-,+*)(OLJGEB?==?BDFG#$#"# """!!!A@?>=>? 0/--,'---.04:@#%&&&'(*+++*)('''&'&'%#"  !"#$%&'( +)*+-/02344322110)/.--,,,++**))(('''&''(((%" 4$*.13467998643344420/-+*)(('((('&%%&())*4)('&'*/6;>=:620/010/-*)('&&&'))**)(&%$#$&(+-/00/.*'$#$%& '()))(&%$%')*)'$##$%'()(&%$$$%$$#$&()(&$##%(+-.- +,+*)())**)( +'&%$#$%'()(4)*)('&'()*+,,,+)(&%%&'()))*-/11/-*(&&&')*,---+*('&&&% $#"DCC""#$Y#""#$&(*+,*(%##"##$$$%'()*)('&%$##"!!AABCDEEFFECBBA?>?@?>=>AEHJIHFGIM(*+*)%D>:9:>BEGGEDCC"&CB@=;9741,)'),157765433345567899864446789;>?@>;989;<<;98)9::767=G)-/-)%#""##$$#!@=988:>ACB?=:9>865567876544554432112344310//0220-+))*-/0124689;<<<:97644456543j44431/,*))*+-./000/,(%$$&*.010,&";<!#%''%!;4/,,-/0.,((,#%$#"!!""#$%%$#"""#$%&&&%$#""#$&'((''&%$%%&(*10/.---/0245654310/.//011223*210/.---./02356788899::987666754332110/.--,,,-.023566643100/.-,+*)))+-/00110/..///-+(&%&&()*+,-,+*)(((*-2/-+*))**+,-.-,+*)((('((()+̀ǀ΀ 0#A/քքֈ+Ʉ߄ބbždžχЅ؉څ<DŽ Ą̄ +φ ͈8'5ޅ/ԅEZUYÿ <ꀌ +F!\Ƽ7,6$ a#:˽±?[]_abcefggfdddcccbbabba`_^\[Z +[\^_```abcd ca_]\\[ZZYYYXYYZ[\\]]^^_acdefg445454ihgggfedca`_^]]\ZYXWVUUUVVVWXYZ\]_`abcdeeedba``aabcc12223445678887665554hgffedcba`_^][ZYXWWV +WXYZ[\[[YXWXXYYYZ[[\\\]\\[ZYXXXYYZZYXWVUTTSSSRRQQRSTUTSTUVX[[^_``addfhjkkkjgc`]\[ZYXW XXYYYXWWVVWXXYZ[\]]]\[ZYXWWWXW XYZ[[\]\\[\][ZXWXXXWWVUTR3STUVWYZ\]_`bcegijkjgc_ZWTSRRSTUUTRPMKIGFDDDEGJNQSTTSTTUVUTSSRRRQQPPQQRSTSTUVWWWXYYZ[Z[\\]^_abdeghijjiihgggfghijkjigecb`^\[ZY ZZZYXWWVVVWWXYXXWWVW VUUTTTUVWXYYXVTSTTTSSTUUVUUUTTUTRQPONMNMLUMNOPPPNMKLMQV[/1223220.-+TRQOMKJJKMORUWY[\]^///..--,,-.01110.--,,,+VUUUTSQPOOOPQRTUVXY'XXYZ./000][WSPMKJJKNQQPMKIHHHIKLNOONNMLK JHGINSXYWSPNM.NOPRSSRQPQSV-/134431/-,VSPNLLLMOQSTUUTRPOMLLKKJKKMORUXYYXURPMLKJJKLLMOPRTUWXZZ[[[ZYXWWX,--.-,XXWVVUTRQRRRQQRSTUUTRQPOPRTUVVTRQPQRSSST(UUTTTSRPNMLLLKKJIHGGHIJKKKLMOPPNMMNPQRRRQ PPOONMLLMNNOPONOPQRESSTTUUUTTSRQPPOOOPQRRSUVWWVUSRRRTW[/12210][XTQOOPSUWXWWVVY.012110.\[[./^\ZXZ]011/]ZXVTSRQPOOONMLKHECCCEGIKLMNMMLMOQSUVWXYXXXY[]^^//013455310.--...-+*S*-159::8532223321/-+*UUVWUROLJIKNRVY../00100/.YWWXYYXWXYZZZYYYZZ-5,WVVXXWURONQUX[]__``_^]]]^]]\[ZZXVTTTVWYZ[\]_`aaabd345678:;;;::975433345567889::;:9878:<>?@@?>==>?@ABCBBABBABCCDCCCBA?>=>?ABCCDDEFGHIJKKJIHGFEFGIKLKJIGFFGJLNOOONOOPQPNLKLMNMNOPOOMMLMLLKKKJKKKLLLM LLLKIGEB@=;:;<;;::;=>=<94]PHCCHQ]5>>?@AABCDEFFFGGHIIIHGFEDCEGIJJIHHIJKKKJJIHGFGHIIJJIHGHgIJKLMNOOONLJHFFFGGHHIIIJLNQRSTUWXZZXTMGB?>?BFKPUY[[XURQQQRSTTSTUVVTQNKIHHHIJLOPQRQPMKHEDCFMU\_\VNHC@>=<;:987667789::;<=<;;;<=>=>???>?@A@ABCBBBAA@@@ABCDFGHIJKLLMN OPPPNLJHFEEDCC}{yvtqonmnopqrstwyzzzyxxy=>?@AABBCCDCBCCDCBBBAA@??>>===>?/@ACDEFGHIKMPRTUVWVVVUUUTRQONOOMNLLIHD@=vst;>BFHI JJKMNPQRSTUUVVVWAXXYYYZZ[\\[ZXVTSRPOONNMLKJIHGFECA@@ABDEFHJLNOPPONLJHFDB>;62013689:99:;<=D>@BDFHKMNKE;0PE?>>@EN-38;<<;:999876421//038=DKRVXZ\^_]YVUX]bfhfb]XSPNOPPOMKJJIHFECDGLRVYYYXWVULTROLJIHGEEDEGILMKIEA>@@???@BFKQW[][XURPNMMNPRTVXY ZZ[[\\]]^`bc2340578;=?ABBA@><;9877666543db_\[[[\^`cehkmnnmkifdba`0aabcddcba_^]]^_acegilnpqrrqpono89;<<<:8njheca_]\[ZZYZ[]_acddcb`_^^]\\[ZZY [\^_`aace3445 +4455665ifdba_\YWVU-TUVWWXXYZ[]^_^]\\\]_`be3566654hgeb_]\\\[ZZ[\^_`abdeeedcba_^\\[ZYXWWWY')+,./0//.-,-,++*)***+,-./..--,,+*)**++,--...//.--,,+ ***)))((()*++,-./ .-,,--../..- ,,,+++**)))() ('''()*++,+,-,,,+**)**))())(((''&%&&'()('''(()*+*+,,,-//123455431/-,+*)*)*+**++,+*))((() ((('((()*++,+++***+,,++*)***))('&''()*++,-/01110.,*(''&&''((('&$#! !#%&'()* ))(((''&&%&&''()(())*)**++,-.//0100/.-,-.--,,,++*)**+,,,++*+,+,+,-,,+*('((''('(((''&%%&&&%%%$#""!!""#$$$#"! !#%'#"!!  !#%&'()$$%%%$#"#$%&&&')(&$#! !#%%$"  !!"! "%()'%#"!)""#$##"""$%&$#"! !"#$$%%$##""! !!!"$&'()('%#"!""#$%&'()(' &&%%$$##"!!"#$$%&%$$###$%&&&%#"""###$##""! !!"#$$$##$%$##""!""##$$#" ###$$%%%$$###$%$#$$$%&((('&%%$$%&()('%$##$%&'''&%%'(((*(&&&(*('&%%$$$#$#"  "#$$$#%&'(())*))())***  "#$$$#! !#&''& %%&&&$###$#"  "$&(*+,,,+,,++*))(&%%%&'()*+,-.*/    !""##"""#"!! !"#$$##"!  !#$#$#""!"""#$ %%%&&'''&&%%$%$#$%$##"!)#!&, """!  !!!"!"#"# """##"! !""###$ +###""!!"#$%$$%&%$$# +$$%&&'&&%%$#$$%%&'&%#"!"##$&')**+,,+'#!$(,./.,*'&%&%)&&%#"  !#$%%$"!"',-+&! !"! !""#$%&'()**++,++,,---+*(&%%$$$%HGGGEDB@><;9889:;:::;<>??>? !"#"!  !"##$%'(*+,-,,+***+*)'&#!;99!#$##"#$%'())***++,,-.//0001112344421/.--,,+(**)(''&$#"!!"#$%&&'()**)('%#" % !"! !&+/2345541.,.26:;:73/+)''((*)'&&&''((''&%$%&)-02v10/.---,+))(''&%%%&()*)'$!9:#',/10-*'%$#$%')*,,,+*(&%$$%&())(&$#""$%'))'%$###$%&&&%%'+-.-+)*,.011/..--,*)))+,,+*)('&'())() **+,,+*)('&%&'(+.25540-*('&''((())(((''&&%$ HFEEF$%&&''& ()*+,+)'%$#"#$%&'(&%$#"DCBAA@@AA@?>?A@??>=>@ABDF$'*+*'E;2,*+/59<<<=?B"$$#!@@BDFEC@>:4-&"$)/3689::9754579;<;963358<>?><975433468:::;=@CCB?>==>@BDEDB@>=>BGL'&%"B?? !"$$%$#D@;757:?BBA?><;:9899987666776543211001210.+(%&*07;;853458:;;:8643U2211123321/-+)'%#""%*06983.)&%&'*,--+($!::; "$$"61../24442112"&)++*(&$"!"#$%%&'()*+0/--,,-./124679::9875432100/ 01223322100/!01134689:;;::999864310/..-.--,,-./1233210/..-,,+*)*+,,-./.-,+*)((('())***++,+*++,-110.-,++*+, +++*++,--. -,++**)('&&%&ـ̀ہꁂЀ ل1!,ƅ3rۅ?R͆ψ ӄԄՄل'.ˆʂɅʆB +QӄIτ߄[߅ހſ +,`"&ͯK5džJ8.*ɮ뀈ӼIF󀆊Ѽǹ􀇌 @1Є6( ڃXW-XY\_ch6777655hfdba`___^^]]\\\[[ZYYZ[[[Z[\]_`abcbb`_][YWVUUVWYZ[[\\^_acdfg456$555jiigfdcbaa``^]\[[ZZYXXWVVUUTTSRQPO1PPQRSUVWWWXZ[\^`bce3344433eeddccbbbcdf456788776554hgfedcbab +a`__^^_`abcdeefedba`_ +^]\ZZ[\]]]\]]\ZXWVVVUUUTTSSTTUVWVU$VVWXXYYYZ[]Z][_`bhhloqsttsplgb_\[ZYXWVVUTSSSTUVWWXZ[[\\]]]\[ZYXWWV6WWXYYZYYYXWVVUUTTTUWZ\^___``ab2233344hgec`^\ZXVTQOOOPPQ>?@@@AAA@@B@?>>AAABCD'EDC@><;;<=?@BCDDEEEGIJLMLKKKJJIHIJKKKIHG HHIIJKLLMLLKJKLMMNMMMLLKLLMMNOOOPPPQPONMLKLKKJIIHHGHIHGD@;86566778889L8899;;<<<;7`O?79CQ^j:?BEHIIIHGGFFGHHIIIHHHIIJKKJJIIIHHHGGGHIIJJKKKLLMMNNNMLKJ IGEB@?>??@AABC +DDEEFGHIKLM LKJJIIHHHGGHIJKKJIGFFFGHHFC@=;;=?ACEGIKMNONNMNNNMLKJIH^IJJKKLMNPQRSTTROKFA=:9?>>=<;<;: ;;<<==>>???@AAABCEEFFEFFFGGHIJIIIJKJJJIIJJLMOPOMKHFDCBBC2~|yxvutsqoljknruvwy{~BBCDEFHHIIHZGGFEEEDDDCDDEEFGGHIIJJIIHIJLNQTX[]_`aa`__``_^\ZYXWUTSRQQPPOOORRQQJDr_M?;;@IVgyDJNOOPQRSSTTSTUVWWXXYXXVUTSRQONLJIHGFEDDDC9BBAA@=:5b^`f69<>?ABDFGHIJJLNPRSSQMIDA?>==<<<=>>>?@@ABCEFHIHGFEDCBA?<:86544456776554454321/.--/27iYNKQ`wHSY]\[YUQMKJKLNPRTUTSPMJHGGIKMOOMJGC~zy|@ABBAACEFHIJKMQW^bdcba``_^\YWUTSRPOOOPQQPNLJIIIJKLKJJKKL MNPQQQOMLLMONMLKKLLLMORVY\\[WSPMKJIHG HIJJJIIIHHGFEDEGIJJIHGHJMOQQQOLJGFDDCCCDEFGHIIHGEDCCDDEEDB~}}{}yqljmrwyyvsrstuvzEJNONLvjb_`cglrw|}}}FKORPLG}wl_TPVbmtutsrqmifeefgHhhjnprtuwy{{xri`XTV]fmtyCFHFC>tpopruyDGGEzqjc_\^ahowCEGHGFD|yvtsstutssstuvutqnlkjiigfdcbHcccbba_^][YWVVWXZZ[\^beghihgda^\[ZZXVSRONNOQSUWVUSQONMMPTX\]\ZYXXVTQMIFDC$BAA@@@?=<;:;<<<;9753d258:;;;:;=@DHKMNOOONLKJJLPSVXXXWXXY[\^_a12323 +2223579;=>?>=<;:9876543c`][ZZZ[\]_`acdedcbbbaa``_`aabbcccbbabdfiloqst:;:rpmkheca`_^]\[ZY XWVVWXZ[]^_`$_][YXWXYZ\]\[ZYYZ[\^`bd34667665433445>44geb`___``_^\ZWTRPPPQSTVWY[]_acdeedb```bcdeefghjjjiggfdb_]\\\]^`abcf4555ihhhgfc`]ZY'()*,/1.--,,+**)((()*+,-..-./..-,+*)*++,-../0/.-,+**))('&'(()))*++,-./00///...--,,--,--../.-,--..//001122211100/..- ,++***++,,+*)((' &&&%%&&''(()*+,,+++*+*,,.113579:::852/-,+**)(' (()))*++,-*,+*))(''&&'(()**++**))((''&&'()*+,,+,--. 2110.-,+*)(&$ %%%$$%%&'(*+-.//02235554454320.+)'''())***++,---,,++*)()('()*++,,./010/.-,*)*+*)*)***)))*+***)))(('&'(())('&%%$%$$$###" +#""! "$&#"! !#%&&$"! !#%(&%&'%$"!  !#$%$"  !"#""!   #&(&$!   "$&&%$##""!!!"#$$%$#"! !#%&''('&$"!!!"! !"$&'''&&&')**(&%$$%'&%%$##"#""!"""##$%')*+**)(''&%$# $%%%$##""!  !"#%''&$"##$%$$#""! ""#$%&&&%%%$$#" !""#$%%&&%%%$%&'A&&%%%&&('&$#"""##$$###$%())((''&%%%&'())('&%&&'$&&&%$#!!"#"""$&),-..,*'%%&( !#$##"!""#$%&'&%$#! !"#$%&"! $!#%(+-..,+*)*+,,---+*))((('&&')*,./0    !"#" !!"#$%%$#"!""#$#"!"#"##$$%&'&%$$#"!"""###"!-# '-4!"#"!!!""#$%$#$%&&&%%$##"###"!  !!"##$%&'((('&&%%%$%$#"!!!""###!!""#$%&&'''&&%&%$%&&'(O'%" "#$%%&&&'()**)(&&%%$#"!!"$&)+,-,*&" !!"##$%%&'(()*+* +,-./.,*)'&%$ #FEEDCCBCCEGGGEB@><;::;;;:9:;=>>?@@?@ !!""#$%&&%$$#""!""###$##"""#%')+-/01232 1100/--,,+--,,'#9/%!&-6?$&((())*+,---./01122110/.-,+*))(''&&%%$$#""!! /,,/ !"#$%&'()('$!! !! *$).0222/+('+06:;9730.-,,-.///.,*(8)***)(&$#D"%)-/.,)'%%')**)(''&%$#""$')(#.$ +:%,010.*'%9&')*+,,+)(&$$$%&((('%$"@??A"##$$$IJ&&'((()*,04676433210/.,++**+,--,+)(''()))('''('(()*+,,+)()*,-,+*)()*-/1220.+)'&&%&&'&''((('&&''&&&'&'(()('&%%&')*+*)(&%$#"#$%&'&$#$%%$#DCBBEEDCBB@;867:=??=;999:;>C%(+,,*OG?8423469!%(++(%FCBA=7.'$(/7<=<<;:86434567789:;<=>@AA?;5/*').49<@C$'('%"=:99:<>B7#%&%GB=95200259>C$&'''&%HDA?<;:;<==<;:::;<=>>=<:87766654H5666554421/-,,-/1210124678764200///.-,*(('(*,-..-,*)(()+.255543211/.+)&%#"!!!  . "# "! "$%%%$%%&')*.-,-../01123210100123568:<==>>> ;98643100/.-..-, -.///000/.-+*)))*+,,,+***++,-/01.-,* ++,,,+)(&%%&'(()*++,-..-,*)(*+-...//011221110.,+*+ +***++,,,./1/-+)('ƀŀЀɀӁˀ @N.!ׅ +%օ҄Ԅ(!чՅل ڎ&ĄDŽĆ0΄#ۄ9¼߀N]$*? Vƥ +"H¾@ 5 ]0u󅑜 13ńc%]\[YXVTSRSTVX[^begi4geca`_^^_]\ZYXXYYZZZ[]^``abbccdddefgedba_^]\[ \\\]^_acefgh45444ih +gfedcccdddc7bbba`__^]][ZXWWVVVUTRPONOOPQQRSUVXZ\]_acdefedcbbbabaa__^`ace34343feeeddcdefedddcddefg44555jihggfffggh +gfedb`^^__` +aaa_][YYYZ[ +\\]^^__`aa`bdc`_\ZX [_cfillkigdb` _^]\ZYXWVVUUTSRSTU +VWXXYYZZ[[\]^^_^]\[Z[\[ZYXXXYZ\^`bdfgiklnnooopponmn789::;<===>>==<<;::;<=>= >?AABCB?>=>@A @@@ABBCCBA?>=>?@BBCDDEEFGHHIIJJIIIHHHIHHGFDCBA@@AABCEFHIJKJKLLMOPQQQPPOONMMNONNMMMLLLMNONNMLLLMMNNNMMKJHGIFFFGHIIJJJHFDA?=<;;;<=>??@@@?><:99:<=<7_L<2/28@HOU]g7;>@CEGHIIHHGGFFEEFGHIJKLLMNO NMMLLLKKJIHHHG FEDCBA@AACDEFEEDDCCCDEEFHIJLMN8MLJIFC?;75hg458;>ACDEFFGGGHHIJKLMMLLLKJHFDCDEFGHIJKLMNPQR:QQRRQQPPOMKIHHIKMNOPPQRSSSRRPOMLKJHGEDDEFHKNRVY[\\]]\YVRNLK +JHFC@><:987899987668:<>?@@@??>? >>=<<;;::; +:8765667778 pppqsvxyz|~@BCEFFGHHIIHGFEEEFFGHIJJJIIHHFJEEDBCDEFHIKLLKJHGEDCCDDD}}ABCDDEEFFGIJKLMOPQQQPONNOOONMLKKKLNOPQR +STVWYZ\]^_` +_^]\ZXWUTSRQP#OOONMMMJIFDzvppu}HJKLNPQQRQQPPOOPQPONLKKJJIHHGGFEEDCBAA@?>>>=;9kaYSQSV[_b22246:>BFKPUZ`dfeb]XTRPNMNNONLIFCCFJORRQMHC?>>@A@@?<830//011223556542110//.--YZ^15:?EKNONMLJGFHNV^cdb_\[YXWWXZ]`a_\WSPNMNOOOMLJHGHJOUZ[YTOLLNQSTSOLJHHGFDCCFKQTSMC9c]al@KV_bb^ZVESQOMLKKKLMNOONMKIHHIKMNMLHDA|xwwyzzz{|ADFHIKLNQUZ_bdcbbaaa`^\YWUUUTRQ !"#$%%%&&&%$##$%&'()((('&&%%$###"DCCCD##$$%&&'&%#" ###EC@?>>? ! +"#$%&&'()*+ ,+*)('''(()*+,-../01 23332210/.-,+,+***)(&%GCA=>@CGI%&''))*+,-..-,**))(('&&%$$#"!! &0*%"!#&),. "$'*-02442/,)'&%$#!!#%&%# !"$#'*+**)(&&&).3676421/.---/13542.+)'''())('&&%&(,0341-*(')+--,*'&%$$$##"#&)*)%,)+1$+0320-+(''&&%7&'((('&%$$$&'(('%#!?>?@ABBBCDG%'()**+,-/2467654333220/.-A,++,,,+)(''()*++*(&$##$%&(*+,,-,+)'%%')*+++,,-..-,++,-.//.-+*)'&&%&&&''()(('&&%&%%&&&%$#""$&')***)(''&%%%$$%$#$##"!"""!BBB@>;96557:<>?@ABBBA@@BF%(*,-,*(KJJ&'&$EA?? "#%%%$#!AACDEECA@>>=<<=<:86420.,,-048@ACDDB@?=;96421258;>>=<=?ACCCDDC@<8533579>=;:9:98889998765432101133310.-,/.0110.,++-/1220.,*(&$$$&),0478852001110.,+*)('&%-#"""#$$$#""#$$"-((,!"""!  !!!  "$&'(*/...-. +/001222333210 +11001112221223456789:::998764321100//..-,#++,,.0233321123331/-+*))**+++**++,-.,&-,,+***,-/00/-+)'%$##$%%'(*,-.-+)''(+.0/-,+*+,--..//.+)Ȁ׀Հǀ܁ЁӁр PKˆ&RЄτڅل>Ԇ&kÿք׀ހ;ۄx=+ G$1ſ +CA!ÿXO&탎I¹ Z¾QAecb`^[XVTSSTUUVWY[]`ch6887654333edcb`^\[Z[[\\]^_`abbbcdeghhhgggfed cccbbaa`__^]^_`abdeffggffeeedccbbccegijkjjiigfeddcbba`6_^]\\[[ZYXWVTRQPOOPPQRTUVVVWWXYZ[[ZXWUTTTUWXZ[]_bdfg44543ffeedcba``abcdedcbbb1223455665543x4456677mlkjjiiihhgfffgiklmmljhgfghijiiihhggfeedcbbaaa``___a_`a_a]_]\[[ZYZ[]^__``_^]\]^___^\[ZZYYYXWVUTTSSSTUVWXYYXWWVUTRQRQRSSRQQPOPQQRQQQRSTUVWWVUTTTUUVWXYZZ[\\]^]\ ]^`bdefggfeddcehl79:<==<9nid`][ZYWWVVVWXXYZZ[\]_`bcba``_^^]\[Z[\]^^___``aabbaaa`aabcb`_][ZYXWWVTSRRRSSTTST SRQPPPOOPPQRSTUUVVWVVVUUTTSRQPPPOPQRSTVWXZ\]^^^]]]\\ZYWVTSTTUWWXWUSQPPONLKLMNOPQPPOOON +OPQRSTTUUVW.VTSSTUWXXWVUTTU+,.///.-,,VUTSRQPQRSTUTTUUV,,-./0010/.-,,,+,,-,WVT%VXYZZXUQMJJLMNLHC@>@DINQRPNLLNPRRPOONO QTVWURPNMLJIIJLMNMLKKLOSY/110.XUS*RPNLLMOQRSTUVWWWVUTSRPNMMNQUY[[YWTPMJHGHIJLKJI$JKLLNOPQRSRSTUX,,WUSRTW-/110/ZURPPQRSRSSRRQPONMLKKLMNPRUX]023321/][YWVWWVTSRQPPPQQRQPPOMLJHHIKLMNNOOPPQQRUUTTUVVUTTSSSRRQQQRRS +RPOOOPQQPON MLKJJLMPQSTVWX0WWWXXY-ZYWVUUUV,-./0//-YVTRPNLKJJKLORTUVX-02321/. \YUROMMNPQRSUVWUSQPPPQ"RRQPNLJHGFFFGIMQVZ]^_0112210//..//0 134433345665410/..///1346765422234443210//02455310.,WTSRTVWXYZ[..-,,+++XWWVUTSSQPNNNOQRTUWZ^ad23322bb112332211`^][YYZ]`14689862_]]]/1357:;;;:98889876554320__`123457:=?@AA@@???@@@??>=<:999:;=@BBCCDDB@?>==<<<>?AB&A@?>>?@AA@?>>?@BCDEEEDDCCBA@@ABCDDDCBBABCDFGIKLML MMNMMLLLMNOPONMLLKLLMNONMLLKLLMLLJHGENFGHIIIJKKLMMNNMMLKJIHFDBA@@ABCCDDDCB@><;;<==;6^QHEGKNMJFDFLS[dm;@DFGGGFDCBBBCDEFGHHIHIIJKLKJ IHGFEDDDEEFGFEFGGFFEDDE7DCBAA@??@@ABBCDEFGHIJKLLKJGEB?<97668:;:888:;<<<;:::;<;:89:;;<-;;:9987765kjigfedcccdfghhhggfgjov>BDEEEDDDEGHIHGFE~{zyxvtrqsuwxz|BCDEFGHJKKKJJKKLMNNNMLJHFDABDGILMNOPQRSRRSSTUVWXZ[\[[ZZZYYXXXYXVTRQPPQRSTUTSRQPPROPMLMLONOPPPOON MLKJJJKKLLKKLKKJJIIH IHHGFEDCBA@@??>=;9mg`VJ?77=HT\a10136?@?|xtsuzBCCysmigecbbdefec_[WTQPRV^gpx~{ulea`acgkr{}xsmidbacglsx ~CDE DCBA~|{.zywuromlotz~zuqonnmkihffeeeddcb`_]\ZWURPOOPQR1TWYZZXUSQONLKKMOQRSSTUUUTRPNNMLKJHGGIKMNMJGEEEDDBAp@@ACEHJIE=k\SRVb9BLTZ\YTNIFDCBA@?>?BEIMPSUVUSQONOSW[^abddca^^_b2456676543ca`_`acdg579:<==<<;986532ca``__^^]]^_`bcba `___`abcdedccbbbcYddcccba`__^^^_`abaa_]ZXWVUTSRRPONLKKKLOSW[^``_^\]^adgijjiihfd`][YXYZ[]_abbba``abba`^^_ace2 edddfghgfefghhgeb]YUSQPPQRSUWXYZ[]`bdefffecbaabd23edcba``_ ```aaabc2345ig.--,+)(&%%&'(()*,/3..-,*)( )**++,,---../0/.-.//001000//.-,--../.---./01000//..-.-,,+++***)('&$$#$%%&&'''(()***)((' +()*+,./012//..///./.../000/.---1110122332210/...///0/.-#.-..-.,-,+++***+---...--,++,---,+++,++*)())*)))((('&%%$%&&''&%$#$$%%&&&%&&'''('&&&''())*+,+* +,-/0122100/./1/..--,++*+,,-./0/..-,+, +++***++***)*+,--.//0//.-,+**))(''& +'(()))((''&'())**+* ))(''&&&%%%&''(()*+,-,,+*)(('()*+*)(('''&%%$$%%%&%$%$###$$%%&%$#"##$%%$$#"##%$$#"#$$%&&%%$$$#I$%&'&%$" !""! "$#"! !"$%$##"""! !#%&&%#"!  !!! !$'&$#"!""$%$#"! !$&(((&%$"  !"!"""##$&'&%#"#%(%#""#$#""!! !"#$%'*('&%%$%$$#""!!  !!"##$%&&%&&&%$%$#" !! !"#$%&-'('&%%$%&(&&%#"!!! !"#$%&%& )'%#"!!"#$ +%&''((('&%$#"  "%')+++ +#"!!"#$$%%&$$##"! +"#$%'(*,-,,,+*)(()*,*)))+,,  !"###$#"###"#$#"##$%%%&%$#"##$$$#"  !!!""##$$%%$ ##"!  !/ +$ "%'&$" "%(,17!#$$$#"!! !""###" ###$$$%%%$%$%$# """!  !!"##$##"##""!!  !!!""#"  !"#$%%&%$"! !"##$%&'()*+,++*(&#! !!"#$&('&%$$##"#!! !!"##$%')+-.-,)&$" //..-,++**+,./...049"$ #"##%&'(()))('''&LJHFDCBA@>=;;<=>>?AB!!"#$%&'&&&''()(('&%$#"CCC"""#$%&'(()*++*+,-./.---../010100/-,- ../.--,,,--.--,,,**(***++* ))('&''()*)))(((' &&%%$#"! 0.+' #(*%-5:=<840-+*)('&$#!(!# J!#$%&(+--,*+-0233210.-,,,.03552/+'%%&(***)'&%&'()*)('''&%&'((&%#$$%')++*)v()+.0220.,*)'&$" !$'*++*)('&&'()('%$GEDCBAABDF$%'())*+,---.023320///.-+***,-...--,+*)(('''((('&$#""$&(*+,,,+**)(('()*,-/1320-+))*+--..-,*)'&&%$%&()*+*)'&&%$$#$$%%&&&%$%"&')*+++*))('&&%$#"!A@@???@!"###! ? !!""CA?<965579;=>@BCA=:88:=<<<:88:=B#$%IGB=:87765567887530.,*+.28=BFHHGECBBA@<62//1358;@EJLLIEA>;864468<@CFIJJIGE/#$$%%%$##"CBA@@??@AA@?><;9889<@CDC@=:98775433223*210/.-,*)('(()**++***+-/00/.-+*)'''(*,---./.-,,++*)'&&'(**)&$#"! A !#%&&#3*&%(-$),-+($!!"$%%%$"!!!#%')*+,,+*)()*,+***+++,./0010/./012111223343210/ 02333210/.--,,+**)'&%%%&(*-01221/134566554320-+*))*+,-.//.-, -,+)()*+, +**+-.///.//0110.,*('&$###$%%&'(())*,-./.-,,+++..--,,+++,,--.//.ʀ̀ʀҁ̀ >  ̆% +7)ӄҀ0$H½-ׅN.ހr¾3ͻ]r *1ŵ=քՀľſ`D򃐝@La-ihhhfd`][YXWWVVUTSSSUX\`ceeddde34455543fdcbaa`abdef eddcccbba``_^ __```__^^^_`aba```aabcdefghggeddcddeefghhgfeedccbba_][ZYXWVVUTSRRQQP OONNOOPQRTUWXXY[\^`bba`_^_``a``_^__acefffedd2344566765543 4445jkll666m67888776jhgfeeddcbabdfeeeddceeddcbbbaaa`_^_` +_^^^]]]\[[ZYXXWXWWVVVWXXYYZZYYXVTSSSRRSBRRQPPONNOOPQQPOONOOPQRRRSSTUVWXYZ[\]^__``_^][ZZZ[\]_abcdcba_]\ZXVTSTTSSSRQRSSTUUVVWWWXXYZ[\\^_abcdcbba`__^^_`a`_^ ]]\\[ZYXXWWWVUTSRQ +RSTUVWWWVVUTTSRRQRRSSRRRQPONNNOOPQRSUVWXYZYYXWWWVVUUTSRQPQPNLJHG FGHIJKLMNOOPONMLLLMNNNMMMNOQRT:SRSTUWY[[[ZZYWVUTU,.1343210.,URQQRSTW,--YVTRSTVX-./0223322100/.-,USSSTUlVXZ[[ZXUSRRQPOMKJKLNPRTVUTRQPOMHD@BGPY^`^\ZXUQNLKJIHGHIKMNONMKJKNTZ/0/.YXXWWVUSQONNPRSUVWY[..ZXVUSRQOMLMPTX[.-XUQMKIHHIIJJKKJHFEDEGILPSUWXXYXWVVWY-...//..ZWUSRQ"PONNOPRSUUVWWVTQOMLLKKKLLMNNOPRUX[.-,WVTRPONNOQRTUUUTRQONMNOPPQQQPQRQPPPQQPPPQSUVWXXWURPNMLMMNNNOPPQRSUWXXXWWWXXYY--..--,-,J-.//.-YWUSQNKIILPUY./1110/...-ZWUTRPNMLMOPRRQPPPQSUVVVUTRPPPQRSTUUUTSQPNMLK$LMNPRV[a3444332210/..012332110012332100//0/...012345554320/.../110/..-../..-.--YYXWWVVVUSQOMLMPTY^acca_^_`124 +3210^]]]^^_^]\[[\]_a23567765321112458;<<;;: 9875433445679:<=>=*>>?>>=<<<=>>=<97669=@BCDEDB@?=;9778:<>?@@@?>>>???@@@AABBBCCDEDCBAABBCDDDEDCBBBCDEGIJKLLMLMMNNMMLKJKKMOPQPOMKJKLNPQRRQPNMLKJJKLNOMKHFEDDEFGHIIJJLMNOP3QQRRQPONMMMNOOONMKIGEDCCCDEDA<73cdffaZQGCDIR\e7;?BCDEFG FFGGHIIHHGGGHIJIHGFDCBBCCDDCCBAA@@??@ABCDCCCBCCDDEEEDCBA@@?>=<;::<>ADFIKLNOPPPONLJGCA?>?@@@?;98:>BFGHHIJKLMNNNMMNOPQQPNLIGFDCBA?><;;=?ACDEFGIKM NMLIGFGIKMNOPOONLHB<8569=AFIKMOQRTUTRPONMLKIGDB?=;:;<;;:989::98ommmnop89:::999:;<>>???@ACEHJLMMLKKKLLMMMNPQQRQPOONMKIFHIJKKKJJIHGHIJLMLKJ LMNPQSTUUV XYZZYXXWWVUUTTUVWXXYYZZ[\\[ZYWVUUUVWVUTSRSTSRS RQPPOLKJIIHIH2GFEDCBBBAA@?=wtrrr::;<<==>>>==<;:8onnnkhecce3556554/6;BMZhrxwri^UMIHIJKJIHGEC@<8ib\WUX\`dedc10/.[YXYWVTTTUWY[.01221/.-..//0/-+QOPU[bi8=<9kd_^c6<:97543edca`_^]]]^_`a`abcdeddcbaa`_]\ZYXXWVVUUVWYZ\\\[ZXVUTS TTTSRQQRTWYZ[]_bdfhjlnpqplgb\XVVXZ]`bcddcd232_WQNPV[_bce3443ede356776jhfdddefeedcb`^\YVTSSRPOOPQSUWY[]^__`aabbaaa0112334555hfdba__^]]\[ZYZ\^_`aabceghi1110/-+*)(('&&%%&(*,-.--,-.-,-..///./0/.///././010/./001122110//..--,,+*)))('( )*,---,*)))**+***+,-.///..-2223300/.--../0/1000/..--,+,,,-,+*)))((''(()**+++**)'&&%%$%$$##" ##$$$##"""#$$%(&&''(()*++,-...--,+*)))*+,-//0//.--,+*)('('()* ++,-..///./..--,+*+*)('&'(()*)*)()('& +%%%&'(()**+**))(''&%%%&&'(('&%$#$$$##" ##$$$%%%&%%$$#$###$%$%&'(((''&%$#"#$#$%&(&%%%&''%$#$ %&'((('&%$;#"!  !"$%&&&%#"""!$(++*('&$"!  !"""! !$(' &&%#"""#$%&&&'('&&%$$#" "$') (&$"  ! !"$%& +''(''&&&'('%%$$$##""!!!"#$%&&''&%$"! !!!"#%'(%$#"! !"##$$##"!  !!!"##$#$#$##$%&&'''&%$#"!"#$%& %%$%%%&('&%$"! !#%&&&%$$#"!!!#$%%%$$$%&''(''&%#$%%&%$$#"##$$%'*-  "##""!  !$'*-..-+**+*+ **)))*+- !""#"#"!"$%%%$#"!"#$%& %$#""!!"#$%&&%$"! !!"""#$$%&&''(''&' &%#"! !!!/011/,'!"'-3 !"# ""###$$$##"#$###""!  ? !""##""!!"""###""!!  "#$$%&&'&&%$#!!"##$%V&&''&%#"  !!""#%%%#"  "$%&'''&&&%$#!!#%&()***))'%$""! 2122 !"#$&&''&&&''(()*++,,,+**('LJJJIIHGGFEDCCDE##$$%$$$#$#$%%&'()))((('((()*+,--...-./01110//.//.//00010///.//010/0001100/.-./.-,))('('&%$$###"""!;9777 /.//.,*))*5 (18>?=71*%#"##$##"! 0+'#!!"$%%%$!  + !%).#&*,--,,,-./00/-+)'(),/132/,(&%%&(*+*)'$"!"#%'(*++)&$%(-021/,)'%$%'*-01346652.++,./0/-,*)'%#! #&)+,-,+)'%$$$%&&&%%$HGDBAABCD#%&')*+,$-.//.,+)(('''(),./000/.-,,+**)(''&&&%&&'((('&&&'(*,-2./01220.,*))*+,-,,+*))(('''&&&''()**))('&%%$#FEFFH$HF###$$%%%&'()*)('&%$###"!!A@??> !"""!"! @@AA@@A @>;988776554 6;B$&'()+-..-./.,($!;63359<>>=;;<>@BCDCB@=:752101356643111345666779=AEHJJIGD@<8644569=ADFFFEC@<85333468;=@BDFHKN)+.010.,*)))*++)'%$$$GECA?>?@DG%''&%E@<965556554323210/000/-+)('!(())***))(''(*,..-*&$##$%''(''&%$#.%&()))'%%%&''%$"!!! 3/,+-!#$$$#!  !"###$$%%&&'()*+. /.--/0/0112100/..---,,+,,-./0 +/.-,++**++,+++,--..-.013454434467899740-*)))*,-.-.+&"!"%(*+,,+*+0/..--...///..-+*)(''&%&'()*++,00/.- ,+*)))*++,-./00€̀怖ށ܀倅 '_~نن؇U6Ƅ*6؄/hY+5!=i@!R2.-򀆈HGFȿ¾󁋔* +̈́QP½_abddca`___^^\[YWVTSSTUVW YZ]_adfh454ihfedcbaaabdfghgffefffedcbaa`_^^^__`_`(aabbbccdeefffeeddcbbaaa```__``abccddeghjkjjiihhggfedcbbaa`_^\\[ZZYYX.WXXXYYYZZ[[\]^__``aabba`^\[YXVUTTUVWYYZZ[\\]^_^_adfhihgfecba``aacdefgghhghijklmnop89H87mkigdba`__```ac`c```_a^__`abbcdefedca_^^]^_`bdfghiihgfeddcba_^]\\[[[ZZYZZZ[[[\]]^_^]\[YWUTSRQQQRRRSSTTUUVWWX WVVVWXYZ[\\[Z[[\\\ZXVVUUTSPNLJJJKKKLLMNNONNMNNOPQRSTUVWY[\^`accdeeefeede ddcbbbaaa``_$`___^^]]\\\[[\]^___^]\ZYWUSQPONMMMNOP*QQRSTUVXY[\\\[ZYXWWWVVUSRQPONMLLKJIIHHHIJJKLLMNONNNOPQS RQPNMKJJIHHIJK$LMOPQQPPOONLJHFEDDEGIJKLMNOPPQQQPPONMNOOP?QRSTVWWXVTRQRTVXYYXWVTRPPR+.12210/.,+SRQS+.1331-RKFEHNU-/1234454566654321 0/-WTSRRTVY[./*.YVTRRQQQPPPOOOPRVZ]//^[YXWVUUTUVXYZZXVSPMKLLMNNOONNNOPSUXYYXWVUTSRRRSTUWXYZYXVTSQPOMMMOQTXZ-SXVTQOLIGFGIKLLJGEDDEHLPTVVUSTVXYWUTTV,-.//00110/-XTPNLMNQSUVVWXZZZXVSQNMLLLKJIIJLOQRSUY.012210/.---,,+TRQPNMKJJKMOQSRQPPONNMNOOONOPQSX/353/Z[\.//][WROLKKKLLMOCNNOPQTW--.[YVTSRRSUW-.01233220/.,+V+,-...-WTPLIGHKOSX.0221/.-,,XVTRPQPPOOOPO PQRSSSRQPPQRST-SSRQONLLLMORVY[\]^_012211//01344421/-,+,-/000/011210/.--./0123332111223334320//01212!110/--,,+,--...-XVUSRPNMLLLOSY^ac211123433211000/^\\\]^ ][ZYXXY\_c469;;;9743212369=>>=;:9 +:::;;<;:987899989:;<==>>=<;<=>?ABDGGEB>=<9889:<=?@ABAA@@?>>=>>?@BDFHIIHFECDCCB@@??@ABCDDEFGHIJJKKLLKKJKLNONMLKJIJKLMNM NNOQRRRQQPPPQRRSTUVVXXYYXWVUTSRRQP QQPONLKIHGFDA>;:8764aVLGIS^i8;=?ACDEGHIJ KKKLLKJIGFFGGHGGFEEEDEFFGHIJKKKJIGFDCBABA@?@?>>?@ABA@AABCDEEFFGHJKLMMLKIHHGGFEDDDEFFGGFEEDcEFGHIKLMNOPRTUVVTPLHDA>;:;<>ACDEFGHHIJKMNOOMIECBDHLOQRSRRRQQPOMLJIHHHIJKLLKKKLMOPPQQRRRQOMJGDA?>>@ABA@?>=>>==;trppr:;<=>??@ABDEFGHHIIIHIHG HIJLMOPPONMLM LLLMMNOQRRRSRRQQRTVWYYZYXWVVUVVVWXYYZZYXWVUTTSSSTVVWXY XXWWVTSSRSSTUUUVWXYZZZYYXVUTS TTTSRRQQPONM NNMMLKJIHHGGFGHHIJJJIHIGFFDFDDDC DDEFFGHHHGGGF`EDCCBA@?=@BEFGFEED"EEFGILPSUWWXXXYZ\]^_`aaa`_^_`c34567)665433ef3456677789:;<<<;:9753b^\ZYYYZ[\]]^__`aabcdcb`^\ZXUSRQPPPQRSTVXZ[\[IZYXWUTRQPOOPRTWZ\_acddca`_^_`bdghgfc`][ZZ[\]]\\]`dffb^ZY[^`bcdfgggfe23344543eca_^__``abcdb_[WSPOOPPRSUWXYZ[\]^_`aaabceghihgfdca^\YWWWYZ[\]]^^^_,,-..--,++*)('&''((' +()+,-./100/..---./010/.--..///.///001110//...///...-./ 00112221100/./0112334443322211100/..--,,,++*+,--./001000/..--,+*('&'()*+*++,.//001100//.- +./0112234434565554443210/.-,--.,-,-./01223443210.--,--./0123 222110//.-,+*)))()*+,- ,++*('&&%$%%%&&'()*+,+*+*)( '&$#""##$$%%&%$ %&&&''())*+,,-.-./...--,+*)**+++***))('&&%$%&'(()*++,-...--,++* ))(('&%%$$###"!"##$$$##"""#$$%$###$$%&&'''&%$#""!!""#$$%&&'''& %%$$$##"""##$;%%&&&%$###$%&''&%%$"!!""""$$  #' %$###$%&')(&%*$$$#""#$&(**)('&&%%%&()**)(&$"  !""#$%&'(''&%%%$#$%&''&&%$##"!! !"$&()+'&%$"! "##"  "$%%$##$%&%%$$%(&$"""#%&'''((()('&%#"!  !"#$ %&#""!  !"!"!""##"""!"##$&())*+)&$"! !!"""###"?#$&'&$#""#$%&$'%#! "#%%%$#"# "###"""##$$%$##$$%%&&&%%$$##""!"#%'()*#"!  #&*,- ()*)*,.  !"##"  + !"! !"##$$##"!!! !!""# """#""###$$%&'&'''&&''()('&'(&%$#"! !!! .'"!&-3 !"##$ %%%&&&%$#"""#"! !"##$$%$$#"!    !!! !" ###$$$#""!!  !"! !!"#$$%+&'()))(%"  !!"""#$$%&%$!!$&()('&&$#"!  !"#$%%&&''&&&%$" 63224 !"#$%%$$%&')+,+,+*))())*++,---,+*+,-.-,-...///0 11100/.---,,-../010/0121100/ 001000/..-,+-,,,++*)(((''&&&%%%&&'(())((('&&$%$%%$$$%%%&&&'&%%$#""!! ;73/,++ )'$$$&',!)168851.,)'&$###"!60*%!!$($#" +!!  )"%!$&()**+,...-,*))*+-/00.,*('('H)*+,-.00/,)(*-034430,(%$%)-02320.,*)))+-..,+)(&%#! !#%'(()*+,-,*('&'())('&$EBAAAB!#$&')*+,-,,+*)*+,./00100/.-,+*)('&%&&'(())*('&&')+,,,+++,-...--,+*((()*)()(''&%$#EDCDEFGGGFF"##$$%&%$#"!A?>> !#$EDCCCDDDCBBAAA@>94.+*,07@%)++)''')+,- +)&$"A<9778:87554579<==<:8654567888778[9998789;>@ACCA>;8779;<==<<;<>@@?=:7666789;>BFHHFEDI).366531//0257751+'$$%&%#A<;?#(-00-(#?:76E55445666531/.--.//00/.,*)('''&%#""###""#%(*++)('&&%$#""#$%&&%#" !"$%&&&%##$%&'&%#"!  !""!  !" ##$%&'()*+*)**,..-+***+,-../.-../00122233343210/.-,+*)))*+,-./0//.-,+*)''&&'()+,-./0/.---./123320/-,+*)*,.//-+)())*+,--..---/-,,+ ,,-.011/,)'%$%'()*+,-,,,-.01121/-,*)))*+񀈁Ҁ߁݀΀ 4*ք* 3,# %օх)$ DÿNJFmC-S:o~  G 7 žE뀉  'ÿ#¿,Dÿ܅[\]^_ `abcddca_\ZYZYYXWWXZ\^`abcdedcde dddefgggfeedcba` aaa`_^]\\[\]^_`#__``aabbaaa``__^^]]]\]]^_`bccddeeffg ffedcbbbaa``_`_^^]]\\\]^^^_`aceghMgfghijjigfddcccdddcba`_^^][ZYXWVTSSSTTUUTTSRQPOOPRTVXYZZ[\\^_`abbaaabcdeedcba`abcddeefggghhggedba2dcdececccabbdeghijihhhgfeedca`^]]^^_``abccdcba`^]]\]\]\[[ZZ[[\]]^_``_^][ZYXVUT UUVWXXXWWVW XXXWVVUUUVWXWVWVVUSRPOPQQRSTUUVVWXYZ[]^`abcddefghi4 +3gfeddcbaa`_^^]]\\[ZYYXXWWVUUUTTSRRQPONNMNNOPQRRSTUUVWXWWVTSRPOONMLKJJIHGFGHIJKLMOPRRRPNLKJIIIHHGGHHI#HGGGHJKKLKKJJIHGECBAABCEGIKMOPQPONMLKKLMNOPQRSTUUWXYZ\].,/000/..-YYY,--.0110/.-,VTRQRTW-.-YTPNMNRW.012112232100.-WUTUWZ/1221/[WUSRQPO5NMJHGHLQW[]\XSNJHGHIKNPRTUTRNKIIJLOQRSSSTTSQOMLLMORTUVWWWXXYXW=XYYYWURPNLKKLMPRSTUUVWX,--ZYWSOKIGGGHHGGEDCCDEHJMOPRSTUVVWXZ-.-ZXVTQMJIJLPSUUTSRPNLKJKLMNOPPOOOQTWZ../.-,,+++UTROMLKJJJKLMNOPQRSRQPPQRRSSRRPONNNMcNNNMLLLMOQUZ\][YXZ.011/ZTMHEFINRTVXYXXVUTSTU+,--WSOKIIKMPRTW-./011100/.-,++,,,+UTRQQRRRSSTVXY,YXWVUTUUUTRQPOPQQQONMNNPQPPONMNNOQSTUVWY[.010 1123455431/.,-../012110/./01244544321012356777653222110///000/..-,,XVVU VWYZ[]_123210/.)[[\\^/000`^\[[[\^_a23579<>??><9876678:<>@A@?>?@ACCBA?=;9876677889;<>??>=<<= <=>?@ABDFHGECBA?=;:99:>= +>@ABDEFFFEDCCBABBBA@ AABCCDEEFGHIIJKLMLLKKJIJJKKLLMMMLLKKJKKLMNOPQQRRQQQPPQQRSSTTSRRQGPPPQRRSSTUVUTSQOMLKJJKLMOPQQPNMJHEB@><;7cWQQYc69:<=>@BDFIJLLLMMLLLKKJIHGFEFEEEDCDDEFGHGFEDCCBBBCCDEGHIHGGGFEEDCD CCCDDDEEDDDEEFGHJKMNNMJGEDCCCDCD7FGIJKLNOQRSTUTRMGA<99;=@CEGGHHIJLNPPOLF@;779??@ABCBBBA@???@BDEFGGGFFEEFFHIJJIJKLMMNNOPQRRQONLSNOONMMNORTWY\^`abcdcb`^]\[\\]^___^^^_`aabbaa``_`abbbaa``^][ZYYYXWVUTSRRSSTTTSRQQPPPOPPQQPOPQRSSTSRRRQQPONNMMLKJIGFEDDCBBA@@?@A@@AAA@ABBCAABBBCCCDDDCBBA@?>>==wrjaWOIGJQ[f8;=>>=<:8753b^ZXXYZ\/02355655543359@IRY[ZVROLJIGFEDC}zwsniebaabbb`_^][YWUTTUHVVUSPNNNOQQRSTUX[/1356665554420^\[[ZZZ]bh8>EJNOPRW\_^\YXXXZ[\]\[YXVUSQOMLMNOONBOPQPONMNPSUVVURNKHHIMQUY[[XTRQRTUVUSPMKIHGFEDCBCFHJIHFGKRY^`]WROMKJKKLJHEBCDFHLQUXZ[[[ZXWUTSSRQ SUWZ]_``_]ZXVTSQPNLKIHFEFGIKNQSSRSRPNLLLMNOONMNNOQQRPOMOPONLKIIJJKKKIHGGFEEDCBBCDEFEFFGHIIHGFEDCDD=|yvrlf`\^fs@FJMNNMMLMMLKHFDDDEFFEC@{vrooqrtsrpom nnnmmlllkjhgfTgfc`]ZXXY[]`bdefgilquwwsmgdekrx|{voga^]_bgknoonkjklnopprx~FGHIKNQTTSPMLNRVWVRMJHGHIHFEDEFHJHExqmkjjihg feddcbbaa`_^]\YTOJFCCBCDEFGFFEEFHKORTTTSQOLJHGGGFEEDCBABDGIJKJJKLKJIHHIKLLKIHGHIJMPTVWXXWWWXXYZZZ[[\]_`acde345 43db```aceg45443eca_]\\]^_`aabccddcba`_``aa`_][YXWVUTSRQPOPQRRSUVWXXWVTSQPOML8NQTX\_bdddb`^][ZZZ[\]^_`aaabccba_]]]\[ZZ[]_aa`_^]\[[]_adedd223Ledb`^]\[Z[]`cegfc_[WSQONNOQRSSTTUVWYZ\]^__^^]]]^_acdfhiklmmkhea^\[[[\\\[[ZZZ*+***+,-.//.-+)(''( ''&&'(*+,--.-..//000/0/.//./0/..-,,++***++,,-../.-.//01112100/..--,--../.-,- ./123211000112 100///..---,+++**)('('&%&(*+,,,+++,-./01210/./0112210/..--/./0/0///./002345 44433210/.-,- +.//00/.-,,+*+++*+ **)))***++,-. -,+*)('&&%&'()())*)()***))()(''&%&''() ()))**+,,--./00/.- ,,,++***)))('&%&&''())*+,+ *))('&&%%$$#"! !"#$$$#"!! !!!" +##""!! !!"!  !"$%%&%%$$$###"""!"#$$$%&&&'(()%%%$#""#$&&$! !$'$$#$%''&%$$$#)"""! !%),,+'$! !"#%%%#! "$%%& %$#"!!"#%&'''&'('''&%%&&&''&%#"!  !#$% &&(('%"!  "#$%%&''('&%$"  #%&&%$#"!  !"###"!!"#$&$#"!  !!" !!""##$$$##"!"!"#%'*,,*(())%!!$&'('&%$$$%&$!!"#%&%$##"#$$%&&&%$ ##$$%%$$#""!"##$##"###""!"#$%&') +$ +%%&&''()*(((())++*))*+,-. !!    !   + !!"#"!"#""!! !!""##$%%&%&% &&'''((''&%$#"%#$%%&&%$#! .($%)/ !"$%%&%$$##"#"! !!""###"""!!  !"#$%$$###""!"#"#$%%%$"  !"!6"##$%&'())***)'$  !!!""#$%&&%#!#$&'() ('&%%$%&&'(())('&&% $"  !""###""!""##$%&'())*+*0++*))())*+,,+**+,-/0234567898754221122211122345567789:::9876543222110/.-,,--..--,+ ,-.01110/...-...---,,++*)((''&&&%$###"#E"#D#"###$##FFFGGHH$%1$$#"!! <83-'" '.(%#! !"#!',//-*(&%$##"""CA@><:740-+) ((''&%#"!! ! C !$#$$%&'*.2$),--.146520/.//012210/.-,+*)(''()*++*)*=))*+-.//.,*(&&&(+-010-*(')+,--,*(&%%%$$#""#%'('&$%',26751-*('&R'(((&$"BBC""#%'+.012210/.-,++*)((()+-/023321/.-,++*(''&&%$$%&(*,--,++,-,+*((()*+++*+*)('''(()**)))**)('''())*)(('&%%$$#FECCB!"f!!"""###$$###$$%%&&%%$$#"DD""DCBCDDEFFGFFEDDEFGHGEDBAA?=:61//39 $')))('''(('&%###$%$$"!>;866789998777676655567887542112345667B9<>@@>:6448=BDDB=72//1368:::97779;<==>ACFI%%&&')+,,,*(')+./.+(%$$$%$$#"#$&'&$C=966543210/-)&$#"##$%%%$%')+*)(&%$#"! ! !"$%& +%$##$%%$#"!  !"#$$%%&&&''())**++.-,++,-./0/-,++,-.//01122322100/./0//.-,+*)*+,-.///.-,*)(('&%%&(*,.020/.-,+$,,--..//000/.--,,,+++,-.--,+**)*+,-./0//.-,+**)*+,.///.,*(&%$$%%&'+()*+,,---,,+***+,-.//0123332/-+*)**++**)))*̀끎܀̀ D ݅Oԅ? & ЄK φK,ڄ¿_ /9CŅDŽňi &x4 LՄR")*0»Ȅ*2߄ +Q[Z [[\^_aceeedba` _^\YVUTUWY[]`bcdca_]\[[Z[[\^_abdedcbccdddccba`_]\[ZYYYZ[\]^_`_`,__^]\\[ZYYYZ[]^___``abcdeedddccba`_^^]]\]]^_`_^]\[ZYX(YYXWVUTUWXYYYXWVVWWYZ\]_bdfggffedca``_^]\$[ZYXXXYYZZ\^_```___`bdeffeca`abdfhiij +kllkifca_^]^_`abcd ca``b`ddehgjighijklkjigedb`^]\[[\^_abcbb`_^ ]\[ZYYYZZ[[\]^^^__``aa`_][ZXWXXXWWVUTSRQQQRRRSTSTTUVWXYZZ[[[\\\[ZYXVVUUVWXYXWXYZ[\]]^__`abccdcccbbab"aa``___^^]]\\[[[\\]]^^]]]\\[ZYWVVUT +SSRRRQQPOON,OONNNOPQSTUUVVVUUUVVUTSRRQQPPONMLKJIHHGGFFEEDEFHIJKKLKJIGEDDCCCDEEFGGGHIJHGFEEDEFDB?=<<=>@BDFHJKLMNPQRSTUVXZ\/ 00111221100//./.-,,,-. +-ZXXX--.//0o112233210//0012220-WUTW-/00/-YWTQMIFEEGJMOPPONMKIIJMSY^0^YTNJGHLQVXWTPKFB@@BEIMRVXXWVUTTRPONPRUXYXVUSRRRSUWY-..-..--ZZYXWUSPNLLLMMNNOQRUWZ.02344320-VQLIGGGHHGECBAACEGJLNOPPRTWZ\/00110.ZXVTROMLKJJKLNPRRQPOOQSWYZXTPLHFFGILNOONMLMOQSTUTSRRRTV-./00/.,,+*UUTTSRPOMLLKKJKLMOQSUUTRPOQSUVVTQOMLLMMLKLLLKJJKKLMNPSVXZ[[\/01110.VNHEEGJMPSUVWVVWWWVTROMLLMNOOPPPQRSUVX,-./123310.,+++,.///.-XUTRRSSTUUTSRPNNOQSVWXXXWVTSRQPOPPONNMNOPQRTWY[./0/001122232211000//.---[[\./0/00112334454432101234554310.-WTRSU,.123443321011234678766594321/.--XWVVWYZ\_01122211a``_``a136:>@@><:86532247:>ACDDDCHDCCCBBA?>;98788876655679:<=>?@ABBBA@?=<;;<=?@BDEDCABA>==>?>>=<;<<<==<<<=>===>?@BCDDDCBBA@@??@@ABBBCCDEEFFGHIIJJKLMNOONMLKKJJKKLLLKKJIHGFFEFGIKLMNNNOPPQR STUUTRPNLK6LNOQQPOMKIGFFGHJLNOPPOMLKIFB>;96e_[\ckq:;<<<==>?ACEGHIJKKKJJIHHHGGFEEFFFGHHGGFFEFG +HIIHGFEDCCDEFEDDCBBA@@@AB%CDEFGGFEDDCCDEFHJLLLJGD@>>===<<<=?@BCD]CCBBBCDFHJMPRTTTROJD>:86568;?BEHJKMOQTUVSOIC=987889:=<<<=>??@ABCCDEFGHHIIIJ>KKLNOPQRRTUWWVUUTSSRQPPOONNNMLKJJKLMMNPQRSUVXZ\^_``acefgeda_]]\[ \\]]\\[ZXWXYZZZYWVVUUTTSRQQPPONMLLKKJJKJIJLMMNOPRSTSRQOMLKKKLKIHGFEDCBA~}|{zzyyyzz{{||}|}||}~{~~A~}}|||{{{|||{zyvtsrrstuutoic\UNJLR[cjp9:9pkea_^_`bb1234565320001258:<=>BFLOQPMKIHGGHHG~}|zxusplieb`^]\[[ZXTOKGWFEGJMPRRQOMKJIIJKMOPPNMMQUY[[ZVRNIFC@?@BDFGHKPXcq@GMRW]cggeb_^]\[ZYYZ[\]][XTQNLKLNQRQOLJKLLMNOQPNLJIIIKMPSVXXVROORW[][VPKHGGGHZGFFFEDBABELSZ]]YTPLIGFFGHIJKKJHEDEGJNSX[]]\[ZYXVTSRRSUVWY[^`ccb`]ZWUSSRRQPNMKJIHHHIKMOQRRRQPNMLLMMMLJJKMPRSSSRPNMLLMNMNNOPQQONLKJJHFDABBCDDCCBC BCCDEGHHGGFFFGeFDBBCFKOQRQQPLGCDDGIJJHFD}ywzHIJIGD|yxxwtqomnqyBINQQOMKIHGFDCBCCEFFGFDBA?}{ywvtsqpomkiijmoppponAooonlie`][[\]_chlnomkjkkjhfdcbbaaabdgjlnnmjfa^\]afloqpomljhgiowFEEEFGIKLLKJHGFFGHJKKJGC~zz}~zvsqpponmljhfc_\ZYYZ[]^^]ZUOIDBBCFHJ,IIHGFGHJKLNNMKIHHIJJIGECCDDCB@?@AABBCDFHHHGFDEHLOQQOMKJJKLNOPPPON0OPQRTUWYZ[\]^_abcde3332233445666554gecb`_^^_`bdef eedccbbbaa`_`aacdegggfecba```_^]^]\ZYXXYZ\]]^]]\ZYWVUTTUTRQPOONNOPQSUXZ\^_``_`__^^___`acdefeb`][ZYZZ[\]\[ZYZ\^_abde2333eddde"c`^[YXXYZ\]_acdeec_[XUSRQPOOOPRUWYZ"[[\\]^_``aaabcegijigeb`^^^__^^]]\\*)*+,-,+*)'&%%%&')*,---,+*)**+,,-./0/.//001100/.-,+**))((()*+,,-./..--,+,-.//0/..--,,,+++,--./0/..-,,++*)))())(('()( )))**+,-./.-,+!**)))**+,-.00110011233432100011223453210/.-. -,,.-//021321222345565533210.-,,+,,-./0//.-,,+,,,++*)*+,+,-,+*))(''&&%&&''(())((('''()**+,-,,+*))()*+,+,---.-,-.---,,,-,+,+ +**))(('''&'&%&')*++,+*)( '&&%%$$##""!!  ! +  !"!  !"""!  !""##"#"#$$%$$%%&&'&%%&_&$$%'&%#! !"""!! "%),,)%"!%')(&# "%'((('&&&%$##$&(**)(('&%%%&'(&(''&%$#"! !!!""##$&''%"  !"#$%&() ('&%#" , !"#$##""#%'))(&$"  "#$$#"!!"##$$##""#$% +###""!!  !"###"!!"#$$$#"  ! )!!"#$%'((())&" "$&'())(''&&%$#! !"""##$$%&''$#"""###$$##"! !#$%$#"###""#"!"#$%'('''$#"#%)%%$%%&')*- ! (  !"#$##$###"!""##""!  !"###$%%&'''&&&''(('&%$#"(#$%&&&%$"!  !"#$$$#"! .+)*.48 !"#$%$%$$$#"###"""!"#""! !"#"""! !!"#$$$##"!! !!"#$$$#!"!"""!!  !"#$%'(***)'$! !#$%&()**(%!+!#%&''%" !"#$&')**)(&%$$$%%%$##" !!!  !!"##$$%%&&&'()**+,,--.//..-,+**)(''&&''()*+,-./012345667897654332212 34445544323444332110/..--,+*))**)**+,,,+,,-.///.-,+* )((''&%%%$ #FEDDDCCCBBBCDDDCCCBBA CBDDD#EGFE DDCBBA@><;9876953/*% #(,/1/,)&%%%&'("'*++)'%$##ECA@?>==<:8641/,*('&%$$#"! G!##"!!$*09!&*.158::75310/.../012221/-*(''(*,-,+)'&#''()+,,-,,*)('''()*,.//,*''*-020-)%#$%E$#"""$(-1320-+)'%%%&'''(('&$FDDE##$&(,/1110//.-,+**++,--./0233321/.-,+*)((''&')*+*)(' (('&&&'(*++*)(''&&'''((('(()**))('&%HF#$$%&%%%$$#"#$#""#%'*,U+(%#D##%'(('&%GC@??BFHJ&&''&$EB@@@?<97557==<;;::987554689; :::;;<<<:8643847:=?@?=<<;;:876543345789:;:9742/./159<>>=<:86458=CH%%$$#"!$%&&%$#"""#$&'((&#@<=?BEFFFEC@>;9877766531/.--./0010/,)%"!!"$%'''&!%%%$$$%&'())(&%$$%&&%$#""##"!  !"#$$#"! !!#%'''%#"!!!"#$$$#""!!! !"#$%&''((())*++,/..-,-./01210/...-../02344332100//01210/.../012332210/.-,,,-,+*)('&''(*+,- +,,,---.---,-./0/-,,+,-,,++***++,-.//00+/.../0110/-,*)))**,-.011210.,*(''&%%$%&')**+, +-./0110/-,+*ʀ́΀쁂ڀЀ 7݄(фхJ  ̄ӈ +Ԅބ"Y+[҄Ӏ"* -3 B +ƅ .  rŽ2ſD6 >?Є [ZYWV WXYZ[\]^_`"abdddca_^]]\\[[[\\]\[ZYXXXYZZ[\]^^_`abccdefgggfgghiiihfecb`___^^]]\[\]^$]\\[[ZYXXYZ[\\\]]]^^_`abcdddcba`__^]\]]]^^]]\\[[[ZZYYXXXWVUUTUTTSRQQQRSUWYZZ[[[ZZ[XZZYYXXXWWXYZZ[[\^`bdfhijkkkjjiihhgfedefghhhiijllljhfdcbba``___`aaa``_``aabcdehiilkmml7lkjklmnooonmkjhfffeeedcba```aab +a`_^]\\\[[Z[\]]^`aa`^\ZXWVUTSSSTUVVVUUTTSR SSTTUVXYYZZ[Z[[\[[[\\]^^]\\[\\]^^]][ZYZ[[\\[ \]^__``aaba``__^]\[ZYXWWVVWWXYYZZZ[ ZZZYYXWVUTUUTTSSRRQPOONNNMLLLMMNOPPQRQPPOONMLKJIHGFFEEDCA@?>=>?ABDEGGHG%FFGIMPRRQPNNMMLLKLLMLLJHFDBAA@@ABDFHIKJ KLMNOPQRRRQPPOQRUWYZ-.--YXWXYZ-..///..---YWWW,-./01 22233322110/G0/.XTQOOPQSUVWWUSQOLKIIJKMPTUVUSPNKIJMRVYYVRONNPRRQNJFCBABCDEGJMPTWYZZZY--.///-XURONMNPSUWY-./012210/.---,WVTSSRQOONOPQRSUX-0367752.VQMJHGFFFGFFEEDDDEFGHIJKMNPSUY./135777531/[VSQQRSTSRRRQQPNMMNOQSSSRQPONMLKNJJJKKLMNOOPPQRSUW-.//0//.--,++*TSSTTUUTSRQPONMLLMNPQPNKJJKOTXZZYVTQONMMLLLKJJIHIKMORVY[.*--,WURPNMLKJJIIIJJKMPRUWXWVTRPOOOQRTVWXXXWVW,./00/.,VUU+,-../ ..---,,,WUSRQRRRTUWY-YWTRPPOPPQRSUVXYYXWVVVW,--.//..-,-..//02345432100//.,WVUUUVXYZ[\]/01244543463322112344421/ZWUSSUX\0235666543222356778999::99876544321/.YWVWXZ./0010`aa147;>??<:8778 +789;=>??>>=<<;;:99:8766778+77789;<===<<;;::;<=>@ABCBA@@?>?ADDB@><;;<=>?@@@???@@ABCCDDEDDCBA@AB CCCBBCCDDEFGGHIJKKLLLKLK JJIHFEDDEFGGHGGHIJKLMNOOONNMMLKJHGFFEEDEGH,IIJKLLMNOPQRRSSSRQOLID=;:889:<>>=<:88789;=?@@ABBBAA@@@ABCDEFHlFEDDCBBBCCEGILOQSUTSPMJGFEEGILNPQPMHB<74358=AEHJKLMNPQSUVVVTQLHC>;878;=?@BCCA=6.'IK*/6AFKPSTROMK2JJIHHIIJJJHFDBA@~|zwusqomkkllmnoopqrsttuvvwwvtromji?geb_^ahovyvoe[TQPRUZ_fmsy}ztmijmpstuttuuvwy|~HJJIHFEFFGHIHGFFEDCB|zyy|EGHHFxqlgc`]ZYYZ[]^^^\[YXXYYYXVSQOMKJJLNPRSSROMIFDBABCDNCA@?>??>===>?ACEHKLMNMKIGEDCBCCDEFFFGHIKLNPQQQPNLKJJIJJKMNPQRSTVWYZ[\]^__`abbba bbccddef343eb`^]]^^___`abcdcba`_^]]]^`bdfgffeeddcd:ccba_^]]]^`befgfedcba`_][ZXVTSRRSTUVWVUTSSTUX[]`abba`_`begh gecaaabbaa_^]\]\[ZYXXWWWXXZ\^`cdedddefGedcba_^\[[[\^`bdeeca^[YWUSRQQQRSSTTUVX[]_```_^^]]]^`bcdeeddcccba`_^]]\\ ***)(('''(()*++,,,+*)*)))*++,,-,-,-.//0010/0//.-,+ ,+++***++,-,+,,,--,---../..--,-../ ...-,+***)( +'''&&''())*+,+**)( )**+,,-./112 1100//..-./012345543210///..-.-!../012244565544333445566554332112100/..-,+*+, --...-,*))(('('('()*)**+,-.--,---..--,+*)))* )))***++,,,-,,++*))('(())**+*))(('''(''&&&%$%%&&'()((''&&%$$#"""!!!  !!!  !! ! "$'*-..,)'&%$#"!  !"!" ##$$%%%$$#$%%&%%&% $$$%%%&%$$$A&$"!!"#$%&&&%$#"!  !#%'''&$"!"%()(&$""#$&&%#! "$&'('('%$#"#$%&''%$$###"##$%&&#! !!"#$%''%$##$%$$#"!!!"#$%%%$$##"! ! "#$#""!!  !!! #%&&&$#"!!! !  !#$&()'%$"! ! "#$%&&&$#"#$%&'(''&&'$$$$#"! !!""##%&''%$"!!!" #$$%&&'(''&%$$##$$%&''())*)))(&%##$&(&&$$$%&+,,,--    !"! !  !"#$$$%$###"!  !""###$%&'!&$# 0($%',0479:999:!!"""!!!"#$#"!"#$#"""!!! !!""!  ! !""#""!!  !""$%'(*++*(&$"!L"$%''&$!!"##$$&'()))(&$"  ""##$%'((('%#"!"!!  "#$%&''()**+,,-./001000//..-,++*++,-,++,-/13455679:;:98754321000///0/..--..//000///..,,,--. -,+***+,,--.-,-,,,++*)( ))**++*))(()(''&&%HGEEDDCCA@?>=>?@AABBAAA@AACECCA??==>=;:8754210//... + $'*+,++*)('%%$GFFDCA><:98575420/-,*)'&$!!! !""!5!&,4#(-13310/.-,***,/134320-*(&%&')++*)(&&''(*+-$,,+*(&%$%'*-024420-++,-.-,*'%$##$$%%&0%$$$%')+-..-+)(&%$J&'()***)'JGEEFG%'),/13443210/.0/02355420.,*('')*,,,+*)(&%$%'*+,,++***)('&%%&'(('(*+++*)()*) ((('&%$FFFGH$#$%&&''&&%$###$%'(*,---,+*'&(%$GEDDFIL''&IEA=:8779;<==> #&(*+*(&%$$$%($$$%&'''&$#"! @?>=<;:98767789:;<<=>>??@AB@?=;$:975457;?A@=71,))*-037:>BDFEB>9668:<=?ACDEFFHJ&&''&%IHGG#$#$$%&$%%$$##"CA@>=>@CF$%%%$EA=96420/.--../0/.-+*)(('''(*,,,+*(&$"!!"#""###"!!  !"$%&&&%$"!  !!"#$#"!  !""##$%&&'(())**+,- ..//0.-,--...//001000//..--,,-./12343$4445443321112356788765443220/.-,,+++,+*)(''(*+-.//.-,++,./0100/-,,,-,-,++*+,-./.-../010/.-,,,-./01110/.,+*)('( +)+,.///.-,+,,-.-,++*ȀρĀԀꁉ܀ B")ЅO$2 τ ؄ׅڄ ׄӇ+b7W!ӅT!5 :A ,ńGڻ\Ƽ1 <Ŀ􂋖Žƅoڄۀ׀WVUUTS-TUVWXXXYYZ[\]\\]]^_```abdefffeda_]\ZXWUUVWXZ[]^___`aabcdeefgghhiijjkkkjigfedc1b`_^]]]\\[[[ZYXXWWWXYZZ[\]^`aabbbccdefffgfeca`^]]^]\[ZYXYZ[ZYXWWVUTSRSSTUVWXZ\^```_]\[Z[#\]^acfhiiigfeffgghjloq8pnlkkklkjhged,ccbabcdfghijklmmno8:888nommpmmmnmmlkkkjjjiihghihgffedcaa`_^]\\[\[ZYXWVWXZ[\]^]]\\[ZZYYXYYXWVUTSTUVWXYXXWVVUUTTUVWY[\YXWVUTSSRRQQPPPOOOPQRSUUVWXYZ[]^__`_^^^]\[YXWVVUUTTSTTUUVVWXWWVUTSRQP +QRSTTTSQPNMNMLKKJJJIJJKMNOPQQQP OOMLKJJIIHHGF EEDCBCDEGHIIIHG"HHHIJJKMOPOPSX^ceb]XURQONMKIHFEDCBABCDFGHIJKKLMMNOONNMMLLLMNPRTUVVVUVVWWWVTRQPPRSTUUUVW,-...- ,,--.01223;2122344321//...[YVTSTUWXZ\]^__^]\ZXVTRRRSTVVUSOKIGHKOSUVUSRQaPNLKJJIIHHGHIKNRUY\012110//000/.WRMIECCEIMPQSUW-/0110///..-,VTRRQPONMLMMOPQQSV-02442/YTPNMKKIHGFFE"FFFGGGHIKMORUWY-/03566531/ZUQONNOPQPOONNOPQRSTTUTSQNLLLMMMLKJKLNPRTUVX-./00/-,+UTTT*+,+UTTSSRRQHRRSSRRRSTUUUTRPONNNMLKJHHGHHIJKLMOQUXZZYXWUUTTTUUVWWXXWVTQNKHGFGHJMPSTTTS8RRSVYZ[ZYXVUTSSTW-02332100///.--,,-./001110.-WVUTSRRQQRRSTVWXXVSQNMORUY-./00112210/.-,,+++,,--.../00123 +10.--,,XXYZYYYZ[.//..\\\./1233455434 31/..//00/0124566655443334679:986422121110/01-00/000112357:;;:8654321``024678999::;;:987666789:#9876678:=?AA@?><:988899:;=?@ACB?==@C +BBAA@@?>=<;<>?@AABCDCCBBBCCDC"DEEFGGHHIJKLMMMLKIHFEDEEFGHHHIIJJKLMLKHEBA@ACEFGHHHIJKLMMNMNNMLKIGFEF/EFGHJLNOOPPOLF?kWF:69AKU]chkmptw=?AAA@?>?@ACDEEFGHGGFFEEDEDEGIJKLKKJIIHHGGGFFEDCCDDEEEDCA?===?@BBB@><:977665ihh568:<>?ABBBAABCDFHIKLMNNOONNMMLLMNOONKGA<853468;?CGJKJGA;50^149=BFIKMOPRSUWX?Z[\]][WQIB<74222469<==<:73/ZZ/39=ADFIKMOQRSUVVWVUTSRQPONKHEB@??>?@ABDFHKMPSUXZ[\]^]]\[YVSPNMLLLMMNOOPRSTU1VX\`dgijklnqrsssqoligdb`_]\ZYYXWWWXXYYYXWVUTSRQQPO PQQPPONNNOQRSRRQRSSRRRSSTTSRQPPOOOPPOONMLKKJIHGFFEDCBA@~|{zyz{}~~~}}|}~ {zytwtuvwwvusSrrrq877666778:<=>??@@AABBCCCB@>=<;;;::;=?DINTXYZYWUSPNLKJHGECB|xvutsrqqqsuwyywtssstsrpmhc\VPLIGFDB@>=>@CGISJLNPQQQPPQSUWYZ[\\[ZXXVSPLHFDBBBEJQYc7?FLPQRSUWXXVTSSTVXYZYWUROMLLMNOONMLLLNOQQRQQPONMKIHILPTX[^_^\YWUUUVVTROMKKKLqKJIGECA@ABEHJMOPONLJGEHLOQOMHEFILORTWY[]]^]\ZYXXWWWXY[^acedb^[XUSQONNPRSTSROMJHGHJMOPPPOOOPPQPOMMMOQRSRPOPONNNOQQRQgPPNLJGDB~}|||{{|~BAABCEGHJKLMNNNMLJIHGFEEDDEFFGHKJIJKMLJIHFDCBAA~}|zxwxz{}}~???}yuv>DKQRPLGDA@~??ACEHJJIHGFDCB~}}|{zxvtrrstuuutstvz}~{ywvuuvwuqlgdcbcehmtz}|wphca``acdfgjlortvvvwxz|~CDDD|tmihkpw~GD%EDCBAABDFHJJIG}{wrmhdbaaabccba`_`abbcddca^XSNKJKNQRRQOLIGDCB%CCDEEDB@>==>>?@AABCDFHJLMNNOOPPOMKIGEDGJLNNPRSTSRQOMLKKLLLMNOPQRSTUVUTUVWWXXY[]_bfi566543edcba`_^]]]^^_`accdefgggfdb`___acfhjjjihgedcdeeedb`]ZXWVWWXYZ[\]]^^]\[ZXWVWXXYZ\]^__^]\\]_aceghjihecbbcddeefeedcbaaa``_`abcdddcb`_^\\[ZZYXWVWWY\^_`aabccdef333feeffggfdb`^$]]\\[[\]^__]\[ZZZYXVUTUVXY[\]^_^^]]]^_`ac23444eb^[YXW '''&&%%$%%%&'()*)*+,-./.-,+*)((''()*+,+,+,,--./0/.-,-.-,+* +)))***++,,-. +/01100/.../. -,++***)))(() *++,,++**)***))(''(()*+,,./01110/-,*)))**+ +,,./134543235789865 +4310//0///.//011233343433432 33445554432210///.---,,+,++*)(())*+,-...-.-,+*)('''((('''(()*++***)('())* )))((''&&%%%&%&&&'()((())*++,+*))(''&'()(('&% &&''((('&%$#$%$$$###$ ###$$%%&'('&&%$##""!  !!""!"!"#$&'()+/379840-*(&%#"!  !!!" !!!""##$$#"""##$$%$%$$#"##$$%%& (&%###$&'()*+**)(&%$&''&$"  #%&&$##""##"!  "$%')+'$!!"##$%%$#"!"""#%'%#"!!! 1 !"#%&''$"!!""##$$%%$##"""##$%%&&&%#"!"""!   !"#$$%$###$$#"#$ +#""!!"!!  !!"$&()))('&%%$$$%%&%$" !"$$$#$$$%'()))('&%$###%$#"""##$$$#$$%&&&$#! !#%'%%%&'&&''( ))* +++   !!""# "!  !!" ! !"##$ %%%$$#"!  !""##$&'()'$3( &+/25689:<  !"""#$#"! !"#$%$#"""!! !  322!!"""!#$%&'('&%&e$! !"!" !"$%&'(**+,---+(# !#$%&'()))(('&&%$#"  "#$&')*,-.01112 3221/-+('&'()*+,-./0258:;;;<>?AABA@>=;9865432100/0//.-,---.--,+++,--.././.-,+,,++*)*)(' &%%JIHGEDCDDDCCDCDDEEFGFEEDBC@??=?>>??>=<:9876542 ,"&*-/0/.-,*)(('&%$$"C@><;;::999:;;<;:98778"776430-)%! !"#""##" !&-$(+,9...-++*+-.000.-+*((''(()))((()*+,++*)))**)(&%%%'),.02320.,-,,*)'&''&&&%$#""!"#%')+c*)(&$FDDFJ(*-.-*'%FDEG%')+,-.011210/.-,,+++,-.0245541/.--+*))*+---,*(&%%&')*+**)((()))(''()*++*)((()**+++*)(&%$GFEDDEFF#"#$%&&'(''%$#"##$$%&'('&%%$#"8DDCCDDEDCA>==>?@AB!""B?<;#'*+*&" !#$%%%$#"! A@ +?>=<;:::;;<[=?ADEFEDCBAABCCC@=97544569>CGGD?952101245689;<>??>===>@AAB""##D@;74358;853101233445642/+(&&'*,--,*(&$#"!!" ###"  !"$%%%&&&''&%#"!  ""##$%%%$#"! !!"#$%&%%%&&'()*,.//00/..-,,,--./001922343310/../024567766543222334454421/.-,,--../000100//.-,+ ,,--...//. /012344420.-,-..//...-,,,--.//0 //.--,,,++*)*,-,--./0/../0011100/.--,+,-..-,+*)*++,-,+++,,-0.,*(''À逜䁃€ڀ遅끍΀ [@"ц ՄԂӄ׆- +2 )/T/R ., D3ÄĀʼ^2 b 3b bQ?ԄJ½E +ԄƄ6݅ <\[ZYWVUUUVWXXXWVUVWYZ[[ZYZZ[\]]^_acfh555jhfca_][YXWVVVWXZ[\]^]\[\\]]^^_`aabdeghi54ghiijjjihgfeeedcba`_^\ZXVUTTSSSTUVVW +XXYZ[\]^_`ba`_^^]]\[ZYXXWWVUUTU*VVWXYYXXWVVVWXYZZYWVUTSSSTTVWZ]_cfikkjgca_^_abbcdfhkmnnnmmllm>lllkkkjigfffghijkklmnnnmmnnlnjjihihffgghhhiijklmnnooonnmlkjigfeddcbba`__^__```_^_^]]]\[ZZZYYYXXWVVVWXYZ[\ [[ZZYXWVVUUVWXY[\]^]\[ZZYXXW +VVVWWXYYXXWXXXYZ[\]^^__^^^]]]\[ZZZ[[\ [ZYYXXXWVUUTUTSRQONMLMNO +MLJIHHIJKLMLKJKKLMNPQ"POMLKJIIIHHHGGGFEEEFGHHIIIJJJKKKJJIJKLMNPSUWXVSPLIFDBA@??@ACDEFGHIJKLMNNONNMLMMNNOOPPO +PPQQRSSTTTUTTSRRRSTUWXXYYYZ-..//./ ...//1233344454 555310.-[ZYXW VVUUVWXXWURPMLMLKLLNRUY-. -ZXWUSQOMK/LNPRTVXZ[[ZYY,--YVSOKIHGHIIJKNQU-/1233320/-,WVTSRRQPONNMOQSVY.0110/-XUSQPNKIGFFGGHHG HIIJKMOSV-./-..-,VTSRSUXZ[[ZWTQPPQRTUUTSSRRRPNLKJKKLNOONMLKLMMNPQRSTUWX,---,,X,,--.A-,,WWWVUUTSRQQQRSSTTUUVVUUSRQQPOOMLKJIJKMNOQSUWXYYYXXVTRPOPQSV-/020.XTQMIFCBBDGILOQSUVWXWVUUUVVUUV.+,-.//..-,+VUUV,,-,XVUSTUW,-./012210.-,+TSSSTTU SRQPQS+,-.-,,,-.01122112210/.-,+**+,-./010/./0/0011122233433210100///0$12445431/-,XY-/1234320//..\\\//0134565454 320/../012345677754210//0001 +23589;::9878889::;::99876678;=@AAA?><;:987778;=>ABCEEDCCDECBA@?=<:977789;=?@@AABAAA@@@AABBCCDDDCDEDDEFHKNPRSSSRPNMKIH IJKLMNOONMLKJJIHIJJKLMNNOOPPPQQPPONLJHGGGHGGFEEDEFEDCBA>:62\SKC?=AJVblr;<=?@BCCBA BBCDEFGHHIJJKLMMLKJIHGGFEDDCCBAAABBDEFGGHHIIJKKLMN#LKKJHGEDBA@?>==>??>=;975hgi69;>@ACDE)FGHJKLLLKJIIHGFC?;7420/YUSU\3:AFJMNMKHECA@0AABDFHJMOQRTUUVVWWVTOIA91+NHEEHN,29?BDFGHJJKLMNNM>NNOPPPOMLKJJKJJHFDBA@@??>=<<=>@ABCEFHJLMOPPQQQRRSSTSRPNLKIHHGGHGHIKNPSUXZ\_acef)eefhjlmmljheca_][YWVUUVWXYYZYXWVUTSRPONNNMNNMML MNOQRRSRSSTUVWVUTSRQ PPONNMLLKJIHGFDC~}~~~}|zxvutsrqtvy|CDBA@@?><;987665llm)nqt<=>=<;999:=AEHLNPQQPONMLKJIHFDBBBDDEBFE{xusrpomkjjigea]ZXXYZYXURPPQSVY\^```^[XVUUVX[^01110/\YVSQP#QRTW\16;@DHLQUY\]\YVTSSSTTSSRRQQPNNMNONMLKLMNNOPPRSUWYZ[ZYWUTS1RQPPOONMLJIHGEB@}|~ACEGIJKLLLKJIIIKLNPPPONMLLKKLMN OPSUVWWVVUVXYZ[]_abb`]ZXXXWURPOOPQRPNLKJKLLMNON'MLKJIIIKMNPPOMLKKKLMNNOPPPOOONLIFDC~|$}}}~ACEFHJKKLMOPPQQPPOMJHHJJIIJKJHGHGFEDDEFGGFCA~}ABBBA?{vsrsvxz{|AEHJJIHHHIJJIGEDDEFGHHHGFEDCCDDDCBBA|ywvtsqoopruwxwuspnmnoqrsstvxyxtojgdca``aeinrtuusojd^Z+Y]dmwFIJLMNOONKHD|ywuutstuwy}@DCCBB~~ACDEFFED}vplhfdcbccdddcba`^\[YXWWXYZ[[ZYXXYZZXVSPLIFEFFGGHIJLMMLKJHGFEDCCB@???AEJMOONMKJIHJMOQRQMRRRQPNLJHGHIKLMMNOPQRSTUVXYYYXVUSRSTWZ]`bcdcba`^^]^_`acd3456676654eca_]]]^_`abaaa``_5`abdegghggfedcddeffedb`][ZYXXXYYYZZZ[[[ZZZYXVUTSSTTUUV"WXXYYZ[[ZZ[^adhkllkjigedbbaabbcdddc#bbaaabbcddccba`_^]\\[[[ZZYYZ[[\\]^_`abdef334443edb`][YYYZZ\^_abba``_^\[[ZYZ YYYZ[]`bd345gda^+**))('''(())(''&&')*+*+,-./0100/.-,+***)*+,,-,+,-./11/./0///.---. -,,+*)((('()))*+++,,--..///00110/.-,+*))('(()*+$**)**++,,++**)))***+,-./0133320.-,--.//00///. /013556554 555432211234323221223345566778776543 221100/..--.-,+ **)))**++, +++*))((() ((())*++,,,+,,,++*+,+++**+*)**++,,-,,+***)**++**))('&'&&%$$$#$$%%$$#"#$$%%%$#"#$$$%%&'&%$$#"""!! !"!"#$#"#$%'(***+,,+*(&$"! !"#$#$#$%$#$%%&&'''(((''&%&'%$#!"""!!! !"$& '&&%$#"! ! !"#$%&'(''(&%#! !#$%$$#$$##"!!!"$%''%$$#"! !"$&$#$&'()('%$##$%&&'&&&%%$#" !!""!!  !!"""#$$%&% $$$##"""###$%%%$$#"""!  !""#$&'( '&%$#""#$&'%" !"$%&'((''&%&$#$$%$#$#$$%%%$#"!!!" "&&&&&   !#%&'((('&$#!   !"#$$$##""! !!""##$$% &&&%%$#"!! !!"! !!""##"!! "#*17: !"!"##$$%&&&%%$##""!!  !!"#$%&%$$##"! 0/1 !";#$&''('&%$$##" $" !%!"""  "#%&(())('%! !!""# "##$%&&'&&%$#"!! !"#$%'())* ++,+*('%$#$:##$%&')+-/02356788877678:;<<;:8754321/.---../00100/.,,++**)*+**))**++,,--../01222322332211000//...-,,,++*)(('&%$FEEFGGGFEDBA@@?>= +?ACEFHHIHHGH$%GFF#DEEDECDCBBCC!!! ../0124!#%'()(((''&%$#DDDE###EDCBBBCC"9##$$GEDBA?=<:876431/.-,+)&$"!!!"""!  !"#$$%$#"  !#$#!  !$(!$'*-0110.-+*+***)(('''(()))**++*)()*++,./.-,+*)))(('&&%%$"!AAC"$%&&&'(()*+*)(0)**++*))*,-./.-,,-.0010012344420/.---,*)(()***('&'('()((''&&&'(***)('()**++*)(&%%IHGFEDDDCCBBAB!"#$%&'(())*+*(&$#$$%%&&&%%$$%$%$#"""#$%%$"!?>? ! ?<;:;<=>>>? "$%%#"!!"! !"##$$#"!"""!!!BOA@>==<<<;::;=?ABA@>=;:::;<<<==>??=:86532111469<=>?><951.-/27<;:";<=?ACFHJKLKKJIIHHHG###"!A@>==? "#$ #D@<8643211123 210/.---.//0/002210-+(&$$%%&%'$$%%&'''&%$#"!! !#%&&&%$##"!!!"$%$#"  !!!""##$$%&&'()))('&"(*+-.//.-,++*))**+-.20/.-./01223455443221223!2210/..---...---..---,+*)((''(())*+,,,+++,.013332110/.-.-./..--,,++,,,+++, --...--,,,-../ 10/.,+***++,-.---,,+*)*+,./0.-,큃ၩہÀ $^؅ւՄ҆ӅԄ"%؅Յޅ, ؇ۆ܉ %9 )҆HVT>ȼ +& !! ePR_Ż+ 8І, +[ccdccb`_ ^^\ZXUSRRSTUVWXXY[\^`abcdedddcb`^]\[ZZYYXXWVVVWXXYZ[]_abcefgij6678998887666lkjjkjigfda_]\[ZZYYXWV#WXYZ\^_abcbba``__^^]]^_`aa`^]\[[ZXWVWXYZZYYYXWVVUT UUVWYZ[\^___^_`a``_]\[[ZZ[[\^_acddeefed efghhijkjihgfghhijkklnmm7k6kjlhhhiijjiihggfghg fedccba`_^]\[ZYZ YYYXXXWWVVVUT UUVWXYZ[[\]]\[\\]^_`aaabbba`_]\[ZYXW XY[\]]^^^]^_`abaa`_ +^]\\[[ZZZ[\[ZYXYYZZYYXWVUUTTSSRQPPOOONNMMLLLKJJIIIJKJIJIJJKKLNOPNMKJJJKL KKJIIHHIIJJKKLKKKJIIIJKKLLMMMLLKJIIHHHIIJJKIGEBA@@@ABDFGIJLMNOPONO PPPQQRRSSTTU VVWWWXXYZ\]^/001112211000112334456667666554322110/.-ZYXVUS;RRRQQQRSTTTSRQPPPONMLKKKLMOPQSVX[/00/.[YVSOLHFDDDEFHIKNPSTUV,UTRRSVY-YVRMIFDDEFGIMSZ034432210/.-,,WVTRQONMNMNPRVZ/0111/[XTRPNLJIGHIIIJLNRW[/1122210.-,+VUTTUUVVVTRQONMLKJIIHIJKMNONLJIJJKLMOPRSTUVVWX,-.-,+VUVPUUTTSSSRQPONMMMNNOPQRRRQRRSTUVXYZYVSQQRTUWXY-./00/.XSPMLKIHFDCDEGILOSVZ\\ZWTSRSTUTS+*,.0122210.-+TRPNMMNPRV,./0123321/-,++*TTSRQR*,./00/.,USRST+,,---,+VV+,-.//0/ ..--..///0010/. //1122332232110/010/0123567765443221121B00.-YXXYZ./01233344456777544469;<;8531/.../01223334568:;;;98653211012468:;;;:999887689:;:9987+665445679;=>??>=;:9899:;;<<=>>?@BA@@@A@>=<;:;<=>?@?@@AAA@@?@AABCCCB=<;;::9988754321/WMEAENYckr<>ACDEFGIJKJJIJKLLLKKJIJJKKKJJIIHGFEDBBABCDEFFGHIJLMNOOONMLKJIHGFEEDDDEEFGGGHHHGHGxIKMOQRSRQPQRTUUTSRPNKHGGIKMOPPONLJGECBBCEGIJJKLMNOQRSUVVTPLGB><:976555679;>ADGIKNPRTUUUTQOKGEBA@@AABBCCCBA@?=<<;:::;<=>>?>=<<<=>?ABDFGHIIIHGGGFEDCCDEGJNQSUVVWXZ\]]\[YXWV+WXXWWVUUVWWXXWWVVUUTTSRQOMKJHGFFGGHJKLMLLLMLMNOPRTUUV UTTTSTTSSRQPONNLJIG.FFEEDC~{xutstuwy{{{zywuttuwy{||}}ABCDFDCDCEEDEDDDEEEF!EDBA?>==<;:976heehm:>BEGHIJKLLMMML KJIIHIJJKJIIH!IJKKKJIHGFFFGGGFE~|zxvuuusqpo\po763b[UPLIHJLOPQQRTVX[^a0/XPG@<<@ELRVWUTSTVWYYWTQNMLLMOQTY`4:@GOW]`bba^[XVVWYYYWUTRQPNMLLMMNjOONMKJJKMPRSTUUVVWXYZZYXVUSRRRQQRSTUUTRPOMLJIHGGFECABBCCDEFHKNPSTUUTSRQPONNNOONNNMMLLKKMPSVWWVVWY]acdca_^]\[ZYXWVVUTSRSSTTSQOMKJKLMO NMMLKJIGFEDEFGJMOQQPPONMLLK?@@ACEGILNOOONOQTWXWWSNJHHGECCDEFFGHGECBBDHLOPOKFB@??@A;BBCDEFFFEDCCCDEEECBABBCDFHIJJJIIJJIGECA@@~|zvtrponlkkkmoqrsWrsstuuutttvz~xqkgeegkpuy|{xuroje^XTTX_gouxxuqooqv}ACEFGFEC{xvuuttstw{~~}|@}|{zyyz{||zwsojgedefggfda][ZZYXVUSQPOPQRRRQOMLKJJIHFC@>=<=>?ADGIJ3IHGEEEGILMNMLJIGEDDEGIJKJIGECBAABCEHKNPRSSRRPOMKJIHGHIKLMNOOPQRRSTUVWXZ]`ek8;=>>=;853ca``aabcde3fedcbbaba`__^] ^_`bcdefffeddcbba`_^_^][ZYXYZ[[ZYYYZZZYYZ\^_``aaabbcddefeedcddef3ffedccbbbcccba`^\[[[\[[ZZYYZ\^_``_^]]]^`acdefg4433ed)cba`_^^^__`abcddeeedb_]ZYZ[\\\[ZZZ[\]]\\[Z [\]_`bcdeedc,-,+ +*('&%$%&''())+,,-,-../ 0//..--,,+***)**++* +,-...//00//./..--,,,+*)*+,-.001000//...///0//.-,+++**))**+,-. ---,,,+++***)(()))*+,,--.//01100//..--,,,-.01232123343233444556766543311123344323 +444322100/.-,+*)()* +++,,,+++*+,-.---,+**))((('''(())*)))*+,,-...///.-,+*+*)() (((''((('''&&% $%%%$$##$$$#"#""###" #$%&&%%%$$$###$$%%$$#""!!!"##$$$%$##"#$$#""!"#"!  !"#$$%%%&&%%%$#$%&'&%&'('''&%$%%&%%$#"! ""#$%&'()('%#! !"#$%-&&&%$$%&()'%"!$'%%$$#"!"#%''&$##"! "$&)$#$$%%$#"!!!  !""#"!  !!""#$$%%%&&%%$%$# +""! !!"#$%%&&'(('%#""#$%&&&!&$"! !#%')*)'%$###$%%%$#$#"! !"$& #"""! +"! $$ + ###$% !"$&()))('&%$"!  ""#"#""!!!"#$%%&&&%%$#"""!2""##$##!  $+16: !"##$$%%&&% &&''&&%%$$###$ ###"!!  !"#$$%&&'''&&%$##"#"""!"#"K##$$$##"##%'()**)((())***)('%#! !#$%%$#"  !""##$$%&&&%$" "$&')*+*)(&$"   !"#$$$#"!'"#%')++,,-./12210/.-,,--.///..--.//00//.-,+*)('&&%%%&'())*)*+* +,-/1234432121100///.,+*)((())(('''&&JGEDBABCDEEEDDCCBCDDEF GGIJKKKJIHHGF#$##$##$# +""! -,-.0 !"#$$%%&'&&%%$$$%& %%&''()))('&&%$$ECBA?>=;:875320/.*(%!  !#%'%!  '"%)$*/4676530.,,-.//.,+*))('() ('&&&()++,--..--,+*)((())**+++*)('&%$$##FF#$###$&(+-///.,*))())*))(()*-./.-+,-046654322210/..- ,,++**+++*)(&%&&&'())((''&&%%$$#$%'(*+++**))(''&%$#ECBA@@??@@ !"#%')***))+-//.-*'%#"#$##!!!"$&()'%! !""##$$##"! !"""!  !!"#$#"!==<<;::99989;A::99:;<===<<=?BDEC>:643347:=@BCA?>;850,((+/5:>AA@=;;ADFGGFEDDCBA@?%>===>?@A@>;8532234454310/./..-,+*)))*+*('D&%$"! "$&'''&&%$#"!!"$%&&&%$#" !"$%%$#! !"##$$##"!  !""##$%%&&'()*+-0+*++,-.1000///./0/0001123210/0/.-,,+,,--,,++,,+***+,-..//0 +//...///00/. +/..-,+**++,++***+,-.-,++*++,---../.-,,---./0 .,*))*+,-,,+,+* +,,-...-,,+++ۀفˀ քԄ ݅ل؇Մ ӄڅޅ>Є΄ل;҅*¿$ +v|d͆΄@#"TE46+ ƅ¿„WǾ + ?S /,ބ"ȼD½þ/ Յ*߄܄ `abcdeffeca^\ZXWVVVWXXYZZ[ZYYYZ[\]_`bccdcccba`_]\[ZYYXXWXXYZ[\^_abdfhj67889:;;:::9887mlljigfecbaaabbbcbbbaa`_^]\\\[[ZYZ[\]\[\[ZZYXYZZ[[[Z YYXWWVVVUVVWWX +WWVUUVWXZ[\]^^^_`_^__`aabbcccba``_`abbcb!cccbbbceffhhgheec`___`aaa`_^^]\[[Z[\]^^]]\[Z[[\\[[ZYXYZZ[[\]%\\[[\\]\\\[[ZZ[[[\\\]^__^^]]\\]^^__`aba`_^]\[ZYXWWWXYYZZ[\[[ZZYXWWVUUTTSRSSTTUUUVVWWXYYXXWVVUTSRQPQQRRSSTSSRQPOOPPQRRRQPPONMLLKKKLKKJIIHHIIIJJKKJKLMNMNNOPOONMLJIJKLMNNNOONNMMMLLLMMN)MLLLKKJIGFEDCBA@@?@@ABCDEEFGHJLNPQRSSSRRQPO#PPQRRSTTUUVWWVVUTSSSTUUVWXYZZ[[\\./0//...//0123455543456+543210/...[[ZYXWUSRQQQRRSTTUUTSRQPPONNMMNPQR(QQPONMLLLMNOPRTWY[[ZXVSOKGDBAABCDFHJMPSUWX,-./0/.VOIDA@BEJOUY]/01 0/.-,WUTRPOMML2NPSVXYZ[[ZYWURPNMLKKJIHGFFFEEEFIMQW.0122210/-,++UUTSSSTTSRQONNMLJIGFEEFGHIIJ-IJJKLLKJIIHGGGFFFGHIJLMNOPQRTVY-//0//.--,,+++,WX,,-,+VUTSQONMMNMMMLLMNPQSUVWXYXWXY[.\YURPONMLKJHHGHIKMPSVWWVUTSROQQPOOPS+.14677530.,USRQONLKJJKLNQUY/1233211122210.-,+SQOOQ*+-/02221/-,++VWVVUUUVUUU++-./124566654320/.-./00/-,++,-..//001223444554443322110/0///0124556676665544332210//..- .//0011234568998631/\\]012333223346787665667889:;<=>???>>=<;:::9 :::;;::987656789:9::;;<=>>>==?@?=<;:999::;;<;<==>? +>>??@AABBBABCDEFGIJKLLLKKJJIIHIKLMNONMLKJIJJKLKJJIIIJKLNPQQQPOOONMLMNNOOPQ(PNKHDA><:8765432110/.ZUOHB?@FP]i:>BDEGIJLKJJJIHGFFEEDCCCBCCD*CBA@??>>?@@ABBBAAABBBCCDDEEEFFFGGGFEEEFHIJK JJIHFEDCCBAAABCCDCDDFGIJLMNDOOOPPPQRSTUVUUTSRRQRSTTTROMKKKLMOQRSTSSQNLJIHGGFFEDEFGIKMNNLIFB?>>?@BA@>=< =>?@BDFGHIJJIHGFEDCBCDEEF.EEDCBA@>==<@BCDEEDCBAAABDEGIJKMNOQRSSSTTUVWXYXWXYZ[\]]\[ZXVUTRQPOONMNOPQQPONMLKJJIJIH~|zyyxwvtsqomlljihgfgiloqtwz| }{zyxwwvJuutttssrrrstv;<==>>||}}}??|zwssqs:;<<=>>>==<;::;<>?@BCEGJNRUXYZZYYYXXWVUTTS]RQPNMLKLLMMMLLLKKKJI~|zxvtqomlkklkjhec`_^][YWTQONMLJIHGHIKNQUXYWTQLGA<866:@FLPSUUV1UUUVVVUSQONLLLMPU]h:BKU^ceecbbaaaba`^[XVUSRPONNOPQRRSSSQPOPQSUVVW$VVUTSRRQPPONNNOQSUVVUTRPNLKJIIHF1CFJOTZ^aa^ZUQNNPRTTRQONMLKKKLNOQTVXXWVWY]acb_\ZYXXY[\\\[[[ZYWVUTSRQOMLKLMNONLKKJIIHHIKMOPQRSTUVTRNKIHHHI-HFDC~}{ywwxz{||>=yxxz>BFJMNNNMMNRUUTQOMIECDEGFFEDDCDGJMPQQPNKIGEDCCBC5DEEDB}vrqsw{?ABDEGIKMOQRRQPNLKJIHFECBA@}{xvuutttsttuvWwxz|}~~}}|||{zyyzzxurommnonljihgfc_]\^aeggda\YWXZ]bglquz?BDFFEB~unhfefimqux{}|xrmjhiklmnm%oqtuvuutsrplgc`][YXWWXYYZYXVTRONLKJJJIHHHGFEDBA?>==>?@BCDEFHIJKLMMNOPQPOMLKJIIIHHGFDCBABBCDFHJKLKJHFEEGHJLMMNPPQPPONNOOPQRSTUVY]af578887654321a`___`a``__^ __`aa``_^]\[[ZZYYZ[[\]^^__``abbbcbcd8cba`_^]\\[[ZZ[[\^_`aabbba``aceffedcba`__``__^^]^^^_`abbbabcef44556676654gfedcbba`^]\[ZYZ[\]^_`abcd%cba`__`bcefeda^[XWWXYZ[[ZZZ[]^___^]\\[ \]^_```_^^_*+ ,-..//.-+*)(('(())***++,,,++*+,,-./..-,,+*)*+ +,,-./01 +1100///...-./.-,+,-,-,+,,--.---,,++**)))(())*)(('''()*+,,,-./.-../0111223322212321000122332210/-,++,,---, +++***++,,,-,+,+*+,-.-,+*+,,--,,+*++,,,-,++*))(('(())*+,,---,,++***)(('&% &&&'''((()(''&&%%&'&% &&'''&&%$$###$#"!"#$%$%&%%$$##" +#$$%%%&%%%$# """!!   !!""##$%&'('&&%%$%%&&'(''&%&' ()))('&%$$$% &&''&&%$$#""!"#"!""#$%&'()('&$!$ !"#$%%%&&''# #%') +%$$#"!! ! !"$%&'&&$#"! "%($#"!  !  !!""###$$&%$$$% +%%$%%$$#""! ""#$%%&'''((('& '''())(&$#"""!! !#$&'&&%$#"#$%$###""! !"#%'"! !$%$ ''( + !"#$##"!!! !""#$%%$$#"#$##"""!""#$%&&&%$%%&&'('&$"! !'-4 "#$%%&'''&&%$$$##"!!   !"!"$$%%%$#"!!  !"#$%&'())((()**++*))('())('%#"""#$%&&'''&$#! * !"""! !"#"!  !!"! :!"###"!  !"$%%&'()*+++,,,-.- ..///00012334 3210/.--,+*)*+*))**)5(POMLKJIIIHHGGHGGFEDCCBBA?>=<:9876555666555679:;=@BDFGHHIIHGGFEDBA@???>>===<;;:9989:>>>==:986657!#%'*+,-,,+++,+*)(('(()M((NLJGECAABBBA@>=;:8643100/.-+*('&%$#"  "#"!4!%*0!'/6:<;:876544310.,+**))(('(()))**+ *)(()*+,,-,,,+**)P(''&&')+,---,+*)(('''&%GEEEFGGFEE#$'*-03553/+(&'*-//.-,+**)))**+,-.//.--.145531/./0100///.-,++**)('&&&''('E()**)('&&&%%&'()*++,-...-*'%$$$%%&&&%%$#"CBBBA@?=<<<=>>><;;<!#&'((' *,,+)'&#"!""##$$#"!!!#%(*+*)'%$"##$#"?;878:< !"$%&&')(&%%$$#"! >=;:99::;;<<=>?@ABCkBBA@@??@@A@?=;::;;:987766420/02577641/--.0257:?ABBA?<85322334678998788:;==<<<;:9641/.-, -.///.-+*)('&%$$##"!  + !""##$$%&'(''&%$$#"!   !""##$%&'(*,/,+**++,,,-./..-,,++*++,-./0123210//.--,-./0001110///0123332100/.-././/01 +00//.--,,+*+***++,-.5/.-,,++,-.///.-,*)(())***))**+,---,,++**)))**+,,,+***ހՀӀÀۀՁŁ̀ ߅* ՅՇ +Ѕք߅*؅ ؇ +ۅ"؄9Ä͆ +U: :τK̄"]!! ÅĄ 󀆋 Qÿ _2´󁋘`(1Aӄlżſ':3aba```acde dcba`^]\[Z[ +ZYXXXYZ\]_`ab aa`__^]\ZYYXWWXXYZ[\]_acegik6789::;:987mljjihgffgghijk jihhgfeeefeddcbbaa`__]]\\\[[ZYXXXWWWXXYYZZ[[[ZYXXWVUVWXW XYYXXWWVVUUVWWY\`dhl66khfdba`__`abc'ddccbaaa``aabbba`_^\[ZXVSQPPQPRTTVVVXVVUVWXXYYZZZ[\^_``_^_`abbcdddca`^]\ ]]\\[[[\]^_`aaa`_^]]]\\\]]_`abbbaa`__^]\[[Z[[\]^_`abcdeeccbba_^]\[[\\]^_` _]\ZXVUTSQPONONOPPQQRSSSTTTU TTSSRRQQQPONOOONMNNOOPQ PPPONMMMLLKKJIJJKLMMNOPOPOPQQRRSSRQQPPONMLKLLMMNNOOPPQQQPOOOPO%PQRSTUTSQOMKIGFFDCBBAAABCDEGHIJKMNPQSTSSRQQPONOOQRSTTUUTTSRRQPPQQRRSTUWYZ\^0123443320/.-./01232210/.\[ZYYZYYWVTSQONMMLLMMNOPQSTVUTSRSSTVWYYXVTQPOONNM5OQTVWVUSQONLKJIHGEDDFLRY/00.YVSRSTVVVSOKGEEHOV.13320/-7./0011100/.-,WUROLJIKMPRSRQPOOPQSUWXYYXY[]00^ZVSPNMKIGFEFHKORUWXYYZ[...[YWUTTSSRRQPPQPOMLJIHG IJLNOPOONNMMLKJHGEEFGHHIJJKLLKJJJKLNOPRTWY-. -,VTSSSTUWX,-$...---,,WUTSSQOMKJJKMORUX[\]\\[ZYYXXWXXXWVUTTSSRPONMLLLKKJJIJLNPSTUTSRQPONNMMORTUTRPNNORV-/011100//..--XUPKGDCDFHKMPRTW-/257887531/.-,+)QNMOR+.0110.,+++,-.//..--,,+*SSS*+-/269;<;9631.,+++,-/01222110/..-../01232210112232210001233444554443 444332210/0/./0112 34566653210/00112333455667889:9 +::;::999:;<;998999:99877666767889:;<===;:87788777:<;:;<=>?@@A +@@???@ABDEGFEEDEFFGHHIJJKLMLLJJJKLMNOPOONMKIHHHIJKLMNOP&OONMMNMMLLMNOPQQRRSTTSROLIGEC@>;8643210`_]\ZY]c59=;:9::;=>>??@@ABDFHJKLMN-OPQSTVWWWVUTRPONMMMNOPQQPOMLJJKLNPSTUTSRQPNMLKLNPQPOOPRSUVWXXWUSQOLKJJJKLMLKJKLMMML KJIGECA@??>==<;;:9877789:<>@BEGJLNOPQRQPOPQQRSTVY[^__^]\[ZYXWVUTTSSST +SSRQPOONMKJKLLLKLKKJHGFE FEED~8}|zxvspmkhfda_]^_abcba``a``abehknooonmlllmnoqsvxzzywutsstsrrponlkjklkkjjkllkjjjklllnljkij77;<=!>?ADGKNRUWYZ[[[ZYWTPLIGGHJLMNNNMLKJJIHHGGF~{xwxyz{zywurponmmllkhd`\XWWXXXVTRPOOOQSTTTSSSTWZ]][WQKGFEFIKORUXYXXXY\_a_YQIB@BEHJJIHHGGGIMS[h<:87531/-,++*+,,-./1345655432 34689::9878776654344433210/. /0/..--!#%')+,--..--+*'%#""#$%&'&'&%%IHFGGGFDB?=;;<=>>=<;976433220/,)%#!  !!""!! !"%'''%! ! "$&''$!!&+3%,1578887631/.-,+**)**+,---,+*)()*+, ++**)((''(9)*+,..//..-+*))('%IGECBBBDG%')*,-/257641-++.13430.,*)))**+/,,--./0134431.-,-.03578876544310/...-,+)'&&%&&&''(())*+-...,)'&&'(())*))(()+,,+)'%$$$%&&'&%$# ""! ><;999:=!"#%' (((*+,+)'%$#$#X$%&&''(()*,,+)&#! !!""!! @@ABD###C?:77:?"$%&'(*+,,++**)(&$#""##$$##""!@?>==>??@ACCDDDCBABCDDCBA@?><;:9[:::999:;;;961-)&&(,/2344568: !! :50.-/26:=?@@AA@?=;86433345689:<==>>===>>><:741/,+*)()*+,-,+*('%$$#$#""!!"#$%&&'(()))( ''&%$#"! !"! !!"#$%$#"##$$%%&''()*++,./0/.-,,+**)((()*,./13444320/.--,,+,,-../ +...//001223&210/-,,+,--./0010///00//../012232210.-,-./00//.-./10//..--,,++***)*+,-...-,-.00/.,-.//00//..-,+*('''()*,-...-,+*)()**+မπـˀ؀ҁπ΀ 9C +ӅΆ΄΄,ӅЅӅ݇܂ۄkF4ڄ؂لM?܅ȅ˄yڄT 5  Np!$- #"Ļ'ľRӆ<#v [\^_`aaa`_,`abdefffedba`_^]\[ZZZYYXWVUTTUVXY[\^__``aabbcbaa`^]\[ZYZ[\[[[\]^`abccdefghikl6788899: 98776655ihiijjjihgfff3ffeefffggghhihgfeedcba`__^^]\\[[[ZZYXXWWXYXXWWVU TTTSSRSSTUVW'VVWWXYZ\^`cgknppokgc_][[\]]^^]][ZZYYXWVUVWWWVVUUT$UVWWYY[[Z[[Z[\^__`abcdfghhhghhikmmmlklmnoppponmkkjjkkjjigfeedcbaa`__^^]\]^^__``abccddeefedddedca``___^]\ZXWUTSRQPOPPQQRSTSSRQQPPOPONOPQQQPOPQ PONMLLLMMNNOPQPONMLMLLMMMLMMNOOPPPQRQRSTVWX WVUSRPONNNOOP +QPPPOOOPPQRQPPONMNOPRTUVVUSOLJHG +HIJKLLLMMMNOPPQR QQQRRSSSRRQQPOOONM)NNOOPPQQRSTVX[]`122333210_][YXXYZ[\[[--./0/..--...]]\[YXVVUVVWWWVTSQPPPQQRQ +PQQRTTUUTSRSVTTUUUTQNKJIJKMOPPPONMMLKKKJIHFCAACGLQUXYYWUSRTV,-.-WTTU,/134420ZTPNNPSUVWW++,,,YXWUSPOMNOPQ +POOOPRUWYZ[3\]]\YVTQONLJJJLNQTWZ[\ZXUTSUWXZ[[ZZYXVUTSQPONOOPQQQPQPONOPPQRRRQPONMLJIHGGHIJJKKLKKLMNPQSTUWXY[-.-,WVUUUVWWXWXXXYY--.../I00/.YTOKHGGHKNRUX[\./.\[YXVVVWXYYYWUSQOMMLMMNOOONNMLLKKLMMLLLMPSVWXVSPMKJKLMMMLKKLMPTW[/01221/-,USR*PNKHGILOSU,-./13343221110/-+*QOMLLNPSV,-./0/..--,-..013456654320/010/ 0001112223332344544332100/./13455432332110#1123345554433211000///0123344555666787677889:9:::;:9 ::998788:;<=>???>=<;::;<<:876 77899:;;;<;:::99::; <>?ADEFGGFE +FFGHIIIJJJKLMMNNONMNNOOPOONNNML KJJIHGGFEEEDEFG-FECBBABAA@>;9764geeefi69;==<;:::;=?ACDFGGHHHIH IIJJKKJIHGGFEFFGHGFFE DDCCBBBAAA@AABCEFGHJKKLLMLLKJIHGFEECB@=:866789;;<;:9989:<=?@ABBBCCCDEEFGIKLNPQRSRQPOON6MMLJIHGGIJLNQSUVWXXYYYZZ[[\\[ZYXXYYZ[[ZZZYXXWVUTSSRRQQP-OONMLKJIHFDCA?=;97544568:=?ACDFGIJLMNNOPQQRRST SRQONNNOPQRSUVXYZZZYYWVUTSRSRQQPONNOPQSUVXXYYYXWWVTSROMKJIIJKLLLIGFEFFFE +FGGHHIJLMOPOPONLIEB>vplkkmoqstvxz{|>=>=yxvtsrNqonmmmnooonnnoqsuvww;;<<=>??@@?>=<;:999:<97668:=?@ABCDEFGHHHGEC?:4-MC>?G)07<@CDEEFGIMS[fsAHOUY\]\[ZXVUTTTUTSSRRSTRQONMLM]LMNPRSSRQPNMLKJIHGEC|{~BFKORTVY]bfhhea][YYXWUROMKIHHIJKMNPQRSSTUVXYXVTQONNPSW\bhmppnkheca^\Z'YWTQNKIHGGHHIJJKLMNOPQSUXZ\[YUROOOPPONNMfNOPPPONMLKKKLLLMMLKIGECCCDCB@?@ABCEFGGHIKKJJLOSTVXYZZYWTQONNNMMKJIGFEDEFHJMPQQPOMLKKJJJIHGEDCBA@~|zUywvuvy~BFHJKLNPSTTRPNMMNNNMLKJIHGFEDCBBCDEFGF}||{yvqmhfefimrw|DDD|{zy_xvspmjgd`\XTRQQRSVY\aejotx{>>>{yvsnjfdbbbehlpsuvvtromllkkihgghjnqtuuroliggghhgfc`\YVSRQPONNNMLLKLMLKKJJIIHGHILNQRTVXXXVTQOMLLMMNOOPQQQPONML+KIGDA@@BDFHIJKMORUX[]^^][YVTQONNNOPQRTUVWXXY4XWWVUTSSSTUVVWXYY[\^`acdddcb`_^^^`behjlmn76lkjhfdb`_^__`a``__^__abcdef +edcb`^^^`aba`a`_^]]\[Z [\\]]^_`accdcbcccddeffgggfedccbba`_^]\[[ZZZY Z\]^_`__^]^_`abde3445&4fdb`___abdefgggfda]YVTSSTUWY[\]]]\[ZZYZZ[[*+,,-.--,+***++,-./.--,+***)('''((*++,---..//0//..---..---,,,+++***+++,++,,--..//00011122101110/0011233221110 ///...---,-,,,++**)('&'()**+*+,-/124689997520/. --,,,++**) **++,,+++*+++--./0112344556777678766556 54433221000/.---,,,+,-../011210 ///000/.-,++*)('&%%&&%%$%%%&&''('&%&%$%&%%%$$#$$%&'&&%%%$%$#"###$$%%%&%$%&'() ((''&%$#$$%%&.%%%&&&'''(((''&&&%%$$%%&')*,---+*'&$$#"""!""##$%&&''()((''&&&%$#$ %%%&'()*)('&%%&&'''&)))(''&'&%$$#$%$%&'&%$M#$$%%&''&%#"!!"#$%%%$$#""!!! !$&'''&$##$%$#"$&#  !#$%%%&%%$#""!!!""##$$$##""#$%&'(),())***('%$#"  !"$&()*+*('&&'()*++**)('&%%$#$#$#"#$ ##""!!  !"! +"#$$%%%&''%$%&'''$!!#%&'('&&%&' &%#"!! !!"#""! !! !#%'(('%#! & !#%'%$##$$#!  "#$! !"$ +    !"#$%&%$%&%$#$#"!"! 100125  !"#$$%$#$#"!""#$#"""!  !"##$%%&&&%%$##"!! !!!  !!""##$$%&'(()(('&&%%$ #"! !"$%&()*++,,,++*+,,,--,++**)(+'&&%$$#"! !"##$%&&'(())*++,+*)((()* +,./01100/.-,+,- ,,+**))**+,-.-,++*)(&%$##$%&&&%$% &&&''()*+-,++* +)(&$" 8531234532211122332100/0001110012"1 !""#$$&&'(()*+,-,+*(&$"! !!"#$#$$%%&&%%$#ECA@??ABCCCBAA@?>=<;:;9752/,)&$"  *"$(-29!%*/2332100/0/-,+*))((()***)(('''()* )(()*+,--,+))(-'&%$FCAAB#%(+,--/136887521000/.,*)(''((()*+,,-'./010/-+)))+,/26:=>=;964310.-,,---,*)'&%&&''(())*+-.010/,*((()))()*('& '((('&$#"!@@@! > !"#$$%%&'&&&'),-.0111/-+*(''&%$#""!!"#%')***)('&G%$##"!! =<;;<=>?>=<;;<@"$&'(()+,--,*)('''&&%%$$##"""!!A@?@@B!"#$%&%JGECWB@=:7534569;=?AB!""EEDCBA@@???@@AABAA?=<:8641.+)())+,-.02579;=<;97420///01368:<==<;987655679;=>><:865 431/,+*))('( '''&&%%$$#$%&()*+,,+*(&%$###$$%$#"!  !#$%&%$#"A#$%&''()***++***)(('&&&''(()))**+,-/00110/.-++*+,./134443210/..-...//0/0112 3332210/.../0100/.--,-./011221100///./.---,+*)**+,+++*+,,-./.-,+*++,-/00110/-+)(& +')*,---,+*)()뀔倄Ȁׁـсـ -Ԅ߄1˄ʂɄ̈́3؇Є ܅Åń +Mʄ;^.>߅u ;1=ÊʆG 1#M+ ſ^Ǻ>?@AB"AA@?>?><;;;=<;9886433345667889:<==>===<<<;;;::9889:;=?@BDEFGHHIHIJ KKLMMNNOONNMNONNNMNNOP#OONNMLKIGFEEDDCBA@?>>===<;:87778:;;<;:7jd_\\`el9;;98mn8:=?ACDEFGHGHGGFEDCCBBBCCDDDEEFEDC +DDEFGIJLMNONMMLKJIIHGFEDCBBA@?>=<;:87544556G789:;<==>>==<:987789;>ADGJLNPQRSSRPNMLLMNPSTTTSQOMLKKKLMNPRTVX[]]^][YWUT4SSRRQPNMLKJIHGGGHHIJJJIIHHGGFEDCCBBCCEFIKMOQSUXZ]`bdefffedb_\YVSRPOONNNMNOPQQSTVXYZZZYYWVUTSSSTUVVWWXWVVUVWY[]__^]]\\]^_`a`___`aabbccdeefffeeefedcba``_^]\[[Z0YYYZYXXWVUTSRPOOOPQRTVWWWVUSRPONMLKJIJJLOPQPONLJIHGDA>=<=>@CFHJLLMMLKJ3KMOQSUVWWXZZXZXWXUVURQOMKIHHIIJJIHFEEEFGGGFEEFHJLMNONMKJIHIHGFDDC0~}}}|{zxtpke`\XVRNIC@>>@BDDCA@?@BDFG.FFFGHKOSVXWVTSQOLJGECBAAABCDFGHHGGHJMQXdvEPW[\["ZYYZ[]^^]\ZYYYZZYXVUTSSRQPONLKKJJKLKBLMNNMKIHHIKNPQPOMLLLKKJIGEDBEILPTWZ]adgijhe`[WUSQPONMMLLMMNNNOPlQRTVWWTQLIHJMPTX\cksy{woha]ZWUSSUWY[ZXUROLIGCEGJMPQRRSSUX\`aa`^[YXWUTQONLLKKKMNPQQPONMMMOQRRQOLHEB?yxz~ACEGHIHGGJJIHHIKKLNPRSUUVUTRPMJGEDCCCDFHJKLLKJI JJJIGEDBBBCCD(CBABBCCEFHKMNOOOMKIHGHJNQSTSQOMKJHGFFEFwGGFFED}zvsolihghkosw{?ABBBA~}|||}}~}zwtpmjgeb`^\[ZZYYXWWXZ]bfjnpqrsttsrpmifb`^^_`abccddefggfedccdegiklmmkigdba`~abbba^[XUQNLJJIIHHHJMPRSRQONNNMLKJJIHGFFGIKNPSVZ\]^^]\ZXVSQONLJJJKMQTUVVUSQPNMLKIFDB@?>?ACFIMQV[/133433210__^\[YWUSRRQQRRSTUVWX'WVUTSSSTUUVVWWWXZ\_cfjl66jgc_\ZYYZ[]_abdb`][ZYYZ[\^`abbccba`$aabdeghhihhghhgfeefhiiihhggfdcbaaabbcba`_^^]'^^]]\[[\]^_`aabaa`__^]]\\\]]^^___``aabbcbbaa`__^]\\[[\\]]\]\ +]^_`ce34556-54eb_^]]^_abcdeedb^[WTQPQQSUWXYZZZYYYZZ[[\[[Z )*+-...-+)'% +'(*,-...--,++**) *+,-..///...- ...///..-,,+ +,,--,,,+++, +--.//00011121100/./-..//01222333443322110//..-,+*)()* ++,--...///0/.-,+",,--..//01122/0.././0/00112334455565443211000112223344456766543433210/. ---,+++,--././/01223343320/...---+*)'&%#""!"""#$%&'&%$%$#"! ""##$$$%%%&% $$##""###$%& '((''&&&%$$$#$%&'&&%%$###$%&()++,+++*)('&&%$$##$%&%&&'())* ))('&%$##"""#$$%%%&'(('&%$##""###$$$%&'()*&*)(('&%%%$$##$%'()***(%"  "$&''&%$#"!"! #$%&&&%%$$%&& &$! !!""! "##$$%$$$#$#$%&'(((''&&&''('&%&'&%$" !"#$%&'&%$%$#$$$#!  !!"##$%%%$$#"!   !""#$%%&' &&%%%$$$#$$%&'((()(('%$"!""#$%&&&'%%$#"#$%&&&$#!  !"#"!! "%'('&#!  !! !"$'& %$#"! !!"#$! "#$%%&   ! !!!"#$%&%&%$##"! 30-,-04877 !"##$#""!  !!"! ! !!!""#$%&&'''&&&%%$$##"!! 0 "#%&'(()('&%$##$$&'('&%$##$%%&')*+-./000/-,+* )(('&%%$$#$% +$$#"""!!  !#$&')+-/1356556431/-+*)('''(()))*)))*+,-./0/.-,--.../...---./0123321232211011234456787656544333222110/.-,+*+*))('&&%$%&'())*))('&&&%%$###$%'%$#"!!!"""!  !" !!! !!!"#%&() *++)*))*)*)('&%$$#$$$%$$#""!""##"#$%&''('&%%$$%%&%$##""CDEFG#FFEEDDDEFGGFDB@?>===<:840,)'%$" H !!!  "#%(/9#+0220///..---/0210/.,+* +))('&&%%&&'(**+*)'&&'(*+,,+**)('&%$GFED"#%'*,/13567999741.,+*+l,-/00/-*('(*,.038>EIIE?83/-+*))+-.//.,*'%$"DCD"$&(*+,,,++,.13554310/.-,*)''&&''()***))(('()*+++)&$" :9:; !" #$%%$$$%&%''(*+,,,--...-,*(&$"! !"#$&&'&%%$%%%$#"! !%CC"""##$%'()*+*)(&$##%'*+,,+*('&%$##"#$]#FEDCBA?=;9643357:=? !"!! @@??@@AABBCCDCB@?=;9764310/...-,+*)*+-03456677887631/-,++,-./0112334"322234577887643110001122210.,*(&%%$C%&(+,--,+**))(''&&%$###$%&'(*,.///..-+*(&%#"! !"$%%&%%$#"!   #'('&''(()***+++**))(*)*+-.02320.,*('''(*+,-.///.-,*))())*+,--.//001223332233323 22100//0012100/ ..-,,,--./..--,,+,-,-,,++*) ***+,--,**))*++,,-...-,*(&%%%&'()΀ˀρӁЁĀ $B (υ ˄݄ނ݇܅ +Ʌv¿Ć„ +† υ Ņʄńńć' 2܄݀47وڅ؄: +5ӅSN +  Y +" 1 `  '& +D߅!΄½_;ȿBJ¿ +h¾ׄ?Z ]]^_```_][YWUSRSTVXZ\^___^]\]]^^^_4^^^]]\[[ZZYYYZ[[\\\]^_abcefffeecba`_^^]\ZYXXXYZ[[\\\[ \\\]^^_`abcdefedccbbcbbbaabcd2343221bcdefh4565jihhgffedddcba`___^^^]\[ZZYXWWVVUTTUUVW VUTUUVVWXXXYZ[[\]\[ZZZYWVVUUVWWXYZ[\]][ZXUUTSUTSTUVXZ\]_`abcdeeffeeeddcba`___`abcdeddcbbbcdefgijlmnonmlkjigfeedcbcdefggffeddca`^\ZYWVUTTSRQQPONMNNNMMLKKJKKLMNOPQRSSTTUUUVWVUTSRQQPPPONNMMMNNNOPONML MMNOPPQQQPQQRQQPNMMLLKKLLLMNNOPQRRSTTUUVUTSRQQPQPOPOONMLKKJKLNOPONNMLMNONNMLLKLK +LMNOPQRSSSTUUVWYZ\]\ [[ZYXVTRPOOOPQVRRTUWXYZZYXWVVVWYZ[\\\[YXVTSSRSTUUUSRPPOPPPOPQSVY\01232210/]\ZWTQNNOQUXZ[[ZZYXWVTROMKJIJKMNOONM2NNOOOPQSTUVUUUVWY---,,,-./00/.,VTRQQRRQPMKIHHIKMOQS RRSTUVWWVUTSRQQRSTV7UUUVWXYZZZ[[\\\[ZYXWVUROLJIHIIIJJKLLNORUWYZZZYXXWWUTRPNMLLLKKKLMNML"KJIHGFFFGHIKLMMLKIHHHIKMOPQSTUVWXY-,,WVUUTUW,-../).ZXWVVWY[.//..-YXWVVUSRRSTUVVUSPNLKJJKKLNO NNMLLKJJJKJJKLNOPPNLJHHHJ.KLMNNNMLKIIKPUZ]/.\YXVUUTTSRRRSTUVWXXXY-../0112 10/...-,,+,,,YXWX-/01211/.-ZYYYXYYZ-...//0012210/01223345543200/. //001234454445567787655432110100/..-./0121223455677887776655455566778789:;;<<==>==<;<=>?@BA@?>=<<;(<=>?@AAA@?><;;:9889:9876631/../1469;<>??@?>==<<<=>@?@AABCCDEEFG +HHIIJJKLMMNONOOPQQRRRQRQPONMLKJIHGFEDDCCBA@?>= >>>=<;975hda__aehkkihfgil8:=<;:99899::<=>?@AB%A@???@ACDEFGHHIIJJKLMNOOPPPOONNMMLLKKJIHIJLNOPQR,QQRRSTUUVVVUSRPOOOPPQRSTUWXYZZZ[\^acfhjkjjijk7ifda^\YWUSRPOMLKJIIHHGHHIJKMNPSVY\_abbbaa`_^^]\[ZYYXXWWVUT UUUVWWXZ[]^_ +^]]\\[ZYXWVWV WXYZ[[\]^_``a`__^]]\[ZYXXXYZYXXXW?VVVWXYYZZ[]^___^]\[ZZZYXVTRQQRSTUUUTTSRRQPPONLKKKLMNOPQRRSSSRRRS RQPNLJHFEDBA@??AABCBBBCDFHJLLMMMNOOPPPQPNMKJIHGGFFEDCC~|zxvtstvxz{|{zzy"xwwvuuuvxz{||{zxurolie`\XTSRRSSSRRQPONLKKKLMOPRTVXZZZYWUTRRQPONMKJKMNQVatEQY^^^]\[[ZYYYZ[\[ZXVTVSRPPOPPONMLKJJKLMOPQQPONMMMNOONLJHGGHJLNOOOMLKIGFEDDDEEEDCBBDHMTZ^aabccdca_\YWVUUUTTSSRRQPONMLLMORUWVTROMLMORTW[ais{~xof_YUSQQRTWYZYWTQMJHFFFGIKMORTTTSRSVY]_`_]ZWTRPONMMLMNPQR)QPOOPRSSSQOLJHFDCCCDFGHHHGHHGGFHIHHIKMNOOPONMMNPSUWXWVTQNJGECBCEFGHIIJJKKLLKJIHGFE FGGHHGFFEDEFFGFFGGGFEDCCDFGHHGFEeFGIKLLLJIGED{vqmklou{CDEDCBAA@@~~~}|{ywvtrolgc_[YY[`fknpqpnlifc`]\[\^adfgfecaabdeeeca_^]]^^_^^_aeilnonkhd`\YVTSRRSTUUTTSTTUVVVUROLKJIIHHGGGFFEGGILORW]djnqqnjfb]ZVSPNKIHGGGIKNRVY[\[YUROMJHEB@>=>?BGLRZ0479:;;:99876432!1a_[XUSQPQQSTUVWYZ\]_abcccba`_^]]\]^`behjl6jgd`][YXWWVVUVVWWXXXY[]_a1223edcbaabcddeefggffe ffggghhiijklmnomljigfdcba`_^]]\ [[[\\]^^_`__^^]\[ZZYZ[\]_`abccdccb`_^]]\ ]^_`abaa`_^^]]\]]^^_`aaababbbde345567665geca^][ZZZ\]^___^^]]\ ]^_aaa`__^]]] **+,,,++*)(&&%&()*,-,+,-,,++*+,-../0/.--,,,++**))***+,---../0/. +---,,+,,,--./32211210/...---,+++**)*+,,-,++*++,,,-./...---,-,,,++*+++,,-,,+*+,-./112223344555443322100/00122332210011245678988764432!11000/001223322110/-,*)(''&%%$$%%&%$%&%&'((())('&%$%&%$%&%%&&&'''&&%%$$$#$$%%%&&&'()('&%$%&%$%& %%%$$$%%%&&'(''&&%&%$#"##$%&%%&&&'(()(('&%$#"#$$%&&'''&&%$$$%&''('&&% +&'''&%%$$%$%&()('&%#"!!!#%'()))('&%#"!""##$##"#$$%&%%%&&"!  !"#$%&%$%&%&'())* +))(''&$#!  !!!"#$&()*++*)('&%##"#".###"""!!!""!!  !"##$$#!  !""##$%%&&&' +%%$$$###$##$%'&% +&'##"!!!"#$%%$#"!  !"##""!!!  !##"! ! "%')('&%%%$$$###$$%&'(&%%&&&%&% ! """##$$%%%&%$%&'&''( ''&&%%$$##"! /,+++-/233321135 !""#"!"#"!!  !"!!  !""#$%$$#"!!  !!"#$$%%%&%$# +$%&'())***)*+*)('&&''(()**++,- .024689::9::;$:86420.-,+)('&%$$##""##$$%&'()*,.0234 3332100//.-,--./0112 1100//.--, +--./00112232110/.-.--,,,++*++,,--../.-,+*)''&'(()))(('&&&%$$##$$%&&'('( ''&%$#"  !#$$%%&&''(() ***++*)('&&%%$#"DCBA@@?=<<;<=>@AAB#AA@@??>==<;:::;<===<;:8530.+(%"   !"##"! ( !#$'-7#+1564310/.---./00/.-,+++**)*))('&')*+++**)(())**)('&%%&'(*+*)'&%$$###&)-134555665420/.-,X++*)))*+.0110.,***+-.037>=<;98631/---02589987531/-,+++,-.000/.../00110/..-../0//0247:;;;9741.,*)))**+***++,-...-+)('&9%%$$##"""#$%&(*.25677531/,*('%$"!  !"$&'(('&$#"!  +!#+*)('& '()**++,-./01210//.--,,++,-.0234420.,*)('('()*- ./011222321 22233445566788988765443322110//.-,--.../ ...--,,+*)**+,--.../..--,--.//0//..-,,+*++,--.///0/.-,*)()*+,,,-,,,+++**++,,++**))**܀р큌 +2+z½؅;ބ̈΅σ΄*ĄŅɈ„Q5q-΅+ޅ  +w 4(1 )GG +D ^ )܄E􄓤=>4 3ži1_'^"]\[ZXWWVVUTTSSTVX[]^]\ZYXXY[\]^___`a``_``abbba`_^___``a`a``_^]\[[[ZYXXXWXXYZ[\]]^_ +``aaabbaaa`a``abbcbba`aab12233434 333445677876llkklkjhgfedcba``__^]\[ZYXWXW XY[\\[ZXVUTSSRSSTUVWX WVVUVVWXYZ[\]\\[[ZYXXWWVVVXVVVSRRNONLMMMNNNOPQSUXZ\]__``_^]]]\]_`ab`_]\ZYYZ[\^`bdfghhggf?>??>>===>>??>>=<;;::9876544566531123579:;=>?@@@?=<:9899;<=>?ABDE%DDCCCBBA@??>??ABCDEEFFGHHIIIHHHIIJKMMNMNNNOOPPPQQRRQQPO PPPQRSTUVWV)UTSRQPONMMKJHFCA?=<;986432110`^]]^a246676568:<>ABDEEDDCCBCDDEFGHHIHHGFEEDDCCDCBBAA@?>=>??@??>>==< =>?@ABBCCDDECA>;:9:<=?@ABCDDDCDEFFEEEDDEEEDDBA@?> ?@ACEGHJJKLLM:LJHECBBCDEFGHIIIHHHIKMNPQRSTTTUUVWYZ[\\]]]\\[[ZYYXWVUTTSSSRSSTVWWXXXYYZZ[[\[YVSPMKIHIIJKLMNPQRSTTSRRQPPOP ONMLKKLMMNOPQRSTUVWVUTUUVVVWV8WWXYYZZ[\]^`abbba`__^^]]]\\]]]^^^]]\[ZYXWVUUUVWYZ[\]]^_`a`_,^]\[ZZ[[[ZYXXWWVVUTSSRRQQQPPQQRSTUVWWWVUSRQQPOPPPONMLLLMOMPQQTTTVUTSSRRQPO NNNMLKJIHGEDCCBA BBCB~|{yxvusqonmmnoppoonnoqtuvuvwxxxwvusplhedb`]ZWUS TTUUUTRPONNMNOOPQQRSTRQOPONOPQU^m@LV]`_][Z YXWVSPMJIIJLMNEMLKJIIIJJLMNPQRRQQPPPONMKIGFGHIJLMNNNMLJHFEEFGHHHGFEDDFHKNRVY\`cdedba_]\ZXWVUTSRPNMLLMOQRRQPO#PQSW[`fkossrmhb\XVTSSSTTUVVUTSRPONMLMNOPQQRSUVXXXWTROMKJJKLMNOPR QPPONOPRSTTSQOMKJIHGFHHHGFGGEDDEHIJJKLMN&OOPRSSTSRQOMKIGDCBCCDDEEFHIKLLLKKJIIHGFEDDCDDDEFED{xx{GLQTUSQOLKJI@JKLLMLKJHFEC~ytpnorvy|ABDDEDDCCBA@?>|{zyxwvutttssrqokgda__`abbabdedca^]\\]^___]\ZYX Y[^acefggfdcba``_^][ZXVUSQOMKJKLMOPQPOONMLKIHGEDCBBA"BEHKOTY^dimonkf`ZUQNLJHGGHIJLMNNMLKIFB>;:==<<;:988778899989;;<;:9986520.,+)&$"  !!    !""$&*2&.4675310%///.-+)'&%&'())***))('''&&&''())*++,,+*)(&%$$%&'(()***)(&%&%&(*,/135677642111233210/...--,+*+,-..-,-/259<>@@?<840-+**)***+,+**)('()*++,,--./0/.-+)('&'())*+,,-,,,+*))*+,-,+*('&%$###$%%$#""$%&'((()))*+, +*)'&%$""!!" #$%&'''&&%%$$#$#$%5$$$FDB?<;=B$(+-,+)'%$##"""#$$%&''&%$#""B@=;8779==<);;:::;::8631/../011100012321/-,++,,-.--,+* +,-/12345544322110/.-,+*)('''(((''(()*++**))((''&%$$#"!!  !#$&(+.135542/,(&#"  "%* +,.//0///./0112+10.-+*)(()*,-/01110/.,*(&%$#$%'),.1233210.- .//012221110 11234766544332100///.../0//.,*(&$&()+,-..0100/.--,,,-./0112100/..-..//00112111000 210.-+**)**++,+*)*䀘܁ˁƀ쀓 )*5߅ ƒÄ¾҄ЄԄ.ɆȄɄdž NJȂɈȄɄ)É (*݆cB. 2L< j¿ +%(  += %ބ"0򁍚Ts"eƄ38)]^]\\[[ZZYXWVUUVWYZ[\\]_`a``__^^^__```___^]\\[Z[[\]^_``aabbcccba_]\[ZYZZ[\]^_^__`abbba`^^]^^^_`aabc#ddde3345677899:;;<<<=<<<;;:99877788987mkjiihfedbaa`__^]]]^^_``_][YWUTSRRQPONNMMLLLMNOPRSST UUVVVWWXWX YWWWUUUSRQQPOOONMML +MOQSUVWWXXWXXZ[]^_^]\ZYWWWXXYZYZZ[[\[[[Z YYXXYYZ[\\]]]^]]\ZYXVUUTSSRQPPPOPPQQRSTTUUUVWVVUUTTUTSRSRSTSRQRSSTUVVWVUTSRSSTUVWWXWXXXYZZ[ZZYXWVUTSRSR QQPPOONNNMMLM LLLMMNOPPQQQRQ RQQPPOONNMMMLMNOOPQRSTUVWWWXXYZ[[\\\[[ZYXWVVVUT&UUVVVWWXXYZZ[[[\[[[ZYXVVVWYZ\\\[ZYWVVUV +UTSRQRRSUVWIVVUTSRQPPONMKJJJKLNPQRRRQPOMLKJJIIIHHIKMPRTSRQQRTVXY,---..///0012356665321210.ZXUSQONMLKJJKMOQSTUVXYZ[[[ZZYXWVTSRRRSTUWY\^/0+//\ZXVTRONLKIIIJKNQTWYZZYWUTRRRSSRPMJHFFGHHI'HHHGGFFEFGIKMNPQQRRSTTTSRPNMLKKLLMMMKJHGIJLMNOOPPQQRSTVW,-.//0///..--, ++TSSTU,-/01+0/-XVVX-..///.\ZXVTRPOMKJJKLNPRQPMJHGGGHIJJKLLMNOPNOONNOPQSTWYZZYVTQOMLKJJJKKLMNOOPQQQONLKKMORUWWWVTSRQPPQSUX--./1345532100///.--,--YYXWVUTSRRSUY./00100//..-ZYXWVWWWVUTSSSTVX-./035677765443456676555667876543210/010.--./12344455421/...//012467642 46764211000134568::85310/...//0135689::9987676544333445566678:<=???>=;:;;<=>>>???@@@?>==<<<=-<;976566777665578:;=><95212345789:;<===<;:999:;=?ABDCCDDEDCBAABCCDDEEFGIJKLLLKJOKKKLLMMNNNOOOPQRSTTTSRRQPPONNMMNNOPPPQQRRSSTTTSSSRPMJGEEFHIJJIHFC?<72^[[]0245778987655444568:=?@ABBBAA@??>= +>?ACEFGHHHIH GGFEDCCCBAA@??>=<; +<<==>>??@@A@@?@ABCEEEDDCBA@@AAB CDFGHIIHHGGFEEDCBBBCCDDEEEFGHIIJKKLLLKJJJIHGFGGHIJKKL KLLMNOPQQRRRQRSRQPOPOPQRRSRRSTUVUTSRQP.OONMLLKJIHHGGGFEDCBBCDEFGHHIIJJKKKLLLMNNOOONMML KKLLMNNOOPQQPPONMLMMNOQSUWWXWVTRPONMMNNNOPQRSTTUVVVWWXYZ\\]\[ZYXYYYZZ[!ZZZYYXWVUTSRQQPPPOONNNOPQRSSTUVXXYXWUTSRQOMLJJIH GHHHJKKMMLKIFEFGFFEDCBA@??@@AABBCDCB|zxwvutttuuwy|ABCCCBA@}{z{{zyxvtqnjea]ZXVTRPONNNM4NOOPPPOONNNOPQRSTTUUVXYYXWVTSRRQQQPPONMMLKKLOT\i=FNSV WXYZZZYXVSQPONMKJIIIJIIHHHIJLNOPQRRSTTTSQOMJIHGGHIJKIHGFGHGFEDDEHKOSX]aeffedccbba_][XVUTSRPONMMMN1OOPPOONMMORVZ^befgffedca_][XURPOOPQRRRQPNMKKKLNOQRQPONLLLMOPQQPNLKJKLMPRTVVVUSQOMLLLJIJKLJIHGF-GGHIIJKLMNOOONNOPQQQOMKJHGFEEDEEEFFGGIJKLMMLLKJIIHHGGGFFEEDDDCCDCC~~ADGJMPRTTTSRPMKIGFEEEDC~{zz{|~BCDE DCBA?=@!""#""!!@?=<;;:86530-*'$#"!   !!!  !#&*2#)-00/.../000/.-+*)('&%&&'''&&%%&&'()*++,--.--,*(&% &&&''&&%%$%&&''&&%&(*-03688875432210/-,--,++*+,,+*))*,.146899887654321/-*)(())***))('&&&')*+,++***)(('()*+,,+)('&&&'()*+,-..-,+)'&&&%%%&'&%$ +%%&&'''())* ))**+**('&%$$#$$%&'&%&%$# $$#FEDCCBBA@?>? "$&(*+,,,+)(&%##"CB@???@AABCDE###$%%%$##"! :87666778 765320//...-.I/0124454320/.../024678877665443321/-+)('''(*+,,*)('&&&%%%$%&')*++*)(&%$#"!""#%')*,-///.,)&$"! !".-.0//..-,**)))**+,.0133321/-+)'&&'(*,./11222110/0121100/.--,,,-./443322100//.-,+*(&$"!  "$'*,./0///.///0/0//.- +..///0//..-...//.1/-+*)))**+,-..//00//..---,,뀔䀛ـŁ ߅ ߄ބ ݄1&Ӈ҄ ƄRτυ'̇̀Ą$Ԅx +LPʿ񂇇Z7շ)d%+ +  +!  ބU3A +˄$ƿ:}Ż1a``__^]]]\\\[[\\\]\]_`abbbaa_^]\\[[ZZ[[ZZZYZZZ[ZYZZ[\]]^^^_``aaa`_^\[YXWXYYZZZ[[[\]^`abccdcba_^\]^]\\\]]^]^_`ace34456789:<=>?>=<;:98876655443fgghiihhgfeccb aa``_^]\\[ZZYYX(WWVVUTTSSRRRSSTUVWXYZZ[[[ZYYZYVXVUWVVWUTUVVWX WVUTSRPPONMLK LLMMNNOPQRSSTUVXYYZZ[ZZZYXWVUVWVUVWWXXXWWVUVVWWWXYY[\]]]\ZYXXXWWWXWVVUUVVWXYZYXXWV WWWXXWWVUUTTUVUVVVWWXXYZ[[\\]]]^_`abbba`^][ZYXWWVVU0TTSSTTUVVWXYZZ[[[\\\[[[Z[[[ZZYYXWWVVVUUTTSSRRRSSTSSRRQRRSSTUUVVVUTSRQQPPOONNOPQPONMMLLLMNOQRSUVVUTSRQQPPOMLKLLLMMMN OOOPQRSSTUUVVWVUUTTTUWXZ[\\[[ZYZK[[ZZZYYXWWWXY[]_`a`_\YWUTSTUVWWVUSQPPQRSUWXZZ[[ZXVTSRQQRTVX[^01221a_\ZVSQOMLK LMNOPQSVZ/133322100//0013444320/./*..-WUROKHFEEFGIJKLMNPRSSSRQPQSVY\]\[YWVUTTUFSRQPPQRSTVX[^01222110/^\ZYWUROLJIILPUZ/00\XRNKIIJKKJIHGFFGGHIJKLLKIGFDCZBBBCDFHKNQTVXYXXWVUSQOMLLLMMLJGEDEFHIJKKLLLMMNNOOPQRTUVVW+,,-./000/.-,,+VTSRQQRSUVWXYZZZYYXIYYXWURPNMMMNOPQRSSRPMIFCA@ACGKOQRRQPNMMNNMKGA<:>EOZ24430\XUSQOLKJJKLNQSTUV!USQPNNORTWXYXVTRPNLLMNPQRRSU+-/0121/.,+*UVX,ZZYWVUTSRQQP QRSUVX-./0/.-YXWUVWVVW,.02323334567654433223456777654332100/000110/.-,-.13577653210/ 000/.--./0346544432100/(...//000/..-../01234556789:;;:9876656678976433345689;<=>>??>>>==<=<;<<<;;<=>?>:4XI>7568;<<;;=AGOW-.YWX[/00112469;=>>=<;:9:;=>@)??@@ABCDDEEEDCCBA?>;8632234567889:<>ADGJLMN OPQRTUUTSRQPQPPONNMMNOPQRRRQFPONKHDA?===>?@AA@=:7544456789;<>??>>=<<;;:98765322234679;<>?@BCDEFFGGFGHGHHIJIHHGFEDE DCBBA@@@ABCDDEDCBCCDEFFFGHIIJIIHHGGGFFEDCBBAA@AABBCDDEDDDCBAAA@@AABCCDEFFGHHIIIHHGFFEDEEFGGHHIIJKKLLLKJIHGFEEEFFGGHHIJKKKJIIHIJKLLMMMNNONMKJHFEFGHIJ IHGGGHHIIJKLLLMML,MMLKKJIHGGGHHIJKLMMNNNOOPQRSTUVWXYYXVSPNLJIIH +GGGHIJKMOPQRRSSTSRRQPOONNOOPQRRSRRQPOONPQRSTUUUTSQPOOOPPPO NMLJHFECBAA@ABAABBCDDDEGFFGFDC@??>?@ABCDDCCBA@@??@@ABDEFGGFEDBA@@?~~}}|}~??@@? }}|{{zyxwvvvwvusqnljfb]XSPNMLLMMOPQRSR%SSRQQPQRSTUUVVWXYZZYYYZ\^__^][YWUTRQPOKNMLLLMPSZdq@GLPSV[_ceda\XURPOOONMLKIGFGHJKLMMMLLMMNOPPQQRTUUUTRPNKIHGGHHIIIHIIJKLKJIHHHIKMQTX\_bdb`]ZVTTUWYZZXUROMKKKLMMNOPQRQOLJIHJMQUY]_abbcddca_]ZWTRPOPOONMLKKKLNOPRRQPPOPQ-PONNNMLKIGEDDDEEFGGHJKMNOOOPQQQPQPMKJLNLLKKJIHGGFFE-FFGGGFGGHIKLLMMNNNMLJHFEDDDEEFFGGHHIJKLMNNMLKJKLKJIHGGFEC|yxxz|ABDFHJIIIGFECBA@@??@ACEFFFECY~|{|~BCCCB~|{{|?ABCCCA?=vsqqpppommlmmnonnmljigfeccbbbccehkmmmjheeefhiiihgedeeedb^ZVSPOrPQQQPOONNNMMLKKLNQUXZ[\[ZXVSPMJHEC@?>>??ABDGJNRVZ^bfhijiihgeb]YUQNKHD?;989;=?@AABCCDEGILOSX\01334455667789:::98766567*6653db_\ZYXYZ\^`bcdcba_^\ZXWUTSSTTUWXYZ[[\]\[YXVTSSSTVX[^`bcegi654(5556677899:::998776554fdba_]\ZXVTSRSTUVWXGZ\`24566543322dcba`_^]\[YWURNIC=841015:AIPW]acdcb``_``aabbbcdeghiihhgggh$gedcbaa```aa``_^^]]]\]]^`abcccd245789:::;:9::;<<;:864da___`bcd efg333eedcbba-,+*+,-,,,+*+,,-,,++*+, +++**++,,- ...///..-,+*+,--./0/.--,+++,,-,--..//0 +///.///000/.-,+*)*+,,-.../ .---,*++*+***)*)('&%& '''((()(()))*+,+*+***))() ***+,---,+*)()*+-/1210.,+))()*+,,,++***) ((''&&'''(()(((''()*+++,,-.//01 0.-,+**))(('()))***+,++**+**)('&%&&'''('&'''((())**))('&&%%%$$$%&'&&%$%%&'(()(''&%%$$##$$%$#$%&&'&'()*)('('&'(*+,,,+*)'&&&'()))('%$%&'()('&%$$###$%&(*,+*(&$#"! "##$%&')&%$"  !!"##$$$# +$&')))('&&%&&&%%$$###$$%&')*N(''&&%$"!  !$'*+(%"! !!!  !"##"!  "$&(*+,,,+*)('%$ #"  !"#$$$#"""##$%&'&'%$#"!<""#$%%$#! "#$##"!!!"##!#*+(%$#! !"$%&'&&%$##$&')**)(&%$"!!""#$$$%''&&%%$##""!!! !!"#$% +'&%%$$$%$$$  +$!#"#% H  !"##$$$%%%&&&''()*++*)(('''(((''&&%&% $#  + !"#"##$$%%$$#""!! !   !"!   !!""#"!  !!"""##$$%%%&&%&%$$$###$#"##$$%&%%%&&&'( +))*+++*)(&%$%%&&&%%$%%%&&&'()('&&%$%%&&'(())*+,,-..//.,+)'&%$%&'(()***++,+*)('()*+ *))(('((()**+,+*)() (((''%$"!  !"##$$%&%$#! !!"#""!  !"##$$$#""!!! AAA@@?>>>??@ !BA@?>=<<;::999887543210.,)&$"  ! !!!""! "#$$#""!  !#%'*/7 %),/14689851-+)(' +&&%$$%&')*+*+,- +,*)'&$##$$%$%%&&'('''&&'(*+-/134555431/-+)*+-.00/-+*((()*+,---.-,+)'&&'*-0346 54310.,*)())***)(('&&&'()+*)*)((('&$#$$%&'()*+*+,,,+,+)(''('&&&% +&&%%$$#$$$%&&'''(''&%$##"#$$%%&&&'''((''&%%%&''(''&%$%$#DB@>==>?@!!"$%%&%$#"! m "#%%%$#EDDEEEDBAAABD##$#"C@>==? !"#$#"!<:98898877667778887654321100112468:::865556677665445565420-+*)))*++,+B**)('()*,./0100/-,*'&$"!  !"$&(*+-/01221110/-*(&%#!   !#$ .-,*))()*+,./011100/.,+**)*++,--../.-,+*)((()*,-.//012 11100/.,+)('''(() (''()+0/,..---,,+*(%"!%(+.///.-,,+++,,---..//0 11222110/..--,++,,+ ,-//011 /.-, -.////...-πڀЀځÁ܀ ݄ՄՄ م  !܅ۅڄم؄ֈd҆ӄń̈́΂ω ˄΄YŅƄŅʄ  +ͅ΂̈́w6܅ Ft Hܽ^ #))>!5 󆔢x8GƅZTʾ瀑 dddccbaa``_^]\[[ZZZ[\\]]]\]-\\\[[ZZYYXXXYYZZ[[ZZYXWVVUTTUUUVVWWWXXXYYZZ[\]\\\]]_`abceffgggfedb`^\ZYXYYZZ[ +\\]]]\\[[ZYZZ[[\]^___```___``bdfil76554432 33222cccdeefedddcccbbaa``___^^]\]\\[[ZZ[\]^^]]]\[[[Z[ZYZYXXYYZ[[\\\]\[[ZZYYYXXWVVUTTSSRQPOOPPQQRSSTTTUUVWWXXXYYYZ[\]^ __```_^]\ZZYYX YZ[[[ZXVTSRQRSUVY[]^^\ZXVUTTTSSSTTUUVWXXYYZYXXWWVWVWWXYZZ[ Z[[\]]^__`a`a bbba`_]\\[ZZYX +YYZ[[\]]^^_^]\[ZYX WWWVUUTTTSRQQRRRSSRSTUVVWVUUTTSTSRSSRRQPPOPPQQRQPONMLLKKKJJIIJKLNPQ RSSTUVWWXYXWVUUTUTSRQPPPQQRSSTUVWXYZZ[\\\]]^_``aaa`_^^]]]^][YWTRP0RSTTTSRQPPPQRSTUVVWWVUUTTUVY-/01222110/\YVSQONMMLMMORTVXYZYYZ[^012332100//./...--,+TRQPPPOONMLKJHFECCCDFHJMOQRRRQPOPPRSRRQQPOOPQRSTTUVWYZ]/0/.[YX'VTROMLKJIIIJKNQTVWWVTRQOMKIHFFEEEDDEEFFG-FEDCCDDEEFFFGGHIKMOQSTUUTTSRQPNMKJIHFFFGIKMNNONM NNOOPQRTV,-. -,+USQPPPQRRSTTUVWXZ-.#---[ZYXVUTTSRPNMLLLNOONLIFDDEHLORTUV#WWWVVUTTSRPNMLLNQTVVTPKGEEGIMPSVWWWV,WWXY-./010/.WRMIECBDFILMOPRV.1356653210/.--,++VVUTRPMKJJKNRVY[\[YWUSSTVWY./1233210/.-,VUSRSTUV,-/023212345665.66654321///0124566777654310//.//12334455666542122210.,TQOPS,.022332123455421/..---,--./1245554445567899:;;::987766656689;<==>?@ABCD +CBA@@???>>?>>=;82XJ=5/--.047=<<;::;<=>>???@@AABCDCCBA@?>=<:9754458;>BEGIJKLLLMMMNOPPQQPLG?7_SLIKQ\4:AFKNPPQRQPNLJIHHFDA>:764344578765432ba``b36:>BEHJKJK JJJIJJJKKL!KKJIHGFEEDDDEEDCBA@?>===>>?@ABCCCDCCBBA@AABBCBA@@@??@@A +@?=<<=>?ABCBCDEEFGHIIJJIIHGFFEDEEEDCCBABCCDDCCBCDDEEF GGHHIIIJIIIHHGHGFDB@><;:::;<=@BDFHIJKKKLLLM&KJHFDCBCCDDEEFGGHJKMNOONMLJHFDCCDDFGHIIJKKKL KKKJKKLLMMMLKKKJIIHHGGFFGIKLLMLLKKJIIHGGGFGHIJLMNOPONMLKJJJIIHIJKLMMNNONMLKKJJIIIHHGFECBBABBCBAA@???@@AABCCDDDCCDCBA@?@?>>>===<=>?>?@@AABBC +BAA@@???>>={zyxwxwwvutsrqp qpponmkifa[VQNNOQRSTTUVWXXXWVUTSR!STUUVWZ^ac2c`]YXWXZ[ZVQJDA??ABDFGHIKMQYdtBKRVYYYWVUSRPPONMMLKJKLNQRSSRQPQQRRSBRRQPONMKJJJIHFDBCFJMOPPONMLKJJIHGFFFHJMQUY^adfffdb`_^^_`aa_\XTQOMNO:PQRSTTTSQONMNORUX[\^_``aa`_][XUROMKKKLMNOPPPONMKIHGHIJMORTU:TSRPONLKJHGEDCBAAABDEEEFFFGGGHIIJLOQPOOPPPONNNMLJIHHGGGFFFGHIJKLMMLLKJIHFED EFHJKMOPPPONMLKLKIHF&GGHGGFEDB@~|{|~@BCDEEDCCDEFGHHHGGFEDDDCBCDCCBA~zvttv{BDEEEDB@~zwtssttutsrqoonnmlkjgeddefhjjjhfca_^^^]\\\]_adfhijlnoponkheb_\ZXWVUUVWXYYXWUTRQP,QQRSUWY[]_begjkkifb^ZUPKGECCCEGJMORTWYZZYWVTS(RQPNLJGDBA?>=<:989:>=<<;;987655565543321/,)%"  !"#""!!! T!! !"$%&%#"! !!!  !#%*0:#).1220.,+*(''&''(())(('''(*+-...-,+M,,,-,,+*))(''&&%%$$#! ?@!#&()***)(''&&%%$$$%&(*,.0357887532100123320.,*)(())*+,,-. -,+*)*+,.02454321/.,*('&''())***))('&'()*+,--,,++*)(('&&%$#"! !!"#$%%%&'()*,-,,++**)(((''&&%%%$$$%&'('&&%$#"""##$%%&'()))(('('&%$###$%%&&&%$#"!@?>?@ !"#"#$##"""!""##$5#"C@=<<=@D$%&&%$#!A><;::;<<<;:9876665432101134565421/.(/1356777889;<===<;9764210/.../0122210.--,"--./0124567776531.+(%#! !"#$%'()*+*)('&&$#"  !#0//. //001110/.-,+*)))***+,--.//000/..-../0100//10/.-,2-./000/.-+**))((()))*+,--,*(%#!-)&&(-$(,/010/--,+++*+++,--./000/ ..-,,+,,,-,++* +++,-.///-,+*+,-Ȁр܁􁐀Ȁ (Ӆ҆ׄ)% և$ل؂׉Ԅօۄۄׄʅ:ڄك؄ԄЇ +׆7Ʉ[¾ƄɅ Їр>܄8EB V+"¿J4¿"**+ +I+ ! %Ź󄏙Vb󀆋`ǽ?^___` __^^^]][ZYWWV UUUVWXYYYZYXY +ZZZYXXWWVVUVWXYYZ[\]^^__``abcdcdddeefedba_^][[Z[\]_`abba`^][ZXWVWXY[\]^ ]]\\\[[ZYX YYZ[[\]]^``aaba` __``abccdddcbcba``_^]]]\]^_`_^]\[[ZYYXXXYYZ\[Y[ZY[[Y[ZXZ[\]^__`_]\[[\[[[ZZYZZ[\ZYXXWXYZZZYXYZ[[\\]^_]\ZYZYYXWVWWVUTSRQRRRSTTUVW XZ[]^^]\[ZZYZ[\]]\\[ZYYZ[\]]]\[ +\\]]]\\[ZZY +ZZYYYXXYYYZYXYZ[\]\ ]]^__```_^]\[ +ZZYXXWVUTTSRRSSTSTSRRQQPPOONMMLMNOQRSTUUTTSSTTTUUUVWWVVU TTTSSRRQQPONMMLMMMNOOPPQRSTVWXWXYXWVVUUUTSTfUUVVWXYZ[\]_`aaba`_]\[ZZYYYXXWVUTSQPONNOOPQRQQONMLLMNOPQSTVXYZ[\./1223210.-YXWVTRPNMKKJHHGHJMORVXYZZZYXYZ\]///.-XTQNMLBKJHFDCBCEGIKKKJJKMOQQQOMJHGFFGHHIIJKMNPQRRSTUVWWVTSQPONNOQSUWZ\]^/0 +/.-ZZ-.../. -,WTRPNMKIGEEEGHKMQTWYZYWTQOLJGFDCCCBBCCDEFFFGGFGGHIKMNOPPOONNMMLLK LLMNNOOPPQPPOMLKKKJKKLMNOOPQSTUV,,,--.-, XWWVVWWX,-./..ZYYX YYYXWUTSSRQPPOOOPQR+SUX[/0110[VRNKHFEEHKQUXXVQLFB@?@BEHJNQTWY[\/0/-WRMIGFGHIJIHFGJPW.13443332-10/.--,,VTQMJHIKOSWYYYWVUTTSTTUUVVWX-./0112221$0.-,VTTT*++,-./012444310//.//001223343210.701356789::;;::9887765544332211222344567887641.+QNOR+-023210/.///..-.//0$//0247:;<<;:8766678:;;<==>>???>>=<<;:2;<=>?@@ABCCDCBA@@?@@BCEFGHHHFDBA?=<;:86420.-,-.0123'445565543322212321a134468:>?>??@@@ABCDEFGH IJJKLLMNNNOONMMMNNNOOONOOPPQPPONMJGC>:5da37ADEFGGGHIJKLLMMMLKJ KKLNOPPPOONMKJIHGGFEDCB@?=<<;;<<=>?@ABA@@?>=>=<;<=>?@AAA@?=;:999:;<==>??@@ABBBAA@@???@?)@@AABCCDEGHIJKLLMMNOOPQQPONMKJIHHGGFFGGHHI HGECAAABDFGIJIIHHGGGHIJLMMMLKJIIHHGGFEDEFGHHHIJKLLLKJIHGH"IIJJKKLKKJJIHGFEDBA@?@ACDFGHHIIJJKL/KJJJIIHHGFEDDCBBAA@@?>|{z==>@ACEGHIJJKLMNOOPPQQRQPOMLKJJIIIHGFEEDDDEDDCBAA@??>=<;;;<=>>>?>? +@@AABCCDDDEDCBA@?>>>?@??@>?@?@A@?>=>???@AAA@@??> ???>>>==<;vvuutMssrqponmlkjjihfdb_^^^`aa_]ZWVVXY[]^^]ZWTQONLLLNOQRSROJD?;88;@GNRSOH@:6568;>ABCBBABDIR_o?FKNPQQRSRRQPOP +ONMLKKLMNOP OOOPPPQRSSSRRSRPMJGECBAABDHLPSUUTROMJIH;JLNRV[`fjmmjgca``bcdca^ZVTRQONMKJIIJKMPRUVWWVUTSRQQRSVX[]^_`_^\YWTQNLJJKMNOPPPONMLKJI JKLNPRSSRPOMLGKKJHGEDCBA@?>=;8likns>BGIHHIJLMNOOPPQRRRQPONMLKJKKLMLLKKKLMNOPPQRRQPNLKJIHHGIJLMOPRTVWWVUSRQPONMLKLKKJIHGECBAABBCDEFGHIJJIIGFFEDCBA~}}|{Dyxvuuvxz{zxtqnlkjihgfefghkmnnlieb`__`bcccbaa`_^][XVUUVX[]_```__^^]\\[ \^`aa`][ZY?@@AABOCCBA?=;96ifc`^\\\]_adgjk65ifc_\ZZZ\^acfgfd`ZTOJEA=95fel<:988776jhfdcbab cdefgi556665456554hgggfecb`_^^]]\\[[[\\](^_`ac23344556678899::;;<;;:8754fdba_^]\\[\],-, --,,++***)))()*)*)))(())*)*+,,,--./0100///...-./0/..-,+*++,-,++*)(('()*+,,-, ---,,,+++,,,-.-,,,---.- ..//000///00/...--,+,-.--,,+ ,+*+**+++,,++*+,--.--,,+***+,-,,++*+, ++***))**++,+*+,-.- +,,+**)((('()*+,-,,,++,--...--,+++,-,+,+*)**)*+ +**+++,,--./.-...--,,+*))(''&%%$$$%%&%&'''&%#!  !#%&'''&'(()*++,,---,++*))(('&%%%$#$%&&''(()*))((('&'&'(()*+,,--,+**))(''&%$%&'&%$#$$%%&&'''(('&&%%$#"!  !"$%&&'''&''()&$"! + "#$#"!  !!"##$$$%%&'&%$#"#$&'()))$$ +%$#"!! !#%'())'&$"! !"#$#"#$ ##""!! !!"#$$ '&&&%&&&&%&%$###$$$###"""##$*%'))&#!!$&(('$ !"$&'))*'%" "%$#"  "%'((('&%$ %$%%%& %####+ !""##$$%%&'&'('''%#!,*!#$%%&&'&&%$" ''(* !"#$%$%%&&''&&%$$#""!!!    !""##$$$%%&''('&%$#$%%&%$#"  !#$&%$%%&' &%$$##$$$%%$##$$$%%%&%%$$##$%%%&&''('&&&%$$#"! ""###$$$%%%&%$###""!!! <:9 !"##$$%%&&'()(''&&&%%$$$##"""!    ;: 9887655443210/-+)('((('&%#"""#$%&&%$#! ! #$#  "'/8!&*,- ,+*)('''(()))()**+*+**+++,,+*(&$#""!!"#%'*,..-+)(&%`&'(*,.158:;;964322344420.,+*))('&%%%&()+-./00//..-,,,-/0245565554310.,*('&%&&'(()((('&&%$$%&''()*)(''&&'&%$#"!! 5358=<<=>???=;976555432 34677653100012100///.-,+++,./0123343321 2456664332 1/-+*+,.0133433344567887520-+)('&%%&&'-%$#"!!!  !"#$$$##"! !"# 7653210//.--,,,+,,,--...-,+ ,,--./00111  10//.-0.0124431/-+*))*+,-///.-*(&$" 0/2 '-379920/..-.//0100//..-,+,,,++***++, -,+**)**++ˀ󀓁ށЁ ؅ +Ѕфֆ!؆هKϊΈςЄ҄Έ̈́!܄ʄȈ̈́L˄ʂɅþ1ύ"ۉڄ؄j߄sƄ_h(-i f ", + + +L!<¾i;NbGŽe"ч҄Іυ ?[YXWVVVWWWXYZYYZZ[\]\[ZYYXYXWXXYZYXY[]_`aba`^][YXWXYXXXYYZ)[\]_abdefgghij555jjihgfffgghihgfdca`_^\[ZY XXWWWVVWWWXXXYXXWVVUUTTTUUVVWXYYZYYZZZ[[Z[[\]^^_ ^]]\\\]^_`abbc ddccbba`_^^]^ +___``aabccdcba`^]\\[ZYYXYYYXYYXYWWVUUUVVWYZ[\]^^__^^]\\[Z[ ZZYYXXWWXXYYZYXWXYZY XWVUTTTUVWXXXYXYYYZZZ[\]^__``_``abbcbabcbbbaa```aabbbaa`_^___^^^]\\[[ZZYXWWVVUUUTTTSR STTUUUVVVWXYZZ[\]]^^^___^^^]\\[ZYXWXXYYZZYYYXXWVUTTSRQPPPQSTUTSSTTSQNJEB@ACHLPSUTTSRQQQRRSSTTTSSSRRQPPOONMNOOPQRSSRSSTVWXXYYZZ[[\[[ZZYXWVUTSSRSTUUVWWV +UUUVVWXYYZ[\\[[ZYYXXXWWVUUUTTTUVUT +UVWXYXWVTSRASUVXZ\/134554310/..-ZYYXVUSRPNLJHGHKOUZ_2220^ZWUSQONOPRTVWXXXWUTSRQQPO PQSTUUVVUTSRQPOOONMLKJIHHJLNQTUW0VUSRPNMMNOPQRSTUVXZ[..///..-ZYYYZ-...[XVSPNMKJIIH3IKNQUWYYWUSPNKIGEDDCCCBBAA@><;9:;>BEGHIIIHHGGHIJKLMNOPQPONNNMNNPQSTTSRQPPPOONMLMNOPQRSTUW,--../.--,WVWVUVWXYZ-YWVTSSRRQ;POMKJIIJLNQTWZ[\ZWSOKIJMQTVUQLFC@@ADFGGHIKMOQTVY[./0//.--YXWVVTRNKHFDCDFIMRV[/12122211000/.,VSPNLLLMNOP QRTUWXYYYXY[./001123332210/.- ./123443210/.-.///.-./0122100///012233445678988654345 4320/.../01232345666530-VQMKJJJKKJIIIKNSZ024565679:;<=>=<;;;<;:887789:<>@BDEFFEDCBBA@@?=<:8765666765432123566531_]]]^^0122334456787667888:;=>>=<;:::<=?@AA@@?>==<=>>?@@@AABCDEFGF GHHIIIJKKLKLMNNONMLLKJKKLMMNNNOPQR QPPONMKIFDBA@?>>===>#==<;:98765432cde4679:;=>?@AABCEGIKLMLKJJJIJJKLLMMMNMMMLKKJIHGEDDCB +A@?=<;;:::9:;<=>>? +>>==<;;;<<=<;9878899:;;<>?@ABCCCDCBA?>=<==>??@AABCCDDE +FFFGHHIIJJKJJIIHGFFFGGIJLMNOPONNMLKKJIJIHIHGFDEEFGGHHIJIIHGFFEDEEFGGGFGFEEDCBAA@@ABCEFGGGHGFEFFFEDB@>zxvutsrrssu<>@BCD +EEFGHIJKLMNMLLKKJIHGEC@>=;:9899:<=>? @@??>==<<<==>?@@ABBCD CBAA@@???@AA@@?>==<===>???@?@A@@AAABCDCCBBBA @@?>=<;;:989:999887776;555432a]XSNJHGHIKLNNOPPQQQPONLIEB@@ADGJLKID@;741//0247;>@CDEFFFEDCCEGKPXalwBGLPSTUUV WWWVUSQOMKLLMNNOPRSTTTSRQPPONLJHFEFGILNPQRQPOOOQRSTSRQQQRSUWY]bfiigc_\ZZ[\\\[YWUSRQQQPNLJIIJLNPRTVXZ[\\\[XVTRRRSUVWY[]^][YVSQPNLKJIIIJKLMMLKJHFEDDDEFGIKNQSUUTSQPO6NNNMLKIFCA}zyxvsqrtu;>BGKLMMLLLMNPQSTUWXYYYXWUSQOMKJJJK JJJKLMNNOPOMLKLLMMLLKKKLLMNOPQSTVWYZ[\[YWSOLIGEDDEFHJMOQSSSQOMLKKLMNNMKIGFEDDDCCBABCEFFGFFEDCCBA~}{xvutuvwyyzzzyxwvutttuuvutrpomkjh,feca_]\\[[ZYXVTSSSUWZ^bfjlmlje_XRNNPTX\^__^]\]]]\\[[ZYXUSQONOPQTVXZ\\]\]]\[XURONNOPQSUVU0VWXYZZZYXWVTSQOLIFC@><:986554332248@BCDEFGGGFFEDCBA@?>>=<;:976ifca`___`bdfhjl7765ieb_]\[\]_adgjmoqrsuw=>?><:8mkjjjigecaa`aabcdfhi556765ihij56765iggffgfecb`_]\[\]_`bd3456777665678889888776654432cba`_^]\*)('''(()*+*+,+*+*)*+*+,-.///..,+*)('&&''(()(*+,-.//0001122110//...///..-,++**)((('()()*++,,--.-,--./0//..- ,,---...///0 //.---,,,++*+*+**))()**++,-,,++*+ ***)(((''('('&'((() ***+++,,,- +..//000///./.- ,,---...///.-.- ,,,+++***))('()*+++,,,---...///...-,++*)*)('&%%%$$%&&'&%&$#! "$'()))((''&''((()(((''&&%%%$$$%%%&'()**+++*)('''&&&%&'()*)('&'&'()('&%&&''(2&&&%%$$#"!  #&),*(&%$""!"#$%&&'''&&% +$$##""##$$%$$##"!!  !"#%&&'&%$#""!""##$$%%%&&'$#$#"!  !#%&'''%$#!   ! !""#$#$$%$$$# $%&''&%%$#"! ""###$$%&&%&%$%%&&'((''&&%4$$$#" !"$'(*++)'%"  "%'('%" !#$%&()*'&$#!!#%' $#! !!""#$$%&''     +"%*  ('(  !!""##$$$%%%$ ##$$$%%%&&&'&&%$$##$%& %%%$##"  +*,,. !"#$%&&'&&&%%$$$###""##$$%&&&%%$$##"!    !"""###$# $$%&'()))**)((('''&%$#" #$$%%%&&&''&%%%$##"#$# $$$%$$$##"!! !"#$$%$##""# +"! =<:99878 ! +"""##$%%&&'&%%%$$#"!   !  *(%"  ! !$'*/5="&*-/00/.-,+*))(()***+,,--,+*))(''&%$"%'(*++*)(()*,---,+***+,-/269;;9630/.-+*)-**)('&&')*+,-/01233321/-,,,-./02344320-,*)('&% +&&'''&&%$#"#$%'(*+--.-,+**)('%#!<98765468: #%'())()*,-./01 0/.,+)('&&&' (())**+,,+*)('('(())*++,-./000/-+)'%$#$%')+-..-,*('''(())('&%$#EDCBC!"##$##""!!BA@@?>=;;:;<=>>?>=<;<4;:9876543210/...///.-,+*))*,.03689:863/+(''),/2344332110.,+*)))***)**+-/0232220/-+)())**)()***)*+)**)(('&%$" !"##875310.-,+,+,+++***))()+,.012332210%1/.-,+++,-./12431.,*)))*+-/024543334///000/.-.-..//0 /..-./2110100/..-,+,--./0.---,,,+܀܁ցɀŁ Մ`ބ +ՅЄ +ڄ  ߅,ԄzЈ̈́τ˄"̄Є̇Ȅ9ԄʄЄ  J݅UÄބԄ,/#Ԅc:e¿1 m, +- #¸¼hT¾¸ÿJĽ ߄ +*߄`][YWVUVWXZZ[ZZYXWWVVVWXZ[\]^_`aabbba ```_^]\ZYXYYZZ[[\]]^^__`__^]\[\\[[ZZYYXXXWWVVVUVWXY[\]^_`aabcefghiijjjkm7876lkjjjiihfdb`^]\\[ZZYYXXXWVUVVVWWWV WXXYZ[]^_`_^^]\\[\\]]^___^^^]]]^_`abcccbccba``_`_^^]]^_`^a__bbaca`__^^]^2_``abcdeeffeeddcba``_^]\\[ZZYXXWVUUTTSSSRRSTUWYZ\]^]\[[ZYYXXXYZ[\^_``_^]\\[\]^^`abcdefffghhijjkkkjjihgfedccba` +__^]]\[ZYYXYZ[ZYYXWXXWWVUUVVWXYXXWWWVWWWVVVUVWXYYZ YYXWWVVUVVVWXYXWXYZ\]^^][XWVUTSSSRSSUUVUUUVX[^`a`_][XVUSRPONNMLLKJIJKLMNOPQSTUWXZ\]_`aaabbccbb`^][ ZZYYXWVUUTTTUVUT UVWXYYXXWVWXYZZZ[[[\]]^^]\[ZZYZ[\\[[[ZZZY XWUTRRQRRSTUVX[_13454320/.-ZYXXXY$WUQNJGDDFINSWZ\[ZWTRNKHEEEGJMQSUWYZZ[ZZYXVUTTTUVWWWVTRQOMLKKLMNOPO8PPQSTVWWVUTSRQQQRTUWWWVUTTUUWXYYXVUSRQQQPOOPQSUVWWVUSQPNM%NNOPSVYZ[YWUSQPNMKJHFDCBA@@??>>?@BCEFGF EEFFHIJKLMMNOPOONMLKKJ KLMNPQSUWZ]//.ZWTRQPPOOPQRTV,-./0/.--,+VUTTTUV+,,,XWVUTTUVVXYYZ[../ +.YWUSRQQPPO!NMLKJIKNTY]0_\XSPNNOPQPNLJIIIJJKKJ0KLMOPQSTUVWXXWUSRRTW-//.YRKE@==?CIQY02431.,UST*+,+USRPNMMNOQRTUVWWXZ./11210/-XUSQPPQSVX--. +--,,-./0112110/..--. --,XWWWX-./012123 456677899:;<===<:86544455443210/.-,-.02343344556778887531/.,WSMFA>?DLU/24321233455666778887766654578:;<<=>>?@ACD +CB@?=<<;;;: 98776554432100/] ^_`a12344676669::;<=???>>=<==>@ABC DDEEFGGHGGGFGGHHIIJKJIHHGHIJKKLMMNNNOONNMLMLKJIIHGFEDCCCEGIKMNMMLKIHFEFFEDCA?=<;::98765'66788876431_]\]_bfl8;=>@ACEGIKLMMLKKJIIHIIIJKKLLM NNNMLKIFDB@?>==<;:;<<=>@ +>=;:::;;<>?>=<;989;<=?@@AAA@??>?@AA@@??@@BCCDDEEEFFFGGHHIHHGFFEEDEEFFG HHIIJJKKKLKKJIHGFFEEFFGHIJKKLMMMLLLKKJ KKKLLMNNOONMLKJIHHGFEEDDDEFFGGHHIHIIJKKLKKLLMNOQRSTTTRPMJGDBA@@ABCBBA@>=<:9onmnpqrrt;=?ADEGHIKLMNONMMLLKJJIIHGFED FGHHHGECA@?>?>=>=<;:987789;=?@AAA@@???>??@@@ABBBAAABCBCEDEFFGGFEDC BBA@@?>=<<<;<;:99898=76543332221a_^][ZXWVWY[^`a`_]ZVRMID@><<=AFLQTTQMIGGGHIJIHGGGHIGFDCBABBBDGMWdwFOX]`a`^\ZYWVVUSQOMLLLMOQTWZ]^^]]]^^^[WRNJHGHHIJKMOPOMIFDDFJNQRSSRRTWZ^__\YWUVWY\^adghhfb]YWUUVWWWVUTSSSTVWWUSPMLLMOQSU(VXZ\^___^[XTQNMMNOQTWYZZYWTRONMMNPQQQPOMLKJBKLORVY[\[YVTRQOMKIEtic^YXY^flt>CGJMPRTUVUTSSSTVXZ[\]\[ZXUSQPOMLKKJIHBIJLNQTUUTROMLKLMOOPONMLJIIHIIKLNPRTWZ]``_\XTPMJHFDDDEFIMQUXZZXTPKGEFG1FEDD~}}~~|{ywvuttuuvwwwvuutssrqponmkigdb`^][XVTQPNM9NPQSTVWXZ\^`ceffe`ZTOMLMPSWY\^_`_^^^_aehjjifc_\ZYYXXXWWVVUTTTSRRQOMJHGGGIKLK4LMNOPPQRTUWY[]_abcb`]ZWTQMIFA>:75322247;@EKOTY]0234565456677789:9::;<===<;:98mjgd`^\[\]^_`_^]\\[[[\]]^__`__^]\[ZZYWVUTSRRSSUWY[]`bcdeeff34455789;<=>?@ABBCCDCBA@??>>>?>>==<;:9875igecba`__`behknoomjfb^[Z[]agm9;<<<:976igd a]ZXWWXZ[\]]^___^]\[\]_aceghggfedefggh4445566778776554ihggfedb_\YWV WXYZ\_be454323456554fdb+*('()**+ **))((()*+,-./0/.-,,+++*+++,,,-,,+*))(()*)('(()**+,-..//001011210//-,+**)()*)**++,--./..---,-.-.---../0///.-, --,...//...--,-./0 +/.--,++*))())(((''()*+,--.--,+**)())*+,-,+,-.//01122321000//..-.--,,,++*+*)*+**)))('()*)())***))())*+*('&&%&%%$$$%%%&'()*+- ,+*)'&%$$#"#$$%&&''()))**+,,-.-,+**)('()))(('()('( +))*++,,++*)*)()*)*)('&%$%%&(*&%'&&'''&%#!#&(*+*(&%#!!$%'(()*)(''&%$$$%%&%%$$#"! !!"###"!"##$%&''&&%$$###$$%$ %%%$#""!!!  ! !!"""#$%'())('%$##""!   !"#$##"""!! !!"##$%')*)'%$#"!"#% %%$$$%%'&%%$$%%&''(&&%$$$##"!  #&),-+(%#""#$%$#!  !! B!!!"##$%%&&''&&%$$%')%! $(#""$#"!  "#$%%&%%%&&&%$#""#$%&% + $""&&''(()*+  !!""##$#$%%&&&'&&%$#"!!!  !!"""!  (('()*-/2 !"#%&''(''&&%%$$$##"""#$%$#"  !"""#"! !!!"""###$$$%& '&&&%%$$$#"""#$$%&'())***))(''&%&&&'''('&&&%%$$#$%&%&&''((('()*+-.///.,*(%#!  ! 222357789 "##$%%&''('&%%%$##"! +""###"!   +  !!! ! *)(('&&%$$%&(*,---,+)'$"!$&'%# +!#(0<%,3798631/--,,,++)((''(*,.1456665X42/,(%$$%&&'()*+*(&#""$'),-..---/135420.,-.024689:9752/-,,,---,,+**+,-./.,*('()+,-./01234"20-+)(()*,.02221/-+*((()*++*)(&&%&'C&''(*,.02210.-+*)('%">6/+(&%&*05;!#&')*+-.//.,++,.0133320/-,+*))((('&'()+-///.,*('()*+++*)(''&%&'()*+-/12320.+)'%$"#%'),.0220.*'%#$$$%%$$$#EDBAA@@@AABBCCBBABCBA@?>>=<;:::;;<;::998876532100/.,+*)('&0''()*+,-/023567651-)'%&'),.012332211235677754210/..--,--..--,,*)'%$$$%%&%&'(()*+,./000/-+*(&$"   "$% :86420///0010//.-./...--,+*))('''(()+,-.0011221 10//..-).023566531/,*))+-140.-,*)((()+,-.///..-,+***+,-.- ,,,--..///0 +0/.,*)())*+,.0.-,΁̀π ׅր׉ل +܅ۄ߆ބ/(%ą΅ʅ"ʈ˄9ф#̈́̅ Fʅ% 6S?1􀆋Ŀ, {#," + +$¿透ý1uj?¼)# dcbaaa``_`_^]\[ +\]^`abbcccdeddccba``_^]\[[Z[[\\]^^___^][ZY)ZZ[[[ZZZ[[[\\[[ZYYXWVVUUTTTUUVWXYYZ[\]^_`a bbdfhj678899: 988nlihfedcccbaa`_^]]\[YXWVUUUVVVWXYZZZ[[\\[[ZZYYYZZ[[\\]^]^_^]^^_` ___`_^_^]^_`ba`_^^] ^^^__``acdefgfedcbaa`_```__^^]]^_`abbbcbcbb`_^_`acdfghiihggfedeeeffgghhggfffgghhggfedcd#ccba_^]]\\]]^__```__^]\[[ZXWVUTTTSST UUUVVVWWWX +YYYZZ[[ZZZYXW +XXXWWWVWWWXWWVVUUUTU VVWWWXWWWXYYZZZ[ZYXVUTSRQRSTTUUVVU TTSRQONLLKKLMMNNOOP QRSTUVWYZ\]^] ^^___`__^^\[ZYXXWVUTUV WWXYYYZZ[\]^_`a`_^^]\[\[ZYYXWaXXWWVUUUVWXZ]a23443210/[XURNKIIJLMNOONMLJIGFEEGIMPTX[[ZXUQNKJIJKNQTWY[]\[ZWVTTSSSTUVXYZ[]]^]\ZXVTRSTUVTUTTSSRRQONMMMNPQRSSRQRRTVX[\\[ZYWVUUVWXXVTQNLLLNOPQRSUVXZ[..[YWTROMKJIIJKLMNOPQQPOMLK +JJIHGFEDCB@ABCDEGGHGHHIIJKLMNOPQRTUVUTRPONOPPQQRRRSRSSUVX,-./.-,-,XWVU=W[/01110]YVTRPNLJIIJLNOQRRRQQONLKKKLNPRSTTTSSSRSSTUUTTRQNLKJJIJLMOQSTUVX-./ -VQNKHGGIMR,/24431/ZUQNMLLLMNNMMLMOPRSSTSUWY\/012233221100/;.-YYXYZ-ZYXWUUUVY-./0123443210/.-+UTSTU+,,WURONNPRTUWXY-./010111234689;;<<<==><;:98889887654322100///0012%33345554320///0234554321/-VQNLLNS,/14545 445667899:98789;>ADGIJJIHFC@><:989:;:9765556543210'a001123468;<<<=>><;:;;;<<>?@@ABCCDDEEFFGFGHGHHIIJIH IJKLMMNMMLMNNONLKIGEB?;864457:=@CEDDCBBA @@@?><;98767"65556678876532b_^_afl9<>@BDFHIKLLMLKJKLKKJIHGFFFEDBA@?>>?@A @?>=<<;;;::998 99:998889:;<;:8766679:<>?@AABA@ABCBA@?> ?@@ABBCDDEFGGHGFGFEDEEFFGGGHHHIIJJJK LLNOQRTTUTTSRQQONMNMMLKKKLMMLLKKJKLMLKKJIIHHGGFEEDCDDEEEFFFGHIJJKLMNONNMMMLKLKKKJJJIIHHGGFEEDCCBAA@A@@?><;:8889:;=>?@ABBCDCB ABBBCCCDEDDDCBA BAA@@??>==<;;:987765543 +221a`_^\ZXWVURPMJGECDCDDFHJMOPOMKJIJKLLLKKJJJKLLLKJIHGFECBA@?>=<;;<>BKWi?JU^cedb^\[ZYXVTQNKJIIKMQUZ_dhlnoolhb\VQMKJJJKLNOOONLJHHHILNPQQOLJIIKMPRTTUUVWYZ[\]]\[ZXVUTTSSSTTUvVWXXVTSQQQRSSTUWXY[\^_`_^[WSOKIIJLOSVYZZZXWUSQQQRSSQNKHGHJNQSSSRPOMMLLMNPRTTUTSRQPPQQPOMLHC?{>>~GIKKLMOSX]ab`]YVUUVWwVUSQPPPQQQPOMLKJIGFDCDFIKMOPQRQQQPPQQPPONMKJHFEDCDFILOQTVX[]^^]ZXURPNMLLMMOPQSVXZ[[YTOIDCDDDC~|zzyzz{|}}}|{zyx#wvtsrqrstuvvvtsqonnnopppolhea_^^_`bc%ba`]ZWTSSUWZ]___][XURPNMLLMNPRSUUVVWWXWV WZ]`cfggfeedeefffdb`][YWUSRPONMLKLLMNOPRSSTTTUUVVWWWXYZ[\]^^_]\ZWUROLGB=96567:=ADHLQV[/134565 67889877665567789:<<==<;:99889::;;;:98nkigfeedddededdcba`_^]\[ZYWVUVWXYZ\]^_`abdfh565566789:;<>?@AAA@@???>>==?ACF$%&&')+/2678630./00//-,+*X++**)(('&&%%IH$%&')*+,-..--,,,++**)(''&$#""#$%'(*+,-/0110/-+*)('''(()*+,./1210-)&#B@@BC"#ECB@?>==>>?@@A@@???>=<:9:;;;::987666788876420/.//0121/-+*)*+-/01210.,*('&%%%&'()*+,,,---,"-/2467887654433443310/.-,+*))(('''& +'''(())***)*+,-!,+*)(&$"  "$86544321100//..-,,+**))())*+,--.//02 +3210/./01233321/.,+*+,-/01 001110//..-,,+**))((())+,-/0111012 110.--,+**)))())+,-/0.-,-񀪁ʀځ̀Łā̀ # +$ԅ+1ڄ)߄ބI +φ ͅȄӅׇم ЅІ8Džτ.х4g77фK -X#l*! + +( (¿?WN+ބPſ)ž@ľ) ҆р 0 eedefgijjigfedcba`abccdeefeddcbaa`__^^^]\\[Z[]^`aaa_^\[YXWVWWXXYYZ[ZXWUTSRQRSTTUUVWWXYYZ\]_`abccdeeffeed +efghh556778777mmmlkjihggfedb`^\ZXXWWXXYZ[\]\\[[ZZYZYZZ[[\^__``__^^^___^^]]]\]\]^_`a&bcbbb``a_^a``aabbbccbbaa`_^^][ZYXWWWXXYZZ[]^_`__^^^]]\[Z[\]^__`_^^]\[[\^`bdfggffghij +ihhgfeedddcba`_^^]]\\[ZZZY XWVVUUVVWXYZ[ZYZ YXWWVVVWWXWXYYYZZZYZZ[[\]]^__``aabaa`_^\[ZYXXXYYZZZ[[[\\[[ZZYYXXWVWWXYZYYXXWVVUTUTSQPQRQPONOQRSSTTUUUVVWXXXYYYZ[\\\]\[ZYYXXXYYZZ[\\\[[Z[\[\ [[\\\]^_``aabcdefecba`aaa``_^^]\[[ZZZ[\]^^__^]\\[[Z[\[ZYXWGXY[]^__^]\ZXWUTSRQPPQRSUWYZ[\[ZYWTSQQQRSUXZZZXWUTRQPPQRSUVWWVUTSRRSTUUVW]XXXYYXXVUUTTUWY[]///\ZXUTSSTTSRQPOOPQRSSSRRSTWZ\///]\[YXWVVVUUTRPMJHHHIKNPSUWXYZZZYWUROLIGFFGHGAHHIJKMNNNMLKJJJKLMNONLIGEDDEHKNPQRQONLLLNPRTVWWVTRPNMMNNNMLLLMNNONOOPQ RSTVWWXXYYZ-...//0010/.y--YXVUUUWY-.///.[YVTROLIGFGHJLNPRSUVWWVTROKIGGHJNQUWZ-./000/.ZWUSPMJGDBAAABCEFHIJLORVZ/010.XURPOQS+-..-,USRV-03677641.WSQPOLJHGFFGHJKMNOPPQQSTUVWXXYZ\/01233320.-WVUTU7TSQQQRUX.035789::;;:975310/.--,VTROMLNQTWZ-...///000///. //0123567899: 99887666789998765444555421/./012221/-TNJHIKNQU,.//011122345567789::;<===<;:98766568:=@CEGGFDB?=;:;<=> =<;;:998767789:;:98 9988776654 55679888::9777999:;<=>?@ABCDEFGGHGFGGHHIIJJKJJIIHGH"GGGFFFGGHJKLLMMMLKJHFECA@??>>>??@BCBA@???@AB @?=<;:;;<=<<;:98*9:;;;:9876543b]XUUW[afl9;>ACDFGHJKMNNNMLKKJ,KKJJJIHGEDBA@@@AABCCDDEEFGHHHGGEDCBA@??>>>==<;::989:;;<<<;:9887778899:;<==>>>? >>>?@ACDFHIJIHIJIHIJJJKKLMMNNMLLKJIJJIIHGGFCGHIJKKLMNOPQRSSSRRRQQRRSSTTTUUVVVUUTSRRRSSTTUUUVVWWXWWWXXYYZYXWUSQPONMMLLKLLLMMN!OOPPPONNMLKJIJJLMOPPONMKJIHHIJKMOPONNMLKJJIHIIJJKKLLMLLLKKKJIIJJKJIIHGFEFGGHIHGHHIIIJK +JJJIIHHGFFEFDDFEDFEEFFEEDDCBCDEDCCBAA@@???>=<;::98877766566655443.221001123334443321_][YXVTRQOOOQRSSRQPONMMNOQSTULVVVTRPMLKKJIGFDCBBAAABDFJOVaqBKSXZZYXXWWVTSRQPONLKKKNQV[afijhd^XRNKJIHHIJLNOPO PPPNLHECCEHLOQRSTUVXZ[[ZXVTRQPPPQRRSTTUTTTUUVWXYZ[\]\[XUQLIGFHLPTXZ\]^]\ZWVUTTROKHEFHLQUXXWTPLHGHILMNNMNOQSTWXUSRTWVUTSSQOMKIGEDCCEGKNQSUWXXXVUTTTVXYZZYWUSRQQRRSRQPNLJHFDEGIKMPRSSRPOMKIHGEEDCDEGIKMOPQRSUVWWWVUSRPQRRSTTU'TROLIGECBA~}|zyxwxy{~|yuronmllmlllmmmnnmljhfdca`^\YWUUVY[]_^]\ZYXWWWXYXWVSQOMLMNOQSVY[\\[YWUSQPOP[QQRTWZ^cgkmnlhc_ZWTQOLHFEEFIMPRRSTUWXXXWVUUUVWXYYZZ[\\]]]\\[ZWTQNLIGEA=;:;>AEIMPRVY\/122333454433345789998877767788999::;;;::9998 7765jihggffggh +gfeca_][YXWYZ\^_`__^]\[ZYYXXYYZZZ[*\]_aej7:<==;853b12369;=??@AABCDDDCB@>=<;;;:;:864d`^\[B\]^`acddcb`^\[[\^`bcfhjlo89998olieb`_]\[ZYXWVVWXZ]aehln889988776667mkjhgfe0ffgggfffeffghhhggedcbaa`__^]\\\]^_`a`_^]\[[\]^_`a`a``___`abd23444544g.---./01 00/001122211101223344555444333222100/.--,+*+,++*))((('() *++,++**)((''& ''()**+++,--.-,-../100011100/.-,+))()*+,--.--,,,+++,++,,---...///.../.-././.-.-..///0/.-,+*)()*))**+,+***)*+*) **++,,,---,,,+,+,-.0122333222100//..-,,+*)('''((()*++*+*)))(()))***+++*)*+*+,-. --,,,++**)*+*+***))('&&%%$%%&&''&&&%&&''(())()*+ ***+++,,--...-./.-../0012100/..-,,,+**)( )))**)))(((''()* ++**)(('''(()*))('&%$#""!!""#$%&()***)('&% &'()**)('&%%$%&()('&%&''( ''&%%$%%&')*)(&%%$$%%$$#"""#$%$$$%&())('&%%$#!  !#$%&'&%#! !"##""!!!""##$#"  "#$$$#""!""#$&&'&$$#"#$$%&'(&%$%&z''&%$"! !#$%&'((('%$" !#$%'('&%#"  !#%'&$"!!"$#!"$%"! !!  !"#$$%%%&'(&% $###$%'$#" !#$%" #%   !  !!""###$#"!  +'&%%&(+.25 !"#$%&''((('&&%%$ %%$$$#""!  !!!""!!   !"! !!!" ##$$%%$$$###"#"!""##$$%%&''()**++***+,-,+,-./.,+*))('&'()*)('&%$$%%&'((('&%$$###$%&''('&&%%$$#$%&%$% $$$#""!  !!! !"!"# """!!!    '&%$$#"!  !!"""!  "$'+1:"(-02110//..--,+**)*,.147:<<962.*(&%&'('((())('%###%'*,.//012221/.,+**+,-,,++,,--./0012210-+(%##$&),.02,1/.---,+(%#"#%(,.00/,)&$$%')*++**+,-/00/-,,-,+)(&%#"5$&)+,-..//..-,,-./0110.,+*)**+++*)('&%$$GGFGGHI%&'(*+-+*('&%$#"#$%&'())**+,-...-,++*++,,-2..--+*(&%##"!CBA@??>>=>>?ACDEFFEDB@><:98877766655565432110/.-+*))*,./010/..--../.-,*)'&%& '(*,-...-,+*)(#)***+++,-.01347898630-+*)'&$""#$&()* +,,,+*))(()))*+**('%$#!  !!"#$54565431/.,+**)**+,-../..--,,,+,,,-.03) %/.,,+++,,-.//01100/.,,+++,--./023 5420.-,,,+*+,-/12343210//...--../0/0 //...---,+,,-.--,,+++,-.-.ہÁŁ̀Áр 2ֆׅބτڄ  + !ɉӅڅ؅׉ЄӄԅӇԄą-τ̅ ҄ +ń%ۉ52 + +8͆̀4^$    0 1#žʾ9*"݅Ŀ (ԅX߈݄hgffeffgfgfeedcddeeefeeedddcccbbaa``__^]\\[ZYXWXYZ[]^__^^\[ZZYYZYXXVUVWXYXXWVVUUTUUVWXYZ\]_acdef34567778889qpponljhfedca_^]\]]^^]\\[ZZYYZ[ZZZ[\]]^_```__^]]\#]^_^_`_`aa```^^^___`aabcdefgggfedccbaa`__^_ ^^]\[[\]^_^]\]\]\\\]]^__^_`aabccdeffeeeddcbba``_]\[ZYXWVUUTSSRSTTUUVWWXXYYZ[\\]^]]^^_``a`__^]]\[\]]]^^^]\[Z[\[\[[ZZYXXWX WWVUTSSRQQQPQ +RRSTTUVWXYZYZYZ[\\[[ZYXWVWWXXY ZZ[[ZZYYXWWVUVVXYZ\]^]]\\\]]_`acddedcb`_^]]\\[\\]]^^^]]]\\]]]^^_^_`_^]\\[\\\[ZXWVWXZ\^_`G_^^^]]]\\[ZZZ[\\]]]\[ZYXWVTSQPPPQRSTUUVVVXZ\_0121a_\ZXWVVVXY[\]\ZWTSRRRS TUWXZ[\]\[[ZY XWVTQONNNOOPQRSUVUTTSR6STTTSQOLIGFEEFHIJKLMOPQRSTUUVVUTRPMJGDBAABCEFFGGGHIJLMNOOOPQRQPNLJHGGHIKMNOOONMKKJJKMOPQRRPNLHFDDDEGHJKMNOOPPQRTUVWWWVTSRQPPOOOPPQRTUWY-.///00122333221 000//..---,--. -XURPPPQRSTUVWVUSRQPONLK LNPRTVWXZ../ +.ZXVSPMJGFEF*EEEFIMQTVWXXXWWVUTUVXY[---../123210.,WUTSSRSRQPNLKJIIJKLNOQRRSTVWXY;XWWVVVWXZ[\\[ZWTQONOPRTWZ./0234567766531/-,+UUUVVVWWXXYYYZZ-./012234556545556667 889:;<=?@A@?>=<<;987653221 2221/-,*U+,./0111234556778999:%;<>@AAA@?>=;::999:::;<=>?ACDEFECB@>==<;:9988665667789:9:;;;=?@ABBCDEFGHHIJKLLLKJIHAIJKKLLMLLKKKJJIIHHGFEDB@=962/,ROMN)-27=@DFGHHGFECBA@??>>>?@ACEFFFE"FGHIIIHGFEDCCCDDEEEFFEEDBA@?>=<;;;:"98765432210\XSOLKLQX`i8;=>?@ABCDEFGFGHGFGGHHHIHGFFEDCBBBAA@@?>=;:99899:::;::99887654333456789::;;: ;<=>?ABDEFGHIJKJIJ +KKKLLMNNOONOP QQQRSTUVVWXXYYZZ[\]\[ZYXW VVUTRQPONNMMLKJKLKJIIHIIJKMNPQRSRRQPONMNONMLKLMLKKJJIHIIIJJKKLKJKLMMNOOONNNMNNNOP ONNMMLLKKJJIIHIJKLKJKLMNMLJIHGGF +EEDCB@?>=<; <<<;;::987876654324100012344321`^[WTPLHFDEFHKMNOPQSW[a3678763`YPHB><<=>?@ApBBCCDGKS^l{DJORUVWWWVUTSQPNLKLMOQSUVVVUTRQQQRTUVVUUTTUVXYZZZXVTRQOMLJIJLPTWYYXWVVWXYYXWUSRQPOONMLKKKLOQTVWXXXWXXYXXYYZ[ZZZ[\\]]\ZWSNIFCCFJOTY^abcb_]ZXUSOLIHHILNQRSSROLIGGHKNQRRQNMOSWYZ[[YXVVVWWWVTQMIEB@?>?@ACCDDEEGJMQTWY[^adeeb]YURQQQSTUUTRPMJHF,FILOQRSTSRPNLJGECCEGHIJKKLLLMNNOPPQRRSTUVVVTSQNLKJ!IHHGGFFECA{xvtstuvxyzzzyxvtromkjijjklkjigffedca_][XUSRQPQQRTUVWX#WUSQPNNMMNMMMNOPRUVWVTQNKIIIKMPSUVWXWWVUTTSRRQPPOPQSUWYZYYXWUSQOLJHGFEDEEGIKMNPQRSTUVWXXY$XXWVUTRPMKJIHHHIJLNPRTVWYZ\/011233445443212234565656766jhgfffghjlnoonmkheb`^\[\4]]]^^__`abcddcca`^]\[[\\^`bdfh55442caa123578:;<=>???@??>=<<;:999:;<=>>>=;964eb`^] ^_`bcdffgffecbaa``aabcccdddcbba`_`_`abcdddeeffgghi54gedcaa`acdfhi55544hgfedcbccdefefeeeddccbbaaa```aaabbca`_^__aceg445ji/./0//00112323432 +11100/..--,+++*))(''&&''(()*+++,++**)))('&''()('()*+,-./4 322110011210/..-. -,,++,,,+++*+,--.//00//.-,,+,-.//..-./. -,,++*+++,,,-,,+*++,,,---,-,+ ,--...---./0/.-,+++*))(('(())**+,,--.-./..---,+,+*+,+*+*)*)))(((''& '''((())***++,+*+*)*+,-,+,,--.//0/.-../01122110/.-,,+++*++,,++**)*+*)*+*)* +)('&&'')**+**)((('(()*)(('&&%$$###$$%&&'''((*+-.,*)'& '())*)('%$%&&'()((''&&' &%#"!!!""# $%&'''&&&%%$%%%$#"  !"##$$%$#"!   !"#$% #"  ""#"! !!#$$%%$#! !"# $$%&&''&%%$##"##$$%&''%#"""#$$%&'&%$##"! !"#$%&'' +)(&$"  "%&' +&%%$$$%%&& ""!"# "!  !"##$ +%%&''(('''&0'(()**)('%#"!""#$%&""##$$$%%%&'#   !!"""# +""! !!""#"#!!   !!  +%$"!!!"%).3 !!""##$#"#" !!! !!!"!!    ! !!!"##$$$%%& '''(()*++,---.///01210/..--.-,+*))(('('&'&&%$$#$%&'()***)(''&&%$%&%%%$$$#$%$$###"###$$%%&&&%&%$###""!"#$$$###"#$%$##"!! &&%$#!  A!"$$! !!"$(.5=#'+./00///..-,+*)))*,-/0/.,+,.7-,++,-.///.,+)((''&&'),.12210/.//000/.-,,++*)('&&&'(*+,-./0122361/,(%"!!"%(,/25676420/-+)'%%&')+,---,*)'&&')+,-,+))*,.0G/.---...-,*(%"  ""###$%'),./023578863/,*))*+,---,*('&$GDBBBDH&()+,-,+*('%#"BA@AC"$%&''()*++,,-.///.-,*)('''('&&%$"B?=;::;<=?@AAA@?>=;986656765544332110.-,*)((''()*+,-,+*)(''(()*,,,+*(&%###$&')*+,+**))())*+-.///..--,*)'%$#$#"! !"#$%%%&&&'''&&&%$$$#"!  !!!""#544333456789::9875320/.-,/--../012233221/.--,,-./0012,++6/.-,,,--../01223332210/..---.../ ...---..././/010/.-,++**++,-/01100/.//0010/././..-,+**+,-/010ـŀہȁց󁇀ƀȁƀ 7܈ نچن؄ׄ>څ߄߅܅ ބ݄̈ ̄ԉԅքӅ҇,:΄ ʆÄքׄ +څM"Ն,˄Ʉ5%_| +$&;'/ +! %   +  m̽&1#ӄW) baa`aabbcddeefgghiiihggfedba``__``a`_^]\]\[ZYWVVVWYZ\]__`___^]\[[ZYYXWWVWWXYZZZ[\[ZXWUTR TVX[]^`abcb cefg4456676655444h +iijjjkkk6676lkjkkllmmmllkjihhggffecba`_^][[Z[[\\]]^]\\[ZZZ[\^]\^][]^\^_]\\\[ZYXXWWXYZ\]_`abc7bba`_^^]\[[[\]_`bcdddcba`___``abcdeedcba`___^^]]\\[[\\\]\\\[[ZYXWXXYYZ[\]\[ZZZY +ZZ[\\]\\[ZYXYYZZ[\]]^^_^^]]\\\]\[Z[\]\[Z["\]^_`abbccdddccba`_^^]\\[[\\\[[ZYXWVUVVWXXYZZ[ZZYXVVVWWWXXXYZ[\]^__`_^^^]\[ZYXWX WWXXYYZZYYXXWXWXYZ[\\]\\[[[\\]^]]]\[ZZYZZ[[\\]^^__`abbccbba`_^] ^^^___^^]\[Z[\\]\ ]]^`abbaa`^]\]^_001G00/^\ZYWUSRPOOOPQSUWWXXXZ\^022321/[XVTRQPQRUX[\]]\[[\\\[YVSPNMMNQSVWYZ[-YXVTRQPOOPQRRSSSRQONLJJIJKLNOP QQRSTTTSQOLJIJJJIJJLNPRTVWXWVURPMKHFEDDEEFFGHHIJKMNNMKJHGGF!EEFGIKMOPQPNMKIHGFEDDDEFHJLNOOONNMNNPQSTVWXWWVTRPONMN.OOPQRTVWXXWUTSSTU,-/012332210/..---...//...---,YYWUROMMMNOQTVXZ[\[[ZXWURPNMLKLLMLKKKLMMNOOOPPQRSUVWXYXVUSQPNMLKJJIHFDBAABDHKORTVVVWXY[.-,++,-./.-./0 /.ZXUSPNLJHGFG HIJKMNOPPQ-RSUW[^1221/-WTSSTUUVVUTRQPPQTW-./1234554310/.-ZYWYZYYY,-../000//00123434445444323 45578:<>?@ ?><;97654323456 544344567899:;;<==>>?>>==<<;;<=>?>>=<;:987889:;<<= <<;::988776656778899:9::;>>???@A@@@ABCBAABBCDFGHIIJKKLLMNMMLKKJJIHHGFEDBA?><;:999:99:;<=?ACDEDDCBA@?><<;<=>@@AABCDEEFGFEDBA?>===>@BDEFGH/GFEEDDCCBA@?>=<<;;::;;<<;:98654gghijjklmo8:<>?ABABCCDEFGHIHIHGFFEEDCCBAAA@@@???>>=<;:988767877666778989: ;<=>?@ABCDDDEFGHGGFEDC DDEFFGHIKLNOPQRRRSSTUVVVWWXYZZ[\]]]\[YWUSQPONNMMLLKKKJKLKKJJIIIJIHGHIIIJKLMNOPQRSTTUUTTSRRQQQPQQRSRQQPOONMMLM +LLLKKJJIIIHIIJJKLLMNOPO NNNMMLLKKJJIJKKKLKJJIIIHIJIIHHHIIHIIHHIGGGFDDCDCDEDDCCB AA@@@??>>=<;;:9876432123Z446799863aZTMHC>;87667:=AFILNQSW\a2320ZSKC;4.+TV-047:<>?@ABCDDDCDDEFGINVbrAIPTVWVUTSRQPONNMILLLMMNOPQSVXYZYXXXY[\^_^]ZWTSRRSTUVXZ\^__^][[ZZZYWVUTSSSTTSSRRQQRSUWXZ[\\]\[\]!^`bdedb_ZUPLHFFGIMQW\`cdca^[XURONMLKKJHGGILOPQQRSQQRTVVUTSQQQRSTUTSPMIFB>IIJKLMNNNMKIFCA@@ABDFHKLNOPQRRQQPOONNOOQSUXZ[\]\[ZXVTSRQPOPPQRSRQPMJHFEEFGIJKLMLLLNPRSSSRQPOPPQSUWYZ[\..///./0012232334565676665556jigfdcbbcdegijkjhgfefeddcccdeghhhgeb`^\[[\]_acdfghijk5434678:;:97656789:;;<;:987mkjhgeddcccbcdeghhiihgedcb``_^]\[[Z[[\]^^_`a`__^^]]]^^`abcdeffgfedcdefghhii43fedca_^]]]^`bdfhijkj +555kjigfedcbba`_^]\\[ZYYY[]_aceeedc-./001223344556777665543210///./..--,-,,,+*))((())*++,,-,,+++***)('''((()*+*)(('''(()*+,-.///./000/.//001433222333445554432110 //.--,++*)**++,+*+,++,++,+*)())*+,,-,,,++***) *+-./000//..- ../0110/..-,,+*++,,,+*+++,,-,---,,,+, +++*))(()))*)*+,-,+,+,+,,,---..///0011221100//..--,,+,+*) ((())***+++,-.-, ++***++,,-..///0/...-,+*)**+, +++,,-..///.-. ---,,++**))*)*+***)))(()*+++***)*+**))**+,,---,,+*)()+*)('&%$##"##$&'())+')&%#"""#$&()***)))**+*)(&$#""#$%&&''' &%$#""!!""##$#"! !"##$$$%&&&%%#"! !"#$%&&&%$#"  !"#$$#"!  "#$$$#"!  !"# """!!!"##$%&'&%$#"! """#$%&'''&%$%(''%#"! !"#%&'))*))((&%$#"! !!""##""!"#$$%%&&''(''&&%$#"! !#$%&&&% && '&%$#"!  !""# $%')+'&%&&%%$#"!!!"$&%%$$%%&&''&&&  !!!"#"!   2234455678 !  !!"""##"!"!"!  +!!!""!!!  !!"#$%&'''() **+++,,--./0/.-,++**))(('''&'&%&%$%$ %%&&''())**+**))(('('&%$%$#$%&%$#"#$#"! !  &$"  !#%$"!! !!#%)/8!&+.010/.-,++*)( ))**+-./000/ 0123321.-+,,-/0245554322110/.--,+*+,-./0110///001223&23346777530,)&%$$$%'*-0245531/.,+*)((() ('&%$$%')***+,,--,+*)(()+,,,+)'%" 6569!!"""$&(,/147:>ACCA>;8520.-,,,++*('%EA>>@E%')*+,,+++**)('&$EB@??@BE$%'()))((''&%%%$$%&'(*+,,+*(&$DA-?>>?@@AABBCDEEDCA?<9754333579:;<;;:865310012232111223321/-+*()**+,-.//.-+)'&%$%%%&''()))('%#!  !#$%&'(()()*+-./000/.-,++*)*+**)(&%#!  !"#"""##$##"!!  !""##$54322123455654433210011210/-,+++,-./01223 110///0012334443322100//..--,--..//0//.---,---..//01110//.-..//011100/.-,+++,-./011233210/.--,++*)(()*+,..///..Ѐ〝Ɂ̀сÀ߀ !) ) 8؄؉%Մلׄ ф҆$ц҄ц؋ ̄ЄφӅτӄ +҅ф˄̅/م؅׆6z܄܄.݄؄Є G/: *% +   rĺɼĈ7@4þ' „Eq*҄ф*@ \]]]^_``abbbcdeffghhhgfedca`^]^_`_^^]]]^^_``abbcdeefghihgedca``_^^]]\\[ZZZYZ[[\]^_`aba`_^^]\\[[[ZYZ[\]^__`___``ab ccdeefffedcbabcdeff334 hiijkkllmm7778 +99:::999887 mlkjihfedccbabcdccba``_^^]\[Z[\[Z [[[\\]]^^___^__`abccdeghjkkkjhfca_]\[ZZZ[[\]\\\[[ZZYZ[ZXWVUVWWXXYXWWWXXXYYZ\^_`abbbccddeeedcba`_]\ZYYXWWWVUUTSTUVWWXXYYYZYXYZZZ[[\]]^^___``_^_``ab cccddeeffedddcba`_^]]\\[[[\\]^_`a`_```aaabbcbbaaaba`__^]\\\[ZYX'WWVVUUUVWWXYZZ[[\]]^^__`abbcddcba`_^]]]\[\]]^^___`a`_`aaabbaa`___^^]]\[[ZZZ[[[\\]^`aba`^]\[ZZYYZZ[\]^/0U//\ZXVTRPOPRTVXZ[[ZXWVVXZ/0233320]YVTRPOOQSVY[\\\[ZXWTROMKJKLMOQRSTTTUVWYZ[[[ZYWVUSRRQ2RRRQPNLIGFFFGIKMOQSTVXYZZZXVSQNLKJIIIJJKKKLMMNOPQQRQPOMKKJJJIIHGGFFFE'FFGHIIJJKKLMNNMMLLMNOPRSTTTSRQQPONNMLKKJKLMNNONOOPQQR QQQPPPQQQRSTUV +UUUVWX-.//0/..///0///...-[ZZYYXWVUTSSSTUUVUTSRRRSTUUUTSRQPOP OOONNMLKKLMNOPQRRRQPONMLLKKKJ KKLMNPRTUVVVUT!UV,-/1344321001123332210/.-XUROMJI%HGEBA?>?ACFGHIIIJKMORUWZ[]]^]]\[ZZZYYXYZZ-./00100/..-. -ZYXWWX,-.//0112333221101234578998876543332 +33345566778766655443445679:<= >>?@@A@?>=<<<;:;<=>?A@?=<:99887776777889:; ::98776554 568:<=??@@@?>>?@A@??@ +CCEEEFGGHHIJKJJIHHGFEDCBA@??>>=<;:9876544332345789:;< +===<<;;:::9 :;<>?@ABBCBBA@?>>?>>=<;<<===>=<:8kheccdegilo9;<>???@AABDEFGHIHGHG HHIIIHHGFEDCCBA BBAA@?>=<;;:99988776 +7789:::;;;<=>>?@@ABCCDEEFFGGHI HHGGFEEDDCDEFFGGHHHIIJKKLMMNML$MLLKKJIHGFFEEDDCCDDDEEFFFGGHIJKLLMMMN MLKJHGFDCBCCDEFGHHIIIJKLLM +NNOPPQRRSSTSRQPOPONNMMLKJKLLLMMNOP OONMLLKKJJJIHIHHGGFEDEFED EEEFFFGGGHHHI,HHGGGFFEECBA?><;:98765432100^\ZXWWXY[\^/011123?221`]ZVSNJFB>;864210//0137;AFLPTVWVTPLGA<62.+TT*,.26:>ACEFGGHHHI2JJJKNRXalxBGLOPQQPONNMMLKJIIHGGFGHILOQTWY\^`a`^][ZYXWVW XYZ[\\]]\[ZYWVWXYYZZZY\^befgec`^[YWVVUUV XY[\]\ZWTQNLKI%JLORUWYYXVTRPNLJIHGGHHHIJKLKIHGGGHIMORS8QPONNOQSTTSQNKHFCA?=<<=>@ABBBCDGJMORTWZ_dhlmmligda^ZVSPNMLKIHGGHLMMNOPPQQPOMJGC~}~BDEFGGGFEDCACDEFGGFD|xusrponlkklnpsuvvvusqponlkigedcdegjlnppomjgc_\YWVUTSSSTVWXZ[[\\\]^^+^][ZXVTSRQQPPOONNMMLLKJHFDB@>>?@BDFHIIHGFEED?EFGIJKLMMNMMLLKLMNQSTUVWWXY[]^^^]\ZYYXXXWWWVUSQNKIHHIJLNOPPOOOPQRSTVXY./01223344432345455566788776654556676677666554gedcccbcccdefghi/hgfedcba```_```aacdfhjlm6mkigeca`___``acdfhjklm65554432dcccd234578:;<;<=?@ABCCCBA@?><;:987mkigedca`_`abcdddca`^]\[ZYYYXXYZ[\]^_`aaa`_]\[ZY ZZ\]^_``ab cdeffggffeffgggffe7dcb`_^]]^_abcdeefghijkkkjigfdcbaa`___^^]]\\\[[ZZYYYZ[[\]*+,,--./001232332210/.--..//000///.../0/...///0/.-,,+*)()))*+,,-,-,--../ ..--,,,--..././00104432210//..---,-.--,++**)()*)('() ()))*+,,-.//01223210/.-+**)))((()*)()(((''&'()())**+++,,--...-..--,,-.-,++*+**))()*+,+*+,-..//0112 1122233344432210//.-..//0101210//...-,+*)())**+,-..//01210//.-,+*)***+++,+**)()**+,-,++*)))('(('&%$#"""#%'()))(&%%%&'(&%#"!!!"$&'()(('&$#"! !"#$%$$%%&''(''&&%$$#$#"  !"#$&'()***)('&$#"! !""##$$%$#"!  + !!!""#$$%&'''&&%%$$#""!!  !!"""#"#$#$%$$$%&'&&&%%$%%&&%%%$ %%%&&%%$###"!! !!"##$%$##"! +""#%&&''&&%$&%$#!   !"#$%&()*)('&%''&%%&    !"!!  531 23467  !!"#"! """!!  !!"#"""!!  !!"###$%%&&'''((('&' &&%%$$##"""!"##$$%&&'( ''&%%$#""!! !!"""#$% +&&''(())**+*)('&'&%$$###"#$%&%&%%%$$$##"! !  !!!"! !('&%$$$%&&'('&%$"! "#" ## !"#&).4;!%(+- ,++**))('&&%&')+-/13578876421100//..-..//01234443210/01110/...0246776531/.--,,-../11221/-+)('&%&(*,-./.-,+*('&%&'()('&')*,+,8+*)((()+,--+*'%#!  !"###$%')+,.0258;=>>=<:8641/,*)('&NO(()**+a*(&$"A??@B"#$%%&%%$$#DCCCD#$%%&&&%$FDA@>>=<;:98789;=>???>=;;:987643223456899986520.-,+**)))*+,-../ 00//.-+**))('&&%#"!  !"#$%$#$$%&' +&&%%%&()+,-.-,+*)'%#"!!!""#$$$#"!! !!1000/001122322100/..-",---./02456654310/..---../0123455--,,,2 ! 4310//.--,,,-./00122110/.---,'--./001100/.-,++**++,,--...//...--../001011100010/..-,-../012232210//. --,,,+,,,++*)*ǀ〞Āځ  ۄ #܉ + !l'ϑ  τ΅ ډ׆ԄɆʅ˃̅ ̅D{ׅL8߆ކ ?(  +2 ( ~Ŀ݄چz hiRƄ+ 9# ̅хЄ B[\]]^__```abcefgfeedcba ceghiihfdb`_ +`aabcdddccbccdefgghihgfedccba`a``__^^^__``aabcbbaa` __^]\\[ZZYZ[ ZZZYYXWUTS +UVXYZ[\]]^_^]]\[ZYZ[\^_`bbcbcccdddeeefffg344456789:;;;<<<;;:9876555i55667887886776565hgghhijklkjjihgedb`___`abbba```abdfhjk jiihgfdb`^\[ZY$ZZ[\]^_`bcdeghiijjiihfecba`_^]]]^_`aba`_^^] ^__``abbcccba`a` +_^][ZYYXXWX!WWVVVUUTSRRQQPPQQRSTUUVVWWXYZZ[[\[ZYZ[\]_`ab ccdefggfeedcdcbccdeef +eedcb`_^]\[ \\]]]^^^___`abcdc ba`_^]\\[[[\\]\[ZYZZ[\\]^^__```aab +aa``_^^]]]\]]^]]\[\\]]^_`a`__^]]]^_``a``^]\[ZYXWWVUUVWXZ\]^^^__///_^]\[ZZ[\^012100//.[ZXWLXY[\]]]\[ZZ[]/12334321]XSOKHFEFGJMPSVWXWURPMKJJIIIJJKLMNOPQRRSTUVWXXWVUTSRRRSCRQPOMLKJIHHGHIKMPSVXZ\\[YWURNKHECBBDEGHIJKLLMMNOPQSUWXYYXWUTQOLJHFFEBDCCBCCCDDEFHJLNPRSSRPNMLLLMNOPQRTUVVVUTSRPNLJGEDDDEFGIKLNPRSSSRRQQPO +PPQRSUVWXXYZ-..//0 11100/.ZXWVVW +VUTTSRRQQQP1ONMLLKLLNOQSUVVVUSQPONOOPQRRRQPOMKJIIJKNPRSSRQPNML&MMNNOOOPPQRRSTTUUUVVVWX-.02467776421//.---,,+USQOMLKKLLMNOPPPONMLLLMLJHFEEFHKNPRTUVWXXXYZ../0//.ZYXXXZ./0123211000///..-ZYXXWX,#-.013444310/.--.//0123345543210/.../.0//01234689:986420.YWVVX-024789::988776778999875324578:;<==>?@@AB AA@??>=<;:;;<=>?@?>=<;:98877666555456678987765443344689;=>??@AABCCDEDDCDEECBBCDDCDFGHIHIIJJK JJIHFEDBA@??>=;:86421 +2356789:::9:::;;;<;;;:::9:;:98765566899:::99899:;;;97kea^\\\^_adhl8:<=>?@AABDEEFEFFFGGFFFEDDDCCCDDDEEFEEDCBA@? @@@??>=<<;:::9:;<>?@BCDFGHHIIIHGFEDCBAA@?>? >>>==<<;;<<<= >>?@ACDDEFFGGHIHGHGFEDCBCDDEEFFGGGHHIIJIJKL%KIHGGFFFGHIKMOQRSTTSSRQPONMMLKJJJKLMNONMMNNNOPQQSTTTSSRQPPOONNMNMLKLKLMLMLMLKLKKJJIHHGHGGFFFEEEDCDDEEGGGFGGFGHGGHGFEDDCCCBBBAA@? >>==<;:9765543433222334455667778"775420]ZVSQONMMLKJGECA???@ACEHJLNOPVOONLKHFDBBBCDEGHIJJKLLMMNNOOPPPONNMNOQTX\`elt>CGJLMNMMLKJIHGFEDEGILPTW[^abb`^[YWWWXXYYXYYYXXWWWXZ[]^`aa_\YVTSSTTUVWXYYZYWTRQRUZ_cgijiheb^[XVTRQ?RSTTTSRPNMLKJIHGGIKMPRTUUTRPNLJIIIGFEEGFFGILMLJIHHHIKLNOOOPPQQQRSRPMKHFDB@?{zy=>@BCDDDEEEFGHJLOQSTTSRQPNMKIGFGHIJHJLMMNNNMLKIHHGGFFEDC}{xvsrrsux{~}yurpppqponmmnoqsvx{}{vqligfeefgghhgeca_]ZXUSPMKIIJLNPRTUVWXYYXWUSQOMLKJ.IIGFDBA?><:99::7kjl7:=@CEHJLNPRSSTUTTUUVWXXYYXWUTRQPNMMLLLKJ KLOQTVXYZ[[-.../0012334566787765432100/0011234565543222cbccddeeef3451kjjihfdb`^\ZXWVWXZ]`dhloq9987mkhfdcbbbcdfhijkkjiih%iijjiihgfedcde4579:;;;:987655678:;=>>?@@??>=<:976kigfed cb`^][YXWVWXYZ[\\\[ZYXWVUUUVWYZ\]^]]^_`bcdeedcbbabcdeghgfedcbabcegjl7 665hfdba_^\[[Z[ZYZ[*++,,,-./0121100/01234433210//..///0112121100//..-,-,+,,--.-,+,,,-,,,+**)('())***+,+++**)**+,--../0//. /..//2122233210/.,,++,,---,++*++,-./0 /..---,++**)**++,,,--./012234321/.-,+,,--.-,,+* ++,,---../.-,+*)('((())**+,+*)**+,-./01122123233445554433221100///./0101212110/..--,-.-,+,-./.-,-,++*+*+,++**) **+++**))(('&%&'()*+ +*))('''()''&%&&'()))(''&&''%" !#%&''&%$#!! !!""# $$%&&'''&%%$ %%&&%%$#"!!  !"$%'(**+**)'%#"  !""##$%%&()* )('%$"! !"#%&''&%$#"##$%&''(('&%$#"!!"$%&%$#$$%%&'&%&%%%$$$#$##"! !"#$$%&%%$##""##$%$#""!!""#%&'(('&%$#"#$%&% $##"!! !!""#"!""!!  !#$$%&&'(() '&&%&'''&' %$#$%   ! ! 41/-,,--.0136 !!""###"!!   !!"""#"""!  + !!"#$#$###"""!  !!!"""###$%$#""! !"#$&'() ((''&&%$$#$%&''('&'''())***))((''&%&%&%$#$#"""!!! !     )(&%%$$#"!  !"!  4!#$'),049 #&)+,-,,+*)('%$###$&(*-/24565420/.../01100/0/30134677530.,+++,--./0112210/-,++-02579::97530.-,+++*+++,,,+*)(''&%%$$$%&()+,--,+*('&%$##$##$&())('&%$%%&'(()))*++,+*('%#" ;:;!"#$%%&&''(()*+,..//.-,,+)('&&&''(POOONLIFDDEHK'(()('&&%>$$##EDDCBA@>=<<=>@BCEEDB@><;:;;<;;:9::<=>?ABCEFGGEC@=9643222334321/.-,*)(&%%%&'()*+,--.-+*)'&%$%&)%$$#"! #&(*++)'$!434 "$%''()*)*++,-,+)('&%%$###""!""#$$%%$$$ -,-.32210/.,+*)((()*-/24688654321223432212211100/. / + 1100/00011100/.--,++*+,,---.--,++**))**)*+,,-, -./0122110//.//01210/.-,++,,./13 0/.-,++*)*ڀ󀃁瀟ꀙǁ΀Ɓ䁏  ݄ދׅք ׆ 81-ÇĆ +ψم ԈӅ҆ ڄۄ؅ +Ӆ ̈І݄܄ф%MDžօ߆߇Eބx݄#L=W' 3  Ą + ".υ]W'iÿ^+ - ]ˆӆ^___^^___```a``___^___`abcdcb +cdddeeddcbabcddeddcccbbc bba`_^^]]\]]^__`abbdeg445 66lkjhgecba_^]^^___^ ___^]\[ZYXYXWWVVUUUVWXYZ[[\]^^_``aba`__^ `acdfg45566676654433eff34455456778898899::;;<<=%<;:987n77888onlkjjkl678777mlkjiihfeddcdddcccb4ccdfhjmo9:;<<<;986lkjjkklm7789998876kiggfghhijjihgffe +ddccba`_^]\[ZY XXWWWVVUUTUVVWXYZ[Z[\\]^_`bbccdcccdddeeedcba``_^^]]\\\[\\\]]^^^]]\\\[[[\[\]^]]]\\]^_^]\[\\]]^]^ __``aabccdccba```___^^^]\\[ZYZ[[\]^]^^__` aaa```___^]\\[[ZYX YZ[\]^_```_^] +^//000//^]\ ]/0011000/ .\ZXWUUUVWXZ\]\ZWUTSSTVXYZ[[YWTQNLIGF GHIKMNOPPONM NOOQRTVWWWVUTS UVXYYYXVUTSRRQPONMKJIHIKMOQTVWXYYXWVTRPNMLLKJKLLLMNOPRRSRPNLJHGFFEDCBAAABCEFGHIJKLMNMLMNPQRRSRRQPNMKJIHHGGGHIKLNOPQRRQQQPOPQQRSTUVVWWXXWWVU VXY-..//00011211001121/.-,YZYXWUTRQQQRRRSSRQ.RSTUVVVUTSSRRRSTTUUVVWWWVTQOMKJJKKLLLKKJJJKLMNOPQR SSTUVWX,--../0'12334332100//.-+TPKHECCEGIKMNPQSTUUTSQONOINNOPQRRSSSRQPPPOOONOOPRSUWXYYXWVVVWXXXWVUTTSTTUUVVWWXYZ[]/122332110/.ZYWVU%VVWWX,-.0246799875320/.---../01222333232100//0011122233444545567778988877655456789:;<=>>?@ABCDECB@>=<;:;<<=>?ACDDDCA?<:75432100/023578776654432211223456789:;<=?@@AAB DDDCCDDEEEFGHIIJIHI HFDB?<986556543200/ 01358;=>>=<;:9:::;;<<=>???@@???>>>=<<<;;;:9987665556678 765ifc`]ZXVTS TVZ]afk8:;<= >>?@ABCDDEDCCBA@?>>?@ABCDEFFFEEDC!BBBAA@@??>>>==<<;;;::99::;<=>??@@?>>==<<;<<=>?@AABA@ABABBCCDDEFEDDCBBA BBBCDDEFGHIJIIHGGFGHGHHIJJKKJJIIIHHHGGGHIJKLMMMLLKJKJKLLLKKKLLMNOPPQQRSRQPPOONMMLKJKLKLMLLKKJIJKJJJKKJJJIIHGGGFGF +EEDDCCBBAA@ABA@A@??>=<<;:987543222344556667789::;<==>>?>>==<;98653222cb`^\ZYXYXWUSRQBRRQPONMLKKJJJIIIJKLNPRTVXY[\^`aa`^\ZXWVUUTTTUUUVWX[]`dglq;>ACEGHIJK%JJJKMORTUWWXWUSQOOPSVY\^_^]\ZYYXWVUTSR9STUVVUSQONMMNOPRSTUVVVUUTTSSSTUWZ]`ceffeb_[XVTSSRRQQPPPOOPONLKJKWJJIJJKLMNOONNMMMLKJJJIFCDFJMOONLIGGGHJKMMNNOPRSUVVUSQOMKIGEC|zyy<=z{zyxvuvx{BEGIJKL#KJIHGFEEDS~{yvtssstuwxz{|~~zvrommnoppnljhffgiknruxyzywuqnkjjjklmmljgd`]ZXVUSRPOMLMMNOOONMLKJIHGFEFEFECA@?>>>?ABDFHJKLMLKHD@<:99:<>?ACEILOPQPQRQQPPOONNNOPQRSTVWXYZZ[..//00012123456899:;<<<;:8765554432345677876566677887765543232345556667mlkigedb`_^^_`bdgilo898mkigfeeedddccbccddde[dddcccddefgggfdb_]\[]_adg566789;<=>???>==<<;;:98omkihgffedcba`^\[YWVUTTUVWY[\]]]\ZYWVUUUVWXYXWWVUUUTTTUUVVWXYZ[\^_`abccddefedeefedbaabdgjlnnnmlkihgedcbaaa`__^^]^-.//0/00112101112210111223210 ///..--,,+++*+,-./ +332210/.-,+,-,+**)*)*)()))**++,-,+,--./ --,---232332100/.--,+++, +--../012/001//.///00//.-...//0 ///...-,,++*)()*)*+*++,,--.-.-./.-.-.-.-./0/.-././01210/ +..--,,++**)*++,,---.-,+*) ((('''((())**+*)))(('(((('&%%%&'()*+++**('%$$$%&'('&$"   !""#"""!"#$%&&'&&%$$#$$%&''(''&%%$%$$#"!  "#$&'()('%$#"!" #$$%&&%$"! !!"##$$###"##$$%$$#"!  !"#$%%&%$#$$$%%%& %%%$%%&& '&%%$%$# $$%%&&%%$#$%%&&' &%#""!!""#""!!""##$$$###$ %%%&&&''#! !"#$$%%$#"!" !!!""##$$$###"%#$%'()))(''&&&''(''&&%%%&&'''((())** '&%%$$$%&&& !"!   +210/-,*)((' ()*,/14 !  !   !!!"!  !!""#$#"!"##$$%$$##" #$$%%&&%%$#$ ##$$$%%&&&'('&%$#"!"#"!"#""!!! -,,+)('((''&%$# $$#""!   ""#$$%%&%%$#"!?""##%&(*-/259 "$%&'()))(''&&'(*+-.//0/.,+*)*,.0244432100//.-,,+,- ,+)(('(()*+,,-,--./13467776420/-,+***)*))('&' &&&''(())*))(F'&&&%#"BB"$&()*)(&%$%&'())**+,-/000/.,*)'&$#!@><<<=>=<;:889;?C#%'())*))(('''&LKJHGEDEGKORUUTQNLJHHIIJgIIIHHGGFFEDCA?>=<==>??@ABCDDEEDB?<:8889:;:9865445689;=?@??=;965445566765420.-,,+**)(''&&''(())(('&&%$##"#$#"!  !"#$%&'''&$! !"$&()***))(''&&&%%$#  +'66654320/.---..013567543211000///.//00010/000/.-,*)(()*,-.2110 //..-,+**)*+,-.///.-,+*)))*+++,+*)*)*+,--./0 ///000100/.-./010//.---,+*+++,,瀑؀π 4ۄ!ه[&څ2҅хφ ՅօՄ؆لԄЅχ߄߃݅ ҄ +Dބ'ք5¿ۄ'$6߅~1 +7F,i  % 'ɄŅ˄ ƅC ZM ʅɀý + /фʅ&7(fffedcbbbcdeffedca`_^^^_``aabbbcccbbbcccdcbcdcb +a``_^^]]\\] +\\\[[\\\]]^]]^^^_``abbccdef445689:;;;:987l +mnnnmlkjihghgfdcbaa``aaa`_^]\[ZZZ[[[\[ZYYXXWXXYZZ[[\[[ZZ[\^_``aabbccdedcbaa`aabddccdcacdccecaaabcegijlm76655iiihhggffedcbc bbba``_^]]\\]^`acdfghhihhgghi566788876kifdcbbccdccb`_` _^^]\\\[[[\\\]^_^]^]\[ZZYYXYZZ[\]^_`aabcbba``_^]\[ZYXWVWVUUTTUVWXYZ[[\\\]\[[ZYZ[ +\\]]^^^]]\[\]\] ^^^__``aababaa``__^^]^^^]\\[ZZZYYYXXXYZZ[\\]^__`a`ab a``__^^]]\ [ZYYXXXYYZ[\]^__`aaa``_^^]^^/0123 210_^]\[[\.[ZZYYZZ[[[YWTQNLJJJKMQTWYZ[ZYWUTTTUWYZ[[YWTQNLKJJIHHHJKMOPQQRRSTUWYZ.-...///.\[YWUTRPONMMLKJKLMNOQRSTUUVVVUTSRQPONMLLKJKLLMNPQR QQPOMKJGECA@@ABCDDEEFFGHIJKLMNOOP@BDEFGFECA@>=<;;:9988777666566789;=@BDEECA=9631001222346789:;;;::98877666555432"34578:;<==>??@AABDDEFHHFEDEFEDDFHHGFEDCB@?=<;;;::998877666789:<=?@?>=<<<=>?@ABCDEEFGHIHHGGFFEDCB@?=:8631a_^^__`ab12321_\YVTRQQPNLJGFEFJOU\c479:;<<=>@ACDFFGFFEDCCBABBCDEFEDCBCBA@(???>>==<;;:::99988877655443344578:;=>?@ABAA@@?>? @???>==<<;<===>>??@AAABBCCDDDEEFFGGHHIIJJKJIIIHIHGGGFEDCCBCDEEFGHI JJJKKKLMMNNNM NPQRSSSRQPQPQQQRRRSSTSR QQQPPOONNO PPQRSSTTUTTSRSRQQPQQPPPONMMLLKKLLMNMLLLKJIHFECBA?>>=>>>?@ABCDCCBAA@???>=>><:::889889:;<%===>>??@@@?>==<;9752/,)POQ*-0358:<=>>?@ ??>=<;:987/665433210_^]]\\[ZYXVUSQPONMMNOPQSUVWXXYYZ[]_1346X531]YVSQONMNNOOPQQSUX]afjnr;>BFKNQSSSRQQQRTVWXXXWVTQNLKKMORUXZZZYXVUSRQPONMLKJKKLNPRSTTTSTUUVWXZ[\]^^]\[YXVUTRQONLKJJIJJKLLMLKKLMOPRRQOMLJHFFGIIIJNOPOMJHFEEGHIKLML]MMNNOPQRSSSRQOMJGDzuqpsx?BDEC@yqjffipyAFJMOOPOOONMLKIHGFEE}||}EF EE}{zy xvurpmjgede:fffghhihgec`^\\]`bdfgfda]YVSPNNMLKIGDB@@BDGJLNONMLKJHGGFEED(EEEFFGGGHGGFDDCDEGJLOQRSTSSRPNKGC>;989:<>? @@@ABCDEGHIJK LMNPRUXZ]`123210/./ 01123455676544332 33456789:;:9876545676543db`^`a12345556667&mlkihgfeeeffghhijjkkllkkjjihhgggffeeddcdeeffggfeedcbaa`abbcdefgi5789:<==>>?,>=<:987mkigdb_][YXXYY[\^_abcccba`_]\[ZYXXWWWV#UUUVVWXY[\\]]\[ZYWVUTTTUVXZ\_acdfghi4hgfdba``abdegijkllkjigfedcbaaabbcdeeefffghij5lkkihggf21112234321101210/.-,+*+,-./32 34554432110122100/.//..--,,+,-,++**)*+,-...///.--,++*+-..,-,+,-../010//..-./..--,+*++,,---,--../. ///0001 10/.-,,+++,+, ++**)))(()*)*+*)*++,-..---,+++***)*+* ))((())**++,+,-,-,-.--,,+,--...///0/.-./..-,+*+++,,-,,,++*)()()))**+*) (('('''(()#('%#"  "$&()))('&%%%&'(*++*)'%#! + !""#$$%&'())('&%$##"""#"!! !!!""#$$%& '&&&%%$$##""! !!!""#$##"!  !"##$%$"%&'()**++*)('%$"! !"#$%&%%%$$$#""###$$$%&&&''(( +))('&%$$#$%%%&&'('&&%%$$#""#$%')+,*('%$#"!  + !#%&'&%#"#%& #"!!  + "#$%%%$$#"!  !"##$$%%&&'&% $##"""##$%$#"!!  !#$&(*, + + !!  ! !    !"! +*+,,,,*))((''&%#"!!"#&*-1 !!"!!!  !    !!!"""#$##""!!!"!!!  !!"#"#$%&&'''&&%&%&'&&&%%%$#$%%%&&' &&%%%&&&''&&%$$###"""#$#" !!  (('&&&%%$##"!! !!""#$$%&'&$#!  !"#%'*.1479 "%(*,-...--../010/.,*(''(*+./1110/.-+*)(('&')*+,,-,+++,-.//01123332110/..-,+*)'&%$$$%%%&&''&-'()*+++*('%$#"$%%&')*+**))(&%##"EFF#$%%&'(())()))*++,-0,+)(&#!>:6557; "##" <74347<:86433234755666531/.--.023555420-+)('&&%$#"  !#%'(((''&%$$$###"#$#"!!!"#$&()*+++**)(&$! !!"#""!!! !"#$%& + -,+*)))**6544321232123 2211000///..-. ---.2110//.-,--.//01210//.-,,+*+)))**++,,--,,+*))(''&&&'()+,./012223322110/.//01223210/-,+*+,,-...//00111110112̀Ҁ偉Ӏ څ  %߆ބ +߄ރ߅ ܄ + <Ȋڈڄщ҇Շֆ +܄݅߄ ؄׆&2ȅDž(ԄU؆\$)"  +> 6  +  A- Ƅʆ ɅȂdž ƄDŽƄŅU* ~¼'̄̈́̄˄ 5'P@-DΉPgij klmlkjheca_^__```abbbccdddedc bbba`__^]\[ZY ZZZ[\\]^^_`a``_^^__``abcdefgghiklmmmlkjihggffgghhiijiihgfeededdccbaa``__^^^]]]\\\[[Z[[\]^__```__^]]]^__```_`aab aa`_^^]^___`abbbdcba`_`abcccddefgghggfedcba`_^^]^_`abbbcdba`_^^^] \\[[[\\]^_^]^]]\[Z[[\\]]^^]]\\\[\\\]]^_`aabcddeefggikm778oonmlkjihgfedba`^]\[[Z [[[\\]^^__`aabcdcccbba`_^]\[[ZYXWVUTTSTU VVVWXXYZZ[\[ZYYXXWXWWVVWXWXXXYYZZZ[[[\\\]^^___`_^_```_^^]\[ \\]^^_``aabbcdefedccba`_^]^___``ab1 22332210^\[ZY+XXXYZ[[\[[YWURPNMLMMNPRTUVWXXWVUSRPONNNOPRRSRQQPNMKJJJKMOQTUVWWWVWWXYXWWVV+,,-...[ZXWUTRRQONMMLKJIHJJKLMNOPRSTVWXYYYZYYYXWVUSRQQPPOONMLKIGFEDDDEFGHIJLMOOPOONMLKJIHGGFFFEEEF GGHIJLNOQRST(UVWXYZZZYXWVUSRQONLKJIIIHHIIJJKLMNOOPQQRS RRQQPPPQQRRSTTUVWWX YYZ-../0011210//..-.\\[[ZXVTRQPOONOOPPPQ%RRSTUVWXYYZZ[[[ZZXWUSRRRSUVWWVTSQONNOP ONMLLKJJIHIIJKL(MMNOPRSUWZ^023332110///...-YWTRPONNNOPPQRQQRSTUWXYZZZYYXWVVUTUWY[./.[ZYYY--./0110/-+TRQRSUWWXWXXYXWUSPMKIHIIJKLMNNPRTVXY[\\./0 //0001234554321010123345433232334455666778899::9988899:;<=>>?@BCEFGHGFEC@>=;:987656 789:<=?@@A@@???>=< ;;;:987665678:;=?@BCEEFGGGHGGFE +DCCDEEEFFHIHGHGH GGEDCBBABBBCDDEFFGHGFECB@>=;97644344679:<=>?>?@@@?=;74`YTPOORV[ae456 79<>ACEFFFEEDCDCDEDEDEFGF +EEDDCBAA@@?> +??@@@AA@@@?>?>=<<;<<=>>??@ AABBCCCDDCCBBABCCDEFGGHGGFEEDCBAA@@@??@AABBCCCD +EEEFFGHHIJKJIHHGFGGHIJKKLKLMNNOOOPQPPOOONMNNNOOPPQQQPPOONONNMLMNMMMLLKKKJJJIIHHGFFEFFGGHGGFEDBA@>=<;:99989:;<<==>?><962/,SNKGC@=<<>BHP-16:>@B AA@@@AABBC2BA@?><;:9877665554432210`__^][YWTRQPOPPPQQQRSSTUUVWGXXYZ[\]^^^\YTPKGDCCDFHJLNOPPQRTWZ^chlq;>ADGJMPQRSSSRQPONMLKJHGFEEFGIJLMNMMNOPQRSTVWY[]__^][YWVUT +UVXZ[[ZYXXWVVVUUVWY[]]][XTQNLKL KKLMOQSTVVURNLKIGFFHIKKKJJJHGGFFEEFHJLNONMLKJIJKLMNNNMLJIGFDB}zz|CGJLMMLIGEDCDFHJMOPPPONMLKKJIHFED~~}}|zywutrrqpppqrsuwxz{|}}~ytokgdba`aa bccddcccdc bbbaa`_^^]\[\ZYWTROMKJIHHHIJKJIHHHJKMNONMLJIHGFFEDCBAA@OAAABCEGIJKKKJJIIHHIIJKLLKIGDA>=;;<=?ACDEFFEECB@>=<;;<=?ABDFGGHIJKMOPRSTUVXZ\^0121/[XUSQOPQSTUWXZ-../00123345556655543456678899::9987665444343fdb`^]\\]^`c34679:;::988767654332def3fff334556778899987 8777mlkjhgffedddcccbaa`__^^^_`aabaa`_ac24679;<=>>==<<;;;<;:98nlkihgedba_^]\\[\\\]-\\[ZYYXWWVVVWXZ\^_abcccbba`_]\[ZYYZ[]_abddeeefedefghi55665jigedcbabbccd efgghhhggfef23455666777887764310//.../0121000///..--,,++*+,+,-,+,-.//0112321232100//...-,,,++*+,-.--,+,,---,++,---./.-..//./001110//.-,,++*+++,,-,+,+,- ...--,,++*)*)()**+*+,,-.././/0113221100///..--,,+**)*+,-,-,,++*)()**++,+*)()*)() **+++,,,---.-,-,-.///00011100///. ---,,,+++*+,+,(''&'())*)'&$#!""#%&&'( '&&%$$##$$$%$$##"!  !"#%&'&'&&%%%''&%$$$##""!  !!"""#$$%%&'&&%%$##"!  !"#$##"!!  !#$%&'(()))(('&&%$$#""!! +!!"##$$%%%&%$%&%& +'&'''('&%$#"#$%%&&'''('&%$$###$%&''&%$#"#""!!  ! ""#$&''(*, '%$#"!!!""#$$%$# $%&&'(((''&&%$%&'( +('&&& #"!""$%&&''&%$"  !!"##%&'())**  !   !"! ! !  ! +'%#"#%'*.0  !!"!!  ! ! !   !!" !!!  !!!""##$##""!"#"#$%$#" ###$$$%%$$$#"!"#"!  !  (''&%$""!""###$<%%&&''('&%#! !!"#$&(+.147 "$'),-...--,+**))(''&%&'(()*)*+,-./012344321/.-,+++, +++,-./000//. /1234420-+)'&%%%&()*,--,*('&%%$$%&''&&&%%$M###FFF#$&(*+++*('&&'()*+,,+*('%$#!@><<>A#%'((('%$#"""$%')*++**))(('''&%$#FEDCB2AA@?>==<;;;<=>@ABCCCDDEGHJLMNNMLJGC@<964210001222321100//.-./ .-,+)(&%$#$%&&&%%$#$$%'())(('&%$###"""!"#$%& %%$$###$$%$"  !"###""!   !"""##$&#"!  !!"#/.-,+*)))*+,--../0 +0//5443322210///...-. -,,+++,432100/./..--,++**))**+,-.//0//..-,+*++,--./0111220/.-,-./01ɀۀȀ怐큍Ȁ Ɂ߀ >ه! + 0%( ߅ޅ߄&+'ƄLJ.̄ˇч҃ӆۅ ۄ^ل0¿ʄ9@ބ#Å̄ 9 ^¿  󀈏 > Ą +Ɇˆ… +,61B(j +5 # + c.?΄͇Cfghijkklkjigdb`_^^_`a`%aabbcddeeffgghhgfedcba`_^]]\\[[ZZZYYYZ[\\]^^__`__^^]\\\[ZZYZ[\]^^__``abbccddccbbabccddeefgghhiijjkkj +iiihhggghhijjjkkllkjigfecb`__^_^]\[\\]^]\\\]]]\^`a`bccbcdeefghi55665ihhhgfedcbcbba`___`aabcdefedccbbaa`__^^]]\[[[ZZ[[[\\\[[ZZYYYZZZ[ +ZZ[\\]^^__^ __`begikl66mmlm7789:%98nljhfdba_]\[ZYXWWWXXYZZ[[\]^_``abccdeeedddcbbbcccbba`_^]\[ZYXWWVUTTSRQRRSSTTU TTTUUVWWXYZ[\[ZYXYZZ[ZYYXXXWVVUUTTSSSRRRSTTUVVW XXXYYZZ[[\]]^^_`_`abaa`___``abbcdefgghhggfeedeffgghi hhgffeddcdddedccba``___``aabcdcb +aa``_^]\[[Z[ \\[[[ZYXWVVUATSSQPNMLKKKLNQUX[]^^][XVTRQPPQRTVWWWUSQONMNOPRSTUVVWWWXXYZZZYVTQOMN%MMLLLKLLLMNNOPPPQRSTVXYZZZYXVUTSRQQPPQ PNLJHECA@@?@@? @ACEGHJKLMLKKJJJIH +IKLMOPPQQQRQQPPPQPPPOONNNMNOOPQQRQP>???@@ABBCCDEEFGIJIGEDB@??>=<;::9 ::;;<<<===>>?@A@ABAA@?>=<<;: +;<=?@ABBCCDEFGHGFEFGFEEFGHGIHGH GGGFEDCBA@@? @@ABCDEFFGGHHI HHGFEDCBBA@@@?@?>=<:84c\VQMJHFFGJNTZb59=ADFGGFFEDEEFFGH GGGHHHIIIJ IIIHHHGGGFEF GGGHHHIIIJIHG +FFEEDCCBAA@?@???>>==<;;:998887 89:;<=>??@ABA@?@ABBCCDDDEEEFFGGGH&GGFEDCCCBBBAAA@AABCDEFGGHHIIJJJKJJIIIHIJKKLMNMLKKJJJKJJIIIHIIIHHGHHIIJJJKJKLLMNNOPONMLKJJIHGGFEFFFGGGFFEEDCBA@?>??@A(BBBCCBBBA@AA>>>=<<<=>?@AAA@?><;;;<=?@BCCD CCBAA@@?>>>=<;;::99887 +6677766544322210/\ZXWWWXYZ[\\]^_^]^^_`_^][ZYXYZ[]`dhl89;=?ACEGHHHGGFEEDE6DCEFHJLMOPQRTUVXY[]_aceeeca]ZWTRQPQQRRSSTTUUUVUUTSRSTUVWXY[]_bdeec`\WSPMLJKLMOQRRRUVXVTRRROML JJIIHHGFFFGGHG,HIKMPQRRPNLJHGHIJLMNMLKIHFEDCBBBCEGIKMNNNMLKJKKLMLJIHGFEEDB}|{{zzywtqnkhfdcbba`^]\[[\^`cefgghiklmmn3onmljhgeededca^\YWUUUWXZ\]^^\ZXWUUVXZ\^^]\ZXWVWXYZ[\[ZXUROKHFEDDEEF EDCBA@??>==<=>?@BDFIKLNNNMKJHGFFGHIJJJIHGEEDEEEFFFGHGFEFGHHIJKKLMNOQRSTUUVWXYYZZYYYXXXYZ[..././/01233444332110 122345677888789 88776655544322dcbaa``aacd34579;=?ABC +BA@?>==<;;:;<>?@@@?><:9754567898776 7889::;;:::99876lkigeca`___`abcdedcba``_^1_a2368:<==<:86434568;<=>=<;:87lkihgfedba`_^]]\[ZYXYZ[\]\[[ZYYYXXXYYZ[]_acdfghg +fffeddccbbabccdefg34 gffeeedeeefghggfffeedcba``abceffggff23 44566654310/0/./001122322110/.--,++**)))()***+++,--../ ...-,,++**))())*+++,,,--.//0/01212 322110//..---,-,+,+,,,+,--,-.-./012100//./..--,+*+++,-../.---,,,+,+++**)*+***)(()))**++,,--..///001 100///001100//..--,++**)*+,,-.../.--,,+++*)((''& '''((()))()))**+*++,,---,,+***)))(((''&&%&' ((()))***)( ))*++,-..//0///..--,+, ++,,,-..//001 +00/..---../0001112223332221100/0/.-,+*)()*))((':((''&&$##"!!!"#%'*+,,,*)'&$##"##%&'((('%$#"""#$$%%&&&%%%&&'&%#! !"!"#$$%%&'(((''&%%$$#$#"  !""##"""!!!  !"#$%$$###"#"#$%&%$$$##$%&&&'''''&&'&&&%%$$##""##$%&&&''& %%%&&')*'&%$##"!  !"#$##"!"!"#%')*+**)(('''&'()))**))((''&&&'(()**+**)('&%&&'(()&'()('&$#"! ""$%&''(()**)(( !!! ! !!"!"!"!  + !!!"!! ,(%#!  !"$'+/ !"!! !  !!"#$%%%$$$#"!"#"!  !"!  ! """###"""!!!"##$$%%%$$##"""!!"!  !!!"#$%$#"#"""!! '%$$##$$%%&&&'''('(()))(('&&%%%&&'('()+.14 !#$%&%%%$$%,$$#EEEF$%'(*++,,,---./12345666531/-+*))**+++,++***+,-..//02357998630-*('&%&&&'()***,,-,*)))'&%$% &'()+,--,*)'&'())*))(&%$#""!!"#$%&'& +'(()))(('&%$#"B@>=<;:988765433210 +12345567789875432)110.-,+**+,-.//0/.-,+*++-./000/-,+++,-.//0/-,)'%$###$$%%%$$###""!!  !#$&'())('%$#"#$##"!"# ""!  !!  !"#"#0//..-  32210/.//00100//./...--,+,3321100//.--,++***+,--.--,,+++*+,-./00010//..---,--./01230/.--,--./.-.//00111ׁρ߁ۀ  )܄ ل؏ +ي) %ʄ ԄΆ +DždžȂdžƄˆ̃ˆ؅ك؄Մ +Lޅ7˄̄͆?/K/ % <ŷ  + + + Ćˆ   +l*ľׄ&·, >)'R<effghijjkllkiheca`___``aba`aabcdefghgfeedddccba`^]\[ZYXXWXXYYYZZ[\\]]^^___^^][ZYXWVWXYZ[\\]^^_ +```aaa``__^_` ___``aabbbaaa`_^]]\\[\]]]^^_]]]^^`acegijlm67nmmllklmllmmnno777666ll67778899888onmllkjiihijkkk5 iihhgfeededcdcccbbbcba` aabbceeffghiijjjigfda`_^]\\\[ZXWVUVWWXYZ[]^`bdefgffedcba`_^]\\[ZZYYXXXYYYZYYYXXWV WWWVVUUTTSSSRSTSTSTUTUV WWWXXXYYYZ[\[\]^^_`abcdcba bbcddeeffghgfghhijjkjihhgfeddcddefffggghgggff32ddccbbba``_^]\[ZYYYXXXY XXWWWXXYZ[ZZYX!WUSQONLKJJJKMNPRTVWXXWVUSRQQPQQRRSRQONNNOPRSUVWXY XXWWVUTSRQQQRQPONOOPQSTVWYXWVUTSRRQPONLKIHFECBA@?>>>?@ABDEFHIIJIJ3IJJJKLMNOQSUVWXXXYYXWVTRQPPQQQRRSTUVWXWWUTRQPPONNMML KLLMMNOPQRSSSTTUUVVWXYZ[\./,0001100//\[ZYXWUUTSSSTTUUVVVWWVVUTTSSRQPPOONOPPQRSUX[^010/]ZWTSRQ PONLKJIIIJLORVZ]`b1b`_][XVSQONMMLK0LMNPRTUWYZ[\]\\ZYWVTRPNLJIIJKMOPRTUWXZ[\\\[ZXVUTS TUVWXYYYXWUTSRSTSRQPOOPRTVWXYYXYZ-../..--Y XXWVVUUUVVVWVVUUSRQPPPRTVX[./012234455667898765432334556789::98653210/012322110/ 001234456678 +77789:<=?@ABCDEFEEDDDCDCCBA@?>?>>>=>?@A@??>?@@@AABA@@?>=>>>??@@@ABBBCCDCDCDEFFEFGGHGGGFGGGFGFEEDEEEFFGGGHGFFFEEDDCDDEFGHGFEDCBA?>=<;::999:::;:9:;<<= <:864bZRJB=:;>CJQY`fl8:<>?ABDEFFGH +IIHHHGGGFFEFFGGHGFGGGHHHIHIHI HHHGGFEEDDCCCBABABA@@AAABBBCDDEEFGHHIIHHGGFEFGFFEDDCDDDEEFFFGGHHHIIHHHGGGFEDEFGFFFGGGHHIHHHGGHIJIJI +JJKKKLLKKKJK +LLLMMMNNOOPOONNMMMLKKJJJIIHGFFFEEDCDCBCBA@?>>=>??>?@ ?>>===<<<;<==>??@@@???>>=>===<<;;::99::;;<==>==<<;:98765543211010_^)_`acdfghhhgfecba`^][YWUTTVY]bfjlnoqruwz|>?~}{{{~EHJLMNOPPQRTVY[\]^]\[ZYXWVUUTUVW0VVUUVVVWXZ]_aba_[VRMIGEDDDEEGIKMOPQRSTSRQQPOMLLLKJJIIIHHHGGFFEFGGHJKLLMLKJIIHGGGFBCDEFFG'FFE~}}}~BCEGHHGDA}xsoljgdb_\YWVUT UUVVWWWXXYZ[\^adfhijkklmmmljgb]XTQNMLKJ KLMOPRTWY\^_abccdcba_\YURNJHFED$CBA@>=??@@AAA@@?>=<;:998899:;;<;;:::9998887776 +7788999:::;::998 776ljhfeca`_^_`abdefReedccbba``_^]\[[\]_adfhiihfecbbc24679:::9986ljihhhiiihgfedb`^\ZXVTSSRSSTVWY[\^_abcdcddeffgghijiiihhgfedcbbabcdeefghgfedcbcddefghggffeddccbbbccdde 0011122233343210/./.-,--..//0/. --,,+**))( )))***+++,,,-.---,++*)()*+ **+++,,--..././.-.-,-,-,-,++**)))*++,---.--,,+*+,./012332221100//001112334221100/001122210/..--,+,,--../ 01122110/.-, +++**))((()))*++,,---. +---,,+++**)*+*)( '''((()))('('()*+*)*++,-.//010/.-./0/012223343210/012100//.-,,,+***)))('()((('('&%$#"! *!"#%&'()))('&%$$##$$$%%&&&%$#""!""#$%&&&''&'&&&%%$$#$#"###$%&'(())(('&&%$%$$##"!   ! +!!""#$%''()('&%$#""#$$%&''(('&&%$$##"!"""##$$%&'''(( )('&&%%$ %%&'''(('''&%%$$$#$ %&')*)'%# $$###"!!  "$&(*+,,++*('&$#"! !!"#$%%&&'(1'&%$#"!  !"$%&'()*+,,,++*)('&&%%%&&&'(()))('&%$%&%$#$%&&'''&&%&&&'&'(''&%$$#$%&') !""!!! !"!  !"! .)%! #'+/25 !""#"#"#$#$#"!  !"!!!  !  !"!  ! !"!"!"#"#$%&%$#"! '(()*+,-.--,++**)('&%$%&(*-0356789;=?A!CCBBCCCDCCBA@@@ACF$&()**+,-.01210 1122100/...--,&-..//...--.../013456531.+'%#"!""#$%&')*++*)(('&%&% $$$HI%&&'()**+*)(('(((''&%%$HGFEDDD""#$#$##EDCBA@???@AD#%&'('&$"A>;9764310.--,-,-./12466767877530-*(&%$$$% &&&'()+,./012 3343320.,*(&$#$##"! =;:97655568: !""#$%$$$###"#"#""!!!  ! !"""###$%&&''( 111000/ 32110/..-..//01223?222100/.-,++**+,-.//0/.-,,+,,322334455444321/.-,+*)( +)*++,-./001012321 00//..--.../00012232210/.-,,+++,,---././ +ʄɄDŽΆׅ؆τ΄ׅւ׉؆'ۄڄ<х؄ׅ؉φ˄ʆ˅ ъ ۅ܅ۃ܅ G%ڄ[¿? ߅ހT + -'#  0˳     :"jAþſľ4Ƅ  1)fiihhghijjkkkjihgedcbabccddeddcccddde +fffgggffeedcba`_^]\[YXWVVUUTTTUVVUUUTUUVVWVUVWVUVVWXYYZZ[\\\]]]^]\\[[ZZYYYZ[[\]^^__`_^]\\[Z[[\]\\[[ZZZY[Z[Z]]]^`badffccba`_^ +__abcefghijijjjij5444556 +llkkjiihggfghijkkl kkjigfeddcdcccbbbabaaa```__^]\[ZZYXXWXXYYZZYYXYZ[\\]^^_^]\ZYXWVUUTTTSSRRRQQR STUVWXYZ[\]]^_ ^^]]\\[[ZYXXWVWXYZ[\]^^^]]\[ZYZ[ZYYYXWVUUTTSSRRQRSSTTUVVWWWXXYYZZZ[\]^_`_`aabbcddefeeddcddeeefgghihggfefgfg ffeedddcccbbbabbcddeffg32221bbaaa``_^]\[[ZZYYXXWWVWXXYXYYYZ[\]^^_^^][ZYXWVVUSRQPOPQRSTUVWWXXXWVVU TTSSSRRSTTUUVWWXYZZ[ZZZ[[\\]\[ZYXVUTRQPOOOPPQRRRQQPOONNMNNOOPQRSUVWXYYXWTRONMMMNOP;ONNMLKJHFDBA@@AABDEFFGGHHIIIJJKKKLLMMNOPPOONMLKKKLLMMNOPRSTUTRQPO#PPQRTUWXXXWVUSRQPNMLKJIIIJKKLMNOPQRSTUVWXZ\/0/.\ZXWVWXYYZYXWVVUT UUUTTSRQPOOOPQPPPQSUY\^^^][ZXWVVUUUTTSRQPPO PQRTVY.013M210/\ZXVTRQONLKIHHGGFGGHJLOTY^1355431^ZVSPMKIGFFFGHIJLNPRTVWXYXXWVUTSSSTVWYZ[\$[ZXWWWXY[.//.[XTPLJIIJLNPQQQPOOOPRSUV2X-./012322110.[ZXVTSQPOOOPPQQQPPPQQRSTUWY[/0123455655543323334455667787765434545443211013579;<==<:8643 4578:<=>?@@ABABBCCDEEF EDCB@?=<<;: ;<=?@ACDEFEFEEDDDCCCBBA@>>=>>?@@A@?@ACDFGGFEEFGEFEFEFGFE +DDCCBBBCCCDEFEDB@=;8765556667 8899::;;;<0;;:::;;<=>>><8g[NB92/..147;@DHLPUY]adhk79;=?BDEFGFFEDDCCBCDEFGHGFGFEFGHIIHHHGGFFFEEDDCCB AABBCCDEFGHHI HHGGFEDDCBA@?@AAABBCDDDEEEFFGHHIJKKJJIIHHGGFFEEEDCCCBBCDEEFGHHI HHHGGFFFEF GGGHHIJKKLLLK JJJIIHGFEDDCBCDDEEFFFGGHHIJJKJJIIHIHGFFEEDCDEDDDCCBAA@@?>=>=<==>?@@ABCDEEEGGGEEEC@?=9755345566788999:9 :;<<=>?@@ABCD CA@>=;::99987766554332110/ 01122333feeedeffghiiihhgfedca`^]\[ZZZ[\]`behjkmnoqrstttssrqp?qrsuvwyz|~DFGHIIIJKLMNNOPPPQRTVWYZ[[ZZYWUSQNMMMORVY[[[ZXWUUTTSRRQPNNKIGEGGHGGIJLKKKMNMLKLML.KJHFEHIKKLKJHFHJKKLKJIGEC}{zzz{|6{{{|~|wsoljijloswz}~}{xuqmjgdb`^\ZXVTSRRSTVXZ\]^;]\ZWTRPONOOPPONLJHGGHKPV\bfjlllkifd`]XTOLIHGFGILORVZ^aceeedcdcca^[XUSQOMKIGFFEFFFGFFEDCCBA@??>=;;:98889:;>@BDEFGGGHHIJKLMNNONMLKIHIIJKKLMNNONOPRSTUUVWXWWWVVWWXYZ [\]_a123456787654555667 8899::;;;<<;::999888999:;;<;:987656789:;;<;:988766jihfeccbbabbccdeefeedcbaa``_L``aabce3457899:9987654hh455667mlkigfdcba`_^]\[ZYYXXWXXYZ\^`bdgijlllkjihgeedcbcdddeefghijklmnn7 mlkihfedcb cddeeeddcbbabbbcccdddccbbabbccdeeffgghiii32221110/./0///../././..-,,+**)))((()()*+***+++,,--...//010///...-,-. +-,,++**)))*)*)***+,--.00/000/..-,--.///00121112101211223210//./.-.--,,+*))((())**++,+,,---...---,,++***)(('''& +''())*++,,-,+++*)()**+,+++***+,+*)))((('()))***+,-,-./010/0/./010/011210///...-..//001,,+*)('()*))(('&%%$$# $%&&'(()))(('&'('( +)(((''&%%$#$##"""!"""###$%&&'()))('&$#"!!""#$##"!  !"#""!! !!!"##$%%&%$##"###$%%&' &%%$##"!! !!""##$%%&&&% +&%%%&&'()(''&% &&'((()))('&'&&%%$$$%$ %')*+++*)(''&%$$# +""##$%')('&%$#""! !#%(++(&$"  !"#$&'()*+++*)('&&%'()((''&''()*(&#!  !#$##""##$%&)('&%$#"#$$%&')  !!!  ! !"!  !"""!!,3-&!#%&(*,.024 !"#$##""!!! !"#$$###"!"!  !!"#$#"""!!  !"""##$$%%$$##""!!  !!!"!"# """!!!  !!"##"""!!! !   !!! +,,-../..-,+*))())*,./12456789;<<==<<;:;;<==>?@ACEG%&&'(()))***++,-.00100/.,+*)))+-/1232210/..--,,+*))'&$###$#$%&'(('''&&&'('('&%$GGGHIJKM'()***)'&KJJKL'()('&$#C@?>=>>??@@@?>3?@BDFGGFDB?<976678:=?ABBB@><:87643210.-,+*))**+,-../N.-+)'&$$$%%&&&%$#"""#%(+/25678875420-+(&%$###$%'(*-/123444333445554320.-+*)(&%$%&&'''&&&%%$$##"!!   !""#$%&%%$$#"! !!!"!  !"#$#$% +&&''()21100/0012232100///.-../3476543210//..---,,++*+,-/023566776654322101222333443332100/./.-.-,--../001122333Ԁ̀큈ŀ  ؇ ΋҄ Ȉ҈ ͆ ݆م?' ބ̅̈́ͅ ڄل&݅ވׄօ -5) Մم >q (A*  #8¾þ   "22܅)h |¼LJ! 1مppoonml kkjjihhggfeedcbbaa`a`aabccdcba`^]\\[\[ZZYXWVVU VVVWWXXYYZZYXYXWWVUUTUUVWXY[\\]^^^__``aaba`_`a``_^]\\[[\\]]^^__^^]\\[[ZYYXYZ[\]_`a``_^]^]]^_`abccddedc +defhijklmnonmlkkjjihhggffgghhiiihgfecba`_^_^]\\[[\\\]^^_`aaba`_^] \\[ZYYXXXWWVWVWWXYYZ[\\]]\\[ZZYXXW XXWWVVUUTSSRQP$OOONNNOOPQRSUWY[\]^_`abbcccbb`_^]\[[Z[Z[[\]]^^]]\[ZYXXXWXXXYYYZZ[[[\\\]\[ZZYYYXXXWWWXXYYZ[\]^___``abaaa``aaabcdcbbbaaa`aba`_^___``aabbbccbbaa`__^^]]^^^_``a` abcdefgg344322ccba`_^]\[ZZYXXWWWVWXWWXXY[\]^___^][YWVTSRQRSTTUUUTTSRQQPOON OPQSTVWXZ[\]^_^^]]\[ZZYYYXXWVUTSRQPONONNMMNNNOOPQQRSTUUVVVWVVVUTTSSSTTUUTTSRQPPPOONMLKIIHGGGFFFEEFGHIJKLMNONMMLLLMNNOOPPQQRRRQQQPPPOPQSTVWXWWVUTRQPNMLLKKJJKKLMNOOPQRSTTUVWXYZ[\\.\\[[Z[ZYYXWWVVUUTTSRRQQQRSTTUTTSSSRSTUVWXXYXWUTSRRRSUW,.01233210/..--,YXWVUTTSSRRQQOMKIGFEFFHJKLMNOOPRUWYZ[[ZYWUTSRQQPPQRSUXZ]_a110`^\ZXVTSSRRRSSTVWXYZ[[\\\[[ZYWVSQOMKJIHG +GGHJMPSVXZ./013432110/.-YWTRPONOOPQQQRRSSTVY./11233445556543322110/00112343344567876655545566676655443344566789:<=?@BCDEDEEEFEEDC@><:98999::998776 +778:;=?ABCDCBBBABCCDDEDDCBAA@A@??>>=>?@@A@@BBBCBCCDEDDEDDDCDCBCDEFEEDDCBBABCCDDEEFGGGHGGEDCBA@?>==<==>??@@A9@?>=<;:99:;;<<<:85c[SMIFFHKNQTUTRNKHFEFILPUZ`ek8;=@ACDDEEDEFGGGHHIHHGGFGHGFFFEEEDEEEFFGFFFEEDDDCBCDCBAA@@???>>=<<;;;<=>?@A@@???>=<=>???@@ABCCDDEFFGHGGFFEDCDDEEFGFEFFGGGHGGGFEDCBA@@?>>>??@ABCBA BBCCDDDEEDDDCBCDC BBBAA@@??>>=>?@@AABCCDCBBA@?><;:9998899:9:;;<<= >===<;:998876788999:::;:::99887766655544332100///^_^] ^__`abbcddded$ccba`_]\ZYYYZ[]^`abbaa`_^^^_`bdfgijlmlkkjiEjklmnoopprtvy}BBBCCDEEFGHIKLMNMLKIHFEDCBBCDEHKNQSTUUTTSRRQPNMKIJKIHGGGEDCDEFFGHHIJJKJIIHGFEEDDCFHIJKL?KIHGFE|xurponopruy}|wrnjhhhiknpqrqpmjhecb`^]\ZYXVUUTSTU TSRPNLIGEDwCBA@@@BEHKNQSUWYZ[\\\ZXVTSTTUWY[]_acegikmmljfb^ZWTSSSTTTSRPNKIGECBABBCDEEFFFGGHHIJJJIGECA?=<<<=>?@@AA@@@???@@AABBCDDEFGHGFEDBA?><;:9:;>ADHKMNNMLJHFDC EFGHIKLMNOPPQ RRSTUVWXYZ[[\[ZZZYYZ[\^_a12455677888788999:998887665545567787776554443444566778889:9988777678788899:;::999899::;;;<;;:9876554hg feedccbbbcdddeeefefg455655ihgffefgffeeddccbb`_][YWVTSRSTUWY[]_`bcccba`_^]\]^_`acdfghijklm78898876ljhfdb`_]\\[[\]^_`abccdc +ddefgiklno765554332210/...---./.-./.-,,++**))('()*+,+ ,,,--..//012100//...-./..--,++*+++,,,--,,,+**))()*+,--.-,-..//000///...//012345667776655432343210/..-..---,,+,-.//...---,++*)()*)**++,+*)('(())*++,,---..///0//.-,,+*)*+*)*+,-,,+++*+,-.-,--.../0/./.-.-,---../.-.-,--.//0 /..-,,++*))('('&''()**+++**)('&%%$%$%&%$#$%%&'()**++,,,+++**))(('&&%$$##"#" +###$$%%&&&'('''&&%%%$%%%&&&%%$#""!!!  !"#""!! !!!"""##$#"##$%&&' &&%$$#""!!! !!!""###$%&%&&&'''&'(' &&&%%$$$%%&''('&&%%%$$%&'(''&%$%&&&%%$$#"""!!  !""#$%&'('&&%%$%&'(*+,--,*)'&%$$##$$$%&&'(()((('&%$#"! !"$&'( &$#"!"#$$&'   !!"!  $.*&" "$&()*)(&$"!!!"$&),/26 !"!!! !"#$#"#"!  !"!     !  !!!"! !" !!!  + ( )))***++,,--.- ,,+*)(''(()+,-,,++,,-.012345656678899:;<=?ACEFGHHH$%&&''()***)('%$##" +#$&(*+,-..-,,+*('&'&''&&%%$$#"!! !"#$%%&&'&%$#FEDCRDDDEEFGIK&'(())**))(&%%$HGGEDB?=;:9888:;>ADFHHGDA=:7544568:;<<;:8653210/..-,++**))()(''&%#"!? "%')*+,-.///.-+*)(()*+,./0134679998641/-+***++,,,+*('&$#"##$$%$#"! $!!!""##""! !#$$$#"   !"##$$%%&% &&'() 12223221110121012211101210/ ..-,+*))('()*+,./01121100/..-../00112223333210/.-,+**)***+,,--./ +0011234456《ɀԀꁐԀ >لڄن؄ބ߃ޅ؅Æ)̅˄ фф߄ ֆՃև؄ ψń/5ل +݇܉'܆+ׄD*υ%ׄ܅?mJ+ :%Q aý Au%Gυ78_م3: ;E¿-nnmmlmlkjihgffedcbba` aaa``__^^]^]]\\\[[[\\]^^_``a`__^ _```a``_^][ZYXYZYYXXWVWVUVVWWWXXXYYZ[\]^_abdfghggffeddcbaa`_^^]\\[\\\]]^]]\[ZYXY[\_ababddbccc`aa`^__``_ `bcegijlmnmlkjihfedca`_^]^_^]\[ZYXWXXYYZYYXXXWXXXYYYZZ[[ZZYXWVVUVVVUUUTTSTTSSRQPPOOPQRTUVWY[[\]]\[[ZYZ YYXXWVUUTSSRRQPQQRSTTUVWWXYYZ[\^__`__^]!^^`abcddcba`_^\[ZYXWWVUUTUUVXYZ[\]^__``aaa``_^]\\[[[ZYZ[[\\]^`acdefffedcba`aba`aaabba`_`_^^]\\[\]]^___`___^^] ^__abcdeghhihgeca_][[Z[[\]]^_`abccdcba`_^]\\[[ZZYYYXXWWVUTTTSSSTUUVWWXYZ YXWUTSRRQPONOOPQPPOONNNM0NOPQSTUWXY[\]^__``_^]\[ZYWVUTSRQPONNMMNNOOPPQQRRSRQQPPOOPPPQRRSTUUVVVWVUTSRQQPPOONMLKKJKKKLLLKKJIIHGFFEED EEFGGHIJLMNNNONNMLLK LLMMNNOOOPPPO PPQQRRRSSTTUTTTSRQPOONNOPQRSTTUTSTUVWXYZZZYYXXXYY[\]_``_^\ZYWVWWXXYYZYYXWVTSRQRSSTUUVUV%USRQPOOPQRSTTUUVVUUTSRRQRRTUWXZ-./12343210/.-,XYYYZZYYWUROLIGEDEFHIKMOPRSTUVWWWVVVUBVWXZ\^`1123332110/][ZYWVTRPNLKKLMNPQRSTTTSRQONLLKLMNOPQRSTVX[./0010/002345544210/..---YXVTRPO +PQRSUWY[../ 001234455433233222101210 11123344556676567899:;;;<=>?@ABCCDDDCBBA@@?@BCEFHIHFDBA?>=<==>>?@AABCDDEEEDDDCCCBABBCCBBA@?@@AAB +AA@@?>>=<<; <==>?@@AABCBCDCCBDDDCBCCCBAAABABCDDDEEEFGGFFEDCBBAAABBCCDDDEEEFGGGHHIIJJKKKJJJIIIHGGFEDCBCDDEFGGHHIIIHGFEDCBA8BCDDEEDB@=:743dddefeca]XTOJFDDEIOU[af58:<>@ABCDDEFGHIIJJKLKKJIHGFEFEDCDDDEEFGFFEDDDCBCBABCBAA@?>==<<<=>?@@AABBBABBBCDDEEFEDE DEEEFFGGHHIIJKJIJIIIHGFFEDEDDDCCBBA@@???@@@ABBBCCCDEDDCBBAA@A@?@A +@@??>=<;:98 +9:;<=?@ACDCAAA?===<:998877767788999: +;::987654434556667898887654321a`_^^]\\[ZZYXXWWVUTSRQQRSUX[^acegijkkjigec`^[YXVWY[]_`bccddccba`^]_acefffedbaaabdfgijklmnopqst"uvxz|CDFHIJKKJIHFEDCBBAABCDFGHIJIJJKIHGFFGIIHGFEDCCBCB AABBCDDEFFFEFG@FEC|wsqooopruwz}~~~CDE~zurnkhfdccehkoqssrpnljhgfedccb`_^\ZXVTRPOPQRSTTTSRQPNMLKKJJIHGFFFEF6GGHIJKLMMMNNMMNOQTX]bgknpqqpnjgc_[XVTSSSRRRQONMMLLKKJJIDJKKLMNNOOONMKIGFEDDCCCBBA?><;;;<=>@ABCDEFFFEDCBBA@@?>=<:86433569>>==;:876545556677876556667876566677787898!99:;;<<===<;;:987655iihhhggfeedccbaa``_^]^`cfi6765ihffede ddcccdefghij56!kkkjjihgfdb`^][YWUTRQPOOOPRTWZ\^`a `_^^]]\\\]]^^_`bcdeefghhikln7899: 9987mkhfdba_^ ]]^^`acefhhiijkkllmmn665432100//.-./..---,-,-.//...-.--,+*))()*)*+*+,,--.../00123456677765443210//.--,+*+++,,,-,,,++***)***+,-..-...,---,,,---.-,-./0123455666554322100/..-,+,-,+*+,++*)))()*+*)()('& +'''())*+,,-,,++*)()**++,,-...///...--,,,+,- +,,++*))((('())*++,,-.--,,,+++,+,,-.//0100/..---./../.-.-,+,+,-.-,,,,+++**+++,-../0122333220/.-,++*++,--...---,+ ,,,--...--,,,+*)('&%&&''(''&&%%$# """###$$$###""##$%&&'(()**+++,,,++**)(('&&%%$$##"#$%$#$$%&&'''(''&%$$#"! !"!!!  + !!"###$###"!! !!""##$#$%$$$#""!"#$$%%&%$%%&''(' +(()**))('&%&'&&%$$###$$%%&&''('(((''&&%$$##$$%&'(''&%$%%&&'($#$$%%&&''(('&$#! !"$%&'('&''()*+,-(''&%$#"!  !"#$%$#"!! !!"##$$$%&'&&%$""!"#$%'(    +   !!"""#"! !"#$##""!  !2 //00110/-*(%" !$(,/2 !!""##$$$%&%$$#"#"!  !"!!!    !!!"""#$ ##""!   )((''&%$$#""!!"#$&()+-/012333210/.,+*)*+,-.//00///.-,,+**+,-.0121000123567899::99:::;<<=">?@BCDFG$%&'(())('&%$$##"""##$%&&&'&%$$$%&&%%%$$##""!!! !BC"""###$#$$%%&%#DA>;9989:<>@CEFH*GGFEDDDEFGI%%%IGEB@=;9754333579<=>>=;:8765433322210/.,+*)('()**++**)(&%$$#""!!! !" +!!!""#$%%&'"&'(*,/258:;<<<;97520-+*)))())(('''&%$%&&'('&%#""!!  !   !""#$###"""#$%&'(() +11210//..-.01332100///...//0001 0//...//01234 33210.-,+*)('&'()+-.010//.-..//001122334455 43210/.--,,,+,-./0122334455667 цЂщ҅тЉ( +܆1DŽƄډڅӄцх ΄͆̄ˆʆ˅ʆ υل&ن؃م ҅ф  ߆1"Ԇ+քք-܊؄"ɅȄфӅЄӅk߅ހh1 7L   + %1/˄m"C +8&ӈ)"ׄJnmlkjihgfgghi hgfedcba`__^]]\\[[[Z[Z[ZY ZZZ[[\\]^^_`a`_`a `__^]]]\\]\[[Z([\]_`abcdefhjlmnooonmlkjhgedb`_^]\[ZYXWWV WWWXXYYZ[[\\\]\]]^``a` __`__^_][[ZYXWVWXZ[]_`bdefghiihhgfdcbbaa`_^^]^^^__^^^]]\[[ZZYZYXYYYZZYYYXWWVVUTTSTTTUUUVUT UUVWWXYZ[[[\\[ ZZZYYXWWVVVUVUTSRQQPOONNMMLLKJKLMOPQRSTUVWXYZZ[[\[Z[ZZYYXWVVUVVVWWXYZ\]_`bcdefgggffeedddedcb`^]\ZYXWWVVUUUTTTSSSRSTTUVWXXYZZZ[[[\\\]]^]^_`__^^]^___``aabbccddeefgfgghi hhgfedca`_^]^^_`abaaa``__^]^ ]]\[YXWVVUUTSRS TUVWXYZ[[\[ZYXWVVUTSSRRQQPPPOPPQQR*QPPONNNMMMNNOPQRTUVWXYYZ[\]^___^][ZXVTRQPONOOPQQRQPPPOOONOOPQRSTUVVWWWXWWVUTRQPNMLLKJIIHG HHHIIIJJJK JJIHHGFFFEEEFGGHIJKKLLMMMNNONNNMLMNMLMNNOOOPQQRRRSR SSTTUVWXYZYXXWVUUTTSRRQPONNMNNOPQRSTVWWXXXWVVUT!UVXY[\\\ZXVTSRQRSUWY[]^__^]\ZXVTSRSdTSSRRQPNMLJIIHHIJLMOPRSTVWXY[./124567654210///..-WTQNKIHHIJKKKLNPSUWYZ[[ZYXWVUTSRRQQQPPOOOPQRTUVWXXXY3ZZ[./023455431/ZUQNKIHFEDDEEFGHIJJKKLLLMMNNOPQRSUVWXYYZ--./0123$2210/.-YVTRQPOOPQRSUVWX-./02345543210100//...//0012334543210/.\\.//01121 222334456765667789:;<1==>>>?>>=<;:9889:;=?ABDEEEFFFEEEDDCCCBBA@@??>>???@??>>=>>>??@?@ABBCCCDC+BBA@?>=<<=>>?@AABCCCDDDCCBBAA@AABBAACCCDCCCDED +EEDDEEEFGGHGFEDDCBC DDDEEFGHIJJKKLMMMNNOOPONOP OONMLKJIIHGF4GGGFEDCA?><;;:998765e`YSNLLPU\d579;;<==>?@ABCEFHIJKKLKJIHGFGHGGGFFFEDEFGHI JJJIIIHHHGF GGHHIJJKLLLM +LLLKJIHHGGFGFGHIIIJJJKJKJJIHHGFFE FGGGHHIIJJJKKJI HHGFEDCBBABBBCCDCCBBABBCCCDCBA@ABCCCBBBAA@?>=<;::9 +:::;;<==>>?>>==<;::98776555445455677878999::9876654gedbbaaa``_][XVSQOMMLLMMNzMMLMMOPSVY]`cfghhgfeca^\ZXWUUTTTUVWXYZ[\]_adfhjjjheb_[XVUTTTUVXZ\]^^_^]\[YXWVVVWXY[]^`abcddefgikmoqsux{}AABCBBBAA@?|{{|}}}~@ABBCDCCB~}{zyxwvuttsttuuv<;3=?BEINRVZ\^^^]\[ZYXWVVWY[]`cfhiiigfca^[YVTQONMMLLMMN +MLJIHGGFFFGF GGHIIIHGFEDCBA@?>=>?@@A(@?>=;:9877788999::;<=>@ACEFGHIJJKLMNOOPPQPOOPQRSTVWXZ[\^_``0112234455666767878 988877665554ggfe!345679:;;<<;;::9876544433445567889887765554 5566778889:;;:::998877766655545556678899::;;;<=>==<<;::98766554hgffedcbbaa`abcddefeedcba_^]\\]^`ceh5615hgfee3456789998887766kjihfedba`^\[YXWVVWWXZ[\]^_`__^^]]\\\]]]^_``abbc defgghijkkllm llkjhgedba`_^__`aabcdeefghijlmnoo544321010/.-,+,+,+*+,-./.-.-)../00123445567788998876543210/.-,,++**)))() ***+++,,,-,,,++,-.-,+**))()))**+,-../011233433210/.-.--,,,+++*+,++**)('('()*++,- +,,,++**)))( )))*)))(''&%$#$$%%&&''((())**+++,+***)))(('&&&'''((()**+,--./00100//./ +..--,++***)('((()))***++,,,-.-,-,++,,,-.///00112221100/0/. ---,,,+++,,,- ,,,+++***)*)('&%$ %%%&&''(()((''&&%$#$%%$$$###" ##$$%&&''((())**+,,,+*)('&%%$###"#$%$#"#$$%&''(()('&%$$#""!!!  !"!!!  !""#$#"#"#$#$%%%&&''((('''&&&%$$##"#$$%%&%$ %&''((('&%$#$%&'))*+++**)('&'( '''&&%$#""! !"##$%%%&&&''%#"!  !!!"#%&'()(''&%%$# ""##$%&''(''' %#! + ! +"""##$$%&&'(&%$#"##$%&''' (( +   !   !!"""#$$%%&&&'&'( +''&%$##"!! ! 0-)&#""$'+0  !"#$$%%%&%$#"#"! !"#"!"#$%$##""! !"#$#"""!!  !"! .-+**)))((('&%$#"!! ! !"$&(*,.0100/-,+*)(((''((()**+,./021/-+*)('=()+,-.//00//..-,,,--./0123445566778:;<=>@ABCEFFGGFFEDCCBCCD""#"! ! ?>>>?@ !""###"""!BBBABABBCDEEEDCB@?>==<<;<<==> =<<;:99:;<>@BC A@?>=;:86420/-./00112111000///...-,+*)((())*+,+++**))((''&%$#"! +!#%(+.012100/.013568999876421/-+*('&'(''&%%$%$#$%$$#"""!  +  !"#"! !!""#$$%%&&'''100/.0/./0100//.-,-.0230/...5544332210/.--,+,,--../0/.///001222334445 44332110/..-...//0011122344555߁܀ #Ԇӄ҃ц6%Ɍ:܄߇$΄)Ѕф˅ʄQ¿΄ʄ ۄڅمڊ+ބ ܅7Մۄ!؅ׇք'Ʌ +ŅǢ̈́̅ׄ<1څل}ф! >  %8 '  +ƾX.لW¿ÿ̀ͅ5>G,хA fghhijjkjiihggfgghhhiihhhgfecba``___^]\[ZYZ [[\\]]^__`aabcdefgh ijkllmmllkkjjijklnoopqrqqponlkigfdcba_^]\[ZYYXWXYYZZ[[\"]^^_`bba_```^_``_`ab___^^]\[ZZYYXXWXXXYYZZ[\]^_`abbbaa``__^^_`___^^]]]\\[[ZZZYZZZ[ZZYXYYZ[\\]\\[ZYYXWWVVUUUTUTUUUVVWVVVUUUTSSRRQP QRSTUVVWWXWVUTTSTTTSRQPONNMLKJIHGFFE FGHIKLNOQRRSSTUTUTUVVWXXYYZ[\]_`bcba``_<``abcdefggfedb`^\[YXWWVVVUUUTTTUUVVWWXXYYYZZ[[\\]^___`___^^^]\\\[[[\\\]]^^_`abcdefgh +ggfedcb`__^]\\[Z[\^`bdfgihhgggffedcba_^]\[[Z[ZYXWVUVVVWWXWWVUTSSRSSTTUTTSRRRQ%RRRSSSTTUUVWWXXXYYYXXWVVUTSSSRRRQQPOON OPPQQRRRQQQP +QQRSTUUVWWXWVUTRQPONMNOPQRRSRRQPPPOPOPPQRRSST +SRQQPOONMMLKJJJIIHHGHIJKKLLMLK LMMNOPQQQRRS RRQPPPOOOP%QRSTUVWXYYYXWVUTTSRQONLKIHGFFGHJKMOQRSTUVWXYZ[[\[ZZYYXWVUTSSRRSUWY\^01 0^\YVTQOMLMMNOP7ONNMLLLMMNOPRSVX[/146788765421/-XTQOMKKJKLMNPSUWZ\]^^]\[!ZYXVUSRPPOOPQRSUVXZ[\\\[ZXXXZ\/00100/][YXVTRPMKJIHHIIJKKJJIIH IJLNPRTVWVUSRPOOOPQSTVWYZ../0011012345654320/.-XWWVWWVWX-./112210/.-,+WX-./010/][ZYYYZ[[\../00112 11100011232123456545 66677899:;;<=<;:;;;<==>>?>>==<;:::99:::;;<===> +??@@AABBCCDCBCDCCBBAA@ ABBCCCDEEDEDCCDECEFGGHGGFFEFFGGHHIIJJJKKLLMMNNOOPQQRSTTUTTSSSRRRQPONNNMMML0MMNNOOPPPOONMLKIHFECBA?>=;:74c]XVVX\afko9:;<<===> ??@ABCDEFGGHIIIJKJIIIHGHGFEDCDCBCDDEFGHIHGGGHHHIIJJKKLLLKJJJIIHGFFEEDDCCCBBA@?>?@A@ABBBCCCDEFFGGHIJKLKKJJIIIHHHGGFFEDCDCBA@ABCBBAAA@?@A@?>=<;;::998 +99:;;<=>??@?>=<;:987899:9;;;:87888999:98765432111bbb12Cccba`_^\ZXUSPNLJIHGEDCBA@@?@@ABDFHIKLMMMNNNOPRTWZ]`cfhjkllkjigeca`_^@_`abceghkmpsvz|~~|xsmf`[XVWX\_cfiihfb]XSNJGFEEGHKNQTX[_bdfggfedba.cdfhkmoqstxxyzz~BDCBBBCA~{yyyutttuvwy{>@@A~}{zyxwvvutsrrqrstuuv,usqpnnmmmlkjihhhijlmnoonmkifdb`_^^^_acefhijklkjigeca_][ZYYZ[\^_>]\ZXVTRPNKIGFFGHJNRVZ^`bbb`]ZXVTSRQQQRTWY\^__]ZWTQOOOQSVZ^aeghi8jkmnnnmkifdb```abdfhjkkjhfc`\YUQNLIGFDCBA?>==>>?ABCDEFGGH+GFEDBA@??>>=<@??>>??@ABCCBB@?=<:99:;=?ACEGHIJKKLLMNNOPQRSTVXZ\/0011223345567656566777878777665554.3gfedcbaabce4579::;;;:998776554322ccbbbcdf345676655443334445566778899:;;<<==>>=<;:97654344455677889::;<<==>=<;;::987765443feedccbaaa``__^_``bbcdcbcdefgghh45567899:9987655ihgffedcba`_^]\[\]\[ZYYXYYZZ[\\]]]^ ]]]^^_`aabcdeefghhiijjjihhfedccbabbcccdddef///.../011223211000/.-,+*+, ---..//00122334556 7789::;<<=<<<;;::987654210/.--,,++**)*+,,,---.--.--,++,,+,-,,,+**) **++,,---../.-,+*+++,,,++**)))**++,++*)))('(()))(()('('&&%%$$%%&''())*)))(('()((''&&%%$$#""!! !"##$$%%&&'''((()('()*++,-,,,--.///0001112 110/.-,,+**)**++,+,,--.-,--.//001 00//..---,+* )))**+,-.//010 //.--,+**))( )))(((''&&&%&'&%&'&%$%&'&&%%%$#"##$%$$$###$$$%%&&&'&&%$##"""!"""##$%%&%%$$$#$ #$$$%%%&&' &&%%$$###"! !"#$#"##$$%%%&%$# $$$%&&'''&&&%$$$##"!  !"#$$%&&&''('''&&%%$#$%'(*+)('%$#"#$$%%&%$$##""!""##$&'%#"   "#$&'()***)(('&&%$#$%&'()('&%& ('&&%$#!  !"#$&'()('&%$#$%&'()) +'&&&'&&'%&'&%%$%&   !  !!!"#$%%%&&'&%$#$%$$$#"!! .*(''(+.146 !!""##$#$%$#$#"!  !"#$#"#$###""!!   !!"##$###"""! +++,,+++**)(&%$"!  ! !!""$%')+-/1245432100/[0011234578:=?@A@>;840,*))*,/24677641-*'$"! !#%'),.03467765432111234578:;<=>@@AAACCDDCE###"!?=<<<:;<=?@!!" +DDCCB@?>==<;:;<<=>>>???>>=<;:99887765679:;:865310/.//013456778 77654320/.-,-/0 /.-,+*)('%$#"!!!"$&),.123331/.,+*T+,-/123431/-*)''()*,/24689::;;;<=>>>=<:864211223567899986531/,*)'&%$#""!  !!"#$$%($#"!! 87667 !"""!  !!""#$0//.-,- -,-.0/.-..//0011013 2221100//.-,-././012 +1100/..---./0〆󁋀၃΀ҁ ߅ ׉  ҄ц ل+Ԅ ˇ̅ˌ̃̈́΂φЂτч Յ Ά<Ն%G؄ ΄҇ޅ-߉ ׆#͆̈ˈ̍ӄֆ)؅7o.  +    Q&(7 ,ńĂŅ¿ņ)¿S¾„ĄÀ( :MHф2 ccbbcccdeefgghgffeedcdeffeeedcba``___^]\]\[\]^^^__```a bbcddefgghijjkllmnnooppqrstu;<<=>===zyyxwusqomkjhfecba`_^^]\]\[\]]^^]]]\*]\\\[ZZ[ZZZ[[\\]]]^^___^^^]]\\[[ZYXXWWVVUUTUUUVVWWXXYYZZZYYYXXXWXYZYYXXWXWXYXXWWVWWWXXXYZ YXVUTSRQPPPONOOPPPQPPPONMMLKLMMNNONNNMLLKJJIIIHIJKLMNOQRSUVVWXWVUVWWXYYZ[[\]]^_`abddedcbaa`!aabcdfgijlllkjhgfedcba`^]\[ZYYXXXWXYYYZZ[[\]\\[Z[[[\\\[ZZYXXXYZ[[\] \\\]]^__`aaba`_^\[ZYYYZ[\]^__``aaa` ___^^^]]]^^_^]]]\\[ZZYYXXXWWVVUTUUVWWXXWWVUSRQQPQQRSSTTUUTTTSSSRRQPQRRRSSSTTTUUVVVWWXWVUUTTTSSSRRQQPPOONMNOPQRTUWXYZ[[[ZZYXXWWVVUUTSSRRQRRSTTUUVUTTSRRRQPONOPPQQRRSSSRRQQPPPONMLKJIIIHHHG +HHHIJJKLMMNMNMLMNOOPQRRSRQPPPOOOPPQQRSSSRRQPPONOPPQRRSTTTUUVVWXXYZZ[[[ZZYXXWVUTSRRQRSTUWXZ\]^]]\[YXVTSRQPONM%NNOPQRSUVWXXXWVUSQPONNNOPQRSTUVXY[]_01000/.\[[ZZ[[[\] +\\[[[\]//01#00//][ZXWUSQOOOPRTWY[]^_``/_^][YWUTRTUWY[\[[YXVUSRQRSSTUUTTSQPONNNOOPQQRRRSTUVWY[.//011222333222100/.--YXXWXXXY--./011122122343321000/.]]]\]]]//00112211000/00112343321 +2233344333234567789:;<=<<<;;;::98887776 789::;;<<=>?>>>===>??>>==<<;<=< ==>>???@@@AAABAAA@@???>?@AABA@ABCDEFGHHHIIJJKL MMMNNNOOPQQRS?RQPNMLKIHGFEEEFGHIKLMNOOPPOONNMLLKJIGFDB@?=;:7je`[YXZ\_cfhjlnpqr sstv;<=>?@AAB +AAABBCDDEEFGHIJIIHHGGGFFFEEEDDCCCBBBABCDEFEFFGHIIIJJIIIHHGFFEEDDCBBBA@?=<;:99:;<=>?@?>>=<;;:::;;<<=>? @@@AABBBCCCDE FFGGGFFEDDCBA@ABCCDEEFGHHIIIHHGGFFEDCDCBBAA@@?@ ??>>>===<<<;:;<=>>>???@???>>==<=<<<;;;: +998877655432dcdd22321ca`_][ZYWUTRQPONNMNOOOPPQQR8SSUVXZ\^___^\[YWUTSRRQPPONNMMMNOPQSTUUUTSRQPNMMLLMMNOPRSUWTRQONNOPSW[_beghhggfeddcba`_^__`adfijknpqrstvvxyz{{}~ABA@}zwussrrsstuvwxyz{{zywvtrrqrrrqqpponnmmmnopqrrrqpomjhfedcbaa``__^^__`abcefggfecb`^]\[Z [\\]^_``aba_][ZXYXPWVUSQNJGECCCEGJNRUXZ[[YVTQNKJHHGGGFFFGHKOTY^beggfeddefhjmopqpnlifcbbbcdefghhhiiij#ihgedcb`_][XURNJGC@><;::9:;<>@CFJMOQ?PNLKIGDA>@BCDEEFGHIKLMMMLKHFDCBBCEHJMNOONLIFC@>===>?@#?>=<;<<>@CFILNPRSTUVWYZ\./01122334456667788898789 88777677787898877654hgfedccbaaa`aabceg45667 666554443332dcd ee2334455654566789::;;<<;;:987655444345566677889::;<<===>?>=<<<;::9887665544hgffedccbaa``_^]^^_`abcdeghh4445545678/7766655kjjjiihggfedccbaa``___^^]\[ZYYXXWWXXXYYYZYYZZZ[[\\]]^^__`aabbc dddeefghhihhgfedcba``___```aabbb.-./012110//...-,+*+,---.//01233456778999:99:: ?>>=<;:9754210/.--,,++*++,,,-,-,+ **)(((''(())*+,,-,,++*)))((('''()**++,+*+*+*)()*)()***++,,,+**)((''&%$%%%&&%$#$%$#"!"""##$$%%&''(())*)())***+++,,,---../..-,,++* +++,-./012343221100/..--,,+++***)*+,,,---,+,-,,++*+,,,-,+,,,---.--,+*)('(())**+*)**+,,-,++**))(('''&&&%&&''((())(('&&%$$#$$%%&&&'&%$%&'&%$#"##$%&'(()((('''&%$%%%&&'&%$#$%&%$#"!  !!""##$#"###$$%&&'&%$$$###"""##$$$%%$$$#"#$%&&''((('''&&%%%$$$#$$$%&'()* +)(('&%$$##" ##$$%%&''(''&%$# $$%%%&&''()*(''&'&'()('&%$#"!!!"#$&'()***))'&%$###$%&()*++*)('&%$%%&&%%%$#""!!!""#$$$%&%&&'()((('  ()  !"#$$$%%%&&'''&&%$$#"! . !"##$$%%$$$##""!! 0-+)((*,.1346789:9:; ! !"#$###"""!  !"! !!!""#"""!!   !!"!! ..--,+*('&%%$##"#"# +$$$%&')*,-.-,+*)(('''&&%%$%%&'()(('&%%$L%%&'(*++,++)('&%&&(*,/24677765544332100//00134678:;<<==>?@@AAABBCCDD"#"!A><;9::;<=>?@?>=<; <<<;;;:::9::;<=>>>=<;9875444343332221233456 54310/.--,--.//011210/.-,-. ---,+*(&$"!!"%'*,.//.-+)'%$##" #$&)-03688876789;<<<;:86421011235678776665554320.,*'%#!  "$&(*+,+*)('&$#!;866678; !!""###$$%%& %$"!  !"$% $"  !!""0//..--,,+,,-././0 .- ..//01123335 444332221110///...--,- ...///0001232 110//.---,-.Āˁɀف遦  >4ʇ˄ džƂDŽdžƇĄ Ɇʄ҇͆ω:ֆNχ +ՄւՅ ڄۇۄ"҅˄DŽӆ:ن؃בփ׉фЄς΄̈́dž ҆҅т҄ ̈́̃˄Ʉ̆͆·ކ ߆,<#: !WǸ) + 2RԄ,7 Ŀv򀇍";'+/%ȅ, ^^___```aaabbbcddeefeeeddcddeeefeeddcbbbaa`_^_`a`___^^]\]]]^_abdefhijkkl mmmnnop888ppopq ponmmlkkjjiiihiiihhgfedcba``_^\[ZZ[[ZXXZXWVWVUTUUURSSTUVWWXXYYYZZZYYXXWVVUTSTUT UUTTTSSRQQQPQQRRS +TTUVVWWXXXYXXXWWVWXWXYXYZ[[\\\[ZYXWVUTTSSRRQQRSTSSSRRQQP +OONNMLLKKKJIHHIIIJKKLMMNOPRSTVXYZ[\]]\\\[\\]^_`aabcdeffgghijkjihhgfedcbaa```___^]]\[ZZYXWVWVUVVWWXXXYXWXYYZ[[\[\\\[[[Z[[\\]^^_^^]]\\[Z[\^`ceg4564ihgeddcbbaabcdfgijkkllkkjhgedb`_^]\[ZYXWVUTSRRRQQQRRRSRRQPPONNMNNOOPPQPOONMMLLMMNOPQRSTUUVUTUVWWXWVUTSSRRQQPPPOOONNNMNPQSTVWXWVUTU +TTTSSRRQQQPQPONMMMLLKLLMMNNOOPPQQRRRSRQRQPONONOPQPO NNNMMMNNOOPQRSRSTUVVWX WWVVVWWXYYZ[ ZZYXWVUTSRSTTUUVVWVUTSRQP +QRSTTUUUTTSTTUVWYZ[\^/00112211100//]\ .///000111000/.-ZYXZ[\]^^]\[ZYXYYZ[[\[[ZYXWWVVUUTRQPNMMLMNPRUX[]`11211a_\YWTSQPPPQRSTUVWWXYYZ[\]^_`a11222332334555443210.-,WUTTTUVX-.//011232211000/..ZYXWWWXXYZ[\\]^^__0001122334445545443221110011234556677677787889:;<===<:9876787677889:;<=<==>??@ ??>=<<;;;:::;<;:;<===>>?>=>?>>??AAA@@BBCBBCDEEEDFE FFFGHHIIIJKKLMMMNMMLKJIIHGGGFGGHHHIHIIJJKKLLLMMNOOPQRS+RQPOMKHC>8eZPHB=<=?CGLQVZ^acfhjkmoqsuw<=?@@A@?@@AABBCDEFFGGHHIIJKLMLKKKJJJIIHGGFFEDDDCCBBBAA@ABA@AABBCCDEEEFFGGHIIIJJKKL KKJIIIHGGFFEF +GGFFEDCCBA@?>=<=>>??@AABCBA@?@??>>=>>???@@@ABA@?@?>=<<;;:::9::;;<<<==<<<;:99887&8899:;<<===<<;;;:::9987654310///]^\]^_^\ZYWURPONOOPRSTUWXYZZ[\]\\[[ZYXXWVVUUTTSSSTTUVWXXYXWVUTSSRQPNMLKJJIHGFED-FHJMOQRRQOMKHECA?>>>?ACEHJLNOPONLJGECBBCEGILMO1NNMMMOQTX[^acdddcba_][YWUTSTSSSTUVWWX[]_`adegfefghjjiijklnqsvwxxwvtrqpqpponlkihgfffghjklmmmnmmllkjjihgfecba`_]\ZYXWWWXYZ[\]\[[Z[Z[[[\\]]^^][YWTQOMLKKKLKJHFDCBABCEGIJLLKJIGHIKLKJKLMNOOOPNQRSUWXYYYZZ[\]`behjklkjgda^[YWVWWXXXWWVUUTUUVWXYYYXXWVUSRPMKIFDCBBCDEFGHIIKLMNPROMKIFD@>???@?> ==<<;::98876554hgffeddcccbbaa`__^_`abcdefhhij555666788987767889887776klkkjihgedcba``_^]\[ZZYYXXWWWV +WWXYZZ[\]^_^]]\\]]^_abcefgghhggffedccba`__^+,-.//00112122232100///.../.-,-,+*+++,,--../012233455667788877765443321110/012322110/..-,+++*))*)('(''&'&&%%%$%%&&&'&%&'&%%$$$#$%&'&'('()*)()('(' &&%%$$$##"# $$$%%&&'(()))*++,,,-,-. ///0001110//...--.--,++*+*+*)*+*+,+*+,++**))(('''(()*+-/010/..-,-./012232210/..-,+*)((''&&%&%%$$##""!!!"""##$$%$%%%&&'& '((()((('&&&%$# """###$%&''()('&%$#$%$#"##$$%%%&'&%$#$#"#$%$%&%&&&''((() (((''&%%$$$#$%&'&%&'('& +''(()**+(''& +'()**++***)***))(''&'&&&%$$#"""#$%')+,.-+*(&%$#$%%&'())**+++,,---. +%$#$%)((''&'''((()((()))* +  !!"#$###""!!  ! """###$$%&&&'(('&%$!0*%!!$'),.0134567789:;< !  !!!""###$$$%&%$#"!   !"#$% +$$###"""!! ! !''&''((())((('&$#"""##$%&&'(())**+ ***))((('''&%%%&&&''(''&&%$$$#""! !"$%&'''&$#! M !"$%&''&&$#!  !#$&'(((''&&&'(*,.134566654321/.,++***))**+++,-/00023443456789:<=>>>=<;;::99:9987765545567899:9998887!666543210/.-,,++,,-/0011100/...--.-,-..//0//-,+)('&'&%$##"##$&'()))('&%&' &%$$##$$%&''( ))*+-.//000/00124579:;<;;976421/.-,-../...--,+)('%$""!"#$$%&&''()+,-),+)(&%# ;50,)'(+/4:"$&()*+,./01211/-*(&$#$%%&%#"  !!"  /.--,++* ++,-../01/..--,,,--..//01210/...---,--./0012 6777666554433221100/..---,+,---..//0//.--,,+,,,--.//00010 +//..--,,,+퀇߁݀偔߁  $ۆ2ݑ֊ ׆#4&„'ޅ ,*ńĂÄąŃƅŇĉ҄ӂԇֆӅ݄ކ߇ԆчЅԅׄ؃م̉΄υЄτΏɄȄDž͉' +- + +! +Tý   + R݅ڄDžƅ,¿$… ͇ $¿VU  +>,F ȅlj ֈbbbaaa``_^^^]]^^^__``aabbcccdefghijk jihgfedcbaa`a`aba``_^^^]\[\[\\]^_`aabbbaaa``aabccddefeffghhijjk5lllmnopqrrrqqpoonmlmmllmlkkkjiihhggffddcbbabbbccbbbaa`___^^]]\[ZYYXXWWXXXYYYZZZYZ[[\\] +^^__`abcccd ccbbbaa`_^]]\[\\\]]]\[[ZZYXYZYXXWXXYYZ [[[\\]]^__``abaa`_^^]\\[[[ZZ[ZYXWVUTSSRRQQQPOPPQQRRSTUWXY[\]^_`abbccdeefghiij kkkllkkjiihg$ffeeddccbba``__^^]\\[ZYYXWWVUUTSSRRRQPQRSTUVWWXXYZ[\]^ ]]\\[ZZYXXWVWWYZ\^`begjkmmmljhfdba`_^]^^_``abaa``__^]\[ZYWVUSRQQQPQRQRQPON +OOPQRSSTUUVUUTTSTSSRRQQQPQRSSSTTUUVU VVVWVVUUTSSRSTSSRRRQPPOPQPOPQRSTSRRQQPPOONOPQRQPOPPOOONNNMNOP QQRSSTUVVWVUVUTUUVWXYYZ YYXXWVVUUVVWWXWVVVUV +UUUTTSRRQPOPQRSSTUVVWWXXYYZZZYYXYZ\^012333221`^\[ZZYXYZ[]/0112#11100//...[ZYWVSQOMKJJIJJKLLMOPRTVWX WWVUTSRPOMLKJ KLMORTWYZ\\]^]]\\[ZYXWVUTTSSTUWXZ\]_abd223445676654321/.,WUTSTUV,-./01121)00/..-WUSRRSTVXZ..///..\[ZYXWUTRQQQRTW[^010121234 55677788876766555677876777899::;<===>>?>>>===>=<<;;:;<=<;<;;:::999::;<<==>??@@@A@ABABABABBBDEEEFFFGFFFEEDDCBABBCCCDE +FFGGHIIJJJK)JJHFDA=:6d]VPJFB@>>>@BFKQW^djnrt;<<=>?@ABCDDEEFGGHIIJJKKKLKKKJJIIHGGFEEDDCBBA@@???>??@@@ABABA@@@AAABCCDEFFGGHIIIJJJKLLMLKKJJIIHHGFFFEEEFE +DDDCCBBA@@?@ABC BBBAA@@@???@ABA@?@?>=>?@???>>>==<<;::9887899:;;<;:99876543@22110/..[Z[[\]/011234566766531^ZVSRQQRTUXYZZ[[[ZZZYYZZYZZ[[[\]^_`_^][ZYYXWVVVUUUTUUVWXYZ[ZYXWVVUTTSSRQQPPQQRSTUV,UTRPMJGDA>;:99:<>BEINQUWYZZXWURPNLKJIIJKLNPQRTUVXYZYYXWXWVURPPNMKJKIJKLNPRTVWYZ[\][ \\]]^^_`aabc bba`__^]\[[Z[[\]]^__`_^]]\\[ +\\]^`bdegijihfdb`^]\ ]]]\[ZXVUSRRQRVQQONLJIHGFFGGGFEDCA?>=<<;;;:98olkigfdb`_^^`bfj7:<>ACEGIKMORUY]adfhhfb]WPKFCBBDFILOQSTUV5UTRPNLKJJJKMOQSUVWXWWWVVWY[^`cegggeb_[WTPNKHFEDCBBBCCD2CCBA@~}{zwurpnnorv{@CGIKMNOPPPQSTUWYZ[\\\[ZYXWVVWWXWWVUT5UUVWXXYZZ-...//0112334443210/.-XWVVUUUTUUW,-.013456778776554556678767877654432dcbaa``_ +``abbcdefg4%333ee22334455565554gecb`_^^]]]^^__```abbcdf4567889:::;#:987654332223345566778899:;;<=>>???@A @@??>>>==<;:::9887665jihggfeedcba`_^]^_`abcdefghh445556778767oonnmlkkjihgfdcba_^]\[ZYXXWV UUUVVVWXYYZ[ZYYXYZ[\]]^__``abbcb.-. ///000111011223 +22100/..--,-,+,-, +++,,,---,,,+*+++,,,-.-.//01010/00011122345567788987 6665444322110/.--,,,+++***)))())***+,-..//00100//..-,++*)))((()*)*))((()*+++,,,-.--,,++**)(('&&&%$%%%&&''(())**++,--...///00121100/.-,+*)))(('&'()*+,+,+"***))('''&&&'(()*+-./0122110/.-,,+*++,,-, +++**)(''&&%&%$%$%$%%&&'''('&'&&&%%%$%&'('&%&%$#$%$%&'('&&%%$$$#$%$#$#$%&&&'''&%&&&%%%$$$##$$$%%&&''('&'&' &&&%%$$###$$%%&&''((())*+++***))())+ +,+*))((''&'' +(('&%$#!  !""##$%&'('&&%$#"! !"#$&')*+,,,--,++***))(('''&&''()*++,-./$##"##$%$##"##$%&''&&%%$$#$%&(*  !"##$$$%%%&(%%$#!*&"!$'+/258:; !!"#$%&%%$$##""!    !!"""###$%&% $$$###""!!! &''%#! !"#$&&'&&&'&''((()**++,+**)(''&%$%%%&&''(()))((''&%$%%&''(,''&$#! !$'),./0//.,*)(&%%$$$%&'()**+,-./0100///.-,*)('&%$%$%%&'()*++,--.-..- +...///0011211100//.//001122321100///.//012456789987653210/0/.-+*)(('() **)))('&&%%$##"! 987654310//./0247 !"#$$&'(*,/13566642.+'$" !"$&(*+,-.3///.-,+)('&&&'()+,-.///..---./13579:;:97531.,+)'&%%$%&,%%$#FEDB@><:889:=@"$&())***))**+,-.//0//.-,+* +))('&%$###"!   /..---, +---../0011..00/..---,---...//011 2110///..-,,+ ,,-..//001199888777665554332100/..-,+*+ ,,,---,,,++*+,-.؀ځـ΁ ۀ 3  ܅ 5 ?Ć"ކ,¿ք +҄ ̈ŏ˄Ɉ +̆̅͂̇ԅ ۄք؄و҄ +لڄ%քΆ̈́̇Ά͉ɌȆǍφ2(߄6q5* % >  +;    ?݆ Ά+BAx'  - Y !ɊȂdž*eedddcccbabccdeefgghijjkjjiihgffedcbaa`_^^]]\\\]^_^]^^^__`_^]]\\[[ZYZ [[\\]^^__``aabcdedeefghhiijklkkjkkljkmkkjllmjkklmmnoopooppqpo nmlkjjiihhhgfgghijkllmnooppqqrrsttuuv;:::99qpoonnnmm678776lkihgffeeedddeefgffdcba``_^]\]\\[[ZZYYXXWWVUTTSSSR"SSTUVWXYZ\]^_`abdefghhiiijjjkkllmmnmmlkjihfedcba``_^]][ZZYXXWWWX WWVUSRPOONNML MMMNNNOOPPQQRQRSTUVW +XXYYZ[\]]^_ ^]\[ZXWVUUTTS +TTUVWXYZ[[\ [[[ZZYYXXWWVU TTSRRQPPOONNNM LLMMNNOPPQPQRSTU TTTSSSTTTUTTSSRRQR SSTUUUVVUUUTUVUUTSRQRSSTUTSRQP QQRRSTTUUV UUTTSSRRQQQP QQRRSSTTUUUVWWWXXYXXWWVVVUTTSSRRRQQQPQPOPQRQPONMLMNOPQRSTUVUTTRQPONNNOOQRTUVWXYZZZ[ZYYXXWWWX WWVUTSSRRQPPOPQRSTSTTUVWWXYZ[[\\]]^`0122332210//.]\5[ZZYYXXYYZ[./012332211000///...---[[ZYXVTQNKJIIJLNQSUVU2TSRQPNLKJIIJKLNPRTUWYZ\]^^_^^][ZXVTSQQPQQRSUVXYZ\\] +^^/00112334333221100///0012233444567889:99865320.-,+UTUV,-../...--,WVUSRQPOOOPQRTVXZ\]//012345567899:#99876543322233456789;<=>>>=<;:8765434555667789:;<=>?>=>?@AAABBBA@?=;:876789::;<=>??@@@?>>=<;:9998999:;<<;;<<=<<=>???@ABCBBDCDDCDCCBBA@ABCBBCCCDCCBBA@?=>>>==<;:987643210/.ZVQLHDBBDHMRX]bfjnr;=>@BCDEFGHIKLMMNMMMLKKJIHGGFFFEDDDCBBABCCDCDDEEFFGFEDCBCDDDEEFFGHHIIJJKKLMMLLLKKJJIIIHHGFEEDCA?=;:87789:<=?@ABBCBCB +CCBBBAA@@@?@ABAA@@?>>>===<<<;;;<<<==>>?>= <<<;::9887 8899::;;;<<<;::998988776543845789::98530ZURONNOPSUWXZZ[[\^``ade3fffgdb`^][YXWVUTTTUUVU +VVWXYZ[\]]^]\[YXWVUTUUVVWWWVURPLIFC@>=<;<=>@BDGILMOPPPONLJHFDCBBBCDDFGILNQSUXZ\]__^]^\[XVU TTWXZZZ]\^]\\\]^]]]^^^]]\[[ZYXXXW VVVUUUVVVWVVUUTUVWWXYZZ[ZZYXVUSRPONfOPQRTUVWXZ[]^___]ZWSPMLKLMPSVX[\]\[ZXVTRQONMKIGECA?=;:987nmnp9;=?ABCCCBA@>=vsoliggin:>CHLQUXYYWUROLIGFE=FFFGILOSX]aegge`[UOJFDDFINSX\`bdeffeeefghhiiihhgedcba`_^]\[ZYXYY[\]^]\ZXVTRPNLIGDA@?>?~}|ywtqnkheb`_`chov?BEHJKL%MNOPQRSSTUUVVVUTSQOMKJJJKLNPRTVX[]^`01000///../010/.YVSPMLKLNPSW-/12345434556778776656543ffedcbbaa```___``abcefg445 4433322e33445%jhgeca_^\[ZYYYZ[\]^_`abcdefg45678:;;<= <<<;;:98765543445566778899:::;;<=>>>??@ ???>>>===<=<<<;;;::998876kjhfedcbabc +dddefg34445454ijkkklllmlllkkjihgfedba`_^]\[ZYXXWVVUUT!UUUVVVWWWXXXYYZZ[\\]]]^^__`aabcdde/0/...///0011222111000//010 //...---,,+++*)*+,-,+,+,-./010///000112233444565545443343323332345 +443332233323444544433221110/01234455443325432210100/.--,+*+*)***+++,++***)(((''&&&%&&&''()**++,,--../000123 222110/.--,,+***)))()(('&%%$%&'()*)()**+++,,-,++*)(''&''(())**+*)))((('&%$%&'()('&%&'&'('&'('&%&%$%%%&&'(''&&&%&'''((()*+***)))((('''&&&%$%$#$%$%&%%%$$##" #$$%&&'''()()(((''&&%%%$$##""##$%%& %%$%%%&'''((()***+('''&&&%%%&&**))('&$"  !#%&'&&%$#"!  !#$&'()*++,++*)('&%$%&'()**++,,,+++***!!!"!  !"$%&'()    ! 5  $'*.0358: !""##$%%&&'('&&&%$#"!  !!!""#"! !!!"""#$%$$$##"""! *#! "#$%&&'()**,--.-.-+**)('&&%%$%$%%&''())*))(('&&%&&&''() ('&$"  !#%&())**)('&$"!  &!!"$%'(*,-/0123321200.-,,,---//00011210 //..---,,+*+*+,-../01100/.-,+*))(A))**+,-./0122210.,)'%$$%&')+-./0//-,+*)(('&%$#"!! 99:; "#$#" <97532247!$'*,./0/.,*'%$#"C#$&(+.1468752.*&" "$(,/246787776677889998876554433221100///0012345,4320.-,*)'%$"! !!""#FFEDBA?=;864212369=!"$%&'())*++***)(&%$"!! !!"##$$$%! ! 100//...- .../001 -2110/.--,++*+++,-../0 111  +32210//./.45655544332110//.--,+*)*+*+,-..///0/ʀ܀فȁ큡 *݇ބ߈ُׄR +̈́ +)ÿ"ӆ!ׅ̊˂ʅ͔̄̅ȅ̆ ńɍ ՄЅц!ԇӅم фͅ ԉՄЅχЂυ΅ͅ ʄƄ ӄ̆Džɇʅ5dAۄ\ +$   5.-¯񇘪 ؄ûCՉׄm½. ! /@ʄɃȅ ̈́fffeddcba`aaabbccdeeefffeededdcbba``_^]\[\]^]\[[[ZZZYXWXYYYZZ[\\]^^__``aabbc bbaa``aaabcbcbdbababcdeefeeedddeeefghijklkji hhgfeedcbaaa` aabcdefgghhghijkll67655666778ponnmlkjihgfffeffgggffeedccbbaa``__^^]\\\[\[\\]^__```aabbccbba`_^]]\ [[[ZYYXWVUUTUVVWXYZ\^_abdefgghghij'ihgfedcbaa``___^^^]]\[ZZYYXXWVUSRPNMLKJIJKLMMMNNNOOPOPQRSTUVVVWWXYXXWVUTSRRQQQRRSTUVWXWWVVVUUUTS TTTSSSRRQQQPQRSTUTUTSSRRQQQPQQQRSSTUTTSSRQQQPQRSSTTUUVUUUTTTSRST SSRQQPPOOP QQQRRRSSSTSTUVUUTTSSSRQP QQRRSTTUUVVWVUUUTTSSRQRQPQPOPPQQRSTSSRQQPOPON OOOPPQQRRSTTUUVUTTSRSTUVWXYZ[\]]^^///0/0_^\YWTQONMNOPQRSRQPPONOOPQSTUVWVVUTTSRQ RSUVXY[[\[ Z[[\]/0112100///./.-[ZY Z[\\]]\\\[\[ZYXWWWXYYZZZYWUSQPOPPQQQR SSSTTUUVVWVWXYZY ZZ[\./0012122233455678:;=>??>=<:9765432100///...-...//0/.-,+UTSSTUWXZ\//012322110 112345689:;<.;:9875443332223345689:;<=>>>==<<;;:::9998876665 44556789:<<=>===<<=<=>>??@@@??>==<<<;::999876566677899::;;<<=<=<==>>>??@@@AAABBDEEFEG HGGGFFFEDDCCCBCBABBCCDDEIDCB@?>=<<;;::9998877766655443322110/.ZVRNJGDBAABEINT[bi8;=?ABCDDEFFGHHIJJKJJIIIHIJIHHGGGFEFG HHHGGGFFFEDCBAAABBA@AABBCBBBAAA@?>=<=>?@ AAABBCCDDEFGFEEEDDCCBBBAA@@@?> ==<<;;:::99:;<;<<<==>=>>>??@@ABCDC BAA@@?>>>=>==<;;:989:;<;;:::9 88877766654,555432`ZTLD;3+I?98:AJ+3:BIPTWXXXWVUVVVWXZZ\]^]\]^^^]]]\[[ZYXWUTSQQPOPOONMKJHGFEEFFGHJKLMNMLLKIJJJIIHGGFFEEDDCBBBAACEGJLOSVY[]_^_]]\ZYWVUTSSQRQPQPPONMMNOPRTVXYYYXWVUTSRQRRSTUVWWXWVVUTSRQPQRSSTUUV4UUTSSRQPONNNMNNNOOONNNMNNOQSUWYZ[\[[ZYXXXYZ[]^`bcefhihhgeca]YTPKGC@><; +<=?ABDEFGGH"IHHHGFECBBABDFIMQUXZ[[YWSOKHDA?=<;:O;=?AEHJMOPQSTUWY[^`bdefghijlnpsuwyyzyyyxxwwvutspnkheb_\YWUSQPOMLKIGECA?>==>@ACDE%DDCB@=ung`ZVSSUY^chov?DJOSVXYYXVSQONNMLMMMNOPRTVY[^011210/001223+2210/^]\[ZYXWVVUUUTUUVVWXYZ[\]///00112234445667889887767'665igedbaa```abcdfgh456677888998887665545!4gec`^\[ZYZZ\]^`abddefg45567889::;<=>>>===<<;;::9988878899::;: ;;<=>??@@A@?>?>==<<;;:9988766kkjiihhhggfeddcb +cdeghi566676543ghijjkkllm67onnmlkihfdca_]\[ZZYXXXWWWVUVWXXYZ[\]]^^__``abcdef10/010/...---,+*)*+,-,+*)***+++,,,-.//01122211012110/0.---.-..//01122232221000/00122321010/.-, +--.//011221233 332221100///.-,+*)*+,++***)(((''&&%%%&&'(())*++,--.//0001234333221100//...-,+++***)))('&&%$%$%&&&'''()*)() *)))(('''&'('&%&'&'&'&%&&&'''( '''&&&%%%$%&'&'('&'('''&&%%%$%&'('&% &&''(()))*+*)('('&%$#" ###$$%%&&'&&%%%$%$%$#$%$%&%$ %%&''((()))**))('%$#"!!""##$%$$###"#$$%&''(('''&&%%%$%%&''())*) **+'(()*)*))(''&&&''(())('&%$#$$%%%&%&'&%&&'()" +#$%&()   !  !  +""! "%(,04 !""###$$$%&&&''&%%%$$$#"#"! !"#"!   ! !&#! $&()))('()**+***))() (((''&%%$$###$%$$#""! !"#$%&'((()('&%$#""!"#%'(*-.012322110/.-,++*)))(('&'()*+,,,++*))(' (())**+++,+++**))( ))*+++,,,+**)))('''&&''(*+,-...--,+ ,-.0123456554320-+(%#!  !#$%%&'E&&%$#"!!"#%(+-012210-+(%"  "$%&&'())+,-/0123445678:;=>?@A@I?>=;986420.-+*))(('&%$#"!  "#$%%&&%%%$$" =940,*(()+-037; #'*-/00/.,*('& %%%$$$###"! + !!!""##$%%$$$##"""!"""##$210/.- ../00110/.,+*)))**+,-./00122433211100//.//013 44455689 8876543200/..-,+*)**++,,,- ..//00111Àƀԁށʁ΀ ߈ޅ߄ۇ܄ۅڄօՂքD2݇ ݆ ׄ#- +Ćֆψˆ̄ ӄ؆ׄ ΄̈́ ɅDž/ن ̄ƅ ҆Є&ʄ-̌ ل ń„ ̅ʅ$ڇކ߇%; - / +  L  :Sҽ®ۅڃن ńC!¿ ƽ5 T.3:F #ʅɃʉ ghgggffeedddcbcbaba`_^_`aabbcdc +bba`_^]\[ZYZ[ ZZYYXXWWWVUTUUUVVVU/VWXZ]`cgkort::98nkigfeddccdecbaa``^]^]^[\^\\[[[\]$\\[[[ZZZ[\\^_`bdefgggffeeeddcba`_^]]\]\\\[[[\]^_`abccdc(bccdefghhhgfdba_]\[ZYYXXYYYZZZ[[\]]^_`aabaa`__^]]\\[[[ZZYYYZZ[[\\]\\[ZZY ZZZ[[[\\\]^_`abcbba`_^^]]^^__``aabbccdeffgfedcbbba``_^^]]\\[ZYXWWVUTSSRRRQPPOONNNMNONNMMLMMNOOPPQR SSSTTTUUVVWWX +WWVUUTSSRRQRSSTTTUTSTSTTUUVVVWXYZYXWVUT SSRRQQPOONNMNOOOPPQQQRQPQQRRSSSTUVWVVUUTSRQQPPQQQRRSTSRRQPPON +OOPQRSSTUUVUUUTTTSTTTUUV UUUTTTSSSRRRQPQQRSTTUVVWWWVVVUUTTSSSRRQPQPOPPQRRSTUVWWXXWWVUTSRPOONMNMNNOOPO +NNNOOPPQRSTUUVVWWXYYZZ[\]\[YWTQNLKJJJLNPQRSSRRQQQPQRRSTTUTSTTUUV/WWWXY[]`134689998754210//001123334333210//..--,YZZ--.\\[ZYXWWXXXYZZ[[[\ +[[ZZYXWVUUTSSSRRQQPONNMNNOPQSTVXY[\]^]\[ZZYYXYYZ\]//0/./0123468:=;9765432110/01112232211101233432323334445667889::;<<<===>=<<;:9876554445566788898887767898 +999:::;<<<=<;<<==>>?>=<<;;::99988777666567 888999::;;<<<=<<<;;;: +;;<<==>>??@AABAACCDEEFHHIHGHGHFEFEDDCBBBCB CCCDDEFFGHHIJ&IIHGFDCB@>=<:98876654432110//...--[[\]^__`aabdfh5689:;;<==>?@ABCDEFFGGHGHI HHHGGFEEDCCBBABCDDEEFFFGFFFEEDCBBA@@?>>>=>>???@?>=>=<=>>??@ABCBAAA@@?@?>??>>==<<<;<<<==>>>?>?> +===>>?@ABBCBBAA@?>=<<;;:98776667789:;<=>??@@@A@@??>>==<<<;;::9988776H542^WND:0QB7/*),3=I+29?DHKLLLKKJIJIKJJKKMLMNPQRTWZ\_acefgggfedcb`^\[ZXWWVWWWXXXWWWVUTSRQPOOOPPPQPONMKJIIH2IIIHGGGECBBA@BAACDGHIKMOPQRTTWWXZY[\[ZYXWUTRQPONMLKLMNPRTWY[\]^^^\[YXVTRQPOPQRSSTUTSRQPONNMMLMNOQSVXZ\^_```_^]]\[Z[[[\\]^_acehkmoonkgb\WQMIFDCDEFGHGEDB@>=;;:;;<=>@ABCDEFGHIJLM=LJHFDBA@?>>??@ACEHKOSVZ]_``_][YWUSRRSTWZ^djqw||vpjc]XSPMLKLLMMNNONNMLKJIHG HGGGFDB@><986lkkmor;=?ACDEFFGFFFGH IIJKLMNOPRSTUVWXYZZZ[\../00122334332221 22333221_\XTQOPQRSTUVWXYZ[\]^_/0112334566677677899:;::99888787889::;< ;;:9876jhfdc +dfhj6789::; ::998877767778887654eb_][ZZ[]_cg579:;<;<=<<<;;::98887766566778999:;<=>?>=<;$::99887665jhgfdca`_^^^_`acdfhi5566676543gfgghhih"iijkklmmnnnoonnnmlkjhgedba`_^]]\[[ZYXWVVVWWWXYYZ[\]^_`abcddefgg210/012100///.-,-./.-. --,+**)(('()*)*)*)*,-/2479;:87543210/.-.--,,-,,+,,,-./.-../0112 +1100/..---,-.-,--../0012100/. //00//.-,++*+,---.../ ..--,,+++***)()('''&&'( )))***++,,--.--,,++*+ ,,,---.../010///..---,,+++**)))('&'&%%%$$##"##$$%%&&'('((()))*)('''&&%$%&%&'()*)('&%$%&%$#$$$%%&'()*)((''&'&%&'&%&'&%&&&'(())*)('&%$#$$%%&'(()((''&%%$%$#$%&%$#$%%%&&&'&'()()((&%#"! !"#%&&''&&%%%$%&'&'('(()*+- $%))((''&'( +)))(((''&&%$%$# +$%%&'(()**+**))( ))**   !! !    !!""##$##""! '$%%&'())*+,,-./13 !!""###$$$%$# +"""!!  !" !!! F'$ !!"##"!!   !!""##$%&'()+,,--...--,,+*))('&&&%&'()(''&''((()((('&%$$###$$$%$#"!!"#$%&'())**+,---..///.--,+*)('&%%$%&()+,-./.-,+*)('&&&%&&&''(())*)()('&'()+,-/0011100///...-...//023579:;;:851.+(&$#"##$%&&'''&%$#"   !!""##$%&'=&%#" !#%'*+-...-,*)(''&'')+-15:>BEGHHFC@<730,*('&'(''&%%$$$% $#"! 4 57 !"#$%$##""! !! )'%#!   !!"##$$%%&110//..///01/-+*)(()*,.1432210/.--,---.//0111232344555667 66554321100//.-,+*+*+++,,,--...//0001122󀧁ۀ́ ۇ ݆ ߅ʄˉх ۆ&܄̈́҄̈́̃˄$фЋFŐ͇̄Ӌ ˊ +ՆчЂфτ΄̓΄φ ˊ΅"؅ ȅ͆΂͇фΌ̈́Ά +Ɇ؄ Ά͋̄…&ɊȐDŽƇ݄݄҇م +ۄ +!؄؄3 '7  + + Aψ< +E» 7 + +I &&ʄɊaabccdddeeefffeeddcccbbbaaaba`_^_`aabbcbaa``_`a`_^^]]]\]\\[ZZYXXWWWVVVUUUTTTUVWWXXYXYYZ[]^`bcdeeddcba`_`_^__a``abaaa``^]\[ZYXYXWVVWWWXXYZ[]^_abaa`_]\ZYWVUTTTUUUVUTUUUVVVWWXY[\]^__`_^]^^__``aabcba` +aabbcccddde ffeeeddeeffgfedba`__^ __``abbccdde dddccbbbaa``__^^]]\[ZZYXWVUUTSSSRQRSRQPQ RRRSSSTTUUUVUUUTTTSSTUUUVVW VVVUUUTTTSTTTUUVVWVUVWVWXWVUUUTTTSRST +SSRQQPOONNMNNNOOPPQPPOON +OPPQRRSSTTUTUVVVWWX WWWVVUUTSSRRQRRSSTSSRRRQRRSSTUVWXXYZ YYXWWVUUUTSTSTSSSRRRQPQQQRRSTUVVWXYZZ[ +ZZYYXXWWVVUTS +RRQQQPPOOON OOPPQRSSTUUVUUUTTSRQPPONNNMMNMLMNNOPQQRQRRRSSTUVWXYZ[\]\\[[[Z YYYXWVUTSRRRQRRSSTS RRRSSSTUVWXYYZYXWUTSRQPQRTUWZ^a2467787654321011222343210/.-./ ]\[ZZZYZZYXXXYZZ[\]]^]]\\[ZYYWVUSRQQPPQQQRQPPOPRTVXYZ[\]]^^^__^^^]]\\]]^_0 /^\\[[[\./01234568:<>?@AA@?><:8765676543100/ 01233455666767665432212345678789876 7778899::; :::99988877767899:::;<=<;:::999887678999:::;;;<<<===>>?>=< ===>??@ABCBBCBCCBCCDCDEG HHHIIIJJJKKKLKJJIHGFEDDCCBBA@?>=;:9876554433fgghj6789:;<==<<;:9:;<=>@AABCCDEEFFGGGHHHGGGFEF GGGHHHGGGFFFEFEDCDEDCCCBBBABCDCCBBBA@?>?@AAABBCBCBABA@?>=<;:;<=>?>==<<<;;;<=<;:;::98765434.321/]ZXWVWWYXZ\\]]^^^__aabbcdddeeedddccba``___^]^ ]\\[ZXWVUTUUUVVUVTRQPNLJHGFDDCD#EFEFEEFFEEDEDCDCDDCDDFGHIKLNOQRSTTTU VVUUTTSRQPQQSTUV UTSRRQPPPOPOONNMMMLLKKJJJIJKJJIIHIIJJJKJ1KKLLLMMMLLMMNOPRSUVWXYYYZZ[\^`bdfhjjjigda]YUROMKJIHHFEDCBBAAABCDEFGGHI HGFECB@?=<;;;<=>@BDFGIJLMOPRTUWXYXVUSQOMLKiLMNOPPPONLJGEB@>===>?ABCDEFFGHIKNQTW[^aceedb_\XTOKFB?;86igh69=BGKORSTSQNLIGEDEFHJMPSVWYZZ[[[ZZZYYYZ--./0010/00123456 53c`\XTQNKJHGHIIJKLMNOPQRSTUVWXZ\]_`112232 33456778899:99887877665ji5566789:;<=?@ABA@?><;987665545676543db`_`bd468:<>?@AAA@@@?>=<;<<==>>??>>==<<;::998776665 +667789::;;<;:;:9:9998776554hgfedcbaa```abbcdffghgfeffgghhhijkl$kkkjjiihgfedcbba`__^^^]]]\\[[ZZYYXXXWVUV WWXYYZ[\]^_`./010/0/.-./0/.--,,+++*)*)('&' ((()))***) (()))**+,,--.-,-./.---,-.-,+,+*+++*)()**+,,-./0 //.-,+)('&&%&'()*++,,,-,+*)***++,,,-,+,+,- ,,,+++***)***++,,,-.- ,,,+++**)))('('&'''((()*)()*)((('''&%&'&'()('&'('&%$%&%$ ###$$$%%%&&&'()*+* )))((''&&&%%&'((()))*))((('''&%&'('&%$%%%&''(()**++,,---,+*)('&%&'('&%$%&%$%&%&&&''((()('&&%%$#$%&&'(()%(''&%$$##"""##$%&'(*- ))(('&'''(()(''&%%$$#$$$%%&'&&%%$%&'()*++,+*+++,+*+   !"#$##"!!  000112345  !!"""#$#"#"! ! ! !  )(&&%%%&&'((())*+,,--.-,,,++*)*+, +++*)((''&'&%$$"!  !!"#"""!"! +"#$$%&'))*+**)(('(()*+**))(('&'&%$%$#$$$%%%&%&% &&'()**++,--.0134577876530.+)'%$$#$%$$#""! !"#$$%%&}%%$$#"!  !"##$%&'()*++,+++*)(&&%$$$%&'()**++*)'%#! !!!"#%')+-/13455431/-*'$" 224 #&(*++*)'%$"  !"#$%$$##"" '&$"! !!!"""##$%%&'' +2 +,+*))*+10//...-..//0011212345 4443332211100/.-,+,-.܀ȁ *օ ڄۋ ˅ʅ +҄*͊ +Ƈ&ׅ#"Ň ʅˉʇ +ԅ ЅцՄ(ۋڂل؄̂̈́ͅ$ ȈɄ τ҆΅ ·σЅф͇̃͆ˆ·ՇԄƇŃĆIƊ'߄+  O + + +,48 +   ' ?DŽDž ) ^z½' %  1ą\\]]^^__`aabcdeefeedccbaa`__^^]\\\[\]^ +___``aaabbcba`abaa``_```aaab aa`_^][ZYWWVWVVVUUTUVVWWWXWWVVVUUUVWWWVVWWWXXYZZ[[\\][ZYYXXWWVWXY XXWVUUTSSRSSTTUTSRSRSSTTUVVWWXXWWWVWXYYYZ[[\]^^__`acdfghijj5kjk6789998887765554454321ba``_^]]\\[[ZZY +Z[\]^_`aaabaaa```__^^]\\[[ZZYYXXWWWVVUUUTSTUVUVUVVWWXXXYXWVWXWVUUUTTTSTTTUVVVWXXYYZZZ[Z[ZZYYXXWVVVUUTTTS +RRQQPPPOOONM NNNMMMLLLKKKJKKKLLMNNNOOPPPQRSTUVWVVVUTTSSRQRRRSSTSTUUVVWVUTUTSTUTSSSTTTUVVVWWWXXYYZ[[\\\]\[[ZZZYZZZYYYXXWWVVUUUTTTSRQRRSSTTUUVUUTTSRQQPOOONNNMLKLMNOPQRRSSTUVWXZ\]_`aa07_^]]\\[ZYYWVUTSQPONMMMNOOPQRSSTTUUVWXXYYZZYYXXWVVVUUUVVWV WWWVVVUTTSSRSTUWY[^`b233445554433211012 11000//0001112110/\YWUTSRSTVXZ[\]^_^^]]\[ZZYZZZ[[ZZYXWVUSRQQPO PQRSUVXYZ[ZZYYXXWXXYZ[\\]^^^]]\[ZZYXYZ[]/001222345689;=>?@@?>=<:9876665443321101123456765554322101112234555666765 +44555667889 887665544344567899:::998776544345654345656788999:;;;<<<=>=<; <<<===>>>?@BA @A@?A@@@?@?>?> ?>>@@@A@@@AAA@ ???>>=<;;:;:99876ifca_]]\]^`cfik67lkihggghjl789:;<=>?@ABBCCDCBCDED CCCDDDEEFGGHIJKJIIHHGGGFE DDDCCBBAA@??>??@@AAABA@?@?>>>==<;:98999::;;;<<==>>>?>>===<;<;;;::99877766677788999:989:988776667778889::;;<<<=<;<=<;<<==>==<;;::98887655432211bb2233343edcccbbbaa`__^^]^]]\[ZZYXWVTSRPOOMLMNMMMNPPQRQSRRQNNKHHEDCABAABBBCDFFEDDCBAA@AAABCCDEFGIJKMNPRSUUVVVUUT +UTTTSRQQPPONMN OOPPPQPPPOP ONLKJIGFFEDDCCB CCDEFHJLMOQRS RQONMLKJIHHGGF EEEFFFGHHHIIHIJJIIHFECA?=<;:9 ::;;<<<;;:9989:;;<=>@ACEGIKLMLKKJJIIH4GGEDB@><;:;;=?ADGKNQTVXZ\]^_`abcdcca_[WRMIEB@?>>?@AABCEFIKNPSVX[]^`abcccd233433210.-,,WW,,-../000///..-ZYCXXVTQNKHFEDDEGJLORUXZ\]_``abba`^[XTQMJGDCBBBCCDEFFGHIKLMOPRSUWY[]_010` 0124679::9989988877767(66654hfeddccdefg45679:;<==>>>=<;:98765443+444567788988765443334579;=?ABCDDCCBA@??>===<;<<<==>>?>>=<;:98776655434445556767 888999:::;::987765 6677899::;:::9887654gfdcbbaaabbbccded +eeeffgghhhijkjiiihhhgh'ggfedcbba``__^^^]\\[ZZYXXWVVUUUTTUUUVVVWXYYZ[[-...//0//...---,+,-,-./.---,,,+,+*+*))(('&'()(' +(((''(()))*+**)()* +)))(('''&&%&&''('&'&%&'()*+ ,,-./0122333322100//.,+**))('& '''())*++,---.-,+*)()*)()))***+*)()('&'''(()*)*)('&'&%$#$#"#$%&'()))**+ **))(('''&'('&'('&'(())***+,- +,,,++***))('('&'('&&&%%%$%$#$%$% &&''()***)(((''&&&%%%$$###"""!"###$$%%%&'(('''&'('&&&%%$$# $$%&')*+'&%$#""#$%&'(()('&%&'&%%$$# $$%%&'())*)()))**+*) **+ +  ,21/.--,,-./13466543222345 !!"! !  !!"""#$#"! )*.--,+++**)))()( +'''&&%$$##"#$$%%&%%$##!  !!!""!!   !!"#$%&'(()())((('&%&'''(((' ((''&&%$##""!"! !!"#$%&'()*+ **)('&%$$##""! !""#$$$%&' +&&$#"!  !"#$%$#0$##""  "$&()+,-.//001234554420.+)&$"!   !"#$%&%$#"#" < !#$%&'()**+**)'%#! !!"#$%&'(( +100/. +/0   + 0/.//0012123234322211000/.-,+,쀄߀ɀǁ  ބ݈ރ݆ބ݅# +#̇DŽ̆΄ԈՄ-";džωЅх҃ӄԆՅփՇԈӄЄτ݆ޅ݅܄ ԅЉφ"τɅȆʌ˄ ҄ƅń҆҆Ӌԋʉ ÆńƌDŽʅ ÄńȈɊAt#- (7@  +   [BH *ƿ+   C +'Dž [\ +]]^^^_``aabc +bbaa``__^^]\]\[\ ]]^^__```ab cccdddeeefghhiijjjkkjjjiihhghggffeedcdefedcba_^^][[ZZZXYYYZXYXYYXWVVUTSSSRRSSSTTUVVWWXYZYZ[ZY XXYYYZ[\]^_abdefghii4iiihhhggfeedeefghhi jjk6789:;<=>>?>=<<;;;:;:::99987765hfdb`_]]]^_`acdeef3234332211aa`___^^^]]]\]]]^^^_^] \\[[ZZYYXXXWWVWXWXYZ[ZZZYYYXYZYXWX +YYYZZ[\\]^_^]\[[[ZZZYX WWWVVVUUUTUVUUUTTSSRRQQPPOOONNMMMLKLKLLMNNOPQQRRSSSTUVUTTSSSRSTTUVWXY XXWWVUUTTSSRSTUUVWVVUUUTTSRSTUVWVVVUUUT UUVVWWWXXYYYZYXW VVVUUUTTTS RRRQQQPPPQRSRQ PPPOONNMMLMNON OPQRSTUWYZ\]^_6^]\[ZYXWVUTSQPONLKIHGGHIJKMOPRSTUUVVWXXYZZ[[\\\[[[ZYYYXYXWWVVUUVVWWXYZ[\#[ZYWVTSRQQRSTVXZ]013455665543221000/*.\[ZZYYZ[\/0112211100_][ZXVTQONNNOQSVXZ\]/0//___`0a`_^^]\\[ZYXXWVVVWVUVWXYZZ[ZZYYXYZ[[[ZZZYYX YZ[[\]]^^//. /01245789:9887776 777888999878 777665544332323434545654321/][ZYYZ-.0123456676665554343232123 4445566778999:;;<<=<=<==<<<=<<;:;:; :;;:::9::9 :99888787676899:::;::9887654fdca`_^]]^_`bdeghhiihhghi5567889:;<>?@AABCBAAA@@@???>>>===<==>?@ABCDEEFFFGHI HHHGGGFFFED CCBAA@??>>===<;:;<=<<<;;:;<<=>??@ ???>>>===<===>>?@? >>==<<<;;;:::98789: ;;;<<==>>??@@A@@??>>>=<;: 99876654323345789:;;<<;::987654322232334 55443443434443291121100/^\\ZYXWVTTTRQQPRQQQRSTTUUVWVVVUUTRPNMLIGFEDCBA@??>?@?;@@ABDEFGIJKLNOPQRSTTUTTTSSRRQPONLJHGECBBAABBCDEFGHIJLMNOPQQRQPQRRRQQPNLJHFECBAB +AA@@?>>>==< +==>??@@@AA@ AAABCDDEFFFGFGFFEEDCDEEFGGGFEDCBA@?>>=<<;<=?@BDFGIJKKJIGDA?<9754fefg5689;=>@BDEGIJKLLLKIHFDCAAABDGJNRUY[\]\ZXTPLHECAABDGKOSWZ]^___^\[YVSPLGB=95eb136:>BEHKNOQRTVWY[]^_`00/././ 000//..--,,+WVWXYZ[ZYWUSPMJGEBA@??@ABCDDEEDCA@>=<;(<=>@ABDEGHIJKLMNPQSTVXZ\^_`ab23455543c`_^_abd3456789:;;<;::99987654443fedcbcd345689;<=>>???>>=<<;<=<<;::987766554556678:;<<=>=< +;;:9987766545676 7778899::;;< ;::9876554 556789:;<==>=<;:9876654hgffefghijkjihhhggfefeeedddccbbbaa``___^^]]\[[ZYYXXXWXXXYYZZZ[./.-,+,-./0/./././..--,,,++***)))**)*)))('(' (())**+++,+*+,+*)()))**++,--../////.-,--.//0010 +,*)'&%%$$%%&''()))(('()*+,+*)()*)*) ***+++,,,-,+*)('&%$#$$%%%&'()(((''&&&% &&'(()*+++,,,+***)))('&'''((()('&'()('&'()*)('('&'&%$#$%$#" +###$$%&'(()"((''&%%$$##""!!  !"#$%%&'''()*)()(('''&'(()))**))(('&%$# $%&') '&%%%$%%&''&%$#"!  !"$%&'((*)('(''&&&''())**+++***)*)()*('&&&' .,,+*)**+,./00101112 !   !!!"#$#"!  (''&&&%%$$$#"""#$%&&''( ''&%#"!  !""#$$%&&''(' &&&%$#"!   !"#$%%&''('( '&%$#"!  !  !!"""#"!5 !!""#$$$%$$##"!! !"#%&''(''&$"!1T "#$%%&&&%$#"!  !#&(+-/000/.,)&$!  "$'),.012332210/.,*(%"20 !"!"###  !"##$ ##"!   !""#%&&'(()*)(('((())*00/.---,-- +21112223334343434321210/.-,-.///.π󁝀ʁˀ̀΁ & + ,և P>3̈́Ɇ҇ф҃ӄ܆ۋ +ՍԄ&"̈́͆΃̈́ ҅ džӅч ԄՒ +ъЈÅ˄ ȅ[.6 ' (@  +F # +`@)6 $4#%ŽԄ* +  +  +& /ǂYZ [[[\\\]]^^^_`abbaaa```___^^^_^]^__``aabbcdefghijj54hghijklllmljihffeddbccbdbcdbb__^^^]\\\[[[ZZYZZ[\]_`abcdeffghhihhggf +eedccbbaaa`_ ``abccdddefgghijklm778899:9887766656778899::;;;<<==>>?#>>==<;:9865443332221cba``___``___^^]^^___`_^]\[[ZZYXWVWVUVVVWWXYXYZ[\[\]\[ZY ZZZ[\\]^^__``a``__^^^]^]]\\[[ZYYXWWVUUTTSSSRSTU TTSRQQPOONNMLKLMNNNOOPPQQRRRSSTTTUUVWVUV"WWXYZ[\]^^__^^]]\ZYYXWVUTTSRRQPPOON OOPPPQQQRRRSTUUVVWWX +WWVVUTTSSSRSTTUUVVWWXYZYXWVWWWXXYYZZZ[[[\\\[ZYXWVU TTTSSRRQQQPPON OPPQRSTTTUUTSSSRRQQPPOONNNMN OOOPQQRSTUVWXWVVUTSRQPOONNNOOPQRSSTUVW XXXYYYZZ[[\\] \\[[ZZ[[\]\[[ZYXWXWWWVVVWXZ\^0112233211100//.\\[[\\]^_`0/^][YWUSQPOOPQRTVXZ[\]^_`01cccdd233433edbaa`__^^]\\[ZYXXWWWVWXYXYZZ[[\]\[\]^ _//001233455677899::;: 9998876665 667788999:::;::98876778899:998877655443332234323232345432121b1bbaa```_`01 2223344455567 88899::;;<=<; +<==>>???@@?>=>>==<=<<<;;;::9998998:9886555421000/ +0012234455654 5566789:;<==>?>??@@ABBCCDDDEEEFFFGFG HHHIIIJJJKLMLLLKKKJJJIIIHHGGGFFEEDDDCCBBBAA@A@@?>>=<;:;<=<;:;<==>>?@??>>==<<<;;:99989:; ::998877765456789:;:9998887889::; <;;;:99877665432334445566889989898y77767655442110/.ZYXVVTTTSSSRSRQQOOONMMMNLLLKKJIIIHHGFEDCA?=;:865432211000///000112334567889::;;<=>?@BCEGIKLNOOPPONNMLKJIIHG HHIJKKLLMMMNMMLKKJIHGFEEDDDEDCBA?><;::99:::; <<=>??@AABCCCDDEEEFGGHIJLMNOPQEPONMLKJIHGFFEDDDCCDDDEFGHIJKKLLMLLLKKJJIHGEC@>;74c^ZWUTUWZ`f7;>BDGIKLM7LKIHFEDCCCDEHJMOQRRRQONLIGDB?=;9765579=@DHKNPQQPNLJGECB@(ACEGILORUXZ./00011000//..-,,+VUTTT**++,,-.-,,,XXXWVVUTSRQPPO PQRSTUVWXYZ[\]"[YWSOKGC@=;9989:;=>@BDEFGHIJKLLMNNO PQRSUXZ\^_^_```abc22334556778999:999887656 777899:<==>? >>>=<<;::9::;<<= <<;;:99877665 6678:;=>?ABBCBBBAAA@@@??>==<;;:999888767 6665554443455566677889:;<<= <<;::998776665 +667889::;;< +;;:::988776mnmllkkkjihgggffeded cccbbbaaa```_^^^]]\\[[ZZYYYXY.-.-,+,- +...//01112/././//001210//..---,--.-.//0001232100/...-,-...--,-1/.,+*)))((('())**+ ***)))((('()()*)*+*+,+*)( ))**++,,--.../..--,,+,+* )))((('''&'()(((''&%%$#$%&'('& '''(())*+++, +++***)))('''&&&%&'&'()(((''&&&%&'()*)()*+,+*)('&%&&&'''('( '''&&&%%$$$#$#$#"#$%&' +&&%%$$##""! +""##$%&&''()*)*+**))(('&%&'()'&''((('&%$#"! +""#$%&''(()*-.0/.---,+++**))()*+*)))***+*,,--,+ + !"#$%$#"!  %%$##"#""#"!  +  "#$%&'&%%$##"!"""##$%$$$##"!!! !!" +!  !"###$$%&'(()**++**))('&%$$#""!!! !!""#$$%$$$#" ,)'%$$%'*-2 "#%&'( '''&&&%$#"!  "#%')*+ *('%#" !$&()***)(&$#!   !"##  !""##$$$%&&'&&$#!  !!#$&()***)(    +7876543234321010/.퀌ށ̀؀ ·͇݉ #Fֆ) - ͏̍ֈ +߄و ܇ۂ܅Ȇč΅͆̅΄φЃϊ͆Րքڅقڅ҈!ˆĄÃ„Մ߈  .߅ ' ,i  E')G     +")[Z [[\\]]^^___`a`_^]\[Z[[[\\]^_`abccdeeeffeeeddcccbbbcdcbbbaaa`aaabbcddeeffgghhiij556786kijijighggfeeedcbaaa``_^_``aabbccddeeeffgf gfffedcba`__^]^_`abcdefgghg3444555655444345667899:9899:;<;:976543edca`^\ZXTSRQRSTUVWXYZYZ[\[ZZYXXXWWWVVVUUUTUVWXYZ[[\\]]]^]\]^^^__`_``aabbccddeefffeedcba`__^]]\]^]\\[[[ZZYYYXWWVUUTSSRRRQQQRSRRRQPONNMLKJJIIJJJKKLLMMMNO PPPQQQRRRSTUVWWXYYZ[\]^__`aabbbc"bba`_^^][ZYXWUTSRQPONNMMMNNOOPPQRRSTUVUVWWWXXXYXYYYZZ[[\\]]^^_``a``_^]]\\[\] +\\[ZZYYXXXWVUTSRQPQRSTSRQPQRRSSSTTTUVUTSTUV WWXXYYZZ[[[\]^]]]\\]]^]\\[ZZYXXXWWVWWXY-XXWWVUUUTTUUUVWWYZ\^_0112211100//]\[[[\]//0112110/^]\[ZYXXWWWXXYYZ[[\]]^]]\[ZYYX YZZ[\]]^__`aaba``^]\[ZYYXXWWWVWWXXYYYZ[ZYZ[\]_`bcdefg4455677876655455677878767888999:;<;:987776665 4443322110`_ +`000111222345433322212123433322210/./010111223334 5556677889:::; <<<==>>??@@@ABA@ABA*@??>=<;:988764321//--.../01223456788899::9:9::98 7766655443444556667889:;=>?ABCEFFGHIJIHIJIHGGFFFEEDCBBA@?>>==<=>=>=<;:98789876789:;:::9989:9888989888787678765533210^]]ZYXXZYYYXXYWVTSTSUVWXY"XWVTRPOMLKKKLLMNOPQQQPONLJIGECA@?>=>=<=>?@@ABCDEEFGHIHGFECBA@ AABBCDDEFFGHHIHHHGGFFEEDDCBBAAA@@?@@AAAB +AA@@???>>>=>>>??@&??>=<;::98889::;=>?@AABCDDEEFGGHHIIJJJKJJJIIIHGGGHHHIJKLMOPRSTUVWVUSRPNLJHEB@=:865445689;<<<=>?ABDFHKMNOPPOOMLKIHIJKLLLKJIGFDBA?>==<<<;;:;<=>?ABDEFGHJKMOQSUWZ\/0112322100//.--,XXWWVUVVWXXYZ[ZXVTRPNMLLLMOPPQ PPONNMMNNOPPQR$QPOMJHEC@><;:::;<=>@ABDEFFGHHIJLNPRSTUVVWYZ\]_`abc123 44455566676567877766656787678765 667788999:;;;<<<=>>>===<<;;:::999: 9988776554332334455567876567789:;;<; :::998877665kjiiihhhghihgggfffeedcbcdcba```___^^]]\\\[[[/.-,-,+*+,---.../0/././01/.-./012 +11100//...-,+,+,,,--.!,++*)('&%#"!!"##$%&&'''('('()*+*++,,,-,+,-.-./0 ///..-,,,+,-,+*))((('&&%%$###"###$$$%&'()*)())***+,-, +++*))((''&%%$%%&&&'''()*)* +++,,,---.-,-.--,,,+*)('&'&%$%&'&%&'()('('&%&'&&%%$ %%&''()*((' +((''&&%&'('&'''(()***+++,,,---,,,+**))()*)(''((()**+,-..//**)* !!""#"#$#"#"! +&&&$$##$#"*#$$%%&&&%%$$#"!  !!"##$$$##""!  + !!""#"!!  !!!"""#" !!   !!!   !!!"##$$$%%%& %%%$$$###" ##$%%&'()**+**)('&$#!   !"#%&'('&%$#"!""##$#"!!  + !!"#   !!!"""###""!   !!""###""!  !#$$$##"###$%%&&'( 432343210/010/ӁÁ χ ܆ ׄIІ ԈՆև +ڄڄӄ҃ӇԄՃԆׄ"߄ƅŅɅ τЃч҉ц +ևׅ؋ ޑ߂ϒ$‡Â„ ɖʃˉ̄ɆȄ.…ΌψЊڄم؄لڇۅۄڅ&…ÆĆ߄!") + a&  +K   +3^%¾J #.!!A 3  ++__^^^]]\\[[ZZYYXYYZZ[\\]^__`aabaa``___^]\\[[ZZYXY +Z[[\]]^^__`_```aaabaa```__^]]\\[[[Z#[[[\\]]^^__``bcddfefhgikjkkjjhhhgfecbbbaaa` ___^^^]]\\[[[Z[\]^_^^^]]\\[\] +^^^__```aaba``_^^]\]]\\\[ZZYXWWVVVUTTTSSRSTTSSTTTUUVVWXXYYZZZ[\]^#___^]\[ZYXWVVUTTSRQPNMMMNOPQRSTUVVVWX WWVVUTTSRRQQQPQ RRRSSTTTUUUVWXYXWXYZYXYZZZ[[\\\]^_^]^ ]]]\[[ZYYXWWVUVWXWVVVUUTTSSRRRQQQPPPOOONNML MMNNOPQQRRSSTUTUVUTUVVVWWXY[\^_abcdeefeeddcba`_^][ZYXWUTSRQQPOOON OOPQQRSTUVVWWXYXYZZZ[[\[[ZZZYZ[[[\\\]]^^__``aaba`abbcccd ccbbaa```_^^^]]]\ [[ZYXWVUTSSRQPONOPQRQR SSTUVWXYZ[\]^_ ^^^]\\[ZYYXXWXY XXWVVUTTSSRRQR SSTUVWYZ[\]]./01 00/..\[[\\\] \[ZYXWVUUT&SRQPPONNNOPRSUVWXYYYXWWVUUTUUVWYZ[]^^_/./001122232210_][YWUTSSTUWY[^012232221110`_^^]]\\[[ZYYXYZZ[\\]\\[ZZYYXYZ[[\\\]^^___``__^]\[ZYXWVUTUVWXZ[]_`bdefgggffedcbc23445556554433221012233445556667787766554 5556667778899:987665432210/^\\[[[\\]]^__``00123221110/_^ _//0011223344565678988877765456677889:::;;<<<==>>>???@AAA@@@??>>===>>??@ ?>>=<;:97654434 566788999;:9878776565655566655666556543211122234689;=>@ABCCDEFFGGGHGFEDCBCDEFEEDDCCBA@??>===<===>>>?>=<;:9878789:;:9:;:9::;;<<==>===<<;:9 :999:::999::9:99:99765331_0^^^]_a122d3e3!233322110]ZVTQMLIHJIKMORTUWWUVTSSQRSTTUUTTSRQPOONOPQSTTUUTTSQPNLKIHFEDCBAA@@@???>)??@ACDEFGHHHGGFEDDCCCDDDCCBBAA@@@AABBCCDDEDDCBA@?>=<;:9887899:;=>@ACDEFFFEDBA@>==<==>??@@@?>>=<;:;:;<<=?@ABCEFGHHIJJJKLLMMNNONM.NNOPQRSTTUUTTSRPOLJHFCA?=<:998899:;<=>?@@AA@@@?>9?@@ABBCDDEEFFGGHHIIIJJIIIHGGFFEEEFFGIJLMOPRSUVWWXXXYYZ---./\[YWUTRQPQRQPPPQQQRQPONLJIGFFEFFGGHHIIHHGFEDCCBBABBBCCCD'CCBA@?>?ADHLOQRQPOOPQSUWXYYYZZ[\]^_`ab12345434455666767898 7776665443gfeddcccbbbcccdeeffggghg3456787666555443 45679:<>?ABCCD +CCBBAA@@??>===<<;::987766555456789:98788999:;:9998877665544ggfedeffggghhi456kkkjjihhgffeeddccbbaa`abcdccbbba`0/...---,+,-,+*+*)*+, --...///00010///...-..././//00/00//.-.-,-.-,-./0/././0///...-,,++**)*+*))(('&'()***+++,+*))(((''&&%$#""!! !!""##$$%&'&%$%&&&'''()*+*)*+,-,- +,,,++**)))()*+*)))((('&%$#$$$%&&''()()('()*)**+,--../...---,,++**))(''&&%%$%%%&&&''()()***+++,+*+*+++,,,-./ 0001112223210//..-,,+**)))((('''&%$#$$$%%&&'())*+++,,,+++*)(''&&%%%$ #$$$%%&&''((%%%&&&'''((''&%%$%$$$##"##$%&''(''&&% +&'(())**)'&%$#$$&'())((('''&%&&''((()()*+,++**)(('&&&%&&&'(()*+,--./...---. ''& '''((()))+*  ! !"#"!  ! *)***+,/.(&$#! !#$%$$$#"#""!! !""#$$%$$#""!  !"!!    !"!  !!""###$%&%$%%&&''('''&%$#"! !"! !"!   !"""! "##$$$###$$%%&22111012 221110/01321100/./010ہ΁ɀ τ+߄ՄԃӉƄʄ˂ʉɂʅɂȄɄƇ-ԅӈŏ•3ٌ1фׄ Ҍф +֍ׅֆ ͈ɅȄ ʉ˅͉̈̊Ņ*ۅ ڄى ݈߄$Jڄ߄#R + +$ +1 )R  )!ׇ؆!ĄɄń(Å H"ƄƆ%'*  !baaa```__^^]]\\[[ZZYZ[\\\]]^^__`aabcddeffgf +eeeddccbbba`a +```__^^^]]\]]^^_ ^^^]]]\\\[ZYZY'Z\Y[\\^_]__`bbabcccbaa`_^^]\\[ZYYXXWWWVWXWWVVVUVWXY +ZZ[\]^_abbc baa`_^]\[ZYYXWX WWVUTSRRQPOONMNONMLLLKKKJKKLLMMNNOOPPQQRSRRRQQPQQRSTTU TTTSSRQQPOONNM NNNOOPPQQRRSTUVWXYXYZ[ZYXXWWVVUVVVUUVUTTTSSRRQQPPOOONOOOPPQRRSSTTUUUVWVUTSTUTUUVVVWWWXXXYYYZ[[\]^^^___^"]]\\[ZYXWVTSRQPPOONNNOOPQRSTUVWWXYZ[ \\]^_``abcddeddcbba`aabcddedccba`_^^]]\\\[Z[\]^]]\\\[\] ^^^___``aabbc bbaa``___^^]]\\[ZYXWVUTRQPOONMMMLKL +MMNNOOOPPPQRSSTTTUVVWXYZ[[\]^_``aabaaa``_^]\[YXWVUUTTSSTSSRRQPPO PQRSTVWY[]//0/. ---YXWWVUTSSSRSRRQQPPOONNMMMLLK +LMNPSUWXZ[\%[ZYXXWXXZ[]_012333210^][ZXWWVVWWXYZ[\. \\ZYXWVUTS TUVXYZ[[[ZZZYZZ[\]]^^_^^][ZYXW XYZ[]]^__` ___^]]\[[ZZYYXYZZ[\]^`b23456655432a_][YXWVUUTUUVWXXYYZYYYZZZ[[\]^_abcd22345 +44332110/_^__000121 2223334445676565432 +11100/^^]]\[ZYX YYZ[[\]]^^___0121234567876789876566778899:;;<<<=<;<<<=>>?@ ?>=<;:9988876 7788777876+566677788999::;;;:::99887766555455566778999: ;;<;;<===<=>???@@BBCCDEFEEEFFEDDCCCBBABCB +AAA@??>>==<;:;<= <<<;;;::9988878989:9:;::99888789:;:::9::999::99:::998887656567676676788777887765igeca`_^__``abaa```__^^_][ZXYXVUTSUSRRQQQPONOPONNMLLKJIHGFEDCBCCDEEFGGHHHIIIJKLLMNNOOPPOOONNMMLMMNNO NNMLKJIHGF +EEDCBA@?>>=>>??@??>==<<;<<=>?ABDEFGHGGGFFFED EEFGHJKMOPRSTU TTSSRRQQPPPOONONMMLKKJJIHI HGFEDCA@>=<;:;;<=?@ACDEFFGGH IIJJKKLLLM NNOPQRTUVWXYZ[ZZYXXXWXWWVUTRQPOONMMLLKKJIHHGF GGHIJJKKKL KKJIHGEDDC:DEFGHHIHHGGGFFEDDCBBAA@ABCEGHIJKLLMMMNNOOPQQRSTVWXZ[]_`a1123454345566777898765554ihgggfffeeddccbaa``_``aabbcdeffghhiijj56 77788899:::;::999876 56667789:;<<=<;:9 88877666555455566678999::;;;<;;;::99876555jihhgffeedddcbc +dddeffghhhih456555jiihhhgggfffedeeefffggghhhgggffeddcccb0/.-,+*+ ,,,--...///0/...--,+,+,-.-,+,*+,+,-,---..-. ---,,,++***)()*+*)*+,,--.//0/.--,,+*)*)('&%&%&%$#"#$%$%&'&%$%&'()***++,+,-,+,+*)('''&&&%$%&'()()()*+,-,,,+++**))((''&%&'(())*+*) **++,--..//0/.///000100///..---,,+++***)*+*+, --..///001210//..-,++*)(('''&%$#$%& +'''((())**+, +**)(''&&% &&%%%$$##"##$%&&'( %$$##"""!!!"#$#"! !"#$%&'()**))(('&''()('&&%$%%&&'(()(('&&%%$%&''('&&'''(()))**))('&&%&''(()))*)( )))*++,-./ .-+*)(('&'(())*) **++,--.//0 *)***)()()('((()))*+ !!"!   10/-,++*+*))()(((''('&&%%$##""#"!"!   !!!"!""##$$$% $$##"!!     !"##$%&'(()((('''&&%$%$$###"#"# +""!!   !!!"#"!"# ""!!   !" !!"""##$%%%10///..-, ---..//00112 +33222111013210/01210À܀݁ :dž ‡ ƄLJ‡Єщ҄цŇƇDžƅŊĄ!)*؅Ŋ…Έφ΄ƃÄăŎąňƇ̇͊ɅȄɌ Åjڄۄׄ܈݆ބߐ߅ޅ݄Ȅ2ׄ  + !$  + + % +)#!  #z ?߂# +ބ߅1Fͅ$#)Ʉc *1)@#lkkjjihgffedccbbbaaa```_^^]\[[ZYYXXW +XXXYYZZZ[[\]^^_`abdefhijlm7778 +7776655444ghi hhggffeeddcccb +aa``___^^^]\]]]\\\[[[ZZYYZZYZZZ[ZZ[YXWVUTUVUVUTTSSSRRQPQRRRSTTUVVWWXXYYYXXXWWVVVUTSSSRRRQRSRQQQPPPONOPQQQRRRSSTTUVWXYZ[\]^_^^]\[ZYXWWVVUUTTTSR QQPPPOONNMLMNOPPQQRRRSTUUUVVVWWXYZZ[\\]^^___```__^^]]\ [[ZYXWWVVUTSTUVWVUTSRS RRRSSSTTUUVVWVUTSRQRRSSTUUVVWXXYZZ[[\\]^]\\\[ZZYXWVUTSRQPOONMNNOOPQRSTUVWXYZZ[[\]^^^___``abbcdefghijjkjjihgedcba`_^]\\[[ZZZYZZ[[[\[[ZZYYXYYZ[\]]^_^]\]^_`a`_^]\\[ZZYXVUTSRQPPOONOOOPPPQQQPPPONNMLKKJ KKLLLMMMNNNOPPQQQRRSSTTUUVVWXXYYZZZ[[[\]\\\[[ZYXWVVUTSRRQQPPOONNM NNOQSUWY[/012110//./06//..-YWUTRPONNNOPQRRSTTTSRPNLJHFEDCCCDEHJMPRTVWXYZ\]^/0/00112233322110_]\ZYXWVVUUTSRQPPOONNNOOPQQRRSSTUVVVWWXXYZ[[\]]^^_^]\]]^__``aa``__^]]\[ZYX YZ[\]^_`abcdd23456544433210/^__//01234565554432322211000/0012334455444322110/^ ]]\[[ZYXXWX WWWVVUTTSR SSTUVVWWXXXYZZ[[[\\\] \\[[ZZYYYXYYYZ[[[\\\]]]///0001122233456789:;<<<;;;::99887776789::;;;<<=<;<;;:::9:;<= <<<;;:::999:;;;<<<= <<<;;;::99:9987665643233210112111234566688:<>===?@7ACCBBACDCBACCCBBCDDCBCDCBA@A@@??@@@??@@@???@??>>?>==<=<;<;;;<;:;;;<<==>>?@@AAABCCCDDEDDDCCBBA@@??>>===<;;:::999878787989:999:;:<;I<<;:;<<;::;;:99::987888767887789;:::;<;:9:99877787656654344433345444555456765 66677788999:;:998877665166677888776543eb`_]\[ZYXWWXVVUTSTTTVVWZZ\^^_`_`aa` _^]\[YXWVU TTSRQPNLJIGFEFGHIKLNOQRTUWXY[\]^__``a ``_^]]\[[Z[0\\[[[ZYXWVUTSRQONMKJHGEDBA@@???@@AABCCDDEFFGHIIJKLMNOPQRSTSSRQONMLKKJJJKKKLLMMNNNMMLKJIHG +HIKLNPRSUVWVVUUTTTSSSRRRQQQPPONMNOOONNMLLKJIHGGFGHG HHHIJJKLLMNNNO +PPPQQRRSSSTUTTSSRRQQPOONNMMMLK LLMMNOPQSTVWX>WVTRPNLJHFEDCBAAABCEFGHHGEDBBBCDFHIKLMNOQRSTUUVXYZ[\]]^_``abb123454566677789877766656 554gfdcba`aabcdefhiijk66778889:9 :::;;<<<===>? >>==<<;;:9998767778899::;;;<<<= <<<;;:9988776789 :::;;;<<<= <<;::99887876mllkjjihgfedccbbabbbcccdefffg45676555ihgfedcbaa```___`aaabbcddefgghijj5556l43210/...---,+,-, +---..//011.-..//010/...---,-,+***)*)('()*+*)*)('&'&%$#" ###$$%%&&'&%$#$%&'()*+,---.../.-, +++***)))*)('()*+*)('('()*)('&'&% &&&''((())***+,++**)(('&&%$$$###$%%&&&'''(())**+, +---..//00010 ///...--,,++*+*)*+,+,-./0/ ..--,+**)((''&'()(((''&%%$#$%&'()*+**))((''&&%%%$$$#"!"##$%& $##"! !!"##$#"!  !#$%&''())**)('&&%$$$##"##$$%&%$%&'()*+,,--...//...---,+*)()**++,-./001222))()((())('&'&%$%&'()*)()* !   ,  !"!   +*)('&%%%$#"##$%&'(())**++*)(''&%$%$$$#"!  !""#$%&&'())**+++,+*)*))(('&&%$$#"!!  !!!"##$%%&%$$#""! !!""#""!!  !"#$&'(()(((''&%$#$% $$$##""!!   !   !""#$%&%$#"!  !"###$$%&10/.--, -../001122 77766655544333210 11100//.---,-.//001114ɀʁˁ /ֆKل ƌńƄĆÊĈɊ͉΋ύΈ͎·…ƍDŽ͏ хΏ͆ĆĄ‹ÃĄ ц نͅЉщޅY؍ׄֆՆׄхՄև-̈́  +(     + . +߆!Bۇ:ӆ'̆/.  .45:::998887666kjiihhhgfffeedccba`__^]\\[[ZZYZZZ[\]]^_`abccdefgghiijjkkkll6 +555iihgfeededddccbbba`_`_]]^]^][\]\^^]^_^_`_ ^^^]]\\[[ZZZYXWVUTSRQRRRSSSTSRQRQRSSSTTTUVUVVWWWXWVUVUVVWWXXYX WWWVVVUUTTTSRRRQQQPPONOOPQQRRRSSSTTTU VVVWWXXYYZZZ[\]^]]\\\[ZYXXWWVVUTST +SSSRRQQPPPONMNOPQRRRSSSTUUVVWWXXYXXWWVUUTSRSRSSTTUUVW XXYYZZ[[\\]]]^]\\[[ZYYXWWVVUUTTSSRRQPPPOPPQRSTUVWXYZZ[[\\\]]^^_1```aaabbcccddeefgghiijjjkkjjjihhgfedcba`^]\[ZYXWWVWXYZ[ +\\]^^_`abbcbbaa`_^^]\[ZYYXWWVUVVWWWXWVVVUUUTSSRQQPONMMLLKLKKKJJIIIHIIIJJKKLMMNNOPPQQRRSSSTU VVVWWXYZZ[\\\]\\\[[ZYXXXWWWVVVWWXXY[\]^//0/ +..\\[ZZYXXWVUUUTTTSSTU#TSRQPONLKKJIIIJKLMOPRTUWXY[\]^//0001000//^]\]]\\\[Z[ZZYYXWVUTSSRQPO PQRSTUVVVWXW XXYZ[\]^^_``a`_^^]\[ZYXWWWVVWWWXXYYZZ[[[\\]\[Z [[[\\]^^__``abbcd233445566676665543210a`_`0 1112233344454443332100`_^]]\[\\]^/0010/_^^^]]]\[[ZYXXWVUUUTTTUUUVVVWVVVUUTTTSRSTUVVWWWXXYYYZZ[[\]]^__``abcccddee34"3322100^]\[[ZZYYZZ[\//0123445667778 999:::;;;<;:989:9: 999877666565434555666789:;<=>?@@???AA@@@AA@??@?>=8;:;;;:99:;:99:;;:::<<;;;=>>==>@?>>>@@?>>??>===>=<<<>=<<<>?A@+CBAAACCBBBEDCCCFEDDDGFEDCEECA@?@><;;=<;::<<;=<<;<==<;:<;:99:::999;;::;<=?@??>?@@>?>=<<=<;:::9877876766678777899989 8878877667765456555444332 122334567899:987654eb`][ZYXYZ[]_acef34 +hhggffeeddceffhhi5i55iihghhgffededcccbcba```__^^]]]\\\]]]^^_``aaba```___^^]]\\[ZZYYXXW!VVVUTSQPNMKIHGFFEEFFGHHIJKKLLMMNNONNMLLKKJJKKLMMNOPQRRSRQQPPOONMMMLLMMNNOPQRSTUVWWXWVUUUTTSSRQPPONMMLMNOPQRRSRSSTTU TTSRRQPPONNNMLKKJJIHIJJKLMNNOOPQPPPONNMLKKJIIIHHHGGGFFFEEEDEFGGHHHIHG0HHHGGFEDCBBBCCDEFHJMQUWXXWUTSSTUVWXYZ\]^__`aabbb121233344456789:999888789 +8887665444g.hhi455566777899::;;;<<<;;::998887778889::;<<==>=< ;;;::9988777677889::;;;<<<==>>>?@@@???>>==<;;:9988777678 +99::;;<=>>? >>=<<;::999878987mmlkkjihhgffeedeefghhi5556667788899:::;:9988877665jigfedca`_^^]\[\]^`acegijln7889:10/.---,,,+ ,,--..///0012/.-./.-./.-.--.-./.-,+*)('&'()*)('&'()*)()('&%$# """###$$$%$%$%&&&'''()*+++,,,-,-,+*)('&%$#$%&&&'''()***++,,,- ,,++**))((('()()*+,+*)('&%%%&&&'''(())***+++,-./0001112232221100/.--,+**)*)( )))**+,,-../...--,,,++***))((('()*+*) ((''&&%%%$#"!"#$%&'&'()*)('& +''(())&%$#$##""!  !"#$%&&'(())*))()('&&%%$$##""!!! !!!""#$$$%$% +&&''(())**+,-, ++**))(((''()*+*++,,--./*)('(()('&%$%&%$%&'&'( )))***++,,--./0 +**)))( )) !! "!! "!  -,*)(''&''()*+,-----,,+*++,-../1000/..---,,,+,+*)**+++,+*)('''&%%$#"!  !!!"""#"! +"""##$$%%%&%$$$##"! """###$%%&&''(' &&&%%$$##"""!""##$$%%&%&%$#"!  ! !  !#$%&%%$##"###$$$%&00///00016555444321011100//...--,,+++* ++,-./012ŀŀہ 7g +ՈȋdžȃDŽƆŅɇ'͈Ότ /ц҈ӈ҆ф +ɋ ʄ˃ʊɉ (ۆ܅džą։'ȅDŽÄߋ ؄׆ шʅɊ ЄJ b(  + $Ԅӈ߄ '   h -̄ˇ ͈ʇڄlɄ%Ƅ/  )1 +69::;:::9988876mllkjiigfedcb`_^]]\\[[\]]^^^___`aabccdeffgghiiijiihhgfedcba`_^^]]^^_`bceghjklll65554ihhghhhffgeffedddbbc`aa_`a___`aabcccdde dddccbbaa`___^^]]\[[[ZZZY ZZYYYXXXWWVVUVUUUTTTST SSSRRQPPPOPPPQQQRS TTTUUVVWXXYYYZ +YYXXWVVUUUTSTUTSTTTUUV WWXYZZ[[[\[ ZZYXXWWVVUUUTUVVVWWWXWXXXYYZZ[[[\\]^^^___^^^]]]\[ZYXY XXWWVVUUTTTSRRRQQPPPONMLKLKKLLLMMNOPQRRSTTUUVVWWXXYZ[[\]]^]\[[\\\] \[[ZYXWVUTTSRQRRSSTTUVWWXYYZZZ[Z[[[\\\]\\\[[ZZYYXXWWVVVUUUTTTSTSTTTUVVWXXYZZ[\\]]^^^_^]^__```aab a`_^]\[ZYXXWXYXWVW XXYYZ[\]^^_``a``__^]\[ZYXWVUTSRRQQQPQRRRSSTUTTTSSRRQQPPOONNMMLLKKJJIIIHIIIJJKKLMNOPPQRSSTUVWWXYYZ[[\[[ZZZYZZZ[[[\]^ ]]\\[[ZZZYZZZ[[[\[ ZZYXWVUSRQONOPQSTTUTSSRQPPOPPQQRRRSSSTTUUVWYZ[\[[ZZZYZZ[\\]\\[ZYYXWVUUTTSSRQRRSTUVWWXWWXXYYZZ[\\\[[[ZZYZ[ZZYXVUTSRRSSTUWXYZ[\]^^___`_` aaa```__^^^]\\[[ZZYZZ[[\\]]^^^__``aabaa``_^^]\]]]^__`acde34455667 66554332ba`_^]\ ]]^_00112223210a``__^ __`abcde2321 bbaa`__^^]]]\[ZZYYXXWWVUUTSRRQPPOOONNMMMLLLKLMN OOOPPPQQQRSSSTTTUT +UUVWXYZ[[\] \\\[ZZYXXWWVWWXYZ[[\]^^__``aabcba`_`0001122233445556567656789887766654555666765434 55566788999:;<=<<<;;;:;<=>?>?>@???@AA@???@?@@@???@??>>??>>=?>>==??>?>=<;:9998766676654321112122334566789::;<<<=< +;;:::9988878766555434555666777899:;;<<;;;:988877656787776554gfdcb`_^^] ^_`bcef4454hhggfedffefedeedefffhggjii54gfedba_]\ZZYYYZ[\]_`abcb aa``_^]\\[ZZYXWWVTSRQPONMLLKLKJKKLLMNNOPQR QQQPPOONNM'NNOOOPPQQRRSSTTTUUTTTSSRQPONMLKJIHGFEEDCDEFHJLOQTVXY[\\]]\[ZYXWVUTSRQP +OOONNMMLLLKJIIHHGGFEDEEFFGGHHIJK!JJIGFECBA?>>==<<<===>?@ABCDFGHIJJKLLLKKKJJKNQTVWVSPMJHGHIJKMOPRTVXZ[]^`abc22321212345666777889:98789:999887767 665544333effgg4445 6667778889:;<=<<<;;;::999888788899::;<=>?@ABCEFGHIJKLLMLLKKJJIHHGFFEDCBBA@?>==<<;;;:::;<==>>?@@@A@@?>>=<<;;:99988876789:9887665jigfedccbcdefgij56678899:;;<<===>0===<<<;;:9988877mlkihgedb`_^\[ZZYYZZ[\^`bdfhiklm788943 22110//..-,-.-./0/ ..--,,+++* ++,,-../0010//0/.//.//../...-..-./0/.-,+,+*)*)('&%$%&'()))***++, ++**))((('('&%$%&'('&'()*+,-./.-,-.-,+*)('&%$# $$%%&''(()))*+,-,- ,,,+**)(('&&&%&%& +'''(())***+*+*)()***+++,-./0/ +..--,,+***)*+*)() **++,,---. ---,,++**))(('&'''((()('&%$#"# +$$$%%&&'''()))**+++,+*+,- ,,,+**))(((''&'&%%$$#"!!  !"##$% $$##"""!!!"""# $$$%%%&&''()()*)))(((''&&%%%$$$#$$%%%&%&'('&%%$$#"#$%%&'(())**++,,,-,-,+*))((('((())***+++,,,-.-,,++*+,,,--../ ++**)()))**++**)( +)))**+,, +++***)))('&%$$$##"""!  !"#$% &&&'(()**+++, ++++**))((('((())***+,-,    /.-,+*)((' ()*+,-././/././//000//..-,+*))((''(()**++,,,-,++**))((' &&&%$$#""!! +!!""###$$$%$#"#$%$$##""!!   "#%&'))*+ **)(('&&%%%$#"!   !!!""! "#$$$"  !"##$%%&&&''//.///00 !!"##$$%%&%%%$$##"""!!!  544322100///.///032221100//.--,++* ++,-./01233〈違ၕ 7؅I -̆ˆʃɅdž˄ʅˑ̆˅Ȅ +ʆ Dž׈چćÇąÄы҆ ʎɍĉÇ 6„ DŽȅ͆ӌ׈ „ ؅مڔۄڂم؏׆ք҉Ŏ ˄ Ӌ3" ܄ W  ' % +م!لڂۇr…ʄ,ɄƄ& ! +\8787 66655544hhhgfe ddcccbbaa`___^^^]]\\[[ZZY ZZZ[[\]]^_``ab(cccddeeeffgghhgghgghfdddccdaababcbabbabb`_^ ]]]\\[[ZZYYYXWVUVVWWWX WWWVVVUUUTUV UUUTTSRRQQQPQPQP QQRRSTTUUVUVVWWWXWWVVUUTTSSRQQQPQRQRSTTTUVVWWXYYZZZ[[[\]^]\[Z[\[ZYXXWWVVUUTTSSRRQPOPQQQRRSSTUUVWWXYYYZ +YYYXXWWVVVUTSSSRRQQQPQP QQQRRSTTUUVVVWXYZYYYXXWVVUUTSSSRRRQRSTU VVVWXXYYZZ[[[\]\[ZYXWVWXWVW XXXYYZZ[[\\]]^]]]\\[ZZYXXWVUTSSRQQPQRSTUTTSRRQPPOONNMMLLKKJJIIHI JJKKLLMMNOOOPQ RRSTTUVWXXYYZ YYYXXWWVUUTTSTTUVVWXXY XXWWVVUUUTSTTTUVWXYZ[\^^_`__^]\ZYXWXYZ[[\\]\\\[ZYYXWXXYYZZ[[\\]]^^//0 ///]\[[ZYYYXYXXWWVUTSRRQPPOONOOPQQRSTUUVWWXYYZ[[\\]]]^_ +^]]\[ZYXXXWXW XYYZ[]^_`aabaa`__^^]\]^^___`a`_^__``aaabaa``_^]\[[ZYXXW XYZ[]^`acdfg4hhgfedcb``_^]]]\[[[ZZYYYXYYYZZZ[\ ]]^__`a11222321cbbaa``__^]]]\]]]^^_`_`_//00010__^]]\[ZZYYXXXWVUT UUVVWWXYZZ[\\]\[ +\\]]^__```a`_^^^]]\\[\ ]]^^___``aabcccdd232101232 3334455667665544332123454323454567778889#88777666555455566778999:99887654433210122233445566778889:98787665554565544434445567654556677889887766554443ffeddcccbcd +ccbaa`__^^]\^^^_``accbccc23223334)321ba_^]\[[[\]^_aceg4445444fedba_^]\[[ZZZYZ[\[[ZYXWVUTRQPPOONOOOPPQRRSTUUVVWWVVUTTSRQQPPPOOOPQRSRQ RRRSSTTUUVVVW-VVUTSRQPONMLLKKJJJIIIHHGGGFFGGHHIJKMNOQRSTUVWXWWVUTTSSRQPPPOON +MMMLLLKKJJIJJKLLMLLKJJIIHHGGGFFEEEDDDCB +CCCDDEEFGGH GGGFEDDCCBBBA BCEFHIJJKLMNNONNMMLLLKLMOPRSUWXZ[\]^_`a001232123456789:987876 +555443feedc +ddeefgghh45 66677899:;;<<=<<<;;;:9876788899::;;<<=>?@ABCDEEFGHHIIJJJKLMLLLKKJIIHGFFEEDDDCBA@A@@@?>>=<<;::998765 66777888999:988766554gfeedccbcdefghjk67899:;;;<<<===>!==<;;:99877766lkkjiihgffedcba`_^^]^__abceghjkmno8898210/.-,,+++*)*+,-./0/.-,+,+,+*)()*)()('&'&%$%$%&%$%&'((())***+,-./.-,+++**))('&%&&&''((()**+++, +++***)))('&%$%&%&'()*+*)()*+,+,-,+*)()*+++,,,-.- ,,++**))(('''&'()*)))((('&%%%$$$#"#$%&%&&''(())***+++*)))((('&'''(()((''&&%$ +%%&&''(())*))(('&%&&''(''&&%%$ +%%%&&'''(()**))((''&%& %%%$$$###"""!""###$$%%%&&&'''()*)((''&&&% &&'())*+,--.--,,+++*+,-,+++***)*+,-, ++**))(((' ()**+-./001210//.-,,++***)('()***++---,+*)*+*)))((('&'& '''(())**+++,+*+,,,--.-,+*)*) ***+++,,,---./ +.-,+,-,+*+++,,,---..-..--,++*)*+,-./ /.-,+**)((('&'( '''&&%%$$##"! """###$$%%%&%%$$$###"#$%$%%%&&&' +&&%%$##"""!  !!"##$%%&''(''&&%$#"!  !!!"""###"""!!  ! !!!"!  + !!"#$$%%&.--, ---..///00 !!!"#$#"""!!  2100///.- ...//032111000//..---,,---./0112345􀇁€߁ &4݄܈ۋ WƒŃƆ!7͊΃͋ ʆ0ŇƃDŽȅɅمƄDŽ ΊϏ΅υЄ3ЍψЅчڊՄԂӅԂՇ ̈́τЇ „ ņ …!˄ۅ܆#+( $8  + +  &Љمڅۅ7" +  +!8R Є&ˇ '  8  b +bbcccddeeefggghijk667899::; :::999888777655jjihggffeedcbaa`__^]]]\[\\]^\]^`^_a_`bbbcdcdfffhhgijghg fffeedddcccbaba`_^]]\\[ZY ZZZ[\\]^_`aba`_^]\[ZYXWWVUUUTSRQPQPONONMLMMNNNOOOPOPQR QQQPPPOOONNNMLLLKKKJKLMNOOOPPPQQRRSTUVVWWXXYZ[\[\]\\\[[Z YYYXXWWVVUUUTUVU TTTSSRRQQPQRST UUUVVWXYZ[]^_`_^\[YWVTSRQPPOONNNON OOOPPPQQQRST UUVVVWWWXXXYZYXYZ YYXXWWVVUUUTUVWWWXXYYYZ[\[ZYXWVWXYZZZ[[[\[ZYYYXXWWVVUTTSSSRRRQPQRS RRQQPPOOONNNMNOPQRQRRSTTUVVWVVVUTTSSRQQPPPOPPQQQRSTUTUV WXXYZ[\]]^^_/0100//^]]\\]]^_0011121100^][ZXWVTSRQPONMLKLMNOQRTVWXZ[[\]]^]\]\\[ZZZYYYZZZ[\\]\\[ZYXWWVVWWXYZ[\^_``a`___^^^]\\]]]^^__``aabbbccdddedddccbba``__^]]]\\\]]^__`abbcd!ccba`^]\[ZYXWWWVVVWWWXYYZ[\]^^_``a``__^]]]\]\[[ZZZYX YYZZ[\]]^__`__^^]\\]]]^_`acdegh4 33edca``_^^^]^]]]\\\[ ZZ[[[\\]]^__0 //^]]\[ZZYZYYXXXWWVVUUTSSSRRQPONMLMMMNNOPPQQRRSSTTTUTSRSTSTUVVWXYZ[\]]^__``ab aa``_^]]\[\\]]^/012100``___^^^___``aab11232101234543234445556 77788899:::; <<===>>??@@@A@?>>==<;<;;;::998877665545678 77766655443332100`_^]\\[[[\\]^__`__^^]\\[ \\]^^_```a``__^^]\[YXWUTRQONLKJHHG HHIKLNOQRTUUVUUTTSTTUVWWXYZ[\]]^_`001233232321110112233433321100`_^^]]]\]^]\\\[[ZZYXWWWVVVU VVWWXYZZ[\\]./0100_^]\[[[Z[[\\]^^_^]\[ZYWVTSQPONMLLKLLLMMNNOPPQRSSTUUVVVWVUTTTUUUVWV UUTTSSRRQQQPOPQPPPOONNMMLLKJIIHGGGFFFGGGHIIJKJ"KLMMNNNMLKJIHGFEDDCCCDDEFGHJKLMNOOPQQQRSTVXZ\^`b123344432123432123456787676665544333edccbcccddeeeffghi45567654333gfe2345*66777889::;;<==>>?@@ABBCCDDEEFFGGGHHIIIJJJKJ IIHHGGFFEEDDDCBAAA@@???>>>===<<;::998776655545678 7776665554ihiijklm789:;<=>>?@AABBCCDCCBBA@?>=<;;::99888poonnmmlkjjihgfedcba`__^___```ab/000121 +111010///...-,-,,--,-. /./00012223223 222111000/.-.-.-,+*+,,--..///00///..---,,++***)('&%&'&&&%%$$$#$#"#$%$#$%&' ((()))***+,-./.-,+*)*+,++***))()*)*+++,,--. -,,+*)(''&&&%&'('()*+*)*+*)*+,+*+*)()*)*+++,,,-, ++++**))((('('()('&%&'&%&''((()('''&&%$%%%&&&'&% +&&&''(()))*((('(((''&%%$##""!!  !"#$%%&'(()('('()((('''&''(()**+,,-,+*)***+++,-. --,,+++**)( )))***+++,,,- ,,++*)(('& ''(()**++,--.---,,+++*+***))(' ((())**++,,-,,+++*++,,-.// ..-,,++*)('&'''((())((('()('&&&%%%$#"!""###$$$%%%&&&'&%&'& ''(())***+,-,,,++**)***+*)*++,,, !  +,,++*)))(()*)('()*+*))(((''&%%$#""!   !"#$%%&&'&%$% &&&''(())****)))('('&%$ %%&&''(((*))()*+***))('&&%$$#"""!"""##$$%&%&&&'''('&%$%$###"""!!!   !  + !!!"! +!!""#$%&',-./0001/. !!!"""#"! 000///00011 34 33221100//..-./ӀʁĀ 4+ 1͊̆̓·ˇ Š‡ÂĄÂ…„Ćʄ ĄńĊÅąŅƆdžȂɅȄLJćƆʼnƄǃȉɃȎǂƊ ͐˄Όσ΄݆քՅԃӄЇσЄ܄݃ވ҅Ɔ!܅' ˆȅ ۈ܇!( ܄ۄ +H  ߈   + + "'A + tӅׄɆȄ +!5Xdcbbbaa``_^^__``acdegikmo89:;<==>?>>===<<;;::988776665kjjjihggfffeeedddcccbbbaa`___`_```_``]^ +``__```ab`abaaa``__^_`abcba`_^]\[ZYXWXYYZZ[[[\[[[ZZYYXXXWWWVUUUTTSSRRQQPPPONOPONOOOPPQRSRRRQPPPONONONOPPPQQQRRRSSTTTUTUVWXWWVVVUTUVVWWXXYXXWWVVUTSRS RRRQQPOONNMML MMNNOPQRSTUUVWVUTUVWVWXXXYYYZYZ[ZYYXXXWVWXYZ[\]^]\[[[ZZZYYXWVUTTTSSSRQR SSTTUUVVVWX +YYYZZ[[\\\]\\\[[ZYYXWWVVUTTSSSRRQQQPQRQPONOPQPOPQPONOPQRSSSTTUUUVUTSTTUUVWXYZ[[\\\]^/010%/^^]\\[[[ZZ[[\]^_`a111bba``_^]\[[ZZYYXWXYZ[ZYXYYYZ[[\\]]^^__`aabbcccd ccbbaa`__^]]]\] ^^^__```aaabcdefffggghihhhggffeeedddcbbaa``___^^]]]\[ +ZZYYXXWVVVUVUVVVWWWXY XXXWWVVUUTUUVWXYZZ[\]]]^]\\[[[Z[\]\[Z[ \\\]]^^_/01 0`__^^]]]^^^_^]\[ZYXWVWXWWVVUTTSTUTSTUVU +VWWXYZZ[[[\[Z[\]]]^^^__``aabbc12223 2211a`_^^]^^_``0123211cbabcdddee232dcba`abbbcc23434556667654345556667789 88877766655434567778899:98 99:::98764332 1100/.[ZYXWV WXXYZ[\]]^/0#_^\[ZXVUSQPONMLKKKLMNPRTVX[]_01234454321234 555454455456!88766543210//.---YYYXXYYYZZ[\.///0 +//]\[[ZYYYX YYYZZZ[[[\]./0/0//_^^]]\\[[ZZYXXWVUTRQPONMLKLLMNOPQRTUWXY[\]]^^^]\ [[ZYYXWVVUUUTSRQPQQRRSST SRRQPONLKJIHHGHHIJJKLMNNNOONNNMLLKLLMNOPQQRSSTUVWXYZ[\^__`aaa12223334345566778 77765543323456767876543gfffefghgh4545"6677899:;;<==>>???@@@AABCCDEEFFGGGH GGGFFFEEDDDCCBA@???>>>=< ;;::998776665456667778 77766555443fghijkm7899:;<<==>??@@@A@@@?>>=<;;:9988776lkkjjihgfed21 +00//...---,--../012 /0/./0/0/./0/.-,-./.-,+*)*+*) ((('''&&&%$%$%$#$%$%$%&'()*+,-,+,-.-,,,+++*)()('&%$#$ +%%&&'(()))*)('&'()*+*+*)()*+,-.-,+*)('&'()*+,+***)))('&'&'('&%$%&%$#$%&%$%%%&&&''()))(' +(())*++*)))((('&'&'''(())**+++,,,-.-,,,+++*+,-.-./.-,+,-,,,+++*)('('&'()*)('&'(())*)()*)('(),+++*+*)('&%&'&%&'&''((()()*+,--,,++*+++,.-./0///.-,-.../ +)(''&%&&''(())*)(('&%$#""!  !"#$&'(%&&'('''&'((' &&&%%%$##""!! !!!""#$$%%&'''('&'('&%$#$$$%%&&'&&%$$#"!!  !!"!  !!""# $$$%%&&''(()./010/  1000/00133212΀ʀԁށρ  +$ !ׄքՇԇӄ҂фėυ΄̅ͅ˅‡ņÊă̄Ą…ÊĄÂˆ„ÐȈ τІу҇ ̈́΃όЃφڄчЄцЅ"̄˄ʆ ц҇ +׆(χ…Äąň݄܄  1؅׆քӉ+?  A + +8#3,QL  4 +!4lmm65554hhggfeffgghijkl67889:;<<=>>??@@@AAA@%??>>==<<;;;::9998877766kjiihhggffeeddcddcbcdeccdbcdecdeccdeedefcdefd ccbbaa```_^_^]^_`a`_^]\[Z YYYXXXWWWVVVUT SSRRQQQPPOPQRSTSRRRQPPOONMMLLLKKLMNOPOPQRSTTTUUUVWVUTUTSTUTSTSRQPONOPQPOOOPPPQQRRSSTTUVVWXXXYXWVVVUUTTSSRRQQQP QQRRSSTTUUUVUTUVWXYZ[Z YYXWWVUUTTTSTUVUVVVWWXXYYZZ[[\\\]]^]\[ZYXWVUT UUUVVVWWWXWVVVUUTTSSRQQPPOONNMLMNOPPPQQQRRSSTTUUUVWVVUUTTSSRRQQPPOOONOPQRRRSSTUUVWWXXXYYYXXWWVVUUTUUVVWWXYYZ[[\\\]]^]\ ]]]^^__//01 000`__^]\[ZZYZYZ[[[\\]^]^ +]]]\\[[ZZZYZ[[[\\]]^__`aabbcccdcccbbabbbcccd ccbba`__^]^^_`abcdefgghhiAhhhgggffeeddcba``_^]\[[ZYYXXWVVVUUUVVWXZ[]_abdfghiijjiihggfeeddccbab1cbaa``__^^]\\[[ZZYYYXXWWVVVUUUTSRSSSTTUUVVWWXXXYXWXXXYYZZZ[Z[[[\\\]]^_ +^^^]]\\[[ZY+ZZ[[\\]]^_/00``__^]\[ZYXWVUTSSRRRQQPPOONNMMLMNOQRTUWXYYZZZ[[[ZYZZZ[[\\\]]]\\\[[ZZZYYZZZ[[[\\\]\ +[[ZZYYYXXXWVWWXXYZZ[\\]]^^_ ^^]]\\[[ZYYYX +WWWXXXYYZZ[\]]]^^__``ab12234455667665543221ba`_^]\[[[Z[ZYYYXXWWWVWWWXXYZYZ[\[\[ZYYXXWWWV WXXYZ[\]]^___`a`0123432221110`012344455655544345 433222111000/./0001123 22110/..-,XVVUVVWXYZ[.//012345667 +6654322100/./01 22334567789::;<=>@@?>?>=<;976643310/0/./..-.//00112223332221100///./0/./ 001123344555654443332100//..ZYWUTSRPPONNMNNOPQRSUVXYZ\.//0001000///.#\\[[ZYXWVUTRQQPPOOOPPQQQRRRQQPPOONNM NNOOPQRTUWXYZ[ ZYXVUSRPONMLMMNOOPQRSSTUUVVWWXXXYXXWWV +WXYZ[]^/001234565544432101112233345456787654333fefefgfg456 777888999: ;;;<<<==>>???@ABBBCCD CCBBAAA@@@???>=<;:989!88877765543feddcccddefgij56778999:99988877655ihgfedccbcdddeeffggghhiijjjkkll6775544432210/01211212233343334434432221210/.-,-,-.-,+*)('&%$#$%&%$%&' ((()))***+*)('&'()*)('&'('()*)('&'('()*+,-.-,+*)()*) +(((''&&&%%$#$%$%&'()*+***))((('''&&&%$%&'()('''&&&% &&&'''((()*)()*++**))('('()*+*))((('&%&'''((())**++,,---.-,-.-, ---..//001121000///.--,,++**))((''&%%%&&''()*+,-./0//...-.///...--,,,+++**))((('''&%&%&'''(()))*)()*)*+*)))(((' +((())**+ *))(''&%%$$$#"""!!!  !!"#$%&''(()('()('()('&%& +'''(())***+**)))((('()*+,,--/.--,,+++*)('&'()()*)(' (()))**++,-,++ %$##" ##  '&%$##"!!!  !!"#$$%&&''&&%%$##"#$###""! ""##$%&'())* +)(('%$#""! !!!"##$$%%%&'&%%%$$###""###$$%&'(./010/.2110///. /// 2211000/./012345556̀Ԁ쁝Ӂ ? <ڋلք ҆ȅDŽЈ΄͊̄ˉ +ч ̄ˉ ƈņƄʄ˃̅* ʄˇ@ӊԆӌԃӈ҈ˈ#0ɈԇЄӇ…†Ї$؍ +/0օ1 +     +  H  / + # 3 E:65678 999:::;;;<=>*==<<;::99887766kjiiihgggfddeddeedccdcdedccd +efeffghhiijihgfedefghgfedcba`_^]\[ZYX +WWVVUUUTTTSRSTSTSRSTUTSRQPQRSTSR QQPPONNMMLMMNNNOOPQPQPONONOPQ +RRRSSTTUUUVWXYZ [[[\\]]^^_^]\[ZZYYXWWWVUVUTSR SSSTTTUUVVWWWXYZZZ[[\\\]\[ZZZYYYXWVUTSTU +VVVWWXXXYYZ[ ZZZYYXXWWVUUUTTSSRRRQQPPOONNNMNOPONOPQQRRSTTUVVWWXXXYXWWVVVUTTTSSRRQQPOONNMMMLKLMMMNNOOPQRSTTUVWXXYXW XXXYYZ[[\\]]^]\]]^^^_``abc122333gggffeddcbaa``_^^^]]]\[ \\\]]]^^___`abbccddde ddccbbaa``__^___```abcccdddeef1eeeddccbbbaaabbbcddefghiijjkkjjjihgfedcbaa`__^^]]\[\ +]]^^^__```a`_^^^]]\\\[[ZZYYXXWWWVVUUUTSTUVVVWWXXXYYYZZZ[\]^]\ ]]^^__```ab1000`___^/^/0/]\[[[ZZYZZ[\\]]]^]\\[[[Z[Z[\[\[ \\\]]]^^___`0_``aab12232ed ccbbaa``__^^]\[[ZZYYYXYZ[\\]]^_`abbbcc1210_^_/0121010/^/01010/./0121234 332100/.]\ +].//000111210/. //00112334555654345567789:;<==>>?@A@@@?>=<;98766543332100//.//. /01112333433322211100///..-,,---..//01122321 22334455666765433322100//.[ZYXXWVUUTSRRQQPQQRSTUVWX,-../001210/ ...--,XWVUTTSTTUVWWXWVUTSRQP QRSTUWXYZ[\]]^4]\\[YXWVUTSSRRRSSTUVVWXYZ[\]^^___```__^^]\ZYXWVTSRQQPQRRSUVWXYZ[..///00012343322123432 +111000//^^] +^^//0001112345434565432eeededefg345#6667778899::;;<<<==>>>???@@ABBCDDEEFEEEDDDCBBBAAA@@???>>>===<;:; <<<===>>>?>=<;:987 6665jiihhggfgghiijkl6778899:::;:999887766kjhgfedcba``__^___``abbcddeffghhiijjkkk632121101221123322322345432101210/.-,+*)*)((('''&'&%$%&&&%%&'('&%&'('&'('&%&'()*+,-./.-,+**)))('('&%&'()*+*)('()*+*)()('&%&'('&' +(())***+++,+*)('&%$#"#$ %%&&''((()*)('&'()*)()*+,--.. +///..--,,,+,+*)()*+,-./...---,+,-./0 ///..--,,+++* ++,,--.../.---,,,+*)*++,,,---.-,+*)('&%&'()*+*++,,,-.-+*)**)()*)('&'(* ++,,//...-, +++***)))('()*)*+,+,-+*'''( '  +(''&&%%$$$#"!" ###$$&&%%$%%%&&'&&%$$#""! ""##$%&&'(()(('&&%$$# +$$$%%&&'''( ''&%%$##"!!! !!""##$$%&&&-./0/   443322211011125433221100//./01122234؁逆퀊쀆끉灆䁊فā   .2ՄԌЍτ مфŏ…ÄăńĄÈˇ Š #Յփׇيڄ݉ +ل؅ +Κ׌۔܄݃ފ߃ޅ݊ƄՄ +Ї(҆ڈ$R  8   +  +    +$#  7 +  2k66677787656789:9:99:::9998777llmmmkkliiihgedcba`__^^]^^___``aabbbccddeeffggghghhii55567898777nnmmllkkkjjiiihgggfffedcccbba`_^^^]]]\[ZYXYYXXYZ[ ZZZYYYXXXWWWVUUTTSSRQRQPQRSRQPQRSTUTSRSSTTUUV UUUTTSSRRQRQPQPQRSSSTTTUV WWWXXXYYZZ[[[\[\\]]^^___``aabbbcbbbaa```__^^^]]\\\[\ [[[ZZYXXXWWVUTSTSRSTTTUUUVVVWWWXXXYZ[ZYXWVWXWVVUUUTTSRRRQQQPQRRSSTTUUVWWXXYYZ YYYXXWWVUUUTUV UUUTTSSSRRRQPOPPPQQRRRS RRRQQQPPPOPQQQRRRSTTUVVWWXXXYXXXWWVUTTSRQPOONMMLMNNOOPPQRRSSTUUVVWWXXYYYZYXYYYZZ[[[\\]]^^^__``a ```___^^^]\]\]^^__``a ```__^]]\\[[[Z[\\]^^_`abcddeffgfeeedddccbbbaaa``___^]^_`ab aaa```___^^^]^ ___``aabbbccdefgh4hhggffedccbaa`__^]]\\\[ZYZ[\]^_` __^^]\\[[[ZZZYZ[ \\\]]]^^^_ ^^^]]\[[ZZZYZZZ[[[\]\ ]]]^^__``a010/..]\\[[Z[[[\./ 000/_^^]\[[ZYZZ[[\\]]^_010/012111ba`__^]\[ZZYZYX +YYZ[[\]^__`_^]\[Z [[\\]]^^___`_^]^^__``aababc10/^_///0/...]]\[ZYZ[-./0/ 000111223344456545432101234556789876543323232123432344455667889::;;<<==>==<<;;:9887665443212221232212100//0//.-..//01234567788999888776655444323210///]\ZYXVUTSRQPQQQRRQPOP QRSTVX-./012343321100/0/ +...--YYXXXYZZYYXWVUTSQPONMMLLLMMNOOPQQRSSSTUVWWXYZ[\\\]]\\\[ZZYXYZZ[\]]^^___^^]\[ZYYXXWXXXYYZZZ[-...///00111222345433221100/01234321 +a``_^^]\\\[\\\]]^__00011123434543222dccbbbaaa```_`abcdef3444555667788999:::;<=>?>=<;:989 +:::;;<<===>=<;:989:;:998877mlkjihgffeedddccdeefffggghhhiijjj55677nnnmmllkjihgfecbba``_```aabbccddeefgghiijk3 666776665 433221100//.-. ///000111232543210/.-,+*)*)()('&%%%$$$#$#$%&'&%&'&'''(()))*)('('&'()*+,-./010/.-,+,+*)('&%&&&'''(()*)*)((('''&%&'''(()))*)('()('&%&'()('()*+,+++**))((''&&%%%$%&%$% &&&'''((()*)()*+,+*)*+,+*)*+++,,,--.//00011210/.-,-.-,+,-./...---,,+++*)*+,-,+++***))('()*+*)()*)*+('&'( **))((('''&&&'() ,,+++**))((('&% +&&''((()))*)()()*+,+,+,***)))('&' *)(('&%$$##"! +""#$'''&'&&%$$#"!!  !!!"""# $$%%&''()))*))(('&&%&&'(()((''&&&%&)('&'''--,+*+,-./..76655433221110/0124 33221100//...-...///0123ށŀځ́ρ 1&%%2ևՄԆӄԅՄքׅ؂ل'ŇƄ +˅̋̈́ʏɄʄ˃̄ +č̅̈́΄لڇۇ܄݄܃ۆڅهچۇو؄م˅"ڄن ׄ؈لډ$Ȉ5τ΄̈́Ѕ„!؅׈ ߅ +ބ ' (   +  + !S=ׄ3:84مhjklmn788999:::;;;<<<= +<<;;::998876788898899:;:;;:::;;:;::;:987mllkjihgfedccba``__^]^___``aabbccddeffghiijkklmm789:987mmllkkji hhhgggffeeedcb aaa```___^]\[[[ZZZYYXWXYXXXWWWVVUUUTTTSRQQQPPPOONMNONOPQRSTUVUTSRQPQRSTU VVWWXXXYYZZZ[Z[\]^_^]\]\ [[ZZZYYXXWXY XXXWWVVUUTUUVVWWWXXXYYYZZZ[[[\]^]]]\\\[ZYXWVUTSRSTTTUUVWWXXYZZ[[[\[[[ZZYYXXWWVVVUTSRQPQRSR SSSTTTUUVVWWWXWWWVVUUTSSRQPPOONNMMMLMNOPPQQQRRSTTUUVVWWWXWVWXYZ[ +\\\]]^__``a`_ ^^^]]]\\\[\]\[Z[[\]^^_`abcdeffgghgfeeedddccbbba``___^^^]^_`aba` aaabbccdeefffg fffeeddccbcccdd2234gggffeedddccbbbaa``__^^]]\\[ZY ZZZ[[[\\]]]^_`aaabbbcba```__^^^]]]\\\[[[Z[Z[\\\]]]/.-./).\\[ZYYXWWVVUUTTSSRRQQQRRRSTUVWXYZ[\]^///0/_/_^]]\\\[\] \\\[[ZZZYYYX YYZZ[[\]]/0/^/0a`abcbc +dddee22333233444565 +44332221110/.-./012345556667654323212123454333221100//.--,++*TTS TTU++,,--.../0/.-...//001122344556677898765444333232121110 11122344566787776655544322110//...-...///0/.[[ZYYXWVVUTSRRQ-RRSTTUUVVVUUTTSSRRRQRRRSSTUUVWXXYZ-..//001122321010$//..-ZYXWVVUUTTTSSSRRRQQPOONMLLKKKJJKLKLLMMNPQRTVWYZ[\]\\[[ZYYX YYZ[\]^/0001 +000//.]\[[Z[-...///012101234 +3322211000_`aa000121ba`_^_^_ ``aabbcdde333456 77788999:::;<=<;:9876789:;<=<;:98777mmlkjiihgfeedcccbcccddeeffgghijjklmnoopqqrqqpomlkjhgedba`_^]\\[\\]]]^__``abcdefg122334 55433322211000///./01112223334445543210/.-,+*)()('&%$#"#$%&'()*)('&'()*+,-.-,-././.-,+,+**)))((('((()))*+,-,+*)('&%& '''((()))*+*)('&%&'()*+,-,+++**)))((''&&&%$%&'()*)()*+,-.-,+*)*+ ,,,--...//00010/.-./.-,-.-, ---..///0000///.-,+*)*+,-.-,+***)))('((''&&%%%$$$###"! ""##$$%&&'((()('&'&%&'''('*+,-.-,-""!!! !!! )(''&&%%$$#$$$%%&%%%$$$# +$$$%%%&&'''&%%$#"""!!   !"#$%&'(()(('''&&%&&''()&&%)*)*+,,,--333210/01 +22233444556766554432110/..--,,,+, ---..///001聻΀Áفրс݁߀ #$%ݐ܃݄ތ߂ވ߄ +م؇Մ ׌ ҖфҍӇԔ +Άͅ΅ ʄɅȄDŽƈńĄȆɆ τЄц҆ +؏ل؄׋և׃ք׃؄Єτ Ӆ8ۄ܃݄܎ۃ܄̈'*˄ʃɄȇƐDŽƄʼnӅ#քׄ چ ޅߔ  i։Ճք +&  + + ( 2 +23Є? + +;/ކ bbccddeefghhijl67889:;;<<=<;:;9:989889::9:;:98765kkjjihgggffeeddccbaa```_```abbcdefghijkmnop99:;: 9998887776kjijklkjiiihhgggffeeddccba`_^]\[\]\[[ZZZYYYXW VVVUUUTTTSTUVUTSTUUVVVWWWXWXWVWXWWWVVVUTSR SSSTTTUUUVVVWXYZ[[[\\\]^]\[\[Z[ZYYXXXWXYZ<[[[ZZZYYYXWWVVUUTTSSRRQQQPPQQQRRSTTUVWXYYZ[[\]]^^_``abbcddeefeeddcbbaa``___^^^]]\\[[ZYXYXWVVUUTTTSR SSSTTTUUVVVWWXXXYYZZ[[[\\\]]^^__`__^^]]\\[[ZYYXXWWVUTSRSTUVVVWWXYZYXXXWWVVUUTTSSRRQQQPOPPPQQQRRSSSTTUUVVVWWWXWXYZ[\]^_`_^]^] +\\[[ZZYYXXW XXXYYYZZZ[\]^_`a`_^_ ```aaabbbcbaaa```_^]^_`_^]^__```abbbccddeeefffghgggfffeeddccbbaa```__^^]]\\\[[[ZYXXXWWVVVUTSTUVWWWXXYYZZ[[\\\]\]]]^^_``abccdeeff32 ccbbaaa``0/_^/0123454333221110/0112223(22211000_^^]\[ZYXVUTSRQPOOONOOPPQRSTUUVVWXXYYZ[\]//00112233343 2211100///^^]\ [[[ZZZYYYXXXW VVVUUTTTSSSRQPQRSTUVWX +YYZZ[\\]]]^ ___``aaab1210123434321234455566676543210/0123210///..\\\./0134566655543322110//..---,+,,,-../001223344454322211101 22333445566778987654321112210/./.--,,-YY.-YZ-./.\[[ZZYYXWVVUTSQPONNM NOPQRTUVWXWWVVVU)VVWXXY[\]/001222333222110//..---,,,---.../...[ZYXWVUTSRRQQPPOOONOP,OONMLKJJIHGGFFEEEFFGGHJKLNOQSUWY[]/011223334322100//]\\[[[\\]^_ ^]\[ZXWUTSRQRSTUWXYZ[\]//00111232123210__^^]]\]]]^^___`a`_^]^_`ab12 3334455566678789:987656789:;<=>=<;:9876kkjjiihggffedddcdddeefghijklmopqrst::;::98876kjhgfeccba``___^_`aaab./ 000321000///.///0001223456732343210/.-,+,+*)()()*)('&'()*+,-,+*+,-.---,,,+*+,+*)('((())**+++,,---./012 +1100///...-,+*+*)('()*+,-.-,,+++***)('('( )))***+++,,,-, +++***)))('&%$%&'()()*+,-./.-,+*)()*+,-./010/.-,+*+,-,+*+ ,,,---...///01210/.-,+*)('&'()***+++,-,+*+ ,,--...///0 .---,,,++*'''&&&%%$$##""! !""##$%%%&&&'')))('&%$#"! !"#$%&'((()))*+, +'''''&'*) ((''&&%$$##"! "#$$%&'(()(((''&%&''(()(''&&%%$$###"!" !!  !"#$%&&'(())***))(('&%$##"! ""#$$%%&&'()))()*)()*+,210/001122345567876554321100//.-.聽Ӏ؁恂Ā́ 7 ބ݅܎ۆ܄ۃڄم؅ׄփՇׇ؃׈؈ Ԅӄ҄уЅχ΃τЍхЈDŽƃńĄÉ‰ÄŒ Љщ҈ ؆͇̄͊΄̓̄ Ɖ:ۊڄۅ܄݄ م؅׃քՄ χτ΍͌Γ̈́ʊяȅlj6'Ӆ&؈ۄڝم*?օՋԄ؅ه;   ޅ  $# *-8Ո9 %  ;ބ ]]]^^_``abccdefghijkllm7788899989:9:::9:;:; :;;:::9::98989:;:989:;:999887766555ihgfeddcbbaaa`aaabbcddefgghhiiijihihgfghgfedcba`_^]\[ZYZ[Z[\[ZYXWXYXWVUTSRQPQRSTUVWXYXYZ[ZYXWVUVWVUTSTUVWWWXXYYYZZ[[\\]]]^_^ ]]]\[[ZYYXXXWXYZ[ZYXWVUVVWWXXYZZ[\\\]]]^_^]]]\\\[[ZZYYXXWWVVUTUTSTUUUVVVWXWVUUUTTTSRSTUUUVVWWXYYZ[[\\]]^]^_`aba```___^^]]\\[[[ZZZYX WWWVVVUUUT UUUVVWWXYYZ[[\\]^^_``abbcddeefffgfedcbbbaaa```___^^]]]\\\[[[Z[ \\\]]^^^___`a`___^^^]\[ZYZ[ +\\\]]^^___`abcccddeeeffggghhhiiijihhggfeedccbaa```___^]\[ ZZZYYXXWWWVVUTUVVVWWXXYYZ[[\]]^^___`_```aaa123334445 4443322110/01210///...[ZZZYYYZZZ[[\\]]^^/0/0///.]\[[ZYYXWWWVUVWXY XXWWVVUUUTTTSTUVWXWWWVVVUUTTSSRRQRS +RRRQQPPOOONOOPPQQRRSSTUUVWXYZ[\^_`abc12123456765456543210/./010/.-./010/./0 111222333456545 +6667778899:9998887654 +3332211000/.../...-,WWVWVUVUUVUUVVVWXXX-Z-./0122211100_^\[YXVUSRPONMLKKJKKLMNOPRSTUVWXXYXXXWWVVVU VVVWXYYZ[. --,,XXWWWVUUUTSSRQPONMLKJJIIIH8IIIJKLMNPQSTUVWXXYYYXXWVUTSQPOMLKKJJIIJJKLNOQSUWY\/012334 322100/.[ZYXYZ YXXWVUTSSRRQRRSTUVWWXYZ[[\]]^/0/.]\[.///001122233444544433221100/_^^]]\\\[Z[[[\\\]]^__``aaab aaa``___^^]]]\[\] +^^__`aab112345676787654567778899::;;<<==>>>?@?>=>=<;:98765 iiihhgffeeedeeefffghgfffeeddcbba``__^^]]\[\,-...///0011122 332211000//.-.///00012123212343210/.-,+*)*)*)*)('&'()*+,-,+*+*)()*+*)('()*+,-./.-,,+++*+,-,+*)('()))**+++,-,+*)('()*+*)('((()))**+,-./.-,,,+++*)('&'((())***++,,---...///010/.-,+,-.-,+*)*+,-./0123210/.-,+*)('&'()*+,- &&%&''&&&%%%$%&'&%$#$#$#"! !"#"! !"""###$$%%%&''())*++,--&%$% &&&&''',,+*)(('&%$#""!  !!"#$%%&'((()(''&&&%&&&''(&&&% +$$$#""!!  !!""#$$%&&' &&%$$#"!  !"#$%' +'&'''((()))(((''&&%$$$#$$%%&&'''(()))*'&%('&'((())***+*)()***+++0/./012343 222111000///.-,ҁ́ڀ؀̀ H- ڈۋڄٔ؄׃ֈՆ ό΄̈́̆ˈʄ ĆÃ†ÉąńƄǃȄ ͕΄ф҃ӄ Ȉǖ3߉߅؄ׄօՆԃӆև +ӊҐքՃԆՃև؏דֆՅ څ ŅB-و%6̄ۆڄ ҄тЄ=,҈; +:0چ+ @ + 7*˄1')!څ5  ' Fbcddefghijijkln7877889::9:;9:;<=>>=>?==>=<;:989:989:987mmlkkjihhgfeedccbbabcdcbabcdc bbbaaa```_^ ]]]\\[[[ZZZYXWVUTSRQPQPONMNOPQRSTUVWVWVUTSTSSSRRRQRRRSSTTUUVVWWXXXYZ[\[ZYXWVUTSTUUVVVWWXYXY +ZZZ[[\\\]]^_^]\[ZYZ[ZYX YYYZZZ[[\\]]^]]\\[[ZZYYXXWWVVUUUTSTUUUVVVWWWXXXYYZZ[[\\]]^^__```abcdedcba ```__^^]]]\\\[ZYXWXYYZZ[\\]^__`abcdeefghiijkklmmnn77oonnnmmmlkkjjiihhggffeeeddcccbbaaa``___^^]]\\\[[ZZYYYXXWVWWWXXYYZZ[\\]]^^^___` __^^]]\[[ZZZYXYXYZZZ[[[\\]]^^___`abcccddeeefffggghhhijkjiihhggfeedcbba``___^]]]\\\[\]\[[[ZZYYXXWWVVUUUTTTSRSSSTTUUUVVWWWXXYZ[\\]]]^^__`aabcd223454543210/.]]\\\[ZZZ[[[\...//0001122234 33322211000/.\\[ZYXXWWVUUUTSSSRRRQPPONNMLLKKJKKKLMMNOOPQRSTTUVWX,,---.-,XWVUTUTTTSSRRQPPONNMMLKLM#NNNOPQRRSTUVVWXXYYZZ[\]//01223455667878999::;<;:99988877655444333210/.-[Z-./012321000//...--YYXXWWVWWWXXY,-./00011122333444565443332221012223445567788999:;<=>?>=<;:998887654333222110/0/ +..---,,,WWVWWWXXXYY-.///0122233234334433221210_^\ZXVUSQPNLKIHGFEFFGHIJLMOQRTUVXYYZ[--ZZYYX YYYZ--.../0 //..--YXWWVUUT$SSRRQPONMLKKJJJKKLMNOPRSTUWXYYZ[[\\\]*\\\[ZYXWVUTSSRRQQRRRSTTUVWWXYYZ[\.//011222322110`^]\[ZZYYXXXW VVUUTTSRRQQQPQRRRSSTTUUVVWWXXYYZ[[\\]^^_`_^]\[ZYWVUTSRPOONMLLKLMNOQSTVXZ-./0122344556677877654332100//]\\[[ZZZYYYXYZYXYZ[\[\\]]]^^__```aaa1234567654hi456667778899::;;<<<==>>???@A@?>=>=<;:9876mlkji hhgggfffeeedcb0 +111221223343 22211000///.-./01210/.-,+*)('('&%&%$%&'()*+*)('()('&'()*+,+*)(' ((()))***+,+*+,+*+*+,---../0///...---,,,+++***)))('()*+,-./0/./.-,+*)( )))***++,,---...//0001122233344443210/.-,+*)()*+,+*)()***+++,-./01232111000///...--,+,+*+*)('&%$%&'()*+,,,---..'&('&%$ ###""!!  !!!""##$$$#"#"!  !!!"##$$%%&&&''((())&%%$$$#$$$%&%&''',+*)(''&%$#"!  !"#$%&'(() )((('''&'&%$%& +%%%$$#""!! !!""#$%%&&''() ((('&&%%$###"###$$$%%&&''( +++**)))('&&&%%$$#$% &&&''(()))**+**)(('&%%$##"!!  !"#$% '&%&'()()*043210Ӂ܀Ձׁۀ耣ۀ 0 + )߅ޅ݆ܔۄڄم؄̅˅ʈ˄ȎLJƄŃĄÃ……ÉčˆÈĕŅƅǎȊɓʆ˃̄ͅ΄ʄɅȍDžȉ*Մԅӊ҇ӑԏ߄ ߄ބ݇܇ۄ ߇΄͋̅3 2چ"9ֆω΅σЄۄ܄ +܊ ݄܄ + *4 +, ?1@ߋޅۅ4)+ *6)eeedccddbccbbbaaabbabcbcdddfghhjlkm7889:9:99988767888999:;<=<<<;;;:98987654hgggfedcbaba`_^]\[ZYXWVUTSRQRSRQPOPQRQRSTUVUVUUUTTTSTSTUUUVVVWWXYZ[\[[ZZZYYXXWWVVUUTSTUVW XXXYYYZZZ[[[\]\]^_^]\[\]^_`_^]\]\[ZYYYXXXWVUVWXXXYYYZZ[[\\\]]]^_```aaabbcccdddeeefedcba```___^^^]]\\\[[[ZYZZZ[[[\\]^^_`abccdefghiijjkklkkjjiihhggffeedddcbcbaa``__^]\\[ZYXWWVUUTTTSTUUUVVWWXXXYYZZZ[\[ ZZZYYYXXXWXXXYYYZ[\]^_`a bbbcccdddefe +dddccbbbaa`_`aba``__^^]]\\[[ZZZYZ[\[ +ZZYYYXXWWWVUVUTTTSSSRQRSSTTUUVWWXYZ[\]^//001112321010/.---ZYYXXWVU VVVWWWXXXYYYZYZ[-./0/.-,XWVWV UUTTSSRRQQQPQRRSSSTTTUVVVWWX,,---...//00112233344567654443322110/.\[ZZYXXWXXY,---./01234322211000///...-...//00112223334455565434565434 555666778889:989:;<;:::998887665544332221110/.-ZYZZZ--./02323111000/]]\[ZYYXWWVUUTRQPPOMNMKJJIIIJKLLMNOPQRTUVWXXYXWVU VVVWW,,,---.-[[[ZZYXWVUTRQPNMLKLMNPQSTUWXYZ[[\\[ZYZ[\\[[[ZYYXWVUTTSTTUUVWXYZ[\^_`0112110`_^\[ZYXWWVVUVWVVVUUTTSSSRRRQQQPOONNNMNNOOPQPQQQRSSTUVWY---.../ 00011233455667%66554432211000///^]]]\\[[[ZZYYXXWWVVVUVVVWWWXYYYZZ[[[\]^_`ab12345654hi4545677788999:::;;;<=>?>=<;:9876 +lkkkjjjiiihgfeeef22110///...-,- +.../0/00/01010/.-,+*)('&'&%&%&'()()('&'()*+*)('()*+,+*+,-,+*)*+,-./010/.-,+*)*+,,,---...///0001210/010///..--,,++**)))('()*+*)*+,-./0/.-,+,-,+***)))('()('&'&%$#$% &&&''(()&%&%$%&%&#"#"! !!!"""###$$$%&&&' &&%%$$#$&'++**)))((('''&%$$$#"""!  !!"##$$%%&%$'&&%%$#""! +"##$%&'())*)() +(((''&&%%%$%%%&&'())*+,- --,+**)(('&'&%$#"#$$$%('&%$%&'()*+,+0/06543؁Ѐŀǁʀڀ怯π =݄܎܄$Ċă ńƄljȗɔȆNjƅǃȄɌʃɋώЅόΌքׄ؃هڅۅ܇ӉҍӖܒ݄ ۆڇمڄۅ܌݈ ޏ,ύЅυ΅͆̄ۆ܈݈4 - /   + %  3 + S<3' +jjjkkliiigfdeeeffggghi43ghiiijjjkkll6677789876789:;:989:;:9:9 8887776665kjihgggfffedcba`_^]]\\\[[ZZYYXXXWWVUTSRQRQPONOPONOPQRSTUTSTSTUVUVWVUTSTUVWXW VVVUUUTTTSTUVWXYZ [[[\\\]]]^^^_`a`_^]\]^^^__``aabccddedddcccbbaaa```_`_ ^^^]]]\\\[[[ZYZ[\ ]]]^^^___`aba`_^]^]\]^ ___``aabbbcccdedcccbbaa```__^^^]\]\[[[ZZYYXXWVVUTTSSRRRQR SSTTUUVVWWWXXYZ[\]^_`_`a ```___^^^]]]\] ^^^___``aaabcbbbaa``__^^]]\[[ZZYYXXWXYXWVW XXXYYYZZZ[\[[[ZZYYYXWXYYZZZ[\ [[ZZYXXWWVWVUTUVWXXXYYZZ[\\]^/0011122232 111000//^]]\\[\./.\[ZYYYXXXWV WWXXYZZ[\]]^/.-ZY,-.-,X,- ...///0001112323454 33322211100/0123454 33322110//...-. ///00011122234322211100///..---,,,XWX,-./00112233456678899::;:987654 3332211000///./.-ZYXWXY,- ...//011223334*33321100//..-[Z-.-ZZYYXXZYXZYWVUTSRSTSSTSRQRTUVW XYXWVVUTSRRQQPPQQRRST++,--../00010/. -[ZZYXXWVVUUTSRQRSSTUWXYZ[\]]]^]]]\\[ZZYXWWVVUVVVWWWX WWVUUTSRRQPPO.PPQQRRSTTUVWYZ[\]]^^_^^^]\[YXVTRQOMKJIGFFEDDCCBCCCDEFGHIJLMOPQSTUWWXYYYZ---...///000112223433221100///...\[[ZZYYXYYYZZ[[\\]]^^^_`_` aaabbbccd222343454hghi456777888999:::;;;<=>?@?>=<;:;<:998on ooponnmjj433321110/01212543210/.-,+*)('&%$%&%&'('()('()('&%&%&'()*)*+,+,-./.-,-,+*+,-./.-.-,-,+*+,-./.-,-, ++**))((('''&'()*+,-.-,-.-,+*+,-.- ,,,++***)))('&'()*)('()('&%$#$%& '''((()))('(('&%$#$%%%&&&''"#$%%% '&%&(()( )(()(''&&%$#$% &&%%$$###"""! +""##$('&%$# $$%%&&'(())* +)))((''&&&%&&&''((() (((''&&%%$$# $$$%%&&''(())*)(('&%$#"!  !"#$%%&&'&%'&'((()))*+*+/08766544瀟πʀƁ 2PȊljƅń„˄̌͌̆͋΄ˇʌɊȎǑƄDŽȅɅʃ˄̎ͅӄԄՃօ׆؅׃քՆԇٍچن؅͇ׄ Ϙ +  #ۆڑن(3Ԅӂ҄ +׎؇̄ˈʉɆ)  +( 1 $ $3+υq ++ <;;:tsssrrqqpon76555kjihghiiijjj56789:;:;<=<;<;:98 777onnnmmmllkjihgfedcba`_^]\[ZYXWVUTSRQRSRSTSTSTUVWXWXWVUVWVUTSRQPQRSTSTUUUVVWWWXXYYZZ[\[\ ]]]^^^__```aba`_^_`aaabbbccdddeeefeddccbba``___^^^]^_^]\]^^^___``abcdcba`_` aaabbccddeeef eeedddcccba`_^]\[ZYZ[\]^^___``aaabbbcccdefe dddcccbbbaaa`_^ ]]]\\[[[ZZZYXWXYZYXWVUVWXYZ[\\\]]]^^__```aaabcbaba ```__^^^]]]\ ]]]^^___``aaabaaa``_^^]]\\[[[Z[\]\[\[ZYZ[ZYXYZYXWVWXY +ZZZ[[\\\]./01210/.[[ZZYYXXXWWWVVVUUTTSSRRQPQP OOONNNMMMLLLKLLLMMNNOPPQRRSTTUUVWWXXY,-.-,-./01234543210/012321 000///...-,+,---.../012321010/0001122334556778899:9876543210/.--ZYYYXYZ-.///001121100//..---,,,YYYZ---./.\[[ZYXXWWWXXXYYXYYXWVVUVUTSTUVWXY,,-,,XXW XXYZZ[\../ .]\[ZZYXWWVVU VVVWWWXXXYXWVUUUTTSRSSSTTUVWXXYZ[[\[ZZYXWVUTSRQPONMLKJJIHHGHHIJJKLMNOPQQRSTUUVWXYYZ[\]]^]\[ZXVTRPOMLJIHHG HHIJKKLMNNOOPQRSSTTUUVVWWXXXYYY-.//00011232221100//..[ZZYYXXWXXXYYYZZ[[\\\]]]^^^_`ab12323454i45678789:;<=>?@?>=>===<<=>===<<=;< ==<==<<=<<<=<:::9998877766655543443236543210/.-,+*)('('()('&'()*)('&%&%&''((()*)*+,-,+,-./.-,+,-,+,-./010/.-./0/.-,+*)*+,-./.-,+*)*)*+,-./.-./0/.---,,,+*)*+,-,++***)))()*+*)('()()('&'&'(('&%$$$##"""! !  !!!""###$$$%%'&%%&&**))('('&%$%%&&'&&&% &&&''(( **))((''&&&%&'()('&%&&&''(())*++,,,-,,,++**))(''&%%$##"!!  !!"##$$%&&'(()**++,+*)('&%#"!  !"#$%&' ('''&%&'()*+/耩ր联րہ '!.؅ׄքτΘ͇̉ΎχΑ͇΅ˆʖɞʄ˄̆͊ΆՄօׇ؅يډۂ܆ ֋Ն֗׆؇ׄքՄԅӇ҆х Մ&ۆڄيڈۆ܄'8·(Lj0#م%,Մ( #   + +  & ҄ʅ05 9 >=<<<;;;:::999888777mmllkkkjjjiiihghgfgh456789 :::;;;<<<=>=<<<;;;:::998887898766mlkjiihhhggfffeedddcccbaaa```___^^^]]]\[ZYXYZYXWVUTSTSRQRSTUVWXYZYZYXWVUVUTSTUVWXYZ[\] ^^^___```aba`_^]^_`abcbaa```_^]^_`a`aba`_`abcdc bbbaaa```_^]\[Z[\]^___```aabbcddeefffgghhhijihhhgggffeeeddcccbbbaaa```_^^]]]\\[[[ZZYXXWWVVUUTTTSRSSSTTUUVVWXYYZ[\\]^^_``aaabc%bbbaaa``__^^]]\\\[[ZZZYYXXXWWWVVUUUTTSRS.TTTUUUVVVWWWXXXYYZZ[[\\]]^__`abbcdeffghiijjkkklkkkjjiihggfeeddccbba`abcdddeeefgfeeeddccbbaa`__^]\\[ZYXXWVVUUTSTTTUUVVWXXYYZ[[\\]]]^]]]\\\[Z[Z[\\]]]^^^_^]\[ZZZYYYXXWWWVVUUUTSRRRQQPPONMMLKKJJIJJKLMMNOPQRSTUVVWXYYZZ[\\]/010/.--[ZY,-.-,-./010/(...--,WVUTSRQPPOONNOOOPQRSTUVWXY[\]^/00010/.-. //0001112223456543210/./0121010/./. //00112334455655544332211000/010/01000///..--,XWWVVUVVVWWX +WWVVUTTSRRQRRRSSTTTUVWWXXX,,---..//0011233445 4332100/..---Y ZZ[[\\]../.-ZZYYXYXXWYXWUTSQPOONPOOQP QRRSUVVXXXWWVX[\]//]\[ZZYXWVVUUTTTSSSTUUVVWWXYZZ[\\]]^]]]\\[[[ZZYYXXWWVVUUUT UUUVVWWXXXYYZ[ZZYYYXXWVVUTTSRQPOONMLKJIHGHHIJKMNOPQSTUVWXY[\]^00112110`^][YXVTSQPNMLKJIIHHG0HHHIIIJJKKLLMNNOOPPQQRRSTTUVWWXYZ[\]]//0001112223221100/^][ZYXXWVVUUUTUVVVWWWXXYZ[\]]]^^^___`0001112234321 cdddeeeff343fgh43456789:98789:;<=> ???@@AAABBCB CCCDDDEEDDDBAAA??>???>>>=<===>>=>?>54321012124543210/.-,+*)('&'&%&'()*+*)('('&'()*+,+,-./0/.-,+,-./.-,-./.-,+*+,-./010/.-,+*)('&'''((())***++,,,-.-,+*)()*+,,,---...///00011121000///.-,-.-,,,+++**)))((''&&%$%&'()()*+,+*)('&%$# """!!  !""##$$%%&&'''())'&% &&%$$##""!!! !!!""##$%%&'())%%$$#$###"""!"#$#$ %$%%%&&''')()()(''&%$##"!""!""!!"##$%%&'&'() ))((''&&%%%$%%%&&'''(())***+,+ ***)))((('&'()*+*)))(((''&&%%$$##"!!  !""#$$%%&''()**+*)(('&%$#""!  !!!"#$$$%%%&&&''(())* ))(('&&&%$%&'()+,. ɀځЀŁ 5ք$ 7ׄփՅևՄԑӐ҆цЊϊІхҋ̋ˆ̄Մօ׃؄مڅۗܒۄ ՄԄӄ ׄ؇وڄۄ܌݈܎ۅ' +!ٌ؅ُڄ$1Ӆ*̉5" g   N ۆ&ք5҆ӄԄ҅=5 / .9:;:98777oonmmmllkkjihhgedcb`_^\[ZYXWWVWWXYZ[\\]^_`aabcccdefg456789:;<; :::99988876789:987666mmlllkjihgfedddcccba`_^]\[ZYXWVUVUVUTSTUVWXYZ[\[ZYXWVUVWXYZ[\]^_`_^]\[\]]]^^^_`a`_`aba`_^]\]^_`aba```___^^^]]\\\[ZYXYZ[\]^^^__``aabbccddeefffghgfedcba`___^^^]]\\\[ZZZYYXXWWVVVUTUVVVWWXXXYYZZ[[\\]]^^___`a`___^^^]]\\[[ZZYYXXXWWVVVUUUTST)UUUVVWWWXXYZZ[[\]]^__`aabccdeeffgghhiijjjklkkkjjjiihggffeddccbbaaa`_`abc232ccbaa``_^^]]\\[ZZZYYXWX YYYZZZ[[[\]\]^_/010/.-[ZZYXXWWWVVVUUUTSSSRRQPPONMMLKJIHHGFFED#EEFGGHIJKLLMNOOPQQRSSTTUUUVVWWXXYYYZ[-.-ZYXWXXXYY--...//0011222343 222111000/./0123432111000/./0123334445654543454343210101 2223334455565 +4433221100/012101000///..---YXWVUTSSRQQPPOPPPQQRRRSTTTUUVW+,-. ///0001122334$3322100/.--,XWVUTTSSSRRRSSSTTUUVVWXXYXWXWWVUUTSRRQPPOOONOOPQRSTTUTUUUVVVWWVUUTTTSSRQQPPONMMLMMNOOPPPQQRRSTTUUUVWX WWWVVUUTTSSSR SSSTTUUUVVVWVWVUTSTU VVVWWWXXXYZ[ZZZYYXXWVUUTSRQQPOONNMMMLMNOOOPPQQRSTUUVWXYZ[\\]^^__``a``_^]\[YXWVUSRQPOONMMMLMMMNNOOPQQRSSTUUVVWWXYZ[\\]]^/01123345667889 888776665554321ba`abcdefgfede345676567 +8899::;<==> ??>??@@AAABBCBABA@???>=<;:965444332210//.-,,+**)((('((())*++,--..//0001243210/.-,-,+*)('()('&'()*+*+*)('('()*)*+,-,-./0/.-,-./.-,+*)*+,-./.-,+*)('&'()*+,+*)('&'()))***+++,,---..///000111232111000/.-,+,-./ ,,++***))((('&%&'()*+&%$#""!!!  !!!""###$%&''&%$ &%%%$$##"""! !"#$ $$##" ###$$%%&&'''('&'('&&%%$$##"!"#$%&%$#""!!! !"###$$$%&%$#$%&'('&%$%&'(' &&%%$$$##"""!"###$$$%%&&'((())***+,+++**)(('&&%$$#""!!! ! """##$$$%%%&'(+*+,-./.-.π߀ڀրʁ " ބ݄܇ۈچك،م؄׃֞ՇԎӅ҆ъЊύЇх҆ӄԄ ڄە܆ݑޅ݄܄یڄ! $݅܃ۆ#߅ރ݆ ܄ۏڑۇ܄( ۄډ%و6"ۄ#ޏ" +) P79̈́Έτ΅Շ Њτ<  +#)2789:987898765456667778899::;;<<<=>=<<<;;;::999888765kl678765jihgfgfedcba`_^]\[ZYXWVUTSTUVWXYZ[Z[\]\[ZYXYZYXYZ[[[\\\]^_`abcdcba`_^]\]^_^]\[ZYZ[[[\\\]^_`abcba`_^]\]^_`a`_^]\[ZYZ[\]^_`abcba`_^]\[ZYXWVWXYZ[\]^_`_^]\[ZYZ[[[\\\]]^^^__``aabbccddeeffgghihgfedcbab1210__^^]]\\[ZZYXWVVUTSRQQPOONOOPQRRSTUVWXXYZZ[\]/0123222111000///..-, +WVVUUUTTSSSRSSTTTUUUVUUTTSSRQQPOONNMMLMMMNOOPQRSSTUVXXZ--..///0123210/.-.///00112233444556667876543210/0/0123456787654321234545676543 222111000///.-YX,-, ++VUUTTSSRSSTUVW,--./0012344566788999:::;:::9987765432110/..-,,WWVVUVWX,YZ[[[\\]]]^]]\\[ZYXWVUTSRQPONMLKJIIHHGGGFGGGHHHIIJJKLLMMNNO PQQPOONNMMMLNNOQRRRSSST"VWWYYXXWWVVUUUTTTSSSRSTTUTSRRQPPOONMONMLMMMNOPQRSTUVWXYZ-./^]\[ZYYXXWWVUTTSRQPOONMMLLKLML MMMNNNOOPPQQQRQPPPOONNNMLMNOPQRSSTTTUUVWWXYZ[\]^/0011223334445654321babcdcbcccdddeeeffg334545 6667778887767898776 777889998978 99::;;<<===<=>?@?>=<;:987 3332210/.-,+*)('()*+,+*)('()*+,+*+,-,+*)*+,-./0/.-,-,+*)*+,-.-,+*)('()*+,+*)*+, ---...///01210/.-,+,)('&&&%%%$$###"""!""##$$%&&''(()))*"!"#$###"""! ! ""###$$%&&''&%& %$$###"""!""%%$%&'()*)))((''&&%$$##""!!  !"##"""! !"#$%&%$%%%$$#"! ! ""##$$%&&''*+*)))((''&&%$$##"""!"#"!"#$#"! !"# $$$%%&&''(()),+,-.-.݁́ƀɁـŀȁӀ ׋և؆ׄ֒ՖփՄԃӅ҉џ҅҅ӄԃՄօ׆؄ل ݄ޅ߇݉ܓۆ܅݄! ߄ވ݅܄ۃچق؅ ߄އ݅ߐކ߉ ׈!"   & 3 +!$(ɇυф(Flj$ބ߅#  +*;:98767n765jkl678765kjihhhgggfffeeedddcba`_^]\[ZYXYXWVWVUVWXYZ[\[ZYXWXYZ[\]^_`abcdcba`_^]\[ZYZ[\]^^^___``abcdedcccbbbaaa``__^^]]]\\[[[ZYZ[\]^_`_^]\[Z[\]^]\[\]^_`aba`_^]]]\\\[[ZZYYXXXWWVVVUUUTUVVWXXYYZ[\\]]^^___`_^]^_`aba`_^]\[\]^^^___`aab11222343210///.]\[[ZYXWVVUTSRRQQPQQRRSTTUVWXXYZZ[[[\./0123210/.-,+*+WXXW +VVVUUTTSSSRQRRRSSSTTUUVVWXX,---...///001112343232101234323456567876543456543210/.-./.-,-.///00112233445566778889877666544332110//.-ZYXWVUTSSRRQQPOPPPQQRRSTTUVWXYZ[...///0$///^]]\\[[ZZYYXWWVUTTSRQPONMLKJJIHHHGHIJKLLLMMNNOOPQQRRRSRRQQQPPOONNNOOON%MMMLLKKKJJJIHGFEEDDCCDDDEEFGIJLMNPPQQRS T***++,,---./001112345444332110/^]\[YXWVUTTSRRQQPPPONM LLLKKKJJJIJKLMMMNNNOOOPPQQQRRRSTSTTUUVWXYYZ[\]]^^__` ___^^^]]]\]^___///01232dcbcdeeeff3334544gfgg33345443345654567678789:::;;;<<<===>>?@A@?>=<456010/.-,+*+*+*)*)*)()*+,-,+*)()*+,+*)*+,-./0/.-,+*+,-,+*+,+*+,-,+,+*)('&'()))**+,-,-.-,+*)*+''&&%%$$$##"""!"""##$$%&&''((()$#"!"#$$$%&&%%$$$#"# $$$%%&&&''())!+**)))((('''&&&%%%$$$##""!!!  !"#$###"""! !!  + !!"#+**))((''&&&%%$$$#"!  !"#$%$%%%&&''((())***+***)))()-,-./.큆ʀŁ́  bؠ׊փׄ؄َچمׅؓ؈׈ֆՅԐӆԈՏքޅ߇47؄׈ֈՆԄӄ݄܏ۄݒܐ݈ކ߅ ل (  +% +݈އEK*΄4$*=<;:9876mlkjihgfefghii456789:;<=>=<;:98765kjjiihhggfffeeedcba`___^^^]]]\\\[[[ZYXYXWXWVWXYZ[\]^_`_^_^]^_`abcde21cba`_^]\[ZYXWVWXYZ[ \\\]]]^^^___`a`abcbaaa```___^^]]]\\\[Z[\]^_^^^]]]\\[[ZZZYYYXYZ[\]^_`abcba```___^^^]]\\\[[[ZZZYX YYZZ[[\]]^^__`a`_`a`_^_^]\]^^^__``a1112223344455567655544433322211000//.]\[[ZZYYYXYZZZ[[-.-, --..//0011222343212343221100//...--,,,+++*TUUUV+,-./012343210/01234543210/0/./01234567654321010/./0123210/.---ZZYYXXWWVVUTTSSRQQPQQRSSTUVVWXXYYZZ[[[\\\...\[[[ZZYYXXWVVUUTTSSRRRQPOONNNMMLLKKJIIHHGFFEDCCBA@@?>>=>>??@ABBCDEFGHIJKKLLMMNNNONMLKL MMMNNNOOOPPPQQQRRRSSTTUV++,,,---./0134 333222111011210/.//0//...--YXWVUUTSSSR%SSTTUVWWXXXYXXXWWVUTSRQPONMOONMMLKKJJIHIJKL"MMNNNOOPPQQRRSSTTUVVWWXYZ[\\]^_`00121 000/_^]]\\\[ \\\]]]^^^//01 222333444565321cdef3443fcd +eeffgghh445654564543456789:;<===>>>?@?>=<=34321233 +3332221110/.-,+**)()()*+,-.-,-,+,-.-,-.-,+*)*+,-./0/.-,+*)*+,+*+,+,-.-,+,+*)(' ((())**+++,,,-./.-,+,+*)*('''&%&'!"#'&%$#"# $$%%%&&''((()**)('''&&%%%$#"!  + !!!"#"! !"#$ +'&&%%%$$$#$$$%%&&'&&%%$$##"!  !"###$$$%%%&&&'''(())**+++,**)(+,---.,,-,-.؀ǀ߀  !9݅܏ + ߄ޔ݆އ߉# PԄӇҌэܑ҄݌ ߃ބ݅܈ۇڈٍ؄܍ۉ܈݄ބ߄ + "+ :@„„9,-ڈ ݇ ۇ$  :;<=<;:987876lllkkkjjiiihhgggfffeeedddcbabcccdddeeffggghhiiijjjkl65klmnno7789:987 666lkkjjjiihgfedcba`_^]\]^]\[Z[\]^]^_`abcdefghijklm6mlk +jjjiihhhggfedcde23edcccbbbaaa```___^^^]]]\[ZYXWVUTUVWXYZ[\]^_^]\]\[Z[\]^_^]]]\\\[ZYZ[\]^]\]^_`_`_`aba`_^]\]^_`a`_^]\[Z[\]^_^]^ +___```aaa010/./.-,-...//011223445667788999:9 8887766655543210/.-,+VW++,-./0123232121234321012345432345654323210/./0/. ---,,XWVVUUUT UUUVVWWXXYYYZ YYYXXWWWVVVUVWXYZ[\[ ZZZYYYXXXWVUTTSSRQQPOONMMLKKJIIHHGGGFFFEDE$FFFGGHHIIJKKLMNNOPQQRSSTUUVVWX,,,---./0 1112233445556 5554443322210/.-,-,,YXWWWVVVUTSRQPOPQSRQPPPOOONOPONOOOPPQRRRSTTUUVVWWXXYYYZZZ[\]^^^__``0111222333454321babbbcccdddeeffggg4hgfefggg343456789:;<=>=<;:43210/0123445433322210/.-,+*+,+*+,-,+,+,-./01233210/./00/.-,+*)('()*+,-,-,+*+,-,+*+,+,+,-,+*)*+,-.-,+*+*)* !!!%%$#$%&'&%&'()('&%$###"""!!!  !!!""##$$$%&'&%$#$%$#$%$#$%&'()()*+,---..././΀񀂁̀ہʀՁ & ڄل؉ֈם؊ًڇۅ܆݇އߕߋސ݆ބ#'߈ޅτΊͅӄԄՄքׅ؆لڅۆ܎݅܅ۅڄن؅הօׅ؉م؄ׄ֋߄ޏ݇ޕ߆ކ݈ۉ܆ $ !%% .ϊ: $ބ݆܄ ׄ֏Մ 87656787655kjjjihhhgggfffeeedddcccbabcdcba`_^]\[ZYXYZ[\]\[Z[\]^_`abcdefghijk67654gfedcdcbbbaaa``__^^^]]\\\[[[ZYXYXWVUVWXYZ[\]\[Z[\[Z[\]^]\[\]\[ZYZ[\]^_^]\]^_`ababa`_^]\[Z[Z[\[Z[\]^_`010/./010/...---,,,+++UUUTTS*++,,--../00122334455678767898766555443332221110/.-./0123454321212343210/./0123454323210/.-,+*+,-./010/.-ZZYYYXXXWXYYZ--...///0011123211100///]\[[ZYYXXWWVUTSSSRRRQQPPOONNNMMLLLKKKJIJ+KKKLLLMMNNOOPPQQRSSTUVVWXYY--...///00111222321012223334454443322100//..--,,WVUTTSSRRRQRSTSRQPONMNO PPQQQRRRSSSTSRQPQRSTUVWXY ZZ[[[\\]]]^^^_`abcdef3434567898983210/./010/.-,+*)()*+,+*+,-./0120/0/.-,+*)*)('()*+,-,+*)*+*+,-,-,+*+,+*+,-.-.-,+**)()*"""! &%& )((('''&&&%$#"!  !"###$$$%%%&&&''%%$$$#$%$#"#$%&'('&%&'&'()*+,-./聏遖ف€݁ ڄل؊׎֎Չԑӓґч҈ӚԆՆֈ׊؅لQ-߄ޅ݄܄чЂφۆ܉݌܋ۏژم؋هڇ۔ܗۄ܄݄ޅ߅߄ކݖܚ݉މ߆߆ޑݓކ߅  C#OG͇; #҄ъІф776545k5jihgfedcba`aba`_^]\[ZYXWXWVUTUVUVWXYZ[\]^_`abcdefgh4565jihgfedcba`_^]\[ZYXWXYZ [[[\\\]]]^_`_^]\[\[\]^_^]\[\]^_`abcba`_^]\[ZYXYZ[\]^_`a0123210/./0123210/0/./0/./012343210/./01234567876543210/. ---,,,WWVVVUTUVVVW+,,,---...///001112343210/...---,YXWVVUTTSSRRQRRRSTTUVVWXY,---...///0121000///]]\\[[ZZYYYXXXWVUUUTTTSSSRRQQPPOONNMMLLLKKJJJIJJJKKKLLMMMNNOOPPQQRRSSTTTUUVVVWXY,-./0/...---,+,YXWVWVVVUUUTTSSRRQQPPOONNMMMLKLMNOPPPQQQRRRSSTTUUUVWXYZ[\]^_`a`abcd234567872210/././.-,+*)('()*+,-./0/.-,+*)*+,-.-,-,+,-.-,+*+,-.-,+*)()*+*+%$#$%&'&%%%$$$#$%&)('&%$#"!  !"#$%&%&'&%$#"!"#$%&'&'()*+,-,+,-逮р󁪀ׁ   ߇އ݇܆ۅچٍ؄אًؗڅۄޅ߉ 1ׄփՄԃӄ τ΅ً͈̆ӄҍф؅ّوڄ߄ޑ݆ޕ߄ބ݃܄ۄڄن؊ׅ؄كڄۄ܅ݢދ߇&0߆ޅ݄܃ۄچى؅لڃۄܛ,( 9!%#Єς΄$&$_ 76543gfedcdedcba`_^]\[ZYXYZ[\]^_`abcdefgh4567876544hhgggffeeedddcba`_^]\[ZYXYZ[\]^_^]\[ZYZ[\]^_^]\]^_`abcbaaa```___^^]]]\\\[ZYZ[\[Z[\]^]\[Z[\]\]^_`abcba`___^^^]\[ZYXWVWXYZ[\]^_```00012343210/01234543210/010/^]\[Z[./01210/.-./01234565432 111000///.-,XWVWV UUUTTTSSSRRRQPQRRSSTUUVVWX,,---.../01210/.-[[ZZZYXWX +YYZZZ[[\../010/...[[ZYYXWWVUUTSSRRRQRSRRRQQQPPOONNMMLLKKJJJIIIHGHIIIJJKKKLLMMNNOOOPPPQRQRSSSTTTUUVVW,,,---...///010/./. [[ZZYYXXXWVWXWVVUUTSSRQPONMMLKJIHGGFEEDCCCBCCCDDEEFFGGHHIIJJJKKKLMNOPQQRRRSSSTTUUUVVWXXYYYZZZ[\]^___///0//__^]\[Z[ \\\]]]^^^_`a`_^]\]^___``aaabcde2345678987/.-./.-./.-,-,+*)*+,-./01/.-,+*+,-.-,+*)*+,-,-./0/.-,+,-,-.-,+,+*+,+,-./.-,+*)()()*+*)****)('("#$%$#$ %%%&&&'&'() ((('''&&%%%$#$#"""!!!  ! !"#'&%$%&'&%%%$$##""!!   !"#$%&'()*++*)()*+,-,+*)*+,-ԁҀ  ;̄˃ʆɌȇɇʈ˗̑˄̄ӄԄՄք(%ׄ֐՘ֆՆԇӓۄ܍݊܌ۆ܅݄ޅ߅7ބ݅܆ۆڅك؄ՄԎӄԄׄ؅يڈۅM( '+ߌޖS Пό΅3$ 676543gfedefedcba`_^]\]^]\]^_`abcdefghijihgfedcba`_^]\]^_`_^]\[ZYXWVUVUVWXYZ[\]^_`abcba```___^^]]]\\[[ZZZYYXWVWXYXYZ[\]^]\[\]^_^]^_`a`_^]^_ ``aaabbbcccde2edcbbbaaa```___^^^]]]\\\[ZYXWVUTUVWXYZ[\]^_^/./0123210/.-.\[Z-././0101210/. ---,YXWWVVVUUTSTUVUVWWWXXX,,-./01210///...---ZYYXXXWVUTSRSTUVWVUTSRQPONMLKLM'NNNOOPPQQRRSTUUVWXY--..//0011223344455565554433221100/...--,XWWWXY- ,,XXWWWVVUUTSTUVWXYXXWWVUUTSRQPOONMLKKJJIIIHIH0IIIJIJJJKKLLMMNOOPQRRSTUUVVWXXYYZZ[[[\\]]]^^^///01210//_^^^]\[ZYZ[\]^_`_^]^_`abcdef3456010/.-,+*+,+,-./01210/.-,+,-,+*)*)('()*+,-./0/.-,+*)()*+,-.-,+*+,+*+,+*)* +++,,,---.../00/.-,+*)('&'()*+*'&'$#"#$%&'&%$#$%&%$#"!  !!!"""##$$%%& $%%&%$#$%&'('''&&%%$$##""!!!  !!!"""##$$$%%&&&''()*+*)()*)*+,-πـ퀶ꀲ  ߒޖߟއ߅ߛވ#·͋̆˅ʄɄȄDŽƅŇčі„I@քՇԍӆ҄фЄτΈ͇̆̈́΅τЅф҅ӇԆՇֆ׆؅لڄ2݄܎ۆ քՄԉӆԄڄۄ( - %.&'#C͌@!cde2edefgh454hgf eeedddcccba`_^]\[\]^]\[\]^_`abcdcba`_^]\[ZYXWXYZ[\[\[ZYXXXWWWVUTSRQRST$UUUVVVWWXXXYYZZZ[[\\]]]^^___``aaabbbcdefedcccbbbaaa```___^^^]\[ZYXWVWVWXYZ[\]^_`a`_^]^]^_`_`aba`_^]\[ZYXWVUTUVWXYZ[\]^] +\\[[[ZZZYYXWXYZ-./01210/.-,-.-,YYYXXXWVUTSTUVWX,-./010/.-,-./01212321010/.-YXWVUVWXYYZZZ---./0123210/...---,YXXWWVVVUTSTSRQPONMNOPONMNOPQRSRQQQPPPOOONNNMMMLMNNOPPQRSTUVWXYZ-.//00112223334333222100//..-,,++*TSRQQPQQRRRSTTUUVVWX,-, ++++VVUUTTTSRSTTUUVVWWXYYZ[[\../0!//^^]\\[ZZYXXWVVUTTSSRQQPPPOOONNNMLKJIHGHGHIIIJJKKKLLMMNNNOOPPPQQRSSSTTTUUVVVWWWXXXYYZZZ[[[\]^]\]^_^]\[\]^]\]^_`abc+,-../0120/.-,+*+*)*+,-./.-,+*+,+*+*)()('&%&'()*+,-./0/.-,+*)('()*+,-,+*+,+,-,+*)('&'()*+,+*)('(%$#"#$$%$%&'&&&%$#$%$#"!"! !"#"!  !!""##$$%%$##""!"##$$$%%%$#$%%%&&&'''((())((('''&&&%%%$#"!  !"#$%&'()()*)()*)*+ĀȀÁƀ #߆ޅ݆܆۪ڍن؅ׄքՄԄӃ҄уЅτ΅͆̆ˆʅɅȄDŽƅņĚÆĄVNфЇϒΓϊЈы҇ӇԅՄքل܄݃ބ߃߅ޖ݈ވߎ &ڄن؊ׇօՆԟӕ҄0 <#, ܇9'̇&(#ڄُ؈وچۅ܄ \]^_`abcdedcba`_`_^]^_`abcdefedcba`_^]\[\[ZYXWVUTSTUVWXYZ[\]^_`abcdedcba ```___^^^]\\\[[[ZYXWVUTSTUVWXYZ[\[Z[\]^_`_^]\[ZYXWVUTSTSRQRSTTUUVVWWXXYYZ[[\\]]^__```aabbbcdcbaaa```_^]\[\./01210/01234543210/./010/.-./.-./012343210/.-ZYXWVUTUVVVWWWXXYYYZ---./010/.-YXWVUTUVVVWWXXYYZZ[[[\\]]../.\\[[ZZYXXWVUUTSRQQPOONMMLKKKJJI!JJJKKLLLMMNNOOPPQRRSSTTUUVVWWXXY,-./0/.-,+,---...///001112223$2221100//..-YXVUSRQONMKJIHGFEDCBAA@@?$@@@AABBCDEFFGHIJKMNOPQRTUVWX,--..///0/.-,YYXXXWVUVUTSRRRQQQPONMNOPQRSTUVWXYZ[\ ]]]^^^___```ab12111ccba`_^]\]\[ZYXYZ[\)*+,-./.-,-,-,-./01210/.-,+*)*)('()*+,-./0/.-,+*)('&'()*+*)*+,-,+*)('&'&%&'()*+,-./.-,+*)$#$%%$#$%&'''((()('''&&%%$$$##""!!!  !"#$%&('&%%$#""!  !!"##$%&&''&%$%$#"#$%&%&'()*+,,+*)('()рǀȀƀ ߄ބ݄܅ےڄۅ܃݄ބ߅߅ބ݄܅ۄڄم؅ׅօՅԆӇ҈цЇφΆ͆̆ˊʏɊʆˆ̅ͅ΅τЃф;CׄօՇԋӉԊՅ֍ՔԅՄ؄لڄۅ܄݄ޅ߅߅ޏ݈ޝ߈5τ΅͖̈͘Ή͎̅>"J',ևUl Cڄك؅הքׄ؄نۆڄل؉$YZ[\]^_^]^_`abababa`_^]\[ZYZYZ[\]^_`a`_^]\[ZYXWVWXYZ[\]^_`aba`_^]\[ZYXWVUTUVWXYZ[\]^_^]\[Z[\[Z[\]^]\[[[ZZZYYYXXWWWVVVUUUTSRQPONOPQRS TTTUUUVVVWWWXYZ[\[\ ]]]^^^___``aa123212101234543210/00/0/00/./010/./0123456543210/.-ZYXWVVVUUUTTSSSRRRQQQPPPOPPPQQRRSTTUUVWXXY---../010/.- YYXXWWVVUUTTTSRQRQPPPOOONNMMMLLKKJJJIIIHI JJKKLLMMNNOPPQQRRSSTTTUUUVVVWW++,-./012343210(///]\[[ZYXWVVUTSRQPONNMLKJIIHGGFEEDDDCCCBC#DDEEFFGHHIJJKLMNNOPQRSSTUVWWXYYZZ--.-,YXXWWVVUUUTTTSTUVWXYXWVUTSRQPONMLMNONMNOOPPPQRRSSTUUVWWXXYYZZ[\[ZYXWVWXYZ[\]^_`ab1ba`_^]\[Z)*)*+,-,+*+,-.-,+*)*+,-,+*)()*+,+*)('&%&'()*+,+*+*+*)('&%$#$%$%&'()*+,---%$#"! ! +"""##$$%%$$$#"!"!  !"#$ ))((('''&&&%%$$$##""!!!  !!""##$$%%&&''(()))**((('''&%&'&%$#"#"#$$$%%%&&&'''((()*)('&%&'()*+,,+*)()Ԁр΀ ބ݅܆یڪي؈׈֍ՅԻՏ֍׌؉ׅքӄЄσ΅̉ͅˋʍˈ̆ͅ΄τЃф"ބ߃ 3ۄڅٗ؆مڅۅ܉ݛއ߄)܄ۄڄن؊ו֌ՇԈӈ҈цІφΈ͌̇̈́΄τЄу҅Ӆԅ՚֊ՅJ>*0&<΄͈̅AIۄڄك؄ Ӆ҆х) YZ[\]^]\[\]^]^]\[ZYXYXYZYZYXWVUTUVWXYZ[\]^_`a`_^]\[ZYXWVWXYZ[\]^_`a`_^]\]^]\[ZYXYZ[\]^_`_^]\[ZYXWVUTSRQPONMNOPONOPQQQRRRSSSTTUUUVVVWWWXXYZ[\]^_/0/./0123456789:9876543210/.-.-[ZYXWXYYYZZZ--./000111234543211000///..---YXXWWVVUUTTTSSSRSTUV+,-./0123432,111000//...-ZYXXWVUTTSRQQPONNMLLKKJJIIHHHGGGFEFGHIJJJKKKLLMMMNNOOPPPQQRRSSSTTTUVWXYZ[[[---./0///_^]\[ZYXWVUTSRQPONMLKLMMMNNOOPPQQRRSSTUUVVWWXXYYZZZ[\[ZYYYXXXWVUVWXYZ[\]\[Z[\[[\[ZY)*+,-,+*)*+,-,+*)('()*+*)*)('()*+,+*)('&'()*+,-,+*+*)*+,+*)('&%$#"#$#$%&'()*'&%&&%%%$$$#"!"#$%&&%%%$$$##"""!!!  !"#$%&'(+*)('&%$#"! !"###$$$%%%&&&'''()*)('&%&'()('()*)􁾀 ߊ޳݉ވߦ߄؄ׄօՆԇӋҗтғѠЊѐҗӊԈՉ֏׌؎׋֌ծԉՈֈ׈؈هڇۆ܅݄ރ߄3Dۄڃم؆׋ֆׄ؃لڃۄ܃݅ބ߆߄ޅ݆܈ۋڋۉ܌݇މ݈܋ۅ1 1Jۅڄل؅ׄքՈ9Rل؄אք"YXYZ[Z[ZYXWXYZ[\[ZYXWVUVVWXYZ[\]^_`abcba`_^]\[ZYXWVUVWXYZ[\]^_`a`_^]\[Z[\]^_^]\[ZYXWVUTSRQPOP)QQQRRRSSSTTTUUVVWWWXXYYZZZ[[\\\]]]^^^_///010/.-,-././.-,+,-.-,YXWXY-./010/.-,YYXWVUTSTUVWXYZY,+,-./0123456765%4443332211100//..--,,WWVUTSSRQQPOONNNMLKJIHG&HHHIIIJJKKKLLMMNOOPPQRRSSTUUVWWXXYYZ[[./0/.]\[ZYXWVUTSRQPONMNOOOPPPQQQRRSSTTTUUVVVWWWXYZYXWXYZ[ \\\]]]^^^___`a```___^^]]]\\[[ZZYYYXXXWVWXYZ**)**+*)()*)('&'()()**+,-.-,+*)('&'()*+,-,-,+*)*+,-,+*)()('&%$#$%&'()*+,&%&&%$%&'& &%%$$$###"!  !!!"""###$$$%%%&&&'''((()))*)*)('&%$#"!"#$%&'('&'()*+,-,+*)('()*ʁā ߑޛݎ܋ۏںَד؏ٚڐٍّؒؒ׈؇نډۋ܎ۊڍٞ؎ٍڋۊ܉ݎޙߤ߆ވݘ܈݉ލߍߐޑ߇ ߅ފ݈܋݈އߊ(̅ +iՍ6"\[ZYXWVUVWVWXYZYZ[\[Z[\]^]\[ZYXWVUVWXYZ[\]^_`a`_^]\[ZYXYZ[\[Z[\[\[ZYXWVUVWXYZ[\./.-,-,+VUTU+,-./01210/.-ZYXWVW+,-./0123210/.-,WWWVVUUUTSRQPONMLLLKKKJJIIIHHHGFEF-GGGHHHIIIJJKKLLMMNNOPPQQRRSSTTUUVWWXXYYZZZ[[\./0/.\[ZYXWXYZYXWVUTSTUVWXYZ[\]]]^^^_`abcba`_^]\+*)(('&'&'()*+,+,-,+,+*)('()*+,-,+*)()*+*)*)('('('&%&'()$%&%&'%%%$#"!  !"#$%&'())('()('&%$%&'()*+,+*)*+Ɓف ߆ކ݄܆ۅچه؋׎Ռևׇ؉٘ڒْ،نڅۄ ߚ!߄އݍ܇݅ޅ߃/+7 [\]\[ZYXWVUVWVUTUVWXYZ[\]^_^]\]^]^_^]^]\]^_`_^]\[ZYXWVUVWXYZ[\]^]\[ZYXWVUVWXYZ[-./0123210/.-,XWVUTSRSTUVWXY,-./010/.-,+*+,-./012343210/.-,,,YYXWVUTSRQPQRSTUVWXYZ[ZYXWVUTSRQRSTUVWXWVUVWXYZ[\]^]\[)*+,+*)('&&'()*+,+,+*+,--,-,+*)*+,+,+*)('()*+*)('&'&%$%&'(%$#"#$%&&%$#$%&'()*+*)('&%&'('&'()*)̀рр ߎގݍވ߆߆ޢݐ޸ߍXYZ[\]^_^]\[Z[Z[\]^_`aba`_^]\[\]^_`abcba`_^_^_^]\]^_^_^]\[ZYXWVUVWVUTUVWXYZ[-./010/.-,XWX,+,-.-,XWVUTU*+,-./012123210/.-[ZYXWVUTSTUVWXYXWVUTSRQRSTUVWVUTUVWXWX'()*+,-,+*)*+,-,+*+,-./0/.-,+*)()*+,+*)(''&%$%&'$%$#$('&%&'()*)('&%$%&'('&'⁞̀ ߏޕݐ܏݈ކ߆ޭ݌ދߋJ ߟXYZ[\]^_`a`_^]\[ZYXYZYXYZ[\]^_`aba`_^]^]\]^_`a`_^]\[ZYXWVUTTUTSSTTSTUVWXYZ[\.-,YXWVUTSRSTUVW,-./012343210/.-,+*UUTSRQPONMNOPQRST*+,-./0123210/.-[ZYXXYZYXWVUTUVWXWVWX()*+,-,+*)((()*+,-.-,+*)*+,-,+*)('&'&%&%&'(%$#"#$$#"!  !"#)()('()('&%&'('(܁Ł ݑޏߔߒߍުݢWXXYXWVWXYZZ[\]^_`_^^]\[\]^_`abcba`_^]\[ZYXWVUTUTSTUVWXYZ[-./.-,+WVUTSRQPQRST*+,-./0123210/.-ZYXWVUTUVWXYZ[\]^_`aba`_^]\[ZYXWVUVW((('())*+,++*)()*+,-.-,+*)('&'&%$%&'($#"! !"&'&%&'()*+*)(('(߁ ]\[ZYXYXYYYZ[\]^_^]\]^_`_^]\[ZYXWVUVWXYXWVUTSRSTUVW+,-./012343210/.-,YXWVUTSRQRSTUVWXYZ[\]^_`abc1234321ba`_^]*+*))(())*+,+*)*+,+*)('&'('&%$##$%'&%$#$%&'()())((()()*+,.-,+*Ӏ Ðbbba`_^]\[[\]^_`_^]\[ZYXWWXWVUVWXYZ-./012343210/.\[ZYXWVUTSRQPQRSTUVWXYZ[\]^_`ab12dcb,-.-,+*)()*++**)(('''&%%&('&%$#$%&'()*+,-,π   ߟ޻݂އݚޒߏ[[\\[ZZYYZ[\]^_`ab110a0a`_^^]\[\[[\]./01210/.]\[ZYXWVUTSRQPQRSTUVWXYZ[))*))((()*+,++***)(()(())(''&%$#$#$%&'())Ӂ рWWXWWXXXWXXXYYZ[\]^_`01110000/_^]\[ZYXWVVVVWW''('('('(('('(((())**++,+*)(''&&'''π \ No newline at end of file diff --git a/Techniques/DataViewers/ModelViewer.gg b/Techniques/DataViewers/ModelViewer/ModelViewer.gg similarity index 81% rename from Techniques/DataViewers/ModelViewer.gg rename to Techniques/DataViewers/ModelViewer/ModelViewer.gg index 32c5ed09..1e9d476b 100644 --- a/Techniques/DataViewers/ModelViewer.gg +++ b/Techniques/DataViewers/ModelViewer/ModelViewer.gg @@ -27,6 +27,20 @@ { "name": "ViewProjMtx", "type": "Float4x4" + }, + { + "name": "InvViewProjMtx", + "type": "Float4x4" + }, + { + "name": "CameraPos", + "type": "Float3" + }, + { + "name": "Skybox", + "type": "Bool", + "dflt": "true", + "visibility": "User" } ], "shaders": [ @@ -63,6 +77,29 @@ } } ] + }, + { + "name": "ModelViewerSkyboxCS", + "fileName": "ModelViewerSkyboxCS.hlsl", + "entryPoint": "csmain", + "resources": [ + { + "name": "Depth", + "type": "Texture", + "access": "SRV" + }, + { + "name": "Color", + "type": "Texture", + "access": "UAV" + } + ], + "samplers": [ + { + "name": "texSampler", + "addressMode": "Clamp" + } + ] } ], "structs": [ @@ -268,6 +305,40 @@ } } } + }, + { + "actionComputeShader": { + "name": "Skybox", + "editorPos": [ + 437.0, + -52.0 + ], + "linkProperties": [ + {}, + {}, + {} + ], + "connections": [ + { + "srcPin": "Color", + "dstNode": "Rasterize", + "dstPin": "colorTarget0" + }, + { + "srcPin": "Depth", + "dstNode": "Rasterize", + "dstPin": "depthTarget" + } + ], + "shader": { + "name": "ModelViewerSkyboxCS" + }, + "dispatchSize": { + "node": { + "name": "ColorF32" + } + } + } } ], "enums": [ diff --git a/Techniques/DataViewers/ModelViewer.gguser b/Techniques/DataViewers/ModelViewer/ModelViewer.gguser similarity index 84% rename from Techniques/DataViewers/ModelViewer.gguser rename to Techniques/DataViewers/ModelViewer/ModelViewer.gguser index 68367ec0..c4acad3a 100644 --- a/Techniques/DataViewers/ModelViewer.gguser +++ b/Techniques/DataViewers/ModelViewer/ModelViewer.gguser @@ -15,8 +15,8 @@ "ProjMtx_textureName": "ColorF32" }, "snapshot": { - "resourceViewNodeIndex": 3, - "resourceViewResourceIndex": 5, + "resourceViewNodeIndex": 6, + "resourceViewResourceIndex": 4, "cameraPos": [ -2.2799999713897707, 0.5389999747276306, @@ -31,7 +31,7 @@ "nodeName": "VertexBuffer", "isATexture": false, "buffer": { - "fileName": "..\\OBJAssets\\bunny.obj", + "fileName": "..\\..\\OBJAssets\\bunny.obj", "structIndex": 0, "BLASOpaque": true } @@ -49,6 +49,10 @@ { "name": "ViewerColor", "value": "1.000000,10.019608,1.000000,1.000000" + }, + { + "name": "Skybox", + "value": "true" } ] } diff --git a/Techniques/DataViewers/ModelViewerCS.hlsl b/Techniques/DataViewers/ModelViewer/ModelViewerCS.hlsl similarity index 100% rename from Techniques/DataViewers/ModelViewerCS.hlsl rename to Techniques/DataViewers/ModelViewer/ModelViewerCS.hlsl diff --git a/Techniques/DataViewers/ModelViewerPS.hlsl b/Techniques/DataViewers/ModelViewer/ModelViewerPS.hlsl similarity index 100% rename from Techniques/DataViewers/ModelViewerPS.hlsl rename to Techniques/DataViewers/ModelViewer/ModelViewerPS.hlsl diff --git a/Techniques/DataViewers/ModelViewer/ModelViewerSkyboxCS.hlsl b/Techniques/DataViewers/ModelViewer/ModelViewerSkyboxCS.hlsl new file mode 100644 index 00000000..6b76937f --- /dev/null +++ b/Techniques/DataViewers/ModelViewer/ModelViewerSkyboxCS.hlsl @@ -0,0 +1,43 @@ +// Unnamed technique, shader ModelViewerSkyboxCS +/*$(ShaderResources)*/ + +// from https://learnopengl.com/PBR/IBL/Diffuse-irradiance +float2 SampleSphericalMap(float3 v) +{ + const float2 invAtan = float2(0.1591f, 0.3183f); + float2 uv = float2(atan2(v.z, v.x), asin(-v.y)); + uv *= invAtan; + uv += 0.5; + return uv; +} + +/*$(_compute:csmain)*/(uint3 DTid : SV_DispatchThreadID) +{ + uint2 px = DTid.xy; + + if (Depth[px].r != 0.0f || /*$(Variable:Skybox)*/ == 0) + return; + + uint2 renderSize; + Color.GetDimensions(renderSize.x, renderSize.y); + + // Get the world position + float2 screenPos = (float2(px)+0.5f) / float2(renderSize) * 2.0 - 1.0; + screenPos.y = -screenPos.y; + float4 world = mul(float4(screenPos, 1.0f, 1.0f), /*$(Variable:InvViewProjMtx)*/); + world.xyz /= world.w; + + float3 rayDir = normalize(world.xyz - /*$(Variable:CameraPos)*/); + + float2 uv = SampleSphericalMap(rayDir); + + float3 texel = /*$(Image:Arches_E_PineTree_3k.hdr:RGBA32_Float:float4:false)*/.SampleLevel(texSampler, uv, 0).rgb; + + Color[px] = float4(texel, 1.0f); +} + +/* +Shader Resources: + Texture Color (as UAV) + Texture Depth (as SRV) +*/ diff --git a/Techniques/DataViewers/ModelViewerVS.hlsl b/Techniques/DataViewers/ModelViewer/ModelViewerVS.hlsl similarity index 100% rename from Techniques/DataViewers/ModelViewerVS.hlsl rename to Techniques/DataViewers/ModelViewer/ModelViewerVS.hlsl diff --git a/Techniques/DataViewers/ModelViewer/view.py b/Techniques/DataViewers/ModelViewer/view.py new file mode 100644 index 00000000..92534c05 --- /dev/null +++ b/Techniques/DataViewers/ModelViewer/view.py @@ -0,0 +1,52 @@ +import Host +import GigiArray +import sys +import os +import numpy + +ImportedResourceName = "VertexBuffer" +RGResourceName = "VertexBuffer.resource" + +#Host.Print("Argc: " + str(len(sys.argv))) +#Host.Print("Argv: " + str(sys.argv)) + +Host.LoadGG("ModelViewer.gg") + +fileName = sys.argv[0] +Host.SetImportedBufferFile(ImportedResourceName, fileName) + +Host.SetCameraPos(0,0,0) +Host.SetCameraAltitudeAzimuth(0, 3.14) +Host.SetWantReadback(RGResourceName) +Host.RunTechnique(2) +Host.WaitOnGPU() + +lastReadback, success = Host.Readback(RGResourceName) +lastReadbackNP = numpy.array(lastReadback) + +vertexCount = lastReadbackNP.shape[0] +minX = lastReadbackNP[0][0] +maxX = lastReadbackNP[0][0] +minY = lastReadbackNP[0][1] +maxY = lastReadbackNP[0][1] +minZ = lastReadbackNP[0][2] +maxZ = lastReadbackNP[0][2] +for index in range(vertexCount): + minX = min(minX, lastReadbackNP[index][0]) + maxX = max(maxX, lastReadbackNP[index][0]) + minY = min(minY, lastReadbackNP[index][1]) + maxY = max(maxY, lastReadbackNP[index][1]) + minZ = min(minZ, lastReadbackNP[index][2]) + maxZ = max(maxZ, lastReadbackNP[index][2]) + +#Host.Print(str(minZ)) +#Host.Print(str(maxZ)) + +Host.SetCameraPos((minX + maxX) / 2, (minY + maxY) / 2, maxZ * 5) + +farZ = (maxZ-minZ)*20 +nearZ = farZ / 10000 +Host.SetCameraNearFarZ(nearZ, farZ) +Host.SetCameraFlySpeed((maxZ - minZ) / 25) + +# Vertex buffer contents: position(3), Color(3), Normal(3), Tagent(4), UV(2), MaterialID(1), ShapeID(1) diff --git a/Techniques/DataViewers/TextureViewer.gg b/Techniques/DataViewers/TextureViewer/TextureViewer.gg similarity index 54% rename from Techniques/DataViewers/TextureViewer.gg rename to Techniques/DataViewers/TextureViewer/TextureViewer.gg index 39433ece..c5cdbc6e 100644 --- a/Techniques/DataViewers/TextureViewer.gg +++ b/Techniques/DataViewers/TextureViewer/TextureViewer.gg @@ -1,6 +1,14 @@ { "$schema": "gigischema.json", "version": "0.99b", + "variables": [ + { + "name": "sRGB", + "type": "Bool", + "dflt": "true", + "visibility": "User" + } + ], "shaders": [ { "name": "TextureViewerCS", @@ -11,7 +19,12 @@ }, "resources": [ { - "name": "texture", + "name": "source", + "type": "Texture", + "access": "SRV" + }, + { + "name": "dest", "type": "Texture", "access": "UAV" } @@ -23,8 +36,8 @@ "resourceTexture": { "name": "Input", "editorPos": [ - -13.0, - -16.0 + -21.0, + -14.0 ], "visibility": "Imported" } @@ -33,18 +46,24 @@ "actionComputeShader": { "name": "TextureViewerCS", "editorPos": [ - 123.0, - -14.0 + 107.0, + -4.0 ], "linkProperties": [ + {}, {}, {} ], "connections": [ { - "srcPin": "texture", + "srcPin": "source", "dstNode": "Input", "dstPin": "resource" + }, + { + "srcPin": "dest", + "dstNode": "Output", + "dstPin": "resource" } ], "shader": { @@ -56,6 +75,25 @@ } } } + }, + { + "resourceTexture": { + "name": "Output", + "editorPos": [ + -21.0, + 34.0 + ], + "format": { + "node": { + "name": "Input" + } + }, + "size": { + "node": { + "name": "Input" + } + } + } } ] } \ No newline at end of file diff --git a/Techniques/DataViewers/TextureViewer.gguser b/Techniques/DataViewers/TextureViewer/TextureViewer.gguser similarity index 51% rename from Techniques/DataViewers/TextureViewer.gguser rename to Techniques/DataViewers/TextureViewer/TextureViewer.gguser index 0f6db8de..403d5316 100644 --- a/Techniques/DataViewers/TextureViewer.gguser +++ b/Techniques/DataViewers/TextureViewer/TextureViewer.gguser @@ -2,14 +2,20 @@ "version": "2.0", "snapshot": { "resourceViewNodeIndex": 1, - "resourceViewResourceIndex": 1, + "resourceViewResourceIndex": 3, "importedResources": [ { "nodeName": "Input", "texture": { - "fileName": "..\\cabinsmall.png" + "fileName": "..\\..\\cabinsmall.png" } } + ], + "savedVariables": [ + { + "name": "sRGB", + "value": "true" + } ] } } \ No newline at end of file diff --git a/Techniques/DataViewers/TextureViewer/TextureViewerCS.hlsl b/Techniques/DataViewers/TextureViewer/TextureViewerCS.hlsl new file mode 100644 index 00000000..78e20d1a --- /dev/null +++ b/Techniques/DataViewers/TextureViewer/TextureViewerCS.hlsl @@ -0,0 +1,32 @@ +// Unnamed technique, shader TextureViewerCS +/*$(ShaderResources)*/ + +float3 LinearToSRGB(float3 linearCol) +{ + float3 sRGBLo = linearCol * 12.92; + float3 sRGBHi = (pow(abs(linearCol), float3(1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4)) * 1.055) - 0.055; + float3 sRGB; + sRGB.r = linearCol.r <= 0.0031308 ? sRGBLo.r : sRGBHi.r; + sRGB.g = linearCol.g <= 0.0031308 ? sRGBLo.g : sRGBHi.g; + sRGB.b = linearCol.b <= 0.0031308 ? sRGBLo.b : sRGBHi.b; + return sRGB; +} + +/*$(_compute:csmain)*/(uint3 DTid : SV_DispatchThreadID) +{ + uint2 px = DTid.xy; + float4 color = source[px]; + + // TODO: you can modify the color here + //color.r = 1.0f; + + if ((bool)/*$(Variable:sRGB)*/) + color.rgb = LinearToSRGB(color.rgb); + dest[px] = color; +} + +/* +Shader Resources: + Texture source (as SRV) + Texture dest (as UAV) +*/ diff --git a/Techniques/DataViewers/TextureViewer/view.py b/Techniques/DataViewers/TextureViewer/view.py new file mode 100644 index 00000000..9913fe1c --- /dev/null +++ b/Techniques/DataViewers/TextureViewer/view.py @@ -0,0 +1,23 @@ +import Host +import GigiArray +import sys +import os + +#Host.Print("Argc: " + str(len(sys.argv))) +#Host.Print("Argv: " + str(sys.argv)) + +Host.LoadGG("TextureViewer.gg") + +fileName = sys.argv[0] +extension = os.path.splitext(fileName)[1] + +Host.SetImportedTextureFile("Input", fileName) + +if extension == ".hdr" or extension == ".exr": + Host.SetImportedTextureSourceIsSRGB("Input", False) + Host.SetImportedTextureFormat("Input", Host.TextureFormat_RGBA32_Float) + Host.SetVariable("sRGB", "false") +else: + Host.SetImportedTextureSourceIsSRGB("Input", True) + Host.SetImportedTextureFormat("Input", Host.TextureFormat_RGBA8_Unorm_sRGB) + Host.SetVariable("sRGB", "true") diff --git a/Techniques/DataViewers/TextureViewerCS.hlsl b/Techniques/DataViewers/TextureViewerCS.hlsl deleted file mode 100644 index ee2b1cfe..00000000 --- a/Techniques/DataViewers/TextureViewerCS.hlsl +++ /dev/null @@ -1,17 +0,0 @@ -// Unnamed technique, shader TextureViewerCS -/*$(ShaderResources)*/ - -/*$(_compute:csmain)*/(uint3 DTid : SV_DispatchThreadID) -{ - uint2 px = DTid.xy; - float4 color = texture[px]; - - // TODO: you can modify the color here - - texture[px] = color; -} - -/* -Shader Resources: - Texture texture (as UAV) -*/ diff --git a/Techniques/DataViewers/TextureViewerDDS/TextureViewer_dds.gg b/Techniques/DataViewers/TextureViewerDDS/TextureViewer_dds.gg new file mode 100644 index 00000000..8c029ea2 --- /dev/null +++ b/Techniques/DataViewers/TextureViewerDDS/TextureViewer_dds.gg @@ -0,0 +1,28 @@ +{ + "$schema": "gigischema.json", + "version": "0.99b", + "nodes": [ + { + "resourceTexture": { + "name": "Input2D", + "editorPos": [ + -21.0, + -14.0 + ], + "visibility": "Imported", + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "Input3D", + "editorPos": [ + -21.0, + 34.0 + ], + "visibility": "Imported", + "dimension": "Texture3D" + } + } + ] +} \ No newline at end of file diff --git a/Techniques/DataViewers/TextureViewerDDS/TextureViewer_dds.gguser b/Techniques/DataViewers/TextureViewerDDS/TextureViewer_dds.gguser new file mode 100644 index 00000000..9beec24b --- /dev/null +++ b/Techniques/DataViewers/TextureViewerDDS/TextureViewer_dds.gguser @@ -0,0 +1,25 @@ +{ + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 0, + "resourceViewResourceIndex": 1, + "importedResources": [ + { + "nodeName": "Input2D", + "texture": { + "fileName": "..\\..\\cabinsmall.dds", + "format": "BC7_Unorm_sRGB", + "binaryFormat": "Any" + } + }, + { + "nodeName": "Input3D", + "texture": { + "fileName": "..\\..\\cabinsmall.dds", + "format": "BC7_Unorm_sRGB", + "binaryFormat": "Any" + } + } + ] + } +} \ No newline at end of file diff --git a/Techniques/DataViewers/TextureViewerDDS/view.py b/Techniques/DataViewers/TextureViewerDDS/view.py new file mode 100644 index 00000000..a3991c3d --- /dev/null +++ b/Techniques/DataViewers/TextureViewerDDS/view.py @@ -0,0 +1,49 @@ +import Host +import GigiArray +import sys +import os + +#Host.Print("Argc: " + str(len(sys.argv))) +#Host.Print("Argv: " + str(sys.argv)) + +def DoIt(): + Host.LoadGG("TextureViewer_dds.gg") + + fileName = sys.argv[0] + + Host.SetImportedTextureFile("Input2D", fileName) + Host.SetImportedTextureFile("Input3D", fileName) + + # Try as BC7 first + Host.SetImportedTextureSourceIsSRGB("Input2D", True) + Host.SetImportedTextureSourceIsSRGB("Input3D", True) + Host.SetImportedTextureFormat("Input2D", Host.TextureFormat_BC7_Unorm_sRGB) + Host.SetImportedTextureFormat("Input3D", Host.TextureFormat_BC7_Unorm_sRGB) + Host.RunTechnique(2) + Host.WaitOnGPU() + + if Host.IsResourceCreated("Input2D"): + Host.SetViewedResource("Input2D.resource - Initial State") + return + + if Host.IsResourceCreated("Input3D"): + Host.SetViewedResource("Input3D.resource - Initial State") + return + + # Try as BC6 if that didn't work + Host.SetImportedTextureSourceIsSRGB("Input2D", False) + Host.SetImportedTextureSourceIsSRGB("Input3D", False) + Host.SetImportedTextureFormat("Input2D", Host.TextureFormat_BC6_UF16) + Host.SetImportedTextureFormat("Input3D", Host.TextureFormat_BC6_UF16) + Host.RunTechnique(2) + Host.WaitOnGPU() + + if Host.IsResourceCreated("Input2D"): + Host.SetViewedResource("Input2D.resource - Initial State") + return + + if Host.IsResourceCreated("Input3D"): + Host.SetViewedResource("Input3D.resource - Initial State") + return + +DoIt() diff --git a/Techniques/ManualTesting/MakeTexture2DArray.gg b/Techniques/ManualTesting/MakeTexture2DArray.gg new file mode 100644 index 00000000..22aae785 --- /dev/null +++ b/Techniques/ManualTesting/MakeTexture2DArray.gg @@ -0,0 +1,392 @@ +{ + "$schema": "gigischema.json", + "version": "0.99b", + "variables": [ + { + "name": "RenderSize", + "type": "Uint3", + "dflt": "8, 8, 4", + "visibility": "User" + } + ], + "shaders": [ + { + "name": "MakeTexture2DArrayCS", + "fileName": "MakeTexture2DArrayCS.hlsl", + "entryPoint": "csmain", + "NumThreads": [ + 4, + 4, + 4 + ], + "resources": [ + { + "name": "TexF32Mip0", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexF32Mip1", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexF32Mip2", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexF32Mip3", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexU8Mip0", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexU8Mip1", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexU8Mip2", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexU8Mip3", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexU8_sRGBMip0", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexU8_sRGBMip1", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexU8_sRGBMip2", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "TexU8_sRGBMip3", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "SingleF32", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "SingleU8", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "SingleU8_sRGB", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture2DArray" + } + } + ] + } + ], + "nodes": [ + { + "resourceTexture": { + "name": "Tex_RGBA_F32", + "editorPos": [ + -46.0, + -30.0 + ], + "format": { + "format": "RGBA32_Float" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "numMips": 0, + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_U8", + "editorPos": [ + -42.0, + 34.0 + ], + "format": { + "format": "RGBA8_Unorm" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "numMips": 0, + "dimension": "Texture2DArray" + } + }, + { + "actionComputeShader": { + "name": "CS", + "editorPos": [ + 133.0, + -18.0 + ], + "linkProperties": [ + {}, + { + "UAVMipIndex": 1 + }, + { + "UAVMipIndex": 2 + }, + { + "UAVMipIndex": 3 + }, + {}, + { + "UAVMipIndex": 1 + }, + { + "UAVMipIndex": 2 + }, + { + "UAVMipIndex": 3 + }, + {}, + { + "UAVMipIndex": 1 + }, + { + "UAVMipIndex": 2 + }, + { + "UAVMipIndex": 3 + }, + {}, + {}, + {}, + {} + ], + "connections": [ + { + "srcPin": "TexF32Mip3", + "dstNode": "Tex_RGBA_F32", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_sRGBMip3", + "dstNode": "Tex_RGBA_U8_sRGB", + "dstPin": "resource" + }, + { + "srcPin": "TexU8Mip3", + "dstNode": "Tex_RGBA_U8", + "dstPin": "resource" + }, + { + "srcPin": "TexF32Mip0", + "dstNode": "Tex_RGBA_F32", + "dstPin": "resource" + }, + { + "srcPin": "TexF32Mip1", + "dstNode": "Tex_RGBA_F32", + "dstPin": "resource" + }, + { + "srcPin": "TexU8Mip0", + "dstNode": "Tex_RGBA_U8", + "dstPin": "resource" + }, + { + "srcPin": "TexU8Mip1", + "dstNode": "Tex_RGBA_U8", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_sRGBMip0", + "dstNode": "Tex_RGBA_U8_sRGB", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_sRGBMip1", + "dstNode": "Tex_RGBA_U8_sRGB", + "dstPin": "resource" + }, + { + "srcPin": "TexF32Mip3" + }, + { + "srcPin": "TexF32Mip2", + "dstNode": "Tex_RGBA_F32", + "dstPin": "resource" + }, + { + "srcPin": "TexU8Mip2", + "dstNode": "Tex_RGBA_U8", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_sRGBMip2", + "dstNode": "Tex_RGBA_U8_sRGB", + "dstPin": "resource" + }, + { + "srcPin": "SingleU8_sRGB", + "dstNode": "Tex_RGBA_U8_sRGB No Mips", + "dstPin": "resource" + }, + { + "srcPin": "SingleF32", + "dstNode": "Tex_RGBA_F32 No Mips", + "dstPin": "resource" + }, + { + "srcPin": "SingleU8", + "dstNode": "Tex_RGBA_U8 No Mips", + "dstPin": "resource" + } + ], + "shader": { + "name": "MakeTexture2DArrayCS" + }, + "dispatchSize": { + "variable": { + "name": "RenderSize" + } + } + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_U8_sRGB", + "editorPos": [ + -77.0, + 98.0 + ], + "format": { + "format": "RGBA8_Unorm_sRGB" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "numMips": 0, + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_F32 No Mips", + "editorPos": [ + -98.0, + 162.0 + ], + "format": { + "format": "RGBA32_Float" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_U8 No Mips", + "editorPos": [ + -94.0, + 210.0 + ], + "format": { + "format": "RGBA8_Unorm" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_U8_sRGB No Mips", + "editorPos": [ + -129.0, + 258.0 + ], + "format": { + "format": "RGBA8_Unorm_sRGB" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "dimension": "Texture2DArray" + } + } + ] +} \ No newline at end of file diff --git a/Techniques/ManualTesting/MakeTexture2DArray.gguser b/Techniques/ManualTesting/MakeTexture2DArray.gguser new file mode 100644 index 00000000..b4660cc1 --- /dev/null +++ b/Techniques/ManualTesting/MakeTexture2DArray.gguser @@ -0,0 +1,13 @@ +{ + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 2, + "resourceViewResourceIndex": 30, + "savedVariables": [ + { + "name": "RenderSize", + "value": "8,8,4" + } + ] + } +} \ No newline at end of file diff --git a/Techniques/ManualTesting/MakeTexture2DArrayCS.hlsl b/Techniques/ManualTesting/MakeTexture2DArrayCS.hlsl new file mode 100644 index 00000000..1d2fcd2c --- /dev/null +++ b/Techniques/ManualTesting/MakeTexture2DArrayCS.hlsl @@ -0,0 +1,71 @@ +// Unnamed technique, shader MakeTexture2DArrayCS +/*$(ShaderResources)*/ + +float3 LinearToSRGB(float3 linearCol) +{ + float3 sRGBLo = linearCol * 12.92; + float3 sRGBHi = (pow(abs(linearCol), float3(1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4)) * 1.055) - 0.055; + float3 sRGB; + sRGB.r = linearCol.r <= 0.0031308 ? sRGBLo.r : sRGBHi.r; + sRGB.g = linearCol.g <= 0.0031308 ? sRGBLo.g : sRGBHi.g; + sRGB.b = linearCol.b <= 0.0031308 ? sRGBLo.b : sRGBHi.b; + return sRGB; +} + +/*$(_compute:csmain)*/(uint3 DTid : SV_DispatchThreadID) +{ + // Mip0 + { + float3 uvw = (float3(DTid) + 0.5f) / float3(/*$(Variable:RenderSize)*/); + TexF32Mip0[DTid] = float4(uvw, 1.0f); + TexU8Mip0[DTid] = float4(uvw, 1.0f); + TexU8_sRGBMip0[DTid] = float4(LinearToSRGB(uvw), 1.0f); + + SingleF32[DTid] = float4(uvw, 1.0f); + SingleU8[DTid] = float4(uvw, 1.0f); + SingleU8_sRGB[DTid] = float4(LinearToSRGB(uvw), 1.0f); + } + + // Mip1 + { + float3 uvw = (float3(DTid) + 0.5f) / float3(/*$(Variable:RenderSize)*/ / uint3(2,2,1)); + TexF32Mip1[DTid] = float4(uvw, 1.0f); + TexU8Mip1[DTid] = float4(uvw, 1.0f); + TexU8_sRGBMip1[DTid] = float4(LinearToSRGB(uvw), 1.0f); + } + + // Mip2 + { + float3 uvw = (float3(DTid) + 0.5f) / float3(/*$(Variable:RenderSize)*/ / uint3(4,4,1)); + TexF32Mip2[DTid] = float4(uvw, 1.0f); + TexU8Mip2[DTid] = float4(uvw, 1.0f); + TexU8_sRGBMip2[DTid] = float4(LinearToSRGB(uvw), 1.0f); + } + + // Mip2 + { + float3 uvw = (float3(DTid) + 0.5f) / float3(/*$(Variable:RenderSize)*/ / uint3(8,8,1)); + TexF32Mip3[DTid] = float4(uvw, 1.0f); + TexU8Mip3[DTid] = float4(uvw, 1.0f); + TexU8_sRGBMip3[DTid] = float4(LinearToSRGB(uvw), 1.0f); + } +} + +/* +Shader Resources: + Texture TexF32Mip0 (as UAV) + Texture TexF32Mip1 (as UAV) + Texture TexF32Mip2 (as UAV) + Texture TexF32Mip3 (as UAV) + Texture TexU8Mip0 (as UAV) + Texture TexU8Mip1 (as UAV) + Texture TexU8Mip2 (as UAV) + Texture TexU8Mip3 (as UAV) + Texture TexU8_sRGBMip0 (as UAV) + Texture TexU8_sRGBMip1 (as UAV) + Texture TexU8_sRGBMip2 (as UAV) + Texture TexU8_sRGBMip3 (as UAV) + Texture SingleF32 (as UAV) + Texture SingleU8 (as UAV) + Texture SingleU8_sRGB (as UAV) +*/ diff --git a/Techniques/ManualTesting/MakeTexture3D.gg b/Techniques/ManualTesting/MakeTexture3D.gg new file mode 100644 index 00000000..5574a656 --- /dev/null +++ b/Techniques/ManualTesting/MakeTexture3D.gg @@ -0,0 +1,389 @@ +{ + "$schema": "gigischema.json", + "version": "0.99b", + "variables": [ + { + "name": "RenderSize", + "type": "Uint3", + "dflt": "8, 8, 4", + "visibility": "User" + } + ], + "shaders": [ + { + "name": "MakeTexture3DCS", + "fileName": "MakeTexture3DCS.hlsl", + "entryPoint": "csmain", + "NumThreads": [ + 4, + 4, + 4 + ], + "resources": [ + { + "name": "TexF32Mip0", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexF32Mip1", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexF32Mip2", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexF32Mip3", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexF32_NoMips", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8Mip0", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8Mip1", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8Mip2", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8Mip3", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8_NoMips", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8_sRGBMip0", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8_sRGBMip1", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8_sRGBMip2", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8_sRGBMip3", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "TexU8_sRGB_NoMips", + "type": "Texture", + "access": "UAV", + "texture": { + "dimension": "Texture3D" + } + } + ] + } + ], + "nodes": [ + { + "resourceTexture": { + "name": "Tex_RGBA_F32", + "editorPos": [ + -46.0, + -62.0 + ], + "format": { + "format": "RGBA32_Float" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "numMips": 0, + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_U8", + "editorPos": [ + -42.0, + 34.0 + ], + "format": { + "format": "RGBA8_Unorm" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "numMips": 0, + "dimension": "Texture3D" + } + }, + { + "actionComputeShader": { + "name": "CS", + "editorPos": [ + 181.0, + -78.0 + ], + "linkProperties": [ + {}, + { + "UAVMipIndex": 1 + }, + { + "UAVMipIndex": 2 + }, + { + "UAVMipIndex": 3 + }, + {}, + {}, + { + "UAVMipIndex": 1 + }, + { + "UAVMipIndex": 2 + }, + { + "UAVMipIndex": 3 + }, + {}, + {}, + { + "UAVMipIndex": 1 + }, + { + "UAVMipIndex": 2 + }, + { + "UAVMipIndex": 3 + }, + {}, + {} + ], + "connections": [ + { + "srcPin": "TexF32_NoMips", + "dstNode": "Tex_RGBA_F32_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_sRGB_NoMips", + "dstNode": "Tex_RGBA_U8_sRGB_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_NoMips", + "dstNode": "Tex_RGBA_U8_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "TexF32Mip3", + "dstNode": "Tex_RGBA_F32", + "dstPin": "resource" + }, + { + "srcPin": "TexU8Mip3", + "dstNode": "Tex_RGBA_U8", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_sRGBMip3", + "dstNode": "Tex_RGBA_U8_sRGB", + "dstPin": "resource" + }, + { + "srcPin": "TexF32Mip0", + "dstNode": "Tex_RGBA_F32", + "dstPin": "resource" + }, + { + "srcPin": "TexF32Mip1", + "dstNode": "Tex_RGBA_F32", + "dstPin": "resource" + }, + { + "srcPin": "TexF32Mip2", + "dstNode": "Tex_RGBA_F32", + "dstPin": "resource" + }, + { + "srcPin": "TexU8Mip0", + "dstNode": "Tex_RGBA_U8", + "dstPin": "resource" + }, + { + "srcPin": "TexU8Mip1", + "dstNode": "Tex_RGBA_U8", + "dstPin": "resource" + }, + { + "srcPin": "TexU8Mip2", + "dstNode": "Tex_RGBA_U8", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_sRGBMip0", + "dstNode": "Tex_RGBA_U8_sRGB", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_sRGBMip1", + "dstNode": "Tex_RGBA_U8_sRGB", + "dstPin": "resource" + }, + { + "srcPin": "TexU8_sRGBMip2", + "dstNode": "Tex_RGBA_U8_sRGB", + "dstPin": "resource" + } + ], + "shader": { + "name": "MakeTexture3DCS" + }, + "dispatchSize": { + "variable": { + "name": "RenderSize" + } + } + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_U8_sRGB", + "editorPos": [ + -77.0, + 130.0 + ], + "format": { + "format": "RGBA8_Unorm_sRGB" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "numMips": 0, + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_F32_NoMips", + "editorPos": [ + -95.0, + -14.0 + ], + "format": { + "format": "RGBA32_Float" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_U8_NoMips", + "editorPos": [ + -91.0, + 82.0 + ], + "format": { + "format": "RGBA8_Unorm" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "Tex_RGBA_U8_sRGB_NoMips", + "editorPos": [ + -126.0, + 178.0 + ], + "format": { + "format": "RGBA8_Unorm_sRGB" + }, + "size": { + "variable": { + "name": "RenderSize" + } + }, + "dimension": "Texture3D" + } + } + ] +} \ No newline at end of file diff --git a/Techniques/ManualTesting/MakeTexture3D.gguser b/Techniques/ManualTesting/MakeTexture3D.gguser new file mode 100644 index 00000000..e462ae30 --- /dev/null +++ b/Techniques/ManualTesting/MakeTexture3D.gguser @@ -0,0 +1,13 @@ +{ + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 2, + "resourceViewResourceIndex": 20, + "savedVariables": [ + { + "name": "RenderSize", + "value": "8,8,4" + } + ] + } +} \ No newline at end of file diff --git a/Techniques/ManualTesting/MakeTexture3DCS.hlsl b/Techniques/ManualTesting/MakeTexture3DCS.hlsl new file mode 100644 index 00000000..b123b687 --- /dev/null +++ b/Techniques/ManualTesting/MakeTexture3DCS.hlsl @@ -0,0 +1,74 @@ +// Unnamed technique, shader MakeTexture3DCS +/*$(ShaderResources)*/ + +float3 LinearToSRGB(float3 linearCol) +{ + float3 sRGBLo = linearCol * 12.92; + float3 sRGBHi = (pow(abs(linearCol), float3(1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4)) * 1.055) - 0.055; + float3 sRGB; + sRGB.r = linearCol.r <= 0.0031308 ? sRGBLo.r : sRGBHi.r; + sRGB.g = linearCol.g <= 0.0031308 ? sRGBLo.g : sRGBHi.g; + sRGB.b = linearCol.b <= 0.0031308 ? sRGBLo.b : sRGBHi.b; + return sRGB; +} + +/*$(_compute:csmain)*/(uint3 DTid : SV_DispatchThreadID) +{ + // Mip 0 + { + uint3 renderSize = max(/*$(Variable:RenderSize)*/ / uint3(1,1,1), uint3(1,1,1)); + float3 uvw = (float3(DTid) + 0.5f) / float3(renderSize); + TexF32Mip0[DTid] = float4(uvw, 1.0f); + TexF32_NoMips[DTid] = float4(uvw, 1.0f); + TexU8Mip0[DTid] = float4(uvw, 1.0f); + TexU8_NoMips[DTid] = float4(uvw, 1.0f); + TexU8_sRGBMip0[DTid] = float4(LinearToSRGB(uvw), 1.0f); + TexU8_sRGB_NoMips[DTid] = float4(LinearToSRGB(uvw), 1.0f); + } + + // Mip1 + { + uint3 renderSize = max(/*$(Variable:RenderSize)*/ / uint3(2,2,2), uint3(1,1,1)); + float3 uvw = (float3(DTid) + 0.5f) / float3(renderSize); + TexF32Mip1[DTid] = float4(uvw, 1.0f); + TexU8Mip1[DTid] = float4(uvw, 1.0f); + TexU8_sRGBMip1[DTid] = float4(LinearToSRGB(uvw), 1.0f); + } + + // Mip2 + { + uint3 renderSize = max(/*$(Variable:RenderSize)*/ / uint3(4,4,4), uint3(1,1,1)); + float3 uvw = (float3(DTid) + 0.5f) / float3(renderSize); + TexF32Mip2[DTid] = float4(uvw, 1.0f); + TexU8Mip2[DTid] = float4(uvw, 1.0f); + TexU8_sRGBMip2[DTid] = float4(LinearToSRGB(uvw), 1.0f); + } + + // Mip3 + { + uint3 renderSize = max(/*$(Variable:RenderSize)*/ / uint3(8,8,8), uint3(1,1,1)); + float3 uvw = (float3(DTid) + 0.5f) / float3(renderSize); + TexF32Mip3[DTid] = float4(uvw, 1.0f); + TexU8Mip3[DTid] = float4(uvw, 1.0f); + TexU8_sRGBMip3[DTid] = float4(LinearToSRGB(uvw), 1.0f); + } +} + +/* +Shader Resources: + Texture TexF32Mip0 (as UAV) + Texture TexF32Mip1 (as UAV) + Texture TexF32Mip2 (as UAV) + Texture TexF32Mip3 (as UAV) + Texture TexF32_NoMips (as UAV) + Texture TexU8Mip0 (as UAV) + Texture TexU8Mip1 (as UAV) + Texture TexU8Mip2 (as UAV) + Texture TexU8Mip3 (as UAV) + Texture TexU8_NoMips (as UAV) + Texture TexU8_sRGBMip0 (as UAV) + Texture TexU8_sRGBMip1 (as UAV) + Texture TexU8_sRGBMip2 (as UAV) + Texture TexU8_sRGBMip3 (as UAV) + Texture TexU8_sRGB_NoMips (as UAV) +*/ diff --git a/Techniques/UnitTests/Data/binaryTexF32.gguser b/Techniques/UnitTests/Data/binaryTexF32.gguser index ca7245ba..afacb2a5 100644 --- a/Techniques/UnitTests/Data/binaryTexF32.gguser +++ b/Techniques/UnitTests/Data/binaryTexF32.gguser @@ -1,19 +1,23 @@ { - "resourceViewNodeIndex": 0, - "resourceViewResourceIndex": 1, - "importedResources": [ - { - "nodeName": "Texture", - "texture": { - "fileName": "64x64_RGBA_f32.dat", - "fileIsSRGB": false, - "format": "RGBA32_Float", - "binaryDims": [ - 64, - 64, - 1 - ] + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 0, + "resourceViewResourceIndex": 1, + "importedResources": [ + { + "nodeName": "Texture", + "texture": { + "fileName": "64x64_RGBA_f32.dat", + "fileIsSRGB": false, + "format": "RGBA32_Float", + "binaryDims": [ + 64, + 64, + 1 + ], + "binaryFormat": "RGBA32_Float" + } } - } - ] + ] + } } \ No newline at end of file diff --git a/Techniques/UnitTests/Data/binaryTexU8.gguser b/Techniques/UnitTests/Data/binaryTexU8.gguser index 656b3337..36a1e3f8 100644 --- a/Techniques/UnitTests/Data/binaryTexU8.gguser +++ b/Techniques/UnitTests/Data/binaryTexU8.gguser @@ -1,19 +1,21 @@ { - "resourceViewNodeIndex": 0, - "resourceViewResourceIndex": 1, - "importedResources": [ - { - "nodeName": "Texture", - "texture": { - "fileName": "64x64_RGBA_u8.dat", - "format": "RGBA8_Unorm", - "binaryDims": [ - 64, - 64, - 1 - ], - "binaryType": "Byte" + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 0, + "resourceViewResourceIndex": 1, + "importedResources": [ + { + "nodeName": "Texture", + "texture": { + "fileName": "64x64_RGBA_u8.dat", + "format": "RGBA8_Unorm", + "binaryDims": [ + 64, + 64, + 1 + ] + } } - } - ] + ] + } } \ No newline at end of file diff --git a/Techniques/UnitTests/Python/GPUWrite.py b/Techniques/UnitTests/Python/GPUWrite.py index 7baf3c8f..94219700 100644 --- a/Techniques/UnitTests/Python/GPUWrite.py +++ b/Techniques/UnitTests/Python/GPUWrite.py @@ -29,7 +29,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[1], True, resource[2]) + Host.SetWantReadback(resource[1]) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -60,7 +60,7 @@ def DoTest(): # Read the data back, make sure it's correct for i, resource in enumerate(resources): - lastReadback, success = Host.Readback(resource[1]) + lastReadback, success = Host.Readback(resource[1], resource[2]) if success: lastReadbackNp = numpy.array(lastReadback) #Host.Warn(resource[1] + " " + str(lastReadbackNp.shape)) diff --git a/Techniques/UnitTests/RayTrace/SimpleRT_ModifyScene.hlsl b/Techniques/UnitTests/RayTrace/SimpleRT_ModifyScene.hlsl new file mode 100644 index 00000000..26931800 --- /dev/null +++ b/Techniques/UnitTests/RayTrace/SimpleRT_ModifyScene.hlsl @@ -0,0 +1,16 @@ +// simpleRT technique, shader SimpleRTModifyScene +/*$(ShaderResources)*/ + +/*$(_compute:csmain)*/(uint3 DTid : SV_DispatchThreadID) +{ + Struct_VertexBuffer vertex = Scene[DTid.x]; + + vertex.Position *= (1.0f + sin(6.28 * float(/*$(Variable:FrameIndex)*/) / 60.0f) * 0.5f + 0.5f); + + Scene[DTid.x] = vertex; +} + +/* +Shader Resources: + Buffer Scene (as UAV) +*/ diff --git a/Techniques/UnitTests/RayTrace/simpleRTDynamic.gg b/Techniques/UnitTests/RayTrace/simpleRTDynamic.gg new file mode 100644 index 00000000..36f97a72 --- /dev/null +++ b/Techniques/UnitTests/RayTrace/simpleRTDynamic.gg @@ -0,0 +1,298 @@ +{ + "$schema": "gigischema.json", + "name": "simpleRT", + "version": "0.99b", + "variables": [ + { + "name": "enabled", + "type": "Bool", + "dflt": "false", + "visibility": "User" + }, + { + "name": "clipToWorld", + "type": "Float4x4", + "visibility": "Host" + }, + { + "name": "cameraPos", + "type": "Float3", + "visibility": "Host" + }, + { + "name": "depthNearPlane", + "comment": "The depth value for the near plane.", + "type": "Float", + "dflt": "0.0f", + "visibility": "Host" + }, + { + "name": "hitColor", + "type": "Float3", + "dflt": "0.0f, 1.0f, 0.0f", + "visibility": "User" + }, + { + "name": "missColor", + "type": "Float3", + "dflt": "1.0f, 0.0f, 0.0f", + "visibility": "User" + }, + { + "name": "FrameIndex", + "type": "Int", + "dflt": "0", + "transient": true + } + ], + "shaders": [ + { + "name": "SimpleRTRayGen", + "fileName": "simpleRT.hlsl", + "type": "RTRayGen", + "entryPoint": "RayGen", + "resources": [ + { + "name": "g_texture", + "type": "Texture", + "access": "UAV", + "buffer": { + "PODAsStructuredBuffer": false + } + }, + { + "name": "g_scene", + "type": "Buffer", + "access": "RTScene", + "buffer": { + "PODAsStructuredBuffer": false + } + } + ] + }, + { + "name": "SimpleRTMiss", + "fileName": "simpleRT.hlsl", + "type": "RTMiss", + "entryPoint": "Miss", + "copyFile": false + }, + { + "name": "SimpleRTClosestHit", + "fileName": "simpleRT.hlsl", + "type": "RTClosestHit", + "entryPoint": "ClosestHit", + "copyFile": false + }, + { + "name": "SimpleRTModifyScene", + "fileName": "SimpleRT_ModifyScene.hlsl", + "entryPoint": "csmain", + "NumThreads": [ + 64, + 1, + 1 + ], + "resources": [ + { + "name": "Scene", + "type": "Buffer", + "access": "UAV", + "buffer": { + "typeStruct": { + "name": "VertexBuffer" + } + } + } + ] + } + ], + "structs": [ + { + "name": "VertexBuffer", + "forceHostVisible": true, + "fields": [ + { + "name": "Color", + "type": "Float3", + "semantic": "Color" + }, + { + "name": "Position", + "type": "Float3", + "semantic": "Position" + } + ] + }, + { + "name": "VertexBufferSimple", + "fields": [ + { + "name": "Position", + "type": "Float3", + "semantic": "Position" + } + ] + }, + { + "name": "VertexBufferFull", + "fields": [ + { + "name": "Position", + "type": "Float3", + "semantic": "Position" + }, + { + "name": "Color", + "type": "Float3", + "semantic": "Color" + }, + { + "name": "Normal", + "type": "Float3", + "semantic": "Normal" + }, + { + "name": "Tangent", + "type": "Float4", + "semantic": "Tangent" + }, + { + "name": "UV", + "type": "Float2", + "semantic": "UV" + }, + { + "name": "MaterialID", + "type": "Int", + "dflt": "0", + "semantic": "MaterialID" + } + ] + } + ], + "nodes": [ + { + "resourceTexture": { + "name": "Texture", + "comment": "The texture that is rendered to", + "editorPos": [ + 267.0, + -30.0 + ], + "visibility": "Exported", + "format": { + "format": "RGBA8_Unorm_sRGB" + }, + "size": { + "multiply": [ + 1280, + 720, + 1 + ] + } + } + }, + { + "resourceBuffer": { + "name": "Scene", + "comment": "The raytracing scene", + "editorPos": [ + 107.0, + 34.0 + ], + "visibility": "Imported" + } + }, + { + "actionRayShader": { + "name": "DoRT", + "editorPos": [ + 389.0, + -14.0 + ], + "condition": { + "variable1": "enabled", + "comparison": "IsTrue" + }, + "linkProperties": [ + {}, + {} + ], + "connections": [ + { + "srcPin": "g_texture", + "dstNode": "Texture", + "dstPin": "resource" + }, + { + "srcPin": "g_scene", + "dstNode": "ModifyScene", + "dstPin": "Scene" + } + ], + "shader": { + "name": "SimpleRTRayGen" + }, + "dispatchSize": { + "node": { + "name": "Texture" + } + }, + "rayPayloadSize": 12 + } + }, + { + "actionComputeShader": { + "name": "ModifyScene", + "editorPos": [ + 229.0, + 34.0 + ], + "linkProperties": [ + {}, + {} + ], + "connections": [ + { + "srcPin": "Scene", + "dstNode": "Scene", + "dstPin": "resource" + } + ], + "shader": { + "name": "SimpleRTModifyScene" + }, + "dispatchSize": { + "node": { + "name": "Scene" + } + } + } + } + ], + "setVars": [ + { + "destination": { + "name": "FrameIndex" + }, + "AVar": { + "name": "FrameIndex" + }, + "BLiteral": "1" + } + ], + "hitGroups": [ + { + "name": "HitGroup0", + "closestHit": { + "name": "SimpleRTClosestHit" + } + } + ], + "settings": { + "frostbite": { + "shaderProgramsProviderVersion": 1340 + } + } +} \ No newline at end of file diff --git a/Techniques/UnitTests/RayTrace/simpleRTDynamic.gguser b/Techniques/UnitTests/RayTrace/simpleRTDynamic.gguser new file mode 100644 index 00000000..68a2198f --- /dev/null +++ b/Techniques/UnitTests/RayTrace/simpleRTDynamic.gguser @@ -0,0 +1,43 @@ +{ + "version": "2.0", + "systemVars": { + "ProjMtx_textureName": "Texture", + "InvViewProjMtx_varName": "clipToWorld" + }, + "snapshot": { + "resourceViewNodeIndex": 2, + "resourceViewResourceIndex": 3, + "importedResources": [ + { + "nodeName": "Scene", + "isATexture": false, + "buffer": { + "fileName": "SimpleRT_VertexBuffer.csv", + "structIndex": 0 + } + } + ], + "savedVariables": [ + { + "name": "enabled", + "value": "true" + }, + { + "name": "cameraPos", + "value": "0.000000,0.000000,-10.000000" + }, + { + "name": "depthNearPlane", + "value": "0.100000" + }, + { + "name": "hitColor", + "value": "0.000000,1.000000,0.000000" + }, + { + "name": "missColor", + "value": "1.000000,0.000000,0.000000" + } + ] + } +} \ No newline at end of file diff --git a/Techniques/UnitTests/RayTrace/simpleRTDynamic.py b/Techniques/UnitTests/RayTrace/simpleRTDynamic.py new file mode 100644 index 00000000..f414ac7a --- /dev/null +++ b/Techniques/UnitTests/RayTrace/simpleRTDynamic.py @@ -0,0 +1,75 @@ +import Host +import GigiArray +import numpy +from PIL import Image +import os + +resources = [ + [ "DoRT._SimpleRTRayGenCB: _SimpleRTRayGenCB (CBV)", False ], + [ "DoRT.g_texture: Texture (UAV - After)", True ], +] + +# don't save gguser files during this script execution +Host.DisableGGUserSave(True) + +def DoTest(): + TestPassed = True + + # make sure the output directory exists + outDirName = "Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/" + os.makedirs(outDirName, exist_ok=True) + + # Load the technique + if not Host.LoadGG("Techniques/UnitTests/RayTrace/simpleRTDynamic.gg"): + return False + + # Specify the resources we want to readback + for resource in resources: + Host.SetWantReadback(resource[0]) + + # Do one execution to ensure everything is initialized + Host.RunTechnique() + + # Get the results and compare + Host.RunTechnique() + Host.WaitOnGPU() + for i, resource in enumerate(resources): + lastReadback, success = Host.Readback(resource[0]) + if success: + lastReadbackNp = numpy.array(lastReadback) + if resource[1]: + lastReadbackNp = lastReadbackNp.reshape((lastReadbackNp.shape[1], lastReadbackNp.shape[2], lastReadbackNp.shape[3])) + outFileName = outDirName + str(i) + ".png" + if os.path.exists(outFileName): + img = numpy.asarray(Image.open(outFileName)) + if not numpy.array_equal(img, lastReadbackNp): + Host.Log("Error", outFileName + " did not match") + TestPassed = False + else: + Host.Log("Error", outFileName + " didn't exist, creating") + Image.fromarray(lastReadbackNp, "RGBA").save(outFileName) + TestPassed = False + else: + outFileName = outDirName + str(i) + ".npy" + if os.path.exists(outFileName): + img = numpy.load(outFileName) + if not numpy.array_equal(img, lastReadbackNp): + Host.Log("Error", outFileName + " did not match") + TestPassed = False + else: + Host.Log("Error", outFileName + " didn't exist, creating") + numpy.save(outFileName, lastReadbackNp) + lastReadbackNp.tofile(outDirName + str(i) + ".bin", "") + TestPassed = False + else: + Host.Log("Error", "Could not readback " + resource[0]) + TestPassed = False + + return TestPassed + +# This is so the test can be ran by itself directly +if __name__ == "builtins": + if DoTest(): + Host.Log("Info", "test Passed") + else: + Host.Log("Error", "Test Failed") diff --git a/Techniques/UnitTests/Textures/Load_Tex2DArray.gg b/Techniques/UnitTests/Textures/Load_Tex2DArray.gg new file mode 100644 index 00000000..59a6f6c1 --- /dev/null +++ b/Techniques/UnitTests/Textures/Load_Tex2DArray.gg @@ -0,0 +1,272 @@ +{ + "$schema": "gigischema.json", + "version": "0.99b", + "shaders": [ + { + "name": "Load_Tex2DArrayCS", + "fileName": "Load_Tex2DArrayCS.hlsl", + "entryPoint": "csmain", + "NumThreads": [ + 4, + 4, + 4 + ], + "resources": [ + { + "name": "BC6U", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "BC6U_NoMips", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "BC7sRGB", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "BC7sRGB_NoMips", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "BinaryF32", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "BinaryF32_NoMips", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "BinaryU8", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "BinaryU8_NoMips", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture2DArray" + } + }, + { + "name": "Output", + "type": "Texture", + "access": "UAV" + } + ] + } + ], + "nodes": [ + { + "resourceTexture": { + "name": "BC6U", + "editorPos": [ + -69.0, + -190.0 + ], + "visibility": "Imported", + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "BC7sRGB", + "editorPos": [ + -69.0, + -78.0 + ], + "visibility": "Imported", + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "BinaryF32", + "editorPos": [ + -53.0, + 18.0 + ], + "visibility": "Imported", + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "BinaryU8", + "editorPos": [ + -53.0, + 114.0 + ], + "visibility": "Imported", + "dimension": "Texture2DArray" + } + }, + { + "actionComputeShader": { + "name": "Load_Tex2DArrayCS", + "editorPos": [ + 208.0, + -94.0 + ], + "linkProperties": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "connections": [ + { + "srcPin": "BC6U_NoMips", + "dstNode": "BC6U_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "BC7sRGB_NoMips", + "dstNode": "BC7sRGB_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "BinaryF32_NoMips", + "dstNode": "BinaryF32_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "BinaryU8_NoMips", + "dstNode": "BinaryU8_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "Output", + "dstNode": "Output", + "dstPin": "resource" + }, + { + "srcPin": "BC6U", + "dstNode": "BC6U", + "dstPin": "resource" + }, + { + "srcPin": "BC7sRGB", + "dstNode": "BC7sRGB", + "dstPin": "resource" + }, + { + "srcPin": "BinaryF32", + "dstNode": "BinaryF32", + "dstPin": "resource" + }, + { + "srcPin": "BinaryU8", + "dstNode": "BinaryU8", + "dstPin": "resource" + } + ], + "shader": { + "name": "Load_Tex2DArrayCS" + }, + "dispatchSize": { + "node": { + "name": "Output" + } + } + } + }, + { + "resourceTexture": { + "name": "Output", + "editorPos": [ + -53.0, + 210.0 + ], + "format": { + "format": "RGBA8_Unorm_sRGB" + }, + "size": { + "multiply": [ + 64, + 96, + 1 + ] + } + } + }, + { + "resourceTexture": { + "name": "BinaryU8_NoMips", + "editorPos": [ + -100.0, + 162.0 + ], + "visibility": "Imported", + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "BinaryF32_NoMips", + "editorPos": [ + -104.0, + 66.0 + ], + "visibility": "Imported", + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "BC7sRGB_NoMips", + "editorPos": [ + -85.0, + -30.0 + ], + "visibility": "Imported", + "dimension": "Texture2DArray" + } + }, + { + "resourceTexture": { + "name": "BC6U_NoMips", + "editorPos": [ + -69.0, + -142.0 + ], + "visibility": "Imported", + "dimension": "Texture2DArray" + } + } + ] +} \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Load_Tex2DArray.gguser b/Techniques/UnitTests/Textures/Load_Tex2DArray.gguser new file mode 100644 index 00000000..ad1a741d --- /dev/null +++ b/Techniques/UnitTests/Textures/Load_Tex2DArray.gguser @@ -0,0 +1,93 @@ +{ + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 4, + "resourceViewResourceIndex": 13, + "importedResources": [ + { + "nodeName": "BC6U", + "texture": { + "fileName": "Tex2DArray_BC6U_8x8x4_mips.dds", + "fileIsSRGB": false, + "format": "BC6_UF16", + "binaryFormat": "Any" + } + }, + { + "nodeName": "BC6U_NoMips", + "texture": { + "fileName": "Tex2DArray_BC6U_8x8x4_nomips.dds", + "format": "BC6_UF16", + "binaryFormat": "Any" + } + }, + { + "nodeName": "BC7sRGB", + "texture": { + "fileName": "Tex2DArray_BC7sRGB_8x8x4_mips.dds", + "format": "BC7_Unorm_sRGB", + "binaryFormat": "Any" + } + }, + { + "nodeName": "BC7sRGB_NoMips", + "texture": { + "fileName": "Tex2DArray_BC7sRGB_8x8x4_nomips.dds", + "format": "BC7_Unorm_sRGB", + "binaryDims": [ + 0, + 0, + 4 + ], + "binaryFormat": "Any" + } + }, + { + "nodeName": "BinaryF32", + "texture": { + "fileName": "Tex2DArray_RGBAF32_8x8x4_mips.bin", + "binaryDims": [ + 8, + 8, + 4 + ], + "binaryFormat": "RGBA32_Float" + } + }, + { + "nodeName": "BinaryF32_NoMips", + "texture": { + "fileName": "Tex2DArray_RGBAF32_8x8x4_nomips.bin", + "binaryDims": [ + 8, + 8, + 4 + ], + "binaryFormat": "RGBA32_Float" + } + }, + { + "nodeName": "BinaryU8", + "texture": { + "fileName": "Tex2DArray_RGBAU8_8x8x4_mips.bin", + "binaryDims": [ + 8, + 8, + 4 + ] + } + }, + { + "nodeName": "BinaryU8_NoMips", + "texture": { + "fileName": "Tex2DArray_RGBAU8_8x8x4_nomips.bin", + "binaryDims": [ + 8, + 8, + 4 + ] + } + } + ] + } +} \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Load_Tex2DArray.py b/Techniques/UnitTests/Textures/Load_Tex2DArray.py new file mode 100644 index 00000000..b9e17ac5 --- /dev/null +++ b/Techniques/UnitTests/Textures/Load_Tex2DArray.py @@ -0,0 +1,79 @@ +import Host +import GigiArray +import numpy +from PIL import Image +import os + +resources = [ + [ "Load_Tex2DArrayCS.Output: Output (UAV - After)", True], +] + +# don't save gguser files during this script execution +Host.DisableGGUserSave(True) + +def DoTest(): + TestPassed = True + + # make sure the output directory exists + outDirName = "Techniques/UnitTests/_GoldImages/Textures/Load_Tex2DArray/" + os.makedirs(outDirName, exist_ok=True) + + # Load the technique + if not Host.LoadGG("Techniques/UnitTests/Textures/Load_Tex2DArray.gg"): + return False + + # Specify the resources we want to readback + for resource in resources: + Host.SetWantReadback(resource[0], True) + + # Do one execution to ensure everything is initialized + Host.RunTechnique() + + # Get the results and compare + for i, resource in enumerate(resources): + # Specify the resources we want to readback + Host.SetWantReadback(resource[0], True) + + # Render and wait on results + Host.RunTechnique() + Host.WaitOnGPU() + + # Do readback + lastReadback, success = Host.Readback(resource[0]) + if success: + lastReadbackNp = numpy.array(lastReadback) + if resource[1]: + lastReadbackNp = lastReadbackNp.reshape((lastReadbackNp.shape[1], lastReadbackNp.shape[2], lastReadbackNp.shape[3])) + outFileName = outDirName + str(i) + ".png" + if os.path.exists(outFileName): + img = numpy.asarray(Image.open(outFileName)) + if not numpy.array_equal(img, lastReadbackNp): + Host.Log("Error", outFileName + " did not match") + TestPassed = False + else: + Host.Log("Error", outFileName + " didn't exist, creating") + Image.fromarray(lastReadbackNp, "RGBA").save(outFileName) + TestPassed = False + else: + outFileName = outDirName + str(i) + ".npy" + if os.path.exists(outFileName): + img = numpy.load(outFileName) + if not numpy.array_equal(img, lastReadbackNp): + Host.Log("Error", outFileName + " did not match") + TestPassed = False + else: + Host.Log("Error", outFileName + " didn't exist, creating") + numpy.save(outFileName, lastReadbackNp) + TestPassed = False + else: + Host.Log("Error", "Could not readback " + resource[0]) + TestPassed = False + + return TestPassed + +# This is so the test can be ran by itself directly +if __name__ == "builtins": + if DoTest(): + Host.Log("Info", "test Passed") + else: + Host.Log("Error", "Test Failed") diff --git a/Techniques/UnitTests/Textures/Load_Tex2DArrayCS.hlsl b/Techniques/UnitTests/Textures/Load_Tex2DArrayCS.hlsl new file mode 100644 index 00000000..5de556ef --- /dev/null +++ b/Techniques/UnitTests/Textures/Load_Tex2DArrayCS.hlsl @@ -0,0 +1,98 @@ +// Unnamed technique, shader Load_Tex2DArrayCS +/*$(ShaderResources)*/ + +/*$(_compute:csmain)*/(uint3 DTid : SV_DispatchThreadID) +{ + // Figure out which texture to read, and where + uint2 px = DTid.xy; + + int imageIndex = px.y / 8; + px.y = px.y % 8; + + int arrayIndex = px.x / 16; + px.x = px.x % 16; + + int wh = 0; + int mipIndex = 0; + if (px.x < 8) + { + wh = 8; + mipIndex = 0; + } + else if (px.x < 12) + { + wh = 4; + mipIndex = 1; + px.x -= 8; + } + else if (px.x < 14) + { + wh = 2; + mipIndex = 2; + px.x -= 12; + } + else if (px.x < 15) + { + wh = 1; + mipIndex = 3; + px.x -= 14; + } + else + { + wh = 0; + mipIndex = 4; + px.x -= 15; + } + + // Out of bounds pixels are magenta + if(px.x >= wh || px.y >= wh) + { + Output[DTid.xy] = float4(1.0f, 0.0f, 1.0f, 1.0f); + return; + } + + // read, write, exit + float4 color = float4(0.0f, 0.0f, 0.0f, 1.0f); + switch (imageIndex) + { + case 0: color = BC6U.Load(uint4(px, arrayIndex, mipIndex)); break; + case 1: color = BC6U_NoMips.Load(uint4(px, arrayIndex, mipIndex)); break; + case 2: color = BC7sRGB.Load(uint4(px, arrayIndex, mipIndex)); break; + case 3: color = BC7sRGB_NoMips.Load(uint4(px, arrayIndex, mipIndex)); break; + case 4: color = BinaryF32.Load(uint4(px, arrayIndex, mipIndex)); break; + case 5: color = BinaryF32_NoMips.Load(uint4(px, arrayIndex, mipIndex)); break; + case 6: color = BinaryU8.Load(uint4(px, arrayIndex, mipIndex)); break; + case 7: color = BinaryU8_NoMips.Load(uint4(px, arrayIndex, mipIndex)); break; + case 8: color = /*$(Image2DArray:Tex2DArray_BC6U_8x8x4_mips.dds:BC6_UF16:float4:false:false)*/.Load(uint4(px, arrayIndex, mipIndex)); break; + case 9: color = /*$(Image2DArray:Tex2DArray_BC6U_8x8x4_nomips.dds:BC6_UF16:float4:false:false)*/.Load(uint4(px, arrayIndex, mipIndex)); break; + case 10: color = /*$(Image2DArray:Tex2DArray_BC7sRGB_8x8x4_mips.dds:BC7_Unorm_sRGB:float4:true:false)*/.Load(uint4(px, arrayIndex, mipIndex)); break; + case 11: color = /*$(Image2DArray:Tex2DArray_BC7sRGB_8x8x4_nomips.dds:BC7_Unorm_sRGB:float4:true:false)*/.Load(uint4(px, arrayIndex, mipIndex)); break; + } + Output[DTid.xy] = color; + + /* + A single array index has 4 mips: + 8x8 + 4x4 + 2x2 + 1x1 + we can fit that in 16x8. + + there are 4 indices per image, so we can put them horizontally to make it be 64x8. + + There are 8 imported images and 4 non imported images, so we can put them vertically to make it be 64*96. + */ +} + +/* +Shader Resources: + Texture BC6U (as SRV) + Texture BC6U_NoMips (as SRV) + Texture BC7sRGB (as SRV) + Texture BC7sRGB_NoMips (as SRV) + Texture BinaryF32 (as SRV) + Texture BinaryF32_NoMips (as SRV) + Texture BinaryU8 (as SRV) + Texture BinaryU8_NoMips (as SRV) + Texture Output (as UAV) +*/ diff --git a/Techniques/UnitTests/Textures/Load_Tex3D.gg b/Techniques/UnitTests/Textures/Load_Tex3D.gg new file mode 100644 index 00000000..738ebce0 --- /dev/null +++ b/Techniques/UnitTests/Textures/Load_Tex3D.gg @@ -0,0 +1,272 @@ +{ + "$schema": "gigischema.json", + "version": "0.99b", + "shaders": [ + { + "name": "Load_Tex3DCS", + "fileName": "Load_Tex3DCS.hlsl", + "entryPoint": "csmain", + "NumThreads": [ + 4, + 4, + 4 + ], + "resources": [ + { + "name": "BC6U", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "BC6U_NoMips", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "BC7sRGB", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "BC7sRGB_NoMips", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "BinaryF32", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "BinaryF32_NoMips", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "BinaryU8", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "BinaryU8_NoMips", + "type": "Texture", + "access": "SRV", + "texture": { + "dimension": "Texture3D" + } + }, + { + "name": "Output", + "type": "Texture", + "access": "UAV" + } + ] + } + ], + "nodes": [ + { + "resourceTexture": { + "name": "BC6U", + "editorPos": [ + -69.0, + -190.0 + ], + "visibility": "Imported", + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "BC7sRGB", + "editorPos": [ + -69.0, + -78.0 + ], + "visibility": "Imported", + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "BinaryF32", + "editorPos": [ + -53.0, + 18.0 + ], + "visibility": "Imported", + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "BinaryU8", + "editorPos": [ + -53.0, + 114.0 + ], + "visibility": "Imported", + "dimension": "Texture3D" + } + }, + { + "actionComputeShader": { + "name": "Load_Tex3DCS", + "editorPos": [ + 208.0, + -94.0 + ], + "linkProperties": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "connections": [ + { + "srcPin": "BC6U_NoMips", + "dstNode": "BC6U_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "BC7sRGB_NoMips", + "dstNode": "BC7sRGB_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "BinaryF32_NoMips", + "dstNode": "BinaryF32_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "BinaryU8_NoMips", + "dstNode": "BinaryU8_NoMips", + "dstPin": "resource" + }, + { + "srcPin": "Output", + "dstNode": "Output", + "dstPin": "resource" + }, + { + "srcPin": "BC6U", + "dstNode": "BC6U", + "dstPin": "resource" + }, + { + "srcPin": "BC7sRGB", + "dstNode": "BC7sRGB", + "dstPin": "resource" + }, + { + "srcPin": "BinaryF32", + "dstNode": "BinaryF32", + "dstPin": "resource" + }, + { + "srcPin": "BinaryU8", + "dstNode": "BinaryU8", + "dstPin": "resource" + } + ], + "shader": { + "name": "Load_Tex3DCS" + }, + "dispatchSize": { + "node": { + "name": "Output" + } + } + } + }, + { + "resourceTexture": { + "name": "Output", + "editorPos": [ + -53.0, + 210.0 + ], + "format": { + "format": "RGBA8_Unorm_sRGB" + }, + "size": { + "multiply": [ + 43, + 96, + 1 + ] + } + } + }, + { + "resourceTexture": { + "name": "BinaryU8_NoMips", + "editorPos": [ + -100.0, + 162.0 + ], + "visibility": "Imported", + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "BinaryF32_NoMips", + "editorPos": [ + -104.0, + 66.0 + ], + "visibility": "Imported", + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "BC7sRGB_NoMips", + "editorPos": [ + -85.0, + -30.0 + ], + "visibility": "Imported", + "dimension": "Texture3D" + } + }, + { + "resourceTexture": { + "name": "BC6U_NoMips", + "editorPos": [ + -69.0, + -142.0 + ], + "visibility": "Imported", + "dimension": "Texture3D" + } + } + ] +} \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Load_Tex3D.gguser b/Techniques/UnitTests/Textures/Load_Tex3D.gguser new file mode 100644 index 00000000..18f766f5 --- /dev/null +++ b/Techniques/UnitTests/Textures/Load_Tex3D.gguser @@ -0,0 +1,93 @@ +{ + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 4, + "resourceViewResourceIndex": 13, + "importedResources": [ + { + "nodeName": "BC6U", + "texture": { + "fileName": "Tex3D_BC6U_8x8x4_mips.dds", + "fileIsSRGB": false, + "format": "BC6_UF16", + "binaryFormat": "Any" + } + }, + { + "nodeName": "BC6U_NoMips", + "texture": { + "fileName": "Tex3D_BC6U_8x8x4_nomips.dds", + "format": "BC6_UF16", + "binaryFormat": "Any" + } + }, + { + "nodeName": "BC7sRGB", + "texture": { + "fileName": "Tex3D_BC7sRGB_8x8x4_mips.dds", + "format": "BC7_Unorm_sRGB", + "binaryFormat": "Any" + } + }, + { + "nodeName": "BC7sRGB_NoMips", + "texture": { + "fileName": "Tex3D_BC7sRGB_8x8x4_nomips.dds", + "format": "BC7_Unorm_sRGB", + "binaryDims": [ + 0, + 0, + 4 + ], + "binaryFormat": "Any" + } + }, + { + "nodeName": "BinaryF32", + "texture": { + "fileName": "Tex3D_RGBAF32_8x8x4_mips.bin", + "binaryDims": [ + 8, + 8, + 4 + ], + "binaryFormat": "RGBA32_Float" + } + }, + { + "nodeName": "BinaryF32_NoMips", + "texture": { + "fileName": "Tex3D_RGBAF32_8x8x4_nomips.bin", + "binaryDims": [ + 8, + 8, + 4 + ], + "binaryFormat": "RGBA32_Float" + } + }, + { + "nodeName": "BinaryU8", + "texture": { + "fileName": "Tex3D_RGBAU8_8x8x4_mips.bin", + "binaryDims": [ + 8, + 8, + 4 + ] + } + }, + { + "nodeName": "BinaryU8_NoMips", + "texture": { + "fileName": "Tex3D_RGBAU8_8x8x4_nomips.bin", + "binaryDims": [ + 8, + 8, + 4 + ] + } + } + ] + } +} \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Load_Tex3D.py b/Techniques/UnitTests/Textures/Load_Tex3D.py new file mode 100644 index 00000000..442af359 --- /dev/null +++ b/Techniques/UnitTests/Textures/Load_Tex3D.py @@ -0,0 +1,79 @@ +import Host +import GigiArray +import numpy +from PIL import Image +import os + +resources = [ + [ "Load_Tex3DCS.Output: Output (UAV - After)", True], +] + +# don't save gguser files during this script execution +Host.DisableGGUserSave(True) + +def DoTest(): + TestPassed = True + + # make sure the output directory exists + outDirName = "Techniques/UnitTests/_GoldImages/Textures/Load_Tex3D/" + os.makedirs(outDirName, exist_ok=True) + + # Load the technique + if not Host.LoadGG("Techniques/UnitTests/Textures/Load_Tex3D.gg"): + return False + + # Specify the resources we want to readback + for resource in resources: + Host.SetWantReadback(resource[0], True) + + # Do one execution to ensure everything is initialized + Host.RunTechnique() + + # Get the results and compare + for i, resource in enumerate(resources): + # Specify the resources we want to readback + Host.SetWantReadback(resource[0], True) + + # Render and wait on results + Host.RunTechnique() + Host.WaitOnGPU() + + # Do readback + lastReadback, success = Host.Readback(resource[0]) + if success: + lastReadbackNp = numpy.array(lastReadback) + if resource[1]: + lastReadbackNp = lastReadbackNp.reshape((lastReadbackNp.shape[1], lastReadbackNp.shape[2], lastReadbackNp.shape[3])) + outFileName = outDirName + str(i) + ".png" + if os.path.exists(outFileName): + img = numpy.asarray(Image.open(outFileName)) + if not numpy.array_equal(img, lastReadbackNp): + Host.Log("Error", outFileName + " did not match") + TestPassed = False + else: + Host.Log("Error", outFileName + " didn't exist, creating") + Image.fromarray(lastReadbackNp, "RGBA").save(outFileName) + TestPassed = False + else: + outFileName = outDirName + str(i) + ".npy" + if os.path.exists(outFileName): + img = numpy.load(outFileName) + if not numpy.array_equal(img, lastReadbackNp): + Host.Log("Error", outFileName + " did not match") + TestPassed = False + else: + Host.Log("Error", outFileName + " didn't exist, creating") + numpy.save(outFileName, lastReadbackNp) + TestPassed = False + else: + Host.Log("Error", "Could not readback " + resource[0]) + TestPassed = False + + return TestPassed + +# This is so the test can be ran by itself directly +if __name__ == "builtins": + if DoTest(): + Host.Log("Info", "test Passed") + else: + Host.Log("Error", "Test Failed") diff --git a/Techniques/UnitTests/Textures/Load_Tex3DCS.hlsl b/Techniques/UnitTests/Textures/Load_Tex3DCS.hlsl new file mode 100644 index 00000000..01062da7 --- /dev/null +++ b/Techniques/UnitTests/Textures/Load_Tex3DCS.hlsl @@ -0,0 +1,103 @@ +// Unnamed technique, shader Load_Tex3DCS +/*$(ShaderResources)*/ + +/*$(_compute:csmain)*/(uint3 DTid : SV_DispatchThreadID) +{ + // Figure out which texture to read, and where + uint2 px = DTid.xy; + + int imageIndex = px.y / 8; + px.y = px.y % 8; + + int slicewh = 0; + int sliceCount = 0; + int mipIndex = 0; + if (px.x < 32) + { + px.x -= 0; + slicewh = 8; + sliceCount = 4; + mipIndex = 0; + } + else if (px.x < 40) + { + px.x -= 32; + slicewh = 4; + sliceCount = 2; + mipIndex = 1; + } + else if (px.x < 42) + { + px.x -= 40; + slicewh = 2; + sliceCount = 1; + mipIndex = 2; + } + else if (px.x < 43) + { + px.x -= 42; + slicewh = 1; + sliceCount = 1; + mipIndex = 3; + } + + int sliceIndex = px.x / slicewh; + px.x = px.x % slicewh; + + // Out of bounds pixels are magenta + if(px.x >= slicewh || px.y >= slicewh) + { + Output[DTid.xy] = float4(1.0f, 0.0f, 1.0f, 1.0f); + return; + } + + // read, write, exit + float4 color = float4(0.0f, 0.0f, 0.0f, 1.0f); + switch (imageIndex) + { + case 0: color = BC6U.Load(uint4(px, sliceIndex, mipIndex)); break; + case 1: color = BC6U_NoMips.Load(uint4(px, sliceIndex, mipIndex)); break; + case 2: color = BC7sRGB.Load(uint4(px, sliceIndex, mipIndex)); break; + case 3: color = BC7sRGB_NoMips.Load(uint4(px, sliceIndex, mipIndex)); break; + case 4: color = BinaryF32.Load(uint4(px, sliceIndex, mipIndex)); break; + case 5: color = BinaryF32_NoMips.Load(uint4(px, sliceIndex, mipIndex)); break; + case 6: color = BinaryU8.Load(uint4(px, sliceIndex, mipIndex)); break; + case 7: color = BinaryU8_NoMips.Load(uint4(px, sliceIndex, mipIndex)); break; + case 8: color = /*$(Image3D:Tex3D_BC6U_8x8x4_mips.dds:BC6_UF16:float4:false:false)*/.Load(uint4(px, sliceIndex, mipIndex)); break; + case 9: color = /*$(Image3D:Tex3D_BC6U_8x8x4_nomips.dds:BC6_UF16:float4:false:false)*/.Load(uint4(px, sliceIndex, mipIndex)); break; + case 10: color = /*$(Image3D:Tex3D_BC7sRGB_8x8x4_mips.dds:BC7_Unorm_sRGB:float4:true:false)*/.Load(uint4(px, sliceIndex, mipIndex)); break; + case 11: color = /*$(Image3D:Tex3D_BC7sRGB_8x8x4_nomips.dds:BC7_Unorm_sRGB:float4:true:false)*/.Load(uint4(px, sliceIndex, mipIndex)); break; + } + Output[DTid.xy] = color; + + /* + A single image has 4 mips: + 8x8x4 + 4x4x2 + 2x2x1 + 1x1x1 + + We can lay out the slices horizontally to have these 4: + 32x8 + 8x4 + 2x1 + 1x1 + + That can fit in a 43x8 + + There are 8 imported images and 4 non imported images, so we can put them vertically to make it be 43*96. + */ +} + +/* +Shader Resources: + Texture BC6U (as SRV) + Texture BC6U_NoMips (as SRV) + Texture BC7sRGB (as SRV) + Texture BC7sRGB_NoMips (as SRV) + Texture BinaryF32 (as SRV) + Texture BinaryF32_NoMips (as SRV) + Texture BinaryU8 (as SRV) + Texture BinaryU8_NoMips (as SRV) + Texture Output (as UAV) +*/ diff --git a/Techniques/UnitTests/Textures/Mips_CS_2D.py b/Techniques/UnitTests/Textures/Mips_CS_2D.py index 4cd988d9..204011c9 100644 --- a/Techniques/UnitTests/Textures/Mips_CS_2D.py +++ b/Techniques/UnitTests/Textures/Mips_CS_2D.py @@ -24,7 +24,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -32,14 +32,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_CS_2DArray.py b/Techniques/UnitTests/Textures/Mips_CS_2DArray.py index 2f1cdd11..065e7de1 100644 --- a/Techniques/UnitTests/Textures/Mips_CS_2DArray.py +++ b/Techniques/UnitTests/Textures/Mips_CS_2DArray.py @@ -25,7 +25,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -33,14 +33,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_CS_3D.py b/Techniques/UnitTests/Textures/Mips_CS_3D.py index 2d995827..f1790550 100644 --- a/Techniques/UnitTests/Textures/Mips_CS_3D.py +++ b/Techniques/UnitTests/Textures/Mips_CS_3D.py @@ -28,14 +28,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_CS_Cube.py b/Techniques/UnitTests/Textures/Mips_CS_Cube.py index 8301214e..fde4f8ae 100644 --- a/Techniques/UnitTests/Textures/Mips_CS_Cube.py +++ b/Techniques/UnitTests/Textures/Mips_CS_Cube.py @@ -25,7 +25,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -33,14 +33,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_Imported_2D.py b/Techniques/UnitTests/Textures/Mips_Imported_2D.py index fc7dd32c..70ce9f0a 100644 --- a/Techniques/UnitTests/Textures/Mips_Imported_2D.py +++ b/Techniques/UnitTests/Textures/Mips_Imported_2D.py @@ -28,7 +28,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -36,14 +36,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_Imported_2DArray.py b/Techniques/UnitTests/Textures/Mips_Imported_2DArray.py index b84ebd17..068d7a8f 100644 --- a/Techniques/UnitTests/Textures/Mips_Imported_2DArray.py +++ b/Techniques/UnitTests/Textures/Mips_Imported_2DArray.py @@ -28,7 +28,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -36,14 +36,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_Imported_3D.py b/Techniques/UnitTests/Textures/Mips_Imported_3D.py index 3e94d0eb..2aeea3f7 100644 --- a/Techniques/UnitTests/Textures/Mips_Imported_3D.py +++ b/Techniques/UnitTests/Textures/Mips_Imported_3D.py @@ -26,7 +26,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -34,14 +34,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_Imported_Cube.py b/Techniques/UnitTests/Textures/Mips_Imported_Cube.py index 5282d4b6..ea2a1b0d 100644 --- a/Techniques/UnitTests/Textures/Mips_Imported_Cube.py +++ b/Techniques/UnitTests/Textures/Mips_Imported_Cube.py @@ -29,7 +29,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -37,14 +37,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_RGS_2D.py b/Techniques/UnitTests/Textures/Mips_RGS_2D.py index 52d9813d..343d6e21 100644 --- a/Techniques/UnitTests/Textures/Mips_RGS_2D.py +++ b/Techniques/UnitTests/Textures/Mips_RGS_2D.py @@ -26,7 +26,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -34,14 +34,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_ShaderToken_2D.py b/Techniques/UnitTests/Textures/Mips_ShaderToken_2D.py index bbf74e65..ced94284 100644 --- a/Techniques/UnitTests/Textures/Mips_ShaderToken_2D.py +++ b/Techniques/UnitTests/Textures/Mips_ShaderToken_2D.py @@ -24,7 +24,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -32,14 +32,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_ShaderToken_2DArray.py b/Techniques/UnitTests/Textures/Mips_ShaderToken_2DArray.py index 10d19d38..b8c4c65d 100644 --- a/Techniques/UnitTests/Textures/Mips_ShaderToken_2DArray.py +++ b/Techniques/UnitTests/Textures/Mips_ShaderToken_2DArray.py @@ -26,7 +26,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -34,14 +34,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_ShaderToken_3D.gguser b/Techniques/UnitTests/Textures/Mips_ShaderToken_3D.gguser index d0eb7325..efe5bbc2 100644 --- a/Techniques/UnitTests/Textures/Mips_ShaderToken_3D.gguser +++ b/Techniques/UnitTests/Textures/Mips_ShaderToken_3D.gguser @@ -1,4 +1,7 @@ { - "resourceViewNodeIndex": 1, - "resourceViewResourceIndex": 2 + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 2, + "resourceViewResourceIndex": 1 + } } \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Mips_ShaderToken_3D.py b/Techniques/UnitTests/Textures/Mips_ShaderToken_3D.py index d098abd8..4ae28760 100644 --- a/Techniques/UnitTests/Textures/Mips_ShaderToken_3D.py +++ b/Techniques/UnitTests/Textures/Mips_ShaderToken_3D.py @@ -26,7 +26,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -34,14 +34,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_ShaderToken_Cube.py b/Techniques/UnitTests/Textures/Mips_ShaderToken_Cube.py index 4f5993d6..a2d271be 100644 --- a/Techniques/UnitTests/Textures/Mips_ShaderToken_Cube.py +++ b/Techniques/UnitTests/Textures/Mips_ShaderToken_Cube.py @@ -25,7 +25,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -33,14 +33,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Mips_VSPS_2D.py b/Techniques/UnitTests/Textures/Mips_VSPS_2D.py index 0b4cb8f3..e0ddb264 100644 --- a/Techniques/UnitTests/Textures/Mips_VSPS_2D.py +++ b/Techniques/UnitTests/Textures/Mips_VSPS_2D.py @@ -25,7 +25,7 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Do one execution to ensure everything is initialized Host.RunTechnique() @@ -33,14 +33,14 @@ def DoTest(): # Get the results and compare for i, resource in enumerate(resources): # Specify the resources we want to readback - Host.SetWantReadback(resource[0], True, resource[2], resource[3]) + Host.SetWantReadback(resource[0], True) # Render and wait on results Host.RunTechnique() Host.WaitOnGPU() # Do readback - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], resource[2], resource[3]) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Tex2DArray_BC6U_8x8x4_mips.dds b/Techniques/UnitTests/Textures/Tex2DArray_BC6U_8x8x4_mips.dds new file mode 100644 index 00000000..14d1b4b4 Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex2DArray_BC6U_8x8x4_mips.dds differ diff --git a/Techniques/UnitTests/Textures/Tex2DArray_BC6U_8x8x4_nomips.dds b/Techniques/UnitTests/Textures/Tex2DArray_BC6U_8x8x4_nomips.dds new file mode 100644 index 00000000..92f94ba0 Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex2DArray_BC6U_8x8x4_nomips.dds differ diff --git a/Techniques/UnitTests/Textures/Tex2DArray_BC7sRGB_8x8x4_mips.dds b/Techniques/UnitTests/Textures/Tex2DArray_BC7sRGB_8x8x4_mips.dds new file mode 100644 index 00000000..9b15221d Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex2DArray_BC7sRGB_8x8x4_mips.dds differ diff --git a/Techniques/UnitTests/Textures/Tex2DArray_BC7sRGB_8x8x4_nomips.dds b/Techniques/UnitTests/Textures/Tex2DArray_BC7sRGB_8x8x4_nomips.dds new file mode 100644 index 00000000..ea316db3 Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex2DArray_BC7sRGB_8x8x4_nomips.dds differ diff --git a/Techniques/UnitTests/Textures/Tex2DArray_RGBAF32_8x8x4_mips.bin b/Techniques/UnitTests/Textures/Tex2DArray_RGBAF32_8x8x4_mips.bin new file mode 100644 index 00000000..0f91de76 Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex2DArray_RGBAF32_8x8x4_mips.bin differ diff --git a/Techniques/UnitTests/Textures/Tex2DArray_RGBAF32_8x8x4_nomips.bin b/Techniques/UnitTests/Textures/Tex2DArray_RGBAF32_8x8x4_nomips.bin new file mode 100644 index 00000000..a72443ee Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex2DArray_RGBAF32_8x8x4_nomips.bin differ diff --git a/Techniques/UnitTests/Textures/Tex2DArray_RGBAU8_8x8x4_mips.bin b/Techniques/UnitTests/Textures/Tex2DArray_RGBAU8_8x8x4_mips.bin new file mode 100644 index 00000000..4e696e96 --- /dev/null +++ b/Techniques/UnitTests/Textures/Tex2DArray_RGBAU8_8x8x4_mips.bin @@ -0,0 +1 @@ +GGcxGcGcGcGcGcGcGcGxcxxcxcxcxcxcxcxcGcxcccƘcؘcccGcxcccƱcرcccGcxcccccccGcxcccccccGcxcccccccGcxcccccccccccccccccccϥcccccccccccccccccGGxGGGGGGGGxxxxxxxxxGxƘؘ阥GxƱر鱥GƥxƥƥƥƥƥƥƥGإxإإإإإإإGxGxccccccϥcϥϥϥϥcብGGxGGGGGGGGxxxxxxxxxGxƘؘGxƱرGxGxGxGxccccccϥccGGxGGGGGGGGxxxxxxxxxGxƘؘGxƱرGxGxGxGxccccccϥcc \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Tex2DArray_RGBAU8_8x8x4_nomips.bin b/Techniques/UnitTests/Textures/Tex2DArray_RGBAU8_8x8x4_nomips.bin new file mode 100644 index 00000000..bc818675 --- /dev/null +++ b/Techniques/UnitTests/Textures/Tex2DArray_RGBAU8_8x8x4_nomips.bin @@ -0,0 +1 @@ +GGcxGcGcGcGcGcGcGcGxcxxcxcxcxcxcxcxcGcxcccƘcؘcccGcxcccƱcرcccGcxcccccccGcxcccccccGcxcccccccGcxcccccccGGxGGGGGGGGxxxxxxxxxGxƘؘ阥GxƱر鱥GƥxƥƥƥƥƥƥƥGإxإإإإإإإGxGxGGxGGGGGGGGxxxxxxxxxGxƘؘGxƱرGxGxGxGxGGxGGGGGGGGxxxxxxxxxGxƘؘGxƱرGxGxGxGx \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Tex3D_BC6U_8x8x4_mips.dds b/Techniques/UnitTests/Textures/Tex3D_BC6U_8x8x4_mips.dds new file mode 100644 index 00000000..d10433c2 Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex3D_BC6U_8x8x4_mips.dds differ diff --git a/Techniques/UnitTests/Textures/Tex3D_BC6U_8x8x4_nomips.dds b/Techniques/UnitTests/Textures/Tex3D_BC6U_8x8x4_nomips.dds new file mode 100644 index 00000000..3affad90 Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex3D_BC6U_8x8x4_nomips.dds differ diff --git a/Techniques/UnitTests/Textures/Tex3D_BC7sRGB_8x8x4_mips.dds b/Techniques/UnitTests/Textures/Tex3D_BC7sRGB_8x8x4_mips.dds new file mode 100644 index 00000000..34da3e3d Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex3D_BC7sRGB_8x8x4_mips.dds differ diff --git a/Techniques/UnitTests/Textures/Tex3D_BC7sRGB_8x8x4_nomips.dds b/Techniques/UnitTests/Textures/Tex3D_BC7sRGB_8x8x4_nomips.dds new file mode 100644 index 00000000..d35337e7 Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex3D_BC7sRGB_8x8x4_nomips.dds differ diff --git a/Techniques/UnitTests/Textures/Tex3D_RGBAF32_8x8x4_mips.bin b/Techniques/UnitTests/Textures/Tex3D_RGBAF32_8x8x4_mips.bin new file mode 100644 index 00000000..a88194f9 Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex3D_RGBAF32_8x8x4_mips.bin differ diff --git a/Techniques/UnitTests/Textures/Tex3D_RGBAF32_8x8x4_nomips.bin b/Techniques/UnitTests/Textures/Tex3D_RGBAF32_8x8x4_nomips.bin new file mode 100644 index 00000000..a72443ee Binary files /dev/null and b/Techniques/UnitTests/Textures/Tex3D_RGBAF32_8x8x4_nomips.bin differ diff --git a/Techniques/UnitTests/Textures/Tex3D_RGBAU8_8x8x4_mips.bin b/Techniques/UnitTests/Textures/Tex3D_RGBAU8_8x8x4_mips.bin new file mode 100644 index 00000000..a080fe40 --- /dev/null +++ b/Techniques/UnitTests/Textures/Tex3D_RGBAU8_8x8x4_mips.bin @@ -0,0 +1 @@ +GGcxGcGcGcGcGcGcGcGxcxxcxcxcxcxcxcxcGcxcccƘcؘcccGcxcccƱcرcccGcxcccccccGcxcccccccGcxcccccccGcxcccccccGGxGGGGGGGGxxxxxxxxxGxƘؘ阥GxƱر鱥GƥxƥƥƥƥƥƥƥGإxإإإإإإإGxGxGGxGGGGGGGGxxxxxxxxxGxƘؘGxƱرGxGxGxGxGGxGGGGGGGGxxxxxxxxxGxƘؘGxƱرGxGxGxGxccccccϥcωωωωcccccccϥccቼ \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Tex3D_RGBAU8_8x8x4_nomips.bin b/Techniques/UnitTests/Textures/Tex3D_RGBAU8_8x8x4_nomips.bin new file mode 100644 index 00000000..bc818675 --- /dev/null +++ b/Techniques/UnitTests/Textures/Tex3D_RGBAU8_8x8x4_nomips.bin @@ -0,0 +1 @@ +GGcxGcGcGcGcGcGcGcGxcxxcxcxcxcxcxcxcGcxcccƘcؘcccGcxcccƱcرcccGcxcccccccGcxcccccccGcxcccccccGcxcccccccGGxGGGGGGGGxxxxxxxxxGxƘؘ阥GxƱر鱥GƥxƥƥƥƥƥƥƥGإxإإإإإإإGxGxGGxGGGGGGGGxxxxxxxxxGxƘؘGxƱرGxGxGxGxGGxGGGGGGGGxxxxxxxxxGxƘؘGxƱرGxGxGxGx \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Texture2DArrayRW_CS.gguser b/Techniques/UnitTests/Textures/Texture2DArrayRW_CS.gguser index f7e35e75..214e0266 100644 --- a/Techniques/UnitTests/Textures/Texture2DArrayRW_CS.gguser +++ b/Techniques/UnitTests/Textures/Texture2DArrayRW_CS.gguser @@ -1,28 +1,31 @@ { - "resourceViewNodeIndex": 1, - "resourceViewResourceIndex": 5, - "importedResources": [ - { - "nodeName": "ImportedColor", - "texture": { - "size": [ - 64, - 64, - 3 - ], - "color": [ - 0.501960813999176, - 0.501960813999176, - 0.501960813999176, - 1.0 - ] + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 1, + "resourceViewResourceIndex": 5, + "importedResources": [ + { + "nodeName": "ImportedColor", + "texture": { + "size": [ + 64, + 64, + 3 + ], + "color": [ + 0.501960813999176, + 0.501960813999176, + 0.501960813999176, + 1.0 + ] + } + }, + { + "nodeName": "ImportedTexture", + "texture": { + "fileName": "Image%i.png" + } } - }, - { - "nodeName": "ImportedTexture", - "texture": { - "fileName": "Image%i.png" - } - } - ] + ] + } } \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/Texture2DArrayRW_CS.py b/Techniques/UnitTests/Textures/Texture2DArrayRW_CS.py index b88dba76..2ad014c0 100644 --- a/Techniques/UnitTests/Textures/Texture2DArrayRW_CS.py +++ b/Techniques/UnitTests/Textures/Texture2DArrayRW_CS.py @@ -33,13 +33,13 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, subResourceIndex) + Host.SetWantReadback(resource[0], True) # Get the results and compare Host.RunTechnique() Host.WaitOnGPU() for i, resource in enumerate(resources): - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], subResourceIndex) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Texture2DArrayRW_PS.py b/Techniques/UnitTests/Textures/Texture2DArrayRW_PS.py index c6353f2b..ad26aba1 100644 --- a/Techniques/UnitTests/Textures/Texture2DArrayRW_PS.py +++ b/Techniques/UnitTests/Textures/Texture2DArrayRW_PS.py @@ -33,13 +33,13 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, subResourceIndex) + Host.SetWantReadback(resource[0], True) # Get the results and compare Host.RunTechnique() Host.WaitOnGPU() for i, resource in enumerate(resources): - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], subResourceIndex) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Texture2DArrayRW_RGS.py b/Techniques/UnitTests/Textures/Texture2DArrayRW_RGS.py index 881544b7..c85fd992 100644 --- a/Techniques/UnitTests/Textures/Texture2DArrayRW_RGS.py +++ b/Techniques/UnitTests/Textures/Texture2DArrayRW_RGS.py @@ -33,13 +33,13 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, subResourceIndex) + Host.SetWantReadback(resource[0], True) # Get the results and compare Host.RunTechnique() Host.WaitOnGPU() for i, resource in enumerate(resources): - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], subResourceIndex) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/Texture3DRW_CS.py b/Techniques/UnitTests/Textures/Texture3DRW_CS.py index 21cf6850..56c37d57 100644 --- a/Techniques/UnitTests/Textures/Texture3DRW_CS.py +++ b/Techniques/UnitTests/Textures/Texture3DRW_CS.py @@ -5,8 +5,8 @@ import os resources = [ - [ "RW.importedTexture: ImportedTexture (UAV - After)", False ], - [ "RW.nodeTexture: NodeTexture (UAV - After)", False ], + [ "RW.importedTexture: ImportedTexture (UAV - After)", True ], + [ "RW.nodeTexture: NodeTexture (UAV - After)", True ], ] # don't save gguser files during this script execution @@ -38,17 +38,18 @@ def DoTest(): if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: - lastReadbackNp = lastReadbackNp.reshape((lastReadbackNp.shape[1], lastReadbackNp.shape[2], lastReadbackNp.shape[3])) - outFileName = outDirName + str(i) + ".png" - if os.path.exists(outFileName): - img = numpy.asarray(Image.open(outFileName)) - if not numpy.array_equal(img, lastReadbackNp): - Host.Log("Error", outFileName + " did not match") + for j in range(lastReadbackNp.shape[0]): + lastReadbackNpSlice = lastReadbackNp[j,:,:,:].reshape((lastReadbackNp.shape[1], lastReadbackNp.shape[2], lastReadbackNp.shape[3])) + outFileName = outDirName + str(i) + "_" + str(j) + ".png" + if os.path.exists(outFileName): + img = numpy.asarray(Image.open(outFileName)) + if not numpy.array_equal(img, lastReadbackNpSlice): + Host.Log("Error", outFileName + " did not match") + TestPassed = False + else: + Host.Log("Error", outFileName + " didn't exist, creating") + Image.fromarray(lastReadbackNpSlice, "RGBA").save(outFileName) TestPassed = False - else: - Host.Log("Error", outFileName + " didn't exist, creating") - Image.fromarray(lastReadbackNp, "RGBA").save(outFileName) - TestPassed = False else: outFileName = outDirName + str(i) + ".npy" if os.path.exists(outFileName): diff --git a/Techniques/UnitTests/Textures/Texture3DRW_PS.py b/Techniques/UnitTests/Textures/Texture3DRW_PS.py index 77bf6852..c31b88b4 100644 --- a/Techniques/UnitTests/Textures/Texture3DRW_PS.py +++ b/Techniques/UnitTests/Textures/Texture3DRW_PS.py @@ -5,8 +5,8 @@ import os resources = [ - [ "Node_1.importedTexture: ImportedTexture (UAV - After)", False ], - [ "Node_1.nodeTexture: NodeTexture (UAV - After)", False ], + [ "Node_1.importedTexture: ImportedTexture (UAV - After)", True ], + [ "Node_1.nodeTexture: NodeTexture (UAV - After)", True ], ] # don't save gguser files during this script execution @@ -38,17 +38,18 @@ def DoTest(): if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: - lastReadbackNp = lastReadbackNp.reshape((lastReadbackNp.shape[1], lastReadbackNp.shape[2], lastReadbackNp.shape[3])) - outFileName = outDirName + str(i) + ".png" - if os.path.exists(outFileName): - img = numpy.asarray(Image.open(outFileName)) - if not numpy.array_equal(img, lastReadbackNp): - Host.Log("Error", outFileName + " did not match") + for j in range(lastReadbackNp.shape[0]): + lastReadbackNpSlice = lastReadbackNp[j,:,:,:].reshape((lastReadbackNp.shape[1], lastReadbackNp.shape[2], lastReadbackNp.shape[3])) + outFileName = outDirName + str(i) + "_" + str(j) + ".png" + if os.path.exists(outFileName): + img = numpy.asarray(Image.open(outFileName)) + if not numpy.array_equal(img, lastReadbackNpSlice): + Host.Log("Error", outFileName + " did not match") + TestPassed = False + else: + Host.Log("Error", outFileName + " didn't exist, creating") + Image.fromarray(lastReadbackNpSlice, "RGBA").save(outFileName) TestPassed = False - else: - Host.Log("Error", outFileName + " didn't exist, creating") - Image.fromarray(lastReadbackNp, "RGBA").save(outFileName) - TestPassed = False else: outFileName = outDirName + str(i) + ".npy" if os.path.exists(outFileName): diff --git a/Techniques/UnitTests/Textures/Texture3DRW_RGS.py b/Techniques/UnitTests/Textures/Texture3DRW_RGS.py index 0c107b1b..8da19068 100644 --- a/Techniques/UnitTests/Textures/Texture3DRW_RGS.py +++ b/Techniques/UnitTests/Textures/Texture3DRW_RGS.py @@ -5,8 +5,8 @@ import os resources = [ - [ "RW.importedTexture: ImportedTexture (UAV - After)", False ], - [ "RW.nodeTexture: NodeTexture (UAV - After)", False ], + [ "RW.importedTexture: ImportedTexture (UAV - After)", True ], + [ "RW.nodeTexture: NodeTexture (UAV - After)", True ], ] # don't save gguser files during this script execution @@ -38,17 +38,18 @@ def DoTest(): if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: - lastReadbackNp = lastReadbackNp.reshape((lastReadbackNp.shape[1], lastReadbackNp.shape[2], lastReadbackNp.shape[3])) - outFileName = outDirName + str(i) + ".png" - if os.path.exists(outFileName): - img = numpy.asarray(Image.open(outFileName)) - if not numpy.array_equal(img, lastReadbackNp): - Host.Log("Error", outFileName + " did not match") + for j in range(lastReadbackNp.shape[0]): + lastReadbackNpSlice = lastReadbackNp[j,:,:,:].reshape((lastReadbackNp.shape[1], lastReadbackNp.shape[2], lastReadbackNp.shape[3])) + outFileName = outDirName + str(i) + "_" + str(j) + ".png" + if os.path.exists(outFileName): + img = numpy.asarray(Image.open(outFileName)) + if not numpy.array_equal(img, lastReadbackNpSlice): + Host.Log("Error", outFileName + " did not match") + TestPassed = False + else: + Host.Log("Error", outFileName + " didn't exist, creating") + Image.fromarray(lastReadbackNpSlice, "RGBA").save(outFileName) TestPassed = False - else: - Host.Log("Error", outFileName + " didn't exist, creating") - Image.fromarray(lastReadbackNp, "RGBA").save(outFileName) - TestPassed = False else: outFileName = outDirName + str(i) + ".npy" if os.path.exists(outFileName): diff --git a/Techniques/UnitTests/Textures/TextureCubeRW_CS.py b/Techniques/UnitTests/Textures/TextureCubeRW_CS.py index 75a835e8..ef15a5c8 100644 --- a/Techniques/UnitTests/Textures/TextureCubeRW_CS.py +++ b/Techniques/UnitTests/Textures/TextureCubeRW_CS.py @@ -33,13 +33,13 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, subResourceIndex) + Host.SetWantReadback(resource[0], True) # Get the results and compare Host.RunTechnique() Host.WaitOnGPU() for i, resource in enumerate(resources): - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], subResourceIndex) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/TextureCubeRW_PS.py b/Techniques/UnitTests/Textures/TextureCubeRW_PS.py index 50a8610f..be3693d1 100644 --- a/Techniques/UnitTests/Textures/TextureCubeRW_PS.py +++ b/Techniques/UnitTests/Textures/TextureCubeRW_PS.py @@ -33,13 +33,13 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, subResourceIndex) + Host.SetWantReadback(resource[0], True) # Get the results and compare Host.RunTechnique() Host.WaitOnGPU() for i, resource in enumerate(resources): - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], subResourceIndex) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/TextureCubeRW_RGS.py b/Techniques/UnitTests/Textures/TextureCubeRW_RGS.py index 30e85bc3..5f7a55e0 100644 --- a/Techniques/UnitTests/Textures/TextureCubeRW_RGS.py +++ b/Techniques/UnitTests/Textures/TextureCubeRW_RGS.py @@ -33,13 +33,13 @@ def DoTest(): # Specify the resources we want to readback for resource in resources: - Host.SetWantReadback(resource[0], True, subResourceIndex) + Host.SetWantReadback(resource[0], True) # Get the results and compare Host.RunTechnique() Host.WaitOnGPU() for i, resource in enumerate(resources): - lastReadback, success = Host.Readback(resource[0]) + lastReadback, success = Host.Readback(resource[0], subResourceIndex) if success: lastReadbackNp = numpy.array(lastReadback) if resource[1]: diff --git a/Techniques/UnitTests/Textures/TextureFormats.gguser b/Techniques/UnitTests/Textures/TextureFormats.gguser index cfbec823..a0853c53 100644 --- a/Techniques/UnitTests/Textures/TextureFormats.gguser +++ b/Techniques/UnitTests/Textures/TextureFormats.gguser @@ -1,17 +1,20 @@ { - "resourceViewNodeIndex": 1, - "resourceViewResourceIndex": 1, - "importedResources": [ - { - "nodeName": "Texture", - "texture": { - "size": [ - 16, - 16, - 1 - ], - "format": "Any" + "version": "2.0", + "snapshot": { + "resourceViewNodeIndex": 1, + "resourceViewResourceIndex": 1, + "importedResources": [ + { + "nodeName": "Texture", + "texture": { + "size": [ + 16, + 16, + 1 + ], + "format": "D16_Unorm" + } } - } - ] + ] + } } \ No newline at end of file diff --git a/Techniques/UnitTests/Textures/TextureFormats.py b/Techniques/UnitTests/Textures/TextureFormats.py index 207d96a6..ecb73289 100644 --- a/Techniques/UnitTests/Textures/TextureFormats.py +++ b/Techniques/UnitTests/Textures/TextureFormats.py @@ -6,6 +6,16 @@ resource = "ComputeShader.tex: Texture (UAV - After)" +DontTestTheseFormats = [ + Host.TextureFormat_Any, + Host.TextureFormat_D32_Float_S8, + Host.TextureFormat_D24_Unorm_S8, + Host.TextureFormat_BC7_Unorm, + Host.TextureFormat_BC7_Unorm_sRGB, + Host.TextureFormat_BC6_UF16, + Host.TextureFormat_BC6_SF16, +] + # don't save gguser files during this script execution Host.DisableGGUserSave(True) @@ -26,7 +36,7 @@ def DoTest(): # For each texture format type for textureFormatIndex in range(Host.TextureFormat_FIRST, Host.TextureFormat_COUNT): - if (textureFormatIndex in [Host.TextureFormat_Any, Host.TextureFormat_D32_Float_S8, Host.TextureFormat_D24_Unorm_S8, Host.TextureFormat_BC7_Unorm, Host.TextureFormat_BC7_Unorm_sRGB]): + if (textureFormatIndex in DontTestTheseFormats): continue # Set the format type diff --git a/Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/0.bin b/Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/0.bin new file mode 100644 index 00000000..3ce0de2c Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/0.bin differ diff --git a/Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/0.npy b/Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/0.npy new file mode 100644 index 00000000..58462d35 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/0.npy differ diff --git a/Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/1.png b/Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/1.png new file mode 100644 index 00000000..182d0c2f Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/RayTrace/simpleRTDynamic/1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Load_Tex2DArray/0.png b/Techniques/UnitTests/_GoldImages/Textures/Load_Tex2DArray/0.png new file mode 100644 index 00000000..2e14e02b Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Load_Tex2DArray/0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Load_Tex3D/0.png b/Techniques/UnitTests/_GoldImages/Textures/Load_Tex3D/0.png new file mode 100644 index 00000000..d137691e Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Load_Tex3D/0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/0_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/0_0.png index 15e096d6..88fd0e5a 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/0_0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/0_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/0_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/0_1.png index 24146f9b..1a9931d6 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/0_1.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/0_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/1_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/1_0.png index b22fdb0d..587e2f44 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/1_0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/1_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/2_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/2_0.png index d4e325ee..f2db109e 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/2_0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/2_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/2_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/2_1.png index c7469b97..552b9403 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/2_1.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_CS/2_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_PS/0_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_PS/0_1.png index 4d45d9f6..2b07cab0 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_PS/0_1.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_PS/0_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_PS/2_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_PS/2_0.png index d63c1d50..4e54dad2 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_PS/2_0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_PS/2_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/0_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/0_0.png index d483a8eb..44313e1e 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/0_0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/0_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/1_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/1_0.png index 36a416f6..1cb99aee 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/1_0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/1_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/2_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/2_0.png index bee2aa95..63367d51 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/2_0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/2_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/2_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/2_1.png index c7469b97..552b9403 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/2_1.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DArrayRW_RGS/2_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_CS/0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_CS/0.png index a55eca28..b05239b0 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_CS/0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_CS/0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_CS/1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_CS/1.png index b3d16375..66d86d01 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_CS/1.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_CS/1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_PS/0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_PS/0.png index 9d10f21d..3a2a93d9 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_PS/0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_PS/0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_PS/1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_PS/1.png index ec27dc66..3dbc8e54 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_PS/1.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_PS/1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_RGS/0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_RGS/0.png index a55eca28..b05239b0 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_RGS/0.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_RGS/0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_RGS/1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_RGS/1.png index b3d16375..66d86d01 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_RGS/1.png and b/Techniques/UnitTests/_GoldImages/Textures/Texture2DRW_RGS/1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0.bin b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0.bin deleted file mode 100644 index 0179cc47..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0.bin and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0.npy b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0.npy deleted file mode 100644 index 35e4f4fa..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0.npy and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0_0.png new file mode 100644 index 00000000..88fd0e5a Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0_1.png new file mode 100644 index 00000000..587e2f44 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0_2.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0_2.png new file mode 100644 index 00000000..f2db109e Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/0_2.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1.bin b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1.bin deleted file mode 100644 index 84326994..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1.bin and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1.npy b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1.npy deleted file mode 100644 index c2b8bfa8..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1.npy and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1_0.png new file mode 100644 index 00000000..1a9931d6 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1_1.png new file mode 100644 index 00000000..577f7916 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1_2.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1_2.png new file mode 100644 index 00000000..552b9403 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_CS/1_2.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0.bin b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0.bin deleted file mode 100644 index 52bd8d57..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0.bin and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0.npy b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0.npy deleted file mode 100644 index 0435a44f..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0.npy and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0_0.png new file mode 100644 index 00000000..dfea09f2 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0_1.png new file mode 100644 index 00000000..5f28701b Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0_2.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0_2.png new file mode 100644 index 00000000..4e54dad2 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/0_2.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1.bin b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1.bin deleted file mode 100644 index 4f30548a..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1.bin and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1.npy b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1.npy deleted file mode 100644 index aff28c42..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1.npy and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1_0.png new file mode 100644 index 00000000..2b07cab0 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1_1.png new file mode 100644 index 00000000..0858c19f Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1_2.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1_2.png new file mode 100644 index 00000000..0858c19f Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_PS/1_2.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0.bin b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0.bin deleted file mode 100644 index 0179cc47..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0.bin and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0.npy b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0.npy deleted file mode 100644 index 35e4f4fa..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0.npy and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0_0.png new file mode 100644 index 00000000..88fd0e5a Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0_1.png new file mode 100644 index 00000000..587e2f44 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0_2.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0_2.png new file mode 100644 index 00000000..f2db109e Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/0_2.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1.bin b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1.bin deleted file mode 100644 index 84326994..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1.bin and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1.npy b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1.npy deleted file mode 100644 index c2b8bfa8..00000000 Binary files a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1.npy and /dev/null differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1_0.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1_0.png new file mode 100644 index 00000000..1a9931d6 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1_1.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1_1.png new file mode 100644 index 00000000..577f7916 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1_2.png b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1_2.png new file mode 100644 index 00000000..552b9403 Binary files /dev/null and b/Techniques/UnitTests/_GoldImages/Textures/Texture3DRW_RGS/1_2.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_CS/0_1.png b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_CS/0_1.png index 062c0747..abec7292 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_CS/0_1.png and b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_CS/0_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_CS/2_0.png b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_CS/2_0.png index 6fe791d1..703f2ff0 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_CS/2_0.png and b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_CS/2_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_PS/0_1.png b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_PS/0_1.png index 062c0747..abec7292 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_PS/0_1.png and b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_PS/0_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_PS/2_0.png b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_PS/2_0.png index 6fe791d1..703f2ff0 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_PS/2_0.png and b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_PS/2_0.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_RGS/0_1.png b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_RGS/0_1.png index 062c0747..abec7292 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_RGS/0_1.png and b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_RGS/0_1.png differ diff --git a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_RGS/2_0.png b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_RGS/2_0.png index 6fe791d1..703f2ff0 100644 Binary files a/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_RGS/2_0.png and b/Techniques/UnitTests/_GoldImages/Textures/TextureCubeRW_RGS/2_0.png differ diff --git a/Techniques/cabinsmall.dds b/Techniques/cabinsmall.dds new file mode 100644 index 00000000..40694734 Binary files /dev/null and b/Techniques/cabinsmall.dds differ diff --git a/Techniques/skybox.gguser b/Techniques/skybox.gguser index 6fec6b0d..cdaa45d7 100644 --- a/Techniques/skybox.gguser +++ b/Techniques/skybox.gguser @@ -1,43 +1,46 @@ { + "version": "2.0", "systemVars": { "ProjMtx_textureName": "Color_Buffer", "InvViewProjMtx_varName": "clipToView", "CameraPos_varName": "cameraPos" }, - "resourceViewNodeIndex": 0, - "resourceViewResourceIndex": 5, - "importedResources": [ - { - "nodeName": "Color_Buffer", - "texture": { - "size": [ - 1024, - 768, - 1 - ] + "snapshot": { + "resourceViewNodeIndex": 0, + "resourceViewResourceIndex": 5, + "importedResources": [ + { + "nodeName": "Color_Buffer", + "texture": { + "size": [ + 1024, + 768, + 1 + ] + } } - } - ], - "savedVariables": [ - { - "name": "enabled", - "value": "true" - }, - { - "name": "exposureFStops", - "value": "0.000000" - }, - { - "name": "InvViewProjMtx", - "value": "0.330787,-0.025250,0.000003,0.598780,0.000000,0.412084,-0.000000,0.101282,-0.249305,-0.033503,-99.990005,0.784484,-0.000000,-0.000000,9.999000,0.001000" - }, - { - "name": "CameraPos", - "value": "0.000000,0.000000,-10.000000" - }, - { - "name": "skybox", - "value": "0" - } - ] + ], + "savedVariables": [ + { + "name": "enabled", + "value": "true" + }, + { + "name": "exposureFStops", + "value": "0.000000" + }, + { + "name": "InvViewProjMtx", + "value": "0.330787,-0.025250,0.000003,0.598780,0.000000,0.412084,-0.000000,0.101282,-0.249305,-0.033503,-99.990005,0.784484,-0.000000,-0.000000,9.999000,0.001000" + }, + { + "name": "CameraPos", + "value": "0.000000,0.000000,-10.000000" + }, + { + "name": "skybox", + "value": "0" + } + ] + } } \ No newline at end of file diff --git a/UserDocumentation/GigiViewerDX12_Documentation.docx b/UserDocumentation/GigiViewerDX12_Documentation.docx index 698d569e..846a5a4f 100644 Binary files a/UserDocumentation/GigiViewerDX12_Documentation.docx and b/UserDocumentation/GigiViewerDX12_Documentation.docx differ diff --git a/UserDocumentation/GigiViewerDX12_Documentation.pdf b/UserDocumentation/GigiViewerDX12_Documentation.pdf index 05cbafd0..41ec365e 100644 Binary files a/UserDocumentation/GigiViewerDX12_Documentation.pdf and b/UserDocumentation/GigiViewerDX12_Documentation.pdf differ diff --git a/UserDocumentation/PythonTypes.txt b/UserDocumentation/PythonTypes.txt index bd80e5bb..88d59b94 100644 --- a/UserDocumentation/PythonTypes.txt +++ b/UserDocumentation/PythonTypes.txt @@ -69,9 +69,6 @@ PreviewMsgCS_Log_LevelFromString() PreviewMsgCS_Log_LevelToString() - GGUserFile_ImportedTexture_BinaryTypeFromString() - GGUserFile_ImportedTexture_BinaryTypeToString() - GGUserFile_TLASBuildFlagsFromString() GGUserFile_TLASBuildFlagsToString() @@ -375,8 +372,10 @@ Host.TextureFormat_D24_Unorm_S8 = 28 Host.TextureFormat_BC7_Unorm = 29 Host.TextureFormat_BC7_Unorm_sRGB = 30 - Host.TextureFormat_LAST = 30 - Host.TextureFormat_COUNT = 31 + Host.TextureFormat_BC6_UF16 = 31 + Host.TextureFormat_BC6_SF16 = 32 + Host.TextureFormat_LAST = 32 + Host.TextureFormat_COUNT = 33 PreviewMsgCS_Log_Level: Host.PreviewMsgCS_Log_Level_FIRST = 0 @@ -386,14 +385,6 @@ Host.PreviewMsgCS_Log_Level_LAST = 2 Host.PreviewMsgCS_Log_Level_COUNT = 3 - GGUserFile_ImportedTexture_BinaryType: - Host.GGUserFile_ImportedTexture_BinaryType_FIRST = 0 - Host.GGUserFile_ImportedTexture_BinaryType_Float = 0 - Host.GGUserFile_ImportedTexture_BinaryType_Byte = 1 - Host.GGUserFile_ImportedTexture_BinaryType_Count = 2 - Host.GGUserFile_ImportedTexture_BinaryType_LAST = 2 - Host.GGUserFile_ImportedTexture_BinaryType_COUNT = 3 - GGUserFile_TLASBuildFlags: Host.GGUserFile_TLASBuildFlags_FIRST = 0 Host.GGUserFile_TLASBuildFlags_None = 0 diff --git a/Version.h b/Version.h index 51ee5826..6fe94ffe 100644 --- a/Version.h +++ b/Version.h @@ -4,4 +4,4 @@ /////////////////////////////////////////////////////////////////////////////// #define GIGI_VERSION() "0.99b" -#define GIGI_VERSION_WITH_BUILD_NUMBER() "0.99.4" +#define GIGI_VERSION_WITH_BUILD_NUMBER() "0.99.5" diff --git a/_GeneratedCode/UnitTests/DX12/.gitignore b/_GeneratedCode/UnitTests/DX12/.gitignore index b5a0cee7..9017ec54 100644 --- a/_GeneratedCode/UnitTests/DX12/.gitignore +++ b/_GeneratedCode/UnitTests/DX12/.gitignore @@ -8,3 +8,4 @@ Debug/ MinSizeRel/ Release/ RelWithDebInfo/ +.vs/ diff --git a/_GeneratedCode/UnitTests/DX12/ALL_BUILD.vcxproj b/_GeneratedCode/UnitTests/DX12/ALL_BUILD.vcxproj index 5c4dd3a1..b6775571 100644 --- a/_GeneratedCode/UnitTests/DX12/ALL_BUILD.vcxproj +++ b/_GeneratedCode/UnitTests/DX12/ALL_BUILD.vcxproj @@ -25,7 +25,7 @@ - {BC81F722-C461-34D3-A896-32CCF03ED6DB} + {2B32EBFB-7A2E-3F98-8C8A-84CE44714129} Win32Proj 10.0.22621.0 x64 @@ -111,8 +111,8 @@ - - {782F6C35-74A9-32AC-A4B6-7632D950429B} + + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E} UnitTests diff --git a/_GeneratedCode/UnitTests/DX12/CMakeLists.txt b/_GeneratedCode/UnitTests/DX12/CMakeLists.txt index 39361122..8bbf225f 100644 --- a/_GeneratedCode/UnitTests/DX12/CMakeLists.txt +++ b/_GeneratedCode/UnitTests/DX12/CMakeLists.txt @@ -29,9 +29,9 @@ target_include_directories(UnitTests PRIVATE ./imgui/) target_include_directories(UnitTests PRIVATE ./AgilitySDK/include/) target_include_directories(UnitTests PRIVATE ./DX12Utils/tinyexr/) target_include_directories(UnitTests PRIVATE ./DX12Utils/tinyexr/deps/miniz/) -target_include_directories(UnitTests PRIVATE ./WinPixEventRuntime.1.0.230302001/Include/) +target_include_directories(UnitTests PRIVATE ./WinPixEventRuntime.1.0.240308001/Include/) -target_link_directories(UnitTests PRIVATE ./WinPixEventRuntime.1.0.230302001/bin/x64/) +target_link_directories(UnitTests PRIVATE ./WinPixEventRuntime.1.0.240308001/bin/x64/) target_link_libraries(UnitTests d3d12.lib dxgi.lib d3dcompiler.lib WinPixEventRuntime.lib) diff --git a/_GeneratedCode/UnitTests/DX12/DX12Utils/Camera.cpp b/_GeneratedCode/UnitTests/DX12/DX12Utils/Camera.cpp new file mode 100644 index 00000000..01f8e453 --- /dev/null +++ b/_GeneratedCode/UnitTests/DX12/DX12Utils/Camera.cpp @@ -0,0 +1,151 @@ +#include "Camera.h" + +#include +#include + +#define NOMINMAX +#define WIN32_LEAN_AND_MEAN +#include + +static const float c_pi = 3.14159265359f; + +void Camera::Update(const uint8_t g_keyStates[256], const float mouseState[4], const float mouseStateLastFrame[4], float frameTimeSeconds, float pos[3], float altitudeAzimuth[2], bool& cameraChanged) +{ + // To account for frame time + float movementMultiplier = frameTimeSeconds * 60.0f; + + // If the mouse is dragging, rotate the camera + if (mouseState[2] && mouseStateLastFrame[2]) + { + float dx = mouseStateLastFrame[0] - mouseState[0]; + float dy = mouseStateLastFrame[1] - mouseState[1]; + + dx *= movementMultiplier; + dy *= movementMultiplier; + + if (!m_leftHanded) + { + dx *= -1.0; + dy *= -1.0; + } + + altitudeAzimuth[0] += dy * m_mouseSensitivity; + altitudeAzimuth[0] = std::max(std::min(altitudeAzimuth[0], c_pi * 0.95f), -c_pi * 0.95f); + + altitudeAzimuth[1] += dx * m_mouseSensitivity; + if (altitudeAzimuth[1] < 0.0f) + altitudeAzimuth[1] += 2.0f * c_pi; + altitudeAzimuth[1] = std::fmodf(altitudeAzimuth[1], 2.0f * c_pi); + + cameraChanged |= (dx != 0.0f || dy != 0.0f); + } + + // Handle WASD + { + + DirectX::XMMATRIX viewMatrix = GetViewMatrix(pos, altitudeAzimuth); + + float left[3] = { viewMatrix.r[0].m128_f32[0] , viewMatrix.r[1].m128_f32[0] , viewMatrix.r[2].m128_f32[0] }; + float up[3] = { viewMatrix.r[0].m128_f32[1], viewMatrix.r[1].m128_f32[1], viewMatrix.r[2].m128_f32[1] }; + float fwd[3] = { viewMatrix.r[0].m128_f32[2], viewMatrix.r[1].m128_f32[2], viewMatrix.r[2].m128_f32[2] }; + + float flySpeed = m_flySpeed * movementMultiplier; + if (g_keyStates[VK_SHIFT]) + flySpeed *= 10; + else if (g_keyStates[VK_CONTROL]) + flySpeed /= 10; + + if (!m_leftHanded) + { + fwd[0] *= -1.0f; + fwd[1] *= -1.0f; + fwd[2] *= -1.0f; + } + + if (g_keyStates['W'] || g_keyStates[VK_UP]) + { + pos[0] += fwd[0] * flySpeed; + pos[1] += fwd[1] * flySpeed; + pos[2] += fwd[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['S'] || g_keyStates[VK_DOWN]) + { + pos[0] -= fwd[0] * flySpeed; + pos[1] -= fwd[1] * flySpeed; + pos[2] -= fwd[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['A'] || g_keyStates[VK_LEFT]) + { + pos[0] -= left[0] * flySpeed; + pos[1] -= left[1] * flySpeed; + pos[2] -= left[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['D'] || g_keyStates[VK_RIGHT]) + { + pos[0] += left[0] * flySpeed; + pos[1] += left[1] * flySpeed; + pos[2] += left[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['E'] || g_keyStates[VK_PRIOR]) + { + pos[0] += up[0] * flySpeed; + pos[1] += up[1] * flySpeed; + pos[2] += up[2] * flySpeed; + cameraChanged = true; + } + + if (g_keyStates['Q'] || g_keyStates[VK_NEXT]) + { + pos[0] -= up[0] * flySpeed; + pos[1] -= up[1] * flySpeed; + pos[2] -= up[2] * flySpeed; + cameraChanged = true; + } + } +} + +DirectX::XMMATRIX Camera::GetViewMatrix(const float pos[3], const float altitudeAzimuth[2]) const +{ + float altitude = altitudeAzimuth[0]; + float azimuth = altitudeAzimuth[1]; + DirectX::XMMATRIX rot = DirectX::XMMatrixRotationY(azimuth) * DirectX::XMMatrixRotationX(altitude); + return DirectX::XMMatrixTranslation(-pos[0], -pos[1], -pos[2]) * rot; +} + +DirectX::XMMATRIX Camera::GetProjMatrix(float fovDegrees, const float resolution[2], float nearZ, float farZ, bool reverseZ, bool perspective) const +{ + float fov = fovDegrees * c_pi / 180.0f; + + nearZ = std::max(nearZ, 0.001f); + farZ = std::max(farZ, 0.001f); + fov = std::max(fov, 0.001f); + + if (nearZ == farZ) + farZ = nearZ + 0.01f; + + if (reverseZ) + std::swap(nearZ, farZ); + + if (perspective) + { + if (m_leftHanded) + return DirectX::XMMatrixPerspectiveFovLH(fov, resolution[0] / resolution[1], nearZ, farZ); + else + return DirectX::XMMatrixPerspectiveFovRH(fov, resolution[0] / resolution[1], nearZ, farZ); + } + else + { + if (m_leftHanded) + return DirectX::XMMatrixOrthographicLH(resolution[0], resolution[1], nearZ, farZ); + else + return DirectX::XMMatrixOrthographicRH(resolution[0], resolution[1], nearZ, farZ); + } +} \ No newline at end of file diff --git a/_GeneratedCode/UnitTests/DX12/DX12Utils/Camera.h b/_GeneratedCode/UnitTests/DX12/DX12Utils/Camera.h new file mode 100644 index 00000000..2180c6eb --- /dev/null +++ b/_GeneratedCode/UnitTests/DX12/DX12Utils/Camera.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include + +class Camera +{ +public: + // key states are indexed by capitol letters 'A' and VK_ constants like VK_LEFT + // Mouse state is (mouseX, mouseY, leftButton, rightButton) + void Update(const uint8_t g_keyStates[256], const float mouseState[4], const float mouseStateLastFrame[4], float frameTimeSeconds, float pos[3], float altitudeAzimuth[2], bool& cameraChanged); + + DirectX::XMMATRIX GetViewMatrix(const float pos[3], const float altitudeAzimuth[2]) const; + DirectX::XMMATRIX GetProjMatrix(float fovDegrees, const float resolution[2], float nearZ, float farZ, bool reverseZ, bool perspective) const; + + float m_flySpeed = 1.0f; + bool m_leftHanded = false; + float m_mouseSensitivity = 1.0f; +}; diff --git a/_GeneratedCode/UnitTests/DX12/DX12Utils/dxutils.h b/_GeneratedCode/UnitTests/DX12/DX12Utils/dxutils.h index 3959fab7..188a4b7c 100644 --- a/_GeneratedCode/UnitTests/DX12/DX12Utils/dxutils.h +++ b/_GeneratedCode/UnitTests/DX12/DX12Utils/dxutils.h @@ -372,6 +372,8 @@ namespace DX12Utils // Block compressed formats DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC7_UNORM, uint8_t, 4, false, false, false, 0, 1); DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC7_UNORM_SRGB, uint8_t, 4, true, false, false, 0, 1); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC6H_UF16, uint16_t, 3, false, false, false, 0, 1); + DXGI_FORMAT_INFO_CASE(DXGI_FORMAT_BC6H_SF16, uint16_t, 3, false, false, false, 0, 1); default: { diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests.sln b/_GeneratedCode/UnitTests/DX12/UnitTests.sln index 3eb40f0e..04b2f7ec 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests.sln +++ b/_GeneratedCode/UnitTests/DX12/UnitTests.sln @@ -1,15 +1,15 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CMakePredefinedTargets", "CMakePredefinedTargets", "{77D4E11D-5BF3-339D-A4C4-18DA322DD30C}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CMakePredefinedTargets", "CMakePredefinedTargets", "{CAD6C2ED-97A3-3989-AD22-623B2722BD01}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnitTests", "UnitTests.vcxproj", "{782F6C35-74A9-32AC-A4B6-7632D950429B}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnitTests", "UnitTests.vcxproj", "{A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{BC81F722-C461-34D3-A896-32CCF03ED6DB}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{2B32EBFB-7A2E-3F98-8C8A-84CE44714129}" ProjectSection(ProjectDependencies) = postProject - {782F6C35-74A9-32AC-A4B6-7632D950429B} = {782F6C35-74A9-32AC-A4B6-7632D950429B} + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E} = {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E} EndProjectSection EndProject Global @@ -20,24 +20,24 @@ Global RelWithDebInfo|x64 = RelWithDebInfo|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {782F6C35-74A9-32AC-A4B6-7632D950429B}.Debug|x64.ActiveCfg = Debug|x64 - {782F6C35-74A9-32AC-A4B6-7632D950429B}.Debug|x64.Build.0 = Debug|x64 - {782F6C35-74A9-32AC-A4B6-7632D950429B}.Release|x64.ActiveCfg = Release|x64 - {782F6C35-74A9-32AC-A4B6-7632D950429B}.Release|x64.Build.0 = Release|x64 - {782F6C35-74A9-32AC-A4B6-7632D950429B}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 - {782F6C35-74A9-32AC-A4B6-7632D950429B}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 - {782F6C35-74A9-32AC-A4B6-7632D950429B}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {782F6C35-74A9-32AC-A4B6-7632D950429B}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {BC81F722-C461-34D3-A896-32CCF03ED6DB}.Debug|x64.ActiveCfg = Debug|x64 - {BC81F722-C461-34D3-A896-32CCF03ED6DB}.Release|x64.ActiveCfg = Release|x64 - {BC81F722-C461-34D3-A896-32CCF03ED6DB}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 - {BC81F722-C461-34D3-A896-32CCF03ED6DB}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E}.Debug|x64.ActiveCfg = Debug|x64 + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E}.Debug|x64.Build.0 = Debug|x64 + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E}.Release|x64.ActiveCfg = Release|x64 + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E}.Release|x64.Build.0 = Release|x64 + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E}.MinSizeRel|x64.Build.0 = MinSizeRel|x64 + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {2B32EBFB-7A2E-3F98-8C8A-84CE44714129}.Debug|x64.ActiveCfg = Debug|x64 + {2B32EBFB-7A2E-3F98-8C8A-84CE44714129}.Release|x64.ActiveCfg = Release|x64 + {2B32EBFB-7A2E-3F98-8C8A-84CE44714129}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64 + {2B32EBFB-7A2E-3F98-8C8A-84CE44714129}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 EndGlobalSection GlobalSection(NestedProjects) = preSolution - {BC81F722-C461-34D3-A896-32CCF03ED6DB} = {77D4E11D-5BF3-339D-A4C4-18DA322DD30C} + {2B32EBFB-7A2E-3F98-8C8A-84CE44714129} = {CAD6C2ED-97A3-3989-AD22-623B2722BD01} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {73AA04CB-2BE6-3942-9799-7C3143F9DAA8} + SolutionGuid = {AB8077C7-84E3-3655-9C06-AFBAB8DB84ED} EndGlobalSection GlobalSection(ExtensibilityAddIns) = postSolution EndGlobalSection diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests.vcxproj b/_GeneratedCode/UnitTests/DX12/UnitTests.vcxproj index 8d368ced..c32eb024 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests.vcxproj +++ b/_GeneratedCode/UnitTests/DX12/UnitTests.vcxproj @@ -22,7 +22,7 @@ - {782F6C35-74A9-32AC-A4B6-7632D950429B} + {A77DA0B5-D7E9-3EBB-9150-C4CBC1CCA07E} Win32Proj 10.0.22621.0 x64 @@ -59,25 +59,25 @@ <_ProjectFileVersion>10.0.20506.1 - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\ + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\ UnitTests.dir\Debug\ UnitTests .exe true true - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\ + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\ UnitTests.dir\Release\ UnitTests .exe false true - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\ + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\ UnitTests.dir\MinSizeRel\ UnitTests .exe false true - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\ + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\ UnitTests.dir\RelWithDebInfo\ UnitTests .exe @@ -86,7 +86,7 @@ - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) $(IntDir) EnableFastChecks ProgramDatabase @@ -105,10 +105,10 @@ %(PreprocessorDefinitions);WIN32;_DEBUG;_WINDOWS;CMAKE_INTDIR=\"Debug\" - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) $(ProjectDir)/$(IntDir) %(Filename).h %(Filename).tlb @@ -117,12 +117,12 @@ d3d12.lib;dxgi.lib;d3dcompiler.lib;WinPixEventRuntime.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.230302001/bin/x64;D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.230302001/bin/x64/$(Configuration);%(AdditionalLibraryDirectories) + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.240308001/bin/x64;D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.240308001/bin/x64/$(Configuration);%(AdditionalLibraryDirectories) %(AdditionalOptions) /machine:x64 true %(IgnoreSpecificDefaultLibraries) - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.lib - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.pdb + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.lib + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.pdb Console @@ -131,7 +131,7 @@ - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) $(IntDir) Default Sync @@ -151,10 +151,10 @@ %(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;CMAKE_INTDIR=\"Release\" - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) $(ProjectDir)/$(IntDir) %(Filename).h %(Filename).tlb @@ -163,12 +163,12 @@ d3d12.lib;dxgi.lib;d3dcompiler.lib;WinPixEventRuntime.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.230302001/bin/x64;D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.230302001/bin/x64/$(Configuration);%(AdditionalLibraryDirectories) + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.240308001/bin/x64;D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.240308001/bin/x64/$(Configuration);%(AdditionalLibraryDirectories) %(AdditionalOptions) /machine:x64 false %(IgnoreSpecificDefaultLibraries) - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.lib - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.pdb + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.lib + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.pdb Console @@ -177,7 +177,7 @@ - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) $(IntDir) Default Sync @@ -197,10 +197,10 @@ %(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;CMAKE_INTDIR=\"MinSizeRel\" - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) $(ProjectDir)/$(IntDir) %(Filename).h %(Filename).tlb @@ -209,12 +209,12 @@ d3d12.lib;dxgi.lib;d3dcompiler.lib;WinPixEventRuntime.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.230302001/bin/x64;D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.230302001/bin/x64/$(Configuration);%(AdditionalLibraryDirectories) + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.240308001/bin/x64;D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.240308001/bin/x64/$(Configuration);%(AdditionalLibraryDirectories) %(AdditionalOptions) /machine:x64 false %(IgnoreSpecificDefaultLibraries) - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.lib - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.pdb + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.lib + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.pdb Console @@ -223,7 +223,7 @@ - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) $(IntDir) Default ProgramDatabase @@ -242,10 +242,10 @@ %(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;CMAKE_INTDIR=\"RelWithDebInfo\" - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) - D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\gitlab\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.230302001\Include;%(AdditionalIncludeDirectories) + D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\imgui;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\AgilitySDK\include;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\DX12Utils\tinyexr\deps\miniz;D:\dev\github\gigi\_GeneratedCode\UnitTests\DX12\.\WinPixEventRuntime.1.0.240308001\Include;%(AdditionalIncludeDirectories) $(ProjectDir)/$(IntDir) %(Filename).h %(Filename).tlb @@ -254,12 +254,12 @@ d3d12.lib;dxgi.lib;d3dcompiler.lib;WinPixEventRuntime.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.230302001/bin/x64;D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.230302001/bin/x64/$(Configuration);%(AdditionalLibraryDirectories) + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.240308001/bin/x64;D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/./WinPixEventRuntime.1.0.240308001/bin/x64/$(Configuration);%(AdditionalLibraryDirectories) %(AdditionalOptions) /machine:x64 true %(IgnoreSpecificDefaultLibraries) - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.lib - D:/dev/gitlab/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.pdb + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.lib + D:/dev/github/gigi/_GeneratedCode/UnitTests/DX12/UnitTests.pdb Console @@ -267,750 +267,753 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(IntDir)/UnitTests/Barrier/BarrierTest/private/technique.cpp.obj - - - - - - - - - + + + + + + + + + $(IntDir)/UnitTests/Buffers/StructuredBuffer/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Buffers/buffertest/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Compute/IndirectDispatch/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Compute/ReadbackSequence/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Compute/SlangAutoDiff/private/technique.cpp.obj - - - - - - - - - + + + + + + + + + $(IntDir)/UnitTests/Compute/boxblur/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Compute/simple/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/CopyResource/CopyResourceTest/private/technique.cpp.obj - - - - - - + + + + + + $(IntDir)/UnitTests/CopyResource/CopyResourceTest_FB/private/technique.cpp.obj - - - - - - + + + + + + $(IntDir)/UnitTests/MeshShaders/Mesh/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/MeshShaders/MeshAmplification/private/technique.cpp.obj - - - - - - - - - + + + + + + + + + $(IntDir)/UnitTests/MeshShaders/MeshAmplificationLines/private/technique.cpp.obj - - - - - - - - - + + + + + + + + + $(IntDir)/UnitTests/Raster/NoVertex_NoIndex_NoInstance/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Raster/Stencil/private/technique.cpp.obj - - - - - - - - - - + + + + + + + + + + $(IntDir)/UnitTests/Raster/VRS/private/technique.cpp.obj - - - - - - - - - - - - - + + + + + + + + + + + + + $(IntDir)/UnitTests/Raster/YesVertexStruct_NoIndex_NoInstance/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceStruct/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceType/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Raster/YesVertexStruct_YesIndex_NoInstance/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Raster/YesVertexType_NoIndex_NoInstance/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Raster/simpleRaster/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Raster/simpleRaster2/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Raster/simpleRaster_Lines/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Raster/simpleRaster_Points/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/RayTrace/AnyHit/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/RayTrace/AnyHitSimple/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/RayTrace/IntersectionShader/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/RayTrace/TwoRayGens/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/RayTrace/TwoRayGensSubgraph/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/RayTrace/simpleRT/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/RayTrace/simpleRT_inline/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/SubGraph/SubGraphLoops/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/SubGraph/SubGraphTest/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/SubGraph/SubInSub/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/Mips_CS_2D/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Mips_CS_2DArray/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Mips_CS_3D/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Mips_CS_Cube/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Mips_DrawCall/private/technique.cpp.obj - - - - - - - - - - + + + + + + + + + + $(IntDir)/UnitTests/Textures/Mips_RGS_2D/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/Mips_ShaderToken_2D/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/Mips_ShaderToken_2DArray/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/Mips_ShaderToken_3D/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/Mips_ShaderToken_Cube/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/Mips_VSPS_2D/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Texture2DArrayRW_CS/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/Texture2DArrayRW_PS/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Texture2DArrayRW_RGS/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Texture2DRW_CS/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/Texture2DRW_PS/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Texture2DRW_RGS/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Texture3DRW_CS/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/Texture3DRW_PS/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/Texture3DRW_RGS/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/TextureCubeRW_CS/private/technique.cpp.obj - - - - - - - + + + + + + + $(IntDir)/UnitTests/Textures/TextureCubeRW_PS/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/TextureCubeRW_RGS/private/technique.cpp.obj - - - - - - - - + + + + + + + + $(IntDir)/UnitTests/Textures/TextureFormats/private/technique.cpp.obj - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(IntDir)/private/technique.cpp.obj - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests.vcxproj.filters b/_GeneratedCode/UnitTests/DX12/UnitTests.vcxproj.filters index 09471df1..a39fd5c8 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests.vcxproj.filters +++ b/_GeneratedCode/UnitTests/DX12/UnitTests.vcxproj.filters @@ -1,2681 +1,2690 @@  - + DX12Utils - + DX12Utils - + DX12Utils - + DX12Utils - + DX12Utils - + + DX12Utils + + DX12Utils\tinyexr\deps\miniz - + UnitTests\Barrier\BarrierTest\private - + UnitTests\Buffers\StructuredBuffer\private - + UnitTests\Buffers\buffertest\private - + UnitTests\Compute\IndirectDispatch\private - + UnitTests\Compute\ReadbackSequence\private - + UnitTests\Compute\SlangAutoDiff\private - + UnitTests\Compute\boxblur\private - + UnitTests\Compute\simple\private - + UnitTests\CopyResource\CopyResourceTest\private - + UnitTests\CopyResource\CopyResourceTest_FB\private - + UnitTests\MeshShaders\Mesh\private - + UnitTests\MeshShaders\MeshAmplification\private - + UnitTests\MeshShaders\MeshAmplificationLines\private - + UnitTests\Raster\NoVertex_NoIndex_NoInstance\private - + UnitTests\Raster\Stencil\private - + UnitTests\Raster\VRS\private - + UnitTests\Raster\YesVertexStruct_NoIndex_NoInstance\private - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceStruct\private - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceType\private - + UnitTests\Raster\YesVertexStruct_YesIndex_NoInstance\private - + UnitTests\Raster\YesVertexType_NoIndex_NoInstance\private - + UnitTests\Raster\simpleRaster\private - + UnitTests\Raster\simpleRaster2\private - + UnitTests\Raster\simpleRaster_Lines\private - + UnitTests\Raster\simpleRaster_Points\private - + UnitTests\RayTrace\AnyHit\private - + UnitTests\RayTrace\AnyHitSimple\private - + UnitTests\RayTrace\IntersectionShader\private - + UnitTests\RayTrace\TwoRayGens\private - + UnitTests\RayTrace\TwoRayGensSubgraph\private - + UnitTests\RayTrace\simpleRT\private - + UnitTests\RayTrace\simpleRT_inline\private - + UnitTests\SubGraph\SubGraphLoops\private - + UnitTests\SubGraph\SubGraphTest\private - + UnitTests\SubGraph\SubInSub\private - + UnitTests\Textures\Mips_CS_2D\private - + UnitTests\Textures\Mips_CS_2DArray\private - + UnitTests\Textures\Mips_CS_3D\private - + UnitTests\Textures\Mips_CS_Cube\private - + UnitTests\Textures\Mips_DrawCall\private - + UnitTests\Textures\Mips_RGS_2D\private - + UnitTests\Textures\Mips_ShaderToken_2D\private - + UnitTests\Textures\Mips_ShaderToken_2DArray\private - + UnitTests\Textures\Mips_ShaderToken_3D\private - + UnitTests\Textures\Mips_ShaderToken_Cube\private - + UnitTests\Textures\Mips_VSPS_2D\private - + UnitTests\Textures\Texture2DArrayRW_CS\private - + UnitTests\Textures\Texture2DArrayRW_PS\private - + UnitTests\Textures\Texture2DArrayRW_RGS\private - + UnitTests\Textures\Texture2DRW_CS\private - + UnitTests\Textures\Texture2DRW_PS\private - + UnitTests\Textures\Texture2DRW_RGS\private - + UnitTests\Textures\Texture3DRW_CS\private - + UnitTests\Textures\Texture3DRW_PS\private - + UnitTests\Textures\Texture3DRW_RGS\private - + UnitTests\Textures\TextureCubeRW_CS\private - + UnitTests\Textures\TextureCubeRW_PS\private - + UnitTests\Textures\TextureCubeRW_RGS\private - + UnitTests\Textures\TextureFormats\private - + imgui - + imgui - + imgui - + imgui - + imgui - + imgui - + imgui - - + + private - + AgilitySDK\include - + AgilitySDK\include - + AgilitySDK\include - + AgilitySDK\include - + AgilitySDK\include - + AgilitySDK\include - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include\d3dx12 - + AgilitySDK\include - + DX12Utils - + DX12Utils - + DX12Utils - + DX12Utils - + DX12Utils - + DX12Utils - + DX12Utils - + DX12Utils - + DX12Utils - + DX12Utils - + + DX12Utils + + DX12Utils\stb - + DX12Utils\stb - + DX12Utils\tinyexr\deps\miniz - + DX12Utils\tinyexr - - + + UnitTests\Barrier\BarrierTest\private - + UnitTests\Barrier\BarrierTest\public - + UnitTests\Barrier\BarrierTest\public - + UnitTests\Barrier\BarrierTest\public - + UnitTests\Barrier\BarrierTest\public - + UnitTests\Barrier\BarrierTest\shaders - + UnitTests\Barrier\BarrierTest\shaders - + UnitTests\Barrier\BarrierTest\shaders - + UnitTests\Buffers\StructuredBuffer\private - + UnitTests\Buffers\StructuredBuffer\public - + UnitTests\Buffers\StructuredBuffer\public - + UnitTests\Buffers\StructuredBuffer\public - + UnitTests\Buffers\StructuredBuffer\public - + UnitTests\Buffers\StructuredBuffer\shaders - + UnitTests\Buffers\buffertest\private - + UnitTests\Buffers\buffertest\public - + UnitTests\Buffers\buffertest\public - + UnitTests\Buffers\buffertest\public - + UnitTests\Buffers\buffertest\public - + UnitTests\Buffers\buffertest\shaders - + UnitTests\Compute\IndirectDispatch\private - + UnitTests\Compute\IndirectDispatch\public - + UnitTests\Compute\IndirectDispatch\public - + UnitTests\Compute\IndirectDispatch\public - + UnitTests\Compute\IndirectDispatch\public - + UnitTests\Compute\IndirectDispatch\shaders - + UnitTests\Compute\IndirectDispatch\shaders - + UnitTests\Compute\ReadbackSequence\private - + UnitTests\Compute\ReadbackSequence\public - + UnitTests\Compute\ReadbackSequence\public - + UnitTests\Compute\ReadbackSequence\public - + UnitTests\Compute\ReadbackSequence\public - + UnitTests\Compute\ReadbackSequence\shaders - + UnitTests\Compute\SlangAutoDiff\private - + UnitTests\Compute\SlangAutoDiff\public - + UnitTests\Compute\SlangAutoDiff\public - + UnitTests\Compute\SlangAutoDiff\public - + UnitTests\Compute\SlangAutoDiff\public - + UnitTests\Compute\SlangAutoDiff\shaders - + UnitTests\Compute\SlangAutoDiff\shaders - + UnitTests\Compute\SlangAutoDiff\shaders - + UnitTests\Compute\boxblur\private - + UnitTests\Compute\boxblur\public - + UnitTests\Compute\boxblur\public - + UnitTests\Compute\boxblur\public - + UnitTests\Compute\boxblur\public - + UnitTests\Compute\boxblur\shaders - + UnitTests\Compute\simple\private - + UnitTests\Compute\simple\public - + UnitTests\Compute\simple\public - + UnitTests\Compute\simple\public - + UnitTests\Compute\simple\public - + UnitTests\Compute\simple\shaders - + UnitTests\CopyResource\CopyResourceTest\private - + UnitTests\CopyResource\CopyResourceTest\public - + UnitTests\CopyResource\CopyResourceTest\public - + UnitTests\CopyResource\CopyResourceTest\public - + UnitTests\CopyResource\CopyResourceTest\public - + UnitTests\CopyResource\CopyResourceTest_FB\private - + UnitTests\CopyResource\CopyResourceTest_FB\public - + UnitTests\CopyResource\CopyResourceTest_FB\public - + UnitTests\CopyResource\CopyResourceTest_FB\public - + UnitTests\CopyResource\CopyResourceTest_FB\public - + UnitTests\MeshShaders\Mesh\private - + UnitTests\MeshShaders\Mesh\public - + UnitTests\MeshShaders\Mesh\public - + UnitTests\MeshShaders\Mesh\public - + UnitTests\MeshShaders\Mesh\public - + UnitTests\MeshShaders\Mesh\shaders - + UnitTests\MeshShaders\Mesh\shaders - + UnitTests\MeshShaders\MeshAmplification\private - + UnitTests\MeshShaders\MeshAmplification\public - + UnitTests\MeshShaders\MeshAmplification\public - + UnitTests\MeshShaders\MeshAmplification\public - + UnitTests\MeshShaders\MeshAmplification\public - + UnitTests\MeshShaders\MeshAmplification\shaders - + UnitTests\MeshShaders\MeshAmplification\shaders - + UnitTests\MeshShaders\MeshAmplification\shaders - + UnitTests\MeshShaders\MeshAmplificationLines\private - + UnitTests\MeshShaders\MeshAmplificationLines\public - + UnitTests\MeshShaders\MeshAmplificationLines\public - + UnitTests\MeshShaders\MeshAmplificationLines\public - + UnitTests\MeshShaders\MeshAmplificationLines\public - + UnitTests\MeshShaders\MeshAmplificationLines\shaders - + UnitTests\MeshShaders\MeshAmplificationLines\shaders - + UnitTests\MeshShaders\MeshAmplificationLines\shaders - + UnitTests\Raster\NoVertex_NoIndex_NoInstance\private - + UnitTests\Raster\NoVertex_NoIndex_NoInstance\public - + UnitTests\Raster\NoVertex_NoIndex_NoInstance\public - + UnitTests\Raster\NoVertex_NoIndex_NoInstance\public - + UnitTests\Raster\NoVertex_NoIndex_NoInstance\public - + UnitTests\Raster\NoVertex_NoIndex_NoInstance\shaders - + UnitTests\Raster\NoVertex_NoIndex_NoInstance\shaders - + UnitTests\Raster\Stencil\private - + UnitTests\Raster\Stencil\public - + UnitTests\Raster\Stencil\public - + UnitTests\Raster\Stencil\public - + UnitTests\Raster\Stencil\public - + UnitTests\Raster\Stencil\shaders - + UnitTests\Raster\Stencil\shaders - + UnitTests\Raster\Stencil\shaders - + UnitTests\Raster\Stencil\shaders - + UnitTests\Raster\VRS\private - + UnitTests\Raster\VRS\public - + UnitTests\Raster\VRS\public - + UnitTests\Raster\VRS\public - + UnitTests\Raster\VRS\public - + UnitTests\Raster\VRS\shaders - + UnitTests\Raster\VRS\shaders - + UnitTests\Raster\VRS\shaders - + UnitTests\Raster\VRS\shaders - + UnitTests\Raster\VRS\shaders - + UnitTests\Raster\VRS\shaders - + UnitTests\Raster\VRS\shaders - + UnitTests\Raster\YesVertexStruct_NoIndex_NoInstance\private - + UnitTests\Raster\YesVertexStruct_NoIndex_NoInstance\public - + UnitTests\Raster\YesVertexStruct_NoIndex_NoInstance\public - + UnitTests\Raster\YesVertexStruct_NoIndex_NoInstance\public - + UnitTests\Raster\YesVertexStruct_NoIndex_NoInstance\public - + UnitTests\Raster\YesVertexStruct_NoIndex_NoInstance\shaders - + UnitTests\Raster\YesVertexStruct_NoIndex_NoInstance\shaders - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceStruct\private - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceStruct\public - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceStruct\public - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceStruct\public - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceStruct\public - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceStruct\shaders - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceStruct\shaders - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceType\private - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceType\public - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceType\public - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceType\public - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceType\public - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceType\shaders - + UnitTests\Raster\YesVertexStruct_NoIndex_YesInstanceType\shaders - + UnitTests\Raster\YesVertexStruct_YesIndex_NoInstance\private - + UnitTests\Raster\YesVertexStruct_YesIndex_NoInstance\public - + UnitTests\Raster\YesVertexStruct_YesIndex_NoInstance\public - + UnitTests\Raster\YesVertexStruct_YesIndex_NoInstance\public - + UnitTests\Raster\YesVertexStruct_YesIndex_NoInstance\public - + UnitTests\Raster\YesVertexStruct_YesIndex_NoInstance\shaders - + UnitTests\Raster\YesVertexStruct_YesIndex_NoInstance\shaders - + UnitTests\Raster\YesVertexType_NoIndex_NoInstance\private - + UnitTests\Raster\YesVertexType_NoIndex_NoInstance\public - + UnitTests\Raster\YesVertexType_NoIndex_NoInstance\public - + UnitTests\Raster\YesVertexType_NoIndex_NoInstance\public - + UnitTests\Raster\YesVertexType_NoIndex_NoInstance\public - + UnitTests\Raster\YesVertexType_NoIndex_NoInstance\shaders - + UnitTests\Raster\YesVertexType_NoIndex_NoInstance\shaders - + UnitTests\Raster\simpleRaster\private - + UnitTests\Raster\simpleRaster\public - + UnitTests\Raster\simpleRaster\public - + UnitTests\Raster\simpleRaster\public - + UnitTests\Raster\simpleRaster\public - + UnitTests\Raster\simpleRaster\shaders - + UnitTests\Raster\simpleRaster\shaders - + UnitTests\Raster\simpleRaster2\private - + UnitTests\Raster\simpleRaster2\public - + UnitTests\Raster\simpleRaster2\public - + UnitTests\Raster\simpleRaster2\public - + UnitTests\Raster\simpleRaster2\public - + UnitTests\Raster\simpleRaster2\shaders - + UnitTests\Raster\simpleRaster2\shaders - + UnitTests\Raster\simpleRaster_Lines\private - + UnitTests\Raster\simpleRaster_Lines\public - + UnitTests\Raster\simpleRaster_Lines\public - + UnitTests\Raster\simpleRaster_Lines\public - + UnitTests\Raster\simpleRaster_Lines\public - + UnitTests\Raster\simpleRaster_Lines\shaders - + UnitTests\Raster\simpleRaster_Lines\shaders - + UnitTests\Raster\simpleRaster_Points\private - + UnitTests\Raster\simpleRaster_Points\public - + UnitTests\Raster\simpleRaster_Points\public - + UnitTests\Raster\simpleRaster_Points\public - + UnitTests\Raster\simpleRaster_Points\public - + UnitTests\Raster\simpleRaster_Points\shaders - + UnitTests\Raster\simpleRaster_Points\shaders - + UnitTests\RayTrace\AnyHit\private - + UnitTests\RayTrace\AnyHit\public - + UnitTests\RayTrace\AnyHit\public - + UnitTests\RayTrace\AnyHit\public - + UnitTests\RayTrace\AnyHit\public - + UnitTests\RayTrace\AnyHit\shaders - + UnitTests\RayTrace\AnyHitSimple\private - + UnitTests\RayTrace\AnyHitSimple\public - + UnitTests\RayTrace\AnyHitSimple\public - + UnitTests\RayTrace\AnyHitSimple\public - + UnitTests\RayTrace\AnyHitSimple\public - + UnitTests\RayTrace\AnyHitSimple\shaders - + UnitTests\RayTrace\IntersectionShader\private - + UnitTests\RayTrace\IntersectionShader\public - + UnitTests\RayTrace\IntersectionShader\public - + UnitTests\RayTrace\IntersectionShader\public - + UnitTests\RayTrace\IntersectionShader\public - + UnitTests\RayTrace\IntersectionShader\shaders - + UnitTests\RayTrace\TwoRayGens\private - + UnitTests\RayTrace\TwoRayGens\public - + UnitTests\RayTrace\TwoRayGens\public - + UnitTests\RayTrace\TwoRayGens\public - + UnitTests\RayTrace\TwoRayGens\public - + UnitTests\RayTrace\TwoRayGens\shaders - + UnitTests\RayTrace\TwoRayGens\shaders - + UnitTests\RayTrace\TwoRayGensSubgraph\private - + UnitTests\RayTrace\TwoRayGensSubgraph\public - + UnitTests\RayTrace\TwoRayGensSubgraph\public - + UnitTests\RayTrace\TwoRayGensSubgraph\public - + UnitTests\RayTrace\TwoRayGensSubgraph\public - + UnitTests\RayTrace\TwoRayGensSubgraph\shaders\TwoRayGensSubgraphA - + UnitTests\RayTrace\TwoRayGensSubgraph\shaders\TwoRayGensSubgraphB - + UnitTests\RayTrace\simpleRT\private - + UnitTests\RayTrace\simpleRT\public - + UnitTests\RayTrace\simpleRT\public - + UnitTests\RayTrace\simpleRT\public - + UnitTests\RayTrace\simpleRT\public - + UnitTests\RayTrace\simpleRT\shaders - + UnitTests\RayTrace\simpleRT_inline\private - + UnitTests\RayTrace\simpleRT_inline\public - + UnitTests\RayTrace\simpleRT_inline\public - + UnitTests\RayTrace\simpleRT_inline\public - + UnitTests\RayTrace\simpleRT_inline\public - + UnitTests\RayTrace\simpleRT_inline\shaders - + UnitTests\SubGraph\SubGraphLoops\private - + UnitTests\SubGraph\SubGraphLoops\public - + UnitTests\SubGraph\SubGraphLoops\public - + UnitTests\SubGraph\SubGraphLoops\public - + UnitTests\SubGraph\SubGraphLoops\public - + UnitTests\SubGraph\SubGraphLoops\shaders\SubGraphLoopsInner - + UnitTests\SubGraph\SubGraphTest\private - + UnitTests\SubGraph\SubGraphTest\public - + UnitTests\SubGraph\SubGraphTest\public - + UnitTests\SubGraph\SubGraphTest\public - + UnitTests\SubGraph\SubGraphTest\public - + UnitTests\SubGraph\SubGraphTest\shaders - + UnitTests\SubGraph\SubInSub\private - + UnitTests\SubGraph\SubInSub\public - + UnitTests\SubGraph\SubInSub\public - + UnitTests\SubGraph\SubInSub\public - + UnitTests\SubGraph\SubInSub\public - + UnitTests\SubGraph\SubInSub\shaders\SubInSubInner2 - + UnitTests\Textures\Mips_CS_2D\private - + UnitTests\Textures\Mips_CS_2D\public - + UnitTests\Textures\Mips_CS_2D\public - + UnitTests\Textures\Mips_CS_2D\public - + UnitTests\Textures\Mips_CS_2D\public - + UnitTests\Textures\Mips_CS_2D\shaders - + UnitTests\Textures\Mips_CS_2D\shaders - + UnitTests\Textures\Mips_CS_2DArray\private - + UnitTests\Textures\Mips_CS_2DArray\public - + UnitTests\Textures\Mips_CS_2DArray\public - + UnitTests\Textures\Mips_CS_2DArray\public - + UnitTests\Textures\Mips_CS_2DArray\public - + UnitTests\Textures\Mips_CS_2DArray\shaders - + UnitTests\Textures\Mips_CS_2DArray\shaders - + UnitTests\Textures\Mips_CS_3D\private - + UnitTests\Textures\Mips_CS_3D\public - + UnitTests\Textures\Mips_CS_3D\public - + UnitTests\Textures\Mips_CS_3D\public - + UnitTests\Textures\Mips_CS_3D\public - + UnitTests\Textures\Mips_CS_3D\shaders - + UnitTests\Textures\Mips_CS_3D\shaders - + UnitTests\Textures\Mips_CS_Cube\private - + UnitTests\Textures\Mips_CS_Cube\public - + UnitTests\Textures\Mips_CS_Cube\public - + UnitTests\Textures\Mips_CS_Cube\public - + UnitTests\Textures\Mips_CS_Cube\public - + UnitTests\Textures\Mips_CS_Cube\shaders - + UnitTests\Textures\Mips_CS_Cube\shaders - + UnitTests\Textures\Mips_DrawCall\private - + UnitTests\Textures\Mips_DrawCall\public - + UnitTests\Textures\Mips_DrawCall\public - + UnitTests\Textures\Mips_DrawCall\public - + UnitTests\Textures\Mips_DrawCall\public - + UnitTests\Textures\Mips_DrawCall\shaders - + UnitTests\Textures\Mips_DrawCall\shaders - + UnitTests\Textures\Mips_DrawCall\shaders - + UnitTests\Textures\Mips_DrawCall\shaders - + UnitTests\Textures\Mips_RGS_2D\private - + UnitTests\Textures\Mips_RGS_2D\public - + UnitTests\Textures\Mips_RGS_2D\public - + UnitTests\Textures\Mips_RGS_2D\public - + UnitTests\Textures\Mips_RGS_2D\public - + UnitTests\Textures\Mips_RGS_2D\shaders - + UnitTests\Textures\Mips_ShaderToken_2D\private - + UnitTests\Textures\Mips_ShaderToken_2D\public - + UnitTests\Textures\Mips_ShaderToken_2D\public - + UnitTests\Textures\Mips_ShaderToken_2D\public - + UnitTests\Textures\Mips_ShaderToken_2D\public - + UnitTests\Textures\Mips_ShaderToken_2D\shaders - + UnitTests\Textures\Mips_ShaderToken_2DArray\private - + UnitTests\Textures\Mips_ShaderToken_2DArray\public - + UnitTests\Textures\Mips_ShaderToken_2DArray\public - + UnitTests\Textures\Mips_ShaderToken_2DArray\public - + UnitTests\Textures\Mips_ShaderToken_2DArray\public - + UnitTests\Textures\Mips_ShaderToken_2DArray\shaders - + UnitTests\Textures\Mips_ShaderToken_3D\private - + UnitTests\Textures\Mips_ShaderToken_3D\public - + UnitTests\Textures\Mips_ShaderToken_3D\public - + UnitTests\Textures\Mips_ShaderToken_3D\public - + UnitTests\Textures\Mips_ShaderToken_3D\public - + UnitTests\Textures\Mips_ShaderToken_3D\shaders - + UnitTests\Textures\Mips_ShaderToken_Cube\private - + UnitTests\Textures\Mips_ShaderToken_Cube\public - + UnitTests\Textures\Mips_ShaderToken_Cube\public - + UnitTests\Textures\Mips_ShaderToken_Cube\public - + UnitTests\Textures\Mips_ShaderToken_Cube\public - + UnitTests\Textures\Mips_ShaderToken_Cube\shaders - + UnitTests\Textures\Mips_VSPS_2D\private - + UnitTests\Textures\Mips_VSPS_2D\public - + UnitTests\Textures\Mips_VSPS_2D\public - + UnitTests\Textures\Mips_VSPS_2D\public - + UnitTests\Textures\Mips_VSPS_2D\public - + UnitTests\Textures\Mips_VSPS_2D\shaders - + UnitTests\Textures\Mips_VSPS_2D\shaders - + UnitTests\Textures\Texture2DArrayRW_CS\private - + UnitTests\Textures\Texture2DArrayRW_CS\public - + UnitTests\Textures\Texture2DArrayRW_CS\public - + UnitTests\Textures\Texture2DArrayRW_CS\public - + UnitTests\Textures\Texture2DArrayRW_CS\public - + UnitTests\Textures\Texture2DArrayRW_CS\shaders - + UnitTests\Textures\Texture2DArrayRW_PS\private - + UnitTests\Textures\Texture2DArrayRW_PS\public - + UnitTests\Textures\Texture2DArrayRW_PS\public - + UnitTests\Textures\Texture2DArrayRW_PS\public - + UnitTests\Textures\Texture2DArrayRW_PS\public - + UnitTests\Textures\Texture2DArrayRW_PS\shaders - + UnitTests\Textures\Texture2DArrayRW_PS\shaders - + UnitTests\Textures\Texture2DArrayRW_RGS\private - + UnitTests\Textures\Texture2DArrayRW_RGS\public - + UnitTests\Textures\Texture2DArrayRW_RGS\public - + UnitTests\Textures\Texture2DArrayRW_RGS\public - + UnitTests\Textures\Texture2DArrayRW_RGS\public - + UnitTests\Textures\Texture2DArrayRW_RGS\shaders - + UnitTests\Textures\Texture2DArrayRW_RGS\shaders - + UnitTests\Textures\Texture2DRW_CS\private - + UnitTests\Textures\Texture2DRW_CS\public - + UnitTests\Textures\Texture2DRW_CS\public - + UnitTests\Textures\Texture2DRW_CS\public - + UnitTests\Textures\Texture2DRW_CS\public - + UnitTests\Textures\Texture2DRW_CS\shaders - + UnitTests\Textures\Texture2DRW_PS\private - + UnitTests\Textures\Texture2DRW_PS\public - + UnitTests\Textures\Texture2DRW_PS\public - + UnitTests\Textures\Texture2DRW_PS\public - + UnitTests\Textures\Texture2DRW_PS\public - + UnitTests\Textures\Texture2DRW_PS\shaders - + UnitTests\Textures\Texture2DRW_PS\shaders - + UnitTests\Textures\Texture2DRW_RGS\private - + UnitTests\Textures\Texture2DRW_RGS\public - + UnitTests\Textures\Texture2DRW_RGS\public - + UnitTests\Textures\Texture2DRW_RGS\public - + UnitTests\Textures\Texture2DRW_RGS\public - + UnitTests\Textures\Texture2DRW_RGS\shaders - + UnitTests\Textures\Texture2DRW_RGS\shaders - + UnitTests\Textures\Texture3DRW_CS\private - + UnitTests\Textures\Texture3DRW_CS\public - + UnitTests\Textures\Texture3DRW_CS\public - + UnitTests\Textures\Texture3DRW_CS\public - + UnitTests\Textures\Texture3DRW_CS\public - + UnitTests\Textures\Texture3DRW_CS\shaders - + UnitTests\Textures\Texture3DRW_PS\private - + UnitTests\Textures\Texture3DRW_PS\public - + UnitTests\Textures\Texture3DRW_PS\public - + UnitTests\Textures\Texture3DRW_PS\public - + UnitTests\Textures\Texture3DRW_PS\public - + UnitTests\Textures\Texture3DRW_PS\shaders - + UnitTests\Textures\Texture3DRW_PS\shaders - + UnitTests\Textures\Texture3DRW_RGS\private - + UnitTests\Textures\Texture3DRW_RGS\public - + UnitTests\Textures\Texture3DRW_RGS\public - + UnitTests\Textures\Texture3DRW_RGS\public - + UnitTests\Textures\Texture3DRW_RGS\public - + UnitTests\Textures\Texture3DRW_RGS\shaders - + UnitTests\Textures\Texture3DRW_RGS\shaders - + UnitTests\Textures\TextureCubeRW_CS\private - + UnitTests\Textures\TextureCubeRW_CS\public - + UnitTests\Textures\TextureCubeRW_CS\public - + UnitTests\Textures\TextureCubeRW_CS\public - + UnitTests\Textures\TextureCubeRW_CS\public - + UnitTests\Textures\TextureCubeRW_CS\shaders - + UnitTests\Textures\TextureCubeRW_PS\private - + UnitTests\Textures\TextureCubeRW_PS\public - + UnitTests\Textures\TextureCubeRW_PS\public - + UnitTests\Textures\TextureCubeRW_PS\public - + UnitTests\Textures\TextureCubeRW_PS\public - + UnitTests\Textures\TextureCubeRW_PS\shaders - + UnitTests\Textures\TextureCubeRW_PS\shaders - + UnitTests\Textures\TextureCubeRW_RGS\private - + UnitTests\Textures\TextureCubeRW_RGS\public - + UnitTests\Textures\TextureCubeRW_RGS\public - + UnitTests\Textures\TextureCubeRW_RGS\public - + UnitTests\Textures\TextureCubeRW_RGS\public - + UnitTests\Textures\TextureCubeRW_RGS\shaders - + UnitTests\Textures\TextureCubeRW_RGS\shaders - + UnitTests\Textures\TextureFormats\private - + UnitTests\Textures\TextureFormats\public - + UnitTests\Textures\TextureFormats\public - + UnitTests\Textures\TextureFormats\public - + UnitTests\Textures\TextureFormats\public - + UnitTests\Textures\TextureFormats\shaders - - WinPixEventRuntime.1.0.230302001\Include\WinPixEventRuntime + + WinPixEventRuntime.1.0.240308001\Include\WinPixEventRuntime + + + WinPixEventRuntime.1.0.240308001\Include\WinPixEventRuntime - - WinPixEventRuntime.1.0.230302001\Include\WinPixEventRuntime + + WinPixEventRuntime.1.0.240308001\Include\WinPixEventRuntime - - WinPixEventRuntime.1.0.230302001\Include\WinPixEventRuntime + + WinPixEventRuntime.1.0.240308001\Include\WinPixEventRuntime - - WinPixEventRuntime.1.0.230302001\Include\WinPixEventRuntime + + WinPixEventRuntime.1.0.240308001\Include\WinPixEventRuntime - + imgui - + imgui - + imgui - + imgui - + imgui - + imgui - + imgui - + imgui - + private - + public - + public - + public - + public - + spdlog - + spdlog - + spdlog - + spdlog\cfg - + spdlog\cfg - + spdlog\cfg - + spdlog\cfg - + spdlog - + spdlog - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\details - + spdlog\fmt - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt\bundled - + spdlog\fmt - + spdlog\fmt - + spdlog\fmt - + spdlog\fmt - + spdlog\fmt - + spdlog\fmt - + spdlog\fmt - + spdlog - + spdlog - + spdlog - + spdlog - + spdlog - + spdlog - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog\sinks - + spdlog - + spdlog - + spdlog - + spdlog - + spdlog - {8C8AB91C-5713-3E95-BD8B-E719C9B9B52D} + {E1A71EB4-4633-3A17-A5F3-0CB78B7A6370} - {9038BA9C-7771-3258-900E-36D7BE624EDE} + {4C2CE58E-D925-31D9-BCD6-1F5C2D792CA8} - {CACB3DEB-0698-3622-BFF4-52376C879DD6} + {BDFA6DF8-3E63-35E3-BF1B-7DE6DABB2873} - {2B0BFC4A-486C-39AE-814C-41AC78D10C8B} + {7E6A9E8E-9B12-3A16-BCFF-24F677E7BF83} - {293EC35A-F7E1-3DC8-85EF-CE5A6EA5F50D} + {89BCBCCB-BC1F-331C-9CD1-22E507CBA303} - {CFB9CBF3-DB2B-35C3-8FE6-D2079099772E} + {5D57E1E8-8948-3A5F-90A4-2E40FAB422F2} - {BFA5F468-A722-3E14-97D7-1F9CC68B480F} + {E0158C9D-A53E-3AD8-997B-FF18C3875A68} - {31ACED13-9E67-3F9A-A46F-A83C460CD108} + {249EF7B8-D02A-314B-B30D-7B853AE9ECEC} - {72F27FE1-3ADE-328A-A726-8B09B71EB57D} + {8579A3ED-7C3B-33A3-8742-39F651979C38} - {396D5858-2ED6-34D3-A049-B35B9775CA45} + {C2D1D5DB-9CF1-3948-8877-C77B047A7496} - {FB4F3B22-7262-332C-84DB-72372F69EEF1} + {4E00FB09-1F31-37BB-9482-E60068789DCF} - {A0628620-CBAB-3745-BBC7-5E8D00477E66} + {30879CA4-21AD-3613-9003-149679995F5D} - {E673F825-73F6-3FC3-A55D-580AFC1FEE49} + {39C885E7-4263-3CD8-A9B0-074862970184} - {4F4393BB-E3F3-3542-A3B0-FD28B33BDBB1} + {FD623524-53BD-39CF-860D-021AFBB9F893} - {076F3FB3-BD17-30BA-AC65-4DF4FD839513} + {EE1E24EF-A436-33CF-AA48-C77F54D594C6} - {496BCC56-0CA2-394E-80A1-A7BE012CBF6B} + {5E4C596C-BBE1-34ED-99C8-AFA929AC99E4} - {1118174F-12CE-3856-980A-ACE5CAADBA39} + {BC14C306-3B78-3057-8E2B-60FB9E0F4BFA} - {0CCB9606-4A42-3E36-9658-F047E3E1A805} + {AF20CD72-B917-3F3F-B4D2-8CFAEA4AD9D6} - {11F51A25-448B-3DD5-8BF7-31C62387CD87} + {38D9E83D-A0FB-3CBC-9AFB-9FF5A158DB5F} - {55A17031-3E2F-3097-BA3D-F4939E2EE793} + {7EB621F4-CB74-3937-BC72-02C7FA571AA3} - {8B0D3F25-ACDC-3BA6-B8A2-0C047C91DBF2} + {58801C1D-E79D-3DCF-AB5A-77E449B443CB} - {F3591C8A-88CE-380F-906A-BD03E3A403A4} + {E1EB11EE-6FAC-31C6-B175-5866D19CF3D4} - {0A5FCB54-0AC0-3437-99A3-F7FFA673AFD7} + {BAF13433-9325-334C-ABC0-729D58B4BCFE} - {72C102CD-E25E-33E9-A9F0-56D7EE593105} + {A23CB3C9-BF1F-3150-B681-770E828BBDAD} - {40A3C396-8FC5-349A-80B2-2C71C4CEB9BD} + {E07F1025-679C-3511-B00A-914A38AC7B88} - {959816B1-9F1E-31A4-BB51-87915DB94BBA} + {7C1235FD-482A-37AF-A1A3-CC3B5FC9B002} - {376E5B7E-2B42-39EC-AD3A-084E996D5DEF} + {331F6439-712F-3C75-8FE8-DB1C0B9B0C9D} - {F294D012-D676-3B28-8711-92D158DE3716} + {4E017DFE-BF93-324F-8BAC-03EDB7F3072B} - {97033A05-9A6B-3A7E-BA70-EBA74F6D03EC} + {0861EFF5-602B-312F-8C8C-6C0933F92083} - {B24F575F-3CD6-33DC-88F8-95160FD9E70B} + {E70B2AC2-3542-37A7-878D-A98DA6BABF70} - {410F017C-277E-37FD-AB04-22389A0D3B22} + {73F3D0B8-8DBA-39B6-92DB-D6FB1E914E2E} - {D115BB93-AE2B-3D7F-BFF3-05FBFACFABE2} + {123A3853-8459-3B85-A1D2-4B1415F5AEB6} - {E1B1105E-ED75-3912-8DC2-5043D02680E9} + {B0977E15-0D0A-3C83-8DC7-EC25E0DE1F74} - {FE9D6BE9-C19A-346D-82C3-8A8620CFB1EA} + {22FCFB5B-7271-36C7-869B-E4D63B0E7C9F} - {4CED4910-1B17-3734-A7B3-8E9C972DEC26} + {9823EB17-3045-31FB-A7A9-9572CA07D8DA} - {727F55F7-A58D-349C-B822-14EEB3596725} + {C5C12172-CE34-3117-90F9-B84213B52D0D} - {7D28460A-C55D-3C48-B11E-7FFFD1F849AE} + {EB304200-CEEC-38B0-9105-702F15C7A380} - {FA1F5AFB-8506-38FF-8D93-5F45938AC871} + {2CB748CA-D9DE-3321-8E77-281D59C91241} - {D5E253DE-19AD-322C-9324-E5D47FC98BE3} + {B859CC48-3732-3DF3-95DE-F44B23C0A399} - {CC126E86-360F-3D0D-9A9B-214B094837BE} + {42845FED-D64A-33C8-977E-2CBD3B2EB0DA} - {F142B55C-AF12-33ED-95C2-EB3FFFC9783C} + {3766B42A-435B-3FAA-8D20-8A7A60D591C3} - {6A4724F2-606D-3446-8A81-4FC694C26012} + {AB796449-B893-31CA-AC14-0656401F5FD3} - {74DFD6A4-CF20-3028-BD30-9DD7348EECEC} + {6D64C705-9B4A-3F5A-A646-2FE5746E6E52} - {01897C40-62CE-3BB1-8264-5608023EBD7B} + {57497600-651E-3511-96ED-6DF30A4E9A13} - {DC5FA358-2C0D-32EC-9BF2-6B2588D98916} + {3DCC0139-37DA-35BD-80F8-0A5A00A8CAE6} - {C6A303E3-52F6-3033-B5F6-AAD0A4CAEAB7} + {FCA4E014-85BA-32F5-9B0A-4E179D813557} - {2C16EA05-A79F-340C-8D6B-35551AB3DA16} + {2863AED7-9B38-3999-B6EF-1CB320E41441} - {537E6788-8295-3D7C-87AC-E7B67A4DCC79} + {5830E7A6-F50B-3E13-9351-91E0E3B659B7} - {71D6400F-92F2-3EEB-84AC-4C958715F19D} + {55B45F6B-52D0-373A-9133-18D94AFCF78D} - {6FA941B6-953F-341B-A017-506A549AFDBD} + {979CFA4D-BA80-3B86-AF00-3D0A33107D55} - {E4B35409-1807-37A8-8239-EF05C5154662} + {993E3A8E-AFD8-3838-93A8-389511B5D38F} - {E0233A99-6878-36E3-AB6B-386D4B46B136} + {F75CB153-AA4A-3B77-87B4-F88E5E21DE7B} - {5CF571AB-B44E-30E5-9622-18954E19E6F9} + {F8363C77-5990-3BAA-83BF-3D6AB85829C2} - {E368A272-770D-335F-ABF2-431148C4ECC6} + {72971085-99CE-3746-8862-4C8014532D7B} - {E389B39A-34A5-331B-96EB-F41AE023FF11} + {4AF59B3B-1416-3964-9634-8C1A0F3F1D34} - {41F64E07-8456-30D1-8F99-2AE220B81C9A} + {5F34E47C-842F-3B80-BF5A-10B77C3FA0F9} - {AFDE669B-2B19-3A07-B306-24881F6FD4C8} + {7EA9E06D-8ABF-37A3-9090-C2DD9011B667} - {B5B16A0B-B279-3FB7-89F3-ABB2CE4BDCB3} + {8F6E76ED-173C-37D2-A98E-E755A173FFFF} - {5E529ECA-75EF-314D-8965-275BEFEEE931} + {55A038DA-F3CD-31C7-A5AB-00574DBC8B9F} - {A92A8F42-4B1C-36EB-BE71-A61B656E03DD} + {6A94DA8C-9A2F-3FE3-AF59-247D906C45E7} - {2853F4BD-8DF4-35EB-AC74-869F81AF26CB} + {59CD6836-935D-34BB-99CF-6D3B874E88E9} - {090AA3D2-5C56-32F1-81A2-5E0D7F614135} + {D614F65E-1C9E-31C3-BCB9-B8BE4570B9BF} - {033FEF39-7F78-3927-B7D6-CB476796396A} + {08261643-B7BC-34E9-B9F5-61CE80F25C4F} - {B60075A0-287E-3BFE-8DE2-A4AA579AAD58} + {02C77D5F-117F-36CB-893E-B18DD3304EF4} - {E667E1BE-9C50-35E5-9AD4-D973A0554C91} + {C9A4BDDD-F5FA-3923-9E84-42F912B6C960} - {F02E8813-2EE5-39AE-BD12-56B85059B711} + {F7A01060-F72E-3531-9C88-40C2755819F4} - {963556CC-3F8C-3A5F-87AD-FE53E0AF563F} + {EEFE1170-0166-3F44-9B85-430320C1CF69} - {D0EFAC2A-5F4E-3E83-95E9-F37962B0729D} + {D82CB3F3-C865-3133-8AE1-24139780F8EC} - {F1D63CFF-400F-37AC-BC62-48E4A436C1FA} + {09292133-823E-3C0E-B492-0CBC174FD2E5} - {DF865736-589D-3991-8428-4A4247AFD4C8} + {3EA07F3D-9151-3EE9-946C-55DEEDE53689} - {1F41EFAA-E6A3-3B59-81AC-457F427249C1} + {85B984A7-D44C-337F-B3FA-B57E8F8EAA87} - {E35BA849-F605-3148-9782-6E29FFB03B6B} + {27FCB443-89D7-3EBD-990B-CE449B04CB52} - {05611104-D1F6-305B-BABC-4D978322976B} + {7FD84FF7-AB44-30DF-A537-769F50F4A05B} - {81A5F039-E884-3B9F-9431-B25E4DC8E9B5} + {E73E8F80-5E0B-39A8-AFDB-6D971A52C577} - {FE90C865-BBE0-384B-BD4F-96AF1C29FD11} + {251F79AD-83B8-316B-A135-91D97105C951} - {C6160E27-5D35-30B2-8201-EF188082DE1B} + {B982C22B-C43C-3D41-9251-A2000A77878F} - {416B272B-9371-365D-BC4D-CC5B1EEEE366} + {E76411EC-8400-3DEC-8C26-C12F1F03FC93} - {01059507-6273-33CF-94FC-4B52222DB4C4} + {D27C8EC3-B0F4-38C7-8708-AE26CCFA5CBC} - {77A09483-CBEF-3C42-864D-D17B03CB1FD2} + {F84033AD-66F8-3293-B4AE-3AE74150D696} - {D62AFB8E-4D41-3A42-BBA7-4B8BF173DAB2} + {25A32A3A-9263-344A-8695-7055D1251813} - {857EB54F-CC32-3AC5-A870-72A1CA947F62} + {8E058657-F9B6-37BD-9706-140BEF925C6B} - {62606DC0-82D8-3DF9-8331-42D53C5549B3} + {8DCE7151-46AA-3788-9BA4-0FA34566123B} - {E6FD6516-8C75-3D64-A81F-FCF42B7CCC44} + {15FA7E80-B675-3650-A9EA-791F7BA554C6} - {659A4E6F-5171-3096-A3C8-CD2E11B43299} + {524DCB8D-8D2A-37F6-8857-CED7D08753D7} - {B3F5A5F6-A331-3414-B7D1-A3C7A1094C1F} + {B4992449-9E37-3407-B748-170356033319} - {D2C38523-DF43-34F7-A763-21BEB44BFEA3} + {0D1AFF41-E0ED-3B73-9440-40F1E24BA346} - {C2FFAD4B-340D-316E-8EBA-CF4F8E80CFE9} + {06606649-94EA-3989-886B-B6D3D91D1CEF} - {089A1ED5-3C7E-3EAA-B87F-10910D8EE490} + {4297237E-7062-3E25-9FFF-9FD74BD0C7B0} - {C8ECFC54-108A-3D26-A9D1-B0C66448BED6} + {028CAFB8-8DE8-3538-B9DF-DC65AE0089C3} - {64BAED24-AE56-3603-8D6B-51B3DDD15F74} + {AF51C9A5-FE6C-33CD-B684-C0CA01B79BA3} - {835B624B-16F0-3C83-A4DE-5CC29E2550A3} + {536ABEA6-5816-3416-BBBB-3B2077AB5739} - {83C8576D-8202-3965-8FB2-0A13DC7B0EF4} + {183766E2-CBCA-34A8-80DF-C6000C08D10B} - {4E3DF891-3BB4-36CF-8CC7-82E6E3801669} + {E6F3787F-45EF-3BA8-B9E9-5DE5944443E7} - {54DE9AA0-84A2-327A-810A-78614966D349} + {92538ABE-BE4D-3ED8-ADA8-59AF90334753} - {92280372-C567-3EF0-96FA-21B7B44A7350} + {73D9B1DC-7A96-3726-802E-CD8A8AFE3577} - {CB9628A7-F2D6-3AF8-A667-EF0D55C319B1} + {65C1D094-68BA-3286-B89B-8E2F2DB35AA7} - {ADE3AA2E-3DEA-3FF7-A098-E47CCDA28282} + {DB55A1B0-A7F2-313F-B3BF-D7D16D87F541} - {92FD3229-D759-36DC-B7A2-ED33B97131C9} + {52097BB6-8E9D-37C3-8717-55B999F1DD34} - {CE6F311D-8408-37FF-99F6-D459D079BE7D} + {424333B2-365E-3A5F-AEBB-E925CB5F4AF2} - {B4004B41-3996-37E2-A283-851B3B1A4D29} + {C5A7F066-2F3B-316E-8B32-EF2D40716BB6} - {6BE654F9-3E58-3452-BB50-69B88BE730D3} + {9CD36147-A426-31AA-9C71-481CC59B729C} - {9BB7CA97-E7DA-352F-A1A4-C5FBAD390417} + {97848AB2-5D5E-30EC-B78E-FE3F82E23FA3} - {7FF7A58D-48A6-3FFC-936A-6AF4095A40AE} + {7EE4C90C-9569-39F3-9705-598658385D30} - {E05357A9-D013-3D98-A2EF-D896AC100C91} + {A42BAA16-7165-3BD1-B010-1D990846F1AD} - {95DDB547-024F-3234-8081-B4E93833E19B} + {7B4529CF-3FD8-3C93-A16D-9CD89FD1DDA5} - {8980D6A2-453E-39ED-9029-1991E93ABEA8} + {3FF6913E-613F-3C18-8BF4-A9ED8846F4A0} - {F4894C40-C04E-3E0B-9E25-2AFEFE1EDE1C} + {E5EEC6EC-0EA3-3FFC-859B-E4960A760083} - {C9A04F61-5D26-3001-9BA6-DE96F54255A1} + {64A6A7E8-F0EC-3568-A096-9B6DB9D34E25} - {5A45FE8B-91E0-3BB1-B1F0-37544EC06690} + {3CA0E510-8B7B-3FE0-B569-931881E51E8E} - {230C4DE2-0637-341F-936E-7EBA1F1F291C} + {F71F6EF4-E429-3F96-BE4F-188E3DB82BAE} - {66EF8561-88B2-3E14-B2FB-2C2584819B1E} + {159F2671-0385-384C-BD4E-984E09B1B138} - {3FE82EBF-D8EB-3FD2-AFAA-C077B6DDD396} + {BA39E16A-E5DB-39C3-885A-8D9D4B5A61E5} - {806B8F47-15E3-3205-8B4A-7F6700A84921} + {44D214DE-36B3-37CD-96DB-0D87243E884C} - {8CFB12D9-E562-3A51-AEA4-8B0706FF3F37} + {EC1CE7D9-B7BF-302F-815F-2AD20E42BD68} - {A5548267-FB44-3264-9D99-EF59C75837F8} + {7AA9912A-C76F-343B-A88C-0A12F571F50A} - {9E834046-E5CA-388D-9FEE-B0F3BCD5A416} + {4EC9A570-62BE-3D9D-906E-D20D5D0E20EE} - {9D855E3B-592D-3FB2-BDFD-CC5FEF630EA9} + {81F59196-6B50-3BA5-9E70-616DD2C31A72} - {080557EE-993F-37CD-AE99-6214B22C5EAC} + {01EF419C-1196-315F-9776-72C7B176CFA8} - {600F28D9-DD6B-3B5E-8837-B0020234CB9B} + {DA396461-7E79-38F3-A4C5-B6457556F61B} - {8CAE8743-EB76-3D0B-94BF-4BC6480E86EA} + {60163023-48D3-3C10-88A0-44E903F84938} - {1183E512-C761-3EC1-AE93-4EF586A09F42} + {4A1B3EBD-C50C-3B64-9CC1-F676FE0B7590} - {38BB6265-BE8D-32FD-881F-55B53F05FB42} + {72E80683-181C-3E4D-B4F9-0A7F3182E855} - {94FA27E3-0A0E-38E0-BFE5-C3A3269C0E7A} + {E3952666-547F-364A-8A0C-75AB8B7F5752} - {1D62914C-6A02-30B0-AA63-32AE9A99F952} + {67F99141-F9C4-3B87-A2D2-1E9161D42935} - {17E087B0-9B92-3C31-915A-E778C26F0391} + {35E61110-2937-338A-8B89-497F9973BE4A} - {828EAEEA-16FA-3035-A016-E72715CD3B58} + {FB3D6F0F-5F98-38E6-BF2A-B4EAAE388976} - {87E0C3C0-4835-3EFB-B5C2-6EB3A421896D} + {0CC39CDD-AE72-37DC-AB53-32A223AD9B40} - {A4C50BD4-452D-395B-9B68-6BB463AEEB8F} + {C2B57CC0-2A0C-3C10-8A75-B7ED5BE73B5C} - {3E7884B7-1B2E-36D0-8304-3F343F13A9F5} + {79F43AA3-9A42-3F73-90A3-8A505EE9851A} - {28E1EDCB-EFBD-395C-B367-1DDB3272678C} + {26221E41-22B1-391A-A928-D8550E7D2FDC} - {317110CB-D35C-3133-906A-188AEA8C3825} + {E9D0646F-63F0-3394-86AE-962ADF3DE258} - {B08B1EA7-C9C8-3A94-9680-633556E1D940} + {08B4BA7A-722A-3E5D-9D58-C0D7237E5C75} - {B8081C9C-A633-3284-A2EB-762C52E3A47A} + {98B219C0-65B9-3F4E-8567-E5A56CEF152E} - {3F82FEEB-57DA-3705-8F3A-3FC292725553} + {2AE352C3-6B8E-3836-98CC-ECCFEB223A8A} - {3010E0C2-7C07-3962-B7EA-E2FCB388B10A} + {DA1688BC-61F7-36A3-BDD2-2818AC8DB56E} - {E0D6C622-D087-3D09-BF5F-1545E83EFABC} + {0AA6D9FD-FB85-329F-B838-F17CB2BB4C45} - {98B1A61A-2DE5-3E27-9831-311C166DF9B5} + {E09527F4-79A4-34A5-BA7D-A38684FDDAC2} - {A82102F2-1381-3321-80B3-20AD9A966444} + {4E9E4ECE-5ABD-3528-9241-CEA0972F7A61} - {BC177C99-479E-3765-9C22-7E1BD9C87B0C} + {BCA03764-52C9-3588-933C-DF92D5367423} - {A4847361-E7F4-3580-AC93-B40E3A516FD5} + {3AB95D1C-A4CA-3B3B-99E2-F59FA2B24DD4} - {7E3AC0E0-AF6D-3424-BDB0-6F10586BE740} + {1F47F85B-CBE1-311E-B05C-ADAED57E1F24} - {43BAD434-0F53-36C9-A711-680D69E4064B} + {D1B14BEF-FBE5-38A7-906C-A2EA48198659} - {16A9C6FE-85E1-364E-B3BD-7233BD21CEA2} + {9D3BBB68-7CA3-344E-B2C3-C804749ECC63} - {94189AD4-AE39-3991-AF5E-486856CC8DC5} + {CEBA57B1-162E-30D1-9460-A04D3F1E73CB} - {D186FA3D-FBE5-3586-898C-17B9F932EFE4} + {9076B6C2-EB30-3D5C-97B7-8628E4D23791} - {B5EB750D-1845-3FD3-9205-BDA537521991} + {6BDB20F1-1959-395D-955E-4EC6C919A688} - {AA3708AF-D326-36F3-9600-EFA199729B1E} + {81EA7C67-BFD2-3840-8B41-E0E153C82BBB} - {BB3BFEAA-28B0-3E24-98E0-394685F67A8A} + {0FA8ED35-4588-3A37-861B-C1CE019E1321} - {55D9F182-2D97-310E-8356-A1BF13722563} + {AE0DDE49-DB45-38BB-AB75-116C96C081B0} - {E775458C-7720-35CB-BE02-AEE7BD5518B2} + {0A6F5231-DD03-35D3-8019-14A8F910C65B} - {FF10AEF6-FB5F-3080-972A-6E34BF793A8C} + {76BC0C1B-DDC5-36C6-B36D-743C70DC0C28} - {0BD7923B-A0F3-3175-A4A6-C4306AF95290} + {B1FF2D12-CB83-3DEF-8294-A72CDA85FE1C} - {B86FF102-6B22-3A30-B790-9BF9D42ECD2C} + {EE332DD0-0683-3D3D-B39B-E6C94426BF59} - {A68A1EEA-C731-338E-BFA2-2F72BED85ED1} + {3FFDA98F-43C6-3C88-BE03-3C2F1D2384D7} - {393F3ECD-07B1-3B90-8CA9-20CCDD087A2E} + {9A2F9FF0-7894-3CCF-A409-B05FDD9C9ADB} - {B631066E-BD83-34D0-A341-A2C2C70B0000} + {9646B252-BFD9-3DF7-8D51-206CA87ADCC6} - {205A5C21-67A0-30FE-B016-3DBD9025F8C1} + {AC9D4422-AE2A-366A-92CD-A39158377729} - {2BB89C93-B55E-3A24-9A42-E1C814EE1778} + {07B08A01-D465-35C1-93E2-662CFC32D3D9} - {1E7054EC-95A5-327F-9D00-D36E06A24B6F} + {61848166-6040-3762-B8A0-A6C229758C41} - {6C80C740-CD8A-3D60-848C-300D5F0207B3} + {F036BABC-13A3-371D-A6E8-EBA41C81CCFA} - {1D043142-350D-3294-89FD-1C154E6E2404} + {986F10B6-866D-3DE4-90F5-FD03C4DEFD78} - {B154CE09-2671-3308-ABBB-0FB3B22E91F6} + {B930FF29-0647-3144-B59C-50476B153E3B} - {438A8DAC-BAA4-3DC8-9640-2C26D7DB4868} + {862C5805-E943-3B0C-A8CB-080AC03C6356} - {BEAF7DCA-3A03-3C1D-96CF-7342575E64F3} + {15EB5D1E-CE66-339E-B385-1F1F700F959C} - {05D1C669-79A9-3186-B13B-0BFD22827E9F} + {150CEE6C-5905-36C4-B086-AE9F5417D961} - {DA73C575-1F53-3472-929B-C37618C4932C} + {5B57E1B0-02F7-33C3-86AA-94D17D057A1C} - {616B68F4-0253-3186-9AE5-BDD1AD7EEB2C} + {8B41DF2B-77C3-3F86-A428-68FA686A2D15} - {0F9DFBD6-66D5-33B3-A3FB-AB32394309EE} + {7790C398-FB5F-3879-962A-D39A05939B8D} - {7A14C862-BF0A-3A8B-8103-783A8B7764B5} + {B2041BC2-BBAE-38D2-9CF3-99E2A00FBFC8} - {60048949-B106-3E6B-8227-D22475D66891} + {03AC21ED-0126-39DD-A74B-EAB8FDA81386} - {9D70E4EC-319B-35B7-A307-6BE0D56C90B1} + {B88AA55B-174F-34ED-A0D8-F8DFFD4391BD} - {786C4CEC-1091-3581-B1F5-2D4A7F05E360} + {837322E9-A822-3047-9FC3-B6E0D76B70D1} - {2D5F19FF-10F7-3C26-9973-73133A742CEF} + {F5637DB2-92E8-39E7-8DD6-6E897DDDC341} - {FE8B2DE1-CE61-3A0B-B866-2C0DE5706FE9} + {B7CA20E8-B220-3B8B-9139-7D21AF473596} - {5DA692C7-AB5A-3179-82F5-DE281D49F854} + {DA77F82D-DB42-37CC-B00B-1B648C80FB13} - {F40347EF-2D77-3C52-85E6-9F77EC28D7BD} + {FEA84826-114D-380D-A546-31D604353140} - {CE45ADC6-260F-3CB0-881B-16C46E9B5415} + {1EC0F756-B5EF-3EB3-BCBC-3D5B0A07CBEC} - {9CA2F67E-307D-3C99-AF03-30EE2A1D5C80} + {D5F3C6D5-98DD-3FBF-B2E1-7EFE6D0866C7} - {C8D95B53-D53B-33EB-9C64-17B743153F2A} + {CC6A39FB-C9E9-329B-B590-BCAD08DE66C9} - {DC8EE1A4-7E43-3403-BC06-199EBA38042E} + {9B4222EB-2311-3834-AB0B-EEABEF87181B} - {1F6AF25B-B972-3581-9400-6F3022094999} + {F8067C10-6FB2-3A94-A135-E234755C852D} - {CA6FA415-BB63-3285-9AE0-5EA6BAFCD09D} + {67A226D3-0267-30D1-B60B-49298A83713B} - {C43C9567-E502-3905-A921-746065A2AC00} + {84741ACC-302E-3A13-8BDF-9AF5D04E67A1} - {99386E1A-A72A-3835-BF37-6EBCBBA4CEE4} + {00B20BAF-CDDB-348A-8091-A54D23B664C6} - {B8BE8108-CDF4-30B7-9036-A4CEA8D18495} + {7FA22179-4C5B-35AD-BB80-B0D902CD4EB9} - {B648B5A6-5DA6-3382-A0D8-4D3073CB72C3} + {EBA52EC1-A2B4-33D8-A1E8-8CE5E7A64D5C} - {7CBA31FA-4A82-30CD-9EB4-B4E045C64F14} + {4216BA9D-AC6B-3196-A4C1-C753EF84803F} - {6ED1FF4B-686D-3940-9D09-0E016569F23A} + {C96BF00C-6040-3C5C-9210-DE31325197E0} - {9BE8A4D0-3EC7-3839-82D7-1F99F47D48DD} + {9D7F9AAC-2F48-35C0-8BA5-F1573A2BEEED} - {22E0B141-89D5-3F4A-B0DF-15BFE750D59C} + {0BE68328-8954-33CE-83F5-F4CB2FFF4798} - {39811FAC-485F-3602-89B8-B31DF7800692} + {234732E4-1583-3FAE-8E63-2F89A55746CC} - {DB6C167B-75C6-3688-AA52-988C46DC97B5} + {BC066608-C6D0-3C23-B4FC-A87468546BC1} - {9746BB50-F12E-31B5-A6ED-9651F96C426A} + {013E3BE1-AE1E-323B-A6D2-0927B2B2058C} - {4EA91A16-C1E5-3CE6-A311-4D3492144E7B} + {D6D13D42-BD22-3C3B-847A-DE6756F2B91E} - {01491D2A-03D6-3805-A2F1-AD501DFD54A3} + {81DB411D-A669-3075-B658-8262A614471E} - {338FD986-1CF1-3111-ADE3-E52B4025AF74} + {6C3CC3AD-3F75-3A0B-88CD-B04C16AA7AAA} - {993B9964-99B9-35CB-B6AF-1E23D48B9E50} + {4AD78BE7-9CB5-312C-8F11-F800CC94C526} - {50AE9D65-4EF5-3DEE-8B6A-E4191E8D13E5} + {D8ADFA8B-A98E-3192-B3AB-C6D1FE704F2B} - {57DBADAB-35B8-3FCB-A398-392D7FF41E97} + {D9AFE708-A3D0-3652-BF46-508A71146E32} - {9FCFA06B-9BC1-3A60-BE3E-881526DC750B} + {4D0E41DA-3141-3B34-B17C-E6D4D7FA23F9} - {54E65FDB-DDFF-34B5-B5ED-6DD2C859B542} + {50D80F66-2620-3B40-A03A-4EC7F513C778} - {806B6103-16CC-3973-BC8C-444C2311F750} + {D9535F4E-8F43-3361-871C-B7DDB7564055} - {9AE271AE-1246-381A-B7B1-8BAB204C8BE4} + {0C16738C-EF1A-3628-A627-3C8A92555BFD} - {4DC61872-07F0-37BA-882A-718E7C58FCF3} + {6CDB2514-6569-347D-A3C4-4B8683FB2FE0} - {7CD9034B-44EF-3BCC-9D07-C62C818C9E7A} + {856A143A-4648-395C-AA9C-E8D9D1D6A6BA} - {246E4064-4529-3C54-8F1C-1AADB656EF50} + {5B92EF78-7980-3237-AA9D-9A77D4CBC154} - {23B6FD24-F5FE-3E07-82EB-E2675D44ABCC} + {0B4EA36D-EAE1-3397-AEB9-DB3D3F5630BC} - {C83BAB49-5D53-34BB-9A86-B0E10450663B} + {9BE3C54D-07DB-34F3-A3AD-94EE148B1D05} - {3C08A9ED-8D95-3912-B8A7-B0F24902994A} + {43CFD25F-EA93-3167-9408-715558B8D918} - {6FD2FB68-86F3-3BF1-9240-5C572F443814} + {E297AAA9-FC6E-35BE-BCA0-DB534FAD9AD3} - {26DA13EE-C26B-3AB0-B819-75421BDAB634} + {138A5D82-2BFC-3AA5-89DE-712B939855B6} - {3D6EC154-CDC4-3459-A156-53A7ECC7BDC1} + {D7D3BB14-FE29-3FDE-BD60-4F55C95B024A} - {61CB32EA-30B2-3A64-9497-3F62461F6AF8} + {5E1B67D3-9BAA-38F4-8CA9-CDC3B48FFC94} - {EB47F95F-88D0-3269-8F70-EEB519082F85} + {34DAB779-5958-3AA5-B0AD-7010589F7128} - {9B8C7E20-08C6-324A-A824-66EE4FFFA9B2} + {7A758F1D-BF9B-3B9F-AA52-09B69552C507} - {621FF237-F917-3B55-B21D-A91D81CAC31C} + {36D24A9D-0138-313C-BE78-F8962678F1DC} - {2EC9E3AB-A25A-323E-9315-DA2C06D4A3D7} + {904FA3B9-542D-3071-80BE-2EEFFF0F97F0} - {8ECF4530-67CD-38DA-A479-E90F7407C1D5} + {2B6E9D99-DF6E-3864-80D4-23B4255F7680} - {F4805FB2-1E22-3AA2-814E-4F9651D9644C} + {1111CA9E-B09C-3A3E-A9C1-83F57D1D2F7E} - {3B255887-5965-3773-BC2B-AD4E650035D2} + {0661E18C-B251-3CE4-A2CB-C8458D5C6D5E} - {984A04AE-4ED0-30B6-AB55-691117378494} + {58221959-2D78-3786-8AC1-905E8AB6FE1B} - {24A62134-B527-3698-9D86-BCBF69DF5E53} + {EFD71085-6266-3F23-8526-2AB26D29AB94} - {A10BA2CF-E88E-3D7A-BD9E-80E80740EE3B} + {A653796D-4E00-3DE0-B041-CC8A1B9924A7} - {EDFCE340-1F75-3215-B5BC-AE8C7D56402A} + {B77D0133-D4A7-3767-9752-C7AAD05D32A5} - {AF2879B6-7BA9-38D1-BCF9-64030C8E7710} + {69D4F5B0-1484-3083-8D23-C170626BD243} - {9442CDB2-4714-317B-9CDF-27AA7D56F3A4} + {2D388A48-1B61-39B2-85C8-6F39AE9F2E7D} - {4F5CB1AA-4DE3-3CF9-BB87-38E19F4DBEAC} + {936F1062-453B-3821-BEE5-16963A4C8861} - {47B9DF5B-FBD0-365D-98BC-E181964B80B4} + {07DB6C1F-A5F1-35AD-A5F1-8215B86932D2} - {9D349DCE-C169-3B58-BEE7-9860CCE3D61B} + {BC7836C6-8C67-3489-B955-7ADC7011A812} - {8B7BB06C-D429-39A1-8EB9-0F6384B2404C} + {8CBD2A1E-E0DF-3356-9F2E-093A0DC7237B} - {773BAE6B-E67C-3584-8D44-5C041601B4CC} + {D4165ACD-DBFA-32F6-8DEB-6890C39F0C01} - {66F8F6DA-5854-3B25-999C-CFA11B1D670D} + {544C1279-B449-3808-8841-1A0A280CB84C} - {01C74819-FD18-3C5E-9183-D39B8E6A5697} + {82786D37-D953-387B-9A1F-3E15051D3437} - {46A59328-FEDB-3220-997A-AE307650B713} + {25C638DD-3936-3830-A970-6E7A0C49234C} - {F58C454E-B665-32E1-83D7-111428BAB687} + {70E36C9D-43A7-3F95-AF9E-463CA5C48DD8} - {09407A91-F7AB-3293-A023-3923F6371474} + {ACB9FDC4-6012-3759-90F4-13D2FA36EFF9} - {C2DCFA0C-1A0E-31F7-A0F3-A1C73779D785} + {67BC7D49-BD56-3C4C-BCC2-0B82D32B4484} - {A1AC2FFD-759D-369B-BC8C-330674256C17} + {DA012D92-DEA6-307A-945B-4E097108CEFC} - {7274E38D-D142-3D89-B8C6-61E5F50008B8} + {73143EE0-1ECE-3483-B806-825E319012D7} - {098A869D-C356-32BB-8A13-46D87077A72D} + {033BEF6D-72D4-370C-9D0B-71DAAEEB0C57} - {7F849F3F-BA91-3AE7-ACBF-475156F5E045} + {519E174D-C08D-3C2E-9564-CDCA713BFA66} - {BFA004E7-9C15-339D-99D7-E0073957E740} + {71F94C76-3E70-35EF-82E6-09DF99C364CF} - {039A0846-D6F8-3FF3-AC44-BE96785CF3F4} + {374DE96F-21B0-31EB-AC01-457A7E8D3A92} - {356D6ED9-9D65-3EF7-A047-419319CA76E4} + {A90E5203-96A1-3244-B546-1A9883B0FCA2} - {748B2E05-492D-3725-A527-9B33635A88A0} + {9E282656-0B84-3ECD-AC19-67299B237F02} - {6CF98A78-6A11-3B89-B009-5A13956540C4} + {B7726B59-C0D2-35F3-87ED-4ED6F5323FCD} - {BCF74D50-5A5C-3137-BE8B-8845E94FC5D1} + {E12190A9-777A-3408-BC54-FFEC5BA879AD} - {7CE2CA5F-34D5-34AD-8AB8-71A11BA6C15A} + {1FF36528-3811-3A27-AEE5-A94DE727304D} - {702B7833-AC34-321A-ACB3-9B94F70C8582} + {7821D7CA-1D5A-3C01-8424-BF22959F53C9} - {56D6604A-A95E-3377-88A7-14C3F79B6795} + {9C883ECD-9EA7-3596-93CA-17BAEA3EA6D5} - {E1CB223D-4637-3C44-9317-EEB26A5DAFE2} + {27569088-D170-3E88-B842-6C017797A62E} - {89EC51F0-8086-3882-8BEE-F05D95F191F4} + {E22577D9-93B5-34CA-A368-B2A59D2A6BF6} - {4168360A-B35A-33B1-A1F3-06E4281E887B} + {80242E0C-BDD2-3A07-92FF-231B9865D01D} - {8615D04F-7B76-3DD1-9F20-FFD8A466186E} + {BF54727D-02E0-3705-B09E-D6C43F26807D} - {4E83DD51-169F-3475-8DC3-E2CB5DD32B4A} + {4368F587-5837-3E22-BAC5-13AC6AE943F6} - {402CBD23-4BB4-38A0-9B8C-92956F438665} + {47BAA390-6DDB-3A72-94B5-8805EB46C2B0} - - {E2904E9D-8C00-346E-9F4D-CAA77D862C97} + + {A79AD624-CC24-3673-BD38-D89BE7ED56BC} - - {3FB1D61E-E705-3EC8-BDBF-A5AE8A20260D} + + {586E005E-1DAE-3253-A0D2-1085604319C3} - - {0EE80D95-6650-3717-9478-BB30163436F0} + + {4030BBCE-1538-36D2-A29F-E510C1824C86} - {19D799EF-41A2-33AD-8B00-49EDF15B7085} + {C20FAC8A-CAEA-32EC-801D-17351A533424} - {B10F275C-B56F-3BA8-BF46-986ADD550EBD} + {495AFD90-1F7B-3DEB-8921-1E412B30C27A} - {C70C7932-7612-37CF-8DA4-061D57BFE0B0} + {EC6552DA-7692-32A9-B336-9A54F08489A9} - {3D94B855-B778-3E9F-82A2-30F7E9B0A3E9} + {A94C9334-CC48-3EF6-9EC2-2EA1DFAC35F4} - {61831B64-0AB3-3175-82EF-839545EB69F8} + {9FDFAAC1-A9BB-3420-838B-BDBF56B039E7} - {B1B2929D-5025-3DF8-A81A-C01DBEE00A26} + {EEA0D074-31D9-3639-83EA-8C40E630C306} - {9B52652A-BD36-3DC0-80F2-6BE3B290D959} + {A4E21323-B7C1-3990-A314-CC85C00FAD12} - {40EAB6ED-AF62-3D1E-A71F-38191BA55444} + {3C996A1B-5885-346D-8738-81E5128FA8E7} - {C50368B5-DAF7-36DB-8F1F-55041E87C0AF} + {DC735B06-614F-3141-9A16-8F375902EB70} diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/IndirectDispatch/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/IndirectDispatch/public/imgui.h index 3ac13648..e3903fcc 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/IndirectDispatch/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/IndirectDispatch/public/imgui.h @@ -40,7 +40,6 @@ namespace IndirectDispatch ImGui::Text("Dispatch_Count_1"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } { float width = ImGui::GetContentRegionAvail().x / 4.0f; @@ -61,10 +60,8 @@ namespace IndirectDispatch ImGui::Text("Dispatch_Count_2"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::InputInt("Second_Dispatch_Offset", &context->m_input.variable_Second_Dispatch_Offset, 0); - ShowToolTip(""); ImGui::Checkbox("Profile", &context->m_profile); if (context->m_profile) diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/SlangAutoDiff/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/SlangAutoDiff/public/imgui.h index 36b51e4e..e7772d9c 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/SlangAutoDiff/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/SlangAutoDiff/public/imgui.h @@ -22,17 +22,11 @@ namespace SlangAutoDiff ImGui::PushID("gigi_SlangAutoDiff"); ImGui::InputInt("NumGaussians", &context->m_input.variable_NumGaussians, 0); - ShowToolTip(""); context->m_input.variable_Reset = ImGui::Button("Reset"); - ShowToolTip(""); ImGui::InputFloat("LearningRate", &context->m_input.variable_LearningRate); - ShowToolTip(""); ImGui::InputFloat("MaximumStepSize", &context->m_input.variable_MaximumStepSize); - ShowToolTip(""); ImGui::Checkbox("UseBackwardAD", &context->m_input.variable_UseBackwardAD); - ShowToolTip(""); ImGui::Checkbox("QuantizeDisplay", &context->m_input.variable_QuantizeDisplay); - ShowToolTip(""); ImGui::Checkbox("Profile", &context->m_profile); if (context->m_profile) diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/boxblur/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/boxblur/public/imgui.h index 9a885790..4feef9a4 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/boxblur/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Compute/boxblur/public/imgui.h @@ -26,7 +26,6 @@ namespace boxblur ImGui::InputInt("radius", &context->m_input.variable_radius, 0); ShowToolTip("The radius of the blur. Actual size in pixles of the blur is (radius*2+1)^2"); ImGui::Checkbox("sRGB", &context->m_input.variable_sRGB); - ShowToolTip(""); ImGui::Checkbox("Profile", &context->m_profile); if (context->m_profile) diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/CopyResource/CopyResourceTest/private/technique.cpp b/_GeneratedCode/UnitTests/DX12/UnitTests/CopyResource/CopyResourceTest/private/technique.cpp index 3ee553ac..ebaf78b5 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/CopyResource/CopyResourceTest/private/technique.cpp +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/CopyResource/CopyResourceTest/private/technique.cpp @@ -759,8 +759,8 @@ namespace CopyResourceTest if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "Copy_Texture_To_Texture"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "Copy_Texture_To_Texture"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } @@ -794,8 +794,8 @@ namespace CopyResourceTest if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "Copy_Texture_To_Buffer"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "Copy_Texture_To_Buffer"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } @@ -829,8 +829,8 @@ namespace CopyResourceTest if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "Copy_Buffer_To_Texture"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "Copy_Buffer_To_Texture"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } @@ -849,8 +849,8 @@ namespace CopyResourceTest if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "Copy_Buffer_To_Buffer"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "Copy_Buffer_To_Buffer"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/CopyResource/CopyResourceTest_FB/private/technique.cpp b/_GeneratedCode/UnitTests/DX12/UnitTests/CopyResource/CopyResourceTest_FB/private/technique.cpp index 74f6b64d..b72a27ce 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/CopyResource/CopyResourceTest_FB/private/technique.cpp +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/CopyResource/CopyResourceTest_FB/private/technique.cpp @@ -745,8 +745,8 @@ namespace CopyResourceTest_FB if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "Copy_Texture_To_Texture"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "Copy_Texture_To_Texture"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } @@ -765,8 +765,8 @@ namespace CopyResourceTest_FB if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "Copy_Buffer_To_Buffer"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "Copy_Buffer_To_Buffer"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/MeshShaders/MeshAmplification/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/MeshShaders/MeshAmplification/public/imgui.h index 2d937dd3..b0f9a2ce 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/MeshShaders/MeshAmplification/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/MeshShaders/MeshAmplification/public/imgui.h @@ -25,10 +25,8 @@ namespace MeshAmplification int localVar = (int)context->m_input.variable_AmplificationCount; if(ImGui::InputInt("AmplificationCount", &localVar, 0)) context->m_input.variable_AmplificationCount = (unsigned int)localVar; - ShowToolTip(""); } ImGui::InputFloat("AmplificationSpacing", &context->m_input.variable_AmplificationSpacing); - ShowToolTip(""); { float width = ImGui::GetContentRegionAvail().x / 5.0f; ImGui::PushID("Offset"); @@ -42,7 +40,6 @@ namespace MeshAmplification ImGui::Text("Offset"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/MeshShaders/MeshAmplificationLines/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/MeshShaders/MeshAmplificationLines/public/imgui.h index 983a9baa..39c72abf 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/MeshShaders/MeshAmplificationLines/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/MeshShaders/MeshAmplificationLines/public/imgui.h @@ -25,10 +25,8 @@ namespace MeshAmplificationLines int localVar = (int)context->m_input.variable_AmplificationCount; if(ImGui::InputInt("AmplificationCount", &localVar, 0)) context->m_input.variable_AmplificationCount = (unsigned int)localVar; - ShowToolTip(""); } ImGui::InputFloat("AmplificationSpacing", &context->m_input.variable_AmplificationSpacing); - ShowToolTip(""); { float width = ImGui::GetContentRegionAvail().x / 5.0f; ImGui::PushID("Offset"); @@ -42,7 +40,6 @@ namespace MeshAmplificationLines ImGui::Text("Offset"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_NoInstance/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_NoInstance/public/imgui.h index 8a5d46e3..14492ed2 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_NoInstance/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_NoInstance/public/imgui.h @@ -28,7 +28,6 @@ namespace YesVertexStruct_NoIndex_NoInstance "Solid", }; ImGui::Combo("viewMode", (int*)&context->m_input.variable_viewMode, labels, 3); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceStruct/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceStruct/public/imgui.h index 9efe3da7..8ec7882c 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceStruct/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceStruct/public/imgui.h @@ -28,7 +28,6 @@ namespace YesVertexStruct_NoIndex_YesInstanceStruct "Solid", }; ImGui::Combo("viewMode", (int*)&context->m_input.variable_viewMode, labels, 3); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceType/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceType/public/imgui.h index a2bd4267..36601369 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceType/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_NoIndex_YesInstanceType/public/imgui.h @@ -28,7 +28,6 @@ namespace YesVertexStruct_NoIndex_YesInstanceType "Solid", }; ImGui::Combo("viewMode", (int*)&context->m_input.variable_viewMode, labels, 3); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_YesIndex_NoInstance/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_YesIndex_NoInstance/public/imgui.h index 8a82ed3c..834dba2a 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_YesIndex_NoInstance/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Raster/YesVertexStruct_YesIndex_NoInstance/public/imgui.h @@ -27,7 +27,6 @@ namespace YesVertexStruct_YesIndex_NoInstance "Solid", }; ImGui::Combo("viewMode", (int*)&context->m_input.variable_viewMode, labels, 2); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/TwoRayGens/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/TwoRayGens/public/imgui.h index 4aca3253..b967c05f 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/TwoRayGens/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/TwoRayGens/public/imgui.h @@ -34,7 +34,6 @@ namespace TwoRayGens ImGui::Text("hitColor"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } { float width = ImGui::GetContentRegionAvail().x / 5.0f; @@ -49,7 +48,6 @@ namespace TwoRayGens ImGui::Text("missColor"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/TwoRayGensSubgraph/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/TwoRayGensSubgraph/public/imgui.h index 4d92da6c..40c43472 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/TwoRayGensSubgraph/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/TwoRayGensSubgraph/public/imgui.h @@ -34,7 +34,6 @@ namespace TwoRayGensSubgraph ImGui::Text("hitColor"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } { float width = ImGui::GetContentRegionAvail().x / 5.0f; @@ -49,7 +48,6 @@ namespace TwoRayGensSubgraph ImGui::Text("missColor"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/simpleRT/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/simpleRT/public/imgui.h index 8627e7dc..82414eb1 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/simpleRT/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/simpleRT/public/imgui.h @@ -22,7 +22,6 @@ namespace simpleRT ImGui::PushID("gigi_simpleRT"); ImGui::Checkbox("enabled", &context->m_input.variable_enabled); - ShowToolTip(""); { float width = ImGui::GetContentRegionAvail().x / 5.0f; ImGui::PushID("hitColor"); @@ -36,7 +35,6 @@ namespace simpleRT ImGui::Text("hitColor"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } { float width = ImGui::GetContentRegionAvail().x / 5.0f; @@ -51,7 +49,6 @@ namespace simpleRT ImGui::Text("missColor"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/simpleRT_inline/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/simpleRT_inline/public/imgui.h index 1f150409..8886b8cf 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/simpleRT_inline/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/RayTrace/simpleRT_inline/public/imgui.h @@ -22,7 +22,6 @@ namespace simpleRT_inline ImGui::PushID("gigi_simpleRT_inline"); ImGui::Checkbox("enabled", &context->m_input.variable_enabled); - ShowToolTip(""); { float width = ImGui::GetContentRegionAvail().x / 5.0f; ImGui::PushID("hitColor"); @@ -36,7 +35,6 @@ namespace simpleRT_inline ImGui::Text("hitColor"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } { float width = ImGui::GetContentRegionAvail().x / 5.0f; @@ -51,7 +49,6 @@ namespace simpleRT_inline ImGui::Text("missColor"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphLoops/private/technique.cpp b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphLoops/private/technique.cpp index a1b8df78..64cec351 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphLoops/private/technique.cpp +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphLoops/private/technique.cpp @@ -1165,8 +1165,8 @@ namespace SubGraphLoops if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "FilterSub_Iteration_0_Copy_back"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "FilterSub_Iteration_0_Copy_back"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } @@ -1278,8 +1278,8 @@ namespace SubGraphLoops if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "FilterSub_Iteration_1_Copy_back"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "FilterSub_Iteration_1_Copy_back"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } @@ -1391,8 +1391,8 @@ namespace SubGraphLoops if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "FilterSub_Iteration_2_Copy_back"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "FilterSub_Iteration_2_Copy_back"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } @@ -1504,8 +1504,8 @@ namespace SubGraphLoops if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "FilterSub_Iteration_3_Copy_back"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "FilterSub_Iteration_3_Copy_back"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } @@ -1617,8 +1617,8 @@ namespace SubGraphLoops if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "FilterSub_Iteration_4_Copy_back"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "FilterSub_Iteration_4_Copy_back"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphLoops/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphLoops/public/imgui.h index d0af8c83..280fc87f 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphLoops/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphLoops/public/imgui.h @@ -22,15 +22,10 @@ namespace SubGraphLoops ImGui::PushID("gigi_SubGraphLoops"); ImGui::Checkbox("FilterSub_Iteration_0_sRGB", &context->m_input.variable_FilterSub_Iteration_0_sRGB); - ShowToolTip(""); ImGui::Checkbox("FilterSub_Iteration_1_sRGB", &context->m_input.variable_FilterSub_Iteration_1_sRGB); - ShowToolTip(""); ImGui::Checkbox("FilterSub_Iteration_2_sRGB", &context->m_input.variable_FilterSub_Iteration_2_sRGB); - ShowToolTip(""); ImGui::Checkbox("FilterSub_Iteration_3_sRGB", &context->m_input.variable_FilterSub_Iteration_3_sRGB); - ShowToolTip(""); ImGui::Checkbox("FilterSub_Iteration_4_sRGB", &context->m_input.variable_FilterSub_Iteration_4_sRGB); - ShowToolTip(""); ImGui::Checkbox("Profile", &context->m_profile); if (context->m_profile) diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphTest/private/technique.cpp b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphTest/private/technique.cpp index 649ff369..b2697c41 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphTest/private/technique.cpp +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubGraphTest/private/technique.cpp @@ -780,8 +780,8 @@ namespace SubGraphTest if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "Inner_Copy_Import_To_Export"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "Inner_Copy_Import_To_Export"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubInSub/private/technique.cpp b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubInSub/private/technique.cpp index d62ad547..4ea229bf 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubInSub/private/technique.cpp +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubInSub/private/technique.cpp @@ -872,8 +872,8 @@ namespace SubInSub if(context->m_profile) { - context->m_profileData[s_timerIndex].m_label = "Inner1_Inner2_Copy_Back"; - context->m_profileData[s_timerIndex].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); + context->m_profileData[(s_timerIndex-1)/2].m_label = "Inner1_Inner2_Copy_Back"; + context->m_profileData[(s_timerIndex-1)/2].m_cpu = (float)std::chrono::duration_cast>(std::chrono::high_resolution_clock::now() - startPointCPU).count(); commandList->EndQuery(context->m_internal.m_TimestampQueryHeap, D3D12_QUERY_TYPE_TIMESTAMP, s_timerIndex++); } } diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubInSub/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubInSub/public/imgui.h index 5984e432..b801fc7f 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubInSub/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/SubGraph/SubInSub/public/imgui.h @@ -36,7 +36,6 @@ namespace SubInSub ImGui::Text("Inner1_Inner1Mult"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_2D/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_2D/public/imgui.h index b164a31c..57ab4f53 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_2D/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_2D/public/imgui.h @@ -36,7 +36,6 @@ namespace Mips_CS_2D ImGui::Text("RenderSize"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_2DArray/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_2DArray/public/imgui.h index c0b66114..ef88beeb 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_2DArray/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_2DArray/public/imgui.h @@ -36,7 +36,6 @@ namespace Mips_CS_2DArray ImGui::Text("RenderSize"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_3D/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_3D/public/imgui.h index d344b23c..4a411775 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_3D/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_3D/public/imgui.h @@ -40,7 +40,6 @@ namespace Mips_CS_3D ImGui::Text("RenderSize"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_Cube/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_Cube/public/imgui.h index e9f77eda..8c27884b 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_Cube/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_CS_Cube/public/imgui.h @@ -36,7 +36,6 @@ namespace Mips_CS_Cube ImGui::Text("RenderSize"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_DrawCall/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_DrawCall/public/imgui.h index e2c83de0..fa777c23 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_DrawCall/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_DrawCall/public/imgui.h @@ -22,7 +22,6 @@ namespace Mips_DrawCall ImGui::PushID("gigi_Mips_DrawCall"); ImGui::Checkbox("UseMips", &context->m_input.variable_UseMips); - ShowToolTip(""); { float width = ImGui::GetContentRegionAvail().x / 4.0f; ImGui::PushID("RenderSize"); @@ -38,7 +37,6 @@ namespace Mips_DrawCall ImGui::Text("RenderSize"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_VSPS_2D/public/imgui.h b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_VSPS_2D/public/imgui.h index d73c8619..4ea6cea5 100644 --- a/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_VSPS_2D/public/imgui.h +++ b/_GeneratedCode/UnitTests/DX12/UnitTests/Textures/Mips_VSPS_2D/public/imgui.h @@ -36,7 +36,6 @@ namespace Mips_VSPS_2D ImGui::Text("RenderSize"); ImGui::PopItemWidth(); ImGui::PopID(); - ShowToolTip(""); } ImGui::Checkbox("Profile", &context->m_profile); diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/.signature.p7s b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/.signature.p7s deleted file mode 100644 index c4a07bd9..00000000 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/.signature.p7s and /dev/null differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEvents.h b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEvents.h deleted file mode 100644 index ec5f2ed5..00000000 --- a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEvents.h +++ /dev/null @@ -1,661 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: PIXEvents.h - * Content: PIX include file - * Don't include this file directly - use pix3.h - * - ****************************************************************************/ -#pragma once - -#ifndef _PixEvents_H_ -#define _PixEvents_H_ - -#ifndef _PIX3_H_ -# error Do not include this file directly - use pix3.h -#endif - -#include "PIXEventsCommon.h" - -#if _MSC_VER < 1800 -# error This version of pix3.h is only supported on Visual Studio 2013 or higher -#elif _MSC_VER < 1900 -# ifndef constexpr // Visual Studio 2013 doesn't support constexpr -# define constexpr -# define PIX3__DEFINED_CONSTEXPR -# endif -#endif - -// Xbox does not support CPU events for retail scenarios -#if defined(USE_PIX) || !defined(PIX_XBOX) -#define PIX_CONTEXT_EMIT_CPU_EVENTS -#endif - -namespace PIXEventsDetail -{ - template - struct PIXEventTypeInferer - { - static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_VarArgs; } - static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_VarArgs; } - static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } - static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } - - // Xbox and Windows store different types of events for context events. - // On Xbox these include a context argument, while on Windows they do - // not. It is important not to change the event types used on the - // Windows version as there are OS components (eg debug layer & DRED) - // that decode event structs. -#ifdef PIX_XBOX - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } -#else - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_VarArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_VarArgs; } -#endif - }; - - template<> - struct PIXEventTypeInferer<> - { - static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_NoArgs; } - static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_NoArgs; } - static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } - static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } - -#ifdef PIX_XBOX - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } -#else - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_NoArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_NoArgs; } -#endif - }; - - inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit) - { - // nothing - UNREFERENCED_PARAMETER(destination); - UNREFERENCED_PARAMETER(limit); - } - - template - void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) - { - PIXCopyEventArgument(destination, limit, arg); - PIXCopyEventArguments(destination, limit, args...); - } - - template - __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::Begin()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXBeginEvent(UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::Begin()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXBeginEventAllocate(threadInfo, color, formatString, args...); - } - } - } - - template - __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarker()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXSetMarker(UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarker()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXSetMarkerAllocate(threadInfo, color, formatString, args...); - } - } - } - - template - __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::BeginOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - UNREFERENCED_PARAMETER(context); - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXBeginEventOnContextCpu(void* context, UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::BeginOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXBeginEventOnContextCpuAllocate(threadInfo, context, color, formatString, args...); - } - } - } - - template - void PIXBeginEvent(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS - PIXBeginEventOnContextCpu(context, color, formatString, args...); -#endif - - // TODO: we've already encoded this once for the CPU event - figure out way to avoid doing it again - UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; - UINT64* destination = buffer; - UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; - - *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuBeginOnContext()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - *destination = 0ull; - - PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); - } - - template - __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarkerOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - UNREFERENCED_PARAMETER(context); - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXSetMarkerOnContextCpu(void* context, UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarkerOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXSetMarkerOnContextCpuAllocate(threadInfo, context, color, formatString, args...); - } - } - } - - template - void PIXSetMarker(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS - PIXSetMarkerOnContextCpu(context, color, formatString, args...); -#endif - - UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; - UINT64* destination = buffer; - UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; - - *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuSetMarkerOnContext()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - *destination = 0ull; - - PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); - } - - __declspec(noinline) inline void PIXEndEventAllocate(PIXEventsThreadInfo* threadInfo) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(true); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, true); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent); - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - inline void PIXEndEvent() - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent); - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXEndEventAllocate(threadInfo); - } - } - } - - __declspec(noinline) inline void PIXEndEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(true); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, true); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent_OnContext); -#ifdef PIX_XBOX - UNREFERENCED_PARAMETER(context); -#else - PIXCopyEventArgument(destination, limit, context); -#endif - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - inline void PIXEndEventOnContextCpu(void* context) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent_OnContext); -#ifndef PIX_XBOX - PIXCopyEventArgument(destination, limit, context); -#endif - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXEndEventOnContextCpuAllocate(threadInfo, context); - } - } - } - - template - void PIXEndEvent(CONTEXT* context) - { -#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS - PIXEndEventOnContextCpu(context); -#endif - PIXEndGPUEventOnContext(context); - } -} - -#if defined(USE_PIX) - -template -void PIXBeginEvent(UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(color, formatString, args...); -} - -template -void PIXBeginEvent(UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(color, formatString, args...); -} - -template -void PIXSetMarker(UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(color, formatString, args...); -} - -template -void PIXSetMarker(UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(color, formatString, args...); -} - -template -void PIXBeginEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXBeginEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXSetMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -template -void PIXSetMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -inline void PIXEndEvent() -{ - PIXEventsDetail::PIXEndEvent(); -} - -template -void PIXEndEvent(CONTEXT* context) -{ - PIXEventsDetail::PIXEndEvent(context); -} - -#else // USE_PIX_RETAIL - -inline void PIXBeginEvent(UINT64, _In_ PCSTR, ...) {} -inline void PIXBeginEvent(UINT64, _In_ PCWSTR, ...) {} -inline void PIXBeginEvent(void*, UINT64, _In_ PCSTR, ...) {} -inline void PIXBeginEvent(void*, UINT64, _In_ PCWSTR, ...) {} -inline void PIXEndEvent() {} -inline void PIXEndEvent(void*) {} -inline void PIXSetMarker(UINT64, _In_ PCSTR, ...) {} -inline void PIXSetMarker(UINT64, _In_ PCWSTR, ...) {} -inline void PIXSetMarker(void*, UINT64, _In_ PCSTR, ...) {} -inline void PIXSetMarker(void*, UINT64, _In_ PCWSTR, ...) {} - -#endif // USE_PIX - -template -void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -template -void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -template -void PIXEndRetailEvent(CONTEXT* context) -{ - PIXEventsDetail::PIXEndEvent(context); -} - -template -class PIXScopedEventObject -{ - CONTEXT* m_context; - -public: - template - PIXScopedEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginEvent(m_context, color, formatString, args...); - } - - template - PIXScopedEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginEvent(m_context, color, formatString, args...); - } - - ~PIXScopedEventObject() - { - PIXEndEvent(m_context); - } -}; - -template -class PIXScopedRetailEventObject -{ - CONTEXT* m_context; - -public: - template - PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginRetailEvent(m_context, color, formatString, args...); - } - - template - PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginRetailEvent(m_context, color, formatString, args...); - } - - ~PIXScopedRetailEventObject() - { - PIXEndRetailEvent(m_context); - } -}; - -template<> -class PIXScopedEventObject -{ -public: - template - PIXScopedEventObject(UINT64 color, PCWSTR formatString, ARGS... args) - { - PIXBeginEvent(color, formatString, args...); - } - - template - PIXScopedEventObject(UINT64 color, PCSTR formatString, ARGS... args) - { - PIXBeginEvent(color, formatString, args...); - } - - ~PIXScopedEventObject() - { - PIXEndEvent(); - } -}; - -#define PIXConcatenate(a, b) a ## b -#define PIXGetScopedEventVariableName(a, b) PIXConcatenate(a, b) -#define PIXScopedEvent(context, ...) PIXScopedEventObject::Type> PIXGetScopedEventVariableName(pixEvent, __LINE__)(context, __VA_ARGS__) - -#ifdef PIX3__DEFINED_CONSTEXPR -#undef constexpr -#undef PIX3__DEFINED_CONSTEXPR -#endif - -#endif // _PIXEvents_H__ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/WinPixEventRuntime.1.0.230302001.nupkg b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/WinPixEventRuntime.1.0.230302001.nupkg deleted file mode 100644 index 0033034a..00000000 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/WinPixEventRuntime.1.0.230302001.nupkg and /dev/null differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.dll b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.dll deleted file mode 100644 index 236c67ba..00000000 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.dll and /dev/null differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.dll b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.dll deleted file mode 100644 index 46a7e8f4..00000000 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.dll and /dev/null differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.dll b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.dll deleted file mode 100644 index 0e2f75c5..00000000 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.dll and /dev/null differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.dll b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.dll deleted file mode 100644 index a69e26cd..00000000 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.dll and /dev/null differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/license.txt b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/license.txt deleted file mode 100644 index 50976a56..00000000 --- a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/license.txt +++ /dev/null @@ -1,78 +0,0 @@ -MICROSOFT SOFTWARE LICENSE TERMS - -PIX EVENT RUNTIME FOR WINDOWS - -IF YOU LIVE IN (OR ARE A BUSINESS WITH A PRINCIPAL PLACE OF BUSINESS IN) THE UNITED STATES, PLEASE READ THE “BINDING ARBITRATION AND CLASS ACTION WAIVER” SECTION BELOW. IT AFFECTS HOW DISPUTES ARE RESOLVED. - -These license terms are an agreement between you and Microsoft Corporation (or one of its affiliates). They apply to the software named above and any Microsoft services or software updates (except to the extent such services or updates are accompanied by new or additional terms, in which case those different terms apply prospectively and do not alter your or Microsoft’s rights relating to pre-updated software or services). IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. - -1. INSTALLATION AND USE RIGHTS. - a. General. You may install and use any number of copies of the software to design, develop and test your Microsoft Windows programs. - b. Third Party Software. The software may include third party applications that are licensed to you under this agreement or under their own terms. License terms, notices, and acknowledgements, if any, for the third party applications may be accessible online at http://aka.ms/thirdpartynotices or in an accompanying notices file. Even if such applications are governed by other agreements, the disclaimer, limitations on, and exclusions of damages below also apply to the extent allowed by applicable law. - -2. DISTRIBUTABLE CODE. - a. Distributable Code. The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in programs you develop if you comply with the terms below. - (i) Right to Use and Distribute. - * You may copy and distribute the object code form of the software. - * Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. - (ii) Distribution Requirements. For any Distributable Code you distribute, you must - * add significant primary functionality to it in your programs; - * require distributors and external end users to agree to terms that protect it at least as much as this agreement; - * display your valid copyright notice on your programs; and - * indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your programs. - (iii) Distribution Restrictions. You may not - * alter any copyright, trademark or patent notice in the Distributable Code; - * use Microsoft’s trademarks in your programs’ names or in a way that suggests your programs come from or are endorsed by Microsoft; - * distribute Distributable Code to run on a platform other than a Windows platform; - * include Distributable Code in malicious, deceptive or unlawful programs; or - * modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that - * the code be disclosed or distributed in source code form; or - * others have the right to modify it. - -3. SCOPE OF LICENSE. The software is licensed, not sold. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you will not (and have no right to): - a. work around any technical limitations in the software that only allow you to use it in certain ways; - b. reverse engineer, decompile or disassemble the software; - c. remove, minimize, block, or modify any notices of Microsoft or its suppliers in the software; - d. use the software in any way that is against the law or to create or propagate malware; or - e. share, publish, distribute, or lend the software, provide the software as a stand-alone hosted solution for others to use, or transfer the software or this agreement to any third party. - -4. EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit http://aka.ms/exporting. - -5. SUPPORT SERVICES. Microsoft is not obligated under this agreement to provide any support services for the software. Any support provided is “as is”, “with all faults”, and without warranty of any kind. - -6. BINDING ARBITRATION AND CLASS ACTION WAIVER. This Section applies if you live in (or, if a business, your principal place of business is in) the United States. If you and Microsoft have a dispute, you and Microsoft agree to try for 60 days to resolve it informally. If you and Microsoft can’t, you and Microsoft agree to binding individual arbitration before the American Arbitration Association under the Federal Arbitration Act (“FAA”), and not to sue in court in front of a judge or jury. Instead, a neutral arbitrator will decide. Class action lawsuits, class-wide arbitrations, private attorney-general actions, and any other proceeding where someone acts in a representative capacity are not allowed; nor is combining individual proceedings without the consent of all parties. The complete Arbitration Agreement contains more terms and is at http://aka.ms/arb-agreement-1. You and Microsoft agree to these terms. - -7. ENTIRE AGREEMENT. This agreement, and any other terms Microsoft may provide for supplements, updates, or third-party applications, is the entire agreement for the software. - -8. APPLICABLE LAW AND PLACE TO RESOLVE DISPUTES. If you acquired the software in the United States or Canada, the laws of the state or province where you live (or, if a business, where your principal place of business is located) govern the interpretation of this agreement, claims for its breach, and all other claims (including consumer protection, unfair competition, and tort claims), regardless of conflict of laws principles, except that the FAA governs everything related to arbitration. If you acquired the software in any other country, its laws apply, except that the FAA governs everything related to arbitration. If U.S. federal jurisdiction exists, you and Microsoft consent to exclusive jurisdiction and venue in the federal court in King County, Washington for all disputes heard in court (excluding arbitration). If not, you and Microsoft consent to exclusive jurisdiction and venue in the Superior Court of King County, Washington for all disputes heard in court (excluding arbitration). - -9. CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state, province, or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state, province, or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: - a. Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. - b. Canada. If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. - c. Germany and Austria. - (i) Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However, Microsoft gives no contractual guarantee in relation to the licensed software. - (ii) Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable according to the statutory law. - Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence. - -10. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. - -11. LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. -This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, warranty, guarantee, or condition; strict liability, negligence, or other tort; or any other claim; in each case to the extent permitted by applicable law. -It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state, province, or country may not allow the exclusion or limitation of incidental, consequential, or other damages. - - -[Please note: As this software is distributed in Canada, some of the clauses in this agreement are provided below in French. - -Remarque: Ce logiciel étant distribué au Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français. - -EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d’adéquation à un usage particulier et d’absence de contrefaçon sont exclues. - -LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices. - -Cette limitation concerne: - * tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers; et - * les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d’une autre faute dans la limite autorisée par la loi en vigueur. - -Elle s’applique également, même si Microsoft connaissait ou devrait connaître l’éventualité d’un tel dommage. Si votre pays n’autorise pas l’exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l’exclusion ci-dessus ne s’appliquera pas à votre égard. - -EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d’autres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas.] diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEvents.h b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEvents.h new file mode 100644 index 00000000..1a9fdf0d --- /dev/null +++ b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEvents.h @@ -0,0 +1,1578 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Don't include this file directly - use pix3.h + +#pragma once + +#ifndef _PixEvents_H_ +#define _PixEvents_H_ + +#ifndef _PIX3_H_ +# error Do not include this file directly - use pix3.h +#endif + +#include "PIXEventsCommon.h" + +#if _MSC_VER < 1800 +# error This version of pix3.h is only supported on Visual Studio 2013 or higher +#elif _MSC_VER < 1900 +# ifndef constexpr // Visual Studio 2013 doesn't support constexpr +# define constexpr +# define PIX3__DEFINED_CONSTEXPR +# endif +#endif + + // Xbox does not support CPU events for retail scenarios +#if defined(USE_PIX) || !defined(PIX_XBOX) +#define PIX_CONTEXT_EMIT_CPU_EVENTS +#endif + +namespace PIXEventsDetail +{ + inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit) + { + // nothing + UNREFERENCED_PARAMETER(destination); + UNREFERENCED_PARAMETER(limit); + } + + template + void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) + { + PIXCopyEventArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); + } + + template + void PIXCopyStringArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) + { + PIXCopyStringArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); + } + + template + void PIXCopyStringArgumentsWithContext(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, void* context, ARG const& arg, ARGS const&... args) + { +#ifdef PIX_XBOX + UNREFERENCED_PARAMETER(context); + PIXCopyStringArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); +#else + PIXCopyEventArgument(destination, limit, context); + PIXCopyStringArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); +#endif + } + + inline UINT8 PIXGetEventSize(const UINT64* end, const UINT64* start) + { + const UINT64 actualEventSize = end - start; + + return static_cast(actualEventSize > PIXEventsSizeMax ? PIXEventsSizeMax : actualEventSize); + } + + template + inline UINT8 PIXEncodeStringIsAnsi() + { + return PIX_EVENT_METADATA_NONE; + } + + template<> + inline UINT8 PIXEncodeStringIsAnsi() + { + return PIX_EVENT_METADATA_STRING_IS_ANSI; + } + + template<> + inline UINT8 PIXEncodeStringIsAnsi() + { + return PIX_EVENT_METADATA_STRING_IS_ANSI; + } + + template + __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_HAS_COLOR | + PIXEncodeStringIsAnsi(); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEvent(UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_HAS_COLOR | + PIXEncodeStringIsAnsi(); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEvent(UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarker(UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarker(UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEventOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXBeginEvent(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXBeginEventOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_BeginEvent, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeBeginEventForContext(buffer, color, formatString, args...); + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + template + __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEventOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXBeginEvent(CONTEXT* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXBeginEventOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_BeginEvent, eventSize, eventMetadata); + + PIXInsertGPUMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeBeginEventForContext(buffer, color, formatString, args...); + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + template + __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarkerOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXSetMarker(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXSetMarkerOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_SetMarker, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeSetMarkerForContext(buffer, color, formatString, args...); + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + template + __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarkerOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXSetMarker(CONTEXT* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXSetMarkerOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_SetMarker, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeSetMarkerForContext(buffer, color, formatString, args...); + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + __declspec(noinline) inline void PIXEndEventAllocate(PIXEventsThreadInfo* threadInfo) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, true); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + const UINT8 eventSize = 1; + const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + *destination = PIXEventsBlockEndMarker; + + threadInfo->destination = destination; + } + + inline void PIXEndEvent() + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + const UINT8 eventSize = 1; + const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + *destination = PIXEventsBlockEndMarker; + + threadInfo->destination = destination; + } + else + { + PIXEndEventAllocate(threadInfo); + } + } + } + + __declspec(noinline) inline UINT64* PIXEndEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, true); + if (!time) + return nullptr; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return nullptr; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; +#ifdef PIX_XBOX + UNREFERENCED_PARAMETER(context); +#else + PIXCopyEventArgument(destination, limit, context); +#endif + * destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = PIX_EVENT_METADATA_ON_CONTEXT; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + + return eventDestination; + } + + inline UINT64* PIXEndEventOnContextCpu(void* context) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; +#ifndef PIX_XBOX + PIXCopyEventArgument(destination, limit, context); +#endif + * destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = PIX_EVENT_METADATA_ON_CONTEXT; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + + return eventDestination; + } + else + { + return PIXEndEventOnContextCpuAllocate(threadInfo, context); + } + } + + return nullptr; + } + + template + void PIXEndEvent(CONTEXT* context) + { + UINT64* destination = nullptr; +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + destination = PIXEndEventOnContextCpu(context); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForEndEvent(context, PIXEvent_EndEvent); + } + else +#endif + { +#ifdef PIX_USE_GPU_MARKERS_V2 + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + destination = buffer; + + UINT64* eventDestination = destination++; + + const UINT8 eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE; + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_EndEvent, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForEndEvent(context, PIXEvent_EndEvent, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + PIXEndGPUEventOnContext(context); +#endif + } + } +} + +#if defined(USE_PIX) + +template +void PIXBeginEvent(UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXBeginEvent(UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXBeginEvent(UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXBeginEvent(UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXSetMarker(UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXSetMarker(UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXSetMarker(UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXSetMarker(UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +inline void PIXEndEvent() +{ + PIXEventsDetail::PIXEndEvent(); +} + +template +void PIXEndEvent(CONTEXT* context) +{ + PIXEventsDetail::PIXEndEvent(context); +} + +#else // USE_PIX_RETAIL + +inline void PIXBeginEvent(UINT64, _In_ PCSTR, ...) {} +inline void PIXBeginEvent(UINT64, _In_ PCWSTR, ...) {} +inline void PIXBeginEvent(void*, UINT64, _In_ PCSTR, ...) {} +inline void PIXBeginEvent(void*, UINT64, _In_ PCWSTR, ...) {} +inline void PIXEndEvent() {} +inline void PIXEndEvent(void*) {} +inline void PIXSetMarker(UINT64, _In_ PCSTR, ...) {} +inline void PIXSetMarker(UINT64, _In_ PCWSTR, ...) {} +inline void PIXSetMarker(void*, UINT64, _In_ PCSTR, ...) {} +inline void PIXSetMarker(void*, UINT64, _In_ PCWSTR, ...) {} + +#endif // USE_PIX + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXEndRetailEvent(CONTEXT* context) +{ + PIXEventsDetail::PIXEndEvent(context); +} + +template +class PIXScopedEventObject +{ + CONTEXT* m_context; + +public: + template + PIXScopedEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + ~PIXScopedEventObject() + { + PIXEndEvent(m_context); + } +}; + +template +class PIXScopedRetailEventObject +{ + CONTEXT* m_context; + +public: + template + PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + ~PIXScopedRetailEventObject() + { + PIXEndRetailEvent(m_context); + } +}; + +template<> +class PIXScopedEventObject +{ +public: + template + PIXScopedEventObject(UINT64 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT64 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT32 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT32 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(INT32 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(INT32 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(DWORD color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(DWORD color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT8 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT8 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + ~PIXScopedEventObject() + { + PIXEndEvent(); + } +}; + +#define PIXConcatenate(a, b) a ## b +#define PIXGetScopedEventVariableName(a, b) PIXConcatenate(a, b) +#define PIXScopedEvent(context, ...) PIXScopedEventObject::Type> PIXGetScopedEventVariableName(pixEvent, __LINE__)(context, __VA_ARGS__) + +#ifdef PIX3__DEFINED_CONSTEXPR +#undef constexpr +#undef PIX3__DEFINED_CONSTEXPR +#endif + +#endif // _PIXEvents_H__ + diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEventsCommon.h b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsCommon.h similarity index 61% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEventsCommon.h rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsCommon.h index a9c21d97..ff26230c 100644 --- a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEventsCommon.h +++ b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsCommon.h @@ -1,29 +1,12 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; -* -* Copyright (C) Microsoft Corporation. All Rights Reserved. -* -* File: PIXEventsCommon.h -* Content: PIX include file -* Don't include this file directly - use pix3.h -* -****************************************************************************/ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Don't include this file directly - use pix3.h + #pragma once #ifndef _PIXEventsCommon_H_ #define _PIXEventsCommon_H_ -#if defined(XBOX) || defined(_XBOX_ONE) || defined(_DURANGO) || defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT) -#define PIX_XBOX -#endif - -#include - -#if defined(_M_X64) || defined(_M_IX86) -#include -#endif - // // The PIXBeginEvent and PIXSetMarker functions have an optimized path for // copying strings that work by copying 128-bit or 64-bits at a time. In some @@ -73,32 +56,29 @@ struct PIXEventsThreadInfo UINT64* destination; }; -#ifdef PIX_XBOX -extern "C" UINT64 WINAPI PIXEventsReplaceBlock(bool getEarliestTime) noexcept; -#else extern "C" UINT64 WINAPI PIXEventsReplaceBlock(PIXEventsThreadInfo * threadInfo, bool getEarliestTime) noexcept; + +#define PIX_EVENT_METADATA_NONE 0x0 +#define PIX_EVENT_METADATA_ON_CONTEXT 0x1 +#define PIX_EVENT_METADATA_STRING_IS_ANSI 0x2 +#define PIX_EVENT_METADATA_HAS_COLOR 0xF0 + +#ifndef PIX_GAMING_XBOX +#include "PIXEventsLegacy.h" #endif -enum PIXEventType +enum PIXEventType : UINT8 { - PIXEvent_EndEvent = 0x000, - PIXEvent_BeginEvent_VarArgs = 0x001, - PIXEvent_BeginEvent_NoArgs = 0x002, - PIXEvent_SetMarker_VarArgs = 0x007, - PIXEvent_SetMarker_NoArgs = 0x008, - - PIXEvent_EndEvent_OnContext = 0x010, - PIXEvent_BeginEvent_OnContext_VarArgs = 0x011, - PIXEvent_BeginEvent_OnContext_NoArgs = 0x012, - PIXEvent_SetMarker_OnContext_VarArgs = 0x017, - PIXEvent_SetMarker_OnContext_NoArgs = 0x018, + PIXEvent_EndEvent = 0x00, + PIXEvent_BeginEvent = 0x01, + PIXEvent_SetMarker = 0x02, }; static const UINT64 PIXEventsReservedRecordSpaceQwords = 64; //this is used to make sure SSE string copy always will end 16-byte write in the current block //this way only a check if destination < limit can be performed, instead of destination < limit - 1 //since both these are UINT64* and SSE writes in 16 byte chunks, 8 bytes are kept in reserve -//so even if SSE overwrites 8 extra bytes, those will still belong to the correct block +//so even if SSE overwrites 8-15 extra bytes, those will still belong to the correct block //on next iteration check destination will be greater than limit //this is used as well for fixed size UMD events and PIXEndEvent since these require less space //than other variable length user events and do not need big reserved space @@ -109,20 +89,43 @@ static const UINT64 PIXEventsGraphicsRecordSpaceQwords = 64; //Bits 7-19 (13 bits) static const UINT64 PIXEventsBlockEndMarker = 0x00000000000FFF80; -//Bits 10-19 (10 bits) -static const UINT64 PIXEventsTypeReadMask = 0x00000000000FFC00; -static const UINT64 PIXEventsTypeWriteMask = 0x00000000000003FF; -static const UINT64 PIXEventsTypeBitShift = 10; -//Bits 20-63 (44 bits) -static const UINT64 PIXEventsTimestampReadMask = 0xFFFFFFFFFFF00000; +// V2 events + +// Bits 00..06 (7 bits) - Size in QWORDS +static const UINT64 PIXEventsSizeWriteMask = 0x000000000000007F; +static const UINT64 PIXEventsSizeBitShift = 0; +static const UINT64 PIXEventsSizeReadMask = PIXEventsSizeWriteMask << PIXEventsSizeBitShift; +static const UINT64 PIXEventsSizeMax = (1ull << 7) - 1ull; + +// Bits 07..11 (5 bits) - Event Type +static const UINT64 PIXEventsTypeWriteMask = 0x000000000000001F; +static const UINT64 PIXEventsTypeBitShift = 7; +static const UINT64 PIXEventsTypeReadMask = PIXEventsTypeWriteMask << PIXEventsTypeBitShift; + +// Bits 12..19 (8 bits) - Event Specific Metadata +static const UINT64 PIXEventsMetadataWriteMask = 0x00000000000000FF; +static const UINT64 PIXEventsMetadataBitShift = 12; +static const UINT64 PIXEventsMetadataReadMask = PIXEventsMetadataWriteMask << PIXEventsMetadataBitShift; + +// Buts 20..63 (44 bits) - Timestamp static const UINT64 PIXEventsTimestampWriteMask = 0x00000FFFFFFFFFFF; static const UINT64 PIXEventsTimestampBitShift = 20; +static const UINT64 PIXEventsTimestampReadMask = PIXEventsTimestampWriteMask << PIXEventsTimestampBitShift; + +inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType, UINT8 eventSize, UINT8 eventMetadata) +{ + return + ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | + (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift) | + (((UINT64)eventMetadata & PIXEventsMetadataWriteMask) << PIXEventsMetadataBitShift) | + (((UINT64)eventSize & PIXEventsSizeWriteMask) << PIXEventsSizeBitShift); +} -inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType) +inline UINT8 PIXEncodeIndexColor(UINT8 color) { - return ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | - (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift); + // There are 8 index colors, indexed 0 (default) to 7 + return (color & 0x7) << 4; } //Bits 60-63 (4) @@ -145,12 +148,13 @@ static const UINT64 PIXEventsStringIsShortcutWriteMask = 0x0000000000000001; static const UINT64 PIXEventsStringIsShortcutReadMask = 0x0020000000000000; static const UINT64 PIXEventsStringIsShortcutBitShift = 53; -inline UINT64 PIXEncodeStringInfo(UINT64 alignment, UINT64 copyChunkSize, BOOL isANSI, BOOL isShortcut) +inline void PIXEncodeStringInfo(UINT64*& destination, BOOL isANSI) { - return ((alignment & PIXEventsStringAlignmentWriteMask) << PIXEventsStringAlignmentBitShift) | - ((copyChunkSize & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | - (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift) | - (((UINT64)isShortcut & PIXEventsStringIsShortcutWriteMask) << PIXEventsStringIsShortcutBitShift); + const UINT64 encodedStringInfo = + ((sizeof(UINT64) & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | + (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift); + + *destination++ = encodedStringInfo; } template @@ -239,10 +243,10 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& desti } } -//unsigned char has to be cast to a longer unsigned integer type +//UINT8 has to be cast to a longer unsigned integer type //this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier template<> -inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, unsigned char argument) +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT8 argument) { if (destination < limit) { @@ -263,61 +267,60 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& desti } } -inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +inline void PIXCopyEventStringArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) { - *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); while (destination < limit) { - UINT64 c = static_cast(argument[0]); + UINT64 c = static_cast(argument[0]); if (!c) { *destination++ = 0; return; } UINT64 x = c; - c = static_cast(argument[1]); + c = static_cast(argument[1]); if (!c) { *destination++ = x; return; } x |= c << 8; - c = static_cast(argument[2]); + c = static_cast(argument[2]); if (!c) { *destination++ = x; return; } x |= c << 16; - c = static_cast(argument[3]); + c = static_cast(argument[3]); if (!c) { *destination++ = x; return; } x |= c << 24; - c = static_cast(argument[4]); + c = static_cast(argument[4]); if (!c) { *destination++ = x; return; } x |= c << 32; - c = static_cast(argument[5]); + c = static_cast(argument[5]); if (!c) { *destination++ = x; return; } x |= c << 40; - c = static_cast(argument[6]); + c = static_cast(argument[6]); if (!c) { *destination++ = x; return; } x |= c << 48; - c = static_cast(argument[7]); + c = static_cast(argument[7]); if (!c) { *destination++ = x; @@ -329,37 +332,42 @@ inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& dest } } +template inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) { -#if PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<8>(argument)) + PIXEncodeStringInfo(destination, TRUE); + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +template<> +inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + +inline void PIXCopyEventStringArgumentFast(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + constexpr UINT64 mask1 = 0x0101010101010101ULL; + constexpr UINT64 mask2 = 0x8080808080808080ULL; + UINT64* source = (UINT64*)argument; + + while (destination < limit) { - *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); - UINT64* source = (UINT64*)argument; - while (destination < limit) + UINT64 qword = *source++; + *destination++ = qword; + + //check if any of the characters is a terminating zero + UINT64 isTerminated = (qword - mask1) & (~qword & mask2); + + if (isTerminated) { - UINT64 qword = *source++; - *destination++ = qword; - //check if any of the characters is a terminating zero - if (!((qword & 0xFF00000000000000) && - (qword & 0xFF000000000000) && - (qword & 0xFF0000000000) && - (qword & 0xFF00000000) && - (qword & 0xFF000000) && - (qword & 0xFF0000) && - (qword & 0xFF00) && - (qword & 0xFF))) - { - break; - } + break; } } - else -#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY - { - PIXCopyEventArgumentSlowest(destination, limit, argument); - } } +#endif template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) @@ -369,43 +377,15 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& dest if (argument != nullptr) { #if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<16>(argument)) + if (PIXIsPointerAligned<8>(argument)) { - *destination++ = PIXEncodeStringInfo(0, 16, TRUE, FALSE); - __m128i zero = _mm_setzero_si128(); - if (PIXIsPointerAligned<16>(destination)) - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_store_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi8(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 16; - } - } - else - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_storeu_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi8(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 16; - } - } + PIXEncodeStringInfo(destination, TRUE); + PIXCopyEventStringArgumentFast(destination, limit, argument); } else #endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY { - PIXCopyEventArgumentSlow(destination, limit, argument); + PIXCopyEventArgumentSlow(destination, limit, argument); } } else @@ -415,39 +395,64 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& dest } } +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + PIXCopyEventStringArgumentFast(destination, limit, argument); + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } +} + template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) { PIXCopyEventArgument(destination, limit, (PCSTR)argument); } -inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) +{ + PIXCopyStringArgument(destination, limit, (PCSTR)argument); +} + +inline void PIXCopyEventStringArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) { - *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); while (destination < limit) { - UINT64 c = static_cast(argument[0]); + UINT64 c = static_cast(argument[0]); if (!c) { *destination++ = 0; return; } UINT64 x = c; - c = static_cast(argument[1]); + c = static_cast(argument[1]); if (!c) { *destination++ = x; return; } x |= c << 16; - c = static_cast(argument[2]); + c = static_cast(argument[2]); if (!c) { *destination++ = x; return; } x |= c << 32; - c = static_cast(argument[3]); + c = static_cast(argument[3]); if (!c) { *destination++ = x; @@ -459,34 +464,39 @@ inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& dest } } +template inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) { -#if PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<8>(argument)) + PIXEncodeStringInfo(destination, FALSE); + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +template<> +inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY +inline void PIXCopyEventStringArgumentFast(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + UINT64* source = (UINT64*)argument; + while (destination < limit) { - *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); - UINT64* source = (UINT64*)argument; - while (destination < limit) + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + //TODO: check if reversed condition is faster + if (!((qword & 0xFFFF000000000000) && + (qword & 0xFFFF00000000) && + (qword & 0xFFFF0000) && + (qword & 0xFFFF))) { - UINT64 qword = *source++; - *destination++ = qword; - //check if any of the characters is a terminating zero - //TODO: check if reversed condition is faster - if (!((qword & 0xFFFF000000000000) && - (qword & 0xFFFF00000000) && - (qword & 0xFFFF0000) && - (qword & 0xFFFF))) - { - break; - } + break; } } - else -#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY - { - PIXCopyEventArgumentSlowest(destination, limit, argument); - } } +#endif template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) @@ -496,43 +506,15 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& des if (argument != nullptr) { #if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<16>(argument)) + if (PIXIsPointerAligned<8>(argument)) { - *destination++ = PIXEncodeStringInfo(0, 16, FALSE, FALSE); - __m128i zero = _mm_setzero_si128(); - if (PIXIsPointerAligned<16>(destination)) - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_store_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi16(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 8; - } - } - else - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_storeu_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi16(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 8; - } - } + PIXEncodeStringInfo(destination, FALSE); + PIXCopyEventStringArgumentFast(destination, limit, argument); } else #endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY { - PIXCopyEventArgumentSlow(destination, limit, argument); + PIXCopyEventArgumentSlow(destination, limit, argument); } } else @@ -542,12 +524,38 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& des } } +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + PIXCopyEventStringArgumentFast(destination, limit, argument); + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } +} + template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PWSTR argument) { PIXCopyEventArgument(destination, limit, (PCWSTR)argument); }; +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PWSTR argument) +{ + PIXCopyStringArgument(destination, limit, (PCWSTR)argument); +}; + #if defined(__d3d12_x_h__) || defined(__d3d12_xs_h__) || defined(__d3d12_h__) inline void PIXSetGPUMarkerOnContext(_In_ ID3D12GraphicsCommandList* commandList, _In_reads_bytes_(size) void* data, UINT size) @@ -594,12 +602,9 @@ template<> struct PIXInferScopedEventType { typedef void Type; }; template<> struct PIXInferScopedEventType { typedef void Type; }; template<> struct PIXInferScopedEventType { typedef void Type; }; template<> struct PIXInferScopedEventType { typedef void Type; }; - - -#if PIX_ENABLE_BLOCK_ARGUMENT_COPY_SET -#undef PIX_ENABLE_BLOCK_ARGUMENT_COPY -#endif - -#undef PIX_ENABLE_BLOCK_ARGUMENT_COPY_SET +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; #endif //_PIXEventsCommon_H_ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsLegacy.h b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsLegacy.h new file mode 100644 index 00000000..b5b08bea --- /dev/null +++ b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsLegacy.h @@ -0,0 +1,565 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// Don't include this file directly - use pix3.h +// This file encodes PIX events in the legacy PIX event format. + +#ifndef _PIXEventsLegacy_H_ +#define _PIXEventsLegacy_H_ + +#include + +#if defined(_M_X64) || defined(_M_IX86) +#include +#endif + +namespace PixEventsLegacy +{ + enum PIXEventType + { + PIXEvent_EndEvent = 0x000, + PIXEvent_BeginEvent_VarArgs = 0x001, + PIXEvent_BeginEvent_NoArgs = 0x002, + PIXEvent_SetMarker_VarArgs = 0x007, + PIXEvent_SetMarker_NoArgs = 0x008, + + PIXEvent_EndEvent_OnContext = 0x010, + PIXEvent_BeginEvent_OnContext_VarArgs = 0x011, + PIXEvent_BeginEvent_OnContext_NoArgs = 0x012, + PIXEvent_SetMarker_OnContext_VarArgs = 0x017, + PIXEvent_SetMarker_OnContext_NoArgs = 0x018, + }; + + static const UINT64 PIXEventsReservedRecordSpaceQwords = 64; + static const UINT64 PIXEventsReservedTailSpaceQwords = 2; + static const UINT64 PIXEventsSafeFastCopySpaceQwords = PIXEventsReservedRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + static const UINT64 PIXEventsGraphicsRecordSpaceQwords = 64; + + //Bits 7-19 (13 bits) + static const UINT64 PIXEventsBlockEndMarker = 0x00000000000FFF80; + + //Bits 10-19 (10 bits) + static const UINT64 PIXEventsTypeReadMask = 0x00000000000FFC00; + static const UINT64 PIXEventsTypeWriteMask = 0x00000000000003FF; + static const UINT64 PIXEventsTypeBitShift = 10; + + //Bits 20-63 (44 bits) + static const UINT64 PIXEventsTimestampReadMask = 0xFFFFFFFFFFF00000; + static const UINT64 PIXEventsTimestampWriteMask = 0x00000FFFFFFFFFFF; + static const UINT64 PIXEventsTimestampBitShift = 20; + + inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType) + { + return ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | + (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift); + } + + //Bits 60-63 (4) + static const UINT64 PIXEventsStringAlignmentWriteMask = 0x000000000000000F; + static const UINT64 PIXEventsStringAlignmentReadMask = 0xF000000000000000; + static const UINT64 PIXEventsStringAlignmentBitShift = 60; + + //Bits 55-59 (5) + static const UINT64 PIXEventsStringCopyChunkSizeWriteMask = 0x000000000000001F; + static const UINT64 PIXEventsStringCopyChunkSizeReadMask = 0x0F80000000000000; + static const UINT64 PIXEventsStringCopyChunkSizeBitShift = 55; + + //Bit 54 + static const UINT64 PIXEventsStringIsANSIWriteMask = 0x0000000000000001; + static const UINT64 PIXEventsStringIsANSIReadMask = 0x0040000000000000; + static const UINT64 PIXEventsStringIsANSIBitShift = 54; + + //Bit 53 + static const UINT64 PIXEventsStringIsShortcutWriteMask = 0x0000000000000001; + static const UINT64 PIXEventsStringIsShortcutReadMask = 0x0020000000000000; + static const UINT64 PIXEventsStringIsShortcutBitShift = 53; + + inline UINT64 PIXEncodeStringInfo(UINT64 alignment, UINT64 copyChunkSize, BOOL isANSI, BOOL isShortcut) + { + return ((alignment & PIXEventsStringAlignmentWriteMask) << PIXEventsStringAlignmentBitShift) | + ((copyChunkSize & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | + (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift) | + (((UINT64)isShortcut & PIXEventsStringIsShortcutWriteMask) << PIXEventsStringIsShortcutBitShift); + } + + template + inline bool PIXIsPointerAligned(T* pointer) + { + return !(((UINT64)pointer) & (alignment - 1)); + } + + // Generic template version slower because of the additional clear write + template + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, T argument) + { + if (destination < limit) + { + *destination = 0ull; + *((T*)destination) = argument; + ++destination; + } + } + + // int32 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, INT32 argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } + } + + // unsigned int32 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT32 argument) + { + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } + } + + // int64 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, INT64 argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = argument; + ++destination; + } + } + + // unsigned int64 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT64 argument) + { + if (destination < limit) + { + *destination = argument; + ++destination; + } + } + + //floats must be cast to double during writing the data to be properly printed later when reading the data + //this is needed because when float is passed to varargs function it's cast to double + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, float argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } + } + + //char has to be cast to a longer signed integer type + //this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, char argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } + } + + //unsigned char has to be cast to a longer unsigned integer type + //this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, unsigned char argument) + { + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } + } + + //bool has to be cast to an integer since it's not explicitly supported by string format routines + //there's no format specifier for bool type, but it should work with integer format specifiers + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, bool argument) + { + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } + } + + inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) + { + *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); + while (destination < limit) + { + UINT64 c = static_cast(argument[0]); + if (!c) + { + *destination++ = 0; + return; + } + UINT64 x = c; + c = static_cast(argument[1]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 8; + c = static_cast(argument[2]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 16; + c = static_cast(argument[3]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 24; + c = static_cast(argument[4]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 32; + c = static_cast(argument[5]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 40; + c = static_cast(argument[6]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 48; + c = static_cast(argument[7]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 56; + *destination++ = x; + argument += 8; + } + } + + inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) + { +#if PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); + UINT64* source = (UINT64*)argument; + while (destination < limit) + { + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + if (!((qword & 0xFF00000000000000) && + (qword & 0xFF000000000000) && + (qword & 0xFF0000000000) && + (qword & 0xFF00000000) && + (qword & 0xFF000000) && + (qword & 0xFF0000) && + (qword & 0xFF00) && + (qword & 0xFF))) + { + break; + } + } + } + else +#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlowest(destination, limit, argument); + } + } + + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) + { + if (destination < limit) + { + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<16>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 16, TRUE, FALSE); + __m128i zero = _mm_setzero_si128(); + if (PIXIsPointerAligned<16>(destination)) + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_store_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi8(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 16; + } + } + else + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_storeu_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi8(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 16; + } + } + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } + } + } + + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) + { + PIXCopyEventArgument(destination, limit, (PCSTR)argument); + } + + inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) + { + *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); + while (destination < limit) + { + UINT64 c = static_cast(argument[0]); + if (!c) + { + *destination++ = 0; + return; + } + UINT64 x = c; + c = static_cast(argument[1]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 16; + c = static_cast(argument[2]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 32; + c = static_cast(argument[3]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 48; + *destination++ = x; + argument += 4; + } + } + + inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) + { +#if PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); + UINT64* source = (UINT64*)argument; + while (destination < limit) + { + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + //TODO: check if reversed condition is faster + if (!((qword & 0xFFFF000000000000) && + (qword & 0xFFFF00000000) && + (qword & 0xFFFF0000) && + (qword & 0xFFFF))) + { + break; + } + } + } + else +#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlowest(destination, limit, argument); + } + } + + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) + { + if (destination < limit) + { + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<16>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 16, FALSE, FALSE); + __m128i zero = _mm_setzero_si128(); + if (PIXIsPointerAligned<16>(destination)) + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_store_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi16(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 8; + } + } + else + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_storeu_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi16(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 8; + } + } + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } + } + } + + inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit) + { + // nothing + UNREFERENCED_PARAMETER(destination); + UNREFERENCED_PARAMETER(limit); + } + + template + void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) + { + PIXCopyEventArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); + } + + template + struct PIXEventTypeInferer + { + static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_VarArgs; } + static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_VarArgs; } + static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } + static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } + static constexpr PIXEventType End() { return PIXEvent_EndEvent; } + + // Xbox and Windows store different types of events for context events. + // On Xbox these include a context argument, while on Windows they do + // not. It is important not to change the event types used on the + // Windows version as there are OS components (eg debug layer & DRED) + // that decode event structs. +#ifdef PIX_XBOX + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent_OnContext; } +#else + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_VarArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_VarArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent; } +#endif + }; + + template<> + struct PIXEventTypeInferer<> + { + static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_NoArgs; } + static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_NoArgs; } + static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } + static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } + static constexpr PIXEventType End() { return PIXEvent_EndEvent; } + +#ifdef PIX_XBOX + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent_OnContext; } +#else + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_NoArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_NoArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent; } +#endif + }; + + + template + UINT64* EncodeBeginEventForContext(UINT64 (&buffer)[size], UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuBeginOnContext()); + *destination++ = color; + + PIXCopyEventArguments(destination, limit, formatString, args...); + *destination = 0ull; + + return destination; + } + + template + UINT64* EncodeSetMarkerForContext(UINT64 (&buffer)[size], UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuSetMarkerOnContext()); + *destination++ = color; + + PIXCopyEventArguments(destination, limit, formatString, args...); + *destination = 0ull; + + return destination; + } +} + +#endif //_PIXEventsLegacy_H_ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3.h b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3.h similarity index 84% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3.h rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3.h index 9007765e..b13e8bc7 100644 --- a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3.h +++ b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3.h @@ -1,13 +1,6 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: pix3.h - * Content: PIX include file - * - ****************************************************************************/ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + #pragma once #ifndef _PIX3_H_ @@ -46,6 +39,7 @@ #define PIX_CAPTURE_SYSTEM_MONITOR_COUNTERS (1 << 6) #define PIX_CAPTURE_VIDEO (1 << 7) #define PIX_CAPTURE_AUDIO (1 << 8) +#define PIX_CAPTURE_GPU_TRACE (1 << 9) #define PIX_CAPTURE_RESERVED (1 << 15) union PIXCaptureParameters @@ -53,6 +47,8 @@ union PIXCaptureParameters enum PIXCaptureStorage { Memory = 0, + MemoryCircular = 1, // Xbox only + FileCircular = 2, // PC only }; struct GpuCaptureParameters @@ -77,8 +73,19 @@ union PIXCaptureParameters BOOL CaptureVirtualAllocEvents; BOOL CaptureHeapAllocEvents; BOOL CaptureXMemEvents; // Xbox only - BOOL CapturePixMemEvents; // Xbox only + BOOL CapturePixMemEvents; + BOOL CapturePageFaultEvents; + BOOL CaptureVideoFrames; // Xbox only } TimingCaptureParameters; + + struct GpuTraceParameters // Xbox Series and newer only + { + PWSTR FileName; + UINT32 MaximumToolingMemorySizeMb; + + BOOL CaptureGpuOccupancy; + + } GpuTraceParameters; }; typedef PIXCaptureParameters* PPIXCaptureParameters; @@ -89,6 +96,19 @@ typedef PIXCaptureParameters* PPIXCaptureParameters; #include "pix3_win.h" #endif +#if defined(XBOX) || defined(_XBOX_ONE) || defined(_DURANGO) || defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT) +#define PIX_XBOX +#if defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT) +#define PIX_GAMING_XBOX +#endif +#endif + +#if !defined(PIX_USE_GPU_MARKERS_V2) +#ifdef PIX_GAMING_XBOX +#define PIX_USE_GPU_MARKERS_V2 +#endif +#endif + #if defined(USE_PIX_SUPPORTED_ARCHITECTURE) && (defined(USE_PIX) || defined(USE_PIX_RETAIL)) #define PIX_EVENTS_ARE_TURNED_ON @@ -168,8 +188,8 @@ inline void PIXScopedEvent(void*, UINT64, _In_ PCWSTR, ...) {} // Use PIX_COLOR() to specify a particular color for an event. // Or, use PIX_COLOR_INDEX() to specify a set of unique event categories, and let PIX choose // the colors to represent each category. -inline UINT PIX_COLOR(BYTE r, BYTE g, BYTE b) { return 0xff000000 | (r << 16) | (g << 8) | b; } -inline UINT PIX_COLOR_INDEX(BYTE i) { return i; } -const UINT PIX_COLOR_DEFAULT = PIX_COLOR_INDEX(0); +inline UINT32 PIX_COLOR(UINT8 r, UINT8 g, UINT8 b) { return 0xff000000u | ((UINT32)r << 16) | ((UINT32)g << 8) | (UINT32)b; } +inline UINT8 PIX_COLOR_INDEX(UINT8 i) { return i; } +const UINT8 PIX_COLOR_DEFAULT = PIX_COLOR_INDEX(0); #endif // _PIX3_H_ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3_win.h b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3_win.h similarity index 77% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3_win.h rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3_win.h index 2c7d0a53..9fd7baff 100644 --- a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3_win.h +++ b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3_win.h @@ -1,14 +1,6 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: PIX3_win.h - * Content: PIX include file - * Don't include this file directly - use pix3.h - * - ****************************************************************************/ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Don't include this file directly - use pix3.h #pragma once @@ -44,13 +36,19 @@ inline void PIXRecordMemoryFreeEvent(USHORT, void*, size_t, UINT64) {} #endif -// The following defines denote the different metadata values that have been used -// by tools to denote how to parse pix marker event data. The first two values -// are legacy values. +// The following WINPIX_EVENT_* defines denote the different metadata values that have +// been used by tools to denote how to parse pix marker event data. The first two values +// are legacy values used by pix.h in the Windows SDK. #define WINPIX_EVENT_UNICODE_VERSION 0 #define WINPIX_EVENT_ANSI_VERSION 1 + +// These values denote PIX marker event data that was created by the WinPixEventRuntime. +// In early 2023 we revised the PIX marker format and defined a new version number. #define WINPIX_EVENT_PIX3BLOB_VERSION 2 +#define WINPIX_EVENT_PIX3BLOB_V2 6345127 // A number that other applications are unlikely to have used before +// For backcompat reasons, the WinPixEventRuntime uses the older PIX3BLOB format when it passes data +// into the D3D12 runtime. It will be updated to use the V2 format in the future. #define D3D12_EVENT_METADATA WINPIX_EVENT_PIX3BLOB_VERSION __forceinline UINT64 PIXGetTimestampCounter() @@ -324,8 +322,6 @@ extern "C" __forceinline HRESULT WINAPI PIXBeginCapture2(DWORD captureFlags, _I extern "C" __forceinline HRESULT WINAPI PIXEndCapture(BOOL discard) { - UNREFERENCED_PARAMETER(discard); - // We can't tell if the user wants to end a GPU Capture or a Timing Capture. // The user shouldn't have both WinPixGpuCapturer and WinPixTimingCapturer loaded in the process though, // so we can just look for one of them and call it. @@ -436,4 +432,78 @@ __forceinline HINSTANCE WINAPI PIXOpenCaptureInUI(PCWSTR) #endif // USE_PIX_SUPPORTED_ARCHITECTURE || USE_PIX +#if defined(__d3d12_h__) + +inline void PIXInsertTimingMarkerOnContextForBeginEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForBeginEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForSetMarker(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForSetMarker(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForEndEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->EndEvent(); +} + +inline void PIXInsertTimingMarkerOnContextForEndEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->EndEvent(); +} + +inline void PIXInsertGPUMarkerOnContextForBeginEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForBeginEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForSetMarker(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForSetMarker(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForEndEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8, void*, UINT) +{ + commandList->EndEvent(); +} + +inline void PIXInsertGPUMarkerOnContextForEndEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8, void*, UINT) +{ + commandQueue->EndEvent(); +} + +#endif + #endif //_PIX3_WIN_H_ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/ThirdPartyNotices.txt b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/ThirdPartyNotices.txt similarity index 82% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/ThirdPartyNotices.txt rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/ThirdPartyNotices.txt index 70b55bbb..45f4d538 100644 --- a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/ThirdPartyNotices.txt +++ b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/ThirdPartyNotices.txt @@ -23,6 +23,10 @@ The Microsoft Program includes the following third-party software: 12. Newtonsoft.Json (https://www.newtonsoft.com/json) 13. WIX (https://wixtoolset.org/) 14. Moq (https://github.com/moq/moq) +15. FluentAssertions (https://github.com/fluentassertions/fluentassertions) +16. .NET Community Toolkit (https://github.com/CommunityToolkit/dotnet) +17. LiveCharts (https://lvcharts.com) +18. NVIDIA PIX Plugin As the recipient of the above third-party software, Microsoft sets forth a copy of the notices and other information below. @@ -133,7 +137,7 @@ AMD NOTICES AND INFORMATION BEGIN HERE ====================================== AMD copyrighted code (MIT) -Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved. +Copyright (c) 2017-2023 Advanced Micro Devices, Inc. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -444,6 +448,7 @@ purpose and non-infringement. END OF WIX NOTICES AND INFORMATION ================================= + MOQ NOTICES AND INFORMATION BEGIN HERE ====================================== MIT License @@ -470,3 +475,105 @@ SOFTWARE. END OF MOQ NOTICES AND INFORMATION ================================== + + +FLUENTASSERTIONS NOTICES AND INFORMATION BEGIN HERE +=================================================== +Copyright [2010-2021] [Dennis Doomen] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +END OF FLUENTASSERTIONS NOTICES AND INFORMATION +=============================================== + +.NET COMMUNITY TOOLKIT NOTICES AND INFORMATION BEGIN HERE +====================================== +MIT License + +Copyright © .NET Foundation and Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +END OF .NET COMMUNITY TOOLKIT NOTICES AND INFORMATION +================================== + +LIVE CHARTS NOTICES AND INFORMATION BEGIN HERE +====================================== +MIT License + +Copyright (c) 2021 Alberto Rodriguez Orozco + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +END OF LIVE CHARTS NOTICES AND INFORMATION +================================== + +NVIDIA PIX PLUGIN NOTICES AND INFORMATION BEGIN HERE +====================================== +Copyright (c) Microsoft Corporation. +Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +END OF NVIDIA PIX PLUGIN NOTICES AND INFORMATION +================================== \ No newline at end of file diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/WinPixEventRuntime.nuspec b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/WinPixEventRuntime.nuspec new file mode 100644 index 00000000..4623c3db --- /dev/null +++ b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/WinPixEventRuntime.nuspec @@ -0,0 +1,20 @@ + + + + WinPixEventRuntime + 1.0.240308001 + WinPixEventRuntime + Microsoft + pix,microsoft + false + license.txt + https://aka.ms/deprecateLicenseUrl + WinPixEventRuntimeIcon.png + https://devblogs.microsoft.com/pix/winpixeventruntime/ + http://www.gravatar.com/avatar/df362936893270e6a1b53807fa90e8fa + Allows applications to be instrumented with marker events, for use with Microsoft PIX. + https://devblogs.microsoft.com/pix/winpixeventruntime/ + © Microsoft Corporation. All rights reserved. + PIX Direct3D graphics 3D + + \ No newline at end of file diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/WinPixEventRuntimeIcon.png b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/WinPixEventRuntimeIcon.png similarity index 100% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/WinPixEventRuntimeIcon.png rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/WinPixEventRuntimeIcon.png diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/[Content_Types].xml b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/[Content_Types].xml new file mode 100644 index 00000000..5bbc7780 --- /dev/null +++ b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/[Content_Types].xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.lib b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime.lib similarity index 91% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.lib rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime.lib index fc17386b..04198a54 100644 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.lib and b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime.lib differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.dll b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.dll new file mode 100644 index 00000000..0c16945d Binary files /dev/null and b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.dll differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.lib b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.lib similarity index 91% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.lib rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.lib index 9b46fbb9..6dc8a054 100644 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.lib and b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.lib differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.lib b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime.lib similarity index 90% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.lib rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime.lib index d5628599..7a909a87 100644 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.lib and b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime.lib differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.dll b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.dll new file mode 100644 index 00000000..0b1226c0 Binary files /dev/null and b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.dll differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.lib b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.lib similarity index 91% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.lib rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.lib index e3f6f641..cc2156f7 100644 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.lib and b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.lib differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/build/WinPixEventRuntime.targets b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/build/WinPixEventRuntime.targets similarity index 100% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/build/WinPixEventRuntime.targets rename to _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/build/WinPixEventRuntime.targets diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/license.txt b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/license.txt new file mode 100644 index 00000000..63447fd8 --- /dev/null +++ b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.240308001/license.txt @@ -0,0 +1,21 @@ +Copyright (c) Microsoft Corporation. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.dll b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.dll index 0e2f75c5..5d86359d 100644 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.dll and b/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.dll differ diff --git a/_GeneratedCode/UnitTests/DX12/main.cpp b/_GeneratedCode/UnitTests/DX12/main.cpp index 70a06cfe..7e0e1a9c 100644 --- a/_GeneratedCode/UnitTests/DX12/main.cpp +++ b/_GeneratedCode/UnitTests/DX12/main.cpp @@ -21,16 +21,19 @@ #include #include -#ifdef _DEBUG -#define DX12_ENABLE_DEBUG_LAYER // Gigi Modification Begin -#define DX12_GPU_VALIDATION() false -#define DX12_BREAK_ON_WARN() false -#define DX12_BREAK_ON_CORRUPTION() true -#define DX12_BREAK_ON_ERROR() true +#ifdef _DEBUG + #define DX12_ENABLE_DEBUG_LAYER + #define DX12_GPU_VALIDATION() false + #define DX12_BREAK_ON_WARN() false + #define DX12_BREAK_ON_CORRUPTION() true + #define DX12_BREAK_ON_ERROR() true +#endif + #define MAKE_PIX_CAPTURE() false // if true, will emit a pix capture for every frame the unit tests run. + +static const unsigned int c_renderSize[2] = { 1024, 768 }; // Gigi Modification End -#endif #ifdef DX12_ENABLE_DEBUG_LAYER #include @@ -44,6 +47,7 @@ extern "C" { __declspec(dllexport) extern const char* D3D12SDKPath = ".\\Agility #include "DX12Utils/FileCache.h" #include "spdlog/spdlog.h" #include "DX12Utils/logfn.h" +#include "DX12Utils/Camera.h" static void LogFunction(LogLevel level, const char* msg, ...) { char buffer[4096]; @@ -388,6 +392,21 @@ static HANDLE g_hSwapChainWaitableObject = nullptr; static ID3D12Resource* g_mainRenderTargetResource[NUM_BACK_BUFFERS] = {}; static D3D12_CPU_DESCRIPTOR_HANDLE g_mainRenderTargetDescriptor[NUM_BACK_BUFFERS] = {}; +Camera g_camera; + +// first half of key states are this frame, second half are last frame +uint8_t g_keyStates[512] = {}; +uint8_t* g_keyStatesLastFrame = &g_keyStates[256]; + +// Mouse state is mouse x,y then left mouse down, right mouse down +float g_mouseState[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; +float g_mouseStateLastFrame[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + +float g_cameraPos[3] = { 0.0f, 0.0f, 0.0f }; +float g_cameraAltitudeAzimuth[2] = { 0.0f, 0.0f }; + +bool g_vsyncOn = true; + // Forward declarations of helper functions bool CreateDeviceD3D(HWND hWnd); void CleanupDeviceD3D(); @@ -418,7 +437,10 @@ int main(int, char**) //ImGui_ImplWin32_EnableDpiAwareness(); WNDCLASSEXW wc = { sizeof(wc), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(nullptr), nullptr, nullptr, nullptr, nullptr, L"ImGui Example", nullptr }; ::RegisterClassExW(&wc); - HWND hwnd = ::CreateWindowW(wc.lpszClassName, L"Dear ImGui DirectX12 Example", WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, nullptr, nullptr, wc.hInstance, nullptr); + + RECT windowSize = { 0, 0, (LONG)c_renderSize[0], (LONG)c_renderSize[1] }; + AdjustWindowRect(&windowSize, WS_OVERLAPPEDWINDOW, false); + HWND hwnd = ::CreateWindowW(wc.lpszClassName, L"UnitTests", WS_OVERLAPPEDWINDOW, 100, 100, windowSize.right - windowSize.left, windowSize.bottom - windowSize.top, nullptr, nullptr, wc.hInstance, nullptr); // Initialize Direct3D if (!CreateDeviceD3D(hwnd)) @@ -1604,8 +1626,7 @@ int main(int, char**) g_pd3dCommandQueue->ExecuteCommandLists(1, (ID3D12CommandList* const*)&g_pd3dCommandList); - g_pSwapChain->Present(1, 0); // Present with vsync - //g_pSwapChain->Present(0, 0); // Present without vsync + g_pSwapChain->Present(g_vsyncOn ? 1 : 0, 0); UINT64 fenceValue = g_fenceLastSignaledValue + 1; g_pd3dCommandQueue->Signal(g_fence, fenceValue); diff --git a/external/DirectXTex/BC.cpp b/external/DirectXTex/BC.cpp new file mode 100644 index 00000000..e730550c --- /dev/null +++ b/external/DirectXTex/BC.cpp @@ -0,0 +1,1141 @@ +//------------------------------------------------------------------------------------- +// BC.cpp +// +// Block-compression (BC) functionality for BC1, BC2, BC3 (orginal DXTn formats) +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +// Experiemental encoding variants, not enabled by default +//#define COLOR_WEIGHTS +//#define COLOR_AVG_0WEIGHTS + +#include "BC.h" + +using namespace DirectX; +using namespace DirectX::PackedVector; + +namespace +{ + //------------------------------------------------------------------------------------- + // Constants + //------------------------------------------------------------------------------------- + + // Perceptual weightings for the importance of each channel. + const HDRColorA g_Luminance(0.2125f / 0.7154f, 1.0f, 0.0721f / 0.7154f, 1.0f); + const HDRColorA g_LuminanceInv(0.7154f / 0.2125f, 1.0f, 0.7154f / 0.0721f, 1.0f); + + //------------------------------------------------------------------------------------- + // Decode/Encode RGB 5/6/5 colors + //------------------------------------------------------------------------------------- + inline void Decode565(_Out_ HDRColorA *pColor, _In_ const uint16_t w565) noexcept + { + pColor->r = static_cast((w565 >> 11) & 31) * (1.0f / 31.0f); + pColor->g = static_cast((w565 >> 5) & 63) * (1.0f / 63.0f); + pColor->b = static_cast((w565 >> 0) & 31) * (1.0f / 31.0f); + pColor->a = 1.0f; + } + + inline uint16_t Encode565(_In_ const HDRColorA *pColor) noexcept + { + HDRColorA Color; + + Color.r = (pColor->r < 0.0f) ? 0.0f : (pColor->r > 1.0f) ? 1.0f : pColor->r; + Color.g = (pColor->g < 0.0f) ? 0.0f : (pColor->g > 1.0f) ? 1.0f : pColor->g; + Color.b = (pColor->b < 0.0f) ? 0.0f : (pColor->b > 1.0f) ? 1.0f : pColor->b; + Color.a = pColor->a; + + uint16_t w; + + w = static_cast( + (static_cast(Color.r * 31.0f + 0.5f) << 11) + | (static_cast(Color.g * 63.0f + 0.5f) << 5) + | (static_cast(Color.b * 31.0f + 0.5f) << 0)); + + return w; + } + + + //------------------------------------------------------------------------------------- + void OptimizeRGB( + _Out_ HDRColorA *pX, + _Out_ HDRColorA *pY, + _In_reads_(NUM_PIXELS_PER_BLOCK) const HDRColorA *pPoints, + uint32_t cSteps, + uint32_t flags) noexcept + { + constexpr float fEpsilon = (0.25f / 64.0f) * (0.25f / 64.0f); + static const float pC3[] = { 2.0f / 2.0f, 1.0f / 2.0f, 0.0f / 2.0f }; + static const float pD3[] = { 0.0f / 2.0f, 1.0f / 2.0f, 2.0f / 2.0f }; + static const float pC4[] = { 3.0f / 3.0f, 2.0f / 3.0f, 1.0f / 3.0f, 0.0f / 3.0f }; + static const float pD4[] = { 0.0f / 3.0f, 1.0f / 3.0f, 2.0f / 3.0f, 3.0f / 3.0f }; + + const float *pC = (3 == cSteps) ? pC3 : pC4; + const float *pD = (3 == cSteps) ? pD3 : pD4; + + // Find Min and Max points, as starting point + HDRColorA X = (flags & BC_FLAGS_UNIFORM) ? HDRColorA(1.f, 1.f, 1.f, 1.f) : g_Luminance; + HDRColorA Y = HDRColorA(0.0f, 0.0f, 0.0f, 1.0f); + + for (size_t iPoint = 0; iPoint < NUM_PIXELS_PER_BLOCK; iPoint++) + { + #ifdef COLOR_WEIGHTS + if (pPoints[iPoint].a > 0.0f) + #endif // COLOR_WEIGHTS + { + if (pPoints[iPoint].r < X.r) + X.r = pPoints[iPoint].r; + + if (pPoints[iPoint].g < X.g) + X.g = pPoints[iPoint].g; + + if (pPoints[iPoint].b < X.b) + X.b = pPoints[iPoint].b; + + if (pPoints[iPoint].r > Y.r) + Y.r = pPoints[iPoint].r; + + if (pPoints[iPoint].g > Y.g) + Y.g = pPoints[iPoint].g; + + if (pPoints[iPoint].b > Y.b) + Y.b = pPoints[iPoint].b; + } + } + + // Diagonal axis + const HDRColorA AB(Y.r - X.r, Y.g - X.g, Y.b - X.b, 0.0f); + + const float fAB = AB.r * AB.r + AB.g * AB.g + AB.b * AB.b; + + // Single color block.. no need to root-find + if (fAB < FLT_MIN) + { + pX->r = X.r; pX->g = X.g; pX->b = X.b; pX->a = 1.0f; + pY->r = Y.r; pY->g = Y.g; pY->b = Y.b; pY->a = 1.0f; + return; + } + + // Try all four axis directions, to determine which diagonal best fits data + const float fABInv = 1.0f / fAB; + + HDRColorA Dir(AB.r * fABInv, AB.g * fABInv, AB.b * fABInv, 0.0f); + + const HDRColorA Mid( + (X.r + Y.r) * 0.5f, + (X.g + Y.g) * 0.5f, + (X.b + Y.b) * 0.5f, + 0.0f); + + float fDir[4] = {}; + + for (size_t iPoint = 0; iPoint < NUM_PIXELS_PER_BLOCK; iPoint++) + { + HDRColorA Pt; + Pt.r = (pPoints[iPoint].r - Mid.r) * Dir.r; + Pt.g = (pPoints[iPoint].g - Mid.g) * Dir.g; + Pt.b = (pPoints[iPoint].b - Mid.b) * Dir.b; + Pt.a = 0.0f; + + float f; + + #ifdef COLOR_WEIGHTS + f = Pt.r + Pt.g + Pt.b; + fDir[0] += pPoints[iPoint].a * f * f; + + f = Pt.r + Pt.g - Pt.b; + fDir[1] += pPoints[iPoint].a * f * f; + + f = Pt.r - Pt.g + Pt.b; + fDir[2] += pPoints[iPoint].a * f * f; + + f = Pt.r - Pt.g - Pt.b; + fDir[3] += pPoints[iPoint].a * f * f; + #else + f = Pt.r + Pt.g + Pt.b; + fDir[0] += f * f; + + f = Pt.r + Pt.g - Pt.b; + fDir[1] += f * f; + + f = Pt.r - Pt.g + Pt.b; + fDir[2] += f * f; + + f = Pt.r - Pt.g - Pt.b; + fDir[3] += f * f; + #endif // COLOR_WEIGHTS + } + + float fDirMax = fDir[0]; + size_t iDirMax = 0; + + for (size_t iDir = 1; iDir < 4; iDir++) + { + if (fDir[iDir] > fDirMax) + { + fDirMax = fDir[iDir]; + iDirMax = iDir; + } + } + + if (iDirMax & 2) + { + const float f = X.g; X.g = Y.g; Y.g = f; + } + + if (iDirMax & 1) + { + const float f = X.b; X.b = Y.b; Y.b = f; + } + + + // Two color block.. no need to root-find + if (fAB < 1.0f / 4096.0f) + { + pX->r = X.r; pX->g = X.g; pX->b = X.b; pX->a = 1.0f; + pY->r = Y.r; pY->g = Y.g; pY->b = Y.b; pY->a = 1.0f; + return; + } + + // Use Newton's Method to find local minima of sum-of-squares error. + auto const fSteps = static_cast(cSteps - 1); + + for (size_t iIteration = 0; iIteration < 8; iIteration++) + { + // Calculate new steps + HDRColorA pSteps[4]; + + for (size_t iStep = 0; iStep < cSteps; iStep++) + { + pSteps[iStep].r = X.r * pC[iStep] + Y.r * pD[iStep]; + pSteps[iStep].g = X.g * pC[iStep] + Y.g * pD[iStep]; + pSteps[iStep].b = X.b * pC[iStep] + Y.b * pD[iStep]; + pSteps[iStep].a = 1.0f; + } + + + // Calculate color direction + Dir.r = Y.r - X.r; + Dir.g = Y.g - X.g; + Dir.b = Y.b - X.b; + + const float fLen = (Dir.r * Dir.r + Dir.g * Dir.g + Dir.b * Dir.b); + + if (fLen < (1.0f / 4096.0f)) + break; + + const float fScale = fSteps / fLen; + + Dir.r *= fScale; + Dir.g *= fScale; + Dir.b *= fScale; + + + // Evaluate function, and derivatives + float d2X = 0.f; + float d2Y = 0.f; + HDRColorA dX = {}; + HDRColorA dY = {}; + + for (size_t iPoint = 0; iPoint < NUM_PIXELS_PER_BLOCK; iPoint++) + { + const float fDot = (pPoints[iPoint].r - X.r) * Dir.r + + (pPoints[iPoint].g - X.g) * Dir.g + + (pPoints[iPoint].b - X.b) * Dir.b; + + + uint32_t iStep; + if (fDot <= 0.0f) + iStep = 0; + else if (fDot >= fSteps) + iStep = cSteps - 1; + else + iStep = uint32_t(fDot + 0.5f); + + + HDRColorA Diff; + Diff.r = pSteps[iStep].r - pPoints[iPoint].r; + Diff.g = pSteps[iStep].g - pPoints[iPoint].g; + Diff.b = pSteps[iStep].b - pPoints[iPoint].b; + Diff.a = 0.0f; + + #ifdef COLOR_WEIGHTS + const float fC = pC[iStep] * pPoints[iPoint].a * (1.0f / 8.0f); + const float fD = pD[iStep] * pPoints[iPoint].a * (1.0f / 8.0f); + #else + const float fC = pC[iStep] * (1.0f / 8.0f); + const float fD = pD[iStep] * (1.0f / 8.0f); + #endif // COLOR_WEIGHTS + + d2X += fC * pC[iStep]; + dX.r += fC * Diff.r; + dX.g += fC * Diff.g; + dX.b += fC * Diff.b; + + d2Y += fD * pD[iStep]; + dY.r += fD * Diff.r; + dY.g += fD * Diff.g; + dY.b += fD * Diff.b; + } + + // Move endpoints + if (d2X > 0.0f) + { + const float f = -1.0f / d2X; + + X.r += dX.r * f; + X.g += dX.g * f; + X.b += dX.b * f; + } + + if (d2Y > 0.0f) + { + const float f = -1.0f / d2Y; + + Y.r += dY.r * f; + Y.g += dY.g * f; + Y.b += dY.b * f; + } + + if ((dX.r * dX.r < fEpsilon) && (dX.g * dX.g < fEpsilon) && (dX.b * dX.b < fEpsilon) && + (dY.r * dY.r < fEpsilon) && (dY.g * dY.g < fEpsilon) && (dY.b * dY.b < fEpsilon)) + { + break; + } + } + + pX->r = X.r; pX->g = X.g; pX->b = X.b; pX->a = 1.0f; + pY->r = Y.r; pY->g = Y.g; pY->b = Y.b; pY->a = 1.0f; + } + + + //------------------------------------------------------------------------------------- + inline void DecodeBC1( + _Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, + _In_ const D3DX_BC1 *pBC, + bool isbc1) noexcept + { + assert(pColor && pBC); + static_assert(sizeof(D3DX_BC1) == 8, "D3DX_BC1 should be 8 bytes"); + + static XMVECTORF32 s_Scale = { { { 1.f / 31.f, 1.f / 63.f, 1.f / 31.f, 1.f } } }; + + XMVECTOR clr0 = XMLoadU565(reinterpret_cast(&pBC->rgb[0])); + XMVECTOR clr1 = XMLoadU565(reinterpret_cast(&pBC->rgb[1])); + + clr0 = XMVectorMultiply(clr0, s_Scale); + clr1 = XMVectorMultiply(clr1, s_Scale); + + clr0 = XMVectorSwizzle<2, 1, 0, 3>(clr0); + clr1 = XMVectorSwizzle<2, 1, 0, 3>(clr1); + + clr0 = XMVectorSelect(g_XMIdentityR3, clr0, g_XMSelect1110); + clr1 = XMVectorSelect(g_XMIdentityR3, clr1, g_XMSelect1110); + + XMVECTOR clr2, clr3; + if (isbc1 && (pBC->rgb[0] <= pBC->rgb[1])) + { + clr2 = XMVectorLerp(clr0, clr1, 0.5f); + clr3 = XMVectorZero(); // Alpha of 0 + } + else + { + clr2 = XMVectorLerp(clr0, clr1, 1.f / 3.f); + clr3 = XMVectorLerp(clr0, clr1, 2.f / 3.f); + } + + uint32_t dw = pBC->bitmap; + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i, dw >>= 2) + { + switch (dw & 3) + { + case 0: pColor[i] = clr0; break; + case 1: pColor[i] = clr1; break; + case 2: pColor[i] = clr2; break; + + case 3: + default: pColor[i] = clr3; break; + } + } + } + + + //------------------------------------------------------------------------------------- + void EncodeBC1( + _Out_ D3DX_BC1 *pBC, + _In_reads_(NUM_PIXELS_PER_BLOCK) const HDRColorA *pColor, + bool bColorKey, + float threshold, + uint32_t flags) noexcept + { + assert(pBC && pColor); + static_assert(sizeof(D3DX_BC1) == 8, "D3DX_BC1 should be 8 bytes"); + + // Determine if we need to colorkey this block + uint32_t uSteps; + + if (bColorKey) + { + size_t uColorKey = 0; + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + if (pColor[i].a < threshold) + uColorKey++; + } + + if (NUM_PIXELS_PER_BLOCK == uColorKey) + { + pBC->rgb[0] = 0x0000; + pBC->rgb[1] = 0xffff; + pBC->bitmap = 0xffffffff; + return; + } + + uSteps = (uColorKey > 0) ? 3u : 4u; + } + else + { + uSteps = 4u; + } + + // Quantize block to R56B5, using Floyd Stienberg error diffusion. This + // increases the chance that colors will map directly to the quantized + // axis endpoints. + HDRColorA Color[NUM_PIXELS_PER_BLOCK]; + HDRColorA Error[NUM_PIXELS_PER_BLOCK]; + + if (flags & BC_FLAGS_DITHER_RGB) + memset(Error, 0x00, NUM_PIXELS_PER_BLOCK * sizeof(HDRColorA)); + + size_t i; + for (i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + HDRColorA Clr; + Clr.r = pColor[i].r; + Clr.g = pColor[i].g; + Clr.b = pColor[i].b; + Clr.a = 1.0f; + + if (flags & BC_FLAGS_DITHER_RGB) + { + Clr.r += Error[i].r; + Clr.g += Error[i].g; + Clr.b += Error[i].b; + } + + Color[i].r = static_cast(static_cast(Clr.r * 31.0f + 0.5f)) * (1.0f / 31.0f); + Color[i].g = static_cast(static_cast(Clr.g * 63.0f + 0.5f)) * (1.0f / 63.0f); + Color[i].b = static_cast(static_cast(Clr.b * 31.0f + 0.5f)) * (1.0f / 31.0f); + + #ifdef COLOR_WEIGHTS + Color[i].a = pColor[i].a; + #else + Color[i].a = 1.0f; + #endif // COLOR_WEIGHTS + + if (flags & BC_FLAGS_DITHER_RGB) + { + HDRColorA Diff; + Diff.r = Color[i].a * (Clr.r - Color[i].r); + Diff.g = Color[i].a * (Clr.g - Color[i].g); + Diff.b = Color[i].a * (Clr.b - Color[i].b); + Diff.a = 0.0f; + + if (3 != (i & 3)) + { + assert(i < 15); + _Analysis_assume_(i < 15); + Error[i + 1].r += Diff.r * (7.0f / 16.0f); + Error[i + 1].g += Diff.g * (7.0f / 16.0f); + Error[i + 1].b += Diff.b * (7.0f / 16.0f); + } + + if (i < 12) + { + if (i & 3) + { + Error[i + 3].r += Diff.r * (3.0f / 16.0f); + Error[i + 3].g += Diff.g * (3.0f / 16.0f); + Error[i + 3].b += Diff.b * (3.0f / 16.0f); + } + + Error[i + 4].r += Diff.r * (5.0f / 16.0f); + Error[i + 4].g += Diff.g * (5.0f / 16.0f); + Error[i + 4].b += Diff.b * (5.0f / 16.0f); + + if (3 != (i & 3)) + { + assert(i < 11); + _Analysis_assume_(i < 11); + Error[i + 5].r += Diff.r * (1.0f / 16.0f); + Error[i + 5].g += Diff.g * (1.0f / 16.0f); + Error[i + 5].b += Diff.b * (1.0f / 16.0f); + } + } + } + + if (!(flags & BC_FLAGS_UNIFORM)) + { + Color[i].r *= g_Luminance.r; + Color[i].g *= g_Luminance.g; + Color[i].b *= g_Luminance.b; + } + } + + // Perform 6D root finding function to find two endpoints of color axis. + // Then quantize and sort the endpoints depending on mode. + HDRColorA ColorA, ColorB, ColorC, ColorD; + + OptimizeRGB(&ColorA, &ColorB, Color, uSteps, flags); + + if (flags & BC_FLAGS_UNIFORM) + { + ColorC = ColorA; + ColorD = ColorB; + } + else + { + ColorC.r = ColorA.r * g_LuminanceInv.r; + ColorC.g = ColorA.g * g_LuminanceInv.g; + ColorC.b = ColorA.b * g_LuminanceInv.b; + ColorC.a = ColorA.a; + + ColorD.r = ColorB.r * g_LuminanceInv.r; + ColorD.g = ColorB.g * g_LuminanceInv.g; + ColorD.b = ColorB.b * g_LuminanceInv.b; + ColorD.a = ColorB.a; + } + + const uint16_t wColorA = Encode565(&ColorC); + const uint16_t wColorB = Encode565(&ColorD); + + if ((uSteps == 4) && (wColorA == wColorB)) + { + pBC->rgb[0] = wColorA; + pBC->rgb[1] = wColorB; + pBC->bitmap = 0x00000000; + return; + } + + Decode565(&ColorC, wColorA); + Decode565(&ColorD, wColorB); + + if (flags & BC_FLAGS_UNIFORM) + { + ColorA = ColorC; + ColorB = ColorD; + } + else + { + ColorA.r = ColorC.r * g_Luminance.r; + ColorA.g = ColorC.g * g_Luminance.g; + ColorA.b = ColorC.b * g_Luminance.b; + + ColorB.r = ColorD.r * g_Luminance.r; + ColorB.g = ColorD.g * g_Luminance.g; + ColorB.b = ColorD.b * g_Luminance.b; + } + + // Calculate color steps + HDRColorA Step[4]; + + if ((3 == uSteps) == (wColorA <= wColorB)) + { + pBC->rgb[0] = wColorA; + pBC->rgb[1] = wColorB; + + Step[0] = ColorA; + Step[1] = ColorB; + } + else + { + pBC->rgb[0] = wColorB; + pBC->rgb[1] = wColorA; + + Step[0] = ColorB; + Step[1] = ColorA; + } + + static const size_t pSteps3[] = { 0, 2, 1 }; + static const size_t pSteps4[] = { 0, 2, 3, 1 }; + const size_t *pSteps; + + if (3 == uSteps) + { + pSteps = pSteps3; + + HDRColorALerp(&Step[2], &Step[0], &Step[1], 0.5f); + } + else + { + pSteps = pSteps4; + + HDRColorALerp(&Step[2], &Step[0], &Step[1], 1.0f / 3.0f); + HDRColorALerp(&Step[3], &Step[0], &Step[1], 2.0f / 3.0f); + } + + // Calculate color direction + HDRColorA Dir; + Dir.r = Step[1].r - Step[0].r; + Dir.g = Step[1].g - Step[0].g; + Dir.b = Step[1].b - Step[0].b; + Dir.a = 0.0f; + + const auto fSteps = static_cast(uSteps - 1); + const float fScale = (wColorA != wColorB) ? (fSteps / (Dir.r * Dir.r + Dir.g * Dir.g + Dir.b * Dir.b)) : 0.0f; + + Dir.r *= fScale; + Dir.g *= fScale; + Dir.b *= fScale; + + // Encode colors + uint32_t dw = 0; + if (flags & BC_FLAGS_DITHER_RGB) + memset(Error, 0x00, NUM_PIXELS_PER_BLOCK * sizeof(HDRColorA)); + + for (i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + if ((3 == uSteps) && (pColor[i].a < threshold)) + { + dw = (3u << 30) | (dw >> 2); + } + else + { + HDRColorA Clr; + if (flags & BC_FLAGS_UNIFORM) + { + Clr.r = pColor[i].r; + Clr.g = pColor[i].g; + Clr.b = pColor[i].b; + } + else + { + Clr.r = pColor[i].r * g_Luminance.r; + Clr.g = pColor[i].g * g_Luminance.g; + Clr.b = pColor[i].b * g_Luminance.b; + } + Clr.a = 1.0f; + + if (flags & BC_FLAGS_DITHER_RGB) + { + Clr.r += Error[i].r; + Clr.g += Error[i].g; + Clr.b += Error[i].b; + } + + const float fDot = (Clr.r - Step[0].r) * Dir.r + (Clr.g - Step[0].g) * Dir.g + (Clr.b - Step[0].b) * Dir.b; + + uint32_t iStep; + if (fDot <= 0.0f) + iStep = 0; + else if (fDot >= fSteps) + iStep = 1; + else + iStep = uint32_t(pSteps[uint32_t(fDot + 0.5f)]); + + dw = (iStep << 30) | (dw >> 2); + + if (flags & BC_FLAGS_DITHER_RGB) + { + HDRColorA Diff; + Diff.r = Color[i].a * (Clr.r - Step[iStep].r); + Diff.g = Color[i].a * (Clr.g - Step[iStep].g); + Diff.b = Color[i].a * (Clr.b - Step[iStep].b); + Diff.a = 0.0f; + + if (3 != (i & 3)) + { + Error[i + 1].r += Diff.r * (7.0f / 16.0f); + Error[i + 1].g += Diff.g * (7.0f / 16.0f); + Error[i + 1].b += Diff.b * (7.0f / 16.0f); + } + + if (i < 12) + { + if (i & 3) + { + Error[i + 3].r += Diff.r * (3.0f / 16.0f); + Error[i + 3].g += Diff.g * (3.0f / 16.0f); + Error[i + 3].b += Diff.b * (3.0f / 16.0f); + } + + Error[i + 4].r += Diff.r * (5.0f / 16.0f); + Error[i + 4].g += Diff.g * (5.0f / 16.0f); + Error[i + 4].b += Diff.b * (5.0f / 16.0f); + + if (3 != (i & 3)) + { + Error[i + 5].r += Diff.r * (1.0f / 16.0f); + Error[i + 5].g += Diff.g * (1.0f / 16.0f); + Error[i + 5].b += Diff.b * (1.0f / 16.0f); + } + } + } + } + } + + pBC->bitmap = dw; + } + + //------------------------------------------------------------------------------------- +#ifdef COLOR_WEIGHTS + void EncodeSolidBC1(_Out_ D3DX_BC1 *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const HDRColorA *pColor) + { + #ifdef COLOR_AVG_0WEIGHTS + // Compute avg color + HDRColorA Color; + Color.r = pColor[0].r; + Color.g = pColor[0].g; + Color.b = pColor[0].b; + + for (size_t i = 1; i < NUM_PIXELS_PER_BLOCK; ++i) + { + Color.r += pColor[i].r; + Color.g += pColor[i].g; + Color.b += pColor[i].b; + } + + Color.r *= 1.0f / 16.0f; + Color.g *= 1.0f / 16.0f; + Color.b *= 1.0f / 16.0f; + + const uint16_t wColor = Encode565(&Color); + #else + const uint16_t wColor = 0x0000; + #endif // COLOR_AVG_0WEIGHTS + + // Encode solid block + pBC->rgb[0] = wColor; + pBC->rgb[1] = wColor; + pBC->bitmap = 0x00000000; + } +#endif // COLOR_WEIGHTS +} + + +//===================================================================================== +// Entry points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// BC1 Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC1(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + auto pBC1 = reinterpret_cast(pBC); + DecodeBC1(pColor, pBC1, true); +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC1(uint8_t *pBC, const XMVECTOR *pColor, float threshold, uint32_t flags) noexcept +{ + assert(pBC && pColor); + + HDRColorA Color[NUM_PIXELS_PER_BLOCK]; + + if (flags & BC_FLAGS_DITHER_A) + { + float fError[NUM_PIXELS_PER_BLOCK] = {}; + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + HDRColorA clr; + XMStoreFloat4(reinterpret_cast(&clr), pColor[i]); + + const float fAlph = clr.a + fError[i]; + + Color[i].r = clr.r; + Color[i].g = clr.g; + Color[i].b = clr.b; + Color[i].a = static_cast(static_cast(clr.a + fError[i] + 0.5f)); + + const float fDiff = fAlph - Color[i].a; + + if (3 != (i & 3)) + { + assert(i < 15); + _Analysis_assume_(i < 15); + fError[i + 1] += fDiff * (7.0f / 16.0f); + } + + if (i < 12) + { + if (i & 3) + fError[i + 3] += fDiff * (3.0f / 16.0f); + + fError[i + 4] += fDiff * (5.0f / 16.0f); + + if (3 != (i & 3)) + { + assert(i < 11); + _Analysis_assume_(i < 11); + fError[i + 5] += fDiff * (1.0f / 16.0f); + } + } + } + } + else + { + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + XMStoreFloat4(reinterpret_cast(&Color[i]), pColor[i]); + } + } + + auto pBC1 = reinterpret_cast(pBC); + EncodeBC1(pBC1, Color, true, threshold, flags); +} + + +//------------------------------------------------------------------------------------- +// BC2 Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC2(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + assert(pColor && pBC); + static_assert(sizeof(D3DX_BC2) == 16, "D3DX_BC2 should be 16 bytes"); + + auto pBC2 = reinterpret_cast(pBC); + + // RGB part + DecodeBC1(pColor, &pBC2->bc1, false); + + // 4-bit alpha part + uint32_t dw = pBC2->bitmap[0]; + + for (size_t i = 0; i < 8; ++i, dw >>= 4) + { + #pragma prefast(suppress:22103, "writing blocks in two halves confuses tool") + pColor[i] = XMVectorSetW(pColor[i], static_cast(dw & 0xf) * (1.0f / 15.0f)); + } + + dw = pBC2->bitmap[1]; + + for (size_t i = 8; i < NUM_PIXELS_PER_BLOCK; ++i, dw >>= 4) + pColor[i] = XMVectorSetW(pColor[i], static_cast(dw & 0xf) * (1.0f / 15.0f)); +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC2(uint8_t *pBC, const XMVECTOR *pColor, uint32_t flags) noexcept +{ + assert(pBC && pColor); + static_assert(sizeof(D3DX_BC2) == 16, "D3DX_BC2 should be 16 bytes"); + + HDRColorA Color[NUM_PIXELS_PER_BLOCK]; + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + XMStoreFloat4(reinterpret_cast(&Color[i]), pColor[i]); + } + + auto pBC2 = reinterpret_cast(pBC); + + // 4-bit alpha part. Dithered using Floyd Stienberg error diffusion. + pBC2->bitmap[0] = 0; + pBC2->bitmap[1] = 0; + + float fError[NUM_PIXELS_PER_BLOCK] = {}; + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + float fAlph = Color[i].a; + if (flags & BC_FLAGS_DITHER_A) + fAlph += fError[i]; + + const auto u = static_cast(fAlph * 15.0f + 0.5f); + + pBC2->bitmap[i >> 3] >>= 4; + pBC2->bitmap[i >> 3] |= (u << 28); + + if (flags & BC_FLAGS_DITHER_A) + { + const float fDiff = fAlph - float(u) * (1.0f / 15.0f); + + if (3 != (i & 3)) + { + assert(i < 15); + _Analysis_assume_(i < 15); + fError[i + 1] += fDiff * (7.0f / 16.0f); + } + + if (i < 12) + { + if (i & 3) + fError[i + 3] += fDiff * (3.0f / 16.0f); + + fError[i + 4] += fDiff * (5.0f / 16.0f); + + if (3 != (i & 3)) + { + assert(i < 11); + _Analysis_assume_(i < 11); + fError[i + 5] += fDiff * (1.0f / 16.0f); + } + } + } + } + + // RGB part +#ifdef COLOR_WEIGHTS + if (!pBC2->bitmap[0] && !pBC2->bitmap[1]) + { + EncodeSolidBC1(pBC2->dxt1, Color); + return; + } +#endif // COLOR_WEIGHTS + + EncodeBC1(&pBC2->bc1, Color, false, 0.f, flags); +} + + +//------------------------------------------------------------------------------------- +// BC3 Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC3(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + assert(pColor && pBC); + static_assert(sizeof(D3DX_BC3) == 16, "D3DX_BC3 should be 16 bytes"); + + auto pBC3 = reinterpret_cast(pBC); + + // RGB part + DecodeBC1(pColor, &pBC3->bc1, false); + + // Adaptive 3-bit alpha part + float fAlpha[8]; + + fAlpha[0] = static_cast(pBC3->alpha[0]) * (1.0f / 255.0f); + fAlpha[1] = static_cast(pBC3->alpha[1]) * (1.0f / 255.0f); + + if (pBC3->alpha[0] > pBC3->alpha[1]) + { + for (size_t i = 1; i < 7; ++i) + fAlpha[i + 1] = (fAlpha[0] * float(7u - i) + fAlpha[1] * float(i)) * (1.0f / 7.0f); + } + else + { + for (size_t i = 1; i < 5; ++i) + fAlpha[i + 1] = (fAlpha[0] * float(5u - i) + fAlpha[1] * float(i)) * (1.0f / 5.0f); + + fAlpha[6] = 0.0f; + fAlpha[7] = 1.0f; + } + + uint32_t dw = uint32_t(pBC3->bitmap[0]) | uint32_t(pBC3->bitmap[1] << 8) | uint32_t(pBC3->bitmap[2] << 16); + + for (size_t i = 0; i < 8; ++i, dw >>= 3) + pColor[i] = XMVectorSetW(pColor[i], fAlpha[dw & 0x7]); + + dw = uint32_t(pBC3->bitmap[3]) | uint32_t(pBC3->bitmap[4] << 8) | uint32_t(pBC3->bitmap[5] << 16); + + for (size_t i = 8; i < NUM_PIXELS_PER_BLOCK; ++i, dw >>= 3) + pColor[i] = XMVectorSetW(pColor[i], fAlpha[dw & 0x7]); +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC3(uint8_t *pBC, const XMVECTOR *pColor, uint32_t flags) noexcept +{ + assert(pBC && pColor); + static_assert(sizeof(D3DX_BC3) == 16, "D3DX_BC3 should be 16 bytes"); + + HDRColorA Color[NUM_PIXELS_PER_BLOCK]; + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + XMStoreFloat4(reinterpret_cast(&Color[i]), pColor[i]); + } + + auto pBC3 = reinterpret_cast(pBC); + + // Quantize block to A8, using Floyd Stienberg error diffusion. This + // increases the chance that colors will map directly to the quantized + // axis endpoints. + float fAlpha[NUM_PIXELS_PER_BLOCK] = {}; + float fError[NUM_PIXELS_PER_BLOCK] = {}; + + float fMinAlpha = Color[0].a; + float fMaxAlpha = Color[0].a; + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + float fAlph = Color[i].a; + if (flags & BC_FLAGS_DITHER_A) + fAlph += fError[i]; + + fAlpha[i] = static_cast(static_cast(fAlph * 255.0f + 0.5f)) * (1.0f / 255.0f); + + if (fAlpha[i] < fMinAlpha) + fMinAlpha = fAlpha[i]; + else if (fAlpha[i] > fMaxAlpha) + fMaxAlpha = fAlpha[i]; + + if (flags & BC_FLAGS_DITHER_A) + { + const float fDiff = fAlph - fAlpha[i]; + + if (3 != (i & 3)) + { + assert(i < 15); + _Analysis_assume_(i < 15); + fError[i + 1] += fDiff * (7.0f / 16.0f); + } + + if (i < 12) + { + if (i & 3) + fError[i + 3] += fDiff * (3.0f / 16.0f); + + fError[i + 4] += fDiff * (5.0f / 16.0f); + + if (3 != (i & 3)) + { + assert(i < 11); + _Analysis_assume_(i < 11); + fError[i + 5] += fDiff * (1.0f / 16.0f); + } + } + } + } + +#ifdef COLOR_WEIGHTS + if (0.0f == fMaxAlpha) + { + EncodeSolidBC1(&pBC3->dxt1, Color); + pBC3->alpha[0] = 0x00; + pBC3->alpha[1] = 0x00; + memset(pBC3->bitmap, 0x00, 6); + } +#endif + + // RGB part + EncodeBC1(&pBC3->bc1, Color, false, 0.f, flags); + + // Alpha part + if (1.0f == fMinAlpha) + { + pBC3->alpha[0] = 0xff; + pBC3->alpha[1] = 0xff; + memset(pBC3->bitmap, 0x00, 6); + return; + } + + // Optimize and Quantize Min and Max values + const uint32_t uSteps = ((0.0f == fMinAlpha) || (1.0f == fMaxAlpha)) ? 6u : 8u; + + float fAlphaA, fAlphaB; + OptimizeAlpha(&fAlphaA, &fAlphaB, fAlpha, uSteps); + + auto const bAlphaA = static_cast(static_cast(fAlphaA * 255.0f + 0.5f)); + auto const bAlphaB = static_cast(static_cast(fAlphaB * 255.0f + 0.5f)); + + fAlphaA = static_cast(bAlphaA) * (1.0f / 255.0f); + fAlphaB = static_cast(bAlphaB) * (1.0f / 255.0f); + + // Setup block + if ((8 == uSteps) && (bAlphaA == bAlphaB)) + { + pBC3->alpha[0] = bAlphaA; + pBC3->alpha[1] = bAlphaB; + memset(pBC3->bitmap, 0x00, 6); + return; + } + + static const size_t pSteps6[] = { 0, 2, 3, 4, 5, 1 }; + static const size_t pSteps8[] = { 0, 2, 3, 4, 5, 6, 7, 1 }; + + const size_t *pSteps; + float fStep[8] = {}; + + if (6 == uSteps) + { + pBC3->alpha[0] = bAlphaA; + pBC3->alpha[1] = bAlphaB; + + fStep[0] = fAlphaA; + fStep[1] = fAlphaB; + + for (size_t i = 1; i < 5; ++i) + fStep[i + 1] = (fStep[0] * float(5u - i) + fStep[1] * float(i)) * (1.0f / 5.0f); + + fStep[6] = 0.0f; + fStep[7] = 1.0f; + + pSteps = pSteps6; + } + else + { + pBC3->alpha[0] = bAlphaB; + pBC3->alpha[1] = bAlphaA; + + fStep[0] = fAlphaB; + fStep[1] = fAlphaA; + + for (size_t i = 1; i < 7; ++i) + fStep[i + 1] = (fStep[0] * float(7u - i) + fStep[1] * float(i)) * (1.0f / 7.0f); + + pSteps = pSteps8; + } + + // Encode alpha bitmap + auto const fSteps = static_cast(uSteps - 1); + const float fScale = (fStep[0] != fStep[1]) ? (fSteps / (fStep[1] - fStep[0])) : 0.0f; + + if (flags & BC_FLAGS_DITHER_A) + memset(fError, 0x00, NUM_PIXELS_PER_BLOCK * sizeof(float)); + + for (size_t iSet = 0; iSet < 2; iSet++) + { + uint32_t dw = 0; + + const size_t iMin = iSet * 8; + const size_t iLim = iMin + 8; + + for (size_t i = iMin; i < iLim; ++i) + { + float fAlph = Color[i].a; + if (flags & BC_FLAGS_DITHER_A) + fAlph += fError[i]; + const float fDot = (fAlph - fStep[0]) * fScale; + + uint32_t iStep; + if (fDot <= 0.0f) + iStep = ((6 == uSteps) && (fAlph <= fStep[0] * 0.5f)) ? 6u : 0u; + else if (fDot >= fSteps) + iStep = ((6 == uSteps) && (fAlph >= (fStep[1] + 1.0f) * 0.5f)) ? 7u : 1u; + else + iStep = uint32_t(pSteps[uint32_t(fDot + 0.5f)]); + + dw = (iStep << 21) | (dw >> 3); + + if (flags & BC_FLAGS_DITHER_A) + { + const float fDiff = (fAlph - fStep[iStep]); + + if (3 != (i & 3)) + fError[i + 1] += fDiff * (7.0f / 16.0f); + + if (i < 12) + { + if (i & 3) + fError[i + 3] += fDiff * (3.0f / 16.0f); + + fError[i + 4] += fDiff * (5.0f / 16.0f); + + if (3 != (i & 3)) + fError[i + 5] += fDiff * (1.0f / 16.0f); + } + } + } + + pBC3->bitmap[0 + iSet * 3] = reinterpret_cast(&dw)[0]; + pBC3->bitmap[1 + iSet * 3] = reinterpret_cast(&dw)[1]; + pBC3->bitmap[2 + iSet * 3] = reinterpret_cast(&dw)[2]; + } +} diff --git a/external/DirectXTex/BC.h b/external/DirectXTex/BC.h new file mode 100644 index 00000000..db650baa --- /dev/null +++ b/external/DirectXTex/BC.h @@ -0,0 +1,345 @@ +//------------------------------------------------------------------------------------- +// BC.h +// +// Block-compression (BC) functionality +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#pragma once + +#include +#include + +namespace DirectX +{ +//------------------------------------------------------------------------------------- +// Macros +//------------------------------------------------------------------------------------- + +// Because these are used in SAL annotations, they need to remain macros rather than const values +#define NUM_PIXELS_PER_BLOCK 16 + +//------------------------------------------------------------------------------------- +// Constants +//------------------------------------------------------------------------------------- + + enum BC_FLAGS : uint32_t + { + BC_FLAGS_NONE = 0x0, + + BC_FLAGS_DITHER_RGB = 0x10000, + // Enables dithering for RGB colors for BC1-3 + + BC_FLAGS_DITHER_A = 0x20000, + // Enables dithering for Alpha channel for BC1-3 + + BC_FLAGS_UNIFORM = 0x40000, + // By default, uses perceptual weighting for BC1-3; this flag makes it a uniform weighting + + BC_FLAGS_USE_3SUBSETS = 0x80000, + // By default, BC7 skips mode 0 & 2; this flag adds those modes back + + BC_FLAGS_FORCE_BC7_MODE6 = 0x100000, + // BC7 should only use mode 6; skip other modes + }; + + //------------------------------------------------------------------------------------- + // Structures + //------------------------------------------------------------------------------------- + class LDRColorA; + + class HDRColorA + { + public: + float r, g, b, a; + + public: + HDRColorA() = default; + HDRColorA(float _r, float _g, float _b, float _a) noexcept : r(_r), g(_g), b(_b), a(_a) {} + + HDRColorA(HDRColorA const&) = default; + HDRColorA& operator= (const HDRColorA&) = default; + + HDRColorA(HDRColorA&&) = default; + HDRColorA& operator= (HDRColorA&&) = default; + + // binary operators + HDRColorA operator + (const HDRColorA& c) const noexcept + { + return HDRColorA(r + c.r, g + c.g, b + c.b, a + c.a); + } + + HDRColorA operator - (const HDRColorA& c) const noexcept + { + return HDRColorA(r - c.r, g - c.g, b - c.b, a - c.a); + } + + HDRColorA operator * (float f) const noexcept + { + return HDRColorA(r * f, g * f, b * f, a * f); + } + + HDRColorA operator / (float f) const noexcept + { + const float fInv = 1.0f / f; + return HDRColorA(r * fInv, g * fInv, b * fInv, a * fInv); + } + + float operator * (const HDRColorA& c) const noexcept + { + return r * c.r + g * c.g + b * c.b + a * c.a; + } + + // assignment operators + HDRColorA& operator += (const HDRColorA& c) noexcept + { + r += c.r; + g += c.g; + b += c.b; + a += c.a; + return *this; + } + + HDRColorA& operator -= (const HDRColorA& c) noexcept + { + r -= c.r; + g -= c.g; + b -= c.b; + a -= c.a; + return *this; + } + + HDRColorA& operator *= (float f) noexcept + { + r *= f; + g *= f; + b *= f; + a *= f; + return *this; + } + + HDRColorA& operator /= (float f) noexcept + { + const float fInv = 1.0f / f; + r *= fInv; + g *= fInv; + b *= fInv; + a *= fInv; + return *this; + } + + HDRColorA& Clamp(_In_ float fMin, _In_ float fMax) noexcept + { + r = std::min(fMax, std::max(fMin, r)); + g = std::min(fMax, std::max(fMin, g)); + b = std::min(fMax, std::max(fMin, b)); + a = std::min(fMax, std::max(fMin, a)); + return *this; + } + + HDRColorA(const LDRColorA& c) noexcept; + HDRColorA& operator = (const LDRColorA& c) noexcept; + LDRColorA ToLDRColorA() const noexcept; + }; + + inline HDRColorA* HDRColorALerp(_Out_ HDRColorA *pOut, _In_ const HDRColorA *pC1, _In_ const HDRColorA *pC2, _In_ float s) noexcept + { + pOut->r = pC1->r + s * (pC2->r - pC1->r); + pOut->g = pC1->g + s * (pC2->g - pC1->g); + pOut->b = pC1->b + s * (pC2->b - pC1->b); + pOut->a = pC1->a + s * (pC2->a - pC1->a); + return pOut; + } + +#pragma pack(push,1) +// BC1/DXT1 compression (4 bits per texel) + struct D3DX_BC1 + { + uint16_t rgb[2]; // 565 colors + uint32_t bitmap; // 2bpp rgb bitmap + }; + + // BC2/DXT2/3 compression (8 bits per texel) + struct D3DX_BC2 + { + uint32_t bitmap[2]; // 4bpp alpha bitmap + D3DX_BC1 bc1; // BC1 rgb data + }; + + // BC3/DXT4/5 compression (8 bits per texel) + struct D3DX_BC3 + { + uint8_t alpha[2]; // alpha values + uint8_t bitmap[6]; // 3bpp alpha bitmap + D3DX_BC1 bc1; // BC1 rgb data + }; +#pragma pack(pop) + +//------------------------------------------------------------------------------------- +// Templates +//------------------------------------------------------------------------------------- +#pragma warning(push) +#pragma warning(disable : 4127) + template void OptimizeAlpha(float *pX, float *pY, const float *pPoints, uint32_t cSteps) noexcept + { + static const float pC6[] = { 5.0f / 5.0f, 4.0f / 5.0f, 3.0f / 5.0f, 2.0f / 5.0f, 1.0f / 5.0f, 0.0f / 5.0f }; + static const float pD6[] = { 0.0f / 5.0f, 1.0f / 5.0f, 2.0f / 5.0f, 3.0f / 5.0f, 4.0f / 5.0f, 5.0f / 5.0f }; + static const float pC8[] = { 7.0f / 7.0f, 6.0f / 7.0f, 5.0f / 7.0f, 4.0f / 7.0f, 3.0f / 7.0f, 2.0f / 7.0f, 1.0f / 7.0f, 0.0f / 7.0f }; + static const float pD8[] = { 0.0f / 7.0f, 1.0f / 7.0f, 2.0f / 7.0f, 3.0f / 7.0f, 4.0f / 7.0f, 5.0f / 7.0f, 6.0f / 7.0f, 7.0f / 7.0f }; + + const float *pC = (6 == cSteps) ? pC6 : pC8; + const float *pD = (6 == cSteps) ? pD6 : pD8; + + constexpr float MAX_VALUE = 1.0f; + constexpr float MIN_VALUE = (bRange) ? -1.0f : 0.0f; + + // Find Min and Max points, as starting point + float fX = MAX_VALUE; + float fY = MIN_VALUE; + + if (8 == cSteps) + { + for (size_t iPoint = 0; iPoint < NUM_PIXELS_PER_BLOCK; iPoint++) + { + if (pPoints[iPoint] < fX) + fX = pPoints[iPoint]; + + if (pPoints[iPoint] > fY) + fY = pPoints[iPoint]; + } + } + else + { + for (size_t iPoint = 0; iPoint < NUM_PIXELS_PER_BLOCK; iPoint++) + { + if (pPoints[iPoint] < fX && pPoints[iPoint] > MIN_VALUE) + fX = pPoints[iPoint]; + + if (pPoints[iPoint] > fY && pPoints[iPoint] < MAX_VALUE) + fY = pPoints[iPoint]; + } + + if (fX == fY) + { + fY = MAX_VALUE; + } + } + + // Use Newton's Method to find local minima of sum-of-squares error. + auto const fSteps = static_cast(cSteps - 1); + + for (size_t iIteration = 0; iIteration < 8; iIteration++) + { + if ((fY - fX) < (1.0f / 256.0f)) + break; + + float const fScale = fSteps / (fY - fX); + + // Calculate new steps + float pSteps[8]; + + for (size_t iStep = 0; iStep < cSteps; iStep++) + pSteps[iStep] = pC[iStep] * fX + pD[iStep] * fY; + + if (6 == cSteps) + { + pSteps[6] = MIN_VALUE; + pSteps[7] = MAX_VALUE; + } + + // Evaluate function, and derivatives + float dX = 0.0f; + float dY = 0.0f; + float d2X = 0.0f; + float d2Y = 0.0f; + + for (size_t iPoint = 0; iPoint < NUM_PIXELS_PER_BLOCK; iPoint++) + { + const float fDot = (pPoints[iPoint] - fX) * fScale; + + uint32_t iStep; + if (fDot <= 0.0f) + { + // D3DX10 / D3DX11 didn't take into account the proper minimum value for the bRange (BC4S/BC5S) case + iStep = ((6 == cSteps) && (pPoints[iPoint] <= (fX + MIN_VALUE) * 0.5f)) ? 6u : 0u; + } + else if (fDot >= fSteps) + { + iStep = ((6 == cSteps) && (pPoints[iPoint] >= (fY + MAX_VALUE) * 0.5f)) ? 7u : (cSteps - 1); + } + else + { + iStep = uint32_t(fDot + 0.5f); + } + + if (iStep < cSteps) + { + // D3DX had this computation backwards (pPoints[iPoint] - pSteps[iStep]) + // this fix improves RMS of the alpha component + const float fDiff = pSteps[iStep] - pPoints[iPoint]; + + dX += pC[iStep] * fDiff; + d2X += pC[iStep] * pC[iStep]; + + dY += pD[iStep] * fDiff; + d2Y += pD[iStep] * pD[iStep]; + } + } + + // Move endpoints + if (d2X > 0.0f) + fX -= dX / d2X; + + if (d2Y > 0.0f) + fY -= dY / d2Y; + + if (fX > fY) + { + const float f = fX; fX = fY; fY = f; + } + + if ((dX * dX < (1.0f / 64.0f)) && (dY * dY < (1.0f / 64.0f))) + break; + } + + *pX = (fX < MIN_VALUE) ? MIN_VALUE : (fX > MAX_VALUE) ? MAX_VALUE : fX; + *pY = (fY < MIN_VALUE) ? MIN_VALUE : (fY > MAX_VALUE) ? MAX_VALUE : fY; + } +#pragma warning(pop) + +//------------------------------------------------------------------------------------- +// Functions +//------------------------------------------------------------------------------------- + + typedef void (*BC_DECODE)(XMVECTOR *pColor, const uint8_t *pBC); + typedef void (*BC_ENCODE)(uint8_t *pDXT, const XMVECTOR *pColor, uint32_t flags); + + void D3DXDecodeBC1(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(8) const uint8_t *pBC) noexcept; + void D3DXDecodeBC2(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(16) const uint8_t *pBC) noexcept; + void D3DXDecodeBC3(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(16) const uint8_t *pBC) noexcept; + void D3DXDecodeBC4U(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(8) const uint8_t *pBC) noexcept; + void D3DXDecodeBC4S(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(8) const uint8_t *pBC) noexcept; + void D3DXDecodeBC5U(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(16) const uint8_t *pBC) noexcept; + void D3DXDecodeBC5S(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(16) const uint8_t *pBC) noexcept; + void D3DXDecodeBC6HU(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(16) const uint8_t *pBC) noexcept; + void D3DXDecodeBC6HS(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(16) const uint8_t *pBC) noexcept; + void D3DXDecodeBC7(_Out_writes_(NUM_PIXELS_PER_BLOCK) XMVECTOR *pColor, _In_reads_(16) const uint8_t *pBC) noexcept; + + void D3DXEncodeBC1(_Out_writes_(8) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ float threshold, _In_ uint32_t flags) noexcept; + // BC1 requires one additional parameter, so it doesn't match signature of BC_ENCODE above + + void D3DXEncodeBC2(_Out_writes_(16) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ uint32_t flags) noexcept; + void D3DXEncodeBC3(_Out_writes_(16) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ uint32_t flags) noexcept; + void D3DXEncodeBC4U(_Out_writes_(8) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ uint32_t flags) noexcept; + void D3DXEncodeBC4S(_Out_writes_(8) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ uint32_t flags) noexcept; + void D3DXEncodeBC5U(_Out_writes_(16) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ uint32_t flags) noexcept; + void D3DXEncodeBC5S(_Out_writes_(16) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ uint32_t flags) noexcept; + void D3DXEncodeBC6HU(_Out_writes_(16) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ uint32_t flags) noexcept; + void D3DXEncodeBC6HS(_Out_writes_(16) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ uint32_t flags) noexcept; + void D3DXEncodeBC7(_Out_writes_(16) uint8_t *pBC, _In_reads_(NUM_PIXELS_PER_BLOCK) const XMVECTOR *pColor, _In_ uint32_t flags) noexcept; + +} // namespace diff --git a/external/DirectXTex/BC4BC5.cpp b/external/DirectXTex/BC4BC5.cpp new file mode 100644 index 00000000..263db980 --- /dev/null +++ b/external/DirectXTex/BC4BC5.cpp @@ -0,0 +1,562 @@ +//------------------------------------------------------------------------------------- +// BC4BC5.cpp +// +// Block-compression (BC) functionality for BC4 and BC5 (DirectX 10 texture compression) +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#include "BC.h" + +using namespace DirectX; + +//------------------------------------------------------------------------------------ +// Constants +//------------------------------------------------------------------------------------ + +// Because these are used in SAL annotations, they need to remain macros rather than const values +#define BLOCK_LEN 4 +// length of each block in texel + +#define BLOCK_SIZE (BLOCK_LEN * BLOCK_LEN) +// total texels in a 4x4 block. + +namespace +{ + //------------------------------------------------------------------------------------ + // Structures + //------------------------------------------------------------------------------------- + +#pragma warning(push) +#pragma warning(disable : 4201) + + // BC4U/BC5U + struct BC4_UNORM + { + float R(size_t uOffset) const noexcept + { + const size_t uIndex = GetIndex(uOffset); + return DecodeFromIndex(uIndex); + } + + float DecodeFromIndex(size_t uIndex) const noexcept + { + if (uIndex == 0) + return float(red_0) / 255.0f; + if (uIndex == 1) + return float(red_1) / 255.0f; + const float fred_0 = float(red_0) / 255.0f; + const float fred_1 = float(red_1) / 255.0f; + if (red_0 > red_1) + { + uIndex -= 1; + return (fred_0 * float(7u - uIndex) + fred_1 * float(uIndex)) / 7.0f; + } + else + { + if (uIndex == 6) + return 0.0f; + if (uIndex == 7) + return 1.0f; + uIndex -= 1; + return (fred_0 * float(5u - uIndex) + fred_1 * float(uIndex)) / 5.0f; + } + } + + size_t GetIndex(size_t uOffset) const noexcept + { + return static_cast((data >> (3 * uOffset + 16)) & 0x07); + } + + void SetIndex(size_t uOffset, size_t uIndex) noexcept + { + data &= ~(uint64_t(0x07) << (3 * uOffset + 16)); + data |= (uint64_t(uIndex) << (3 * uOffset + 16)); + } + + union + { + struct + { + uint8_t red_0; + uint8_t red_1; + uint8_t indices[6]; + }; + uint64_t data; + }; + }; + + // BC4S/BC5S + struct BC4_SNORM + { + float R(size_t uOffset) const noexcept + { + const size_t uIndex = GetIndex(uOffset); + return DecodeFromIndex(uIndex); + } + + float DecodeFromIndex(size_t uIndex) const noexcept + { + const int8_t sred_0 = (red_0 == -128) ? -127 : red_0; + const int8_t sred_1 = (red_1 == -128) ? -127 : red_1; + + if (uIndex == 0) + return float(sred_0) / 127.0f; + if (uIndex == 1) + return float(sred_1) / 127.0f; + const float fred_0 = float(sred_0) / 127.0f; + const float fred_1 = float(sred_1) / 127.0f; + if (red_0 > red_1) + { + uIndex -= 1; + return (fred_0 * float(7u - uIndex) + fred_1 * float(uIndex)) / 7.0f; + } + else + { + if (uIndex == 6) + return -1.0f; + if (uIndex == 7) + return 1.0f; + uIndex -= 1; + return (fred_0 * float(5u - uIndex) + fred_1 * float(uIndex)) / 5.0f; + } + } + + size_t GetIndex(size_t uOffset) const noexcept + { + return static_cast((data >> (3 * uOffset + 16)) & 0x07); + } + + void SetIndex(size_t uOffset, size_t uIndex) noexcept + { + data &= ~(uint64_t(0x07) << (3 * uOffset + 16)); + data |= (uint64_t(uIndex) << (3 * uOffset + 16)); + } + + union + { + struct + { + int8_t red_0; + int8_t red_1; + uint8_t indices[6]; + }; + uint64_t data; + }; + }; + +#pragma warning(pop) + + //------------------------------------------------------------------------------------- + // Convert a floating point value to an 8-bit SNORM + //------------------------------------------------------------------------------------- + void inline FloatToSNorm(_In_ float fVal, _Out_ int8_t *piSNorm) noexcept + { + constexpr uint32_t dwMostNeg = (1 << (8 * sizeof(int8_t) - 1)); + + if (isnan(fVal)) + fVal = 0; + else + if (fVal > 1) + fVal = 1; // Clamp to 1 + else + if (fVal < -1) + fVal = -1; // Clamp to -1 + + fVal = fVal * static_cast(dwMostNeg - 1); + + if (fVal >= 0) + fVal += .5f; + else + fVal -= .5f; + + *piSNorm = static_cast(fVal); + } + + + //------------------------------------------------------------------------------ + void FindEndPointsBC4U( + _In_reads_(BLOCK_SIZE) const float theTexelsU[], + _Out_ uint8_t &endpointU_0, + _Out_ uint8_t &endpointU_1) noexcept + { + // The boundary of codec for signed/unsigned format + constexpr float MIN_NORM = 0.f; + constexpr float MAX_NORM = 1.f; + + // Find max/min of input texels + float fBlockMax = theTexelsU[0]; + float fBlockMin = theTexelsU[0]; + for (size_t i = 0; i < BLOCK_SIZE; ++i) + { + if (theTexelsU[i] < fBlockMin) + { + fBlockMin = theTexelsU[i]; + } + else if (theTexelsU[i] > fBlockMax) + { + fBlockMax = theTexelsU[i]; + } + } + + // If there are boundary values in input texels, should use 4 interpolated color values to guarantee + // the exact code of the boundary values. + const bool bUsing4BlockCodec = (MIN_NORM == fBlockMin || MAX_NORM == fBlockMax); + + // Using Optimize + float fStart, fEnd; + + if (!bUsing4BlockCodec) + { + // 6 interpolated color values + OptimizeAlpha(&fStart, &fEnd, theTexelsU, 8); + + auto iStart = static_cast(fStart * 255.0f); + auto iEnd = static_cast(fEnd * 255.0f); + + endpointU_0 = iEnd; + endpointU_1 = iStart; + } + else + { + // 4 interpolated color values + OptimizeAlpha(&fStart, &fEnd, theTexelsU, 6); + + auto iStart = static_cast(fStart * 255.0f); + auto iEnd = static_cast(fEnd * 255.0f); + + endpointU_1 = iEnd; + endpointU_0 = iStart; + } + } + + void FindEndPointsBC4S( + _In_reads_(BLOCK_SIZE) const float theTexelsU[], + _Out_ int8_t &endpointU_0, + _Out_ int8_t &endpointU_1) noexcept + { + // The boundary of codec for signed/unsigned format + constexpr float MIN_NORM = -1.f; + constexpr float MAX_NORM = 1.f; + + // Find max/min of input texels + float fBlockMax = theTexelsU[0]; + float fBlockMin = theTexelsU[0]; + for (size_t i = 0; i < BLOCK_SIZE; ++i) + { + if (theTexelsU[i] < fBlockMin) + { + fBlockMin = theTexelsU[i]; + } + else if (theTexelsU[i] > fBlockMax) + { + fBlockMax = theTexelsU[i]; + } + } + + // If there are boundary values in input texels, should use 4 interpolated color values to guarantee + // the exact code of the boundary values. + const bool bUsing4BlockCodec = (MIN_NORM == fBlockMin || MAX_NORM == fBlockMax); + + // Using Optimize + float fStart, fEnd; + + if (!bUsing4BlockCodec) + { + // 6 interpolated color values + OptimizeAlpha(&fStart, &fEnd, theTexelsU, 8); + + int8_t iStart, iEnd; + FloatToSNorm(fStart, &iStart); + FloatToSNorm(fEnd, &iEnd); + + endpointU_0 = iEnd; + endpointU_1 = iStart; + } + else + { + // 4 interpolated color values + OptimizeAlpha(&fStart, &fEnd, theTexelsU, 6); + + int8_t iStart, iEnd; + FloatToSNorm(fStart, &iStart); + FloatToSNorm(fEnd, &iEnd); + + endpointU_1 = iEnd; + endpointU_0 = iStart; + } + } + + + //------------------------------------------------------------------------------ + inline void FindEndPointsBC5U( + _In_reads_(BLOCK_SIZE) const float theTexelsU[], + _In_reads_(BLOCK_SIZE) const float theTexelsV[], + _Out_ uint8_t &endpointU_0, + _Out_ uint8_t &endpointU_1, + _Out_ uint8_t &endpointV_0, + _Out_ uint8_t &endpointV_1) noexcept + { + //Encoding the U and V channel by BC4 codec separately. + FindEndPointsBC4U(theTexelsU, endpointU_0, endpointU_1); + FindEndPointsBC4U(theTexelsV, endpointV_0, endpointV_1); + } + + inline void FindEndPointsBC5S( + _In_reads_(BLOCK_SIZE) const float theTexelsU[], + _In_reads_(BLOCK_SIZE) const float theTexelsV[], + _Out_ int8_t &endpointU_0, + _Out_ int8_t &endpointU_1, + _Out_ int8_t &endpointV_0, + _Out_ int8_t &endpointV_1) noexcept + { + //Encoding the U and V channel by BC4 codec separately. + FindEndPointsBC4S(theTexelsU, endpointU_0, endpointU_1); + FindEndPointsBC4S(theTexelsV, endpointV_0, endpointV_1); + } + + + //------------------------------------------------------------------------------ + void FindClosestUNORM( + _Inout_ BC4_UNORM* pBC, + _In_reads_(NUM_PIXELS_PER_BLOCK) const float theTexelsU[]) noexcept + { + float rGradient[8]; + for (size_t i = 0; i < 8; ++i) + { + rGradient[i] = pBC->DecodeFromIndex(i); + } + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + size_t uBestIndex = 0; + float fBestDelta = 100000; + for (size_t uIndex = 0; uIndex < 8; uIndex++) + { + const float fCurrentDelta = fabsf(rGradient[uIndex] - theTexelsU[i]); + if (fCurrentDelta < fBestDelta) + { + uBestIndex = uIndex; + fBestDelta = fCurrentDelta; + } + } + pBC->SetIndex(i, uBestIndex); + } + } + + void FindClosestSNORM( + _Inout_ BC4_SNORM* pBC, + _In_reads_(NUM_PIXELS_PER_BLOCK) const float theTexelsU[]) noexcept + { + float rGradient[8]; + for (size_t i = 0; i < 8; ++i) + { + rGradient[i] = pBC->DecodeFromIndex(i); + } + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + size_t uBestIndex = 0; + float fBestDelta = 100000; + for (size_t uIndex = 0; uIndex < 8; uIndex++) + { + const float fCurrentDelta = fabsf(rGradient[uIndex] - theTexelsU[i]); + if (fCurrentDelta < fBestDelta) + { + uBestIndex = uIndex; + fBestDelta = fCurrentDelta; + } + } + pBC->SetIndex(i, uBestIndex); + } + } +} + + +//===================================================================================== +// Entry points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// BC4 Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC4U(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + assert(pColor && pBC); + static_assert(sizeof(BC4_UNORM) == 8, "BC4_UNORM should be 8 bytes"); + + auto pBC4 = reinterpret_cast(pBC); + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + #pragma prefast(suppress:22103, "writing blocks in two halves confuses tool") + pColor[i] = XMVectorSet(pBC4->R(i), 0, 0, 1.0f); + } +} + +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC4S(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + assert(pColor && pBC); + static_assert(sizeof(BC4_SNORM) == 8, "BC4_SNORM should be 8 bytes"); + + auto pBC4 = reinterpret_cast(pBC); + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + #pragma prefast(suppress:22103, "writing blocks in two halves confuses tool") + pColor[i] = XMVectorSet(pBC4->R(i), 0, 0, 1.0f); + } +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC4U(uint8_t *pBC, const XMVECTOR *pColor, uint32_t flags) noexcept +{ + UNREFERENCED_PARAMETER(flags); + + assert(pBC && pColor); + static_assert(sizeof(BC4_UNORM) == 8, "BC4_UNORM should be 8 bytes"); + + memset(pBC, 0, sizeof(BC4_UNORM)); + auto pBC4 = reinterpret_cast(pBC); + float theTexelsU[NUM_PIXELS_PER_BLOCK]; + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + theTexelsU[i] = XMVectorGetX(pColor[i]); + } + + FindEndPointsBC4U(theTexelsU, pBC4->red_0, pBC4->red_1); + FindClosestUNORM(pBC4, theTexelsU); +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC4S(uint8_t *pBC, const XMVECTOR *pColor, uint32_t flags) noexcept +{ + UNREFERENCED_PARAMETER(flags); + + assert(pBC && pColor); + static_assert(sizeof(BC4_SNORM) == 8, "BC4_SNORM should be 8 bytes"); + + memset(pBC, 0, sizeof(BC4_UNORM)); + auto pBC4 = reinterpret_cast(pBC); + float theTexelsU[NUM_PIXELS_PER_BLOCK]; + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + theTexelsU[i] = XMVectorGetX(pColor[i]); + } + + FindEndPointsBC4S(theTexelsU, pBC4->red_0, pBC4->red_1); + FindClosestSNORM(pBC4, theTexelsU); +} + + +//------------------------------------------------------------------------------------- +// BC5 Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC5U(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + assert(pColor && pBC); + static_assert(sizeof(BC4_UNORM) == 8, "BC4_UNORM should be 8 bytes"); + + auto pBCR = reinterpret_cast(pBC); + auto pBCG = reinterpret_cast(pBC + sizeof(BC4_UNORM)); + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + #pragma prefast(suppress:22103, "writing blocks in two halves confuses tool") + pColor[i] = XMVectorSet(pBCR->R(i), pBCG->R(i), 0, 1.0f); + } +} + +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC5S(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + assert(pColor && pBC); + static_assert(sizeof(BC4_SNORM) == 8, "BC4_SNORM should be 8 bytes"); + + auto pBCR = reinterpret_cast(pBC); + auto pBCG = reinterpret_cast(pBC + sizeof(BC4_SNORM)); + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + #pragma prefast(suppress:22103, "writing blocks in two halves confuses tool") + pColor[i] = XMVectorSet(pBCR->R(i), pBCG->R(i), 0, 1.0f); + } +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC5U(uint8_t *pBC, const XMVECTOR *pColor, uint32_t flags) noexcept +{ + UNREFERENCED_PARAMETER(flags); + + assert(pBC && pColor); + static_assert(sizeof(BC4_UNORM) == 8, "BC4_UNORM should be 8 bytes"); + + memset(pBC, 0, sizeof(BC4_UNORM) * 2); + auto pBCR = reinterpret_cast(pBC); + auto pBCG = reinterpret_cast(pBC + sizeof(BC4_UNORM)); + float theTexelsU[NUM_PIXELS_PER_BLOCK]; + float theTexelsV[NUM_PIXELS_PER_BLOCK]; + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + XMFLOAT4A clr; + XMStoreFloat4A(&clr, pColor[i]); + theTexelsU[i] = clr.x; + theTexelsV[i] = clr.y; + } + + FindEndPointsBC5U( + theTexelsU, + theTexelsV, + pBCR->red_0, + pBCR->red_1, + pBCG->red_0, + pBCG->red_1); + + FindClosestUNORM(pBCR, theTexelsU); + FindClosestUNORM(pBCG, theTexelsV); +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC5S(uint8_t *pBC, const XMVECTOR *pColor, uint32_t flags) noexcept +{ + UNREFERENCED_PARAMETER(flags); + + assert(pBC && pColor); + static_assert(sizeof(BC4_SNORM) == 8, "BC4_SNORM should be 8 bytes"); + + memset(pBC, 0, sizeof(BC4_UNORM) * 2); + auto pBCR = reinterpret_cast(pBC); + auto pBCG = reinterpret_cast(pBC + sizeof(BC4_SNORM)); + float theTexelsU[NUM_PIXELS_PER_BLOCK]; + float theTexelsV[NUM_PIXELS_PER_BLOCK]; + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + XMFLOAT4A clr; + XMStoreFloat4A(&clr, pColor[i]); + theTexelsU[i] = clr.x; + theTexelsV[i] = clr.y; + } + + FindEndPointsBC5S( + theTexelsU, + theTexelsV, + pBCR->red_0, + pBCR->red_1, + pBCG->red_0, + pBCG->red_1); + + FindClosestSNORM(pBCR, theTexelsU); + FindClosestSNORM(pBCG, theTexelsV); +} diff --git a/external/DirectXTex/BC6HBC7.cpp b/external/DirectXTex/BC6HBC7.cpp new file mode 100644 index 00000000..99dbcaca --- /dev/null +++ b/external/DirectXTex/BC6HBC7.cpp @@ -0,0 +1,3659 @@ +//------------------------------------------------------------------------------------- +// BC6HBC7.cpp +// +// Block-compression (BC) functionality for BC6H and BC7 (DirectX 11 texture compression) +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#include "BC.h" + +using namespace DirectX; +using namespace DirectX::PackedVector; + +//------------------------------------------------------------------------------------- +// Macros +//------------------------------------------------------------------------------------- + +#define SIGN_EXTEND(x,nb) ((((x)&(1<<((nb)-1)))?((~0)^((1<<(nb))-1)):0)|(x)) + +// Because these are used in SAL annotations, they need to remain macros rather than const values +#define BC6H_MAX_REGIONS 2 +#define BC6H_MAX_INDICES 16 +#define BC7_MAX_REGIONS 3 +#define BC7_MAX_INDICES 16 + +namespace +{ + //------------------------------------------------------------------------------------- + // Constants + //------------------------------------------------------------------------------------- + + constexpr uint16_t F16S_MASK = 0x8000; // f16 sign mask + constexpr uint16_t F16EM_MASK = 0x7fff; // f16 exp & mantissa mask + constexpr uint16_t F16MAX = 0x7bff; // MAXFLT bit pattern for XMHALF + + constexpr size_t BC6H_NUM_CHANNELS = 3; + constexpr size_t BC6H_MAX_SHAPES = 32; + + constexpr size_t BC7_NUM_CHANNELS = 4; + constexpr size_t BC7_MAX_SHAPES = 64; + + constexpr int32_t BC67_WEIGHT_MAX = 64; + constexpr uint32_t BC67_WEIGHT_SHIFT = 6; + constexpr int32_t BC67_WEIGHT_ROUND = 32; + + constexpr float fEpsilon = (0.25f / 64.0f) * (0.25f / 64.0f); + constexpr float pC3[] = { 2.0f / 2.0f, 1.0f / 2.0f, 0.0f / 2.0f }; + constexpr float pD3[] = { 0.0f / 2.0f, 1.0f / 2.0f, 2.0f / 2.0f }; + constexpr float pC4[] = { 3.0f / 3.0f, 2.0f / 3.0f, 1.0f / 3.0f, 0.0f / 3.0f }; + constexpr float pD4[] = { 0.0f / 3.0f, 1.0f / 3.0f, 2.0f / 3.0f, 3.0f / 3.0f }; + + // Partition, Shape, Pixel (index into 4x4 block) + const uint8_t g_aPartitionTable[3][64][16] = + { + { // 1 Region case has no subsets (all 0) + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + }, + + { // BC6H/BC7 Partition Set for 2 Subsets + { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, // Shape 0 + { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 }, // Shape 1 + { 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1 }, // Shape 2 + { 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, // Shape 3 + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1 }, // Shape 4 + { 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 }, // Shape 5 + { 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 }, // Shape 6 + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, // Shape 7 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1 }, // Shape 8 + { 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // Shape 9 + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1 }, // Shape 10 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1 }, // Shape 11 + { 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // Shape 12 + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }, // Shape 13 + { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // Shape 14 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 }, // Shape 15 + { 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1 }, // Shape 16 + { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // Shape 17 + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0 }, // Shape 18 + { 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, // Shape 19 + { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // Shape 20 + { 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0 }, // Shape 21 + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0 }, // Shape 22 + { 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1 }, // Shape 23 + { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, // Shape 24 + { 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0 }, // Shape 25 + { 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0 }, // Shape 26 + { 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0 }, // Shape 27 + { 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0 }, // Shape 28 + { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, // Shape 29 + { 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0 }, // Shape 30 + { 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0 }, // Shape 31 + + // BC7 Partition Set for 2 Subsets (second-half) + { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, // Shape 32 + { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 }, // Shape 33 + { 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0 }, // Shape 34 + { 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0 }, // Shape 35 + { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0 }, // Shape 36 + { 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 }, // Shape 37 + { 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1 }, // Shape 38 + { 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }, // Shape 39 + { 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0 }, // Shape 40 + { 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 }, // Shape 41 + { 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0 }, // Shape 42 + { 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0 }, // Shape 43 + { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 }, // Shape 44 + { 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1 }, // Shape 45 + { 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1 }, // Shape 46 + { 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // Shape 47 + { 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, // Shape 48 + { 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0 }, // Shape 49 + { 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0 }, // Shape 50 + { 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0 }, // Shape 51 + { 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1 }, // Shape 52 + { 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1 }, // Shape 53 + { 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0 }, // Shape 54 + { 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0 }, // Shape 55 + { 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1 }, // Shape 56 + { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1 }, // Shape 57 + { 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1 }, // Shape 58 + { 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1 }, // Shape 59 + { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, // Shape 60 + { 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, // Shape 61 + { 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0 }, // Shape 62 + { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1 } // Shape 63 + }, + + { // BC7 Partition Set for 3 Subsets + { 0, 0, 1, 1, 0, 0, 1, 1, 0, 2, 2, 1, 2, 2, 2, 2 }, // Shape 0 + { 0, 0, 0, 1, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 2, 1 }, // Shape 1 + { 0, 0, 0, 0, 2, 0, 0, 1, 2, 2, 1, 1, 2, 2, 1, 1 }, // Shape 2 + { 0, 2, 2, 2, 0, 0, 2, 2, 0, 0, 1, 1, 0, 1, 1, 1 }, // Shape 3 + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2 }, // Shape 4 + { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 2, 2 }, // Shape 5 + { 0, 0, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1 }, // Shape 6 + { 0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1 }, // Shape 7 + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2 }, // Shape 8 + { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2 }, // Shape 9 + { 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2 }, // Shape 10 + { 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2 }, // Shape 11 + { 0, 1, 1, 2, 0, 1, 1, 2, 0, 1, 1, 2, 0, 1, 1, 2 }, // Shape 12 + { 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 2 }, // Shape 13 + { 0, 0, 1, 1, 0, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2 }, // Shape 14 + { 0, 0, 1, 1, 2, 0, 0, 1, 2, 2, 0, 0, 2, 2, 2, 0 }, // Shape 15 + { 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 2, 1, 1, 2, 2 }, // Shape 16 + { 0, 1, 1, 1, 0, 0, 1, 1, 2, 0, 0, 1, 2, 2, 0, 0 }, // Shape 17 + { 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2 }, // Shape 18 + { 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1 }, // Shape 19 + { 0, 1, 1, 1, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2 }, // Shape 20 + { 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 2, 1, 2, 2, 2, 1 }, // Shape 21 + { 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 2, 0, 1, 2, 2 }, // Shape 22 + { 0, 0, 0, 0, 1, 1, 0, 0, 2, 2, 1, 0, 2, 2, 1, 0 }, // Shape 23 + { 0, 1, 2, 2, 0, 1, 2, 2, 0, 0, 1, 1, 0, 0, 0, 0 }, // Shape 24 + { 0, 0, 1, 2, 0, 0, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2 }, // Shape 25 + { 0, 1, 1, 0, 1, 2, 2, 1, 1, 2, 2, 1, 0, 1, 1, 0 }, // Shape 26 + { 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 2, 1, 1, 2, 2, 1 }, // Shape 27 + { 0, 0, 2, 2, 1, 1, 0, 2, 1, 1, 0, 2, 0, 0, 2, 2 }, // Shape 28 + { 0, 1, 1, 0, 0, 1, 1, 0, 2, 0, 0, 2, 2, 2, 2, 2 }, // Shape 29 + { 0, 0, 1, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 0, 1, 1 }, // Shape 30 + { 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 1, 1, 2, 2, 2, 1 }, // Shape 31 + { 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 2, 2, 2 }, // Shape 32 + { 0, 2, 2, 2, 0, 0, 2, 2, 0, 0, 1, 2, 0, 0, 1, 1 }, // Shape 33 + { 0, 0, 1, 1, 0, 0, 1, 2, 0, 0, 2, 2, 0, 2, 2, 2 }, // Shape 34 + { 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0 }, // Shape 35 + { 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0 }, // Shape 36 + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0 }, // Shape 37 + { 0, 1, 2, 0, 2, 0, 1, 2, 1, 2, 0, 1, 0, 1, 2, 0 }, // Shape 38 + { 0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 0, 0, 1, 1 }, // Shape 39 + { 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1 }, // Shape 40 + { 0, 1, 0, 1, 0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2 }, // Shape 41 + { 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 2, 1, 2, 1 }, // Shape 42 + { 0, 0, 2, 2, 1, 1, 2, 2, 0, 0, 2, 2, 1, 1, 2, 2 }, // Shape 43 + { 0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 1, 1 }, // Shape 44 + { 0, 2, 2, 0, 1, 2, 2, 1, 0, 2, 2, 0, 1, 2, 2, 1 }, // Shape 45 + { 0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 1 }, // Shape 46 + { 0, 0, 0, 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1 }, // Shape 47 + { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 2, 2, 2 }, // Shape 48 + { 0, 2, 2, 2, 0, 1, 1, 1, 0, 2, 2, 2, 0, 1, 1, 1 }, // Shape 49 + { 0, 0, 0, 2, 1, 1, 1, 2, 0, 0, 0, 2, 1, 1, 1, 2 }, // Shape 50 + { 0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2 }, // Shape 51 + { 0, 2, 2, 2, 0, 1, 1, 1, 0, 1, 1, 1, 0, 2, 2, 2 }, // Shape 52 + { 0, 0, 0, 2, 1, 1, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2 }, // Shape 53 + { 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 2, 2, 2, 2 }, // Shape 54 + { 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 1, 2 }, // Shape 55 + { 0, 1, 1, 0, 0, 1, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2 }, // Shape 56 + { 0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2 }, // Shape 57 + { 0, 0, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 0, 0, 2, 2 }, // Shape 58 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2 }, // Shape 59 + { 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1 }, // Shape 60 + { 0, 2, 2, 2, 1, 2, 2, 2, 0, 2, 2, 2, 1, 2, 2, 2 }, // Shape 61 + { 0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, // Shape 62 + { 0, 1, 1, 1, 2, 0, 1, 1, 2, 2, 0, 1, 2, 2, 2, 0 } // Shape 63 + } + }; + + // Partition, Shape, Fixup + const uint8_t g_aFixUp[3][64][3] = + { + { // No fix-ups for 1st subset for BC6H or BC7 + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 }, + { 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 } + }, + + { // BC6H/BC7 Partition Set Fixups for 2 Subsets + { 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 }, + { 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 }, + { 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 }, + { 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 }, + { 0,15, 0 },{ 0, 2, 0 },{ 0, 8, 0 },{ 0, 2, 0 }, + { 0, 2, 0 },{ 0, 8, 0 },{ 0, 8, 0 },{ 0,15, 0 }, + { 0, 2, 0 },{ 0, 8, 0 },{ 0, 2, 0 },{ 0, 2, 0 }, + { 0, 8, 0 },{ 0, 8, 0 },{ 0, 2, 0 },{ 0, 2, 0 }, + + // BC7 Partition Set Fixups for 2 Subsets (second-half) + { 0,15, 0 },{ 0,15, 0 },{ 0, 6, 0 },{ 0, 8, 0 }, + { 0, 2, 0 },{ 0, 8, 0 },{ 0,15, 0 },{ 0,15, 0 }, + { 0, 2, 0 },{ 0, 8, 0 },{ 0, 2, 0 },{ 0, 2, 0 }, + { 0, 2, 0 },{ 0,15, 0 },{ 0,15, 0 },{ 0, 6, 0 }, + { 0, 6, 0 },{ 0, 2, 0 },{ 0, 6, 0 },{ 0, 8, 0 }, + { 0,15, 0 },{ 0,15, 0 },{ 0, 2, 0 },{ 0, 2, 0 }, + { 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 },{ 0,15, 0 }, + { 0,15, 0 },{ 0, 2, 0 },{ 0, 2, 0 },{ 0,15, 0 } + }, + + { // BC7 Partition Set Fixups for 3 Subsets + { 0, 3,15 },{ 0, 3, 8 },{ 0,15, 8 },{ 0,15, 3 }, + { 0, 8,15 },{ 0, 3,15 },{ 0,15, 3 },{ 0,15, 8 }, + { 0, 8,15 },{ 0, 8,15 },{ 0, 6,15 },{ 0, 6,15 }, + { 0, 6,15 },{ 0, 5,15 },{ 0, 3,15 },{ 0, 3, 8 }, + { 0, 3,15 },{ 0, 3, 8 },{ 0, 8,15 },{ 0,15, 3 }, + { 0, 3,15 },{ 0, 3, 8 },{ 0, 6,15 },{ 0,10, 8 }, + { 0, 5, 3 },{ 0, 8,15 },{ 0, 8, 6 },{ 0, 6,10 }, + { 0, 8,15 },{ 0, 5,15 },{ 0,15,10 },{ 0,15, 8 }, + { 0, 8,15 },{ 0,15, 3 },{ 0, 3,15 },{ 0, 5,10 }, + { 0, 6,10 },{ 0,10, 8 },{ 0, 8, 9 },{ 0,15,10 }, + { 0,15, 6 },{ 0, 3,15 },{ 0,15, 8 },{ 0, 5,15 }, + { 0,15, 3 },{ 0,15, 6 },{ 0,15, 6 },{ 0,15, 8 }, + { 0, 3,15 },{ 0,15, 3 },{ 0, 5,15 },{ 0, 5,15 }, + { 0, 5,15 },{ 0, 8,15 },{ 0, 5,15 },{ 0,10,15 }, + { 0, 5,15 },{ 0,10,15 },{ 0, 8,15 },{ 0,13,15 }, + { 0,15, 3 },{ 0,12,15 },{ 0, 3,15 },{ 0, 3, 8 } + } + }; + + const int g_aWeights2[] = { 0, 21, 43, 64 }; + const int g_aWeights3[] = { 0, 9, 18, 27, 37, 46, 55, 64 }; + const int g_aWeights4[] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; +} + +namespace DirectX +{ + class LDRColorA + { + public: + uint8_t r, g, b, a; + + LDRColorA() = default; + LDRColorA(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a) noexcept : r(_r), g(_g), b(_b), a(_a) {} + + LDRColorA(LDRColorA const&) = default; + LDRColorA& operator= (const LDRColorA&) = default; + + LDRColorA(LDRColorA&&) = default; + LDRColorA& operator= (LDRColorA&&) = default; + + const uint8_t& operator [] (_In_range_(0, 3) size_t uElement) const noexcept + { + switch (uElement) + { + case 0: return r; + case 1: return g; + case 2: return b; + case 3: return a; + default: assert(false); return r; + } + } + + uint8_t& operator [] (_In_range_(0, 3) size_t uElement) noexcept + { + switch (uElement) + { + case 0: return r; + case 1: return g; + case 2: return b; + case 3: return a; + default: assert(false); return r; + } + } + + LDRColorA operator = (_In_ const HDRColorA& c) noexcept + { + LDRColorA ret; + HDRColorA tmp(c); + tmp = tmp.Clamp(0.0f, 1.0f) * 255.0f; + ret.r = uint8_t(tmp.r + 0.001f); + ret.g = uint8_t(tmp.g + 0.001f); + ret.b = uint8_t(tmp.b + 0.001f); + ret.a = uint8_t(tmp.a + 0.001f); + return ret; + } + + static void InterpolateRGB(_In_ const LDRColorA& c0, _In_ const LDRColorA& c1, _In_ size_t wc, _In_ _In_range_(2, 4) size_t wcprec, _Out_ LDRColorA& out) noexcept + { + const int* aWeights = nullptr; + switch (wcprec) + { + case 2: aWeights = g_aWeights2; assert(wc < 4); _Analysis_assume_(wc < 4); break; + case 3: aWeights = g_aWeights3; assert(wc < 8); _Analysis_assume_(wc < 8); break; + case 4: aWeights = g_aWeights4; assert(wc < 16); _Analysis_assume_(wc < 16); break; + default: assert(false); out.r = out.g = out.b = 0; return; + } + out.r = uint8_t((uint32_t(c0.r) * uint32_t(BC67_WEIGHT_MAX - aWeights[wc]) + uint32_t(c1.r) * uint32_t(aWeights[wc]) + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT); + out.g = uint8_t((uint32_t(c0.g) * uint32_t(BC67_WEIGHT_MAX - aWeights[wc]) + uint32_t(c1.g) * uint32_t(aWeights[wc]) + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT); + out.b = uint8_t((uint32_t(c0.b) * uint32_t(BC67_WEIGHT_MAX - aWeights[wc]) + uint32_t(c1.b) * uint32_t(aWeights[wc]) + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT); + } + + static void InterpolateA(_In_ const LDRColorA& c0, _In_ const LDRColorA& c1, _In_ size_t wa, _In_range_(2, 4) _In_ size_t waprec, _Out_ LDRColorA& out) noexcept + { + const int* aWeights = nullptr; + switch (waprec) + { + case 2: aWeights = g_aWeights2; assert(wa < 4); _Analysis_assume_(wa < 4); break; + case 3: aWeights = g_aWeights3; assert(wa < 8); _Analysis_assume_(wa < 8); break; + case 4: aWeights = g_aWeights4; assert(wa < 16); _Analysis_assume_(wa < 16); break; + default: assert(false); out.a = 0; return; + } + out.a = uint8_t((uint32_t(c0.a) * uint32_t(BC67_WEIGHT_MAX - aWeights[wa]) + uint32_t(c1.a) * uint32_t(aWeights[wa]) + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT); + } + + static void Interpolate(_In_ const LDRColorA& c0, _In_ const LDRColorA& c1, _In_ size_t wc, _In_ size_t wa, _In_ _In_range_(2, 4) size_t wcprec, _In_ _In_range_(2, 4) size_t waprec, _Out_ LDRColorA& out) noexcept + { + InterpolateRGB(c0, c1, wc, wcprec, out); + InterpolateA(c0, c1, wa, waprec, out); + } + }; + + static_assert(sizeof(LDRColorA) == 4, "Unexpected packing"); + + struct LDREndPntPair + { + LDRColorA A; + LDRColorA B; + }; + + inline HDRColorA::HDRColorA(const LDRColorA& c) noexcept + { + r = float(c.r) * (1.0f / 255.0f); + g = float(c.g) * (1.0f / 255.0f); + b = float(c.b) * (1.0f / 255.0f); + a = float(c.a) * (1.0f / 255.0f); + } + + inline HDRColorA& HDRColorA::operator = (const LDRColorA& c) noexcept + { + r = static_cast(c.r); + g = static_cast(c.g); + b = static_cast(c.b); + a = static_cast(c.a); + return *this; + } + + inline LDRColorA HDRColorA::ToLDRColorA() const noexcept + { + return LDRColorA(static_cast(r + 0.01f), static_cast(g + 0.01f), static_cast(b + 0.01f), static_cast(a + 0.01f)); + } +} + +namespace +{ + class INTColor + { + public: + int r, g, b; + int pad; + + INTColor() = default; + INTColor(int nr, int ng, int nb) noexcept : r(nr), g(ng), b(nb), pad(0) {} + + INTColor(INTColor const&) = default; + INTColor& operator= (const INTColor&) = default; + + INTColor(INTColor&&) = default; + INTColor& operator= (INTColor&&) = default; + + INTColor& operator += (_In_ const INTColor& c) noexcept + { + r += c.r; + g += c.g; + b += c.b; + return *this; + } + + INTColor& operator -= (_In_ const INTColor& c) noexcept + { + r -= c.r; + g -= c.g; + b -= c.b; + return *this; + } + + INTColor& operator &= (_In_ const INTColor& c) noexcept + { + r &= c.r; + g &= c.g; + b &= c.b; + return *this; + } + + int& operator [] (_In_ uint8_t i) noexcept + { + assert(i < sizeof(INTColor) / sizeof(int)); + _Analysis_assume_(i < sizeof(INTColor) / sizeof(int)); + return reinterpret_cast(this)[i]; + } + + void Set(_In_ const HDRColorA& c, _In_ bool bSigned) noexcept + { + PackedVector::XMHALF4 aF16; + + const XMVECTOR v = XMLoadFloat4(reinterpret_cast(&c)); + XMStoreHalf4(&aF16, v); + + r = F16ToINT(aF16.x, bSigned); + g = F16ToINT(aF16.y, bSigned); + b = F16ToINT(aF16.z, bSigned); + } + + INTColor& Clamp(_In_ int iMin, _In_ int iMax) noexcept + { + r = std::min(iMax, std::max(iMin, r)); + g = std::min(iMax, std::max(iMin, g)); + b = std::min(iMax, std::max(iMin, b)); + return *this; + } + + INTColor& SignExtend(_In_ const LDRColorA& Prec) noexcept + { + r = SIGN_EXTEND(r, int(Prec.r)); + g = SIGN_EXTEND(g, int(Prec.g)); + b = SIGN_EXTEND(b, int(Prec.b)); + return *this; + } + + void ToF16(_Out_writes_(3) PackedVector::HALF aF16[3], _In_ bool bSigned) const noexcept + { + aF16[0] = INT2F16(r, bSigned); + aF16[1] = INT2F16(g, bSigned); + aF16[2] = INT2F16(b, bSigned); + } + + private: + static int F16ToINT(_In_ const PackedVector::HALF& f, _In_ bool bSigned) noexcept + { + uint16_t input = *reinterpret_cast(&f); + int out, s; + if (bSigned) + { + s = input & F16S_MASK; + input &= F16EM_MASK; + if (input > F16MAX) out = F16MAX; + else out = input; + out = s ? -out : out; + } + else + { + if (input & F16S_MASK) out = 0; + else out = input; + } + return out; + } + + static PackedVector::HALF INT2F16(_In_ int input, _In_ bool bSigned) noexcept + { + PackedVector::HALF h; + uint16_t out; + if (bSigned) + { + int s = 0; + if (input < 0) + { + s = F16S_MASK; + input = -input; + } + out = uint16_t(s | input); + } + else + { + assert(input >= 0 && input <= F16MAX); + out = static_cast(input); + } + + *reinterpret_cast(&h) = out; + return h; + } + }; + + static_assert(sizeof(INTColor) == 16, "Unexpected packing"); + + struct INTEndPntPair + { + INTColor A; + INTColor B; + }; + + template< size_t SizeInBytes > + class CBits + { + public: + uint8_t GetBit(_Inout_ size_t& uStartBit) const noexcept + { + assert(uStartBit < 128); + _Analysis_assume_(uStartBit < 128); + const size_t uIndex = uStartBit >> 3; + auto const ret = static_cast((m_uBits[uIndex] >> (uStartBit - (uIndex << 3))) & 0x01); + uStartBit++; + return ret; + } + + uint8_t GetBits(_Inout_ size_t& uStartBit, _In_ size_t uNumBits) const noexcept + { + if (uNumBits == 0) return 0; + assert(uStartBit + uNumBits <= 128 && uNumBits <= 8); + _Analysis_assume_(uStartBit + uNumBits <= 128 && uNumBits <= 8); + uint8_t ret; + const size_t uIndex = uStartBit >> 3; + const size_t uBase = uStartBit - (uIndex << 3); + if (uBase + uNumBits > 8) + { + const size_t uFirstIndexBits = 8 - uBase; + const size_t uNextIndexBits = uNumBits - uFirstIndexBits; + ret = static_cast((unsigned(m_uBits[uIndex]) >> uBase) | ((unsigned(m_uBits[uIndex + 1]) & ((1u << uNextIndexBits) - 1)) << uFirstIndexBits)); + } + else + { + ret = static_cast((m_uBits[uIndex] >> uBase) & ((1 << uNumBits) - 1)); + } + assert(ret < (1 << uNumBits)); + uStartBit += uNumBits; + return ret; + } + + void SetBit(_Inout_ size_t& uStartBit, _In_ uint8_t uValue) noexcept + { + assert(uStartBit < 128 && uValue < 2); + _Analysis_assume_(uStartBit < 128 && uValue < 2); + size_t uIndex = uStartBit >> 3; + const size_t uBase = uStartBit - (uIndex << 3); + m_uBits[uIndex] &= ~(1 << uBase); + m_uBits[uIndex] |= uValue << uBase; + uStartBit++; + } + + void SetBits(_Inout_ size_t& uStartBit, _In_ size_t uNumBits, _In_ uint8_t uValue) noexcept + { + if (uNumBits == 0) + return; + assert(uStartBit + uNumBits <= 128 && uNumBits <= 8); + _Analysis_assume_(uStartBit + uNumBits <= 128 && uNumBits <= 8); + assert(uValue < (1 << uNumBits)); + size_t uIndex = uStartBit >> 3; + const size_t uBase = uStartBit - (uIndex << 3); + if (uBase + uNumBits > 8) + { + const size_t uFirstIndexBits = 8 - uBase; + const size_t uNextIndexBits = uNumBits - uFirstIndexBits; + m_uBits[uIndex] &= ~(((1 << uFirstIndexBits) - 1) << uBase); + m_uBits[uIndex] |= uValue << uBase; + m_uBits[uIndex + 1] &= ~((1 << uNextIndexBits) - 1); + m_uBits[uIndex + 1] |= uValue >> uFirstIndexBits; + } + else + { + m_uBits[uIndex] &= ~(((1 << uNumBits) - 1) << uBase); + m_uBits[uIndex] |= uValue << uBase; + } + uStartBit += uNumBits; + } + + private: + uint8_t m_uBits[SizeInBytes]; + }; + + // BC6H compression (16 bits per texel) + class D3DX_BC6H : private CBits< 16 > + { + public: + void Decode(_In_ bool bSigned, _Out_writes_(NUM_PIXELS_PER_BLOCK) HDRColorA* pOut) const noexcept; + void Encode(_In_ bool bSigned, _In_reads_(NUM_PIXELS_PER_BLOCK) const HDRColorA* const pIn) noexcept; + + private: + #pragma warning(push) + #pragma warning(disable : 4480) + enum EField : uint8_t + { + NA, // N/A + M, // Mode + D, // Shape + RW, + RX, + RY, + RZ, + GW, + GX, + GY, + GZ, + BW, + BX, + BY, + BZ, + }; + #pragma warning(pop) + + struct ModeDescriptor + { + EField m_eField; + uint8_t m_uBit; + }; + + struct ModeInfo + { + uint8_t uMode; + uint8_t uPartitions; + bool bTransformed; + uint8_t uIndexPrec; + LDRColorA RGBAPrec[BC6H_MAX_REGIONS][2]; + }; + + #pragma warning(push) + #pragma warning(disable : 4512) + struct EncodeParams + { + float fBestErr; + const bool bSigned; + uint8_t uMode; + uint8_t uShape; + const HDRColorA* const aHDRPixels; + INTEndPntPair aUnqEndPts[BC6H_MAX_SHAPES][BC6H_MAX_REGIONS]; + INTColor aIPixels[NUM_PIXELS_PER_BLOCK]; + + EncodeParams(const HDRColorA* const aOriginal, bool bSignedFormat) noexcept : + fBestErr(FLT_MAX), bSigned(bSignedFormat), uMode(0), uShape(0), aHDRPixels(aOriginal), aUnqEndPts{}, aIPixels{} + { + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + aIPixels[i].Set(aOriginal[i], bSigned); + } + } + }; + #pragma warning(pop) + + static int Quantize(_In_ int iValue, _In_ int prec, _In_ bool bSigned) noexcept; + static int Unquantize(_In_ int comp, _In_ uint8_t uBitsPerComp, _In_ bool bSigned) noexcept; + static int FinishUnquantize(_In_ int comp, _In_ bool bSigned) noexcept; + + static bool EndPointsFit(_In_ const EncodeParams* pEP, _In_reads_(BC6H_MAX_REGIONS) const INTEndPntPair aEndPts[]) noexcept; + + void GeneratePaletteQuantized(_In_ const EncodeParams* pEP, _In_ const INTEndPntPair& endPts, + _Out_writes_(BC6H_MAX_INDICES) INTColor aPalette[]) const noexcept; + float MapColorsQuantized(_In_ const EncodeParams* pEP, _In_reads_(np) const INTColor aColors[], _In_ size_t np, _In_ const INTEndPntPair &endPts) const noexcept; + float PerturbOne(_In_ const EncodeParams* pEP, _In_reads_(np) const INTColor aColors[], _In_ size_t np, _In_ uint8_t ch, + _In_ const INTEndPntPair& oldEndPts, _Out_ INTEndPntPair& newEndPts, _In_ float fOldErr, _In_ int do_b) const noexcept; + void OptimizeOne(_In_ const EncodeParams* pEP, _In_reads_(np) const INTColor aColors[], _In_ size_t np, _In_ float aOrgErr, + _In_ const INTEndPntPair &aOrgEndPts, _Out_ INTEndPntPair &aOptEndPts) const noexcept; + void OptimizeEndPoints(_In_ const EncodeParams* pEP, _In_reads_(BC6H_MAX_REGIONS) const float aOrgErr[], + _In_reads_(BC6H_MAX_REGIONS) const INTEndPntPair aOrgEndPts[], + _Out_writes_all_(BC6H_MAX_REGIONS) INTEndPntPair aOptEndPts[]) const noexcept; + static void SwapIndices(_In_ const EncodeParams* pEP, _Inout_updates_all_(BC6H_MAX_REGIONS) INTEndPntPair aEndPts[], + _In_reads_(NUM_PIXELS_PER_BLOCK) size_t aIndices[]) noexcept; + void AssignIndices(_In_ const EncodeParams* pEP, _In_reads_(BC6H_MAX_REGIONS) const INTEndPntPair aEndPts[], + _Out_writes_(NUM_PIXELS_PER_BLOCK) size_t aIndices[], + _Out_writes_(BC6H_MAX_REGIONS) float aTotErr[]) const noexcept; + void QuantizeEndPts(_In_ const EncodeParams* pEP, _Out_writes_(BC6H_MAX_REGIONS) INTEndPntPair* qQntEndPts) const noexcept; + void EmitBlock(_In_ const EncodeParams* pEP, _In_reads_(BC6H_MAX_REGIONS) const INTEndPntPair aEndPts[], + _In_reads_(NUM_PIXELS_PER_BLOCK) const size_t aIndices[]) noexcept; + void Refine(_Inout_ EncodeParams* pEP) noexcept; + + static void GeneratePaletteUnquantized(_In_ const EncodeParams* pEP, _In_ size_t uRegion, _Out_writes_(BC6H_MAX_INDICES) INTColor aPalette[]) noexcept; + float MapColors(_In_ const EncodeParams* pEP, _In_ size_t uRegion, _In_ size_t np, _In_reads_(np) const size_t* auIndex) const noexcept; + float RoughMSE(_Inout_ EncodeParams* pEP) const noexcept; + + private: + static constexpr uint8_t c_NumModes = 14; + static constexpr uint8_t c_NumModeInfo = 32; + + static const ModeDescriptor ms_aDesc[c_NumModes][82]; + static const ModeInfo ms_aInfo[c_NumModes]; + static const int ms_aModeToInfo[c_NumModeInfo]; + }; + + // BC67 compression (16b bits per texel) + class D3DX_BC7 : private CBits< 16 > + { + public: + void Decode(_Out_writes_(NUM_PIXELS_PER_BLOCK) HDRColorA* pOut) const noexcept; + void Encode(uint32_t flags, _In_reads_(NUM_PIXELS_PER_BLOCK) const HDRColorA* const pIn) noexcept; + + private: + struct ModeInfo + { + uint8_t uPartitions; + uint8_t uPartitionBits; + uint8_t uPBits; + uint8_t uRotationBits; + uint8_t uIndexModeBits; + uint8_t uIndexPrec; + uint8_t uIndexPrec2; + LDRColorA RGBAPrec; + LDRColorA RGBAPrecWithP; + }; + + #pragma warning(push) + #pragma warning(disable : 4512) + struct EncodeParams + { + uint8_t uMode; + LDREndPntPair aEndPts[BC7_MAX_SHAPES][BC7_MAX_REGIONS]; + LDRColorA aLDRPixels[NUM_PIXELS_PER_BLOCK]; + const HDRColorA* const aHDRPixels; + + EncodeParams(const HDRColorA* const aOriginal) noexcept : uMode(0), aEndPts{}, aLDRPixels{}, aHDRPixels(aOriginal) {} + }; + #pragma warning(pop) + + static uint8_t Quantize(_In_ uint8_t comp, _In_ uint8_t uPrec) noexcept + { + assert(0 < uPrec && uPrec <= 8); + const uint8_t rnd = std::min(255u, static_cast(unsigned(comp) + (1u << (7 - uPrec)))); + return uint8_t(rnd >> (8u - uPrec)); + } + + static LDRColorA Quantize(_In_ const LDRColorA& c, _In_ const LDRColorA& RGBAPrec) noexcept + { + LDRColorA q; + q.r = Quantize(c.r, RGBAPrec.r); + q.g = Quantize(c.g, RGBAPrec.g); + q.b = Quantize(c.b, RGBAPrec.b); + if (RGBAPrec.a) + q.a = Quantize(c.a, RGBAPrec.a); + else + q.a = 255; + return q; + } + + static uint8_t Unquantize(_In_ uint8_t comp, _In_ size_t uPrec) noexcept + { + assert(0 < uPrec && uPrec <= 8); + comp = static_cast(unsigned(comp) << (8 - uPrec)); + return uint8_t(comp | (comp >> uPrec)); + } + + static LDRColorA Unquantize(_In_ const LDRColorA& c, _In_ const LDRColorA& RGBAPrec) noexcept + { + LDRColorA q; + q.r = Unquantize(c.r, RGBAPrec.r); + q.g = Unquantize(c.g, RGBAPrec.g); + q.b = Unquantize(c.b, RGBAPrec.b); + q.a = RGBAPrec.a > 0 ? Unquantize(c.a, RGBAPrec.a) : 255u; + return q; + } + + void GeneratePaletteQuantized(_In_ const EncodeParams* pEP, _In_ size_t uIndexMode, _In_ const LDREndPntPair& endpts, + _Out_writes_(BC7_MAX_INDICES) LDRColorA aPalette[]) const noexcept; + float PerturbOne(_In_ const EncodeParams* pEP, _In_reads_(np) const LDRColorA colors[], _In_ size_t np, _In_ size_t uIndexMode, + _In_ size_t ch, _In_ const LDREndPntPair &old_endpts, + _Out_ LDREndPntPair &new_endpts, _In_ float old_err, _In_ uint8_t do_b) const noexcept; + void Exhaustive(_In_ const EncodeParams* pEP, _In_reads_(np) const LDRColorA aColors[], _In_ size_t np, _In_ size_t uIndexMode, + _In_ size_t ch, _Inout_ float& fOrgErr, _Inout_ LDREndPntPair& optEndPt) const noexcept; + void OptimizeOne(_In_ const EncodeParams* pEP, _In_reads_(np) const LDRColorA colors[], _In_ size_t np, _In_ size_t uIndexMode, + _In_ float orig_err, _In_ const LDREndPntPair &orig_endpts, _Out_ LDREndPntPair &opt_endpts) const noexcept; + void OptimizeEndPoints(_In_ const EncodeParams* pEP, _In_ size_t uShape, _In_ size_t uIndexMode, + _In_reads_(BC7_MAX_REGIONS) const float orig_err[], + _In_reads_(BC7_MAX_REGIONS) const LDREndPntPair orig_endpts[], + _Out_writes_(BC7_MAX_REGIONS) LDREndPntPair opt_endpts[]) const noexcept; + void AssignIndices(_In_ const EncodeParams* pEP, _In_ size_t uShape, _In_ size_t uIndexMode, + _In_reads_(BC7_MAX_REGIONS) LDREndPntPair endpts[], + _Out_writes_(NUM_PIXELS_PER_BLOCK) size_t aIndices[], _Out_writes_(NUM_PIXELS_PER_BLOCK) size_t aIndices2[], + _Out_writes_(BC7_MAX_REGIONS) float afTotErr[]) const noexcept; + void EmitBlock(_In_ const EncodeParams* pEP, _In_ size_t uShape, _In_ size_t uRotation, _In_ size_t uIndexMode, + _In_reads_(BC7_MAX_REGIONS) const LDREndPntPair aEndPts[], + _In_reads_(NUM_PIXELS_PER_BLOCK) const size_t aIndex[], + _In_reads_(NUM_PIXELS_PER_BLOCK) const size_t aIndex2[]) noexcept; + void FixEndpointPBits(_In_ const EncodeParams* pEP, _In_reads_(BC7_MAX_REGIONS) const LDREndPntPair *pOrigEndpoints, _Out_writes_(BC7_MAX_REGIONS) LDREndPntPair *pFixedEndpoints) noexcept; + float Refine(_In_ const EncodeParams* pEP, _In_ size_t uShape, _In_ size_t uRotation, _In_ size_t uIndexMode) noexcept; + + float MapColors(_In_ const EncodeParams* pEP, _In_reads_(np) const LDRColorA aColors[], _In_ size_t np, _In_ size_t uIndexMode, + _In_ const LDREndPntPair& endPts, _In_ float fMinErr) const noexcept; + static float RoughMSE(_Inout_ EncodeParams* pEP, _In_ size_t uShape, _In_ size_t uIndexMode) noexcept; + + private: + static constexpr uint8_t c_NumModes = 8; + + static const ModeInfo ms_aInfo[c_NumModes]; + }; +} + +// BC6H Compression +const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[D3DX_BC6H::c_NumModes][82] = +{ + { // Mode 1 (0x00) - 10 5 5 5 + { M, 0}, { M, 1}, {GY, 4}, {BY, 4}, {BZ, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BW, 8}, {BW, 9}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {GZ, 4}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {BZ, 0}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BZ, 1}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {RY, 4}, + {BZ, 2}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {RZ, 4}, {BZ, 3}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 2 (0x01) - 7 6 6 6 + { M, 0}, { M, 1}, {GY, 5}, {GZ, 4}, {GZ, 5}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {BZ, 0}, {BZ, 1}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {BY, 5}, {BZ, 2}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BZ, 3}, {BZ, 5}, {BZ, 4}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {RX, 5}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {GX, 5}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BX, 5}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {RY, 4}, + {RY, 5}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {RZ, 4}, {RZ, 5}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 3 (0x02) - 11 5 4 4 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BW, 8}, {BW, 9}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {RW,10}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GW,10}, + {BZ, 0}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BW,10}, + {BZ, 1}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {RY, 4}, + {BZ, 2}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {RZ, 4}, {BZ, 3}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 4 (0x06) - 11 4 5 4 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BW, 8}, {BW, 9}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RW,10}, + {GZ, 4}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {GW,10}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BW,10}, + {BZ, 1}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {BZ, 0}, + {BZ, 2}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {GY, 4}, {BZ, 3}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 5 (0x0a) - 11 4 4 5 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BW, 8}, {BW, 9}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RW,10}, + {BY, 4}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GW,10}, + {BZ, 0}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BW,10}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {BZ, 1}, + {BZ, 2}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {BZ, 4}, {BZ, 3}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 6 (0x0e) - 9 5 5 5 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BW, 8}, {BZ, 4}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {GZ, 4}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {BZ, 0}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BZ, 1}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {RY, 4}, + {BZ, 2}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {RZ, 4}, {BZ, 3}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 7 (0x12) - 8 6 5 5 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {GZ, 4}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {BZ, 2}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BZ, 3}, {BZ, 4}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {RX, 5}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {BZ, 0}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BZ, 1}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {RY, 4}, + {RY, 5}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {RZ, 4}, {RZ, 5}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 8 (0x16) - 8 5 6 5 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {BZ, 0}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GY, 5}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {GZ, 5}, {BZ, 4}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {GZ, 4}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {GX, 5}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BZ, 1}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {RY, 4}, + {BZ, 2}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {RZ, 4}, {BZ, 3}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 9 (0x1a) - 8 5 5 6 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {BZ, 1}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {BY, 5}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BZ, 5}, {BZ, 4}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {GZ, 4}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {BZ, 0}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BX, 5}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {RY, 4}, + {BZ, 2}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {RZ, 4}, {BZ, 3}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 10 (0x1e) - 6 6 6 6 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {GZ, 4}, {BZ, 0}, {BZ, 1}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GY, 5}, {BY, 5}, {BZ, 2}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {GZ, 5}, {BZ, 3}, {BZ, 5}, {BZ, 4}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {RX, 5}, {GY, 0}, {GY, 1}, {GY, 2}, {GY, 3}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {GX, 5}, {GZ, 0}, {GZ, 1}, {GZ, 2}, {GZ, 3}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BX, 5}, {BY, 0}, {BY, 1}, {BY, 2}, {BY, 3}, {RY, 0}, {RY, 1}, {RY, 2}, {RY, 3}, {RY, 4}, + {RY, 5}, {RZ, 0}, {RZ, 1}, {RZ, 2}, {RZ, 3}, {RZ, 4}, {RZ, 5}, { D, 0}, { D, 1}, { D, 2}, + { D, 3}, { D, 4}, + }, + + { // Mode 11 (0x03) - 10 10 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BW, 8}, {BW, 9}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {RX, 5}, {RX, 6}, {RX, 7}, {RX, 8}, {RX, 9}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {GX, 5}, {GX, 6}, {GX, 7}, {GX, 8}, {GX, 9}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BX, 5}, {BX, 6}, {BX, 7}, {BX, 8}, {BX, 9}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, + {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, + {NA, 0}, {NA, 0}, + }, + + { // Mode 12 (0x07) - 11 9 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BW, 8}, {BW, 9}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {RX, 5}, {RX, 6}, {RX, 7}, {RX, 8}, {RW,10}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {GX, 5}, {GX, 6}, {GX, 7}, {GX, 8}, {GW,10}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BX, 5}, {BX, 6}, {BX, 7}, {BX, 8}, {BW,10}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, + {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, + {NA, 0}, {NA, 0}, + }, + + { // Mode 13 (0x0b) - 12 8 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BW, 8}, {BW, 9}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RX, 4}, + {RX, 5}, {RX, 6}, {RX, 7}, {RW,11}, {RW,10}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GX, 4}, + {GX, 5}, {GX, 6}, {GX, 7}, {GW,11}, {GW,10}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BX, 4}, + {BX, 5}, {BX, 6}, {BX, 7}, {BW,11}, {BW,10}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, + {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, + {NA, 0}, {NA, 0}, + }, + + { // Mode 14 (0x0f) - 16 4 + { M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4}, + {RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4}, + {GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4}, + {BW, 5}, {BW, 6}, {BW, 7}, {BW, 8}, {BW, 9}, {RX, 0}, {RX, 1}, {RX, 2}, {RX, 3}, {RW,15}, + {RW,14}, {RW,13}, {RW,12}, {RW,11}, {RW,10}, {GX, 0}, {GX, 1}, {GX, 2}, {GX, 3}, {GW,15}, + {GW,14}, {GW,13}, {GW,12}, {GW,11}, {GW,10}, {BX, 0}, {BX, 1}, {BX, 2}, {BX, 3}, {BW,15}, + {BW,14}, {BW,13}, {BW,12}, {BW,11}, {BW,10}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, + {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, {NA, 0}, + {NA, 0}, {NA, 0}, + }, +}; + +// Mode, Partitions, Transformed, IndexPrec, RGBAPrec +const D3DX_BC6H::ModeInfo D3DX_BC6H::ms_aInfo[D3DX_BC6H::c_NumModes] = +{ + {0x00, 1, true, 3, { { LDRColorA(10,10,10,0), LDRColorA(5, 5, 5,0) }, { LDRColorA(5,5,5,0), LDRColorA(5,5,5,0) } } }, // Mode 1 + {0x01, 1, true, 3, { { LDRColorA(7, 7, 7,0), LDRColorA(6, 6, 6,0) }, { LDRColorA(6,6,6,0), LDRColorA(6,6,6,0) } } }, // Mode 2 + {0x02, 1, true, 3, { { LDRColorA(11,11,11,0), LDRColorA(5, 4, 4,0) }, { LDRColorA(5,4,4,0), LDRColorA(5,4,4,0) } } }, // Mode 3 + {0x06, 1, true, 3, { { LDRColorA(11,11,11,0), LDRColorA(4, 5, 4,0) }, { LDRColorA(4,5,4,0), LDRColorA(4,5,4,0) } } }, // Mode 4 + {0x0a, 1, true, 3, { { LDRColorA(11,11,11,0), LDRColorA(4, 4, 5,0) }, { LDRColorA(4,4,5,0), LDRColorA(4,4,5,0) } } }, // Mode 5 + {0x0e, 1, true, 3, { { LDRColorA(9, 9, 9,0), LDRColorA(5, 5, 5,0) }, { LDRColorA(5,5,5,0), LDRColorA(5,5,5,0) } } }, // Mode 6 + {0x12, 1, true, 3, { { LDRColorA(8, 8, 8,0), LDRColorA(6, 5, 5,0) }, { LDRColorA(6,5,5,0), LDRColorA(6,5,5,0) } } }, // Mode 7 + {0x16, 1, true, 3, { { LDRColorA(8, 8, 8,0), LDRColorA(5, 6, 5,0) }, { LDRColorA(5,6,5,0), LDRColorA(5,6,5,0) } } }, // Mode 8 + {0x1a, 1, true, 3, { { LDRColorA(8, 8, 8,0), LDRColorA(5, 5, 6,0) }, { LDRColorA(5,5,6,0), LDRColorA(5,5,6,0) } } }, // Mode 9 + {0x1e, 1, false, 3, { { LDRColorA(6, 6, 6,0), LDRColorA(6, 6, 6,0) }, { LDRColorA(6,6,6,0), LDRColorA(6,6,6,0) } } }, // Mode 10 + {0x03, 0, false, 4, { { LDRColorA(10,10,10,0), LDRColorA(10,10,10,0) }, { LDRColorA(0,0,0,0), LDRColorA(0,0,0,0) } } }, // Mode 11 + {0x07, 0, true, 4, { { LDRColorA(11,11,11,0), LDRColorA(9, 9, 9,0) }, { LDRColorA(0,0,0,0), LDRColorA(0,0,0,0) } } }, // Mode 12 + {0x0b, 0, true, 4, { { LDRColorA(12,12,12,0), LDRColorA(8, 8, 8,0) }, { LDRColorA(0,0,0,0), LDRColorA(0,0,0,0) } } }, // Mode 13 + {0x0f, 0, true, 4, { { LDRColorA(16,16,16,0), LDRColorA(4, 4, 4,0) }, { LDRColorA(0,0,0,0), LDRColorA(0,0,0,0) } } }, // Mode 14 +}; + +const int D3DX_BC6H::ms_aModeToInfo[D3DX_BC6H::c_NumModeInfo] = +{ + 0, // Mode 1 - 0x00 + 1, // Mode 2 - 0x01 + 2, // Mode 3 - 0x02 + 10, // Mode 11 - 0x03 + -1, // Invalid - 0x04 + -1, // Invalid - 0x05 + 3, // Mode 4 - 0x06 + 11, // Mode 12 - 0x07 + -1, // Invalid - 0x08 + -1, // Invalid - 0x09 + 4, // Mode 5 - 0x0a + 12, // Mode 13 - 0x0b + -1, // Invalid - 0x0c + -1, // Invalid - 0x0d + 5, // Mode 6 - 0x0e + 13, // Mode 14 - 0x0f + -1, // Invalid - 0x10 + -1, // Invalid - 0x11 + 6, // Mode 7 - 0x12 + -1, // Reserved - 0x13 + -1, // Invalid - 0x14 + -1, // Invalid - 0x15 + 7, // Mode 8 - 0x16 + -1, // Reserved - 0x17 + -1, // Invalid - 0x18 + -1, // Invalid - 0x19 + 8, // Mode 9 - 0x1a + -1, // Reserved - 0x1b + -1, // Invalid - 0x1c + -1, // Invalid - 0x1d + 9, // Mode 10 - 0x1e + -1, // Resreved - 0x1f +}; + +// BC7 compression: uPartitions, uPartitionBits, uPBits, uRotationBits, uIndexModeBits, uIndexPrec, uIndexPrec2, RGBAPrec, RGBAPrecWithP +const D3DX_BC7::ModeInfo D3DX_BC7::ms_aInfo[D3DX_BC7::c_NumModes] = +{ + {2, 4, 6, 0, 0, 3, 0, LDRColorA(4,4,4,0), LDRColorA(5,5,5,0)}, + // Mode 0: Color only, 3 Subsets, RGBP 4441 (unique P-bit), 3-bit indecies, 16 partitions + {1, 6, 2, 0, 0, 3, 0, LDRColorA(6,6,6,0), LDRColorA(7,7,7,0)}, + // Mode 1: Color only, 2 Subsets, RGBP 6661 (shared P-bit), 3-bit indecies, 64 partitions + {2, 6, 0, 0, 0, 2, 0, LDRColorA(5,5,5,0), LDRColorA(5,5,5,0)}, + // Mode 2: Color only, 3 Subsets, RGB 555, 2-bit indecies, 64 partitions + {1, 6, 4, 0, 0, 2, 0, LDRColorA(7,7,7,0), LDRColorA(8,8,8,0)}, + // Mode 3: Color only, 2 Subsets, RGBP 7771 (unique P-bit), 2-bits indecies, 64 partitions + {0, 0, 0, 2, 1, 2, 3, LDRColorA(5,5,5,6), LDRColorA(5,5,5,6)}, + // Mode 4: Color w/ Separate Alpha, 1 Subset, RGB 555, A6, 16x2/16x3-bit indices, 2-bit rotation, 1-bit index selector + {0, 0, 0, 2, 0, 2, 2, LDRColorA(7,7,7,8), LDRColorA(7,7,7,8)}, + // Mode 5: Color w/ Separate Alpha, 1 Subset, RGB 777, A8, 16x2/16x2-bit indices, 2-bit rotation + {0, 0, 2, 0, 0, 4, 0, LDRColorA(7,7,7,7), LDRColorA(8,8,8,8)}, + // Mode 6: Color+Alpha, 1 Subset, RGBAP 77771 (unique P-bit), 16x4-bit indecies + {1, 6, 4, 0, 0, 2, 0, LDRColorA(5,5,5,5), LDRColorA(6,6,6,6)} + // Mode 7: Color+Alpha, 2 Subsets, RGBAP 55551 (unique P-bit), 2-bit indices, 64 partitions +}; + + +namespace +{ + //------------------------------------------------------------------------------------- + // Helper functions + //------------------------------------------------------------------------------------- + inline bool IsFixUpOffset(_In_range_(0, 2) size_t uPartitions, _In_range_(0, 63) size_t uShape, _In_range_(0, 15) size_t uOffset) noexcept + { + assert(uPartitions < 3 && uShape < 64 && uOffset < 16); + _Analysis_assume_(uPartitions < 3 && uShape < 64 && uOffset < 16); + for (size_t p = 0; p <= uPartitions; p++) + { + if (uOffset == g_aFixUp[uPartitions][uShape][p]) + { + return true; + } + } + return false; + } + + inline void TransformForward(_Inout_updates_all_(BC6H_MAX_REGIONS) INTEndPntPair aEndPts[]) noexcept + { + aEndPts[0].B -= aEndPts[0].A; + aEndPts[1].A -= aEndPts[0].A; + aEndPts[1].B -= aEndPts[0].A; + } + + inline void TransformInverse(_Inout_updates_all_(BC6H_MAX_REGIONS) INTEndPntPair aEndPts[], _In_ const LDRColorA& Prec, _In_ bool bSigned) noexcept + { + const INTColor WrapMask((1 << Prec.r) - 1, (1 << Prec.g) - 1, (1 << Prec.b) - 1); + aEndPts[0].B += aEndPts[0].A; aEndPts[0].B &= WrapMask; + aEndPts[1].A += aEndPts[0].A; aEndPts[1].A &= WrapMask; + aEndPts[1].B += aEndPts[0].A; aEndPts[1].B &= WrapMask; + if (bSigned) + { + aEndPts[0].B.SignExtend(Prec); + aEndPts[1].A.SignExtend(Prec); + aEndPts[1].B.SignExtend(Prec); + } + } + + inline float Norm(_In_ const INTColor& a, _In_ const INTColor& b) noexcept + { + const float dr = float(a.r) - float(b.r); + const float dg = float(a.g) - float(b.g); + const float db = float(a.b) - float(b.b); + return dr * dr + dg * dg + db * db; + } + + // return # of bits needed to store n. handle signed or unsigned cases properly + inline int NBits(_In_ int n, _In_ bool bIsSigned) noexcept + { + int nb; + if (n == 0) + { + return 0; // no bits needed for 0, signed or not + } + else if (n > 0) + { + for (nb = 0; n; ++nb, n >>= 1); + return nb + (bIsSigned ? 1 : 0); + } + else + { + assert(bIsSigned); + for (nb = 0; n < -1; ++nb, n >>= 1); + return nb + 1; + } + } + + + //------------------------------------------------------------------------------------- + void OptimizeRGB( + _In_reads_(NUM_PIXELS_PER_BLOCK) const HDRColorA* const pPoints, + _Out_ HDRColorA* pX, + _Out_ HDRColorA* pY, + _In_range_(3, 4) uint32_t cSteps, + size_t cPixels, + _In_reads_(cPixels) const size_t* pIndex) noexcept + { + const float *pC = (3 == cSteps) ? pC3 : pC4; + const float *pD = (3 == cSteps) ? pD3 : pD4; + + // Find Min and Max points, as starting point + HDRColorA X(FLT_MAX, FLT_MAX, FLT_MAX, 0.0f); + HDRColorA Y(-FLT_MAX, -FLT_MAX, -FLT_MAX, 0.0f); + + for (size_t iPoint = 0; iPoint < cPixels; iPoint++) + { + if (pPoints[pIndex[iPoint]].r < X.r) X.r = pPoints[pIndex[iPoint]].r; + if (pPoints[pIndex[iPoint]].g < X.g) X.g = pPoints[pIndex[iPoint]].g; + if (pPoints[pIndex[iPoint]].b < X.b) X.b = pPoints[pIndex[iPoint]].b; + if (pPoints[pIndex[iPoint]].r > Y.r) Y.r = pPoints[pIndex[iPoint]].r; + if (pPoints[pIndex[iPoint]].g > Y.g) Y.g = pPoints[pIndex[iPoint]].g; + if (pPoints[pIndex[iPoint]].b > Y.b) Y.b = pPoints[pIndex[iPoint]].b; + } + + // Diagonal axis + HDRColorA AB; + AB.r = Y.r - X.r; + AB.g = Y.g - X.g; + AB.b = Y.b - X.b; + + const float fAB = AB.r * AB.r + AB.g * AB.g + AB.b * AB.b; + + // Single color block.. no need to root-find + if (fAB < FLT_MIN) + { + pX->r = X.r; pX->g = X.g; pX->b = X.b; + pY->r = Y.r; pY->g = Y.g; pY->b = Y.b; + return; + } + + // Try all four axis directions, to determine which diagonal best fits data + const float fABInv = 1.0f / fAB; + + HDRColorA Dir; + Dir.r = AB.r * fABInv; + Dir.g = AB.g * fABInv; + Dir.b = AB.b * fABInv; + + HDRColorA Mid; + Mid.r = (X.r + Y.r) * 0.5f; + Mid.g = (X.g + Y.g) * 0.5f; + Mid.b = (X.b + Y.b) * 0.5f; + + float fDir[4]; + fDir[0] = fDir[1] = fDir[2] = fDir[3] = 0.0f; + + for (size_t iPoint = 0; iPoint < cPixels; iPoint++) + { + HDRColorA Pt; + Pt.r = (pPoints[pIndex[iPoint]].r - Mid.r) * Dir.r; + Pt.g = (pPoints[pIndex[iPoint]].g - Mid.g) * Dir.g; + Pt.b = (pPoints[pIndex[iPoint]].b - Mid.b) * Dir.b; + + float f; + f = Pt.r + Pt.g + Pt.b; fDir[0] += f * f; + f = Pt.r + Pt.g - Pt.b; fDir[1] += f * f; + f = Pt.r - Pt.g + Pt.b; fDir[2] += f * f; + f = Pt.r - Pt.g - Pt.b; fDir[3] += f * f; + } + + float fDirMax = fDir[0]; + size_t iDirMax = 0; + + for (size_t iDir = 1; iDir < 4; iDir++) + { + if (fDir[iDir] > fDirMax) + { + fDirMax = fDir[iDir]; + iDirMax = iDir; + } + } + + if (iDirMax & 2) std::swap(X.g, Y.g); + if (iDirMax & 1) std::swap(X.b, Y.b); + + // Two color block.. no need to root-find + if (fAB < 1.0f / 4096.0f) + { + pX->r = X.r; pX->g = X.g; pX->b = X.b; + pY->r = Y.r; pY->g = Y.g; pY->b = Y.b; + return; + } + + // Use Newton's Method to find local minima of sum-of-squares error. + auto const fSteps = static_cast(cSteps - 1); + + for (size_t iIteration = 0; iIteration < 8; iIteration++) + { + // Calculate new steps + HDRColorA pSteps[4] = {}; + + for (size_t iStep = 0; iStep < cSteps; iStep++) + { + pSteps[iStep].r = X.r * pC[iStep] + Y.r * pD[iStep]; + pSteps[iStep].g = X.g * pC[iStep] + Y.g * pD[iStep]; + pSteps[iStep].b = X.b * pC[iStep] + Y.b * pD[iStep]; + } + + // Calculate color direction + Dir.r = Y.r - X.r; + Dir.g = Y.g - X.g; + Dir.b = Y.b - X.b; + + const float fLen = (Dir.r * Dir.r + Dir.g * Dir.g + Dir.b * Dir.b); + + if (fLen < (1.0f / 4096.0f)) + break; + + const float fScale = fSteps / fLen; + + Dir.r *= fScale; + Dir.g *= fScale; + Dir.b *= fScale; + + // Evaluate function, and derivatives + float d2X = 0.0f, d2Y = 0.0f; + HDRColorA dX(0.0f, 0.0f, 0.0f, 0.0f), dY(0.0f, 0.0f, 0.0f, 0.0f); + + for (size_t iPoint = 0; iPoint < cPixels; iPoint++) + { + const float fDot = (pPoints[pIndex[iPoint]].r - X.r) * Dir.r + + (pPoints[pIndex[iPoint]].g - X.g) * Dir.g + + (pPoints[pIndex[iPoint]].b - X.b) * Dir.b; + + uint32_t iStep; + if (fDot <= 0.0f) + iStep = 0; + else if (fDot >= fSteps) + iStep = cSteps - 1; + else + iStep = uint32_t(fDot + 0.5f); + + HDRColorA Diff; + Diff.r = pSteps[iStep].r - pPoints[pIndex[iPoint]].r; + Diff.g = pSteps[iStep].g - pPoints[pIndex[iPoint]].g; + Diff.b = pSteps[iStep].b - pPoints[pIndex[iPoint]].b; + + const float fC = pC[iStep] * (1.0f / 8.0f); + const float fD = pD[iStep] * (1.0f / 8.0f); + + d2X += fC * pC[iStep]; + dX.r += fC * Diff.r; + dX.g += fC * Diff.g; + dX.b += fC * Diff.b; + + d2Y += fD * pD[iStep]; + dY.r += fD * Diff.r; + dY.g += fD * Diff.g; + dY.b += fD * Diff.b; + } + + // Move endpoints + if (d2X > 0.0f) + { + const float f = -1.0f / d2X; + + X.r += dX.r * f; + X.g += dX.g * f; + X.b += dX.b * f; + } + + if (d2Y > 0.0f) + { + const float f = -1.0f / d2Y; + + Y.r += dY.r * f; + Y.g += dY.g * f; + Y.b += dY.b * f; + } + + if ((dX.r * dX.r < fEpsilon) && (dX.g * dX.g < fEpsilon) && (dX.b * dX.b < fEpsilon) && + (dY.r * dY.r < fEpsilon) && (dY.g * dY.g < fEpsilon) && (dY.b * dY.b < fEpsilon)) + { + break; + } + } + + pX->r = X.r; pX->g = X.g; pX->b = X.b; + pY->r = Y.r; pY->g = Y.g; pY->b = Y.b; + } + + + //------------------------------------------------------------------------------------- + void OptimizeRGBA( + _In_reads_(NUM_PIXELS_PER_BLOCK) const HDRColorA* const pPoints, + _Out_ HDRColorA* pX, + _Out_ HDRColorA* pY, + _In_range_(3, 4) uint32_t cSteps, + size_t cPixels, + _In_reads_(cPixels) const size_t* pIndex) noexcept + { + const float *pC = (3 == cSteps) ? pC3 : pC4; + const float *pD = (3 == cSteps) ? pD3 : pD4; + + // Find Min and Max points, as starting point + HDRColorA X(1.0f, 1.0f, 1.0f, 1.0f); + HDRColorA Y(0.0f, 0.0f, 0.0f, 0.0f); + + for (size_t iPoint = 0; iPoint < cPixels; iPoint++) + { + if (pPoints[pIndex[iPoint]].r < X.r) X.r = pPoints[pIndex[iPoint]].r; + if (pPoints[pIndex[iPoint]].g < X.g) X.g = pPoints[pIndex[iPoint]].g; + if (pPoints[pIndex[iPoint]].b < X.b) X.b = pPoints[pIndex[iPoint]].b; + if (pPoints[pIndex[iPoint]].a < X.a) X.a = pPoints[pIndex[iPoint]].a; + if (pPoints[pIndex[iPoint]].r > Y.r) Y.r = pPoints[pIndex[iPoint]].r; + if (pPoints[pIndex[iPoint]].g > Y.g) Y.g = pPoints[pIndex[iPoint]].g; + if (pPoints[pIndex[iPoint]].b > Y.b) Y.b = pPoints[pIndex[iPoint]].b; + if (pPoints[pIndex[iPoint]].a > Y.a) Y.a = pPoints[pIndex[iPoint]].a; + } + + // Diagonal axis + const HDRColorA AB = Y - X; + const float fAB = AB * AB; + + // Single color block.. no need to root-find + if (fAB < FLT_MIN) + { + *pX = X; + *pY = Y; + return; + } + + // Try all four axis directions, to determine which diagonal best fits data + const float fABInv = 1.0f / fAB; + HDRColorA Dir = AB * fABInv; + const HDRColorA Mid = (X + Y) * 0.5f; + + float fDir[8]; + fDir[0] = fDir[1] = fDir[2] = fDir[3] = fDir[4] = fDir[5] = fDir[6] = fDir[7] = 0.0f; + + for (size_t iPoint = 0; iPoint < cPixels; iPoint++) + { + HDRColorA Pt; + Pt.r = (pPoints[pIndex[iPoint]].r - Mid.r) * Dir.r; + Pt.g = (pPoints[pIndex[iPoint]].g - Mid.g) * Dir.g; + Pt.b = (pPoints[pIndex[iPoint]].b - Mid.b) * Dir.b; + Pt.a = (pPoints[pIndex[iPoint]].a - Mid.a) * Dir.a; + + float f; + f = Pt.r + Pt.g + Pt.b + Pt.a; fDir[0] += f * f; + f = Pt.r + Pt.g + Pt.b - Pt.a; fDir[1] += f * f; + f = Pt.r + Pt.g - Pt.b + Pt.a; fDir[2] += f * f; + f = Pt.r + Pt.g - Pt.b - Pt.a; fDir[3] += f * f; + f = Pt.r - Pt.g + Pt.b + Pt.a; fDir[4] += f * f; + f = Pt.r - Pt.g + Pt.b - Pt.a; fDir[5] += f * f; + f = Pt.r - Pt.g - Pt.b + Pt.a; fDir[6] += f * f; + f = Pt.r - Pt.g - Pt.b - Pt.a; fDir[7] += f * f; + } + + float fDirMax = fDir[0]; + size_t iDirMax = 0; + + for (size_t iDir = 1; iDir < 8; iDir++) + { + if (fDir[iDir] > fDirMax) + { + fDirMax = fDir[iDir]; + iDirMax = iDir; + } + } + + if (iDirMax & 4) std::swap(X.g, Y.g); + if (iDirMax & 2) std::swap(X.b, Y.b); + if (iDirMax & 1) std::swap(X.a, Y.a); + + // Two color block.. no need to root-find + if (fAB < 1.0f / 4096.0f) + { + *pX = X; + *pY = Y; + return; + } + + // Use Newton's Method to find local minima of sum-of-squares error. + const auto fSteps = static_cast(cSteps - 1u); + + for (size_t iIteration = 0; iIteration < 8; iIteration++) + { + // Calculate new steps + HDRColorA pSteps[BC7_MAX_INDICES]; + + LDRColorA lX, lY; + lX = (X * 255.0f).ToLDRColorA(); + lY = (Y * 255.0f).ToLDRColorA(); + + for (size_t iStep = 0; iStep < cSteps; iStep++) + { + pSteps[iStep] = X * pC[iStep] + Y * pD[iStep]; + //LDRColorA::Interpolate(lX, lY, i, i, wcprec, waprec, aSteps[i]); + } + + // Calculate color direction + Dir = Y - X; + const float fLen = Dir * Dir; + if (fLen < (1.0f / 4096.0f)) + break; + + const float fScale = fSteps / fLen; + Dir *= fScale; + + // Evaluate function, and derivatives + float d2X = 0.0f, d2Y = 0.0f; + HDRColorA dX(0.0f, 0.0f, 0.0f, 0.0f), dY(0.0f, 0.0f, 0.0f, 0.0f); + + for (size_t iPoint = 0; iPoint < cPixels; ++iPoint) + { + const float fDot = (pPoints[pIndex[iPoint]] - X) * Dir; + + uint32_t iStep; + if (fDot <= 0.0f) + iStep = 0; + else if (fDot >= fSteps) + iStep = cSteps - 1; + else + iStep = uint32_t(fDot + 0.5f); + + const HDRColorA Diff = pSteps[iStep] - pPoints[pIndex[iPoint]]; + const float fC = pC[iStep] * (1.0f / 8.0f); + const float fD = pD[iStep] * (1.0f / 8.0f); + + d2X += fC * pC[iStep]; + dX += Diff * fC; + + d2Y += fD * pD[iStep]; + dY += Diff * fD; + } + + // Move endpoints + if (d2X > 0.0f) + { + const float f = -1.0f / d2X; + X += dX * f; + } + + if (d2Y > 0.0f) + { + const float f = -1.0f / d2Y; + Y += dY * f; + } + + if ((dX * dX < fEpsilon) && (dY * dY < fEpsilon)) + break; + } + + *pX = X; + *pY = Y; + } + + + //------------------------------------------------------------------------------------- + float ComputeError( + _Inout_ const LDRColorA& pixel, + _In_reads_(1 << uIndexPrec) const LDRColorA aPalette[], + uint8_t uIndexPrec, + uint8_t uIndexPrec2, + _Out_opt_ size_t* pBestIndex = nullptr, + _Out_opt_ size_t* pBestIndex2 = nullptr) noexcept + { + const size_t uNumIndices = size_t(1) << uIndexPrec; + const size_t uNumIndices2 = size_t(1) << uIndexPrec2; + float fTotalErr = 0; + float fBestErr = FLT_MAX; + + if (pBestIndex) + *pBestIndex = 0; + if (pBestIndex2) + *pBestIndex2 = 0; + + const XMVECTOR vpixel = XMLoadUByte4(reinterpret_cast(&pixel)); + + if (uIndexPrec2 == 0) + { + for (size_t i = 0; i < uNumIndices && fBestErr > 0; i++) + { + XMVECTOR tpixel = XMLoadUByte4(reinterpret_cast(&aPalette[i])); + // Compute ErrorMetric + tpixel = XMVectorSubtract(vpixel, tpixel); + const float fErr = XMVectorGetX(XMVector4Dot(tpixel, tpixel)); + if (fErr > fBestErr) // error increased, so we're done searching + break; + if (fErr < fBestErr) + { + fBestErr = fErr; + if (pBestIndex) + *pBestIndex = i; + } + } + fTotalErr += fBestErr; + } + else + { + for (size_t i = 0; i < uNumIndices && fBestErr > 0; i++) + { + XMVECTOR tpixel = XMLoadUByte4(reinterpret_cast(&aPalette[i])); + // Compute ErrorMetricRGB + tpixel = XMVectorSubtract(vpixel, tpixel); + const float fErr = XMVectorGetX(XMVector3Dot(tpixel, tpixel)); + if (fErr > fBestErr) // error increased, so we're done searching + break; + if (fErr < fBestErr) + { + fBestErr = fErr; + if (pBestIndex) + *pBestIndex = i; + } + } + fTotalErr += fBestErr; + fBestErr = FLT_MAX; + for (size_t i = 0; i < uNumIndices2 && fBestErr > 0; i++) + { + // Compute ErrorMetricAlpha + const float ea = float(pixel.a) - float(aPalette[i].a); + const float fErr = ea*ea; + if (fErr > fBestErr) // error increased, so we're done searching + break; + if (fErr < fBestErr) + { + fBestErr = fErr; + if (pBestIndex2) + *pBestIndex2 = i; + } + } + fTotalErr += fBestErr; + } + + return fTotalErr; + } + + + void FillWithErrorColors(_Out_writes_(NUM_PIXELS_PER_BLOCK) HDRColorA* pOut) noexcept + { + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + #ifdef _DEBUG + // Use Magenta in debug as a highly-visible error color + pOut[i] = HDRColorA(1.0f, 0.0f, 1.0f, 1.0f); + #else + // In production use, default to black + pOut[i] = HDRColorA(0.0f, 0.0f, 0.0f, 1.0f); + #endif + } + } +} + + +//------------------------------------------------------------------------------------- +// BC6H Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void D3DX_BC6H::Decode(bool bSigned, HDRColorA* pOut) const noexcept +{ + assert(pOut); + + size_t uStartBit = 0; + uint8_t uMode = GetBits(uStartBit, 2u); + if (uMode != 0x00 && uMode != 0x01) + { + uMode = static_cast((unsigned(GetBits(uStartBit, 3)) << 2) | uMode); + } + + assert(uMode < c_NumModeInfo); + _Analysis_assume_(uMode < c_NumModeInfo); + + if (ms_aModeToInfo[uMode] >= 0) + { + assert(static_cast(ms_aModeToInfo[uMode]) < c_NumModes); + _Analysis_assume_(ms_aModeToInfo[uMode] < c_NumModes); + const ModeDescriptor* desc = ms_aDesc[ms_aModeToInfo[uMode]]; + const ModeInfo& info = ms_aInfo[ms_aModeToInfo[uMode]]; + + INTEndPntPair aEndPts[BC6H_MAX_REGIONS] = {}; + uint32_t uShape = 0; + + // Read header + const size_t uHeaderBits = info.uPartitions > 0 ? 82u : 65u; + while (uStartBit < uHeaderBits) + { + const size_t uCurBit = uStartBit; + if (GetBit(uStartBit)) + { + switch (desc[uCurBit].m_eField) + { + case D: uShape |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case RW: aEndPts[0].A.r |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case RX: aEndPts[0].B.r |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case RY: aEndPts[1].A.r |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case RZ: aEndPts[1].B.r |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case GW: aEndPts[0].A.g |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case GX: aEndPts[0].B.g |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case GY: aEndPts[1].A.g |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case GZ: aEndPts[1].B.g |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case BW: aEndPts[0].A.b |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case BX: aEndPts[0].B.b |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case BY: aEndPts[1].A.b |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + case BZ: aEndPts[1].B.b |= 1 << uint32_t(desc[uCurBit].m_uBit); break; + default: + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC6H: Invalid header bits encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + } + } + } + + assert(uShape < 64); + _Analysis_assume_(uShape < 64); + + // Sign extend necessary end points + if (bSigned) + { + aEndPts[0].A.SignExtend(info.RGBAPrec[0][0]); + } + if (bSigned || info.bTransformed) + { + assert(info.uPartitions < BC6H_MAX_REGIONS); + _Analysis_assume_(info.uPartitions < BC6H_MAX_REGIONS); + for (size_t p = 0; p <= info.uPartitions; ++p) + { + if (p != 0) + { + aEndPts[p].A.SignExtend(info.RGBAPrec[p][0]); + } + aEndPts[p].B.SignExtend(info.RGBAPrec[p][1]); + } + } + + // Inverse transform the end points + if (info.bTransformed) + { + TransformInverse(aEndPts, info.RGBAPrec[0][0], bSigned); + } + + // Read indices + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + const size_t uNumBits = IsFixUpOffset(info.uPartitions, uShape, i) ? info.uIndexPrec - 1u : info.uIndexPrec; + if (uStartBit + uNumBits > 128) + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC6H: Invalid block encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + const uint8_t uIndex = GetBits(uStartBit, uNumBits); + + if (uIndex >= ((info.uPartitions > 0) ? 8 : 16)) + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC6H: Invalid index encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + + const size_t uRegion = g_aPartitionTable[info.uPartitions][uShape][i]; + assert(uRegion < BC6H_MAX_REGIONS); + _Analysis_assume_(uRegion < BC6H_MAX_REGIONS); + + // Unquantize endpoints and interpolate + const int r1 = Unquantize(aEndPts[uRegion].A.r, info.RGBAPrec[0][0].r, bSigned); + const int g1 = Unquantize(aEndPts[uRegion].A.g, info.RGBAPrec[0][0].g, bSigned); + const int b1 = Unquantize(aEndPts[uRegion].A.b, info.RGBAPrec[0][0].b, bSigned); + const int r2 = Unquantize(aEndPts[uRegion].B.r, info.RGBAPrec[0][0].r, bSigned); + const int g2 = Unquantize(aEndPts[uRegion].B.g, info.RGBAPrec[0][0].g, bSigned); + const int b2 = Unquantize(aEndPts[uRegion].B.b, info.RGBAPrec[0][0].b, bSigned); + const int* aWeights = info.uPartitions > 0 ? g_aWeights3 : g_aWeights4; + INTColor fc; + fc.r = FinishUnquantize((r1 * (BC67_WEIGHT_MAX - aWeights[uIndex]) + r2 * aWeights[uIndex] + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT, bSigned); + fc.g = FinishUnquantize((g1 * (BC67_WEIGHT_MAX - aWeights[uIndex]) + g2 * aWeights[uIndex] + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT, bSigned); + fc.b = FinishUnquantize((b1 * (BC67_WEIGHT_MAX - aWeights[uIndex]) + b2 * aWeights[uIndex] + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT, bSigned); + + HALF rgb[3]; + fc.ToF16(rgb, bSigned); + + pOut[i].r = XMConvertHalfToFloat(rgb[0]); + pOut[i].g = XMConvertHalfToFloat(rgb[1]); + pOut[i].b = XMConvertHalfToFloat(rgb[2]); + pOut[i].a = 1.0f; + } + } + else + { + #if defined(_WIN32) && defined(_DEBUG) + const char* warnstr = "BC6H: Invalid mode encountered during decoding\n"; + switch (uMode) + { + case 0x13: warnstr = "BC6H: Reserved mode 10011 encountered during decoding\n"; break; + case 0x17: warnstr = "BC6H: Reserved mode 10111 encountered during decoding\n"; break; + case 0x1B: warnstr = "BC6H: Reserved mode 11011 encountered during decoding\n"; break; + case 0x1F: warnstr = "BC6H: Reserved mode 11111 encountered during decoding\n"; break; + default: break; + } + OutputDebugStringA(warnstr); + #endif + // Per the BC6H format spec, we must return opaque black + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + pOut[i] = HDRColorA(0.0f, 0.0f, 0.0f, 1.0f); + } + } +} + + +_Use_decl_annotations_ +void D3DX_BC6H::Encode(bool bSigned, const HDRColorA* const pIn) noexcept +{ + assert(pIn); + + EncodeParams EP(pIn, bSigned); + + for (EP.uMode = 0; EP.uMode < c_NumModes && EP.fBestErr > 0; ++EP.uMode) + { + const uint8_t uShapes = ms_aInfo[EP.uMode].uPartitions ? 32u : 1u; + // Number of rough cases to look at. reasonable values of this are 1, uShapes/4, and uShapes + // uShapes/4 gets nearly all the cases; you can increase that a bit (say by 3 or 4) if you really want to squeeze the last bit out + const size_t uItems = std::max(1u, size_t(uShapes >> 2)); + float afRoughMSE[BC6H_MAX_SHAPES]; + uint8_t auShape[BC6H_MAX_SHAPES]; + + // pick the best uItems shapes and refine these. + for (EP.uShape = 0; EP.uShape < uShapes; ++EP.uShape) + { + size_t uShape = EP.uShape; + afRoughMSE[uShape] = RoughMSE(&EP); + auShape[uShape] = static_cast(uShape); + } + + // Bubble up the first uItems items + for (size_t i = 0; i < uItems; i++) + { + for (size_t j = i + 1; j < uShapes; j++) + { + if (afRoughMSE[i] > afRoughMSE[j]) + { + std::swap(afRoughMSE[i], afRoughMSE[j]); + std::swap(auShape[i], auShape[j]); + } + } + } + + for (size_t i = 0; i < uItems && EP.fBestErr > 0; i++) + { + EP.uShape = auShape[i]; + Refine(&EP); + } + } +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +int D3DX_BC6H::Quantize(int iValue, int prec, bool bSigned) noexcept +{ + assert(prec > 1); // didn't bother to make it work for 1 + int q, s = 0; + if (bSigned) + { + assert(iValue >= -F16MAX && iValue <= F16MAX); + if (iValue < 0) + { + s = 1; + iValue = -iValue; + } + q = (prec >= 16) ? iValue : (iValue << (prec - 1)) / (F16MAX + 1); + if (s) + q = -q; + assert(q > -(1 << (prec - 1)) && q < (1 << (prec - 1))); + } + else + { + assert(iValue >= 0 && iValue <= F16MAX); + q = (prec >= 15) ? iValue : (iValue << prec) / (F16MAX + 1); + assert(q >= 0 && q < (1 << prec)); + } + + return q; +} + + +_Use_decl_annotations_ +int D3DX_BC6H::Unquantize(int comp, uint8_t uBitsPerComp, bool bSigned) noexcept +{ + int unq = 0, s = 0; + if (bSigned) + { + if (uBitsPerComp >= 16) + { + unq = comp; + } + else + { + if (comp < 0) + { + s = 1; + comp = -comp; + } + + if (comp == 0) unq = 0; + else if (comp >= ((1 << (uBitsPerComp - 1)) - 1)) unq = 0x7FFF; + else unq = ((comp << 15) + 0x4000) >> (uBitsPerComp - 1); + + if (s) unq = -unq; + } + } + else + { + if (uBitsPerComp >= 15) unq = comp; + else if (comp == 0) unq = 0; + else if (comp == ((1 << uBitsPerComp) - 1)) unq = 0xFFFF; + else unq = ((comp << 16) + 0x8000) >> uBitsPerComp; + } + + return unq; +} + + +_Use_decl_annotations_ +int D3DX_BC6H::FinishUnquantize(int comp, bool bSigned) noexcept +{ + if (bSigned) + { + return (comp < 0) ? -(((-comp) * 31) >> 5) : (comp * 31) >> 5; // scale the magnitude by 31/32 + } + else + { + return (comp * 31) >> 6; // scale the magnitude by 31/64 + } +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool D3DX_BC6H::EndPointsFit(const EncodeParams* pEP, const INTEndPntPair aEndPts[]) noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const bool bTransformed = ms_aInfo[pEP->uMode].bTransformed; + const bool bIsSigned = pEP->bSigned; + const LDRColorA& Prec0 = ms_aInfo[pEP->uMode].RGBAPrec[0][0]; + const LDRColorA& Prec1 = ms_aInfo[pEP->uMode].RGBAPrec[0][1]; + const LDRColorA& Prec2 = ms_aInfo[pEP->uMode].RGBAPrec[1][0]; + const LDRColorA& Prec3 = ms_aInfo[pEP->uMode].RGBAPrec[1][1]; + + INTColor aBits[4]; + aBits[0].r = NBits(aEndPts[0].A.r, bIsSigned); + aBits[0].g = NBits(aEndPts[0].A.g, bIsSigned); + aBits[0].b = NBits(aEndPts[0].A.b, bIsSigned); + aBits[1].r = NBits(aEndPts[0].B.r, bTransformed || bIsSigned); + aBits[1].g = NBits(aEndPts[0].B.g, bTransformed || bIsSigned); + aBits[1].b = NBits(aEndPts[0].B.b, bTransformed || bIsSigned); + if (aBits[0].r > Prec0.r || aBits[1].r > Prec1.r || + aBits[0].g > Prec0.g || aBits[1].g > Prec1.g || + aBits[0].b > Prec0.b || aBits[1].b > Prec1.b) + return false; + + if (ms_aInfo[pEP->uMode].uPartitions) + { + aBits[2].r = NBits(aEndPts[1].A.r, bTransformed || bIsSigned); + aBits[2].g = NBits(aEndPts[1].A.g, bTransformed || bIsSigned); + aBits[2].b = NBits(aEndPts[1].A.b, bTransformed || bIsSigned); + aBits[3].r = NBits(aEndPts[1].B.r, bTransformed || bIsSigned); + aBits[3].g = NBits(aEndPts[1].B.g, bTransformed || bIsSigned); + aBits[3].b = NBits(aEndPts[1].B.b, bTransformed || bIsSigned); + + if (aBits[2].r > Prec2.r || aBits[3].r > Prec3.r || + aBits[2].g > Prec2.g || aBits[3].g > Prec3.g || + aBits[2].b > Prec2.b || aBits[3].b > Prec3.b) + return false; + } + + return true; +} + + +_Use_decl_annotations_ +void D3DX_BC6H::GeneratePaletteQuantized(const EncodeParams* pEP, const INTEndPntPair& endPts, INTColor aPalette[]) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const size_t uIndexPrec = ms_aInfo[pEP->uMode].uIndexPrec; + const size_t uNumIndices = size_t(1) << uIndexPrec; + assert(uNumIndices > 0); + _Analysis_assume_(uNumIndices > 0); + const LDRColorA& Prec = ms_aInfo[pEP->uMode].RGBAPrec[0][0]; + + // scale endpoints + INTEndPntPair unqEndPts; + unqEndPts.A.r = Unquantize(endPts.A.r, Prec.r, pEP->bSigned); + unqEndPts.A.g = Unquantize(endPts.A.g, Prec.g, pEP->bSigned); + unqEndPts.A.b = Unquantize(endPts.A.b, Prec.b, pEP->bSigned); + unqEndPts.B.r = Unquantize(endPts.B.r, Prec.r, pEP->bSigned); + unqEndPts.B.g = Unquantize(endPts.B.g, Prec.g, pEP->bSigned); + unqEndPts.B.b = Unquantize(endPts.B.b, Prec.b, pEP->bSigned); + + // interpolate + const int* aWeights = nullptr; + switch (uIndexPrec) + { + case 3: aWeights = g_aWeights3; assert(uNumIndices <= 8); _Analysis_assume_(uNumIndices <= 8); break; + case 4: aWeights = g_aWeights4; assert(uNumIndices <= 16); _Analysis_assume_(uNumIndices <= 16); break; + default: + assert(false); + for (size_t i = 0; i < uNumIndices; ++i) + { + #pragma prefast(suppress:22102 22103, "writing blocks in two halves confuses tool") + aPalette[i] = INTColor(0, 0, 0); + } + return; + } + + for (size_t i = 0; i < uNumIndices; ++i) + { + aPalette[i].r = FinishUnquantize( + (unqEndPts.A.r * (BC67_WEIGHT_MAX - aWeights[i]) + unqEndPts.B.r * aWeights[i] + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT, + pEP->bSigned); + aPalette[i].g = FinishUnquantize( + (unqEndPts.A.g * (BC67_WEIGHT_MAX - aWeights[i]) + unqEndPts.B.g * aWeights[i] + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT, + pEP->bSigned); + aPalette[i].b = FinishUnquantize( + (unqEndPts.A.b * (BC67_WEIGHT_MAX - aWeights[i]) + unqEndPts.B.b * aWeights[i] + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT, + pEP->bSigned); + } +} + + +// given a collection of colors and quantized endpoints, generate a palette, choose best entries, and return a single toterr +_Use_decl_annotations_ +float D3DX_BC6H::MapColorsQuantized(const EncodeParams* pEP, const INTColor aColors[], size_t np, const INTEndPntPair &endPts) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uIndexPrec = ms_aInfo[pEP->uMode].uIndexPrec; + auto const uNumIndices = static_cast(1u << uIndexPrec); + INTColor aPalette[BC6H_MAX_INDICES]; + GeneratePaletteQuantized(pEP, endPts, aPalette); + + float fTotErr = 0; + for (size_t i = 0; i < np; ++i) + { + const XMVECTOR vcolors = XMLoadSInt4(reinterpret_cast(&aColors[i])); + + // Compute ErrorMetricRGB + XMVECTOR tpal = XMLoadSInt4(reinterpret_cast(&aPalette[0])); + tpal = XMVectorSubtract(vcolors, tpal); + float fBestErr = XMVectorGetX(XMVector3Dot(tpal, tpal)); + + for (int j = 1; j < uNumIndices && fBestErr > 0; ++j) + { + // Compute ErrorMetricRGB + tpal = XMLoadSInt4(reinterpret_cast(&aPalette[j])); + tpal = XMVectorSubtract(vcolors, tpal); + const float fErr = XMVectorGetX(XMVector3Dot(tpal, tpal)); + if (fErr > fBestErr) break; // error increased, so we're done searching + if (fErr < fBestErr) fBestErr = fErr; + } + fTotErr += fBestErr; + } + return fTotErr; +} + + +_Use_decl_annotations_ +float D3DX_BC6H::PerturbOne(const EncodeParams* pEP, const INTColor aColors[], size_t np, uint8_t ch, + const INTEndPntPair& oldEndPts, INTEndPntPair& newEndPts, float fOldErr, int do_b) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + uint8_t uPrec; + switch (ch) + { + case 0: uPrec = ms_aInfo[pEP->uMode].RGBAPrec[0][0].r; break; + case 1: uPrec = ms_aInfo[pEP->uMode].RGBAPrec[0][0].g; break; + case 2: uPrec = ms_aInfo[pEP->uMode].RGBAPrec[0][0].b; break; + default: assert(false); newEndPts = oldEndPts; return FLT_MAX; + } + INTEndPntPair tmpEndPts; + float fMinErr = fOldErr; + int beststep = 0; + + // copy real endpoints so we can perturb them + tmpEndPts = newEndPts = oldEndPts; + + // do a logarithmic search for the best error for this endpoint (which) + for (int step = 1 << (uPrec - 1); step; step >>= 1) + { + bool bImproved = false; + for (int sign = -1; sign <= 1; sign += 2) + { + if (do_b == 0) + { + tmpEndPts.A[ch] = newEndPts.A[ch] + sign * step; + if (tmpEndPts.A[ch] < 0 || tmpEndPts.A[ch] >= (1 << uPrec)) + continue; + } + else + { + tmpEndPts.B[ch] = newEndPts.B[ch] + sign * step; + if (tmpEndPts.B[ch] < 0 || tmpEndPts.B[ch] >= (1 << uPrec)) + continue; + } + + const float fErr = MapColorsQuantized(pEP, aColors, np, tmpEndPts); + + if (fErr < fMinErr) + { + bImproved = true; + fMinErr = fErr; + beststep = sign * step; + } + } + // if this was an improvement, move the endpoint and continue search from there + if (bImproved) + { + if (do_b == 0) + newEndPts.A[ch] += beststep; + else + newEndPts.B[ch] += beststep; + } + } + return fMinErr; +} + + +_Use_decl_annotations_ +void D3DX_BC6H::OptimizeOne(const EncodeParams* pEP, const INTColor aColors[], size_t np, float aOrgErr, + const INTEndPntPair &aOrgEndPts, INTEndPntPair &aOptEndPts) const noexcept +{ + assert(pEP); + float aOptErr = aOrgErr; + aOptEndPts.A = aOrgEndPts.A; + aOptEndPts.B = aOrgEndPts.B; + + INTEndPntPair new_a, new_b; + INTEndPntPair newEndPts; + int do_b; + + // now optimize each channel separately + for (uint8_t ch = 0; ch < BC6H_NUM_CHANNELS; ++ch) + { + // figure out which endpoint when perturbed gives the most improvement and start there + // if we just alternate, we can easily end up in a local minima + const float fErr0 = PerturbOne(pEP, aColors, np, ch, aOptEndPts, new_a, aOptErr, 0); // perturb endpt A + const float fErr1 = PerturbOne(pEP, aColors, np, ch, aOptEndPts, new_b, aOptErr, 1); // perturb endpt B + + if (fErr0 < fErr1) + { + if (fErr0 >= aOptErr) continue; + aOptEndPts.A[ch] = new_a.A[ch]; + aOptErr = fErr0; + do_b = 1; // do B next + } + else + { + if (fErr1 >= aOptErr) continue; + aOptEndPts.B[ch] = new_b.B[ch]; + aOptErr = fErr1; + do_b = 0; // do A next + } + + // now alternate endpoints and keep trying until there is no improvement + for (;;) + { + const float fErr = PerturbOne(pEP, aColors, np, ch, aOptEndPts, newEndPts, aOptErr, do_b); + if (fErr >= aOptErr) + break; + if (do_b == 0) + aOptEndPts.A[ch] = newEndPts.A[ch]; + else + aOptEndPts.B[ch] = newEndPts.B[ch]; + aOptErr = fErr; + do_b = 1 - do_b; // now move the other endpoint + } + } +} + + +_Use_decl_annotations_ +void D3DX_BC6H::OptimizeEndPoints(const EncodeParams* pEP, const float aOrgErr[], const INTEndPntPair aOrgEndPts[], INTEndPntPair aOptEndPts[]) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC6H_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC6H_MAX_REGIONS); + INTColor aPixels[NUM_PIXELS_PER_BLOCK]; + + for (size_t p = 0; p <= uPartitions; ++p) + { + // collect the pixels in the region + size_t np = 0; + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + if (g_aPartitionTable[p][pEP->uShape][i] == p) + { + aPixels[np++] = pEP->aIPixels[i]; + } + } + + OptimizeOne(pEP, aPixels, np, aOrgErr[p], aOrgEndPts[p], aOptEndPts[p]); + } +} + + +// Swap endpoints as needed to ensure that the indices at fix up have a 0 high-order bit +_Use_decl_annotations_ +void D3DX_BC6H::SwapIndices(const EncodeParams* pEP, INTEndPntPair aEndPts[], size_t aIndices[]) noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const size_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + const size_t uNumIndices = size_t(1) << ms_aInfo[pEP->uMode].uIndexPrec; + const size_t uHighIndexBit = uNumIndices >> 1; + + assert(uPartitions < BC6H_MAX_REGIONS && pEP->uShape < BC6H_MAX_SHAPES); + _Analysis_assume_(uPartitions < BC6H_MAX_REGIONS && pEP->uShape < BC6H_MAX_SHAPES); + + for (size_t p = 0; p <= uPartitions; ++p) + { + const size_t i = g_aFixUp[uPartitions][pEP->uShape][p]; + assert(g_aPartitionTable[uPartitions][pEP->uShape][i] == p); + if (aIndices[i] & uHighIndexBit) + { + // high bit is set, swap the aEndPts and indices for this region + std::swap(aEndPts[p].A, aEndPts[p].B); + + for (size_t j = 0; j < NUM_PIXELS_PER_BLOCK; ++j) + if (g_aPartitionTable[uPartitions][pEP->uShape][j] == p) + aIndices[j] = uNumIndices - 1 - aIndices[j]; + } + } +} + + +// assign indices given a tile, shape, and quantized endpoints, return toterr for each region +_Use_decl_annotations_ +void D3DX_BC6H::AssignIndices(const EncodeParams* pEP, const INTEndPntPair aEndPts[], size_t aIndices[], float aTotErr[]) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + auto const uNumIndices = static_cast(1u << ms_aInfo[pEP->uMode].uIndexPrec); + + assert(uPartitions < BC6H_MAX_REGIONS && pEP->uShape < BC6H_MAX_SHAPES); + _Analysis_assume_(uPartitions < BC6H_MAX_REGIONS && pEP->uShape < BC6H_MAX_SHAPES); + + // build list of possibles + INTColor aPalette[BC6H_MAX_REGIONS][BC6H_MAX_INDICES]; + + for (size_t p = 0; p <= uPartitions; ++p) + { + GeneratePaletteQuantized(pEP, aEndPts[p], aPalette[p]); + aTotErr[p] = 0; + } + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + const uint8_t uRegion = g_aPartitionTable[uPartitions][pEP->uShape][i]; + assert(uRegion < BC6H_MAX_REGIONS); + _Analysis_assume_(uRegion < BC6H_MAX_REGIONS); + float fBestErr = Norm(pEP->aIPixels[i], aPalette[uRegion][0]); + aIndices[i] = 0; + + for (uint8_t j = 1; j < uNumIndices && fBestErr > 0; ++j) + { + const float fErr = Norm(pEP->aIPixels[i], aPalette[uRegion][j]); + if (fErr > fBestErr) break; // error increased, so we're done searching + if (fErr < fBestErr) + { + fBestErr = fErr; + aIndices[i] = j; + } + } + aTotErr[uRegion] += fBestErr; + } +} + + +_Use_decl_annotations_ +void D3DX_BC6H::QuantizeEndPts(const EncodeParams* pEP, INTEndPntPair* aQntEndPts) const noexcept +{ + assert(pEP && aQntEndPts); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const INTEndPntPair* aUnqEndPts = pEP->aUnqEndPts[pEP->uShape]; + const LDRColorA& Prec = ms_aInfo[pEP->uMode].RGBAPrec[0][0]; + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC6H_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC6H_MAX_REGIONS); + + for (size_t p = 0; p <= uPartitions; ++p) + { + aQntEndPts[p].A.r = Quantize(aUnqEndPts[p].A.r, Prec.r, pEP->bSigned); + aQntEndPts[p].A.g = Quantize(aUnqEndPts[p].A.g, Prec.g, pEP->bSigned); + aQntEndPts[p].A.b = Quantize(aUnqEndPts[p].A.b, Prec.b, pEP->bSigned); + aQntEndPts[p].B.r = Quantize(aUnqEndPts[p].B.r, Prec.r, pEP->bSigned); + aQntEndPts[p].B.g = Quantize(aUnqEndPts[p].B.g, Prec.g, pEP->bSigned); + aQntEndPts[p].B.b = Quantize(aUnqEndPts[p].B.b, Prec.b, pEP->bSigned); + } +} + + +_Use_decl_annotations_ +void D3DX_BC6H::EmitBlock(const EncodeParams* pEP, const INTEndPntPair aEndPts[], const size_t aIndices[]) noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uRealMode = ms_aInfo[pEP->uMode].uMode; + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + const uint8_t uIndexPrec = ms_aInfo[pEP->uMode].uIndexPrec; + const size_t uHeaderBits = uPartitions > 0 ? 82u : 65u; + const ModeDescriptor* desc = ms_aDesc[pEP->uMode]; + size_t uStartBit = 0; + + while (uStartBit < uHeaderBits) + { + switch (desc[uStartBit].m_eField) + { + case M: SetBit(uStartBit, uint8_t(uRealMode >> desc[uStartBit].m_uBit) & 0x01u); break; + case D: SetBit(uStartBit, uint8_t(pEP->uShape >> desc[uStartBit].m_uBit) & 0x01u); break; + case RW: SetBit(uStartBit, uint8_t(aEndPts[0].A.r >> desc[uStartBit].m_uBit) & 0x01u); break; + case RX: SetBit(uStartBit, uint8_t(aEndPts[0].B.r >> desc[uStartBit].m_uBit) & 0x01u); break; + case RY: SetBit(uStartBit, uint8_t(aEndPts[1].A.r >> desc[uStartBit].m_uBit) & 0x01u); break; + case RZ: SetBit(uStartBit, uint8_t(aEndPts[1].B.r >> desc[uStartBit].m_uBit) & 0x01u); break; + case GW: SetBit(uStartBit, uint8_t(aEndPts[0].A.g >> desc[uStartBit].m_uBit) & 0x01u); break; + case GX: SetBit(uStartBit, uint8_t(aEndPts[0].B.g >> desc[uStartBit].m_uBit) & 0x01u); break; + case GY: SetBit(uStartBit, uint8_t(aEndPts[1].A.g >> desc[uStartBit].m_uBit) & 0x01u); break; + case GZ: SetBit(uStartBit, uint8_t(aEndPts[1].B.g >> desc[uStartBit].m_uBit) & 0x01u); break; + case BW: SetBit(uStartBit, uint8_t(aEndPts[0].A.b >> desc[uStartBit].m_uBit) & 0x01u); break; + case BX: SetBit(uStartBit, uint8_t(aEndPts[0].B.b >> desc[uStartBit].m_uBit) & 0x01u); break; + case BY: SetBit(uStartBit, uint8_t(aEndPts[1].A.b >> desc[uStartBit].m_uBit) & 0x01u); break; + case BZ: SetBit(uStartBit, uint8_t(aEndPts[1].B.b >> desc[uStartBit].m_uBit) & 0x01u); break; + default: assert(false); + } + } + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + if (IsFixUpOffset(ms_aInfo[pEP->uMode].uPartitions, pEP->uShape, i)) + SetBits(uStartBit, uIndexPrec - 1u, static_cast(aIndices[i])); + else + SetBits(uStartBit, uIndexPrec, static_cast(aIndices[i])); + } + assert(uStartBit == 128); +} + + +_Use_decl_annotations_ +void D3DX_BC6H::Refine(EncodeParams* pEP) noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC6H_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC6H_MAX_REGIONS); + + const bool bTransformed = ms_aInfo[pEP->uMode].bTransformed; + float aOrgErr[BC6H_MAX_REGIONS], aOptErr[BC6H_MAX_REGIONS]; + INTEndPntPair aOrgEndPts[BC6H_MAX_REGIONS], aOptEndPts[BC6H_MAX_REGIONS]; + size_t aOrgIdx[NUM_PIXELS_PER_BLOCK], aOptIdx[NUM_PIXELS_PER_BLOCK]; + + QuantizeEndPts(pEP, aOrgEndPts); + AssignIndices(pEP, aOrgEndPts, aOrgIdx, aOrgErr); + SwapIndices(pEP, aOrgEndPts, aOrgIdx); + + if (bTransformed) TransformForward(aOrgEndPts); + if (EndPointsFit(pEP, aOrgEndPts)) + { + if (bTransformed) TransformInverse(aOrgEndPts, ms_aInfo[pEP->uMode].RGBAPrec[0][0], pEP->bSigned); + OptimizeEndPoints(pEP, aOrgErr, aOrgEndPts, aOptEndPts); + AssignIndices(pEP, aOptEndPts, aOptIdx, aOptErr); + SwapIndices(pEP, aOptEndPts, aOptIdx); + + float fOrgTotErr = 0.0f, fOptTotErr = 0.0f; + for (size_t p = 0; p <= uPartitions; ++p) + { + fOrgTotErr += aOrgErr[p]; + fOptTotErr += aOptErr[p]; + } + + if (bTransformed) TransformForward(aOptEndPts); + if (EndPointsFit(pEP, aOptEndPts) && fOptTotErr < fOrgTotErr && fOptTotErr < pEP->fBestErr) + { + pEP->fBestErr = fOptTotErr; + EmitBlock(pEP, aOptEndPts, aOptIdx); + } + else if (fOrgTotErr < pEP->fBestErr) + { + // either it stopped fitting when we optimized it, or there was no improvement + // so go back to the unoptimized endpoints which we know will fit + if (bTransformed) TransformForward(aOrgEndPts); + pEP->fBestErr = fOrgTotErr; + EmitBlock(pEP, aOrgEndPts, aOrgIdx); + } + } +} + + +_Use_decl_annotations_ +void D3DX_BC6H::GeneratePaletteUnquantized(const EncodeParams* pEP, size_t uRegion, INTColor aPalette[]) noexcept +{ + assert(pEP); + assert(uRegion < BC6H_MAX_REGIONS && pEP->uShape < BC6H_MAX_SHAPES); + _Analysis_assume_(uRegion < BC6H_MAX_REGIONS && pEP->uShape < BC6H_MAX_SHAPES); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const INTEndPntPair& endPts = pEP->aUnqEndPts[pEP->uShape][uRegion]; + const uint8_t uIndexPrec = ms_aInfo[pEP->uMode].uIndexPrec; + auto const uNumIndices = static_cast(1u << uIndexPrec); + assert(uNumIndices > 0); + _Analysis_assume_(uNumIndices > 0); + + const int* aWeights = nullptr; + switch (uIndexPrec) + { + case 3: aWeights = g_aWeights3; assert(uNumIndices <= 8); _Analysis_assume_(uNumIndices <= 8); break; + case 4: aWeights = g_aWeights4; assert(uNumIndices <= 16); _Analysis_assume_(uNumIndices <= 16); break; + default: + assert(false); + for (size_t i = 0; i < uNumIndices; ++i) + { + #pragma prefast(suppress:22102 22103, "writing blocks in two halves confuses tool") + aPalette[i] = INTColor(0, 0, 0); + } + return; + } + + for (size_t i = 0; i < uNumIndices; ++i) + { + aPalette[i].r = (endPts.A.r * (BC67_WEIGHT_MAX - aWeights[i]) + endPts.B.r * aWeights[i] + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT; + aPalette[i].g = (endPts.A.g * (BC67_WEIGHT_MAX - aWeights[i]) + endPts.B.g * aWeights[i] + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT; + aPalette[i].b = (endPts.A.b * (BC67_WEIGHT_MAX - aWeights[i]) + endPts.B.b * aWeights[i] + BC67_WEIGHT_ROUND) >> BC67_WEIGHT_SHIFT; + } +} + + +_Use_decl_annotations_ +float D3DX_BC6H::MapColors(const EncodeParams* pEP, size_t uRegion, size_t np, const size_t* auIndex) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uIndexPrec = ms_aInfo[pEP->uMode].uIndexPrec; + auto const uNumIndices = static_cast(1u << uIndexPrec); + INTColor aPalette[BC6H_MAX_INDICES]; + GeneratePaletteUnquantized(pEP, uRegion, aPalette); + + float fTotalErr = 0.0f; + for (size_t i = 0; i < np; ++i) + { + float fBestErr = Norm(pEP->aIPixels[auIndex[i]], aPalette[0]); + for (uint8_t j = 1; j < uNumIndices && fBestErr > 0.0f; ++j) + { + const float fErr = Norm(pEP->aIPixels[auIndex[i]], aPalette[j]); + if (fErr > fBestErr) break; // error increased, so we're done searching + if (fErr < fBestErr) fBestErr = fErr; + } + fTotalErr += fBestErr; + } + + return fTotalErr; +} + +_Use_decl_annotations_ +float D3DX_BC6H::RoughMSE(EncodeParams* pEP) const noexcept +{ + assert(pEP); + assert(pEP->uShape < BC6H_MAX_SHAPES); + _Analysis_assume_(pEP->uShape < BC6H_MAX_SHAPES); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + INTEndPntPair* aEndPts = pEP->aUnqEndPts[pEP->uShape]; + + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC6H_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC6H_MAX_REGIONS); + + size_t auPixIdx[NUM_PIXELS_PER_BLOCK]; + + float fError = 0.0f; + for (size_t p = 0; p <= uPartitions; ++p) + { + size_t np = 0; + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + if (g_aPartitionTable[uPartitions][pEP->uShape][i] == p) + { + auPixIdx[np++] = i; + } + } + + // handle simple cases + assert(np > 0); + if (np == 1) + { + aEndPts[p].A = pEP->aIPixels[auPixIdx[0]]; + aEndPts[p].B = pEP->aIPixels[auPixIdx[0]]; + continue; + } + else if (np == 2) + { + aEndPts[p].A = pEP->aIPixels[auPixIdx[0]]; + aEndPts[p].B = pEP->aIPixels[auPixIdx[1]]; + continue; + } + + HDRColorA epA, epB; + OptimizeRGB(pEP->aHDRPixels, &epA, &epB, 4, np, auPixIdx); + aEndPts[p].A.Set(epA, pEP->bSigned); + aEndPts[p].B.Set(epB, pEP->bSigned); + if (pEP->bSigned) + { + aEndPts[p].A.Clamp(-F16MAX, F16MAX); + aEndPts[p].B.Clamp(-F16MAX, F16MAX); + } + else + { + aEndPts[p].A.Clamp(0, F16MAX); + aEndPts[p].B.Clamp(0, F16MAX); + } + + fError += MapColors(pEP, p, np, auPixIdx); + } + + return fError; +} + + +//------------------------------------------------------------------------------------- +// BC7 Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void D3DX_BC7::Decode(HDRColorA* pOut) const noexcept +{ + assert(pOut); + + size_t uFirst = 0; + while (uFirst < 128 && !GetBit(uFirst)) {} + const uint8_t uMode = uint8_t(uFirst - 1); + + if (uMode < 8) + { + const uint8_t uPartitions = ms_aInfo[uMode].uPartitions; + assert(uPartitions < BC7_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC7_MAX_REGIONS); + + auto const uNumEndPts = static_cast((unsigned(uPartitions) + 1u) << 1); + const uint8_t uIndexPrec = ms_aInfo[uMode].uIndexPrec; + const uint8_t uIndexPrec2 = ms_aInfo[uMode].uIndexPrec2; + size_t i; + size_t uStartBit = size_t(uMode) + 1; + uint8_t P[6]; + const uint8_t uShape = GetBits(uStartBit, ms_aInfo[uMode].uPartitionBits); + assert(uShape < BC7_MAX_SHAPES); + _Analysis_assume_(uShape < BC7_MAX_SHAPES); + + const uint8_t uRotation = GetBits(uStartBit, ms_aInfo[uMode].uRotationBits); + assert(uRotation < 4); + + const uint8_t uIndexMode = GetBits(uStartBit, ms_aInfo[uMode].uIndexModeBits); + assert(uIndexMode < 2); + + LDRColorA c[BC7_MAX_REGIONS << 1]; + const LDRColorA RGBAPrec = ms_aInfo[uMode].RGBAPrec; + const LDRColorA RGBAPrecWithP = ms_aInfo[uMode].RGBAPrecWithP; + + assert(uNumEndPts <= (BC7_MAX_REGIONS << 1)); + + // Red channel + for (i = 0; i < uNumEndPts; i++) + { + if (uStartBit + RGBAPrec.r > 128) + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + + c[i].r = GetBits(uStartBit, RGBAPrec.r); + } + + // Green channel + for (i = 0; i < uNumEndPts; i++) + { + if (uStartBit + RGBAPrec.g > 128) + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + + c[i].g = GetBits(uStartBit, RGBAPrec.g); + } + + // Blue channel + for (i = 0; i < uNumEndPts; i++) + { + if (uStartBit + RGBAPrec.b > 128) + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + + c[i].b = GetBits(uStartBit, RGBAPrec.b); + } + + // Alpha channel + for (i = 0; i < uNumEndPts; i++) + { + if (uStartBit + RGBAPrec.a > 128) + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + + c[i].a = RGBAPrec.a ? GetBits(uStartBit, RGBAPrec.a) : 255u; + } + + // P-bits + assert(ms_aInfo[uMode].uPBits <= 6); + _Analysis_assume_(ms_aInfo[uMode].uPBits <= 6); + for (i = 0; i < ms_aInfo[uMode].uPBits; i++) + { + if (uStartBit > 127) + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + + P[i] = GetBit(uStartBit); + } + + if (ms_aInfo[uMode].uPBits) + { + for (i = 0; i < uNumEndPts; i++) + { + size_t pi = i * ms_aInfo[uMode].uPBits / uNumEndPts; + for (uint8_t ch = 0; ch < BC7_NUM_CHANNELS; ch++) + { + if (RGBAPrec[ch] != RGBAPrecWithP[ch]) + { + c[i][ch] = static_cast((unsigned(c[i][ch]) << 1) | P[pi]); + } + } + } + } + + for (i = 0; i < uNumEndPts; i++) + { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-overflow" +#endif + c[i] = Unquantize(c[i], RGBAPrecWithP); +#ifdef __GNUC_ +#pragma GCC diagnostic pop +#endif + } + + uint8_t w1[NUM_PIXELS_PER_BLOCK], w2[NUM_PIXELS_PER_BLOCK]; + + // read color indices + for (i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + { + const size_t uNumBits = IsFixUpOffset(ms_aInfo[uMode].uPartitions, uShape, i) ? uIndexPrec - 1u : uIndexPrec; + if (uStartBit + uNumBits > 128) + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + w1[i] = GetBits(uStartBit, uNumBits); + } + + // read alpha indices + if (uIndexPrec2) + { + for (i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + { + const size_t uNumBits = i ? uIndexPrec2 : uIndexPrec2 - 1u; + if (uStartBit + uNumBits > 128) + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + #endif + FillWithErrorColors(pOut); + return; + } + w2[i] = GetBits(uStartBit, uNumBits); + } + } + + for (i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + const uint8_t uRegion = g_aPartitionTable[uPartitions][uShape][i]; + LDRColorA outPixel; + if (uIndexPrec2 == 0) + { + LDRColorA::Interpolate(c[uRegion << 1], c[(uRegion << 1) + 1], w1[i], w1[i], uIndexPrec, uIndexPrec, outPixel); + } + else + { + if (uIndexMode == 0) + { + LDRColorA::Interpolate(c[uRegion << 1], c[(uRegion << 1) + 1], w1[i], w2[i], uIndexPrec, uIndexPrec2, outPixel); + } + else + { + LDRColorA::Interpolate(c[uRegion << 1], c[(uRegion << 1) + 1], w2[i], w1[i], uIndexPrec2, uIndexPrec, outPixel); + } + } + + switch (uRotation) + { + case 1: std::swap(outPixel.r, outPixel.a); break; + case 2: std::swap(outPixel.g, outPixel.a); break; + case 3: std::swap(outPixel.b, outPixel.a); break; + default: break; + } + + pOut[i] = HDRColorA(outPixel); + } + } + else + { + #if defined(_WIN32) && defined(_DEBUG) + OutputDebugStringA("BC7: Reserved mode 8 encountered during decoding\n"); + #endif + // Per the BC7 format spec, we must return transparent black + memset(pOut, 0, sizeof(HDRColorA) * NUM_PIXELS_PER_BLOCK); + } +} + +_Use_decl_annotations_ +void D3DX_BC7::Encode(uint32_t flags, const HDRColorA* const pIn) noexcept +{ + assert(pIn); + + D3DX_BC7 final = *this; + EncodeParams EP(pIn); + float fMSEBest = FLT_MAX; + uint32_t alphaMask = 0xFF; + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + EP.aLDRPixels[i].r = uint8_t(std::max(0.0f, std::min(255.0f, pIn[i].r * 255.0f + 0.01f))); + EP.aLDRPixels[i].g = uint8_t(std::max(0.0f, std::min(255.0f, pIn[i].g * 255.0f + 0.01f))); + EP.aLDRPixels[i].b = uint8_t(std::max(0.0f, std::min(255.0f, pIn[i].b * 255.0f + 0.01f))); + EP.aLDRPixels[i].a = uint8_t(std::max(0.0f, std::min(255.0f, pIn[i].a * 255.0f + 0.01f))); + alphaMask &= EP.aLDRPixels[i].a; + } + + const bool bHasAlpha = (alphaMask != 0xFF); + + for (EP.uMode = 0; EP.uMode < 8 && fMSEBest > 0; ++EP.uMode) + { + if (!(flags & BC_FLAGS_USE_3SUBSETS) && (EP.uMode == 0 || EP.uMode == 2)) + { + // 3 subset modes tend to be used rarely and add significant compression time + continue; + } + + if ((flags & TEX_COMPRESS_BC7_QUICK) && (EP.uMode != 6)) + { + // Use only mode 6 + continue; + } + + if ((!bHasAlpha) && (EP.uMode == 7)) + { + // There is no value in using mode 7 for completely opaque blocks (the other 2 subset modes handle this case for opaque blocks), so skip it for a small perf win. + continue; + } + + const size_t uShapes = size_t(1) << ms_aInfo[EP.uMode].uPartitionBits; + assert(uShapes <= BC7_MAX_SHAPES); + _Analysis_assume_(uShapes <= BC7_MAX_SHAPES); + + const size_t uNumRots = size_t(1) << ms_aInfo[EP.uMode].uRotationBits; + const size_t uNumIdxMode = size_t(1) << ms_aInfo[EP.uMode].uIndexModeBits; + // Number of rough cases to look at. reasonable values of this are 1, uShapes/4, and uShapes + // uShapes/4 gets nearly all the cases; you can increase that a bit (say by 3 or 4) if you really want to squeeze the last bit out + const size_t uItems = std::max(1, uShapes >> 2); + float afRoughMSE[BC7_MAX_SHAPES]; + size_t auShape[BC7_MAX_SHAPES]; + + for (size_t r = 0; r < uNumRots && fMSEBest > 0; ++r) + { + switch (r) + { + case 1: for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) std::swap(EP.aLDRPixels[i].r, EP.aLDRPixels[i].a); break; + case 2: for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) std::swap(EP.aLDRPixels[i].g, EP.aLDRPixels[i].a); break; + case 3: for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) std::swap(EP.aLDRPixels[i].b, EP.aLDRPixels[i].a); break; + default: break; + } + + for (size_t im = 0; im < uNumIdxMode && fMSEBest > 0; ++im) + { + // pick the best uItems shapes and refine these. + for (size_t s = 0; s < uShapes; s++) + { + afRoughMSE[s] = RoughMSE(&EP, s, im); + auShape[s] = s; + } + + // Bubble up the first uItems items + for (size_t i = 0; i < uItems; i++) + { + for (size_t j = i + 1; j < uShapes; j++) + { + if (afRoughMSE[i] > afRoughMSE[j]) + { + std::swap(afRoughMSE[i], afRoughMSE[j]); + std::swap(auShape[i], auShape[j]); + } + } + } + + for (size_t i = 0; i < uItems && fMSEBest > 0; i++) + { + const float fMSE = Refine(&EP, auShape[i], r, im); + if (fMSE < fMSEBest) + { + final = *this; + fMSEBest = fMSE; + } + } + } + + switch (r) + { + case 1: for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) std::swap(EP.aLDRPixels[i].r, EP.aLDRPixels[i].a); break; + case 2: for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) std::swap(EP.aLDRPixels[i].g, EP.aLDRPixels[i].a); break; + case 3: for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) std::swap(EP.aLDRPixels[i].b, EP.aLDRPixels[i].a); break; + default: break; + } + } + } + + *this = final; +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void D3DX_BC7::GeneratePaletteQuantized(const EncodeParams* pEP, size_t uIndexMode, const LDREndPntPair& endPts, LDRColorA aPalette[]) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const size_t uIndexPrec = uIndexMode ? ms_aInfo[pEP->uMode].uIndexPrec2 : ms_aInfo[pEP->uMode].uIndexPrec; + const size_t uIndexPrec2 = uIndexMode ? ms_aInfo[pEP->uMode].uIndexPrec : ms_aInfo[pEP->uMode].uIndexPrec2; + const size_t uNumIndices = size_t(1) << uIndexPrec; + const size_t uNumIndices2 = size_t(1) << uIndexPrec2; + assert(uNumIndices > 0 && uNumIndices2 > 0); + _Analysis_assume_(uNumIndices > 0 && uNumIndices2 > 0); + assert((uNumIndices <= BC7_MAX_INDICES) && (uNumIndices2 <= BC7_MAX_INDICES)); + _Analysis_assume_((uNumIndices <= BC7_MAX_INDICES) && (uNumIndices2 <= BC7_MAX_INDICES)); + + const LDRColorA a = Unquantize(endPts.A, ms_aInfo[pEP->uMode].RGBAPrecWithP); + const LDRColorA b = Unquantize(endPts.B, ms_aInfo[pEP->uMode].RGBAPrecWithP); + if (uIndexPrec2 == 0) + { + for (size_t i = 0; i < uNumIndices; i++) + LDRColorA::Interpolate(a, b, i, i, uIndexPrec, uIndexPrec, aPalette[i]); + } + else + { + for (size_t i = 0; i < uNumIndices; i++) + LDRColorA::InterpolateRGB(a, b, i, uIndexPrec, aPalette[i]); + for (size_t i = 0; i < uNumIndices2; i++) + LDRColorA::InterpolateA(a, b, i, uIndexPrec2, aPalette[i]); + } +} + +_Use_decl_annotations_ +float D3DX_BC7::PerturbOne(const EncodeParams* pEP, const LDRColorA aColors[], size_t np, size_t uIndexMode, size_t ch, + const LDREndPntPair &oldEndPts, LDREndPntPair &newEndPts, float fOldErr, uint8_t do_b) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const int prec = ms_aInfo[pEP->uMode].RGBAPrecWithP[ch]; + LDREndPntPair tmp_endPts = newEndPts = oldEndPts; + float fMinErr = fOldErr; + uint8_t* pnew_c = (do_b ? &newEndPts.B[ch] : &newEndPts.A[ch]); + uint8_t* ptmp_c = (do_b ? &tmp_endPts.B[ch] : &tmp_endPts.A[ch]); + + // do a logarithmic search for the best error for this endpoint (which) + for (int step = 1 << (prec - 1); step; step >>= 1) + { + bool bImproved = false; + int beststep = 0; + for (int sign = -1; sign <= 1; sign += 2) + { + int tmp = int(*pnew_c) + sign * step; + if (tmp < 0 || tmp >= (1 << prec)) + continue; + else + *ptmp_c = static_cast(tmp); + + const float fTotalErr = MapColors(pEP, aColors, np, uIndexMode, tmp_endPts, fMinErr); + if (fTotalErr < fMinErr) + { + bImproved = true; + fMinErr = fTotalErr; + beststep = sign * step; + } + } + + // if this was an improvement, move the endpoint and continue search from there + if (bImproved) + *pnew_c = uint8_t(int(*pnew_c) + beststep); + } + return fMinErr; +} + +// perturb the endpoints at least -3 to 3. +// always ensure endpoint ordering is preserved (no need to overlap the scan) +_Use_decl_annotations_ +void D3DX_BC7::Exhaustive(const EncodeParams* pEP, const LDRColorA aColors[], size_t np, size_t uIndexMode, size_t ch, + float& fOrgErr, LDREndPntPair& optEndPt) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uPrec = ms_aInfo[pEP->uMode].RGBAPrecWithP[ch]; + LDREndPntPair tmpEndPt; + if (fOrgErr == 0) + return; + + constexpr int delta = 5; + + // ok figure out the range of A and B + tmpEndPt = optEndPt; + const int alow = std::max(0, int(optEndPt.A[ch]) - delta); + const int ahigh = std::min((1 << uPrec) - 1, int(optEndPt.A[ch]) + delta); + const int blow = std::max(0, int(optEndPt.B[ch]) - delta); + const int bhigh = std::min((1 << uPrec) - 1, int(optEndPt.B[ch]) + delta); + int amin = 0; + int bmin = 0; + + float fBestErr = fOrgErr; + if (optEndPt.A[ch] <= optEndPt.B[ch]) + { + // keep a <= b + for (int a = alow; a <= ahigh; ++a) + { + for (int b = std::max(a, blow); b < bhigh; ++b) + { + tmpEndPt.A[ch] = static_cast(a); + tmpEndPt.B[ch] = static_cast(b); + + const float fErr = MapColors(pEP, aColors, np, uIndexMode, tmpEndPt, fBestErr); + if (fErr < fBestErr) + { + amin = a; + bmin = b; + fBestErr = fErr; + } + } + } + } + else + { + // keep b <= a + for (int b = blow; b < bhigh; ++b) + { + for (int a = std::max(b, alow); a <= ahigh; ++a) + { + tmpEndPt.A[ch] = static_cast(a); + tmpEndPt.B[ch] = static_cast(b); + + const float fErr = MapColors(pEP, aColors, np, uIndexMode, tmpEndPt, fBestErr); + if (fErr < fBestErr) + { + amin = a; + bmin = b; + fBestErr = fErr; + } + } + } + } + + if (fBestErr < fOrgErr) + { + optEndPt.A[ch] = static_cast(amin); + optEndPt.B[ch] = static_cast(bmin); + fOrgErr = fBestErr; + } +} + +_Use_decl_annotations_ +void D3DX_BC7::OptimizeOne(const EncodeParams* pEP, const LDRColorA aColors[], size_t np, size_t uIndexMode, + float fOrgErr, const LDREndPntPair& org, LDREndPntPair& opt) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + float fOptErr = fOrgErr; + opt = org; + + LDREndPntPair new_a, new_b; + LDREndPntPair newEndPts; + uint8_t do_b; + + // now optimize each channel separately + for (size_t ch = 0; ch < BC7_NUM_CHANNELS; ++ch) + { + if (ms_aInfo[pEP->uMode].RGBAPrecWithP[ch] == 0) + continue; + + // figure out which endpoint when perturbed gives the most improvement and start there + // if we just alternate, we can easily end up in a local minima + const float fErr0 = PerturbOne(pEP, aColors, np, uIndexMode, ch, opt, new_a, fOptErr, 0); // perturb endpt A + const float fErr1 = PerturbOne(pEP, aColors, np, uIndexMode, ch, opt, new_b, fOptErr, 1); // perturb endpt B + + uint8_t& copt_a = opt.A[ch]; + uint8_t& copt_b = opt.B[ch]; + uint8_t& cnew_a = new_a.A[ch]; + uint8_t& cnew_b = new_a.B[ch]; + + if (fErr0 < fErr1) + { + if (fErr0 >= fOptErr) + continue; + copt_a = cnew_a; + fOptErr = fErr0; + do_b = 1; // do B next + } + else + { + if (fErr1 >= fOptErr) + continue; + copt_b = cnew_b; + fOptErr = fErr1; + do_b = 0; // do A next + } + + // now alternate endpoints and keep trying until there is no improvement + for (; ; ) + { + const float fErr = PerturbOne(pEP, aColors, np, uIndexMode, ch, opt, newEndPts, fOptErr, do_b); + if (fErr >= fOptErr) + break; + if (do_b == 0) + copt_a = cnew_a; + else + copt_b = cnew_b; + fOptErr = fErr; + do_b = 1u - do_b; // now move the other endpoint + } + } + + // finally, do a small exhaustive search around what we think is the global minima to be sure + for (size_t ch = 0; ch < BC7_NUM_CHANNELS; ch++) + Exhaustive(pEP, aColors, np, uIndexMode, ch, fOptErr, opt); +} + +_Use_decl_annotations_ +void D3DX_BC7::OptimizeEndPoints(const EncodeParams* pEP, size_t uShape, size_t uIndexMode, const float afOrgErr[], + const LDREndPntPair aOrgEndPts[], LDREndPntPair aOptEndPts[]) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC7_MAX_REGIONS && uShape < BC7_MAX_SHAPES); + _Analysis_assume_(uPartitions < BC7_MAX_REGIONS && uShape < BC7_MAX_SHAPES); + + LDRColorA aPixels[NUM_PIXELS_PER_BLOCK]; + + for (size_t p = 0; p <= uPartitions; ++p) + { + // collect the pixels in the region + size_t np = 0; + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + if (g_aPartitionTable[uPartitions][uShape][i] == p) + aPixels[np++] = pEP->aLDRPixels[i]; + + OptimizeOne(pEP, aPixels, np, uIndexMode, afOrgErr[p], aOrgEndPts[p], aOptEndPts[p]); + } +} + +_Use_decl_annotations_ +void D3DX_BC7::AssignIndices(const EncodeParams* pEP, size_t uShape, size_t uIndexMode, LDREndPntPair endPts[], size_t aIndices[], size_t aIndices2[], + float afTotErr[]) const noexcept +{ + assert(pEP); + assert(uShape < BC7_MAX_SHAPES); + _Analysis_assume_(uShape < BC7_MAX_SHAPES); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC7_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC7_MAX_REGIONS); + + const uint8_t uIndexPrec = uIndexMode ? ms_aInfo[pEP->uMode].uIndexPrec2 : ms_aInfo[pEP->uMode].uIndexPrec; + const uint8_t uIndexPrec2 = uIndexMode ? ms_aInfo[pEP->uMode].uIndexPrec : ms_aInfo[pEP->uMode].uIndexPrec2; + auto const uNumIndices = static_cast(1u << uIndexPrec); + auto const uNumIndices2 = static_cast(1u << uIndexPrec2); + + assert((uNumIndices <= BC7_MAX_INDICES) && (uNumIndices2 <= BC7_MAX_INDICES)); + _Analysis_assume_((uNumIndices <= BC7_MAX_INDICES) && (uNumIndices2 <= BC7_MAX_INDICES)); + + const uint8_t uHighestIndexBit = uint8_t(uNumIndices >> 1); + const uint8_t uHighestIndexBit2 = uint8_t(uNumIndices2 >> 1); + LDRColorA aPalette[BC7_MAX_REGIONS][BC7_MAX_INDICES]; + + // build list of possibles + for (size_t p = 0; p <= uPartitions; p++) + { + GeneratePaletteQuantized(pEP, uIndexMode, endPts[p], aPalette[p]); + afTotErr[p] = 0; + } + + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + { + uint8_t uRegion = g_aPartitionTable[uPartitions][uShape][i]; + assert(uRegion < BC7_MAX_REGIONS); + _Analysis_assume_(uRegion < BC7_MAX_REGIONS); + afTotErr[uRegion] += ComputeError(pEP->aLDRPixels[i], aPalette[uRegion], uIndexPrec, uIndexPrec2, &(aIndices[i]), &(aIndices2[i])); + } + + // swap endpoints as needed to ensure that the indices at index_positions have a 0 high-order bit + if (uIndexPrec2 == 0) + { + for (size_t p = 0; p <= uPartitions; p++) + { + if (aIndices[g_aFixUp[uPartitions][uShape][p]] & uHighestIndexBit) + { + std::swap(endPts[p].A, endPts[p].B); + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + if (g_aPartitionTable[uPartitions][uShape][i] == p) + aIndices[i] = uNumIndices - 1 - aIndices[i]; + } + assert((aIndices[g_aFixUp[uPartitions][uShape][p]] & uHighestIndexBit) == 0); + } + } + else + { + for (size_t p = 0; p <= uPartitions; p++) + { + if (aIndices[g_aFixUp[uPartitions][uShape][p]] & uHighestIndexBit) + { + std::swap(endPts[p].A.r, endPts[p].B.r); + std::swap(endPts[p].A.g, endPts[p].B.g); + std::swap(endPts[p].A.b, endPts[p].B.b); + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + if (g_aPartitionTable[uPartitions][uShape][i] == p) + aIndices[i] = uNumIndices - 1 - aIndices[i]; + } + assert((aIndices[g_aFixUp[uPartitions][uShape][p]] & uHighestIndexBit) == 0); + + if (aIndices2[0] & uHighestIndexBit2) + { + std::swap(endPts[p].A.a, endPts[p].B.a); + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + aIndices2[i] = uNumIndices2 - 1 - aIndices2[i]; + } + assert((aIndices2[0] & uHighestIndexBit2) == 0); + } + } +} + +_Use_decl_annotations_ +void D3DX_BC7::EmitBlock(const EncodeParams* pEP, size_t uShape, size_t uRotation, size_t uIndexMode, const LDREndPntPair aEndPts[], const size_t aIndex[], const size_t aIndex2[]) noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC7_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC7_MAX_REGIONS); + + const size_t uPBits = ms_aInfo[pEP->uMode].uPBits; + const size_t uIndexPrec = ms_aInfo[pEP->uMode].uIndexPrec; + const size_t uIndexPrec2 = ms_aInfo[pEP->uMode].uIndexPrec2; + const LDRColorA RGBAPrec = ms_aInfo[pEP->uMode].RGBAPrec; + const LDRColorA RGBAPrecWithP = ms_aInfo[pEP->uMode].RGBAPrecWithP; + size_t i; + size_t uStartBit = 0; + SetBits(uStartBit, pEP->uMode, 0); + SetBits(uStartBit, 1, 1); + SetBits(uStartBit, ms_aInfo[pEP->uMode].uRotationBits, static_cast(uRotation)); + SetBits(uStartBit, ms_aInfo[pEP->uMode].uIndexModeBits, static_cast(uIndexMode)); + SetBits(uStartBit, ms_aInfo[pEP->uMode].uPartitionBits, static_cast(uShape)); + + if (uPBits) + { + const size_t uNumEP = (size_t(uPartitions) + 1) << 1; + uint8_t aPVote[BC7_MAX_REGIONS << 1] = { 0,0,0,0,0,0 }; + uint8_t aCount[BC7_MAX_REGIONS << 1] = { 0,0,0,0,0,0 }; + for (uint8_t ch = 0; ch < BC7_NUM_CHANNELS; ch++) + { + uint8_t ep = 0; + for (i = 0; i <= uPartitions; i++) + { + if (RGBAPrec[ch] == RGBAPrecWithP[ch]) + { + SetBits(uStartBit, RGBAPrec[ch], aEndPts[i].A[ch]); + SetBits(uStartBit, RGBAPrec[ch], aEndPts[i].B[ch]); + } + else + { + SetBits(uStartBit, RGBAPrec[ch], uint8_t(aEndPts[i].A[ch] >> 1)); + SetBits(uStartBit, RGBAPrec[ch], uint8_t(aEndPts[i].B[ch] >> 1)); + size_t idx = ep++ * uPBits / uNumEP; + assert(idx < (BC7_MAX_REGIONS << 1)); + _Analysis_assume_(idx < (BC7_MAX_REGIONS << 1)); + aPVote[idx] += aEndPts[i].A[ch] & 0x01; + aCount[idx]++; + idx = ep++ * uPBits / uNumEP; + assert(idx < (BC7_MAX_REGIONS << 1)); + _Analysis_assume_(idx < (BC7_MAX_REGIONS << 1)); + aPVote[idx] += aEndPts[i].B[ch] & 0x01; + aCount[idx]++; + } + } + } + + for (i = 0; i < uPBits; i++) + { + SetBits(uStartBit, 1, (aPVote[i] >(aCount[i] >> 1)) ? 1u : 0u); + } + } + else + { + for (size_t ch = 0; ch < BC7_NUM_CHANNELS; ch++) + { + for (i = 0; i <= uPartitions; i++) + { + SetBits(uStartBit, RGBAPrec[ch], aEndPts[i].A[ch]); + SetBits(uStartBit, RGBAPrec[ch], aEndPts[i].B[ch]); + } + } + } + + const size_t* aI1 = uIndexMode ? aIndex2 : aIndex; + const size_t* aI2 = uIndexMode ? aIndex : aIndex2; + for (i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + { + if (IsFixUpOffset(ms_aInfo[pEP->uMode].uPartitions, uShape, i)) + SetBits(uStartBit, uIndexPrec - 1, static_cast(aI1[i])); + else + SetBits(uStartBit, uIndexPrec, static_cast(aI1[i])); + } + if (uIndexPrec2) + for (i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + SetBits(uStartBit, i ? uIndexPrec2 : uIndexPrec2 - 1, static_cast(aI2[i])); + + assert(uStartBit == 128); +} + +_Use_decl_annotations_ +void D3DX_BC7::FixEndpointPBits(const EncodeParams* pEP, const LDREndPntPair *pOrigEndpoints, LDREndPntPair *pFixedEndpoints) noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const size_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC7_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC7_MAX_REGIONS); + + pFixedEndpoints[0] = pOrigEndpoints[0]; + pFixedEndpoints[1] = pOrigEndpoints[1]; + pFixedEndpoints[2] = pOrigEndpoints[2]; + + const size_t uPBits = ms_aInfo[pEP->uMode].uPBits; + + if (uPBits) + { + const size_t uNumEP = size_t(1 + uPartitions) << 1; + uint8_t aPVote[BC7_MAX_REGIONS << 1] = { 0,0,0,0,0,0 }; + uint8_t aCount[BC7_MAX_REGIONS << 1] = { 0,0,0,0,0,0 }; + + const LDRColorA RGBAPrec = ms_aInfo[pEP->uMode].RGBAPrec; + const LDRColorA RGBAPrecWithP = ms_aInfo[pEP->uMode].RGBAPrecWithP; + + for (uint8_t ch = 0; ch < BC7_NUM_CHANNELS; ch++) + { + uint8_t ep = 0; + for (size_t i = 0; i <= uPartitions; i++) + { + if (RGBAPrec[ch] == RGBAPrecWithP[ch]) + { + pFixedEndpoints[i].A[ch] = pOrigEndpoints[i].A[ch]; + pFixedEndpoints[i].B[ch] = pOrigEndpoints[i].B[ch]; + } + else + { + pFixedEndpoints[i].A[ch] = uint8_t(pOrigEndpoints[i].A[ch] >> 1); + pFixedEndpoints[i].B[ch] = uint8_t(pOrigEndpoints[i].B[ch] >> 1); + + size_t idx = ep++ * uPBits / uNumEP; + assert(idx < (BC7_MAX_REGIONS << 1)); + _Analysis_assume_(idx < (BC7_MAX_REGIONS << 1)); + aPVote[idx] += pOrigEndpoints[i].A[ch] & 0x01; + aCount[idx]++; + idx = ep++ * uPBits / uNumEP; + assert(idx < (BC7_MAX_REGIONS << 1)); + _Analysis_assume_(idx < (BC7_MAX_REGIONS << 1)); + aPVote[idx] += pOrigEndpoints[i].B[ch] & 0x01; + aCount[idx]++; + } + } + } + + // Compute the actual pbits we'll use when we encode block. Note this is not + // rounding the component indices correctly in cases the pbits != a component's LSB. + int pbits[BC7_MAX_REGIONS << 1]; + for (size_t i = 0; i < uPBits; i++) + pbits[i] = aPVote[i] >(aCount[i] >> 1) ? 1 : 0; + + // Now calculate the actual endpoints with proper pbits, so error calculations are accurate. + if (pEP->uMode == 1) + { + // shared pbits + for (uint8_t ch = 0; ch < BC7_NUM_CHANNELS; ch++) + { + for (size_t i = 0; i <= uPartitions; i++) + { + pFixedEndpoints[i].A[ch] = static_cast((pFixedEndpoints[i].A[ch] << 1) | pbits[i]); + pFixedEndpoints[i].B[ch] = static_cast((pFixedEndpoints[i].B[ch] << 1) | pbits[i]); + } + } + } + else + { + for (uint8_t ch = 0; ch < BC7_NUM_CHANNELS; ch++) + { + for (size_t i = 0; i <= uPartitions; i++) + { + pFixedEndpoints[i].A[ch] = static_cast((pFixedEndpoints[i].A[ch] << 1) | pbits[i * 2 + 0]); + pFixedEndpoints[i].B[ch] = static_cast((pFixedEndpoints[i].B[ch] << 1) | pbits[i * 2 + 1]); + } + } + } + } +} + +_Use_decl_annotations_ +float D3DX_BC7::Refine(const EncodeParams* pEP, size_t uShape, size_t uRotation, size_t uIndexMode) noexcept +{ + assert(pEP); + assert(uShape < BC7_MAX_SHAPES); + _Analysis_assume_(uShape < BC7_MAX_SHAPES); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const size_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC7_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC7_MAX_REGIONS); + + LDREndPntPair aOrgEndPts[BC7_MAX_REGIONS]; + LDREndPntPair aOptEndPts[BC7_MAX_REGIONS]; + size_t aOrgIdx[NUM_PIXELS_PER_BLOCK]; + size_t aOrgIdx2[NUM_PIXELS_PER_BLOCK]; + size_t aOptIdx[NUM_PIXELS_PER_BLOCK]; + size_t aOptIdx2[NUM_PIXELS_PER_BLOCK]; + float aOrgErr[BC7_MAX_REGIONS]; + float aOptErr[BC7_MAX_REGIONS]; + + const LDREndPntPair* aEndPts = &pEP->aEndPts[uShape][0]; + + for (size_t p = 0; p <= uPartitions; p++) + { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-overflow" +#endif + aOrgEndPts[p].A = Quantize(aEndPts[p].A, ms_aInfo[pEP->uMode].RGBAPrecWithP); + aOrgEndPts[p].B = Quantize(aEndPts[p].B, ms_aInfo[pEP->uMode].RGBAPrecWithP); +#ifdef __GNUC_ +#pragma GCC diagnostic pop +#endif + } + + LDREndPntPair newEndPts1[BC7_MAX_REGIONS]; + FixEndpointPBits(pEP, aOrgEndPts, newEndPts1); + + AssignIndices(pEP, uShape, uIndexMode, newEndPts1, aOrgIdx, aOrgIdx2, aOrgErr); + + OptimizeEndPoints(pEP, uShape, uIndexMode, aOrgErr, newEndPts1, aOptEndPts); + + LDREndPntPair newEndPts2[BC7_MAX_REGIONS]; + FixEndpointPBits(pEP, aOptEndPts, newEndPts2); + + AssignIndices(pEP, uShape, uIndexMode, newEndPts2, aOptIdx, aOptIdx2, aOptErr); + + float fOrgTotErr = 0, fOptTotErr = 0; + for (size_t p = 0; p <= uPartitions; p++) + { + fOrgTotErr += aOrgErr[p]; + fOptTotErr += aOptErr[p]; + } + if (fOptTotErr < fOrgTotErr) + { + EmitBlock(pEP, uShape, uRotation, uIndexMode, newEndPts2, aOptIdx, aOptIdx2); + return fOptTotErr; + } + else + { + EmitBlock(pEP, uShape, uRotation, uIndexMode, newEndPts1, aOrgIdx, aOrgIdx2); + return fOrgTotErr; + } +} + +_Use_decl_annotations_ +float D3DX_BC7::MapColors(const EncodeParams* pEP, const LDRColorA aColors[], size_t np, size_t uIndexMode, const LDREndPntPair& endPts, float fMinErr) const noexcept +{ + assert(pEP); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + const uint8_t uIndexPrec = uIndexMode ? ms_aInfo[pEP->uMode].uIndexPrec2 : ms_aInfo[pEP->uMode].uIndexPrec; + const uint8_t uIndexPrec2 = uIndexMode ? ms_aInfo[pEP->uMode].uIndexPrec : ms_aInfo[pEP->uMode].uIndexPrec2; + LDRColorA aPalette[BC7_MAX_INDICES]; + float fTotalErr = 0; + + GeneratePaletteQuantized(pEP, uIndexMode, endPts, aPalette); + for (size_t i = 0; i < np; ++i) + { + fTotalErr += ComputeError(aColors[i], aPalette, uIndexPrec, uIndexPrec2); + if (fTotalErr > fMinErr) // check for early exit + { + fTotalErr = FLT_MAX; + break; + } + } + + return fTotalErr; +} + +_Use_decl_annotations_ +float D3DX_BC7::RoughMSE(EncodeParams* pEP, size_t uShape, size_t uIndexMode) noexcept +{ + assert(pEP); + assert(uShape < BC7_MAX_SHAPES); + _Analysis_assume_(uShape < BC7_MAX_SHAPES); + assert(pEP->uMode < c_NumModes); + _Analysis_assume_(pEP->uMode < c_NumModes); + + LDREndPntPair* aEndPts = pEP->aEndPts[uShape]; + + const uint8_t uPartitions = ms_aInfo[pEP->uMode].uPartitions; + assert(uPartitions < BC7_MAX_REGIONS); + _Analysis_assume_(uPartitions < BC7_MAX_REGIONS); + + const uint8_t uIndexPrec = uIndexMode ? ms_aInfo[pEP->uMode].uIndexPrec2 : ms_aInfo[pEP->uMode].uIndexPrec; + const uint8_t uIndexPrec2 = uIndexMode ? ms_aInfo[pEP->uMode].uIndexPrec : ms_aInfo[pEP->uMode].uIndexPrec2; + auto const uNumIndices = static_cast(1u << uIndexPrec); + auto const uNumIndices2 = static_cast(1u << uIndexPrec2); + size_t auPixIdx[NUM_PIXELS_PER_BLOCK]; + LDRColorA aPalette[BC7_MAX_REGIONS][BC7_MAX_INDICES]; + + for (size_t p = 0; p <= uPartitions; p++) + { + size_t np = 0; + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + { + if (g_aPartitionTable[uPartitions][uShape][i] == p) + { + auPixIdx[np++] = i; + } + } + + // handle simple cases + assert(np > 0); + if (np == 1) + { + aEndPts[p].A = pEP->aLDRPixels[auPixIdx[0]]; + aEndPts[p].B = pEP->aLDRPixels[auPixIdx[0]]; + continue; + } + else if (np == 2) + { + aEndPts[p].A = pEP->aLDRPixels[auPixIdx[0]]; + aEndPts[p].B = pEP->aLDRPixels[auPixIdx[1]]; + continue; + } + + if (uIndexPrec2 == 0) + { + HDRColorA epA, epB; + OptimizeRGBA(pEP->aHDRPixels, &epA, &epB, 4, np, auPixIdx); + epA.Clamp(0.0f, 1.0f); + epB.Clamp(0.0f, 1.0f); + epA *= 255.0f; + epB *= 255.0f; + aEndPts[p].A = epA.ToLDRColorA(); + aEndPts[p].B = epB.ToLDRColorA(); + } + else + { + uint8_t uMinAlpha = 255, uMaxAlpha = 0; + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) + { + uMinAlpha = std::min(uMinAlpha, pEP->aLDRPixels[auPixIdx[i]].a); + uMaxAlpha = std::max(uMaxAlpha, pEP->aLDRPixels[auPixIdx[i]].a); + } + + HDRColorA epA, epB; + OptimizeRGB(pEP->aHDRPixels, &epA, &epB, 4, np, auPixIdx); + epA.Clamp(0.0f, 1.0f); + epB.Clamp(0.0f, 1.0f); + epA *= 255.0f; + epB *= 255.0f; + aEndPts[p].A = epA.ToLDRColorA(); + aEndPts[p].B = epB.ToLDRColorA(); + aEndPts[p].A.a = uMinAlpha; + aEndPts[p].B.a = uMaxAlpha; + } + } + + if (uIndexPrec2 == 0) + { + for (size_t p = 0; p <= uPartitions; p++) + for (size_t i = 0; i < uNumIndices; i++) + LDRColorA::Interpolate(aEndPts[p].A, aEndPts[p].B, i, i, uIndexPrec, uIndexPrec, aPalette[p][i]); + } + else + { + for (size_t p = 0; p <= uPartitions; p++) + { + for (size_t i = 0; i < uNumIndices; i++) + LDRColorA::InterpolateRGB(aEndPts[p].A, aEndPts[p].B, i, uIndexPrec, aPalette[p][i]); + for (size_t i = 0; i < uNumIndices2; i++) + LDRColorA::InterpolateA(aEndPts[p].A, aEndPts[p].B, i, uIndexPrec2, aPalette[p][i]); + } + } + + float fTotalErr = 0; + for (size_t i = 0; i < NUM_PIXELS_PER_BLOCK; i++) + { + const uint8_t uRegion = g_aPartitionTable[uPartitions][uShape][i]; + fTotalErr += ComputeError(pEP->aLDRPixels[i], aPalette[uRegion], uIndexPrec, uIndexPrec2); + } + + return fTotalErr; +} + + +//===================================================================================== +// Entry points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// BC6H Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC6HU(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + assert(pColor && pBC); + static_assert(sizeof(D3DX_BC6H) == 16, "D3DX_BC6H should be 16 bytes"); + reinterpret_cast(pBC)->Decode(false, reinterpret_cast(pColor)); +} + +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC6HS(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + assert(pColor && pBC); + static_assert(sizeof(D3DX_BC6H) == 16, "D3DX_BC6H should be 16 bytes"); + reinterpret_cast(pBC)->Decode(true, reinterpret_cast(pColor)); +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC6HU(uint8_t *pBC, const XMVECTOR *pColor, uint32_t flags) noexcept +{ + UNREFERENCED_PARAMETER(flags); + assert(pBC && pColor); + static_assert(sizeof(D3DX_BC6H) == 16, "D3DX_BC6H should be 16 bytes"); + reinterpret_cast(pBC)->Encode(false, reinterpret_cast(pColor)); +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC6HS(uint8_t *pBC, const XMVECTOR *pColor, uint32_t flags) noexcept +{ + UNREFERENCED_PARAMETER(flags); + assert(pBC && pColor); + static_assert(sizeof(D3DX_BC6H) == 16, "D3DX_BC6H should be 16 bytes"); + reinterpret_cast(pBC)->Encode(true, reinterpret_cast(pColor)); +} + + +//------------------------------------------------------------------------------------- +// BC7 Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void DirectX::D3DXDecodeBC7(XMVECTOR *pColor, const uint8_t *pBC) noexcept +{ + assert(pColor && pBC); + static_assert(sizeof(D3DX_BC7) == 16, "D3DX_BC7 should be 16 bytes"); + reinterpret_cast(pBC)->Decode(reinterpret_cast(pColor)); +} + +_Use_decl_annotations_ +void DirectX::D3DXEncodeBC7(uint8_t *pBC, const XMVECTOR *pColor, uint32_t flags) noexcept +{ + assert(pBC && pColor); + static_assert(sizeof(D3DX_BC7) == 16, "D3DX_BC7 should be 16 bytes"); + reinterpret_cast(pBC)->Encode(flags, reinterpret_cast(pColor)); +} diff --git a/external/DirectXTex/BCDirectCompute.cpp b/external/DirectXTex/BCDirectCompute.cpp new file mode 100644 index 00000000..d1ec6a9a --- /dev/null +++ b/external/DirectXTex/BCDirectCompute.cpp @@ -0,0 +1,643 @@ +//------------------------------------------------------------------------------------- +// BCDirectCompute.cpp +// +// Direct3D 11 Compute Shader BC Compressor +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#include "BCDirectCompute.h" + +#if defined(_DEBUG) || defined(PROFILE) +#pragma comment(lib,"dxguid.lib") +#endif + +using namespace DirectX; +using Microsoft::WRL::ComPtr; + +namespace +{ + namespace cs5 + { + #include "BC7Encode_EncodeBlockCS.inc" + #include "BC7Encode_TryMode02CS.inc" + #include "BC7Encode_TryMode137CS.inc" + #include "BC7Encode_TryMode456CS.inc" + #include "BC6HEncode_EncodeBlockCS.inc" + #include "BC6HEncode_TryModeG10CS.inc" + #include "BC6HEncode_TryModeLE10CS.inc" + } + + namespace cs4 + { + #include "BC7Encode_EncodeBlockCS_cs40.inc" + #include "BC7Encode_TryMode02CS_cs40.inc" + #include "BC7Encode_TryMode137CS_cs40.inc" + #include "BC7Encode_TryMode456CS_cs40.inc" + #include "BC6HEncode_EncodeBlockCS_cs40.inc" + #include "BC6HEncode_TryModeG10CS_cs40.inc" + #include "BC6HEncode_TryModeLE10CS_cs40.inc" + } + + struct BufferBC6HBC7 + { + UINT color[4]; + }; + + struct ConstantsBC6HBC7 + { + UINT tex_width; + UINT num_block_x; + UINT format; + UINT mode_id; + UINT start_block_id; + UINT num_total_blocks; + float alpha_weight; + UINT reserved; + }; + + static_assert(sizeof(ConstantsBC6HBC7) == sizeof(UINT) * 8, "Constant buffer size mismatch"); + + inline void RunComputeShader(ID3D11DeviceContext* pContext, + ID3D11ComputeShader* shader, + ID3D11ShaderResourceView** pSRVs, + UINT srvCount, + ID3D11Buffer* pCB, + ID3D11UnorderedAccessView* pUAV, + UINT X) + { + // Force UAV to nullptr before setting SRV since we are swapping buffers + ID3D11UnorderedAccessView* nullUAV = nullptr; + pContext->CSSetUnorderedAccessViews(0, 1, &nullUAV, nullptr); + + pContext->CSSetShader(shader, nullptr, 0); + pContext->CSSetShaderResources(0, srvCount, pSRVs); + pContext->CSSetUnorderedAccessViews(0, 1, &pUAV, nullptr); + pContext->CSSetConstantBuffers(0, 1, &pCB); + pContext->Dispatch(X, 1, 1); + } + + inline void ResetContext(ID3D11DeviceContext* pContext) + { + ID3D11UnorderedAccessView* nullUAV = nullptr; + pContext->CSSetUnorderedAccessViews(0, 1, &nullUAV, nullptr); + + ID3D11ShaderResourceView* nullSRV[3] = { nullptr, nullptr, nullptr }; + pContext->CSSetShaderResources(0, 3, nullSRV); + + ID3D11Buffer* nullBuffer[1] = { nullptr }; + pContext->CSSetConstantBuffers(0, 1, nullBuffer); + } +}; + +GPUCompressBC::GPUCompressBC() noexcept : + m_bcformat(DXGI_FORMAT_UNKNOWN), + m_srcformat(DXGI_FORMAT_UNKNOWN), + m_alphaWeight(1.f), + m_bc7_mode02(false), + m_bc7_mode137(false), + m_width(0), + m_height(0) +{ +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT GPUCompressBC::Initialize(ID3D11Device* pDevice) +{ + if (!pDevice) + return E_INVALIDARG; + + // Check for DirectCompute support + const D3D_FEATURE_LEVEL fl = pDevice->GetFeatureLevel(); + + if (fl < D3D_FEATURE_LEVEL_10_0) + { + // DirectCompute not supported on Feature Level 9.x hardware + return HRESULT_E_NOT_SUPPORTED; + } + + if (fl < D3D_FEATURE_LEVEL_11_0) + { + // DirectCompute support on Feature Level 10.x hardware is optional, and this function needs it + D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS hwopts; + HRESULT hr = pDevice->CheckFeatureSupport(D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, &hwopts, sizeof(hwopts)); + if (FAILED(hr)) + { + memset(&hwopts, 0, sizeof(hwopts)); + } + + if (!hwopts.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x) + { + return HRESULT_E_NOT_SUPPORTED; + } + } + + // Save a device reference and obtain immediate context + m_device = pDevice; + + pDevice->GetImmediateContext(m_context.ReleaseAndGetAddressOf()); + assert(m_context); + + //--- Create compute shader library: BC6H ----------------------------------------- + + // Modes 11-14 + auto blob = (fl >= D3D_FEATURE_LEVEL_11_0) ? cs5::BC6HEncode_TryModeG10CS : cs4::BC6HEncode_TryModeG10CS; + auto blobSize = (fl >= D3D_FEATURE_LEVEL_11_0) ? sizeof(cs5::BC6HEncode_TryModeG10CS) : sizeof(cs4::BC6HEncode_TryModeG10CS); + HRESULT hr = pDevice->CreateComputeShader(blob, blobSize, nullptr, m_BC6H_tryModeG10CS.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + return hr; + + // Modes 1-10 + blob = (fl >= D3D_FEATURE_LEVEL_11_0) ? cs5::BC6HEncode_TryModeLE10CS : cs4::BC6HEncode_TryModeLE10CS; + blobSize = (fl >= D3D_FEATURE_LEVEL_11_0) ? sizeof(cs5::BC6HEncode_TryModeLE10CS) : sizeof(cs4::BC6HEncode_TryModeLE10CS); + hr = pDevice->CreateComputeShader(blob, blobSize, nullptr, m_BC6H_tryModeLE10CS.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + return hr; + + // Encode + blob = (fl >= D3D_FEATURE_LEVEL_11_0) ? cs5::BC6HEncode_EncodeBlockCS : cs4::BC6HEncode_EncodeBlockCS; + blobSize = (fl >= D3D_FEATURE_LEVEL_11_0) ? sizeof(cs5::BC6HEncode_EncodeBlockCS) : sizeof(cs4::BC6HEncode_EncodeBlockCS); + hr = pDevice->CreateComputeShader(blob, blobSize, nullptr, m_BC6H_encodeBlockCS.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + return hr; + + //--- Create compute shader library: BC7 ------------------------------------------ + + // Modes 4, 5, 6 + blob = (fl >= D3D_FEATURE_LEVEL_11_0) ? cs5::BC7Encode_TryMode456CS : cs4::BC7Encode_TryMode456CS; + blobSize = (fl >= D3D_FEATURE_LEVEL_11_0) ? sizeof(cs5::BC7Encode_TryMode456CS) : sizeof(cs4::BC7Encode_TryMode456CS); + hr = pDevice->CreateComputeShader(blob, blobSize, nullptr, m_BC7_tryMode456CS.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + return hr; + + // Modes 1, 3, 7 + blob = (fl >= D3D_FEATURE_LEVEL_11_0) ? cs5::BC7Encode_TryMode137CS : cs4::BC7Encode_TryMode137CS; + blobSize = (fl >= D3D_FEATURE_LEVEL_11_0) ? sizeof(cs5::BC7Encode_TryMode137CS) : sizeof(cs4::BC7Encode_TryMode137CS); + hr = pDevice->CreateComputeShader(blob, blobSize, nullptr, m_BC7_tryMode137CS.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + return hr; + + // Modes 0, 2 + blob = (fl >= D3D_FEATURE_LEVEL_11_0) ? cs5::BC7Encode_TryMode02CS : cs4::BC7Encode_TryMode02CS; + blobSize = (fl >= D3D_FEATURE_LEVEL_11_0) ? sizeof(cs5::BC7Encode_TryMode02CS) : sizeof(cs4::BC7Encode_TryMode02CS); + hr = pDevice->CreateComputeShader(blob, blobSize, nullptr, m_BC7_tryMode02CS.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + return hr; + + // Encode + blob = (fl >= D3D_FEATURE_LEVEL_11_0) ? cs5::BC7Encode_EncodeBlockCS : cs4::BC7Encode_EncodeBlockCS; + blobSize = (fl >= D3D_FEATURE_LEVEL_11_0) ? sizeof(cs5::BC7Encode_EncodeBlockCS) : sizeof(cs4::BC7Encode_EncodeBlockCS); + hr = pDevice->CreateComputeShader(blob, blobSize, nullptr, m_BC7_encodeBlockCS.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + return hr; + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +HRESULT GPUCompressBC::Prepare(size_t width, size_t height, uint32_t flags, DXGI_FORMAT format, float alphaWeight) +{ + if (!width || !height || alphaWeight < 0.f) + return E_INVALIDARG; + + if ((width > UINT32_MAX) || (height > UINT32_MAX)) + return E_INVALIDARG; + + m_width = width; + m_height = height; + + m_alphaWeight = alphaWeight; + + if (flags & TEX_COMPRESS_BC7_QUICK) + { + m_bc7_mode02 = false; + m_bc7_mode137 = false; + } + else + { + m_bc7_mode02 = (flags & TEX_COMPRESS_BC7_USE_3SUBSETS) != 0; + m_bc7_mode137 = true; + } + + const size_t xblocks = std::max(1, (width + 3) >> 2); + const size_t yblocks = std::max(1, (height + 3) >> 2); + const size_t num_blocks = xblocks * yblocks; + + switch (format) + { + // BC6H GPU compressor takes RGBAF32 as input + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + m_srcformat = DXGI_FORMAT_R32G32B32A32_FLOAT; + break; + + // BC7 GPU compressor takes RGBA32 as input + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + m_srcformat = DXGI_FORMAT_R8G8B8A8_UNORM; + break; + + case DXGI_FORMAT_BC7_UNORM_SRGB: + m_srcformat = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + break; + + default: + m_bcformat = m_srcformat = DXGI_FORMAT_UNKNOWN; + return HRESULT_E_NOT_SUPPORTED; + } + + m_bcformat = format; + + auto pDevice = m_device.Get(); + if (!pDevice) + return E_POINTER; + + // Create structured buffers + const uint64_t sizeInBytes = uint64_t(num_blocks) * sizeof(BufferBC6HBC7); + if (sizeInBytes >= UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + auto const bufferSize = static_cast(sizeInBytes); + + { + D3D11_BUFFER_DESC desc = {}; + desc.BindFlags = D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED; + desc.StructureByteStride = sizeof(BufferBC6HBC7); + desc.ByteWidth = static_cast(bufferSize); + + HRESULT hr = pDevice->CreateBuffer(&desc, nullptr, m_output.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + + hr = pDevice->CreateBuffer(&desc, nullptr, m_err1.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + + hr = pDevice->CreateBuffer(&desc, nullptr, m_err2.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + } + + // Create staging output buffer + { + D3D11_BUFFER_DESC desc = {}; + desc.Usage = D3D11_USAGE_STAGING; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + desc.ByteWidth = static_cast(bufferSize); + + HRESULT hr = pDevice->CreateBuffer(&desc, nullptr, m_outputCPU.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + } + + // Create constant buffer + { + D3D11_BUFFER_DESC desc = {}; + desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + desc.Usage = D3D11_USAGE_DYNAMIC; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.ByteWidth = sizeof(ConstantsBC6HBC7); + + HRESULT hr = pDevice->CreateBuffer(&desc, nullptr, m_constBuffer.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + } + + // Create shader resource views + { + D3D11_SHADER_RESOURCE_VIEW_DESC desc = {}; + desc.Buffer.NumElements = static_cast(num_blocks); + desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; + + HRESULT hr = pDevice->CreateShaderResourceView(m_err1.Get(), &desc, m_err1SRV.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + + hr = pDevice->CreateShaderResourceView(m_err2.Get(), &desc, m_err2SRV.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + } + + // Create unordered access views + { + D3D11_UNORDERED_ACCESS_VIEW_DESC desc = {}; + desc.Buffer.NumElements = static_cast(num_blocks); + desc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER; + + HRESULT hr = pDevice->CreateUnorderedAccessView(m_output.Get(), &desc, m_outputUAV.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + + hr = pDevice->CreateUnorderedAccessView(m_err1.Get(), &desc, m_err1UAV.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + + hr = pDevice->CreateUnorderedAccessView(m_err2.Get(), &desc, m_err2UAV.ReleaseAndGetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +HRESULT GPUCompressBC::Compress(const Image& srcImage, const Image& destImage) +{ + if (!srcImage.pixels || !destImage.pixels) + return E_INVALIDARG; + + if (srcImage.width != destImage.width + || srcImage.height != destImage.height + || srcImage.width != m_width + || srcImage.height != m_height + || destImage.format != m_bcformat) + { + return E_UNEXPECTED; + } + + //--- Create input texture -------------------------------------------------------- + auto pDevice = m_device.Get(); + if (!pDevice) + return E_POINTER; + + // We need to avoid the hardware doing additional colorspace conversion + const DXGI_FORMAT inputFormat = (m_srcformat == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) ? DXGI_FORMAT_R8G8B8A8_UNORM : m_srcformat; + + ComPtr sourceTex; + { + D3D11_TEXTURE2D_DESC desc = {}; + desc.Width = static_cast(srcImage.width); + desc.Height = static_cast(srcImage.height); + desc.MipLevels = 1; + desc.ArraySize = 1; + desc.Format = inputFormat; + desc.SampleDesc.Count = 1; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + + D3D11_SUBRESOURCE_DATA initData; + initData.pSysMem = srcImage.pixels; + initData.SysMemPitch = static_cast(srcImage.rowPitch); + initData.SysMemSlicePitch = static_cast(srcImage.slicePitch); + + HRESULT hr = pDevice->CreateTexture2D(&desc, &initData, sourceTex.GetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + } + + ComPtr sourceSRV; + { + D3D11_SHADER_RESOURCE_VIEW_DESC desc = {}; + desc.Texture2D.MipLevels = 1; + desc.Format = inputFormat; + desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; + + HRESULT hr = pDevice->CreateShaderResourceView(sourceTex.Get(), &desc, sourceSRV.GetAddressOf()); + if (FAILED(hr)) + { + return hr; + } + } + + //--- Compress using DirectCompute ------------------------------------------------ + bool isbc7 = false; + switch (m_bcformat) + { + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + break; + + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + isbc7 = true; + break; + + default: + return E_UNEXPECTED; + } + + constexpr UINT MAX_BLOCK_BATCH = 64u; + + auto pContext = m_context.Get(); + if (!pContext) + return E_UNEXPECTED; + + const size_t xblocks = std::max(1, (m_width + 3) >> 2); + const size_t yblocks = std::max(1, (m_height + 3) >> 2); + + auto const num_total_blocks = static_cast(xblocks * yblocks); + UINT num_blocks = num_total_blocks; + UINT start_block_id = 0; + while (num_blocks > 0) + { + const UINT n = std::min(num_blocks, MAX_BLOCK_BATCH); + const UINT uThreadGroupCount = n; + + { + D3D11_MAPPED_SUBRESOURCE mapped; + HRESULT hr = pContext->Map(m_constBuffer.Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped); + if (FAILED(hr)) + return hr; + + ConstantsBC6HBC7 param; + param.tex_width = static_cast(srcImage.width); + param.num_block_x = static_cast(xblocks); + param.format = static_cast(m_bcformat); + param.mode_id = 0; + param.start_block_id = start_block_id; + param.num_total_blocks = num_total_blocks; + param.alpha_weight = m_alphaWeight; + memcpy(mapped.pData, ¶m, sizeof(param)); + + pContext->Unmap(m_constBuffer.Get(), 0); + } + + if (isbc7) + { + //--- BC7 ----------------------------------------------------------------- + ID3D11ShaderResourceView* pSRVs[] = { sourceSRV.Get(), nullptr }; + RunComputeShader(pContext, m_BC7_tryMode456CS.Get(), pSRVs, 2, m_constBuffer.Get(), + m_err1UAV.Get(), std::max((uThreadGroupCount + 3) / 4, 1)); + + if (m_bc7_mode137) + { + for (UINT i = 0; i < 3; ++i) + { + static const UINT modes[] = { 1, 3, 7 }; + + // Mode 1: err1 -> err2 + // Mode 3: err2 -> err1 + // Mode 7: err1 -> err2 + { + D3D11_MAPPED_SUBRESOURCE mapped; + HRESULT hr = pContext->Map(m_constBuffer.Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped); + if (FAILED(hr)) + { + ResetContext(pContext); + return hr; + } + + ConstantsBC6HBC7 param; + param.tex_width = static_cast(srcImage.width); + param.num_block_x = static_cast(xblocks); + param.format = static_cast(m_bcformat); + param.mode_id = modes[i]; + param.start_block_id = start_block_id; + param.num_total_blocks = num_total_blocks; + param.alpha_weight = m_alphaWeight; + memcpy(mapped.pData, ¶m, sizeof(param)); + pContext->Unmap(m_constBuffer.Get(), 0); + } + + pSRVs[1] = (i & 1) ? m_err2SRV.Get() : m_err1SRV.Get(); + RunComputeShader(pContext, m_BC7_tryMode137CS.Get(), pSRVs, 2, m_constBuffer.Get(), + (i & 1) ? m_err1UAV.Get() : m_err2UAV.Get(), uThreadGroupCount); + } + } + + if (m_bc7_mode02) + { + // 3 subset modes tend to be used rarely and add significant compression time + for (UINT i = 0; i < 2; ++i) + { + static const UINT modes[] = { 0, 2 }; + // Mode 0: err2 -> err1 + // Mode 2: err1 -> err2 + { + D3D11_MAPPED_SUBRESOURCE mapped; + HRESULT hr = pContext->Map(m_constBuffer.Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped); + if (FAILED(hr)) + { + ResetContext(pContext); + return hr; + } + + ConstantsBC6HBC7 param; + param.tex_width = static_cast(srcImage.width); + param.num_block_x = static_cast(xblocks); + param.format = static_cast(m_bcformat); + param.mode_id = modes[i]; + param.start_block_id = start_block_id; + param.num_total_blocks = num_total_blocks; + param.alpha_weight = m_alphaWeight; + memcpy(mapped.pData, ¶m, sizeof(param)); + pContext->Unmap(m_constBuffer.Get(), 0); + } + + pSRVs[1] = (i & 1) ? m_err1SRV.Get() : m_err2SRV.Get(); + RunComputeShader(pContext, m_BC7_tryMode02CS.Get(), pSRVs, 2, m_constBuffer.Get(), + (i & 1) ? m_err2UAV.Get() : m_err1UAV.Get(), uThreadGroupCount); + } + } + + pSRVs[1] = (m_bc7_mode02 || m_bc7_mode137) ? m_err2SRV.Get() : m_err1SRV.Get(); + RunComputeShader(pContext, m_BC7_encodeBlockCS.Get(), pSRVs, 2, m_constBuffer.Get(), + m_outputUAV.Get(), std::max((uThreadGroupCount + 3) / 4, 1)); + } + else + { + //--- BC6H ---------------------------------------------------------------- + ID3D11ShaderResourceView* pSRVs[] = { sourceSRV.Get(), nullptr }; + RunComputeShader(pContext, m_BC6H_tryModeG10CS.Get(), pSRVs, 2, m_constBuffer.Get(), + m_err1UAV.Get(), std::max((uThreadGroupCount + 3) / 4, 1)); + + for (UINT i = 0; i < 10; ++i) + { + { + D3D11_MAPPED_SUBRESOURCE mapped; + HRESULT hr = pContext->Map(m_constBuffer.Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped); + if (FAILED(hr)) + { + ResetContext(pContext); + return hr; + } + + ConstantsBC6HBC7 param; + param.tex_width = static_cast(srcImage.width); + param.num_block_x = static_cast(xblocks); + param.format = static_cast(m_bcformat); + param.mode_id = i; + param.start_block_id = start_block_id; + param.num_total_blocks = num_total_blocks; + memcpy(mapped.pData, ¶m, sizeof(param)); + pContext->Unmap(m_constBuffer.Get(), 0); + } + + pSRVs[1] = (i & 1) ? m_err2SRV.Get() : m_err1SRV.Get(); + RunComputeShader(pContext, m_BC6H_tryModeLE10CS.Get(), pSRVs, 2, m_constBuffer.Get(), + (i & 1) ? m_err1UAV.Get() : m_err2UAV.Get(), std::max((uThreadGroupCount + 1) / 2, 1)); + } + + pSRVs[1] = m_err1SRV.Get(); + RunComputeShader(pContext, m_BC6H_encodeBlockCS.Get(), pSRVs, 2, m_constBuffer.Get(), + m_outputUAV.Get(), std::max((uThreadGroupCount + 1) / 2, 1)); + } + + start_block_id += n; + num_blocks -= n; + } + + ResetContext(pContext); + + //--- Copy output texture back to CPU --------------------------------------------- + + pContext->CopyResource(m_outputCPU.Get(), m_output.Get()); + + D3D11_MAPPED_SUBRESOURCE mapped; + HRESULT hr = pContext->Map(m_outputCPU.Get(), 0, D3D11_MAP_READ, 0, &mapped); + if (SUCCEEDED(hr)) + { + auto pSrc = static_cast(mapped.pData); + uint8_t *pDest = destImage.pixels; + + const size_t pitch = xblocks * sizeof(BufferBC6HBC7); + + const size_t rows = std::max(1, (destImage.height + 3) >> 2); + + for (size_t h = 0; h < rows; ++h) + { + memcpy(pDest, pSrc, destImage.rowPitch); + + pSrc += pitch; + pDest += destImage.rowPitch; + } + + pContext->Unmap(m_outputCPU.Get(), 0); + } + + return hr; +} diff --git a/external/DirectXTex/BCDirectCompute.h b/external/DirectXTex/BCDirectCompute.h new file mode 100644 index 00000000..ae025b5d --- /dev/null +++ b/external/DirectXTex/BCDirectCompute.h @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------------- +// BCDirectCompute.h +// +// Direct3D 11 Compute Shader BC Compressor +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +//------------------------------------------------------------------------------------- + +#pragma once + +namespace DirectX +{ + + class GPUCompressBC + { + public: + GPUCompressBC() noexcept; + + GPUCompressBC(GPUCompressBC&&) = default; + GPUCompressBC& operator= (GPUCompressBC&&) = default; + + GPUCompressBC(GPUCompressBC const&) = delete; + GPUCompressBC& operator= (GPUCompressBC const&) = delete; + + HRESULT Initialize(_In_ ID3D11Device* pDevice); + + HRESULT Prepare(size_t width, size_t height, uint32_t flags, DXGI_FORMAT format, float alphaWeight); + + HRESULT Compress(const Image& srcImage, const Image& destImage); + + DXGI_FORMAT GetSourceFormat() const noexcept { return m_srcformat; } + + private: + DXGI_FORMAT m_bcformat; + DXGI_FORMAT m_srcformat; + float m_alphaWeight; + bool m_bc7_mode02; + bool m_bc7_mode137; + size_t m_width; + size_t m_height; + + Microsoft::WRL::ComPtr m_device; + Microsoft::WRL::ComPtr m_context; + + Microsoft::WRL::ComPtr m_err1; + Microsoft::WRL::ComPtr m_err1UAV; + Microsoft::WRL::ComPtr m_err1SRV; + + Microsoft::WRL::ComPtr m_err2; + Microsoft::WRL::ComPtr m_err2UAV; + Microsoft::WRL::ComPtr m_err2SRV; + + Microsoft::WRL::ComPtr m_output; + Microsoft::WRL::ComPtr m_outputCPU; + Microsoft::WRL::ComPtr m_outputUAV; + Microsoft::WRL::ComPtr m_constBuffer; + + // Compute shader library + Microsoft::WRL::ComPtr m_BC6H_tryModeG10CS; + Microsoft::WRL::ComPtr m_BC6H_tryModeLE10CS; + Microsoft::WRL::ComPtr m_BC6H_encodeBlockCS; + + Microsoft::WRL::ComPtr m_BC7_tryMode456CS; + Microsoft::WRL::ComPtr m_BC7_tryMode137CS; + Microsoft::WRL::ComPtr m_BC7_tryMode02CS; + Microsoft::WRL::ComPtr m_BC7_encodeBlockCS; + }; + +} // namespace diff --git a/external/DirectXTex/DDS.h b/external/DirectXTex/DDS.h new file mode 100644 index 00000000..9fcaad64 --- /dev/null +++ b/external/DirectXTex/DDS.h @@ -0,0 +1,330 @@ +//-------------------------------------------------------------------------------------- +// DDS.h +// +// This header defines constants and structures that are useful when parsing +// DDS files. DDS files were originally designed to use several structures +// and constants that are native to DirectDraw and are defined in ddraw.h, +// such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar +// (compatible) constants and structures so that one can use DDS files +// without needing to include ddraw.h. +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +// http://go.microsoft.com/fwlink/?LinkId=248929 +// http://go.microsoft.com/fwlink/?LinkID=615561 +//-------------------------------------------------------------------------------------- + +#pragma once + +#include + +namespace DirectX +{ + +#pragma pack(push,1) + + constexpr uint32_t DDS_MAGIC = 0x20534444; // "DDS " + + struct DDS_PIXELFORMAT + { + uint32_t size; + uint32_t flags; + uint32_t fourCC; + uint32_t RGBBitCount; + uint32_t RBitMask; + uint32_t GBitMask; + uint32_t BBitMask; + uint32_t ABitMask; + }; + +#define DDS_FOURCC 0x00000004 // DDPF_FOURCC +#define DDS_RGB 0x00000040 // DDPF_RGB +#define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS +#define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE +#define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS +#define DDS_ALPHAPIXELS 0x00000001 // DDPF_ALPHAPIXELS +#define DDS_ALPHA 0x00000002 // DDPF_ALPHA +#define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 +#define DDS_PAL8A 0x00000021 // DDPF_PALETTEINDEXED8 | DDPF_ALPHAPIXELS +#define DDS_BUMPLUMINANCE 0x00040000 // DDPF_BUMPLUMINANCE +#define DDS_BUMPDUDV 0x00080000 // DDPF_BUMPDUDV +#define DDS_BUMPDUDVA 0x00080001 // DDPF_BUMPDUDV | DDPF_ALPHAPIXELS + +#ifndef MAKEFOURCC +#define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + (static_cast(static_cast(ch0)) \ + | (static_cast(static_cast(ch1)) << 8) \ + | (static_cast(static_cast(ch2)) << 16) \ + | (static_cast(static_cast(ch3)) << 24)) +#endif /* MAKEFOURCC */ + +#ifndef DDSGLOBALCONST +#if defined(__GNUC__) && !defined(__MINGW32__) +#define DDSGLOBALCONST extern const __attribute__((weak)) +#else +#define DDSGLOBALCONST extern const __declspec(selectany) +#endif +#endif /* DDSGLOBALCONST */ + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_DXT1 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_DXT2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_DXT3 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_DXT4 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_DXT5 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_BC4_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_BC4_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_BC5_UNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_BC5_SNORM = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_YUY2 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_UYVY = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('U','Y','V','Y'), 0, 0, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_X8R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_X8B8G8R8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_G16R16 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_R5G6B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0xf800, 0x07e0, 0x001f, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x7c00, 0x03e0, 0x001f, 0x8000 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_X1R5G5B5 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x7c00, 0x03e0, 0x001f, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x0f00, 0x00f0, 0x000f, 0xf000 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_X4R4G4B4 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0f00, 0x00f0, 0x000f, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_R8G8B8 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0xff0000, 0x00ff00, 0x0000ff, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A8R3G3B2 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00e0, 0x001c, 0x0003, 0xff00 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_R3G3B2 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 8, 0xe0, 0x1c, 0x03, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A4L4 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 8, 0x0f, 0, 0, 0xf0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_L16 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A8L8 = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0, 0, 0xff00 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A8L8_ALT = + { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 8, 0x00ff, 0, 0, 0xff00 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_L8_NVTT1 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 8, 0xff, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_L16_NVTT1 = + { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0xffff, 0, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A8L8_NVTT1 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00ff, 0, 0, 0xff00 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A8 = + { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0, 0, 0, 0xff }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_V8U8 = + { sizeof(DDS_PIXELFORMAT), DDS_BUMPDUDV, 0, 16, 0x00ff, 0xff00, 0, 0 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_Q8W8V8U8 = + { sizeof(DDS_PIXELFORMAT), DDS_BUMPDUDV, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; + + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_V16U16 = + { sizeof(DDS_PIXELFORMAT), DDS_BUMPDUDV, 0, 32, 0x0000ffff, 0xffff0000, 0, 0 }; + +// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A2R10G10B10 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000003ff, 0x000ffc00, 0x3ff00000, 0xc0000000 }; + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A2B10G10R10 = + { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x3ff00000, 0x000ffc00, 0x000003ff, 0xc0000000 }; + +// The following legacy Direct3D 9 formats use 'mixed' signed & unsigned channels so requires special handling + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_A2W10V10U10 = + { sizeof(DDS_PIXELFORMAT), DDS_BUMPDUDVA, 0, 32, 0x3ff00000, 0x000ffc00, 0x000003ff, 0xc0000000 }; + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_L6V5U5 = + { sizeof(DDS_PIXELFORMAT), DDS_BUMPLUMINANCE, 0, 16, 0x001f, 0x03e0, 0xfc00, 0 }; + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_X8L8V8U8 = + { sizeof(DDS_PIXELFORMAT), DDS_BUMPLUMINANCE, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0 }; + +// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) + DDSGLOBALCONST DDS_PIXELFORMAT DDSPF_DX10 = + { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; + +#define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +#define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT +#define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH +#define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH +#define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE + +#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT +#define DDS_WIDTH 0x00000004 // DDSD_WIDTH + +#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE +#define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX + +#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + +#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ + DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ + DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) + +#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP + +#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME + +// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION + enum DDS_RESOURCE_DIMENSION : uint32_t + { + DDS_DIMENSION_TEXTURE1D = 2, + DDS_DIMENSION_TEXTURE2D = 3, + DDS_DIMENSION_TEXTURE3D = 4, + }; + + // Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG + enum DDS_RESOURCE_MISC_FLAG : uint32_t + { + DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, + }; + + enum DDS_MISC_FLAGS2 : uint32_t + { + DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, + }; + +#ifndef DDS_ALPHA_MODE_DEFINED +#define DDS_ALPHA_MODE_DEFINED + enum DDS_ALPHA_MODE : uint32_t + { + DDS_ALPHA_MODE_UNKNOWN = 0, + DDS_ALPHA_MODE_STRAIGHT = 1, + DDS_ALPHA_MODE_PREMULTIPLIED = 2, + DDS_ALPHA_MODE_OPAQUE = 3, + DDS_ALPHA_MODE_CUSTOM = 4, + }; +#endif + + struct DDS_HEADER + { + uint32_t size; + uint32_t flags; + uint32_t height; + uint32_t width; + uint32_t pitchOrLinearSize; + uint32_t depth; // only if DDS_HEADER_FLAGS_VOLUME is set in flags + uint32_t mipMapCount; + uint32_t reserved1[11]; + DDS_PIXELFORMAT ddspf; + uint32_t caps; + uint32_t caps2; + uint32_t caps3; + uint32_t caps4; + uint32_t reserved2; + }; + + struct DDS_HEADER_DXT10 + { + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see D3D11_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 + }; + +#pragma pack(pop) + + static_assert(sizeof(DDS_PIXELFORMAT) == 32, "DDS pixel format size mismatch"); + static_assert(sizeof(DDS_HEADER) == 124, "DDS Header size mismatch"); + static_assert(sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); + + constexpr size_t DDS_MIN_HEADER_SIZE = sizeof(uint32_t) + sizeof(DDS_HEADER); + constexpr size_t DDS_DX10_HEADER_SIZE = sizeof(uint32_t) + sizeof(DDS_HEADER) + sizeof(DDS_HEADER_DXT10); + static_assert(DDS_DX10_HEADER_SIZE > DDS_MIN_HEADER_SIZE, "DDS DX10 Header should be larger than standard header"); + +} // namespace + +namespace Xbox +{ + DDSGLOBALCONST DirectX::DDS_PIXELFORMAT DDSPF_XBOX = + { sizeof(DirectX::DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('X','B','O','X'), 0, 0, 0, 0, 0 }; + +#pragma pack(push,1) + + struct DDS_HEADER_XBOX + // Must match structure in XboxDDSTextureLoader module + { + DXGI_FORMAT dxgiFormat; + uint32_t resourceDimension; + uint32_t miscFlag; // see DDS_RESOURCE_MISC_FLAG + uint32_t arraySize; + uint32_t miscFlags2; // see DDS_MISC_FLAGS2 + uint32_t tileMode; // see XG_TILE_MODE / XG_SWIZZLE_MODE + uint32_t baseAlignment; + uint32_t dataSize; + uint32_t xdkVer; // matching _XDK_VER / _GXDK_VER + }; + +#pragma pack(pop) + + static_assert(sizeof(DDS_HEADER_XBOX) == 36, "DDS XBOX Header size mismatch"); + static_assert(sizeof(DDS_HEADER_XBOX) > sizeof(DirectX::DDS_HEADER_DXT10), "DDS XBOX Header should be larger than DX10 header"); + + constexpr size_t DDS_XBOX_HEADER_SIZE = sizeof(uint32_t) + sizeof(DirectX::DDS_HEADER) + sizeof(DDS_HEADER_XBOX); + + constexpr uint32_t XBOX_TILEMODE_SCARLETT = 0x1000000; +} // namespace diff --git a/external/DirectXTex/DirectXTex.h b/external/DirectXTex/DirectXTex.h new file mode 100644 index 00000000..e24142cb --- /dev/null +++ b/external/DirectXTex/DirectXTex.h @@ -0,0 +1,1044 @@ +//------------------------------------------------------------------------------------- +// DirectXTex.h +// +// DirectX Texture Library +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#pragma once + +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#if !defined(__d3d11_h__) && !defined(__d3d11_x_h__) && !defined(__d3d12_h__) && !defined(__d3d12_x_h__) && !defined(__XBOX_D3D12_X__) +#ifdef _GAMING_XBOX_SCARLETT +#include +#elif defined(_GAMING_XBOX) +#include +#elif defined(_XBOX_ONE) && defined(_TITLE) +#include +#else +#include +#endif +#endif +#else // !WIN32 +#include +#include +#endif + +#include + +#ifdef _WIN32 +#if defined(NTDDI_WIN10_FE) || defined(__MINGW32__) +#include +#else +#include +#endif + +struct IWICImagingFactory; +struct IWICMetadataQueryReader; +#endif + +#define DIRECTX_TEX_VERSION 206 + + +namespace DirectX +{ + + //--------------------------------------------------------------------------------- + // DXGI Format Utilities + constexpr bool __cdecl IsValid(_In_ DXGI_FORMAT fmt) noexcept; + bool __cdecl IsCompressed(_In_ DXGI_FORMAT fmt) noexcept; + bool __cdecl IsPacked(_In_ DXGI_FORMAT fmt) noexcept; + bool __cdecl IsVideo(_In_ DXGI_FORMAT fmt) noexcept; + bool __cdecl IsPlanar(_In_ DXGI_FORMAT fmt) noexcept; + bool __cdecl IsPalettized(_In_ DXGI_FORMAT fmt) noexcept; + bool __cdecl IsDepthStencil(_In_ DXGI_FORMAT fmt) noexcept; + bool __cdecl IsSRGB(_In_ DXGI_FORMAT fmt) noexcept; + bool __cdecl IsBGR(_In_ DXGI_FORMAT fmt) noexcept; + bool __cdecl IsTypeless(_In_ DXGI_FORMAT fmt, _In_ bool partialTypeless = true) noexcept; + + bool __cdecl HasAlpha(_In_ DXGI_FORMAT fmt) noexcept; + + size_t __cdecl BitsPerPixel(_In_ DXGI_FORMAT fmt) noexcept; + + size_t __cdecl BitsPerColor(_In_ DXGI_FORMAT fmt) noexcept; + + size_t __cdecl BytesPerBlock(_In_ DXGI_FORMAT fmt) noexcept; + + enum FORMAT_TYPE : uint32_t + { + FORMAT_TYPE_TYPELESS, + FORMAT_TYPE_FLOAT, + FORMAT_TYPE_UNORM, + FORMAT_TYPE_SNORM, + FORMAT_TYPE_UINT, + FORMAT_TYPE_SINT, + }; + + FORMAT_TYPE __cdecl FormatDataType(_In_ DXGI_FORMAT fmt) noexcept; + + enum CP_FLAGS : uint32_t + { + CP_FLAGS_NONE = 0x0, + // Normal operation + + CP_FLAGS_LEGACY_DWORD = 0x1, + // Assume pitch is DWORD aligned instead of BYTE aligned + + CP_FLAGS_PARAGRAPH = 0x2, + // Assume pitch is 16-byte aligned instead of BYTE aligned + + CP_FLAGS_YMM = 0x4, + // Assume pitch is 32-byte aligned instead of BYTE aligned + + CP_FLAGS_ZMM = 0x8, + // Assume pitch is 64-byte aligned instead of BYTE aligned + + CP_FLAGS_PAGE4K = 0x200, + // Assume pitch is 4096-byte aligned instead of BYTE aligned + + CP_FLAGS_BAD_DXTN_TAILS = 0x1000, + // BC formats with malformed mipchain blocks smaller than 4x4 + + CP_FLAGS_24BPP = 0x10000, + // Override with a legacy 24 bits-per-pixel format size + + CP_FLAGS_16BPP = 0x20000, + // Override with a legacy 16 bits-per-pixel format size + + CP_FLAGS_8BPP = 0x40000, + // Override with a legacy 8 bits-per-pixel format size + + CP_FLAGS_LIMIT_4GB = 0x10000000, + // Don't allow pixel allocations in excess of 4GB (always true for 32-bit) + }; + + HRESULT __cdecl ComputePitch( + _In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, + _Out_ size_t& rowPitch, _Out_ size_t& slicePitch, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + + size_t __cdecl ComputeScanlines(_In_ DXGI_FORMAT fmt, _In_ size_t height) noexcept; + + DXGI_FORMAT __cdecl MakeSRGB(_In_ DXGI_FORMAT fmt) noexcept; + DXGI_FORMAT __cdecl MakeLinear(_In_ DXGI_FORMAT fmt) noexcept; + DXGI_FORMAT __cdecl MakeTypeless(_In_ DXGI_FORMAT fmt) noexcept; + DXGI_FORMAT __cdecl MakeTypelessUNORM(_In_ DXGI_FORMAT fmt) noexcept; + DXGI_FORMAT __cdecl MakeTypelessFLOAT(_In_ DXGI_FORMAT fmt) noexcept; + + //--------------------------------------------------------------------------------- + // Texture metadata + enum TEX_DIMENSION : uint32_t + // Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION + { + TEX_DIMENSION_TEXTURE1D = 2, + TEX_DIMENSION_TEXTURE2D = 3, + TEX_DIMENSION_TEXTURE3D = 4, + }; + + enum TEX_MISC_FLAG : uint32_t + // Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG + { + TEX_MISC_TEXTURECUBE = 0x4L, + }; + + enum TEX_MISC_FLAG2 : uint32_t + { + TEX_MISC2_ALPHA_MODE_MASK = 0x7L, + }; + + enum TEX_ALPHA_MODE : uint32_t + // Matches DDS_ALPHA_MODE, encoded in MISC_FLAGS2 + { + TEX_ALPHA_MODE_UNKNOWN = 0, + TEX_ALPHA_MODE_STRAIGHT = 1, + TEX_ALPHA_MODE_PREMULTIPLIED = 2, + TEX_ALPHA_MODE_OPAQUE = 3, + TEX_ALPHA_MODE_CUSTOM = 4, + }; + + struct TexMetadata + { + size_t width; + size_t height; // Should be 1 for 1D textures + size_t depth; // Should be 1 for 1D or 2D textures + size_t arraySize; // For cubemap, this is a multiple of 6 + size_t mipLevels; + uint32_t miscFlags; + uint32_t miscFlags2; + DXGI_FORMAT format; + TEX_DIMENSION dimension; + + size_t __cdecl ComputeIndex(size_t mip, size_t item, size_t slice) const noexcept; + // Returns size_t(-1) to indicate an out-of-range error + + bool __cdecl IsCubemap() const noexcept { return (miscFlags & TEX_MISC_TEXTURECUBE) != 0; } + // Helper for miscFlags + + bool __cdecl IsPMAlpha() const noexcept { return ((miscFlags2 & TEX_MISC2_ALPHA_MODE_MASK) == TEX_ALPHA_MODE_PREMULTIPLIED) != 0; } + void __cdecl SetAlphaMode(TEX_ALPHA_MODE mode) noexcept { miscFlags2 = (miscFlags2 & ~static_cast(TEX_MISC2_ALPHA_MODE_MASK)) | static_cast(mode); } + TEX_ALPHA_MODE __cdecl GetAlphaMode() const noexcept { return static_cast(miscFlags2 & TEX_MISC2_ALPHA_MODE_MASK); } + // Helpers for miscFlags2 + + bool __cdecl IsVolumemap() const noexcept { return (dimension == TEX_DIMENSION_TEXTURE3D); } + // Helper for dimension + + uint32_t __cdecl CalculateSubresource(size_t mip, size_t item) const noexcept; + uint32_t __cdecl CalculateSubresource(size_t mip, size_t item, size_t plane) const noexcept; + // Returns size_t(-1) to indicate an out-of-range error + }; + + struct DDSMetaData + { + uint32_t size; // DDPIXELFORMAT.dwSize + uint32_t flags; // DDPIXELFORMAT.dwFlags + uint32_t fourCC; // DDPIXELFORMAT.dwFourCC + uint32_t RGBBitCount; // DDPIXELFORMAT.dwRGBBitCount/dwYUVBitCount/dwAlphaBitDepth/dwLuminanceBitCount/dwBumpBitCount + uint32_t RBitMask; // DDPIXELFORMAT.dwRBitMask/dwYBitMask/dwLuminanceBitMask/dwBumpDuBitMask + uint32_t GBitMask; // DDPIXELFORMAT.dwGBitMask/dwUBitMask/dwBumpDvBitMask + uint32_t BBitMask; // DDPIXELFORMAT.dwBBitMask/dwVBitMask/dwBumpLuminanceBitMask + uint32_t ABitMask; // DDPIXELFORMAT.dwRGBAlphaBitMask/dwYUVAlphaBitMask/dwLuminanceAlphaBitMask + + bool __cdecl IsDX10() const noexcept { return (fourCC == 0x30315844); } + }; + + enum DDS_FLAGS : uint32_t + { + DDS_FLAGS_NONE = 0x0, + + DDS_FLAGS_LEGACY_DWORD = 0x1, + // Assume pitch is DWORD aligned instead of BYTE aligned (used by some legacy DDS files) + + DDS_FLAGS_NO_LEGACY_EXPANSION = 0x2, + // Do not implicitly convert legacy formats that result in larger pixel sizes (24 bpp, 3:3:2, A8L8, A4L4, P8, A8P8) + + DDS_FLAGS_NO_R10B10G10A2_FIXUP = 0x4, + // Do not use work-around for long-standing D3DX DDS file format issue which reversed the 10:10:10:2 color order masks + + DDS_FLAGS_FORCE_RGB = 0x8, + // Convert DXGI 1.1 BGR formats to DXGI_FORMAT_R8G8B8A8_UNORM to avoid use of optional WDDM 1.1 formats + + DDS_FLAGS_NO_16BPP = 0x10, + // Conversions avoid use of 565, 5551, and 4444 formats and instead expand to 8888 to avoid use of optional WDDM 1.2 formats + + DDS_FLAGS_EXPAND_LUMINANCE = 0x20, + // When loading legacy luminance formats expand replicating the color channels rather than leaving them packed (L8, L16, A8L8) + + DDS_FLAGS_BAD_DXTN_TAILS = 0x40, + // Some older DXTn DDS files incorrectly handle mipchain tails for blocks smaller than 4x4 + + DDS_FLAGS_PERMISSIVE = 0x80, + // Allow some file variants due to common bugs in the header written by various leagcy DDS writers + + DDS_FLAGS_IGNORE_MIPS = 0x100, + // Allow some files to be read that have incorrect mipcount values in the header by only reading the top-level mip + + DDS_FLAGS_FORCE_DX10_EXT = 0x10000, + // Always use the 'DX10' header extension for DDS writer (i.e. don't try to write DX9 compatible DDS files) + + DDS_FLAGS_FORCE_DX10_EXT_MISC2 = 0x20000, + // DDS_FLAGS_FORCE_DX10_EXT including miscFlags2 information (result may not be compatible with D3DX10 or D3DX11) + + DDS_FLAGS_FORCE_DX9_LEGACY = 0x40000, + // Force use of legacy header for DDS writer (will fail if unable to write as such) + + DDS_FLAGS_FORCE_DXT5_RXGB = 0x80000, + // Force use of 'RXGB' instead of 'DXT5' for DDS write of BC3_UNORM data + + DDS_FLAGS_ALLOW_LARGE_FILES = 0x1000000, + // Enables the loader to read large dimension .dds files (i.e. greater than known hardware requirements) + }; + + enum TGA_FLAGS : uint32_t + { + TGA_FLAGS_NONE = 0x0, + + TGA_FLAGS_BGR = 0x1, + // 24bpp files are returned as BGRX; 32bpp files are returned as BGRA + + TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA = 0x2, + // If the loaded image has an all zero alpha channel, normally we assume it should be opaque. This flag leaves it alone. + + TGA_FLAGS_IGNORE_SRGB = 0x10, + // Ignores sRGB TGA 2.0 metadata if present in the file + + TGA_FLAGS_FORCE_SRGB = 0x20, + // Writes sRGB metadata into the file reguardless of format (TGA 2.0 only) + + TGA_FLAGS_FORCE_LINEAR = 0x40, + // Writes linear gamma metadata into the file reguardless of format (TGA 2.0 only) + + TGA_FLAGS_DEFAULT_SRGB = 0x80, + // If no colorspace is specified in TGA 2.0 metadata, assume sRGB + }; + + enum WIC_FLAGS : uint32_t + { + WIC_FLAGS_NONE = 0x0, + + WIC_FLAGS_FORCE_RGB = 0x1, + // Loads DXGI 1.1 BGR formats as DXGI_FORMAT_R8G8B8A8_UNORM to avoid use of optional WDDM 1.1 formats + + WIC_FLAGS_NO_X2_BIAS = 0x2, + // Loads DXGI 1.1 X2 10:10:10:2 format as DXGI_FORMAT_R10G10B10A2_UNORM + + WIC_FLAGS_NO_16BPP = 0x4, + // Loads 565, 5551, and 4444 formats as 8888 to avoid use of optional WDDM 1.2 formats + + WIC_FLAGS_ALLOW_MONO = 0x8, + // Loads 1-bit monochrome (black & white) as R1_UNORM rather than 8-bit grayscale + + WIC_FLAGS_ALL_FRAMES = 0x10, + // Loads all images in a multi-frame file, converting/resizing to match the first frame as needed, defaults to 0th frame otherwise + + WIC_FLAGS_IGNORE_SRGB = 0x20, + // Ignores sRGB metadata if present in the file + + WIC_FLAGS_FORCE_SRGB = 0x40, + // Writes sRGB metadata into the file reguardless of format + + WIC_FLAGS_FORCE_LINEAR = 0x80, + // Writes linear gamma metadata into the file reguardless of format + + WIC_FLAGS_DEFAULT_SRGB = 0x100, + // If no colorspace is specified, assume sRGB + + WIC_FLAGS_DITHER = 0x10000, + // Use ordered 4x4 dithering for any required conversions + + WIC_FLAGS_DITHER_DIFFUSION = 0x20000, + // Use error-diffusion dithering for any required conversions + + WIC_FLAGS_FILTER_POINT = 0x100000, + WIC_FLAGS_FILTER_LINEAR = 0x200000, + WIC_FLAGS_FILTER_CUBIC = 0x300000, + WIC_FLAGS_FILTER_FANT = 0x400000, // Combination of Linear and Box filter + // Filtering mode to use for any required image resizing (only needed when loading arrays of differently sized images; defaults to Fant) + }; + + HRESULT __cdecl GetMetadataFromDDSMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _In_ DDS_FLAGS flags, + _Out_ TexMetadata& metadata) noexcept; + HRESULT __cdecl GetMetadataFromDDSFile( + _In_z_ const wchar_t* szFile, + _In_ DDS_FLAGS flags, + _Out_ TexMetadata& metadata) noexcept; + + HRESULT __cdecl GetMetadataFromDDSMemoryEx( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _In_ DDS_FLAGS flags, + _Out_ TexMetadata& metadata, + _Out_opt_ DDSMetaData* ddPixelFormat) noexcept; + HRESULT __cdecl GetMetadataFromDDSFileEx( + _In_z_ const wchar_t* szFile, + _In_ DDS_FLAGS flags, + _Out_ TexMetadata& metadata, + _Out_opt_ DDSMetaData* ddPixelFormat) noexcept; + + HRESULT __cdecl GetMetadataFromHDRMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _Out_ TexMetadata& metadata) noexcept; + HRESULT __cdecl GetMetadataFromHDRFile( + _In_z_ const wchar_t* szFile, + _Out_ TexMetadata& metadata) noexcept; + + HRESULT __cdecl GetMetadataFromTGAMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _In_ TGA_FLAGS flags, + _Out_ TexMetadata& metadata) noexcept; + HRESULT __cdecl GetMetadataFromTGAFile( + _In_z_ const wchar_t* szFile, + _In_ TGA_FLAGS flags, + _Out_ TexMetadata& metadata) noexcept; + +#ifdef _WIN32 + HRESULT __cdecl GetMetadataFromWICMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _In_ WIC_FLAGS flags, + _Out_ TexMetadata& metadata, + _In_ std::function getMQR = nullptr); + + HRESULT __cdecl GetMetadataFromWICFile( + _In_z_ const wchar_t* szFile, + _In_ WIC_FLAGS flags, + _Out_ TexMetadata& metadata, + _In_ std::function getMQR = nullptr); +#endif + + // Compatability helpers + HRESULT __cdecl GetMetadataFromTGAMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _Out_ TexMetadata& metadata) noexcept; + HRESULT __cdecl GetMetadataFromTGAFile( + _In_z_ const wchar_t* szFile, + _Out_ TexMetadata& metadata) noexcept; + + //--------------------------------------------------------------------------------- + // Bitmap image container + struct Image + { + size_t width; + size_t height; + DXGI_FORMAT format; + size_t rowPitch; + size_t slicePitch; + uint8_t* pixels; + }; + + class ScratchImage + { + public: + ScratchImage() noexcept + : m_nimages(0), m_size(0), m_metadata{}, m_image(nullptr), m_memory(nullptr) {} + ScratchImage(ScratchImage&& moveFrom) noexcept + : m_nimages(0), m_size(0), m_metadata{}, m_image(nullptr), m_memory(nullptr) { *this = std::move(moveFrom); } + ~ScratchImage() { Release(); } + + ScratchImage& __cdecl operator= (ScratchImage&& moveFrom) noexcept; + + ScratchImage(const ScratchImage&) = delete; + ScratchImage& operator=(const ScratchImage&) = delete; + + HRESULT __cdecl Initialize(_In_ const TexMetadata& mdata, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + + HRESULT __cdecl Initialize1D(_In_ DXGI_FORMAT fmt, _In_ size_t length, _In_ size_t arraySize, _In_ size_t mipLevels, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + HRESULT __cdecl Initialize2D(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t arraySize, _In_ size_t mipLevels, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + HRESULT __cdecl Initialize3D(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t depth, _In_ size_t mipLevels, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + HRESULT __cdecl InitializeCube(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t nCubes, _In_ size_t mipLevels, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + + HRESULT __cdecl InitializeFromImage(_In_ const Image& srcImage, _In_ bool allow1D = false, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + HRESULT __cdecl InitializeArrayFromImages(_In_reads_(nImages) const Image* images, _In_ size_t nImages, _In_ bool allow1D = false, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + HRESULT __cdecl InitializeCubeFromImages(_In_reads_(nImages) const Image* images, _In_ size_t nImages, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + HRESULT __cdecl Initialize3DFromImages(_In_reads_(depth) const Image* images, _In_ size_t depth, _In_ CP_FLAGS flags = CP_FLAGS_NONE) noexcept; + + void __cdecl Release() noexcept; + + bool __cdecl OverrideFormat(_In_ DXGI_FORMAT f) noexcept; + + const TexMetadata& __cdecl GetMetadata() const noexcept { return m_metadata; } + const Image* __cdecl GetImage(_In_ size_t mip, _In_ size_t item, _In_ size_t slice) const noexcept; + + const Image* __cdecl GetImages() const noexcept { return m_image; } + size_t __cdecl GetImageCount() const noexcept { return m_nimages; } + + uint8_t* __cdecl GetPixels() const noexcept { return m_memory; } + size_t __cdecl GetPixelsSize() const noexcept { return m_size; } + + bool __cdecl IsAlphaAllOpaque() const noexcept; + + private: + size_t m_nimages; + size_t m_size; + TexMetadata m_metadata; + Image* m_image; + uint8_t* m_memory; + }; + + //--------------------------------------------------------------------------------- + // Memory blob (allocated buffer pointer is always 16-byte aligned) + class Blob + { + public: + Blob() noexcept : m_buffer(nullptr), m_size(0) {} + Blob(Blob&& moveFrom) noexcept : m_buffer(nullptr), m_size(0) { *this = std::move(moveFrom); } + ~Blob() { Release(); } + + Blob& __cdecl operator= (Blob&& moveFrom) noexcept; + + Blob(const Blob&) = delete; + Blob& operator=(const Blob&) = delete; + + HRESULT __cdecl Initialize(_In_ size_t size) noexcept; + + void __cdecl Release() noexcept; + + uint8_t* __cdecl GetBufferPointer() const noexcept { return m_buffer; } + + const uint8_t* __cdecl GetConstBufferPointer() const noexcept { return m_buffer; } + + size_t __cdecl GetBufferSize() const noexcept { return m_size; } + + HRESULT __cdecl Resize(size_t size) noexcept; + // Reallocate for a new size + + HRESULT __cdecl Trim(size_t size) noexcept; + // Shorten size without reallocation + + private: + uint8_t* m_buffer; + size_t m_size; + }; + + //--------------------------------------------------------------------------------- + // Image I/O + + // DDS operations + HRESULT __cdecl LoadFromDDSMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _In_ DDS_FLAGS flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl LoadFromDDSFile( + _In_z_ const wchar_t* szFile, + _In_ DDS_FLAGS flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image) noexcept; + + HRESULT __cdecl LoadFromDDSMemoryEx( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _In_ DDS_FLAGS flags, + _Out_opt_ TexMetadata* metadata, + _Out_opt_ DDSMetaData* ddPixelFormat, + _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl LoadFromDDSFileEx( + _In_z_ const wchar_t* szFile, + _In_ DDS_FLAGS flags, + _Out_opt_ TexMetadata* metadata, + _Out_opt_ DDSMetaData* ddPixelFormat, + _Out_ ScratchImage& image) noexcept; + + HRESULT __cdecl SaveToDDSMemory( + _In_ const Image& image, + _In_ DDS_FLAGS flags, + _Out_ Blob& blob) noexcept; + HRESULT __cdecl SaveToDDSMemory( + _In_reads_(nimages) const Image* images, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DDS_FLAGS flags, + _Out_ Blob& blob) noexcept; + + HRESULT __cdecl SaveToDDSFile(_In_ const Image& image, _In_ DDS_FLAGS flags, _In_z_ const wchar_t* szFile) noexcept; + HRESULT __cdecl SaveToDDSFile( + _In_reads_(nimages) const Image* images, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DDS_FLAGS flags, _In_z_ const wchar_t* szFile) noexcept; + + // HDR operations + HRESULT __cdecl LoadFromHDRMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl LoadFromHDRFile( + _In_z_ const wchar_t* szFile, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image) noexcept; + + HRESULT __cdecl SaveToHDRMemory(_In_ const Image& image, _Out_ Blob& blob) noexcept; + HRESULT __cdecl SaveToHDRFile(_In_ const Image& image, _In_z_ const wchar_t* szFile) noexcept; + + // TGA operations + HRESULT __cdecl LoadFromTGAMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _In_ TGA_FLAGS flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl LoadFromTGAFile( + _In_z_ const wchar_t* szFile, + _In_ TGA_FLAGS flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image) noexcept; + + HRESULT __cdecl SaveToTGAMemory(_In_ const Image& image, + _In_ TGA_FLAGS flags, + _Out_ Blob& blob, _In_opt_ const TexMetadata* metadata = nullptr) noexcept; + HRESULT __cdecl SaveToTGAFile(_In_ const Image& image, + _In_ TGA_FLAGS flags, + _In_z_ const wchar_t* szFile, _In_opt_ const TexMetadata* metadata = nullptr) noexcept; + + // WIC operations +#ifdef _WIN32 + HRESULT __cdecl LoadFromWICMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _In_ WIC_FLAGS flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image, + _In_ std::function getMQR = nullptr); + HRESULT __cdecl LoadFromWICFile( + _In_z_ const wchar_t* szFile, _In_ WIC_FLAGS flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image, + _In_ std::function getMQR = nullptr); + + HRESULT __cdecl SaveToWICMemory( + _In_ const Image& image, _In_ WIC_FLAGS flags, _In_ REFGUID guidContainerFormat, + _Out_ Blob& blob, _In_opt_ const GUID* targetFormat = nullptr, + _In_ std::function setCustomProps = nullptr); + HRESULT __cdecl SaveToWICMemory( + _In_count_(nimages) const Image* images, _In_ size_t nimages, + _In_ WIC_FLAGS flags, _In_ REFGUID guidContainerFormat, + _Out_ Blob& blob, _In_opt_ const GUID* targetFormat = nullptr, + _In_ std::function setCustomProps = nullptr); + + HRESULT __cdecl SaveToWICFile( + _In_ const Image& image, _In_ WIC_FLAGS flags, _In_ REFGUID guidContainerFormat, + _In_z_ const wchar_t* szFile, _In_opt_ const GUID* targetFormat = nullptr, + _In_ std::function setCustomProps = nullptr); + HRESULT __cdecl SaveToWICFile( + _In_count_(nimages) const Image* images, _In_ size_t nimages, + _In_ WIC_FLAGS flags, _In_ REFGUID guidContainerFormat, + _In_z_ const wchar_t* szFile, _In_opt_ const GUID* targetFormat = nullptr, + _In_ std::function setCustomProps = nullptr); +#endif // WIN32 + + // Compatability helpers + HRESULT __cdecl LoadFromTGAMemory( + _In_reads_bytes_(size) const uint8_t* pSource, _In_ size_t size, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl LoadFromTGAFile( + _In_z_ const wchar_t* szFile, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image) noexcept; + + HRESULT __cdecl SaveToTGAMemory(_In_ const Image& image, _Out_ Blob& blob, _In_opt_ const TexMetadata* metadata = nullptr) noexcept; + HRESULT __cdecl SaveToTGAFile(_In_ const Image& image, _In_z_ const wchar_t* szFile, _In_opt_ const TexMetadata* metadata = nullptr) noexcept; + + //--------------------------------------------------------------------------------- + // Texture conversion, resizing, mipmap generation, and block compression + + enum TEX_FR_FLAGS : uint32_t + { + TEX_FR_ROTATE0 = 0x0, + TEX_FR_ROTATE90 = 0x1, + TEX_FR_ROTATE180 = 0x2, + TEX_FR_ROTATE270 = 0x3, + TEX_FR_FLIP_HORIZONTAL = 0x08, + TEX_FR_FLIP_VERTICAL = 0x10, + }; + +#ifdef _WIN32 + HRESULT __cdecl FlipRotate(_In_ const Image& srcImage, _In_ TEX_FR_FLAGS flags, _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl FlipRotate( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ TEX_FR_FLAGS flags, _Out_ ScratchImage& result) noexcept; + // Flip and/or rotate image +#endif + + enum TEX_FILTER_FLAGS : uint32_t + { + TEX_FILTER_DEFAULT = 0, + + TEX_FILTER_WRAP_U = 0x1, + TEX_FILTER_WRAP_V = 0x2, + TEX_FILTER_WRAP_W = 0x4, + TEX_FILTER_WRAP = (TEX_FILTER_WRAP_U | TEX_FILTER_WRAP_V | TEX_FILTER_WRAP_W), + TEX_FILTER_MIRROR_U = 0x10, + TEX_FILTER_MIRROR_V = 0x20, + TEX_FILTER_MIRROR_W = 0x40, + TEX_FILTER_MIRROR = (TEX_FILTER_MIRROR_U | TEX_FILTER_MIRROR_V | TEX_FILTER_MIRROR_W), + // Wrap vs. Mirror vs. Clamp filtering options + + TEX_FILTER_SEPARATE_ALPHA = 0x100, + // Resize color and alpha channel independently + + TEX_FILTER_FLOAT_X2BIAS = 0x200, + // Enable *2 - 1 conversion cases for unorm<->float and positive-only float formats + + TEX_FILTER_RGB_COPY_RED = 0x1000, + TEX_FILTER_RGB_COPY_GREEN = 0x2000, + TEX_FILTER_RGB_COPY_BLUE = 0x4000, + TEX_FILTER_RGB_COPY_ALPHA = 0x8000, + // When converting RGB(A) to R, defaults to using grayscale. These flags indicate copying a specific channel instead + // When converting RGB(A) to RG, defaults to copying RED | GREEN. These flags control which channels are selected instead. + + TEX_FILTER_DITHER = 0x10000, + // Use ordered 4x4 dithering for any required conversions + TEX_FILTER_DITHER_DIFFUSION = 0x20000, + // Use error-diffusion dithering for any required conversions + + TEX_FILTER_POINT = 0x100000, + TEX_FILTER_LINEAR = 0x200000, + TEX_FILTER_CUBIC = 0x300000, + TEX_FILTER_BOX = 0x400000, + TEX_FILTER_FANT = 0x400000, // Equiv to Box filtering for mipmap generation + TEX_FILTER_TRIANGLE = 0x500000, + // Filtering mode to use for any required image resizing + + TEX_FILTER_SRGB_IN = 0x1000000, + TEX_FILTER_SRGB_OUT = 0x2000000, + TEX_FILTER_SRGB = (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT), + // sRGB <-> RGB for use in conversion operations + // if the input format type is IsSRGB(), then SRGB_IN is on by default + // if the output format type is IsSRGB(), then SRGB_OUT is on by default + + TEX_FILTER_FORCE_NON_WIC = 0x10000000, + // Forces use of the non-WIC path when both are an option + + TEX_FILTER_FORCE_WIC = 0x20000000, + // Forces use of the WIC path even when logic would have picked a non-WIC path when both are an option + }; + + constexpr uint32_t TEX_FILTER_DITHER_MASK = 0xF0000; + constexpr uint32_t TEX_FILTER_MODE_MASK = 0xF00000; + constexpr uint32_t TEX_FILTER_SRGB_MASK = 0xF000000; + + HRESULT __cdecl Resize( + _In_ const Image& srcImage, _In_ size_t width, _In_ size_t height, + _In_ TEX_FILTER_FLAGS filter, + _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl Resize( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ size_t width, _In_ size_t height, _In_ TEX_FILTER_FLAGS filter, _Out_ ScratchImage& result) noexcept; + // Resize the image to width x height. Defaults to Fant filtering. + // Note for a complex resize, the result will always have mipLevels == 1 + + constexpr float TEX_THRESHOLD_DEFAULT = 0.5f; + // Default value for alpha threshold used when converting to 1-bit alpha + + struct ConvertOptions + { + TEX_FILTER_FLAGS filter; + float threshold; + }; + + HRESULT __cdecl Convert( + _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ TEX_FILTER_FLAGS filter, _In_ float threshold, + _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl Convert( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _In_ TEX_FILTER_FLAGS filter, _In_ float threshold, _Out_ ScratchImage& result) noexcept; + + HRESULT __cdecl ConvertEx( + _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ const ConvertOptions& options, + _Out_ ScratchImage& image, + _In_ std::function statusCallBack = nullptr); + HRESULT __cdecl ConvertEx( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _In_ const ConvertOptions& options, _Out_ ScratchImage& result, + _In_ std::function statusCallBack = nullptr); + // Convert the image to a new format + + HRESULT __cdecl ConvertToSinglePlane(_In_ const Image& srcImage, _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl ConvertToSinglePlane( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _Out_ ScratchImage& image) noexcept; + // Converts the image from a planar format to an equivalent non-planar format + + HRESULT __cdecl GenerateMipMaps( + _In_ const Image& baseImage, _In_ TEX_FILTER_FLAGS filter, _In_ size_t levels, + _Inout_ ScratchImage& mipChain, _In_ bool allow1D = false) noexcept; + HRESULT __cdecl GenerateMipMaps( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ TEX_FILTER_FLAGS filter, _In_ size_t levels, _Inout_ ScratchImage& mipChain); + // levels of '0' indicates a full mipchain, otherwise is generates that number of total levels (including the source base image) + // Defaults to Fant filtering which is equivalent to a box filter + + HRESULT __cdecl GenerateMipMaps3D( + _In_reads_(depth) const Image* baseImages, _In_ size_t depth, _In_ TEX_FILTER_FLAGS filter, _In_ size_t levels, + _Out_ ScratchImage& mipChain) noexcept; + HRESULT __cdecl GenerateMipMaps3D( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ TEX_FILTER_FLAGS filter, _In_ size_t levels, _Out_ ScratchImage& mipChain); + // levels of '0' indicates a full mipchain, otherwise is generates that number of total levels (including the source base image) + // Defaults to Fant filtering which is equivalent to a box filter + + HRESULT __cdecl ScaleMipMapsAlphaForCoverage( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, _In_ size_t item, + _In_ float alphaReference, _Inout_ ScratchImage& mipChain) noexcept; + + + enum TEX_PMALPHA_FLAGS : uint32_t + { + TEX_PMALPHA_DEFAULT = 0, + + TEX_PMALPHA_IGNORE_SRGB = 0x1, + // ignores sRGB colorspace conversions + + TEX_PMALPHA_REVERSE = 0x2, + // converts from premultiplied alpha back to straight alpha + + TEX_PMALPHA_SRGB_IN = 0x1000000, + TEX_PMALPHA_SRGB_OUT = 0x2000000, + TEX_PMALPHA_SRGB = (TEX_PMALPHA_SRGB_IN | TEX_PMALPHA_SRGB_OUT), + // if the input format type is IsSRGB(), then SRGB_IN is on by default + // if the output format type is IsSRGB(), then SRGB_OUT is on by default + }; + + HRESULT __cdecl PremultiplyAlpha(_In_ const Image& srcImage, _In_ TEX_PMALPHA_FLAGS flags, _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl PremultiplyAlpha( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ TEX_PMALPHA_FLAGS flags, _Out_ ScratchImage& result) noexcept; + // Converts to/from a premultiplied alpha version of the texture + + enum TEX_COMPRESS_FLAGS : uint32_t + { + TEX_COMPRESS_DEFAULT = 0, + + TEX_COMPRESS_RGB_DITHER = 0x10000, + // Enables dithering RGB colors for BC1-3 compression + + TEX_COMPRESS_A_DITHER = 0x20000, + // Enables dithering alpha for BC1-3 compression + + TEX_COMPRESS_DITHER = 0x30000, + // Enables both RGB and alpha dithering for BC1-3 compression + + TEX_COMPRESS_UNIFORM = 0x40000, + // Uniform color weighting for BC1-3 compression; by default uses perceptual weighting + + TEX_COMPRESS_BC7_USE_3SUBSETS = 0x80000, + // Enables exhaustive search for BC7 compress for mode 0 and 2; by default skips trying these modes + + TEX_COMPRESS_BC7_QUICK = 0x100000, + // Minimal modes (usually mode 6) for BC7 compression + + TEX_COMPRESS_SRGB_IN = 0x1000000, + TEX_COMPRESS_SRGB_OUT = 0x2000000, + TEX_COMPRESS_SRGB = (TEX_COMPRESS_SRGB_IN | TEX_COMPRESS_SRGB_OUT), + // if the input format type is IsSRGB(), then SRGB_IN is on by default + // if the output format type is IsSRGB(), then SRGB_OUT is on by default + + TEX_COMPRESS_PARALLEL = 0x10000000, + // Compress is free to use multithreading to improve performance (by default it does not use multithreading) + }; + + constexpr float TEX_ALPHA_WEIGHT_DEFAULT = 1.0f; + // Default value for alpha weight used for GPU BC7 compression + + struct CompressOptions + { + TEX_COMPRESS_FLAGS flags; + float threshold; + float alphaWeight; + }; + + HRESULT __cdecl Compress( + _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ TEX_COMPRESS_FLAGS compress, _In_ float threshold, + _Out_ ScratchImage& cImage) noexcept; + HRESULT __cdecl Compress( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _In_ TEX_COMPRESS_FLAGS compress, _In_ float threshold, _Out_ ScratchImage& cImages) noexcept; + // Note that threshold is only used by BC1. TEX_THRESHOLD_DEFAULT is a typical value to use + + HRESULT __cdecl CompressEx( + _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ const CompressOptions& options, + _Out_ ScratchImage& cImage, + _In_ std::function statusCallBack = nullptr); + HRESULT __cdecl CompressEx( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _In_ const CompressOptions& options, _Out_ ScratchImage& cImages, + _In_ std::function statusCallBack = nullptr); + +#if defined(__d3d11_h__) || defined(__d3d11_x_h__) + HRESULT __cdecl Compress( + _In_ ID3D11Device* pDevice, _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ TEX_COMPRESS_FLAGS compress, + _In_ float alphaWeight, _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl Compress( + _In_ ID3D11Device* pDevice, _In_ const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _In_ TEX_COMPRESS_FLAGS compress, _In_ float alphaWeight, _Out_ ScratchImage& cImages) noexcept; + // DirectCompute-based compression (alphaWeight is only used by BC7. 1.0 is the typical value to use) + + HRESULT __cdecl CompressEx( + _In_ ID3D11Device* pDevice, _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ const CompressOptions& options, + _Out_ ScratchImage& image, + _In_ std::function statusCallBack = nullptr); + HRESULT __cdecl CompressEx( + _In_ ID3D11Device* pDevice, _In_ const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _In_ const CompressOptions& options, _Out_ ScratchImage& cImages, + _In_ std::function statusCallBack = nullptr); +#endif + + HRESULT __cdecl Decompress(_In_ const Image& cImage, _In_ DXGI_FORMAT format, _Out_ ScratchImage& image) noexcept; + HRESULT __cdecl Decompress( + _In_reads_(nimages) const Image* cImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _Out_ ScratchImage& images) noexcept; + + //--------------------------------------------------------------------------------- + // Normal map operations + + enum CNMAP_FLAGS : uint32_t + { + CNMAP_DEFAULT = 0, + + CNMAP_CHANNEL_RED = 0x1, + CNMAP_CHANNEL_GREEN = 0x2, + CNMAP_CHANNEL_BLUE = 0x3, + CNMAP_CHANNEL_ALPHA = 0x4, + CNMAP_CHANNEL_LUMINANCE = 0x5, + // Channel selection when evaluting color value for height + // Luminance is a combination of red, green, and blue + + CNMAP_MIRROR_U = 0x1000, + CNMAP_MIRROR_V = 0x2000, + CNMAP_MIRROR = 0x3000, + // Use mirror semantics for scanline references (defaults to wrap) + + CNMAP_INVERT_SIGN = 0x4000, + // Inverts normal sign + + CNMAP_COMPUTE_OCCLUSION = 0x8000, + // Computes a crude occlusion term stored in the alpha channel + }; + + HRESULT __cdecl ComputeNormalMap( + _In_ const Image& srcImage, _In_ CNMAP_FLAGS flags, _In_ float amplitude, + _In_ DXGI_FORMAT format, _Out_ ScratchImage& normalMap) noexcept; + HRESULT __cdecl ComputeNormalMap( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ CNMAP_FLAGS flags, _In_ float amplitude, _In_ DXGI_FORMAT format, _Out_ ScratchImage& normalMaps) noexcept; + + //--------------------------------------------------------------------------------- + // Misc image operations + + struct Rect + { + size_t x; + size_t y; + size_t w; + size_t h; + + Rect() = default; + Rect(size_t _x, size_t _y, size_t _w, size_t _h) noexcept : x(_x), y(_y), w(_w), h(_h) {} + }; + + HRESULT __cdecl CopyRectangle( + _In_ const Image& srcImage, _In_ const Rect& srcRect, _In_ const Image& dstImage, + _In_ TEX_FILTER_FLAGS filter, _In_ size_t xOffset, _In_ size_t yOffset) noexcept; + + enum CMSE_FLAGS : uint32_t + { + CMSE_DEFAULT = 0, + + CMSE_IMAGE1_SRGB = 0x1, + CMSE_IMAGE2_SRGB = 0x2, + // Indicates that image needs gamma correction before comparision + + CMSE_IGNORE_RED = 0x10, + CMSE_IGNORE_GREEN = 0x20, + CMSE_IGNORE_BLUE = 0x40, + CMSE_IGNORE_ALPHA = 0x80, + // Ignore the channel when computing MSE + + CMSE_IMAGE1_X2_BIAS = 0x100, + CMSE_IMAGE2_X2_BIAS = 0x200, + // Indicates that image should be scaled and biased before comparison (i.e. UNORM -> SNORM) + }; + + HRESULT __cdecl ComputeMSE(_In_ const Image& image1, _In_ const Image& image2, _Out_ float& mse, _Out_writes_opt_(4) float* mseV, _In_ CMSE_FLAGS flags = CMSE_DEFAULT) noexcept; + + HRESULT __cdecl EvaluateImage( + _In_ const Image& image, + _In_ std::function pixelFunc); + HRESULT __cdecl EvaluateImage( + _In_reads_(nimages) const Image* images, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ std::function pixelFunc); + + HRESULT __cdecl TransformImage( + _In_ const Image& image, + _In_ std::function pixelFunc, + ScratchImage& result); + HRESULT __cdecl TransformImage( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ std::function pixelFunc, + ScratchImage& result); + + //--------------------------------------------------------------------------------- + // WIC utility code +#ifdef _WIN32 + enum WICCodecs : uint32_t + { + WIC_CODEC_BMP = 1, // Windows Bitmap (.bmp) + WIC_CODEC_JPEG, // Joint Photographic Experts Group (.jpg, .jpeg) + WIC_CODEC_PNG, // Portable Network Graphics (.png) + WIC_CODEC_TIFF, // Tagged Image File Format (.tif, .tiff) + WIC_CODEC_GIF, // Graphics Interchange Format (.gif) + WIC_CODEC_WMP, // Windows Media Photo / HD Photo / JPEG XR (.hdp, .jxr, .wdp) + WIC_CODEC_ICO, // Windows Icon (.ico) + WIC_CODEC_HEIF, // High Efficiency Image File (.heif, .heic) + }; + + REFGUID __cdecl GetWICCodec(_In_ WICCodecs codec) noexcept; + + IWICImagingFactory* __cdecl GetWICFactory(bool& iswic2) noexcept; + void __cdecl SetWICFactory(_In_opt_ IWICImagingFactory* pWIC) noexcept; +#endif + + //--------------------------------------------------------------------------------- + // DDS helper functions + HRESULT __cdecl EncodeDDSHeader( + _In_ const TexMetadata& metadata, DDS_FLAGS flags, + _Out_writes_bytes_to_opt_(maxsize, required) uint8_t* pDestination, _In_ size_t maxsize, + _Out_ size_t& required) noexcept; + + //--------------------------------------------------------------------------------- + // Direct3D interop + + enum CREATETEX_FLAGS : uint32_t + { + CREATETEX_DEFAULT = 0, + CREATETEX_FORCE_SRGB = 0x1, + CREATETEX_IGNORE_SRGB = 0x2, + }; + + // Direct3D 11 functions +#if defined(__d3d11_h__) || defined(__d3d11_x_h__) + bool __cdecl IsSupportedTexture(_In_ ID3D11Device* pDevice, _In_ const TexMetadata& metadata) noexcept; + + HRESULT __cdecl CreateTexture( + _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _Outptr_ ID3D11Resource** ppResource) noexcept; + + HRESULT __cdecl CreateShaderResourceView( + _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _Outptr_ ID3D11ShaderResourceView** ppSRV) noexcept; + + HRESULT __cdecl CreateTextureEx( + _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ D3D11_USAGE usage, _In_ unsigned int bindFlags, _In_ unsigned int cpuAccessFlags, _In_ unsigned int miscFlags, _In_ CREATETEX_FLAGS flags, + _Outptr_ ID3D11Resource** ppResource) noexcept; + + HRESULT __cdecl CreateShaderResourceViewEx( + _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ D3D11_USAGE usage, _In_ unsigned int bindFlags, _In_ unsigned int cpuAccessFlags, _In_ unsigned int miscFlags, _In_ CREATETEX_FLAGS flags, + _Outptr_ ID3D11ShaderResourceView** ppSRV) noexcept; + + HRESULT __cdecl CaptureTexture(_In_ ID3D11Device* pDevice, _In_ ID3D11DeviceContext* pContext, _In_ ID3D11Resource* pSource, _Out_ ScratchImage& result) noexcept; +#endif + + // Direct3D 12 functions +#if defined(__d3d12_h__) || defined(__d3d12_x_h__) || defined(__XBOX_D3D12_X__) + bool __cdecl IsSupportedTexture(_In_ ID3D12Device* pDevice, _In_ const TexMetadata& metadata) noexcept; + + HRESULT __cdecl CreateTexture( + _In_ ID3D12Device* pDevice, _In_ const TexMetadata& metadata, + _Outptr_ ID3D12Resource** ppResource) noexcept; + + HRESULT __cdecl CreateTextureEx( + _In_ ID3D12Device* pDevice, _In_ const TexMetadata& metadata, + _In_ D3D12_RESOURCE_FLAGS resFlags, _In_ CREATETEX_FLAGS flags, + _Outptr_ ID3D12Resource** ppResource) noexcept; + + HRESULT __cdecl PrepareUpload( + _In_ ID3D12Device* pDevice, + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + std::vector& subresources); + + HRESULT __cdecl CaptureTexture( + _In_ ID3D12CommandQueue* pCommandQueue, _In_ ID3D12Resource* pSource, _In_ bool isCubeMap, + _Out_ ScratchImage& result, + _In_ D3D12_RESOURCE_STATES beforeState = D3D12_RESOURCE_STATE_RENDER_TARGET, + _In_ D3D12_RESOURCE_STATES afterState = D3D12_RESOURCE_STATE_RENDER_TARGET) noexcept; +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" +#pragma clang diagnostic ignored "-Wdeprecated-dynamic-exception-spec" +#pragma clang diagnostic ignored "-Wswitch-enum" +#endif + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4619 4616 4061) +#endif + +#include "DirectXTex.inl" + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +} // namespace diff --git a/external/DirectXTex/DirectXTex.inl b/external/DirectXTex/DirectXTex.inl new file mode 100644 index 00000000..49745aea --- /dev/null +++ b/external/DirectXTex/DirectXTex.inl @@ -0,0 +1,192 @@ +//------------------------------------------------------------------------------------- +// DirectXTex.inl +// +// DirectX Texture Library +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#pragma once + +//===================================================================================== +// Bitmask flags enumerator operators +//===================================================================================== +DEFINE_ENUM_FLAG_OPERATORS(CP_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(DDS_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(TGA_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(WIC_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(TEX_FR_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(TEX_FILTER_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(TEX_PMALPHA_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(TEX_COMPRESS_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(CNMAP_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(CMSE_FLAGS) +DEFINE_ENUM_FLAG_OPERATORS(CREATETEX_FLAGS) + +// WIC_FILTER modes match TEX_FILTER modes +constexpr WIC_FLAGS operator|(WIC_FLAGS a, TEX_FILTER_FLAGS b) { return static_cast(static_cast(a) | static_cast(b & TEX_FILTER_MODE_MASK)); } +constexpr WIC_FLAGS operator|(TEX_FILTER_FLAGS a, WIC_FLAGS b) { return static_cast(static_cast(a & TEX_FILTER_MODE_MASK) | static_cast(b)); } + +// TEX_PMALPHA_SRGB match TEX_FILTER_SRGB +constexpr TEX_PMALPHA_FLAGS operator|(TEX_PMALPHA_FLAGS a, TEX_FILTER_FLAGS b) { return static_cast(static_cast(a) | static_cast(b & TEX_FILTER_SRGB_MASK)); } +constexpr TEX_PMALPHA_FLAGS operator|(TEX_FILTER_FLAGS a, TEX_PMALPHA_FLAGS b) { return static_cast(static_cast(a & TEX_FILTER_SRGB_MASK) | static_cast(b)); } + +// TEX_COMPRESS_SRGB match TEX_FILTER_SRGB +constexpr TEX_COMPRESS_FLAGS operator|(TEX_COMPRESS_FLAGS a, TEX_FILTER_FLAGS b) { return static_cast(static_cast(a) | static_cast(b & TEX_FILTER_SRGB_MASK)); } +constexpr TEX_COMPRESS_FLAGS operator|(TEX_FILTER_FLAGS a, TEX_COMPRESS_FLAGS b) { return static_cast(static_cast(a & TEX_FILTER_SRGB_MASK) | static_cast(b)); } + + +//===================================================================================== +// DXGI Format Utilities +//===================================================================================== + +_Use_decl_annotations_ +constexpr bool __cdecl IsValid(DXGI_FORMAT fmt) noexcept +{ + return (static_cast(fmt) >= 1 && static_cast(fmt) <= 191); +} + +_Use_decl_annotations_ +inline bool __cdecl IsCompressed(DXGI_FORMAT fmt) noexcept +{ + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return true; + + default: + return false; + } +} + +_Use_decl_annotations_ +inline bool __cdecl IsPalettized(DXGI_FORMAT fmt) noexcept +{ + switch (fmt) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return true; + + default: + return false; + } +} + +_Use_decl_annotations_ +inline bool __cdecl IsSRGB(DXGI_FORMAT fmt) noexcept +{ + switch (fmt) + { + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return true; + + default: + return false; + } +} + + +//===================================================================================== +// Image I/O +//===================================================================================== +_Use_decl_annotations_ +inline HRESULT __cdecl SaveToDDSMemory(const Image& image, DDS_FLAGS flags, Blob& blob) noexcept +{ + TexMetadata mdata = {}; + mdata.width = image.width; + mdata.height = image.height; + mdata.depth = 1; + mdata.arraySize = 1; + mdata.mipLevels = 1; + mdata.format = image.format; + mdata.dimension = TEX_DIMENSION_TEXTURE2D; + + return SaveToDDSMemory(&image, 1, mdata, flags, blob); +} + +_Use_decl_annotations_ +inline HRESULT __cdecl SaveToDDSFile(const Image& image, DDS_FLAGS flags, const wchar_t* szFile) noexcept +{ + TexMetadata mdata = {}; + mdata.width = image.width; + mdata.height = image.height; + mdata.depth = 1; + mdata.arraySize = 1; + mdata.mipLevels = 1; + mdata.format = image.format; + mdata.dimension = TEX_DIMENSION_TEXTURE2D; + + return SaveToDDSFile(&image, 1, mdata, flags, szFile); +} + + +//===================================================================================== +// Compatability helpers +//===================================================================================== +_Use_decl_annotations_ +inline HRESULT __cdecl GetMetadataFromTGAMemory(const uint8_t* pSource, size_t size, TexMetadata& metadata) noexcept +{ + return GetMetadataFromTGAMemory(pSource, size, TGA_FLAGS_NONE, metadata); +} + +_Use_decl_annotations_ +inline HRESULT __cdecl GetMetadataFromTGAFile(const wchar_t* szFile, TexMetadata& metadata) noexcept +{ + return GetMetadataFromTGAFile(szFile, TGA_FLAGS_NONE, metadata); +} + +_Use_decl_annotations_ +inline HRESULT __cdecl LoadFromTGAMemory(const uint8_t* pSource, size_t size, TexMetadata* metadata, ScratchImage& image) noexcept +{ + return LoadFromTGAMemory(pSource, size, TGA_FLAGS_NONE, metadata, image); +} + +_Use_decl_annotations_ +inline HRESULT __cdecl LoadFromTGAFile(const wchar_t* szFile, TexMetadata* metadata, ScratchImage& image) noexcept +{ + return LoadFromTGAFile(szFile, TGA_FLAGS_NONE, metadata, image); +} + +_Use_decl_annotations_ +inline HRESULT __cdecl SaveToTGAMemory(const Image& image, Blob& blob, const TexMetadata* metadata) noexcept +{ + return SaveToTGAMemory(image, TGA_FLAGS_NONE, blob, metadata); +} + +_Use_decl_annotations_ +inline HRESULT __cdecl SaveToTGAFile(const Image& image, const wchar_t* szFile, const TexMetadata* metadata) noexcept +{ + return SaveToTGAFile(image, TGA_FLAGS_NONE, szFile, metadata); +} diff --git a/external/DirectXTex/DirectXTexCompress.cpp b/external/DirectXTex/DirectXTexCompress.cpp new file mode 100644 index 00000000..e2c17c52 --- /dev/null +++ b/external/DirectXTex/DirectXTexCompress.cpp @@ -0,0 +1,979 @@ +//------------------------------------------------------------------------------------- +// DirectXTexCompress.cpp +// +// DirectX Texture Library - Texture compression +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#ifdef _OPENMP +#include +#pragma warning(disable : 4616 6993) +#endif + +#include "BC.h" + +using namespace DirectX; +using namespace DirectX::Internal; + +namespace +{ + constexpr uint32_t GetBCFlags(_In_ TEX_COMPRESS_FLAGS compress) noexcept + { + static_assert(static_cast(TEX_COMPRESS_RGB_DITHER) == static_cast(BC_FLAGS_DITHER_RGB), "TEX_COMPRESS_* flags should match BC_FLAGS_*"); + static_assert(static_cast(TEX_COMPRESS_A_DITHER) == static_cast(BC_FLAGS_DITHER_A), "TEX_COMPRESS_* flags should match BC_FLAGS_*"); + static_assert(static_cast(TEX_COMPRESS_DITHER) == static_cast(BC_FLAGS_DITHER_RGB | BC_FLAGS_DITHER_A), "TEX_COMPRESS_* flags should match BC_FLAGS_*"); + static_assert(static_cast(TEX_COMPRESS_UNIFORM) == static_cast(BC_FLAGS_UNIFORM), "TEX_COMPRESS_* flags should match BC_FLAGS_*"); + static_assert(static_cast(TEX_COMPRESS_BC7_USE_3SUBSETS) == static_cast(BC_FLAGS_USE_3SUBSETS), "TEX_COMPRESS_* flags should match BC_FLAGS_*"); + static_assert(static_cast(TEX_COMPRESS_BC7_QUICK) == static_cast(BC_FLAGS_FORCE_BC7_MODE6), "TEX_COMPRESS_* flags should match BC_FLAGS_*"); + return (compress & (BC_FLAGS_DITHER_RGB | BC_FLAGS_DITHER_A | BC_FLAGS_UNIFORM | BC_FLAGS_USE_3SUBSETS | BC_FLAGS_FORCE_BC7_MODE6)); + } + + constexpr TEX_FILTER_FLAGS GetSRGBFlags(_In_ TEX_COMPRESS_FLAGS compress) noexcept + { + static_assert(TEX_FILTER_SRGB_IN == 0x1000000, "TEX_FILTER_SRGB flag values don't match TEX_FILTER_SRGB_MASK"); + static_assert(static_cast(TEX_COMPRESS_SRGB_IN) == static_cast(TEX_FILTER_SRGB_IN), "TEX_COMPRESS_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_COMPRESS_SRGB_OUT) == static_cast(TEX_FILTER_SRGB_OUT), "TEX_COMPRESS_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_COMPRESS_SRGB) == static_cast(TEX_FILTER_SRGB), "TEX_COMPRESS_SRGB* should match TEX_FILTER_SRGB*"); + return static_cast(compress & TEX_FILTER_SRGB_MASK); + } + + inline bool DetermineEncoderSettings(_In_ DXGI_FORMAT format, _Out_ BC_ENCODE& pfEncode, _Out_ size_t& blocksize, _Out_ TEX_FILTER_FLAGS& cflags) noexcept + { + switch (format) + { + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: pfEncode = nullptr; blocksize = 8; cflags = TEX_FILTER_DEFAULT; break; + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: pfEncode = D3DXEncodeBC2; blocksize = 16; cflags = TEX_FILTER_DEFAULT; break; + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: pfEncode = D3DXEncodeBC3; blocksize = 16; cflags = TEX_FILTER_DEFAULT; break; + case DXGI_FORMAT_BC4_UNORM: pfEncode = D3DXEncodeBC4U; blocksize = 8; cflags = TEX_FILTER_RGB_COPY_RED; break; + case DXGI_FORMAT_BC4_SNORM: pfEncode = D3DXEncodeBC4S; blocksize = 8; cflags = TEX_FILTER_RGB_COPY_RED; break; + case DXGI_FORMAT_BC5_UNORM: pfEncode = D3DXEncodeBC5U; blocksize = 16; cflags = TEX_FILTER_RGB_COPY_RED | TEX_FILTER_RGB_COPY_GREEN; break; + case DXGI_FORMAT_BC5_SNORM: pfEncode = D3DXEncodeBC5S; blocksize = 16; cflags = TEX_FILTER_RGB_COPY_RED | TEX_FILTER_RGB_COPY_GREEN; break; + case DXGI_FORMAT_BC6H_UF16: pfEncode = D3DXEncodeBC6HU; blocksize = 16; cflags = TEX_FILTER_DEFAULT; break; + case DXGI_FORMAT_BC6H_SF16: pfEncode = D3DXEncodeBC6HS; blocksize = 16; cflags = TEX_FILTER_DEFAULT; break; + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: pfEncode = D3DXEncodeBC7; blocksize = 16; cflags = TEX_FILTER_DEFAULT; break; + default: pfEncode = nullptr; blocksize = 0; cflags = TEX_FILTER_DEFAULT; return false; + } + + return true; + } + + + //------------------------------------------------------------------------------------- + HRESULT CompressBC( + const Image& image, + const Image& result, + uint32_t bcflags, + TEX_FILTER_FLAGS srgb, + float threshold, + const std::function& statusCallback) noexcept + { + if (!image.pixels || !result.pixels) + return E_POINTER; + + assert(image.width == result.width); + assert(image.height == result.height); + + const DXGI_FORMAT format = image.format; + size_t sbpp = BitsPerPixel(format); + if (!sbpp) + return E_FAIL; + + if (sbpp < 8) + { + // We don't support compressing from monochrome (DXGI_FORMAT_R1_UNORM) + return HRESULT_E_NOT_SUPPORTED; + } + + // Round to bytes + sbpp = (sbpp + 7) / 8; + + uint8_t *pDest = result.pixels; + + // Determine BC format encoder + BC_ENCODE pfEncode; + size_t blocksize; + TEX_FILTER_FLAGS cflags; + if (!DetermineEncoderSettings(result.format, pfEncode, blocksize, cflags)) + return HRESULT_E_NOT_SUPPORTED; + + XM_ALIGNED_DATA(16) XMVECTOR temp[16]; + const uint8_t *pSrc = image.pixels; + const uint8_t *pEnd = image.pixels + image.slicePitch; + const size_t rowPitch = image.rowPitch; + for (size_t h = 0; h < image.height; h += 4) + { + if (statusCallback) + { + if (!statusCallback(h, image.height)) + { + return E_ABORT; + } + } + + const uint8_t *sptr = pSrc; + uint8_t* dptr = pDest; + const size_t ph = std::min(4, image.height - h); + size_t w = 0; + for (size_t count = 0; (count < result.rowPitch) && (w < image.width); count += blocksize, w += 4) + { + const size_t pw = std::min(4, image.width - w); + assert(pw > 0 && ph > 0); + + const ptrdiff_t bytesLeft = pEnd - sptr; + assert(bytesLeft > 0); + size_t bytesToRead = std::min(rowPitch, static_cast(bytesLeft)); + if (!LoadScanline(&temp[0], pw, sptr, bytesToRead, format)) + return E_FAIL; + + if (ph > 1) + { + bytesToRead = std::min(rowPitch, static_cast(bytesLeft) - rowPitch); + if (!LoadScanline(&temp[4], pw, sptr + rowPitch, bytesToRead, format)) + return E_FAIL; + + if (ph > 2) + { + bytesToRead = std::min(rowPitch, static_cast(bytesLeft) - rowPitch * 2); + if (!LoadScanline(&temp[8], pw, sptr + rowPitch * 2, bytesToRead, format)) + return E_FAIL; + + if (ph > 3) + { + bytesToRead = std::min(rowPitch, static_cast(bytesLeft) - rowPitch * 3); + if (!LoadScanline(&temp[12], pw, sptr + rowPitch * 3, bytesToRead, format)) + return E_FAIL; + } + } + } + + if (pw != 4 || ph != 4) + { + // Replicate pixels for partial block + static const size_t uSrc[] = { 0, 0, 0, 1 }; + + if (pw < 4) + { + for (size_t t = 0; t < ph && t < 4; ++t) + { + for (size_t s = pw; s < 4; ++s) + { + #pragma prefast(suppress: 26000, "PREFAST false positive") + temp[(t << 2) | s] = temp[(t << 2) | uSrc[s]]; + } + } + } + + if (ph < 4) + { + for (size_t t = ph; t < 4; ++t) + { + for (size_t s = 0; s < 4; ++s) + { + #pragma prefast(suppress: 26000, "PREFAST false positive") + temp[(t << 2) | s] = temp[(uSrc[t] << 2) | s]; + } + } + } + } + + ConvertScanline(temp, 16, result.format, format, cflags | srgb); + + if (pfEncode) + pfEncode(dptr, temp, bcflags); + else + D3DXEncodeBC1(dptr, temp, threshold, bcflags); + + sptr += sbpp * 4; + dptr += blocksize; + } + + pSrc += rowPitch * 4; + pDest += result.rowPitch; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- +#ifdef _OPENMP + HRESULT CompressBC_Parallel( + const Image& image, + const Image& result, + uint32_t bcflags, + TEX_FILTER_FLAGS srgb, + float threshold, + const std::function& statusCallback) noexcept + { + if (!image.pixels || !result.pixels) + return E_POINTER; + + assert(image.width == result.width); + assert(image.height == result.height); + + const DXGI_FORMAT format = image.format; + size_t sbpp = BitsPerPixel(format); + if (!sbpp) + return E_FAIL; + + if (sbpp < 8) + { + // We don't support compressing from monochrome (DXGI_FORMAT_R1_UNORM) + return HRESULT_E_NOT_SUPPORTED; + } + + // Round to bytes + sbpp = (sbpp + 7) / 8; + + const uint8_t *pEnd = image.pixels + image.slicePitch; + + // Determine BC format encoder + BC_ENCODE pfEncode; + size_t blocksize; + TEX_FILTER_FLAGS cflags; + if (!DetermineEncoderSettings(result.format, pfEncode, blocksize, cflags)) + return HRESULT_E_NOT_SUPPORTED; + + // Refactored version of loop to support parallel independance + const size_t nBlocks = std::max(1, (image.width + 3) / 4) * std::max(1, (image.height + 3) / 4); + + bool fail = false; + + size_t progress = 0; + bool abort = false; + + const size_t progressTotal = std::max(1, (image.height + 3) / 4); + +#pragma omp parallel for shared(progress) + for (int nb = 0; nb < static_cast(nBlocks); ++nb) + { +#pragma omp flush (abort) + if (abort) + { + // Short circuit the loop body if an abort is requested. + // OpenMP 2.0 does not support cancellation of a 'parallel for' loop. + continue; + } + + const int nbWidth = std::max(1, int((image.width + 3) / 4)); + + int y = nb / nbWidth; + const int x = (nb - (y*nbWidth)) * 4; + y *= 4; + + assert((x >= 0) && (x < int(image.width))); + assert((y >= 0) && (y < int(image.height))); + + const size_t rowPitch = image.rowPitch; + const uint8_t *pSrc = image.pixels + (size_t(y)*rowPitch) + (size_t(x)*sbpp); + + uint8_t *pDest = result.pixels + (size_t(nb)*blocksize); + + const size_t ph = std::min(4, image.height - size_t(y)); + const size_t pw = std::min(4, image.width - size_t(x)); + assert(pw > 0 && ph > 0); + + const ptrdiff_t bytesLeft = pEnd - pSrc; + assert(bytesLeft > 0); + size_t bytesToRead = std::min(rowPitch, size_t(bytesLeft)); + + XM_ALIGNED_DATA(16) XMVECTOR temp[16]; + if (!LoadScanline(&temp[0], pw, pSrc, bytesToRead, format)) + fail = true; + + if (ph > 1) + { + bytesToRead = std::min(rowPitch, size_t(bytesLeft) - rowPitch); + if (!LoadScanline(&temp[4], pw, pSrc + rowPitch, bytesToRead, format)) + fail = true; + + if (ph > 2) + { + bytesToRead = std::min(rowPitch, size_t(bytesLeft) - rowPitch * 2); + if (!LoadScanline(&temp[8], pw, pSrc + rowPitch * 2, bytesToRead, format)) + fail = true; + + if (ph > 3) + { + bytesToRead = std::min(rowPitch, size_t(bytesLeft) - rowPitch * 3); + if (!LoadScanline(&temp[12], pw, pSrc + rowPitch * 3, bytesToRead, format)) + fail = true; + } + } + } + + if (pw != 4 || ph != 4) + { + // Replicate pixels for partial block + static const size_t uSrc[] = { 0, 0, 0, 1 }; + + if (pw < 4) + { + for (size_t t = 0; t < ph && t < 4; ++t) + { + for (size_t s = pw; s < 4; ++s) + { + temp[(t << 2) | s] = temp[(t << 2) | uSrc[s]]; + } + } + } + + if (ph < 4) + { + for (size_t t = ph; t < 4; ++t) + { + for (size_t s = 0; s < 4; ++s) + { + temp[(t << 2) | s] = temp[(uSrc[t] << 2) | s]; + } + } + } + } + + ConvertScanline(temp, 16, result.format, format, cflags | srgb); + + if (pfEncode) + pfEncode(pDest, temp, bcflags); + else + D3DXEncodeBC1(pDest, temp, threshold, bcflags); + + // Report progress when a new row is reached. + if (x == 0 && statusCallback) + { +#pragma omp atomic + progress += 4; + + if (!statusCallback(progress, progressTotal)) + { + abort = true; +#pragma omp flush (abort) + } + } + } + + if (abort) + { + return E_ABORT; + } + else + { + return (fail) ? E_FAIL : S_OK; + } + } +#endif // _OPENMP + + + //------------------------------------------------------------------------------------- + DXGI_FORMAT DefaultDecompress(_In_ DXGI_FORMAT format) noexcept + { + switch (format) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + return DXGI_FORMAT_R8_UNORM; + + case DXGI_FORMAT_BC4_SNORM: + return DXGI_FORMAT_R8_SNORM; + + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + return DXGI_FORMAT_R8G8_UNORM; + + case DXGI_FORMAT_BC5_SNORM: + return DXGI_FORMAT_R8G8_SNORM; + + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + // We could use DXGI_FORMAT_R32G32B32_FLOAT here since BC6H is always Alpha 1.0, + // but this format is more supported by viewers + return DXGI_FORMAT_R32G32B32A32_FLOAT; + + default: + return DXGI_FORMAT_UNKNOWN; + } + } + + + //------------------------------------------------------------------------------------- + HRESULT DecompressBC(_In_ const Image& cImage, _In_ const Image& result) noexcept + { + if (!cImage.pixels || !result.pixels) + return E_POINTER; + + assert(cImage.width == result.width); + assert(cImage.height == result.height); + + const DXGI_FORMAT format = result.format; + size_t dbpp = BitsPerPixel(format); + if (!dbpp) + return E_FAIL; + + if (dbpp < 8) + { + // We don't support decompressing to monochrome (DXGI_FORMAT_R1_UNORM) + return HRESULT_E_NOT_SUPPORTED; + } + + // Round to bytes + dbpp = (dbpp + 7) / 8; + + uint8_t *pDest = result.pixels; + if (!pDest) + return E_POINTER; + + // Promote "typeless" BC formats + DXGI_FORMAT cformat; + switch (cImage.format) + { + case DXGI_FORMAT_BC1_TYPELESS: cformat = DXGI_FORMAT_BC1_UNORM; break; + case DXGI_FORMAT_BC2_TYPELESS: cformat = DXGI_FORMAT_BC2_UNORM; break; + case DXGI_FORMAT_BC3_TYPELESS: cformat = DXGI_FORMAT_BC3_UNORM; break; + case DXGI_FORMAT_BC4_TYPELESS: cformat = DXGI_FORMAT_BC4_UNORM; break; + case DXGI_FORMAT_BC5_TYPELESS: cformat = DXGI_FORMAT_BC5_UNORM; break; + case DXGI_FORMAT_BC6H_TYPELESS: cformat = DXGI_FORMAT_BC6H_UF16; break; + case DXGI_FORMAT_BC7_TYPELESS: cformat = DXGI_FORMAT_BC7_UNORM; break; + default: cformat = cImage.format; break; + } + + // Determine BC format decoder + BC_DECODE pfDecode; + size_t sbpp; + switch (cformat) + { + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: pfDecode = D3DXDecodeBC1; sbpp = 8; break; + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: pfDecode = D3DXDecodeBC2; sbpp = 16; break; + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: pfDecode = D3DXDecodeBC3; sbpp = 16; break; + case DXGI_FORMAT_BC4_UNORM: pfDecode = D3DXDecodeBC4U; sbpp = 8; break; + case DXGI_FORMAT_BC4_SNORM: pfDecode = D3DXDecodeBC4S; sbpp = 8; break; + case DXGI_FORMAT_BC5_UNORM: pfDecode = D3DXDecodeBC5U; sbpp = 16; break; + case DXGI_FORMAT_BC5_SNORM: pfDecode = D3DXDecodeBC5S; sbpp = 16; break; + case DXGI_FORMAT_BC6H_UF16: pfDecode = D3DXDecodeBC6HU; sbpp = 16; break; + case DXGI_FORMAT_BC6H_SF16: pfDecode = D3DXDecodeBC6HS; sbpp = 16; break; + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: pfDecode = D3DXDecodeBC7; sbpp = 16; break; + default: + return HRESULT_E_NOT_SUPPORTED; + } + + XM_ALIGNED_DATA(16) XMVECTOR temp[16]; + const uint8_t *pSrc = cImage.pixels; + const size_t rowPitch = result.rowPitch; + for (size_t h = 0; h < cImage.height; h += 4) + { + const uint8_t *sptr = pSrc; + uint8_t* dptr = pDest; + const size_t ph = std::min(4, cImage.height - h); + size_t w = 0; + for (size_t count = 0; (count < cImage.rowPitch) && (w < cImage.width); count += sbpp, w += 4) + { + pfDecode(temp, sptr); + ConvertScanline(temp, 16, format, cformat, TEX_FILTER_DEFAULT); + + const size_t pw = std::min(4, cImage.width - w); + assert(pw > 0 && ph > 0); + + if (!StoreScanline(dptr, rowPitch, format, &temp[0], pw)) + return E_FAIL; + + if (ph > 1) + { + if (!StoreScanline(dptr + rowPitch, rowPitch, format, &temp[4], pw)) + return E_FAIL; + + if (ph > 2) + { + if (!StoreScanline(dptr + rowPitch * 2, rowPitch, format, &temp[8], pw)) + return E_FAIL; + + if (ph > 3) + { + if (!StoreScanline(dptr + rowPitch * 3, rowPitch, format, &temp[12], pw)) + return E_FAIL; + } + } + } + + sptr += sbpp; + dptr += dbpp * 4; + } + + pSrc += cImage.rowPitch; + pDest += rowPitch * 4; + } + + return S_OK; + } +} + +//------------------------------------------------------------------------------------- +bool DirectX::Internal::IsAlphaAllOpaqueBC(_In_ const Image& cImage) noexcept +{ + if (!cImage.pixels) + return false; + + // Promote "typeless" BC formats + DXGI_FORMAT cformat; + switch (cImage.format) + { + case DXGI_FORMAT_BC1_TYPELESS: cformat = DXGI_FORMAT_BC1_UNORM; break; + case DXGI_FORMAT_BC2_TYPELESS: cformat = DXGI_FORMAT_BC2_UNORM; break; + case DXGI_FORMAT_BC3_TYPELESS: cformat = DXGI_FORMAT_BC3_UNORM; break; + case DXGI_FORMAT_BC7_TYPELESS: cformat = DXGI_FORMAT_BC7_UNORM; break; + default: cformat = cImage.format; break; + } + + // Determine BC format decoder + BC_DECODE pfDecode; + size_t sbpp; + switch (cformat) + { + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: pfDecode = D3DXDecodeBC1; sbpp = 8; break; + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: pfDecode = D3DXDecodeBC2; sbpp = 16; break; + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: pfDecode = D3DXDecodeBC3; sbpp = 16; break; + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: pfDecode = D3DXDecodeBC7; sbpp = 16; break; + default: + // BC4, BC5, and BC6 don't have alpha channels + return false; + } + + // Scan blocks for non-opaque alpha + static const XMVECTORF32 threshold = { { { 0.99f, 0.99f, 0.99f, 0.99f } } }; + + XM_ALIGNED_DATA(16) XMVECTOR temp[16]; + const uint8_t* pPixels = cImage.pixels; + for (size_t h = 0; h < cImage.height; h += 4) + { + const uint8_t* ptr = pPixels; + const size_t ph = std::min(4, cImage.height - h); + size_t w = 0; + for (size_t count = 0; (count < cImage.rowPitch) && (w < cImage.width); count += sbpp, w += 4) + { + pfDecode(temp, ptr); + + const size_t pw = std::min(4, cImage.width - w); + assert(pw > 0 && ph > 0); + + if (pw == 4 && ph == 4) + { + // Full blocks + for (size_t j = 0; j < 16; ++j) + { + const XMVECTOR alpha = XMVectorSplatW(temp[j]); + if (XMVector4Less(alpha, threshold)) + return false; + } + } + else + { + // Handle partial blocks + for (size_t y = 0; y < ph; ++y) + { + for (size_t x = 0; x < pw; ++x) + { + const XMVECTOR alpha = XMVectorSplatW(temp[y * 4 + x]); + if (XMVector4Less(alpha, threshold)) + return false; + } + } + } + + ptr += sbpp; + } + + pPixels += cImage.rowPitch; + } + + return true; +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Compress( + const Image& srcImage, + DXGI_FORMAT format, + TEX_COMPRESS_FLAGS compress, + float threshold, + ScratchImage& image) noexcept +{ + CompressOptions options = {}; + options.flags = compress; + options.threshold = threshold; + + return CompressEx(srcImage, format, options, image, nullptr); +} + +_Use_decl_annotations_ +HRESULT DirectX::Compress( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + DXGI_FORMAT format, + TEX_COMPRESS_FLAGS compress, + float threshold, + ScratchImage& cImages) noexcept +{ + CompressOptions options = {}; + options.flags = compress; + options.threshold = threshold; + + return CompressEx(srcImages, nimages, metadata, format, options, cImages, nullptr); +} + +_Use_decl_annotations_ +HRESULT DirectX::CompressEx( + const Image& srcImage, + DXGI_FORMAT format, + const CompressOptions& options, + ScratchImage& image, + std::function statusCallback) +{ + if (IsCompressed(srcImage.format) || !IsCompressed(format)) + return E_INVALIDARG; + + if (IsTypeless(format) + || IsTypeless(srcImage.format) || IsPlanar(srcImage.format) || IsPalettized(srcImage.format)) + return HRESULT_E_NOT_SUPPORTED; + + // Create compressed image + HRESULT hr = image.Initialize2D(format, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + if (statusCallback) + { + if (!statusCallback(0, img->height)) + { + image.Release(); + return E_ABORT; + } + } + + // Compress single image + if (options.flags & TEX_COMPRESS_PARALLEL) + { + #ifndef _OPENMP + hr = E_NOTIMPL; + #else + hr = CompressBC_Parallel(srcImage, *img, GetBCFlags(options.flags), GetSRGBFlags(options.flags), options.threshold, statusCallback); + #endif // _OPENMP + } + else + { + hr = CompressBC(srcImage, *img, GetBCFlags(options.flags), GetSRGBFlags(options.flags), options.threshold, statusCallback); + } + + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + if (statusCallback) + { + if (!statusCallback(img->height, img->height)) + { + image.Release(); + return E_ABORT; + } + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::CompressEx( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + DXGI_FORMAT format, + const CompressOptions& options, + ScratchImage& cImages, + std::function statusCallback) +{ + if (!srcImages || !nimages) + return E_INVALIDARG; + + if (IsCompressed(metadata.format) || !IsCompressed(format)) + return E_INVALIDARG; + + if (IsTypeless(format) + || IsTypeless(metadata.format) || IsPlanar(metadata.format) || IsPalettized(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + cImages.Release(); + + if (statusCallback + && nimages == 1 + && !metadata.IsVolumemap() + && metadata.mipLevels == 1 + && metadata.arraySize == 1) + { + // If progress reporting is requested when compressing a single 1D or 2D image, call + // the CompressEx overload that takes a single image. + // This provides a better user experience as progress will be reported as the image + // is being processed, instead of after processing has been completed. + return CompressEx(srcImages[0], format, options, cImages, statusCallback); + } + + TexMetadata mdata2 = metadata; + mdata2.format = format; + HRESULT hr = cImages.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + if (nimages != cImages.GetImageCount()) + { + cImages.Release(); + return E_FAIL; + } + + const Image* dest = cImages.GetImages(); + if (!dest) + { + cImages.Release(); + return E_POINTER; + } + + if (statusCallback) + { + if (!statusCallback(0, nimages)) + { + cImages.Release(); + return E_ABORT; + } + } + + for (size_t index = 0; index < nimages; ++index) + { + assert(dest[index].format == format); + + const Image& src = srcImages[index]; + + if (src.width != dest[index].width || src.height != dest[index].height) + { + cImages.Release(); + return E_FAIL; + } + + if (options.flags & TEX_COMPRESS_PARALLEL) + { + #ifndef _OPENMP + hr = E_NOTIMPL; + #else + hr = CompressBC_Parallel(src, dest[index], GetBCFlags(options.flags), GetSRGBFlags(options.flags), options.threshold, nullptr); + #endif // _OPENMP + } + else + { + hr = CompressBC(src, dest[index], GetBCFlags(options.flags), GetSRGBFlags(options.flags), options.threshold, nullptr); + } + + if (FAILED(hr)) + { + cImages.Release(); + return hr; + } + + if (statusCallback) + { + if (!statusCallback(index, nimages)) + { + cImages.Release(); + return E_ABORT; + } + } + } + + if (statusCallback) + { + if (!statusCallback(nimages, nimages)) + { + cImages.Release(); + return E_ABORT; + } + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Decompression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Decompress( + const Image& cImage, + DXGI_FORMAT format, + ScratchImage& image) noexcept +{ + if (!IsCompressed(cImage.format) || IsCompressed(format)) + return E_INVALIDARG; + + if (format == DXGI_FORMAT_UNKNOWN) + { + // Pick a default decompressed format based on BC input format + format = DefaultDecompress(cImage.format); + if (format == DXGI_FORMAT_UNKNOWN) + { + // Input is not a compressed format + return E_INVALIDARG; + } + } + else + { + if (!IsValid(format)) + return E_INVALIDARG; + + if (IsTypeless(format) || IsPlanar(format) || IsPalettized(format)) + return HRESULT_E_NOT_SUPPORTED; + } + + // Create decompressed image + HRESULT hr = image.Initialize2D(format, cImage.width, cImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + // Decompress single image + hr = DecompressBC(cImage, *img); + if (FAILED(hr)) + image.Release(); + + return hr; +} + +_Use_decl_annotations_ +HRESULT DirectX::Decompress( + const Image* cImages, + size_t nimages, + const TexMetadata& metadata, + DXGI_FORMAT format, + ScratchImage& images) noexcept +{ + if (!cImages || !nimages) + return E_INVALIDARG; + + if (!IsCompressed(metadata.format) || IsCompressed(format)) + return E_INVALIDARG; + + if (format == DXGI_FORMAT_UNKNOWN) + { + // Pick a default decompressed format based on BC input format + format = DefaultDecompress(cImages[0].format); + if (format == DXGI_FORMAT_UNKNOWN) + { + // Input is not a compressed format + return E_FAIL; + } + } + else + { + if (!IsValid(format)) + return E_INVALIDARG; + + if (IsTypeless(format) || IsPlanar(format) || IsPalettized(format)) + return HRESULT_E_NOT_SUPPORTED; + } + + images.Release(); + + TexMetadata mdata2 = metadata; + mdata2.format = format; + HRESULT hr = images.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + if (nimages != images.GetImageCount()) + { + images.Release(); + return E_FAIL; + } + + const Image* dest = images.GetImages(); + if (!dest) + { + images.Release(); + return E_POINTER; + } + + for (size_t index = 0; index < nimages; ++index) + { + assert(dest[index].format == format); + + const Image& src = cImages[index]; + if (!IsCompressed(src.format)) + { + images.Release(); + return E_FAIL; + } + + if (src.width != dest[index].width || src.height != dest[index].height) + { + images.Release(); + return E_FAIL; + } + + hr = DecompressBC(src, dest[index]); + if (FAILED(hr)) + { + images.Release(); + return hr; + } + } + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexCompressGPU.cpp b/external/DirectXTex/DirectXTexCompressGPU.cpp new file mode 100644 index 00000000..69195562 --- /dev/null +++ b/external/DirectXTex/DirectXTexCompressGPU.cpp @@ -0,0 +1,521 @@ +//------------------------------------------------------------------------------------- +// DirectXTexCompressGPU.cpp +// +// DirectX Texture Library - DirectCompute-based texture compression +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#include "BCDirectCompute.h" + +using namespace DirectX; +using namespace DirectX::Internal; + +namespace +{ + constexpr TEX_FILTER_FLAGS GetSRGBFlags(_In_ TEX_COMPRESS_FLAGS compress) noexcept + { + static_assert(TEX_FILTER_SRGB_IN == 0x1000000, "TEX_FILTER_SRGB flag values don't match TEX_FILTER_SRGB_MASK"); + static_assert(static_cast(TEX_COMPRESS_SRGB_IN) == static_cast(TEX_FILTER_SRGB_IN), "TEX_COMPRESS_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_COMPRESS_SRGB_OUT) == static_cast(TEX_FILTER_SRGB_OUT), "TEX_COMPRESS_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_COMPRESS_SRGB) == static_cast(TEX_FILTER_SRGB), "TEX_COMPRESS_SRGB* should match TEX_FILTER_SRGB*"); + return static_cast(compress & TEX_FILTER_SRGB_MASK); + } + + + //------------------------------------------------------------------------------------- + // Converts to R8G8B8A8_UNORM or R8G8B8A8_UNORM_SRGB doing any conversion logic needed + //------------------------------------------------------------------------------------- + HRESULT ConvertToRGBA32( + const Image& srcImage, + ScratchImage& image, + bool srgb, + TEX_FILTER_FLAGS filter) noexcept + { + if (!srcImage.pixels) + return E_POINTER; + + const DXGI_FORMAT format = srgb ? DXGI_FORMAT_R8G8B8A8_UNORM_SRGB : DXGI_FORMAT_R8G8B8A8_UNORM; + + HRESULT hr = image.Initialize2D(format, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + uint8_t* pDest = img->pixels; + if (!pDest) + { + image.Release(); + return E_POINTER; + } + + auto scanline = make_AlignedArrayXMVECTOR(srcImage.width); + if (!scanline) + { + image.Release(); + return E_OUTOFMEMORY; + } + + const uint8_t *pSrc = srcImage.pixels; + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanline(scanline.get(), srcImage.width, pSrc, srcImage.rowPitch, srcImage.format)) + { + image.Release(); + return E_FAIL; + } + + ConvertScanline(scanline.get(), srcImage.width, format, srcImage.format, filter); + + if (!StoreScanline(pDest, img->rowPitch, format, scanline.get(), srcImage.width)) + { + image.Release(); + return E_FAIL; + } + + pSrc += srcImage.rowPitch; + pDest += img->rowPitch; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Converts to DXGI_FORMAT_R32G32B32A32_FLOAT doing any conversion logic needed + //------------------------------------------------------------------------------------- + HRESULT ConvertToRGBAF32( + const Image& srcImage, + ScratchImage& image, + TEX_FILTER_FLAGS filter) noexcept + { + if (!srcImage.pixels) + return E_POINTER; + + HRESULT hr = image.Initialize2D(DXGI_FORMAT_R32G32B32A32_FLOAT, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + uint8_t* pDest = img->pixels; + if (!pDest) + { + image.Release(); + return E_POINTER; + } + + const uint8_t *pSrc = srcImage.pixels; + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanline(reinterpret_cast(pDest), srcImage.width, pSrc, srcImage.rowPitch, srcImage.format)) + { + image.Release(); + return E_FAIL; + } + + ConvertScanline(reinterpret_cast(pDest), srcImage.width, DXGI_FORMAT_R32G32B32A32_FLOAT, srcImage.format, filter); + + pSrc += srcImage.rowPitch; + pDest += img->rowPitch; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Compress using GPU, converting to the proper input format for the shader if needed + //------------------------------------------------------------------------------------- + inline HRESULT GPUCompress( + _In_ GPUCompressBC* gpubc, + const Image& srcImage, + const Image& destImage, + TEX_COMPRESS_FLAGS compress) + { + if (!gpubc) + return E_POINTER; + + assert(srcImage.pixels && destImage.pixels); + + DXGI_FORMAT tformat = gpubc->GetSourceFormat(); + if (compress & TEX_COMPRESS_SRGB_OUT) + { + tformat = MakeSRGB(tformat); + } + const DXGI_FORMAT sformat = (compress & TEX_COMPRESS_SRGB_IN) ? MakeSRGB(srcImage.format) : srcImage.format; + + if (sformat == tformat) + { + // Input is already in our required source format + return gpubc->Compress(srcImage, destImage); + } + else + { + // Convert format and then use as the source image + ScratchImage image; + HRESULT hr = E_UNEXPECTED; + + auto const srgb = GetSRGBFlags(compress); + + switch (tformat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + hr = ConvertToRGBA32(srcImage, image, false, srgb); + break; + + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + hr = ConvertToRGBA32(srcImage, image, true, srgb); + break; + + case DXGI_FORMAT_R32G32B32A32_FLOAT: + hr = ConvertToRGBAF32(srcImage, image, srgb); + break; + + default: + break; + } + + if (FAILED(hr)) + return hr; + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + return E_POINTER; + + return gpubc->Compress(*img, destImage); + } + } +}; + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Compression +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Compress( + ID3D11Device* pDevice, + const Image& srcImage, + DXGI_FORMAT format, + TEX_COMPRESS_FLAGS compress, + float alphaWeight, + ScratchImage& image) noexcept +{ + CompressOptions options = {}; + options.flags = compress; + options.alphaWeight = alphaWeight; + + return CompressEx(pDevice, srcImage, format, options, image, nullptr); +} + +_Use_decl_annotations_ +HRESULT DirectX::Compress( + ID3D11Device* pDevice, + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + DXGI_FORMAT format, + TEX_COMPRESS_FLAGS compress, + float alphaWeight, + ScratchImage& cImages) noexcept +{ + CompressOptions options = {}; + options.flags = compress; + options.alphaWeight = alphaWeight; + + return CompressEx(pDevice, srcImages, nimages, metadata, format, options, cImages); +} + +_Use_decl_annotations_ +HRESULT DirectX::CompressEx( + ID3D11Device* pDevice, + const Image& srcImage, + DXGI_FORMAT format, + const CompressOptions& options, + ScratchImage& image, + std::function statusCallback) +{ + if (!pDevice || IsCompressed(srcImage.format) || !IsCompressed(format)) + return E_INVALIDARG; + + if (IsTypeless(format) + || IsTypeless(srcImage.format) || IsPlanar(srcImage.format) || IsPalettized(srcImage.format)) + return HRESULT_E_NOT_SUPPORTED; + + // Setup GPU compressor + std::unique_ptr gpubc(new (std::nothrow) GPUCompressBC); + if (!gpubc) + return E_OUTOFMEMORY; + + HRESULT hr = gpubc->Initialize(pDevice); + if (FAILED(hr)) + return hr; + + hr = gpubc->Prepare(srcImage.width, srcImage.height, options.flags, format, options.alphaWeight); + if (FAILED(hr)) + return hr; + + // Create workspace for result + hr = image.Initialize2D(format, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + if (statusCallback) + { + if (!statusCallback(0, 100)) + { + image.Release(); + return E_ABORT; + } + } + + hr = GPUCompress(gpubc.get(), srcImage, *img, options.flags); + + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + if (statusCallback) + { + if (!statusCallback(100, 100)) + { + image.Release(); + return E_ABORT; + } + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::CompressEx( + ID3D11Device* pDevice, + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + DXGI_FORMAT format, + const CompressOptions& options, + ScratchImage& cImages, + std::function statusCallback) +{ + if (!pDevice || !srcImages || !nimages) + return E_INVALIDARG; + + if (IsCompressed(metadata.format) || !IsCompressed(format)) + return E_INVALIDARG; + + if (IsTypeless(format) + || IsTypeless(metadata.format) || IsPlanar(metadata.format) || IsPalettized(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + cImages.Release(); + + // Setup GPU compressor + std::unique_ptr gpubc(new (std::nothrow) GPUCompressBC); + if (!gpubc) + return E_OUTOFMEMORY; + + HRESULT hr = gpubc->Initialize(pDevice); + if (FAILED(hr)) + return hr; + + // Create workspace for result + TexMetadata mdata2 = metadata; + mdata2.format = format; + hr = cImages.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + if (nimages != cImages.GetImageCount()) + { + cImages.Release(); + return E_FAIL; + } + + const Image* dest = cImages.GetImages(); + if (!dest) + { + cImages.Release(); + return E_POINTER; + } + + if (statusCallback) + { + if (!statusCallback(0, nimages)) + { + cImages.Release(); + return E_ABORT; + } + } + + // Process images (ordered by size) + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + { + size_t w = metadata.width; + size_t h = metadata.height; + size_t progress = 0; + + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + hr = gpubc->Prepare(w, h, options.flags, format, options.alphaWeight); + if (FAILED(hr)) + { + cImages.Release(); + return hr; + } + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + const size_t index = metadata.ComputeIndex(level, item, 0); + if (index >= nimages) + { + cImages.Release(); + return E_FAIL; + } + + assert(dest[index].format == format); + + const Image& src = srcImages[index]; + + if (src.width != dest[index].width || src.height != dest[index].height) + { + cImages.Release(); + return E_FAIL; + } + + hr = GPUCompress(gpubc.get(), src, dest[index], options.flags); + if (FAILED(hr)) + { + cImages.Release(); + return hr; + } + + if (statusCallback) + { + if (!statusCallback(progress++, nimages)) + { + cImages.Release(); + return E_ABORT; + } + } + } + + if (h > 1) + h >>= 1; + + if (w > 1) + w >>= 1; + } + } + break; + + case TEX_DIMENSION_TEXTURE3D: + { + size_t w = metadata.width; + size_t h = metadata.height; + size_t d = metadata.depth; + size_t progress = 0; + + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + hr = gpubc->Prepare(w, h, options.flags, format, options.alphaWeight); + if (FAILED(hr)) + { + cImages.Release(); + return hr; + } + + for (size_t slice = 0; slice < d; ++slice) + { + const size_t index = metadata.ComputeIndex(level, 0, slice); + if (index >= nimages) + { + cImages.Release(); + return E_FAIL; + } + + assert(dest[index].format == format); + + const Image& src = srcImages[index]; + + if (src.width != dest[index].width || src.height != dest[index].height) + { + cImages.Release(); + return E_FAIL; + } + + hr = GPUCompress(gpubc.get(), src, dest[index], options.flags); + if (FAILED(hr)) + { + cImages.Release(); + return hr; + } + + if (statusCallback) + { + if (!statusCallback(progress++, nimages)) + { + cImages.Release(); + return E_ABORT; + } + } + } + + if (h > 1) + h >>= 1; + + if (w > 1) + w >>= 1; + + if (d > 1) + d >>= 1; + } + } + break; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + + if (statusCallback) + { + if (!statusCallback(nimages, nimages)) + { + cImages.Release(); + return E_ABORT; + } + } + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexConvert.cpp b/external/DirectXTex/DirectXTexConvert.cpp new file mode 100644 index 00000000..d793f848 --- /dev/null +++ b/external/DirectXTex/DirectXTexConvert.cpp @@ -0,0 +1,5546 @@ +//------------------------------------------------------------------------------------- +// DirectXTexConvert.cpp +// +// DirectX Texture Library - Image pixel format conversion +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +using namespace DirectX; +using namespace DirectX::Internal; +using namespace DirectX::PackedVector; +using Microsoft::WRL::ComPtr; + +namespace +{ + inline uint32_t FloatTo7e3(float Value) noexcept + { + uint32_t IValue = reinterpret_cast(&Value)[0]; + + if (IValue & 0x80000000U) + { + // Positive only + return 0; + } + else if (IValue > 0x41FF73FFU) + { + // The number is too large to be represented as a 7e3. Saturate. + return 0x3FFU; + } + else + { + if (IValue < 0x3E800000U) + { + // The number is too small to be represented as a normalized 7e3. + // Convert it to a denormalized value. + const uint32_t Shift = std::min(125U - (IValue >> 23U), 24U); + IValue = (0x800000U | (IValue & 0x7FFFFFU)) >> Shift; + } + else + { + // Rebias the exponent to represent the value as a normalized 7e3. + IValue += 0xC2000000U; + } + + return ((IValue + 0x7FFFU + ((IValue >> 16U) & 1U)) >> 16U) & 0x3FFU; + } + } + + inline float FloatFrom7e3(uint32_t Value) noexcept + { + auto Mantissa = static_cast(Value & 0x7F); + + uint32_t Exponent = (Value & 0x380); + if (Exponent != 0) // The value is normalized + { + Exponent = static_cast((Value >> 7) & 0x7); + } + else if (Mantissa != 0) // The value is denormalized + { + // Normalize the value in the resulting float + Exponent = 1; + + do + { + Exponent--; + Mantissa <<= 1; + } + while ((Mantissa & 0x80) == 0); + + Mantissa &= 0x7F; + } + else // The value is zero + { + Exponent = uint32_t(-124); + } + + const uint32_t Result = ((Exponent + 124) << 23) | // Exponent + (Mantissa << 16); // Mantissa + + return reinterpret_cast(&Result)[0]; + } + + inline uint32_t FloatTo6e4(float Value) noexcept + { + uint32_t IValue = reinterpret_cast(&Value)[0]; + + if (IValue & 0x80000000U) + { + // Positive only + return 0; + } + else if (IValue > 0x43FEFFFFU) + { + // The number is too large to be represented as a 6e4. Saturate. + return 0x3FFU; + } + else + { + if (IValue < 0x3C800000U) + { + // The number is too small to be represented as a normalized 6e4. + // Convert it to a denormalized value. + const uint32_t Shift = std::min(121U - (IValue >> 23U), 24U); + IValue = (0x800000U | (IValue & 0x7FFFFFU)) >> Shift; + } + else + { + // Rebias the exponent to represent the value as a normalized 6e4. + IValue += 0xC4000000U; + } + + return ((IValue + 0xFFFFU + ((IValue >> 17U) & 1U)) >> 17U) & 0x3FFU; + } + } + + inline float FloatFrom6e4(uint32_t Value) noexcept + { + uint32_t Mantissa = static_cast(Value & 0x3F); + + uint32_t Exponent = (Value & 0x3C0); + if (Exponent != 0) // The value is normalized + { + Exponent = static_cast((Value >> 6) & 0xF); + } + else if (Mantissa != 0) // The value is denormalized + { + // Normalize the value in the resulting float + Exponent = 1; + + do + { + Exponent--; + Mantissa <<= 1; + } + while ((Mantissa & 0x40) == 0); + + Mantissa &= 0x3F; + } + else // The value is zero + { + Exponent = uint32_t(-120); + } + + const uint32_t Result = ((Exponent + 120) << 23) | // Exponent + (Mantissa << 17); // Mantissa + + return reinterpret_cast(&Result)[0]; + } + +#if DIRECTX_MATH_VERSION >= 310 +#define StoreFloat3SE XMStoreFloat3SE +#else + inline void XM_CALLCONV StoreFloat3SE(_Out_ XMFLOAT3SE* pDestination, DirectX::FXMVECTOR V) + { + assert(pDestination); + + DirectX::XMFLOAT3A tmp; + DirectX::XMStoreFloat3A(&tmp, V); + + constexpr float maxf9 = float(0x1FF << 7); + constexpr float minf9 = float(1.f / (1 << 16)); + + float x = (tmp.x >= 0.f) ? ((tmp.x > maxf9) ? maxf9 : tmp.x) : 0.f; + float y = (tmp.y >= 0.f) ? ((tmp.y > maxf9) ? maxf9 : tmp.y) : 0.f; + float z = (tmp.z >= 0.f) ? ((tmp.z > maxf9) ? maxf9 : tmp.z) : 0.f; + + const float max_xy = (x > y) ? x : y; + const float max_xyz = (max_xy > z) ? max_xy : z; + + const float maxColor = (max_xyz > minf9) ? max_xyz : minf9; + + union { float f; int32_t i; } fi; + fi.f = maxColor; + fi.i += 0x00004000; // round up leaving 9 bits in fraction (including assumed 1) + + // Fix applied from DirectXMath 3.10 + uint32_t exp = fi.i >> 23; + pDestination->e = exp - 0x6f; + + fi.i = 0x83000000 - (exp << 23); + float ScaleR = fi.f; + + pDestination->xm = static_cast(lroundf(x * ScaleR)); + pDestination->ym = static_cast(lroundf(y * ScaleR)); + pDestination->zm = static_cast(lroundf(z * ScaleR)); + } +#endif + + const XMVECTORF32 g_Grayscale = { { { 0.2125f, 0.7154f, 0.0721f, 0.0f } } }; + const XMVECTORF32 g_HalfMin = { { { -65504.f, -65504.f, -65504.f, -65504.f } } }; + const XMVECTORF32 g_HalfMax = { { { 65504.f, 65504.f, 65504.f, 65504.f } } }; + const XMVECTORF32 g_8BitBias = { { { 0.5f / 255.f, 0.5f / 255.f, 0.5f / 255.f, 0.5f / 255.f } } }; +} + +//------------------------------------------------------------------------------------- +// Copies an image row with optional clearing of alpha value to 1.0 +// (can be used in place as well) otherwise copies the image row unmodified. +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void DirectX::Internal::CopyScanline( + void* pDestination, + size_t outSize, + const void* pSource, + size_t inSize, + DXGI_FORMAT format, + uint32_t tflags) noexcept +{ + assert(pDestination && outSize > 0); + assert(pSource && inSize > 0); + assert(IsValid(format) && !IsPalettized(format)); + + if (tflags & TEXP_SCANLINE_SETALPHA) + { + switch (static_cast(format)) + { + //----------------------------------------------------------------------------- + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + if (inSize >= 16 && outSize >= 16) + { + uint32_t alpha; + if (format == DXGI_FORMAT_R32G32B32A32_FLOAT) + alpha = 0x3f800000; + else if (format == DXGI_FORMAT_R32G32B32A32_SINT) + alpha = 0x7fffffff; + else + alpha = 0xffffffff; + + if (pDestination == pSource) + { + auto dPtr = static_cast(pDestination); + for (size_t count = 0; count < (outSize - 15); count += 16) + { + dPtr += 3; + *(dPtr++) = alpha; + } + } + else + { + const uint32_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + const size_t size = std::min(outSize, inSize); + for (size_t count = 0; count < (size - 15); count += 16) + { + *(dPtr++) = *(sPtr++); + *(dPtr++) = *(sPtr++); + *(dPtr++) = *(sPtr++); + *(dPtr++) = alpha; + ++sPtr; + } + } + } + return; + + //----------------------------------------------------------------------------- + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_Y416: + if (inSize >= 8 && outSize >= 8) + { + uint16_t alpha; + if (format == DXGI_FORMAT_R16G16B16A16_FLOAT) + alpha = 0x3c00; + else if (format == DXGI_FORMAT_R16G16B16A16_SNORM || format == DXGI_FORMAT_R16G16B16A16_SINT) + alpha = 0x7fff; + else + alpha = 0xffff; + + if (pDestination == pSource) + { + auto dPtr = static_cast(pDestination); + for (size_t count = 0; count < (outSize - 7); count += 8) + { + dPtr += 3; + *(dPtr++) = alpha; + } + } + else + { + const uint16_t * __restrict sPtr = static_cast(pSource); + uint16_t * __restrict dPtr = static_cast(pDestination); + const size_t size = std::min(outSize, inSize); + for (size_t count = 0; count < (size - 7); count += 8) + { + *(dPtr++) = *(sPtr++); + *(dPtr++) = *(sPtr++); + *(dPtr++) = *(sPtr++); + *(dPtr++) = alpha; + ++sPtr; + } + } + } + return; + + //----------------------------------------------------------------------------- + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_Y410: + case XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM: + if (inSize >= 4 && outSize >= 4) + { + if (pDestination == pSource) + { + auto dPtr = static_cast(pDestination); + for (size_t count = 0; count < (outSize - 3); count += 4) + { + *dPtr |= 0xC0000000; + ++dPtr; + } + } + else + { + const uint32_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + const size_t size = std::min(outSize, inSize); + for (size_t count = 0; count < (size - 3); count += 4) + { + *(dPtr++) = *(sPtr++) | 0xC0000000; + } + } + } + return; + + //----------------------------------------------------------------------------- + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + if (inSize >= 4 && outSize >= 4) + { + const uint32_t alpha = (format == DXGI_FORMAT_R8G8B8A8_SNORM || format == DXGI_FORMAT_R8G8B8A8_SINT) ? 0x7f000000 : 0xff000000; + + if (pDestination == pSource) + { + auto dPtr = static_cast(pDestination); + for (size_t count = 0; count < (outSize - 3); count += 4) + { + uint32_t t = *dPtr & 0xFFFFFF; + t |= alpha; + *(dPtr++) = t; + } + } + else + { + const uint32_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + const size_t size = std::min(outSize, inSize); + for (size_t count = 0; count < (size - 3); count += 4) + { + uint32_t t = *(sPtr++) & 0xFFFFFF; + t |= alpha; + *(dPtr++) = t; + } + } + } + return; + + //----------------------------------------------------------------------------- + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_B4G4R4A4_UNORM: + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + if (inSize >= 2 && outSize >= 2) + { + uint16_t alpha; + if (format == DXGI_FORMAT_B4G4R4A4_UNORM) + alpha = 0xF000; + else if (format == WIN11_DXGI_FORMAT_A4B4G4R4_UNORM) + alpha = 0x000F; + else + alpha = 0x8000; + + if (pDestination == pSource) + { + auto dPtr = static_cast(pDestination); + for (size_t count = 0; count < (outSize - 1); count += 2) + { + *(dPtr++) |= alpha; + } + } + else + { + const uint16_t * __restrict sPtr = static_cast(pSource); + uint16_t * __restrict dPtr = static_cast(pDestination); + const size_t size = std::min(outSize, inSize); + for (size_t count = 0; count < (size - 1); count += 2) + { + *(dPtr++) = uint16_t(*(sPtr++) | alpha); + } + } + } + return; + + //----------------------------------------------------------------------------- + case DXGI_FORMAT_A8_UNORM: + memset(pDestination, 0xff, outSize); + return; + + default: + break; + } + } + + // Fall-through case is to just use memcpy (assuming this is not an in-place operation) + if (pDestination == pSource) + return; + + const size_t size = std::min(outSize, inSize); + memcpy(pDestination, pSource, size); +} + + +//------------------------------------------------------------------------------------- +// Swizzles (RGB <-> BGR) an image row with optional clearing of alpha value to 1.0 +// (can be used in place as well) otherwise copies the image row unmodified. +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +void DirectX::Internal::SwizzleScanline( + void* pDestination, + size_t outSize, + const void* pSource, + size_t inSize, + DXGI_FORMAT format, + uint32_t tflags) noexcept +{ + assert(pDestination && outSize > 0); + assert(pSource && inSize > 0); + assert(IsValid(format) && !IsPlanar(format) && !IsPalettized(format)); + + switch (static_cast(format)) + { + //--------------------------------------------------------------------------------- + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM: + if (inSize >= 4 && outSize >= 4) + { + if (tflags & TEXP_SCANLINE_LEGACY) + { + // Swap Red (R) and Blue (B) channel (used for D3DFMT_A2R10G10B10 legacy sources) + if (pDestination == pSource) + { + auto dPtr = static_cast(pDestination); + for (size_t count = 0; count < (outSize - 3); count += 4) + { + const uint32_t t = *dPtr; + + uint32_t t1 = (t & 0x3ff00000) >> 20; + uint32_t t2 = (t & 0x000003ff) << 20; + uint32_t t3 = (t & 0x000ffc00); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xC0000000 : (t & 0xC0000000); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + } + else + { + const uint32_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + const size_t size = std::min(outSize, inSize); + for (size_t count = 0; count < (size - 3); count += 4) + { + const uint32_t t = *(sPtr++); + + uint32_t t1 = (t & 0x3ff00000) >> 20; + uint32_t t2 = (t & 0x000003ff) << 20; + uint32_t t3 = (t & 0x000ffc00); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xC0000000 : (t & 0xC0000000); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + } + return; + } + } + break; + + //--------------------------------------------------------------------------------- + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + if (inSize >= 4 && outSize >= 4) + { + // Swap Red (R) and Blue (B) channels (used to convert from DXGI 1.1 BGR formats to DXGI 1.0 RGB) + if (pDestination == pSource) + { + auto dPtr = static_cast(pDestination); + for (size_t count = 0; count < (outSize - 3); count += 4) + { + const uint32_t t = *dPtr; + + uint32_t t1 = (t & 0x00ff0000) >> 16; + uint32_t t2 = (t & 0x000000ff) << 16; + uint32_t t3 = (t & 0x0000ff00); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : (t & 0xFF000000); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + } + else + { + const uint32_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + const size_t size = std::min(outSize, inSize); + for (size_t count = 0; count < (size - 3); count += 4) + { + const uint32_t t = *(sPtr++); + + uint32_t t1 = (t & 0x00ff0000) >> 16; + uint32_t t2 = (t & 0x000000ff) << 16; + uint32_t t3 = (t & 0x0000ff00); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : (t & 0xFF000000); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + } + return; + } + break; + + //--------------------------------------------------------------------------------- + case DXGI_FORMAT_YUY2: + if (inSize >= 4 && outSize >= 4) + { + if (tflags & TEXP_SCANLINE_LEGACY) + { + // Reorder YUV components (used to convert legacy UYVY -> YUY2) + if (pDestination == pSource) + { + auto dPtr = static_cast(pDestination); + for (size_t count = 0; count < (outSize - 3); count += 4) + { + const uint32_t t = *dPtr; + + uint32_t t1 = (t & 0x000000ff) << 8; + uint32_t t2 = (t & 0x0000ff00) >> 8; + uint32_t t3 = (t & 0x00ff0000) << 8; + uint32_t t4 = (t & 0xff000000) >> 8; + + *(dPtr++) = t1 | t2 | t3 | t4; + } + } + else + { + const uint32_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + const size_t size = std::min(outSize, inSize); + for (size_t count = 0; count < (size - 3); count += 4) + { + const uint32_t t = *(sPtr++); + + uint32_t t1 = (t & 0x000000ff) << 8; + uint32_t t2 = (t & 0x0000ff00) >> 8; + uint32_t t3 = (t & 0x00ff0000) << 8; + uint32_t t4 = (t & 0xff000000) >> 8; + + *(dPtr++) = t1 | t2 | t3 | t4; + } + } + return; + } + } + break; + + default: + break; + } + + // Fall-through case is to just use memcpy (assuming this is not an in-place operation) + if (pDestination == pSource) + return; + + const size_t size = std::min(outSize, inSize); + memcpy(pDestination, pSource, size); +} + + +//------------------------------------------------------------------------------------- +// Converts an image row with optional clearing of alpha value to 1.0 +// Returns true if supported, false if expansion case not supported +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::Internal::ExpandScanline( + void* pDestination, + size_t outSize, + DXGI_FORMAT outFormat, + const void* pSource, + size_t inSize, + DXGI_FORMAT inFormat, + uint32_t tflags) noexcept +{ + assert(pDestination && outSize > 0); + assert(pSource && inSize > 0); + assert(IsValid(outFormat) && !IsPlanar(outFormat) && !IsPalettized(outFormat)); + assert(IsValid(inFormat) && !IsPlanar(inFormat) && !IsPalettized(inFormat)); + + switch (static_cast(inFormat)) + { + case DXGI_FORMAT_B5G6R5_UNORM: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // DXGI_FORMAT_B5G6R5_UNORM -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 2 && outSize >= 4) + { + const uint16_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 3))); icount += 2, ocount += 4) + { + const uint16_t t = *(sPtr++); + + uint32_t t1 = uint32_t(((t & 0xf800) >> 8) | ((t & 0xe000) >> 13)); + uint32_t t2 = uint32_t(((t & 0x07e0) << 5) | ((t & 0x0600) >> 5)); + uint32_t t3 = uint32_t(((t & 0x001f) << 19) | ((t & 0x001c) << 14)); + + *(dPtr++) = t1 | t2 | t3 | 0xff000000; + } + return true; + } + return false; + + case DXGI_FORMAT_B5G5R5A1_UNORM: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // DXGI_FORMAT_B5G5R5A1_UNORM -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 2 && outSize >= 4) + { + const uint16_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 3))); icount += 2, ocount += 4) + { + const uint16_t t = *(sPtr++); + + uint32_t t1 = uint32_t(((t & 0x7c00) >> 7) | ((t & 0x7000) >> 12)); + uint32_t t2 = uint32_t(((t & 0x03e0) << 6) | ((t & 0x0380) << 1)); + uint32_t t3 = uint32_t(((t & 0x001f) << 19) | ((t & 0x001c) << 14)); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : ((t & 0x8000) ? 0xff000000 : 0); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + return true; + } + return false; + + case DXGI_FORMAT_B4G4R4A4_UNORM: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // DXGI_FORMAT_B4G4R4A4_UNORM -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 2 && outSize >= 4) + { + const uint16_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 3))); icount += 2, ocount += 4) + { + const uint16_t t = *(sPtr++); + + uint32_t t1 = uint32_t(((t & 0x0f00) >> 4) | ((t & 0x0f00) >> 8)); + uint32_t t2 = uint32_t(((t & 0x00f0) << 8) | ((t & 0x00f0) << 4)); + uint32_t t3 = uint32_t(((t & 0x000f) << 20) | ((t & 0x000f) << 16)); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : uint32_t(((t & 0xf000) << 16) | ((t & 0xf000) << 12)); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + return true; + } + return false; + + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // DXGI_FORMAT_A4B4G4R4_UNORM -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 2 && outSize >= 4) + { + const uint16_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 3))); icount += 2, ocount += 4) + { + const uint16_t t = *(sPtr++); + + uint32_t t1 = uint32_t(((t & 0xf000) >> 8) | ((t & 0xf000) >> 12)); + uint32_t t2 = uint32_t((t & 0x0f00) | ((t & 0x0f00) << 4)); + uint32_t t3 = uint32_t(((t & 0x00f0) << 16) | ((t & 0x00f0) << 12)); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : uint32_t(((t & 0x000f) << 28) | ((t & 0x000f) << 24)); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + return true; + } + return false; + + default: + return false; + } +} + + +//------------------------------------------------------------------------------------- +// Loads an image row into standard RGBA XMVECTOR (aligned) array +//------------------------------------------------------------------------------------- +#define LOAD_SCANLINE( type, func )\ + if (size >= sizeof(type))\ + {\ + const type * __restrict sPtr = reinterpret_cast(pSource);\ + for(size_t icount = 0; icount < (size - sizeof(type) + 1); icount += sizeof(type))\ + {\ + if (dPtr >= ePtr) break;\ + *(dPtr++) = func(sPtr++);\ + }\ + return true;\ + }\ + return false; + +#define LOAD_SCANLINE3( type, func, defvec )\ + if (size >= sizeof(type))\ + {\ + const type * __restrict sPtr = reinterpret_cast(pSource);\ + for(size_t icount = 0; icount < (size - sizeof(type) + 1); icount += sizeof(type))\ + {\ + const XMVECTOR v = func(sPtr++);\ + if (dPtr >= ePtr) break;\ + *(dPtr++) = XMVectorSelect(defvec, v, g_XMSelect1110);\ + }\ + return true;\ + }\ + return false; + +#define LOAD_SCANLINE2( type, func, defvec )\ + if (size >= sizeof(type))\ + {\ + const type * __restrict sPtr = reinterpret_cast(pSource);\ + for(size_t icount = 0; icount < (size - sizeof(type) + 1); icount += sizeof(type))\ + {\ + const XMVECTOR v = func(sPtr++);\ + if (dPtr >= ePtr) break;\ + *(dPtr++) = XMVectorSelect(defvec, v, g_XMSelect1100);\ + }\ + return true;\ + }\ + return false; + +#pragma warning(suppress: 6101) +_Use_decl_annotations_ bool DirectX::Internal::LoadScanline( + XMVECTOR* pDestination, + size_t count, + const void* pSource, + size_t size, + DXGI_FORMAT format) noexcept +{ + assert(pDestination && count > 0 && ((reinterpret_cast(pDestination) & 0xF) == 0)); + assert(pSource && size > 0); + assert(IsValid(format) && !IsTypeless(format, false) && !IsCompressed(format) && !IsPlanar(format) && !IsPalettized(format)); + + XMVECTOR* __restrict dPtr = pDestination; + if (!dPtr) + return false; + + const XMVECTOR* ePtr = pDestination + count; + + switch (static_cast(format)) + { + case DXGI_FORMAT_R32G32B32A32_FLOAT: + { + const size_t msize = (size > (sizeof(XMVECTOR)*count)) ? (sizeof(XMVECTOR)*count) : size; + memcpy(dPtr, pSource, msize); + } + return true; + + case DXGI_FORMAT_R32G32B32A32_UINT: + LOAD_SCANLINE(XMUINT4, XMLoadUInt4) + + case DXGI_FORMAT_R32G32B32A32_SINT: + LOAD_SCANLINE(XMINT4, XMLoadSInt4) + + case DXGI_FORMAT_R32G32B32_FLOAT: + LOAD_SCANLINE3(XMFLOAT3, XMLoadFloat3, g_XMIdentityR3) + + case DXGI_FORMAT_R32G32B32_UINT: + LOAD_SCANLINE3(XMUINT3, XMLoadUInt3, g_XMIdentityR3) + + case DXGI_FORMAT_R32G32B32_SINT: + LOAD_SCANLINE3(XMINT3, XMLoadSInt3, g_XMIdentityR3) + + case DXGI_FORMAT_R16G16B16A16_FLOAT: + LOAD_SCANLINE(XMHALF4, XMLoadHalf4) + + case DXGI_FORMAT_R16G16B16A16_UNORM: + LOAD_SCANLINE(XMUSHORTN4, XMLoadUShortN4) + + case DXGI_FORMAT_R16G16B16A16_UINT: + LOAD_SCANLINE(XMUSHORT4, XMLoadUShort4) + + case DXGI_FORMAT_R16G16B16A16_SNORM: + LOAD_SCANLINE(XMSHORTN4, XMLoadShortN4) + + case DXGI_FORMAT_R16G16B16A16_SINT: + LOAD_SCANLINE(XMSHORT4, XMLoadShort4) + + case DXGI_FORMAT_R32G32_FLOAT: + LOAD_SCANLINE2(XMFLOAT2, XMLoadFloat2, g_XMIdentityR3) + + case DXGI_FORMAT_R32G32_UINT: + LOAD_SCANLINE2(XMUINT2, XMLoadUInt2, g_XMIdentityR3) + + case DXGI_FORMAT_R32G32_SINT: + LOAD_SCANLINE2(XMINT2, XMLoadSInt2, g_XMIdentityR3) + + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + { + constexpr size_t psize = sizeof(float) + sizeof(uint32_t); + if (size >= psize) + { + auto sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - psize + 1); icount += psize) + { + auto ps8 = reinterpret_cast(&sPtr[1]); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(sPtr[0], static_cast(*ps8), 0.f, 1.f); + sPtr += 2; + } + return true; + } + } + return false; + + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + { + constexpr size_t psize = sizeof(float) + sizeof(uint32_t); + if (size >= psize) + { + auto sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - psize + 1); icount += psize) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(sPtr[0], 0.f /* typeless component assumed zero */, 0.f, 1.f); + sPtr += 2; + } + return true; + } + } + return false; + + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + { + constexpr size_t psize = sizeof(float) + sizeof(uint32_t); + if (size >= psize) + { + auto sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - psize + 1); icount += psize) + { + auto pg8 = reinterpret_cast(&sPtr[1]); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(0.f /* typeless component assumed zero */, static_cast(*pg8), 0.f, 1.f); + sPtr += 2; + } + return true; + } + } + return false; + + case DXGI_FORMAT_R10G10B10A2_UNORM: + LOAD_SCANLINE(XMUDECN4, XMLoadUDecN4) + + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + LOAD_SCANLINE(XMUDECN4, XMLoadUDecN4_XR) + + case DXGI_FORMAT_R10G10B10A2_UINT: + LOAD_SCANLINE(XMUDEC4, XMLoadUDec4) + + case DXGI_FORMAT_R11G11B10_FLOAT: + LOAD_SCANLINE3(XMFLOAT3PK, XMLoadFloat3PK, g_XMIdentityR3) + + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + LOAD_SCANLINE(XMUBYTEN4, XMLoadUByteN4) + + case DXGI_FORMAT_R8G8B8A8_UINT: + LOAD_SCANLINE(XMUBYTE4, XMLoadUByte4) + + case DXGI_FORMAT_R8G8B8A8_SNORM: + LOAD_SCANLINE(XMBYTEN4, XMLoadByteN4) + + case DXGI_FORMAT_R8G8B8A8_SINT: + LOAD_SCANLINE(XMBYTE4, XMLoadByte4) + + case DXGI_FORMAT_R16G16_FLOAT: + LOAD_SCANLINE2(XMHALF2, XMLoadHalf2, g_XMIdentityR3) + + case DXGI_FORMAT_R16G16_UNORM: + LOAD_SCANLINE2(XMUSHORTN2, XMLoadUShortN2, g_XMIdentityR3) + + case DXGI_FORMAT_R16G16_UINT: + LOAD_SCANLINE2(XMUSHORT2, XMLoadUShort2, g_XMIdentityR3) + + case DXGI_FORMAT_R16G16_SNORM: + LOAD_SCANLINE2(XMSHORTN2, XMLoadShortN2, g_XMIdentityR3) + + case DXGI_FORMAT_R16G16_SINT: + LOAD_SCANLINE2(XMSHORT2, XMLoadShort2, g_XMIdentityR3) + + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + if (size >= sizeof(float)) + { + const float* __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(float) + 1); icount += sizeof(float)) + { + const XMVECTOR v = XMLoadFloat(sPtr++); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v, g_XMSelect1000); + } + return true; + } + return false; + + case DXGI_FORMAT_R32_UINT: + if (size >= sizeof(uint32_t)) + { + const uint32_t* __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(uint32_t) + 1); icount += sizeof(uint32_t)) + { + XMVECTOR v = XMLoadInt(sPtr++); + v = XMConvertVectorUIntToFloat(v, 0); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v, g_XMSelect1000); + } + return true; + } + return false; + + case DXGI_FORMAT_R32_SINT: + if (size >= sizeof(int32_t)) + { + const int32_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(int32_t) + 1); icount += sizeof(int32_t)) + { + XMVECTOR v = XMLoadInt(reinterpret_cast(sPtr++)); + v = XMConvertVectorIntToFloat(v, 0); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v, g_XMSelect1000); + } + return true; + } + return false; + + case DXGI_FORMAT_D24_UNORM_S8_UINT: + if (size >= sizeof(uint32_t)) + { + auto sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(uint32_t) + 1); icount += sizeof(uint32_t)) + { + auto const d = static_cast(*sPtr & 0xFFFFFF) / 16777215.f; + auto const s = static_cast((*sPtr & 0xFF000000) >> 24); + ++sPtr; + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(d, s, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + if (size >= sizeof(uint32_t)) + { + auto sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(uint32_t) + 1); icount += sizeof(uint32_t)) + { + auto const r = static_cast(*sPtr & 0xFFFFFF) / 16777215.f; + ++sPtr; + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(r, 0.f /* typeless component assumed zero */, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + if (size >= sizeof(uint32_t)) + { + auto sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(uint32_t) + 1); icount += sizeof(uint32_t)) + { + auto const g = static_cast((*sPtr & 0xFF000000) >> 24); + ++sPtr; + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(0.f /* typeless component assumed zero */, g, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R8G8_UNORM: + LOAD_SCANLINE2(XMUBYTEN2, XMLoadUByteN2, g_XMIdentityR3) + + case DXGI_FORMAT_R8G8_UINT: + LOAD_SCANLINE2(XMUBYTE2, XMLoadUByte2, g_XMIdentityR3) + + case DXGI_FORMAT_R8G8_SNORM: + LOAD_SCANLINE2(XMBYTEN2, XMLoadByteN2, g_XMIdentityR3) + + case DXGI_FORMAT_R8G8_SINT: + LOAD_SCANLINE2(XMBYTE2, XMLoadByte2, g_XMIdentityR3) + + case DXGI_FORMAT_R16_FLOAT: + if (size >= sizeof(HALF)) + { + const HALF * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(HALF) + 1); icount += sizeof(HALF)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(XMConvertHalfToFloat(*sPtr++), 0.f, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + if (size >= sizeof(uint16_t)) + { + const uint16_t* __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(uint16_t) + 1); icount += sizeof(uint16_t)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(static_cast(*sPtr++) / 65535.f, 0.f, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R16_UINT: + if (size >= sizeof(uint16_t)) + { + const uint16_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(uint16_t) + 1); icount += sizeof(uint16_t)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(static_cast(*sPtr++), 0.f, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R16_SNORM: + if (size >= sizeof(int16_t)) + { + const int16_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(int16_t) + 1); icount += sizeof(int16_t)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(static_cast(*sPtr++) / 32767.f, 0.f, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R16_SINT: + if (size >= sizeof(int16_t)) + { + const int16_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(int16_t) + 1); icount += sizeof(int16_t)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(static_cast(*sPtr++), 0.f, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R8_UNORM: + if (size >= sizeof(uint8_t)) + { + const uint8_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < size; icount += sizeof(uint8_t)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(static_cast(*sPtr++) / 255.f, 0.f, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R8_UINT: + if (size >= sizeof(uint8_t)) + { + const uint8_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < size; icount += sizeof(uint8_t)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(static_cast(*sPtr++), 0.f, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R8_SNORM: + if (size >= sizeof(int8_t)) + { + const int8_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < size; icount += sizeof(int8_t)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(static_cast(*sPtr++) / 127.f, 0.f, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R8_SINT: + if (size >= sizeof(int8_t)) + { + const int8_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < size; icount += sizeof(int8_t)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(static_cast(*sPtr++), 0.f, 0.f, 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_A8_UNORM: + if (size >= sizeof(uint8_t)) + { + const uint8_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < size; icount += sizeof(uint8_t)) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(0.f, 0.f, 0.f, static_cast(*sPtr++) / 255.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R1_UNORM: + if (size >= sizeof(uint8_t)) + { + const uint8_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < size; icount += sizeof(uint8_t)) + { + for (size_t bcount = 8; bcount > 0; --bcount) + { + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet((((*sPtr >> (bcount - 1)) & 0x1) ? 1.f : 0.f), 0.f, 0.f, 1.f); + } + + ++sPtr; + } + return true; + } + return false; + + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + LOAD_SCANLINE3(XMFLOAT3SE, XMLoadFloat3SE, g_XMIdentityR3) + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + if (size >= sizeof(XMUBYTEN4)) + { + const XMUBYTEN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + const XMVECTOR v = XMLoadUByteN4(sPtr++); + const XMVECTOR v1 = XMVectorSwizzle<0, 3, 2, 1>(v); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v, g_XMSelect1110); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v1, g_XMSelect1110); + } + return true; + } + return false; + + case DXGI_FORMAT_G8R8_G8B8_UNORM: + if (size >= sizeof(XMUBYTEN4)) + { + const XMUBYTEN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + const XMVECTOR v = XMLoadUByteN4(sPtr++); + const XMVECTOR v0 = XMVectorSwizzle<1, 0, 3, 2>(v); + const XMVECTOR v1 = XMVectorSwizzle<1, 2, 3, 0>(v); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v0, g_XMSelect1110); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v1, g_XMSelect1110); + } + return true; + } + return false; + + case DXGI_FORMAT_B5G6R5_UNORM: + if (size >= sizeof(XMU565)) + { + static const XMVECTORF32 s_Scale = { { { 1.f / 31.f, 1.f / 63.f, 1.f / 31.f, 1.f } } }; + const XMU565 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMU565) + 1); icount += sizeof(XMU565)) + { + XMVECTOR v = XMLoadU565(sPtr++); + v = XMVectorMultiply(v, s_Scale); + v = XMVectorSwizzle<2, 1, 0, 3>(v); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v, g_XMSelect1110); + } + return true; + } + return false; + + case DXGI_FORMAT_B5G5R5A1_UNORM: + if (size >= sizeof(XMU555)) + { + static const XMVECTORF32 s_Scale = { { { 1.f / 31.f, 1.f / 31.f, 1.f / 31.f, 1.f } } }; + const XMU555 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMU555) + 1); icount += sizeof(XMU555)) + { + XMVECTOR v = XMLoadU555(sPtr++); + v = XMVectorMultiply(v, s_Scale); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSwizzle<2, 1, 0, 3>(v); + } + return true; + } + return false; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + if (size >= sizeof(XMUBYTEN4)) + { + const XMUBYTEN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + const XMVECTOR v = XMLoadUByteN4(sPtr++); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSwizzle<2, 1, 0, 3>(v); + } + return true; + } + return false; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + if (size >= sizeof(XMUBYTEN4)) + { + const XMUBYTEN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + XMVECTOR v = XMLoadUByteN4(sPtr++); + v = XMVectorSwizzle<2, 1, 0, 3>(v); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v, g_XMSelect1110); + } + return true; + } + return false; + + case DXGI_FORMAT_AYUV: + if (size >= sizeof(XMUBYTEN4)) + { + const XMUBYTEN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + const int v = int(sPtr->x) - 128; + const int u = int(sPtr->y) - 128; + const int y = int(sPtr->z) - 16; + const unsigned int a = sPtr->w; + ++sPtr; + + // http://msdn.microsoft.com/en-us/library/windows/desktop/dd206750.aspx + + // Y' = Y - 16 + // Cb' = Cb - 128 + // Cr' = Cr - 128 + + // R = 1.1644Y' + 1.5960Cr' + // G = 1.1644Y' - 0.3917Cb' - 0.8128Cr' + // B = 1.1644Y' + 2.0172Cb' + + const int r = (298 * y + 409 * v + 128) >> 8; + const int g = (298 * y - 100 * u - 208 * v + 128) >> 8; + const int b = (298 * y + 516 * u + 128) >> 8; + + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(float(std::min(std::max(r, 0), 255)) / 255.f, + float(std::min(std::max(g, 0), 255)) / 255.f, + float(std::min(std::max(b, 0), 255)) / 255.f, + float(a) / 255.f); + } + return true; + } + return false; + + case DXGI_FORMAT_Y410: + if (size >= sizeof(XMUDECN4)) + { + const XMUDECN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUDECN4) + 1); icount += sizeof(XMUDECN4)) + { + const int64_t u = int(sPtr->x) - 512; + const int64_t y = int(sPtr->y) - 64; + const int64_t v = int(sPtr->z) - 512; + const unsigned int a = sPtr->w; + ++sPtr; + + // http://msdn.microsoft.com/en-us/library/windows/desktop/bb970578.aspx + + // Y' = Y - 64 + // Cb' = Cb - 512 + // Cr' = Cr - 512 + + // R = 1.1678Y' + 1.6007Cr' + // G = 1.1678Y' - 0.3929Cb' - 0.8152Cr' + // B = 1.1678Y' + 2.0232Cb' + + auto const r = static_cast((76533 * y + 104905 * v + 32768) >> 16); + auto const g = static_cast((76533 * y - 25747 * u - 53425 * v + 32768) >> 16); + auto const b = static_cast((76533 * y + 132590 * u + 32768) >> 16); + + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(float(std::min(std::max(r, 0), 1023)) / 1023.f, + float(std::min(std::max(g, 0), 1023)) / 1023.f, + float(std::min(std::max(b, 0), 1023)) / 1023.f, + float(a) / 3.f); + } + return true; + } + return false; + + case DXGI_FORMAT_Y416: + if (size >= sizeof(XMUSHORTN4)) + { + const XMUSHORTN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUSHORTN4) + 1); icount += sizeof(XMUSHORTN4)) + { + const int64_t u = int64_t(sPtr->x) - 32768; + const int64_t y = int64_t(sPtr->y) - 4096; + const int64_t v = int64_t(sPtr->z) - 32768; + auto const a = static_cast(sPtr->w); + ++sPtr; + + // http://msdn.microsoft.com/en-us/library/windows/desktop/bb970578.aspx + + // Y' = Y - 4096 + // Cb' = Cb - 32768 + // Cr' = Cr - 32768 + + // R = 1.1689Y' + 1.6023Cr' + // G = 1.1689Y' - 0.3933Cb' - 0.8160Cr' + // B = 1.1689Y'+ 2.0251Cb' + + auto const r = static_cast((76607 * y + 105006 * v + 32768) >> 16); + auto const g = static_cast((76607 * y - 25772 * u - 53477 * v + 32768) >> 16); + auto const b = static_cast((76607 * y + 132718 * u + 32768) >> 16); + + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(float(std::min(std::max(r, 0), 65535)) / 65535.f, + float(std::min(std::max(g, 0), 65535)) / 65535.f, + float(std::min(std::max(b, 0), 65535)) / 65535.f, + float(std::min(std::max(a, 0), 65535)) / 65535.f); + } + return true; + } + return false; + + case DXGI_FORMAT_YUY2: + if (size >= sizeof(XMUBYTEN4)) + { + const XMUBYTEN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + const int y0 = int(sPtr->x) - 16; + const int u = int(sPtr->y) - 128; + const int y1 = int(sPtr->z) - 16; + const int v = int(sPtr->w) - 128; + ++sPtr; + + // See AYUV + int r = (298 * y0 + 409 * v + 128) >> 8; + int g = (298 * y0 - 100 * u - 208 * v + 128) >> 8; + int b = (298 * y0 + 516 * u + 128) >> 8; + + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(float(std::min(std::max(r, 0), 255)) / 255.f, + float(std::min(std::max(g, 0), 255)) / 255.f, + float(std::min(std::max(b, 0), 255)) / 255.f, + 1.f); + + r = (298 * y1 + 409 * v + 128) >> 8; + g = (298 * y1 - 100 * u - 208 * v + 128) >> 8; + b = (298 * y1 + 516 * u + 128) >> 8; + + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(float(std::min(std::max(r, 0), 255)) / 255.f, + float(std::min(std::max(g, 0), 255)) / 255.f, + float(std::min(std::max(b, 0), 255)) / 255.f, + 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_Y210: + // Same as Y216 with least significant 6 bits set to zero + if (size >= sizeof(XMUSHORTN4)) + { + const XMUSHORTN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUSHORTN4) + 1); icount += sizeof(XMUSHORTN4)) + { + const int64_t y0 = int64_t(sPtr->x >> 6) - 64; + const int64_t u = int64_t(sPtr->y >> 6) - 512; + const int64_t y1 = int64_t(sPtr->z >> 6) - 64; + const int64_t v = int64_t(sPtr->w >> 6) - 512; + ++sPtr; + + // See Y410 + auto r = static_cast((76533 * y0 + 104905 * v + 32768) >> 16); + auto g = static_cast((76533 * y0 - 25747 * u - 53425 * v + 32768) >> 16); + auto b = static_cast((76533 * y0 + 132590 * u + 32768) >> 16); + + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(float(std::min(std::max(r, 0), 1023)) / 1023.f, + float(std::min(std::max(g, 0), 1023)) / 1023.f, + float(std::min(std::max(b, 0), 1023)) / 1023.f, + 1.f); + + r = static_cast((76533 * y1 + 104905 * v + 32768) >> 16); + g = static_cast((76533 * y1 - 25747 * u - 53425 * v + 32768) >> 16); + b = static_cast((76533 * y1 + 132590 * u + 32768) >> 16); + + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(float(std::min(std::max(r, 0), 1023)) / 1023.f, + float(std::min(std::max(g, 0), 1023)) / 1023.f, + float(std::min(std::max(b, 0), 1023)) / 1023.f, + 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_Y216: + if (size >= sizeof(XMUSHORTN4)) + { + const XMUSHORTN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUSHORTN4) + 1); icount += sizeof(XMUSHORTN4)) + { + const int64_t y0 = int64_t(sPtr->x) - 4096; + const int64_t u = int64_t(sPtr->y) - 32768; + const int64_t y1 = int64_t(sPtr->z) - 4096; + const int64_t v = int64_t(sPtr->w) - 32768; + ++sPtr; + + // See Y416 + auto r = static_cast((76607 * y0 + 105006 * v + 32768) >> 16); + auto g = static_cast((76607 * y0 - 25772 * u - 53477 * v + 32768) >> 16); + auto b = static_cast((76607 * y0 + 132718 * u + 32768) >> 16); + + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(float(std::min(std::max(r, 0), 65535)) / 65535.f, + float(std::min(std::max(g, 0), 65535)) / 65535.f, + float(std::min(std::max(b, 0), 65535)) / 65535.f, + 1.f); + + r = static_cast((76607 * y1 + 105006 * v + 32768) >> 16); + g = static_cast((76607 * y1 - 25772 * u - 53477 * v + 32768) >> 16); + b = static_cast((76607 * y1 + 132718 * u + 32768) >> 16); + + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSet(float(std::min(std::max(r, 0), 65535)) / 65535.f, + float(std::min(std::max(g, 0), 65535)) / 65535.f, + float(std::min(std::max(b, 0), 65535)) / 65535.f, + 1.f); + } + return true; + } + return false; + + case DXGI_FORMAT_B4G4R4A4_UNORM: + if (size >= sizeof(XMUNIBBLE4)) + { + static const XMVECTORF32 s_Scale = { { { 1.f / 15.f, 1.f / 15.f, 1.f / 15.f, 1.f / 15.f } } }; + const XMUNIBBLE4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUNIBBLE4) + 1); icount += sizeof(XMUNIBBLE4)) + { + XMVECTOR v = XMLoadUNibble4(sPtr++); + v = XMVectorMultiply(v, s_Scale); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSwizzle<2, 1, 0, 3>(v); + } + return true; + } + return false; + + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + if (size >= sizeof(XMUNIBBLE4)) + { + static const XMVECTORF32 s_Scale = { { { 1.f / 15.f, 1.f / 15.f, 1.f / 15.f, 1.f / 15.f } } }; + const XMUNIBBLE4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUNIBBLE4) + 1); icount += sizeof(XMUNIBBLE4)) + { + XMVECTOR v = XMLoadUNibble4(sPtr++); + v = XMVectorMultiply(v, s_Scale); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSwizzle<3, 2, 1, 0>(v); + } + return true; + } + return false; + + case XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT: + // Xbox One specific 7e3 format + if (size >= sizeof(XMUDECN4)) + { + const XMUDECN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUDECN4) + 1); icount += sizeof(XMUDECN4)) + { + if (dPtr >= ePtr) break; + + XMVECTORF32 vResult = { { { + FloatFrom7e3(sPtr->x), + FloatFrom7e3(sPtr->y), + FloatFrom7e3(sPtr->z), + static_cast(sPtr->v >> 30) / 3.0f + } } }; + + ++sPtr; + + *(dPtr++) = vResult.v; + } + return true; + } + return false; + + case XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT: + // Xbox One specific 6e4 format + if (size >= sizeof(XMUDECN4)) + { + const XMUDECN4 * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(XMUDECN4) + 1); icount += sizeof(XMUDECN4)) + { + if (dPtr >= ePtr) break; + + XMVECTORF32 vResult = { { { + FloatFrom6e4(sPtr->x), + FloatFrom6e4(sPtr->y), + FloatFrom6e4(sPtr->z), + static_cast(sPtr->v >> 30) / 3.0f + } } }; + + ++sPtr; + + *(dPtr++) = vResult.v; + } + return true; + } + return false; + + case XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM: + // Xbox One specific format + LOAD_SCANLINE(XMXDECN4, XMLoadXDecN4) + + case XBOX_DXGI_FORMAT_R4G4_UNORM: + // Xbox One specific format + if (size >= sizeof(uint8_t)) + { + static const XMVECTORF32 s_Scale = { { { 1.f / 15.f, 1.f / 15.f, 0.f, 0.f } } }; + const uint8_t * __restrict sPtr = static_cast(pSource); + for (size_t icount = 0; icount < (size - sizeof(uint8_t) + 1); icount += sizeof(uint8_t)) + { + XMUNIBBLE4 nibble; + nibble.v = static_cast(*sPtr++); + XMVECTOR v = XMLoadUNibble4(&nibble); + v = XMVectorMultiply(v, s_Scale); + if (dPtr >= ePtr) break; + *(dPtr++) = XMVectorSelect(g_XMIdentityR3, v, g_XMSelect1100); + } + return true; + } + return false; + + // We don't support the planar or palettized formats + + default: + return false; + } +} + +#undef LOAD_SCANLINE +#undef LOAD_SCANLINE3 +#undef LOAD_SCANLINE2 + + +//------------------------------------------------------------------------------------- +// Stores an image row from standard RGBA XMVECTOR (aligned) array +//------------------------------------------------------------------------------------- +#define STORE_SCANLINE( type, func )\ + if (size >= sizeof(type))\ + {\ + type * __restrict dPtr = reinterpret_cast(pDestination);\ + for(size_t icount = 0; icount < (size - sizeof(type) + 1); icount += sizeof(type))\ + {\ + if (sPtr >= ePtr) break;\ + func(dPtr++, *sPtr++);\ + }\ + return true; \ + }\ + return false; + +_Use_decl_annotations_ +bool DirectX::Internal::StoreScanline( + void* pDestination, + size_t size, + DXGI_FORMAT format, + const XMVECTOR* pSource, + size_t count, + float threshold) noexcept +{ + assert(pDestination != nullptr); + assert(IsValid(format) && !IsTypeless(format) && !IsCompressed(format) && !IsPlanar(format) && !IsPalettized(format)); + + if (!size || !count) + return false; + + const XMVECTOR* __restrict sPtr = pSource; + if (!sPtr) + return false; + + assert((reinterpret_cast(pSource) & 0xF) == 0); + + const XMVECTOR* ePtr = sPtr + count; + +#ifdef _PREFAST_ + *reinterpret_cast(pDestination) = 0; +#endif + + switch (static_cast(format)) + { + case DXGI_FORMAT_R32G32B32A32_FLOAT: + STORE_SCANLINE(XMFLOAT4, XMStoreFloat4) + + case DXGI_FORMAT_R32G32B32A32_UINT: + STORE_SCANLINE(XMUINT4, XMStoreUInt4) + + case DXGI_FORMAT_R32G32B32A32_SINT: + STORE_SCANLINE(XMINT4, XMStoreSInt4) + + case DXGI_FORMAT_R32G32B32_FLOAT: + STORE_SCANLINE(XMFLOAT3, XMStoreFloat3) + + case DXGI_FORMAT_R32G32B32_UINT: + STORE_SCANLINE(XMUINT3, XMStoreUInt3) + + case DXGI_FORMAT_R32G32B32_SINT: + STORE_SCANLINE(XMINT3, XMStoreSInt3) + + case DXGI_FORMAT_R16G16B16A16_FLOAT: + if (size >= sizeof(XMHALF4)) + { + XMHALF4* __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMHALF4) + 1); icount += sizeof(XMHALF4)) + { + if (sPtr >= ePtr) break; + XMVECTOR v = *sPtr++; + v = XMVectorClamp(v, g_HalfMin, g_HalfMax); + XMStoreHalf4(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_R16G16B16A16_UNORM: + STORE_SCANLINE(XMUSHORTN4, XMStoreUShortN4) + + case DXGI_FORMAT_R16G16B16A16_UINT: + STORE_SCANLINE(XMUSHORT4, XMStoreUShort4) + + case DXGI_FORMAT_R16G16B16A16_SNORM: + STORE_SCANLINE(XMSHORTN4, XMStoreShortN4) + + case DXGI_FORMAT_R16G16B16A16_SINT: + STORE_SCANLINE(XMSHORT4, XMStoreShort4) + + case DXGI_FORMAT_R32G32_FLOAT: + STORE_SCANLINE(XMFLOAT2, XMStoreFloat2) + + case DXGI_FORMAT_R32G32_UINT: + STORE_SCANLINE(XMUINT2, XMStoreUInt2) + + case DXGI_FORMAT_R32G32_SINT: + STORE_SCANLINE(XMINT2, XMStoreSInt2) + + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + { + constexpr size_t psize = sizeof(float) + sizeof(uint32_t); + if (size >= psize) + { + auto dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - psize + 1); icount += psize) + { + if (sPtr >= ePtr) break; + XMFLOAT4 f; + XMStoreFloat4(&f, *sPtr++); + dPtr[0] = f.x; + auto ps8 = reinterpret_cast(&dPtr[1]); + ps8[0] = static_cast(std::min(255.f, std::max(0.f, f.y))); + ps8[1] = ps8[2] = ps8[3] = 0; + dPtr += 2; + } + return true; + } + } + return false; + + case DXGI_FORMAT_R10G10B10A2_UNORM: + STORE_SCANLINE(XMUDECN4, XMStoreUDecN4) + + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + STORE_SCANLINE(XMUDECN4, XMStoreUDecN4_XR) + + case DXGI_FORMAT_R10G10B10A2_UINT: + STORE_SCANLINE(XMUDEC4, XMStoreUDec4) + + case DXGI_FORMAT_R11G11B10_FLOAT: + STORE_SCANLINE(XMFLOAT3PK, XMStoreFloat3PK) + + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + if (size >= sizeof(XMUBYTEN4)) + { + XMUBYTEN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + if (sPtr >= ePtr) break; + const XMVECTOR v = XMVectorAdd(*sPtr++, g_8BitBias); + XMStoreUByteN4(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_R8G8B8A8_UINT: + STORE_SCANLINE(XMUBYTE4, XMStoreUByte4) + + case DXGI_FORMAT_R8G8B8A8_SNORM: + STORE_SCANLINE(XMBYTEN4, XMStoreByteN4) + + case DXGI_FORMAT_R8G8B8A8_SINT: + STORE_SCANLINE(XMBYTE4, XMStoreByte4) + + case DXGI_FORMAT_R16G16_FLOAT: + if (size >= sizeof(XMHALF2)) + { + XMHALF2* __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMHALF2) + 1); icount += sizeof(XMHALF2)) + { + if (sPtr >= ePtr) break; + XMVECTOR v = *sPtr++; + v = XMVectorClamp(v, g_HalfMin, g_HalfMax); + XMStoreHalf2(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_R16G16_UNORM: + STORE_SCANLINE(XMUSHORTN2, XMStoreUShortN2) + + case DXGI_FORMAT_R16G16_UINT: + STORE_SCANLINE(XMUSHORT2, XMStoreUShort2) + + case DXGI_FORMAT_R16G16_SNORM: + STORE_SCANLINE(XMSHORTN2, XMStoreShortN2) + + case DXGI_FORMAT_R16G16_SINT: + STORE_SCANLINE(XMSHORT2, XMStoreShort2) + + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + if (size >= sizeof(float)) + { + float * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(float) + 1); icount += sizeof(float)) + { + if (sPtr >= ePtr) break; + XMStoreFloat(dPtr++, *(sPtr++)); + } + return true; + } + return false; + + case DXGI_FORMAT_R32_UINT: + if (size >= sizeof(uint32_t)) + { + uint32_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(uint32_t) + 1); icount += sizeof(uint32_t)) + { + if (sPtr >= ePtr) break; + const XMVECTOR v = XMConvertVectorFloatToUInt(*(sPtr++), 0); + XMStoreInt(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_R32_SINT: + if (size >= sizeof(int32_t)) + { + uint32_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(int32_t) + 1); icount += sizeof(int32_t)) + { + if (sPtr >= ePtr) break; + const XMVECTOR v = XMConvertVectorFloatToInt(*(sPtr++), 0); + XMStoreInt(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_D24_UNORM_S8_UINT: + if (size >= sizeof(uint32_t)) + { + static const XMVECTORF32 clamp = { { { 1.f, 255.f, 0.f, 0.f } } }; + const XMVECTOR zero = XMVectorZero(); + auto dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(uint32_t) + 1); icount += sizeof(uint32_t)) + { + if (sPtr >= ePtr) break; + XMFLOAT4 f; + XMStoreFloat4(&f, XMVectorClamp(*sPtr++, zero, clamp)); + *dPtr++ = (static_cast(f.x * 16777215.f) & 0xFFFFFF) + | ((static_cast(f.y) & 0xFF) << 24); + } + return true; + } + return false; + + case DXGI_FORMAT_R8G8_UNORM: + STORE_SCANLINE(XMUBYTEN2, XMStoreUByteN2) + + case DXGI_FORMAT_R8G8_UINT: + STORE_SCANLINE(XMUBYTE2, XMStoreUByte2) + + case DXGI_FORMAT_R8G8_SNORM: + STORE_SCANLINE(XMBYTEN2, XMStoreByteN2) + + case DXGI_FORMAT_R8G8_SINT: + STORE_SCANLINE(XMBYTE2, XMStoreByte2) + + case DXGI_FORMAT_R16_FLOAT: + if (size >= sizeof(HALF)) + { + HALF * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(HALF) + 1); icount += sizeof(HALF)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetX(*sPtr++); + v = std::max(std::min(v, 65504.f), -65504.f); + *(dPtr++) = XMConvertFloatToHalf(v); + } + return true; + } + return false; + + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + if (size >= sizeof(uint16_t)) + { + uint16_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(uint16_t) + 1); icount += sizeof(uint16_t)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetX(*sPtr++); + v = std::max(std::min(v, 1.f), 0.f); + *(dPtr++) = static_cast(v*65535.f + 0.5f); + } + return true; + } + return false; + + case DXGI_FORMAT_R16_UINT: + if (size >= sizeof(uint16_t)) + { + uint16_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(uint16_t) + 1); icount += sizeof(uint16_t)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetX(*sPtr++); + v = std::max(std::min(v, 65535.f), 0.f); + *(dPtr++) = static_cast(v); + } + return true; + } + return false; + + case DXGI_FORMAT_R16_SNORM: + if (size >= sizeof(int16_t)) + { + int16_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(int16_t) + 1); icount += sizeof(int16_t)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetX(*sPtr++); + v = std::max(std::min(v, 1.f), -1.f); + *(dPtr++) = static_cast(lroundf(v * 32767.f)); + } + return true; + } + return false; + + case DXGI_FORMAT_R16_SINT: + if (size >= sizeof(int16_t)) + { + int16_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(int16_t) + 1); icount += sizeof(int16_t)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetX(*sPtr++); + v = std::max(std::min(v, 32767.f), -32767.f); + *(dPtr++) = static_cast(v); + } + return true; + } + return false; + + case DXGI_FORMAT_R8_UNORM: + if (size >= sizeof(uint8_t)) + { + uint8_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < size; icount += sizeof(uint8_t)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetX(*sPtr++); + v = std::max(std::min(v, 1.f), 0.f); + *(dPtr++) = static_cast(v * 255.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R8_UINT: + if (size >= sizeof(uint8_t)) + { + uint8_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < size; icount += sizeof(uint8_t)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetX(*sPtr++); + v = std::max(std::min(v, 255.f), 0.f); + *(dPtr++) = static_cast(v); + } + return true; + } + return false; + + case DXGI_FORMAT_R8_SNORM: + if (size >= sizeof(int8_t)) + { + int8_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < size; icount += sizeof(int8_t)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetX(*sPtr++); + v = std::max(std::min(v, 1.f), -1.f); + *(dPtr++) = static_cast(lroundf(v * 127.f)); + } + return true; + } + return false; + + case DXGI_FORMAT_R8_SINT: + if (size >= sizeof(int8_t)) + { + int8_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < size; icount += sizeof(int8_t)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetX(*sPtr++); + v = std::max(std::min(v, 127.f), -127.f); + *(dPtr++) = static_cast(v); + } + return true; + } + return false; + + case DXGI_FORMAT_A8_UNORM: + if (size >= sizeof(uint8_t)) + { + uint8_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < size; icount += sizeof(uint8_t)) + { + if (sPtr >= ePtr) break; + float v = XMVectorGetW(*sPtr++); + v = std::max(std::min(v, 1.f), 0.f); + *(dPtr++) = static_cast(v * 255.f); + } + return true; + } + return false; + + case DXGI_FORMAT_R1_UNORM: + if (size >= sizeof(uint8_t)) + { + uint8_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < size; icount += sizeof(uint8_t)) + { + uint8_t pixels = 0; + for (size_t bcount = 8; bcount > 0; --bcount) + { + if (sPtr >= ePtr) break; + const float v = XMVectorGetX(*sPtr++); + + // Absolute thresholding generally doesn't give good results for all images + // Picking the 'right' threshold automatically requires whole-image analysis + + if (v > 0.25f) + pixels |= 1 << (bcount - 1); + } + *(dPtr++) = pixels; + } + return true; + } + return false; + + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + STORE_SCANLINE(XMFLOAT3SE, StoreFloat3SE) + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + if (size >= sizeof(XMUBYTEN4)) + { + XMUBYTEN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + if (sPtr >= ePtr) break; + const XMVECTOR v0 = *sPtr++; + const XMVECTOR v1 = (sPtr < ePtr) ? XMVectorSplatY(*sPtr++) : XMVectorZero(); + XMVECTOR v = XMVectorSelect(v1, v0, g_XMSelect1110); + v = XMVectorAdd(v, g_8BitBias); + XMStoreUByteN4(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_G8R8_G8B8_UNORM: + if (size >= sizeof(XMUBYTEN4)) + { + static XMVECTORU32 select1101 = { { { XM_SELECT_1, XM_SELECT_1, XM_SELECT_0, XM_SELECT_1 } } }; + + XMUBYTEN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + if (sPtr >= ePtr) break; + const XMVECTOR v0 = XMVectorSwizzle<1, 0, 3, 2>(*sPtr++); + const XMVECTOR v1 = (sPtr < ePtr) ? XMVectorSplatY(*sPtr++) : XMVectorZero(); + XMVECTOR v = XMVectorSelect(v1, v0, select1101); + v = XMVectorAdd(v, g_8BitBias); + XMStoreUByteN4(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_B5G6R5_UNORM: + if (size >= sizeof(XMU565)) + { + static const XMVECTORF32 s_Scale = { { { 31.f, 63.f, 31.f, 1.f } } }; + XMU565 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMU565) + 1); icount += sizeof(XMU565)) + { + if (sPtr >= ePtr) break; + XMVECTOR v = XMVectorSwizzle<2, 1, 0, 3>(*sPtr++); +#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__ + v = XMVectorMultiplyAdd(v, s_Scale, g_XMOneHalf); +#else + v = XMVectorMultiply(v, s_Scale); +#endif + XMStoreU565(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_B5G5R5A1_UNORM: + if (size >= sizeof(XMU555)) + { + static const XMVECTORF32 s_Scale = { { { 31.f, 31.f, 31.f, 1.f } } }; +#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__ + static const XMVECTORF32 s_OneHalfXYZ = { { { 0.5f, 0.5f, 0.5f, 0.f } } }; +#endif + XMU555 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMU555) + 1); icount += sizeof(XMU555)) + { + if (sPtr >= ePtr) break; + XMVECTOR v = XMVectorSwizzle<2, 1, 0, 3>(*sPtr++); +#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__ + v = XMVectorMultiplyAdd(v, s_Scale, s_OneHalfXYZ); +#else + v = XMVectorMultiply(v, s_Scale); +#endif + XMStoreU555(dPtr, v); + dPtr->w = (XMVectorGetW(v) > threshold) ? 1u : 0u; + ++dPtr; + } + return true; + } + return false; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + if (size >= sizeof(XMUBYTEN4)) + { + XMUBYTEN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + if (sPtr >= ePtr) break; + XMVECTOR v = XMVectorSwizzle<2, 1, 0, 3>(*sPtr++); + v = XMVectorAdd(v, g_8BitBias); + XMStoreUByteN4(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + if (size >= sizeof(XMUBYTEN4)) + { + XMUBYTEN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + if (sPtr >= ePtr) break; + XMVECTOR v = XMVectorPermute<2, 1, 0, 7>(*sPtr++, g_XMIdentityR3); + v = XMVectorAdd(v, g_8BitBias); + XMStoreUByteN4(dPtr++, v); + } + return true; + } + return false; + + case DXGI_FORMAT_AYUV: + if (size >= sizeof(XMUBYTEN4)) + { + XMUBYTEN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + if (sPtr >= ePtr) break; + + XMUBYTEN4 rgba; + XMStoreUByteN4(&rgba, *sPtr++); + + // http://msdn.microsoft.com/en-us/library/windows/desktop/dd206750.aspx + + // Y = 0.2568R + 0.5041G + 0.1001B + 16 + // Cb = -0.1482R - 0.2910G + 0.4392B + 128 + // Cr = 0.4392R - 0.3678G - 0.0714B + 128 + + const int y = ((66 * rgba.x + 129 * rgba.y + 25 * rgba.z + 128) >> 8) + 16; + const int u = ((-38 * rgba.x - 74 * rgba.y + 112 * rgba.z + 128) >> 8) + 128; + const int v = ((112 * rgba.x - 94 * rgba.y - 18 * rgba.z + 128) >> 8) + 128; + + dPtr->x = static_cast(std::min(std::max(v, 0), 255)); + dPtr->y = static_cast(std::min(std::max(u, 0), 255)); + dPtr->z = static_cast(std::min(std::max(y, 0), 255)); + dPtr->w = rgba.w; + ++dPtr; + } + return true; + } + return false; + + case DXGI_FORMAT_Y410: + if (size >= sizeof(XMUDECN4)) + { + XMUDECN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUDECN4) + 1); icount += sizeof(XMUDECN4)) + { + if (sPtr >= ePtr) break; + + XMUDECN4 rgba; + XMStoreUDecN4(&rgba, *sPtr++); + + // http://msdn.microsoft.com/en-us/library/windows/desktop/bb970578.aspx + + // Y = 0.2560R + 0.5027G + 0.0998B + 64 + // Cb = -0.1478R - 0.2902G + 0.4379B + 512 + // Cr = 0.4379R - 0.3667G - 0.0712B + 512 + + const int64_t r = rgba.x; + const int64_t g = rgba.y; + const int64_t b = rgba.z; + + const int y = static_cast((16780 * r + 32942 * g + 6544 * b + 32768) >> 16) + 64; + const int u = static_cast((-9683 * r - 19017 * g + 28700 * b + 32768) >> 16) + 512; + const int v = static_cast((28700 * r - 24033 * g - 4667 * b + 32768) >> 16) + 512; + + dPtr->x = static_cast(std::min(std::max(u, 0), 1023)); + dPtr->y = static_cast(std::min(std::max(y, 0), 1023)); + dPtr->z = static_cast(std::min(std::max(v, 0), 1023)); + dPtr->w = rgba.w; + ++dPtr; + } + return true; + } + return false; + + case DXGI_FORMAT_Y416: + if (size >= sizeof(XMUSHORTN4)) + { + XMUSHORTN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUSHORTN4) + 1); icount += sizeof(XMUSHORTN4)) + { + if (sPtr >= ePtr) break; + + XMUSHORTN4 rgba; + XMStoreUShortN4(&rgba, *sPtr++); + + // http://msdn.microsoft.com/en-us/library/windows/desktop/bb970578.aspx + + // Y = 0.2558R + 0.5022G + 0.0998B + 4096 + // Cb = -0.1476R - 0.2899G + 0.4375B + 32768 + // Cr = 0.4375R - 0.3664G - 0.0711B + 32768 + + const int64_t r = int64_t(rgba.x); + const int64_t g = int64_t(rgba.y); + const int64_t b = int64_t(rgba.z); + + const int y = static_cast((16763 * r + 32910 * g + 6537 * b + 32768) >> 16) + 4096; + const int u = static_cast((-9674 * r - 18998 * g + 28672 * b + 32768) >> 16) + 32768; + const int v = static_cast((28672 * r - 24010 * g - 4662 * b + 32768) >> 16) + 32768; + + dPtr->x = static_cast(std::min(std::max(u, 0), 65535)); + dPtr->y = static_cast(std::min(std::max(y, 0), 65535)); + dPtr->z = static_cast(std::min(std::max(v, 0), 65535)); + dPtr->w = rgba.w; + ++dPtr; + } + return true; + } + return false; + + case DXGI_FORMAT_YUY2: + if (size >= sizeof(XMUBYTEN4)) + { + XMUBYTEN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUBYTEN4) + 1); icount += sizeof(XMUBYTEN4)) + { + if (sPtr >= ePtr) break; + + XMUBYTEN4 rgb1; + XMStoreUByteN4(&rgb1, *sPtr++); + + // See AYUV + const int y0 = ((66 * rgb1.x + 129 * rgb1.y + 25 * rgb1.z + 128) >> 8) + 16; + const int u0 = ((-38 * rgb1.x - 74 * rgb1.y + 112 * rgb1.z + 128) >> 8) + 128; + const int v0 = ((112 * rgb1.x - 94 * rgb1.y - 18 * rgb1.z + 128) >> 8) + 128; + + XMUBYTEN4 rgb2 = {}; + if (sPtr < ePtr) + { + XMStoreUByteN4(&rgb2, *sPtr++); + } + + const int y1 = ((66 * rgb2.x + 129 * rgb2.y + 25 * rgb2.z + 128) >> 8) + 16; + const int u1 = ((-38 * rgb2.x - 74 * rgb2.y + 112 * rgb2.z + 128) >> 8) + 128; + const int v1 = ((112 * rgb2.x - 94 * rgb2.y - 18 * rgb2.z + 128) >> 8) + 128; + + dPtr->x = static_cast(std::min(std::max(y0, 0), 255)); + dPtr->y = static_cast(std::min(std::max((u0 + u1) >> 1, 0), 255)); + dPtr->z = static_cast(std::min(std::max(y1, 0), 255)); + dPtr->w = static_cast(std::min(std::max((v0 + v1) >> 1, 0), 255)); + ++dPtr; + } + return true; + } + return false; + + case DXGI_FORMAT_Y210: + // Same as Y216 with least significant 6 bits set to zero + if (size >= sizeof(XMUSHORTN4)) + { + XMUSHORTN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUSHORTN4) + 1); icount += sizeof(XMUSHORTN4)) + { + if (sPtr >= ePtr) break; + + XMUDECN4 rgb1; + XMStoreUDecN4(&rgb1, *sPtr++); + + // See Y410 + int64_t r = rgb1.x; + int64_t g = rgb1.y; + int64_t b = rgb1.z; + + const int y0 = static_cast((16780 * r + 32942 * g + 6544 * b + 32768) >> 16) + 64; + const int u0 = static_cast((-9683 * r - 19017 * g + 28700 * b + 32768) >> 16) + 512; + const int v0 = static_cast((28700 * r - 24033 * g - 4667 * b + 32768) >> 16) + 512; + + XMUDECN4 rgb2 = {}; + if (sPtr < ePtr) + { + XMStoreUDecN4(&rgb2, *sPtr++); + } + + r = rgb2.x; + g = rgb2.y; + b = rgb2.z; + + const int y1 = static_cast((16780 * r + 32942 * g + 6544 * b + 32768) >> 16) + 64; + const int u1 = static_cast((-9683 * r - 19017 * g + 28700 * b + 32768) >> 16) + 512; + const int v1 = static_cast((28700 * r - 24033 * g - 4667 * b + 32768) >> 16) + 512; + + dPtr->x = static_cast(std::min(std::max(y0, 0), 1023) << 6); + dPtr->y = static_cast(std::min(std::max((u0 + u1) >> 1, 0), 1023) << 6); + dPtr->z = static_cast(std::min(std::max(y1, 0), 1023) << 6); + dPtr->w = static_cast(std::min(std::max((v0 + v1) >> 1, 0), 1023) << 6); + ++dPtr; + } + return true; + } + return false; + + case DXGI_FORMAT_Y216: + if (size >= sizeof(XMUSHORTN4)) + { + XMUSHORTN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUSHORTN4) + 1); icount += sizeof(XMUSHORTN4)) + { + if (sPtr >= ePtr) break; + + XMUSHORTN4 rgb1; + XMStoreUShortN4(&rgb1, *sPtr++); + + // See Y416 + int64_t r = int64_t(rgb1.x); + int64_t g = int64_t(rgb1.y); + int64_t b = int64_t(rgb1.z); + + const int y0 = static_cast((16763 * r + 32910 * g + 6537 * b + 32768) >> 16) + 4096; + const int u0 = static_cast((-9674 * r - 18998 * g + 28672 * b + 32768) >> 16) + 32768; + const int v0 = static_cast((28672 * r - 24010 * g - 4662 * b + 32768) >> 16) + 32768; + + XMUSHORTN4 rgb2 = {}; + if (sPtr < ePtr) + { + XMStoreUShortN4(&rgb2, *sPtr++); + } + + r = int64_t(rgb2.x); + g = int64_t(rgb2.y); + b = int64_t(rgb2.z); + + const int y1 = static_cast((16763 * r + 32910 * g + 6537 * b + 32768) >> 16) + 4096; + const int u1 = static_cast((-9674 * r - 18998 * g + 28672 * b + 32768) >> 16) + 32768; + const int v1 = static_cast((28672 * r - 24010 * g - 4662 * b + 32768) >> 16) + 32768; + + dPtr->x = static_cast(std::min(std::max(y0, 0), 65535)); + dPtr->y = static_cast(std::min(std::max((u0 + u1) >> 1, 0), 65535)); + dPtr->z = static_cast(std::min(std::max(y1, 0), 65535)); + dPtr->w = static_cast(std::min(std::max((v0 + v1) >> 1, 0), 65535)); + ++dPtr; + } + return true; + } + return false; + + case DXGI_FORMAT_B4G4R4A4_UNORM: + if (size >= sizeof(XMUNIBBLE4)) + { + static const XMVECTORF32 s_Scale = { { { 15.f, 15.f, 15.f, 15.f } } }; + XMUNIBBLE4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUNIBBLE4) + 1); icount += sizeof(XMUNIBBLE4)) + { + if (sPtr >= ePtr) break; + XMVECTOR v = XMVectorSwizzle<2, 1, 0, 3>(*sPtr++); +#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__ + v = XMVectorMultiplyAdd(v, s_Scale, g_XMOneHalf); +#else + v = XMVectorMultiply(v, s_Scale); +#endif + XMStoreUNibble4(dPtr++, v); + } + return true; + } + return false; + + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + if (size >= sizeof(XMUNIBBLE4)) + { + static const XMVECTORF32 s_Scale = { { { 15.f, 15.f, 15.f, 15.f } } }; + XMUNIBBLE4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUNIBBLE4) + 1); icount += sizeof(XMUNIBBLE4)) + { + if (sPtr >= ePtr) break; + XMVECTOR v = XMVectorSwizzle<3, 2, 1, 0>(*sPtr++); +#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__ + v = XMVectorMultiplyAdd(v, s_Scale, g_XMOneHalf); +#else + v = XMVectorMultiply(v, s_Scale); +#endif + XMStoreUNibble4(dPtr++, v); + } + return true; + } + return false; + + case XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT: + // Xbox One specific 7e3 format with alpha + if (size >= sizeof(XMUDECN4)) + { + static const XMVECTORF32 Scale = { { { 1.0f, 1.0f, 1.0f, 3.0f } } }; + static const XMVECTORF32 C = { { { 31.875f, 31.875f, 31.875f, 3.f } } }; + + XMUDECN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUDECN4) + 1); icount += sizeof(XMUDECN4)) + { + if (sPtr >= ePtr) break; + + XMVECTOR V = XMVectorMultiply(*sPtr++, Scale); + V = XMVectorClamp(V, g_XMZero, C); + + XMFLOAT4A tmp; + XMStoreFloat4A(&tmp, V); + + dPtr->x = FloatTo7e3(tmp.x); + dPtr->y = FloatTo7e3(tmp.y); + dPtr->z = FloatTo7e3(tmp.z); + dPtr->w = static_cast(tmp.w); + ++dPtr; + } + return true; + } + return false; + + case XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT: + // Xbox One specific 6e4 format with alpha + if (size >= sizeof(XMUDECN4)) + { + static const XMVECTORF32 Scale = { { { 1.0f, 1.0f, 1.0f, 3.0f } } }; + static const XMVECTORF32 C = { { { 508.f, 508.f, 508.f, 3.f } } }; + + XMUDECN4 * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(XMUDECN4) + 1); icount += sizeof(XMUDECN4)) + { + if (sPtr >= ePtr) break; + + XMVECTOR V = XMVectorMultiply(*sPtr++, Scale); + V = XMVectorClamp(V, g_XMZero, C); + + XMFLOAT4A tmp; + XMStoreFloat4A(&tmp, V); + + dPtr->x = FloatTo6e4(tmp.x); + dPtr->y = FloatTo6e4(tmp.y); + dPtr->z = FloatTo6e4(tmp.z); + dPtr->w = static_cast(tmp.w); + ++dPtr; + } + return true; + } + return false; + + case XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM: + // Xbox One specific format + STORE_SCANLINE(XMXDECN4, XMStoreXDecN4) + + case XBOX_DXGI_FORMAT_R4G4_UNORM: + // Xbox One specific format + if (size >= sizeof(uint8_t)) + { + static const XMVECTORF32 s_Scale = { { { 15.f, 15.f, 0.f, 0.f } } }; + uint8_t * __restrict dPtr = static_cast(pDestination); + for (size_t icount = 0; icount < (size - sizeof(uint8_t) + 1); icount += sizeof(uint8_t)) + { + if (sPtr >= ePtr) break; +#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) || defined(_M_ARM64EC) || __arm__ || __aarch64__ + const XMVECTOR v = XMVectorMultiplyAdd(*sPtr++, s_Scale, g_XMOneHalf); +#else + const XMVECTOR v = XMVectorMultiply(*sPtr++, s_Scale); +#endif + XMUNIBBLE4 nibble; + XMStoreUNibble4(&nibble, v); + *dPtr = static_cast(nibble.v); + ++dPtr; + } + return true; + } + return false; + + // We don't support the planar or palettized formats + + default: + return false; + } +} + +#undef STORE_SCANLINE + + +//------------------------------------------------------------------------------------- +// Convert DXGI image to/from GUID_WICPixelFormat128bppRGBAFloat (no range conversions) +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Internal::ConvertToR32G32B32A32(const Image& srcImage, ScratchImage& image) noexcept +{ + if (!srcImage.pixels) + return E_POINTER; + + HRESULT hr = image.Initialize2D(DXGI_FORMAT_R32G32B32A32_FLOAT, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + uint8_t* pDest = img->pixels; + if (!pDest) + { + image.Release(); + return E_POINTER; + } + + const uint8_t *pSrc = srcImage.pixels; + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanline(reinterpret_cast(pDest), srcImage.width, pSrc, srcImage.rowPitch, srcImage.format)) + { + image.Release(); + return E_FAIL; + } + + pSrc += srcImage.rowPitch; + pDest += img->rowPitch; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::Internal::ConvertFromR32G32B32A32(const Image& srcImage, const Image& destImage) noexcept +{ + assert(srcImage.format == DXGI_FORMAT_R32G32B32A32_FLOAT); + + if (!srcImage.pixels || !destImage.pixels) + return E_POINTER; + + if (srcImage.width != destImage.width || srcImage.height != destImage.height) + return E_FAIL; + + const uint8_t *pSrc = srcImage.pixels; + uint8_t* pDest = destImage.pixels; + + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!StoreScanline(pDest, destImage.rowPitch, destImage.format, reinterpret_cast(pSrc), srcImage.width)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::Internal::ConvertFromR32G32B32A32( + const Image& srcImage, + DXGI_FORMAT format, + ScratchImage& image) noexcept +{ + if (!srcImage.pixels) + return E_POINTER; + + HRESULT hr = image.Initialize2D(format, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + hr = ConvertFromR32G32B32A32(srcImage, *img); + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::Internal::ConvertFromR32G32B32A32( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + DXGI_FORMAT format, + ScratchImage& result) noexcept +{ + if (!srcImages) + return E_POINTER; + + result.Release(); + + assert(metadata.format == DXGI_FORMAT_R32G32B32A32_FLOAT); + + TexMetadata mdata2 = metadata; + mdata2.format = format; + HRESULT hr = result.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + if (nimages != result.GetImageCount()) + { + result.Release(); + return E_FAIL; + } + + const Image* dest = result.GetImages(); + if (!dest) + { + result.Release(); + return E_POINTER; + } + + for (size_t index = 0; index < nimages; ++index) + { + const Image& src = srcImages[index]; + const Image& dst = dest[index]; + + assert(src.format == DXGI_FORMAT_R32G32B32A32_FLOAT); + assert(dst.format == format); + + if (src.width != dst.width || src.height != dst.height) + { + result.Release(); + return E_FAIL; + } + + const uint8_t* pSrc = src.pixels; + uint8_t* pDest = dst.pixels; + if (!pSrc || !pDest) + { + result.Release(); + return E_POINTER; + } + + for (size_t h = 0; h < src.height; ++h) + { + if (!StoreScanline(pDest, dst.rowPitch, format, reinterpret_cast(pSrc), src.width)) + { + result.Release(); + return E_FAIL; + } + + pSrc += src.rowPitch; + pDest += dst.rowPitch; + } + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Convert DXGI image to/from GUID_WICPixelFormat64bppRGBAHalf (no range conversions) +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Internal::ConvertToR16G16B16A16(const Image& srcImage, ScratchImage& image) noexcept +{ + if (!srcImage.pixels) + return E_POINTER; + + HRESULT hr = image.Initialize2D(DXGI_FORMAT_R16G16B16A16_FLOAT, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + auto scanline = make_AlignedArrayXMVECTOR(srcImage.width); + if (!scanline) + { + image.Release(); + return E_OUTOFMEMORY; + } + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + uint8_t* pDest = img->pixels; + if (!pDest) + { + image.Release(); + return E_POINTER; + } + + const uint8_t *pSrc = srcImage.pixels; + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanline(scanline.get(), srcImage.width, pSrc, srcImage.rowPitch, srcImage.format)) + { + image.Release(); + return E_FAIL; + } + + XMConvertFloatToHalfStream( + reinterpret_cast(pDest), sizeof(HALF), + reinterpret_cast(scanline.get()), sizeof(float), + srcImage.width * 4); + + pSrc += srcImage.rowPitch; + pDest += img->rowPitch; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::Internal::ConvertFromR16G16B16A16(const Image& srcImage, const Image& destImage) noexcept +{ + assert(srcImage.format == DXGI_FORMAT_R16G16B16A16_FLOAT); + + if (!srcImage.pixels || !destImage.pixels) + return E_POINTER; + + if (srcImage.width != destImage.width || srcImage.height != destImage.height) + return E_FAIL; + + auto scanline = make_AlignedArrayXMVECTOR(srcImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + const uint8_t *pSrc = srcImage.pixels; + uint8_t* pDest = destImage.pixels; + + for (size_t h = 0; h < srcImage.height; ++h) + { + XMConvertHalfToFloatStream( + reinterpret_cast(scanline.get()), sizeof(float), + reinterpret_cast(pSrc), sizeof(HALF), + srcImage.width * 4); + + if (!StoreScanline(pDest, destImage.rowPitch, destImage.format, scanline.get(), srcImage.width)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Convert from Linear RGB to sRGB +// +// if C_linear <= 0.0031308 -> C_srgb = 12.92 * C_linear +// if C_linear > 0.0031308 -> C_srgb = ( 1 + a ) * pow( C_Linear, 1 / 2.4 ) - a +// where a = 0.055 +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::Internal::StoreScanlineLinear( + void* pDestination, + size_t size, + DXGI_FORMAT format, + XMVECTOR* pSource, + size_t count, + TEX_FILTER_FLAGS flags, + float threshold) noexcept +{ + if (!pSource || !count) + return false; + + assert((reinterpret_cast(pSource) & 0xF) == 0); + + switch (static_cast(format)) + { + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + flags |= TEX_FILTER_SRGB; + break; + + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B4G4R4A4_UNORM: + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + break; + + default: + // can't treat A8, XR, Depth, SNORM, UINT, or SINT as sRGB + flags &= ~TEX_FILTER_SRGB; + break; + } + + // sRGB output processing (Linear RGB -> sRGB) + if (flags & TEX_FILTER_SRGB_OUT) + { + // To avoid the need for another temporary scanline buffer, we allow this function to overwrite the source buffer in-place + // Given the intended usage in the filtering routines, this is not a problem. + XMVECTOR* ptr = pSource; + for (size_t i = 0; i < count; ++i, ++ptr) + { + *ptr = XMColorRGBToSRGB(*ptr); + } + } + + return StoreScanline(pDestination, size, format, pSource, count, threshold); +} + + +//------------------------------------------------------------------------------------- +// Convert from sRGB to Linear RGB +// +// if C_srgb <= 0.04045 -> C_linear = C_srgb / 12.92 +// if C_srgb > 0.04045 -> C_linear = pow( ( C_srgb + a ) / ( 1 + a ), 2.4 ) +// where a = 0.055 +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::Internal::LoadScanlineLinear( + XMVECTOR* pDestination, + size_t count, + const void* pSource, + size_t size, + DXGI_FORMAT format, + TEX_FILTER_FLAGS flags) noexcept +{ + switch (static_cast(format)) + { + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + flags |= TEX_FILTER_SRGB; + break; + + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B4G4R4A4_UNORM: + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + break; + + default: + // can't treat A8, XR, Depth, SNORM, UINT, or SINT as sRGB + flags &= ~TEX_FILTER_SRGB; + break; + } + + if (LoadScanline(pDestination, count, pSource, size, format)) + { + // sRGB input processing (sRGB -> Linear RGB) + if (flags & TEX_FILTER_SRGB_IN) + { + XMVECTOR* ptr = pDestination; + for (size_t i = 0; i < count; ++i, ++ptr) + { + *ptr = XMColorSRGBToRGB(*ptr); + } + } + + return true; + } + + return false; +} + + +//------------------------------------------------------------------------------------- +// Convert scanline based on source/target formats +//------------------------------------------------------------------------------------- +namespace +{ + struct ConvertData + { + DXGI_FORMAT format; + size_t datasize; + uint32_t flags; + }; + + const ConvertData g_ConvertTable[] = + { + { DXGI_FORMAT_R32G32B32A32_FLOAT, 32, CONVF_FLOAT | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R32G32B32A32_UINT, 32, CONVF_UINT | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R32G32B32A32_SINT, 32, CONVF_SINT | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R32G32B32_FLOAT, 32, CONVF_FLOAT | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_R32G32B32_UINT, 32, CONVF_UINT | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_R32G32B32_SINT, 32, CONVF_SINT | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_R16G16B16A16_FLOAT, 16, CONVF_FLOAT | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R16G16B16A16_UNORM, 16, CONVF_UNORM | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R16G16B16A16_UINT, 16, CONVF_UINT | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R16G16B16A16_SNORM, 16, CONVF_SNORM | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R16G16B16A16_SINT, 16, CONVF_SINT | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R32G32_FLOAT, 32, CONVF_FLOAT | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R32G32_UINT, 32, CONVF_UINT | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R32G32_SINT, 32, CONVF_SINT | CONVF_R | CONVF_G }, + { DXGI_FORMAT_D32_FLOAT_S8X24_UINT, 32, CONVF_FLOAT | CONVF_DEPTH | CONVF_STENCIL }, + { DXGI_FORMAT_R10G10B10A2_UNORM, 10, CONVF_UNORM | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R10G10B10A2_UINT, 10, CONVF_UINT | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R11G11B10_FLOAT, 10, CONVF_FLOAT | CONVF_POS_ONLY | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_R8G8B8A8_UNORM, 8, CONVF_UNORM | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, 8, CONVF_UNORM | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R8G8B8A8_UINT, 8, CONVF_UINT | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R8G8B8A8_SNORM, 8, CONVF_SNORM | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R8G8B8A8_SINT, 8, CONVF_SINT | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_R16G16_FLOAT, 16, CONVF_FLOAT | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R16G16_UNORM, 16, CONVF_UNORM | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R16G16_UINT, 16, CONVF_UINT | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R16G16_SNORM, 16, CONVF_SNORM | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R16G16_SINT, 16, CONVF_SINT | CONVF_R | CONVF_G }, + { DXGI_FORMAT_D32_FLOAT, 32, CONVF_FLOAT | CONVF_DEPTH }, + { DXGI_FORMAT_R32_FLOAT, 32, CONVF_FLOAT | CONVF_R }, + { DXGI_FORMAT_R32_UINT, 32, CONVF_UINT | CONVF_R }, + { DXGI_FORMAT_R32_SINT, 32, CONVF_SINT | CONVF_R }, + { DXGI_FORMAT_D24_UNORM_S8_UINT, 32, CONVF_UNORM | CONVF_DEPTH | CONVF_STENCIL }, + { DXGI_FORMAT_R8G8_UNORM, 8, CONVF_UNORM | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R8G8_UINT, 8, CONVF_UINT | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R8G8_SNORM, 8, CONVF_SNORM | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R8G8_SINT, 8, CONVF_SINT | CONVF_R | CONVF_G }, + { DXGI_FORMAT_R16_FLOAT, 16, CONVF_FLOAT | CONVF_R }, + { DXGI_FORMAT_D16_UNORM, 16, CONVF_UNORM | CONVF_DEPTH }, + { DXGI_FORMAT_R16_UNORM, 16, CONVF_UNORM | CONVF_R }, + { DXGI_FORMAT_R16_UINT, 16, CONVF_UINT | CONVF_R }, + { DXGI_FORMAT_R16_SNORM, 16, CONVF_SNORM | CONVF_R }, + { DXGI_FORMAT_R16_SINT, 16, CONVF_SINT | CONVF_R }, + { DXGI_FORMAT_R8_UNORM, 8, CONVF_UNORM | CONVF_R }, + { DXGI_FORMAT_R8_UINT, 8, CONVF_UINT | CONVF_R }, + { DXGI_FORMAT_R8_SNORM, 8, CONVF_SNORM | CONVF_R }, + { DXGI_FORMAT_R8_SINT, 8, CONVF_SINT | CONVF_R }, + { DXGI_FORMAT_A8_UNORM, 8, CONVF_UNORM | CONVF_A }, + { DXGI_FORMAT_R1_UNORM, 1, CONVF_UNORM | CONVF_R }, + { DXGI_FORMAT_R9G9B9E5_SHAREDEXP, 9, CONVF_FLOAT | CONVF_SHAREDEXP | CONVF_POS_ONLY | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_R8G8_B8G8_UNORM, 8, CONVF_UNORM | CONVF_PACKED | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_G8R8_G8B8_UNORM, 8, CONVF_UNORM | CONVF_PACKED | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_BC1_UNORM, 8, CONVF_UNORM | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_BC1_UNORM_SRGB, 8, CONVF_UNORM | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_BC2_UNORM, 8, CONVF_UNORM | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_BC2_UNORM_SRGB, 8, CONVF_UNORM | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_BC3_UNORM, 8, CONVF_UNORM | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_BC3_UNORM_SRGB, 8, CONVF_UNORM | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_BC4_UNORM, 8, CONVF_UNORM | CONVF_BC | CONVF_R }, + { DXGI_FORMAT_BC4_SNORM, 8, CONVF_SNORM | CONVF_BC | CONVF_R }, + { DXGI_FORMAT_BC5_UNORM, 8, CONVF_UNORM | CONVF_BC | CONVF_R | CONVF_G }, + { DXGI_FORMAT_BC5_SNORM, 8, CONVF_SNORM | CONVF_BC | CONVF_R | CONVF_G }, + { DXGI_FORMAT_B5G6R5_UNORM, 5, CONVF_UNORM | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_B5G5R5A1_UNORM, 5, CONVF_UNORM | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_B8G8R8A8_UNORM, 8, CONVF_UNORM | CONVF_BGR | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_B8G8R8X8_UNORM, 8, CONVF_UNORM | CONVF_BGR | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM, 10, CONVF_UNORM | CONVF_XR | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, 8, CONVF_UNORM | CONVF_BGR | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, 8, CONVF_UNORM | CONVF_BGR | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_BC6H_UF16, 16, CONVF_FLOAT | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_BC6H_SF16, 16, CONVF_FLOAT | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_BC7_UNORM, 8, CONVF_UNORM | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_BC7_UNORM_SRGB, 8, CONVF_UNORM | CONVF_BC | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_AYUV, 8, CONVF_UNORM | CONVF_YUV | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_Y410, 10, CONVF_UNORM | CONVF_YUV | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_Y416, 16, CONVF_UNORM | CONVF_YUV | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { DXGI_FORMAT_YUY2, 8, CONVF_UNORM | CONVF_YUV | CONVF_PACKED | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_Y210, 10, CONVF_UNORM | CONVF_YUV | CONVF_PACKED | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_Y216, 16, CONVF_UNORM | CONVF_YUV | CONVF_PACKED | CONVF_R | CONVF_G | CONVF_B }, + { DXGI_FORMAT_B4G4R4A4_UNORM, 4, CONVF_UNORM | CONVF_BGR | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT, 10, CONVF_FLOAT | CONVF_POS_ONLY | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT, 10, CONVF_FLOAT | CONVF_POS_ONLY | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM,10, CONVF_SNORM | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + { XBOX_DXGI_FORMAT_R4G4_UNORM, 4, CONVF_UNORM | CONVF_R | CONVF_G }, + { WIN11_DXGI_FORMAT_A4B4G4R4_UNORM, 4, CONVF_UNORM | CONVF_BGR | CONVF_R | CONVF_G | CONVF_B | CONVF_A }, + }; + +#pragma prefast( suppress : 25004, "Signature must match bsearch" ); + int __cdecl ConvertCompare(const void* ptr1, const void *ptr2) noexcept + { + auto p1 = static_cast(ptr1); + auto p2 = static_cast(ptr2); + if (p1->format == p2->format) return 0; + else return (p1->format < p2->format) ? -1 : 1; + } +} + +_Use_decl_annotations_ +uint32_t DirectX::Internal::GetConvertFlags(DXGI_FORMAT format) noexcept +{ +#ifdef _DEBUG + // Ensure conversion table is in ascending order + assert(std::size(g_ConvertTable) > 0); + DXGI_FORMAT lastvalue = g_ConvertTable[0].format; + for (size_t index = 1; index < std::size(g_ConvertTable); ++index) + { + assert(g_ConvertTable[index].format > lastvalue); + lastvalue = g_ConvertTable[index].format; + } +#endif + + ConvertData key = { format, 0, 0 }; + auto in = reinterpret_cast(bsearch(&key, g_ConvertTable, std::size(g_ConvertTable), sizeof(ConvertData), + ConvertCompare)); + return (in) ? in->flags : 0; +} + +_Use_decl_annotations_ +void DirectX::Internal::ConvertScanline( + XMVECTOR* pBuffer, + size_t count, + DXGI_FORMAT outFormat, + DXGI_FORMAT inFormat, + TEX_FILTER_FLAGS flags) noexcept +{ + assert(pBuffer && count > 0 && ((reinterpret_cast(pBuffer) & 0xF) == 0)); + assert(IsValid(outFormat) && !IsTypeless(outFormat) && !IsPlanar(outFormat) && !IsPalettized(outFormat)); + assert(IsValid(inFormat) && !IsTypeless(inFormat) && !IsPlanar(inFormat) && !IsPalettized(inFormat)); + + if (!pBuffer) + return; + +#ifdef _DEBUG + // Ensure conversion table is in ascending order + assert(std::size(g_ConvertTable) > 0); + DXGI_FORMAT lastvalue = g_ConvertTable[0].format; + for (size_t index = 1; index < std::size(g_ConvertTable); ++index) + { + assert(g_ConvertTable[index].format > lastvalue); + lastvalue = g_ConvertTable[index].format; + } +#endif + + // Determine conversion details about source and dest formats + ConvertData key = { inFormat, 0, 0 }; + auto in = reinterpret_cast( + bsearch(&key, g_ConvertTable, std::size(g_ConvertTable), sizeof(ConvertData), ConvertCompare)); + key.format = outFormat; + auto out = reinterpret_cast( + bsearch(&key, g_ConvertTable, std::size(g_ConvertTable), sizeof(ConvertData), ConvertCompare)); + if (!in || !out) + { + assert(false); + return; + } + + assert(GetConvertFlags(inFormat) == in->flags); + assert(GetConvertFlags(outFormat) == out->flags); + + // Handle SRGB filtering modes + switch (inFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_BC7_UNORM_SRGB: + flags |= TEX_FILTER_SRGB_IN; + break; + + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + flags &= ~TEX_FILTER_SRGB_IN; + break; + + default: + break; + } + + switch (outFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_BC7_UNORM_SRGB: + flags |= TEX_FILTER_SRGB_OUT; + break; + + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + flags &= ~TEX_FILTER_SRGB_OUT; + break; + + default: + break; + } + + if ((flags & (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT)) == (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT)) + { + flags &= ~(TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT); + } + + // sRGB input processing (sRGB -> Linear RGB) + if (flags & TEX_FILTER_SRGB_IN) + { + if (!(in->flags & CONVF_DEPTH) && ((in->flags & CONVF_FLOAT) || (in->flags & CONVF_UNORM))) + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i, ++ptr) + { + *ptr = XMColorSRGBToRGB(*ptr); + } + } + } + + // Handle conversion special cases + const uint32_t diffFlags = in->flags ^ out->flags; + if (diffFlags != 0) + { + if (diffFlags & CONVF_DEPTH) + { + //--- Depth conversions --- + if (in->flags & CONVF_DEPTH) + { + // CONVF_DEPTH -> !CONVF_DEPTH + if (in->flags & CONVF_STENCIL) + { + // Stencil -> Alpha + static const XMVECTORF32 S = { { { 1.f, 1.f, 1.f, 255.f } } }; + + if (out->flags & CONVF_UNORM) + { + // UINT -> UNORM + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + XMVECTOR v1 = XMVectorSplatY(v); + v1 = XMVectorClamp(v1, g_XMZero, S); + v1 = XMVectorDivide(v1, S); + *ptr++ = XMVectorSelect(v1, v, g_XMSelect1110); + } + } + else if (out->flags & CONVF_SNORM) + { + // UINT -> SNORM + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + XMVECTOR v1 = XMVectorSplatY(v); + v1 = XMVectorClamp(v1, g_XMZero, S); + v1 = XMVectorDivide(v1, S); + v1 = XMVectorMultiplyAdd(v1, g_XMTwo, g_XMNegativeOne); + *ptr++ = XMVectorSelect(v1, v, g_XMSelect1110); + } + } + else + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatY(v); + *ptr++ = XMVectorSelect(v1, v, g_XMSelect1110); + } + } + } + + // Depth -> RGB + if ((out->flags & CONVF_UNORM) && (in->flags & CONVF_FLOAT)) + { + // Depth FLOAT -> UNORM + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + XMVECTOR v1 = XMVectorSaturate(v); + v1 = XMVectorSplatX(v1); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1110); + } + } + else if (out->flags & CONVF_SNORM) + { + if (in->flags & CONVF_UNORM) + { + // Depth UNORM -> SNORM + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + XMVECTOR v1 = XMVectorMultiplyAdd(v, g_XMTwo, g_XMNegativeOne); + v1 = XMVectorSplatX(v1); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1110); + } + } + else + { + // Depth FLOAT -> SNORM + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + XMVECTOR v1 = XMVectorClamp(v, g_XMNegativeOne, g_XMOne); + v1 = XMVectorSplatX(v1); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1110); + } + } + } + else + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatX(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1110); + } + } + } + else + { + // !CONVF_DEPTH -> CONVF_DEPTH + + // RGB -> Depth (red channel or other specified channel) + switch (flags & (TEX_FILTER_RGB_COPY_RED | TEX_FILTER_RGB_COPY_GREEN | TEX_FILTER_RGB_COPY_BLUE | TEX_FILTER_RGB_COPY_ALPHA)) + { + case TEX_FILTER_RGB_COPY_GREEN: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatY(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1000); + } + } + break; + + case TEX_FILTER_RGB_COPY_BLUE: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatZ(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1000); + } + } + break; + + case TEX_FILTER_RGB_COPY_ALPHA: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatW(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1000); + } + } + break; + + default: + if ((in->flags & CONVF_UNORM) && ((in->flags & CONVF_RGB_MASK) == (CONVF_R | CONVF_G | CONVF_B))) + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVector3Dot(v, g_Grayscale); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1000); + } + break; + } + + #if (__cplusplus >= 201703L) + [[fallthrough]]; + #elif defined(__clang__) + [[clang::fallthrough]]; + #elif defined(_MSC_VER) + __fallthrough; + #endif + + case TEX_FILTER_RGB_COPY_RED: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatX(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1000); + } + } + break; + } + + // Finialize type conversion for depth (red channel) + if (out->flags & CONVF_UNORM) + { + if (in->flags & CONVF_SNORM) + { + // SNORM -> UNORM + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorMultiplyAdd(v, g_XMOneHalf, g_XMOneHalf); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1000); + } + } + else if (in->flags & CONVF_FLOAT) + { + // FLOAT -> UNORM + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSaturate(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1000); + } + } + } + + if (out->flags & CONVF_STENCIL) + { + // Alpha -> Stencil (green channel) + static const XMVECTORU32 select0100 = { { { XM_SELECT_0, XM_SELECT_1, XM_SELECT_0, XM_SELECT_0 } } }; + static const XMVECTORF32 S = { { { 255.f, 255.f, 255.f, 255.f } } }; + + if (in->flags & CONVF_UNORM) + { + // UNORM -> UINT + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + XMVECTOR v1 = XMVectorMultiply(v, S); + v1 = XMVectorSplatW(v1); + *ptr++ = XMVectorSelect(v, v1, select0100); + } + } + else if (in->flags & CONVF_SNORM) + { + // SNORM -> UINT + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + XMVECTOR v1 = XMVectorMultiplyAdd(v, g_XMOneHalf, g_XMOneHalf); + v1 = XMVectorMultiply(v1, S); + v1 = XMVectorSplatW(v1); + *ptr++ = XMVectorSelect(v, v1, select0100); + } + } + else + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatW(v); + *ptr++ = XMVectorSelect(v, v1, select0100); + } + } + } + } + } + else if (out->flags & CONVF_DEPTH) + { + // CONVF_DEPTH -> CONVF_DEPTH + if (diffFlags & CONVF_FLOAT) + { + if (in->flags & CONVF_FLOAT) + { + // FLOAT -> UNORM depth, preserve stencil + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSaturate(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1000); + } + } + } + } + else if (out->flags & CONVF_UNORM) + { + //--- Converting to a UNORM --- + if (in->flags & CONVF_SNORM) + { + // SNORM -> UNORM + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorMultiplyAdd(v, g_XMOneHalf, g_XMOneHalf); + } + } + else if (in->flags & CONVF_FLOAT) + { + XMVECTOR* ptr = pBuffer; + if (!(in->flags & CONVF_POS_ONLY) && (flags & TEX_FILTER_FLOAT_X2BIAS)) + { + // FLOAT -> UNORM (x2 bias) + for (size_t i = 0; i < count; ++i) + { + XMVECTOR v = *ptr; + v = XMVectorClamp(v, g_XMNegativeOne, g_XMOne); + *ptr++ = XMVectorMultiplyAdd(v, g_XMOneHalf, g_XMOneHalf); + } + } + else + { + // FLOAT -> UNORM + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorSaturate(v); + } + } + } + } + else if (out->flags & CONVF_SNORM) + { + //--- Converting to a SNORM --- + if (in->flags & CONVF_UNORM) + { + // UNORM -> SNORM + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorMultiplyAdd(v, g_XMTwo, g_XMNegativeOne); + } + } + else if (in->flags & CONVF_FLOAT) + { + XMVECTOR* ptr = pBuffer; + if ((in->flags & CONVF_POS_ONLY) && (flags & TEX_FILTER_FLOAT_X2BIAS)) + { + // FLOAT (positive only, x2 bias) -> SNORM + for (size_t i = 0; i < count; ++i) + { + XMVECTOR v = *ptr; + v = XMVectorSaturate(v); + *ptr++ = XMVectorMultiplyAdd(v, g_XMTwo, g_XMNegativeOne); + } + } + else + { + // FLOAT -> SNORM + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorClamp(v, g_XMNegativeOne, g_XMOne); + } + } + } + } + else if (diffFlags & CONVF_UNORM) + { + //--- Converting from a UNORM --- + assert(in->flags & CONVF_UNORM); + if (out->flags & CONVF_FLOAT) + { + if (!(out->flags & CONVF_POS_ONLY) && (flags & TEX_FILTER_FLOAT_X2BIAS)) + { + // UNORM (x2 bias) -> FLOAT + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorMultiplyAdd(v, g_XMTwo, g_XMNegativeOne); + } + } + } + } + else if (diffFlags & CONVF_POS_ONLY) + { + if (flags & TEX_FILTER_FLOAT_X2BIAS) + { + if (in->flags & CONVF_POS_ONLY) + { + if (out->flags & CONVF_FLOAT) + { + // FLOAT (positive only, x2 bias) -> FLOAT + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + XMVECTOR v = *ptr; + v = XMVectorSaturate(v); + *ptr++ = XMVectorMultiplyAdd(v, g_XMTwo, g_XMNegativeOne); + } + } + } + else if (out->flags & CONVF_POS_ONLY) + { + if (in->flags & CONVF_FLOAT) + { + // FLOAT -> FLOAT (positive only, x2 bias) + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + XMVECTOR v = *ptr; + v = XMVectorClamp(v, g_XMNegativeOne, g_XMOne); + *ptr++ = XMVectorMultiplyAdd(v, g_XMOneHalf, g_XMOneHalf); + } + } + else if (in->flags & CONVF_SNORM) + { + // SNORM -> FLOAT (positive only, x2 bias) + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorMultiplyAdd(v, g_XMOneHalf, g_XMOneHalf); + } + } + } + } + } + + // !CONVF_A -> CONVF_A is handled because LoadScanline ensures alpha defaults to 1.0 for no-alpha formats + + // CONVF_PACKED cases are handled because LoadScanline/StoreScanline handles packing/unpacking + + if (((out->flags & CONVF_RGBA_MASK) == CONVF_A) && !(in->flags & CONVF_A)) + { + // !CONVF_A -> A format + // We ignore TEX_FILTER_RGB_COPY_ALPHA since there's no input alpha channel. + switch (flags & (TEX_FILTER_RGB_COPY_RED | TEX_FILTER_RGB_COPY_GREEN | TEX_FILTER_RGB_COPY_BLUE)) + { + case TEX_FILTER_RGB_COPY_GREEN: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorSplatY(v); + } + } + break; + + case TEX_FILTER_RGB_COPY_BLUE: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorSplatZ(v); + } + } + break; + + default: + if ((in->flags & CONVF_UNORM) && ((in->flags & CONVF_RGB_MASK) == (CONVF_R | CONVF_G | CONVF_B))) + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVector3Dot(v, g_Grayscale); + } + break; + } + + #if (__cplusplus >= 201703L) + [[fallthrough]]; + #elif defined(__clang__) + [[clang::fallthrough]]; + #elif defined(_MSC_VER) + __fallthrough; + #endif + + case TEX_FILTER_RGB_COPY_RED: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorSplatX(v); + } + } + break; + } + } + else if (((in->flags & CONVF_RGBA_MASK) == CONVF_A) && !(out->flags & CONVF_A)) + { + // A format -> !CONVF_A + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + *ptr++ = XMVectorSplatW(v); + } + } + else if ((in->flags & CONVF_RGB_MASK) == CONVF_R) + { + if ((out->flags & CONVF_RGB_MASK) == (CONVF_R | CONVF_G | CONVF_B)) + { + // R format -> RGB format + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatX(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1110); + } + } + else if ((out->flags & CONVF_RGB_MASK) == (CONVF_R | CONVF_G)) + { + // R format -> RG format + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatX(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1100); + } + } + } + else if ((in->flags & CONVF_RGB_MASK) == (CONVF_R | CONVF_G | CONVF_B)) + { + if ((out->flags & CONVF_RGB_MASK) == CONVF_R) + { + // RGB(A) format -> R format + switch (flags & (TEX_FILTER_RGB_COPY_RED | TEX_FILTER_RGB_COPY_GREEN | TEX_FILTER_RGB_COPY_BLUE | TEX_FILTER_RGB_COPY_ALPHA)) + { + case TEX_FILTER_RGB_COPY_GREEN: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatY(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1110); + } + } + break; + + case TEX_FILTER_RGB_COPY_BLUE: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatZ(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1110); + } + } + break; + + case TEX_FILTER_RGB_COPY_ALPHA: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSplatW(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1110); + } + } + break; + + default: + if (in->flags & CONVF_UNORM) + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVector3Dot(v, g_Grayscale); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1110); + } + break; + } + + #if (__cplusplus >= 201703L) + [[fallthrough]]; + #elif defined(__clang__) + [[clang::fallthrough]]; + #elif defined(_MSC_VER) + __fallthrough; + #endif + + case TEX_FILTER_RGB_COPY_RED: + // Leave data unchanged and the store will handle this... + break; + } + } + else if ((out->flags & CONVF_RGB_MASK) == (CONVF_R | CONVF_G)) + { + if ((flags & TEX_FILTER_RGB_COPY_ALPHA) && (in->flags & CONVF_A)) + { + // RGBA -> RG format + switch (static_cast(flags & (TEX_FILTER_RGB_COPY_RED | TEX_FILTER_RGB_COPY_GREEN | TEX_FILTER_RGB_COPY_BLUE | TEX_FILTER_RGB_COPY_ALPHA))) + { + case (static_cast(TEX_FILTER_RGB_COPY_RED) | static_cast(TEX_FILTER_RGB_COPY_ALPHA)): + default: + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSwizzle<0, 3, 0, 3>(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1100); + } + } + break; + + case (static_cast(TEX_FILTER_RGB_COPY_GREEN) | static_cast(TEX_FILTER_RGB_COPY_ALPHA)): + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSwizzle<1, 3, 1, 3>(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1100); + } + } + break; + + case (static_cast(TEX_FILTER_RGB_COPY_BLUE) | static_cast(TEX_FILTER_RGB_COPY_ALPHA)): + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSwizzle<2, 3, 2, 3>(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1100); + } + } + break; + } + } + else + { + // RGB format -> RG format + switch (static_cast(flags & (TEX_FILTER_RGB_COPY_RED | TEX_FILTER_RGB_COPY_GREEN | TEX_FILTER_RGB_COPY_BLUE))) + { + case (static_cast(TEX_FILTER_RGB_COPY_RED) | static_cast(TEX_FILTER_RGB_COPY_BLUE)): + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSwizzle<0, 2, 0, 2>(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1100); + } + } + break; + + case (static_cast(TEX_FILTER_RGB_COPY_GREEN) | static_cast(TEX_FILTER_RGB_COPY_BLUE)): + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i) + { + const XMVECTOR v = *ptr; + const XMVECTOR v1 = XMVectorSwizzle<1, 2, 3, 0>(v); + *ptr++ = XMVectorSelect(v, v1, g_XMSelect1100); + } + } + break; + + case (static_cast(TEX_FILTER_RGB_COPY_RED) | static_cast(TEX_FILTER_RGB_COPY_GREEN)): + default: + // Leave data unchanged and the store will handle this... + break; + } + } + } + } + } + + // sRGB output processing (Linear RGB -> sRGB) + if (flags & TEX_FILTER_SRGB_OUT) + { + if (!(out->flags & CONVF_DEPTH) && ((out->flags & CONVF_FLOAT) || (out->flags & CONVF_UNORM))) + { + XMVECTOR* ptr = pBuffer; + for (size_t i = 0; i < count; ++i, ++ptr) + { + *ptr = XMColorRGBToSRGB(*ptr); + } + } + } +} + + +//------------------------------------------------------------------------------------- +// Dithering +//------------------------------------------------------------------------------------- +namespace +{ + // 4X4X4 ordered dithering matrix + const float g_Dither[] = + { + // (z & 3) + ( (y & 3) * 8) + (x & 3) + 0.468750f, -0.031250f, 0.343750f, -0.156250f, 0.468750f, -0.031250f, 0.343750f, -0.156250f, + -0.281250f, 0.218750f, -0.406250f, 0.093750f, -0.281250f, 0.218750f, -0.406250f, 0.093750f, + 0.281250f, -0.218750f, 0.406250f, -0.093750f, 0.281250f, -0.218750f, 0.406250f, -0.093750f, + -0.468750f, 0.031250f, -0.343750f, 0.156250f, -0.468750f, 0.031250f, -0.343750f, 0.156250f, + }; + + const XMVECTORF32 g_Scale16pc = { { { 65535.f, 65535.f, 65535.f, 65535.f } } }; + const XMVECTORF32 g_Scale15pc = { { { 32767.f, 32767.f, 32767.f, 32767.f } } }; + const XMVECTORF32 g_Scale10pc = { { { 1023.f, 1023.f, 1023.f, 3.f } } }; + const XMVECTORF32 g_Scale9pc = { { { 511.f, 511.f, 511.f, 3.f } } }; + const XMVECTORF32 g_Scale8pc = { { { 255.f, 255.f, 255.f, 255.f } } }; + const XMVECTORF32 g_Scale7pc = { { { 127.f, 127.f, 127.f, 127.f } } }; + const XMVECTORF32 g_Scale565pc = { { { 31.f, 63.f, 31.f, 1.f } } }; + const XMVECTORF32 g_Scale5551pc = { { { 31.f, 31.f, 31.f, 1.f } } }; + const XMVECTORF32 g_Scale4pc = { { { 15.f, 15.f, 15.f, 15.f } } }; + + const XMVECTORF32 g_ErrorWeight3 = { { { 3.f / 16.f, 3.f / 16.f, 3.f / 16.f, 3.f / 16.f } } }; + const XMVECTORF32 g_ErrorWeight5 = { { { 5.f / 16.f, 5.f / 16.f, 5.f / 16.f, 5.f / 16.f } } }; + const XMVECTORF32 g_ErrorWeight1 = { { { 1.f / 16.f, 1.f / 16.f, 1.f / 16.f, 1.f / 16.f } } }; + const XMVECTORF32 g_ErrorWeight7 = { { { 7.f / 16.f, 7.f / 16.f, 7.f / 16.f, 7.f / 16.f } } }; + +#define STORE_SCANLINE( type, scalev, clampzero, norm, itype, mask, row, bgr ) \ + if (size >= sizeof(type)) \ + { \ + type * __restrict dest = reinterpret_cast(pDestination); \ + for(size_t i = 0; i < count; ++i) \ + { \ + auto index = static_cast((row & 1) ? (count - i - 1) : i ); \ + ptrdiff_t delta = (row & 1) ? -2 : 0; \ + \ + XMVECTOR v = sPtr[ index ]; \ + if (bgr) { v = XMVectorSwizzle<2, 1, 0, 3>(v); } \ + if (norm && clampzero) v = XMVectorSaturate(v) ; \ + else if (clampzero) v = XMVectorClamp(v, g_XMZero, scalev); \ + else if (norm) v = XMVectorClamp(v, g_XMNegativeOne, g_XMOne); \ + else v = XMVectorClamp(v, XMVectorAdd(XMVectorNegate(scalev), g_XMOne), scalev); \ + v = XMVectorAdd(v, vError); \ + if (norm) v = XMVectorMultiply(v, scalev); \ + \ + XMVECTOR target; \ + if (pDiffusionErrors) \ + { \ + target = XMVectorRound(v); \ + vError = XMVectorSubtract(v, target); \ + if (norm) vError = XMVectorDivide(vError, scalev); \ + \ + /* Distribute error to next scanline and next pixel */ \ + pDiffusionErrors[ index-delta ] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[ index-delta ]); \ + pDiffusionErrors[ index+1 ] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[ index+1 ]); \ + pDiffusionErrors[ index+2+delta ] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[ index+2+delta ]); \ + vError = XMVectorMultiply(vError, g_ErrorWeight7); \ + } \ + else \ + { \ + /* Applied ordered dither */ \ + target = XMVectorAdd(v, ordered[ index & 3 ]); \ + target = XMVectorRound(target); \ + } \ + \ + target = XMVectorMin(scalev, target); \ + target = XMVectorMax((clampzero) ? g_XMZero : (XMVectorAdd(XMVectorNegate(scalev), g_XMOne)), target); \ + \ + XMFLOAT4A tmp; \ + XMStoreFloat4A(&tmp, target); \ + \ + auto dPtr = &dest[ index ]; \ + if (dPtr >= ePtr) break; \ + dPtr->x = itype(static_cast(tmp.x) & mask); \ + dPtr->y = itype(static_cast(tmp.y) & mask); \ + dPtr->z = itype(static_cast(tmp.z) & mask); \ + dPtr->w = itype(static_cast(tmp.w) & mask); \ + } \ + return true; \ + } \ + return false; + +#define STORE_SCANLINE2( type, scalev, clampzero, norm, itype, mask, row ) \ + /* The 2 component cases are always bgr=false */ \ + if (size >= sizeof(type)) \ + { \ + type * __restrict dest = reinterpret_cast(pDestination); \ + for(size_t i = 0; i < count; ++i) \ + { \ + auto index = static_cast((row & 1) ? (count - i - 1) : i ); \ + ptrdiff_t delta = (row & 1) ? -2 : 0; \ + \ + XMVECTOR v = sPtr[ index ]; \ + if (norm && clampzero) v = XMVectorSaturate(v) ; \ + else if (clampzero) v = XMVectorClamp(v, g_XMZero, scalev); \ + else if (norm) v = XMVectorClamp(v, g_XMNegativeOne, g_XMOne); \ + else v = XMVectorClamp(v, XMVectorAdd(XMVectorNegate(scalev), g_XMOne), scalev); \ + v = XMVectorAdd(v, vError); \ + if (norm) v = XMVectorMultiply(v, scalev); \ + \ + XMVECTOR target; \ + if (pDiffusionErrors) \ + { \ + target = XMVectorRound(v); \ + vError = XMVectorSubtract(v, target); \ + if (norm) vError = XMVectorDivide(vError, scalev); \ + \ + /* Distribute error to next scanline and next pixel */ \ + pDiffusionErrors[ index-delta ] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[ index-delta ]); \ + pDiffusionErrors[ index+1 ] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[ index+1 ]); \ + pDiffusionErrors[ index+2+delta ] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[ index+2+delta ]); \ + vError = XMVectorMultiply(vError, g_ErrorWeight7); \ + } \ + else \ + { \ + /* Applied ordered dither */ \ + target = XMVectorAdd(v, ordered[ index & 3 ]); \ + target = XMVectorRound(target); \ + } \ + \ + target = XMVectorMin(scalev, target); \ + target = XMVectorMax((clampzero) ? g_XMZero : (XMVectorAdd(XMVectorNegate(scalev), g_XMOne)), target); \ + \ + XMFLOAT4A tmp; \ + XMStoreFloat4A(&tmp, target); \ + \ + auto dPtr = &dest[ index ]; \ + if (dPtr >= ePtr) break; \ + dPtr->x = itype(static_cast(tmp.x) & mask); \ + dPtr->y = itype(static_cast(tmp.y) & mask); \ + } \ + return true; \ + } \ + return false; + +#define STORE_SCANLINE1( type, scalev, clampzero, norm, mask, row, selectw ) \ + /* The 1 component cases are always bgr=false */ \ + if (size >= sizeof(type)) \ + { \ + type * __restrict dest = reinterpret_cast(pDestination); \ + for(size_t i = 0; i < count; ++i) \ + { \ + auto index = static_cast((row & 1) ? (count - i - 1) : i ); \ + ptrdiff_t delta = (row & 1) ? -2 : 0; \ + \ + XMVECTOR v = sPtr[ index ]; \ + if (norm && clampzero) v = XMVectorSaturate(v) ; \ + else if (clampzero) v = XMVectorClamp(v, g_XMZero, scalev); \ + else if (norm) v = XMVectorClamp(v, g_XMNegativeOne, g_XMOne); \ + else v = XMVectorClamp(v, XMVectorAdd(XMVectorNegate(scalev), g_XMOne), scalev); \ + v = XMVectorAdd(v, vError); \ + if (norm) v = XMVectorMultiply(v, scalev); \ + \ + XMVECTOR target; \ + if (pDiffusionErrors) \ + { \ + target = XMVectorRound(v); \ + vError = XMVectorSubtract(v, target); \ + if (norm) vError = XMVectorDivide(vError, scalev); \ + \ + /* Distribute error to next scanline and next pixel */ \ + pDiffusionErrors[ index-delta ] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[ index-delta ]); \ + pDiffusionErrors[ index+1 ] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[ index+1 ]); \ + pDiffusionErrors[ index+2+delta ] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[ index+2+delta ]); \ + vError = XMVectorMultiply(vError, g_ErrorWeight7); \ + } \ + else \ + { \ + /* Applied ordered dither */ \ + target = XMVectorAdd(v, ordered[ index & 3 ]); \ + target = XMVectorRound(target); \ + } \ + \ + target = XMVectorMin(scalev, target); \ + target = XMVectorMax((clampzero) ? g_XMZero : (XMVectorAdd(XMVectorNegate(scalev), g_XMOne)), target); \ + \ + auto dPtr = &dest[ index ]; \ + if (dPtr >= ePtr) break; \ + *dPtr = type(static_cast((selectw) ? XMVectorGetW(target) : XMVectorGetX(target)) & mask); \ + } \ + return true; \ + } \ + return false; +} + +#pragma warning(push) +#pragma warning( disable : 4127 ) + +_Use_decl_annotations_ +bool DirectX::Internal::StoreScanlineDither( + void* pDestination, + size_t size, + DXGI_FORMAT format, + XMVECTOR* pSource, + size_t count, + float threshold, + size_t y, + size_t z, + XMVECTOR* pDiffusionErrors) noexcept +{ + assert(pDestination != nullptr); + assert(IsValid(format) && !IsTypeless(format) && !IsCompressed(format) && !IsPlanar(format) && !IsPalettized(format)); + + if (!size || !count) + return false; + + const XMVECTOR* __restrict sPtr = pSource; + if (!sPtr) + return false; + + assert((reinterpret_cast(pSource) & 0xF) == 0); + + XMVECTOR ordered[4]; + if (pDiffusionErrors) + { + // If pDiffusionErrors != 0, then this function performs error diffusion dithering (aka Floyd-Steinberg dithering) + + // To avoid the need for another temporary scanline buffer, we allow this function to overwrite the source buffer in-place + // Given the intended usage in the conversion routines, this is not a problem. + + XMVECTOR* ptr = pSource; + const XMVECTOR* err = pDiffusionErrors + 1; + for (size_t i = 0; i < count; ++i) + { + // Add contribution from previous scanline + XMVECTOR v = XMVectorAdd(*ptr, *err++); + *ptr++ = v; + } + + // Reset errors for next scanline + memset(pDiffusionErrors, 0, sizeof(XMVECTOR)*(count + 2)); + } + else + { + // If pDiffusionErrors == 0, then this function performs ordered dithering + + const XMVECTOR dither = XMLoadFloat4(reinterpret_cast(g_Dither + (z & 3) + ((y & 3) * 8))); + + ordered[0] = XMVectorSplatX(dither); + ordered[1] = XMVectorSplatY(dither); + ordered[2] = XMVectorSplatZ(dither); + ordered[3] = XMVectorSplatW(dither); + } + + const void* ePtr = static_cast(pDestination) + size; + +#ifdef _PREFAST_ + *reinterpret_cast(pDestination) = 0; +#endif + + XMVECTOR vError = XMVectorZero(); + + switch (static_cast(format)) + { + case DXGI_FORMAT_R16G16B16A16_UNORM: + STORE_SCANLINE(XMUSHORTN4, g_Scale16pc, true, true, uint16_t, 0xFFFF, y, false) + + case DXGI_FORMAT_R16G16B16A16_UINT: + STORE_SCANLINE(XMUSHORT4, g_Scale16pc, true, false, uint16_t, 0xFFFF, y, false) + + case DXGI_FORMAT_R16G16B16A16_SNORM: + STORE_SCANLINE(XMSHORTN4, g_Scale15pc, false, true, int16_t, 0xFFFF, y, false) + + case DXGI_FORMAT_R16G16B16A16_SINT: + STORE_SCANLINE(XMSHORT4, g_Scale15pc, false, false, int16_t, 0xFFFF, y, false) + + case DXGI_FORMAT_R10G10B10A2_UNORM: + STORE_SCANLINE(XMUDECN4, g_Scale10pc, true, true, uint16_t, 0x3FF, y, false) + + case DXGI_FORMAT_R10G10B10A2_UINT: + STORE_SCANLINE(XMUDEC4, g_Scale10pc, true, false, uint16_t, 0x3FF, y, false) + + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + if (size >= sizeof(XMUDEC4)) + { + static const XMVECTORF32 Scale = { { { 510.0f, 510.0f, 510.0f, 3.0f } } }; + static const XMVECTORF32 Bias = { { { 384.0f, 384.0f, 384.0f, 0.0f } } }; + static const XMVECTORF32 MinXR = { { { -0.7529f, -0.7529f, -0.7529f, 0.f } } }; + static const XMVECTORF32 MaxXR = { { { 1.2529f, 1.2529f, 1.2529f, 1.0f } } }; + + XMUDEC4 * __restrict dest = static_cast(pDestination); + for (size_t i = 0; i < count; ++i) + { + auto index = static_cast((y & 1) ? (count - i - 1) : i); + ptrdiff_t delta = (y & 1) ? -2 : 0; + + XMVECTOR v = XMVectorClamp(sPtr[index], MinXR, MaxXR); + v = XMVectorMultiplyAdd(v, Scale, vError); + + XMVECTOR target; + if (pDiffusionErrors) + { + target = XMVectorRound(v); + vError = XMVectorSubtract(v, target); + vError = XMVectorDivide(vError, Scale); + + // Distribute error to next scanline and next pixel + pDiffusionErrors[index - delta] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[index - delta]); + pDiffusionErrors[index + 1] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[index + 1]); + pDiffusionErrors[index + 2 + delta] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[index + 2 + delta]); + vError = XMVectorMultiply(vError, g_ErrorWeight7); + } + else + { + // Applied ordered dither + target = XMVectorAdd(v, ordered[index & 3]); + target = XMVectorRound(target); + } + + target = XMVectorAdd(target, Bias); + target = XMVectorClamp(target, g_XMZero, g_Scale10pc); + + XMFLOAT4A tmp; + XMStoreFloat4A(&tmp, target); + + auto dPtr = &dest[index]; + if (dPtr >= ePtr) break; + dPtr->x = uint16_t(static_cast(tmp.x) & 0x3FF); + dPtr->y = uint16_t(static_cast(tmp.y) & 0x3FF); + dPtr->z = uint16_t(static_cast(tmp.z) & 0x3FF); + dPtr->w = static_cast(tmp.w); + } + return true; + } + return false; + + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + STORE_SCANLINE(XMUBYTEN4, g_Scale8pc, true, true, uint8_t, 0xFF, y, false) + + case DXGI_FORMAT_R8G8B8A8_UINT: + STORE_SCANLINE(XMUBYTE4, g_Scale8pc, true, false, uint8_t, 0xFF, y, false) + + case DXGI_FORMAT_R8G8B8A8_SNORM: + STORE_SCANLINE(XMBYTEN4, g_Scale7pc, false, true, int8_t, 0xFF, y, false) + + case DXGI_FORMAT_R8G8B8A8_SINT: + STORE_SCANLINE(XMBYTE4, g_Scale7pc, false, false, int8_t, 0xFF, y, false) + + case DXGI_FORMAT_R16G16_UNORM: + STORE_SCANLINE2(XMUSHORTN2, g_Scale16pc, true, true, uint16_t, 0xFFFF, y) + + case DXGI_FORMAT_R16G16_UINT: + STORE_SCANLINE2(XMUSHORT2, g_Scale16pc, true, false, uint16_t, 0xFFFF, y) + + case DXGI_FORMAT_R16G16_SNORM: + STORE_SCANLINE2(XMSHORTN2, g_Scale15pc, false, true, int16_t, 0xFFFF, y) + + case DXGI_FORMAT_R16G16_SINT: + STORE_SCANLINE2(XMSHORT2, g_Scale15pc, false, false, int16_t, 0xFFFF, y) + + case DXGI_FORMAT_D24_UNORM_S8_UINT: + if (size >= sizeof(uint32_t)) + { + static const XMVECTORF32 Clamp = { { { 1.f, 255.f, 0.f, 0.f } } }; + static const XMVECTORF32 Scale = { { { 16777215.f, 1.f, 0.f, 0.f } } }; + static const XMVECTORF32 Scale2 = { { { 16777215.f, 255.f, 0.f, 0.f } } }; + + uint32_t * __restrict dest = static_cast(pDestination); + for (size_t i = 0; i < count; ++i) + { + auto index = static_cast((y & 1) ? (count - i - 1) : i); + ptrdiff_t delta = (y & 1) ? -2 : 0; + + XMVECTOR v = XMVectorClamp(sPtr[index], g_XMZero, Clamp); + v = XMVectorAdd(v, vError); + v = XMVectorMultiply(v, Scale); + + XMVECTOR target; + if (pDiffusionErrors) + { + target = XMVectorRound(v); + vError = XMVectorSubtract(v, target); + vError = XMVectorDivide(vError, Scale); + + // Distribute error to next scanline and next pixel + pDiffusionErrors[index - delta] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[index - delta]); + pDiffusionErrors[index + 1] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[index + 1]); + pDiffusionErrors[index + 2 + delta] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[index + 2 + delta]); + vError = XMVectorMultiply(vError, g_ErrorWeight7); + } + else + { + // Applied ordered dither + target = XMVectorAdd(v, ordered[index & 3]); + target = XMVectorRound(target); + } + + target = XMVectorClamp(target, g_XMZero, Scale2); + + XMFLOAT4A tmp; + XMStoreFloat4A(&tmp, target); + + auto dPtr = &dest[index]; + if (dPtr >= ePtr) break; + *dPtr = (static_cast(tmp.x) & 0xFFFFFF) + | ((static_cast(tmp.y) & 0xFF) << 24); + } + return true; + } + return false; + + case DXGI_FORMAT_R8G8_UNORM: + STORE_SCANLINE2(XMUBYTEN2, g_Scale8pc, true, true, uint8_t, 0xFF, y) + + case DXGI_FORMAT_R8G8_UINT: + STORE_SCANLINE2(XMUBYTE2, g_Scale8pc, true, false, uint8_t, 0xFF, y) + + case DXGI_FORMAT_R8G8_SNORM: + STORE_SCANLINE2(XMBYTEN2, g_Scale7pc, false, true, int8_t, 0xFF, y) + + case DXGI_FORMAT_R8G8_SINT: + STORE_SCANLINE2(XMBYTE2, g_Scale7pc, false, false, int8_t, 0xFF, y) + + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + STORE_SCANLINE1(uint16_t, g_Scale16pc, true, true, 0xFFFF, y, false) + + case DXGI_FORMAT_R16_UINT: + STORE_SCANLINE1(uint16_t, g_Scale16pc, true, false, 0xFFFF, y, false) + + case DXGI_FORMAT_R16_SNORM: + STORE_SCANLINE1(int16_t, g_Scale15pc, false, true, 0xFFFF, y, false) + + case DXGI_FORMAT_R16_SINT: + STORE_SCANLINE1(int16_t, g_Scale15pc, false, false, 0xFFFF, y, false) + + case DXGI_FORMAT_R8_UNORM: + STORE_SCANLINE1(uint8_t, g_Scale8pc, true, true, 0xFF, y, false) + + case DXGI_FORMAT_R8_UINT: + STORE_SCANLINE1(uint8_t, g_Scale8pc, true, false, 0xFF, y, false) + + case DXGI_FORMAT_R8_SNORM: + STORE_SCANLINE1(int8_t, g_Scale7pc, false, true, 0xFF, y, false) + + case DXGI_FORMAT_R8_SINT: + STORE_SCANLINE1(int8_t, g_Scale7pc, false, false, 0xFF, y, false) + + case DXGI_FORMAT_A8_UNORM: + STORE_SCANLINE1(uint8_t, g_Scale8pc, true, true, 0xFF, y, true) + + case DXGI_FORMAT_B5G6R5_UNORM: + if (size >= sizeof(XMU565)) + { + XMU565 * __restrict dest = static_cast(pDestination); + for (size_t i = 0; i < count; ++i) + { + auto index = static_cast((y & 1) ? (count - i - 1) : i); + ptrdiff_t delta = (y & 1) ? -2 : 0; + + XMVECTOR v = XMVectorSwizzle<2, 1, 0, 3>(sPtr[index]); + v = XMVectorSaturate(v); + v = XMVectorAdd(v, vError); + v = XMVectorMultiply(v, g_Scale565pc); + + XMVECTOR target; + if (pDiffusionErrors) + { + target = XMVectorRound(v); + vError = XMVectorSubtract(v, target); + vError = XMVectorDivide(vError, g_Scale565pc); + + // Distribute error to next scanline and next pixel + pDiffusionErrors[index - delta] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[index - delta]); + pDiffusionErrors[index + 1] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[index + 1]); + pDiffusionErrors[index + 2 + delta] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[index + 2 + delta]); + vError = XMVectorMultiply(vError, g_ErrorWeight7); + } + else + { + // Applied ordered dither + target = XMVectorAdd(v, ordered[index & 3]); + target = XMVectorRound(target); + } + + target = XMVectorClamp(target, g_XMZero, g_Scale565pc); + + XMFLOAT4A tmp; + XMStoreFloat4A(&tmp, target); + + auto dPtr = &dest[index]; + if (dPtr >= ePtr) break; + dPtr->x = uint16_t(static_cast(tmp.x) & 0x1F); + dPtr->y = uint16_t(static_cast(tmp.y) & 0x3F); + dPtr->z = uint16_t(static_cast(tmp.z) & 0x1F); + } + return true; + } + return false; + + case DXGI_FORMAT_B5G5R5A1_UNORM: + if (size >= sizeof(XMU555)) + { + XMU555 * __restrict dest = static_cast(pDestination); + for (size_t i = 0; i < count; ++i) + { + auto index = static_cast((y & 1) ? (count - i - 1) : i); + ptrdiff_t delta = (y & 1) ? -2 : 0; + + XMVECTOR v = XMVectorSwizzle<2, 1, 0, 3>(sPtr[index]); + v = XMVectorSaturate(v); + v = XMVectorAdd(v, vError); + v = XMVectorMultiply(v, g_Scale5551pc); + + XMVECTOR target; + if (pDiffusionErrors) + { + target = XMVectorRound(v); + vError = XMVectorSubtract(v, target); + vError = XMVectorDivide(vError, g_Scale5551pc); + + // Distribute error to next scanline and next pixel + pDiffusionErrors[index - delta] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[index - delta]); + pDiffusionErrors[index + 1] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[index + 1]); + pDiffusionErrors[index + 2 + delta] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[index + 2 + delta]); + vError = XMVectorMultiply(vError, g_ErrorWeight7); + } + else + { + // Applied ordered dither + target = XMVectorAdd(v, ordered[index & 3]); + target = XMVectorRound(target); + } + + target = XMVectorClamp(target, g_XMZero, g_Scale5551pc); + + XMFLOAT4A tmp; + XMStoreFloat4A(&tmp, target); + + auto dPtr = &dest[index]; + if (dPtr >= ePtr) break; + dPtr->x = uint16_t(static_cast(tmp.x) & 0x1F); + dPtr->y = uint16_t(static_cast(tmp.y) & 0x1F); + dPtr->z = uint16_t(static_cast(tmp.z) & 0x1F); + dPtr->w = (XMVectorGetW(target) > threshold) ? 1u : 0u; + } + return true; + } + return false; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + STORE_SCANLINE(XMUBYTEN4, g_Scale8pc, true, true, uint8_t, 0xFF, y, true) + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + if (size >= sizeof(XMUBYTEN4)) + { + XMUBYTEN4 * __restrict dest = static_cast(pDestination); + for (size_t i = 0; i < count; ++i) + { + auto index = static_cast((y & 1) ? (count - i - 1) : i); + ptrdiff_t delta = (y & 1) ? -2 : 0; + + XMVECTOR v = XMVectorSwizzle<2, 1, 0, 3>(sPtr[index]); + v = XMVectorSaturate(v); + v = XMVectorAdd(v, vError); + v = XMVectorMultiply(v, g_Scale8pc); + + XMVECTOR target; + if (pDiffusionErrors) + { + target = XMVectorRound(v); + vError = XMVectorSubtract(v, target); + vError = XMVectorDivide(vError, g_Scale8pc); + + // Distribute error to next scanline and next pixel + pDiffusionErrors[index - delta] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[index - delta]); + pDiffusionErrors[index + 1] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[index + 1]); + pDiffusionErrors[index + 2 + delta] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[index + 2 + delta]); + vError = XMVectorMultiply(vError, g_ErrorWeight7); + } + else + { + // Applied ordered dither + target = XMVectorAdd(v, ordered[index & 3]); + target = XMVectorRound(target); + } + + target = XMVectorClamp(target, g_XMZero, g_Scale8pc); + + XMFLOAT4A tmp; + XMStoreFloat4A(&tmp, target); + + auto dPtr = &dest[index]; + if (dPtr >= ePtr) break; + dPtr->x = uint8_t(static_cast(tmp.x) & 0xFF); + dPtr->y = uint8_t(static_cast(tmp.y) & 0xFF); + dPtr->z = uint8_t(static_cast(tmp.z) & 0xFF); + dPtr->w = 0; + } + return true; + } + return false; + + case DXGI_FORMAT_B4G4R4A4_UNORM: + STORE_SCANLINE(XMUNIBBLE4, g_Scale4pc, true, true, uint8_t, 0xF, y, true) + + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + if (size >= sizeof(XMUNIBBLE4)) + { + XMUNIBBLE4 * __restrict dest = static_cast(pDestination); + for (size_t i = 0; i < count; ++i) + { + auto index = static_cast((y & 1) ? (count - i - 1) : i); + ptrdiff_t delta = (y & 1) ? -2 : 0; + + XMVECTOR v = XMVectorSaturate(sPtr[index]); + v = XMVectorSwizzle<3, 2, 1, 0>(v); + v = XMVectorAdd(v, vError); + v = XMVectorMultiply(v, g_Scale4pc); + + XMVECTOR target; + if (pDiffusionErrors) + { + target = XMVectorRound(v); + vError = XMVectorSubtract(v, target); + vError = XMVectorDivide(vError, g_Scale4pc); + + // Distribute error to next scanline and next pixel + pDiffusionErrors[index - delta] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[index - delta]); + pDiffusionErrors[index + 1] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[index + 1]); + pDiffusionErrors[index + 2 + delta] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[index + 2 + delta]); + vError = XMVectorMultiply(vError, g_ErrorWeight7); + } + else + { + // Applied ordered dither + target = XMVectorAdd(v, ordered[index & 3]); + target = XMVectorRound(target); + } + + target = XMVectorClamp(target, g_XMZero, g_Scale4pc); + + XMFLOAT4A tmp; + XMStoreFloat4A(&tmp, target); + + auto dPtr = &dest[index]; + if (dPtr >= ePtr) break; + dPtr->x = uint8_t(static_cast(tmp.x) & 0xF); + dPtr->y = uint8_t(static_cast(tmp.y) & 0xF); + dPtr->z = uint8_t(static_cast(tmp.z) & 0xF); + dPtr->w = uint8_t(static_cast(tmp.w) & 0xF); + } + return true; + } + return false; + + case XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM: + STORE_SCANLINE(XMXDECN4, g_Scale9pc, false, true, uint16_t, 0x3FF, y, false) + + case XBOX_DXGI_FORMAT_R4G4_UNORM: + if (size >= sizeof(uint8_t)) + { + uint8_t * __restrict dest = static_cast(pDestination); + for (size_t i = 0; i < count; ++i) + { + auto index = static_cast((y & 1) ? (count - i - 1) : i); + ptrdiff_t delta = (y & 1) ? -2 : 0; + + XMVECTOR v = XMVectorSaturate(sPtr[index]); + v = XMVectorAdd(v, vError); + v = XMVectorMultiply(v, g_Scale4pc); + + XMVECTOR target; + if (pDiffusionErrors) + { + target = XMVectorRound(v); + vError = XMVectorSubtract(v, target); + vError = XMVectorDivide(vError, g_Scale4pc); + + // Distribute error to next scanline and next pixel + pDiffusionErrors[index - delta] = XMVectorMultiplyAdd(g_ErrorWeight3, vError, pDiffusionErrors[index - delta]); + pDiffusionErrors[index + 1] = XMVectorMultiplyAdd(g_ErrorWeight5, vError, pDiffusionErrors[index + 1]); + pDiffusionErrors[index + 2 + delta] = XMVectorMultiplyAdd(g_ErrorWeight1, vError, pDiffusionErrors[index + 2 + delta]); + vError = XMVectorMultiply(vError, g_ErrorWeight7); + } + else + { + // Applied ordered dither + target = XMVectorAdd(v, ordered[index & 3]); + target = XMVectorRound(target); + } + + target = XMVectorClamp(target, g_XMZero, g_Scale4pc); + + XMFLOAT4A tmp; + XMStoreFloat4A(&tmp, target); + + auto dPtr = &dest[index]; + if (dPtr >= ePtr) break; + *dPtr = static_cast((unsigned(tmp.x) & 0xF) | ((unsigned(tmp.y) & 0xF) << 4)); + } + return true; + } + return false; + + default: + return StoreScanline(pDestination, size, format, pSource, count, threshold); + } +} + +#pragma warning(pop) + +#undef STORE_SCANLINE +#undef STORE_SCANLINE2 +#undef STORE_SCANLINE1 + +namespace +{ + //------------------------------------------------------------------------------------- + // Selection logic for using WIC vs. our own routines + //------------------------------------------------------------------------------------- + inline bool UseWICConversion( + _In_ TEX_FILTER_FLAGS filter, + _In_ DXGI_FORMAT sformat, + _In_ DXGI_FORMAT tformat, + _Out_ WICPixelFormatGUID& pfGUID, + _Out_ WICPixelFormatGUID& targetGUID) noexcept + { + #ifndef _WIN32 + UNREFERENCED_PARAMETER(filter); + UNREFERENCED_PARAMETER(sformat); + UNREFERENCED_PARAMETER(tformat); + UNREFERENCED_PARAMETER(pfGUID); + UNREFERENCED_PARAMETER(targetGUID); + return false; + #else + memset(&pfGUID, 0, sizeof(GUID)); + memset(&targetGUID, 0, sizeof(GUID)); + + if (filter & TEX_FILTER_FORCE_NON_WIC) + { + // Explicit flag indicates use of non-WIC code paths + return false; + } + + if (!DXGIToWIC(sformat, pfGUID) || !DXGIToWIC(tformat, targetGUID)) + { + // Source or target format are not WIC supported native pixel formats + return false; + } + + if (filter & TEX_FILTER_FORCE_WIC) + { + // Explicit flag to use WIC code paths, skips all the case checks below + return true; + } + + if (filter & TEX_FILTER_SEPARATE_ALPHA) + { + // Alpha is not premultiplied, so use non-WIC code paths + return false; + } + + if (filter & TEX_FILTER_FLOAT_X2BIAS) + { + // X2 Scale & Bias conversions not supported by WIC code paths + return false; + } + + // Check for special cases + #if (defined(_XBOX_ONE) && defined(_TITLE)) || defined(_GAMING_XBOX) + if (sformat == DXGI_FORMAT_R16G16B16A16_FLOAT + || sformat == DXGI_FORMAT_R16_FLOAT + || tformat == DXGI_FORMAT_R16G16B16A16_FLOAT + || tformat == DXGI_FORMAT_R16_FLOAT) + { + // Use non-WIC code paths as these conversions are not supported by Xbox version of WIC + return false; + } + #endif + + switch (sformat) + { + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_D32_FLOAT: + switch (tformat) + { + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16_FLOAT: + // WIC conversions for FP32->FP16 can result in NaN values instead of clamping for min/max value + return false; + + default: + break; + } + break; + + default: + break; + } + + switch (sformat) + { + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + switch (tformat) + { + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_D32_FLOAT: + // WIC converts via UNORM formats and ends up converting colorspaces for these cases + case DXGI_FORMAT_A8_UNORM: + // Conversion logic for these kinds of textures is unintuitive for WIC code paths + return false; + + default: + break; + } + break; + + case DXGI_FORMAT_R16_FLOAT: + switch (tformat) + { + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_D32_FLOAT: + // WIC converts via UNORM formats and ends up converting colorspaces for these cases + case DXGI_FORMAT_A8_UNORM: + // Conversion logic for these kinds of textures is unintuitive for WIC code paths + return false; + + default: + break; + } + break; + + case DXGI_FORMAT_A8_UNORM: + // Conversion logic for these kinds of textures is unintuitive for WIC code paths + return false; + + default: + switch (tformat) + { + case DXGI_FORMAT_A8_UNORM: + // Conversion logic for these kinds of textures is unintuitive for WIC code paths + return false; + + default: + break; + } + } + + // Check for implicit color space changes + if (IsSRGB(sformat)) + filter |= TEX_FILTER_SRGB_IN; + + if (IsSRGB(tformat)) + filter |= TEX_FILTER_SRGB_OUT; + + if ((filter & (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT)) == (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT)) + { + filter &= ~(TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT); + } + + auto const wicsrgb = CheckWICColorSpace(pfGUID, targetGUID); + + if (wicsrgb != (filter & (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT))) + { + // WIC will perform a colorspace conversion we didn't request + return false; + } + + return true; + #endif // WIN32 + } + + //------------------------------------------------------------------------------------- + // Convert the source image using WIC + //------------------------------------------------------------------------------------- + HRESULT ConvertUsingWIC( + _In_ const Image& srcImage, + _In_ const WICPixelFormatGUID& pfGUID, + _In_ const WICPixelFormatGUID& targetGUID, + _In_ TEX_FILTER_FLAGS filter, + _In_ float threshold, + _In_ const Image& destImage) + { + #ifndef _WIN32 + UNREFERENCED_PARAMETER(srcImage); + UNREFERENCED_PARAMETER(pfGUID); + UNREFERENCED_PARAMETER(targetGUID); + UNREFERENCED_PARAMETER(filter); + UNREFERENCED_PARAMETER(threshold); + UNREFERENCED_PARAMETER(destImage); + return E_NOTIMPL; + #else + assert(srcImage.width == destImage.width); + assert(srcImage.height == destImage.height); + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + ComPtr FC; + HRESULT hr = pWIC->CreateFormatConverter(FC.GetAddressOf()); + if (FAILED(hr)) + return hr; + + // Note that WIC conversion ignores the TEX_FILTER_SRGB_IN and TEX_FILTER_SRGB_OUT flags, + // but also always assumes UNORM <-> FLOAT conversions are changing color spaces sRGB <-> scRGB + + BOOL canConvert = FALSE; + hr = FC->CanConvert(pfGUID, targetGUID, &canConvert); + if (FAILED(hr) || !canConvert) + { + // This case is not an issue for the subset of WIC formats that map directly to DXGI + return E_UNEXPECTED; + } + + if (srcImage.rowPitch > UINT32_MAX || srcImage.slicePitch > UINT32_MAX + || destImage.rowPitch > UINT32_MAX || destImage.slicePitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + ComPtr source; + hr = pWIC->CreateBitmapFromMemory(static_cast(srcImage.width), static_cast(srcImage.height), pfGUID, + static_cast(srcImage.rowPitch), static_cast(srcImage.slicePitch), + srcImage.pixels, source.GetAddressOf()); + if (FAILED(hr)) + return hr; + + hr = FC->Initialize(source.Get(), targetGUID, GetWICDither(filter), nullptr, + static_cast(threshold) * 100.0, WICBitmapPaletteTypeMedianCut); + if (FAILED(hr)) + return hr; + + hr = FC->CopyPixels(nullptr, static_cast(destImage.rowPitch), static_cast(destImage.slicePitch), destImage.pixels); + if (FAILED(hr)) + return hr; + + return S_OK; + #endif // WIN32 + } + + //------------------------------------------------------------------------------------- + // Convert the source image (not using WIC) + //------------------------------------------------------------------------------------- + HRESULT ConvertCustom( + _In_ const Image& srcImage, + _In_ TEX_FILTER_FLAGS filter, + _In_ const Image& destImage, + _In_ float threshold, + size_t z, + const std::function& statusCallback) noexcept + { + assert(srcImage.width == destImage.width); + assert(srcImage.height == destImage.height); + + const uint8_t *pSrc = srcImage.pixels; + uint8_t *pDest = destImage.pixels; + if (!pSrc || !pDest) + return E_POINTER; + + size_t width = srcImage.width; + + if (filter & TEX_FILTER_DITHER_DIFFUSION) + { + // Error diffusion dithering (aka Floyd-Steinberg dithering) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 2 + 2); + if (!scanline) + return E_OUTOFMEMORY; + + XMVECTOR* pDiffusionErrors = scanline.get() + width; + memset(pDiffusionErrors, 0, sizeof(XMVECTOR)*(width + 2)); + + for (size_t h = 0; h < srcImage.height; ++h) + { + if (statusCallback) + { + if (!statusCallback(h, srcImage.height)) + { + return E_ABORT; + } + } + + if (!LoadScanline(scanline.get(), width, pSrc, srcImage.rowPitch, srcImage.format)) + return E_FAIL; + + ConvertScanline(scanline.get(), width, destImage.format, srcImage.format, filter); + + if (!StoreScanlineDither(pDest, destImage.rowPitch, destImage.format, scanline.get(), width, threshold, h, z, pDiffusionErrors)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + } + else + { + auto scanline = make_AlignedArrayXMVECTOR(width); + if (!scanline) + return E_OUTOFMEMORY; + + if (filter & TEX_FILTER_DITHER) + { + // Ordered dithering + for (size_t h = 0; h < srcImage.height; ++h) + { + if (statusCallback) + { + if (!statusCallback(h, srcImage.height)) + { + return E_ABORT; + } + } + + if (!LoadScanline(scanline.get(), width, pSrc, srcImage.rowPitch, srcImage.format)) + return E_FAIL; + + ConvertScanline(scanline.get(), width, destImage.format, srcImage.format, filter); + + if (!StoreScanlineDither(pDest, destImage.rowPitch, destImage.format, scanline.get(), width, threshold, h, z, nullptr)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + } + else + { + // No dithering + for (size_t h = 0; h < srcImage.height; ++h) + { + if (statusCallback) + { + if (!statusCallback(h, srcImage.height)) + { + return E_ABORT; + } + } + + if (!LoadScanline(scanline.get(), width, pSrc, srcImage.rowPitch, srcImage.format)) + return E_FAIL; + + ConvertScanline(scanline.get(), width, destImage.format, srcImage.format, filter); + + if (!StoreScanline(pDest, destImage.rowPitch, destImage.format, scanline.get(), width, threshold)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + } + } + + return S_OK; + } + + //------------------------------------------------------------------------------------- + DXGI_FORMAT PlanarToSingle(_In_ DXGI_FORMAT format) noexcept + { + switch (format) + { + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_NV11: + return DXGI_FORMAT_YUY2; + + case DXGI_FORMAT_P010: + return DXGI_FORMAT_Y210; + + case DXGI_FORMAT_P016: + return DXGI_FORMAT_Y216; + + // We currently do not support conversion for Xbox One specific 16-bit depth formats + + // We can't do anything with DXGI_FORMAT_420_OPAQUE because it's an opaque blob of bits + + // We don't support conversion of JPEG Hardware decode formats + + default: + return DXGI_FORMAT_UNKNOWN; + } + } + + //------------------------------------------------------------------------------------- + // Convert the image from a planar to non-planar image + //------------------------------------------------------------------------------------- +#define CONVERT_420_TO_422( srcType, destType )\ + {\ + const size_t rowPitch = srcImage.rowPitch;\ + \ + auto const sourceE = reinterpret_cast(pSrc + srcImage.slicePitch);\ + auto pSrcUV = pSrc + (srcImage.height * rowPitch);\ + \ + for(size_t y = 0; y < srcImage.height; y+= 2)\ + {\ + auto sPtrY0 = reinterpret_cast(pSrc);\ + auto sPtrY2 = reinterpret_cast(pSrc + rowPitch);\ + auto sPtrUV = reinterpret_cast(pSrcUV);\ + \ + destType * __restrict dPtr0 = reinterpret_cast(pDest);\ + destType * __restrict dPtr1 = reinterpret_cast(pDest + destImage.rowPitch);\ + \ + for(size_t x = 0; x < srcImage.width; x+= 2)\ + {\ + if ((sPtrUV+1) >= sourceE) break;\ + \ + const srcType u = *(sPtrUV++);\ + const srcType v = *(sPtrUV++);\ + \ + dPtr0->x = *(sPtrY0++);\ + dPtr0->y = u;\ + dPtr0->z = *(sPtrY0++);\ + dPtr0->w = v;\ + ++dPtr0;\ + \ + dPtr1->x = *(sPtrY2++);\ + dPtr1->y = u;\ + dPtr1->z = *(sPtrY2++);\ + dPtr1->w = v;\ + ++dPtr1;\ + }\ + \ + pSrc += rowPitch * 2;\ + pSrcUV += rowPitch;\ + \ + pDest += destImage.rowPitch * 2;\ + }\ + } + +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wextra-semi-stmt" +#endif + + HRESULT ConvertToSinglePlane_(_In_ const Image& srcImage, _In_ const Image& destImage) noexcept + { + assert(srcImage.width == destImage.width); + assert(srcImage.height == destImage.height); + + const uint8_t *pSrc = srcImage.pixels; + uint8_t *pDest = destImage.pixels; + if (!pSrc || !pDest) + return E_POINTER; + + switch (srcImage.format) + { + case DXGI_FORMAT_NV12: + assert(destImage.format == DXGI_FORMAT_YUY2); + if ((srcImage.width % 2) != 0 || (srcImage.height % 2) != 0) + return E_INVALIDARG; + + CONVERT_420_TO_422(uint8_t, XMUBYTEN4); + return S_OK; + + case DXGI_FORMAT_P010: + assert(destImage.format == DXGI_FORMAT_Y210); + if ((srcImage.width % 2) != 0 || (srcImage.height % 2) != 0) + return E_INVALIDARG; + + CONVERT_420_TO_422(uint16_t, XMUSHORTN4); + return S_OK; + + case DXGI_FORMAT_P016: + assert(destImage.format == DXGI_FORMAT_Y216); + if ((srcImage.width % 2) != 0 || (srcImage.height % 2) != 0) + return E_INVALIDARG; + + CONVERT_420_TO_422(uint16_t, XMUSHORTN4); + return S_OK; + + case DXGI_FORMAT_NV11: + assert(destImage.format == DXGI_FORMAT_YUY2); + if ((srcImage.width % 4) != 0) + return E_INVALIDARG; + + // Convert 4:1:1 to 4:2:2 + { + const size_t rowPitch = srcImage.rowPitch; + + const uint8_t* sourceE = pSrc + srcImage.slicePitch; + const uint8_t* pSrcUV = pSrc + (srcImage.height * rowPitch); + + for (size_t y = 0; y < srcImage.height; ++y) + { + const uint8_t* sPtrY = pSrc; + const uint8_t* sPtrUV = pSrcUV; + + XMUBYTEN4 * __restrict dPtr = reinterpret_cast(pDest); + + for (size_t x = 0; x < srcImage.width; x += 4) + { + if ((sPtrUV + 1) >= sourceE) break; + + const uint8_t u = *(sPtrUV++); + const uint8_t v = *(sPtrUV++); + + dPtr->x = *(sPtrY++); + dPtr->y = u; + dPtr->z = *(sPtrY++); + dPtr->w = v; + ++dPtr; + + dPtr->x = *(sPtrY++); + dPtr->y = u; + dPtr->z = *(sPtrY++); + dPtr->w = v; + ++dPtr; + } + + pSrc += rowPitch; + pSrcUV += (rowPitch >> 1); + + pDest += destImage.rowPitch; + } + } + return S_OK; + + default: + return E_UNEXPECTED; + } + } + +#undef CONVERT_420_TO_422 +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Convert image +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Convert( + const Image& srcImage, + DXGI_FORMAT format, + TEX_FILTER_FLAGS filter, + float threshold, + ScratchImage& image) noexcept +{ + ConvertOptions options = {}; + options.filter = filter; + options.threshold = threshold; + + return ConvertEx(srcImage, format, options, image, nullptr); +} + +_Use_decl_annotations_ +HRESULT DirectX::ConvertEx( + const Image& srcImage, + DXGI_FORMAT format, + const ConvertOptions& options, + ScratchImage& image, + std::function statusCallback) +{ + if ((srcImage.format == format) || !IsValid(format)) + return E_INVALIDARG; + + if (!srcImage.pixels) + return E_POINTER; + + if (IsCompressed(srcImage.format) || IsCompressed(format) + || IsPlanar(srcImage.format) || IsPlanar(format) + || IsPalettized(srcImage.format) || IsPalettized(format) + || IsTypeless(srcImage.format) || IsTypeless(format)) + return HRESULT_E_NOT_SUPPORTED; + + if ((srcImage.width > UINT32_MAX) || (srcImage.height > UINT32_MAX)) + return E_INVALIDARG; + + HRESULT hr = image.Initialize2D(format, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *rimage = image.GetImage(0, 0, 0); + if (!rimage) + { + image.Release(); + return E_POINTER; + } + + if (statusCallback) + { + if (!statusCallback(0, rimage->height)) + { + image.Release(); + return E_ABORT; + } + } + + WICPixelFormatGUID pfGUID, targetGUID; + if (UseWICConversion(options.filter, srcImage.format, format, pfGUID, targetGUID)) + { + hr = ConvertUsingWIC(srcImage, pfGUID, targetGUID, options.filter, options.threshold, *rimage); + } + else + { + hr = ConvertCustom(srcImage, options.filter, *rimage, options.threshold, 0, statusCallback); + } + + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + if (statusCallback) + { + if (!statusCallback(rimage->height, rimage->height)) + { + image.Release(); + return E_ABORT; + } + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Convert image (complex) +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Convert( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + DXGI_FORMAT format, + TEX_FILTER_FLAGS filter, + float threshold, + ScratchImage& result) noexcept +{ + ConvertOptions options = {}; + options.filter = filter; + options.threshold = threshold; + + return ConvertEx(srcImages, nimages, metadata, format, options, result, nullptr); +} + +_Use_decl_annotations_ +HRESULT DirectX::ConvertEx( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + DXGI_FORMAT format, + const ConvertOptions& options, + ScratchImage& result, + std::function statusCallback) +{ + if (!srcImages || !nimages || (metadata.format == format) || !IsValid(format)) + return E_INVALIDARG; + + if (IsCompressed(metadata.format) || IsCompressed(format) + || IsPlanar(metadata.format) || IsPlanar(format) + || IsPalettized(metadata.format) || IsPalettized(format) + || IsTypeless(metadata.format) || IsTypeless(format)) + return HRESULT_E_NOT_SUPPORTED; + + if ((metadata.width > UINT32_MAX) || (metadata.height > UINT32_MAX)) + return E_INVALIDARG; + + if (statusCallback + && nimages == 1 + && !metadata.IsVolumemap() + && metadata.mipLevels == 1 + && metadata.arraySize == 1) + { + // If progress reporting is requested when converting a single 1D or 2D image, call + // the ConvertEx overload that takes a single image. + // This provides a better user experience as progress will be reported as the image + // is being processed, instead of after processing has been completed. + return ConvertEx(srcImages[0], format, options, result, statusCallback); + } + + TexMetadata mdata2 = metadata; + mdata2.format = format; + HRESULT hr = result.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + if (nimages != result.GetImageCount()) + { + result.Release(); + return E_FAIL; + } + + const Image* dest = result.GetImages(); + if (!dest) + { + result.Release(); + return E_POINTER; + } + + if (statusCallback) + { + if (!statusCallback(0, nimages)) + { + result.Release(); + return E_ABORT; + } + } + + WICPixelFormatGUID pfGUID, targetGUID; + const bool usewic = !metadata.IsPMAlpha() && UseWICConversion(options.filter, metadata.format, format, pfGUID, targetGUID); + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + for (size_t index = 0; index < nimages; ++index) + { + const Image& src = srcImages[index]; + if (src.format != metadata.format) + { + result.Release(); + return E_FAIL; + } + + if ((src.width > UINT32_MAX) || (src.height > UINT32_MAX)) + { + result.Release(); + return E_FAIL; + } + + const Image& dst = dest[index]; + assert(dst.format == format); + + if (src.width != dst.width || src.height != dst.height) + { + result.Release(); + return E_FAIL; + } + + if (usewic) + { + hr = ConvertUsingWIC(src, pfGUID, targetGUID, options.filter, options.threshold, dst); + } + else + { + hr = ConvertCustom(src, options.filter, dst, options.threshold, 0, nullptr); + } + + if (FAILED(hr)) + { + result.Release(); + return hr; + } + + if (statusCallback) + { + if (!statusCallback(index, nimages)) + { + result.Release(); + return E_ABORT; + } + } + } + break; + + case TEX_DIMENSION_TEXTURE3D: + { + size_t index = 0; + size_t d = metadata.depth; + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + for (size_t slice = 0; slice < d; ++slice, ++index) + { + if (index >= nimages) + { + result.Release(); + return E_FAIL; + } + + const Image& src = srcImages[index]; + if (src.format != metadata.format) + { + result.Release(); + return E_FAIL; + } + + if ((src.width > UINT32_MAX) || (src.height > UINT32_MAX)) + { + result.Release(); + return E_FAIL; + } + + const Image& dst = dest[index]; + assert(dst.format == format); + + if (src.width != dst.width || src.height != dst.height) + { + result.Release(); + return E_FAIL; + } + + if (usewic) + { + hr = ConvertUsingWIC(src, pfGUID, targetGUID, options.filter, options.threshold, dst); + } + else + { + hr = ConvertCustom(src, options.filter, dst, options.threshold, slice, nullptr); + } + + if (FAILED(hr)) + { + result.Release(); + return hr; + } + + if (statusCallback) + { + if (!statusCallback(index, nimages)) + { + result.Release(); + return E_ABORT; + } + } + } + + if (d > 1) + d >>= 1; + } + } + break; + + default: + result.Release(); + return E_FAIL; + } + + if (statusCallback) + { + if (!statusCallback(nimages, nimages)) + { + result.Release(); + return E_ABORT; + } + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Convert image from planar to single plane (image) +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::ConvertToSinglePlane(const Image& srcImage, ScratchImage& image) noexcept +{ + if (!IsPlanar(srcImage.format)) + return E_INVALIDARG; + + if (!srcImage.pixels) + return E_POINTER; + + const DXGI_FORMAT format = PlanarToSingle(srcImage.format); + if (format == DXGI_FORMAT_UNKNOWN) + return HRESULT_E_NOT_SUPPORTED; + + if ((srcImage.width > UINT32_MAX) || (srcImage.height > UINT32_MAX)) + return E_INVALIDARG; + + HRESULT hr = image.Initialize2D(format, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *rimage = image.GetImage(0, 0, 0); + if (!rimage) + { + image.Release(); + return E_POINTER; + } + + hr = ConvertToSinglePlane_(srcImage, *rimage); + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Convert image from planar to single plane (complex) +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::ConvertToSinglePlane( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + ScratchImage& result) noexcept +{ + if (!srcImages || !nimages) + return E_INVALIDARG; + + if (metadata.IsVolumemap()) + { + // Direct3D does not support any planar formats for Texture3D + return HRESULT_E_NOT_SUPPORTED; + } + + const DXGI_FORMAT format = PlanarToSingle(metadata.format); + if (format == DXGI_FORMAT_UNKNOWN) + return HRESULT_E_NOT_SUPPORTED; + + if ((metadata.width > UINT32_MAX) || (metadata.height > UINT32_MAX)) + return E_INVALIDARG; + + TexMetadata mdata2 = metadata; + mdata2.format = format; + HRESULT hr = result.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + if (nimages != result.GetImageCount()) + { + result.Release(); + return E_FAIL; + } + + const Image* dest = result.GetImages(); + if (!dest) + { + result.Release(); + return E_POINTER; + } + + for (size_t index = 0; index < nimages; ++index) + { + const Image& src = srcImages[index]; + if (src.format != metadata.format) + { + result.Release(); + return E_FAIL; + } + + if ((src.width > UINT32_MAX) || (src.height > UINT32_MAX)) + return E_FAIL; + + const Image& dst = dest[index]; + assert(dst.format == format); + + if (src.width != dst.width || src.height != dst.height) + { + result.Release(); + return E_FAIL; + } + + hr = ConvertToSinglePlane_(src, dst); + if (FAILED(hr)) + { + result.Release(); + return hr; + } + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Returns the data type of a DXGI_FORMAT +//------------------------------------------------------------------------------------- +DirectX::FORMAT_TYPE DirectX::FormatDataType(_In_ DXGI_FORMAT fmt) noexcept +{ + const auto cflags = GetConvertFlags(fmt); + + switch (cflags & (CONVF_FLOAT | CONVF_UNORM | CONVF_UINT | CONVF_SNORM | CONVF_SINT)) + { + case CONVF_FLOAT: + return FORMAT_TYPE_FLOAT; + + case CONVF_UNORM: + return FORMAT_TYPE_UNORM; + + case CONVF_UINT: + return FORMAT_TYPE_UINT; + + case CONVF_SNORM: + return FORMAT_TYPE_SNORM; + + case CONVF_SINT: + return FORMAT_TYPE_SINT; + + default: + return FORMAT_TYPE_TYPELESS; + } +} diff --git a/external/DirectXTex/DirectXTexD3D11.cpp b/external/DirectXTex/DirectXTexD3D11.cpp new file mode 100644 index 00000000..5b6241d4 --- /dev/null +++ b/external/DirectXTex/DirectXTexD3D11.cpp @@ -0,0 +1,1034 @@ +//------------------------------------------------------------------------------------- +// DirectXTexD3D11.cpp +// +// DirectX Texture Library - Direct3D 11 helpers +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#ifdef _GAMING_XBOX +#error This module is not supported for GDK +#elif !defined(_XBOX_ONE) || !defined(_TITLE) +#include +#endif + +#ifndef IID_GRAPHICS_PPV_ARGS +#define IID_GRAPHICS_PPV_ARGS(x) IID_PPV_ARGS(x) +#endif + +using namespace DirectX; +using Microsoft::WRL::ComPtr; + +static_assert(static_cast(TEX_DIMENSION_TEXTURE1D) == static_cast(D3D11_RESOURCE_DIMENSION_TEXTURE1D), "header enum mismatch"); +static_assert(static_cast(TEX_DIMENSION_TEXTURE2D) == static_cast(D3D11_RESOURCE_DIMENSION_TEXTURE2D), "header enum mismatch"); +static_assert(static_cast(TEX_DIMENSION_TEXTURE3D) == static_cast(D3D11_RESOURCE_DIMENSION_TEXTURE3D), "header enum mismatch"); + +namespace +{ + HRESULT Capture( + _In_ ID3D11DeviceContext* pContext, + _In_ ID3D11Resource* pSource, + const TexMetadata& metadata, + const ScratchImage& result) noexcept + { + if (!pContext || !pSource || !result.GetPixels()) + return E_POINTER; + + #if defined(_XBOX_ONE) && defined(_TITLE) + + ComPtr d3dDevice; + pContext->GetDevice(d3dDevice.GetAddressOf()); + + if (d3dDevice->GetCreationFlags() & D3D11_CREATE_DEVICE_IMMEDIATE_CONTEXT_FAST_SEMANTICS) + { + ComPtr d3dDeviceX; + HRESULT hr = d3dDevice.As(&d3dDeviceX); + if (FAILED(hr)) + return hr; + + ComPtr d3dContextX; + hr = pContext->QueryInterface(IID_GRAPHICS_PPV_ARGS(d3dContextX.GetAddressOf())); + if (FAILED(hr)) + return hr; + + UINT64 copyFence = d3dContextX->InsertFence(0); + + while (d3dDeviceX->IsFencePending(copyFence)) + { + SwitchToThread(); + } + } + + #endif + + if (metadata.IsVolumemap()) + { + //--- Volume texture ---------------------------------------------------------- + assert(metadata.arraySize == 1); + + size_t height = metadata.height; + size_t depth = metadata.depth; + + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + const UINT dindex = D3D11CalcSubresource(static_cast(level), 0, static_cast(metadata.mipLevels)); + + D3D11_MAPPED_SUBRESOURCE mapped; + HRESULT hr = pContext->Map(pSource, dindex, D3D11_MAP_READ, 0, &mapped); + if (FAILED(hr)) + return hr; + + auto pslice = static_cast(mapped.pData); + if (!pslice) + { + pContext->Unmap(pSource, dindex); + return E_POINTER; + } + + const size_t lines = ComputeScanlines(metadata.format, height); + if (!lines) + { + pContext->Unmap(pSource, dindex); + return E_UNEXPECTED; + } + + for (size_t slice = 0; slice < depth; ++slice) + { + const Image* img = result.GetImage(level, 0, slice); + if (!img) + { + pContext->Unmap(pSource, dindex); + return E_FAIL; + } + + if (!img->pixels) + { + pContext->Unmap(pSource, dindex); + return E_POINTER; + } + + const uint8_t* sptr = pslice; + uint8_t* dptr = img->pixels; + for (size_t h = 0; h < lines; ++h) + { + const size_t msize = std::min(img->rowPitch, mapped.RowPitch); + memcpy(dptr, sptr, msize); + sptr += mapped.RowPitch; + dptr += img->rowPitch; + } + + pslice += mapped.DepthPitch; + } + + pContext->Unmap(pSource, dindex); + + if (height > 1) + height >>= 1; + if (depth > 1) + depth >>= 1; + } + } + else + { + //--- 1D or 2D texture -------------------------------------------------------- + assert(metadata.depth == 1); + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + size_t height = metadata.height; + + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + const UINT dindex = D3D11CalcSubresource(static_cast(level), static_cast(item), static_cast(metadata.mipLevels)); + + D3D11_MAPPED_SUBRESOURCE mapped; + HRESULT hr = pContext->Map(pSource, dindex, D3D11_MAP_READ, 0, &mapped); + if (FAILED(hr)) + return hr; + + const Image* img = result.GetImage(level, item, 0); + if (!img) + { + pContext->Unmap(pSource, dindex); + return E_FAIL; + } + + if (!img->pixels) + { + pContext->Unmap(pSource, dindex); + return E_POINTER; + } + + const size_t lines = ComputeScanlines(metadata.format, height); + if (!lines) + { + pContext->Unmap(pSource, dindex); + return E_UNEXPECTED; + } + + const size_t msize = (metadata.dimension == TEX_DIMENSION_TEXTURE2D) + ? std::min(img->rowPitch, mapped.RowPitch) : img->rowPitch; + + auto sptr = static_cast(mapped.pData); + uint8_t* dptr = img->pixels; + for (size_t h = 0; h < lines; ++h) + { + memcpy(dptr, sptr, msize); + sptr += mapped.RowPitch; + dptr += img->rowPitch; + } + + pContext->Unmap(pSource, dindex); + + if (height > 1) + height >>= 1; + } + } + } + + return S_OK; + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Determine if given texture metadata is supported on the given device +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::IsSupportedTexture( + ID3D11Device* pDevice, + const TexMetadata& metadata) noexcept +{ + if (!pDevice) + return false; + + const D3D_FEATURE_LEVEL fl = pDevice->GetFeatureLevel(); + + // Validate format + const DXGI_FORMAT fmt = metadata.format; + + if (!IsValid(fmt)) + return false; + + const size_t iWidth = metadata.width; + const size_t iHeight = metadata.height; + + switch (static_cast(fmt)) + { + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + if (fl < D3D_FEATURE_LEVEL_10_0) + return false; + break; + + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + if (fl < D3D_FEATURE_LEVEL_11_0) + return false; + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + case DXGI_FORMAT_420_OPAQUE: + if ((metadata.dimension != TEX_DIMENSION_TEXTURE2D) + || (iWidth % 2) != 0 || (iHeight % 2) != 0) + { + return false; + } + break; + + case DXGI_FORMAT_YUY2: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + case WIN10_DXGI_FORMAT_P208: + if ((iWidth % 2) != 0) + { + return false; + } + break; + + case DXGI_FORMAT_NV11: + if ((iWidth % 4) != 0) + { + return false; + } + break; + + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + // Legacy video stream formats are not supported by Direct3D. + return false; + + case WIN10_DXGI_FORMAT_V208: + if ((metadata.dimension != TEX_DIMENSION_TEXTURE2D) + || (iHeight % 2) != 0) + { + return false; + } + break; + + default: + break; + } + + // Validate miplevel count + if (metadata.mipLevels > D3D11_REQ_MIP_LEVELS) + return false; + + // Validate array size, dimension, and width/height + const size_t arraySize = metadata.arraySize; + const size_t iDepth = metadata.depth; + + // Most cases are known apriori based on feature level, but we use this for robustness to handle the few optional cases + UINT formatSupport = 0; + HRESULT hr = pDevice->CheckFormatSupport(fmt, &formatSupport); + if (FAILED(hr)) + { + formatSupport = 0; + } + + if (metadata.mipLevels > 1 && !(formatSupport & D3D11_FORMAT_SUPPORT_MIP)) + { + return false; + } + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + if (!(formatSupport & D3D11_FORMAT_SUPPORT_TEXTURE1D)) + return false; + + if ((arraySize > D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) + || (iWidth > D3D11_REQ_TEXTURE1D_U_DIMENSION)) + return false; + + if (fl < D3D_FEATURE_LEVEL_11_0) + { + if ((arraySize > D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) + || (iWidth > D3D10_REQ_TEXTURE1D_U_DIMENSION)) + return false; + + if (fl < D3D_FEATURE_LEVEL_10_0) + { + if ((arraySize > 1) || (iWidth > D3D_FL9_3_REQ_TEXTURE1D_U_DIMENSION)) + return false; + + if ((fl < D3D_FEATURE_LEVEL_9_3) && (iWidth > D3D_FL9_1_REQ_TEXTURE1D_U_DIMENSION)) + return false; + } + } + break; + + case TEX_DIMENSION_TEXTURE2D: + if (metadata.IsCubemap()) + { + if (!(formatSupport & D3D11_FORMAT_SUPPORT_TEXTURECUBE)) + return false; + + if ((arraySize > D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + || (iWidth > D3D11_REQ_TEXTURECUBE_DIMENSION) + || (iHeight > D3D11_REQ_TEXTURECUBE_DIMENSION)) + return false; + + if (fl < D3D_FEATURE_LEVEL_11_0) + { + if ((arraySize > D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + || (iWidth > D3D10_REQ_TEXTURECUBE_DIMENSION) + || (iHeight > D3D10_REQ_TEXTURECUBE_DIMENSION)) + return false; + + if ((fl < D3D_FEATURE_LEVEL_10_1) && (arraySize != 6)) + return false; + + if (fl < D3D_FEATURE_LEVEL_10_0) + { + if ((iWidth > D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION) + || (iHeight > D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION)) + return false; + + if ((fl < D3D_FEATURE_LEVEL_9_3) + && ((iWidth > D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION) + || (iHeight > D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION))) + return false; + } + } + } + else // Not a cube map + { + if (!(formatSupport & D3D11_FORMAT_SUPPORT_TEXTURE2D)) + return false; + + if ((arraySize > D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + || (iWidth > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION) + || (iHeight > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + return false; + + if (fl < D3D_FEATURE_LEVEL_11_0) + { + if ((arraySize > D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + || (iWidth > D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION) + || (iHeight > D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + return false; + + if (fl < D3D_FEATURE_LEVEL_10_0) + { + if ((arraySize > 1) + || (iWidth > D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION) + || (iHeight > D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + return false; + + if ((fl < D3D_FEATURE_LEVEL_9_3) + && ((iWidth > D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION) + || (iHeight > D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION))) + return false; + } + } + } + break; + + case TEX_DIMENSION_TEXTURE3D: + if (!(formatSupport & D3D11_FORMAT_SUPPORT_TEXTURE3D)) + return false; + + if ((arraySize > 1) + || (iWidth > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) + || (iHeight > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) + || (iDepth > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION)) + return false; + + if (fl < D3D_FEATURE_LEVEL_11_0) + { + if ((iWidth > D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) + || (iHeight > D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) + || (iDepth > D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION)) + return false; + + if (fl < D3D_FEATURE_LEVEL_10_0) + { + if ((iWidth > D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) + || (iHeight > D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) + || (iDepth > D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION)) + return false; + } + } + break; + + default: + // Not a supported dimension + return false; + } + + return true; +} + + +//------------------------------------------------------------------------------------- +// Create a texture resource +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::CreateTexture( + ID3D11Device* pDevice, + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + ID3D11Resource** ppResource) noexcept +{ + return CreateTextureEx( + pDevice, srcImages, nimages, metadata, + D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0, CREATETEX_DEFAULT, + ppResource); +} + +_Use_decl_annotations_ +HRESULT DirectX::CreateTextureEx( + ID3D11Device* pDevice, + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + D3D11_USAGE usage, + unsigned int bindFlags, + unsigned int cpuAccessFlags, + unsigned int miscFlags, + CREATETEX_FLAGS flags, + ID3D11Resource** ppResource) noexcept +{ + if (!pDevice || !srcImages || !nimages || !ppResource) + return E_INVALIDARG; + + *ppResource = nullptr; + + if (!metadata.mipLevels || !metadata.arraySize) + return E_INVALIDARG; + + if ((metadata.width > UINT32_MAX) || (metadata.height > UINT32_MAX) + || (metadata.mipLevels > UINT16_MAX) || (metadata.arraySize > UINT16_MAX)) + return E_INVALIDARG; + + std::unique_ptr initData(new (std::nothrow) D3D11_SUBRESOURCE_DATA[metadata.mipLevels * metadata.arraySize]); + if (!initData) + return E_OUTOFMEMORY; + + // Fill out subresource array + if (metadata.IsVolumemap()) + { + //--- Volume case ------------------------------------------------------------- + if (!metadata.depth) + return E_INVALIDARG; + + if (metadata.depth > UINT16_MAX) + return E_INVALIDARG; + + if (metadata.arraySize > 1) + // Direct3D 11 doesn't support arrays of 3D textures + return HRESULT_E_NOT_SUPPORTED; + + size_t depth = metadata.depth; + + size_t idx = 0; + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + const size_t index = metadata.ComputeIndex(level, 0, 0); + if (index >= nimages) + return E_FAIL; + + const Image& img = srcImages[index]; + + if (img.format != metadata.format) + return E_FAIL; + + if (!img.pixels) + return E_POINTER; + + // Verify pixels in image 1 .. (depth-1) are exactly image->slicePitch apart + // For 3D textures, this relies on all slices of the same miplevel being continous in memory + // (this is how ScratchImage lays them out), which is why we just give the 0th slice to Direct3D 11 + const uint8_t* pSlice = img.pixels + img.slicePitch; + for (size_t slice = 1; slice < depth; ++slice) + { + const size_t tindex = metadata.ComputeIndex(level, 0, slice); + if (tindex >= nimages) + return E_FAIL; + + const Image& timg = srcImages[tindex]; + + if (!timg.pixels) + return E_POINTER; + + if (timg.pixels != pSlice + || timg.format != metadata.format + || timg.rowPitch != img.rowPitch + || timg.slicePitch != img.slicePitch) + return E_FAIL; + + pSlice = timg.pixels + img.slicePitch; + } + + assert(idx < (metadata.mipLevels * metadata.arraySize)); + + initData[idx].pSysMem = img.pixels; + initData[idx].SysMemPitch = static_cast(img.rowPitch); + initData[idx].SysMemSlicePitch = static_cast(img.slicePitch); + ++idx; + + if (depth > 1) + depth >>= 1; + } + } + else + { + //--- 1D or 2D texture case --------------------------------------------------- + size_t idx = 0; + for (size_t item = 0; item < metadata.arraySize; ++item) + { + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + const size_t index = metadata.ComputeIndex(level, item, 0); + if (index >= nimages) + return E_FAIL; + + const Image& img = srcImages[index]; + + if (img.format != metadata.format) + return E_FAIL; + + if (!img.pixels) + return E_POINTER; + + assert(idx < (metadata.mipLevels * metadata.arraySize)); + + initData[idx].pSysMem = img.pixels; + initData[idx].SysMemPitch = static_cast(img.rowPitch); + initData[idx].SysMemSlicePitch = static_cast(img.slicePitch); + ++idx; + } + } + } + + // Create texture using static initialization data + HRESULT hr = E_UNEXPECTED; + + DXGI_FORMAT format = metadata.format; + if (flags & CREATETEX_FORCE_SRGB) + { + format = MakeSRGB(format); + } + else if (flags & CREATETEX_IGNORE_SRGB) + { + format = MakeLinear(format); + } + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + { + D3D11_TEXTURE1D_DESC desc = {}; + desc.Width = static_cast(metadata.width); + desc.MipLevels = static_cast(metadata.mipLevels); + desc.ArraySize = static_cast(metadata.arraySize); + desc.Format = format; + desc.Usage = usage; + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = cpuAccessFlags; + desc.MiscFlags = miscFlags & ~static_cast(D3D11_RESOURCE_MISC_TEXTURECUBE); + + hr = pDevice->CreateTexture1D(&desc, initData.get(), reinterpret_cast(ppResource)); + } + break; + + case TEX_DIMENSION_TEXTURE2D: + { + D3D11_TEXTURE2D_DESC desc = {}; + desc.Width = static_cast(metadata.width); + desc.Height = static_cast(metadata.height); + desc.MipLevels = static_cast(metadata.mipLevels); + desc.ArraySize = static_cast(metadata.arraySize); + desc.Format = format; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Usage = usage; + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = cpuAccessFlags; + if (metadata.IsCubemap()) + desc.MiscFlags = miscFlags | D3D11_RESOURCE_MISC_TEXTURECUBE; + else + desc.MiscFlags = miscFlags & ~static_cast(D3D11_RESOURCE_MISC_TEXTURECUBE); + + hr = pDevice->CreateTexture2D(&desc, initData.get(), reinterpret_cast(ppResource)); + } + break; + + case TEX_DIMENSION_TEXTURE3D: + { + D3D11_TEXTURE3D_DESC desc = {}; + desc.Width = static_cast(metadata.width); + desc.Height = static_cast(metadata.height); + desc.Depth = static_cast(metadata.depth); + desc.MipLevels = static_cast(metadata.mipLevels); + desc.Format = format; + desc.Usage = usage; + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = cpuAccessFlags; + desc.MiscFlags = miscFlags & ~static_cast(D3D11_RESOURCE_MISC_TEXTURECUBE); + + hr = pDevice->CreateTexture3D(&desc, initData.get(), reinterpret_cast(ppResource)); + } + break; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + + return hr; +} + + +//------------------------------------------------------------------------------------- +// Create a shader resource view and associated texture +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::CreateShaderResourceView( + ID3D11Device* pDevice, + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + ID3D11ShaderResourceView** ppSRV) noexcept +{ + return CreateShaderResourceViewEx( + pDevice, srcImages, nimages, metadata, + D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0, CREATETEX_DEFAULT, + ppSRV); +} + +_Use_decl_annotations_ +HRESULT DirectX::CreateShaderResourceViewEx( + ID3D11Device* pDevice, + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + D3D11_USAGE usage, + unsigned int bindFlags, + unsigned int cpuAccessFlags, + unsigned int miscFlags, + CREATETEX_FLAGS flags, + ID3D11ShaderResourceView** ppSRV) noexcept +{ + if (!ppSRV) + return E_INVALIDARG; + + *ppSRV = nullptr; + + if (!(bindFlags & D3D11_BIND_SHADER_RESOURCE)) + return E_INVALIDARG; + + ComPtr resource; + HRESULT hr = CreateTextureEx(pDevice, srcImages, nimages, metadata, + usage, bindFlags, cpuAccessFlags, miscFlags, flags, + resource.GetAddressOf()); + if (FAILED(hr)) + return hr; + + assert(resource); + + D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc = {}; + if (flags & CREATETEX_FORCE_SRGB) + { + SRVDesc.Format = MakeSRGB(metadata.format); + } + else if (flags & CREATETEX_IGNORE_SRGB) + { + SRVDesc.Format = MakeLinear(metadata.format); + } + else + { + SRVDesc.Format = metadata.format; + } + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + if (metadata.arraySize > 1) + { + SRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE1DARRAY; + SRVDesc.Texture1DArray.MipLevels = static_cast(metadata.mipLevels); + SRVDesc.Texture1DArray.ArraySize = static_cast(metadata.arraySize); + } + else + { + SRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE1D; + SRVDesc.Texture1D.MipLevels = static_cast(metadata.mipLevels); + } + break; + + case TEX_DIMENSION_TEXTURE2D: + if (metadata.IsCubemap()) + { + if (metadata.arraySize > 6) + { + assert((metadata.arraySize % 6) == 0); + SRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURECUBEARRAY; + SRVDesc.TextureCubeArray.MipLevels = static_cast(metadata.mipLevels); + SRVDesc.TextureCubeArray.NumCubes = static_cast(metadata.arraySize / 6); + } + else + { + SRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURECUBE; + SRVDesc.TextureCube.MipLevels = static_cast(metadata.mipLevels); + } + } + else if (metadata.arraySize > 1) + { + SRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY; + SRVDesc.Texture2DArray.MipLevels = static_cast(metadata.mipLevels); + SRVDesc.Texture2DArray.ArraySize = static_cast(metadata.arraySize); + } + else + { + SRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2D; + SRVDesc.Texture2D.MipLevels = static_cast(metadata.mipLevels); + } + break; + + case TEX_DIMENSION_TEXTURE3D: + assert(metadata.arraySize == 1); + SRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE3D; + SRVDesc.Texture3D.MipLevels = static_cast(metadata.mipLevels); + break; + + default: + return E_FAIL; + } + + hr = pDevice->CreateShaderResourceView(resource.Get(), &SRVDesc, ppSRV); + if (FAILED(hr)) + return hr; + + assert(*ppSRV); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Save a texture resource +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::CaptureTexture( + ID3D11Device* pDevice, + ID3D11DeviceContext* pContext, + ID3D11Resource* pSource, + ScratchImage& result) noexcept +{ + if (!pDevice || !pContext || !pSource) + return E_INVALIDARG; + + D3D11_RESOURCE_DIMENSION resType = D3D11_RESOURCE_DIMENSION_UNKNOWN; + pSource->GetType(&resType); + + HRESULT hr = E_UNEXPECTED; + + switch (resType) + { + case D3D11_RESOURCE_DIMENSION_TEXTURE1D: + { + ComPtr pTexture; + hr = pSource->QueryInterface(IID_GRAPHICS_PPV_ARGS(pTexture.GetAddressOf())); + if (FAILED(hr)) + break; + + assert(pTexture); + + D3D11_TEXTURE1D_DESC desc; + pTexture->GetDesc(&desc); + + ComPtr pStaging; + if ((desc.Usage == D3D11_USAGE_STAGING) && (desc.CPUAccessFlags & D3D11_CPU_ACCESS_READ)) + { + // Handle case where the source is already a staging texture we can use directly + pStaging = pTexture; + } + else + { + desc.BindFlags = 0; + desc.MiscFlags = 0; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + desc.Usage = D3D11_USAGE_STAGING; + + hr = pDevice->CreateTexture1D(&desc, nullptr, pStaging.GetAddressOf()); + if (FAILED(hr)) + break; + + assert(pStaging); + + pContext->CopyResource(pStaging.Get(), pSource); + } + + TexMetadata mdata; + mdata.width = desc.Width; + mdata.height = mdata.depth = 1; + mdata.arraySize = desc.ArraySize; + mdata.mipLevels = desc.MipLevels; + mdata.miscFlags = 0; + mdata.miscFlags2 = 0; + mdata.format = desc.Format; + mdata.dimension = TEX_DIMENSION_TEXTURE1D; + + hr = result.Initialize(mdata); + if (FAILED(hr)) + break; + + hr = Capture(pContext, pStaging.Get(), mdata, result); + } + break; + + case D3D11_RESOURCE_DIMENSION_TEXTURE2D: + { + ComPtr pTexture; + hr = pSource->QueryInterface(IID_GRAPHICS_PPV_ARGS(pTexture.GetAddressOf())); + if (FAILED(hr)) + break; + + assert(pTexture); + + D3D11_TEXTURE2D_DESC desc; + pTexture->GetDesc(&desc); + + ComPtr pStaging; + if (desc.SampleDesc.Count > 1) + { + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + + ComPtr pTemp; + hr = pDevice->CreateTexture2D(&desc, nullptr, pTemp.GetAddressOf()); + if (FAILED(hr)) + break; + + assert(pTemp); + + DXGI_FORMAT fmt = desc.Format; + if (IsTypeless(fmt)) + { + // Assume a UNORM if it exists otherwise use FLOAT + fmt = MakeTypelessUNORM(fmt); + fmt = MakeTypelessFLOAT(fmt); + } + + UINT support = 0; + hr = pDevice->CheckFormatSupport(fmt, &support); + if (FAILED(hr)) + break; + + if (!(support & D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE)) + { + hr = E_FAIL; + break; + } + + for (UINT item = 0; item < desc.ArraySize; ++item) + { + for (UINT level = 0; level < desc.MipLevels; ++level) + { + const UINT index = D3D11CalcSubresource(level, item, desc.MipLevels); + pContext->ResolveSubresource(pTemp.Get(), index, pSource, index, fmt); + } + } + + desc.BindFlags = 0; + desc.MiscFlags &= D3D11_RESOURCE_MISC_TEXTURECUBE; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + desc.Usage = D3D11_USAGE_STAGING; + + hr = pDevice->CreateTexture2D(&desc, nullptr, pStaging.GetAddressOf()); + if (FAILED(hr)) + break; + + assert(pStaging); + + pContext->CopyResource(pStaging.Get(), pTemp.Get()); + } + else if ((desc.Usage == D3D11_USAGE_STAGING) && (desc.CPUAccessFlags & D3D11_CPU_ACCESS_READ)) + { + // Handle case where the source is already a staging texture we can use directly + pStaging = pTexture; + } + else + { + desc.BindFlags = 0; + desc.MiscFlags &= D3D11_RESOURCE_MISC_TEXTURECUBE; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + desc.Usage = D3D11_USAGE_STAGING; + + hr = pDevice->CreateTexture2D(&desc, nullptr, &pStaging); + if (FAILED(hr)) + break; + + assert(pStaging); + + pContext->CopyResource(pStaging.Get(), pSource); + } + + TexMetadata mdata; + mdata.width = desc.Width; + mdata.height = desc.Height; + mdata.depth = 1; + mdata.arraySize = desc.ArraySize; + mdata.mipLevels = desc.MipLevels; + mdata.miscFlags = (desc.MiscFlags & D3D11_RESOURCE_MISC_TEXTURECUBE) ? TEX_MISC_TEXTURECUBE : 0u; + mdata.miscFlags2 = 0; + mdata.format = desc.Format; + mdata.dimension = TEX_DIMENSION_TEXTURE2D; + + hr = result.Initialize(mdata); + if (FAILED(hr)) + break; + + hr = Capture(pContext, pStaging.Get(), mdata, result); + } + break; + + case D3D11_RESOURCE_DIMENSION_TEXTURE3D: + { + ComPtr pTexture; + hr = pSource->QueryInterface(IID_GRAPHICS_PPV_ARGS(pTexture.GetAddressOf())); + if (FAILED(hr)) + break; + + assert(pTexture); + + D3D11_TEXTURE3D_DESC desc; + pTexture->GetDesc(&desc); + + ComPtr pStaging; + if ((desc.Usage == D3D11_USAGE_STAGING) && (desc.CPUAccessFlags & D3D11_CPU_ACCESS_READ)) + { + // Handle case where the source is already a staging texture we can use directly + pStaging = pTexture; + } + else + { + desc.BindFlags = 0; + desc.MiscFlags = 0; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + desc.Usage = D3D11_USAGE_STAGING; + + hr = pDevice->CreateTexture3D(&desc, nullptr, pStaging.GetAddressOf()); + if (FAILED(hr)) + break; + + assert(pStaging); + + pContext->CopyResource(pStaging.Get(), pSource); + } + + TexMetadata mdata; + mdata.width = desc.Width; + mdata.height = desc.Height; + mdata.depth = desc.Depth; + mdata.arraySize = 1; + mdata.mipLevels = desc.MipLevels; + mdata.miscFlags = 0; + mdata.miscFlags2 = 0; + mdata.format = desc.Format; + mdata.dimension = TEX_DIMENSION_TEXTURE3D; + + hr = result.Initialize(mdata); + if (FAILED(hr)) + break; + + hr = Capture(pContext, pStaging.Get(), mdata, result); + } + break; + + default: + hr = E_FAIL; + break; + } + + if (FAILED(hr)) + { + result.Release(); + return hr; + } + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexD3D12.cpp b/external/DirectXTex/DirectXTexD3D12.cpp new file mode 100644 index 00000000..eba8281c --- /dev/null +++ b/external/DirectXTex/DirectXTexD3D12.cpp @@ -0,0 +1,897 @@ +//------------------------------------------------------------------------------------- +// DirectXTexD3D12.cpp +// +// DirectX Texture Library - Direct3D 12 helpers +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-conversion" +#pragma clang diagnostic ignored "-Wunused-macros" +#endif + +#define D3DX12_NO_STATE_OBJECT_HELPERS +#define D3DX12_NO_CHECK_FEATURE_SUPPORT_CLASS +#ifdef _GAMING_XBOX_SCARLETT +#include +#elif (defined(_XBOX_ONE) && defined(_TITLE)) || defined(_GAMING_XBOX) +#include "d3dx12_x.h" +#elif !defined(_WIN32) || defined(USING_DIRECTX_HEADERS) +#include "directx/d3dx12.h" +#include "dxguids/dxguids.h" +#else +#include "d3dx12.h" +#endif + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#ifndef IID_GRAPHICS_PPV_ARGS +#define IID_GRAPHICS_PPV_ARGS(x) IID_PPV_ARGS(x) +#endif + +using namespace DirectX; +using Microsoft::WRL::ComPtr; + +static_assert(static_cast(TEX_DIMENSION_TEXTURE1D) == static_cast(D3D12_RESOURCE_DIMENSION_TEXTURE1D), "header enum mismatch"); +static_assert(static_cast(TEX_DIMENSION_TEXTURE2D) == static_cast(D3D12_RESOURCE_DIMENSION_TEXTURE2D), "header enum mismatch"); +static_assert(static_cast(TEX_DIMENSION_TEXTURE3D) == static_cast(D3D12_RESOURCE_DIMENSION_TEXTURE3D), "header enum mismatch"); + +namespace +{ + template void AdjustPlaneResource( + _In_ DXGI_FORMAT fmt, + _In_ size_t height, + _In_ size_t slicePlane, + _Inout_ T& res) noexcept + { + switch (static_cast(fmt)) + { + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + case XBOX_DXGI_FORMAT_D16_UNORM_S8_UINT: + case XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS: + case XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT: + if (!slicePlane) + { + // Plane 0 + res.SlicePitch = res.RowPitch * static_cast(height); + } + else + { + // Plane 1 + res.pData = const_cast(reinterpret_cast(res.pData) + res.RowPitch * PT(height)); + res.SlicePitch = res.RowPitch * static_cast((height + 1) >> 1); + } + break; + + case DXGI_FORMAT_NV11: + if (!slicePlane) + { + // Plane 0 + res.SlicePitch = res.RowPitch * static_cast(height); + } + else + { + // Plane 1 + res.pData = const_cast(reinterpret_cast(res.pData) + res.RowPitch * PT(height)); + res.RowPitch = (res.RowPitch >> 1); + res.SlicePitch = res.RowPitch * static_cast(height); + } + break; + + default: + break; + } + } + + + //-------------------------------------------------------------------------------------- + inline void TransitionResource( + _In_ ID3D12GraphicsCommandList* commandList, + _In_ ID3D12Resource* resource, + _In_ D3D12_RESOURCE_STATES stateBefore, + _In_ D3D12_RESOURCE_STATES stateAfter) + { + assert(commandList != nullptr); + assert(resource != nullptr); + + if (stateBefore == stateAfter) + return; + + D3D12_RESOURCE_BARRIER desc = {}; + desc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + desc.Transition.pResource = resource; + desc.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + desc.Transition.StateBefore = stateBefore; + desc.Transition.StateAfter = stateAfter; + + commandList->ResourceBarrier(1, &desc); + } + + + //-------------------------------------------------------------------------------------- + HRESULT Capture(_In_ ID3D12Device* device, + _In_ ID3D12CommandQueue* pCommandQ, + _In_ ID3D12Resource* pSource, + const D3D12_RESOURCE_DESC& desc, + _COM_Outptr_ ID3D12Resource** pStaging, + std::unique_ptr& layoutBuff, + UINT& numberOfPlanes, + UINT& numberOfResources, + D3D12_RESOURCE_STATES beforeState, + D3D12_RESOURCE_STATES afterState) noexcept + { + if (pStaging) + { + *pStaging = nullptr; + } + + if (!pCommandQ || !pSource || !pStaging) + return E_INVALIDARG; + + numberOfPlanes = D3D12GetFormatPlaneCount(device, desc.Format); + if (!numberOfPlanes) + return E_INVALIDARG; + + if ((numberOfPlanes > 1) && IsDepthStencil(desc.Format)) + { + // DirectX 12 uses planes for stencil, DirectX 11 does not + return HRESULT_E_NOT_SUPPORTED; + } + + numberOfResources = (desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 1u : desc.DepthOrArraySize; + numberOfResources *= desc.MipLevels; + numberOfResources *= numberOfPlanes; + + if (numberOfResources > D3D12_REQ_SUBRESOURCES) + return E_UNEXPECTED; + + const size_t memAlloc = (sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * numberOfResources; + if (memAlloc > SIZE_MAX) + return E_UNEXPECTED; + + layoutBuff.reset(new (std::nothrow) uint8_t[memAlloc]); + if (!layoutBuff) + return E_OUTOFMEMORY; + + auto pLayout = reinterpret_cast(layoutBuff.get()); + auto pRowSizesInBytes = reinterpret_cast(pLayout + numberOfResources); + auto pNumRows = reinterpret_cast(pRowSizesInBytes + numberOfResources); + + UINT64 totalResourceSize = 0; + device->GetCopyableFootprints(&desc, 0, numberOfResources, 0, + pLayout, pNumRows, pRowSizesInBytes, &totalResourceSize); + + D3D12_HEAP_PROPERTIES sourceHeapProperties; + HRESULT hr = pSource->GetHeapProperties(&sourceHeapProperties, nullptr); + if (SUCCEEDED(hr) && sourceHeapProperties.Type == D3D12_HEAP_TYPE_READBACK) + { + // Handle case where the source is already a staging texture we can use directly + *pStaging = pSource; + pSource->AddRef(); + return S_OK; + } + + // Create a command allocator + ComPtr commandAlloc; + hr = device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_GRAPHICS_PPV_ARGS(commandAlloc.GetAddressOf())); + if (FAILED(hr)) + return hr; + + // Spin up a new command list + ComPtr commandList; + hr = device->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, commandAlloc.Get(), nullptr, IID_GRAPHICS_PPV_ARGS(commandList.GetAddressOf())); + if (FAILED(hr)) + return hr; + + // Create a fence + ComPtr fence; + hr = device->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_GRAPHICS_PPV_ARGS(fence.GetAddressOf())); + if (FAILED(hr)) + return hr; + + const CD3DX12_HEAP_PROPERTIES defaultHeapProperties(D3D12_HEAP_TYPE_DEFAULT); + const CD3DX12_HEAP_PROPERTIES readBackHeapProperties(D3D12_HEAP_TYPE_READBACK); + + // Readback resources must be buffers + D3D12_RESOURCE_DESC bufferDesc = {}; + bufferDesc.DepthOrArraySize = 1; + bufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + bufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + bufferDesc.Format = DXGI_FORMAT_UNKNOWN; + bufferDesc.Height = 1; + bufferDesc.Width = totalResourceSize; + bufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + bufferDesc.MipLevels = 1; + bufferDesc.SampleDesc.Count = 1; + + ComPtr copySource(pSource); + D3D12_RESOURCE_STATES beforeStateSource = beforeState; + if (desc.SampleDesc.Count > 1) + { + TransitionResource(commandList.Get(), pSource, beforeState, D3D12_RESOURCE_STATE_RESOLVE_SOURCE); + + // MSAA content must be resolved before being copied to a staging texture + auto descCopy = desc; + descCopy.SampleDesc.Count = 1; + descCopy.SampleDesc.Quality = 0; + descCopy.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; + + ComPtr pTemp; + hr = device->CreateCommittedResource( + &defaultHeapProperties, + D3D12_HEAP_FLAG_NONE, + &descCopy, + D3D12_RESOURCE_STATE_RESOLVE_DEST, + nullptr, + IID_GRAPHICS_PPV_ARGS(pTemp.GetAddressOf())); + if (FAILED(hr)) + return hr; + + assert(pTemp); + + DXGI_FORMAT fmt = desc.Format; + if (IsTypeless(fmt)) + { + // Assume a UNORM if it exists otherwise use FLOAT + fmt = MakeTypelessUNORM(fmt); + fmt = MakeTypelessFLOAT(fmt); + } + + D3D12_FEATURE_DATA_FORMAT_SUPPORT formatInfo = { fmt, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE }; + hr = device->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &formatInfo, sizeof(formatInfo)); + if (FAILED(hr)) + return hr; + + if (!(formatInfo.Support1 & D3D12_FORMAT_SUPPORT1_TEXTURE2D)) + return E_FAIL; + + for (UINT plane = 0; plane < numberOfPlanes; ++plane) + { + for (UINT item = 0; item < desc.DepthOrArraySize; ++item) + { + for (UINT level = 0; level < desc.MipLevels; ++level) + { + const UINT index = D3D12CalcSubresource(level, item, plane, desc.MipLevels, desc.DepthOrArraySize); + commandList->ResolveSubresource(pTemp.Get(), index, pSource, index, fmt); + } + } + } + + copySource = pTemp; + beforeState = D3D12_RESOURCE_STATE_RESOLVE_DEST; + } + else + { + beforeStateSource = D3D12_RESOURCE_STATE_COPY_SOURCE; + } + + // Create a staging texture + hr = device->CreateCommittedResource( + &readBackHeapProperties, + D3D12_HEAP_FLAG_NONE, + &bufferDesc, + D3D12_RESOURCE_STATE_COPY_DEST, + nullptr, + IID_GRAPHICS_PPV_ARGS(pStaging)); + if (FAILED(hr)) + return hr; + + assert(*pStaging); + + // Transition the resource if necessary + TransitionResource(commandList.Get(), copySource.Get(), beforeState, D3D12_RESOURCE_STATE_COPY_SOURCE); + + // Get the copy target location + for (UINT j = 0; j < numberOfResources; ++j) + { + const CD3DX12_TEXTURE_COPY_LOCATION copyDest(*pStaging, pLayout[j]); + const CD3DX12_TEXTURE_COPY_LOCATION copySrc(copySource.Get(), j); + commandList->CopyTextureRegion(©Dest, 0, 0, 0, ©Src, nullptr); + } + + // Transition the source resource to the next state + TransitionResource(commandList.Get(), pSource, beforeStateSource, afterState); + + hr = commandList->Close(); + if (FAILED(hr)) + return hr; + + // Execute the command list + pCommandQ->ExecuteCommandLists(1, CommandListCast(commandList.GetAddressOf())); + + // Signal the fence + hr = pCommandQ->Signal(fence.Get(), 1); + if (FAILED(hr)) + return hr; + + // Block until the copy is complete + while (fence->GetCompletedValue() < 1) + { + #ifdef _WIN32 + SwitchToThread(); + #else + std::this_thread::yield(); + #endif + } + + return S_OK; + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Determine if given texture metadata is supported on the given device +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::IsSupportedTexture( + ID3D12Device* pDevice, + const TexMetadata& metadata) noexcept +{ + if (!pDevice) + return false; + + // Validate format + const DXGI_FORMAT fmt = metadata.format; + + if (!IsValid(fmt)) + return false; + + const size_t iWidth = metadata.width; + const size_t iHeight = metadata.height; + + switch (static_cast(fmt)) + { + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + case DXGI_FORMAT_420_OPAQUE: + if ((metadata.dimension != TEX_DIMENSION_TEXTURE2D) + || (iWidth % 2) != 0 || (iHeight % 2) != 0) + { + return false; + } + break; + + case DXGI_FORMAT_YUY2: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + case WIN10_DXGI_FORMAT_P208: + if ((iWidth % 2) != 0) + { + return false; + } + break; + + case DXGI_FORMAT_NV11: + if ((iWidth % 4) != 0) + { + return false; + } + break; + + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + // Legacy video stream formats are not supported by Direct3D. + return false; + + case WIN10_DXGI_FORMAT_V208: + if ((metadata.dimension != TEX_DIMENSION_TEXTURE2D) + || (iHeight % 2) != 0) + { + return false; + } + break; + + default: + break; + } + + // Validate miplevel count + if (metadata.mipLevels > D3D12_REQ_MIP_LEVELS) + return false; + + // Validate array size, dimension, and width/height + const size_t arraySize = metadata.arraySize; + const size_t iDepth = metadata.depth; + + // Most cases are known apriori based on feature level, but we use this for robustness to handle the few optional cases + D3D12_FEATURE_DATA_FORMAT_SUPPORT formatSupport = { fmt, D3D12_FORMAT_SUPPORT1_NONE, D3D12_FORMAT_SUPPORT2_NONE }; + HRESULT hr = pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &formatSupport, sizeof(formatSupport)); + if (FAILED(hr)) + { + memset(&formatSupport, 0, sizeof(formatSupport)); + } + + if (metadata.mipLevels > 1 && !(formatSupport.Support1 & D3D12_FORMAT_SUPPORT1_MIP)) + { + return false; + } + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + if (!(formatSupport.Support1 & D3D12_FORMAT_SUPPORT1_TEXTURE1D)) + return false; + + if ((arraySize > D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION) + || (iWidth > D3D12_REQ_TEXTURE1D_U_DIMENSION)) + return false; + + { + const uint64_t numberOfResources = uint64_t(arraySize) * uint64_t(metadata.mipLevels); + if (numberOfResources > D3D12_REQ_SUBRESOURCES) + return false; + } + break; + + case TEX_DIMENSION_TEXTURE2D: + if (metadata.IsCubemap()) + { + if (!(formatSupport.Support1 & D3D12_FORMAT_SUPPORT1_TEXTURECUBE)) + return false; + + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + || (iWidth > D3D12_REQ_TEXTURECUBE_DIMENSION) + || (iHeight > D3D12_REQ_TEXTURECUBE_DIMENSION)) + return false; + } + else // Not a cube map + { + if (!(formatSupport.Support1 & D3D12_FORMAT_SUPPORT1_TEXTURE2D)) + return false; + + if ((arraySize > D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + || (iWidth > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION) + || (iHeight > D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION)) + return false; + } + + { + const uint64_t numberOfResources = uint64_t(arraySize) * uint64_t(metadata.mipLevels); + if (numberOfResources > D3D12_REQ_SUBRESOURCES) + return false; + } + break; + + case TEX_DIMENSION_TEXTURE3D: + if (!(formatSupport.Support1 & D3D12_FORMAT_SUPPORT1_TEXTURE3D)) + return false; + + if ((arraySize > 1) + || (iWidth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) + || (iHeight > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION) + || (iDepth > D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION)) + return false; + + { + if (metadata.mipLevels > D3D12_REQ_SUBRESOURCES) + return false; + } + break; + + default: + // Not a supported dimension + return false; + } + + return true; +} + + +//------------------------------------------------------------------------------------- +// Create a texture resource +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::CreateTexture( + ID3D12Device* pDevice, + const TexMetadata& metadata, + ID3D12Resource** ppResource) noexcept +{ + return CreateTextureEx( + pDevice, metadata, + D3D12_RESOURCE_FLAG_NONE, CREATETEX_DEFAULT, + ppResource); +} + +_Use_decl_annotations_ +HRESULT DirectX::CreateTextureEx( + ID3D12Device* pDevice, + const TexMetadata& metadata, + D3D12_RESOURCE_FLAGS resFlags, + CREATETEX_FLAGS flags, + ID3D12Resource** ppResource) noexcept +{ + if (!pDevice || !ppResource) + return E_INVALIDARG; + + *ppResource = nullptr; + + if (!metadata.mipLevels || !metadata.arraySize) + return E_INVALIDARG; + + if ((metadata.width > UINT32_MAX) || (metadata.height > UINT32_MAX) + || (metadata.mipLevels > UINT16_MAX) || (metadata.arraySize > UINT16_MAX)) + return E_INVALIDARG; + + DXGI_FORMAT format = metadata.format; + if (flags & CREATETEX_FORCE_SRGB) + { + format = MakeSRGB(format); + } + else if (flags & CREATETEX_IGNORE_SRGB) + { + format = MakeLinear(format); + } + + D3D12_RESOURCE_DESC desc = {}; + desc.Width = static_cast(metadata.width); + desc.Height = static_cast(metadata.height); + desc.MipLevels = static_cast(metadata.mipLevels); + desc.DepthOrArraySize = (metadata.dimension == TEX_DIMENSION_TEXTURE3D) + ? static_cast(metadata.depth) + : static_cast(metadata.arraySize); + desc.Format = format; + desc.Flags = resFlags; + desc.SampleDesc.Count = 1; + desc.Dimension = static_cast(metadata.dimension); + + const CD3DX12_HEAP_PROPERTIES defaultHeapProperties(D3D12_HEAP_TYPE_DEFAULT); + + HRESULT hr = pDevice->CreateCommittedResource( + &defaultHeapProperties, + D3D12_HEAP_FLAG_NONE, + &desc, + #if (defined(_XBOX_ONE) && defined(_TITLE)) || defined(_GAMING_XBOX) + D3D12_RESOURCE_STATE_COPY_DEST, + #else + D3D12_RESOURCE_STATE_COMMON, + #endif + nullptr, + IID_GRAPHICS_PPV_ARGS(ppResource)); + + return hr; +} + + +//------------------------------------------------------------------------------------- +// Prepares a texture resource for upload +//------------------------------------------------------------------------------------- + +_Use_decl_annotations_ +HRESULT DirectX::PrepareUpload( + ID3D12Device* pDevice, + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + std::vector& subresources) +{ + if (!pDevice || !srcImages || !nimages || !metadata.mipLevels || !metadata.arraySize) + return E_INVALIDARG; + + const UINT numberOfPlanes = D3D12GetFormatPlaneCount(pDevice, metadata.format); + if (!numberOfPlanes) + return E_INVALIDARG; + + if ((numberOfPlanes > 1) && IsDepthStencil(metadata.format)) + { + // DirectX 12 uses planes for stencil, DirectX 11 does not + return HRESULT_E_NOT_SUPPORTED; + } + + size_t numberOfResources = (metadata.dimension == TEX_DIMENSION_TEXTURE3D) + ? 1u : metadata.arraySize; + numberOfResources *= metadata.mipLevels; + numberOfResources *= numberOfPlanes; + + if (numberOfResources > D3D12_REQ_SUBRESOURCES) + return E_INVALIDARG; + + subresources.clear(); + subresources.reserve(numberOfResources); + + // Fill out subresource array + if (metadata.IsVolumemap()) + { + //--- Volume case ------------------------------------------------------------- + if (!metadata.depth) + return E_INVALIDARG; + + if (metadata.depth > UINT16_MAX) + return E_INVALIDARG; + + if (metadata.arraySize > 1) + // Direct3D 12 doesn't support arrays of 3D textures + return HRESULT_E_NOT_SUPPORTED; + + for (size_t plane = 0; plane < numberOfPlanes; ++plane) + { + size_t depth = metadata.depth; + + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + const size_t index = metadata.ComputeIndex(level, 0, 0); + if (index >= nimages) + return E_FAIL; + + const Image& img = srcImages[index]; + + if (img.format != metadata.format) + return E_FAIL; + + if (!img.pixels) + return E_POINTER; + + // Verify pixels in image 1 .. (depth-1) are exactly image->slicePitch apart + // For 3D textures, this relies on all slices of the same miplevel being continous in memory + // (this is how ScratchImage lays them out), which is why we just give the 0th slice to Direct3D 11 + const uint8_t* pSlice = img.pixels + img.slicePitch; + for (size_t slice = 1; slice < depth; ++slice) + { + const size_t tindex = metadata.ComputeIndex(level, 0, slice); + if (tindex >= nimages) + return E_FAIL; + + const Image& timg = srcImages[tindex]; + + if (!timg.pixels) + return E_POINTER; + + if (timg.pixels != pSlice + || timg.format != metadata.format + || timg.rowPitch != img.rowPitch + || timg.slicePitch != img.slicePitch) + return E_FAIL; + + pSlice = timg.pixels + img.slicePitch; + } + + D3D12_SUBRESOURCE_DATA res = + { + img.pixels, + static_cast(img.rowPitch), + static_cast(img.slicePitch) + }; + + AdjustPlaneResource(metadata.format, img.height, plane, res); + + subresources.emplace_back(res); + + if (depth > 1) + depth >>= 1; + } + } + } + else + { + //--- 1D or 2D texture case --------------------------------------------------- + for (size_t plane = 0; plane < numberOfPlanes; ++plane) + { + for (size_t item = 0; item < metadata.arraySize; ++item) + { + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + const size_t index = metadata.ComputeIndex(level, item, 0); + if (index >= nimages) + return E_FAIL; + + const Image& img = srcImages[index]; + + if (img.format != metadata.format) + return E_FAIL; + + if (!img.pixels) + return E_POINTER; + + D3D12_SUBRESOURCE_DATA res = + { + img.pixels, + static_cast(img.rowPitch), + static_cast(img.slicePitch) + }; + + AdjustPlaneResource(metadata.format, img.height, plane, res); + + subresources.emplace_back(res); + } + } + } + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Save a texture resource +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::CaptureTexture( + ID3D12CommandQueue* pCommandQueue, + ID3D12Resource* pSource, + bool isCubeMap, + ScratchImage& result, + D3D12_RESOURCE_STATES beforeState, + D3D12_RESOURCE_STATES afterState) noexcept +{ + if (!pCommandQueue || !pSource) + return E_INVALIDARG; + + ComPtr device; + pCommandQueue->GetDevice(IID_GRAPHICS_PPV_ARGS(device.GetAddressOf())); + +#if defined(_MSC_VER) || !defined(_WIN32) + auto const desc = pSource->GetDesc(); +#else + D3D12_RESOURCE_DESC tmpDesc; + auto const& desc = *pSource->GetDesc(&tmpDesc); +#endif + + ComPtr pStaging; + std::unique_ptr layoutBuff; + UINT numberOfPlanes, numberOfResources; + HRESULT hr = Capture(device.Get(), + pCommandQueue, + pSource, + desc, + pStaging.GetAddressOf(), + layoutBuff, + numberOfPlanes, + numberOfResources, + beforeState, + afterState); + if (FAILED(hr)) + return hr; + + if (!layoutBuff || !numberOfPlanes || !numberOfResources) + return E_UNEXPECTED; + + auto pLayout = reinterpret_cast(layoutBuff.get()); + auto pRowSizesInBytes = reinterpret_cast(pLayout + numberOfResources); + auto pNumRows = reinterpret_cast(pRowSizesInBytes + numberOfResources); + + switch (desc.Dimension) + { + case D3D12_RESOURCE_DIMENSION_TEXTURE1D: + { + TexMetadata mdata; + mdata.width = static_cast(desc.Width); + mdata.height = mdata.depth = 1; + mdata.arraySize = desc.DepthOrArraySize; + mdata.mipLevels = desc.MipLevels; + mdata.miscFlags = 0; + mdata.miscFlags2 = 0; + mdata.format = desc.Format; + mdata.dimension = TEX_DIMENSION_TEXTURE1D; + + hr = result.Initialize(mdata); + if (FAILED(hr)) + return hr; + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE2D: + { + TexMetadata mdata; + mdata.width = static_cast(desc.Width); + mdata.height = desc.Height; + mdata.depth = 1; + mdata.arraySize = desc.DepthOrArraySize; + mdata.mipLevels = desc.MipLevels; + mdata.miscFlags = isCubeMap ? TEX_MISC_TEXTURECUBE : 0u; + mdata.miscFlags2 = 0; + mdata.format = desc.Format; + mdata.dimension = TEX_DIMENSION_TEXTURE2D; + + hr = result.Initialize(mdata); + if (FAILED(hr)) + return hr; + } + break; + + case D3D12_RESOURCE_DIMENSION_TEXTURE3D: + { + TexMetadata mdata; + mdata.width = static_cast(desc.Width); + mdata.height = desc.Height; + mdata.depth = desc.DepthOrArraySize; + mdata.arraySize = 1; + mdata.mipLevels = desc.MipLevels; + mdata.miscFlags = 0; + mdata.miscFlags2 = 0; + mdata.format = desc.Format; + mdata.dimension = TEX_DIMENSION_TEXTURE3D; + + hr = result.Initialize(mdata); + if (FAILED(hr)) + return hr; + } + break; + + default: + return E_FAIL; + } + + BYTE* pData = nullptr; + hr = pStaging->Map(0, nullptr, reinterpret_cast(&pData)); + if (FAILED(hr)) + { + result.Release(); + return E_FAIL; + } + + const UINT arraySize = (desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D) + ? 1u + : desc.DepthOrArraySize; + + for (UINT plane = 0; plane < numberOfPlanes; ++plane) + { + for (UINT item = 0; item < arraySize; ++item) + { + for (UINT level = 0; level < desc.MipLevels; ++level) + { + const UINT dindex = D3D12CalcSubresource(level, item, plane, desc.MipLevels, arraySize); + assert(dindex < numberOfResources); + + const Image* img = result.GetImage(level, item, 0); + if (!img) + { + pStaging->Unmap(0, nullptr); + result.Release(); + return E_FAIL; + } + + if (!img->pixels) + { + pStaging->Unmap(0, nullptr); + result.Release(); + return E_POINTER; + } + + D3D12_MEMCPY_DEST destData = { img->pixels, img->rowPitch, img->slicePitch }; + + AdjustPlaneResource(img->format, img->height, plane, destData); + + D3D12_SUBRESOURCE_DATA srcData = + { + pData + pLayout[dindex].Offset, + static_cast(pLayout[dindex].Footprint.RowPitch), + static_cast(pLayout[dindex].Footprint.RowPitch) * static_cast(pNumRows[dindex]) + }; + + if (pRowSizesInBytes[dindex] > SIZE_T(-1)) + { + pStaging->Unmap(0, nullptr); + result.Release(); + return E_FAIL; + } + + MemcpySubresource(&destData, &srcData, + static_cast(pRowSizesInBytes[dindex]), + pNumRows[dindex], + pLayout[dindex].Footprint.Depth); + } + } + } + + pStaging->Unmap(0, nullptr); + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexDDS.cpp b/external/DirectXTex/DirectXTexDDS.cpp new file mode 100644 index 00000000..c471da3c --- /dev/null +++ b/external/DirectXTex/DirectXTexDDS.cpp @@ -0,0 +1,2830 @@ +//------------------------------------------------------------------------------------- +// DirectXTexDDS.cpp +// +// DirectX Texture Library - Microsoft DirectDraw Surface (DDS) file format reader/writer +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#include "DDS.h" + +using namespace DirectX; +using namespace DirectX::Internal; + +static_assert(static_cast(TEX_DIMENSION_TEXTURE1D) == static_cast(DDS_DIMENSION_TEXTURE1D), "header enum mismatch"); +static_assert(static_cast(TEX_DIMENSION_TEXTURE2D) == static_cast(DDS_DIMENSION_TEXTURE2D), "header enum mismatch"); +static_assert(static_cast(TEX_DIMENSION_TEXTURE3D) == static_cast(DDS_DIMENSION_TEXTURE3D), "header enum mismatch"); + +namespace +{ + //------------------------------------------------------------------------------------- + // Legacy format mapping table (used for DDS files without 'DX10' extended header) + //------------------------------------------------------------------------------------- + enum CONVERSION_FLAGS : uint32_t + { + CONV_FLAGS_NONE = 0x0, + CONV_FLAGS_EXPAND = 0x1, // Conversion requires expanded pixel size + CONV_FLAGS_NOALPHA = 0x2, // Conversion requires setting alpha to known value + CONV_FLAGS_SWIZZLE = 0x4, // BGR/RGB order swizzling required + CONV_FLAGS_PAL8 = 0x8, // Has an 8-bit palette + CONV_FLAGS_888 = 0x10, // Source is an 8:8:8 (24bpp) format + CONV_FLAGS_565 = 0x20, // Source is a 5:6:5 (16bpp) format + CONV_FLAGS_5551 = 0x40, // Source is a 5:5:5:1 (16bpp) format + CONV_FLAGS_4444 = 0x80, // Source is a 4:4:4:4 (16bpp) format + CONV_FLAGS_44 = 0x100, // Source is a 4:4 (8bpp) format + CONV_FLAGS_332 = 0x200, // Source is a 3:3:2 (8bpp) format + CONV_FLAGS_8332 = 0x400, // Source is a 8:3:3:2 (16bpp) format + CONV_FLAGS_A8P8 = 0x800, // Has an 8-bit palette with an alpha channel + CONF_FLAGS_11ON12 = 0x1000, // D3D11on12 format + CONV_FLAGS_DX10 = 0x10000, // Has the 'DX10' extension header + CONV_FLAGS_PMALPHA = 0x20000, // Contains premultiplied alpha data + CONV_FLAGS_L8 = 0x40000, // Source is a 8 luminance format + CONV_FLAGS_L16 = 0x80000, // Source is a 16 luminance format + CONV_FLAGS_A8L8 = 0x100000, // Source is a 8:8 luminance format + CONV_FLAGS_L6V5U5 = 0x200000, // Source is a 6:5:5 bumpluminance format + CONV_FLAGS_L8U8V8 = 0x400000, // Source is a X:8:8:8 bumpluminance format + CONV_FLAGS_WUV10 = 0x800000, // Source is a 2:10:10:10 bump format + }; + + struct LegacyDDS + { + DXGI_FORMAT format; + uint32_t convFlags; + DDS_PIXELFORMAT ddpf; + }; + + const LegacyDDS g_LegacyDDSMap[] = + { + { DXGI_FORMAT_BC1_UNORM, CONV_FLAGS_NONE, DDSPF_DXT1 }, // D3DFMT_DXT1 + { DXGI_FORMAT_BC2_UNORM, CONV_FLAGS_NONE, DDSPF_DXT3 }, // D3DFMT_DXT3 + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, DDSPF_DXT5 }, // D3DFMT_DXT5 + + { DXGI_FORMAT_BC2_UNORM, CONV_FLAGS_PMALPHA, DDSPF_DXT2 }, // D3DFMT_DXT2 + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_PMALPHA, DDSPF_DXT4 }, // D3DFMT_DXT4 + + // These DXT5 variants have various swizzled channels. They are returned 'as is' to the client as BC3. + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('A', '2', 'D', '5'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('x', 'G', 'B', 'R'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R', 'x', 'B', 'G'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R', 'B', 'x', 'G'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('x', 'R', 'B', 'G'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R', 'G', 'x', 'B'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('x', 'G', 'x', 'R'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G', 'X', 'R', 'B'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G', 'R', 'X', 'B'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R', 'X', 'G', 'B'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC3_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B', 'R', 'G', 'X'), 0, 0, 0, 0, 0 } }, + + { DXGI_FORMAT_BC4_UNORM, CONV_FLAGS_NONE, DDSPF_BC4_UNORM }, + { DXGI_FORMAT_BC4_SNORM, CONV_FLAGS_NONE, DDSPF_BC4_SNORM }, + { DXGI_FORMAT_BC5_UNORM, CONV_FLAGS_NONE, DDSPF_BC5_UNORM }, + { DXGI_FORMAT_BC5_SNORM, CONV_FLAGS_NONE, DDSPF_BC5_SNORM }, + + { DXGI_FORMAT_BC4_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('A', 'T', 'I', '1'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC5_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('A', 'T', 'I', '2'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC5_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('A', '2', 'X', 'Y'), 0, 0, 0, 0, 0 } }, + + { DXGI_FORMAT_BC6H_UF16, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B', 'C', '6', 'H'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC7_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B', 'C', '7', 'L'), 0, 0, 0, 0, 0 } }, + { DXGI_FORMAT_BC7_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B', 'C', '7', '\0'), 0, 0, 0, 0, 0 } }, + + { DXGI_FORMAT_R8G8_B8G8_UNORM, CONV_FLAGS_NONE, DDSPF_R8G8_B8G8 }, // D3DFMT_R8G8_B8G8 + { DXGI_FORMAT_G8R8_G8B8_UNORM, CONV_FLAGS_NONE, DDSPF_G8R8_G8B8 }, // D3DFMT_G8R8_G8B8 + + { DXGI_FORMAT_B8G8R8A8_UNORM, CONV_FLAGS_NONE, DDSPF_A8R8G8B8 }, // D3DFMT_A8R8G8B8 (uses DXGI 1.1 format) + { DXGI_FORMAT_B8G8R8X8_UNORM, CONV_FLAGS_NONE, DDSPF_X8R8G8B8 }, // D3DFMT_X8R8G8B8 (uses DXGI 1.1 format) + { DXGI_FORMAT_R8G8B8A8_UNORM, CONV_FLAGS_NONE, DDSPF_A8B8G8R8 }, // D3DFMT_A8B8G8R8 + { DXGI_FORMAT_R8G8B8A8_UNORM, CONV_FLAGS_NOALPHA, DDSPF_X8B8G8R8 }, // D3DFMT_X8B8G8R8 + { DXGI_FORMAT_R16G16_UNORM, CONV_FLAGS_NONE, DDSPF_G16R16 }, // D3DFMT_G16R16 + + { DXGI_FORMAT_R10G10B10A2_UNORM, CONV_FLAGS_SWIZZLE, DDSPF_A2R10G10B10 }, // D3DFMT_A2R10G10B10 (D3DX reversal issue) + { DXGI_FORMAT_R10G10B10A2_UNORM, CONV_FLAGS_NONE, DDSPF_A2B10G10R10 }, // D3DFMT_A2B10G10R10 (D3DX reversal issue) + + { DXGI_FORMAT_R8G8B8A8_UNORM, CONV_FLAGS_EXPAND + | CONV_FLAGS_NOALPHA + | CONV_FLAGS_888, DDSPF_R8G8B8 }, // D3DFMT_R8G8B8 + + { DXGI_FORMAT_B5G6R5_UNORM, CONV_FLAGS_565, DDSPF_R5G6B5 }, // D3DFMT_R5G6B5 + { DXGI_FORMAT_B5G5R5A1_UNORM, CONV_FLAGS_5551, DDSPF_A1R5G5B5 }, // D3DFMT_A1R5G5B5 + { DXGI_FORMAT_B5G5R5A1_UNORM, CONV_FLAGS_5551 + | CONV_FLAGS_NOALPHA, DDSPF_X1R5G5B5 }, // D3DFMT_X1R5G5B5 + + { DXGI_FORMAT_R8G8B8A8_UNORM, CONV_FLAGS_EXPAND + | CONV_FLAGS_8332, DDSPF_A8R3G3B2 }, // D3DFMT_A8R3G3B2 + { DXGI_FORMAT_B5G6R5_UNORM, CONV_FLAGS_EXPAND + | CONV_FLAGS_332, DDSPF_R3G3B2 }, // D3DFMT_R3G3B2 + + { DXGI_FORMAT_R8_UNORM, CONV_FLAGS_NONE, DDSPF_L8 }, // D3DFMT_L8 + { DXGI_FORMAT_R16_UNORM, CONV_FLAGS_NONE, DDSPF_L16 }, // D3DFMT_L16 + { DXGI_FORMAT_R8G8_UNORM, CONV_FLAGS_NONE, DDSPF_A8L8 }, // D3DFMT_A8L8 + { DXGI_FORMAT_R8G8_UNORM, CONV_FLAGS_NONE, DDSPF_A8L8_ALT }, // D3DFMT_A8L8 (alternative bitcount) + + // NVTT v1 wrote these with RGB instead of LUMINANCE + { DXGI_FORMAT_R8_UNORM, CONV_FLAGS_NONE, DDSPF_L8_NVTT1 }, // D3DFMT_L8 + { DXGI_FORMAT_R16_UNORM, CONV_FLAGS_NONE, DDSPF_L16_NVTT1 }, // D3DFMT_L16 + { DXGI_FORMAT_R8G8_UNORM, CONV_FLAGS_NONE, DDSPF_A8L8_NVTT1 }, // D3DFMT_A8L8 + + { DXGI_FORMAT_A8_UNORM, CONV_FLAGS_NONE, DDSPF_A8 }, // D3DFMT_A8 + + { DXGI_FORMAT_R16G16B16A16_UNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, 36, 0, 0, 0, 0, 0 } }, // D3DFMT_A16B16G16R16 + { DXGI_FORMAT_R16G16B16A16_SNORM, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, 110, 0, 0, 0, 0, 0 } }, // D3DFMT_Q16W16V16U16 + { DXGI_FORMAT_R16_FLOAT, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, 111, 0, 0, 0, 0, 0 } }, // D3DFMT_R16F + { DXGI_FORMAT_R16G16_FLOAT, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, 112, 0, 0, 0, 0, 0 } }, // D3DFMT_G16R16F + { DXGI_FORMAT_R16G16B16A16_FLOAT, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, 113, 0, 0, 0, 0, 0 } }, // D3DFMT_A16B16G16R16F + { DXGI_FORMAT_R32_FLOAT, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, 114, 0, 0, 0, 0, 0 } }, // D3DFMT_R32F + { DXGI_FORMAT_R32G32_FLOAT, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, 115, 0, 0, 0, 0, 0 } }, // D3DFMT_G32R32F + { DXGI_FORMAT_R32G32B32A32_FLOAT, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, 116, 0, 0, 0, 0, 0 } }, // D3DFMT_A32B32G32R32F + + { DXGI_FORMAT_R32_FLOAT, CONV_FLAGS_NONE, { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0xffffffff, 0, 0, 0 } }, // D3DFMT_R32F (D3DX uses FourCC 114 instead) + + { DXGI_FORMAT_R8G8B8A8_UNORM, CONV_FLAGS_EXPAND + | CONV_FLAGS_PAL8 + | CONV_FLAGS_A8P8, { sizeof(DDS_PIXELFORMAT), DDS_PAL8A, 0, 16, 0, 0, 0, 0xff00 } }, // D3DFMT_A8P8 + { DXGI_FORMAT_R8G8B8A8_UNORM, CONV_FLAGS_EXPAND + | CONV_FLAGS_PAL8, { sizeof(DDS_PIXELFORMAT), DDS_PAL8, 0, 8, 0, 0, 0, 0 } }, // D3DFMT_P8 + + { DXGI_FORMAT_B4G4R4A4_UNORM, CONV_FLAGS_4444, DDSPF_A4R4G4B4 }, // D3DFMT_A4R4G4B4 (uses DXGI 1.2 format) + { DXGI_FORMAT_B4G4R4A4_UNORM, CONV_FLAGS_NOALPHA + | CONV_FLAGS_4444, DDSPF_X4R4G4B4 }, // D3DFMT_X4R4G4B4 (uses DXGI 1.2 format) + { DXGI_FORMAT_B4G4R4A4_UNORM, CONV_FLAGS_EXPAND + | CONV_FLAGS_44, DDSPF_A4L4 }, // D3DFMT_A4L4 (uses DXGI 1.2 format) + + { DXGI_FORMAT_YUY2, CONV_FLAGS_NONE, DDSPF_YUY2 }, // D3DFMT_YUY2 (uses DXGI 1.2 format) + { DXGI_FORMAT_YUY2, CONV_FLAGS_SWIZZLE, DDSPF_UYVY }, // D3DFMT_UYVY (uses DXGI 1.2 format) + + { DXGI_FORMAT_R8G8_SNORM, CONV_FLAGS_NONE, DDSPF_V8U8 }, // D3DFMT_V8U8 + { DXGI_FORMAT_R8G8B8A8_SNORM, CONV_FLAGS_NONE, DDSPF_Q8W8V8U8 }, // D3DFMT_Q8W8V8U8 + { DXGI_FORMAT_R16G16_SNORM, CONV_FLAGS_NONE, DDSPF_V16U16 }, // D3DFMT_V16U16 + + { DXGI_FORMAT_R8G8B8A8_UNORM, CONV_FLAGS_L6V5U5 + | CONV_FLAGS_EXPAND, DDSPF_L6V5U5 }, // D3DFMT_L6V5U5 + { DXGI_FORMAT_R8G8B8A8_UNORM, CONV_FLAGS_L8U8V8, DDSPF_X8L8V8U8 }, // D3DFMT_X8L8V8U8 + { DXGI_FORMAT_R10G10B10A2_UNORM, CONV_FLAGS_WUV10, DDSPF_A2W10V10U10 }, // D3DFMT_A2W10V10U10 + }; + + // Note that many common DDS reader/writers (including D3DX) swap the + // the RED/BLUE masks for 10:10:10:2 formats. We assumme + // below that the 'backwards' header mask is being used since it is most + // likely written by D3DX. The more robust solution is to use the 'DX10' + // header extension and specify the DXGI_FORMAT_R10G10B10A2_UNORM format directly + + // We do not support the following legacy Direct3D 9 formats: + // D3DFMT_D16_LOCKABLE (DDPF_ZBUFFER: 0x00000400) + // FourCC 82 D3DFMT_D32F_LOCKABLE + // FourCC 117 D3DFMT_CxV8U8 + + // We do not support the following known FourCC codes: + // FourCC CTX1 (Xbox 360 only) + // FourCC EAR, EARG, ET2, ET2A (Ericsson Texture Compression) + // FourCC MET1 (a.k.a. D3DFMT_MULTI2_ARGB8; rarely supported by any hardware) + + DXGI_FORMAT GetDXGIFormat(const DDS_HEADER& hdr, const DDS_PIXELFORMAT& ddpf, + DDS_FLAGS flags, + _Inout_ uint32_t& convFlags) noexcept + { + uint32_t ddpfFlags = ddpf.flags; + if (hdr.reserved1[9] == MAKEFOURCC('N', 'V', 'T', 'T')) + { + // Clear out non-standard nVidia DDS flags + ddpfFlags &= ~0xC0000000 /* DDPF_SRGB | DDPF_NORMAL */; + } + + constexpr size_t MAP_SIZE = sizeof(g_LegacyDDSMap) / sizeof(LegacyDDS); + size_t index = 0; + if (ddpf.size == 0 && ddpf.flags == 0 && ddpf.fourCC != 0) + { + // Handle some DDS files where the DDPF_PIXELFORMAT is mostly zero + for (index = 0; index < MAP_SIZE; ++index) + { + const LegacyDDS* entry = &g_LegacyDDSMap[index]; + + if (entry->ddpf.flags & DDS_FOURCC) + { + if (ddpf.fourCC == entry->ddpf.fourCC) + break; + } + } + } + else + { + for (index = 0; index < MAP_SIZE; ++index) + { + const LegacyDDS* entry = &g_LegacyDDSMap[index]; + + if ((ddpfFlags & DDS_FOURCC) && (entry->ddpf.flags & DDS_FOURCC)) + { + // In case of FourCC codes, ignore any other bits in ddpf.flags + if (ddpf.fourCC == entry->ddpf.fourCC) + break; + } + else if ((ddpfFlags == entry->ddpf.flags) && (ddpf.RGBBitCount == entry->ddpf.RGBBitCount)) + { + if (entry->ddpf.flags & DDS_PAL8) + { + // PAL8 / PAL8A + break; + } + else if (entry->ddpf.flags & DDS_ALPHA) + { + if (ddpf.ABitMask == entry->ddpf.ABitMask) + break; + } + else if (entry->ddpf.flags & DDS_LUMINANCE) + { + if (entry->ddpf.flags & DDS_ALPHAPIXELS) + { + // LUMINANCEA + if (ddpf.RBitMask == entry->ddpf.RBitMask + && ddpf.ABitMask == entry->ddpf.ABitMask) + break; + } + else + { + // LUMINANCE + if (ddpf.RBitMask == entry->ddpf.RBitMask) + break; + } + } + else if (entry->ddpf.flags & DDS_BUMPDUDV) + { + if (entry->ddpf.flags & DDS_ALPHAPIXELS) + { + // BUMPDUDVA + if (ddpf.RBitMask == entry->ddpf.RBitMask + && ddpf.ABitMask == entry->ddpf.ABitMask) + { + flags &= ~DDS_FLAGS_NO_R10B10G10A2_FIXUP; + break; + } + } + else + { + // BUMPDUDV + if (ddpf.RBitMask == entry->ddpf.RBitMask) + break; + } + } + else if (entry->ddpf.flags & DDS_ALPHAPIXELS) + { + // RGBA + if (ddpf.RBitMask == entry->ddpf.RBitMask + && ddpf.GBitMask == entry->ddpf.GBitMask + && ddpf.BBitMask == entry->ddpf.BBitMask + && ddpf.ABitMask == entry->ddpf.ABitMask) + break; + } + else + { + // RGB + if (ddpf.RBitMask == entry->ddpf.RBitMask + && ddpf.GBitMask == entry->ddpf.GBitMask + && ddpf.BBitMask == entry->ddpf.BBitMask) + break; + } + } + } + } + + if (index >= MAP_SIZE) + return DXGI_FORMAT_UNKNOWN; + + uint32_t cflags = g_LegacyDDSMap[index].convFlags; + DXGI_FORMAT format = g_LegacyDDSMap[index].format; + + if ((cflags & CONV_FLAGS_EXPAND) && (flags & DDS_FLAGS_NO_LEGACY_EXPANSION)) + return DXGI_FORMAT_UNKNOWN; + + if ((format == DXGI_FORMAT_R10G10B10A2_UNORM) && (flags & DDS_FLAGS_NO_R10B10G10A2_FIXUP)) + { + cflags ^= CONV_FLAGS_SWIZZLE; + } + + if ((hdr.reserved1[9] == MAKEFOURCC('N', 'V', 'T', 'T')) + && (ddpf.flags & 0x40000000 /* DDPF_SRGB */)) + { + format = MakeSRGB(format); + } + + convFlags = cflags; + + return format; + } + + //------------------------------------------------------------------------------------- + // Decodes DDS header including optional DX10 extended header + //------------------------------------------------------------------------------------- + HRESULT DecodeDDSHeader( + _In_reads_bytes_(size) const void* pSource, + size_t size, + DDS_FLAGS flags, + _Out_ TexMetadata& metadata, + _Out_opt_ DDSMetaData* ddPixelFormat, + _Inout_ uint32_t& convFlags) noexcept + { + if (!pSource) + return E_INVALIDARG; + + metadata = {}; + if (ddPixelFormat) + { + *ddPixelFormat = {}; + } + + if (size < DDS_MIN_HEADER_SIZE) + { + return HRESULT_E_INVALID_DATA; + } + + // DDS files always start with the same magic number ("DDS ") + auto const dwMagicNumber = *static_cast(pSource); + if (dwMagicNumber != DDS_MAGIC) + { + return E_FAIL; + } + + auto pHeader = reinterpret_cast(static_cast(pSource) + sizeof(uint32_t)); + + // Verify header to validate DDS file + if (flags & DDS_FLAGS_PERMISSIVE) + { + if (pHeader->size != 24 /* Known variant */ + && pHeader->size != sizeof(DDS_HEADER)) + { + return HRESULT_E_NOT_SUPPORTED; + } + } + else if (pHeader->size != sizeof(DDS_HEADER)) + { + return HRESULT_E_NOT_SUPPORTED; + } + + if (flags & DDS_FLAGS_PERMISSIVE) + { + if (pHeader->ddspf.size != 0 /* Known variant */ + && pHeader->ddspf.size != 24 /* Known variant */ + && pHeader->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return HRESULT_E_NOT_SUPPORTED; + } + } + else if (pHeader->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + return HRESULT_E_NOT_SUPPORTED; + } + + metadata.mipLevels = pHeader->mipMapCount; + if ((metadata.mipLevels == 0) || (flags & DDS_FLAGS_IGNORE_MIPS)) + { + metadata.mipLevels = 1; + } + + // Check for DX10 extension + if ((pHeader->ddspf.flags & DDS_FOURCC) + && (MAKEFOURCC('D', 'X', '1', '0') == pHeader->ddspf.fourCC)) + { + if (pHeader->size != sizeof(DDS_HEADER) + || pHeader->ddspf.size != sizeof(DDS_PIXELFORMAT)) + { + // We do not accept legacy DX9 'known variants' for modern "DX10" extension header files. + return E_FAIL; + } + + // Buffer must be big enough for both headers and magic value + if (size < DDS_DX10_HEADER_SIZE) + { + return E_FAIL; + } + + auto d3d10ext = reinterpret_cast(static_cast(pSource) + DDS_MIN_HEADER_SIZE); + convFlags |= CONV_FLAGS_DX10; + + metadata.arraySize = d3d10ext->arraySize; + if (metadata.arraySize == 0) + { + metadata.arraySize = 1; + } + + metadata.format = d3d10ext->dxgiFormat; + if (!IsValid(metadata.format) || IsPalettized(metadata.format)) + { + return HRESULT_E_NOT_SUPPORTED; + } + + static_assert(static_cast(TEX_MISC_TEXTURECUBE) == static_cast(DDS_RESOURCE_MISC_TEXTURECUBE), "DDS header mismatch"); + + metadata.miscFlags = d3d10ext->miscFlag & ~static_cast(TEX_MISC_TEXTURECUBE); + + switch (d3d10ext->resourceDimension) + { + case DDS_DIMENSION_TEXTURE1D: + + // D3DX writes 1D textures with a fixed Height of 1 + if ((pHeader->flags & DDS_HEIGHT) && pHeader->height != 1) + { + return HRESULT_E_INVALID_DATA; + } + + metadata.width = pHeader->width; + metadata.height = 1; + metadata.depth = 1; + metadata.dimension = TEX_DIMENSION_TEXTURE1D; + break; + + case DDS_DIMENSION_TEXTURE2D: + if (d3d10ext->miscFlag & DDS_RESOURCE_MISC_TEXTURECUBE) + { + metadata.miscFlags |= TEX_MISC_TEXTURECUBE; + metadata.arraySize *= 6; + } + + metadata.width = pHeader->width; + metadata.height = pHeader->height; + metadata.depth = 1; + metadata.dimension = TEX_DIMENSION_TEXTURE2D; + break; + + case DDS_DIMENSION_TEXTURE3D: + if (!(pHeader->flags & DDS_HEADER_FLAGS_VOLUME)) + { + return HRESULT_E_INVALID_DATA; + } + + if (metadata.arraySize > 1) + return HRESULT_E_NOT_SUPPORTED; + + metadata.width = pHeader->width; + metadata.height = pHeader->height; + metadata.depth = pHeader->depth; + metadata.dimension = TEX_DIMENSION_TEXTURE3D; + break; + + default: + return HRESULT_E_INVALID_DATA; + } + + static_assert(static_cast(TEX_MISC2_ALPHA_MODE_MASK) == static_cast(DDS_MISC_FLAGS2_ALPHA_MODE_MASK), "DDS header mismatch"); + + static_assert(static_cast(TEX_ALPHA_MODE_UNKNOWN) == static_cast(DDS_ALPHA_MODE_UNKNOWN), "DDS header mismatch"); + static_assert(static_cast(TEX_ALPHA_MODE_STRAIGHT) == static_cast(DDS_ALPHA_MODE_STRAIGHT), "DDS header mismatch"); + static_assert(static_cast(TEX_ALPHA_MODE_PREMULTIPLIED) == static_cast(DDS_ALPHA_MODE_PREMULTIPLIED), "DDS header mismatch"); + static_assert(static_cast(TEX_ALPHA_MODE_OPAQUE) == static_cast(DDS_ALPHA_MODE_OPAQUE), "DDS header mismatch"); + static_assert(static_cast(TEX_ALPHA_MODE_CUSTOM) == static_cast(DDS_ALPHA_MODE_CUSTOM), "DDS header mismatch"); + + metadata.miscFlags2 = d3d10ext->miscFlags2; + } + else + { + metadata.arraySize = 1; + + if (pHeader->flags & DDS_HEADER_FLAGS_VOLUME) + { + metadata.width = pHeader->width; + metadata.height = pHeader->height; + metadata.depth = pHeader->depth; + metadata.dimension = TEX_DIMENSION_TEXTURE3D; + + if (flags & DDS_FLAGS_PERMISSIVE) + { + // Allow cases where mipCount was computed incorrectly + size_t maxMips = 0; + std::ignore = Internal::CalculateMipLevels3D(metadata.width, metadata.height, metadata.depth, maxMips); + metadata.mipLevels = std::min(metadata.mipLevels, maxMips); + } + } + else + { + if (pHeader->caps2 & DDS_CUBEMAP) + { + // We require all six faces to be defined + if ((pHeader->caps2 & DDS_CUBEMAP_ALLFACES) != DDS_CUBEMAP_ALLFACES) + return HRESULT_E_NOT_SUPPORTED; + + metadata.arraySize = 6; + metadata.miscFlags |= TEX_MISC_TEXTURECUBE; + } + + metadata.width = pHeader->width; + metadata.height = pHeader->height; + metadata.depth = 1; + metadata.dimension = TEX_DIMENSION_TEXTURE2D; + + // Note there's no way for a legacy Direct3D 9 DDS to express a '1D' texture + + if (flags & DDS_FLAGS_PERMISSIVE) + { + // Allow cases where mipCount was computed incorrectly + size_t maxMips = 0; + std::ignore = Internal::CalculateMipLevels(metadata.width, metadata.height, maxMips); + metadata.mipLevels = std::min(metadata.mipLevels, maxMips); + } + } + + metadata.format = GetDXGIFormat(*pHeader, pHeader->ddspf, flags, convFlags); + + if (metadata.format == DXGI_FORMAT_UNKNOWN) + return HRESULT_E_NOT_SUPPORTED; + + // Special flag for handling LUMINANCE legacy formats + if (flags & DDS_FLAGS_EXPAND_LUMINANCE) + { + switch (metadata.format) + { + case DXGI_FORMAT_R8_UNORM: + metadata.format = DXGI_FORMAT_R8G8B8A8_UNORM; + convFlags |= CONV_FLAGS_L8 | CONV_FLAGS_EXPAND; + break; + + case DXGI_FORMAT_R8G8_UNORM: + metadata.format = DXGI_FORMAT_R8G8B8A8_UNORM; + convFlags |= CONV_FLAGS_A8L8 | CONV_FLAGS_EXPAND; + break; + + case DXGI_FORMAT_R16_UNORM: + metadata.format = DXGI_FORMAT_R16G16B16A16_UNORM; + convFlags |= CONV_FLAGS_L16 | CONV_FLAGS_EXPAND; + break; + + default: + break; + } + } + } + + // Special flag for handling BGR DXGI 1.1 formats + if (flags & DDS_FLAGS_FORCE_RGB) + { + switch (metadata.format) + { + case DXGI_FORMAT_B8G8R8A8_UNORM: + metadata.format = DXGI_FORMAT_R8G8B8A8_UNORM; + convFlags |= CONV_FLAGS_SWIZZLE; + break; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + metadata.format = DXGI_FORMAT_R8G8B8A8_UNORM; + convFlags |= CONV_FLAGS_SWIZZLE | CONV_FLAGS_NOALPHA; + break; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + metadata.format = DXGI_FORMAT_R8G8B8A8_TYPELESS; + convFlags |= CONV_FLAGS_SWIZZLE; + break; + + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + metadata.format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + convFlags |= CONV_FLAGS_SWIZZLE; + break; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + metadata.format = DXGI_FORMAT_R8G8B8A8_TYPELESS; + convFlags |= CONV_FLAGS_SWIZZLE | CONV_FLAGS_NOALPHA; + break; + + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + metadata.format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + convFlags |= CONV_FLAGS_SWIZZLE | CONV_FLAGS_NOALPHA; + break; + + default: + break; + } + } + + // Special flag for handling 16bpp formats + if (flags & DDS_FLAGS_NO_16BPP) + { + switch (static_cast(metadata.format)) + { + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_B4G4R4A4_UNORM: + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + if (metadata.format == DXGI_FORMAT_B5G6R5_UNORM) + { + convFlags |= CONV_FLAGS_NOALPHA; + } + if (metadata.format == WIN11_DXGI_FORMAT_A4B4G4R4_UNORM) + { + convFlags |= CONV_FLAGS_4444 | CONF_FLAGS_11ON12; + } + metadata.format = DXGI_FORMAT_R8G8B8A8_UNORM; + convFlags |= CONV_FLAGS_EXPAND; + break; + + default: + break; + } + } + + // Implicit alpha mode + if (convFlags & CONV_FLAGS_NOALPHA) + { + metadata.SetAlphaMode(TEX_ALPHA_MODE_OPAQUE); + } + else if (convFlags & CONV_FLAGS_PMALPHA) + { + metadata.SetAlphaMode(TEX_ALPHA_MODE_PREMULTIPLIED); + } + + // Check for .dds files that exceed known hardware support + if (!(flags & DDS_FLAGS_ALLOW_LARGE_FILES)) + { + // 16k is the maximum required resource size supported by Direct3D + if (metadata.width > 16384u /* D3D12_REQ_TEXTURE1D_U_DIMENSION, D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION */ + || metadata.height > 16384u /* D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION */ + || metadata.mipLevels > 15u /* D3D12_REQ_MIP_LEVELS */) + { + return HRESULT_E_NOT_SUPPORTED; + } + + // 2048 is the maximum required depth/array size supported by Direct3D + if (metadata.arraySize > 2048u /* D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION, D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION */ + || metadata.depth > 2048u /* D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION */) + { + return HRESULT_E_NOT_SUPPORTED; + } + } + + // Handle DDS-specific metadata + if (ddPixelFormat) + { + ddPixelFormat->size = pHeader->ddspf.size; + ddPixelFormat->flags = pHeader->ddspf.flags; + ddPixelFormat->fourCC = pHeader->ddspf.fourCC; + ddPixelFormat->RGBBitCount = pHeader->ddspf.RGBBitCount; + ddPixelFormat->RBitMask = pHeader->ddspf.RBitMask; + ddPixelFormat->GBitMask = pHeader->ddspf.GBitMask; + ddPixelFormat->BBitMask = pHeader->ddspf.BBitMask; + ddPixelFormat->ABitMask = pHeader->ddspf.ABitMask; + } + + return S_OK; + } +} + + +//------------------------------------------------------------------------------------- +// Encodes DDS file header (magic value, header, optional DX10 extended header) +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::EncodeDDSHeader( + const TexMetadata& metadata, + DDS_FLAGS flags, + uint8_t* pDestination, + size_t maxsize, + size_t& required) noexcept +{ + if (!IsValid(metadata.format)) + return E_INVALIDARG; + + if (IsPalettized(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + if (metadata.arraySize > 1) + { + if ((metadata.arraySize != 6) || (metadata.dimension != TEX_DIMENSION_TEXTURE2D) || !(metadata.IsCubemap())) + { + // Texture1D arrays, Texture2D arrays, and Cubemap arrays must be stored using 'DX10' extended header + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + return HRESULT_E_CANNOT_MAKE; + + flags |= DDS_FLAGS_FORCE_DX10_EXT; + } + } + + if (flags & DDS_FLAGS_FORCE_DX10_EXT_MISC2) + { + flags |= DDS_FLAGS_FORCE_DX10_EXT; + } + + DDS_PIXELFORMAT ddpf = {}; + if (!(flags & DDS_FLAGS_FORCE_DX10_EXT)) + { + switch (metadata.format) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: memcpy(&ddpf, &DDSPF_A8B8G8R8, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_R16G16_UNORM: memcpy(&ddpf, &DDSPF_G16R16, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_R8G8_UNORM: memcpy(&ddpf, &DDSPF_A8L8, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_R16_UNORM: memcpy(&ddpf, &DDSPF_L16, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_R8_UNORM: memcpy(&ddpf, &DDSPF_L8, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_A8_UNORM: memcpy(&ddpf, &DDSPF_A8, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_R8G8_B8G8_UNORM: memcpy(&ddpf, &DDSPF_R8G8_B8G8, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_G8R8_G8B8_UNORM: memcpy(&ddpf, &DDSPF_G8R8_G8B8, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_BC1_UNORM: memcpy(&ddpf, &DDSPF_DXT1, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_BC2_UNORM: memcpy(&ddpf, metadata.IsPMAlpha() ? (&DDSPF_DXT2) : (&DDSPF_DXT3), sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_BC4_SNORM: memcpy(&ddpf, &DDSPF_BC4_SNORM, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_BC5_SNORM: memcpy(&ddpf, &DDSPF_BC5_SNORM, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_B5G6R5_UNORM: memcpy(&ddpf, &DDSPF_R5G6B5, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_B5G5R5A1_UNORM: memcpy(&ddpf, &DDSPF_A1R5G5B5, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_R8G8_SNORM: memcpy(&ddpf, &DDSPF_V8U8, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_R8G8B8A8_SNORM: memcpy(&ddpf, &DDSPF_Q8W8V8U8, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_R16G16_SNORM: memcpy(&ddpf, &DDSPF_V16U16, sizeof(DDS_PIXELFORMAT)); break; + case DXGI_FORMAT_B8G8R8A8_UNORM: memcpy(&ddpf, &DDSPF_A8R8G8B8, sizeof(DDS_PIXELFORMAT)); break; // DXGI 1.1 + case DXGI_FORMAT_B8G8R8X8_UNORM: memcpy(&ddpf, &DDSPF_X8R8G8B8, sizeof(DDS_PIXELFORMAT)); break; // DXGI 1.1 + case DXGI_FORMAT_B4G4R4A4_UNORM: memcpy(&ddpf, &DDSPF_A4R4G4B4, sizeof(DDS_PIXELFORMAT)); break; // DXGI 1.2 + case DXGI_FORMAT_YUY2: memcpy(&ddpf, &DDSPF_YUY2, sizeof(DDS_PIXELFORMAT)); break; // DXGI 1.2 + + case DXGI_FORMAT_BC3_UNORM: + memcpy(&ddpf, metadata.IsPMAlpha() ? (&DDSPF_DXT4) : (&DDSPF_DXT5), sizeof(DDS_PIXELFORMAT)); + if (flags & DDS_FLAGS_FORCE_DXT5_RXGB) + { + ddpf.fourCC = MAKEFOURCC('R', 'X', 'G', 'B'); + } + break; + + // Legacy D3DX formats using D3DFMT enum value as FourCC + case DXGI_FORMAT_R32G32B32A32_FLOAT: + ddpf.size = sizeof(DDS_PIXELFORMAT); ddpf.flags = DDS_FOURCC; ddpf.fourCC = 116; // D3DFMT_A32B32G32R32F + break; + case DXGI_FORMAT_R16G16B16A16_FLOAT: + ddpf.size = sizeof(DDS_PIXELFORMAT); ddpf.flags = DDS_FOURCC; ddpf.fourCC = 113; // D3DFMT_A16B16G16R16F + break; + case DXGI_FORMAT_R16G16B16A16_UNORM: + ddpf.size = sizeof(DDS_PIXELFORMAT); ddpf.flags = DDS_FOURCC; ddpf.fourCC = 36; // D3DFMT_A16B16G16R16 + break; + case DXGI_FORMAT_R16G16B16A16_SNORM: + ddpf.size = sizeof(DDS_PIXELFORMAT); ddpf.flags = DDS_FOURCC; ddpf.fourCC = 110; // D3DFMT_Q16W16V16U16 + break; + case DXGI_FORMAT_R32G32_FLOAT: + ddpf.size = sizeof(DDS_PIXELFORMAT); ddpf.flags = DDS_FOURCC; ddpf.fourCC = 115; // D3DFMT_G32R32F + break; + case DXGI_FORMAT_R16G16_FLOAT: + ddpf.size = sizeof(DDS_PIXELFORMAT); ddpf.flags = DDS_FOURCC; ddpf.fourCC = 112; // D3DFMT_G16R16F + break; + case DXGI_FORMAT_R32_FLOAT: + ddpf.size = sizeof(DDS_PIXELFORMAT); ddpf.flags = DDS_FOURCC; ddpf.fourCC = 114; // D3DFMT_R32F + break; + case DXGI_FORMAT_R16_FLOAT: + ddpf.size = sizeof(DDS_PIXELFORMAT); ddpf.flags = DDS_FOURCC; ddpf.fourCC = 111; // D3DFMT_R16F + break; + + // DX9 legacy pixel formats + case DXGI_FORMAT_R10G10B10A2_UNORM: + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + { + // Write using the 'incorrect' mask version to match D3DX bug + memcpy(&ddpf, &DDSPF_A2B10G10R10, sizeof(DDS_PIXELFORMAT)); + } + break; + + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + { + memcpy(&ddpf, &DDSPF_A8B8G8R8, sizeof(DDS_PIXELFORMAT)); + } + break; + + case DXGI_FORMAT_BC1_UNORM_SRGB: + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + { + memcpy(&ddpf, &DDSPF_DXT1, sizeof(DDS_PIXELFORMAT)); + } + break; + + case DXGI_FORMAT_BC2_UNORM_SRGB: + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + { + memcpy(&ddpf, metadata.IsPMAlpha() ? (&DDSPF_DXT2) : (&DDSPF_DXT3), sizeof(DDS_PIXELFORMAT)); + } + break; + + case DXGI_FORMAT_BC3_UNORM_SRGB: + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + { + memcpy(&ddpf, metadata.IsPMAlpha() ? (&DDSPF_DXT4) : (&DDSPF_DXT5), sizeof(DDS_PIXELFORMAT)); + } + break; + + case DXGI_FORMAT_BC4_UNORM: + memcpy(&ddpf, &DDSPF_BC4_UNORM, sizeof(DDS_PIXELFORMAT)); + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + { + ddpf.fourCC = MAKEFOURCC('A', 'T', 'I', '1'); + } + break; + + case DXGI_FORMAT_BC5_UNORM: + memcpy(&ddpf, &DDSPF_BC5_UNORM, sizeof(DDS_PIXELFORMAT)); + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + { + ddpf.fourCC = MAKEFOURCC('A', 'T', 'I', '2'); + } + break; + + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + { + memcpy(&ddpf, &DDSPF_A8R8G8B8, sizeof(DDS_PIXELFORMAT)); + } + break; + + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + { + memcpy(&ddpf, &DDSPF_X8R8G8B8, sizeof(DDS_PIXELFORMAT)); + } + break; + + default: + break; + } + } + + required = DDS_MIN_HEADER_SIZE; + + if (ddpf.size == 0) + { + if (flags & DDS_FLAGS_FORCE_DX9_LEGACY) + return HRESULT_E_CANNOT_MAKE; + + required += sizeof(DDS_HEADER_DXT10); + } + + if (!pDestination) + return S_OK; + + if (maxsize < required) + return E_NOT_SUFFICIENT_BUFFER; + + *reinterpret_cast(pDestination) = DDS_MAGIC; + + auto header = reinterpret_cast(static_cast(pDestination) + sizeof(uint32_t)); + assert(header); + + memset(header, 0, sizeof(DDS_HEADER)); + header->size = sizeof(DDS_HEADER); + header->flags = DDS_HEADER_FLAGS_TEXTURE; + header->caps = DDS_SURFACE_FLAGS_TEXTURE; + + if (metadata.mipLevels > 0) + { + header->flags |= DDS_HEADER_FLAGS_MIPMAP; + + if (metadata.mipLevels > UINT16_MAX) + return E_INVALIDARG; + + header->mipMapCount = static_cast(metadata.mipLevels); + + if (header->mipMapCount > 1) + header->caps |= DDS_SURFACE_FLAGS_MIPMAP; + } + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + if (metadata.width > UINT32_MAX) + return E_INVALIDARG; + + header->width = static_cast(metadata.width); + header->height = header->depth = 1; + break; + + case TEX_DIMENSION_TEXTURE2D: + if (metadata.height > UINT32_MAX + || metadata.width > UINT32_MAX) + return E_INVALIDARG; + + header->height = static_cast(metadata.height); + header->width = static_cast(metadata.width); + header->depth = 1; + + if (metadata.IsCubemap()) + { + header->caps |= DDS_SURFACE_FLAGS_CUBEMAP; + header->caps2 |= DDS_CUBEMAP_ALLFACES; + } + break; + + case TEX_DIMENSION_TEXTURE3D: + if (metadata.height > UINT32_MAX + || metadata.width > UINT32_MAX + || metadata.depth > UINT16_MAX) + return E_INVALIDARG; + + header->flags |= DDS_HEADER_FLAGS_VOLUME; + header->caps2 |= DDS_FLAGS_VOLUME; + header->height = static_cast(metadata.height); + header->width = static_cast(metadata.width); + header->depth = static_cast(metadata.depth); + break; + + default: + return E_FAIL; + } + + size_t rowPitch, slicePitch; + HRESULT hr = ComputePitch(metadata.format, metadata.width, metadata.height, rowPitch, slicePitch, CP_FLAGS_NONE); + if (FAILED(hr)) + return hr; + + if (slicePitch > UINT32_MAX + || rowPitch > UINT32_MAX) + return E_FAIL; + + if (IsCompressed(metadata.format)) + { + header->flags |= DDS_HEADER_FLAGS_LINEARSIZE; + header->pitchOrLinearSize = static_cast(slicePitch); + } + else + { + header->flags |= DDS_HEADER_FLAGS_PITCH; + header->pitchOrLinearSize = static_cast(rowPitch); + } + + if (ddpf.size == 0) + { + memcpy(&header->ddspf, &DDSPF_DX10, sizeof(DDS_PIXELFORMAT)); + + auto ext = reinterpret_cast(reinterpret_cast(header) + sizeof(DDS_HEADER)); + assert(ext); + + memset(ext, 0, sizeof(DDS_HEADER_DXT10)); + ext->dxgiFormat = metadata.format; + ext->resourceDimension = metadata.dimension; + + if (metadata.arraySize > UINT16_MAX) + return E_INVALIDARG; + + static_assert(static_cast(TEX_MISC_TEXTURECUBE) == static_cast(DDS_RESOURCE_MISC_TEXTURECUBE), "DDS header mismatch"); + + ext->miscFlag = metadata.miscFlags & ~static_cast(TEX_MISC_TEXTURECUBE); + + if (metadata.miscFlags & TEX_MISC_TEXTURECUBE) + { + ext->miscFlag |= TEX_MISC_TEXTURECUBE; + assert((metadata.arraySize % 6) == 0); + ext->arraySize = static_cast(metadata.arraySize / 6); + } + else + { + ext->arraySize = static_cast(metadata.arraySize); + } + + static_assert(static_cast(TEX_MISC2_ALPHA_MODE_MASK) == static_cast(DDS_MISC_FLAGS2_ALPHA_MODE_MASK), "DDS header mismatch"); + + static_assert(static_cast(TEX_ALPHA_MODE_UNKNOWN) == static_cast(DDS_ALPHA_MODE_UNKNOWN), "DDS header mismatch"); + static_assert(static_cast(TEX_ALPHA_MODE_STRAIGHT) == static_cast(DDS_ALPHA_MODE_STRAIGHT), "DDS header mismatch"); + static_assert(static_cast(TEX_ALPHA_MODE_PREMULTIPLIED) == static_cast(DDS_ALPHA_MODE_PREMULTIPLIED), "DDS header mismatch"); + static_assert(static_cast(TEX_ALPHA_MODE_OPAQUE) == static_cast(DDS_ALPHA_MODE_OPAQUE), "DDS header mismatch"); + static_assert(static_cast(TEX_ALPHA_MODE_CUSTOM) == static_cast(DDS_ALPHA_MODE_CUSTOM), "DDS header mismatch"); + + if (flags & DDS_FLAGS_FORCE_DX10_EXT_MISC2) + { + // This was formerly 'reserved'. D3DX10 and D3DX11 will fail if this value is anything other than 0 + ext->miscFlags2 = metadata.miscFlags2; + } + } + else + { + memcpy(&header->ddspf, &ddpf, sizeof(ddpf)); + } + + return S_OK; +} + + +namespace +{ + //------------------------------------------------------------------------------------- + // Converts an image row with optional clearing of alpha value to 1.0 + // Returns true if supported, false if expansion case not supported + //------------------------------------------------------------------------------------- + enum TEXP_LEGACY_FORMAT + { + TEXP_LEGACY_UNKNOWN = 0, + TEXP_LEGACY_R8G8B8, + TEXP_LEGACY_R3G3B2, + TEXP_LEGACY_A8R3G3B2, + TEXP_LEGACY_P8, + TEXP_LEGACY_A8P8, + TEXP_LEGACY_A4L4, + TEXP_LEGACY_B4G4R4A4, + TEXP_LEGACY_L8, + TEXP_LEGACY_L16, + TEXP_LEGACY_A8L8, + TEXP_LEGACY_L6V5U5, + TEXP_LEGACY_X8L8V8U8, + TEXP_LEGACY_A2W10V10U10 + }; + + constexpr TEXP_LEGACY_FORMAT FindLegacyFormat(uint32_t flags) noexcept + { + TEXP_LEGACY_FORMAT lformat = TEXP_LEGACY_UNKNOWN; + + if (flags & CONV_FLAGS_PAL8) + { + lformat = (flags & CONV_FLAGS_A8P8) ? TEXP_LEGACY_A8P8 : TEXP_LEGACY_P8; + } + else if (flags & CONV_FLAGS_888) + lformat = TEXP_LEGACY_R8G8B8; + else if (flags & CONV_FLAGS_332) + lformat = TEXP_LEGACY_R3G3B2; + else if (flags & CONV_FLAGS_8332) + lformat = TEXP_LEGACY_A8R3G3B2; + else if (flags & CONV_FLAGS_44) + lformat = TEXP_LEGACY_A4L4; + else if (flags & CONV_FLAGS_4444) + lformat = TEXP_LEGACY_B4G4R4A4; + else if (flags & CONV_FLAGS_L8) + lformat = TEXP_LEGACY_L8; + else if (flags & CONV_FLAGS_L16) + lformat = TEXP_LEGACY_L16; + else if (flags & CONV_FLAGS_A8L8) + lformat = TEXP_LEGACY_A8L8; + else if (flags & CONV_FLAGS_L6V5U5) + lformat = TEXP_LEGACY_L6V5U5; + else if (flags & CONV_FLAGS_L8U8V8) + lformat = TEXP_LEGACY_X8L8V8U8; + else if (flags & CONV_FLAGS_WUV10) + lformat = TEXP_LEGACY_A2W10V10U10; + + return lformat; + } + + _Success_(return) + bool LegacyExpandScanline( + _Out_writes_bytes_(outSize) void* pDestination, + size_t outSize, + _In_ DXGI_FORMAT outFormat, + _In_reads_bytes_(inSize) const void* pSource, + size_t inSize, + _In_ TEXP_LEGACY_FORMAT inFormat, + _In_reads_opt_(256) const uint32_t* pal8, + _In_ uint32_t tflags) noexcept + { + assert(pDestination && outSize > 0); + assert(pSource && inSize > 0); + assert(IsValid(outFormat) && !IsPlanar(outFormat) && !IsPalettized(outFormat)); + + switch (inFormat) + { + case TEXP_LEGACY_R8G8B8: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // D3DFMT_R8G8B8 -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 3 && outSize >= 4) + { + const uint8_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 2)) && (ocount < (outSize - 3))); icount += 3, ocount += 4) + { + // 24bpp Direct3D 9 files are actually BGR, so need to swizzle as well + uint32_t t1 = uint32_t(*(sPtr) << 16); + uint32_t t2 = uint32_t(*(sPtr + 1) << 8); + uint32_t t3 = uint32_t(*(sPtr + 2)); + + *(dPtr++) = t1 | t2 | t3 | 0xff000000; + sPtr += 3; + } + return true; + } + return false; + + case TEXP_LEGACY_R3G3B2: + switch (outFormat) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + // D3DFMT_R3G3B2 -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 1 && outSize >= 4) + { + const uint8_t* __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < inSize) && (ocount < (outSize - 3))); ++icount, ocount += 4) + { + const uint8_t t = *(sPtr++); + + uint32_t t1 = uint32_t((t & 0xe0) | ((t & 0xe0) >> 3) | ((t & 0xc0) >> 6)); + uint32_t t2 = uint32_t(((t & 0x1c) << 11) | ((t & 0x1c) << 8) | ((t & 0x18) << 5)); + uint32_t t3 = uint32_t(((t & 0x03) << 22) | ((t & 0x03) << 20) | ((t & 0x03) << 18) | ((t & 0x03) << 16)); + + *(dPtr++) = t1 | t2 | t3 | 0xff000000; + } + return true; + } + return false; + + case DXGI_FORMAT_B5G6R5_UNORM: + // D3DFMT_R3G3B2 -> DXGI_FORMAT_B5G6R5_UNORM + if (inSize >= 1 && outSize >= 2) + { + const uint8_t* __restrict sPtr = static_cast(pSource); + uint16_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < inSize) && (ocount < (outSize - 1))); ++icount, ocount += 2) + { + const unsigned t = *(sPtr++); + + unsigned t1 = ((t & 0xe0u) << 8) | ((t & 0xc0u) << 5); + unsigned t2 = ((t & 0x1cu) << 6) | ((t & 0x1cu) << 3); + unsigned t3 = ((t & 0x03u) << 3) | ((t & 0x03u) << 1) | ((t & 0x02) >> 1); + + *(dPtr++) = static_cast(t1 | t2 | t3); + } + return true; + } + return false; + + default: + return false; + } + + case TEXP_LEGACY_A8R3G3B2: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // D3DFMT_A8R3G3B2 -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 2 && outSize >= 4) + { + const uint16_t* __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 3))); icount += 2, ocount += 4) + { + const uint16_t t = *(sPtr++); + + uint32_t t1 = uint32_t((t & 0x00e0) | ((t & 0x00e0) >> 3) | ((t & 0x00c0) >> 6)); + uint32_t t2 = uint32_t(((t & 0x001c) << 11) | ((t & 0x001c) << 8) | ((t & 0x0018) << 5)); + uint32_t t3 = uint32_t(((t & 0x0003) << 22) | ((t & 0x0003) << 20) | ((t & 0x0003) << 18) | ((t & 0x0003) << 16)); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : uint32_t((t & 0xff00) << 16); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + return true; + } + return false; + + case TEXP_LEGACY_P8: + if ((outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) || !pal8) + return false; + + // D3DFMT_P8 -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 1 && outSize >= 4) + { + const uint8_t* __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < inSize) && (ocount < (outSize - 3))); ++icount, ocount += 4) + { + uint8_t t = *(sPtr++); + + *(dPtr++) = pal8[t]; + } + return true; + } + return false; + + case TEXP_LEGACY_A8P8: + if ((outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) || !pal8) + return false; + + // D3DFMT_A8P8 -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 2 && outSize >= 4) + { + const uint16_t* __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 3))); icount += 2, ocount += 4) + { + const uint16_t t = *(sPtr++); + + uint32_t t1 = pal8[t & 0xff]; + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : uint32_t((t & 0xff00) << 16); + + *(dPtr++) = t1 | ta; + } + return true; + } + return false; + + case TEXP_LEGACY_A4L4: + switch (outFormat) + { + case DXGI_FORMAT_B4G4R4A4_UNORM: + // D3DFMT_A4L4 -> DXGI_FORMAT_B4G4R4A4_UNORM + if (inSize >= 1 && outSize >= 2) + { + const uint8_t * __restrict sPtr = static_cast(pSource); + uint16_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < inSize) && (ocount < (outSize - 1))); ++icount, ocount += 2) + { + const unsigned t = *(sPtr++); + + unsigned t1 = (t & 0x0fu); + unsigned ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xf000u : ((t & 0xf0u) << 8); + + *(dPtr++) = static_cast(t1 | (t1 << 4) | (t1 << 8) | ta); + } + return true; + } + return false; + + case DXGI_FORMAT_R8G8B8A8_UNORM: + // D3DFMT_A4L4 -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 1 && outSize >= 4) + { + const uint8_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < inSize) && (ocount < (outSize - 3))); ++icount, ocount += 4) + { + const uint8_t t = *(sPtr++); + + uint32_t t1 = uint32_t(((t & 0x0f) << 4) | (t & 0x0f)); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : uint32_t(((t & 0xf0) << 24) | ((t & 0xf0) << 20)); + + *(dPtr++) = t1 | (t1 << 8) | (t1 << 16) | ta; + } + return true; + } + return false; + + default: + return false; + } + + case TEXP_LEGACY_B4G4R4A4: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // D3DFMT_A4R4G4B4 -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 2 && outSize >= 4) + { + const uint16_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 3))); icount += 2, ocount += 4) + { + const uint32_t t = *(sPtr++); + + uint32_t t1 = uint32_t((t & 0x0f00) >> 4) | ((t & 0x0f00) >> 8); + uint32_t t2 = uint32_t((t & 0x00f0) << 8) | ((t & 0x00f0) << 4); + uint32_t t3 = uint32_t((t & 0x000f) << 20) | ((t & 0x000f) << 16); + uint32_t ta = uint32_t((tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : (((t & 0xf000) << 16) | ((t & 0xf000) << 12))); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + return true; + } + return false; + + case TEXP_LEGACY_L8: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // D3DFMT_L8 -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 1 && outSize >= 4) + { + const uint8_t * __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < inSize) && (ocount < (outSize - 3))); ++icount, ocount += 4) + { + uint32_t t1 = *(sPtr++); + uint32_t t2 = (t1 << 8); + uint32_t t3 = (t1 << 16); + + *(dPtr++) = t1 | t2 | t3 | 0xff000000; + } + return true; + } + return false; + + case TEXP_LEGACY_L16: + if (outFormat != DXGI_FORMAT_R16G16B16A16_UNORM) + return false; + + // D3DFMT_L16 -> DXGI_FORMAT_R16G16B16A16_UNORM + if (inSize >= 2 && outSize >= 8) + { + const uint16_t* __restrict sPtr = static_cast(pSource); + uint64_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 7))); icount += 2, ocount += 8) + { + const uint16_t t = *(sPtr++); + + uint64_t t1 = t; + uint64_t t2 = (t1 << 16); + uint64_t t3 = (t1 << 32); + + *(dPtr++) = t1 | t2 | t3 | 0xffff000000000000; + } + return true; + } + return false; + + case TEXP_LEGACY_A8L8: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // D3DFMT_A8L8 -> DXGI_FORMAT_R8G8B8A8_UNORM + if (inSize >= 2 && outSize >= 4) + { + const uint16_t* __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 3))); icount += 2, ocount += 4) + { + const uint16_t t = *(sPtr++); + + uint32_t t1 = uint32_t(t & 0xff); + uint32_t t2 = uint32_t(t1 << 8); + uint32_t t3 = uint32_t(t1 << 16); + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xff000000 : uint32_t((t & 0xff00) << 16); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + return true; + } + return false; + + case TEXP_LEGACY_L6V5U5: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // D3DFMT_L6V5U5 -> DXGI_FORMAT_R8G8B8A8_UNORM (LUVA) + if (inSize >= 2 && outSize >= 4) + { + const uint16_t* __restrict sPtr = static_cast(pSource); + uint32_t * __restrict dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 1)) && (ocount < (outSize - 3))); icount += 2, ocount += 4) + { + const uint16_t t = *(sPtr++); + + // Converts unsigned 6-bit/signed 5-bit/signed 5-bit bump luminance to 8:8:8:8 unsigned + uint32_t t1 = ((t & 0xFC00) >> 8) | ((t & 0xC000) >> 14); + + constexpr int m = 1U << 4; + int8_t v = ((((t >> 5) & 0x1f) ^ m) - m) + 16; + int8_t u = (((t & 0x1f) ^ m) - m) + 16; + + auto t2 = static_cast(u << 3 | u >> 2); + auto t3 = static_cast(v << 3 | v >> 2); + + *(dPtr++) = t1 | (t2 << 8) | (t3 << 16) | 0xff000000; + } + return true; + } + return false; + + default: + return false; + } + } + + _Success_(return) + bool LegacyConvertScanline( + _Out_writes_bytes_(outSize) void* pDestination, + size_t outSize, + _In_ DXGI_FORMAT outFormat, + _In_reads_bytes_(inSize) const void* pSource, + size_t inSize, + _In_ TEXP_LEGACY_FORMAT inFormat, + uint32_t tflags) noexcept + { + assert(pDestination && outSize > 0); + assert(pSource && inSize > 0); + + switch (inFormat) + { + case TEXP_LEGACY_X8L8V8U8: + if (outFormat != DXGI_FORMAT_R8G8B8A8_UNORM) + return false; + + // D3DFMT_X8L8V8U8 -> DXGI_FORMAT_R8G8B8A8_UNORM (LUVA) + if (inSize >= 4 && outSize >= 4) + { + auto sPtr = static_cast(pSource); + auto dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 3)) && (ocount < (outSize - 3))); icount += 4, ocount += 4) + { + const uint32_t t = *(sPtr++); + + // Converts 8-bit unsigned / 8-bit signed / 8-bit signed to 8:8:8:8 unsigned + uint32_t t1 = (t >> 16) & 0xff; + constexpr int m = 1U << 7; + uint32_t v = ((((t >> 8) & 0xff) ^ m) - m) + 128; + uint32_t u = (((t & 0xff) ^ m) - m) + 128; + + uint32_t t2 = u << 8; + uint32_t t3 = v << 16; + + *(dPtr++) = t1 | t2 | t3 | 0xff000000; + } + return true; + } + return false; + + case TEXP_LEGACY_A2W10V10U10: + if (outFormat != DXGI_FORMAT_R10G10B10A2_UNORM) + return false; + + // D3DFMT_A2W10V10U10 -> DXGI_FORMAT_R10G10B10A2_UNORM (UVWA) + if (inSize >= 4 && outSize >= 4) + { + auto sPtr = static_cast(pSource); + auto dPtr = static_cast(pDestination); + + for (size_t ocount = 0, icount = 0; ((icount < (inSize - 3)) && (ocount < (outSize - 3))); icount += 4, ocount += 4) + { + const uint32_t t = *(sPtr++); + + // Converts 2-bit unsigned / 10-bit signed / 10-bit signed / 10-bit signed to 2:10:10:10 unsigned + constexpr int m = 1U << 9; + uint32_t w = ((((t >> 20) & 0x3ff) ^ m) - m) + 512; + uint32_t v = ((((t >> 10) & 0x3ff) ^ m) - m) + 512; + uint32_t u = (((t & 0x3ff) ^ m) - m) + 512; + + uint32_t t1 = u; + uint32_t t2 = v << 10; + uint32_t t3 = w << 20; + uint32_t ta = (tflags & TEXP_SCANLINE_SETALPHA) ? 0xC0000000 : (t & 0xC0000000); + + *(dPtr++) = t1 | t2 | t3 | ta; + } + return true; + } + return false; + + default: + return false; + } + } + + //------------------------------------------------------------------------------------- + // Converts or copies image data from pPixels into scratch image data + //------------------------------------------------------------------------------------- + HRESULT CopyImage( + _In_reads_bytes_(size) const void* pPixels, + _In_ size_t size, + _In_ const TexMetadata& metadata, + _In_ CP_FLAGS cpFlags, + _In_ uint32_t convFlags, + _In_reads_opt_(256) const uint32_t *pal8, + _In_ const ScratchImage& image) noexcept + { + assert(pPixels); + assert(image.GetPixels()); + + if (!size) + return E_FAIL; + + if (convFlags & CONV_FLAGS_EXPAND) + { + if (convFlags & CONV_FLAGS_888) + cpFlags |= CP_FLAGS_24BPP; + else if (convFlags & (CONV_FLAGS_565 | CONV_FLAGS_5551 | CONV_FLAGS_4444 | CONV_FLAGS_8332 | CONV_FLAGS_A8P8 | CONV_FLAGS_L16 | CONV_FLAGS_A8L8 | CONV_FLAGS_L6V5U5)) + cpFlags |= CP_FLAGS_16BPP; + else if (convFlags & (CONV_FLAGS_44 | CONV_FLAGS_332 | CONV_FLAGS_PAL8 | CONV_FLAGS_L8)) + cpFlags |= CP_FLAGS_8BPP; + } + + size_t pixelSize, nimages; + HRESULT hr = DetermineImageArray(metadata, cpFlags, nimages, pixelSize); + if (FAILED(hr)) + return hr; + + if ((nimages == 0) || (nimages != image.GetImageCount())) + { + return E_FAIL; + } + + if (pixelSize > size) + { + return HRESULT_E_HANDLE_EOF; + } + + std::unique_ptr timages(new (std::nothrow) Image[nimages]); + if (!timages) + { + return E_OUTOFMEMORY; + } + + if (!SetupImageArray( + const_cast(reinterpret_cast(pPixels)), + pixelSize, + metadata, + cpFlags, + timages.get(), + nimages)) + { + return E_FAIL; + } + + if (nimages != image.GetImageCount()) + { + return E_FAIL; + } + + const Image* images = image.GetImages(); + if (!images) + { + return E_FAIL; + } + + uint32_t tflags = (convFlags & CONV_FLAGS_NOALPHA) ? TEXP_SCANLINE_SETALPHA : 0u; + if (convFlags & CONV_FLAGS_SWIZZLE) + tflags |= TEXP_SCANLINE_LEGACY; + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + { + size_t index = 0; + for (size_t item = 0; item < metadata.arraySize; ++item) + { + size_t lastgood = 0; + for (size_t level = 0; level < metadata.mipLevels; ++level, ++index) + { + if (index >= nimages) + return E_FAIL; + + if (images[index].height != timages[index].height) + return E_FAIL; + + size_t dpitch = images[index].rowPitch; + const size_t spitch = timages[index].rowPitch; + + const uint8_t *pSrc = timages[index].pixels; + if (!pSrc) + return E_POINTER; + + uint8_t *pDest = images[index].pixels; + if (!pDest) + return E_POINTER; + + if (IsCompressed(metadata.format)) + { + size_t csize = std::min(images[index].slicePitch, timages[index].slicePitch); + memcpy(pDest, pSrc, csize); + + if (cpFlags & CP_FLAGS_BAD_DXTN_TAILS) + { + if (images[index].width < 4 || images[index].height < 4) + { + csize = std::min(images[index].slicePitch, timages[lastgood].slicePitch); + memcpy(pDest, timages[lastgood].pixels, csize); + } + else + { + lastgood = index; + } + } + } + else if (IsPlanar(metadata.format)) + { + const size_t count = ComputeScanlines(metadata.format, images[index].height); + if (!count) + return E_UNEXPECTED; + + const size_t csize = std::min(dpitch, spitch); + for (size_t h = 0; h < count; ++h) + { + memcpy(pDest, pSrc, csize); + pSrc += spitch; + pDest += dpitch; + } + } + else + { + for (size_t h = 0; h < images[index].height; ++h) + { + if (convFlags & CONV_FLAGS_EXPAND) + { + if (convFlags & CONV_FLAGS_4444) + { + if (!ExpandScanline(pDest, dpitch, DXGI_FORMAT_R8G8B8A8_UNORM, + pSrc, spitch, + (convFlags & CONF_FLAGS_11ON12) ? WIN11_DXGI_FORMAT_A4B4G4R4_UNORM : DXGI_FORMAT_B4G4R4A4_UNORM, + tflags)) + return E_FAIL; + } + else if (convFlags & (CONV_FLAGS_565 | CONV_FLAGS_5551)) + { + if (!ExpandScanline(pDest, dpitch, DXGI_FORMAT_R8G8B8A8_UNORM, + pSrc, spitch, + (convFlags & CONV_FLAGS_565) ? DXGI_FORMAT_B5G6R5_UNORM : DXGI_FORMAT_B5G5R5A1_UNORM, + tflags)) + return E_FAIL; + } + else + { + const TEXP_LEGACY_FORMAT lformat = FindLegacyFormat(convFlags); + if (!LegacyExpandScanline(pDest, dpitch, metadata.format, + pSrc, spitch, lformat, pal8, + tflags)) + return E_FAIL; + } + } + else if (convFlags & CONV_FLAGS_SWIZZLE) + { + SwizzleScanline(pDest, dpitch, pSrc, spitch, metadata.format, tflags); + } + else if (convFlags & (CONV_FLAGS_L8U8V8 | CONV_FLAGS_WUV10)) + { + const TEXP_LEGACY_FORMAT lformat = FindLegacyFormat(convFlags); + if (!LegacyConvertScanline(pDest, dpitch, metadata.format, + pSrc, spitch, lformat, tflags)) + return E_FAIL; + } + else + { + CopyScanline(pDest, dpitch, pSrc, spitch, metadata.format, tflags); + } + + pSrc += spitch; + pDest += dpitch; + } + } + } + } + } + break; + + case TEX_DIMENSION_TEXTURE3D: + { + size_t index = 0; + size_t d = metadata.depth; + + size_t lastgood = 0; + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + for (size_t slice = 0; slice < d; ++slice, ++index) + { + if (index >= nimages) + return E_FAIL; + + if (images[index].height != timages[index].height) + return E_FAIL; + + size_t dpitch = images[index].rowPitch; + const size_t spitch = timages[index].rowPitch; + + const uint8_t *pSrc = timages[index].pixels; + if (!pSrc) + return E_POINTER; + + uint8_t *pDest = images[index].pixels; + if (!pDest) + return E_POINTER; + + if (IsCompressed(metadata.format)) + { + size_t csize = std::min(images[index].slicePitch, timages[index].slicePitch); + memcpy(pDest, pSrc, csize); + + if (cpFlags & CP_FLAGS_BAD_DXTN_TAILS) + { + if (images[index].width < 4 || images[index].height < 4) + { + csize = std::min(images[index].slicePitch, timages[lastgood + slice].slicePitch); + memcpy(pDest, timages[lastgood + slice].pixels, csize); + } + else if (!slice) + { + lastgood = index; + } + } + } + else if (IsPlanar(metadata.format)) + { + // Direct3D does not support any planar formats for Texture3D + return HRESULT_E_NOT_SUPPORTED; + } + else + { + for (size_t h = 0; h < images[index].height; ++h) + { + if (convFlags & CONV_FLAGS_EXPAND) + { + if (convFlags & CONV_FLAGS_4444) + { + if (!ExpandScanline(pDest, dpitch, DXGI_FORMAT_R8G8B8A8_UNORM, + pSrc, spitch, + (convFlags & CONF_FLAGS_11ON12) ? WIN11_DXGI_FORMAT_A4B4G4R4_UNORM : DXGI_FORMAT_B4G4R4A4_UNORM, + tflags)) + return E_FAIL; + } + else if (convFlags & (CONV_FLAGS_565 | CONV_FLAGS_5551)) + { + if (!ExpandScanline(pDest, dpitch, DXGI_FORMAT_R8G8B8A8_UNORM, + pSrc, spitch, + (convFlags & CONV_FLAGS_565) ? DXGI_FORMAT_B5G6R5_UNORM : DXGI_FORMAT_B5G5R5A1_UNORM, + tflags)) + return E_FAIL; + } + else + { + const TEXP_LEGACY_FORMAT lformat = FindLegacyFormat(convFlags); + if (!LegacyExpandScanline(pDest, dpitch, metadata.format, + pSrc, spitch, lformat, pal8, + tflags)) + return E_FAIL; + } + } + else if (convFlags & CONV_FLAGS_SWIZZLE) + { + SwizzleScanline(pDest, dpitch, pSrc, spitch, metadata.format, tflags); + } + else if (convFlags & (CONV_FLAGS_L8U8V8 | CONV_FLAGS_WUV10)) + { + const TEXP_LEGACY_FORMAT lformat = FindLegacyFormat(convFlags); + if (!LegacyConvertScanline(pDest, dpitch, metadata.format, + pSrc, spitch, lformat, tflags)) + return E_FAIL; + } + else + { + CopyScanline(pDest, dpitch, pSrc, spitch, metadata.format, tflags); + } + + pSrc += spitch; + pDest += dpitch; + } + } + } + + if (d > 1) + d >>= 1; + } + } + break; + + default: + return E_FAIL; + } + + return S_OK; + } + + HRESULT CopyImageInPlace(uint32_t convFlags, _In_ const ScratchImage& image) noexcept + { + if (!image.GetPixels()) + return E_FAIL; + + const Image* images = image.GetImages(); + if (!images) + return E_FAIL; + + const TexMetadata& metadata = image.GetMetadata(); + + if (IsPlanar(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + uint32_t tflags = (convFlags & CONV_FLAGS_NOALPHA) ? TEXP_SCANLINE_SETALPHA : 0u; + if (convFlags & CONV_FLAGS_SWIZZLE) + tflags |= TEXP_SCANLINE_LEGACY; + + for (size_t i = 0; i < image.GetImageCount(); ++i) + { + const Image* img = &images[i]; + uint8_t *pPixels = img->pixels; + if (!pPixels) + return E_POINTER; + + size_t rowPitch = img->rowPitch; + + for (size_t h = 0; h < img->height; ++h) + { + if (convFlags & CONV_FLAGS_SWIZZLE) + { + SwizzleScanline(pPixels, rowPitch, pPixels, rowPitch, metadata.format, tflags); + } + else if (convFlags & (CONV_FLAGS_L8U8V8 | CONV_FLAGS_WUV10)) + { + const TEXP_LEGACY_FORMAT lformat = FindLegacyFormat(convFlags); + if (!LegacyConvertScanline(pPixels, rowPitch, metadata.format, pPixels, rowPitch, lformat, tflags)) + { + return E_UNEXPECTED; + } + } + else + { + CopyScanline(pPixels, rowPitch, pPixels, rowPitch, metadata.format, tflags); + } + + pPixels += rowPitch; + } + } + + return S_OK; + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Obtain metadata from DDS file in memory/on disk +//------------------------------------------------------------------------------------- + +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromDDSMemory( + const uint8_t* pSource, + size_t size, + DDS_FLAGS flags, + TexMetadata& metadata) noexcept +{ + return GetMetadataFromDDSMemoryEx(pSource, size, flags, metadata, nullptr); +} + +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromDDSMemoryEx( + const uint8_t* pSource, + size_t size, + DDS_FLAGS flags, + TexMetadata& metadata, + DDSMetaData* ddPixelFormat) noexcept +{ + if (!pSource || size == 0) + return E_INVALIDARG; + + uint32_t convFlags = 0; + return DecodeDDSHeader(pSource, size, flags, metadata, ddPixelFormat, convFlags); +} + +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromDDSFile( + const wchar_t* szFile, + DDS_FLAGS flags, + TexMetadata& metadata) noexcept +{ + return GetMetadataFromDDSFileEx(szFile, flags, metadata, nullptr); +} + +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromDDSFileEx( + const wchar_t* szFile, + DDS_FLAGS flags, + TexMetadata& metadata, + DDSMetaData* ddPixelFormat) noexcept +{ + if (!szFile) + return E_INVALIDARG; + +#ifdef _WIN32 +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile(safe_handle(CreateFile2(szFile, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr))); +#else + ScopedHandle hFile(safe_handle(CreateFileW(szFile, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, nullptr))); +#endif + if (!hFile) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // Get the file size + FILE_STANDARD_INFO fileInfo; + if (!GetFileInformationByHandleEx(hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo))) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // File is too big for 32-bit allocation, so reject read (4 GB should be plenty large enough for a valid DDS file) + if (fileInfo.EndOfFile.HighPart > 0) + { + return HRESULT_E_FILE_TOO_LARGE; + } + + const size_t len = fileInfo.EndOfFile.LowPart; +#else // !WIN32 + std::ifstream inFile(std::filesystem::path(szFile), std::ios::in | std::ios::binary | std::ios::ate); + if (!inFile) + return E_FAIL; + + std::streampos fileLen = inFile.tellg(); + if (!inFile) + return E_FAIL; + + if (fileLen > UINT32_MAX) + return HRESULT_E_FILE_TOO_LARGE; + + inFile.seekg(0, std::ios::beg); + if (!inFile) + return E_FAIL; + + const size_t len = fileLen; +#endif + + // Need at least enough data to fill the standard header and magic number to be a valid DDS + if (len < DDS_MIN_HEADER_SIZE) + { + return E_FAIL; + } + + // Read the header in (including extended header if present) + uint8_t header[DDS_DX10_HEADER_SIZE] = {}; + +#ifdef _WIN32 + DWORD bytesRead = 0; + if (!ReadFile(hFile.get(), header, DDS_DX10_HEADER_SIZE, &bytesRead, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + auto const headerLen = static_cast(bytesRead); +#else + auto const headerLen = std::min(len, DDS_DX10_HEADER_SIZE); + + inFile.read(reinterpret_cast(header), headerLen); + if (!inFile) + return E_FAIL; +#endif + + uint32_t convFlags = 0; + return DecodeDDSHeader(header, headerLen, flags, metadata, ddPixelFormat, convFlags); +} + + +//------------------------------------------------------------------------------------- +// Load a DDS file in memory +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::LoadFromDDSMemory( + const uint8_t* pSource, + size_t size, + DDS_FLAGS flags, + TexMetadata* metadata, + ScratchImage& image) noexcept +{ + return LoadFromDDSMemoryEx(pSource, size, flags, metadata, nullptr, image); +} + +_Use_decl_annotations_ +HRESULT DirectX::LoadFromDDSMemoryEx( + const uint8_t* pSource, + size_t size, + DDS_FLAGS flags, + TexMetadata* metadata, + DDSMetaData* ddPixelFormat, + ScratchImage& image) noexcept +{ + if (!pSource || size == 0) + return E_INVALIDARG; + + image.Release(); + + uint32_t convFlags = 0; + TexMetadata mdata; + HRESULT hr = DecodeDDSHeader(pSource, size, flags, mdata, ddPixelFormat, convFlags); + if (FAILED(hr)) + return hr; + + size_t offset = DDS_MIN_HEADER_SIZE; + if (convFlags & CONV_FLAGS_DX10) + offset += sizeof(DDS_HEADER_DXT10); + + assert(offset <= size); + + const uint32_t *pal8 = nullptr; + if (convFlags & CONV_FLAGS_PAL8) + { + pal8 = reinterpret_cast(static_cast(pSource) + offset); + assert(pal8); + offset += (256 * sizeof(uint32_t)); + if (size < offset) + return E_FAIL; + } + + hr = image.Initialize(mdata); + if (FAILED(hr)) + return hr; + + CP_FLAGS cflags = CP_FLAGS_NONE; + if (flags & DDS_FLAGS_LEGACY_DWORD) + { + cflags |= CP_FLAGS_LEGACY_DWORD; + } + if (flags & DDS_FLAGS_BAD_DXTN_TAILS) + { + cflags |= CP_FLAGS_BAD_DXTN_TAILS; + } + + const void* pPixels = static_cast(pSource) + offset; + assert(pPixels); + hr = CopyImage(pPixels, + size - offset, + mdata, + cflags, + convFlags, + pal8, + image); + if (FAILED(hr)) + { + image.Release(); + return hr; + } + if (metadata) + memcpy(metadata, &mdata, sizeof(TexMetadata)); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Load a DDS file from disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::LoadFromDDSFile( + const wchar_t* szFile, + DDS_FLAGS flags, + TexMetadata* metadata, + ScratchImage& image) noexcept +{ + return LoadFromDDSFileEx(szFile, flags, metadata, nullptr, image); +} + +_Use_decl_annotations_ +HRESULT DirectX::LoadFromDDSFileEx( + const wchar_t* szFile, + DDS_FLAGS flags, + TexMetadata* metadata, + DDSMetaData* ddPixelFormat, + ScratchImage& image) noexcept +{ + if (!szFile) + return E_INVALIDARG; + + image.Release(); + +#ifdef _WIN32 +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile(safe_handle(CreateFile2(szFile, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr))); +#else + ScopedHandle hFile(safe_handle(CreateFileW(szFile, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, nullptr))); +#endif + if (!hFile) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // Get the file size + FILE_STANDARD_INFO fileInfo; + if (!GetFileInformationByHandleEx(hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo))) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // File is too big for 32-bit allocation, so reject read (4 GB should be plenty large enough for a valid DDS file) + if (fileInfo.EndOfFile.HighPart > 0) + return HRESULT_E_FILE_TOO_LARGE; + + const size_t len = fileInfo.EndOfFile.LowPart; +#else // !WIN32 + std::ifstream inFile(std::filesystem::path(szFile), std::ios::in | std::ios::binary | std::ios::ate); + if (!inFile) + return E_FAIL; + + std::streampos fileLen = inFile.tellg(); + if (!inFile) + return E_FAIL; + + if (fileLen > UINT32_MAX) + return HRESULT_E_FILE_TOO_LARGE; + + inFile.seekg(0, std::ios::beg); + if (!inFile) + return E_FAIL; + + const size_t len = fileLen; +#endif + + // Need at least enough data to fill the standard header and magic number to be a valid DDS + if (len < DDS_MIN_HEADER_SIZE) + { + return E_FAIL; + } + + // Read the header in (including extended header if present) + uint8_t header[DDS_DX10_HEADER_SIZE] = {}; + +#ifdef _WIN32 + DWORD bytesRead = 0; + if (!ReadFile(hFile.get(), header, DDS_DX10_HEADER_SIZE, &bytesRead, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + auto const headerLen = static_cast(bytesRead); +#else + auto const headerLen = std::min(len, DDS_DX10_HEADER_SIZE); + + inFile.read(reinterpret_cast(header), headerLen); + if (!inFile) + return E_FAIL; +#endif + + uint32_t convFlags = 0; + TexMetadata mdata; + HRESULT hr = DecodeDDSHeader(header, headerLen, flags, mdata, ddPixelFormat, convFlags); + if (FAILED(hr)) + return hr; + + size_t offset = DDS_DX10_HEADER_SIZE; + + if (!(convFlags & CONV_FLAGS_DX10)) + { + #ifdef _WIN32 + // Must reset file position since we read more than the standard header above + const LARGE_INTEGER filePos = { { DDS_MIN_HEADER_SIZE, 0 } }; + if (!SetFilePointerEx(hFile.get(), filePos, nullptr, FILE_BEGIN)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + #else + inFile.seekg(DDS_MIN_HEADER_SIZE, std::ios::beg); + if (!inFile) + return E_FAIL; + #endif + + offset = DDS_MIN_HEADER_SIZE; + } + + std::unique_ptr pal8; + if (convFlags & CONV_FLAGS_PAL8) + { + pal8.reset(new (std::nothrow) uint32_t[256]); + if (!pal8) + { + return E_OUTOFMEMORY; + } + + #ifdef _WIN32 + if (!ReadFile(hFile.get(), pal8.get(), 256 * sizeof(uint32_t), &bytesRead, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesRead != (256 * sizeof(uint32_t))) + { + return E_FAIL; + } + #else + inFile.read(reinterpret_cast(pal8.get()), 256 * sizeof(uint32_t)); + if (!inFile) + return E_FAIL; + #endif + + offset += (256 * sizeof(uint32_t)); + } + + const size_t remaining = len - offset; + if (remaining == 0) + return E_FAIL; + + hr = image.Initialize(mdata); + if (FAILED(hr)) + return hr; + + if ((convFlags & CONV_FLAGS_EXPAND) || (flags & (DDS_FLAGS_LEGACY_DWORD | DDS_FLAGS_BAD_DXTN_TAILS))) + { + std::unique_ptr temp(new (std::nothrow) uint8_t[remaining]); + if (!temp) + { + image.Release(); + return E_OUTOFMEMORY; + } + + #ifdef _WIN32 + if (!ReadFile(hFile.get(), temp.get(), static_cast(remaining), &bytesRead, nullptr)) + { + image.Release(); + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesRead != remaining) + { + image.Release(); + return E_FAIL; + } + #else + inFile.read(reinterpret_cast(temp.get()), remaining); + if (!inFile) + { + image.Release(); + return E_FAIL; + } + #endif + + CP_FLAGS cflags = CP_FLAGS_NONE; + if (flags & DDS_FLAGS_LEGACY_DWORD) + { + cflags |= CP_FLAGS_LEGACY_DWORD; + } + if (flags & DDS_FLAGS_BAD_DXTN_TAILS) + { + cflags |= CP_FLAGS_BAD_DXTN_TAILS; + } + + hr = CopyImage(temp.get(), + remaining, + mdata, + cflags, + convFlags, + pal8.get(), + image); + if (FAILED(hr)) + { + image.Release(); + return hr; + } + } + else + { + if (remaining < image.GetPixelsSize()) + { + image.Release(); + return HRESULT_E_HANDLE_EOF; + } + + if (image.GetPixelsSize() > UINT32_MAX) + { + image.Release(); + return HRESULT_E_ARITHMETIC_OVERFLOW; + } + + #ifdef _WIN32 + auto const pixelBytes = static_cast(image.GetPixelsSize()); + if (!ReadFile(hFile.get(), image.GetPixels(), pixelBytes, &bytesRead, nullptr)) + { + image.Release(); + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesRead != pixelBytes) + { + image.Release(); + return E_FAIL; + } + #else + inFile.read(reinterpret_cast(image.GetPixels()), image.GetPixelsSize()); + if (!inFile) + { + image.Release(); + return E_FAIL; + } + #endif + + if (convFlags & (CONV_FLAGS_SWIZZLE | CONV_FLAGS_NOALPHA | CONV_FLAGS_L8U8V8 | CONV_FLAGS_WUV10)) + { + // Swizzle/copy image in place + hr = CopyImageInPlace(convFlags, image); + if (FAILED(hr)) + { + image.Release(); + return hr; + } + } + } + + if (metadata) + memcpy(metadata, &mdata, sizeof(TexMetadata)); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Save a DDS file to memory +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::SaveToDDSMemory( + const Image* images, + size_t nimages, + const TexMetadata& metadata, + DDS_FLAGS flags, + Blob& blob) noexcept +{ + if (!images || (nimages == 0)) + return E_INVALIDARG; + + // Determine memory required + size_t required = 0; + HRESULT hr = EncodeDDSHeader(metadata, flags, nullptr, 0, required); + if (FAILED(hr)) + return hr; + + bool fastpath = true; + + for (size_t i = 0; i < nimages; ++i) + { + if (!images[i].pixels) + return E_POINTER; + + if (images[i].format != metadata.format) + return E_FAIL; + + size_t ddsRowPitch, ddsSlicePitch; + hr = ComputePitch(metadata.format, images[i].width, images[i].height, ddsRowPitch, ddsSlicePitch, CP_FLAGS_NONE); + if (FAILED(hr)) + return hr; + + assert(images[i].rowPitch > 0); + assert(images[i].slicePitch > 0); + + if ((images[i].rowPitch != ddsRowPitch) || (images[i].slicePitch != ddsSlicePitch)) + { + fastpath = false; + } + + required += ddsSlicePitch; + } + + assert(required > 0); + + blob.Release(); + + hr = blob.Initialize(required); + if (FAILED(hr)) + return hr; + + auto pDestination = blob.GetBufferPointer(); + assert(pDestination); + + hr = EncodeDDSHeader(metadata, flags, pDestination, blob.GetBufferSize(), required); + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + size_t remaining = blob.GetBufferSize() - required; + pDestination += required; + + if (!remaining) + { + blob.Release(); + return E_FAIL; + } + + switch (static_cast(metadata.dimension)) + { + case DDS_DIMENSION_TEXTURE1D: + case DDS_DIMENSION_TEXTURE2D: + { + size_t index = 0; + for (size_t item = 0; item < metadata.arraySize; ++item) + { + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + if (index >= nimages) + { + blob.Release(); + return E_FAIL; + } + + if (fastpath) + { + size_t pixsize = images[index].slicePitch; + memcpy(pDestination, images[index].pixels, pixsize); + + pDestination += pixsize; + remaining -= pixsize; + } + else + { + size_t ddsRowPitch, ddsSlicePitch; + hr = ComputePitch(metadata.format, images[index].width, images[index].height, ddsRowPitch, ddsSlicePitch, CP_FLAGS_NONE); + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + const size_t rowPitch = images[index].rowPitch; + + const uint8_t * __restrict sPtr = images[index].pixels; + uint8_t * __restrict dPtr = pDestination; + + const size_t lines = ComputeScanlines(metadata.format, images[index].height); + const size_t csize = std::min(rowPitch, ddsRowPitch); + size_t tremaining = remaining; + for (size_t j = 0; j < lines; ++j) + { + if (tremaining < csize) + { + blob.Release(); + return E_FAIL; + } + + memcpy(dPtr, sPtr, csize); + + sPtr += rowPitch; + dPtr += ddsRowPitch; + tremaining -= ddsRowPitch; + } + + pDestination += ddsSlicePitch; + remaining -= ddsSlicePitch; + } + + ++index; + } + } + } + break; + + case DDS_DIMENSION_TEXTURE3D: + { + if (metadata.arraySize != 1) + { + blob.Release(); + return E_FAIL; + } + + size_t d = metadata.depth; + + size_t index = 0; + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + for (size_t slice = 0; slice < d; ++slice) + { + if (index >= nimages) + { + blob.Release(); + return E_FAIL; + } + + if (fastpath) + { + size_t pixsize = images[index].slicePitch; + memcpy(pDestination, images[index].pixels, pixsize); + + pDestination += pixsize; + remaining -= pixsize; + } + else + { + size_t ddsRowPitch, ddsSlicePitch; + hr = ComputePitch(metadata.format, images[index].width, images[index].height, ddsRowPitch, ddsSlicePitch, CP_FLAGS_NONE); + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + const size_t rowPitch = images[index].rowPitch; + + const uint8_t * __restrict sPtr = images[index].pixels; + uint8_t * __restrict dPtr = pDestination; + + const size_t lines = ComputeScanlines(metadata.format, images[index].height); + const size_t csize = std::min(rowPitch, ddsRowPitch); + size_t tremaining = remaining; + for (size_t j = 0; j < lines; ++j) + { + if (tremaining < csize) + { + blob.Release(); + return E_FAIL; + } + + memcpy(dPtr, sPtr, csize); + + sPtr += rowPitch; + dPtr += ddsRowPitch; + tremaining -= ddsRowPitch; + } + + pDestination += ddsSlicePitch; + remaining -= ddsSlicePitch; + } + + ++index; + } + + if (d > 1) + d >>= 1; + } + } + break; + + default: + blob.Release(); + return E_FAIL; + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Save a DDS file to disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::SaveToDDSFile( + const Image* images, + size_t nimages, + const TexMetadata& metadata, + DDS_FLAGS flags, + const wchar_t* szFile) noexcept +{ + if (!szFile) + return E_INVALIDARG; + + // Create DDS Header + uint8_t header[DDS_DX10_HEADER_SIZE]; + size_t required; + HRESULT hr = EncodeDDSHeader(metadata, flags, header, DDS_DX10_HEADER_SIZE, required); + if (FAILED(hr)) + return hr; + + // Create file and write header +#ifdef _WIN32 +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile(safe_handle(CreateFile2(szFile, + GENERIC_WRITE | DELETE, 0, CREATE_ALWAYS, nullptr))); +#else + ScopedHandle hFile(safe_handle(CreateFileW(szFile, + GENERIC_WRITE | DELETE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr))); +#endif + if (!hFile) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + auto_delete_file delonfail(hFile.get()); + + DWORD bytesWritten; + if (!WriteFile(hFile.get(), header, static_cast(required), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != required) + { + return E_FAIL; + } +#else // !WIN32 + std::ofstream outFile(std::filesystem::path(szFile), std::ios::out | std::ios::binary | std::ios::trunc); + if (!outFile) + return E_FAIL; + + outFile.write(reinterpret_cast(header), static_cast(required)); + if (!outFile) + return E_FAIL; +#endif + + // Write images + switch (static_cast(metadata.dimension)) + { + case DDS_DIMENSION_TEXTURE1D: + case DDS_DIMENSION_TEXTURE2D: + { + size_t index = 0; + for (size_t item = 0; item < metadata.arraySize; ++item) + { + for (size_t level = 0; level < metadata.mipLevels; ++level, ++index) + { + if (index >= nimages) + return E_FAIL; + + if (!images[index].pixels) + return E_POINTER; + + assert(images[index].rowPitch > 0); + assert(images[index].slicePitch > 0); + + size_t ddsRowPitch, ddsSlicePitch; + hr = ComputePitch(metadata.format, images[index].width, images[index].height, ddsRowPitch, ddsSlicePitch, CP_FLAGS_NONE); + if (FAILED(hr)) + return hr; + + if ((images[index].slicePitch == ddsSlicePitch) && (ddsSlicePitch <= UINT32_MAX)) + { + #ifdef _WIN32 + if (!WriteFile(hFile.get(), images[index].pixels, static_cast(ddsSlicePitch), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != ddsSlicePitch) + { + return E_FAIL; + } + #else + outFile.write(reinterpret_cast(images[index].pixels), static_cast(ddsSlicePitch)); + if (!outFile) + return E_FAIL; + #endif + } + else + { + const size_t rowPitch = images[index].rowPitch; + if (rowPitch < ddsRowPitch) + { + // DDS uses 1-byte alignment, so if this is happening then the input pitch isn't actually a full line of data + return E_FAIL; + } + + if (ddsRowPitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + const uint8_t * __restrict sPtr = images[index].pixels; + + const size_t lines = ComputeScanlines(metadata.format, images[index].height); + for (size_t j = 0; j < lines; ++j) + { + #ifdef _WIN32 + if (!WriteFile(hFile.get(), sPtr, static_cast(ddsRowPitch), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != ddsRowPitch) + { + return E_FAIL; + } + #else + outFile.write(reinterpret_cast(sPtr), static_cast(ddsRowPitch)); + if (!outFile) + return E_FAIL; + #endif + + sPtr += rowPitch; + } + } + } + } + } + break; + + case DDS_DIMENSION_TEXTURE3D: + { + if (metadata.arraySize != 1) + return E_FAIL; + + size_t d = metadata.depth; + + size_t index = 0; + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + for (size_t slice = 0; slice < d; ++slice, ++index) + { + if (index >= nimages) + return E_FAIL; + + if (!images[index].pixels) + return E_POINTER; + + assert(images[index].rowPitch > 0); + assert(images[index].slicePitch > 0); + + size_t ddsRowPitch, ddsSlicePitch; + hr = ComputePitch(metadata.format, images[index].width, images[index].height, ddsRowPitch, ddsSlicePitch, CP_FLAGS_NONE); + if (FAILED(hr)) + return hr; + + if ((images[index].slicePitch == ddsSlicePitch) && (ddsSlicePitch <= UINT32_MAX)) + { + #ifdef _WIN32 + if (!WriteFile(hFile.get(), images[index].pixels, static_cast(ddsSlicePitch), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != ddsSlicePitch) + { + return E_FAIL; + } + #else + outFile.write(reinterpret_cast(images[index].pixels), static_cast(ddsSlicePitch)); + if (!outFile) + return E_FAIL; + #endif + } + else + { + const size_t rowPitch = images[index].rowPitch; + if (rowPitch < ddsRowPitch) + { + // DDS uses 1-byte alignment, so if this is happening then the input pitch isn't actually a full line of data + return E_FAIL; + } + + if (ddsRowPitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + const uint8_t * __restrict sPtr = images[index].pixels; + + const size_t lines = ComputeScanlines(metadata.format, images[index].height); + for (size_t j = 0; j < lines; ++j) + { + #ifdef _WIN32 + if (!WriteFile(hFile.get(), sPtr, static_cast(ddsRowPitch), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != ddsRowPitch) + { + return E_FAIL; + } + #else + outFile.write(reinterpret_cast(sPtr), static_cast(ddsRowPitch)); + if (!outFile) + return E_FAIL; + #endif + sPtr += rowPitch; + } + } + } + + if (d > 1) + d >>= 1; + } + } + break; + + default: + return E_FAIL; + } + +#ifdef _WIN32 + delonfail.clear(); +#endif + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Adapters for /Zc:wchar_t- clients + +#if defined(_MSC_VER) && !defined(_NATIVE_WCHAR_T_DEFINED) + +namespace DirectX +{ + HRESULT __cdecl GetMetadataFromDDSFile( + _In_z_ const __wchar_t* szFile, + _In_ DDS_FLAGS flags, + _Out_ TexMetadata& metadata) noexcept + { + return GetMetadataFromDDSFile(reinterpret_cast(szFile), flags, metadata); + } + + HRESULT __cdecl GetMetadataFromDDSFileEx( + _In_z_ const __wchar_t* szFile, + _In_ DDS_FLAGS flags, + _Out_ TexMetadata& metadata, + _Out_opt_ DDSMetaData* ddPixelFormat) noexcept + { + return GetMetadataFromDDSFileEx(reinterpret_cast(szFile), flags, metadata, ddPixelFormat); + } + + HRESULT __cdecl LoadFromDDSFile( + _In_z_ const __wchar_t* szFile, + _In_ DDS_FLAGS flags, + _Out_opt_ TexMetadata* metadata, + _Out_ ScratchImage& image) noexcept + { + return LoadFromDDSFile(reinterpret_cast(szFile), flags, metadata, image); + } + + HRESULT __cdecl LoadFromDDSFileEx( + _In_z_ const __wchar_t* szFile, + _In_ DDS_FLAGS flags, + _Out_opt_ TexMetadata* metadata, + _Out_opt_ DDSMetaData* ddPixelFormat, + _Out_ ScratchImage& image) noexcept + { + return LoadFromDDSFileEx(reinterpret_cast(szFile), flags, metadata, ddPixelFormat, image); + } + + HRESULT __cdecl SaveToDDSFile( + _In_ const Image& image, + _In_ DDS_FLAGS flags, + _In_z_ const __wchar_t* szFile) noexcept + { + return SaveToDDSFile(image, flags, reinterpret_cast(szFile)); + } + + HRESULT __cdecl SaveToDDSFile( + _In_reads_(nimages) const Image* images, + _In_ size_t nimages, + _In_ const TexMetadata& metadata, + _In_ DDS_FLAGS flags, + _In_z_ const __wchar_t* szFile) noexcept + { + return SaveToDDSFile(images, nimages, metadata, flags, reinterpret_cast(szFile)); + } +} + +#endif // !_NATIVE_WCHAR_T_DEFINED diff --git a/external/DirectXTex/DirectXTexFlipRotate.cpp b/external/DirectXTex/DirectXTexFlipRotate.cpp new file mode 100644 index 00000000..1b26e685 --- /dev/null +++ b/external/DirectXTex/DirectXTexFlipRotate.cpp @@ -0,0 +1,411 @@ +//------------------------------------------------------------------------------------- +// DirectXTexFlipRotate.cpp +// +// DirectX Texture Library - Image flip/rotate operations +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +using namespace DirectX; +using namespace DirectX::Internal; +using Microsoft::WRL::ComPtr; + +namespace +{ + //------------------------------------------------------------------------------------- + // Do flip/rotate operation using WIC + //------------------------------------------------------------------------------------- + HRESULT PerformFlipRotateUsingWIC( + const Image& srcImage, + TEX_FR_FLAGS flags, + const WICPixelFormatGUID& pfGUID, + const Image& destImage) noexcept + { + if (!srcImage.pixels || !destImage.pixels) + return E_POINTER; + + assert(srcImage.format == destImage.format); + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + if (srcImage.rowPitch > UINT32_MAX || srcImage.slicePitch > UINT32_MAX + || destImage.rowPitch > UINT32_MAX || destImage.slicePitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + ComPtr source; + HRESULT hr = pWIC->CreateBitmapFromMemory(static_cast(srcImage.width), static_cast(srcImage.height), pfGUID, + static_cast(srcImage.rowPitch), static_cast(srcImage.slicePitch), + srcImage.pixels, source.GetAddressOf()); + if (FAILED(hr)) + return hr; + + ComPtr FR; + hr = pWIC->CreateBitmapFlipRotator(FR.GetAddressOf()); + if (FAILED(hr)) + return hr; + + hr = FR->Initialize(source.Get(), static_cast(flags)); + if (FAILED(hr)) + return hr; + + WICPixelFormatGUID pfFR; + hr = FR->GetPixelFormat(&pfFR); + if (FAILED(hr)) + return hr; + + if (memcmp(&pfFR, &pfGUID, sizeof(GUID)) != 0) + { + // Flip/rotate should return the same format as the source... + return HRESULT_E_NOT_SUPPORTED; + } + + UINT nwidth, nheight; + hr = FR->GetSize(&nwidth, &nheight); + if (FAILED(hr)) + return hr; + + if (destImage.width != nwidth || destImage.height != nheight) + return E_FAIL; + + hr = FR->CopyPixels(nullptr, static_cast(destImage.rowPitch), static_cast(destImage.slicePitch), destImage.pixels); + if (FAILED(hr)) + return hr; + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Do conversion, flip/rotate using WIC, conversion cycle + // + // For large images we have to use F16 instead of F32 to avoid exceeding the 32-bit + // memory limitations of WIC. + //------------------------------------------------------------------------------------- + HRESULT PerformFlipRotateViaF16( + const Image& srcImage, + TEX_FR_FLAGS flags, + const Image& destImage) noexcept + { + if (!srcImage.pixels || !destImage.pixels) + return E_POINTER; + + assert(srcImage.format != DXGI_FORMAT_R16G16B16A16_FLOAT); + assert(srcImage.format == destImage.format); + + ScratchImage temp; + HRESULT hr = ConvertToR16G16B16A16(srcImage, temp); + if (FAILED(hr)) + return hr; + + const Image *tsrc = temp.GetImage(0, 0, 0); + if (!tsrc) + return E_POINTER; + + ScratchImage rtemp; + hr = rtemp.Initialize2D(DXGI_FORMAT_R16G16B16A16_FLOAT, destImage.width, destImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *tdest = rtemp.GetImage(0, 0, 0); + if (!tdest) + return E_POINTER; + + hr = PerformFlipRotateUsingWIC(*tsrc, flags, GUID_WICPixelFormat64bppRGBAHalf, *tdest); + if (FAILED(hr)) + return hr; + + temp.Release(); + + hr = ConvertFromR16G16B16A16(*tdest, destImage); + if (FAILED(hr)) + return hr; + + return S_OK; + } + + HRESULT PerformFlipRotateViaF32( + const Image& srcImage, + TEX_FR_FLAGS flags, + const Image& destImage) noexcept + { + if (!srcImage.pixels || !destImage.pixels) + return E_POINTER; + + assert(srcImage.format != DXGI_FORMAT_R32G32B32A32_FLOAT); + assert(srcImage.format == destImage.format); + + ScratchImage temp; + HRESULT hr = ConvertToR32G32B32A32(srcImage, temp); + if (FAILED(hr)) + return hr; + + const Image *tsrc = temp.GetImage(0, 0, 0); + if (!tsrc) + return E_POINTER; + + ScratchImage rtemp; + hr = rtemp.Initialize2D(DXGI_FORMAT_R32G32B32A32_FLOAT, destImage.width, destImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *tdest = rtemp.GetImage(0, 0, 0); + if (!tdest) + return E_POINTER; + + hr = PerformFlipRotateUsingWIC(*tsrc, flags, GUID_WICPixelFormat128bppRGBAFloat, *tdest); + if (FAILED(hr)) + return hr; + + temp.Release(); + + hr = ConvertFromR32G32B32A32(*tdest, destImage); + if (FAILED(hr)) + return hr; + + return S_OK; + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Flip/rotate image +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::FlipRotate( + const Image& srcImage, + TEX_FR_FLAGS flags, + ScratchImage& image) noexcept +{ + if (!srcImage.pixels) + return E_POINTER; + + if (!flags) + return E_INVALIDARG; + + if ((srcImage.width > UINT32_MAX) || (srcImage.height > UINT32_MAX)) + return E_INVALIDARG; + + if (IsCompressed(srcImage.format)) + { + // We don't support flip/rotate operations on compressed images + return HRESULT_E_NOT_SUPPORTED; + } + + static_assert(static_cast(TEX_FR_ROTATE0) == static_cast(WICBitmapTransformRotate0), "TEX_FR_ROTATE0 no longer matches WIC"); + static_assert(static_cast(TEX_FR_ROTATE90) == static_cast(WICBitmapTransformRotate90), "TEX_FR_ROTATE90 no longer matches WIC"); + static_assert(static_cast(TEX_FR_ROTATE180) == static_cast(WICBitmapTransformRotate180), "TEX_FR_ROTATE180 no longer matches WIC"); + static_assert(static_cast(TEX_FR_ROTATE270) == static_cast(WICBitmapTransformRotate270), "TEX_FR_ROTATE270 no longer matches WIC"); + static_assert(static_cast(TEX_FR_FLIP_HORIZONTAL) == static_cast(WICBitmapTransformFlipHorizontal), "TEX_FR_FLIP_HORIZONTAL no longer matches WIC"); + static_assert(static_cast(TEX_FR_FLIP_VERTICAL) == static_cast(WICBitmapTransformFlipVertical), "TEX_FR_FLIP_VERTICAL no longer matches WIC"); + + // Only supports 90, 180, 270, or no rotation flags... not a combination of rotation flags + const int rotateMode = static_cast(flags & (TEX_FR_ROTATE0 | TEX_FR_ROTATE90 | TEX_FR_ROTATE180 | TEX_FR_ROTATE270)); + + switch (rotateMode) + { + case 0: + case TEX_FR_ROTATE90: + case TEX_FR_ROTATE180: + case TEX_FR_ROTATE270: + break; + + default: + return E_INVALIDARG; + } + + size_t nwidth = srcImage.width; + size_t nheight = srcImage.height; + + if ((rotateMode == TEX_FR_ROTATE90) || (rotateMode == TEX_FR_ROTATE270)) + { + nwidth = srcImage.height; + nheight = srcImage.width; + } + + HRESULT hr = image.Initialize2D(srcImage.format, nwidth, nheight, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *rimage = image.GetImage(0, 0, 0); + if (!rimage) + { + image.Release(); + return E_POINTER; + } + + WICPixelFormatGUID pfGUID; + if (DXGIToWIC(srcImage.format, pfGUID)) + { + // Case 1: Source format is supported by Windows Imaging Component + hr = PerformFlipRotateUsingWIC(srcImage, flags, pfGUID, *rimage); + } + else + { + // Case 2: Source format is not supported by WIC, so we have to convert, flip/rotate, and convert back + const uint64_t expandedSize = uint64_t(srcImage.width) * uint64_t(srcImage.height) * sizeof(float) * 4; + if (expandedSize > UINT32_MAX) + { + // Image is too large for float32, so have to use float16 instead + hr = PerformFlipRotateViaF16(srcImage, flags, *rimage); + } + else + { + hr = PerformFlipRotateViaF32(srcImage, flags, *rimage); + } + } + + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Flip/rotate image (complex) +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::FlipRotate( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + TEX_FR_FLAGS flags, + ScratchImage& result) noexcept +{ + if (!srcImages || !nimages) + return E_INVALIDARG; + + if (IsCompressed(metadata.format)) + { + // We don't support flip/rotate operations on compressed images + return HRESULT_E_NOT_SUPPORTED; + } + + static_assert(static_cast(TEX_FR_ROTATE0) == static_cast(WICBitmapTransformRotate0), "TEX_FR_ROTATE0 no longer matches WIC"); + static_assert(static_cast(TEX_FR_ROTATE90) == static_cast(WICBitmapTransformRotate90), "TEX_FR_ROTATE90 no longer matches WIC"); + static_assert(static_cast(TEX_FR_ROTATE180) == static_cast(WICBitmapTransformRotate180), "TEX_FR_ROTATE180 no longer matches WIC"); + static_assert(static_cast(TEX_FR_ROTATE270) == static_cast(WICBitmapTransformRotate270), "TEX_FR_ROTATE270 no longer matches WIC"); + static_assert(static_cast(TEX_FR_FLIP_HORIZONTAL) == static_cast(WICBitmapTransformFlipHorizontal), "TEX_FR_FLIP_HORIZONTAL no longer matches WIC"); + static_assert(static_cast(TEX_FR_FLIP_VERTICAL) == static_cast(WICBitmapTransformFlipVertical), "TEX_FR_FLIP_VERTICAL no longer matches WIC"); + + // Only supports 90, 180, 270, or no rotation flags... not a combination of rotation flags + const int rotateMode = static_cast(flags & (TEX_FR_ROTATE0 | TEX_FR_ROTATE90 | TEX_FR_ROTATE180 | TEX_FR_ROTATE270)); + + switch (rotateMode) + { + case 0: + case TEX_FR_ROTATE90: + case TEX_FR_ROTATE180: + case TEX_FR_ROTATE270: + break; + + default: + return E_INVALIDARG; + } + + TexMetadata mdata2 = metadata; + + bool flipwh = false; + if ((rotateMode == TEX_FR_ROTATE90) || (rotateMode == TEX_FR_ROTATE270)) + { + flipwh = true; + mdata2.width = metadata.height; + mdata2.height = metadata.width; + } + + HRESULT hr = result.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + if (nimages != result.GetImageCount()) + { + result.Release(); + return E_FAIL; + } + + const Image* dest = result.GetImages(); + if (!dest) + { + result.Release(); + return E_POINTER; + } + + WICPixelFormatGUID pfGUID; + const bool wicpf = DXGIToWIC(metadata.format, pfGUID); + + for (size_t index = 0; index < nimages; ++index) + { + const Image& src = srcImages[index]; + if (src.format != metadata.format) + { + result.Release(); + return E_FAIL; + } + + if ((src.width > UINT32_MAX) || (src.height > UINT32_MAX)) + return E_FAIL; + + const Image& dst = dest[index]; + assert(dst.format == metadata.format); + + if (flipwh) + { + if (src.width != dst.height || src.height != dst.width) + { + result.Release(); + return E_FAIL; + } + } + else + { + if (src.width != dst.width || src.height != dst.height) + { + result.Release(); + return E_FAIL; + } + } + + if (wicpf) + { + // Case 1: Source format is supported by Windows Imaging Component + hr = PerformFlipRotateUsingWIC(src, flags, pfGUID, dst); + } + else + { + // Case 2: Source format is not supported by WIC, so we have to convert, flip/rotate, and convert back + const uint64_t expandedSize = uint64_t(src.width) * uint64_t(src.height) * sizeof(float) * 4; + if (expandedSize > UINT32_MAX) + { + // Image is too large for float32, so have to use float16 instead + hr = PerformFlipRotateViaF16(src, flags, dst); + } + else + { + hr = PerformFlipRotateViaF32(src, flags, dst); + } + } + + if (FAILED(hr)) + { + result.Release(); + return hr; + } + } + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexHDR.cpp b/external/DirectXTex/DirectXTexHDR.cpp new file mode 100644 index 00000000..7c8bd08d --- /dev/null +++ b/external/DirectXTex/DirectXTexHDR.cpp @@ -0,0 +1,1351 @@ +//------------------------------------------------------------------------------------- +// DirectXTexHDR.cpp +// +// DirectX Texture Library - Radiance HDR (RGBE) file format reader/writer +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" +// +// In theory HDR (RGBE) Radiance files can have any of the following data orientations +// +// +X width +Y height +// +X width -Y height +// -X width +Y height +// -X width -Y height +// +Y height +X width +// -Y height +X width +// +Y height -X width +// -Y height -X width +// +// All HDR files we've encountered are always written as "-Y height +X width", so +// we support only that one as that's what other Radiance parsing code does as well. +// + +//Uncomment to disable the use of adapative RLE encoding when writing an HDR. Used for testing only. +//#define DISABLE_COMPRESS + +//Uncomment to use "old colors" standard RLE encoding when writing an HDR. Used for testing only. +//#define WRITE_OLD_COLORS + +using namespace DirectX; + +#ifndef _WIN32 +#include + +#define strncpy_s strncpy +#define sscanf_s sscanf +#endif + +namespace +{ + const char g_Signature[] = "#?RADIANCE"; + // This is the official header signature for the .HDR (RGBE) file format. + + const char g_AltSignature[] = "#?RGBE"; + // This is a common variant header signature that is otherwise exactly the same format. + + const char g_Format[] = "FORMAT="; + const char g_Exposure[] = "EXPOSURE="; + + const char g_sRGBE[] = "32-bit_rle_rgbe"; + const char g_sXYZE[] = "32-bit_rle_xyze"; + + const char g_Header[] = + "#?RADIANCE\n"\ + "FORMAT=32-bit_rle_rgbe\n"\ + "\n"\ + "-Y %u +X %u\n"; + + inline size_t FindEOL(const char* str, size_t maxlen) noexcept + { + size_t pos = 0; + + while (pos < maxlen) + { + if (str[pos] == '\n') + return pos; + else if (str[pos] == '\0') + return size_t(-1); + ++pos; + } + + return 0; + } + +#ifndef _WIN32 + template + inline int sprintf_s(char(&buffer)[sizeOfBuffer], const char* format, ...) + { + // This is adapter code. It is not a full implementation of sprintf_s! + va_list ap; + va_start(ap, format); + int result = vsprintf(buffer, format, ap); + va_end(ap); + return result; + } +#endif + + //------------------------------------------------------------------------------------- + // Decodes HDR header + //------------------------------------------------------------------------------------- + HRESULT DecodeHDRHeader( + _In_reads_bytes_(size) const uint8_t* pSource, + size_t size, + _Out_ TexMetadata& metadata, + size_t& offset, + float& exposure) noexcept + { + if (!pSource) + return E_INVALIDARG; + + memset(&metadata, 0, sizeof(TexMetadata)); + + exposure = 1.f; + + if (size < sizeof(g_Signature)) + { + return HRESULT_E_INVALID_DATA; + } + + // Verify magic signature + if (memcmp(pSource, g_Signature, sizeof(g_Signature) - 1) != 0 + && memcmp(pSource, g_AltSignature, sizeof(g_AltSignature) - 1) != 0) + { + return E_FAIL; + } + + // Process first part of header + bool formatFound = false; + auto info = reinterpret_cast(pSource); + while (size > 0) + { + if (*info == '\n') + { + ++info; + --size; + break; + } + + constexpr size_t formatLen = sizeof(g_Format) - 1; + constexpr size_t exposureLen = sizeof(g_Exposure) - 1; + if ((size > formatLen) && memcmp(info, g_Format, formatLen) == 0) + { + info += formatLen; + size -= formatLen; + + // Trim whitespace + while (*info == ' ' || *info == '\t') + { + if (--size == 0) + return E_FAIL; + ++info; + } + + static_assert(sizeof(g_sRGBE) == sizeof(g_sXYZE), "Format strings length mismatch"); + + constexpr size_t encodingLen = sizeof(g_sRGBE) - 1; + + if (size < encodingLen) + { + return E_FAIL; + } + + if (memcmp(info, g_sRGBE, encodingLen) != 0 && memcmp(info, g_sXYZE, encodingLen) != 0) + { + return HRESULT_E_NOT_SUPPORTED; + } + + formatFound = true; + + const size_t len = FindEOL(info, size); + if (len == size_t(-1) + || len < 1) + { + return E_FAIL; + } + + info += len + 1; + size -= len + 1; + } + else if ((size > exposureLen) && memcmp(info, g_Exposure, exposureLen) == 0) + { + info += exposureLen; + size -= exposureLen; + + // Trim whitespace + while (*info == ' ' || *info == '\t') + { + if (--size == 0) + return E_FAIL; + ++info; + } + + const size_t len = FindEOL(info, size); + if (len == size_t(-1) + || len < 1) + { + return E_FAIL; + } + + char buff[32] = {}; + strncpy_s(buff, info, std::min(31, len)); + + auto newExposure = static_cast(atof(buff)); + if ((newExposure >= 1e-12f) && (newExposure <= 1e12f)) + { + // Note that we ignore strange exposure values (like EXPOSURE=0) + exposure *= newExposure; + } + + info += len + 1; + size -= len + 1; + } + else + { + const size_t len = FindEOL(info, size); + if (len == size_t(-1) + || len < 1) + { + return E_FAIL; + } + + info += len + 1; + size -= len + 1; + } + } + + if (!formatFound) + { + return E_FAIL; + } + + // Get orientation + char orientation[256] = {}; + + const size_t len = FindEOL(info, std::min(sizeof(orientation), size - 1)); + if (len == size_t(-1) + || len <= 2) + { + return E_FAIL; + } + + strncpy_s(orientation, info, len); + + if (orientation[0] != '-' && orientation[1] != 'Y') + { + // We only support the -Y +X orientation (see top of file) + return (static_cast(((orientation[0] == '+' || orientation[0] == '-') && (orientation[1] == 'X' || orientation[1] == 'Y')))) + ? HRESULT_E_NOT_SUPPORTED : HRESULT_E_INVALID_DATA; + } + + uint32_t height = 0; + if (sscanf_s(orientation + 2, "%u", &height) != 1) + { + return E_FAIL; + } + + if (height > UINT16_MAX) + { + return HRESULT_E_NOT_SUPPORTED; + } + + const char* ptr = orientation + 2; + while (*ptr != 0 && *ptr != '-' && *ptr != '+') + ++ptr; + + if (*ptr == 0) + { + return E_FAIL; + } + else if (*ptr != '+') + { + // We only support the -Y +X orientation (see top of file) + return HRESULT_E_NOT_SUPPORTED; + } + + ++ptr; + if (*ptr == 0 || (*ptr != 'X' && *ptr != 'Y')) + { + return E_FAIL; + } + else if (*ptr != 'X') + { + // We only support the -Y +X orientation (see top of file) + return HRESULT_E_NOT_SUPPORTED; + } + + ++ptr; + uint32_t width; + if (sscanf_s(ptr, "%u", &width) != 1) + { + return E_FAIL; + } + + if (width > UINT16_MAX) + { + return HRESULT_E_NOT_SUPPORTED; + } + + info += len + 1; + size -= len + 1; + + if (!width || !height) + { + return HRESULT_E_INVALID_DATA; + } + + uint64_t sizeBytes = uint64_t(width) * uint64_t(height) * sizeof(float) * 4; + if (sizeBytes > UINT32_MAX) + { + return HRESULT_E_ARITHMETIC_OVERFLOW; + } + + if (size == 0) + { + return E_FAIL; + } + + offset = size_t(info - reinterpret_cast(pSource)); + + metadata.width = width; + metadata.height = height; + metadata.depth = metadata.arraySize = metadata.mipLevels = 1; + metadata.format = DXGI_FORMAT_R32G32B32A32_FLOAT; + metadata.dimension = TEX_DIMENSION_TEXTURE2D; + metadata.SetAlphaMode(TEX_ALPHA_MODE_OPAQUE); + + return S_OK; + } + + //------------------------------------------------------------------------------------- + // FloatToRGBE + //------------------------------------------------------------------------------------- + inline void FloatToRGBE(_Out_writes_(width*4) uint8_t* pDestination, _In_reads_(width*fpp) const float* pSource, size_t width, _In_range_(3, 4) int fpp) noexcept + { + auto ePtr = pSource + width * size_t(fpp); + + for (size_t j = 0; j < width; ++j) + { + if (pSource + 2 >= ePtr) break; + const float r = pSource[0] >= 0.f ? pSource[0] : 0.f; + const float g = pSource[1] >= 0.f ? pSource[1] : 0.f; + const float b = pSource[2] >= 0.f ? pSource[2] : 0.f; + pSource += fpp; + + const float max_xy = (r > g) ? r : g; + float max_xyz = (max_xy > b) ? max_xy : b; + + if (max_xyz > 1e-32f) + { + int e; + max_xyz = frexpf(max_xyz, &e) * 256.f / max_xyz; + e += 128; + + const uint8_t red = uint8_t(r * max_xyz); + const uint8_t green = uint8_t(g * max_xyz); + const uint8_t blue = uint8_t(b * max_xyz); + + pDestination[0] = red; + pDestination[1] = green; + pDestination[2] = blue; + pDestination[3] = (red || green || blue) ? uint8_t(e & 0xff) : 0u; + } + else + { + pDestination[0] = pDestination[1] = pDestination[2] = pDestination[3] = 0; + } + + pDestination += 4; + } + } + + //------------------------------------------------------------------------------------- + // HalfToRGBE + //------------------------------------------------------------------------------------- + inline void HalfToRGBE(_Out_writes_(width * 4) uint8_t* pDestination, _In_reads_(width* fpp) const uint16_t* pSource, size_t width, _In_range_(3, 4) int fpp) noexcept + { + auto ePtr = pSource + width * size_t(fpp); + + for (size_t j = 0; j < width; ++j) + { + if (pSource + 2 >= ePtr) break; + float r = PackedVector::XMConvertHalfToFloat(pSource[0]); r = (r >= 0.f) ? r : 0.f; + float g = PackedVector::XMConvertHalfToFloat(pSource[1]); g = (g >= 0.f) ? g : 0.f; + float b = PackedVector::XMConvertHalfToFloat(pSource[2]); b = (b >= 0.f) ? b : 0.f; + pSource += fpp; + + const float max_xy = (r > g) ? r : g; + float max_xyz = (max_xy > b) ? max_xy : b; + + if (max_xyz > 1e-32f) + { + int e; + max_xyz = frexpf(max_xyz, &e) * 256.f / max_xyz; + e += 128; + + const uint8_t red = uint8_t(r * max_xyz); + const uint8_t green = uint8_t(g * max_xyz); + const uint8_t blue = uint8_t(b * max_xyz); + + pDestination[0] = red; + pDestination[1] = green; + pDestination[2] = blue; + pDestination[3] = (red || green || blue) ? uint8_t(e & 0xff) : 0u; + } + else + { + pDestination[0] = pDestination[1] = pDestination[2] = pDestination[3] = 0; + } + + pDestination += 4; + } + } + + //------------------------------------------------------------------------------------- + // Encode using Adapative RLE + //------------------------------------------------------------------------------------- + _Success_(return > 0) + size_t EncodeRLE(_Out_writes_(width * 4) uint8_t* enc, _In_reads_(width * 4) const uint8_t* rgbe, size_t rowPitch, size_t width) noexcept + { + if (width < 8 || width > INT16_MAX) + { + // Don't try to compress too narrow or too wide scan-lines + return 0; + } + + #ifdef WRITE_OLD_COLORS + size_t encSize = 0; + + const uint8_t* scanPtr = rgbe; + for (size_t pixelCount = 0; pixelCount < width;) + { + size_t spanLen = 1; + auto spanPtr = reinterpret_cast(scanPtr); + while (pixelCount + spanLen < width && spanLen < INT16_MAX) + { + if (spanPtr[spanLen] == *spanPtr) + { + ++spanLen; + } + else + break; + } + + if (spanLen > 2) + { + if (scanPtr[0] == 1 && scanPtr[1] == 1 && scanPtr[2] == 1) + { + return 0; + } + + if (encSize + 8 > rowPitch) + return 0; + + auto rleLen = static_cast(std::min(spanLen - 1, 255)); + + enc[0] = scanPtr[0]; + enc[1] = scanPtr[1]; + enc[2] = scanPtr[2]; + enc[3] = scanPtr[3]; + enc[4] = 1; + enc[5] = 1; + enc[6] = 1; + enc[7] = rleLen; + enc += 8; + encSize += 8; + + size_t remaining = spanLen - 1 - rleLen; + + if (remaining > 0) + { + rleLen = static_cast(remaining >> 8); + + if (rleLen > 0) + { + if (encSize + 4 > rowPitch) + return 0; + + enc[0] = 1; + enc[1] = 1; + enc[2] = 1; + enc[3] = rleLen; + enc += 4; + encSize += 4; + + remaining -= (rleLen << 8); + } + + while (remaining > 0) + { + if (encSize + 4 > rowPitch) + return 0; + + enc[0] = scanPtr[0]; + enc[1] = scanPtr[1]; + enc[2] = scanPtr[2]; + enc[3] = scanPtr[3]; + enc += 4; + encSize += 4; + + --remaining; + } + } + + scanPtr += spanLen * 4; + pixelCount += spanLen; + } + else if (scanPtr[0] == 1 && scanPtr[1] == 1 && scanPtr[2] == 1) + { + return 0; + } + else + { + if (encSize + 4 > rowPitch) + return 0; + + enc[0] = scanPtr[0]; + enc[1] = scanPtr[1]; + enc[2] = scanPtr[2]; + enc[3] = scanPtr[3]; + enc += 4; + encSize += 4; + ++pixelCount; + scanPtr += 4; + } + } + + return encSize; + #else + enc[0] = 2; + enc[1] = 2; + enc[2] = uint8_t(width >> 8); + enc[3] = uint8_t(width & 0xff); + enc += 4; + size_t encSize = 4; + + uint8_t scan[128] = {}; + + for (int channel = 0; channel < 4; ++channel) + { + const uint8_t* spanPtr = rgbe + channel; + for (size_t pixelCount = 0; pixelCount < width;) + { + uint8_t spanLen = 1; + while (pixelCount + spanLen < width && spanLen < 127) + { + if (spanPtr[spanLen * 4] == *spanPtr) + { + ++spanLen; + } + else + break; + } + + if (spanLen > 1) + { + if (encSize + 2 > rowPitch) + return 0; + + enc[0] = 128u + spanLen; + enc[1] = *spanPtr; + enc += 2; + encSize += 2; + spanPtr += size_t(spanLen) * 4; + pixelCount += spanLen; + } + else + { + uint8_t runLen = 1; + scan[0] = *spanPtr; + while (pixelCount + runLen < width && runLen < 127) + { + if (spanPtr[(runLen - 1) * 4] != spanPtr[runLen * 4]) + { + scan[runLen] = spanPtr[runLen * 4]; + runLen++; + } + else + break; + } + + if (encSize + runLen + 1 > rowPitch) + return 0; + + *enc++ = runLen; + memcpy(enc, scan, runLen); + enc += runLen; + encSize += size_t(runLen) + 1; + spanPtr += size_t(runLen) * 4; + pixelCount += runLen; + } + } + } + + return encSize; + #endif + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Obtain metadata from HDR file in memory/on disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromHDRMemory(const uint8_t* pSource, size_t size, TexMetadata& metadata) noexcept +{ + if (!pSource || size == 0) + return E_INVALIDARG; + + size_t offset; + float exposure; + return DecodeHDRHeader(pSource, size, metadata, offset, exposure); +} + +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromHDRFile(const wchar_t* szFile, TexMetadata& metadata) noexcept +{ + if (!szFile) + return E_INVALIDARG; + +#ifdef _WIN32 +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile(safe_handle(CreateFile2(szFile, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr))); +#else + ScopedHandle hFile(safe_handle(CreateFileW(szFile, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, nullptr))); +#endif + if (!hFile) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // Get the file size + FILE_STANDARD_INFO fileInfo; + if (!GetFileInformationByHandleEx(hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo))) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // File is too big for 32-bit allocation, so reject read (4 GB should be plenty large enough for a valid HDR file) + if (fileInfo.EndOfFile.HighPart > 0) + { + return HRESULT_E_FILE_TOO_LARGE; + } + + const size_t len = fileInfo.EndOfFile.LowPart; +#else // !WIN32 + std::ifstream inFile(std::filesystem::path(szFile), std::ios::in | std::ios::binary | std::ios::ate); + if (!inFile) + return E_FAIL; + + std::streampos fileLen = inFile.tellg(); + if (!inFile) + return E_FAIL; + + if (fileLen > UINT32_MAX) + return HRESULT_E_FILE_TOO_LARGE; + + inFile.seekg(0, std::ios::beg); + if (!inFile) + return E_FAIL; + + const size_t len = fileLen; +#endif + + // Need at least enough data to fill the standard header to be a valid HDR + if (len < sizeof(g_Signature)) + { + return E_FAIL; + } + + // Read the first part of the file to find the header + uint8_t header[8192] = {}; + +#ifdef _WIN32 + DWORD bytesRead = 0; + if (!ReadFile(hFile.get(), header, std::min(sizeof(header), fileInfo.EndOfFile.LowPart), &bytesRead, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + auto const headerLen = static_cast(bytesRead); +#else + auto const headerLen = std::min(sizeof(header), len); + + inFile.read(reinterpret_cast(header), headerLen); + if (!inFile) + return E_FAIL; +#endif + + size_t offset; + float exposure; + return DecodeHDRHeader(header, headerLen, metadata, offset, exposure); +} + + +//------------------------------------------------------------------------------------- +// Load a HDR file in memory +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::LoadFromHDRMemory(const uint8_t* pSource, size_t size, TexMetadata* metadata, ScratchImage& image) noexcept +{ + if (!pSource || size == 0) + return E_INVALIDARG; + + image.Release(); + + size_t offset; + float exposure; + TexMetadata mdata; + HRESULT hr = DecodeHDRHeader(pSource, size, mdata, offset, exposure); + if (FAILED(hr)) + return hr; + + if (offset > size) + return E_FAIL; + + const size_t remaining = size - offset; + if (remaining == 0) + return E_FAIL; + + hr = image.Initialize2D(mdata.format, mdata.width, mdata.height, 1, 1, CP_FLAGS_LIMIT_4GB); + if (FAILED(hr)) + return hr; + + // Copy pixels + auto sourcePtr = static_cast(pSource) + offset; + + size_t pixelLen = remaining; + + const Image* img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + auto destPtr = img->pixels; + +#ifdef _DEBUG + memset(img->pixels, 0xFF, img->rowPitch * img->height); +#endif + + for (size_t scan = 0; scan < mdata.height; ++scan) + { + if (pixelLen < 4) + { + image.Release(); + return E_FAIL; + } + + uint8_t inColor[4]; + memcpy(inColor, sourcePtr, 4); + sourcePtr += 4; + pixelLen -= 4; + + auto scanLine = reinterpret_cast(destPtr); + + if (inColor[0] == 2 && inColor[1] == 2 && inColor[2] < 128) + { + // Adaptive Run Length Encoding (RLE) + if (size_t((size_t(inColor[2]) << 8) + inColor[3]) != mdata.width) + { + image.Release(); + return E_FAIL; + } + + for (int channel = 0; channel < 4; ++channel) + { + auto pixelLoc = scanLine + channel; + for (size_t pixelCount = 0; pixelCount < mdata.width;) + { + if (pixelLen < 2) + { + image.Release(); + return E_FAIL; + } + + assert(sourcePtr < (reinterpret_cast(pSource) + size)); + + uint8_t runLen = *sourcePtr; + if (runLen > 128) + { + runLen &= 127; + if (pixelCount + runLen > mdata.width) + { + image.Release(); + return E_FAIL; + } + + auto val = static_cast(sourcePtr[1]); + for (uint8_t j = 0; j < runLen; ++j) + { + *pixelLoc = val; + pixelLoc += 4; + } + pixelCount += runLen; + sourcePtr += 2; + pixelLen -= 2; + } + else if ((size < size_t(runLen) + 1) || ((pixelCount + size_t(runLen)) > mdata.width)) + { + image.Release(); + return E_FAIL; + } + else + { + ++sourcePtr; + for (uint8_t j = 0; j < runLen; ++j) + { + auto val = static_cast(*sourcePtr++); + *pixelLoc = val; + pixelLoc += 4; + } + pixelCount += runLen; + pixelLen -= size_t(runLen) + 1; + } + } + } + } + else + { + auto pixelLoc = scanLine; + + float prevColor[4]; + prevColor[0] = inColor[0]; + prevColor[1] = inColor[1]; + prevColor[2] = inColor[2]; + prevColor[3] = inColor[3]; + + int bitShift = 0; + for (size_t pixelCount = 0; pixelCount < mdata.width;) + { + if (inColor[0] == 1 && inColor[1] == 1 && inColor[2] == 1) + { + if (bitShift > 24) + { + image.Release(); + return E_FAIL; + } + + // "Standard" Run Length Encoding + const size_t spanLen = size_t(inColor[3]) << bitShift; + if (spanLen + pixelCount > mdata.width) + { + image.Release(); + return E_FAIL; + } + + for (size_t j = 0; j < spanLen; ++j) + { + pixelLoc[0] = prevColor[0]; + pixelLoc[1] = prevColor[1]; + pixelLoc[2] = prevColor[2]; + pixelLoc[3] = prevColor[3]; + pixelLoc += 4; + } + pixelCount += spanLen; + bitShift += 8; + } + else + { + // Uncompressed + pixelLoc[0] = prevColor[0] = inColor[0]; + pixelLoc[1] = prevColor[1] = inColor[1]; + pixelLoc[2] = prevColor[2] = inColor[2]; + pixelLoc[3] = prevColor[3] = inColor[3]; + bitShift = 0; + ++pixelCount; + pixelLoc += 4; + } + + if (pixelCount >= mdata.width) + break; + + if (pixelLen < 4) + { + image.Release(); + return E_FAIL; + } + + memcpy(inColor, sourcePtr, 4); + sourcePtr += 4; + pixelLen -= 4; + } + } + + destPtr += img->rowPitch; + } + + // Transform values + { + auto fdata = reinterpret_cast(image.GetPixels()); + + for (size_t j = 0; j < image.GetPixelsSize(); j += 16) + { + auto const exponent = static_cast(fdata[3]); + fdata[0] = 1.0f / exposure*ldexpf((fdata[0] + 0.5f), exponent - (128 + 8)); + fdata[1] = 1.0f / exposure*ldexpf((fdata[1] + 0.5f), exponent - (128 + 8)); + fdata[2] = 1.0f / exposure*ldexpf((fdata[2] + 0.5f), exponent - (128 + 8)); + fdata[3] = 1.f; + + fdata += 4; + } + } + + if (metadata) + memcpy(metadata, &mdata, sizeof(TexMetadata)); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Load a HDR file from disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::LoadFromHDRFile(const wchar_t* szFile, TexMetadata* metadata, ScratchImage& image) noexcept +{ + if (!szFile) + return E_INVALIDARG; + + image.Release(); + +#ifdef _WIN32 +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile(safe_handle(CreateFile2(szFile, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr))); +#else + ScopedHandle hFile(safe_handle(CreateFileW(szFile, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, nullptr))); +#endif + if (!hFile) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // Get the file size + FILE_STANDARD_INFO fileInfo; + if (!GetFileInformationByHandleEx(hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo))) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // File is too big for 32-bit allocation, so reject read (4 GB should be plenty large enough for a valid HDR file) + if (fileInfo.EndOfFile.HighPart > 0) + { + return HRESULT_E_FILE_TOO_LARGE; + } + + const size_t len = fileInfo.EndOfFile.LowPart; +#else // !WIN32 + std::ifstream inFile(std::filesystem::path(szFile), std::ios::in | std::ios::binary | std::ios::ate); + if (!inFile) + return E_FAIL; + + std::streampos fileLen = inFile.tellg(); + if (!inFile) + return E_FAIL; + + if (fileLen > UINT32_MAX) + return HRESULT_E_FILE_TOO_LARGE; + + inFile.seekg(0, std::ios::beg); + if (!inFile) + return E_FAIL; + + const size_t len = fileLen; +#endif + + // Need at least enough data to fill the header to be a valid HDR + if (len < sizeof(g_Signature)) + { + return E_FAIL; + } + + // Read file + std::unique_ptr temp(new (std::nothrow) uint8_t[len]); + if (!temp) + { + return E_OUTOFMEMORY; + } + +#ifdef _WIN32 + DWORD bytesRead = 0; + if (!ReadFile(hFile.get(), temp.get(), fileInfo.EndOfFile.LowPart, &bytesRead, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesRead != fileInfo.EndOfFile.LowPart) + { + return E_FAIL; + } +#else + inFile.read(reinterpret_cast(temp.get()), len); + if (!inFile) + return E_FAIL; +#endif + + return LoadFromHDRMemory(temp.get(), len, metadata, image); +} + + +//------------------------------------------------------------------------------------- +// Save a HDR file to memory +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::SaveToHDRMemory(const Image& image, Blob& blob) noexcept +{ + if (!image.pixels) + return E_POINTER; + + if (image.width > INT16_MAX || image.height > INT16_MAX) + { + // Images larger than this can't be RLE encoded. They are technically allowed as + // uncompresssed, but we just don't support them. + return HRESULT_E_NOT_SUPPORTED; + } + + int fpp; + switch (image.format) + { + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + fpp = 4; + break; + case DXGI_FORMAT_R32G32B32_FLOAT: + fpp = 3; + break; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + + blob.Release(); + + char header[256] = {}; + sprintf_s(header, g_Header, image.height, image.width); + + auto headerLen = static_cast(strlen(header)); + + size_t rowPitch = image.width * 4; + const size_t slicePitch = image.height * rowPitch; + + HRESULT hr = blob.Initialize(headerLen + slicePitch); + if (FAILED(hr)) + return hr; + + // Copy header + auto dPtr = blob.GetBufferPointer(); + assert(dPtr != nullptr); + memcpy(dPtr, header, headerLen); + dPtr += headerLen; + +#ifdef DISABLE_COMPRESS + // Uncompressed write + auto sPtr = reinterpret_cast(image.pixels); + for (size_t scan = 0; scan < image.height; ++scan) + { + FloatToRGBE(dPtr, reinterpret_cast(sPtr), image.width, fpp); + dPtr += rowPitch; + sPtr += image.rowPitch; + } +#else + std::unique_ptr temp(new (std::nothrow) uint8_t[rowPitch * 2]); + if (!temp) + { + blob.Release(); + return E_OUTOFMEMORY; + } + + auto rgbe = temp.get(); + auto enc = temp.get() + rowPitch; + + const uint8_t* sPtr = image.pixels; + for (size_t scan = 0; scan < image.height; ++scan) + { + if (image.format == DXGI_FORMAT_R32G32B32A32_FLOAT || image.format == DXGI_FORMAT_R32G32B32_FLOAT) + { + FloatToRGBE(rgbe, reinterpret_cast(sPtr), image.width, fpp); + } + else if (image.format == DXGI_FORMAT_R16G16B16A16_FLOAT) + { + HalfToRGBE(rgbe, reinterpret_cast(sPtr), image.width, fpp); + } + sPtr += image.rowPitch; + + size_t encSize = EncodeRLE(enc, rgbe, rowPitch, image.width); + if (encSize > 0) + { + memcpy(dPtr, enc, encSize); + dPtr += encSize; + } + else + { + memcpy(dPtr, rgbe, rowPitch); + dPtr += rowPitch; + } + } +#endif + + hr = blob.Trim(size_t(dPtr - blob.GetConstBufferPointer())); + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Save a HDR file to disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::SaveToHDRFile(const Image& image, const wchar_t* szFile) noexcept +{ + if (!szFile) + return E_INVALIDARG; + + if (!image.pixels) + return E_POINTER; + + if (image.width > INT16_MAX || image.height > INT16_MAX) + { + // Images larger than this can't be RLE encoded. They are technically allowed as + // uncompresssed, but we just don't support them. + return HRESULT_E_NOT_SUPPORTED; + } + + int fpp; + switch (image.format) + { + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + fpp = 4; + break; + case DXGI_FORMAT_R32G32B32_FLOAT: + fpp = 3; + break; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + + // Create file and write header +#ifdef _WIN32 +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile(safe_handle(CreateFile2(szFile, + GENERIC_WRITE, 0, CREATE_ALWAYS, nullptr))); +#else + ScopedHandle hFile(safe_handle(CreateFileW(szFile, + GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr))); +#endif + if (!hFile) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + auto_delete_file delonfail(hFile.get()); +#else // !WIN32 + std::ofstream outFile(std::filesystem::path(szFile), std::ios::out | std::ios::binary | std::ios::trunc); + if (!outFile) + return E_FAIL; +#endif + + const uint64_t pitch = uint64_t(image.width) * 4u; + const uint64_t slicePitch = uint64_t(image.height) * pitch; + + if (pitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + size_t rowPitch = static_cast(pitch); + + if (slicePitch < 65535) + { + // For small images, it is better to create an in-memory file and write it out + Blob blob; + + HRESULT hr = SaveToHDRMemory(image, blob); + if (FAILED(hr)) + return hr; + + // Write blob + #ifdef _WIN32 + auto const bytesToWrite = static_cast(blob.GetBufferSize()); + DWORD bytesWritten; + if (!WriteFile(hFile.get(), blob.GetConstBufferPointer(), bytesToWrite, &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != bytesToWrite) + { + return E_FAIL; + } + #else + outFile.write(reinterpret_cast(blob.GetConstBufferPointer()), + static_cast(blob.GetBufferSize())); + + if (!outFile) + return E_FAIL; + #endif + } + else + { + // Otherwise, write the image one scanline at a time... + std::unique_ptr temp(new (std::nothrow) uint8_t[rowPitch * 2]); + if (!temp) + return E_OUTOFMEMORY; + + auto rgbe = temp.get(); + + // Write header + char header[256] = {}; + sprintf_s(header, g_Header, image.height, image.width); + + #ifdef _WIN32 + auto const headerLen = static_cast(strlen(header)); + + DWORD bytesWritten; + if (!WriteFile(hFile.get(), header, headerLen, &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != headerLen) + return E_FAIL; + #else + outFile.write(reinterpret_cast(header), static_cast(strlen(header))); + if (!outFile) + return E_FAIL; + #endif + + #ifdef DISABLE_COMPRESS + // Uncompressed write + auto sPtr = reinterpret_cast(image.pixels); + for (size_t scan = 0; scan < image.height; ++scan) + { + FloatToRGBE(rgbe, reinterpret_cast(sPtr), image.width, fpp); + sPtr += image.rowPitch; + + #ifdef _WIN32 + if (!WriteFile(hFile.get(), rgbe, static_cast(rowPitch), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != rowPitch) + return E_FAIL; + #else + outFile.write(reinterpret_cast(rgbe), static_cast(rowPitch)); + if (!outFile) + return E_FAIL; + #endif + + } + #else + auto enc = temp.get() + rowPitch; + + const uint8_t* sPtr = image.pixels; + for (size_t scan = 0; scan < image.height; ++scan) + { + if (image.format == DXGI_FORMAT_R32G32B32A32_FLOAT || image.format == DXGI_FORMAT_R32G32B32_FLOAT) + { + FloatToRGBE(rgbe, reinterpret_cast(sPtr), image.width, fpp); + } + else if (image.format == DXGI_FORMAT_R16G16B16A16_FLOAT) + { + HalfToRGBE(rgbe, reinterpret_cast(sPtr), image.width, fpp); + } + sPtr += image.rowPitch; + + const size_t encSize = EncodeRLE(enc, rgbe, rowPitch, image.width); + if (encSize > 0) + { + if (encSize > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + #ifdef _WIN32 + if (!WriteFile(hFile.get(), enc, static_cast(encSize), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != encSize) + return E_FAIL; + #else + outFile.write(reinterpret_cast(enc), static_cast(encSize)); + if (!outFile) + return E_FAIL; + #endif + } + else + { + #ifdef _WIN32 + if (!WriteFile(hFile.get(), rgbe, static_cast(rowPitch), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != rowPitch) + return E_FAIL; + #else + outFile.write(reinterpret_cast(rgbe), static_cast(rowPitch)); + if (!outFile) + return E_FAIL; + #endif + } + } + #endif + } + +#ifdef _WIN32 + delonfail.clear(); +#endif + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Adapters for /Zc:wchar_t- clients + +#if defined(_MSC_VER) && !defined(_NATIVE_WCHAR_T_DEFINED) + +namespace DirectX +{ + HRESULT __cdecl GetMetadataFromHDRFile( + _In_z_ const __wchar_t* szFile, + _Out_ TexMetadata& metadata) noexcept + { + return GetMetadataFromHDRFile(reinterpret_cast(szFile), metadata); + } + + HRESULT __cdecl LoadFromHDRFile( + _In_z_ const __wchar_t* szFile, + _Out_opt_ TexMetadata* metadata, + _Out_ ScratchImage& image) noexcept + { + return LoadFromHDRFile(reinterpret_cast(szFile), metadata, image); + } + + HRESULT __cdecl SaveToHDRFile( + _In_ const Image& image, + _In_z_ const __wchar_t* szFile) noexcept + { + return SaveToHDRFile(image, reinterpret_cast(szFile)); + } +} + +#endif // !_NATIVE_WCHAR_T_DEFINED diff --git a/external/DirectXTex/DirectXTexImage.cpp b/external/DirectXTex/DirectXTexImage.cpp new file mode 100644 index 00000000..d2c7d408 --- /dev/null +++ b/external/DirectXTex/DirectXTexImage.cpp @@ -0,0 +1,852 @@ +//------------------------------------------------------------------------------------- +// DirectXTexImage.cpp +// +// DirectX Texture Library - Image container +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +using namespace DirectX; +using namespace DirectX::Internal; + +#ifndef _WIN32 +namespace +{ + inline void * _aligned_malloc(size_t size, size_t alignment) + { + size = (size + alignment - 1) & ~(alignment - 1); + return std::aligned_alloc(alignment, size); + } + +#define _aligned_free free +} +#endif + +//------------------------------------------------------------------------------------- +// Determines number of image array entries and pixel size +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Internal::DetermineImageArray( + const TexMetadata& metadata, + CP_FLAGS cpFlags, + size_t& nImages, + size_t& pixelSize) noexcept +{ + assert(metadata.width > 0 && metadata.height > 0 && metadata.depth > 0); + assert(metadata.arraySize > 0); + assert(metadata.mipLevels > 0); + + uint64_t totalPixelSize = 0; + size_t nimages = 0; + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + for (size_t item = 0; item < metadata.arraySize; ++item) + { + size_t w = metadata.width; + size_t h = metadata.height; + + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + size_t rowPitch, slicePitch; + HRESULT hr = ComputePitch(metadata.format, w, h, rowPitch, slicePitch, cpFlags); + if (FAILED(hr)) + { + nImages = pixelSize = 0; + return hr; + } + + totalPixelSize += uint64_t(slicePitch); + ++nimages; + + if (h > 1) + h >>= 1; + + if (w > 1) + w >>= 1; + } + } + break; + + case TEX_DIMENSION_TEXTURE3D: + { + size_t w = metadata.width; + size_t h = metadata.height; + size_t d = metadata.depth; + + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + size_t rowPitch, slicePitch; + HRESULT hr = ComputePitch(metadata.format, w, h, rowPitch, slicePitch, cpFlags); + if (FAILED(hr)) + { + nImages = pixelSize = 0; + return hr; + } + + for (size_t slice = 0; slice < d; ++slice) + { + totalPixelSize += uint64_t(slicePitch); + ++nimages; + } + + if (h > 1) + h >>= 1; + + if (w > 1) + w >>= 1; + + if (d > 1) + d >>= 1; + } + } + break; + + default: + nImages = pixelSize = 0; + return E_INVALIDARG; + } + +#if defined(_M_IX86) || defined(_M_ARM) || defined(_M_HYBRID_X86_ARM64) + static_assert(sizeof(size_t) == 4, "Not a 32-bit platform!"); + if (totalPixelSize > UINT32_MAX) + { + nImages = pixelSize = 0; + return HRESULT_E_ARITHMETIC_OVERFLOW; + } +#else + static_assert(sizeof(size_t) == 8, "Not a 64-bit platform!"); + + if ((cpFlags & CP_FLAGS_LIMIT_4GB) && (totalPixelSize > UINT32_MAX)) + { + nImages = pixelSize = 0; + return HRESULT_E_ARITHMETIC_OVERFLOW; + } +#endif + + nImages = nimages; + pixelSize = static_cast(totalPixelSize); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Fills in the image array entries +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::Internal::SetupImageArray( + uint8_t *pMemory, + size_t pixelSize, + const TexMetadata& metadata, + CP_FLAGS cpFlags, + Image* images, + size_t nImages) noexcept +{ + assert(pMemory); + assert(pixelSize > 0); + assert(nImages > 0); + + if (!images) + return false; + + size_t index = 0; + uint8_t* pixels = pMemory; + const uint8_t* pEndBits = pMemory + pixelSize; + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + if (metadata.arraySize == 0 || metadata.mipLevels == 0) + { + return false; + } + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + size_t w = metadata.width; + size_t h = metadata.height; + + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + if (index >= nImages) + { + return false; + } + + size_t rowPitch, slicePitch; + if (FAILED(ComputePitch(metadata.format, w, h, rowPitch, slicePitch, cpFlags))) + return false; + + images[index].width = w; + images[index].height = h; + images[index].format = metadata.format; + images[index].rowPitch = rowPitch; + images[index].slicePitch = slicePitch; + images[index].pixels = pixels; + ++index; + + pixels += slicePitch; + if (pixels > pEndBits) + { + return false; + } + + if (h > 1) + h >>= 1; + + if (w > 1) + w >>= 1; + } + } + return true; + + case TEX_DIMENSION_TEXTURE3D: + { + if (metadata.mipLevels == 0 || metadata.depth == 0) + { + return false; + } + + size_t w = metadata.width; + size_t h = metadata.height; + size_t d = metadata.depth; + + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + size_t rowPitch, slicePitch; + if (FAILED(ComputePitch(metadata.format, w, h, rowPitch, slicePitch, cpFlags))) + return false; + + for (size_t slice = 0; slice < d; ++slice) + { + if (index >= nImages) + { + return false; + } + + // We use the same memory organization that Direct3D 11 needs for D3D11_SUBRESOURCE_DATA + // with all slices of a given miplevel being continuous in memory + images[index].width = w; + images[index].height = h; + images[index].format = metadata.format; + images[index].rowPitch = rowPitch; + images[index].slicePitch = slicePitch; + images[index].pixels = pixels; + ++index; + + pixels += slicePitch; + if (pixels > pEndBits) + { + return false; + } + } + + if (h > 1) + h >>= 1; + + if (w > 1) + w >>= 1; + + if (d > 1) + d >>= 1; + } + } + return true; + + default: + return false; + } +} + + +//===================================================================================== +// ScratchImage - Bitmap image container +//===================================================================================== + +ScratchImage& ScratchImage::operator= (ScratchImage&& moveFrom) noexcept +{ + if (this != &moveFrom) + { + Release(); + + m_nimages = moveFrom.m_nimages; + m_size = moveFrom.m_size; + m_metadata = moveFrom.m_metadata; + m_image = moveFrom.m_image; + m_memory = moveFrom.m_memory; + + moveFrom.m_nimages = 0; + moveFrom.m_size = 0; + moveFrom.m_image = nullptr; + moveFrom.m_memory = nullptr; + } + return *this; +} + + +//------------------------------------------------------------------------------------- +// Methods +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT ScratchImage::Initialize(const TexMetadata& mdata, CP_FLAGS flags) noexcept +{ + if (!IsValid(mdata.format)) + return E_INVALIDARG; + + if (IsPalettized(mdata.format)) + return HRESULT_E_NOT_SUPPORTED; + + size_t mipLevels = mdata.mipLevels; + + switch (mdata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + if (!mdata.width || mdata.height != 1 || mdata.depth != 1 || !mdata.arraySize) + return E_INVALIDARG; + + if (!CalculateMipLevels(mdata.width, 1, mipLevels)) + return E_INVALIDARG; + break; + + case TEX_DIMENSION_TEXTURE2D: + if (!mdata.width || !mdata.height || mdata.depth != 1 || !mdata.arraySize) + return E_INVALIDARG; + + if (mdata.IsCubemap()) + { + if ((mdata.arraySize % 6) != 0) + return E_INVALIDARG; + } + + if (!CalculateMipLevels(mdata.width, mdata.height, mipLevels)) + return E_INVALIDARG; + break; + + case TEX_DIMENSION_TEXTURE3D: + if (!mdata.width || !mdata.height || !mdata.depth || mdata.arraySize != 1) + return E_INVALIDARG; + + if (!CalculateMipLevels3D(mdata.width, mdata.height, mdata.depth, mipLevels)) + return E_INVALIDARG; + break; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + + Release(); + + m_metadata.width = mdata.width; + m_metadata.height = mdata.height; + m_metadata.depth = mdata.depth; + m_metadata.arraySize = mdata.arraySize; + m_metadata.mipLevels = mipLevels; + m_metadata.miscFlags = mdata.miscFlags; + m_metadata.miscFlags2 = mdata.miscFlags2; + m_metadata.format = mdata.format; + m_metadata.dimension = mdata.dimension; + + size_t pixelSize, nimages; + HRESULT hr = DetermineImageArray(m_metadata, flags, nimages, pixelSize); + if (FAILED(hr)) + return hr; + + m_image = new (std::nothrow) Image[nimages]; + if (!m_image) + return E_OUTOFMEMORY; + + m_nimages = nimages; + memset(m_image, 0, sizeof(Image) * nimages); + + m_memory = static_cast(_aligned_malloc(pixelSize, 16)); + if (!m_memory) + { + Release(); + return E_OUTOFMEMORY; + } + memset(m_memory, 0, pixelSize); + m_size = pixelSize; + + if (!SetupImageArray(m_memory, pixelSize, m_metadata, flags, m_image, nimages)) + { + Release(); + return E_FAIL; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT ScratchImage::Initialize1D(DXGI_FORMAT fmt, size_t length, size_t arraySize, size_t mipLevels, CP_FLAGS flags) noexcept +{ + if (!length || !arraySize) + return E_INVALIDARG; + + // 1D is a special case of the 2D case + HRESULT hr = Initialize2D(fmt, length, 1, arraySize, mipLevels, flags); + if (FAILED(hr)) + return hr; + + m_metadata.dimension = TEX_DIMENSION_TEXTURE1D; + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT ScratchImage::Initialize2D(DXGI_FORMAT fmt, size_t width, size_t height, size_t arraySize, size_t mipLevels, CP_FLAGS flags) noexcept +{ + if (!IsValid(fmt) || !width || !height || !arraySize) + return E_INVALIDARG; + + if (IsPalettized(fmt)) + return HRESULT_E_NOT_SUPPORTED; + + if (!CalculateMipLevels(width, height, mipLevels)) + return E_INVALIDARG; + + Release(); + + m_metadata.width = width; + m_metadata.height = height; + m_metadata.depth = 1; + m_metadata.arraySize = arraySize; + m_metadata.mipLevels = mipLevels; + m_metadata.miscFlags = 0; + m_metadata.miscFlags2 = 0; + m_metadata.format = fmt; + m_metadata.dimension = TEX_DIMENSION_TEXTURE2D; + + size_t pixelSize, nimages; + HRESULT hr = DetermineImageArray(m_metadata, flags, nimages, pixelSize); + if (FAILED(hr)) + return hr; + + m_image = new (std::nothrow) Image[nimages]; + if (!m_image) + return E_OUTOFMEMORY; + + m_nimages = nimages; + memset(m_image, 0, sizeof(Image) * nimages); + + m_memory = static_cast(_aligned_malloc(pixelSize, 16)); + if (!m_memory) + { + Release(); + return E_OUTOFMEMORY; + } + memset(m_memory, 0, pixelSize); + m_size = pixelSize; + + if (!SetupImageArray(m_memory, pixelSize, m_metadata, flags, m_image, nimages)) + { + Release(); + return E_FAIL; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT ScratchImage::Initialize3D(DXGI_FORMAT fmt, size_t width, size_t height, size_t depth, size_t mipLevels, CP_FLAGS flags) noexcept +{ + if (!IsValid(fmt) || !width || !height || !depth) + return E_INVALIDARG; + + if (depth > INT16_MAX) + return E_INVALIDARG; + + if (IsPalettized(fmt)) + return HRESULT_E_NOT_SUPPORTED; + + if (!CalculateMipLevels3D(width, height, depth, mipLevels)) + return E_INVALIDARG; + + Release(); + + m_metadata.width = width; + m_metadata.height = height; + m_metadata.depth = depth; + m_metadata.arraySize = 1; // Direct3D 10.x/11 does not support arrays of 3D textures + m_metadata.mipLevels = mipLevels; + m_metadata.miscFlags = 0; + m_metadata.miscFlags2 = 0; + m_metadata.format = fmt; + m_metadata.dimension = TEX_DIMENSION_TEXTURE3D; + + size_t pixelSize, nimages; + HRESULT hr = DetermineImageArray(m_metadata, flags, nimages, pixelSize); + if (FAILED(hr)) + return hr; + + m_image = new (std::nothrow) Image[nimages]; + if (!m_image) + { + Release(); + return E_OUTOFMEMORY; + } + m_nimages = nimages; + memset(m_image, 0, sizeof(Image) * nimages); + + m_memory = static_cast(_aligned_malloc(pixelSize, 16)); + if (!m_memory) + { + Release(); + return E_OUTOFMEMORY; + } + memset(m_memory, 0, pixelSize); + m_size = pixelSize; + + if (!SetupImageArray(m_memory, pixelSize, m_metadata, flags, m_image, nimages)) + { + Release(); + return E_FAIL; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT ScratchImage::InitializeCube(DXGI_FORMAT fmt, size_t width, size_t height, size_t nCubes, size_t mipLevels, CP_FLAGS flags) noexcept +{ + if (!width || !height || !nCubes) + return E_INVALIDARG; + + // A DirectX11 cubemap is just a 2D texture array that is a multiple of 6 for each cube + HRESULT hr = Initialize2D(fmt, width, height, nCubes * 6, mipLevels, flags); + if (FAILED(hr)) + return hr; + + m_metadata.miscFlags |= TEX_MISC_TEXTURECUBE; + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT ScratchImage::InitializeFromImage(const Image& srcImage, bool allow1D, CP_FLAGS flags) noexcept +{ + HRESULT hr = (srcImage.height > 1 || !allow1D) + ? Initialize2D(srcImage.format, srcImage.width, srcImage.height, 1, 1, flags) + : Initialize1D(srcImage.format, srcImage.width, 1, 1, flags); + + if (FAILED(hr)) + return hr; + + const size_t rowCount = ComputeScanlines(srcImage.format, srcImage.height); + if (!rowCount) + return E_UNEXPECTED; + + const uint8_t* sptr = srcImage.pixels; + if (!sptr) + return E_POINTER; + + uint8_t* dptr = m_image[0].pixels; + if (!dptr) + return E_POINTER; + + const size_t spitch = srcImage.rowPitch; + const size_t dpitch = m_image[0].rowPitch; + + const size_t size = std::min(dpitch, spitch); + + for (size_t y = 0; y < rowCount; ++y) + { + memcpy(dptr, sptr, size); + sptr += spitch; + dptr += dpitch; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT ScratchImage::InitializeArrayFromImages(const Image* images, size_t nImages, bool allow1D, CP_FLAGS flags) noexcept +{ + if (!images || !nImages) + return E_INVALIDARG; + + const DXGI_FORMAT format = images[0].format; + const size_t width = images[0].width; + const size_t height = images[0].height; + + for (size_t index = 0; index < nImages; ++index) + { + if (!images[index].pixels) + return E_POINTER; + + if (images[index].format != format || images[index].width != width || images[index].height != height) + { + // All images must be the same format, width, and height + return E_FAIL; + } + } + + HRESULT hr = (height > 1 || !allow1D) + ? Initialize2D(format, width, height, nImages, 1, flags) + : Initialize1D(format, width, nImages, 1, flags); + + if (FAILED(hr)) + return hr; + + const size_t rowCount = ComputeScanlines(format, height); + if (!rowCount) + return E_UNEXPECTED; + + for (size_t index = 0; index < nImages; ++index) + { + const uint8_t* sptr = images[index].pixels; + if (!sptr) + return E_POINTER; + + assert(index < m_nimages); + uint8_t* dptr = m_image[index].pixels; + if (!dptr) + return E_POINTER; + + const size_t spitch = images[index].rowPitch; + const size_t dpitch = m_image[index].rowPitch; + + const size_t size = std::min(dpitch, spitch); + + for (size_t y = 0; y < rowCount; ++y) + { + memcpy(dptr, sptr, size); + sptr += spitch; + dptr += dpitch; + } + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT ScratchImage::InitializeCubeFromImages(const Image* images, size_t nImages, CP_FLAGS flags) noexcept +{ + if (!images || !nImages) + return E_INVALIDARG; + + // A DirectX11 cubemap is just a 2D texture array that is a multiple of 6 for each cube + if ((nImages % 6) != 0) + return E_INVALIDARG; + + HRESULT hr = InitializeArrayFromImages(images, nImages, false, flags); + if (FAILED(hr)) + return hr; + + m_metadata.miscFlags |= TEX_MISC_TEXTURECUBE; + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT ScratchImage::Initialize3DFromImages(const Image* images, size_t depth, CP_FLAGS flags) noexcept +{ + if (!images || !depth) + return E_INVALIDARG; + + if (depth > INT16_MAX) + return E_INVALIDARG; + + const DXGI_FORMAT format = images[0].format; + const size_t width = images[0].width; + const size_t height = images[0].height; + + for (size_t slice = 0; slice < depth; ++slice) + { + if (!images[slice].pixels) + return E_POINTER; + + if (images[slice].format != format || images[slice].width != width || images[slice].height != height) + { + // All images must be the same format, width, and height + return E_FAIL; + } + } + + HRESULT hr = Initialize3D(format, width, height, depth, 1, flags); + if (FAILED(hr)) + return hr; + + const size_t rowCount = ComputeScanlines(format, height); + if (!rowCount) + return E_UNEXPECTED; + + for (size_t slice = 0; slice < depth; ++slice) + { + const uint8_t* sptr = images[slice].pixels; + if (!sptr) + return E_POINTER; + + assert(slice < m_nimages); + uint8_t* dptr = m_image[slice].pixels; + if (!dptr) + return E_POINTER; + + const size_t spitch = images[slice].rowPitch; + const size_t dpitch = m_image[slice].rowPitch; + + const size_t size = std::min(dpitch, spitch); + + for (size_t y = 0; y < rowCount; ++y) + { + memcpy(dptr, sptr, size); + sptr += spitch; + dptr += dpitch; + } + } + + return S_OK; +} + +void ScratchImage::Release() noexcept +{ + m_nimages = 0; + m_size = 0; + + if (m_image) + { + delete[] m_image; + m_image = nullptr; + } + + if (m_memory) + { + _aligned_free(m_memory); + m_memory = nullptr; + } + + memset(&m_metadata, 0, sizeof(m_metadata)); +} + +_Use_decl_annotations_ +bool ScratchImage::OverrideFormat(DXGI_FORMAT f) noexcept +{ + if (!m_image) + return false; + + if (!IsValid(f) || IsPlanar(f) || IsPalettized(f)) + return false; + + for (size_t index = 0; index < m_nimages; ++index) + { + m_image[index].format = f; + } + + m_metadata.format = f; + + return true; +} + +_Use_decl_annotations_ +const Image* ScratchImage::GetImage(size_t mip, size_t item, size_t slice) const noexcept +{ + if (mip >= m_metadata.mipLevels) + return nullptr; + + size_t index = 0; + + switch (m_metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + if (slice > 0) + return nullptr; + + if (item >= m_metadata.arraySize) + return nullptr; + + index = item*(m_metadata.mipLevels) + mip; + break; + + case TEX_DIMENSION_TEXTURE3D: + if (item > 0) + { + // No support for arrays of volumes + return nullptr; + } + else + { + size_t d = m_metadata.depth; + + for (size_t level = 0; level < mip; ++level) + { + index += d; + if (d > 1) + d >>= 1; + } + + if (slice >= d) + return nullptr; + + index += slice; + } + break; + + default: + return nullptr; + } + + return &m_image[index]; +} + +bool ScratchImage::IsAlphaAllOpaque() const noexcept +{ + if (!m_image) + return false; + + if (!HasAlpha(m_metadata.format)) + return true; + + if (IsCompressed(m_metadata.format)) + { + for (size_t index = 0; index < m_nimages; ++index) + { + if (!IsAlphaAllOpaqueBC(m_image[index])) + return false; + } + } + else + { + auto scanline = make_AlignedArrayXMVECTOR(m_metadata.width); + if (!scanline) + return false; + + static const XMVECTORF32 threshold = { { { 0.997f, 0.997f, 0.997f, 0.997f } } }; + + for (size_t index = 0; index < m_nimages; ++index) + { + #pragma warning( suppress : 6011 ) + const Image& img = m_image[index]; + + const uint8_t *pPixels = img.pixels; + assert(pPixels); + + for (size_t h = 0; h < img.height; ++h) + { + if (!LoadScanline(scanline.get(), img.width, pPixels, img.rowPitch, img.format)) + return false; + + const XMVECTOR* ptr = scanline.get(); + for (size_t w = 0; w < img.width; ++w) + { + const XMVECTOR alpha = XMVectorSplatW(*ptr); + if (XMVector4Less(alpha, threshold)) + return false; + ++ptr; + } + + pPixels += img.rowPitch; + } + } + } + + return true; +} diff --git a/external/DirectXTex/DirectXTexMipmaps.cpp b/external/DirectXTex/DirectXTexMipmaps.cpp new file mode 100644 index 00000000..38cd03d8 --- /dev/null +++ b/external/DirectXTex/DirectXTexMipmaps.cpp @@ -0,0 +1,3556 @@ +//------------------------------------------------------------------------------------- +// DirectXTexMipMaps.cpp +// +// DirectX Texture Library - Mip-map generation +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#include "filters.h" + +using namespace DirectX; +using namespace DirectX::Internal; +using Microsoft::WRL::ComPtr; + +namespace +{ + constexpr bool ispow2(_In_ size_t x) noexcept + { + return ((x != 0) && !(x & (x - 1))); + } + + + size_t CountMips(_In_ size_t width, _In_ size_t height) noexcept + { + size_t mipLevels = 1; + + while (height > 1 || width > 1) + { + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + + ++mipLevels; + } + + return mipLevels; + } + + + size_t CountMips3D(_In_ size_t width, _In_ size_t height, _In_ size_t depth) noexcept + { + size_t mipLevels = 1; + + while (height > 1 || width > 1 || depth > 1) + { + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + + if (depth > 1) + depth >>= 1; + + ++mipLevels; + } + + return mipLevels; + } + +#ifdef _WIN32 + HRESULT EnsureWicBitmapPixelFormat( + _In_ IWICImagingFactory* pWIC, + _In_ IWICBitmap* src, + _In_ TEX_FILTER_FLAGS filter, + _In_ const WICPixelFormatGUID& desiredPixelFormat, + __RPC__deref_out_opt /* needed to match WIC annotation */ IWICBitmap** dest) noexcept + { + if (!dest) + return E_POINTER; + + *dest = nullptr; + + if (!pWIC || !src) + return E_POINTER; + + WICPixelFormatGUID actualPixelFormat; + HRESULT hr = src->GetPixelFormat(&actualPixelFormat); + + if (SUCCEEDED(hr)) + { + if (memcmp(&actualPixelFormat, &desiredPixelFormat, sizeof(WICPixelFormatGUID)) == 0) + { + src->AddRef(); + *dest = src; + } + else + { + ComPtr converter; + hr = pWIC->CreateFormatConverter(converter.GetAddressOf()); + + if (SUCCEEDED(hr)) + { + BOOL canConvert = FALSE; + hr = converter->CanConvert(actualPixelFormat, desiredPixelFormat, &canConvert); + if (FAILED(hr) || !canConvert) + { + return E_UNEXPECTED; + } + } + + if (SUCCEEDED(hr)) + { + hr = converter->Initialize(src, desiredPixelFormat, GetWICDither(filter), nullptr, + 0, WICBitmapPaletteTypeMedianCut); + } + + if (SUCCEEDED(hr)) + { + hr = pWIC->CreateBitmapFromSource(converter.Get(), WICBitmapCacheOnDemand, dest); + } + } + } + + return hr; + } +#endif // WIN32 + + +#if DIRECTX_MATH_VERSION >= 310 +#define VectorSum XMVectorSum +#else + inline XMVECTOR XM_CALLCONV VectorSum + ( + FXMVECTOR V + ) + { + XMVECTOR vTemp = XMVectorSwizzle<2, 3, 0, 1>(V); + XMVECTOR vTemp2 = XMVectorAdd(V, vTemp); + vTemp = XMVectorSwizzle<1, 0, 3, 2>(vTemp2); + return XMVectorAdd(vTemp, vTemp2); + } +#endif + + + HRESULT ScaleAlpha( + const Image& srcImage, + float alphaScale, + const Image& destImage) noexcept + { + assert(srcImage.width == destImage.width); + assert(srcImage.height == destImage.height); + + auto scanline = make_AlignedArrayXMVECTOR(srcImage.width); + if (!scanline) + { + return E_OUTOFMEMORY; + } + + const uint8_t* pSrc = srcImage.pixels; + uint8_t* pDest = destImage.pixels; + if (!pSrc || !pDest) + { + return E_POINTER; + } + + const XMVECTOR vscale = XMVectorReplicate(alphaScale); + + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanline(scanline.get(), srcImage.width, pSrc, srcImage.rowPitch, srcImage.format)) + { + return E_FAIL; + } + + XMVECTOR* ptr = scanline.get(); + for (size_t w = 0; w < srcImage.width; ++w) + { + const XMVECTOR v = *ptr; + const XMVECTOR alpha = XMVectorMultiply(XMVectorSplatW(v), vscale); + *(ptr++) = XMVectorSelect(alpha, v, g_XMSelect1110); + } + + if (!StoreScanline(pDest, destImage.rowPitch, destImage.format, scanline.get(), srcImage.width)) + { + return E_FAIL; + } + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + + return S_OK; + } + + + void GenerateAlphaCoverageConvolutionVectors( + _In_ size_t N, + _Out_writes_(N*N) XMVECTOR* vectors) noexcept + { + for (size_t sy = 0; sy < N; ++sy) + { + const float fy = (float(sy) + 0.5f) / float(N); + const float ify = 1.0f - fy; + + for (size_t sx = 0; sx < N; ++sx) + { + const float fx = (float(sx) + 0.5f) / float(N); + const float ifx = 1.0f - fx; + + // [0]=(x+0, y+0), [1]=(x+0, y+1), [2]=(x+1, y+0), [3]=(x+1, y+1) + vectors[sy * N + sx] = XMVectorSet(ifx * ify, ifx * fy, fx * ify, fx * fy); + } + } + } + + + HRESULT CalculateAlphaCoverage( + const Image& srcImage, + float alphaReference, + float alphaScale, + float& coverage) noexcept + { + coverage = 0.0f; + + auto row0 = make_AlignedArrayXMVECTOR(srcImage.width); + if (!row0) + { + return E_OUTOFMEMORY; + } + + auto row1 = make_AlignedArrayXMVECTOR(srcImage.width); + if (!row1) + { + return E_OUTOFMEMORY; + } + + const XMVECTOR scale = XMVectorReplicate(alphaScale); + + const uint8_t *pSrcRow0 = srcImage.pixels; + if (!pSrcRow0) + { + return E_POINTER; + } + + constexpr size_t N = 8; + XMVECTOR convolution[N * N]; + GenerateAlphaCoverageConvolutionVectors(N, convolution); + + size_t coverageCount = 0; + for (size_t y = 0; y < srcImage.height - 1; ++y) + { + if (!LoadScanlineLinear(row0.get(), srcImage.width, pSrcRow0, srcImage.rowPitch, srcImage.format, TEX_FILTER_DEFAULT)) + { + return E_FAIL; + } + + const uint8_t *pSrcRow1 = pSrcRow0 + srcImage.rowPitch; + if (!LoadScanlineLinear(row1.get(), srcImage.width, pSrcRow1, srcImage.rowPitch, srcImage.format, TEX_FILTER_DEFAULT)) + { + return E_FAIL; + } + + const XMVECTOR* pRow0 = row0.get(); + const XMVECTOR* pRow1 = row1.get(); + for (size_t x = 0; x < srcImage.width - 1; ++x) + { + // [0]=(x+0, y+0), [1]=(x+0, y+1), [2]=(x+1, y+0), [3]=(x+1, y+1) + XMVECTOR r0 = XMVectorSplatW(*pRow0); + XMVECTOR r1 = XMVectorSplatW(*pRow1); + + XMVECTOR v1 = XMVectorSaturate(XMVectorMultiply(r0, scale)); + const XMVECTOR v2 = XMVectorSaturate(XMVectorMultiply(r1, scale)); + + r0 = XMVectorSplatW(*(++pRow0)); + r1 = XMVectorSplatW(*(++pRow1)); + + XMVECTOR v3 = XMVectorSaturate(XMVectorMultiply(XMVectorSplatW(r0), scale)); + const XMVECTOR v4 = XMVectorSaturate(XMVectorMultiply(XMVectorSplatW(r1), scale)); + + v1 = XMVectorMergeXY(v1, v2); // [v1.x v2.x --- ---] + v3 = XMVectorMergeXY(v3, v4); // [v3.x v4.x --- ---] + + XMVECTOR v = XMVectorPermute<0, 1, 4, 5>(v1, v3); // [v1.x v2.x v3.x v4.x] + + for (size_t sy = 0; sy < N; ++sy) + { + const size_t ry = sy * N; + for (size_t sx = 0; sx < N; ++sx) + { + v = VectorSum(XMVectorMultiply(v, convolution[ry + sx])); + if (XMVectorGetX(v) > alphaReference) + { + ++coverageCount; + } + } + } + } + + pSrcRow0 = pSrcRow1; + } + + float cscale = static_cast((srcImage.width - 1) * (srcImage.height - 1) * N * N); + if (cscale > 0.f) + { + coverage = static_cast(coverageCount) / cscale; + } + + return S_OK; + } + + + HRESULT EstimateAlphaScaleForCoverage( + const Image& srcImage, + float alphaReference, + float targetCoverage, + float& alphaScale) noexcept + { + float minAlphaScale = 0.0f; + float maxAlphaScale = 4.0f; + float bestError = FLT_MAX; + + // Determine desired scale using a binary search. Hardcoded to 10 steps max. + alphaScale = 1.0f; + constexpr size_t N = 10; + for (size_t i = 0; i < N; ++i) + { + float currentCoverage = 0.0f; + HRESULT hr = CalculateAlphaCoverage(srcImage, alphaReference, alphaScale, currentCoverage); + if (FAILED(hr)) + { + return hr; + } + + const float error = fabsf(currentCoverage - targetCoverage); + if (error < bestError) + { + bestError = error; + } + + if (currentCoverage < targetCoverage) + { + minAlphaScale = alphaScale; + } + else if (currentCoverage > targetCoverage) + { + maxAlphaScale = alphaScale; + } + else + { + break; + } + + alphaScale = (minAlphaScale + maxAlphaScale) * 0.5f; + } + + return S_OK; + } +} + +_Use_decl_annotations_ +bool DirectX::Internal::CalculateMipLevels( + size_t width, + size_t height, + size_t& mipLevels) noexcept +{ + if (mipLevels > 1) + { + const size_t maxMips = CountMips(width, height); + if (mipLevels > maxMips) + return false; + } + else if (mipLevels == 0) + { + mipLevels = CountMips(width, height); + } + else + { + mipLevels = 1; + } + return true; +} + +_Use_decl_annotations_ +bool DirectX::Internal::CalculateMipLevels3D( + size_t width, + size_t height, + size_t depth, + size_t& mipLevels) noexcept +{ + if (mipLevels > 1) + { + const size_t maxMips = CountMips3D(width, height, depth); + if (mipLevels > maxMips) + return false; + } + else if (mipLevels == 0) + { + mipLevels = CountMips3D(width, height, depth); + } + else + { + mipLevels = 1; + } + return true; +} + +#ifdef _WIN32 +//--- Resizing color and alpha channels separately using WIC --- +_Use_decl_annotations_ +HRESULT DirectX::Internal::ResizeSeparateColorAndAlpha( + IWICImagingFactory* pWIC, + bool iswic2, + IWICBitmap* original, + size_t newWidth, + size_t newHeight, + TEX_FILTER_FLAGS filter, + const Image* img) noexcept +{ + if (!pWIC || !original || !img) + return E_POINTER; + + const WICBitmapInterpolationMode interpolationMode = GetWICInterp(filter); + + WICPixelFormatGUID desiredPixelFormat = GUID_WICPixelFormatUndefined; + HRESULT hr = original->GetPixelFormat(&desiredPixelFormat); + + size_t colorBytesInPixel = 0; + size_t colorBytesPerPixel = 0; + size_t colorWithAlphaBytesPerPixel = 0; + WICPixelFormatGUID colorPixelFormat = GUID_WICPixelFormatUndefined; + WICPixelFormatGUID colorWithAlphaPixelFormat = GUID_WICPixelFormatUndefined; + + if (SUCCEEDED(hr)) + { + ComPtr componentInfo; + hr = pWIC->CreateComponentInfo(desiredPixelFormat, componentInfo.GetAddressOf()); + + ComPtr pixelFormatInfo; + if (SUCCEEDED(hr)) + { + hr = componentInfo.As(&pixelFormatInfo); + } + + UINT bitsPerPixel = 0; + if (SUCCEEDED(hr)) + { + hr = pixelFormatInfo->GetBitsPerPixel(&bitsPerPixel); + } + + if (SUCCEEDED(hr)) + { + if (bitsPerPixel <= 32) + { + colorBytesInPixel = colorBytesPerPixel = 3; + colorPixelFormat = GUID_WICPixelFormat24bppBGR; + + colorWithAlphaBytesPerPixel = 4; + colorWithAlphaPixelFormat = GUID_WICPixelFormat32bppBGRA; + } + else + { + #if(_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE) + if (iswic2) + { + colorBytesInPixel = colorBytesPerPixel = 12; + colorPixelFormat = GUID_WICPixelFormat96bppRGBFloat; + } + else + #else + UNREFERENCED_PARAMETER(iswic2); + #endif + { + colorBytesInPixel = 12; + colorBytesPerPixel = 16; + colorPixelFormat = GUID_WICPixelFormat128bppRGBFloat; + } + + colorWithAlphaBytesPerPixel = 16; + colorWithAlphaPixelFormat = GUID_WICPixelFormat128bppRGBAFloat; + } + } + } + + // Resize color only image (no alpha channel) + ComPtr resizedColor; + if (SUCCEEDED(hr)) + { + ComPtr colorScaler; + hr = pWIC->CreateBitmapScaler(colorScaler.GetAddressOf()); + if (SUCCEEDED(hr)) + { + ComPtr converted; + hr = EnsureWicBitmapPixelFormat(pWIC, original, filter, colorPixelFormat, converted.GetAddressOf()); + if (SUCCEEDED(hr)) + { + hr = colorScaler->Initialize(converted.Get(), static_cast(newWidth), static_cast(newHeight), interpolationMode); + } + } + + if (SUCCEEDED(hr)) + { + ComPtr resized; + hr = pWIC->CreateBitmapFromSource(colorScaler.Get(), WICBitmapCacheOnDemand, resized.GetAddressOf()); + if (SUCCEEDED(hr)) + { + hr = EnsureWicBitmapPixelFormat(pWIC, resized.Get(), filter, colorPixelFormat, resizedColor.GetAddressOf()); + } + } + } + + // Resize color+alpha image + ComPtr resizedColorWithAlpha; + if (SUCCEEDED(hr)) + { + ComPtr colorWithAlphaScaler; + hr = pWIC->CreateBitmapScaler(colorWithAlphaScaler.GetAddressOf()); + if (SUCCEEDED(hr)) + { + ComPtr converted; + hr = EnsureWicBitmapPixelFormat(pWIC, original, filter, colorWithAlphaPixelFormat, converted.GetAddressOf()); + if (SUCCEEDED(hr)) + { + hr = colorWithAlphaScaler->Initialize(converted.Get(), static_cast(newWidth), static_cast(newHeight), interpolationMode); + } + } + + if (SUCCEEDED(hr)) + { + ComPtr resized; + hr = pWIC->CreateBitmapFromSource(colorWithAlphaScaler.Get(), WICBitmapCacheOnDemand, resized.GetAddressOf()); + if (SUCCEEDED(hr)) + { + hr = EnsureWicBitmapPixelFormat(pWIC, resized.Get(), filter, colorWithAlphaPixelFormat, resizedColorWithAlpha.GetAddressOf()); + } + } + } + + // Merge pixels (copying color channels from color only image to color+alpha image) + if (SUCCEEDED(hr)) + { + ComPtr colorLock; + ComPtr colorWithAlphaLock; + hr = resizedColor->Lock(nullptr, WICBitmapLockRead, colorLock.GetAddressOf()); + if (SUCCEEDED(hr)) + { + hr = resizedColorWithAlpha->Lock(nullptr, WICBitmapLockWrite, colorWithAlphaLock.GetAddressOf()); + } + + if (SUCCEEDED(hr)) + { + BYTE* colorWithAlphaData = nullptr; + UINT colorWithAlphaSizeInBytes = 0; + UINT colorWithAlphaStride = 0; + + hr = colorWithAlphaLock->GetDataPointer(&colorWithAlphaSizeInBytes, &colorWithAlphaData); + if (SUCCEEDED(hr)) + { + if (!colorWithAlphaData) + { + hr = E_POINTER; + } + else + { + hr = colorWithAlphaLock->GetStride(&colorWithAlphaStride); + } + } + + BYTE* colorData = nullptr; + UINT colorSizeInBytes = 0; + UINT colorStride = 0; + if (SUCCEEDED(hr)) + { + hr = colorLock->GetDataPointer(&colorSizeInBytes, &colorData); + if (SUCCEEDED(hr)) + { + if (!colorData) + { + hr = E_POINTER; + } + else + { + hr = colorLock->GetStride(&colorStride); + } + } + } + + for (size_t j = 0; SUCCEEDED(hr) && j < newHeight; j++) + { + for (size_t i = 0; SUCCEEDED(hr) && i < newWidth; i++) + { + size_t colorWithAlphaIndex = (j * colorWithAlphaStride) + (i * colorWithAlphaBytesPerPixel); + const size_t colorIndex = (j * colorStride) + (i * colorBytesPerPixel); + + if (((colorWithAlphaIndex + colorBytesInPixel) > colorWithAlphaSizeInBytes) + || ((colorIndex + colorBytesPerPixel) > colorSizeInBytes)) + { + hr = E_INVALIDARG; + } + else + { + #pragma warning( suppress : 26014 6386 ) // No overflow possible here + memcpy_s(colorWithAlphaData + colorWithAlphaIndex, colorWithAlphaBytesPerPixel, colorData + colorIndex, colorBytesInPixel); + } + } + } + } + } + + if (SUCCEEDED(hr)) + { + if (img->rowPitch > UINT32_MAX || img->slicePitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + ComPtr wicBitmap; + hr = EnsureWicBitmapPixelFormat(pWIC, resizedColorWithAlpha.Get(), filter, desiredPixelFormat, wicBitmap.GetAddressOf()); + if (SUCCEEDED(hr)) + { + hr = wicBitmap->CopyPixels(nullptr, static_cast(img->rowPitch), static_cast(img->slicePitch), img->pixels); + } + } + + return hr; +} +#endif // WIN32 + +namespace +{ +#ifdef _WIN32 + //--- determine when to use WIC vs. non-WIC paths --- + bool UseWICFiltering(_In_ DXGI_FORMAT format, _In_ TEX_FILTER_FLAGS filter) noexcept + { + if (filter & TEX_FILTER_FORCE_NON_WIC) + { + // Explicit flag indicates use of non-WIC code paths + return false; + } + + if (filter & TEX_FILTER_FORCE_WIC) + { + // Explicit flag to use WIC code paths, skips all the case checks below + return true; + } + + if (IsSRGB(format) || (filter & TEX_FILTER_SRGB)) + { + // Use non-WIC code paths for sRGB correct filtering + return false; + } + + #if (defined(_XBOX_ONE) && defined(_TITLE)) || defined(_GAMING_XBOX) + if (format == DXGI_FORMAT_R16G16B16A16_FLOAT + || format == DXGI_FORMAT_R16_FLOAT) + { + // Use non-WIC code paths as these conversions are not supported by Xbox version of WIC + return false; + } + #endif + + static_assert(TEX_FILTER_POINT == 0x100000, "TEX_FILTER_ flag values don't match TEX_FILTER_MODE_MASK"); + + switch (filter & TEX_FILTER_MODE_MASK) + { + case TEX_FILTER_LINEAR: + if (filter & TEX_FILTER_WRAP) + { + // WIC only supports 'clamp' semantics (MIRROR is equivalent to clamp for linear) + return false; + } + + if (BitsPerColor(format) > 8) + { + // Avoid the WIC bitmap scaler when doing Linear filtering of XR/HDR formats + return false; + } + break; + + case TEX_FILTER_CUBIC: + if (filter & (TEX_FILTER_WRAP | TEX_FILTER_MIRROR)) + { + // WIC only supports 'clamp' semantics + return false; + } + + if (BitsPerColor(format) > 8) + { + // Avoid the WIC bitmap scaler when doing Cubic filtering of XR/HDR formats + return false; + } + break; + + case TEX_FILTER_TRIANGLE: + // WIC does not implement this filter + return false; + + default: + if (BitsPerColor(format) > 8) + { + // Avoid the WIC bitmap scaler when doing filtering of XR/HDR formats + return false; + } + break; + } + + return true; + } + + + //--- mipmap (1D/2D) generation using WIC image scalar --- + HRESULT GenerateMipMapsUsingWIC( + _In_ const Image& baseImage, + _In_ TEX_FILTER_FLAGS filter, + _In_ size_t levels, + _In_ const WICPixelFormatGUID& pfGUID, + _In_ const ScratchImage& mipChain, + _In_ size_t item) noexcept + { + assert(levels > 1); + + if (!baseImage.pixels || !mipChain.GetPixels()) + return E_POINTER; + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + size_t width = baseImage.width; + size_t height = baseImage.height; + + if (baseImage.rowPitch > UINT32_MAX || baseImage.slicePitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + ComPtr source; + HRESULT hr = pWIC->CreateBitmapFromMemory(static_cast(width), static_cast(height), pfGUID, + static_cast(baseImage.rowPitch), static_cast(baseImage.slicePitch), + baseImage.pixels, source.GetAddressOf()); + if (FAILED(hr)) + return hr; + + // Copy base image to top miplevel + const Image *img0 = mipChain.GetImage(0, item, 0); + if (!img0) + return E_POINTER; + + uint8_t* pDest = img0->pixels; + if (!pDest) + return E_POINTER; + + const uint8_t *pSrc = baseImage.pixels; + for (size_t h = 0; h < height; ++h) + { + const size_t msize = std::min(img0->rowPitch, baseImage.rowPitch); + memcpy_s(pDest, img0->rowPitch, pSrc, msize); + pSrc += baseImage.rowPitch; + pDest += img0->rowPitch; + } + + ComPtr componentInfo; + hr = pWIC->CreateComponentInfo(pfGUID, componentInfo.GetAddressOf()); + if (FAILED(hr)) + return hr; + + ComPtr pixelFormatInfo; + hr = componentInfo.As(&pixelFormatInfo); + if (FAILED(hr)) + return hr; + + BOOL supportsTransparency = FALSE; + hr = pixelFormatInfo->SupportsTransparency(&supportsTransparency); + if (FAILED(hr)) + return hr; + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + const Image *img = mipChain.GetImage(level, item, 0); + if (!img) + return E_POINTER; + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + + assert(img->width == width && img->height == height && img->format == baseImage.format); + + if ((filter & TEX_FILTER_SEPARATE_ALPHA) && supportsTransparency) + { + hr = ResizeSeparateColorAndAlpha(pWIC, iswic2, source.Get(), width, height, filter, img); + if (FAILED(hr)) + return hr; + } + else + { + ComPtr scaler; + hr = pWIC->CreateBitmapScaler(scaler.GetAddressOf()); + if (FAILED(hr)) + return hr; + + if (img->rowPitch > UINT32_MAX || img->slicePitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + hr = scaler->Initialize(source.Get(), + static_cast(width), static_cast(height), + GetWICInterp(filter)); + if (FAILED(hr)) + return hr; + + WICPixelFormatGUID pfScaler; + hr = scaler->GetPixelFormat(&pfScaler); + if (FAILED(hr)) + return hr; + + if (memcmp(&pfScaler, &pfGUID, sizeof(WICPixelFormatGUID)) == 0) + { + hr = scaler->CopyPixels(nullptr, static_cast(img->rowPitch), static_cast(img->slicePitch), img->pixels); + if (FAILED(hr)) + return hr; + } + else + { + // The WIC bitmap scaler is free to return a different pixel format than the source image, so here we + // convert it back + ComPtr FC; + hr = pWIC->CreateFormatConverter(FC.GetAddressOf()); + if (FAILED(hr)) + return hr; + + BOOL canConvert = FALSE; + hr = FC->CanConvert(pfScaler, pfGUID, &canConvert); + if (FAILED(hr) || !canConvert) + { + return E_UNEXPECTED; + } + + hr = FC->Initialize(scaler.Get(), pfGUID, GetWICDither(filter), nullptr, + 0, WICBitmapPaletteTypeMedianCut); + if (FAILED(hr)) + return hr; + + hr = FC->CopyPixels(nullptr, static_cast(img->rowPitch), static_cast(img->slicePitch), img->pixels); + if (FAILED(hr)) + return hr; + } + } + } + + return S_OK; + } +#endif // WIN32 + + + //------------------------------------------------------------------------------------- + // Generate (1D/2D) mip-map helpers (custom filtering) + //------------------------------------------------------------------------------------- + HRESULT Setup2DMips( + _In_reads_(nimages) const Image* baseImages, + _In_ size_t nimages, + _In_ const TexMetadata& mdata, + _Out_ ScratchImage& mipChain) noexcept + { + if (!baseImages || !nimages) + return E_INVALIDARG; + + assert(mdata.mipLevels > 1); + assert(mdata.arraySize == nimages); + assert(mdata.depth == 1 && mdata.dimension != TEX_DIMENSION_TEXTURE3D); + assert(mdata.width == baseImages[0].width); + assert(mdata.height == baseImages[0].height); + assert(mdata.format == baseImages[0].format); + + HRESULT hr = mipChain.Initialize(mdata); + if (FAILED(hr)) + return hr; + + // Copy base image(s) to top of mip chain + for (size_t item = 0; item < nimages; ++item) + { + const Image& src = baseImages[item]; + + const Image *dest = mipChain.GetImage(0, item, 0); + if (!dest) + { + mipChain.Release(); + return E_POINTER; + } + + assert(src.format == dest->format); + + uint8_t* pDest = dest->pixels; + if (!pDest) + { + mipChain.Release(); + return E_POINTER; + } + + const uint8_t *pSrc = src.pixels; + const size_t rowPitch = src.rowPitch; + for (size_t h = 0; h < mdata.height; ++h) + { + const size_t msize = std::min(dest->rowPitch, rowPitch); + memcpy(pDest, pSrc, msize); + pSrc += rowPitch; + pDest += dest->rowPitch; + } + } + + return S_OK; + } + + //--- 2D Point Filter --- + HRESULT Generate2DMipsPointFilter(size_t levels, const ScratchImage& mipChain, size_t item) noexcept + { + if (!mipChain.GetImages()) + return E_INVALIDARG; + + // This assumes that the base image is already placed into the mipChain at the top level... (see _Setup2DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + // Allocate temporary space (2 scanlines) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 2); + if (!scanline) + return E_OUTOFMEMORY; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* row = target + width; + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + #ifdef _DEBUG + memset(row, 0xCD, sizeof(XMVECTOR)*width); + #endif + + // 2D point filter + const Image* src = mipChain.GetImage(level - 1, item, 0); + const Image* dest = mipChain.GetImage(level, item, 0); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + uint8_t* pDest = dest->pixels; + + const size_t rowPitch = src->rowPitch; + + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + const size_t nheight = (height > 1) ? (height >> 1) : 1; + + const size_t xinc = (width << 16) / nwidth; + const size_t yinc = (height << 16) / nheight; + + size_t lasty = size_t(-1); + + size_t sy = 0; + for (size_t y = 0; y < nheight; ++y) + { + if ((lasty ^ sy) >> 16) + { + if (!LoadScanline(row, width, pSrc + (rowPitch * (sy >> 16)), rowPitch, src->format)) + return E_FAIL; + lasty = sy; + } + + size_t sx = 0; + for (size_t x = 0; x < nwidth; ++x) + { + target[x] = row[sx >> 16]; + sx += xinc; + } + + if (!StoreScanline(pDest, dest->rowPitch, dest->format, target, nwidth)) + return E_FAIL; + pDest += dest->rowPitch; + + sy += yinc; + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + } + + return S_OK; + } + + + //--- 2D Box Filter --- + HRESULT Generate2DMipsBoxFilter(size_t levels, TEX_FILTER_FLAGS filter, const ScratchImage& mipChain, size_t item) noexcept + { + using namespace DirectX::Filters; + + if (!mipChain.GetImages()) + return E_INVALIDARG; + + // This assumes that the base image is already placed into the mipChain at the top level... (see _Setup2DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + if (!ispow2(width) || !ispow2(height)) + return E_FAIL; + + // Allocate temporary space (3 scanlines) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 3); + if (!scanline) + return E_OUTOFMEMORY; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* urow0 = target + width; + XMVECTOR* urow1 = target + width * 2; + + const XMVECTOR* urow2 = urow0 + 1; + const XMVECTOR* urow3 = urow1 + 1; + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + if (height <= 1) + { + urow1 = urow0; + } + + if (width <= 1) + { + urow2 = urow0; + urow3 = urow1; + } + + // 2D box filter + const Image* src = mipChain.GetImage(level - 1, item, 0); + const Image* dest = mipChain.GetImage(level, item, 0); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + uint8_t* pDest = dest->pixels; + + const size_t rowPitch = src->rowPitch; + + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + const size_t nheight = (height > 1) ? (height >> 1) : 1; + + for (size_t y = 0; y < nheight; ++y) + { + if (!LoadScanlineLinear(urow0, width, pSrc, rowPitch, src->format, filter)) + return E_FAIL; + pSrc += rowPitch; + + if (urow0 != urow1) + { + if (!LoadScanlineLinear(urow1, width, pSrc, rowPitch, src->format, filter)) + return E_FAIL; + pSrc += rowPitch; + } + + for (size_t x = 0; x < nwidth; ++x) + { + const size_t x2 = x << 1; + + AVERAGE4(target[x], urow0[x2], urow1[x2], urow2[x2], urow3[x2]) + } + + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, target, nwidth, filter)) + return E_FAIL; + pDest += dest->rowPitch; + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + } + + return S_OK; + } + + + //--- 2D Linear Filter --- + HRESULT Generate2DMipsLinearFilter(size_t levels, TEX_FILTER_FLAGS filter, const ScratchImage& mipChain, size_t item) noexcept + { + using namespace DirectX::Filters; + + if (!mipChain.GetImages()) + return E_INVALIDARG; + + // This assumes that the base image is already placed into the mipChain at the top level... (see _Setup2DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + // Allocate temporary space (3 scanlines, plus X and Y filters) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 3); + if (!scanline) + return E_OUTOFMEMORY; + + std::unique_ptr lf(new (std::nothrow) LinearFilter[width + height]); + if (!lf) + return E_OUTOFMEMORY; + + LinearFilter* lfX = lf.get(); + LinearFilter* lfY = lf.get() + width; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* row0 = target + width; + XMVECTOR* row1 = target + width * 2; + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + // 2D linear filter + const Image* src = mipChain.GetImage(level - 1, item, 0); + const Image* dest = mipChain.GetImage(level, item, 0); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + uint8_t* pDest = dest->pixels; + + const size_t rowPitch = src->rowPitch; + + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + CreateLinearFilter(width, nwidth, (filter & TEX_FILTER_WRAP_U) != 0, lfX); + + const size_t nheight = (height > 1) ? (height >> 1) : 1; + CreateLinearFilter(height, nheight, (filter & TEX_FILTER_WRAP_V) != 0, lfY); + + #ifdef _DEBUG + memset(row0, 0xCD, sizeof(XMVECTOR)*width); + memset(row1, 0xDD, sizeof(XMVECTOR)*width); + #endif + + size_t u0 = size_t(-1); + size_t u1 = size_t(-1); + + for (size_t y = 0; y < nheight; ++y) + { + auto const& toY = lfY[y]; + + if (toY.u0 != u0) + { + if (toY.u0 != u1) + { + u0 = toY.u0; + + if (!LoadScanlineLinear(row0, width, pSrc + (rowPitch * u0), rowPitch, src->format, filter)) + return E_FAIL; + } + else + { + u0 = u1; + u1 = size_t(-1); + + std::swap(row0, row1); + } + } + + if (toY.u1 != u1) + { + u1 = toY.u1; + + if (!LoadScanlineLinear(row1, width, pSrc + (rowPitch * u1), rowPitch, src->format, filter)) + return E_FAIL; + } + + for (size_t x = 0; x < nwidth; ++x) + { + auto const& toX = lfX[x]; + + BILINEAR_INTERPOLATE(target[x], toX, toY, row0, row1) + } + + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, target, nwidth, filter)) + return E_FAIL; + pDest += dest->rowPitch; + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + } + + return S_OK; + } + + //--- 2D Cubic Filter --- +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wextra-semi-stmt" +#endif + + HRESULT Generate2DMipsCubicFilter(size_t levels, TEX_FILTER_FLAGS filter, const ScratchImage& mipChain, size_t item) noexcept + { + using namespace DirectX::Filters; + + if (!mipChain.GetImages()) + return E_INVALIDARG; + + // This assumes that the base image is already placed into the mipChain at the top level... (see _Setup2DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + // Allocate temporary space (5 scanlines, plus X and Y filters) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 5); + if (!scanline) + return E_OUTOFMEMORY; + + std::unique_ptr cf(new (std::nothrow) CubicFilter[width + height]); + if (!cf) + return E_OUTOFMEMORY; + + CubicFilter* cfX = cf.get(); + CubicFilter* cfY = cf.get() + width; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* row0 = target + width; + XMVECTOR* row1 = target + width * 2; + XMVECTOR* row2 = target + width * 3; + XMVECTOR* row3 = target + width * 4; + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + // 2D cubic filter + const Image* src = mipChain.GetImage(level - 1, item, 0); + const Image* dest = mipChain.GetImage(level, item, 0); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + uint8_t* pDest = dest->pixels; + + const size_t rowPitch = src->rowPitch; + + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + CreateCubicFilter(width, nwidth, (filter & TEX_FILTER_WRAP_U) != 0, (filter & TEX_FILTER_MIRROR_U) != 0, cfX); + + const size_t nheight = (height > 1) ? (height >> 1) : 1; + CreateCubicFilter(height, nheight, (filter & TEX_FILTER_WRAP_V) != 0, (filter & TEX_FILTER_MIRROR_V) != 0, cfY); + + #ifdef _DEBUG + memset(row0, 0xCD, sizeof(XMVECTOR)*width); + memset(row1, 0xDD, sizeof(XMVECTOR)*width); + memset(row2, 0xED, sizeof(XMVECTOR)*width); + memset(row3, 0xFD, sizeof(XMVECTOR)*width); + #endif + + size_t u0 = size_t(-1); + size_t u1 = size_t(-1); + size_t u2 = size_t(-1); + size_t u3 = size_t(-1); + + for (size_t y = 0; y < nheight; ++y) + { + auto const& toY = cfY[y]; + + // Scanline 1 + if (toY.u0 != u0) + { + if (toY.u0 != u1 && toY.u0 != u2 && toY.u0 != u3) + { + u0 = toY.u0; + + if (!LoadScanlineLinear(row0, width, pSrc + (rowPitch * u0), rowPitch, src->format, filter)) + return E_FAIL; + } + else if (toY.u0 == u1) + { + u0 = u1; + u1 = size_t(-1); + + std::swap(row0, row1); + } + else if (toY.u0 == u2) + { + u0 = u2; + u2 = size_t(-1); + + std::swap(row0, row2); + } + else if (toY.u0 == u3) + { + u0 = u3; + u3 = size_t(-1); + + std::swap(row0, row3); + } + } + + // Scanline 2 + if (toY.u1 != u1) + { + if (toY.u1 != u2 && toY.u1 != u3) + { + u1 = toY.u1; + + if (!LoadScanlineLinear(row1, width, pSrc + (rowPitch * u1), rowPitch, src->format, filter)) + return E_FAIL; + } + else if (toY.u1 == u2) + { + u1 = u2; + u2 = size_t(-1); + + std::swap(row1, row2); + } + else if (toY.u1 == u3) + { + u1 = u3; + u3 = size_t(-1); + + std::swap(row1, row3); + } + } + + // Scanline 3 + if (toY.u2 != u2) + { + if (toY.u2 != u3) + { + u2 = toY.u2; + + if (!LoadScanlineLinear(row2, width, pSrc + (rowPitch * u2), rowPitch, src->format, filter)) + return E_FAIL; + } + else + { + u2 = u3; + u3 = size_t(-1); + + std::swap(row2, row3); + } + } + + // Scanline 4 + if (toY.u3 != u3) + { + u3 = toY.u3; + + if (!LoadScanlineLinear(row3, width, pSrc + (rowPitch * u3), rowPitch, src->format, filter)) + return E_FAIL; + } + + for (size_t x = 0; x < nwidth; ++x) + { + auto const& toX = cfX[x]; + + XMVECTOR C0, C1, C2, C3; + + CUBIC_INTERPOLATE(C0, toX.x, row0[toX.u0], row0[toX.u1], row0[toX.u2], row0[toX.u3]); + CUBIC_INTERPOLATE(C1, toX.x, row1[toX.u0], row1[toX.u1], row1[toX.u2], row1[toX.u3]); + CUBIC_INTERPOLATE(C2, toX.x, row2[toX.u0], row2[toX.u1], row2[toX.u2], row2[toX.u3]); + CUBIC_INTERPOLATE(C3, toX.x, row3[toX.u0], row3[toX.u1], row3[toX.u2], row3[toX.u3]); + + CUBIC_INTERPOLATE(target[x], toY.x, C0, C1, C2, C3); + } + + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, target, nwidth, filter)) + return E_FAIL; + pDest += dest->rowPitch; + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + } + + return S_OK; + } + + + //--- 2D Triangle Filter --- + HRESULT Generate2DMipsTriangleFilter(size_t levels, TEX_FILTER_FLAGS filter, const ScratchImage& mipChain, size_t item) noexcept + { + using namespace DirectX::Filters; + + if (!mipChain.GetImages()) + return E_INVALIDARG; + + // This assumes that the base image is already placed into the mipChain at the top level... (see _Setup2DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + // Allocate initial temporary space (1 scanline, accumulation rows, plus X and Y filters) + auto scanline = make_AlignedArrayXMVECTOR(width); + if (!scanline) + return E_OUTOFMEMORY; + + std::unique_ptr rowActive(new (std::nothrow) TriangleRow[height]); + if (!rowActive) + return E_OUTOFMEMORY; + + TriangleRow * rowFree = nullptr; + + std::unique_ptr tfX, tfY; + + XMVECTOR* row = scanline.get(); + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + // 2D triangle filter + const Image* src = mipChain.GetImage(level - 1, item, 0); + const Image* dest = mipChain.GetImage(level, item, 0); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + const size_t rowPitch = src->rowPitch; + const uint8_t* pEndSrc = pSrc + rowPitch * height; + + uint8_t* pDest = dest->pixels; + + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + HRESULT hr = CreateTriangleFilter(width, nwidth, (filter & TEX_FILTER_WRAP_U) != 0, tfX); + if (FAILED(hr)) + return hr; + + const size_t nheight = (height > 1) ? (height >> 1) : 1; + hr = CreateTriangleFilter(height, nheight, (filter & TEX_FILTER_WRAP_V) != 0, tfY); + if (FAILED(hr)) + return hr; + + #ifdef _DEBUG + memset(row, 0xCD, sizeof(XMVECTOR)*width); + #endif + + auto xFromEnd = reinterpret_cast(reinterpret_cast(tfX.get()) + tfX->sizeInBytes); + auto yFromEnd = reinterpret_cast(reinterpret_cast(tfY.get()) + tfY->sizeInBytes); + + // Count times rows get written (and clear out any leftover accumulation rows from last miplevel) + for (FilterFrom* yFrom = tfY->from; yFrom < yFromEnd; ) + { + for (size_t j = 0; j < yFrom->count; ++j) + { + const size_t v = yFrom->to[j].u; + assert(v < nheight); + TriangleRow* rowAcc = &rowActive[v]; + + ++rowAcc->remaining; + + if (rowAcc->scanline) + { + memset(rowAcc->scanline.get(), 0, sizeof(XMVECTOR) * nwidth); + } + } + + yFrom = reinterpret_cast(reinterpret_cast(yFrom) + yFrom->sizeInBytes); + } + + // Filter image + for (FilterFrom* yFrom = tfY->from; yFrom < yFromEnd; ) + { + // Create accumulation rows as needed + for (size_t j = 0; j < yFrom->count; ++j) + { + const size_t v = yFrom->to[j].u; + assert(v < nheight); + TriangleRow* rowAcc = &rowActive[v]; + + if (!rowAcc->scanline) + { + if (rowFree) + { + // Steal and reuse scanline from 'free row' list + // (it will always be at least as wide as nwidth due to loop decending order) + assert(rowFree->scanline != nullptr); + rowAcc->scanline.reset(rowFree->scanline.release()); + rowFree = rowFree->next; + } + else + { + auto nscanline = make_AlignedArrayXMVECTOR(nwidth); + if (!nscanline) + return E_OUTOFMEMORY; + rowAcc->scanline.swap(nscanline); + } + + memset(rowAcc->scanline.get(), 0, sizeof(XMVECTOR) * nwidth); + } + } + + // Load source scanline + if ((pSrc + rowPitch) > pEndSrc) + return E_FAIL; + + if (!LoadScanlineLinear(row, width, pSrc, rowPitch, src->format, filter)) + return E_FAIL; + + pSrc += rowPitch; + + // Process row + size_t x = 0; + for (FilterFrom* xFrom = tfX->from; xFrom < xFromEnd; ++x) + { + for (size_t j = 0; j < yFrom->count; ++j) + { + const size_t v = yFrom->to[j].u; + assert(v < nheight); + const float yweight = yFrom->to[j].weight; + + XMVECTOR* accPtr = rowActive[v].scanline.get(); + if (!accPtr) + return E_POINTER; + + for (size_t k = 0; k < xFrom->count; ++k) + { + size_t u = xFrom->to[k].u; + assert(u < nwidth); + + const XMVECTOR weight = XMVectorReplicate(yweight * xFrom->to[k].weight); + + assert(x < width); + accPtr[u] = XMVectorMultiplyAdd(row[x], weight, accPtr[u]); + } + } + + xFrom = reinterpret_cast(reinterpret_cast(xFrom) + xFrom->sizeInBytes); + } + + // Write completed accumulation rows + for (size_t j = 0; j < yFrom->count; ++j) + { + size_t v = yFrom->to[j].u; + assert(v < nheight); + TriangleRow* rowAcc = &rowActive[v]; + + assert(rowAcc->remaining > 0); + --rowAcc->remaining; + + if (!rowAcc->remaining) + { + XMVECTOR* pAccSrc = rowAcc->scanline.get(); + if (!pAccSrc) + return E_POINTER; + + switch (dest->format) + { + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + { + // Need to slightly bias results for floating-point error accumulation which can + // be visible with harshly quantized values + static const XMVECTORF32 Bias = { { { 0.f, 0.f, 0.f, 0.1f } } }; + + XMVECTOR* ptr = pAccSrc; + for (size_t i = 0; i < dest->width; ++i, ++ptr) + { + *ptr = XMVectorAdd(*ptr, Bias); + } + } + break; + + default: + break; + } + + // This performs any required clamping + if (!StoreScanlineLinear(pDest + (dest->rowPitch * v), dest->rowPitch, dest->format, pAccSrc, dest->width, filter)) + return E_FAIL; + + // Put row on freelist to reuse it's allocated scanline + rowAcc->next = rowFree; + rowFree = rowAcc; + } + } + + yFrom = reinterpret_cast(reinterpret_cast(yFrom) + yFrom->sizeInBytes); + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Generate volume mip-map helpers + //------------------------------------------------------------------------------------- + HRESULT Setup3DMips( + _In_reads_(depth) const Image* baseImages, + size_t depth, + size_t levels, + _Out_ ScratchImage& mipChain) noexcept + { + if (!baseImages || !depth) + return E_INVALIDARG; + + if (depth > INT16_MAX) + return E_INVALIDARG; + + assert(levels > 1); + + const size_t width = baseImages[0].width; + const size_t height = baseImages[0].height; + + HRESULT hr = mipChain.Initialize3D(baseImages[0].format, width, height, depth, levels); + if (FAILED(hr)) + return hr; + + // Copy base images to top slice + for (size_t slice = 0; slice < depth; ++slice) + { + const Image& src = baseImages[slice]; + + const Image *dest = mipChain.GetImage(0, 0, slice); + if (!dest) + { + mipChain.Release(); + return E_POINTER; + } + + assert(src.format == dest->format); + + uint8_t* pDest = dest->pixels; + if (!pDest) + { + mipChain.Release(); + return E_POINTER; + } + + const uint8_t *pSrc = src.pixels; + const size_t rowPitch = src.rowPitch; + for (size_t h = 0; h < height; ++h) + { + const size_t msize = std::min(dest->rowPitch, rowPitch); + memcpy(pDest, pSrc, msize); + pSrc += rowPitch; + pDest += dest->rowPitch; + } + } + + return S_OK; + } + + + //--- 3D Point Filter --- + HRESULT Generate3DMipsPointFilter(size_t depth, size_t levels, const ScratchImage& mipChain) noexcept + { + if (!depth || !mipChain.GetImages()) + return E_INVALIDARG; + + if (depth > INT16_MAX) + return E_INVALIDARG; + + // This assumes that the base images are already placed into the mipChain at the top level... (see _Setup3DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + // Allocate temporary space (2 scanlines) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 2); + if (!scanline) + return E_OUTOFMEMORY; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* row = target + width; + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + #ifdef _DEBUG + memset(row, 0xCD, sizeof(XMVECTOR)*width); + #endif + + if (depth > 1) + { + // 3D point filter + const size_t ndepth = depth >> 1; + + const size_t zinc = (depth << 16) / ndepth; + + size_t sz = 0; + for (size_t slice = 0; slice < ndepth; ++slice) + { + const Image* src = mipChain.GetImage(level - 1, 0, (sz >> 16)); + const Image* dest = mipChain.GetImage(level, 0, slice); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + uint8_t* pDest = dest->pixels; + + const size_t rowPitch = src->rowPitch; + + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + const size_t nheight = (height > 1) ? (height >> 1) : 1; + + const size_t xinc = (width << 16) / nwidth; + const size_t yinc = (height << 16) / nheight; + + size_t lasty = size_t(-1); + + size_t sy = 0; + for (size_t y = 0; y < nheight; ++y) + { + if ((lasty ^ sy) >> 16) + { + if (!LoadScanline(row, width, pSrc + (rowPitch * (sy >> 16)), rowPitch, src->format)) + return E_FAIL; + lasty = sy; + } + + size_t sx = 0; + for (size_t x = 0; x < nwidth; ++x) + { + target[x] = row[sx >> 16]; + sx += xinc; + } + + if (!StoreScanline(pDest, dest->rowPitch, dest->format, target, nwidth)) + return E_FAIL; + pDest += dest->rowPitch; + + sy += yinc; + } + + sz += zinc; + } + } + else + { + // 2D point filter + const Image* src = mipChain.GetImage(level - 1, 0, 0); + const Image* dest = mipChain.GetImage(level, 0, 0); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + uint8_t* pDest = dest->pixels; + + const size_t rowPitch = src->rowPitch; + + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + const size_t nheight = (height > 1) ? (height >> 1) : 1; + + const size_t xinc = (width << 16) / nwidth; + const size_t yinc = (height << 16) / nheight; + + size_t lasty = size_t(-1); + + size_t sy = 0; + for (size_t y = 0; y < nheight; ++y) + { + if ((lasty ^ sy) >> 16) + { + if (!LoadScanline(row, width, pSrc + (rowPitch * (sy >> 16)), rowPitch, src->format)) + return E_FAIL; + lasty = sy; + } + + size_t sx = 0; + for (size_t x = 0; x < nwidth; ++x) + { + target[x] = row[sx >> 16]; + sx += xinc; + } + + if (!StoreScanline(pDest, dest->rowPitch, dest->format, target, nwidth)) + return E_FAIL; + pDest += dest->rowPitch; + + sy += yinc; + } + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + + if (depth > 1) + depth >>= 1; + } + + return S_OK; + } + + + //--- 3D Box Filter --- + HRESULT Generate3DMipsBoxFilter(size_t depth, size_t levels, TEX_FILTER_FLAGS filter, const ScratchImage& mipChain) noexcept + { + using namespace DirectX::Filters; + + if (!depth || !mipChain.GetImages()) + return E_INVALIDARG; + + if (depth > INT16_MAX) + return E_INVALIDARG; + + // This assumes that the base images are already placed into the mipChain at the top level... (see _Setup3DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + if (!ispow2(width) || !ispow2(height) || !ispow2(depth)) + return E_FAIL; + + // Allocate temporary space (5 scanlines) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 5); + if (!scanline) + return E_OUTOFMEMORY; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* urow0 = target + width; + XMVECTOR* urow1 = target + width * 2; + XMVECTOR* vrow0 = target + width * 3; + XMVECTOR* vrow1 = target + width * 4; + + const XMVECTOR* urow2 = urow0 + 1; + const XMVECTOR* urow3 = urow1 + 1; + const XMVECTOR* vrow2 = vrow0 + 1; + const XMVECTOR* vrow3 = vrow1 + 1; + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + if (height <= 1) + { + urow1 = urow0; + vrow1 = vrow0; + } + + if (width <= 1) + { + urow2 = urow0; + urow3 = urow1; + vrow2 = vrow0; + vrow3 = vrow1; + } + + if (depth > 1) + { + // 3D box filter + const size_t ndepth = depth >> 1; + + for (size_t slice = 0; slice < ndepth; ++slice) + { + const size_t slicea = std::min(slice * 2, depth - 1); + const size_t sliceb = std::min(slicea + 1, depth - 1); + + const Image* srca = mipChain.GetImage(level - 1, 0, slicea); + const Image* srcb = mipChain.GetImage(level - 1, 0, sliceb); + const Image* dest = mipChain.GetImage(level, 0, slice); + + if (!srca || !srcb || !dest) + return E_POINTER; + + const uint8_t* pSrc1 = srca->pixels; + const uint8_t* pSrc2 = srcb->pixels; + uint8_t* pDest = dest->pixels; + + const size_t aRowPitch = srca->rowPitch; + const size_t bRowPitch = srcb->rowPitch; + + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + const size_t nheight = (height > 1) ? (height >> 1) : 1; + + for (size_t y = 0; y < nheight; ++y) + { + if (!LoadScanlineLinear(urow0, width, pSrc1, aRowPitch, srca->format, filter)) + return E_FAIL; + pSrc1 += aRowPitch; + + if (urow0 != urow1) + { + if (!LoadScanlineLinear(urow1, width, pSrc1, aRowPitch, srca->format, filter)) + return E_FAIL; + pSrc1 += aRowPitch; + } + + if (!LoadScanlineLinear(vrow0, width, pSrc2, bRowPitch, srcb->format, filter)) + return E_FAIL; + pSrc2 += bRowPitch; + + if (vrow0 != vrow1) + { + if (!LoadScanlineLinear(vrow1, width, pSrc2, bRowPitch, srcb->format, filter)) + return E_FAIL; + pSrc2 += bRowPitch; + } + + for (size_t x = 0; x < nwidth; ++x) + { + const size_t x2 = x << 1; + + AVERAGE8(target[x], urow0[x2], urow1[x2], urow2[x2], urow3[x2], + vrow0[x2], vrow1[x2], vrow2[x2], vrow3[x2]) + } + + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, target, nwidth, filter)) + return E_FAIL; + pDest += dest->rowPitch; + } + } + } + else + { + // 2D box filter + const Image* src = mipChain.GetImage(level - 1, 0, 0); + const Image* dest = mipChain.GetImage(level, 0, 0); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + uint8_t* pDest = dest->pixels; + + const size_t rowPitch = src->rowPitch; + + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + const size_t nheight = (height > 1) ? (height >> 1) : 1; + + for (size_t y = 0; y < nheight; ++y) + { + if (!LoadScanlineLinear(urow0, width, pSrc, rowPitch, src->format, filter)) + return E_FAIL; + pSrc += rowPitch; + + if (urow0 != urow1) + { + if (!LoadScanlineLinear(urow1, width, pSrc, rowPitch, src->format, filter)) + return E_FAIL; + pSrc += rowPitch; + } + + for (size_t x = 0; x < nwidth; ++x) + { + const size_t x2 = x << 1; + + AVERAGE4(target[x], urow0[x2], urow1[x2], urow2[x2], urow3[x2]) + } + + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, target, nwidth, filter)) + return E_FAIL; + pDest += dest->rowPitch; + } + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + + if (depth > 1) + depth >>= 1; + } + + return S_OK; + } + + + //--- 3D Linear Filter --- + HRESULT Generate3DMipsLinearFilter(size_t depth, size_t levels, TEX_FILTER_FLAGS filter, const ScratchImage& mipChain) noexcept + { + using namespace DirectX::Filters; + + if (!depth || !mipChain.GetImages()) + return E_INVALIDARG; + + if (depth > INT16_MAX) + return E_INVALIDARG; + + // This assumes that the base images are already placed into the mipChain at the top level... (see _Setup3DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + // Allocate temporary space (5 scanlines, plus X/Y/Z filters) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 5); + if (!scanline) + return E_OUTOFMEMORY; + + std::unique_ptr lf(new (std::nothrow) LinearFilter[width + height + depth]); + if (!lf) + return E_OUTOFMEMORY; + + LinearFilter* lfX = lf.get(); + LinearFilter* lfY = lf.get() + width; + LinearFilter* lfZ = lf.get() + width + height; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* urow0 = target + width; + XMVECTOR* urow1 = target + width * 2; + XMVECTOR* vrow0 = target + width * 3; + XMVECTOR* vrow1 = target + width * 4; + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + CreateLinearFilter(width, nwidth, (filter & TEX_FILTER_WRAP_U) != 0, lfX); + + const size_t nheight = (height > 1) ? (height >> 1) : 1; + CreateLinearFilter(height, nheight, (filter & TEX_FILTER_WRAP_V) != 0, lfY); + + #ifdef _DEBUG + memset(urow0, 0xCD, sizeof(XMVECTOR)*width); + memset(urow1, 0xDD, sizeof(XMVECTOR)*width); + memset(vrow0, 0xED, sizeof(XMVECTOR)*width); + memset(vrow1, 0xFD, sizeof(XMVECTOR)*width); + #endif + + if (depth > 1) + { + // 3D linear filter + const size_t ndepth = depth >> 1; + CreateLinearFilter(depth, ndepth, (filter & TEX_FILTER_WRAP_W) != 0, lfZ); + + for (size_t slice = 0; slice < ndepth; ++slice) + { + auto const& toZ = lfZ[slice]; + + const Image* srca = mipChain.GetImage(level - 1, 0, toZ.u0); + const Image* srcb = mipChain.GetImage(level - 1, 0, toZ.u1); + if (!srca || !srcb) + return E_POINTER; + + size_t u0 = size_t(-1); + size_t u1 = size_t(-1); + + const Image* dest = mipChain.GetImage(level, 0, slice); + if (!dest) + return E_POINTER; + + uint8_t* pDest = dest->pixels; + + for (size_t y = 0; y < nheight; ++y) + { + auto const& toY = lfY[y]; + + if (toY.u0 != u0) + { + if (toY.u0 != u1) + { + u0 = toY.u0; + + if (!LoadScanlineLinear(urow0, width, srca->pixels + (srca->rowPitch * u0), srca->rowPitch, srca->format, filter) + || !LoadScanlineLinear(vrow0, width, srcb->pixels + (srcb->rowPitch * u0), srcb->rowPitch, srcb->format, filter)) + return E_FAIL; + } + else + { + u0 = u1; + u1 = size_t(-1); + + std::swap(urow0, urow1); + std::swap(vrow0, vrow1); + } + } + + if (toY.u1 != u1) + { + u1 = toY.u1; + + if (!LoadScanlineLinear(urow1, width, srca->pixels + (srca->rowPitch * u1), srca->rowPitch, srca->format, filter) + || !LoadScanlineLinear(vrow1, width, srcb->pixels + (srcb->rowPitch * u1), srcb->rowPitch, srcb->format, filter)) + return E_FAIL; + } + + for (size_t x = 0; x < nwidth; ++x) + { + auto const& toX = lfX[x]; + + TRILINEAR_INTERPOLATE(target[x], toX, toY, toZ, urow0, urow1, vrow0, vrow1) + } + + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, target, nwidth, filter)) + return E_FAIL; + pDest += dest->rowPitch; + } + } + } + else + { + // 2D linear filter + const Image* src = mipChain.GetImage(level - 1, 0, 0); + const Image* dest = mipChain.GetImage(level, 0, 0); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + uint8_t* pDest = dest->pixels; + + const size_t rowPitch = src->rowPitch; + + size_t u0 = size_t(-1); + size_t u1 = size_t(-1); + + for (size_t y = 0; y < nheight; ++y) + { + auto const& toY = lfY[y]; + + if (toY.u0 != u0) + { + if (toY.u0 != u1) + { + u0 = toY.u0; + + if (!LoadScanlineLinear(urow0, width, pSrc + (rowPitch * u0), rowPitch, src->format, filter)) + return E_FAIL; + } + else + { + u0 = u1; + u1 = size_t(-1); + + std::swap(urow0, urow1); + } + } + + if (toY.u1 != u1) + { + u1 = toY.u1; + + if (!LoadScanlineLinear(urow1, width, pSrc + (rowPitch * u1), rowPitch, src->format, filter)) + return E_FAIL; + } + + for (size_t x = 0; x < nwidth; ++x) + { + auto const& toX = lfX[x]; + + BILINEAR_INTERPOLATE(target[x], toX, toY, urow0, urow1) + } + + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, target, nwidth, filter)) + return E_FAIL; + pDest += dest->rowPitch; + } + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + + if (depth > 1) + depth >>= 1; + } + + return S_OK; + } + + + //--- 3D Cubic Filter --- + HRESULT Generate3DMipsCubicFilter(size_t depth, size_t levels, TEX_FILTER_FLAGS filter, const ScratchImage& mipChain) noexcept + { + using namespace DirectX::Filters; + + if (!depth || !mipChain.GetImages()) + return E_INVALIDARG; + + if (depth > INT16_MAX) + return E_INVALIDARG; + + // This assumes that the base images are already placed into the mipChain at the top level... (see _Setup3DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + // Allocate temporary space (17 scanlines, plus X/Y/Z filters) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 17); + if (!scanline) + return E_OUTOFMEMORY; + + std::unique_ptr cf(new (std::nothrow) CubicFilter[width + height + depth]); + if (!cf) + return E_OUTOFMEMORY; + + CubicFilter* cfX = cf.get(); + CubicFilter* cfY = cf.get() + width; + CubicFilter* cfZ = cf.get() + width + height; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* urow[4]; + XMVECTOR* vrow[4]; + XMVECTOR* srow[4]; + XMVECTOR* trow[4]; + + XMVECTOR *ptr = scanline.get() + width; + for (size_t j = 0; j < 4; ++j) + { + urow[j] = ptr; ptr += width; + vrow[j] = ptr; ptr += width; + srow[j] = ptr; ptr += width; + trow[j] = ptr; ptr += width; + } + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + CreateCubicFilter(width, nwidth, (filter & TEX_FILTER_WRAP_U) != 0, (filter & TEX_FILTER_MIRROR_U) != 0, cfX); + + const size_t nheight = (height > 1) ? (height >> 1) : 1; + CreateCubicFilter(height, nheight, (filter & TEX_FILTER_WRAP_V) != 0, (filter & TEX_FILTER_MIRROR_V) != 0, cfY); + + #ifdef _DEBUG + for (size_t j = 0; j < 4; ++j) + { + memset(urow[j], 0xCD, sizeof(XMVECTOR)*width); + memset(vrow[j], 0xDD, sizeof(XMVECTOR)*width); + memset(srow[j], 0xED, sizeof(XMVECTOR)*width); + memset(trow[j], 0xFD, sizeof(XMVECTOR)*width); + } + #endif + + if (depth > 1) + { + // 3D cubic filter + const size_t ndepth = depth >> 1; + CreateCubicFilter(depth, ndepth, (filter & TEX_FILTER_WRAP_W) != 0, (filter & TEX_FILTER_MIRROR_W) != 0, cfZ); + + for (size_t slice = 0; slice < ndepth; ++slice) + { + auto const& toZ = cfZ[slice]; + + const Image* srca = mipChain.GetImage(level - 1, 0, toZ.u0); + const Image* srcb = mipChain.GetImage(level - 1, 0, toZ.u1); + const Image* srcc = mipChain.GetImage(level - 1, 0, toZ.u2); + const Image* srcd = mipChain.GetImage(level - 1, 0, toZ.u3); + if (!srca || !srcb || !srcc || !srcd) + return E_POINTER; + + size_t u0 = size_t(-1); + size_t u1 = size_t(-1); + size_t u2 = size_t(-1); + size_t u3 = size_t(-1); + + const Image* dest = mipChain.GetImage(level, 0, slice); + if (!dest) + return E_POINTER; + + uint8_t* pDest = dest->pixels; + + for (size_t y = 0; y < nheight; ++y) + { + auto const& toY = cfY[y]; + + // Scanline 1 + if (toY.u0 != u0) + { + if (toY.u0 != u1 && toY.u0 != u2 && toY.u0 != u3) + { + u0 = toY.u0; + + if (!LoadScanlineLinear(urow[0], width, srca->pixels + (srca->rowPitch * u0), srca->rowPitch, srca->format, filter) + || !LoadScanlineLinear(urow[1], width, srcb->pixels + (srcb->rowPitch * u0), srcb->rowPitch, srcb->format, filter) + || !LoadScanlineLinear(urow[2], width, srcc->pixels + (srcc->rowPitch * u0), srcc->rowPitch, srcc->format, filter) + || !LoadScanlineLinear(urow[3], width, srcd->pixels + (srcd->rowPitch * u0), srcd->rowPitch, srcd->format, filter)) + return E_FAIL; + } + else if (toY.u0 == u1) + { + u0 = u1; + u1 = size_t(-1); + + std::swap(urow[0], vrow[0]); + std::swap(urow[1], vrow[1]); + std::swap(urow[2], vrow[2]); + std::swap(urow[3], vrow[3]); + } + else if (toY.u0 == u2) + { + u0 = u2; + u2 = size_t(-1); + + std::swap(urow[0], srow[0]); + std::swap(urow[1], srow[1]); + std::swap(urow[2], srow[2]); + std::swap(urow[3], srow[3]); + } + else if (toY.u0 == u3) + { + u0 = u3; + u3 = size_t(-1); + + std::swap(urow[0], trow[0]); + std::swap(urow[1], trow[1]); + std::swap(urow[2], trow[2]); + std::swap(urow[3], trow[3]); + } + } + + // Scanline 2 + if (toY.u1 != u1) + { + if (toY.u1 != u2 && toY.u1 != u3) + { + u1 = toY.u1; + + if (!LoadScanlineLinear(vrow[0], width, srca->pixels + (srca->rowPitch * u1), srca->rowPitch, srca->format, filter) + || !LoadScanlineLinear(vrow[1], width, srcb->pixels + (srcb->rowPitch * u1), srcb->rowPitch, srcb->format, filter) + || !LoadScanlineLinear(vrow[2], width, srcc->pixels + (srcc->rowPitch * u1), srcc->rowPitch, srcc->format, filter) + || !LoadScanlineLinear(vrow[3], width, srcd->pixels + (srcd->rowPitch * u1), srcd->rowPitch, srcd->format, filter)) + return E_FAIL; + } + else if (toY.u1 == u2) + { + u1 = u2; + u2 = size_t(-1); + + std::swap(vrow[0], srow[0]); + std::swap(vrow[1], srow[1]); + std::swap(vrow[2], srow[2]); + std::swap(vrow[3], srow[3]); + } + else if (toY.u1 == u3) + { + u1 = u3; + u3 = size_t(-1); + + std::swap(vrow[0], trow[0]); + std::swap(vrow[1], trow[1]); + std::swap(vrow[2], trow[2]); + std::swap(vrow[3], trow[3]); + } + } + + // Scanline 3 + if (toY.u2 != u2) + { + if (toY.u2 != u3) + { + u2 = toY.u2; + + if (!LoadScanlineLinear(srow[0], width, srca->pixels + (srca->rowPitch * u2), srca->rowPitch, srca->format, filter) + || !LoadScanlineLinear(srow[1], width, srcb->pixels + (srcb->rowPitch * u2), srcb->rowPitch, srcb->format, filter) + || !LoadScanlineLinear(srow[2], width, srcc->pixels + (srcc->rowPitch * u2), srcc->rowPitch, srcc->format, filter) + || !LoadScanlineLinear(srow[3], width, srcd->pixels + (srcd->rowPitch * u2), srcd->rowPitch, srcd->format, filter)) + return E_FAIL; + } + else + { + u2 = u3; + u3 = size_t(-1); + + std::swap(srow[0], trow[0]); + std::swap(srow[1], trow[1]); + std::swap(srow[2], trow[2]); + std::swap(srow[3], trow[3]); + } + } + + // Scanline 4 + if (toY.u3 != u3) + { + u3 = toY.u3; + + if (!LoadScanlineLinear(trow[0], width, srca->pixels + (srca->rowPitch * u3), srca->rowPitch, srca->format, filter) + || !LoadScanlineLinear(trow[1], width, srcb->pixels + (srcb->rowPitch * u3), srcb->rowPitch, srcb->format, filter) + || !LoadScanlineLinear(trow[2], width, srcc->pixels + (srcc->rowPitch * u3), srcc->rowPitch, srcc->format, filter) + || !LoadScanlineLinear(trow[3], width, srcd->pixels + (srcd->rowPitch * u3), srcd->rowPitch, srcd->format, filter)) + return E_FAIL; + } + + for (size_t x = 0; x < nwidth; ++x) + { + auto const& toX = cfX[x]; + + XMVECTOR D[4]; + + for (size_t j = 0; j < 4; ++j) + { + XMVECTOR C0, C1, C2, C3; + CUBIC_INTERPOLATE(C0, toX.x, urow[j][toX.u0], urow[j][toX.u1], urow[j][toX.u2], urow[j][toX.u3]); + CUBIC_INTERPOLATE(C1, toX.x, vrow[j][toX.u0], vrow[j][toX.u1], vrow[j][toX.u2], vrow[j][toX.u3]); + CUBIC_INTERPOLATE(C2, toX.x, srow[j][toX.u0], srow[j][toX.u1], srow[j][toX.u2], srow[j][toX.u3]); + CUBIC_INTERPOLATE(C3, toX.x, trow[j][toX.u0], trow[j][toX.u1], trow[j][toX.u2], trow[j][toX.u3]); + + CUBIC_INTERPOLATE(D[j], toY.x, C0, C1, C2, C3); + } + + CUBIC_INTERPOLATE(target[x], toZ.x, D[0], D[1], D[2], D[3]); + } + + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, target, nwidth, filter)) + return E_FAIL; + pDest += dest->rowPitch; + } + } + } + else + { + // 2D cubic filter + const Image* src = mipChain.GetImage(level - 1, 0, 0); + const Image* dest = mipChain.GetImage(level, 0, 0); + + if (!src || !dest) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + uint8_t* pDest = dest->pixels; + + const size_t rowPitch = src->rowPitch; + + size_t u0 = size_t(-1); + size_t u1 = size_t(-1); + size_t u2 = size_t(-1); + size_t u3 = size_t(-1); + + for (size_t y = 0; y < nheight; ++y) + { + auto const& toY = cfY[y]; + + // Scanline 1 + if (toY.u0 != u0) + { + if (toY.u0 != u1 && toY.u0 != u2 && toY.u0 != u3) + { + u0 = toY.u0; + + if (!LoadScanlineLinear(urow[0], width, pSrc + (rowPitch * u0), rowPitch, src->format, filter)) + return E_FAIL; + } + else if (toY.u0 == u1) + { + u0 = u1; + u1 = size_t(-1); + + std::swap(urow[0], vrow[0]); + } + else if (toY.u0 == u2) + { + u0 = u2; + u2 = size_t(-1); + + std::swap(urow[0], srow[0]); + } + else if (toY.u0 == u3) + { + u0 = u3; + u3 = size_t(-1); + + std::swap(urow[0], trow[0]); + } + } + + // Scanline 2 + if (toY.u1 != u1) + { + if (toY.u1 != u2 && toY.u1 != u3) + { + u1 = toY.u1; + + if (!LoadScanlineLinear(vrow[0], width, pSrc + (rowPitch * u1), rowPitch, src->format, filter)) + return E_FAIL; + } + else if (toY.u1 == u2) + { + u1 = u2; + u2 = size_t(-1); + + std::swap(vrow[0], srow[0]); + } + else if (toY.u1 == u3) + { + u1 = u3; + u3 = size_t(-1); + + std::swap(vrow[0], trow[0]); + } + } + + // Scanline 3 + if (toY.u2 != u2) + { + if (toY.u2 != u3) + { + u2 = toY.u2; + + if (!LoadScanlineLinear(srow[0], width, pSrc + (rowPitch * u2), rowPitch, src->format, filter)) + return E_FAIL; + } + else + { + u2 = u3; + u3 = size_t(-1); + + std::swap(srow[0], trow[0]); + } + } + + // Scanline 4 + if (toY.u3 != u3) + { + u3 = toY.u3; + + if (!LoadScanlineLinear(trow[0], width, pSrc + (rowPitch * u3), rowPitch, src->format, filter)) + return E_FAIL; + } + + for (size_t x = 0; x < nwidth; ++x) + { + auto const& toX = cfX[x]; + + XMVECTOR C0, C1, C2, C3; + CUBIC_INTERPOLATE(C0, toX.x, urow[0][toX.u0], urow[0][toX.u1], urow[0][toX.u2], urow[0][toX.u3]); + CUBIC_INTERPOLATE(C1, toX.x, vrow[0][toX.u0], vrow[0][toX.u1], vrow[0][toX.u2], vrow[0][toX.u3]); + CUBIC_INTERPOLATE(C2, toX.x, srow[0][toX.u0], srow[0][toX.u1], srow[0][toX.u2], srow[0][toX.u3]); + CUBIC_INTERPOLATE(C3, toX.x, trow[0][toX.u0], trow[0][toX.u1], trow[0][toX.u2], trow[0][toX.u3]); + + CUBIC_INTERPOLATE(target[x], toY.x, C0, C1, C2, C3); + } + + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, target, nwidth, filter)) + return E_FAIL; + pDest += dest->rowPitch; + } + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + + if (depth > 1) + depth >>= 1; + } + + return S_OK; + } + + + //--- 3D Triangle Filter --- + HRESULT Generate3DMipsTriangleFilter(size_t depth, size_t levels, TEX_FILTER_FLAGS filter, const ScratchImage& mipChain) noexcept + { + using namespace DirectX::Filters; + + if (!depth || !mipChain.GetImages()) + return E_INVALIDARG; + + if (depth > INT16_MAX) + return E_INVALIDARG; + + // This assumes that the base images are already placed into the mipChain at the top level... (see _Setup3DMips) + + assert(levels > 1); + + size_t width = mipChain.GetMetadata().width; + size_t height = mipChain.GetMetadata().height; + + // Allocate initial temporary space (1 scanline, accumulation rows, plus X/Y/Z filters) + auto scanline = make_AlignedArrayXMVECTOR(width); + if (!scanline) + return E_OUTOFMEMORY; + + std::unique_ptr sliceActive(new (std::nothrow) TriangleRow[depth]); + if (!sliceActive) + return E_OUTOFMEMORY; + + TriangleRow * sliceFree = nullptr; + + std::unique_ptr tfX, tfY, tfZ; + + XMVECTOR* row = scanline.get(); + + // Resize base image to each target mip level + for (size_t level = 1; level < levels; ++level) + { + const size_t nwidth = (width > 1) ? (width >> 1) : 1; + HRESULT hr = CreateTriangleFilter(width, nwidth, (filter & TEX_FILTER_WRAP_U) != 0, tfX); + if (FAILED(hr)) + return hr; + + const size_t nheight = (height > 1) ? (height >> 1) : 1; + hr = CreateTriangleFilter(height, nheight, (filter & TEX_FILTER_WRAP_V) != 0, tfY); + if (FAILED(hr)) + return hr; + + const size_t ndepth = (depth > 1) ? (depth >> 1) : 1; + hr = CreateTriangleFilter(depth, ndepth, (filter & TEX_FILTER_WRAP_W) != 0, tfZ); + if (FAILED(hr)) + return hr; + + #ifdef _DEBUG + memset(row, 0xCD, sizeof(XMVECTOR)*width); + #endif + + auto xFromEnd = reinterpret_cast(reinterpret_cast(tfX.get()) + tfX->sizeInBytes); + auto yFromEnd = reinterpret_cast(reinterpret_cast(tfY.get()) + tfY->sizeInBytes); + auto zFromEnd = reinterpret_cast(reinterpret_cast(tfZ.get()) + tfZ->sizeInBytes); + + // Count times slices get written (and clear out any leftover accumulation slices from last miplevel) + for (FilterFrom* zFrom = tfZ->from; zFrom < zFromEnd; ) + { + for (size_t j = 0; j < zFrom->count; ++j) + { + const size_t w = zFrom->to[j].u; + assert(w < ndepth); + TriangleRow* sliceAcc = &sliceActive[w]; + + ++sliceAcc->remaining; + + if (sliceAcc->scanline) + { + memset(sliceAcc->scanline.get(), 0, sizeof(XMVECTOR) * nwidth * nheight); + } + } + + zFrom = reinterpret_cast(reinterpret_cast(zFrom) + zFrom->sizeInBytes); + } + + // Filter image + size_t z = 0; + for (FilterFrom* zFrom = tfZ->from; zFrom < zFromEnd; ++z) + { + // Create accumulation slices as needed + for (size_t j = 0; j < zFrom->count; ++j) + { + const size_t w = zFrom->to[j].u; + assert(w < ndepth); + TriangleRow* sliceAcc = &sliceActive[w]; + + if (!sliceAcc->scanline) + { + if (sliceFree) + { + // Steal and reuse scanline from 'free slice' list + // (it will always be at least as large as nwidth*nheight due to loop decending order) + assert(sliceFree->scanline != nullptr); + sliceAcc->scanline.reset(sliceFree->scanline.release()); + sliceFree = sliceFree->next; + } + else + { + auto nscanline = make_AlignedArrayXMVECTOR(uint64_t(nwidth) * uint64_t(nheight)); + if (!nscanline) + return E_OUTOFMEMORY; + sliceAcc->scanline.swap(nscanline); + } + + memset(sliceAcc->scanline.get(), 0, sizeof(XMVECTOR) * nwidth * nheight); + } + } + + assert(z < depth); + const Image* src = mipChain.GetImage(level - 1, 0, z); + if (!src) + return E_POINTER; + + const uint8_t* pSrc = src->pixels; + const size_t rowPitch = src->rowPitch; + const uint8_t* pEndSrc = pSrc + rowPitch * height; + + for (FilterFrom* yFrom = tfY->from; yFrom < yFromEnd; ) + { + // Load source scanline + if ((pSrc + rowPitch) > pEndSrc) + return E_FAIL; + + if (!LoadScanlineLinear(row, width, pSrc, rowPitch, src->format, filter)) + return E_FAIL; + + pSrc += rowPitch; + + // Process row + size_t x = 0; + for (FilterFrom* xFrom = tfX->from; xFrom < xFromEnd; ++x) + { + for (size_t j = 0; j < zFrom->count; ++j) + { + const size_t w = zFrom->to[j].u; + assert(w < ndepth); + const float zweight = zFrom->to[j].weight; + + XMVECTOR* accSlice = sliceActive[w].scanline.get(); + if (!accSlice) + return E_POINTER; + + for (size_t k = 0; k < yFrom->count; ++k) + { + size_t v = yFrom->to[k].u; + assert(v < nheight); + const float yweight = yFrom->to[k].weight; + + XMVECTOR * accPtr = accSlice + v * nwidth; + + for (size_t l = 0; l < xFrom->count; ++l) + { + size_t u = xFrom->to[l].u; + assert(u < nwidth); + + const XMVECTOR weight = XMVectorReplicate(zweight * yweight * xFrom->to[l].weight); + + assert(x < width); + accPtr[u] = XMVectorMultiplyAdd(row[x], weight, accPtr[u]); + } + } + } + + xFrom = reinterpret_cast(reinterpret_cast(xFrom) + xFrom->sizeInBytes); + } + + yFrom = reinterpret_cast(reinterpret_cast(yFrom) + yFrom->sizeInBytes); + } + + // Write completed accumulation slices + for (size_t j = 0; j < zFrom->count; ++j) + { + const size_t w = zFrom->to[j].u; + assert(w < ndepth); + TriangleRow* sliceAcc = &sliceActive[w]; + + assert(sliceAcc->remaining > 0); + --sliceAcc->remaining; + + if (!sliceAcc->remaining) + { + const Image* dest = mipChain.GetImage(level, 0, w); + XMVECTOR* pAccSrc = sliceAcc->scanline.get(); + if (!dest || !pAccSrc) + return E_POINTER; + + uint8_t* pDest = dest->pixels; + + for (size_t h = 0; h < nheight; ++h) + { + switch (dest->format) + { + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + { + // Need to slightly bias results for floating-point error accumulation which can + // be visible with harshly quantized values + static const XMVECTORF32 Bias = { { { 0.f, 0.f, 0.f, 0.1f } } }; + + XMVECTOR* ptr = pAccSrc; + for (size_t i = 0; i < dest->width; ++i, ++ptr) + { + *ptr = XMVectorAdd(*ptr, Bias); + } + } + break; + + default: + break; + } + + // This performs any required clamping + if (!StoreScanlineLinear(pDest, dest->rowPitch, dest->format, pAccSrc, dest->width, filter)) + return E_FAIL; + + pDest += dest->rowPitch; + pAccSrc += nwidth; + } + + // Put slice on freelist to reuse it's allocated scanline + sliceAcc->next = sliceFree; + sliceFree = sliceAcc; + } + } + + zFrom = reinterpret_cast(reinterpret_cast(zFrom) + zFrom->sizeInBytes); + } + + if (height > 1) + height >>= 1; + + if (width > 1) + width >>= 1; + + if (depth > 1) + depth >>= 1; + } + + return S_OK; + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Generate mipmap chain +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::GenerateMipMaps( + const Image& baseImage, + TEX_FILTER_FLAGS filter, + size_t levels, + ScratchImage& mipChain, + bool allow1D) noexcept +{ + if (!IsValid(baseImage.format)) + return E_INVALIDARG; + + if (!baseImage.pixels) + return E_POINTER; + + if (!CalculateMipLevels(baseImage.width, baseImage.height, levels)) + return E_INVALIDARG; + + if (levels <= 1) + return E_INVALIDARG; + + if (IsCompressed(baseImage.format) || IsTypeless(baseImage.format) || IsPlanar(baseImage.format) || IsPalettized(baseImage.format)) + { + return HRESULT_E_NOT_SUPPORTED; + } + + HRESULT hr = E_UNEXPECTED; + + static_assert(TEX_FILTER_POINT == 0x100000, "TEX_FILTER_ flag values don't match TEX_FILTER_MODE_MASK"); + +#ifdef _WIN32 + bool usewic = UseWICFiltering(baseImage.format, filter); + + WICPixelFormatGUID pfGUID = {}; + const bool wicpf = (usewic) ? DXGIToWIC(baseImage.format, pfGUID, true) : false; + + if (usewic && !wicpf) + { + // Check to see if the source and/or result size is too big for WIC + const uint64_t expandedSize = uint64_t(std::max(1, baseImage.width >> 1)) * uint64_t(std::max(1, baseImage.height >> 1)) * sizeof(float) * 4; + const uint64_t expandedSize2 = uint64_t(baseImage.width) * uint64_t(baseImage.height) * sizeof(float) * 4; + if (expandedSize > UINT32_MAX || expandedSize2 > UINT32_MAX) + { + if (filter & TEX_FILTER_FORCE_WIC) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + usewic = false; + } + } + + if (usewic) + { + //--- Use WIC filtering to generate mipmaps ----------------------------------- + switch (filter & TEX_FILTER_MODE_MASK) + { + case 0: + case TEX_FILTER_POINT: + case TEX_FILTER_FANT: // Equivalent to Box filter + case TEX_FILTER_LINEAR: + case TEX_FILTER_CUBIC: + { + static_assert(TEX_FILTER_FANT == TEX_FILTER_BOX, "TEX_FILTER_ flag alias mismatch"); + + if (wicpf) + { + // Case 1: Base image format is supported by Windows Imaging Component + hr = (baseImage.height > 1 || !allow1D) + ? mipChain.Initialize2D(baseImage.format, baseImage.width, baseImage.height, 1, levels) + : mipChain.Initialize1D(baseImage.format, baseImage.width, 1, levels); + if (FAILED(hr)) + return hr; + + return GenerateMipMapsUsingWIC(baseImage, filter, levels, pfGUID, mipChain, 0); + } + else + { + // Case 2: Base image format is not supported by WIC, so we have to convert, generate, and convert back + assert(baseImage.format != DXGI_FORMAT_R32G32B32A32_FLOAT); + ScratchImage temp; + hr = ConvertToR32G32B32A32(baseImage, temp); + if (FAILED(hr)) + return hr; + + const Image *timg = temp.GetImage(0, 0, 0); + if (!timg) + return E_POINTER; + + ScratchImage tMipChain; + hr = (baseImage.height > 1 || !allow1D) + ? tMipChain.Initialize2D(DXGI_FORMAT_R32G32B32A32_FLOAT, baseImage.width, baseImage.height, 1, levels) + : tMipChain.Initialize1D(DXGI_FORMAT_R32G32B32A32_FLOAT, baseImage.width, 1, levels); + if (FAILED(hr)) + return hr; + + hr = GenerateMipMapsUsingWIC(*timg, filter, levels, GUID_WICPixelFormat128bppRGBAFloat, tMipChain, 0); + if (FAILED(hr)) + return hr; + + temp.Release(); + + return ConvertFromR32G32B32A32(tMipChain.GetImages(), tMipChain.GetImageCount(), tMipChain.GetMetadata(), baseImage.format, mipChain); + } + } + + default: + return HRESULT_E_NOT_SUPPORTED; + } + } + else + #endif // WIN32 + { + //--- Use custom filters to generate mipmaps ---------------------------------- + TexMetadata mdata = {}; + mdata.width = baseImage.width; + if (baseImage.height > 1 || !allow1D) + { + mdata.height = baseImage.height; + mdata.dimension = TEX_DIMENSION_TEXTURE2D; + } + else + { + mdata.height = 1; + mdata.dimension = TEX_DIMENSION_TEXTURE1D; + } + mdata.depth = mdata.arraySize = 1; + mdata.mipLevels = levels; + mdata.format = baseImage.format; + + uint32_t filter_select = (filter & TEX_FILTER_MODE_MASK); + if (!filter_select) + { + // Default filter choice + filter_select = (ispow2(baseImage.width) && ispow2(baseImage.height)) ? TEX_FILTER_BOX : TEX_FILTER_LINEAR; + } + + switch (filter_select) + { + case TEX_FILTER_BOX: + hr = Setup2DMips(&baseImage, 1, mdata, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate2DMipsBoxFilter(levels, filter, mipChain, 0); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_POINT: + hr = Setup2DMips(&baseImage, 1, mdata, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate2DMipsPointFilter(levels, mipChain, 0); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_LINEAR: + hr = Setup2DMips(&baseImage, 1, mdata, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate2DMipsLinearFilter(levels, filter, mipChain, 0); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_CUBIC: + hr = Setup2DMips(&baseImage, 1, mdata, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate2DMipsCubicFilter(levels, filter, mipChain, 0); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_TRIANGLE: + hr = Setup2DMips(&baseImage, 1, mdata, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate2DMipsTriangleFilter(levels, filter, mipChain, 0); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + } +} + +_Use_decl_annotations_ +HRESULT DirectX::GenerateMipMaps( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + TEX_FILTER_FLAGS filter, + size_t levels, + ScratchImage& mipChain) +{ + if (!srcImages || !nimages || !IsValid(metadata.format)) + return E_INVALIDARG; + + if (metadata.IsVolumemap() + || IsCompressed(metadata.format) || IsTypeless(metadata.format) || IsPlanar(metadata.format) || IsPalettized(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + if (!CalculateMipLevels(metadata.width, metadata.height, levels)) + return E_INVALIDARG; + + if (levels <= 1) + return E_INVALIDARG; + + std::vector baseImages; + baseImages.reserve(metadata.arraySize); + for (size_t item = 0; item < metadata.arraySize; ++item) + { + const size_t index = metadata.ComputeIndex(0, item, 0); + if (index >= nimages) + return E_FAIL; + + const Image& src = srcImages[index]; + if (!src.pixels) + return E_POINTER; + + if (src.format != metadata.format || src.width != metadata.width || src.height != metadata.height) + { + // All base images must be the same format, width, and height + return E_FAIL; + } + + baseImages.push_back(src); + } + + assert(baseImages.size() == metadata.arraySize); + + HRESULT hr = E_UNEXPECTED; + + if (baseImages.empty()) + return hr; + + static_assert(TEX_FILTER_POINT == 0x100000, "TEX_FILTER_ flag values don't match TEX_FILTER_MODE_MASK"); + +#ifdef _WIN32 + bool usewic = !metadata.IsPMAlpha() && UseWICFiltering(metadata.format, filter); + + WICPixelFormatGUID pfGUID = {}; + const bool wicpf = (usewic) ? DXGIToWIC(metadata.format, pfGUID, true) : false; + + if (usewic && !wicpf) + { + // Check to see if the source and/or result size is too big for WIC + const uint64_t expandedSize = uint64_t(std::max(1, metadata.width >> 1)) * uint64_t(std::max(1, metadata.height >> 1)) * sizeof(float) * 4; + const uint64_t expandedSize2 = uint64_t(metadata.width) * uint64_t(metadata.height) * sizeof(float) * 4; + if (expandedSize > UINT32_MAX || expandedSize2 > UINT32_MAX) + { + if (filter & TEX_FILTER_FORCE_WIC) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + usewic = false; + } + } + + if (usewic) + { + //--- Use WIC filtering to generate mipmaps ----------------------------------- + switch (filter & TEX_FILTER_MODE_MASK) + { + case 0: + case TEX_FILTER_POINT: + case TEX_FILTER_FANT: // Equivalent to Box filter + case TEX_FILTER_LINEAR: + case TEX_FILTER_CUBIC: + { + static_assert(TEX_FILTER_FANT == TEX_FILTER_BOX, "TEX_FILTER_ flag alias mismatch"); + + if (wicpf) + { + // Case 1: Base image format is supported by Windows Imaging Component + TexMetadata mdata2 = metadata; + mdata2.mipLevels = levels; + hr = mipChain.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + hr = GenerateMipMapsUsingWIC(baseImages[item], filter, levels, pfGUID, mipChain, item); + if (FAILED(hr)) + { + mipChain.Release(); + return hr; + } + } + + return S_OK; + } + else + { + // Case 2: Base image format is not supported by WIC, so we have to convert, generate, and convert back + assert(metadata.format != DXGI_FORMAT_R32G32B32A32_FLOAT); + + TexMetadata mdata2 = metadata; + mdata2.mipLevels = levels; + mdata2.format = DXGI_FORMAT_R32G32B32A32_FLOAT; + ScratchImage tMipChain; + hr = tMipChain.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + ScratchImage temp; + hr = ConvertToR32G32B32A32(baseImages[item], temp); + if (FAILED(hr)) + return hr; + + const Image *timg = temp.GetImage(0, 0, 0); + if (!timg) + return E_POINTER; + + hr = GenerateMipMapsUsingWIC(*timg, filter, levels, GUID_WICPixelFormat128bppRGBAFloat, tMipChain, item); + if (FAILED(hr)) + return hr; + } + + return ConvertFromR32G32B32A32(tMipChain.GetImages(), tMipChain.GetImageCount(), tMipChain.GetMetadata(), metadata.format, mipChain); + } + } + + default: + return HRESULT_E_NOT_SUPPORTED; + } + } + else + #endif // WIN32 + { + //--- Use custom filters to generate mipmaps ---------------------------------- + TexMetadata mdata2 = metadata; + mdata2.mipLevels = levels; + + uint32_t filter_select = (filter & TEX_FILTER_MODE_MASK); + if (!filter_select) + { + // Default filter choice + filter_select = (ispow2(metadata.width) && ispow2(metadata.height)) ? TEX_FILTER_BOX : TEX_FILTER_LINEAR; + } + + switch (filter_select) + { + case TEX_FILTER_BOX: + hr = Setup2DMips(&baseImages[0], metadata.arraySize, mdata2, mipChain); + if (FAILED(hr)) + return hr; + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + hr = Generate2DMipsBoxFilter(levels, filter, mipChain, item); + if (FAILED(hr)) + mipChain.Release(); + } + return hr; + + case TEX_FILTER_POINT: + hr = Setup2DMips(&baseImages[0], metadata.arraySize, mdata2, mipChain); + if (FAILED(hr)) + return hr; + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + hr = Generate2DMipsPointFilter(levels, mipChain, item); + if (FAILED(hr)) + mipChain.Release(); + } + return hr; + + case TEX_FILTER_LINEAR: + hr = Setup2DMips(&baseImages[0], metadata.arraySize, mdata2, mipChain); + if (FAILED(hr)) + return hr; + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + hr = Generate2DMipsLinearFilter(levels, filter, mipChain, item); + if (FAILED(hr)) + mipChain.Release(); + } + return hr; + + case TEX_FILTER_CUBIC: + hr = Setup2DMips(&baseImages[0], metadata.arraySize, mdata2, mipChain); + if (FAILED(hr)) + return hr; + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + hr = Generate2DMipsCubicFilter(levels, filter, mipChain, item); + if (FAILED(hr)) + mipChain.Release(); + } + return hr; + + case TEX_FILTER_TRIANGLE: + hr = Setup2DMips(&baseImages[0], metadata.arraySize, mdata2, mipChain); + if (FAILED(hr)) + return hr; + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + hr = Generate2DMipsTriangleFilter(levels, filter, mipChain, item); + if (FAILED(hr)) + mipChain.Release(); + } + return hr; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + } +} + + +//------------------------------------------------------------------------------------- +// Generate mipmap chain for volume texture +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::GenerateMipMaps3D( + const Image* baseImages, + size_t depth, + TEX_FILTER_FLAGS filter, + size_t levels, + ScratchImage& mipChain) noexcept +{ + if (!baseImages || !depth) + return E_INVALIDARG; + + if (depth > INT16_MAX) + return E_INVALIDARG; + + if (filter & TEX_FILTER_FORCE_WIC) + return HRESULT_E_NOT_SUPPORTED; + + const DXGI_FORMAT format = baseImages[0].format; + const size_t width = baseImages[0].width; + const size_t height = baseImages[0].height; + + if (!CalculateMipLevels3D(width, height, depth, levels)) + return E_INVALIDARG; + + if (levels <= 1) + return E_INVALIDARG; + + for (size_t slice = 0; slice < depth; ++slice) + { + if (!baseImages[slice].pixels) + return E_POINTER; + + if (baseImages[slice].format != format || baseImages[slice].width != width || baseImages[slice].height != height) + { + // All base images must be the same format, width, and height + return E_FAIL; + } + } + + if (IsCompressed(format) || IsTypeless(format) || IsPlanar(format) || IsPalettized(format)) + return HRESULT_E_NOT_SUPPORTED; + + static_assert(TEX_FILTER_POINT == 0x100000, "TEX_FILTER_ flag values don't match TEX_FILTER_MODE_MASK"); + + HRESULT hr = E_UNEXPECTED; + + uint32_t filter_select = (filter & TEX_FILTER_MODE_MASK); + if (!filter_select) + { + // Default filter choice + filter_select = (ispow2(width) && ispow2(height) && ispow2(depth)) ? TEX_FILTER_BOX : TEX_FILTER_TRIANGLE; + } + + switch (filter_select) + { + case TEX_FILTER_BOX: + hr = Setup3DMips(baseImages, depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsBoxFilter(depth, levels, filter, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_POINT: + hr = Setup3DMips(baseImages, depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsPointFilter(depth, levels, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_LINEAR: + hr = Setup3DMips(baseImages, depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsLinearFilter(depth, levels, filter, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_CUBIC: + hr = Setup3DMips(baseImages, depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsCubicFilter(depth, levels, filter, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_TRIANGLE: + hr = Setup3DMips(baseImages, depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsTriangleFilter(depth, levels, filter, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + default: + return HRESULT_E_NOT_SUPPORTED; + } +} + +_Use_decl_annotations_ +HRESULT DirectX::GenerateMipMaps3D( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + TEX_FILTER_FLAGS filter, + size_t levels, + ScratchImage& mipChain) +{ + if (!srcImages || !nimages || !IsValid(metadata.format)) + return E_INVALIDARG; + + if (levels > INT16_MAX) + return E_INVALIDARG; + + if (filter & TEX_FILTER_FORCE_WIC) + return HRESULT_E_NOT_SUPPORTED; + + if (!metadata.IsVolumemap() + || IsCompressed(metadata.format) || IsTypeless(metadata.format) || IsPlanar(metadata.format) || IsPalettized(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + if (!CalculateMipLevels3D(metadata.width, metadata.height, metadata.depth, levels)) + return E_INVALIDARG; + + if (levels <= 1) + return E_INVALIDARG; + + std::vector baseImages; + baseImages.reserve(metadata.depth); + for (size_t slice = 0; slice < metadata.depth; ++slice) + { + const size_t index = metadata.ComputeIndex(0, 0, slice); + if (index >= nimages) + return E_FAIL; + + const Image& src = srcImages[index]; + if (!src.pixels) + return E_POINTER; + + if (src.format != metadata.format || src.width != metadata.width || src.height != metadata.height) + { + // All base images must be the same format, width, and height + return E_FAIL; + } + + baseImages.push_back(src); + } + + assert(baseImages.size() == metadata.depth); + + HRESULT hr = E_UNEXPECTED; + + static_assert(TEX_FILTER_POINT == 0x100000, "TEX_FILTER_ flag values don't match TEX_FILTER_MODE_MASK"); + + uint32_t filter_select = (filter & TEX_FILTER_MODE_MASK); + if (!filter_select) + { + // Default filter choice + filter_select = (ispow2(metadata.width) && ispow2(metadata.height) && ispow2(metadata.depth)) ? TEX_FILTER_BOX : TEX_FILTER_TRIANGLE; + } + + switch (filter_select) + { + case TEX_FILTER_BOX: + hr = Setup3DMips(&baseImages[0], metadata.depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsBoxFilter(metadata.depth, levels, filter, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_POINT: + hr = Setup3DMips(&baseImages[0], metadata.depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsPointFilter(metadata.depth, levels, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_LINEAR: + hr = Setup3DMips(&baseImages[0], metadata.depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsLinearFilter(metadata.depth, levels, filter, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_CUBIC: + hr = Setup3DMips(&baseImages[0], metadata.depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsCubicFilter(metadata.depth, levels, filter, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + case TEX_FILTER_TRIANGLE: + hr = Setup3DMips(&baseImages[0], metadata.depth, levels, mipChain); + if (FAILED(hr)) + return hr; + + hr = Generate3DMipsTriangleFilter(metadata.depth, levels, filter, mipChain); + if (FAILED(hr)) + mipChain.Release(); + return hr; + + default: + return HRESULT_E_NOT_SUPPORTED; + } +} + +_Use_decl_annotations_ +HRESULT DirectX::ScaleMipMapsAlphaForCoverage( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + size_t item, + float alphaReference, + ScratchImage& mipChain) noexcept +{ + if (!srcImages || !nimages || !IsValid(metadata.format) || nimages > metadata.mipLevels || !mipChain.GetImages()) + return E_INVALIDARG; + + if (metadata.IsVolumemap() + || IsCompressed(metadata.format) || IsTypeless(metadata.format) || IsPlanar(metadata.format) || IsPalettized(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + if (srcImages[0].format != metadata.format || srcImages[0].width != metadata.width || srcImages[0].height != metadata.height) + { + // Base image must be the same format, width, and height + return E_FAIL; + } + + float targetCoverage = 0.0f; + HRESULT hr = CalculateAlphaCoverage(srcImages[0], alphaReference, 1.0f, targetCoverage); + if (FAILED(hr)) + return hr; + + // Copy base image + { + const Image& src = srcImages[0]; + + const Image *dest = mipChain.GetImage(0, item, 0); + if (!dest) + return E_POINTER; + + uint8_t* pDest = dest->pixels; + if (!pDest) + return E_POINTER; + + const uint8_t *pSrc = src.pixels; + const size_t rowPitch = src.rowPitch; + for (size_t h = 0; h < metadata.height; ++h) + { + const size_t msize = std::min(dest->rowPitch, rowPitch); + memcpy(pDest, pSrc, msize); + pSrc += rowPitch; + pDest += dest->rowPitch; + } + } + + for (size_t level = 1; level < metadata.mipLevels; ++level) + { + if (level >= nimages) + return E_FAIL; + + float alphaScale = 0.0f; + hr = EstimateAlphaScaleForCoverage(srcImages[level], alphaReference, targetCoverage, alphaScale); + if (FAILED(hr)) + return hr; + + const Image* mipImage = mipChain.GetImage(level, item, 0); + if (!mipImage) + return E_POINTER; + + hr = ScaleAlpha(srcImages[level], alphaScale, *mipImage); + if (FAILED(hr)) + return hr; + } + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexMisc.cpp b/external/DirectXTex/DirectXTexMisc.cpp new file mode 100644 index 00000000..1f3b9be8 --- /dev/null +++ b/external/DirectXTex/DirectXTexMisc.cpp @@ -0,0 +1,767 @@ +//------------------------------------------------------------------------------------- +// DirectXTexMisc.cpp +// +// DirectX Texture Library - Misc image operations +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +using namespace DirectX; +using namespace DirectX::Internal; + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wignored-attributes" +#endif + +namespace +{ + const XMVECTORF32 g_Gamma22 = { { { 2.2f, 2.2f, 2.2f, 1.f } } }; + + //------------------------------------------------------------------------------------- + HRESULT ComputeMSE_( + const Image& image1, + const Image& image2, + float& mse, + _Out_writes_opt_(4) float* mseV, + CMSE_FLAGS flags) noexcept + { + if (!image1.pixels || !image2.pixels) + return E_POINTER; + + assert(image1.width == image2.width && image1.height == image2.height); + assert(!IsCompressed(image1.format) && !IsCompressed(image2.format)); + + const size_t width = image1.width; + + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 2); + if (!scanline) + return E_OUTOFMEMORY; + + // Flags implied from image formats + switch (image1.format) + { + case DXGI_FORMAT_B8G8R8X8_UNORM: + flags |= CMSE_IGNORE_ALPHA; + break; + + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + flags |= CMSE_IMAGE1_SRGB | CMSE_IGNORE_ALPHA; + break; + + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_BC7_UNORM_SRGB: + flags |= CMSE_IMAGE1_SRGB; + break; + + default: + break; + } + + switch (image2.format) + { + case DXGI_FORMAT_B8G8R8X8_UNORM: + flags |= CMSE_IGNORE_ALPHA; + break; + + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + flags |= CMSE_IMAGE2_SRGB | CMSE_IGNORE_ALPHA; + break; + + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_BC7_UNORM_SRGB: + flags |= CMSE_IMAGE2_SRGB; + break; + + default: + break; + } + + const uint8_t *pSrc1 = image1.pixels; + const size_t rowPitch1 = image1.rowPitch; + + const uint8_t *pSrc2 = image2.pixels; + const size_t rowPitch2 = image2.rowPitch; + + XMVECTOR acc = g_XMZero; + static XMVECTORF32 two = { { { 2.0f, 2.0f, 2.0f, 2.0f } } }; + + for (size_t h = 0; h < image1.height; ++h) + { + XMVECTOR* ptr1 = scanline.get(); + if (!LoadScanline(ptr1, width, pSrc1, rowPitch1, image1.format)) + return E_FAIL; + + XMVECTOR* ptr2 = scanline.get() + width; + if (!LoadScanline(ptr2, width, pSrc2, rowPitch2, image2.format)) + return E_FAIL; + + for (size_t i = 0; i < width; ++i) + { + XMVECTOR v1 = *(ptr1++); + if (flags & CMSE_IMAGE1_SRGB) + { + v1 = XMVectorPow(v1, g_Gamma22); + } + if (flags & CMSE_IMAGE1_X2_BIAS) + { + v1 = XMVectorMultiplyAdd(v1, two, g_XMNegativeOne); + } + + XMVECTOR v2 = *(ptr2++); + if (flags & CMSE_IMAGE2_SRGB) + { + v2 = XMVectorPow(v2, g_Gamma22); + } + if (flags & CMSE_IMAGE2_X2_BIAS) + { + v2 = XMVectorMultiplyAdd(v2, two, g_XMNegativeOne); + } + + // sum[ (I1 - I2)^2 ] + XMVECTOR v = XMVectorSubtract(v1, v2); + if (flags & CMSE_IGNORE_RED) + { + v = XMVectorSelect(v, g_XMZero, g_XMMaskX); + } + if (flags & CMSE_IGNORE_GREEN) + { + v = XMVectorSelect(v, g_XMZero, g_XMMaskY); + } + if (flags & CMSE_IGNORE_BLUE) + { + v = XMVectorSelect(v, g_XMZero, g_XMMaskZ); + } + if (flags & CMSE_IGNORE_ALPHA) + { + v = XMVectorSelect(v, g_XMZero, g_XMMaskW); + } + + acc = XMVectorMultiplyAdd(v, v, acc); + } + + pSrc1 += rowPitch1; + pSrc2 += rowPitch2; + } + + // MSE = sum[ (I1 - I2)^2 ] / w*h + const XMVECTOR d = XMVectorReplicate(float(image1.width * image1.height)); + const XMVECTOR v = XMVectorDivide(acc, d); + if (mseV) + { + XMStoreFloat4(reinterpret_cast(mseV), v); + mse = mseV[0] + mseV[1] + mseV[2] + mseV[3]; + } + else + { + XMFLOAT4 _mseV; + XMStoreFloat4(&_mseV, v); + mse = _mseV.x + _mseV.y + _mseV.z + _mseV.w; + } + + return S_OK; + } + + //------------------------------------------------------------------------------------- + HRESULT EvaluateImage_( + const Image& image, + const std::function& pixelFunc) + { + if (!pixelFunc) + return E_INVALIDARG; + + if (!image.pixels) + return E_POINTER; + + assert(!IsCompressed(image.format)); + + const size_t width = image.width; + + auto scanline = make_AlignedArrayXMVECTOR(width); + if (!scanline) + return E_OUTOFMEMORY; + + const uint8_t *pSrc = image.pixels; + const size_t rowPitch = image.rowPitch; + + for (size_t h = 0; h < image.height; ++h) + { + if (!LoadScanline(scanline.get(), width, pSrc, rowPitch, image.format)) + return E_FAIL; + + pixelFunc(scanline.get(), width, h); + + pSrc += rowPitch; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + HRESULT TransformImage_( + const Image& srcImage, + const std::function& pixelFunc, + const Image& destImage) + { + if (!pixelFunc) + return E_INVALIDARG; + + if (!srcImage.pixels || !destImage.pixels) + return E_POINTER; + + if (srcImage.width != destImage.width || srcImage.height != destImage.height || srcImage.format != destImage.format) + return E_FAIL; + + const size_t width = srcImage.width; + + auto scanlines = make_AlignedArrayXMVECTOR(uint64_t(width) * 2); + if (!scanlines) + return E_OUTOFMEMORY; + + XMVECTOR* sScanline = scanlines.get(); + XMVECTOR* dScanline = scanlines.get() + width; + + const uint8_t *pSrc = srcImage.pixels; + const size_t spitch = srcImage.rowPitch; + + uint8_t *pDest = destImage.pixels; + const size_t dpitch = destImage.rowPitch; + + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanline(sScanline, width, pSrc, spitch, srcImage.format)) + return E_FAIL; + + #ifdef _DEBUG + memset(dScanline, 0xCD, sizeof(XMVECTOR)*width); + #endif + + pixelFunc(dScanline, sScanline, width, h); + + if (!StoreScanline(pDest, destImage.rowPitch, destImage.format, dScanline, width)) + return E_FAIL; + + pSrc += spitch; + pDest += dpitch; + } + + return S_OK; + } +}; + + +//===================================================================================== +// Entry points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Copies a rectangle from one image into another +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::CopyRectangle( + const Image& srcImage, + const Rect& srcRect, + const Image& dstImage, + TEX_FILTER_FLAGS filter, + size_t xOffset, + size_t yOffset) noexcept +{ + if (!srcImage.pixels || !dstImage.pixels) + return E_POINTER; + + if (IsCompressed(srcImage.format) || IsCompressed(dstImage.format) + || IsPlanar(srcImage.format) || IsPlanar(dstImage.format) + || IsPalettized(srcImage.format) || IsPalettized(dstImage.format)) + return HRESULT_E_NOT_SUPPORTED; + + // Validate rectangle/offset + if (!srcRect.w || !srcRect.h || ((srcRect.x + srcRect.w) > srcImage.width) || ((srcRect.y + srcRect.h) > srcImage.height)) + { + return E_INVALIDARG; + } + + if (((xOffset + srcRect.w) > dstImage.width) || ((yOffset + srcRect.h) > dstImage.height)) + { + return E_INVALIDARG; + } + + // Compute source bytes-per-pixel + size_t sbpp = BitsPerPixel(srcImage.format); + if (!sbpp) + return E_FAIL; + + if (sbpp < 8) + { + // We don't support monochrome (DXGI_FORMAT_R1_UNORM) + return HRESULT_E_NOT_SUPPORTED; + } + + const uint8_t* pEndSrc = srcImage.pixels + srcImage.rowPitch*srcImage.height; + const uint8_t* pEndDest = dstImage.pixels + dstImage.rowPitch*dstImage.height; + + // Round to bytes + sbpp = (sbpp + 7) / 8; + + const uint8_t* pSrc = srcImage.pixels + (srcRect.y * srcImage.rowPitch) + (srcRect.x * sbpp); + + if (srcImage.format == dstImage.format) + { + // Direct copy case (avoid intermediate conversions) + uint8_t* pDest = dstImage.pixels + (yOffset * dstImage.rowPitch) + (xOffset * sbpp); + const size_t copyW = srcRect.w * sbpp; + for (size_t h = 0; h < srcRect.h; ++h) + { + if (((pSrc + copyW) > pEndSrc) || (pDest > pEndDest)) + return E_FAIL; + + memcpy(pDest, pSrc, copyW); + + pSrc += srcImage.rowPitch; + pDest += dstImage.rowPitch; + } + + return S_OK; + } + + // Compute destination bytes-per-pixel (not the same format as source) + size_t dbpp = BitsPerPixel(dstImage.format); + if (!dbpp) + return E_FAIL; + + if (dbpp < 8) + { + // We don't support monochrome (DXGI_FORMAT_R1_UNORM) + return HRESULT_E_NOT_SUPPORTED; + } + + // Round to bytes + dbpp = (dbpp + 7) / 8; + + uint8_t* pDest = dstImage.pixels + (yOffset * dstImage.rowPitch) + (xOffset * dbpp); + + auto scanline = make_AlignedArrayXMVECTOR(srcRect.w); + if (!scanline) + return E_OUTOFMEMORY; + + const size_t copyS = srcRect.w * sbpp; + const size_t copyD = srcRect.w * dbpp; + + for (size_t h = 0; h < srcRect.h; ++h) + { + if (((pSrc + copyS) > pEndSrc) || ((pDest + copyD) > pEndDest)) + return E_FAIL; + + if (!LoadScanline(scanline.get(), srcRect.w, pSrc, copyS, srcImage.format)) + return E_FAIL; + + ConvertScanline(scanline.get(), srcRect.w, dstImage.format, srcImage.format, filter); + + if (!StoreScanline(pDest, copyD, dstImage.format, scanline.get(), srcRect.w)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += dstImage.rowPitch; + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Computes the Mean-Squared-Error (MSE) between two images +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::ComputeMSE( + const Image& image1, + const Image& image2, + float& mse, + float* mseV, + CMSE_FLAGS flags) noexcept +{ + if (!image1.pixels || !image2.pixels) + return E_POINTER; + + if (image1.width != image2.width || image1.height != image2.height) + return E_INVALIDARG; + + if (!IsValid(image1.format) || !IsValid(image2.format)) + return E_INVALIDARG; + + if (IsPlanar(image1.format) || IsPlanar(image2.format) + || IsPalettized(image1.format) || IsPalettized(image2.format) + || IsTypeless(image1.format) || IsTypeless(image2.format)) + return HRESULT_E_NOT_SUPPORTED; + + if (IsCompressed(image1.format)) + { + if (IsCompressed(image2.format)) + { + // Case 1: both images are compressed, expand to RGBA32F + ScratchImage temp1; + HRESULT hr = Decompress(image1, DXGI_FORMAT_R32G32B32A32_FLOAT, temp1); + if (FAILED(hr)) + return hr; + + ScratchImage temp2; + hr = Decompress(image2, DXGI_FORMAT_R32G32B32A32_FLOAT, temp2); + if (FAILED(hr)) + return hr; + + const Image* img1 = temp1.GetImage(0, 0, 0); + const Image* img2 = temp2.GetImage(0, 0, 0); + if (!img1 || !img2) + return E_POINTER; + + return ComputeMSE_(*img1, *img2, mse, mseV, flags); + } + else + { + // Case 2: image1 is compressed, expand to RGBA32F + ScratchImage temp; + HRESULT hr = Decompress(image1, DXGI_FORMAT_R32G32B32A32_FLOAT, temp); + if (FAILED(hr)) + return hr; + + const Image* img = temp.GetImage(0, 0, 0); + if (!img) + return E_POINTER; + + return ComputeMSE_(*img, image2, mse, mseV, flags); + } + } + else + { + if (IsCompressed(image2.format)) + { + // Case 3: image2 is compressed, expand to RGBA32F + ScratchImage temp; + HRESULT hr = Decompress(image2, DXGI_FORMAT_R32G32B32A32_FLOAT, temp); + if (FAILED(hr)) + return hr; + + const Image* img = temp.GetImage(0, 0, 0); + if (!img) + return E_POINTER; + + return ComputeMSE_(image1, *img, mse, mseV, flags); + } + else + { + // Case 4: neither image is compressed + return ComputeMSE_(image1, image2, mse, mseV, flags); + } + } +} + + +//------------------------------------------------------------------------------------- +// Evaluates a user-supplied function for all the pixels in the image +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::EvaluateImage( + const Image& image, + std::function pixelFunc) +{ + if (image.width > UINT32_MAX + || image.height > UINT32_MAX) + return E_INVALIDARG; + + if (!IsValid(image.format)) + return E_INVALIDARG; + + if (IsPlanar(image.format) || IsPalettized(image.format) || IsTypeless(image.format)) + return HRESULT_E_NOT_SUPPORTED; + + if (IsCompressed(image.format)) + { + ScratchImage temp; + HRESULT hr = Decompress(image, DXGI_FORMAT_R32G32B32A32_FLOAT, temp); + if (FAILED(hr)) + return hr; + + const Image* img = temp.GetImage(0, 0, 0); + if (!img) + return E_POINTER; + + return EvaluateImage_(*img, pixelFunc); + } + else + { + return EvaluateImage_(image, pixelFunc); + } +} + +_Use_decl_annotations_ +HRESULT DirectX::EvaluateImage( + const Image* images, + size_t nimages, + const TexMetadata& metadata, + std::function pixelFunc) +{ + if (!images || !nimages) + return E_INVALIDARG; + + if (!IsValid(metadata.format)) + return E_INVALIDARG; + + if (IsPlanar(metadata.format) || IsPalettized(metadata.format) || IsTypeless(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + if (metadata.width > UINT32_MAX + || metadata.height > UINT32_MAX) + return E_INVALIDARG; + + if (metadata.IsVolumemap() && metadata.depth > UINT16_MAX) + return E_INVALIDARG; + + ScratchImage temp; + DXGI_FORMAT format = metadata.format; + if (IsCompressed(format)) + { + HRESULT hr = Decompress(images, nimages, metadata, DXGI_FORMAT_R32G32B32A32_FLOAT, temp); + if (FAILED(hr)) + return hr; + + if (nimages != temp.GetImageCount()) + return E_UNEXPECTED; + + images = temp.GetImages(); + format = DXGI_FORMAT_R32G32B32A32_FLOAT; + } + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + for (size_t index = 0; index < nimages; ++index) + { + const Image& img = images[index]; + if (img.format != format) + return E_FAIL; + + if ((img.width > UINT32_MAX) || (img.height > UINT32_MAX)) + return E_FAIL; + + HRESULT hr = EvaluateImage_(img, pixelFunc); + if (FAILED(hr)) + return hr; + } + break; + + case TEX_DIMENSION_TEXTURE3D: + { + size_t index = 0; + size_t d = metadata.depth; + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + for (size_t slice = 0; slice < d; ++slice, ++index) + { + if (index >= nimages) + return E_FAIL; + + const Image& img = images[index]; + if (img.format != format) + return E_FAIL; + + if ((img.width > UINT32_MAX) || (img.height > UINT32_MAX)) + return E_FAIL; + + HRESULT hr = EvaluateImage_(img, pixelFunc); + if (FAILED(hr)) + return hr; + } + + if (d > 1) + d >>= 1; + } + } + break; + + default: + return E_FAIL; + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Use a user-supplied function to compute a new image from an input image +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::TransformImage( + const Image& image, + std::function pixelFunc, + ScratchImage& result) +{ + if (image.width > UINT32_MAX + || image.height > UINT32_MAX) + return E_INVALIDARG; + + if (IsPlanar(image.format) || IsPalettized(image.format) || IsCompressed(image.format) || IsTypeless(image.format)) + return HRESULT_E_NOT_SUPPORTED; + + HRESULT hr = result.Initialize2D(image.format, image.width, image.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image* dimg = result.GetImage(0, 0, 0); + if (!dimg) + { + result.Release(); + return E_POINTER; + } + + hr = TransformImage_(image, pixelFunc, *dimg); + if (FAILED(hr)) + { + result.Release(); + return hr; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::TransformImage( + const Image* srcImages, + size_t nimages, const TexMetadata& metadata, + std::function pixelFunc, + ScratchImage& result) +{ + if (!srcImages || !nimages) + return E_INVALIDARG; + + if (IsPlanar(metadata.format) || IsPalettized(metadata.format) || IsCompressed(metadata.format) || IsTypeless(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + if (metadata.width > UINT32_MAX + || metadata.height > UINT32_MAX) + return E_INVALIDARG; + + if (metadata.IsVolumemap() && metadata.depth > UINT16_MAX) + return E_INVALIDARG; + + HRESULT hr = result.Initialize(metadata); + if (FAILED(hr)) + return hr; + + if (nimages != result.GetImageCount()) + { + result.Release(); + return E_FAIL; + } + + const Image* dest = result.GetImages(); + if (!dest) + { + result.Release(); + return E_POINTER; + } + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + for (size_t index = 0; index < nimages; ++index) + { + const Image& src = srcImages[index]; + if (src.format != metadata.format) + { + result.Release(); + return E_FAIL; + } + + if ((src.width > UINT32_MAX) || (src.height > UINT32_MAX)) + { + result.Release(); + return E_FAIL; + } + + const Image& dst = dest[index]; + + if (src.width != dst.width || src.height != dst.height) + { + result.Release(); + return E_FAIL; + } + + hr = TransformImage_(src, pixelFunc, dst); + if (FAILED(hr)) + { + result.Release(); + return hr; + } + } + break; + + case TEX_DIMENSION_TEXTURE3D: + { + size_t index = 0; + size_t d = metadata.depth; + for (size_t level = 0; level < metadata.mipLevels; ++level) + { + for (size_t slice = 0; slice < d; ++slice, ++index) + { + if (index >= nimages) + { + result.Release(); + return E_FAIL; + } + + const Image& src = srcImages[index]; + if (src.format != metadata.format) + { + result.Release(); + return E_FAIL; + } + + if ((src.width > UINT32_MAX) || (src.height > UINT32_MAX)) + { + result.Release(); + return E_FAIL; + } + + const Image& dst = dest[index]; + + if (src.width != dst.width || src.height != dst.height) + { + result.Release(); + return E_FAIL; + } + + hr = TransformImage_(src, pixelFunc, dst); + if (FAILED(hr)) + { + result.Release(); + return hr; + } + } + + if (d > 1) + d >>= 1; + } + } + break; + + default: + result.Release(); + return E_FAIL; + } + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexNormalMaps.cpp b/external/DirectXTex/DirectXTexNormalMaps.cpp new file mode 100644 index 00000000..0a35900e --- /dev/null +++ b/external/DirectXTex/DirectXTexNormalMaps.cpp @@ -0,0 +1,393 @@ +//------------------------------------------------------------------------------------- +// DirectXTexNormalMaps.cpp +// +// DirectX Texture Library - Normal map operations +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +using namespace DirectX; +using namespace DirectX::Internal; + +namespace +{ + +#pragma prefast(suppress : 25000, "FXMVECTOR is 16 bytes") + inline float EvaluateColor(_In_ FXMVECTOR val, _In_ CNMAP_FLAGS flags) noexcept + { + XMFLOAT4A f; + + static XMVECTORF32 lScale = { { { 0.2125f, 0.7154f, 0.0721f, 1.f } } }; + + static_assert(CNMAP_CHANNEL_RED == 0x1, "CNMAP_CHANNEL_ flag values don't match mask"); + switch (flags & 0xf) + { + case 0: + case CNMAP_CHANNEL_RED: return XMVectorGetX(val); + case CNMAP_CHANNEL_GREEN: return XMVectorGetY(val); + case CNMAP_CHANNEL_BLUE: return XMVectorGetZ(val); + case CNMAP_CHANNEL_ALPHA: return XMVectorGetW(val); + + case CNMAP_CHANNEL_LUMINANCE: + { + const XMVECTOR v = XMVectorMultiply(val, lScale); + XMStoreFloat4A(&f, v); + return f.x + f.y + f.z; + } + + default: + assert(false); + return 0.f; + } + } + + void EvaluateRow( + _In_reads_(width) const XMVECTOR* pSource, + _Out_writes_(width + 2) float* pDest, + size_t width, + CNMAP_FLAGS flags) noexcept + { + assert(pSource && pDest); + assert(width > 0); + + for (size_t x = 0; x < width; ++x) + { + pDest[x + 1] = EvaluateColor(pSource[x], flags); + } + + if (flags & CNMAP_MIRROR_U) + { + // Mirror in U + pDest[0] = EvaluateColor(pSource[0], flags); + pDest[width + 1] = EvaluateColor(pSource[width - 1], flags); + } + else + { + // Wrap in U + pDest[0] = EvaluateColor(pSource[width - 1], flags); + pDest[width + 1] = EvaluateColor(pSource[0], flags); + } + } + + HRESULT ComputeNMap(_In_ const Image& srcImage, _In_ CNMAP_FLAGS flags, _In_ float amplitude, + _In_ DXGI_FORMAT format, _In_ const Image& normalMap) noexcept + { + if (!srcImage.pixels || !normalMap.pixels) + return E_INVALIDARG; + + const uint32_t convFlags = GetConvertFlags(format); + if (!convFlags) + return E_FAIL; + + if (!(convFlags & (CONVF_UNORM | CONVF_SNORM | CONVF_FLOAT))) + return HRESULT_E_NOT_SUPPORTED; + + const size_t width = srcImage.width; + const size_t height = srcImage.height; + if (width != normalMap.width || height != normalMap.height) + return E_FAIL; + + // Allocate temporary space (4 scanlines and 3 evaluated rows) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(width) * 4); + if (!scanline) + return E_OUTOFMEMORY; + + auto buffer = make_AlignedArrayFloat((uint64_t(width) + 2) * 3); + if (!buffer) + return E_OUTOFMEMORY; + + uint8_t* pDest = normalMap.pixels; + if (!pDest) + return E_POINTER; + + XMVECTOR* row0 = scanline.get(); + XMVECTOR* row1 = row0 + width; + XMVECTOR* row2 = row1 + width; + XMVECTOR* target = row2 + width; + + float* val0 = buffer.get(); + float* val1 = val0 + width + 2; + float* val2 = val1 + width + 2; + + const size_t rowPitch = srcImage.rowPitch; + const uint8_t* pSrc = srcImage.pixels; + + // Read first scanline row into 'row1' + if (!LoadScanline(row1, width, pSrc, rowPitch, srcImage.format)) + return E_FAIL; + + // Setup 'row0' + if (flags & CNMAP_MIRROR_V) + { + // Mirror first row + memcpy(row0, row1, rowPitch); + } + else + { + // Read last row (Wrap V) + if (!LoadScanline(row0, width, pSrc + (rowPitch * (height - 1)), rowPitch, srcImage.format)) + return E_FAIL; + } + + // Evaluate the initial rows + EvaluateRow(row0, val0, width, flags); + EvaluateRow(row1, val1, width, flags); + + pSrc += rowPitch; + + for (size_t y = 0; y < height; ++y) + { + // Load next scanline of source image + if (y < (height - 1)) + { + if (!LoadScanline(row2, width, pSrc, rowPitch, srcImage.format)) + return E_FAIL; + } + else + { + if (flags & CNMAP_MIRROR_V) + { + // Use last row of source image + if (!LoadScanline(row2, width, srcImage.pixels + (rowPitch * (height - 1)), rowPitch, srcImage.format)) + return E_FAIL; + } + else + { + // Use first row of source image (Wrap V) + if (!LoadScanline(row2, width, srcImage.pixels, rowPitch, srcImage.format)) + return E_FAIL; + } + } + + // Evaluate row + EvaluateRow(row2, val2, width, flags); + + // Generate target scanline + XMVECTOR *dptr = target; + for (size_t x = 0; x < width; ++x) + { + // Compute normal via central differencing + float totDelta = (val0[x] - val0[x + 2]) + (val1[x] - val1[x + 2]) + (val2[x] - val2[x + 2]); + const float deltaZX = totDelta * amplitude / 6.f; + + totDelta = (val0[x] - val2[x]) + (val0[x + 1] - val2[x + 1]) + (val0[x + 2] - val2[x + 2]); + const float deltaZY = totDelta * amplitude / 6.f; + + const XMVECTOR vx = XMVectorSetZ(g_XMNegIdentityR0, deltaZX); // (-1.0f, 0.0f, deltaZX) + const XMVECTOR vy = XMVectorSetZ(g_XMNegIdentityR1, deltaZY); // (0.0f, -1.0f, deltaZY) + + const XMVECTOR normal = XMVector3Normalize(XMVector3Cross(vx, vy)); + + // Compute alpha (1.0 or an occlusion term) + float alpha = 1.f; + + if (flags & CNMAP_COMPUTE_OCCLUSION) + { + float delta = 0.f; + const float c = val1[x + 1]; + + float t = val0[x] - c; if (t > 0.f) delta += t; + t = val0[x + 1] - c; if (t > 0.f) delta += t; + t = val0[x + 2] - c; if (t > 0.f) delta += t; + t = val1[x] - c; if (t > 0.f) delta += t; + // Skip current pixel + t = val1[x + 2] - c; if (t > 0.f) delta += t; + t = val2[x] - c; if (t > 0.f) delta += t; + t = val2[x + 1] - c; if (t > 0.f) delta += t; + t = val2[x + 2] - c; if (t > 0.f) delta += t; + + // Average delta (divide by 8, scale by amplitude factor) + delta *= 0.125f * amplitude; + if (delta > 0.f) + { + // If < 0, then no occlusion + const float r = sqrtf(1.f + delta*delta); + alpha = (r - delta) / r; + } + } + + // Encode based on target format + if (convFlags & CONVF_UNORM) + { + // 0.5f*normal + 0.5f -or- invert sign case: -0.5f*normal + 0.5f + const XMVECTOR n1 = XMVectorMultiplyAdd((flags & CNMAP_INVERT_SIGN) ? g_XMNegativeOneHalf : g_XMOneHalf, normal, g_XMOneHalf); + *dptr++ = XMVectorSetW(n1, alpha); + } + else if (flags & CNMAP_INVERT_SIGN) + { + *dptr++ = XMVectorSetW(XMVectorNegate(normal), alpha); + } + else + { + *dptr++ = XMVectorSetW(normal, alpha); + } + } + + if (!StoreScanline(pDest, normalMap.rowPitch, format, target, width)) + return E_FAIL; + + // Cycle buffers + float* temp = val0; + val0 = val1; + val1 = val2; + val2 = temp; + + pSrc += rowPitch; + pDest += normalMap.rowPitch; + } + + return S_OK; + } +} + + +//===================================================================================== +// Entry points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Generates a normal map from a height-map +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::ComputeNormalMap( + const Image& srcImage, + CNMAP_FLAGS flags, + float amplitude, + DXGI_FORMAT format, + ScratchImage& normalMap) noexcept +{ + if (!srcImage.pixels || !IsValid(format)) + return E_INVALIDARG; + + static_assert(CNMAP_CHANNEL_RED == 0x1, "CNMAP_CHANNEL_ flag values don't match mask"); + switch (flags & 0xf) + { + case 0: + case CNMAP_CHANNEL_RED: + case CNMAP_CHANNEL_GREEN: + case CNMAP_CHANNEL_BLUE: + case CNMAP_CHANNEL_ALPHA: + case CNMAP_CHANNEL_LUMINANCE: + break; + + default: + return E_INVALIDARG; + } + + if (IsCompressed(format) || IsCompressed(srcImage.format) + || IsTypeless(format) || IsTypeless(srcImage.format) + || IsPlanar(format) || IsPlanar(srcImage.format) + || IsPalettized(format) || IsPalettized(srcImage.format)) + return HRESULT_E_NOT_SUPPORTED; + + // Setup target image + normalMap.Release(); + + HRESULT hr = normalMap.Initialize2D(format, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *img = normalMap.GetImage(0, 0, 0); + if (!img) + { + normalMap.Release(); + return E_POINTER; + } + + hr = ComputeNMap(srcImage, flags, amplitude, format, *img); + if (FAILED(hr)) + { + normalMap.Release(); + return hr; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::ComputeNormalMap( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + CNMAP_FLAGS flags, + float amplitude, + DXGI_FORMAT format, + ScratchImage& normalMaps) noexcept +{ + if (!srcImages || !nimages || !IsValid(format)) + return E_INVALIDARG; + + if (IsCompressed(format) || IsCompressed(metadata.format) + || IsTypeless(format) || IsTypeless(metadata.format) + || IsPlanar(format) || IsPlanar(metadata.format) + || IsPalettized(format) || IsPalettized(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + static_assert(CNMAP_CHANNEL_RED == 0x1, "CNMAP_CHANNEL_ flag values don't match mask"); + switch (flags & 0xf) + { + case 0: + case CNMAP_CHANNEL_RED: + case CNMAP_CHANNEL_GREEN: + case CNMAP_CHANNEL_BLUE: + case CNMAP_CHANNEL_ALPHA: + case CNMAP_CHANNEL_LUMINANCE: + break; + + default: + return E_INVALIDARG; + } + + normalMaps.Release(); + + TexMetadata mdata2 = metadata; + mdata2.format = format; + HRESULT hr = normalMaps.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + if (nimages != normalMaps.GetImageCount()) + { + normalMaps.Release(); + return E_FAIL; + } + + const Image* dest = normalMaps.GetImages(); + if (!dest) + { + normalMaps.Release(); + return E_POINTER; + } + + for (size_t index = 0; index < nimages; ++index) + { + assert(dest[index].format == format); + + const Image& src = srcImages[index]; + if (IsCompressed(src.format) || IsTypeless(src.format)) + { + normalMaps.Release(); + return HRESULT_E_NOT_SUPPORTED; + } + + if (src.width != dest[index].width || src.height != dest[index].height) + { + normalMaps.Release(); + return E_FAIL; + } + + hr = ComputeNMap(src, flags, amplitude, format, dest[index]); + if (FAILED(hr)) + { + normalMaps.Release(); + return hr; + } + } + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexP.h b/external/DirectXTex/DirectXTexP.h new file mode 100644 index 00000000..a8067524 --- /dev/null +++ b/external/DirectXTex/DirectXTexP.h @@ -0,0 +1,457 @@ +//------------------------------------------------------------------------------------- +// DirectXTexP.h +// +// DirectX Texture Library - Private header +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#pragma once + +#ifdef _MSC_VER +// Off by default warnings +#pragma warning(disable : 4619 4616 4061 4265 4365 4571 4623 4625 4626 4628 4668 4710 4711 4746 4774 4820 4987 5026 5027 5031 5032 5039 5045 5219 5246 5264 26812) +// C4619/4616 #pragma warning warnings +// C4061 enumerator 'X' in switch of enum 'X' is not explicitly handled by a case label +// C4265 class has virtual functions, but destructor is not virtual +// C4365 signed/unsigned mismatch +// C4571 behavior change +// C4623 default constructor was implicitly defined as deleted +// C4625 copy constructor was implicitly defined as deleted +// C4626 assignment operator was implicitly defined as deleted +// C4628 digraphs not supported +// C4668 not defined as a preprocessor macro +// C4710 function not inlined +// C4711 selected for automatic inline expansion +// C4746 volatile access of '' is subject to /volatile: setting +// C4774 format string expected in argument 3 is not a string literal +// C4820 padding added after data member +// C4987 nonstandard extension used +// C5026 move constructor was implicitly defined as deleted +// C5027 move assignment operator was implicitly defined as deleted +// C5031/5032 push/pop mismatches in windows headers +// C5039 pointer or reference to potentially throwing function passed to extern C function under - EHc +// C5045 Spectre mitigation warning +// C5219 implicit conversion from 'int' to 'float', possible loss of data +// C5246 the initialization of a subobject should be wrapped in braces +// C5264 'const' variable is not used +// 26812: The enum type 'x' is unscoped. Prefer 'enum class' over 'enum' (Enum.3). + +#if defined(_XBOX_ONE) && defined(_TITLE) +// Xbox One XDK related Off by default warnings +#pragma warning(disable : 4471 4643 4917 4986 5029 5038 5040 5043 5204 5246 5256 5262 5267) +// C4471 forward declaration of an unscoped enumeration must have an underlying type +// C4643 Forward declaring in namespace std is not permitted by the C++ Standard +// C4917 a GUID can only be associated with a class, interface or namespace +// C4986 exception specification does not match previous declaration +// C5029 nonstandard extension used +// C5038 data member 'X' will be initialized after data member 'Y' +// C5040 dynamic exception specifications are valid only in C++14 and earlier; treating as noexcept(false) +// C5043 exception specification does not match previous declaration +// C5204 class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed correctly +// C5246 'anonymous struct or union': the initialization of a subobject should be wrapped in braces +// C5256 a non-defining declaration of an enumeration with a fixed underlying type is only permitted as a standalone declaration +// C5262 implicit fall-through occurs here; are you missing a break statement? +// C5267 definition of implicit copy constructor for 'X' is deprecated because it has a user-provided assignment operator +#endif // _XBOX_ONE && _TITLE +#endif // _MSC_VER + +#ifdef __INTEL_COMPILER +#pragma warning(disable : 161) +// warning #161: unrecognized #pragma +#endif + +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wc++98-compat" +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#pragma clang diagnostic ignored "-Wc++98-compat-local-type-template-args" +#pragma clang diagnostic ignored "-Wcovered-switch-default" +#pragma clang diagnostic ignored "-Wfloat-equal" +#pragma clang diagnostic ignored "-Wglobal-constructors" +#pragma clang diagnostic ignored "-Wgnu-anonymous-struct" +#pragma clang diagnostic ignored "-Wlanguage-extension-token" +#pragma clang diagnostic ignored "-Wmissing-variable-declarations" +#pragma clang diagnostic ignored "-Wnested-anon-types" +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#pragma clang diagnostic ignored "-Wswitch-enum" +#pragma clang diagnostic ignored "-Wtautological-type-limit-compare" +#pragma clang diagnostic ignored "-Wunknown-pragmas" +#pragma clang diagnostic ignored "-Wundef" +#pragma clang diagnostic ignored "-Wunknown-warning-option" +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif + +#ifdef _WIN32 +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#pragma warning(push) +#pragma warning(disable : 4005) +#define NOMINMAX 1 +#define NODRAWTEXT +#define NOGDI +#define NOBITMAP +#define NOMCX +#define NOSERVICE +#define NOHELP +#pragma warning(pop) + +#include + +#ifdef __MINGW32__ +#include +#endif + +#ifndef _WIN32_WINNT_WIN10 +#define _WIN32_WINNT_WIN10 0x0A00 +#endif + +#ifdef _GAMING_XBOX_SCARLETT +#pragma warning(push) +#pragma warning(disable: 5204 5249) +#include +#pragma warning(pop) +#elif defined(_GAMING_XBOX) +#pragma warning(push) +#pragma warning(disable: 5204) +#include +#pragma warning(pop) +#elif defined(_XBOX_ONE) && defined(_TITLE) +#include +#include +#elif (_WIN32_WINNT >= _WIN32_WINNT_WIN10) +#ifdef USING_DIRECTX_HEADERS +#include +#include +#else +#include +#endif +#include +#else +#include +#endif +#else // !WIN32 +#include +#include +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef _WIN32 +#include +#include +#include +#endif + +#define _XM_NO_XMVECTOR_OVERLOADS_ + +#include + +#if (DIRECTX_MATH_VERSION < 315) +#define XM_ALIGNED_DATA(x) __declspec(align(x)) +#endif + +#include "DirectXTex.h" + +#ifdef _WIN32 +#include + +#if defined(NTDDI_WIN10_FE) || defined(__MINGW32__) +#include +#else +#include +#endif +#include +#include +#else +using WICPixelFormatGUID = GUID; +#endif + +#include "scoped.h" + +#define XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT DXGI_FORMAT(116) +#define XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT DXGI_FORMAT(117) +#define XBOX_DXGI_FORMAT_D16_UNORM_S8_UINT DXGI_FORMAT(118) +#define XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS DXGI_FORMAT(119) +#define XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT DXGI_FORMAT(120) + +#define WIN10_DXGI_FORMAT_P208 DXGI_FORMAT(130) +#define WIN10_DXGI_FORMAT_V208 DXGI_FORMAT(131) +#define WIN10_DXGI_FORMAT_V408 DXGI_FORMAT(132) + +#ifndef XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM +#define XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM DXGI_FORMAT(189) +#endif + +#define XBOX_DXGI_FORMAT_R4G4_UNORM DXGI_FORMAT(190) + +#define WIN11_DXGI_FORMAT_A4B4G4R4_UNORM DXGI_FORMAT(191) + +#if defined(__MINGW32__) && !defined(E_BOUNDS) +#define E_BOUNDS static_cast(0x8000000BL) +#endif + +// HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) +#define HRESULT_ERROR_FILE_NOT_FOUND static_cast(0x80070002) + +// HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW) +#define HRESULT_E_ARITHMETIC_OVERFLOW static_cast(0x80070216L) + +// HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) +#define HRESULT_E_NOT_SUPPORTED static_cast(0x80070032L) + +// HRESULT_FROM_WIN32(ERROR_HANDLE_EOF) +#define HRESULT_E_HANDLE_EOF static_cast(0x80070026L) + +// HRESULT_FROM_WIN32(ERROR_INVALID_DATA) +#define HRESULT_E_INVALID_DATA static_cast(0x8007000DL) + +// HRESULT_FROM_WIN32(ERROR_FILE_TOO_LARGE) +#define HRESULT_E_FILE_TOO_LARGE static_cast(0x800700DFL) + +// HRESULT_FROM_WIN32(ERROR_CANNOT_MAKE) +#define HRESULT_E_CANNOT_MAKE static_cast(0x80070052L) + +// HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) +#ifndef E_NOT_SUFFICIENT_BUFFER +#define E_NOT_SUFFICIENT_BUFFER static_cast(0x8007007AL) +#endif + +//------------------------------------------------------------------------------------- +namespace DirectX +{ + namespace Internal + { + //----------------------------------------------------------------------------- + // WIC helper functions + #ifdef _WIN32 + DXGI_FORMAT __cdecl WICToDXGI(_In_ const GUID& guid) noexcept; + bool __cdecl DXGIToWIC(_In_ DXGI_FORMAT format, _Out_ GUID& guid, _In_ bool ignoreRGBvsBGR = false) noexcept; + + TEX_FILTER_FLAGS __cdecl CheckWICColorSpace(_In_ const GUID& sourceGUID, _In_ const GUID& targetGUID) noexcept; + + inline WICBitmapDitherType __cdecl GetWICDither(_In_ TEX_FILTER_FLAGS flags) noexcept + { + static_assert(TEX_FILTER_DITHER == 0x10000, "TEX_FILTER_DITHER* flag values don't match mask"); + + static_assert(static_cast(TEX_FILTER_DITHER) == static_cast(WIC_FLAGS_DITHER), "TEX_FILTER_DITHER* should match WIC_FLAGS_DITHER*"); + static_assert(static_cast(TEX_FILTER_DITHER_DIFFUSION) == static_cast(WIC_FLAGS_DITHER_DIFFUSION), "TEX_FILTER_DITHER* should match WIC_FLAGS_DITHER*"); + + switch (flags & TEX_FILTER_DITHER_MASK) + { + case TEX_FILTER_DITHER: + return WICBitmapDitherTypeOrdered4x4; + + case TEX_FILTER_DITHER_DIFFUSION: + return WICBitmapDitherTypeErrorDiffusion; + + default: + return WICBitmapDitherTypeNone; + } + } + + inline WICBitmapDitherType __cdecl GetWICDither(_In_ WIC_FLAGS flags) noexcept + { + switch (flags & TEX_FILTER_DITHER_MASK) + { + case WIC_FLAGS_DITHER: + return WICBitmapDitherTypeOrdered4x4; + + case WIC_FLAGS_DITHER_DIFFUSION: + return WICBitmapDitherTypeErrorDiffusion; + + default: + return WICBitmapDitherTypeNone; + } + } + + inline WICBitmapInterpolationMode __cdecl GetWICInterp(_In_ WIC_FLAGS flags) noexcept + { + static_assert(TEX_FILTER_POINT == 0x100000, "TEX_FILTER_ flag values don't match TEX_FILTER_MASK"); + + static_assert(static_cast(TEX_FILTER_POINT) == static_cast(WIC_FLAGS_FILTER_POINT), "TEX_FILTER_* flags should match WIC_FLAGS_FILTER_*"); + static_assert(static_cast(TEX_FILTER_LINEAR) == static_cast(WIC_FLAGS_FILTER_LINEAR), "TEX_FILTER_* flags should match WIC_FLAGS_FILTER_*"); + static_assert(static_cast(TEX_FILTER_CUBIC) == static_cast(WIC_FLAGS_FILTER_CUBIC), "TEX_FILTER_* flags should match WIC_FLAGS_FILTER_*"); + static_assert(static_cast(TEX_FILTER_FANT) == static_cast(WIC_FLAGS_FILTER_FANT), "TEX_FILTER_* flags should match WIC_FLAGS_FILTER_*"); + + switch (flags & TEX_FILTER_MODE_MASK) + { + case TEX_FILTER_POINT: + return WICBitmapInterpolationModeNearestNeighbor; + + case TEX_FILTER_LINEAR: + return WICBitmapInterpolationModeLinear; + + case TEX_FILTER_CUBIC: + return WICBitmapInterpolationModeCubic; + + case TEX_FILTER_FANT: + default: + return WICBitmapInterpolationModeFant; + } + } + + inline WICBitmapInterpolationMode __cdecl GetWICInterp(_In_ TEX_FILTER_FLAGS flags) noexcept + { + switch (flags & TEX_FILTER_MODE_MASK) + { + case TEX_FILTER_POINT: + return WICBitmapInterpolationModeNearestNeighbor; + + case TEX_FILTER_LINEAR: + return WICBitmapInterpolationModeLinear; + + case TEX_FILTER_CUBIC: + return WICBitmapInterpolationModeCubic; + + case TEX_FILTER_FANT: + default: + return WICBitmapInterpolationModeFant; + } + } + #endif // WIN32 + + //--------------------------------------------------------------------------------- + // Image helper functions + HRESULT __cdecl DetermineImageArray( + _In_ const TexMetadata& metadata, _In_ CP_FLAGS cpFlags, + _Out_ size_t& nImages, _Out_ size_t& pixelSize) noexcept; + + _Success_(return) bool __cdecl SetupImageArray( + _In_reads_bytes_(pixelSize) uint8_t* pMemory, _In_ size_t pixelSize, + _In_ const TexMetadata& metadata, _In_ CP_FLAGS cpFlags, + _Out_writes_(nImages) Image* images, _In_ size_t nImages) noexcept; + + //--------------------------------------------------------------------------------- + // Conversion helper functions + + enum TEXP_SCANLINE_FLAGS : uint32_t + { + TEXP_SCANLINE_NONE = 0, + + TEXP_SCANLINE_SETALPHA = 0x1, + // Set alpha channel to known opaque value + + TEXP_SCANLINE_LEGACY = 0x2, + // Enables specific legacy format conversion cases + }; + + enum CONVERT_FLAGS : uint32_t + { + CONVF_FLOAT = 0x1, + CONVF_UNORM = 0x2, + CONVF_UINT = 0x4, + CONVF_SNORM = 0x8, + CONVF_SINT = 0x10, + CONVF_DEPTH = 0x20, + CONVF_STENCIL = 0x40, + CONVF_SHAREDEXP = 0x80, + CONVF_BGR = 0x100, + CONVF_XR = 0x200, + CONVF_PACKED = 0x400, + CONVF_BC = 0x800, + CONVF_YUV = 0x1000, + CONVF_POS_ONLY = 0x2000, + CONVF_R = 0x10000, + CONVF_G = 0x20000, + CONVF_B = 0x40000, + CONVF_A = 0x80000, + CONVF_RGB_MASK = 0x70000, + CONVF_RGBA_MASK = 0xF0000, + }; + + uint32_t __cdecl GetConvertFlags(_In_ DXGI_FORMAT format) noexcept; + + void __cdecl CopyScanline( + _When_(pDestination == pSource, _Inout_updates_bytes_(outSize)) + _When_(pDestination != pSource, _Out_writes_bytes_(outSize)) + void* pDestination, _In_ size_t outSize, + _In_reads_bytes_(inSize) const void* pSource, _In_ size_t inSize, + _In_ DXGI_FORMAT format, _In_ uint32_t tflags) noexcept; + + void __cdecl SwizzleScanline( + _When_(pDestination == pSource, _In_) + _When_(pDestination != pSource, _Out_writes_bytes_(outSize)) + void* pDestination, _In_ size_t outSize, + _In_reads_bytes_(inSize) const void* pSource, _In_ size_t inSize, + _In_ DXGI_FORMAT format, _In_ uint32_t tflags) noexcept; + + _Success_(return) bool __cdecl ExpandScanline( + _Out_writes_bytes_(outSize) void* pDestination, _In_ size_t outSize, + _In_ DXGI_FORMAT outFormat, + _In_reads_bytes_(inSize) const void* pSource, _In_ size_t inSize, + _In_ DXGI_FORMAT inFormat, _In_ uint32_t tflags) noexcept; + + _Success_(return) bool __cdecl LoadScanline( + _Out_writes_(count) XMVECTOR* pDestination, _In_ size_t count, + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _In_ DXGI_FORMAT format) noexcept; + + _Success_(return) bool __cdecl LoadScanlineLinear( + _Out_writes_(count) XMVECTOR* pDestination, _In_ size_t count, + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _In_ DXGI_FORMAT format, _In_ TEX_FILTER_FLAGS flags) noexcept; + + _Success_(return) bool __cdecl StoreScanline( + _Out_writes_bytes_(size) void* pDestination, _In_ size_t size, _In_ DXGI_FORMAT format, + _In_reads_(count) const XMVECTOR* pSource, _In_ size_t count, _In_ float threshold = 0) noexcept; + + _Success_(return) bool __cdecl StoreScanlineLinear( + _Out_writes_bytes_(size) void* pDestination, _In_ size_t size, _In_ DXGI_FORMAT format, + _Inout_updates_all_(count) XMVECTOR* pSource, _In_ size_t count, + _In_ TEX_FILTER_FLAGS flags, _In_ float threshold = 0) noexcept; + + _Success_(return) bool __cdecl StoreScanlineDither( + _Out_writes_bytes_(size) void* pDestination, _In_ size_t size, _In_ DXGI_FORMAT format, + _Inout_updates_all_(count) XMVECTOR* pSource, _In_ size_t count, + _In_ float threshold, size_t y, size_t z, + _Inout_updates_all_opt_(count + 2) XMVECTOR* pDiffusionErrors) noexcept; + + HRESULT __cdecl ConvertToR32G32B32A32(_In_ const Image& srcImage, _Inout_ ScratchImage& image) noexcept; + + HRESULT __cdecl ConvertFromR32G32B32A32(_In_ const Image& srcImage, _In_ const Image& destImage) noexcept; + HRESULT __cdecl ConvertFromR32G32B32A32( + _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _Inout_ ScratchImage& image) noexcept; + HRESULT __cdecl ConvertFromR32G32B32A32( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _Out_ ScratchImage& result) noexcept; + + HRESULT __cdecl ConvertToR16G16B16A16(_In_ const Image& srcImage, _Inout_ ScratchImage& image) noexcept; + + HRESULT __cdecl ConvertFromR16G16B16A16(_In_ const Image& srcImage, _In_ const Image& destImage) noexcept; + + void __cdecl ConvertScanline( + _Inout_updates_all_(count) XMVECTOR* pBuffer, _In_ size_t count, + _In_ DXGI_FORMAT outFormat, _In_ DXGI_FORMAT inFormat, _In_ TEX_FILTER_FLAGS flags) noexcept; + + //--------------------------------------------------------------------------------- + // Misc helper functions + bool __cdecl IsAlphaAllOpaqueBC(_In_ const Image& cImage) noexcept; + bool __cdecl CalculateMipLevels(_In_ size_t width, _In_ size_t height, _Inout_ size_t& mipLevels) noexcept; + bool __cdecl CalculateMipLevels3D(_In_ size_t width, _In_ size_t height, _In_ size_t depth, + _Inout_ size_t& mipLevels) noexcept; + + #ifdef _WIN32 + HRESULT __cdecl ResizeSeparateColorAndAlpha(_In_ IWICImagingFactory* pWIC, + _In_ bool iswic2, + _In_ IWICBitmap* original, + _In_ size_t newWidth, _In_ size_t newHeight, _In_ TEX_FILTER_FLAGS filter, + _Inout_ const Image* img) noexcept; + #endif + + } // namespace Internal +} // namespace DirectX diff --git a/external/DirectXTex/DirectXTexPMAlpha.cpp b/external/DirectXTex/DirectXTexPMAlpha.cpp new file mode 100644 index 00000000..059af95f --- /dev/null +++ b/external/DirectXTex/DirectXTexPMAlpha.cpp @@ -0,0 +1,344 @@ +//------------------------------------------------------------------------------------- +// DirectXTexPMAlpha.cpp +// +// DirectX Texture Library - Premultiplied alpha operations +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +using namespace DirectX; +using namespace DirectX::Internal; + +namespace +{ + constexpr TEX_FILTER_FLAGS GetSRGBFlags(_In_ TEX_PMALPHA_FLAGS compress) noexcept + { + static_assert(TEX_FILTER_SRGB_IN == 0x1000000, "TEX_FILTER_SRGB flag values don't match TEX_FILTER_SRGB_MASK"); + static_assert(static_cast(TEX_PMALPHA_SRGB_IN) == static_cast(TEX_FILTER_SRGB_IN), "TEX_PMALPHA_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_PMALPHA_SRGB_OUT) == static_cast(TEX_FILTER_SRGB_OUT), "TEX_PMALPHA_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_PMALPHA_SRGB) == static_cast(TEX_FILTER_SRGB), "TEX_PMALPHA_SRGB* should match TEX_FILTER_SRGB*"); + return static_cast(compress & TEX_FILTER_SRGB_MASK); + } + + //--------------------------------------------------------------------------------- + // NonPremultiplied alpha -> Premultiplied alpha + HRESULT PremultiplyAlpha_(const Image& srcImage, const Image& destImage) noexcept + { + assert(srcImage.width == destImage.width); + assert(srcImage.height == destImage.height); + + auto scanline = make_AlignedArrayXMVECTOR(srcImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + const uint8_t *pSrc = srcImage.pixels; + uint8_t *pDest = destImage.pixels; + if (!pSrc || !pDest) + return E_POINTER; + + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanline(scanline.get(), srcImage.width, pSrc, srcImage.rowPitch, srcImage.format)) + return E_FAIL; + + XMVECTOR* ptr = scanline.get(); + for (size_t w = 0; w < srcImage.width; ++w) + { + const XMVECTOR v = *ptr; + XMVECTOR alpha = XMVectorSplatW(*ptr); + alpha = XMVectorMultiply(v, alpha); + *(ptr++) = XMVectorSelect(v, alpha, g_XMSelect1110); + } + + if (!StoreScanline(pDest, destImage.rowPitch, destImage.format, scanline.get(), srcImage.width)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + + return S_OK; + } + + HRESULT PremultiplyAlphaLinear(const Image& srcImage, TEX_PMALPHA_FLAGS flags, const Image& destImage) noexcept + { + assert(srcImage.width == destImage.width); + assert(srcImage.height == destImage.height); + + static_assert(static_cast(TEX_PMALPHA_SRGB_IN) == static_cast(TEX_FILTER_SRGB_IN), "TEX_PMALHPA_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_PMALPHA_SRGB_OUT) == static_cast(TEX_FILTER_SRGB_OUT), "TEX_PMALHPA_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_PMALPHA_SRGB) == static_cast(TEX_FILTER_SRGB), "TEX_PMALHPA_SRGB* should match TEX_FILTER_SRGB*"); + flags &= TEX_PMALPHA_SRGB; + + auto scanline = make_AlignedArrayXMVECTOR(srcImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + const uint8_t *pSrc = srcImage.pixels; + uint8_t *pDest = destImage.pixels; + if (!pSrc || !pDest) + return E_POINTER; + + const TEX_FILTER_FLAGS filter = GetSRGBFlags(flags); + + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanlineLinear(scanline.get(), srcImage.width, pSrc, srcImage.rowPitch, srcImage.format, filter)) + return E_FAIL; + + XMVECTOR* ptr = scanline.get(); + for (size_t w = 0; w < srcImage.width; ++w) + { + const XMVECTOR v = *ptr; + XMVECTOR alpha = XMVectorSplatW(*ptr); + alpha = XMVectorMultiply(v, alpha); + *(ptr++) = XMVectorSelect(v, alpha, g_XMSelect1110); + } + + if (!StoreScanlineLinear(pDest, destImage.rowPitch, destImage.format, scanline.get(), srcImage.width, filter)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + + return S_OK; + } + + //--------------------------------------------------------------------------------- + // Premultiplied alpha -> NonPremultiplied alpha (a.k.a. Straight alpha) + HRESULT DemultiplyAlpha(const Image& srcImage, const Image& destImage) noexcept + { + assert(srcImage.width == destImage.width); + assert(srcImage.height == destImage.height); + + auto scanline = make_AlignedArrayXMVECTOR(srcImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + const uint8_t *pSrc = srcImage.pixels; + uint8_t *pDest = destImage.pixels; + if (!pSrc || !pDest) + return E_POINTER; + + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanline(scanline.get(), srcImage.width, pSrc, srcImage.rowPitch, srcImage.format)) + return E_FAIL; + + XMVECTOR* ptr = scanline.get(); + for (size_t w = 0; w < srcImage.width; ++w) + { + const XMVECTOR v = *ptr; + XMVECTOR alpha = XMVectorSplatW(*ptr); + if (XMVectorGetX(alpha) > 0) + { + alpha = XMVectorDivide(v, alpha); + } + *(ptr++) = XMVectorSelect(v, alpha, g_XMSelect1110); + } + + if (!StoreScanline(pDest, destImage.rowPitch, destImage.format, scanline.get(), srcImage.width)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + + return S_OK; + } + + HRESULT DemultiplyAlphaLinear(const Image& srcImage, TEX_PMALPHA_FLAGS flags, const Image& destImage) noexcept + { + assert(srcImage.width == destImage.width); + assert(srcImage.height == destImage.height); + + static_assert(static_cast(TEX_PMALPHA_SRGB_IN) == static_cast(TEX_FILTER_SRGB_IN), "TEX_PMALPHA_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_PMALPHA_SRGB_OUT) == static_cast(TEX_FILTER_SRGB_OUT), "TEX_PMALPHA_SRGB* should match TEX_FILTER_SRGB*"); + static_assert(static_cast(TEX_PMALPHA_SRGB) == static_cast(TEX_FILTER_SRGB), "TEX_PMALPHA_SRGB* should match TEX_FILTER_SRGB*"); + flags &= TEX_PMALPHA_SRGB; + + auto scanline = make_AlignedArrayXMVECTOR(srcImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + const uint8_t *pSrc = srcImage.pixels; + uint8_t *pDest = destImage.pixels; + if (!pSrc || !pDest) + return E_POINTER; + + const TEX_FILTER_FLAGS filter = GetSRGBFlags(flags); + + for (size_t h = 0; h < srcImage.height; ++h) + { + if (!LoadScanlineLinear(scanline.get(), srcImage.width, pSrc, srcImage.rowPitch, srcImage.format, filter)) + return E_FAIL; + + XMVECTOR* ptr = scanline.get(); + for (size_t w = 0; w < srcImage.width; ++w) + { + const XMVECTOR v = *ptr; + XMVECTOR alpha = XMVectorSplatW(*ptr); + if (XMVectorGetX(alpha) > 0) + { + alpha = XMVectorDivide(v, alpha); + } + *(ptr++) = XMVectorSelect(v, alpha, g_XMSelect1110); + } + + if (!StoreScanlineLinear(pDest, destImage.rowPitch, destImage.format, scanline.get(), srcImage.width, filter)) + return E_FAIL; + + pSrc += srcImage.rowPitch; + pDest += destImage.rowPitch; + } + + return S_OK; + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Converts to/from a premultiplied alpha version of the texture +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::PremultiplyAlpha( + const Image& srcImage, + TEX_PMALPHA_FLAGS flags, + ScratchImage& image) noexcept +{ + if (!srcImage.pixels) + return E_POINTER; + + if (IsCompressed(srcImage.format) + || IsPlanar(srcImage.format) + || IsPalettized(srcImage.format) + || IsTypeless(srcImage.format) + || !HasAlpha(srcImage.format)) + return HRESULT_E_NOT_SUPPORTED; + + if ((srcImage.width > UINT32_MAX) || (srcImage.height > UINT32_MAX)) + return E_INVALIDARG; + + HRESULT hr = image.Initialize2D(srcImage.format, srcImage.width, srcImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *rimage = image.GetImage(0, 0, 0); + if (!rimage) + { + image.Release(); + return E_POINTER; + } + + if (flags & TEX_PMALPHA_REVERSE) + { + hr = (flags & TEX_PMALPHA_IGNORE_SRGB) ? DemultiplyAlpha(srcImage, *rimage) : DemultiplyAlphaLinear(srcImage, flags, *rimage); + } + else + { + hr = (flags & TEX_PMALPHA_IGNORE_SRGB) ? PremultiplyAlpha_(srcImage, *rimage) : PremultiplyAlphaLinear(srcImage, flags, *rimage); + } + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Converts to/from a premultiplied alpha version of the texture (complex) +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::PremultiplyAlpha( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + TEX_PMALPHA_FLAGS flags, + ScratchImage& result) noexcept +{ + if (!srcImages || !nimages) + return E_INVALIDARG; + + if (IsCompressed(metadata.format) + || IsPlanar(metadata.format) + || IsPalettized(metadata.format) + || IsTypeless(metadata.format) + || !HasAlpha(metadata.format)) + return HRESULT_E_NOT_SUPPORTED; + + if ((metadata.width > UINT32_MAX) || (metadata.height > UINT32_MAX)) + return E_INVALIDARG; + + if (metadata.IsPMAlpha() != ((flags & TEX_PMALPHA_REVERSE) != 0)) + return E_FAIL; + + TexMetadata mdata2 = metadata; + mdata2.SetAlphaMode((flags & TEX_PMALPHA_REVERSE) ? TEX_ALPHA_MODE_STRAIGHT : TEX_ALPHA_MODE_PREMULTIPLIED); + HRESULT hr = result.Initialize(mdata2); + if (FAILED(hr)) + return hr; + + if (nimages != result.GetImageCount()) + { + result.Release(); + return E_FAIL; + } + + const Image* dest = result.GetImages(); + if (!dest) + { + result.Release(); + return E_POINTER; + } + + for (size_t index = 0; index < nimages; ++index) + { + const Image& src = srcImages[index]; + if (src.format != metadata.format) + { + result.Release(); + return E_FAIL; + } + + if ((src.width > UINT32_MAX) || (src.height > UINT32_MAX)) + return E_FAIL; + + const Image& dst = dest[index]; + assert(dst.format == metadata.format); + + if (src.width != dst.width || src.height != dst.height) + { + result.Release(); + return E_FAIL; + } + + if (flags & TEX_PMALPHA_REVERSE) + { + hr = (flags & TEX_PMALPHA_IGNORE_SRGB) ? DemultiplyAlpha(src, dst) : DemultiplyAlphaLinear(src, flags, dst); + } + else + { + hr = (flags & TEX_PMALPHA_IGNORE_SRGB) ? PremultiplyAlpha_(src, dst) : PremultiplyAlphaLinear(src, flags, dst); + } + if (FAILED(hr)) + { + result.Release(); + return hr; + } + } + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexResize.cpp b/external/DirectXTex/DirectXTexResize.cpp new file mode 100644 index 00000000..5f25b8e8 --- /dev/null +++ b/external/DirectXTex/DirectXTexResize.cpp @@ -0,0 +1,1118 @@ +//------------------------------------------------------------------------------------- +// DirectXTexResize.cpp +// +// DirectX Texture Library - Image resizing operations +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#include "filters.h" + +using namespace DirectX; +using namespace DirectX::Internal; +using Microsoft::WRL::ComPtr; + +namespace +{ +#ifdef _WIN32 + //--- Do image resize using WIC --- + HRESULT PerformResizeUsingWIC( + const Image& srcImage, + TEX_FILTER_FLAGS filter, + const WICPixelFormatGUID& pfGUID, + const Image& destImage) noexcept + { + if (!srcImage.pixels || !destImage.pixels) + return E_POINTER; + + assert(srcImage.format == destImage.format); + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + ComPtr componentInfo; + HRESULT hr = pWIC->CreateComponentInfo(pfGUID, componentInfo.GetAddressOf()); + if (FAILED(hr)) + return hr; + + ComPtr pixelFormatInfo; + hr = componentInfo.As(&pixelFormatInfo); + if (FAILED(hr)) + return hr; + + BOOL supportsTransparency = FALSE; + hr = pixelFormatInfo->SupportsTransparency(&supportsTransparency); + if (FAILED(hr)) + return hr; + + if (srcImage.rowPitch > UINT32_MAX || srcImage.slicePitch > UINT32_MAX + || destImage.rowPitch > UINT32_MAX || destImage.slicePitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + ComPtr source; + hr = pWIC->CreateBitmapFromMemory(static_cast(srcImage.width), static_cast(srcImage.height), pfGUID, + static_cast(srcImage.rowPitch), static_cast(srcImage.slicePitch), + srcImage.pixels, source.GetAddressOf()); + if (FAILED(hr)) + return hr; + + if ((filter & TEX_FILTER_SEPARATE_ALPHA) && supportsTransparency) + { + hr = ResizeSeparateColorAndAlpha(pWIC, iswic2, source.Get(), destImage.width, destImage.height, filter, &destImage); + if (FAILED(hr)) + return hr; + } + else + { + ComPtr scaler; + hr = pWIC->CreateBitmapScaler(scaler.GetAddressOf()); + if (FAILED(hr)) + return hr; + + hr = scaler->Initialize(source.Get(), + static_cast(destImage.width), static_cast(destImage.height), + GetWICInterp(filter)); + if (FAILED(hr)) + return hr; + + WICPixelFormatGUID pfScaler; + hr = scaler->GetPixelFormat(&pfScaler); + if (FAILED(hr)) + return hr; + + if (memcmp(&pfScaler, &pfGUID, sizeof(WICPixelFormatGUID)) == 0) + { + hr = scaler->CopyPixels(nullptr, static_cast(destImage.rowPitch), static_cast(destImage.slicePitch), destImage.pixels); + if (FAILED(hr)) + return hr; + } + else + { + // The WIC bitmap scaler is free to return a different pixel format than the source image, so here we + // convert it back + ComPtr FC; + hr = pWIC->CreateFormatConverter(FC.GetAddressOf()); + if (FAILED(hr)) + return hr; + + BOOL canConvert = FALSE; + hr = FC->CanConvert(pfScaler, pfGUID, &canConvert); + if (FAILED(hr) || !canConvert) + { + return E_UNEXPECTED; + } + + hr = FC->Initialize(scaler.Get(), pfGUID, GetWICDither(filter), nullptr, + 0, WICBitmapPaletteTypeMedianCut); + if (FAILED(hr)) + return hr; + + hr = FC->CopyPixels(nullptr, static_cast(destImage.rowPitch), static_cast(destImage.slicePitch), destImage.pixels); + if (FAILED(hr)) + return hr; + } + } + + return S_OK; + } + + + //--- Do conversion, resize using WIC, conversion cycle --- + HRESULT PerformResizeViaF32( + const Image& srcImage, + TEX_FILTER_FLAGS filter, + const Image& destImage) noexcept + { + if (!srcImage.pixels || !destImage.pixels) + return E_POINTER; + + assert(srcImage.format != DXGI_FORMAT_R32G32B32A32_FLOAT); + assert(srcImage.format == destImage.format); + + ScratchImage temp; + HRESULT hr = ConvertToR32G32B32A32(srcImage, temp); + if (FAILED(hr)) + return hr; + + const Image *tsrc = temp.GetImage(0, 0, 0); + if (!tsrc) + return E_POINTER; + + ScratchImage rtemp; + hr = rtemp.Initialize2D(DXGI_FORMAT_R32G32B32A32_FLOAT, destImage.width, destImage.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *tdest = rtemp.GetImage(0, 0, 0); + if (!tdest) + return E_POINTER; + + hr = PerformResizeUsingWIC(*tsrc, filter, GUID_WICPixelFormat128bppRGBAFloat, *tdest); + if (FAILED(hr)) + return hr; + + temp.Release(); + + hr = ConvertFromR32G32B32A32(*tdest, destImage); + if (FAILED(hr)) + return hr; + + return S_OK; + } + + + //--- determine when to use WIC vs. non-WIC paths --- + bool UseWICFiltering(_In_ DXGI_FORMAT format, _In_ TEX_FILTER_FLAGS filter) noexcept + { + if (filter & TEX_FILTER_FORCE_NON_WIC) + { + // Explicit flag indicates use of non-WIC code paths + return false; + } + + if (filter & TEX_FILTER_FORCE_WIC) + { + // Explicit flag to use WIC code paths, skips all the case checks below + return true; + } + + if (IsSRGB(format) || (filter & TEX_FILTER_SRGB)) + { + // Use non-WIC code paths for sRGB correct filtering + return false; + } + + #if (defined(_XBOX_ONE) && defined(_TITLE)) || defined(_GAMING_XBOX) + if (format == DXGI_FORMAT_R16G16B16A16_FLOAT + || format == DXGI_FORMAT_R16_FLOAT) + { + // Use non-WIC code paths as these conversions are not supported by Xbox version of WIC + return false; + } + #endif + + static_assert(TEX_FILTER_POINT == 0x100000, "TEX_FILTER_ flag values don't match TEX_FILTER_MASK"); + + switch (filter & TEX_FILTER_MODE_MASK) + { + case TEX_FILTER_LINEAR: + if (filter & TEX_FILTER_WRAP) + { + // WIC only supports 'clamp' semantics (MIRROR is equivalent to clamp for linear) + return false; + } + + if (BitsPerColor(format) > 8) + { + // Avoid the WIC bitmap scaler when doing Linear filtering of XR/HDR formats + return false; + } + break; + + case TEX_FILTER_CUBIC: + if (filter & (TEX_FILTER_WRAP | TEX_FILTER_MIRROR)) + { + // WIC only supports 'clamp' semantics + return false; + } + + if (BitsPerColor(format) > 8) + { + // Avoid the WIC bitmap scaler when doing Cubic filtering of XR/HDR formats + return false; + } + break; + + case TEX_FILTER_TRIANGLE: + // WIC does not implement this filter + return false; + + default: + if (BitsPerColor(format) > 8) + { + // Avoid the WIC bitmap scaler when doing filtering of XR/HDR formats + return false; + } + break; + } + + return true; + } +#endif // WIN32 + + //------------------------------------------------------------------------------------- + // Resize custom filters + //------------------------------------------------------------------------------------- + + //--- Point Filter --- + HRESULT ResizePointFilter(const Image& srcImage, const Image& destImage) noexcept + { + assert(srcImage.pixels && destImage.pixels); + assert(srcImage.format == destImage.format); + + // Allocate temporary space (2 scanlines) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(srcImage.width) + destImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* row = target + destImage.width; + + #ifdef _DEBUG + memset(row, 0xCD, sizeof(XMVECTOR)*srcImage.width); + #endif + + const uint8_t* pSrc = srcImage.pixels; + uint8_t* pDest = destImage.pixels; + + const size_t rowPitch = srcImage.rowPitch; + + const size_t xinc = (srcImage.width << 16) / destImage.width; + const size_t yinc = (srcImage.height << 16) / destImage.height; + + size_t lasty = size_t(-1); + + size_t sy = 0; + for (size_t y = 0; y < destImage.height; ++y) + { + if ((lasty ^ sy) >> 16) + { + if (!LoadScanline(row, srcImage.width, pSrc + (rowPitch * (sy >> 16)), rowPitch, srcImage.format)) + return E_FAIL; + lasty = sy; + } + + size_t sx = 0; + for (size_t x = 0; x < destImage.width; ++x) + { + target[x] = row[sx >> 16]; + sx += xinc; + } + + if (!StoreScanline(pDest, destImage.rowPitch, destImage.format, target, destImage.width)) + return E_FAIL; + pDest += destImage.rowPitch; + + sy += yinc; + } + + return S_OK; + } + + + //--- Box Filter --- + HRESULT ResizeBoxFilter(const Image& srcImage, TEX_FILTER_FLAGS filter, const Image& destImage) noexcept + { + using namespace DirectX::Filters; + + assert(srcImage.pixels && destImage.pixels); + assert(srcImage.format == destImage.format); + + if (((destImage.width << 1) != srcImage.width) || ((destImage.height << 1) != srcImage.height)) + return E_FAIL; + + // Allocate temporary space (3 scanlines) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(srcImage.width) * 2 + destImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + XMVECTOR* target = scanline.get(); + + XMVECTOR* urow0 = target + destImage.width; + XMVECTOR* urow1 = urow0 + srcImage.width; + + #ifdef _DEBUG + memset(urow0, 0xCD, sizeof(XMVECTOR)*srcImage.width); + memset(urow1, 0xDD, sizeof(XMVECTOR)*srcImage.width); + #endif + + const XMVECTOR* urow2 = urow0 + 1; + const XMVECTOR* urow3 = urow1 + 1; + + const uint8_t* pSrc = srcImage.pixels; + uint8_t* pDest = destImage.pixels; + + const size_t rowPitch = srcImage.rowPitch; + + for (size_t y = 0; y < destImage.height; ++y) + { + if (!LoadScanlineLinear(urow0, srcImage.width, pSrc, rowPitch, srcImage.format, filter)) + return E_FAIL; + pSrc += rowPitch; + + if (urow0 != urow1) + { + if (!LoadScanlineLinear(urow1, srcImage.width, pSrc, rowPitch, srcImage.format, filter)) + return E_FAIL; + pSrc += rowPitch; + } + + for (size_t x = 0; x < destImage.width; ++x) + { + const size_t x2 = x << 1; + + AVERAGE4(target[x], urow0[x2], urow1[x2], urow2[x2], urow3[x2]) + } + + if (!StoreScanlineLinear(pDest, destImage.rowPitch, destImage.format, target, destImage.width, filter)) + return E_FAIL; + pDest += destImage.rowPitch; + } + + return S_OK; + } + + + //--- Linear Filter --- + HRESULT ResizeLinearFilter(const Image& srcImage, TEX_FILTER_FLAGS filter, const Image& destImage) noexcept + { + using namespace DirectX::Filters; + + assert(srcImage.pixels && destImage.pixels); + assert(srcImage.format == destImage.format); + + // Allocate temporary space (3 scanlines, plus X and Y filters) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(srcImage.width) * 2 + destImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + std::unique_ptr lf(new (std::nothrow) LinearFilter[destImage.width + destImage.height]); + if (!lf) + return E_OUTOFMEMORY; + + LinearFilter* lfX = lf.get(); + LinearFilter* lfY = lf.get() + destImage.width; + + CreateLinearFilter(srcImage.width, destImage.width, (filter & TEX_FILTER_WRAP_U) != 0, lfX); + CreateLinearFilter(srcImage.height, destImage.height, (filter & TEX_FILTER_WRAP_V) != 0, lfY); + + XMVECTOR* target = scanline.get(); + + XMVECTOR* row0 = target + destImage.width; + XMVECTOR* row1 = row0 + srcImage.width; + + #ifdef _DEBUG + memset(row0, 0xCD, sizeof(XMVECTOR)*srcImage.width); + memset(row1, 0xDD, sizeof(XMVECTOR)*srcImage.width); + #endif + + const uint8_t* pSrc = srcImage.pixels; + uint8_t* pDest = destImage.pixels; + + const size_t rowPitch = srcImage.rowPitch; + + size_t u0 = size_t(-1); + size_t u1 = size_t(-1); + + for (size_t y = 0; y < destImage.height; ++y) + { + auto const& toY = lfY[y]; + + if (toY.u0 != u0) + { + if (toY.u0 != u1) + { + u0 = toY.u0; + + if (!LoadScanlineLinear(row0, srcImage.width, pSrc + (rowPitch * u0), rowPitch, srcImage.format, filter)) + return E_FAIL; + } + else + { + u0 = u1; + u1 = size_t(-1); + + std::swap(row0, row1); + } + } + + if (toY.u1 != u1) + { + u1 = toY.u1; + + if (!LoadScanlineLinear(row1, srcImage.width, pSrc + (rowPitch * u1), rowPitch, srcImage.format, filter)) + return E_FAIL; + } + + for (size_t x = 0; x < destImage.width; ++x) + { + auto const& toX = lfX[x]; + + BILINEAR_INTERPOLATE(target[x], toX, toY, row0, row1) + } + + if (!StoreScanlineLinear(pDest, destImage.rowPitch, destImage.format, target, destImage.width, filter)) + return E_FAIL; + pDest += destImage.rowPitch; + } + + return S_OK; + } + + + //--- Cubic Filter --- +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wextra-semi-stmt" +#endif + + HRESULT ResizeCubicFilter(const Image& srcImage, TEX_FILTER_FLAGS filter, const Image& destImage) noexcept + { + using namespace DirectX::Filters; + + assert(srcImage.pixels && destImage.pixels); + assert(srcImage.format == destImage.format); + + // Allocate temporary space (5 scanlines, plus X and Y filters) + auto scanline = make_AlignedArrayXMVECTOR(uint64_t(srcImage.width) * 4 + destImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + std::unique_ptr cf(new (std::nothrow) CubicFilter[destImage.width + destImage.height]); + if (!cf) + return E_OUTOFMEMORY; + + CubicFilter* cfX = cf.get(); + CubicFilter* cfY = cf.get() + destImage.width; + + CreateCubicFilter(srcImage.width, destImage.width, (filter & TEX_FILTER_WRAP_U) != 0, (filter & TEX_FILTER_MIRROR_U) != 0, cfX); + CreateCubicFilter(srcImage.height, destImage.height, (filter & TEX_FILTER_WRAP_V) != 0, (filter & TEX_FILTER_MIRROR_V) != 0, cfY); + + XMVECTOR* target = scanline.get(); + + XMVECTOR* row0 = target + destImage.width; + XMVECTOR* row1 = row0 + srcImage.width; + XMVECTOR* row2 = row0 + srcImage.width * 2; + XMVECTOR* row3 = row0 + srcImage.width * 3; + + #ifdef _DEBUG + memset(row0, 0xCD, sizeof(XMVECTOR)*srcImage.width); + memset(row1, 0xDD, sizeof(XMVECTOR)*srcImage.width); + memset(row2, 0xED, sizeof(XMVECTOR)*srcImage.width); + memset(row3, 0xFD, sizeof(XMVECTOR)*srcImage.width); + #endif + + const uint8_t* pSrc = srcImage.pixels; + uint8_t* pDest = destImage.pixels; + + const size_t rowPitch = srcImage.rowPitch; + + size_t u0 = size_t(-1); + size_t u1 = size_t(-1); + size_t u2 = size_t(-1); + size_t u3 = size_t(-1); + + for (size_t y = 0; y < destImage.height; ++y) + { + auto const& toY = cfY[y]; + + // Scanline 1 + if (toY.u0 != u0) + { + if (toY.u0 != u1 && toY.u0 != u2 && toY.u0 != u3) + { + u0 = toY.u0; + + if (!LoadScanlineLinear(row0, srcImage.width, pSrc + (rowPitch * u0), rowPitch, srcImage.format, filter)) + return E_FAIL; + } + else if (toY.u0 == u1) + { + u0 = u1; + u1 = size_t(-1); + + std::swap(row0, row1); + } + else if (toY.u0 == u2) + { + u0 = u2; + u2 = size_t(-1); + + std::swap(row0, row2); + } + else if (toY.u0 == u3) + { + u0 = u3; + u3 = size_t(-1); + + std::swap(row0, row3); + } + } + + // Scanline 2 + if (toY.u1 != u1) + { + if (toY.u1 != u2 && toY.u1 != u3) + { + u1 = toY.u1; + + if (!LoadScanlineLinear(row1, srcImage.width, pSrc + (rowPitch * u1), rowPitch, srcImage.format, filter)) + return E_FAIL; + } + else if (toY.u1 == u2) + { + u1 = u2; + u2 = size_t(-1); + + std::swap(row1, row2); + } + else if (toY.u1 == u3) + { + u1 = u3; + u3 = size_t(-1); + + std::swap(row1, row3); + } + } + + // Scanline 3 + if (toY.u2 != u2) + { + if (toY.u2 != u3) + { + u2 = toY.u2; + + if (!LoadScanlineLinear(row2, srcImage.width, pSrc + (rowPitch * u2), rowPitch, srcImage.format, filter)) + return E_FAIL; + } + else + { + u2 = u3; + u3 = size_t(-1); + + std::swap(row2, row3); + } + } + + // Scanline 4 + if (toY.u3 != u3) + { + u3 = toY.u3; + + if (!LoadScanlineLinear(row3, srcImage.width, pSrc + (rowPitch * u3), rowPitch, srcImage.format, filter)) + return E_FAIL; + } + + for (size_t x = 0; x < destImage.width; ++x) + { + auto const& toX = cfX[x]; + + XMVECTOR C0, C1, C2, C3; + + CUBIC_INTERPOLATE(C0, toX.x, row0[toX.u0], row0[toX.u1], row0[toX.u2], row0[toX.u3]); + CUBIC_INTERPOLATE(C1, toX.x, row1[toX.u0], row1[toX.u1], row1[toX.u2], row1[toX.u3]); + CUBIC_INTERPOLATE(C2, toX.x, row2[toX.u0], row2[toX.u1], row2[toX.u2], row2[toX.u3]); + CUBIC_INTERPOLATE(C3, toX.x, row3[toX.u0], row3[toX.u1], row3[toX.u2], row3[toX.u3]); + + CUBIC_INTERPOLATE(target[x], toY.x, C0, C1, C2, C3); + } + + if (!StoreScanlineLinear(pDest, destImage.rowPitch, destImage.format, target, destImage.width, filter)) + return E_FAIL; + pDest += destImage.rowPitch; + } + + return S_OK; + } + + + //--- Triangle Filter --- + HRESULT ResizeTriangleFilter(const Image& srcImage, TEX_FILTER_FLAGS filter, const Image& destImage) noexcept + { + using namespace DirectX::Filters; + + assert(srcImage.pixels && destImage.pixels); + assert(srcImage.format == destImage.format); + + // Allocate initial temporary space (1 scanline, accumulation rows, plus X and Y filters) + auto scanline = make_AlignedArrayXMVECTOR(srcImage.width); + if (!scanline) + return E_OUTOFMEMORY; + + std::unique_ptr rowActive(new (std::nothrow) TriangleRow[destImage.height]); + if (!rowActive) + return E_OUTOFMEMORY; + + TriangleRow * rowFree = nullptr; + + std::unique_ptr tfX; + HRESULT hr = CreateTriangleFilter(srcImage.width, destImage.width, (filter & TEX_FILTER_WRAP_U) != 0, tfX); + if (FAILED(hr)) + return hr; + + std::unique_ptr tfY; + hr = CreateTriangleFilter(srcImage.height, destImage.height, (filter & TEX_FILTER_WRAP_V) != 0, tfY); + if (FAILED(hr)) + return hr; + + XMVECTOR* row = scanline.get(); + + #ifdef _DEBUG + memset(row, 0xCD, sizeof(XMVECTOR)*srcImage.width); + #endif + + auto xFromEnd = reinterpret_cast(reinterpret_cast(tfX.get()) + tfX->sizeInBytes); + auto yFromEnd = reinterpret_cast(reinterpret_cast(tfY.get()) + tfY->sizeInBytes); + + // Count times rows get written + for (FilterFrom* yFrom = tfY->from; yFrom < yFromEnd; ) + { + for (size_t j = 0; j < yFrom->count; ++j) + { + const size_t v = yFrom->to[j].u; + assert(v < destImage.height); + ++rowActive[v].remaining; + } + + yFrom = reinterpret_cast(reinterpret_cast(yFrom) + yFrom->sizeInBytes); + } + + // Filter image + const uint8_t* pSrc = srcImage.pixels; + const size_t rowPitch = srcImage.rowPitch; + const uint8_t* pEndSrc = pSrc + rowPitch * srcImage.height; + + uint8_t* pDest = destImage.pixels; + + for (FilterFrom* yFrom = tfY->from; yFrom < yFromEnd; ) + { + // Create accumulation rows as needed + for (size_t j = 0; j < yFrom->count; ++j) + { + const size_t v = yFrom->to[j].u; + assert(v < destImage.height); + TriangleRow* rowAcc = &rowActive[v]; + + if (!rowAcc->scanline) + { + if (rowFree) + { + // Steal and reuse scanline from 'free row' list + assert(rowFree->scanline != nullptr); + rowAcc->scanline.reset(rowFree->scanline.release()); + rowFree = rowFree->next; + } + else + { + auto nscanline = make_AlignedArrayXMVECTOR(destImage.width); + if (!nscanline) + return E_OUTOFMEMORY; + rowAcc->scanline.swap(nscanline); + } + + memset(rowAcc->scanline.get(), 0, sizeof(XMVECTOR) * destImage.width); + } + } + + // Load source scanline + if ((pSrc + rowPitch) > pEndSrc) + return E_FAIL; + + if (!LoadScanlineLinear(row, srcImage.width, pSrc, rowPitch, srcImage.format, filter)) + return E_FAIL; + + pSrc += rowPitch; + + // Process row + size_t x = 0; + for (FilterFrom* xFrom = tfX->from; xFrom < xFromEnd; ++x) + { + for (size_t j = 0; j < yFrom->count; ++j) + { + const size_t v = yFrom->to[j].u; + assert(v < destImage.height); + const float yweight = yFrom->to[j].weight; + + XMVECTOR* accPtr = rowActive[v].scanline.get(); + if (!accPtr) + return E_POINTER; + + for (size_t k = 0; k < xFrom->count; ++k) + { + size_t u = xFrom->to[k].u; + assert(u < destImage.width); + + const XMVECTOR weight = XMVectorReplicate(yweight * xFrom->to[k].weight); + + assert(x < srcImage.width); + accPtr[u] = XMVectorMultiplyAdd(row[x], weight, accPtr[u]); + } + } + + xFrom = reinterpret_cast(reinterpret_cast(xFrom) + xFrom->sizeInBytes); + } + + // Write completed accumulation rows + for (size_t j = 0; j < yFrom->count; ++j) + { + size_t v = yFrom->to[j].u; + assert(v < destImage.height); + TriangleRow* rowAcc = &rowActive[v]; + + assert(rowAcc->remaining > 0); + --rowAcc->remaining; + + if (!rowAcc->remaining) + { + XMVECTOR* pAccSrc = rowAcc->scanline.get(); + if (!pAccSrc) + return E_POINTER; + + switch (destImage.format) + { + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + { + // Need to slightly bias results for floating-point error accumulation which can + // be visible with harshly quantized values + static const XMVECTORF32 Bias = { { { 0.f, 0.f, 0.f, 0.1f } } }; + + XMVECTOR* ptr = pAccSrc; + for (size_t i = 0; i < destImage.width; ++i, ++ptr) + { + *ptr = XMVectorAdd(*ptr, Bias); + } + } + break; + + default: + break; + } + + // This performs any required clamping + if (!StoreScanlineLinear(pDest + (destImage.rowPitch * v), destImage.rowPitch, destImage.format, pAccSrc, destImage.width, filter)) + return E_FAIL; + + // Put row on freelist to reuse it's allocated scanline + rowAcc->next = rowFree; + rowFree = rowAcc; + } + } + + yFrom = reinterpret_cast(reinterpret_cast(yFrom) + yFrom->sizeInBytes); + } + + return S_OK; + } + + + //--- Custom filter resize --- + HRESULT PerformResizeUsingCustomFilters(const Image& srcImage, TEX_FILTER_FLAGS filter, const Image& destImage) noexcept + { + if (!srcImage.pixels || !destImage.pixels) + return E_POINTER; + + static_assert(TEX_FILTER_POINT == 0x100000, "TEX_FILTER_ flag values don't match TEX_FILTER_MASK"); + + uint32_t filter_select = filter & TEX_FILTER_MODE_MASK; + if (!filter_select) + { + // Default filter choice + filter_select = (((destImage.width << 1) == srcImage.width) && ((destImage.height << 1) == srcImage.height)) + ? TEX_FILTER_BOX : TEX_FILTER_LINEAR; + } + + switch (filter_select) + { + case TEX_FILTER_POINT: + return ResizePointFilter(srcImage, destImage); + + case TEX_FILTER_BOX: + return ResizeBoxFilter(srcImage, filter, destImage); + + case TEX_FILTER_LINEAR: + return ResizeLinearFilter(srcImage, filter, destImage); + + case TEX_FILTER_CUBIC: + return ResizeCubicFilter(srcImage, filter, destImage); + + case TEX_FILTER_TRIANGLE: + return ResizeTriangleFilter(srcImage, filter, destImage); + + default: + return HRESULT_E_NOT_SUPPORTED; + } + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Resize image +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Resize( + const Image& srcImage, + size_t width, + size_t height, + TEX_FILTER_FLAGS filter, + ScratchImage& image) noexcept +{ + if (width == 0 || height == 0) + return E_INVALIDARG; + + if ((srcImage.width > UINT32_MAX) || (srcImage.height > UINT32_MAX)) + return E_INVALIDARG; + + if ((width > UINT32_MAX) || (height > UINT32_MAX)) + return E_INVALIDARG; + + if (!srcImage.pixels) + return E_POINTER; + + if (IsCompressed(srcImage.format)) + { + // We don't support resizing compressed images + return HRESULT_E_NOT_SUPPORTED; + } + +#ifdef _WIN32 + bool usewic = UseWICFiltering(srcImage.format, filter); + + WICPixelFormatGUID pfGUID = {}; + const bool wicpf = (usewic) ? DXGIToWIC(srcImage.format, pfGUID, true) : false; + + if (usewic && !wicpf) + { + // Check to see if the source and/or result size is too big for WIC + const uint64_t expandedSize = uint64_t(width) * uint64_t(height) * sizeof(float) * 4; + const uint64_t expandedSize2 = uint64_t(srcImage.width) * uint64_t(srcImage.height) * sizeof(float) * 4; + if (expandedSize > UINT32_MAX || expandedSize2 > UINT32_MAX) + { + if (filter & TEX_FILTER_FORCE_WIC) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + usewic = false; + } + } +#endif // WIN32 + + HRESULT hr = image.Initialize2D(srcImage.format, width, height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *rimage = image.GetImage(0, 0, 0); + if (!rimage) + return E_POINTER; + +#ifdef _WIN32 + if (usewic) + { + if (wicpf) + { + // Case 1: Source format is supported by Windows Imaging Component + hr = PerformResizeUsingWIC(srcImage, filter, pfGUID, *rimage); + } + else + { + // Case 2: Source format is not supported by WIC, so we have to convert, resize, and convert back + hr = PerformResizeViaF32(srcImage, filter, *rimage); + } + } + else + #endif + { + // Case 3: not using WIC resizing + hr = PerformResizeUsingCustomFilters(srcImage, filter, *rimage); + } + + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Resize image (complex) +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::Resize( + const Image* srcImages, + size_t nimages, + const TexMetadata& metadata, + size_t width, + size_t height, + TEX_FILTER_FLAGS filter, + ScratchImage& result) noexcept +{ + if (!srcImages || !nimages || width == 0 || height == 0) + return E_INVALIDARG; + + if ((width > UINT32_MAX) || (height > UINT32_MAX)) + return E_INVALIDARG; + + TexMetadata mdata2 = metadata; + mdata2.width = width; + mdata2.height = height; + mdata2.mipLevels = 1; + HRESULT hr = result.Initialize(mdata2); + if (FAILED(hr)) + return hr; + +#ifdef _WIN32 + bool usewic = !metadata.IsPMAlpha() && UseWICFiltering(metadata.format, filter); + + WICPixelFormatGUID pfGUID = {}; + const bool wicpf = (usewic) ? DXGIToWIC(metadata.format, pfGUID, true) : false; + + if (usewic && !wicpf) + { + // Check to see if the source and/or result size is too big for WIC + const uint64_t expandedSize = uint64_t(width) * uint64_t(height) * sizeof(float) * 4; + const uint64_t expandedSize2 = uint64_t(metadata.width) * uint64_t(metadata.height) * sizeof(float) * 4; + if (expandedSize > UINT32_MAX || expandedSize2 > UINT32_MAX) + { + if (filter & TEX_FILTER_FORCE_WIC) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + usewic = false; + } + } +#endif + + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + assert(metadata.depth == 1); + + for (size_t item = 0; item < metadata.arraySize; ++item) + { + const size_t srcIndex = metadata.ComputeIndex(0, item, 0); + if (srcIndex >= nimages) + { + result.Release(); + return E_FAIL; + } + + const Image* srcimg = &srcImages[srcIndex]; + const Image* destimg = result.GetImage(0, item, 0); + if (!srcimg || !destimg) + { + result.Release(); + return E_POINTER; + } + + if (srcimg->format != metadata.format) + { + result.Release(); + return E_FAIL; + } + + if ((srcimg->width > UINT32_MAX) || (srcimg->height > UINT32_MAX)) + { + result.Release(); + return E_FAIL; + } + + #ifdef _WIN32 + if (usewic) + { + if (wicpf) + { + // Case 1: Source format is supported by Windows Imaging Component + hr = PerformResizeUsingWIC(*srcimg, filter, pfGUID, *destimg); + } + else + { + // Case 2: Source format is not supported by WIC, so we have to convert, resize, and convert back + hr = PerformResizeViaF32(*srcimg, filter, *destimg); + } + } + else + #endif + { + // Case 3: not using WIC resizing + hr = PerformResizeUsingCustomFilters(*srcimg, filter, *destimg); + } + + if (FAILED(hr)) + { + result.Release(); + return hr; + } + } + break; + + case TEX_DIMENSION_TEXTURE3D: + assert(metadata.arraySize == 1); + + for (size_t slice = 0; slice < metadata.depth; ++slice) + { + const size_t srcIndex = metadata.ComputeIndex(0, 0, slice); + if (srcIndex >= nimages) + { + result.Release(); + return E_FAIL; + } + + const Image* srcimg = &srcImages[srcIndex]; + const Image* destimg = result.GetImage(0, 0, slice); + if (!srcimg || !destimg) + { + result.Release(); + return E_POINTER; + } + + if (srcimg->format != metadata.format) + { + result.Release(); + return E_FAIL; + } + + if ((srcimg->width > UINT32_MAX) || (srcimg->height > UINT32_MAX)) + { + result.Release(); + return E_FAIL; + } + + #ifdef _WIN32 + if (usewic) + { + if (wicpf) + { + // Case 1: Source format is supported by Windows Imaging Component + hr = PerformResizeUsingWIC(*srcimg, filter, pfGUID, *destimg); + } + else + { + // Case 2: Source format is not supported by WIC, so we have to convert, resize, and convert back + hr = PerformResizeViaF32(*srcimg, filter, *destimg); + } + } + else + #endif + { + // Case 3: not using WIC resizing + hr = PerformResizeUsingCustomFilters(*srcimg, filter, *destimg); + } + + if (FAILED(hr)) + { + result.Release(); + return hr; + } + } + break; + + default: + result.Release(); + return E_FAIL; + } + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexTGA.cpp b/external/DirectXTex/DirectXTexTGA.cpp new file mode 100644 index 00000000..b758a4f8 --- /dev/null +++ b/external/DirectXTex/DirectXTexTGA.cpp @@ -0,0 +1,2571 @@ +//------------------------------------------------------------------------------------- +// DirectXTexTGA.cpp +// +// DirectX Texture Library - Targa Truevision (TGA) file format reader/writer +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +// +// The implementation here has the following limitations: +// * Does not support files that contain color maps (these are rare in practice) +// * Interleaved files are not supported (deprecated aspect of TGA format) +// * Only supports 8-bit grayscale; 16-, 24-, and 32-bit truecolor images RLE or uncompressed +// plus 24-bit color-mapped uncompressed images +// * Always writes uncompressed files (i.e. can read RLE compression, but does not write it) +// + +using namespace DirectX; +using namespace DirectX::Internal; + +namespace +{ + constexpr float GAMMA_EPSILON = 0.01f; + + const char g_Signature[] = "TRUEVISION-XFILE."; + // This is the official footer signature for the TGA 2.0 file format. + + enum TGAImageType + { + TGA_NO_IMAGE = 0, + TGA_COLOR_MAPPED = 1, + TGA_TRUECOLOR = 2, + TGA_BLACK_AND_WHITE = 3, + TGA_COLOR_MAPPED_RLE = 9, + TGA_TRUECOLOR_RLE = 10, + TGA_BLACK_AND_WHITE_RLE = 11, + }; + + enum TGADescriptorFlags + { + TGA_FLAGS_INVERTX = 0x10, + TGA_FLAGS_INVERTY = 0x20, + TGA_FLAGS_INTERLEAVED_2WAY = 0x40, // Deprecated + TGA_FLAGS_INTERLEAVED_4WAY = 0x80, // Deprecated + }; + + enum TGAAttributesType : uint8_t + { + TGA_ATTRIBUTE_NONE = 0, // 0: no alpha data included + TGA_ATTRIBUTE_IGNORED = 1, // 1: undefined data, can be ignored + TGA_ATTRIBUTE_UNDEFINED = 2, // 2: uedefined data, should be retained + TGA_ATTRIBUTE_ALPHA = 3, // 3: useful alpha channel data + TGA_ATTRIBUTE_PREMULTIPLIED = 4, // 4: pre-multiplied alpha + }; + +#pragma pack(push,1) + struct TGA_HEADER + { + uint8_t bIDLength; + uint8_t bColorMapType; + uint8_t bImageType; + uint16_t wColorMapFirst; + uint16_t wColorMapLength; + uint8_t bColorMapSize; + uint16_t wXOrigin; + uint16_t wYOrigin; + uint16_t wWidth; + uint16_t wHeight; + uint8_t bBitsPerPixel; + uint8_t bDescriptor; + }; + + static_assert(sizeof(TGA_HEADER) == 18, "TGA 2.0 size mismatch"); + + constexpr size_t TGA_HEADER_LEN = 18; + + struct TGA_FOOTER + { + uint32_t dwExtensionOffset; + uint32_t dwDeveloperOffset; + char Signature[18]; + }; + + static_assert(sizeof(TGA_FOOTER) == 26, "TGA 2.0 size mismatch"); + + struct TGA_EXTENSION + { + uint16_t wSize; + char szAuthorName[41]; + char szAuthorComment[324]; + uint16_t wStampMonth; + uint16_t wStampDay; + uint16_t wStampYear; + uint16_t wStampHour; + uint16_t wStampMinute; + uint16_t wStampSecond; + char szJobName[41]; + uint16_t wJobHour; + uint16_t wJobMinute; + uint16_t wJobSecond; + char szSoftwareId[41]; + uint16_t wVersionNumber; + uint8_t bVersionLetter; + uint32_t dwKeyColor; + uint16_t wPixelNumerator; + uint16_t wPixelDenominator; + uint16_t wGammaNumerator; + uint16_t wGammaDenominator; + uint32_t dwColorOffset; + uint32_t dwStampOffset; + uint32_t dwScanOffset; + uint8_t bAttributesType; + }; + + static_assert(sizeof(TGA_EXTENSION) == 495, "TGA 2.0 size mismatch"); + +#pragma pack(pop) + + enum CONVERSION_FLAGS + { + CONV_FLAGS_NONE = 0x0, + CONV_FLAGS_EXPAND = 0x1, // Conversion requires expanded pixel size + CONV_FLAGS_INVERTX = 0x2, // If set, scanlines are right-to-left + CONV_FLAGS_INVERTY = 0x4, // If set, scanlines are top-to-bottom + CONV_FLAGS_RLE = 0x8, // Source data is RLE compressed + CONV_FLAGS_PALETTED = 0x10, // Source data is paletted + + CONV_FLAGS_SWIZZLE = 0x10000, // Swizzle BGR<->RGB data + CONV_FLAGS_888 = 0x20000, // 24bpp format + }; + + + //------------------------------------------------------------------------------------- + // Decodes TGA header + //------------------------------------------------------------------------------------- + HRESULT DecodeTGAHeader( + _In_reads_bytes_(size) const uint8_t* pSource, + size_t size, + TGA_FLAGS flags, + _Out_ TexMetadata& metadata, + size_t& offset, + _Inout_opt_ uint32_t* convFlags) noexcept + { + if (!pSource) + return E_INVALIDARG; + + memset(&metadata, 0, sizeof(TexMetadata)); + + if (size < TGA_HEADER_LEN) + { + return HRESULT_E_INVALID_DATA; + } + + auto pHeader = reinterpret_cast(pSource); + + if (pHeader->bDescriptor & (TGA_FLAGS_INTERLEAVED_2WAY | TGA_FLAGS_INTERLEAVED_4WAY)) + { + return HRESULT_E_NOT_SUPPORTED; + } + + if (!pHeader->wWidth || !pHeader->wHeight) + { + // These are uint16 values so are already bounded by UINT16_MAX. + return HRESULT_E_INVALID_DATA; + } + + switch (pHeader->bImageType) + { + case TGA_NO_IMAGE: + case TGA_COLOR_MAPPED_RLE: + return HRESULT_E_NOT_SUPPORTED; + + case TGA_COLOR_MAPPED: + if (pHeader->bColorMapType != 1 + || pHeader->wColorMapLength == 0 + || pHeader->bBitsPerPixel != 8) + { + return HRESULT_E_NOT_SUPPORTED; + } + + switch (pHeader->bColorMapSize) + { + case 24: + if (flags & TGA_FLAGS_BGR) + { + metadata.format = DXGI_FORMAT_B8G8R8X8_UNORM; + } + else + { + metadata.format = DXGI_FORMAT_R8G8B8A8_UNORM; + metadata.SetAlphaMode(TEX_ALPHA_MODE_OPAQUE); + } + break; + + // Other possible values are 15, 16, and 32 which we do not support. + + default: + return HRESULT_E_NOT_SUPPORTED; + } + + if (convFlags) + { + *convFlags |= CONV_FLAGS_PALETTED; + } + break; + + case TGA_TRUECOLOR: + case TGA_TRUECOLOR_RLE: + if (pHeader->bColorMapType != 0 + || pHeader->wColorMapLength != 0) + { + return HRESULT_E_NOT_SUPPORTED; + } + + switch (pHeader->bBitsPerPixel) + { + case 16: + metadata.format = DXGI_FORMAT_B5G5R5A1_UNORM; + break; + + case 24: + if (flags & TGA_FLAGS_BGR) + { + metadata.format = DXGI_FORMAT_B8G8R8X8_UNORM; + } + else + { + metadata.format = DXGI_FORMAT_R8G8B8A8_UNORM; + metadata.SetAlphaMode(TEX_ALPHA_MODE_OPAQUE); + } + + if (convFlags) + *convFlags |= CONV_FLAGS_EXPAND; + break; + + case 32: + metadata.format = (flags & TGA_FLAGS_BGR) ? DXGI_FORMAT_B8G8R8A8_UNORM : DXGI_FORMAT_R8G8B8A8_UNORM; + break; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + + if (convFlags && (pHeader->bImageType == TGA_TRUECOLOR_RLE)) + { + *convFlags |= CONV_FLAGS_RLE; + } + break; + + case TGA_BLACK_AND_WHITE: + case TGA_BLACK_AND_WHITE_RLE: + if (pHeader->bColorMapType != 0 + || pHeader->wColorMapLength != 0) + { + return HRESULT_E_NOT_SUPPORTED; + } + + switch (pHeader->bBitsPerPixel) + { + case 8: + metadata.format = DXGI_FORMAT_R8_UNORM; + break; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + + if (convFlags && (pHeader->bImageType == TGA_BLACK_AND_WHITE_RLE)) + { + *convFlags |= CONV_FLAGS_RLE; + } + break; + + default: + return HRESULT_E_INVALID_DATA; + } + + uint64_t sizeBytes = uint64_t(pHeader->wWidth) * uint64_t(pHeader->wHeight) * uint64_t(pHeader->bBitsPerPixel) / 8; + if (sizeBytes > UINT32_MAX) + { + return HRESULT_E_ARITHMETIC_OVERFLOW; + } + + metadata.width = pHeader->wWidth; + metadata.height = pHeader->wHeight; + metadata.depth = metadata.arraySize = metadata.mipLevels = 1; + metadata.dimension = TEX_DIMENSION_TEXTURE2D; + + if (convFlags) + { + if (pHeader->bDescriptor & TGA_FLAGS_INVERTX) + *convFlags |= CONV_FLAGS_INVERTX; + + if (pHeader->bDescriptor & TGA_FLAGS_INVERTY) + *convFlags |= CONV_FLAGS_INVERTY; + } + + offset = TGA_HEADER_LEN; + + if (pHeader->bIDLength != 0) + { + offset += pHeader->bIDLength; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Reads palette for color-mapped TGA formats + //------------------------------------------------------------------------------------- + HRESULT ReadPalette( + _In_reads_(TGA_HEADER_LEN) const uint8_t* header, + _In_reads_bytes_(size) const void* pSource, + size_t size, + TGA_FLAGS flags, + uint8_t palette[256 * 4], + size_t& colorMapSize) noexcept + { + assert(header && pSource); + + auto pHeader = reinterpret_cast(header); + + if (pHeader->bColorMapType != 1 + || pHeader->wColorMapLength == 0 + || pHeader->wColorMapLength > 256 + || pHeader->bColorMapSize != 24) + { + return HRESULT_E_NOT_SUPPORTED; + } + + const size_t maxColorMap = size_t(pHeader->wColorMapFirst) + size_t(pHeader->wColorMapLength); + if (maxColorMap > 256) + { + return HRESULT_E_NOT_SUPPORTED; + } + + colorMapSize = size_t(pHeader->wColorMapLength) * ((size_t(pHeader->bColorMapSize) + 7) >> 3); + if (colorMapSize > size) + { + return HRESULT_E_INVALID_DATA; + } + + auto bytes = reinterpret_cast(pSource); + + for (size_t i = pHeader->wColorMapFirst; i < maxColorMap; ++i) + { + if (flags & TGA_FLAGS_BGR) + { + palette[i * 4 + 0] = bytes[0]; + palette[i * 4 + 2] = bytes[2]; + } + else + { + palette[i * 4 + 0] = bytes[2]; + palette[i * 4 + 2] = bytes[0]; + } + palette[i * 4 + 1] = bytes[1]; + palette[i * 4 + 3] = 255; + bytes += 3; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Set alpha for images with all 0 alpha channel + //------------------------------------------------------------------------------------- + HRESULT SetAlphaChannelToOpaque(_In_ const Image* image) noexcept + { + assert(image); + + uint8_t* pPixels = image->pixels; + if (!pPixels) + return E_POINTER; + + for (size_t y = 0; y < image->height; ++y) + { + CopyScanline(pPixels, image->rowPitch, pPixels, image->rowPitch, image->format, TEXP_SCANLINE_SETALPHA); + pPixels += image->rowPitch; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Uncompress pixel data from a TGA into the target image + //------------------------------------------------------------------------------------- + HRESULT UncompressPixels( + _In_reads_bytes_(size) const void* pSource, + size_t size, + TGA_FLAGS flags, + _In_ const Image* image, + _In_ uint32_t convFlags) noexcept + { + assert(pSource && size > 0); + + if (!image || !image->pixels) + return E_POINTER; + + // Compute TGA image data pitch + size_t rowPitch, slicePitch; + HRESULT hr = ComputePitch(image->format, image->width, image->height, rowPitch, slicePitch, + (convFlags & CONV_FLAGS_EXPAND) ? CP_FLAGS_24BPP : CP_FLAGS_NONE); + if (FAILED(hr)) + return hr; + + auto sPtr = static_cast(pSource); + const uint8_t* endPtr = sPtr + size; + + bool opaquealpha = false; + + switch (image->format) + { + //--------------------------------------------------------------------------- 8-bit + case DXGI_FORMAT_R8_UNORM: + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + assert(offset < rowPitch); + + uint8_t* dPtr = image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1))) + + offset; + + for (size_t x = 0; x < image->width; ) + { + if (sPtr >= endPtr) + return E_FAIL; + + if (*sPtr & 0x80) + { + // Repeat + size_t j = size_t(*sPtr & 0x7F) + 1; + if (++sPtr >= endPtr) + return E_FAIL; + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + *dPtr = *sPtr; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + + ++sPtr; + } + else + { + // Literal + size_t j = size_t(*sPtr & 0x7F) + 1; + ++sPtr; + + if (sPtr + j > endPtr) + return E_FAIL; + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + *dPtr = *(sPtr++); + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + } + } + break; + + //-------------------------------------------------------------------------- 16-bit + case DXGI_FORMAT_B5G5R5A1_UNORM: + { + uint32_t minalpha = 255; + uint32_t maxalpha = 0; + + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + assert(offset * 2 < rowPitch); + + auto dPtr = reinterpret_cast(image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1)))) + + offset; + + for (size_t x = 0; x < image->width; ) + { + if (sPtr >= endPtr) + return E_FAIL; + + if (*sPtr & 0x80) + { + // Repeat + size_t j = size_t(*sPtr & 0x7F) + 1; + ++sPtr; + + if (sPtr + 1 >= endPtr) + return E_FAIL; + + auto t = static_cast(uint32_t(*sPtr) | uint32_t(*(sPtr + 1u) << 8)); + + const uint32_t alpha = (t & 0x8000) ? 255 : 0; + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + sPtr += 2; + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + *dPtr = t; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + else + { + // Literal + size_t j = size_t(*sPtr & 0x7F) + 1; + ++sPtr; + + if (sPtr + (j * 2) > endPtr) + return E_FAIL; + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + auto t = static_cast(uint32_t(*sPtr) | uint32_t(*(sPtr + 1u) << 8)); + + const uint32_t alpha = (t & 0x8000) ? 255 : 0; + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + sPtr += 2; + *dPtr = t; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + } + } + + // If there are no non-zero alpha channel entries, we'll assume alpha is not used and force it to opaque + if (maxalpha == 0 && !(flags & TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA)) + { + opaquealpha = true; + hr = SetAlphaChannelToOpaque(image); + if (FAILED(hr)) + return hr; + } + else if (minalpha == 255) + { + opaquealpha = true; + } + } + break; + + //------------------------------------------------------ 24/32-bit (with swizzling) + case DXGI_FORMAT_R8G8B8A8_UNORM: + { + uint32_t minalpha = 255; + uint32_t maxalpha = 0; + + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + + auto dPtr = reinterpret_cast(image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1)))) + + offset; + + for (size_t x = 0; x < image->width; ) + { + if (sPtr >= endPtr) + return E_FAIL; + + if (*sPtr & 0x80) + { + // Repeat + size_t j = size_t(*sPtr & 0x7F) + 1; + ++sPtr; + + uint32_t t; + if (convFlags & CONV_FLAGS_EXPAND) + { + assert(offset * 3 < rowPitch); + + if (sPtr + 2 >= endPtr) + return E_FAIL; + + // BGR -> RGBA + t = uint32_t(*sPtr << 16) | uint32_t(*(sPtr + 1) << 8) | uint32_t(*(sPtr + 2)) | 0xFF000000; + sPtr += 3; + + minalpha = maxalpha = 255; + } + else + { + assert(offset * 4 < rowPitch); + + if (sPtr + 3 >= endPtr) + return E_FAIL; + + // BGRA -> RGBA + const uint32_t alpha = *(sPtr + 3); + t = uint32_t(*sPtr << 16) | uint32_t(*(sPtr + 1) << 8) | uint32_t(*(sPtr + 2)) | uint32_t(alpha << 24); + + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + sPtr += 4; + } + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + *dPtr = t; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + else + { + // Literal + size_t j = size_t(*sPtr & 0x7F) + 1; + ++sPtr; + + if (convFlags & CONV_FLAGS_EXPAND) + { + if (sPtr + (j * 3) > endPtr) + return E_FAIL; + } + else + { + if (sPtr + (j * 4) > endPtr) + return E_FAIL; + } + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + if (convFlags & CONV_FLAGS_EXPAND) + { + assert(offset * 3 < rowPitch); + + if (sPtr + 2 >= endPtr) + return E_FAIL; + + // BGR -> RGBA + *dPtr = uint32_t(*sPtr << 16) | uint32_t(*(sPtr + 1) << 8) | uint32_t(*(sPtr + 2)) | 0xFF000000; + sPtr += 3; + + minalpha = maxalpha = 255; + } + else + { + assert(offset * 4 < rowPitch); + + if (sPtr + 3 >= endPtr) + return E_FAIL; + + // BGRA -> RGBA + uint32_t alpha = *(sPtr + 3); + *dPtr = uint32_t(*sPtr << 16) | uint32_t(*(sPtr + 1) << 8) | uint32_t(*(sPtr + 2)) | uint32_t(alpha << 24); + + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + sPtr += 4; + } + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + } + } + + // If there are no non-zero alpha channel entries, we'll assume alpha is not used and force it to opaque + if (maxalpha == 0 && !(flags & TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA)) + { + opaquealpha = true; + hr = SetAlphaChannelToOpaque(image); + if (FAILED(hr)) + return hr; + } + else if (minalpha == 255) + { + opaquealpha = true; + } + } + break; + + //-------------------------------------------------------------------- 32-bit (BGR) + case DXGI_FORMAT_B8G8R8A8_UNORM: + { + assert((convFlags & CONV_FLAGS_EXPAND) == 0); + + uint32_t minalpha = 255; + uint32_t maxalpha = 0; + + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + + auto dPtr = reinterpret_cast(image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1)))) + + offset; + + for (size_t x = 0; x < image->width; ) + { + if (sPtr >= endPtr) + return E_FAIL; + + if (*sPtr & 0x80) + { + // Repeat + size_t j = size_t(*sPtr & 0x7F) + 1; + ++sPtr; + + assert(offset * 4 < rowPitch); + + if (sPtr + 3 >= endPtr) + return E_FAIL; + + const uint32_t alpha = *(sPtr + 3); + + auto t = *reinterpret_cast(sPtr); + + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + sPtr += 4; + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + *dPtr = t; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + else + { + // Literal + size_t j = size_t(*sPtr & 0x7F) + 1; + ++sPtr; + + if (sPtr + (j * 4) > endPtr) + return E_FAIL; + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + assert(offset * 4 < rowPitch); + + if (sPtr + 3 >= endPtr) + return E_FAIL; + + const uint32_t alpha = *(sPtr + 3); + *dPtr = *reinterpret_cast(sPtr); + + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + sPtr += 4; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + } + } + + // If there are no non-zero alpha channel entries, we'll assume alpha is not used and force it to opaque + if (maxalpha == 0 && !(flags & TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA)) + { + opaquealpha = true; + hr = SetAlphaChannelToOpaque(image); + if (FAILED(hr)) + return hr; + } + else if (minalpha == 255) + { + opaquealpha = true; + } + } + break; + + //-------------------------------------------------------------------- 24-bit (BGR) + case DXGI_FORMAT_B8G8R8X8_UNORM: + { + assert((convFlags & CONV_FLAGS_EXPAND) != 0); + + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + + auto dPtr = reinterpret_cast(image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1)))) + + offset; + + for (size_t x = 0; x < image->width; ) + { + if (sPtr >= endPtr) + return E_FAIL; + + if (*sPtr & 0x80) + { + // Repeat + size_t j = size_t(*sPtr & 0x7F) + 1; + ++sPtr; + + assert(offset * 3 < rowPitch); + + if (sPtr + 2 >= endPtr) + return E_FAIL; + + uint32_t t = uint32_t(*sPtr) | uint32_t(*(sPtr + 1) << 8) | uint32_t(*(sPtr + 2) << 16); + sPtr += 3; + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + *dPtr = t; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + else + { + // Literal + size_t j = size_t(*sPtr & 0x7F) + 1; + ++sPtr; + + if (sPtr + (j * 3) > endPtr) + return E_FAIL; + + for (; j > 0; --j, ++x) + { + if (x >= image->width) + return E_FAIL; + + assert(offset * 3 < rowPitch); + + if (sPtr + 2 >= endPtr) + return E_FAIL; + + *dPtr = uint32_t(*sPtr) | uint32_t(*(sPtr + 1) << 8) | uint32_t(*(sPtr + 2) << 16); + sPtr += 3; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + } + } + } + break; + + //--------------------------------------------------------------------------------- + default: + return E_FAIL; + } + + return opaquealpha ? S_FALSE : S_OK; + } + + + //------------------------------------------------------------------------------------- + // Copies pixel data from a TGA into the target image + //------------------------------------------------------------------------------------- + HRESULT CopyPixels( + _In_reads_bytes_(size) const void* pSource, + size_t size, + TGA_FLAGS flags, + _In_ const Image* image, + _In_ uint32_t convFlags, + _In_opt_ const uint8_t* palette) noexcept + { + assert(pSource && size > 0); + + if (!image || !image->pixels) + return E_POINTER; + + // Compute TGA image data pitch + size_t rowPitch, slicePitch; + HRESULT hr = ComputePitch(image->format, image->width, image->height, + rowPitch, slicePitch, + (convFlags & CONV_FLAGS_EXPAND) ? CP_FLAGS_24BPP : CP_FLAGS_NONE); + if (FAILED(hr)) + return hr; + + auto sPtr = static_cast(pSource); + const uint8_t* endPtr = sPtr + size; + + bool opaquealpha = false; + + if ((convFlags & CONV_FLAGS_PALETTED) != 0) + { + if (!palette) + return E_UNEXPECTED; + + const auto table = reinterpret_cast(palette); + + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + assert(offset < rowPitch); + + auto dPtr = reinterpret_cast(image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1)))) + + offset; + + for (size_t x = 0; x < image->width; ++x) + { + if (sPtr >= endPtr) + return E_FAIL; + + *dPtr = table[*(sPtr++)]; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + } + else + { + switch (image->format) + { + //----------------------------------------------------------------------- 8-bit + case DXGI_FORMAT_R8_UNORM: + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + assert(offset < rowPitch); + + uint8_t* dPtr = image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1))) + + offset; + + for (size_t x = 0; x < image->width; ++x) + { + if (sPtr >= endPtr) + return E_FAIL; + + *dPtr = *(sPtr++); + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + break; + + //---------------------------------------------------------------------- 16-bit + case DXGI_FORMAT_B5G5R5A1_UNORM: + { + uint32_t minalpha = 255; + uint32_t maxalpha = 0; + + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + assert(offset * 2 < rowPitch); + + auto dPtr = reinterpret_cast(image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1)))) + + offset; + + for (size_t x = 0; x < image->width; ++x) + { + if (sPtr + 1 >= endPtr) + return E_FAIL; + + auto t = static_cast(uint32_t(*sPtr) | uint32_t(*(sPtr + 1u) << 8)); + sPtr += 2; + *dPtr = t; + + const uint32_t alpha = (t & 0x8000) ? 255 : 0; + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + + // If there are no non-zero alpha channel entries, we'll assume alpha is not used and force it to opaque + if (maxalpha == 0 && !(flags & TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA)) + { + opaquealpha = true; + hr = SetAlphaChannelToOpaque(image); + if (FAILED(hr)) + return hr; + } + else if (minalpha == 255) + { + opaquealpha = true; + } + } + break; + + //-------------------------------------------------- 24/32-bit (with swizzling) + case DXGI_FORMAT_R8G8B8A8_UNORM: + { + uint32_t minalpha = 255; + uint32_t maxalpha = 0; + + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + + auto dPtr = reinterpret_cast(image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1)))) + + offset; + + for (size_t x = 0; x < image->width; ++x) + { + if (convFlags & CONV_FLAGS_EXPAND) + { + assert(offset * 3 < rowPitch); + + if (sPtr + 2 >= endPtr) + return E_FAIL; + + // BGR -> RGBA + *dPtr = uint32_t(*sPtr << 16) | uint32_t(*(sPtr + 1) << 8) | uint32_t(*(sPtr + 2)) | 0xFF000000; + sPtr += 3; + + minalpha = maxalpha = 255; + } + else + { + assert(offset * 4 < rowPitch); + + if (sPtr + 3 >= endPtr) + return E_FAIL; + + // BGRA -> RGBA + uint32_t alpha = *(sPtr + 3); + *dPtr = uint32_t(*sPtr << 16) | uint32_t(*(sPtr + 1) << 8) | uint32_t(*(sPtr + 2)) | uint32_t(alpha << 24); + + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + sPtr += 4; + } + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + + // If there are no non-zero alpha channel entries, we'll assume alpha is not used and force it to opaque + if (maxalpha == 0 && !(flags & TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA)) + { + opaquealpha = true; + hr = SetAlphaChannelToOpaque(image); + if (FAILED(hr)) + return hr; + } + else if (minalpha == 255) + { + opaquealpha = true; + } + } + break; + + //---------------------------------------------------------------- 32-bit (BGR) + case DXGI_FORMAT_B8G8R8A8_UNORM: + { + assert((convFlags & CONV_FLAGS_EXPAND) == 0); + + uint32_t minalpha = 255; + uint32_t maxalpha = 0; + + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + + auto dPtr = reinterpret_cast(image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1)))) + + offset; + + for (size_t x = 0; x < image->width; ++x) + { + assert(offset * 4 < rowPitch); + + if (sPtr + 3 >= endPtr) + return E_FAIL; + + const uint32_t alpha = *(sPtr + 3); + *dPtr = *reinterpret_cast(sPtr); + + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + sPtr += 4; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + + // If there are no non-zero alpha channel entries, we'll assume alpha is not used and force it to opaque + if (maxalpha == 0 && !(flags & TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA)) + { + opaquealpha = true; + hr = SetAlphaChannelToOpaque(image); + if (FAILED(hr)) + return hr; + } + else if (minalpha == 255) + { + opaquealpha = true; + } + } + break; + + //---------------------------------------------------------------- 24-bit (BGR) + case DXGI_FORMAT_B8G8R8X8_UNORM: + { + assert((convFlags & CONV_FLAGS_EXPAND) != 0); + + for (size_t y = 0; y < image->height; ++y) + { + size_t offset = ((convFlags & CONV_FLAGS_INVERTX) ? (image->width - 1) : 0); + + auto dPtr = reinterpret_cast(image->pixels + + (image->rowPitch * ((convFlags & CONV_FLAGS_INVERTY) ? y : (image->height - y - 1)))) + + offset; + + for (size_t x = 0; x < image->width; ++x) + { + assert(offset * 3 < rowPitch); + + if (sPtr + 2 >= endPtr) + return E_FAIL; + + *dPtr = uint32_t(*sPtr) | uint32_t(*(sPtr + 1) << 8) | uint32_t(*(sPtr + 2) << 16); + sPtr += 3; + + if (convFlags & CONV_FLAGS_INVERTX) + --dPtr; + else + ++dPtr; + } + } + } + break; + + //----------------------------------------------------------------------------- + default: + return E_FAIL; + } + } + + return opaquealpha ? S_FALSE : S_OK; + } + + + //------------------------------------------------------------------------------------- + // Encodes TGA file header + //------------------------------------------------------------------------------------- + HRESULT EncodeTGAHeader(_In_ const Image& image, _Out_ TGA_HEADER& header, _Inout_ uint32_t& convFlags) noexcept + { + memset(&header, 0, TGA_HEADER_LEN); + + if ((image.width > UINT16_MAX) + || (image.height > UINT16_MAX)) + { + return HRESULT_E_NOT_SUPPORTED; + } + + header.wWidth = static_cast(image.width); + header.wHeight = static_cast(image.height); + + switch (image.format) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + header.bImageType = TGA_TRUECOLOR; + header.bBitsPerPixel = 32; + header.bDescriptor = TGA_FLAGS_INVERTY | 8; + convFlags |= CONV_FLAGS_SWIZZLE; + break; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + header.bImageType = TGA_TRUECOLOR; + header.bBitsPerPixel = 32; + header.bDescriptor = TGA_FLAGS_INVERTY | 8; + break; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + header.bImageType = TGA_TRUECOLOR; + header.bBitsPerPixel = 24; + header.bDescriptor = TGA_FLAGS_INVERTY; + convFlags |= CONV_FLAGS_888; + break; + + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_A8_UNORM: + header.bImageType = TGA_BLACK_AND_WHITE; + header.bBitsPerPixel = 8; + header.bDescriptor = TGA_FLAGS_INVERTY; + break; + + case DXGI_FORMAT_B5G5R5A1_UNORM: + header.bImageType = TGA_TRUECOLOR; + header.bBitsPerPixel = 16; + header.bDescriptor = TGA_FLAGS_INVERTY | 1; + break; + + default: + return HRESULT_E_NOT_SUPPORTED; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Copies BGRX data to form BGR 24bpp data + //------------------------------------------------------------------------------------- +#pragma warning(suppress: 6001 6101) // In the case where outSize is insufficient we do not write to pDestination + void Copy24bppScanline( + _Out_writes_bytes_(outSize) void* pDestination, + _In_ size_t outSize, + _In_reads_bytes_(inSize) const void* pSource, + _In_ size_t inSize) noexcept + { + assert(pDestination && outSize > 0); + assert(pSource && inSize > 0); + + assert(pDestination != pSource); + + const uint32_t * __restrict sPtr = static_cast(pSource); + uint8_t * __restrict dPtr = static_cast(pDestination); + + if (inSize >= 4 && outSize >= 3) + { + const uint8_t* endPtr = dPtr + outSize; + + for (size_t count = 0; count < (inSize - 3); count += 4) + { + uint32_t t = *(sPtr++); + + if (dPtr + 3 > endPtr) + return; + + *(dPtr++) = uint8_t(t & 0xFF); // Blue + *(dPtr++) = uint8_t((t & 0xFF00) >> 8); // Green + *(dPtr++) = uint8_t((t & 0xFF0000) >> 16); // Red + } + } + } + + //------------------------------------------------------------------------------------- + // TGA 2.0 Extension helpers + //------------------------------------------------------------------------------------- + void SetExtension(_In_ TGA_EXTENSION *ext, TGA_FLAGS flags, const TexMetadata& metadata) noexcept + { + memset(ext, 0, sizeof(TGA_EXTENSION)); + + ext->wSize = sizeof(TGA_EXTENSION); + + memcpy(ext->szSoftwareId, "DirectXTex", sizeof("DirectXTex")); + ext->wVersionNumber = DIRECTX_TEX_VERSION; + ext->bVersionLetter = ' '; + + const bool sRGB = ((flags & TGA_FLAGS_FORCE_LINEAR) == 0) && ((flags & TGA_FLAGS_FORCE_SRGB) != 0 || IsSRGB(metadata.format)); + if (sRGB) + { + ext->wGammaNumerator = 22; + ext->wGammaDenominator = 10; + } + else if (flags & TGA_FLAGS_FORCE_LINEAR) + { + ext->wGammaNumerator = 1; + ext->wGammaDenominator = 1; + } + + switch (metadata.GetAlphaMode()) + { + default: + case TEX_ALPHA_MODE_UNKNOWN: + ext->bAttributesType = HasAlpha(metadata.format) ? TGA_ATTRIBUTE_UNDEFINED : TGA_ATTRIBUTE_NONE; + break; + + case TEX_ALPHA_MODE_STRAIGHT: + ext->bAttributesType = TGA_ATTRIBUTE_ALPHA; + break; + + case TEX_ALPHA_MODE_PREMULTIPLIED: + ext->bAttributesType = TGA_ATTRIBUTE_PREMULTIPLIED; + break; + + case TEX_ALPHA_MODE_OPAQUE: + ext->bAttributesType = TGA_ATTRIBUTE_IGNORED; + break; + + case TEX_ALPHA_MODE_CUSTOM: + ext->bAttributesType = TGA_ATTRIBUTE_UNDEFINED; + break; + } + + // Set file time stamp + { + time_t now = {}; + time(&now); + + #ifdef _WIN32 + tm info; + auto pinfo = &info; + if (!gmtime_s(pinfo, &now)) + #else + const tm* pinfo = gmtime(&now); + if (pinfo) + #endif + { + ext->wStampMonth = static_cast(pinfo->tm_mon + 1); + ext->wStampDay = static_cast(pinfo->tm_mday); + ext->wStampYear = static_cast(pinfo->tm_year + 1900); + ext->wStampHour = static_cast(pinfo->tm_hour); + ext->wStampMinute = static_cast(pinfo->tm_min); + ext->wStampSecond = static_cast(pinfo->tm_sec); + } + } + } + + TEX_ALPHA_MODE GetAlphaModeFromExtension(_In_opt_ const TGA_EXTENSION *ext) noexcept + { + if (ext && ext->wSize == sizeof(TGA_EXTENSION)) + { + switch (ext->bAttributesType) + { + case TGA_ATTRIBUTE_IGNORED: return TEX_ALPHA_MODE_OPAQUE; + case TGA_ATTRIBUTE_UNDEFINED: return TEX_ALPHA_MODE_CUSTOM; + case TGA_ATTRIBUTE_ALPHA: return TEX_ALPHA_MODE_STRAIGHT; + case TGA_ATTRIBUTE_PREMULTIPLIED: return TEX_ALPHA_MODE_PREMULTIPLIED; + default: return TEX_ALPHA_MODE_UNKNOWN; + } + } + + return TEX_ALPHA_MODE_UNKNOWN; + } + + DXGI_FORMAT GetSRGBFromExtension(_In_opt_ const TGA_EXTENSION* ext, DXGI_FORMAT format, TGA_FLAGS flags, _In_opt_ ScratchImage* image) noexcept + { + bool sRGB = false; + + if (ext && ext->wSize == sizeof(TGA_EXTENSION) && ext->wGammaDenominator != 0) + { + auto const gamma = static_cast(ext->wGammaNumerator) / static_cast(ext->wGammaDenominator); + if (fabsf(gamma - 2.2f) < GAMMA_EPSILON || fabsf(gamma - 2.4f) < GAMMA_EPSILON) + { + sRGB = true; + } + } + else + { + sRGB = (flags & TGA_FLAGS_DEFAULT_SRGB) != 0; + } + + if (sRGB) + { + format = MakeSRGB(format); + if (image) + { + image->OverrideFormat(format); + } + } + + return format; + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Obtain metadata from TGA file in memory/on disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromTGAMemory( + const uint8_t* pSource, + size_t size, + TGA_FLAGS flags, + TexMetadata& metadata) noexcept +{ + if (!pSource || size == 0) + return E_INVALIDARG; + + size_t offset; + HRESULT hr = DecodeTGAHeader(pSource, size, flags, metadata, offset, nullptr); + if (FAILED(hr)) + return hr; + + // Optional TGA 2.0 footer & extension area + const TGA_EXTENSION* ext = nullptr; + if (size >= sizeof(TGA_FOOTER)) + { + auto footer = reinterpret_cast(static_cast(pSource) + size - sizeof(TGA_FOOTER)); + + if (memcmp(footer->Signature, g_Signature, sizeof(g_Signature)) == 0) + { + if (footer->dwExtensionOffset != 0 + && ((footer->dwExtensionOffset + sizeof(TGA_EXTENSION)) <= size)) + { + ext = reinterpret_cast(static_cast(pSource) + footer->dwExtensionOffset); + metadata.SetAlphaMode(GetAlphaModeFromExtension(ext)); + } + } + } + + if (!(flags & TGA_FLAGS_IGNORE_SRGB)) + { + metadata.format = GetSRGBFromExtension(ext, metadata.format, flags, nullptr); + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromTGAFile(const wchar_t* szFile, TGA_FLAGS flags, TexMetadata& metadata) noexcept +{ + if (!szFile) + return E_INVALIDARG; + +#ifdef _WIN32 +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile(safe_handle(CreateFile2(szFile, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr))); +#else + ScopedHandle hFile(safe_handle(CreateFileW(szFile, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, nullptr))); +#endif + if (!hFile) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // Get the file size + FILE_STANDARD_INFO fileInfo; + if (!GetFileInformationByHandleEx(hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo))) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // File is too big for 32-bit allocation, so reject read (4 GB should be plenty large enough for a valid TGA file) + if (fileInfo.EndOfFile.HighPart > 0) + { + return HRESULT_E_FILE_TOO_LARGE; + } + + const size_t len = fileInfo.EndOfFile.LowPart; +#else // !WIN32 + std::ifstream inFile(std::filesystem::path(szFile), std::ios::in | std::ios::binary | std::ios::ate); + if (!inFile) + return E_FAIL; + + std::streampos fileLen = inFile.tellg(); + if (!inFile) + return E_FAIL; + + if (fileLen > UINT32_MAX) + return HRESULT_E_FILE_TOO_LARGE; + + inFile.seekg(0, std::ios::beg); + if (!inFile) + return E_FAIL; + + size_t len = fileLen; +#endif + + // Need at least enough data to fill the standard header to be a valid TGA + if (len < TGA_HEADER_LEN) + { + return E_FAIL; + } + + // Read the standard header (we don't need the file footer to parse the file) + uint8_t header[TGA_HEADER_LEN] = {}; + +#ifdef _WIN32 + DWORD bytesRead = 0; + if (!ReadFile(hFile.get(), header, TGA_HEADER_LEN, &bytesRead, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + auto const headerLen = static_cast(bytesRead); +#else + inFile.read(reinterpret_cast(header), TGA_HEADER_LEN); + if (!inFile) + return E_FAIL; + + size_t headerLen = TGA_HEADER_LEN; +#endif + + size_t offset; + HRESULT hr = DecodeTGAHeader(header, headerLen, flags, metadata, offset, nullptr); + if (FAILED(hr)) + return hr; + + // Optional TGA 2.0 footer & extension area + const TGA_EXTENSION* ext = nullptr; + TGA_EXTENSION extData = {}; + { + TGA_FOOTER footer = {}; + + #ifdef _WIN32 + if (SetFilePointer(hFile.get(), -static_cast(sizeof(TGA_FOOTER)), nullptr, FILE_END) != INVALID_SET_FILE_POINTER) + { + if (!ReadFile(hFile.get(), &footer, sizeof(TGA_FOOTER), &bytesRead, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesRead != sizeof(TGA_FOOTER)) + { + return E_FAIL; + } + } + #else + inFile.seekg(-static_cast(sizeof(TGA_FOOTER)), std::ios::end); + if (inFile) + { + inFile.read(reinterpret_cast(&footer), sizeof(TGA_FOOTER)); + if (!inFile) + return E_FAIL; + } + #endif + + if (memcmp(footer.Signature, g_Signature, sizeof(g_Signature)) == 0) + { + if (footer.dwExtensionOffset != 0 + && ((footer.dwExtensionOffset + sizeof(TGA_EXTENSION)) <= len)) + { + #ifdef _WIN32 + const LARGE_INTEGER filePos = { { static_cast(footer.dwExtensionOffset), 0 } }; + if (SetFilePointerEx(hFile.get(), filePos, nullptr, FILE_BEGIN)) + { + if (ReadFile(hFile.get(), &extData, sizeof(TGA_EXTENSION), &bytesRead, nullptr) + && bytesRead == sizeof(TGA_EXTENSION)) + { + ext = &extData; + metadata.SetAlphaMode(GetAlphaModeFromExtension(ext)); + } + } + #else // !WIN32 + inFile.seekg(static_cast(footer.dwExtensionOffset), std::ios::beg); + if (inFile) + { + inFile.read(reinterpret_cast(&extData), sizeof(TGA_EXTENSION)); + if (inFile) + { + ext = &extData; + metadata.SetAlphaMode(GetAlphaModeFromExtension(ext)); + } + } + #endif + } + } + } + + if (!(flags & TGA_FLAGS_IGNORE_SRGB)) + { + metadata.format = GetSRGBFromExtension(ext, metadata.format, flags, nullptr); + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Load a TGA file in memory +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::LoadFromTGAMemory( + const uint8_t* pSource, + size_t size, + TGA_FLAGS flags, + TexMetadata* metadata, + ScratchImage& image) noexcept +{ + if (!pSource || size == 0) + return E_INVALIDARG; + + image.Release(); + + size_t offset; + uint32_t convFlags = 0; + TexMetadata mdata; + HRESULT hr = DecodeTGAHeader(pSource, size, flags, mdata, offset, &convFlags); + if (FAILED(hr)) + return hr; + + if (offset > size) + return HRESULT_E_INVALID_DATA; + + size_t paletteOffset = 0; + uint8_t palette[256 * 4] = {}; + if (convFlags & CONV_FLAGS_PALETTED) + { + const size_t remaining = size - offset; + if (remaining == 0) + return E_FAIL; + + auto pColorMap = static_cast(pSource) + offset; + + _Analysis_assume_(size > TGA_HEADER_LEN); + hr = ReadPalette(static_cast(pSource), pColorMap, remaining, flags, + palette, paletteOffset); + if (FAILED(hr)) + return hr; + } + + const size_t remaining = size - offset - paletteOffset; + if (remaining == 0) + return E_FAIL; + + const void* pPixels = static_cast(pSource) + offset + paletteOffset; + + hr = image.Initialize2D(mdata.format, mdata.width, mdata.height, 1, 1, CP_FLAGS_LIMIT_4GB); + if (FAILED(hr)) + return hr; + + if (convFlags & CONV_FLAGS_RLE) + { + hr = UncompressPixels(pPixels, remaining, flags, image.GetImage(0, 0, 0), convFlags); + } + else + { + hr = CopyPixels(pPixels, remaining, flags, image.GetImage(0, 0, 0), convFlags, palette); + } + + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + // Optional TGA 2.0 footer & extension area + const TGA_EXTENSION* ext = nullptr; + if (size >= sizeof(TGA_FOOTER)) + { + auto footer = reinterpret_cast(static_cast(pSource) + size - sizeof(TGA_FOOTER)); + + if (memcmp(footer->Signature, g_Signature, sizeof(g_Signature)) == 0) + { + if (footer->dwExtensionOffset != 0 + && ((footer->dwExtensionOffset + sizeof(TGA_EXTENSION)) <= size)) + { + ext = reinterpret_cast(static_cast(pSource) + footer->dwExtensionOffset); + } + } + } + + if (!(flags & TGA_FLAGS_IGNORE_SRGB)) + { + mdata.format = GetSRGBFromExtension(ext, mdata.format, flags, &image); + } + + if (metadata) + { + memcpy(metadata, &mdata, sizeof(TexMetadata)); + if (hr == S_FALSE) + { + metadata->SetAlphaMode(TEX_ALPHA_MODE_OPAQUE); + } + else if (ext) + { + metadata->SetAlphaMode(GetAlphaModeFromExtension(ext)); + } + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Load a TGA file from disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::LoadFromTGAFile( + const wchar_t* szFile, + TGA_FLAGS flags, + TexMetadata* metadata, + ScratchImage& image) noexcept +{ + if (!szFile) + return E_INVALIDARG; + + image.Release(); + +#ifdef _WIN32 +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile(safe_handle(CreateFile2(szFile, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr))); +#else + ScopedHandle hFile(safe_handle(CreateFileW(szFile, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, nullptr))); +#endif + if (!hFile) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // Get the file size + FILE_STANDARD_INFO fileInfo; + if (!GetFileInformationByHandleEx(hFile.get(), FileStandardInfo, &fileInfo, sizeof(fileInfo))) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + // File is too big for 32-bit allocation, so reject read (4 GB should be plenty large enough for a valid TGA file) + if (fileInfo.EndOfFile.HighPart > 0) + { + return HRESULT_E_FILE_TOO_LARGE; + } + + const size_t len = fileInfo.EndOfFile.LowPart; +#else // !WIN32 + std::ifstream inFile(std::filesystem::path(szFile), std::ios::in | std::ios::binary | std::ios::ate); + if (!inFile) + return E_FAIL; + + std::streampos fileLen = inFile.tellg(); + if (!inFile) + return E_FAIL; + + if (fileLen > UINT32_MAX) + return HRESULT_E_FILE_TOO_LARGE; + + inFile.seekg(0, std::ios::beg); + if (!inFile) + return E_FAIL; + + size_t len = fileLen; +#endif + + // Need at least enough data to fill the header to be a valid TGA + if (len < TGA_HEADER_LEN) + { + return E_FAIL; + } + + // Read the header + uint8_t header[TGA_HEADER_LEN] = {}; + +#ifdef _WIN32 + DWORD bytesRead = 0; + if (!ReadFile(hFile.get(), header, TGA_HEADER_LEN, &bytesRead, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + auto const headerLen = static_cast(bytesRead); +#else + inFile.read(reinterpret_cast(header), TGA_HEADER_LEN); + if (!inFile) + return E_FAIL; + + size_t headerLen = TGA_HEADER_LEN; +#endif + + size_t offset; + uint32_t convFlags = 0; + TexMetadata mdata; + HRESULT hr = DecodeTGAHeader(header, headerLen, flags, mdata, offset, &convFlags); + if (FAILED(hr)) + return hr; + + if (offset > len) + return HRESULT_E_INVALID_DATA; + + // Read the pixels + auto const remaining = len - offset; + if (remaining == 0) + return E_FAIL; + + if (offset > TGA_HEADER_LEN) + { + #ifdef _WIN32 + // Skip past the id string + const LARGE_INTEGER filePos = { { static_cast(offset), 0 } }; + if (!SetFilePointerEx(hFile.get(), filePos, nullptr, FILE_BEGIN)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + #else + inFile.seekg(offset, std::ios::beg); + if (!inFile) + return E_FAIL; + #endif + } + + hr = image.Initialize2D(mdata.format, mdata.width, mdata.height, 1, 1, CP_FLAGS_LIMIT_4GB); + if (FAILED(hr)) + return hr; + + assert(image.GetPixels()); + + bool opaquealpha = false; + + if (!(convFlags & (CONV_FLAGS_RLE | CONV_FLAGS_EXPAND | CONV_FLAGS_INVERTX | CONV_FLAGS_PALETTED)) && (convFlags & CONV_FLAGS_INVERTY)) + { + // This case we can read directly into the image buffer in place + if (remaining < image.GetPixelsSize()) + { + image.Release(); + return HRESULT_E_HANDLE_EOF; + } + + if (image.GetPixelsSize() > UINT32_MAX) + { + image.Release(); + return HRESULT_E_ARITHMETIC_OVERFLOW; + } + + #ifdef _WIN32 + if (!ReadFile(hFile.get(), image.GetPixels(), static_cast(image.GetPixelsSize()), &bytesRead, nullptr)) + { + image.Release(); + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesRead != image.GetPixelsSize()) + { + image.Release(); + return E_FAIL; + } + #else + inFile.read(reinterpret_cast(image.GetPixels()), image.GetPixelsSize()); + if (!inFile) + { + image.Release(); + return E_FAIL; + } + #endif + + switch (mdata.format) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + { + // TGA stores 32-bit data in BGRA form, need to swizzle to RGBA + assert(image.GetImageCount() == 1); + const Image* img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + uint8_t *pPixels = img->pixels; + if (!pPixels) + { + image.Release(); + return E_POINTER; + } + + size_t rowPitch = img->rowPitch; + + // Scan for non-zero alpha channel + uint32_t minalpha = 255; + uint32_t maxalpha = 0; + + for (size_t h = 0; h < img->height; ++h) + { + auto sPtr = reinterpret_cast(pPixels); + + for (size_t x = 0; x < img->width; ++x) + { + const uint32_t alpha = ((*sPtr & 0xFF000000) >> 24); + + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + ++sPtr; + } + + pPixels += rowPitch; + } + + uint32_t tflags = TEXP_SCANLINE_NONE; + if (maxalpha == 0 && !(flags & TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA)) + { + opaquealpha = true; + tflags = TEXP_SCANLINE_SETALPHA; + } + else if (minalpha == 255) + { + opaquealpha = true; + } + + // Swizzle scanlines + pPixels = img->pixels; + + for (size_t h = 0; h < img->height; ++h) + { + SwizzleScanline(pPixels, rowPitch, pPixels, rowPitch, mdata.format, tflags); + pPixels += rowPitch; + } + } + break; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + { + assert(image.GetImageCount() == 1); + const Image* img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + // Scan for non-zero alpha channel + uint32_t minalpha = 255; + uint32_t maxalpha = 0; + + const uint8_t *pPixels = img->pixels; + if (!pPixels) + { + image.Release(); + return E_POINTER; + } + + const size_t rowPitch = img->rowPitch; + + for (size_t h = 0; h < img->height; ++h) + { + auto sPtr = reinterpret_cast(pPixels); + + for (size_t x = 0; x < img->width; ++x) + { + const uint32_t alpha = ((*sPtr & 0xFF000000) >> 24); + + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + ++sPtr; + } + + pPixels += rowPitch; + } + + // If there are no non-zero alpha channel entries, we'll assume alpha is not used and force it to opaque + if (maxalpha == 0 && !(flags & TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA)) + { + opaquealpha = true; + hr = SetAlphaChannelToOpaque(img); + if (FAILED(hr)) + { + image.Release(); + return hr; + } + } + else if (minalpha == 255) + { + opaquealpha = true; + } + } + break; + + case DXGI_FORMAT_B5G5R5A1_UNORM: + { + assert(image.GetImageCount() == 1); + const Image* img = image.GetImage(0, 0, 0); + if (!img) + { + image.Release(); + return E_POINTER; + } + + // Scan for non-zero alpha channel + uint32_t minalpha = 255; + uint32_t maxalpha = 0; + + const uint8_t *pPixels = img->pixels; + if (!pPixels) + { + image.Release(); + return E_POINTER; + } + + const size_t rowPitch = img->rowPitch; + + for (size_t h = 0; h < img->height; ++h) + { + auto sPtr = reinterpret_cast(pPixels); + + for (size_t x = 0; x < img->width; ++x) + { + const uint32_t alpha = (*sPtr & 0x8000) ? 255 : 0; + + minalpha = std::min(minalpha, alpha); + maxalpha = std::max(maxalpha, alpha); + + ++sPtr; + } + + pPixels += rowPitch; + } + + // If there are no non-zero alpha channel entries, we'll assume alpha is not used and force it to opaque + if (maxalpha == 0 && !(flags & TGA_FLAGS_ALLOW_ALL_ZERO_ALPHA)) + { + opaquealpha = true; + hr = SetAlphaChannelToOpaque(img); + if (FAILED(hr)) + { + image.Release(); + return hr; + } + } + else if (minalpha == 255) + { + opaquealpha = true; + } + } + break; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + // Should never be trying to direct-read 24bpp + return E_FAIL; + + default: + break; + } + } + else // RLE || EXPAND || INVERTX || PALETTED || !INVERTY + { + std::unique_ptr temp(new (std::nothrow) uint8_t[remaining]); + if (!temp) + { + image.Release(); + return E_OUTOFMEMORY; + } + + #ifdef _WIN32 + if (!ReadFile(hFile.get(), temp.get(), static_cast(remaining), &bytesRead, nullptr)) + { + image.Release(); + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesRead != remaining) + { + image.Release(); + return E_FAIL; + } + #else + inFile.read(reinterpret_cast(temp.get()), remaining); + if (!inFile) + { + image.Release(); + return E_FAIL; + } + #endif + + size_t paletteOffset = 0; + uint8_t palette[256 * 4] = {}; + if (convFlags & CONV_FLAGS_PALETTED) + { + hr = ReadPalette(header, temp.get(), remaining, flags, palette, paletteOffset); + if (FAILED(hr)) + { + image.Release(); + return hr; + } + } + + if (convFlags & CONV_FLAGS_RLE) + { + hr = UncompressPixels(temp.get() + paletteOffset, remaining - paletteOffset, + flags, image.GetImage(0, 0, 0), convFlags); + } + else + { + hr = CopyPixels(temp.get() + paletteOffset, remaining - paletteOffset, + flags, image.GetImage(0, 0, 0), convFlags, palette); + } + + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + if (hr == S_FALSE) + opaquealpha = true; + } + + // Optional TGA 2.0 footer & extension area + const TGA_EXTENSION* ext = nullptr; + TGA_EXTENSION extData = {}; + { + TGA_FOOTER footer = {}; + + #ifdef _WIN32 + if (SetFilePointer(hFile.get(), -static_cast(sizeof(TGA_FOOTER)), nullptr, FILE_END) != INVALID_SET_FILE_POINTER) + { + if (!ReadFile(hFile.get(), &footer, sizeof(TGA_FOOTER), &bytesRead, nullptr)) + { + image.Release(); + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesRead != sizeof(TGA_FOOTER)) + { + image.Release(); + return E_FAIL; + } + } + #else // !WIN32 + inFile.seekg(-static_cast(sizeof(TGA_FOOTER)), std::ios::end); + if (inFile) + { + inFile.read(reinterpret_cast(&footer), sizeof(TGA_FOOTER)); + if (!inFile) + { + image.Release(); + return E_FAIL; + } + } + #endif + + if (memcmp(footer.Signature, g_Signature, sizeof(g_Signature)) == 0) + { + if (footer.dwExtensionOffset != 0 + && ((footer.dwExtensionOffset + sizeof(TGA_EXTENSION)) <= len)) + { + #ifdef _WIN32 + const LARGE_INTEGER filePos = { { static_cast(footer.dwExtensionOffset), 0 } }; + if (SetFilePointerEx(hFile.get(), filePos, nullptr, FILE_BEGIN)) + { + if (ReadFile(hFile.get(), &extData, sizeof(TGA_EXTENSION), &bytesRead, nullptr) + && bytesRead == sizeof(TGA_EXTENSION)) + { + ext = &extData; + } + } + #else // !WIN32 + inFile.seekg(static_cast(footer.dwExtensionOffset), std::ios::beg); + if (inFile) + { + inFile.read(reinterpret_cast(&extData), sizeof(TGA_EXTENSION)); + if (inFile) + { + ext = &extData; + } + } + #endif + } + } + } + + if (!(flags & TGA_FLAGS_IGNORE_SRGB)) + { + mdata.format = GetSRGBFromExtension(ext, mdata.format, flags, &image); + } + + if (metadata) + { + memcpy(metadata, &mdata, sizeof(TexMetadata)); + if (opaquealpha) + { + metadata->SetAlphaMode(TEX_ALPHA_MODE_OPAQUE); + } + else if (ext) + { + metadata->SetAlphaMode(GetAlphaModeFromExtension(ext)); + } + } + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Save a TGA file to memory +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::SaveToTGAMemory( + const Image& image, + TGA_FLAGS flags, + Blob& blob, + const TexMetadata* metadata) noexcept +{ + if ((flags & (TGA_FLAGS_FORCE_LINEAR | TGA_FLAGS_FORCE_SRGB)) != 0 && !metadata) + return E_INVALIDARG; + + if (!image.pixels) + return E_POINTER; + + TGA_HEADER tga_header = {}; + uint32_t convFlags = 0; + HRESULT hr = EncodeTGAHeader(image, tga_header, convFlags); + if (FAILED(hr)) + return hr; + + blob.Release(); + + // Determine memory required for image data + size_t rowPitch, slicePitch; + hr = ComputePitch(image.format, image.width, image.height, rowPitch, slicePitch, + (convFlags & CONV_FLAGS_888) ? CP_FLAGS_24BPP : CP_FLAGS_NONE); + if (FAILED(hr)) + return hr; + + hr = blob.Initialize(TGA_HEADER_LEN + + slicePitch + + (metadata ? sizeof(TGA_EXTENSION) : 0) + + sizeof(TGA_FOOTER)); + if (FAILED(hr)) + return hr; + + // Copy header + auto destPtr = blob.GetBufferPointer(); + assert(destPtr != nullptr); + + uint8_t* dPtr = destPtr; + memcpy(dPtr, &tga_header, TGA_HEADER_LEN); + dPtr += TGA_HEADER_LEN; + + const uint8_t* pPixels = image.pixels; + assert(pPixels); + + for (size_t y = 0; y < image.height; ++y) + { + // Copy pixels + if (convFlags & CONV_FLAGS_888) + { + Copy24bppScanline(dPtr, rowPitch, pPixels, image.rowPitch); + } + else if (convFlags & CONV_FLAGS_SWIZZLE) + { + SwizzleScanline(dPtr, rowPitch, pPixels, image.rowPitch, image.format, TEXP_SCANLINE_NONE); + } + else + { + CopyScanline(dPtr, rowPitch, pPixels, image.rowPitch, image.format, TEXP_SCANLINE_NONE); + } + + dPtr += rowPitch; + pPixels += image.rowPitch; + } + + uint32_t extOffset = 0; + if (metadata) + { + // metadata is only used for writing the TGA 2.0 extension header + auto ext = reinterpret_cast(dPtr); + SetExtension(ext, flags, *metadata); + + extOffset = static_cast(dPtr - destPtr); + dPtr += sizeof(TGA_EXTENSION); + } + + // Copy TGA 2.0 footer + auto footer = reinterpret_cast(dPtr); + footer->dwDeveloperOffset = 0; + footer->dwExtensionOffset = extOffset; + memcpy(footer->Signature, g_Signature, sizeof(g_Signature)); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Save a TGA file to disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::SaveToTGAFile( + const Image& image, + TGA_FLAGS flags, + const wchar_t* szFile, + const TexMetadata* metadata) noexcept +{ + if (!szFile) + return E_INVALIDARG; + + if ((flags & (TGA_FLAGS_FORCE_LINEAR | TGA_FLAGS_FORCE_SRGB)) != 0 && !metadata) + return E_INVALIDARG; + + if (!image.pixels) + return E_POINTER; + + TGA_HEADER tga_header = {}; + uint32_t convFlags = 0; + HRESULT hr = EncodeTGAHeader(image, tga_header, convFlags); + if (FAILED(hr)) + return hr; + + // Create file and write header +#ifdef _WIN32 +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + ScopedHandle hFile(safe_handle(CreateFile2(szFile, GENERIC_WRITE, 0, + CREATE_ALWAYS, nullptr))); +#else + ScopedHandle hFile(safe_handle(CreateFileW(szFile, + GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr))); +#endif + if (!hFile) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + auto_delete_file delonfail(hFile.get()); +#else + std::ofstream outFile(std::filesystem::path(szFile), std::ios::out | std::ios::binary | std::ios::trunc); + if (!outFile) + return E_FAIL; +#endif + + // Determine size for TGA pixel data + size_t rowPitch, slicePitch; + hr = ComputePitch(image.format, image.width, image.height, rowPitch, slicePitch, + (convFlags & CONV_FLAGS_888) ? CP_FLAGS_24BPP : CP_FLAGS_NONE); + if (FAILED(hr)) + return hr; + + if (slicePitch < 65535) + { + // For small images, it is better to create an in-memory file and write it out + Blob blob; + + hr = SaveToTGAMemory(image, flags, blob, metadata); + if (FAILED(hr)) + return hr; + + // Write blob + #ifdef _WIN32 + const DWORD bytesToWrite = static_cast(blob.GetBufferSize()); + DWORD bytesWritten; + if (!WriteFile(hFile.get(), blob.GetConstBufferPointer(), bytesToWrite, &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != bytesToWrite) + { + return E_FAIL; + } + #else + outFile.write(reinterpret_cast(blob.GetConstBufferPointer()), + static_cast(blob.GetBufferSize())); + + if (!outFile) + return E_FAIL; + #endif + } + else + { + // Otherwise, write the image one scanline at a time... + std::unique_ptr temp(new (std::nothrow) uint8_t[rowPitch]); + if (!temp) + return E_OUTOFMEMORY; + + // Write header + #ifdef _WIN32 + DWORD bytesWritten; + if (!WriteFile(hFile.get(), &tga_header, TGA_HEADER_LEN, &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != TGA_HEADER_LEN) + return E_FAIL; + #else + outFile.write(reinterpret_cast(&tga_header), TGA_HEADER_LEN); + if (!outFile) + return E_FAIL; + #endif + + if (rowPitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + // Write pixels + const uint8_t* pPixels = image.pixels; + + for (size_t y = 0; y < image.height; ++y) + { + // Copy pixels + if (convFlags & CONV_FLAGS_888) + { + Copy24bppScanline(temp.get(), rowPitch, pPixels, image.rowPitch); + } + else if (convFlags & CONV_FLAGS_SWIZZLE) + { + SwizzleScanline(temp.get(), rowPitch, pPixels, image.rowPitch, image.format, TEXP_SCANLINE_NONE); + } + else + { + CopyScanline(temp.get(), rowPitch, pPixels, image.rowPitch, image.format, TEXP_SCANLINE_NONE); + } + + pPixels += image.rowPitch; + + #ifdef _WIN32 + if (!WriteFile(hFile.get(), temp.get(), static_cast(rowPitch), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != rowPitch) + return E_FAIL; + #else + outFile.write(reinterpret_cast(temp.get()), rowPitch); + if (!outFile) + return E_FAIL; + #endif + } + + uint32_t extOffset = 0; + if (metadata) + { + // metadata is only used for writing the TGA 2.0 extension header + TGA_EXTENSION ext = {}; + SetExtension(&ext, flags, *metadata); + + #ifdef _WIN32 + extOffset = SetFilePointer(hFile.get(), 0, nullptr, FILE_CURRENT); + if (extOffset == INVALID_SET_FILE_POINTER) + { + return E_FAIL; + } + + if (!WriteFile(hFile.get(), &ext, sizeof(TGA_EXTENSION), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != sizeof(TGA_EXTENSION)) + return E_FAIL; + #else + extOffset = static_cast(outFile.tellp()); + if (!outFile) + return E_FAIL; + + outFile.write(reinterpret_cast(&ext), sizeof(TGA_EXTENSION)); + if (!outFile) + return E_FAIL; + #endif + } + + // Write TGA 2.0 footer + TGA_FOOTER footer = {}; + footer.dwExtensionOffset = extOffset; + memcpy(footer.Signature, g_Signature, sizeof(g_Signature)); + + #ifdef _WIN32 + if (!WriteFile(hFile.get(), &footer, sizeof(TGA_FOOTER), &bytesWritten, nullptr)) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (bytesWritten != sizeof(footer)) + return E_FAIL; + #else + outFile.write(reinterpret_cast(&footer), sizeof(TGA_FOOTER)); + if (!outFile) + return E_FAIL; + #endif + } + +#ifdef _WIN32 + delonfail.clear(); +#endif + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Adapters for /Zc:wchar_t- clients + +#if defined(_MSC_VER) && !defined(_NATIVE_WCHAR_T_DEFINED) + +namespace DirectX +{ + HRESULT __cdecl GetMetadataFromTGAFile( + _In_z_ const __wchar_t* szFile, + _In_ TGA_FLAGS flags, + _Out_ TexMetadata& metadata) noexcept + { + return GetMetadataFromTGAFile(reinterpret_cast(szFile), flags, metadata); + } + + HRESULT __cdecl LoadFromTGAFile( + _In_z_ const __wchar_t* szFile, + _In_ TGA_FLAGS flags, + _Out_opt_ TexMetadata* metadata, + _Out_ ScratchImage& image) noexcept + { + return LoadFromTGAFile(reinterpret_cast(szFile), flags, metadata, image); + } + + HRESULT __cdecl SaveToTGAFile(_In_ const Image& image, + _In_ TGA_FLAGS flags, + _In_z_ const __wchar_t* szFile, + _In_opt_ const TexMetadata* metadata) noexcept + { + return SaveToTGAFile(image, flags, reinterpret_cast(szFile), metadata); + } +} + +#endif // !_NATIVE_WCHAR_T_DEFINED diff --git a/external/DirectXTex/DirectXTexUtil.cpp b/external/DirectXTex/DirectXTexUtil.cpp new file mode 100644 index 00000000..fd14984f --- /dev/null +++ b/external/DirectXTex/DirectXTexUtil.cpp @@ -0,0 +1,1739 @@ +//------------------------------------------------------------------------------------- +// DirectXTexUtil.cpp +// +// DirectX Texture Library - Utilities +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +#if (defined(_XBOX_ONE) && defined(_TITLE)) || defined(_GAMING_XBOX) +static_assert(XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT == DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT, "Xbox mismatch detected"); +static_assert(XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT == DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT, "Xbox mismatch detected"); +static_assert(XBOX_DXGI_FORMAT_D16_UNORM_S8_UINT == DXGI_FORMAT_D16_UNORM_S8_UINT, "Xbox mismatch detected"); +static_assert(XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS == DXGI_FORMAT_R16_UNORM_X8_TYPELESS, "Xbox mismatch detected"); +static_assert(XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT == DXGI_FORMAT_X16_TYPELESS_G8_UINT, "Xbox mismatch detected"); +static_assert(XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM == DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM, "Xbox mismatch detected"); +static_assert(XBOX_DXGI_FORMAT_R4G4_UNORM == DXGI_FORMAT_R4G4_UNORM, "Xbox mismatch detected"); +#endif + +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN10) +static_assert(WIN10_DXGI_FORMAT_P208 == DXGI_FORMAT_P208, "Windows SDK mismatch detected"); +static_assert(WIN10_DXGI_FORMAT_V208 == DXGI_FORMAT_V208, "Windows SDK mismatch detected"); +static_assert(WIN10_DXGI_FORMAT_V408 == DXGI_FORMAT_V408, "Windows SDK mismatch detected"); +#endif + +#if defined(NTDDI_WIN11_GE) && !defined(_GAMING_XBOX) +static_assert(WIN11_DXGI_FORMAT_A4B4G4R4_UNORM == DXGI_FORMAT_A4B4G4R4_UNORM, "Windows SDK mismatch detected"); +#endif + +using namespace DirectX; +using Microsoft::WRL::ComPtr; + +namespace +{ +#ifdef _WIN32 + //------------------------------------------------------------------------------------- + // WIC Pixel Format Translation Data + //------------------------------------------------------------------------------------- + struct WICTranslate + { + const GUID& wic; + DXGI_FORMAT format; + bool srgb; + + constexpr WICTranslate(const GUID& wg, DXGI_FORMAT fmt, bool isrgb) noexcept : + wic(wg), + format(fmt), + srgb(isrgb) {} + }; + + constexpr WICTranslate g_WICFormats[] = + { + { GUID_WICPixelFormat128bppRGBAFloat, DXGI_FORMAT_R32G32B32A32_FLOAT, false }, + + { GUID_WICPixelFormat64bppRGBAHalf, DXGI_FORMAT_R16G16B16A16_FLOAT, false }, + { GUID_WICPixelFormat64bppRGBA, DXGI_FORMAT_R16G16B16A16_UNORM, true }, + + { GUID_WICPixelFormat32bppRGBA, DXGI_FORMAT_R8G8B8A8_UNORM, true }, + { GUID_WICPixelFormat32bppBGRA, DXGI_FORMAT_B8G8R8A8_UNORM, true }, // DXGI 1.1 + { GUID_WICPixelFormat32bppBGR, DXGI_FORMAT_B8G8R8X8_UNORM, true }, // DXGI 1.1 + + { GUID_WICPixelFormat32bppRGBA1010102XR, DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM, true }, // DXGI 1.1 + { GUID_WICPixelFormat32bppRGBA1010102, DXGI_FORMAT_R10G10B10A2_UNORM, true }, + + { GUID_WICPixelFormat16bppBGRA5551, DXGI_FORMAT_B5G5R5A1_UNORM, true }, + { GUID_WICPixelFormat16bppBGR565, DXGI_FORMAT_B5G6R5_UNORM, true }, + + { GUID_WICPixelFormat32bppGrayFloat, DXGI_FORMAT_R32_FLOAT, false }, + { GUID_WICPixelFormat16bppGrayHalf, DXGI_FORMAT_R16_FLOAT, false }, + { GUID_WICPixelFormat16bppGray, DXGI_FORMAT_R16_UNORM, true }, + { GUID_WICPixelFormat8bppGray, DXGI_FORMAT_R8_UNORM, true }, + + { GUID_WICPixelFormat8bppAlpha, DXGI_FORMAT_A8_UNORM, false }, + + { GUID_WICPixelFormatBlackWhite, DXGI_FORMAT_R1_UNORM, false }, + }; + + bool g_WIC2 = false; + IWICImagingFactory* g_Factory = nullptr; + + BOOL WINAPI InitializeWICFactory(PINIT_ONCE, PVOID, PVOID *ifactory) noexcept + { + #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE) + HRESULT hr = CoCreateInstance( + CLSID_WICImagingFactory2, + nullptr, + CLSCTX_INPROC_SERVER, + __uuidof(IWICImagingFactory2), + ifactory + ); + + if (SUCCEEDED(hr)) + { + // WIC2 is available on Windows 10, Windows 8.x, and Windows 7 SP1 with KB 2670838 installed + g_WIC2 = true; + return TRUE; + } + else + { + g_WIC2 = false; + + hr = CoCreateInstance( + CLSID_WICImagingFactory1, + nullptr, + CLSCTX_INPROC_SERVER, + __uuidof(IWICImagingFactory), + ifactory + ); + return SUCCEEDED(hr) ? TRUE : FALSE; + } + #else + g_WIC2 = false; + + return SUCCEEDED(CoCreateInstance( + CLSID_WICImagingFactory, + nullptr, + CLSCTX_INPROC_SERVER, + __uuidof(IWICImagingFactory), + ifactory)) ? TRUE : FALSE; + #endif + } + +#else // !WIN32 + inline void * _aligned_malloc(size_t size, size_t alignment) + { + size = (size + alignment - 1) & ~(alignment - 1); + return std::aligned_alloc(alignment, size); + } + +#define _aligned_free free +#endif +} + + +#ifdef _WIN32 +//===================================================================================== +// WIC Utilities +//===================================================================================== + +_Use_decl_annotations_ +DXGI_FORMAT DirectX::Internal::WICToDXGI(const GUID& guid) noexcept +{ + for (size_t i = 0; i < std::size(g_WICFormats); ++i) + { + if (memcmp(&g_WICFormats[i].wic, &guid, sizeof(GUID)) == 0) + return g_WICFormats[i].format; + } + +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE) + if (g_WIC2) + { + if (memcmp(&GUID_WICPixelFormat96bppRGBFloat, &guid, sizeof(GUID)) == 0) + return DXGI_FORMAT_R32G32B32_FLOAT; + } +#endif + + return DXGI_FORMAT_UNKNOWN; +} + +_Use_decl_annotations_ +bool DirectX::Internal::DXGIToWIC(DXGI_FORMAT format, GUID& guid, bool ignoreRGBvsBGR) noexcept +{ + switch (format) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + if (ignoreRGBvsBGR) + { + // If we are not doing conversion so don't really care about BGR vs RGB color-order, + // we can use the canonical WIC 32bppBGRA format which avoids an extra format conversion when using the WIC scaler + memcpy(&guid, &GUID_WICPixelFormat32bppBGRA, sizeof(GUID)); + } + else + { + memcpy(&guid, &GUID_WICPixelFormat32bppRGBA, sizeof(GUID)); + } + return true; + + case DXGI_FORMAT_D32_FLOAT: + memcpy(&guid, &GUID_WICPixelFormat32bppGrayFloat, sizeof(GUID)); + return true; + + case DXGI_FORMAT_D16_UNORM: + memcpy(&guid, &GUID_WICPixelFormat16bppGray, sizeof(GUID)); + return true; + + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + memcpy(&guid, &GUID_WICPixelFormat32bppBGRA, sizeof(GUID)); + return true; + + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + memcpy(&guid, &GUID_WICPixelFormat32bppBGR, sizeof(GUID)); + return true; + + #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE) + case DXGI_FORMAT_R32G32B32_FLOAT: + if (g_WIC2) + { + memcpy(&guid, &GUID_WICPixelFormat96bppRGBFloat, sizeof(GUID)); + return true; + } + break; + #endif + + default: + for (size_t i = 0; i < std::size(g_WICFormats); ++i) + { + if (g_WICFormats[i].format == format) + { + memcpy(&guid, &g_WICFormats[i].wic, sizeof(GUID)); + return true; + } + } + break; + } + + memset(&guid, 0, sizeof(GUID)); + return false; +} + +TEX_FILTER_FLAGS DirectX::Internal::CheckWICColorSpace(_In_ const GUID& sourceGUID, _In_ const GUID& targetGUID) noexcept +{ + TEX_FILTER_FLAGS srgb = TEX_FILTER_DEFAULT; + + for (size_t i = 0; i < std::size(g_WICFormats); ++i) + { + if (memcmp(&g_WICFormats[i].wic, &sourceGUID, sizeof(GUID)) == 0) + { + if (g_WICFormats[i].srgb) + srgb |= TEX_FILTER_SRGB_IN; + } + + if (memcmp(&g_WICFormats[i].wic, &targetGUID, sizeof(GUID)) == 0) + { + if (g_WICFormats[i].srgb) + srgb |= TEX_FILTER_SRGB_OUT; + } + } + + if ((srgb & (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT)) == (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT)) + { + srgb &= ~(TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT); + } + + return srgb; +} + + +//------------------------------------------------------------------------------------- +// Public helper function to get common WIC codec GUIDs +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +REFGUID DirectX::GetWICCodec(WICCodecs codec) noexcept +{ + switch (codec) + { + case WIC_CODEC_BMP: + return GUID_ContainerFormatBmp; + + case WIC_CODEC_JPEG: + return GUID_ContainerFormatJpeg; + + case WIC_CODEC_PNG: + return GUID_ContainerFormatPng; + + case WIC_CODEC_TIFF: + return GUID_ContainerFormatTiff; + + case WIC_CODEC_GIF: + return GUID_ContainerFormatGif; + + case WIC_CODEC_WMP: + return GUID_ContainerFormatWmp; + + case WIC_CODEC_ICO: + return GUID_ContainerFormatIco; + +#ifdef NTDDI_WIN10_RS4 + case WIC_CODEC_HEIF: + // This requires installing https://aka.ms/heif + return GUID_ContainerFormatHeif; +#endif + + default: + return GUID_NULL; + } +} + + +//------------------------------------------------------------------------------------- +// Singleton function for WIC factory +//------------------------------------------------------------------------------------- +IWICImagingFactory* DirectX::GetWICFactory(bool& iswic2) noexcept +{ + if (g_Factory) + { + iswic2 = g_WIC2; + return g_Factory; + } + + static INIT_ONCE s_initOnce = INIT_ONCE_STATIC_INIT; + + if (!InitOnceExecuteOnce(&s_initOnce, + InitializeWICFactory, + nullptr, + reinterpret_cast(&g_Factory))) + { + return nullptr; + } + + iswic2 = g_WIC2; + return g_Factory; +} + + +//------------------------------------------------------------------------------------- +// Optional initializer for WIC factory +//------------------------------------------------------------------------------------- +void DirectX::SetWICFactory(_In_opt_ IWICImagingFactory* pWIC) noexcept +{ + if (pWIC == g_Factory) + return; + + bool iswic2 = false; + if (pWIC) + { + #if(_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE) + ComPtr wic2; + HRESULT hr = pWIC->QueryInterface(IID_PPV_ARGS(wic2.GetAddressOf())); + if (SUCCEEDED(hr)) + { + iswic2 = true; + } + #endif + pWIC->AddRef(); + } + + g_WIC2 = iswic2; + std::swap(pWIC, g_Factory); + if (pWIC) + pWIC->Release(); +} +#endif // WIN32 + + +//===================================================================================== +// DXGI Format Utilities +//===================================================================================== + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::IsPacked(DXGI_FORMAT fmt) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: // 4:2:2 8-bit + case DXGI_FORMAT_Y210: // 4:2:2 10-bit + case DXGI_FORMAT_Y216: // 4:2:2 16-bit + return true; + + default: + return false; + } +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::IsVideo(DXGI_FORMAT fmt) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + case DXGI_FORMAT_YUY2: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + case DXGI_FORMAT_NV11: + // These video formats can be used with the 3D pipeline through special view mappings + + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + // These are limited use video formats not usable in any way by the 3D pipeline + + case WIN10_DXGI_FORMAT_P208: + case WIN10_DXGI_FORMAT_V208: + case WIN10_DXGI_FORMAT_V408: + // These video formats are for JPEG Hardware decode (DXGI 1.4) + return true; + + default: + return false; + } +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::IsPlanar(DXGI_FORMAT fmt) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_NV12: // 4:2:0 8-bit + case DXGI_FORMAT_P010: // 4:2:0 10-bit + case DXGI_FORMAT_P016: // 4:2:0 16-bit + case DXGI_FORMAT_420_OPAQUE:// 4:2:0 8-bit + case DXGI_FORMAT_NV11: // 4:1:1 8-bit + + case WIN10_DXGI_FORMAT_P208: // 4:2:2 8-bit + case WIN10_DXGI_FORMAT_V208: // 4:4:0 8-bit + case WIN10_DXGI_FORMAT_V408: // 4:4:4 8-bit + // These are JPEG Hardware decode formats (DXGI 1.4) + + case XBOX_DXGI_FORMAT_D16_UNORM_S8_UINT: + case XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS: + case XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT: + // These are Xbox One platform specific types + return true; + + default: + return false; + } +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::IsDepthStencil(DXGI_FORMAT fmt) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_D16_UNORM: + case XBOX_DXGI_FORMAT_D16_UNORM_S8_UINT: + case XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS: + case XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT: + return true; + + default: + return false; + } +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::IsBGR(DXGI_FORMAT fmt) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_B4G4R4A4_UNORM: + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + return true; + + default: + return false; + } +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::IsTypeless(DXGI_FORMAT fmt, bool partialTypeless) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC7_TYPELESS: + return true; + + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS: + case XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT: + return partialTypeless; + + default: + return false; + } +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +bool DirectX::HasAlpha(DXGI_FORMAT fmt) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + case XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM: + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + return true; + + default: + return false; + } +} + + +//------------------------------------------------------------------------------------- +// Returns bits-per-pixel for a given DXGI format, or 0 on failure +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +size_t DirectX::BitsPerPixel(DXGI_FORMAT fmt) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return 128; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return 96; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + return 64; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R11G11B10_FLOAT: + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_YUY2: + case XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM: + return 32; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + case XBOX_DXGI_FORMAT_D16_UNORM_S8_UINT: + case XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS: + case XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT: + case WIN10_DXGI_FORMAT_V408: + return 24; + + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_B5G6R5_UNORM: + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_B4G4R4A4_UNORM: + case WIN10_DXGI_FORMAT_P208: + case WIN10_DXGI_FORMAT_V208: + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + return 16; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_NV11: + return 12; + + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case XBOX_DXGI_FORMAT_R4G4_UNORM: + return 8; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 4; + + default: + return 0; + } +} + + +//------------------------------------------------------------------------------------- +// Returns bits-per-color-channel for a given DXGI format, or 0 on failure +// For mixed formats, it returns the largest color-depth in the format +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +size_t DirectX::BitsPerColor(DXGI_FORMAT fmt) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + case DXGI_FORMAT_R32G32B32_TYPELESS: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + case DXGI_FORMAT_R32G32_TYPELESS: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + case DXGI_FORMAT_R32G8X24_TYPELESS: + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + case DXGI_FORMAT_R32_TYPELESS: + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + return 32; + + case DXGI_FORMAT_R24G8_TYPELESS: + case DXGI_FORMAT_D24_UNORM_S8_UINT: + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return 24; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_P016: + case DXGI_FORMAT_Y216: + case XBOX_DXGI_FORMAT_D16_UNORM_S8_UINT: + case XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS: + case XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT: + return 16; + + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + return 14; + + case DXGI_FORMAT_R11G11B10_FLOAT: + return 11; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_P010: + case DXGI_FORMAT_Y210: + case XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM: + return 10; + + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case DXGI_FORMAT_A8_UNORM: + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_YUY2: + case DXGI_FORMAT_NV11: + case WIN10_DXGI_FORMAT_P208: + case WIN10_DXGI_FORMAT_V208: + case WIN10_DXGI_FORMAT_V408: + return 8; + + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 7; + + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_B5G6R5_UNORM: + return 6; + + case DXGI_FORMAT_B5G5R5A1_UNORM: + return 5; + + case DXGI_FORMAT_B4G4R4A4_UNORM: + case XBOX_DXGI_FORMAT_R4G4_UNORM: + case WIN11_DXGI_FORMAT_A4B4G4R4_UNORM: + return 4; + + case DXGI_FORMAT_R1_UNORM: + return 1; + + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + // Palettized formats return 0 for this function + + default: + return 0; + } +} + + +//------------------------------------------------------------------------------------- +// Returns bytes per block for a given DXGI BC format, or 0 on failure +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +size_t DirectX::BytesPerBlock(DXGI_FORMAT fmt) noexcept +{ + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return 8; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return 16; + + default: + return 0; + } +} + + +//------------------------------------------------------------------------------------- +// Computes the image row pitch in bytes, and the slice ptich (size in bytes of the image) +// based on DXGI format, width, and height +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::ComputePitch(DXGI_FORMAT fmt, size_t width, size_t height, + size_t& rowPitch, size_t& slicePitch, CP_FLAGS flags) noexcept +{ + uint64_t pitch = 0; + uint64_t slice = 0; + + switch (static_cast(fmt)) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + assert(IsCompressed(fmt)); + { + if (flags & CP_FLAGS_BAD_DXTN_TAILS) + { + const size_t nbw = width >> 2; + const size_t nbh = height >> 2; + pitch = std::max(1u, uint64_t(nbw) * 8u); + slice = std::max(1u, pitch * uint64_t(nbh)); + } + else + { + const uint64_t nbw = std::max(1u, (uint64_t(width) + 3u) / 4u); + const uint64_t nbh = std::max(1u, (uint64_t(height) + 3u) / 4u); + pitch = nbw * 8u; + slice = pitch * nbh; + } + } + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + assert(IsCompressed(fmt)); + { + if (flags & CP_FLAGS_BAD_DXTN_TAILS) + { + const size_t nbw = width >> 2; + const size_t nbh = height >> 2; + pitch = std::max(1u, uint64_t(nbw) * 16u); + slice = std::max(1u, pitch * uint64_t(nbh)); + } + else + { + const uint64_t nbw = std::max(1u, (uint64_t(width) + 3u) / 4u); + const uint64_t nbh = std::max(1u, (uint64_t(height) + 3u) / 4u); + pitch = nbw * 16u; + slice = pitch * nbh; + } + } + break; + + case DXGI_FORMAT_R8G8_B8G8_UNORM: + case DXGI_FORMAT_G8R8_G8B8_UNORM: + case DXGI_FORMAT_YUY2: + assert(IsPacked(fmt)); + pitch = ((uint64_t(width) + 1u) >> 1) * 4u; + slice = pitch * uint64_t(height); + break; + + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + assert(IsPacked(fmt)); + pitch = ((uint64_t(width) + 1u) >> 1) * 8u; + slice = pitch * uint64_t(height); + break; + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_420_OPAQUE: + if ((height % 2) != 0) + { + // Requires a height alignment of 2. + return E_INVALIDARG; + } + assert(IsPlanar(fmt)); + pitch = ((uint64_t(width) + 1u) >> 1) * 2u; + slice = pitch * (uint64_t(height) + ((uint64_t(height) + 1u) >> 1)); + break; + + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + if ((height % 2) != 0) + { + // Requires a height alignment of 2. + return E_INVALIDARG; + } + + #if (__cplusplus >= 201703L) + [[fallthrough]]; + #elif defined(__clang__) + [[clang::fallthrough]]; + #elif defined(_MSC_VER) + __fallthrough; + #endif + + case XBOX_DXGI_FORMAT_D16_UNORM_S8_UINT: + case XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS: + case XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT: + assert(IsPlanar(fmt)); + pitch = ((uint64_t(width) + 1u) >> 1) * 4u; + slice = pitch * (uint64_t(height) + ((uint64_t(height) + 1u) >> 1)); + break; + + case DXGI_FORMAT_NV11: + assert(IsPlanar(fmt)); + pitch = ((uint64_t(width) + 3u) >> 2) * 4u; + slice = pitch * uint64_t(height) * 2u; + break; + + case WIN10_DXGI_FORMAT_P208: + assert(IsPlanar(fmt)); + pitch = ((uint64_t(width) + 1u) >> 1) * 2u; + slice = pitch * uint64_t(height) * 2u; + break; + + case WIN10_DXGI_FORMAT_V208: + if ((height % 2) != 0) + { + // Requires a height alignment of 2. + return E_INVALIDARG; + } + assert(IsPlanar(fmt)); + pitch = uint64_t(width); + slice = pitch * (uint64_t(height) + (((uint64_t(height) + 1u) >> 1) * 2u)); + break; + + case WIN10_DXGI_FORMAT_V408: + assert(IsPlanar(fmt)); + pitch = uint64_t(width); + slice = pitch * (uint64_t(height) + (uint64_t(height >> 1) * 4u)); + break; + + default: + assert(!IsCompressed(fmt) && !IsPacked(fmt) && !IsPlanar(fmt)); + { + size_t bpp; + + if (flags & CP_FLAGS_24BPP) + bpp = 24; + else if (flags & CP_FLAGS_16BPP) + bpp = 16; + else if (flags & CP_FLAGS_8BPP) + bpp = 8; + else + bpp = BitsPerPixel(fmt); + + if (!bpp) + return E_INVALIDARG; + + if (flags & (CP_FLAGS_LEGACY_DWORD | CP_FLAGS_PARAGRAPH | CP_FLAGS_YMM | CP_FLAGS_ZMM | CP_FLAGS_PAGE4K)) + { + if (flags & CP_FLAGS_PAGE4K) + { + pitch = ((uint64_t(width) * bpp + 32767u) / 32768u) * 4096u; + slice = pitch * uint64_t(height); + } + else if (flags & CP_FLAGS_ZMM) + { + pitch = ((uint64_t(width) * bpp + 511u) / 512u) * 64u; + slice = pitch * uint64_t(height); + } + else if (flags & CP_FLAGS_YMM) + { + pitch = ((uint64_t(width) * bpp + 255u) / 256u) * 32u; + slice = pitch * uint64_t(height); + } + else if (flags & CP_FLAGS_PARAGRAPH) + { + pitch = ((uint64_t(width) * bpp + 127u) / 128u) * 16u; + slice = pitch * uint64_t(height); + } + else // DWORD alignment + { + // Special computation for some incorrectly created DDS files based on + // legacy DirectDraw assumptions about pitch alignment + pitch = ((uint64_t(width) * bpp + 31u) / 32u) * sizeof(uint32_t); + slice = pitch * uint64_t(height); + } + } + else + { + // Default byte alignment + pitch = (uint64_t(width) * bpp + 7u) / 8u; + slice = pitch * uint64_t(height); + } + } + break; + } + +#if defined(_M_IX86) || defined(_M_ARM) || defined(_M_HYBRID_X86_ARM64) + static_assert(sizeof(size_t) == 4, "Not a 32-bit platform!"); + if (pitch > UINT32_MAX || slice > UINT32_MAX) + { + rowPitch = slicePitch = 0; + return HRESULT_E_ARITHMETIC_OVERFLOW; + } +#else + static_assert(sizeof(size_t) == 8, "Not a 64-bit platform!"); +#endif + + rowPitch = static_cast(pitch); + slicePitch = static_cast(slice); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +size_t DirectX::ComputeScanlines(DXGI_FORMAT fmt, size_t height) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + assert(IsCompressed(fmt)); + return std::max(1, (height + 3) / 4); + + case DXGI_FORMAT_NV11: + case WIN10_DXGI_FORMAT_P208: + assert(IsPlanar(fmt)); + return height * 2; + + case WIN10_DXGI_FORMAT_V208: + assert(IsPlanar(fmt)); + return height + (((height + 1) >> 1) * 2); + + case WIN10_DXGI_FORMAT_V408: + assert(IsPlanar(fmt)); + return height + ((height >> 1) * 4); + + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: + case DXGI_FORMAT_420_OPAQUE: + case XBOX_DXGI_FORMAT_D16_UNORM_S8_UINT: + case XBOX_DXGI_FORMAT_R16_UNORM_X8_TYPELESS: + case XBOX_DXGI_FORMAT_X16_TYPELESS_G8_UINT: + assert(IsPlanar(fmt)); + return height + ((height + 1) >> 1); + + default: + assert(IsValid(fmt)); + assert(!IsCompressed(fmt) && !IsPlanar(fmt)); + return height; + } +} + + +//------------------------------------------------------------------------------------- +// Converts to an SRGB equivalent type if available +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +DXGI_FORMAT DirectX::MakeSRGB(DXGI_FORMAT fmt) noexcept +{ + switch (fmt) + { + case DXGI_FORMAT_R8G8B8A8_UNORM: + return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; + + case DXGI_FORMAT_BC1_UNORM: + return DXGI_FORMAT_BC1_UNORM_SRGB; + + case DXGI_FORMAT_BC2_UNORM: + return DXGI_FORMAT_BC2_UNORM_SRGB; + + case DXGI_FORMAT_BC3_UNORM: + return DXGI_FORMAT_BC3_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; + + case DXGI_FORMAT_BC7_UNORM: + return DXGI_FORMAT_BC7_UNORM_SRGB; + + default: + return fmt; + } +} + + +//------------------------------------------------------------------------------------- +// Converts to an non-SRGB equivalent type +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +DXGI_FORMAT DirectX::MakeLinear(DXGI_FORMAT fmt) noexcept +{ + switch (fmt) + { + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_BC1_UNORM_SRGB: + return DXGI_FORMAT_BC1_UNORM; + + case DXGI_FORMAT_BC2_UNORM_SRGB: + return DXGI_FORMAT_BC2_UNORM; + + case DXGI_FORMAT_BC3_UNORM_SRGB: + return DXGI_FORMAT_BC3_UNORM; + + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_BC7_UNORM_SRGB: + return DXGI_FORMAT_BC7_UNORM; + + default: + return fmt; + } +} + + +//------------------------------------------------------------------------------------- +// Converts to a format to an equivalent TYPELESS format if available +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +DXGI_FORMAT DirectX::MakeTypeless(DXGI_FORMAT fmt) noexcept +{ + switch (static_cast(fmt)) + { + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32A32_UINT: + case DXGI_FORMAT_R32G32B32A32_SINT: + return DXGI_FORMAT_R32G32B32A32_TYPELESS; + + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32B32_UINT: + case DXGI_FORMAT_R32G32B32_SINT: + return DXGI_FORMAT_R32G32B32_TYPELESS; + + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + return DXGI_FORMAT_R16G16B16A16_TYPELESS; + + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32G32_UINT: + case DXGI_FORMAT_R32G32_SINT: + return DXGI_FORMAT_R32G32_TYPELESS; + + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + case XBOX_DXGI_FORMAT_R10G10B10_7E3_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_6E4_A2_FLOAT: + case XBOX_DXGI_FORMAT_R10G10B10_SNORM_A2_UNORM: + return DXGI_FORMAT_R10G10B10A2_TYPELESS; + + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + return DXGI_FORMAT_R8G8B8A8_TYPELESS; + + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + return DXGI_FORMAT_R16G16_TYPELESS; + + case DXGI_FORMAT_D32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_R32_UINT: + case DXGI_FORMAT_R32_SINT: + return DXGI_FORMAT_R32_TYPELESS; + + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + return DXGI_FORMAT_R8G8_TYPELESS; + + case DXGI_FORMAT_R16_FLOAT: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + return DXGI_FORMAT_R16_TYPELESS; + + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + case XBOX_DXGI_FORMAT_R4G4_UNORM: + return DXGI_FORMAT_R8_TYPELESS; + + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + return DXGI_FORMAT_BC1_TYPELESS; + + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + return DXGI_FORMAT_BC2_TYPELESS; + + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + return DXGI_FORMAT_BC3_TYPELESS; + + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + return DXGI_FORMAT_BC4_TYPELESS; + + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + return DXGI_FORMAT_BC5_TYPELESS; + + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8A8_TYPELESS; + + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return DXGI_FORMAT_B8G8R8X8_TYPELESS; + + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + return DXGI_FORMAT_BC6H_TYPELESS; + + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return DXGI_FORMAT_BC7_TYPELESS; + + default: + return fmt; + } +} + + +//------------------------------------------------------------------------------------- +// Converts to a TYPELESS format to an equivalent UNORM format if available +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +DXGI_FORMAT DirectX::MakeTypelessUNORM(DXGI_FORMAT fmt) noexcept +{ + switch (fmt) + { + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + return DXGI_FORMAT_R16G16B16A16_UNORM; + + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + return DXGI_FORMAT_R10G10B10A2_UNORM; + + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + return DXGI_FORMAT_R8G8B8A8_UNORM; + + case DXGI_FORMAT_R16G16_TYPELESS: + return DXGI_FORMAT_R16G16_UNORM; + + case DXGI_FORMAT_R8G8_TYPELESS: + return DXGI_FORMAT_R8G8_UNORM; + + case DXGI_FORMAT_R16_TYPELESS: + return DXGI_FORMAT_R16_UNORM; + + case DXGI_FORMAT_R8_TYPELESS: + return DXGI_FORMAT_R8_UNORM; + + case DXGI_FORMAT_BC1_TYPELESS: + return DXGI_FORMAT_BC1_UNORM; + + case DXGI_FORMAT_BC2_TYPELESS: + return DXGI_FORMAT_BC2_UNORM; + + case DXGI_FORMAT_BC3_TYPELESS: + return DXGI_FORMAT_BC3_UNORM; + + case DXGI_FORMAT_BC4_TYPELESS: + return DXGI_FORMAT_BC4_UNORM; + + case DXGI_FORMAT_BC5_TYPELESS: + return DXGI_FORMAT_BC5_UNORM; + + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + return DXGI_FORMAT_B8G8R8A8_UNORM; + + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + return DXGI_FORMAT_B8G8R8X8_UNORM; + + case DXGI_FORMAT_BC7_TYPELESS: + return DXGI_FORMAT_BC7_UNORM; + + default: + return fmt; + } +} + + +//------------------------------------------------------------------------------------- +// Converts to a TYPELESS format to an equivalent FLOAT format if available +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +DXGI_FORMAT DirectX::MakeTypelessFLOAT(DXGI_FORMAT fmt) noexcept +{ + switch (fmt) + { + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + return DXGI_FORMAT_R32G32B32A32_FLOAT; + + case DXGI_FORMAT_R32G32B32_TYPELESS: + return DXGI_FORMAT_R32G32B32_FLOAT; + + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + return DXGI_FORMAT_R16G16B16A16_FLOAT; + + case DXGI_FORMAT_R32G32_TYPELESS: + return DXGI_FORMAT_R32G32_FLOAT; + + case DXGI_FORMAT_R16G16_TYPELESS: + return DXGI_FORMAT_R16G16_FLOAT; + + case DXGI_FORMAT_R32_TYPELESS: + return DXGI_FORMAT_R32_FLOAT; + + case DXGI_FORMAT_R16_TYPELESS: + return DXGI_FORMAT_R16_FLOAT; + + default: + return fmt; + } +} + + +//===================================================================================== +// TexMetadata +//===================================================================================== + +size_t TexMetadata::ComputeIndex(size_t mip, size_t item, size_t slice) const noexcept +{ + if (mip >= mipLevels) + return size_t(-1); + + switch (dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + if (slice > 0) + return size_t(-1); + + if (item >= arraySize) + return size_t(-1); + + return (item*(mipLevels)+mip); + + case TEX_DIMENSION_TEXTURE3D: + if (item > 0) + { + // No support for arrays of volumes + return size_t(-1); + } + else + { + size_t index = 0; + size_t d = depth; + + for (size_t level = 0; level < mip; ++level) + { + index += d; + if (d > 1) + d >>= 1; + } + + if (slice >= d) + return size_t(-1); + + index += slice; + + return index; + } + + default: + return size_t(-1); + } +} + +// Equivalent to D3D11CacluateSubresource: MipSlice + ArraySlice * MipLevels +uint32_t TexMetadata::CalculateSubresource(size_t mip, size_t item) const noexcept +{ + uint32_t result = uint32_t(-1); + + if (mip < mipLevels) + { + switch (dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + if (item < arraySize) + { + return static_cast(mip + item*mipLevels); + } + break; + + case TEX_DIMENSION_TEXTURE3D: + // No support for arrays of volumes + if (item == 0) + { + result = static_cast(mip); + } + break; + + default: + break; + } + } + + return result; +} + +// Equivalent to D3D12CacluateSubresource: MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize +uint32_t TexMetadata::CalculateSubresource(size_t mip, size_t item, size_t plane) const noexcept +{ + uint32_t result = uint32_t(-1); + + if (mip < mipLevels) + { + switch (dimension) + { + case TEX_DIMENSION_TEXTURE1D: + case TEX_DIMENSION_TEXTURE2D: + if (item < arraySize) + { + return static_cast(mip + item*mipLevels + plane*mipLevels*arraySize); + } + break; + + case TEX_DIMENSION_TEXTURE3D: + // No support for arrays of volumes + if (item == 0) + { + result = static_cast(mip + plane*mipLevels); + } + break; + + default: + break; + } + } + + return result; +} + + +//===================================================================================== +// Blob - Bitmap image container +//===================================================================================== + +Blob& Blob::operator= (Blob&& moveFrom) noexcept +{ + if (this != &moveFrom) + { + Release(); + + m_buffer = moveFrom.m_buffer; + m_size = moveFrom.m_size; + + moveFrom.m_buffer = nullptr; + moveFrom.m_size = 0; + } + return *this; +} + +void Blob::Release() noexcept +{ + if (m_buffer) + { + _aligned_free(m_buffer); + m_buffer = nullptr; + } + + m_size = 0; +} + +_Use_decl_annotations_ +HRESULT Blob::Initialize(size_t size) noexcept +{ + if (!size) + return E_INVALIDARG; + + Release(); + + m_buffer = reinterpret_cast(_aligned_malloc(size, 16)); + if (!m_buffer) + { + Release(); + return E_OUTOFMEMORY; + } + + m_size = size; + + return S_OK; +} + +HRESULT Blob::Trim(size_t size) noexcept +{ + if (!size) + return E_INVALIDARG; + + if (!m_buffer) + return E_UNEXPECTED; + + if (size > m_size) + return E_INVALIDARG; + + m_size = size; + + return S_OK; +} + +HRESULT Blob::Resize(size_t size) noexcept +{ + if (!size) + return E_INVALIDARG; + + if (!m_buffer || !m_size) + return E_UNEXPECTED; + + auto tbuffer = reinterpret_cast(_aligned_malloc(size, 16)); + if (!tbuffer) + return E_OUTOFMEMORY; + + memcpy(tbuffer, m_buffer, std::min(m_size, size)); + + Release(); + + m_buffer = tbuffer; + m_size = size; + + return S_OK; +} diff --git a/external/DirectXTex/DirectXTexWIC.cpp b/external/DirectXTex/DirectXTexWIC.cpp new file mode 100644 index 00000000..63caf1ba --- /dev/null +++ b/external/DirectXTex/DirectXTexWIC.cpp @@ -0,0 +1,1677 @@ +//------------------------------------------------------------------------------------- +// DirectXTexWIC.cpp +// +// DirectX Texture Library - WIC-based file reader/writer +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#include "DirectXTexP.h" + +using namespace DirectX; +using namespace DirectX::Internal; +using Microsoft::WRL::ComPtr; + +namespace +{ + //------------------------------------------------------------------------------------- + // WIC Pixel Format nearest conversion table + //------------------------------------------------------------------------------------- + struct WICConvert + { + const GUID& source; + const GUID& target; + TEX_ALPHA_MODE alphaMode; + + constexpr WICConvert(const GUID& src, const GUID& tgt, TEX_ALPHA_MODE mode) noexcept : + source(src), + target(tgt), + alphaMode(mode) {} + }; + + constexpr WICConvert g_WICConvert[] = + { + // Directly support the formats listed in XnaTexUtil::g_WICFormats, so no conversion required + // Note target GUID in this conversion table must be one of those directly supported formats. + + { GUID_WICPixelFormat1bppIndexed, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R8G8B8A8_UNORM + { GUID_WICPixelFormat2bppIndexed, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R8G8B8A8_UNORM + { GUID_WICPixelFormat4bppIndexed, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R8G8B8A8_UNORM + { GUID_WICPixelFormat8bppIndexed, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R8G8B8A8_UNORM + + { GUID_WICPixelFormat2bppGray, GUID_WICPixelFormat8bppGray, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R8_UNORM + { GUID_WICPixelFormat4bppGray, GUID_WICPixelFormat8bppGray, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R8_UNORM + + { GUID_WICPixelFormat16bppGrayFixedPoint, GUID_WICPixelFormat16bppGrayHalf, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R16_FLOAT + { GUID_WICPixelFormat32bppGrayFixedPoint, GUID_WICPixelFormat32bppGrayFloat, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R32_FLOAT + + { GUID_WICPixelFormat16bppBGR555, GUID_WICPixelFormat16bppBGRA5551, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_B5G5R5A1_UNORM + { GUID_WICPixelFormat32bppBGR101010, GUID_WICPixelFormat32bppRGBA1010102, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R10G10B10A2_UNORM + + { GUID_WICPixelFormat24bppBGR, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R8G8B8A8_UNORM + { GUID_WICPixelFormat24bppRGB, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R8G8B8A8_UNORM + { GUID_WICPixelFormat32bppPBGRA, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R8G8B8A8_UNORM + { GUID_WICPixelFormat32bppPRGBA, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R8G8B8A8_UNORM + + { GUID_WICPixelFormat48bppRGB, GUID_WICPixelFormat64bppRGBA, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R16G16B16A16_UNORM + { GUID_WICPixelFormat48bppBGR, GUID_WICPixelFormat64bppRGBA, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R16G16B16A16_UNORM + { GUID_WICPixelFormat64bppBGRA, GUID_WICPixelFormat64bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R16G16B16A16_UNORM + { GUID_WICPixelFormat64bppPRGBA, GUID_WICPixelFormat64bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R16G16B16A16_UNORM + { GUID_WICPixelFormat64bppPBGRA, GUID_WICPixelFormat64bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R16G16B16A16_UNORM + + { GUID_WICPixelFormat48bppRGBFixedPoint, GUID_WICPixelFormat64bppRGBAHalf, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R16G16B16A16_FLOAT + { GUID_WICPixelFormat48bppBGRFixedPoint, GUID_WICPixelFormat64bppRGBAHalf, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R16G16B16A16_FLOAT + { GUID_WICPixelFormat64bppRGBAFixedPoint, GUID_WICPixelFormat64bppRGBAHalf, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R16G16B16A16_FLOAT + { GUID_WICPixelFormat64bppBGRAFixedPoint, GUID_WICPixelFormat64bppRGBAHalf, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R16G16B16A16_FLOAT + { GUID_WICPixelFormat64bppRGBFixedPoint, GUID_WICPixelFormat64bppRGBAHalf, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R16G16B16A16_FLOAT + { GUID_WICPixelFormat64bppRGBHalf, GUID_WICPixelFormat64bppRGBAHalf, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R16G16B16A16_FLOAT + { GUID_WICPixelFormat48bppRGBHalf, GUID_WICPixelFormat64bppRGBAHalf, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R16G16B16A16_FLOAT + + { GUID_WICPixelFormat128bppPRGBAFloat, GUID_WICPixelFormat128bppRGBAFloat, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R32G32B32A32_FLOAT + { GUID_WICPixelFormat128bppRGBFloat, GUID_WICPixelFormat128bppRGBAFloat, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R32G32B32A32_FLOAT + { GUID_WICPixelFormat128bppRGBAFixedPoint, GUID_WICPixelFormat128bppRGBAFloat, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R32G32B32A32_FLOAT + { GUID_WICPixelFormat128bppRGBFixedPoint, GUID_WICPixelFormat128bppRGBAFloat, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R32G32B32A32_FLOAT + { GUID_WICPixelFormat32bppRGBE, GUID_WICPixelFormat128bppRGBAFloat, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R32G32B32A32_FLOAT + + { GUID_WICPixelFormat32bppCMYK, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R8G8B8A8_UNORM + { GUID_WICPixelFormat64bppCMYK, GUID_WICPixelFormat64bppRGBA, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R16G16B16A16_UNORM + { GUID_WICPixelFormat40bppCMYKAlpha, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R8G8B8A8_UNORM + { GUID_WICPixelFormat80bppCMYKAlpha, GUID_WICPixelFormat64bppRGBA, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R16G16B16A16_UNORM + + #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE) + { GUID_WICPixelFormat32bppRGB, GUID_WICPixelFormat32bppRGBA, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R8G8B8A8_UNORM + { GUID_WICPixelFormat64bppRGB, GUID_WICPixelFormat64bppRGBA, TEX_ALPHA_MODE_OPAQUE }, // DXGI_FORMAT_R16G16B16A16_UNORM + { GUID_WICPixelFormat64bppPRGBAHalf, GUID_WICPixelFormat64bppRGBAHalf, TEX_ALPHA_MODE_UNKNOWN }, // DXGI_FORMAT_R16G16B16A16_FLOAT + #endif + + // We don't support n-channel formats + }; + + //------------------------------------------------------------------------------------- + // Returns the DXGI format and optionally the WIC pixel GUID to convert to + //------------------------------------------------------------------------------------- + DXGI_FORMAT DetermineFormat( + _In_ const WICPixelFormatGUID& pixelFormat, + WIC_FLAGS flags, + bool iswic2, + _Out_opt_ WICPixelFormatGUID* pConvert, + _Out_ TEX_ALPHA_MODE* alphaMode) noexcept + { + if (pConvert) + memset(pConvert, 0, sizeof(WICPixelFormatGUID)); + + *alphaMode = TEX_ALPHA_MODE_UNKNOWN; + + DXGI_FORMAT format = WICToDXGI(pixelFormat); + + if (format == DXGI_FORMAT_UNKNOWN) + { + if (memcmp(&GUID_WICPixelFormat96bppRGBFixedPoint, &pixelFormat, sizeof(WICPixelFormatGUID)) == 0) + { + #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE) + if (iswic2) + { + if (pConvert) + memcpy_s(pConvert, sizeof(WICPixelFormatGUID), &GUID_WICPixelFormat96bppRGBFloat, sizeof(GUID)); + format = DXGI_FORMAT_R32G32B32_FLOAT; + } + else + #else + UNREFERENCED_PARAMETER(iswic2); + #endif + { + if (pConvert) + memcpy_s(pConvert, sizeof(WICPixelFormatGUID), &GUID_WICPixelFormat128bppRGBAFloat, sizeof(GUID)); + format = DXGI_FORMAT_R32G32B32A32_FLOAT; + *alphaMode = TEX_ALPHA_MODE_OPAQUE; + } + } + else + { + for (size_t i = 0; i < std::size(g_WICConvert); ++i) + { + if (memcmp(&g_WICConvert[i].source, &pixelFormat, sizeof(WICPixelFormatGUID)) == 0) + { + if (pConvert) + memcpy_s(pConvert, sizeof(WICPixelFormatGUID), &g_WICConvert[i].target, sizeof(GUID)); + + format = WICToDXGI(g_WICConvert[i].target); + assert(format != DXGI_FORMAT_UNKNOWN); + *alphaMode = g_WICConvert[i].alphaMode; + break; + } + } + } + } + + // Handle special cases based on flags + switch (format) + { + case DXGI_FORMAT_B8G8R8A8_UNORM: // BGRA + case DXGI_FORMAT_B8G8R8X8_UNORM: // BGRX + if (flags & WIC_FLAGS_FORCE_RGB) + { + format = DXGI_FORMAT_R8G8B8A8_UNORM; + if (pConvert) + memcpy_s(pConvert, sizeof(WICPixelFormatGUID), &GUID_WICPixelFormat32bppRGBA, sizeof(GUID)); + } + break; + + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + if (flags & WIC_FLAGS_NO_X2_BIAS) + { + format = DXGI_FORMAT_R10G10B10A2_UNORM; + if (pConvert) + memcpy_s(pConvert, sizeof(WICPixelFormatGUID), &GUID_WICPixelFormat32bppRGBA1010102, sizeof(GUID)); + } + break; + + case DXGI_FORMAT_B5G5R5A1_UNORM: + case DXGI_FORMAT_B5G6R5_UNORM: + if (flags & WIC_FLAGS_NO_16BPP) + { + format = DXGI_FORMAT_R8G8B8A8_UNORM; + if (pConvert) + memcpy_s(pConvert, sizeof(WICPixelFormatGUID), &GUID_WICPixelFormat32bppRGBA, sizeof(GUID)); + } + break; + + case DXGI_FORMAT_R1_UNORM: + if (!(flags & WIC_FLAGS_ALLOW_MONO)) + { + // By default we want to promote a black & white to gresycale since R1 is not a generally supported D3D format + format = DXGI_FORMAT_R8_UNORM; + if (pConvert) + memcpy_s(pConvert, sizeof(WICPixelFormatGUID), &GUID_WICPixelFormat8bppGray, sizeof(GUID)); + } + break; + + default: + break; + } + + return format; + } + + + //------------------------------------------------------------------------------------- + // IStream over a Blob for WIC in-memory write functions + //------------------------------------------------------------------------------------- + class MemoryStreamOnBlob : public IStream + { + MemoryStreamOnBlob(Blob& blob) noexcept : + mBlob(blob), + m_streamPosition(0), + m_streamEOF(0), + mRefCount(1) + { + assert(mBlob.GetConstBufferPointer() && mBlob.GetBufferSize() > 0); + } + + public: + virtual ~MemoryStreamOnBlob() = default; + + MemoryStreamOnBlob(MemoryStreamOnBlob&&) = delete; + MemoryStreamOnBlob& operator= (MemoryStreamOnBlob&&) = delete; + + MemoryStreamOnBlob(MemoryStreamOnBlob const&) = delete; + MemoryStreamOnBlob& operator= (MemoryStreamOnBlob const&) = delete; + + // IUnknown + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppvObject) override + { + if (iid == __uuidof(IUnknown) + || iid == __uuidof(IStream) + || iid == __uuidof(ISequentialStream)) + { + *ppvObject = static_cast(this); + AddRef(); + return S_OK; + } + else + return E_NOINTERFACE; + } + + ULONG STDMETHODCALLTYPE AddRef() override + { + return InterlockedIncrement(&mRefCount); + } + + ULONG STDMETHODCALLTYPE Release() override + { + const ULONG res = InterlockedDecrement(&mRefCount); + if (res == 0) + { + delete this; + } + return res; + } + + // ISequentialStream + HRESULT STDMETHODCALLTYPE Read(void* pv, ULONG cb, ULONG* pcbRead) override + { + size_t maxRead = m_streamEOF - m_streamPosition; + auto ptr = mBlob.GetBufferPointer(); + if (cb > maxRead) + { + const uint64_t pos = uint64_t(m_streamPosition) + uint64_t(maxRead); + if (pos > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + memcpy(pv, &ptr[m_streamPosition], maxRead); + + m_streamPosition = static_cast(pos); + + if (pcbRead) + { + *pcbRead = static_cast(maxRead); + } + return E_BOUNDS; + } + else + { + const uint64_t pos = uint64_t(m_streamPosition) + uint64_t(cb); + if (pos > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + memcpy(pv, &ptr[m_streamPosition], cb); + + m_streamPosition = static_cast(pos); + + if (pcbRead) + { + *pcbRead = cb; + } + return S_OK; + } + } + + HRESULT STDMETHODCALLTYPE Write(void const* pv, ULONG cb, ULONG* pcbWritten) override + { + const size_t blobSize = mBlob.GetBufferSize(); + const size_t spaceAvailable = blobSize - m_streamPosition; + size_t growAmount = cb; + + if (spaceAvailable > 0) + { + if (spaceAvailable >= growAmount) + { + growAmount = 0; + } + else + { + growAmount -= spaceAvailable; + } + } + + if (growAmount > 0) + { + uint64_t newSize = uint64_t(blobSize); + const uint64_t targetSize = uint64_t(blobSize) + growAmount; + HRESULT hr = ComputeGrowSize(newSize, targetSize); + if (FAILED(hr)) + return hr; + + hr = mBlob.Resize(static_cast(newSize)); + if (FAILED(hr)) + return hr; + } + + const uint64_t pos = uint64_t(m_streamPosition) + uint64_t(cb); + if (pos > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + auto ptr = mBlob.GetBufferPointer(); + memcpy(&ptr[m_streamPosition], pv, cb); + + m_streamPosition = static_cast(pos); + m_streamEOF = std::max(m_streamEOF, m_streamPosition); + + if (pcbWritten) + { + *pcbWritten = cb; + } + return S_OK; + } + + // IStream + HRESULT STDMETHODCALLTYPE SetSize(ULARGE_INTEGER size) override + { + if (size.HighPart > 0) + return E_OUTOFMEMORY; + + const size_t blobSize = mBlob.GetBufferSize(); + + if (blobSize >= size.LowPart) + { + auto ptr = mBlob.GetBufferPointer(); + if (m_streamEOF < size.LowPart) + { + memset(&ptr[m_streamEOF], 0, size.LowPart - m_streamEOF); + } + + m_streamEOF = static_cast(size.LowPart); + } + else + { + uint64_t newSize = uint64_t(blobSize); + const uint64_t targetSize = uint64_t(size.QuadPart); + HRESULT hr = ComputeGrowSize(newSize, targetSize); + if (FAILED(hr)) + return hr; + + hr = mBlob.Resize(static_cast(newSize)); + if (FAILED(hr)) + return hr; + + auto ptr = mBlob.GetBufferPointer(); + if (m_streamEOF < size.LowPart) + { + memset(&ptr[m_streamEOF], 0, size.LowPart - m_streamEOF); + } + + m_streamEOF = static_cast(size.LowPart); + } + + if (m_streamPosition > m_streamEOF) + { + m_streamPosition = m_streamEOF; + } + + return S_OK; + } + + HRESULT STDMETHODCALLTYPE CopyTo(IStream*, ULARGE_INTEGER, ULARGE_INTEGER*, ULARGE_INTEGER*) override + { + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE Commit(DWORD) override + { + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE Revert() override + { + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) override + { + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) override + { + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE Clone(IStream**) override + { + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER liDistanceToMove, DWORD dwOrigin, ULARGE_INTEGER* lpNewFilePointer) override + { + LONGLONG newPosition = 0; + + switch (dwOrigin) + { + case STREAM_SEEK_SET: + newPosition = liDistanceToMove.QuadPart; + break; + + case STREAM_SEEK_CUR: + newPosition = static_cast(m_streamPosition) + liDistanceToMove.QuadPart; + break; + + case STREAM_SEEK_END: + newPosition = static_cast(m_streamEOF) + liDistanceToMove.QuadPart; + break; + + default: + return STG_E_INVALIDFUNCTION; + } + + HRESULT result = S_OK; + + if (newPosition > static_cast(m_streamEOF)) + { + m_streamPosition = m_streamEOF; + result = E_BOUNDS; + } + else if (newPosition < 0) + { + m_streamPosition = 0; + result = E_BOUNDS; + } + else + { + m_streamPosition = static_cast(newPosition); + } + + if (lpNewFilePointer) + { + lpNewFilePointer->QuadPart = static_cast(m_streamPosition); + } + + return result; + } + + HRESULT STDMETHODCALLTYPE Stat(STATSTG* pStatstg, DWORD) override + { + if (!pStatstg) + return E_INVALIDARG; + pStatstg->cbSize.QuadPart = static_cast(m_streamEOF); + return S_OK; + } + + HRESULT Finialize() noexcept + { + if (mRefCount > 1) + return E_FAIL; + + return mBlob.Trim(m_streamEOF); + } + + static HRESULT CreateMemoryStream(_Outptr_ MemoryStreamOnBlob** stream, Blob& blob) noexcept + { + if (!stream) + return E_INVALIDARG; + + *stream = nullptr; + + auto ptr = new (std::nothrow) MemoryStreamOnBlob(blob); + if (!ptr) + return E_OUTOFMEMORY; + + *stream = ptr; + + return S_OK; + } + + private: + Blob& mBlob; + size_t m_streamPosition; + size_t m_streamEOF; + ULONG mRefCount; + + static HRESULT ComputeGrowSize(uint64_t& newSize, const uint64_t targetSize) noexcept + { + // We grow by doubling until we hit 256MB, then we add 16MB at a time. + while (newSize < targetSize) + { + if (newSize < (256 * 1024 * 1024)) + { + newSize <<= 1; + } + else + { + newSize += 16 * 1024 * 1024; + } + if (newSize > UINT32_MAX) + return E_OUTOFMEMORY; + } + + return S_OK; + } + }; + + //------------------------------------------------------------------------------------- + // Determines metadata for image + //------------------------------------------------------------------------------------- + HRESULT DecodeMetadata( + WIC_FLAGS flags, + bool iswic2, + _In_ IWICBitmapDecoder *decoder, + _In_ IWICBitmapFrameDecode *frame, + _Out_ TexMetadata& metadata, + _Out_opt_ WICPixelFormatGUID* pConvert, + _In_ std::function getMQR) + { + if (!decoder || !frame) + return E_POINTER; + + memset(&metadata, 0, sizeof(TexMetadata)); + metadata.depth = 1; + metadata.mipLevels = 1; + metadata.dimension = TEX_DIMENSION_TEXTURE2D; + + UINT w, h; + HRESULT hr = frame->GetSize(&w, &h); + if (FAILED(hr)) + return hr; + + metadata.width = w; + metadata.height = h; + + if (flags & WIC_FLAGS_ALL_FRAMES) + { + UINT fcount; + hr = decoder->GetFrameCount(&fcount); + if (FAILED(hr)) + return hr; + + metadata.arraySize = fcount; + } + else + metadata.arraySize = 1; + + WICPixelFormatGUID pixelFormat; + hr = frame->GetPixelFormat(&pixelFormat); + if (FAILED(hr)) + return hr; + + TEX_ALPHA_MODE alphaMode; + metadata.format = DetermineFormat(pixelFormat, flags, iswic2, pConvert, &alphaMode); + if (metadata.format == DXGI_FORMAT_UNKNOWN) + return HRESULT_E_NOT_SUPPORTED; + + metadata.SetAlphaMode(alphaMode); + + if (!(flags & WIC_FLAGS_IGNORE_SRGB)) + { + GUID containerFormat; + hr = decoder->GetContainerFormat(&containerFormat); + if (FAILED(hr)) + return hr; + + ComPtr metareader; + hr = frame->GetMetadataQueryReader(metareader.GetAddressOf()); + if (SUCCEEDED(hr)) + { + // Check for sRGB colorspace metadata + bool sRGB = false; + + PROPVARIANT value; + PropVariantInit(&value); + + // Check for colorspace chunks + if (memcmp(&containerFormat, &GUID_ContainerFormatPng, sizeof(GUID)) == 0) + { + if (SUCCEEDED(metareader->GetMetadataByName(L"/sRGB/RenderingIntent", &value)) && value.vt == VT_UI1) + { + sRGB = true; + } + else if (SUCCEEDED(metareader->GetMetadataByName(L"/gAMA/ImageGamma", &value)) && value.vt == VT_UI4) + { + sRGB = (value.uintVal == 45455); + } + else + { + sRGB = (flags & WIC_FLAGS_DEFAULT_SRGB) != 0; + } + } + #if (defined(_XBOX_ONE) && defined(_TITLE)) || defined(_GAMING_XBOX) + else if (memcmp(&containerFormat, &GUID_ContainerFormatJpeg, sizeof(GUID)) == 0) + { + if (SUCCEEDED(metareader->GetMetadataByName(L"/app1/ifd/exif/{ushort=40961}", &value)) && value.vt == VT_UI2) + { + sRGB = (value.uiVal == 1); + } + else + { + sRGB = (flags & WIC_FLAGS_DEFAULT_SRGB) != 0; + } + } + else if (memcmp(&containerFormat, &GUID_ContainerFormatTiff, sizeof(GUID)) == 0) + { + if (SUCCEEDED(metareader->GetMetadataByName(L"/ifd/exif/{ushort=40961}", &value)) && value.vt == VT_UI2) + { + sRGB = (value.uiVal == 1); + } + else + { + sRGB = (flags & WIC_FLAGS_DEFAULT_SRGB) != 0; + } + } + #else + else if (SUCCEEDED(metareader->GetMetadataByName(L"System.Image.ColorSpace", &value)) && value.vt == VT_UI2) + { + sRGB = (value.uiVal == 1); + } + else + { + sRGB = (flags & WIC_FLAGS_DEFAULT_SRGB) != 0; + } + #endif + + std::ignore = PropVariantClear(&value); + + if (sRGB) + metadata.format = MakeSRGB(metadata.format); + } + else if (hr == WINCODEC_ERR_UNSUPPORTEDOPERATION) + { + // Some formats just don't support metadata (BMP, ICO, etc.), so ignore this failure + hr = S_OK; + } + } + + if (getMQR) + { + ComPtr metareader; + if (SUCCEEDED(frame->GetMetadataQueryReader(metareader.GetAddressOf()))) + { + getMQR(metareader.Get()); + } + } + + return hr; + } + + + //------------------------------------------------------------------------------------- + // Decodes a single frame + //------------------------------------------------------------------------------------- + HRESULT DecodeSingleFrame( + WIC_FLAGS flags, + const TexMetadata& metadata, + const WICPixelFormatGUID& convertGUID, + _In_ IWICBitmapFrameDecode *frame, + _Inout_ ScratchImage& image) + { + if (!frame) + return E_POINTER; + + HRESULT hr = image.Initialize2D(metadata.format, metadata.width, metadata.height, 1, 1); + if (FAILED(hr)) + return hr; + + const Image *img = image.GetImage(0, 0, 0); + if (!img) + return E_POINTER; + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + if (img->rowPitch > UINT32_MAX || img->slicePitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + if (memcmp(&convertGUID, &GUID_NULL, sizeof(GUID)) == 0) + { + hr = frame->CopyPixels(nullptr, static_cast(img->rowPitch), static_cast(img->slicePitch), img->pixels); + if (FAILED(hr)) + return hr; + } + else + { + ComPtr FC; + hr = pWIC->CreateFormatConverter(FC.GetAddressOf()); + if (FAILED(hr)) + return hr; + + WICPixelFormatGUID pixelFormat; + hr = frame->GetPixelFormat(&pixelFormat); + if (FAILED(hr)) + return hr; + + BOOL canConvert = FALSE; + hr = FC->CanConvert(pixelFormat, convertGUID, &canConvert); + if (FAILED(hr) || !canConvert) + { + return E_UNEXPECTED; + } + + hr = FC->Initialize(frame, convertGUID, GetWICDither(flags), nullptr, + 0, WICBitmapPaletteTypeMedianCut); + if (FAILED(hr)) + return hr; + + hr = FC->CopyPixels(nullptr, static_cast(img->rowPitch), static_cast(img->slicePitch), img->pixels); + if (FAILED(hr)) + return hr; + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Decodes an image array, resizing/format converting as needed + //------------------------------------------------------------------------------------- + HRESULT DecodeMultiframe( + WIC_FLAGS flags, + const TexMetadata& metadata, + _In_ IWICBitmapDecoder *decoder, + _Inout_ ScratchImage& image) + { + if (!decoder) + return E_POINTER; + + HRESULT hr = image.Initialize2D(metadata.format, metadata.width, metadata.height, metadata.arraySize, 1); + if (FAILED(hr)) + return hr; + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + WICPixelFormatGUID sourceGUID; + if (!DXGIToWIC(metadata.format, sourceGUID)) + return E_FAIL; + + for (size_t index = 0; index < metadata.arraySize; ++index) + { + const Image* img = image.GetImage(0, index, 0); + if (!img) + return E_POINTER; + + if (img->rowPitch > UINT32_MAX || img->slicePitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + ComPtr frame; + hr = decoder->GetFrame(static_cast(index), frame.GetAddressOf()); + if (FAILED(hr)) + return hr; + + WICPixelFormatGUID pfGuid; + hr = frame->GetPixelFormat(&pfGuid); + if (FAILED(hr)) + return hr; + + UINT w, h; + hr = frame->GetSize(&w, &h); + if (FAILED(hr)) + return hr; + + if (w == metadata.width && h == metadata.height) + { + // This frame does not need resized + if (memcmp(&pfGuid, &sourceGUID, sizeof(WICPixelFormatGUID)) == 0) + { + hr = frame->CopyPixels(nullptr, static_cast(img->rowPitch), static_cast(img->slicePitch), img->pixels); + if (FAILED(hr)) + return hr; + } + else + { + ComPtr FC; + hr = pWIC->CreateFormatConverter(FC.GetAddressOf()); + if (FAILED(hr)) + return hr; + + BOOL canConvert = FALSE; + hr = FC->CanConvert(pfGuid, sourceGUID, &canConvert); + if (FAILED(hr) || !canConvert) + { + return E_UNEXPECTED; + } + + hr = FC->Initialize(frame.Get(), sourceGUID, GetWICDither(flags), nullptr, + 0, WICBitmapPaletteTypeMedianCut); + if (FAILED(hr)) + return hr; + + hr = FC->CopyPixels(nullptr, static_cast(img->rowPitch), static_cast(img->slicePitch), img->pixels); + if (FAILED(hr)) + return hr; + } + } + else + { + // This frame needs resizing + ComPtr scaler; + hr = pWIC->CreateBitmapScaler(scaler.GetAddressOf()); + if (FAILED(hr)) + return hr; + + hr = scaler->Initialize(frame.Get(), + static_cast(metadata.width), static_cast(metadata.height), + GetWICInterp(flags)); + if (FAILED(hr)) + return hr; + + WICPixelFormatGUID pfScaler; + hr = scaler->GetPixelFormat(&pfScaler); + if (FAILED(hr)) + return hr; + + if (memcmp(&pfScaler, &sourceGUID, sizeof(WICPixelFormatGUID)) == 0) + { + hr = scaler->CopyPixels(nullptr, static_cast(img->rowPitch), static_cast(img->slicePitch), img->pixels); + if (FAILED(hr)) + return hr; + } + else + { + // The WIC bitmap scaler is free to return a different pixel format than the source image, so here we + // convert it to our desired format + ComPtr FC; + hr = pWIC->CreateFormatConverter(FC.GetAddressOf()); + if (FAILED(hr)) + return hr; + + BOOL canConvert = FALSE; + hr = FC->CanConvert(pfScaler, sourceGUID, &canConvert); + if (FAILED(hr) || !canConvert) + { + return E_UNEXPECTED; + } + + hr = FC->Initialize(scaler.Get(), sourceGUID, GetWICDither(flags), nullptr, + 0, WICBitmapPaletteTypeMedianCut); + if (FAILED(hr)) + return hr; + + hr = FC->CopyPixels(nullptr, static_cast(img->rowPitch), static_cast(img->slicePitch), img->pixels); + if (FAILED(hr)) + return hr; + } + } + } + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Encodes image metadata + //------------------------------------------------------------------------------------- + HRESULT EncodeMetadata( + WIC_FLAGS flags, + _In_ IWICBitmapFrameEncode* frame, + const GUID& containerFormat, + DXGI_FORMAT format) + { + if (!frame) + return E_POINTER; + + ComPtr metawriter; + HRESULT hr = frame->GetMetadataQueryWriter(metawriter.GetAddressOf()); + if (SUCCEEDED(hr)) + { + PROPVARIANT value; + PropVariantInit(&value); + + const bool sRGB = ((flags & WIC_FLAGS_FORCE_LINEAR) == 0) && ((flags & WIC_FLAGS_FORCE_SRGB) != 0 || IsSRGB(format)); + + value.vt = VT_LPSTR; + value.pszVal = const_cast("DirectXTex"); + + if (memcmp(&containerFormat, &GUID_ContainerFormatPng, sizeof(GUID)) == 0) + { + // Set Software name + std::ignore = metawriter->SetMetadataByName(L"/tEXt/{str=Software}", &value); + + // Set sRGB chunk + if (sRGB) + { + value.vt = VT_UI1; + value.bVal = 0; + std::ignore = metawriter->SetMetadataByName(L"/sRGB/RenderingIntent", &value); + } + else + { + // add gAMA chunk with gamma 1.0 + value.vt = VT_UI4; + value.uintVal = 100000; // gama value * 100,000 -- i.e. gamma 1.0 + std::ignore = metawriter->SetMetadataByName(L"/gAMA/ImageGamma", &value); + + // remove sRGB chunk which is added by default. + std::ignore = metawriter->RemoveMetadataByName(L"/sRGB/RenderingIntent"); + } + } + #if (defined(_XBOX_ONE) && defined(_TITLE)) || defined(_GAMING_XBOX) + else if (memcmp(&containerFormat, &GUID_ContainerFormatJpeg, sizeof(GUID)) == 0) + { + // Set Software name + std::ignore = metawriter->SetMetadataByName(L"/app1/ifd/{ushort=305}", &value); + + if (sRGB) + { + // Set EXIF Colorspace of sRGB + value.vt = VT_UI2; + value.uiVal = 1; + std::ignore = metawriter->SetMetadataByName(L"/app1/ifd/exif/{ushort=40961}", &value); + } + } + else if (memcmp(&containerFormat, &GUID_ContainerFormatTiff, sizeof(GUID)) == 0) + { + // Set Software name + std::ignore = metawriter->SetMetadataByName(L"/ifd/{ushort=305}", &value); + + if (sRGB) + { + // Set EXIF Colorspace of sRGB + value.vt = VT_UI2; + value.uiVal = 1; + std::ignore = metawriter->SetMetadataByName(L"/ifd/exif/{ushort=40961}", &value); + } + } + #else + else + { + // Set Software name + std::ignore = metawriter->SetMetadataByName(L"System.ApplicationName", &value); + + if (sRGB) + { + // Set EXIF Colorspace of sRGB + value.vt = VT_UI2; + value.uiVal = 1; + std::ignore = metawriter->SetMetadataByName(L"System.Image.ColorSpace", &value); + } + } + #endif + } + else if (hr == WINCODEC_ERR_UNSUPPORTEDOPERATION) + { + // Some formats just don't support metadata (BMP, ICO, etc.), so ignore this failure + hr = S_OK; + } + + return hr; + } + + + //------------------------------------------------------------------------------------- + // Encodes a single frame + //------------------------------------------------------------------------------------- + HRESULT EncodeImage( + const Image& image, + WIC_FLAGS flags, + _In_ REFGUID containerFormat, + _In_ IWICBitmapFrameEncode* frame, + _In_opt_ IPropertyBag2* props, + _In_opt_ const GUID* targetFormat) + { + if (!frame) + return E_INVALIDARG; + + if (!image.pixels) + return E_POINTER; + + WICPixelFormatGUID pfGuid; + if (!DXGIToWIC(image.format, pfGuid)) + return HRESULT_E_NOT_SUPPORTED; + + HRESULT hr = frame->Initialize(props); + if (FAILED(hr)) + return hr; + + if ((image.width > UINT32_MAX) || (image.height > UINT32_MAX)) + return E_INVALIDARG; + + if (image.rowPitch > UINT32_MAX || image.slicePitch > UINT32_MAX) + return HRESULT_E_ARITHMETIC_OVERFLOW; + + hr = frame->SetSize(static_cast(image.width), static_cast(image.height)); + if (FAILED(hr)) + return hr; + + hr = frame->SetResolution(72, 72); + if (FAILED(hr)) + return hr; + + WICPixelFormatGUID targetGuid = (targetFormat) ? (*targetFormat) : pfGuid; + hr = frame->SetPixelFormat(&targetGuid); + if (FAILED(hr)) + return hr; + + if (targetFormat && memcmp(targetFormat, &targetGuid, sizeof(WICPixelFormatGUID)) != 0) + { + // Requested output pixel format is not supported by the WIC codec + return E_FAIL; + } + + hr = EncodeMetadata(flags, frame, containerFormat, image.format); + if (FAILED(hr)) + return hr; + + if (memcmp(&targetGuid, &pfGuid, sizeof(WICPixelFormatGUID)) != 0) + { + // Conversion required to write + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + ComPtr source; + hr = pWIC->CreateBitmapFromMemory(static_cast(image.width), static_cast(image.height), pfGuid, + static_cast(image.rowPitch), static_cast(image.slicePitch), + image.pixels, source.GetAddressOf()); + if (FAILED(hr)) + return hr; + + ComPtr FC; + hr = pWIC->CreateFormatConverter(FC.GetAddressOf()); + if (FAILED(hr)) + return hr; + + BOOL canConvert = FALSE; + hr = FC->CanConvert(pfGuid, targetGuid, &canConvert); + if (FAILED(hr) || !canConvert) + { + return E_UNEXPECTED; + } + + hr = FC->Initialize(source.Get(), targetGuid, GetWICDither(flags), nullptr, + 0, WICBitmapPaletteTypeMedianCut); + if (FAILED(hr)) + return hr; + + WICRect rect = { 0, 0, static_cast(image.width), static_cast(image.height) }; + hr = frame->WriteSource(FC.Get(), &rect); + if (FAILED(hr)) + return hr; + } + else + { + // No conversion required + hr = frame->WritePixels(static_cast(image.height), static_cast(image.rowPitch), static_cast(image.slicePitch), + reinterpret_cast(image.pixels)); + if (FAILED(hr)) + return hr; + } + + hr = frame->Commit(); + if (FAILED(hr)) + return hr; + + return S_OK; + } + + HRESULT EncodeSingleFrame( + const Image& image, + WIC_FLAGS flags, + _In_ REFGUID containerFormat, + _Inout_ IStream* stream, + _In_opt_ const GUID* targetFormat, + _In_ std::function setCustomProps) + { + if (!stream) + return E_INVALIDARG; + + // Initialize WIC + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + ComPtr encoder; + HRESULT hr = pWIC->CreateEncoder(containerFormat, nullptr, encoder.GetAddressOf()); + if (FAILED(hr)) + return hr; + + hr = encoder->Initialize(stream, WICBitmapEncoderNoCache); + if (FAILED(hr)) + return hr; + + ComPtr frame; + ComPtr props; + hr = encoder->CreateNewFrame(frame.GetAddressOf(), props.GetAddressOf()); + if (FAILED(hr)) + return hr; + + if (memcmp(&containerFormat, &GUID_ContainerFormatBmp, sizeof(WICPixelFormatGUID)) == 0 && iswic2) + { + // Opt-in to the WIC2 support for writing 32-bit Windows BMP files with an alpha channel + PROPBAG2 option = {}; + option.pstrName = const_cast(L"EnableV5Header32bppBGRA"); + + VARIANT varValue; + varValue.vt = VT_BOOL; + varValue.boolVal = VARIANT_TRUE; + std::ignore = props->Write(1, &option, &varValue); + } + + if (setCustomProps) + { + setCustomProps(props.Get()); + } + + hr = EncodeImage(image, flags, containerFormat, frame.Get(), props.Get(), targetFormat); + if (FAILED(hr)) + return hr; + + hr = encoder->Commit(); + if (FAILED(hr)) + return hr; + + return S_OK; + } + + + //------------------------------------------------------------------------------------- + // Encodes an image array + //------------------------------------------------------------------------------------- + HRESULT EncodeMultiframe( + _In_reads_(nimages) const Image* images, + size_t nimages, + WIC_FLAGS flags, + _In_ REFGUID containerFormat, + _Inout_ IStream* stream, + _In_opt_ const GUID* targetFormat, + _In_ std::function setCustomProps) + { + if (!stream || nimages < 2) + return E_INVALIDARG; + + if (!images) + return E_POINTER; + + // Initialize WIC + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + ComPtr encoder; + HRESULT hr = pWIC->CreateEncoder(containerFormat, nullptr, encoder.GetAddressOf()); + if (FAILED(hr)) + return hr; + + ComPtr einfo; + hr = encoder->GetEncoderInfo(einfo.GetAddressOf()); + if (FAILED(hr)) + return hr; + + BOOL mframe = FALSE; + hr = einfo->DoesSupportMultiframe(&mframe); + if (FAILED(hr)) + return hr; + + if (!mframe) + return HRESULT_E_NOT_SUPPORTED; + + hr = encoder->Initialize(stream, WICBitmapEncoderNoCache); + if (FAILED(hr)) + return hr; + + for (size_t index = 0; index < nimages; ++index) + { + ComPtr frame; + ComPtr props; + hr = encoder->CreateNewFrame(frame.GetAddressOf(), props.GetAddressOf()); + if (FAILED(hr)) + return hr; + + if (setCustomProps) + { + setCustomProps(props.Get()); + } + + hr = EncodeImage(images[index], flags, containerFormat, frame.Get(), props.Get(), targetFormat); + if (FAILED(hr)) + return hr; + } + + hr = encoder->Commit(); + if (FAILED(hr)) + return hr; + + return S_OK; + } +} + + +//===================================================================================== +// Entry-points +//===================================================================================== + +//------------------------------------------------------------------------------------- +// Obtain metadata from WIC-supported file in memory +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromWICMemory( + const uint8_t* pSource, + size_t size, + WIC_FLAGS flags, + TexMetadata& metadata, + std::function getMQR) +{ + if (!pSource || size == 0) + return E_INVALIDARG; + + if (size > UINT32_MAX) + return HRESULT_E_FILE_TOO_LARGE; + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + // Create input stream for memory + ComPtr stream; + HRESULT hr = pWIC->CreateStream(stream.GetAddressOf()); + if (FAILED(hr)) + return hr; + + hr = stream->InitializeFromMemory(static_cast(const_cast(pSource)), + static_cast(size)); + if (FAILED(hr)) + return hr; + + // Initialize WIC + ComPtr decoder; + hr = pWIC->CreateDecoderFromStream(stream.Get(), nullptr, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf()); + if (FAILED(hr)) + return hr; + + ComPtr frame; + hr = decoder->GetFrame(0, frame.GetAddressOf()); + if (FAILED(hr)) + return hr; + + // Get metadata + hr = DecodeMetadata(flags, iswic2, decoder.Get(), frame.Get(), metadata, nullptr, getMQR); + if (FAILED(hr)) + return hr; + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Obtain metadata from WIC-supported file on disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::GetMetadataFromWICFile( + const wchar_t* szFile, + WIC_FLAGS flags, + TexMetadata& metadata, + std::function getMQR) +{ + if (!szFile) + return E_INVALIDARG; + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + // Initialize WIC + ComPtr decoder; + HRESULT hr = pWIC->CreateDecoderFromFilename(szFile, nullptr, GENERIC_READ, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf()); + if (FAILED(hr)) + return hr; + + ComPtr frame; + hr = decoder->GetFrame(0, frame.GetAddressOf()); + if (FAILED(hr)) + return hr; + + // Get metadata + hr = DecodeMetadata(flags, iswic2, decoder.Get(), frame.Get(), metadata, nullptr, getMQR); + if (FAILED(hr)) + return hr; + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Load a WIC-supported file in memory +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::LoadFromWICMemory( + const uint8_t* pSource, + size_t size, + WIC_FLAGS flags, + TexMetadata* metadata, + ScratchImage& image, + std::function getMQR) +{ + if (!pSource || size == 0) + return E_INVALIDARG; + + if (size > UINT32_MAX) + return HRESULT_E_FILE_TOO_LARGE; + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + image.Release(); + + // Create input stream for memory + ComPtr stream; + HRESULT hr = pWIC->CreateStream(stream.GetAddressOf()); + if (FAILED(hr)) + return hr; + + hr = stream->InitializeFromMemory(static_cast(const_cast(pSource)), static_cast(size)); + if (FAILED(hr)) + return hr; + + // Initialize WIC + ComPtr decoder; + hr = pWIC->CreateDecoderFromStream(stream.Get(), nullptr, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf()); + if (FAILED(hr)) + return hr; + + ComPtr frame; + hr = decoder->GetFrame(0, frame.GetAddressOf()); + if (FAILED(hr)) + return hr; + + // Get metadata + TexMetadata mdata = {}; + WICPixelFormatGUID convertGUID = {}; + hr = DecodeMetadata(flags, iswic2, decoder.Get(), frame.Get(), mdata, &convertGUID, getMQR); + if (FAILED(hr)) + return hr; + + if ((mdata.arraySize > 1) && (flags & WIC_FLAGS_ALL_FRAMES)) + { + hr = DecodeMultiframe(flags, mdata, decoder.Get(), image); + } + else + { + hr = DecodeSingleFrame(flags, mdata, convertGUID, frame.Get(), image); + } + + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + if (metadata) + memcpy(metadata, &mdata, sizeof(TexMetadata)); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Load a WIC-supported file from disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::LoadFromWICFile( + const wchar_t* szFile, + WIC_FLAGS flags, + TexMetadata* metadata, + ScratchImage& image, + std::function getMQR) +{ + if (!szFile) + return E_INVALIDARG; + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + image.Release(); + + // Initialize WIC + ComPtr decoder; + HRESULT hr = pWIC->CreateDecoderFromFilename(szFile, nullptr, GENERIC_READ, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf()); + if (FAILED(hr)) + return hr; + + ComPtr frame; + hr = decoder->GetFrame(0, frame.GetAddressOf()); + if (FAILED(hr)) + return hr; + + // Get metadata + TexMetadata mdata = {}; + WICPixelFormatGUID convertGUID = {}; + hr = DecodeMetadata(flags, iswic2, decoder.Get(), frame.Get(), mdata, &convertGUID, getMQR); + if (FAILED(hr)) + return hr; + + if ((mdata.arraySize > 1) && (flags & WIC_FLAGS_ALL_FRAMES)) + { + hr = DecodeMultiframe(flags, mdata, decoder.Get(), image); + } + else + { + hr = DecodeSingleFrame(flags, mdata, convertGUID, frame.Get(), image); + } + + if (FAILED(hr)) + { + image.Release(); + return hr; + } + + if (metadata) + memcpy(metadata, &mdata, sizeof(TexMetadata)); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Save a WIC-supported file to memory +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::SaveToWICMemory( + const Image& image, + WIC_FLAGS flags, + REFGUID containerFormat, + Blob& blob, + const GUID* targetFormat, + std::function setCustomProps) +{ + if (!image.pixels) + return E_POINTER; + + HRESULT hr = blob.Initialize(65535u); + if (FAILED(hr)) + return hr; + + ComPtr stream; + hr = MemoryStreamOnBlob::CreateMemoryStream(&stream, blob); + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + hr = EncodeSingleFrame(image, flags, containerFormat, stream.Get(), targetFormat, setCustomProps); + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + hr = stream->Finialize(); + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + stream.Reset(); + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::SaveToWICMemory( + const Image* images, + size_t nimages, + WIC_FLAGS flags, + REFGUID containerFormat, + Blob& blob, + const GUID* targetFormat, + std::function setCustomProps) +{ + if (!images || nimages == 0) + return E_INVALIDARG; + + HRESULT hr = blob.Initialize(65535u); + if (FAILED(hr)) + return hr; + + ComPtr stream; + hr = MemoryStreamOnBlob::CreateMemoryStream(&stream, blob); + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + if (nimages > 1) + hr = EncodeMultiframe(images, nimages, flags, containerFormat, stream.Get(), targetFormat, setCustomProps); + else + hr = EncodeSingleFrame(images[0], flags, containerFormat, stream.Get(), targetFormat, setCustomProps); + + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + hr = stream->Finialize(); + if (FAILED(hr)) + { + blob.Release(); + return hr; + } + + stream.Reset(); + + return S_OK; +} + + +//------------------------------------------------------------------------------------- +// Save a WIC-supported file to disk +//------------------------------------------------------------------------------------- +_Use_decl_annotations_ +HRESULT DirectX::SaveToWICFile( + const Image& image, + WIC_FLAGS flags, + REFGUID containerFormat, + const wchar_t* szFile, + const GUID* targetFormat, + std::function setCustomProps) +{ + if (!szFile) + return E_INVALIDARG; + + if (!image.pixels) + return E_POINTER; + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + ComPtr stream; + HRESULT hr = pWIC->CreateStream(stream.GetAddressOf()); + if (FAILED(hr)) + return hr; + + hr = stream->InitializeFromFilename(szFile, GENERIC_WRITE); + if (FAILED(hr)) + return hr; + + hr = EncodeSingleFrame(image, flags, containerFormat, stream.Get(), targetFormat, setCustomProps); + if (FAILED(hr)) + { + stream.Reset(); + std::ignore = DeleteFileW(szFile); + return hr; + } + + return S_OK; +} + +_Use_decl_annotations_ +HRESULT DirectX::SaveToWICFile( + const Image* images, + size_t nimages, + WIC_FLAGS flags, + REFGUID containerFormat, + const wchar_t* szFile, + const GUID* targetFormat, + std::function setCustomProps) +{ + if (!szFile || !images || nimages == 0) + return E_INVALIDARG; + + bool iswic2 = false; + auto pWIC = GetWICFactory(iswic2); + if (!pWIC) + return E_NOINTERFACE; + + ComPtr stream; + HRESULT hr = pWIC->CreateStream(stream.GetAddressOf()); + if (FAILED(hr)) + return hr; + + hr = stream->InitializeFromFilename(szFile, GENERIC_WRITE); + if (FAILED(hr)) + return hr; + + if (nimages > 1) + hr = EncodeMultiframe(images, nimages, flags, containerFormat, stream.Get(), targetFormat, setCustomProps); + else + hr = EncodeSingleFrame(images[0], flags, containerFormat, stream.Get(), targetFormat, setCustomProps); + + if (FAILED(hr)) + { + stream.Reset(); + std::ignore = DeleteFileW(szFile); + return hr; + } + + return S_OK; +} + + +//-------------------------------------------------------------------------------------- +// Adapters for /Zc:wchar_t- clients + +#if defined(_MSC_VER) && !defined(_NATIVE_WCHAR_T_DEFINED) + +namespace DirectX +{ + HRESULT __cdecl GetMetadataFromWICFile( + _In_z_ const __wchar_t* szFile, + _In_ WIC_FLAGS flags, + _Out_ TexMetadata& metadata, + _In_ std::function getMQR) + { + return GetMetadataFromWICFile(reinterpret_cast(szFile), flags, metadata, getMQR); + } + + HRESULT __cdecl LoadFromWICFile( + _In_z_ const __wchar_t* szFile, + _In_ WIC_FLAGS flags, + _Out_opt_ TexMetadata* metadata, + _Out_ ScratchImage& image, + _In_ std::function getMQR) + { + return LoadFromWICFile(reinterpret_cast(szFile), flags, metadata, image, getMQR); + } + + HRESULT __cdecl SaveToWICFile( + _In_ const Image& image, + _In_ WIC_FLAGS flags, + _In_ REFGUID guidContainerFormat, + _In_z_ const __wchar_t* szFile, + _In_opt_ const GUID* targetFormat, + _In_ std::function setCustomProps) + { + return SaveToWICFile(image, flags, guidContainerFormat, reinterpret_cast(szFile), targetFormat, setCustomProps); + } + + HRESULT __cdecl SaveToWICFile( + _In_count_(nimages) const Image* images, + _In_ size_t nimages, + _In_ WIC_FLAGS flags, + _In_ REFGUID guidContainerFormat, + _In_z_ const __wchar_t* szFile, + _In_opt_ const GUID* targetFormat, + _In_ std::function setCustomProps) + { + return SaveToWICFile(images, nimages, flags, guidContainerFormat, reinterpret_cast(szFile), targetFormat, setCustomProps); + } +} + +#endif // !_NATIVE_WCHAR_T_DEFINED diff --git a/external/DirectXTex/DirectXTex_Desktop_2019.vcxproj b/external/DirectXTex/DirectXTex_Desktop_2019.vcxproj new file mode 100644 index 00000000..9d7a6f66 --- /dev/null +++ b/external/DirectXTex/DirectXTex_Desktop_2019.vcxproj @@ -0,0 +1,367 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Profile + Win32 + + + Profile + x64 + + + Release + Win32 + + + Release + x64 + + + + DirectXTex + {371B9FA9-4C90-4AC6-A123-ACED756D6C77} + DirectXTex + Win32Proj + 10.0 + x64 + + + + StaticLibrary + true + Unicode + v142 + + + StaticLibrary + true + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + + + + + + + + + + + + + + + + + + + + + + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + Bin\Desktop_2019\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019\$(Platform)\$(Configuration)Spectre\ + Bin\Desktop_2019\$(Platform)\$(Configuration)Spectre\ + DirectXTex_Spectre + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + Document + + + Document + + + + + + + + + + <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0]) + <_ATGFXCPath>$(_ATGFXCPath.Replace("x64","")) + <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\ + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`)) + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\ + + + + <_ATGFXCPath /> + <_ATGFXCVer /> + + + + + <_ATGShaderHeaders Include="$(ProjectDir)Shaders/Compiled/*.inc" /> + <_ATGShaderSymbols Include="$(ProjectDir)Shaders/Compiled/*.pdb" /> + + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Desktop_2019.vcxproj.filters b/external/DirectXTex/DirectXTex_Desktop_2019.vcxproj.filters new file mode 100644 index 00000000..455eddaf --- /dev/null +++ b/external/DirectXTex/DirectXTex_Desktop_2019.vcxproj.filters @@ -0,0 +1,115 @@ + + + + + {68652706-b700-4472-9af7-a56a482bd896} + + + {9b7fcbc5-2533-4b88-b75b-d4803e55fa7c} + + + {eb989628-e889-44bf-837a-05c9f09b258e} + + + + + Header Files + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + Source Files\Shaders + + + Source Files\Shaders + + + Source Files\Shaders + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj b/external/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj new file mode 100644 index 00000000..4cdc5fb8 --- /dev/null +++ b/external/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj @@ -0,0 +1,508 @@ + + + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Profile + ARM64 + + + Profile + Win32 + + + Profile + x64 + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + DirectXTex + {371B9FA9-4C90-4AC6-A123-ACED756D6C77} + DirectXTex + Win32Proj + 10.0 + x64 + + + + StaticLibrary + true + Unicode + v142 + + + StaticLibrary + true + Unicode + v142 + + + StaticLibrary + true + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)Spectre\ + Bin\Desktop_2019_Win10\$(Platform)\$(Configuration)Spectre\ + DirectXTex_Spectre + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + Document + + + Document + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + Create + Create + Create + + + + + + + + + + + <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0]) + <_ATGFXCPath>$(_ATGFXCPath.Replace("x64","")) + <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\ + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`)) + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\ + + + + <_ATGFXCPath /> + <_ATGFXCVer /> + + + + + <_ATGShaderHeaders Include="$(ProjectDir)Shaders/Compiled/*.inc" /> + <_ATGShaderSymbols Include="$(ProjectDir)Shaders/Compiled/*.pdb" /> + + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj.filters b/external/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj.filters new file mode 100644 index 00000000..18d2b226 --- /dev/null +++ b/external/DirectXTex/DirectXTex_Desktop_2019_Win10.vcxproj.filters @@ -0,0 +1,121 @@ + + + + + {68652706-b700-4472-9af7-a56a482bd896} + + + {9b7fcbc5-2533-4b88-b75b-d4803e55fa7c} + + + {d665bb3f-6d2a-415d-83f5-abd5c813962b} + + + + + Header Files + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + Source Files\Shaders + + + Source Files\Shaders + + + Source Files\Shaders + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Desktop_2022.vcxproj b/external/DirectXTex/DirectXTex_Desktop_2022.vcxproj new file mode 100644 index 00000000..d79c3dc3 --- /dev/null +++ b/external/DirectXTex/DirectXTex_Desktop_2022.vcxproj @@ -0,0 +1,367 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Profile + Win32 + + + Profile + x64 + + + Release + Win32 + + + Release + x64 + + + + DirectXTex + {371B9FA9-4C90-4AC6-A123-ACED756D6C77} + DirectXTex + Win32Proj + 10.0 + x64 + + + + StaticLibrary + true + Unicode + v143 + + + StaticLibrary + true + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + + + + + + + + + + + + + + + + + + + + + + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + Bin\Desktop_2022\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022\$(Platform)\$(Configuration)Spectre\ + Bin\Desktop_2022\$(Platform)\$(Configuration)Spectre\ + DirectXTex_Spectre + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN7_PLATFORM_UPDATE;_WIN32_WINNT=0x0601;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + Document + + + Document + + + + + + + + + + <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0]) + <_ATGFXCPath>$(_ATGFXCPath.Replace("x64","")) + <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\ + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`)) + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\ + + + + <_ATGFXCPath /> + <_ATGFXCVer /> + + + + + <_ATGShaderHeaders Include="$(ProjectDir)Shaders/Compiled/*.inc" /> + <_ATGShaderSymbols Include="$(ProjectDir)Shaders/Compiled/*.pdb" /> + + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Desktop_2022.vcxproj.filters b/external/DirectXTex/DirectXTex_Desktop_2022.vcxproj.filters new file mode 100644 index 00000000..455eddaf --- /dev/null +++ b/external/DirectXTex/DirectXTex_Desktop_2022.vcxproj.filters @@ -0,0 +1,115 @@ + + + + + {68652706-b700-4472-9af7-a56a482bd896} + + + {9b7fcbc5-2533-4b88-b75b-d4803e55fa7c} + + + {eb989628-e889-44bf-837a-05c9f09b258e} + + + + + Header Files + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + Source Files\Shaders + + + Source Files\Shaders + + + Source Files\Shaders + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj b/external/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj new file mode 100644 index 00000000..529ca5ed --- /dev/null +++ b/external/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj @@ -0,0 +1,511 @@ + + + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Profile + ARM64 + + + Profile + Win32 + + + Profile + x64 + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + DirectXTex + {371B9FA9-4C90-4AC6-A123-ACED756D6C77} + DirectXTex + Win32Proj + 10.0 + x64 + + + + StaticLibrary + true + Unicode + v143 + + + StaticLibrary + true + Unicode + v143 + + + StaticLibrary + true + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + $(SolutionDir)\external\AgilitySDK\include\;$(SolutionDir)\external\AgilitySDK\include\d3dx12\;$(IncludePath) + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + $(SolutionDir)\external\AgilitySDK\include\;$(SolutionDir)\external\AgilitySDK\include\d3dx12\;$(IncludePath) + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + $(SolutionDir)\external\AgilitySDK\include\;$(SolutionDir)\external\AgilitySDK\include\d3dx12\;$(IncludePath) + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)\ + DirectXTex + true + + + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)Spectre\ + Bin\Desktop_2022_Win10\$(Platform)\$(Configuration)Spectre\ + DirectXTex_Spectre + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + true + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + StreamingSIMDExtensions2 + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + true + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _UNICODE;UNICODE;WIN32;NDEBUG;PROFILE;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + Level4 + true + + + true + Windows + true + true + + + false + + + + + Document + + + Document + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + Create + Create + Create + + + + + + + + + + + <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0]) + <_ATGFXCPath>$(_ATGFXCPath.Replace("x64","")) + <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\ + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`)) + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\ + + + + <_ATGFXCPath /> + <_ATGFXCVer /> + + + + + <_ATGShaderHeaders Include="$(ProjectDir)Shaders/Compiled/*.inc" /> + <_ATGShaderSymbols Include="$(ProjectDir)Shaders/Compiled/*.pdb" /> + + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.filters b/external/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.filters new file mode 100644 index 00000000..18d2b226 --- /dev/null +++ b/external/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.filters @@ -0,0 +1,121 @@ + + + + + {68652706-b700-4472-9af7-a56a482bd896} + + + {9b7fcbc5-2533-4b88-b75b-d4803e55fa7c} + + + {d665bb3f-6d2a-415d-83f5-abd5c813962b} + + + + + Header Files + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + Source Files\Shaders + + + Source Files\Shaders + + + Source Files\Shaders + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.user b/external/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.user new file mode 100644 index 00000000..88a55094 --- /dev/null +++ b/external/DirectXTex/DirectXTex_Desktop_2022_Win10.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_GDK_2019.vcxproj b/external/DirectXTex/DirectXTex_GDK_2019.vcxproj new file mode 100644 index 00000000..814ed5a2 --- /dev/null +++ b/external/DirectXTex/DirectXTex_GDK_2019.vcxproj @@ -0,0 +1,577 @@ + + + + + Debug + Gaming.Desktop.x64 + + + Debug + Gaming.Xbox.Scarlett.x64 + + + Profile + Gaming.Desktop.x64 + + + Profile + Gaming.Xbox.Scarlett.x64 + + + Release + Gaming.Desktop.x64 + + + Release + Gaming.Xbox.Scarlett.x64 + + + Release + Gaming.Xbox.XboxOne.x64 + + + Profile + Gaming.Xbox.XboxOne.x64 + + + Debug + Gaming.Xbox.XboxOne.x64 + + + + DirectXTex + {e66dd892-857b-4e89-b135-5e2a971a9933} + en-US + Win32Proj + + 15.0 + Native + x64 + + + + + StaticLibrary + v142 + false + Unicode + false + false + + + StaticLibrary + v142 + false + Unicode + + + StaticLibrary + v142 + false + Unicode + + + StaticLibrary + v142 + false + Unicode + false + false + + + StaticLibrary + v142 + false + Unicode + + + StaticLibrary + v142 + false + Unicode + + + StaticLibrary + v142 + true + Unicode + false + false + + + StaticLibrary + v142 + true + Unicode + + + StaticLibrary + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkLibPath) + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkIncludeRoot) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2019\$(Platform)\$(Configuration)\ + Bin\GDK_2019\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2019\$(Platform)\$(Configuration)\ + Bin\GDK_2019\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2019\$(Platform)\$(Configuration)\ + Bin\GDK_2019\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkLibPath) + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkIncludeRoot) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2019\$(Platform)\$(Configuration)\ + Bin\GDK_2019\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2019\$(Platform)\$(Configuration)\ + Bin\GDK_2019\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2019\$(Platform)\$(Configuration)\ + Bin\GDK_2019\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkLibPath) + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkIncludeRoot) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2019\$(Platform)\$(Configuration)\ + Bin\GDK_2019\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2019\$(Platform)\$(Configuration)\ + Bin\GDK_2019\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2019\$(Platform)\$(Configuration)\ + Bin\GDK_2019\$(Platform)\$(Configuration)\ + DirectXTex + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;_LIB;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + true + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;_LIB;PROFILE;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;PROFILE;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + true + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;PROFILE;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + Windows + true + + + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + Use + false + EnableAllWarnings + Disabled + _DEBUG;_LIB;%(PreprocessorDefinitions) + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + Windows + true + + + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + Use + false + EnableAllWarnings + Disabled + _DEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions) + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + Windows + true + + + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + Use + false + EnableAllWarnings + Disabled + _DEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions) + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + 6.0 + + + + + + + + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + Create + Create + Create + + + + true + true + true + + + true + true + true + + + true + true + true + + + true + true + true + + + true + true + true + + + + + Document + + + Document + + + + + + + This project requires the Microsoft GDK to be installed. If you have already installed the GDK, then run Repair to ensure proper integration with Visual Studio. The missing platform is {0}. + This project requires the Microsoft GDK with Xbox Extensions to be installed. If you have already installed the GDK, then run Repair to ensure proper integration with Visual Studio. The missing platform is {0}. + + + + + + <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0]) + <_ATGFXCPath>$(_ATGFXCPath.Replace("x64","")) + <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\ + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`)) + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\ + + + + <_ATGFXCPath /> + <_ATGFXCVer /> + + + + + <_ATGShaderHeaders Include="$(ProjectDir)Shaders/Compiled/*.inc" /> + <_ATGShaderSymbols Include="$(ProjectDir)Shaders/Compiled/*.pdb" /> + + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_GDK_2019.vcxproj.filters b/external/DirectXTex/DirectXTex_GDK_2019.vcxproj.filters new file mode 100644 index 00000000..dea8b959 --- /dev/null +++ b/external/DirectXTex/DirectXTex_GDK_2019.vcxproj.filters @@ -0,0 +1,131 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {c60baf7a-25a9-4215-842d-8d49d65d538e} + + + {34568028-594c-4052-9a41-0973bbe526e1} + + + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Auxiliary + + + Source Files + + + + + Header Files + + + Source Files\Shaders + + + Source Files\Shaders + + + Source Files\Shaders + + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_GDK_2022.vcxproj b/external/DirectXTex/DirectXTex_GDK_2022.vcxproj new file mode 100644 index 00000000..f9c878df --- /dev/null +++ b/external/DirectXTex/DirectXTex_GDK_2022.vcxproj @@ -0,0 +1,577 @@ + + + + + Debug + Gaming.Desktop.x64 + + + Debug + Gaming.Xbox.Scarlett.x64 + + + Profile + Gaming.Desktop.x64 + + + Profile + Gaming.Xbox.Scarlett.x64 + + + Release + Gaming.Desktop.x64 + + + Release + Gaming.Xbox.Scarlett.x64 + + + Release + Gaming.Xbox.XboxOne.x64 + + + Profile + Gaming.Xbox.XboxOne.x64 + + + Debug + Gaming.Xbox.XboxOne.x64 + + + + DirectXTex + {e66dd892-857b-4e89-b135-5e2a971a9933} + en-US + Win32Proj + + 15.0 + Native + x64 + + + + + StaticLibrary + v143 + false + Unicode + false + false + + + StaticLibrary + v143 + false + Unicode + + + StaticLibrary + v143 + false + Unicode + + + StaticLibrary + v143 + false + Unicode + false + false + + + StaticLibrary + v143 + false + Unicode + + + StaticLibrary + v143 + false + Unicode + + + StaticLibrary + v143 + true + Unicode + false + false + + + StaticLibrary + v143 + true + Unicode + + + StaticLibrary + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkLibPath) + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkIncludeRoot) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2022\$(Platform)\$(Configuration)\ + Bin\GDK_2022\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2022\$(Platform)\$(Configuration)\ + Bin\GDK_2022\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2022\$(Platform)\$(Configuration)\ + Bin\GDK_2022\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkLibPath) + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkIncludeRoot) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2022\$(Platform)\$(Configuration)\ + Bin\GDK_2022\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2022\$(Platform)\$(Configuration)\ + Bin\GDK_2022\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2022\$(Platform)\$(Configuration)\ + Bin\GDK_2022\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkLibPath) + $(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath) + $(Console_SdkIncludeRoot) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2022\$(Platform)\$(Configuration)\ + Bin\GDK_2022\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2022\$(Platform)\$(Configuration)\ + Bin\GDK_2022\$(Platform)\$(Configuration)\ + DirectXTex + + + $(Console_SdkLibPath);$(LibraryPath) + $(Console_SdkIncludeRoot);$(IncludePath) + $(Console_SdkRoot)bin;$(Console_SdkToolPath);$(ExecutablePath) + false + Bin\GDK_2022\$(Platform)\$(Configuration)\ + Bin\GDK_2022\$(Platform)\$(Configuration)\ + DirectXTex + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;_LIB;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + true + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;_LIB;PROFILE;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;PROFILE;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + true + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + true + Windows + true + true + + + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + MaxSpeed + NDEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;PROFILE;%(PreprocessorDefinitions) + EnableAllWarnings + true + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + Windows + true + + + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + Use + false + EnableAllWarnings + Disabled + _DEBUG;_LIB;%(PreprocessorDefinitions) + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + Windows + true + + + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + Use + false + EnableAllWarnings + Disabled + _DEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions) + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + 6.0 + + + + + $(Console_Libs);%(XboxExtensionsDependencies);%(AdditionalDependencies) + Windows + true + + + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + Use + false + EnableAllWarnings + Disabled + _DEBUG;__WRL_NO_DEFAULT_LIB__;_LIB;%(PreprocessorDefinitions) + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + 6.0 + + + + + + + + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + Create + Create + Create + + + + true + true + true + + + true + true + true + + + true + true + true + + + true + true + true + + + true + true + true + + + + + Document + + + Document + + + + + + + This project requires the Microsoft GDK to be installed. If you have already installed the GDK, then run Repair to ensure proper integration with Visual Studio. The missing platform is {0}. + This project requires the Microsoft GDK with Xbox Extensions to be installed. If you have already installed the GDK, then run Repair to ensure proper integration with Visual Studio. The missing platform is {0}. + + + + + + <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0]) + <_ATGFXCPath>$(_ATGFXCPath.Replace("x64","")) + <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\ + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`)) + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\ + + + + <_ATGFXCPath /> + <_ATGFXCVer /> + + + + + <_ATGShaderHeaders Include="$(ProjectDir)Shaders/Compiled/*.inc" /> + <_ATGShaderSymbols Include="$(ProjectDir)Shaders/Compiled/*.pdb" /> + + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_GDK_2022.vcxproj.filters b/external/DirectXTex/DirectXTex_GDK_2022.vcxproj.filters new file mode 100644 index 00000000..dea8b959 --- /dev/null +++ b/external/DirectXTex/DirectXTex_GDK_2022.vcxproj.filters @@ -0,0 +1,131 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {c60baf7a-25a9-4215-842d-8d49d65d538e} + + + {34568028-594c-4052-9a41-0973bbe526e1} + + + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Auxiliary + + + Source Files + + + + + Header Files + + + Source Files\Shaders + + + Source Files\Shaders + + + Source Files\Shaders + + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj b/external/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj new file mode 100644 index 00000000..20056345 --- /dev/null +++ b/external/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj @@ -0,0 +1,288 @@ + + + + + Debug_Scarlett + x64 + + + Debug + x64 + + + Release_Scarlett + x64 + + + Release + x64 + + + + DirectXTex + {9E4D1C18-9E5E-4B35-83BE-74830B9B3C34} + DirectXTex + Win32Proj + 10.0 + x64 + + + + + StaticLibrary + true + Unicode + v142 + + + StaticLibrary + true + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + StaticLibrary + Unicode + v142 + + + + + + + + + + + + + + + + + + Bin\GXDKPC_2019\$(Platform)\$(Configuration)\ + Bin\GXDKPC_2019\$(Platform)\$(Configuration)\ + DirectXTex + $(GameDKLatest)GXDK\toolKit\include;$(GameDKLatest)GXDK\toolKit\include\XboxOne;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(GameDKLatest)GXDK\toolKit\lib\amd64\XboxOne;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + true + + + Bin\GXDKPC_2019\$(Platform)\$(Configuration)\ + Bin\GXDKPC_2019\$(Platform)\$(Configuration)\ + DirectXTex + $(GameDKLatest)GXDK\toolKit\include;$(GameDKLatest)GXDK\toolKit\include\Scarlett;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(GameDKLatest)GXDK\toolKit\lib\amd64\Scarlett;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + true + + + Bin\GXDKPC_2019\$(Platform)\$(Configuration)\ + Bin\GXDKPC_2019\$(Platform)\$(Configuration)\ + DirectXTex + $(GameDKLatest)GXDK\toolKit\include;$(GameDKLatest)GXDK\toolKit\include\XboxOne;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(GameDKLatest)GXDK\toolKit\lib\amd64\XboxOne;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + true + + + Bin\GXDKPC_2019\$(Platform)\$(Configuration)\ + Bin\GXDKPC_2019\$(Platform)\$(Configuration)\ + DirectXTex + $(GameDKLatest)GXDK\toolKit\include;$(GameDKLatest)GXDK\toolKit\include\Scarlett;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(GameDKLatest)GXDK\toolKit\lib\amd64\Scarlett;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + true + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _USE_GXDK;USE_XBOX_EXTS;_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _USE_GXDK;USE_XBOX_EXTS;_USE_SCARLETT;_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + MaxSpeed + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _USE_GXDK;USE_XBOX_EXTS;_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + Fast + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + _USE_GXDK;USE_XBOX_EXTS;_USE_SCARLETT;_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + true + /Zc:twoPhase- /Zc:__cplusplus /ZH:SHA_256 %(AdditionalOptions) + Level4 + true + + + true + Windows + true + true + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + Document + + + Document + + + + + + + + + + <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0]) + <_ATGFXCPath>$(_ATGFXCPath.Replace("x64","")) + <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\ + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`)) + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\ + + + + <_ATGFXCPath /> + <_ATGFXCVer /> + + + + + <_ATGShaderHeaders Include="$(ProjectDir)Shaders/Compiled/*.inc" /> + <_ATGShaderSymbols Include="$(ProjectDir)Shaders/Compiled/*.pdb" /> + + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj.filters b/external/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj.filters new file mode 100644 index 00000000..e076b712 --- /dev/null +++ b/external/DirectXTex/DirectXTex_GXDK_PC_2019.vcxproj.filters @@ -0,0 +1,134 @@ + + + + + {68652706-b700-4472-9af7-a56a482bd896} + + + {9b7fcbc5-2533-4b88-b75b-d4803e55fa7c} + + + {eb989628-e889-44bf-837a-05c9f09b258e} + + + {1cab8337-50f3-4e55-9ccf-c060bac667ee} + + + + + Header Files + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Auxiliary + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + + + Source Files + + + + + Source Files\Shaders + + + Source Files\Shaders + + + Source Files\Shaders + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj b/external/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj new file mode 100644 index 00000000..36d69f0f --- /dev/null +++ b/external/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj @@ -0,0 +1,288 @@ + + + + + Debug_Scarlett + x64 + + + Debug + x64 + + + Release_Scarlett + x64 + + + Release + x64 + + + + DirectXTex + {9E4D1C18-9E5E-4B35-83BE-74830B9B3C34} + DirectXTex + Win32Proj + 10.0 + x64 + + + + + StaticLibrary + true + Unicode + v143 + + + StaticLibrary + true + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + + + + + + + + + + + + + + + + Bin\GXDKPC_2022\$(Platform)\$(Configuration)\ + Bin\GXDKPC_2022\$(Platform)\$(Configuration)\ + DirectXTex + $(GameDKLatest)GXDK\toolKit\include;$(GameDKLatest)GXDK\toolKit\include\XboxOne;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(GameDKLatest)GXDK\toolKit\lib\amd64\XboxOne;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + true + + + Bin\GXDKPC_2022\$(Platform)\$(Configuration)\ + Bin\GXDKPC_2022\$(Platform)\$(Configuration)\ + DirectXTex + $(GameDKLatest)GXDK\toolKit\include;$(GameDKLatest)GXDK\toolKit\include\Scarlett;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(GameDKLatest)GXDK\toolKit\lib\amd64\Scarlett;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + true + + + Bin\GXDKPC_2022\$(Platform)\$(Configuration)\ + Bin\GXDKPC_2022\$(Platform)\$(Configuration)\ + DirectXTex + $(GameDKLatest)GXDK\toolKit\include;$(GameDKLatest)GXDK\toolKit\include\XboxOne;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(GameDKLatest)GXDK\toolKit\lib\amd64\XboxOne;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + true + + + Bin\GXDKPC_2022\$(Platform)\$(Configuration)\ + Bin\GXDKPC_2022\$(Platform)\$(Configuration)\ + DirectXTex + $(GameDKLatest)GXDK\toolKit\include;$(GameDKLatest)GXDK\toolKit\include\Scarlett;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(GameDKLatest)GXDK\toolKit\lib\amd64\Scarlett;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + true + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _USE_GXDK;USE_XBOX_EXTS;_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + Disabled + MultiThreadedDebugDLL + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _USE_GXDK;USE_XBOX_EXTS;_USE_SCARLETT;_UNICODE;UNICODE;WIN32;_DEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + ProgramDatabase + false + + + Windows + true + + + false + + + + + EnableAllWarnings + MaxSpeed + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _USE_GXDK;USE_XBOX_EXTS;_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + true + + + true + Windows + true + true + + + false + + + + + EnableAllWarnings + MaxSpeed + Fast + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + _USE_GXDK;USE_XBOX_EXTS;_USE_SCARLETT;_UNICODE;UNICODE;WIN32;NDEBUG;_LIB;_WIN32_WINNT=0x0A00;_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + Use + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + $(IntDir)$(TargetName).pdb + true + true + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + Level4 + true + + + true + Windows + true + true + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + Document + + + Document + + + + + + + + + + <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0]) + <_ATGFXCPath>$(_ATGFXCPath.Replace("x64","")) + <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\ + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`)) + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\ + + + + <_ATGFXCPath /> + <_ATGFXCVer /> + + + + + <_ATGShaderHeaders Include="$(ProjectDir)Shaders/Compiled/*.inc" /> + <_ATGShaderSymbols Include="$(ProjectDir)Shaders/Compiled/*.pdb" /> + + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj.filters b/external/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj.filters new file mode 100644 index 00000000..c04634fa --- /dev/null +++ b/external/DirectXTex/DirectXTex_GXDK_PC_2022.vcxproj.filters @@ -0,0 +1,134 @@ + + + + + {68652706-b700-4472-9af7-a56a482bd896} + + + {9b7fcbc5-2533-4b88-b75b-d4803e55fa7c} + + + {eb989628-e889-44bf-837a-05c9f09b258e} + + + {b21bd310-5ba0-485c-82e2-9621564caf70} + + + + + Header Files + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Auxiliary + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + Auxiliary + + + + + Source Files + + + + + Source Files\Shaders + + + Source Files\Shaders + + + Source Files\Shaders + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Windows10_2022.vcxproj b/external/DirectXTex/DirectXTex_Windows10_2022.vcxproj new file mode 100644 index 00000000..e985e55e --- /dev/null +++ b/external/DirectXTex/DirectXTex_Windows10_2022.vcxproj @@ -0,0 +1,362 @@ + + + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + + + + + + + + + + + + + + + Document + + + Document + + + + {fb3f52b5-bfe8-43fd-836f-363735dab738} + StaticLibrary + DirectXTex + DirectXTex + en-US + 14.0 + true + Windows Store + 10.0 + 10.0.18362.0 + 10.0 + x64 + + + + StaticLibrary + true + v143 + + + StaticLibrary + true + v143 + + + StaticLibrary + true + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + DirectXTex + false + + + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + DirectXTex + false + + + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + DirectXTex + false + + + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + DirectXTex + false + + + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + DirectXTex + false + + + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + Bin\Windows10_2022\$(Platform)\$(Configuration)\ + DirectXTex + false + + + + Use + + false + true + Fast + StreamingSIMDExtensions2 + $(IntDir)$(TargetName).pdb + EnableAllWarnings + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + true + ProgramDatabase + false + Level4 + + + Console + false + false + + + + + Use + + false + true + Fast + StreamingSIMDExtensions2 + $(IntDir)$(TargetName).pdb + EnableAllWarnings + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + true + Level4 + + + Console + false + false + + + + + Use + + + false + true + Fast + $(IntDir)$(TargetName).pdb + EnableAllWarnings + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + true + ProgramDatabase + false + Level4 + + + Console + false + false + + + + + Use + + + false + true + Fast + $(IntDir)$(TargetName).pdb + EnableAllWarnings + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + true + Level4 + true + + + Console + false + false + + + + + Use + + false + true + Fast + $(IntDir)$(TargetName).pdb + EnableAllWarnings + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + true + ProgramDatabase + false + Level4 + + + Console + false + false + + + + + Use + + false + true + Fast + $(IntDir)$(TargetName).pdb + EnableAllWarnings + DirectXTexP.h + $(ProjectDir);..\Common;$(ProjectDir)Shaders\Compiled;%(AdditionalIncludeDirectories) + _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS;%(PreprocessorDefinitions) + true + /Zc:twoPhase- /Zc:__cplusplus %(AdditionalOptions) + true + Level4 + true + + + Console + false + false + + + + + + + + <_ATGFXCPath>$(WindowsSDK_ExecutablePath_x64.Split(';')[0]) + <_ATGFXCPath>$(_ATGFXCPath.Replace("x64","")) + <_ATGFXCPath Condition="'$(_ATGFXCPath)' != '' and !HasTrailingSlash('$(_ATGFXCPath)')">$(_ATGFXCPath)\ + <_ATGFXCVer>$([System.Text.RegularExpressions.Regex]::Match($(_ATGFXCPath), `10\.0\.\d+\.0`)) + <_ATGFXCVer Condition="'$(_ATGFXCVer)' != '' and !HasTrailingSlash('$(_ATGFXCVer)')">$(_ATGFXCVer)\ + + + + <_ATGFXCPath /> + <_ATGFXCVer /> + + + + + <_ATGShaderHeaders Include="$(ProjectDir)Shaders/Compiled/*.inc" /> + <_ATGShaderSymbols Include="$(ProjectDir)Shaders/Compiled/*.pdb" /> + + + + + \ No newline at end of file diff --git a/external/DirectXTex/DirectXTex_Windows10_2022.vcxproj.filters b/external/DirectXTex/DirectXTex_Windows10_2022.vcxproj.filters new file mode 100644 index 00000000..d52dd196 --- /dev/null +++ b/external/DirectXTex/DirectXTex_Windows10_2022.vcxproj.filters @@ -0,0 +1,136 @@ + + + + + {f4d68f4f-adbe-40a1-b052-f2e4cae3b5ae} + + + {b42472b0-7a63-47b0-b77f-4ffe492471a0} + + + {1838e3e6-1f80-4713-9a98-41ea7e654d12} + + + + + {f4d68f4f-adbe-40a1-b052-f2e4cae3b5ae} + + + {b42472b0-7a63-47b0-b77f-4ffe492471a0} + + + {1838e3e6-1f80-4713-9a98-41ea7e654d12} + + + {7c13ba68-1ec8-4710-a8dd-cd973621b725} + + + {fbc9373c-d511-4fd1-a7b8-d55df1b27d2e} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Source Files\Shaders + + + Source Files\Shaders + + + Source Files\Shaders + + + \ No newline at end of file diff --git a/external/DirectXTex/Shaders/.gitignore b/external/DirectXTex/Shaders/.gitignore new file mode 100644 index 00000000..d54f0d09 --- /dev/null +++ b/external/DirectXTex/Shaders/.gitignore @@ -0,0 +1 @@ +compiled/ \ No newline at end of file diff --git a/external/DirectXTex/Shaders/BC6HEncode.hlsl b/external/DirectXTex/Shaders/BC6HEncode.hlsl new file mode 100644 index 00000000..ecc919aa --- /dev/null +++ b/external/DirectXTex/Shaders/BC6HEncode.hlsl @@ -0,0 +1,2563 @@ +//-------------------------------------------------------------------------------------- +// File: BC6HEncode.hlsl +// +// The Compute Shader for BC6H Encoder +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +//-------------------------------------------------------------------------------------- + +#define REF_DEVICE + +#define UINTLENGTH 32 +#define NCHANNELS 3 +#define SIGNED_F16 96 +#define UNSIGNED_F16 95 +#define MAX_FLOAT asfloat(0x7F7FFFFF) +#define MIN_FLOAT asfloat(0xFF7FFFFF) +#define MAX_INT asint(0x7FFFFFFF) +#define MIN_INT asint(0x80000000) + +cbuffer cbCS : register(b0) +{ + uint g_tex_width; + uint g_num_block_x; + uint g_format; //either SIGNED_F16 for DXGI_FORMAT_BC6H_SF16 or UNSIGNED_F16 for DXGI_FORMAT_BC6H_UF16 + uint g_mode_id; + uint g_start_block_id; + uint g_num_total_blocks; +}; + +static const uint candidateModeMemory[14] = { 0x00, 0x01, 0x02, 0x06, 0x0A, 0x0E, 0x12, 0x16, 0x1A, 0x1E, 0x03, 0x07, 0x0B, 0x0F }; +static const uint candidateModeFlag[14] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; +static const bool candidateModeTransformed[14] = { true, true, true, true, true, true, true, true, true, false, false, true, true, true }; +static const uint4 candidateModePrec[14] = { uint4(10,5,5,5), uint4(7,6,6,6), + uint4(11,5,4,4), uint4(11,4,5,4), uint4(11,4,4,5), uint4(9,5,5,5), + uint4(8,6,5,5), uint4(8,5,6,5), uint4(8,5,5,6), uint4(6,6,6,6), + uint4(10,10,10,10), uint4(11,9,9,9), uint4(12,8,8,8), uint4(16,4,4,4) }; + +/*static const uint4x4 candidateSection[32] = +{ + {0,0,1,1, 0,0,1,1, 0,0,1,1, 0,0,1,1}, {0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1}, {0,1,1,1, 0,1,1,1, 0,1,1,1, 0,1,1,1}, {0,0,0,1, 0,0,1,1, 0,0,1,1, 0,1,1,1}, + {0,0,0,0, 0,0,0,1, 0,0,0,1, 0,0,1,1}, {0,0,1,1, 0,1,1,1, 0,1,1,1, 1,1,1,1}, {0,0,0,1, 0,0,1,1, 0,1,1,1, 1,1,1,1}, {0,0,0,0, 0,0,0,1, 0,0,1,1, 0,1,1,1}, + {0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,1,1}, {0,0,1,1, 0,1,1,1, 1,1,1,1, 1,1,1,1}, {0,0,0,0, 0,0,0,1, 0,1,1,1, 1,1,1,1}, {0,0,0,0, 0,0,0,0, 0,0,0,1, 0,1,1,1}, + {0,0,0,1, 0,1,1,1, 1,1,1,1, 1,1,1,1}, {0,0,0,0, 0,0,0,0, 1,1,1,1, 1,1,1,1}, {0,0,0,0, 1,1,1,1, 1,1,1,1, 1,1,1,1}, {0,0,0,0, 0,0,0,0, 0,0,0,0, 1,1,1,1}, + {0,0,0,0, 1,0,0,0, 1,1,1,0, 1,1,1,1}, {0,1,1,1, 0,0,0,1, 0,0,0,0, 0,0,0,0}, {0,0,0,0, 0,0,0,0, 1,0,0,0, 1,1,1,0}, {0,1,1,1, 0,0,1,1, 0,0,0,1, 0,0,0,0}, + {0,0,1,1, 0,0,0,1, 0,0,0,0, 0,0,0,0}, {0,0,0,0, 1,0,0,0, 1,1,0,0, 1,1,1,0}, {0,0,0,0, 0,0,0,0, 1,0,0,0, 1,1,0,0}, {0,1,1,1, 0,0,1,1, 0,0,1,1, 0,0,0,1}, + {0,0,1,1, 0,0,0,1, 0,0,0,1, 0,0,0,0}, {0,0,0,0, 1,0,0,0, 1,0,0,0, 1,1,0,0}, {0,1,1,0, 0,1,1,0, 0,1,1,0, 0,1,1,0}, {0,0,1,1, 0,1,1,0, 0,1,1,0, 1,1,0,0}, + {0,0,0,1, 0,1,1,1, 1,1,1,0, 1,0,0,0}, {0,0,0,0, 1,1,1,1, 1,1,1,1, 0,0,0,0}, {0,1,1,1, 0,0,0,1, 1,0,0,0, 1,1,1,0}, {0,0,1,1, 1,0,0,1, 1,0,0,1, 1,1,0,0} +};*/ + +static const uint candidateSectionBit[32] = +{ + 0xCCCC, 0x8888, 0xEEEE, 0xECC8, + 0xC880, 0xFEEC, 0xFEC8, 0xEC80, + 0xC800, 0xFFEC, 0xFE80, 0xE800, + 0xFFE8, 0xFF00, 0xFFF0, 0xF000, + 0xF710, 0x008E, 0x7100, 0x08CE, + 0x008C, 0x7310, 0x3100, 0x8CCE, + 0x088C, 0x3110, 0x6666, 0x366C, + 0x17E8, 0x0FF0, 0x718E, 0x399C +}; + +static const uint candidateFixUpIndex1D[32] = +{ + 15,15,15,15, + 15,15,15,15, + 15,15,15,15, + 15,15,15,15, + 15, 2, 8, 2, + 2, 8, 8,15, + 2, 8, 2, 2, + 8, 8, 2, 2 +}; + +//0, 9, 18, 27, 37, 46, 55, 64 +static const uint aStep1[64] = { 0,0,0,0,0,1,1,1, + 1,1,1,1,1,1,2,2, + 2,2,2,2,2,2,2,3, + 3,3,3,3,3,3,3,3, + 3,4,4,4,4,4,4,4, + 4,4,5,5,5,5,5,5, + 5,5,5,6,6,6,6,6, + 6,6,6,6,7,7,7,7 }; + +//0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 +static const uint aStep2[64] = { 0, 0, 0, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 7, 7, 7, + 7, 8, 8, 8, 8, 9, 9, 9, + 9,10,10,10,10,10,11,11, + 11,11,12,12,12,12,13,13, + 13,13,14,14,14,14,15,15 }; + +static const float3 RGB2LUM = float3(0.2126f, 0.7152f, 0.0722f); + +#define THREAD_GROUP_SIZE 64 +#define BLOCK_SIZE_Y 4 +#define BLOCK_SIZE_X 4 +#define BLOCK_SIZE (BLOCK_SIZE_Y * BLOCK_SIZE_X) + + +//Forward declaration +uint3 float2half(float3 pixel_f); +int3 start_quantize(uint3 pixel_h); +void quantize(inout int2x3 endPoint, uint prec); +void finish_quantize_0(inout int bBadQuantize, inout int2x3 endPoint, uint4 prec, bool transformed); +void finish_quantize_1(inout int bBadQuantize, inout int2x3 endPoint, uint4 prec, bool transformed); +void finish_quantize(out bool bBadQuantize, inout int2x3 endPoint, uint4 prec, bool transformed); + +void start_unquantize(inout int2x3 endPoint[2], uint4 prec, bool transformed); +void start_unquantize(inout int2x3 endPoint, uint4 prec, bool transformed); +void unquantize(inout int2x3 color, uint prec); +uint3 finish_unquantize(int3 color); +void generate_palette_unquantized8(out uint3 palette, int3 low, int3 high, int i); +void generate_palette_unquantized16(out uint3 palette, int3 low, int3 high, int i); +float3 half2float(uint3 color_h); + +void block_package(inout uint4 block, int2x3 endPoint[2], uint mode_type, uint partition_index); +void block_package(inout uint4 block, int2x3 endPoint, uint mode_type); + +void swap(inout int3 lhs, inout int3 rhs) +{ + int3 tmp = lhs; + lhs = rhs; + rhs = tmp; +} + +Texture2D g_Input : register(t0); +StructuredBuffer g_InBuff : register(t1); + +RWStructuredBuffer g_OutBuff : register(u0); + +struct SharedData +{ + float3 pixel; + int3 pixel_ph; + float3 pixel_hr; + float pixel_lum; + float error; + uint best_mode; + uint best_partition; + int3 endPoint_low; + int3 endPoint_high; + float endPoint_lum_low; + float endPoint_lum_high; +}; + +groupshared SharedData shared_temp[THREAD_GROUP_SIZE]; + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void TryModeG10CS(uint GI : SV_GroupIndex, uint3 groupID : SV_GroupID) +{ + const uint MAX_USED_THREAD = 16; + uint BLOCK_IN_GROUP = THREAD_GROUP_SIZE / MAX_USED_THREAD; + uint blockInGroup = GI / MAX_USED_THREAD; + uint blockID = g_start_block_id + groupID.x * BLOCK_IN_GROUP + blockInGroup; + uint threadBase = blockInGroup * MAX_USED_THREAD; + uint threadInBlock = GI - threadBase; + +#ifndef REF_DEVICE + if (blockID >= g_num_total_blocks) + { + return; + } +#endif + + uint block_y = blockID / g_num_block_x; + uint block_x = blockID - block_y * g_num_block_x; + uint base_x = block_x * BLOCK_SIZE_X; + uint base_y = block_y * BLOCK_SIZE_Y; + + if (threadInBlock < 16) + { + shared_temp[GI].pixel = g_Input.Load(uint3(base_x + threadInBlock % 4, base_y + threadInBlock / 4, 0)).rgb; + shared_temp[GI].pixel = max(shared_temp[GI].pixel, float3(0,0,0)); + uint3 pixel_h = float2half(shared_temp[GI].pixel); + shared_temp[GI].pixel_hr = half2float(pixel_h); + shared_temp[GI].pixel_lum = dot(shared_temp[GI].pixel_hr, RGB2LUM); + shared_temp[GI].pixel_ph = start_quantize(pixel_h); + + shared_temp[GI].endPoint_low = shared_temp[GI].pixel_ph; + shared_temp[GI].endPoint_high = shared_temp[GI].pixel_ph; + shared_temp[GI].endPoint_lum_low = shared_temp[GI].pixel_lum; + shared_temp[GI].endPoint_lum_high = shared_temp[GI].pixel_lum; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 8) + { + if (shared_temp[GI].endPoint_lum_low > shared_temp[GI + 8].endPoint_lum_low) + { + shared_temp[GI].endPoint_low = shared_temp[GI + 8].endPoint_low; + shared_temp[GI].endPoint_lum_low = shared_temp[GI + 8].endPoint_lum_low; + } + if (shared_temp[GI].endPoint_lum_high < shared_temp[GI + 8].endPoint_lum_high) + { + shared_temp[GI].endPoint_high = shared_temp[GI + 8].endPoint_high; + shared_temp[GI].endPoint_lum_high = shared_temp[GI + 8].endPoint_lum_high; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 4) + { + if (shared_temp[GI].endPoint_lum_low > shared_temp[GI + 4].endPoint_lum_low) + { + shared_temp[GI].endPoint_low = shared_temp[GI + 4].endPoint_low; + shared_temp[GI].endPoint_lum_low = shared_temp[GI + 4].endPoint_lum_low; + } + if (shared_temp[GI].endPoint_lum_high < shared_temp[GI + 4].endPoint_lum_high) + { + shared_temp[GI].endPoint_high = shared_temp[GI + 4].endPoint_high; + shared_temp[GI].endPoint_lum_high = shared_temp[GI + 4].endPoint_lum_high; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 2) + { + if (shared_temp[GI].endPoint_lum_low > shared_temp[GI + 2].endPoint_lum_low) + { + shared_temp[GI].endPoint_low = shared_temp[GI + 2].endPoint_low; + shared_temp[GI].endPoint_lum_low = shared_temp[GI + 2].endPoint_lum_low; + } + if (shared_temp[GI].endPoint_lum_high < shared_temp[GI + 2].endPoint_lum_high) + { + shared_temp[GI].endPoint_high = shared_temp[GI + 2].endPoint_high; + shared_temp[GI].endPoint_lum_high = shared_temp[GI + 2].endPoint_lum_high; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 1) + { + if (shared_temp[GI].endPoint_lum_low > shared_temp[GI + 1].endPoint_lum_low) + { + shared_temp[GI].endPoint_low = shared_temp[GI + 1].endPoint_low; + shared_temp[GI].endPoint_lum_low = shared_temp[GI + 1].endPoint_lum_low; + } + if (shared_temp[GI].endPoint_lum_high < shared_temp[GI + 1].endPoint_lum_high) + { + shared_temp[GI].endPoint_high = shared_temp[GI + 1].endPoint_high; + shared_temp[GI].endPoint_lum_high = shared_temp[GI + 1].endPoint_lum_high; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + //ergod mode_type 11:14 + if (threadInBlock == 0) + { + int2x3 endPoint; + // find_axis + endPoint[0] = shared_temp[threadBase + 0].endPoint_low; + endPoint[1] = shared_temp[threadBase + 0].endPoint_high; + + //compute_index + float3 span = endPoint[1] - endPoint[0];// fixed a bug in v0.2 + float span_norm_sqr = dot(span, span);// fixed a bug in v0.2 + float dotProduct = dot(span, shared_temp[threadBase + 0].pixel_ph - endPoint[0]);// fixed a bug in v0.2 + if (span_norm_sqr > 0 && dotProduct >= 0 && uint(dotProduct * 63.49999 / span_norm_sqr) > 32) + { + swap(endPoint[0], endPoint[1]); + + shared_temp[GI].endPoint_low = endPoint[0]; + shared_temp[GI].endPoint_high = endPoint[1]; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 4) + { + int2x3 endPoint; + endPoint[0] = shared_temp[threadBase + 0].endPoint_low; + endPoint[1] = shared_temp[threadBase + 0].endPoint_high; + + float3 span = endPoint[1] - endPoint[0]; + float span_norm_sqr = dot(span, span); + + uint4 prec = candidateModePrec[threadInBlock + 10]; + int2x3 endPoint_q = endPoint; + quantize(endPoint_q, prec.x); + + bool transformed = candidateModeTransformed[threadInBlock + 10]; + if (transformed) + { + endPoint_q[1] -= endPoint_q[0]; + } + + bool bBadQuantize; + finish_quantize(bBadQuantize, endPoint_q, prec, transformed); + + start_unquantize(endPoint_q, prec, transformed); + + unquantize(endPoint_q, prec.x); + + float error = 0; + [loop] for (uint j = 0; j < 16; j++) + { + float dotProduct = dot(span, shared_temp[threadBase + j].pixel_ph - endPoint[0]);// fixed a bug in v0.2 + uint index = (span_norm_sqr <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr) ? aStep2[uint(dotProduct * 63.49999 / span_norm_sqr)] : aStep2[63]); + + uint3 pixel_rh; + generate_palette_unquantized16(pixel_rh, endPoint_q[0], endPoint_q[1], index); + float3 pixel_r = half2float(pixel_rh); + pixel_r -= shared_temp[threadBase + j].pixel_hr; + error += dot(pixel_r, pixel_r); + } + if (bBadQuantize) + error = 1e20f; + + shared_temp[GI].error = error; + shared_temp[GI].best_mode = candidateModeFlag[threadInBlock + 10]; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 2) + { + if (shared_temp[GI].error > shared_temp[GI + 2].error) + { + shared_temp[GI].error = shared_temp[GI + 2].error; + shared_temp[GI].best_mode = shared_temp[GI + 2].best_mode; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 1) + { + if (shared_temp[GI].error > shared_temp[GI + 1].error) + { + shared_temp[GI].error = shared_temp[GI + 1].error; + shared_temp[GI].best_mode = shared_temp[GI + 1].best_mode; + } + + g_OutBuff[blockID] = uint4(asuint(shared_temp[GI].error), shared_temp[GI].best_mode, 0, 0); + } +} + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void TryModeLE10CS(uint GI : SV_GroupIndex, uint3 groupID : SV_GroupID) +{ + const uint MAX_USED_THREAD = 32; + uint BLOCK_IN_GROUP = THREAD_GROUP_SIZE / MAX_USED_THREAD; + uint blockInGroup = GI / MAX_USED_THREAD; + uint blockID = g_start_block_id + groupID.x * BLOCK_IN_GROUP + blockInGroup; + uint threadBase = blockInGroup * MAX_USED_THREAD; + uint threadInBlock = GI - threadBase; + +#ifndef REF_DEVICE + if (blockID >= g_num_total_blocks) + { + return; + } + + if (asfloat(g_InBuff[blockID].x) < 1e-6f) + { + g_OutBuff[blockID] = g_InBuff[blockID]; + return; + } +#endif + + uint block_y = blockID / g_num_block_x; + uint block_x = blockID - block_y * g_num_block_x; + uint base_x = block_x * BLOCK_SIZE_X; + uint base_y = block_y * BLOCK_SIZE_Y; + + if (threadInBlock < 16) + { + shared_temp[GI].pixel = g_Input.Load(uint3(base_x + threadInBlock % 4, base_y + threadInBlock / 4, 0)).rgb; + shared_temp[GI].pixel = max(shared_temp[GI].pixel, float3(0,0,0)); + uint3 pixel_h = float2half(shared_temp[GI].pixel); + shared_temp[GI].pixel_hr = half2float(pixel_h); + shared_temp[GI].pixel_lum = dot(shared_temp[GI].pixel_hr, RGB2LUM); + shared_temp[GI].pixel_ph = start_quantize(pixel_h); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + //ergod mode_type 1:10 + if (threadInBlock < 32) + { + // find_axis + int2x3 endPoint[2]; + endPoint[0][0] = MAX_INT; + endPoint[0][1] = MIN_INT; + endPoint[1][0] = MAX_INT; + endPoint[1][1] = MIN_INT; + + float2 endPoint_lum[2]; + endPoint_lum[0][0] = MAX_FLOAT; + endPoint_lum[0][1] = MIN_FLOAT; + endPoint_lum[1][0] = MAX_FLOAT; + endPoint_lum[1][1] = MIN_FLOAT; + + uint bit = candidateSectionBit[threadInBlock]; + for (uint i = 0; i < 16; i++) + { + int3 pixel_ph = shared_temp[threadBase + i].pixel_ph; + float pixel_lum = shared_temp[threadBase + i].pixel_lum; + if ((bit >> i) & 1) //It gets error when using "candidateSection" as "endPoint_ph" index + { + if (endPoint_lum[1][0] > pixel_lum) + { + endPoint[1][0] = pixel_ph; + endPoint_lum[1][0] = pixel_lum; + } + if (endPoint_lum[1][1] < pixel_lum) + { + endPoint[1][1] = pixel_ph; + endPoint_lum[1][1] = pixel_lum; + } + } + else + { + if (endPoint_lum[0][0] > pixel_lum) + { + endPoint[0][0] = pixel_ph; + endPoint_lum[0][0] = pixel_lum; + } + if (endPoint_lum[0][1] < pixel_lum) + { + endPoint[0][1] = pixel_ph; + endPoint_lum[0][1] = pixel_lum; + } + } + } + + //compute_index + float3 span[2];// fixed a bug in v0.2 + float span_norm_sqr[2];// fixed a bug in v0.2 + [unroll] + for (uint p = 0; p < 2; ++p) + { + span[p] = endPoint[p][1] - endPoint[p][0]; + span_norm_sqr[p] = dot(span[p], span[p]); + + float dotProduct = dot(span[p], shared_temp[threadBase + (0 == p ? 0 : candidateFixUpIndex1D[threadInBlock])].pixel_ph - endPoint[p][0]);// fixed a bug in v0.2 + if (span_norm_sqr[p] > 0 && dotProduct >= 0 && uint(dotProduct * 63.49999 / span_norm_sqr[p]) > 32) + { + span[p] = -span[p]; + swap(endPoint[p][0], endPoint[p][1]); + } + } + + uint4 prec = candidateModePrec[g_mode_id]; + int2x3 endPoint_q[2] = endPoint; + quantize(endPoint_q[0], prec.x); + quantize(endPoint_q[1], prec.x); + + bool transformed = candidateModeTransformed[g_mode_id]; + if (transformed) + { + endPoint_q[0][1] -= endPoint_q[0][0]; + endPoint_q[1][0] -= endPoint_q[0][0]; + endPoint_q[1][1] -= endPoint_q[0][0]; + } + + int bBadQuantize = 0; + finish_quantize_0(bBadQuantize, endPoint_q[0], prec, transformed); + finish_quantize_1(bBadQuantize, endPoint_q[1], prec, transformed); + + start_unquantize(endPoint_q, prec, transformed); + + unquantize(endPoint_q[0], prec.x); + unquantize(endPoint_q[1], prec.x); + + float error = 0; + for (uint j = 0; j < 16; j++) + { + uint3 pixel_rh; + if ((bit >> j) & 1) + { + float dotProduct = dot(span[1], shared_temp[threadBase + j].pixel_ph - endPoint[1][0]);// fixed a bug in v0.2 + uint index = (span_norm_sqr[1] <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr[1]) ? aStep1[uint(dotProduct * 63.49999 / span_norm_sqr[1])] : aStep1[63]); + generate_palette_unquantized8(pixel_rh, endPoint_q[1][0], endPoint_q[1][1], index); + } + else + { + float dotProduct = dot(span[0], shared_temp[threadBase + j].pixel_ph - endPoint[0][0]);// fixed a bug in v0.2 + uint index = (span_norm_sqr[0] <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr[0]) ? aStep1[uint(dotProduct * 63.49999 / span_norm_sqr[0])] : aStep1[63]); + generate_palette_unquantized8(pixel_rh, endPoint_q[0][0], endPoint_q[0][1], index); + } + + float3 pixel_r = half2float(pixel_rh); + pixel_r -= shared_temp[threadBase + j].pixel_hr; + error += dot(pixel_r, pixel_r); + } + if (bBadQuantize) + error = 1e20f; + + shared_temp[GI].error = error; + shared_temp[GI].best_mode = candidateModeFlag[g_mode_id]; + shared_temp[GI].best_partition = threadInBlock; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 16) + { + if (shared_temp[GI].error > shared_temp[GI + 16].error) + { + shared_temp[GI].error = shared_temp[GI + 16].error; + shared_temp[GI].best_mode = shared_temp[GI + 16].best_mode; + shared_temp[GI].best_partition = shared_temp[GI + 16].best_partition; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 8) + { + if (shared_temp[GI].error > shared_temp[GI + 8].error) + { + shared_temp[GI].error = shared_temp[GI + 8].error; + shared_temp[GI].best_mode = shared_temp[GI + 8].best_mode; + shared_temp[GI].best_partition = shared_temp[GI + 8].best_partition; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 4) + { + if (shared_temp[GI].error > shared_temp[GI + 4].error) + { + shared_temp[GI].error = shared_temp[GI + 4].error; + shared_temp[GI].best_mode = shared_temp[GI + 4].best_mode; + shared_temp[GI].best_partition = shared_temp[GI + 4].best_partition; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 2) + { + if (shared_temp[GI].error > shared_temp[GI + 2].error) + { + shared_temp[GI].error = shared_temp[GI + 2].error; + shared_temp[GI].best_mode = shared_temp[GI + 2].best_mode; + shared_temp[GI].best_partition = shared_temp[GI + 2].best_partition; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 1) + { + if (shared_temp[GI].error > shared_temp[GI + 1].error) + { + shared_temp[GI].error = shared_temp[GI + 1].error; + shared_temp[GI].best_mode = shared_temp[GI + 1].best_mode; + shared_temp[GI].best_partition = shared_temp[GI + 1].best_partition; + } + + if (asfloat(g_InBuff[blockID].x) > shared_temp[GI].error) + { + g_OutBuff[blockID] = uint4(asuint(shared_temp[GI].error), shared_temp[GI].best_mode, shared_temp[GI].best_partition, 0); + } + else + { + g_OutBuff[blockID] = g_InBuff[blockID]; + } + } +} + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void EncodeBlockCS(uint GI : SV_GroupIndex, uint3 groupID : SV_GroupID) +{ + const uint MAX_USED_THREAD = 32; + uint BLOCK_IN_GROUP = THREAD_GROUP_SIZE / MAX_USED_THREAD; + uint blockInGroup = GI / MAX_USED_THREAD; + uint blockID = g_start_block_id + groupID.x * BLOCK_IN_GROUP + blockInGroup; + uint threadBase = blockInGroup * MAX_USED_THREAD; + uint threadInBlock = GI - threadBase; + +#ifndef REF_DEVICE + if (blockID >= g_num_total_blocks) + { + return; + } +#endif + + uint block_y = blockID / g_num_block_x; + uint block_x = blockID - block_y * g_num_block_x; + uint base_x = block_x * BLOCK_SIZE_X; + uint base_y = block_y * BLOCK_SIZE_Y; + + if (threadInBlock < 16) + { + shared_temp[GI].pixel = g_Input.Load(uint3(base_x + threadInBlock % 4, base_y + threadInBlock / 4, 0)).rgb; + shared_temp[GI].pixel = max(shared_temp[GI].pixel, float3(0,0,0)); + shared_temp[GI].pixel_lum = dot(shared_temp[GI].pixel, RGB2LUM); + uint3 pixel_h = float2half(shared_temp[GI].pixel); + shared_temp[GI].pixel_ph = start_quantize(pixel_h); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + uint best_mode = g_InBuff[blockID].y; + uint best_partition = g_InBuff[blockID].z; + + uint4 block = 0; + + if (threadInBlock < 32) + { + int2x3 endPoint; + endPoint[0] = MAX_INT; + endPoint[1] = MIN_INT; + + float2 endPoint_lum; + endPoint_lum[0] = MAX_FLOAT; + endPoint_lum[1] = MIN_FLOAT; + + int2 endPoint_lum_index; + endPoint_lum_index[0] = -1; + endPoint_lum_index[1] = -1; + + int3 pixel_ph = shared_temp[threadBase + (threadInBlock & 0xF)].pixel_ph; + float pixel_lum = shared_temp[threadBase + (threadInBlock & 0xF)].pixel_lum; + if (threadInBlock < 16) + { + if (best_mode > 10) + { + endPoint[0] = endPoint[1] = pixel_ph; + endPoint_lum[0] = endPoint_lum[1] = pixel_lum; + } + else + { + uint bits = candidateSectionBit[best_partition]; + if (0 == ((bits >> threadInBlock) & 1)) + { + endPoint[0] = endPoint[1] = pixel_ph; + endPoint_lum[0] = endPoint_lum[1] = pixel_lum; + } + } + } + else + { + if (best_mode <= 10) + { + uint bits = candidateSectionBit[best_partition]; + if (1 == ((bits >> (threadInBlock & 0xF)) & 1)) + { + endPoint[0] = endPoint[1] = pixel_ph; + endPoint_lum[0] = endPoint_lum[1] = pixel_lum; + } + } + } + + shared_temp[GI].endPoint_low = endPoint[0]; + shared_temp[GI].endPoint_high = endPoint[1]; + + shared_temp[GI].endPoint_lum_low = endPoint_lum[0]; + shared_temp[GI].endPoint_lum_high = endPoint_lum[1]; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if ((threadInBlock & 0xF) < 8) + { + if (shared_temp[GI].endPoint_lum_low > shared_temp[GI + 8].endPoint_lum_low) + { + shared_temp[GI].endPoint_low = shared_temp[GI + 8].endPoint_low; + shared_temp[GI].endPoint_lum_low = shared_temp[GI + 8].endPoint_lum_low; + } + if (shared_temp[GI].endPoint_lum_high < shared_temp[GI + 8].endPoint_lum_high) + { + shared_temp[GI].endPoint_high = shared_temp[GI + 8].endPoint_high; + shared_temp[GI].endPoint_lum_high = shared_temp[GI + 8].endPoint_lum_high; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if ((threadInBlock & 0xF) < 4) + { + if (shared_temp[GI].endPoint_lum_low > shared_temp[GI + 4].endPoint_lum_low) + { + shared_temp[GI].endPoint_low = shared_temp[GI + 4].endPoint_low; + shared_temp[GI].endPoint_lum_low = shared_temp[GI + 4].endPoint_lum_low; + } + if (shared_temp[GI].endPoint_lum_high < shared_temp[GI + 4].endPoint_lum_high) + { + shared_temp[GI].endPoint_high = shared_temp[GI + 4].endPoint_high; + shared_temp[GI].endPoint_lum_high = shared_temp[GI + 4].endPoint_lum_high; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if ((threadInBlock & 0xF) < 2) + { + if (shared_temp[GI].endPoint_lum_low > shared_temp[GI + 2].endPoint_lum_low) + { + shared_temp[GI].endPoint_low = shared_temp[GI + 2].endPoint_low; + shared_temp[GI].endPoint_lum_low = shared_temp[GI + 2].endPoint_lum_low; + } + if (shared_temp[GI].endPoint_lum_high < shared_temp[GI + 2].endPoint_lum_high) + { + shared_temp[GI].endPoint_high = shared_temp[GI + 2].endPoint_high; + shared_temp[GI].endPoint_lum_high = shared_temp[GI + 2].endPoint_lum_high; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if ((threadInBlock & 0xF) < 1) + { + if (shared_temp[GI].endPoint_lum_low > shared_temp[GI + 1].endPoint_lum_low) + { + shared_temp[GI].endPoint_low = shared_temp[GI + 1].endPoint_low; + shared_temp[GI].endPoint_lum_low = shared_temp[GI + 1].endPoint_lum_low; + } + if (shared_temp[GI].endPoint_lum_high < shared_temp[GI + 1].endPoint_lum_high) + { + shared_temp[GI].endPoint_high = shared_temp[GI + 1].endPoint_high; + shared_temp[GI].endPoint_lum_high = shared_temp[GI + 1].endPoint_lum_high; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 2) + { + // find_axis + int2x3 endPoint; + endPoint[0] = shared_temp[threadBase + threadInBlock * 16].endPoint_low; + endPoint[1] = shared_temp[threadBase + threadInBlock * 16].endPoint_high; + + uint fixup = 0; + if ((1 == threadInBlock) && (best_mode <= 10)) + { + fixup = candidateFixUpIndex1D[best_partition]; + } + + float3 span = endPoint[1] - endPoint[0]; + float span_norm_sqr = dot(span, span); + float dotProduct = dot(span, shared_temp[threadBase + fixup].pixel_ph - endPoint[0]); + if (span_norm_sqr > 0 && dotProduct >= 0 && uint(dotProduct * 63.49999 / span_norm_sqr) > 32) + { + swap(endPoint[0], endPoint[1]); + } + + shared_temp[GI].endPoint_low = endPoint[0]; + shared_temp[GI].endPoint_high = endPoint[1]; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 16) + { + uint bits; + if (best_mode > 10) + { + bits = 0; + } + else + { + bits = candidateSectionBit[best_partition]; + } + + float3 span; + float dotProduct; + if ((bits >> threadInBlock) & 1) + { + span = shared_temp[threadBase + 1].endPoint_high - shared_temp[threadBase + 1].endPoint_low; + dotProduct = dot(span, shared_temp[threadBase + threadInBlock].pixel_ph - shared_temp[threadBase + 1].endPoint_low); + } + else + { + span = shared_temp[threadBase + 0].endPoint_high - shared_temp[threadBase + 0].endPoint_low; + dotProduct = dot(span, shared_temp[threadBase + threadInBlock].pixel_ph - shared_temp[threadBase + 0].endPoint_low); + } + float span_norm_sqr = dot(span, span); + + if (best_mode > 10) + { + uint index = (span_norm_sqr <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr) ? aStep2[uint(dotProduct * 63.49999 / span_norm_sqr)] : aStep2[63]); + if (threadInBlock == 0) + { + block.z |= index << 1; + } + else if (threadInBlock < 8) + { + block.z |= index << (threadInBlock * 4); + } + else + { + block.w |= index << ((threadInBlock - 8) * 4); + } + } + else + { + uint index = (span_norm_sqr <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr) ? aStep1[uint(dotProduct * 63.49999 / span_norm_sqr)] : aStep1[63]); + + uint fixup = candidateFixUpIndex1D[best_partition]; + int2 offset = int2((fixup != 2), (fixup == 15)); + + if (threadInBlock == 0) + { + block.z |= index << 18; + } + else if (threadInBlock < 3) + { + block.z |= index << (20 + (threadInBlock - 1) * 3); + } + else if (threadInBlock < 5) + { + block.z |= index << (25 + (threadInBlock - 3) * 3 + offset.x); + } + else if (threadInBlock == 5) + { + block.w |= index >> !offset.x; + if (!offset.x) + { + block.z |= index << 31; + } + } + else if (threadInBlock < 9) + { + block.w |= index << (2 + (threadInBlock - 6) * 3 + offset.x); + } + else + { + block.w |= index << (11 + (threadInBlock - 9) * 3 + offset.y); + } + } + + shared_temp[GI].pixel_hr.xy = asfloat(block.zw); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 8) + { + shared_temp[GI].pixel_hr.xy = asfloat(asuint(shared_temp[GI].pixel_hr.xy) | asuint(shared_temp[GI + 8].pixel_hr.xy)); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 4) + { + shared_temp[GI].pixel_hr.xy = asfloat(asuint(shared_temp[GI].pixel_hr.xy) | asuint(shared_temp[GI + 4].pixel_hr.xy)); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 2) + { + shared_temp[GI].pixel_hr.xy = asfloat(asuint(shared_temp[GI].pixel_hr.xy) | asuint(shared_temp[GI + 2].pixel_hr.xy)); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 1) + { + shared_temp[GI].pixel_hr.xy = asfloat(asuint(shared_temp[GI].pixel_hr.xy) | asuint(shared_temp[GI + 1].pixel_hr.xy)); + + block.zw = asuint(shared_temp[GI].pixel_hr.xy); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + bool transformed = candidateModeTransformed[best_mode - 1]; + uint4 prec = candidateModePrec[best_mode - 1]; + if (threadInBlock == 2) + { + int2x3 endPoint_q; + endPoint_q[0] = shared_temp[threadBase + 0].endPoint_low; + endPoint_q[1] = shared_temp[threadBase + 0].endPoint_high; + + quantize(endPoint_q, prec.x); + if (transformed) + { + endPoint_q[1] -= endPoint_q[0]; + } + + shared_temp[GI].endPoint_low = endPoint_q[0]; + shared_temp[GI].endPoint_high = endPoint_q[1]; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock == 3) + { + int3 ep0 = shared_temp[threadBase + 2].endPoint_low; + int2x3 endPoint_q; + endPoint_q[0] = shared_temp[threadBase + 1].endPoint_low; + endPoint_q[1] = shared_temp[threadBase + 1].endPoint_high; + + if (best_mode <= 10) + { + quantize(endPoint_q, prec.x); + if (transformed) + { + endPoint_q[0] -= ep0; + endPoint_q[1] -= ep0; + } + + shared_temp[GI].endPoint_low = endPoint_q[0]; + shared_temp[GI].endPoint_high = endPoint_q[1]; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 2) + { + int2x3 endPoint_q; + endPoint_q[0] = shared_temp[threadBase + threadInBlock + 2].endPoint_low; + endPoint_q[1] = shared_temp[threadBase + threadInBlock + 2].endPoint_high; + + int bBadQuantize = 0; + if (threadInBlock == 0) + { + if (best_mode > 10) + { + finish_quantize(bBadQuantize, endPoint_q, prec, transformed); + } + else + { + finish_quantize_0(bBadQuantize, endPoint_q, prec, transformed); + } + } + else // if (threadInBlock == 1) + { + if (best_mode <= 10) + { + finish_quantize_1(bBadQuantize, endPoint_q, prec, transformed); + } + } + + shared_temp[GI].endPoint_low = endPoint_q[0]; + shared_temp[GI].endPoint_high = endPoint_q[1]; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock == 0) + { + int2x3 endPoint_q[2]; + endPoint_q[0][0] = shared_temp[threadBase + 0].endPoint_low; + endPoint_q[0][1] = shared_temp[threadBase + 0].endPoint_high; + endPoint_q[1][0] = shared_temp[threadBase + 1].endPoint_low; + endPoint_q[1][1] = shared_temp[threadBase + 1].endPoint_high; + + if (best_mode > 10) + { + block_package(block, endPoint_q[0], best_mode); + } + else + { + block_package(block, endPoint_q, best_mode, best_partition); + } + + g_OutBuff[blockID] = block; + } +} + +#ifdef EMULATE_F16C +uint float2half1(float f) +{ + uint Result; + + uint IValue = asuint(f); + uint Sign = (IValue & 0x80000000U) >> 16U; + IValue = IValue & 0x7FFFFFFFU; + + if (IValue > 0x47FFEFFFU) + { + // The number is too large to be represented as a half. Saturate to infinity. + Result = 0x7FFFU; + } + else + { + if (IValue < 0x38800000U) + { + // The number is too small to be represented as a normalized half. + // Convert it to a denormalized value. + uint Shift = 113U - (IValue >> 23U); + IValue = (0x800000U | (IValue & 0x7FFFFFU)) >> Shift; + } + else + { + // Rebias the exponent to represent the value as a normalized half. + IValue += 0xC8000000U; + } + + Result = ((IValue + 0x0FFFU + ((IValue >> 13U) & 1U)) >> 13U)&0x7FFFU; + } + return (Result|Sign); +} +#endif + +uint3 float2half(float3 endPoint_f) +{ +#ifdef EMULATE_F16C + return uint3(float2half1(endPoint_f.x), float2half1(endPoint_f.y), float2half1(endPoint_f.z)); +#else + return uint3(f32tof16(endPoint_f.x), f32tof16(endPoint_f.y), f32tof16(endPoint_f.z)); +#endif +} +int3 start_quantize(uint3 pixel_h) +{ + if (g_format == UNSIGNED_F16) + { + return asint((pixel_h << 6) / 31); + } + else + { + return (pixel_h < 0x8000) ? ((pixel_h == 0x7bff) ? 0x7fff : asint((pixel_h << 5) / 31))// fixed a bug in v0.2 + : ((pixel_h == 0x7bff) ? 0xffff8001 : -asint(((0x00007fff & pixel_h) << 5) / 31));// fixed a bug in v0.2 + } +} +void quantize(inout int2x3 endPoint, uint prec) +{ + int iprec = asint(prec); + if (g_format == UNSIGNED_F16) + { + endPoint = ((iprec >= 15) | (endPoint == 0)) ? endPoint + : ((endPoint == asint(0xFFFF)) ? ((1 << iprec) - 1) + : (((endPoint << iprec) + asint(0x0000)) >> 16)); + } + else + { + endPoint = ((iprec >= 16) | (endPoint == 0)) ? endPoint + : ((endPoint >= 0) ? ((endPoint == asint(0x7FFF)) ? ((1 << (iprec - 1)) - 1) : (((endPoint << (iprec - 1)) + asint(0x0000)) >> 15)) + : ((-endPoint == asint(0x7FFF)) ? -((1 << (iprec - 1)) - 1) : -(((-endPoint << (iprec - 1)) + asint(0x0000)) >> 15))); + } +} +void finish_quantize_0(inout int bBadQuantize, inout int2x3 endPoint, uint4 prec, bool transformed) +{ + if (transformed) + { + bool3 bBadComponent = (endPoint[1] >= 0) ? (endPoint[1] >= (1 << (prec.yzw - 1))) + : (-endPoint[1] > (1 << (prec.yzw - 1))); + bBadQuantize |= any(bBadComponent); + + endPoint[0] = endPoint[0] & ((1 << prec.x) - 1); + endPoint[1] = (endPoint[1] >= 0) ? ((endPoint[1] >= (1 << (prec.yzw - 1))) ? ((1 << (prec.yzw - 1)) - 1) : endPoint[1]) + : ((-endPoint[1] > (1 << (prec.yzw - 1))) ? (1 << (prec.yzw - 1)) : (endPoint[1] & ((1 << prec.yzw) - 1))); + } + else + { + endPoint &= ((1 << prec.x) - 1); + } +} +void finish_quantize_1(inout int bBadQuantize, inout int2x3 endPoint, uint4 prec, bool transformed) +{ + if (transformed) + { + bool2x3 bBadComponent; + bBadComponent[0] = (endPoint[0] >= 0) ? (endPoint[0] >= (1 << (prec.yzw - 1))) + : (-endPoint[0] > (1 << (prec.yzw - 1))); + bBadComponent[1] = (endPoint[1] >= 0) ? (endPoint[1] >= (1 << (prec.yzw - 1))) + : (-endPoint[1] > (1 << (prec.yzw - 1))); + bBadQuantize |= any(bBadComponent); + + endPoint[0] = (endPoint[0] >= 0) ? ((endPoint[0] >= (1 << (prec.yzw - 1))) ? ((1 << (prec.yzw - 1)) - 1) : endPoint[0]) + : ((-endPoint[0] > (1 << (prec.yzw - 1))) ? (1 << (prec.yzw - 1)) : (endPoint[0] & ((1 << prec.yzw) - 1))); + endPoint[1] = (endPoint[1] >= 0) ? ((endPoint[1] >= (1 << (prec.yzw - 1))) ? ((1 << (prec.yzw - 1)) - 1) : endPoint[1]) + : ((-endPoint[1] > (1 << (prec.yzw - 1))) ? (1 << (prec.yzw - 1)) : (endPoint[1] & ((1 << prec.yzw) - 1))); + } + else + { + endPoint &= ((1 << prec.x) - 1); + } +} +void finish_quantize(out bool bBadQuantize, inout int2x3 endPoint, uint4 prec, bool transformed) +{ + if (transformed) + { + bool3 bBadComponent; + bBadComponent = (endPoint[1] >= 0) ? (endPoint[1] >= (1 << (prec.yzw - 1))) + : (-endPoint[1] > (1 << (prec.yzw - 1))); + bBadQuantize = any(bBadComponent); + + endPoint[0] = endPoint[0] & ((1 << prec.x) - 1); + endPoint[1] = (endPoint[1] >= 0) ? ((endPoint[1] >= (1 << (prec.yzw - 1))) ? ((1 << (prec.yzw - 1)) - 1) : endPoint[1]) + : ((-endPoint[1] > (1 << (prec.yzw - 1))) ? (1 << (prec.yzw - 1)) : (endPoint[1] & ((1 << prec.yzw) - 1))); + } + else + { + endPoint &= ((1 << prec.x) - 1); + + bBadQuantize = 0; + } +} + +void SIGN_EXTEND(uint3 prec, inout int3 color) +{ + uint3 p = 1 << (prec - 1); + color = (color & p) ? (color & (p - 1)) - p : color; +} + +void sign_extend(bool transformed, uint4 prec, inout int2x3 endPoint) +{ + if (g_format == SIGNED_F16) + SIGN_EXTEND(prec.x, endPoint[0]); + if (g_format == SIGNED_F16 || transformed) + SIGN_EXTEND(prec.yzw, endPoint[1]); +} + +void sign_extend(bool transformed, uint4 prec, inout int2x3 endPoint[2]) +{ + if (g_format == SIGNED_F16) + SIGN_EXTEND(prec.x, endPoint[0][0]); + if (g_format == SIGNED_F16 || transformed) + { + SIGN_EXTEND(prec.yzw, endPoint[0][1]); + SIGN_EXTEND(prec.yzw, endPoint[1][0]); + SIGN_EXTEND(prec.yzw, endPoint[1][1]); + } +} +void start_unquantize(inout int2x3 endPoint[2], uint4 prec, bool transformed) +{ + sign_extend(transformed, prec, endPoint); + if (transformed) + { + endPoint[0][1] += endPoint[0][0]; + endPoint[1][0] += endPoint[0][0]; + endPoint[1][1] += endPoint[0][0]; + } +} +void start_unquantize(inout int2x3 endPoint, uint4 prec, bool transformed) +{ + sign_extend(transformed, prec, endPoint); + if (transformed) + endPoint[1] += endPoint[0]; +} +void unquantize(inout int2x3 color, uint prec) +{ + int iprec = asint(prec); + if (g_format == UNSIGNED_F16) + { + if (prec < 15) + { + color = (color != 0) ? (color == ((1 << iprec) - 1) ? 0xFFFF : (((color << 16) + 0x8000) >> iprec)) : color; + } + } + else + { + if (prec < 16) + { + uint2x3 s = color >= 0 ? 0 : 1; + color = abs(color); + color = (color != 0) ? (color >= ((1 << (iprec - 1)) - 1) ? 0x7FFF : (((color << 15) + 0x4000) >> (iprec - 1))) : color; + color = s > 0 ? -color : color; + } + } +} +uint3 finish_unquantize(int3 color) +{ + if (g_format == UNSIGNED_F16) + color = (color * 31) >> 6; + else + { + color = (color < 0) ? -((-color * 31) >> 5) : (color * 31) >> 5; + color = (color < 0) ? ((-color) | 0x8000) : color; + } + return asuint(color); +} +void generate_palette_unquantized8(out uint3 palette, int3 low, int3 high, int i) +{ + static const int aWeight3[] = { 0, 9, 18, 27, 37, 46, 55, 64 }; + + int3 tmp = (low * (64 - aWeight3[i]) + high * aWeight3[i] + 32) >> 6; + palette = finish_unquantize(tmp); +} +void generate_palette_unquantized16(out uint3 palette, int3 low, int3 high, int i) +{ + static const int aWeight4[] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; + + int3 tmp = (low * (64 - aWeight4[i]) + high * aWeight4[i] + 32) >> 6; + palette = finish_unquantize(tmp); +} + +#ifdef EMULATE_F16C +float half2float1(uint Value) +{ + uint Mantissa = (uint)(Value & 0x03FF); + + uint Exponent; + if ((Value & 0x7C00) != 0) // The value is normalized + { + Exponent = (uint)((Value >> 10) & 0x1F); + } + else if (Mantissa != 0) // The value is denormalized + { + // Normalize the value in the resulting float + Exponent = 1; + + do + { + Exponent--; + Mantissa <<= 1; + } while ((Mantissa & 0x0400) == 0); + + Mantissa &= 0x03FF; + } + else // The value is zero + { + Exponent = (uint)(-112); + } + + uint Result = ((Value & 0x8000) << 16) | // Sign + ((Exponent + 112) << 23) | // Exponent + (Mantissa << 13); // Mantissa + + return asfloat(Result); +} +#endif + +float3 half2float(uint3 color_h) +{ +#ifdef EMULATE_F16C + return float3(half2float1(color_h.x), half2float1(color_h.y), half2float1(color_h.z)); +#else + return float3(f16tof32(color_h.x), f16tof32(color_h.y), f16tof32(color_h.z)); +#endif +} + +void block_package(inout uint4 block, int2x3 endPoint[2], uint mode_type, uint partition_index) // for mode 1 - 10 +{ + block.xy = 0; + block.z &= 0xFFFC0000; + + //block.z |= (partition_index & 0x1f) << 13; + + if (mode_type == candidateModeFlag[0]) + { + /*block.x = candidateModeMemory[0]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x00007FE0 ) | ( ( endPoint[0][0].g << 15 ) & 0x01FF8000 ) | ( ( endPoint[0][0].b << 25 ) & 0xFE000000 ); + block.x |= ( endPoint[1][0].g >> 2 ) & 0x00000004; + block.x |= ( endPoint[1][0].b >> 1 ) & 0x00000008; + block.x |= endPoint[1][1].b & 0x00000010; + block.y |= ( ( endPoint[0][0].b >> 7 ) & 0x00000007 ); + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x000000F8 ) | ( ( endPoint[0][1].g << 13 ) & 0x0003E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x0F800000 ); + block.yz |= ( endPoint[1][0].gr << uint2(9, 1) ) & uint2(0x00001E00, 0x0000003E); + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.y |= ( ( endPoint[1][1].g << 4 ) & 0x00000100 ); + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00000F80); + block.yz |= ( ( endPoint[1][1].b << uint2(27, 9) ) & uint2(0x10000000, 0x00001000) ) | ( ( endPoint[1][1].b << uint2(18, 4) ) & uint2(0x00040000, 0x00000040) ); + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001;*/ + + block.x |= ((candidateModeMemory[0] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[0] >> 1) & 1) << 1; + block.x |= ((endPoint[1][0].g >> 4) & 1) << 2; + block.x |= ((endPoint[1][0].b >> 4) & 1) << 3; + block.x |= ((endPoint[1][1].b >> 4) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0][0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0][0].r >> 7) & 1) << 12; + block.x |= ((endPoint[0][0].r >> 8) & 1) << 13; + block.x |= ((endPoint[0][0].r >> 9) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0][0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0][0].g >> 7) & 1) << 22; + block.x |= ((endPoint[0][0].g >> 8) & 1) << 23; + block.x |= ((endPoint[0][0].g >> 9) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0][0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0][0].b >> 7) & 1) << 0; + block.y |= ((endPoint[0][0].b >> 8) & 1) << 1; + block.y |= ((endPoint[0][0].b >> 9) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][1].r >> 4) & 1) << 7; + block.y |= ((endPoint[1][1].g >> 4) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][1].g >> 4) & 1) << 17; + block.y |= ((endPoint[1][1].b >> 0) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][1].b >> 4) & 1) << 27; + block.y |= ((endPoint[1][1].b >> 1) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][0].r >> 4) & 1) << 5; + block.z |= ((endPoint[1][1].b >> 2) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][1].r >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].b >> 3) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } + else if (mode_type == candidateModeFlag[1]) + { + /*block.x = candidateModeMemory[1]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x00000FE0 ) | ( ( endPoint[0][0].g << 15 ) & 0x003F8000 ) | ( ( endPoint[0][0].b << 25 ) & 0xFE000000 ); + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x000001F8 ) | ( ( endPoint[0][1].g << 13 ) & 0x0007E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x1F800000 ); + block.x |= ( ( endPoint[1][0].g >> 3 ) & 0x00000004 ) | ( ( endPoint[1][0].g << 20 ) & 0x01000000 ); + block.x |= ( endPoint[1][1].g >> 1 ) & 0x00000018; + block.x |= ( ( endPoint[1][1].b << 21 ) & 0x00800000 ) | ( ( endPoint[1][1].b << 12 ) & 0x00003000 ); + block.x |= ( ( endPoint[1][0].b << 17 ) & 0x00400000 ) | ( ( endPoint[1][0].b << 10 ) & 0x00004000 ); + block.yz |= ( endPoint[1][0].gr << uint2(9, 1) ) & uint2(0x00001E00, 0x0000007E); + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00001F80); + block.y |= ( ( endPoint[1][1].b >> 4 ) & 0x00000002 ) | ( ( endPoint[1][1].b >> 2 ) & 0x00000004 ) | ( ( endPoint[1][1].b >> 3 ) & 0x00000001 ); + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001;*/ + + block.x |= ((candidateModeMemory[1] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[1] >> 1) & 1) << 1; + block.x |= ((endPoint[1][0].g >> 5) & 1) << 2; + block.x |= ((endPoint[1][1].g >> 4) & 1) << 3; + block.x |= ((endPoint[1][1].g >> 5) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0][0].r >> 6) & 1) << 11; + block.x |= ((endPoint[1][1].b >> 0) & 1) << 12; + block.x |= ((endPoint[1][1].b >> 1) & 1) << 13; + block.x |= ((endPoint[1][0].b >> 4) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0][0].g >> 6) & 1) << 21; + block.x |= ((endPoint[1][0].b >> 5) & 1) << 22; + block.x |= ((endPoint[1][1].b >> 2) & 1) << 23; + block.x |= ((endPoint[1][0].g >> 4) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0][0].b >> 6) & 1) << 31; + block.y |= ((endPoint[1][1].b >> 3) & 1) << 0; + block.y |= ((endPoint[1][1].b >> 5) & 1) << 1; + block.y |= ((endPoint[1][1].b >> 4) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][1].r >> 4) & 1) << 7; + block.y |= ((endPoint[0][1].r >> 5) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][1].g >> 4) & 1) << 17; + block.y |= ((endPoint[0][1].g >> 5) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][1].b >> 4) & 1) << 27; + block.y |= ((endPoint[0][1].b >> 5) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][0].r >> 4) & 1) << 5; + block.z |= ((endPoint[1][0].r >> 5) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][1].r >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].r >> 5) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } + else if (mode_type == candidateModeFlag[2]) + { + /*block.x = candidateModeMemory[2]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x00007FE0 ) | ( ( endPoint[0][0].g << 15 ) & 0x01FF8000 ) | ( ( endPoint[0][0].b << 25 ) & 0xFE000000 ); + block.y |= ( endPoint[0][0].r >> 2 ) & 0x00000100; + block.y |= ( endPoint[0][0].g << 7 ) & 0x00020000; + block.y |= ( ( endPoint[0][0].b << 17 ) & 0x08000000 ) | ( ( endPoint[0][0].b >> 7 ) & 0x00000007 ); + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x000000F8 ) | ( ( endPoint[0][1].g << 13 ) & 0x0001E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x07800000 ); + block.yz |= ( endPoint[1][0].gr << uint2(9, 1) ) & uint2(0x00001E00, 0x0000003E); + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00000F80); + block.yz |= ( ( endPoint[1][1].b << uint2(27, 9) ) & uint2(0x10000000, 0x00001000) ) | ( ( endPoint[1][1].b << uint2(18, 4) ) & uint2(0x00040000, 0x00000040) ); + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001;*/ + + block.x |= ((candidateModeMemory[2] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[2] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[2] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[2] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[2] >> 4) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0][0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0][0].r >> 7) & 1) << 12; + block.x |= ((endPoint[0][0].r >> 8) & 1) << 13; + block.x |= ((endPoint[0][0].r >> 9) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0][0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0][0].g >> 7) & 1) << 22; + block.x |= ((endPoint[0][0].g >> 8) & 1) << 23; + block.x |= ((endPoint[0][0].g >> 9) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0][0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0][0].b >> 7) & 1) << 0; + block.y |= ((endPoint[0][0].b >> 8) & 1) << 1; + block.y |= ((endPoint[0][0].b >> 9) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][1].r >> 4) & 1) << 7; + block.y |= ((endPoint[0][0].r >> 10) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][0].g >> 10) & 1) << 17; + block.y |= ((endPoint[1][1].b >> 0) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][0].b >> 10) & 1) << 27; + block.y |= ((endPoint[1][1].b >> 1) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][0].r >> 4) & 1) << 5; + block.z |= ((endPoint[1][1].b >> 2) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][1].r >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].b >> 3) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } + else if (mode_type == candidateModeFlag[3]) + { + /*block.x = candidateModeMemory[3]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x00007FE0 ) | ( ( endPoint[0][0].g << 15 ) & 0x01FF8000 ) | ( ( endPoint[0][0].b << 25 ) & 0xFE000000 ); + block.y |= ( endPoint[0][0].r >> 3 ) & 0x00000080; + block.y |= ( endPoint[0][0].g << 8 ) & 0x00040000; + block.y |= ( ( endPoint[0][0].b << 17 ) & 0x08000000 ) | ( ( endPoint[0][0].b >> 7 ) & 0x00000007 ); + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x00000078 ) | ( ( endPoint[0][1].g << 13 ) & 0x0003E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x07800000 ); + block.yz |= ( endPoint[1][0].gr << uint2(9, 1) ) & uint2(0x00001E00, 0x0000001E); + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.y |= ( ( endPoint[1][1].g << 4 ) & 0x00000100 ); + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00000780); + block.yz |= ( endPoint[1][1].b << uint2(27, 9) ) & uint2(0x10000000, 0x00001000); + block.z |= ( ( endPoint[1][0].g << 7 ) & 0x00000800 ); + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001; + block.z |= ( endPoint[1][1].b << 4 ) & 0x00000040; + block.z |= ( endPoint[1][1].b << 5 ) & 0x00000020;*/ + + block.x |= ((candidateModeMemory[3] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[3] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[3] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[3] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[3] >> 4) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0][0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0][0].r >> 7) & 1) << 12; + block.x |= ((endPoint[0][0].r >> 8) & 1) << 13; + block.x |= ((endPoint[0][0].r >> 9) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0][0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0][0].g >> 7) & 1) << 22; + block.x |= ((endPoint[0][0].g >> 8) & 1) << 23; + block.x |= ((endPoint[0][0].g >> 9) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0][0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0][0].b >> 7) & 1) << 0; + block.y |= ((endPoint[0][0].b >> 8) & 1) << 1; + block.y |= ((endPoint[0][0].b >> 9) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][0].r >> 10) & 1) << 7; + block.y |= ((endPoint[1][1].g >> 4) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][1].g >> 4) & 1) << 17; + block.y |= ((endPoint[0][0].g >> 10) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][0].b >> 10) & 1) << 27; + block.y |= ((endPoint[1][1].b >> 1) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][1].b >> 0) & 1) << 5; + block.z |= ((endPoint[1][1].b >> 2) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][0].g >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].b >> 3) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } + else if (mode_type == candidateModeFlag[4]) + { + /*block.x = candidateModeMemory[4]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x00007FE0 ) | ( ( endPoint[0][0].g << 15 ) & 0x01FF8000 ) | ( ( endPoint[0][0].b << 25 ) & 0xFE000000 ); + block.y |= ( endPoint[0][0].r >> 3 ) & 0x00000080; + block.y |= ( endPoint[0][0].g << 7 ) & 0x00020000; + block.y |= ( ( endPoint[0][0].b << 18 ) & 0x10000000 ) | ( ( endPoint[0][0].b >> 7 ) & 0x00000007 ); + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x00000078 ) | ( ( endPoint[0][1].g << 13 ) & 0x0001E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x0F800000 ); + block.y |= ( ( endPoint[1][0].g << 9 ) & 0x00001E00 ) | ( ( endPoint[1][0].b << 4 ) & 0x00000100 ); + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00000780); + block.yz |= ( endPoint[1][1].b << uint2(18, 4) ) & uint2(0x00040000, 0x00000060); + block.z |= ( endPoint[1][0].r << 1 ) & 0x0000001E; + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001; + block.z |= ( ( endPoint[1][1].b << 7 ) & 0x00000800 ) | ( ( endPoint[1][1].b << 9 ) & 0x00001000 );*/ + + block.x |= ((candidateModeMemory[4] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[4] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[4] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[4] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[4] >> 4) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0][0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0][0].r >> 7) & 1) << 12; + block.x |= ((endPoint[0][0].r >> 8) & 1) << 13; + block.x |= ((endPoint[0][0].r >> 9) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0][0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0][0].g >> 7) & 1) << 22; + block.x |= ((endPoint[0][0].g >> 8) & 1) << 23; + block.x |= ((endPoint[0][0].g >> 9) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0][0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0][0].b >> 7) & 1) << 0; + block.y |= ((endPoint[0][0].b >> 8) & 1) << 1; + block.y |= ((endPoint[0][0].b >> 9) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][0].r >> 10) & 1) << 7; + block.y |= ((endPoint[1][0].b >> 4) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][0].g >> 10) & 1) << 17; + block.y |= ((endPoint[1][1].b >> 0) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][1].b >> 4) & 1) << 27; + block.y |= ((endPoint[0][0].b >> 10) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][1].b >> 1) & 1) << 5; + block.z |= ((endPoint[1][1].b >> 2) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][1].b >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].b >> 3) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } + else if (mode_type == candidateModeFlag[5]) + { + /*block.x = candidateModeMemory[5]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x00003FE0 ) | ( ( endPoint[0][0].g << 15 ) & 0x00FF8000 ) | ( ( endPoint[0][0].b << 25 ) & 0xFE000000); + block.y |= ( endPoint[0][0].b >> 7 ) & 0x00000003; + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x000000F8 ) | ( ( endPoint[0][1].g << 13 ) & 0x0003E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x0F800000 ); + block.x |= ( ( endPoint[1][0].g << 20 ) & 0x01000000 ) | ( ( endPoint[1][0].b << 10 ) & 0x00004000 ); + block.yz |= ( endPoint[1][0].gr << uint2(9, 1) ) & uint2(0x00001E00, 0x0000003E); + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.y |= ( ( endPoint[1][1].g << 4 ) & 0x00000100 ) | ( ( endPoint[1][1].b >> 2 ) & 0x00000004 ); + block.y |= ( ( endPoint[1][1].b << 27 ) & 0x10000000 ); + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00000F80); + block.yz |= ( endPoint[1][1].b << uint2(18, 4) ) & uint2(0x00040000, 0x00000040); + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001; + block.z |= ( ( endPoint[1][1].b << 9 ) & 0x00001000 );*/ + + block.x |= ((candidateModeMemory[5] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[5] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[5] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[5] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[5] >> 4) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0][0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0][0].r >> 7) & 1) << 12; + block.x |= ((endPoint[0][0].r >> 8) & 1) << 13; + block.x |= ((endPoint[1][0].b >> 4) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0][0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0][0].g >> 7) & 1) << 22; + block.x |= ((endPoint[0][0].g >> 8) & 1) << 23; + block.x |= ((endPoint[1][0].g >> 4) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0][0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0][0].b >> 7) & 1) << 0; + block.y |= ((endPoint[0][0].b >> 8) & 1) << 1; + block.y |= ((endPoint[1][1].b >> 4) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][1].r >> 4) & 1) << 7; + block.y |= ((endPoint[1][1].g >> 4) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][1].g >> 4) & 1) << 17; + block.y |= ((endPoint[1][1].b >> 0) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][1].b >> 4) & 1) << 27; + block.y |= ((endPoint[1][1].b >> 1) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][0].r >> 4) & 1) << 5; + block.z |= ((endPoint[1][1].b >> 2) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][1].r >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].b >> 3) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } + else if (mode_type == candidateModeFlag[6]) + { + /*block.x = candidateModeMemory[6]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x00001FE0 ) | ( ( endPoint[0][0].g << 15 ) & 0x007F8000 ) | ( ( endPoint[0][0].b << 25 ) & 0xFE000000 ); + block.y |= ( endPoint[0][0].b >> 7 ) & 0x00000001; + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x000001F8 ) | ( ( endPoint[0][1].g << 13 ) & 0x0003E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x0F800000 ); + block.x |= ( ( endPoint[1][0].g << 20 ) & 0x01000000 ) | ( ( endPoint[1][0].b << 10 ) & 0x00004000); + block.x |= ( ( endPoint[1][1].g << 9 ) & 0x00002000 ) | ( ( endPoint[1][1].b << 21 ) & 0x00800000); + block.yz |= ( endPoint[1][0].gr << uint2(9, 1) ) & uint2(0x00001E00, 0x0000007E); + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00001F80); + block.y |= ( ( endPoint[1][1].b >> 2 ) & 0x00000006 ); + block.y |= ( ( endPoint[1][1].b << 27 ) & 0x10000000 ) | ( ( endPoint[1][1].b << 18 ) & 0x00040000 ); + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001;*/ + + block.x |= ((candidateModeMemory[6] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[6] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[6] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[6] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[6] >> 4) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0][0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0][0].r >> 7) & 1) << 12; + block.x |= ((endPoint[1][1].g >> 4) & 1) << 13; + block.x |= ((endPoint[1][0].b >> 4) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0][0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0][0].g >> 7) & 1) << 22; + block.x |= ((endPoint[1][1].b >> 2) & 1) << 23; + block.x |= ((endPoint[1][0].g >> 4) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0][0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0][0].b >> 7) & 1) << 0; + block.y |= ((endPoint[1][1].b >> 3) & 1) << 1; + block.y |= ((endPoint[1][1].b >> 4) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][1].r >> 4) & 1) << 7; + block.y |= ((endPoint[0][1].r >> 5) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][1].g >> 4) & 1) << 17; + block.y |= ((endPoint[1][1].b >> 0) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][1].b >> 4) & 1) << 27; + block.y |= ((endPoint[1][1].b >> 1) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][0].r >> 4) & 1) << 5; + block.z |= ((endPoint[1][0].r >> 5) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][1].r >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].r >> 5) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } + else if (mode_type == candidateModeFlag[7]) + { + /*block.x = candidateModeMemory[7]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x00001FE0 ) | ( ( endPoint[0][0].g << 15 ) & 0x007F8000 ) | ( ( endPoint[0][0].b << 25 ) & 0xFE000000 ); + block.y |= ( endPoint[0][0].b >> 7 ) & 0x00000001; + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x000000F8 ) | ( ( endPoint[0][1].g << 13 ) & 0x0007E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x0F800000 ); + block.x |= ( ( endPoint[1][0].g << 20 ) & 0x01000000 ) | ( ( endPoint[1][0].b << 10 ) & 0x00004000 ); + block.x |= ( ( endPoint[1][0].g << 18 ) & 0x00800000 ); + block.x |= ( ( endPoint[1][1].b << 13 ) & 0x00002000 ); + block.yz |= ( endPoint[1][0].gr << uint2(9, 1) ) & uint2(0x00001E00, 0x0000003E); + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00000F80); + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.y |= ( ( endPoint[1][1].g >> 4 ) & 0x00000002 ) | ( ( endPoint[1][1].g << 4 ) & 0x00000100 ) | ( ( endPoint[1][1].b >> 2 ) & 0x00000004 ); + block.y |= ( endPoint[1][1].b << 27 ) & 0x10000000; + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001; + block.z |= ( ( endPoint[1][1].b << 9 ) & 0x00001000 ) | ( ( endPoint[1][1].b << 4 ) & 0x00000040 );*/ + + block.x |= ((candidateModeMemory[7] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[7] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[7] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[7] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[7] >> 4) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0][0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0][0].r >> 7) & 1) << 12; + block.x |= ((endPoint[1][1].b >> 0) & 1) << 13; + block.x |= ((endPoint[1][0].b >> 4) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0][0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0][0].g >> 7) & 1) << 22; + block.x |= ((endPoint[1][0].g >> 5) & 1) << 23; + block.x |= ((endPoint[1][0].g >> 4) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0][0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0][0].b >> 7) & 1) << 0; + block.y |= ((endPoint[1][1].g >> 5) & 1) << 1; + block.y |= ((endPoint[1][1].b >> 4) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][1].r >> 4) & 1) << 7; + block.y |= ((endPoint[1][1].g >> 4) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][1].g >> 4) & 1) << 17; + block.y |= ((endPoint[0][1].g >> 5) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][1].b >> 4) & 1) << 27; + block.y |= ((endPoint[1][1].b >> 1) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][0].r >> 4) & 1) << 5; + block.z |= ((endPoint[1][1].b >> 2) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][1].r >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].b >> 3) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } + else if (mode_type == candidateModeFlag[8]) + { + /*block.x = candidateModeMemory[8]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x00001FE0 ) | ( ( endPoint[0][0].g << 15 ) & 0x007F8000 ) | ( ( endPoint[0][0].b << 25 ) & 0xFE000000 ); + block.y |= ( endPoint[0][0].b >> 7 ) & 0x00000001; + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x000000F8 ) | ( ( endPoint[0][1].g << 13 ) & 0x0003E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x1F800000 ); + block.x |= ( ( endPoint[1][0].g << 20 ) & 0x01000000 ) | ( ( endPoint[1][0].b << 10 ) & 0x00004000 ); + block.x |= ( ( endPoint[1][0].b << 18 ) & 0x00800000 ); + block.x |= ( endPoint[1][1].b << 12 ) & 0x00002000; + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.y |= ( ( endPoint[1][1].g << 4 ) & 0x00000100 ) | ( ( endPoint[1][1].b >> 4 ) & 0x00000002 ) | ( ( endPoint[1][1].b >> 2 ) & 0x00000004 ); + block.yz |= ( endPoint[1][0].gr << uint2(9, 1) ) & uint2(0x00001E00, 0x0000003E); + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00000F80); + block.y |= ( endPoint[1][1].b << 18 ) & 0x00040000; + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001; + block.z |= ( ( endPoint[1][1].b << 9 ) & 0x00001000 ) | ( ( endPoint[1][1].b << 4 ) & 0x00000040 );*/ + + block.x |= ((candidateModeMemory[8] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[8] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[8] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[8] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[8] >> 4) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0][0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0][0].r >> 7) & 1) << 12; + block.x |= ((endPoint[1][1].b >> 1) & 1) << 13; + block.x |= ((endPoint[1][0].b >> 4) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0][0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0][0].g >> 7) & 1) << 22; + block.x |= ((endPoint[1][0].b >> 5) & 1) << 23; + block.x |= ((endPoint[1][0].g >> 4) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0][0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0][0].b >> 7) & 1) << 0; + block.y |= ((endPoint[1][1].b >> 5) & 1) << 1; + block.y |= ((endPoint[1][1].b >> 4) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][1].r >> 4) & 1) << 7; + block.y |= ((endPoint[1][1].g >> 4) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][1].g >> 4) & 1) << 17; + block.y |= ((endPoint[1][1].b >> 0) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][1].b >> 4) & 1) << 27; + block.y |= ((endPoint[0][1].b >> 5) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][0].r >> 4) & 1) << 5; + block.z |= ((endPoint[1][1].b >> 2) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][1].r >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].b >> 3) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } + else if (mode_type == candidateModeFlag[9]) + { + /*block.x = candidateModeMemory[9]; + block.x |= ( ( endPoint[0][0].r << 5 ) & 0x000007E0 ) | ( ( endPoint[0][0].g << 15 ) & 0x001F8000 ) | ( ( endPoint[0][0].b << 25 ) & 0x7E000000 ); + block.y |= ( ( endPoint[0][1].r << 3 ) & 0x000001F8 ) | ( ( endPoint[0][1].g << 13 ) & 0x0007E000 ) | ( ( endPoint[0][1].b << 23 ) & 0x1F800000 ); + block.x |= ( ( endPoint[1][0].g << 16 ) & 0x00200000 ) | ( ( endPoint[1][0].g << 20 ) & 0x01000000 ); + block.x |= ( ( endPoint[1][0].b << 17 ) & 0x00400000 ) | ( ( endPoint[1][0].b << 10 ) & 0x00004000 ); + block.x |= ( ( endPoint[1][1].b << 21 ) & 0x00800000 ) | ( ( endPoint[1][1].b << 12 ) & 0x00003000 ); + block.x |= ( ( endPoint[1][1].g << 26 ) & 0x80000000 ) | ( ( endPoint[1][1].g << 7 ) & 0x00000800 ); + block.yz |= ( endPoint[1][0].gr << uint2(9, 1) ) & uint2(0x00001E00, 0x0000007E); + block.yz |= ( endPoint[1][1].gr << uint2(19, 7) ) & uint2(0x00780000, 0x00001F80); + block.y |= ( endPoint[1][0].b << 29 ) & 0xE0000000; + block.y |= ( ( endPoint[1][1].b >> 4 ) & 0x00000002 ) | ( ( endPoint[1][1].b >> 2 ) & 0x00000004 ) | ( ( endPoint[1][1].b >> 3 ) & 0x00000001 ); + block.z |= ( endPoint[1][0].b >> 3 ) & 0x00000001;*/ + + block.x |= ((candidateModeMemory[9] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[9] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[9] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[9] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[9] >> 4) & 1) << 4; + block.x |= ((endPoint[0][0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0][0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0][0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0][0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0][0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0][0].r >> 5) & 1) << 10; + block.x |= ((endPoint[1][1].g >> 4) & 1) << 11; + block.x |= ((endPoint[1][1].b >> 0) & 1) << 12; + block.x |= ((endPoint[1][1].b >> 1) & 1) << 13; + block.x |= ((endPoint[1][0].b >> 4) & 1) << 14; + block.x |= ((endPoint[0][0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0][0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0][0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0][0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0][0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0][0].g >> 5) & 1) << 20; + block.x |= ((endPoint[1][0].g >> 5) & 1) << 21; + block.x |= ((endPoint[1][0].b >> 5) & 1) << 22; + block.x |= ((endPoint[1][1].b >> 2) & 1) << 23; + block.x |= ((endPoint[1][0].g >> 4) & 1) << 24; + block.x |= ((endPoint[0][0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0][0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0][0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0][0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0][0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0][0].b >> 5) & 1) << 30; + block.x |= ((endPoint[1][1].g >> 5) & 1) << 31; + block.y |= ((endPoint[1][1].b >> 3) & 1) << 0; + block.y |= ((endPoint[1][1].b >> 5) & 1) << 1; + block.y |= ((endPoint[1][1].b >> 4) & 1) << 2; + block.y |= ((endPoint[0][1].r >> 0) & 1) << 3; + block.y |= ((endPoint[0][1].r >> 1) & 1) << 4; + block.y |= ((endPoint[0][1].r >> 2) & 1) << 5; + block.y |= ((endPoint[0][1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0][1].r >> 4) & 1) << 7; + block.y |= ((endPoint[0][1].r >> 5) & 1) << 8; + block.y |= ((endPoint[1][0].g >> 0) & 1) << 9; + block.y |= ((endPoint[1][0].g >> 1) & 1) << 10; + block.y |= ((endPoint[1][0].g >> 2) & 1) << 11; + block.y |= ((endPoint[1][0].g >> 3) & 1) << 12; + block.y |= ((endPoint[0][1].g >> 0) & 1) << 13; + block.y |= ((endPoint[0][1].g >> 1) & 1) << 14; + block.y |= ((endPoint[0][1].g >> 2) & 1) << 15; + block.y |= ((endPoint[0][1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0][1].g >> 4) & 1) << 17; + block.y |= ((endPoint[0][1].g >> 5) & 1) << 18; + block.y |= ((endPoint[1][1].g >> 0) & 1) << 19; + block.y |= ((endPoint[1][1].g >> 1) & 1) << 20; + block.y |= ((endPoint[1][1].g >> 2) & 1) << 21; + block.y |= ((endPoint[1][1].g >> 3) & 1) << 22; + block.y |= ((endPoint[0][1].b >> 0) & 1) << 23; + block.y |= ((endPoint[0][1].b >> 1) & 1) << 24; + block.y |= ((endPoint[0][1].b >> 2) & 1) << 25; + block.y |= ((endPoint[0][1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0][1].b >> 4) & 1) << 27; + block.y |= ((endPoint[0][1].b >> 5) & 1) << 28; + block.y |= ((endPoint[1][0].b >> 0) & 1) << 29; + block.y |= ((endPoint[1][0].b >> 1) & 1) << 30; + block.y |= ((endPoint[1][0].b >> 2) & 1) << 31; + block.z |= ((endPoint[1][0].b >> 3) & 1) << 0; + block.z |= ((endPoint[1][0].r >> 0) & 1) << 1; + block.z |= ((endPoint[1][0].r >> 1) & 1) << 2; + block.z |= ((endPoint[1][0].r >> 2) & 1) << 3; + block.z |= ((endPoint[1][0].r >> 3) & 1) << 4; + block.z |= ((endPoint[1][0].r >> 4) & 1) << 5; + block.z |= ((endPoint[1][0].r >> 5) & 1) << 6; + block.z |= ((endPoint[1][1].r >> 0) & 1) << 7; + block.z |= ((endPoint[1][1].r >> 1) & 1) << 8; + block.z |= ((endPoint[1][1].r >> 2) & 1) << 9; + block.z |= ((endPoint[1][1].r >> 3) & 1) << 10; + block.z |= ((endPoint[1][1].r >> 4) & 1) << 11; + block.z |= ((endPoint[1][1].r >> 5) & 1) << 12; + block.z |= ((partition_index >> 0) & 1) << 13; + block.z |= ((partition_index >> 1) & 1) << 14; + block.z |= ((partition_index >> 2) & 1) << 15; + block.z |= ((partition_index >> 3) & 1) << 16; + block.z |= ((partition_index >> 4) & 1) << 17; + } +} +void block_package(inout uint4 block, int2x3 endPoint, uint mode_type) // for mode 11 - 14 +{ + /*block.x = ( ( endPoint[0].r << 5 ) & 0x00007FE0 ) | ( ( endPoint[0].g << 15 ) & 0x01FF8000 ) | ( ( endPoint[0].b << 25 ) & 0xFE000000 ); + block.y |= ( endPoint[0].b >> 7 ) & 0x00000007;*/ + + block.xy = 0; + block.z &= 0xFFFFFFFE; + + + if (mode_type == candidateModeFlag[10]) + { + /* block.x |= candidateModeMemory[10]; + block.y |= ( ( endPoint[1].r << 3 ) & 0x00001FF8 ) | ( ( endPoint[1].g << 13 ) & 0x007FE000 ) | ( ( endPoint[1].b << 23 ) & 0xFF800000 ); + block.z |= ( endPoint[1].b >> 9 ) & 0x00000001;*/ + + block.x |= ((candidateModeMemory[10] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[10] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[10] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[10] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[10] >> 4) & 1) << 4; + block.x |= ((endPoint[0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0].r >> 7) & 1) << 12; + block.x |= ((endPoint[0].r >> 8) & 1) << 13; + block.x |= ((endPoint[0].r >> 9) & 1) << 14; + block.x |= ((endPoint[0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0].g >> 7) & 1) << 22; + block.x |= ((endPoint[0].g >> 8) & 1) << 23; + block.x |= ((endPoint[0].g >> 9) & 1) << 24; + block.x |= ((endPoint[0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0].b >> 7) & 1) << 0; + block.y |= ((endPoint[0].b >> 8) & 1) << 1; + block.y |= ((endPoint[0].b >> 9) & 1) << 2; + block.y |= ((endPoint[1].r >> 0) & 1) << 3; + block.y |= ((endPoint[1].r >> 1) & 1) << 4; + block.y |= ((endPoint[1].r >> 2) & 1) << 5; + block.y |= ((endPoint[1].r >> 3) & 1) << 6; + block.y |= ((endPoint[1].r >> 4) & 1) << 7; + block.y |= ((endPoint[1].r >> 5) & 1) << 8; + block.y |= ((endPoint[1].r >> 6) & 1) << 9; + block.y |= ((endPoint[1].r >> 7) & 1) << 10; + block.y |= ((endPoint[1].r >> 8) & 1) << 11; + block.y |= ((endPoint[1].r >> 9) & 1) << 12; + block.y |= ((endPoint[1].g >> 0) & 1) << 13; + block.y |= ((endPoint[1].g >> 1) & 1) << 14; + block.y |= ((endPoint[1].g >> 2) & 1) << 15; + block.y |= ((endPoint[1].g >> 3) & 1) << 16; + block.y |= ((endPoint[1].g >> 4) & 1) << 17; + block.y |= ((endPoint[1].g >> 5) & 1) << 18; + block.y |= ((endPoint[1].g >> 6) & 1) << 19; + block.y |= ((endPoint[1].g >> 7) & 1) << 20; + block.y |= ((endPoint[1].g >> 8) & 1) << 21; + block.y |= ((endPoint[1].g >> 9) & 1) << 22; + block.y |= ((endPoint[1].b >> 0) & 1) << 23; + block.y |= ((endPoint[1].b >> 1) & 1) << 24; + block.y |= ((endPoint[1].b >> 2) & 1) << 25; + block.y |= ((endPoint[1].b >> 3) & 1) << 26; + block.y |= ((endPoint[1].b >> 4) & 1) << 27; + block.y |= ((endPoint[1].b >> 5) & 1) << 28; + block.y |= ((endPoint[1].b >> 6) & 1) << 29; + block.y |= ((endPoint[1].b >> 7) & 1) << 30; + block.y |= ((endPoint[1].b >> 8) & 1) << 31; + block.z |= ((endPoint[1].b >> 9) & 1) << 0; + } + else if (mode_type == candidateModeFlag[11]) + { + /*block.x |= candidateModeMemory[11]; + block.y |= ( ( endPoint[0].r << 2 ) & 0x00001000 ) | ( ( endPoint[0].g << 12 ) & 0x00400000 ); + block.y |= ( ( endPoint[1].r << 3 ) & 0x00000FF8 ) | ( ( endPoint[1].g << 13 ) & 0x003FE000 ) | ( ( endPoint[1].b << 23 ) & 0xFF800000 ); + block.z |= ( endPoint[0].b >> 10 ) & 0x00000001;*/ + + block.x |= ((candidateModeMemory[11] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[11] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[11] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[11] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[11] >> 4) & 1) << 4; + block.x |= ((endPoint[0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0].r >> 7) & 1) << 12; + block.x |= ((endPoint[0].r >> 8) & 1) << 13; + block.x |= ((endPoint[0].r >> 9) & 1) << 14; + block.x |= ((endPoint[0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0].g >> 7) & 1) << 22; + block.x |= ((endPoint[0].g >> 8) & 1) << 23; + block.x |= ((endPoint[0].g >> 9) & 1) << 24; + block.x |= ((endPoint[0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0].b >> 7) & 1) << 0; + block.y |= ((endPoint[0].b >> 8) & 1) << 1; + block.y |= ((endPoint[0].b >> 9) & 1) << 2; + block.y |= ((endPoint[1].r >> 0) & 1) << 3; + block.y |= ((endPoint[1].r >> 1) & 1) << 4; + block.y |= ((endPoint[1].r >> 2) & 1) << 5; + block.y |= ((endPoint[1].r >> 3) & 1) << 6; + block.y |= ((endPoint[1].r >> 4) & 1) << 7; + block.y |= ((endPoint[1].r >> 5) & 1) << 8; + block.y |= ((endPoint[1].r >> 6) & 1) << 9; + block.y |= ((endPoint[1].r >> 7) & 1) << 10; + block.y |= ((endPoint[1].r >> 8) & 1) << 11; + block.y |= ((endPoint[0].r >> 10) & 1) << 12; + block.y |= ((endPoint[1].g >> 0) & 1) << 13; + block.y |= ((endPoint[1].g >> 1) & 1) << 14; + block.y |= ((endPoint[1].g >> 2) & 1) << 15; + block.y |= ((endPoint[1].g >> 3) & 1) << 16; + block.y |= ((endPoint[1].g >> 4) & 1) << 17; + block.y |= ((endPoint[1].g >> 5) & 1) << 18; + block.y |= ((endPoint[1].g >> 6) & 1) << 19; + block.y |= ((endPoint[1].g >> 7) & 1) << 20; + block.y |= ((endPoint[1].g >> 8) & 1) << 21; + block.y |= ((endPoint[0].g >> 10) & 1) << 22; + block.y |= ((endPoint[1].b >> 0) & 1) << 23; + block.y |= ((endPoint[1].b >> 1) & 1) << 24; + block.y |= ((endPoint[1].b >> 2) & 1) << 25; + block.y |= ((endPoint[1].b >> 3) & 1) << 26; + block.y |= ((endPoint[1].b >> 4) & 1) << 27; + block.y |= ((endPoint[1].b >> 5) & 1) << 28; + block.y |= ((endPoint[1].b >> 6) & 1) << 29; + block.y |= ((endPoint[1].b >> 7) & 1) << 30; + block.y |= ((endPoint[1].b >> 8) & 1) << 31; + block.z |= ((endPoint[0].b >> 10) & 1) << 0; + } + else if (mode_type == candidateModeFlag[12])// violate the spec in [0].low + { + /*block.x |= candidateModeMemory[12]; + block.y |= ( ( endPoint[0].r << 2 ) & 0x00001000 ) | ( ( endPoint[0].g << 12 ) & 0x00400000 ); + block.y |= ( ( endPoint[0].r << 0 ) & 0x00000800 ) | ( ( endPoint[0].g << 10 ) & 0x00200000 ); + block.y |= ( endPoint[0].b << 20 ) & 0x80000000; + block.y |= ( ( endPoint[1].r << 3 ) & 0x000007F8 ) | ( ( endPoint[1].g << 13 ) & 0x001FE000 ) | ( ( endPoint[1].b << 23 ) & 0x7F800000 ); + block.z |= ( endPoint[0].b >> 10 ) & 0x00000001;*/ + + block.x |= ((candidateModeMemory[12] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[12] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[12] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[12] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[12] >> 4) & 1) << 4; + block.x |= ((endPoint[0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0].r >> 7) & 1) << 12; + block.x |= ((endPoint[0].r >> 8) & 1) << 13; + block.x |= ((endPoint[0].r >> 9) & 1) << 14; + block.x |= ((endPoint[0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0].g >> 7) & 1) << 22; + block.x |= ((endPoint[0].g >> 8) & 1) << 23; + block.x |= ((endPoint[0].g >> 9) & 1) << 24; + block.x |= ((endPoint[0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0].b >> 7) & 1) << 0; + block.y |= ((endPoint[0].b >> 8) & 1) << 1; + block.y |= ((endPoint[0].b >> 9) & 1) << 2; + block.y |= ((endPoint[1].r >> 0) & 1) << 3; + block.y |= ((endPoint[1].r >> 1) & 1) << 4; + block.y |= ((endPoint[1].r >> 2) & 1) << 5; + block.y |= ((endPoint[1].r >> 3) & 1) << 6; + block.y |= ((endPoint[1].r >> 4) & 1) << 7; + block.y |= ((endPoint[1].r >> 5) & 1) << 8; + block.y |= ((endPoint[1].r >> 6) & 1) << 9; + block.y |= ((endPoint[1].r >> 7) & 1) << 10; + block.y |= ((endPoint[0].r >> 11) & 1) << 11; + block.y |= ((endPoint[0].r >> 10) & 1) << 12; + block.y |= ((endPoint[1].g >> 0) & 1) << 13; + block.y |= ((endPoint[1].g >> 1) & 1) << 14; + block.y |= ((endPoint[1].g >> 2) & 1) << 15; + block.y |= ((endPoint[1].g >> 3) & 1) << 16; + block.y |= ((endPoint[1].g >> 4) & 1) << 17; + block.y |= ((endPoint[1].g >> 5) & 1) << 18; + block.y |= ((endPoint[1].g >> 6) & 1) << 19; + block.y |= ((endPoint[1].g >> 7) & 1) << 20; + block.y |= ((endPoint[0].g >> 11) & 1) << 21; + block.y |= ((endPoint[0].g >> 10) & 1) << 22; + block.y |= ((endPoint[1].b >> 0) & 1) << 23; + block.y |= ((endPoint[1].b >> 1) & 1) << 24; + block.y |= ((endPoint[1].b >> 2) & 1) << 25; + block.y |= ((endPoint[1].b >> 3) & 1) << 26; + block.y |= ((endPoint[1].b >> 4) & 1) << 27; + block.y |= ((endPoint[1].b >> 5) & 1) << 28; + block.y |= ((endPoint[1].b >> 6) & 1) << 29; + block.y |= ((endPoint[1].b >> 7) & 1) << 30; + block.y |= ((endPoint[0].b >> 11) & 1) << 31; + block.z |= ((endPoint[0].b >> 10) & 1) << 0; + } + else if (mode_type == candidateModeFlag[13]) + { + /*block.x |= candidateModeMemory[13]; + block.y |= ( ( endPoint[0].r >> 8 ) & 0x00000080 ); + block.y |= ( ( endPoint[0].r >> 6 ) & 0x00000100 ); + block.y |= ( ( endPoint[0].r >> 4 ) & 0x00000200 ); + block.y |= ( ( endPoint[0].r >> 2 ) & 0x00000400 ); + block.y |= ( ( endPoint[0].r >> 0 ) & 0x00000800 ); + block.y |= ( ( endPoint[0].r << 2 ) & 0x00001000 ); + block.y |= ( ( endPoint[0].g << 2 ) & 0x00020000 ); + block.y |= ( ( endPoint[0].g << 4 ) & 0x00040000 ); + block.y |= ( ( endPoint[0].g << 6 ) & 0x00080000 ); + block.y |= ( ( endPoint[0].g << 8 ) & 0x00100000 ); + block.y |= ( ( endPoint[0].g << 10 ) & 0x00200000 ); + block.y |= ( ( endPoint[0].g << 12 ) & 0x00400000 ); + block.y |= ( ( endPoint[0].b << 12 ) & 0x08000000 ); + block.y |= ( ( endPoint[0].b << 14 ) & 0x10000000 ); + block.y |= ( ( endPoint[0].b << 16 ) & 0x20000000 ); + block.y |= ( ( endPoint[0].b << 18 ) & 0x40000000 ); + block.y |= ( ( endPoint[0].b << 20 ) & 0x80000000 ); + block.y |= ( ( endPoint[1].r << 3 ) & 0x00000078 ) | ( ( endPoint[1].g << 13 ) & 0x0001E000 ) | ( ( endPoint[1].b << 23 ) & 0x07800000 ); + block.z |= ( endPoint[0].b >> 10 ) & 0x00000001;*/ + + block.x |= ((candidateModeMemory[13] >> 0) & 1) << 0; + block.x |= ((candidateModeMemory[13] >> 1) & 1) << 1; + block.x |= ((candidateModeMemory[13] >> 2) & 1) << 2; + block.x |= ((candidateModeMemory[13] >> 3) & 1) << 3; + block.x |= ((candidateModeMemory[13] >> 4) & 1) << 4; + block.x |= ((endPoint[0].r >> 0) & 1) << 5; + block.x |= ((endPoint[0].r >> 1) & 1) << 6; + block.x |= ((endPoint[0].r >> 2) & 1) << 7; + block.x |= ((endPoint[0].r >> 3) & 1) << 8; + block.x |= ((endPoint[0].r >> 4) & 1) << 9; + block.x |= ((endPoint[0].r >> 5) & 1) << 10; + block.x |= ((endPoint[0].r >> 6) & 1) << 11; + block.x |= ((endPoint[0].r >> 7) & 1) << 12; + block.x |= ((endPoint[0].r >> 8) & 1) << 13; + block.x |= ((endPoint[0].r >> 9) & 1) << 14; + block.x |= ((endPoint[0].g >> 0) & 1) << 15; + block.x |= ((endPoint[0].g >> 1) & 1) << 16; + block.x |= ((endPoint[0].g >> 2) & 1) << 17; + block.x |= ((endPoint[0].g >> 3) & 1) << 18; + block.x |= ((endPoint[0].g >> 4) & 1) << 19; + block.x |= ((endPoint[0].g >> 5) & 1) << 20; + block.x |= ((endPoint[0].g >> 6) & 1) << 21; + block.x |= ((endPoint[0].g >> 7) & 1) << 22; + block.x |= ((endPoint[0].g >> 8) & 1) << 23; + block.x |= ((endPoint[0].g >> 9) & 1) << 24; + block.x |= ((endPoint[0].b >> 0) & 1) << 25; + block.x |= ((endPoint[0].b >> 1) & 1) << 26; + block.x |= ((endPoint[0].b >> 2) & 1) << 27; + block.x |= ((endPoint[0].b >> 3) & 1) << 28; + block.x |= ((endPoint[0].b >> 4) & 1) << 29; + block.x |= ((endPoint[0].b >> 5) & 1) << 30; + block.x |= ((endPoint[0].b >> 6) & 1) << 31; + block.y |= ((endPoint[0].b >> 7) & 1) << 0; + block.y |= ((endPoint[0].b >> 8) & 1) << 1; + block.y |= ((endPoint[0].b >> 9) & 1) << 2; + block.y |= ((endPoint[1].r >> 0) & 1) << 3; + block.y |= ((endPoint[1].r >> 1) & 1) << 4; + block.y |= ((endPoint[1].r >> 2) & 1) << 5; + block.y |= ((endPoint[1].r >> 3) & 1) << 6; + block.y |= ((endPoint[0].r >> 15) & 1) << 7; + block.y |= ((endPoint[0].r >> 14) & 1) << 8; + block.y |= ((endPoint[0].r >> 13) & 1) << 9; + block.y |= ((endPoint[0].r >> 12) & 1) << 10; + block.y |= ((endPoint[0].r >> 11) & 1) << 11; + block.y |= ((endPoint[0].r >> 10) & 1) << 12; + block.y |= ((endPoint[1].g >> 0) & 1) << 13; + block.y |= ((endPoint[1].g >> 1) & 1) << 14; + block.y |= ((endPoint[1].g >> 2) & 1) << 15; + block.y |= ((endPoint[1].g >> 3) & 1) << 16; + block.y |= ((endPoint[0].g >> 15) & 1) << 17; + block.y |= ((endPoint[0].g >> 14) & 1) << 18; + block.y |= ((endPoint[0].g >> 13) & 1) << 19; + block.y |= ((endPoint[0].g >> 12) & 1) << 20; + block.y |= ((endPoint[0].g >> 11) & 1) << 21; + block.y |= ((endPoint[0].g >> 10) & 1) << 22; + block.y |= ((endPoint[1].b >> 0) & 1) << 23; + block.y |= ((endPoint[1].b >> 1) & 1) << 24; + block.y |= ((endPoint[1].b >> 2) & 1) << 25; + block.y |= ((endPoint[1].b >> 3) & 1) << 26; + block.y |= ((endPoint[0].b >> 15) & 1) << 27; + block.y |= ((endPoint[0].b >> 14) & 1) << 28; + block.y |= ((endPoint[0].b >> 13) & 1) << 29; + block.y |= ((endPoint[0].b >> 12) & 1) << 30; + block.y |= ((endPoint[0].b >> 11) & 1) << 31; + block.z |= ((endPoint[0].b >> 10) & 1) << 0; + } +} diff --git a/external/DirectXTex/Shaders/BC7Encode.hlsl b/external/DirectXTex/Shaders/BC7Encode.hlsl new file mode 100644 index 00000000..eed55785 --- /dev/null +++ b/external/DirectXTex/Shaders/BC7Encode.hlsl @@ -0,0 +1,1932 @@ +//-------------------------------------------------------------------------------------- +// File: BC7Encode.hlsl +// +// The Compute Shader for BC7 Encoder +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +//-------------------------------------------------------------------------------------- + +#define REF_DEVICE + +#define CHAR_LENGTH 8 +#define NCHANNELS 4 +#define BC7_UNORM 98 +#define MAX_UINT 0xFFFFFFFF +#define MIN_UINT 0 + +static const uint candidateSectionBit[64] = //Associated to partition 0-63 +{ + 0xCCCC, 0x8888, 0xEEEE, 0xECC8, + 0xC880, 0xFEEC, 0xFEC8, 0xEC80, + 0xC800, 0xFFEC, 0xFE80, 0xE800, + 0xFFE8, 0xFF00, 0xFFF0, 0xF000, + 0xF710, 0x008E, 0x7100, 0x08CE, + 0x008C, 0x7310, 0x3100, 0x8CCE, + 0x088C, 0x3110, 0x6666, 0x366C, + 0x17E8, 0x0FF0, 0x718E, 0x399C, + 0xaaaa, 0xf0f0, 0x5a5a, 0x33cc, + 0x3c3c, 0x55aa, 0x9696, 0xa55a, + 0x73ce, 0x13c8, 0x324c, 0x3bdc, + 0x6996, 0xc33c, 0x9966, 0x660, + 0x272, 0x4e4, 0x4e40, 0x2720, + 0xc936, 0x936c, 0x39c6, 0x639c, + 0x9336, 0x9cc6, 0x817e, 0xe718, + 0xccf0, 0xfcc, 0x7744, 0xee22, +}; +static const uint candidateSectionBit2[64] = //Associated to partition 64-127 +{ + 0xaa685050, 0x6a5a5040, 0x5a5a4200, 0x5450a0a8, + 0xa5a50000, 0xa0a05050, 0x5555a0a0, 0x5a5a5050, + 0xaa550000, 0xaa555500, 0xaaaa5500, 0x90909090, + 0x94949494, 0xa4a4a4a4, 0xa9a59450, 0x2a0a4250, + 0xa5945040, 0x0a425054, 0xa5a5a500, 0x55a0a0a0, + 0xa8a85454, 0x6a6a4040, 0xa4a45000, 0x1a1a0500, + 0x0050a4a4, 0xaaa59090, 0x14696914, 0x69691400, + 0xa08585a0, 0xaa821414, 0x50a4a450, 0x6a5a0200, + 0xa9a58000, 0x5090a0a8, 0xa8a09050, 0x24242424, + 0x00aa5500, 0x24924924, 0x24499224, 0x50a50a50, + 0x500aa550, 0xaaaa4444, 0x66660000, 0xa5a0a5a0, + 0x50a050a0, 0x69286928, 0x44aaaa44, 0x66666600, + 0xaa444444, 0x54a854a8, 0x95809580, 0x96969600, + 0xa85454a8, 0x80959580, 0xaa141414, 0x96960000, + 0xaaaa1414, 0xa05050a0, 0xa0a5a5a0, 0x96000000, + 0x40804080, 0xa9a8a9a8, 0xaaaaaa44, 0x2a4a5254, +}; +static const uint2 candidateFixUpIndex1D[128] = +{ + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{ 2, 0},{ 8, 0},{ 2, 0}, + { 2, 0},{ 8, 0},{ 8, 0},{15, 0}, + { 2, 0},{ 8, 0},{ 2, 0},{ 2, 0}, + { 8, 0},{ 8, 0},{ 2, 0},{ 2, 0}, + + {15, 0},{15, 0},{ 6, 0},{ 8, 0}, + { 2, 0},{ 8, 0},{15, 0},{15, 0}, + { 2, 0},{ 8, 0},{ 2, 0},{ 2, 0}, + { 2, 0},{15, 0},{15, 0},{ 6, 0}, + { 6, 0},{ 2, 0},{ 6, 0},{ 8, 0}, + {15, 0},{15, 0},{ 2, 0},{ 2, 0}, + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{ 2, 0},{ 2, 0},{15, 0}, + //candidateFixUpIndex1D[i][1], i < 64 should not be used + + { 3,15},{ 3, 8},{15, 8},{15, 3}, + { 8,15},{ 3,15},{15, 3},{15, 8}, + { 8,15},{ 8,15},{ 6,15},{ 6,15}, + { 6,15},{ 5,15},{ 3,15},{ 3, 8}, + { 3,15},{ 3, 8},{ 8,15},{15, 3}, + { 3,15},{ 3, 8},{ 6,15},{10, 8}, + { 5, 3},{ 8,15},{ 8, 6},{ 6,10}, + { 8,15},{ 5,15},{15,10},{15, 8}, + + { 8,15},{15, 3},{ 3,15},{ 5,10}, + { 6,10},{10, 8},{ 8, 9},{15,10}, + {15, 6},{ 3,15},{15, 8},{ 5,15}, + {15, 3},{15, 6},{15, 6},{15, 8}, //The Spec doesn't mark the first fixed up index in this row, so I apply 15 for them, and seems correct + { 3,15},{15, 3},{ 5,15},{ 5,15}, + { 5,15},{ 8,15},{ 5,15},{10,15}, + { 5,15},{10,15},{ 8,15},{13,15}, + {15, 3},{12,15},{ 3,15},{ 3, 8}, +}; +static const uint2 candidateFixUpIndex1DOrdered[128] = //Same with candidateFixUpIndex1D but order the result when i >= 64 +{ + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{ 2, 0},{ 8, 0},{ 2, 0}, + { 2, 0},{ 8, 0},{ 8, 0},{15, 0}, + { 2, 0},{ 8, 0},{ 2, 0},{ 2, 0}, + { 8, 0},{ 8, 0},{ 2, 0},{ 2, 0}, + + {15, 0},{15, 0},{ 6, 0},{ 8, 0}, + { 2, 0},{ 8, 0},{15, 0},{15, 0}, + { 2, 0},{ 8, 0},{ 2, 0},{ 2, 0}, + { 2, 0},{15, 0},{15, 0},{ 6, 0}, + { 6, 0},{ 2, 0},{ 6, 0},{ 8, 0}, + {15, 0},{15, 0},{ 2, 0},{ 2, 0}, + {15, 0},{15, 0},{15, 0},{15, 0}, + {15, 0},{ 2, 0},{ 2, 0},{15, 0}, + //candidateFixUpIndex1DOrdered[i][1], i < 64 should not be used + + { 3,15},{ 3, 8},{ 8,15},{ 3,15}, + { 8,15},{ 3,15},{ 3,15},{ 8,15}, + { 8,15},{ 8,15},{ 6,15},{ 6,15}, + { 6,15},{ 5,15},{ 3,15},{ 3, 8}, + { 3,15},{ 3, 8},{ 8,15},{ 3,15}, + { 3,15},{ 3, 8},{ 6,15},{ 8,10}, + { 3, 5},{ 8,15},{ 6, 8},{ 6,10}, + { 8,15},{ 5,15},{10,15},{ 8,15}, + + { 8,15},{ 3,15},{ 3,15},{ 5,10}, + { 6,10},{ 8,10},{ 8, 9},{10,15}, + { 6,15},{ 3,15},{ 8,15},{ 5,15}, + { 3,15},{ 6,15},{ 6,15},{ 8,15}, //The Spec doesn't mark the first fixed up index in this row, so I apply 15 for them, and seems correct + { 3,15},{ 3,15},{ 5,15},{ 5,15}, + { 5,15},{ 8,15},{ 5,15},{10,15}, + { 5,15},{10,15},{ 8,15},{13,15}, + { 3,15},{12,15},{ 3,15},{ 3, 8}, +}; +//static const uint4x4 candidateRotation[4] = +//{ +// {1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}, +// {0,0,0,1},{0,1,0,0},{0,0,1,0},{1,0,0,0}, +// {1,0,0,0},{0,0,0,1},{0,0,1,0},{0,1,0,0}, +// {1,0,0,0},{0,1,0,0},{0,0,0,1},{0,0,1,0} +//}; +//static const uint2 candidateIndexPrec[8] = {{3,0},{3,0},{2,0},{2,0}, +// {2,3}, //color index and alpha index can exchange +// {2,2},{4,4},{2,2}}; + +static const uint aWeight[3][16] = { {0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64}, + {0, 9, 18, 27, 37, 46, 55, 64, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 21, 43, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }; + +//4 bit index: 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 +static const uint aStep[3][64] = { { 0, 0, 0, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 7, 7, 7, + 7, 8, 8, 8, 8, 9, 9, 9, + 9,10,10,10,10,10,11,11, + 11,11,12,12,12,12,13,13, + 13,13,14,14,14,14,15,15 }, + //3 bit index: 0, 9, 18, 27, 37, 46, 55, 64 + { 0,0,0,0,0,1,1,1, + 1,1,1,1,1,1,2,2, + 2,2,2,2,2,2,2,3, + 3,3,3,3,3,3,3,3, + 3,4,4,4,4,4,4,4, + 4,4,5,5,5,5,5,5, + 5,5,5,6,6,6,6,6, + 6,6,6,6,7,7,7,7 }, + //2 bit index: 0, 21, 43, 64 + { 0,0,0,0,0,0,0,0, + 0,0,0,1,1,1,1,1, + 1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1, + 1,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,3,3, + 3,3,3,3,3,3,3,3 } }; + +cbuffer cbCS : register(b0) +{ + uint g_tex_width; + uint g_num_block_x; + uint g_format; + uint g_mode_id; + uint g_start_block_id; + uint g_num_total_blocks; + float g_alpha_weight; +}; + +//Forward declaration +uint2x4 compress_endpoints0(inout uint2x4 endPoint, uint2 P); //Mode = 0 +uint2x4 compress_endpoints1(inout uint2x4 endPoint, uint2 P); //Mode = 1 +uint2x4 compress_endpoints2(inout uint2x4 endPoint); //Mode = 2 +uint2x4 compress_endpoints3(inout uint2x4 endPoint, uint2 P); //Mode = 3 +uint2x4 compress_endpoints7(inout uint2x4 endPoint, uint2 P); //Mode = 7 +uint2x4 compress_endpoints6(inout uint2x4 endPoint, uint2 P); //Mode = 6 +uint2x4 compress_endpoints4(inout uint2x4 endPoint); //Mode = 4 +uint2x4 compress_endpoints5(inout uint2x4 endPoint); //Mode = 5 + +void block_package0(out uint4 block, uint partition, uint threadBase); //Mode0 +void block_package1(out uint4 block, uint partition, uint threadBase); //Mode1 +void block_package2(out uint4 block, uint partition, uint threadBase); //Mode2 +void block_package3(out uint4 block, uint partition, uint threadBase); //Mode3 +void block_package4(out uint4 block, uint rotation, uint index_selector, uint threadBase); //Mode4 +void block_package5(out uint4 block, uint rotation, uint threadBase); //Mode5 +void block_package6(out uint4 block, uint threadBase); //Mode6 +void block_package7(out uint4 block, uint partition, uint threadBase); //Mode7 + + +void swap(inout uint4 lhs, inout uint4 rhs) +{ + uint4 tmp = lhs; + lhs = rhs; + rhs = tmp; +} +void swap(inout uint3 lhs, inout uint3 rhs) +{ + uint3 tmp = lhs; + lhs = rhs; + rhs = tmp; +} +void swap(inout uint lhs, inout uint rhs) +{ + uint tmp = lhs; + lhs = rhs; + rhs = tmp; +} + +uint ComputeError(in uint4 a, in uint4 b) +{ + return dot(a.rgb, b.rgb) + g_alpha_weight * a.a*b.a; +} + +void Ensure_A_Is_Larger(inout uint4 a, inout uint4 b) +{ + if (a.x < b.x) + swap(a.x, b.x); + if (a.y < b.y) + swap(a.y, b.y); + if (a.z < b.z) + swap(a.z, b.z); + if (a.w < b.w) + swap(a.w, b.w); +} + + +Texture2D g_Input : register(t0); +StructuredBuffer g_InBuff : register(t1); + +RWStructuredBuffer g_OutBuff : register(u0); + +#define THREAD_GROUP_SIZE 64 +#define BLOCK_SIZE_Y 4 +#define BLOCK_SIZE_X 4 +#define BLOCK_SIZE (BLOCK_SIZE_Y * BLOCK_SIZE_X) + +struct BufferShared +{ + uint4 pixel; + uint error; + uint mode; + uint partition; + uint index_selector; + uint rotation; + uint4 endPoint_low; + uint4 endPoint_high; + uint4 endPoint_low_quantized; + uint4 endPoint_high_quantized; +}; +groupshared BufferShared shared_temp[THREAD_GROUP_SIZE]; + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void TryMode456CS(uint GI : SV_GroupIndex, uint3 groupID : SV_GroupID) // mode 4 5 6 all have 1 subset per block, and fix-up index is always index 0 +{ + // we process 4 BC blocks per thread group + const uint MAX_USED_THREAD = 16; // pixels in a BC (block compressed) block + uint BLOCK_IN_GROUP = THREAD_GROUP_SIZE / MAX_USED_THREAD; // the number of BC blocks a thread group processes = 64 / 16 = 4 + uint blockInGroup = GI / MAX_USED_THREAD; // what BC block this thread is on within this thread group + uint blockID = g_start_block_id + groupID.x * BLOCK_IN_GROUP + blockInGroup; // what global BC block this thread is on + uint threadBase = blockInGroup * MAX_USED_THREAD; // the first id of the pixel in this BC block in this thread group + uint threadInBlock = GI - threadBase; // id of the pixel in this BC block + +#ifndef REF_DEVICE + if (blockID >= g_num_total_blocks) + { + return; + } +#endif + + uint block_y = blockID / g_num_block_x; + uint block_x = blockID - block_y * g_num_block_x; + uint base_x = block_x * BLOCK_SIZE_X; + uint base_y = block_y * BLOCK_SIZE_Y; + + if (threadInBlock < 16) + { + shared_temp[GI].pixel = clamp(uint4(g_Input.Load(uint3(base_x + threadInBlock % 4, base_y + threadInBlock / 4, 0)) * 255), 0, 255); + + shared_temp[GI].endPoint_low = shared_temp[GI].pixel; + shared_temp[GI].endPoint_high = shared_temp[GI].pixel; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 8) + { + shared_temp[GI].endPoint_low = min(shared_temp[GI].endPoint_low, shared_temp[GI + 8].endPoint_low); + shared_temp[GI].endPoint_high = max(shared_temp[GI].endPoint_high, shared_temp[GI + 8].endPoint_high); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 4) + { + shared_temp[GI].endPoint_low = min(shared_temp[GI].endPoint_low, shared_temp[GI + 4].endPoint_low); + shared_temp[GI].endPoint_high = max(shared_temp[GI].endPoint_high, shared_temp[GI + 4].endPoint_high); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 2) + { + shared_temp[GI].endPoint_low = min(shared_temp[GI].endPoint_low, shared_temp[GI + 2].endPoint_low); + shared_temp[GI].endPoint_high = max(shared_temp[GI].endPoint_high, shared_temp[GI + 2].endPoint_high); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 1) + { + shared_temp[GI].endPoint_low = min(shared_temp[GI].endPoint_low, shared_temp[GI + 1].endPoint_low); + shared_temp[GI].endPoint_high = max(shared_temp[GI].endPoint_high, shared_temp[GI + 1].endPoint_high); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + uint2x4 endPoint; + endPoint[0] = shared_temp[threadBase].endPoint_low; + endPoint[1] = shared_temp[threadBase].endPoint_high; + + uint error = 0xFFFFFFFF; + uint mode = 0; + uint index_selector = 0; + uint rotation = 0; + + uint2 indexPrec; + if (threadInBlock < 8) // all threads of threadInBlock < 8 will be working on trying out mode 4, since only mode 4 has index selector bit + { + if (0 == (threadInBlock & 1)) // thread 0, 2, 4, 6 + { + //2 represents 2bit index precision; 1 represents 3bit index precision + index_selector = 0; + indexPrec = uint2(2, 1); + } + else // thread 1, 3, 5, 7 + { + //2 represents 2bit index precision; 1 represents 3bit index precision + index_selector = 1; + indexPrec = uint2(1, 2); + } + } + else + { + //2 represents 2bit index precision + indexPrec = uint2(2, 2); + } + + uint4 pixel_r; + uint color_index; + uint alpha_index; + int4 span; + int2 span_norm_sqr; + int2 dotProduct; + if (threadInBlock < 12) // Try mode 4 5 in threads 0..11 + { + // mode 4 5 have component rotation + if ((threadInBlock < 2) || (8 == threadInBlock)) // rotation = 0 in thread 0, 1 + { + rotation = 0; + } + else if ((threadInBlock < 4) || (9 == threadInBlock)) // rotation = 1 in thread 2, 3 + { + endPoint[0].ra = endPoint[0].ar; + endPoint[1].ra = endPoint[1].ar; + + rotation = 1; + } + else if ((threadInBlock < 6) || (10 == threadInBlock)) // rotation = 2 in thread 4, 5 + { + endPoint[0].ga = endPoint[0].ag; + endPoint[1].ga = endPoint[1].ag; + + rotation = 2; + } + else if ((threadInBlock < 8) || (11 == threadInBlock)) // rotation = 3 in thread 6, 7 + { + endPoint[0].ba = endPoint[0].ab; + endPoint[1].ba = endPoint[1].ab; + + rotation = 3; + } + + if (threadInBlock < 8) // try mode 4 in threads 0..7 + { + // mode 4 thread distribution + // Thread 0 1 2 3 4 5 6 7 + // Rotation 0 0 1 1 2 2 3 3 + // Index selector 0 1 0 1 0 1 0 1 + + mode = 4; + compress_endpoints4(endPoint); + } + else // try mode 5 in threads 8..11 + { + // mode 5 thread distribution + // Thread 8 9 10 11 + // Rotation 0 1 2 3 + + mode = 5; + compress_endpoints5(endPoint); + } + + uint4 pixel = shared_temp[threadBase + 0].pixel; + if (1 == rotation) + { + pixel.ra = pixel.ar; + } + else if (2 == rotation) + { + pixel.ga = pixel.ag; + } + else if (3 == rotation) + { + pixel.ba = pixel.ab; + } + + span = endPoint[1] - endPoint[0]; + span_norm_sqr = uint2(dot(span.rgb, span.rgb), span.a * span.a); + + // in mode 4 5 6, end point 0 must be closer to pixel 0 than end point 1, because of the fix-up index is always index 0 + // TODO: this shouldn't be necessary here in error calculation + /* + dotProduct = int2( dot( span.rgb, pixel.rgb - endPoint[0].rgb ), span.a * ( pixel.a - endPoint[0].a ) ); + if ( span_norm_sqr.x > 0 && dotProduct.x > 0 && uint( dotProduct.x * 63.49999 ) > uint( 32 * span_norm_sqr.x ) ) + { + span.rgb = -span.rgb; + swap(endPoint[0].rgb, endPoint[1].rgb); + } + if ( span_norm_sqr.y > 0 && dotProduct.y > 0 && uint( dotProduct.y * 63.49999 ) > uint( 32 * span_norm_sqr.y ) ) + { + span.a = -span.a; + swap(endPoint[0].a, endPoint[1].a); + } + */ + + // should be the same as above + dotProduct = int2(dot(pixel.rgb - endPoint[0].rgb, pixel.rgb - endPoint[0].rgb), dot(pixel.rgb - endPoint[1].rgb, pixel.rgb - endPoint[1].rgb)); + if (dotProduct.x > dotProduct.y) + { + span.rgb = -span.rgb; + swap(endPoint[0].rgb, endPoint[1].rgb); + } + dotProduct = int2(dot(pixel.a - endPoint[0].a, pixel.a - endPoint[0].a), dot(pixel.a - endPoint[1].a, pixel.a - endPoint[1].a)); + if (dotProduct.x > dotProduct.y) + { + span.a = -span.a; + swap(endPoint[0].a, endPoint[1].a); + } + + error = 0; + for (uint i = 0; i < 16; i++) + { + pixel = shared_temp[threadBase + i].pixel; + if (1 == rotation) + { + pixel.ra = pixel.ar; + } + else if (2 == rotation) + { + pixel.ga = pixel.ag; + } + else if (3 == rotation) + { + pixel.ba = pixel.ab; + } + + dotProduct.x = dot(span.rgb, pixel.rgb - endPoint[0].rgb); + color_index = (span_norm_sqr.x <= 0 /*endPoint[0] == endPoint[1]*/ || dotProduct.x <= 0 /*pixel == endPoint[0]*/) ? 0 + : ((dotProduct.x < span_norm_sqr.x) ? aStep[indexPrec.x][uint(dotProduct.x * 63.49999 / span_norm_sqr.x)] : aStep[indexPrec.x][63]); + dotProduct.y = dot(span.a, pixel.a - endPoint[0].a); + alpha_index = (span_norm_sqr.y <= 0 || dotProduct.y <= 0) ? 0 + : ((dotProduct.y < span_norm_sqr.y) ? aStep[indexPrec.y][uint(dotProduct.y * 63.49999 / span_norm_sqr.y)] : aStep[indexPrec.y][63]); + + // the same color_index and alpha_index should be used for reconstruction, so this should be left commented out + /*if (index_selector) + { + swap(color_index, alpha_index); + }*/ + + pixel_r.rgb = ((64 - aWeight[indexPrec.x][color_index]) * endPoint[0].rgb + + aWeight[indexPrec.x][color_index] * endPoint[1].rgb + + 32) >> 6; + pixel_r.a = ((64 - aWeight[indexPrec.y][alpha_index]) * endPoint[0].a + + aWeight[indexPrec.y][alpha_index] * endPoint[1].a + + 32) >> 6; + + Ensure_A_Is_Larger(pixel_r, pixel); + pixel_r -= pixel; + if (1 == rotation) + { + pixel_r.ra = pixel_r.ar; + } + else if (2 == rotation) + { + pixel_r.ga = pixel_r.ag; + } + else if (3 == rotation) + { + pixel_r.ba = pixel_r.ab; + } + error += ComputeError(pixel_r, pixel_r); + } + } + else if (threadInBlock < 16) // Try mode 6 in threads 12..15, since in mode 4 5 6, only mode 6 has p bit + { + uint p = threadInBlock - 12; + + compress_endpoints6(endPoint, uint2(p >> 0, p >> 1) & 1); + + uint4 pixel = shared_temp[threadBase + 0].pixel; + + span = endPoint[1] - endPoint[0]; + span_norm_sqr = dot(span, span); + dotProduct = dot(span, pixel - endPoint[0]); + if (span_norm_sqr.x > 0 && dotProduct.x >= 0 && uint(dotProduct.x * 63.49999) > uint(32 * span_norm_sqr.x)) + { + span = -span; + swap(endPoint[0], endPoint[1]); + } + + error = 0; + for (uint i = 0; i < 16; i++) + { + pixel = shared_temp[threadBase + i].pixel; + + dotProduct.x = dot(span, pixel - endPoint[0]); + color_index = (span_norm_sqr.x <= 0 || dotProduct.x <= 0) ? 0 + : ((dotProduct.x < span_norm_sqr.x) ? aStep[0][uint(dotProduct.x * 63.49999 / span_norm_sqr.x)] : aStep[0][63]); + + pixel_r = ((64 - aWeight[0][color_index]) * endPoint[0] + + aWeight[0][color_index] * endPoint[1] + 32) >> 6; + + Ensure_A_Is_Larger(pixel_r, pixel); + pixel_r -= pixel; + error += ComputeError(pixel_r, pixel_r); + } + + mode = 6; + rotation = p; // Borrow rotation for p + } + + shared_temp[GI].error = error; + shared_temp[GI].mode = mode; + shared_temp[GI].index_selector = index_selector; + shared_temp[GI].rotation = rotation; + +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 8) + { + if (shared_temp[GI].error > shared_temp[GI + 8].error) + { + shared_temp[GI].error = shared_temp[GI + 8].error; + shared_temp[GI].mode = shared_temp[GI + 8].mode; + shared_temp[GI].index_selector = shared_temp[GI + 8].index_selector; + shared_temp[GI].rotation = shared_temp[GI + 8].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 4) + { + if (shared_temp[GI].error > shared_temp[GI + 4].error) + { + shared_temp[GI].error = shared_temp[GI + 4].error; + shared_temp[GI].mode = shared_temp[GI + 4].mode; + shared_temp[GI].index_selector = shared_temp[GI + 4].index_selector; + shared_temp[GI].rotation = shared_temp[GI + 4].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 2) + { + if (shared_temp[GI].error > shared_temp[GI + 2].error) + { + shared_temp[GI].error = shared_temp[GI + 2].error; + shared_temp[GI].mode = shared_temp[GI + 2].mode; + shared_temp[GI].index_selector = shared_temp[GI + 2].index_selector; + shared_temp[GI].rotation = shared_temp[GI + 2].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 1) + { + if (shared_temp[GI].error > shared_temp[GI + 1].error) + { + shared_temp[GI].error = shared_temp[GI + 1].error; + shared_temp[GI].mode = shared_temp[GI + 1].mode; + shared_temp[GI].index_selector = shared_temp[GI + 1].index_selector; + shared_temp[GI].rotation = shared_temp[GI + 1].rotation; + } + + g_OutBuff[blockID] = uint4(shared_temp[GI].error, (shared_temp[GI].index_selector << 31) | shared_temp[GI].mode, + 0, shared_temp[GI].rotation); // rotation is indeed rotation for mode 4 5. for mode 6, rotation is p bit + } +} + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void TryMode137CS(uint GI : SV_GroupIndex, uint3 groupID : SV_GroupID) // mode 1 3 7 all have 2 subsets per block +{ + const uint MAX_USED_THREAD = 64; + uint BLOCK_IN_GROUP = THREAD_GROUP_SIZE / MAX_USED_THREAD; + uint blockInGroup = GI / MAX_USED_THREAD; + uint blockID = g_start_block_id + groupID.x * BLOCK_IN_GROUP + blockInGroup; + uint threadBase = blockInGroup * MAX_USED_THREAD; + uint threadInBlock = GI - threadBase; + + uint block_y = blockID / g_num_block_x; + uint block_x = blockID - block_y * g_num_block_x; + uint base_x = block_x * BLOCK_SIZE_X; + uint base_y = block_y * BLOCK_SIZE_Y; + + if (threadInBlock < 16) + { + shared_temp[GI].pixel = clamp(uint4(g_Input.Load(uint3(base_x + threadInBlock % 4, base_y + threadInBlock / 4, 0)) * 255), 0, 255); + } + GroupMemoryBarrierWithGroupSync(); + + shared_temp[GI].error = 0xFFFFFFFF; + + uint4 pixel_r; + uint2x4 endPoint[2]; // endPoint[0..1 for subset id][0..1 for low and high in the subset] + uint2x4 endPointBackup[2]; + uint color_index; + if (threadInBlock < 64) + { + uint partition = threadInBlock; + + endPoint[0][0] = MAX_UINT; + endPoint[0][1] = MIN_UINT; + endPoint[1][0] = MAX_UINT; + endPoint[1][1] = MIN_UINT; + uint bits = candidateSectionBit[partition]; + for (uint i = 0; i < 16; i++) + { + uint4 pixel = shared_temp[threadBase + i].pixel; + if (((bits >> i) & 0x01) == 1) + { + endPoint[1][0] = min(endPoint[1][0], pixel); + endPoint[1][1] = max(endPoint[1][1], pixel); + } + else + { + endPoint[0][0] = min(endPoint[0][0], pixel); + endPoint[0][1] = max(endPoint[0][1], pixel); + } + } + + endPointBackup[0] = endPoint[0]; + endPointBackup[1] = endPoint[1]; + + uint max_p; + if (1 == g_mode_id) + { + // in mode 1, there is only one p bit per subset + max_p = 2; + } + else + { + // in mode 3 7, there are two p bits per subset, one for each end point + max_p = 4; + } + + uint final_p[2] = { 0, 0 }; + uint error[2] = { MAX_UINT, MAX_UINT }; + for (uint p = 0; p < max_p; p++) + { + endPoint[0] = endPointBackup[0]; + endPoint[1] = endPointBackup[1]; + + for (i = 0; i < 2; i++) // loop through 2 subsets + { + if (g_mode_id == 1) + { + compress_endpoints1(endPoint[i], p); + } + else if (g_mode_id == 3) + { + compress_endpoints3(endPoint[i], uint2(p, p >> 1) & 1); + } + else if (g_mode_id == 7) + { + compress_endpoints7(endPoint[i], uint2(p, p >> 1) & 1); + } + } + + int4 span[2]; + span[0] = endPoint[0][1] - endPoint[0][0]; + span[1] = endPoint[1][1] - endPoint[1][0]; + + if (g_mode_id != 7) + { + span[0].w = span[1].w = 0; + } + + int span_norm_sqr[2]; + span_norm_sqr[0] = dot(span[0], span[0]); + span_norm_sqr[1] = dot(span[1], span[1]); + + // TODO: again, this shouldn't be necessary here in error calculation + int dotProduct = dot(span[0], shared_temp[threadBase + 0].pixel - endPoint[0][0]); + if (span_norm_sqr[0] > 0 && dotProduct > 0 && uint(dotProduct * 63.49999) > uint(32 * span_norm_sqr[0])) + { + span[0] = -span[0]; + swap(endPoint[0][0], endPoint[0][1]); + } + dotProduct = dot(span[1], shared_temp[threadBase + candidateFixUpIndex1D[partition].x].pixel - endPoint[1][0]); + if (span_norm_sqr[1] > 0 && dotProduct > 0 && uint(dotProduct * 63.49999) > uint(32 * span_norm_sqr[1])) + { + span[1] = -span[1]; + swap(endPoint[1][0], endPoint[1][1]); + } + + uint step_selector; + if (g_mode_id != 1) + { + step_selector = 2; // mode 3 7 have 2 bit index + } + else + { + step_selector = 1; // mode 1 has 3 bit index + } + + uint p_error[2] = { 0, 0 }; + for (i = 0; i < 16; i++) + { + uint subset_index = (bits >> i) & 0x01; + + if (subset_index == 1) + { + dotProduct = dot(span[1], shared_temp[threadBase + i].pixel - endPoint[1][0]); + color_index = (span_norm_sqr[1] <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr[1]) ? aStep[step_selector][uint(dotProduct * 63.49999 / span_norm_sqr[1])] : aStep[step_selector][63]); + } + else + { + dotProduct = dot(span[0], shared_temp[threadBase + i].pixel - endPoint[0][0]); + color_index = (span_norm_sqr[0] <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr[0]) ? aStep[step_selector][uint(dotProduct * 63.49999 / span_norm_sqr[0])] : aStep[step_selector][63]); + } + + pixel_r = ((64 - aWeight[step_selector][color_index]) * endPoint[subset_index][0] + + aWeight[step_selector][color_index] * endPoint[subset_index][1] + 32) >> 6; + if (g_mode_id != 7) + { + pixel_r.a = 255; + } + + uint4 pixel = shared_temp[threadBase + i].pixel; + Ensure_A_Is_Larger(pixel_r, pixel); + pixel_r -= pixel; + uint pixel_error = ComputeError(pixel_r, pixel_r); + if (subset_index == 1) + p_error[1] += pixel_error; + else + p_error[0] += pixel_error; + } + + for (i = 0; i < 2; i++) + { + if (p_error[i] < error[i]) + { + error[i] = p_error[i]; + final_p[i] = p; + } + } + } + + shared_temp[GI].error = error[0] + error[1]; + shared_temp[GI].mode = g_mode_id; + shared_temp[GI].partition = partition; + + // mode 1 3 7 don't have rotation, we use rotation for p bits + if (g_mode_id == 1) + shared_temp[GI].rotation = (final_p[1] << 1) | final_p[0]; + else + shared_temp[GI].rotation = (final_p[1] << 2) | final_p[0]; + } + GroupMemoryBarrierWithGroupSync(); + + if (threadInBlock < 32) + { + if (shared_temp[GI].error > shared_temp[GI + 32].error) + { + shared_temp[GI].error = shared_temp[GI + 32].error; + shared_temp[GI].mode = shared_temp[GI + 32].mode; + shared_temp[GI].partition = shared_temp[GI + 32].partition; + shared_temp[GI].rotation = shared_temp[GI + 32].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 16) + { + if (shared_temp[GI].error > shared_temp[GI + 16].error) + { + shared_temp[GI].error = shared_temp[GI + 16].error; + shared_temp[GI].mode = shared_temp[GI + 16].mode; + shared_temp[GI].partition = shared_temp[GI + 16].partition; + shared_temp[GI].rotation = shared_temp[GI + 16].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 8) + { + if (shared_temp[GI].error > shared_temp[GI + 8].error) + { + shared_temp[GI].error = shared_temp[GI + 8].error; + shared_temp[GI].mode = shared_temp[GI + 8].mode; + shared_temp[GI].partition = shared_temp[GI + 8].partition; + shared_temp[GI].rotation = shared_temp[GI + 8].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 4) + { + if (shared_temp[GI].error > shared_temp[GI + 4].error) + { + shared_temp[GI].error = shared_temp[GI + 4].error; + shared_temp[GI].mode = shared_temp[GI + 4].mode; + shared_temp[GI].partition = shared_temp[GI + 4].partition; + shared_temp[GI].rotation = shared_temp[GI + 4].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 2) + { + if (shared_temp[GI].error > shared_temp[GI + 2].error) + { + shared_temp[GI].error = shared_temp[GI + 2].error; + shared_temp[GI].mode = shared_temp[GI + 2].mode; + shared_temp[GI].partition = shared_temp[GI + 2].partition; + shared_temp[GI].rotation = shared_temp[GI + 2].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 1) + { + if (shared_temp[GI].error > shared_temp[GI + 1].error) + { + shared_temp[GI].error = shared_temp[GI + 1].error; + shared_temp[GI].mode = shared_temp[GI + 1].mode; + shared_temp[GI].partition = shared_temp[GI + 1].partition; + shared_temp[GI].rotation = shared_temp[GI + 1].rotation; + } + + if (g_InBuff[blockID].x > shared_temp[GI].error) + { + g_OutBuff[blockID] = uint4(shared_temp[GI].error, shared_temp[GI].mode, shared_temp[GI].partition, shared_temp[GI].rotation); // mode 1 3 7 don't have rotation, we use rotation for p bits + } + else + { + g_OutBuff[blockID] = g_InBuff[blockID]; + } + } +} + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void TryMode02CS(uint GI : SV_GroupIndex, uint3 groupID : SV_GroupID) // mode 0 2 have 3 subsets per block +{ + const uint MAX_USED_THREAD = 64; + uint BLOCK_IN_GROUP = THREAD_GROUP_SIZE / MAX_USED_THREAD; + uint blockInGroup = GI / MAX_USED_THREAD; + uint blockID = g_start_block_id + groupID.x * BLOCK_IN_GROUP + blockInGroup; + uint threadBase = blockInGroup * MAX_USED_THREAD; + uint threadInBlock = GI - threadBase; + + uint block_y = blockID / g_num_block_x; + uint block_x = blockID - block_y * g_num_block_x; + uint base_x = block_x * BLOCK_SIZE_X; + uint base_y = block_y * BLOCK_SIZE_Y; + + if (threadInBlock < 16) + { + shared_temp[GI].pixel = clamp(uint4(g_Input.Load(uint3(base_x + threadInBlock % 4, base_y + threadInBlock / 4, 0)) * 255), 0, 255); + } + GroupMemoryBarrierWithGroupSync(); + + shared_temp[GI].error = 0xFFFFFFFF; + + uint num_partitions; + if (0 == g_mode_id) + { + num_partitions = 16; + } + else + { + num_partitions = 64; + } + + uint4 pixel_r; + uint2x4 endPoint[3]; // endPoint[0..1 for subset id][0..1 for low and high in the subset] + uint2x4 endPointBackup[3]; + uint color_index[16]; + if (threadInBlock < num_partitions) + { + uint partition = threadInBlock + 64; + + endPoint[0][0] = MAX_UINT; + endPoint[0][1] = MIN_UINT; + endPoint[1][0] = MAX_UINT; + endPoint[1][1] = MIN_UINT; + endPoint[2][0] = MAX_UINT; + endPoint[2][1] = MIN_UINT; + uint bits2 = candidateSectionBit2[partition - 64]; + for (uint i = 0; i < 16; i++) + { + uint4 pixel = shared_temp[threadBase + i].pixel; + uint subset_index = (bits2 >> (i * 2)) & 0x03; + if (subset_index == 2) + { + endPoint[2][0] = min(endPoint[2][0], pixel); + endPoint[2][1] = max(endPoint[2][1], pixel); + } + else if (subset_index == 1) + { + endPoint[1][0] = min(endPoint[1][0], pixel); + endPoint[1][1] = max(endPoint[1][1], pixel); + } + else + { + endPoint[0][0] = min(endPoint[0][0], pixel); + endPoint[0][1] = max(endPoint[0][1], pixel); + } + } + + endPointBackup[0] = endPoint[0]; + endPointBackup[1] = endPoint[1]; + endPointBackup[2] = endPoint[2]; + + uint max_p; + if (0 == g_mode_id) + { + max_p = 4; + } + else + { + max_p = 1; + } + + uint final_p[3] = { 0, 0, 0 }; + uint error[3] = { MAX_UINT, MAX_UINT, MAX_UINT }; + for (uint p = 0; p < max_p; p++) + { + endPoint[0] = endPointBackup[0]; + endPoint[1] = endPointBackup[1]; + endPoint[2] = endPointBackup[2]; + + for (i = 0; i < 3; i++) + { + if (0 == g_mode_id) + { + compress_endpoints0(endPoint[i], uint2(p, p >> 1) & 1); + } + else + { + compress_endpoints2(endPoint[i]); + } + } + + uint step_selector = 1 + (2 == g_mode_id); + + int4 span[3]; + span[0] = endPoint[0][1] - endPoint[0][0]; + span[1] = endPoint[1][1] - endPoint[1][0]; + span[2] = endPoint[2][1] - endPoint[2][0]; + span[0].w = span[1].w = span[2].w = 0; + int span_norm_sqr[3]; + span_norm_sqr[0] = dot(span[0], span[0]); + span_norm_sqr[1] = dot(span[1], span[1]); + span_norm_sqr[2] = dot(span[2], span[2]); + + // TODO: again, this shouldn't be necessary here in error calculation + uint ci[3] = { 0, candidateFixUpIndex1D[partition].x, candidateFixUpIndex1D[partition].y }; + for (i = 0; i < 3; i++) + { + int dotProduct = dot(span[i], shared_temp[threadBase + ci[i]].pixel - endPoint[i][0]); + if (span_norm_sqr[i] > 0 && dotProduct > 0 && uint(dotProduct * 63.49999) > uint(32 * span_norm_sqr[i])) + { + span[i] = -span[i]; + swap(endPoint[i][0], endPoint[i][1]); + } + } + + uint p_error[3] = { 0, 0, 0 }; + for (i = 0; i < 16; i++) + { + uint subset_index = (bits2 >> (i * 2)) & 0x03; + if (subset_index == 2) + { + int dotProduct = dot(span[2], shared_temp[threadBase + i].pixel - endPoint[2][0]); + color_index[i] = (span_norm_sqr[2] <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr[2]) ? aStep[step_selector][uint(dotProduct * 63.49999 / span_norm_sqr[2])] : aStep[step_selector][63]); + } + else if (subset_index == 1) + { + int dotProduct = dot(span[1], shared_temp[threadBase + i].pixel - endPoint[1][0]); + color_index[i] = (span_norm_sqr[1] <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr[1]) ? aStep[step_selector][uint(dotProduct * 63.49999 / span_norm_sqr[1])] : aStep[step_selector][63]); + } + else + { + int dotProduct = dot(span[0], shared_temp[threadBase + i].pixel - endPoint[0][0]); + color_index[i] = (span_norm_sqr[0] <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr[0]) ? aStep[step_selector][uint(dotProduct * 63.49999 / span_norm_sqr[0])] : aStep[step_selector][63]); + } + + pixel_r = ((64 - aWeight[step_selector][color_index[i]]) * endPoint[subset_index][0] + + aWeight[step_selector][color_index[i]] * endPoint[subset_index][1] + 32) >> 6; + pixel_r.a = 255; + + uint4 pixel = shared_temp[threadBase + i].pixel; + Ensure_A_Is_Larger(pixel_r, pixel); + pixel_r -= pixel; + + uint pixel_error = ComputeError(pixel_r, pixel_r); + + if (subset_index == 2) + p_error[2] += pixel_error; + else if (subset_index == 1) + p_error[1] += pixel_error; + else + p_error[0] += pixel_error; + } + + for (i = 0; i < 3; i++) + { + if (p_error[i] < error[i]) + { + error[i] = p_error[i]; + final_p[i] = p; // Borrow rotation for p + } + } + } + + shared_temp[GI].error = error[0] + error[1] + error[2]; + shared_temp[GI].partition = partition; + shared_temp[GI].rotation = (final_p[2] << 4) | (final_p[1] << 2) | final_p[0]; + } + GroupMemoryBarrierWithGroupSync(); + + if (threadInBlock < 32) + { + if (shared_temp[GI].error > shared_temp[GI + 32].error) + { + shared_temp[GI].error = shared_temp[GI + 32].error; + shared_temp[GI].partition = shared_temp[GI + 32].partition; + shared_temp[GI].rotation = shared_temp[GI + 32].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 16) + { + if (shared_temp[GI].error > shared_temp[GI + 16].error) + { + shared_temp[GI].error = shared_temp[GI + 16].error; + shared_temp[GI].partition = shared_temp[GI + 16].partition; + shared_temp[GI].rotation = shared_temp[GI + 16].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 8) + { + if (shared_temp[GI].error > shared_temp[GI + 8].error) + { + shared_temp[GI].error = shared_temp[GI + 8].error; + shared_temp[GI].partition = shared_temp[GI + 8].partition; + shared_temp[GI].rotation = shared_temp[GI + 8].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 4) + { + if (shared_temp[GI].error > shared_temp[GI + 4].error) + { + shared_temp[GI].error = shared_temp[GI + 4].error; + shared_temp[GI].partition = shared_temp[GI + 4].partition; + shared_temp[GI].rotation = shared_temp[GI + 4].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 2) + { + if (shared_temp[GI].error > shared_temp[GI + 2].error) + { + shared_temp[GI].error = shared_temp[GI + 2].error; + shared_temp[GI].partition = shared_temp[GI + 2].partition; + shared_temp[GI].rotation = shared_temp[GI + 2].rotation; + } + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 1) + { + if (shared_temp[GI].error > shared_temp[GI + 1].error) + { + shared_temp[GI].error = shared_temp[GI + 1].error; + shared_temp[GI].partition = shared_temp[GI + 1].partition; + shared_temp[GI].rotation = shared_temp[GI + 1].rotation; + } + + if (g_InBuff[blockID].x > shared_temp[GI].error) + { + g_OutBuff[blockID] = uint4(shared_temp[GI].error, g_mode_id, shared_temp[GI].partition, shared_temp[GI].rotation); // rotation is actually p bit for mode 0. for mode 2, rotation is always 0 + } + else + { + g_OutBuff[blockID] = g_InBuff[blockID]; + } + } +} + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void EncodeBlockCS(uint GI : SV_GroupIndex, uint3 groupID : SV_GroupID) +{ + const uint MAX_USED_THREAD = 16; + uint BLOCK_IN_GROUP = THREAD_GROUP_SIZE / MAX_USED_THREAD; + uint blockInGroup = GI / MAX_USED_THREAD; + uint blockID = g_start_block_id + groupID.x * BLOCK_IN_GROUP + blockInGroup; + uint threadBase = blockInGroup * MAX_USED_THREAD; + uint threadInBlock = GI - threadBase; + +#ifndef REF_DEVICE + if (blockID >= g_num_total_blocks) + { + return; + } +#endif + + uint block_y = blockID / g_num_block_x; + uint block_x = blockID - block_y * g_num_block_x; + uint base_x = block_x * BLOCK_SIZE_X; + uint base_y = block_y * BLOCK_SIZE_Y; + + uint mode = g_InBuff[blockID].y & 0x7FFFFFFF; + uint partition = g_InBuff[blockID].z; + uint index_selector = (g_InBuff[blockID].y >> 31) & 1; + uint rotation = g_InBuff[blockID].w; + + if (threadInBlock < 16) + { + uint4 pixel = clamp(uint4(g_Input.Load(uint3(base_x + threadInBlock % 4, base_y + threadInBlock / 4, 0)) * 255), 0, 255); + + if ((4 == mode) || (5 == mode)) + { + if (1 == rotation) + { + pixel.ra = pixel.ar; + } + else if (2 == rotation) + { + pixel.ga = pixel.ag; + } + else if (3 == rotation) + { + pixel.ba = pixel.ab; + } + } + + shared_temp[GI].pixel = pixel; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + uint bits = candidateSectionBit[partition]; + uint bits2 = candidateSectionBit2[partition - 64]; + + uint2x4 ep; + ep[0] = MAX_UINT; + ep[1] = MIN_UINT; + uint2x4 ep_quantized; + [unroll] + for (int ii = 2; ii >= 0; --ii) + { + if (threadInBlock < 16) + { + uint2x4 ep; + ep[0] = MAX_UINT; + ep[1] = MIN_UINT; + + uint4 pixel = shared_temp[GI].pixel; + + uint subset_index = (bits >> threadInBlock) & 0x01; + uint subset_index2 = (bits2 >> (threadInBlock * 2)) & 0x03; + if (0 == ii) + { + if ((0 == mode) || (2 == mode)) + { + if (0 == subset_index2) + { + ep[0] = ep[1] = pixel; + } + } + else if ((1 == mode) || (3 == mode) || (7 == mode)) + { + if (0 == subset_index) + { + ep[0] = ep[1] = pixel; + } + } + else if ((4 == mode) || (5 == mode) || (6 == mode)) + { + ep[0] = ep[1] = pixel; + } + } + else if (1 == ii) + { + if ((0 == mode) || (2 == mode)) + { + if (1 == subset_index2) + { + ep[0] = ep[1] = pixel; + } + } + else if ((1 == mode) || (3 == mode) || (7 == mode)) + { + if (1 == subset_index) + { + ep[0] = ep[1] = pixel; + } + } + } + else + { + if ((0 == mode) || (2 == mode)) + { + if (2 == subset_index2) + { + ep[0] = ep[1] = pixel; + } + } + } + + shared_temp[GI].endPoint_low = ep[0]; + shared_temp[GI].endPoint_high = ep[1]; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 8) + { + shared_temp[GI].endPoint_low = min(shared_temp[GI].endPoint_low, shared_temp[GI + 8].endPoint_low); + shared_temp[GI].endPoint_high = max(shared_temp[GI].endPoint_high, shared_temp[GI + 8].endPoint_high); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 4) + { + shared_temp[GI].endPoint_low = min(shared_temp[GI].endPoint_low, shared_temp[GI + 4].endPoint_low); + shared_temp[GI].endPoint_high = max(shared_temp[GI].endPoint_high, shared_temp[GI + 4].endPoint_high); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 2) + { + shared_temp[GI].endPoint_low = min(shared_temp[GI].endPoint_low, shared_temp[GI + 2].endPoint_low); + shared_temp[GI].endPoint_high = max(shared_temp[GI].endPoint_high, shared_temp[GI + 2].endPoint_high); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + if (threadInBlock < 1) + { + shared_temp[GI].endPoint_low = min(shared_temp[GI].endPoint_low, shared_temp[GI + 1].endPoint_low); + shared_temp[GI].endPoint_high = max(shared_temp[GI].endPoint_high, shared_temp[GI + 1].endPoint_high); + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (ii == (int)threadInBlock) + { + ep[0] = shared_temp[threadBase].endPoint_low; + ep[1] = shared_temp[threadBase].endPoint_high; + } + } + + if (threadInBlock < 3) + { + uint2 P; + if (1 == mode) + { + P = (rotation >> threadInBlock) & 1; + } + else + { + P = uint2(rotation >> (threadInBlock * 2 + 0), rotation >> (threadInBlock * 2 + 1)) & 1; + } + + if (0 == mode) + { + ep_quantized = compress_endpoints0(ep, P); + } + else if (1 == mode) + { + ep_quantized = compress_endpoints1(ep, P); + } + else if (2 == mode) + { + ep_quantized = compress_endpoints2(ep); + } + else if (3 == mode) + { + ep_quantized = compress_endpoints3(ep, P); + } + else if (4 == mode) + { + ep_quantized = compress_endpoints4(ep); + } + else if (5 == mode) + { + ep_quantized = compress_endpoints5(ep); + } + else if (6 == mode) + { + ep_quantized = compress_endpoints6(ep, P); + } + else //if (7 == mode) + { + ep_quantized = compress_endpoints7(ep, P); + } + + int4 span = ep[1] - ep[0]; + if (mode < 4) + { + span.w = 0; + } + + if ((4 == mode) || (5 == mode)) + { + if (0 == threadInBlock) + { + int2 span_norm_sqr = uint2(dot(span.rgb, span.rgb), span.a * span.a); + int2 dotProduct = int2(dot(span.rgb, shared_temp[threadBase + 0].pixel.rgb - ep[0].rgb), span.a * (shared_temp[threadBase + 0].pixel.a - ep[0].a)); + if (span_norm_sqr.x > 0 && dotProduct.x > 0 && uint(dotProduct.x * 63.49999) > uint(32 * span_norm_sqr.x)) + { + swap(ep[0].rgb, ep[1].rgb); + swap(ep_quantized[0].rgb, ep_quantized[1].rgb); + } + if (span_norm_sqr.y > 0 && dotProduct.y > 0 && uint(dotProduct.y * 63.49999) > uint(32 * span_norm_sqr.y)) + { + swap(ep[0].a, ep[1].a); + swap(ep_quantized[0].a, ep_quantized[1].a); + } + } + } + else //if ((0 == mode) || (2 == mode) || (1 == mode) || (3 == mode) || (7 == mode) || (6 == mode)) + { + int p; + if (0 == threadInBlock) + { + p = 0; + } + else if (1 == threadInBlock) + { + p = candidateFixUpIndex1D[partition].x; + } + else //if (2 == threadInBlock) + { + p = candidateFixUpIndex1D[partition].y; + } + + int span_norm_sqr = dot(span, span); + int dotProduct = dot(span, shared_temp[threadBase + p].pixel - ep[0]); + if (span_norm_sqr > 0 && dotProduct > 0 && uint(dotProduct * 63.49999) > uint(32 * span_norm_sqr)) + { + swap(ep[0], ep[1]); + swap(ep_quantized[0], ep_quantized[1]); + } + } + + shared_temp[GI].endPoint_low = ep[0]; + shared_temp[GI].endPoint_high = ep[1]; + shared_temp[GI].endPoint_low_quantized = ep_quantized[0]; + shared_temp[GI].endPoint_high_quantized = ep_quantized[1]; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (threadInBlock < 16) + { + uint color_index = 0; + uint alpha_index = 0; + + uint2x4 ep; + + uint2 indexPrec; + if ((0 == mode) || (1 == mode)) + { + indexPrec = 1; + } + else if (6 == mode) + { + indexPrec = 0; + } + else if (4 == mode) + { + if (0 == index_selector) + { + indexPrec = uint2(2, 1); + } + else + { + indexPrec = uint2(1, 2); + } + } + else + { + indexPrec = 2; + } + + int subset_index; + if ((0 == mode) || (2 == mode)) + { + subset_index = (bits2 >> (threadInBlock * 2)) & 0x03; + } + else if ((1 == mode) || (3 == mode) || (7 == mode)) + { + subset_index = (bits >> threadInBlock) & 0x01; + } + else + { + subset_index = 0; + } + + ep[0] = shared_temp[threadBase + subset_index].endPoint_low; + ep[1] = shared_temp[threadBase + subset_index].endPoint_high; + + int4 span = ep[1] - ep[0]; + if (mode < 4) + { + span.w = 0; + } + + if ((4 == mode) || (5 == mode)) + { + int2 span_norm_sqr; + span_norm_sqr.x = dot(span.rgb, span.rgb); + span_norm_sqr.y = span.a * span.a; + + int dotProduct = dot(span.rgb, shared_temp[threadBase + threadInBlock].pixel.rgb - ep[0].rgb); + color_index = (span_norm_sqr.x <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr.x) ? aStep[indexPrec.x][uint(dotProduct * 63.49999 / span_norm_sqr.x)] : aStep[indexPrec.x][63]); + dotProduct = dot(span.a, shared_temp[threadBase + threadInBlock].pixel.a - ep[0].a); + alpha_index = (span_norm_sqr.y <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr.y) ? aStep[indexPrec.y][uint(dotProduct * 63.49999 / span_norm_sqr.y)] : aStep[indexPrec.y][63]); + + if (index_selector) + { + swap(color_index, alpha_index); + } + } + else + { + int span_norm_sqr = dot(span, span); + + int dotProduct = dot(span, shared_temp[threadBase + threadInBlock].pixel - ep[0]); + color_index = (span_norm_sqr <= 0 || dotProduct <= 0) ? 0 + : ((dotProduct < span_norm_sqr) ? aStep[indexPrec.x][uint(dotProduct * 63.49999 / span_norm_sqr)] : aStep[indexPrec.x][63]); + } + + shared_temp[GI].error = color_index; + shared_temp[GI].mode = alpha_index; + } +#ifdef REF_DEVICE + GroupMemoryBarrierWithGroupSync(); +#endif + + if (0 == threadInBlock) + { + uint4 block; + if (0 == mode) + { + block_package0(block, partition, threadBase); + } + else if (1 == mode) + { + block_package1(block, partition, threadBase); + } + else if (2 == mode) + { + block_package2(block, partition, threadBase); + } + else if (3 == mode) + { + block_package3(block, partition, threadBase); + } + else if (4 == mode) + { + block_package4(block, rotation, index_selector, threadBase); + } + else if (5 == mode) + { + block_package5(block, rotation, threadBase); + } + else if (6 == mode) + { + block_package6(block, threadBase); + } + else //if (7 == mode) + { + block_package7(block, partition, threadBase); + } + + g_OutBuff[blockID] = block; + } +} + +//uint4 truncate_and_round( uint4 color, uint bits) +//{ +// uint precisionMask = ((1 << bits) - 1) << (8 - bits); +// uint precisionHalf = (1 << (7-bits)); +// +// uint4 truncated = color & precisionMask; +// uint4 rounded = min(255, color + precisionHalf) & precisionMask; +// +// uint4 truncated_bak = truncated = truncated | (truncated >> bits); +// uint4 rounded_bak = rounded = rounded | (rounded >> bits); +// +// uint4 color_bak = color; +// +// Ensure_A_Is_Larger( rounded, color ); +// Ensure_A_Is_Larger( truncated, color_bak ); +// +// if (dot(rounded - color, rounded - color) < +// dot(truncated - color_bak, truncated - color_bak)) +// { +// return rounded_bak; +// } +// else +// { +// return truncated_bak; +// } +//} + +uint4 quantize(uint4 color, uint uPrec) +{ + return (((color << 8) + color) * ((1 << uPrec) - 1) + 32768) >> 16; +} + +uint4 unquantize(uint4 color, uint uPrec) +{ + color = color << (8 - uPrec); + return color | (color >> uPrec); +} + +uint2x4 compress_endpoints0(inout uint2x4 endPoint, uint2 P) +{ + uint2x4 quantized; + [unroll] for (uint j = 0; j < 2; j++) + { + quantized[j].rgb = quantize(endPoint[j].rgbb, 5).rgb & 0xFFFFFFFE; + quantized[j].rgb |= P[j]; + quantized[j].a = 0xFF; + + endPoint[j].rgb = unquantize(quantized[j].rgbb, 5).rgb; + endPoint[j].a = 0xFF; + + quantized[j] <<= 3; + } + return quantized; +} +uint2x4 compress_endpoints1(inout uint2x4 endPoint, uint2 P) +{ + uint2x4 quantized; + [unroll] for (uint j = 0; j < 2; j++) + { + quantized[j].rgb = quantize(endPoint[j].rgbb, 7).rgb & 0xFFFFFFFE; + quantized[j].rgb |= P[j]; + quantized[j].a = 0xFF; + + endPoint[j].rgb = unquantize(quantized[j].rgbb, 7).rgb; + endPoint[j].a = 0xFF; + + quantized[j] <<= 1; + } + return quantized; +} +uint2x4 compress_endpoints2(inout uint2x4 endPoint) +{ + uint2x4 quantized; + [unroll] for (uint j = 0; j < 2; j++) + { + quantized[j].rgb = quantize(endPoint[j].rgbb, 5).rgb; + quantized[j].a = 0xFF; + + endPoint[j].rgb = unquantize(quantized[j].rgbb, 5).rgb; + endPoint[j].a = 0xFF; + + quantized[j] <<= 3; + } + return quantized; +} +uint2x4 compress_endpoints3(inout uint2x4 endPoint, uint2 P) +{ + uint2x4 quantized; + for (uint j = 0; j < 2; j++) + { + quantized[j].rgb = endPoint[j].rgb & 0xFFFFFFFE; + quantized[j].rgb |= P[j]; + quantized[j].a = 0xFF; + + endPoint[j].rgb = quantized[j].rgb; + endPoint[j].a = 0xFF; + } + return quantized; +} +uint2x4 compress_endpoints4(inout uint2x4 endPoint) +{ + uint2x4 quantized; + [unroll] for (uint j = 0; j < 2; j++) + { + quantized[j].rgb = quantize(endPoint[j].rgbb, 5).rgb; + quantized[j].a = quantize(endPoint[j].a, 6).r; + + endPoint[j].rgb = unquantize(quantized[j].rgbb, 5).rgb; + endPoint[j].a = unquantize(quantized[j].a, 6).r; + + quantized[j].rgb <<= 3; + quantized[j].a <<= 2; + } + return quantized; +} +uint2x4 compress_endpoints5(inout uint2x4 endPoint) +{ + uint2x4 quantized; + [unroll] for (uint j = 0; j < 2; j++) + { + quantized[j].rgb = quantize(endPoint[j].rgbb, 7).rgb; + quantized[j].a = endPoint[j].a; + + endPoint[j].rgb = unquantize(quantized[j].rgbb, 7).rgb; + // endPoint[j].a Alpha is full precision + + quantized[j].rgb <<= 1; + } + return quantized; +} +uint2x4 compress_endpoints6(inout uint2x4 endPoint, uint2 P) +{ + uint2x4 quantized; + for (uint j = 0; j < 2; j++) + { + quantized[j] = endPoint[j] & 0xFFFFFFFE; + quantized[j] |= P[j]; + + endPoint[j] = quantized[j]; + } + return quantized; +} +uint2x4 compress_endpoints7(inout uint2x4 endPoint, uint2 P) +{ + uint2x4 quantized; + [unroll] for (uint j = 0; j < 2; j++) + { + quantized[j] = quantize(endPoint[j], 6) & 0xFFFFFFFE; + quantized[j] |= P[j]; + + endPoint[j] = unquantize(quantized[j], 6); + } + return quantized << 2; +} + +#define get_end_point_l(subset) shared_temp[threadBase + subset].endPoint_low_quantized +#define get_end_point_h(subset) shared_temp[threadBase + subset].endPoint_high_quantized +#define get_color_index(index) shared_temp[threadBase + index].error +#define get_alpha_index(index) shared_temp[threadBase + index].mode + +void block_package0(out uint4 block, uint partition, uint threadBase) +{ + block.x = 0x01 | ((partition - 64) << 1) + | ((get_end_point_l(0).r & 0xF0) << 1) | ((get_end_point_h(0).r & 0xF0) << 5) + | ((get_end_point_l(1).r & 0xF0) << 9) | ((get_end_point_h(1).r & 0xF0) << 13) + | ((get_end_point_l(2).r & 0xF0) << 17) | ((get_end_point_h(2).r & 0xF0) << 21) + | ((get_end_point_l(0).g & 0xF0) << 25); + block.y = ((get_end_point_l(0).g & 0xF0) >> 7) | ((get_end_point_h(0).g & 0xF0) >> 3) + | ((get_end_point_l(1).g & 0xF0) << 1) | ((get_end_point_h(1).g & 0xF0) << 5) + | ((get_end_point_l(2).g & 0xF0) << 9) | ((get_end_point_h(2).g & 0xF0) << 13) + | ((get_end_point_l(0).b & 0xF0) << 17) | ((get_end_point_h(0).b & 0xF0) << 21) + | ((get_end_point_l(1).b & 0xF0) << 25); + block.z = ((get_end_point_l(1).b & 0xF0) >> 7) | ((get_end_point_h(1).b & 0xF0) >> 3) + | ((get_end_point_l(2).b & 0xF0) << 1) | ((get_end_point_h(2).b & 0xF0) << 5) + | ((get_end_point_l(0).r & 0x08) << 10) | ((get_end_point_h(0).r & 0x08) << 11) + | ((get_end_point_l(1).r & 0x08) << 12) | ((get_end_point_h(1).r & 0x08) << 13) + | ((get_end_point_l(2).r & 0x08) << 14) | ((get_end_point_h(2).r & 0x08) << 15) + | (get_color_index(0) << 19); + block.w = 0; + uint i = 1; + for (; i <= min(candidateFixUpIndex1DOrdered[partition][0], 4); i++) + { + block.z |= get_color_index(i) << (i * 3 + 18); + } + if (candidateFixUpIndex1DOrdered[partition][0] < 4) //i = 4 + { + block.z |= get_color_index(4) << 29; + i += 1; + } + else //i = 5 + { + block.w |= (get_color_index(4) & 0x04) >> 2; + for (; i <= candidateFixUpIndex1DOrdered[partition][0]; i++) + block.w |= get_color_index(i) << (i * 3 - 14); + } + for (; i <= candidateFixUpIndex1DOrdered[partition][1]; i++) + { + block.w |= get_color_index(i) << (i * 3 - 15); + } + for (; i < 16; i++) + { + block.w |= get_color_index(i) << (i * 3 - 16); + } +} +void block_package1(out uint4 block, uint partition, uint threadBase) +{ + block.x = 0x02 | (partition << 2) + | ((get_end_point_l(0).r & 0xFC) << 6) | ((get_end_point_h(0).r & 0xFC) << 12) + | ((get_end_point_l(1).r & 0xFC) << 18) | ((get_end_point_h(1).r & 0xFC) << 24); + block.y = ((get_end_point_l(0).g & 0xFC) >> 2) | ((get_end_point_h(0).g & 0xFC) << 4) + | ((get_end_point_l(1).g & 0xFC) << 10) | ((get_end_point_h(1).g & 0xFC) << 16) + | ((get_end_point_l(0).b & 0xFC) << 22) | ((get_end_point_h(0).b & 0xFC) << 28); + block.z = ((get_end_point_h(0).b & 0xFC) >> 4) | ((get_end_point_l(1).b & 0xFC) << 2) + | ((get_end_point_h(1).b & 0xFC) << 8) + | ((get_end_point_l(0).r & 0x02) << 15) | ((get_end_point_l(1).r & 0x02) << 16) + | (get_color_index(0) << 18); + if (candidateFixUpIndex1DOrdered[partition][0] == 15) + { + block.w = (get_color_index(15) << 30) | (get_color_index(14) << 27) | (get_color_index(13) << 24) | (get_color_index(12) << 21) | (get_color_index(11) << 18) | (get_color_index(10) << 15) + | (get_color_index(9) << 12) | (get_color_index(8) << 9) | (get_color_index(7) << 6) | (get_color_index(6) << 3) | get_color_index(5); + block.z |= (get_color_index(4) << 29) | (get_color_index(3) << 26) | (get_color_index(2) << 23) | (get_color_index(1) << 20) | (get_color_index(0) << 18); + } + else if (candidateFixUpIndex1DOrdered[partition][0] == 2) + { + block.w = (get_color_index(15) << 29) | (get_color_index(14) << 26) | (get_color_index(13) << 23) | (get_color_index(12) << 20) | (get_color_index(11) << 17) | (get_color_index(10) << 14) + | (get_color_index(9) << 11) | (get_color_index(8) << 8) | (get_color_index(7) << 5) | (get_color_index(6) << 2) | (get_color_index(5) >> 1); + block.z |= (get_color_index(5) << 31) | (get_color_index(4) << 28) | (get_color_index(3) << 25) | (get_color_index(2) << 23) | (get_color_index(1) << 20) | (get_color_index(0) << 18); + } + else if (candidateFixUpIndex1DOrdered[partition][0] == 8) + { + block.w = (get_color_index(15) << 29) | (get_color_index(14) << 26) | (get_color_index(13) << 23) | (get_color_index(12) << 20) | (get_color_index(11) << 17) | (get_color_index(10) << 14) + | (get_color_index(9) << 11) | (get_color_index(8) << 9) | (get_color_index(7) << 6) | (get_color_index(6) << 3) | get_color_index(5); + block.z |= (get_color_index(4) << 29) | (get_color_index(3) << 26) | (get_color_index(2) << 23) | (get_color_index(1) << 20) | (get_color_index(0) << 18); + } + else //candidateFixUpIndex1DOrdered[partition] == 6 + { + block.w = (get_color_index(15) << 29) | (get_color_index(14) << 26) | (get_color_index(13) << 23) | (get_color_index(12) << 20) | (get_color_index(11) << 17) | (get_color_index(10) << 14) + | (get_color_index(9) << 11) | (get_color_index(8) << 8) | (get_color_index(7) << 5) | (get_color_index(6) << 3) | get_color_index(5); + block.z |= (get_color_index(4) << 29) | (get_color_index(3) << 26) | (get_color_index(2) << 23) | (get_color_index(1) << 20) | (get_color_index(0) << 18); + } +} +void block_package2(out uint4 block, uint partition, uint threadBase) +{ + block.x = 0x04 | ((partition - 64) << 3) + | ((get_end_point_l(0).r & 0xF8) << 6) | ((get_end_point_h(0).r & 0xF8) << 11) + | ((get_end_point_l(1).r & 0xF8) << 16) | ((get_end_point_h(1).r & 0xF8) << 21) + | ((get_end_point_l(2).r & 0xF8) << 26); + block.y = ((get_end_point_l(2).r & 0xF8) >> 6) | ((get_end_point_h(2).r & 0xF8) >> 1) + | ((get_end_point_l(0).g & 0xF8) << 4) | ((get_end_point_h(0).g & 0xF8) << 9) + | ((get_end_point_l(1).g & 0xF8) << 14) | ((get_end_point_h(1).g & 0xF8) << 19) + | ((get_end_point_l(2).g & 0xF8) << 24); + block.z = ((get_end_point_h(2).g & 0xF8) >> 3) | ((get_end_point_l(0).b & 0xF8) << 2) + | ((get_end_point_h(0).b & 0xF8) << 7) | ((get_end_point_l(1).b & 0xF8) << 12) + | ((get_end_point_h(1).b & 0xF8) << 17) | ((get_end_point_l(2).b & 0xF8) << 22) + | ((get_end_point_h(2).b & 0xF8) << 27); + block.w = ((get_end_point_h(2).b & 0xF8) >> 5) + | (get_color_index(0) << 3); + uint i = 1; + for (; i <= candidateFixUpIndex1DOrdered[partition][0]; i++) + { + block.w |= get_color_index(i) << (i * 2 + 2); + } + for (; i <= candidateFixUpIndex1DOrdered[partition][1]; i++) + { + block.w |= get_color_index(i) << (i * 2 + 1); + } + for (; i < 16; i++) + { + block.w |= get_color_index(i) << (i * 2); + } +} +void block_package3(out uint4 block, uint partition, uint threadBase) +{ + block.x = 0x08 | (partition << 4) + | ((get_end_point_l(0).r & 0xFE) << 9) | ((get_end_point_h(0).r & 0xFE) << 16) + | ((get_end_point_l(1).r & 0xFE) << 23) | ((get_end_point_h(1).r & 0xFE) << 30); + block.y = ((get_end_point_h(1).r & 0xFE) >> 2) | ((get_end_point_l(0).g & 0xFE) << 5) + | ((get_end_point_h(0).g & 0xFE) << 12) | ((get_end_point_l(1).g & 0xFE) << 19) + | ((get_end_point_h(1).g & 0xFE) << 26); + block.z = ((get_end_point_h(1).g & 0xFE) >> 6) | ((get_end_point_l(0).b & 0xFE) << 1) + | ((get_end_point_h(0).b & 0xFE) << 8) | ((get_end_point_l(1).b & 0xFE) << 15) + | ((get_end_point_h(1).b & 0xFE) << 22) + | ((get_end_point_l(0).r & 0x01) << 30) | ((get_end_point_h(0).r & 0x01) << 31); + block.w = ((get_end_point_l(1).r & 0x01) << 0) | ((get_end_point_h(1).r & 0x01) << 1) + | (get_color_index(0) << 2); + uint i = 1; + for (; i <= candidateFixUpIndex1DOrdered[partition][0]; i++) + { + block.w |= get_color_index(i) << (i * 2 + 1); + } + for (; i < 16; i++) + { + block.w |= get_color_index(i) << (i * 2); + } +} +void block_package4(out uint4 block, uint rotation, uint index_selector, uint threadBase) +{ + block.x = 0x10 | ((rotation & 3) << 5) | ((index_selector & 1) << 7) + | ((get_end_point_l(0).r & 0xF8) << 5) | ((get_end_point_h(0).r & 0xF8) << 10) + | ((get_end_point_l(0).g & 0xF8) << 15) | ((get_end_point_h(0).g & 0xF8) << 20) + | ((get_end_point_l(0).b & 0xF8) << 25); + + block.y = ((get_end_point_l(0).b & 0xF8) >> 7) | ((get_end_point_h(0).b & 0xF8) >> 2) + | ((get_end_point_l(0).a & 0xFC) << 4) | ((get_end_point_h(0).a & 0xFC) << 10) + | ((get_color_index(0) & 1) << 18) | (get_color_index(1) << 19) | (get_color_index(2) << 21) | (get_color_index(3) << 23) + | (get_color_index(4) << 25) | (get_color_index(5) << 27) | (get_color_index(6) << 29) | (get_color_index(7) << 31); + + block.z = (get_color_index(7) >> 1) | (get_color_index(8) << 1) | (get_color_index(9) << 3) | (get_color_index(10)<< 5) + | (get_color_index(11)<< 7) | (get_color_index(12)<< 9) | (get_color_index(13)<< 11) | (get_color_index(14)<< 13) + | (get_color_index(15)<< 15) | ((get_alpha_index(0) & 3) << 17) | (get_alpha_index(1) << 19) | (get_alpha_index(2) << 22) + | (get_alpha_index(3) << 25) | (get_alpha_index(4) << 28) | (get_alpha_index(5) << 31); + + block.w = (get_alpha_index(5) >> 1) | (get_alpha_index(6) << 2) | (get_alpha_index(7) << 5) | (get_alpha_index(8) << 8) + | (get_alpha_index(9) << 11) | (get_alpha_index(10)<< 14) | (get_alpha_index(11)<< 17) | (get_alpha_index(12)<< 20) + | (get_alpha_index(13)<< 23) | (get_alpha_index(14)<< 26) | (get_alpha_index(15)<< 29); +} +void block_package5(out uint4 block, uint rotation, uint threadBase) +{ + block.x = 0x20 | (rotation << 6) + | ((get_end_point_l(0).r & 0xFE) << 7) | ((get_end_point_h(0).r & 0xFE) << 14) + | ((get_end_point_l(0).g & 0xFE) << 21) | ((get_end_point_h(0).g & 0xFE) << 28); + block.y = ((get_end_point_h(0).g & 0xFE) >> 4) | ((get_end_point_l(0).b & 0xFE) << 3) + | ((get_end_point_h(0).b & 0xFE) << 10) | (get_end_point_l(0).a << 18) | (get_end_point_h(0).a << 26); + block.z = (get_end_point_h(0).a >> 6) + | (get_color_index(0) << 2) | (get_color_index(1) << 3) | (get_color_index(2) << 5) | (get_color_index(3) << 7) + | (get_color_index(4) << 9) | (get_color_index(5) << 11) | (get_color_index(6) << 13) | (get_color_index(7) << 15) + | (get_color_index(8) << 17) | (get_color_index(9) << 19) | (get_color_index(10)<< 21) | (get_color_index(11)<< 23) + | (get_color_index(12)<< 25) | (get_color_index(13)<< 27) | (get_color_index(14)<< 29) | (get_color_index(15)<< 31); + block.w = (get_color_index(15)>> 1) | (get_alpha_index(0) << 1) | (get_alpha_index(1) << 2) | (get_alpha_index(2) << 4) + | (get_alpha_index(3) << 6) | (get_alpha_index(4) << 8) | (get_alpha_index(5) << 10) | (get_alpha_index(6) << 12) + | (get_alpha_index(7) << 14) | (get_alpha_index(8) << 16) | (get_alpha_index(9) << 18) | (get_alpha_index(10)<< 20) + | (get_alpha_index(11)<< 22) | (get_alpha_index(12)<< 24) | (get_alpha_index(13)<< 26) | (get_alpha_index(14)<< 28) + | (get_alpha_index(15)<< 30); +} +void block_package6(out uint4 block, uint threadBase) +{ + block.x = 0x40 + | ((get_end_point_l(0).r & 0xFE) << 6) | ((get_end_point_h(0).r & 0xFE) << 13) + | ((get_end_point_l(0).g & 0xFE) << 20) | ((get_end_point_h(0).g & 0xFE) << 27); + block.y = ((get_end_point_h(0).g & 0xFE) >> 5) | ((get_end_point_l(0).b & 0xFE) << 2) + | ((get_end_point_h(0).b & 0xFE) << 9) | ((get_end_point_l(0).a & 0xFE) << 16) + | ((get_end_point_h(0).a & 0xFE) << 23) + | (get_end_point_l(0).r & 0x01) << 31; + block.z = (get_end_point_h(0).r & 0x01) + | (get_color_index(0) << 1) | (get_color_index(1) << 4) | (get_color_index(2) << 8) | (get_color_index(3) << 12) + | (get_color_index(4) << 16) | (get_color_index(5) << 20) | (get_color_index(6) << 24) | (get_color_index(7) << 28); + block.w = (get_color_index(8) << 0) | (get_color_index(9) << 4) | (get_color_index(10)<< 8) | (get_color_index(11)<< 12) + | (get_color_index(12)<< 16) | (get_color_index(13)<< 20) | (get_color_index(14)<< 24) | (get_color_index(15)<< 28); +} +void block_package7(out uint4 block, uint partition, uint threadBase) +{ + block.x = 0x80 | (partition << 8) + | ((get_end_point_l(0).r & 0xF8) << 11) | ((get_end_point_h(0).r & 0xF8) << 16) + | ((get_end_point_l(1).r & 0xF8) << 21) | ((get_end_point_h(1).r & 0xF8) << 26); + block.y = ((get_end_point_h(1).r & 0xF8) >> 6) | ((get_end_point_l(0).g & 0xF8) >> 1) + | ((get_end_point_h(0).g & 0xF8) << 4) | ((get_end_point_l(1).g & 0xF8) << 9) + | ((get_end_point_h(1).g & 0xF8) << 14) | ((get_end_point_l(0).b & 0xF8) << 19) + | ((get_end_point_h(0).b & 0xF8) << 24); + block.z = ((get_end_point_l(1).b & 0xF8) >> 3) | ((get_end_point_h(1).b & 0xF8) << 2) + | ((get_end_point_l(0).a & 0xF8) << 7) | ((get_end_point_h(0).a & 0xF8) << 12) + | ((get_end_point_l(1).a & 0xF8) << 17) | ((get_end_point_h(1).a & 0xF8) << 22) + | ((get_end_point_l(0).r & 0x04) << 28) | ((get_end_point_h(0).r & 0x04) << 29); + block.w = ((get_end_point_l(1).r & 0x04) >> 2) | ((get_end_point_h(1).r & 0x04) >> 1) + | (get_color_index(0) << 2); + uint i = 1; + for (; i <= candidateFixUpIndex1DOrdered[partition][0]; i++) + { + block.w |= get_color_index(i) << (i * 2 + 1); + } + for (; i < 16; i++) + { + block.w |= get_color_index(i) << (i * 2); + } +} diff --git a/external/DirectXTex/Shaders/CompileShaders.cmd b/external/DirectXTex/Shaders/CompileShaders.cmd new file mode 100644 index 00000000..43144065 --- /dev/null +++ b/external/DirectXTex/Shaders/CompileShaders.cmd @@ -0,0 +1,67 @@ +@echo off +rem Copyright (c) Microsoft Corporation. +rem Licensed under the MIT License. + +setlocal +set error=0 + +if %PROCESSOR_ARCHITECTURE%.==ARM64. (set FXCARCH=arm64) else (if %PROCESSOR_ARCHITECTURE%.==AMD64. (set FXCARCH=x64) else (set FXCARCH=x86)) + +set FXCOPTS=/nologo /WX /Ges /Zi /Zpc /Qstrip_reflect /Qstrip_debug + +if defined LegacyShaderCompiler goto fxcviaenv +set PCFXC="%WindowsSdkVerBinPath%%FXCARCH%\fxc.exe" +if exist %PCFXC% goto continue +set PCFXC="%WindowsSdkBinPath%%WindowsSDKVersion%\%FXCARCH%\fxc.exe" +if exist %PCFXC% goto continue +set PCFXC="%WindowsSdkDir%bin\%WindowsSDKVersion%\%FXCARCH%\fxc.exe" +if exist %PCFXC% goto continue + +set PCFXC=fxc.exe +goto continue + +:fxcviaenv +set PCFXC="%LegacyShaderCompiler%" +if not exist %PCFXC% goto needfxc +goto continue + +:continue +if not defined CompileShadersOutput set CompileShadersOutput=Compiled +set StrTrim=%CompileShadersOutput%## +set StrTrim=%StrTrim: ##=% +set CompileShadersOutput=%StrTrim:##=% +@if not exist "%CompileShadersOutput%" mkdir "%CompileShadersOutput%" +call :CompileShader BC7Encode TryMode456CS +call :CompileShader BC7Encode TryMode137CS +call :CompileShader BC7Encode TryMode02CS +call :CompileShader BC7Encode EncodeBlockCS + +call :CompileShader BC6HEncode TryModeG10CS +call :CompileShader BC6HEncode TryModeLE10CS +call :CompileShader BC6HEncode EncodeBlockCS + +echo. + +if %error% == 0 ( + echo Shaders compiled ok +) else ( + echo There were shader compilation errors! + exit /b 1 +) + +endlocal +exit /b 0 + +:CompileShader +set fxc=%PCFXC% "%1.hlsl" %FXCOPTS% /Tcs_5_0 /E%2 "/Fh%CompileShadersOutput%\%1_%2.inc" "/Fd%CompileShadersOutput%\%1_%2.pdb" /Vn%1_%2 +set fxc4=%PCFXC% "%1.hlsl" %FXCOPTS% /Tcs_4_0 /DEMULATE_F16C /E%2 "/Fh%CompileShadersOutput%\%1_%2_cs40.inc" "/Fd%CompileShadersOutput%\%1_%2_cs40.pdb" /Vn%1_%2 +echo. +echo %fxc% +%fxc% || set error=1 +echo %fxc4% +%fxc4% || set error=1 +exit /b + +:needfxc +echo ERROR: CompileShaders requires FXC.EXE +exit /b 1 diff --git a/external/DirectXTex/filters.h b/external/DirectXTex/filters.h new file mode 100644 index 00000000..fb8a63f3 --- /dev/null +++ b/external/DirectXTex/filters.h @@ -0,0 +1,422 @@ +//------------------------------------------------------------------------------------- +// filters.h +// +// Utility header with helpers for implementing image filters +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +//------------------------------------------------------------------------------------- + +#pragma once + +#include +#include + +#include + +#include "scoped.h" + + +namespace DirectX +{ + namespace Filters + { + //------------------------------------------------------------------------------------- + // Box filtering helpers + //------------------------------------------------------------------------------------- + + XMGLOBALCONST XMVECTORF32 g_boxScale = { { { 0.25f, 0.25f, 0.25f, 0.25f } } }; + XMGLOBALCONST XMVECTORF32 g_boxScale3D = { { { 0.125f, 0.125f, 0.125f, 0.125f } } }; + + #define AVERAGE4( res, p0, p1, p2, p3 ) \ +{ \ + XMVECTOR v = XMVectorAdd((p0), (p1)); \ + v = XMVectorAdd(v, (p2)); \ + v = XMVectorAdd(v, (p3)); \ + res = XMVectorMultiply(v, g_boxScale); \ +} + + #define AVERAGE8( res, p0, p1, p2, p3, p4, p5, p6, p7) \ +{ \ + XMVECTOR v = XMVectorAdd((p0), (p1)); \ + v = XMVectorAdd(v, (p2)); \ + v = XMVectorAdd(v, (p3)); \ + v = XMVectorAdd(v, (p4)); \ + v = XMVectorAdd(v, (p5)); \ + v = XMVectorAdd(v, (p6)); \ + v = XMVectorAdd(v, (p7)); \ + res = XMVectorMultiply(v, g_boxScale3D); \ +} + + + //------------------------------------------------------------------------------------- + // Linear filtering helpers + //------------------------------------------------------------------------------------- + + struct LinearFilter + { + size_t u0; + float weight0; + size_t u1; + float weight1; + }; + + inline void CreateLinearFilter(_In_ size_t source, _In_ size_t dest, _In_ bool wrap, _Out_writes_(dest) LinearFilter* lf) noexcept + { + assert(source > 0); + assert(dest > 0); + assert(lf != nullptr); + + const float scale = float(source) / float(dest); + + // Mirror is the same case as clamp for linear + + for (size_t u = 0; u < dest; ++u) + { + const float srcB = (float(u) + 0.5f) * scale + 0.5f; + + ptrdiff_t isrcB = ptrdiff_t(srcB); + ptrdiff_t isrcA = isrcB - 1; + + const float weight = 1.0f + float(isrcB) - srcB; + + if (isrcA < 0) + { + isrcA = (wrap) ? (ptrdiff_t(source) - 1) : 0; + } + + if (size_t(isrcB) >= source) + { + isrcB = (wrap) ? 0 : (ptrdiff_t(source) - 1); + } + + auto& entry = lf[u]; + entry.u0 = size_t(isrcA); + entry.weight0 = weight; + + entry.u1 = size_t(isrcB); + entry.weight1 = 1.0f - weight; + } + } + + #define BILINEAR_INTERPOLATE( res, x, y, r0, r1 ) \ + res = XMVectorAdd(XMVectorScale(XMVectorAdd(XMVectorScale((r0)[ x.u0 ], x.weight0), XMVectorScale((r0)[ x.u1 ], x.weight1)), y.weight0), \ + XMVectorScale(XMVectorAdd(XMVectorScale((r1)[ x.u0 ], x.weight0), XMVectorScale((r1)[ x.u1 ], x.weight1)), y.weight1) ); + + #define TRILINEAR_INTERPOLATE( res, x, y, z, r0, r1, r2, r3 ) \ +{\ + const XMVECTOR a0 = XMVectorScale(XMVectorAdd(XMVectorScale((r0)[ x.u0 ], x.weight0 ), XMVectorScale((r0)[ x.u1 ], x.weight1)), y.weight0); \ + const XMVECTOR a1 = XMVectorScale(XMVectorAdd(XMVectorScale((r1)[ x.u0 ], x.weight0 ), XMVectorScale((r1)[ x.u1 ], x.weight1)), y.weight1); \ + const XMVECTOR a2 = XMVectorScale(XMVectorAdd(XMVectorScale((r2)[ x.u0 ], x.weight0 ), XMVectorScale((r2)[ x.u1 ], x.weight1)), y.weight0); \ + const XMVECTOR a3 = XMVectorScale(XMVectorAdd(XMVectorScale((r3)[ x.u0 ], x.weight0 ), XMVectorScale((r3)[ x.u1 ], x.weight1)), y.weight1); \ + res = XMVectorAdd(XMVectorScale(XMVectorAdd(a0, a1), z.weight0), XMVectorScale(XMVectorAdd(a2, a3), z.weight1)); \ +} + + //------------------------------------------------------------------------------------- + // Cubic filtering helpers + //------------------------------------------------------------------------------------- + + XMGLOBALCONST XMVECTORF32 g_cubicThird = { { { 1.f / 3.f, 1.f / 3.f, 1.f / 3.f, 1.f / 3.f } } }; + XMGLOBALCONST XMVECTORF32 g_cubicSixth = { { { 1.f / 6.f, 1.f / 6.f, 1.f / 6.f, 1.f / 6.f } } }; + XMGLOBALCONST XMVECTORF32 g_cubicHalf = { { { 1.f / 2.f, 1.f / 2.f, 1.f / 2.f, 1.f / 2.f } } }; + + constexpr ptrdiff_t bounduvw(ptrdiff_t u, ptrdiff_t maxu, bool wrap, bool mirror) noexcept + { + if (wrap) + { + if (u < 0) + { + u = maxu + u + 1; + } + else if (u > maxu) + { + u = u - maxu - 1; + } + } + else if (mirror) + { + if (u < 0) + { + u = (-u) - 1; + } + else if (u > maxu) + { + u = maxu - (u - maxu - 1); + } + } + + // Handles clamp, but also a safety factor for degenerate images for wrap/mirror + u = std::min(u, maxu); + u = std::max(u, 0); + + return u; + } + + struct CubicFilter + { + size_t u0; + size_t u1; + size_t u2; + size_t u3; + float x; + }; + + inline void CreateCubicFilter(_In_ size_t source, _In_ size_t dest, _In_ bool wrap, _In_ bool mirror, _Out_writes_(dest) CubicFilter* cf) noexcept + { + assert(source > 0); + assert(dest > 0); + assert(cf != nullptr); + + const float scale = float(source) / float(dest); + + for (size_t u = 0; u < dest; ++u) + { + const float srcB = (float(u) + 0.5f) * scale - 0.5f; + + const ptrdiff_t isrcB = bounduvw(ptrdiff_t(srcB), ptrdiff_t(source) - 1, wrap, mirror); + const ptrdiff_t isrcA = bounduvw(isrcB - 1, ptrdiff_t(source) - 1, wrap, mirror); + const ptrdiff_t isrcC = bounduvw(isrcB + 1, ptrdiff_t(source) - 1, wrap, mirror); + const ptrdiff_t isrcD = bounduvw(isrcB + 2, ptrdiff_t(source) - 1, wrap, mirror); + + auto& entry = cf[u]; + entry.u0 = size_t(isrcA); + entry.u1 = size_t(isrcB); + entry.u2 = size_t(isrcC); + entry.u3 = size_t(isrcD); + + const float x = srcB - float(isrcB); + entry.x = x; + } + } + + #define CUBIC_INTERPOLATE( res, dx, p0, p1, p2, p3 ) \ +{ \ + const XMVECTOR a0 = (p1); \ + const XMVECTOR d0 = XMVectorSubtract(p0, a0); \ + const XMVECTOR d2 = XMVectorSubtract(p2, a0); \ + const XMVECTOR d3 = XMVectorSubtract(p3, a0); \ + XMVECTOR a1 = XMVectorSubtract(d2, XMVectorMultiply(g_cubicThird, d0)); \ + a1 = XMVectorSubtract(a1, XMVectorMultiply(g_cubicSixth, d3)); \ + const XMVECTOR a2 = XMVectorAdd(XMVectorMultiply(g_cubicHalf, d0), XMVectorMultiply(g_cubicHalf, d2)); \ + XMVECTOR a3 = XMVectorSubtract(XMVectorMultiply(g_cubicSixth, d3), XMVectorMultiply(g_cubicSixth, d0)); \ + a3 = XMVectorSubtract(a3, XMVectorMultiply(g_cubicHalf, d2)); \ + const XMVECTOR vdx = XMVectorReplicate(dx); \ + const XMVECTOR vdx2 = XMVectorMultiply(vdx, vdx); \ + const XMVECTOR vdx3 = XMVectorMultiply(vdx2, vdx); \ + res = XMVectorAdd(XMVectorAdd(XMVectorAdd(a0, XMVectorMultiply(a1, vdx)), XMVectorMultiply(a2, vdx2)), XMVectorMultiply(a3, vdx3)); \ +} + + + //------------------------------------------------------------------------------------- + // Triangle filtering helpers + //------------------------------------------------------------------------------------- + + struct FilterTo + { + size_t u; + float weight; + }; + + struct FilterFrom + { + size_t count; + size_t sizeInBytes; + FilterTo to[1]; // variable-sized array + }; + + struct Filter + { + size_t sizeInBytes; + size_t totalSize; + FilterFrom from[1]; // variable-sized array + }; + + struct TriangleRow + { + size_t remaining; + TriangleRow* next; + ScopedAlignedArrayXMVECTOR scanline; + + TriangleRow() noexcept : remaining(0), next(nullptr) {} + }; + + constexpr size_t TF_FILTER_SIZE = sizeof(Filter) - sizeof(FilterFrom); + constexpr size_t TF_FROM_SIZE = sizeof(FilterFrom) - sizeof(FilterTo); + constexpr size_t TF_TO_SIZE = sizeof(FilterTo); + + constexpr float TF_EPSILON = 0.00001f; + + inline HRESULT CreateTriangleFilter(_In_ size_t source, _In_ size_t dest, _In_ bool wrap, _Inout_ std::unique_ptr& tf) noexcept + { + assert(source > 0); + assert(dest > 0); + + const float scale = float(dest) / float(source); + const float scaleInv = 0.5f / scale; + + // Determine storage required for filter and allocate memory if needed + size_t totalSize = TF_FILTER_SIZE + TF_FROM_SIZE + TF_TO_SIZE; + const float repeat = (wrap) ? 1.f : 0.f; + + for (size_t u = 0; u < source; ++u) + { + const float src = float(u) - 0.5f; + const float destMin = src * scale; + const float destMax = destMin + scale; + const float t = destMax - destMin + repeat + 1.f; + totalSize += TF_FROM_SIZE + TF_TO_SIZE + size_t(t) * TF_TO_SIZE * 2; + } + + uint8_t* pFilter = nullptr; + + if (tf) + { + // See if existing filter memory block is large enough to reuse + if (tf->totalSize >= totalSize) + { + pFilter = reinterpret_cast(tf.get()); + } + else + { + // Need to reallocate filter memory block + tf.reset(nullptr); + } + } + + if (!tf) + { + // Allocate filter memory block + pFilter = new (std::nothrow) uint8_t[totalSize]; + if (!pFilter) + return E_OUTOFMEMORY; + + tf.reset(reinterpret_cast(pFilter)); + tf->totalSize = totalSize; + } + + assert(pFilter != nullptr); + _Analysis_assume_(pFilter != nullptr); + + // Filter setup + size_t sizeInBytes = TF_FILTER_SIZE; + size_t accumU = 0; + float accumWeight = 0.f; + + for (size_t u = 0; u < source; ++u) + { + // Setup from entry + const size_t sizeFrom = sizeInBytes; + auto pFrom = reinterpret_cast(pFilter + sizeInBytes); + sizeInBytes += TF_FROM_SIZE; + + if (sizeInBytes > totalSize) + return E_FAIL; + + size_t toCount = 0; + + // Perform two passes to capture the influences from both sides + for (size_t j = 0; j < 2; ++j) + { + const float src = float(u + j) - 0.5f; + + float destMin = src * scale; + float destMax = destMin + scale; + + if (!wrap) + { + // Clamp + if (destMin < 0.f) + destMin = 0.f; + if (destMax > float(dest)) + destMax = float(dest); + } + + for (auto k = static_cast(floorf(destMin)); float(k) < destMax; ++k) + { + float d0 = float(k); + float d1 = d0 + 1.f; + + size_t u0; + if (k < 0) + { + // Handle wrap + u0 = size_t(k + ptrdiff_t(dest)); + } + else if (k >= ptrdiff_t(dest)) + { + // Handle wrap + u0 = size_t(k - ptrdiff_t(dest)); + } + else + { + u0 = size_t(k); + } + + // Save previous accumulated weight (if any) + if (u0 != accumU) + { + if (accumWeight > TF_EPSILON) + { + auto pTo = reinterpret_cast(pFilter + sizeInBytes); + sizeInBytes += TF_TO_SIZE; + ++toCount; + + if (sizeInBytes > totalSize) + return E_FAIL; + + pTo->u = accumU; + pTo->weight = accumWeight; + } + + accumWeight = 0.f; + accumU = u0; + } + + // Clip destination + if (d0 < destMin) + d0 = destMin; + if (d1 > destMax) + d1 = destMax; + + // Calculate average weight over destination pixel + + float weight; + if (!wrap && src < 0.f) + weight = 1.f; + else if (!wrap && ((src + 1.f) >= float(source))) + weight = 0.f; + else + weight = (d0 + d1) * scaleInv - src; + + accumWeight += (d1 - d0) * (j ? (1.f - weight) : weight); + } + } + + // Store accumulated weight + if (accumWeight > TF_EPSILON) + { + auto pTo = reinterpret_cast(pFilter + sizeInBytes); + sizeInBytes += TF_TO_SIZE; + ++toCount; + + if (sizeInBytes > totalSize) + return E_FAIL; + + pTo->u = accumU; + pTo->weight = accumWeight; + } + + accumWeight = 0.f; + + // Finalize from entry + pFrom->count = toCount; + pFrom->sizeInBytes = sizeInBytes - sizeFrom; + } + + tf->sizeInBytes = sizeInBytes; + + return S_OK; + } + + } // namespace Filters +} // namespace DirectX diff --git a/external/DirectXTex/scoped.h b/external/DirectXTex/scoped.h new file mode 100644 index 00000000..363c393f --- /dev/null +++ b/external/DirectXTex/scoped.h @@ -0,0 +1,112 @@ +//------------------------------------------------------------------------------------- +// scoped.h +// +// Utility header with helper classes for exception-safe handling of resources +// +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +//------------------------------------------------------------------------------------- + +#pragma once + +#include +#include +#include +#include +#include + +#ifndef _WIN32 +#include + +struct aligned_deleter { void operator()(void* p) noexcept { free(p); } }; + +using ScopedAlignedArrayFloat = std::unique_ptr; + +inline ScopedAlignedArrayFloat make_AlignedArrayFloat(uint64_t count) +{ + uint64_t size = sizeof(float) * count; + size = (size + 15u) & ~0xF; + if (size > static_cast(UINT32_MAX)) + return nullptr; + + auto ptr = aligned_alloc(16, static_cast(size)); + return ScopedAlignedArrayFloat(static_cast(ptr)); +} + +using ScopedAlignedArrayXMVECTOR = std::unique_ptr; + +inline ScopedAlignedArrayXMVECTOR make_AlignedArrayXMVECTOR(uint64_t count) +{ + uint64_t size = sizeof(DirectX::XMVECTOR) * count; + if (size > static_cast(UINT32_MAX)) + return nullptr; + auto ptr = aligned_alloc(16, static_cast(size)); + return ScopedAlignedArrayXMVECTOR(static_cast(ptr)); +} + +#else // WIN32 +//--------------------------------------------------------------------------------- +#include + +struct aligned_deleter { void operator()(void* p) noexcept { _aligned_free(p); } }; + +using ScopedAlignedArrayFloat = std::unique_ptr; + +inline ScopedAlignedArrayFloat make_AlignedArrayFloat(uint64_t count) +{ + const uint64_t size = sizeof(float) * count; + if (size > static_cast(UINT32_MAX)) + return nullptr; + auto ptr = _aligned_malloc(static_cast(size), 16); + return ScopedAlignedArrayFloat(static_cast(ptr)); +} + +using ScopedAlignedArrayXMVECTOR = std::unique_ptr; + +inline ScopedAlignedArrayXMVECTOR make_AlignedArrayXMVECTOR(uint64_t count) +{ + const uint64_t size = sizeof(DirectX::XMVECTOR) * count; + if (size > static_cast(UINT32_MAX)) + return nullptr; + auto ptr = _aligned_malloc(static_cast(size), 16); + return ScopedAlignedArrayXMVECTOR(static_cast(ptr)); +} + +//--------------------------------------------------------------------------------- +struct handle_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) CloseHandle(h); } }; + +using ScopedHandle = std::unique_ptr; + +inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; } + +//--------------------------------------------------------------------------------- +struct find_closer { void operator()(HANDLE h) noexcept { assert(h != INVALID_HANDLE_VALUE); if (h) FindClose(h); } }; + +using ScopedFindHandle = std::unique_ptr; + +//--------------------------------------------------------------------------------- +class auto_delete_file +{ +public: + auto_delete_file(HANDLE hFile) noexcept : m_handle(hFile) {} + + auto_delete_file(const auto_delete_file&) = delete; + auto_delete_file& operator=(const auto_delete_file&) = delete; + + ~auto_delete_file() + { + if (m_handle) + { + FILE_DISPOSITION_INFO info = {}; + info.DeleteFile = TRUE; + std::ignore = SetFileInformationByHandle(m_handle, FileDispositionInfo, &info, sizeof(info)); + } + } + + void clear() noexcept { m_handle = nullptr; } + +private: + HANDLE m_handle; +}; + +#endif // WIN32 diff --git a/external/bc7enc/CMakeLists.txt b/external/bc7enc/CMakeLists.txt deleted file mode 100644 index ac6e4822..00000000 --- a/external/bc7enc/CMakeLists.txt +++ /dev/null @@ -1,58 +0,0 @@ -project(bc7enc) - -cmake_minimum_required(VERSION 2.8) -option(BUILD_X64 "build 64-bit" TRUE) - -message("Initial BUILD_X64=${BUILD_X64}") -message("Initial CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") - -if( NOT CMAKE_BUILD_TYPE ) - set( CMAKE_BUILD_TYPE Release ) -endif( NOT CMAKE_BUILD_TYPE ) - -message( ${PROJECT_NAME} " build type: " ${CMAKE_BUILD_TYPE} ) - -if (BUILD_X64) - message("Building 64-bit") -else() - message("Building 32-bit") -endif(BUILD_X64) - -if (NOT MSVC) -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") - -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") -endif() - -# -fno-strict-aliasing shouldn't be necessary, it's here because that is what MSVC uses by default and that's what I've tested with the most. -if (NOT MSVC) - set(GCC_COMPILE_FLAGS "-fno-strict-aliasing -Wall -Wextra") - if (NOT BUILD_X64) - set(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS} -m32") - endif() -endif() - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COMPILE_FLAGS}") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") - -set (BC7ENC_SRC_LIST ${COMMON_SRC_LIST} - bc7enc.c - bc7decomp.cpp - lodepng.cpp - test.cpp - ) - -add_executable(bc7enc ${BC7ENC_SRC_LIST}) - -if (NOT MSVC) - target_link_libraries(bc7enc m) -endif() - - diff --git a/external/bc7enc/LICENSE b/external/bc7enc/LICENSE deleted file mode 100644 index 71e10daf..00000000 --- a/external/bc7enc/LICENSE +++ /dev/null @@ -1,66 +0,0 @@ -The following source code files are available under 2 licenses -- choose whichever you prefer: -rgbcx.h -bc7decomp.cpp/h -bc7enc.c - -ALTERNATIVE A - MIT License -Copyright(c) 2020 Richard Geldreich, Jr. -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files(the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions : -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain(www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non - commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain.We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors.We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ------------------------------------------------------------------------------- - -LodePNG version 20161127 - -Copyright (c) 2005-2016 Lode Vandevenne - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. - diff --git a/external/bc7enc/README.md b/external/bc7enc/README.md deleted file mode 100644 index 66ed8f02..00000000 --- a/external/bc7enc/README.md +++ /dev/null @@ -1,152 +0,0 @@ -bc7enc - Fast, single source file BC1-5 and BC7/BPTC GPU texture encoders. - -Note: The latest version of this repo, supporting rate distortion optimization for BC1-7, is [here](https://github.com/richgel999/bc7enc_rdo). The BC7 encoder here does not support all the modes, and is not vectorized. See bc7e.ispc in the bc7enc_rdo repo, which is far better. - -This is primarily a testbed for rgbcx.h, which is [one of the highest quality BC1 encoders available (if not the highest quality)](https://aras-p.info/blog/2020/12/08/Texture-Compression-in-2020/). - -To compile: Use CMake, and run "cmake ." in the project's root directory to generate either a Visual Studio .SLN file or make files. - -Features: -- BC1/3 encoder (in [rgbcx.h](https://github.com/richgel999/bc7enc/blob/master/rgbcx.h)) uses a new algorithm (which we've named "prioritized cluster fit") which is 3-4x faster than traditional cluster fit (as implemented in [libsquish](https://github.com/svn2github/libsquish) with SSE2) at the same or slightly higher average quality using scalar CPU instructions. This algorithm is suitable for GPU encoder implementations. - -The BC1/BC3 encoder also implements [Castano's optimal endpoint rounding improvement](https://gist.github.com/castano/c92c7626f288f9e99e158520b14a61cf). - -rgbcx's BC1 encoder is faster than both AMD Compressonator and libsquish at the same average quality. - -- BC7 encoder (in bc7enc.c/.h) has perceptual colorspace metric support, and is very fast compared to ispc_texcomp (see below) for RGB textures. Important: The BC7 encoder included in this repo is still a work in progress. I took bc7enc16 and added more modes for better alpha support, but it needs more testing and development. My best BC7 encoder is BC7E, located here: https://github.com/BinomialLLC/bc7e - -- Full decoders for BC1-5/7. BC7 decoder is in bc7decomp.cpp/.h, BC1-5 decoders in rgbcx.h. - -This project is basically a demo of some of the techniques we use in Basis BC7, -which is Binomial's state of the art vectorized BC7 encoder. Basis BC7 is the -highest quality and fastest CPU BC7 encoder available (2-3x faster than -ispc_texcomp). It supports all modes and linear/perceptual colorspace metrics. -Licensees get full ISPC source code so they can customize the codec as needed. - -bc7enc currently only supports modes 1 and 6 for RGB, and modes 1, 5, 6, and 7 for alpha. The plan is to add all the modes. See the [bc7enc16](https://github.com/richgel999/bc7enc16) project for the previous version (which only supports modes 1 and 6). Note this readme still refers to "bc7enc16", but bc7enc is the same encoder but with more alpha modes. - -This codec supports a perceptual mode when encoding BC7, where it computes colorspace error in -weighted YCbCr space (like etc2comp), and it also supports weighted RGBA -metrics. It's particular strong in perceptual mode, beating the current state of -the art CPU encoder (Intel's ispc_texcomp) by a wide margin when measured by -Luma PSNR, even though it only supports 2 modes and isn't vectorized. - -Why only modes 1 and 6 for opaque BC7? -Because with these two modes you have a complete encoder that supports both -opaque and transparent textures in a small amount (~1400 lines) of -understandable plain C code. Mode 6 excels on smooth blocks, and mode 1 is -strong with complex blocks, and a strong encoder that combines both modes can be -quite high quality. Fast mode 6-only encoders will have noticeable block -artifacts which this codec avoids by fully supporting mode 1. - -Modes 1 and 6 are typically the most used modes on many textures using other -encoders. Mode 1 has two subsets, 64 possible partitions, and 3-bit indices, -while mode 6 has large 4-bit indices and high precision 7777.1 endpoints. This -codec produces output that is far higher quality than any BC1 encoder, and -approaches (or in perceptual mode exceeds!) the quality of other full BC7 -encoders. - -Why is bc7enc16 so fast in perceptual mode? -Computing error in YCbCr space is more expensive than in RGB space, yet bc7enc16 -in perceptual mode is stronger than ispc_texcomp (see the benchmark below) - -even without SSE/AVX vectorization and with only 2 modes to work with! - -Most BC7 encoders only support linear RGB colorspace metrics, which is a -fundamental weakness. Some support weighted RGB metrics, which is better. With -linear RGB metrics, encoding error is roughly balanced between each channel, and -encoders have to work *very* hard (examining large amounts of RGB search space) -to get overall quality up. With perceptual colorspace metrics, RGB error tends -to become a bit unbalanced, with green quality favored more highly than red and -blue, and blue quality favored the least. A perceptual encoder is tuned to -prefer exploring solutions along the luma axis, where it's much less work to find -solutions with less luma error. bc7enc16 is, as far as I know, the first BC7 -codec to support computing error in weighted YCbCr colorspace. - -Note: Most of the timings here (except for the ispc_texcomp "fast" mode timings at the very bottom) -are for the *original* release, before I added several more optimizations. The latest version of -bc7enc16.c is around 8-27% faster than the initial release at same quality (when mode 1 is enabled - -there's no change with just mode 6). - -Some benchmarks across 31 images (kodim corpus+others): - -Perceptual (average REC709 Luma PSNR - higher is better quality): -``` -iscp_texcomp slow vs. bc7enc16 uber4/max_partitions 64 -iscp_texcomp: 355.4 secs 48.6 dB -bc7enc16: 122.6 secs 50.0 dB - -iscp_texcomp slow vs. bc7enc16 uber0/max_partitions 64 -iscp_texcomp: 355.4 secs 48.6 dB -bc7enc16: 38.3 secs 49.6 dB - -iscp_texcomp basic vs. bc7enc16 uber0/max_partitions 16 -ispc_texcomp: 100.2 secs 48.3 dB -bc7enc16: 20.8 secs 49.3 dB - -iscp_texcomp fast vs. bc7enc16 uber0/max_partitions 16 -iscp_texcomp: 41.5 secs 48.0 dB -bc7enc16: 20.8 secs 49.3 dB - -iscp_texcomp ultrafast vs. bc7enc16 uber0/max_partitions 0 -iscp_texcomp: 1.9 secs 46.2 dB -bc7enc16: 8.9 secs 48.4 dB - -Non-perceptual (average RGB PSNR): - -iscp_texcomp slow vs. bc7enc16 uber4/max_partitions 64 -iscp_texcomp: 355.4 secs 46.8 dB -bc7enc16: 51 secs 46.1 dB - -iscp_texcomp slow vs. bc7enc16 uber0/max_partitions 64 -iscp_texcomp: 355.4 secs 46.8 dB -bc7enc16: 29.3 secs 45.8 dB - -iscp_texcomp basic vs. bc7enc16 uber4/max_partitions 64 -iscp_texcomp: 99.9 secs 46.5 dB -bc7enc16: 51 secs 46.1 dB - -iscp_texcomp fast vs. bc7enc16 uber1/max_partitions 16 -ispc_texcomp: 41.5 secs 46.1 dB -bc7enc16: 19.8 secs 45.5 dB - -iscp_texcomp fast vs. bc7enc16 uber0/max_partitions 8 -ispc_texcomp: 41.5 secs 46.1 dB -bc7enc16: 10.46 secs 44.4 dB - -iscp_texcomp ultrafast vs. bc7enc16 uber0/max_partitions 0 -ispc_texcomp: 1.9 secs 42.7 dB -bc7enc16: 3.8 secs 42.7 dB - -DirectXTex CPU in "mode 6 only" mode vs. bc7enc16 uber1/max_partions 0 (mode 6 only), non-perceptual: - -DirectXTex: 466.4 secs 41.9 dB -bc7enc16: 6.7 secs 42.8 dB - -DirectXTex CPU in (default - no 3 subset modes) vs. bc7enc16 uber1/max_partions 64, non-perceptual: - -DirectXTex: 9485.1 secs 45.6 dB -bc7enc16: 36 secs 46.0 dB -``` -(Note this version of DirectXTex has a key pbit bugfix which I've submitted but -is still waiting to be accepted. Non-bugfixed versions will be slightly lower -quality.) - -UPDATE: To illustrate how strong the mode 1+6 implementation is in bc7enc16, let's compare ispc_texcomp -fast vs. the latest version of bc7enc16 uber4/max_partitions 64: - -Without filterbank optimizations: -``` - Time RGB PSNR Y PSNR -ispc_texcomp: 41.45 secs 46.09 dB 48.0 dB -bc7enc16: 41.42 secs 46.03 dB 48.2 dB - -With filterbank optimizations enabled: -bc7enc16: 38.78 secs 45.94 dB 48.12 dB -``` -They both have virtually the same average RGB PSNR with these settings (.06 dB is basically noise), but -bc7enc16 is just as fast as ispc_texcomp fast, even though it's not vectorized. Interestingly, our Y PSNR is better, -although bc7enc16 wasn't using perceptual metrics in these benchmarks. - -This was a multithreaded benchmark (using OpenMP) on a dual Xeon workstation. -ispc_texcomp was called with 64-blocks at a time and used AVX instructions. -Timings are for encoding only. diff --git a/external/bc7enc/bc7decomp.cpp b/external/bc7enc/bc7decomp.cpp deleted file mode 100644 index 3099ec4d..00000000 --- a/external/bc7enc/bc7decomp.cpp +++ /dev/null @@ -1,429 +0,0 @@ -// File: bc7decomp.c - Richard Geldreich, Jr. 3/31/2020 - MIT license or public domain (see end of file) -#include "bc7decomp.h" - -namespace bc7decomp -{ - -const uint32_t g_bc7_weights2[4] = { 0, 21, 43, 64 }; -const uint32_t g_bc7_weights3[8] = { 0, 9, 18, 27, 37, 46, 55, 64 }; -const uint32_t g_bc7_weights4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; - -const uint8_t g_bc7_partition2[64 * 16] = -{ - 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1, 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1, 0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1, 0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1, 0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1, 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, - 0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1, 0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0, 0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1, - 0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0, 0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0, 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0, 0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0, - 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, 0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0, 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0, 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0, 0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0, 0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1, 0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1, - 0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0, 0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0, 0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0, 0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0, 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0, 0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1, 0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0, - 0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0, 0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0, 0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0, 0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0, - 0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1, 0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1, 0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1, 0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1, 0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0, 0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0, 0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1 -}; - -const uint8_t g_bc7_partition3[64 * 16] = -{ - 0,0,1,1,0,0,1,1,0,2,2,1,2,2,2,2, 0,0,0,1,0,0,1,1,2,2,1,1,2,2,2,1, 0,0,0,0,2,0,0,1,2,2,1,1,2,2,1,1, 0,2,2,2,0,0,2,2,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2, 0,0,1,1,0,0,1,1,0,0,2,2,0,0,2,2, 0,0,2,2,0,0,2,2,1,1,1,1,1,1,1,1, 0,0,1,1,0,0,1,1,2,2,1,1,2,2,1,1, - 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2, 0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2, 0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2, 0,1,2,2,0,1,2,2,0,1,2,2,0,1,2,2, 0,0,1,1,0,1,1,2,1,1,2,2,1,2,2,2, 0,0,1,1,2,0,0,1,2,2,0,0,2,2,2,0, - 0,0,0,1,0,0,1,1,0,1,1,2,1,1,2,2, 0,1,1,1,0,0,1,1,2,0,0,1,2,2,0,0, 0,0,0,0,1,1,2,2,1,1,2,2,1,1,2,2, 0,0,2,2,0,0,2,2,0,0,2,2,1,1,1,1, 0,1,1,1,0,1,1,1,0,2,2,2,0,2,2,2, 0,0,0,1,0,0,0,1,2,2,2,1,2,2,2,1, 0,0,0,0,0,0,1,1,0,1,2,2,0,1,2,2, 0,0,0,0,1,1,0,0,2,2,1,0,2,2,1,0, - 0,1,2,2,0,1,2,2,0,0,1,1,0,0,0,0, 0,0,1,2,0,0,1,2,1,1,2,2,2,2,2,2, 0,1,1,0,1,2,2,1,1,2,2,1,0,1,1,0, 0,0,0,0,0,1,1,0,1,2,2,1,1,2,2,1, 0,0,2,2,1,1,0,2,1,1,0,2,0,0,2,2, 0,1,1,0,0,1,1,0,2,0,0,2,2,2,2,2, 0,0,1,1,0,1,2,2,0,1,2,2,0,0,1,1, 0,0,0,0,2,0,0,0,2,2,1,1,2,2,2,1, - 0,0,0,0,0,0,0,2,1,1,2,2,1,2,2,2, 0,2,2,2,0,0,2,2,0,0,1,2,0,0,1,1, 0,0,1,1,0,0,1,2,0,0,2,2,0,2,2,2, 0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0, 0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0, 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0, 0,1,2,0,2,0,1,2,1,2,0,1,0,1,2,0, 0,0,1,1,2,2,0,0,1,1,2,2,0,0,1,1, - 0,0,1,1,1,1,2,2,2,2,0,0,0,0,1,1, 0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,2,1,2,1,2,1, 0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2, 0,0,2,2,0,0,1,1,0,0,2,2,0,0,1,1, 0,2,2,0,1,2,2,1,0,2,2,0,1,2,2,1, 0,1,0,1,2,2,2,2,2,2,2,2,0,1,0,1, 0,0,0,0,2,1,2,1,2,1,2,1,2,1,2,1, - 0,1,0,1,0,1,0,1,0,1,0,1,2,2,2,2, 0,2,2,2,0,1,1,1,0,2,2,2,0,1,1,1, 0,0,0,2,1,1,1,2,0,0,0,2,1,1,1,2, 0,0,0,0,2,1,1,2,2,1,1,2,2,1,1,2, 0,2,2,2,0,1,1,1,0,1,1,1,0,2,2,2, 0,0,0,2,1,1,1,2,1,1,1,2,0,0,0,2, 0,1,1,0,0,1,1,0,0,1,1,0,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,1,2,2,1,1,2, - 0,1,1,0,0,1,1,0,2,2,2,2,2,2,2,2, 0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2, 0,0,2,2,1,1,2,2,1,1,2,2,0,0,2,2, 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2, 0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,1, 0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2, 0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2, 0,1,1,1,2,0,1,1,2,2,0,1,2,2,2,0, -}; - -const uint8_t g_bc7_table_anchor_index_second_subset[64] = { 15,15,15,15,15,15,15,15, 15,15,15,15,15,15,15,15, 15, 2, 8, 2, 2, 8, 8,15, 2, 8, 2, 2, 8, 8, 2, 2, 15,15, 6, 8, 2, 8,15,15, 2, 8, 2, 2, 2,15,15, 6, 6, 2, 6, 8,15,15, 2, 2, 15,15,15,15,15, 2, 2,15 }; - -const uint8_t g_bc7_table_anchor_index_third_subset_1[64] = -{ - 3, 3,15,15, 8, 3,15,15, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, 8,15, 3, 3, 6,10, 5, 8, 8, 6, 8, 5,15,15, 8,15, 3, 5, 6,10, 8,15, 15, 3,15, 5,15,15,15,15, 3,15, 5, 5, 5, 8, 5,10, 5,10, 8,13,15,12, 3, 3 -}; - -const uint8_t g_bc7_table_anchor_index_third_subset_2[64] = -{ - 15, 8, 8, 3,15,15, 3, 8, 15,15,15,15,15,15,15, 8, 15, 8,15, 3,15, 8,15, 8, 3,15, 6,10,15,15,10, 8, 15, 3,15,10,10, 8, 9,10, 6,15, 8,15, 3, 6, 6, 8, 15, 3,15,15,15,15,15,15, 15,15,15,15, 3,15,15, 8 -}; - -inline uint32_t read_bits32(const uint8_t* pBuf, uint32_t& bit_offset, uint32_t codesize) -{ - assert(codesize <= 32); - uint32_t bits = 0; - uint32_t total_bits = 0; - - while (total_bits < codesize) - { - uint32_t byte_bit_offset = bit_offset & 7; - uint32_t bits_to_read = std::min(codesize - total_bits, 8 - byte_bit_offset); - - uint32_t byte_bits = pBuf[bit_offset >> 3] >> byte_bit_offset; - byte_bits &= ((1 << bits_to_read) - 1); - - bits |= (byte_bits << total_bits); - - total_bits += bits_to_read; - bit_offset += bits_to_read; - } - - return bits; -} - -// BC7 mode 0-7 decompression. -// Instead of one monster routine to unpack all the BC7 modes, we're lumping the 3 subset, 2 subset, 1 subset, and dual plane modes together into simple shared routines. - -static inline uint32_t bc7_dequant(uint32_t val, uint32_t pbit, uint32_t val_bits) { assert(val < (1U << val_bits)); assert(pbit < 2); assert(val_bits >= 4 && val_bits <= 8); const uint32_t total_bits = val_bits + 1; val = (val << 1) | pbit; val <<= (8 - total_bits); val |= (val >> total_bits); assert(val <= 255); return val; } -static inline uint32_t bc7_dequant(uint32_t val, uint32_t val_bits) { assert(val < (1U << val_bits)); assert(val_bits >= 4 && val_bits <= 8); val <<= (8 - val_bits); val |= (val >> val_bits); assert(val <= 255); return val; } - -static inline uint32_t bc7_interp2(uint32_t l, uint32_t h, uint32_t w) { assert(w < 4); return (l * (64 - g_bc7_weights2[w]) + h * g_bc7_weights2[w] + 32) >> 6; } -static inline uint32_t bc7_interp3(uint32_t l, uint32_t h, uint32_t w) { assert(w < 8); return (l * (64 - g_bc7_weights3[w]) + h * g_bc7_weights3[w] + 32) >> 6; } -static inline uint32_t bc7_interp4(uint32_t l, uint32_t h, uint32_t w) { assert(w < 16); return (l * (64 - g_bc7_weights4[w]) + h * g_bc7_weights4[w] + 32) >> 6; } -static inline uint32_t bc7_interp(uint32_t l, uint32_t h, uint32_t w, uint32_t bits) -{ - assert(l <= 255 && h <= 255); - switch (bits) - { - case 2: return bc7_interp2(l, h, w); - case 3: return bc7_interp3(l, h, w); - case 4: return bc7_interp4(l, h, w); - default: - break; - } - return 0; -} - -bool unpack_bc7_mode0_2(uint32_t mode, const void* pBlock_bits, color_rgba* pPixels) -{ - //const uint32_t SUBSETS = 3; - const uint32_t ENDPOINTS = 6; - const uint32_t COMPS = 3; - const uint32_t WEIGHT_BITS = (mode == 0) ? 3 : 2; - const uint32_t ENDPOINT_BITS = (mode == 0) ? 4 : 5; - const uint32_t PBITS = (mode == 0) ? 6 : 0; - const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; - - uint32_t bit_offset = 0; - const uint8_t* pBuf = static_cast(pBlock_bits); - - if (read_bits32(pBuf, bit_offset, mode + 1) != (1U << mode)) return false; - - const uint32_t part = read_bits32(pBuf, bit_offset, (mode == 0) ? 4 : 6); - - color_rgba endpoints[ENDPOINTS]; - for (uint32_t c = 0; c < COMPS; c++) - for (uint32_t e = 0; e < ENDPOINTS; e++) - endpoints[e][c] = (uint8_t)read_bits32(pBuf, bit_offset, ENDPOINT_BITS); - - uint32_t pbits[6]; - for (uint32_t p = 0; p < PBITS; p++) - pbits[p] = read_bits32(pBuf, bit_offset, 1); - - uint32_t weights[16]; - for (uint32_t i = 0; i < 16; i++) - weights[i] = read_bits32(pBuf, bit_offset, ((!i) || (i == g_bc7_table_anchor_index_third_subset_1[part]) || (i == g_bc7_table_anchor_index_third_subset_2[part])) ? (WEIGHT_BITS - 1) : WEIGHT_BITS); - - assert(bit_offset == 128); - - for (uint32_t e = 0; e < ENDPOINTS; e++) - for (uint32_t c = 0; c < 4; c++) - endpoints[e][c] = (uint8_t)((c == 3) ? 255 : (PBITS ? bc7_dequant(endpoints[e][c], pbits[e], ENDPOINT_BITS) : bc7_dequant(endpoints[e][c], ENDPOINT_BITS))); - - color_rgba block_colors[3][8]; - for (uint32_t s = 0; s < 3; s++) - for (uint32_t i = 0; i < WEIGHT_VALS; i++) - { - for (uint32_t c = 0; c < 3; c++) - block_colors[s][i][c] = (uint8_t)bc7_interp(endpoints[s * 2 + 0][c], endpoints[s * 2 + 1][c], i, WEIGHT_BITS); - block_colors[s][i][3] = 255; - } - - for (uint32_t i = 0; i < 16; i++) - pPixels[i] = block_colors[g_bc7_partition3[part * 16 + i]][weights[i]]; - - return true; -} - -bool unpack_bc7_mode1_3_7(uint32_t mode, const void* pBlock_bits, color_rgba* pPixels) -{ - //const uint32_t SUBSETS = 2; - const uint32_t ENDPOINTS = 4; - const uint32_t COMPS = (mode == 7) ? 4 : 3; - const uint32_t WEIGHT_BITS = (mode == 1) ? 3 : 2; - const uint32_t ENDPOINT_BITS = (mode == 7) ? 5 : ((mode == 1) ? 6 : 7); - const uint32_t PBITS = (mode == 1) ? 2 : 4; - const uint32_t SHARED_PBITS = (mode == 1) ? true : false; - const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; - - uint32_t bit_offset = 0; - const uint8_t* pBuf = static_cast(pBlock_bits); - - if (read_bits32(pBuf, bit_offset, mode + 1) != (1U << mode)) return false; - - const uint32_t part = read_bits32(pBuf, bit_offset, 6); - - color_rgba endpoints[ENDPOINTS]; - for (uint32_t c = 0; c < COMPS; c++) - for (uint32_t e = 0; e < ENDPOINTS; e++) - endpoints[e][c] = (uint8_t)read_bits32(pBuf, bit_offset, ENDPOINT_BITS); - - uint32_t pbits[4]; - for (uint32_t p = 0; p < PBITS; p++) - pbits[p] = read_bits32(pBuf, bit_offset, 1); - - uint32_t weights[16]; - for (uint32_t i = 0; i < 16; i++) - weights[i] = read_bits32(pBuf, bit_offset, ((!i) || (i == g_bc7_table_anchor_index_second_subset[part])) ? (WEIGHT_BITS - 1) : WEIGHT_BITS); - - assert(bit_offset == 128); - - for (uint32_t e = 0; e < ENDPOINTS; e++) - for (uint32_t c = 0; c < 4; c++) - endpoints[e][c] = (uint8_t)((c == ((mode == 7U) ? 4U : 3U)) ? 255 : bc7_dequant(endpoints[e][c], pbits[SHARED_PBITS ? (e >> 1) : e], ENDPOINT_BITS)); - - color_rgba block_colors[2][8]; - for (uint32_t s = 0; s < 2; s++) - for (uint32_t i = 0; i < WEIGHT_VALS; i++) - { - for (uint32_t c = 0; c < COMPS; c++) - block_colors[s][i][c] = (uint8_t)bc7_interp(endpoints[s * 2 + 0][c], endpoints[s * 2 + 1][c], i, WEIGHT_BITS); - block_colors[s][i][3] = (COMPS == 3) ? 255 : block_colors[s][i][3]; - } - - for (uint32_t i = 0; i < 16; i++) - pPixels[i] = block_colors[g_bc7_partition2[part * 16 + i]][weights[i]]; - - return true; -} - -bool unpack_bc7_mode4_5(uint32_t mode, const void* pBlock_bits, color_rgba* pPixels) -{ - const uint32_t ENDPOINTS = 2; - const uint32_t COMPS = 4; - const uint32_t WEIGHT_BITS = 2; - const uint32_t A_WEIGHT_BITS = (mode == 4) ? 3 : 2; - const uint32_t ENDPOINT_BITS = (mode == 4) ? 5 : 7; - const uint32_t A_ENDPOINT_BITS = (mode == 4) ? 6 : 8; - //const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; - //const uint32_t A_WEIGHT_VALS = 1 << A_WEIGHT_BITS; - - uint32_t bit_offset = 0; - const uint8_t* pBuf = static_cast(pBlock_bits); - - if (read_bits32(pBuf, bit_offset, mode + 1) != (1U << mode)) return false; - - const uint32_t comp_rot = read_bits32(pBuf, bit_offset, 2); - const uint32_t index_mode = (mode == 4) ? read_bits32(pBuf, bit_offset, 1) : 0; - - color_rgba endpoints[ENDPOINTS]; - for (uint32_t c = 0; c < COMPS; c++) - for (uint32_t e = 0; e < ENDPOINTS; e++) - endpoints[e][c] = (uint8_t)read_bits32(pBuf, bit_offset, (c == 3) ? A_ENDPOINT_BITS : ENDPOINT_BITS); - - const uint32_t weight_bits[2] = { index_mode ? A_WEIGHT_BITS : WEIGHT_BITS, index_mode ? WEIGHT_BITS : A_WEIGHT_BITS }; - - uint32_t weights[16], a_weights[16]; - - for (uint32_t i = 0; i < 16; i++) - (index_mode ? a_weights : weights)[i] = read_bits32(pBuf, bit_offset, weight_bits[index_mode] - ((!i) ? 1 : 0)); - - for (uint32_t i = 0; i < 16; i++) - (index_mode ? weights : a_weights)[i] = read_bits32(pBuf, bit_offset, weight_bits[1 - index_mode] - ((!i) ? 1 : 0)); - - assert(bit_offset == 128); - - for (uint32_t e = 0; e < ENDPOINTS; e++) - for (uint32_t c = 0; c < 4; c++) - endpoints[e][c] = (uint8_t)bc7_dequant(endpoints[e][c], (c == 3) ? A_ENDPOINT_BITS : ENDPOINT_BITS); - - color_rgba block_colors[8]; - for (uint32_t i = 0; i < (1U << weight_bits[0]); i++) - for (uint32_t c = 0; c < 3; c++) - block_colors[i][c] = (uint8_t)bc7_interp(endpoints[0][c], endpoints[1][c], i, weight_bits[0]); - - for (uint32_t i = 0; i < (1U << weight_bits[1]); i++) - block_colors[i][3] = (uint8_t)bc7_interp(endpoints[0][3], endpoints[1][3], i, weight_bits[1]); - - for (uint32_t i = 0; i < 16; i++) - { - pPixels[i] = block_colors[weights[i]]; - pPixels[i].a = block_colors[a_weights[i]].a; - if (comp_rot >= 1) - std::swap(pPixels[i].a, pPixels[i].m_comps[comp_rot - 1]); - } - - return true; -} - -struct bc7_mode_6 -{ - struct - { - uint64_t m_mode : 7; - uint64_t m_r0 : 7; - uint64_t m_r1 : 7; - uint64_t m_g0 : 7; - uint64_t m_g1 : 7; - uint64_t m_b0 : 7; - uint64_t m_b1 : 7; - uint64_t m_a0 : 7; - uint64_t m_a1 : 7; - uint64_t m_p0 : 1; - } m_lo; - - union - { - struct - { - uint64_t m_p1 : 1; - uint64_t m_s00 : 3; - uint64_t m_s10 : 4; - uint64_t m_s20 : 4; - uint64_t m_s30 : 4; - - uint64_t m_s01 : 4; - uint64_t m_s11 : 4; - uint64_t m_s21 : 4; - uint64_t m_s31 : 4; - - uint64_t m_s02 : 4; - uint64_t m_s12 : 4; - uint64_t m_s22 : 4; - uint64_t m_s32 : 4; - - uint64_t m_s03 : 4; - uint64_t m_s13 : 4; - uint64_t m_s23 : 4; - uint64_t m_s33 : 4; - - } m_hi; - - uint64_t m_hi_bits; - }; -}; - -bool unpack_bc7_mode6(const void *pBlock_bits, color_rgba *pPixels) -{ - static_assert(sizeof(bc7_mode_6) == 16, "sizeof(bc7_mode_6) == 16"); - - const bc7_mode_6 &block = *static_cast(pBlock_bits); - - if (block.m_lo.m_mode != (1 << 6)) - return false; - - const uint32_t r0 = (uint32_t)((block.m_lo.m_r0 << 1) | block.m_lo.m_p0); - const uint32_t g0 = (uint32_t)((block.m_lo.m_g0 << 1) | block.m_lo.m_p0); - const uint32_t b0 = (uint32_t)((block.m_lo.m_b0 << 1) | block.m_lo.m_p0); - const uint32_t a0 = (uint32_t)((block.m_lo.m_a0 << 1) | block.m_lo.m_p0); - const uint32_t r1 = (uint32_t)((block.m_lo.m_r1 << 1) | block.m_hi.m_p1); - const uint32_t g1 = (uint32_t)((block.m_lo.m_g1 << 1) | block.m_hi.m_p1); - const uint32_t b1 = (uint32_t)((block.m_lo.m_b1 << 1) | block.m_hi.m_p1); - const uint32_t a1 = (uint32_t)((block.m_lo.m_a1 << 1) | block.m_hi.m_p1); - - color_rgba vals[16]; - for (uint32_t i = 0; i < 16; i++) - { - const uint32_t w = g_bc7_weights4[i]; - const uint32_t iw = 64 - w; - vals[i].set_noclamp_rgba( - (r0 * iw + r1 * w + 32) >> 6, - (g0 * iw + g1 * w + 32) >> 6, - (b0 * iw + b1 * w + 32) >> 6, - (a0 * iw + a1 * w + 32) >> 6); - } - - pPixels[0] = vals[block.m_hi.m_s00]; - pPixels[1] = vals[block.m_hi.m_s10]; - pPixels[2] = vals[block.m_hi.m_s20]; - pPixels[3] = vals[block.m_hi.m_s30]; - - pPixels[4] = vals[block.m_hi.m_s01]; - pPixels[5] = vals[block.m_hi.m_s11]; - pPixels[6] = vals[block.m_hi.m_s21]; - pPixels[7] = vals[block.m_hi.m_s31]; - - pPixels[8] = vals[block.m_hi.m_s02]; - pPixels[9] = vals[block.m_hi.m_s12]; - pPixels[10] = vals[block.m_hi.m_s22]; - pPixels[11] = vals[block.m_hi.m_s32]; - - pPixels[12] = vals[block.m_hi.m_s03]; - pPixels[13] = vals[block.m_hi.m_s13]; - pPixels[14] = vals[block.m_hi.m_s23]; - pPixels[15] = vals[block.m_hi.m_s33]; - - return true; -} - -bool unpack_bc7(const void *pBlock, color_rgba *pPixels) -{ - const uint32_t first_byte = static_cast(pBlock)[0]; - - for (uint32_t mode = 0; mode <= 7; mode++) - { - if (first_byte & (1U << mode)) - { - switch (mode) - { - case 0: - case 2: - return unpack_bc7_mode0_2(mode, pBlock, pPixels); - case 1: - case 3: - case 7: - return unpack_bc7_mode1_3_7(mode, pBlock, pPixels); - case 4: - case 5: - return unpack_bc7_mode4_5(mode, pBlock, pPixels); - case 6: - return unpack_bc7_mode6(pBlock, pPixels); - default: - break; - } - } - } - - return false; -} - -} // namespace bc7decomp - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright(c) 2020 Richard Geldreich, Jr. -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files(the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions : -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain(www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non - commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain.We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors.We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- -*/ - diff --git a/external/bc7enc/bc7decomp.h b/external/bc7enc/bc7decomp.h deleted file mode 100644 index 3c1e8352..00000000 --- a/external/bc7enc/bc7decomp.h +++ /dev/null @@ -1,165 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -namespace bc7decomp -{ - -enum eNoClamp { cNoClamp }; - -template inline S clamp(S value, S low, S high) { return (value < low) ? low : ((value > high) ? high : value); } - -class color_rgba -{ -public: - union - { - uint8_t m_comps[4]; - - struct - { - uint8_t r; - uint8_t g; - uint8_t b; - uint8_t a; - }; - }; - - inline color_rgba() - { - static_assert(sizeof(*this) == 4, "sizeof(*this) != 4"); - } - - inline color_rgba(int y) - { - set(y); - } - - inline color_rgba(int y, int na) - { - set(y, na); - } - - inline color_rgba(int sr, int sg, int sb, int sa) - { - set(sr, sg, sb, sa); - } - - inline color_rgba(eNoClamp, int sr, int sg, int sb, int sa) - { - set_noclamp_rgba((uint8_t)sr, (uint8_t)sg, (uint8_t)sb, (uint8_t)sa); - } - - inline color_rgba& set_noclamp_y(int y) - { - m_comps[0] = (uint8_t)y; - m_comps[1] = (uint8_t)y; - m_comps[2] = (uint8_t)y; - m_comps[3] = (uint8_t)255; - return *this; - } - - inline color_rgba &set_noclamp_rgba(int sr, int sg, int sb, int sa) - { - m_comps[0] = (uint8_t)sr; - m_comps[1] = (uint8_t)sg; - m_comps[2] = (uint8_t)sb; - m_comps[3] = (uint8_t)sa; - return *this; - } - - inline color_rgba &set(int y) - { - m_comps[0] = static_cast(clamp(y, 0, 255)); - m_comps[1] = m_comps[0]; - m_comps[2] = m_comps[0]; - m_comps[3] = 255; - return *this; - } - - inline color_rgba &set(int y, int na) - { - m_comps[0] = static_cast(clamp(y, 0, 255)); - m_comps[1] = m_comps[0]; - m_comps[2] = m_comps[0]; - m_comps[3] = static_cast(clamp(na, 0, 255)); - return *this; - } - - inline color_rgba &set(int sr, int sg, int sb, int sa) - { - m_comps[0] = static_cast(clamp(sr, 0, 255)); - m_comps[1] = static_cast(clamp(sg, 0, 255)); - m_comps[2] = static_cast(clamp(sb, 0, 255)); - m_comps[3] = static_cast(clamp(sa, 0, 255)); - return *this; - } - - inline color_rgba &set_rgb(int sr, int sg, int sb) - { - m_comps[0] = static_cast(clamp(sr, 0, 255)); - m_comps[1] = static_cast(clamp(sg, 0, 255)); - m_comps[2] = static_cast(clamp(sb, 0, 255)); - return *this; - } - - inline color_rgba &set_rgb(const color_rgba &other) - { - r = other.r; - g = other.g; - b = other.b; - return *this; - } - - inline const uint8_t &operator[] (uint32_t index) const { assert(index < 4); return m_comps[index]; } - inline uint8_t &operator[] (uint32_t index) { assert(index < 4); return m_comps[index]; } - - inline void clear() - { - m_comps[0] = 0; - m_comps[1] = 0; - m_comps[2] = 0; - m_comps[3] = 0; - } - - inline bool operator== (const color_rgba &rhs) const - { - if (m_comps[0] != rhs.m_comps[0]) return false; - if (m_comps[1] != rhs.m_comps[1]) return false; - if (m_comps[2] != rhs.m_comps[2]) return false; - if (m_comps[3] != rhs.m_comps[3]) return false; - return true; - } - - inline bool operator!= (const color_rgba &rhs) const - { - return !(*this == rhs); - } - - inline bool operator<(const color_rgba &rhs) const - { - for (int i = 0; i < 4; i++) - { - if (m_comps[i] < rhs.m_comps[i]) - return true; - else if (m_comps[i] != rhs.m_comps[i]) - return false; - } - return false; - } - - inline int get_601_luma() const { return (19595U * m_comps[0] + 38470U * m_comps[1] + 7471U * m_comps[2] + 32768U) >> 16U; } - inline int get_709_luma() const { return (13938U * m_comps[0] + 46869U * m_comps[1] + 4729U * m_comps[2] + 32768U) >> 16U; } - inline int get_luma(bool luma_601) const { return luma_601 ? get_601_luma() : get_709_luma(); } - - static color_rgba comp_min(const color_rgba& a, const color_rgba& b) { return color_rgba(std::min(a[0], b[0]), std::min(a[1], b[1]), std::min(a[2], b[2]), std::min(a[3], b[3])); } - static color_rgba comp_max(const color_rgba& a, const color_rgba& b) { return color_rgba(std::max(a[0], b[0]), std::max(a[1], b[1]), std::max(a[2], b[2]), std::max(a[3], b[3])); } -}; - -bool unpack_bc7(const void *pBlock, color_rgba *pPixels); - -} // namespace bc7decomp diff --git a/external/bc7enc/bc7enc.c b/external/bc7enc/bc7enc.c deleted file mode 100644 index f8a561da..00000000 --- a/external/bc7enc/bc7enc.c +++ /dev/null @@ -1,2215 +0,0 @@ -// File: bc7enc.c - Richard Geldreich, Jr. 3/31/2020 - MIT license or public domain (see end of file) -// Currently supports modes 1, 6 for RGB blocks, and modes 5, 6, 7 for RGBA blocks. -// NOTE: This module is still a work in progress as of 3/31/2020. It needs to support more modes for RGB content. -#include "bc7enc.h" -#include -#include -#include -#include -#include - -// Helpers -static inline int32_t clampi(int32_t value, int32_t low, int32_t high) { if (value < low) value = low; else if (value > high) value = high; return value; } -static inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } -static inline float saturate(float value) { return clampf(value, 0, 1.0f); } -static inline uint8_t minimumub(uint8_t a, uint8_t b) { return (a < b) ? a : b; } -static inline uint32_t minimumu(uint32_t a, uint32_t b) { return (a < b) ? a : b; } -static inline float minimumf(float a, float b) { return (a < b) ? a : b; } -static inline uint8_t maximumub(uint8_t a, uint8_t b) { return (a > b) ? a : b; } -static inline uint32_t maximumu(uint32_t a, uint32_t b) { return (a > b) ? a : b; } -static inline float maximumf(float a, float b) { return (a > b) ? a : b; } -static inline int squarei(int i) { return i * i; } -static inline float squaref(float i) { return i * i; } - -static inline int32_t iabs32(int32_t v) { uint32_t msk = v >> 31; return (v ^ msk) - msk; } -static inline void swapub(uint8_t* a, uint8_t* b) { uint8_t t = *a; *a = *b; *b = t; } -static inline void swapu(uint32_t* a, uint32_t* b) { uint32_t t = *a; *a = *b; *b = t; } -static inline void swapf(float* a, float* b) { float t = *a; *a = *b; *b = t; } - -typedef struct { uint8_t m_c[4]; } color_quad_u8; -typedef struct { float m_c[4]; } vec4F; - -static inline color_quad_u8 *color_quad_u8_set_clamped(color_quad_u8 *pRes, int32_t r, int32_t g, int32_t b, int32_t a) { pRes->m_c[0] = (uint8_t)clampi(r, 0, 255); pRes->m_c[1] = (uint8_t)clampi(g, 0, 255); pRes->m_c[2] = (uint8_t)clampi(b, 0, 255); pRes->m_c[3] = (uint8_t)clampi(a, 0, 255); return pRes; } -static inline color_quad_u8 *color_quad_u8_set(color_quad_u8 *pRes, int32_t r, int32_t g, int32_t b, int32_t a) { assert((uint32_t)(r | g | b | a) <= 255); pRes->m_c[0] = (uint8_t)r; pRes->m_c[1] = (uint8_t)g; pRes->m_c[2] = (uint8_t)b; pRes->m_c[3] = (uint8_t)a; return pRes; } -static inline bc7enc_bool color_quad_u8_notequals(const color_quad_u8 *pLHS, const color_quad_u8 *pRHS) { return (pLHS->m_c[0] != pRHS->m_c[0]) || (pLHS->m_c[1] != pRHS->m_c[1]) || (pLHS->m_c[2] != pRHS->m_c[2]) || (pLHS->m_c[3] != pRHS->m_c[3]); } -static inline vec4F *vec4F_set_scalar(vec4F *pV, float x) { pV->m_c[0] = x; pV->m_c[1] = x; pV->m_c[2] = x; pV->m_c[3] = x; return pV; } -static inline vec4F *vec4F_set(vec4F *pV, float x, float y, float z, float w) { pV->m_c[0] = x; pV->m_c[1] = y; pV->m_c[2] = z; pV->m_c[3] = w; return pV; } -static inline vec4F *vec4F_saturate_in_place(vec4F *pV) { pV->m_c[0] = saturate(pV->m_c[0]); pV->m_c[1] = saturate(pV->m_c[1]); pV->m_c[2] = saturate(pV->m_c[2]); pV->m_c[3] = saturate(pV->m_c[3]); return pV; } -static inline vec4F vec4F_saturate(const vec4F *pV) { vec4F res; res.m_c[0] = saturate(pV->m_c[0]); res.m_c[1] = saturate(pV->m_c[1]); res.m_c[2] = saturate(pV->m_c[2]); res.m_c[3] = saturate(pV->m_c[3]); return res; } -static inline vec4F vec4F_from_color(const color_quad_u8 *pC) { vec4F res; vec4F_set(&res, pC->m_c[0], pC->m_c[1], pC->m_c[2], pC->m_c[3]); return res; } -static inline vec4F vec4F_add(const vec4F *pLHS, const vec4F *pRHS) { vec4F res; vec4F_set(&res, pLHS->m_c[0] + pRHS->m_c[0], pLHS->m_c[1] + pRHS->m_c[1], pLHS->m_c[2] + pRHS->m_c[2], pLHS->m_c[3] + pRHS->m_c[3]); return res; } -static inline vec4F vec4F_sub(const vec4F *pLHS, const vec4F *pRHS) { vec4F res; vec4F_set(&res, pLHS->m_c[0] - pRHS->m_c[0], pLHS->m_c[1] - pRHS->m_c[1], pLHS->m_c[2] - pRHS->m_c[2], pLHS->m_c[3] - pRHS->m_c[3]); return res; } -static inline float vec4F_dot(const vec4F *pLHS, const vec4F *pRHS) { return pLHS->m_c[0] * pRHS->m_c[0] + pLHS->m_c[1] * pRHS->m_c[1] + pLHS->m_c[2] * pRHS->m_c[2] + pLHS->m_c[3] * pRHS->m_c[3]; } -static inline vec4F vec4F_mul(const vec4F *pLHS, float s) { vec4F res; vec4F_set(&res, pLHS->m_c[0] * s, pLHS->m_c[1] * s, pLHS->m_c[2] * s, pLHS->m_c[3] * s); return res; } -static inline vec4F *vec4F_normalize_in_place(vec4F *pV) { float s = pV->m_c[0] * pV->m_c[0] + pV->m_c[1] * pV->m_c[1] + pV->m_c[2] * pV->m_c[2] + pV->m_c[3] * pV->m_c[3]; if (s != 0.0f) { s = 1.0f / sqrtf(s); pV->m_c[0] *= s; pV->m_c[1] *= s; pV->m_c[2] *= s; pV->m_c[3] *= s; } return pV; } - -// Various BC7 tables -static const uint32_t g_bc7_weights2[4] = { 0, 21, 43, 64 }; -static const uint32_t g_bc7_weights3[8] = { 0, 9, 18, 27, 37, 46, 55, 64 }; -static const uint32_t g_bc7_weights4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; -// Precomputed weight constants used during least fit determination. For each entry in g_bc7_weights[]: w * w, (1.0f - w) * w, (1.0f - w) * (1.0f - w), w -static const float g_bc7_weights2x[4 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.107666f, 0.220459f, 0.451416f, 0.328125f, 0.451416f, 0.220459f, 0.107666f, 0.671875f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; -static const float g_bc7_weights3x[8 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.019775f, 0.120850f, 0.738525f, 0.140625f, 0.079102f, 0.202148f, 0.516602f, 0.281250f, 0.177979f, 0.243896f, 0.334229f, 0.421875f, 0.334229f, 0.243896f, 0.177979f, 0.578125f, 0.516602f, 0.202148f, - 0.079102f, 0.718750f, 0.738525f, 0.120850f, 0.019775f, 0.859375f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; -static const float g_bc7_weights4x[16 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.003906f, 0.058594f, 0.878906f, 0.062500f, 0.019775f, 0.120850f, 0.738525f, 0.140625f, 0.041260f, 0.161865f, 0.635010f, 0.203125f, 0.070557f, 0.195068f, 0.539307f, 0.265625f, 0.107666f, 0.220459f, - 0.451416f, 0.328125f, 0.165039f, 0.241211f, 0.352539f, 0.406250f, 0.219727f, 0.249023f, 0.282227f, 0.468750f, 0.282227f, 0.249023f, 0.219727f, 0.531250f, 0.352539f, 0.241211f, 0.165039f, 0.593750f, 0.451416f, 0.220459f, 0.107666f, 0.671875f, 0.539307f, 0.195068f, 0.070557f, 0.734375f, - 0.635010f, 0.161865f, 0.041260f, 0.796875f, 0.738525f, 0.120850f, 0.019775f, 0.859375f, 0.878906f, 0.058594f, 0.003906f, 0.937500f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; - -static const uint8_t g_bc7_partition1[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -static const uint8_t g_bc7_partition2[64 * 16] = -{ - 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1, 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1, 0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1, 0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1, 0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1, 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, - 0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1, 0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0, 0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1, - 0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0, 0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0, 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0, 0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0, - 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, 0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0, 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0, 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0, 0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0, 0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1, 0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1, - 0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0, 0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0, 0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0, 0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0, 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0, 0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1, 0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0, - 0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0, 0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0, 0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0, 0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0, - 0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1, 0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1, 0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1, 0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1, 0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0, 0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0, 0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1 -}; - -static const uint8_t g_bc7_partition3[64 * 16] = -{ - 0,0,1,1,0,0,1,1,0,2,2,1,2,2,2,2, 0,0,0,1,0,0,1,1,2,2,1,1,2,2,2,1, 0,0,0,0,2,0,0,1,2,2,1,1,2,2,1,1, 0,2,2,2,0,0,2,2,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2, 0,0,1,1,0,0,1,1,0,0,2,2,0,0,2,2, 0,0,2,2,0,0,2,2,1,1,1,1,1,1,1,1, 0,0,1,1,0,0,1,1,2,2,1,1,2,2,1,1, - 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2, 0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2, 0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2, 0,1,2,2,0,1,2,2,0,1,2,2,0,1,2,2, 0,0,1,1,0,1,1,2,1,1,2,2,1,2,2,2, 0,0,1,1,2,0,0,1,2,2,0,0,2,2,2,0, - 0,0,0,1,0,0,1,1,0,1,1,2,1,1,2,2, 0,1,1,1,0,0,1,1,2,0,0,1,2,2,0,0, 0,0,0,0,1,1,2,2,1,1,2,2,1,1,2,2, 0,0,2,2,0,0,2,2,0,0,2,2,1,1,1,1, 0,1,1,1,0,1,1,1,0,2,2,2,0,2,2,2, 0,0,0,1,0,0,0,1,2,2,2,1,2,2,2,1, 0,0,0,0,0,0,1,1,0,1,2,2,0,1,2,2, 0,0,0,0,1,1,0,0,2,2,1,0,2,2,1,0, - 0,1,2,2,0,1,2,2,0,0,1,1,0,0,0,0, 0,0,1,2,0,0,1,2,1,1,2,2,2,2,2,2, 0,1,1,0,1,2,2,1,1,2,2,1,0,1,1,0, 0,0,0,0,0,1,1,0,1,2,2,1,1,2,2,1, 0,0,2,2,1,1,0,2,1,1,0,2,0,0,2,2, 0,1,1,0,0,1,1,0,2,0,0,2,2,2,2,2, 0,0,1,1,0,1,2,2,0,1,2,2,0,0,1,1, 0,0,0,0,2,0,0,0,2,2,1,1,2,2,2,1, - 0,0,0,0,0,0,0,2,1,1,2,2,1,2,2,2, 0,2,2,2,0,0,2,2,0,0,1,2,0,0,1,1, 0,0,1,1,0,0,1,2,0,0,2,2,0,2,2,2, 0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0, 0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0, 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0, 0,1,2,0,2,0,1,2,1,2,0,1,0,1,2,0, 0,0,1,1,2,2,0,0,1,1,2,2,0,0,1,1, - 0,0,1,1,1,1,2,2,2,2,0,0,0,0,1,1, 0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,2,1,2,1,2,1, 0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2, 0,0,2,2,0,0,1,1,0,0,2,2,0,0,1,1, 0,2,2,0,1,2,2,1,0,2,2,0,1,2,2,1, 0,1,0,1,2,2,2,2,2,2,2,2,0,1,0,1, 0,0,0,0,2,1,2,1,2,1,2,1,2,1,2,1, - 0,1,0,1,0,1,0,1,0,1,0,1,2,2,2,2, 0,2,2,2,0,1,1,1,0,2,2,2,0,1,1,1, 0,0,0,2,1,1,1,2,0,0,0,2,1,1,1,2, 0,0,0,0,2,1,1,2,2,1,1,2,2,1,1,2, 0,2,2,2,0,1,1,1,0,1,1,1,0,2,2,2, 0,0,0,2,1,1,1,2,1,1,1,2,0,0,0,2, 0,1,1,0,0,1,1,0,0,1,1,0,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,1,2,2,1,1,2, - 0,1,1,0,0,1,1,0,2,2,2,2,2,2,2,2, 0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2, 0,0,2,2,1,1,2,2,1,1,2,2,0,0,2,2, 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2, 0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,1, 0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2, 0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2, 0,1,1,1,2,0,1,1,2,2,0,1,2,2,2,0, -}; - -static const uint8_t g_bc7_table_anchor_index_third_subset_1[64] = -{ - 3, 3,15,15, 8, 3,15,15, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, 8,15, 3, 3, 6,10, 5, 8, 8, 6, 8, 5,15,15, 8,15, 3, 5, 6,10, 8,15, 15, 3,15, 5,15,15,15,15, 3,15, 5, 5, 5, 8, 5,10, 5,10, 8,13,15,12, 3, 3 -}; - -static const uint8_t g_bc7_table_anchor_index_third_subset_2[64] = -{ - 15, 8, 8, 3,15,15, 3, 8, 15,15,15,15,15,15,15, 8, 15, 8,15, 3,15, 8,15, 8, 3,15, 6,10,15,15,10, 8, 15, 3,15,10,10, 8, 9,10, 6,15, 8,15, 3, 6, 6, 8, 15, 3,15,15,15,15,15,15, 15,15,15,15, 3,15,15, 8 -}; - -static const uint8_t g_bc7_table_anchor_index_second_subset[64] = { 15,15,15,15,15,15,15,15, 15,15,15,15,15,15,15,15, 15, 2, 8, 2, 2, 8, 8,15, 2, 8, 2, 2, 8, 8, 2, 2, 15,15, 6, 8, 2, 8,15,15, 2, 8, 2, 2, 2,15,15, 6, 6, 2, 6, 8,15,15, 2, 2, 15,15,15,15,15, 2, 2,15 }; -static const uint8_t g_bc7_num_subsets[8] = { 3, 2, 3, 2, 1, 1, 1, 2 }; -static const uint8_t g_bc7_partition_bits[8] = { 4, 6, 6, 6, 0, 0, 0, 6 }; -static const uint8_t g_bc7_color_index_bitcount[8] = { 3, 3, 2, 2, 2, 2, 4, 2 }; -static int get_bc7_color_index_size(int mode, int index_selection_bit) { return g_bc7_color_index_bitcount[mode] + index_selection_bit; } -static uint8_t g_bc7_alpha_index_bitcount[8] = { 0, 0, 0, 0, 3, 2, 4, 2 }; -static int get_bc7_alpha_index_size(int mode, int index_selection_bit) { return g_bc7_alpha_index_bitcount[mode] - index_selection_bit; } -static const uint8_t g_bc7_mode_has_p_bits[8] = { 1, 1, 0, 1, 0, 0, 1, 1 }; -static const uint8_t g_bc7_mode_has_shared_p_bits[8] = { 0, 1, 0, 0, 0, 0, 0, 0 }; -static const uint8_t g_bc7_color_precision_table[8] = { 4, 6, 5, 7, 5, 7, 7, 5 }; -static const int8_t g_bc7_alpha_precision_table[8] = { 0, 0, 0, 0, 6, 8, 7, 5 }; -static bc7enc_bool get_bc7_mode_has_seperate_alpha_selectors(int mode) { return (mode == 4) || (mode == 5); } - -typedef struct { uint16_t m_error; uint8_t m_lo; uint8_t m_hi; } endpoint_err; - -static endpoint_err g_bc7_mode_1_optimal_endpoints[256][2]; // [c][pbit] -static const uint32_t BC7ENC_MODE_1_OPTIMAL_INDEX = 2; - -static endpoint_err g_bc7_mode_7_optimal_endpoints[256][2][2]; // [c][pbit][hp][lp] -const uint32_t BC7E_MODE_7_OPTIMAL_INDEX = 1; - -// Initialize the lookup table used for optimal single color compression in mode 1. Must be called before encoding. -void bc7enc_compress_block_init() -{ - for (int c = 0; c < 256; c++) - { - for (uint32_t lp = 0; lp < 2; lp++) - { - endpoint_err best; - best.m_error = (uint16_t)UINT16_MAX; - for (uint32_t l = 0; l < 64; l++) - { - uint32_t low = ((l << 1) | lp) << 1; - low |= (low >> 7); - for (uint32_t h = 0; h < 64; h++) - { - uint32_t high = ((h << 1) | lp) << 1; - high |= (high >> 7); - const int k = (low * (64 - g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX] + 32) >> 6; - const int err = (k - c) * (k - c); - if (err < best.m_error) - { - best.m_error = (uint16_t)err; - best.m_lo = (uint8_t)l; - best.m_hi = (uint8_t)h; - } - } // h - } // l - g_bc7_mode_1_optimal_endpoints[c][lp] = best; - } // lp - } // c - - // Mode 7: 555.1 2-bit indices - for (int c = 0; c < 256; c++) - { - for (uint32_t hp = 0; hp < 2; hp++) - { - for (uint32_t lp = 0; lp < 2; lp++) - { - endpoint_err best; - best.m_error = (uint16_t)UINT16_MAX; - best.m_lo = 0; - best.m_hi = 0; - - for (uint32_t l = 0; l < 32; l++) - { - uint32_t low = ((l << 1) | lp) << 2; - low |= (low >> 6); - - for (uint32_t h = 0; h < 32; h++) - { - uint32_t high = ((h << 1) | hp) << 2; - high |= (high >> 6); - - const int k = (low * (64 - g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX]) + high * g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX] + 32) >> 6; - - const int err = (k - c) * (k - c); - if (err < best.m_error) - { - best.m_error = (uint16_t)err; - best.m_lo = (uint8_t)l; - best.m_hi = (uint8_t)h; - } - } // h - } // l - - g_bc7_mode_7_optimal_endpoints[c][hp][lp] = best; - - } // hp - - } // lp - - } // c -} - -static void compute_least_squares_endpoints_rgba(uint32_t N, const uint8_t *pSelectors, const vec4F *pSelector_weights, vec4F *pXl, vec4F *pXh, const color_quad_u8 *pColors) -{ - // Least squares using normal equations: http://www.cs.cornell.edu/~bindel/class/cs3220-s12/notes/lec10.pdf - // I did this in matrix form first, expanded out all the ops, then optimized it a bit. - float z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; - float q00_r = 0.0f, q10_r = 0.0f, t_r = 0.0f; - float q00_g = 0.0f, q10_g = 0.0f, t_g = 0.0f; - float q00_b = 0.0f, q10_b = 0.0f, t_b = 0.0f; - float q00_a = 0.0f, q10_a = 0.0f, t_a = 0.0f; - for (uint32_t i = 0; i < N; i++) - { - const uint32_t sel = pSelectors[i]; - z00 += pSelector_weights[sel].m_c[0]; - z10 += pSelector_weights[sel].m_c[1]; - z11 += pSelector_weights[sel].m_c[2]; - float w = pSelector_weights[sel].m_c[3]; - q00_r += w * pColors[i].m_c[0]; t_r += pColors[i].m_c[0]; - q00_g += w * pColors[i].m_c[1]; t_g += pColors[i].m_c[1]; - q00_b += w * pColors[i].m_c[2]; t_b += pColors[i].m_c[2]; - q00_a += w * pColors[i].m_c[3]; t_a += pColors[i].m_c[3]; - } - - q10_r = t_r - q00_r; - q10_g = t_g - q00_g; - q10_b = t_b - q00_b; - q10_a = t_a - q00_a; - - z01 = z10; - - float det = z00 * z11 - z01 * z10; - if (det != 0.0f) - det = 1.0f / det; - - float iz00, iz01, iz10, iz11; - iz00 = z11 * det; - iz01 = -z01 * det; - iz10 = -z10 * det; - iz11 = z00 * det; - - pXl->m_c[0] = (float)(iz00 * q00_r + iz01 * q10_r); pXh->m_c[0] = (float)(iz10 * q00_r + iz11 * q10_r); - pXl->m_c[1] = (float)(iz00 * q00_g + iz01 * q10_g); pXh->m_c[1] = (float)(iz10 * q00_g + iz11 * q10_g); - pXl->m_c[2] = (float)(iz00 * q00_b + iz01 * q10_b); pXh->m_c[2] = (float)(iz10 * q00_b + iz11 * q10_b); - pXl->m_c[3] = (float)(iz00 * q00_a + iz01 * q10_a); pXh->m_c[3] = (float)(iz10 * q00_a + iz11 * q10_a); - - for (uint32_t c = 0; c < 4; c++) - { - if ((pXl->m_c[c] < 0.0f) || (pXh->m_c[c] > 255.0f)) - { - uint32_t lo_v = UINT32_MAX, hi_v = 0; - for (uint32_t i = 0; i < N; i++) - { - lo_v = minimumu(lo_v, pColors[i].m_c[c]); - hi_v = maximumu(hi_v, pColors[i].m_c[c]); - } - - if (lo_v == hi_v) - { - pXl->m_c[c] = (float)lo_v; - pXh->m_c[c] = (float)hi_v; - } - } - } -} - -static void compute_least_squares_endpoints_rgb(uint32_t N, const uint8_t *pSelectors, const vec4F *pSelector_weights, vec4F *pXl, vec4F *pXh, const color_quad_u8 *pColors) -{ - float z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; - float q00_r = 0.0f, q10_r = 0.0f, t_r = 0.0f; - float q00_g = 0.0f, q10_g = 0.0f, t_g = 0.0f; - float q00_b = 0.0f, q10_b = 0.0f, t_b = 0.0f; - for (uint32_t i = 0; i < N; i++) - { - const uint32_t sel = pSelectors[i]; - z00 += pSelector_weights[sel].m_c[0]; - z10 += pSelector_weights[sel].m_c[1]; - z11 += pSelector_weights[sel].m_c[2]; - float w = pSelector_weights[sel].m_c[3]; - q00_r += w * pColors[i].m_c[0]; t_r += pColors[i].m_c[0]; - q00_g += w * pColors[i].m_c[1]; t_g += pColors[i].m_c[1]; - q00_b += w * pColors[i].m_c[2]; t_b += pColors[i].m_c[2]; - } - - q10_r = t_r - q00_r; - q10_g = t_g - q00_g; - q10_b = t_b - q00_b; - - z01 = z10; - - float det = z00 * z11 - z01 * z10; - if (det != 0.0f) - det = 1.0f / det; - - float iz00, iz01, iz10, iz11; - iz00 = z11 * det; - iz01 = -z01 * det; - iz10 = -z10 * det; - iz11 = z00 * det; - - pXl->m_c[0] = (float)(iz00 * q00_r + iz01 * q10_r); pXh->m_c[0] = (float)(iz10 * q00_r + iz11 * q10_r); - pXl->m_c[1] = (float)(iz00 * q00_g + iz01 * q10_g); pXh->m_c[1] = (float)(iz10 * q00_g + iz11 * q10_g); - pXl->m_c[2] = (float)(iz00 * q00_b + iz01 * q10_b); pXh->m_c[2] = (float)(iz10 * q00_b + iz11 * q10_b); - pXl->m_c[3] = 255.0f; pXh->m_c[3] = 255.0f; - - for (uint32_t c = 0; c < 3; c++) - { - if ((pXl->m_c[c] < 0.0f) || (pXh->m_c[c] > 255.0f)) - { - uint32_t lo_v = UINT32_MAX, hi_v = 0; - for (uint32_t i = 0; i < N; i++) - { - lo_v = minimumu(lo_v, pColors[i].m_c[c]); - hi_v = maximumu(hi_v, pColors[i].m_c[c]); - } - - if (lo_v == hi_v) - { - pXl->m_c[c] = (float)lo_v; - pXh->m_c[c] = (float)hi_v; - } - } - } -} - -static void compute_least_squares_endpoints_a(uint32_t N, const uint8_t* pSelectors, const vec4F* pSelector_weights, float* pXl, float* pXh, const color_quad_u8* pColors) -{ - // Least squares using normal equations: http://www.cs.cornell.edu/~bindel/class/cs3220-s12/notes/lec10.pdf - // I did this in matrix form first, expanded out all the ops, then optimized it a bit. - float z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; - float q00_a = 0.0f, q10_a = 0.0f, t_a = 0.0f; - for (uint32_t i = 0; i < N; i++) - { - const uint32_t sel = pSelectors[i]; - - z00 += pSelector_weights[sel].m_c[0]; - z10 += pSelector_weights[sel].m_c[1]; - z11 += pSelector_weights[sel].m_c[2]; - - float w = pSelector_weights[sel].m_c[3]; - - q00_a += w * pColors[i].m_c[3]; t_a += pColors[i].m_c[3]; - } - - q10_a = t_a - q00_a; - - z01 = z10; - - float det = z00 * z11 - z01 * z10; - if (det != 0.0f) - det = 1.0f / det; - - float iz00, iz01, iz10, iz11; - iz00 = z11 * det; - iz01 = -z01 * det; - iz10 = -z10 * det; - iz11 = z00 * det; - - *pXl = (float)(iz00 * q00_a + iz01 * q10_a); *pXh = (float)(iz10 * q00_a + iz11 * q10_a); - - if ((*pXl < 0.0f) || (*pXh > 255.0f)) - { - uint32_t lo_v = UINT32_MAX, hi_v = 0; - for (uint32_t i = 0; i < N; i++) - { - lo_v = minimumu(lo_v, pColors[i].m_c[3]); - hi_v = maximumu(hi_v, pColors[i].m_c[3]); - } - - if (lo_v == hi_v) - { - *pXl = (float)lo_v; - *pXh = (float)hi_v; - } - } -} - -typedef struct -{ - uint32_t m_num_pixels; - const color_quad_u8 *m_pPixels; - uint32_t m_num_selector_weights; - const uint32_t *m_pSelector_weights; - const vec4F *m_pSelector_weightsx; - uint32_t m_comp_bits; - uint32_t m_weights[4]; - bc7enc_bool m_has_alpha; - bc7enc_bool m_has_pbits; - bc7enc_bool m_endpoints_share_pbit; - bc7enc_bool m_perceptual; -} color_cell_compressor_params; - -typedef struct -{ - uint64_t m_best_overall_err; - color_quad_u8 m_low_endpoint; - color_quad_u8 m_high_endpoint; - uint32_t m_pbits[2]; - uint8_t *m_pSelectors; - uint8_t *m_pSelectors_temp; -} color_cell_compressor_results; - -static inline color_quad_u8 scale_color(const color_quad_u8 *pC, const color_cell_compressor_params *pParams) -{ - color_quad_u8 results; - - const uint32_t n = pParams->m_comp_bits + (pParams->m_has_pbits ? 1 : 0); - assert((n >= 4) && (n <= 8)); - - for (uint32_t i = 0; i < 4; i++) - { - uint32_t v = pC->m_c[i] << (8 - n); - v |= (v >> n); - assert(v <= 255); - results.m_c[i] = (uint8_t)(v); - } - - return results; -} - -static inline uint64_t compute_color_distance_rgb(const color_quad_u8 *pE1, const color_quad_u8 *pE2, bc7enc_bool perceptual, const uint32_t weights[4]) -{ - int dr, dg, db; - - if (perceptual) - { - const int l1 = pE1->m_c[0] * 109 + pE1->m_c[1] * 366 + pE1->m_c[2] * 37; - const int cr1 = ((int)pE1->m_c[0] << 9) - l1; - const int cb1 = ((int)pE1->m_c[2] << 9) - l1; - const int l2 = pE2->m_c[0] * 109 + pE2->m_c[1] * 366 + pE2->m_c[2] * 37; - const int cr2 = ((int)pE2->m_c[0] << 9) - l2; - const int cb2 = ((int)pE2->m_c[2] << 9) - l2; - dr = (l1 - l2) >> 8; - dg = (cr1 - cr2) >> 8; - db = (cb1 - cb2) >> 8; - } - else - { - dr = (int)pE1->m_c[0] - (int)pE2->m_c[0]; - dg = (int)pE1->m_c[1] - (int)pE2->m_c[1]; - db = (int)pE1->m_c[2] - (int)pE2->m_c[2]; - } - - return weights[0] * (uint32_t)(dr * dr) + weights[1] * (uint32_t)(dg * dg) + weights[2] * (uint32_t)(db * db); -} - -static inline uint64_t compute_color_distance_rgba(const color_quad_u8 *pE1, const color_quad_u8 *pE2, bc7enc_bool perceptual, const uint32_t weights[4]) -{ - int da = (int)pE1->m_c[3] - (int)pE2->m_c[3]; - return compute_color_distance_rgb(pE1, pE2, perceptual, weights) + (weights[3] * (uint32_t)(da * da)); -} - -static uint64_t pack_mode1_to_one_color(const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, uint32_t r, uint32_t g, uint32_t b, uint8_t *pSelectors) -{ - uint32_t best_err = UINT_MAX; - uint32_t best_p = 0; - - for (uint32_t p = 0; p < 2; p++) - { - uint32_t err = g_bc7_mode_1_optimal_endpoints[r][p].m_error + g_bc7_mode_1_optimal_endpoints[g][p].m_error + g_bc7_mode_1_optimal_endpoints[b][p].m_error; - if (err < best_err) - { - best_err = err; - best_p = p; - if (!best_err) - break; - } - } - - const endpoint_err *pEr = &g_bc7_mode_1_optimal_endpoints[r][best_p]; - const endpoint_err *pEg = &g_bc7_mode_1_optimal_endpoints[g][best_p]; - const endpoint_err *pEb = &g_bc7_mode_1_optimal_endpoints[b][best_p]; - - color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, 0); - color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, 0); - pResults->m_pbits[0] = best_p; - pResults->m_pbits[1] = 0; - - memset(pSelectors, BC7ENC_MODE_1_OPTIMAL_INDEX, pParams->m_num_pixels); - - color_quad_u8 p; - for (uint32_t i = 0; i < 3; i++) - { - uint32_t low = ((pResults->m_low_endpoint.m_c[i] << 1) | pResults->m_pbits[0]) << 1; - low |= (low >> 7); - - uint32_t high = ((pResults->m_high_endpoint.m_c[i] << 1) | pResults->m_pbits[0]) << 1; - high |= (high >> 7); - - p.m_c[i] = (uint8_t)((low * (64 - g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX] + 32) >> 6); - } - p.m_c[3] = 255; - - uint64_t total_err = 0; - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - total_err += compute_color_distance_rgb(&p, &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); - - pResults->m_best_overall_err = total_err; - - return total_err; -} - -static uint64_t pack_mode7_to_one_color(const color_cell_compressor_params* pParams, color_cell_compressor_results* pResults, uint32_t r, uint32_t g, uint32_t b, uint32_t a, - uint8_t* pSelectors, uint32_t num_pixels, const color_quad_u8* pPixels) -{ - uint32_t best_err = UINT_MAX; - uint32_t best_p = 0; - - for (uint32_t p = 0; p < 4; p++) - { - uint32_t hi_p = p >> 1; - uint32_t lo_p = p & 1; - uint32_t err = g_bc7_mode_7_optimal_endpoints[r][hi_p][lo_p].m_error + g_bc7_mode_7_optimal_endpoints[g][hi_p][lo_p].m_error + g_bc7_mode_7_optimal_endpoints[b][hi_p][lo_p].m_error + g_bc7_mode_7_optimal_endpoints[a][hi_p][lo_p].m_error; - if (err < best_err) - { - best_err = err; - best_p = p; - if (!best_err) - break; - } - } - - uint32_t best_hi_p = best_p >> 1; - uint32_t best_lo_p = best_p & 1; - - const endpoint_err* pEr = &g_bc7_mode_7_optimal_endpoints[r][best_hi_p][best_lo_p]; - const endpoint_err* pEg = &g_bc7_mode_7_optimal_endpoints[g][best_hi_p][best_lo_p]; - const endpoint_err* pEb = &g_bc7_mode_7_optimal_endpoints[b][best_hi_p][best_lo_p]; - const endpoint_err* pEa = &g_bc7_mode_7_optimal_endpoints[a][best_hi_p][best_lo_p]; - - color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, pEa->m_lo); - color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, pEa->m_hi); - pResults->m_pbits[0] = best_lo_p; - pResults->m_pbits[1] = best_hi_p; - - for (uint32_t i = 0; i < num_pixels; i++) - pSelectors[i] = BC7E_MODE_7_OPTIMAL_INDEX; - - color_quad_u8 p; - - for (uint32_t i = 0; i < 4; i++) - { - uint32_t low = (pResults->m_low_endpoint.m_c[i] << 1) | pResults->m_pbits[0]; - uint32_t high = (pResults->m_high_endpoint.m_c[i] << 1) | pResults->m_pbits[1]; - - low = (low << 2) | (low >> 6); - high = (high << 2) | (high >> 6); - - p.m_c[i] = (low * (64 - g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX]) + high * g_bc7_weights2[BC7E_MODE_7_OPTIMAL_INDEX] + 32) >> 6; - } - - uint64_t total_err = 0; - for (uint32_t i = 0; i < num_pixels; i++) - total_err += compute_color_distance_rgba(&p, &pPixels[i], pParams->m_perceptual, pParams->m_weights); - - pResults->m_best_overall_err = total_err; - - return total_err; -} - -static uint64_t evaluate_solution(const color_quad_u8 *pLow, const color_quad_u8 *pHigh, const uint32_t pbits[2], const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults) -{ - color_quad_u8 quantMinColor = *pLow; - color_quad_u8 quantMaxColor = *pHigh; - - if (pParams->m_has_pbits) - { - uint32_t minPBit, maxPBit; - - if (pParams->m_endpoints_share_pbit) - maxPBit = minPBit = pbits[0]; - else - { - minPBit = pbits[0]; - maxPBit = pbits[1]; - } - - quantMinColor.m_c[0] = (uint8_t)((pLow->m_c[0] << 1) | minPBit); - quantMinColor.m_c[1] = (uint8_t)((pLow->m_c[1] << 1) | minPBit); - quantMinColor.m_c[2] = (uint8_t)((pLow->m_c[2] << 1) | minPBit); - quantMinColor.m_c[3] = (uint8_t)((pLow->m_c[3] << 1) | minPBit); - - quantMaxColor.m_c[0] = (uint8_t)((pHigh->m_c[0] << 1) | maxPBit); - quantMaxColor.m_c[1] = (uint8_t)((pHigh->m_c[1] << 1) | maxPBit); - quantMaxColor.m_c[2] = (uint8_t)((pHigh->m_c[2] << 1) | maxPBit); - quantMaxColor.m_c[3] = (uint8_t)((pHigh->m_c[3] << 1) | maxPBit); - } - - color_quad_u8 actualMinColor = scale_color(&quantMinColor, pParams); - color_quad_u8 actualMaxColor = scale_color(&quantMaxColor, pParams); - - const uint32_t N = pParams->m_num_selector_weights; - - color_quad_u8 weightedColors[16]; - weightedColors[0] = actualMinColor; - weightedColors[N - 1] = actualMaxColor; - - const uint32_t nc = pParams->m_has_alpha ? 4 : 3; - for (uint32_t i = 1; i < (N - 1); i++) - for (uint32_t j = 0; j < nc; j++) - weightedColors[i].m_c[j] = (uint8_t)((actualMinColor.m_c[j] * (64 - pParams->m_pSelector_weights[i]) + actualMaxColor.m_c[j] * pParams->m_pSelector_weights[i] + 32) >> 6); - - const int lr = actualMinColor.m_c[0]; - const int lg = actualMinColor.m_c[1]; - const int lb = actualMinColor.m_c[2]; - const int dr = actualMaxColor.m_c[0] - lr; - const int dg = actualMaxColor.m_c[1] - lg; - const int db = actualMaxColor.m_c[2] - lb; - - uint64_t total_err = 0; - - if (!pParams->m_perceptual) - { - if (pParams->m_has_alpha) - { - const int la = actualMinColor.m_c[3]; - const int da = actualMaxColor.m_c[3] - la; - - const float f = N / (float)(squarei(dr) + squarei(dg) + squarei(db) + squarei(da) + .00000125f); - - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - const color_quad_u8 *pC = &pParams->m_pPixels[i]; - int r = pC->m_c[0]; - int g = pC->m_c[1]; - int b = pC->m_c[2]; - int a = pC->m_c[3]; - - int best_sel = (int)((float)((r - lr) * dr + (g - lg) * dg + (b - lb) * db + (a - la) * da) * f + .5f); - best_sel = clampi(best_sel, 1, N - 1); - - uint64_t err0 = compute_color_distance_rgba(&weightedColors[best_sel - 1], pC, BC7ENC_FALSE, pParams->m_weights); - uint64_t err1 = compute_color_distance_rgba(&weightedColors[best_sel], pC, BC7ENC_FALSE, pParams->m_weights); - - if (err1 > err0) - { - err1 = err0; - --best_sel; - } - total_err += err1; - - pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; - } - } - else - { - const float f = N / (float)(squarei(dr) + squarei(dg) + squarei(db) + .00000125f); - - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - const color_quad_u8 *pC = &pParams->m_pPixels[i]; - int r = pC->m_c[0]; - int g = pC->m_c[1]; - int b = pC->m_c[2]; - - int sel = (int)((float)((r - lr) * dr + (g - lg) * dg + (b - lb) * db) * f + .5f); - sel = clampi(sel, 1, N - 1); - - uint64_t err0 = compute_color_distance_rgb(&weightedColors[sel - 1], pC, BC7ENC_FALSE, pParams->m_weights); - uint64_t err1 = compute_color_distance_rgb(&weightedColors[sel], pC, BC7ENC_FALSE, pParams->m_weights); - - int best_sel = sel; - uint64_t best_err = err1; - if (err0 < best_err) - { - best_err = err0; - best_sel = sel - 1; - } - - total_err += best_err; - - pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; - } - } - } - else - { - // TODO: This could be improved. - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - uint64_t best_err = UINT64_MAX; - uint32_t best_sel = 0; - - if (pParams->m_has_alpha) - { - for (uint32_t j = 0; j < N; j++) - { - uint64_t err = compute_color_distance_rgba(&weightedColors[j], &pParams->m_pPixels[i], BC7ENC_TRUE, pParams->m_weights); - if (err < best_err) - { - best_err = err; - best_sel = j; - } - } - } - else - { - for (uint32_t j = 0; j < N; j++) - { - uint64_t err = compute_color_distance_rgb(&weightedColors[j], &pParams->m_pPixels[i], BC7ENC_TRUE, pParams->m_weights); - if (err < best_err) - { - best_err = err; - best_sel = j; - } - } - } - - total_err += best_err; - - pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; - } - } - - if (total_err < pResults->m_best_overall_err) - { - pResults->m_best_overall_err = total_err; - - pResults->m_low_endpoint = *pLow; - pResults->m_high_endpoint = *pHigh; - - pResults->m_pbits[0] = pbits[0]; - pResults->m_pbits[1] = pbits[1]; - - memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); - } - - return total_err; -} - -static void fixDegenerateEndpoints(uint32_t mode, color_quad_u8 *pTrialMinColor, color_quad_u8 *pTrialMaxColor, const vec4F *pXl, const vec4F *pXh, uint32_t iscale) -{ - //if ((mode == 1) || (mode == 7)) - if (mode == 1) - { - // fix degenerate case where the input collapses to a single colorspace voxel, and we loose all freedom (test with grayscale ramps) - for (uint32_t i = 0; i < 3; i++) - { - if (pTrialMinColor->m_c[i] == pTrialMaxColor->m_c[i]) - { - if (fabs(pXl->m_c[i] - pXh->m_c[i]) > 0.0f) - { - if (pTrialMinColor->m_c[i] > (iscale >> 1)) - { - if (pTrialMinColor->m_c[i] > 0) - pTrialMinColor->m_c[i]--; - else - if (pTrialMaxColor->m_c[i] < iscale) - pTrialMaxColor->m_c[i]++; - } - else - { - if (pTrialMaxColor->m_c[i] < iscale) - pTrialMaxColor->m_c[i]++; - else if (pTrialMinColor->m_c[i] > 0) - pTrialMinColor->m_c[i]--; - } - } - } - } - } -} - -static uint64_t find_optimal_solution(uint32_t mode, vec4F xl, vec4F xh, const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults) -{ - vec4F_saturate_in_place(&xl); vec4F_saturate_in_place(&xh); - - if (pParams->m_has_pbits) - { - const int iscalep = (1 << (pParams->m_comp_bits + 1)) - 1; - const float scalep = (float)iscalep; - - const int32_t totalComps = pParams->m_has_alpha ? 4 : 3; - - uint32_t best_pbits[2]; - color_quad_u8 bestMinColor, bestMaxColor; - - if (!pParams->m_endpoints_share_pbit) - { - float best_err0 = 1e+9; - float best_err1 = 1e+9; - - for (int p = 0; p < 2; p++) - { - color_quad_u8 xMinColor, xMaxColor; - - // Notes: The pbit controls which quantization intervals are selected. - // total_levels=2^(comp_bits+1), where comp_bits=4 for mode 0, etc. - // pbit 0: v=(b*2)/(total_levels-1), pbit 1: v=(b*2+1)/(total_levels-1) where b is the component bin from [0,total_levels/2-1] and v is the [0,1] component value - // rearranging you get for pbit 0: b=floor(v*(total_levels-1)/2+.5) - // rearranging you get for pbit 1: b=floor((v*(total_levels-1)-1)/2+.5) - for (uint32_t c = 0; c < 4; c++) - { - xMinColor.m_c[c] = (uint8_t)(clampi(((int)((xl.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); - xMaxColor.m_c[c] = (uint8_t)(clampi(((int)((xh.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); - } - - color_quad_u8 scaledLow = scale_color(&xMinColor, pParams); - color_quad_u8 scaledHigh = scale_color(&xMaxColor, pParams); - - float err0 = 0, err1 = 0; - for (int i = 0; i < totalComps; i++) - { - err0 += squaref(scaledLow.m_c[i] - xl.m_c[i] * 255.0f); - err1 += squaref(scaledHigh.m_c[i] - xh.m_c[i] * 255.0f); - } - - if (err0 < best_err0) - { - best_err0 = err0; - best_pbits[0] = p; - - bestMinColor.m_c[0] = xMinColor.m_c[0] >> 1; - bestMinColor.m_c[1] = xMinColor.m_c[1] >> 1; - bestMinColor.m_c[2] = xMinColor.m_c[2] >> 1; - bestMinColor.m_c[3] = xMinColor.m_c[3] >> 1; - } - - if (err1 < best_err1) - { - best_err1 = err1; - best_pbits[1] = p; - - bestMaxColor.m_c[0] = xMaxColor.m_c[0] >> 1; - bestMaxColor.m_c[1] = xMaxColor.m_c[1] >> 1; - bestMaxColor.m_c[2] = xMaxColor.m_c[2] >> 1; - bestMaxColor.m_c[3] = xMaxColor.m_c[3] >> 1; - } - } - } - else - { - // Endpoints share pbits - float best_err = 1e+9; - - for (int p = 0; p < 2; p++) - { - color_quad_u8 xMinColor, xMaxColor; - for (uint32_t c = 0; c < 4; c++) - { - xMinColor.m_c[c] = (uint8_t)(clampi(((int)((xl.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); - xMaxColor.m_c[c] = (uint8_t)(clampi(((int)((xh.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); - } - - color_quad_u8 scaledLow = scale_color(&xMinColor, pParams); - color_quad_u8 scaledHigh = scale_color(&xMaxColor, pParams); - - float err = 0; - for (int i = 0; i < totalComps; i++) - err += squaref((scaledLow.m_c[i] / 255.0f) - xl.m_c[i]) + squaref((scaledHigh.m_c[i] / 255.0f) - xh.m_c[i]); - - if (err < best_err) - { - best_err = err; - best_pbits[0] = p; - best_pbits[1] = p; - for (uint32_t j = 0; j < 4; j++) - { - bestMinColor.m_c[j] = xMinColor.m_c[j] >> 1; - bestMaxColor.m_c[j] = xMaxColor.m_c[j] >> 1; - } - } - } - } - - fixDegenerateEndpoints(mode, &bestMinColor, &bestMaxColor, &xl, &xh, iscalep >> 1); - - if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&bestMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&bestMaxColor, &pResults->m_high_endpoint) || (best_pbits[0] != pResults->m_pbits[0]) || (best_pbits[1] != pResults->m_pbits[1])) - evaluate_solution(&bestMinColor, &bestMaxColor, best_pbits, pParams, pResults); - } - else - { - const int iscale = (1 << pParams->m_comp_bits) - 1; - const float scale = (float)iscale; - - color_quad_u8 trialMinColor, trialMaxColor; - color_quad_u8_set_clamped(&trialMinColor, (int)(xl.m_c[0] * scale + .5f), (int)(xl.m_c[1] * scale + .5f), (int)(xl.m_c[2] * scale + .5f), (int)(xl.m_c[3] * scale + .5f)); - color_quad_u8_set_clamped(&trialMaxColor, (int)(xh.m_c[0] * scale + .5f), (int)(xh.m_c[1] * scale + .5f), (int)(xh.m_c[2] * scale + .5f), (int)(xh.m_c[3] * scale + .5f)); - - fixDegenerateEndpoints(mode, &trialMinColor, &trialMaxColor, &xl, &xh, iscale); - - if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&trialMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&trialMaxColor, &pResults->m_high_endpoint)) - evaluate_solution(&trialMinColor, &trialMaxColor, pResults->m_pbits, pParams, pResults); - } - - return pResults->m_best_overall_err; -} - -static uint64_t color_cell_compression(uint32_t mode, const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, const bc7enc_compress_block_params *pComp_params) -{ - assert((mode == 6) || (mode == 7) || (!pParams->m_has_alpha)); - - pResults->m_best_overall_err = UINT64_MAX; - - // If the partition's colors are all the same in mode 1, then just pack them as a single color. - if (mode == 1) - { - const uint32_t cr = pParams->m_pPixels[0].m_c[0], cg = pParams->m_pPixels[0].m_c[1], cb = pParams->m_pPixels[0].m_c[2]; - - bc7enc_bool allSame = BC7ENC_TRUE; - for (uint32_t i = 1; i < pParams->m_num_pixels; i++) - { - if ((cr != pParams->m_pPixels[i].m_c[0]) || (cg != pParams->m_pPixels[i].m_c[1]) || (cb != pParams->m_pPixels[i].m_c[2])) - { - allSame = BC7ENC_FALSE; - break; - } - } - - if (allSame) - return pack_mode1_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors); - } - else if (mode == 7) - { - const uint32_t cr = pParams->m_pPixels[0].m_c[0], cg = pParams->m_pPixels[0].m_c[1], cb = pParams->m_pPixels[0].m_c[2], ca = pParams->m_pPixels[0].m_c[3]; - - bc7enc_bool allSame = BC7ENC_TRUE; - for (uint32_t i = 1; i < pParams->m_num_pixels; i++) - { - if ((cr != pParams->m_pPixels[i].m_c[0]) || (cg != pParams->m_pPixels[i].m_c[1]) || (cb != pParams->m_pPixels[i].m_c[2]) || (ca != pParams->m_pPixels[i].m_c[3])) - { - allSame = BC7ENC_FALSE; - break; - } - } - - if (allSame) - return pack_mode7_to_one_color(pParams, pResults, cr, cg, cb, ca, pResults->m_pSelectors, pParams->m_num_pixels, pParams->m_pPixels); - } - - // Compute partition's mean color and principle axis. - vec4F meanColor, axis; - vec4F_set_scalar(&meanColor, 0.0f); - - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - vec4F color = vec4F_from_color(&pParams->m_pPixels[i]); - meanColor = vec4F_add(&meanColor, &color); - } - - vec4F meanColorScaled = vec4F_mul(&meanColor, 1.0f / (float)(pParams->m_num_pixels)); - - meanColor = vec4F_mul(&meanColor, 1.0f / (float)(pParams->m_num_pixels * 255.0f)); - vec4F_saturate_in_place(&meanColor); - - if (pParams->m_has_alpha) - { - // Use incremental PCA for RGBA PCA, because it's simple. - vec4F_set_scalar(&axis, 0.0f); - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - vec4F color = vec4F_from_color(&pParams->m_pPixels[i]); - color = vec4F_sub(&color, &meanColorScaled); - vec4F a = vec4F_mul(&color, color.m_c[0]); - vec4F b = vec4F_mul(&color, color.m_c[1]); - vec4F c = vec4F_mul(&color, color.m_c[2]); - vec4F d = vec4F_mul(&color, color.m_c[3]); - vec4F n = i ? axis : color; - vec4F_normalize_in_place(&n); - axis.m_c[0] += vec4F_dot(&a, &n); - axis.m_c[1] += vec4F_dot(&b, &n); - axis.m_c[2] += vec4F_dot(&c, &n); - axis.m_c[3] += vec4F_dot(&d, &n); - } - vec4F_normalize_in_place(&axis); - } - else - { - // Use covar technique for RGB PCA, because it doesn't require per-pixel normalization. - float cov[6] = { 0, 0, 0, 0, 0, 0 }; - - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - const color_quad_u8 *pV = &pParams->m_pPixels[i]; - float r = pV->m_c[0] - meanColorScaled.m_c[0]; - float g = pV->m_c[1] - meanColorScaled.m_c[1]; - float b = pV->m_c[2] - meanColorScaled.m_c[2]; - cov[0] += r*r; cov[1] += r*g; cov[2] += r*b; cov[3] += g*g; cov[4] += g*b; cov[5] += b*b; - } - - float vfr = .9f, vfg = 1.0f, vfb = .7f; - for (uint32_t iter = 0; iter < 3; iter++) - { - float r = vfr*cov[0] + vfg*cov[1] + vfb*cov[2]; - float g = vfr*cov[1] + vfg*cov[3] + vfb*cov[4]; - float b = vfr*cov[2] + vfg*cov[4] + vfb*cov[5]; - - float m = maximumf(maximumf(fabsf(r), fabsf(g)), fabsf(b)); - if (m > 1e-10f) - { - m = 1.0f / m; - r *= m; g *= m; b *= m; - } - - vfr = r; vfg = g; vfb = b; - } - - float len = vfr*vfr + vfg*vfg + vfb*vfb; - if (len < 1e-10f) - vec4F_set_scalar(&axis, 0.0f); - else - { - len = 1.0f / sqrtf(len); - vfr *= len; vfg *= len; vfb *= len; - vec4F_set(&axis, vfr, vfg, vfb, 0); - } - } - - // TODO: Try picking the 2 colors with the largest projection onto the axis, instead of computing new colors along the axis. - - if (vec4F_dot(&axis, &axis) < .5f) - { - if (pParams->m_perceptual) - vec4F_set(&axis, .213f, .715f, .072f, pParams->m_has_alpha ? .715f : 0); - else - vec4F_set(&axis, 1.0f, 1.0f, 1.0f, pParams->m_has_alpha ? 1.0f : 0); - vec4F_normalize_in_place(&axis); - } - - float l = 1e+9f, h = -1e+9f; - - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - vec4F color = vec4F_from_color(&pParams->m_pPixels[i]); - - vec4F q = vec4F_sub(&color, &meanColorScaled); - float d = vec4F_dot(&q, &axis); - - l = minimumf(l, d); - h = maximumf(h, d); - } - - l *= (1.0f / 255.0f); - h *= (1.0f / 255.0f); - - vec4F b0 = vec4F_mul(&axis, l); - vec4F b1 = vec4F_mul(&axis, h); - vec4F c0 = vec4F_add(&meanColor, &b0); - vec4F c1 = vec4F_add(&meanColor, &b1); - vec4F minColor = vec4F_saturate(&c0); - vec4F maxColor = vec4F_saturate(&c1); - - vec4F whiteVec; - vec4F_set_scalar(&whiteVec, 1.0f); - - if (vec4F_dot(&minColor, &whiteVec) > vec4F_dot(&maxColor, &whiteVec)) - { -#if 0 - // Don't compile correctly with VC 2019 in release. - vec4F temp = minColor; - minColor = maxColor; - maxColor = temp; -#else - float a = minColor.m_c[0], b = minColor.m_c[1], c = minColor.m_c[2], d = minColor.m_c[3]; - minColor.m_c[0] = maxColor.m_c[0]; - minColor.m_c[1] = maxColor.m_c[1]; - minColor.m_c[2] = maxColor.m_c[2]; - minColor.m_c[3] = maxColor.m_c[3]; - maxColor.m_c[0] = a; - maxColor.m_c[1] = b; - maxColor.m_c[2] = c; - maxColor.m_c[3] = d; -#endif - } - - // First find a solution using the block's PCA. - if (!find_optimal_solution(mode, minColor, maxColor, pParams, pResults)) - return 0; - - if (pComp_params->m_try_least_squares) - { - // Now try to refine the solution using least squares by computing the optimal endpoints from the current selectors. - vec4F xl, xh; - vec4F_set_scalar(&xl, 0.0f); - vec4F_set_scalar(&xh, 0.0f); - if (pParams->m_has_alpha) - compute_least_squares_endpoints_rgba(pParams->m_num_pixels, pResults->m_pSelectors, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - else - compute_least_squares_endpoints_rgb(pParams->m_num_pixels, pResults->m_pSelectors, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - - xl = vec4F_mul(&xl, (1.0f / 255.0f)); - xh = vec4F_mul(&xh, (1.0f / 255.0f)); - - if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) - return 0; - } - - if (pComp_params->m_uber_level > 0) - { - // In uber level 1, try varying the selectors a little, somewhat like cluster fit would. First try incrementing the minimum selectors, - // then try decrementing the selectrors, then try both. - uint8_t selectors_temp[16], selectors_temp1[16]; - memcpy(selectors_temp, pResults->m_pSelectors, pParams->m_num_pixels); - - const int max_selector = pParams->m_num_selector_weights - 1; - - uint32_t min_sel = 16; - uint32_t max_sel = 0; - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - uint32_t sel = selectors_temp[i]; - min_sel = minimumu(min_sel, sel); - max_sel = maximumu(max_sel, sel); - } - - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - uint32_t sel = selectors_temp[i]; - if ((sel == min_sel) && (sel < (pParams->m_num_selector_weights - 1))) - sel++; - selectors_temp1[i] = (uint8_t)sel; - } - - vec4F xl, xh; - vec4F_set_scalar(&xl, 0.0f); - vec4F_set_scalar(&xh, 0.0f); - if (pParams->m_has_alpha) - compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - else - compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - - xl = vec4F_mul(&xl, (1.0f / 255.0f)); - xh = vec4F_mul(&xh, (1.0f / 255.0f)); - - if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) - return 0; - - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - uint32_t sel = selectors_temp[i]; - if ((sel == max_sel) && (sel > 0)) - sel--; - selectors_temp1[i] = (uint8_t)sel; - } - - if (pParams->m_has_alpha) - compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - else - compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - - xl = vec4F_mul(&xl, (1.0f / 255.0f)); - xh = vec4F_mul(&xh, (1.0f / 255.0f)); - - if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) - return 0; - - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - { - uint32_t sel = selectors_temp[i]; - if ((sel == min_sel) && (sel < (pParams->m_num_selector_weights - 1))) - sel++; - else if ((sel == max_sel) && (sel > 0)) - sel--; - selectors_temp1[i] = (uint8_t)sel; - } - - if (pParams->m_has_alpha) - compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - else - compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - - xl = vec4F_mul(&xl, (1.0f / 255.0f)); - xh = vec4F_mul(&xh, (1.0f / 255.0f)); - - if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) - return 0; - - // In uber levels 2+, try taking more advantage of endpoint extrapolation by scaling the selectors in one direction or another. - const uint32_t uber_err_thresh = (pParams->m_num_pixels * 56) >> 4; - if ((pComp_params->m_uber_level >= 2) && (pResults->m_best_overall_err > uber_err_thresh)) - { - const int Q = (pComp_params->m_uber_level >= 4) ? (pComp_params->m_uber_level - 2) : 1; - for (int ly = -Q; ly <= 1; ly++) - { - for (int hy = max_selector - 1; hy <= (max_selector + Q); hy++) - { - if ((ly == 0) && (hy == max_selector)) - continue; - - for (uint32_t i = 0; i < pParams->m_num_pixels; i++) - selectors_temp1[i] = (uint8_t)clampf(floorf((float)max_selector * ((float)selectors_temp[i] - (float)ly) / ((float)hy - (float)ly) + .5f), 0, (float)max_selector); - - //vec4F xl, xh; - vec4F_set_scalar(&xl, 0.0f); - vec4F_set_scalar(&xh, 0.0f); - if (pParams->m_has_alpha) - compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - else - compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); - - xl = vec4F_mul(&xl, (1.0f / 255.0f)); - xh = vec4F_mul(&xh, (1.0f / 255.0f)); - - if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) - return 0; - } - } - } - } - - if (mode == 1) - { - // Try encoding the partition as a single color by using the optimal singe colors tables to encode the block to its mean. - color_cell_compressor_results avg_results = *pResults; - const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f); - uint64_t avg_err = pack_mode1_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp); - if (avg_err < pResults->m_best_overall_err) - { - *pResults = avg_results; - memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); - pResults->m_best_overall_err = avg_err; - } - } - else if (mode == 7) - { - // Try encoding the partition as a single color by using the optimal singe colors tables to encode the block to its mean. - color_cell_compressor_results avg_results = *pResults; - const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f), a = (int)(.5f + meanColor.m_c[3] * 255.0f); - uint64_t avg_err = pack_mode7_to_one_color(pParams, &avg_results, r, g, b, a, pResults->m_pSelectors_temp, pParams->m_num_pixels, pParams->m_pPixels); - if (avg_err < pResults->m_best_overall_err) - { - *pResults = avg_results; - memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); - pResults->m_best_overall_err = avg_err; - } - } - - return pResults->m_best_overall_err; -} - -static uint64_t color_cell_compression_est_mode1(uint32_t num_pixels, const color_quad_u8 *pPixels, bc7enc_bool perceptual, uint32_t pweights[4], uint64_t best_err_so_far) -{ - // Find RGB bounds as an approximation of the block's principle axis - uint32_t lr = 255, lg = 255, lb = 255; - uint32_t hr = 0, hg = 0, hb = 0; - for (uint32_t i = 0; i < num_pixels; i++) - { - const color_quad_u8 *pC = &pPixels[i]; - if (pC->m_c[0] < lr) lr = pC->m_c[0]; - if (pC->m_c[1] < lg) lg = pC->m_c[1]; - if (pC->m_c[2] < lb) lb = pC->m_c[2]; - if (pC->m_c[0] > hr) hr = pC->m_c[0]; - if (pC->m_c[1] > hg) hg = pC->m_c[1]; - if (pC->m_c[2] > hb) hb = pC->m_c[2]; - } - - color_quad_u8 lowColor; color_quad_u8_set(&lowColor, lr, lg, lb, 0); - color_quad_u8 highColor; color_quad_u8_set(&highColor, hr, hg, hb, 0); - - // Place endpoints at bbox diagonals and compute interpolated colors - const uint32_t N = 8; - color_quad_u8 weightedColors[8]; - - weightedColors[0] = lowColor; - weightedColors[N - 1] = highColor; - for (uint32_t i = 1; i < (N - 1); i++) - { - weightedColors[i].m_c[0] = (uint8_t)((lowColor.m_c[0] * (64 - g_bc7_weights3[i]) + highColor.m_c[0] * g_bc7_weights3[i] + 32) >> 6); - weightedColors[i].m_c[1] = (uint8_t)((lowColor.m_c[1] * (64 - g_bc7_weights3[i]) + highColor.m_c[1] * g_bc7_weights3[i] + 32) >> 6); - weightedColors[i].m_c[2] = (uint8_t)((lowColor.m_c[2] * (64 - g_bc7_weights3[i]) + highColor.m_c[2] * g_bc7_weights3[i] + 32) >> 6); - } - - // Compute dots and thresholds - const int ar = highColor.m_c[0] - lowColor.m_c[0]; - const int ag = highColor.m_c[1] - lowColor.m_c[1]; - const int ab = highColor.m_c[2] - lowColor.m_c[2]; - - int dots[8]; - for (uint32_t i = 0; i < N; i++) - dots[i] = weightedColors[i].m_c[0] * ar + weightedColors[i].m_c[1] * ag + weightedColors[i].m_c[2] * ab; - - int thresh[8 - 1]; - for (uint32_t i = 0; i < (N - 1); i++) - thresh[i] = (dots[i] + dots[i + 1] + 1) >> 1; - - uint64_t total_err = 0; - if (perceptual) - { - // Transform block's interpolated colors to YCbCr - int l1[8], cr1[8], cb1[8]; - for (int j = 0; j < 8; j++) - { - const color_quad_u8 *pE1 = &weightedColors[j]; - l1[j] = pE1->m_c[0] * 109 + pE1->m_c[1] * 366 + pE1->m_c[2] * 37; - cr1[j] = ((int)pE1->m_c[0] << 9) - l1[j]; - cb1[j] = ((int)pE1->m_c[2] << 9) - l1[j]; - } - - for (uint32_t i = 0; i < num_pixels; i++) - { - const color_quad_u8 *pC = &pPixels[i]; - - int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2]; - - // Find approximate selector - uint32_t s = 0; - if (d >= thresh[6]) - s = 7; - else if (d >= thresh[5]) - s = 6; - else if (d >= thresh[4]) - s = 5; - else if (d >= thresh[3]) - s = 4; - else if (d >= thresh[2]) - s = 3; - else if (d >= thresh[1]) - s = 2; - else if (d >= thresh[0]) - s = 1; - - // Compute error - const int l2 = pC->m_c[0] * 109 + pC->m_c[1] * 366 + pC->m_c[2] * 37; - const int cr2 = ((int)pC->m_c[0] << 9) - l2; - const int cb2 = ((int)pC->m_c[2] << 9) - l2; - - const int dl = (l1[s] - l2) >> 8; - const int dcr = (cr1[s] - cr2) >> 8; - const int dcb = (cb1[s] - cb2) >> 8; - - int ie = (pweights[0] * dl * dl) + (pweights[1] * dcr * dcr) + (pweights[2] * dcb * dcb); - - total_err += ie; - if (total_err > best_err_so_far) - break; - } - } - else - { - for (uint32_t i = 0; i < num_pixels; i++) - { - const color_quad_u8 *pC = &pPixels[i]; - - int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2]; - - // Find approximate selector - uint32_t s = 0; - if (d >= thresh[6]) - s = 7; - else if (d >= thresh[5]) - s = 6; - else if (d >= thresh[4]) - s = 5; - else if (d >= thresh[3]) - s = 4; - else if (d >= thresh[2]) - s = 3; - else if (d >= thresh[1]) - s = 2; - else if (d >= thresh[0]) - s = 1; - - // Compute error - const color_quad_u8 *pE1 = &weightedColors[s]; - - int dr = (int)pE1->m_c[0] - (int)pC->m_c[0]; - int dg = (int)pE1->m_c[1] - (int)pC->m_c[1]; - int db = (int)pE1->m_c[2] - (int)pC->m_c[2]; - - total_err += pweights[0] * (dr * dr) + pweights[1] * (dg * dg) + pweights[2] * (db * db); - if (total_err > best_err_so_far) - break; - } - } - - return total_err; -} - -static uint64_t color_cell_compression_est_mode7(uint32_t num_pixels, const color_quad_u8* pPixels, bc7enc_bool perceptual, uint32_t pweights[4], uint64_t best_err_so_far) -{ - // Find RGB bounds as an approximation of the block's principle axis - uint32_t lr = 255, lg = 255, lb = 255, la = 255; - uint32_t hr = 0, hg = 0, hb = 0, ha = 0; - for (uint32_t i = 0; i < num_pixels; i++) - { - const color_quad_u8* pC = &pPixels[i]; - if (pC->m_c[0] < lr) lr = pC->m_c[0]; - if (pC->m_c[1] < lg) lg = pC->m_c[1]; - if (pC->m_c[2] < lb) lb = pC->m_c[2]; - if (pC->m_c[3] < la) la = pC->m_c[3]; - - if (pC->m_c[0] > hr) hr = pC->m_c[0]; - if (pC->m_c[1] > hg) hg = pC->m_c[1]; - if (pC->m_c[2] > hb) hb = pC->m_c[2]; - if (pC->m_c[3] > ha) ha = pC->m_c[3]; - } - - color_quad_u8 lowColor; color_quad_u8_set(&lowColor, lr, lg, lb, la); - color_quad_u8 highColor; color_quad_u8_set(&highColor, hr, hg, hb, ha); - - // Place endpoints at bbox diagonals and compute interpolated colors - const uint32_t N = 4; - color_quad_u8 weightedColors[4]; - - weightedColors[0] = lowColor; - weightedColors[N - 1] = highColor; - for (uint32_t i = 1; i < (N - 1); i++) - { - weightedColors[i].m_c[0] = (uint8_t)((lowColor.m_c[0] * (64 - g_bc7_weights2[i]) + highColor.m_c[0] * g_bc7_weights2[i] + 32) >> 6); - weightedColors[i].m_c[1] = (uint8_t)((lowColor.m_c[1] * (64 - g_bc7_weights2[i]) + highColor.m_c[1] * g_bc7_weights2[i] + 32) >> 6); - weightedColors[i].m_c[2] = (uint8_t)((lowColor.m_c[2] * (64 - g_bc7_weights2[i]) + highColor.m_c[2] * g_bc7_weights2[i] + 32) >> 6); - weightedColors[i].m_c[3] = (uint8_t)((lowColor.m_c[3] * (64 - g_bc7_weights2[i]) + highColor.m_c[3] * g_bc7_weights2[i] + 32) >> 6); - } - - // Compute dots and thresholds - const int ar = highColor.m_c[0] - lowColor.m_c[0]; - const int ag = highColor.m_c[1] - lowColor.m_c[1]; - const int ab = highColor.m_c[2] - lowColor.m_c[2]; - const int aa = highColor.m_c[3] - lowColor.m_c[3]; - - int dots[4]; - for (uint32_t i = 0; i < N; i++) - dots[i] = weightedColors[i].m_c[0] * ar + weightedColors[i].m_c[1] * ag + weightedColors[i].m_c[2] * ab + weightedColors[i].m_c[3] * aa; - - int thresh[4 - 1]; - for (uint32_t i = 0; i < (N - 1); i++) - thresh[i] = (dots[i] + dots[i + 1] + 1) >> 1; - - uint64_t total_err = 0; - if (perceptual) - { - // Transform block's interpolated colors to YCbCr - int l1[4], cr1[4], cb1[4]; - for (int j = 0; j < 4; j++) - { - const color_quad_u8* pE1 = &weightedColors[j]; - l1[j] = pE1->m_c[0] * 109 + pE1->m_c[1] * 366 + pE1->m_c[2] * 37; - cr1[j] = ((int)pE1->m_c[0] << 9) - l1[j]; - cb1[j] = ((int)pE1->m_c[2] << 9) - l1[j]; - } - - for (uint32_t i = 0; i < num_pixels; i++) - { - const color_quad_u8* pC = &pPixels[i]; - - int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2] + aa * pC->m_c[3]; - - // Find approximate selector - uint32_t s = 0; - if (d >= thresh[2]) - s = 3; - else if (d >= thresh[1]) - s = 2; - else if (d >= thresh[0]) - s = 1; - - // Compute error - const int l2 = pC->m_c[0] * 109 + pC->m_c[1] * 366 + pC->m_c[2] * 37; - const int cr2 = ((int)pC->m_c[0] << 9) - l2; - const int cb2 = ((int)pC->m_c[2] << 9) - l2; - - const int dl = (l1[s] - l2) >> 8; - const int dcr = (cr1[s] - cr2) >> 8; - const int dcb = (cb1[s] - cb2) >> 8; - - const int dca = (int)pC->m_c[3] - (int)weightedColors[s].m_c[3]; - - int ie = (pweights[0] * dl * dl) + (pweights[1] * dcr * dcr) + (pweights[2] * dcb * dcb) + (pweights[3] * dca * dca); - - total_err += ie; - if (total_err > best_err_so_far) - break; - } - } - else - { - for (uint32_t i = 0; i < num_pixels; i++) - { - const color_quad_u8* pC = &pPixels[i]; - - int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2] + aa * pC->m_c[3]; - - // Find approximate selector - uint32_t s = 0; - if (d >= thresh[2]) - s = 3; - else if (d >= thresh[1]) - s = 2; - else if (d >= thresh[0]) - s = 1; - - // Compute error - const color_quad_u8* pE1 = &weightedColors[s]; - - int dr = (int)pE1->m_c[0] - (int)pC->m_c[0]; - int dg = (int)pE1->m_c[1] - (int)pC->m_c[1]; - int db = (int)pE1->m_c[2] - (int)pC->m_c[2]; - int da = (int)pE1->m_c[3] - (int)pC->m_c[3]; - - total_err += pweights[0] * (dr * dr) + pweights[1] * (dg * dg) + pweights[2] * (db * db) + pweights[3] * (da * da); - if (total_err > best_err_so_far) - break; - } - } - - return total_err; -} - -// This table contains bitmasks indicating which "key" partitions must be best ranked before this partition is worth evaluating. -// We first rank the best/most used 14 partitions (sorted by usefulness), record the best one found as the key partition, then use -// that to control the other partitions to evaluate. The quality loss is ~.08 dB RGB PSNR, the perf gain is up to ~11% (at uber level 0). -static const uint32_t g_partition_predictors[35] = -{ - UINT32_MAX, - UINT32_MAX, - UINT32_MAX, - UINT32_MAX, - UINT32_MAX, - (1 << 1) | (1 << 2) | (1 << 8), - (1 << 1) | (1 << 3) | (1 << 7), - UINT32_MAX, - UINT32_MAX, - (1 << 2) | (1 << 8) | (1 << 16), - (1 << 7) | (1 << 3) | (1 << 15), - UINT32_MAX, - (1 << 8) | (1 << 14) | (1 << 16), - (1 << 7) | (1 << 14) | (1 << 15), - UINT32_MAX, - UINT32_MAX, - UINT32_MAX, - UINT32_MAX, - (1 << 14) | (1 << 15), - (1 << 16) | (1 << 22) | (1 << 14), - (1 << 17) | (1 << 24) | (1 << 14), - (1 << 2) | (1 << 14) | (1 << 15) | (1 << 1), - UINT32_MAX, - (1 << 1) | (1 << 3) | (1 << 14) | (1 << 16) | (1 << 22), - UINT32_MAX, - (1 << 1) | (1 << 2) | (1 << 15) | (1 << 17) | (1 << 24), - (1 << 1) | (1 << 3) | (1 << 22), - UINT32_MAX, - UINT32_MAX, - UINT32_MAX, - (1 << 14) | (1 << 15) | (1 << 16) | (1 << 17), - UINT32_MAX, - UINT32_MAX, - (1 << 1) | (1 << 2) | (1 << 3) | (1 << 27) | (1 << 4) | (1 << 24), - (1 << 14) | (1 << 15) | (1 << 16) | (1 << 11) | (1 << 17) | (1 << 27) -}; - -// Estimate the partition used by modes 1/7. This scans through each partition and computes an approximate error for each. -static uint32_t estimate_partition(const color_quad_u8 *pPixels, const bc7enc_compress_block_params *pComp_params, uint32_t pweights[4], uint32_t mode) -{ - const uint32_t total_partitions = minimumu(pComp_params->m_max_partitions_mode, BC7ENC_MAX_PARTITIONS1); - if (total_partitions <= 1) - return 0; - - uint64_t best_err = UINT64_MAX; - uint32_t best_partition = 0; - - // Partition order sorted by usage frequency across a large test corpus. Pattern 34 (checkerboard) must appear in slot 34. - // Using a sorted order allows the user to decrease the # of partitions to scan with minimal loss in quality. - static const uint8_t s_sorted_partition_order[64] = - { - 1 - 1, 14 - 1, 2 - 1, 3 - 1, 16 - 1, 15 - 1, 11 - 1, 17 - 1, - 4 - 1, 24 - 1, 27 - 1, 7 - 1, 8 - 1, 22 - 1, 20 - 1, 30 - 1, - 9 - 1, 5 - 1, 10 - 1, 21 - 1, 6 - 1, 32 - 1, 23 - 1, 18 - 1, - 19 - 1, 12 - 1, 13 - 1, 31 - 1, 25 - 1, 26 - 1, 29 - 1, 28 - 1, - 33 - 1, 34 - 1, 35 - 1, 46 - 1, 47 - 1, 52 - 1, 50 - 1, 51 - 1, - 49 - 1, 39 - 1, 40 - 1, 38 - 1, 54 - 1, 53 - 1, 55 - 1, 37 - 1, - 58 - 1, 59 - 1, 56 - 1, 42 - 1, 41 - 1, 43 - 1, 44 - 1, 60 - 1, - 45 - 1, 57 - 1, 48 - 1, 36 - 1, 61 - 1, 64 - 1, 63 - 1, 62 - 1 - }; - - assert(s_sorted_partition_order[34] == 34); - - int best_key_partition = 0; - - for (uint32_t partition_iter = 0; (partition_iter < total_partitions) && (best_err > 0); partition_iter++) - { - const uint32_t partition = s_sorted_partition_order[partition_iter]; - - // Check to see if we should bother evaluating this partition at all, depending on the best partition found from the first 14. - if (pComp_params->m_mode_partition_estimation_filterbank) - { - if ((partition_iter >= 14) && (partition_iter <= 34)) - { - const uint32_t best_key_partition_bitmask = 1 << (best_key_partition + 1); - if ((g_partition_predictors[partition] & best_key_partition_bitmask) == 0) - { - if (partition_iter == 34) - break; - - continue; - } - } - } - - const uint8_t *pPartition = &g_bc7_partition2[partition * 16]; - - color_quad_u8 subset_colors[2][16]; - uint32_t subset_total_colors[2] = { 0, 0 }; - for (uint32_t index = 0; index < 16; index++) - subset_colors[pPartition[index]][subset_total_colors[pPartition[index]]++] = pPixels[index]; - - uint64_t total_subset_err = 0; - for (uint32_t subset = 0; (subset < 2) && (total_subset_err < best_err); subset++) - { - if (mode == 7) - total_subset_err += color_cell_compression_est_mode7(subset_total_colors[subset], &subset_colors[subset][0], pComp_params->m_perceptual, pweights, best_err); - else - total_subset_err += color_cell_compression_est_mode1(subset_total_colors[subset], &subset_colors[subset][0], pComp_params->m_perceptual, pweights, best_err); - } - - if (total_subset_err < best_err) - { - best_err = total_subset_err; - best_partition = partition; - } - - // If the checkerboard pattern doesn't get the highest ranking vs. the previous (lower frequency) patterns, then just stop now because statistically the subsequent patterns won't do well either. - if ((partition == 34) && (best_partition != 34)) - break; - - if (partition_iter == 13) - best_key_partition = best_partition; - - } // partition - - return best_partition; -} - -static void set_block_bits(uint8_t *pBytes, uint32_t val, uint32_t num_bits, uint32_t *pCur_ofs) -{ - assert((num_bits <= 32) && (val < (1ULL << num_bits))); - while (num_bits) - { - const uint32_t n = minimumu(8 - (*pCur_ofs & 7), num_bits); - pBytes[*pCur_ofs >> 3] |= (uint8_t)(val << (*pCur_ofs & 7)); - val >>= n; - num_bits -= n; - *pCur_ofs += n; - } - assert(*pCur_ofs <= 128); -} - -typedef struct -{ - uint32_t m_mode; - uint32_t m_partition; - uint8_t m_selectors[16]; - uint8_t m_alpha_selectors[16]; - color_quad_u8 m_low[3]; - color_quad_u8 m_high[3]; - uint32_t m_pbits[3][2]; - uint32_t m_rotation; - uint32_t m_index_selector; -} bc7_optimization_results; - -static void encode_bc7_block(void* pBlock, const bc7_optimization_results* pResults) -{ - assert(pResults->m_index_selector <= 1); - assert(pResults->m_rotation <= 3); - - const uint32_t best_mode = pResults->m_mode; - - const uint32_t total_subsets = g_bc7_num_subsets[best_mode]; - const uint32_t total_partitions = 1 << g_bc7_partition_bits[best_mode]; - //const uint32_t num_rotations = 1 << g_bc7_rotation_bits[best_mode]; - //const uint32_t num_index_selectors = (best_mode == 4) ? 2 : 1; - - const uint8_t* pPartition; - if (total_subsets == 1) - pPartition = &g_bc7_partition1[0]; - else if (total_subsets == 2) - pPartition = &g_bc7_partition2[pResults->m_partition * 16]; - else - pPartition = &g_bc7_partition3[pResults->m_partition * 16]; - - uint8_t color_selectors[16]; - memcpy(color_selectors, pResults->m_selectors, 16); - - uint8_t alpha_selectors[16]; - memcpy(alpha_selectors, pResults->m_alpha_selectors, 16); - - color_quad_u8 low[3], high[3]; - memcpy(low, pResults->m_low, sizeof(low)); - memcpy(high, pResults->m_high, sizeof(high)); - - uint32_t pbits[3][2]; - memcpy(pbits, pResults->m_pbits, sizeof(pbits)); - - int anchor[3] = { -1, -1, -1 }; - - for (uint32_t k = 0; k < total_subsets; k++) - { - uint32_t anchor_index = 0; - if (k) - { - if ((total_subsets == 3) && (k == 1)) - anchor_index = g_bc7_table_anchor_index_third_subset_1[pResults->m_partition]; - else if ((total_subsets == 3) && (k == 2)) - anchor_index = g_bc7_table_anchor_index_third_subset_2[pResults->m_partition]; - else - anchor_index = g_bc7_table_anchor_index_second_subset[pResults->m_partition]; - } - - anchor[k] = anchor_index; - - const uint32_t color_index_bits = get_bc7_color_index_size(best_mode, pResults->m_index_selector); - const uint32_t num_color_indices = 1 << color_index_bits; - - if (color_selectors[anchor_index] & (num_color_indices >> 1)) - { - for (uint32_t i = 0; i < 16; i++) - if (pPartition[i] == k) - color_selectors[i] = (uint8_t)((num_color_indices - 1) - color_selectors[i]); - - if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) - { - for (uint32_t q = 0; q < 3; q++) - { - uint8_t t = low[k].m_c[q]; - low[k].m_c[q] = high[k].m_c[q]; - high[k].m_c[q] = t; - } - } - else - { - color_quad_u8 tmp = low[k]; - low[k] = high[k]; - high[k] = tmp; - } - - if (!g_bc7_mode_has_shared_p_bits[best_mode]) - { - uint32_t t = pbits[k][0]; - pbits[k][0] = pbits[k][1]; - pbits[k][1] = t; - } - } - - if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) - { - const uint32_t alpha_index_bits = get_bc7_alpha_index_size(best_mode, pResults->m_index_selector); - const uint32_t num_alpha_indices = 1 << alpha_index_bits; - - if (alpha_selectors[anchor_index] & (num_alpha_indices >> 1)) - { - for (uint32_t i = 0; i < 16; i++) - if (pPartition[i] == k) - alpha_selectors[i] = (uint8_t)((num_alpha_indices - 1) - alpha_selectors[i]); - - uint8_t t = low[k].m_c[3]; - low[k].m_c[3] = high[k].m_c[3]; - high[k].m_c[3] = t; - } - } - } - - uint8_t* pBlock_bytes = (uint8_t*)(pBlock); - memset(pBlock_bytes, 0, BC7ENC_BLOCK_SIZE); - - uint32_t cur_bit_ofs = 0; - set_block_bits(pBlock_bytes, 1 << best_mode, best_mode + 1, &cur_bit_ofs); - - if ((best_mode == 4) || (best_mode == 5)) - set_block_bits(pBlock_bytes, pResults->m_rotation, 2, &cur_bit_ofs); - - if (best_mode == 4) - set_block_bits(pBlock_bytes, pResults->m_index_selector, 1, &cur_bit_ofs); - - if (total_partitions > 1) - set_block_bits(pBlock_bytes, pResults->m_partition, (total_partitions == 64) ? 6 : 4, &cur_bit_ofs); - - const uint32_t total_comps = (best_mode >= 4) ? 4 : 3; - for (uint32_t comp = 0; comp < total_comps; comp++) - { - for (uint32_t subset = 0; subset < total_subsets; subset++) - { - set_block_bits(pBlock_bytes, low[subset].m_c[comp], (comp == 3) ? g_bc7_alpha_precision_table[best_mode] : g_bc7_color_precision_table[best_mode], &cur_bit_ofs); - set_block_bits(pBlock_bytes, high[subset].m_c[comp], (comp == 3) ? g_bc7_alpha_precision_table[best_mode] : g_bc7_color_precision_table[best_mode], &cur_bit_ofs); - } - } - - if (g_bc7_mode_has_p_bits[best_mode]) - { - for (uint32_t subset = 0; subset < total_subsets; subset++) - { - set_block_bits(pBlock_bytes, pbits[subset][0], 1, &cur_bit_ofs); - if (!g_bc7_mode_has_shared_p_bits[best_mode]) - set_block_bits(pBlock_bytes, pbits[subset][1], 1, &cur_bit_ofs); - } - } - - for (uint32_t y = 0; y < 4; y++) - { - for (uint32_t x = 0; x < 4; x++) - { - int idx = x + y * 4; - - uint32_t n = pResults->m_index_selector ? get_bc7_alpha_index_size(best_mode, pResults->m_index_selector) : get_bc7_color_index_size(best_mode, pResults->m_index_selector); - - if ((idx == anchor[0]) || (idx == anchor[1]) || (idx == anchor[2])) - n--; - - set_block_bits(pBlock_bytes, pResults->m_index_selector ? alpha_selectors[idx] : color_selectors[idx], n, &cur_bit_ofs); - } - } - - if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) - { - for (uint32_t y = 0; y < 4; y++) - { - for (uint32_t x = 0; x < 4; x++) - { - int idx = x + y * 4; - - uint32_t n = pResults->m_index_selector ? get_bc7_color_index_size(best_mode, pResults->m_index_selector) : get_bc7_alpha_index_size(best_mode, pResults->m_index_selector); - - if ((idx == anchor[0]) || (idx == anchor[1]) || (idx == anchor[2])) - n--; - - set_block_bits(pBlock_bytes, pResults->m_index_selector ? color_selectors[idx] : alpha_selectors[idx], n, &cur_bit_ofs); - } - } - } - - assert(cur_bit_ofs == 128); -} - -static void handle_alpha_block_mode5(const color_quad_u8* pPixels, const bc7enc_compress_block_params* pComp_params, color_cell_compressor_params* pParams, uint32_t lo_a, uint32_t hi_a, bc7_optimization_results* pOpt_results5, uint64_t* pMode5_err, uint64_t* pMode5_alpha_err) -{ - pParams->m_pSelector_weights = g_bc7_weights2; - pParams->m_pSelector_weightsx = (const vec4F*)g_bc7_weights2x; - pParams->m_num_selector_weights = 4; - - pParams->m_comp_bits = 7; - pParams->m_has_pbits = BC7ENC_FALSE; - pParams->m_endpoints_share_pbit = BC7ENC_FALSE; - pParams->m_has_alpha = BC7ENC_FALSE; - - pParams->m_perceptual = pComp_params->m_perceptual; - - pParams->m_num_pixels = 16; - pParams->m_pPixels = pPixels; - - color_cell_compressor_results results5; - results5.m_pSelectors = pOpt_results5->m_selectors; - - uint8_t selectors_temp[16]; - results5.m_pSelectors_temp = selectors_temp; - - *pMode5_err = color_cell_compression(5, pParams, &results5, pComp_params); - assert(*pMode5_err == results5.m_best_overall_err); - - pOpt_results5->m_low[0] = results5.m_low_endpoint; - pOpt_results5->m_high[0] = results5.m_high_endpoint; - - if (lo_a == hi_a) - { - *pMode5_alpha_err = 0; - pOpt_results5->m_low[0].m_c[3] = (uint8_t)lo_a; - pOpt_results5->m_high[0].m_c[3] = (uint8_t)hi_a; - memset(pOpt_results5->m_alpha_selectors, 0, sizeof(pOpt_results5->m_alpha_selectors)); - } - else - { - *pMode5_alpha_err = UINT64_MAX; - - const uint32_t total_passes = (pComp_params->m_uber_level >= 1) ? 3 : 2; - for (uint32_t pass = 0; pass < total_passes; pass++) - { - int32_t vals[4]; - vals[0] = lo_a; - vals[3] = hi_a; - - const int32_t w_s1 = 21, w_s2 = 43; - vals[1] = (vals[0] * (64 - w_s1) + vals[3] * w_s1 + 32) >> 6; - vals[2] = (vals[0] * (64 - w_s2) + vals[3] * w_s2 + 32) >> 6; - - uint8_t trial_alpha_selectors[16]; - - uint64_t trial_alpha_err = 0; - for (uint32_t i = 0; i < 16; i++) - { - const int32_t a = pParams->m_pPixels[i].m_c[3]; - - int s = 0; - int32_t be = iabs32(a - vals[0]); - int e = iabs32(a - vals[1]); if (e < be) { be = e; s = 1; } - e = iabs32(a - vals[2]); if (e < be) { be = e; s = 2; } - e = iabs32(a - vals[3]); if (e < be) { be = e; s = 3; } - - trial_alpha_selectors[i] = (uint8_t)s; - - uint32_t a_err = (uint32_t)(be * be) * pParams->m_weights[3]; - - trial_alpha_err += a_err; - } - - if (trial_alpha_err < *pMode5_alpha_err) - { - *pMode5_alpha_err = trial_alpha_err; - pOpt_results5->m_low[0].m_c[3] = (uint8_t)lo_a; - pOpt_results5->m_high[0].m_c[3] = (uint8_t)hi_a; - memcpy(pOpt_results5->m_alpha_selectors, trial_alpha_selectors, sizeof(pOpt_results5->m_alpha_selectors)); - } - - if (pass != (total_passes - 1U)) - { - float xl, xh; - compute_least_squares_endpoints_a(16, trial_alpha_selectors, (const vec4F*)g_bc7_weights2x, &xl, &xh, pParams->m_pPixels); - - uint32_t new_lo_a = clampi((int)floor(xl + .5f), 0, 255); - uint32_t new_hi_a = clampi((int)floor(xh + .5f), 0, 255); - if (new_lo_a > new_hi_a) - swapu(&new_lo_a, &new_hi_a); - - if ((new_lo_a == lo_a) && (new_hi_a == hi_a)) - break; - - lo_a = new_lo_a; - hi_a = new_hi_a; - } - } - - *pMode5_err += *pMode5_alpha_err; - } -} - -static void handle_alpha_block(void *pBlock, const color_quad_u8 *pPixels, const bc7enc_compress_block_params *pComp_params, color_cell_compressor_params *pParams) -{ - pParams->m_pSelector_weights = g_bc7_weights4; - pParams->m_pSelector_weightsx = (const vec4F *)g_bc7_weights4x; - pParams->m_num_selector_weights = 16; - pParams->m_comp_bits = 7; - pParams->m_has_pbits = BC7ENC_TRUE; - pParams->m_endpoints_share_pbit = BC7ENC_FALSE; - pParams->m_has_alpha = BC7ENC_TRUE; - pParams->m_perceptual = pComp_params->m_perceptual; - pParams->m_num_pixels = 16; - pParams->m_pPixels = pPixels; - - bc7_optimization_results opt_results6, opt_results5, opt_results7; - - color_cell_compressor_results results6; - results6.m_pSelectors = opt_results6.m_selectors; - uint8_t selectors_temp[16]; - results6.m_pSelectors_temp = selectors_temp; - - uint64_t best_err = color_cell_compression(6, pParams, &results6, pComp_params); - uint32_t best_mode = 6; - - if ((best_err > 0) && (pComp_params->m_use_mode5_for_alpha)) - { - uint32_t lo_a = 255, hi_a = 0; - for (uint32_t i = 0; i < 16; i++) - { - uint32_t a = pPixels[i].m_c[3]; - lo_a = minimumu(lo_a, a); - hi_a = maximumu(hi_a, a); - } - - uint64_t mode5_err, mode5_alpha_err; - handle_alpha_block_mode5(pPixels, pComp_params, pParams, lo_a, hi_a, &opt_results5, &mode5_err, &mode5_alpha_err); - - if (mode5_err < best_err) - { - best_err = mode5_err; - best_mode = 5; - } - } - - if ((best_err > 0) && (pComp_params->m_use_mode7_for_alpha)) - { - const uint32_t trial_partition = estimate_partition(pPixels, pComp_params, pParams->m_weights, 7); - - pParams->m_pSelector_weights = g_bc7_weights2; - pParams->m_pSelector_weightsx = (const vec4F*)g_bc7_weights2x; - pParams->m_num_selector_weights = 4; - pParams->m_comp_bits = 5; - pParams->m_has_pbits = BC7ENC_TRUE; - pParams->m_endpoints_share_pbit = BC7ENC_FALSE; - pParams->m_has_alpha = BC7ENC_TRUE; - - const uint8_t* pPartition = &g_bc7_partition2[trial_partition * 16]; - - color_quad_u8 subset_colors[2][16]; - - uint32_t subset_total_colors7[2] = { 0, 0 }; - - uint8_t subset_pixel_index7[2][16]; - uint8_t subset_selectors7[2][16]; - color_cell_compressor_results subset_results7[2]; - - for (uint32_t idx = 0; idx < 16; idx++) - { - const uint32_t p = pPartition[idx]; - subset_colors[p][subset_total_colors7[p]] = pPixels[idx]; - subset_pixel_index7[p][subset_total_colors7[p]] = (uint8_t)idx; - subset_total_colors7[p]++; - } - - uint64_t trial_err = 0; - for (uint32_t subset = 0; subset < 2; subset++) - { - pParams->m_num_pixels = subset_total_colors7[subset]; - pParams->m_pPixels = &subset_colors[subset][0]; - - color_cell_compressor_results* pResults = &subset_results7[subset]; - pResults->m_pSelectors = &subset_selectors7[subset][0]; - pResults->m_pSelectors_temp = selectors_temp; - uint64_t err = color_cell_compression(7, pParams, pResults, pComp_params); - trial_err += err; - if (trial_err > best_err) - break; - - } // subset - - if (trial_err < best_err) - { - best_err = trial_err; - best_mode = 7; - opt_results7.m_mode = 7; - opt_results7.m_partition = trial_partition; - opt_results7.m_index_selector = 0; - opt_results7.m_rotation = 0; - for (uint32_t subset = 0; subset < 2; subset++) - { - for (uint32_t i = 0; i < subset_total_colors7[subset]; i++) - opt_results7.m_selectors[subset_pixel_index7[subset][i]] = subset_selectors7[subset][i]; - opt_results7.m_low[subset] = subset_results7[subset].m_low_endpoint; - opt_results7.m_high[subset] = subset_results7[subset].m_high_endpoint; - opt_results7.m_pbits[subset][0] = subset_results7[subset].m_pbits[0]; - opt_results7.m_pbits[subset][1] = subset_results7[subset].m_pbits[1]; - } - } - } - - if (best_mode == 7) - { - encode_bc7_block(pBlock, &opt_results7); - } - else if (best_mode == 5) - { - opt_results5.m_mode = 5; - opt_results5.m_partition = 0; - opt_results5.m_rotation = 0; - opt_results5.m_index_selector = 0; - - encode_bc7_block(pBlock, &opt_results5); - } - else if (best_mode == 6) - { - opt_results6.m_mode = 6; - opt_results6.m_partition = 0; - opt_results6.m_low[0] = results6.m_low_endpoint; - opt_results6.m_high[0] = results6.m_high_endpoint; - opt_results6.m_pbits[0][0] = results6.m_pbits[0]; - opt_results6.m_pbits[0][1] = results6.m_pbits[1]; - opt_results6.m_rotation = 0; - opt_results6.m_index_selector = 0; - - encode_bc7_block(pBlock, &opt_results6); - } -} - -static void handle_opaque_block(void *pBlock, const color_quad_u8 *pPixels, const bc7enc_compress_block_params *pComp_params, color_cell_compressor_params *pParams) -{ - uint8_t selectors_temp[16]; - - // Mode 6 - bc7_optimization_results opt_results; - - pParams->m_pSelector_weights = g_bc7_weights4; - pParams->m_pSelector_weightsx = (const vec4F *)g_bc7_weights4x; - pParams->m_num_selector_weights = 16; - pParams->m_comp_bits = 7; - pParams->m_has_pbits = BC7ENC_TRUE; - pParams->m_endpoints_share_pbit = BC7ENC_FALSE; - pParams->m_perceptual = pComp_params->m_perceptual; - pParams->m_num_pixels = 16; - pParams->m_pPixels = pPixels; - pParams->m_has_alpha = BC7ENC_FALSE; - - color_cell_compressor_results results6; - results6.m_pSelectors = opt_results.m_selectors; - results6.m_pSelectors_temp = selectors_temp; - - uint64_t best_err = color_cell_compression(6, pParams, &results6, pComp_params); - - opt_results.m_mode = 6; - opt_results.m_partition = 0; - opt_results.m_low[0] = results6.m_low_endpoint; - opt_results.m_high[0] = results6.m_high_endpoint; - opt_results.m_pbits[0][0] = results6.m_pbits[0]; - opt_results.m_pbits[0][1] = results6.m_pbits[1]; - opt_results.m_index_selector = 0; - opt_results.m_rotation = 0; - - // Mode 1 - if ((best_err > 0) && (pComp_params->m_max_partitions_mode > 0)) - { - const uint32_t trial_partition = estimate_partition(pPixels, pComp_params, pParams->m_weights, 1); - - pParams->m_pSelector_weights = g_bc7_weights3; - pParams->m_pSelector_weightsx = (const vec4F *)g_bc7_weights3x; - pParams->m_num_selector_weights = 8; - pParams->m_comp_bits = 6; - pParams->m_has_pbits = BC7ENC_TRUE; - pParams->m_endpoints_share_pbit = BC7ENC_TRUE; - - const uint8_t *pPartition = &g_bc7_partition2[trial_partition * 16]; - - color_quad_u8 subset_colors[2][16]; - - uint32_t subset_total_colors1[2] = { 0, 0 }; - - uint8_t subset_pixel_index1[2][16]; - uint8_t subset_selectors1[2][16]; - color_cell_compressor_results subset_results1[2]; - - for (uint32_t idx = 0; idx < 16; idx++) - { - const uint32_t p = pPartition[idx]; - subset_colors[p][subset_total_colors1[p]] = pPixels[idx]; - subset_pixel_index1[p][subset_total_colors1[p]] = (uint8_t)idx; - subset_total_colors1[p]++; - } - - uint64_t trial_err = 0; - for (uint32_t subset = 0; subset < 2; subset++) - { - pParams->m_num_pixels = subset_total_colors1[subset]; - pParams->m_pPixels = &subset_colors[subset][0]; - - color_cell_compressor_results *pResults = &subset_results1[subset]; - pResults->m_pSelectors = &subset_selectors1[subset][0]; - pResults->m_pSelectors_temp = selectors_temp; - uint64_t err = color_cell_compression(1, pParams, pResults, pComp_params); - - trial_err += err; - if (trial_err > best_err) - break; - - } // subset - - if (trial_err < best_err) - { - best_err = trial_err; - opt_results.m_mode = 1; - opt_results.m_partition = trial_partition; - for (uint32_t subset = 0; subset < 2; subset++) - { - for (uint32_t i = 0; i < subset_total_colors1[subset]; i++) - opt_results.m_selectors[subset_pixel_index1[subset][i]] = subset_selectors1[subset][i]; - opt_results.m_low[subset] = subset_results1[subset].m_low_endpoint; - opt_results.m_high[subset] = subset_results1[subset].m_high_endpoint; - opt_results.m_pbits[subset][0] = subset_results1[subset].m_pbits[0]; - } - } - } - - encode_bc7_block(pBlock, &opt_results); -} - -bc7enc_bool bc7enc_compress_block(void *pBlock, const void *pPixelsRGBA, const bc7enc_compress_block_params *pComp_params) -{ - assert(g_bc7_mode_1_optimal_endpoints[255][0].m_hi != 0); - - const color_quad_u8 *pPixels = (const color_quad_u8 *)(pPixelsRGBA); - - color_cell_compressor_params params; - if (pComp_params->m_perceptual) - { - // https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.709_conversion - const float pr_weight = (.5f / (1.0f - .2126f)) * (.5f / (1.0f - .2126f)); - const float pb_weight = (.5f / (1.0f - .0722f)) * (.5f / (1.0f - .0722f)); - params.m_weights[0] = (int)(pComp_params->m_weights[0] * 4.0f); - params.m_weights[1] = (int)(pComp_params->m_weights[1] * 4.0f * pr_weight); - params.m_weights[2] = (int)(pComp_params->m_weights[2] * 4.0f * pb_weight); - params.m_weights[3] = pComp_params->m_weights[3] * 4; - } - else - memcpy(params.m_weights, pComp_params->m_weights, sizeof(params.m_weights)); - - for (uint32_t i = 0; i < 16; i++) - { - if (pPixels[i].m_c[3] < 255) - { - handle_alpha_block(pBlock, pPixels, pComp_params, ¶ms); - return BC7ENC_TRUE; - } - } - handle_opaque_block(pBlock, pPixels, pComp_params, ¶ms); - return BC7ENC_FALSE; -} - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright(c) 2020 Richard Geldreich, Jr. -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files(the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions : -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain(www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non - commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain.We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors.We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- -*/ diff --git a/external/bc7enc/bc7enc.h b/external/bc7enc/bc7enc.h deleted file mode 100644 index 6001aca8..00000000 --- a/external/bc7enc/bc7enc.h +++ /dev/null @@ -1,82 +0,0 @@ -// File: bc7enc.h - Richard Geldreich, Jr. - MIT license or public domain (see end of bc7enc.c) -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define BC7ENC_BLOCK_SIZE (16) -#define BC7ENC_MAX_PARTITIONS1 (64) -#define BC7ENC_MAX_UBER_LEVEL (4) - -typedef uint8_t bc7enc_bool; -#define BC7ENC_TRUE (1) -#define BC7ENC_FALSE (0) - -typedef struct -{ - // m_max_partitions_mode may range from 0 (disables mode 1) to BC7ENC_MAX_PARTITIONS1. The higher this value, the slower the compressor, but the higher the quality. - uint32_t m_max_partitions_mode; - - // Relative RGBA or YCbCrA weights. - uint32_t m_weights[4]; - - // m_uber_level may range from 0 to BC7ENC_MAX_UBER_LEVEL. The higher this value, the slower the compressor, but the higher the quality. - uint32_t m_uber_level; - - // If m_perceptual is true, colorspace error is computed in YCbCr space, otherwise RGB. - bc7enc_bool m_perceptual; - - // Set m_try_least_squares to false for slightly faster/lower quality compression. - bc7enc_bool m_try_least_squares; - - // When m_mode_partition_estimation_filterbank, the mode1 partition estimator skips lesser used partition patterns unless they are strongly predicted to be potentially useful. - // There's a slight loss in quality with this enabled (around .08 dB RGB PSNR or .05 dB Y PSNR), but up to a 11% gain in speed depending on the other settings. - bc7enc_bool m_mode_partition_estimation_filterbank; - - bc7enc_bool m_use_mode5_for_alpha; - bc7enc_bool m_use_mode7_for_alpha; - -} bc7enc_compress_block_params; - -inline void bc7enc_compress_block_params_init_linear_weights(bc7enc_compress_block_params *p) -{ - p->m_perceptual = BC7ENC_FALSE; - p->m_weights[0] = 1; - p->m_weights[1] = 1; - p->m_weights[2] = 1; - p->m_weights[3] = 1; -} - -inline void bc7enc_compress_block_params_init_perceptual_weights(bc7enc_compress_block_params *p) -{ - p->m_perceptual = BC7ENC_TRUE; - p->m_weights[0] = 128; - p->m_weights[1] = 64; - p->m_weights[2] = 16; - p->m_weights[3] = 32; -} - -inline void bc7enc_compress_block_params_init(bc7enc_compress_block_params *p) -{ - p->m_max_partitions_mode = BC7ENC_MAX_PARTITIONS1; - p->m_try_least_squares = BC7ENC_TRUE; - p->m_mode_partition_estimation_filterbank = BC7ENC_TRUE; - p->m_uber_level = 0; - p->m_use_mode5_for_alpha = BC7ENC_TRUE; - p->m_use_mode7_for_alpha = BC7ENC_TRUE; - bc7enc_compress_block_params_init_perceptual_weights(p); -} - -// bc7enc_compress_block_init() MUST be called before calling bc7enc_compress_block() (or you'll get artifacts). -void bc7enc_compress_block_init(); - -// Packs a single block of 16x16 RGBA pixels (R first in memory) to 128-bit BC7 block pBlock, using either mode 1 and/or 6. -// Alpha blocks will always use mode 6, and by default opaque blocks will use either modes 1 or 6. -// Returns BC7ENC_TRUE if the block had any pixels with alpha < 255, otherwise it return BC7ENC_FALSE. (This is not an error code - a block is always encoded.) -bc7enc_bool bc7enc_compress_block(void *pBlock, const void *pPixelsRGBA, const bc7enc_compress_block_params *pComp_params); - -#ifdef __cplusplus -} -#endif diff --git a/external/bc7enc/dds_defs.h b/external/bc7enc/dds_defs.h deleted file mode 100644 index 034cccfa..00000000 --- a/external/bc7enc/dds_defs.h +++ /dev/null @@ -1,286 +0,0 @@ -// File: dds_defs.h -// DX9/10 .DDS file header definitions. -#pragma once - -#define PIXEL_FMT_FOURCC(a, b, c, d) ((a) | ((b) << 8U) | ((c) << 16U) | ((d) << 24U)) - -enum pixel_format -{ - PIXEL_FMT_INVALID = 0, - - PIXEL_FMT_DXT1 = PIXEL_FMT_FOURCC('D', 'X', 'T', '1'), - PIXEL_FMT_DXT2 = PIXEL_FMT_FOURCC('D', 'X', 'T', '2'), - PIXEL_FMT_DXT3 = PIXEL_FMT_FOURCC('D', 'X', 'T', '3'), - PIXEL_FMT_DXT4 = PIXEL_FMT_FOURCC('D', 'X', 'T', '4'), - PIXEL_FMT_DXT5 = PIXEL_FMT_FOURCC('D', 'X', 'T', '5'), - PIXEL_FMT_3DC = PIXEL_FMT_FOURCC('A', 'T', 'I', '2'), // DXN_YX - PIXEL_FMT_DXN = PIXEL_FMT_FOURCC('A', '2', 'X', 'Y'), // DXN_XY - PIXEL_FMT_DXT5A = PIXEL_FMT_FOURCC('A', 'T', 'I', '1'), // ATI1N, http://developer.amd.com/media/gpu_assets/Radeon_X1x00_Programming_Guide.pdf - - // Non-standard formats (some of these are supported by ATI's Compressonator) - PIXEL_FMT_DXT5_CCxY = PIXEL_FMT_FOURCC('C', 'C', 'x', 'Y'), - PIXEL_FMT_DXT5_xGxR = PIXEL_FMT_FOURCC('x', 'G', 'x', 'R'), - PIXEL_FMT_DXT5_xGBR = PIXEL_FMT_FOURCC('x', 'G', 'B', 'R'), - PIXEL_FMT_DXT5_AGBR = PIXEL_FMT_FOURCC('A', 'G', 'B', 'R'), - - PIXEL_FMT_DXT1A = PIXEL_FMT_FOURCC('D', 'X', '1', 'A'), - PIXEL_FMT_ETC1 = PIXEL_FMT_FOURCC('E', 'T', 'C', '1'), - - PIXEL_FMT_R8G8B8 = PIXEL_FMT_FOURCC('R', 'G', 'B', 'x'), - PIXEL_FMT_L8 = PIXEL_FMT_FOURCC('L', 'x', 'x', 'x'), - PIXEL_FMT_A8 = PIXEL_FMT_FOURCC('x', 'x', 'x', 'A'), - PIXEL_FMT_A8L8 = PIXEL_FMT_FOURCC('L', 'x', 'x', 'A'), - PIXEL_FMT_A8R8G8B8 = PIXEL_FMT_FOURCC('R', 'G', 'B', 'A') -}; - -const uint32_t cDDSMaxImageDimensions = 8192U; - -// Total size of header is sizeof(uint32)+cDDSSizeofDDSurfaceDesc2; -const uint32_t cDDSSizeofDDSurfaceDesc2 = 124; - -// "DDS " -const uint32_t cDDSFileSignature = 0x20534444; - -struct DDCOLORKEY -{ - uint32_t dwUnused0; - uint32_t dwUnused1; -}; - -struct DDPIXELFORMAT -{ - uint32_t dwSize; - uint32_t dwFlags; - uint32_t dwFourCC; - uint32_t dwRGBBitCount; // ATI compressonator will place a FOURCC code here for swizzled/cooked DXTn formats - uint32_t dwRBitMask; - uint32_t dwGBitMask; - uint32_t dwBBitMask; - uint32_t dwRGBAlphaBitMask; -}; - -struct DDSCAPS2 -{ - uint32_t dwCaps; - uint32_t dwCaps2; - uint32_t dwCaps3; - uint32_t dwCaps4; -}; - -struct DDSURFACEDESC2 -{ - uint32_t dwSize; - uint32_t dwFlags; - uint32_t dwHeight; - uint32_t dwWidth; - union - { - int32_t lPitch; - uint32_t dwLinearSize; - }; - uint32_t dwBackBufferCount; - uint32_t dwMipMapCount; - uint32_t dwAlphaBitDepth; - uint32_t dwUnused0; - uint32_t lpSurface; - DDCOLORKEY unused0; - DDCOLORKEY unused1; - DDCOLORKEY unused2; - DDCOLORKEY unused3; - DDPIXELFORMAT ddpfPixelFormat; - DDSCAPS2 ddsCaps; - uint32_t dwUnused1; -}; - -const uint32_t DDSD_CAPS = 0x00000001; -const uint32_t DDSD_HEIGHT = 0x00000002; -const uint32_t DDSD_WIDTH = 0x00000004; -const uint32_t DDSD_PITCH = 0x00000008; - -const uint32_t DDSD_BACKBUFFERCOUNT = 0x00000020; -const uint32_t DDSD_ZBUFFERBITDEPTH = 0x00000040; -const uint32_t DDSD_ALPHABITDEPTH = 0x00000080; - -const uint32_t DDSD_LPSURFACE = 0x00000800; - -const uint32_t DDSD_PIXELFORMAT = 0x00001000; -const uint32_t DDSD_CKDESTOVERLAY = 0x00002000; -const uint32_t DDSD_CKDESTBLT = 0x00004000; -const uint32_t DDSD_CKSRCOVERLAY = 0x00008000; - -const uint32_t DDSD_CKSRCBLT = 0x00010000; -const uint32_t DDSD_MIPMAPCOUNT = 0x00020000; -const uint32_t DDSD_REFRESHRATE = 0x00040000; -const uint32_t DDSD_LINEARSIZE = 0x00080000; - -const uint32_t DDSD_TEXTURESTAGE = 0x00100000; -const uint32_t DDSD_FVF = 0x00200000; -const uint32_t DDSD_SRCVBHANDLE = 0x00400000; -const uint32_t DDSD_DEPTH = 0x00800000; - -const uint32_t DDSD_ALL = 0x00fff9ee; - -const uint32_t DDPF_ALPHAPIXELS = 0x00000001; -const uint32_t DDPF_ALPHA = 0x00000002; -const uint32_t DDPF_FOURCC = 0x00000004; -const uint32_t DDPF_PALETTEINDEXED8 = 0x00000020; -const uint32_t DDPF_RGB = 0x00000040; -const uint32_t DDPF_LUMINANCE = 0x00020000; - -const uint32_t DDSCAPS_COMPLEX = 0x00000008; -const uint32_t DDSCAPS_TEXTURE = 0x00001000; -const uint32_t DDSCAPS_MIPMAP = 0x00400000; - -const uint32_t DDSCAPS2_CUBEMAP = 0x00000200; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEX = 0x00000400; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEX = 0x00000800; - -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEY = 0x00001000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEY = 0x00002000; -const uint32_t DDSCAPS2_CUBEMAP_POSITIVEZ = 0x00004000; -const uint32_t DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x00008000; - -const uint32_t DDSCAPS2_VOLUME = 0x00200000; - -typedef enum DXGI_FORMAT -{ - DXGI_FORMAT_UNKNOWN = 0, - DXGI_FORMAT_R32G32B32A32_TYPELESS = 1, - DXGI_FORMAT_R32G32B32A32_FLOAT = 2, - DXGI_FORMAT_R32G32B32A32_UINT = 3, - DXGI_FORMAT_R32G32B32A32_SINT = 4, - DXGI_FORMAT_R32G32B32_TYPELESS = 5, - DXGI_FORMAT_R32G32B32_FLOAT = 6, - DXGI_FORMAT_R32G32B32_UINT = 7, - DXGI_FORMAT_R32G32B32_SINT = 8, - DXGI_FORMAT_R16G16B16A16_TYPELESS = 9, - DXGI_FORMAT_R16G16B16A16_FLOAT = 10, - DXGI_FORMAT_R16G16B16A16_UNORM = 11, - DXGI_FORMAT_R16G16B16A16_UINT = 12, - DXGI_FORMAT_R16G16B16A16_SNORM = 13, - DXGI_FORMAT_R16G16B16A16_SINT = 14, - DXGI_FORMAT_R32G32_TYPELESS = 15, - DXGI_FORMAT_R32G32_FLOAT = 16, - DXGI_FORMAT_R32G32_UINT = 17, - DXGI_FORMAT_R32G32_SINT = 18, - DXGI_FORMAT_R32G8X24_TYPELESS = 19, - DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20, - DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21, - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22, - DXGI_FORMAT_R10G10B10A2_TYPELESS = 23, - DXGI_FORMAT_R10G10B10A2_UNORM = 24, - DXGI_FORMAT_R10G10B10A2_UINT = 25, - DXGI_FORMAT_R11G11B10_FLOAT = 26, - DXGI_FORMAT_R8G8B8A8_TYPELESS = 27, - DXGI_FORMAT_R8G8B8A8_UNORM = 28, - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29, - DXGI_FORMAT_R8G8B8A8_UINT = 30, - DXGI_FORMAT_R8G8B8A8_SNORM = 31, - DXGI_FORMAT_R8G8B8A8_SINT = 32, - DXGI_FORMAT_R16G16_TYPELESS = 33, - DXGI_FORMAT_R16G16_FLOAT = 34, - DXGI_FORMAT_R16G16_UNORM = 35, - DXGI_FORMAT_R16G16_UINT = 36, - DXGI_FORMAT_R16G16_SNORM = 37, - DXGI_FORMAT_R16G16_SINT = 38, - DXGI_FORMAT_R32_TYPELESS = 39, - DXGI_FORMAT_D32_FLOAT = 40, - DXGI_FORMAT_R32_FLOAT = 41, - DXGI_FORMAT_R32_UINT = 42, - DXGI_FORMAT_R32_SINT = 43, - DXGI_FORMAT_R24G8_TYPELESS = 44, - DXGI_FORMAT_D24_UNORM_S8_UINT = 45, - DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46, - DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47, - DXGI_FORMAT_R8G8_TYPELESS = 48, - DXGI_FORMAT_R8G8_UNORM = 49, - DXGI_FORMAT_R8G8_UINT = 50, - DXGI_FORMAT_R8G8_SNORM = 51, - DXGI_FORMAT_R8G8_SINT = 52, - DXGI_FORMAT_R16_TYPELESS = 53, - DXGI_FORMAT_R16_FLOAT = 54, - DXGI_FORMAT_D16_UNORM = 55, - DXGI_FORMAT_R16_UNORM = 56, - DXGI_FORMAT_R16_UINT = 57, - DXGI_FORMAT_R16_SNORM = 58, - DXGI_FORMAT_R16_SINT = 59, - DXGI_FORMAT_R8_TYPELESS = 60, - DXGI_FORMAT_R8_UNORM = 61, - DXGI_FORMAT_R8_UINT = 62, - DXGI_FORMAT_R8_SNORM = 63, - DXGI_FORMAT_R8_SINT = 64, - DXGI_FORMAT_A8_UNORM = 65, - DXGI_FORMAT_R1_UNORM = 66, - DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67, - DXGI_FORMAT_R8G8_B8G8_UNORM = 68, - DXGI_FORMAT_G8R8_G8B8_UNORM = 69, - DXGI_FORMAT_BC1_TYPELESS = 70, - DXGI_FORMAT_BC1_UNORM = 71, - DXGI_FORMAT_BC1_UNORM_SRGB = 72, - DXGI_FORMAT_BC2_TYPELESS = 73, - DXGI_FORMAT_BC2_UNORM = 74, - DXGI_FORMAT_BC2_UNORM_SRGB = 75, - DXGI_FORMAT_BC3_TYPELESS = 76, - DXGI_FORMAT_BC3_UNORM = 77, - DXGI_FORMAT_BC3_UNORM_SRGB = 78, - DXGI_FORMAT_BC4_TYPELESS = 79, - DXGI_FORMAT_BC4_UNORM = 80, - DXGI_FORMAT_BC4_SNORM = 81, - DXGI_FORMAT_BC5_TYPELESS = 82, - DXGI_FORMAT_BC5_UNORM = 83, - DXGI_FORMAT_BC5_SNORM = 84, - DXGI_FORMAT_B5G6R5_UNORM = 85, - DXGI_FORMAT_B5G5R5A1_UNORM = 86, - DXGI_FORMAT_B8G8R8A8_UNORM = 87, - DXGI_FORMAT_B8G8R8X8_UNORM = 88, - DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89, - DXGI_FORMAT_B8G8R8A8_TYPELESS = 90, - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91, - DXGI_FORMAT_B8G8R8X8_TYPELESS = 92, - DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93, - DXGI_FORMAT_BC6H_TYPELESS = 94, - DXGI_FORMAT_BC6H_UF16 = 95, - DXGI_FORMAT_BC6H_SF16 = 96, - DXGI_FORMAT_BC7_TYPELESS = 97, - DXGI_FORMAT_BC7_UNORM = 98, - DXGI_FORMAT_BC7_UNORM_SRGB = 99, - DXGI_FORMAT_AYUV = 100, - DXGI_FORMAT_Y410 = 101, - DXGI_FORMAT_Y416 = 102, - DXGI_FORMAT_NV12 = 103, - DXGI_FORMAT_P010 = 104, - DXGI_FORMAT_P016 = 105, - DXGI_FORMAT_420_OPAQUE = 106, - DXGI_FORMAT_YUY2 = 107, - DXGI_FORMAT_Y210 = 108, - DXGI_FORMAT_Y216 = 109, - DXGI_FORMAT_NV11 = 110, - DXGI_FORMAT_AI44 = 111, - DXGI_FORMAT_IA44 = 112, - DXGI_FORMAT_P8 = 113, - DXGI_FORMAT_A8P8 = 114, - DXGI_FORMAT_B4G4R4A4_UNORM = 115, - DXGI_FORMAT_P208 = 130, - DXGI_FORMAT_V208 = 131, - DXGI_FORMAT_V408 = 132, - DXGI_FORMAT_FORCE_UINT = 0xffffffff -} DXGI_FORMAT; - -enum D3D10_RESOURCE_DIMENSION -{ - D3D10_RESOURCE_DIMENSION_UNKNOWN = 0, - D3D10_RESOURCE_DIMENSION_BUFFER = 1, - D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2, - D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3, - D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4 -}; - -struct DDS_HEADER_DXT10 -{ - DXGI_FORMAT dxgiFormat; - D3D10_RESOURCE_DIMENSION resourceDimension; - uint32_t miscFlag; - uint32_t arraySize; - uint32_t miscFlags2; -}; - diff --git a/external/bc7enc/lodepng.cpp b/external/bc7enc/lodepng.cpp deleted file mode 100644 index 742766f0..00000000 --- a/external/bc7enc/lodepng.cpp +++ /dev/null @@ -1,6232 +0,0 @@ -/* -LodePNG version 20161127 - -Copyright (c) 2005-2016 Lode Vandevenne - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ - -/* -The manual and changelog are in the header file "lodepng.h" -Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C. -*/ - -#include "lodepng.h" - -#include -#include -#include - -#if defined(_MSC_VER) && (_MSC_VER >= 1310) /*Visual Studio: A few warning types are not desired here.*/ -#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/ -#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/ -#endif /*_MSC_VER */ - -const char* LODEPNG_VERSION_STRING = "20161127"; - -/* -This source file is built up in the following large parts. The code sections -with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way. --Tools for C and common code for PNG and Zlib --C Code for Zlib (huffman, deflate, ...) --C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...) --The C++ wrapper around all of the above -*/ - -/*The malloc, realloc and free functions defined here with "lodepng_" in front -of the name, so that you can easily change them to others related to your -platform if needed. Everything else in the code calls these. Pass --DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out -#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and -define them in your own project's source files without needing to change -lodepng source code. Don't forget to remove "static" if you copypaste them -from here.*/ - -#ifdef LODEPNG_COMPILE_ALLOCATORS -static void* lodepng_malloc(size_t size) -{ - return malloc(size); -} - -static void* lodepng_realloc(void* ptr, size_t new_size) -{ - return realloc(ptr, new_size); -} - -static void lodepng_free(void* ptr) -{ - free(ptr); -} -#else /*LODEPNG_COMPILE_ALLOCATORS*/ -void* lodepng_malloc(size_t size); -void* lodepng_realloc(void* ptr, size_t new_size); -void lodepng_free(void* ptr); -#endif /*LODEPNG_COMPILE_ALLOCATORS*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* // Tools for C, and common code for PNG and Zlib. // */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/* -Often in case of an error a value is assigned to a variable and then it breaks -out of a loop (to go to the cleanup phase of a function). This macro does that. -It makes the error handling code shorter and more readable. - -Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83); -*/ -#define CERROR_BREAK(errorvar, code)\ -{\ - errorvar = code;\ - break;\ -} - -/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/ -#define ERROR_BREAK(code) CERROR_BREAK(error, code) - -/*Set error var to the error code, and return it.*/ -#define CERROR_RETURN_ERROR(errorvar, code)\ -{\ - errorvar = code;\ - return code;\ -} - -/*Try the code, if it returns error, also return the error.*/ -#define CERROR_TRY_RETURN(call)\ -{\ - unsigned error = call;\ - if(error) return error;\ -} - -/*Set error var to the error code, and return from the void function.*/ -#define CERROR_RETURN(errorvar, code)\ -{\ - errorvar = code;\ - return;\ -} - -/* -About uivector, ucvector and string: --All of them wrap dynamic arrays or text strings in a similar way. --LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version. --The string tools are made to avoid problems with compilers that declare things like strncat as deprecated. --They're not used in the interface, only internally in this file as static functions. --As with many other structs in this file, the init and cleanup functions serve as ctor and dtor. -*/ - -#ifdef LODEPNG_COMPILE_ZLIB -/*dynamic vector of unsigned ints*/ -typedef struct uivector -{ - unsigned* data; - size_t size; /*size in number of unsigned longs*/ - size_t allocsize; /*allocated size in bytes*/ -} uivector; - -static void uivector_cleanup(void* p) -{ - ((uivector*)p)->size = ((uivector*)p)->allocsize = 0; - lodepng_free(((uivector*)p)->data); - ((uivector*)p)->data = NULL; -} - -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned uivector_reserve(uivector* p, size_t allocsize) -{ - if (allocsize > p->allocsize) - { - size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); - void* data = lodepng_realloc(p->data, newsize); - if (data) - { - p->allocsize = newsize; - p->data = (unsigned*)data; - } - else return 0; /*error: not enough memory*/ - } - return 1; -} - -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned uivector_resize(uivector* p, size_t size) -{ - if (!uivector_reserve(p, size * sizeof(unsigned))) return 0; - p->size = size; - return 1; /*success*/ -} - -/*resize and give all new elements the value*/ -static unsigned uivector_resizev(uivector* p, size_t size, unsigned value) -{ - size_t oldsize = p->size, i; - if (!uivector_resize(p, size)) return 0; - for (i = oldsize; i < size; ++i) p->data[i] = value; - return 1; -} - -static void uivector_init(uivector* p) -{ - p->data = NULL; - p->size = p->allocsize = 0; -} - -#ifdef LODEPNG_COMPILE_ENCODER -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned uivector_push_back(uivector* p, unsigned c) -{ - if (!uivector_resize(p, p->size + 1)) return 0; - p->data[p->size - 1] = c; - return 1; -} -#endif /*LODEPNG_COMPILE_ENCODER*/ -#endif /*LODEPNG_COMPILE_ZLIB*/ - -/* /////////////////////////////////////////////////////////////////////////// */ - -/*dynamic vector of unsigned chars*/ -typedef struct ucvector -{ - unsigned char* data; - size_t size; /*used size*/ - size_t allocsize; /*allocated size*/ -} ucvector; - -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned ucvector_reserve(ucvector* p, size_t allocsize) -{ - if (allocsize > p->allocsize) - { - size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); - void* data = lodepng_realloc(p->data, newsize); - if (data) - { - p->allocsize = newsize; - p->data = (unsigned char*)data; - } - else return 0; /*error: not enough memory*/ - } - return 1; -} - -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned ucvector_resize(ucvector* p, size_t size) -{ - if (!ucvector_reserve(p, size * sizeof(unsigned char))) return 0; - p->size = size; - return 1; /*success*/ -} - -#ifdef LODEPNG_COMPILE_PNG - -static void ucvector_cleanup(void* p) -{ - ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0; - lodepng_free(((ucvector*)p)->data); - ((ucvector*)p)->data = NULL; -} - -static void ucvector_init(ucvector* p) -{ - p->data = NULL; - p->size = p->allocsize = 0; -} -#endif /*LODEPNG_COMPILE_PNG*/ - -#ifdef LODEPNG_COMPILE_ZLIB -/*you can both convert from vector to buffer&size and vica versa. If you use -init_buffer to take over a buffer and size, it is not needed to use cleanup*/ -static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size) -{ - p->data = buffer; - p->allocsize = p->size = size; -} -#endif /*LODEPNG_COMPILE_ZLIB*/ - -#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER) -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned ucvector_push_back(ucvector* p, unsigned char c) -{ - if (!ucvector_resize(p, p->size + 1)) return 0; - p->data[p->size - 1] = c; - return 1; -} -#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ - - -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_PNG -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -/*returns 1 if success, 0 if failure ==> nothing done*/ -static unsigned string_resize(char** out, size_t size) -{ - char* data = (char*)lodepng_realloc(*out, size + 1); - if (data) - { - data[size] = 0; /*null termination char*/ - *out = data; - } - return data != 0; -} - -/*init a {char*, size_t} pair for use as string*/ -static void string_init(char** out) -{ - *out = NULL; - string_resize(out, 0); -} - -/*free the above pair again*/ -static void string_cleanup(char** out) -{ - lodepng_free(*out); - *out = NULL; -} - -static void string_set(char** out, const char* in) -{ - size_t insize = strlen(in), i; - if (string_resize(out, insize)) - { - for (i = 0; i != insize; ++i) - { - (*out)[i] = in[i]; - } - } -} -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -#endif /*LODEPNG_COMPILE_PNG*/ - -/* ////////////////////////////////////////////////////////////////////////// */ - -unsigned lodepng_read32bitInt(const unsigned char* buffer) -{ - return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]); -} - -#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER) -/*buffer must have at least 4 allocated bytes available*/ -static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) -{ - buffer[0] = (unsigned char)((value >> 24) & 0xff); - buffer[1] = (unsigned char)((value >> 16) & 0xff); - buffer[2] = (unsigned char)((value >> 8) & 0xff); - buffer[3] = (unsigned char)((value) & 0xff); -} -#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ - -#ifdef LODEPNG_COMPILE_ENCODER -static void lodepng_add32bitInt(ucvector* buffer, unsigned value) -{ - ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/ - lodepng_set32bitInt(&buffer->data[buffer->size - 4], value); -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / File IO / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_DISK - -/* returns negative value on error. This should be pure C compatible, so no fstat. */ -static long lodepng_filesize(const char* filename) -{ - FILE* file; - long size; - file = fopen(filename, "rb"); - if (!file) return -1; - - if (fseek(file, 0, SEEK_END) != 0) - { - fclose(file); - return -1; - } - - size = ftell(file); - /* It may give LONG_MAX as directory size, this is invalid for us. */ - if (size == LONG_MAX) size = -1; - - fclose(file); - return size; -} - -/* load file into buffer that already has the correct allocated size. Returns error code.*/ -static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename) -{ - FILE* file; - size_t readsize; - file = fopen(filename, "rb"); - if (!file) return 78; - - readsize = fread(out, 1, size, file); - fclose(file); - - if (readsize != size) return 78; - return 0; -} - -unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename) -{ - long size = lodepng_filesize(filename); - if (size < 0) return 78; - *outsize = (size_t)size; - - *out = (unsigned char*)lodepng_malloc((size_t)size); - if (!(*out) && size > 0) return 83; /*the above malloc failed*/ - - return lodepng_buffer_file(*out, (size_t)size, filename); -} - -/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ -unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename) -{ - FILE* file; - file = fopen(filename, "wb"); - if (!file) return 79; - fwrite((char*)buffer, 1, buffersize, file); - fclose(file); - return 0; -} - -#endif /*LODEPNG_COMPILE_DISK*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* // End of common code and tools. Begin of Zlib related code. // */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_ZLIB -#ifdef LODEPNG_COMPILE_ENCODER -/*TODO: this ignores potential out of memory errors*/ -#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\ -{\ - /*add a new byte at the end*/\ - if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\ - /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\ - (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\ - ++(*bitpointer);\ -} - -static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) -{ - size_t i; - for (i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1)); -} - -static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) -{ - size_t i; - for (i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1)); -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#ifdef LODEPNG_COMPILE_DECODER - -#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1) - -static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream) -{ - unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream)); - ++(*bitpointer); - return result; -} - -static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) -{ - unsigned result = 0, i; - for (i = 0; i != nbits; ++i) - { - result += ((unsigned)READBIT(*bitpointer, bitstream)) << i; - ++(*bitpointer); - } - return result; -} -#endif /*LODEPNG_COMPILE_DECODER*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Deflate - Huffman / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#define FIRST_LENGTH_CODE_INDEX 257 -#define LAST_LENGTH_CODE_INDEX 285 -/*256 literals, the end code, some length codes, and 2 unused codes*/ -#define NUM_DEFLATE_CODE_SYMBOLS 288 -/*the distance codes have their own symbols, 30 used, 2 unused*/ -#define NUM_DISTANCE_SYMBOLS 32 -/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/ -#define NUM_CODE_LENGTH_CODES 19 - -/*the base lengths represented by codes 257-285*/ -static const unsigned LENGTHBASE[29] -= { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, - 67, 83, 99, 115, 131, 163, 195, 227, 258 }; - -/*the extra bits used by codes 257-285 (added to base length)*/ -static const unsigned LENGTHEXTRA[29] -= { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, - 4, 4, 4, 4, 5, 5, 5, 5, 0 }; - -/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/ -static const unsigned DISTANCEBASE[30] -= { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, - 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 }; - -/*the extra bits of backwards distances (added to base)*/ -static const unsigned DISTANCEEXTRA[30] -= { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, - 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; - -/*the order in which "code length alphabet code lengths" are stored, out of this -the huffman tree of the dynamic huffman tree lengths is generated*/ -static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES] -= { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; - -/* ////////////////////////////////////////////////////////////////////////// */ - -/* -Huffman tree struct, containing multiple representations of the tree -*/ -typedef struct HuffmanTree -{ - unsigned* tree2d; - unsigned* tree1d; - unsigned* lengths; /*the lengths of the codes of the 1d-tree*/ - unsigned maxbitlen; /*maximum number of bits a single code can get*/ - unsigned numcodes; /*number of symbols in the alphabet = number of codes*/ -} HuffmanTree; - -/*function used for debug purposes to draw the tree in ascii art with C++*/ -/* -static void HuffmanTree_draw(HuffmanTree* tree) -{ - std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl; - for(size_t i = 0; i != tree->tree1d.size; ++i) - { - if(tree->lengths.data[i]) - std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl; - } - std::cout << std::endl; -}*/ - -static void HuffmanTree_init(HuffmanTree* tree) -{ - tree->tree2d = 0; - tree->tree1d = 0; - tree->lengths = 0; -} - -static void HuffmanTree_cleanup(HuffmanTree* tree) -{ - lodepng_free(tree->tree2d); - lodepng_free(tree->tree1d); - lodepng_free(tree->lengths); -} - -/*the tree representation used by the decoder. return value is error*/ -static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) -{ - unsigned nodefilled = 0; /*up to which node it is filled*/ - unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/ - unsigned n, i; - - tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned)); - if (!tree->tree2d) return 83; /*alloc fail*/ - - /* - convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means - uninited, a value >= numcodes is an address to another bit, a value < numcodes - is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as - many columns as codes - 1. - A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes. - Here, the internal nodes are stored (what their 0 and 1 option point to). - There is only memory for such good tree currently, if there are more nodes - (due to too long length codes), error 55 will happen - */ - for (n = 0; n < tree->numcodes * 2; ++n) - { - tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/ - } - - for (n = 0; n < tree->numcodes; ++n) /*the codes*/ - { - for (i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/ - { - unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1); - /*oversubscribed, see comment in lodepng_error_text*/ - if (treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55; - if (tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/ - { - if (i + 1 == tree->lengths[n]) /*last bit*/ - { - tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/ - treepos = 0; - } - else - { - /*put address of the next step in here, first that address has to be found of course - (it's just nodefilled + 1)...*/ - ++nodefilled; - /*addresses encoded with numcodes added to it*/ - tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes; - treepos = nodefilled; - } - } - else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes; - } - } - - for (n = 0; n < tree->numcodes * 2; ++n) - { - if (tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/ - } - - return 0; -} - -/* -Second step for the ...makeFromLengths and ...makeFromFrequencies functions. -numcodes, lengths and maxbitlen must already be filled in correctly. return -value is error. -*/ -static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) -{ - uivector blcount; - uivector nextcode; - unsigned error = 0; - unsigned bits, n; - - uivector_init(&blcount); - uivector_init(&nextcode); - - tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned)); - if (!tree->tree1d) error = 83; /*alloc fail*/ - - if (!uivector_resizev(&blcount, tree->maxbitlen + 1, 0) - || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0)) - error = 83; /*alloc fail*/ - - if (!error) - { - /*step 1: count number of instances of each code length*/ - for (bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]]; - /*step 2: generate the nextcode values*/ - for (bits = 1; bits <= tree->maxbitlen; ++bits) - { - nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1; - } - /*step 3: generate all the codes*/ - for (n = 0; n != tree->numcodes; ++n) - { - if (tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++; - } - } - - uivector_cleanup(&blcount); - uivector_cleanup(&nextcode); - - if (!error) return HuffmanTree_make2DTree(tree); - else return error; -} - -/* -given the code lengths (as stored in the PNG file), generate the tree as defined -by Deflate. maxbitlen is the maximum bits that a code in the tree can have. -return value is error. -*/ -static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen, - size_t numcodes, unsigned maxbitlen) -{ - unsigned i; - tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned)); - if (!tree->lengths) return 83; /*alloc fail*/ - for (i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i]; - tree->numcodes = (unsigned)numcodes; /*number of symbols*/ - tree->maxbitlen = maxbitlen; - return HuffmanTree_makeFromLengths2(tree); -} - -#ifdef LODEPNG_COMPILE_ENCODER - -/*BPM: Boundary Package Merge, see "A Fast and Space-Economical Algorithm for Length-Limited Coding", -Jyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/ - -/*chain node for boundary package merge*/ -typedef struct BPMNode -{ - int weight; /*the sum of all weights in this chain*/ - unsigned index; /*index of this leaf node (called "count" in the paper)*/ - struct BPMNode* tail; /*the next nodes in this chain (null if last)*/ - int in_use; -} BPMNode; - -/*lists of chains*/ -typedef struct BPMLists -{ - /*memory pool*/ - unsigned memsize; - BPMNode* memory; - unsigned numfree; - unsigned nextfree; - BPMNode** freelist; - /*two heads of lookahead chains per list*/ - unsigned listsize; - BPMNode** chains0; - BPMNode** chains1; -} BPMLists; - -/*creates a new chain node with the given parameters, from the memory in the lists */ -static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail) -{ - unsigned i; - BPMNode* result; - - /*memory full, so garbage collect*/ - if (lists->nextfree >= lists->numfree) - { - /*mark only those that are in use*/ - for (i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0; - for (i = 0; i != lists->listsize; ++i) - { - BPMNode* node; - for (node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1; - for (node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1; - } - /*collect those that are free*/ - lists->numfree = 0; - for (i = 0; i != lists->memsize; ++i) - { - if (!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i]; - } - lists->nextfree = 0; - } - - result = lists->freelist[lists->nextfree++]; - result->weight = weight; - result->index = index; - result->tail = tail; - return result; -} - -/*sort the leaves with stable mergesort*/ -static void bpmnode_sort(BPMNode* leaves, size_t num) -{ - BPMNode* mem = (BPMNode*)lodepng_malloc(sizeof(*leaves) * num); - size_t width, counter = 0; - for (width = 1; width < num; width *= 2) - { - BPMNode* a = (counter & 1) ? mem : leaves; - BPMNode* b = (counter & 1) ? leaves : mem; - size_t p; - for (p = 0; p < num; p += 2 * width) - { - size_t q = (p + width > num) ? num : (p + width); - size_t r = (p + 2 * width > num) ? num : (p + 2 * width); - size_t i = p, j = q, k; - for (k = p; k < r; k++) - { - if (i < q && (j >= r || a[i].weight <= a[j].weight)) b[k] = a[i++]; - else b[k] = a[j++]; - } - } - counter++; - } - if (counter & 1) memcpy(leaves, mem, sizeof(*leaves) * num); - lodepng_free(mem); -} - -/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/ -static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num) -{ - unsigned lastindex = lists->chains1[c]->index; - - if (c == 0) - { - if (lastindex >= numpresent) return; - lists->chains0[c] = lists->chains1[c]; - lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0); - } - else - { - /*sum of the weights of the head nodes of the previous lookahead chains.*/ - int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight; - lists->chains0[c] = lists->chains1[c]; - if (lastindex < numpresent && sum > leaves[lastindex].weight) - { - lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail); - return; - } - lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]); - /*in the end we are only interested in the chain of the last list, so no - need to recurse if we're at the last one (this gives measurable speedup)*/ - if (num + 1 < (int)(2 * numpresent - 2)) - { - boundaryPM(lists, leaves, numpresent, c - 1, num); - boundaryPM(lists, leaves, numpresent, c - 1, num); - } - } -} - -unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, - size_t numcodes, unsigned maxbitlen) -{ - unsigned error = 0; - unsigned i; - size_t numpresent = 0; /*number of symbols with non-zero frequency*/ - BPMNode* leaves; /*the symbols, only those with > 0 frequency*/ - - if (numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/ - if ((1u << maxbitlen) < numcodes) return 80; /*error: represent all symbols*/ - - leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves)); - if (!leaves) return 83; /*alloc fail*/ - - for (i = 0; i != numcodes; ++i) - { - if (frequencies[i] > 0) - { - leaves[numpresent].weight = (int)frequencies[i]; - leaves[numpresent].index = i; - ++numpresent; - } - } - - for (i = 0; i != numcodes; ++i) lengths[i] = 0; - - /*ensure at least two present symbols. There should be at least one symbol - according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To - make these work as well ensure there are at least two symbols. The - Package-Merge code below also doesn't work correctly if there's only one - symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/ - if (numpresent == 0) - { - lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/ - } - else if (numpresent == 1) - { - lengths[leaves[0].index] = 1; - lengths[leaves[0].index == 0 ? 1 : 0] = 1; - } - else - { - BPMLists lists; - BPMNode* node; - - bpmnode_sort(leaves, numpresent); - - lists.listsize = maxbitlen; - lists.memsize = 2 * maxbitlen * (maxbitlen + 1); - lists.nextfree = 0; - lists.numfree = lists.memsize; - lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory)); - lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*)); - lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); - lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); - if (!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/ - - if (!error) - { - for (i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i]; - - bpmnode_create(&lists, leaves[0].weight, 1, 0); - bpmnode_create(&lists, leaves[1].weight, 2, 0); - - for (i = 0; i != lists.listsize; ++i) - { - lists.chains0[i] = &lists.memory[0]; - lists.chains1[i] = &lists.memory[1]; - } - - /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/ - for (i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i); - - for (node = lists.chains1[maxbitlen - 1]; node; node = node->tail) - { - for (i = 0; i != node->index; ++i) ++lengths[leaves[i].index]; - } - } - - lodepng_free(lists.memory); - lodepng_free(lists.freelist); - lodepng_free(lists.chains0); - lodepng_free(lists.chains1); - } - - lodepng_free(leaves); - return error; -} - -/*Create the Huffman tree given the symbol frequencies*/ -static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, - size_t mincodes, size_t numcodes, unsigned maxbitlen) -{ - unsigned error = 0; - while (!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/ - tree->maxbitlen = maxbitlen; - tree->numcodes = (unsigned)numcodes; /*number of symbols*/ - tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned)); - if (!tree->lengths) return 83; /*alloc fail*/ - /*initialize all lengths to 0*/ - memset(tree->lengths, 0, numcodes * sizeof(unsigned)); - - error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen); - if (!error) error = HuffmanTree_makeFromLengths2(tree); - return error; -} - -static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) -{ - return tree->tree1d[index]; -} - -static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index) -{ - return tree->lengths[index]; -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/ -static unsigned generateFixedLitLenTree(HuffmanTree* tree) -{ - unsigned i, error = 0; - unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); - if (!bitlen) return 83; /*alloc fail*/ - - /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/ - for (i = 0; i <= 143; ++i) bitlen[i] = 8; - for (i = 144; i <= 255; ++i) bitlen[i] = 9; - for (i = 256; i <= 279; ++i) bitlen[i] = 7; - for (i = 280; i <= 287; ++i) bitlen[i] = 8; - - error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15); - - lodepng_free(bitlen); - return error; -} - -/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/ -static unsigned generateFixedDistanceTree(HuffmanTree* tree) -{ - unsigned i, error = 0; - unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); - if (!bitlen) return 83; /*alloc fail*/ - - /*there are 32 distance codes, but 30-31 are unused*/ - for (i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5; - error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15); - - lodepng_free(bitlen); - return error; -} - -#ifdef LODEPNG_COMPILE_DECODER - -/* -returns the code, or (unsigned)(-1) if error happened -inbitlength is the length of the complete buffer, in bits (so its byte length times 8) -*/ -static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp, - const HuffmanTree* codetree, size_t inbitlength) -{ - unsigned treepos = 0, ct; - for (;;) - { - if (*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/ - /* - decode the symbol from the tree. The "readBitFromStream" code is inlined in - the expression below because this is the biggest bottleneck while decoding - */ - ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)]; - ++(*bp); - if (ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/ - else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/ - - if (treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/ - } -} -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_DECODER - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Inflator (Decompressor) / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/ -static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d) -{ - /*TODO: check for out of memory errors*/ - generateFixedLitLenTree(tree_ll); - generateFixedDistanceTree(tree_d); -} - -/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/ -static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d, - const unsigned char* in, size_t* bp, size_t inlength) -{ - /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/ - unsigned error = 0; - unsigned n, HLIT, HDIST, HCLEN, i; - size_t inbitlength = inlength * 8; - - /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/ - unsigned* bitlen_ll = 0; /*lit,len code lengths*/ - unsigned* bitlen_d = 0; /*dist code lengths*/ - /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/ - unsigned* bitlen_cl = 0; - HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/ - - if ((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/ - - /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/ - HLIT = readBitsFromStream(bp, in, 5) + 257; - /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/ - HDIST = readBitsFromStream(bp, in, 5) + 1; - /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/ - HCLEN = readBitsFromStream(bp, in, 4) + 4; - - if ((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/ - - HuffmanTree_init(&tree_cl); - - while (!error) - { - /*read the code length codes out of 3 * (amount of code length codes) bits*/ - - bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned)); - if (!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/); - - for (i = 0; i != NUM_CODE_LENGTH_CODES; ++i) - { - if (i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3); - else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/ - } - - error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7); - if (error) break; - - /*now we can use this tree to read the lengths for the tree that this function will return*/ - bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); - bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); - if (!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/); - for (i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0; - for (i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0; - - /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/ - i = 0; - while (i < HLIT + HDIST) - { - unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength); - if (code <= 15) /*a length code*/ - { - if (i < HLIT) bitlen_ll[i] = code; - else bitlen_d[i - HLIT] = code; - ++i; - } - else if (code == 16) /*repeat previous*/ - { - unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/ - unsigned value; /*set value to the previous code*/ - - if (i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/ - - if ((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ - replength += readBitsFromStream(bp, in, 2); - - if (i < HLIT + 1) value = bitlen_ll[i - 1]; - else value = bitlen_d[i - HLIT - 1]; - /*repeat this value in the next lengths*/ - for (n = 0; n < replength; ++n) - { - if (i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/ - if (i < HLIT) bitlen_ll[i] = value; - else bitlen_d[i - HLIT] = value; - ++i; - } - } - else if (code == 17) /*repeat "0" 3-10 times*/ - { - unsigned replength = 3; /*read in the bits that indicate repeat length*/ - if ((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ - replength += readBitsFromStream(bp, in, 3); - - /*repeat this value in the next lengths*/ - for (n = 0; n < replength; ++n) - { - if (i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/ - - if (i < HLIT) bitlen_ll[i] = 0; - else bitlen_d[i - HLIT] = 0; - ++i; - } - } - else if (code == 18) /*repeat "0" 11-138 times*/ - { - unsigned replength = 11; /*read in the bits that indicate repeat length*/ - if ((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ - replength += readBitsFromStream(bp, in, 7); - - /*repeat this value in the next lengths*/ - for (n = 0; n < replength; ++n) - { - if (i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/ - - if (i < HLIT) bitlen_ll[i] = 0; - else bitlen_d[i - HLIT] = 0; - ++i; - } - } - else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ - { - if (code == (unsigned)(-1)) - { - /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol - (10=no endcode, 11=wrong jump outside of tree)*/ - error = (*bp) > inbitlength ? 10 : 11; - } - else error = 16; /*unexisting code, this can never happen*/ - break; - } - } - if (error) break; - - if (bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/ - - /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/ - error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15); - if (error) break; - error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15); - - break; /*end of error-while*/ - } - - lodepng_free(bitlen_cl); - lodepng_free(bitlen_ll); - lodepng_free(bitlen_d); - HuffmanTree_cleanup(&tree_cl); - - return error; -} - -/*inflate a block with dynamic of fixed Huffman tree*/ -static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp, - size_t* pos, size_t inlength, unsigned btype) -{ - unsigned error = 0; - HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/ - HuffmanTree tree_d; /*the huffman tree for distance codes*/ - size_t inbitlength = inlength * 8; - - HuffmanTree_init(&tree_ll); - HuffmanTree_init(&tree_d); - - if (btype == 1) getTreeInflateFixed(&tree_ll, &tree_d); - else if (btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength); - - while (!error) /*decode all symbols until end reached, breaks at end code*/ - { - /*code_ll is literal, length or end code*/ - unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength); - if (code_ll <= 255) /*literal symbol*/ - { - /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/ - if (!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/); - out->data[*pos] = (unsigned char)code_ll; - ++(*pos); - } - else if (code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/ - { - unsigned code_d, distance; - unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/ - size_t start, forward, backward, length; - - /*part 1: get length base*/ - length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX]; - - /*part 2: get extra bits and add the value of that to length*/ - numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX]; - if ((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ - length += readBitsFromStream(bp, in, numextrabits_l); - - /*part 3: get distance code*/ - code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength); - if (code_d > 29) - { - if (code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ - { - /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol - (10=no endcode, 11=wrong jump outside of tree)*/ - error = (*bp) > inlength * 8 ? 10 : 11; - } - else error = 18; /*error: invalid distance code (30-31 are never used)*/ - break; - } - distance = DISTANCEBASE[code_d]; - - /*part 4: get extra bits from distance*/ - numextrabits_d = DISTANCEEXTRA[code_d]; - if ((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ - distance += readBitsFromStream(bp, in, numextrabits_d); - - /*part 5: fill in all the out[n] values based on the length and dist*/ - start = (*pos); - if (distance > start) ERROR_BREAK(52); /*too long backward distance*/ - backward = start - distance; - - if (!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/); - if (distance < length) { - for (forward = 0; forward < length; ++forward) - { - out->data[(*pos)++] = out->data[backward++]; - } - } - else { - memcpy(out->data + *pos, out->data + backward, length); - *pos += length; - } - } - else if (code_ll == 256) - { - break; /*end code, break the loop*/ - } - else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ - { - /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol - (10=no endcode, 11=wrong jump outside of tree)*/ - error = ((*bp) > inlength * 8) ? 10 : 11; - break; - } - } - - HuffmanTree_cleanup(&tree_ll); - HuffmanTree_cleanup(&tree_d); - - return error; -} - -static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength) -{ - size_t p; - unsigned LEN, NLEN, n, error = 0; - - /*go to first boundary of byte*/ - while (((*bp) & 0x7) != 0) ++(*bp); - p = (*bp) / 8; /*byte position*/ - - /*read LEN (2 bytes) and NLEN (2 bytes)*/ - if (p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/ - LEN = in[p] + 256u * in[p + 1]; p += 2; - NLEN = in[p] + 256u * in[p + 1]; p += 2; - - /*check if 16-bit NLEN is really the one's complement of LEN*/ - if (LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/ - - if (!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/ - - /*read the literal data: LEN bytes are now stored in the out buffer*/ - if (p + LEN > inlength) return 23; /*error: reading outside of in buffer*/ - for (n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++]; - - (*bp) = p * 8; - - return error; -} - -static unsigned lodepng_inflatev(ucvector* out, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings) -{ - /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/ - size_t bp = 0; - unsigned BFINAL = 0; - size_t pos = 0; /*byte position in the out buffer*/ - unsigned error = 0; - - (void)settings; - - while (!BFINAL) - { - unsigned BTYPE; - if (bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/ - BFINAL = readBitFromStream(&bp, in); - BTYPE = 1u * readBitFromStream(&bp, in); - BTYPE += 2u * readBitFromStream(&bp, in); - - if (BTYPE == 3) return 20; /*error: invalid BTYPE*/ - else if (BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/ - else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/ - - if (error) return error; - } - - return error; -} - -unsigned lodepng_inflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings) -{ - unsigned error; - ucvector v; - ucvector_init_buffer(&v, *out, *outsize); - error = lodepng_inflatev(&v, in, insize, settings); - *out = v.data; - *outsize = v.size; - return error; -} - -static unsigned inflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings) -{ - if (settings->custom_inflate) - { - return settings->custom_inflate(out, outsize, in, insize, settings); - } - else - { - return lodepng_inflate(out, outsize, in, insize, settings); - } -} - -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Deflator (Compressor) / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258; - -/*bitlen is the size in bits of the code*/ -static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen) -{ - addBitsToStreamReversed(bp, compressed, code, bitlen); -} - -/*search the index in the array, that has the largest value smaller than or equal to the given value, -given array must be sorted (if no value is smaller, it returns the size of the given array)*/ -static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value) -{ - /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/ - size_t left = 1; - size_t right = array_size - 1; - - while (left <= right) { - size_t mid = (left + right) >> 1; - if (array[mid] >= value) right = mid - 1; - else left = mid + 1; - } - if (left >= array_size || array[left] > value) left--; - return left; -} - -static void addLengthDistance(uivector* values, size_t length, size_t distance) -{ - /*values in encoded vector are those used by deflate: - 0-255: literal bytes - 256: end - 257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits) - 286-287: invalid*/ - - unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length); - unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]); - unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance); - unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]); - - uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX); - uivector_push_back(values, extra_length); - uivector_push_back(values, dist_code); - uivector_push_back(values, extra_distance); -} - -/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3 -bytes as input because 3 is the minimum match length for deflate*/ -static const unsigned HASH_NUM_VALUES = 65536; -static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/ - -typedef struct Hash -{ - int* head; /*hash value to head circular pos - can be outdated if went around window*/ - /*circular pos to prev circular pos*/ - unsigned short* chain; - int* val; /*circular pos to hash value*/ - - /*TODO: do this not only for zeros but for any repeated byte. However for PNG - it's always going to be the zeros that dominate, so not important for PNG*/ - int* headz; /*similar to head, but for chainz*/ - unsigned short* chainz; /*those with same amount of zeros*/ - unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/ -} Hash; - -static unsigned hash_init(Hash* hash, unsigned windowsize) -{ - unsigned i; - hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES); - hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize); - hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); - - hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); - hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1)); - hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); - - if (!hash->head || !hash->chain || !hash->val || !hash->headz || !hash->chainz || !hash->zeros) - { - return 83; /*alloc fail*/ - } - - /*initialize hash table*/ - for (i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1; - for (i = 0; i != windowsize; ++i) hash->val[i] = -1; - for (i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/ - - for (i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1; - for (i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/ - - return 0; -} - -static void hash_cleanup(Hash* hash) -{ - lodepng_free(hash->head); - lodepng_free(hash->val); - lodepng_free(hash->chain); - - lodepng_free(hash->zeros); - lodepng_free(hash->headz); - lodepng_free(hash->chainz); -} - - - -static unsigned getHash(const unsigned char* data, size_t size, size_t pos) -{ - unsigned result = 0; - if (pos + 2 < size) - { - /*A simple shift and xor hash is used. Since the data of PNGs is dominated - by zeroes due to the filters, a better hash does not have a significant - effect on speed in traversing the chain, and causes more time spend on - calculating the hash.*/ - result ^= (unsigned)(data[pos + 0] << 0u); - result ^= (unsigned)(data[pos + 1] << 4u); - result ^= (unsigned)(data[pos + 2] << 8u); - } - else { - size_t amount, i; - if (pos >= size) return 0; - amount = size - pos; - for (i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u)); - } - return result & HASH_BIT_MASK; -} - -static unsigned countZeros(const unsigned char* data, size_t size, size_t pos) -{ - const unsigned char* start = data + pos; - const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH; - if (end > data + size) end = data + size; - data = start; - while (data != end && *data == 0) ++data; - /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/ - return (unsigned)(data - start); -} - -/*wpos = pos & (windowsize - 1)*/ -static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, unsigned short numzeros) -{ - hash->val[wpos] = (int)hashval; - if (hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval]; - hash->head[hashval] = wpos; - - hash->zeros[wpos] = numzeros; - if (hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros]; - hash->headz[numzeros] = wpos; -} - -/* -LZ77-encode the data. Return value is error code. The input are raw bytes, the output -is in the form of unsigned integers with codes representing for example literal bytes, or -length/distance pairs. -It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a -sliding window (of windowsize) is used, and all past bytes in that window can be used as -the "dictionary". A brute force search through all possible distances would be slow, and -this hash technique is one out of several ways to speed this up. -*/ -static unsigned encodeLZ77(uivector* out, Hash* hash, - const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize, - unsigned minmatch, unsigned nicematch, unsigned lazymatching) -{ - size_t pos; - unsigned i, error = 0; - /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/ - unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8; - unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64; - - unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/ - unsigned numzeros = 0; - - unsigned offset; /*the offset represents the distance in LZ77 terminology*/ - unsigned length; - unsigned lazy = 0; - unsigned lazylength = 0, lazyoffset = 0; - unsigned hashval; - unsigned current_offset, current_length; - unsigned prev_offset; - const unsigned char *lastptr, *foreptr, *backptr; - unsigned hashpos; - - if (windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/ - if ((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/ - - if (nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH; - - for (pos = inpos; pos < insize; ++pos) - { - size_t wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/ - unsigned chainlength = 0; - - hashval = getHash(in, insize, pos); - - if (usezeros && hashval == 0) - { - if (numzeros == 0) numzeros = countZeros(in, insize, pos); - else if (pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; - } - else - { - numzeros = 0; - } - - updateHashChain(hash, wpos, hashval, numzeros); - - /*the length and offset found for the current position*/ - length = 0; - offset = 0; - - hashpos = hash->chain[wpos]; - - lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH]; - - /*search for the longest string*/ - prev_offset = 0; - for (;;) - { - if (chainlength++ >= maxchainlength) break; - current_offset = hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize; - - if (current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/ - prev_offset = current_offset; - if (current_offset > 0) - { - /*test the next characters*/ - foreptr = &in[pos]; - backptr = &in[pos - current_offset]; - - /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/ - if (numzeros >= 3) - { - unsigned skip = hash->zeros[hashpos]; - if (skip > numzeros) skip = numzeros; - backptr += skip; - foreptr += skip; - } - - while (foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/ - { - ++backptr; - ++foreptr; - } - current_length = (unsigned)(foreptr - &in[pos]); - - if (current_length > length) - { - length = current_length; /*the longest length*/ - offset = current_offset; /*the offset that is related to this longest length*/ - /*jump out once a length of max length is found (speed gain). This also jumps - out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/ - if (current_length >= nicematch) break; - } - } - - if (hashpos == hash->chain[hashpos]) break; - - if (numzeros >= 3 && length > numzeros) - { - hashpos = hash->chainz[hashpos]; - if (hash->zeros[hashpos] != numzeros) break; - } - else - { - hashpos = hash->chain[hashpos]; - /*outdated hash value, happens if particular value was not encountered in whole last window*/ - if (hash->val[hashpos] != (int)hashval) break; - } - } - - if (lazymatching) - { - if (!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH) - { - lazy = 1; - lazylength = length; - lazyoffset = offset; - continue; /*try the next byte*/ - } - if (lazy) - { - lazy = 0; - if (pos == 0) ERROR_BREAK(81); - if (length > lazylength + 1) - { - /*push the previous character as literal*/ - if (!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/); - } - else - { - length = lazylength; - offset = lazyoffset; - hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/ - hash->headz[numzeros] = -1; /*idem*/ - --pos; - } - } - } - if (length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/); - - /*encode it as length/distance pair or literal value*/ - if (length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ - { - if (!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); - } - else if (length < minmatch || (length == 3 && offset > 4096)) - { - /*compensate for the fact that longer offsets have more extra bits, a - length of only 3 may be not worth it then*/ - if (!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); - } - else - { - addLengthDistance(out, length, offset); - for (i = 1; i < length; ++i) - { - ++pos; - wpos = pos & (windowsize - 1); - hashval = getHash(in, insize, pos); - if (usezeros && hashval == 0) - { - if (numzeros == 0) numzeros = countZeros(in, insize, pos); - else if (pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; - } - else - { - numzeros = 0; - } - updateHashChain(hash, wpos, hashval, numzeros); - } - } - } /*end of the loop through each character of input*/ - - return error; -} - -/* /////////////////////////////////////////////////////////////////////////// */ - -static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize) -{ - /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte, - 2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/ - - size_t i, j, numdeflateblocks = (datasize + 65534) / 65535; - unsigned datapos = 0; - for (i = 0; i != numdeflateblocks; ++i) - { - unsigned BFINAL, BTYPE, LEN, NLEN; - unsigned char firstbyte; - - BFINAL = (i == numdeflateblocks - 1); - BTYPE = 0; - - firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1)); - ucvector_push_back(out, firstbyte); - - LEN = 65535; - if (datasize - datapos < 65535) LEN = (unsigned)datasize - datapos; - NLEN = 65535 - LEN; - - ucvector_push_back(out, (unsigned char)(LEN & 255)); - ucvector_push_back(out, (unsigned char)(LEN >> 8)); - ucvector_push_back(out, (unsigned char)(NLEN & 255)); - ucvector_push_back(out, (unsigned char)(NLEN >> 8)); - - /*Decompressed data*/ - for (j = 0; j < 65535 && datapos < datasize; ++j) - { - ucvector_push_back(out, data[datapos++]); - } - } - - return 0; -} - -/* -write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees. -tree_ll: the tree for lit and len codes. -tree_d: the tree for distance codes. -*/ -static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded, - const HuffmanTree* tree_ll, const HuffmanTree* tree_d) -{ - size_t i = 0; - for (i = 0; i != lz77_encoded->size; ++i) - { - unsigned val = lz77_encoded->data[i]; - addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val)); - if (val > 256) /*for a length code, 3 more things have to be added*/ - { - unsigned length_index = val - FIRST_LENGTH_CODE_INDEX; - unsigned n_length_extra_bits = LENGTHEXTRA[length_index]; - unsigned length_extra_bits = lz77_encoded->data[++i]; - - unsigned distance_code = lz77_encoded->data[++i]; - - unsigned distance_index = distance_code; - unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index]; - unsigned distance_extra_bits = lz77_encoded->data[++i]; - - addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits); - addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code), - HuffmanTree_getLength(tree_d, distance_code)); - addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits); - } - } -} - -/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/ -static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash, - const unsigned char* data, size_t datapos, size_t dataend, - const LodePNGCompressSettings* settings, unsigned final) -{ - unsigned error = 0; - - /* - A block is compressed as follows: The PNG data is lz77 encoded, resulting in - literal bytes and length/distance pairs. This is then huffman compressed with - two huffman trees. One huffman tree is used for the lit and len values ("ll"), - another huffman tree is used for the dist values ("d"). These two trees are - stored using their code lengths, and to compress even more these code lengths - are also run-length encoded and huffman compressed. This gives a huffman tree - of code lengths "cl". The code lenghts used to describe this third tree are - the code length code lengths ("clcl"). - */ - - /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/ - uivector lz77_encoded; - HuffmanTree tree_ll; /*tree for lit,len values*/ - HuffmanTree tree_d; /*tree for distance codes*/ - HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/ - uivector frequencies_ll; /*frequency of lit,len codes*/ - uivector frequencies_d; /*frequency of dist codes*/ - uivector frequencies_cl; /*frequency of code length codes*/ - uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/ - uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/ - /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl - (these are written as is in the file, it would be crazy to compress these using yet another huffman - tree that needs to be represented by yet another set of code lengths)*/ - uivector bitlen_cl; - size_t datasize = dataend - datapos; - - /* - Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies: - bitlen_lld is to tree_cl what data is to tree_ll and tree_d. - bitlen_lld_e is to bitlen_lld what lz77_encoded is to data. - bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded. - */ - - unsigned BFINAL = final; - size_t numcodes_ll, numcodes_d, i; - unsigned HLIT, HDIST, HCLEN; - - uivector_init(&lz77_encoded); - HuffmanTree_init(&tree_ll); - HuffmanTree_init(&tree_d); - HuffmanTree_init(&tree_cl); - uivector_init(&frequencies_ll); - uivector_init(&frequencies_d); - uivector_init(&frequencies_cl); - uivector_init(&bitlen_lld); - uivector_init(&bitlen_lld_e); - uivector_init(&bitlen_cl); - - /*This while loop never loops due to a break at the end, it is here to - allow breaking out of it to the cleanup phase on error conditions.*/ - while (!error) - { - if (settings->use_lz77) - { - error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, - settings->minmatch, settings->nicematch, settings->lazymatching); - if (error) break; - } - else - { - if (!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/); - for (i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/ - } - - if (!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/); - if (!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/); - - /*Count the frequencies of lit, len and dist codes*/ - for (i = 0; i != lz77_encoded.size; ++i) - { - unsigned symbol = lz77_encoded.data[i]; - ++frequencies_ll.data[symbol]; - if (symbol > 256) - { - unsigned dist = lz77_encoded.data[i + 2]; - ++frequencies_d.data[dist]; - i += 3; - } - } - frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/ - - /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/ - error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15); - if (error) break; - /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/ - error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15); - if (error) break; - - numcodes_ll = tree_ll.numcodes; if (numcodes_ll > 286) numcodes_ll = 286; - numcodes_d = tree_d.numcodes; if (numcodes_d > 30) numcodes_d = 30; - /*store the code lengths of both generated trees in bitlen_lld*/ - for (i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i)); - for (i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i)); - - /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times), - 17 (3-10 zeroes), 18 (11-138 zeroes)*/ - for (i = 0; i != (unsigned)bitlen_lld.size; ++i) - { - unsigned j = 0; /*amount of repititions*/ - while (i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j; - - if (bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/ - { - ++j; /*include the first zero*/ - if (j <= 10) /*repeat code 17 supports max 10 zeroes*/ - { - uivector_push_back(&bitlen_lld_e, 17); - uivector_push_back(&bitlen_lld_e, j - 3); - } - else /*repeat code 18 supports max 138 zeroes*/ - { - if (j > 138) j = 138; - uivector_push_back(&bitlen_lld_e, 18); - uivector_push_back(&bitlen_lld_e, j - 11); - } - i += (j - 1); - } - else if (j >= 3) /*repeat code for value other than zero*/ - { - size_t k; - unsigned num = j / 6, rest = j % 6; - uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); - for (k = 0; k < num; ++k) - { - uivector_push_back(&bitlen_lld_e, 16); - uivector_push_back(&bitlen_lld_e, 6 - 3); - } - if (rest >= 3) - { - uivector_push_back(&bitlen_lld_e, 16); - uivector_push_back(&bitlen_lld_e, rest - 3); - } - else j -= rest; - i += j; - } - else /*too short to benefit from repeat code*/ - { - uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); - } - } - - /*generate tree_cl, the huffmantree of huffmantrees*/ - - if (!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/); - for (i = 0; i != bitlen_lld_e.size; ++i) - { - ++frequencies_cl.data[bitlen_lld_e.data[i]]; - /*after a repeat code come the bits that specify the number of repetitions, - those don't need to be in the frequencies_cl calculation*/ - if (bitlen_lld_e.data[i] >= 16) ++i; - } - - error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data, - frequencies_cl.size, frequencies_cl.size, 7); - if (error) break; - - if (!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/); - for (i = 0; i != tree_cl.numcodes; ++i) - { - /*lenghts of code length tree is in the order as specified by deflate*/ - bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]); - } - while (bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4) - { - /*remove zeros at the end, but minimum size must be 4*/ - if (!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/); - } - if (error) break; - - /* - Write everything into the output - - After the BFINAL and BTYPE, the dynamic block consists out of the following: - - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN - - (HCLEN+4)*3 bits code lengths of code length alphabet - - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length - alphabet, + possible repetition codes 16, 17, 18) - - HDIST + 1 code lengths of distance alphabet (encoded using the code length - alphabet, + possible repetition codes 16, 17, 18) - - compressed data - - 256 (end code) - */ - - /*Write block type*/ - addBitToStream(bp, out, BFINAL); - addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/ - addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/ - - /*write the HLIT, HDIST and HCLEN values*/ - HLIT = (unsigned)(numcodes_ll - 257); - HDIST = (unsigned)(numcodes_d - 1); - HCLEN = (unsigned)bitlen_cl.size - 4; - /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/ - while (!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN; - addBitsToStream(bp, out, HLIT, 5); - addBitsToStream(bp, out, HDIST, 5); - addBitsToStream(bp, out, HCLEN, 4); - - /*write the code lenghts of the code length alphabet*/ - for (i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3); - - /*write the lenghts of the lit/len AND the dist alphabet*/ - for (i = 0; i != bitlen_lld_e.size; ++i) - { - addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]), - HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i])); - /*extra bits of repeat codes*/ - if (bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2); - else if (bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3); - else if (bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7); - } - - /*write the compressed data symbols*/ - writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); - /*error: the length of the end code 256 must be larger than 0*/ - if (HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64); - - /*write the end code*/ - addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); - - break; /*end of error-while*/ - } - - /*cleanup*/ - uivector_cleanup(&lz77_encoded); - HuffmanTree_cleanup(&tree_ll); - HuffmanTree_cleanup(&tree_d); - HuffmanTree_cleanup(&tree_cl); - uivector_cleanup(&frequencies_ll); - uivector_cleanup(&frequencies_d); - uivector_cleanup(&frequencies_cl); - uivector_cleanup(&bitlen_lld_e); - uivector_cleanup(&bitlen_lld); - uivector_cleanup(&bitlen_cl); - - return error; -} - -static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash, - const unsigned char* data, - size_t datapos, size_t dataend, - const LodePNGCompressSettings* settings, unsigned final) -{ - HuffmanTree tree_ll; /*tree for literal values and length codes*/ - HuffmanTree tree_d; /*tree for distance codes*/ - - unsigned BFINAL = final; - unsigned error = 0; - size_t i; - - HuffmanTree_init(&tree_ll); - HuffmanTree_init(&tree_d); - - generateFixedLitLenTree(&tree_ll); - generateFixedDistanceTree(&tree_d); - - addBitToStream(bp, out, BFINAL); - addBitToStream(bp, out, 1); /*first bit of BTYPE*/ - addBitToStream(bp, out, 0); /*second bit of BTYPE*/ - - if (settings->use_lz77) /*LZ77 encoded*/ - { - uivector lz77_encoded; - uivector_init(&lz77_encoded); - error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, - settings->minmatch, settings->nicematch, settings->lazymatching); - if (!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); - uivector_cleanup(&lz77_encoded); - } - else /*no LZ77, but still will be Huffman compressed*/ - { - for (i = datapos; i < dataend; ++i) - { - addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i])); - } - } - /*add END code*/ - if (!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); - - /*cleanup*/ - HuffmanTree_cleanup(&tree_ll); - HuffmanTree_cleanup(&tree_d); - - return error; -} - -static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings) -{ - unsigned error = 0; - size_t i, blocksize, numdeflateblocks; - size_t bp = 0; /*the bit pointer*/ - Hash hash; - - if (settings->btype > 2) return 61; - else if (settings->btype == 0) return deflateNoCompression(out, in, insize); - else if (settings->btype == 1) blocksize = insize; - else /*if(settings->btype == 2)*/ - { - /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/ - blocksize = insize / 8 + 8; - if (blocksize < 65536) blocksize = 65536; - if (blocksize > 262144) blocksize = 262144; - } - - numdeflateblocks = (insize + blocksize - 1) / blocksize; - if (numdeflateblocks == 0) numdeflateblocks = 1; - - error = hash_init(&hash, settings->windowsize); - if (error) return error; - - for (i = 0; i != numdeflateblocks && !error; ++i) - { - unsigned final = (i == numdeflateblocks - 1); - size_t start = i * blocksize; - size_t end = start + blocksize; - if (end > insize) end = insize; - - if (settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final); - else if (settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final); - } - - hash_cleanup(&hash); - - return error; -} - -unsigned lodepng_deflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings) -{ - unsigned error; - ucvector v; - ucvector_init_buffer(&v, *out, *outsize); - error = lodepng_deflatev(&v, in, insize, settings); - *out = v.data; - *outsize = v.size; - return error; -} - -static unsigned deflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings) -{ - if (settings->custom_deflate) - { - return settings->custom_deflate(out, outsize, in, insize, settings); - } - else - { - return lodepng_deflate(out, outsize, in, insize, settings); - } -} - -#endif /*LODEPNG_COMPILE_DECODER*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Adler32 */ -/* ////////////////////////////////////////////////////////////////////////// */ - -static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len) -{ - unsigned s1 = adler & 0xffff; - unsigned s2 = (adler >> 16) & 0xffff; - - while (len > 0) - { - /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/ - unsigned amount = len > 5550 ? 5550 : len; - len -= amount; - while (amount > 0) - { - s1 += (*data++); - s2 += s1; - --amount; - } - s1 %= 65521; - s2 %= 65521; - } - - return (s2 << 16) | s1; -} - -/*Return the adler32 of the bytes data[0..len-1]*/ -static unsigned adler32(const unsigned char* data, unsigned len) -{ - return update_adler32(1L, data, len); -} - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Zlib / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_DECODER - -unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGDecompressSettings* settings) -{ - unsigned error = 0; - unsigned CM, CINFO, FDICT; - - if (insize < 2) return 53; /*error, size of zlib data too small*/ - /*read information from zlib header*/ - if ((in[0] * 256 + in[1]) % 31 != 0) - { - /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/ - return 24; - } - - CM = in[0] & 15; - CINFO = (in[0] >> 4) & 15; - /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/ - FDICT = (in[1] >> 5) & 1; - /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/ - - if (CM != 8 || CINFO > 7) - { - /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/ - return 25; - } - if (FDICT != 0) - { - /*error: the specification of PNG says about the zlib stream: - "The additional flags shall not specify a preset dictionary."*/ - return 26; - } - - error = inflate(out, outsize, in + 2, insize - 2, settings); - if (error) return error; - - if (!settings->ignore_adler32) - { - unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]); - unsigned checksum = adler32(*out, (unsigned)(*outsize)); - if (checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/ - } - - return 0; /*no error*/ -} - -static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGDecompressSettings* settings) -{ - if (settings->custom_zlib) - { - return settings->custom_zlib(out, outsize, in, insize, settings); - } - else - { - return lodepng_zlib_decompress(out, outsize, in, insize, settings); - } -} - -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER - -unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGCompressSettings* settings) -{ - /*initially, *out must be NULL and outsize 0, if you just give some random *out - that's pointing to a non allocated buffer, this'll crash*/ - ucvector outv; - size_t i; - unsigned error; - unsigned char* deflatedata = 0; - size_t deflatesize = 0; - - /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/ - unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/ - unsigned FLEVEL = 0; - unsigned FDICT = 0; - unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64; - unsigned FCHECK = 31 - CMFFLG % 31; - CMFFLG += FCHECK; - - /*ucvector-controlled version of the output buffer, for dynamic array*/ - ucvector_init_buffer(&outv, *out, *outsize); - - ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8)); - ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255)); - - error = deflate(&deflatedata, &deflatesize, in, insize, settings); - - if (!error) - { - unsigned ADLER32 = adler32(in, (unsigned)insize); - for (i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]); - lodepng_free(deflatedata); - lodepng_add32bitInt(&outv, ADLER32); - } - - *out = outv.data; - *outsize = outv.size; - - return error; -} - -/* compress using the default or custom zlib function */ -static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGCompressSettings* settings) -{ - if (settings->custom_zlib) - { - return settings->custom_zlib(out, outsize, in, insize, settings); - } - else - { - return lodepng_zlib_compress(out, outsize, in, insize, settings); - } -} - -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#else /*no LODEPNG_COMPILE_ZLIB*/ - -#ifdef LODEPNG_COMPILE_DECODER -static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGDecompressSettings* settings) -{ - if (!settings->custom_zlib) return 87; /*no custom zlib function provided */ - return settings->custom_zlib(out, outsize, in, insize, settings); -} -#endif /*LODEPNG_COMPILE_DECODER*/ -#ifdef LODEPNG_COMPILE_ENCODER -static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, - size_t insize, const LodePNGCompressSettings* settings) -{ - if (!settings->custom_zlib) return 87; /*no custom zlib function provided */ - return settings->custom_zlib(out, outsize, in, insize, settings); -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#endif /*LODEPNG_COMPILE_ZLIB*/ - -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_ENCODER - -/*this is a good tradeoff between speed and compression ratio*/ -#define DEFAULT_WINDOWSIZE 2048 - -void lodepng_compress_settings_init(LodePNGCompressSettings* settings) -{ - /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/ - settings->btype = 2; - settings->use_lz77 = 1; - settings->windowsize = DEFAULT_WINDOWSIZE; - settings->minmatch = 3; - settings->nicematch = 128; - settings->lazymatching = 1; - - settings->custom_zlib = 0; - settings->custom_deflate = 0; - settings->custom_context = 0; -} - -const LodePNGCompressSettings lodepng_default_compress_settings = { 2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0 }; - - -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#ifdef LODEPNG_COMPILE_DECODER - -void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings) -{ - settings->ignore_adler32 = 0; - - settings->custom_zlib = 0; - settings->custom_inflate = 0; - settings->custom_context = 0; -} - -const LodePNGDecompressSettings lodepng_default_decompress_settings = { 0, 0, 0, 0 }; - -#endif /*LODEPNG_COMPILE_DECODER*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* // End of Zlib related code. Begin of PNG related code. // */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_PNG - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / CRC32 / */ -/* ////////////////////////////////////////////////////////////////////////// */ - - -#ifndef LODEPNG_NO_COMPILE_CRC -/* CRC polynomial: 0xedb88320 */ -static unsigned lodepng_crc32_table[256] = { - 0u, 1996959894u, 3993919788u, 2567524794u, 124634137u, 1886057615u, 3915621685u, 2657392035u, - 249268274u, 2044508324u, 3772115230u, 2547177864u, 162941995u, 2125561021u, 3887607047u, 2428444049u, - 498536548u, 1789927666u, 4089016648u, 2227061214u, 450548861u, 1843258603u, 4107580753u, 2211677639u, - 325883990u, 1684777152u, 4251122042u, 2321926636u, 335633487u, 1661365465u, 4195302755u, 2366115317u, - 997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u, - 901097722u, 1119000684u, 3686517206u, 2898065728u, 853044451u, 1172266101u, 3705015759u, 2882616665u, - 651767980u, 1373503546u, 3369554304u, 3218104598u, 565507253u, 1454621731u, 3485111705u, 3099436303u, - 671266974u, 1594198024u, 3322730930u, 2970347812u, 795835527u, 1483230225u, 3244367275u, 3060149565u, - 1994146192u, 31158534u, 2563907772u, 4023717930u, 1907459465u, 112637215u, 2680153253u, 3904427059u, - 2013776290u, 251722036u, 2517215374u, 3775830040u, 2137656763u, 141376813u, 2439277719u, 3865271297u, - 1802195444u, 476864866u, 2238001368u, 4066508878u, 1812370925u, 453092731u, 2181625025u, 4111451223u, - 1706088902u, 314042704u, 2344532202u, 4240017532u, 1658658271u, 366619977u, 2362670323u, 4224994405u, - 1303535960u, 984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u, - 1131014506u, 879679996u, 2909243462u, 3663771856u, 1141124467u, 855842277u, 2852801631u, 3708648649u, - 1342533948u, 654459306u, 3188396048u, 3373015174u, 1466479909u, 544179635u, 3110523913u, 3462522015u, - 1591671054u, 702138776u, 2966460450u, 3352799412u, 1504918807u, 783551873u, 3082640443u, 3233442989u, - 3988292384u, 2596254646u, 62317068u, 1957810842u, 3939845945u, 2647816111u, 81470997u, 1943803523u, - 3814918930u, 2489596804u, 225274430u, 2053790376u, 3826175755u, 2466906013u, 167816743u, 2097651377u, - 4027552580u, 2265490386u, 503444072u, 1762050814u, 4150417245u, 2154129355u, 426522225u, 1852507879u, - 4275313526u, 2312317920u, 282753626u, 1742555852u, 4189708143u, 2394877945u, 397917763u, 1622183637u, - 3604390888u, 2714866558u, 953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u, - 3624741850u, 2936675148u, 906185462u, 1090812512u, 3747672003u, 2825379669u, 829329135u, 1181335161u, - 3412177804u, 3160834842u, 628085408u, 1382605366u, 3423369109u, 3138078467u, 570562233u, 1426400815u, - 3317316542u, 2998733608u, 733239954u, 1555261956u, 3268935591u, 3050360625u, 752459403u, 1541320221u, - 2607071920u, 3965973030u, 1969922972u, 40735498u, 2617837225u, 3943577151u, 1913087877u, 83908371u, - 2512341634u, 3803740692u, 2075208622u, 213261112u, 2463272603u, 3855990285u, 2094854071u, 198958881u, - 2262029012u, 4057260610u, 1759359992u, 534414190u, 2176718541u, 4139329115u, 1873836001u, 414664567u, - 2282248934u, 4279200368u, 1711684554u, 285281116u, 2405801727u, 4167216745u, 1634467795u, 376229701u, - 2685067896u, 3608007406u, 1308918612u, 956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u, - 2932959818u, 3654703836u, 1088359270u, 936918000u, 2847714899u, 3736837829u, 1202900863u, 817233897u, - 3183342108u, 3401237130u, 1404277552u, 615818150u, 3134207493u, 3453421203u, 1423857449u, 601450431u, - 3009837614u, 3294710456u, 1567103746u, 711928724u, 3020668471u, 3272380065u, 1510334235u, 755167117u -}; - -/*Return the CRC of the bytes buf[0..len-1].*/ -unsigned lodepng_crc32(const unsigned char* data, size_t length) -{ - unsigned r = 0xffffffffu; - size_t i; - for (i = 0; i < length; ++i) - { - r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8); - } - return r ^ 0xffffffffu; -} -#else /* !LODEPNG_NO_COMPILE_CRC */ -unsigned lodepng_crc32(const unsigned char* data, size_t length); -#endif /* !LODEPNG_NO_COMPILE_CRC */ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Reading and writing single bits and bytes from/to stream for LodePNG / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream) -{ - unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1); - ++(*bitpointer); - return result; -} - -static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) -{ - unsigned result = 0; - size_t i; - for (i = 0; i < nbits; ++i) - { - result <<= 1; - result |= (unsigned)readBitFromReversedStream(bitpointer, bitstream); - } - return result; -} - -#ifdef LODEPNG_COMPILE_DECODER -static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) -{ - /*the current bit in bitstream must be 0 for this to work*/ - if (bit) - { - /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/ - bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7))); - } - ++(*bitpointer); -} -#endif /*LODEPNG_COMPILE_DECODER*/ - -static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) -{ - /*the current bit in bitstream may be 0 or 1 for this to work*/ - if (bit == 0) bitstream[(*bitpointer) >> 3] &= (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7)))); - else bitstream[(*bitpointer) >> 3] |= (1 << (7 - ((*bitpointer) & 0x7))); - ++(*bitpointer); -} - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / PNG chunks / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -unsigned lodepng_chunk_length(const unsigned char* chunk) -{ - return lodepng_read32bitInt(&chunk[0]); -} - -void lodepng_chunk_type(char type[5], const unsigned char* chunk) -{ - unsigned i; - for (i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i]; - type[4] = 0; /*null termination char*/ -} - -unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type) -{ - if (strlen(type) != 4) return 0; - return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]); -} - -unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) -{ - return((chunk[4] & 32) != 0); -} - -unsigned char lodepng_chunk_private(const unsigned char* chunk) -{ - return((chunk[6] & 32) != 0); -} - -unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) -{ - return((chunk[7] & 32) != 0); -} - -unsigned char* lodepng_chunk_data(unsigned char* chunk) -{ - return &chunk[8]; -} - -const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk) -{ - return &chunk[8]; -} - -unsigned lodepng_chunk_check_crc(const unsigned char* chunk) -{ - unsigned length = lodepng_chunk_length(chunk); - unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]); - /*the CRC is taken of the data and the 4 chunk type letters, not the length*/ - unsigned checksum = lodepng_crc32(&chunk[4], length + 4); - if (CRC != checksum) return 1; - else return 0; -} - -void lodepng_chunk_generate_crc(unsigned char* chunk) -{ - unsigned length = lodepng_chunk_length(chunk); - unsigned CRC = lodepng_crc32(&chunk[4], length + 4); - lodepng_set32bitInt(chunk + 8 + length, CRC); -} - -unsigned char* lodepng_chunk_next(unsigned char* chunk) -{ - unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; - return &chunk[total_chunk_length]; -} - -const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk) -{ - unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; - return &chunk[total_chunk_length]; -} - -unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk) -{ - unsigned i; - unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; - unsigned char *chunk_start, *new_buffer; - size_t new_length = (*outlength) + total_chunk_length; - if (new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/ - - new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); - if (!new_buffer) return 83; /*alloc fail*/ - (*out) = new_buffer; - (*outlength) = new_length; - chunk_start = &(*out)[new_length - total_chunk_length]; - - for (i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i]; - - return 0; -} - -unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, - const char* type, const unsigned char* data) -{ - unsigned i; - unsigned char *chunk, *new_buffer; - size_t new_length = (*outlength) + length + 12; - if (new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/ - new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); - if (!new_buffer) return 83; /*alloc fail*/ - (*out) = new_buffer; - (*outlength) = new_length; - chunk = &(*out)[(*outlength) - length - 12]; - - /*1: length*/ - lodepng_set32bitInt(chunk, (unsigned)length); - - /*2: chunk name (4 letters)*/ - chunk[4] = (unsigned char)type[0]; - chunk[5] = (unsigned char)type[1]; - chunk[6] = (unsigned char)type[2]; - chunk[7] = (unsigned char)type[3]; - - /*3: the data*/ - for (i = 0; i != length; ++i) chunk[8 + i] = data[i]; - - /*4: CRC (of the chunkname characters and the data)*/ - lodepng_chunk_generate_crc(chunk); - - return 0; -} - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / Color types and such / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/*return type is a LodePNG error code*/ -static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/ -{ - switch (colortype) - { - case 0: if (!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/ - case 2: if (!(bd == 8 || bd == 16)) return 37; break; /*RGB*/ - case 3: if (!(bd == 1 || bd == 2 || bd == 4 || bd == 8)) return 37; break; /*palette*/ - case 4: if (!(bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/ - case 6: if (!(bd == 8 || bd == 16)) return 37; break; /*RGBA*/ - default: return 31; - } - return 0; /*allowed color type / bits combination*/ -} - -static unsigned getNumColorChannels(LodePNGColorType colortype) -{ - switch (colortype) - { - case 0: return 1; /*grey*/ - case 2: return 3; /*RGB*/ - case 3: return 1; /*palette*/ - case 4: return 2; /*grey + alpha*/ - case 6: return 4; /*RGBA*/ - } - return 0; /*unexisting color type*/ -} - -static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth) -{ - /*bits per pixel is amount of channels * bits per channel*/ - return getNumColorChannels(colortype) * bitdepth; -} - -/* ////////////////////////////////////////////////////////////////////////// */ - -void lodepng_color_mode_init(LodePNGColorMode* info) -{ - info->key_defined = 0; - info->key_r = info->key_g = info->key_b = 0; - info->colortype = LCT_RGBA; - info->bitdepth = 8; - info->palette = 0; - info->palettesize = 0; -} - -void lodepng_color_mode_cleanup(LodePNGColorMode* info) -{ - lodepng_palette_clear(info); -} - -unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source) -{ - size_t i; - lodepng_color_mode_cleanup(dest); - *dest = *source; - if (source->palette) - { - dest->palette = (unsigned char*)lodepng_malloc(1024); - if (!dest->palette && source->palettesize) return 83; /*alloc fail*/ - for (i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i]; - } - return 0; -} - -static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b) -{ - size_t i; - if (a->colortype != b->colortype) return 0; - if (a->bitdepth != b->bitdepth) return 0; - if (a->key_defined != b->key_defined) return 0; - if (a->key_defined) - { - if (a->key_r != b->key_r) return 0; - if (a->key_g != b->key_g) return 0; - if (a->key_b != b->key_b) return 0; - } - /*if one of the palette sizes is 0, then we consider it to be the same as the - other: it means that e.g. the palette was not given by the user and should be - considered the same as the palette inside the PNG.*/ - if (1/*a->palettesize != 0 && b->palettesize != 0*/) { - if (a->palettesize != b->palettesize) return 0; - for (i = 0; i != a->palettesize * 4; ++i) - { - if (a->palette[i] != b->palette[i]) return 0; - } - } - return 1; -} - -void lodepng_palette_clear(LodePNGColorMode* info) -{ - if (info->palette) lodepng_free(info->palette); - info->palette = 0; - info->palettesize = 0; -} - -unsigned lodepng_palette_add(LodePNGColorMode* info, - unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - unsigned char* data; - /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with - the max of 256 colors, it'll have the exact alloc size*/ - if (!info->palette) /*allocate palette if empty*/ - { - /*room for 256 colors with 4 bytes each*/ - data = (unsigned char*)lodepng_realloc(info->palette, 1024); - if (!data) return 83; /*alloc fail*/ - else info->palette = data; - } - info->palette[4 * info->palettesize + 0] = r; - info->palette[4 * info->palettesize + 1] = g; - info->palette[4 * info->palettesize + 2] = b; - info->palette[4 * info->palettesize + 3] = a; - ++info->palettesize; - return 0; -} - -unsigned lodepng_get_bpp(const LodePNGColorMode* info) -{ - /*calculate bits per pixel out of colortype and bitdepth*/ - return lodepng_get_bpp_lct(info->colortype, info->bitdepth); -} - -unsigned lodepng_get_channels(const LodePNGColorMode* info) -{ - return getNumColorChannels(info->colortype); -} - -unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) -{ - return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA; -} - -unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) -{ - return (info->colortype & 4) != 0; /*4 or 6*/ -} - -unsigned lodepng_is_palette_type(const LodePNGColorMode* info) -{ - return info->colortype == LCT_PALETTE; -} - -unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) -{ - size_t i; - for (i = 0; i != info->palettesize; ++i) - { - if (info->palette[i * 4 + 3] < 255) return 1; - } - return 0; -} - -unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) -{ - return info->key_defined - || lodepng_is_alpha_type(info) - || lodepng_has_palette_alpha(info); -} - -size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color) -{ - /*will not overflow for any color type if roughly w * h < 268435455*/ - size_t bpp = lodepng_get_bpp(color); - size_t n = w * h; - return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; -} - -size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) -{ - /*will not overflow for any color type if roughly w * h < 268435455*/ - size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth); - size_t n = w * h; - return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; -} - - -#ifdef LODEPNG_COMPILE_PNG -#ifdef LODEPNG_COMPILE_DECODER -/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/ -static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color) -{ - /*will not overflow for any color type if roughly w * h < 268435455*/ - size_t bpp = lodepng_get_bpp(color); - size_t line = ((w / 8) * bpp) + ((w & 7) * bpp + 7) / 8; - return h * line; -} -#endif /*LODEPNG_COMPILE_DECODER*/ -#endif /*LODEPNG_COMPILE_PNG*/ - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - -static void LodePNGUnknownChunks_init(LodePNGInfo* info) -{ - unsigned i; - for (i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0; - for (i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0; -} - -static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) -{ - unsigned i; - for (i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]); -} - -static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src) -{ - unsigned i; - - LodePNGUnknownChunks_cleanup(dest); - - for (i = 0; i != 3; ++i) - { - size_t j; - dest->unknown_chunks_size[i] = src->unknown_chunks_size[i]; - dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]); - if (!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/ - for (j = 0; j < src->unknown_chunks_size[i]; ++j) - { - dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j]; - } - } - - return 0; -} - -/******************************************************************************/ - -static void LodePNGText_init(LodePNGInfo* info) -{ - info->text_num = 0; - info->text_keys = NULL; - info->text_strings = NULL; -} - -static void LodePNGText_cleanup(LodePNGInfo* info) -{ - size_t i; - for (i = 0; i != info->text_num; ++i) - { - string_cleanup(&info->text_keys[i]); - string_cleanup(&info->text_strings[i]); - } - lodepng_free(info->text_keys); - lodepng_free(info->text_strings); -} - -static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source) -{ - size_t i = 0; - dest->text_keys = 0; - dest->text_strings = 0; - dest->text_num = 0; - for (i = 0; i != source->text_num; ++i) - { - CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i])); - } - return 0; -} - -void lodepng_clear_text(LodePNGInfo* info) -{ - LodePNGText_cleanup(info); -} - -unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str) -{ - char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1))); - char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1))); - if (!new_keys || !new_strings) - { - lodepng_free(new_keys); - lodepng_free(new_strings); - return 83; /*alloc fail*/ - } - - ++info->text_num; - info->text_keys = new_keys; - info->text_strings = new_strings; - - string_init(&info->text_keys[info->text_num - 1]); - string_set(&info->text_keys[info->text_num - 1], key); - - string_init(&info->text_strings[info->text_num - 1]); - string_set(&info->text_strings[info->text_num - 1], str); - - return 0; -} - -/******************************************************************************/ - -static void LodePNGIText_init(LodePNGInfo* info) -{ - info->itext_num = 0; - info->itext_keys = NULL; - info->itext_langtags = NULL; - info->itext_transkeys = NULL; - info->itext_strings = NULL; -} - -static void LodePNGIText_cleanup(LodePNGInfo* info) -{ - size_t i; - for (i = 0; i != info->itext_num; ++i) - { - string_cleanup(&info->itext_keys[i]); - string_cleanup(&info->itext_langtags[i]); - string_cleanup(&info->itext_transkeys[i]); - string_cleanup(&info->itext_strings[i]); - } - lodepng_free(info->itext_keys); - lodepng_free(info->itext_langtags); - lodepng_free(info->itext_transkeys); - lodepng_free(info->itext_strings); -} - -static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source) -{ - size_t i = 0; - dest->itext_keys = 0; - dest->itext_langtags = 0; - dest->itext_transkeys = 0; - dest->itext_strings = 0; - dest->itext_num = 0; - for (i = 0; i != source->itext_num; ++i) - { - CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i], - source->itext_transkeys[i], source->itext_strings[i])); - } - return 0; -} - -void lodepng_clear_itext(LodePNGInfo* info) -{ - LodePNGIText_cleanup(info); -} - -unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, - const char* transkey, const char* str) -{ - char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1))); - char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1))); - char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1))); - char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1))); - if (!new_keys || !new_langtags || !new_transkeys || !new_strings) - { - lodepng_free(new_keys); - lodepng_free(new_langtags); - lodepng_free(new_transkeys); - lodepng_free(new_strings); - return 83; /*alloc fail*/ - } - - ++info->itext_num; - info->itext_keys = new_keys; - info->itext_langtags = new_langtags; - info->itext_transkeys = new_transkeys; - info->itext_strings = new_strings; - - string_init(&info->itext_keys[info->itext_num - 1]); - string_set(&info->itext_keys[info->itext_num - 1], key); - - string_init(&info->itext_langtags[info->itext_num - 1]); - string_set(&info->itext_langtags[info->itext_num - 1], langtag); - - string_init(&info->itext_transkeys[info->itext_num - 1]); - string_set(&info->itext_transkeys[info->itext_num - 1], transkey); - - string_init(&info->itext_strings[info->itext_num - 1]); - string_set(&info->itext_strings[info->itext_num - 1], str); - - return 0; -} -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -void lodepng_info_init(LodePNGInfo* info) -{ - lodepng_color_mode_init(&info->color); - info->interlace_method = 0; - info->compression_method = 0; - info->filter_method = 0; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - info->background_defined = 0; - info->background_r = info->background_g = info->background_b = 0; - - LodePNGText_init(info); - LodePNGIText_init(info); - - info->time_defined = 0; - info->phys_defined = 0; - - LodePNGUnknownChunks_init(info); -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} - -void lodepng_info_cleanup(LodePNGInfo* info) -{ - lodepng_color_mode_cleanup(&info->color); -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - LodePNGText_cleanup(info); - LodePNGIText_cleanup(info); - - LodePNGUnknownChunks_cleanup(info); -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} - -unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) -{ - lodepng_info_cleanup(dest); - *dest = *source; - lodepng_color_mode_init(&dest->color); - CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color)); - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - CERROR_TRY_RETURN(LodePNGText_copy(dest, source)); - CERROR_TRY_RETURN(LodePNGIText_copy(dest, source)); - - LodePNGUnknownChunks_init(dest); - CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source)); -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - return 0; -} - -void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b) -{ - LodePNGInfo temp = *a; - *a = *b; - *b = temp; -} - -/* ////////////////////////////////////////////////////////////////////////// */ - -/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/ -static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in) -{ - unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/ - /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/ - unsigned p = index & m; - in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/ - in = in << (bits * (m - p)); - if (p == 0) out[index * bits / 8] = in; - else out[index * bits / 8] |= in; -} - -typedef struct ColorTree ColorTree; - -/* -One node of a color tree -This is the data structure used to count the number of unique colors and to get a palette -index for a color. It's like an octree, but because the alpha channel is used too, each -node has 16 instead of 8 children. -*/ -struct ColorTree -{ - ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/ - int index; /*the payload. Only has a meaningful value if this is in the last level*/ -}; - -static void color_tree_init(ColorTree* tree) -{ - int i; - for (i = 0; i != 16; ++i) tree->children[i] = 0; - tree->index = -1; -} - -static void color_tree_cleanup(ColorTree* tree) -{ - int i; - for (i = 0; i != 16; ++i) - { - if (tree->children[i]) - { - color_tree_cleanup(tree->children[i]); - lodepng_free(tree->children[i]); - } - } -} - -/*returns -1 if color not present, its index otherwise*/ -static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - int bit = 0; - for (bit = 0; bit < 8; ++bit) - { - int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); - if (!tree->children[i]) return -1; - else tree = tree->children[i]; - } - return tree ? tree->index : -1; -} - -#ifdef LODEPNG_COMPILE_ENCODER -static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - return color_tree_get(tree, r, g, b, a) >= 0; -} -#endif /*LODEPNG_COMPILE_ENCODER*/ - -/*color is not allowed to already exist. -Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/ -static void color_tree_add(ColorTree* tree, - unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index) -{ - int bit; - for (bit = 0; bit < 8; ++bit) - { - int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); - if (!tree->children[i]) - { - tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree)); - color_tree_init(tree->children[i]); - } - tree = tree->children[i]; - } - tree->index = (int)index; -} - -/*put a pixel, given its RGBA color, into image of any color type*/ -static unsigned rgba8ToPixel(unsigned char* out, size_t i, - const LodePNGColorMode* mode, ColorTree* tree /*for palette*/, - unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - if (mode->colortype == LCT_GREY) - { - unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; - if (mode->bitdepth == 8) out[i] = grey; - else if (mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey; - else - { - /*take the most significant bits of grey*/ - grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1); - addColorBits(out, i, mode->bitdepth, grey); - } - } - else if (mode->colortype == LCT_RGB) - { - if (mode->bitdepth == 8) - { - out[i * 3 + 0] = r; - out[i * 3 + 1] = g; - out[i * 3 + 2] = b; - } - else - { - out[i * 6 + 0] = out[i * 6 + 1] = r; - out[i * 6 + 2] = out[i * 6 + 3] = g; - out[i * 6 + 4] = out[i * 6 + 5] = b; - } - } - else if (mode->colortype == LCT_PALETTE) - { - int index = color_tree_get(tree, r, g, b, a); - if (index < 0) return 82; /*color not in palette*/ - if (mode->bitdepth == 8) out[i] = index; - else addColorBits(out, i, mode->bitdepth, (unsigned)index); - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; - if (mode->bitdepth == 8) - { - out[i * 2 + 0] = grey; - out[i * 2 + 1] = a; - } - else if (mode->bitdepth == 16) - { - out[i * 4 + 0] = out[i * 4 + 1] = grey; - out[i * 4 + 2] = out[i * 4 + 3] = a; - } - } - else if (mode->colortype == LCT_RGBA) - { - if (mode->bitdepth == 8) - { - out[i * 4 + 0] = r; - out[i * 4 + 1] = g; - out[i * 4 + 2] = b; - out[i * 4 + 3] = a; - } - else - { - out[i * 8 + 0] = out[i * 8 + 1] = r; - out[i * 8 + 2] = out[i * 8 + 3] = g; - out[i * 8 + 4] = out[i * 8 + 5] = b; - out[i * 8 + 6] = out[i * 8 + 7] = a; - } - } - - return 0; /*no error*/ -} - -/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/ -static void rgba16ToPixel(unsigned char* out, size_t i, - const LodePNGColorMode* mode, - unsigned short r, unsigned short g, unsigned short b, unsigned short a) -{ - if (mode->colortype == LCT_GREY) - { - unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; - out[i * 2 + 0] = (grey >> 8) & 255; - out[i * 2 + 1] = grey & 255; - } - else if (mode->colortype == LCT_RGB) - { - out[i * 6 + 0] = (r >> 8) & 255; - out[i * 6 + 1] = r & 255; - out[i * 6 + 2] = (g >> 8) & 255; - out[i * 6 + 3] = g & 255; - out[i * 6 + 4] = (b >> 8) & 255; - out[i * 6 + 5] = b & 255; - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; - out[i * 4 + 0] = (grey >> 8) & 255; - out[i * 4 + 1] = grey & 255; - out[i * 4 + 2] = (a >> 8) & 255; - out[i * 4 + 3] = a & 255; - } - else if (mode->colortype == LCT_RGBA) - { - out[i * 8 + 0] = (r >> 8) & 255; - out[i * 8 + 1] = r & 255; - out[i * 8 + 2] = (g >> 8) & 255; - out[i * 8 + 3] = g & 255; - out[i * 8 + 4] = (b >> 8) & 255; - out[i * 8 + 5] = b & 255; - out[i * 8 + 6] = (a >> 8) & 255; - out[i * 8 + 7] = a & 255; - } -} - -/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/ -static void getPixelColorRGBA8(unsigned char* r, unsigned char* g, - unsigned char* b, unsigned char* a, - const unsigned char* in, size_t i, - const LodePNGColorMode* mode) -{ - if (mode->colortype == LCT_GREY) - { - if (mode->bitdepth == 8) - { - *r = *g = *b = in[i]; - if (mode->key_defined && *r == mode->key_r) *a = 0; - else *a = 255; - } - else if (mode->bitdepth == 16) - { - *r = *g = *b = in[i * 2 + 0]; - if (mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; - else *a = 255; - } - else - { - unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ - size_t j = i * mode->bitdepth; - unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); - *r = *g = *b = (value * 255) / highest; - if (mode->key_defined && value == mode->key_r) *a = 0; - else *a = 255; - } - } - else if (mode->colortype == LCT_RGB) - { - if (mode->bitdepth == 8) - { - *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2]; - if (mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0; - else *a = 255; - } - else - { - *r = in[i * 6 + 0]; - *g = in[i * 6 + 2]; - *b = in[i * 6 + 4]; - if (mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r - && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g - && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; - else *a = 255; - } - } - else if (mode->colortype == LCT_PALETTE) - { - unsigned index; - if (mode->bitdepth == 8) index = in[i]; - else - { - size_t j = i * mode->bitdepth; - index = readBitsFromReversedStream(&j, in, mode->bitdepth); - } - - if (index >= mode->palettesize) - { - /*This is an error according to the PNG spec, but common PNG decoders make it black instead. - Done here too, slightly faster due to no error handling needed.*/ - *r = *g = *b = 0; - *a = 255; - } - else - { - *r = mode->palette[index * 4 + 0]; - *g = mode->palette[index * 4 + 1]; - *b = mode->palette[index * 4 + 2]; - *a = mode->palette[index * 4 + 3]; - } - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - if (mode->bitdepth == 8) - { - *r = *g = *b = in[i * 2 + 0]; - *a = in[i * 2 + 1]; - } - else - { - *r = *g = *b = in[i * 4 + 0]; - *a = in[i * 4 + 2]; - } - } - else if (mode->colortype == LCT_RGBA) - { - if (mode->bitdepth == 8) - { - *r = in[i * 4 + 0]; - *g = in[i * 4 + 1]; - *b = in[i * 4 + 2]; - *a = in[i * 4 + 3]; - } - else - { - *r = in[i * 8 + 0]; - *g = in[i * 8 + 2]; - *b = in[i * 8 + 4]; - *a = in[i * 8 + 6]; - } - } -} - -/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color -mode test cases, optimized to convert the colors much faster, when converting -to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with -enough memory, if has_alpha is true the output is RGBA. mode has the color mode -of the input buffer.*/ -static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels, - unsigned has_alpha, const unsigned char* in, - const LodePNGColorMode* mode) -{ - unsigned num_channels = has_alpha ? 4 : 3; - size_t i; - if (mode->colortype == LCT_GREY) - { - if (mode->bitdepth == 8) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = buffer[1] = buffer[2] = in[i]; - if (has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255; - } - } - else if (mode->bitdepth == 16) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = buffer[1] = buffer[2] = in[i * 2]; - if (has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255; - } - } - else - { - unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ - size_t j = 0; - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); - buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest; - if (has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255; - } - } - } - else if (mode->colortype == LCT_RGB) - { - if (mode->bitdepth == 8) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = in[i * 3 + 0]; - buffer[1] = in[i * 3 + 1]; - buffer[2] = in[i * 3 + 2]; - if (has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r - && buffer[1] == mode->key_g && buffer[2] == mode->key_b ? 0 : 255; - } - } - else - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = in[i * 6 + 0]; - buffer[1] = in[i * 6 + 2]; - buffer[2] = in[i * 6 + 4]; - if (has_alpha) buffer[3] = mode->key_defined - && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r - && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g - && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255; - } - } - } - else if (mode->colortype == LCT_PALETTE) - { - unsigned index; - size_t j = 0; - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - if (mode->bitdepth == 8) index = in[i]; - else index = readBitsFromReversedStream(&j, in, mode->bitdepth); - - if (index >= mode->palettesize) - { - /*This is an error according to the PNG spec, but most PNG decoders make it black instead. - Done here too, slightly faster due to no error handling needed.*/ - buffer[0] = buffer[1] = buffer[2] = 0; - if (has_alpha) buffer[3] = 255; - } - else - { - buffer[0] = mode->palette[index * 4 + 0]; - buffer[1] = mode->palette[index * 4 + 1]; - buffer[2] = mode->palette[index * 4 + 2]; - if (has_alpha) buffer[3] = mode->palette[index * 4 + 3]; - } - } - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - if (mode->bitdepth == 8) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0]; - if (has_alpha) buffer[3] = in[i * 2 + 1]; - } - } - else - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0]; - if (has_alpha) buffer[3] = in[i * 4 + 2]; - } - } - } - else if (mode->colortype == LCT_RGBA) - { - if (mode->bitdepth == 8) - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = in[i * 4 + 0]; - buffer[1] = in[i * 4 + 1]; - buffer[2] = in[i * 4 + 2]; - if (has_alpha) buffer[3] = in[i * 4 + 3]; - } - } - else - { - for (i = 0; i != numpixels; ++i, buffer += num_channels) - { - buffer[0] = in[i * 8 + 0]; - buffer[1] = in[i * 8 + 2]; - buffer[2] = in[i * 8 + 4]; - if (has_alpha) buffer[3] = in[i * 8 + 6]; - } - } - } -} - -/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with -given color type, but the given color type must be 16-bit itself.*/ -static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a, - const unsigned char* in, size_t i, const LodePNGColorMode* mode) -{ - if (mode->colortype == LCT_GREY) - { - *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1]; - if (mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; - else *a = 65535; - } - else if (mode->colortype == LCT_RGB) - { - *r = 256u * in[i * 6 + 0] + in[i * 6 + 1]; - *g = 256u * in[i * 6 + 2] + in[i * 6 + 3]; - *b = 256u * in[i * 6 + 4] + in[i * 6 + 5]; - if (mode->key_defined - && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r - && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g - && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; - else *a = 65535; - } - else if (mode->colortype == LCT_GREY_ALPHA) - { - *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1]; - *a = 256u * in[i * 4 + 2] + in[i * 4 + 3]; - } - else if (mode->colortype == LCT_RGBA) - { - *r = 256u * in[i * 8 + 0] + in[i * 8 + 1]; - *g = 256u * in[i * 8 + 2] + in[i * 8 + 3]; - *b = 256u * in[i * 8 + 4] + in[i * 8 + 5]; - *a = 256u * in[i * 8 + 6] + in[i * 8 + 7]; - } -} - -unsigned lodepng_convert(unsigned char* out, const unsigned char* in, - const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, - unsigned w, unsigned h) -{ - size_t i; - ColorTree tree; - size_t numpixels = w * h; - - if (lodepng_color_mode_equal(mode_out, mode_in)) - { - size_t numbytes = lodepng_get_raw_size(w, h, mode_in); - for (i = 0; i != numbytes; ++i) out[i] = in[i]; - return 0; - } - - if (mode_out->colortype == LCT_PALETTE) - { - size_t palettesize = mode_out->palettesize; - const unsigned char* palette = mode_out->palette; - size_t palsize = 1u << mode_out->bitdepth; - /*if the user specified output palette but did not give the values, assume - they want the values of the input color type (assuming that one is palette). - Note that we never create a new palette ourselves.*/ - if (palettesize == 0) - { - palettesize = mode_in->palettesize; - palette = mode_in->palette; - } - if (palettesize < palsize) palsize = palettesize; - color_tree_init(&tree); - for (i = 0; i != palsize; ++i) - { - const unsigned char* p = &palette[i * 4]; - color_tree_add(&tree, p[0], p[1], p[2], p[3], i); - } - } - - if (mode_in->bitdepth == 16 && mode_out->bitdepth == 16) - { - for (i = 0; i != numpixels; ++i) - { - unsigned short r = 0, g = 0, b = 0, a = 0; - getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); - rgba16ToPixel(out, i, mode_out, r, g, b, a); - } - } - else if (mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA) - { - getPixelColorsRGBA8(out, numpixels, 1, in, mode_in); - } - else if (mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB) - { - getPixelColorsRGBA8(out, numpixels, 0, in, mode_in); - } - else - { - unsigned char r = 0, g = 0, b = 0, a = 0; - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in); - CERROR_TRY_RETURN(rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a)); - } - } - - if (mode_out->colortype == LCT_PALETTE) - { - color_tree_cleanup(&tree); - } - - return 0; /*no error*/ -} - -#ifdef LODEPNG_COMPILE_ENCODER - -void lodepng_color_profile_init(LodePNGColorProfile* profile) -{ - profile->colored = 0; - profile->key = 0; - profile->key_r = profile->key_g = profile->key_b = 0; - profile->alpha = 0; - profile->numcolors = 0; - profile->bits = 1; -} - -/*function used for debug purposes with C++*/ -/*void printColorProfile(LodePNGColorProfile* p) -{ - std::cout << "colored: " << (int)p->colored << ", "; - std::cout << "key: " << (int)p->key << ", "; - std::cout << "key_r: " << (int)p->key_r << ", "; - std::cout << "key_g: " << (int)p->key_g << ", "; - std::cout << "key_b: " << (int)p->key_b << ", "; - std::cout << "alpha: " << (int)p->alpha << ", "; - std::cout << "numcolors: " << (int)p->numcolors << ", "; - std::cout << "bits: " << (int)p->bits << std::endl; -}*/ - -/*Returns how many bits needed to represent given value (max 8 bit)*/ -static unsigned getValueRequiredBits(unsigned char value) -{ - if (value == 0 || value == 255) return 1; - /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/ - if (value % 17 == 0) return value % 85 == 0 ? 2 : 4; - return 8; -} - -/*profile must already have been inited with mode. -It's ok to set some parameters of profile to done already.*/ -unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, - const unsigned char* in, unsigned w, unsigned h, - const LodePNGColorMode* mode) -{ - unsigned error = 0; - size_t i; - ColorTree tree; - size_t numpixels = w * h; - - unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0; - unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1; - unsigned numcolors_done = 0; - unsigned bpp = lodepng_get_bpp(mode); - unsigned bits_done = bpp == 1 ? 1 : 0; - unsigned maxnumcolors = 257; - unsigned sixteen = 0; - if (bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256)); - - color_tree_init(&tree); - - /*Check if the 16-bit input is truly 16-bit*/ - if (mode->bitdepth == 16) - { - unsigned short r, g, b, a; - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); - if ((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) || - (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/ - { - sixteen = 1; - break; - } - } - } - - if (sixteen) - { - unsigned short r = 0, g = 0, b = 0, a = 0; - profile->bits = 16; - bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/ - - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); - - if (!colored_done && (r != g || r != b)) - { - profile->colored = 1; - colored_done = 1; - } - - if (!alpha_done) - { - unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); - if (a != 65535 && (a != 0 || (profile->key && !matchkey))) - { - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - } - else if (a == 0 && !profile->alpha && !profile->key) - { - profile->key = 1; - profile->key_r = r; - profile->key_g = g; - profile->key_b = b; - } - else if (a == 65535 && profile->key && matchkey) - { - /* Color key cannot be used if an opaque pixel also has that RGB color. */ - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - } - } - if (alpha_done && numcolors_done && colored_done && bits_done) break; - } - - if (profile->key && !profile->alpha) - { - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); - if (a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) - { - /* Color key cannot be used if an opaque pixel also has that RGB color. */ - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - } - } - } - } - else /* < 16-bit */ - { - unsigned char r = 0, g = 0, b = 0, a = 0; - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); - - if (!bits_done && profile->bits < 8) - { - /*only r is checked, < 8 bits is only relevant for greyscale*/ - unsigned bits = getValueRequiredBits(r); - if (bits > profile->bits) profile->bits = bits; - } - bits_done = (profile->bits >= bpp); - - if (!colored_done && (r != g || r != b)) - { - profile->colored = 1; - colored_done = 1; - if (profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/ - } - - if (!alpha_done) - { - unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); - if (a != 255 && (a != 0 || (profile->key && !matchkey))) - { - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - if (profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ - } - else if (a == 0 && !profile->alpha && !profile->key) - { - profile->key = 1; - profile->key_r = r; - profile->key_g = g; - profile->key_b = b; - } - else if (a == 255 && profile->key && matchkey) - { - /* Color key cannot be used if an opaque pixel also has that RGB color. */ - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - if (profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ - } - } - - if (!numcolors_done) - { - if (!color_tree_has(&tree, r, g, b, a)) - { - color_tree_add(&tree, r, g, b, a, profile->numcolors); - if (profile->numcolors < 256) - { - unsigned char* p = profile->palette; - unsigned n = profile->numcolors; - p[n * 4 + 0] = r; - p[n * 4 + 1] = g; - p[n * 4 + 2] = b; - p[n * 4 + 3] = a; - } - ++profile->numcolors; - numcolors_done = profile->numcolors >= maxnumcolors; - } - } - - if (alpha_done && numcolors_done && colored_done && bits_done) break; - } - - if (profile->key && !profile->alpha) - { - for (i = 0; i != numpixels; ++i) - { - getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); - if (a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) - { - /* Color key cannot be used if an opaque pixel also has that RGB color. */ - profile->alpha = 1; - profile->key = 0; - alpha_done = 1; - if (profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ - } - } - } - - /*make the profile's key always 16-bit for consistency - repeat each byte twice*/ - profile->key_r += (profile->key_r << 8); - profile->key_g += (profile->key_g << 8); - profile->key_b += (profile->key_b << 8); - } - - color_tree_cleanup(&tree); - return error; -} - -/*Automatically chooses color type that gives smallest amount of bits in the -output image, e.g. grey if there are only greyscale pixels, palette if there -are less than 256 colors, ... -Updates values of mode with a potentially smaller color model. mode_out should -contain the user chosen color model, but will be overwritten with the new chosen one.*/ -unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, - const unsigned char* image, unsigned w, unsigned h, - const LodePNGColorMode* mode_in) -{ - LodePNGColorProfile prof; - unsigned error = 0; - unsigned i, n, palettebits, palette_ok; - - lodepng_color_profile_init(&prof); - error = lodepng_get_color_profile(&prof, image, w, h, mode_in); - if (error) return error; - mode_out->key_defined = 0; - - if (prof.key && w * h <= 16) - { - prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/ - prof.key = 0; - if (prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ - } - n = prof.numcolors; - palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8)); - palette_ok = n <= 256 && prof.bits <= 8; - if (w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/ - if (!prof.colored && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/ - - if (palette_ok) - { - unsigned char* p = prof.palette; - lodepng_palette_clear(mode_out); /*remove potential earlier palette*/ - for (i = 0; i != prof.numcolors; ++i) - { - error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]); - if (error) break; - } - - mode_out->colortype = LCT_PALETTE; - mode_out->bitdepth = palettebits; - - if (mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize - && mode_in->bitdepth == mode_out->bitdepth) - { - /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/ - lodepng_color_mode_cleanup(mode_out); - lodepng_color_mode_copy(mode_out, mode_in); - } - } - else /*8-bit or 16-bit per channel*/ - { - mode_out->bitdepth = prof.bits; - mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA) - : (prof.colored ? LCT_RGB : LCT_GREY); - - if (prof.key) - { - unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/ - mode_out->key_r = prof.key_r & mask; - mode_out->key_g = prof.key_g & mask; - mode_out->key_b = prof.key_b & mask; - mode_out->key_defined = 1; - } - } - - return error; -} - -#endif /* #ifdef LODEPNG_COMPILE_ENCODER */ - -/* -Paeth predicter, used by PNG filter type 4 -The parameters are of type short, but should come from unsigned chars, the shorts -are only needed to make the paeth calculation correct. -*/ -static unsigned char paethPredictor(short a, short b, short c) -{ - short pa = abs(b - c); - short pb = abs(a - c); - short pc = abs(a + b - c - c); - - if (pc < pa && pc < pb) return (unsigned char)c; - else if (pb < pa) return (unsigned char)b; - else return (unsigned char)a; -} - -/*shared values used by multiple Adam7 related functions*/ - -static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/ -static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/ -static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/ -static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/ - -/* -Outputs various dimensions and positions in the image related to the Adam7 reduced images. -passw: output containing the width of the 7 passes -passh: output containing the height of the 7 passes -filter_passstart: output containing the index of the start and end of each - reduced image with filter bytes -padded_passstart output containing the index of the start and end of each - reduced image when without filter bytes but with padded scanlines -passstart: output containing the index of the start and end of each reduced - image without padding between scanlines, but still padding between the images -w, h: width and height of non-interlaced image -bpp: bits per pixel -"padded" is only relevant if bpp is less than 8 and a scanline or image does not - end at a full byte -*/ -static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], - size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) -{ - /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ - unsigned i; - - /*calculate width and height in pixels of each pass*/ - for (i = 0; i != 7; ++i) - { - passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; - passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; - if (passw[i] == 0) passh[i] = 0; - if (passh[i] == 0) passw[i] = 0; - } - - filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; - for (i = 0; i != 7; ++i) - { - /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ - filter_passstart[i + 1] = filter_passstart[i] - + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); - /*bits padded if needed to fill full byte at end of each scanline*/ - padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); - /*only padded at end of reduced image*/ - passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; - } -} - -#ifdef LODEPNG_COMPILE_DECODER - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / PNG Decoder / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/*read the information from the header and store it in the LodePNGInfo. return value is error*/ -unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state, - const unsigned char* in, size_t insize) -{ - LodePNGInfo* info = &state->info_png; - if (insize == 0 || in == 0) - { - CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/ - } - if (insize < 33) - { - CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/ - } - - /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/ - lodepng_info_cleanup(info); - lodepng_info_init(info); - - if (in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71 - || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) - { - CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/ - } - if (lodepng_chunk_length(in + 8) != 13) - { - CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/ - } - if (!lodepng_chunk_type_equals(in + 8, "IHDR")) - { - CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/ - } - - /*read the values given in the header*/ - *w = lodepng_read32bitInt(&in[16]); - *h = lodepng_read32bitInt(&in[20]); - info->color.bitdepth = in[24]; - info->color.colortype = (LodePNGColorType)in[25]; - info->compression_method = in[26]; - info->filter_method = in[27]; - info->interlace_method = in[28]; - - if (*w == 0 || *h == 0) - { - CERROR_RETURN_ERROR(state->error, 93); - } - - if (!state->decoder.ignore_crc) - { - unsigned CRC = lodepng_read32bitInt(&in[29]); - unsigned checksum = lodepng_crc32(&in[12], 17); - if (CRC != checksum) - { - CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/ - } - } - - /*error: only compression method 0 is allowed in the specification*/ - if (info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32); - /*error: only filter method 0 is allowed in the specification*/ - if (info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33); - /*error: only interlace methods 0 and 1 exist in the specification*/ - if (info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34); - - state->error = checkColorValidity(info->color.colortype, info->color.bitdepth); - return state->error; -} - -static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon, - size_t bytewidth, unsigned char filterType, size_t length) -{ - /* - For PNG filter method 0 - unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte, - the filter works byte per byte (bytewidth = 1) - precon is the previous unfiltered scanline, recon the result, scanline the current one - the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead - recon and scanline MAY be the same memory address! precon must be disjoint. - */ - - size_t i; - switch (filterType) - { - case 0: - for (i = 0; i != length; ++i) recon[i] = scanline[i]; - break; - case 1: - for (i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; - for (i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth]; - break; - case 2: - if (precon) - { - for (i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i]; - } - else - { - for (i = 0; i != length; ++i) recon[i] = scanline[i]; - } - break; - case 3: - if (precon) - { - for (i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1); - for (i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1); - } - else - { - for (i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; - for (i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1); - } - break; - case 4: - if (precon) - { - for (i = 0; i != bytewidth; ++i) - { - recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/ - } - for (i = bytewidth; i < length; ++i) - { - recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth])); - } - } - else - { - for (i = 0; i != bytewidth; ++i) - { - recon[i] = scanline[i]; - } - for (i = bytewidth; i < length; ++i) - { - /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/ - recon[i] = (scanline[i] + recon[i - bytewidth]); - } - } - break; - default: return 36; /*error: unexisting filter type given*/ - } - return 0; -} - -static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) -{ - /* - For PNG filter method 0 - this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times) - out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline - w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel - in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes) - */ - - unsigned y; - unsigned char* prevline = 0; - - /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ - size_t bytewidth = (bpp + 7) / 8; - size_t linebytes = (w * bpp + 7) / 8; - - for (y = 0; y < h; ++y) - { - size_t outindex = linebytes * y; - size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ - unsigned char filterType = in[inindex]; - - CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes)); - - prevline = &out[outindex]; - } - - return 0; -} - -/* -in: Adam7 interlaced image, with no padding bits between scanlines, but between - reduced images so that each reduced image starts at a byte. -out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h -bpp: bits per pixel -out has the following size in bits: w * h * bpp. -in is possibly bigger due to padding bits between reduced images. -out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation -(because that's likely a little bit faster) -NOTE: comments about padding bits are only relevant if bpp < 8 -*/ -static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) -{ - unsigned passw[7], passh[7]; - size_t filter_passstart[8], padded_passstart[8], passstart[8]; - unsigned i; - - Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); - - if (bpp >= 8) - { - for (i = 0; i != 7; ++i) - { - unsigned x, y, b; - size_t bytewidth = bpp / 8; - for (y = 0; y < passh[i]; ++y) - for (x = 0; x < passw[i]; ++x) - { - size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth; - size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; - for (b = 0; b < bytewidth; ++b) - { - out[pixeloutstart + b] = in[pixelinstart + b]; - } - } - } - } - else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ - { - for (i = 0; i != 7; ++i) - { - unsigned x, y, b; - unsigned ilinebits = bpp * passw[i]; - unsigned olinebits = bpp * w; - size_t obp, ibp; /*bit pointers (for out and in buffer)*/ - for (y = 0; y < passh[i]; ++y) - for (x = 0; x < passw[i]; ++x) - { - ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp); - obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; - for (b = 0; b < bpp; ++b) - { - unsigned char bit = readBitFromReversedStream(&ibp, in); - /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/ - setBitOfReversedStream0(&obp, out, bit); - } - } - } - } -} - -static void removePaddingBits(unsigned char* out, const unsigned char* in, - size_t olinebits, size_t ilinebits, unsigned h) -{ - /* - After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need - to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers - for the Adam7 code, the color convert code and the output to the user. - in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must - have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits - also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7 - only useful if (ilinebits - olinebits) is a value in the range 1..7 - */ - unsigned y; - size_t diff = ilinebits - olinebits; - size_t ibp = 0, obp = 0; /*input and output bit pointers*/ - for (y = 0; y < h; ++y) - { - size_t x; - for (x = 0; x < olinebits; ++x) - { - unsigned char bit = readBitFromReversedStream(&ibp, in); - setBitOfReversedStream(&obp, out, bit); - } - ibp += diff; - } -} - -/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from -the IDAT chunks (with filter index bytes and possible padding bits) -return value is error*/ -static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, - unsigned w, unsigned h, const LodePNGInfo* info_png) -{ - /* - This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. - Steps: - *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8) - *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace - NOTE: the in buffer will be overwritten with intermediate data! - */ - unsigned bpp = lodepng_get_bpp(&info_png->color); - if (bpp == 0) return 31; /*error: invalid colortype*/ - - if (info_png->interlace_method == 0) - { - if (bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) - { - CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp)); - removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h); - } - /*we can immediately filter into the out buffer, no other steps needed*/ - else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp)); - } - else /*interlace_method is 1 (Adam7)*/ - { - unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; - unsigned i; - - Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); - - for (i = 0; i != 7; ++i) - { - CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp)); - /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline, - move bytes instead of bits or move not at all*/ - if (bpp < 8) - { - /*remove padding bits in scanlines; after this there still may be padding - bits between the different reduced images: each reduced image still starts nicely at a byte*/ - removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp, - ((passw[i] * bpp + 7) / 8) * 8, passh[i]); - } - } - - Adam7_deinterlace(out, in, w, h, bpp); - } - - return 0; -} - -static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) -{ - unsigned pos = 0, i; - if (color->palette) lodepng_free(color->palette); - color->palettesize = chunkLength / 3; - color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize); - if (!color->palette && color->palettesize) - { - color->palettesize = 0; - return 83; /*alloc fail*/ - } - if (color->palettesize > 256) return 38; /*error: palette too big*/ - - for (i = 0; i != color->palettesize; ++i) - { - color->palette[4 * i + 0] = data[pos++]; /*R*/ - color->palette[4 * i + 1] = data[pos++]; /*G*/ - color->palette[4 * i + 2] = data[pos++]; /*B*/ - color->palette[4 * i + 3] = 255; /*alpha*/ - } - - return 0; /* OK */ -} - -static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) -{ - unsigned i; - if (color->colortype == LCT_PALETTE) - { - /*error: more alpha values given than there are palette entries*/ - if (chunkLength > color->palettesize) return 38; - - for (i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i]; - } - else if (color->colortype == LCT_GREY) - { - /*error: this chunk must be 2 bytes for greyscale image*/ - if (chunkLength != 2) return 30; - - color->key_defined = 1; - color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1]; - } - else if (color->colortype == LCT_RGB) - { - /*error: this chunk must be 6 bytes for RGB image*/ - if (chunkLength != 6) return 41; - - color->key_defined = 1; - color->key_r = 256u * data[0] + data[1]; - color->key_g = 256u * data[2] + data[3]; - color->key_b = 256u * data[4] + data[5]; - } - else return 42; /*error: tRNS chunk not allowed for other color models*/ - - return 0; /* OK */ -} - - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -/*background color chunk (bKGD)*/ -static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) -{ - if (info->color.colortype == LCT_PALETTE) - { - /*error: this chunk must be 1 byte for indexed color image*/ - if (chunkLength != 1) return 43; - - info->background_defined = 1; - info->background_r = info->background_g = info->background_b = data[0]; - } - else if (info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) - { - /*error: this chunk must be 2 bytes for greyscale image*/ - if (chunkLength != 2) return 44; - - info->background_defined = 1; - info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1]; - } - else if (info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) - { - /*error: this chunk must be 6 bytes for greyscale image*/ - if (chunkLength != 6) return 45; - - info->background_defined = 1; - info->background_r = 256u * data[0] + data[1]; - info->background_g = 256u * data[2] + data[3]; - info->background_b = 256u * data[4] + data[5]; - } - - return 0; /* OK */ -} - -/*text chunk (tEXt)*/ -static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) -{ - unsigned error = 0; - char *key = 0, *str = 0; - unsigned i; - - while (!error) /*not really a while loop, only used to break on error*/ - { - unsigned length, string2_begin; - - length = 0; - while (length < chunkLength && data[length] != 0) ++length; - /*even though it's not allowed by the standard, no error is thrown if - there's no null termination char, if the text is empty*/ - if (length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ - - key = (char*)lodepng_malloc(length + 1); - if (!key) CERROR_BREAK(error, 83); /*alloc fail*/ - - key[length] = 0; - for (i = 0; i != length; ++i) key[i] = (char)data[i]; - - string2_begin = length + 1; /*skip keyword null terminator*/ - - length = chunkLength < string2_begin ? 0 : chunkLength - string2_begin; - str = (char*)lodepng_malloc(length + 1); - if (!str) CERROR_BREAK(error, 83); /*alloc fail*/ - - str[length] = 0; - for (i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i]; - - error = lodepng_add_text(info, key, str); - - break; - } - - lodepng_free(key); - lodepng_free(str); - - return error; -} - -/*compressed text chunk (zTXt)*/ -static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, - const unsigned char* data, size_t chunkLength) -{ - unsigned error = 0; - unsigned i; - - unsigned length, string2_begin; - char *key = 0; - ucvector decoded; - - ucvector_init(&decoded); - - while (!error) /*not really a while loop, only used to break on error*/ - { - for (length = 0; length < chunkLength && data[length] != 0; ++length); - if (length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ - if (length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ - - key = (char*)lodepng_malloc(length + 1); - if (!key) CERROR_BREAK(error, 83); /*alloc fail*/ - - key[length] = 0; - for (i = 0; i != length; ++i) key[i] = (char)data[i]; - - if (data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ - - string2_begin = length + 2; - if (string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ - - length = chunkLength - string2_begin; - /*will fail if zlib error, e.g. if length is too small*/ - error = zlib_decompress(&decoded.data, &decoded.size, - (unsigned char*)(&data[string2_begin]), - length, zlibsettings); - if (error) break; - ucvector_push_back(&decoded, 0); - - error = lodepng_add_text(info, key, (char*)decoded.data); - - break; - } - - lodepng_free(key); - ucvector_cleanup(&decoded); - - return error; -} - -/*international text chunk (iTXt)*/ -static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, - const unsigned char* data, size_t chunkLength) -{ - unsigned error = 0; - unsigned i; - - unsigned length, begin, compressed; - char *key = 0, *langtag = 0, *transkey = 0; - ucvector decoded; - ucvector_init(&decoded); - - while (!error) /*not really a while loop, only used to break on error*/ - { - /*Quick check if the chunk length isn't too small. Even without check - it'd still fail with other error checks below if it's too short. This just gives a different error code.*/ - if (chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/ - - /*read the key*/ - for (length = 0; length < chunkLength && data[length] != 0; ++length); - if (length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/ - if (length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ - - key = (char*)lodepng_malloc(length + 1); - if (!key) CERROR_BREAK(error, 83); /*alloc fail*/ - - key[length] = 0; - for (i = 0; i != length; ++i) key[i] = (char)data[i]; - - /*read the compression method*/ - compressed = data[length + 1]; - if (data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ - - /*even though it's not allowed by the standard, no error is thrown if - there's no null termination char, if the text is empty for the next 3 texts*/ - - /*read the langtag*/ - begin = length + 3; - length = 0; - for (i = begin; i < chunkLength && data[i] != 0; ++i) ++length; - - langtag = (char*)lodepng_malloc(length + 1); - if (!langtag) CERROR_BREAK(error, 83); /*alloc fail*/ - - langtag[length] = 0; - for (i = 0; i != length; ++i) langtag[i] = (char)data[begin + i]; - - /*read the transkey*/ - begin += length + 1; - length = 0; - for (i = begin; i < chunkLength && data[i] != 0; ++i) ++length; - - transkey = (char*)lodepng_malloc(length + 1); - if (!transkey) CERROR_BREAK(error, 83); /*alloc fail*/ - - transkey[length] = 0; - for (i = 0; i != length; ++i) transkey[i] = (char)data[begin + i]; - - /*read the actual text*/ - begin += length + 1; - - length = chunkLength < begin ? 0 : chunkLength - begin; - - if (compressed) - { - /*will fail if zlib error, e.g. if length is too small*/ - error = zlib_decompress(&decoded.data, &decoded.size, - (unsigned char*)(&data[begin]), - length, zlibsettings); - if (error) break; - if (decoded.allocsize < decoded.size) decoded.allocsize = decoded.size; - ucvector_push_back(&decoded, 0); - } - else - { - if (!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/); - - decoded.data[length] = 0; - for (i = 0; i != length; ++i) decoded.data[i] = data[begin + i]; - } - - error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data); - - break; - } - - lodepng_free(key); - lodepng_free(langtag); - lodepng_free(transkey); - ucvector_cleanup(&decoded); - - return error; -} - -static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) -{ - if (chunkLength != 7) return 73; /*invalid tIME chunk size*/ - - info->time_defined = 1; - info->time.year = 256u * data[0] + data[1]; - info->time.month = data[2]; - info->time.day = data[3]; - info->time.hour = data[4]; - info->time.minute = data[5]; - info->time.second = data[6]; - - return 0; /* OK */ -} - -static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) -{ - if (chunkLength != 9) return 74; /*invalid pHYs chunk size*/ - - info->phys_defined = 1; - info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3]; - info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7]; - info->phys_unit = data[8]; - - return 0; /* OK */ -} -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/ -static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h, - LodePNGState* state, - const unsigned char* in, size_t insize) -{ - unsigned char IEND = 0; - const unsigned char* chunk; - size_t i; - ucvector idat; /*the data from idat chunks*/ - ucvector scanlines; - size_t predict; - size_t numpixels; - size_t outsize = 0; - - /*for unknown chunk order*/ - unsigned unknown = 0; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/ -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - - /*provide some proper output values if error will happen*/ - *out = 0; - - state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/ - if (state->error) return; - - numpixels = *w * *h; - - /*multiplication overflow*/ - if (*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92); - /*multiplication overflow possible further below. Allows up to 2^31-1 pixel - bytes with 16-bit RGBA, the rest is room for filter bytes.*/ - if (numpixels > 268435455) CERROR_RETURN(state->error, 92); - - ucvector_init(&idat); - chunk = &in[33]; /*first byte of the first chunk after the header*/ - - /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk. - IDAT data is put at the start of the in buffer*/ - while (!IEND && !state->error) - { - unsigned chunkLength; - const unsigned char* data; /*the data in the chunk*/ - - /*error: size of the in buffer too small to contain next chunk*/ - if ((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30); - - /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/ - chunkLength = lodepng_chunk_length(chunk); - /*error: chunk length larger than the max PNG chunk size*/ - if (chunkLength > 2147483647) CERROR_BREAK(state->error, 63); - - if ((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in) - { - CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/ - } - - data = lodepng_chunk_data_const(chunk); - - /*IDAT chunk, containing compressed image data*/ - if (lodepng_chunk_type_equals(chunk, "IDAT")) - { - size_t oldsize = idat.size; - if (!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/); - for (i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i]; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - critical_pos = 3; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - } - /*IEND chunk*/ - else if (lodepng_chunk_type_equals(chunk, "IEND")) - { - IEND = 1; - } - /*palette chunk (PLTE)*/ - else if (lodepng_chunk_type_equals(chunk, "PLTE")) - { - state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength); - if (state->error) break; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - critical_pos = 2; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - } - /*palette transparency chunk (tRNS)*/ - else if (lodepng_chunk_type_equals(chunk, "tRNS")) - { - state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength); - if (state->error) break; - } -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*background color chunk (bKGD)*/ - else if (lodepng_chunk_type_equals(chunk, "bKGD")) - { - state->error = readChunk_bKGD(&state->info_png, data, chunkLength); - if (state->error) break; - } - /*text chunk (tEXt)*/ - else if (lodepng_chunk_type_equals(chunk, "tEXt")) - { - if (state->decoder.read_text_chunks) - { - state->error = readChunk_tEXt(&state->info_png, data, chunkLength); - if (state->error) break; - } - } - /*compressed text chunk (zTXt)*/ - else if (lodepng_chunk_type_equals(chunk, "zTXt")) - { - if (state->decoder.read_text_chunks) - { - state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); - if (state->error) break; - } - } - /*international text chunk (iTXt)*/ - else if (lodepng_chunk_type_equals(chunk, "iTXt")) - { - if (state->decoder.read_text_chunks) - { - state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); - if (state->error) break; - } - } - else if (lodepng_chunk_type_equals(chunk, "tIME")) - { - state->error = readChunk_tIME(&state->info_png, data, chunkLength); - if (state->error) break; - } - else if (lodepng_chunk_type_equals(chunk, "pHYs")) - { - state->error = readChunk_pHYs(&state->info_png, data, chunkLength); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - else /*it's not an implemented chunk type, so ignore it: skip over the data*/ - { - /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/ - if (!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69); - - unknown = 1; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - if (state->decoder.remember_unknown_chunks) - { - state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1], - &state->info_png.unknown_chunks_size[critical_pos - 1], chunk); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - } - - if (!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/ - { - if (lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/ - } - - if (!IEND) chunk = lodepng_chunk_next_const(chunk); - } - - ucvector_init(&scanlines); - /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation. - If the decompressed size does not match the prediction, the image must be corrupt.*/ - if (state->info_png.interlace_method == 0) - { - /*The extra *h is added because this are the filter bytes every scanline starts with*/ - predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h; - } - else - { - /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/ - const LodePNGColorMode* color = &state->info_png.color; - predict = 0; - predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); - if (*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); - predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color) + ((*h + 3) >> 3); - if (*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color) + ((*h + 3) >> 2); - predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color) + ((*h + 1) >> 2); - if (*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color) + ((*h + 1) >> 1); - predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color) + ((*h + 0) >> 1); - } - if (!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/ - if (!state->error) - { - state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data, - idat.size, &state->decoder.zlibsettings); - if (!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/ - } - ucvector_cleanup(&idat); - - if (!state->error) - { - outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color); - *out = (unsigned char*)lodepng_malloc(outsize); - if (!*out) state->error = 83; /*alloc fail*/ - } - if (!state->error) - { - for (i = 0; i < outsize; i++) (*out)[i] = 0; - state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png); - } - ucvector_cleanup(&scanlines); -} - -unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, - LodePNGState* state, - const unsigned char* in, size_t insize) -{ - *out = 0; - decodeGeneric(out, w, h, state, in, insize); - if (state->error) return state->error; - if (!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color)) - { - /*same color type, no copying or converting of data needed*/ - /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype - the raw image has to the end user*/ - if (!state->decoder.color_convert) - { - state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color); - if (state->error) return state->error; - } - } - else - { - /*color conversion needed; sort of copy of the data*/ - unsigned char* data = *out; - size_t outsize; - - /*TODO: check if this works according to the statement in the documentation: "The converter can convert - from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/ - if (!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA) - && !(state->info_raw.bitdepth == 8)) - { - return 56; /*unsupported color mode conversion*/ - } - - outsize = lodepng_get_raw_size(*w, *h, &state->info_raw); - *out = (unsigned char*)lodepng_malloc(outsize); - if (!(*out)) - { - state->error = 83; /*alloc fail*/ - } - else state->error = lodepng_convert(*out, data, &state->info_raw, - &state->info_png.color, *w, *h); - lodepng_free(data); - } - return state->error; -} - -unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, - size_t insize, LodePNGColorType colortype, unsigned bitdepth) -{ - unsigned error; - LodePNGState state; - lodepng_state_init(&state); - state.info_raw.colortype = colortype; - state.info_raw.bitdepth = bitdepth; - error = lodepng_decode(out, w, h, &state, in, insize); - lodepng_state_cleanup(&state); - return error; -} - -unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) -{ - return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8); -} - -unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) -{ - return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8); -} - -#ifdef LODEPNG_COMPILE_DISK -unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename, - LodePNGColorType colortype, unsigned bitdepth) -{ - unsigned char* buffer = 0; - size_t buffersize; - unsigned error; - error = lodepng_load_file(&buffer, &buffersize, filename); - if (!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth); - lodepng_free(buffer); - return error; -} - -unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) -{ - return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8); -} - -unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) -{ - return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8); -} -#endif /*LODEPNG_COMPILE_DISK*/ - -void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) -{ - settings->color_convert = 1; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - settings->read_text_chunks = 1; - settings->remember_unknown_chunks = 0; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - settings->ignore_crc = 0; - lodepng_decompress_settings_init(&settings->zlibsettings); -} - -#endif /*LODEPNG_COMPILE_DECODER*/ - -#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) - -void lodepng_state_init(LodePNGState* state) -{ -#ifdef LODEPNG_COMPILE_DECODER - lodepng_decoder_settings_init(&state->decoder); -#endif /*LODEPNG_COMPILE_DECODER*/ -#ifdef LODEPNG_COMPILE_ENCODER - lodepng_encoder_settings_init(&state->encoder); -#endif /*LODEPNG_COMPILE_ENCODER*/ - lodepng_color_mode_init(&state->info_raw); - lodepng_info_init(&state->info_png); - state->error = 1; -} - -void lodepng_state_cleanup(LodePNGState* state) -{ - lodepng_color_mode_cleanup(&state->info_raw); - lodepng_info_cleanup(&state->info_png); -} - -void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) -{ - lodepng_state_cleanup(dest); - *dest = *source; - lodepng_color_mode_init(&dest->info_raw); - lodepng_info_init(&dest->info_png); - dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if (dest->error) return; - dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if (dest->error) return; -} - -#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ - -#ifdef LODEPNG_COMPILE_ENCODER - -/* ////////////////////////////////////////////////////////////////////////// */ -/* / PNG Encoder / */ -/* ////////////////////////////////////////////////////////////////////////// */ - -/*chunkName must be string of 4 characters*/ -static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length) -{ - CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data)); - out->allocsize = out->size; /*fix the allocsize again*/ - return 0; -} - -static void writeSignature(ucvector* out) -{ - /*8 bytes PNG signature, aka the magic bytes*/ - ucvector_push_back(out, 137); - ucvector_push_back(out, 80); - ucvector_push_back(out, 78); - ucvector_push_back(out, 71); - ucvector_push_back(out, 13); - ucvector_push_back(out, 10); - ucvector_push_back(out, 26); - ucvector_push_back(out, 10); -} - -static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method) -{ - unsigned error = 0; - ucvector header; - ucvector_init(&header); - - lodepng_add32bitInt(&header, w); /*width*/ - lodepng_add32bitInt(&header, h); /*height*/ - ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/ - ucvector_push_back(&header, (unsigned char)colortype); /*color type*/ - ucvector_push_back(&header, 0); /*compression method*/ - ucvector_push_back(&header, 0); /*filter method*/ - ucvector_push_back(&header, interlace_method); /*interlace method*/ - - error = addChunk(out, "IHDR", header.data, header.size); - ucvector_cleanup(&header); - - return error; -} - -static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info) -{ - unsigned error = 0; - size_t i; - ucvector PLTE; - ucvector_init(&PLTE); - for (i = 0; i != info->palettesize * 4; ++i) - { - /*add all channels except alpha channel*/ - if (i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]); - } - error = addChunk(out, "PLTE", PLTE.data, PLTE.size); - ucvector_cleanup(&PLTE); - - return error; -} - -static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info) -{ - unsigned error = 0; - size_t i; - ucvector tRNS; - ucvector_init(&tRNS); - if (info->colortype == LCT_PALETTE) - { - size_t amount = info->palettesize; - /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/ - for (i = info->palettesize; i != 0; --i) - { - if (info->palette[4 * (i - 1) + 3] == 255) --amount; - else break; - } - /*add only alpha channel*/ - for (i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]); - } - else if (info->colortype == LCT_GREY) - { - if (info->key_defined) - { - ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); - } - } - else if (info->colortype == LCT_RGB) - { - if (info->key_defined) - { - ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8)); - ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255)); - } - } - - error = addChunk(out, "tRNS", tRNS.data, tRNS.size); - ucvector_cleanup(&tRNS); - - return error; -} - -static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize, - LodePNGCompressSettings* zlibsettings) -{ - ucvector zlibdata; - unsigned error = 0; - - /*compress with the Zlib compressor*/ - ucvector_init(&zlibdata); - error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings); - if (!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size); - ucvector_cleanup(&zlibdata); - - return error; -} - -static unsigned addChunk_IEND(ucvector* out) -{ - unsigned error = 0; - error = addChunk(out, "IEND", 0, 0); - return error; -} - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - -static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) -{ - unsigned error = 0; - size_t i; - ucvector text; - ucvector_init(&text); - for (i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]); - if (i < 1 || i > 79) return 89; /*error: invalid keyword size*/ - ucvector_push_back(&text, 0); /*0 termination char*/ - for (i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]); - error = addChunk(out, "tEXt", text.data, text.size); - ucvector_cleanup(&text); - - return error; -} - -static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring, - LodePNGCompressSettings* zlibsettings) -{ - unsigned error = 0; - ucvector data, compressed; - size_t i, textsize = strlen(textstring); - - ucvector_init(&data); - ucvector_init(&compressed); - for (i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); - if (i < 1 || i > 79) return 89; /*error: invalid keyword size*/ - ucvector_push_back(&data, 0); /*0 termination char*/ - ucvector_push_back(&data, 0); /*compression method: 0*/ - - error = zlib_compress(&compressed.data, &compressed.size, - (unsigned char*)textstring, textsize, zlibsettings); - if (!error) - { - for (i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]); - error = addChunk(out, "zTXt", data.data, data.size); - } - - ucvector_cleanup(&compressed); - ucvector_cleanup(&data); - return error; -} - -static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag, - const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings) -{ - unsigned error = 0; - ucvector data; - size_t i, textsize = strlen(textstring); - - ucvector_init(&data); - - for (i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); - if (i < 1 || i > 79) return 89; /*error: invalid keyword size*/ - ucvector_push_back(&data, 0); /*null termination char*/ - ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/ - ucvector_push_back(&data, 0); /*compression method*/ - for (i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]); - ucvector_push_back(&data, 0); /*null termination char*/ - for (i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]); - ucvector_push_back(&data, 0); /*null termination char*/ - - if (compressed) - { - ucvector compressed_data; - ucvector_init(&compressed_data); - error = zlib_compress(&compressed_data.data, &compressed_data.size, - (unsigned char*)textstring, textsize, zlibsettings); - if (!error) - { - for (i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]); - } - ucvector_cleanup(&compressed_data); - } - else /*not compressed*/ - { - for (i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]); - } - - if (!error) error = addChunk(out, "iTXt", data.data, data.size); - ucvector_cleanup(&data); - return error; -} - -static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) -{ - unsigned error = 0; - ucvector bKGD; - ucvector_init(&bKGD); - if (info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) - { - ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); - } - else if (info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) - { - ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8)); - ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255)); - } - else if (info->color.colortype == LCT_PALETTE) - { - ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/ - } - - error = addChunk(out, "bKGD", bKGD.data, bKGD.size); - ucvector_cleanup(&bKGD); - - return error; -} - -static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) -{ - unsigned error = 0; - unsigned char* data = (unsigned char*)lodepng_malloc(7); - if (!data) return 83; /*alloc fail*/ - data[0] = (unsigned char)(time->year >> 8); - data[1] = (unsigned char)(time->year & 255); - data[2] = (unsigned char)time->month; - data[3] = (unsigned char)time->day; - data[4] = (unsigned char)time->hour; - data[5] = (unsigned char)time->minute; - data[6] = (unsigned char)time->second; - error = addChunk(out, "tIME", data, 7); - lodepng_free(data); - return error; -} - -static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) -{ - unsigned error = 0; - ucvector data; - ucvector_init(&data); - - lodepng_add32bitInt(&data, info->phys_x); - lodepng_add32bitInt(&data, info->phys_y); - ucvector_push_back(&data, info->phys_unit); - - error = addChunk(out, "pHYs", data.data, data.size); - ucvector_cleanup(&data); - - return error; -} - -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline, - size_t length, size_t bytewidth, unsigned char filterType) -{ - size_t i; - switch (filterType) - { - case 0: /*None*/ - for (i = 0; i != length; ++i) out[i] = scanline[i]; - break; - case 1: /*Sub*/ - for (i = 0; i != bytewidth; ++i) out[i] = scanline[i]; - for (i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth]; - break; - case 2: /*Up*/ - if (prevline) - { - for (i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i]; - } - else - { - for (i = 0; i != length; ++i) out[i] = scanline[i]; - } - break; - case 3: /*Average*/ - if (prevline) - { - for (i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1); - for (i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1); - } - else - { - for (i = 0; i != bytewidth; ++i) out[i] = scanline[i]; - for (i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1); - } - break; - case 4: /*Paeth*/ - if (prevline) - { - /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/ - for (i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]); - for (i = bytewidth; i < length; ++i) - { - out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth])); - } - } - else - { - for (i = 0; i != bytewidth; ++i) out[i] = scanline[i]; - /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/ - for (i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]); - } - break; - default: return; /*unexisting filter type given*/ - } -} - -/* log2 approximation. A slight bit faster than std::log. */ -static float flog2(float f) -{ - float result = 0; - while (f > 32) { result += 4; f /= 16; } - while (f > 2) { ++result; f /= 2; } - return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f); -} - -static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, - const LodePNGColorMode* info, const LodePNGEncoderSettings* settings) -{ - /* - For PNG filter method 0 - out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are - the scanlines with 1 extra byte per scanline - */ - - unsigned bpp = lodepng_get_bpp(info); - /*the width of a scanline in bytes, not including the filter type*/ - size_t linebytes = (w * bpp + 7) / 8; - /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ - size_t bytewidth = (bpp + 7) / 8; - const unsigned char* prevline = 0; - unsigned x, y; - unsigned error = 0; - LodePNGFilterStrategy strategy = settings->filter_strategy; - - /* - There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard: - * If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. - use fixed filtering, with the filter None). - * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is - not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply - all five filters and select the filter that produces the smallest sum of absolute values per row. - This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true. - - If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed, - but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum - heuristic is used. - */ - if (settings->filter_palette_zero && - (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO; - - if (bpp == 0) return 31; /*error: invalid color type*/ - - if (strategy == LFS_ZERO) - { - for (y = 0; y != h; ++y) - { - size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ - size_t inindex = linebytes * y; - out[outindex] = 0; /*filter type byte*/ - filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0); - prevline = &in[inindex]; - } - } - else if (strategy == LFS_MINSUM) - { - /*adaptive filtering*/ - size_t sum[5]; - unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ - size_t smallest = 0; - unsigned char type, bestType = 0; - - for (type = 0; type != 5; ++type) - { - attempt[type] = (unsigned char*)lodepng_malloc(linebytes); - if (!attempt[type]) return 83; /*alloc fail*/ - } - - if (!error) - { - for (y = 0; y != h; ++y) - { - /*try the 5 filter types*/ - for (type = 0; type != 5; ++type) - { - filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); - - /*calculate the sum of the result*/ - sum[type] = 0; - if (type == 0) - { - for (x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]); - } - else - { - for (x = 0; x != linebytes; ++x) - { - /*For differences, each byte should be treated as signed, values above 127 are negative - (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there. - This means filtertype 0 is almost never chosen, but that is justified.*/ - unsigned char s = attempt[type][x]; - sum[type] += s < 128 ? s : (255U - s); - } - } - - /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ - if (type == 0 || sum[type] < smallest) - { - bestType = type; - smallest = sum[type]; - } - } - - prevline = &in[y * linebytes]; - - /*now fill the out values*/ - out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ - for (x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; - } - } - - for (type = 0; type != 5; ++type) lodepng_free(attempt[type]); - } - else if (strategy == LFS_ENTROPY) - { - float sum[5]; - unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ - float smallest = 0; - unsigned type, bestType = 0; - unsigned count[256]; - - for (type = 0; type != 5; ++type) - { - attempt[type] = (unsigned char*)lodepng_malloc(linebytes); - if (!attempt[type]) return 83; /*alloc fail*/ - } - - for (y = 0; y != h; ++y) - { - /*try the 5 filter types*/ - for (type = 0; type != 5; ++type) - { - filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); - for (x = 0; x != 256; ++x) count[x] = 0; - for (x = 0; x != linebytes; ++x) ++count[attempt[type][x]]; - ++count[type]; /*the filter type itself is part of the scanline*/ - sum[type] = 0; - for (x = 0; x != 256; ++x) - { - float p = count[x] / (float)(linebytes + 1); - sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p; - } - /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ - if (type == 0 || sum[type] < smallest) - { - bestType = type; - smallest = sum[type]; - } - } - - prevline = &in[y * linebytes]; - - /*now fill the out values*/ - out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ - for (x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; - } - - for (type = 0; type != 5; ++type) lodepng_free(attempt[type]); - } - else if (strategy == LFS_PREDEFINED) - { - for (y = 0; y != h; ++y) - { - size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ - size_t inindex = linebytes * y; - unsigned char type = settings->predefined_filters[y]; - out[outindex] = type; /*filter type byte*/ - filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type); - prevline = &in[inindex]; - } - } - else if (strategy == LFS_BRUTE_FORCE) - { - /*brute force filter chooser. - deflate the scanline after every filter attempt to see which one deflates best. - This is very slow and gives only slightly smaller, sometimes even larger, result*/ - size_t size[5]; - unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ - size_t smallest = 0; - unsigned type = 0, bestType = 0; - unsigned char* dummy; - LodePNGCompressSettings zlibsettings = settings->zlibsettings; - /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose, - to simulate the true case where the tree is the same for the whole image. Sometimes it gives - better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare - cases better compression. It does make this a bit less slow, so it's worth doing this.*/ - zlibsettings.btype = 1; - /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG - images only, so disable it*/ - zlibsettings.custom_zlib = 0; - zlibsettings.custom_deflate = 0; - for (type = 0; type != 5; ++type) - { - attempt[type] = (unsigned char*)lodepng_malloc(linebytes); - if (!attempt[type]) return 83; /*alloc fail*/ - } - for (y = 0; y != h; ++y) /*try the 5 filter types*/ - { - for (type = 0; type != 5; ++type) - { - unsigned testsize = linebytes; - /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/ - - filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); - size[type] = 0; - dummy = 0; - zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings); - lodepng_free(dummy); - /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/ - if (type == 0 || size[type] < smallest) - { - bestType = type; - smallest = size[type]; - } - } - prevline = &in[y * linebytes]; - out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ - for (x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; - } - for (type = 0; type != 5; ++type) lodepng_free(attempt[type]); - } - else return 88; /* unknown filter strategy */ - - return error; -} - -static void addPaddingBits(unsigned char* out, const unsigned char* in, - size_t olinebits, size_t ilinebits, unsigned h) -{ - /*The opposite of the removePaddingBits function - olinebits must be >= ilinebits*/ - unsigned y; - size_t diff = olinebits - ilinebits; - size_t obp = 0, ibp = 0; /*bit pointers*/ - for (y = 0; y != h; ++y) - { - size_t x; - for (x = 0; x < ilinebits; ++x) - { - unsigned char bit = readBitFromReversedStream(&ibp, in); - setBitOfReversedStream(&obp, out, bit); - } - /*obp += diff; --> no, fill in some value in the padding bits too, to avoid - "Use of uninitialised value of size ###" warning from valgrind*/ - for (x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0); - } -} - -/* -in: non-interlaced image with size w*h -out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with - no padding bits between scanlines, but between reduced images so that each - reduced image starts at a byte. -bpp: bits per pixel -there are no padding bits, not between scanlines, not between reduced images -in has the following size in bits: w * h * bpp. -out is possibly bigger due to padding bits between reduced images -NOTE: comments about padding bits are only relevant if bpp < 8 -*/ -static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) -{ - unsigned passw[7], passh[7]; - size_t filter_passstart[8], padded_passstart[8], passstart[8]; - unsigned i; - - Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); - - if (bpp >= 8) - { - for (i = 0; i != 7; ++i) - { - unsigned x, y, b; - size_t bytewidth = bpp / 8; - for (y = 0; y < passh[i]; ++y) - for (x = 0; x < passw[i]; ++x) - { - size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; - size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth; - for (b = 0; b < bytewidth; ++b) - { - out[pixeloutstart + b] = in[pixelinstart + b]; - } - } - } - } - else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ - { - for (i = 0; i != 7; ++i) - { - unsigned x, y, b; - unsigned ilinebits = bpp * passw[i]; - unsigned olinebits = bpp * w; - size_t obp, ibp; /*bit pointers (for out and in buffer)*/ - for (y = 0; y < passh[i]; ++y) - for (x = 0; x < passw[i]; ++x) - { - ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; - obp = (8 * passstart[i]) + (y * ilinebits + x * bpp); - for (b = 0; b < bpp; ++b) - { - unsigned char bit = readBitFromReversedStream(&ibp, in); - setBitOfReversedStream(&obp, out, bit); - } - } - } - } -} - -/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image. -return value is error**/ -static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in, - unsigned w, unsigned h, - const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings) -{ - /* - This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps: - *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter - *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter - */ - unsigned bpp = lodepng_get_bpp(&info_png->color); - unsigned error = 0; - - if (info_png->interlace_method == 0) - { - *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/ - *out = (unsigned char*)lodepng_malloc(*outsize); - if (!(*out) && (*outsize)) error = 83; /*alloc fail*/ - - if (!error) - { - /*non multiple of 8 bits per scanline, padding bits needed per scanline*/ - if (bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) - { - unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8)); - if (!padded) error = 83; /*alloc fail*/ - if (!error) - { - addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h); - error = filter(*out, padded, w, h, &info_png->color, settings); - } - lodepng_free(padded); - } - else - { - /*we can immediately filter into the out buffer, no other steps needed*/ - error = filter(*out, in, w, h, &info_png->color, settings); - } - } - } - else /*interlace_method is 1 (Adam7)*/ - { - unsigned passw[7], passh[7]; - size_t filter_passstart[8], padded_passstart[8], passstart[8]; - unsigned char* adam7; - - Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); - - *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/ - *out = (unsigned char*)lodepng_malloc(*outsize); - if (!(*out)) error = 83; /*alloc fail*/ - - adam7 = (unsigned char*)lodepng_malloc(passstart[7]); - if (!adam7 && passstart[7]) error = 83; /*alloc fail*/ - - if (!error) - { - unsigned i; - - Adam7_interlace(adam7, in, w, h, bpp); - for (i = 0; i != 7; ++i) - { - if (bpp < 8) - { - unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]); - if (!padded) ERROR_BREAK(83); /*alloc fail*/ - addPaddingBits(padded, &adam7[passstart[i]], - ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]); - error = filter(&(*out)[filter_passstart[i]], padded, - passw[i], passh[i], &info_png->color, settings); - lodepng_free(padded); - } - else - { - error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]], - passw[i], passh[i], &info_png->color, settings); - } - - if (error) break; - } - } - - lodepng_free(adam7); - } - - return error; -} - -/* -palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA... -returns 0 if the palette is opaque, -returns 1 if the palette has a single color with alpha 0 ==> color key -returns 2 if the palette is semi-translucent. -*/ -static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize) -{ - size_t i; - unsigned key = 0; - unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/ - for (i = 0; i != palettesize; ++i) - { - if (!key && palette[4 * i + 3] == 0) - { - r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2]; - key = 1; - i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/ - } - else if (palette[4 * i + 3] != 255) return 2; - /*when key, no opaque RGB may have key's RGB*/ - else if (key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2; - } - return key; -} - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize) -{ - unsigned char* inchunk = data; - while ((size_t)(inchunk - data) < datasize) - { - CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk)); - out->allocsize = out->size; /*fix the allocsize again*/ - inchunk = lodepng_chunk_next(inchunk); - } - return 0; -} -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -unsigned lodepng_encode(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h, - LodePNGState* state) -{ - LodePNGInfo info; - ucvector outv; - unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/ - size_t datasize = 0; - - /*provide some proper output values if error will happen*/ - *out = 0; - *outsize = 0; - state->error = 0; - - lodepng_info_init(&info); - lodepng_info_copy(&info, &state->info_png); - - if ((info.color.colortype == LCT_PALETTE || state->encoder.force_palette) - && (info.color.palettesize == 0 || info.color.palettesize > 256)) - { - state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/ - return state->error; - } - - if (state->encoder.auto_convert) - { - state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw); - } - if (state->error) return state->error; - - if (state->encoder.zlibsettings.btype > 2) - { - CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/ - } - if (state->info_png.interlace_method > 1) - { - CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/ - } - - state->error = checkColorValidity(info.color.colortype, info.color.bitdepth); - if (state->error) return state->error; /*error: unexisting color type given*/ - state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth); - if (state->error) return state->error; /*error: unexisting color type given*/ - - if (!lodepng_color_mode_equal(&state->info_raw, &info.color)) - { - unsigned char* converted; - size_t size = (w * h * (size_t)lodepng_get_bpp(&info.color) + 7) / 8; - - converted = (unsigned char*)lodepng_malloc(size); - if (!converted && size) state->error = 83; /*alloc fail*/ - if (!state->error) - { - state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h); - } - if (!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder); - lodepng_free(converted); - } - else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder); - - ucvector_init(&outv); - while (!state->error) /*while only executed once, to break on error*/ - { -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - size_t i; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - /*write signature and chunks*/ - writeSignature(&outv); - /*IHDR*/ - addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method); -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*unknown chunks between IHDR and PLTE*/ - if (info.unknown_chunks_data[0]) - { - state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - /*PLTE*/ - if (info.color.colortype == LCT_PALETTE) - { - addChunk_PLTE(&outv, &info.color); - } - if (state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA)) - { - addChunk_PLTE(&outv, &info.color); - } - /*tRNS*/ - if (info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0) - { - addChunk_tRNS(&outv, &info.color); - } - if ((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined) - { - addChunk_tRNS(&outv, &info.color); - } -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*bKGD (must come between PLTE and the IDAt chunks*/ - if (info.background_defined) addChunk_bKGD(&outv, &info); - /*pHYs (must come before the IDAT chunks)*/ - if (info.phys_defined) addChunk_pHYs(&outv, &info); - - /*unknown chunks between PLTE and IDAT*/ - if (info.unknown_chunks_data[1]) - { - state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - /*IDAT (multiple IDAT chunks must be consecutive)*/ - state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings); - if (state->error) break; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*tIME*/ - if (info.time_defined) addChunk_tIME(&outv, &info.time); - /*tEXt and/or zTXt*/ - for (i = 0; i != info.text_num; ++i) - { - if (strlen(info.text_keys[i]) > 79) - { - state->error = 66; /*text chunk too large*/ - break; - } - if (strlen(info.text_keys[i]) < 1) - { - state->error = 67; /*text chunk too small*/ - break; - } - if (state->encoder.text_compression) - { - addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings); - } - else - { - addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]); - } - } - /*LodePNG version id in text chunk*/ - if (state->encoder.add_id) - { - unsigned alread_added_id_text = 0; - for (i = 0; i != info.text_num; ++i) - { - if (!strcmp(info.text_keys[i], "LodePNG")) - { - alread_added_id_text = 1; - break; - } - } - if (alread_added_id_text == 0) - { - addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/ - } - } - /*iTXt*/ - for (i = 0; i != info.itext_num; ++i) - { - if (strlen(info.itext_keys[i]) > 79) - { - state->error = 66; /*text chunk too large*/ - break; - } - if (strlen(info.itext_keys[i]) < 1) - { - state->error = 67; /*text chunk too small*/ - break; - } - addChunk_iTXt(&outv, state->encoder.text_compression, - info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i], - &state->encoder.zlibsettings); - } - - /*unknown chunks between IDAT and IEND*/ - if (info.unknown_chunks_data[2]) - { - state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]); - if (state->error) break; - } -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - addChunk_IEND(&outv); - - break; /*this isn't really a while loop; no error happened so break out now!*/ - } - - lodepng_info_cleanup(&info); - lodepng_free(data); - /*instead of cleaning the vector up, give it to the output*/ - *out = outv.data; - *outsize = outv.size; - - return state->error; -} - -unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image, - unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) -{ - unsigned error; - LodePNGState state; - lodepng_state_init(&state); - state.info_raw.colortype = colortype; - state.info_raw.bitdepth = bitdepth; - state.info_png.color.colortype = colortype; - state.info_png.color.bitdepth = bitdepth; - lodepng_encode(out, outsize, image, w, h, &state); - error = state.error; - lodepng_state_cleanup(&state); - return error; -} - -unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) -{ - return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8); -} - -unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) -{ - return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8); -} - -#ifdef LODEPNG_COMPILE_DISK -unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) -{ - unsigned char* buffer; - size_t buffersize; - unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth); - if (!error) error = lodepng_save_file(buffer, buffersize, filename); - lodepng_free(buffer); - return error; -} - -unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) -{ - return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8); -} - -unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) -{ - return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8); -} -#endif /*LODEPNG_COMPILE_DISK*/ - -void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) -{ - lodepng_compress_settings_init(&settings->zlibsettings); - settings->filter_palette_zero = 1; - settings->filter_strategy = LFS_MINSUM; - settings->auto_convert = 1; - settings->force_palette = 0; - settings->predefined_filters = 0; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - settings->add_id = 0; - settings->text_compression = 1; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} - -#endif /*LODEPNG_COMPILE_ENCODER*/ -#endif /*LODEPNG_COMPILE_PNG*/ - -#ifdef LODEPNG_COMPILE_ERROR_TEXT -/* -This returns the description of a numerical error code in English. This is also -the documentation of all the error codes. -*/ -const char* lodepng_error_text(unsigned code) -{ - switch (code) - { - case 0: return "no error, everything went ok"; - case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/ - case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/ - case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/ - case 13: return "problem while processing dynamic deflate block"; - case 14: return "problem while processing dynamic deflate block"; - case 15: return "problem while processing dynamic deflate block"; - case 16: return "unexisting code while processing dynamic deflate block"; - case 17: return "end of out buffer memory reached while inflating"; - case 18: return "invalid distance code while inflating"; - case 19: return "end of out buffer memory reached while inflating"; - case 20: return "invalid deflate block BTYPE encountered while decoding"; - case 21: return "NLEN is not ones complement of LEN in a deflate block"; - /*end of out buffer memory reached while inflating: - This can happen if the inflated deflate data is longer than the amount of bytes required to fill up - all the pixels of the image, given the color depth and image dimensions. Something that doesn't - happen in a normal, well encoded, PNG image.*/ - case 22: return "end of out buffer memory reached while inflating"; - case 23: return "end of in buffer memory reached while inflating"; - case 24: return "invalid FCHECK in zlib header"; - case 25: return "invalid compression method in zlib header"; - case 26: return "FDICT encountered in zlib header while it's not used for PNG"; - case 27: return "PNG file is smaller than a PNG header"; - /*Checks the magic file header, the first 8 bytes of the PNG file*/ - case 28: return "incorrect PNG signature, it's no PNG or corrupted"; - case 29: return "first chunk is not the header chunk"; - case 30: return "chunk length too large, chunk broken off at end of file"; - case 31: return "illegal PNG color type or bpp"; - case 32: return "illegal PNG compression method"; - case 33: return "illegal PNG filter method"; - case 34: return "illegal PNG interlace method"; - case 35: return "chunk length of a chunk is too large or the chunk too small"; - case 36: return "illegal PNG filter type encountered"; - case 37: return "illegal bit depth for this color type given"; - case 38: return "the palette is too big"; /*more than 256 colors*/ - case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette"; - case 40: return "tRNS chunk has wrong size for greyscale image"; - case 41: return "tRNS chunk has wrong size for RGB image"; - case 42: return "tRNS chunk appeared while it was not allowed for this color type"; - case 43: return "bKGD chunk has wrong size for palette image"; - case 44: return "bKGD chunk has wrong size for greyscale image"; - case 45: return "bKGD chunk has wrong size for RGB image"; - case 48: return "empty input buffer given to decoder. Maybe caused by non-existing file?"; - case 49: return "jumped past memory while generating dynamic huffman tree"; - case 50: return "jumped past memory while generating dynamic huffman tree"; - case 51: return "jumped past memory while inflating huffman block"; - case 52: return "jumped past memory while inflating"; - case 53: return "size of zlib data too small"; - case 54: return "repeat symbol in tree while there was no value symbol yet"; - /*jumped past tree while generating huffman tree, this could be when the - tree will have more leaves than symbols after generating it out of the - given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ - case 55: return "jumped past tree while generating huffman tree"; - case 56: return "given output image colortype or bitdepth not supported for color conversion"; - case 57: return "invalid CRC encountered (checking CRC can be disabled)"; - case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)"; - case 59: return "requested color conversion not supported"; - case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)"; - case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)"; - /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/ - case 62: return "conversion from color to greyscale not supported"; - case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/ - /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/ - case 64: return "the length of the END symbol 256 in the Huffman tree is 0"; - case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes"; - case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte"; - case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors"; - case 69: return "unknown chunk type with 'critical' flag encountered by the decoder"; - case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)"; - case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)"; - case 73: return "invalid tIME chunk size"; - case 74: return "invalid pHYs chunk size"; - /*length could be wrong, or data chopped off*/ - case 75: return "no null termination char found while decoding text chunk"; - case 76: return "iTXt chunk too short to contain required bytes"; - case 77: return "integer overflow in buffer size"; - case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/ - case 79: return "failed to open file for writing"; - case 80: return "tried creating a tree of 0 symbols"; - case 81: return "lazy matching at pos 0 is impossible"; - case 82: return "color conversion to palette requested while a color isn't in palette"; - case 83: return "memory allocation failed"; - case 84: return "given image too small to contain all pixels to be encoded"; - case 86: return "impossible offset in lz77 encoding (internal bug)"; - case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined"; - case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy"; - case 89: return "text chunk keyword too short or long: must have size 1-79"; - /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/ - case 90: return "windowsize must be a power of two"; - case 91: return "invalid decompressed idat size"; - case 92: return "too many pixels, not supported"; - case 93: return "zero width or height is invalid"; - case 94: return "header chunk must have a size of 13 bytes"; - } - return "unknown error code"; -} -#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ - -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* // C++ Wrapper // */ -/* ////////////////////////////////////////////////////////////////////////// */ -/* ////////////////////////////////////////////////////////////////////////// */ - -#ifdef LODEPNG_COMPILE_CPP -namespace lodepng -{ - -#ifdef LODEPNG_COMPILE_DISK - unsigned load_file(std::vector& buffer, const std::string& filename) - { - long size = lodepng_filesize(filename.c_str()); - if (size < 0) return 78; - buffer.resize((size_t)size); - return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str()); - } - - /*write given buffer to the file, overwriting the file, it doesn't append to it.*/ - unsigned save_file(const std::vector& buffer, const std::string& filename) - { - return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str()); - } -#endif /* LODEPNG_COMPILE_DISK */ - -#ifdef LODEPNG_COMPILE_ZLIB -#ifdef LODEPNG_COMPILE_DECODER - unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, - const LodePNGDecompressSettings& settings) - { - unsigned char* buffer = 0; - size_t buffersize = 0; - unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings); - if (buffer) - { - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned decompress(std::vector& out, const std::vector& in, - const LodePNGDecompressSettings& settings) - { - return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings); - } -#endif /* LODEPNG_COMPILE_DECODER */ - -#ifdef LODEPNG_COMPILE_ENCODER - unsigned compress(std::vector& out, const unsigned char* in, size_t insize, - const LodePNGCompressSettings& settings) - { - unsigned char* buffer = 0; - size_t buffersize = 0; - unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings); - if (buffer) - { - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned compress(std::vector& out, const std::vector& in, - const LodePNGCompressSettings& settings) - { - return compress(out, in.empty() ? 0 : &in[0], in.size(), settings); - } -#endif /* LODEPNG_COMPILE_ENCODER */ -#endif /* LODEPNG_COMPILE_ZLIB */ - - -#ifdef LODEPNG_COMPILE_PNG - - State::State() - { - lodepng_state_init(this); - } - - State::State(const State& other) - { - lodepng_state_init(this); - lodepng_state_copy(this, &other); - } - - State::~State() - { - lodepng_state_cleanup(this); - } - - State& State::operator=(const State& other) - { - lodepng_state_copy(this, &other); - return *this; - } - -#ifdef LODEPNG_COMPILE_DECODER - - unsigned decode(std::vector& out, unsigned& w, unsigned& h, const unsigned char* in, - size_t insize, LodePNGColorType colortype, unsigned bitdepth) - { - unsigned char* buffer; - unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth); - if (buffer && !error) - { - State state; - state.info_raw.colortype = colortype; - state.info_raw.bitdepth = bitdepth; - size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - const std::vector& in, LodePNGColorType colortype, unsigned bitdepth) - { - return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth); - } - - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - State& state, - const unsigned char* in, size_t insize) - { - unsigned char* buffer = NULL; - unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize); - if (buffer && !error) - { - size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - } - lodepng_free(buffer); - return error; - } - - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - State& state, - const std::vector& in) - { - return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size()); - } - -#ifdef LODEPNG_COMPILE_DISK - unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::string& filename, - LodePNGColorType colortype, unsigned bitdepth) - { - std::vector buffer; - unsigned error = load_file(buffer, filename); - if (error) return error; - return decode(out, w, h, buffer, colortype, bitdepth); - } -#endif /* LODEPNG_COMPILE_DECODER */ -#endif /* LODEPNG_COMPILE_DISK */ - -#ifdef LODEPNG_COMPILE_ENCODER - unsigned encode(std::vector& out, const unsigned char* in, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) - { - unsigned char* buffer; - size_t buffersize; - unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth); - if (buffer) - { - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned encode(std::vector& out, - const std::vector& in, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) - { - if (lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; - return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); - } - - unsigned encode(std::vector& out, - const unsigned char* in, unsigned w, unsigned h, - State& state) - { - unsigned char* buffer; - size_t buffersize; - unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state); - if (buffer) - { - out.insert(out.end(), &buffer[0], &buffer[buffersize]); - lodepng_free(buffer); - } - return error; - } - - unsigned encode(std::vector& out, - const std::vector& in, unsigned w, unsigned h, - State& state) - { - if (lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84; - return encode(out, in.empty() ? 0 : &in[0], w, h, state); - } - -#ifdef LODEPNG_COMPILE_DISK - unsigned encode(const std::string& filename, - const unsigned char* in, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) - { - std::vector buffer; - unsigned error = encode(buffer, in, w, h, colortype, bitdepth); - if (!error) error = save_file(buffer, filename); - return error; - } - - unsigned encode(const std::string& filename, - const std::vector& in, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth) - { - if (lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; - return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); - } -#endif /* LODEPNG_COMPILE_DISK */ -#endif /* LODEPNG_COMPILE_ENCODER */ -#endif /* LODEPNG_COMPILE_PNG */ -} /* namespace lodepng */ -#endif /*LODEPNG_COMPILE_CPP*/ diff --git a/external/bc7enc/lodepng.h b/external/bc7enc/lodepng.h deleted file mode 100644 index df0f1e78..00000000 --- a/external/bc7enc/lodepng.h +++ /dev/null @@ -1,1761 +0,0 @@ -/* -LodePNG version 20161127 - -Copyright (c) 2005-2016 Lode Vandevenne - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ - -#ifndef LODEPNG_H -#define LODEPNG_H - -#include /*for size_t*/ - -extern const char* LODEPNG_VERSION_STRING; - -/* -The following #defines are used to create code sections. They can be disabled -to disable code sections, which can give faster compile time and smaller binary. -The "NO_COMPILE" defines are designed to be used to pass as defines to the -compiler command to disable them without modifying this header, e.g. --DLODEPNG_NO_COMPILE_ZLIB for gcc. -In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to -allow implementing a custom lodepng_crc32. -*/ -/*deflate & zlib. If disabled, you must specify alternative zlib functions in -the custom_zlib field of the compress and decompress settings*/ -#ifndef LODEPNG_NO_COMPILE_ZLIB -#define LODEPNG_COMPILE_ZLIB -#endif -/*png encoder and png decoder*/ -#ifndef LODEPNG_NO_COMPILE_PNG -#define LODEPNG_COMPILE_PNG -#endif -/*deflate&zlib decoder and png decoder*/ -#ifndef LODEPNG_NO_COMPILE_DECODER -#define LODEPNG_COMPILE_DECODER -#endif -/*deflate&zlib encoder and png encoder*/ -#ifndef LODEPNG_NO_COMPILE_ENCODER -#define LODEPNG_COMPILE_ENCODER -#endif -/*the optional built in harddisk file loading and saving functions*/ -#ifndef LODEPNG_NO_COMPILE_DISK -#define LODEPNG_COMPILE_DISK -#endif -/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/ -#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS -#define LODEPNG_COMPILE_ANCILLARY_CHUNKS -#endif -/*ability to convert error numerical codes to English text string*/ -#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT -#define LODEPNG_COMPILE_ERROR_TEXT -#endif -/*Compile the default allocators (C's free, malloc and realloc). If you disable this, -you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your -source files with custom allocators.*/ -#ifndef LODEPNG_NO_COMPILE_ALLOCATORS -#define LODEPNG_COMPILE_ALLOCATORS -#endif -/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/ -#ifdef __cplusplus -#ifndef LODEPNG_NO_COMPILE_CPP -#define LODEPNG_COMPILE_CPP -#endif -#endif - -#ifdef LODEPNG_COMPILE_CPP -#include -#include -#endif /*LODEPNG_COMPILE_CPP*/ - -#ifdef LODEPNG_COMPILE_PNG -/*The PNG color types (also used for raw).*/ -typedef enum LodePNGColorType -{ - LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/ - LCT_RGB = 2, /*RGB: 8,16 bit*/ - LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/ - LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/ - LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/ -} LodePNGColorType; - -#ifdef LODEPNG_COMPILE_DECODER -/* -Converts PNG data in memory to raw pixel data. -out: Output parameter. Pointer to buffer that will contain the raw pixel data. - After decoding, its size is w * h * (bytes per pixel) bytes larger than - initially. Bytes per pixel depends on colortype and bitdepth. - Must be freed after usage with free(*out). - Note: for 16-bit per channel colors, uses big endian format like PNG does. -w: Output parameter. Pointer to width of pixel data. -h: Output parameter. Pointer to height of pixel data. -in: Memory buffer with the PNG file. -insize: size of the in buffer. -colortype: the desired color type for the raw output image. See explanation on PNG color types. -bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types. -Return value: LodePNG error code (0 means no error). -*/ -unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, - const unsigned char* in, size_t insize, - LodePNGColorType colortype, unsigned bitdepth); - -/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/ -unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, - const unsigned char* in, size_t insize); - -/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/ -unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, - const unsigned char* in, size_t insize); - -#ifdef LODEPNG_COMPILE_DISK -/* -Load PNG from disk, from file with given name. -Same as the other decode functions, but instead takes a filename as input. -*/ -unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, - const char* filename, - LodePNGColorType colortype, unsigned bitdepth); - -/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/ -unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, - const char* filename); - -/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/ -unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, - const char* filename); -#endif /*LODEPNG_COMPILE_DISK*/ -#endif /*LODEPNG_COMPILE_DECODER*/ - - -#ifdef LODEPNG_COMPILE_ENCODER -/* -Converts raw pixel data into a PNG image in memory. The colortype and bitdepth - of the output PNG image cannot be chosen, they are automatically determined - by the colortype, bitdepth and content of the input pixel data. - Note: for 16-bit per channel colors, needs big endian format like PNG does. -out: Output parameter. Pointer to buffer that will contain the PNG image data. - Must be freed after usage with free(*out). -outsize: Output parameter. Pointer to the size in bytes of the out buffer. -image: The raw pixel data to encode. The size of this buffer should be - w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth. -w: width of the raw pixel data in pixels. -h: height of the raw pixel data in pixels. -colortype: the color type of the raw input image. See explanation on PNG color types. -bitdepth: the bit depth of the raw input image. See explanation on PNG color types. -Return value: LodePNG error code (0 means no error). -*/ -unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth); - -/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/ -unsigned lodepng_encode32(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h); - -/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/ -unsigned lodepng_encode24(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h); - -#ifdef LODEPNG_COMPILE_DISK -/* -Converts raw pixel data into a PNG file on disk. -Same as the other encode functions, but instead takes a filename as output. -NOTE: This overwrites existing files without warning! -*/ -unsigned lodepng_encode_file(const char* filename, - const unsigned char* image, unsigned w, unsigned h, - LodePNGColorType colortype, unsigned bitdepth); - -/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/ -unsigned lodepng_encode32_file(const char* filename, - const unsigned char* image, unsigned w, unsigned h); - -/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/ -unsigned lodepng_encode24_file(const char* filename, - const unsigned char* image, unsigned w, unsigned h); -#endif /*LODEPNG_COMPILE_DISK*/ -#endif /*LODEPNG_COMPILE_ENCODER*/ - - -#ifdef LODEPNG_COMPILE_CPP -namespace lodepng -{ -#ifdef LODEPNG_COMPILE_DECODER - /*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype - is the format to output the pixels to. Default is RGBA 8-bit per channel.*/ - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - const unsigned char* in, size_t insize, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - const std::vector& in, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); -#ifdef LODEPNG_COMPILE_DISK - /* - Converts PNG file from disk to raw pixel data in memory. - Same as the other decode functions, but instead takes a filename as input. - */ - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - const std::string& filename, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); -#endif /* LODEPNG_COMPILE_DISK */ -#endif /* LODEPNG_COMPILE_DECODER */ - -#ifdef LODEPNG_COMPILE_ENCODER - /*Same as lodepng_encode_memory, but encodes to an std::vector. colortype - is that of the raw input data. The output PNG color type will be auto chosen.*/ - unsigned encode(std::vector& out, - const unsigned char* in, unsigned w, unsigned h, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); - unsigned encode(std::vector& out, - const std::vector& in, unsigned w, unsigned h, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); -#ifdef LODEPNG_COMPILE_DISK - /* - Converts 32-bit RGBA raw pixel data into a PNG file on disk. - Same as the other encode functions, but instead takes a filename as output. - NOTE: This overwrites existing files without warning! - */ - unsigned encode(const std::string& filename, - const unsigned char* in, unsigned w, unsigned h, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); - unsigned encode(const std::string& filename, - const std::vector& in, unsigned w, unsigned h, - LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); -#endif /* LODEPNG_COMPILE_DISK */ -#endif /* LODEPNG_COMPILE_ENCODER */ -} /* namespace lodepng */ -#endif /*LODEPNG_COMPILE_CPP*/ -#endif /*LODEPNG_COMPILE_PNG*/ - -#ifdef LODEPNG_COMPILE_ERROR_TEXT -/*Returns an English description of the numerical error code.*/ -const char* lodepng_error_text(unsigned code); -#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ - -#ifdef LODEPNG_COMPILE_DECODER -/*Settings for zlib decompression*/ -typedef struct LodePNGDecompressSettings LodePNGDecompressSettings; -struct LodePNGDecompressSettings -{ - unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/ - - /*use custom zlib decoder instead of built in one (default: null)*/ - unsigned(*custom_zlib)(unsigned char**, size_t*, - const unsigned char*, size_t, - const LodePNGDecompressSettings*); - /*use custom deflate decoder instead of built in one (default: null) - if custom_zlib is used, custom_deflate is ignored since only the built in - zlib function will call custom_deflate*/ - unsigned(*custom_inflate)(unsigned char**, size_t*, - const unsigned char*, size_t, - const LodePNGDecompressSettings*); - - const void* custom_context; /*optional custom settings for custom functions*/ -}; - -extern const LodePNGDecompressSettings lodepng_default_decompress_settings; -void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings); -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER -/* -Settings for zlib compression. Tweaking these settings tweaks the balance -between speed and compression ratio. -*/ -typedef struct LodePNGCompressSettings LodePNGCompressSettings; -struct LodePNGCompressSettings /*deflate = compress*/ -{ - /*LZ77 related settings*/ - unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/ - unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/ - unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/ - unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/ - unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/ - unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/ - - /*use custom zlib encoder instead of built in one (default: null)*/ - unsigned(*custom_zlib)(unsigned char**, size_t*, - const unsigned char*, size_t, - const LodePNGCompressSettings*); - /*use custom deflate encoder instead of built in one (default: null) - if custom_zlib is used, custom_deflate is ignored since only the built in - zlib function will call custom_deflate*/ - unsigned(*custom_deflate)(unsigned char**, size_t*, - const unsigned char*, size_t, - const LodePNGCompressSettings*); - - const void* custom_context; /*optional custom settings for custom functions*/ -}; - -extern const LodePNGCompressSettings lodepng_default_compress_settings; -void lodepng_compress_settings_init(LodePNGCompressSettings* settings); -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#ifdef LODEPNG_COMPILE_PNG -/* -Color mode of an image. Contains all information required to decode the pixel -bits to RGBA colors. This information is the same as used in the PNG file -format, and is used both for PNG and raw image data in LodePNG. -*/ -typedef struct LodePNGColorMode -{ - /*header (IHDR)*/ - LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/ - unsigned bitdepth; /*bits per sample, see PNG standard or documentation further in this header file*/ - - /* - palette (PLTE and tRNS) - - Dynamically allocated with the colors of the palette, including alpha. - When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use - lodepng_palette_clear, then for each color use lodepng_palette_add. - If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette. - - When decoding, by default you can ignore this palette, since LodePNG already - fills the palette colors in the pixels of the raw RGBA output. - - The palette is only supported for color type 3. - */ - unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/ - size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/ - - /* - transparent color key (tRNS) - - This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit. - For greyscale PNGs, r, g and b will all 3 be set to the same. - - When decoding, by default you can ignore this information, since LodePNG sets - pixels with this key to transparent already in the raw RGBA output. - - The color key is only supported for color types 0 and 2. - */ - unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/ - unsigned key_r; /*red/greyscale component of color key*/ - unsigned key_g; /*green component of color key*/ - unsigned key_b; /*blue component of color key*/ -} LodePNGColorMode; - -/*init, cleanup and copy functions to use with this struct*/ -void lodepng_color_mode_init(LodePNGColorMode* info); -void lodepng_color_mode_cleanup(LodePNGColorMode* info); -/*return value is error code (0 means no error)*/ -unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source); - -void lodepng_palette_clear(LodePNGColorMode* info); -/*add 1 color to the palette*/ -unsigned lodepng_palette_add(LodePNGColorMode* info, - unsigned char r, unsigned char g, unsigned char b, unsigned char a); - -/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/ -unsigned lodepng_get_bpp(const LodePNGColorMode* info); -/*get the amount of color channels used, based on colortype in the struct. -If a palette is used, it counts as 1 channel.*/ -unsigned lodepng_get_channels(const LodePNGColorMode* info); -/*is it a greyscale type? (only colortype 0 or 4)*/ -unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info); -/*has it got an alpha channel? (only colortype 2 or 6)*/ -unsigned lodepng_is_alpha_type(const LodePNGColorMode* info); -/*has it got a palette? (only colortype 3)*/ -unsigned lodepng_is_palette_type(const LodePNGColorMode* info); -/*only returns true if there is a palette and there is a value in the palette with alpha < 255. -Loops through the palette to check this.*/ -unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info); -/* -Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image. -Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels). -Returns false if the image can only have opaque pixels. -In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values, -or if "key_defined" is true. -*/ -unsigned lodepng_can_have_alpha(const LodePNGColorMode* info); -/*Returns the byte size of a raw image buffer with given width, height and color mode*/ -size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color); - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -/*The information of a Time chunk in PNG.*/ -typedef struct LodePNGTime -{ - unsigned year; /*2 bytes used (0-65535)*/ - unsigned month; /*1-12*/ - unsigned day; /*1-31*/ - unsigned hour; /*0-23*/ - unsigned minute; /*0-59*/ - unsigned second; /*0-60 (to allow for leap seconds)*/ -} LodePNGTime; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -/*Information about the PNG image, except pixels, width and height.*/ -typedef struct LodePNGInfo -{ - /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/ - unsigned compression_method;/*compression method of the original file. Always 0.*/ - unsigned filter_method; /*filter method of the original file*/ - unsigned interlace_method; /*interlace method of the original file*/ - LodePNGColorMode color; /*color type and bits, palette and transparency of the PNG file*/ - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /* - suggested background color chunk (bKGD) - This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit. - - For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding - the encoder writes the red one. For palette PNGs: When decoding, the RGB value - will be stored, not a palette index. But when encoding, specify the index of - the palette in background_r, the other two are then ignored. - - The decoder does not use this background color to edit the color of pixels. - */ - unsigned background_defined; /*is a suggested background color given?*/ - unsigned background_r; /*red component of suggested background color*/ - unsigned background_g; /*green component of suggested background color*/ - unsigned background_b; /*blue component of suggested background color*/ - - /* - non-international text chunks (tEXt and zTXt) - - The char** arrays each contain num strings. The actual messages are in - text_strings, while text_keys are keywords that give a short description what - the actual text represents, e.g. Title, Author, Description, or anything else. - - A keyword is minimum 1 character and maximum 79 characters long. It's - discouraged to use a single line length longer than 79 characters for texts. - - Don't allocate these text buffers yourself. Use the init/cleanup functions - correctly and use lodepng_add_text and lodepng_clear_text. - */ - size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/ - char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/ - char** text_strings; /*the actual text*/ - - /* - international text chunks (iTXt) - Similar to the non-international text chunks, but with additional strings - "langtags" and "transkeys". - */ - size_t itext_num; /*the amount of international texts in this PNG*/ - char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/ - char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/ - char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/ - char** itext_strings; /*the actual international text - UTF-8 string*/ - - /*time chunk (tIME)*/ - unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/ - LodePNGTime time; - - /*phys chunk (pHYs)*/ - unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/ - unsigned phys_x; /*pixels per unit in x direction*/ - unsigned phys_y; /*pixels per unit in y direction*/ - unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/ - - /* - unknown chunks - There are 3 buffers, one for each position in the PNG where unknown chunks can appear - each buffer contains all unknown chunks for that position consecutively - The 3 buffers are the unknown chunks between certain critical chunks: - 0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND - Do not allocate or traverse this data yourself. Use the chunk traversing functions declared - later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct. - */ - unsigned char* unknown_chunks_data[3]; - size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/ -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} LodePNGInfo; - -/*init, cleanup and copy functions to use with this struct*/ -void lodepng_info_init(LodePNGInfo* info); -void lodepng_info_cleanup(LodePNGInfo* info); -/*return value is error code (0 means no error)*/ -unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source); - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS -void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/ -unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/ - -void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/ -unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, - const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/ -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ - -/* -Converts raw buffer from one color type to another color type, based on -LodePNGColorMode structs to describe the input and output color type. -See the reference manual at the end of this header file to see which color conversions are supported. -return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported) -The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel -of the output color type (lodepng_get_bpp). -For < 8 bpp images, there should not be padding bits at the end of scanlines. -For 16-bit per channel colors, uses big endian format like PNG does. -Return value is LodePNG error code -*/ -unsigned lodepng_convert(unsigned char* out, const unsigned char* in, - const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, - unsigned w, unsigned h); - -#ifdef LODEPNG_COMPILE_DECODER -/* -Settings for the decoder. This contains settings for the PNG and the Zlib -decoder, but not the Info settings from the Info structs. -*/ -typedef struct LodePNGDecoderSettings -{ - LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/ - - unsigned ignore_crc; /*ignore CRC checksums*/ - - unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/ - -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/ - /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/ - unsigned remember_unknown_chunks; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} LodePNGDecoderSettings; - -void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings); -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER -/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/ -typedef enum LodePNGFilterStrategy -{ - /*every filter at zero*/ - LFS_ZERO, - /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/ - LFS_MINSUM, - /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending - on the image, this is better or worse than minsum.*/ - LFS_ENTROPY, - /* - Brute-force-search PNG filters by compressing each filter for each scanline. - Experimental, very slow, and only rarely gives better compression than MINSUM. - */ - LFS_BRUTE_FORCE, - /*use predefined_filters buffer: you specify the filter type for each scanline*/ - LFS_PREDEFINED -} LodePNGFilterStrategy; - -/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding. -Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/ -typedef struct LodePNGColorProfile -{ - unsigned colored; /*not greyscale*/ - unsigned key; /*image is not opaque and color key is possible instead of full alpha*/ - unsigned short key_r; /*key values, always as 16-bit, in 8-bit case the byte is duplicated, e.g. 65535 means 255*/ - unsigned short key_g; - unsigned short key_b; - unsigned alpha; /*image is not opaque and alpha channel or alpha palette required*/ - unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/ - unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/ - unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/ -} LodePNGColorProfile; - -void lodepng_color_profile_init(LodePNGColorProfile* profile); - -/*Get a LodePNGColorProfile of the image.*/ -unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, - const unsigned char* image, unsigned w, unsigned h, - const LodePNGColorMode* mode_in); -/*The function LodePNG uses internally to decide the PNG color with auto_convert. -Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/ -unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, - const unsigned char* image, unsigned w, unsigned h, - const LodePNGColorMode* mode_in); - -/*Settings for the encoder.*/ -typedef struct LodePNGEncoderSettings -{ - LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/ - - unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/ - - /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than - 8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to - completely follow the official PNG heuristic, filter_palette_zero must be true and - filter_strategy must be LFS_MINSUM*/ - unsigned filter_palette_zero; - /*Which filter strategy to use when not using zeroes due to filter_palette_zero. - Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/ - LodePNGFilterStrategy filter_strategy; - /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with - the same length as the amount of scanlines in the image, and each value must <= 5. You - have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero - must be set to 0 to ensure this is also used on palette or low bitdepth images.*/ - const unsigned char* predefined_filters; - - /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). - If colortype is 3, PLTE is _always_ created.*/ - unsigned force_palette; -#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS - /*add LodePNG identifier and version as a text chunk, for debugging*/ - unsigned add_id; - /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/ - unsigned text_compression; -#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ -} LodePNGEncoderSettings; - -void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings); -#endif /*LODEPNG_COMPILE_ENCODER*/ - - -#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) -/*The settings, state and information for extended encoding and decoding.*/ -typedef struct LodePNGState -{ -#ifdef LODEPNG_COMPILE_DECODER - LodePNGDecoderSettings decoder; /*the decoding settings*/ -#endif /*LODEPNG_COMPILE_DECODER*/ -#ifdef LODEPNG_COMPILE_ENCODER - LodePNGEncoderSettings encoder; /*the encoding settings*/ -#endif /*LODEPNG_COMPILE_ENCODER*/ - LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/ - LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/ - unsigned error; -#ifdef LODEPNG_COMPILE_CPP - /* For the lodepng::State subclass. */ - virtual ~LodePNGState() {} -#endif -} LodePNGState; - -/*init, cleanup and copy functions to use with this struct*/ -void lodepng_state_init(LodePNGState* state); -void lodepng_state_cleanup(LodePNGState* state); -void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source); -#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ - -#ifdef LODEPNG_COMPILE_DECODER -/* -Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and -getting much more information about the PNG image and color mode. -*/ -unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, - LodePNGState* state, - const unsigned char* in, size_t insize); - -/* -Read the PNG header, but not the actual data. This returns only the information -that is in the header chunk of the PNG, such as width, height and color type. The -information is placed in the info_png field of the LodePNGState. -*/ -unsigned lodepng_inspect(unsigned* w, unsigned* h, - LodePNGState* state, - const unsigned char* in, size_t insize); -#endif /*LODEPNG_COMPILE_DECODER*/ - - -#ifdef LODEPNG_COMPILE_ENCODER -/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/ -unsigned lodepng_encode(unsigned char** out, size_t* outsize, - const unsigned char* image, unsigned w, unsigned h, - LodePNGState* state); -#endif /*LODEPNG_COMPILE_ENCODER*/ - -/* -The lodepng_chunk functions are normally not needed, except to traverse the -unknown chunks stored in the LodePNGInfo struct, or add new ones to it. -It also allows traversing the chunks of an encoded PNG file yourself. - -PNG standard chunk naming conventions: -First byte: uppercase = critical, lowercase = ancillary -Second byte: uppercase = public, lowercase = private -Third byte: must be uppercase -Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy -*/ - -/* -Gets the length of the data of the chunk. Total chunk length has 12 bytes more. -There must be at least 4 bytes to read from. If the result value is too large, -it may be corrupt data. -*/ -unsigned lodepng_chunk_length(const unsigned char* chunk); - -/*puts the 4-byte type in null terminated string*/ -void lodepng_chunk_type(char type[5], const unsigned char* chunk); - -/*check if the type is the given type*/ -unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type); - -/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/ -unsigned char lodepng_chunk_ancillary(const unsigned char* chunk); - -/*0: public, 1: private (see PNG standard)*/ -unsigned char lodepng_chunk_private(const unsigned char* chunk); - -/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/ -unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk); - -/*get pointer to the data of the chunk, where the input points to the header of the chunk*/ -unsigned char* lodepng_chunk_data(unsigned char* chunk); -const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk); - -/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/ -unsigned lodepng_chunk_check_crc(const unsigned char* chunk); - -/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/ -void lodepng_chunk_generate_crc(unsigned char* chunk); - -/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/ -unsigned char* lodepng_chunk_next(unsigned char* chunk); -const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk); - -/* -Appends chunk to the data in out. The given chunk should already have its chunk header. -The out variable and outlength are updated to reflect the new reallocated buffer. -Returns error code (0 if it went ok) -*/ -unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk); - -/* -Appends new chunk to out. The chunk to append is given by giving its length, type -and data separately. The type is a 4-letter string. -The out variable and outlength are updated to reflect the new reallocated buffer. -Returne error code (0 if it went ok) -*/ -unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, - const char* type, const unsigned char* data); - - -/*Calculate CRC32 of buffer*/ -unsigned lodepng_crc32(const unsigned char* buf, size_t len); -#endif /*LODEPNG_COMPILE_PNG*/ - - -#ifdef LODEPNG_COMPILE_ZLIB -/* -This zlib part can be used independently to zlib compress and decompress a -buffer. It cannot be used to create gzip files however, and it only supports the -part of zlib that is required for PNG, it does not support dictionaries. -*/ - -#ifdef LODEPNG_COMPILE_DECODER -/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/ -unsigned lodepng_inflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings); - -/* -Decompresses Zlib data. Reallocates the out buffer and appends the data. The -data must be according to the zlib specification. -Either, *out must be NULL and *outsize must be 0, or, *out must be a valid -buffer and *outsize its size in bytes. out must be freed by user after usage. -*/ -unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGDecompressSettings* settings); -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER -/* -Compresses data with Zlib. Reallocates the out buffer and appends the data. -Zlib adds a small header and trailer around the deflate data. -The data is output in the format of the zlib specification. -Either, *out must be NULL and *outsize must be 0, or, *out must be a valid -buffer and *outsize its size in bytes. out must be freed by user after usage. -*/ -unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings); - -/* -Find length-limited Huffman code for given frequencies. This function is in the -public interface only for tests, it's used internally by lodepng_deflate. -*/ -unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, - size_t numcodes, unsigned maxbitlen); - -/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/ -unsigned lodepng_deflate(unsigned char** out, size_t* outsize, - const unsigned char* in, size_t insize, - const LodePNGCompressSettings* settings); - -#endif /*LODEPNG_COMPILE_ENCODER*/ -#endif /*LODEPNG_COMPILE_ZLIB*/ - -#ifdef LODEPNG_COMPILE_DISK -/* -Load a file from disk into buffer. The function allocates the out buffer, and -after usage you should free it. -out: output parameter, contains pointer to loaded buffer. -outsize: output parameter, size of the allocated out buffer -filename: the path to the file to load -return value: error code (0 means ok) -*/ -unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename); - -/* -Save a file from buffer to disk. Warning, if it exists, this function overwrites -the file without warning! -buffer: the buffer to write -buffersize: size of the buffer to write -filename: the path to the file to save to -return value: error code (0 means ok) -*/ -unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename); -#endif /*LODEPNG_COMPILE_DISK*/ - -#ifdef LODEPNG_COMPILE_CPP -/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */ -namespace lodepng -{ -#ifdef LODEPNG_COMPILE_PNG - class State : public LodePNGState - { - public: - State(); - State(const State& other); - virtual ~State(); - State& operator=(const State& other); - }; - -#ifdef LODEPNG_COMPILE_DECODER - /* Same as other lodepng::decode, but using a State for more settings and information. */ - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - State& state, - const unsigned char* in, size_t insize); - unsigned decode(std::vector& out, unsigned& w, unsigned& h, - State& state, - const std::vector& in); -#endif /*LODEPNG_COMPILE_DECODER*/ - -#ifdef LODEPNG_COMPILE_ENCODER - /* Same as other lodepng::encode, but using a State for more settings and information. */ - unsigned encode(std::vector& out, - const unsigned char* in, unsigned w, unsigned h, - State& state); - unsigned encode(std::vector& out, - const std::vector& in, unsigned w, unsigned h, - State& state); -#endif /*LODEPNG_COMPILE_ENCODER*/ - -#ifdef LODEPNG_COMPILE_DISK - /* - Load a file from disk into an std::vector. - return value: error code (0 means ok) - */ - unsigned load_file(std::vector& buffer, const std::string& filename); - - /* - Save the binary data in an std::vector to a file on disk. The file is overwritten - without warning. - */ - unsigned save_file(const std::vector& buffer, const std::string& filename); -#endif /* LODEPNG_COMPILE_DISK */ -#endif /* LODEPNG_COMPILE_PNG */ - -#ifdef LODEPNG_COMPILE_ZLIB -#ifdef LODEPNG_COMPILE_DECODER - /* Zlib-decompress an unsigned char buffer */ - unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, - const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); - - /* Zlib-decompress an std::vector */ - unsigned decompress(std::vector& out, const std::vector& in, - const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); -#endif /* LODEPNG_COMPILE_DECODER */ - -#ifdef LODEPNG_COMPILE_ENCODER - /* Zlib-compress an unsigned char buffer */ - unsigned compress(std::vector& out, const unsigned char* in, size_t insize, - const LodePNGCompressSettings& settings = lodepng_default_compress_settings); - - /* Zlib-compress an std::vector */ - unsigned compress(std::vector& out, const std::vector& in, - const LodePNGCompressSettings& settings = lodepng_default_compress_settings); -#endif /* LODEPNG_COMPILE_ENCODER */ -#endif /* LODEPNG_COMPILE_ZLIB */ -} /* namespace lodepng */ -#endif /*LODEPNG_COMPILE_CPP*/ - -/* -TODO: -[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often -[.] check compatibility with various compilers - done but needs to be redone for every newer version -[X] converting color to 16-bit per channel types -[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values) -[ ] make sure encoder generates no chunks with size > (2^31)-1 -[ ] partial decoding (stream processing) -[X] let the "isFullyOpaque" function check color keys and transparent palettes too -[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl" -[ ] don't stop decoding on errors like 69, 57, 58 (make warnings) -[ ] make warnings like: oob palette, checksum fail, data after iend, wrong/unknown crit chunk, no null terminator in text, ... -[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes -[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ... -[ ] allow user to give data (void*) to custom allocator -*/ - -#endif /*LODEPNG_H inclusion guard*/ - -/* -LodePNG Documentation ---------------------- - -0. table of contents --------------------- - - 1. about - 1.1. supported features - 1.2. features not supported - 2. C and C++ version - 3. security - 4. decoding - 5. encoding - 6. color conversions - 6.1. PNG color types - 6.2. color conversions - 6.3. padding bits - 6.4. A note about 16-bits per channel and endianness - 7. error values - 8. chunks and PNG editing - 9. compiler support - 10. examples - 10.1. decoder C++ example - 10.2. decoder C example - 11. state settings reference - 12. changes - 13. contact information - - -1. about --------- - -PNG is a file format to store raster images losslessly with good compression, -supporting different color types and alpha channel. - -LodePNG is a PNG codec according to the Portable Network Graphics (PNG) -Specification (Second Edition) - W3C Recommendation 10 November 2003. - -The specifications used are: - -*) Portable Network Graphics (PNG) Specification (Second Edition): - http://www.w3.org/TR/2003/REC-PNG-20031110 -*) RFC 1950 ZLIB Compressed Data Format version 3.3: - http://www.gzip.org/zlib/rfc-zlib.html -*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3: - http://www.gzip.org/zlib/rfc-deflate.html - -The most recent version of LodePNG can currently be found at -http://lodev.org/lodepng/ - -LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds -extra functionality. - -LodePNG exists out of two files: --lodepng.h: the header file for both C and C++ --lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage - -If you want to start using LodePNG right away without reading this doc, get the -examples from the LodePNG website to see how to use it in code, or check the -smaller examples in chapter 13 here. - -LodePNG is simple but only supports the basic requirements. To achieve -simplicity, the following design choices were made: There are no dependencies -on any external library. There are functions to decode and encode a PNG with -a single function call, and extended versions of these functions taking a -LodePNGState struct allowing to specify or get more information. By default -the colors of the raw image are always RGB or RGBA, no matter what color type -the PNG file uses. To read and write files, there are simple functions to -convert the files to/from buffers in memory. - -This all makes LodePNG suitable for loading textures in games, demos and small -programs, ... It's less suitable for full fledged image editors, loading PNGs -over network (it requires all the image data to be available before decoding can -begin), life-critical systems, ... - -1.1. supported features ------------------------ - -The following features are supported by the decoder: - -*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image, - or the same color type as the PNG -*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image -*) Adam7 interlace and deinterlace for any color type -*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk -*) support for alpha channels, including RGBA color model, translucent palettes and color keying -*) zlib decompression (inflate) -*) zlib compression (deflate) -*) CRC32 and ADLER32 checksums -*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks. -*) the following chunks are supported (generated/interpreted) by both encoder and decoder: - IHDR: header information - PLTE: color palette - IDAT: pixel data - IEND: the final chunk - tRNS: transparency for palettized images - tEXt: textual information - zTXt: compressed textual information - iTXt: international textual information - bKGD: suggested background color - pHYs: physical dimensions - tIME: modification time - -1.2. features not supported ---------------------------- - -The following features are _not_ supported: - -*) some features needed to make a conformant PNG-Editor might be still missing. -*) partial loading/stream processing. All data must be available and is processed in one call. -*) The following public chunks are not supported but treated as unknown chunks by LodePNG - cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT - Some of these are not supported on purpose: LodePNG wants to provide the RGB values - stored in the pixels, not values modified by system dependent gamma or color models. - - -2. C and C++ version --------------------- - -The C version uses buffers allocated with alloc that you need to free() -yourself. You need to use init and cleanup functions for each struct whenever -using a struct from the C version to avoid exploits and memory leaks. - -The C++ version has extra functions with std::vectors in the interface and the -lodepng::State class which is a LodePNGState with constructor and destructor. - -These files work without modification for both C and C++ compilers because all -the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers -ignore it, and the C code is made to compile both with strict ISO C90 and C++. - -To use the C++ version, you need to rename the source file to lodepng.cpp -(instead of lodepng.c), and compile it with a C++ compiler. - -To use the C version, you need to rename the source file to lodepng.c (instead -of lodepng.cpp), and compile it with a C compiler. - - -3. Security ------------ - -Even if carefully designed, it's always possible that LodePNG contains possible -exploits. If you discover one, please let me know, and it will be fixed. - -When using LodePNG, care has to be taken with the C version of LodePNG, as well -as the C-style structs when working with C++. The following conventions are used -for all C-style structs: - --if a struct has a corresponding init function, always call the init function when making a new one --if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks --if a struct has a corresponding copy function, use the copy function instead of "=". - The destination must also be inited already. - - -4. Decoding ------------ - -Decoding converts a PNG compressed image to a raw pixel buffer. - -Most documentation on using the decoder is at its declarations in the header -above. For C, simple decoding can be done with functions such as -lodepng_decode32, and more advanced decoding can be done with the struct -LodePNGState and lodepng_decode. For C++, all decoding can be done with the -various lodepng::decode functions, and lodepng::State can be used for advanced -features. - -When using the LodePNGState, it uses the following fields for decoding: -*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here -*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get -*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use - -LodePNGInfo info_png --------------------- - -After decoding, this contains extra information of the PNG image, except the actual -pixels, width and height because these are already gotten directly from the decoder -functions. - -It contains for example the original color type of the PNG image, text comments, -suggested background color, etc... More details about the LodePNGInfo struct are -at its declaration documentation. - -LodePNGColorMode info_raw -------------------------- - -When decoding, here you can specify which color type you want -the resulting raw image to be. If this is different from the colortype of the -PNG, then the decoder will automatically convert the result. This conversion -always works, except if you want it to convert a color PNG to greyscale or to -a palette with missing colors. - -By default, 32-bit color is used for the result. - -LodePNGDecoderSettings decoder ------------------------------- - -The settings can be used to ignore the errors created by invalid CRC and Adler32 -chunks, and to disable the decoding of tEXt chunks. - -There's also a setting color_convert, true by default. If false, no conversion -is done, the resulting data will be as it was in the PNG (after decompression) -and you'll have to puzzle the colors of the pixels together yourself using the -color type information in the LodePNGInfo. - - -5. Encoding ------------ - -Encoding converts a raw pixel buffer to a PNG compressed image. - -Most documentation on using the encoder is at its declarations in the header -above. For C, simple encoding can be done with functions such as -lodepng_encode32, and more advanced decoding can be done with the struct -LodePNGState and lodepng_encode. For C++, all encoding can be done with the -various lodepng::encode functions, and lodepng::State can be used for advanced -features. - -Like the decoder, the encoder can also give errors. However it gives less errors -since the encoder input is trusted, the decoder input (a PNG image that could -be forged by anyone) is not trusted. - -When using the LodePNGState, it uses the following fields for encoding: -*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be. -*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has -*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use - -LodePNGInfo info_png --------------------- - -When encoding, you use this the opposite way as when decoding: for encoding, -you fill in the values you want the PNG to have before encoding. By default it's -not needed to specify a color type for the PNG since it's automatically chosen, -but it's possible to choose it yourself given the right settings. - -The encoder will not always exactly match the LodePNGInfo struct you give, -it tries as close as possible. Some things are ignored by the encoder. The -encoder uses, for example, the following settings from it when applicable: -colortype and bitdepth, text chunks, time chunk, the color key, the palette, the -background color, the interlace method, unknown chunks, ... - -When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk. -If the palette contains any colors for which the alpha channel is not 255 (so -there are translucent colors in the palette), it'll add a tRNS chunk. - -LodePNGColorMode info_raw -------------------------- - -You specify the color type of the raw image that you give to the input here, -including a possible transparent color key and palette you happen to be using in -your raw image data. - -By default, 32-bit color is assumed, meaning your input has to be in RGBA -format with 4 bytes (unsigned chars) per pixel. - -LodePNGEncoderSettings encoder ------------------------------- - -The following settings are supported (some are in sub-structs): -*) auto_convert: when this option is enabled, the encoder will -automatically choose the smallest possible color mode (including color key) that -can encode the colors of all pixels without information loss. -*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree, - 2 = dynamic huffman tree (best compression). Should be 2 for proper - compression. -*) use_lz77: whether or not to use LZ77 for compressed block types. Should be - true for proper compression. -*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value - 2048 by default, but can be set to 32768 for better, but slow, compression. -*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE - chunk if force_palette is true. This can used as suggested palette to convert - to by viewers that don't support more than 256 colors (if those still exist) -*) add_id: add text chunk "Encoder: LodePNG " to the image. -*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks. - zTXt chunks use zlib compression on the text. This gives a smaller result on - large texts but a larger result on small texts (such as a single program name). - It's all tEXt or all zTXt though, there's no separate setting per text yet. - - -6. color conversions --------------------- - -An important thing to note about LodePNG, is that the color type of the PNG, and -the color type of the raw image, are completely independent. By default, when -you decode a PNG, you get the result as a raw image in the color type you want, -no matter whether the PNG was encoded with a palette, greyscale or RGBA color. -And if you encode an image, by default LodePNG will automatically choose the PNG -color type that gives good compression based on the values of colors and amount -of colors in the image. It can be configured to let you control it instead as -well, though. - -To be able to do this, LodePNG does conversions from one color mode to another. -It can convert from almost any color type to any other color type, except the -following conversions: RGB to greyscale is not supported, and converting to a -palette when the palette doesn't have a required color is not supported. This is -not supported on purpose: this is information loss which requires a color -reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey -is easy, but there are multiple ways if you want to give some channels more -weight). - -By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB -color, no matter what color type the PNG has. And by default when encoding, -LodePNG automatically picks the best color model for the output PNG, and expects -the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control -the color format of the images yourself, you can skip this chapter. - -6.1. PNG color types --------------------- - -A PNG image can have many color types, ranging from 1-bit color to 64-bit color, -as well as palettized color modes. After the zlib decompression and unfiltering -in the PNG image is done, the raw pixel data will have that color type and thus -a certain amount of bits per pixel. If you want the output raw image after -decoding to have another color type, a conversion is done by LodePNG. - -The PNG specification gives the following color types: - -0: greyscale, bit depths 1, 2, 4, 8, 16 -2: RGB, bit depths 8 and 16 -3: palette, bit depths 1, 2, 4 and 8 -4: greyscale with alpha, bit depths 8 and 16 -6: RGBA, bit depths 8 and 16 - -Bit depth is the amount of bits per pixel per color channel. So the total amount -of bits per pixel is: amount of channels * bitdepth. - -6.2. color conversions ----------------------- - -As explained in the sections about the encoder and decoder, you can specify -color types and bit depths in info_png and info_raw to change the default -behaviour. - -If, when decoding, you want the raw image to be something else than the default, -you need to set the color type and bit depth you want in the LodePNGColorMode, -or the parameters colortype and bitdepth of the simple decoding function. - -If, when encoding, you use another color type than the default in the raw input -image, you need to specify its color type and bit depth in the LodePNGColorMode -of the raw image, or use the parameters colortype and bitdepth of the simple -encoding function. - -If, when encoding, you don't want LodePNG to choose the output PNG color type -but control it yourself, you need to set auto_convert in the encoder settings -to false, and specify the color type you want in the LodePNGInfo of the -encoder (including palette: it can generate a palette if auto_convert is true, -otherwise not). - -If the input and output color type differ (whether user chosen or auto chosen), -LodePNG will do a color conversion, which follows the rules below, and may -sometimes result in an error. - -To avoid some confusion: --the decoder converts from PNG to raw image --the encoder converts from raw image to PNG --the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image --the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG --when encoding, the color type in LodePNGInfo is ignored if auto_convert - is enabled, it is automatically generated instead --when decoding, the color type in LodePNGInfo is set by the decoder to that of the original - PNG image, but it can be ignored since the raw image has the color type you requested instead --if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion - between the color types is done if the color types are supported. If it is not - supported, an error is returned. If the types are the same, no conversion is done. --even though some conversions aren't supported, LodePNG supports loading PNGs from any - colortype and saving PNGs to any colortype, sometimes it just requires preparing - the raw image correctly before encoding. --both encoder and decoder use the same color converter. - -Non supported color conversions: --color to greyscale: no error is thrown, but the result will look ugly because -only the red channel is taken --anything to palette when that palette does not have that color in it: in this -case an error is thrown - -Supported color conversions: --anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA --any grey or grey+alpha, to grey or grey+alpha --anything to a palette, as long as the palette has the requested colors in it --removing alpha channel --higher to smaller bitdepth, and vice versa - -If you want no color conversion to be done (e.g. for speed or control): --In the encoder, you can make it save a PNG with any color type by giving the -raw color mode and LodePNGInfo the same color mode, and setting auto_convert to -false. --In the decoder, you can make it store the pixel data in the same color type -as the PNG has, by setting the color_convert setting to false. Settings in -info_raw are then ignored. - -The function lodepng_convert does the color conversion. It is available in the -interface but normally isn't needed since the encoder and decoder already call -it. - -6.3. padding bits ------------------ - -In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines -have a bit amount that isn't a multiple of 8, then padding bits are used so that each -scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output. -The raw input image you give to the encoder, and the raw output image you get from the decoder -will NOT have these padding bits, e.g. in the case of a 1-bit image with a width -of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte, -not the first bit of a new byte. - -6.4. A note about 16-bits per channel and endianness ----------------------------------------------------- - -LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like -for any other color format. The 16-bit values are stored in big endian (most -significant byte first) in these arrays. This is the opposite order of the -little endian used by x86 CPU's. - -LodePNG always uses big endian because the PNG file format does so internally. -Conversions to other formats than PNG uses internally are not supported by -LodePNG on purpose, there are myriads of formats, including endianness of 16-bit -colors, the order in which you store R, G, B and A, and so on. Supporting and -converting to/from all that is outside the scope of LodePNG. - -This may mean that, depending on your use case, you may want to convert the big -endian output of LodePNG to little endian with a for loop. This is certainly not -always needed, many applications and libraries support big endian 16-bit colors -anyway, but it means you cannot simply cast the unsigned char* buffer to an -unsigned short* buffer on x86 CPUs. - - -7. error values ---------------- - -All functions in LodePNG that return an error code, return 0 if everything went -OK, or a non-zero code if there was an error. - -The meaning of the LodePNG error values can be retrieved with the function -lodepng_error_text: given the numerical error code, it returns a description -of the error in English as a string. - -Check the implementation of lodepng_error_text to see the meaning of each code. - - -8. chunks and PNG editing -------------------------- - -If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG -editor that should follow the rules about handling of unknown chunks, or if your -program is able to read other types of chunks than the ones handled by LodePNG, -then that's possible with the chunk functions of LodePNG. - -A PNG chunk has the following layout: - -4 bytes length -4 bytes type name -length bytes data -4 bytes CRC - -8.1. iterating through chunks ------------------------------ - -If you have a buffer containing the PNG image data, then the first chunk (the -IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the -signature of the PNG and are not part of a chunk. But if you start at byte 8 -then you have a chunk, and can check the following things of it. - -NOTE: none of these functions check for memory buffer boundaries. To avoid -exploits, always make sure the buffer contains all the data of the chunks. -When using lodepng_chunk_next, make sure the returned value is within the -allocated memory. - -unsigned lodepng_chunk_length(const unsigned char* chunk): - -Get the length of the chunk's data. The total chunk length is this length + 12. - -void lodepng_chunk_type(char type[5], const unsigned char* chunk): -unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type): - -Get the type of the chunk or compare if it's a certain type - -unsigned char lodepng_chunk_critical(const unsigned char* chunk): -unsigned char lodepng_chunk_private(const unsigned char* chunk): -unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk): - -Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are). -Check if the chunk is private (public chunks are part of the standard, private ones not). -Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical -chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your -program doesn't handle that type of unknown chunk. - -unsigned char* lodepng_chunk_data(unsigned char* chunk): -const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk): - -Get a pointer to the start of the data of the chunk. - -unsigned lodepng_chunk_check_crc(const unsigned char* chunk): -void lodepng_chunk_generate_crc(unsigned char* chunk): - -Check if the crc is correct or generate a correct one. - -unsigned char* lodepng_chunk_next(unsigned char* chunk): -const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk): - -Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these -functions do no boundary checking of the allocated data whatsoever, so make sure there is enough -data available in the buffer to be able to go to the next chunk. - -unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk): -unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, - const char* type, const unsigned char* data): - -These functions are used to create new chunks that are appended to the data in *out that has -length *outlength. The append function appends an existing chunk to the new data. The create -function creates a new chunk with the given parameters and appends it. Type is the 4-letter -name of the chunk. - -8.2. chunks in info_png ------------------------ - -The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3 -buffers (each with size) to contain 3 types of unknown chunks: -the ones that come before the PLTE chunk, the ones that come between the PLTE -and the IDAT chunks, and the ones that come after the IDAT chunks. -It's necessary to make the distionction between these 3 cases because the PNG -standard forces to keep the ordering of unknown chunks compared to the critical -chunks, but does not force any other ordering rules. - -info_png.unknown_chunks_data[0] is the chunks before PLTE -info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT -info_png.unknown_chunks_data[2] is the chunks after IDAT - -The chunks in these 3 buffers can be iterated through and read by using the same -way described in the previous subchapter. - -When using the decoder to decode a PNG, you can make it store all unknown chunks -if you set the option settings.remember_unknown_chunks to 1. By default, this -option is off (0). - -The encoder will always encode unknown chunks that are stored in the info_png. -If you need it to add a particular chunk that isn't known by LodePNG, you can -use lodepng_chunk_append or lodepng_chunk_create to the chunk data in -info_png.unknown_chunks_data[x]. - -Chunks that are known by LodePNG should not be added in that way. E.g. to make -LodePNG add a bKGD chunk, set background_defined to true and add the correct -parameters there instead. - - -9. compiler support -------------------- - -No libraries other than the current standard C library are needed to compile -LodePNG. For the C++ version, only the standard C++ library is needed on top. -Add the files lodepng.c(pp) and lodepng.h to your project, include -lodepng.h where needed, and your program can read/write PNG files. - -It is compatible with C90 and up, and C++03 and up. - -If performance is important, use optimization when compiling! For both the -encoder and decoder, this makes a large difference. - -Make sure that LodePNG is compiled with the same compiler of the same version -and with the same settings as the rest of the program, or the interfaces with -std::vectors and std::strings in C++ can be incompatible. - -CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets. - -*) gcc and g++ - -LodePNG is developed in gcc so this compiler is natively supported. It gives no -warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++ -version 4.7.1 on Linux, 32-bit and 64-bit. - -*) Clang - -Fully supported and warning-free. - -*) Mingw - -The Mingw compiler (a port of gcc for Windows) should be fully supported by -LodePNG. - -*) Visual Studio and Visual C++ Express Edition - -LodePNG should be warning-free with warning level W4. Two warnings were disabled -with pragmas though: warning 4244 about implicit conversions, and warning 4996 -where it wants to use a non-standard function fopen_s instead of the standard C -fopen. - -Visual Studio may want "stdafx.h" files to be included in each source file and -give an error "unexpected end of file while looking for precompiled header". -This is not standard C++ and will not be added to the stock LodePNG. You can -disable it for lodepng.cpp only by right clicking it, Properties, C/C++, -Precompiled Headers, and set it to Not Using Precompiled Headers there. - -NOTE: Modern versions of VS should be fully supported, but old versions, e.g. -VS6, are not guaranteed to work. - -*) Compilers on Macintosh - -LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for -C and C++. - -*) Other Compilers - -If you encounter problems on any compilers, feel free to let me know and I may -try to fix it if the compiler is modern and standards complient. - - -10. examples ------------- - -This decoder example shows the most basic usage of LodePNG. More complex -examples can be found on the LodePNG website. - -10.1. decoder C++ example -------------------------- - -#include "lodepng.h" -#include - -int main(int argc, char *argv[]) -{ - const char* filename = argc > 1 ? argv[1] : "test.png"; - - //load and decode - std::vector image; - unsigned width, height; - unsigned error = lodepng::decode(image, width, height, filename); - - //if there's an error, display it - if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl; - - //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... -} - -10.2. decoder C example ------------------------ - -#include "lodepng.h" - -int main(int argc, char *argv[]) -{ - unsigned error; - unsigned char* image; - size_t width, height; - const char* filename = argc > 1 ? argv[1] : "test.png"; - - error = lodepng_decode32_file(&image, &width, &height, filename); - - if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error)); - - / * use image here * / - - free(image); - return 0; -} - -11. state settings reference ----------------------------- - -A quick reference of some settings to set on the LodePNGState - -For decoding: - -state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums -state.decoder.zlibsettings.custom_...: use custom inflate function -state.decoder.ignore_crc: ignore CRC checksums -state.decoder.color_convert: convert internal PNG color to chosen one -state.decoder.read_text_chunks: whether to read in text metadata chunks -state.decoder.remember_unknown_chunks: whether to read in unknown chunks -state.info_raw.colortype: desired color type for decoded image -state.info_raw.bitdepth: desired bit depth for decoded image -state.info_raw....: more color settings, see struct LodePNGColorMode -state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo - -For encoding: - -state.encoder.zlibsettings.btype: disable compression by setting it to 0 -state.encoder.zlibsettings.use_lz77: use LZ77 in compression -state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize -state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match -state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching -state.encoder.zlibsettings.lazymatching: try one more LZ77 matching -state.encoder.zlibsettings.custom_...: use custom deflate function -state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png -state.encoder.filter_palette_zero: PNG filter strategy for palette -state.encoder.filter_strategy: PNG filter strategy to encode with -state.encoder.force_palette: add palette even if not encoding to one -state.encoder.add_id: add LodePNG identifier and version as a text chunk -state.encoder.text_compression: use compressed text chunks for metadata -state.info_raw.colortype: color type of raw input image you provide -state.info_raw.bitdepth: bit depth of raw input image you provide -state.info_raw: more color settings, see struct LodePNGColorMode -state.info_png.color.colortype: desired color type if auto_convert is false -state.info_png.color.bitdepth: desired bit depth if auto_convert is false -state.info_png.color....: more color settings, see struct LodePNGColorMode -state.info_png....: more PNG related settings, see struct LodePNGInfo - - -12. changes ------------ - -The version number of LodePNG is the date of the change given in the format -yyyymmdd. - -Some changes aren't backwards compatible. Those are indicated with a (!) -symbol. - -*) 27 nov 2016: grey+alpha auto color model detection bugfix -*) 18 apr 2016: Changed qsort to custom stable sort (for platforms w/o qsort). -*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within - the limits of pure C90). -*) 08 dec 2015: Made load_file function return error if file can't be opened. -*) 24 okt 2015: Bugfix with decoding to palette output. -*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding. -*) 23 aug 2014: Reduced needless memory usage of decoder. -*) 28 jun 2014: Removed fix_png setting, always support palette OOB for - simplicity. Made ColorProfile public. -*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization. -*) 22 dec 2013: Power of two windowsize required for optimization. -*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key. -*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png). -*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_" - prefix for the custom allocators and made it possible with a new #define to - use custom ones in your project without needing to change lodepng's code. -*) 28 jan 2013: Bugfix with color key. -*) 27 okt 2012: Tweaks in text chunk keyword length error handling. -*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode. - (no palette). Better deflate tree encoding. New compression tweak settings. - Faster color conversions while decoding. Some internal cleanups. -*) 23 sep 2012: Reduced warnings in Visual Studio a little bit. -*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions - and made it work with function pointers instead. -*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc - and free functions and toggle #defines from compiler flags. Small fixes. -*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible. -*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed - redundant C++ codec classes. Reduced amount of structs. Everything changed, - but it is cleaner now imho and functionality remains the same. Also fixed - several bugs and shrunk the implementation code. Made new samples. -*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best - PNG color model and bit depth, based on the amount and type of colors of the - raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color. -*) 9 okt 2011: simpler hash chain implementation for the encoder. -*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching. -*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking. - A bug with the PNG filtertype heuristic was fixed, so that it chooses much - better ones (it's quite significant). A setting to do an experimental, slow, - brute force search for PNG filter types is added. -*) 17 aug 2011 (!): changed some C zlib related function names. -*) 16 aug 2011: made the code less wide (max 120 characters per line). -*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors. -*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled. -*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman - to optimize long sequences of zeros. -*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and - LodePNG_InfoColor_canHaveAlpha functions for convenience. -*) 7 nov 2010: added LodePNG_error_text function to get error code description. -*) 30 okt 2010: made decoding slightly faster -*) 26 okt 2010: (!) changed some C function and struct names (more consistent). - Reorganized the documentation and the declaration order in the header. -*) 08 aug 2010: only changed some comments and external samples. -*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version. -*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers. -*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could - read by ignoring the problem but windows apps couldn't. -*) 06 jun 2008: added more error checks for out of memory cases. -*) 26 apr 2008: added a few more checks here and there to ensure more safety. -*) 06 mar 2008: crash with encoding of strings fixed -*) 02 feb 2008: support for international text chunks added (iTXt) -*) 23 jan 2008: small cleanups, and #defines to divide code in sections -*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor. -*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder. -*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added - Also various fixes, such as in the deflate and the padding bits code. -*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved - filtering code of encoder. -*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A - C++ wrapper around this provides an interface almost identical to before. - Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code - are together in these files but it works both for C and C++ compilers. -*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks -*) 30 aug 2007: bug fixed which makes this Borland C++ compatible -*) 09 aug 2007: some VS2005 warnings removed again -*) 21 jul 2007: deflate code placed in new namespace separate from zlib code -*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images -*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing - invalid std::vector element [0] fixed, and level 3 and 4 warnings removed -*) 02 jun 2007: made the encoder add a tag with version by default -*) 27 may 2007: zlib and png code separated (but still in the same file), - simple encoder/decoder functions added for more simple usage cases -*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69), - moved some examples from here to lodepng_examples.cpp -*) 12 may 2007: palette decoding bug fixed -*) 24 apr 2007: changed the license from BSD to the zlib license -*) 11 mar 2007: very simple addition: ability to encode bKGD chunks. -*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding - palettized PNG images. Plus little interface change with palette and texts. -*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes. - Fixed a bug where the end code of a block had length 0 in the Huffman tree. -*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented - and supported by the encoder, resulting in smaller PNGs at the output. -*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone. -*) 24 jan 2007: gave encoder an error interface. Added color conversion from any - greyscale type to 8-bit greyscale with or without alpha. -*) 21 jan 2007: (!) Totally changed the interface. It allows more color types - to convert to and is more uniform. See the manual for how it works now. -*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days: - encode/decode custom tEXt chunks, separate classes for zlib & deflate, and - at last made the decoder give errors for incorrect Adler32 or Crc. -*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel. -*) 29 dec 2006: Added support for encoding images without alpha channel, and - cleaned out code as well as making certain parts faster. -*) 28 dec 2006: Added "Settings" to the encoder. -*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now. - Removed some code duplication in the decoder. Fixed little bug in an example. -*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter. - Fixed a bug of the decoder with 16-bit per color. -*) 15 okt 2006: Changed documentation structure -*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the - given image buffer, however for now it's not compressed. -*) 08 sep 2006: (!) Changed to interface with a Decoder class -*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different - way. Renamed decodePNG to decodePNGGeneric. -*) 29 jul 2006: (!) Changed the interface: image info is now returned as a - struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy. -*) 28 jul 2006: Cleaned the code and added new error checks. - Corrected terminology "deflate" into "inflate". -*) 23 jun 2006: Added SDL example in the documentation in the header, this - example allows easy debugging by displaying the PNG and its transparency. -*) 22 jun 2006: (!) Changed way to obtain error value. Added - loadFile function for convenience. Made decodePNG32 faster. -*) 21 jun 2006: (!) Changed type of info vector to unsigned. - Changed position of palette in info vector. Fixed an important bug that - happened on PNGs with an uncompressed block. -*) 16 jun 2006: Internally changed unsigned into unsigned where - needed, and performed some optimizations. -*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them - in LodePNG namespace. Changed the order of the parameters. Rewrote the - documentation in the header. Renamed files to lodepng.cpp and lodepng.h -*) 22 apr 2006: Optimized and improved some code -*) 07 sep 2005: (!) Changed to std::vector interface -*) 12 aug 2005: Initial release (C++, decoder only) - - -13. contact information ------------------------ - -Feel free to contact me with suggestions, problems, comments, ... concerning -LodePNG. If you encounter a PNG image that doesn't work properly with this -decoder, feel free to send it and I'll use it to find and fix the problem. - -My email address is (puzzle the account and domain together with an @ symbol): -Domain: gmail dot com. -Account: lode dot vandevenne. - - -Copyright (c) 2005-2016 Lode Vandevenne -*/ diff --git a/external/bc7enc/rgbcx.h b/external/bc7enc/rgbcx.h deleted file mode 100644 index f503548f..00000000 --- a/external/bc7enc/rgbcx.h +++ /dev/null @@ -1,4221 +0,0 @@ -// rgbcx.h v1.12 -// High-performance scalar BC1-5 encoders. Public Domain or MIT license (you choose - see below), written by Richard Geldreich 2020 . -// -// Influential references: -// http://sjbrown.co.uk/2006/01/19/dxt-compression-techniques/ -// https://github.com/nothings/stb/blob/master/stb_dxt.h -// https://gist.github.com/castano/c92c7626f288f9e99e158520b14a61cf -// https://github.com/castano/icbc/blob/master/icbc.h -// http://www.humus.name/index.php?page=3D&ID=79 -// -// This is a single header file library. Be sure to "#define RGBCX_IMPLEMENTATION" in one .cpp file somewhere. -// -// Instructions: -// -// The library MUST be initialized by calling this function at least once before using any encoder or decoder functions: -// -// void rgbcx::init(bc1_approx_mode mode = cBC1Ideal); -// -// This function manipulates global state, so it is not thread safe. -// You can call it multiple times to change the global BC1 approximation mode. -// Important: BC1/3 textures encoded using non-ideal BC1 approximation modes should only be sampled on parts from that vendor. -// If you encode for AMD, average error on AMD parts will go down, but average error on NVidia parts will go up and vice versa. -// If in doubt, encode in ideal BC1 mode. -// -// Call these functions to encode BC1-5: -// void rgbcx::encode_bc1(uint32_t level, void* pDst, const uint8_t* pPixels, bool allow_3color, bool use_transparent_texels_for_black); -// void rgbcx::encode_bc3(uint32_t level, void* pDst, const uint8_t* pPixels); -// void rgbcx::encode_bc4(void* pDst, const uint8_t* pPixels, uint32_t stride = 4); -// void rgbcx::encode_bc5(void* pDst, const uint8_t* pPixels, uint32_t chan0 = 0, uint32_t chan1 = 1, uint32_t stride = 4); -// -// - level ranges from MIN_LEVEL to MAX_LEVEL. The higher the level, the slower the encoder goes, but the higher the average quality. -// levels [0,4] are fast and compete against stb_dxt (default and HIGHQUAL). The remaining levels compete against squish/NVTT/icbc and icbc HQ. -// If in doubt just use level 10, set allow_3color to true and use_transparent_texels_for_black to false, and adjust as needed. -// -// - pDst is a pointer to the 8-byte (BC1/4) or 16-byte (BC3/5) destination block. -// -// - pPixels is a pointer to the 32-bpp pixels, in either RGBX or RGBA format (R is first in memory). -// Alpha is always ignored by encode_bc1(). -// -// - allow_3color: If true the encoder will use 3-color blocks. This flag is ignored unless level is >= 5 (because lower levels compete against stb_dxt and it doesn't support 3-color blocks). -// Do not enable on BC3-5 textures. 3-color block usage slows down encoding. -// -// - use_transparent_texels_for_black: If true the encoder will use 3-color block transparent black pixels to code very dark or black texels. Your engine/shader MUST ignore the sampled -// alpha value for textures encoded in this mode. This is how NVidia's classic "nvdxt" encoder (used by many original Xbox titles) used to work by default on DXT1C textures. It increases -// average quality substantially (because dark texels/black are very common) and is highly recommended. -// Do not enable on BC3-5 textures. -// -// - stride is the source pixel stride, in bytes. It's typically 4. -// -// - chan0 and chan1 are the source channels. Typically they will be 0 and 1. -// -// All encoding and decoding functions are threade-safe. -// -// To reduce the compiled size of the encoder, set #define RGBCX_USE_SMALLER_TABLES to 1 before including this header. -// -#ifndef RGBCX_INCLUDE_H -#define RGBCX_INCLUDE_H - -#include -#include -#include -#include -#include - -// By default, the table used to accelerate cluster fit on 4 color blocks uses a 969x128 entry table. -// To reduce the executable size, set RGBCX_USE_SMALLER_TABLES to 1, which selects the smaller 969x32 entry table. -#ifndef RGBCX_USE_SMALLER_TABLES -#define RGBCX_USE_SMALLER_TABLES 0 -#endif - -namespace rgbcx -{ - enum class bc1_approx_mode - { - // The default mode. No rounding for 4-color colors 2,3. My older tools/compressors use this mode. - // This matches the D3D10 docs on BC1. - cBC1Ideal = 0, - - // NVidia GPU mode. - cBC1NVidia = 1, - - // AMD GPU mode. - cBC1AMD = 2, - - // This mode matches AMD Compressonator's output. It rounds 4-color colors 2,3 (not 3-color color 2). - // This matches the D3D9 docs on DXT1. - cBC1IdealRound4 = 3 - }; - - // init() MUST be called once before using the BC1 encoder. - // This function may be called multiple times to change the BC1 approximation mode. - // This function initializes global state, so don't call it while other threads inside the encoder. - // Important: If you encode textures for a specific vendor's GPU's, beware that using that texture data on other GPU's may result in ugly artifacts. - // Encode to cBC1Ideal unless you know the texture data will only be deployed or used on a specific vendor's GPU. - void init(bc1_approx_mode mode = bc1_approx_mode::cBC1Ideal); - - // Optimally encodes a solid color block to BC1 format. - void encode_bc1_solid_block(void* pDst, uint32_t fr, uint32_t fg, uint32_t fb, bool allow_3color); - - // BC1 low-level API encoder flags. You can ignore this if you use the simple level API. - enum - { - // Try to improve quality using the most likely total orderings. - // The total_orderings_to_try parameter will then control the number of total orderings to try for 4 color blocks, and the - // total_orderings_to_try3 parameter will control the number of total orderings to try for 3 color blocks (if they are enabled). - cEncodeBC1UseLikelyTotalOrderings = 2, - - // Use 2 least squares pass, instead of one (same as stb_dxt's HIGHQUAL option). - // Recommended if you're enabling cEncodeBC1UseLikelyTotalOrderings. - cEncodeBC1TwoLeastSquaresPasses = 4, - - // cEncodeBC1Use3ColorBlocksForBlackPixels allows the BC1 encoder to use 3-color blocks for blocks containing black or very dark pixels. - // You shader/engine MUST ignore the alpha channel on textures encoded with this flag. - // Average quality goes up substantially for my 100 texture corpus (~.5 dB), so it's worth using if you can. - // Note the BC1 encoder does not actually support transparency in 3-color mode. - // Don't set when encoding to BC3. - cEncodeBC1Use3ColorBlocksForBlackPixels = 8, - - // If cEncodeBC1Use3ColorBlocks is set, the encoder can use 3-color mode for a small but noticeable gain in average quality, but lower perf. - // If you also specify the cEncodeBC1UseLikelyTotalOrderings flag, set the total_orderings_to_try3 paramter to the number of total orderings to try. - // Don't set when encoding to BC3. - cEncodeBC1Use3ColorBlocks = 16, - - // cEncodeBC1Iterative will greatly increase encode time, but is very slightly higher quality. - // Same as squish's iterative cluster fit option. Not really worth the tiny boost in quality, unless you just don't care about perf. at all. - cEncodeBC1Iterative = 32, - - // cEncodeBC1BoundingBox enables a fast all-integer PCA approximation on 4-color blocks. - // At level 0 options (no other flags), this is ~15% faster, and higher *average* quality. - cEncodeBC1BoundingBox = 64, - - // Use a slightly lower quality, but ~30% faster MSE evaluation function for 4-color blocks. - cEncodeBC1UseFasterMSEEval = 128, - - // Examine all colors to compute selectors/MSE (slower than default) - cEncodeBC1UseFullMSEEval = 256, - - // Use 2D least squares+inset+optimal rounding (the method used in Humus's GPU texture encoding demo), instead of PCA. - // Around 18% faster, very slightly lower average quality to better (depends on the content). - cEncodeBC1Use2DLS = 512, - - // Use 6 power iterations vs. 4 for PCA. - cEncodeBC1Use6PowerIters = 2048, - - // Check all total orderings - *very* slow. The encoder is not designed to be used in this way. - cEncodeBC1Exhaustive = 8192, - - // Try 2 different ways of choosing the initial endpoints. - cEncodeBC1TryAllInitialEndponts = 16384, - - // Same as cEncodeBC1BoundingBox, but implemented using integer math (faster, slightly less quality) - cEncodeBC1BoundingBoxInt = 32768, - - // Try refining the final endpoints by examining nearby colors. - cEncodeBC1EndpointSearchRoundsShift = 22, - cEncodeBC1EndpointSearchRoundsMask = 1023U << cEncodeBC1EndpointSearchRoundsShift, - }; - - const uint32_t MIN_TOTAL_ORDERINGS = 1; - const uint32_t MAX_TOTAL_ORDERINGS3 = 32; - -#if RGBCX_USE_SMALLER_TABLES - const uint32_t MAX_TOTAL_ORDERINGS4 = 32; -#else - const uint32_t MAX_TOTAL_ORDERINGS4 = 128; -#endif - - // DEFAULT_TOTAL_ORDERINGS_TO_TRY is around 3x faster than libsquish at slightly higher average quality. 10-16 is a good range to start to compete against libsquish. - const uint32_t DEFAULT_TOTAL_ORDERINGS_TO_TRY = 10; - - const uint32_t DEFAULT_TOTAL_ORDERINGS_TO_TRY3 = 1; - - // Encodes a 4x4 block of RGBX (X=ignored) pixels to BC1 format. - // This is the simplified interface for BC1 encoding, which accepts a level parameter and converts that to the best overall flags. - // The pixels are in RGBA format, where R is first in memory. The BC1 encoder completely ignores the alpha channel (i.e. there is no punchthrough alpha support). - // This is the recommended function to use for BC1 encoding, becuase it configures the encoder for you in the best possible way (on average). - // Note that the 3 color modes won't be used at all until level 5 or higher. - // No transparency supported, however if you set use_transparent_texels_for_black to true the encocer will use transparent selectors on very dark/black texels to reduce MSE. - const uint32_t MIN_LEVEL = 0, MAX_LEVEL = 18; - void encode_bc1(uint32_t level, void* pDst, const uint8_t* pPixels, bool allow_3color, bool use_transparent_texels_for_black); - - // Low-level interface for BC1 encoding. - // Always returns a 4 color block, unless cEncodeBC1Use3ColorBlocksForBlackPixels or cEncodeBC1Use3ColorBlock flags are specified. - // total_orderings_to_try controls the perf. vs. quality tradeoff on 4-color blocks when the cEncodeBC1UseLikelyTotalOrderings flag is used. It must range between [MIN_TOTAL_ORDERINGS, MAX_TOTAL_ORDERINGS4]. - // total_orderings_to_try3 controls the perf. vs. quality tradeoff on 3-color bocks when the cEncodeBC1UseLikelyTotalOrderings and the cEncodeBC1Use3ColorBlocks flags are used. Valid range is [0,MAX_TOTAL_ORDERINGS3] (0=disabled). - void encode_bc1(void* pDst, const uint8_t* pPixels, uint32_t flags = 0, uint32_t total_orderings_to_try = DEFAULT_TOTAL_ORDERINGS_TO_TRY, uint32_t total_orderings_to_try3 = DEFAULT_TOTAL_ORDERINGS_TO_TRY3); - - // Encodes a 4x4 block of RGBA pixels to BC3 format. - // There are two encode_bc3() functions. - // The first is the recommended function, which accepts a level parameter. - // The second is a low-level version that allows fine control over BC1 encoding. - void encode_bc3(uint32_t level, void* pDst, const uint8_t* pPixels); - void encode_bc3(void* pDst, const uint8_t* pPixels, uint32_t flags = 0, uint32_t total_orderings_to_try = DEFAULT_TOTAL_ORDERINGS_TO_TRY); - - // Encodes a single channel to BC4. - // stride is the source pixel stride in bytes. - void encode_bc4(void* pDst, const uint8_t* pPixels, uint32_t stride = 4); - - // Encodes two channels to BC5. - // chan0/chan1 control which channels, stride is the source pixel stride in bytes. - void encode_bc5(void* pDst, const uint8_t* pPixels, uint32_t chan0 = 0, uint32_t chan1 = 1, uint32_t stride = 4); - - // Decompression functions. - - // Returns true if the block uses 3 color punchthrough alpha mode. - bool unpack_bc1(const void* pBlock_bits, void* pPixels, bool set_alpha = true, bc1_approx_mode mode = bc1_approx_mode::cBC1Ideal); - - void unpack_bc4(const void* pBlock_bits, uint8_t* pPixels, uint32_t stride = 4); - - // Returns true if the block uses 3 color punchthrough alpha mode. - bool unpack_bc3(const void* pBlock_bits, void* pPixels, bc1_approx_mode mode = bc1_approx_mode::cBC1Ideal); - - void unpack_bc5(const void* pBlock_bits, void* pPixels, uint32_t chan0 = 0, uint32_t chan1 = 1, uint32_t stride = 4); -} -#endif // #ifndef RGBCX_INCLUDE_H - -#ifdef RGBCX_IMPLEMENTATION -namespace rgbcx -{ - const uint32_t NUM_UNIQUE_TOTAL_ORDERINGS4 = 969; - - // All total orderings for 16 pixels 2-bit selectors. - // BC1 selector order 0, 2, 3, 1 (i.e. the selectors are reordered into linear order). - static uint8_t g_unique_total_orders4[NUM_UNIQUE_TOTAL_ORDERINGS4][4] = - { - {0,8,2,6},{4,3,9,0},{4,8,1,3},{12,0,3,1},{11,3,2,0},{6,4,6,0},{7,5,0,4},{6,0,8,2},{1,0,0,15},{3,0,8,5},{1,1,13,1},{13,1,2,0},{0,14,1,1},{0,15,1,0},{0,13,0,3},{16,0,0,0},{4,3,4,5},{8,6,0,2},{0,10,0,6},{10,0,4,2},{7,2,1,6},{4,7,5,0},{1,4,7,4},{0,14,2,0},{2,7,2,5},{9,0,5,2},{9,2,2,3},{10,0,5,1},{2,3,7,4},{4,9,0,3},{1,5,0,10},{1,1,6,8}, - {6,6,4,0},{11,5,0,0},{11,2,0,3},{4,0,10,2},{2,3,10,1},{1,13,1,1},{0,14,0,2},{2,3,3,8},{12,3,1,0},{14,0,0,2},{9,1,3,3},{6,4,0,6},{1,1,5,9},{5,9,0,2},{2,10,1,3},{12,0,0,4},{4,6,6,0},{0,6,4,6},{3,7,4,2},{0,13,3,0},{3,10,0,3},{10,2,1,3},{1,12,1,2},{2,0,13,1},{11,0,5,0},{12,1,3,0},{6,4,5,1},{10,4,2,0},{3,6,1,6},{7,3,6,0},{10,4,0,2},{10,0,2,4}, - {0,5,9,2},{0,9,3,4},{6,4,2,4},{3,4,7,2},{3,3,5,5},{4,2,9,1},{6,2,8,0},{3,5,3,5},{4,10,1,1},{10,1,3,2},{5,7,0,4},{5,3,7,1},{6,8,1,1},{8,8,0,0},{11,1,0,4},{14,1,0,1},{9,3,2,2},{8,2,1,5},{0,0,2,14},{3,3,9,1},{10,1,5,0},{8,3,1,4},{1,5,8,2},{6,1,9,0},{3,2,1,10},{3,11,1,1},{7,6,3,0},{9,0,3,4},{5,2,5,4},{0,2,3,11},{15,0,0,1},{0,6,6,4}, - {3,4,9,0},{4,7,0,5},{0,4,4,8},{0,13,2,1},{2,4,1,9},{3,2,5,6},{10,6,0,0},{3,5,6,2},{8,0,4,4},{1,3,6,6},{7,7,0,2},{6,1,4,5},{0,11,1,4},{2,2,8,4},{0,1,2,13},{15,0,1,0},{7,2,6,1},{8,1,7,0},{1,8,4,3},{2,13,1,0},{1,0,7,8},{14,2,0,0},{1,8,1,6},{9,3,3,1},{0,0,7,9},{4,4,1,7},{9,0,6,1},{10,2,4,0},{1,7,3,5},{0,3,8,5},{5,2,4,5},{1,2,5,8}, - {0,8,7,1},{10,3,2,1},{12,0,4,0},{2,1,4,9},{5,2,2,7},{1,9,3,3},{15,1,0,0},{6,3,4,3},{9,5,0,2},{1,6,9,0},{6,6,0,4},{13,2,1,0},{5,1,8,2},{0,5,11,0},{7,1,0,8},{1,2,12,1},{0,3,3,10},{7,4,2,3},{5,1,4,6},{7,0,3,6},{3,12,0,1},{3,4,5,4},{1,10,0,5},{7,4,3,2},{10,5,0,1},{13,3,0,0},{2,5,4,5},{3,10,1,2},{5,1,2,8},{14,0,1,1},{1,5,4,6},{1,4,5,6}, - {2,3,11,0},{11,0,4,1},{11,2,2,1},{5,3,8,0},{1,3,10,2},{0,1,13,2},{3,1,4,8},{4,2,4,6},{1,5,6,4},{2,1,11,2},{1,2,9,4},{4,7,3,2},{6,2,5,3},{7,2,2,5},{8,1,4,3},{3,2,8,3},{12,1,0,3},{7,8,1,0},{7,0,2,7},{5,10,0,1},{0,2,14,0},{2,9,3,2},{7,0,0,9},{11,1,4,0},{10,4,1,1},{2,2,9,3},{5,7,2,2},{1,3,1,11},{13,2,0,1},{4,2,8,2},{2,3,1,10},{4,2,5,5}, - {7,0,7,2},{10,0,0,6},{0,8,5,3},{4,4,0,8},{12,4,0,0},{0,1,14,1},{8,0,1,7},{5,1,5,5},{11,0,3,2},{0,4,1,11},{0,8,8,0},{0,2,5,9},{7,3,2,4},{7,8,0,1},{1,0,3,12},{7,4,5,0},{1,6,7,2},{7,6,1,2},{9,6,1,0},{12,2,0,2},{4,1,6,5},{4,0,1,11},{8,4,4,0},{13,0,1,2},{8,6,2,0},{4,12,0,0},{2,7,5,2},{2,0,5,9},{5,4,5,2},{3,8,5,0},{7,3,3,3},{4,4,8,0}, - {2,1,3,10},{5,0,1,10},{6,4,3,3},{4,9,1,2},{1,4,0,11},{11,3,1,1},{4,0,12,0},{13,0,0,3},{6,1,6,3},{9,0,4,3},{8,0,0,8},{8,4,0,4},{0,12,1,3},{0,4,10,2},{3,4,8,1},{1,3,8,4},{9,2,5,0},{5,7,4,0},{1,0,11,4},{4,10,0,2},{1,3,12,0},{6,9,0,1},{5,0,9,2},{5,9,2,0},{13,1,0,2},{9,3,4,0},{9,4,0,3},{3,1,12,0},{2,4,3,7},{1,2,13,0},{2,2,4,8},{6,8,0,2}, - {9,2,1,4},{9,5,1,1},{2,0,4,10},{5,4,0,7},{0,0,6,10},{1,2,0,13},{4,7,2,3},{6,5,5,0},{3,3,1,9},{1,6,1,8},{12,2,1,1},{4,4,5,3},{1,0,6,9},{0,6,10,0},{4,8,3,1},{4,3,2,7},{2,1,7,6},{1,9,1,5},{3,1,3,9},{8,7,1,0},{1,2,3,10},{14,1,1,0},{5,4,4,3},{3,7,0,6},{7,4,1,4},{3,7,5,1},{1,1,0,14},{0,10,3,3},{0,4,3,9},{1,7,7,1},{2,0,10,4},{5,8,0,3}, - {6,7,3,0},{0,8,4,4},{5,7,3,1},{7,9,0,0},{7,6,2,1},{0,4,5,7},{6,3,5,2},{1,2,1,12},{5,2,0,9},{8,5,0,3},{4,6,1,5},{1,1,7,7},{10,5,1,0},{1,2,8,5},{1,8,2,5},{5,1,0,10},{6,9,1,0},{13,0,2,1},{8,3,5,0},{6,3,6,1},{2,11,3,0},{3,7,3,3},{1,5,2,8},{7,5,2,2},{0,6,7,3},{13,1,1,1},{5,3,4,4},{7,2,7,0},{5,8,3,0},{3,13,0,0},{0,7,9,0},{8,0,3,5}, - {1,3,7,5},{4,0,2,10},{12,0,1,3},{1,7,6,2},{3,9,0,4},{7,2,0,7},{0,1,7,8},{2,1,8,5},{0,13,1,2},{0,8,1,7},{5,0,11,0},{5,6,2,3},{0,3,0,13},{2,3,4,7},{5,6,3,2},{4,2,10,0},{3,3,7,3},{7,2,5,2},{1,1,11,3},{12,3,0,1},{5,1,1,9},{1,15,0,0},{9,7,0,0},{9,1,2,4},{0,7,3,6},{3,0,13,0},{3,0,11,2},{0,6,5,5},{8,2,2,4},{6,10,0,0},{4,8,4,0},{0,0,3,13}, - {0,4,12,0},{7,1,6,2},{3,5,0,8},{8,0,6,2},{6,2,3,5},{2,10,0,4},{4,11,0,1},{6,1,5,4},{5,1,3,7},{0,11,3,2},{4,6,0,6},{2,6,0,8},{3,1,7,5},{2,14,0,0},{2,9,2,3},{0,3,4,9},{11,0,1,4},{13,0,3,0},{8,3,0,5},{0,5,3,8},{5,11,0,0},{0,1,4,11},{2,1,9,4},{3,4,4,5},{7,1,2,6},{12,2,2,0},{9,4,1,2},{6,0,2,8},{4,6,2,4},{11,2,3,0},{3,2,2,9},{10,3,1,2}, - {1,1,2,12},{0,5,2,9},{0,1,11,4},{6,2,4,4},{2,8,2,4},{0,9,4,3},{11,0,2,3},{0,2,11,3},{6,0,7,3},{0,3,6,7},{4,5,5,2},{1,2,6,7},{7,5,1,3},{9,0,2,5},{2,6,4,4},{4,1,9,2},{4,8,2,2},{1,12,3,0},{0,9,6,1},{0,10,6,0},{3,1,5,7},{2,13,0,1},{2,2,1,11},{3,6,0,7},{5,6,5,0},{5,5,4,2},{4,0,3,9},{3,4,1,8},{0,11,2,3},{2,12,1,1},{7,1,3,5},{7,0,9,0}, - {8,0,8,0},{1,0,2,13},{3,3,10,0},{2,4,4,6},{2,3,8,3},{1,10,5,0},{7,3,0,6},{2,9,0,5},{1,4,6,5},{6,6,3,1},{5,6,0,5},{6,3,0,7},{3,10,2,1},{2,5,5,4},{3,8,4,1},{1,14,0,1},{10,3,3,0},{3,5,7,1},{1,1,3,11},{2,4,0,10},{9,3,1,3},{5,10,1,0},{3,0,6,7},{3,1,9,3},{11,2,1,2},{5,3,3,5},{0,5,1,10},{4,1,11,0},{10,2,0,4},{7,6,0,3},{2,7,0,7},{4,2,2,8}, - {6,1,7,2},{4,9,2,1},{0,0,8,8},{3,7,2,4},{9,6,0,1},{0,12,4,0},{6,7,1,2},{0,7,2,7},{1,0,10,5},{0,0,14,2},{2,7,3,4},{5,0,0,11},{7,7,1,1},{6,2,7,1},{4,5,3,4},{3,5,1,7},{5,9,1,1},{6,2,1,7},{3,2,0,11},{0,11,0,5},{3,11,2,0},{10,1,4,1},{7,0,4,5},{11,4,0,1},{10,3,0,3},{0,2,4,10},{0,15,0,1},{0,11,5,0},{6,7,2,1},{1,12,2,1},{4,1,3,8},{1,0,13,2}, - {1,8,5,2},{7,0,1,8},{3,12,1,0},{9,2,4,1},{1,7,4,4},{11,4,1,0},{4,3,8,1},{2,8,4,2},{1,11,3,1},{1,1,4,10},{4,10,2,0},{8,2,5,1},{1,0,9,6},{5,3,2,6},{0,9,7,0},{10,2,2,2},{5,8,1,2},{8,7,0,1},{0,3,12,1},{1,0,1,14},{4,8,0,4},{3,8,0,5},{4,6,5,1},{0,9,5,2},{10,2,3,1},{2,3,9,2},{1,0,12,3},{11,3,0,2},{4,5,2,5},{0,2,12,2},{9,1,0,6},{9,2,0,5}, - {1,2,7,6},{4,7,4,1},{0,12,2,2},{0,0,0,16},{2,8,3,3},{3,6,2,5},{0,6,3,7},{7,5,4,0},{3,3,3,7},{3,3,0,10},{5,0,6,5},{0,0,10,6},{8,5,3,0},{8,1,5,2},{6,0,9,1},{11,1,2,2},{2,11,2,1},{9,5,2,0},{3,0,4,9},{2,2,12,0},{2,6,6,2},{2,1,13,0},{6,0,5,5},{2,0,14,0},{2,11,1,2},{4,4,7,1},{2,0,11,3},{3,1,1,11},{2,9,4,1},{3,7,6,0},{14,0,2,0},{1,10,4,1}, - {8,0,7,1},{3,6,5,2},{0,3,11,2},{2,5,6,3},{11,1,3,1},{6,5,3,2},{3,8,1,4},{0,2,7,7},{2,10,2,2},{1,6,2,7},{11,0,0,5},{12,1,1,2},{12,1,2,1},{0,7,1,8},{0,3,9,4},{0,2,1,13},{7,1,4,4},{10,1,0,5},{4,0,8,4},{5,2,7,2},{0,2,0,14},{4,3,7,2},{2,7,1,6},{1,2,2,11},{6,3,3,4},{1,14,1,0},{2,4,6,4},{5,3,6,2},{5,3,5,3},{8,4,1,3},{1,3,0,12},{3,5,2,6}, - {1,8,7,0},{0,7,4,5},{2,1,6,7},{4,11,1,0},{7,2,4,3},{6,1,3,6},{4,5,4,3},{2,11,0,3},{1,5,7,3},{12,0,2,2},{5,0,4,7},{1,13,0,2},{7,7,2,0},{4,1,7,4},{4,5,0,7},{5,0,5,6},{6,5,4,1},{2,4,2,8},{1,10,1,4},{6,3,1,6},{3,3,8,2},{0,7,7,2},{4,4,2,6},{1,1,8,6},{1,12,0,3},{2,1,12,1},{1,9,2,4},{1,11,0,4},{2,5,2,7},{10,0,3,3},{4,6,3,3},{3,7,1,5}, - {1,9,0,6},{7,1,7,1},{1,6,5,4},{9,2,3,2},{6,2,2,6},{2,2,2,10},{8,3,3,2},{0,1,8,7},{2,0,8,6},{0,3,1,12},{9,4,2,1},{9,4,3,0},{6,2,6,2},{1,8,0,7},{5,1,10,0},{0,5,5,6},{8,2,4,2},{2,3,2,9},{6,0,3,7},{2,2,6,6},{2,6,2,6},{1,13,2,0},{9,3,0,4},{7,3,5,1},{6,5,2,3},{5,2,6,3},{2,0,12,2},{5,7,1,3},{8,1,3,4},{3,1,10,2},{1,0,15,0},{0,8,0,8}, - {5,0,7,4},{4,4,6,2},{0,1,0,15},{10,0,1,5},{7,3,4,2},{4,9,3,0},{2,5,7,2},{3,4,2,7},{8,3,2,3},{5,1,6,4},{0,10,2,4},{6,6,1,3},{6,0,0,10},{4,4,3,5},{1,3,9,3},{7,5,3,1},{3,0,7,6},{1,8,6,1},{4,3,0,9},{3,11,0,2},{6,0,6,4},{0,1,3,12},{0,4,2,10},{5,5,6,0},{4,1,4,7},{8,1,6,1},{5,6,4,1},{8,4,2,2},{4,3,1,8},{3,0,2,11},{1,11,4,0},{0,8,3,5}, - {5,1,7,3},{7,0,8,1},{4,3,5,4},{4,6,4,2},{3,2,4,7},{1,6,3,6},{0,7,8,1},{3,0,1,12},{9,1,4,2},{7,4,0,5},{1,7,0,8},{5,4,1,6},{9,1,5,1},{1,1,9,5},{4,1,1,10},{5,3,0,8},{2,2,5,7},{4,0,0,12},{9,0,7,0},{3,4,0,9},{0,2,6,8},{8,2,0,6},{3,2,6,5},{4,2,6,4},{3,6,4,3},{2,8,6,0},{5,0,3,8},{0,4,0,12},{0,16,0,0},{0,9,2,5},{4,0,11,1},{1,6,4,5}, - {0,1,6,9},{3,4,6,3},{3,0,10,3},{7,0,6,3},{1,4,9,2},{1,5,3,7},{8,5,2,1},{0,12,0,4},{7,2,3,4},{0,5,6,5},{11,1,1,3},{6,5,0,5},{2,1,5,8},{1,4,11,0},{9,1,1,5},{0,0,13,3},{5,8,2,1},{2,12,0,2},{3,3,6,4},{4,1,10,1},{4,0,5,7},{8,1,0,7},{5,1,9,1},{4,3,3,6},{0,2,2,12},{6,3,2,5},{0,0,12,4},{1,5,1,9},{2,6,5,3},{3,6,3,4},{2,12,2,0},{1,6,8,1}, - {10,1,1,4},{1,3,4,8},{7,4,4,1},{1,11,1,3},{1,2,10,3},{3,9,3,1},{8,5,1,2},{2,10,4,0},{4,2,0,10},{2,7,6,1},{8,2,3,3},{1,5,5,5},{3,1,0,12},{3,10,3,0},{8,0,5,3},{0,6,8,2},{0,3,13,0},{0,0,16,0},{1,9,4,2},{4,1,8,3},{1,6,6,3},{0,10,5,1},{0,1,12,3},{4,0,6,6},{3,8,3,2},{0,5,4,7},{1,0,14,1},{0,4,6,6},{3,9,1,3},{3,5,8,0},{3,6,6,1},{5,4,7,0}, - {3,0,12,1},{8,6,1,1},{2,9,5,0},{6,1,1,8},{4,1,2,9},{3,9,4,0},{5,2,9,0},{0,12,3,1},{1,4,10,1},{4,0,7,5},{3,1,2,10},{5,4,2,5},{5,5,5,1},{4,2,3,7},{1,7,5,3},{2,8,0,6},{8,1,2,5},{3,8,2,3},{6,1,2,7},{3,9,2,2},{9,0,0,7},{0,8,6,2},{8,4,3,1},{0,2,8,6},{6,5,1,4},{2,3,5,6},{2,10,3,1},{0,7,0,9},{4,2,7,3},{2,4,8,2},{7,1,1,7},{2,4,7,3}, - {2,4,10,0},{0,1,10,5},{4,7,1,4},{0,10,4,2},{9,0,1,6},{1,9,6,0},{3,3,4,6},{4,5,7,0},{5,5,2,4},{2,8,1,5},{2,3,6,5},{0,1,1,14},{3,2,3,8},{10,1,2,3},{9,1,6,0},{3,4,3,6},{2,2,0,12},{0,0,9,7},{4,0,9,3},{7,0,5,4},{4,5,6,1},{2,5,1,8},{2,5,9,0},{3,5,4,4},{1,3,11,1},{7,1,5,3},{3,2,7,4},{1,4,2,9},{1,11,2,2},{2,2,3,9},{5,0,10,1},{3,2,11,0}, - {1,10,3,2},{8,3,4,1},{3,6,7,0},{0,7,5,4},{1,3,3,9},{2,2,10,2},{1,9,5,1},{0,5,0,11},{3,0,3,10},{0,4,8,4},{2,7,7,0},{2,0,2,12},{1,2,11,2},{6,3,7,0},{0,6,2,8},{0,10,1,5},{0,9,0,7},{6,4,4,2},{6,0,1,9},{1,5,10,0},{5,4,6,1},{5,5,3,3},{0,0,4,12},{0,3,2,11},{1,4,1,10},{3,0,9,4},{5,5,0,6},{1,7,8,0},{2,0,3,11},{6,4,1,5},{10,0,6,0},{0,6,0,10}, - {0,4,11,1},{3,1,6,6},{2,5,8,1},{0,2,10,4},{3,1,11,1},{6,6,2,2},{1,1,10,4},{2,1,2,11},{6,1,8,1},{0,2,13,1},{0,7,6,3},{6,8,2,0},{3,0,0,13},{4,4,4,4},{6,2,0,8},{7,3,1,5},{0,11,4,1},{6,7,0,3},{2,6,3,5},{5,2,1,8},{7,1,8,0},{5,5,1,5},{1,8,3,4},{8,2,6,0},{6,0,10,0},{5,6,1,4},{1,4,4,7},{2,7,4,3},{1,4,8,3},{5,4,3,4},{1,10,2,3},{2,9,1,4}, - {2,2,11,1},{2,5,0,9},{0,0,1,15},{0,0,11,5},{0,4,7,5},{0,1,15,0},{2,1,0,13},{0,3,10,3},{8,0,2,6},{3,3,2,8},{3,5,5,3},{1,7,1,7},{1,3,2,10},{4,0,4,8},{2,0,9,5},{1,1,1,13},{2,2,7,5},{2,1,10,3},{4,2,1,9},{4,3,6,3},{1,3,5,7},{2,5,3,6},{1,0,8,7},{5,0,2,9},{2,8,5,1},{1,6,0,9},{0,0,5,11},{0,4,9,3},{2,0,7,7},{1,7,2,6},{2,1,1,12},{2,4,9,1}, - {0,5,7,4},{6,0,4,6},{3,2,10,1},{0,6,1,9},{2,6,1,7},{0,5,8,3},{4,1,0,11},{1,2,4,9},{4,1,5,6},{6,1,0,9},{1,4,3,8},{4,5,1,6},{1,0,5,10},{5,3,1,7},{0,9,1,6},{2,0,1,13},{2,0,6,8},{8,1,1,6},{1,5,9,1},{0,6,9,1},{0,3,5,8},{0,2,9,5},{5,2,8,1},{1,1,14,0},{3,2,9,2},{5,0,8,3},{0,5,10,1},{5,2,3,6},{2,6,7,1},{2,3,0,11},{0,1,9,6},{1,0,4,11}, - {3,0,5,8},{0,0,15,1},{2,4,5,5},{0,3,7,6},{2,0,0,14},{1,1,12,2},{2,6,8,0},{3,1,8,4},{0,1,5,10} - }; - - // All total orderings for 16 pixels [0,2] 2-bit selectors. - // BC1 selector order: 0, 1, 2 - // Note this is different from g_unique_total_orders4[], which reorders the selectors into linear order. - const uint32_t NUM_UNIQUE_TOTAL_ORDERINGS3 = 153; - static uint8_t g_unique_total_orders3[NUM_UNIQUE_TOTAL_ORDERINGS3][3] = - { - {6,0,10},{3,6,7},{3,0,13},{13,3,0},{12,4,0},{9,1,6},{2,13,1},{4,7,5},{7,5,4},{9,6,1},{7,4,5},{8,6,2},{16,0,0},{10,6,0},{2,7,7}, - {0,0,16},{0,3,13},{1,15,0},{0,2,14},{1,4,11},{15,1,0},{1,12,3},{9,2,5},{14,1,1},{8,2,6},{3,3,10},{4,2,10},{14,0,2},{0,14,2},{1,7,8},{6,6,4}, - {11,5,0},{6,4,6},{11,3,2},{4,3,9},{7,1,8},{10,4,2},{12,1,3},{11,0,5},{9,3,4},{1,0,15},{9,0,7},{2,6,8},{12,2,2},{6,2,8},{6,8,2},{15,0,1}, - {4,8,4},{0,4,12},{8,5,3},{5,9,2},{11,2,3},{12,3,1},{6,3,7},{1,1,14},{2,9,5},{1,8,7},{4,10,2},{7,7,2},{13,1,2},{0,15,1},{3,2,11},{7,0,9}, - {4,4,8},{3,8,5},{0,5,11},{13,2,1},{1,10,5},{4,11,1},{3,10,3},{5,10,1},{10,2,4},{0,6,10},{14,2,0},{11,4,1},{3,12,1},{1,13,2},{1,5,10},{5,11,0}, - {12,0,4},{8,1,7},{6,10,0},{3,13,0},{7,2,7},{0,7,9},{5,8,3},{0,12,4},{11,1,4},{13,0,3},{0,16,0},{5,7,4},{10,3,3},{10,0,6},{0,13,3},{4,6,6}, - {2,8,6},{2,5,9},{7,8,1},{2,1,13},{2,0,14},{7,3,6},{5,1,10},{3,11,2},{5,4,7},{8,3,5},{10,5,1},{6,9,1},{1,3,12},{4,5,7},{2,2,12},{4,1,11}, - {0,8,8},{4,12,0},{6,5,5},{8,7,1},{5,5,6},{3,7,6},{7,9,0},{4,9,3},{0,10,6},{8,0,8},{5,3,8},{10,1,5},{6,1,9},{7,6,3},{9,5,2},{0,1,15}, - {9,7,0},{2,14,0},{3,4,9},{8,4,4},{9,4,3},{0,9,7},{1,9,6},{3,9,4},{5,2,9},{2,3,11},{5,6,5},{1,14,1},{6,7,3},{2,4,10},{2,12,2},{8,8,0}, - {2,10,4},{4,0,12},{0,11,5},{2,11,3},{1,11,4},{3,5,8},{5,0,11},{3,1,12},{1,2,13},{1,6,9} - }; - - // For each total ordering, this table indicates which other total orderings are likely to improve quality using a least squares pass. Each array is sorted by usefulness. - static uint16_t g_best_total_orderings4[NUM_UNIQUE_TOTAL_ORDERINGS4][MAX_TOTAL_ORDERINGS4] = - { -#if RGBCX_USE_SMALLER_TABLES - { 202,120,13,318,15,23,403,450,5,51,260,128,77,21,33,494,515,523,4,141,269,1,2,700,137,49,48,102,7,64,753,82 }, - { 13,141,23,217,115,51,77,2,64,21,0,4,5,317,137,269,202,33,318,7,291,352,9,10,3,180,32,6,365,102,341,349 }, - { 29,58,262,1,52,74,6,171,5,287,151,334,27,500,75,26,331,223,53,635,220,19,50,45,46,17,14,396,163,409,324,70 }, - { 40,51,33,453,14,23,62,56,12,196,730,475,153,99,403,775,117,130,585,34,4,17,162,11,139,57,102,38,108,47,123,440 }, - { 33,23,51,13,102,64,202,128,12,40,15,196,153,10,1,2,77,99,141,0,515,5,117,3,120,403,700,165,22,14,269,453 }, - { 13,23,51,4,77,141,202,33,115,64,32,128,0,11,177,40,15,102,2,217,7,137,269,21,90,59,515,1,180,403,22,6 }, - { 26,235,19,47,648,624,78,145,27,112,122,64,444,6,630,453,25,42,65,130,711,85,390,113,416,108,665,29,730,138,644,95 }, - { 64,141,352,751,217,247,237,437,177,269,86,954,947,875,32,318,95,77,304,92,597,180,232,291,128,864,349,588,372,202,312,1 }, - { 642,898,180,638,901,341,82,197,10,951,15,515,165,762,700,253,811,753,752,365,143,479,244,569,8,110,351,873,55,31,499,116 }, - { 221,23,51,125,438,254,13,21,39,49,308,656,0,115,530,159,158,401,30,166,912,386,165,688,518,9,105,627,424,22,421,33 }, - { 143,31,1,44,197,8,180,125,116,55,13,498,23,341,638,242,93,15,2,141,0,901,752,115,36,206,165,479,338,365,515,762 }, - { 12,23,51,13,14,15,37,99,515,38,700,117,2,196,134,153,753,64,54,33,128,120,21,0,328,5,139,82,453,719,457,1 }, - { 13,15,23,515,961,700,457,753,51,115,4,165,197,2,38,569,1,474,0,37,99,719,5,12,629,14,11,3,33,77,64,10 }, - { 15,515,700,753,1,0,2,4,3,23,134,12,961,5,10,197,11,33,82,120,457,51,165,7,6,341,217,21,77,9,40,180 }, - { 13,51,23,457,719,961,730,401,165,453,0,117,386,15,134,1,758,153,12,54,515,99,11,2,700,5,753,4,308,33,6,899 }, - { 134,898,82,117,13,33,77,102,23,260,341,351,120,901,197,153,961,111,196,110,180,457,854,10,450,8,165,40,4,115,0,365 }, - { 60,18,126,167,35,16,191,71,24,92,121,271,68,107,212,146,118,150,199,7,21,1,9,575,727,5,566,48,0,132,108,273 }, - { 62,136,129,123,128,41,162,17,249,211,214,789,618,710,38,678,248,507,57,64,152,269,119,3,177,183,597,106,4,179,216,90 }, - { 403,523,51,475,494,453,817,899,202,23,450,13,421,120,102,730,33,128,4,1,805,5,7,153,757,260,318,196,77,457,326,65 }, - { 4,59,3,62,12,33,56,193,27,21,102,17,40,77,76,84,32,0,6,123,119,177,128,11,18,611,605,25,13,51,73,210 }, - { 43,20,319,422,414,945,0,7,819,61,5,376,325,173,804,904,470,693,97,707,14,49,22,104,147,107,95,32,426,1,330,577 }, - { 13,23,51,2,0,115,4,141,217,33,10,77,1,15,64,180,3,515,7,6,22,102,11,5,40,9,165,700,202,197,317,341 }, - { 28,49,0,105,1,24,65,159,35,55,95,239,16,2,109,7,9,14,170,320,347,168,424,158,10,301,124,5,67,21,64,36 }, - { 15,515,700,753,0,1,13,2,117,4,12,10,5,165,457,3,9,134,11,7,6,51,77,64,961,82,33,197,14,341,120,141 }, - { 7,71,14,149,97,18,60,16,150,92,398,189,140,124,24,273,35,2,69,302,154,68,0,336,517,43,66,28,118,251,230,1 }, - { 4,102,33,77,40,59,11,624,210,12,128,342,5,503,91,139,64,32,25,494,202,678,416,0,403,275,21,450,196,318,523,177 }, - { 25,19,42,6,122,813,256,235,85,26,436,53,297,573,680,390,445,63,27,416,80,233,65,73,389,283,45,605,194,17,250,343 }, - { 402,102,202,128,33,300,403,23,12,77,40,21,342,117,483,99,25,494,6,4,63,32,84,569,139,757,475,318,19,26,196,134 }, - { 158,9,0,109,39,49,65,22,35,168,55,24,68,124,159,16,185,344,333,154,254,272,175,289,1,577,95,28,105,810,30,169 }, - { 197,180,115,237,498,165,2,5,287,546,400,3,61,34,509,13,297,80,341,52,45,186,58,881,23,873,468,176,64,17,311,250 }, - { 120,968,373,260,704,110,450,202,137,318,77,95,269,326,217,717,661,652,851,349,93,1,518,98,827,291,21,177,82,33,848,719 }, - { 44,116,144,268,434,489,367,384,98,127,918,93,948,31,206,940,855,0,203,137,9,22,617,141,332,105,393,492,959,282,299,131 }, - { 13,77,23,33,51,0,64,141,102,4,2,115,1,6,202,15,10,128,269,7,177,180,3,40,22,11,515,217,117,318,700,137 }, - { 15,515,700,753,4,11,141,40,165,23,64,180,13,202,32,3,51,125,5,197,21,128,0,93,77,1,120,82,269,117,110,59 }, - { 176,231,585,62,34,14,412,161,56,236,527,57,17,3,51,202,4,23,369,283,128,13,472,440,84,361,136,457,381,130,719,53 }, - { 9,0,180,217,237,101,141,352,88,100,230,64,175,317,115,498,68,39,30,1,702,83,213,36,365,208,752,13,252,321,952,546 }, - { 28,9,22,1,49,0,109,39,83,95,86,30,13,105,128,55,141,168,158,67,31,159,208,12,96,5,185,2,160,64,137,23 }, - { 72,4,38,12,51,89,477,11,57,76,401,308,23,474,99,148,413,179,59,13,431,152,54,569,17,3,205,629,197,421,405,15 }, - { 457,13,23,961,15,51,515,700,165,12,753,629,11,1,719,117,0,3,2,37,569,197,40,328,33,5,153,134,99,64,38,196 }, - { 254,100,310,9,30,1,39,625,166,265,190,0,272,557,131,731,31,98,578,688,404,93,101,88,49,21,127,264,44,36,252,478 }, - { 51,23,12,13,15,128,99,120,10,202,515,153,64,82,700,33,165,2,5,117,403,1,141,0,3,196,37,453,753,197,260,93 }, - { 38,99,542,139,453,117,196,23,457,13,328,111,37,134,961,11,12,51,40,775,587,401,474,54,153,477,41,629,33,475,14,277 }, - { 6,85,25,233,343,91,26,63,138,29,19,65,283,4,81,235,42,122,605,64,648,256,174,370,74,389,718,59,45,194,445,416 }, - { 49,5,97,20,197,21,18,193,0,64,408,729,173,350,43,422,165,7,14,104,61,32,509,713,523,102,120,95,125,397,35,232 }, - { 144,116,268,434,384,489,367,206,93,855,940,44,98,332,617,127,959,911,137,282,203,31,22,219,141,9,131,276,417,0,1,120 }, - { 17,106,64,62,32,255,136,292,476,162,129,241,123,141,41,237,720,214,209,352,519,211,186,148,752,247,507,90,21,77,197,119 }, - { 2,29,52,50,5,58,14,6,27,1,366,357,45,53,17,19,171,151,26,181,133,38,218,764,287,583,61,113,3,487,600,281 }, - { 130,59,196,412,381,730,711,236,77,210,202,402,453,99,401,108,361,803,291,283,153,4,57,51,128,183,14,719,503,117,23,11 }, - { 13,23,51,141,77,4,33,64,115,0,217,10,180,202,2,102,11,9,15,165,40,21,128,352,22,7,197,3,317,515,269,1 }, - { 23,13,202,51,120,15,21,5,141,1,128,269,137,515,64,102,125,48,98,33,260,523,318,93,700,165,450,77,2,12,403,82 }, - { 1,2,14,46,29,67,38,52,5,171,58,24,103,69,96,70,83,181,54,75,163,223,16,45,112,309,155,0,186,35,18,108 }, - { 15,515,700,753,13,0,1,2,153,5,23,10,117,3,9,7,134,165,12,6,341,33,4,14,77,457,115,21,719,180,217,82 }, - { 197,165,509,13,391,180,308,115,23,546,5,498,2,29,3,401,901,61,34,80,14,457,250,569,237,873,38,297,45,15,468,386 }, - { 19,73,27,250,200,714,444,472,26,53,34,17,813,322,283,390,128,297,78,123,432,14,436,136,106,690,57,122,389,80,503,3 }, - { 3,17,21,45,62,32,38,12,155,14,2,328,5,99,401,536,828,13,227,488,106,51,719,119,540,76,165,221,115,629,209,41 }, - { 115,341,873,197,365,13,901,180,569,752,317,1,10,498,143,634,261,0,509,15,943,237,44,31,116,601,165,127,282,23,141,64 }, - { 453,51,23,403,33,421,475,102,15,153,196,515,13,700,117,523,12,40,753,21,4,134,0,494,670,899,22,801,730,10,11,401 }, - { 23,13,51,33,12,117,153,134,453,196,15,99,515,40,14,700,128,102,11,753,77,64,403,202,0,401,475,37,65,2,3,38 }, - { 2,7,5,14,70,1,29,61,52,45,6,112,66,16,21,32,592,46,38,135,87,58,186,315,290,128,113,0,64,48,227,23 }, - { 33,23,102,51,128,13,64,202,141,1,77,10,153,40,196,117,2,3,0,5,15,269,403,12,137,134,318,165,120,6,453,99 }, - { 16,92,7,20,43,35,126,71,60,14,107,18,68,97,0,121,279,149,24,246,191,48,118,575,55,140,362,783,230,150,375,566 }, - { 13,23,4,33,77,64,51,102,141,128,32,10,0,202,40,115,59,22,90,11,177,21,291,6,7,318,180,117,137,2,95,165 }, - { 507,162,129,41,4,211,62,38,123,59,57,248,183,130,99,11,3,361,202,17,402,556,266,305,803,210,128,184,152,136,313,117 }, - { 643,123,193,650,802,18,25,389,718,256,65,289,84,91,619,511,415,90,235,63,57,510,324,216,862,102,6,183,108,397,217,736 }, - { 13,23,15,1,515,51,0,2,700,5,753,165,141,115,12,3,4,180,21,197,457,7,6,10,120,9,33,202,77,32,8,11 }, - { 23,51,13,453,64,403,12,21,5,202,128,475,165,141,523,95,125,115,3,1,4,730,120,32,2,494,180,719,457,197,450,401 }, - { 204,74,135,66,6,174,192,7,138,172,85,353,348,580,280,97,95,500,29,64,426,32,87,889,65,81,25,2,52,43,568,673 }, - { 35,0,68,69,24,9,1,16,65,103,149,133,18,114,28,50,83,2,189,7,46,14,101,336,175,124,251,55,71,218,38,238 }, - { 16,101,0,118,9,18,24,68,35,154,71,124,60,212,191,520,55,806,694,167,28,39,364,375,1,346,252,65,604,302,22,21 }, - { 0,9,16,35,1,24,68,18,65,21,103,67,13,149,28,189,71,23,101,238,114,7,335,133,486,141,22,212,48,50,30,118 }, - { 13,202,23,77,33,51,128,5,21,141,115,32,102,64,4,0,318,269,10,15,291,2,494,177,11,217,3,515,22,137,6,700 }, - { 16,92,60,35,7,18,24,68,150,149,14,71,0,375,97,126,118,107,230,191,246,273,140,55,175,653,9,575,2,28,566,517 }, - { 76,90,21,179,316,148,205,32,464,288,184,257,245,1,89,2,460,57,152,45,38,358,645,5,12,449,350,48,37,17,4,14 }, - { 19,27,26,813,80,297,17,495,436,53,73,200,4,378,250,59,106,25,45,128,361,42,113,469,122,390,77,40,736,6,11,136 }, - { 6,26,235,138,19,145,112,70,331,262,25,42,52,624,27,453,122,47,500,78,648,85,29,2,630,632,409,113,50,226,108,75 }, - { 7,16,14,24,92,35,18,2,46,9,60,140,0,87,50,5,54,13,12,38,171,23,126,21,58,64,1,70,128,71,220,163 }, - { 90,205,257,184,32,179,460,5,245,45,2,288,769,524,57,21,152,229,17,1,497,4,292,59,619,452,432,76,476,11,266,14 }, - { 15,515,700,753,4,5,11,141,13,1,33,3,0,128,202,23,180,21,2,64,269,32,117,134,120,40,102,318,153,17,137,352 }, - { 47,130,711,108,453,412,730,196,390,283,78,27,51,183,381,236,128,200,719,14,153,472,503,34,59,250,3,4,57,803,123,432 }, - { 12,277,51,474,111,153,23,99,13,37,961,94,629,542,569,431,79,139,38,134,117,453,33,188,196,40,115,15,11,157,401,515 }, - { 17,495,469,106,26,378,80,27,161,483,19,742,527,436,383,862,73,136,53,814,297,6,119,84,62,56,25,3,209,611,4,128 }, - { 81,681,636,91,0,750,370,104,718,138,18,693,173,784,29,397,348,74,192,673,174,65,6,207,64,280,306,52,671,32,355,319 }, - { 15,515,700,753,33,77,4,102,115,117,40,13,1,153,134,11,5,217,23,196,2,21,3,317,32,365,0,341,291,59,12,51 }, - { 0,9,28,35,68,1,65,67,101,39,69,175,16,238,13,22,96,124,18,24,251,30,55,12,23,2,50,141,114,5,154,103 }, - { 23,33,77,13,117,40,11,102,64,4,51,403,153,453,10,0,196,134,128,65,12,291,86,99,95,59,15,141,202,180,137,719 }, - { 214,90,289,6,874,64,25,65,235,42,751,249,256,312,194,85,746,875,174,32,525,288,519,835,247,348,233,544,217,524,437,352 }, - { 1,22,2,0,36,67,28,5,49,95,12,50,168,83,105,55,7,9,14,194,103,23,114,21,584,46,10,13,38,69,208,159 }, - { 269,141,13,202,33,180,318,77,291,137,102,352,128,23,349,51,31,217,372,317,125,197,44,21,11,5,901,1,18,0,4,494 }, - { 435,144,274,88,203,418,30,1,190,410,96,778,100,530,521,326,466,795,686,166,960,321,382,264,367,822,131,31,692,9,213,93 }, - { 76,72,90,21,37,179,12,205,32,428,148,38,308,405,4,413,57,184,749,245,316,221,54,645,288,1,152,155,464,257,2,14 }, - { 77,33,64,102,13,141,23,2,40,1,51,10,0,115,6,180,202,128,4,3,177,269,15,7,22,165,291,14,217,318,137,11 }, - { 397,81,4,32,65,788,693,804,681,11,249,21,91,64,690,494,3,0,422,56,348,725,194,123,23,59,523,319,61,510,95,90 }, - { 60,126,16,7,92,121,314,246,35,107,150,132,14,146,24,18,199,298,232,71,359,140,672,97,392,649,5,423,95,21,22,388 }, - { 15,515,141,217,115,700,13,23,120,317,753,180,33,260,110,137,341,51,1,365,4,77,64,202,0,40,36,352,197,269,10,21 }, - { 111,134,117,474,23,13,961,12,569,431,37,15,51,115,515,700,277,99,753,38,197,405,457,4,72,94,629,45,11,89,54,148 }, - { 23,13,51,5,1,15,2,21,12,202,141,0,515,165,120,32,4,64,700,3,115,197,269,125,753,7,9,128,6,180,453,403 }, - { 13,141,4,23,5,2,115,217,202,51,180,137,269,352,77,1,317,3,21,318,0,15,9,64,10,197,11,341,33,515,752,7 }, - { 165,125,197,13,391,21,23,558,48,380,97,120,298,33,14,426,66,115,32,386,900,180,6,98,357,237,326,509,51,278,221,457 }, - { 120,82,15,260,515,1,351,77,450,700,13,21,141,23,753,202,217,93,110,33,51,854,5,128,326,102,137,180,817,48,269,352 }, - { 23,13,15,51,515,700,961,753,0,457,1,2,4,115,10,453,569,5,33,165,11,719,14,40,64,197,3,21,474,629,38,401 }, - { 264,166,39,30,9,100,435,254,93,921,190,363,1,625,411,382,897,656,203,478,404,812,438,110,473,88,18,691,156,141,274,272 }, - { 9,0,252,100,166,39,101,265,364,68,88,329,520,18,419,676,118,167,404,604,16,1,21,30,212,158,553,49,382,274,48,13 }, - { 15,515,700,753,4,11,141,5,3,13,202,1,180,21,2,165,269,23,40,64,0,318,12,32,128,51,77,117,523,197,120,457 }, - { 24,1,2,69,35,16,67,18,14,50,0,46,68,9,38,7,133,71,83,149,28,108,189,218,65,114,238,29,75,54,5,96 }, - { 90,289,214,64,874,13,77,712,66,751,4,23,51,192,32,0,202,194,312,177,33,65,234,104,875,288,59,5,835,416,102,95 }, - { 0,9,49,127,98,31,301,28,371,159,1,395,512,737,158,761,916,623,16,44,242,39,170,18,293,105,24,272,101,22,23,385 }, - { 17,62,136,214,123,129,32,292,119,209,710,106,141,162,128,64,45,4,77,249,11,618,211,3,207,130,519,183,38,177,21,269 }, - { 5,107,581,356,279,32,441,362,493,660,13,298,0,534,49,147,21,22,132,121,97,423,7,590,259,683,14,786,126,508,60,246 }, - { 51,13,15,730,453,23,515,719,386,457,12,700,403,475,899,1,6,523,753,421,99,401,165,33,2,19,361,5,0,670,120,27 }, - { 49,28,9,159,272,22,254,131,158,327,95,105,0,39,35,168,347,286,374,55,65,627,424,912,68,578,1,24,239,175,688,169 }, - { 15,515,700,33,753,4,77,141,341,317,1,10,13,180,102,22,40,117,115,365,5,901,23,197,134,11,217,351,64,82,21,137 }, - { 134,15,13,515,23,700,12,753,51,474,37,961,197,10,457,569,4,0,99,2,115,38,165,153,94,3,139,11,1,82,33,5 }, - { 7,2,20,58,5,14,128,66,6,29,32,43,21,52,16,38,631,61,74,97,46,135,113,25,202,192,13,0,884,45,112,87 }, - { 77,13,33,202,23,128,102,4,141,342,117,0,269,318,134,22,11,21,32,153,403,291,49,64,137,51,40,15,494,5,196,98 }, - { 2,1,14,6,46,38,29,65,5,36,67,0,103,7,22,86,133,50,108,208,52,83,24,323,283,69,28,18,10,25,23,75 }, - { 15,515,700,753,1,5,4,2,3,13,0,11,180,341,12,33,10,197,134,365,77,23,21,901,6,117,165,7,37,32,17,102 }, - { 203,268,206,93,417,940,31,8,120,137,44,499,959,473,202,692,728,559,0,260,10,326,141,564,817,127,341,1,450,22,110,23 }, - { 15,82,515,120,700,0,10,753,33,8,64,165,110,31,260,93,13,197,23,22,40,4,351,44,77,9,11,153,102,51,1,196 }, - { 60,0,16,7,14,43,20,71,28,10,2,22,154,18,13,24,92,1,51,576,35,615,805,925,68,126,124,149,97,64,23,55 }, - { 19,6,26,80,5,84,27,17,25,2,504,129,45,240,56,123,4,119,618,1,76,106,64,51,14,3,128,65,32,710,0,42 }, - { 15,515,700,753,13,4,77,23,33,51,0,5,8,10,11,31,44,1,82,22,202,64,110,102,93,21,291,40,141,180,9,49 }, - { 195,98,271,223,132,167,146,407,1,360,121,834,393,591,212,199,293,259,522,107,354,147,156,191,807,590,48,18,125,16,765,541 }, - { 128,202,77,210,402,318,33,102,6,40,403,29,342,269,196,757,99,139,2,111,42,4,494,117,275,300,13,12,678,0,177,122 }, - { 13,33,23,40,51,102,4,117,77,64,134,0,128,153,202,196,453,11,15,12,1,22,403,141,59,14,10,475,515,65,700,95 }, - { 7,16,14,24,18,2,28,0,92,71,1,22,6,35,60,20,168,10,154,118,5,302,124,69,97,109,703,158,420,12,149,66 }, - { 15,1,515,23,0,13,700,2,51,753,180,5,120,165,197,21,115,4,33,9,141,7,12,6,3,457,386,202,260,523,8,31 }, - { 60,107,121,132,146,126,199,279,150,92,16,649,441,35,955,7,21,0,423,5,18,195,598,298,493,356,32,653,22,362,953,10 }, - { 31,44,98,276,284,299,116,935,9,201,0,131,39,127,144,662,1,137,371,492,567,489,93,254,49,268,22,28,30,293,434,737 }, - { 13,15,23,515,700,0,1,51,753,4,2,10,77,202,5,115,3,165,197,457,9,12,11,961,33,120,22,141,180,7,6,40 }, - { 123,162,184,257,17,183,229,130,129,3,84,136,99,152,556,383,57,497,12,205,4,62,56,452,80,266,128,14,40,119,27,106 }, - { 196,33,117,40,153,23,134,13,51,102,453,0,15,475,12,14,515,2,22,700,4,21,753,64,401,670,730,1,9,11,10,99 }, - { 224,219,187,131,258,385,442,871,836,31,98,908,44,574,127,944,137,839,116,36,613,1,254,39,926,160,829,96,93,371,860,827 }, - { 121,195,156,132,146,360,590,407,786,522,883,591,259,929,626,941,150,687,5,55,296,379,467,178,586,465,279,21,1,13,60,354 }, - { 2,1,14,29,6,5,46,52,38,19,114,75,26,65,108,96,25,50,36,70,103,309,17,236,218,74,12,86,0,3,10,112 }, - { 15,515,82,700,120,753,10,0,8,197,260,165,351,64,13,110,117,93,31,1,9,33,22,23,457,44,450,77,102,898,40,49 }, - { 7,66,97,2,172,74,226,52,29,135,192,232,43,324,92,5,38,20,222,14,6,568,87,107,353,620,580,16,138,174,448,32 }, - { 62,129,123,162,136,249,618,183,507,57,4,152,17,59,11,184,117,77,3,128,211,41,130,205,12,40,33,106,64,229,38,313 }, - { 1,13,15,2,4,515,23,0,3,115,700,5,51,77,341,141,753,180,33,217,197,202,901,6,21,165,11,365,318,317,10,102 }, - { 6,26,235,19,145,47,112,78,64,27,453,95,29,444,25,624,85,108,648,70,32,130,74,42,711,630,632,138,65,122,113,730 }, - { 23,51,12,15,13,99,515,153,117,10,700,37,120,82,165,2,753,64,128,0,403,3,5,1,134,197,453,31,202,457,110,21 }, - { 16,24,18,71,64,35,92,7,246,146,9,108,60,118,199,5,140,2,267,0,230,830,32,133,1,68,50,330,247,563,36,12 }, - { 15,515,700,753,0,1,13,2,23,3,4,217,51,5,115,8,9,180,341,10,7,6,317,77,33,372,901,197,365,11,120,165 }, - { 234,639,178,202,77,142,5,455,450,49,416,0,147,427,198,21,315,329,13,318,325,557,120,344,113,259,22,128,61,105,23,494 }, - { 1,31,36,44,141,180,55,2,64,22,98,116,13,352,0,115,10,127,5,164,253,498,237,165,341,197,4,86,15,170,125,23 }, - { 15,120,13,141,23,260,217,515,1,77,51,110,180,700,317,82,269,137,115,202,21,753,64,5,351,291,0,450,352,93,36,326 }, - { 26,6,112,396,19,145,25,122,648,287,42,74,624,222,416,45,138,66,644,151,113,651,29,573,64,280,445,27,525,85,70,58 }, - { 156,360,5,146,121,21,271,522,354,132,49,13,18,195,16,340,60,591,446,586,727,0,107,407,167,48,1,463,199,566,32,23 }, - { 5,61,49,147,178,612,660,120,21,182,23,427,259,683,33,4,77,70,13,3,376,98,64,0,481,344,48,595,291,263,141,51 }, - { 89,79,468,179,358,205,94,405,115,498,72,180,365,431,37,111,341,734,188,317,482,217,11,4,245,152,413,216,12,474,490,752 }, - { 24,16,35,68,18,71,7,92,0,108,9,14,118,101,336,175,375,302,28,124,154,55,149,60,398,1,65,2,140,273,345,230 }, - { 51,730,421,801,453,386,23,523,13,475,719,401,670,365,899,403,115,457,758,165,33,494,450,6,423,805,629,56,569,514,958,388 }, - { 113,45,6,311,29,2,151,614,145,491,112,80,5,27,61,74,315,66,209,631,19,25,58,17,73,26,1,243,70,64,611,287 }, - { 4,339,188,471,11,59,79,12,377,94,99,33,77,102,51,111,37,152,13,961,474,542,40,342,3,23,128,403,202,177,184,57 }, - { 15,4,515,11,700,33,82,40,0,120,753,10,8,110,13,93,23,165,77,260,64,31,22,51,44,102,351,1,125,9,197,21 }, - { 16,24,18,0,35,68,28,71,124,118,60,7,9,55,14,92,109,101,419,175,22,252,154,375,149,302,158,346,2,49,1,126 }, - { 17,45,227,21,106,3,2,243,209,5,48,32,221,62,207,50,29,186,290,270,263,52,14,496,400,119,46,255,54,430,38,721 }, - { 340,354,586,658,156,195,698,668,1,296,9,18,883,363,447,379,303,98,411,13,31,163,51,5,371,48,919,846,121,21,360,70 }, - { 277,153,111,12,23,51,474,99,38,37,139,117,41,457,79,453,542,13,11,33,134,157,629,188,961,14,196,401,102,569,15,94 }, - { 0,18,16,159,49,24,9,105,35,68,7,28,22,1,60,344,55,101,109,2,14,158,13,23,71,118,455,286,272,424,5,327 }, - { 0,105,9,49,16,18,158,28,518,24,101,320,1,68,170,301,272,127,7,286,35,890,109,39,159,98,21,344,31,55,371,23 }, - { 141,1,180,15,13,2,365,217,515,352,317,115,341,0,4,5,269,700,23,21,3,752,197,77,753,51,31,901,10,202,8,64 }, - { 4,23,51,33,19,17,102,153,485,880,40,403,196,26,300,453,27,117,78,0,12,200,47,5,11,14,342,99,53,77,475,2 }, - { 62,184,56,440,130,229,183,3,556,152,99,162,12,266,17,548,136,57,305,161,123,14,452,4,383,403,257,34,40,84,33,139 }, - { 13,23,77,141,64,202,33,51,269,115,0,102,21,4,217,128,5,32,318,137,291,9,15,2,180,10,3,317,177,515,7,6 }, - { 1,22,36,105,170,0,86,2,31,28,239,64,55,5,10,98,9,44,127,95,654,67,301,143,13,12,49,23,320,141,83,21 }, - { 15,515,700,753,0,1,13,2,23,901,5,8,51,82,9,180,457,4,7,12,3,6,10,120,341,141,22,898,197,351,115,260 }, - { 1,39,274,98,100,265,190,30,438,310,166,223,88,96,909,31,264,625,530,9,382,812,21,252,593,0,254,539,44,131,23,778 }, - { 18,212,167,118,363,1,447,411,146,60,271,16,781,121,647,9,621,562,21,478,664,68,815,5,354,98,48,101,24,446,777,463 }, - { 24,28,22,0,7,1,2,16,14,65,35,49,158,95,109,159,55,105,10,18,124,9,67,5,239,149,12,289,108,68,21,424 }, - { 105,22,131,272,286,98,55,239,1,31,320,9,127,327,36,185,28,374,86,219,0,64,187,44,578,164,224,913,535,115,601,13 }, - { 22,31,28,301,127,98,44,0,105,1,512,395,9,293,109,299,95,338,239,125,242,116,36,320,55,841,900,685,599,23,13,763 }, - { 2,1,58,29,5,14,52,46,186,334,45,155,151,50,400,75,38,69,502,61,48,227,223,7,163,17,262,67,549,21,70,113 }, - { 7,107,135,232,97,14,2,92,66,16,172,192,278,387,298,356,38,35,448,52,46,43,60,29,20,126,324,526,357,359,64,5 }, - { 20,43,104,426,173,7,560,414,707,784,319,81,0,861,422,819,38,74,715,52,376,97,879,32,330,22,49,64,66,95,192,526 }, - { 104,74,636,66,204,0,355,81,222,25,29,319,145,784,20,65,90,4,174,194,7,64,6,746,138,173,750,715,91,43,192,32 }, - { 0,9,101,35,68,39,65,28,252,124,67,154,364,336,100,166,30,1,289,55,149,346,16,114,158,88,439,24,429,22,570,194 }, - { 57,14,4,231,236,585,176,59,369,23,361,13,719,51,300,342,12,457,56,3,62,38,202,401,34,46,2,322,11,215,210,507 }, - { 1,2,15,3,141,0,515,5,33,700,13,64,77,180,6,128,753,10,4,269,102,202,11,7,134,197,352,120,117,318,12,291 }, - { 5,1,21,202,13,32,48,23,0,61,259,22,494,120,70,49,51,18,137,128,465,12,178,115,2,453,403,141,58,3,90,450 }, - { 141,205,4,72,59,79,245,11,352,94,152,76,247,216,21,188,452,217,497,12,89,37,111,339,588,77,64,875,864,115,358,464 }, - { 15,515,700,753,0,1,2,13,5,4,23,3,8,341,365,51,115,10,120,457,6,141,77,197,31,7,165,9,202,450,961,260 }, - { 5,2,50,14,58,38,171,46,29,1,45,186,17,52,155,218,48,281,61,487,54,36,67,21,328,334,151,227,760,114,400,133 }, - { 457,120,70,125,318,64,23,48,795,291,202,761,751,415,77,846,269,758,21,237,96,260,391,165,87,1,128,5,221,13,137,763 }, - { 13,23,51,33,4,40,117,102,453,64,153,196,0,77,15,11,12,475,1,65,134,10,515,22,21,14,700,59,403,141,2,753 }, - { 229,152,57,266,452,381,432,12,313,184,99,471,17,4,62,339,157,3,129,59,128,11,369,37,77,38,40,123,5,497,188,257 }, - { 49,28,109,22,159,9,272,95,105,131,55,35,254,168,39,327,169,0,1,286,175,374,347,158,420,67,36,194,312,424,627,346 }, - { 5,2,61,29,45,58,80,311,1,17,209,227,52,243,106,869,454,151,592,496,48,334,14,155,6,186,46,171,75,21,255,667 }, - { 244,44,110,141,260,30,269,352,839,131,574,228,373,276,1,406,219,717,217,137,253,224,120,93,36,31,567,116,661,187,341,88 }, - { 12,99,79,139,11,453,196,51,277,474,111,23,542,37,94,188,33,13,401,775,40,961,313,102,4,339,153,485,629,134,300,431 }, - { 16,35,9,0,68,24,149,69,67,18,1,114,65,230,71,7,103,133,50,167,212,118,101,191,140,64,399,28,124,283,55,565 }, - { 88,30,274,435,131,613,190,100,93,829,166,1,187,795,530,127,382,957,960,160,31,137,466,264,39,800,406,254,28,473,521,219 }, - { 167,16,18,118,212,24,60,71,101,68,191,9,375,411,363,35,0,1,589,199,302,21,447,55,146,126,92,271,647,121,562,48 }, - { 64,141,86,177,77,128,147,597,304,95,269,102,275,4,352,49,120,5,372,194,465,13,588,237,947,216,202,180,612,751,107,534 }, - { 18,65,90,403,523,289,240,214,194,102,701,475,202,217,283,862,389,51,33,0,494,421,453,817,84,64,847,899,352,13,23,437 }, - { 13,51,23,202,5,12,21,128,15,115,0,1,141,120,64,32,4,2,515,403,165,457,3,10,700,99,453,318,719,450,308,401 }, - { 98,223,393,31,1,271,834,791,167,44,202,64,93,697,5,116,77,125,450,446,212,18,541,293,51,120,195,132,284,13,807,765 }, - { 15,515,700,753,4,11,23,13,40,51,82,165,0,110,93,33,141,64,120,5,10,77,3,102,180,32,202,125,8,197,31,21 }, - { 15,515,700,753,0,1,13,2,901,23,5,341,3,51,82,8,4,180,961,9,115,10,12,6,898,7,351,141,134,22,31,120 }, - { 234,416,77,5,315,639,325,202,147,198,113,49,450,61,455,142,0,21,22,342,329,494,178,58,102,427,318,230,13,120,43,470 }, - { 60,146,16,18,156,126,121,271,199,360,132,24,167,0,640,10,71,522,21,92,5,340,107,354,118,150,22,195,446,35,28,212 }, - { 4,361,11,14,56,368,377,161,27,12,300,77,59,200,17,554,202,33,40,494,495,21,210,80,757,25,128,23,19,38,444,53 }, - { 141,82,217,351,15,352,120,1,180,260,515,64,854,36,700,317,752,372,13,269,77,753,922,21,349,23,202,110,93,137,51,373 }, - { 15,515,700,753,77,13,0,1,23,33,102,2,51,4,3,5,291,217,10,9,450,120,341,7,317,6,11,117,115,8,260,180 }, - { 15,515,120,13,700,23,77,141,1,260,0,753,180,51,137,202,115,365,110,291,217,5,128,9,21,341,197,269,2,450,317,165 }, - { 174,6,348,85,138,74,280,204,66,233,192,355,289,65,81,580,636,353,25,91,104,343,673,214,64,95,42,712,792,32,194,90 }, - { 152,497,452,59,4,216,11,79,94,77,128,188,269,339,588,33,76,529,318,32,141,471,12,202,111,21,5,51,37,90,72,177 }, - { 417,499,10,141,253,244,110,559,8,564,180,260,728,120,352,638,642,341,951,206,143,752,901,93,137,661,922,373,44,31,811,197 }, - { 13,77,23,33,4,51,0,102,128,59,141,40,64,115,177,10,137,22,202,2,7,11,90,1,117,180,269,14,49,6,134,3 }, - { 1,2,22,0,36,5,67,50,14,28,12,86,38,46,83,168,194,65,103,114,49,7,10,95,21,69,23,24,128,51,55,13 }, - { 17,106,119,207,255,306,742,378,84,62,136,45,3,5,240,80,61,56,209,383,311,790,655,32,2,440,76,151,58,29,179,263 }, - { 3,128,1,141,2,202,33,5,64,15,0,515,102,13,269,10,700,180,134,51,120,6,77,318,23,137,17,117,753,197,82,153 }, - { 514,38,377,328,11,57,41,248,880,266,556,4,152,361,471,757,485,403,305,102,3,211,313,99,457,130,12,14,157,40,23,54 }, - { 68,0,167,101,9,118,264,520,16,18,21,478,562,1,124,212,100,936,664,777,191,88,806,154,48,24,759,604,35,252,265,65 }, - { 230,689,699,213,466,352,217,831,30,443,418,144,854,201,840,855,1,251,203,317,530,957,96,93,822,539,36,752,351,137,83,800 }, - { 33,77,102,117,15,82,13,134,23,64,0,515,120,153,51,4,40,128,700,260,202,141,196,22,753,11,351,10,1,326,95,269 }, - { 11,40,33,51,117,13,542,328,14,134,38,153,23,12,485,231,102,54,775,37,3,377,111,139,211,4,457,403,369,475,99,719 }, - { 33,64,77,128,141,2,1,202,102,13,23,117,0,15,3,153,51,134,10,40,6,5,515,269,137,180,318,165,700,7,196,753 }, - { 15,515,700,753,4,1,5,11,13,21,33,180,93,141,64,2,23,77,82,3,0,102,32,40,352,341,10,197,98,110,117,901 }, - { 1,2,14,67,50,46,38,24,103,83,0,5,36,28,29,133,114,96,65,52,18,75,54,108,22,7,238,58,160,9,361,69 }, - { 258,201,276,137,160,860,116,261,295,843,567,144,131,44,187,268,943,219,284,31,202,935,141,98,662,203,127,96,36,93,224,1 }, - { 7,2,14,16,46,87,75,52,92,278,29,38,140,70,1,5,35,294,24,262,135,69,171,172,58,409,112,60,50,66,97,12 }, - { 13,23,0,2,51,1,33,4,115,10,15,141,77,3,5,180,217,515,9,7,64,11,700,6,102,40,197,22,317,753,165,202 }, - { 74,145,6,66,25,204,42,29,222,337,138,26,7,525,192,174,746,287,544,135,415,2,609,632,112,64,87,0,85,45,712,396 }, - { 77,33,102,15,217,13,23,141,202,515,51,700,291,4,269,753,317,180,21,64,318,115,128,0,275,2,352,196,3,5,137,11 }, - { 187,219,258,871,44,442,160,574,137,224,908,116,839,131,36,926,276,201,93,228,202,860,31,613,144,531,406,1,902,30,190,318 }, - { 1,372,141,5,21,77,225,744,96,30,23,349,13,291,269,284,69,442,459,144,303,839,217,622,160,330,260,48,120,410,189,352 }, - { 66,222,2,74,29,87,135,6,7,145,52,25,294,337,226,172,138,331,42,70,97,112,26,1,632,192,43,5,415,609,461,353 }, - { 45,17,106,209,5,2,21,29,48,207,3,186,243,155,255,263,454,119,400,496,270,14,290,62,425,1,171,32,659,52,38,56 }, - { 93,88,141,120,30,213,260,373,100,717,459,82,110,1,166,450,180,321,217,372,36,269,131,225,22,352,326,466,473,187,244,410 }, - { 266,57,152,381,313,471,12,229,99,369,339,62,157,3,4,37,77,38,188,17,11,162,40,184,129,59,475,775,128,452,403,453 }, - { 217,352,317,141,752,15,180,515,372,365,700,341,753,349,77,21,291,1,115,244,64,120,13,98,269,82,5,498,864,351,23,144 }, - { 14,514,369,102,403,377,51,719,880,153,23,13,457,11,485,4,401,12,328,453,33,40,117,57,629,38,730,236,134,670,361,961 }, - { 107,7,172,14,92,135,2,359,60,314,46,16,126,278,232,150,279,32,38,392,298,5,35,97,24,192,259,288,330,52,356,312 }, - { 0,4,25,13,59,90,65,23,26,19,18,12,5,216,91,51,389,33,77,11,22,85,27,81,21,177,746,45,42,194,37,123 }, - { 5,49,315,202,416,77,455,639,450,21,197,137,350,13,408,0,329,318,494,344,61,402,64,509,347,120,113,48,95,713,308,401 }, - { 130,47,381,390,59,90,200,214,289,6,65,472,29,64,874,648,50,751,624,26,52,32,4,194,875,714,85,249,247,33,881,19 }, - { 51,23,453,13,719,12,457,165,37,730,99,4,386,197,401,17,11,2,3,15,5,961,475,6,515,64,54,700,32,115,0,403 }, - { 15,515,1,13,700,2,23,0,753,5,3,180,51,4,165,12,141,21,197,457,7,115,6,9,352,10,120,202,8,341,11,77 }, - { 0,9,1,67,35,28,68,16,24,65,18,69,50,114,103,12,22,13,5,101,2,96,23,83,149,21,39,55,7,175,433,124 }, - { 28,105,22,0,1,320,170,9,49,301,109,95,127,31,98,55,65,35,2,24,168,159,36,713,16,740,13,338,21,44,512,23 }, - { 13,77,4,51,23,33,102,202,128,59,40,0,64,141,117,403,115,11,15,318,153,269,22,515,475,134,10,494,177,1,90,210 }, - { 13,23,0,51,77,33,2,141,4,10,1,64,115,102,3,6,22,15,217,11,180,7,40,515,165,202,177,9,269,128,700,5 }, - { 456,116,492,8,949,268,867,391,203,51,499,13,719,386,31,791,457,918,125,10,23,93,479,685,417,0,22,338,506,551,870,730 }, - { 17,237,45,180,106,62,32,64,115,41,136,498,255,21,197,129,241,13,3,227,23,352,165,752,350,365,449,155,4,546,476,38 }, - { 1,15,180,515,0,2,341,700,901,352,4,141,13,3,752,5,753,217,317,115,365,23,197,21,51,165,31,6,269,202,77,7 }, - { 205,141,216,269,497,4,588,76,59,152,128,452,79,77,875,11,72,94,188,217,352,12,247,37,90,64,32,1,474,23,947,372 }, - { 64,247,217,237,317,180,752,115,349,141,498,13,437,304,23,372,352,164,579,291,33,864,177,197,0,490,72,10,482,77,269,51 }, - { 2,1,0,13,15,141,3,77,5,515,64,33,23,180,6,700,4,117,217,7,10,11,102,165,753,197,115,134,40,352,12,269 }, - { 11,40,38,328,33,542,12,313,41,339,23,157,377,117,369,51,471,99,775,485,13,305,457,57,14,475,37,248,4,54,188,719 }, - { 33,77,102,40,13,23,0,51,4,128,64,202,117,141,22,196,153,10,134,15,59,269,1,137,65,11,403,318,453,86,515,177 }, - { 472,80,34,250,495,161,17,14,469,176,128,4,389,106,283,436,216,527,3,297,483,177,53,56,231,194,119,84,719,57,255,59 }, - { 317,352,180,141,217,752,115,341,365,244,1,269,202,901,253,15,21,498,372,4,137,515,13,2,700,318,5,197,23,143,753,349 }, - { 9,39,101,18,265,100,333,520,252,16,0,329,593,1,553,364,68,167,310,30,121,254,118,158,363,166,60,604,272,24,286,404 }, - { 15,515,1,180,700,901,0,2,753,341,752,4,3,13,115,365,317,5,23,197,141,217,165,352,6,22,36,9,137,51,7,10 }, - { 131,39,9,829,166,613,578,827,1,30,716,254,100,98,31,224,0,406,228,310,616,219,44,846,127,190,938,96,265,371,856,438 }, - { 17,64,62,106,141,751,136,292,32,129,352,41,38,476,86,128,214,237,5,177,123,209,217,45,269,954,162,710,180,3,90,4 }, - { 25,42,235,65,650,736,605,6,630,85,123,343,233,256,26,122,63,389,141,249,416,444,368,194,19,108,138,174,90,0,544,511 }, - { 184,229,152,57,266,432,497,452,17,381,619,257,313,12,4,205,59,3,99,471,157,128,5,129,339,369,77,11,32,45,202,2 }, - { 137,202,160,860,141,30,93,567,36,276,295,261,131,39,9,964,201,843,1,98,800,318,116,22,943,187,10,219,206,44,269,535 }, - { 0,493,125,64,49,9,279,10,35,18,93,55,293,31,14,13,194,165,325,48,22,132,21,107,98,389,44,581,342,259,174,137 }, - { 15,515,700,753,4,33,13,77,23,5,51,32,102,40,93,11,349,141,21,8,82,202,64,31,110,10,117,0,1,44,3,318 }, - { 110,253,854,811,352,141,244,951,180,642,661,384,498,143,752,317,911,10,269,206,559,351,261,120,902,533,922,959,365,160,332,217 }, - { 2,29,70,1,75,52,6,220,26,112,145,331,74,163,19,69,38,324,46,58,14,5,25,21,278,223,50,307,66,7,67,409 }, - { 13,23,77,33,51,4,64,141,115,102,0,2,128,177,40,11,202,10,6,180,7,15,269,1,32,217,59,22,291,3,137,515 }, - { 340,897,691,478,658,264,914,382,100,812,363,1,724,156,166,698,88,521,39,404,682,447,296,96,303,411,30,909,9,274,656,772 }, - { 9,18,310,101,265,159,326,120,105,158,33,363,77,195,51,55,13,39,354,132,23,7,28,639,16,137,98,1,252,272,709,49 }, - { 57,313,471,12,99,369,157,339,266,152,38,37,475,453,328,775,11,40,59,188,77,514,401,403,342,4,139,33,377,51,229,14 }, - { 16,7,24,14,35,140,60,92,18,69,71,2,189,1,46,230,108,388,150,38,21,172,278,67,246,267,50,309,236,135,451,0 }, - { 206,417,93,940,959,473,499,203,8,137,559,728,31,202,44,120,450,141,10,260,116,564,22,326,269,318,268,244,0,1,253,638 }, - { 15,515,700,753,1,0,13,2,23,4,3,51,5,217,7,77,341,115,8,9,10,33,6,180,317,349,291,120,11,165,457,901 }, - { 1,2,5,14,48,21,290,32,50,45,38,46,263,207,155,72,76,29,17,408,425,171,89,52,7,0,292,449,3,227,513,428 }, - { 121,132,354,167,271,223,146,98,18,463,1,668,446,195,407,60,212,447,781,48,360,363,411,522,156,393,807,9,21,16,293,13 }, - { 131,578,105,371,219,224,716,616,187,49,9,254,737,159,385,98,258,127,272,761,0,916,623,910,28,286,39,31,22,518,924,242 }, - { 302,467,97,6,273,1,24,484,124,51,36,18,2,398,453,421,523,69,7,23,13,403,386,150,66,0,298,65,426,165,22,158 }, - { 30,190,530,88,1,100,778,539,625,274,382,410,96,731,960,39,795,321,9,131,264,144,840,748,44,166,669,957,36,31,435,228 }, - { 141,1,2,128,64,33,15,202,3,0,180,5,13,77,515,134,269,102,197,700,10,137,318,6,120,165,753,352,4,82,23,117 }, - { 44,201,567,116,131,224,295,662,489,268,219,31,434,144,187,276,110,384,93,261,699,137,36,442,120,1,613,30,228,64,141,244 }, - { 12,15,51,23,515,37,99,13,700,0,10,117,753,38,165,82,134,120,11,453,197,64,115,569,1,629,401,22,457,474,110,153 }, - { 7,135,2,92,172,14,66,140,38,52,97,46,29,74,16,324,278,226,6,87,1,571,262,5,357,232,35,380,69,314,24,330 }, - { 125,386,23,963,949,60,51,391,165,221,13,197,118,21,719,193,541,421,517,150,393,7,401,453,308,5,791,551,326,558,48,173 }, - { 6,85,42,25,138,222,174,235,280,256,525,289,26,214,64,746,90,32,544,65,204,19,66,337,355,95,348,415,74,29,5,312 }, - { 1,14,5,50,2,67,24,0,46,69,48,21,58,103,16,12,18,38,54,96,83,7,502,45,36,181,35,9,430,28,10,155 }, - { 811,351,642,180,951,752,110,638,253,10,82,352,197,341,365,564,499,854,873,55,9,417,282,901,244,22,559,143,206,141,28,898 }, - { 23,13,51,15,12,453,403,165,4,515,115,719,475,457,700,523,2,21,0,99,202,197,14,5,386,753,128,401,37,308,33,117 }, - { 120,13,23,77,141,1,15,93,217,82,260,51,137,202,110,515,21,180,165,5,128,102,64,351,291,700,269,352,326,203,177,0 }, - { 1,5,0,22,12,2,36,21,10,23,86,13,28,51,9,128,48,14,32,50,7,3,96,137,54,4,202,49,37,65,208,323 }, - { 219,98,23,127,301,51,258,308,170,910,13,165,22,105,293,616,125,242,276,401,201,395,964,115,55,284,31,374,327,206,512,900 }, - { 64,180,80,165,5,237,2,250,34,58,297,61,197,17,22,29,186,498,231,445,247,3,752,311,95,32,483,153,27,45,115,469 }, - { 13,77,23,33,0,2,1,64,141,51,102,10,15,3,115,40,180,6,515,128,7,22,269,202,4,217,700,5,177,117,14,165 }, - { 15,120,51,515,13,450,23,700,202,153,196,753,260,64,128,141,730,4,326,386,21,523,33,318,5,457,95,32,403,1,77,269 }, - { 2,1,5,29,32,45,207,263,14,425,58,72,76,21,7,408,48,46,52,186,17,292,38,6,61,89,476,50,155,720,119,3 }, - { 15,515,700,753,4,13,11,5,1,23,33,21,3,141,32,2,40,180,117,64,269,202,102,197,0,165,120,51,341,352,153,12 }, - { 76,5,214,129,2,123,45,710,17,249,618,460,179,32,1,257,205,519,90,207,245,184,162,61,769,209,292,106,6,29,14,128 }, - { 1,15,23,13,120,141,51,515,202,21,700,165,0,180,137,2,5,77,128,93,753,260,269,197,326,33,110,352,82,102,318,48 }, - { 7,2,135,14,29,87,66,52,97,172,70,112,5,58,46,337,92,16,20,43,1,38,232,155,74,294,6,461,409,151,262,32 }, - { 574,187,384,926,860,110,258,434,269,531,141,244,160,261,253,116,699,959,940,717,533,36,219,31,902,661,871,295,201,352,10,260 }, - { 156,354,296,1,182,586,64,379,340,937,850,698,31,48,98,44,120,18,163,23,30,658,195,125,77,284,223,291,774,481,96,39 }, - { 250,80,34,472,17,495,176,469,33,194,64,483,4,297,141,14,161,27,53,667,56,833,73,527,585,231,106,51,84,814,2,59 }, - { 97,7,81,140,66,92,172,192,24,298,43,6,74,69,314,426,462,14,501,16,21,508,60,189,267,232,230,104,48,20,135,330 }, - { 31,44,116,144,268,393,492,434,367,489,127,98,918,0,384,9,22,206,948,105,93,203,1,456,332,940,299,28,137,49,293,125 }, - { 15,128,33,3,13,51,141,1,202,64,23,2,515,120,102,0,5,82,10,700,165,197,269,153,403,110,753,137,196,318,117,12 }, - { 31,98,127,9,0,105,22,28,44,512,293,395,299,1,242,49,685,763,320,599,125,116,109,276,284,95,870,159,23,456,36,900 }, - { 7,24,124,1,6,97,2,69,14,18,23,92,21,67,66,16,5,484,43,20,118,65,36,22,28,0,51,140,13,71,29,150 }, - { 1,64,442,303,284,349,202,141,622,67,154,447,260,44,652,429,9,335,237,919,197,98,167,33,682,269,547,77,863,411,340,201 }, - { 1,15,2,141,515,0,700,13,3,180,10,753,5,64,77,33,4,6,7,197,102,269,165,23,134,11,352,341,291,349,22,120 }, - { 99,139,12,453,196,277,775,40,475,33,23,401,215,51,11,14,77,111,313,130,38,211,37,266,129,15,339,153,719,3,369,515 }, - { 33,77,102,4,23,128,13,141,202,64,51,0,40,59,269,115,117,137,153,1,318,11,10,177,15,134,22,90,196,2,403,32 }, - { 7,2,14,58,70,112,16,5,87,38,46,52,6,128,135,1,32,21,155,29,66,64,0,97,92,186,172,294,13,23,20,37 }, - { 15,13,515,1,700,2,23,0,753,5,3,4,51,10,341,115,365,180,11,33,317,77,6,7,217,12,197,165,117,9,64,102 }, - { 2,1,14,29,75,69,67,6,52,46,38,24,103,220,83,25,70,87,262,74,96,267,50,366,26,16,226,394,357,66,108,19 }, - { 9,105,18,39,1,0,16,557,101,272,252,890,326,49,265,21,137,100,23,938,13,310,159,5,31,24,254,51,30,128,202,132 }, - { 80,209,45,61,667,17,6,106,5,2,151,29,483,255,454,833,27,311,112,19,738,378,1,58,113,26,25,469,119,887,32,64 }, - { 13,23,51,15,5,1,515,0,21,2,12,141,700,165,202,115,753,32,180,4,3,197,10,120,457,9,269,128,64,341,7,33 }, - { 99,12,453,277,139,157,369,474,339,51,38,23,37,196,188,401,775,111,11,313,328,475,153,266,4,471,79,40,33,629,102,14 }, - { 7,92,16,232,97,140,126,14,60,107,66,35,298,387,314,104,246,462,441,150,0,38,24,2,172,357,230,330,5,633,22,289 }, - { 13,77,23,202,318,141,33,4,51,269,102,177,115,403,137,2,40,494,90,11,342,128,31,117,21,32,7,12,64,134,14,10 }, - { 13,2,0,23,141,1,77,3,180,33,6,64,15,10,115,51,4,5,217,197,7,165,515,102,22,11,700,269,40,352,177,14 }, - { 15,515,700,753,4,11,1,93,13,5,180,110,82,21,120,23,2,33,10,141,3,165,197,102,901,0,32,341,117,40,153,12 }, - { 15,515,700,753,1,13,0,2,23,4,77,51,3,5,341,291,7,33,6,115,10,9,8,217,11,177,120,180,102,165,197,365 }, - { 20,43,198,325,173,904,104,234,66,147,77,319,416,422,97,426,5,0,7,450,861,202,712,725,2,32,639,376,38,324,945,315 }, - { 105,0,9,28,49,301,170,1,127,159,22,16,31,98,512,623,24,109,158,395,35,68,371,65,713,55,2,242,293,21,44,18 }, - { 213,88,689,466,230,30,321,435,699,352,217,201,795,831,144,854,1,443,96,539,530,840,418,251,855,190,93,100,669,31,957,662 }, - { 130,453,47,196,4,57,14,59,236,711,51,153,730,77,412,381,23,202,108,128,361,13,283,117,11,719,200,46,34,78,210,2 }, - { 1,2,5,14,0,50,36,22,38,46,65,67,12,86,114,28,103,29,208,7,10,128,21,83,218,23,96,54,194,6,133,51 }, - { 6,26,74,19,165,453,14,730,1,125,197,50,29,51,138,357,13,2,108,391,70,719,46,457,47,500,386,262,112,23,235,52 }, - { 9,10,376,20,43,0,49,18,30,120,2,33,325,104,501,470,77,788,725,102,523,39,858,5,904,414,174,55,137,37,342,13 }, - { 15,515,700,753,0,1,13,23,51,77,120,202,341,82,5,4,9,260,2,137,141,128,115,351,901,8,180,10,197,21,450,33 }, - { 105,131,272,578,9,49,371,219,159,616,286,320,224,187,716,98,28,22,0,623,127,258,910,737,385,31,239,347,254,109,424,95 }, - { 457,51,13,23,961,12,719,99,453,15,4,515,165,401,629,3,700,11,17,14,2,37,753,41,57,569,38,45,0,33,5,32 }, - { 202,120,5,33,318,77,450,102,1,260,403,128,494,21,165,13,269,12,326,23,342,523,402,2,817,64,15,141,125,82,457,475 }, - { 141,269,352,217,180,64,349,137,202,160,317,15,372,515,700,752,318,753,244,13,437,291,165,864,22,237,5,82,954,21,77,418 }, - { 70,29,2,145,74,112,26,6,75,52,19,66,632,1,87,220,5,135,163,287,307,25,226,7,58,396,294,278,113,409,69,151 }, - { 82,351,317,15,752,180,898,352,141,901,515,341,10,700,365,1,753,498,0,217,253,115,55,854,33,5,143,32,21,160,36,197 }, - { 39,9,310,254,0,30,101,49,252,272,100,265,105,455,159,557,190,333,286,688,18,166,1,158,709,16,625,627,31,131,327,329 }, - { 2,58,29,5,1,151,186,52,70,45,7,549,14,75,112,400,113,155,61,46,227,163,311,315,66,6,307,27,17,220,287,74 }, - { 141,217,13,21,352,23,269,77,180,115,317,64,202,15,349,137,5,51,165,291,318,752,372,4,0,102,33,365,197,32,341,125 }, - { 68,35,0,9,65,101,149,124,24,154,175,16,28,7,67,1,18,189,114,398,55,14,345,39,118,133,69,2,230,429,71,283 }, - { 66,7,29,2,112,52,20,43,97,151,74,192,135,5,173,525,337,45,145,58,415,25,14,32,644,70,544,226,222,21,6,580 }, - { 31,125,44,22,116,299,242,55,1,170,64,36,479,870,456,685,10,599,558,0,268,506,28,740,23,903,492,164,393,206,2,86 }, - { 188,11,79,12,99,377,94,33,542,339,40,474,111,37,4,51,102,453,139,775,13,475,23,961,277,471,134,57,431,266,115,117 }, - { 658,698,340,98,296,303,1,31,850,363,156,919,44,774,586,385,120,77,82,10,223,30,354,291,23,914,478,87,260,163,48,13 }, - { 15,515,700,753,82,4,1,13,901,33,197,11,5,10,23,165,2,0,180,3,21,77,51,120,365,115,217,40,117,102,32,401 }, - { 15,515,700,753,4,11,5,13,1,141,3,180,23,202,21,2,269,64,165,33,40,32,0,318,120,128,12,197,117,352,51,17 }, - { 91,6,233,85,370,718,81,65,25,256,63,343,42,74,235,123,138,511,397,249,26,194,650,355,64,87,544,18,90,643,66,214 }, - { 23,13,202,51,21,120,1,5,141,128,450,64,318,403,15,137,260,33,12,48,32,31,125,494,269,102,165,515,77,2,197,14 }, - { 180,317,365,341,752,217,115,352,901,482,372,498,1,141,15,253,515,244,2,700,0,21,13,82,23,4,579,351,753,291,269,77 }, - { 13,115,197,341,9,352,468,237,64,498,23,165,22,509,901,546,482,180,28,569,317,51,365,873,391,95,86,217,49,837,752,706 }, - { 13,23,51,1,141,5,165,202,21,120,64,125,180,15,2,33,197,115,128,32,260,269,12,82,4,515,137,7,318,93,0,700 }, - { 214,289,90,174,874,6,138,280,65,81,64,85,355,751,194,233,312,348,835,91,0,32,343,636,249,29,875,288,519,104,247,74 }, - { 15,515,700,753,4,5,11,13,1,33,23,21,2,3,102,32,141,77,180,117,31,64,0,40,134,196,120,352,12,44,197,6 }, - { 33,15,13,515,117,23,700,217,134,753,0,51,153,77,141,2,4,64,196,1,3,180,10,115,5,102,6,11,22,202,165,7 }, - { 15,515,700,753,33,4,77,102,1,40,13,117,11,115,134,5,21,153,23,217,3,32,2,317,120,196,180,141,51,12,59,260 }, - { 15,515,700,753,13,0,1,23,2,217,51,3,4,5,8,317,115,9,341,10,202,180,6,365,7,82,457,22,120,901,33,291 }, - { 7,2,135,20,97,14,66,52,337,673,192,29,43,355,353,5,16,294,107,376,147,226,331,560,64,470,222,104,415,32,4,324 }, - { 195,132,142,167,146,77,363,271,121,354,202,120,647,178,786,212,687,0,101,878,16,522,60,5,450,411,35,55,98,639,259,318 }, - { 202,77,20,0,318,66,104,128,102,269,177,43,33,7,216,291,494,5,2,342,74,173,97,112,450,22,337,10,234,52,64,678 }, - { 107,362,612,356,359,97,414,43,259,20,392,7,298,147,819,683,465,173,729,660,319,14,5,779,581,595,246,35,501,92,0,230 }, - { 6,165,14,453,13,51,19,23,386,457,74,391,308,2,26,401,47,758,603,108,719,366,1,29,309,730,324,197,133,70,115,867 }, - { 179,72,205,180,247,245,4,490,352,59,317,152,79,498,94,217,148,76,752,864,11,216,141,405,89,452,197,111,497,188,37,21 }, - { 107,7,298,314,14,359,32,392,232,279,172,97,60,581,387,126,121,0,534,493,356,92,441,95,13,21,35,147,22,5,16,362 }, - { 156,271,354,586,360,132,591,195,121,18,340,1,5,13,21,48,668,446,23,463,296,658,60,55,407,698,146,70,626,51,163,24 }, - { 13,23,51,4,0,12,457,15,11,453,2,515,5,1,99,10,115,165,700,475,401,403,3,961,40,14,37,753,719,32,64,569 }, - { 48,125,21,165,13,221,23,763,423,508,197,5,98,92,193,16,441,386,64,314,293,457,391,140,49,60,102,693,683,51,35,867 }, - { 202,77,120,450,5,318,1,494,0,195,18,132,523,403,326,604,354,260,121,576,203,167,234,817,682,49,35,615,21,20,13,102 }, - { 39,9,166,30,0,101,158,68,404,190,333,274,252,310,88,100,49,28,344,35,21,22,419,131,438,1,16,65,530,694,124,10 }, - { 15,515,700,753,110,4,1,11,165,180,93,13,82,5,2,197,33,120,0,3,10,23,21,115,901,217,341,77,317,51,32,117 }, - { 2,29,1,14,6,52,5,46,50,26,70,19,103,58,38,67,96,262,516,309,218,133,108,27,75,17,112,114,24,487,331,83 }, - { 120,77,15,13,1,141,260,23,515,217,110,51,137,700,317,202,165,291,180,21,753,128,0,177,326,93,450,82,64,269,197,5 }, - { 255,59,554,297,183,56,33,444,108,358,123,196,269,122,77,153,57,177,117,730,19,467,605,130,128,50,275,4,291,475,134,133 }, - { 13,23,51,12,153,14,117,120,165,134,99,401,38,453,15,128,197,719,64,515,475,403,37,33,196,700,40,125,5,0,54,2 }, - { 64,33,174,348,95,108,467,554,56,0,25,306,233,6,63,511,343,120,13,85,29,561,543,707,319,180,899,355,77,49,256,18 }, - { 120,260,51,23,77,15,202,1,93,82,141,450,13,326,515,137,21,5,64,33,110,700,128,165,318,203,269,102,351,753,197,125 }, - { 15,515,700,753,4,13,11,1,5,21,23,2,33,64,3,180,32,141,22,102,77,0,10,93,82,352,117,40,341,31,165,6 }, - { 15,515,700,753,341,13,23,141,33,1,0,217,4,77,180,10,82,351,51,137,5,64,9,317,21,11,102,40,260,202,854,115 }, - { 105,272,131,22,327,286,28,239,320,9,109,578,219,49,98,224,95,159,538,371,616,127,187,64,713,55,0,170,168,258,716,623 }, - { 16,18,68,35,24,60,71,118,92,126,0,9,101,191,7,55,154,175,212,14,167,150,302,28,375,1,107,124,346,273,21,108 }, - { 20,147,43,470,376,142,904,178,427,798,0,595,198,325,858,319,61,202,173,97,5,422,14,22,107,259,32,49,887,77,414,392 }, - { 13,23,51,12,33,15,99,64,128,515,453,202,117,153,37,102,700,40,134,196,120,0,2,753,141,14,38,3,82,403,77,21 }, - { 383,17,62,136,84,119,56,440,3,504,240,80,378,129,123,548,106,128,4,11,14,555,162,32,184,361,59,64,205,5,469,57 }, - { 70,1,48,652,5,638,846,888,21,349,269,260,340,562,767,761,163,883,774,141,125,518,591,0,23,9,87,13,371,303,622,31 }, - { 66,135,6,97,74,278,69,7,14,324,267,172,2,140,462,1,357,38,808,550,92,841,189,29,16,25,298,87,75,204,24,335 }, - { 51,23,33,13,102,40,12,128,64,77,10,202,0,196,117,4,14,99,134,453,65,153,11,475,139,403,22,141,86,2,21,15 }, - { 88,100,264,166,274,435,772,1,382,921,96,478,30,438,639,909,897,521,190,466,960,410,9,144,530,418,31,329,265,691,778,93 }, - { 62,440,136,56,84,3,504,548,555,383,4,17,129,128,507,361,123,59,119,162,14,57,152,328,161,11,202,495,184,27,80,215 }, - { 911,617,332,959,206,141,253,244,282,384,110,120,10,260,352,143,951,811,269,373,160,417,93,531,728,203,434,940,137,55,36,717 }, - { 120,15,260,141,77,1,515,82,700,351,33,23,450,13,110,326,64,217,269,753,203,137,102,5,165,21,51,291,93,177,373,128 }, - { 15,515,700,753,0,1,2,23,13,51,5,9,82,901,180,8,3,4,120,6,7,141,93,12,197,341,10,33,115,730,64,125 }, - { 7,104,97,107,356,232,66,560,298,289,14,707,38,568,359,64,20,0,65,324,22,214,92,32,192,5,387,43,712,90,172,95 }, - { 6,1,2,66,67,14,74,24,108,29,69,83,458,7,25,38,135,103,36,150,451,114,52,594,75,65,380,18,267,602,19,278 }, - { 13,23,51,12,115,21,202,5,457,15,4,1,64,719,0,403,2,3,453,165,99,141,401,128,32,515,10,37,523,197,120,700 }, - { 57,59,4,11,412,381,77,53,421,291,250,368,99,14,27,369,803,283,23,108,403,19,339,210,0,401,12,444,236,40,361,736 }, - { 15,515,700,1,0,753,2,13,23,5,51,180,3,115,6,7,457,4,9,8,12,82,197,165,141,901,120,719,33,64,21,22 }, - { 64,95,180,247,929,146,90,126,197,32,237,60,288,165,316,92,5,13,77,7,217,955,522,22,16,314,132,4,317,10,312,86 }, - { 15,1,120,13,23,515,0,51,700,180,141,2,5,202,21,260,753,165,137,33,77,110,197,128,326,7,450,4,102,9,269,12 }, - { 14,2,16,46,1,7,24,69,75,35,38,50,29,220,52,140,267,67,18,54,70,309,5,60,92,189,171,87,71,163,58,0 }, - { 31,98,127,44,9,299,0,276,293,284,116,49,935,599,105,22,456,201,28,1,39,125,242,137,371,144,131,492,159,272,51,395 }, - { 6,27,151,53,573,445,297,113,26,73,436,19,491,250,396,315,45,112,145,58,614,881,25,34,611,200,17,80,70,5,138,631 }, - { 32,693,81,788,90,804,403,56,494,21,84,397,202,65,18,77,64,681,214,725,523,784,526,33,102,825,240,0,115,241,817,91 }, - { 24,7,14,2,18,16,65,0,108,149,28,69,1,71,154,36,124,35,67,140,189,429,92,68,66,22,55,118,302,150,9,6 }, - { 0,68,9,35,65,101,189,212,114,67,124,69,1,154,149,39,230,64,252,16,88,702,103,100,18,336,28,329,520,83,30,755 }, - { 5,2,186,29,61,45,17,1,52,48,58,171,155,227,80,209,311,21,14,46,50,106,243,513,334,502,496,38,3,6,32,592 }, - { 15,515,700,753,13,1,2,0,3,4,5,23,341,11,10,33,6,51,165,117,153,7,180,12,365,901,77,569,197,115,64,9 }, - { 13,15,23,515,0,51,1,700,4,2,753,10,3,5,12,77,33,961,165,457,197,11,115,9,22,102,40,403,202,21,14,59 }, - { 15,515,700,753,13,0,1,23,2,33,102,5,4,10,9,3,51,115,77,7,6,341,12,11,217,40,457,196,180,165,8,523 }, - { 166,39,30,274,190,100,333,438,530,310,88,252,0,9,539,265,1,656,404,101,625,131,778,254,31,455,676,329,724,158,21,23 }, - { 734,148,94,308,431,115,37,89,111,413,79,468,197,629,341,474,569,12,13,873,179,401,11,4,180,23,205,72,59,365,134,51 }, - { 539,228,224,219,816,190,30,258,871,840,669,93,406,530,957,187,160,531,748,137,131,88,863,36,728,839,44,213,352,116,202,466 }, - { 393,791,125,801,730,551,386,23,31,175,93,98,51,13,144,788,126,203,21,345,116,22,949,110,575,165,326,44,0,4,60,221 }, - { 13,23,77,141,0,4,51,2,33,115,64,1,10,3,6,15,11,102,7,217,180,40,515,22,128,177,202,9,700,269,165,5 }, - { 2,29,7,70,52,14,1,58,112,46,75,5,171,163,87,220,307,151,186,334,38,66,155,16,69,135,278,45,262,97,6,21 }, - { 88,321,213,100,230,435,689,466,1,382,30,352,217,699,410,96,795,36,921,752,190,141,144,180,44,831,317,83,443,31,840,251 }, - { 363,411,101,520,354,9,195,668,132,156,447,1,905,364,18,23,765,664,146,5,360,13,121,96,98,31,252,39,100,759,264,551 }, - { 13,23,51,730,12,719,453,457,401,475,5,21,403,2,0,1,15,4,3,899,99,32,165,11,515,308,197,115,6,961,700,523 }, - { 72,76,89,12,37,4,308,179,38,528,90,431,54,205,148,184,401,57,152,474,23,59,51,245,428,11,32,99,405,316,257,21 }, - { 376,20,43,147,470,173,97,595,107,319,414,142,819,5,729,178,858,7,427,32,426,104,14,0,392,362,259,61,230,77,560,246 }, - { 202,141,269,494,318,137,51,128,403,4,217,96,77,5,64,177,291,180,15,352,102,10,33,349,2,317,0,341,120,515,21,453 }, - { 77,202,33,128,102,318,494,269,13,0,117,23,342,291,403,15,134,51,153,141,177,515,82,137,196,700,203,64,22,351,753,4 }, - { 253,110,951,352,499,811,10,854,180,638,244,559,642,752,564,8,141,143,417,341,901,260,206,197,922,661,93,15,498,373,165,911 }, - { 141,13,23,180,4,217,5,1,269,317,21,0,2,202,115,51,352,77,3,197,64,341,318,15,291,9,137,93,32,165,515,33 }, - { 9,0,18,252,16,101,68,39,24,118,35,109,158,329,28,167,60,364,333,265,49,100,22,419,553,55,1,677,71,7,212,159 }, - { 28,109,9,39,0,158,49,22,168,35,55,175,1,65,67,185,194,159,289,95,272,114,30,105,86,584,36,169,254,2,83,24 }, - { 15,515,13,700,1,753,2,23,0,3,4,5,33,341,11,51,6,10,197,115,901,180,77,40,102,12,365,165,141,217,7,317 }, - { 173,693,104,422,5,18,61,32,102,0,20,13,784,560,33,66,397,526,49,207,29,25,510,707,65,6,11,344,21,263,81,77 }, - { 23,13,386,51,308,801,719,221,401,949,21,730,165,421,102,115,125,33,341,670,468,117,770,1,120,6,197,14,403,97,67,958 }, - { 0,49,105,16,28,24,159,9,158,320,1,68,35,239,170,18,109,7,55,65,2,95,301,124,347,14,21,154,22,127,286,31 }, - { 2,5,1,207,45,29,32,58,76,61,6,263,292,655,72,14,17,476,7,119,52,306,70,64,21,90,186,214,106,38,3,790 }, - { 21,6,125,49,13,64,715,66,115,95,197,33,22,32,204,165,56,278,0,408,241,120,4,808,681,350,263,85,81,571,135,509 }, - { 612,427,325,107,202,5,376,49,64,392,403,470,21,147,31,788,494,14,362,465,858,98,20,804,518,43,845,318,125,97,725,534 }, - { 32,21,76,72,2,1,14,5,241,449,89,38,350,221,155,48,50,292,37,46,45,90,270,54,17,179,214,12,148,430,476,413 }, - { 24,0,28,16,7,124,35,154,14,149,65,18,9,68,55,108,175,71,2,1,22,109,92,67,484,336,118,69,302,398,570,420 }, - { 1,5,14,2,48,50,38,67,46,21,0,54,45,270,281,12,24,32,155,96,513,103,290,83,61,58,36,17,37,72,69,181 }, - { 13,961,569,197,37,15,23,474,515,94,148,111,12,165,629,341,700,79,901,401,51,405,753,10,134,4,115,734,873,11,89,117 }, - { 33,23,102,51,13,40,77,128,64,202,141,15,4,12,0,1,2,117,22,11,10,403,153,515,99,318,137,269,139,196,700,134 }, - { 0,1,24,67,9,16,18,35,28,69,103,50,5,2,65,12,83,68,7,96,14,22,21,149,75,114,13,133,23,71,218,54 }, - { 384,617,940,332,855,911,206,959,434,282,141,10,93,253,244,110,144,268,120,36,352,137,417,203,116,31,44,269,160,201,143,951 }, - { 30,93,473,137,31,704,450,652,190,203,800,254,166,274,326,144,269,160,127,303,120,625,88,848,110,435,77,521,349,131,340,744 }, - { 53,27,73,26,19,250,297,200,25,630,17,6,611,122,34,42,714,235,472,65,436,14,80,684,690,106,45,113,680,108,64,4 }, - { 15,515,1,2,700,0,753,3,5,141,180,4,13,77,33,10,217,6,7,134,11,352,197,64,165,341,317,23,12,115,102,40 }, - { 254,530,39,613,688,221,30,31,438,190,228,960,1,44,141,21,180,406,23,166,9,202,13,96,137,48,131,829,317,269,393,51 }, - { 9,39,28,35,30,166,158,36,0,175,101,346,364,67,49,68,168,420,88,1,194,131,100,352,55,83,190,64,137,570,86,65 }, - { 62,56,3,548,555,507,440,161,34,4,215,136,162,514,361,527,17,14,211,130,328,11,383,123,84,183,38,57,184,152,205,494 }, - { 92,126,107,7,356,493,97,279,359,298,16,246,35,60,14,441,362,121,43,423,5,132,392,20,508,230,199,146,232,173,150,414 }, - { 15,82,141,515,291,922,349,700,217,260,372,120,351,93,77,753,318,352,373,854,1,326,269,21,13,102,144,202,64,23,203,137 }, - { 141,217,352,115,180,13,269,317,752,77,23,21,341,197,5,372,244,291,9,64,51,102,4,1,365,2,165,33,3,48,237,351 }, - { 78,47,390,19,130,453,108,27,711,813,730,444,412,283,196,690,123,14,128,26,250,389,650,236,200,65,51,4,34,183,297,73 }, - { 34,250,297,80,472,64,495,17,311,3,148,45,667,61,176,53,243,27,90,161,469,141,483,151,62,128,29,4,58,56,5,231 }, - { 51,23,33,13,551,77,102,326,421,21,523,120,5,899,453,692,202,153,308,615,115,958,450,401,791,68,221,93,475,18,403,4 }, - { 98,223,393,363,411,1,478,834,664,156,284,691,447,791,914,293,354,724,697,9,807,541,759,51,18,421,48,264,948,586,195,848 }, - { 7,14,107,232,16,92,2,60,46,5,359,121,24,526,220,620,135,1,172,21,126,314,132,77,18,75,32,278,12,23,52,38 }, - { 32,76,2,1,21,72,241,14,5,48,292,89,476,45,720,270,179,90,17,214,148,38,50,29,129,155,350,46,290,227,123,464 }, - { 15,515,700,753,13,23,33,77,51,4,102,0,32,202,1,11,128,82,117,141,40,5,110,8,3,90,137,21,10,318,403,165 }, - { 66,6,69,2,1,74,14,135,278,267,380,24,29,97,67,38,103,75,7,388,324,25,52,150,87,83,189,357,335,108,204,172 }, - { 152,4,339,59,79,471,188,11,77,94,128,33,529,377,12,111,102,202,452,402,216,99,13,542,51,40,474,37,64,291,23,961 }, - { 15,515,700,753,1,0,196,13,33,2,77,5,23,102,3,10,9,7,217,4,6,153,117,177,14,457,115,12,40,730,11,134 }, - { 17,209,45,106,207,5,255,119,62,2,61,3,263,742,306,655,425,378,32,56,29,136,84,80,311,58,186,240,243,383,14,21 }, - { 120,260,450,15,1,23,817,13,515,523,326,5,700,51,82,31,202,64,21,753,318,93,32,269,98,33,351,77,102,125,457,165 }, - { 116,492,268,93,23,206,203,0,551,918,13,51,8,22,417,940,120,10,499,31,949,791,125,523,165,473,341,730,421,959,401,391 }, - { 15,515,700,753,165,13,0,1,197,23,4,82,120,2,180,12,260,719,8,3,386,117,5,523,901,11,341,51,10,9,141,351 }, - { 14,24,69,7,2,66,108,1,67,6,36,398,18,267,150,97,29,38,83,149,65,74,28,0,189,71,388,16,273,124,46,22 }, - { 330,96,523,335,367,662,141,839,1,922,372,615,244,717,269,443,418,352,403,692,217,854,752,180,36,64,498,576,349,201,98,284 }, - { 184,90,257,205,245,229,57,152,769,17,524,5,32,497,45,432,619,2,452,266,4,106,1,21,179,59,76,3,460,292,381,128 }, - { 7,14,16,2,46,5,70,107,87,13,58,307,92,32,38,23,202,0,172,24,18,21,60,128,77,35,20,10,9,4,171,112 }, - { 7,66,140,16,14,92,97,69,267,172,189,24,380,2,35,60,298,451,230,135,314,74,150,71,38,357,6,330,67,423,21,443 }, - { 121,167,354,132,18,446,147,101,212,146,407,16,55,35,647,191,20,271,199,68,60,259,463,107,9,126,363,7,195,43,14,411 }, - { 76,90,179,32,205,21,184,460,257,288,45,245,316,5,57,152,241,2,358,1,229,72,524,148,48,769,17,4,12,38,14,720 }, - { 147,259,178,878,427,465,581,198,786,798,142,534,325,929,20,362,35,132,107,376,43,5,279,77,49,146,70,202,590,771,33,14 }, - { 473,93,450,778,141,30,855,466,144,203,330,530,88,523,459,372,201,617,839,704,254,321,934,326,39,36,82,717,332,213,559,403 }, - { 523,475,51,899,730,453,23,719,403,33,457,13,421,386,4,120,117,196,102,153,15,801,450,817,515,260,202,11,700,99,165,125 }, - { 15,1,13,515,0,2,700,5,23,753,4,3,341,317,10,115,180,11,33,64,217,77,117,165,197,7,6,365,9,141,102,134 }, - { 19,4,119,40,33,202,27,84,102,56,77,73,504,485,26,494,757,63,862,59,23,300,25,12,128,11,5,13,342,880,469,6 }, - { 32,20,2,13,5,21,23,6,12,38,43,29,64,7,95,51,61,207,48,147,90,178,17,182,49,0,115,202,52,362,37,22 }, - { 339,188,11,79,4,94,377,12,99,111,542,102,37,33,474,51,471,40,453,152,77,13,59,403,342,23,117,57,475,134,128,38 }, - { 34,128,283,176,495,231,318,432,503,275,529,527,161,53,3,202,56,291,585,469,73,17,14,412,57,27,80,245,250,381,402,51 }, - { 15,515,13,700,1,217,141,120,23,180,753,115,365,51,317,341,77,260,0,291,110,137,202,5,21,269,64,36,349,2,4,10 }, - { 13,15,961,515,700,753,4,12,2,457,3,11,197,51,37,569,115,23,5,0,99,10,1,134,6,111,165,33,72,40,38,79 }, - { 15,515,700,753,13,1,0,2,23,33,5,3,10,4,9,115,7,102,6,51,12,217,77,11,40,457,569,341,117,317,14,719 }, - { 5,76,2,32,292,214,45,1,129,519,123,179,90,710,17,29,460,72,14,207,21,249,58,205,464,263,618,48,6,245,3,257 }, - { 72,76,32,4,21,12,38,23,99,54,89,3,14,17,51,57,11,90,13,488,179,2,59,148,45,37,5,115,401,1,10,421 }, - { 98,223,393,1,834,264,284,791,724,293,478,772,697,909,363,682,905,447,541,821,411,51,421,9,807,48,765,31,730,96,386,410 }, - { 341,13,509,8,23,638,165,901,762,10,569,242,391,197,873,642,506,499,629,961,15,180,116,456,206,546,417,1,338,457,515,867 }, - { 1,2,5,50,14,38,46,114,0,36,29,22,218,65,86,96,137,21,133,285,12,10,323,181,17,58,51,23,67,7,28,6 }, - { 481,878,202,13,5,23,182,32,269,21,1,318,77,142,557,494,141,33,640,137,70,291,2,51,260,415,929,403,120,58,4,259 }, - { 15,515,700,753,1,4,13,0,2,5,341,3,11,180,134,12,10,317,197,365,33,21,23,165,117,6,77,7,217,37,32,498 }, - { 25,119,19,6,26,42,27,17,4,790,45,814,2,469,483,84,122,1,0,33,32,128,76,80,611,113,73,56,5,240,202,77 }, - { 14,2,7,1,24,0,65,6,16,69,67,22,124,28,108,5,18,36,86,10,38,46,66,398,289,168,12,83,21,23,610,13 }, - { 51,23,128,13,15,202,12,120,33,64,141,82,10,515,0,403,700,3,1,99,117,269,153,165,753,5,318,197,102,260,2,137 }, - { 16,35,24,0,9,18,7,1,68,69,50,71,103,65,67,189,133,23,28,13,60,537,149,335,75,21,64,5,114,2,12,14 }, - { 754,803,133,576,880,543,2,1,657,50,14,38,46,5,29,67,218,36,58,171,52,96,24,103,775,0,114,83,181,54,65,45 }, - { 21,32,5,3,2,17,14,72,76,1,12,23,38,51,4,54,10,0,89,13,99,137,45,36,421,115,543,11,22,128,221,48 }, - { 434,384,268,144,855,940,617,206,332,116,93,911,959,282,203,137,141,489,44,120,10,110,244,36,98,31,269,253,367,417,160,9 }, - { 15,2,1,0,13,515,5,700,3,23,180,217,141,10,753,4,117,6,77,33,64,7,11,197,352,317,341,134,165,115,12,9 }, - { 2,113,6,25,1,0,29,4,7,833,5,45,32,61,128,19,77,151,74,145,64,42,14,210,655,106,59,177,27,17,21,738 }, - { 116,268,918,203,551,31,8,692,206,791,403,499,417,93,940,421,0,23,22,120,13,523,44,51,299,473,959,1,10,475,202,125 }, - { 107,126,132,612,362,279,20,146,259,493,199,121,590,43,660,147,35,376,939,60,941,534,683,5,0,953,16,7,49,649,595,470 }, - { 15,515,700,753,13,1,0,23,2,33,77,4,3,51,5,102,115,10,9,341,6,7,11,342,217,12,120,180,40,317,141,8 }, - { 53,27,17,161,469,378,73,527,19,136,383,250,495,56,862,26,62,84,80,106,200,4,34,14,440,297,3,128,585,5,129,123 }, - { 17,45,209,106,5,207,243,454,119,255,2,263,186,290,29,3,21,62,425,61,84,32,58,56,48,408,655,136,306,14,742,227 }, - { 4,152,59,452,128,79,216,11,339,471,529,188,94,77,202,12,291,33,318,377,99,51,23,5,402,349,32,474,102,13,205,111 }, - { 15,515,700,753,1,0,2,13,3,5,23,4,180,51,115,9,6,12,7,8,197,33,10,961,901,77,141,752,110,22,120,341 }, - { 951,752,638,811,351,642,180,253,10,341,197,901,110,873,8,244,15,352,165,898,143,515,564,762,499,55,365,700,82,753,141,854 }, - { 6,262,197,350,74,26,115,509,841,583,165,38,21,13,47,50,235,19,33,324,453,4,308,196,138,99,64,903,675,1,223,130 }, - { 125,165,391,23,386,221,21,13,558,457,51,867,197,115,401,758,77,97,308,791,7,180,48,120,963,451,743,89,603,134,403,450 }, - { 1,14,2,5,16,46,7,38,58,24,50,0,69,48,35,67,54,18,12,75,21,45,513,155,430,37,270,9,61,163,223,32 }, - { 23,13,51,0,12,15,4,1,115,2,515,453,10,457,5,3,202,21,165,700,403,11,37,64,77,401,9,197,753,59,475,99 }, - { 129,84,17,56,27,495,19,548,80,123,162,378,3,504,161,469,618,73,40,53,4,26,205,184,106,183,62,6,257,128,862,12 }, - { 28,9,22,49,109,1,67,0,39,55,168,158,83,36,35,86,420,194,185,159,95,105,69,208,272,103,50,114,2,254,169,30 }, - { 242,391,8,456,116,13,23,492,341,165,867,51,499,457,479,638,338,509,719,10,1,642,417,762,401,93,206,268,901,569,22,197 }, - { 211,162,248,130,57,4,41,556,507,266,183,152,305,361,11,129,62,229,38,471,514,313,157,300,377,3,440,128,123,328,339,59 }, - { 7,92,97,16,298,140,60,126,14,35,279,314,232,246,43,230,508,173,71,107,423,24,150,779,20,189,66,18,607,21,0,653 }, - { 15,515,700,753,1,0,2,13,23,5,3,180,51,901,6,4,7,12,9,115,8,457,165,82,120,197,10,64,141,341,22,117 }, - { 0,18,403,25,523,74,6,24,42,91,22,102,13,51,49,193,475,681,95,85,730,64,899,397,273,750,247,673,32,805,757,288 }, - { 56,0,18,65,33,554,84,343,64,6,90,561,22,19,899,108,27,63,289,475,240,467,370,32,233,214,24,123,95,287,28,194 }, - { 31,98,127,9,0,44,293,105,395,299,49,242,28,22,599,116,1,284,276,125,456,685,763,159,272,623,23,935,393,144,201,137 }, - { 1,5,2,14,38,46,50,48,21,7,58,45,270,61,155,171,0,290,69,32,29,54,67,16,24,666,663,17,37,75,502,52 }, - { 23,51,13,453,457,12,719,4,15,99,401,2,961,3,11,730,475,515,0,1,165,115,629,700,14,17,403,40,5,33,37,64 }, - { 968,967,966,965,964,963,962,961,960,959,958,957,956,955,954,953,952,951,950,949,948,947,946,945,944,943,942,941,940,939,938,937 }, - { 2,1,14,29,67,103,6,46,52,75,24,133,38,218,83,309,36,108,70,114,96,5,238,74,25,26,220,236,65,50,69,87 }, - { 7,71,16,92,24,60,14,97,150,140,35,189,149,298,18,230,43,508,2,423,69,0,38,314,66,279,399,517,251,20,232,273 }, - { 23,1,120,51,13,202,77,141,260,21,15,5,128,82,2,450,269,165,102,318,48,32,137,515,125,64,12,115,351,180,33,7 }, - { 77,13,33,23,64,51,4,102,141,128,40,1,2,202,0,6,177,115,137,15,59,10,11,7,269,22,515,180,318,3,700,95 }, - { 101,9,18,363,264,520,411,604,676,682,905,271,16,821,167,0,621,364,39,100,121,118,166,781,647,252,1,848,447,265,404,60 }, - { 144,203,326,382,166,418,93,88,96,822,1,141,859,77,744,438,110,269,921,367,521,274,100,39,494,120,403,473,217,576,13,291 }, - { 13,21,180,125,5,23,191,32,18,16,146,199,115,24,165,118,0,225,22,1,60,197,64,901,375,241,48,12,408,71,522,818 }, - { 15,515,700,753,13,0,23,8,1,51,82,102,2,33,4,9,180,165,5,77,10,110,12,197,120,260,18,326,351,403,22,457 }, - { 33,77,102,64,13,23,128,51,141,202,1,40,0,2,117,10,15,4,6,318,269,134,22,515,180,115,177,153,137,196,3,700 }, - { 174,544,104,525,74,0,151,25,6,624,29,66,2,636,81,45,204,177,64,416,7,644,5,138,222,319,355,77,22,122,789,216 }, - { 141,304,372,352,291,947,177,269,128,954,77,349,217,202,64,318,498,437,102,864,86,13,115,180,137,5,210,197,32,950,678,7 }, - { 161,200,53,17,714,27,34,73,472,62,585,56,440,383,136,78,527,19,4,3,106,361,14,250,80,514,377,84,322,390,862,548 }, - { 32,76,72,21,38,14,89,54,12,37,2,241,5,428,17,1,181,221,350,45,3,4,449,90,148,179,99,292,794,770,477,46 }, - { 33,23,128,64,141,13,77,51,102,202,2,15,1,3,40,10,5,153,269,515,165,0,117,196,180,318,6,700,137,134,120,22 }, - { 96,137,30,0,9,39,840,202,669,406,141,530,613,1,180,88,22,160,679,576,28,403,31,219,49,228,829,100,36,15,10,856 }, - { 180,141,352,1,15,752,115,0,217,365,2,515,13,901,341,317,23,4,197,700,269,5,3,31,753,244,21,165,253,202,51,44 }, - { 1,2,67,0,28,50,83,65,14,46,103,114,24,38,36,9,69,5,18,7,22,133,55,218,16,124,29,54,96,160,12,480 }, - { 180,115,352,317,365,217,752,901,141,15,341,1,515,253,700,0,753,873,2,197,31,137,165,244,4,120,160,44,98,5,202,3 }, - { 5,32,347,49,13,21,95,713,23,1,77,33,60,64,107,4,126,928,296,850,0,241,197,102,652,195,180,534,165,153,379,10 }, - { 341,180,365,901,317,115,15,752,515,700,217,873,753,82,0,110,197,141,951,165,1,564,13,351,253,12,10,3,2,4,308,244 }, - { 17,45,21,3,106,5,155,38,227,32,2,209,62,54,12,243,14,181,552,587,46,540,207,794,37,48,430,119,255,221,770,29 }, - { 16,24,35,18,7,0,50,1,9,14,75,69,2,5,12,21,60,13,67,71,23,48,10,108,223,181,189,103,46,64,92,51 }, - { 127,13,98,165,308,23,286,293,258,51,219,395,197,115,301,401,31,391,22,105,457,170,239,276,55,338,629,116,180,479,509,569 }, - { 539,213,748,840,957,669,30,466,88,217,144,251,863,190,137,93,230,228,679,352,317,203,617,321,258,530,160,219,96,831,816,689 }, - { 5,48,1,21,2,14,0,36,12,38,32,54,430,181,50,270,72,99,281,45,17,10,46,22,37,218,67,3,290,76,23,51 }, - { 13,23,0,4,33,51,2,115,141,1,77,217,180,10,9,317,3,102,11,5,15,197,7,202,22,165,40,64,515,6,341,31 }, - { 13,15,117,515,23,12,37,134,165,700,38,54,457,753,51,64,153,197,14,10,33,82,961,0,99,89,115,719,141,3,4,1 }, - { 5,21,2,3,1,32,14,12,48,17,0,10,51,23,38,22,4,72,13,54,36,45,137,76,99,114,86,37,11,64,540,430 }, - { 202,128,77,318,291,33,269,102,275,141,494,342,40,678,0,177,20,210,402,7,4,5,137,6,13,450,403,32,49,120,23,22 }, - { 1,2,24,14,67,46,69,50,38,103,16,18,75,35,83,29,52,96,5,108,0,7,54,71,149,394,236,309,70,133,220,58 }, - { 15,515,1,700,0,2,753,13,23,5,180,3,51,4,165,457,12,197,115,6,7,21,9,141,8,901,33,82,120,77,10,110 }, - { 0,28,65,14,67,2,124,24,1,9,7,69,55,154,36,16,46,114,175,35,83,22,429,18,109,149,68,189,108,336,251,133 }, - { 56,162,403,3,129,775,99,161,17,40,527,33,880,4,14,128,475,12,548,23,102,202,361,117,34,184,383,200,183,196,64,53 }, - { 151,2,29,58,112,45,186,113,5,70,52,1,311,6,315,66,61,7,74,27,631,17,80,87,287,243,209,227,14,491,19,869 }, - { 6,1,74,2,75,29,25,66,26,70,52,138,67,324,357,42,19,220,14,85,87,108,38,451,309,103,24,69,380,135,114,65 }, - { 15,515,700,13,23,0,1,120,753,51,180,2,260,202,5,141,77,102,9,450,115,21,197,165,7,137,110,33,12,269,901,4 }, - { 5,45,17,2,14,46,48,38,181,50,155,3,186,54,61,29,21,227,281,80,540,106,12,400,52,1,58,32,328,171,209,487 }, - { 16,18,265,121,158,35,60,9,39,7,329,105,252,68,24,1,132,167,159,22,0,49,286,101,21,146,23,327,120,709,5,14 }, - { 108,467,283,56,389,650,123,412,33,177,899,475,216,453,269,349,619,65,51,730,403,670,23,196,523,128,84,13,401,789,503,543 }, - { 514,3,11,377,328,4,361,507,57,403,14,880,130,485,176,215,236,38,152,102,211,56,62,757,54,585,300,556,34,555,40,229 }, - { 3,555,62,266,130,99,507,139,514,12,152,229,215,305,57,40,440,33,403,471,38,56,475,14,361,313,775,328,196,548,123,23 }, - { 120,202,318,15,77,13,1,450,33,269,515,260,5,128,494,51,23,700,102,141,40,753,326,403,817,137,523,21,177,922,342,7 }, - { 15,1,515,23,0,13,700,2,51,753,180,5,165,21,197,12,3,120,115,4,141,6,9,7,457,33,386,202,82,8,31,341 }, - { 15,180,515,82,351,700,10,317,753,115,217,365,141,898,33,901,13,23,110,854,752,77,1,197,4,341,143,36,64,352,102,9 }, - { 104,289,66,707,214,90,712,64,97,173,20,0,414,194,874,43,32,7,568,560,65,38,426,312,715,192,376,74,835,5,324,147 }, - { 84,56,0,554,63,65,453,249,123,643,18,26,847,475,511,403,416,561,524,289,370,73,9,19,45,42,719,194,27,467,33,730 }, - { 21,346,13,350,308,826,197,101,352,68,570,0,165,23,9,841,115,100,509,694,221,230,35,217,569,88,124,749,1,777,212,154 }, - { 16,92,7,24,60,18,35,140,126,14,50,71,46,330,2,75,246,5,121,267,571,1,230,309,220,0,9,64,146,236,54,108 }, - { 82,15,515,898,365,700,180,33,341,753,77,901,10,115,55,351,21,5,1,4,13,102,36,217,2,165,752,120,197,117,11,317 }, - { 16,24,35,18,69,71,140,1,103,7,189,68,0,50,9,108,2,133,60,267,230,46,149,67,167,118,92,14,75,21,191,38 }, - { 60,71,16,18,7,20,43,118,35,68,375,28,608,0,175,566,154,92,14,149,628,33,22,13,2,10,279,23,107,356,55,117 }, - { 187,258,871,295,201,434,219,224,489,384,268,110,261,839,44,699,93,116,36,131,141,228,144,160,940,567,244,406,137,574,98,253 }, - { 66,7,97,172,192,712,232,324,204,74,43,448,387,426,568,20,526,107,104,135,356,729,173,0,22,5,32,95,2,64,500,560 }, - { 15,515,700,753,1,4,0,341,13,3,134,2,5,33,11,77,12,10,23,197,365,901,7,40,217,32,21,6,51,180,961,37 }, - { 0,28,24,9,35,65,16,124,68,55,109,154,7,39,22,149,158,14,175,1,49,252,18,71,2,168,289,419,108,420,67,101 }, - { 7,16,14,92,2,46,140,24,220,35,38,60,75,1,50,18,87,54,5,126,29,52,278,262,314,107,71,21,172,135,330,394 }, - { 7,92,16,14,172,126,2,60,140,35,135,314,278,46,24,38,232,107,330,66,5,18,150,246,230,97,52,1,121,563,279,21 }, - { 6,26,235,53,297,436,27,19,25,73,113,445,90,214,65,42,64,289,250,611,624,32,45,648,614,17,85,491,34,122,200,416 }, - { 352,141,1,217,854,752,351,180,244,36,110,661,82,258,816,160,295,219,567,224,230,269,922,144,260,268,93,201,137,116,489,202 }, - { 16,60,35,18,126,107,68,191,92,121,7,14,598,20,493,279,167,446,118,0,28,43,463,55,24,212,375,566,9,150,575,21 }, - { 15,1,515,2,4,13,0,700,3,5,23,753,341,77,51,115,33,11,180,10,197,141,6,165,7,901,102,40,9,202,217,12 }, - { 23,51,13,202,21,5,1,120,15,137,128,125,32,2,12,141,33,165,64,515,403,318,700,48,180,7,6,450,115,523,475,260 }, - { 131,716,224,371,219,187,737,616,385,254,9,98,105,924,31,258,836,39,127,578,49,916,44,761,272,137,944,159,0,242,442,22 }, - { 15,515,700,1,753,2,5,0,4,13,3,180,11,141,197,10,341,217,33,134,165,6,77,7,317,12,352,64,365,32,102,40 }, - { 66,74,7,173,174,29,192,2,222,20,226,43,353,52,712,6,0,138,500,204,97,145,64,104,426,673,355,90,25,5,65,87 }, - { 5,259,786,534,590,493,279,49,13,581,465,21,929,35,941,132,147,32,23,612,362,626,107,121,178,0,146,61,48,939,10,18 }, - { 2,14,16,7,278,69,135,140,46,24,267,35,92,38,1,189,29,52,309,60,66,75,71,172,74,357,18,87,67,6,230,5 }, - { 165,13,308,197,391,23,401,15,51,457,180,509,115,569,3,629,961,719,34,758,317,734,14,29,46,2,17,901,38,453,5,217 }, - { 1,22,2,14,0,28,7,168,67,49,65,24,36,95,5,105,55,35,12,46,69,16,114,159,194,50,10,9,158,83,164,109 }, - { 34,453,3,196,130,14,322,11,47,51,377,236,361,4,730,153,514,711,57,440,62,17,161,108,176,59,485,56,162,412,202,117 }, - { 18,16,21,23,48,13,24,35,121,5,156,60,51,1,7,132,141,221,163,115,0,271,447,340,363,202,125,71,2,781,22,698 }, - { 165,13,457,23,197,961,629,569,341,41,12,38,401,901,54,51,115,17,15,509,421,37,62,45,719,57,32,328,117,758,157,99 }, - { 2,1,77,141,33,64,3,102,0,23,13,5,128,10,6,15,180,202,269,40,51,515,7,165,137,117,318,4,700,153,197,352 }, - { 68,212,0,124,101,9,154,16,562,191,21,149,65,24,35,1,118,167,818,350,520,100,722,841,264,71,13,302,478,23,375,346 }, - { 98,23,48,598,13,293,541,21,125,121,51,807,0,31,35,259,126,7,386,1,223,783,10,107,199,20,221,144,342,963,49,64 }, - { 21,13,5,586,1,23,167,48,33,781,647,49,165,18,51,271,77,32,761,118,0,82,391,22,146,141,459,31,197,156,115,4 }, - { 2,1,5,61,29,7,58,45,14,6,425,32,70,52,290,738,207,21,72,112,66,76,655,17,186,46,64,263,38,0,128,87 }, - { 39,265,9,100,1,333,363,101,18,411,447,254,166,310,31,98,264,30,639,404,156,286,16,93,593,203,272,682,0,905,44,821 }, - { 6,2,1,19,29,51,26,108,25,74,5,23,14,114,13,386,133,103,42,66,453,70,309,138,719,324,65,38,64,96,52,75 }, - { 20,43,356,107,49,858,595,7,414,359,0,5,392,319,97,612,422,819,14,376,173,246,22,470,147,427,230,92,197,33,683,95 }, - { 0,9,68,35,65,67,114,101,28,1,124,175,336,69,154,103,83,24,189,133,39,16,50,7,2,149,55,251,18,345,230,36 }, - { 23,13,51,15,0,1,515,115,165,2,5,12,700,202,4,21,141,457,753,197,10,3,180,120,32,9,318,11,453,64,6,269 }, - { 121,195,60,16,126,107,98,271,146,407,132,35,1,167,199,223,493,191,279,20,18,5,43,7,21,92,48,393,0,362,212,467 }, - { 31,44,299,116,393,144,492,456,268,22,105,0,367,918,384,434,127,489,98,9,963,125,242,948,1,28,206,49,36,51,93,293 }, - { 23,13,457,51,165,401,719,758,197,453,961,629,308,14,15,12,730,3,386,569,391,29,739,515,34,828,832,901,115,514,670,341 }, - { 105,36,131,22,180,115,341,127,169,1,9,31,64,98,44,365,317,141,272,143,160,55,219,86,197,776,239,187,0,535,13,752 }, - { 1,6,2,14,66,25,29,5,108,67,65,114,19,38,26,52,74,7,24,18,69,86,36,388,64,51,17,83,23,46,42,75 }, - { 51,386,23,453,719,13,730,6,457,670,758,19,401,165,2,475,47,26,899,14,108,17,1,5,197,29,894,754,236,74,27,285 }, - { 252,18,9,101,121,16,132,0,419,167,364,60,604,35,265,363,146,271,39,158,68,109,28,329,848,24,647,907,682,159,212,55 }, - { 283,503,128,432,26,193,63,269,789,529,102,122,389,275,678,6,25,318,445,4,342,27,573,605,177,862,643,291,216,57,235,59 }, - { 2,1,29,75,69,52,14,6,46,74,87,7,220,226,278,38,135,66,267,70,16,262,25,24,380,324,357,140,67,394,97,222 }, - { 97,298,69,7,66,140,189,24,16,267,172,423,60,150,14,314,92,71,81,501,43,35,74,6,517,232,149,607,83,330,18,2 }, - { 475,421,403,899,51,805,523,958,453,817,23,615,401,801,120,326,202,670,494,730,450,386,115,629,260,576,77,365,569,0,165,13 }, - { 7,20,14,128,77,97,112,202,2,177,16,415,269,318,275,66,107,43,141,414,135,38,307,10,58,0,6,291,32,5,4,40 }, - { 24,14,7,0,2,1,22,28,16,65,168,124,35,67,108,109,18,49,10,149,69,158,5,95,289,12,55,6,36,71,46,21 }, - { 26,80,27,73,122,25,19,17,6,42,684,209,445,573,667,106,45,690,4,611,255,680,297,495,65,59,128,119,483,113,64,53 }, - { 107,259,362,376,465,20,470,147,595,534,612,683,660,43,5,49,581,0,858,35,427,246,97,786,178,356,14,21,142,878,7,279 }, - { 131,30,228,190,856,406,224,88,219,530,863,613,778,274,944,816,187,39,100,160,258,31,44,93,1,321,539,36,871,137,435,531 }, - { 113,6,311,25,45,491,80,611,27,26,209,667,17,73,122,42,684,396,19,85,106,5,614,4,2,255,151,29,1,64,648,61 }, - { 15,515,700,753,0,1,23,51,120,2,13,82,5,260,9,4,341,77,180,115,141,10,7,12,450,8,202,901,197,351,165,93 }, - { 219,127,98,258,395,421,924,293,242,201,697,105,276,51,308,23,453,272,401,944,512,137,13,31,284,567,386,365,116,131,964,125 }, - { 15,180,352,141,515,752,217,82,1,317,854,700,351,753,115,341,110,13,260,120,21,36,33,898,23,10,5,365,4,160,901,137 }, - { 129,123,17,257,162,184,205,249,183,769,5,80,3,4,229,130,119,45,90,99,618,106,57,497,12,128,2,84,59,152,27,40 }, - { 33,102,23,77,64,128,51,13,0,202,10,141,40,15,1,22,117,137,2,86,4,403,269,153,515,196,65,11,700,115,99,5 }, - { 7,14,2,16,172,107,46,92,5,135,35,202,294,87,38,232,29,97,20,21,24,1,60,220,66,43,12,0,126,52,54,70 }, - { 403,576,615,523,475,326,805,817,494,421,51,202,120,450,137,453,23,859,260,401,402,77,33,670,0,958,15,197,386,515,165,480 }, - { 141,352,217,137,0,180,202,349,9,269,23,51,115,291,77,372,13,317,120,752,365,351,93,22,2,341,64,10,82,854,28,18 }, - { 1,23,13,51,202,141,5,165,21,15,120,180,64,2,197,125,33,102,12,7,137,515,48,128,269,318,93,700,0,403,9,4 }, - { 25,151,6,145,122,29,174,45,113,74,4,665,42,138,2,614,416,287,19,348,746,0,66,26,1,7,64,243,311,396,81,624 }, - { 30,190,254,166,100,382,731,829,88,131,264,795,9,93,625,274,438,1,578,613,716,31,44,39,530,36,616,921,265,203,160,77 }, - { 132,5,21,13,1,23,32,195,379,687,156,121,626,296,48,70,850,146,51,82,883,771,35,49,652,407,60,4,260,0,845,33 }, - { 9,254,0,49,272,131,39,159,688,101,105,578,518,158,286,28,327,333,68,224,252,219,344,16,22,1,716,31,30,228,24,890 }, - { 16,7,35,60,18,20,14,68,9,0,28,118,43,92,126,55,107,2,101,154,24,71,5,202,121,109,22,252,21,97,1,621 }, - { 15,515,700,753,13,1,341,2,0,4,3,5,11,23,10,33,117,12,901,197,6,134,77,8,165,317,21,365,217,7,17,40 }, - { 78,19,444,47,26,390,27,453,130,813,108,730,711,65,412,122,51,680,113,235,690,196,630,283,128,236,14,64,73,53,200,445 }, - { 2,7,29,5,61,6,45,1,66,113,112,14,52,315,738,128,32,151,74,16,20,64,70,21,592,0,25,4,425,43,491,222 }, - { 145,112,74,66,6,29,26,70,19,396,25,87,2,287,135,151,138,222,5,226,42,122,7,307,1,644,45,58,113,651,635,632 }, - { 92,16,7,60,126,24,140,35,14,232,18,121,246,71,46,267,172,150,107,314,132,146,230,2,278,108,330,199,236,5,38,572 }, - { 13,115,197,538,569,341,98,55,165,127,365,762,219,286,844,23,170,206,734,638,535,901,169,253,629,0,873,509,180,10,332,258 }, - { 58,151,74,53,287,27,29,396,6,70,2,73,5,52,112,26,651,1,297,113,17,75,19,45,334,445,145,34,315,549,436,331 }, - { 214,289,90,874,104,751,64,65,312,835,204,249,750,194,74,81,875,32,519,288,348,0,174,247,636,715,138,192,784,6,524,280 }, - { 9,39,28,35,30,0,166,49,1,175,439,158,64,346,36,101,67,364,86,88,274,100,168,55,23,10,420,22,190,141,505,180 }, - { 341,901,15,515,700,753,1,365,10,0,569,180,2,197,115,31,165,3,5,4,44,22,317,13,9,951,23,253,116,143,762,93 }, - { 120,202,77,450,260,15,128,318,102,515,494,13,817,700,269,5,403,51,1,33,23,753,82,326,141,342,291,137,21,523,351,32 }, - { 13,115,241,64,180,32,125,197,165,4,118,22,21,23,16,247,237,28,225,191,95,141,167,5,0,341,288,35,459,18,177,24 }, - { 16,24,35,14,1,2,7,69,18,46,60,50,267,140,71,189,108,38,75,92,0,5,9,230,67,21,309,335,54,236,394,220 }, - { 15,515,700,753,898,180,901,341,197,638,10,165,33,1,115,4,77,365,317,13,102,217,117,0,5,2,253,3,82,569,21,752 }, - { 193,523,18,84,56,730,233,65,4,817,90,33,643,403,91,511,453,240,59,11,214,51,719,196,153,475,32,123,64,847,102,561 }, - { 112,29,151,2,74,6,66,7,222,145,287,45,5,624,52,25,113,416,58,122,19,70,186,204,4,87,644,549,337,884,32,0 }, - { 13,0,23,2,1,15,33,3,77,515,141,5,4,217,10,51,64,180,700,115,6,117,11,7,753,40,102,165,197,22,317,153 }, - { 28,0,1,67,65,9,2,114,83,69,103,50,36,22,55,24,46,14,124,109,35,7,16,38,133,160,389,323,18,12,154,5 }, - { 121,132,18,167,271,146,101,363,621,9,411,647,16,354,520,60,212,932,1,806,55,0,195,446,68,35,31,364,777,252,407,118 }, - { 26,6,85,396,122,624,25,19,42,445,64,648,573,416,174,680,665,214,45,348,90,65,194,145,113,881,138,289,112,436,297,544 }, - { 16,146,18,92,24,199,60,71,121,126,35,108,156,953,271,674,132,7,32,640,360,246,649,118,21,95,5,517,14,9,1,314 }, - { 51,13,23,453,475,730,719,15,457,403,64,115,33,95,4,523,3,12,21,6,899,102,5,128,401,202,11,141,308,515,22,125 }, - { 151,396,6,53,27,113,58,26,73,112,74,287,45,29,297,19,145,70,138,445,315,436,34,2,17,573,5,61,549,491,1,80 }, - { 223,1,888,774,260,98,269,385,349,202,96,141,421,622,730,863,318,697,87,453,393,418,922,834,751,5,163,335,120,291,352,30 }, - { 16,60,92,35,126,121,7,150,246,18,107,1,598,24,167,195,14,97,71,279,98,441,191,199,517,146,356,223,298,271,230,0 }, - { 22,1,105,28,239,170,0,55,95,31,36,301,2,320,98,127,9,49,44,64,35,67,10,86,5,12,109,23,168,13,21,312 }, - { 2,6,5,207,292,76,1,119,45,32,17,29,61,306,790,58,240,106,14,64,214,151,476,710,7,72,84,128,4,179,70,25 }, - { 51,23,221,254,115,13,438,530,125,48,21,39,541,960,386,49,1,613,15,840,228,308,627,131,688,401,5,326,421,158,165,83 }, - { 1,5,2,0,12,22,21,36,10,14,48,86,23,13,32,54,3,4,28,65,51,50,137,37,208,114,9,38,17,7,281,202 }, - { 363,23,447,182,296,340,1,93,698,478,379,156,284,144,18,269,21,98,141,70,668,411,664,658,110,914,67,937,180,691,335,291 }, - { 17,32,45,498,41,115,180,197,106,62,54,38,546,165,13,155,468,509,341,243,241,217,542,15,57,536,428,51,117,721,292,129 }, - { 32,95,64,246,22,92,180,13,5,652,125,241,638,237,7,49,4,126,21,115,197,296,888,316,0,165,774,23,16,392,1,534 }, - { 15,515,700,753,33,341,13,217,4,141,77,23,180,317,1,10,102,351,82,115,40,5,854,21,137,11,352,901,365,117,197,0 }, - { 15,120,1,82,93,217,515,260,77,141,13,110,700,351,352,23,180,753,21,854,202,317,64,349,269,51,165,137,5,128,291,36 }, - { 13,23,51,141,77,0,33,4,115,64,2,10,102,202,217,128,1,177,269,11,7,22,6,21,32,9,180,40,15,3,165,318 }, - { 478,264,1,520,98,724,9,682,223,664,21,759,13,772,604,100,23,363,411,48,821,5,0,905,909,447,31,265,88,101,166,39 }, - { 20,29,7,2,77,416,6,128,33,5,0,113,104,32,43,13,491,66,23,21,102,51,74,210,202,525,64,318,10,81,174,14 }, - { 2,1,5,14,7,58,61,29,45,290,46,38,52,21,32,270,6,592,425,0,75,155,16,48,17,50,72,70,207,24,263,663 }, - { 80,6,17,209,106,26,483,113,19,469,255,25,378,27,495,833,45,64,161,2,61,667,76,742,32,90,445,5,814,65,887,119 }, - { 98,223,393,1,354,834,195,791,447,697,284,293,360,541,781,156,51,807,18,664,421,411,163,668,48,31,591,765,883,386,948,23 }, - { 679,141,816,36,93,406,876,144,228,137,1,180,669,21,332,251,5,269,116,187,96,351,202,752,317,64,203,831,574,466,855,345 }, - { 15,515,700,13,1,753,2,0,23,341,3,5,4,10,51,11,33,165,6,7,115,197,12,64,180,153,217,77,9,569,901,317 }, - { 13,23,202,51,5,21,403,15,120,64,1,450,128,141,12,523,33,165,494,125,2,515,269,7,48,102,318,95,260,180,453,197 }, - { 16,18,24,60,71,92,146,246,199,35,140,7,9,118,121,108,167,230,126,132,0,640,156,14,68,133,267,360,649,271,64,55 }, - { 269,141,678,177,202,77,128,318,33,947,40,120,291,349,102,137,64,352,210,864,461,498,13,342,196,23,275,450,954,0,205,111 }, - { 16,24,92,18,71,60,35,7,108,191,167,246,140,14,126,21,1,68,150,118,149,388,399,9,273,0,121,796,230,48,212,517 }, - { 2,14,1,29,46,75,52,70,69,171,38,7,58,163,16,5,24,220,67,112,223,54,50,409,155,35,267,186,151,334,394,140 }, - { 9,252,100,265,166,39,88,404,329,0,1,520,382,812,101,593,264,274,604,676,30,118,68,553,18,664,363,23,639,865,21,411 }, - { 16,18,35,24,0,60,158,7,22,68,14,49,109,159,55,9,28,71,2,10,5,105,1,118,329,13,344,23,92,20,21,126 }, - { 15,13,515,700,23,0,753,1,51,2,4,10,77,5,3,197,115,165,961,202,9,457,180,12,141,22,33,120,6,11,318,31 }, - { 160,93,251,137,317,1,180,36,120,217,345,752,617,352,332,10,96,531,498,318,365,202,141,269,816,341,901,679,143,35,83,968 }, - { 6,25,42,128,19,59,122,4,85,26,611,27,269,233,45,0,343,91,318,80,11,177,283,73,33,614,2,77,64,138,445,216 }, - { 95,64,74,7,32,81,51,204,0,20,237,65,56,38,91,23,207,180,347,343,29,6,511,52,49,10,25,18,554,370,14,312 }, - { 202,120,326,260,450,817,494,318,137,403,128,77,523,553,859,5,704,1,15,23,13,576,7,16,615,51,682,291,515,0,21,234 }, - { 20,43,107,356,362,126,595,92,359,7,422,319,493,16,858,5,392,246,414,683,60,0,35,945,441,21,259,819,49,97,279,173 }, - { 25,42,6,77,33,102,0,122,4,690,29,483,210,27,21,19,2,300,18,648,680,119,117,59,1,10,342,12,26,153,91,684 }, - { 31,44,299,116,125,242,456,599,22,393,0,144,492,28,268,1,9,963,301,105,367,36,127,170,384,434,206,98,918,10,13,93 }, - { 410,521,686,367,662,88,335,321,201,96,98,772,144,1,934,921,443,435,284,274,264,551,120,897,44,100,33,225,744,418,909,960 }, - { 142,178,878,234,132,786,195,202,77,416,147,929,146,522,167,259,687,639,450,271,626,481,590,5,198,212,771,49,0,465,315,427 }, - { 254,39,131,9,272,0,578,716,310,224,30,49,105,827,518,829,166,333,616,228,613,846,101,219,1,31,890,98,159,938,252,100 }, - { 230,699,854,473,450,351,831,137,855,217,352,704,800,202,251,498,160,144,206,203,317,201,253,752,418,141,1,332,82,180,443,36 }, - { 403,202,475,453,494,23,51,77,318,402,13,33,128,102,137,141,120,342,269,0,450,4,899,576,40,421,275,117,217,177,196,64 }, - { 23,44,98,182,291,144,116,39,110,141,96,82,905,70,367,264,125,93,77,411,120,1,658,202,100,415,107,363,197,30,447,105 }, - { 15,515,1,13,700,23,77,120,0,753,51,180,202,141,260,5,21,115,2,137,128,9,450,197,365,269,12,326,110,102,318,7 }, - { 0,32,18,95,207,577,193,29,61,104,64,784,715,102,693,887,81,91,583,671,403,5,52,474,397,180,138,49,37,344,38,263 }, - { 0,101,9,68,252,16,100,39,166,364,124,24,154,265,212,88,18,35,329,419,28,118,71,30,65,158,191,55,1,694,21,676 }, - { 16,24,191,18,35,71,167,118,149,68,212,9,0,1,21,108,101,92,60,375,302,7,589,755,124,674,350,48,562,246,13,363 }, - { 2,14,69,24,1,67,46,16,38,103,29,267,7,35,189,135,278,71,108,18,83,309,52,6,149,388,75,236,60,0,150,66 }, - { 13,1,23,0,4,2,51,15,180,33,3,115,5,515,141,10,77,700,11,9,197,341,202,165,217,102,22,7,753,317,365,6 }, - { 447,1,698,411,31,363,98,5,919,4,156,125,759,691,13,64,459,354,44,21,48,293,30,914,478,225,82,120,2,922,848,839 }, - { 854,82,351,217,141,180,352,15,515,752,1,700,317,898,753,244,10,21,922,115,77,36,4,260,64,110,372,13,5,365,120,11 }, - { 0,1,4,13,5,2,82,33,3,120,10,23,9,11,77,260,21,102,8,31,40,6,351,51,64,450,22,117,93,110,7,457 }, - { 51,13,403,23,12,475,1,2,21,5,453,523,115,202,817,7,0,99,3,6,450,120,494,64,22,95,49,899,10,37,32,141 }, - { 180,752,352,141,498,864,317,217,9,0,115,237,230,39,30,197,83,1,930,64,35,365,372,13,579,88,702,36,101,901,482,21 }, - { 16,24,0,7,22,18,28,35,14,158,71,2,109,60,1,168,49,154,124,68,10,55,92,118,159,9,5,747,95,105,65,6 }, - { 15,515,700,753,0,23,1,13,341,51,120,77,141,4,137,33,260,82,202,9,180,5,351,2,291,10,11,901,21,115,40,128 }, - { 24,68,35,149,18,16,0,7,9,14,189,108,69,65,67,1,71,2,118,28,140,101,114,336,230,124,175,133,46,55,251,154 }, - { 13,308,197,115,125,9,165,237,391,23,509,569,546,28,49,629,22,338,317,254,749,180,468,159,903,386,217,352,558,39,36,734 }, - { 64,90,32,217,77,4,141,216,172,312,128,13,86,33,597,147,352,95,5,115,875,22,59,11,102,14,182,437,97,177,874,707 }, - { 1,22,36,0,105,28,2,67,95,49,55,5,239,12,86,9,83,170,312,64,31,21,23,10,164,50,114,159,208,13,7,320 }, - { 9,18,16,0,159,105,101,252,49,310,24,68,35,39,265,272,7,1,60,28,455,890,329,557,118,286,55,137,327,167,5,13 }, - { 129,123,214,249,618,17,5,257,205,184,460,76,2,162,769,245,90,106,128,45,119,1,183,4,3,12,179,64,6,229,99,209 }, - { 51,453,719,457,23,13,730,899,475,386,4,15,11,12,670,196,515,523,961,401,153,3,700,99,753,117,403,32,120,165,57,0 }, - { 173,66,192,204,20,74,104,636,7,43,289,426,825,712,560,214,81,750,65,97,707,0,90,414,64,348,32,500,22,861,95,6 }, - { 13,23,1,51,5,21,141,120,202,15,165,2,515,180,12,125,0,64,82,700,197,269,32,48,260,128,115,93,9,137,33,753 }, - { 200,34,322,78,472,390,27,714,19,14,136,161,453,176,236,444,59,3,62,128,108,57,283,862,73,53,47,17,412,813,4,56 }, - { 33,347,66,204,426,498,56,172,97,95,5,681,546,22,10,0,135,180,4,241,19,174,6,353,263,21,7,370,42,197,27,808 }, - { 131,224,219,187,385,371,258,442,254,737,31,98,836,127,924,944,44,871,908,716,39,827,201,574,116,137,36,1,276,242,578,616 }, - { 1,15,2,180,4,141,13,515,0,5,3,115,700,901,341,23,217,352,753,51,197,77,317,33,365,752,165,21,6,7,269,93 }, - { 370,91,718,74,81,510,397,66,636,240,355,84,138,511,18,278,6,681,701,289,90,5,214,582,64,104,0,643,192,65,750,32 }, - { 15,515,700,753,13,120,1,0,165,2,197,23,260,180,4,82,51,386,8,5,12,10,3,141,351,341,326,9,450,7,64,6 }, - { 32,2,76,5,1,292,72,45,476,214,21,241,29,14,17,48,129,90,179,460,464,123,290,148,519,205,3,263,249,38,710,89 }, - { 13,165,115,17,197,569,23,509,457,45,32,41,106,180,62,38,659,734,155,536,341,629,961,873,587,54,431,37,391,99,405,428 }, - { 68,24,35,16,0,101,9,124,154,71,149,65,18,175,28,118,7,55,302,108,92,14,22,346,1,39,429,252,375,364,10,67 }, - { 0,9,1,68,230,65,35,69,83,23,101,13,141,67,217,352,21,39,16,88,28,124,212,100,115,154,51,64,30,36,10,317 }, - { 100,265,88,909,410,382,812,593,1,213,321,30,252,230,352,264,9,166,689,39,676,98,21,466,724,639,478,217,13,48,553,101 }, - { 113,61,198,904,43,0,5,37,899,325,20,59,33,523,204,725,817,389,470,329,222,40,174,58,22,453,690,848,122,104,788,105 }, - { 16,24,141,18,7,0,71,140,35,269,75,352,12,9,108,217,5,330,60,64,199,70,22,13,486,246,318,133,65,50,23,498 }, - { 271,167,121,60,18,191,146,199,16,1,446,132,575,212,463,354,126,35,598,566,727,98,107,21,608,955,640,407,5,24,223,68 }, - { 15,515,115,217,700,13,317,753,141,180,33,23,110,120,4,341,82,10,1,260,365,36,64,854,351,21,51,352,137,77,40,0 }, - { 173,7,97,356,43,107,20,387,729,104,426,232,560,595,359,392,414,707,885,81,5,0,66,858,612,49,861,14,22,32,819,230 }, - { 15,515,700,753,13,23,51,82,0,33,165,120,196,4,1,2,197,453,260,351,180,12,40,8,386,110,5,326,9,141,217,457 }, - { 9,100,120,30,77,795,137,82,202,39,264,827,578,127,0,166,373,318,18,326,141,260,1,450,731,31,33,395,217,291,341,254 }, - { 14,2,67,1,24,69,0,28,65,7,46,18,114,108,36,83,38,398,9,16,124,133,103,154,50,55,22,267,29,160,35,547 }, - { 14,7,69,24,66,16,2,267,189,67,71,150,140,97,18,60,172,35,6,1,38,149,388,92,83,135,108,74,462,380,29,36 }, - { 15,515,700,753,1,13,2,0,4,341,5,3,23,365,11,117,180,10,12,33,134,115,77,197,217,165,6,7,317,102,21,9 }, - { 1,22,0,12,5,2,36,28,21,10,86,13,23,49,128,9,95,51,55,96,208,141,48,202,4,137,37,64,105,3,50,7 }, - { 605,630,63,123,736,650,65,108,444,368,561,389,19,25,42,619,122,194,183,27,53,33,84,26,297,813,114,73,256,235,249,216 }, - { 127,39,9,0,31,371,98,254,1,385,395,44,30,836,187,131,100,116,284,578,299,166,28,21,737,16,276,272,23,49,137,935 }, - { 2,61,6,29,45,151,1,655,7,207,32,5,112,425,17,76,833,4,14,64,58,106,119,25,113,128,72,52,70,21,292,790 }, - { 2,5,17,14,3,29,23,27,13,401,46,6,51,58,1,453,45,53,34,52,133,19,236,26,181,114,99,366,151,108,218,38 }, - { 31,22,170,1,301,44,127,98,36,28,55,105,239,0,338,116,512,299,293,125,86,10,242,395,2,13,9,64,841,23,95,685 }, - { 1,21,2,14,5,32,48,50,38,270,46,76,290,72,45,54,17,0,155,221,263,207,37,281,430,3,89,12,181,408,36,67 }, - { 17,106,119,378,84,240,62,80,383,136,306,3,56,790,742,5,207,504,64,440,32,128,45,2,123,209,14,4,61,57,297,667 }, - { 13,15,1,515,23,2,0,700,4,115,3,51,5,10,753,180,33,341,217,11,165,317,365,197,6,77,40,64,22,9,7,117 }, - { 772,335,96,744,1,367,662,686,652,897,303,264,521,31,225,410,141,520,260,116,64,44,321,98,144,88,919,966,340,269,349,284 }, - { 1,0,5,28,36,2,12,22,83,67,65,50,24,14,9,96,21,218,18,114,48,281,54,10,7,160,181,103,37,23,133,99 }, - { 25,6,145,42,138,81,174,348,525,544,26,74,85,280,287,648,746,91,66,0,29,396,204,64,636,90,122,194,355,104,65,233 }, - { 16,24,0,18,28,158,7,35,49,22,68,159,55,1,14,109,105,2,9,71,65,154,124,95,424,344,60,239,118,577,21,10 }, - { 352,854,699,230,93,689,137,144,217,160,251,36,669,202,351,120,617,855,752,203,332,82,450,180,141,748,831,30,258,201,1,816 }, - { 15,13,515,700,1,2,0,753,23,5,4,3,51,33,10,115,11,317,217,77,180,341,117,165,6,134,197,153,64,9,102,7 }, - { 104,20,43,173,66,319,0,77,202,7,198,5,97,580,355,74,2,204,174,52,712,234,426,155,102,192,32,4,500,337,226,904 }, - { 13,23,15,51,1,515,0,2,5,700,141,4,753,165,115,12,3,21,457,10,180,269,32,6,197,202,9,7,120,11,77,33 }, - { 15,515,700,753,0,1,13,2,23,115,4,317,8,3,5,51,9,341,10,217,22,365,33,457,6,180,77,901,197,120,18,7 }, - { 15,515,700,753,1,0,2,3,4,13,5,141,23,16,82,217,457,10,365,180,9,317,51,21,269,898,64,202,11,12,318,341 }, - { 2,5,1,14,50,38,29,17,114,46,133,3,45,21,58,171,181,36,218,12,6,52,0,48,137,65,361,23,155,4,285,51 }, - { 0,68,9,65,101,124,35,212,16,149,154,100,24,1,114,336,67,589,252,39,71,189,69,562,18,13,30,398,118,88,265,264 }, - { 1,2,14,22,0,7,67,65,28,36,24,46,168,5,86,69,38,16,49,12,289,10,194,50,83,114,95,6,18,23,55,158 }, - { 13,23,15,51,515,0,700,4,1,753,2,10,115,961,457,12,33,11,3,5,197,9,165,77,102,403,453,40,64,22,37,59 }, - { 15,515,700,753,0,1,2,13,23,5,51,901,8,9,180,3,7,82,4,120,12,10,719,341,6,31,141,457,197,22,115,93 }, - { 100,252,88,101,0,265,9,724,48,1,21,352,213,676,410,382,321,230,30,329,593,909,39,812,553,217,23,689,520,264,166,419 }, - { 2,5,1,58,171,14,46,50,29,52,45,38,186,155,67,54,151,281,334,61,48,96,17,181,103,400,502,227,21,223,12,69 }, - { 23,120,13,1,202,141,51,21,165,128,260,15,5,269,137,64,33,180,82,318,93,197,77,326,515,125,110,700,450,2,32,48 }, - { 341,197,10,901,13,15,8,638,569,515,479,23,180,873,700,165,143,642,0,961,753,951,1,115,509,499,116,12,498,242,82,206 }, - { 15,1,23,13,515,21,120,51,2,141,202,700,5,180,165,0,753,197,12,7,33,260,352,137,269,4,82,128,48,9,110,6 }, - { 2,29,50,58,1,6,5,52,14,262,17,46,27,53,151,34,171,74,324,26,38,309,45,113,19,96,287,396,223,67,73,583 }, - { 13,23,141,51,4,202,0,115,77,2,33,217,5,317,180,64,10,269,3,9,15,21,1,128,102,137,318,11,352,515,22,31 }, - { 1,67,0,24,50,5,14,18,16,69,2,9,103,35,83,12,96,28,54,7,58,223,21,46,281,48,65,181,22,38,36,108 }, - { 13,23,141,51,77,64,202,115,33,102,128,4,0,269,10,21,217,32,180,318,9,137,2,11,22,291,7,177,16,31,165,197 }, - { 317,115,180,365,873,498,217,341,13,752,482,197,569,352,1,901,36,23,457,468,165,346,546,143,509,134,579,876,868,2,332,21 }, - { 184,257,205,229,152,17,57,497,266,432,452,524,5,619,381,32,4,90,2,12,313,128,45,59,245,106,3,471,129,769,339,214 }, - { 13,23,1,0,15,2,4,515,51,3,10,33,5,700,115,180,753,77,11,365,341,217,9,6,197,7,102,165,317,40,22,64 }, - { 626,70,771,687,379,846,767,761,518,878,82,481,31,786,49,591,178,163,407,44,87,13,845,125,590,371,195,120,98,557,937,351 }, - { 264,1,410,909,772,897,686,521,335,478,98,96,691,639,100,44,284,382,31,321,744,88,914,724,662,765,223,9,682,363,0,367 }, - { 13,23,1,2,0,15,51,515,5,10,4,33,115,77,180,700,3,141,217,40,6,753,317,197,64,165,7,11,102,9,341,22 }, - { 141,77,13,64,269,23,115,21,318,217,5,202,102,33,137,2,15,291,177,51,48,180,32,4,515,352,128,7,0,10,96,11 }, - { 13,15,23,515,51,0,700,753,1,2,4,10,33,11,961,453,115,40,457,14,12,3,9,5,165,401,197,77,22,21,64,102 }, - { 1,22,0,36,2,31,5,12,13,105,28,9,49,86,141,21,23,95,128,55,44,115,170,10,164,98,180,4,137,239,83,51 }, - { 100,101,88,0,252,9,265,30,21,39,759,724,213,329,321,13,419,68,562,382,676,352,694,35,553,410,1,166,909,593,230,23 }, - { 539,88,30,190,321,530,840,144,669,435,957,748,778,100,96,418,203,213,1,131,410,228,466,274,36,382,219,863,613,83,822,352 }, - { 7,97,92,173,298,107,43,314,232,140,16,356,20,387,729,362,126,359,246,14,230,501,426,441,0,5,560,66,104,779,35,60 }, - { 2,14,7,1,58,5,46,16,38,70,75,45,24,155,29,0,21,52,61,163,220,50,69,270,35,48,32,171,18,6,64,54 }, - { 447,411,363,664,647,98,621,1,354,271,223,478,18,777,781,936,360,759,167,132,121,48,21,156,9,195,118,293,23,691,13,264 }, - { 2,1,14,65,36,67,0,7,46,22,69,5,38,24,28,6,83,29,86,114,168,50,124,208,12,18,108,10,194,484,103,16 }, - { 421,386,51,791,730,958,165,801,23,453,697,403,615,13,221,523,24,899,401,326,551,670,576,102,18,33,125,77,566,115,203,197 }, - { 104,319,422,945,0,81,20,43,715,32,784,693,879,7,397,74,306,207,52,681,671,2,61,173,6,636,904,95,887,5,18,192 }, - { 2,29,1,46,14,52,70,262,6,26,50,67,75,96,309,38,103,112,58,19,5,163,145,83,74,220,223,357,24,69,331,25 }, - { 786,929,590,771,687,626,941,178,465,259,70,5,13,21,35,534,107,518,132,49,878,48,146,121,379,279,31,767,147,195,108,125 }, - { 5,2,186,45,17,29,48,50,14,61,46,155,400,1,227,171,52,58,38,54,430,209,80,281,3,106,536,311,181,243,21,502 }, - { 0,32,64,95,817,494,342,403,207,202,194,389,453,365,312,180,316,5,690,237,848,577,450,61,102,523,475,289,49,241,65,482 }, - { 23,13,51,15,202,515,1,0,2,12,115,4,700,5,165,753,77,457,21,141,128,10,3,64,403,32,197,318,9,11,33,117 }, - { 119,2,6,76,5,17,45,292,306,240,32,1,19,84,64,61,4,209,710,80,26,0,106,27,214,25,128,129,29,179,3,113 }, - { 15,515,700,1,753,0,13,23,180,120,51,2,5,33,165,197,9,450,7,260,115,523,4,12,202,141,82,77,21,102,8,6 }, - { 6,138,74,280,222,85,66,226,25,42,87,204,64,337,29,135,95,174,235,26,145,65,19,32,792,294,112,52,256,2,5,22 }, - { 39,9,0,101,333,158,49,252,310,254,272,68,16,18,159,286,344,455,30,109,627,327,24,105,419,100,364,22,35,1,329,709 }, - { 21,5,32,14,2,1,38,72,76,54,17,3,48,221,270,0,45,46,12,181,37,89,36,50,540,290,430,10,4,741,99,23 }, - { 120,137,202,269,141,260,318,450,922,494,77,291,82,15,5,351,128,1,515,326,64,854,700,352,342,21,753,678,349,32,523,90 }, - { 16,24,68,35,71,18,149,118,191,167,9,0,212,124,65,246,7,67,140,189,399,101,133,60,1,108,267,114,69,92,695,154 }, - { 28,0,9,67,1,22,109,36,55,65,194,114,39,83,49,69,2,35,103,50,158,208,86,420,168,289,505,24,7,185,5,323 }, - { 147,325,198,427,142,178,202,798,5,376,20,318,259,43,120,450,77,234,534,904,470,465,878,725,329,14,315,0,260,858,70,61 }, - { 28,0,65,9,109,1,55,67,35,22,24,39,289,7,175,14,114,2,158,124,420,194,68,16,336,36,49,69,168,570,154,505 }, - { 141,180,13,115,1,23,4,269,2,202,0,317,217,51,15,5,21,352,77,318,3,752,197,10,165,365,137,341,9,515,33,64 }, - { 15,515,700,0,753,1,2,13,23,9,51,5,4,901,33,7,8,3,12,93,180,120,197,6,82,341,10,141,22,260,457,115 }, - { 6,74,66,1,25,75,324,380,278,26,138,85,135,500,87,42,220,841,97,350,29,19,70,226,38,21,52,606,235,889,2,14 }, - { 13,23,51,12,4,15,453,0,457,1,403,165,115,3,11,2,64,5,401,10,515,37,202,33,40,32,99,475,197,700,308,17 }, - { 788,180,5,83,693,319,314,4,32,21,17,11,817,3,510,498,33,12,24,104,814,120,64,117,306,804,523,450,288,160,102,43 }, - { 15,1,515,13,2,700,23,0,4,753,3,341,5,51,33,11,10,6,77,7,115,102,180,165,141,9,197,217,901,40,12,64 }, - { 101,18,9,167,520,16,0,118,60,212,604,364,694,24,55,252,68,917,264,35,1,121,146,363,39,100,806,5,21,166,191,28 }, - { 13,23,0,33,51,141,77,4,64,2,115,217,9,102,7,202,21,10,180,3,15,128,5,269,6,32,11,16,165,352,22,317 }, - { 66,135,97,74,172,6,278,7,204,324,138,174,29,85,2,87,25,140,92,192,52,38,802,69,448,500,808,620,22,1,280,232 }, - { 2,24,69,6,97,7,1,0,14,298,423,66,67,29,150,25,189,267,124,74,607,18,36,81,172,33,83,38,52,273,71,809 }, - { 0,9,158,39,68,49,109,16,24,333,35,344,101,22,159,254,272,30,124,65,28,18,793,154,310,252,327,105,627,419,286,55 }, - { 15,515,700,10,753,33,77,180,4,341,1,197,13,115,365,23,901,317,5,102,11,217,165,117,141,40,2,3,253,21,134,55 }, - { 100,166,382,478,265,264,88,39,98,1,404,274,9,593,724,921,639,438,363,682,411,31,30,812,96,447,821,905,252,0,223,435 }, - { 19,283,436,53,297,26,813,432,27,128,42,25,390,503,122,736,73,123,605,63,389,529,630,250,690,65,381,444,6,269,108,216 }, - { 33,202,13,128,494,0,51,141,269,1,4,2,102,180,15,137,65,95,6,450,77,40,117,59,457,36,196,817,134,86,49,515 }, - { 18,16,60,68,101,167,191,118,35,121,9,212,55,0,126,1,24,647,199,146,520,107,628,621,363,71,21,28,346,92,806,727 }, - { 352,230,217,531,160,93,36,669,748,854,689,258,137,871,728,699,752,251,574,202,373,351,228,120,717,260,144,219,268,82,816,1 }, - { 15,515,700,753,13,23,0,51,8,1,4,82,165,77,110,33,10,180,5,202,11,22,120,12,9,197,115,93,403,141,40,351 }, - { 0,9,101,217,35,88,352,100,39,175,30,68,562,752,13,317,252,115,180,197,64,1,83,141,65,213,165,230,194,36,28,265 }, - { 32,64,5,470,288,90,21,147,0,95,356,22,20,519,835,312,819,18,247,182,11,97,13,4,387,49,43,298,316,48,107,7 }, - { 16,14,24,1,7,2,35,0,5,50,18,69,46,12,58,75,9,67,70,163,21,54,38,48,223,502,281,37,140,60,28,10 }, - { 18,265,9,252,39,195,354,411,1,16,132,101,121,682,167,203,5,363,146,593,35,333,21,271,60,13,100,0,156,327,7,520 }, - { 4,13,1,115,141,23,2,180,5,0,51,3,217,202,77,15,33,269,341,318,317,21,165,515,11,10,197,365,9,137,64,352 }, - { 7,24,16,14,71,35,18,92,140,189,108,149,68,60,69,150,2,230,97,66,0,458,67,1,65,251,38,314,388,267,36,46 }, - { 1,22,31,36,0,2,44,5,141,105,180,170,12,64,13,98,86,55,23,21,28,164,115,127,10,125,128,4,9,239,352,197 }, - { 66,7,97,2,192,20,52,43,135,74,560,107,104,0,750,147,414,29,580,173,324,376,226,194,77,174,204,38,356,64,16,470 }, - { 0,101,9,68,35,124,24,65,39,16,252,100,154,166,28,364,149,694,30,88,55,346,1,419,71,439,265,289,22,21,175,158 }, - { 39,9,100,30,127,0,737,856,31,836,827,254,98,931,166,88,93,1,44,190,131,228,120,395,625,385,863,264,219,373,110,28 }, - { 5,17,2,3,21,45,14,155,48,32,38,1,328,181,186,46,23,51,12,61,227,29,106,54,99,133,62,832,13,37,514,543 }, - { 131,613,30,224,228,716,274,100,827,406,219,856,39,190,31,88,1,166,9,44,829,863,931,93,0,187,625,924,127,98,137,254 }, - { 352,217,64,141,752,269,180,864,437,372,954,115,498,177,77,349,317,318,579,291,947,197,247,0,23,717,237,304,128,457,776,678 }, - { 141,217,180,317,352,115,15,341,1,23,13,365,515,752,2,64,0,5,498,700,372,165,51,237,753,77,244,197,137,4,21,253 }, - { 5,2,17,14,1,45,3,38,21,29,181,58,46,48,50,133,114,171,61,155,32,6,186,281,361,12,36,54,4,13,52,514 }, - { 6,2,119,25,790,4,45,483,655,113,1,29,76,26,32,19,887,17,128,0,292,833,59,61,106,64,77,814,14,151,84,42 }, - { 13,23,2,0,51,4,1,115,141,3,5,180,33,217,77,9,202,11,7,15,10,6,317,64,21,197,515,165,102,128,22,269 }, - { 13,23,51,202,21,5,1,15,141,165,120,2,115,12,32,0,515,128,318,64,125,700,4,403,197,453,180,457,3,7,10,6 }, - { 9,39,31,30,0,127,1,44,100,131,98,187,385,276,88,442,219,908,254,116,49,166,935,28,201,36,141,827,137,299,284,21 }, - { 22,49,28,109,9,185,105,95,1,131,159,272,36,67,86,254,39,55,35,0,505,31,83,169,208,327,286,98,168,535,312,708 }, - { 5,1,2,21,0,12,48,22,10,14,36,3,32,17,23,54,86,38,4,51,13,37,137,50,65,281,114,45,28,99,58,202 }, - { 141,269,352,82,217,351,180,854,372,922,752,1,15,260,317,318,515,202,64,700,120,349,954,753,77,35,67,717,898,137,365,115 }, - { 144,203,613,418,326,406,96,669,137,679,1,228,494,822,840,317,36,83,855,160,817,859,856,816,217,831,345,93,876,77,44,251 }, - { 15,13,515,23,700,753,51,1,33,0,202,21,2,5,180,141,120,165,217,82,12,117,4,352,269,197,115,32,3,9,134,260 }, - { 13,23,115,1,0,51,4,77,2,33,15,141,10,5,341,180,515,3,217,202,9,365,317,64,700,102,11,165,197,22,753,7 }, - { 531,943,373,160,728,93,206,260,261,559,964,269,717,535,332,384,365,295,110,533,141,10,180,352,244,137,120,55,959,564,36,253 }, - { 1,31,36,170,22,55,44,10,86,64,127,0,2,98,301,164,740,338,237,143,5,125,116,13,242,141,299,180,23,169,105,12 }, - { 13,23,141,77,51,4,64,32,33,202,115,269,102,128,21,0,177,180,318,90,40,10,7,5,137,15,217,352,9,291,59,22 }, - { 202,120,260,318,77,15,450,269,1,82,33,23,141,13,51,515,351,128,700,5,64,326,137,21,102,110,753,494,93,523,817,165 }, - { 523,899,102,33,730,15,23,403,719,117,153,13,515,51,475,4,700,5,453,817,196,753,494,40,202,120,1,2,450,457,17,421 }, - { 202,403,494,450,120,817,523,475,318,453,33,402,128,77,13,51,260,576,342,102,15,23,515,4,700,5,82,753,326,210,137,615 }, - { 2,29,112,66,7,52,70,151,58,87,135,5,74,226,307,6,14,186,1,45,549,172,644,25,113,287,46,155,334,64,294,97 }, - { 1,77,349,291,260,120,652,102,5,39,64,269,9,33,340,342,13,98,888,698,23,296,100,318,51,202,87,137,638,128,50,850 }, - { 1,13,15,2,0,4,23,515,5,141,180,3,700,341,115,51,753,269,77,901,197,352,217,33,21,11,365,6,165,202,7,317 }, - { 7,14,16,2,46,5,70,58,1,38,24,35,92,163,0,75,21,18,50,54,140,12,87,220,155,69,171,23,60,9,13,307 }, - { 2,29,66,226,135,7,87,74,52,278,6,75,222,220,294,70,97,1,145,25,172,262,324,38,69,112,331,92,5,14,140,26 }, - { 15,515,700,753,33,77,117,4,1,102,134,40,153,11,13,196,217,21,5,51,23,115,32,3,2,202,141,137,128,291,48,177 }, - { 15,217,82,515,351,141,317,1,13,700,260,77,110,120,115,854,23,753,180,51,21,36,137,922,5,64,365,352,291,202,93,341 }, - { 31,190,30,373,120,110,863,88,44,127,908,856,260,318,82,98,93,187,836,717,935,39,442,131,141,254,228,219,1,968,77,116 }, - { 23,13,308,9,165,115,51,21,401,125,49,39,197,391,159,254,217,743,28,438,773,629,558,386,341,95,32,317,876,679,109,166 }, - { 49,5,43,165,7,0,21,104,125,22,173,422,64,13,623,102,20,18,314,95,91,141,23,31,193,51,391,900,779,558,92,232 }, - { 1,4,13,2,15,0,23,515,77,3,341,33,5,700,115,51,202,753,141,180,11,10,102,217,6,901,40,7,197,318,317,365 }, - { 93,843,295,120,36,160,206,261,10,137,567,110,384,141,943,268,201,332,258,55,1,180,64,116,44,144,699,203,282,31,260,373 }, - { 81,7,192,426,43,173,172,104,879,91,5,712,715,526,6,97,568,95,448,66,33,861,560,32,49,20,0,636,232,825,2,22 }, - { 475,403,51,453,33,102,13,23,494,202,0,196,15,77,153,18,4,117,515,450,318,22,730,128,700,421,65,753,269,402,134,817 }, - { 141,269,260,318,202,120,352,349,82,351,1,5,854,137,64,291,15,922,180,851,32,77,515,372,21,700,7,217,13,947,33,753 }, - { 15,515,700,753,1,13,0,2,4,23,3,5,180,115,197,12,51,165,217,10,961,9,6,141,352,21,8,7,33,77,457,120 }, - { 39,166,9,30,0,101,274,404,252,333,190,100,158,438,310,88,68,265,656,21,1,530,329,344,49,539,625,254,13,131,48,419 }, - { 0,1,28,9,22,12,65,83,67,36,5,2,50,55,96,109,16,13,24,23,21,238,49,18,285,160,128,39,69,114,7,323 }, - { 15,515,700,1,0,753,23,2,13,51,5,180,115,6,3,9,197,12,457,120,7,165,901,82,4,21,8,141,31,33,719,341 }, - { 9,39,30,0,28,166,22,49,180,1,352,35,317,158,88,141,498,131,115,345,752,128,228,217,100,83,219,930,13,251,365,36 }, - { 5,61,45,2,80,29,311,209,6,17,58,1,151,106,454,667,243,70,52,496,287,592,255,738,64,74,483,14,27,32,112,19 }, - { 31,125,22,44,299,456,685,242,599,116,170,28,0,1,492,393,506,144,558,10,268,301,239,23,13,36,963,367,55,206,105,95 }, - { 187,258,926,574,839,93,228,860,406,219,871,160,137,531,224,116,120,902,669,201,36,131,44,144,843,533,318,384,442,1,434,268 }, - { 7,107,75,16,87,9,64,177,24,18,291,77,349,141,60,232,23,0,51,269,132,14,5,21,70,32,678,112,126,121,71,947 }, - { 15,515,700,753,1,0,2,13,5,3,23,180,4,115,901,51,6,8,961,9,7,10,12,82,197,22,141,341,33,120,365,457 }, - { 13,23,51,1,5,202,2,12,15,21,165,141,0,115,3,4,32,515,197,10,180,318,128,120,64,700,6,7,403,269,457,137 }, - { 1,2,0,77,64,3,141,13,33,15,23,10,6,102,5,515,180,4,117,7,700,165,11,217,269,40,753,115,128,17,197,134 }, - { 345,531,332,269,260,317,717,752,373,351,180,352,728,82,10,365,160,533,217,143,498,251,244,93,341,901,36,1,141,898,55,864 }, - { 16,7,33,189,92,77,388,60,140,35,102,24,14,1,230,21,150,117,733,314,18,915,71,13,108,134,5,64,69,2,98,22 }, - { 142,202,234,178,5,786,77,49,70,0,416,450,639,878,1,48,21,929,147,259,315,455,198,120,12,481,163,113,846,329,318,22 }, - { 81,715,192,0,173,712,681,104,636,91,74,20,750,370,7,718,95,879,22,43,825,560,422,64,207,49,172,18,397,10,426,319 }, - { 13,23,15,51,515,0,700,753,4,1,961,2,10,115,457,11,33,453,3,5,9,40,12,197,165,77,401,475,64,102,22,569 }, - { 64,297,5,445,95,61,250,311,80,34,17,312,45,2,86,472,58,14,180,53,22,151,869,738,247,237,29,1,128,165,21,288 }, - { 16,24,18,71,7,35,118,92,14,154,60,68,0,149,28,302,124,150,55,175,2,9,97,1,429,20,108,273,22,65,43,126 }, - { 195,360,156,771,132,163,626,687,591,371,883,146,121,846,70,586,379,13,293,98,407,48,761,296,354,18,31,1,55,49,21,105 }, - { 202,13,77,23,318,33,51,0,4,141,5,21,217,32,291,102,64,128,15,10,9,494,269,137,515,403,1,31,117,700,120,317 }, - { 7,192,97,81,172,66,426,173,43,715,712,232,861,879,104,330,568,298,74,893,885,526,387,825,92,140,91,14,636,6,5,448 }, - { 2,1,14,6,67,7,65,69,24,36,66,124,108,83,38,29,22,86,0,18,484,5,28,46,12,10,25,302,150,16,650,74 }, - { 33,77,13,202,102,4,0,23,128,51,141,64,318,22,403,269,137,10,15,40,494,117,32,59,11,153,1,21,177,196,515,115 }, - { 269,141,318,77,349,291,217,202,33,15,372,304,515,22,102,177,351,700,352,120,5,137,10,317,260,753,64,851,854,403,49,21 }, - { 6,74,66,85,138,25,87,42,135,26,226,222,280,29,75,500,220,278,792,70,19,2,1,294,204,64,32,145,853,112,52,174 }, - { 9,0,105,39,16,18,1,101,272,31,127,98,24,518,333,252,310,28,68,737,846,371,158,916,938,49,30,7,286,35,301,455 }, - { 2,1,14,67,24,46,83,108,69,29,38,103,114,36,6,133,18,0,28,7,65,52,236,75,50,398,5,309,135,16,278,160 }, - { 22,1,28,105,49,95,0,2,67,55,36,239,168,159,65,35,14,170,320,164,9,7,10,5,114,12,83,64,194,109,24,301 }, - { 7,66,172,97,92,140,232,568,298,14,192,314,16,380,135,324,2,330,74,38,357,448,126,69,35,5,107,6,387,60,204,572 }, - { 2,29,1,14,5,6,46,133,114,50,52,26,218,108,19,13,366,236,27,45,70,17,58,23,86,51,137,65,112,38,25,12 }, - { 6,1,74,25,2,26,29,66,42,19,75,14,388,67,108,70,52,85,103,65,38,138,357,133,114,594,324,516,603,96,309,69 }, - { 22,9,28,1,36,49,109,105,86,95,131,31,169,39,0,141,272,159,44,55,98,180,13,30,185,115,83,128,352,137,64,208 }, - { 203,822,326,23,77,859,403,494,576,39,473,182,33,1,691,100,18,217,13,817,411,447,363,102,93,966,96,478,291,704,310,120 }, - { 15,515,700,753,33,77,117,4,102,134,115,153,13,1,40,217,11,196,341,2,5,3,23,317,365,0,21,291,32,51,12,569 }, - { 15,515,700,753,13,0,23,1,8,82,51,165,197,120,180,2,9,33,4,110,5,12,10,260,351,386,141,7,457,475,93,901 }, - { 1,23,13,15,51,0,21,2,515,5,141,180,120,165,700,202,197,4,753,12,33,9,7,82,115,93,3,352,260,6,110,48 }, - { 15,515,700,753,0,1,2,5,3,4,8,13,180,341,10,23,7,6,9,51,77,197,961,115,165,82,120,31,22,202,457,217 }, - { 559,661,922,564,141,533,10,317,373,110,143,269,244,260,332,261,93,642,752,295,351,876,531,843,180,206,728,384,352,1,434,120 }, - { 15,515,1,0,700,2,13,23,753,5,51,180,3,165,12,6,197,115,4,9,7,21,719,8,457,82,141,120,33,22,901,10 }, - { 198,234,0,325,5,77,202,416,20,147,32,43,639,315,49,61,450,455,142,21,113,230,22,318,725,342,207,13,95,904,494,10 }, - { 447,264,363,9,411,676,682,1,156,664,821,478,166,354,812,39,100,905,382,897,98,18,759,404,31,101,724,5,265,223,88,13 }, - { 24,14,69,16,35,18,2,7,108,189,71,67,267,149,1,46,68,83,38,140,0,236,251,9,388,60,133,103,65,28,29,50 }, - { 16,7,35,20,14,18,109,2,43,120,107,60,1,121,326,907,553,77,13,147,23,82,68,260,0,403,5,24,202,126,265,199 }, - { 30,131,187,276,31,44,613,442,39,9,190,228,1,839,116,935,908,219,127,88,244,224,110,137,93,201,98,141,36,567,0,856 }, - { 98,223,1,393,812,265,100,421,593,834,697,48,51,410,791,382,21,88,31,284,9,125,96,293,230,23,213,217,656,689,541,5 }, - { 98,51,127,219,616,258,105,293,395,421,924,512,31,308,23,201,116,44,301,272,763,276,125,13,453,170,401,295,261,944,115,567 }, - { 253,110,951,352,811,206,332,180,141,244,282,10,854,417,642,638,559,752,143,911,260,55,93,533,499,498,661,120,351,959,564,341 }, - { 49,9,159,254,272,158,0,131,28,39,627,105,327,286,22,518,688,578,68,347,374,101,224,424,95,35,219,24,16,364,65,344 }, - { 105,22,131,272,98,286,327,109,374,239,28,95,320,219,9,224,55,127,187,36,578,169,64,185,538,1,159,10,371,634,49,616 }, - { 691,478,340,1,658,914,724,363,744,698,156,772,411,296,682,447,9,284,335,98,264,303,909,21,354,410,225,13,664,686,88,919 }, - { 16,24,35,18,71,7,140,108,189,267,92,60,14,230,68,69,9,1,149,46,246,191,388,167,2,0,118,236,133,21,674,5 }, - { 9,0,127,31,98,371,395,39,737,49,1,44,385,272,512,28,293,242,836,761,254,299,101,16,187,22,116,158,159,131,18,21 }, - { 16,18,68,0,60,35,9,101,252,28,118,24,419,55,7,109,604,71,39,121,22,364,14,158,191,167,925,126,329,21,92,49 }, - { 116,268,203,93,206,692,551,31,417,940,499,8,473,44,202,523,959,0,120,137,559,22,450,403,576,10,728,299,13,326,51,1 }, - { 225,459,744,1,919,914,691,330,622,21,141,223,5,284,934,335,88,538,340,82,385,839,363,120,478,98,48,30,64,32,686,166 }, - { 5,1,2,0,14,36,21,281,12,48,50,67,22,28,54,83,24,218,38,10,181,9,32,18,65,58,45,114,430,17,99,37 }, - { 137,450,202,704,120,260,326,318,968,269,851,403,291,77,23,141,182,310,494,373,351,457,82,890,349,110,60,128,817,678,105,96 }, - { 15,515,700,753,4,33,13,23,77,5,40,11,102,93,1,21,110,51,82,117,141,2,10,8,32,64,120,31,202,3,217,115 }, - { 15,13,1,23,515,0,51,2,700,5,753,21,180,141,165,3,12,115,197,4,7,6,457,9,352,202,33,8,719,120,77,341 }, - { 219,127,258,98,276,201,131,395,944,293,116,284,567,31,242,105,137,935,295,44,403,860,51,224,576,456,9,371,578,475,202,512 }, - { 16,7,18,35,60,0,14,20,118,28,68,22,2,24,1,92,158,107,5,49,154,126,109,12,43,10,55,6,677,71,21,168 }, - { 93,728,531,160,559,373,574,120,295,860,533,269,717,260,926,902,258,318,36,201,261,434,851,137,617,141,187,352,843,384,332,251 }, - { 28,0,1,9,22,109,83,39,49,12,36,67,55,5,96,2,128,30,158,69,21,23,160,208,35,13,65,323,50,141,194,238 }, - { 23,13,51,1,5,15,141,21,0,2,165,515,202,700,12,197,180,120,32,115,4,753,64,9,7,269,6,3,125,386,48,453 }, - { 5,21,13,49,14,20,7,23,43,32,1,0,652,48,713,22,38,2,16,132,955,107,12,279,24,888,197,640,70,303,18,638 }, - { 9,0,28,39,1,30,35,101,22,67,83,141,49,175,36,68,55,88,13,251,10,69,23,158,180,115,64,100,217,65,345,166 }, - { 260,120,82,269,5,450,351,1,202,141,854,13,77,922,32,33,137,4,23,125,291,21,15,515,165,349,177,700,318,326,180,753 }, - { 121,16,18,35,363,101,60,20,107,14,68,259,621,55,604,43,7,252,9,364,126,0,167,191,5,407,132,28,199,419,146,10 }, - { 13,23,51,1,15,0,2,141,5,515,12,21,700,115,165,180,4,753,3,197,202,32,9,120,7,8,6,11,37,10,457,269 }, - { 201,144,206,443,418,203,435,96,335,459,187,1,88,332,330,321,269,934,30,372,822,521,268,326,44,523,382,141,410,264,494,473 }, - { 31,44,276,201,116,131,284,662,567,144,9,489,98,295,268,434,0,30,137,39,93,1,187,22,219,918,110,299,141,36,224,384 }, - { 520,478,664,1,264,604,9,167,777,759,411,0,806,724,48,21,101,68,647,936,363,223,118,682,410,18,100,16,252,98,265,13 }, - { 23,70,21,87,60,75,120,182,163,379,92,18,7,937,71,121,446,132,24,98,931,126,107,77,795,195,115,44,411,146,51,850 }, - { 39,9,0,737,127,31,846,98,1,827,105,310,371,30,254,100,44,18,395,242,272,101,385,916,836,16,265,131,938,93,166,557 }, - { 279,20,43,126,107,7,92,16,356,362,60,595,246,359,598,35,0,683,939,653,121,97,125,441,399,392,150,199,48,230,14,649 }, - { 206,417,93,959,499,728,8,559,120,473,137,141,10,564,31,260,44,450,203,341,253,244,373,116,143,638,268,180,352,110,318,940 }, - { 259,465,147,132,590,687,534,199,581,146,941,427,107,640,279,178,121,5,195,150,522,955,198,35,786,929,798,142,1,21,325,626 }, - { 523,15,120,450,202,515,403,51,817,700,13,753,23,457,33,899,128,64,730,102,494,342,115,719,453,196,49,99,318,421,308,5 }, - { 141,559,10,244,365,564,661,180,253,143,752,110,55,317,533,341,901,93,373,206,535,160,82,922,260,36,531,964,352,332,261,197 }, - { 219,258,98,127,276,964,943,137,843,535,201,935,131,860,261,295,284,567,206,44,116,31,253,492,203,332,160,615,36,93,55,692 }, - { 0,319,422,207,945,693,577,887,32,804,95,344,104,904,61,20,5,43,7,725,113,510,306,102,49,263,153,426,33,83,22,9 }, - { 1,22,0,5,12,2,36,21,28,86,49,105,9,10,23,13,141,95,31,55,128,37,51,4,83,202,3,64,96,7,32,44 }, - { 15,515,13,700,1,0,753,2,23,3,4,5,51,10,115,197,6,33,12,9,165,7,8,77,11,961,180,269,141,22,120,457 }, - { 15,1,23,120,77,13,515,51,141,202,700,180,110,137,260,753,326,5,128,102,0,21,2,165,269,33,197,450,318,217,93,115 }, - { 15,515,1,700,0,753,13,2,23,180,51,5,120,4,9,115,197,12,7,165,21,33,6,82,3,8,523,901,31,141,457,260 }, - { 16,18,24,7,92,35,60,75,9,13,71,14,0,108,50,21,126,121,1,140,23,5,132,146,2,12,128,10,64,141,70,87 }, - { 180,341,901,15,515,1,365,700,0,2,197,753,115,4,10,13,752,5,3,8,165,317,141,23,143,873,44,31,569,55,93,6 }, - { 9,0,175,35,101,28,39,67,68,1,65,83,30,69,364,336,22,114,55,124,194,158,100,289,252,166,64,345,103,36,50,88 }, - { 64,165,180,197,115,247,217,237,21,13,32,316,22,141,352,72,288,304,95,225,76,391,386,16,468,90,49,35,365,640,372,23 }, - { 15,515,700,13,753,1,0,2,23,4,5,3,115,51,141,197,12,10,180,961,7,9,21,33,217,6,8,165,457,11,77,341 }, - { 132,121,199,146,60,279,493,640,407,598,126,195,534,581,955,590,107,5,150,35,522,49,259,16,18,360,156,0,147,362,21,167 }, - { 0,1,28,9,22,5,36,12,65,24,67,96,2,83,18,50,114,55,21,16,7,10,23,14,13,160,137,51,48,218,103,69 }, - { 93,120,957,77,30,968,459,110,137,160,613,102,202,352,373,141,31,372,217,330,190,318,269,260,203,44,28,473,228,177,863,704 }, - { 15,515,700,0,753,1,13,23,2,51,5,9,120,82,4,7,901,197,10,8,260,180,341,12,33,6,3,523,165,102,115,141 }, - { 206,417,8,141,499,44,244,93,31,10,137,253,559,116,728,144,120,564,269,638,203,352,143,260,341,752,268,717,951,180,160,110 }, - { 530,254,228,1,96,21,406,39,827,31,669,840,613,829,137,679,166,98,23,51,960,438,131,93,48,224,219,317,310,36,876,190 }, - { 15,515,700,753,13,457,0,197,719,1,165,82,23,8,120,730,2,10,12,180,134,5,9,141,260,4,351,51,115,3,341,899 }, - { 0,16,68,9,24,28,18,35,252,109,39,419,124,158,154,55,101,71,22,118,60,7,49,65,333,14,1,10,329,364,677,346 }, - { 1,15,13,23,515,51,120,0,700,180,2,165,5,753,141,197,21,33,202,102,260,4,9,12,7,326,137,450,115,6,82,110 }, - { 535,253,352,564,110,365,82,180,341,10,854,533,55,898,244,901,873,141,752,143,642,559,498,317,36,951,115,964,638,282,661,197 }, - { 31,44,125,338,116,64,242,36,1,10,55,22,456,237,180,13,299,164,506,86,23,165,558,143,0,762,492,479,844,546,93,8 }, - { 13,23,4,1,202,2,0,51,115,77,141,180,5,15,217,3,33,11,515,317,9,10,102,21,700,341,365,318,269,64,32,128 }, - { 9,39,0,166,68,101,28,364,30,158,562,35,175,65,333,154,49,404,706,124,21,252,274,168,190,289,100,570,16,1,310,346 }, - { 15,515,700,753,341,13,0,23,1,33,141,4,260,82,77,51,351,180,9,5,115,137,10,217,11,120,102,40,349,269,202,854 } -#else - #include "rgbcx_table4.h" -#endif - }; - - static uint8_t g_best_total_orderings3[NUM_UNIQUE_TOTAL_ORDERINGS3][32] = - { - { 12,1,3,5,27,2,4,38,8,7,16,18,6,10,41,79,40,23,46,9,20,88,22,37,14,19,24,126,99,119,35,11 }, - { 7,64,116,14,94,30,8,42,1,108,47,55,137,10,134,95,96,115,69,32,63,29,90,113,11,148,16,103,19,9,34,25 }, - { 12,1,0,5,3,7,4,27,8,6,38,40,41,16,18,46,9,10,20,23,79,62,14,22,88,99,37,126,92,19,120,11 }, - { 16,88,27,18,46,48,126,107,79,19,59,38,37,65,23,66,0,2,3,43,12,151,28,25,5,87,72,40,1,20,52,92 }, - { 79,48,88,16,27,65,18,38,46,19,37,4,72,33,126,41,52,0,12,92,5,1,2,107,3,77,23,91,43,51,22,74 }, - { 1,8,41,122,10,22,2,0,87,24,37,120,38,7,39,4,5,3,9,92,62,59,23,16,104,11,27,79,19,26,25,32 }, - { 2,76,99,28,40,86,93,21,138,60,6,0,17,128,145,119,98,144,141,82,147,54,67,75,5,12,27,132,146,1,38,14 }, - { 47,7,64,90,1,118,116,85,57,14,30,94,50,45,137,134,8,42,69,139,55,68,58,108,95,29,10,115,0,32,2,11 }, - { 49,8,10,30,124,11,32,113,130,58,125,9,100,53,104,115,131,103,24,7,1,39,45,36,139,0,137,22,90,44,114,105 }, - { 9,38,72,125,49,41,84,11,13,5,27,0,16,92,8,2,65,105,10,18,48,29,127,131,36,14,1,46,111,79,130,12 }, - { 130,8,10,100,104,131,49,32,53,39,30,36,113,24,11,22,124,44,83,58,7,103,1,4,9,125,5,0,91,33,115,74 }, - { 114,11,58,8,120,49,9,124,142,111,41,30,10,0,97,130,62,84,38,5,72,125,92,127,100,27,139,113,13,132,32,1 }, - { 60,46,28,27,40,20,0,17,18,2,126,16,6,38,86,23,79,54,1,93,5,88,41,14,21,111,7,48,3,84,72,62 }, - { 72,92,38,65,84,48,41,79,27,16,29,111,88,5,18,46,1,0,152,14,37,19,77,42,132,7,22,13,119,56,12,2 }, - { 7,55,1,95,29,56,64,116,143,8,14,30,47,94,152,90,65,67,10,133,42,72,146,84,16,48,6,0,25,108,77,21 }, - { 27,23,20,5,0,79,38,2,3,1,59,46,4,41,33,86,37,87,88,92,7,126,43,8,22,152,151,150,149,148,147,146 }, - { 12,0,1,2,7,6,3,5,28,4,8,14,60,40,17,19,21,86,126,93,10,18,9,29,48,99,65,25,84,119,72,41 }, - { 60,40,99,2,54,12,0,1,19,28,98,93,6,138,21,5,27,17,151,14,76,46,16,18,38,29,86,144,107,7,25,41 }, - { 12,0,1,2,3,5,6,7,4,28,8,60,14,40,16,17,21,10,19,9,86,38,126,41,93,27,29,48,62,84,79,99 }, - { 0,1,2,10,5,8,3,25,4,29,32,34,63,7,77,26,16,48,65,56,14,22,129,103,72,24,18,152,140,53,96,42 }, - { 46,126,18,54,12,16,1,0,5,2,27,98,20,23,6,3,88,48,28,7,19,8,4,60,151,38,37,21,79,14,65,40 }, - { 76,6,141,86,119,2,138,67,28,145,0,93,17,1,40,60,146,99,147,14,21,144,132,7,5,29,55,27,16,75,19,12 }, - { 71,5,51,39,22,80,0,43,10,122,8,62,41,24,104,87,35,37,2,91,33,120,36,38,1,131,9,100,130,66,3,4 }, - { 126,18,46,27,20,16,88,23,12,79,54,59,48,0,73,1,37,151,5,19,28,38,2,66,60,3,65,98,14,26,6,43 }, - { 22,10,8,5,0,71,35,80,104,39,24,51,100,1,62,32,2,130,11,41,7,9,53,43,49,83,122,120,30,44,37,38 }, - { 1,34,14,129,53,63,42,26,121,148,7,44,96,10,0,24,100,32,64,116,140,22,5,19,29,103,135,108,8,61,39,83 }, - { 1,7,34,63,44,25,135,14,24,108,22,0,83,94,5,129,35,101,47,121,2,19,42,53,6,110,103,8,148,10,16,123 }, - { 12,28,16,60,18,1,6,21,14,0,86,19,2,48,93,17,38,29,7,5,65,126,46,72,41,79,84,119,40,56,54,88 }, - { 0,2,12,27,5,46,38,40,41,79,88,99,3,23,1,62,20,4,22,37,92,35,18,8,16,24,10,60,7,120,98,54 }, - { 1,7,14,56,8,0,84,67,10,2,133,72,42,111,5,30,21,4,9,3,25,94,16,116,47,11,65,18,132,90,55,64 }, - { 30,8,124,139,45,11,58,90,113,137,7,115,10,32,1,49,94,85,9,47,108,103,0,97,63,14,50,114,53,106,100,25 }, - { 65,38,48,27,16,79,72,18,88,19,46,77,84,92,37,41,0,29,1,14,12,111,2,5,31,36,87,74,105,40,28,51 }, - { 10,8,30,113,130,100,53,32,115,103,104,7,1,121,39,49,131,44,24,36,63,137,34,45,22,90,108,83,26,11,94,139 }, - { 51,52,43,33,5,74,16,37,71,91,38,3,36,87,48,22,4,0,122,41,39,18,66,27,79,24,65,88,59,23,62,92 }, - { 1,7,63,53,108,121,94,44,103,100,14,10,129,47,32,26,24,25,148,42,135,22,0,61,83,8,39,104,5,64,115,34 }, - { 1,8,10,7,5,0,80,32,62,2,24,44,53,83,9,41,30,22,100,11,14,25,120,4,26,6,3,16,122,34,19,35 }, - { 74,4,36,48,33,91,39,79,22,16,65,5,131,38,24,71,27,52,0,105,51,18,88,104,3,31,10,37,72,19,41,130 }, - { 59,43,38,79,23,27,92,51,0,16,46,5,18,88,41,37,66,3,87,20,48,2,122,4,22,12,1,126,19,65,33,24 }, - { 12,28,1,27,0,16,2,46,65,60,21,3,5,18,6,19,48,14,4,7,79,88,86,29,22,72,93,40,23,8,17,41 }, - { 22,91,39,33,24,71,5,131,36,10,51,0,130,8,104,2,35,125,9,43,52,49,83,80,100,41,122,3,37,38,4,16 }, - { 12,0,1,2,5,3,4,8,7,27,18,38,10,6,16,46,9,20,41,23,126,79,22,14,19,99,88,54,37,48,62,35 }, - { 12,27,1,2,3,0,46,4,38,16,8,28,7,79,18,5,84,6,88,10,14,21,23,20,40,22,60,19,9,29,72,65 }, - { 1,14,7,55,95,29,8,94,30,56,10,108,77,116,152,64,32,48,63,42,143,148,16,25,137,65,11,0,115,9,19,72 }, - { 37,79,66,38,16,52,48,59,43,27,87,33,41,4,23,51,3,5,88,18,92,46,73,122,22,71,20,0,65,19,2,120 }, - { 24,32,83,22,53,1,8,10,7,30,35,5,103,0,100,101,121,113,34,123,63,2,44,25,71,115,80,14,26,108,51,39 }, - { 97,45,111,58,85,139,0,90,47,7,120,106,142,30,50,132,41,62,84,1,119,114,14,56,117,8,38,29,2,64,116,5 }, - { 12,28,16,18,1,60,6,14,2,21,0,86,126,19,48,93,7,27,17,29,5,65,54,38,72,79,84,88,119,145,8,111 }, - { 118,47,64,116,57,85,7,14,50,1,42,0,45,68,86,69,2,111,134,28,90,55,16,29,56,48,84,144,60,30,112,41 }, - { 12,1,2,0,7,6,28,5,3,4,8,14,60,21,18,40,17,86,10,9,16,29,19,93,126,79,38,84,72,27,111,119 }, - { 11,8,49,130,10,125,9,124,100,114,131,30,58,104,32,39,24,113,36,105,0,41,22,120,5,53,111,38,142,44,83,35 }, - { 50,70,47,118,85,57,106,0,45,7,64,90,81,14,2,134,28,62,86,55,69,1,78,119,68,56,18,67,16,60,29,21 }, - { 43,37,33,87,51,41,66,5,122,38,22,59,92,0,23,91,27,16,71,79,18,52,120,4,3,24,46,20,73,39,62,36 }, - { 79,48,4,16,27,88,43,33,18,38,65,37,46,3,19,51,52,22,66,87,74,5,41,91,23,59,0,71,122,72,20,92 }, - { 32,100,10,8,30,104,24,44,39,113,83,103,1,7,22,53,115,63,135,121,26,35,34,5,0,108,137,90,91,45,2,130 }, - { 0,1,2,5,16,12,6,7,14,3,19,18,29,20,4,21,40,8,17,35,23,48,126,22,25,56,26,10,98,27,38,65 }, - { 143,67,56,146,1,7,133,55,64,141,134,69,6,47,14,29,84,21,111,147,57,16,95,72,118,132,50,0,2,18,119,42 }, - { 1,7,67,14,133,111,8,84,0,21,2,47,64,132,55,10,95,147,119,42,16,5,72,56,4,3,6,29,9,25,18,30 }, - { 68,57,69,112,144,86,102,2,134,55,0,70,118,64,75,47,14,28,93,143,67,7,50,149,1,21,29,56,119,95,60,78 }, - { 58,97,114,30,124,45,11,139,8,90,0,142,7,10,41,113,84,62,49,111,85,1,9,5,137,120,32,14,2,117,47,38 }, - { 23,66,18,79,38,20,43,27,16,88,46,59,126,37,87,12,73,92,3,5,48,0,19,54,2,51,28,1,41,65,122,22 }, - { 0,12,2,27,5,40,46,38,1,41,3,79,88,23,99,4,20,62,22,54,92,18,8,37,16,35,10,7,19,120,144,24 }, - { 1,14,25,26,0,7,44,34,129,42,24,5,135,22,19,148,6,96,83,2,29,16,63,35,101,64,140,136,116,110,3,10 }, - { 12,1,2,27,3,4,38,5,7,8,18,16,46,6,0,40,41,10,79,23,88,9,20,22,14,19,37,92,48,126,28,21 }, - { 7,1,10,32,108,103,94,47,8,53,25,14,34,115,100,129,121,130,148,42,64,116,63,26,44,0,24,30,113,4,104,22 }, - { 47,134,7,14,55,69,64,95,1,29,85,118,56,116,45,57,102,143,50,90,42,30,16,94,0,8,67,75,133,2,18,48 }, - { 12,1,2,0,7,6,28,8,14,5,3,4,40,21,17,18,60,86,16,93,126,10,9,29,99,38,119,25,19,54,27,84 }, - { 59,16,27,18,23,88,79,37,46,66,38,20,73,126,3,43,48,87,92,51,41,12,19,5,52,107,65,0,151,122,54,2 }, - { 1,21,147,7,119,14,76,132,55,0,86,145,2,6,69,67,16,143,111,138,17,28,29,60,18,93,8,19,40,56,84,5 }, - { 144,86,112,2,68,102,69,0,149,93,75,28,57,55,145,60,21,67,99,134,143,40,146,119,82,110,62,6,29,26,78,14 }, - { 102,57,55,69,143,75,146,67,56,68,134,2,29,141,0,21,6,14,133,118,64,1,7,95,47,84,111,28,147,82,72,119 }, - { 0,70,57,119,50,145,2,86,28,118,69,78,149,47,60,68,67,55,93,81,134,21,14,62,64,7,5,1,132,85,41,16 }, - { 51,5,43,71,122,87,41,37,91,39,0,22,33,36,38,24,66,120,62,2,80,16,92,10,59,4,27,23,35,79,8,3 }, - { 12,1,2,0,7,6,28,5,8,14,3,21,40,4,60,17,86,18,16,93,10,9,126,119,99,29,19,41,38,27,25,92 }, - { 27,18,46,126,23,16,88,79,20,151,59,73,48,38,0,54,12,2,37,1,19,5,28,60,66,41,3,109,86,65,40,6 }, - { 48,79,4,33,16,74,65,38,88,27,91,52,18,36,22,19,46,0,37,3,51,5,71,39,72,43,24,41,92,87,2,10 }, - { 86,2,144,93,28,112,141,6,102,21,99,60,75,0,68,82,69,146,67,149,55,40,145,76,111,147,56,119,110,143,26,132 }, - { 6,138,2,99,86,17,40,93,28,21,145,141,0,60,119,147,128,76,67,54,1,12,5,27,144,14,38,98,146,41,29,19 }, - { 1,8,0,10,2,29,7,5,3,56,4,25,14,152,63,32,65,72,96,42,34,108,48,9,26,16,84,103,67,148,22,129 }, - { 149,145,0,86,2,28,93,144,62,60,119,101,21,41,5,35,78,99,26,40,12,68,57,67,110,120,69,18,55,76,132,70 }, - { 12,28,16,1,48,19,6,60,2,14,18,21,0,27,46,65,86,29,5,7,72,93,40,3,17,84,56,88,126,4,38,8 }, - { 1,8,5,10,7,24,2,62,0,41,22,122,120,9,4,3,32,87,11,37,38,83,100,44,25,104,16,26,39,80,14,6 }, - { 0,119,62,86,145,149,28,132,93,2,120,67,60,41,35,5,144,21,123,38,111,81,84,56,12,44,24,50,92,55,40,22 }, - { 2,93,99,28,40,144,60,0,86,150,76,21,149,98,6,25,1,61,82,26,12,5,54,141,7,18,145,16,27,138,110,38 }, - { 24,8,10,22,32,35,100,5,1,53,0,7,71,80,30,123,83,104,51,11,2,39,44,113,9,62,25,103,34,101,43,41 }, - { 12,1,2,0,7,6,28,5,40,60,8,16,3,18,14,4,86,21,17,93,41,10,9,99,27,119,38,19,126,22,48,145 }, - { 45,47,50,7,85,90,97,1,64,139,116,118,30,58,14,106,70,111,0,57,94,42,137,142,29,120,8,56,18,134,84,41 }, - { 12,0,2,5,27,38,1,46,41,40,79,144,3,22,88,23,28,60,99,62,6,24,26,7,4,16,10,35,37,18,14,20 }, - { 37,38,59,92,0,5,23,51,79,41,27,22,2,3,87,16,46,4,1,43,20,33,18,88,24,71,8,10,48,19,126,122 }, - { 12,28,16,60,1,18,6,21,19,14,48,0,2,86,93,5,46,29,17,27,65,7,3,72,38,126,119,40,84,37,56,4 }, - { 0,2,5,1,16,6,27,28,18,38,60,7,14,21,46,40,86,41,19,48,93,8,3,79,22,4,10,37,62,23,24,111 }, - { 85,7,90,30,47,139,45,50,94,58,137,1,8,64,14,116,118,115,113,11,124,108,0,10,97,57,32,70,42,106,29,114 }, - { 33,36,22,71,51,5,91,39,0,52,43,24,131,74,16,37,38,122,41,3,87,48,4,104,35,80,10,2,105,62,27,18 }, - { 12,1,27,2,0,16,3,28,46,18,4,6,5,72,21,79,38,7,14,60,88,8,65,19,48,29,23,40,22,20,86,126 }, - { 0,12,2,27,5,38,46,41,1,40,79,3,88,23,22,99,20,37,62,4,18,6,16,35,60,28,24,7,92,8,14,10 }, - { 7,47,1,30,137,8,116,94,90,64,14,115,108,118,57,10,148,113,42,85,32,11,63,50,103,45,124,134,55,9,69,34 }, - { 55,7,1,29,56,143,64,47,67,133,14,146,95,72,84,8,116,111,6,134,141,21,65,0,69,30,16,45,85,42,50,10 }, - { 14,1,42,8,10,29,108,63,55,148,95,32,7,19,25,115,103,34,56,129,77,0,16,152,94,30,113,26,2,5,48,4 }, - { 111,120,142,97,58,0,41,45,62,132,114,84,139,30,5,8,38,2,7,85,119,90,117,1,124,11,56,47,28,27,35,72 }, - { 1,0,14,2,6,5,16,19,7,29,42,18,3,25,12,35,21,8,26,17,40,4,20,48,109,99,22,96,55,101,10,61 }, - { 12,0,1,5,3,2,4,7,27,8,38,6,40,18,16,10,20,46,9,41,23,22,79,14,62,19,37,126,88,11,92,48 }, - { 10,8,104,39,24,32,22,83,44,100,30,130,53,91,113,5,11,1,35,33,7,49,0,2,103,71,36,124,9,80,131,34 }, - { 1,7,0,14,8,34,5,25,35,26,6,63,10,123,2,16,103,19,44,32,135,121,108,80,62,30,115,94,149,144,53,18 }, - { 75,68,146,141,102,67,2,21,6,57,69,143,0,55,82,86,28,144,147,29,93,112,56,119,133,14,76,60,84,134,111,145 }, - { 10,32,115,7,8,53,1,108,30,113,94,137,100,63,90,34,130,103,121,47,44,25,104,39,24,26,85,14,49,36,22,131 }, - { 39,24,10,22,8,130,91,104,83,49,5,33,100,11,0,35,32,131,71,36,9,44,53,2,80,51,30,1,41,7,43,62 }, - { 38,36,65,105,27,72,31,79,41,131,5,48,125,39,0,16,92,46,22,13,18,84,24,37,88,2,33,74,91,71,130,49 }, - { 0,106,62,50,45,119,85,81,132,28,2,86,41,47,38,60,35,117,5,29,7,30,145,90,55,70,14,111,18,67,93,56 }, - { 0,2,5,1,3,25,19,26,4,34,29,10,22,16,8,7,24,14,48,65,53,18,6,77,44,56,72,61,121,21,136,40 }, - { 7,1,94,8,47,115,10,32,113,103,30,108,137,63,14,64,116,148,129,42,90,25,34,118,53,57,11,49,85,9,96,50 }, - { 14,0,1,26,19,5,42,2,25,24,29,22,6,44,61,16,7,96,136,3,140,34,35,55,135,18,48,77,83,4,8,10 }, - { 1,7,14,0,25,6,34,5,26,16,63,2,19,8,35,101,108,29,94,10,18,42,123,144,129,47,61,21,3,62,149,4 }, - { 12,0,2,1,28,5,6,120,7,60,40,16,18,86,27,14,21,93,8,62,41,38,3,17,4,119,99,48,19,126,10,9 }, - { 86,144,93,2,28,149,0,60,99,112,110,145,40,21,102,26,75,62,69,1,12,101,119,25,76,67,7,68,55,5,6,14 }, - { 8,30,10,32,113,49,115,137,124,103,45,90,7,139,11,1,58,53,130,94,108,100,9,63,85,125,34,47,0,24,44,104 }, - { 120,142,111,41,58,114,97,0,11,62,84,124,5,30,8,38,132,127,27,139,92,10,72,45,49,9,28,2,29,56,16,1 }, - { 8,113,30,137,7,32,10,90,94,115,1,103,108,63,47,85,49,53,11,45,34,50,14,25,9,124,100,130,139,121,42,26 }, - { 64,7,14,47,134,55,1,42,95,69,116,90,94,30,8,29,56,137,45,108,85,10,57,16,102,143,118,19,63,32,11,50 }, - { 62,132,0,119,120,41,111,86,35,28,5,84,56,38,2,93,145,60,67,12,92,27,29,72,55,117,21,24,133,149,22,45 }, - { 57,68,69,118,134,64,50,47,55,14,7,2,102,144,0,112,70,86,85,1,95,29,116,143,42,75,16,56,28,45,21,48 }, - { 0,12,2,1,5,28,6,40,60,27,7,38,16,14,86,18,93,41,62,46,99,35,8,23,3,17,22,21,10,19,79,20 }, - { 12,1,2,27,16,3,38,111,4,0,18,5,7,46,40,8,79,6,14,28,88,10,48,41,19,84,21,9,22,23,20,72 }, - { 53,103,32,7,1,100,22,63,71,44,10,115,108,24,92,104,26,30,122,94,8,39,83,34,137,135,90,91,121,5,87,47 }, - { 87,37,41,0,22,38,2,92,1,24,4,8,3,59,10,5,39,23,71,79,122,27,16,46,33,7,91,20,18,51,9,120 }, - { 1,7,8,10,0,5,35,32,53,44,14,30,2,80,25,34,6,62,26,103,16,19,63,9,149,24,121,41,22,11,113,83 }, - { 11,58,8,30,124,49,10,113,9,114,139,45,97,32,7,137,90,1,0,130,115,125,100,24,5,94,53,41,14,13,35,38 }, - { 125,105,9,36,131,49,8,130,39,11,10,5,22,38,41,104,0,31,13,24,27,16,2,72,65,91,48,32,84,18,100,74 }, - { 12,1,0,2,6,3,7,5,4,8,14,28,16,60,18,10,21,17,19,9,40,27,86,93,29,38,54,11,25,48,46,41 }, - { 84,41,38,72,92,29,111,5,65,120,79,0,27,56,48,14,132,16,119,22,86,88,46,28,62,12,1,2,93,18,24,127 }, - { 99,28,40,60,2,93,138,0,98,17,86,54,76,12,27,1,21,144,128,38,5,14,46,18,25,16,109,6,41,145,7,29 }, - { 1,63,10,32,148,14,103,34,42,7,8,108,116,53,64,96,25,121,26,94,140,0,29,19,55,24,100,136,5,4,44,115 }, - { 131,100,130,49,10,8,36,104,39,0,48,41,11,38,4,24,27,22,16,44,79,5,33,2,53,9,125,74,91,120,32,83 }, - { 36,39,131,74,4,91,22,33,125,104,130,48,10,24,16,5,49,8,100,105,79,0,9,65,71,2,18,83,31,11,19,44 }, - { 0,12,2,1,6,5,7,28,40,60,16,14,18,62,86,27,93,8,17,38,21,41,35,99,3,19,10,23,22,4,9,48 }, - { 1,7,67,14,21,147,111,55,132,119,0,8,2,76,64,16,47,84,6,18,86,95,145,10,42,29,133,5,56,134,17,72 }, - { 69,55,47,134,102,143,7,57,118,95,14,64,29,56,1,50,75,67,146,2,0,133,68,16,21,6,141,85,116,18,72,65 }, - { 1,44,7,24,83,63,34,103,22,121,53,32,25,35,0,115,108,5,14,8,10,101,94,30,2,123,110,26,137,47,90,19 }, - { 14,1,25,42,34,0,26,96,19,29,140,5,53,10,2,121,3,24,44,22,55,77,129,7,63,16,8,4,6,61,100,48 }, - { 30,90,7,8,137,94,85,1,47,113,115,108,45,139,124,11,10,32,50,58,103,14,63,64,9,116,49,42,25,148,0,53 }, - { 40,99,2,60,28,17,0,54,93,98,86,138,6,12,21,76,1,5,27,144,128,38,19,46,14,41,145,7,16,67,3,109 }, - { 45,58,30,139,90,7,85,137,97,8,124,47,1,11,106,114,50,94,0,113,10,115,14,32,9,64,108,41,49,29,62,116 }, - { 14,42,10,1,63,96,32,25,34,8,129,29,0,103,55,19,26,53,77,5,95,2,4,7,3,16,148,56,18,24,121,108 }, - { 21,2,75,86,6,76,144,28,119,99,93,147,141,67,102,145,60,132,146,128,0,82,40,138,55,111,143,17,133,112,69,14 }, - { 111,120,41,62,84,132,0,5,38,119,56,92,72,142,27,28,29,35,58,80,2,86,65,79,12,14,1,24,145,16,21,48 }, - { 146,67,141,69,133,21,6,143,57,55,111,147,56,1,14,132,7,2,134,102,0,119,29,84,76,64,86,72,28,68,47,75 }, - { 12,1,0,5,27,3,7,4,38,8,6,41,16,40,46,10,18,79,2,9,23,86,20,22,62,14,37,88,92,19,24,11 }, - { 0,12,2,1,27,5,38,28,60,6,40,7,16,46,18,14,41,99,93,62,3,79,86,23,149,8,22,35,88,17,19,10 }, - { 141,6,21,67,147,102,146,2,76,119,132,69,55,111,86,75,28,133,143,0,1,145,14,128,56,99,17,60,29,93,84,68 }, - { 21,76,1,119,86,145,2,0,14,7,6,138,146,55,17,28,132,93,67,40,60,143,29,147,111,16,69,141,5,56,19,133 }, - { 1,8,108,14,7,116,64,42,10,63,94,32,115,103,113,96,30,34,55,47,95,148,29,140,129,25,134,53,69,26,19,11 }, - { 12,1,3,5,4,2,0,7,8,38,27,16,18,6,10,20,41,40,79,46,9,23,22,88,92,37,14,24,62,19,48,99 }, - { 1,14,7,0,6,25,5,16,19,2,42,26,29,35,61,8,18,129,101,21,3,110,34,148,96,10,17,4,22,40,12,20 }, - { 0,2,5,1,3,19,22,26,16,24,29,7,14,6,4,25,18,44,8,48,12,61,20,21,10,35,65,56,23,40,17,107 }, - { 1,7,8,29,56,0,10,14,2,42,72,5,4,65,3,30,84,94,67,9,25,133,111,11,32,108,16,63,21,96,26,48 } - }; - - static inline uint32_t iabs(int32_t i) { return (i < 0) ? static_cast(-i) : static_cast(i); } - static inline uint64_t iabs(int64_t i) { return (i < 0) ? static_cast(-i) : static_cast(i); } - - static inline uint8_t to_5(uint32_t v) { v = v * 31 + 128; return (uint8_t)((v + (v >> 8)) >> 8); } - static inline uint8_t to_6(uint32_t v) { v = v * 63 + 128; return (uint8_t)((v + (v >> 8)) >> 8); } - - template inline S maximum(S a, S b) { return (a > b) ? a : b; } - template inline S maximum(S a, S b, S c) { return maximum(maximum(a, b), c); } - template inline S maximum(S a, S b, S c, S d) { return maximum(maximum(maximum(a, b), c), d); } - - template inline S minimum(S a, S b) { return (a < b) ? a : b; } - template inline S minimum(S a, S b, S c) { return minimum(minimum(a, b), c); } - template inline S minimum(S a, S b, S c, S d) { return minimum(minimum(minimum(a, b), c), d); } - - template inline T square(T a) { return a * a; } - - static inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } - static inline uint8_t clamp255(int32_t i) { return (uint8_t)((i & 0xFFFFFF00U) ? (~(i >> 31)) : i); } - - template inline S clamp(S value, S low, S high) { return (value < low) ? low : ((value > high) ? high : value); } - static inline int32_t clampi(int32_t value, int32_t low, int32_t high) { if (value < low) value = low; else if (value > high) value = high; return value; } - - static inline int squarei(int a) { return a * a; } - static inline int absi(int a) { return (a < 0) ? -a : a; } - - template inline F lerp(F a, F b, F s) { return a + (b - a) * s; } - - enum class eNoClamp { cNoClamp }; - - struct color32 - { - union - { - struct - { - uint8_t r; - uint8_t g; - uint8_t b; - uint8_t a; - }; - - uint8_t c[4]; - - uint32_t m; - }; - - color32() { } - - color32(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { set(vr, vg, vb, va); } - color32(eNoClamp unused, uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { (void)unused; set_noclamp_rgba(vr, vg, vb, va); } - - void set(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { c[0] = static_cast(vr); c[1] = static_cast(vg); c[2] = static_cast(vb); c[3] = static_cast(va); } - - void set_noclamp_rgb(uint32_t vr, uint32_t vg, uint32_t vb) { c[0] = static_cast(vr); c[1] = static_cast(vg); c[2] = static_cast(vb); } - void set_noclamp_rgba(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { set(vr, vg, vb, va); } - - void set_clamped(int vr, int vg, int vb, int va) { c[0] = clamp255(vr); c[1] = clamp255(vg); c[2] = clamp255(vb); c[3] = clamp255(va); } - - uint8_t operator[] (uint32_t idx) const { assert(idx < 4); return c[idx]; } - uint8_t &operator[] (uint32_t idx) { assert(idx < 4); return c[idx]; } - - bool operator== (const color32&rhs) const { return m == rhs.m; } - - void set_rgb(const color32& other) { c[0] = static_cast(other.c[0]); c[1] = static_cast(other.c[1]); c[2] = static_cast(other.c[2]); } - - static color32 comp_min(const color32& a, const color32& b) { return color32(eNoClamp::cNoClamp, std::min(a[0], b[0]), std::min(a[1], b[1]), std::min(a[2], b[2]), std::min(a[3], b[3])); } - static color32 comp_max(const color32& a, const color32& b) { return color32(eNoClamp::cNoClamp, std::max(a[0], b[0]), std::max(a[1], b[1]), std::max(a[2], b[2]), std::max(a[3], b[3])); } - }; - - enum dxt_constants - { - cDXT1SelectorBits = 2U, cDXT1SelectorValues = 1U << cDXT1SelectorBits, cDXT1SelectorMask = cDXT1SelectorValues - 1U, - cDXT5SelectorBits = 3U, cDXT5SelectorValues = 1U << cDXT5SelectorBits, cDXT5SelectorMask = cDXT5SelectorValues - 1U, - }; - - struct bc1_block - { - enum { cTotalEndpointBytes = 2, cTotalSelectorBytes = 4 }; - - uint8_t m_low_color[cTotalEndpointBytes]; - uint8_t m_high_color[cTotalEndpointBytes]; - uint8_t m_selectors[cTotalSelectorBytes]; - - inline uint32_t get_low_color() const { return m_low_color[0] | (m_low_color[1] << 8U); } - inline uint32_t get_high_color() const { return m_high_color[0] | (m_high_color[1] << 8U); } - inline bool is_3color() const { return get_low_color() <= get_high_color(); } - inline void set_low_color(uint16_t c) { m_low_color[0] = static_cast(c & 0xFF); m_low_color[1] = static_cast((c >> 8) & 0xFF); } - inline void set_high_color(uint16_t c) { m_high_color[0] = static_cast(c & 0xFF); m_high_color[1] = static_cast((c >> 8) & 0xFF); } - inline uint32_t get_selector(uint32_t x, uint32_t y) const { assert((x < 4U) && (y < 4U)); return (m_selectors[y] >> (x * cDXT1SelectorBits)) & cDXT1SelectorMask; } - inline void set_selector(uint32_t x, uint32_t y, uint32_t val) { assert((x < 4U) && (y < 4U) && (val < 4U)); m_selectors[y] &= (~(cDXT1SelectorMask << (x * cDXT1SelectorBits))); m_selectors[y] |= (val << (x * cDXT1SelectorBits)); } - - static inline uint16_t pack_color(const color32& color, bool scaled, uint32_t bias = 127U) - { - uint32_t r = color.r, g = color.g, b = color.b; - if (scaled) - { - r = (r * 31U + bias) / 255U; - g = (g * 63U + bias) / 255U; - b = (b * 31U + bias) / 255U; - } - return static_cast(minimum(b, 31U) | (minimum(g, 63U) << 5U) | (minimum(r, 31U) << 11U)); - } - - static inline uint16_t pack_unscaled_color(uint32_t r, uint32_t g, uint32_t b) { return static_cast(b | (g << 5U) | (r << 11U)); } - - static inline void unpack_color(uint32_t c, uint32_t& r, uint32_t& g, uint32_t& b) - { - r = (c >> 11) & 31; - g = (c >> 5) & 63; - b = c & 31; - - r = (r << 3) | (r >> 2); - g = (g << 2) | (g >> 4); - b = (b << 3) | (b >> 2); - } - - static inline void unpack_color_unscaled(uint32_t c, uint32_t& r, uint32_t& g, uint32_t& b) - { - r = (c >> 11) & 31; - g = (c >> 5) & 63; - b = c & 31; - } - }; - - static const uint32_t TOTAL_ORDER_4_0_16 = 15; - static const uint32_t TOTAL_ORDER_4_1_16 = 700; - static const uint32_t TOTAL_ORDER_4_2_16 = 753; - static const uint32_t TOTAL_ORDER_4_3_16 = 515; - static uint16_t g_total_ordering4_hash[4096]; - static float g_selector_factors4[NUM_UNIQUE_TOTAL_ORDERINGS4][3]; - - static const uint32_t TOTAL_ORDER_3_0_16 = 12; - static const uint32_t TOTAL_ORDER_3_1_16 = 15; - static const uint32_t TOTAL_ORDER_3_2_16 = 89; - static uint16_t g_total_ordering3_hash[256]; - static float g_selector_factors3[NUM_UNIQUE_TOTAL_ORDERINGS3][3]; - - struct hist4 - { - uint8_t m_hist[4]; - - hist4() - { - memset(m_hist, 0, sizeof(m_hist)); - } - - hist4(uint32_t i, uint32_t j, uint32_t k, uint32_t l) - { - m_hist[0] = (uint8_t)i; - m_hist[1] = (uint8_t)j; - m_hist[2] = (uint8_t)k; - m_hist[3] = (uint8_t)l; - } - - inline bool operator== (const hist4 &h) const - { - if (m_hist[0] != h.m_hist[0]) return false; - if (m_hist[1] != h.m_hist[1]) return false; - if (m_hist[2] != h.m_hist[2]) return false; - if (m_hist[3] != h.m_hist[3]) return false; - return true; - } - - inline bool any_16() const - { - return (m_hist[0] == 16) || (m_hist[1] == 16) || (m_hist[2] == 16) || (m_hist[3] == 16); - } - - inline uint32_t lookup_total_ordering_index() const - { - if (m_hist[0] == 16) - return TOTAL_ORDER_4_0_16; - else if (m_hist[1] == 16) - return TOTAL_ORDER_4_1_16; - else if (m_hist[2] == 16) - return TOTAL_ORDER_4_2_16; - else if (m_hist[3] == 16) - return TOTAL_ORDER_4_3_16; - - // Must sum to 16, so m_hist[3] isn't needed. - return g_total_ordering4_hash[m_hist[0] | (m_hist[1] << 4) | (m_hist[2] << 8)]; - } - }; - - struct hist3 - { - uint8_t m_hist[3]; - - hist3() - { - memset(m_hist, 0, sizeof(m_hist)); - } - - hist3(uint32_t i, uint32_t j, uint32_t k) - { - m_hist[0] = (uint8_t)i; - m_hist[1] = (uint8_t)j; - m_hist[2] = (uint8_t)k; - } - - inline bool operator== (const hist3 &h) const - { - if (m_hist[0] != h.m_hist[0]) return false; - if (m_hist[1] != h.m_hist[1]) return false; - if (m_hist[2] != h.m_hist[2]) return false; - return true; - } - - inline bool any_16() const - { - return (m_hist[0] == 16) || (m_hist[1] == 16) || (m_hist[2] == 16); - } - - inline uint32_t lookup_total_ordering_index() const - { - if (m_hist[0] == 16) - return TOTAL_ORDER_3_0_16; - else if (m_hist[1] == 16) - return TOTAL_ORDER_3_1_16; - else if (m_hist[2] == 16) - return TOTAL_ORDER_3_2_16; - - // Must sum to 16, so m_hist[2] isn't needed. - return g_total_ordering3_hash[m_hist[0] | (m_hist[1] << 4)]; - } - }; - - struct bc1_match_entry - { - uint8_t m_hi; - uint8_t m_lo; - uint8_t m_e; - }; - - static bc1_approx_mode g_bc1_approx_mode; - static bc1_match_entry g_bc1_match5_equals_1[256], g_bc1_match6_equals_1[256]; - static bc1_match_entry g_bc1_match5_half[256], g_bc1_match6_half[256]; - - static inline int scale_5_to_8(int v) { return (v << 3) | (v >> 2); } - static inline int scale_6_to_8(int v) { return (v << 2) | (v >> 4); } - - // v0, v1 = unexpanded DXT1 endpoint values (5/6-bits) - // c0, c1 = expanded DXT1 endpoint values (8-bits) - static inline int interp_5_6_ideal(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 * 2 + c1) / 3; } - static inline int interp_5_6_ideal_round(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 * 2 + c1 + 1) / 3; } - static inline int interp_half_5_6_ideal(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 + c1) / 2; } - - static inline int interp_5_nv(int v0, int v1) { assert(v0 < 32 && v1 < 32); return ((2 * v0 + v1) * 22) / 8; } - static inline int interp_6_nv(int c0, int c1) { assert(c0 < 256 && c1 < 256); const int gdiff = c1 - c0; return (256 * c0 + (gdiff / 4) + 128 + gdiff * 80) / 256; } - - static inline int interp_half_5_nv(int v0, int v1) { assert(v0 < 32 && v1 < 32); return ((v0 + v1) * 33) / 8; } - static inline int interp_half_6_nv(int c0, int c1) { assert(c0 < 256 && c1 < 256); const int gdiff = c1 - c0; return (256 * c0 + gdiff/4 + 128 + gdiff * 128) / 256; } - - static inline int interp_5_6_amd(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 * 43 + c1 * 21 + 32) >> 6; } - static inline int interp_half_5_6_amd(int c0, int c1) { assert(c0 < 256 && c1 < 256); return (c0 + c1 + 1) >> 1; } - - static inline int interp_5(int v0, int v1, int c0, int c1, bc1_approx_mode mode) - { - assert(scale_5_to_8(v0) == c0 && scale_5_to_8(v1) == c1); - switch (mode) - { - case bc1_approx_mode::cBC1NVidia: return interp_5_nv(v0, v1); - case bc1_approx_mode::cBC1AMD: return interp_5_6_amd(c0, c1); - default: - case bc1_approx_mode::cBC1Ideal: return interp_5_6_ideal(c0, c1); - case bc1_approx_mode::cBC1IdealRound4: return interp_5_6_ideal_round(c0, c1); - } - } - - static inline int interp_6(int v0, int v1, int c0, int c1, bc1_approx_mode mode) - { - (void)v0; (void)v1; - assert(scale_6_to_8(v0) == c0 && scale_6_to_8(v1) == c1); - switch (mode) - { - case bc1_approx_mode::cBC1NVidia: return interp_6_nv(c0, c1); - case bc1_approx_mode::cBC1AMD: return interp_5_6_amd(c0, c1); - default: - case bc1_approx_mode::cBC1Ideal: return interp_5_6_ideal(c0, c1); - case bc1_approx_mode::cBC1IdealRound4: return interp_5_6_ideal_round(c0, c1); - } - } - - static inline int interp_half_5(int v0, int v1, int c0, int c1, bc1_approx_mode mode) - { - assert(scale_5_to_8(v0) == c0 && scale_5_to_8(v1) == c1); - switch (mode) - { - case bc1_approx_mode::cBC1NVidia: return interp_half_5_nv(v0, v1); - case bc1_approx_mode::cBC1AMD: return interp_half_5_6_amd(c0, c1); - case bc1_approx_mode::cBC1Ideal: - case bc1_approx_mode::cBC1IdealRound4: - default: - return interp_half_5_6_ideal(c0, c1); - } - } - - static inline int interp_half_6(int v0, int v1, int c0, int c1, bc1_approx_mode mode) - { - (void)v0; (void)v1; - assert(scale_6_to_8(v0) == c0 && scale_6_to_8(v1) == c1); - switch (mode) - { - case bc1_approx_mode::cBC1NVidia: return interp_half_6_nv(c0, c1); - case bc1_approx_mode::cBC1AMD: return interp_half_5_6_amd(c0, c1); - case bc1_approx_mode::cBC1Ideal: - case bc1_approx_mode::cBC1IdealRound4: - default: - return interp_half_5_6_ideal(c0, c1); - } - } - - static void prepare_bc1_single_color_table_half(bc1_match_entry* pTable, const uint8_t* pExpand, int size, bc1_approx_mode mode) - { - for (int i = 0; i < 256; i++) - { - int lowest_e = 256; - for (int lo = 0; lo < size; lo++) - { - const int lo_e = pExpand[lo]; - - for (int hi = 0; hi < size; hi++) - { - const int hi_e = pExpand[hi]; - - const int v = (size == 32) ? interp_half_5(hi, lo, hi_e, lo_e, mode) : interp_half_6(hi, lo, hi_e, lo_e, mode); - - int e = iabs(v - i); - - // We only need to factor in 3% error in BC1 ideal mode. - if ((mode == bc1_approx_mode::cBC1Ideal) || (mode == bc1_approx_mode::cBC1IdealRound4)) - e += (iabs(hi_e - lo_e) * 3) / 100; - - // Favor equal endpoints, for lower error on actual GPU's which approximate the interpolation. - if ((e < lowest_e) || ((e == lowest_e) && (lo == hi))) - { - pTable[i].m_hi = static_cast(hi); - pTable[i].m_lo = static_cast(lo); - - assert(e <= UINT8_MAX); - pTable[i].m_e = static_cast(e); - - lowest_e = e; - } - - } // hi - } // lo - } - } - - static void prepare_bc1_single_color_table(bc1_match_entry* pTable, const uint8_t* pExpand, int size, bc1_approx_mode mode) - { - for (int i = 0; i < 256; i++) - { - int lowest_e = 256; - for (int lo = 0; lo < size; lo++) - { - const int lo_e = pExpand[lo]; - - for (int hi = 0; hi < size; hi++) - { - const int hi_e = pExpand[hi]; - - const int v = (size == 32) ? interp_5(hi, lo, hi_e, lo_e, mode) : interp_6(hi, lo, hi_e, lo_e, mode); - - int e = iabs(v - i); - - if ((mode == bc1_approx_mode::cBC1Ideal) || (mode == bc1_approx_mode::cBC1IdealRound4)) - e += (iabs(hi_e - lo_e) * 3) / 100; - - // Favor equal endpoints, for lower error on actual GPU's which approximate the interpolation. - if ((e < lowest_e) || ((e == lowest_e) && (lo == hi))) - { - pTable[i].m_hi = static_cast(hi); - pTable[i].m_lo = static_cast(lo); - - assert(e <= UINT8_MAX); - pTable[i].m_e = static_cast(e); - - lowest_e = e; - } - - } // hi - } // lo - } - } - - // This table is: 9 * (w * w), 9 * ((1.0f - w) * w), 9 * ((1.0f - w) * (1.0f - w)) - // where w is [0,1/3,2/3,1]. 9 is the perfect multiplier. - static const uint32_t g_weight_vals4[4] = { 0x000009, 0x010204, 0x040201, 0x090000 }; - - // multiplier is 4 for 3-color - static const uint32_t g_weight_vals3[3] = { 0x000004, 0x040000, 0x010101 }; - - static inline void compute_selector_factors4(const hist4 &h, float &iz00, float &iz10, float &iz11) - { - uint32_t weight_accum = 0; - for (uint32_t sel = 0; sel < 4; sel++) - weight_accum += g_weight_vals4[sel] * h.m_hist[sel]; - - float z00 = (float)((weight_accum >> 16) & 0xFF); - float z10 = (float)((weight_accum >> 8) & 0xFF); - float z11 = (float)(weight_accum & 0xFF); - float z01 = z10; - - float det = z00 * z11 - z01 * z10; - if (fabs(det) < 1e-8f) - det = 0.0f; - else - det = (3.0f / 255.0f) / det; - - iz00 = z11 * det; - iz10 = -z10 * det; - iz11 = z00 * det; - } - - static inline void compute_selector_factors3(const hist3 &h, float &iz00, float &iz10, float &iz11) - { - uint32_t weight_accum = 0; - for (uint32_t sel = 0; sel < 3; sel++) - weight_accum += g_weight_vals3[sel] * h.m_hist[sel]; - - float z00 = (float)((weight_accum >> 16) & 0xFF); - float z10 = (float)((weight_accum >> 8) & 0xFF); - float z11 = (float)(weight_accum & 0xFF); - float z01 = z10; - - float det = z00 * z11 - z01 * z10; - if (fabs(det) < 1e-8f) - det = 0.0f; - else - det = (2.0f / 255.0f) / det; - - iz00 = z11 * det; - iz10 = -z10 * det; - iz11 = z00 * det; - } - - static bool g_initialized; - - void init(bc1_approx_mode mode) - { - g_bc1_approx_mode = mode; - - uint8_t bc1_expand5[32]; - for (int i = 0; i < 32; i++) - bc1_expand5[i] = static_cast((i << 3) | (i >> 2)); - prepare_bc1_single_color_table(g_bc1_match5_equals_1, bc1_expand5, 32, mode); - prepare_bc1_single_color_table_half(g_bc1_match5_half, bc1_expand5, 32, mode); - - uint8_t bc1_expand6[64]; - for (int i = 0; i < 64; i++) - bc1_expand6[i] = static_cast((i << 2) | (i >> 4)); - prepare_bc1_single_color_table(g_bc1_match6_equals_1, bc1_expand6, 64, mode); - prepare_bc1_single_color_table_half(g_bc1_match6_half, bc1_expand6, 64, mode); - - for (uint32_t i = 0; i < NUM_UNIQUE_TOTAL_ORDERINGS4; i++) - { - hist4 h; - h.m_hist[0] = (uint8_t)g_unique_total_orders4[i][0]; - h.m_hist[1] = (uint8_t)g_unique_total_orders4[i][1]; - h.m_hist[2] = (uint8_t)g_unique_total_orders4[i][2]; - h.m_hist[3] = (uint8_t)g_unique_total_orders4[i][3]; - - if (!h.any_16()) - { - const uint32_t index = h.m_hist[0] | (h.m_hist[1] << 4) | (h.m_hist[2] << 8); - assert(index < 4096); - g_total_ordering4_hash[index] = (uint16_t)i; - } - - compute_selector_factors4(h, g_selector_factors4[i][0], g_selector_factors4[i][1], g_selector_factors4[i][2]); - } - - for (uint32_t i = 0; i < NUM_UNIQUE_TOTAL_ORDERINGS3; i++) - { - hist3 h; - h.m_hist[0] = (uint8_t)g_unique_total_orders3[i][0]; - h.m_hist[1] = (uint8_t)g_unique_total_orders3[i][1]; - h.m_hist[2] = (uint8_t)g_unique_total_orders3[i][2]; - - if (!h.any_16()) - { - const uint32_t index = h.m_hist[0] | (h.m_hist[1] << 4); - assert(index < 256); - g_total_ordering3_hash[index] = (uint16_t)i; - } - - compute_selector_factors3(h, g_selector_factors3[i][0], g_selector_factors3[i][1], g_selector_factors3[i][2]); - } - - g_initialized = true; - } - - void encode_bc1_solid_block(void* pDst, uint32_t fr, uint32_t fg, uint32_t fb, bool allow_3color) - { - bc1_block* pDst_block = static_cast(pDst); - - uint32_t mask = 0xAA; - int max16 = -1, min16 = 0; - - if (allow_3color) - { - const uint32_t err4 = g_bc1_match5_equals_1[fr].m_e + g_bc1_match6_equals_1[fg].m_e + g_bc1_match5_equals_1[fb].m_e; - const uint32_t err3 = g_bc1_match5_half[fr].m_e + g_bc1_match6_half[fg].m_e + g_bc1_match5_half[fb].m_e; - - if (err3 < err4) - { - max16 = (g_bc1_match5_half[fr].m_hi << 11) | (g_bc1_match6_half[fg].m_hi << 5) | g_bc1_match5_half[fb].m_hi; - min16 = (g_bc1_match5_half[fr].m_lo << 11) | (g_bc1_match6_half[fg].m_lo << 5) | g_bc1_match5_half[fb].m_lo; - - if (max16 > min16) - std::swap(max16, min16); - } - } - - if (max16 == -1) - { - max16 = (g_bc1_match5_equals_1[fr].m_hi << 11) | (g_bc1_match6_equals_1[fg].m_hi << 5) | g_bc1_match5_equals_1[fb].m_hi; - min16 = (g_bc1_match5_equals_1[fr].m_lo << 11) | (g_bc1_match6_equals_1[fg].m_lo << 5) | g_bc1_match5_equals_1[fb].m_lo; - - if (min16 == max16) - { - // Always forbid 3 color blocks - // This is to guarantee that BC3 blocks never use punchthrough alpha (3 color) mode, which isn't supported on some (all?) GPU's. - mask = 0; - - // Make l > h - if (min16 > 0) - min16--; - else - { - // l = h = 0 - assert(min16 == max16 && max16 == 0); - - max16 = 1; - min16 = 0; - mask = 0x55; - } - - assert(max16 > min16); - } - - if (max16 < min16) - { - std::swap(max16, min16); - mask ^= 0x55; - } - } - - pDst_block->set_low_color(static_cast(max16)); - pDst_block->set_high_color(static_cast(min16)); - pDst_block->m_selectors[0] = static_cast(mask); - pDst_block->m_selectors[1] = static_cast(mask); - pDst_block->m_selectors[2] = static_cast(mask); - pDst_block->m_selectors[3] = static_cast(mask); - } - - static const float g_midpoint5[32] = { .015686f, .047059f, .078431f, .111765f, .145098f, .176471f, .207843f, .241176f, .274510f, .305882f, .337255f, .370588f, .403922f, .435294f, .466667f, .5f, .533333f, .564706f, .596078f, .629412f, .662745f, .694118f, .725490f, .758824f, .792157f, .823529f, .854902f, .888235f, .921569f, .952941f, .984314f, 1e+37f }; - static const float g_midpoint6[64] = { .007843f, .023529f, .039216f, .054902f, .070588f, .086275f, .101961f, .117647f, .133333f, .149020f, .164706f, .180392f, .196078f, .211765f, .227451f, .245098f, .262745f, .278431f, .294118f, .309804f, .325490f, .341176f, .356863f, .372549f, .388235f, .403922f, .419608f, .435294f, .450980f, .466667f, .482353f, .500000f, .517647f, .533333f, .549020f, .564706f, .580392f, .596078f, .611765f, .627451f, .643137f, .658824f, .674510f, .690196f, .705882f, .721569f, .737255f, .754902f, .772549f, .788235f, .803922f, .819608f, .835294f, .850980f, .866667f, .882353f, .898039f, .913725f, .929412f, .945098f, .960784f, .976471f, .992157f, 1e+37f }; - - struct vec3F { float c[3]; }; - - static inline void compute_least_squares_endpoints4_rgb( - vec3F* pXl, vec3F* pXh, - int total_r, int total_g, int total_b, - float iz00, float iz10, float iz11, - uint32_t s, const uint32_t r_sum[17], const uint32_t g_sum[17], const uint32_t b_sum[17]) - { - const float iz01 = iz10; - - const uint32_t f1 = g_unique_total_orders4[s][0]; - const uint32_t f2 = g_unique_total_orders4[s][0] + g_unique_total_orders4[s][1]; - const uint32_t f3 = g_unique_total_orders4[s][0] + g_unique_total_orders4[s][1] + g_unique_total_orders4[s][2]; - uint32_t uq00_r = (r_sum[f2] - r_sum[f1]) + (r_sum[f3] - r_sum[f2]) * 2 + (r_sum[16] - r_sum[f3]) * 3; - uint32_t uq00_g = (g_sum[f2] - g_sum[f1]) + (g_sum[f3] - g_sum[f2]) * 2 + (g_sum[16] - g_sum[f3]) * 3; - uint32_t uq00_b = (b_sum[f2] - b_sum[f1]) + (b_sum[f3] - b_sum[f2]) * 2 + (b_sum[16] - b_sum[f3]) * 3; - - float q10_r = (float)(total_r * 3 - uq00_r); - float q10_g = (float)(total_g * 3 - uq00_g); - float q10_b = (float)(total_b * 3 - uq00_b); - - pXl->c[0] = iz00 * (float)uq00_r + iz01 * q10_r; - pXh->c[0] = iz10 * (float)uq00_r + iz11 * q10_r; - - pXl->c[1] = iz00 * (float)uq00_g + iz01 * q10_g; - pXh->c[1] = iz10 * (float)uq00_g + iz11 * q10_g; - - pXl->c[2] = iz00 * (float)uq00_b + iz01 * q10_b; - pXh->c[2] = iz10 * (float)uq00_b + iz11 * q10_b; - } - - static inline bool compute_least_squares_endpoints4_rgb(const color32* pColors, const uint8_t* pSelectors, vec3F* pXl, vec3F* pXh, int total_r, int total_g, int total_b) - { - uint32_t uq00_r = 0, uq00_g = 0, uq00_b = 0; - uint32_t weight_accum = 0; - for (uint32_t i = 0; i < 16; i++) - { - const uint8_t r = pColors[i].c[0], g = pColors[i].c[1], b = pColors[i].c[2]; - const uint8_t sel = pSelectors[i]; - - weight_accum += g_weight_vals4[sel]; - uq00_r += sel * r; - uq00_g += sel * g; - uq00_b += sel * b; - } - - int q10_r = total_r * 3 - uq00_r; - int q10_g = total_g * 3 - uq00_g; - int q10_b = total_b * 3 - uq00_b; - - float z00 = (float)((weight_accum >> 16) & 0xFF); - float z10 = (float)((weight_accum >> 8) & 0xFF); - float z11 = (float)(weight_accum & 0xFF); - float z01 = z10; - - float det = z00 * z11 - z01 * z10; - if (fabs(det) < 1e-8f) - return false; - - det = (3.0f / 255.0f) / det; - - float iz00, iz01, iz10, iz11; - iz00 = z11 * det; - iz01 = -z01 * det; - iz10 = -z10 * det; - iz11 = z00 * det; - - pXl->c[0] = iz00 * (float)uq00_r + iz01 * q10_r; - pXh->c[0] = iz10 * (float)uq00_r + iz11 * q10_r; - - pXl->c[1] = iz00 * (float)uq00_g + iz01 * q10_g; - pXh->c[1] = iz10 * (float)uq00_g + iz11 * q10_g; - - pXl->c[2] = iz00 * (float)uq00_b + iz01 * q10_b; - pXh->c[2] = iz10 * (float)uq00_b + iz11 * q10_b; - - return true; - } - - static inline void compute_least_squares_endpoints3_rgb( - vec3F* pXl, vec3F* pXh, - int total_r, int total_g, int total_b, - float iz00, float iz10, float iz11, - uint32_t s, const uint32_t r_sum[17], const uint32_t g_sum[17], const uint32_t b_sum[17]) - { - const float iz01 = iz10; - - // Compensates for BC1 3-color ordering, which is selector 0, 2, 1 - const uint32_t f1 = g_unique_total_orders3[s][0]; - const uint32_t f2 = g_unique_total_orders3[s][0] + g_unique_total_orders3[s][2]; - uint32_t uq00_r = (r_sum[16] - r_sum[f2]) * 2 + (r_sum[f2] - r_sum[f1]); - uint32_t uq00_g = (g_sum[16] - g_sum[f2]) * 2 + (g_sum[f2] - g_sum[f1]); - uint32_t uq00_b = (b_sum[16] - b_sum[f2]) * 2 + (b_sum[f2] - b_sum[f1]); - - float q10_r = (float)(total_r * 2 - uq00_r); - float q10_g = (float)(total_g * 2 - uq00_g); - float q10_b = (float)(total_b * 2 - uq00_b); - - pXl->c[0] = iz00 * (float)uq00_r + iz01 * q10_r; - pXh->c[0] = iz10 * (float)uq00_r + iz11 * q10_r; - - pXl->c[1] = iz00 * (float)uq00_g + iz01 * q10_g; - pXh->c[1] = iz10 * (float)uq00_g + iz11 * q10_g; - - pXl->c[2] = iz00 * (float)uq00_b + iz01 * q10_b; - pXh->c[2] = iz10 * (float)uq00_b + iz11 * q10_b; - } - - static inline bool compute_least_squares_endpoints3_rgb(bool use_black, const color32* pColors, const uint8_t* pSelectors, vec3F* pXl, vec3F* pXh) - { - int uq00_r = 0, uq00_g = 0, uq00_b = 0; - uint32_t weight_accum = 0; - int total_r = 0, total_g = 0, total_b = 0; - for (uint32_t i = 0; i < 16; i++) - { - const uint8_t r = pColors[i].c[0], g = pColors[i].c[1], b = pColors[i].c[2]; - if (use_black) - { - if ((r | g | b) < 4) - continue; - } - - const uint8_t sel = pSelectors[i]; - assert(sel <= 3); - if (sel == 3) - continue; - - weight_accum += g_weight_vals3[sel]; - - static const uint8_t s_tran[3] = { 0, 2, 1 }; - const uint8_t tsel = s_tran[sel]; - uq00_r += tsel * r; - uq00_g += tsel * g; - uq00_b += tsel * b; - - total_r += r; - total_g += g; - total_b += b; - } - - int q10_r = total_r * 2 - uq00_r; - int q10_g = total_g * 2 - uq00_g; - int q10_b = total_b * 2 - uq00_b; - - float z00 = (float)((weight_accum >> 16) & 0xFF); - float z10 = (float)((weight_accum >> 8) & 0xFF); - float z11 = (float)(weight_accum & 0xFF); - float z01 = z10; - - float det = z00 * z11 - z01 * z10; - if (fabs(det) < 1e-8f) - return false; - - det = (2.0f / 255.0f) / det; - - float iz00, iz01, iz10, iz11; - iz00 = z11 * det; - iz01 = -z01 * det; - iz10 = -z10 * det; - iz11 = z00 * det; - - pXl->c[0] = iz00 * (float)uq00_r + iz01 * q10_r; - pXh->c[0] = iz10 * (float)uq00_r + iz11 * q10_r; - - pXl->c[1] = iz00 * (float)uq00_g + iz01 * q10_g; - pXh->c[1] = iz10 * (float)uq00_g + iz11 * q10_g; - - pXl->c[2] = iz00 * (float)uq00_b + iz01 * q10_b; - pXh->c[2] = iz10 * (float)uq00_b + iz11 * q10_b; - - return true; - } - - static inline void bc1_get_block_colors4(uint32_t block_r[4], uint32_t block_g[4], uint32_t block_b[4], uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb) - { - block_r[0] = (lr << 3) | (lr >> 2); block_g[0] = (lg << 2) | (lg >> 4); block_b[0] = (lb << 3) | (lb >> 2); - block_r[3] = (hr << 3) | (hr >> 2); block_g[3] = (hg << 2) | (hg >> 4); block_b[3] = (hb << 3) | (hb >> 2); - - if (g_bc1_approx_mode == bc1_approx_mode::cBC1Ideal) - { - block_r[1] = (block_r[0] * 2 + block_r[3]) / 3; block_g[1] = (block_g[0] * 2 + block_g[3]) / 3; block_b[1] = (block_b[0] * 2 + block_b[3]) / 3; - block_r[2] = (block_r[3] * 2 + block_r[0]) / 3; block_g[2] = (block_g[3] * 2 + block_g[0]) / 3; block_b[2] = (block_b[3] * 2 + block_b[0]) / 3; - } - else if (g_bc1_approx_mode == bc1_approx_mode::cBC1IdealRound4) - { - block_r[1] = (block_r[0] * 2 + block_r[3] + 1) / 3; block_g[1] = (block_g[0] * 2 + block_g[3] + 1) / 3; block_b[1] = (block_b[0] * 2 + block_b[3] + 1) / 3; - block_r[2] = (block_r[3] * 2 + block_r[0] + 1) / 3; block_g[2] = (block_g[3] * 2 + block_g[0] + 1) / 3; block_b[2] = (block_b[3] * 2 + block_b[0] + 1) / 3; - } - else if (g_bc1_approx_mode == bc1_approx_mode::cBC1AMD) - { - block_r[1] = interp_5_6_amd(block_r[0], block_r[3]); block_g[1] = interp_5_6_amd(block_g[0], block_g[3]); block_b[1] = interp_5_6_amd(block_b[0], block_b[3]); - block_r[2] = interp_5_6_amd(block_r[3], block_r[0]); block_g[2] = interp_5_6_amd(block_g[3], block_g[0]); block_b[2] = interp_5_6_amd(block_b[3], block_b[0]); - } - else - { - block_r[1] = interp_5_nv(lr, hr); block_g[1] = interp_6_nv(block_g[0], block_g[3]); block_b[1] = interp_5_nv(lb, hb); - block_r[2] = interp_5_nv(hr, lr); block_g[2] = interp_6_nv(block_g[3], block_g[0]); block_b[2] = interp_5_nv(hb, lb); - } - } - - static inline void bc1_get_block_colors3(uint32_t block_r[3], uint32_t block_g[3], uint32_t block_b[3], uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb) - { - block_r[0] = (lr << 3) | (lr >> 2); block_g[0] = (lg << 2) | (lg >> 4); block_b[0] = (lb << 3) | (lb >> 2); - block_r[1] = (hr << 3) | (hr >> 2); block_g[1] = (hg << 2) | (hg >> 4); block_b[1] = (hb << 3) | (hb >> 2); - - if ((g_bc1_approx_mode == bc1_approx_mode::cBC1Ideal) || (g_bc1_approx_mode == bc1_approx_mode::cBC1IdealRound4)) - { - block_r[2] = (block_r[0] + block_r[1]) / 2; block_g[2] = (block_g[0] + block_g[1]) / 2; block_b[2] = (block_b[0] + block_b[1]) / 2; - } - else if (g_bc1_approx_mode == bc1_approx_mode::cBC1AMD) - { - block_r[2] = interp_half_5_6_amd(block_r[0], block_r[1]); block_g[2] = interp_half_5_6_amd(block_g[0], block_g[1]); block_b[2] = interp_half_5_6_amd(block_b[0], block_b[1]); - } - else - { - block_r[2] = interp_half_5_nv(lr, hr); block_g[2] = interp_half_6_nv(block_g[0], block_g[1]); block_b[2] = interp_half_5_nv(lb, hb); - } - } - - static inline void bc1_find_sels4_noerr(const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16]) - { - uint32_t block_r[4], block_g[4], block_b[4]; - bc1_get_block_colors4(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); - - int ar = block_r[3] - block_r[0], ag = block_g[3] - block_g[0], ab = block_b[3] - block_b[0]; - - int dots[4]; - for (uint32_t i = 0; i < 4; i++) - dots[i] = (int)block_r[i] * ar + (int)block_g[i] * ag + (int)block_b[i] * ab; - - int t0 = dots[0] + dots[1], t1 = dots[1] + dots[2], t2 = dots[2] + dots[3]; - - ar *= 2; ag *= 2; ab *= 2; - - static const uint8_t s_sels[4] = { 3, 2, 1, 0 }; - - for (uint32_t i = 0; i < 16; i += 4) - { - const int d0 = pSrc_pixels[i+0].r * ar + pSrc_pixels[i+0].g * ag + pSrc_pixels[i+0].b * ab; - const int d1 = pSrc_pixels[i+1].r * ar + pSrc_pixels[i+1].g * ag + pSrc_pixels[i+1].b * ab; - const int d2 = pSrc_pixels[i+2].r * ar + pSrc_pixels[i+2].g * ag + pSrc_pixels[i+2].b * ab; - const int d3 = pSrc_pixels[i+3].r * ar + pSrc_pixels[i+3].g * ag + pSrc_pixels[i+3].b * ab; - - sels[i+0] = s_sels[(d0 <= t0) + (d0 < t1) + (d0 < t2)]; - sels[i+1] = s_sels[(d1 <= t0) + (d1 < t1) + (d1 < t2)]; - sels[i+2] = s_sels[(d2 <= t0) + (d2 < t1) + (d2 < t2)]; - sels[i+3] = s_sels[(d3 <= t0) + (d3 < t1) + (d3 < t2)]; - } - } - - static inline uint32_t bc1_find_sels4_fasterr(const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err) - { - uint32_t block_r[4], block_g[4], block_b[4]; - bc1_get_block_colors4(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); - - int ar = block_r[3] - block_r[0], ag = block_g[3] - block_g[0], ab = block_b[3] - block_b[0]; - - int dots[4]; - for (uint32_t i = 0; i < 4; i++) - dots[i] = (int)block_r[i] * ar + (int)block_g[i] * ag + (int)block_b[i] * ab; - - int t0 = dots[0] + dots[1], t1 = dots[1] + dots[2], t2 = dots[2] + dots[3]; - - ar *= 2; ag *= 2; ab *= 2; - - static const uint8_t s_sels[4] = { 3, 2, 1, 0 }; - - uint32_t total_err = 0; - - for (uint32_t i = 0; i < 16; i += 4) - { - const int d0 = pSrc_pixels[i+0].r * ar + pSrc_pixels[i+0].g * ag + pSrc_pixels[i+0].b * ab; - const int d1 = pSrc_pixels[i+1].r * ar + pSrc_pixels[i+1].g * ag + pSrc_pixels[i+1].b * ab; - const int d2 = pSrc_pixels[i+2].r * ar + pSrc_pixels[i+2].g * ag + pSrc_pixels[i+2].b * ab; - const int d3 = pSrc_pixels[i+3].r * ar + pSrc_pixels[i+3].g * ag + pSrc_pixels[i+3].b * ab; - - uint8_t sel0 = s_sels[(d0 <= t0) + (d0 < t1) + (d0 < t2)]; - uint8_t sel1 = s_sels[(d1 <= t0) + (d1 < t1) + (d1 < t2)]; - uint8_t sel2 = s_sels[(d2 <= t0) + (d2 < t1) + (d2 < t2)]; - uint8_t sel3 = s_sels[(d3 <= t0) + (d3 < t1) + (d3 < t2)]; - - sels[i+0] = sel0; - sels[i+1] = sel1; - sels[i+2] = sel2; - sels[i+3] = sel3; - - total_err += squarei(pSrc_pixels[i+0].r - block_r[sel0]) + squarei(pSrc_pixels[i+0].g - block_g[sel0]) + squarei(pSrc_pixels[i+0].b - block_b[sel0]); - total_err += squarei(pSrc_pixels[i+1].r - block_r[sel1]) + squarei(pSrc_pixels[i+1].g - block_g[sel1]) + squarei(pSrc_pixels[i+1].b - block_b[sel1]); - total_err += squarei(pSrc_pixels[i+2].r - block_r[sel2]) + squarei(pSrc_pixels[i+2].g - block_g[sel2]) + squarei(pSrc_pixels[i+2].b - block_b[sel2]); - total_err += squarei(pSrc_pixels[i+3].r - block_r[sel3]) + squarei(pSrc_pixels[i+3].g - block_g[sel3]) + squarei(pSrc_pixels[i+3].b - block_b[sel3]); - - if (total_err >= cur_err) - break; - } - - return total_err; - } - - static inline uint32_t bc1_find_sels4_check2_err(const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err) - { - uint32_t block_r[4], block_g[4], block_b[4]; - bc1_get_block_colors4(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); - - int dr = block_r[3] - block_r[0], dg = block_g[3] - block_g[0], db = block_b[3] - block_b[0]; - - const float f = 4.0f / (float)(squarei(dr) + squarei(dg) + squarei(db) + .00000125f); - - uint32_t total_err = 0; - - for (uint32_t i = 0; i < 16; i++) - { - const int r = pSrc_pixels[i].r; - const int g = pSrc_pixels[i].g; - const int b = pSrc_pixels[i].b; - - int sel = (int)((float)((r - (int)block_r[0]) * dr + (g - (int)block_g[0]) * dg + (b - (int)block_b[0]) * db) * f + .5f); - sel = clampi(sel, 1, 3); - - uint32_t err0 = squarei((int)block_r[sel - 1] - (int)r) + squarei((int)block_g[sel - 1] - (int)g) + squarei((int)block_b[sel - 1] - (int)b); - uint32_t err1 = squarei((int)block_r[sel] - (int)r) + squarei((int)block_g[sel] - (int)g) + squarei((int)block_b[sel] - (int)b); - - int best_sel = sel; - uint32_t best_err = err1; - if (err0 == err1) - { - // Prefer non-interpolation - if ((best_sel - 1) == 0) - best_sel = 0; - } - else if (err0 < best_err) - { - best_sel = sel - 1; - best_err = err0; - } - - total_err += best_err; - - if (total_err >= cur_err) - break; - - sels[i] = (uint8_t)best_sel; - } - return total_err; - } - - static inline uint32_t bc1_find_sels4_fullerr(const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err) - { - uint32_t block_r[4], block_g[4], block_b[4]; - bc1_get_block_colors4(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); - - uint32_t total_err = 0; - - for (uint32_t i = 0; i < 16; i++) - { - const int r = pSrc_pixels[i].r; - const int g = pSrc_pixels[i].g; - const int b = pSrc_pixels[i].b; - - uint32_t best_err = squarei((int)block_r[0] - (int)r) + squarei((int)block_g[0] - (int)g) + squarei((int)block_b[0] - (int)b); - uint8_t best_sel = 0; - - for (uint32_t j = 1; (j < 4) && best_err; j++) - { - uint32_t err = squarei((int)block_r[j] - (int)r) + squarei((int)block_g[j] - (int)g) + squarei((int)block_b[j] - (int)b); - if ( (err < best_err) || ((err == best_err) && (j == 3)) ) - { - best_err = err; - best_sel = (uint8_t)j; - } - } - - total_err += best_err; - - if (total_err >= cur_err) - break; - - sels[i] = (uint8_t)best_sel; - } - return total_err; - } - - static inline uint32_t bc1_find_sels4(uint32_t flags, const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err) - { - uint32_t err; - - if (flags & cEncodeBC1UseFasterMSEEval) - err = bc1_find_sels4_fasterr(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels, cur_err); - else if (flags & cEncodeBC1UseFullMSEEval) - err = bc1_find_sels4_fullerr(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels, cur_err); - else - err = bc1_find_sels4_check2_err(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels, cur_err); - - return err; - } - - static inline uint32_t bc1_find_sels3_fullerr(bool use_black, const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16], uint32_t cur_err) - { - uint32_t block_r[3], block_g[3], block_b[3]; - bc1_get_block_colors3(block_r, block_g, block_b, lr, lg, lb, hr, hg, hb); - - uint32_t total_err = 0; - - for (uint32_t i = 0; i < 16; i++) - { - const int r = pSrc_pixels[i].r; - const int g = pSrc_pixels[i].g; - const int b = pSrc_pixels[i].b; - - uint32_t best_err = squarei((int)block_r[0] - (int)r) + squarei((int)block_g[0] - (int)g) + squarei((int)block_b[0] - (int)b); - uint32_t best_sel = 0; - - uint32_t err1 = squarei((int)block_r[1] - (int)r) + squarei((int)block_g[1] - (int)g) + squarei((int)block_b[1] - (int)b); - if (err1 < best_err) - { - best_err = err1; - best_sel = 1; - } - - uint32_t err2 = squarei((int)block_r[2] - (int)r) + squarei((int)block_g[2] - (int)g) + squarei((int)block_b[2] - (int)b); - if (err2 < best_err) - { - best_err = err2; - best_sel = 2; - } - - if (use_black) - { - uint32_t err3 = squarei(r) + squarei(g) + squarei(b); - if (err3 < best_err) - { - best_err = err3; - best_sel = 3; - } - } - - total_err += best_err; - if (total_err >= cur_err) - return total_err; - - sels[i] = (uint8_t)best_sel; - } - - return total_err; - } - - static inline void precise_round_565(const vec3F &xl, const vec3F &xh, - int &trial_lr, int &trial_lg, int &trial_lb, - int &trial_hr, int &trial_hg, int &trial_hb) - { - trial_lr = (int)(xl.c[0] * 31.0f); - trial_lg = (int)(xl.c[1] * 63.0f); - trial_lb = (int)(xl.c[2] * 31.0f); - - trial_hr = (int)(xh.c[0] * 31.0f); - trial_hg = (int)(xh.c[1] * 63.0f); - trial_hb = (int)(xh.c[2] * 31.0f); - - if ((uint32_t)(trial_lr | trial_lb | trial_hr | trial_hb) > 31U) - { - trial_lr = ((uint32_t)trial_lr > 31U) ? (~trial_lr >> 31) & 31 : trial_lr; - trial_hr = ((uint32_t)trial_hr > 31U) ? (~trial_hr >> 31) & 31 : trial_hr; - - trial_lb = ((uint32_t)trial_lb > 31U) ? (~trial_lb >> 31) & 31 : trial_lb; - trial_hb = ((uint32_t)trial_hb > 31U) ? (~trial_hb >> 31) & 31 : trial_hb; - } - - if ((uint32_t)(trial_lg | trial_hg) > 63U) - { - trial_lg = ((uint32_t)trial_lg > 63U) ? (~trial_lg >> 31) & 63 : trial_lg; - trial_hg = ((uint32_t)trial_hg > 63U) ? (~trial_hg >> 31) & 63 : trial_hg; - } - - trial_lr = (trial_lr + (xl.c[0] > g_midpoint5[trial_lr])) & 31; - trial_lg = (trial_lg + (xl.c[1] > g_midpoint6[trial_lg])) & 63; - trial_lb = (trial_lb + (xl.c[2] > g_midpoint5[trial_lb])) & 31; - - trial_hr = (trial_hr + (xh.c[0] > g_midpoint5[trial_hr])) & 31; - trial_hg = (trial_hg + (xh.c[1] > g_midpoint6[trial_hg])) & 63; - trial_hb = (trial_hb + (xh.c[2] > g_midpoint5[trial_hb])) & 31; - } - - static inline void precise_round_565_noscale(vec3F xl, vec3F xh, - int &trial_lr, int &trial_lg, int &trial_lb, - int &trial_hr, int &trial_hg, int &trial_hb) - { - xl.c[0] *= 1.0f/255.0f; - xl.c[1] *= 1.0f/255.0f; - xl.c[2] *= 1.0f/255.0f; - - xh.c[0] *= 1.0f/255.0f; - xh.c[1] *= 1.0f/255.0f; - xh.c[2] *= 1.0f/255.0f; - - precise_round_565(xl, xh, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb); - } - - static inline void bc1_encode4(bc1_block *pDst_block, int lr, int lg, int lb, int hr, int hg, int hb, const uint8_t sels[16]) - { - uint32_t lc16 = bc1_block::pack_unscaled_color(lr, lg, lb); - uint32_t hc16 = bc1_block::pack_unscaled_color(hr, hg, hb); - - // Always forbid 3 color blocks - if (lc16 == hc16) - { - uint8_t mask = 0; - - // Make l > h - if (hc16 > 0) - hc16--; - else - { - // lc16 = hc16 = 0 - assert(lc16 == hc16 && hc16 == 0); - - hc16 = 0; - lc16 = 1; - mask = 0x55; // select hc16 - } - - assert(lc16 > hc16); - pDst_block->set_low_color(static_cast(lc16)); - pDst_block->set_high_color(static_cast(hc16)); - - pDst_block->m_selectors[0] = mask; - pDst_block->m_selectors[1] = mask; - pDst_block->m_selectors[2] = mask; - pDst_block->m_selectors[3] = mask; - } - else - { - uint8_t invert_mask = 0; - if (lc16 < hc16) - { - std::swap(lc16, hc16); - invert_mask = 0x55; - } - - assert(lc16 > hc16); - pDst_block->set_low_color((uint16_t)lc16); - pDst_block->set_high_color((uint16_t)hc16); - - uint32_t packed_sels = 0; - static const uint8_t s_sel_trans[4] = { 0, 2, 3, 1 }; - for (uint32_t i = 0; i < 16; i++) - packed_sels |= ((uint32_t)s_sel_trans[sels[i]] << (i * 2)); - - pDst_block->m_selectors[0] = (uint8_t)packed_sels ^ invert_mask; - pDst_block->m_selectors[1] = (uint8_t)(packed_sels >> 8) ^ invert_mask; - pDst_block->m_selectors[2] = (uint8_t)(packed_sels >> 16) ^ invert_mask; - pDst_block->m_selectors[3] = (uint8_t)(packed_sels >> 24) ^ invert_mask; - } - } - - static inline void bc1_encode3(bc1_block *pDst_block, int lr, int lg, int lb, int hr, int hg, int hb, const uint8_t sels[16]) - { - uint32_t lc16 = bc1_block::pack_unscaled_color(lr, lg, lb); - uint32_t hc16 = bc1_block::pack_unscaled_color(hr, hg, hb); - - bool invert_flag = false; - if (lc16 > hc16) - { - std::swap(lc16, hc16); - invert_flag = true; - } - - assert(lc16 <= hc16); - - pDst_block->set_low_color((uint16_t)lc16); - pDst_block->set_high_color((uint16_t)hc16); - - uint32_t packed_sels = 0; - - if (invert_flag) - { - static const uint8_t s_sel_trans_inv[4] = { 1, 0, 2, 3 }; - - for (uint32_t i = 0; i < 16; i++) - packed_sels |= ((uint32_t)s_sel_trans_inv[sels[i]] << (i * 2)); - } - else - { - for (uint32_t i = 0; i < 16; i++) - packed_sels |= ((uint32_t)sels[i] << (i * 2)); - } - - pDst_block->m_selectors[0] = (uint8_t)packed_sels; - pDst_block->m_selectors[1] = (uint8_t)(packed_sels >> 8); - pDst_block->m_selectors[2] = (uint8_t)(packed_sels >> 16); - pDst_block->m_selectors[3] = (uint8_t)(packed_sels >> 24); - } - - struct bc1_encode_results - { - int lr, lg, lb; - int hr, hg, hb; - uint8_t sels[16]; - bool m_3color; - }; - - static bool try_3color_block_useblack(const color32* pSrc_pixels, uint32_t flags, uint32_t &cur_err, bc1_encode_results &results) - { - int total_r = 0, total_g = 0, total_b = 0; - int max_r = 0, max_g = 0, max_b = 0; - int min_r = 255, min_g = 255, min_b = 255; - int total_pixels = 0; - for (uint32_t i = 0; i < 16; i++) - { - const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; - if ((r | g | b) < 4) - continue; - - max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b); - min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b); - total_r += r; total_g += g; total_b += b; - - total_pixels++; - } - - if (!total_pixels) - return false; - - int half_total_pixels = total_pixels >> 1; - int avg_r = (total_r + half_total_pixels) / total_pixels; - int avg_g = (total_g + half_total_pixels) / total_pixels; - int avg_b = (total_b + half_total_pixels) / total_pixels; - - uint32_t low_c = 0, high_c = 0; - - int icov[6] = { 0, 0, 0, 0, 0, 0 }; - for (uint32_t i = 0; i < 16; i++) - { - int r = (int)pSrc_pixels[i].r; - int g = (int)pSrc_pixels[i].g; - int b = (int)pSrc_pixels[i].b; - - if ((r | g | b) < 4) - continue; - - r -= avg_r; - g -= avg_g; - b -= avg_b; - - icov[0] += r * r; - icov[1] += r * g; - icov[2] += r * b; - icov[3] += g * g; - icov[4] += g * b; - icov[5] += b * b; - } - - float cov[6]; - for (uint32_t i = 0; i < 6; i++) - cov[i] = (float)(icov[i]) * (1.0f / 255.0f); - - float xr = (float)(max_r - min_r); - float xg = (float)(max_g - min_g); - float xb = (float)(max_b - min_b); - - if (icov[2] < 0) - xr = -xr; - - if (icov[4] < 0) - xg = -xg; - - for (uint32_t power_iter = 0; power_iter < 4; power_iter++) - { - float r = xr * cov[0] + xg * cov[1] + xb * cov[2]; - float g = xr * cov[1] + xg * cov[3] + xb * cov[4]; - float b = xr * cov[2] + xg * cov[4] + xb * cov[5]; - xr = r; xg = g; xb = b; - } - - float k = maximum(fabsf(xr), fabsf(xg), fabsf(xb)); - int saxis_r = 306, saxis_g = 601, saxis_b = 117; - if (k >= 2) - { - float m = 1024.0f / k; - saxis_r = (int)(xr * m); - saxis_g = (int)(xg * m); - saxis_b = (int)(xb * m); - } - - int low_dot = INT_MAX, high_dot = INT_MIN; - for (uint32_t i = 0; i < 16; i++) - { - int r = (int)pSrc_pixels[i].r, g = (int)pSrc_pixels[i].g, b = (int)pSrc_pixels[i].b; - - if ((r | g | b) < 4) - continue; - - int dot = r * saxis_r + g * saxis_g + b * saxis_b; - if (dot < low_dot) - { - low_dot = dot; - low_c = i; - } - if (dot > high_dot) - { - high_dot = dot; - high_c = i; - } - } - - int lr = to_5(pSrc_pixels[low_c].r); - int lg = to_6(pSrc_pixels[low_c].g); - int lb = to_5(pSrc_pixels[low_c].b); - - int hr = to_5(pSrc_pixels[high_c].r); - int hg = to_6(pSrc_pixels[high_c].g); - int hb = to_5(pSrc_pixels[high_c].b); - - uint8_t trial_sels[16]; - uint32_t trial_err = bc1_find_sels3_fullerr(true, pSrc_pixels, lr, lg, lb, hr, hg, hb, trial_sels, UINT32_MAX); - - if (trial_err) - { - const uint32_t total_ls_passes = flags & cEncodeBC1TwoLeastSquaresPasses ? 2 : 1; - for (uint32_t trials = 0; trials < total_ls_passes; trials++) - { - vec3F xl, xh; - int lr2, lg2, lb2, hr2, hg2, hb2; - if (!compute_least_squares_endpoints3_rgb(true, pSrc_pixels, trial_sels, &xl, &xh)) - { - lr2 = g_bc1_match5_half[avg_r].m_hi; - lg2 = g_bc1_match6_half[avg_g].m_hi; - lb2 = g_bc1_match5_half[avg_b].m_hi; - - hr2 = g_bc1_match5_half[avg_r].m_lo; - hg2 = g_bc1_match6_half[avg_g].m_lo; - hb2 = g_bc1_match5_half[avg_b].m_lo; - } - else - { - precise_round_565(xl, xh, hr2, hg2, hb2, lr2, lg2, lb2); - } - - if ((lr == lr2) && (lg == lg2) && (lb == lb2) && (hr == hr2) && (hg == hg2) && (hb == hb2)) - break; - - uint8_t trial_sels2[16]; - uint32_t trial_err2 = bc1_find_sels3_fullerr(true, pSrc_pixels, lr2, lg2, lb2, hr2, hg2, hb2, trial_sels2, trial_err); - - if (trial_err2 < trial_err) - { - trial_err = trial_err2; - lr = lr2; lg = lg2; lb = lb2; - hr = hr2; hg = hg2; hb = hb2; - memcpy(trial_sels, trial_sels2, sizeof(trial_sels)); - } - else - break; - } - } - - if (trial_err < cur_err) - { - results.m_3color = true; - results.lr = lr; - results.lg = lg; - results.lb = lb; - results.hr = hr; - results.hg = hg; - results.hb = hb; - memcpy(results.sels, trial_sels, 16); - - cur_err = trial_err; - - return true; - } - - return false; - } - - static bool try_3color_block(const color32* pSrc_pixels, uint32_t flags, uint32_t &cur_err, - int avg_r, int avg_g, int avg_b, int lr, int lg, int lb, int hr, int hg, int hb, int total_r, int total_g, int total_b, uint32_t total_orderings_to_try, - bc1_encode_results &results) - { - uint8_t trial_sels[16]; - uint32_t trial_err = bc1_find_sels3_fullerr(false, pSrc_pixels, lr, lg, lb, hr, hg, hb, trial_sels, UINT32_MAX); - - if (trial_err) - { - const uint32_t total_ls_passes = flags & cEncodeBC1TwoLeastSquaresPasses ? 2 : 1; - for (uint32_t trials = 0; trials < total_ls_passes; trials++) - { - vec3F xl, xh; - int lr2, lg2, lb2, hr2, hg2, hb2; - if (!compute_least_squares_endpoints3_rgb(false, pSrc_pixels, trial_sels, &xl, &xh)) - { - lr2 = g_bc1_match5_half[avg_r].m_hi; - lg2 = g_bc1_match6_half[avg_g].m_hi; - lb2 = g_bc1_match5_half[avg_b].m_hi; - - hr2 = g_bc1_match5_half[avg_r].m_lo; - hg2 = g_bc1_match6_half[avg_g].m_lo; - hb2 = g_bc1_match5_half[avg_b].m_lo; - } - else - { - precise_round_565(xl, xh, hr2, hg2, hb2, lr2, lg2, lb2); - } - - if ((lr == lr2) && (lg == lg2) && (lb == lb2) && (hr == hr2) && (hg == hg2) && (hb == hb2)) - break; - - uint8_t trial_sels2[16]; - uint32_t trial_err2 = bc1_find_sels3_fullerr(false, pSrc_pixels, lr2, lg2, lb2, hr2, hg2, hb2, trial_sels2, trial_err); - - if (trial_err2 < trial_err) - { - trial_err = trial_err2; - lr = lr2; lg = lg2; lb = lb2; - hr = hr2; hg = hg2; hb = hb2; - memcpy(trial_sels, trial_sels2, sizeof(trial_sels)); - } - else - break; - } - } - - if ((trial_err) && (flags & cEncodeBC1UseLikelyTotalOrderings) && (total_orderings_to_try)) - { - hist3 h; - for (uint32_t i = 0; i < 16; i++) - { - assert(trial_sels[i] < 3); - h.m_hist[trial_sels[i]]++; - } - - const uint32_t orig_total_order_index = h.lookup_total_ordering_index(); - - int r0, g0, b0, r3, g3, b3; - r0 = (lr << 3) | (lr >> 2); g0 = (lg << 2) | (lg >> 4); b0 = (lb << 3) | (lb >> 2); - r3 = (hr << 3) | (hr >> 2); g3 = (hg << 2) | (hg >> 4); b3 = (hb << 3) | (hb >> 2); - - int ar = r3 - r0, ag = g3 - g0, ab = b3 - b0; - - int dots[16]; - for (uint32_t i = 0; i < 16; i++) - { - int r = pSrc_pixels[i].r; - int g = pSrc_pixels[i].g; - int b = pSrc_pixels[i].b; - int d = 0x1000000 + (r * ar + g * ag + b * ab); - assert(d >= 0); - dots[i] = (d << 4) + i; - } - - std::sort(dots, dots + 16); - - uint32_t r_sum[17], g_sum[17], b_sum[17]; - uint32_t r = 0, g = 0, b = 0; - for (uint32_t i = 0; i < 16; i++) - { - const uint32_t p = dots[i] & 15; - - r_sum[i] = r; - g_sum[i] = g; - b_sum[i] = b; - - r += pSrc_pixels[p].r; - g += pSrc_pixels[p].g; - b += pSrc_pixels[p].b; - } - - r_sum[16] = total_r; - g_sum[16] = total_g; - b_sum[16] = total_b; - - const uint32_t q_total = (flags & cEncodeBC1Exhaustive) ? NUM_UNIQUE_TOTAL_ORDERINGS3 : std::min(total_orderings_to_try, MAX_TOTAL_ORDERINGS3); - for (uint32_t q = 0; q < q_total; q++) - { - const uint32_t s = (flags & cEncodeBC1Exhaustive) ? q : g_best_total_orderings3[orig_total_order_index][q]; - - int trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb; - - vec3F xl, xh; - - if ((s == TOTAL_ORDER_3_0_16) || (s == TOTAL_ORDER_3_1_16) || (s == TOTAL_ORDER_3_2_16)) - { - trial_lr = g_bc1_match5_half[avg_r].m_hi; - trial_lg = g_bc1_match6_half[avg_g].m_hi; - trial_lb = g_bc1_match5_half[avg_b].m_hi; - - trial_hr = g_bc1_match5_half[avg_r].m_lo; - trial_hg = g_bc1_match6_half[avg_g].m_lo; - trial_hb = g_bc1_match5_half[avg_b].m_lo; - } - else - { - compute_least_squares_endpoints3_rgb(&xl, &xh, total_r, total_g, total_b, - g_selector_factors3[s][0], g_selector_factors3[s][1], g_selector_factors3[s][2], s, r_sum, g_sum, b_sum); - - precise_round_565(xl, xh, trial_hr, trial_hg, trial_hb, trial_lr, trial_lg, trial_lb); - } - - uint8_t trial_sels2[16]; - uint32_t trial_err2 = bc1_find_sels3_fullerr(false, pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels2, UINT32_MAX); - - if (trial_err2 < trial_err) - { - trial_err = trial_err2; - - lr = trial_lr; - lg = trial_lg; - lb = trial_lb; - - hr = trial_hr; - hg = trial_hg; - hb = trial_hb; - - memcpy(trial_sels, trial_sels2, sizeof(trial_sels)); - } - - } // s - } - - if (trial_err < cur_err) - { - results.m_3color = true; - results.lr = lr; - results.lg = lg; - results.lb = lb; - results.hr = hr; - results.hg = hg; - results.hb = hb; - memcpy(results.sels, trial_sels, 16); - - cur_err = trial_err; - - return true; - } - - return false; - } - - void encode_bc1(uint32_t level, void* pDst, const uint8_t* pPixels, bool allow_3color, bool allow_transparent_texels_for_black) - { - uint32_t flags = 0, total_orderings4 = 1, total_orderings3 = 1; - - static_assert(MAX_TOTAL_ORDERINGS3 >= 32, "MAX_TOTAL_ORDERINGS3 >= 32"); - static_assert(MAX_TOTAL_ORDERINGS4 >= 32, "MAX_TOTAL_ORDERINGS4 >= 32"); - - switch (level) - { - case 0: - // Faster/higher quality than stb_dxt default. - flags = cEncodeBC1BoundingBoxInt; - break; - case 1: - // Faster/higher quality than stb_dxt default. A bit higher average quality vs. mode 0. - flags = cEncodeBC1Use2DLS; - break; - case 2: - // On average mode 2 is a little weaker than modes 0/1, but it's stronger on outliers (very tough textures). - // Slightly stronger than stb_dxt. - flags = 0; - break; - case 3: - // Slightly stronger than stb_dxt HIGHQUAL. - flags = cEncodeBC1TwoLeastSquaresPasses; - break; - case 4: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1Use6PowerIters; - break; - default: - case 5: - // stb_dxt HIGHQUAL + permit 3 color (if it's enabled). - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFasterMSEEval; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - break; - case 6: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFasterMSEEval | cEncodeBC1UseLikelyTotalOrderings; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - break; - case 7: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFasterMSEEval | cEncodeBC1UseLikelyTotalOrderings; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = 4; - break; - case 8: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFasterMSEEval | cEncodeBC1UseLikelyTotalOrderings; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = 8; - break; - case 9: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseLikelyTotalOrderings; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = 11; - total_orderings3 = 3; - break; - case 10: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseLikelyTotalOrderings; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = 20; - total_orderings3 = 8; - break; - case 11: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseLikelyTotalOrderings; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = 28; - total_orderings3 = 16; - break; - case 12: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseLikelyTotalOrderings; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = 32; - total_orderings3 = 32; - break; - case 13: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (20 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = 32; - total_orderings3 = 32; - break; - case 14: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (32 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = 32; - total_orderings3 = 32; - break; - case 15: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (32 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = ((((32 + MAX_TOTAL_ORDERINGS4) / 2) + 32) / 2); - total_orderings3 = 32; - break; - case 16: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (256 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = (32 + MAX_TOTAL_ORDERINGS4) / 2; - total_orderings3 = 32; - break; - case 17: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | (256 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = MAX_TOTAL_ORDERINGS4; - total_orderings3 = 32; - break; - case 18: - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | cEncodeBC1Iterative | (256 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = MAX_TOTAL_ORDERINGS4; - total_orderings3 = 32; - break; - case 19: - // This hidden mode is *extremely* slow and abuses the encoder. It's just for testing/training. - flags = cEncodeBC1TwoLeastSquaresPasses | cEncodeBC1UseFullMSEEval | cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use6PowerIters | cEncodeBC1Exhaustive | cEncodeBC1Iterative | (256 << cEncodeBC1EndpointSearchRoundsShift) | cEncodeBC1TryAllInitialEndponts; - flags |= (allow_3color ? cEncodeBC1Use3ColorBlocks : 0) | (allow_transparent_texels_for_black ? cEncodeBC1Use3ColorBlocksForBlackPixels : 0); - total_orderings4 = 32; - total_orderings3 = 32; - break; - } - - encode_bc1(pDst, pPixels, flags, total_orderings4, total_orderings3); - } - - static inline void encode_bc1_pick_initial(const color32 *pSrc_pixels, uint32_t flags, bool grayscale_flag, - int min_r, int min_g, int min_b, int max_r, int max_g, int max_b, - int avg_r, int avg_g, int avg_b, int total_r, int total_g, int total_b, - int &lr, int &lg, int &lb, int &hr, int &hg, int &hb) - { - if (grayscale_flag) - { - const int fr = pSrc_pixels[0].r; - - // Grayscale blocks are a common enough case to specialize. - if ((max_r - min_r) < 2) - { - lr = lb = hr = hb = to_5(fr); - lg = hg = to_6(fr); - } - else - { - lr = lb = to_5(min_r); - lg = to_6(min_r); - - hr = hb = to_5(max_r); - hg = to_6(max_r); - } - } - else if (flags & cEncodeBC1Use2DLS) - { - // 2D Least Squares approach from Humus's example, with added inset and optimal rounding. - int big_chan = 0, min_chan_val = min_r, max_chan_val = max_r; - if ((max_g - min_g) > (max_chan_val - min_chan_val)) - big_chan = 1, min_chan_val = min_g, max_chan_val = max_g; - - if ((max_b - min_b) > (max_chan_val - min_chan_val)) - big_chan = 2, min_chan_val = min_b, max_chan_val = max_b; - - int sum_xy_r = 0, sum_xy_g = 0, sum_xy_b = 0; - vec3F l, h; - if (big_chan == 0) - { - for (uint32_t i = 0; i < 16; i++) - { - const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; - sum_xy_r += r * r, sum_xy_g += r * g, sum_xy_b += r * b; - } - - int sum_x = total_r; - int sum_x2 = sum_xy_r; - - float div = (float)(16 * sum_x2 - sum_x * sum_x); - float b_y = 0.0f, b_z = 0.0f; - if (fabs(div) > 1e-8f) - { - div = 1.0f / div; - b_y = (16 * sum_xy_g - sum_x * total_g) * div; - b_z = (16 * sum_xy_b - sum_x * total_b) * div; - } - - float a_y = (total_g - b_y * sum_x) / 16.0f; - float a_z = (total_b - b_z * sum_x) / 16.0f; - - l.c[1] = a_y + b_y * min_chan_val; - l.c[2] = a_z + b_z * min_chan_val; - - h.c[1] = a_y + b_y * max_chan_val; - h.c[2] = a_z + b_z * max_chan_val; - - float dg = (h.c[1] - l.c[1]); - float db = (h.c[2] - l.c[2]); - - h.c[1] = l.c[1] + dg * (15.0f/16.0f); - h.c[2] = l.c[2] + db * (15.0f/16.0f); - - l.c[1] = l.c[1] + dg * (1.0f/16.0f); - l.c[2] = l.c[2] + db * (1.0f/16.0f); - - float d = (float)(max_chan_val - min_chan_val); - float fmin_chan_val = min_chan_val + d * (1.0f/16.0f); - float fmax_chan_val = min_chan_val + d * (15.0f/16.0f); - - l.c[0] = fmin_chan_val; - h.c[0] = fmax_chan_val; - } - else if (big_chan == 1) - { - for (uint32_t i = 0; i < 16; i++) - { - const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; - sum_xy_r += g * r, sum_xy_g += g * g, sum_xy_b += g * b; - } - - int sum_x = total_g; - int sum_x2 = sum_xy_g; - - float div = (float)(16 * sum_x2 - sum_x * sum_x); - float b_x = 0.0f, b_z = 0.0f; - if (fabs(div) > 1e-8f) - { - div = 1.0f / div; - b_x = (16 * sum_xy_r - sum_x * total_r) * div; - b_z = (16 * sum_xy_b - sum_x * total_b) * div; - } - - float a_x = (total_r - b_x * sum_x) / 16.0f; - float a_z = (total_b - b_z * sum_x) / 16.0f; - - l.c[0] = a_x + b_x * min_chan_val; - l.c[2] = a_z + b_z * min_chan_val; - - h.c[0] = a_x + b_x * max_chan_val; - h.c[2] = a_z + b_z * max_chan_val; - - float dr = (h.c[0] - l.c[0]); - float db = (h.c[2] - l.c[2]); - - h.c[0] = l.c[0] + dr * (15.0f/16.0f); - h.c[2] = l.c[2] + db * (15.0f/16.0f); - - l.c[0] = l.c[0] + dr * (1.0f/16.0f); - l.c[2] = l.c[2] + db * (1.0f/16.0f); - - float d = (float)(max_chan_val - min_chan_val); - float fmin_chan_val = min_chan_val + d * (1.0f/16.0f); - float fmax_chan_val = min_chan_val + d * (15.0f/16.0f); - - l.c[1] = fmin_chan_val; - h.c[1] = fmax_chan_val; - } - else - { - for (uint32_t i = 0; i < 16; i++) - { - const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; - sum_xy_r += b * r, sum_xy_g += b * g, sum_xy_b += b * b; - } - - int sum_x = total_b; - int sum_x2 = sum_xy_b; - - float div = (float)(16 * sum_x2 - sum_x * sum_x); - float b_x = 0.0f, b_y = 0.0f; - if (fabs(div) > 1e-8f) - { - div = 1.0f / div; - b_x = (16 * sum_xy_r - sum_x * total_r) * div; - b_y = (16 * sum_xy_g - sum_x * total_g) * div; - } - - float a_x = (total_r - b_x * sum_x) / 16.0f; - float a_y = (total_g - b_y * sum_x) / 16.0f; - - l.c[0] = a_x + b_x * min_chan_val; - l.c[1] = a_y + b_y * min_chan_val; - - h.c[0] = a_x + b_x * max_chan_val; - h.c[1] = a_y + b_y * max_chan_val; - - float dr = (h.c[0] - l.c[0]); - float dg = (h.c[1] - l.c[1]); - - h.c[0] = l.c[0] + dr * (15.0f/16.0f); - h.c[1] = l.c[1] + dg * (15.0f/16.0f); - - l.c[0] = l.c[0] + dr * (1.0f/16.0f); - l.c[1] = l.c[1] + dg * (1.0f/16.0f); - - float d = (float)(max_chan_val - min_chan_val); - float fmin_chan_val = min_chan_val + d * (1.0f/16.0f); - float fmax_chan_val = min_chan_val + d * (15.0f/16.0f); - - l.c[2] = fmin_chan_val; - h.c[2] = fmax_chan_val; - } - - precise_round_565_noscale(l, h, lr, lg, lb, hr, hg, hb); - } - else if (flags & cEncodeBC1BoundingBox) - { - // Algorithm from icbc.h compress_dxt1_fast() - vec3F l, h; - l.c[0] = min_r * (1.0f/255.0f); - l.c[1] = min_g * (1.0f/255.0f); - l.c[2] = min_b * (1.0f/255.0f); - - h.c[0] = max_r * (1.0f/255.0f); - h.c[1] = max_g * (1.0f/255.0f); - h.c[2] = max_b * (1.0f/255.0f); - - const float bias = 8.0f / 255.0f; - float inset_r = (h.c[0] - l.c[0] - bias) * (1.0f/16.0f); - float inset_g = (h.c[1] - l.c[1] - bias) * (1.0f/16.0f); - float inset_b = (h.c[2] - l.c[2] - bias) * (1.0f/16.0f); - - l.c[0] = clampf(l.c[0] + inset_r, 0.0f, 1.0f); - l.c[1] = clampf(l.c[1] + inset_g, 0.0f, 1.0f); - l.c[2] = clampf(l.c[2] + inset_b, 0.0f, 1.0f); - - h.c[0] = clampf(h.c[0] - inset_r, 0.0f, 1.0f); - h.c[1] = clampf(h.c[1] - inset_g, 0.0f, 1.0f); - h.c[2] = clampf(h.c[2] - inset_b, 0.0f, 1.0f); - - int icov_xz = 0, icov_yz = 0; - for (uint32_t i = 0; i < 16; i++) - { - int r = (int)pSrc_pixels[i].r - avg_r; - int g = (int)pSrc_pixels[i].g - avg_g; - int b = (int)pSrc_pixels[i].b - avg_b; - icov_xz += r * b; - icov_yz += g * b; - } - - if (icov_xz < 0) - std::swap(l.c[0], h.c[0]); - - if (icov_yz < 0) - std::swap(l.c[1], h.c[1]); - - precise_round_565(l, h, lr, lg, lb, hr, hg, hb); - } - else if (flags & cEncodeBC1BoundingBoxInt) - { - // Algorithm from icbc.h compress_dxt1_fast(), but converted to integer. - int inset_r = (max_r - min_r - 8) >> 4; - int inset_g = (max_g - min_g - 8) >> 4; - int inset_b = (max_b - min_b - 8) >> 4; - - min_r += inset_r; - min_g += inset_g; - min_b += inset_b; - if ((uint32_t)(min_r | min_g | min_b) > 255U) - { - min_r = clampi(min_r, 0, 255); - min_g = clampi(min_g, 0, 255); - min_b = clampi(min_b, 0, 255); - } - - max_r -= inset_r; - max_g -= inset_g; - max_b -= inset_b; - if ((uint32_t)(max_r | max_g | max_b) > 255U) - { - max_r = clampi(max_r, 0, 255); - max_g = clampi(max_g, 0, 255); - max_b = clampi(max_b, 0, 255); - } - - int icov_xz = 0, icov_yz = 0; - for (uint32_t i = 0; i < 16; i++) - { - int r = (int)pSrc_pixels[i].r - avg_r; - int g = (int)pSrc_pixels[i].g - avg_g; - int b = (int)pSrc_pixels[i].b - avg_b; - icov_xz += r * b; - icov_yz += g * b; - } - - int x0 = min_r; - int y0 = min_g; - int x1 = max_r; - int y1 = max_g; - - if (icov_xz < 0) - std::swap(x0, x1); - - if (icov_yz < 0) - std::swap(y0, y1); - - lr = to_5(x0); - lg = to_6(y0); - lb = to_5(min_b); - - hr = to_5(x1); - hg = to_6(y1); - hb = to_5(max_b); - } - else - { - // Select 2 colors along the principle axis. (There must be a faster/simpler way.) - uint32_t low_c = 0, high_c = 0; - - int icov[6] = { 0, 0, 0, 0, 0, 0 }; - for (uint32_t i = 0; i < 16; i++) - { - int r = (int)pSrc_pixels[i].r - avg_r; - int g = (int)pSrc_pixels[i].g - avg_g; - int b = (int)pSrc_pixels[i].b - avg_b; - icov[0] += r * r; - icov[1] += r * g; - icov[2] += r * b; - icov[3] += g * g; - icov[4] += g * b; - icov[5] += b * b; - } - - int saxis_r = 306, saxis_g = 601, saxis_b = 117; - - float xr = (float)(max_r - min_r); - float xg = (float)(max_g - min_g); - float xb = (float)(max_b - min_b); - - if (icov[2] < 0) - xr = -xr; - - if (icov[4] < 0) - xg = -xg; - - float cov[6]; - for (uint32_t i = 0; i < 6; i++) - cov[i] = (float)(icov[i]) * (1.0f / 255.0f); - - const uint32_t total_power_iters = (flags & cEncodeBC1Use6PowerIters) ? 6 : 4; - for (uint32_t power_iter = 0; power_iter < total_power_iters; power_iter++) - { - float r = xr * cov[0] + xg * cov[1] + xb * cov[2]; - float g = xr * cov[1] + xg * cov[3] + xb * cov[4]; - float b = xr * cov[2] + xg * cov[4] + xb * cov[5]; - xr = r; xg = g; xb = b; - } - - float k = maximum(fabsf(xr), fabsf(xg), fabsf(xb)); - if (k >= 2) - { - float m = 2048.0f / k; - saxis_r = (int)(xr * m); - saxis_g = (int)(xg * m); - saxis_b = (int)(xb * m); - } - - int low_dot = INT_MAX, high_dot = INT_MIN; - - saxis_r = (int)((uint32_t)saxis_r << 4U); - saxis_g = (int)((uint32_t)saxis_g << 4U); - saxis_b = (int)((uint32_t)saxis_b << 4U); - - for (uint32_t i = 0; i < 16; i += 4) - { - int dot0 = ((pSrc_pixels[i].r * saxis_r + pSrc_pixels[i].g * saxis_g + pSrc_pixels[i].b * saxis_b) & ~0xF) + i; - int dot1 = ((pSrc_pixels[i + 1].r * saxis_r + pSrc_pixels[i + 1].g * saxis_g + pSrc_pixels[i + 1].b * saxis_b) & ~0xF) + i + 1; - int dot2 = ((pSrc_pixels[i + 2].r * saxis_r + pSrc_pixels[i + 2].g * saxis_g + pSrc_pixels[i + 2].b * saxis_b) & ~0xF) + i + 2; - int dot3 = ((pSrc_pixels[i + 3].r * saxis_r + pSrc_pixels[i + 3].g * saxis_g + pSrc_pixels[i + 3].b * saxis_b) & ~0xF) + i + 3; - - int min_d01 = std::min(dot0, dot1); - int max_d01 = std::max(dot0, dot1); - - int min_d23 = std::min(dot2, dot3); - int max_d23 = std::max(dot2, dot3); - - int min_d = std::min(min_d01, min_d23); - int max_d = std::max(max_d01, max_d23); - - low_dot = std::min(low_dot, min_d); - high_dot = std::max(high_dot, max_d); - } - low_c = low_dot & 15; - high_c = high_dot & 15; - - lr = to_5(pSrc_pixels[low_c].r); - lg = to_6(pSrc_pixels[low_c].g); - lb = to_5(pSrc_pixels[low_c].b); - - hr = to_5(pSrc_pixels[high_c].r); - hg = to_6(pSrc_pixels[high_c].g); - hb = to_5(pSrc_pixels[high_c].b); - } - } - - static const int8_t s_adjacent_voxels[16][4] = - { - { 1,0,0, 3 }, // 0 - { 0,1,0, 4 }, // 1 - { 0,0,1, 5 }, // 2 - { -1,0,0, 0 }, // 3 - { 0,-1,0, 1 }, // 4 - { 0,0,-1, 2 }, // 5 - { 1,1,0, 9 }, // 6 - { 1,0,1, 10 }, // 7 - { 0,1,1, 11 }, // 8 - { -1,-1,0, 6 }, // 9 - { -1,0,-1, 7 }, // 10 - { 0,-1,-1, 8 }, // 11 - { -1,1,0, 13 }, // 12 - { 1,-1,0, 12 }, // 13 - { 0,-1,1, 15 }, // 14 - { 0,1,-1, 14 }, // 15 - }; - - // From icbc's high quality mode. - static inline void encode_bc1_endpoint_search(const color32 *pSrc_pixels, bool any_black_pixels, - uint32_t flags, bc1_encode_results &results, uint32_t cur_err) - { - int &lr = results.lr, &lg = results.lg, &lb = results.lb, &hr = results.hr, &hg = results.hg, &hb = results.hb; - uint8_t *sels = results.sels; - - int prev_improvement_index = 0, forbidden_direction = -1; - - const int endpoint_search_rounds = (flags & cEncodeBC1EndpointSearchRoundsMask) >> cEncodeBC1EndpointSearchRoundsShift; - for (int i = 0; i < endpoint_search_rounds; i++) - { - assert(s_adjacent_voxels[ s_adjacent_voxels[i & 15][3] ][3] == (i & 15)); - - if (forbidden_direction == (i & 31)) - continue; - - const int8_t delta[3] = { s_adjacent_voxels[i & 15][0], s_adjacent_voxels[i & 15][1], s_adjacent_voxels[i & 15][2] }; - - int trial_lr = lr, trial_lg = lg, trial_lb = lb, trial_hr = hr, trial_hg = hg, trial_hb = hb; - - if ((i >> 4) & 1) - { - trial_lr = clampi(trial_lr + delta[0], 0, 31); - trial_lg = clampi(trial_lg + delta[1], 0, 63); - trial_lb = clampi(trial_lb + delta[2], 0, 31); - } - else - { - trial_hr = clampi(trial_hr + delta[0], 0, 31); - trial_hg = clampi(trial_hg + delta[1], 0, 63); - trial_hb = clampi(trial_hb + delta[2], 0, 31); - } - - uint8_t trial_sels[16]; - - uint32_t trial_err; - if (results.m_3color) - { - trial_err = bc1_find_sels3_fullerr( - ((any_black_pixels) && ((flags & cEncodeBC1Use3ColorBlocksForBlackPixels) != 0)), - pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels, cur_err); - } - else - { - trial_err = bc1_find_sels4(flags, pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels, cur_err); - } - - if (trial_err < cur_err) - { - cur_err = trial_err; - - forbidden_direction = s_adjacent_voxels[i & 15][3] | (i & 16); - - lr = trial_lr, lg = trial_lg, lb = trial_lb, hr = trial_hr, hg = trial_hg, hb = trial_hb; - - memcpy(sels, trial_sels, 16); - - prev_improvement_index = i; - } - - if (i - prev_improvement_index > 32) - break; - } - } - - void encode_bc1(void* pDst, const uint8_t* pPixels, uint32_t flags, uint32_t total_orderings_to_try, uint32_t total_orderings_to_try3) - { - assert(g_initialized); - - const color32* pSrc_pixels = (const color32*)pPixels; - bc1_block* pDst_block = static_cast(pDst); - - int avg_r, avg_g, avg_b, min_r, min_g, min_b, max_r, max_g, max_b; - - const uint32_t fr = pSrc_pixels[0].r, fg = pSrc_pixels[0].g, fb = pSrc_pixels[0].b; - - uint32_t j; - for (j = 15; j >= 1; --j) - if ((pSrc_pixels[j].r != fr) || (pSrc_pixels[j].g != fg) || (pSrc_pixels[j].b != fb)) - break; - - if (j == 0) - { - encode_bc1_solid_block(pDst, fr, fg, fb, (flags & (cEncodeBC1Use3ColorBlocks | cEncodeBC1Use3ColorBlocksForBlackPixels)) != 0); - return; - } - - int total_r = fr, total_g = fg, total_b = fb; - - max_r = fr, max_g = fg, max_b = fb; - min_r = fr, min_g = fg, min_b = fb; - - uint32_t grayscale_flag = (fr == fg) && (fr == fb); - uint32_t any_black_pixels = (fr | fg | fb) < 4; - - for (uint32_t i = 1; i < 16; i++) - { - const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; - - grayscale_flag &= ((r == g) && (r == b)); - any_black_pixels |= ((r | g | b) < 4); - - max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b); - min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b); - total_r += r; total_g += g; total_b += b; - } - - avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; - - bc1_encode_results results; - results.m_3color = false; - - uint8_t *sels = results.sels; - int &lr = results.lr, &lg = results.lg, &lb = results.lb, &hr = results.hr, &hg = results.hg, &hb = results.hb; - int orig_lr = 0, orig_lg = 0, orig_lb = 0, orig_hr = 0, orig_hg = 0, orig_hb = 0; - - lr = 0, lg = 0, lb = 0, hr = 0, hg = 0, hb = 0; - - const bool needs_block_error = ((flags & (cEncodeBC1UseLikelyTotalOrderings | cEncodeBC1Use3ColorBlocks | cEncodeBC1UseFullMSEEval | cEncodeBC1EndpointSearchRoundsMask)) != 0) || - (any_black_pixels && ((flags & cEncodeBC1Use3ColorBlocksForBlackPixels) != 0)); - - uint32_t cur_err = UINT32_MAX; - - if (!needs_block_error) - { - assert((flags & cEncodeBC1TryAllInitialEndponts) == 0); - - encode_bc1_pick_initial(pSrc_pixels, flags, grayscale_flag != 0, - min_r, min_g, min_b, max_r, max_g, max_b, - avg_r, avg_g, avg_b, total_r, total_g, total_b, - lr, lg, lb, hr, hg, hb); - - orig_lr = lr, orig_lg = lg, orig_lb = lb, orig_hr = hr, orig_hg = hg, orig_hb = hb; - - bc1_find_sels4_noerr(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels); - - const uint32_t total_ls_passes = flags & cEncodeBC1TwoLeastSquaresPasses ? 2 : 1; - for (uint32_t ls_pass = 0; ls_pass < total_ls_passes; ls_pass++) - { - int trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb; - - vec3F xl, xh; - if (!compute_least_squares_endpoints4_rgb(pSrc_pixels, sels, &xl, &xh, total_r, total_g, total_b)) - { - // All selectors equal - treat it as a solid block which should always be equal or better. - trial_lr = g_bc1_match5_equals_1[avg_r].m_hi; - trial_lg = g_bc1_match6_equals_1[avg_g].m_hi; - trial_lb = g_bc1_match5_equals_1[avg_b].m_hi; - - trial_hr = g_bc1_match5_equals_1[avg_r].m_lo; - trial_hg = g_bc1_match6_equals_1[avg_g].m_lo; - trial_hb = g_bc1_match5_equals_1[avg_b].m_lo; - - // In high/higher quality mode, let it try again in case the optimal tables have caused the sels to diverge. - } - else - { - precise_round_565(xl, xh, trial_hr, trial_hg, trial_hb, trial_lr, trial_lg, trial_lb); - } - - if ((lr == trial_lr) && (lg == trial_lg) && (lb == trial_lb) && (hr == trial_hr) && (hg == trial_hg) && (hb == trial_hb)) - break; - - bc1_find_sels4_noerr(pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, sels); - - lr = trial_lr; - lg = trial_lg; - lb = trial_lb; - hr = trial_hr; - hg = trial_hg; - hb = trial_hb; - - } // ls_pass - } - else - { - const uint32_t total_rounds = (flags & cEncodeBC1TryAllInitialEndponts) ? 2 : 1; - for (uint32_t round = 0; round < total_rounds; round++) - { - uint32_t modified_flags = flags; - if (round == 1) - { - modified_flags &= ~(cEncodeBC1Use2DLS | cEncodeBC1BoundingBox); - modified_flags |= cEncodeBC1BoundingBox; - } - - int round_lr, round_lg, round_lb, round_hr, round_hg, round_hb; - uint8_t round_sels[16]; - - encode_bc1_pick_initial(pSrc_pixels, modified_flags, grayscale_flag != 0, - min_r, min_g, min_b, max_r, max_g, max_b, - avg_r, avg_g, avg_b, total_r, total_g, total_b, - round_lr, round_lg, round_lb, round_hr, round_hg, round_hb); - - int orig_round_lr = round_lr, orig_round_lg = round_lg, orig_round_lb = round_lb, orig_round_hr = round_hr, orig_round_hg = round_hg, orig_round_hb = round_hb; - - uint32_t round_err = bc1_find_sels4(flags, pSrc_pixels, round_lr, round_lg, round_lb, round_hr, round_hg, round_hb, round_sels, UINT32_MAX); - - const uint32_t total_ls_passes = flags & cEncodeBC1TwoLeastSquaresPasses ? 2 : 1; - for (uint32_t ls_pass = 0; ls_pass < total_ls_passes; ls_pass++) - { - int trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb; - - vec3F xl, xh; - if (!compute_least_squares_endpoints4_rgb(pSrc_pixels, round_sels, &xl, &xh, total_r, total_g, total_b)) - { - // All selectors equal - treat it as a solid block which should always be equal or better. - trial_lr = g_bc1_match5_equals_1[avg_r].m_hi; - trial_lg = g_bc1_match6_equals_1[avg_g].m_hi; - trial_lb = g_bc1_match5_equals_1[avg_b].m_hi; - - trial_hr = g_bc1_match5_equals_1[avg_r].m_lo; - trial_hg = g_bc1_match6_equals_1[avg_g].m_lo; - trial_hb = g_bc1_match5_equals_1[avg_b].m_lo; - - // In high/higher quality mode, let it try again in case the optimal tables have caused the sels to diverge. - } - else - { - precise_round_565(xl, xh, trial_hr, trial_hg, trial_hb, trial_lr, trial_lg, trial_lb); - } - - if ((round_lr == trial_lr) && (round_lg == trial_lg) && (round_lb == trial_lb) && (round_hr == trial_hr) && (round_hg == trial_hg) && (round_hb == trial_hb)) - break; - - uint8_t trial_sels[16]; - uint32_t trial_err = bc1_find_sels4(flags, pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels, round_err); - - if (trial_err < round_err) - { - round_lr = trial_lr; - round_lg = trial_lg; - round_lb = trial_lb; - - round_hr = trial_hr; - round_hg = trial_hg; - round_hb = trial_hb; - - round_err = trial_err; - memcpy(round_sels, trial_sels, 16); - } - else - break; - - } // ls_pass - - if (round_err <= cur_err) - { - cur_err = round_err; - - lr = round_lr; - lg = round_lg; - lb = round_lb; - hr = round_hr; - hg = round_hg; - hb = round_hb; - - orig_lr = orig_round_lr; - orig_lg = orig_round_lg; - orig_lb = orig_round_lb; - orig_hr = orig_round_hr; - orig_hg = orig_round_hg; - orig_hb = orig_round_hb; - - memcpy(sels, round_sels, 16); - } - - } // round - } - - if ((cur_err) && (flags & cEncodeBC1UseLikelyTotalOrderings)) - { - assert(needs_block_error); - - const uint32_t total_iters = (flags & cEncodeBC1Iterative) ? 2 : 1; - for (uint32_t iter_index = 0; iter_index < total_iters; iter_index++) - { - const uint32_t orig_err = cur_err; - - hist4 h; - for (uint32_t i = 0; i < 16; i++) - { - assert(sels[i] < 4); - h.m_hist[sels[i]]++; - } - - const uint32_t orig_total_order_index = h.lookup_total_ordering_index(); - - int r0, g0, b0, r3, g3, b3; - r0 = (lr << 3) | (lr >> 2); g0 = (lg << 2) | (lg >> 4); b0 = (lb << 3) | (lb >> 2); - r3 = (hr << 3) | (hr >> 2); g3 = (hg << 2) | (hg >> 4); b3 = (hb << 3) | (hb >> 2); - - int ar = r3 - r0, ag = g3 - g0, ab = b3 - b0; - - int dots[16]; - for (uint32_t i = 0; i < 16; i++) - { - int r = pSrc_pixels[i].r; - int g = pSrc_pixels[i].g; - int b = pSrc_pixels[i].b; - int d = 0x1000000 + (r * ar + g * ag + b * ab); - assert(d >= 0); - dots[i] = (d << 4) + i; - } - - std::sort(dots, dots + 16); - - uint32_t r_sum[17], g_sum[17], b_sum[17]; - uint32_t r = 0, g = 0, b = 0; - for (uint32_t i = 0; i < 16; i++) - { - const uint32_t p = dots[i] & 15; - - r_sum[i] = r; - g_sum[i] = g; - b_sum[i] = b; - - r += pSrc_pixels[p].r; - g += pSrc_pixels[p].g; - b += pSrc_pixels[p].b; - } - - r_sum[16] = total_r; - g_sum[16] = total_g; - b_sum[16] = total_b; - - const uint32_t q_total = (flags & cEncodeBC1Exhaustive) ? NUM_UNIQUE_TOTAL_ORDERINGS4 : clampi(total_orderings_to_try, MIN_TOTAL_ORDERINGS, MAX_TOTAL_ORDERINGS4); - for (uint32_t q = 0; q < q_total; q++) - { - const uint32_t s = (flags & cEncodeBC1Exhaustive) ? q : g_best_total_orderings4[orig_total_order_index][q]; - - int trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb; - - vec3F xl, xh; - - if ((s == TOTAL_ORDER_4_0_16) || (s == TOTAL_ORDER_4_1_16) || (s == TOTAL_ORDER_4_2_16) || (s == TOTAL_ORDER_4_3_16)) - { - trial_lr = g_bc1_match5_equals_1[avg_r].m_hi; - trial_lg = g_bc1_match6_equals_1[avg_g].m_hi; - trial_lb = g_bc1_match5_equals_1[avg_b].m_hi; - - trial_hr = g_bc1_match5_equals_1[avg_r].m_lo; - trial_hg = g_bc1_match6_equals_1[avg_g].m_lo; - trial_hb = g_bc1_match5_equals_1[avg_b].m_lo; - } - else - { - compute_least_squares_endpoints4_rgb(&xl, &xh, total_r, total_g, total_b, - g_selector_factors4[s][0], g_selector_factors4[s][1], g_selector_factors4[s][2], s, r_sum, g_sum, b_sum); - - precise_round_565(xl, xh, trial_hr, trial_hg, trial_hb, trial_lr, trial_lg, trial_lb); - } - - uint8_t trial_sels[16]; - - uint32_t trial_err = bc1_find_sels4(flags, pSrc_pixels, trial_lr, trial_lg, trial_lb, trial_hr, trial_hg, trial_hb, trial_sels, cur_err); - - if (trial_err < cur_err) - { - cur_err = trial_err; - - lr = trial_lr; - lg = trial_lg; - lb = trial_lb; - - hr = trial_hr; - hg = trial_hg; - hb = trial_hb; - - memcpy(sels, trial_sels, 16); - } - - } // s - - if ((!cur_err) || (cur_err == orig_err)) - break; - - } // iter_index - } - - if ( ((flags & (cEncodeBC1Use3ColorBlocks | cEncodeBC1Use3ColorBlocksForBlackPixels)) != 0) && (cur_err) ) - { - if (flags & cEncodeBC1Use3ColorBlocks) - { - assert(needs_block_error); - try_3color_block(pSrc_pixels, flags, cur_err, avg_r, avg_g, avg_b, orig_lr, orig_lg, orig_lb, orig_hr, orig_hg, orig_hb, total_r, total_g, total_b, total_orderings_to_try3, results); - } - - if ((any_black_pixels) && ((flags & cEncodeBC1Use3ColorBlocksForBlackPixels) != 0)) - { - assert(needs_block_error); - try_3color_block_useblack(pSrc_pixels, flags, cur_err, results); - } - } - - if ( (flags & cEncodeBC1EndpointSearchRoundsMask) && (cur_err) ) - { - assert(needs_block_error); - - encode_bc1_endpoint_search(pSrc_pixels, any_black_pixels != 0, flags, results, cur_err); - } - - if (results.m_3color) - bc1_encode3(pDst_block, results.lr, results.lg, results.lb, results.hr, results.hg, results.hb, results.sels); - else - bc1_encode4(pDst_block, results.lr, results.lg, results.lb, results.hr, results.hg, results.hb, results.sels); - } - - // BC3-5 - - struct bc4_block - { - enum { cBC4SelectorBits = 3, cTotalSelectorBytes = 6, cMaxSelectorValues = 8 }; - uint8_t m_endpoints[2]; - - uint8_t m_selectors[cTotalSelectorBytes]; - - inline uint32_t get_low_alpha() const { return m_endpoints[0]; } - inline uint32_t get_high_alpha() const { return m_endpoints[1]; } - inline bool is_alpha6_block() const { return get_low_alpha() <= get_high_alpha(); } - - inline uint64_t get_selector_bits() const - { - return ((uint64_t)((uint32_t)m_selectors[0] | ((uint32_t)m_selectors[1] << 8U) | ((uint32_t)m_selectors[2] << 16U) | ((uint32_t)m_selectors[3] << 24U))) | - (((uint64_t)m_selectors[4]) << 32U) | - (((uint64_t)m_selectors[5]) << 40U); - } - - inline uint32_t get_selector(uint32_t x, uint32_t y, uint64_t selector_bits) const - { - assert((x < 4U) && (y < 4U)); - return (selector_bits >> (((y * 4) + x) * cBC4SelectorBits))& (cMaxSelectorValues - 1); - } - - static inline uint32_t get_block_values6(uint8_t* pDst, uint32_t l, uint32_t h) - { - pDst[0] = static_cast(l); - pDst[1] = static_cast(h); - pDst[2] = static_cast((l * 4 + h) / 5); - pDst[3] = static_cast((l * 3 + h * 2) / 5); - pDst[4] = static_cast((l * 2 + h * 3) / 5); - pDst[5] = static_cast((l + h * 4) / 5); - pDst[6] = 0; - pDst[7] = 255; - return 6; - } - - static inline uint32_t get_block_values8(uint8_t* pDst, uint32_t l, uint32_t h) - { - pDst[0] = static_cast(l); - pDst[1] = static_cast(h); - pDst[2] = static_cast((l * 6 + h) / 7); - pDst[3] = static_cast((l * 5 + h * 2) / 7); - pDst[4] = static_cast((l * 4 + h * 3) / 7); - pDst[5] = static_cast((l * 3 + h * 4) / 7); - pDst[6] = static_cast((l * 2 + h * 5) / 7); - pDst[7] = static_cast((l + h * 6) / 7); - return 8; - } - - static inline uint32_t get_block_values(uint8_t* pDst, uint32_t l, uint32_t h) - { - if (l > h) - return get_block_values8(pDst, l, h); - else - return get_block_values6(pDst, l, h); - } - }; - - void encode_bc4(void* pDst, const uint8_t* pPixels, uint32_t stride) - { - assert(g_initialized); - - uint32_t min0_v, max0_v, min1_v, max1_v, min2_v, max2_v, min3_v, max3_v; - - { - min0_v = max0_v = pPixels[0 * stride]; - min1_v = max1_v = pPixels[1 * stride]; - min2_v = max2_v = pPixels[2 * stride]; - min3_v = max3_v = pPixels[3 * stride]; - } - - { - uint32_t v0 = pPixels[4 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); - uint32_t v1 = pPixels[5 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); - uint32_t v2 = pPixels[6 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); - uint32_t v3 = pPixels[7 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); - } - - { - uint32_t v0 = pPixels[8 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); - uint32_t v1 = pPixels[9 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); - uint32_t v2 = pPixels[10 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); - uint32_t v3 = pPixels[11 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); - } - - { - uint32_t v0 = pPixels[12 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); - uint32_t v1 = pPixels[13 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); - uint32_t v2 = pPixels[14 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); - uint32_t v3 = pPixels[15 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); - } - - const uint32_t min_v = minimum(min0_v, min1_v, min2_v, min3_v); - const uint32_t max_v = maximum(max0_v, max1_v, max2_v, max3_v); - - uint8_t* pDst_bytes = static_cast(pDst); - pDst_bytes[0] = (uint8_t)max_v; - pDst_bytes[1] = (uint8_t)min_v; - - if (max_v == min_v) - { - memset(pDst_bytes + 2, 0, 6); - return; - } - - const uint32_t delta = max_v - min_v; - - // min_v is now 0. Compute thresholds between values by scaling max_v. It's x14 because we're adding two x7 scale factors. - const int t0 = delta * 13; - const int t1 = delta * 11; - const int t2 = delta * 9; - const int t3 = delta * 7; - const int t4 = delta * 5; - const int t5 = delta * 3; - const int t6 = delta * 1; - - // BC4 floors in its divisions, which we compensate for with the 4 bias. - // This function is optimal for all possible inputs (i.e. it outputs the same results as checking all 8 values and choosing the closest one). - const int bias = 4 - min_v * 14; - - static const uint32_t s_tran0[8] = { 1U , 7U , 6U , 5U , 4U , 3U , 2U , 0U }; - static const uint32_t s_tran1[8] = { 1U << 3U, 7U << 3U, 6U << 3U, 5U << 3U, 4U << 3U, 3U << 3U, 2U << 3U, 0U << 3U }; - static const uint32_t s_tran2[8] = { 1U << 6U, 7U << 6U, 6U << 6U, 5U << 6U, 4U << 6U, 3U << 6U, 2U << 6U, 0U << 6U }; - static const uint32_t s_tran3[8] = { 1U << 9U, 7U << 9U, 6U << 9U, 5U << 9U, 4U << 9U, 3U << 9U, 2U << 9U, 0U << 9U }; - - uint64_t a0, a1, a2, a3; - { - const int v0 = pPixels[0 * stride] * 14 + bias; - const int v1 = pPixels[1 * stride] * 14 + bias; - const int v2 = pPixels[2 * stride] * 14 + bias; - const int v3 = pPixels[3 * stride] * 14 + bias; - a0 = s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)]; - a1 = s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)]; - a2 = s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)]; - a3 = s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)]; - } - - { - const int v0 = pPixels[4 * stride] * 14 + bias; - const int v1 = pPixels[5 * stride] * 14 + bias; - const int v2 = pPixels[6 * stride] * 14 + bias; - const int v3 = pPixels[7 * stride] * 14 + bias; - a0 |= (uint64_t)(s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)] << 12U); - a1 |= (uint64_t)(s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)] << 12U); - a2 |= (uint64_t)(s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)] << 12U); - a3 |= (uint64_t)(s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)] << 12U); - } - - { - const int v0 = pPixels[8 * stride] * 14 + bias; - const int v1 = pPixels[9 * stride] * 14 + bias; - const int v2 = pPixels[10 * stride] * 14 + bias; - const int v3 = pPixels[11 * stride] * 14 + bias; - a0 |= (((uint64_t)s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)]) << 24U); - a1 |= (((uint64_t)s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)]) << 24U); - a2 |= (((uint64_t)s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)]) << 24U); - a3 |= (((uint64_t)s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)]) << 24U); - } - - { - const int v0 = pPixels[12 * stride] * 14 + bias; - const int v1 = pPixels[13 * stride] * 14 + bias; - const int v2 = pPixels[14 * stride] * 14 + bias; - const int v3 = pPixels[15 * stride] * 14 + bias; - a0 |= (((uint64_t)s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)]) << 36U); - a1 |= (((uint64_t)s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)]) << 36U); - a2 |= (((uint64_t)s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)]) << 36U); - a3 |= (((uint64_t)s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)]) << 36U); - } - - const uint64_t f = a0 | a1 | a2 | a3; - - pDst_bytes[2] = (uint8_t)f; - pDst_bytes[3] = (uint8_t)(f >> 8U); - pDst_bytes[4] = (uint8_t)(f >> 16U); - pDst_bytes[5] = (uint8_t)(f >> 24U); - pDst_bytes[6] = (uint8_t)(f >> 32U); - pDst_bytes[7] = (uint8_t)(f >> 40U); - } - - void encode_bc3(void* pDst, const uint8_t* pPixels, uint32_t flags, uint32_t total_orderings_to_try) - { - assert(g_initialized); - - // 3-color blocks are not allowed with BC3 (on most GPU's). - flags &= ~(cEncodeBC1Use3ColorBlocksForBlackPixels | cEncodeBC1Use3ColorBlocks); - - encode_bc4(pDst, pPixels + 3, 4); - encode_bc1(static_cast(pDst) + 8, pPixels, flags, total_orderings_to_try); - } - - void encode_bc3(uint32_t level, void* pDst, const uint8_t* pPixels) - { - assert(g_initialized); - - encode_bc4(pDst, pPixels + 3, 4); - encode_bc1(level, static_cast(pDst) + 8, pPixels, false, false); - } - - void encode_bc5(void* pDst, const uint8_t* pPixels, uint32_t chan0, uint32_t chan1, uint32_t stride) - { - assert(g_initialized); - - encode_bc4(pDst, pPixels + chan0, stride); - encode_bc4(static_cast(pDst) + 8, pPixels + chan1, stride); - } - - // Returns true if the block uses 3 color punchthrough alpha mode. - bool unpack_bc1(const void* pBlock_bits, void* pPixels, bool set_alpha, bc1_approx_mode mode) - { - color32* pDst_pixels = static_cast(pPixels); - - static_assert(sizeof(bc1_block) == 8, "sizeof(bc1_block) == 8"); - static_assert(sizeof(bc4_block) == 8, "sizeof(bc4_block) == 8"); - - const bc1_block* pBlock = static_cast(pBlock_bits); - - const uint32_t l = pBlock->get_low_color(); - const uint32_t h = pBlock->get_high_color(); - - color32 c[4]; - - const int cr0 = (l >> 11) & 31; - const int cg0 = (l >> 5) & 63; - const int cb0 = l & 31; - const int r0 = (cr0 << 3) | (cr0 >> 2); - const int g0 = (cg0 << 2) | (cg0 >> 4); - const int b0 = (cb0 << 3) | (cb0 >> 2); - - const int cr1 = (h >> 11) & 31; - const int cg1 = (h >> 5) & 63; - const int cb1 = h & 31; - const int r1 = (cr1 << 3) | (cr1 >> 2); - const int g1 = (cg1 << 2) | (cg1 >> 4); - const int b1 = (cb1 << 3) | (cb1 >> 2); - - bool used_punchthrough = false; - - if (l > h) - { - c[0].set_noclamp_rgba(r0, g0, b0, 255); - c[1].set_noclamp_rgba(r1, g1, b1, 255); - switch (mode) - { - case bc1_approx_mode::cBC1Ideal: - c[2].set_noclamp_rgba((r0 * 2 + r1) / 3, (g0 * 2 + g1) / 3, (b0 * 2 + b1) / 3, 255); - c[3].set_noclamp_rgba((r1 * 2 + r0) / 3, (g1 * 2 + g0) / 3, (b1 * 2 + b0) / 3, 255); - break; - case bc1_approx_mode::cBC1IdealRound4: - c[2].set_noclamp_rgba((r0 * 2 + r1 + 1) / 3, (g0 * 2 + g1 + 1) / 3, (b0 * 2 + b1 + 1) / 3, 255); - c[3].set_noclamp_rgba((r1 * 2 + r0 + 1) / 3, (g1 * 2 + g0 + 1) / 3, (b1 * 2 + b0 + 1) / 3, 255); - break; - case bc1_approx_mode::cBC1NVidia: - c[2].set_noclamp_rgba(interp_5_nv(cr0, cr1), interp_6_nv(g0, g1), interp_5_nv(cb0, cb1), 255); - c[3].set_noclamp_rgba(interp_5_nv(cr1, cr0), interp_6_nv(g1, g0), interp_5_nv(cb1, cb0), 255); - break; - case bc1_approx_mode::cBC1AMD: - c[2].set_noclamp_rgba(interp_5_6_amd(r0, r1), interp_5_6_amd(g0, g1), interp_5_6_amd(b0, b1), 255); - c[3].set_noclamp_rgba(interp_5_6_amd(r1, r0), interp_5_6_amd(g1, g0), interp_5_6_amd(b1, b0), 255); - break; - } - } - else - { - c[0].set_noclamp_rgba(r0, g0, b0, 255); - c[1].set_noclamp_rgba(r1, g1, b1, 255); - switch (mode) - { - case bc1_approx_mode::cBC1Ideal: - case bc1_approx_mode::cBC1IdealRound4: - c[2].set_noclamp_rgba((r0 + r1) / 2, (g0 + g1) / 2, (b0 + b1) / 2, 255); - break; - case bc1_approx_mode::cBC1NVidia: - c[2].set_noclamp_rgba(interp_half_5_nv(cr0, cr1), interp_half_6_nv(g0, g1), interp_half_5_nv(cb0, cb1), 255); - break; - case bc1_approx_mode::cBC1AMD: - c[2].set_noclamp_rgba(interp_half_5_6_amd(r0, r1), interp_half_5_6_amd(g0, g1), interp_half_5_6_amd(b0, b1), 255); - break; - } - - c[3].set_noclamp_rgba(0, 0, 0, 0); - used_punchthrough = true; - } - - if (set_alpha) - { - for (uint32_t y = 0; y < 4; y++, pDst_pixels += 4) - { - pDst_pixels[0] = c[pBlock->get_selector(0, y)]; - pDst_pixels[1] = c[pBlock->get_selector(1, y)]; - pDst_pixels[2] = c[pBlock->get_selector(2, y)]; - pDst_pixels[3] = c[pBlock->get_selector(3, y)]; - } - } - else - { - for (uint32_t y = 0; y < 4; y++, pDst_pixels += 4) - { - pDst_pixels[0].set_rgb(c[pBlock->get_selector(0, y)]); - pDst_pixels[1].set_rgb(c[pBlock->get_selector(1, y)]); - pDst_pixels[2].set_rgb(c[pBlock->get_selector(2, y)]); - pDst_pixels[3].set_rgb(c[pBlock->get_selector(3, y)]); - } - } - - return used_punchthrough; - } - - void unpack_bc4(const void* pBlock_bits, uint8_t* pPixels, uint32_t stride) - { - static_assert(sizeof(bc4_block) == 8, "sizeof(bc4_block) == 8"); - - const bc4_block* pBlock = static_cast(pBlock_bits); - - uint8_t sel_values[8]; - bc4_block::get_block_values(sel_values, pBlock->get_low_alpha(), pBlock->get_high_alpha()); - - const uint64_t selector_bits = pBlock->get_selector_bits(); - - for (uint32_t y = 0; y < 4; y++, pPixels += (stride * 4U)) - { - pPixels[0] = sel_values[pBlock->get_selector(0, y, selector_bits)]; - pPixels[stride * 1] = sel_values[pBlock->get_selector(1, y, selector_bits)]; - pPixels[stride * 2] = sel_values[pBlock->get_selector(2, y, selector_bits)]; - pPixels[stride * 3] = sel_values[pBlock->get_selector(3, y, selector_bits)]; - } - } - - // Returns false if the block uses 3-color punchthrough alpha mode, which isn't supported on some GPU's for BC3. - bool unpack_bc3(const void* pBlock_bits, void* pPixels, bc1_approx_mode mode) - { - color32* pDst_pixels = static_cast(pPixels); - - bool success = true; - - if (unpack_bc1((const uint8_t*)pBlock_bits + sizeof(bc4_block), pDst_pixels, true, mode)) - success = false; - - unpack_bc4(pBlock_bits, &pDst_pixels[0].a, sizeof(color32)); - - return success; - } - - // writes RG - void unpack_bc5(const void* pBlock_bits, void* pPixels, uint32_t chan0, uint32_t chan1, uint32_t stride) - { - unpack_bc4(pBlock_bits, (uint8_t *)pPixels + chan0, stride); - unpack_bc4((const uint8_t*)pBlock_bits + sizeof(bc4_block), (uint8_t *)pPixels + chan1, stride); - } - -} // namespace rgbcx - -#endif //#ifdef RGBCX_IMPLEMENTATION - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright(c) 2020 Richard Geldreich, Jr. -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files(the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions : -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain(www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non - commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain.We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors.We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- -*/ - diff --git a/external/bc7enc/rgbcx_table4.h b/external/bc7enc/rgbcx_table4.h deleted file mode 100644 index cda3f0a1..00000000 --- a/external/bc7enc/rgbcx_table4.h +++ /dev/null @@ -1,969 +0,0 @@ -{ 202,403,51,450,318,23,120,13,494,5,523,260,77,21,15,128,48,141,33,817,137,269,12,102,1,475,4,326,7,32,453,64,196,115,730,49,165,2,82,342,6,401,180,31,899,59,402,351,197,17,125,457,14,386,40,3,61,58,37,221,95,16,99,719,98,20,10,854,117,153,27,576,134,341,308,216,11,194,30,24,922,285,9,50,86,65,19,615,391,44,75,237,177,90,352,93,56,22,18,116,70,96,247,291,45,110,105,60,57,54,43,36,0,217,421,203,46,629,569,365,210,92,69,66,38,28,144,551 }, -{ 13,115,51,23,141,217,269,137,318,202,77,21,317,5,64,4,291,2,352,7,32,33,6,372,0,48,365,3,102,349,12,341,177,180,10,237,9,221,403,165,752,22,11,244,28,308,15,128,247,197,49,16,494,125,98,40,120,498,31,90,304,143,95,93,437,196,144,86,44,864,153,18,678,342,901,39,24,30,203,160,117,105,475,14,482,253,457,873,59,35,579,36,569,450,206,72,99,17,717,401,241,453,110,546,201,83,421,61,37,326,260,509,284,275,96,8,109,57,391,386,468,134,82,961,822,576,89,68 }, -{ 29,58,262,74,287,52,151,331,171,500,396,334,75,27,635,220,53,1,26,409,6,324,5,70,145,223,163,112,73,50,45,549,445,113,297,19,675,651,46,61,502,307,14,17,34,573,186,80,394,436,583,315,138,38,21,767,250,491,820,350,64,2,32,357,42,852,25,764,309,67,802,96,631,48,606,780,243,881,103,241,115,807,13,4,155,181,11,106,611,614,278,153,23,108,69,845,841,308,400,72,853,200,66,196,226,237,587,632,24,281,785,133,128,125,117,380,95,474,294,83,197,90,161,134,366,236,760,311 }, -{ 40,51,62,33,453,14,23,56,730,196,475,99,12,34,139,775,153,403,585,440,102,38,130,47,162,17,108,880,117,11,202,57,361,84,123,27,184,236,4,128,19,2,670,136,54,26,111,134,13,161,277,719,152,6,377,183,5,59,211,53,412,485,46,328,77,711,78,21,556,452,65,283,421,129,37,514,507,402,176,29,25,229,401,488,757,45,76,205,899,322,32,177,494,527,383,497,457,249,300,114,215,555,386,119,133,0,349,115,3,862,1,165,73,41,523,72,200,64,291,217,80,305,22,318,194,308,18,714 }, -{ 33,51,102,202,23,128,196,13,64,153,40,12,141,99,403,15,10,269,77,139,475,453,5,318,117,2,14,134,1,86,165,120,401,3,0,22,137,6,197,277,17,402,180,21,421,494,37,115,31,82,38,9,95,342,93,7,110,351,125,457,65,36,361,49,54,19,260,111,44,291,237,28,8,11,194,961,719,352,217,18,485,523,308,730,386,326,210,450,328,300,98,899,27,32,341,48,25,670,34,50,629,26,24,503,498,285,317,67,817,143,365,177,509,41,164,116,757,55,46,203,569,898,373,114,144,16,349,775 }, -{ 13,23,51,115,77,177,202,4,141,32,40,33,217,64,128,90,269,102,59,318,11,291,0,137,403,22,21,7,165,197,15,210,247,180,16,117,153,352,14,2,125,494,10,49,237,18,95,453,6,9,1,24,28,349,475,216,12,342,317,304,3,196,86,98,275,134,31,17,35,25,365,308,19,341,44,36,372,30,93,20,401,76,241,402,139,752,57,244,105,386,37,26,260,110,288,120,116,48,326,421,221,285,901,38,99,82,498,39,468,55,523,143,111,482,65,300,214,450,203,457,351,43,29,27,8,576,678,569 }, -{ 235,26,19,648,624,630,78,47,122,444,145,27,665,112,85,42,390,416,813,113,130,65,680,64,711,25,453,108,644,6,53,73,138,256,95,412,22,730,29,289,90,194,34,525,74,690,32,297,128,45,196,250,287,133,445,86,283,214,236,237,137,222,884,200,746,59,52,312,77,280,632,0,17,114,835,51,123,14,288,881,28,307,180,57,381,141,183,70,4,472,10,33,76,337,3,389,247,315,2,18,368,849,874,573,23,58,544,153,151,436,102,322,99,352,36,1,177,714,719,125,597,63,165,519,285,49,13,396 }, -{ 64,352,751,141,217,247,237,304,269,954,437,372,177,947,312,86,318,349,180,875,95,864,291,597,498,128,678,77,232,92,115,317,752,32,202,588,59,197,579,90,638,392,652,76,210,546,260,1,448,126,340,164,18,303,13,165,275,14,582,120,633,205,179,69,156,296,35,230,391,888,267,572,28,16,379,851,660,96,717,314,0,23,863,49,195,39,223,5,386,137,75,509,107,571,563,46,194,526,309,21,450,342,288,140,83,24,330,87,70,50,12,9,514,365,246,199,100,65,36,385,55,125,658,244,326,264,696,453 }, -{ 642,898,638,180,901,341,82,197,951,10,762,253,165,15,752,811,479,244,143,365,569,873,242,110,506,351,31,8,116,55,137,115,317,499,141,352,44,338,206,373,386,854,164,22,758,93,37,217,36,1,417,77,629,661,21,717,33,9,564,160,401,456,30,4,203,559,5,509,86,28,326,102,282,268,535,0,13,308,170,269,11,498,391,51,120,2,457,64,704,965,40,32,23,299,421,482,148,615,39,318,533,3,169,961,801,202,260,851,576,117,247,221,349,372,670,968,403,468,291,285,128,824,134,719,237,734,177,342 }, -{ 51,221,23,254,308,438,21,125,166,39,530,656,159,401,49,13,158,115,386,421,688,613,629,228,743,48,518,190,627,453,0,829,333,30,105,912,341,9,670,424,827,165,406,217,404,840,669,391,137,274,197,301,286,272,170,468,457,95,89,22,770,242,33,310,109,569,938,393,960,1,101,36,88,773,538,364,890,131,616,100,28,219,456,344,64,479,679,734,327,846,365,261,55,317,32,5,4,492,180,68,67,482,237,475,793,385,2,367,16,7,347,293,371,224,86,35,719,762,578,332,202,102,442,865,12,949,351,98 }, -{ 1,143,31,197,44,116,242,2,180,125,23,55,206,13,93,498,5,8,115,341,36,752,638,338,141,268,64,901,165,456,0,203,951,546,479,365,873,253,417,4,569,137,15,762,506,237,12,352,965,120,3,299,244,170,164,7,22,282,51,144,6,86,864,21,269,384,558,128,37,9,457,326,844,492,160,961,391,499,202,509,599,870,260,317,685,434,127,217,824,393,373,489,629,77,98,903,308,33,559,332,811,473,301,318,401,102,963,28,386,564,918,367,110,105,911,285,959,523,134,482,740,678,169,617,14,96,758,450 }, -{ 12,23,51,37,13,99,14,38,15,196,328,54,21,134,153,64,453,401,117,128,2,33,139,120,308,5,82,141,361,0,277,29,403,351,719,165,10,115,629,457,46,475,89,450,22,32,110,260,1,31,269,93,9,137,8,386,202,125,86,18,40,111,52,180,17,49,48,4,102,72,477,523,474,326,318,45,898,3,44,402,197,77,730,203,28,24,6,19,421,854,961,352,237,194,114,65,155,373,116,50,36,498,242,236,221,98,55,16,25,7,217,391,569,880,615,41,546,144,509,59,316,79,57,514,494,317,899,488 }, -{ 13,23,15,961,457,115,569,51,165,38,197,2,4,1,474,5,719,99,629,77,0,14,37,401,3,33,7,94,6,128,11,40,10,453,59,64,153,79,509,482,54,17,21,328,111,89,139,277,12,102,498,188,9,152,141,734,76,157,873,386,196,402,32,475,177,117,72,391,36,8,730,758,237,45,304,57,403,134,579,148,202,775,22,523,341,29,431,318,317,308,120,546,62,313,468,437,86,405,217,180,361,50,269,46,342,90,31,143,16,48,44,339,184,19,49,27,18,749,41,450,880,542,205,901,300,216,164,52 }, -{ 15,10,12,0,1,23,961,197,5,82,2,4,3,120,134,457,7,165,260,33,51,9,6,11,351,31,22,21,14,64,8,180,40,450,110,141,386,898,719,523,37,17,153,102,77,117,44,341,217,32,326,93,36,854,269,317,115,18,730,352,49,922,196,365,202,901,28,38,99,59,291,817,125,318,16,569,453,403,55,498,475,111,48,30,94,372,349,342,752,41,391,139,72,474,128,19,899,373,210,203,57,873,661,177,494,98,79,86,143,95,509,27,76,401,89,864,615,304,116,431,144,482,758,137,35,45,29,277 }, -{ 23,51,13,961,719,457,730,401,453,386,758,165,99,899,328,0,10,9,2,1,308,15,134,33,7,6,5,117,54,12,153,11,523,4,391,403,197,629,40,139,14,22,361,28,202,509,128,402,236,231,888,488,369,111,87,57,196,514,79,115,880,317,65,35,817,377,3,291,46,176,77,49,44,38,31,8,450,64,585,477,244,180,141,498,120,507,412,283,102,59,775,475,114,108,62,52,546,237,188,160,157,152,137,94,452,383,260,95,56,440,215,830,774,757,622,569,494,485,472,342,330,300,275,210,203,201,187,144 }, -{ 134,898,82,117,13,23,33,102,153,77,351,341,196,197,110,260,961,180,901,10,120,165,115,111,457,8,450,854,177,40,569,51,94,365,37,11,922,523,277,4,326,291,0,79,55,342,1,9,93,642,12,217,59,352,817,202,5,730,317,21,873,719,141,31,661,811,629,349,16,98,509,373,386,453,372,44,64,18,54,32,3,139,203,116,615,275,22,125,269,210,899,38,318,128,2,144,752,57,479,49,704,17,28,90,30,6,564,638,95,7,403,475,137,304,494,758,474,300,48,36,391,237,498,482,105,499,14,39 }, -{ 60,126,167,191,18,71,35,121,199,16,271,24,212,92,146,150,118,575,107,68,727,566,446,132,21,273,463,108,246,7,279,467,48,653,695,608,517,589,1,101,9,598,5,354,14,649,55,562,345,522,97,98,441,375,140,0,195,22,407,640,149,28,32,223,10,156,49,298,125,13,423,755,508,953,363,221,23,411,314,46,50,781,346,447,154,37,12,818,356,95,647,302,31,230,43,69,674,2,388,20,783,809,232,621,359,189,267,362,124,175,67,293,105,51,109,65,360,493,520,236,163,607,535,75,165,103,39,33 }, -{ 136,62,129,123,128,41,162,789,211,618,249,214,183,678,248,507,38,216,710,119,152,177,269,130,64,17,57,141,245,597,318,205,184,4,179,90,503,77,59,402,305,106,3,313,229,157,266,54,210,139,102,257,275,556,209,45,117,40,13,11,292,99,328,76,457,33,339,23,452,378,217,86,291,80,194,471,369,947,349,383,188,524,497,304,542,381,255,153,519,751,494,240,361,84,803,588,202,32,440,372,115,403,742,164,56,529,12,137,37,790,21,5,504,432,207,196,10,14,285,215,134,342,36,15,587,0,358,165 }, -{ 523,494,475,403,51,899,817,453,202,23,450,730,421,13,805,120,128,757,102,5,4,719,33,21,342,318,958,326,196,153,260,402,7,1,386,12,48,133,65,20,32,457,141,9,8,615,16,114,108,14,10,77,19,0,361,137,17,300,84,82,59,351,123,3,194,576,11,700,221,401,269,95,64,49,177,541,27,40,57,26,115,125,117,22,474,308,99,37,862,701,304,193,56,503,91,697,551,134,105,283,50,129,86,24,249,240,2,942,814,673,671,579,569,519,490,468,437,397,389,365,352,349,306,291,281,247,218,208 }, -{ 59,4,84,62,77,40,3,102,76,119,27,33,56,177,32,12,161,73,21,196,136,123,17,210,11,193,216,80,90,18,64,57,128,51,6,25,13,611,300,63,202,65,48,415,42,605,106,23,152,0,99,275,22,217,803,26,49,205,122,503,291,53,5,2,37,29,349,87,667,453,402,318,209,361,19,690,283,403,718,445,342,129,14,61,194,79,436,245,370,397,297,141,86,862,485,269,240,52,91,85,494,304,510,153,95,573,115,1,45,416,249,184,139,757,475,255,133,81,529,292,41,469,111,680,250,813,113,31 }, -{ 43,414,422,319,20,819,945,7,0,376,61,904,97,470,325,173,707,5,804,693,22,104,14,49,560,426,330,95,595,32,392,17,107,147,207,887,577,246,46,21,324,356,77,74,344,725,58,52,1,198,113,784,347,28,27,18,66,38,76,427,135,105,329,31,858,25,12,158,526,291,263,112,9,523,357,239,232,120,115,362,81,230,359,118,19,10,715,450,119,241,64,44,259,424,315,24,260,140,13,942,292,350,165,102,56,45,37,36,861,125,879,817,719,600,86,33,30,2,814,204,500,476,205,98,26,16,180,179 }, -{ 13,23,51,217,115,77,141,2,33,10,4,0,64,7,180,6,102,40,11,22,317,9,14,269,352,3,1,5,202,197,15,177,341,165,59,237,291,125,365,16,12,128,28,18,247,318,308,31,153,196,349,95,372,117,36,17,24,137,49,498,98,752,32,403,304,134,90,475,342,457,453,210,143,401,93,391,19,86,44,120,30,901,275,386,8,57,105,216,244,164,569,39,65,494,509,20,29,110,25,421,864,961,139,116,873,38,55,27,719,37,35,82,50,221,482,46,260,56,26,546,450,316,468,351,326,45,899,523 }, -{ 28,49,24,105,35,65,159,0,55,109,1,16,239,320,14,7,347,95,424,158,168,170,124,9,2,185,67,68,301,18,169,654,286,149,12,289,175,36,5,127,154,21,10,71,69,114,98,64,740,83,512,39,108,13,272,48,164,327,31,23,623,420,374,395,46,50,713,125,371,518,51,194,338,577,312,6,37,143,916,22,346,344,429,570,32,86,835,103,336,761,101,928,44,638,242,890,737,60,133,202,237,293,115,538,30,762,128,141,137,38,302,398,747,484,479,165,439,189,96,844,610,92,221,299,892,308,54,131 }, -{ 15,10,0,12,1,457,13,165,5,2,82,9,4,117,120,7,961,3,134,6,64,22,197,14,11,260,351,37,33,32,51,21,31,719,77,141,180,38,341,17,8,365,450,317,102,217,153,28,523,269,110,115,44,93,898,372,854,202,386,18,196,40,291,326,99,901,49,730,349,453,352,16,128,125,922,36,237,72,111,318,509,177,76,59,342,403,48,475,817,401,98,391,29,30,89,752,90,474,373,569,27,137,45,704,24,275,19,95,328,55,494,54,498,86,899,143,437,139,210,304,629,758,57,25,402,116,546,873 }, -{ 7,97,71,14,92,150,140,60,149,189,18,16,517,69,336,398,298,154,124,66,302,35,43,68,175,467,273,38,230,118,251,508,314,429,24,2,28,399,172,232,20,0,882,36,279,55,423,173,267,6,46,1,107,126,67,375,83,566,108,22,74,65,547,29,607,104,192,5,426,246,135,847,52,81,531,420,109,596,501,10,809,9,13,952,387,533,505,608,484,169,21,458,330,674,628,49,823,86,25,345,158,51,191,705,48,101,637,12,386,723,439,570,324,653,462,185,168,697,779,535,783,796,346,114,722,861,799,95 }, -{ 102,4,77,59,33,210,11,342,40,32,12,64,128,139,624,5,503,196,202,90,494,21,300,91,51,233,318,403,23,17,291,177,416,269,275,678,141,817,450,13,529,0,25,10,3,485,277,153,151,49,37,42,789,216,496,457,115,57,197,680,214,22,18,788,523,249,205,27,389,194,86,72,453,122,145,480,81,26,961,280,148,138,134,111,104,74,65,6,899,730,204,165,120,89,209,804,475,348,123,95,19,636,396,174,693,651,287,125,869,750,629,306,257,76,48,386,349,221,61,45,803,784,544,402,397,240,58,31 }, -{ 25,42,256,235,19,122,85,436,813,6,297,680,53,26,573,416,233,445,390,63,605,73,250,343,80,27,65,630,389,283,106,255,194,444,45,17,138,544,396,690,525,503,648,269,141,64,119,33,145,123,611,113,128,102,174,112,84,91,29,789,70,624,4,412,77,0,736,483,209,358,205,597,179,56,117,249,243,280,287,108,153,650,196,619,114,32,136,78,678,18,746,348,5,129,2,495,200,57,14,378,76,240,40,511,86,137,161,90,216,10,684,881,23,665,222,22,432,12,289,51,177,1,21,214,370,245,134,11 }, -{ 102,300,402,128,202,403,33,23,342,77,40,99,21,757,84,12,115,196,483,318,19,119,117,210,494,139,90,32,25,4,569,153,469,277,26,475,91,134,63,59,80,523,73,14,275,51,485,453,44,36,31,10,6,48,576,37,49,22,352,193,56,165,18,790,152,415,53,42,880,125,370,291,177,74,13,1,197,180,81,64,62,3,814,611,343,161,136,106,391,386,138,129,66,54,45,38,34,27,17,2,678,11,378,770,697,543,511,504,120,65,82,226,961,899,862,730,718,690,643,317,256,235,89,87,72,61,47,605 }, -{ 158,109,9,39,49,0,35,65,168,68,24,124,159,344,185,154,22,55,333,577,272,175,254,289,810,169,16,327,101,346,95,105,570,149,747,627,286,374,71,310,703,67,439,793,30,28,252,429,131,419,1,455,912,114,610,671,347,18,424,364,7,36,835,100,194,14,21,420,239,336,86,688,10,634,69,108,83,538,706,709,578,484,23,518,2,320,64,51,13,166,48,12,60,118,962,170,128,5,190,133,913,398,50,46,125,677,535,137,127,96,98,345,302,189,826,584,103,251,31,224,638,37,265,92,160,722,219,32 }, -{ 237,498,546,180,115,197,873,287,5,34,923,61,297,509,165,45,400,80,445,2,311,341,3,58,52,468,176,231,186,881,250,64,13,56,151,48,17,217,62,490,14,153,141,23,513,901,51,391,21,667,334,247,352,903,171,84,482,161,549,10,72,401,243,53,738,592,196,46,316,73,719,308,869,666,396,365,645,106,130,585,125,887,635,569,215,86,749,1,207,864,472,177,211,317,22,659,573,37,95,40,227,136,33,372,527,29,507,483,128,651,90,469,229,629,436,833,721,787,758,515,437,54,36,27,117,32,430,304 }, -{ 120,968,704,260,373,450,202,137,661,326,717,269,349,110,217,77,318,473,1,652,95,851,291,93,177,244,33,21,372,141,719,102,351,82,518,156,51,48,848,340,210,928,713,160,922,98,296,128,817,146,86,827,304,264,32,197,225,115,623,317,212,96,23,751,386,854,35,13,7,863,698,180,919,494,385,64,800,253,730,678,523,140,15,70,65,303,453,437,275,247,49,642,341,352,127,37,888,737,5,942,898,167,776,87,658,744,692,615,389,203,101,36,478,196,190,393,59,55,363,132,118,850,163,131,916,836,811,599 }, -{ 44,116,144,268,489,434,367,384,127,918,98,855,940,948,617,206,203,959,93,137,105,31,332,393,492,22,131,9,911,282,276,141,219,202,0,49,284,28,299,120,326,36,39,417,269,1,51,523,30,473,935,899,293,318,352,125,23,395,253,64,13,244,55,160,10,551,128,95,403,373,201,143,450,115,260,8,692,386,21,86,109,110,187,730,165,456,272,737,159,791,261,499,170,7,16,341,728,295,77,951,5,48,96,944,559,242,258,365,371,494,24,254,2,317,421,578,752,18,224,716,164,197,391,285,301,498,924,12 }, -{ 77,13,23,51,102,33,141,64,115,0,177,291,217,202,269,6,2,7,4,318,40,14,180,128,59,1,10,196,117,153,22,11,16,15,352,95,134,9,137,3,165,197,210,18,86,403,17,237,28,49,304,342,125,275,12,349,24,341,247,317,453,5,90,19,475,216,57,25,36,494,65,365,27,20,457,31,120,143,93,498,372,308,401,402,391,29,26,752,260,98,110,719,312,82,961,164,45,56,386,35,44,139,21,99,509,30,730,194,38,244,144,351,8,37,111,203,421,546,50,300,96,288,285,208,46,54,39,901 }, -{ 15,4,11,40,141,165,23,32,202,180,21,197,64,269,125,13,59,386,120,93,51,110,77,5,128,57,318,457,82,3,12,523,260,0,17,49,10,450,730,134,117,31,403,1,719,352,8,102,137,22,115,90,153,899,351,98,44,326,237,2,494,475,139,203,391,144,9,111,961,56,37,402,116,177,210,48,801,453,65,196,6,95,217,341,509,14,421,99,76,291,7,86,216,373,758,401,498,18,28,752,27,36,275,365,300,72,342,615,901,854,898,247,317,45,922,105,127,30,308,152,304,123,817,551,19,791,393,55 }, -{ 176,231,585,62,56,161,412,34,236,527,14,440,202,3,57,17,283,361,84,402,136,23,369,51,128,4,803,13,130,472,383,548,322,507,46,719,457,555,53,73,38,514,503,250,381,119,59,200,162,64,77,452,401,495,153,469,11,229,318,29,205,211,196,497,453,152,2,730,556,240,33,390,27,372,210,184,106,961,215,183,123,65,757,629,99,494,108,129,52,37,18,0,21,40,529,515,475,54,377,828,275,209,197,217,117,1,899,543,300,269,245,862,483,305,45,504,378,342,297,111,102,76,50,24,10,95,12,611 }, -{ 101,9,237,180,0,352,217,230,498,141,100,88,702,115,68,317,83,175,213,39,365,1,252,30,345,752,64,546,482,208,321,864,265,341,490,562,13,372,818,336,952,399,128,69,36,244,197,212,96,410,21,154,689,269,158,28,251,289,166,194,65,382,419,48,443,759,596,901,873,23,468,67,51,16,547,831,797,165,570,55,285,264,930,329,49,756,646,346,124,694,144,391,579,799,854,247,35,190,189,164,699,755,24,364,203,777,323,238,429,569,768,435,37,724,466,201,349,12,509,723,840,50,789,826,160,676,291,137 }, -{ 28,22,49,109,9,39,1,95,0,105,158,168,83,185,159,55,86,30,96,208,141,272,128,12,420,5,505,13,31,327,169,160,131,69,67,137,23,202,21,64,115,251,286,254,51,35,98,127,2,101,244,44,238,194,48,197,50,531,10,7,217,927,180,533,175,352,584,103,285,269,165,37,65,218,100,535,317,323,68,374,946,239,597,24,837,735,289,797,896,418,341,347,333,601,170,116,346,365,237,143,318,345,678,32,344,125,16,164,498,627,253,752,402,577,424,310,4,219,99,403,252,6,312,144,578,166,789,242 }, -{ 72,76,38,89,51,477,4,413,308,179,474,12,152,401,57,148,59,11,205,99,54,421,670,23,245,17,629,431,79,488,405,90,94,184,13,569,21,453,32,229,128,3,358,45,197,14,475,188,77,528,157,464,316,165,257,543,115,41,288,202,457,428,961,216,15,341,403,40,734,266,5,339,749,10,64,33,2,452,328,217,645,460,141,775,111,313,468,1,247,361,102,277,432,743,365,381,587,482,62,509,37,269,0,769,497,471,285,137,402,177,794,449,155,6,318,542,377,86,805,181,129,9,369,7,153,524,349,243 }, -{ 23,13,457,961,15,51,165,629,12,719,11,3,197,2,1,37,0,117,5,569,7,509,33,153,40,196,6,134,328,99,9,542,391,237,17,474,139,111,277,64,453,54,730,546,386,401,57,4,38,14,514,45,775,59,734,361,115,21,102,41,498,477,77,873,431,475,880,369,339,19,587,62,89,377,29,27,523,479,248,128,758,308,482,352,291,275,210,32,8,468,413,164,94,155,659,428,864,752,751,579,494,405,403,397,342,247,240,216,184,180,171,148,122,106,91,84,72,56,52,34,721,188,157,79,654,597,312,95 }, -{ 254,310,100,166,625,9,265,272,30,731,190,39,404,557,688,1,578,131,98,593,101,616,438,264,0,31,829,252,795,716,127,21,382,51,812,49,88,93,613,48,105,827,478,274,18,639,329,36,44,656,23,203,363,68,411,96,682,159,16,116,327,160,242,128,333,13,5,938,910,224,35,447,286,676,144,165,921,530,67,228,137,520,125,219,223,22,724,455,86,33,846,110,284,118,627,905,120,24,77,115,65,83,737,435,32,158,856,664,95,326,924,821,102,518,167,960,202,385,395,931,371,406,10,69,403,55,709,40 }, -{ 51,23,202,99,128,12,15,13,120,403,10,453,153,196,141,64,165,5,318,117,475,82,197,269,401,33,260,2,37,3,1,110,0,14,180,93,386,22,21,450,421,31,402,115,125,137,17,351,134,326,102,494,6,38,308,457,44,36,4,77,11,95,523,28,49,7,9,8,719,237,352,730,32,203,116,391,373,57,18,98,59,361,86,54,19,89,285,775,328,277,757,498,341,854,111,16,27,139,72,45,48,41,143,79,509,961,898,758,342,291,65,474,488,30,569,217,144,56,901,242,899,670,34,24,678,817,922,194 }, -{ 38,99,542,453,139,196,117,457,23,328,13,111,37,134,961,11,12,775,401,51,587,40,474,153,277,477,54,629,475,33,719,79,165,41,14,569,157,4,413,188,89,115,64,339,734,308,15,361,369,197,313,102,94,247,155,45,248,236,57,514,72,758,402,128,181,485,377,509,86,237,488,0,403,266,141,46,10,164,211,471,184,588,65,180,29,2,875,528,490,95,76,22,5,50,17,7,721,670,391,49,18,503,817,789,431,21,257,216,32,208,305,177,136,1,880,803,352,140,342,260,229,202,67,867,597,59,757,899 }, -{ 85,6,233,343,91,25,138,26,63,174,256,235,122,29,19,81,283,65,605,648,42,718,445,370,4,74,59,573,389,416,194,396,45,177,544,297,355,64,141,348,145,77,114,216,123,280,436,881,133,680,432,87,70,511,137,108,27,128,57,630,0,11,415,18,90,503,619,86,412,40,287,17,397,789,222,14,73,269,32,66,52,291,204,243,56,22,209,275,597,104,76,72,529,148,678,84,80,119,53,643,304,210,208,285,33,46,2,523,5,311,813,636,510,381,255,10,524,112,102,403,289,214,152,483,62,736,525,349 }, -{ 49,5,197,408,193,18,20,61,713,350,173,21,64,97,509,95,729,841,263,0,241,32,165,104,43,422,65,125,35,510,60,474,7,120,102,523,397,14,48,232,260,128,347,68,546,387,38,58,693,403,16,105,81,71,115,784,10,560,91,72,6,862,27,92,51,707,344,22,9,237,319,29,414,107,55,66,643,147,663,450,391,498,240,357,70,468,90,2,751,370,98,701,84,819,903,330,207,623,141,63,52,718,569,308,864,475,25,159,74,283,356,326,158,86,12,900,494,137,171,42,221,202,85,734,386,847,873,650 }, -{ 434,144,268,489,116,384,367,855,940,206,617,332,959,911,127,93,44,98,203,137,276,282,219,202,131,22,141,31,417,284,918,9,36,105,28,201,269,258,244,120,473,23,318,523,51,326,253,1,450,39,0,30,352,160,948,143,10,13,8,110,49,64,125,55,551,935,951,692,295,187,128,21,86,261,567,260,499,559,373,96,224,170,899,386,242,115,299,817,95,662,728,293,165,197,811,395,159,48,492,365,109,317,498,403,37,752,341,393,836,638,717,5,180,254,77,15,272,851,164,24,944,494,237,385,16,7,301,391 }, -{ 106,17,255,32,64,62,136,292,162,129,476,352,237,214,123,519,241,720,141,752,498,247,211,41,119,209,864,507,249,180,179,290,710,954,425,148,317,618,197,90,186,21,5,115,248,77,76,269,217,183,45,48,14,227,130,3,263,12,304,38,165,128,243,546,23,2,358,207,117,164,57,579,51,245,205,54,454,313,152,350,177,13,155,873,339,270,50,4,428,378,157,655,449,496,305,400,365,171,86,1,437,742,556,372,369,408,471,328,266,216,33,80,153,139,460,181,597,542,316,40,102,29,751,59,361,257,84,341 }, -{ 2,29,52,58,5,50,27,6,53,26,171,45,366,151,14,287,61,19,357,74,17,73,764,1,113,34,297,309,218,262,181,38,133,48,583,70,487,600,739,334,25,396,250,760,281,96,186,445,516,75,502,635,315,114,308,108,3,223,80,549,42,545,103,331,324,106,200,163,112,21,785,67,436,145,603,238,401,243,51,37,651,433,155,834,491,675,236,99,745,209,161,13,845,32,227,115,409,23,894,388,765,12,56,36,311,255,220,920,766,138,323,453,573,24,594,62,59,65,832,754,160,86,54,307,283,83,285,629 }, -{ 130,711,412,381,59,196,210,730,236,77,402,401,803,202,453,361,99,108,283,291,153,57,183,128,503,421,4,51,14,719,432,11,318,275,117,23,529,757,3,475,13,339,457,133,488,123,670,899,603,369,134,33,65,46,266,386,2,47,754,12,32,389,114,38,838,56,300,40,102,177,739,111,961,523,629,328,758,64,54,90,216,514,269,21,594,0,743,37,775,657,576,894,403,152,650,194,471,34,200,5,832,162,50,494,805,472,18,165,22,6,29,181,95,285,10,129,188,480,15,1,322,24,229,342,139,714,79,86 }, -{ 13,23,51,217,115,77,141,33,4,64,10,202,102,180,0,40,317,352,177,11,291,269,197,165,9,32,22,59,7,2,128,318,341,18,15,21,237,137,117,6,16,5,95,3,153,403,125,349,365,14,247,752,49,12,196,28,31,453,90,1,24,98,304,17,143,494,372,308,244,475,498,134,210,221,120,901,401,36,342,421,86,93,44,30,216,260,35,164,457,19,110,275,569,391,57,386,203,105,326,55,864,82,402,523,241,139,8,450,39,873,730,719,144,65,20,253,160,27,351,116,72,29,437,509,37,629,285,546 }, -{ 23,13,202,51,21,269,141,120,5,48,128,137,318,523,15,102,125,98,1,450,93,403,165,260,64,197,77,33,180,12,457,32,221,82,817,115,44,110,31,7,352,494,2,386,475,308,117,4,153,326,14,401,719,116,196,421,37,237,16,453,9,144,730,351,17,99,6,30,291,402,203,18,11,899,19,24,217,96,498,40,391,20,10,39,95,854,3,341,50,134,349,293,373,177,615,35,365,65,139,0,45,285,372,61,8,317,90,922,805,901,342,59,43,898,76,29,509,393,127,86,752,170,208,105,89,72,67,38 }, -{ 2,1,46,14,52,29,171,67,38,103,58,75,70,69,163,24,83,223,5,96,309,181,54,186,112,334,108,45,394,675,155,366,220,35,238,151,16,236,409,18,281,760,307,133,537,400,36,71,189,328,227,433,28,218,766,61,545,65,17,487,149,7,48,552,21,502,0,12,262,19,87,6,765,114,25,388,267,150,113,820,418,50,549,27,26,37,251,22,99,335,430,486,32,60,536,287,68,587,9,828,55,64,74,243,10,516,137,160,86,66,128,311,600,696,739,852,583,451,336,315,514,72,135,80,175,145,89,294 }, -{ 15,2,1,13,0,10,153,5,9,7,12,23,3,14,117,6,165,134,4,719,457,196,82,341,180,197,33,22,120,115,77,8,961,21,64,217,102,317,569,365,351,141,260,32,31,18,28,291,11,16,110,111,37,125,93,386,17,202,40,450,269,372,730,901,99,898,44,36,177,854,38,342,349,352,48,523,758,318,453,57,128,401,391,304,72,76,403,19,922,326,752,29,629,49,509,475,237,137,116,98,89,55,373,95,24,27,26,30,494,247,59,482,86,25,210,96,54,46,437,899,139,65,253,817,661,498,308,873 }, -{ 509,197,546,391,165,180,308,13,23,498,569,29,873,115,901,5,401,61,457,903,80,734,629,468,3,287,34,2,45,758,311,445,250,579,297,341,961,237,17,186,171,749,386,51,14,38,217,231,48,58,62,400,46,752,247,64,211,176,490,106,719,56,764,738,667,227,215,349,151,11,558,316,502,513,833,32,161,243,54,317,153,196,50,21,53,40,365,583,155,923,10,6,587,334,305,483,33,4,369,372,181,136,1,125,119,12,482,130,552,263,57,52,95,123,814,266,84,832,495,645,739,864,96,15,787,472,129,36 }, -{ 73,19,250,27,714,200,444,472,26,34,813,53,390,322,17,283,78,297,106,630,436,113,122,690,123,432,136,128,176,862,161,389,503,684,611,495,80,378,62,42,108,529,14,56,469,57,25,412,236,177,59,47,65,102,6,216,275,3,381,680,235,179,527,605,84,129,383,130,619,183,368,46,255,814,33,23,318,2,789,77,141,13,453,194,245,51,11,445,45,4,152,63,650,269,22,90,64,0,133,440,29,349,40,585,86,678,736,291,95,196,153,184,361,18,210,38,58,803,401,5,117,10,114,358,61,730,249,119 }, -{ 17,21,3,45,62,32,155,119,106,38,5,328,14,828,227,76,2,401,209,123,129,243,270,115,540,29,56,536,46,12,221,488,99,13,629,57,72,719,181,51,552,290,361,136,41,37,514,165,543,152,421,408,84,48,77,308,207,255,90,306,23,263,569,11,454,52,587,162,758,378,4,89,80,754,130,402,236,197,186,440,457,27,383,157,50,1,183,311,832,128,10,794,425,59,576,961,211,741,453,805,790,86,742,496,386,34,313,54,700,600,266,148,659,202,19,94,341,22,880,509,229,240,697,770,670,548,73,177 }, -{ 115,341,873,365,197,13,901,180,569,752,317,1,509,498,10,143,15,4,634,165,268,943,261,5,258,23,237,116,141,0,127,601,244,843,282,253,164,44,12,33,64,860,638,533,219,77,144,9,567,31,134,7,2,352,864,276,160,535,51,206,217,824,125,391,8,28,951,295,11,93,332,201,40,964,844,308,137,6,3,120,531,260,22,36,482,98,177,111,318,474,417,37,170,82,961,291,196,102,169,924,434,203,153,94,954,395,734,898,384,269,242,479,965,735,405,326,30,728,662,617,386,159,24,18,944,401,301,367 }, -{ 453,51,23,33,403,475,421,196,153,102,670,13,117,753,134,40,494,523,4,730,342,0,21,65,59,22,12,880,77,11,86,801,401,719,202,48,28,899,18,805,757,64,14,10,24,128,1,629,457,99,108,57,308,5,2,217,317,139,16,485,569,165,141,36,361,341,365,177,143,125,283,386,120,82,44,9,115,221,7,817,576,300,152,137,124,123,98,61,50,46,32,6,450,111,775,543,488,417,269,197,114,110,95,93,54,35,31,402,34,17,3,911,642,564,561,554,511,431,332,277,261,253,242,239,194,170,116,96 }, -{ 23,13,51,33,12,453,196,117,99,153,134,40,102,403,14,128,202,77,15,401,475,37,139,38,54,11,64,165,421,21,2,0,141,115,308,318,719,328,65,108,670,197,10,46,457,361,269,730,79,1,22,402,28,111,120,95,82,18,3,386,9,389,6,17,283,50,36,24,86,236,114,125,775,5,494,180,4,260,31,94,41,32,899,523,19,210,110,137,59,391,7,326,488,450,351,291,217,177,412,341,93,300,485,477,509,880,377,44,39,30,277,52,221,16,8,961,629,365,203,29,758,133,26,817,350,342,237,194 }, -{ 2,7,14,5,52,29,70,61,112,46,87,592,135,1,66,45,38,16,32,6,186,21,315,290,48,227,24,72,307,113,75,172,425,20,243,58,74,97,666,128,845,631,76,226,155,294,18,738,23,270,25,35,64,141,334,115,0,89,22,50,43,163,151,37,51,171,77,207,69,17,220,36,177,202,19,262,10,13,137,9,90,232,4,54,86,92,263,269,255,278,59,496,655,60,28,95,140,26,106,27,180,12,454,192,148,67,40,209,102,318,33,292,400,849,49,65,324,331,409,405,217,491,311,461,549,476,431,210 }, -{ 33,102,128,202,51,23,141,196,64,153,13,269,318,403,77,117,10,137,134,40,1,5,453,2,6,165,3,0,14,475,86,99,139,15,180,120,12,22,494,402,17,197,352,260,19,7,95,342,21,110,237,65,82,115,93,125,31,36,37,277,18,217,210,9,49,44,25,177,291,326,523,38,450,401,194,32,457,421,285,386,26,28,351,16,111,719,27,4,11,114,48,341,203,300,8,752,98,373,143,730,361,498,57,54,365,317,24,164,961,116,569,108,275,899,50,34,391,45,41,901,96,244,29,629,133,72,509,144 }, -{ 92,16,43,20,126,107,7,35,71,97,14,60,140,246,279,68,18,149,230,121,575,356,375,191,362,24,783,150,118,55,695,566,345,48,0,359,175,173,319,598,298,232,939,22,653,441,167,463,21,414,125,819,467,407,33,69,346,38,422,146,77,446,154,608,28,649,336,172,10,199,102,101,104,168,189,637,251,212,49,314,376,2,124,51,9,595,399,221,23,66,5,392,541,755,196,470,386,13,6,158,117,768,393,147,628,551,493,683,165,67,46,36,259,108,81,1,727,535,364,342,325,672,267,281,674,120,203,153 }, -{ 13,23,77,115,51,33,59,4,177,40,90,64,102,32,141,202,10,128,22,210,291,0,11,21,117,95,137,217,16,318,196,9,180,153,7,197,165,49,28,269,6,342,14,18,2,216,1,237,134,86,98,352,349,203,326,24,403,36,494,31,125,450,120,475,275,15,93,351,341,260,194,386,105,3,247,48,57,365,373,20,372,402,317,457,44,5,139,110,17,35,30,25,12,498,76,144,116,72,39,453,304,19,300,244,208,82,60,401,143,285,65,214,55,38,26,817,569,50,678,551,391,308,123,111,46,854,509,523 }, -{ 507,162,129,211,41,183,38,123,4,248,59,62,57,556,130,99,361,402,305,128,202,11,266,136,17,3,77,803,152,497,313,452,184,210,369,33,40,471,339,56,117,757,157,54,328,229,205,494,381,23,139,457,153,12,403,84,503,257,19,34,65,13,76,514,119,275,37,188,542,14,80,106,440,475,775,318,618,102,21,134,453,300,27,432,64,880,95,89,49,141,86,196,32,529,377,249,73,79,460,177,50,5,10,90,53,619,548,342,94,401,269,179,288,587,961,383,148,114,579,115,477,216,72,45,805,285,291,217 }, -{ 643,123,193,718,650,18,802,65,389,84,415,91,177,25,90,619,256,216,87,289,511,183,736,370,217,324,380,235,108,63,808,500,432,102,249,57,275,194,152,6,673,510,304,862,240,524,355,588,561,397,233,372,13,523,130,81,96,4,0,343,605,141,1,22,103,77,59,283,214,64,789,437,306,630,23,85,153,80,33,475,597,529,210,544,349,196,129,56,291,32,27,847,300,114,889,550,138,86,886,444,269,124,28,26,416,421,280,208,174,70,10,2,814,401,115,19,851,117,42,730,469,352,204,17,202,150,73,51 }, -{ 23,13,51,15,5,1,2,7,115,0,12,6,165,141,21,3,4,457,9,197,180,32,77,14,37,202,217,10,33,120,341,352,11,269,22,8,16,93,569,961,31,401,318,102,247,719,453,308,629,17,365,18,260,403,177,317,901,386,40,48,509,137,752,44,730,28,391,498,72,117,523,128,110,153,59,450,98,494,99,196,36,372,237,30,90,49,475,134,291,326,125,24,210,95,349,89,899,482,38,116,421,468,351,304,19,76,873,82,20,139,57,734,203,86,342,373,546,54,39,437,45,65,817,854,758,922,144,96 }, -{ 51,23,13,453,21,403,12,475,202,165,141,64,128,115,32,5,95,523,125,730,494,180,197,401,899,308,48,120,37,719,386,269,318,817,457,4,99,421,3,326,1,6,237,17,450,2,260,10,19,22,14,0,217,194,18,402,77,221,90,247,15,177,27,25,26,961,59,9,7,758,137,16,670,391,352,117,11,801,312,33,110,82,50,28,241,57,40,351,123,153,49,615,317,291,72,341,210,24,86,54,61,29,196,102,216,93,56,569,31,304,170,98,275,289,46,42,20,629,361,108,58,89,389,283,144,45,84,203 }, -{ 204,74,135,174,192,66,138,85,6,280,353,348,580,172,7,673,97,889,426,500,792,568,95,87,355,32,620,64,712,29,65,91,233,81,232,222,52,448,43,872,25,825,42,104,173,888,22,289,226,63,526,86,387,5,312,636,861,49,90,237,278,2,343,415,194,560,21,0,715,92,38,214,145,140,20,256,835,324,235,330,18,10,750,61,28,75,808,1,4,26,681,288,77,36,24,70,69,58,107,45,874,347,125,14,112,314,33,72,337,102,298,241,294,707,59,729,108,180,37,115,370,40,287,76,48,356,164,117 }, -{ 35,68,149,24,69,0,65,133,103,16,189,9,28,18,50,114,175,336,124,101,1,71,154,46,83,251,14,7,2,55,283,118,230,108,218,238,38,398,345,140,705,75,54,302,443,39,596,22,532,309,335,181,96,361,418,21,399,12,52,394,565,433,412,267,346,109,60,5,29,36,486,236,48,160,375,732,831,545,23,480,487,516,51,220,92,366,86,429,10,13,64,323,328,67,49,252,30,37,330,514,364,212,100,439,547,158,389,95,87,458,194,115,32,646,891,930,246,208,70,641,171,163,6,191,223,722,167,99 }, -{ 101,118,16,71,24,9,18,154,191,212,0,35,60,520,124,68,694,806,167,364,375,252,604,346,55,302,562,628,28,39,149,917,439,126,419,92,65,826,329,100,706,589,166,108,175,265,264,21,1,273,199,109,22,701,48,925,676,49,158,7,150,363,404,10,146,942,5,88,121,815,105,411,14,967,682,67,23,535,69,13,818,566,882,50,777,907,647,429,95,159,51,96,30,12,333,621,31,2,857,848,32,107,140,722,98,575,821,246,37,847,46,382,905,221,677,169,36,336,125,553,695,83,467,593,185,759,114,286 }, -{ 35,16,9,0,68,24,65,1,18,71,149,103,67,189,101,28,21,48,212,114,23,335,486,124,13,51,39,118,167,191,55,154,7,133,238,433,50,30,443,141,96,230,22,100,140,218,60,5,137,64,537,352,115,12,88,330,217,223,75,10,128,399,37,269,49,83,411,202,32,283,175,36,31,221,246,264,98,163,398,2,281,723,375,302,69,166,478,447,125,108,487,180,54,372,317,589,44,99,520,336,181,361,345,418,318,363,177,86,695,341,664,565,77,160,95,545,562,252,70,237,116,752,532,190,72,105,92,14 }, -{ 13,23,202,77,51,128,33,32,115,102,21,269,177,141,318,64,5,217,137,494,291,11,4,10,0,48,22,153,95,210,117,86,90,196,3,15,6,317,2,49,125,349,40,18,12,342,352,9,31,17,247,304,403,194,134,36,16,7,14,450,19,275,98,180,120,1,61,44,372,216,28,341,65,165,221,326,116,76,20,260,59,523,237,365,285,203,24,35,105,453,288,143,386,678,30,351,101,68,60,55,25,817,421,475,96,901,401,367,308,293,99,93,82,39,37,27,752,312,144,615,323,730,58,72,437,859,899,316 }, -{ 16,92,60,35,7,18,68,150,24,126,149,97,191,246,375,118,14,230,107,140,71,273,575,175,517,653,154,566,55,43,298,345,167,399,0,121,28,467,20,108,279,212,101,441,346,302,336,66,423,232,508,48,22,674,124,38,356,608,314,9,21,2,189,199,359,446,49,10,695,46,5,69,1,463,65,815,589,12,172,439,607,755,251,146,37,362,67,392,23,173,6,109,13,722,125,809,702,796,628,36,32,51,95,637,74,135,354,398,52,132,83,29,429,221,407,768,882,105,672,50,64,104,86,271,501,364,535,96 }, -{ 76,90,464,21,179,316,205,288,460,245,32,257,184,148,45,358,152,57,270,48,241,38,449,89,14,2,1,350,769,645,229,155,5,497,221,54,17,524,37,243,12,59,227,405,266,428,4,452,413,308,749,432,50,619,99,720,51,29,292,476,217,11,290,46,157,115,79,188,339,129,313,216,401,381,431,471,171,341,247,77,10,94,106,513,400,3,23,64,317,141,52,7,0,365,773,474,477,72,430,528,36,659,162,369,453,181,62,214,128,33,237,741,186,9,6,281,328,13,202,102,502,349,536,498,177,291,180,372 }, -{ 19,297,26,27,813,80,436,495,17,73,53,250,122,106,200,113,378,390,690,42,4,45,469,361,59,25,742,128,136,161,77,255,202,736,445,605,402,123,862,630,40,63,318,78,383,803,56,11,235,102,283,444,119,527,6,62,210,503,680,14,57,33,148,472,209,129,684,256,84,412,667,611,18,573,85,365,483,0,177,12,3,300,814,153,504,65,22,76,139,61,34,205,133,341,117,64,51,23,13,58,269,152,90,257,10,236,2,358,497,38,432,342,95,47,368,243,183,494,757,453,619,196,184,548,171,714,475,322 }, -{ 6,26,235,138,145,112,19,42,624,122,70,648,27,331,262,85,78,47,25,500,52,632,630,226,113,444,307,644,409,453,29,222,665,163,75,50,849,324,2,65,108,390,294,64,675,53,416,711,130,220,22,34,196,17,73,813,87,32,95,680,14,280,223,852,412,133,730,151,74,237,315,33,86,45,115,66,197,287,241,58,236,153,583,51,256,28,5,114,1,297,283,792,180,4,165,38,90,63,135,102,337,690,250,21,3,171,820,396,546,36,853,889,357,10,183,137,46,200,445,56,475,125,99,461,603,309,117,0 }, -{ 16,7,14,92,24,35,60,18,46,140,126,71,87,50,171,54,9,2,38,5,0,220,108,69,23,230,21,13,246,128,163,70,12,107,394,58,20,68,64,121,155,150,330,309,28,48,22,67,32,10,51,141,267,137,55,314,236,202,146,1,37,281,115,181,502,461,269,189,307,852,232,774,132,97,571,328,75,43,223,65,278,199,52,217,86,820,77,366,335,172,72,112,186,6,409,622,318,99,61,95,103,149,262,49,780,552,177,133,36,227,29,294,462,430,17,334,135,352,572,45,675,563,270,66,33,451,39,180 }, -{ 257,90,205,184,460,769,245,32,179,524,5,45,229,497,288,152,619,21,57,432,452,2,17,292,59,381,266,14,476,1,4,48,106,241,316,358,216,255,29,77,38,217,11,54,155,58,313,64,263,157,425,76,471,12,129,6,227,72,243,148,186,141,3,79,247,37,128,7,339,464,214,188,290,209,207,99,720,519,369,317,177,40,50,115,365,33,710,51,89,270,269,102,221,588,86,46,162,61,202,529,237,291,111,454,94,10,62,372,408,875,23,277,350,618,210,645,349,123,308,19,52,25,180,36,449,352,119,181 }, -{ 15,4,5,11,13,23,141,21,32,40,202,180,1,0,33,269,3,128,17,318,352,134,51,120,2,64,153,117,450,31,326,12,137,196,22,197,102,82,260,44,6,752,165,59,10,49,7,48,177,217,494,57,341,115,403,523,95,901,237,386,457,37,210,14,317,98,351,365,90,56,9,961,203,817,498,719,125,93,28,730,18,110,19,372,116,291,244,678,86,475,615,8,194,76,342,27,45,453,349,36,61,139,96,873,864,216,402,391,111,72,373,16,275,143,285,30,25,247,39,144,300,253,24,922,214,38,70,164 }, -{ 130,711,47,412,108,453,730,196,283,390,78,381,27,183,236,503,472,51,14,200,803,128,153,719,59,250,133,432,34,318,57,73,123,4,114,117,65,17,53,177,33,576,714,216,657,56,378,322,475,46,23,3,529,754,134,369,275,339,19,11,269,12,389,899,291,813,402,650,368,40,603,401,21,444,361,436,266,210,99,457,297,202,480,77,102,54,666,592,513,349,403,129,194,106,894,38,471,0,523,32,739,137,18,22,2,690,136,386,594,152,161,684,678,181,162,548,26,670,141,37,10,184,814,743,421,789,45,629 }, -{ 12,277,51,474,153,111,99,23,37,13,629,961,431,94,569,38,453,542,139,115,79,134,117,401,196,33,40,188,157,89,11,775,457,72,485,15,405,54,4,339,413,300,377,197,477,148,313,328,165,59,734,308,102,719,76,14,45,210,179,21,128,730,152,3,64,17,509,498,386,10,266,880,2,77,32,391,57,482,41,475,0,471,403,304,141,177,898,523,82,18,365,490,205,758,275,5,217,29,402,546,372,488,260,351,341,120,24,202,452,358,237,22,352,873,468,361,6,269,317,216,155,437,162,48,1,229,31,811 }, -{ 495,469,17,378,106,26,27,483,161,862,383,742,19,73,80,527,53,436,814,136,297,84,62,119,611,56,250,25,440,209,113,42,6,122,34,4,255,128,240,14,3,684,200,59,585,129,65,45,29,123,504,57,573,2,5,11,445,361,141,630,61,64,205,179,86,833,76,32,667,690,33,235,202,245,162,618,40,283,680,548,318,472,402,269,503,77,555,102,194,184,108,183,207,95,151,21,152,112,177,514,46,153,887,491,311,803,54,58,257,12,38,10,507,90,648,196,51,176,22,614,306,48,0,229,130,145,1,114 }, -{ 681,636,81,750,91,370,138,718,0,104,348,784,174,397,673,693,18,29,355,192,173,280,74,426,306,65,207,6,701,715,86,319,64,124,671,85,52,32,289,95,510,22,90,511,887,204,343,712,560,879,526,422,240,233,214,7,49,312,40,120,72,77,519,43,24,707,484,4,577,353,42,523,84,63,11,177,27,145,835,730,57,474,643,151,448,756,28,25,10,61,19,21,20,260,415,102,194,888,580,87,861,610,825,33,288,232,193,115,66,59,817,76,45,172,847,17,2,719,457,273,114,26,23,450,168,13,414,302 }, -{ 15,33,77,102,115,117,4,134,153,40,196,11,13,217,1,5,23,317,21,3,365,2,291,341,32,12,59,51,177,139,342,6,0,349,210,7,372,37,180,48,351,111,17,90,569,141,275,36,57,197,457,202,137,72,89,304,14,308,9,120,854,901,898,300,277,10,55,96,64,148,247,961,160,27,165,450,128,437,269,719,352,260,752,38,401,318,523,216,730,734,93,629,76,221,94,482,56,579,18,16,143,253,873,922,453,61,638,179,49,19,22,31,244,498,125,8,697,45,24,817,44,245,403,485,79,326,84,899 }, -{ 9,0,28,68,35,65,101,39,67,175,1,124,154,69,24,22,55,18,16,238,103,30,336,114,12,49,251,109,149,96,50,13,21,51,7,23,252,5,345,100,596,218,158,141,831,418,189,480,532,37,10,166,115,346,2,433,64,323,217,128,137,48,443,88,86,160,36,439,75,237,547,269,202,71,289,866,646,429,118,335,389,364,285,230,317,930,197,352,180,159,143,181,486,503,402,283,99,133,281,95,223,194,498,208,165,168,318,32,60,14,83,4,657,105,212,131,265,694,745,956,54,185,163,484,6,403,77,722 }, -{ 23,33,102,40,51,77,13,403,117,196,153,64,11,128,453,134,137,300,59,291,141,4,10,202,22,475,180,95,57,719,139,99,0,342,86,65,494,90,12,28,9,49,485,421,21,115,114,1,194,901,752,210,177,165,120,108,15,37,18,349,328,2,323,269,899,450,391,351,260,197,125,36,961,523,457,361,48,14,341,958,954,947,922,854,817,758,730,546,509,498,412,365,289,275,236,160,93,54,32,16,7,847,805,576,401,217,962,570,467,285,218,124,105,874,835,775,701,670,629,577,569,541,386,373,372,347,277,247 }, -{ 214,90,289,874,6,65,256,235,64,751,25,42,312,249,194,746,288,875,525,519,247,835,174,85,233,348,544,217,437,32,524,352,343,95,123,138,26,63,355,954,86,122,91,280,630,416,0,177,605,22,204,317,752,648,222,736,141,77,45,579,864,180,74,216,415,304,389,59,597,57,66,306,81,237,287,56,881,588,243,115,84,208,19,445,370,108,498,114,183,87,29,671,4,316,49,283,76,145,275,18,444,205,573,396,240,52,28,112,337,104,10,636,202,624,70,368,11,511,353,33,21,135,102,650,680,137,291,619 }, -{ 1,22,2,28,67,36,50,5,12,49,0,95,14,168,55,7,83,46,103,105,114,69,194,9,38,21,159,584,35,65,239,133,169,109,24,218,23,16,158,208,10,323,48,170,54,51,96,37,160,597,164,13,29,6,18,320,244,708,32,115,892,202,128,503,505,424,185,874,776,253,312,64,347,143,68,75,238,654,137,141,756,31,124,480,301,531,39,181,269,289,824,3,251,835,646,389,361,318,789,52,98,189,797,532,30,638,285,180,165,308,420,99,286,751,127,237,17,283,45,4,175,44,577,125,533,154,72,197 }, -{ 269,318,352,202,141,13,77,51,180,102,349,23,372,291,137,403,33,128,125,197,21,44,31,494,342,317,217,32,402,117,1,365,16,901,475,177,49,22,11,5,116,98,93,386,165,160,153,115,59,40,18,752,253,244,15,14,12,10,7,2,0,4,947,704,692,678,661,615,597,576,473,373,326,208,203,48,39,30,6,90,28,24,498,453,421,127,96,17,961,899,817,474,408,401,350,308,304,285,263,241,196,194,185,169,168,148,134,113,111,101,95,94,89,86,71,64,55,36,35,769,638,569,275,257,152,9,8,968 }, -{ 435,144,274,88,203,418,410,778,190,30,530,960,521,795,686,466,1,321,326,96,367,100,166,822,382,264,692,855,539,131,438,576,335,213,9,265,201,98,613,921,93,615,859,44,31,840,765,403,800,83,772,662,225,744,523,494,284,473,116,957,924,0,909,36,478,217,817,141,28,966,69,934,831,551,137,21,120,731,269,829,219,128,948,669,406,51,639,625,23,5,230,206,39,13,268,77,944,372,110,617,238,260,404,125,716,557,67,856,691,224,32,7,442,349,332,16,805,492,254,242,228,10,704,291,223,35,842,64 }, -{ 76,72,90,179,205,21,245,316,428,288,32,464,184,37,38,257,460,413,148,54,645,405,57,749,45,308,12,358,152,221,431,14,449,4,155,350,229,48,401,50,270,2,59,1,99,5,497,769,17,11,528,524,452,474,266,241,115,51,243,247,10,128,773,477,79,741,432,281,430,217,129,188,77,181,619,292,64,659,157,339,46,313,227,106,23,453,476,720,36,202,468,7,328,743,381,488,216,94,341,141,3,0,498,794,471,197,137,421,180,536,317,403,237,629,490,29,62,482,86,13,6,165,540,369,33,402,352,162 }, -{ 77,102,33,141,64,115,23,40,177,13,51,291,2,269,202,217,6,128,10,210,180,318,1,196,7,14,352,137,197,0,165,3,22,4,153,237,95,117,19,17,59,5,275,15,134,139,86,11,342,125,9,16,317,18,25,349,341,12,36,26,494,216,49,403,31,498,752,27,93,143,111,65,300,24,110,312,28,120,457,391,372,386,44,98,21,247,20,901,164,304,29,82,203,453,402,401,365,99,569,57,719,56,509,475,961,194,260,34,730,678,546,45,116,32,50,48,244,35,38,864,37,308,629,46,450,326,8,54 }, -{ 397,32,788,81,65,693,249,681,90,422,4,804,194,123,21,59,56,348,11,64,23,61,95,91,690,3,725,718,84,319,0,280,152,237,138,43,355,817,174,6,510,57,494,17,523,899,141,114,49,214,52,165,414,370,784,77,526,60,86,51,386,217,74,40,12,904,85,365,102,450,326,208,18,120,945,750,636,343,242,233,115,650,615,5,20,511,342,29,33,887,457,888,524,880,350,263,180,137,133,108,36,24,15,13,222,204,183,177,160,582,532,391,278,135,730,719,289,715,671,597,10,566,421,403,221,218,207,202 }, -{ 126,60,16,314,150,121,199,146,107,92,246,7,132,35,71,359,232,18,24,14,298,392,649,672,423,517,140,441,97,279,508,388,95,653,32,462,877,195,108,21,230,598,607,407,167,46,172,451,5,118,68,22,387,357,38,267,640,55,522,191,28,156,467,360,271,380,594,0,10,953,733,49,48,2,356,64,66,955,633,809,603,273,278,75,149,65,50,1,52,660,783,135,43,12,362,354,674,236,711,212,702,86,309,13,9,115,493,37,330,20,125,36,220,312,241,54,501,324,101,87,29,345,23,90,550,928,446,77 }, -{ 217,15,141,115,317,365,341,13,23,260,51,137,120,202,77,372,180,33,349,4,269,352,64,102,40,1,110,373,450,291,197,21,32,36,160,117,244,752,318,128,5,854,351,0,11,922,59,247,134,661,9,304,10,901,165,12,153,22,457,177,143,96,253,28,86,82,48,523,2,196,730,494,57,90,811,49,403,7,326,237,16,83,3,8,18,437,125,39,817,30,72,111,139,55,37,17,961,898,498,899,308,719,24,475,386,76,164,35,717,288,873,704,6,89,221,569,14,642,391,241,203,67,56,509,210,285,95,342 }, -{ 111,134,117,474,23,13,961,569,12,431,51,37,115,99,277,15,405,38,197,89,72,629,148,457,76,54,4,45,165,11,139,94,719,498,106,59,873,14,79,128,40,10,196,33,482,3,17,179,188,2,64,413,730,775,245,177,153,205,471,57,509,477,401,358,453,0,403,6,485,22,5,152,304,1,180,402,275,475,300,341,901,36,880,339,237,210,82,141,386,32,110,7,758,120,452,77,365,317,260,129,391,31,95,202,308,46,864,542,523,8,757,86,18,44,752,217,162,93,65,734,437,497,421,678,269,229,546,285 }, -{ 23,13,51,5,202,21,32,1,12,2,141,15,165,115,269,7,4,453,197,403,318,6,48,120,9,0,3,386,128,64,180,14,125,37,475,308,401,137,457,16,10,99,18,450,260,196,523,33,352,237,494,730,719,17,77,11,421,341,326,31,22,40,221,102,8,391,90,24,82,217,30,93,59,117,177,153,351,365,28,19,44,110,899,98,317,569,39,72,61,629,961,817,49,134,509,57,498,247,76,20,29,402,45,27,203,38,36,96,752,89,241,50,56,373,144,25,304,758,86,291,46,54,65,35,349,116,901,576 }, -{ 13,141,23,5,115,202,4,51,269,352,217,11,2,318,180,137,317,21,7,341,77,3,6,32,197,752,33,1,291,12,64,372,10,365,128,9,102,22,0,165,403,40,15,349,494,498,482,48,308,177,901,31,28,16,37,873,44,237,14,49,125,153,247,18,244,98,30,59,453,120,143,55,401,475,304,36,39,457,342,93,17,72,95,221,24,196,35,117,134,253,86,90,509,579,76,116,203,864,326,961,576,569,210,717,523,859,144,421,678,160,8,719,110,127,216,89,391,260,468,730,65,386,629,450,437,805,164,105 }, -{ 165,125,391,197,21,13,558,380,23,48,386,237,900,221,66,509,180,14,326,120,457,33,32,357,115,961,97,426,401,298,135,278,308,719,51,98,758,841,172,75,38,56,12,6,571,204,770,74,19,72,554,867,629,408,393,77,670,64,63,25,10,1,42,498,462,134,40,7,563,247,102,715,773,90,31,763,324,808,494,451,523,450,317,293,244,210,177,43,29,20,171,22,572,501,681,582,350,743,615,365,335,262,217,203,105,87,69,490,482,641,370,26,11,81,73,65,53,4,579,192,963,367,342,267,260,241,239,216 }, -{ 120,82,260,450,351,15,141,21,854,77,217,13,23,51,1,202,817,180,33,898,110,48,326,93,102,32,128,137,5,165,523,269,352,318,125,291,922,2,177,203,275,403,317,4,210,12,373,494,115,64,197,96,386,7,144,0,342,196,36,457,752,37,349,453,9,6,16,221,50,237,615,59,10,475,341,14,372,730,244,18,22,223,285,160,67,365,86,498,661,421,402,401,31,901,308,719,391,70,3,99,35,44,24,95,90,28,473,899,69,30,65,864,704,116,11,29,8,83,367,17,163,49,551,304,961,216,61,692 }, -{ 23,51,13,15,961,0,2,10,115,1,457,5,569,453,4,7,9,719,14,33,629,11,165,40,197,6,77,21,64,3,474,139,38,401,59,22,72,57,102,12,111,475,32,79,341,730,386,128,54,37,509,177,17,8,196,391,36,237,141,202,277,18,89,148,76,99,734,28,758,308,41,117,498,180,90,403,873,365,482,31,45,328,94,546,48,153,86,210,93,317,24,468,494,247,304,300,269,82,16,95,402,120,670,134,46,488,757,194,110,55,62,125,155,29,188,52,405,49,899,775,50,275,221,880,477,44,152,523 }, -{ 264,166,435,9,39,254,30,382,921,404,438,363,656,190,100,897,411,478,93,203,812,274,625,1,795,691,88,156,101,473,326,110,265,639,340,51,447,272,141,18,35,165,131,33,329,67,0,354,77,910,616,291,914,530,105,68,118,197,731,137,120,23,21,578,128,36,333,49,593,494,271,98,676,310,102,44,664,613,48,349,28,228,195,5,960,658,800,180,24,724,96,682,678,403,160,688,523,127,829,242,521,83,31,716,13,342,159,69,16,144,260,352,32,269,55,167,158,219,576,364,704,4,615,202,65,60,318,456 }, -{ 252,9,0,166,265,100,364,329,404,39,101,520,676,419,68,118,553,604,382,88,167,274,18,212,593,333,158,264,16,49,806,865,438,48,812,21,154,30,677,310,1,35,656,24,96,124,51,857,22,13,23,105,28,60,31,71,286,562,65,777,435,455,190,98,639,159,759,109,917,254,344,191,647,125,10,55,907,694,363,221,44,127,5,557,131,327,682,411,67,628,95,83,538,936,149,925,272,36,664,175,375,478,121,64,793,146,821,50,671,69,302,271,921,116,625,541,942,446,530,724,709,706,33,634,463,170,128,223 }, -{ 15,4,11,141,5,13,21,23,202,40,269,32,12,165,523,3,180,64,318,17,352,457,197,1,93,0,110,2,125,120,128,386,51,59,77,31,117,326,49,10,719,403,961,82,153,48,137,134,899,450,115,260,494,196,44,33,37,730,6,57,203,817,177,752,22,98,9,90,18,373,237,8,7,217,958,351,291,14,139,95,341,144,27,210,475,615,402,391,56,453,901,116,19,143,86,349,244,317,72,105,498,123,485,365,111,152,342,401,76,28,30,247,678,801,65,45,216,36,569,300,308,509,221,99,127,84,164,873 }, -{ 24,35,69,18,71,68,46,67,16,1,2,50,14,149,108,133,189,28,38,75,83,0,7,9,218,65,238,114,52,335,29,54,251,60,55,309,236,175,118,336,486,267,96,394,181,220,366,87,418,124,154,5,545,412,516,140,70,22,487,12,21,36,101,171,433,641,230,328,58,48,458,345,361,398,283,92,6,37,103,514,302,906,10,388,596,565,273,443,64,160,532,163,399,705,223,891,86,150,262,537,32,51,39,831,23,109,95,375,155,13,99,480,571,45,49,128,281,696,112,194,754,25,137,294,602,208,323,191 }, -{ 90,214,289,874,64,712,751,77,51,13,177,32,312,23,192,66,194,202,216,59,288,4,835,875,65,0,249,247,95,519,102,57,5,123,33,22,524,234,104,450,173,49,437,500,889,210,217,636,319,597,21,153,416,196,38,20,117,954,304,115,134,120,18,715,86,583,113,494,61,204,10,784,291,28,275,342,147,318,879,43,74,142,11,588,888,403,864,237,2,198,352,426,752,707,48,1,639,17,81,180,750,861,52,315,207,560,24,128,402,40,141,16,671,31,372,36,130,455,260,12,9,317,37,325,349,389,904,306 }, -{ 9,0,49,127,28,301,98,371,395,159,512,158,916,737,761,31,101,24,623,16,272,68,18,39,35,293,242,1,286,109,44,385,327,65,170,299,55,125,51,23,22,518,105,836,21,116,616,137,685,284,48,599,344,252,7,124,13,276,64,187,95,506,5,131,890,202,456,627,36,2,219,30,254,333,419,763,14,347,12,154,578,320,96,713,141,935,201,144,338,442,870,118,71,128,10,364,168,374,67,60,37,310,221,100,32,318,424,93,269,393,910,165,403,86,688,160,793,908,50,83,69,203,421,492,401,6,244,166 }, -{ 17,136,62,214,123,129,249,710,119,162,618,292,209,141,32,183,77,128,211,106,64,45,4,11,179,269,507,519,207,59,177,130,3,40,90,86,255,378,33,202,76,57,205,655,790,152,678,38,21,245,37,742,248,5,102,597,476,306,556,41,291,229,117,349,80,339,153,313,266,318,84,54,947,184,56,12,155,134,240,197,305,157,304,217,148,186,165,275,257,789,99,216,13,497,317,72,137,115,10,196,460,383,619,61,51,188,361,457,369,425,50,290,440,14,342,263,180,503,452,241,208,237,194,432,381,65,111,22 }, -{ 5,107,581,441,356,493,362,660,279,534,32,683,298,423,259,786,22,612,590,359,21,13,49,147,61,508,241,263,929,48,97,246,14,126,0,132,7,465,939,232,64,230,607,95,121,941,23,92,771,115,470,314,51,387,626,172,1,58,12,347,779,392,407,17,150,687,16,357,28,146,43,77,87,60,199,197,37,40,711,178,501,65,10,9,180,140,35,33,24,595,102,120,56,30,70,207,344,324,125,46,31,165,18,20,577,414,376,2,350,4,260,427,173,408,195,141,247,76,603,217,86,11,379,55,729,90,75,50 }, -{ 51,475,453,13,23,15,730,403,457,421,386,523,899,719,670,401,12,361,6,99,33,1,128,269,961,141,27,19,5,494,165,21,64,2,450,153,202,117,65,115,236,7,196,77,95,32,328,37,14,10,0,318,134,17,391,197,102,308,40,26,120,9,22,4,125,412,389,16,34,194,57,569,402,54,53,8,352,25,758,291,59,3,880,757,503,488,217,90,38,72,48,45,801,177,11,304,509,326,283,260,180,139,137,76,47,41,867,350,629,558,949,838,832,803,775,773,770,754,749,657,597,576,543,514,468,297,255,250 }, -{ 49,159,272,28,9,327,254,158,22,347,95,627,374,286,131,424,105,168,35,39,912,65,68,578,688,0,538,55,24,518,175,154,124,239,634,346,289,224,169,913,577,16,320,364,747,219,185,616,101,716,67,344,1,890,570,170,30,810,109,333,228,420,21,36,439,64,149,23,127,371,194,13,706,827,125,51,114,312,83,187,98,429,613,10,137,829,610,86,310,166,910,31,835,190,406,71,18,242,202,846,141,938,160,44,14,2,385,69,7,48,308,301,258,128,638,237,115,12,165,96,100,103,562,703,221,116,164,50 }, -{ 15,33,77,4,102,317,341,141,117,365,134,13,180,1,40,153,5,115,23,11,197,10,217,196,21,901,22,64,752,352,143,253,244,351,137,51,32,2,269,177,82,59,165,12,3,291,569,202,120,0,854,139,342,86,55,36,372,31,9,898,48,498,349,37,260,7,28,111,125,17,482,49,318,160,457,6,450,44,128,90,275,237,95,210,57,386,873,638,98,523,105,164,89,93,30,719,922,961,509,308,8,14,72,951,403,401,730,391,304,116,326,39,468,56,38,717,94,24,579,817,76,61,96,16,18,546,629,494 }, -{ 134,13,15,23,12,474,569,51,37,10,197,457,961,99,115,4,38,2,165,0,153,5,3,11,719,64,139,431,1,277,120,82,33,6,94,873,14,401,110,7,89,117,351,40,498,128,260,148,54,93,72,629,453,180,21,31,22,9,405,143,141,8,17,77,36,102,44,386,41,509,196,59,450,125,730,55,342,523,86,403,326,45,95,898,98,32,854,237,365,217,391,775,116,349,291,210,179,203,202,317,752,901,372,341,352,177,402,49,57,76,922,475,28,30,144,373,421,318,308,269,90,494,413,46,18,678,899,242 }, -{ 7,2,66,20,58,29,52,74,128,14,135,5,32,97,192,43,38,61,6,631,16,151,87,21,25,315,172,177,46,48,173,186,45,884,70,90,113,77,227,72,226,23,102,51,137,35,210,337,202,59,40,104,402,155,115,269,89,592,81,33,122,13,60,174,112,107,24,19,243,0,145,222,580,76,37,49,64,10,416,318,738,18,353,204,26,491,678,95,4,290,141,54,232,69,92,22,415,140,712,270,217,12,171,496,86,220,27,17,549,294,209,1,355,609,494,425,285,50,665,148,403,560,36,216,400,75,275,307 }, -{ 77,202,13,23,128,318,33,269,141,102,403,117,4,342,153,134,51,40,64,196,32,0,49,177,22,494,291,137,11,21,59,65,95,475,98,165,210,90,18,115,48,217,197,15,275,105,10,120,127,86,28,180,9,453,352,36,39,317,31,125,5,194,402,57,450,349,372,14,116,44,16,300,6,2,284,96,24,20,30,457,12,859,678,299,289,242,114,110,109,61,7,1,216,214,100,326,304,260,237,3,82,789,752,579,576,490,347,344,293,207,205,144,139,93,37,615,373,351,285,421,401,961,391,203,817,923,922,901 }, -{ 2,14,1,46,29,38,6,52,103,50,65,36,67,5,108,75,83,7,22,24,25,69,28,86,208,133,0,323,19,26,484,18,309,782,96,283,236,238,124,160,135,21,10,12,74,87,66,168,17,262,70,412,23,389,16,51,650,278,289,532,45,194,3,756,218,32,220,58,646,244,42,115,95,37,27,13,48,886,49,267,366,226,302,128,54,610,64,516,547,584,137,253,9,308,143,388,141,717,335,480,401,164,185,357,505,109,150,732,602,420,99,285,172,202,891,112,189,324,181,35,418,696,331,90,114,55,294,458 }, -{ 15,5,1,2,3,4,12,11,13,10,0,341,21,180,7,33,197,6,134,17,77,32,365,23,901,37,117,9,8,40,165,102,153,961,51,498,196,569,14,873,752,217,22,94,64,317,59,36,352,474,31,509,99,141,110,55,291,111,457,120,391,57,19,16,82,48,177,401,38,386,349,202,308,139,93,342,453,72,275,18,44,143,351,28,27,90,128,403,269,372,45,137,76,260,318,89,326,210,86,277,898,413,237,719,148,864,730,96,95,79,373,475,61,24,46,30,523,253,98,482,83,546,54,49,50,41,899,758 }, -{ 203,268,206,940,93,417,959,499,473,137,31,44,728,692,8,120,202,559,564,450,127,141,260,326,817,244,22,10,0,23,551,318,144,125,13,523,269,128,299,98,1,253,373,51,494,403,9,116,341,143,64,110,638,285,5,615,642,859,367,55,918,576,21,421,180,386,922,165,105,36,401,2,365,115,899,242,352,28,951,393,704,86,30,901,475,7,762,276,77,384,948,237,32,197,49,492,434,160,661,489,170,15,39,752,317,498,854,453,282,717,6,18,16,569,395,479,351,805,12,958,898,456,48,293,851,308,301,509 }, -{ 15,120,82,10,165,31,0,197,64,260,33,8,93,110,22,351,40,44,77,23,153,13,9,102,4,51,196,125,326,11,450,49,139,28,237,203,386,98,457,18,32,373,95,523,1,21,277,59,854,180,111,202,12,141,898,17,36,116,144,14,115,922,86,57,128,5,45,30,2,391,217,7,817,37,177,730,90,509,719,72,99,16,76,62,453,291,352,475,318,269,403,341,48,134,961,55,24,3,143,899,308,401,137,65,38,615,210,629,317,901,758,342,569,494,661,365,39,247,164,421,704,546,61,6,811,41,642,752 }, -{ 60,7,16,71,43,0,14,20,28,97,68,22,92,24,149,2,35,10,154,13,126,615,608,51,124,362,140,55,805,18,958,576,566,175,23,359,6,1,48,453,158,150,703,21,421,260,173,475,298,153,107,74,64,36,29,925,46,12,882,899,441,801,81,357,246,196,77,69,38,25,9,117,65,49,314,37,484,386,730,336,115,570,403,356,324,221,135,121,19,401,99,939,420,399,859,942,628,610,289,285,259,125,101,95,33,26,702,677,165,4,653,375,185,192,91,515,302,197,104,326,595,318,230,202,191,143,102,90 }, -{ 26,19,6,27,80,25,84,45,17,5,504,42,129,2,240,123,618,29,56,106,113,710,4,76,119,128,14,136,65,64,73,59,1,209,483,53,162,51,90,548,122,205,249,202,40,99,3,460,32,257,62,292,61,214,77,245,57,12,378,141,183,453,34,297,11,184,108,23,255,469,0,403,22,33,58,95,10,86,814,318,769,114,179,402,611,667,130,475,21,151,210,137,742,161,38,177,494,7,436,269,102,194,115,445,18,36,421,13,47,153,880,775,54,133,196,37,49,495,306,311,112,46,52,117,250,28,491,48 }, -{ 15,77,13,33,4,23,102,11,51,5,40,177,0,117,10,202,64,8,93,22,291,32,21,44,31,153,110,1,141,49,115,59,82,180,9,17,318,196,98,269,351,403,137,453,36,95,457,217,3,90,139,128,48,28,898,12,165,450,475,349,341,197,523,18,30,210,317,86,16,260,401,2,961,901,719,57,116,494,854,326,373,125,365,817,352,730,275,134,39,386,105,76,24,7,308,372,37,342,6,421,120,704,144,14,899,922,203,111,304,569,638,72,661,61,629,96,127,99,811,535,498,65,615,752,247,83,402,758 }, -{ 195,271,98,223,167,132,407,146,360,591,1,212,834,121,522,393,293,199,259,354,446,668,590,562,807,191,156,48,765,125,107,147,941,163,727,541,535,465,126,284,21,346,31,279,23,55,18,5,687,16,60,640,13,697,586,178,534,35,20,608,581,150,955,427,68,70,589,43,142,791,463,198,116,51,883,362,9,963,781,202,49,0,818,96,493,7,948,281,120,165,367,798,450,10,44,318,77,105,14,325,221,92,28,22,61,770,101,777,58,93,32,97,467,141,386,33,144,371,75,127,37,108,929,269,411,598,551,128 }, -{ 210,128,202,77,402,318,102,403,33,342,275,40,196,475,6,300,139,29,177,99,494,269,42,503,111,757,277,141,117,52,2,4,678,13,153,12,0,23,59,285,37,137,85,81,7,291,859,657,351,122,82,576,44,31,880,260,216,120,91,78,63,14,11,1,745,65,64,93,854,27,684,22,485,180,76,74,19,3,21,805,49,38,281,48,966,838,631,452,450,421,218,134,26,25,569,341,115,898,738,592,110,98,10,315,788,707,491,483,432,396,319,268,242,125,116,95,62,57,56,50,17,16,9,655,526,453,426,422 }, -{ 40,33,102,23,51,13,117,196,153,77,134,64,128,202,4,59,141,453,65,475,11,403,22,95,0,137,14,139,15,342,210,12,86,318,269,165,115,1,49,10,494,177,28,180,36,291,421,21,57,5,6,217,18,194,99,401,2,457,108,719,125,19,111,260,82,37,27,48,17,3,523,197,133,26,402,120,114,670,352,7,24,730,93,216,90,46,237,50,32,386,361,9,341,351,25,349,300,283,277,38,34,901,365,326,275,98,110,285,45,41,391,44,317,576,961,242,143,16,509,170,31,854,308,54,116,817,757,629 }, -{ 7,14,16,24,18,28,71,2,92,60,35,22,20,0,154,118,168,6,1,97,69,703,302,149,140,150,185,38,109,43,66,68,108,420,29,55,10,158,610,12,65,67,5,701,189,273,570,95,230,429,46,124,246,289,298,51,21,169,143,49,175,23,107,747,126,671,13,64,48,159,25,925,677,137,36,52,398,32,9,251,584,467,164,128,942,19,86,577,847,83,173,336,403,74,50,424,202,232,882,172,17,344,279,638,375,105,314,104,37,125,115,441,356,505,99,253,239,26,221,359,329,194,533,837,517,165,494,601 }, -{ 23,1,15,51,2,13,5,0,7,180,21,9,6,115,197,120,12,165,4,33,457,386,523,202,141,3,14,260,450,48,8,16,77,93,31,341,37,269,40,403,44,730,110,326,32,102,317,137,318,453,352,719,365,18,128,217,153,82,475,36,98,64,391,752,401,901,899,421,308,196,11,498,22,28,351,99,116,10,117,24,817,96,221,30,39,494,509,569,177,203,49,961,144,291,373,615,59,17,801,372,482,72,758,90,89,854,50,629,134,127,35,86,349,922,160,55,244,105,237,143,468,898,210,54,46,670,342,45 }, -{ 132,146,199,107,60,121,126,279,150,441,92,649,16,955,493,195,598,423,653,298,35,407,356,640,362,508,32,21,953,7,360,359,522,18,271,783,5,246,167,0,660,156,534,939,71,191,22,517,590,24,49,259,314,10,607,28,392,13,232,147,68,97,95,14,43,883,118,1,37,581,48,501,354,809,55,108,4,591,12,20,23,347,345,212,467,230,446,241,125,50,941,75,9,31,98,683,929,77,2,672,33,713,463,702,273,61,40,59,70,46,101,58,172,586,357,296,115,779,36,350,109,727,388,236,207,87,105,408 }, -{ 31,44,276,284,98,299,935,116,201,662,9,39,492,144,489,131,567,371,268,0,49,918,127,137,367,254,28,434,293,737,30,203,1,295,22,456,93,125,219,385,23,202,187,393,21,716,105,599,578,51,36,128,141,836,272,269,244,318,384,13,159,395,48,261,96,110,224,616,326,242,35,16,253,5,95,55,64,160,258,158,143,18,100,699,165,24,115,948,120,37,403,86,166,310,12,924,457,855,940,77,10,442,494,101,109,7,197,317,206,68,2,373,617,761,352,285,908,217,332,341,916,228,32,33,518,688,730,473 }, -{ 13,15,23,51,1,0,10,2,4,115,77,5,9,202,3,197,457,7,22,11,165,6,961,12,33,14,59,177,403,21,102,40,453,180,719,217,18,31,120,141,32,475,8,318,569,37,16,341,210,17,386,450,401,28,269,64,99,326,494,317,730,308,44,523,93,352,291,90,125,365,260,36,275,24,134,49,139,30,110,498,421,98,57,196,391,19,117,72,342,153,48,817,873,349,482,901,221,629,76,237,111,899,86,95,216,509,752,304,137,247,82,372,116,758,89,27,38,39,65,203,55,402,45,29,373,300,143,615 }, -{ 162,123,257,184,183,17,229,130,84,136,497,556,152,383,129,452,99,80,3,205,62,57,56,266,106,119,12,128,40,4,161,378,27,14,495,504,381,202,769,469,249,59,77,432,11,34,33,305,64,90,403,240,38,54,5,102,45,32,23,73,618,475,51,361,440,139,775,37,402,471,318,53,21,494,65,141,19,372,453,313,421,177,880,472,757,217,245,548,250,527,2,76,524,349,61,86,216,153,210,196,115,179,10,619,328,269,291,214,72,483,117,209,6,26,22,477,111,95,13,401,114,157,369,211,36,134,48,306 }, -{ 196,153,117,453,134,33,40,23,102,51,13,475,0,14,22,15,12,2,64,670,21,401,730,4,18,99,65,10,9,11,1,28,95,57,128,77,5,38,46,37,403,386,202,719,24,6,108,457,899,139,31,59,16,82,36,165,32,120,961,86,236,48,8,342,141,775,125,308,137,7,54,523,50,269,197,494,318,115,300,260,39,758,450,180,421,277,90,217,341,629,361,49,3,326,114,93,391,291,210,194,328,317,111,17,352,558,110,377,29,275,283,133,485,817,898,615,801,351,160,19,488,569,350,373,109,84,56,183 }, -{ 224,219,187,258,442,871,908,385,836,131,944,574,839,127,98,613,31,116,926,44,137,829,860,160,827,276,39,254,284,36,144,228,201,96,406,1,371,530,202,856,716,93,30,51,9,203,268,737,902,492,23,49,21,190,13,318,843,531,326,269,924,125,367,141,64,77,120,166,816,935,800,242,299,115,456,260,293,274,931,494,395,567,110,217,662,5,317,22,717,100,143,434,128,28,48,86,533,10,295,105,332,55,489,180,365,918,418,102,578,197,244,83,341,576,403,384,625,165,261,177,159,352,291,822,863,473,251,206 }, -{ 195,121,360,590,146,407,156,786,522,132,883,591,626,929,941,259,687,279,379,586,296,465,467,150,178,354,5,21,55,534,70,60,783,771,13,346,340,48,271,581,49,493,163,1,199,147,608,668,125,955,167,562,535,98,518,108,362,18,371,212,446,107,761,878,31,126,50,463,35,818,105,75,120,598,87,0,767,223,165,640,22,447,293,777,159,16,23,9,142,115,658,92,481,44,95,37,807,93,61,58,24,191,33,7,846,395,12,197,4,385,127,423,71,140,82,427,144,116,17,117,2,363,698,246,39,64,32,781 }, -{ 2,1,29,14,6,46,52,26,75,38,5,25,19,50,96,70,108,114,309,36,103,74,17,65,27,112,45,262,236,220,145,218,58,42,86,516,24,366,22,7,67,21,12,66,532,87,412,18,480,283,602,323,137,3,163,226,238,0,194,51,32,28,10,69,171,37,23,115,208,128,331,394,135,48,99,64,13,433,285,160,61,782,113,357,308,222,95,484,401,16,141,294,151,287,223,83,646,124,389,361,894,866,545,421,54,324,4,278,388,396,186,650,594,53,168,453,289,202,59,253,181,90,273,138,150,403,756,606 }, -{ 15,82,120,10,197,260,0,165,351,8,64,31,110,93,9,22,117,13,457,450,1,44,33,23,326,102,49,125,898,153,719,77,854,523,18,14,98,12,40,7,961,2,115,373,180,5,51,386,36,111,141,95,730,28,196,922,139,203,55,116,4,817,498,899,128,30,177,86,569,144,661,99,37,202,16,24,65,318,21,873,11,59,6,277,217,391,269,341,38,32,291,143,237,352,210,317,3,365,509,474,349,758,704,642,216,39,615,137,453,275,403,401,94,300,304,629,247,372,242,342,90,48,752,901,801,308,221,811 }, -{ 7,66,97,172,232,192,226,2,74,324,52,29,135,92,568,222,43,107,353,87,387,580,500,38,620,448,331,526,140,330,5,138,294,174,356,20,14,262,298,32,357,145,173,853,6,359,21,126,58,16,204,808,64,888,337,104,314,673,35,22,729,95,872,25,278,380,70,802,37,583,426,1,49,12,112,69,75,65,86,61,45,60,48,10,246,90,230,0,42,355,24,220,415,85,81,889,46,885,36,825,287,28,194,72,171,792,392,632,560,280,312,50,71,115,76,54,26,18,151,155,707,587,89,17,4,764,147,59 }, -{ 62,129,123,162,183,507,618,136,249,152,211,57,77,184,205,59,130,4,128,41,11,40,117,17,229,497,361,257,3,33,38,313,452,266,378,248,153,64,106,90,210,383,119,12,328,214,99,432,216,157,196,86,202,556,179,54,102,80,37,381,402,471,134,245,177,5,514,369,188,339,440,305,275,524,141,45,269,84,710,529,291,403,139,342,115,56,318,209,76,504,421,372,742,619,292,240,237,79,27,14,775,22,19,10,23,457,95,21,207,488,13,494,180,542,65,300,401,306,32,34,114,26,215,25,217,769,151,110 }, -{ 13,1,4,5,2,23,115,15,3,51,6,0,7,77,341,217,11,141,177,33,317,12,180,21,365,197,202,32,318,352,269,102,901,9,291,10,165,40,403,752,59,22,8,31,401,569,349,494,120,308,304,44,110,90,17,386,64,93,37,247,153,210,326,14,450,28,373,117,16,372,48,196,457,260,98,275,475,498,237,453,125,30,18,203,523,342,49,509,391,36,961,128,873,134,719,116,629,24,482,421,39,221,216,139,244,72,730,253,95,817,55,86,143,615,57,661,351,704,144,127,899,105,76,864,576,82,922,758 }, -{ 6,26,235,145,19,47,112,78,648,624,630,27,85,64,42,95,122,444,25,644,113,70,108,453,29,632,130,711,53,222,74,390,32,65,237,412,416,280,665,287,813,138,730,307,73,680,283,14,196,52,34,4,312,51,236,226,90,262,17,337,22,180,59,331,500,128,86,884,315,194,690,114,133,498,849,137,50,200,3,256,21,2,49,45,33,23,13,66,141,409,445,297,288,57,381,719,11,396,289,247,87,163,165,1,250,5,46,115,153,525,99,183,76,746,324,63,792,675,294,316,56,214,28,583,751,125,285,503 }, -{ 51,23,99,12,15,13,153,10,117,403,120,37,82,165,128,453,401,64,202,197,2,115,110,14,260,457,21,475,5,308,0,38,93,719,31,3,22,134,141,1,33,196,386,180,351,17,421,569,44,326,125,523,961,11,730,269,137,402,318,450,4,494,8,49,36,9,98,18,7,95,391,6,54,629,328,32,237,28,40,19,86,775,373,57,116,41,854,77,79,59,899,352,94,474,102,203,509,477,65,758,89,341,285,221,901,217,111,177,16,361,144,30,880,757,498,46,29,27,670,105,898,143,24,62,72,277,317,55 }, -{ 16,24,71,18,92,108,35,60,146,64,7,118,246,199,126,121,32,50,9,267,649,156,167,830,271,133,273,140,36,68,5,230,132,247,21,14,1,640,12,563,48,0,87,388,75,2,237,220,330,86,46,354,115,65,672,304,128,55,751,522,180,360,95,28,236,191,516,114,163,696,149,953,189,22,54,565,141,51,137,217,674,412,352,49,340,23,633,37,309,458,202,39,10,394,58,103,70,597,125,262,72,38,947,726,591,502,437,195,164,363,67,641,514,602,954,124,864,448,107,150,143,101,366,283,13,678,317,177 }, -{ 15,2,0,13,1,4,3,5,23,7,217,6,9,115,51,8,341,10,11,317,372,180,365,77,33,12,22,247,901,18,120,197,457,14,16,165,291,28,21,202,31,349,961,719,102,260,32,453,30,352,523,40,752,569,730,24,82,450,304,308,110,437,93,117,44,177,36,351,196,403,64,17,318,475,153,899,134,269,494,922,401,386,128,48,482,316,326,37,137,49,57,873,125,39,854,59,55,509,90,579,342,35,817,629,758,373,210,98,498,237,898,116,65,111,144,139,615,19,670,241,20,56,638,468,89,95,275,801 }, -{ 234,639,178,416,77,455,5,49,142,202,450,427,0,147,329,21,198,315,61,557,344,13,113,32,318,120,22,23,325,48,259,534,494,105,95,347,518,798,39,884,159,58,481,99,817,623,878,291,112,711,70,64,17,1,31,320,51,265,158,65,465,128,362,192,137,236,845,260,403,44,310,141,196,342,177,30,7,271,241,195,135,269,28,290,210,929,15,4,307,170,125,663,102,33,275,263,132,859,408,294,194,786,581,402,301,153,86,523,98,150,423,346,167,25,237,415,36,858,682,592,352,117,100,12,37,10,709,146 }, -{ 31,1,44,36,116,64,55,5,180,2,22,352,98,86,127,141,12,164,13,498,125,115,144,253,170,4,242,137,752,197,128,105,7,244,0,160,237,23,341,21,165,9,365,299,901,301,3,951,317,10,6,28,864,51,338,269,15,268,844,83,169,217,202,873,638,93,569,509,96,824,546,8,37,456,740,293,512,203,77,395,479,318,206,14,776,599,95,506,33,367,276,11,48,685,954,285,239,457,535,201,492,762,717,401,965,533,102,393,482,208,49,109,391,601,558,489,67,870,284,947,961,403,708,946,35,434,923,40 }, -{ 120,217,260,141,23,77,13,51,317,1,180,269,15,115,202,450,137,110,373,291,21,352,64,349,5,177,82,326,351,48,318,854,341,36,365,304,165,197,0,32,922,372,128,96,9,93,752,12,22,523,160,10,2,244,7,457,4,28,898,386,86,901,661,498,719,33,16,275,90,247,203,143,11,253,482,40,37,83,403,730,494,102,50,18,961,615,473,221,237,8,817,30,968,125,704,216,39,59,14,67,6,117,210,35,49,95,72,342,308,24,89,453,55,134,475,76,69,116,17,61,31,3,437,864,70,899,576,98 }, -{ 26,396,648,6,112,122,624,145,287,19,222,416,42,25,573,138,74,651,644,151,66,113,445,45,85,665,280,29,525,204,64,174,337,680,87,884,135,53,65,70,436,27,95,58,297,881,194,73,80,746,544,235,17,86,2,90,243,32,22,5,128,1,609,353,311,141,61,315,307,491,226,106,0,52,81,813,614,209,255,7,632,75,114,10,36,186,580,415,289,63,611,14,34,33,49,214,28,792,117,250,312,283,77,125,172,108,389,76,192,208,355,237,667,56,4,91,165,294,40,348,148,635,102,123,256,153,46,549 }, -{ 156,360,522,271,146,354,21,446,121,132,5,463,591,340,195,727,586,18,48,407,13,49,167,32,668,60,199,566,23,16,447,698,955,575,9,658,296,493,608,150,126,0,534,35,24,581,92,71,590,363,107,279,141,125,640,31,212,4,929,411,467,562,10,1,51,115,783,165,191,22,623,68,598,379,61,12,293,273,202,95,197,303,163,663,269,108,37,101,221,118,621,391,76,28,17,40,109,7,767,260,55,518,120,33,11,77,259,39,347,941,44,252,713,478,98,140,408,350,93,626,346,264,900,509,818,30,170,763 }, -{ 21,5,61,49,98,23,95,32,612,178,259,51,182,48,13,481,120,77,683,660,427,291,147,64,70,4,465,33,344,269,241,0,17,767,318,263,202,141,107,415,817,450,180,22,534,392,362,125,116,347,11,929,350,121,595,408,423,352,293,260,196,165,117,105,102,87,86,59,37,18,7,3,557,376,845,663,579,541,490,356,316,115,90,163,928,711,28,132,590,407,941,922,704,645,523,360,346,284,268,232,210,203,195,177,144,134,118,97,65,60,40,16,1,298,153,146,58,937,798,414,113,31,771,246,207,142,281,647 }, -{ 468,89,358,79,365,94,179,205,317,405,482,498,245,72,115,341,217,180,413,490,111,734,247,431,188,216,37,474,152,452,11,629,569,873,752,749,497,197,4,339,308,13,12,59,901,428,864,579,40,76,23,372,291,875,10,352,134,961,117,77,542,528,401,51,588,349,471,529,33,464,546,477,645,139,221,1,377,38,21,99,36,177,509,64,449,316,14,2,304,143,102,437,9,32,196,741,3,165,5,275,202,128,54,277,237,153,210,743,457,430,300,773,485,460,141,17,0,350,22,288,421,257,270,48,8,184,137,15 }, -{ 24,35,71,68,16,18,92,118,375,108,7,101,302,175,336,154,60,273,14,124,9,398,230,140,0,150,55,149,28,345,189,399,246,191,65,346,69,722,212,46,1,458,167,22,429,314,2,267,126,674,21,388,439,97,67,38,114,10,48,252,628,95,364,251,882,50,133,637,36,49,39,109,12,823,172,768,602,103,236,650,5,83,520,66,232,64,517,32,562,847,694,815,589,702,107,96,51,594,23,695,363,298,37,535,462,484,29,13,796,86,467,886,604,806,868,121,419,125,54,755,451,168,100,135,570,158,6,169 }, -{ 421,453,51,801,730,475,23,523,386,670,401,719,13,629,899,365,403,758,457,115,494,569,805,958,576,543,697,165,615,221,423,817,450,33,488,308,197,102,66,21,514,388,56,14,38,734,341,117,7,326,69,467,961,880,323,196,153,19,202,886,770,128,273,97,120,811,642,532,458,207,110,24,10,6,1,540,67,0,753,554,390,135,134,92,73,52,43,894,37,32,743,214,114,103,90,65,29,891,847,782,125,451,269,208,75,754,602,480,244,229,200,133,130,119,16,9,426,162,83,40,22,2,42,25,203,123,4,901 }, -{ 113,311,614,29,491,145,45,112,80,6,151,631,209,315,74,61,27,2,73,5,287,66,26,243,25,70,396,611,667,52,138,19,58,454,869,122,222,17,186,106,87,255,445,32,64,496,42,297,1,135,684,227,4,128,644,7,86,624,76,337,95,416,65,22,72,85,59,14,204,148,90,21,738,174,250,53,119,141,280,10,483,0,833,137,651,690,549,46,75,226,11,378,37,665,155,742,200,56,194,207,57,177,179,525,12,114,84,77,48,495,40,469,172,292,307,161,49,38,884,887,655,573,881,89,425,18,36,33 }, -{ 471,339,188,4,11,59,377,79,12,99,94,102,77,33,51,111,542,37,342,152,961,13,474,403,40,202,196,153,128,3,452,453,177,229,431,475,401,23,139,117,184,266,157,57,134,115,494,210,300,17,291,402,129,90,32,529,629,5,141,76,775,72,64,275,38,21,318,757,569,277,216,162,14,421,313,123,269,880,89,1,2,497,257,62,197,405,27,45,285,54,304,148,485,217,15,457,41,10,6,179,165,205,180,137,477,349,130,488,245,19,523,432,437,260,22,120,95,769,372,0,352,381,249,618,482,308,237,7 }, -{ 15,40,4,11,33,120,10,82,165,77,110,93,31,8,260,0,23,22,102,51,13,59,44,351,125,64,197,139,32,9,21,326,28,450,196,180,98,203,57,141,386,49,373,12,111,95,1,391,5,457,99,403,115,18,453,116,202,134,475,523,719,854,37,117,128,401,237,48,144,177,14,898,36,217,2,90,308,269,342,758,30,210,318,277,730,494,17,509,922,352,291,817,86,3,65,16,901,24,194,402,105,38,137,7,341,317,29,961,39,629,55,72,76,300,661,752,421,899,242,54,775,247,349,365,569,143,615,485 }, -{ 16,71,24,35,68,18,118,60,0,28,124,92,7,55,9,419,375,14,109,175,149,101,126,252,302,346,150,439,108,154,158,570,169,185,364,22,273,49,65,917,701,329,168,962,420,191,925,39,628,107,2,1,604,46,140,67,97,21,535,265,38,69,159,942,677,10,722,336,105,345,694,467,703,48,5,95,246,553,810,882,20,83,333,43,12,706,13,637,826,100,23,847,671,36,167,279,121,793,189,199,374,50,125,51,212,230,286,66,272,566,6,484,634,344,32,429,289,327,86,103,96,601,114,441,517,37,64,298 }, -{ 17,45,227,106,209,243,21,290,255,400,207,48,263,270,62,186,119,2,496,454,50,32,3,5,52,221,29,425,136,408,430,46,513,171,14,659,54,84,787,721,741,56,281,38,536,80,181,378,240,742,587,552,1,306,76,123,241,541,655,328,428,61,129,41,666,72,502,57,89,12,760,540,115,155,148,383,449,794,37,96,361,152,11,34,214,4,311,51,440,474,592,431,64,790,202,179,405,350,292,36,90,67,663,6,141,59,13,498,103,583,130,697,514,40,211,99,58,10,128,237,217,770,27,869,157,828,834,391 }, -{ 340,354,586,658,668,156,195,698,363,447,883,296,1,411,303,18,379,9,919,360,51,621,98,31,48,591,371,13,21,446,163,5,121,70,132,125,23,759,846,127,761,478,60,293,223,271,146,385,120,664,691,108,763,82,634,638,75,4,260,24,807,774,144,44,522,407,30,457,32,16,914,463,126,777,335,93,771,367,71,49,39,12,0,687,351,118,299,201,40,7,50,848,518,284,922,854,758,538,364,279,11,10,724,310,217,326,64,393,77,541,767,167,150,137,105,103,101,87,58,17,115,286,225,33,401,867,850,663 }, -{ 277,153,111,12,23,51,474,99,38,139,37,457,453,117,542,41,79,629,196,401,13,11,14,569,961,102,33,134,188,89,40,157,54,328,72,775,57,115,17,94,413,339,431,15,377,369,3,477,308,719,248,165,313,4,468,45,485,148,32,197,76,734,216,62,2,21,10,587,405,64,5,59,29,34,6,210,82,509,471,128,155,152,730,177,490,7,266,361,52,120,475,1,0,873,19,305,758,9,899,125,22,110,386,300,211,93,529,229,48,260,237,180,65,50,528,880,77,391,86,36,27,588,326,546,482,402,514,56 }, -{ 18,16,24,0,159,35,68,49,105,9,60,71,101,28,344,55,7,118,320,109,424,14,327,455,239,22,286,170,272,310,1,374,252,154,419,329,167,158,124,518,23,95,709,39,2,21,51,65,13,301,5,890,48,92,265,98,191,212,12,10,108,137,347,128,30,538,31,364,125,202,37,553,20,149,121,557,185,36,677,67,333,169,338,146,127,346,46,175,64,6,126,100,577,50,254,32,512,916,33,403,86,395,69,242,806,371,115,96,44,77,318,221,479,694,616,102,165,623,83,910,627,737,917,38,793,578,846,375 }, -{ 0,105,9,16,49,18,24,68,101,518,158,320,28,35,301,170,272,890,344,286,109,327,39,65,55,512,7,1,127,916,98,118,252,60,737,159,239,371,21,71,124,395,154,14,48,455,623,242,31,23,51,419,374,364,761,5,2,12,137,310,95,125,293,333,846,202,13,616,329,347,338,385,30,37,131,44,938,479,128,836,709,22,538,265,506,64,793,627,10,67,167,299,403,827,212,713,578,149,116,32,36,219,100,910,254,553,175,318,677,108,185,50,6,96,46,685,221,421,424,191,577,92,93,269,599,187,165,284 }, -{ 141,180,1,5,352,365,13,2,4,217,341,115,269,317,15,23,752,3,7,901,6,0,197,21,51,31,77,202,44,318,32,64,372,873,498,10,93,8,11,244,33,9,165,12,102,137,22,253,49,48,237,116,30,98,125,39,177,569,401,28,143,291,308,864,509,40,120,349,403,37,105,391,144,153,482,203,450,110,421,127,72,576,494,95,453,260,247,96,475,373,326,117,36,717,304,131,128,134,90,89,14,457,854,221,206,196,55,811,82,947,629,351,922,386,59,961,734,670,17,437,661,224,201,16,88,76,164,187 }, -{ 51,4,23,102,33,300,40,485,453,880,153,19,17,196,27,342,78,26,53,403,47,77,210,0,475,117,73,2,57,34,11,5,200,13,99,494,14,1,22,12,176,421,64,111,41,21,368,361,59,757,231,130,123,6,139,128,134,401,106,18,56,49,322,317,177,45,775,48,115,165,108,10,125,65,504,495,197,32,605,229,80,341,221,183,390,813,46,37,618,306,95,719,554,152,753,736,543,444,161,402,277,119,630,236,216,122,113,29,730,237,25,899,217,714,383,297,472,445,378,250,38,678,670,527,503,469,412,318 }, -{ 62,440,56,184,229,183,556,130,3,136,548,152,266,99,162,161,17,57,84,452,305,12,383,257,123,403,34,40,527,14,205,349,504,555,497,328,4,361,202,139,775,33,38,37,128,475,129,880,313,381,757,102,11,196,59,119,401,432,402,54,471,453,215,77,23,514,507,585,51,211,153,80,494,495,469,236,477,117,111,64,421,240,369,106,21,214,277,157,308,5,291,141,378,249,13,2,803,619,318,45,76,177,27,485,472,134,41,32,412,339,216,65,524,197,10,72,114,176,165,53,90,372,22,188,245,86,217,543 }, -{ 13,23,115,51,141,202,77,64,269,217,33,318,102,32,21,128,137,0,177,180,4,5,291,9,48,352,10,197,90,196,317,40,153,7,372,18,15,349,22,2,247,165,275,6,403,11,117,125,237,59,3,16,752,494,28,342,304,31,341,134,14,98,86,210,36,241,12,244,49,95,24,498,30,116,39,1,143,901,453,20,450,144,365,402,221,17,475,93,203,127,65,253,216,72,326,120,164,576,35,19,96,44,437,160,421,308,83,67,864,954,569,817,719,25,101,100,61,55,57,284,805,523,401,60,293,285,105,88 }, -{ 1,22,36,105,170,28,55,239,86,31,2,95,5,9,127,0,98,301,12,64,67,7,49,320,109,654,44,83,10,169,208,143,21,312,35,13,23,128,141,740,125,242,14,512,293,116,160,237,51,395,50,338,37,159,96,6,933,114,115,708,299,751,185,137,844,505,269,168,69,48,638,103,597,928,202,180,244,323,16,352,253,165,3,713,197,194,892,39,24,599,65,54,341,285,318,286,46,685,456,951,4,623,824,32,133,158,365,584,601,535,38,498,144,218,251,841,533,506,30,371,217,479,8,503,284,870,752,276 }, -{ 15,0,1,2,5,13,23,7,901,9,6,8,12,51,4,3,457,180,341,898,82,22,115,10,141,120,117,31,351,14,202,260,197,28,269,33,153,961,64,30,44,37,93,18,569,854,11,21,16,77,217,137,365,386,719,237,134,391,110,128,523,49,450,36,629,498,352,102,125,326,317,40,401,509,730,318,196,24,203,546,308,39,116,922,55,752,32,86,817,17,403,90,98,35,453,95,373,59,99,873,177,758,111,143,38,291,242,139,65,48,244,899,372,285,642,349,247,144,734,638,615,482,277,72,253,421,89,475 }, -{ 274,98,100,39,1,265,438,190,310,625,382,30,530,223,909,96,264,593,166,778,88,812,410,960,731,557,252,31,125,21,539,23,254,9,48,51,116,639,44,478,393,131,127,13,101,0,293,284,329,795,404,840,144,656,435,333,724,616,5,219,228,321,272,421,834,165,921,957,224,105,32,36,93,128,697,367,541,669,765,242,221,49,676,137,418,455,160,748,83,897,163,202,682,578,475,453,553,386,807,217,213,551,613,406,335,403,141,466,197,827,180,948,37,158,187,115,905,821,791,203,352,286,258,371,120,863,730,2 }, -{ 212,18,118,447,167,781,363,411,271,647,146,121,60,562,664,621,463,815,478,1,16,446,9,777,354,628,21,936,48,101,932,132,68,191,98,520,522,223,71,264,5,24,759,55,199,575,727,566,126,13,23,724,156,360,691,125,0,407,591,608,49,293,604,221,51,35,92,195,346,31,107,252,108,375,586,96,154,914,682,541,807,150,39,589,124,848,265,69,22,105,50,834,32,364,302,393,329,12,4,10,382,535,404,28,166,765,100,668,273,33,149,88,706,806,163,279,95,410,598,44,335,955,7,30,67,284,159,467 }, -{ 24,28,14,7,35,16,22,65,0,1,2,158,49,109,55,159,124,95,18,67,149,105,71,239,169,68,108,185,424,289,9,12,69,46,577,10,175,154,320,5,164,347,6,747,344,21,835,36,286,50,38,83,170,654,892,23,420,92,114,51,64,143,60,13,374,189,302,429,140,48,103,570,118,32,37,29,336,610,133,327,312,398,39,484,128,638,168,301,272,125,202,137,86,150,30,194,230,671,345,584,703,96,54,115,273,251,310,283,141,518,98,308,20,538,401,101,127,52,31,221,346,455,535,236,403,389,458,267 }, -{ 105,272,131,22,286,239,320,327,98,127,219,9,185,224,374,187,55,28,578,86,31,258,36,913,616,535,1,95,538,64,164,837,634,109,116,601,44,654,312,170,910,49,708,623,115,23,5,0,713,371,201,159,13,505,2,197,83,892,7,35,67,180,533,928,51,933,317,737,301,751,10,716,352,284,6,160,776,237,509,916,165,242,498,251,531,12,395,39,924,137,638,385,293,269,30,276,168,141,217,254,752,208,144,569,896,836,143,346,24,824,21,4,546,468,169,308,14,761,128,345,244,318,482,365,3,597,391,384 }, -{ 28,301,22,31,127,512,105,98,395,109,44,299,293,95,9,320,1,599,685,900,55,0,239,36,763,338,242,49,116,125,841,168,870,456,286,23,276,506,86,35,284,51,185,65,492,159,2,24,374,479,13,393,928,5,144,7,64,169,713,141,12,137,327,21,202,14,268,237,16,935,10,201,558,272,538,67,401,367,37,143,83,308,424,164,312,128,158,115,48,165,918,654,194,269,923,740,39,347,244,623,18,6,489,253,318,114,963,160,352,289,124,180,68,96,420,170,203,175,131,421,219,434,197,391,221,762,453,93 }, -{ 2,58,29,52,1,186,334,46,5,14,151,75,45,400,155,50,61,227,163,262,502,69,549,70,220,223,48,38,311,112,67,409,113,780,7,243,675,767,27,17,209,24,103,80,394,96,21,315,54,307,513,536,83,287,787,309,37,281,6,16,106,807,171,587,496,267,19,32,631,474,270,491,12,35,181,26,583,454,74,869,820,852,36,324,721,255,845,278,64,73,335,357,89,87,140,72,537,25,760,290,18,659,614,430,189,66,97,133,663,114,108,592,552,128,331,666,764,141,606,3,86,380,486,366,76,65,148,10 }, -{ 7,107,232,135,97,387,92,356,298,66,14,2,192,359,278,172,52,357,126,324,448,35,60,526,314,16,38,29,46,330,380,43,362,259,392,230,20,226,74,140,262,246,279,147,24,825,64,58,5,121,568,87,294,32,220,501,132,21,612,465,95,150,86,104,620,18,12,71,173,581,54,534,0,893,37,22,808,583,178,353,90,10,580,550,146,707,802,600,606,331,194,112,222,28,69,660,853,65,70,199,171,68,560,1,174,36,50,77,49,48,779,500,204,683,493,414,6,61,25,764,55,138,33,102,750,888,307,45 }, -{ 20,43,104,414,560,426,707,784,173,319,861,7,819,81,715,422,879,0,376,330,74,95,97,52,32,192,64,38,22,49,526,356,66,204,681,397,207,140,232,5,470,65,693,61,359,636,387,500,107,324,28,91,712,18,10,29,147,77,21,595,392,113,577,172,729,2,325,24,138,92,33,347,125,86,945,102,90,306,40,115,4,198,370,583,230,174,12,904,180,11,858,312,153,124,17,587,750,76,59,69,344,298,3,135,13,37,46,825,718,357,165,348,315,214,72,887,117,289,353,246,196,141,84,36,427,51,237,48 }, -{ 104,74,636,204,355,222,66,81,0,145,25,319,784,746,192,750,29,20,173,174,792,64,90,138,280,715,65,194,91,879,525,32,22,4,348,287,43,95,18,422,7,214,415,86,77,42,40,6,681,289,59,524,151,33,10,52,712,2,28,544,945,13,597,102,45,177,97,21,57,11,243,49,85,36,312,500,426,693,141,5,673,624,396,16,1,122,87,115,648,24,26,186,632,233,67,17,172,414,304,416,123,12,353,389,117,651,580,69,588,751,153,113,874,112,14,23,227,216,128,58,217,197,27,875,114,635,137,707 }, -{ 101,0,9,35,68,154,252,39,65,28,364,124,166,100,149,336,158,289,346,439,429,419,67,55,114,570,694,30,16,265,24,109,484,88,1,329,69,194,404,637,49,189,389,547,133,398,703,826,671,283,22,168,610,175,212,190,7,83,345,103,64,14,768,399,71,274,333,344,230,95,799,50,21,706,36,722,677,420,10,185,962,51,23,18,553,140,254,159,125,967,535,676,46,48,310,2,86,96,952,264,13,12,169,382,5,596,108,323,705,782,251,118,208,857,702,756,562,865,438,218,60,267,131,237,37,755,105,272 }, -{ 57,14,4,236,231,59,369,361,300,585,342,51,23,719,401,13,38,176,46,202,62,402,3,56,210,54,12,2,412,803,381,457,215,11,507,128,40,757,555,77,514,961,32,730,629,322,161,328,37,162,33,133,283,108,129,21,211,34,102,494,17,152,130,29,99,139,153,52,527,472,181,79,123,475,229,6,497,899,453,240,758,194,205,184,188,183,177,0,136,377,305,134,155,248,165,157,425,290,440,714,495,209,739,196,277,269,80,50,556,10,805,64,65,523,503,386,257,141,16,7,5,179,403,84,600,469,318,180 }, -{ 2,1,3,5,141,6,7,15,0,269,180,64,33,77,10,352,102,13,202,128,318,11,197,17,14,4,291,12,134,117,9,120,752,165,153,196,137,217,498,341,349,260,110,21,342,93,40,31,237,23,317,44,82,115,22,16,59,19,86,51,351,678,32,57,36,961,37,450,111,125,365,457,27,143,901,569,95,79,203,49,403,873,326,8,139,494,864,372,28,98,402,116,18,244,56,854,509,48,719,386,947,29,922,954,76,94,373,38,45,523,25,391,285,99,730,546,144,475,275,72,90,164,210,26,24,453,817,253 }, -{ 5,21,61,48,32,202,1,70,259,13,58,115,22,23,178,90,0,494,51,12,475,453,182,18,465,403,49,17,76,450,120,142,318,141,137,147,534,455,402,146,132,128,64,31,11,522,260,771,953,922,859,523,420,269,241,221,207,175,121,72,37,6,4,3,2,768,205,179,415,376,362,28,10,237,30,937,702,113,68,16,9,798,247,590,326,197,165,626,344,279,347,878,125,195,955,933,928,868,854,851,821,815,795,780,765,727,678,668,657,576,562,540,503,502,493,488,482,430,423,411,365,288,285,281,273,118,87,65 }, -{ 205,141,59,152,245,4,352,72,497,76,216,247,79,452,11,588,94,21,188,217,89,875,77,339,864,954,464,269,115,148,64,12,37,529,38,111,32,358,180,5,316,405,471,490,45,474,365,317,349,752,177,288,437,498,51,99,90,468,102,372,128,318,48,1,237,17,542,23,947,241,431,221,54,3,33,291,2,734,197,413,377,270,460,13,401,961,873,341,14,196,579,482,244,569,629,40,308,645,184,257,304,678,720,449,36,10,202,749,275,134,117,428,15,290,153,143,453,57,139,7,430,6,350,769,281,210,476,403 }, -{ 15,1,0,2,5,13,4,3,7,6,23,365,341,115,8,51,9,77,31,10,457,93,44,569,120,197,202,141,12,961,165,33,317,450,901,11,260,55,110,352,22,719,730,453,217,98,82,64,401,18,102,40,21,269,523,403,70,386,49,351,752,105,498,28,16,629,308,318,111,61,898,30,117,475,509,391,817,95,922,342,36,59,494,210,134,899,137,421,873,116,854,14,32,177,196,139,153,734,128,143,291,24,20,349,37,758,372,247,90,326,690,801,113,216,48,275,670,27,125,25,39,57,638,17,304,35,237,244 }, -{ 5,2,50,58,171,186,46,29,14,52,45,38,61,155,17,218,1,281,334,151,227,400,48,487,502,36,54,760,67,133,103,114,21,96,328,236,366,243,80,552,209,83,311,828,27,745,160,920,19,24,766,32,6,108,832,65,12,223,106,514,3,433,70,787,842,99,28,549,113,112,834,540,361,163,26,37,536,516,496,137,765,75,480,454,754,532,780,0,430,966,739,22,238,86,474,51,767,283,18,25,583,115,285,587,309,7,73,287,72,255,23,600,412,128,822,807,13,323,315,208,76,119,545,10,956,270,64,16 }, -{ 457,795,70,120,846,48,23,761,125,318,64,751,415,291,758,221,763,202,391,269,87,401,77,352,237,21,165,128,96,163,558,13,1,260,137,494,5,51,851,767,141,197,546,557,867,597,49,518,102,349,450,623,509,33,98,177,678,922,900,743,498,293,31,223,342,403,371,32,180,873,854,0,217,884,196,153,95,4,44,308,7,2,541,17,30,127,765,58,351,372,386,117,807,6,903,704,182,845,22,134,663,210,105,39,27,402,326,859,307,159,285,281,82,817,719,455,353,312,192,61,931,523,203,947,247,207,385,45 }, -{ 23,51,13,40,453,102,33,4,196,77,117,475,64,153,0,22,10,11,65,59,15,12,134,21,1,403,139,202,95,14,210,28,177,108,18,115,141,165,57,137,128,457,86,2,31,99,6,37,36,401,269,49,9,318,82,7,275,180,5,24,217,342,485,16,111,277,125,386,291,44,32,300,197,19,421,352,46,48,194,730,341,237,17,120,93,494,283,133,90,25,523,260,3,285,114,89,216,8,317,899,38,961,719,498,312,50,26,20,365,351,67,391,54,110,373,326,289,208,168,546,752,569,308,304,98,377,402,361 }, -{ 229,152,266,57,381,452,432,313,471,12,99,17,184,339,369,62,4,129,59,157,128,77,497,3,11,38,123,202,162,37,291,188,257,40,403,136,5,216,21,205,102,111,775,79,51,475,14,33,32,45,402,453,54,619,90,119,115,64,76,177,2,106,361,377,72,880,139,23,494,130,277,757,183,349,84,401,27,56,308,89,80,19,318,141,117,1,94,10,328,529,474,210,245,249,41,36,217,269,421,86,618,6,148,556,342,305,588,179,383,0,134,34,514,477,304,769,542,22,214,378,275,137,13,65,300,95,285,82 }, -{ 49,109,159,28,272,22,327,9,105,95,254,168,131,374,286,347,39,35,424,158,55,175,169,420,627,578,312,67,346,194,0,912,1,224,219,65,86,239,892,36,83,518,114,688,320,538,127,634,584,913,439,371,64,616,30,69,24,10,535,187,336,2,228,7,716,289,68,98,601,23,16,31,164,654,208,505,51,258,14,13,170,874,128,44,12,837,103,890,160,115,385,137,345,50,185,143,116,756,251,141,101,96,190,747,333,125,202,5,166,708,133,21,637,570,242,237,46,835,189,165,638,149,610,706,100,751,48,577 }, -{ 5,61,29,58,311,2,45,209,80,52,454,227,243,106,17,496,592,869,1,151,255,334,75,667,287,70,738,549,171,48,46,483,663,74,155,14,50,163,207,666,290,6,186,119,32,27,378,21,220,659,263,112,136,84,742,307,833,7,400,780,469,767,62,64,72,513,113,148,262,56,409,270,161,331,315,635,425,89,19,38,495,631,3,76,73,383,887,502,69,66,34,223,128,26,240,54,86,306,87,491,96,67,845,408,135,814,37,4,25,445,181,95,294,24,90,226,103,10,405,237,12,297,141,22,655,129,11,16 }, -{ 260,244,373,276,44,269,141,228,110,131,574,219,137,30,839,717,224,217,661,36,352,567,406,120,1,116,253,93,318,160,202,341,31,21,88,201,39,190,187,77,372,752,96,180,64,851,268,55,98,317,82,22,258,613,326,86,351,48,51,23,115,295,213,100,539,291,144,860,35,922,864,9,450,261,489,28,365,105,13,177,442,840,515,321,83,166,856,854,49,935,203,530,284,0,274,349,816,69,197,954,251,165,67,10,811,434,247,778,143,385,531,254,968,957,237,498,843,127,384,669,466,824,102,223,32,5,871,800 }, -{ 99,12,139,79,453,11,277,196,474,51,37,542,111,401,23,94,188,775,33,13,40,102,313,339,961,629,153,431,477,4,38,485,475,300,115,569,134,117,377,157,210,59,14,471,266,15,89,328,880,148,369,57,457,54,413,405,308,403,197,152,128,72,64,165,734,10,3,2,21,17,670,488,719,202,229,82,757,0,5,402,32,41,77,275,177,45,76,29,305,22,342,36,498,1,730,46,494,184,28,318,93,31,529,162,514,6,269,27,482,62,110,873,528,452,179,120,141,137,86,421,317,7,237,129,8,18,361,428 }, -{ 68,35,16,149,24,71,9,69,0,18,67,118,101,212,65,191,114,230,167,133,124,103,399,140,154,1,50,283,246,398,60,7,64,565,55,695,39,218,336,723,375,302,796,28,108,238,267,705,83,189,330,100,23,486,589,702,562,458,21,443,175,13,361,48,75,345,92,96,22,51,181,237,532,755,46,30,2,115,88,14,10,86,363,650,732,335,12,36,49,54,891,520,217,411,516,141,166,95,412,394,641,180,37,5,906,478,447,223,251,247,264,433,252,389,146,480,98,596,602,545,830,346,664,309,271,121,364,628 }, -{ 88,274,435,30,613,100,131,829,166,530,382,93,960,795,190,127,856,466,957,187,521,264,473,778,31,254,228,716,406,1,686,39,863,203,410,224,800,457,137,9,160,704,219,438,28,924,944,120,450,144,836,492,299,326,260,44,116,840,98,202,83,96,321,36,0,21,921,55,141,367,341,827,639,385,265,158,128,772,201,49,539,64,258,317,180,110,86,269,851,442,295,125,908,77,662,276,23,669,744,272,373,242,105,82,931,48,35,968,351,168,318,859,115,578,822,33,557,418,371,616,32,625,67,213,217,109,523,365 }, -{ 167,118,212,18,16,71,60,24,191,375,411,68,363,146,447,101,199,589,271,562,126,302,647,121,815,9,628,566,273,35,575,664,21,92,55,781,621,1,48,777,478,0,149,936,818,108,520,150,354,154,446,847,463,124,346,132,264,98,107,7,65,522,156,28,759,13,22,23,39,49,932,727,882,5,14,223,32,640,608,467,100,51,604,125,695,10,69,724,806,246,221,50,140,195,517,67,252,96,768,279,293,31,360,848,88,166,105,691,95,682,674,46,535,103,2,175,649,109,159,598,458,265,329,364,914,12,653,33 }, -{ 141,64,86,177,128,597,77,269,95,180,237,352,304,291,275,147,588,372,102,194,125,947,13,678,49,875,202,349,120,437,115,4,59,137,153,751,197,40,208,342,465,954,67,23,5,318,135,32,216,660,470,534,196,182,98,31,22,612,90,38,312,448,107,7,10,581,165,353,192,172,707,51,262,498,494,117,33,21,17,1,389,76,203,14,46,565,563,65,569,546,391,330,285,284,277,210,205,139,134,26,25,20,19,12,9,6,3,620,217,11,326,97,853,629,259,278,232,789,380,365,294,289,244,55,43,0,247,111 }, -{ 18,289,701,65,240,194,90,403,523,214,421,283,475,389,217,102,862,202,847,437,494,453,650,64,697,874,51,352,751,401,817,33,84,0,899,13,597,5,196,805,32,23,11,954,95,3,27,22,24,757,875,141,671,312,108,21,153,19,306,114,118,247,450,288,77,17,730,56,4,12,177,942,273,958,814,117,519,86,61,128,859,207,835,193,880,123,249,838,28,120,342,49,134,300,2,6,801,216,719,57,457,576,864,304,125,302,124,14,615,372,16,210,40,237,60,577,504,119,770,608,752,62,10,9,643,48,1,15 }, -{ 51,23,13,202,115,21,12,5,32,128,403,453,141,401,165,308,120,318,457,15,475,4,269,64,1,0,197,10,719,494,99,2,450,37,48,730,3,180,523,77,7,18,386,14,9,6,16,59,22,217,260,125,11,17,90,177,341,237,117,421,153,24,221,899,33,352,317,102,28,326,137,247,82,817,961,19,40,365,402,391,569,27,629,57,95,49,25,31,8,216,210,110,758,304,72,29,93,54,351,26,38,291,98,20,134,61,196,76,56,45,44,241,275,139,372,349,509,36,65,342,350,615,678,285,89,214,50,670 }, -{ 98,223,393,125,31,791,834,116,271,1,93,202,697,44,64,167,127,293,5,541,51,446,801,77,450,212,48,284,807,234,120,23,765,21,318,13,421,18,195,948,639,551,132,360,730,770,141,142,562,146,163,96,386,49,963,144,668,354,591,197,346,128,260,221,0,198,82,165,416,269,494,670,367,949,817,147,33,178,522,70,32,535,455,719,137,453,326,203,842,22,102,687,61,156,55,121,407,4,315,2,325,105,403,883,110,329,217,342,95,692,10,781,615,463,798,12,958,291,351,7,17,39,878,586,113,196,28,68 }, -{ 15,4,40,11,23,165,13,51,110,93,120,32,82,77,125,33,197,141,260,202,59,10,0,21,102,64,180,5,57,31,453,22,386,12,269,8,318,128,403,134,3,139,95,475,457,730,44,9,49,719,326,117,203,1,115,351,98,450,17,352,28,99,116,217,494,523,210,373,391,961,37,177,90,144,137,2,342,18,153,317,401,56,854,14,48,65,237,341,36,758,421,291,111,277,402,365,509,30,7,922,242,105,275,372,349,24,86,901,801,899,898,300,39,308,817,72,6,670,16,45,752,498,27,38,76,304,170,615 }, -{ 15,1,0,13,2,5,901,7,23,6,9,341,8,3,4,51,961,12,115,10,898,180,82,569,134,31,22,141,351,202,457,120,44,269,165,77,260,365,403,401,318,317,14,33,217,11,854,93,28,30,453,18,137,37,386,21,110,64,719,36,498,352,128,450,16,117,922,475,509,49,177,55,111,391,40,730,523,99,326,98,102,629,758,153,32,39,642,372,24,873,752,116,291,308,421,125,373,95,143,482,203,817,494,35,899,196,86,304,349,17,244,38,237,65,275,247,242,59,105,402,210,638,48,615,144,342,148,127 }, -{ 234,416,77,315,5,639,202,325,147,113,198,49,450,455,61,142,329,178,21,0,427,470,494,342,58,32,557,22,318,230,725,43,858,112,120,70,102,13,48,263,20,344,260,884,425,817,128,798,115,290,105,518,291,137,95,904,23,403,64,141,491,159,241,845,523,31,121,33,319,97,320,392,246,196,153,17,173,104,10,39,663,269,117,592,501,125,51,347,72,30,163,28,253,170,408,194,376,107,18,265,544,326,352,270,341,4,738,615,534,475,595,98,259,66,631,449,301,922,158,76,134,720,512,312,9,180,859,690 }, -{ 146,60,271,126,16,156,360,199,18,121,167,640,522,132,24,446,354,591,71,463,118,340,150,92,598,273,441,195,107,212,22,0,407,10,5,21,108,467,28,279,586,575,423,566,727,191,101,493,649,534,68,95,608,517,55,35,32,783,653,9,408,48,49,508,363,296,607,698,246,13,668,33,64,117,109,356,98,314,39,658,140,105,7,362,660,447,809,411,955,93,31,621,50,303,298,153,347,12,158,125,65,953,713,264,163,350,359,141,124,14,143,51,939,478,149,115,36,75,4,781,581,225,207,102,77,30,562,44 }, -{ 4,11,361,300,77,56,377,368,14,59,40,161,51,128,33,200,210,23,378,27,54,495,102,554,38,494,453,17,21,12,202,80,444,108,53,757,37,46,78,13,245,457,342,390,139,133,123,386,84,523,32,605,196,862,527,736,803,99,73,57,19,630,561,475,3,542,509,421,317,250,181,136,111,277,269,450,197,472,183,48,26,485,730,297,62,714,402,381,403,391,880,122,719,341,318,306,145,25,5,514,256,61,899,546,106,90,50,34,383,833,236,775,497,165,129,85,401,366,184,469,436,838,358,328,316,291,275,241 }, -{ 141,351,217,82,352,120,854,260,64,15,180,372,1,922,269,317,36,137,752,373,13,21,349,51,898,450,77,202,110,23,318,160,93,115,291,128,365,48,197,177,901,96,5,165,244,864,10,86,457,4,40,237,523,247,33,579,341,32,304,11,661,125,83,143,498,326,817,2,203,275,437,69,102,954,717,16,59,961,35,386,851,730,22,475,28,253,31,7,57,98,95,134,144,391,12,6,719,117,210,116,17,196,139,0,3,37,494,473,403,114,49,30,29,164,899,704,559,153,90,72,55,9,45,509,482,453,393,230 }, -{ 15,77,13,1,0,102,23,33,2,4,51,5,10,291,7,9,3,450,6,217,117,120,177,317,341,260,11,12,817,342,365,115,8,134,21,153,180,16,18,22,349,40,165,82,14,64,141,453,372,31,457,523,901,196,197,326,275,352,210,961,719,730,28,304,475,403,569,44,128,32,899,93,59,269,401,24,17,49,752,98,318,110,36,629,216,30,386,125,95,494,90,137,48,351,308,116,111,57,139,37,86,99,498,65,615,247,482,144,39,237,221,20,96,19,244,421,300,758,203,670,194,509,38,854,402,873,437,391 }, -{ 15,23,13,77,141,260,137,120,51,202,180,115,1,365,217,0,341,450,269,291,317,318,5,197,128,21,9,177,373,351,110,352,165,2,12,523,7,64,349,326,10,48,36,901,32,33,22,403,854,82,90,96,4,922,16,37,28,18,752,457,40,386,244,372,102,494,6,308,8,160,86,24,30,14,401,49,661,817,453,719,421,402,11,704,961,475,237,873,342,55,3,39,730,391,59,196,93,221,117,143,216,615,898,44,498,275,253,210,304,35,285,95,125,31,98,17,139,509,72,153,811,482,89,83,144,899,99,576 }, -{ 348,174,85,138,6,280,74,355,233,192,204,636,580,353,343,289,673,66,65,91,81,104,712,750,25,42,214,792,95,64,681,173,194,32,715,135,90,312,29,879,172,825,63,235,835,86,22,87,145,370,5,256,7,222,415,52,0,874,426,97,500,519,17,26,237,43,4,288,36,18,10,389,20,33,560,76,21,61,40,544,45,59,249,888,77,577,746,232,28,102,2,72,49,568,123,287,56,525,448,751,180,11,337,526,707,671,226,27,19,247,24,319,117,48,422,114,12,69,108,84,208,597,37,1,861,67,889,58 }, -{ 152,452,497,59,216,4,269,188,77,11,79,339,128,529,94,471,318,141,202,588,32,76,377,177,678,33,111,291,349,90,5,102,21,137,51,72,12,179,542,38,99,64,257,184,37,1,245,217,460,196,48,372,115,947,148,45,402,474,40,89,342,210,17,352,205,288,3,153,769,13,117,10,2,134,292,54,275,304,139,875,498,431,23,405,241,403,247,317,569,229,401,453,494,285,358,180,197,86,300,57,0,476,961,6,954,308,36,143,524,165,277,475,316,597,14,95,237,15,7,221,341,58,157,735,129,266,214,421 }, -{ 417,253,244,499,141,10,559,564,110,8,260,352,728,143,180,951,120,642,638,661,752,922,341,373,811,137,269,901,717,197,93,206,498,44,165,31,116,203,160,854,384,351,36,873,762,326,704,268,217,1,64,115,282,317,959,55,144,15,365,82,898,968,509,164,86,479,318,13,851,22,21,332,473,434,51,202,77,940,911,569,23,125,450,864,824,237,261,9,242,615,372,617,127,48,201,102,128,4,33,5,96,506,0,391,117,98,28,401,386,40,295,105,32,758,531,276,338,37,83,35,349,59,533,153,177,629,11,12 }, -{ 77,13,23,51,177,102,33,115,59,4,40,0,141,128,90,210,202,137,64,22,269,291,217,10,196,28,153,117,318,7,49,2,14,216,134,18,180,16,6,11,9,24,403,1,275,197,3,95,36,86,125,165,247,342,31,352,494,19,32,402,12,139,453,317,20,237,98,65,15,349,44,475,26,285,17,30,120,111,57,93,21,372,105,27,25,719,194,457,341,203,304,386,260,391,730,116,421,365,35,29,5,99,326,123,498,208,39,569,509,244,288,752,450,143,678,144,110,523,401,308,82,214,300,351,43,37,48,164 }, -{ 1,2,22,50,67,14,36,5,46,28,103,12,0,38,83,114,65,168,194,7,69,133,86,95,24,49,218,29,54,21,55,96,109,160,51,10,584,16,128,6,9,23,48,158,18,75,756,37,35,105,169,32,389,289,159,323,238,181,52,244,202,13,503,646,164,137,532,141,239,115,361,480,185,64,17,143,789,283,124,708,253,505,946,597,3,717,45,776,58,170,108,269,70,735,312,874,285,610,68,782,189,318,424,71,531,31,308,237,320,171,4,892,72,402,99,328,220,418,251,420,394,19,180,577,487,401,347,344 }, -{ 17,106,119,378,742,255,306,136,207,240,84,383,62,790,80,655,61,45,5,56,311,3,209,504,440,667,76,151,32,58,263,483,179,29,2,833,292,548,214,123,129,425,186,454,128,243,205,738,445,64,21,245,148,52,38,14,26,249,57,27,328,19,90,6,4,555,11,34,59,54,162,202,184,507,469,141,592,229,48,215,887,710,152,73,86,40,161,72,618,460,266,257,491,77,358,211,227,287,25,869,183,318,297,50,290,495,10,216,130,614,155,1,476,177,137,361,12,315,37,112,33,22,46,95,113,269,194,171 }, -{ 141,128,202,3,5,2,1,269,64,318,6,33,17,102,15,180,0,196,137,10,153,7,120,352,197,13,77,117,51,134,403,14,165,12,23,402,11,93,9,342,260,82,110,21,494,19,22,237,31,351,4,125,86,475,457,450,326,27,44,32,203,40,36,95,291,961,453,115,25,285,143,111,678,98,341,37,139,99,523,817,49,57,752,498,45,386,18,38,217,8,116,65,16,244,28,144,317,365,56,719,373,901,194,854,79,898,277,59,29,576,26,421,30,569,401,730,947,177,164,864,48,72,391,922,24,873,94,349 }, -{ 38,514,328,377,11,57,266,248,41,880,313,471,556,152,361,4,485,99,305,757,403,157,12,102,339,54,369,40,211,130,542,457,3,37,188,14,139,23,13,153,494,117,33,475,775,229,507,381,300,196,77,453,452,59,555,162,488,184,277,585,236,477,440,629,62,128,51,111,421,134,402,183,215,961,670,79,548,123,342,210,202,89,401,527,474,94,65,587,719,543,432,181,45,17,257,291,80,64,72,21,619,108,32,413,828,46,5,29,0,95,2,275,129,308,10,56,504,205,86,618,155,76,177,49,431,569,90,497 }, -{ 68,520,167,101,264,118,478,562,0,9,664,777,936,604,212,100,191,252,154,18,124,806,265,16,759,21,48,1,71,375,88,724,628,24,329,35,682,411,410,363,166,302,815,447,65,419,589,55,23,39,647,149,917,909,821,382,125,942,98,346,925,772,13,701,146,96,223,51,108,31,10,221,271,22,60,28,321,44,92,905,69,30,676,639,49,593,364,882,274,694,521,907,64,105,5,158,67,621,781,812,126,133,553,189,848,897,213,686,95,32,121,404,522,199,103,116,156,50,140,83,429,706,763,273,115,165,127,77 }, -{ 230,689,699,213,466,831,352,217,30,443,418,854,144,201,840,855,251,203,957,822,96,530,1,539,93,36,137,800,317,83,190,128,326,669,752,351,748,494,88,206,160,31,473,859,335,202,141,44,321,253,735,498,269,435,116,367,187,86,35,927,332,180,237,69,98,778,244,285,219,82,131,576,228,617,208,922,866,930,372,100,120,64,2,934,403,349,531,702,48,21,731,817,274,23,5,10,13,406,365,224,947,824,795,345,898,291,382,295,223,692,318,286,238,39,341,276,863,77,615,166,260,625,678,51,28,67,410,125 }, -{ 77,33,102,117,134,153,196,291,13,51,15,23,82,64,40,202,128,120,0,141,260,351,450,22,4,95,59,137,269,342,177,386,318,326,11,115,10,210,65,373,86,180,217,49,403,1,165,275,28,18,453,57,36,125,98,352,494,523,139,197,14,31,854,475,2,194,216,9,7,817,21,719,93,6,730,24,457,237,90,12,116,16,44,349,110,3,5,402,99,961,317,114,372,19,48,32,285,105,96,17,365,341,300,143,8,203,401,247,164,108,421,25,752,144,26,30,20,391,39,111,304,109,758,50,221,208,37,289 }, -{ 11,40,33,51,542,328,13,117,38,14,23,139,153,134,54,102,111,12,485,377,775,37,99,403,231,277,401,719,369,3,475,453,514,4,629,308,211,880,457,291,305,89,266,152,130,2,57,196,961,6,488,215,5,176,59,555,471,313,72,300,477,183,62,184,79,0,507,248,115,21,670,339,249,548,361,1,165,292,29,197,229,77,556,474,236,386,421,157,413,188,452,17,758,41,162,391,449,587,32,46,123,428,509,52,247,569,136,899,757,523,210,753,155,129,76,50,237,64,730,720,476,383,312,440,275,90,45,342 }, -{ 77,64,141,202,33,102,128,153,2,117,269,6,23,318,1,13,0,134,137,51,5,180,3,196,10,7,40,165,15,14,352,197,86,291,237,115,403,95,17,177,22,217,36,139,210,9,120,19,125,342,494,275,82,475,457,49,453,16,12,31,4,65,21,402,11,143,260,194,110,93,450,25,28,351,317,111,498,326,27,18,349,752,44,341,59,164,386,26,285,116,365,98,719,208,32,391,300,509,401,523,99,20,24,38,114,244,373,730,55,48,901,372,203,312,961,8,277,160,678,304,34,37,57,854,56,546,29,144 }, -{ 15,4,93,5,13,21,11,1,23,32,110,141,64,82,180,2,33,40,3,98,352,120,6,10,0,12,77,7,341,197,37,51,102,351,269,854,95,17,202,31,9,752,901,44,165,117,48,318,153,291,134,137,115,365,237,196,372,59,498,260,349,450,14,128,90,36,317,244,899,22,342,922,437,125,143,873,453,16,160,72,105,482,179,817,19,89,401,457,57,661,403,523,177,164,45,308,864,373,253,245,8,898,49,421,569,223,76,719,28,61,18,247,139,56,96,27,490,210,468,111,494,475,144,38,961,391,304,25 }, -{ 1,2,50,46,14,67,103,38,24,83,133,29,52,96,75,28,114,5,36,238,65,54,108,171,70,0,58,18,69,181,160,532,236,7,22,412,433,754,283,55,163,220,480,361,487,124,12,223,545,45,328,394,21,398,16,155,9,366,48,35,956,6,154,87,323,646,309,514,112,186,822,137,17,109,149,418,745,175,547,86,37,285,68,800,866,10,429,732,516,25,208,302,51,32,118,334,281,99,531,71,61,194,537,458,23,891,389,19,151,675,409,336,128,168,13,400,307,95,262,832,227,49,273,420,3,115,484,64 }, -{ 258,276,860,201,843,295,137,160,567,116,261,144,268,943,284,202,187,935,662,203,699,131,219,224,44,141,127,36,326,96,98,31,318,269,244,964,23,93,384,489,55,21,434,332,13,403,51,120,1,617,918,352,908,367,110,206,180,365,254,197,492,473,871,442,48,82,10,143,800,260,39,574,28,944,299,940,282,253,9,115,494,418,341,125,855,77,8,49,128,836,535,165,100,576,30,523,385,105,822,217,395,959,564,22,531,911,37,83,393,851,717,64,817,752,421,716,5,317,901,551,373,859,0,170,291,599,533,251 }, -{ 7,2,14,87,46,52,278,92,16,140,75,29,135,294,262,70,38,35,172,171,409,24,60,58,69,5,97,112,66,314,1,163,571,71,50,461,155,267,232,330,18,220,54,334,357,126,380,307,21,74,12,230,48,309,186,675,32,37,298,331,226,246,151,45,774,107,64,337,25,324,6,67,606,189,622,20,448,150,43,61,0,400,22,849,287,10,68,9,86,563,28,95,227,583,192,394,620,103,36,764,572,108,128,335,83,55,587,550,13,145,600,549,536,65,141,852,366,49,415,90,26,236,526,950,17,4,181,72 }, -{ 13,23,51,115,2,33,77,0,1,10,4,7,217,5,9,141,102,6,3,180,11,40,317,22,15,64,14,197,352,202,16,12,341,269,365,165,18,318,177,17,59,153,453,196,752,291,32,117,308,237,125,403,31,128,8,36,401,24,28,349,372,49,498,137,475,247,95,304,143,569,901,21,98,468,457,134,44,139,19,90,421,86,210,120,386,629,93,37,116,482,494,57,110,873,342,55,961,275,111,391,546,35,509,244,203,30,27,99,29,437,48,20,260,65,719,216,734,25,38,54,450,326,50,351,46,864,105,253 }, -{ 74,145,204,66,138,42,25,6,337,174,525,222,192,29,26,544,746,287,415,632,85,609,135,7,353,280,112,580,87,396,712,355,64,122,81,104,2,45,173,673,416,648,172,43,792,226,52,22,97,651,151,194,70,65,0,19,32,20,715,95,825,348,5,624,233,113,86,635,91,879,294,10,644,235,1,90,500,36,573,560,49,636,243,58,63,21,331,426,61,75,389,27,445,14,69,750,28,289,46,38,17,888,311,312,18,24,140,186,76,283,141,12,874,16,232,278,72,461,707,53,4,526,597,255,665,180,114,881 }, -{ 77,217,33,102,317,291,202,23,13,51,141,15,275,269,318,115,342,180,21,4,196,352,64,128,11,494,32,5,137,403,40,2,0,125,3,177,10,98,365,349,12,7,372,6,341,453,165,197,153,475,48,752,22,237,31,117,9,95,59,93,16,90,120,247,308,450,49,221,244,36,28,18,144,86,14,134,326,421,203,44,17,304,24,116,523,260,110,864,210,498,401,901,1,35,241,386,82,127,817,39,72,437,160,105,65,143,730,719,351,216,457,402,30,350,293,164,37,859,96,367,139,284,19,579,576,391,285,373 }, -{ 187,258,871,219,442,574,908,839,926,160,116,44,137,224,276,201,36,860,131,202,613,228,144,531,406,93,31,902,567,385,843,318,203,268,800,98,662,856,494,23,190,120,127,418,30,295,533,836,1,284,96,822,244,64,944,717,86,851,55,13,21,51,22,840,434,269,251,367,489,326,48,110,141,699,816,260,39,384,261,371,473,83,206,254,859,10,669,492,28,317,373,128,49,365,450,77,180,863,559,530,82,829,341,918,253,32,9,197,125,351,332,165,143,943,728,535,67,831,576,855,940,403,217,716,105,274,69,959 }, -{ 1,372,23,5,141,21,744,13,291,77,225,349,144,48,459,96,839,260,304,269,442,335,691,352,32,30,622,203,303,284,330,64,45,521,180,317,217,160,88,752,418,120,93,190,948,166,954,340,919,686,342,244,228,202,201,189,137,110,321,914,411,447,781,772,254,51,765,31,656,264,237,167,724,478,842,437,274,127,125,69,44,662,466,435,351,326,82,9,897,410,253,716,286,678,479,299,238,197,68,7,2,934,223,100,70,58,154,98,682,393,967,960,922,856,805,762,475,402,365,341,336,285,247,221,177,169,163,131 }, -{ 66,222,74,135,87,29,145,2,337,294,52,172,138,331,6,7,25,226,42,97,632,70,192,112,353,609,525,415,461,204,287,500,26,174,75,43,324,1,58,32,220,5,232,544,580,85,620,635,278,45,746,64,426,568,448,396,262,122,173,151,69,20,95,19,61,526,140,65,889,86,307,14,104,280,21,46,81,355,92,38,872,22,387,651,186,648,113,194,416,72,163,673,90,24,35,155,49,16,330,37,792,0,888,243,17,36,76,861,10,48,849,67,644,227,50,4,89,853,334,63,27,314,312,12,825,712,91,298 }, -{ 45,17,106,209,255,119,186,5,263,207,454,29,2,48,425,243,21,496,62,290,3,270,400,408,52,155,136,659,171,14,56,513,50,80,84,32,378,46,61,655,666,742,221,58,383,38,1,54,311,306,240,721,181,440,502,430,334,129,72,536,227,123,76,790,592,214,89,328,281,555,34,787,241,148,64,215,663,287,587,37,11,405,162,27,237,504,57,90,130,152,541,179,12,211,548,41,36,552,184,4,741,115,431,292,449,869,229,96,77,507,223,128,183,40,7,86,51,249,205,245,161,6,738,236,103,151,59,10 }, -{ 213,88,260,120,93,373,141,30,100,450,166,36,372,321,459,473,264,180,110,326,1,225,144,704,717,351,82,855,530,269,466,352,217,265,190,22,274,131,96,539,165,86,457,291,28,244,64,187,318,752,39,349,661,330,9,160,202,219,77,410,197,44,908,254,116,49,137,968,276,317,125,406,31,521,523,435,15,98,228,128,32,299,35,662,293,143,115,21,934,778,224,33,856,923,876,854,689,403,371,341,10,935,851,498,437,8,922,48,642,776,903,839,836,730,613,365,268,242,55,0,944,899,492,898,615,385,304,285 }, -{ 266,57,152,381,471,313,369,99,229,12,339,62,157,77,4,37,188,40,475,162,38,3,452,775,129,184,403,17,59,128,11,432,202,111,453,33,56,183,291,401,216,361,328,102,136,402,79,54,440,14,139,880,123,494,51,23,514,277,507,130,757,474,377,21,94,529,177,548,421,349,64,76,211,90,117,89,72,308,13,318,383,5,141,210,134,556,342,153,305,497,257,555,119,485,84,269,275,106,670,2,115,477,488,45,196,41,300,205,32,542,10,543,304,431,86,180,504,19,27,82,179,36,629,249,46,50,237,245 }, -{ 352,217,317,141,752,372,365,180,341,15,349,77,864,21,291,244,115,13,120,269,1,498,5,901,579,98,144,64,23,48,482,351,51,237,102,201,82,437,125,137,318,4,2,247,202,0,31,854,203,143,253,260,32,177,160,490,10,96,110,44,22,494,251,33,128,403,9,3,898,717,164,28,197,72,93,11,873,450,36,165,386,95,373,6,223,661,30,12,49,922,342,206,523,16,457,127,109,468,308,391,116,531,332,473,187,39,88,35,730,453,326,221,7,719,69,86,105,100,83,851,475,90,350,230,678,421,101,304 }, -{ 14,514,369,880,102,403,377,51,719,485,153,23,453,401,457,11,40,13,328,12,57,4,33,38,629,236,670,54,730,117,111,361,961,59,37,134,99,758,757,165,2,46,386,412,421,391,277,29,308,543,477,494,188,600,6,196,21,542,197,139,300,739,475,52,899,79,509,523,488,775,583,283,231,7,803,552,32,5,402,89,828,3,507,176,77,50,15,155,211,64,17,569,215,115,18,381,237,305,266,202,90,34,342,194,128,62,555,389,242,125,108,65,0,471,338,136,56,548,506,221,181,133,10,440,114,248,95,1 }, -{ 107,172,7,359,126,92,14,135,314,278,60,150,298,46,392,279,232,192,2,441,356,330,357,16,32,380,97,534,423,581,35,526,38,448,493,132,52,288,246,660,5,121,66,24,230,324,572,21,387,226,462,259,247,95,220,146,140,77,18,508,147,262,90,48,312,707,20,71,603,54,33,195,550,362,86,236,108,739,199,830,23,64,43,29,895,802,451,22,36,28,929,294,606,50,87,70,501,13,808,177,55,1,194,178,711,316,4,0,102,590,366,49,893,600,37,582,309,872,267,117,388,241,620,115,786,939,571,360 }, -{ 59,4,90,45,216,13,25,0,177,23,77,51,27,95,72,26,115,65,12,91,210,123,275,37,389,19,102,33,11,49,22,18,194,5,214,21,85,53,48,202,343,291,31,57,6,128,42,746,93,73,58,44,32,196,283,81,319,61,141,249,153,64,138,117,422,355,40,348,139,403,789,145,788,300,247,240,134,74,34,804,619,370,104,86,38,1,304,180,524,494,217,20,597,544,318,352,323,233,174,114,76,17,475,280,204,588,342,285,14,3,43,725,287,7,888,636,235,52,29,63,337,232,122,784,125,397,817,678 }, -{ 5,315,416,49,455,639,202,350,77,408,21,197,137,450,402,13,61,509,329,113,713,344,569,347,401,48,0,841,494,318,734,749,64,70,308,95,903,120,342,884,237,557,32,194,546,115,845,1,23,165,663,128,873,102,291,518,22,58,817,391,498,263,17,33,221,269,403,923,260,105,241,125,51,196,312,39,10,31,153,234,112,523,158,18,4,265,12,141,9,159,928,623,326,207,25,177,310,3,2,859,98,28,65,30,163,11,19,275,491,290,6,117,541,16,15,124,76,72,27,922,210,44,341,349,134,773,147,24 }, -{ 130,47,381,390,59,90,200,472,214,714,65,289,6,122,874,85,64,29,751,648,52,50,74,875,247,194,624,249,288,26,312,437,32,217,630,881,4,123,95,78,835,352,196,665,519,33,57,711,524,954,108,42,19,77,22,153,597,416,412,0,145,444,27,243,25,14,183,304,117,453,51,256,141,730,102,177,134,236,315,680,86,112,34,11,115,235,287,237,113,45,283,151,317,588,579,99,3,752,216,342,813,128,445,864,180,56,46,28,18,73,12,23,114,13,389,53,644,719,21,396,58,17,372,947,137,316,10,250 }, -{ 51,453,23,719,13,730,165,457,37,197,99,12,386,401,475,961,4,17,11,64,59,308,54,115,57,38,328,758,391,6,5,2,899,3,753,403,32,523,670,10,509,40,33,421,629,120,21,65,19,22,0,202,125,95,569,117,90,558,29,26,514,494,1,775,128,134,14,450,361,34,9,86,194,177,350,269,72,27,25,7,880,757,111,62,153,316,236,141,50,56,260,217,196,867,546,161,130,106,77,48,41,31,16,8,317,152,468,242,221,136,734,80,89,968,949,862,814,801,717,704,495,469,440,428,412,383,378,326 }, -{ 15,13,1,5,23,2,7,0,6,3,12,51,4,180,115,21,9,165,457,197,141,352,11,14,202,217,10,37,8,32,341,120,22,117,752,269,16,77,134,961,901,719,318,48,317,365,33,110,93,31,569,18,102,28,40,260,17,509,128,44,153,137,82,498,59,629,351,72,386,403,36,49,401,453,730,308,196,450,89,873,30,523,125,99,391,326,177,98,64,247,494,854,24,291,95,475,38,86,482,39,203,922,372,349,116,90,144,57,35,758,55,864,221,468,244,210,421,139,817,76,373,899,54,105,19,304,342,96 }, -{ 0,9,35,28,68,24,67,65,1,16,18,114,69,103,50,101,149,22,175,124,55,39,12,218,133,96,154,189,5,83,21,71,23,7,336,433,251,13,49,75,118,335,2,51,48,486,30,14,10,283,181,745,115,223,137,54,230,109,418,37,345,64,128,141,108,281,99,36,60,100,202,956,537,163,532,480,221,766,302,596,487,95,252,346,58,158,46,180,217,361,237,70,398,86,269,160,31,32,105,657,443,140,285,125,87,212,166,167,502,6,88,375,165,323,831,317,754,29,318,439,77,98,364,38,197,429,44,765 }, -{ 28,105,22,320,109,49,301,0,9,170,95,1,35,55,127,65,24,168,98,159,713,16,512,31,395,36,623,2,7,293,740,14,338,347,424,185,286,12,44,23,21,169,124,5,158,68,67,928,13,371,18,299,242,125,51,289,175,916,64,761,479,374,39,737,685,154,48,272,6,114,599,116,10,86,141,37,194,83,149,506,327,312,841,202,763,237,50,900,870,538,284,115,131,420,346,137,654,385,456,165,187,762,30,276,239,32,308,69,143,269,429,96,570,71,128,180,933,160,164,46,197,221,401,634,965,219,101,318 }, -{ 77,13,51,102,4,59,23,33,202,210,115,40,403,177,128,196,141,153,117,64,494,269,318,134,475,217,342,0,291,11,90,453,22,402,137,15,216,139,10,180,275,86,95,65,57,6,36,18,523,1,125,21,317,365,197,49,28,421,32,14,352,25,19,7,2,899,730,719,391,341,152,24,401,48,27,17,12,901,247,123,114,16,9,111,99,26,349,285,576,50,20,3,386,372,326,260,194,120,110,351,283,482,293,242,165,96,29,37,30,817,801,498,457,450,393,373,299,237,214,203,615,569,116,93,34,82,958,805 }, -{ 13,23,77,51,33,141,115,102,0,217,10,2,6,4,7,64,22,1,11,177,180,40,3,14,202,269,9,291,352,15,165,197,17,128,317,153,196,5,318,18,372,117,16,28,59,36,19,137,95,210,237,247,125,49,86,349,341,304,134,365,24,275,12,31,27,453,403,752,25,143,308,26,57,20,901,120,475,44,401,457,29,498,90,139,65,8,391,93,342,494,216,509,164,98,99,35,55,386,244,111,32,45,37,21,260,38,110,56,450,105,39,730,402,523,46,437,82,30,719,569,203,961,873,326,285,194,116,421 }, -{ 456,116,492,268,949,867,203,51,719,8,391,918,791,457,730,499,13,386,23,206,685,125,31,551,170,870,93,417,401,10,22,479,506,338,940,44,509,143,64,692,670,558,453,0,473,197,523,758,629,341,165,1,564,55,899,762,308,961,421,959,36,638,115,569,801,180,642,86,299,164,28,37,141,965,498,559,9,5,120,237,95,546,260,873,599,137,253,12,244,903,901,2,817,752,728,128,352,450,105,202,7,615,127,365,958,21,301,49,951,403,740,326,239,898,373,922,475,6,854,242,15,3,318,4,269,98,65,99 }, -{ 17,237,106,62,180,45,136,32,498,64,115,41,255,129,546,752,864,197,21,227,241,490,352,482,57,123,292,350,247,509,449,162,365,468,214,38,23,13,4,476,148,76,437,155,507,141,165,77,3,720,317,290,270,873,211,164,72,153,209,117,5,659,54,48,249,217,341,186,710,33,40,14,12,496,119,11,519,90,183,618,139,179,37,328,579,221,431,248,372,405,130,59,99,400,263,205,425,2,358,349,901,51,177,171,89,428,50,454,304,207,542,1,457,308,734,721,391,316,29,569,94,243,143,339,196,313,128,111 }, -{ 1,5,180,15,2,4,0,352,3,13,901,341,7,752,6,141,217,23,365,317,115,197,21,51,165,269,12,11,9,202,31,33,77,569,44,93,318,137,110,120,36,10,22,372,260,498,116,64,32,873,125,48,102,308,8,349,98,482,291,386,401,14,373,326,28,237,37,55,86,134,203,457,391,16,117,177,253,144,509,421,127,153,40,206,403,961,864,468,221,494,437,453,18,17,196,304,143,128,96,854,450,72,247,35,579,89,642,758,82,342,160,629,719,282,811,59,351,922,730,95,638,523,210,546,332,661,49,734 }, -{ 141,205,497,216,269,152,588,59,452,128,4,76,352,875,188,77,79,11,94,678,947,339,954,217,471,372,90,529,72,318,247,64,32,89,177,12,288,37,1,304,349,202,5,51,291,33,474,102,111,23,115,21,99,179,864,38,148,377,13,460,431,498,437,316,180,2,961,40,358,542,137,490,405,241,464,317,3,45,54,7,184,196,17,10,402,752,245,342,210,14,873,48,143,285,153,257,197,308,292,0,36,569,769,237,134,482,139,275,165,468,341,629,413,734,86,476,365,6,300,851,117,751,494,401,270,229,453,29 }, -{ 247,64,317,217,237,437,180,498,349,115,752,579,304,372,864,482,291,141,352,468,197,177,13,391,164,490,23,546,33,365,77,153,72,216,954,597,277,10,708,269,134,569,275,51,695,509,318,179,0,678,244,140,312,640,117,76,629,196,751,128,36,953,674,260,102,901,32,21,22,225,401,86,717,143,92,873,351,16,133,114,191,386,253,165,69,59,9,458,341,202,149,82,649,35,453,398,166,100,95,93,90,125,15,373,330,923,316,48,854,586,213,486,230,922,5,411,823,734,189,139,103,65,50,24,18,12,830,167 }, -{ 2,1,5,7,6,3,77,0,141,13,180,15,217,64,33,23,102,10,352,14,117,9,11,197,165,40,269,17,291,4,115,134,12,153,341,317,752,372,237,51,349,22,498,202,318,16,457,128,196,36,177,365,32,21,59,19,125,901,342,8,86,120,139,93,45,961,57,95,38,143,509,28,29,391,111,210,27,260,873,244,82,137,18,386,164,37,719,25,48,31,304,49,864,98,402,275,569,110,351,629,253,546,26,41,90,494,50,730,56,523,453,44,54,144,24,99,30,403,678,76,898,450,437,55,954,482,308,277 }, -{ 11,40,38,328,542,33,339,313,12,377,157,775,485,99,51,471,41,369,23,37,475,57,54,457,14,117,13,188,305,629,102,403,79,4,139,514,880,961,111,266,719,152,248,474,134,453,401,153,211,342,477,21,2,59,361,89,587,277,94,29,308,196,64,32,413,77,229,210,184,215,402,128,431,381,46,670,5,247,197,165,556,757,386,115,300,50,17,391,803,494,875,490,730,177,162,450,421,275,202,0,6,1,257,76,72,65,48,19,10,129,569,236,130,15,7,555,901,898,588,86,9,543,488,90,452,749,619,507 }, -{ 77,102,33,196,40,51,202,23,153,128,117,13,342,64,134,141,4,59,0,269,210,177,22,318,137,403,65,86,10,475,139,453,95,115,28,99,11,165,217,36,180,197,49,402,291,125,1,352,18,15,494,421,194,275,31,300,110,120,57,90,93,12,237,401,317,6,457,14,2,82,24,114,260,9,386,44,285,108,361,98,16,7,21,349,326,216,5,116,730,341,372,19,133,719,203,48,32,391,39,25,143,111,105,67,576,752,670,961,899,308,498,37,351,304,20,30,283,901,523,365,27,244,208,55,3,164,485,8 }, -{ 472,34,80,495,250,469,176,389,527,17,14,161,53,231,4,128,56,283,216,106,84,57,27,483,177,59,119,503,436,45,585,297,194,29,378,3,42,62,269,136,26,40,11,2,862,678,619,33,73,236,255,514,719,200,25,6,64,240,179,141,52,102,789,361,618,129,597,5,153,611,349,205,65,245,803,402,210,457,123,383,90,304,667,318,814,504,328,133,130,51,32,48,684,108,714,412,215,13,139,19,95,77,47,275,99,12,311,211,165,1,432,207,322,196,117,61,23,524,152,115,369,183,134,114,573,54,162,46 }, -{ 752,352,317,180,141,217,365,269,244,341,498,115,253,901,1,372,202,21,318,4,5,23,700,717,13,137,2,349,197,864,10,873,143,7,482,0,51,3,64,11,67,308,531,12,8,6,28,237,22,31,468,579,533,291,160,221,35,30,96,48,55,33,9,961,120,49,44,39,32,247,83,69,450,326,260,77,36,98,851,509,165,37,16,457,437,110,93,88,82,14,345,822,765,638,421,219,190,131,128,114,203,144,99,800,401,844,453,125,494,475,373,351,241,206,170,164,148,134,127,116,105,100,86,40,38,18,811,19 }, -{ 9,39,101,265,18,333,520,329,100,593,553,364,310,252,167,16,68,604,0,363,404,118,166,121,254,158,272,24,60,271,212,286,639,327,159,35,146,1,109,30,455,411,793,105,557,49,132,647,31,71,621,21,656,354,438,627,676,688,98,48,682,28,156,538,190,22,5,55,23,195,65,44,848,264,51,446,857,709,127,374,781,447,191,344,865,625,821,13,124,96,93,7,578,125,419,907,360,463,32,116,126,37,274,777,88,731,108,67,154,92,95,36,199,12,137,131,10,562,128,326,664,203,382,50,806,242,921,435 }, -{ 15,1,901,180,2,4,5,3,0,752,7,6,341,13,115,317,365,23,217,141,9,197,352,165,51,21,137,11,36,202,12,33,22,873,308,77,269,10,64,86,498,569,31,372,55,93,40,120,160,44,509,318,349,482,638,8,117,37,116,164,102,32,28,401,110,128,196,144,206,244,153,457,468,951,17,291,16,203,96,260,811,143,373,642,125,134,437,386,546,268,247,177,14,48,758,717,719,391,579,72,421,89,661,629,111,730,559,961,221,59,403,523,304,851,35,30,169,854,494,127,82,326,450,251,898,417,475,734 }, -{ 131,39,829,166,613,827,716,578,9,100,224,310,406,30,98,616,228,1,254,856,219,438,938,190,31,846,265,931,0,127,96,625,274,924,44,371,101,385,116,252,272,863,51,137,88,21,333,731,557,36,23,404,48,223,125,49,264,160,187,737,242,105,28,258,144,93,13,530,158,944,382,284,395,203,812,593,518,442,5,456,836,128,326,293,68,329,403,35,202,816,77,115,83,909,688,86,890,478,120,64,22,639,16,165,276,393,455,871,410,201,286,299,33,576,960,656,24,217,95,159,110,32,367,421,492,221,55,102 }, -{ 17,64,62,141,106,136,751,292,129,352,41,38,954,86,476,214,217,128,177,32,237,947,180,162,123,209,710,269,519,247,90,864,157,77,318,99,57,76,59,4,437,40,179,358,11,45,618,119,313,5,304,211,597,148,875,23,249,197,130,95,507,37,54,3,216,457,248,58,210,115,288,12,425,678,186,164,328,72,454,339,245,102,80,498,312,165,372,139,155,2,152,56,33,21,655,243,720,183,207,14,29,241,117,266,290,471,137,84,51,188,305,275,205,449,7,263,48,542,13,270,742,171,752,509,61,317,349,369 }, -{ 42,25,235,650,736,65,605,630,233,343,123,256,122,85,26,416,6,389,63,141,249,368,444,194,511,174,544,19,108,597,348,524,138,90,27,183,32,370,304,525,84,56,53,283,789,445,18,78,280,91,130,947,588,619,45,355,17,680,73,4,0,222,112,3,813,119,145,64,678,297,250,80,21,573,523,86,214,216,102,76,11,746,40,33,269,240,29,289,624,177,323,450,57,24,561,77,152,114,184,74,287,28,396,665,648,378,372,137,37,5,390,106,70,22,847,51,49,349,874,47,881,23,817,432,337,243,153,124 }, -{ 184,229,152,432,266,452,57,497,381,619,17,313,471,257,59,129,369,339,4,12,205,99,157,77,3,5,45,128,123,106,62,202,162,32,21,216,40,136,11,188,119,249,402,349,2,403,14,37,38,54,64,291,618,524,102,475,76,177,80,90,214,33,79,141,453,23,210,111,245,372,137,27,318,269,217,494,775,86,94,139,10,1,19,115,51,401,56,769,183,361,84,529,474,277,757,72,48,880,6,247,29,209,710,179,377,89,41,292,285,328,13,588,180,342,130,556,36,477,308,275,460,378,61,197,196,0,165,421 }, -{ 137,202,160,131,860,567,318,36,295,141,843,39,800,93,30,105,187,224,276,201,261,943,964,98,49,269,219,851,116,9,22,473,1,352,203,127,822,100,206,699,144,268,662,244,253,10,717,535,332,120,44,258,143,31,64,450,704,96,859,190,180,115,55,365,531,326,95,217,28,110,564,752,86,373,284,228,317,21,77,341,13,48,434,221,197,51,911,940,159,23,384,533,260,494,559,935,291,901,88,109,574,282,128,442,367,308,959,617,5,83,489,299,251,728,170,164,165,177,492,406,926,417,293,401,349,871,125,968 }, -{ 125,64,493,0,49,165,35,293,55,93,18,98,9,325,68,10,279,137,31,48,453,389,194,197,147,13,788,14,132,95,107,77,391,371,342,174,61,43,581,105,28,22,5,259,319,104,758,671,590,128,44,32,20,767,761,457,146,121,725,465,198,126,757,289,116,100,23,21,110,763,612,12,663,199,142,120,102,101,7,427,4,356,37,941,963,867,848,498,156,88,86,58,51,33,690,558,376,180,2,864,163,955,70,623,804,422,657,202,1,40,534,90,649,470,798,522,392,352,945,502,386,359,237,221,203,177,159,144 }, -{ 15,33,4,77,13,102,23,40,32,5,11,349,51,177,21,141,117,93,202,59,110,153,64,291,318,196,31,217,269,115,10,180,82,137,1,8,44,3,98,125,134,0,165,22,12,128,351,17,95,116,2,304,120,139,403,457,210,197,49,341,453,144,372,450,494,86,48,352,386,523,36,90,719,898,6,275,30,365,57,730,28,9,317,247,326,854,76,373,475,7,72,37,421,817,638,901,401,111,961,342,899,216,402,277,260,18,237,758,569,203,99,629,437,535,39,61,16,96,752,14,300,208,922,704,105,83,308,143 }, -{ 110,854,253,811,352,141,951,661,244,642,180,752,143,498,384,269,559,317,922,10,911,160,351,533,365,373,206,902,638,873,332,261,345,260,137,717,116,843,31,417,120,44,959,531,217,341,535,201,125,36,699,860,82,55,564,434,926,318,268,940,197,901,164,574,864,276,251,824,295,876,127,450,64,617,943,93,258,776,15,282,326,165,546,817,855,851,203,96,187,144,728,83,1,372,601,219,224,762,237,284,509,21,170,169,499,98,391,479,115,768,482,473,406,86,898,662,349,48,202,131,51,5,0,896,871,401,238,228 }, -{ 2,29,70,75,220,52,112,331,145,1,163,26,74,324,6,69,58,307,19,409,278,287,38,226,46,223,394,87,25,294,606,50,66,14,632,135,583,151,42,67,45,27,396,357,171,380,675,138,5,21,113,267,262,97,24,7,309,764,635,53,537,222,103,48,335,500,83,32,122,16,550,186,96,17,73,334,849,155,189,644,852,802,37,61,54,64,571,140,35,12,582,651,461,486,853,108,36,80,18,133,451,315,624,65,337,785,573,366,445,72,86,774,92,89,297,400,10,114,95,416,587,648,462,172,71,600,820,238 }, -{ 23,13,77,51,115,177,64,141,33,102,4,217,202,40,128,269,291,59,0,180,10,2,6,7,318,11,196,14,137,90,32,22,95,153,352,210,9,1,117,15,165,16,197,49,3,125,86,237,349,18,403,216,19,17,247,21,317,304,342,24,341,134,475,453,12,275,25,36,28,20,98,494,372,57,31,93,65,44,110,27,26,120,139,365,752,111,37,35,326,164,116,402,901,260,457,30,288,421,105,56,498,29,144,391,82,203,5,401,308,285,719,386,99,143,48,39,351,55,194,437,312,450,96,523,76,509,244,316 }, -{ 340,897,691,478,914,658,724,382,363,812,698,682,100,156,166,521,264,447,909,411,1,404,88,354,303,438,96,296,274,772,39,656,418,921,9,30,410,144,23,744,848,639,664,435,21,586,919,13,271,31,335,254,51,5,850,98,367,225,960,77,203,759,621,190,48,127,676,120,32,668,33,83,4,67,44,36,272,217,69,291,131,284,286,360,821,101,285,116,242,18,223,686,102,265,905,842,317,329,93,68,82,822,195,128,125,576,692,351,103,64,238,115,652,475,349,765,326,141,966,578,110,118,0,260,403,201,163,105 }, -{ 310,18,9,326,265,252,121,51,159,77,195,105,101,120,363,33,24,354,271,102,272,709,167,98,16,13,132,639,23,158,260,55,333,327,704,450,35,170,60,202,49,557,125,93,411,254,1,364,95,455,146,817,28,520,338,494,7,286,137,156,109,39,21,14,48,128,116,64,40,31,859,320,118,212,141,360,890,318,293,4,523,615,269,576,169,20,165,153,75,196,329,373,210,177,92,69,0,301,291,781,479,371,217,627,407,403,342,127,71,44,36,910,374,5,50,668,647,351,936,682,578,538,593,553,203,185,180,110 }, -{ 57,313,471,99,369,12,339,157,266,152,38,475,328,453,775,37,403,401,514,40,188,342,139,77,11,59,377,361,229,474,33,4,51,880,277,54,3,211,14,102,62,381,23,111,162,196,130,529,556,305,757,275,128,79,115,629,13,402,421,507,308,485,210,129,123,184,177,494,41,477,153,488,117,542,452,248,300,216,202,236,134,94,670,431,89,64,17,183,440,569,136,555,72,76,734,432,457,543,961,257,215,291,304,10,413,15,205,548,90,56,2,21,46,165,318,247,349,197,86,32,0,283,412,141,36,828,386,82 }, -{ 16,24,35,60,140,71,92,7,14,230,189,108,18,69,46,150,388,246,278,2,172,68,1,451,38,330,135,126,236,309,149,443,50,267,121,565,67,582,21,75,48,462,52,563,594,314,29,399,66,191,877,103,572,55,232,366,97,696,357,380,733,167,83,220,517,5,28,674,74,12,65,0,54,9,118,262,335,146,516,32,37,653,915,22,36,133,251,96,324,87,273,394,64,199,723,223,107,10,486,458,711,13,6,95,163,571,86,726,448,212,641,192,345,70,181,132,23,49,114,550,98,20,271,606,298,633,99,603 }, -{ 206,417,940,959,93,473,728,559,499,203,137,202,8,450,564,31,44,120,269,260,318,141,116,326,244,253,10,127,268,143,22,125,98,817,434,1,373,144,128,615,51,638,23,384,692,523,341,64,922,0,851,13,489,110,352,105,9,951,717,86,28,386,367,403,299,704,642,242,55,551,901,36,958,282,859,160,77,49,291,494,801,968,30,180,492,365,911,661,498,276,854,165,164,873,37,762,456,197,21,317,12,15,5,7,569,285,918,421,752,629,576,479,115,95,2,349,96,401,758,899,393,170,898,217,457,391,48,39 }, -{ 15,1,2,13,0,5,23,7,4,3,6,51,9,217,77,341,115,10,8,11,33,349,12,317,291,180,177,14,102,16,365,120,22,901,304,165,457,21,372,260,197,32,18,40,403,453,31,202,82,961,719,475,28,247,523,117,450,64,93,141,730,110,30,352,351,752,569,44,401,153,17,386,196,59,308,24,134,36,854,494,318,899,48,137,342,326,125,629,90,49,128,437,37,817,95,275,922,421,498,758,98,210,111,203,99,237,391,116,216,57,482,144,373,39,35,20,19,468,139,615,55,221,288,898,873,509,244,86 }, -{ 2,1,14,5,50,48,46,290,21,45,29,32,263,155,207,52,38,425,171,76,408,72,449,17,292,227,89,58,513,400,428,119,476,7,61,54,67,720,75,241,243,186,502,655,69,221,36,148,24,96,6,306,3,214,106,37,0,103,223,10,179,281,16,83,350,64,90,129,430,464,181,663,666,22,413,405,18,240,710,84,262,790,123,431,28,12,741,163,115,460,255,536,56,128,35,334,141,9,220,65,205,51,86,659,99,249,23,541,95,245,618,209,519,202,70,592,270,237,528,62,27,217,133,4,394,137,114,675 }, -{ 132,121,354,167,146,463,271,195,668,446,98,223,407,360,18,212,522,447,1,781,60,48,591,411,156,562,586,363,664,21,777,393,199,293,125,807,936,9,23,590,163,16,13,658,5,126,541,55,101,941,107,259,621,191,51,834,786,68,647,765,31,150,929,759,284,35,71,49,24,465,221,118,520,7,92,883,116,608,279,727,535,70,96,44,687,478,105,50,346,697,467,963,281,33,10,566,22,581,626,93,77,296,493,4,102,108,115,640,147,75,39,770,87,32,914,127,144,598,178,0,117,273,12,2,37,783,691,932 }, -{ 131,578,371,219,224,716,105,616,737,385,187,761,258,916,254,159,49,910,9,623,98,127,836,924,272,286,442,39,28,688,890,320,627,518,293,0,944,871,574,242,31,395,22,201,327,44,116,158,276,109,908,301,860,284,36,51,23,137,95,926,713,512,30,160,125,333,170,239,96,21,456,347,228,13,86,64,128,1,68,101,839,202,506,424,295,662,938,144,55,168,24,567,48,843,406,83,65,185,613,438,203,268,35,165,492,244,299,902,221,384,16,141,115,166,827,93,10,829,37,364,763,261,169,269,5,656,434,685 }, -{ 302,467,484,97,453,6,398,124,69,36,51,14,421,298,1,66,273,87,74,523,81,426,2,403,67,168,18,386,886,756,701,801,158,13,65,0,26,23,475,24,758,86,22,108,719,25,547,615,401,159,117,423,150,730,847,563,154,75,19,646,29,7,505,817,189,278,457,165,42,458,717,572,267,138,782,531,429,153,135,450,134,49,700,208,958,671,715,622,336,244,172,143,114,95,85,63,60,52,650,197,46,899,140,92,160,28,10,791,885,718,327,314,12,5,610,109,43,703,673,670,370,341,326,289,38,35,805,879 }, -{ 190,30,778,530,539,88,100,625,382,1,960,410,731,274,96,840,957,435,321,795,748,264,669,438,466,39,166,131,36,418,144,265,9,44,228,213,23,219,224,921,223,160,406,251,31,863,83,98,310,116,21,613,13,557,203,51,128,0,252,367,335,137,254,5,924,521,284,352,829,48,765,856,258,475,827,69,201,93,49,909,404,716,238,101,616,822,33,421,32,456,593,217,125,127,944,752,67,286,276,679,931,831,329,403,816,158,77,812,221,772,317,639,37,35,28,242,120,268,578,50,230,966,686,494,187,551,478,285 }, -{ 141,202,128,2,269,1,64,5,180,3,318,33,197,6,352,15,7,102,77,0,134,13,137,10,196,153,165,120,117,14,17,11,12,82,110,4,9,237,23,291,260,494,93,51,403,217,21,498,752,450,342,341,31,32,351,22,326,125,402,457,317,143,86,36,115,19,203,40,111,961,285,16,48,475,98,116,44,678,365,95,8,37,57,28,244,27,18,901,49,45,864,569,349,373,386,391,453,59,523,144,719,139,509,25,854,372,38,24,56,898,194,164,947,79,29,817,94,253,99,873,954,730,55,65,597,61,26,546 }, -{ 44,201,567,489,116,662,224,268,131,219,434,295,187,144,31,276,699,384,137,110,442,258,36,160,228,261,367,613,93,30,64,120,908,244,284,203,260,141,202,385,1,9,269,940,39,855,253,918,98,96,373,22,406,856,326,105,206,143,318,10,217,127,55,523,115,77,125,717,617,86,49,13,836,51,28,23,574,332,128,83,190,180,871,839,371,393,944,352,317,21,164,473,935,197,450,341,959,0,177,911,840,254,531,165,291,716,418,899,800,88,829,282,827,494,48,492,661,854,5,351,100,82,299,851,822,15,860,365 }, -{ 51,12,23,15,99,37,13,10,453,165,117,38,0,197,629,569,82,115,401,120,64,134,22,474,457,11,110,719,31,93,260,9,14,475,111,32,153,79,1,94,21,40,308,128,125,8,28,5,18,54,403,351,3,44,180,202,89,450,328,33,961,2,139,36,4,49,77,45,141,523,326,386,730,48,17,217,30,431,148,405,317,237,29,98,16,341,775,413,196,365,352,55,318,72,758,116,6,59,24,7,477,898,734,509,58,39,203,95,372,482,86,854,19,391,421,402,269,144,494,90,102,291,922,817,57,373,899,27 }, -{ 135,7,172,2,92,140,66,52,97,74,324,14,226,29,232,46,38,380,87,262,314,357,278,330,16,298,571,448,35,126,60,220,620,606,75,6,24,192,107,69,246,230,331,1,5,267,294,70,622,353,222,853,550,563,71,572,583,138,150,600,189,500,25,43,50,309,21,526,32,872,12,174,54,58,37,20,893,802,22,48,145,86,64,580,462,95,67,18,888,42,950,65,387,36,171,108,451,112,10,501,26,726,335,441,103,785,83,359,204,582,279,337,461,49,0,72,423,45,443,409,61,68,356,28,392,163,673,114 }, -{ 125,386,391,23,963,60,51,949,165,221,21,13,541,393,118,719,150,197,326,758,421,791,517,801,566,558,308,48,362,7,834,670,453,551,173,401,203,102,43,20,5,71,36,457,251,77,697,279,140,867,33,126,115,32,92,149,422,743,367,232,193,0,770,4,98,509,40,674,81,18,341,11,783,192,577,546,397,16,494,510,508,217,189,104,705,610,330,2,596,105,823,293,202,117,10,314,796,64,862,629,475,468,281,246,242,38,403,29,474,298,31,27,14,858,414,95,942,779,773,569,523,430,317,301,172,134,116,91 }, -{ 85,6,42,138,235,25,222,174,525,256,746,26,289,64,280,214,544,65,32,337,90,204,355,348,74,312,95,415,145,122,233,609,416,66,194,19,29,630,835,63,22,87,45,237,874,5,605,353,112,86,519,343,135,17,648,76,736,70,287,249,180,681,0,288,21,580,27,123,444,4,226,192,52,247,81,1,56,751,216,78,58,75,49,91,792,23,48,53,183,396,108,59,61,28,3,636,624,2,208,84,370,368,12,207,37,114,10,151,153,389,197,172,51,673,72,33,671,597,18,115,125,31,730,573,179,141,73,250 }, -{ 1,14,50,24,5,67,46,2,69,103,18,54,58,48,16,38,83,96,0,35,28,502,21,36,45,181,155,12,61,7,223,513,430,22,270,65,108,9,75,10,37,133,540,29,32,290,71,52,17,171,238,114,218,72,236,55,99,309,807,70,149,328,89,433,163,227,834,68,64,23,189,51,666,6,766,765,221,115,474,86,60,366,552,541,488,13,487,243,425,95,592,536,76,780,141,477,767,186,128,663,267,251,3,794,49,741,137,418,263,202,160,207,545,27,543,920,335,428,388,408,400,150,760,148,124,106,19,269 }, -{ 811,351,642,951,180,752,110,638,253,10,352,854,197,82,365,564,873,341,499,55,143,244,535,36,498,559,901,417,22,661,141,9,28,282,165,30,206,898,373,35,509,260,115,922,728,8,39,332,49,317,31,44,762,964,93,15,911,533,203,160,1,217,120,391,137,24,116,33,105,102,479,943,77,569,717,338,134,117,968,125,965,164,64,473,127,196,153,531,384,269,601,308,98,37,959,23,177,13,867,109,617,291,864,482,169,21,372,242,546,843,434,824,692,40,32,4,551,299,758,5,468,11,629,903,12,89,949,791 }, -{ 51,23,13,453,403,12,475,115,4,15,165,202,523,719,21,457,386,99,308,37,401,2,730,5,197,32,494,0,33,1,120,450,10,59,102,128,17,14,117,3,961,77,153,9,217,569,11,196,134,899,421,40,318,391,247,90,6,629,64,7,16,57,210,48,341,177,141,269,38,260,402,180,22,468,29,27,758,317,291,817,25,19,72,18,56,361,326,133,304,54,221,757,236,34,26,288,300,275,670,365,514,509,125,237,36,65,139,137,108,45,76,52,28,498,351,801,82,805,576,114,89,61,352,41,615,24,8,854 }, -{ 120,13,23,141,77,51,260,217,202,326,1,137,291,269,93,102,82,21,203,450,351,15,180,110,165,318,352,5,128,177,373,48,854,197,64,922,523,317,96,36,349,32,0,386,372,144,33,2,9,125,752,115,59,12,210,7,457,16,817,90,403,244,367,14,898,237,160,28,35,342,719,6,275,10,18,494,304,37,30,341,50,39,24,498,730,365,391,22,473,901,4,86,223,285,247,116,31,704,453,678,83,221,661,216,44,69,61,615,201,421,65,402,8,475,268,401,11,468,49,29,98,88,899,300,242,68,3,418 }, -{ 1,5,22,12,0,2,36,21,28,48,10,14,86,32,54,50,37,7,49,9,23,65,51,55,202,96,95,13,24,208,128,3,137,323,67,17,6,99,4,16,168,18,38,194,83,115,114,281,58,45,64,318,141,745,402,46,269,31,160,480,77,103,503,105,11,403,164,69,35,218,181,72,133,29,822,433,735,430,75,180,223,89,109,584,244,341,197,361,289,165,657,169,401,239,757,177,389,98,124,217,851,238,159,33,158,956,30,59,143,70,102,39,308,44,494,754,40,253,90,155,61,766,163,540,221,76,270,756 }, -{ 219,127,98,258,23,308,301,51,910,401,276,616,284,170,395,293,105,165,22,13,327,242,512,125,201,944,115,900,374,320,109,924,964,763,272,239,567,28,860,629,391,131,116,386,55,197,935,453,843,341,9,943,743,365,506,206,457,261,758,295,36,180,670,31,95,237,538,535,662,44,224,456,185,558,332,64,911,479,0,143,169,569,492,634,10,841,317,421,867,338,282,253,49,144,685,740,384,110,901,468,187,734,719,86,417,844,509,268,12,564,141,286,713,762,918,475,299,120,1,578,164,137,159,403,870,168,551,498 }, -{ 64,180,237,5,80,165,61,58,498,250,297,197,186,2,752,864,34,445,95,869,881,17,311,391,231,115,29,151,546,549,3,312,247,483,153,469,45,27,22,365,334,73,26,136,933,62,56,495,32,52,243,215,21,90,472,592,396,509,288,651,48,738,106,53,490,482,161,211,11,316,287,177,13,369,635,378,141,86,262,667,119,663,216,128,179,40,19,209,50,164,719,457,145,23,10,352,176,241,196,527,666,171,833,269,383,125,758,14,46,70,341,507,317,873,579,464,255,400,37,875,405,210,117,33,143,331,84,6 }, -{ 77,13,102,23,64,33,141,2,115,51,1,0,10,7,177,217,6,269,180,40,3,14,202,128,22,15,318,291,196,5,197,165,153,9,117,352,210,4,237,95,17,134,16,11,125,137,86,18,317,139,12,31,93,59,28,36,49,341,24,275,304,19,349,365,110,44,342,143,403,27,120,29,719,752,457,498,164,372,111,45,203,453,82,25,569,391,8,494,216,144,98,21,247,386,475,26,401,402,30,312,37,99,57,65,20,901,38,678,244,116,326,260,56,308,450,32,35,509,300,34,961,597,194,730,48,629,55,351 }, -{ 15,120,450,51,23,13,202,523,153,196,260,457,719,386,326,4,730,128,318,141,21,11,64,403,453,33,77,32,475,269,95,5,494,125,102,165,48,12,98,1,115,2,401,117,116,10,0,180,40,197,817,7,9,308,99,899,3,352,137,90,16,37,6,18,14,237,22,17,59,217,421,402,134,8,291,49,31,961,82,28,177,670,341,351,342,247,61,758,221,194,19,391,30,317,44,93,214,365,24,57,27,20,275,25,241,216,312,285,29,288,65,576,349,629,70,72,26,39,304,498,36,96,569,123,210,46,289,854 }, -{ 2,5,1,29,45,14,58,207,263,425,52,32,46,76,186,72,292,50,7,61,476,655,408,227,48,38,155,21,720,89,17,75,243,119,6,449,171,148,306,70,241,163,106,334,214,592,54,400,36,179,90,64,790,663,24,666,84,3,16,67,69,240,10,464,56,405,496,128,0,710,74,86,270,129,22,290,460,519,255,209,220,18,141,428,223,123,659,205,96,65,19,513,83,37,4,12,27,25,112,103,115,358,66,23,9,202,95,262,249,221,51,151,28,26,767,59,35,77,350,87,137,780,245,40,409,99,237,618 }, -{ 15,4,13,11,5,23,21,32,1,40,141,3,33,2,180,17,197,64,12,269,31,352,44,117,165,102,202,120,37,318,153,0,6,137,51,10,196,341,134,22,7,49,77,752,59,217,128,48,260,203,125,237,901,82,93,317,115,365,498,90,14,110,342,111,450,95,177,873,72,326,61,8,494,244,457,57,45,19,36,210,139,386,96,144,56,89,509,143,98,76,372,275,719,27,9,160,403,94,351,349,546,854,704,678,817,391,947,253,453,304,99,569,864,308,401,247,29,70,216,758,717,670,475,474,961,116,523,221 }, -{ 214,76,5,129,710,249,618,123,45,460,2,257,17,179,769,205,245,519,207,61,184,106,162,29,209,90,119,32,1,58,6,14,255,292,183,128,77,229,64,21,141,3,655,48,27,38,52,19,263,57,59,4,40,497,151,25,202,152,464,72,7,26,80,99,102,306,311,269,33,115,288,130,318,524,86,54,177,790,62,358,50,243,452,137,46,10,84,186,454,0,425,51,12,148,619,11,210,56,23,556,22,240,112,266,402,36,217,216,37,432,476,136,227,65,70,403,738,155,237,95,111,194,381,139,241,317,180,13 }, -{ 51,23,141,1,202,13,120,21,326,15,269,137,180,165,318,197,352,5,128,48,260,2,77,0,217,12,33,102,7,403,450,203,93,9,32,110,386,115,16,14,64,6,36,4,82,523,373,457,125,18,494,237,291,351,24,342,196,96,37,453,475,817,3,752,391,177,244,615,50,144,28,854,730,210,35,719,99,30,8,317,341,401,160,31,10,44,901,86,221,98,421,22,349,402,576,365,116,922,153,308,39,704,40,72,20,285,17,59,498,372,367,393,661,49,899,67,95,551,70,55,90,275,29,247,89,83,65,69 }, -{ 7,135,2,172,97,87,66,29,52,14,112,70,58,232,337,92,46,226,74,43,262,192,331,461,20,409,16,307,5,294,107,155,334,186,171,278,140,38,151,32,849,324,415,35,75,21,25,45,609,24,227,6,145,1,298,222,60,448,61,64,620,353,387,126,37,86,69,287,549,356,173,48,400,330,644,10,314,583,18,12,22,113,220,526,54,128,359,49,853,36,95,0,76,525,163,67,568,50,65,872,28,104,72,243,138,90,137,587,71,357,4,141,17,246,544,26,230,888,177,194,380,122,474,311,315,635,83,631 }, -{ 574,187,926,860,384,258,531,434,269,110,160,244,141,253,116,871,533,940,261,717,699,959,902,219,661,224,201,373,143,36,911,352,137,260,268,31,851,617,817,728,10,318,523,180,206,295,332,144,811,489,44,843,922,64,251,662,816,120,450,55,127,93,276,855,535,839,98,131,752,951,284,559,824,164,406,642,854,203,1,864,202,317,237,228,365,345,776,498,326,567,442,197,125,282,341,367,96,21,217,417,13,943,86,351,83,679,115,908,564,954,473,82,800,896,165,968,23,128,35,669,48,5,22,170,901,873,169,385 }, -{ 354,156,296,586,1,98,850,163,223,698,379,291,64,44,31,937,48,340,96,349,182,125,237,120,658,77,284,39,30,367,23,385,221,195,293,18,202,144,105,774,128,771,687,541,342,197,116,49,371,121,118,93,5,626,360,16,692,591,453,421,386,352,318,242,153,117,36,10,795,759,260,141,463,372,326,102,87,33,697,11,4,931,446,13,35,948,103,958,899,827,781,752,664,638,558,551,497,475,457,415,304,269,217,205,201,179,166,140,131,127,126,113,107,100,92,89,88,72,55,37,24,883,203,70,21,7,914,846 }, -{ 250,34,472,80,495,483,194,469,141,176,17,64,53,161,33,814,4,667,527,73,27,231,84,56,833,269,14,102,297,585,283,503,59,597,119,106,77,862,255,128,789,11,90,153,209,389,95,887,57,76,3,240,58,23,678,61,236,40,202,134,113,117,151,51,123,304,342,136,369,137,22,237,86,65,45,32,62,445,412,311,200,573,129,436,803,328,19,10,611,196,177,133,491,214,514,72,36,947,26,5,52,139,402,378,318,504,114,0,216,180,287,322,13,381,396,358,629,475,285,46,28,2,383,179,130,112,738,247 }, -{ 97,140,66,172,7,192,314,81,92,426,74,232,298,462,501,43,508,330,69,135,279,6,230,189,24,48,21,885,104,14,448,861,38,712,126,173,715,572,60,563,246,267,16,91,633,423,71,526,52,36,357,29,362,387,18,204,63,443,32,568,324,681,879,441,138,107,67,22,20,0,150,517,85,636,607,12,825,5,893,2,174,278,65,37,149,28,726,86,87,35,779,380,560,42,125,565,95,750,83,124,46,1,49,370,251,653,77,64,877,25,4,10,221,54,33,61,672,40,23,451,98,102,31,9,51,120,348,915 }, -{ 44,31,116,144,268,434,489,367,918,492,384,948,393,127,98,9,940,22,206,105,203,0,855,332,49,93,395,959,28,456,617,911,293,137,1,299,39,125,282,202,51,141,473,55,963,120,417,326,23,95,159,21,599,109,276,730,242,13,36,10,131,8,272,284,253,551,219,30,318,523,2,352,165,512,403,269,18,64,5,7,899,244,16,301,616,450,158,115,12,170,559,935,160,924,143,260,791,386,86,692,201,421,128,457,24,719,728,499,373,37,261,916,110,197,578,48,951,239,286,576,811,494,308,35,96,564,14,498 }, -{ 202,128,141,3,51,64,15,269,5,120,33,2,102,13,403,318,1,23,196,197,153,10,165,17,0,137,82,6,110,117,180,260,453,93,352,12,475,14,125,7,351,450,494,22,11,523,457,402,31,326,77,342,86,99,386,237,9,32,36,21,19,4,134,44,27,203,18,730,37,115,8,373,95,817,421,719,40,291,139,401,49,143,341,98,285,57,111,116,25,961,498,28,391,38,854,317,144,26,752,56,16,217,308,65,277,899,365,898,509,59,45,79,922,48,72,30,41,678,757,569,24,177,615,34,29,864,873,244 }, -{ 127,98,31,105,395,293,28,9,512,299,22,44,0,49,763,599,242,685,109,284,320,159,276,95,1,116,456,870,55,286,900,125,492,36,713,506,158,51,23,935,393,24,327,16,35,239,623,144,201,13,2,65,272,21,39,7,338,12,168,141,18,202,424,5,268,14,170,347,137,86,489,841,68,367,918,301,269,64,374,185,124,165,48,567,479,221,403,662,37,963,308,131,30,401,6,318,67,616,948,115,83,197,237,434,160,295,96,169,128,421,203,154,10,143,538,194,916,352,101,371,253,928,910,261,180,164,244,737 }, -{ 7,24,97,124,2,69,66,1,14,92,18,6,140,67,20,71,43,16,21,118,29,23,149,52,150,51,32,81,5,429,189,48,36,484,172,273,38,60,65,28,22,25,74,83,46,91,13,0,298,314,12,420,610,154,42,108,398,701,467,135,35,505,173,221,576,104,421,168,336,423,37,232,403,302,143,185,847,267,137,115,10,703,158,251,308,508,330,75,68,49,86,61,26,253,202,230,107,401,64,799,388,128,99,443,102,72,607,165,426,453,570,387,547,326,105,125,85,109,517,386,95,138,615,87,126,192,671,63 }, -{ 1,349,64,303,284,442,622,202,691,141,652,447,682,67,717,917,340,237,154,352,269,919,752,547,429,411,197,293,260,44,335,180,160,863,238,201,191,167,318,9,751,730,98,453,33,418,956,475,360,69,77,765,217,140,96,31,153,120,87,724,664,389,323,268,206,116,922,888,102,948,854,842,805,196,127,399,586,658,873,851,850,796,781,695,657,385,330,244,149,137,0,662,367,351,82,947,774,551,498,363,225,146,125,35,212,909,899,848,807,776,772,770,759,726,604,576,541,523,480,450,403,393,372,332,329,327,301,296 }, -{ 1,2,141,15,7,10,180,3,5,6,64,0,13,197,77,269,33,11,352,165,9,102,14,4,349,12,291,341,23,237,134,752,22,120,117,202,498,128,36,217,318,115,51,17,317,40,153,93,365,110,342,961,82,31,864,901,125,137,59,143,196,372,16,86,21,260,111,44,873,32,49,947,457,95,57,244,326,8,351,37,28,569,954,203,19,373,678,18,139,450,29,30,48,386,72,27,79,45,854,391,144,509,55,546,94,99,164,98,116,20,76,83,253,56,898,922,38,25,24,39,61,177,210,719,58,523,494,402 }, -{ 139,99,12,453,196,277,775,475,40,401,215,33,51,111,130,23,11,77,313,211,14,38,266,129,474,477,37,328,339,369,153,719,162,152,54,231,3,308,57,700,117,403,305,188,629,102,880,457,569,183,62,514,229,961,157,556,555,115,176,41,177,471,248,13,507,670,342,4,542,257,17,123,291,236,72,79,304,134,452,89,34,184,90,2,59,76,383,488,94,421,80,32,361,128,440,377,202,119,56,316,21,494,46,165,757,288,45,543,197,528,730,585,249,431,136,5,0,432,52,210,402,120,485,29,1,529,548,536 }, -{ 77,102,33,141,128,202,23,64,51,59,269,153,4,40,115,177,13,196,318,117,291,210,0,137,134,403,22,90,217,342,10,95,180,494,18,49,11,1,475,65,32,6,16,352,216,36,15,139,86,7,194,24,402,275,14,28,9,2,21,19,125,453,165,20,25,120,57,237,3,260,26,341,317,114,349,197,326,214,48,31,12,5,82,17,300,111,421,308,365,523,450,98,110,93,247,304,351,457,285,498,39,27,312,123,44,152,99,401,37,615,373,108,372,170,143,116,68,67,56,96,719,678,361,29,961,205,35,133 }, -{ 7,14,2,58,46,16,70,112,87,38,52,135,5,155,29,66,97,294,172,32,20,334,24,92,186,35,128,227,18,171,6,21,107,37,64,75,780,666,400,61,140,43,60,48,220,232,0,23,141,177,1,54,202,307,13,592,461,115,22,77,12,45,50,51,126,163,137,409,10,315,192,270,25,845,69,90,269,76,72,513,28,113,74,210,49,262,243,9,95,89,71,318,402,631,86,884,298,40,431,102,4,275,290,278,17,324,217,19,180,151,36,237,230,67,356,291,352,314,65,403,59,33,26,609,387,226,285,330 }, -{ 15,13,1,5,2,23,3,0,365,10,7,4,341,51,11,6,9,115,180,317,14,33,77,12,217,102,40,197,21,153,165,17,64,8,117,141,569,22,901,134,32,16,202,352,37,36,457,291,128,31,269,125,237,18,139,196,44,453,391,177,372,28,349,59,719,93,482,629,86,509,961,318,873,498,99,55,752,386,19,401,210,143,48,137,120,342,50,38,49,29,27,403,24,30,758,111,110,57,475,95,203,730,46,98,260,116,90,45,523,494,326,54,105,72,96,65,546,402,351,242,277,164,67,450,734,253,83,26 }, -{ 2,1,75,29,52,14,69,220,67,262,46,38,70,87,103,6,74,24,83,267,25,226,357,366,394,96,26,189,451,112,606,486,135,145,388,324,294,108,335,278,50,66,42,238,163,58,16,331,150,71,19,149,545,222,35,236,18,418,696,133,114,7,218,582,5,36,45,433,516,537,60,380,171,138,641,600,65,550,251,151,21,54,309,603,853,223,181,12,27,287,28,0,739,565,22,17,785,48,86,68,140,461,594,37,97,10,32,423,458,95,160,733,337,583,61,122,307,281,336,64,571,186,273,85,55,774,632,172 }, -{ 9,105,18,101,39,557,16,890,1,252,272,100,265,938,21,326,23,51,301,49,0,68,24,60,264,13,35,310,254,159,737,363,167,593,137,127,121,166,98,846,118,827,156,48,202,30,333,31,55,5,411,395,128,329,132,146,578,44,520,512,242,77,731,682,170,320,371,120,71,916,518,450,373,28,821,286,33,447,327,212,354,271,32,195,639,125,7,364,95,704,102,65,616,385,615,36,688,203,64,12,110,523,455,96,141,197,75,910,4,116,836,506,88,165,93,604,404,22,318,931,2,10,260,86,338,817,40,905 }, -{ 80,209,667,61,45,17,106,483,255,6,833,151,454,29,5,738,378,2,887,742,112,311,27,119,26,469,495,113,491,161,58,145,396,19,25,84,73,70,315,207,814,76,56,136,42,64,32,1,243,62,52,306,614,287,128,445,14,74,383,53,631,3,90,240,34,141,179,86,297,4,72,148,496,65,250,611,214,138,527,46,194,123,137,186,21,655,95,66,549,50,881,292,592,790,48,87,7,11,129,263,205,122,22,440,361,59,222,573,307,38,202,227,75,269,57,85,10,358,245,644,684,54,200,862,651,425,36,171 }, -{ 23,13,51,5,21,115,12,202,15,1,141,32,2,165,0,269,180,197,401,7,4,3,9,457,308,403,453,6,341,37,318,10,719,14,48,120,128,352,33,77,22,137,11,730,217,523,40,386,99,16,260,31,475,569,18,64,450,317,28,237,391,90,17,494,421,365,177,59,125,8,102,72,93,30,629,247,961,24,221,117,44,153,498,758,351,291,196,509,899,402,817,49,304,134,76,89,210,98,326,82,482,45,57,110,38,36,752,901,39,139,468,20,96,372,116,216,19,349,203,288,29,61,95,275,546,670,27,576 }, -{ 99,12,453,277,139,474,369,339,51,38,157,196,37,775,401,188,23,475,111,328,11,313,471,153,40,629,266,79,54,4,477,33,102,59,14,57,248,880,152,342,13,457,305,542,117,377,403,514,94,308,115,229,569,488,961,210,300,211,431,41,89,734,361,485,275,670,134,128,184,381,3,72,529,2,556,719,402,64,413,21,15,215,46,177,757,165,77,197,236,32,62,421,155,50,130,17,162,202,5,45,587,52,507,10,183,555,82,247,490,129,588,123,405,148,216,76,141,7,0,1,181,29,432,6,730,90,468,452 }, -{ 7,92,232,126,97,298,387,140,107,16,60,246,14,66,35,462,150,441,104,357,314,359,279,330,633,423,380,172,230,199,24,121,38,392,356,71,132,192,451,324,22,146,893,508,493,568,289,65,560,95,0,5,32,74,189,830,2,135,21,173,18,603,64,46,43,707,20,501,52,362,90,214,712,550,877,86,607,28,426,312,48,36,29,10,69,278,12,194,49,37,1,6,672,874,204,81,267,68,526,108,835,259,733,895,388,500,779,649,448,915,61,125,149,443,50,55,54,399,590,70,72,939,572,191,124,711,517,167 }, -{ 13,23,318,202,77,177,51,269,33,102,141,115,494,4,90,403,210,153,40,196,117,32,59,128,11,137,342,134,217,291,64,21,12,475,352,31,341,14,2,98,93,10,7,95,700,49,317,275,216,20,19,16,44,22,365,116,6,453,110,247,144,180,96,9,24,17,5,82,0,498,402,349,300,127,48,3,125,57,111,87,28,86,1,203,197,35,25,401,18,165,351,326,139,60,43,26,36,450,873,864,551,473,393,373,372,288,678,576,285,37,523,120,70,65,817,67,752,697,529,421,415,386,304,214,164,152,123,61 }, -{ 13,77,2,23,141,6,0,1,217,115,7,3,180,5,10,51,33,14,197,269,352,64,102,177,9,291,15,4,317,40,17,165,22,11,341,202,318,237,196,117,153,349,16,365,28,210,372,752,134,19,18,128,304,498,36,247,12,125,59,139,95,8,275,457,86,31,27,49,21,24,29,391,342,569,509,25,93,45,143,901,137,32,244,403,26,57,38,719,111,873,386,120,44,864,20,37,546,56,494,39,961,164,758,401,30,453,110,475,35,730,98,65,216,437,34,203,41,326,99,402,300,253,82,90,55,46,194,351 }, -{ 15,4,110,13,120,93,11,23,5,21,32,1,40,180,10,82,165,2,3,33,197,141,51,37,0,48,901,102,12,31,6,7,125,117,352,77,752,341,144,153,351,196,9,237,64,134,498,143,17,269,457,342,59,202,115,98,365,450,318,22,44,401,291,873,8,244,217,475,57,391,253,14,72,349,854,372,55,36,509,89,898,403,90,719,19,386,697,139,111,546,661,27,260,61,56,177,96,569,482,961,16,638,332,758,494,28,864,148,76,45,241,79,350,308,247,437,421,70,474,559,221,210,41,164,160,137,453,275 }, -{ 15,1,13,2,0,23,4,5,3,7,6,51,77,9,341,10,115,291,11,33,217,8,12,102,177,365,317,14,165,16,22,120,349,40,180,197,31,457,901,453,18,21,450,153,961,141,719,260,523,32,44,82,64,117,304,28,93,372,110,17,210,475,59,30,134,352,386,342,569,401,752,275,196,730,90,403,326,202,36,49,629,125,817,216,98,308,247,269,351,24,203,494,899,37,95,111,139,482,758,373,391,19,48,116,237,922,509,57,144,86,137,498,854,421,128,670,873,898,253,437,65,300,55,99,20,704,244,615 }, -{ 20,43,198,325,904,104,173,147,234,422,66,97,426,319,861,77,376,712,416,725,427,945,0,7,5,470,450,192,142,32,707,178,330,819,639,38,202,22,500,21,784,583,414,2,324,230,858,61,889,49,315,113,671,81,455,18,392,74,207,232,52,24,329,107,342,33,560,13,140,595,10,715,291,120,102,95,48,1,64,359,693,600,879,16,798,58,312,494,4,14,344,835,764,306,105,526,290,40,23,289,259,90,159,158,884,577,246,37,9,170,204,681,138,29,239,194,112,12,17,31,318,72,28,226,70,397,153,65 }, -{ 105,28,0,9,49,301,159,127,512,16,170,623,24,109,35,395,158,98,68,1,65,22,55,31,761,371,713,916,18,293,286,7,242,124,347,95,338,737,327,44,39,21,2,14,272,424,154,36,506,685,23,168,101,125,299,51,12,479,48,13,870,763,374,284,64,385,320,599,5,67,202,71,276,116,131,141,185,137,836,456,175,344,239,37,900,187,30,10,577,538,6,616,289,740,60,518,118,86,169,83,364,912,219,96,50,115,928,128,935,165,318,149,747,221,346,32,114,69,810,254,237,627,269,308,144,393,201,492 }, -{ 213,466,689,88,230,435,321,30,699,795,201,831,352,144,217,443,854,530,840,190,539,957,418,1,96,203,382,855,251,100,669,410,335,93,83,748,367,44,662,960,31,934,36,206,141,752,351,317,822,128,731,116,778,120,284,274,131,98,228,927,332,187,69,438,521,800,21,242,160,224,48,372,219,310,137,735,686,557,326,285,237,576,127,922,5,859,269,260,13,494,264,82,523,403,35,244,202,615,166,39,616,551,345,930,180,67,253,921,299,966,2,10,9,258,23,473,365,692,265,197,866,32,276,51,816,617,856,223 }, -{ 130,453,196,47,57,4,236,14,59,412,51,711,381,730,153,77,202,108,128,361,23,46,283,402,210,11,300,719,13,117,38,803,200,401,183,78,34,475,54,342,318,27,369,432,275,2,757,133,503,472,12,3,585,134,62,862,161,529,37,328,457,56,390,494,102,73,176,50,440,322,111,670,65,52,377,899,181,629,17,114,33,136,99,266,123,40,514,339,291,53,250,84,177,21,188,216,389,217,386,139,32,961,155,480,162,754,832,714,894,739,383,657,269,152,106,603,543,527,523,497,277,485,838,137,86,64,48,758 }, -{ 1,2,14,50,5,38,46,36,22,67,103,0,114,65,29,12,28,218,54,7,133,83,86,96,69,21,75,208,24,6,52,168,194,389,10,128,51,160,55,17,23,48,18,181,238,45,37,32,95,16,283,532,58,137,503,202,49,124,171,361,480,13,735,9,289,109,782,285,3,115,70,756,141,169,484,584,35,244,717,64,402,4,328,220,163,646,158,803,505,19,253,789,164,185,108,25,155,487,236,269,143,946,394,318,610,401,335,105,433,403,851,87,800,223,866,309,420,61,27,180,597,99,366,308,59,754,514,418 }, -{ 6,74,26,19,165,453,391,197,14,138,730,29,357,70,51,457,1,50,108,125,500,509,27,145,386,112,366,52,46,235,133,262,13,308,47,331,2,719,78,42,309,75,603,25,223,394,785,23,600,218,38,163,115,114,17,558,34,53,220,128,487,58,236,122,65,130,766,401,498,96,409,307,45,85,66,444,899,73,516,632,64,711,54,630,412,196,5,103,21,180,894,113,221,137,624,241,237,594,773,758,867,629,433,390,475,820,546,12,648,67,32,153,285,606,99,545,745,569,644,324,583,3,181,675,903,283,802,670 }, -{ 10,9,30,376,0,68,55,39,18,43,20,49,174,104,88,501,120,342,450,858,28,2,137,523,470,453,197,757,603,37,414,165,31,325,730,729,671,595,455,222,204,77,64,58,22,21,17,13,5,194,110,95,389,318,260,177,128,102,97,33,1,904,725,7,788,568,387,90,54,46,32,14,11,259,98,147,61,817,392,518,961,958,922,899,873,854,819,805,785,739,719,713,661,615,550,534,528,494,477,475,474,465,457,449,386,372,355,351,349,337,298,294,291,289,269,262,247,196,173,171,155,135,122,105,94,56,48,36 }, -{ 15,23,13,1,202,0,51,77,5,9,341,141,137,120,4,260,115,2,351,21,128,7,12,450,82,901,197,180,269,318,10,8,11,22,403,32,854,33,165,40,6,18,3,16,37,494,523,457,102,177,28,64,352,453,14,317,922,217,36,365,48,421,401,719,475,291,30,110,59,24,569,817,93,961,308,730,17,752,125,117,898,31,342,153,196,285,44,99,576,86,275,642,49,90,402,39,143,139,98,221,386,244,116,373,55,57,629,144,210,661,349,134,203,859,899,95,498,35,482,372,72,237,253,105,216,96,111,758 }, -{ 272,131,105,578,219,159,371,49,616,716,9,224,320,286,737,623,187,910,385,28,258,98,761,127,254,347,916,424,22,109,627,158,713,95,924,239,0,242,836,39,201,31,301,912,944,442,125,170,116,327,293,44,538,688,374,23,55,168,276,36,64,284,51,871,185,395,35,506,221,512,518,202,890,137,101,13,860,169,68,574,479,86,908,10,24,333,16,1,65,144,269,364,308,228,344,141,21,338,567,30,577,165,128,160,747,18,763,124,839,926,299,261,456,268,295,164,662,406,197,67,312,175,7,928,421,685,154,810 }, -{ 457,51,13,23,961,719,12,453,629,99,401,57,515,3,4,165,11,45,62,41,14,17,2,569,37,77,33,32,5,0,40,59,1,308,76,115,197,38,72,79,730,21,474,102,7,475,6,54,9,64,403,10,56,775,237,477,202,29,152,188,341,328,90,509,111,89,215,128,880,734,339,247,757,134,386,84,421,317,313,217,129,94,22,318,157,34,130,117,361,210,670,555,369,365,285,269,266,186,181,153,123,24,899,485,120,542,25,391,758,514,468,277,270,243,227,196,180,179,155,148,137,52,50,49,46,18,471,236 }, -{ 202,318,5,120,450,494,77,33,102,260,21,1,128,13,165,403,523,23,269,342,12,326,817,32,475,141,402,64,2,17,82,457,180,137,48,730,125,291,197,453,37,93,51,615,922,719,386,210,15,177,854,351,98,7,899,576,275,6,44,25,961,4,196,117,115,285,95,14,217,31,391,352,237,65,38,29,27,20,758,40,10,9,153,194,367,116,110,105,50,49,35,16,139,498,341,61,163,39,30,11,349,293,216,144,108,99,76,58,54,43,0,203,3,134,113,70,959,958,940,933,923,900,855,841,750,725,704,639 }, -{ 141,269,352,180,217,202,349,64,160,137,317,318,372,494,752,418,244,954,864,437,753,237,13,341,291,165,717,22,197,115,304,260,365,93,36,21,351,247,120,922,77,82,48,498,32,5,579,144,10,23,342,373,33,854,95,128,0,391,164,143,125,98,482,51,403,28,326,898,386,76,72,1,951,678,638,453,201,86,110,30,457,312,253,221,163,96,44,475,102,901,719,421,196,134,190,166,131,100,88,474,401,203,859,597,521,509,466,459,435,393,321,284,228,108,65,59,40,4,851,576,350,308,288,241,216,214,179,99 }, -{ 70,145,29,112,74,26,2,75,287,52,220,226,632,87,294,6,135,307,163,66,19,396,278,138,635,409,25,151,58,113,1,122,331,222,5,97,42,644,324,461,27,849,500,69,651,45,7,172,262,853,337,53,648,573,624,64,334,445,171,21,67,186,32,73,297,46,38,416,14,17,140,80,61,50,436,155,884,223,24,22,85,48,380,852,92,65,86,889,12,315,36,774,571,103,549,37,10,95,243,491,83,16,72,665,227,89,357,394,76,309,35,106,54,675,808,267,474,250,609,71,881,209,133,606,96,232,583,400 }, -{ 351,82,317,141,752,898,901,180,352,341,15,365,1,498,217,115,33,253,32,143,10,160,55,0,854,5,197,269,21,77,4,36,137,23,64,2,110,482,169,873,120,244,96,7,89,13,349,86,164,102,72,93,372,148,922,40,16,345,90,531,9,83,437,22,251,35,260,457,546,165,202,6,864,48,291,51,28,719,59,238,18,308,247,128,11,304,117,12,569,237,65,961,817,509,450,535,196,95,125,730,523,468,144,98,49,3,899,661,342,318,373,153,579,734,14,490,116,203,134,559,391,312,130,123,109,84,76,326 }, -{ 39,9,310,254,101,252,265,272,100,0,557,30,49,688,455,105,190,166,329,627,159,286,625,709,327,333,18,68,158,404,520,578,131,438,731,16,553,24,98,364,31,676,35,118,593,1,518,48,344,44,167,23,65,21,93,604,829,795,127,60,890,96,88,616,22,363,656,51,242,28,419,716,125,124,846,71,274,36,264,613,13,137,95,116,212,938,109,224,827,411,154,910,160,639,371,664,128,5,374,144,530,395,228,170,219,865,67,10,203,759,121,83,301,382,320,737,55,682,37,647,86,271,793,7,821,115,916,285 }, -{ 2,58,29,151,52,186,70,5,549,75,1,112,45,400,61,163,113,227,307,315,311,287,220,46,7,14,155,74,243,87,409,66,27,80,209,631,845,780,69,262,135,48,50,171,767,496,869,454,331,6,491,17,334,278,106,32,19,64,614,21,73,145,26,294,24,592,67,25,38,659,223,16,97,255,172,72,226,502,852,128,37,140,721,666,89,667,290,36,103,324,86,849,267,76,141,54,35,83,65,207,22,148,96,270,12,635,10,4,95,92,738,474,18,445,119,611,425,137,431,263,114,396,663,0,122,133,90,237 }, -{ 141,217,269,352,317,180,23,13,21,115,77,349,202,137,51,64,372,165,197,32,365,752,318,291,341,5,237,102,15,177,498,33,48,244,304,128,125,4,864,253,39,30,44,11,247,22,9,0,31,901,308,403,1,717,201,342,49,10,98,16,7,221,95,144,40,88,494,90,12,28,117,93,678,120,68,326,100,203,86,96,468,2,475,206,116,546,457,160,437,8,873,210,127,110,76,65,55,37,418,386,350,72,18,453,223,143,24,153,851,351,260,284,579,576,401,268,482,196,35,421,82,3,402,166,101,954,391,83 }, -{ 68,35,101,149,124,154,0,65,9,175,24,398,28,16,189,71,118,429,55,346,67,114,7,345,18,230,399,364,133,14,252,722,39,283,1,547,140,69,108,484,302,694,100,439,103,46,705,83,166,267,389,2,458,92,336,50,212,289,21,246,375,251,419,109,36,520,329,158,22,637,12,60,952,48,265,236,702,596,96,806,30,732,5,826,604,64,194,49,412,701,388,88,420,191,535,264,562,167,886,23,796,168,51,650,238,570,782,868,86,13,218,95,917,768,38,10,32,309,404,706,37,54,221,602,125,159,105,676 }, -{ 66,7,29,112,52,97,2,192,20,151,74,43,145,173,222,135,226,525,415,172,644,104,337,544,353,580,32,45,25,287,186,609,58,70,204,155,14,5,21,712,122,87,227,174,331,61,849,549,426,90,355,81,334,560,6,232,416,243,632,46,0,92,324,177,64,113,673,624,107,59,37,635,216,140,396,138,22,500,16,38,4,707,128,65,48,307,17,77,86,137,91,35,12,721,665,789,141,24,294,884,85,42,414,194,115,526,72,311,825,11,126,262,597,76,89,10,28,75,1,387,209,60,304,171,51,147,651,40 }, -{ 31,125,44,299,116,22,170,55,242,456,599,685,36,870,64,393,492,268,1,479,164,86,558,28,506,144,10,740,23,206,903,9,2,0,963,237,127,546,301,13,434,143,367,5,169,93,51,239,12,654,965,384,137,498,7,923,203,918,489,98,180,95,391,141,762,115,352,417,638,841,253,6,105,14,951,8,940,165,197,844,128,948,457,401,959,244,160,308,282,185,21,312,109,286,202,332,341,49,168,386,752,269,538,365,4,37,24,512,911,473,873,509,551,634,499,318,719,3,208,395,708,217,450,421,96,901,35,16 }, -{ 188,11,79,12,99,377,542,94,339,33,474,37,40,139,111,102,453,4,51,775,475,277,13,471,23,196,629,153,431,401,117,210,134,266,152,403,115,38,961,128,59,300,57,77,880,342,157,485,313,569,3,229,202,14,177,275,477,54,308,184,488,328,21,89,72,670,32,64,2,76,10,402,15,90,165,369,148,141,5,162,318,405,17,269,257,205,216,413,757,129,62,361,0,494,734,41,421,179,45,452,197,217,291,120,82,22,130,386,123,1,50,237,358,125,381,497,498,6,137,285,36,180,48,482,372,29,46,341 }, -{ 658,698,340,303,31,363,919,98,44,156,296,850,586,668,354,87,914,120,163,30,127,70,23,385,51,48,1,478,125,49,77,774,223,260,291,82,691,349,13,854,225,217,116,39,10,724,21,922,898,447,351,293,201,75,9,269,284,759,541,480,281,268,221,165,621,141,442,622,411,371,318,187,153,115,105,102,65,777,93,64,33,652,352,202,744,453,433,398,330,191,180,177,137,128,117,95,69,35,931,638,40,5,888,372,146,140,100,88,565,457,450,335,326,317,219,190,159,158,134,36,32,22,518,482,401,394,276,947 }, -{ 15,82,4,197,13,33,1,23,901,21,5,11,10,165,32,0,120,180,2,40,3,51,110,77,642,7,8,351,326,115,6,386,365,217,457,9,117,401,12,37,102,260,523,134,719,758,569,22,36,59,317,730,31,57,342,898,961,450,453,153,17,141,291,137,475,55,177,48,116,90,196,93,44,403,14,64,352,629,54,372,817,28,143,18,269,139,16,958,96,202,494,349,421,275,752,210,128,49,94,86,244,29,498,899,801,318,851,38,670,72,615,474,304,148,41,89,25,19,308,482,160,373,253,70,61,30,277,125 }, -{ 15,4,11,13,23,5,21,180,141,32,202,269,3,40,1,352,318,17,12,64,33,165,197,31,2,0,51,120,128,117,326,59,457,10,153,196,134,817,6,48,125,93,237,82,44,137,450,77,494,403,49,203,386,752,37,523,7,22,961,217,260,8,115,110,341,57,177,498,719,90,615,9,317,102,365,139,14,730,901,210,98,402,72,453,19,116,65,18,111,391,45,56,95,351,27,899,99,349,293,291,300,475,86,28,36,401,25,55,144,244,275,509,247,216,38,678,76,61,393,29,372,576,485,373,30,253,551,468 }, -{ 91,233,370,718,85,6,81,25,65,256,63,235,42,138,511,397,123,26,343,74,650,87,249,643,355,544,18,64,194,510,636,45,174,280,90,22,108,348,681,104,1,84,86,114,389,4,415,66,19,0,673,283,214,141,122,524,289,56,53,193,208,95,240,750,297,29,119,605,27,573,445,436,736,10,14,11,287,597,32,630,49,24,192,57,5,17,204,475,103,61,102,70,947,152,51,588,23,16,183,77,619,730,523,453,444,59,561,2,813,701,874,323,75,33,28,804,129,96,403,368,21,9,145,177,396,255,693,611 }, -{ 23,51,202,13,21,128,318,141,403,120,450,137,48,494,269,5,1,165,125,64,32,260,15,523,102,475,115,12,14,457,31,33,197,77,817,44,98,453,2,308,95,49,99,16,7,180,18,93,326,37,221,6,4,352,421,401,116,291,61,386,203,82,59,36,9,40,30,24,719,117,110,20,217,153,730,17,615,351,402,237,50,854,10,196,39,19,342,3,922,25,96,341,35,28,22,11,105,177,90,72,58,38,317,247,54,961,805,576,207,68,57,46,349,210,134,86,704,75,70,899,373,65,901,670,0,391,89,45 }, -{ 365,180,317,752,341,217,115,352,901,482,372,498,291,15,253,244,141,13,1,579,269,349,7,5,21,4,318,23,351,82,0,2,51,77,93,125,10,898,89,160,202,44,6,854,165,3,96,308,221,148,137,332,247,197,33,11,304,851,531,144,120,494,40,717,468,251,403,72,177,391,32,12,546,453,421,260,203,437,961,574,258,533,48,509,55,922,880,661,615,373,261,134,241,873,475,345,949,867,734,728,699,569,490,473,434,295,288,237,219,143,127,110,27,17,16,187,153,117,876,350,99,36,9,947,128,86,64,679 }, -{ 115,498,901,197,341,468,13,352,482,546,165,509,237,569,9,873,64,23,365,22,180,95,391,317,758,558,49,752,734,109,28,105,217,51,844,86,837,143,629,131,254,876,12,159,158,719,39,406,308,148,141,679,117,490,83,637,457,10,708,166,36,706,102,89,35,505,168,442,372,125,55,530,221,37,208,669,535,332,272,153,103,98,903,401,261,219,768,114,33,864,364,187,169,345,4,574,434,258,242,224,67,30,3,253,961,868,164,228,816,77,843,120,438,384,351,230,134,128,100,99,2,753,50,44,31,584,347,170 }, -{ 23,13,51,202,141,21,180,165,5,197,125,1,115,269,32,120,12,128,318,64,15,137,523,2,33,386,7,260,14,403,48,457,102,4,450,6,93,99,82,401,719,9,730,110,16,31,237,77,326,308,421,98,453,352,37,221,475,90,44,117,30,0,18,144,899,153,10,817,3,203,391,196,11,59,351,40,217,494,177,17,341,134,116,39,8,24,95,752,498,402,20,509,615,61,28,96,19,247,961,291,36,72,365,86,317,285,241,76,49,373,38,29,25,342,70,304,58,57,242,546,576,22,350,349,901,629,801,551 }, -{ 214,289,90,174,874,280,355,138,65,85,64,6,751,81,312,194,249,835,233,348,636,875,91,343,288,519,32,0,524,247,415,104,29,370,681,750,74,204,22,95,217,437,235,86,123,25,352,192,42,597,954,256,77,18,673,63,864,752,671,306,87,353,746,287,712,237,397,389,115,588,222,177,180,145,580,715,21,141,59,474,317,207,66,56,49,52,33,28,579,45,544,10,84,61,784,102,4,511,202,693,57,40,24,117,173,76,319,240,208,5,216,26,304,134,291,205,114,525,72,17,153,577,168,11,108,422,718,498 }, -{ 15,4,11,5,13,23,21,32,33,1,37,31,2,141,3,180,64,102,44,12,49,196,120,77,40,6,17,7,153,117,352,134,0,82,269,197,51,22,93,10,752,260,165,217,98,317,137,365,342,202,901,318,95,341,450,115,48,30,9,128,177,351,125,523,110,498,854,291,237,89,90,8,817,45,59,14,57,86,457,873,326,373,372,72,61,922,139,56,275,482,36,864,391,96,898,386,111,403,144,27,38,509,899,453,70,116,29,58,253,244,76,160,475,437,304,316,210,16,41,569,308,300,203,719,288,221,546,148 }, -{ 217,33,15,13,117,196,153,134,23,51,77,141,0,2,64,115,102,10,4,5,7,6,180,3,1,11,165,352,202,22,9,40,317,269,197,14,128,318,341,237,17,177,16,291,12,95,365,120,125,18,752,28,453,372,59,137,498,349,49,36,31,24,403,32,110,98,210,386,19,457,401,8,391,901,475,44,86,260,342,304,143,247,308,730,93,275,244,494,164,719,21,864,65,509,57,961,523,25,90,105,546,139,216,55,38,482,569,402,35,29,450,99,873,421,48,670,45,27,26,326,20,37,437,39,629,579,56,203 }, -{ 15,33,77,4,102,117,40,115,134,11,153,13,217,21,1,5,317,196,32,23,3,2,59,12,291,341,365,51,139,120,177,180,372,349,48,141,260,17,342,110,6,197,37,7,72,482,90,165,111,57,352,93,898,752,0,326,457,210,82,854,901,450,269,202,14,36,64,125,523,373,10,137,89,922,203,719,498,730,961,569,244,817,143,44,318,8,76,304,277,403,253,275,31,494,128,386,308,160,22,247,56,899,148,144,453,468,61,638,579,300,96,437,221,116,873,38,485,94,99,237,216,9,27,49,45,19,86,401 }, -{ 15,13,217,2,1,23,0,4,5,3,317,51,341,7,6,8,115,9,365,202,10,11,291,12,22,33,269,31,82,180,308,457,120,28,901,30,18,77,197,450,351,21,961,40,221,372,523,165,730,318,719,854,141,102,64,453,110,260,14,569,93,117,44,16,817,36,32,349,386,498,482,98,403,898,196,134,35,153,24,49,125,752,579,326,899,237,128,137,247,401,342,48,475,177,39,304,661,20,922,509,494,19,116,59,37,203,468,95,329,144,758,55,17,65,244,86,111,391,90,118,437,113,91,122,143,629,864,99 }, -{ 135,66,2,7,192,337,97,52,14,20,673,355,29,43,104,107,331,226,415,376,353,222,294,147,74,112,46,172,560,155,32,5,324,470,609,173,174,21,825,16,64,58,298,145,92,707,38,232,77,35,356,4,10,414,22,525,287,262,171,888,86,632,544,595,635,568,178,90,48,580,87,334,202,597,72,37,60,587,474,6,151,95,307,49,177,59,25,0,142,17,858,61,409,128,1,12,721,583,318,259,362,500,141,126,269,198,102,319,70,494,13,230,853,45,227,54,849,612,400,65,204,186,33,819,246,76,644,279 }, -{ 195,132,146,142,271,167,121,363,878,178,687,647,786,212,354,77,522,929,60,202,411,120,35,234,147,259,101,360,520,626,446,781,98,0,450,668,5,199,55,771,562,23,16,706,777,49,936,18,621,604,48,158,318,639,13,31,407,22,125,21,591,590,465,481,159,534,51,109,198,419,24,126,364,191,141,7,682,551,252,28,20,806,634,156,105,14,447,948,494,107,10,116,39,43,1,269,260,33,265,128,640,291,93,403,137,326,95,203,421,379,102,765,9,82,692,110,416,32,883,664,553,455,694,475,842,523,293,239 }, -{ 202,77,20,318,104,66,269,291,494,102,177,43,128,0,342,216,173,5,2,97,52,450,234,22,7,33,750,29,112,319,74,275,90,337,32,49,198,210,678,544,147,204,58,24,141,789,21,349,64,18,304,16,10,14,580,120,192,194,325,13,416,142,403,500,196,61,59,137,115,86,712,153,113,12,226,174,415,40,23,81,4,28,70,525,402,1,9,230,72,35,178,214,636,46,11,6,904,37,95,87,48,217,355,597,334,31,798,39,17,38,427,186,222,65,376,117,426,285,36,135,51,208,353,673,155,792,172,260 }, -{ 107,362,612,359,414,356,97,392,683,259,819,43,298,660,465,147,581,729,173,779,7,595,501,20,319,470,534,858,246,376,279,126,230,14,5,178,427,232,493,35,92,49,132,426,885,60,32,104,387,0,786,423,66,38,21,121,878,22,16,146,861,441,95,357,560,830,142,2,199,61,172,10,81,707,150,70,590,422,207,48,140,46,58,929,52,324,603,192,18,508,202,314,77,37,347,33,263,13,135,28,241,12,23,29,125,1,345,124,102,98,74,64,568,24,198,380,40,4,687,626,105,607,117,72,177,577,65,318 }, -{ 6,19,13,26,453,165,457,386,51,23,14,74,401,391,308,758,719,603,47,867,29,138,2,70,730,27,366,309,108,324,197,1,25,196,743,711,78,235,262,130,42,475,133,50,115,145,670,487,112,58,53,52,85,17,421,894,96,34,412,5,331,516,509,163,33,500,569,629,482,388,45,468,153,218,128,64,341,283,594,545,444,65,125,600,217,114,236,754,75,899,73,785,630,137,95,38,801,328,895,103,961,550,901,200,11,350,558,117,4,220,180,54,46,745,3,134,433,766,287,739,122,223,317,226,390,241,21,357 }, -{ 179,205,72,245,317,247,152,180,216,490,76,752,352,79,217,59,864,94,498,4,497,452,89,148,11,875,111,141,405,115,188,21,468,588,873,197,579,471,365,464,37,645,372,482,5,77,64,431,341,237,10,529,349,1,12,23,2,474,128,134,316,339,291,36,32,51,38,413,437,629,954,734,308,99,13,143,48,102,165,14,288,90,377,749,184,401,460,542,33,428,3,7,269,449,961,569,901,350,86,40,257,244,202,0,270,117,6,304,54,241,402,45,137,221,457,403,177,9,164,139,318,17,528,15,453,421,358,769 }, -{ 107,359,7,314,392,298,387,279,581,32,232,60,14,126,97,493,534,150,356,121,423,362,172,92,259,147,441,95,35,501,22,357,21,16,246,590,0,380,786,49,18,465,13,64,132,5,28,146,178,10,508,779,23,140,48,24,71,939,929,660,51,135,607,324,603,115,230,43,46,241,38,192,683,462,247,66,612,568,941,835,819,77,12,550,90,36,560,199,4,312,33,9,893,347,330,65,59,52,20,519,2,278,50,626,58,202,37,345,771,294,117,40,102,70,470,451,156,448,350,316,707,236,173,288,31,75,54,672 }, -{ 156,354,586,271,195,591,668,132,48,360,340,121,23,21,463,446,1,5,13,18,658,296,407,51,146,70,698,883,626,55,60,221,777,163,32,363,379,621,590,562,58,49,167,467,647,522,150,61,118,24,411,781,115,447,223,767,786,7,16,31,87,308,687,22,9,259,279,212,44,17,518,346,71,10,371,45,98,2,919,241,761,33,12,93,64,39,541,37,608,35,774,341,759,75,664,941,663,125,846,581,401,120,638,566,303,68,936,260,0,932,199,105,634,270,706,30,453,141,102,95,86,110,107,771,273,535,82,727 }, -{ 23,51,13,453,4,475,0,12,457,10,2,115,401,15,11,403,5,1,40,99,14,59,961,165,569,629,9,32,77,37,308,3,719,7,57,421,21,64,17,494,6,22,33,102,18,202,177,128,730,197,523,670,139,141,899,16,90,341,8,56,217,210,402,48,24,386,125,27,318,95,45,86,72,775,269,758,50,65,19,76,111,38,317,180,89,62,342,54,46,734,28,247,41,29,36,509,237,26,880,196,352,365,275,468,120,216,153,152,108,25,137,757,349,221,181,117,277,49,477,123,34,291,304,801,82,31,678,597 }, -{ 48,125,221,21,165,23,197,13,763,423,508,193,98,293,457,391,5,867,693,386,441,81,18,16,51,92,60,314,64,683,401,49,237,96,104,43,430,35,397,558,241,180,126,523,105,32,758,140,38,72,510,308,474,356,230,95,279,102,501,784,517,663,858,541,31,633,498,718,149,127,91,422,97,418,118,900,159,144,115,511,44,203,246,366,24,223,480,453,361,350,218,160,71,22,701,719,393,40,173,124,963,421,370,148,69,643,93,743,598,493,298,253,191,170,164,116,7,1,939,730,120,74,33,20,326,63,192,269 }, -{ 202,5,450,77,120,132,494,195,523,318,326,1,260,146,121,271,167,576,203,0,817,615,18,21,403,692,234,604,354,142,49,13,35,23,7,212,20,14,2,682,158,252,147,137,101,102,128,32,33,265,48,16,291,551,342,419,364,60,22,966,475,43,107,9,178,363,51,639,17,10,687,12,821,6,859,159,520,416,97,848,805,31,360,269,109,93,198,329,259,39,55,64,562,786,402,92,82,553,878,70,61,647,455,180,411,95,315,191,4,842,105,239,165,822,638,115,98,634,24,453,346,126,99,156,899,199,522,28 }, -{ 39,166,9,101,404,158,333,30,0,190,310,252,274,68,438,419,100,344,88,49,254,124,694,865,154,530,656,364,577,28,810,265,65,35,131,455,159,857,16,21,24,793,22,539,212,777,105,625,747,677,709,562,95,48,286,1,329,703,18,228,71,125,272,36,109,13,10,289,538,219,676,706,778,51,31,98,557,86,23,175,60,553,406,55,962,671,840,118,224,168,221,83,669,67,213,382,96,570,64,960,346,327,170,613,731,191,242,44,115,759,439,957,627,748,114,634,264,688,593,37,251,137,320,127,7,520,167,518 }, -{ 15,110,4,120,11,5,1,23,13,165,93,21,10,2,32,40,180,82,197,3,51,6,33,0,7,125,351,901,391,352,77,9,115,260,102,341,117,217,317,134,31,141,752,453,12,48,8,153,386,509,873,203,457,401,196,37,898,372,59,326,475,55,14,202,569,57,498,403,719,17,64,308,237,494,318,269,94,90,253,961,22,44,730,36,697,342,177,482,56,474,137,89,72,421,349,38,670,576,139,111,30,28,210,148,96,758,143,734,629,16,244,160,128,18,291,41,805,247,25,19,84,373,245,61,488,579,205,523 }, -{ 2,29,52,1,26,58,6,262,5,50,14,70,103,46,19,38,309,27,96,112,67,516,75,163,133,331,218,145,108,223,17,236,45,83,287,25,487,74,114,171,785,409,357,113,238,24,433,151,53,36,388,220,739,34,545,396,307,532,583,675,61,600,181,42,65,73,764,160,635,21,603,394,12,80,594,186,150,324,894,632,3,7,334,99,54,137,315,891,69,445,37,412,323,48,745,537,18,283,87,458,138,822,308,243,155,765,86,711,895,398,285,28,651,366,226,115,766,849,294,23,480,820,51,221,297,22,732,209 }, -{ 120,77,260,141,51,13,217,23,317,1,450,291,15,202,137,326,373,110,177,180,21,269,165,318,128,197,352,115,349,64,32,203,5,342,351,0,102,48,341,96,854,93,82,523,2,244,457,9,160,752,386,36,922,12,365,372,37,898,7,304,275,403,86,10,210,253,817,16,704,28,83,90,901,498,143,6,615,4,719,22,494,237,18,661,730,473,30,24,308,50,221,40,76,72,55,8,59,35,11,33,391,285,67,89,144,125,61,961,99,39,401,14,3,475,247,402,44,31,70,453,49,509,642,153,208,482,17,216 }, -{ 444,183,291,297,358,196,554,255,56,59,123,269,33,605,108,122,153,177,275,210,77,57,341,117,130,128,475,467,730,152,134,42,403,4,50,880,19,381,315,401,51,65,421,216,630,349,283,21,503,235,133,85,23,11,719,368,46,202,99,494,432,229,40,14,29,561,665,339,670,480,736,588,523,453,102,15,899,650,326,256,249,236,197,125,318,2,775,757,711,624,396,365,328,524,78,64,3,529,194,18,13,0,250,12,6,690,25,445,266,48,511,402,285,26,789,678,260,242,165,120,343,769,543,488,409,390,369,366 }, -{ 23,13,51,12,165,14,120,153,38,197,117,37,99,401,134,386,453,54,128,202,141,196,64,5,328,40,237,21,137,139,15,260,33,2,719,475,125,133,180,457,0,46,403,242,77,236,6,208,1,36,96,32,4,391,361,115,308,52,194,629,17,569,730,477,86,102,546,817,450,19,10,758,961,933,923,903,558,160,11,29,22,18,3,188,111,79,114,108,65,48,95,291,56,349,157,94,41,338,221,89,82,34,59,277,177,49,317,304,506,372,351,50,26,421,217,44,31,7,72,341,352,350,316,312,207,183,143,130 }, -{ 95,64,348,33,467,56,343,174,554,511,77,312,233,120,108,180,0,561,6,355,543,13,306,370,197,165,859,25,18,29,297,256,91,63,899,237,49,770,650,412,235,85,138,19,42,523,65,671,90,102,22,9,32,368,194,40,23,10,4,576,426,416,204,161,153,117,116,86,26,27,104,448,775,721,719,457,450,344,326,275,217,72,24,605,730,283,245,196,98,76,17,5,577,519,123,835,475,192,81,78,353,588,386,365,269,260,222,220,214,179,170,141,134,125,119,105,97,66,51,28,11,881,273,242,172,746,707,643 }, -{ 120,51,260,326,450,202,23,77,141,203,93,13,137,318,21,1,82,165,110,15,523,5,351,269,197,64,102,373,128,33,217,48,180,386,32,291,457,125,817,352,922,854,403,115,144,116,177,349,210,12,96,196,615,475,7,719,372,367,237,40,730,2,342,704,4,98,391,10,275,59,494,453,401,0,37,6,421,317,50,16,90,36,44,752,308,9,498,160,31,393,18,899,221,341,14,3,30,45,402,8,898,304,83,692,99,24,551,72,947,247,216,28,961,153,864,678,661,473,88,509,70,22,285,17,576,300,76,35 }, -{ 15,4,11,13,5,23,21,32,1,64,93,33,2,3,180,40,22,37,141,10,82,0,6,77,102,44,31,352,7,120,117,165,341,12,48,49,110,197,98,134,9,752,17,901,153,498,342,269,196,115,291,365,128,260,36,317,137,51,95,59,217,318,237,202,349,72,8,509,391,14,873,177,16,523,86,922,386,247,143,304,210,125,29,45,57,457,453,90,854,482,403,111,579,160,244,18,569,437,89,61,253,76,27,899,351,864,275,450,719,56,758,116,875,961,277,468,164,148,25,817,401,316,84,139,546,490,216,46 }, -{ 15,341,13,141,23,33,217,4,77,180,1,102,40,317,5,137,0,365,202,51,11,21,351,854,9,269,82,10,115,372,32,64,922,901,22,117,260,352,197,153,128,36,28,196,752,134,165,59,318,349,3,120,2,12,30,177,244,37,450,143,291,31,86,457,48,139,160,16,8,7,898,247,253,125,523,18,49,44,57,403,304,55,730,569,961,6,111,110,14,96,498,494,17,308,719,72,39,237,642,386,475,90,98,24,342,45,401,817,326,873,661,76,277,95,509,105,421,210,93,811,453,717,144,391,99,89,164,221 }, -{ 272,105,131,327,286,320,578,109,22,28,219,239,224,159,9,616,371,49,95,623,538,98,716,910,713,127,258,737,187,185,385,761,424,168,170,64,55,254,347,169,928,916,0,158,164,1,924,31,23,301,51,293,39,627,374,125,913,201,44,836,242,912,36,395,13,116,65,479,634,24,442,654,86,346,284,276,35,312,137,308,512,160,115,194,420,10,175,2,154,7,338,21,128,16,944,83,143,456,12,67,601,202,762,141,908,124,535,289,574,871,688,165,401,900,5,763,96,892,933,384,317,506,237,860,14,37,68,30 }, -{ 16,68,35,71,18,60,118,24,191,126,92,101,150,212,167,154,302,175,9,346,55,0,273,7,124,108,107,375,628,28,566,14,722,149,815,199,589,439,882,575,520,363,121,562,246,467,21,364,1,806,279,140,22,49,48,252,517,695,65,230,345,847,647,97,621,411,69,146,336,46,653,39,10,109,694,604,535,5,189,768,399,446,637,50,441,2,755,419,125,298,608,43,314,423,13,649,158,706,463,398,100,67,818,508,38,12,37,20,826,95,354,264,23,32,169,166,132,271,105,96,221,674,83,51,932,429,356,54 }, -{ 20,470,147,43,904,376,798,427,325,595,142,178,858,198,319,0,97,173,414,22,259,61,422,819,77,945,202,14,32,5,362,49,426,392,107,207,887,725,660,481,263,465,234,104,450,534,494,861,95,28,18,33,120,10,612,64,344,105,13,30,324,39,21,455,817,115,46,146,102,31,132,4,246,356,318,65,158,66,260,40,7,48,523,581,9,35,159,315,113,729,23,230,125,347,112,38,128,878,359,59,36,60,12,239,600,182,237,192,153,342,196,683,98,16,170,2,306,298,357,54,279,101,70,560,501,345,199,845 }, -{ 51,23,13,12,99,453,33,202,128,64,153,102,15,196,37,403,141,40,120,117,475,38,134,115,14,137,77,401,139,10,0,165,318,269,82,308,21,2,5,197,54,3,180,260,22,31,494,421,17,86,93,1,95,44,111,457,277,237,402,450,9,110,18,6,98,719,125,65,351,32,28,217,49,342,326,328,730,629,352,386,285,361,221,11,50,36,19,341,48,569,177,41,59,8,194,27,24,89,79,523,29,775,4,961,365,7,670,291,144,373,210,114,46,317,391,34,116,509,757,203,236,108,30,26,817,55,498,57 }, -{ 383,136,17,62,84,440,119,504,56,240,548,3,80,129,378,123,106,128,555,205,4,184,507,59,162,11,14,183,57,361,249,38,202,469,152,64,179,495,483,90,32,215,257,214,245,130,209,54,161,27,250,503,328,229,618,211,5,73,402,45,12,306,318,40,34,514,790,76,452,77,65,26,86,297,141,19,53,497,742,269,814,283,37,33,255,311,194,436,667,114,177,61,217,803,95,207,266,2,50,432,769,757,236,102,21,527,36,556,46,22,10,72,115,41,494,611,381,29,196,99,216,210,151,248,445,137,0,576 }, -{ 70,652,48,5,638,846,1,21,163,340,888,767,221,125,761,349,260,562,269,303,518,658,591,586,13,698,623,23,883,774,98,87,49,31,9,371,296,223,51,763,850,863,120,541,360,346,141,634,64,535,39,30,2,0,845,7,622,156,318,195,44,95,202,900,32,12,931,379,6,558,768,293,271,115,777,401,58,354,818,61,55,17,132,668,450,308,385,914,351,919,93,922,391,457,128,22,590,212,291,77,807,762,758,252,159,101,663,352,538,372,100,446,75,520,18,937,284,96,146,626,326,127,118,116,771,522,463,69 }, -{ 66,135,74,97,278,6,172,69,324,140,267,808,462,14,550,204,7,357,138,87,189,85,298,75,29,2,500,52,335,38,25,92,582,802,174,571,572,841,563,42,380,1,24,314,21,350,16,451,67,46,280,220,501,443,150,620,230,103,486,423,35,353,622,60,83,226,71,192,32,889,26,22,65,903,95,5,48,232,330,64,108,86,565,792,641,580,36,448,70,509,197,222,43,348,558,426,241,726,125,262,0,877,893,50,872,81,309,63,233,950,37,749,18,388,149,145,12,91,237,10,355,606,294,246,114,508,673,28 }, -{ 51,23,33,102,13,128,40,196,202,77,64,65,139,141,99,12,14,453,117,153,475,403,134,10,86,137,4,11,22,0,318,269,115,401,36,114,108,21,38,5,120,180,421,165,402,59,28,15,95,82,210,37,2,177,494,31,342,9,260,217,277,523,386,3,308,450,6,457,730,17,133,18,719,24,46,361,1,352,49,194,143,111,54,50,351,197,300,94,44,237,341,164,365,221,389,67,32,48,283,19,485,291,29,236,27,854,93,961,758,110,326,817,317,285,125,275,90,52,45,34,26,7,391,181,57,8,752,670 }, -{ 88,264,435,100,166,274,772,921,478,382,909,639,438,960,521,96,897,410,30,1,466,190,530,778,265,321,682,691,418,144,724,329,686,39,9,447,93,31,914,131,404,203,44,411,765,335,593,475,795,367,98,625,254,664,120,213,613,403,0,744,539,116,83,656,363,238,5,48,13,576,77,812,805,110,23,21,141,966,69,125,616,829,326,286,201,82,35,520,225,51,821,127,604,285,284,165,260,217,33,36,310,731,340,842,223,102,137,101,615,64,831,252,228,49,10,67,224,557,219,443,692,406,272,268,910,506,197,351 }, -{ 440,62,136,548,504,56,84,3,555,383,507,129,361,128,123,162,4,17,59,119,184,14,202,183,152,161,402,495,328,57,205,514,527,229,215,80,27,257,38,11,378,73,757,497,472,240,211,130,503,452,803,54,469,77,53,34,494,381,318,283,266,250,106,12,102,33,245,210,432,64,403,19,40,880,236,90,5,556,179,21,412,377,2,32,200,300,99,196,269,585,153,488,141,51,275,216,45,37,117,249,529,194,214,372,76,862,177,134,133,313,26,421,0,139,471,41,305,65,248,483,13,114,678,23,217,50,72,775 }, -{ 911,617,959,332,206,253,244,141,282,120,110,384,951,143,352,260,269,10,160,373,717,531,811,417,940,55,728,661,533,36,434,450,93,137,559,203,473,498,642,116,180,326,855,261,295,44,268,638,922,854,752,31,499,164,318,351,201,535,144,851,564,341,365,64,8,115,165,197,843,1,217,317,704,864,187,699,567,127,202,873,237,251,22,258,574,824,98,86,968,860,489,23,817,82,125,21,169,509,926,219,13,276,15,601,28,345,9,372,51,901,349,943,871,5,367,291,776,308,131,391,96,523,105,83,386,902,338,35 }, -{ 120,260,450,141,77,15,1,23,351,326,137,64,373,82,203,33,13,291,51,21,217,523,269,177,102,128,922,165,110,197,854,5,318,457,180,352,48,32,125,144,93,817,160,202,386,96,50,7,372,36,349,304,210,2,342,730,115,898,719,16,0,196,247,494,59,10,9,473,22,4,403,116,18,86,67,341,752,615,95,75,901,317,275,704,24,475,453,437,367,208,164,163,143,37,90,899,244,98,12,3,365,968,551,300,237,206,55,35,29,6,801,805,678,576,401,393,391,288,268,216,194,99,72,61,58,49,39,242 }, -{ 15,0,1,2,5,51,9,23,7,13,6,901,12,3,8,180,4,141,82,115,14,10,341,120,197,33,93,730,21,40,125,401,260,202,102,22,110,64,569,719,457,165,37,961,898,453,18,351,31,28,203,16,137,352,217,450,77,326,11,403,629,308,128,196,32,30,36,269,44,98,116,318,365,99,475,373,670,237,24,899,854,523,391,95,421,49,48,317,177,221,817,153,55,117,752,39,86,144,38,642,105,922,242,291,54,143,17,134,494,498,244,59,661,96,473,65,160,509,139,170,247,89,114,90,638,20,704,482 }, -{ 104,7,97,107,356,560,66,232,707,359,298,568,289,324,712,392,192,38,14,426,173,65,95,64,172,387,22,43,92,32,357,362,214,20,259,526,90,0,330,380,126,246,501,49,5,86,893,74,500,194,874,147,135,612,230,10,204,779,52,2,729,808,550,140,35,835,21,28,314,77,312,60,16,465,132,715,279,423,414,600,885,802,683,18,81,24,36,13,636,861,150,33,178,29,819,519,288,4,31,58,660,448,121,534,12,168,61,48,581,278,70,37,146,102,441,23,46,199,142,6,751,249,76,319,202,189,124,237 }, -{ 6,66,1,2,74,67,29,14,24,69,83,135,25,458,52,150,108,451,75,38,103,380,267,278,7,87,26,42,324,36,357,138,602,114,97,19,85,238,594,273,65,149,398,335,172,46,160,204,70,18,711,550,50,16,309,220,71,732,96,696,5,133,603,12,891,86,174,28,280,500,418,467,226,32,22,21,222,189,27,60,124,423,486,547,895,302,733,236,532,388,208,64,63,0,35,17,13,298,95,262,45,906,336,646,582,37,145,194,571,20,531,112,23,58,140,516,484,48,886,218,118,115,99,81,462,429,54,55 }, -{ 51,23,13,453,12,115,202,21,403,401,5,4,457,719,475,37,99,165,32,308,64,3,1,2,523,10,730,0,128,17,197,15,141,494,11,22,14,6,269,961,7,318,120,386,77,899,18,247,421,450,817,48,16,117,59,90,33,125,217,9,19,153,180,629,26,758,237,24,177,28,221,95,57,341,40,25,38,54,569,391,27,260,402,29,216,317,36,72,291,102,56,134,365,45,76,49,468,304,352,137,210,203,34,89,196,342,82,275,194,349,437,46,123,326,50,20,8,670,482,86,509,139,498,316,53,61,576,288 }, -{ 57,59,77,4,381,11,412,369,210,291,421,283,803,53,250,542,377,14,339,471,275,108,99,670,19,300,453,403,23,27,401,368,40,51,202,361,775,21,12,554,236,183,402,813,33,342,38,378,475,503,46,37,444,10,736,390,152,90,56,561,285,153,134,123,117,650,73,899,523,281,0,529,494,63,386,880,432,162,514,128,58,605,102,817,743,690,495,349,277,256,196,137,111,79,18,9,801,235,139,78,867,391,200,119,758,130,42,26,480,389,719,714,467,341,80,269,122,730,221,216,188,177,161,133,114,45,29,22 }, -{ 15,1,5,2,0,7,23,6,13,51,9,3,180,115,12,457,4,8,14,141,901,719,197,33,21,82,961,365,22,120,165,341,31,351,64,202,308,77,37,401,260,117,16,153,28,11,110,93,730,10,32,44,269,137,217,569,18,98,102,49,128,317,453,125,30,36,99,523,48,352,134,752,450,196,386,318,326,40,95,24,758,898,17,116,629,39,373,203,86,72,899,237,403,59,177,35,873,90,89,55,291,105,817,144,734,475,244,139,421,65,498,76,247,494,20,38,854,349,160,253,509,372,96,482,221,216,615,143 }, -{ 64,237,180,95,312,197,146,32,90,247,316,929,352,126,165,288,317,132,304,13,60,490,77,217,955,522,92,314,86,22,4,23,7,5,21,626,40,14,11,12,652,498,291,177,232,164,199,33,10,482,51,141,115,150,633,462,579,340,216,16,529,128,37,360,638,388,121,359,143,468,275,59,107,49,534,125,202,658,509,269,888,267,1,598,581,588,76,17,467,451,296,28,751,660,441,349,194,29,31,71,698,279,253,45,640,57,48,546,134,117,18,2,830,647,372,102,65,437,493,351,98,733,622,423,273,241,309,137 }, -{ 1,23,13,51,120,15,202,180,5,21,260,141,0,326,2,137,7,77,197,450,269,33,165,318,9,128,352,110,48,6,102,523,12,115,342,317,4,32,16,386,14,403,373,203,817,36,18,217,64,96,37,457,93,752,82,28,341,494,24,615,3,22,291,351,401,8,475,10,308,453,421,391,901,221,196,59,719,730,854,30,177,90,160,365,402,125,35,498,31,285,99,39,11,244,237,72,20,899,44,40,704,86,17,922,83,50,210,349,569,576,98,95,67,76,372,509,49,143,116,253,961,65,144,89,55,551,661,29 }, -{ 14,46,2,16,24,75,69,35,220,52,7,38,1,140,267,29,71,50,309,60,87,92,70,171,189,67,18,54,163,262,335,108,230,58,366,103,150,5,675,236,181,112,223,278,409,537,21,83,294,48,155,68,12,486,149,37,571,582,96,0,246,334,135,186,443,45,328,28,32,133,641,97,451,151,388,64,307,126,25,9,502,760,394,281,357,22,65,66,774,36,10,55,172,114,61,6,565,462,461,251,552,563,400,74,820,330,238,218,600,72,99,86,606,314,17,380,430,227,587,433,20,13,23,583,516,545,121,115 }, -{ 127,98,31,44,299,276,284,9,935,293,116,599,49,0,456,201,492,28,39,105,144,371,662,22,159,125,272,137,242,131,737,489,393,567,268,395,51,1,761,578,367,202,158,30,109,918,916,685,219,254,203,616,23,434,36,21,55,141,295,95,13,24,16,187,93,385,128,18,96,948,48,269,763,160,318,64,5,165,86,101,244,326,115,518,35,286,836,261,37,512,7,10,68,327,623,716,384,120,403,253,688,110,333,224,2,890,457,143,100,197,12,386,252,301,320,258,963,310,65,14,237,924,221,170,494,421,83,699 }, -{ 53,573,445,297,436,73,6,27,151,113,26,250,491,19,614,145,611,200,315,112,45,396,881,138,80,42,58,70,34,684,25,631,17,222,287,106,74,472,122,61,624,714,690,235,5,90,32,65,255,64,648,29,14,66,95,85,322,2,209,243,549,311,644,22,1,52,665,280,47,161,86,76,87,194,312,651,3,667,133,416,75,307,114,128,78,62,137,51,57,4,226,141,50,136,46,862,483,49,289,884,119,440,632,814,12,21,176,237,148,56,236,283,174,36,135,63,123,337,10,453,33,412,84,469,214,59,108,23 }, -{ 90,788,804,32,115,693,494,81,84,56,725,403,119,21,18,681,99,77,202,526,65,240,214,576,64,817,91,0,784,350,241,102,397,342,690,848,104,61,24,945,318,69,825,453,421,365,210,134,123,117,33,20,707,402,60,293,263,207,194,114,49,888,370,97,43,673,671,523,726,326,125,510,879,773,718,715,701,462,283,249,180,153,59,57,51,11,887,835,814,111,23,4,889,468,289,247,221,95,89,86,66,120,719,325,192,899,730,683,595,422,757,486,484,426,351,312,306,302,285,275,260,238,216,203,196,177,174,165 }, -{ 24,7,14,149,71,16,18,108,65,69,28,154,189,35,2,140,124,92,68,150,118,175,429,302,0,66,273,67,336,38,55,97,251,46,60,36,547,1,267,484,22,458,230,29,83,6,9,388,86,650,172,314,95,109,114,52,135,21,64,886,602,74,505,10,232,5,20,12,596,823,705,398,32,103,49,101,420,570,236,531,289,533,50,298,168,169,48,133,462,451,380,23,882,246,283,51,799,13,43,25,185,797,194,847,75,357,278,158,37,439,346,594,330,733,399,423,610,164,192,535,701,104,345,467,143,443,125,137 }, -{ 68,0,101,9,212,65,124,35,154,189,69,149,114,230,67,39,252,100,1,336,702,329,16,265,520,83,103,191,264,755,64,589,88,562,28,705,30,24,283,167,118,18,777,732,478,12,21,723,71,166,23,49,175,133,398,335,596,55,664,218,237,429,389,532,818,604,364,50,158,115,484,289,246,352,238,410,141,22,759,419,323,375,345,36,13,10,806,128,51,547,796,269,213,5,48,722,140,247,321,96,565,480,164,180,251,330,803,553,37,676,95,143,202,86,75,490,443,7,936,724,99,2,190,694,346,197,782,917 }, -{ 5,2,186,61,29,52,45,58,311,17,171,80,227,209,48,155,1,106,243,496,50,46,334,454,592,21,513,14,502,255,869,666,151,663,262,223,75,207,38,32,270,667,62,6,27,738,659,119,56,3,807,54,780,287,378,84,721,74,220,290,96,163,483,72,263,89,67,549,103,281,136,37,583,76,430,181,536,7,70,408,12,394,64,787,73,675,148,495,469,69,161,400,409,36,833,86,65,34,19,474,587,742,767,221,26,324,128,4,309,115,24,83,306,425,25,22,431,10,241,760,90,141,764,541,133,240,95,383 }, -{ 15,1,13,2,5,3,4,0,341,7,6,23,10,11,14,12,9,33,51,17,165,153,197,365,569,180,77,40,102,8,115,117,21,901,64,217,317,22,141,16,128,32,457,196,31,134,28,36,291,18,177,139,137,237,719,961,37,57,120,111,352,349,386,59,202,453,629,86,752,19,758,38,93,873,269,44,391,372,49,143,95,342,730,30,475,498,509,260,210,318,125,110,304,55,27,29,403,82,48,24,277,72,482,275,116,494,25,450,98,54,351,76,90,326,41,79,373,99,899,546,523,194,144,474,94,56,203,39 }, -{ 13,23,15,51,0,1,10,4,2,5,77,9,115,3,12,14,22,102,11,197,33,457,7,961,165,453,403,40,59,6,21,475,494,18,719,64,180,28,202,569,32,401,31,37,17,16,8,210,177,341,523,120,141,386,730,49,217,99,44,318,57,450,308,36,629,421,125,93,153,342,90,117,24,111,498,139,269,237,30,196,817,291,134,317,326,98,95,365,899,260,352,19,48,82,275,391,72,38,89,110,509,482,86,873,216,76,349,148,247,79,27,54,116,474,65,203,901,615,55,45,351,128,758,137,304,752,94,50 }, -{ 15,13,0,1,23,2,10,102,5,9,33,7,4,3,6,77,51,115,12,11,341,217,196,40,14,117,153,18,317,569,22,8,457,365,523,16,342,180,197,165,120,719,453,961,59,134,730,21,64,141,260,31,901,401,291,899,386,28,139,82,210,177,349,269,49,24,482,202,17,372,817,44,450,93,629,111,32,125,351,326,300,352,37,318,110,128,30,36,475,95,579,468,57,308,19,137,38,98,247,437,304,275,20,65,752,237,498,391,494,758,615,90,86,373,854,116,277,99,72,96,48,421,203,45,216,105,898,89 }, -{ 166,39,274,190,438,310,30,333,530,100,252,656,625,539,265,404,778,88,101,455,9,0,557,960,593,329,254,131,1,676,382,709,724,158,553,840,731,228,98,31,669,23,68,219,264,48,21,748,957,812,406,49,224,127,44,13,344,36,272,286,51,159,520,419,105,96,116,125,613,83,5,93,795,124,213,28,863,22,223,35,478,10,816,352,293,69,67,829,16,827,258,616,364,160,64,242,639,578,120,167,128,65,518,217,321,154,32,137,187,604,180,4,679,435,118,18,251,212,144,86,95,759,141,77,410,793,371,37 }, -{ 734,94,148,308,79,111,413,468,89,37,431,115,179,401,569,197,629,341,188,13,873,474,490,365,72,12,11,134,205,245,317,117,4,247,358,59,40,152,509,51,482,901,961,76,99,528,23,180,10,498,217,216,477,339,77,139,102,38,165,55,749,421,196,743,579,143,33,542,428,391,875,752,471,497,54,1,452,153,177,21,488,588,3,64,141,349,453,485,670,277,291,457,2,128,5,57,403,36,475,529,184,540,202,48,377,90,7,372,14,50,405,210,437,15,758,402,464,386,352,300,157,6,17,0,45,794,9,342 }, -{ 539,228,224,219,190,816,840,871,30,669,530,957,258,748,863,406,93,187,778,531,160,213,88,466,839,36,131,137,116,202,728,679,926,120,44,352,39,321,373,318,274,276,851,31,574,442,860,144,730,217,201,203,613,251,856,55,559,533,944,141,435,1,450,242,230,22,127,86,110,64,800,28,49,326,473,9,260,752,268,254,166,418,717,567,456,98,96,776,902,385,968,100,719,180,269,616,317,918,351,83,827,492,10,625,931,494,125,831,908,197,21,365,372,82,371,35,77,716,854,795,689,295,704,5,332,345,244,291 }, -{ 801,393,125,791,386,730,23,551,51,21,144,116,48,203,98,221,175,165,949,93,575,31,126,13,958,326,697,601,421,345,788,293,367,22,963,541,110,455,60,608,670,273,197,44,463,4,32,677,623,127,33,259,834,35,948,453,375,133,107,120,77,40,223,0,407,342,68,719,121,43,14,446,621,590,523,373,308,102,49,16,899,1,815,475,199,770,725,191,493,804,96,36,319,141,101,92,39,146,690,71,55,7,118,38,805,352,649,735,615,602,533,531,480,323,279,246,208,201,196,180,160,105,64,743,589,132,117,598 }, -{ 13,23,77,51,115,141,33,217,4,2,177,6,0,102,40,7,64,11,10,14,3,1,180,269,22,202,9,59,16,15,17,352,318,128,18,197,291,247,32,165,196,153,117,134,317,19,5,90,341,125,237,24,137,210,36,28,304,349,403,49,12,95,86,25,275,372,453,365,31,308,752,216,342,20,143,139,475,93,27,98,498,57,26,401,21,120,386,391,457,326,8,569,316,494,421,111,65,901,203,110,105,30,260,468,288,164,437,241,45,48,29,35,99,44,482,719,82,402,509,144,37,244,55,546,56,285,961,293 }, -{ 2,52,29,70,112,7,58,14,75,87,46,220,307,186,171,163,151,1,334,262,135,278,66,5,69,155,294,97,38,140,74,16,45,172,287,549,92,227,400,24,849,226,331,113,61,324,25,48,852,32,35,21,37,6,461,67,409,50,19,12,644,315,267,145,26,243,223,311,27,64,60,54,232,122,71,18,83,17,571,583,189,86,36,853,103,72,65,394,380,587,780,774,309,20,43,22,357,42,96,314,298,128,209,335,536,95,474,767,675,270,337,76,80,89,330,222,0,90,721,290,230,10,137,108,246,126,28,448 }, -{ 321,88,213,435,466,100,689,382,30,230,1,795,352,410,96,217,699,921,190,831,521,530,443,36,83,686,144,418,840,264,438,854,128,251,539,957,44,141,180,557,752,335,69,223,317,960,31,265,48,137,855,116,934,201,98,748,160,669,909,93,166,203,812,731,403,21,274,351,593,39,778,206,367,772,219,64,228,131,455,202,9,284,5,372,35,326,238,127,23,735,82,51,656,285,67,158,310,125,639,800,221,187,224,332,269,120,365,576,494,13,897,252,345,822,478,765,349,702,77,268,421,242,208,110,318,859,101,237 }, -{ 363,520,411,354,101,195,668,132,447,9,156,905,364,664,121,146,360,23,18,759,781,1,98,765,271,51,96,676,252,264,13,777,5,31,586,621,591,478,223,167,848,21,100,691,936,551,33,393,857,70,48,883,125,682,77,16,39,687,948,821,44,367,116,93,24,407,265,127,593,834,110,49,842,522,296,4,293,166,626,812,865,64,404,203,333,102,538,212,36,638,40,55,446,50,647,118,291,656,897,144,639,60,771,697,128,403,379,67,35,692,541,165,463,163,604,453,658,199,590,69,791,286,7,32,12,317,217,724 }, -{ 51,23,13,453,401,475,12,403,457,730,719,21,5,308,99,115,2,32,11,4,3,421,961,1,165,15,629,899,0,670,37,10,6,17,197,9,33,18,22,523,569,64,40,202,28,19,56,26,7,57,27,16,72,48,196,194,24,59,494,177,153,45,36,139,77,386,210,128,117,65,758,34,8,391,341,817,468,217,54,29,450,275,221,76,757,509,350,141,134,90,89,46,38,291,180,880,237,102,304,216,775,734,546,402,361,277,137,130,129,67,41,25,14,247,148,62,901,498,477,283,262,260,133,123,74,42,801,365 }, -{ 72,76,89,205,179,90,245,528,148,54,184,37,12,431,38,308,152,4,257,59,474,316,428,401,464,57,460,749,32,288,358,405,229,23,477,645,743,99,11,21,51,115,497,77,217,1,794,79,157,14,5,629,540,488,453,216,45,449,17,155,2,221,770,165,48,670,421,569,328,266,50,452,197,341,181,3,128,769,10,365,137,64,13,317,587,241,36,457,734,188,247,0,339,313,7,536,350,471,9,202,94,468,524,509,721,482,141,46,129,102,773,697,33,432,40,180,270,237,281,619,741,381,86,361,961,543,476,720 }, -{ 376,43,147,470,20,595,173,107,858,97,319,142,427,819,414,178,729,362,426,325,5,259,7,32,861,392,61,798,246,14,104,198,230,560,885,324,77,21,422,904,356,0,465,126,357,48,707,234,38,330,22,49,207,35,501,612,66,13,202,95,534,359,298,2,10,577,76,28,16,70,113,64,132,4,17,481,318,715,102,60,58,18,784,59,120,40,72,11,90,29,500,23,74,279,879,146,33,1,112,660,387,56,52,45,315,81,232,9,494,177,140,36,115,37,153,600,57,199,217,31,12,121,347,51,403,878,671,164 }, -{ 202,269,141,494,318,51,137,403,128,77,453,4,475,217,678,349,421,5,342,352,96,102,291,177,372,317,64,341,180,21,2,40,10,59,32,752,33,11,61,3,515,120,304,36,0,365,6,31,13,22,7,39,30,95,125,260,237,12,717,275,115,28,23,98,244,482,268,105,947,851,402,805,203,194,144,954,576,450,351,48,859,289,283,86,65,55,49,44,795,197,82,90,498,312,285,241,201,182,165,160,57,56,14,411,293,284,9,822,326,899,523,931,921,897,863,854,839,821,735,691,668,579,569,442,360,251,214,207 }, -{ 77,202,318,102,494,33,128,269,23,13,51,196,153,177,117,342,134,291,403,0,141,137,64,15,349,82,22,351,203,49,275,615,373,21,551,393,473,217,95,859,31,210,4,475,402,1,352,65,11,10,450,120,32,180,86,285,36,18,2,7,3,453,12,260,6,28,98,14,125,39,421,48,90,5,372,40,194,59,44,165,817,16,9,115,326,341,523,17,678,216,30,197,317,116,576,96,127,237,61,93,300,24,365,124,70,401,105,730,214,160,114,304,289,110,329,20,704,163,35,386,208,899,144,692,244,67,50,719 }, -{ 253,951,352,110,811,499,244,854,10,638,642,752,559,180,143,141,564,8,260,341,498,417,922,661,901,197,206,165,911,373,137,93,282,873,351,384,15,959,55,332,120,762,717,728,269,160,898,82,473,64,326,164,36,365,203,22,704,533,317,509,31,479,86,968,116,318,115,202,531,1,268,217,33,535,28,44,9,617,237,13,434,4,261,23,77,940,125,5,372,11,851,864,40,32,338,21,102,0,569,386,30,96,482,349,169,824,421,51,105,546,12,401,242,758,576,391,35,127,98,170,2,117,144,844,295,457,24,291 }, -{ 141,23,13,5,4,269,352,51,180,21,317,115,202,217,1,197,2,11,365,318,32,341,3,6,372,137,7,498,77,64,349,291,48,752,33,0,165,237,9,15,22,12,901,221,253,16,144,244,143,403,93,28,401,30,453,110,475,24,304,40,39,120,125,494,421,203,308,72,160,569,18,386,177,35,102,482,31,14,260,44,10,36,391,95,473,373,153,49,468,864,247,117,873,128,100,88,59,134,69,546,241,76,717,89,86,196,17,37,437,166,509,351,164,98,854,67,8,90,704,629,82,851,450,96,811,367,326,284 }, -{ 252,101,18,9,0,68,16,118,329,35,364,24,39,167,60,333,265,109,158,553,71,212,677,28,419,604,100,793,49,286,159,154,191,105,55,310,272,694,327,455,124,810,806,48,22,166,254,593,21,7,374,344,1,520,146,121,538,5,917,65,346,706,857,634,92,562,23,627,404,126,925,13,98,185,51,108,30,14,907,271,169,709,31,942,95,10,446,96,149,628,557,125,375,170,175,67,688,199,363,132,639,239,190,656,107,621,320,12,912,638,137,36,150,44,815,302,50,463,865,221,438,32,37,578,671,439,848,131 }, -{ 28,109,158,9,168,49,39,175,35,159,22,0,55,185,65,289,272,67,95,194,114,346,333,577,169,584,254,1,344,327,105,570,286,336,24,83,86,30,747,68,627,374,124,505,69,101,810,610,837,439,36,154,535,133,103,7,310,16,14,835,131,756,601,345,2,429,874,149,389,50,799,793,252,347,283,208,547,51,251,46,23,100,128,10,189,312,164,424,912,21,484,5,64,688,637,12,190,578,455,96,239,420,13,518,143,634,137,419,533,364,18,398,166,48,709,320,218,538,127,160,170,230,323,125,71,37,98,202 }, -{ 15,13,1,5,2,3,4,341,11,23,0,33,6,51,7,12,40,115,10,9,77,102,14,197,365,180,17,901,21,217,317,196,165,32,569,22,141,8,64,961,453,457,16,153,59,117,18,352,31,202,125,37,139,291,401,629,28,386,269,134,719,177,475,237,93,318,120,730,44,48,372,110,24,111,899,36,210,403,19,57,523,391,349,752,326,49,38,128,308,342,260,494,498,116,95,509,98,137,30,873,304,758,90,801,27,56,86,203,615,144,275,45,482,450,65,670,373,54,41,50,734,94,143,25,82,244,105,79 }, -{ 173,693,18,104,422,20,102,0,77,49,61,5,784,560,526,707,226,32,13,33,397,64,193,344,134,117,91,66,21,153,715,263,81,95,172,232,207,196,31,11,6,65,510,42,25,414,197,180,135,48,29,22,10,43,72,819,4,470,324,40,85,546,86,887,347,51,319,204,57,28,27,426,359,283,498,376,138,128,90,194,392,643,879,701,474,87,74,59,52,38,9,387,681,7,862,597,192,814,847,718,713,334,291,270,217,165,125,83,37,56,23,202,177,141,122,825,241,509,330,942,817,523,370,269,115,98,84,44 }, -{ 23,51,386,308,13,401,221,421,801,949,719,165,468,730,21,770,341,125,697,453,867,14,115,670,457,6,391,403,1,475,958,523,450,117,102,197,629,365,33,569,607,7,2,758,120,66,899,515,743,134,217,791,342,97,16,326,67,733,74,350,150,773,749,260,202,52,29,18,9,501,456,805,809,734,482,56,0,317,135,4,906,458,153,3,380,103,645,579,558,490,24,93,83,388,196,108,817,11,99,903,685,177,69,32,561,267,236,335,5,180,594,696,554,451,642,576,564,559,546,349,291,238,122,89,87,76,75,73 }, -{ 49,0,24,16,105,159,28,9,35,158,68,320,18,109,239,55,65,170,124,7,1,154,301,347,71,95,14,286,518,101,2,344,327,272,127,118,39,21,60,374,890,98,577,623,12,149,22,5,916,338,512,168,36,713,395,23,31,67,51,371,13,48,185,175,125,137,10,424,169,64,202,737,479,30,747,538,6,761,37,108,128,346,242,32,740,293,131,46,50,302,654,69,44,252,419,289,810,86,114,92,83,616,141,385,846,299,164,254,364,506,403,677,310,671,375,191,221,116,938,318,634,100,165,439,115,143,333,96 }, -{ 2,5,29,45,207,58,61,1,76,292,32,655,263,14,476,52,72,6,119,17,306,70,186,7,106,46,179,214,790,90,148,243,720,38,227,50,240,112,151,710,255,592,84,89,64,48,25,464,75,241,209,21,129,74,155,460,358,3,128,454,496,425,36,77,19,22,141,738,10,115,56,26,86,16,123,66,408,311,27,245,0,249,95,65,205,287,519,290,618,40,24,177,549,171,202,87,4,59,163,307,54,334,237,51,23,62,269,12,102,37,18,449,869,137,80,69,113,28,99,33,67,13,135,180,318,315,769,288 }, -{ 125,21,115,95,715,197,49,165,64,56,66,32,6,278,13,33,713,681,808,350,204,237,120,408,263,241,172,135,81,22,324,87,509,74,0,85,97,4,90,86,468,65,888,353,174,558,391,841,192,180,23,950,872,645,571,554,650,580,141,5,2,412,283,467,341,673,59,138,38,108,903,177,91,51,7,511,370,164,75,31,620,475,203,893,170,98,712,104,44,19,885,10,1,561,426,415,308,63,403,196,153,117,102,84,389,128,27,825,569,210,77,347,53,123,386,316,159,143,835,194,900,448,93,11,546,232,18,572 }, -{ 612,325,427,202,107,494,5,403,470,147,518,376,64,362,49,21,392,788,465,98,14,342,125,623,318,178,48,31,845,804,534,858,423,70,690,595,414,278,93,422,269,453,7,660,102,77,33,693,61,953,767,798,819,581,307,298,234,198,116,110,97,39,32,30,10,237,4,671,663,389,289,194,128,43,0,20,904,725,761,711,678,509,501,493,366,319,236,232,220,174,104,99,95,88,87,68,55,44,38,37,18,9,900,293,13,715,441,315,105,291,163,141,391,112,848,397,22,763,713,558,846,835,828,822,757,657,557,546 }, -{ 32,76,21,72,14,241,449,50,292,2,350,5,1,155,48,221,46,38,89,179,270,45,476,90,54,720,214,430,148,464,17,281,129,460,37,205,413,741,181,36,245,519,29,227,52,290,257,184,405,12,123,710,3,528,162,7,773,243,541,10,358,0,288,431,67,57,249,536,316,152,99,96,23,106,171,51,513,4,743,308,618,128,137,6,115,64,474,477,103,408,86,207,769,229,263,9,328,83,133,180,59,183,119,552,794,787,540,114,217,488,425,218,62,11,421,659,77,645,760,721,22,524,202,58,400,401,141,770 }, -{ 24,154,149,28,124,16,35,0,71,7,14,68,175,108,65,18,55,92,109,302,118,9,336,570,484,398,69,140,60,2,420,67,189,22,101,46,150,185,158,346,230,1,439,169,252,273,168,419,289,39,49,38,505,251,83,345,701,535,799,610,637,267,21,36,97,10,650,50,95,12,429,246,103,533,114,388,458,133,5,48,399,314,86,6,671,375,159,66,364,29,236,329,962,703,105,547,23,51,172,601,333,283,64,265,886,126,96,194,52,13,232,722,32,20,389,54,37,677,164,100,143,125,327,602,75,917,344,286 }, -{ 5,14,1,50,48,2,46,38,67,54,45,103,24,270,21,96,513,155,290,83,58,61,281,69,32,36,181,72,502,0,29,171,17,12,16,7,76,263,37,18,28,52,227,35,425,207,89,666,22,221,243,133,541,663,65,10,741,218,408,223,114,536,108,474,75,9,186,6,592,552,51,23,99,238,328,115,309,794,540,3,433,834,86,292,760,477,148,449,428,64,476,128,400,528,119,655,55,236,241,106,202,141,765,766,487,70,13,163,137,366,95,71,587,697,488,720,179,160,19,418,807,308,659,149,27,90,431,4 }, -{ 961,13,569,37,197,23,474,94,148,79,12,629,401,111,901,341,15,51,165,405,734,873,99,4,413,188,134,89,10,11,358,152,179,117,308,115,40,59,72,468,245,139,457,33,153,247,365,477,205,277,339,317,77,758,5,38,498,76,579,453,216,180,0,3,542,762,36,490,2,177,102,143,482,217,196,471,14,452,128,437,55,1,54,304,22,210,9,377,64,638,202,17,21,488,349,431,300,775,528,485,32,7,141,318,372,86,8,509,157,45,291,497,137,184,6,864,402,670,275,880,403,110,543,328,529,875,90,657 }, -{ 102,33,51,77,23,40,128,202,64,13,141,139,196,318,403,153,269,117,99,137,22,4,453,134,59,115,12,10,11,475,0,14,86,65,95,180,15,2,120,1,210,494,342,28,18,165,352,6,36,49,177,217,300,260,82,719,401,421,24,402,386,21,5,457,7,197,730,3,125,37,450,19,291,48,523,17,351,237,27,114,326,93,50,111,38,341,317,25,285,98,26,277,110,54,194,46,9,391,361,275,16,44,31,961,32,308,96,349,899,34,133,854,569,29,485,757,108,105,283,67,144,373,57,509,678,498,221,116 }, -{ 24,35,1,67,0,28,18,16,103,9,68,69,50,65,83,149,12,5,71,133,14,7,22,114,75,96,2,55,189,218,108,48,21,54,223,175,281,251,181,23,46,58,37,124,101,51,336,238,36,70,13,154,118,163,418,10,99,60,745,766,137,537,39,128,38,335,202,141,487,49,361,64,32,45,115,486,155,765,283,109,502,345,230,140,87,430,171,29,269,398,30,267,95,221,543,92,86,820,236,217,6,412,285,17,160,302,77,177,596,61,318,180,458,488,31,52,540,165,352,4,237,105,920,545,125,657,705,273 }, -{ 384,617,940,911,959,855,332,206,282,434,244,253,141,268,352,93,120,144,10,269,137,110,160,201,417,36,143,450,116,203,260,44,811,31,717,951,55,295,318,64,187,261,373,567,202,276,489,258,326,498,98,642,559,180,473,127,22,728,860,217,1,661,219,499,86,23,851,638,8,197,692,341,13,531,165,224,351,523,817,115,9,854,164,125,752,365,28,533,367,51,922,15,564,131,21,96,317,128,82,5,662,699,843,105,871,372,615,237,0,83,386,30,864,509,242,800,901,284,291,551,77,2,776,349,7,704,37,574 }, -{ 93,30,203,473,326,704,137,652,450,31,800,269,848,160,127,190,274,144,254,219,187,625,349,303,166,352,120,372,116,521,224,110,131,752,435,88,217,202,141,260,291,77,367,156,340,228,822,744,5,382,197,296,658,438,180,863,410,44,730,698,578,317,418,1,859,165,850,829,735,494,102,795,616,159,264,921,98,960,373,36,100,23,13,341,128,21,64,258,10,0,523,330,318,39,717,321,778,709,7,968,125,919,942,177,49,86,158,9,365,225,901,478,105,686,531,33,924,888,851,96,2,363,371,442,385,747,691,615 }, -{ 53,73,27,250,26,200,19,297,630,714,472,611,42,122,235,25,17,34,6,436,65,684,106,680,690,80,14,256,113,322,57,813,85,108,64,45,59,648,283,4,161,194,573,445,236,389,128,862,444,114,624,390,469,78,56,51,141,133,2,90,22,84,11,176,491,0,18,255,495,453,416,32,3,412,23,47,145,137,63,29,665,123,95,269,46,378,62,61,614,483,86,361,814,10,5,605,136,396,216,177,112,50,249,619,730,77,129,119,503,13,432,202,179,12,719,285,318,24,597,102,151,183,76,21,130,742,37,209 }, -{ 15,2,1,5,7,3,0,6,141,180,10,4,13,33,11,352,77,197,9,217,14,134,64,12,341,317,365,165,752,40,498,372,269,102,23,17,115,117,291,8,349,22,51,153,196,59,32,237,16,901,36,120,21,260,202,342,961,128,569,143,82,57,864,37,45,318,873,110,93,111,457,18,72,391,386,76,28,86,351,125,137,509,95,31,56,954,326,450,79,48,27,854,139,29,482,19,38,44,546,89,373,99,49,244,90,55,84,719,523,94,403,35,177,54,579,453,277,24,164,922,41,253,30,203,730,61,20,58 }, -{ 254,530,960,613,39,829,688,221,406,190,166,475,827,438,30,9,669,269,180,23,98,51,31,228,21,541,202,274,141,840,318,131,938,105,48,158,127,125,96,44,846,137,453,49,393,219,352,116,13,1,679,421,856,625,286,317,36,308,100,333,310,403,115,890,144,217,791,101,931,616,569,10,386,551,401,0,876,272,910,55,258,88,102,77,327,656,224,629,252,64,468,731,160,385,860,518,926,28,697,344,326,159,33,5,197,93,944,627,128,165,816,293,574,455,187,765,371,364,843,404,242,120,22,284,95,32,345,506 }, -{ 39,9,166,28,158,35,101,30,175,364,68,168,190,0,67,346,194,100,49,88,131,36,333,420,274,310,570,344,404,252,83,289,706,109,55,69,208,1,86,160,137,610,96,65,967,251,438,352,637,336,114,16,577,159,128,254,756,154,345,219,22,64,230,799,228,810,95,24,51,747,224,185,141,818,149,584,768,202,103,419,429,21,826,752,124,530,857,31,656,10,13,169,323,505,237,143,865,562,189,165,793,238,694,535,23,217,874,455,164,116,105,7,197,127,44,547,125,286,180,213,868,539,71,2,703,272,498,115 }, -{ 62,555,548,56,3,507,161,440,34,215,527,136,514,162,361,4,211,17,130,328,383,757,14,84,183,123,205,152,494,11,184,57,585,38,236,202,377,59,54,504,452,129,402,128,176,556,229,880,80,372,300,381,495,40,33,378,37,469,106,266,472,119,12,214,497,248,102,803,403,342,249,73,53,77,245,412,313,51,196,27,153,543,257,485,210,471,76,283,488,99,305,200,421,13,139,157,23,349,432,79,45,90,339,32,117,240,46,179,714,457,292,108,134,250,719,318,41,217,64,21,22,369,710,188,72,133,277,453 }, -{ 126,107,92,356,493,279,359,7,246,97,298,362,392,441,508,60,199,35,423,16,146,132,121,14,43,230,501,232,939,20,649,150,173,5,779,660,414,607,672,314,590,259,534,21,66,140,729,683,387,191,18,71,941,955,953,32,104,49,48,22,38,0,46,319,640,95,819,172,147,167,24,357,28,10,2,13,858,603,324,195,68,598,12,1,345,595,426,61,64,653,522,407,612,470,4,885,77,23,52,236,125,37,33,702,31,687,581,6,118,74,98,711,399,212,40,75,70,376,465,517,360,135,271,105,102,50,192,156 }, -{ 291,141,349,373,372,82,15,260,351,120,922,854,326,217,318,77,450,1,352,898,93,269,523,102,202,21,203,144,13,64,23,304,5,752,137,437,32,51,473,98,704,247,180,177,317,237,197,342,59,457,947,817,494,316,76,33,719,615,300,961,12,36,968,954,475,386,367,268,165,115,86,83,69,67,48,39,22,2,851,341,275,210,201,110,662,576,418,403,391,365,284,241,194,116,105,96,88,54,44,31,7,730,485,205,125,40,117,875,873,864,661,579,498,490,482,468,393,332,308,244,221,190,185,169,160,128,109,100 }, -{ 141,217,352,115,269,180,317,752,341,244,13,291,21,77,23,197,365,5,372,165,51,64,237,349,48,9,4,304,482,102,32,864,28,318,247,137,11,202,308,33,39,98,7,3,1,498,351,125,2,468,437,110,10,82,490,253,120,100,88,954,515,177,93,901,31,12,401,201,0,49,922,72,203,569,55,30,6,342,260,143,22,117,898,717,44,89,35,153,144,854,128,36,386,350,101,68,196,40,373,221,134,96,206,873,391,316,288,241,164,160,105,16,90,579,403,326,645,629,523,421,284,116,65,61,961,59,24,18 }, -{ 78,47,390,108,130,711,813,19,453,412,27,283,730,444,690,196,250,123,236,128,389,503,200,650,183,14,59,4,26,65,472,133,73,34,381,297,153,51,177,57,269,11,53,318,33,216,719,17,194,630,680,322,619,114,113,368,714,46,684,803,432,56,77,29,657,6,480,141,117,3,445,22,603,122,42,235,84,361,90,899,13,64,23,102,249,2,754,524,605,457,99,63,0,475,349,789,40,38,588,210,18,152,106,134,678,436,24,10,25,597,50,529,291,594,401,52,245,95,402,894,129,266,86,471,339,119,523,137 }, -{ 250,297,34,80,472,495,311,64,53,17,667,61,148,27,56,483,469,136,90,73,141,161,45,243,194,3,106,597,527,176,128,751,352,151,436,62,86,874,738,4,209,153,833,491,881,614,396,32,383,84,26,76,445,231,95,5,659,14,887,237,29,378,573,431,947,196,405,58,23,255,119,117,65,11,113,59,33,719,134,814,292,287,57,177,721,240,12,585,611,247,269,51,22,283,200,498,2,583,304,180,19,145,312,165,678,205,202,10,835,349,72,217,114,514,40,555,315,588,137,130,37,875,389,197,207,179,0,13 }, -{ 51,23,551,421,453,13,33,102,77,21,326,153,401,958,308,120,615,196,5,48,202,221,115,692,523,791,403,899,342,4,801,475,210,805,260,107,450,291,966,93,730,576,32,117,842,541,468,18,1,16,203,116,110,697,60,96,126,121,386,68,31,40,2,494,259,125,463,407,137,154,24,704,427,373,218,180,92,10,575,244,35,104,64,175,302,628,351,318,197,160,98,71,817,770,743,670,612,12,859,158,17,590,199,650,7,945,815,752,346,949,851,717,642,597,473,439,402,367,253,252,217,146,56,44,6,3,36,847 }, -{ 98,223,393,363,411,834,478,664,1,691,791,284,156,447,724,914,759,697,293,354,541,807,51,586,421,48,948,668,765,848,264,195,9,163,658,23,801,18,125,551,21,386,96,340,772,909,682,963,730,698,31,453,360,13,371,949,905,770,520,5,621,781,221,744,271,296,116,202,647,857,132,70,118,335,821,44,656,842,367,897,719,121,167,446,32,69,457,450,318,101,100,670,379,638,127,634,144,137,410,761,662,217,846,758,146,401,932,615,75,777,883,538,87,165,33,225,936,591,286,93,166,269,197,812,326,141,105,919 }, -{ 232,7,107,92,14,46,135,172,359,220,314,278,60,5,171,192,2,526,16,620,21,262,52,75,35,32,126,294,29,872,24,132,18,77,246,87,448,571,230,48,1,54,12,58,38,236,50,606,247,86,23,70,177,112,461,298,121,380,97,71,37,888,217,392,66,279,150,356,155,64,13,20,441,108,678,304,751,572,147,226,115,334,140,61,291,785,153,739,579,43,451,178,146,186,947,437,387,394,90,51,330,195,194,875,307,216,352,597,587,357,117,0,269,181,45,603,349,210,199,137,415,128,267,95,366,315,156,31 }, -{ 32,76,2,241,21,14,292,1,476,72,48,5,45,720,50,179,270,214,46,89,90,29,148,129,464,155,17,290,519,38,227,460,205,123,245,350,243,358,52,184,54,257,171,710,249,408,7,400,186,221,405,513,3,36,162,618,12,106,37,288,181,57,502,413,0,263,10,428,316,99,281,207,6,229,4,58,152,64,115,425,430,769,67,741,119,59,22,128,659,308,773,183,23,202,96,86,431,83,75,62,141,9,524,51,16,103,328,645,69,237,497,255,209,217,130,11,24,496,666,28,137,403,528,18,247,536,452,77 }, -{ 15,77,33,102,13,23,51,117,4,32,11,202,40,90,0,1,5,141,153,247,177,128,134,214,288,21,137,269,17,453,3,318,291,403,8,110,82,180,10,59,165,494,22,6,342,197,457,351,64,475,260,9,93,2,120,523,326,48,31,217,115,57,421,386,12,373,44,196,16,19,719,730,25,139,96,352,341,36,961,49,210,317,349,203,125,194,401,18,275,7,24,28,98,817,285,898,365,95,308,901,450,30,99,661,372,86,223,65,854,615,922,402,56,899,697,758,208,103,14,237,116,105,569,37,304,221,704,638 }, -{ 66,74,135,69,6,380,278,267,97,14,2,29,1,75,24,87,324,52,150,38,335,138,357,189,204,172,67,103,25,388,85,7,462,220,83,423,108,550,149,71,603,42,733,571,696,174,26,582,140,36,458,565,16,808,895,802,486,46,238,35,19,70,298,21,18,114,65,226,22,86,60,418,32,251,192,92,64,451,280,273,500,309,95,594,222,501,12,50,5,145,563,398,353,0,889,28,443,48,607,711,641,517,112,262,336,348,37,125,580,596,906,705,622,572,10,160,81,43,63,54,58,133,792,68,620,124,165,294 }, -{ 152,471,4,339,59,188,79,77,11,377,128,94,529,102,33,202,402,111,12,99,51,216,542,452,291,40,474,342,210,196,13,141,184,64,403,37,453,153,134,318,17,177,117,494,23,961,139,5,32,76,431,3,300,257,205,757,497,115,401,275,269,10,229,179,72,475,21,2,86,90,14,57,89,349,1,0,180,157,285,277,148,629,137,266,197,38,36,304,45,217,485,6,498,678,129,405,700,95,569,245,437,734,247,460,22,413,313,352,19,372,775,308,421,292,880,48,237,143,769,503,358,873,488,54,7,618,710,386 }, -{ 15,1,196,0,33,13,2,77,5,10,9,102,217,23,7,6,3,12,117,14,4,134,177,153,40,11,457,291,210,275,22,730,16,115,18,165,21,386,341,719,120,82,180,64,197,51,141,523,317,8,569,365,450,202,32,961,372,260,28,349,342,125,352,95,37,31,899,351,17,128,318,269,48,110,49,403,19,93,901,59,475,401,72,326,24,139,36,65,111,61,237,758,494,90,99,30,854,304,817,44,482,137,391,56,509,898,437,25,308,752,98,38,629,247,76,922,421,86,57,373,670,26,253,70,203,221,801,579 }, -{ 209,106,17,207,45,255,119,655,5,742,306,378,61,62,136,425,263,80,311,84,240,29,790,2,58,56,186,32,3,383,738,243,454,592,869,76,151,14,179,129,290,123,48,72,440,148,21,52,292,64,90,504,287,667,214,46,1,128,54,408,507,50,476,34,27,833,549,57,38,548,155,227,162,86,241,19,70,152,89,205,6,334,171,26,496,483,112,183,181,141,130,400,249,59,245,266,184,555,663,75,270,358,77,229,361,37,215,95,445,4,297,10,211,25,33,666,519,881,11,257,202,73,710,269,237,40,221,180 }, -{ 120,450,260,817,523,15,23,1,51,326,98,13,202,82,125,64,5,351,318,21,31,269,457,32,116,93,115,165,102,77,33,12,95,922,719,30,494,110,44,615,128,48,14,180,141,36,2,730,61,9,137,342,403,899,197,86,49,10,704,551,386,237,8,203,96,83,67,37,7,177,291,352,90,22,18,16,402,196,153,373,179,144,76,39,17,6,961,854,475,898,692,401,241,207,148,105,100,65,50,20,453,349,344,3,217,901,678,341,293,263,247,210,99,88,69,45,40,11,958,801,317,132,126,107,35,24,752,661 }, -{ 116,268,492,918,93,206,203,940,23,51,551,417,523,499,473,959,22,421,8,125,791,692,730,120,31,401,949,10,0,13,899,165,44,386,450,260,867,453,64,9,629,115,36,719,559,341,728,170,55,137,599,299,197,615,569,180,457,28,391,141,1,326,685,301,564,479,475,338,506,86,509,105,638,202,95,817,308,242,253,762,244,2,373,801,670,127,901,21,49,870,951,5,558,237,143,269,37,752,239,12,642,922,403,873,7,352,4,758,365,318,128,18,965,456,32,320,221,14,805,512,317,498,961,16,704,98,33,898 }, -{ 15,13,165,23,197,4,0,1,180,12,11,117,5,8,82,901,719,341,2,120,51,9,523,260,509,7,3,730,141,386,10,450,351,6,33,752,758,134,115,498,352,961,317,365,153,898,14,899,854,64,217,922,873,22,569,326,93,128,817,31,269,237,291,202,21,110,391,37,801,615,28,318,17,457,44,16,77,18,32,98,99,36,49,30,349,401,453,403,102,38,373,958,35,629,116,40,137,125,55,19,482,203,304,242,86,546,474,96,24,144,65,308,475,139,143,247,210,402,89,54,69,177,196,48,485,661,83,734 }, -{ 14,24,69,66,7,108,2,398,267,150,67,97,189,29,149,74,38,71,36,6,83,52,273,388,140,1,135,18,46,172,602,65,28,124,429,302,154,380,336,451,547,16,278,114,732,68,484,324,75,733,92,175,103,118,22,462,0,25,251,357,86,596,55,160,87,705,594,35,60,531,133,467,423,711,236,95,650,109,458,443,298,21,886,5,50,138,26,12,505,238,168,309,314,42,32,10,646,220,49,70,335,192,232,906,420,204,48,20,64,37,43,603,13,19,533,96,85,23,565,51,330,226,550,221,570,208,283,54 }, -{ 330,335,96,839,523,662,367,443,615,418,141,403,717,244,692,576,922,372,1,352,269,217,752,349,64,498,36,854,966,180,822,831,954,873,864,317,284,291,776,201,318,144,69,98,351,678,7,21,5,160,77,203,83,82,442,137,551,2,260,223,622,187,494,44,13,385,128,202,23,475,75,341,901,48,31,437,238,304,247,230,765,93,373,120,393,22,67,251,371,293,125,661,342,859,285,898,163,365,30,32,450,29,110,459,326,934,51,10,197,842,851,399,246,189,800,421,237,0,37,116,221,165,16,579,127,9,321,88 }, -{ 184,257,205,90,245,229,769,524,152,432,497,619,17,57,5,452,32,45,381,266,106,2,59,21,179,4,292,217,313,460,288,1,214,129,14,76,77,3,128,216,48,207,471,339,157,141,710,11,202,38,64,519,369,6,61,209,12,37,119,79,99,123,29,317,72,188,7,62,255,33,58,162,269,247,40,54,102,115,177,51,618,372,476,318,10,89,137,86,249,148,241,263,180,316,352,402,50,403,655,155,19,210,23,94,136,291,308,349,358,237,453,377,111,56,139,425,365,27,341,46,143,277,401,153,588,221,0,186 }, -{ 7,14,16,46,107,32,35,24,70,60,23,307,172,5,18,2,38,87,92,58,13,21,20,10,177,51,202,77,135,48,37,128,0,97,232,115,171,112,126,43,9,220,140,318,12,141,102,71,852,155,4,54,291,22,90,1,269,52,163,33,137,298,192,28,66,64,217,356,61,132,294,278,359,147,349,461,95,29,45,609,448,121,259,186,314,76,474,304,362,17,108,6,150,415,59,400,780,146,36,342,31,275,67,86,246,402,334,279,678,75,247,50,620,30,409,502,39,372,72,49,230,40,494,227,69,465,872,68 }, -{ 140,66,97,172,92,7,267,189,14,314,16,69,298,380,60,135,451,230,150,35,24,71,74,357,423,232,330,38,324,246,192,443,278,563,2,572,877,550,462,126,448,52,893,508,67,501,6,568,29,21,603,46,565,607,83,388,204,633,22,279,18,149,723,733,399,65,48,1,95,64,526,915,5,32,726,28,75,36,841,25,350,87,138,108,68,500,895,10,43,0,251,808,125,104,12,426,49,81,50,20,37,309,517,674,86,802,174,107,103,653,173,582,220,226,85,387,26,55,712,903,241,197,121,237,262,54,711,191 }, -{ 121,167,354,212,132,407,191,107,147,146,271,199,101,446,126,647,195,35,259,18,16,60,55,20,590,465,43,411,68,363,178,198,142,562,9,427,463,92,640,14,346,7,727,798,941,520,364,325,815,5,581,13,1,621,21,23,522,534,0,589,279,158,28,806,706,125,439,109,98,97,118,48,22,694,955,393,604,362,150,932,608,51,105,33,252,165,234,265,108,49,598,156,96,419,818,10,467,197,154,493,12,765,376,120,70,786,169,777,967,102,687,38,202,32,682,246,64,39,31,447,781,612,58,159,61,260,40,450 }, -{ 76,90,460,205,179,257,245,32,288,184,21,45,769,358,316,524,229,241,152,5,57,48,497,2,476,148,720,619,452,266,72,155,1,17,38,432,14,54,243,290,292,227,449,381,12,4,89,247,50,29,313,645,270,59,350,11,129,216,51,217,106,157,221,128,99,58,37,471,64,188,77,214,408,339,141,115,186,3,369,23,52,202,79,46,428,425,308,6,317,464,7,255,405,162,413,33,171,519,496,372,365,341,269,401,10,0,94,36,137,875,318,263,237,62,588,352,123,474,181,431,40,177,291,180,102,61,207,618 }, -{ 147,259,427,178,798,581,878,786,198,534,465,325,929,142,362,20,376,43,107,771,35,481,132,470,234,5,626,146,590,279,97,522,49,70,77,345,21,199,640,450,612,202,13,48,14,102,150,0,33,725,595,846,941,23,22,7,58,195,423,660,501,121,687,126,518,260,117,904,120,858,953,39,342,60,455,1,196,165,125,158,105,159,246,92,28,153,10,31,360,315,346,271,761,683,603,212,18,298,128,711,167,379,318,113,623,817,95,32,291,61,16,134,72,359,108,221,197,115,98,163,767,523,493,191,329,30,87,50 }, -{ 473,778,450,203,855,144,93,617,30,704,141,466,530,330,372,459,201,326,934,321,88,839,254,36,505,403,128,559,83,120,523,217,86,213,131,613,717,110,332,728,344,251,264,352,686,434,82,39,578,317,206,35,625,435,44,795,840,961,539,274,244,116,137,55,662,265,228,863,577,406,96,924,601,564,417,384,351,341,225,95,49,28,800,418,21,831,719,531,367,219,202,31,64,822,224,335,960,968,922,854,829,688,365,197,22,160,410,165,873,752,716,518,456,347,242,125,731,269,180,948,498,478,349,237,98,77,33,9 }, -{ 523,475,899,730,453,51,23,403,719,13,421,457,33,386,196,817,801,4,120,117,153,11,450,260,102,202,515,361,670,165,758,494,125,108,128,961,283,236,99,21,3,880,5,401,32,59,77,543,615,10,6,318,402,221,183,137,650,57,40,7,2,1,90,847,412,247,241,210,207,115,12,208,181,150,133,114,63,42,467,775,389,342,111,56,39,31,30,28,22,9,0,576,558,304,229,216,177,152,123,113,47,29,25,958,554,391,629,968,967,966,965,964,963,962,960,959,957,956,955,954,953,952,951,950,949,948,947,946 }, -{ 1,5,15,2,13,0,7,23,10,3,317,341,6,9,4,365,11,115,33,180,217,77,17,64,197,165,102,117,141,40,14,21,51,32,134,12,8,291,901,752,16,569,22,509,352,237,482,372,143,18,498,153,457,59,128,349,269,125,202,177,961,546,31,391,342,196,45,36,873,57,38,28,37,86,48,386,24,19,139,318,111,95,29,44,403,27,719,304,120,41,110,629,93,72,164,275,61,55,253,99,56,90,49,137,730,210,864,758,35,260,76,50,579,116,94,300,221,26,25,277,326,98,54,475,453,30,79,244 }, -{ 19,119,40,4,27,84,77,56,202,73,102,59,757,33,485,26,300,210,504,494,128,80,862,23,402,63,42,139,880,342,129,32,5,361,25,13,196,51,12,11,2,99,21,6,153,469,123,10,710,53,65,618,64,161,117,736,90,38,22,106,17,803,95,76,0,45,37,14,548,813,250,245,108,297,453,378,162,57,113,460,403,611,255,205,256,383,217,1,235,114,86,742,209,152,292,630,576,240,343,790,667,475,16,48,133,122,18,136,134,85,115,15,283,34,179,436,180,78,29,9,200,605,561,318,49,269,684,495 }, -{ 32,20,13,21,2,38,5,43,29,23,61,12,52,115,90,6,202,37,64,48,95,207,51,81,66,7,25,49,17,74,26,76,178,147,98,46,362,54,22,63,19,14,0,259,128,577,125,97,58,91,77,56,182,65,197,465,376,27,141,427,316,1,241,291,113,878,217,247,312,137,120,4,858,481,142,595,165,31,237,93,230,379,534,482,180,116,86,72,42,11,44,203,263,470,356,352,279,102,84,40,33,687,626,835,786,107,683,260,18,318,24,414,298,468,367,326,304,216,117,105,99,3,933,612,415,347,501,344 }, -{ 339,188,11,377,79,4,99,94,12,542,102,111,474,37,51,33,471,453,152,40,475,342,77,403,59,196,277,139,153,57,134,117,13,775,229,128,401,38,880,23,210,64,184,202,431,115,961,157,300,3,266,72,485,402,89,629,21,54,15,129,177,76,14,162,32,17,216,10,148,275,269,5,757,452,361,477,141,90,205,313,569,494,2,65,179,120,257,381,421,237,197,405,86,488,328,36,318,48,22,137,165,413,50,308,0,1,341,130,82,95,49,457,161,543,245,18,304,260,62,45,285,180,291,41,529,498,125,56 }, -{ 128,283,503,34,318,529,432,176,495,275,231,412,527,291,402,161,381,202,59,3,389,469,177,803,53,585,216,14,269,57,200,17,73,472,27,56,250,136,678,4,152,51,862,361,80,245,11,789,619,194,123,719,401,23,714,84,507,210,77,12,65,322,106,99,436,130,129,46,62,2,13,38,162,369,236,108,33,183,133,457,153,64,483,211,297,741,514,403,114,18,629,961,378,555,440,119,383,597,475,29,453,229,40,165,240,215,196,655,611,556,21,249,117,54,667,134,102,308,814,19,50,86,391,22,0,197,95,26 }, -{ 15,217,13,341,317,141,365,115,23,51,180,349,291,1,120,77,260,269,202,137,21,5,450,352,373,110,0,372,64,33,36,128,177,4,318,351,102,9,197,2,304,854,10,901,7,12,32,165,326,752,40,244,922,160,96,22,523,117,11,48,16,86,661,90,457,82,386,494,403,308,59,28,55,253,247,18,498,134,8,143,153,221,14,6,83,30,196,93,3,37,615,453,401,898,421,817,24,95,961,285,475,719,873,17,35,39,391,730,125,67,237,49,98,811,704,642,717,216,203,69,482,99,342,402,851,50,57,569 }, -{ 13,961,15,4,11,12,457,51,3,37,2,197,5,10,569,99,115,23,6,72,89,14,0,1,134,7,59,33,40,38,165,111,196,76,405,79,139,117,148,498,873,339,719,300,277,485,17,471,157,152,128,21,94,431,32,177,188,509,474,64,45,54,482,730,153,36,629,386,41,22,28,141,901,864,18,180,77,523,9,401,678,437,102,304,210,308,16,775,579,48,31,317,179,413,365,758,352,57,24,341,86,752,546,137,58,318,245,44,27,402,95,899,19,108,269,216,202,49,184,110,93,954,880,56,55,452,358,8 }, -{ 15,13,1,2,0,5,10,23,33,9,7,3,4,6,12,102,115,14,11,217,51,117,77,40,569,153,341,196,317,18,457,22,8,16,961,197,719,180,64,365,165,730,120,134,21,141,899,202,82,31,523,291,125,372,386,28,17,139,93,349,128,304,269,177,110,482,32,342,111,37,318,95,453,579,36,901,59,24,352,450,44,437,137,403,49,260,401,210,237,247,326,817,494,98,99,57,752,19,48,203,30,86,351,485,758,116,402,391,26,898,308,38,27,25,275,801,498,854,65,56,629,76,90,300,922,468,144,35 }, -{ 76,292,5,214,45,32,2,519,710,460,129,179,29,1,90,58,123,249,464,207,205,618,17,14,245,257,72,61,48,263,106,21,358,425,769,241,119,52,184,6,162,186,50,46,38,7,655,148,209,243,128,255,3,155,288,183,290,64,141,454,227,89,77,476,54,115,4,25,59,19,57,229,36,202,269,408,152,99,70,151,130,86,177,75,592,216,720,62,318,12,217,40,26,10,37,27,496,306,33,247,524,311,316,56,497,350,84,51,137,171,790,102,270,23,0,112,11,22,16,452,334,237,432,402,96,180,95,449 }, -{ 76,32,72,21,38,4,54,89,57,17,179,12,14,99,148,45,23,59,51,90,488,3,11,241,401,2,428,37,543,152,205,528,453,128,5,421,13,115,129,77,10,474,245,184,350,670,449,413,1,569,137,79,403,629,475,328,308,221,155,464,0,361,123,743,202,460,214,257,33,40,64,794,292,165,405,770,805,41,476,62,162,270,229,358,86,285,36,402,775,316,341,94,197,50,576,106,431,720,46,29,540,217,139,773,119,838,48,15,216,181,657,177,290,514,288,7,457,227,961,9,22,102,247,828,6,141,365,180 }, -{ 98,223,393,1,834,284,791,264,697,724,293,909,772,905,541,478,51,821,807,363,897,48,682,421,765,447,411,730,801,410,163,948,386,96,9,31,963,23,21,691,664,453,125,5,382,100,13,521,949,551,656,44,116,770,686,670,639,221,39,367,914,265,166,144,719,335,812,848,371,0,101,842,318,321,127,88,252,520,662,329,354,32,759,438,33,698,93,202,593,201,286,156,450,658,281,115,165,49,401,120,604,586,82,2,22,36,225,217,77,744,10,498,141,102,615,180,118,435,69,30,921,404,326,197,433,475,83,70 }, -{ 341,13,23,509,762,638,569,242,901,629,165,8,197,873,10,961,506,456,391,499,116,338,180,457,492,206,12,51,115,268,143,365,951,1,93,965,642,867,417,37,2,253,546,64,5,203,3,498,758,752,719,0,401,15,352,44,31,7,36,244,86,4,141,386,734,237,6,22,308,730,55,844,164,918,473,326,125,82,564,949,898,551,940,791,120,38,9,260,523,137,661,373,559,110,14,854,959,615,317,11,54,33,102,692,269,99,351,903,89,870,740,217,708,170,824,40,801,728,864,817,717,160,128,28,117,776,479,77 }, -{ 818,230,755,443,352,420,1,2,244,50,14,5,38,46,29,36,114,218,65,96,22,133,52,181,58,0,17,28,21,103,75,54,45,86,67,175,48,171,7,12,323,137,24,285,208,51,487,6,283,18,10,70,23,155,32,83,194,361,3,503,163,389,328,128,223,37,803,532,16,19,168,735,69,13,124,61,202,160,186,433,9,115,484,27,236,514,238,782,95,25,754,108,64,657,112,141,281,220,412,289,55,756,401,394,584,151,308,49,545,851,822,4,227,717,866,334,269,646,403,402,26,400,87,35,745,366,99,143 }, -{ 481,878,32,202,5,21,23,269,13,318,494,142,77,51,70,1,182,557,141,137,33,291,58,178,415,465,61,48,590,259,922,115,2,929,640,403,207,884,4,260,120,87,817,626,534,349,342,102,195,0,132,351,59,427,252,109,35,7,961,678,345,247,153,72,845,158,169,49,12,10,6,196,112,798,450,687,279,841,713,475,457,128,40,146,28,3,416,290,265,75,767,854,771,947,795,753,704,637,631,597,592,581,546,509,493,354,352,341,326,316,288,285,241,237,212,197,159,90,54,52,46,38,37,36,17,14,39,9 }, -{ 15,1,5,4,2,13,11,341,0,3,7,12,10,6,21,365,9,180,32,134,317,197,33,23,37,117,40,165,17,77,217,498,8,752,153,901,64,102,569,141,873,51,14,961,196,115,59,110,352,509,22,128,57,111,120,143,125,72,38,48,372,36,291,308,349,99,139,31,90,202,260,269,457,44,16,89,76,49,55,401,342,237,27,93,177,94,82,18,45,29,326,28,19,386,221,351,137,86,277,546,391,41,50,35,403,453,54,164,318,719,474,629,373,203,98,95,475,854,253,304,148,24,450,244,56,758,542,300 }, -{ 25,26,119,42,19,6,27,45,122,84,469,4,17,790,814,113,80,76,59,73,483,2,29,611,128,32,202,40,1,77,90,862,106,56,209,33,240,0,684,136,102,14,292,416,5,311,11,504,196,318,123,680,378,255,12,129,161,22,690,151,53,117,63,179,667,10,85,72,61,115,65,210,402,396,57,141,64,614,134,757,153,137,62,18,99,445,51,269,66,177,7,3,24,710,256,648,36,655,235,38,23,306,58,618,70,491,48,454,21,403,742,361,49,34,86,494,275,383,342,28,300,145,13,74,112,52,297,245 }, -{ 14,7,24,2,1,16,69,6,38,67,108,22,65,28,124,0,46,18,29,86,66,35,83,5,71,398,36,12,168,289,140,95,610,189,150,149,10,21,92,756,52,302,23,109,97,20,584,25,50,267,194,64,49,51,32,60,103,55,505,13,429,172,128,273,420,158,37,458,19,547,118,48,75,115,137,74,135,9,185,164,143,388,154,202,26,701,650,251,133,336,17,114,169,68,230,236,43,54,141,244,671,253,703,105,208,90,3,160,159,278,99,462,314,403,380,87,389,175,357,324,484,318,232,708,125,799,451,886 }, -{ 128,51,202,23,141,120,403,15,64,13,318,82,10,269,99,33,12,197,475,453,260,153,137,165,196,0,3,402,351,5,494,1,22,14,110,117,180,102,93,17,2,31,37,38,125,9,326,450,49,21,86,44,401,457,7,6,36,352,115,18,77,523,237,28,134,95,285,386,421,719,32,48,342,98,11,54,203,730,57,341,961,373,139,8,854,361,757,111,898,45,4,40,308,194,65,16,922,277,41,880,678,116,291,24,498,19,27,391,143,56,217,899,59,569,30,79,365,775,50,503,208,55,144,817,61,105,901,94 }, -{ 16,24,35,18,71,68,9,0,65,189,1,7,133,50,69,149,60,28,103,101,108,537,67,118,230,75,114,23,335,55,167,21,124,92,12,191,181,433,13,39,140,5,14,48,223,64,212,96,51,218,443,281,487,154,141,163,22,217,99,37,70,565,2,115,49,267,58,54,394,766,46,246,545,83,30,128,10,330,820,202,32,361,137,622,125,238,237,100,121,77,165,412,175,87,143,352,399,171,317,86,126,745,146,486,418,177,36,291,269,318,283,336,105,302,398,695,4,98,197,180,31,345,251,271,109,309,430,38 }, -{ 50,2,1,46,14,29,38,52,171,67,5,58,103,96,36,24,218,133,223,83,114,236,45,70,54,181,163,186,108,155,75,28,65,238,334,151,18,433,160,745,328,0,366,112,532,48,516,17,514,61,832,400,281,21,227,22,760,19,6,69,754,766,412,12,7,309,545,409,27,361,283,137,16,220,675,480,55,86,765,822,502,552,32,10,307,99,956,285,25,113,9,398,323,37,51,800,26,388,394,64,891,128,124,243,549,828,3,458,194,208,35,646,95,262,23,311,150,966,820,866,894,149,13,115,87,430,80,287 }, -{ 21,32,5,76,72,14,17,2,3,38,54,89,45,51,1,12,23,4,10,48,90,137,36,148,221,401,22,0,421,179,115,86,99,543,11,453,13,37,128,270,46,241,285,29,290,64,428,57,6,361,202,59,540,50,403,328,114,475,528,65,155,449,77,308,794,569,181,7,805,27,40,141,292,133,33,576,263,129,514,205,341,9,413,350,208,19,838,629,323,28,430,480,119,657,474,214,741,123,245,402,102,720,15,770,476,408,494,56,425,106,269,62,207,775,243,152,477,670,180,318,197,405,165,95,58,281,18,697 }, -{ 434,384,268,144,940,855,617,206,959,911,332,116,93,203,137,489,282,244,141,120,36,44,160,269,253,367,110,450,10,127,202,276,417,219,98,258,326,131,260,31,64,373,201,9,187,318,692,473,22,224,523,817,143,86,352,1,55,30,23,51,28,295,567,105,559,499,261,717,811,0,125,951,180,8,115,13,217,128,551,39,165,49,96,341,284,77,21,851,728,564,662,498,317,386,752,48,351,531,5,642,365,197,83,661,237,615,800,291,242,15,170,164,494,82,95,638,704,349,37,854,228,7,32,24,935,968,35,16 }, -{ 2,5,1,15,7,13,0,10,6,3,180,217,23,9,141,11,317,4,341,17,352,117,197,14,77,33,64,165,134,365,115,12,102,752,237,40,498,153,291,32,372,51,22,21,8,349,901,269,16,196,457,45,569,128,36,143,59,57,509,125,27,38,19,342,86,202,864,873,120,31,546,318,110,37,28,961,29,164,177,95,48,244,111,137,93,391,18,719,139,44,49,82,386,629,54,24,482,56,99,26,453,260,50,579,76,25,304,35,98,253,326,41,55,277,210,72,275,30,730,437,90,523,403,203,351,61,79,450 }, -{ 113,25,2,29,6,833,45,61,145,7,32,74,151,0,42,1,210,128,177,5,19,4,72,14,64,106,655,59,22,122,26,112,174,66,40,77,738,209,525,402,138,90,148,20,483,104,684,141,51,76,17,27,425,18,21,416,23,10,202,95,16,255,52,13,115,624,318,137,102,311,33,269,85,81,49,887,87,746,544,491,275,86,119,790,454,690,65,24,9,222,216,665,291,117,80,204,58,243,134,48,476,814,217,46,349,287,70,28,285,43,348,36,84,342,11,757,194,91,207,315,31,38,73,153,192,355,135,300 }, -{ 116,268,918,551,203,692,31,940,403,791,421,206,417,93,499,523,299,44,8,473,23,51,805,22,13,450,120,475,202,0,959,730,386,125,599,326,137,9,10,401,899,105,1,576,817,559,453,564,165,393,494,21,28,36,456,5,127,949,64,670,728,638,391,242,685,2,260,762,457,197,180,615,569,141,170,253,308,963,49,115,341,492,55,143,719,479,873,37,18,4,86,7,77,506,48,244,801,867,95,318,269,901,512,98,951,33,6,301,958,642,338,30,352,870,39,221,365,12,16,395,373,24,237,629,164,102,159,239 }, -{ 107,612,126,132,362,146,259,199,279,660,493,590,121,20,939,683,534,43,147,941,376,35,595,953,649,581,60,470,640,955,356,522,5,97,195,150,407,49,465,16,92,14,7,687,359,298,22,858,246,0,13,360,21,48,18,427,271,167,423,191,10,441,325,392,32,598,929,28,33,31,178,414,1,77,232,173,55,230,156,125,24,68,23,95,345,4,904,626,105,212,319,98,786,783,70,61,202,142,44,702,58,71,40,314,37,198,51,64,2,623,163,159,819,93,446,158,59,346,357,12,501,118,260,46,663,116,120,102 }, -{ 15,13,1,2,0,23,5,4,3,77,102,33,10,51,6,7,9,115,341,12,11,217,342,317,14,117,40,22,365,180,120,8,569,18,196,165,457,141,21,210,197,64,177,31,291,153,16,961,59,523,817,453,719,450,134,730,93,260,352,44,269,275,49,386,401,32,901,110,82,28,17,629,125,349,139,475,899,24,128,37,326,111,752,95,202,36,318,403,372,498,216,90,308,247,30,98,482,137,86,237,116,615,300,48,65,203,19,57,351,55,391,509,99,38,734,922,468,244,144,221,854,304,579,373,39,143,758,148 }, -{ 53,27,161,17,469,73,378,527,136,250,383,19,862,495,62,26,56,200,297,106,84,585,440,80,34,14,436,128,119,45,4,3,472,123,129,813,504,240,483,361,59,444,205,65,611,5,202,548,108,255,742,514,283,78,814,113,179,162,690,57,402,183,38,555,714,6,245,390,122,54,42,803,184,25,61,33,630,318,209,12,194,64,77,684,11,141,328,757,503,269,99,236,2,102,389,51,22,618,176,152,257,453,47,21,48,210,86,680,40,381,148,133,217,880,650,215,46,10,130,377,18,0,412,497,23,114,13,229 }, -{ 209,45,17,106,207,119,5,255,454,243,263,425,290,655,306,186,84,29,62,61,2,408,136,58,742,378,21,56,311,240,3,592,48,32,383,50,52,80,227,790,270,46,171,14,72,440,148,287,334,76,659,400,666,179,504,496,869,64,155,241,129,1,123,54,38,214,738,75,663,162,90,141,89,221,151,292,57,358,237,507,513,130,34,548,152,70,205,37,128,183,211,184,667,41,229,328,476,266,115,555,181,86,549,405,6,281,163,269,215,12,96,245,11,220,502,720,257,36,313,430,288,180,833,40,202,165,449,27 }, -{ 152,4,452,59,128,471,529,339,79,216,11,188,377,77,291,202,318,94,102,402,32,33,99,5,90,51,269,76,349,12,184,257,542,474,17,177,111,141,37,21,342,210,23,205,275,678,13,72,403,38,285,3,2,40,64,229,588,57,10,769,494,48,134,45,372,196,117,217,129,6,497,1,148,460,757,245,453,475,0,137,153,157,89,139,7,115,961,292,179,498,304,524,266,197,14,629,431,477,405,775,288,437,180,15,165,214,237,86,401,308,119,123,54,22,221,120,9,162,27,619,300,62,317,316,31,488,277,880 }, -{ 15,1,2,5,0,7,3,4,6,13,23,115,9,12,51,180,8,317,197,10,961,901,11,22,77,21,752,33,202,141,110,341,14,16,217,134,120,102,31,165,365,40,93,269,457,352,64,44,28,18,37,351,260,117,569,82,308,125,32,196,49,36,153,719,128,482,318,99,17,401,326,137,450,403,203,111,177,730,386,291,55,873,523,373,98,30,237,24,453,89,48,95,221,475,39,59,116,372,349,105,144,139,509,143,72,96,758,391,898,494,854,86,342,899,210,629,57,468,247,90,304,65,148,83,817,421,160,20 }, -{ 951,752,638,811,642,253,351,180,10,197,341,901,873,352,110,244,143,762,165,8,898,55,564,141,15,365,854,499,82,137,417,498,509,36,535,922,479,559,206,661,373,317,282,115,31,22,338,160,93,569,164,260,717,217,391,86,533,33,44,1,28,9,242,965,728,120,116,77,64,968,21,102,203,125,37,117,506,30,13,386,5,4,531,269,40,911,153,23,0,169,384,2,326,372,105,196,851,170,134,109,704,332,268,349,96,127,48,291,32,758,237,318,24,177,202,35,11,961,401,39,308,83,3,629,51,210,12,434 }, -{ 6,197,350,74,262,841,509,26,47,115,13,196,583,903,165,4,235,138,50,308,21,130,749,324,675,19,38,331,391,145,711,569,33,75,241,453,734,64,153,223,52,558,236,468,99,220,34,70,112,11,117,546,237,125,3,27,32,1,42,134,409,51,78,25,163,29,14,648,23,645,180,820,46,2,85,108,65,773,802,624,122,394,341,785,22,730,95,386,606,57,412,247,923,316,66,498,357,221,630,133,457,59,853,90,53,226,873,632,48,113,719,629,45,889,17,307,141,766,69,12,37,444,83,171,54,600,5,765 }, -{ 125,391,165,867,558,386,221,758,23,457,21,51,13,197,401,308,963,115,961,97,719,77,791,743,451,603,949,48,180,670,770,341,89,120,730,352,291,148,450,426,607,304,7,403,393,66,64,350,316,217,134,135,14,421,74,247,177,50,380,24,696,236,172,87,629,10,141,475,144,35,901,801,523,453,138,509,467,456,241,210,150,98,18,565,357,267,103,582,545,342,301,278,237,216,20,16,99,69,903,650,551,412,389,283,81,32,298,739,543,498,370,365,317,309,300,260,170,140,116,85,52,37,33,30,25,5,273,203 }, -{ 14,1,46,2,24,16,38,50,5,69,58,35,7,75,18,67,54,48,0,155,513,171,163,61,103,45,29,52,430,270,37,223,21,70,12,28,9,780,32,267,60,290,83,227,71,36,666,767,22,189,140,807,10,72,96,65,108,181,64,186,220,309,17,335,92,394,23,592,243,89,536,663,115,281,51,6,474,55,68,112,141,400,128,133,87,13,425,99,741,236,95,675,278,230,76,221,114,86,263,113,820,552,502,27,269,202,49,760,537,149,262,328,408,90,366,137,150,207,77,357,315,307,218,241,19,148,25,66 }, -{ 23,51,13,115,453,12,0,2,4,10,403,1,202,5,401,475,15,21,457,59,77,165,9,3,37,99,32,11,197,719,308,6,14,64,7,569,17,629,961,318,180,22,33,494,120,18,730,141,40,102,269,217,177,57,16,128,523,450,341,8,90,421,386,237,28,48,125,19,117,31,247,402,72,210,899,221,260,291,134,89,342,317,365,509,38,24,391,216,352,468,817,153,54,36,45,49,27,196,56,326,82,65,76,304,349,139,50,25,86,275,44,137,482,372,670,498,26,734,546,62,95,758,29,41,46,93,351,79 }, -{ 129,84,17,27,56,495,80,378,19,548,123,162,161,53,469,618,73,26,504,106,40,257,205,59,3,183,184,862,4,136,62,6,128,202,14,77,11,65,769,5,527,108,45,57,383,361,2,497,250,249,200,130,23,34,22,90,402,483,245,240,12,51,214,38,0,139,25,99,64,318,102,152,32,210,300,10,297,757,21,494,880,775,114,710,111,33,54,29,460,403,452,36,42,133,18,61,86,141,436,177,814,269,13,194,119,179,49,28,342,453,217,95,115,514,229,556,76,137,37,1,742,283,485,401,503,488,475,24 }, -{ 28,109,49,9,22,67,168,158,39,185,159,420,1,55,0,83,35,95,194,272,86,105,69,103,36,114,169,327,50,254,208,175,65,584,286,323,535,346,251,345,797,30,131,756,374,12,333,533,128,2,218,68,96,133,344,160,101,23,64,289,7,597,189,24,646,577,874,896,13,5,601,51,46,503,531,837,16,238,747,627,115,14,347,10,98,310,789,137,124,21,202,127,164,578,54,799,141,154,230,532,547,31,312,708,285,480,37,810,637,596,48,143,336,100,389,835,252,439,237,38,518,912,219,424,44,239,253,868 }, -{ 242,391,456,116,23,13,492,8,51,341,401,165,93,206,499,457,867,338,268,569,417,509,386,22,1,762,479,638,10,629,918,758,64,551,203,730,901,719,12,31,197,791,115,5,86,14,125,949,0,559,37,2,642,951,873,959,237,961,692,55,170,752,870,120,44,180,940,9,141,564,523,3,308,36,7,4,15,899,450,365,728,137,21,473,253,898,558,143,128,453,740,164,801,260,903,6,685,202,403,670,965,54,114,28,854,326,817,844,352,95,82,498,11,923,244,98,299,922,239,110,38,317,105,599,373,661,160,99 }, -{ 211,162,248,130,556,57,507,4,305,266,183,41,152,361,11,229,129,471,62,38,377,313,300,514,77,339,184,157,381,59,128,452,99,3,328,40,202,123,54,210,440,494,369,555,342,136,117,542,402,757,64,548,139,23,196,188,880,457,775,33,153,56,14,102,432,13,177,205,257,497,17,12,37,291,51,89,403,215,961,111,141,90,349,216,488,269,485,803,477,180,165,115,10,475,437,383,79,197,95,21,84,134,503,421,86,453,318,308,1,670,76,194,719,618,106,32,629,15,730,65,22,5,245,94,214,45,482,288 }, -{ 92,7,97,298,140,16,126,232,314,60,246,279,35,173,230,71,107,14,43,508,423,150,779,653,441,607,66,189,359,501,24,362,20,172,104,387,356,21,48,38,18,399,199,330,5,674,192,877,81,191,729,517,74,672,426,939,560,633,0,267,2,649,69,121,149,392,324,135,462,22,95,29,46,52,125,598,37,723,707,49,10,357,68,345,6,32,830,98,64,1,702,380,118,28,900,12,695,251,861,885,493,783,603,146,65,715,61,55,278,36,236,273,138,33,75,25,31,124,175,221,293,83,165,763,712,451,414,319 }, -{ 15,1,2,5,0,7,13,6,23,9,3,12,180,4,51,115,8,901,457,117,14,165,22,341,82,120,141,10,37,197,961,31,21,11,202,351,64,260,77,365,110,16,134,28,217,93,269,33,44,36,569,18,719,308,450,317,128,102,125,137,32,629,153,98,401,55,352,30,318,373,49,116,898,730,48,17,752,523,196,237,386,24,95,86,326,403,291,99,453,40,39,72,38,177,89,203,873,391,144,247,349,498,899,59,734,90,475,372,54,494,421,143,482,304,854,105,758,35,210,65,76,244,160,216,221,83,45,546 }, -{ 403,18,0,102,25,523,64,6,91,85,42,74,342,32,24,13,51,306,95,49,22,33,475,151,681,880,421,128,899,750,397,214,122,757,730,77,28,519,288,247,23,5,817,805,317,879,861,673,273,177,145,21,120,52,283,81,275,701,577,453,104,59,202,193,697,636,401,287,249,216,207,196,180,165,138,125,123,118,90,84,60,48,43,587,260,389,16,10,4,1,351,326,318,933,804,635,498,280,237,197,186,172,153,148,137,134,117,99,61,29,9,671,289,958,838,814,579,312,238,124,65,56,847,719,654,650,457,424 }, -{ 56,65,554,33,561,18,84,123,63,64,343,194,0,90,49,22,6,27,19,289,240,129,73,659,431,214,475,523,370,368,233,899,701,287,257,95,85,28,102,183,736,650,467,256,153,25,207,124,108,80,32,24,120,26,389,874,718,635,51,525,891,752,751,730,648,614,498,496,450,249,237,209,184,177,162,114,59,45,29,235,77,42,817,497,444,137,112,74,53,352,511,681,630,643,196,947,942,847,764,719,696,651,615,610,603,602,543,457,412,386,337,326,312,288,262,260,247,227,226,179,152,139,134,119,117,105,86,76 }, -{ 127,98,31,293,299,395,44,9,105,0,49,599,284,28,276,116,242,685,159,456,22,763,125,935,272,492,158,1,623,393,109,144,201,39,36,95,18,51,24,320,137,23,286,55,16,512,916,489,202,21,662,301,268,367,327,371,35,761,567,13,434,65,7,101,918,616,2,5,141,737,506,870,12,64,131,68,30,48,900,948,86,128,295,10,219,239,269,910,403,627,338,578,143,14,37,124,160,203,318,384,170,244,165,261,96,347,254,713,963,168,457,237,187,93,67,154,421,221,253,401,344,424,164,479,6,386,83,855 }, -{ 1,14,5,2,46,50,38,58,171,61,45,155,7,48,69,270,290,24,21,29,75,52,16,67,54,666,32,663,227,72,502,0,425,223,18,592,89,17,35,243,37,207,76,186,103,263,36,163,96,83,741,6,408,10,400,22,181,28,9,428,12,536,64,221,220,70,262,281,23,267,115,106,65,807,292,309,119,148,474,449,394,128,141,86,241,3,655,430,51,189,476,140,431,541,587,95,334,738,675,90,114,13,780,108,71,720,19,133,27,202,335,413,4,767,112,77,25,405,513,179,659,99,218,787,55,180,528,151 }, -{ 23,51,13,453,457,12,719,401,961,4,629,730,99,475,115,2,11,14,403,17,40,5,15,165,1,3,64,0,10,57,33,21,77,569,32,50,37,308,7,386,9,16,38,670,197,59,41,217,128,494,46,6,758,62,22,775,65,45,18,86,48,29,72,899,514,361,328,139,102,247,153,54,56,421,468,79,523,95,108,757,196,52,19,317,117,482,342,341,24,734,509,210,202,180,177,237,488,402,114,36,134,880,76,498,90,275,111,34,28,291,67,20,474,120,743,125,82,391,130,752,490,437,405,318,277,27,141,89 }, -{ 968,967,966,965,964,963,962,961,960,959,958,957,956,955,954,953,952,951,950,949,948,947,946,945,944,943,942,941,940,939,938,937,936,935,934,933,932,931,930,929,928,927,926,925,924,923,922,921,920,919,918,917,916,915,914,913,912,911,910,909,908,907,906,905,904,903,902,901,900,899,898,897,896,895,894,893,892,891,890,889,888,887,886,885,884,883,882,881,880,879,878,877,876,875,874,873,872,871,870,869,868,867,866,865,864,863,862,861,860,859,858,857,856,855,854,853,852,851,850,849,848,847,846,845,844,843,842,841 }, -{ 2,1,29,103,75,52,14,67,46,309,6,83,70,238,38,24,108,220,218,133,74,96,262,36,114,87,388,26,50,25,366,236,69,160,112,5,65,58,66,394,19,145,226,7,532,135,163,42,18,45,150,545,458,433,891,331,357,594,17,28,412,27,294,418,86,278,21,124,398,149,732,894,324,537,283,223,273,222,71,12,606,739,16,646,547,138,267,48,696,171,137,151,0,175,602,800,22,37,487,181,99,208,32,194,287,785,336,64,23,13,113,55,95,335,54,97,323,154,61,711,128,68,302,118,10,308,600,484 }, -{ 7,92,71,97,140,60,150,16,298,24,189,230,14,149,423,35,508,314,18,43,279,232,66,399,273,246,251,38,607,69,126,172,517,674,2,173,28,375,74,467,104,68,0,809,20,823,336,118,267,175,135,108,191,154,21,345,501,796,36,52,125,653,29,81,330,107,124,362,356,6,387,55,359,46,779,302,192,22,5,575,48,67,877,462,10,388,441,9,566,723,783,221,1,65,49,398,101,37,278,702,83,91,357,705,392,12,109,121,236,426,380,32,212,695,443,86,596,103,868,608,560,165,830,167,13,558,25,541 }, -{ 51,23,202,120,141,13,1,260,128,21,269,450,77,137,318,48,115,165,15,32,102,5,197,64,180,494,82,351,326,125,291,817,12,349,342,98,523,403,203,93,7,33,854,352,2,31,14,719,457,6,110,144,44,4,386,177,730,96,116,308,99,221,9,217,10,153,17,210,922,453,18,16,402,237,90,704,37,36,117,25,421,11,615,95,20,898,373,30,475,40,401,391,19,317,8,3,304,498,576,69,285,901,275,223,293,247,196,86,899,134,83,341,127,59,45,39,365,216,692,372,50,0,801,752,367,163,139,100 }, -{ 77,102,33,13,177,23,51,141,202,64,40,128,115,4,269,59,318,6,217,137,210,291,0,7,2,1,180,196,14,22,10,95,153,11,117,125,165,15,86,352,197,134,90,403,216,275,3,16,9,18,237,453,494,342,49,31,19,139,25,65,28,5,17,317,349,93,36,304,475,26,82,12,98,44,341,27,120,365,57,24,20,110,372,386,21,247,457,719,194,402,498,116,29,730,99,260,8,143,144,523,164,114,569,48,32,111,326,285,208,391,401,244,30,509,312,961,300,752,56,160,105,203,34,450,546,67,482,170 }, -{ 101,9,363,676,264,18,411,682,604,905,520,821,271,167,621,647,364,121,252,404,118,39,166,848,781,265,100,16,382,664,447,212,777,478,354,146,907,812,132,446,360,724,0,60,463,759,24,329,23,1,88,71,35,936,68,857,195,21,48,593,865,639,932,156,897,31,98,96,51,191,13,286,333,125,656,49,694,30,254,105,591,55,806,562,109,158,44,438,419,272,521,124,154,407,274,5,65,310,553,28,144,691,33,116,159,127,93,32,77,22,67,50,410,37,538,108,706,393,115,83,36,92,12,199,327,223,10,418 }, -{ 144,203,326,382,166,96,822,418,438,93,859,88,921,1,367,141,744,269,349,110,576,473,83,77,410,23,966,21,403,120,692,39,494,274,521,317,291,217,615,523,855,303,817,13,639,264,800,32,100,909,691,225,36,478,914,765,506,5,498,652,44,435,265,321,260,160,910,551,404,137,48,772,202,897,453,450,208,101,960,254,31,863,342,286,190,51,30,593,831,616,419,730,682,98,340,372,341,197,69,33,9,625,724,848,686,284,466,704,656,223,180,102,335,125,617,352,285,363,0,662,244,530,919,812,393,374,351,318 }, -{ 21,13,180,23,32,115,48,125,197,191,165,51,5,199,237,146,12,225,18,16,93,901,350,271,22,241,375,0,71,118,408,49,447,264,126,1,167,31,24,522,302,98,65,64,575,864,569,92,566,247,744,86,58,391,352,713,212,141,60,44,9,4,88,562,459,308,303,203,202,100,45,37,17,2,818,463,360,316,919,897,698,586,478,363,293,221,213,103,72,40,691,909,608,558,509,166,68,35,727,340,517,217,724,629,546,467,446,341,304,156,120,108,11,640,288,110,7,734,296,150,591,914,346,354,321,317,269,114 }, -{ 15,13,23,51,102,0,8,77,1,5,12,33,9,4,2,10,180,82,165,197,115,110,18,403,202,22,120,326,457,7,11,351,260,898,141,342,14,373,401,901,961,64,36,386,3,291,453,31,16,40,28,93,21,6,352,59,44,99,27,341,450,217,719,49,117,48,125,475,128,37,391,308,153,95,269,24,318,177,854,730,203,615,421,98,30,32,38,137,922,317,498,704,523,57,817,509,56,569,629,116,899,133,83,365,758,105,752,144,661,196,304,638,494,134,300,670,206,402,221,210,208,86,535,143,65,532,109,35 }, -{ 77,33,102,64,202,141,128,51,40,196,23,13,117,318,269,153,134,1,177,115,10,342,137,180,210,2,0,95,6,139,403,86,14,22,15,7,217,291,4,352,165,197,36,59,237,275,3,11,5,494,65,125,49,9,453,475,16,19,28,18,120,82,216,17,402,31,93,110,260,326,12,341,194,349,401,203,98,25,99,27,24,457,44,317,365,498,372,26,351,285,719,143,386,450,300,21,752,391,116,29,312,38,114,304,111,244,164,961,509,57,247,569,523,144,308,373,901,34,421,96,56,160,437,35,20,678,32,8 }, -{ 174,104,544,151,624,74,525,25,644,66,29,177,636,416,0,204,750,122,216,6,81,45,186,222,319,138,2,145,287,112,665,192,64,59,243,7,77,32,355,22,715,128,784,17,173,20,311,135,789,280,52,33,549,113,879,4,227,21,194,90,5,141,491,102,86,42,95,43,137,58,12,27,496,275,65,529,614,11,348,678,304,651,402,580,712,503,269,422,49,37,14,318,210,673,396,202,792,10,18,500,869,36,148,85,426,247,405,681,19,226,97,825,72,16,196,40,61,609,597,115,24,217,233,51,28,881,91,153 }, -{ 372,141,304,352,947,954,291,177,217,269,349,128,318,437,498,77,678,202,864,64,102,115,86,210,873,137,751,597,247,13,180,5,275,32,16,35,21,950,752,92,197,83,87,7,457,160,776,70,33,24,179,36,317,245,165,126,107,569,288,717,95,402,237,23,263,108,774,156,546,509,340,37,18,12,946,342,872,75,800,244,114,103,851,735,365,341,146,121,99,60,579,312,120,1,195,354,296,140,888,71,51,260,223,418,758,622,537,473,363,196,98,69,10,526,48,820,817,765,704,586,450,316,246,208,148,96,90,50 }, -{ 200,161,714,53,73,27,472,383,17,440,34,585,62,56,136,250,106,78,527,322,19,862,361,4,3,514,80,84,390,14,176,179,236,378,162,377,129,548,202,47,469,495,217,26,11,494,128,757,555,453,402,412,130,880,328,507,257,183,51,45,5,38,300,184,123,497,54,12,57,33,444,59,556,283,205,245,108,485,297,209,803,152,342,40,119,99,318,452,2,46,102,211,23,196,64,229,65,77,215,684,21,814,6,240,0,153,368,403,90,730,475,13,117,133,61,37,317,305,32,255,813,22,504,181,503,29,436,95 }, -{ 32,76,72,21,38,14,241,89,54,428,449,5,45,148,37,181,90,179,2,17,221,350,12,292,46,129,48,476,155,1,794,99,477,205,720,3,770,50,464,773,4,540,308,36,57,460,270,245,413,743,184,214,741,328,115,23,123,474,137,257,10,358,11,0,281,431,29,488,421,405,162,51,288,59,64,401,710,536,430,152,290,128,218,519,22,316,697,552,7,587,86,670,361,487,6,227,13,52,618,133,249,543,77,106,62,165,769,141,243,202,403,229,114,453,263,67,475,745,341,119,197,207,497,285,9,40,180,920 }, -{ 128,141,202,64,102,33,23,77,51,13,196,318,269,153,2,3,180,165,40,137,5,15,1,6,403,10,117,139,197,86,352,134,14,17,0,19,494,210,120,342,22,7,402,237,453,291,177,475,125,115,93,217,95,21,12,82,260,110,36,457,11,65,341,450,31,25,27,194,99,9,4,326,498,275,961,349,26,49,111,401,317,44,203,391,351,277,38,28,386,18,421,37,752,164,16,143,29,285,98,24,48,678,114,116,32,373,509,300,244,208,54,719,56,59,365,57,8,50,546,144,20,523,30,569,372,898,90,308 }, -{ 39,137,96,840,30,202,9,0,613,88,406,669,100,141,180,576,160,28,49,530,403,1,269,22,228,822,829,679,856,190,244,166,219,352,816,966,765,827,36,55,68,83,128,274,418,23,318,98,44,442,35,10,253,258,51,863,77,31,317,251,21,876,158,494,475,213,95,65,116,254,859,268,125,48,13,16,931,187,367,131,805,574,105,5,365,800,102,177,93,115,33,224,127,242,120,110,291,924,217,960,144,64,842,616,165,531,385,351,101,159,276,839,778,203,201,492,109,67,24,284,748,860,345,692,295,421,272,456 }, -{ 180,352,141,752,1,901,269,365,115,5,217,2,15,4,317,23,197,7,13,341,0,244,3,253,6,51,498,202,21,318,31,372,873,165,44,77,98,9,33,10,116,137,237,93,482,125,64,864,105,12,32,48,349,509,128,131,22,120,579,11,143,8,102,569,717,37,391,177,260,127,308,110,28,30,291,450,40,559,49,39,401,160,203,144,14,437,373,564,72,24,453,403,386,546,421,96,326,16,95,36,148,661,951,247,533,494,219,109,201,159,55,961,251,475,728,468,642,117,254,221,134,18,811,153,210,82,345,224 }, -{ 1,67,28,50,46,2,103,83,14,65,114,24,0,38,133,69,36,55,18,75,9,54,124,29,22,283,7,218,5,238,16,154,35,52,96,160,480,109,108,547,12,68,398,429,646,323,181,732,175,220,21,361,171,71,335,236,389,418,70,394,48,49,149,86,58,866,531,87,309,366,37,484,208,328,251,118,194,6,10,302,412,487,420,189,336,23,168,545,800,51,803,433,185,137,128,163,754,39,45,505,169,285,596,486,13,503,533,60,101,155,95,64,32,289,570,223,158,267,927,140,745,516,17,115,514,346,956,99 }, -{ 180,352,365,317,115,217,752,901,341,1,253,141,873,2,15,4,0,5,197,3,244,308,951,31,7,498,318,44,6,372,291,165,269,202,98,137,120,127,160,36,116,373,105,260,482,13,131,33,509,110,51,125,77,39,569,349,304,437,9,11,8,450,96,64,22,21,391,221,23,93,638,717,28,219,12,421,10,403,187,83,17,102,49,661,564,851,401,128,247,811,351,523,117,535,546,468,224,201,86,35,559,48,16,148,494,134,143,579,968,922,854,817,800,551,475,55,801,758,728,615,196,177,153,144,14,32,30,533 }, -{ 32,5,21,347,13,95,49,713,51,48,197,23,107,60,126,64,237,180,153,77,165,241,33,379,850,1,263,296,196,195,4,121,134,132,102,28,115,22,117,217,0,291,16,841,929,928,652,534,660,39,493,247,31,279,18,50,36,626,150,90,76,40,407,883,509,362,349,260,9,356,125,10,177,92,441,340,259,35,24,752,351,199,65,11,71,809,546,953,933,854,312,75,61,56,37,30,7,598,207,44,423,372,298,522,783,590,354,156,645,608,591,939,937,638,498,450,437,391,359,303,273,86,57,342,316,59,640,446 }, -{ 341,365,180,901,317,115,752,15,873,217,564,82,951,197,110,165,0,1,141,351,4,3,482,352,6,372,2,12,269,13,10,559,253,854,5,468,7,244,282,23,535,18,898,14,661,417,349,308,318,102,33,509,125,811,704,36,143,77,964,28,498,326,237,137,51,533,692,638,38,475,31,22,9,642,867,391,30,8,202,120,203,966,758,373,338,206,24,569,291,922,494,403,332,144,116,49,44,697,55,450,386,128,943,842,768,728,706,405,346,299,295,261,260,258,242,160,148,39,27,26,19,17,11,50,48,46,843,634 }, -{ 45,17,106,21,227,209,62,243,5,155,32,3,290,38,255,119,54,270,14,2,207,181,587,48,263,12,794,29,46,552,540,186,659,37,430,408,770,496,721,50,454,136,84,52,221,425,56,76,308,828,99,697,400,328,115,123,741,80,488,1,528,474,401,57,218,281,41,129,541,513,421,36,487,128,10,787,61,241,378,477,543,64,51,742,306,133,240,413,11,72,428,4,165,734,23,152,655,453,211,34,920,311,59,90,236,137,214,58,162,629,431,179,832,341,6,366,583,89,77,202,313,361,383,317,514,86,745,365 }, -{ 16,24,35,18,50,7,71,75,60,14,69,0,9,1,189,108,68,67,21,181,28,12,48,223,92,5,23,140,46,103,51,133,13,2,267,230,54,163,149,65,22,335,70,281,10,32,55,96,87,37,64,171,128,394,114,141,502,58,115,486,236,99,820,98,766,202,38,137,83,309,118,246,269,49,36,95,125,191,155,167,121,430,39,218,101,77,6,150,237,126,641,774,31,318,221,487,180,443,177,433,251,545,220,565,388,29,86,72,352,399,165,217,552,112,61,105,537,17,852,45,44,30,212,175,124,89,307,102 }, -{ 127,308,293,98,165,395,258,219,13,286,23,629,401,51,115,301,569,197,457,276,512,391,509,105,616,239,924,338,22,734,170,55,961,295,31,758,169,910,272,567,116,763,201,320,944,341,143,261,237,506,180,479,873,365,141,185,206,36,242,86,374,762,498,546,913,131,44,64,923,327,843,601,386,332,492,160,125,860,317,654,964,900,284,95,28,634,943,164,137,10,901,282,224,740,468,456,144,109,841,558,719,268,120,417,535,384,299,844,482,903,110,93,9,1,935,662,578,217,253,928,730,187,393,2,752,244,531,434 }, -{ 748,957,840,213,669,539,466,88,30,251,863,321,217,679,190,137,93,144,317,530,352,831,228,230,160,617,800,689,219,203,816,96,418,202,36,473,258,406,141,871,326,83,855,752,120,854,778,82,44,100,187,201,1,435,224,351,345,719,335,116,110,443,274,28,310,55,21,450,332,382,822,574,86,931,494,531,365,31,839,128,39,180,341,367,898,23,613,498,372,731,860,9,410,926,197,704,5,817,131,69,35,125,434,166,22,944,318,924,856,268,64,48,567,244,206,291,922,523,269,32,876,717,98,49,13,349,169,859 }, -{ 5,48,21,14,1,2,54,50,36,430,38,32,181,270,45,281,12,72,17,67,46,0,290,218,99,22,28,83,76,155,24,541,37,10,513,89,114,65,58,133,61,103,96,488,51,221,425,263,3,9,328,29,23,487,697,207,741,115,18,86,745,160,428,474,148,408,6,16,502,7,64,171,137,794,108,52,920,477,842,227,55,236,552,543,13,119,514,361,449,202,238,828,536,128,308,292,476,243,592,90,241,186,179,666,285,4,27,655,663,480,421,401,106,208,141,165,433,528,532,19,834,95,283,197,11,180,720,403 }, -{ 13,23,51,115,217,33,77,0,4,2,9,317,102,141,7,11,1,10,180,5,40,202,22,197,3,6,352,365,12,269,341,165,14,18,16,28,64,15,59,318,177,403,752,31,24,196,308,32,372,125,128,291,498,137,17,247,153,21,49,401,453,349,98,117,44,8,95,237,901,36,86,93,494,342,475,30,482,210,468,457,304,873,569,90,105,143,421,391,386,37,509,39,134,139,110,116,35,275,244,144,120,326,55,961,19,546,203,46,864,27,719,221,111,65,164,253,285,216,127,402,730,50,437,38,67,20,288,54 }, -{ 13,23,165,15,37,54,134,12,117,38,457,51,64,197,99,115,153,89,961,719,33,10,82,509,14,128,120,237,3,196,308,86,141,328,0,1,629,72,450,277,139,102,523,386,351,77,8,401,65,4,546,95,155,202,180,21,2,498,391,40,352,7,5,32,11,6,730,474,31,475,110,137,899,854,453,922,569,291,114,108,22,898,44,9,177,403,148,49,361,342,285,260,514,269,93,17,758,901,210,864,479,59,34,29,28,67,217,494,318,236,179,90,76,56,50,18,242,417,528,488,206,98,413,94,817,789,468,402 }, -{ 5,21,32,14,2,48,17,3,1,12,72,38,45,54,51,10,36,22,76,23,0,89,540,13,137,86,37,4,430,270,50,114,11,221,99,285,115,64,6,61,46,361,29,181,290,65,58,403,208,155,28,133,480,281,148,128,323,453,657,401,514,541,754,421,697,202,90,9,7,475,241,263,40,56,328,308,95,59,207,576,805,165,838,513,57,27,402,19,425,18,775,488,119,283,218,741,428,341,24,141,77,33,794,408,227,197,102,194,52,179,832,55,180,494,269,365,449,164,236,350,745,318,171,859,244,474,108,880 }, -{ 202,318,77,291,128,275,102,33,269,342,177,210,402,678,141,403,494,40,20,196,0,137,7,23,49,32,64,216,4,416,104,139,285,59,352,43,61,66,13,304,234,90,22,475,319,450,11,349,117,300,113,5,153,58,947,17,112,21,6,115,120,70,544,38,16,142,2,315,194,134,95,18,498,9,74,597,237,51,329,884,25,12,453,864,24,789,173,415,639,859,155,277,52,81,86,222,178,10,48,560,14,230,665,198,97,31,355,557,65,1,186,105,817,111,39,226,57,546,121,29,147,28,15,87,60,96,265,523 }, -{ 1,24,46,2,14,67,69,75,103,38,35,50,52,83,29,108,18,16,71,220,149,394,309,236,189,70,96,133,171,54,68,366,28,58,5,238,181,163,87,7,433,0,335,60,218,114,251,487,65,267,537,36,328,418,223,9,486,55,516,262,112,150,155,12,388,48,21,45,675,175,336,22,409,118,37,186,281,140,412,696,6,124,25,514,151,294,61,99,154,10,334,32,17,273,92,135,160,283,760,278,458,227,766,64,307,19,86,361,398,230,552,641,532,400,137,565,23,502,345,51,13,95,765,26,66,72,128,399 }, -{ 15,1,5,2,13,0,7,23,6,3,180,12,51,4,9,115,457,165,197,21,8,14,141,901,37,752,117,16,77,10,32,120,202,11,317,217,110,961,22,33,365,341,82,269,719,93,352,31,102,18,128,153,134,28,260,48,569,64,137,40,318,196,386,351,509,17,44,30,326,125,730,308,450,49,177,36,95,453,89,72,98,99,203,873,523,401,498,403,59,291,116,38,24,629,372,90,349,76,55,391,373,144,758,494,237,244,96,482,475,54,854,39,468,143,45,139,105,221,247,86,899,50,148,253,35,210,304,421 }, -{ 28,65,124,14,0,154,24,67,69,55,175,7,9,429,46,2,109,35,149,336,68,1,189,83,114,251,108,16,133,398,484,103,36,18,38,22,50,267,420,140,283,289,71,570,158,236,389,101,505,230,86,346,185,39,12,169,168,799,194,118,49,596,29,732,782,302,309,5,533,52,252,95,388,419,535,21,439,458,705,75,797,160,412,6,10,54,531,218,92,345,208,96,159,610,48,60,64,323,756,105,37,23,646,238,51,128,329,886,547,278,13,650,637,32,172,135,364,164,143,584,602,115,701,601,137,333,399,443 }, -{ 162,403,56,775,129,880,161,527,99,3,17,40,33,475,23,4,361,128,196,14,200,183,34,202,102,184,548,402,383,53,130,153,757,494,27,257,108,453,38,12,136,117,51,485,123,64,57,65,19,585,141,73,13,139,421,134,229,106,11,80,556,469,670,84,59,152,62,78,714,412,378,77,5,495,21,54,236,488,497,2,6,90,514,86,111,730,22,180,26,46,507,440,95,269,37,472,115,32,401,45,283,452,618,0,328,47,18,29,266,390,10,211,165,899,250,24,300,862,719,504,133,543,197,318,277,50,176,457 }, -{ 151,29,112,2,58,311,186,52,70,113,315,45,66,74,61,631,5,87,287,243,491,209,1,869,6,227,614,135,7,307,75,80,27,145,496,226,25,454,17,14,549,26,845,19,32,46,73,106,294,163,155,64,255,659,849,667,632,644,592,72,220,331,21,334,222,172,42,69,400,48,76,138,396,337,148,635,50,86,611,445,128,171,97,122,141,95,738,119,16,37,38,4,207,67,425,290,409,53,24,65,262,89,90,12,297,278,192,461,137,22,624,36,20,483,881,84,292,684,43,10,833,56,651,655,114,263,204,115 }, -{ 6,74,75,1,70,66,138,29,25,85,26,42,87,220,52,2,135,226,222,802,324,112,145,357,103,19,278,108,380,67,114,309,235,14,500,69,451,133,606,280,38,24,582,83,65,262,163,86,97,394,294,267,486,96,50,36,889,388,603,641,58,256,32,895,238,223,853,45,122,594,46,537,64,21,204,150,27,335,792,102,7,115,337,218,13,418,71,33,160,632,5,189,696,571,308,461,95,565,16,545,331,125,4,137,134,153,113,117,17,35,558,54,287,149,22,171,18,711,174,630,247,63,12,23,0,194,462,90 }, -{ 15,13,23,51,1,120,0,180,202,5,260,9,2,102,450,115,77,7,141,12,21,269,318,197,137,523,403,6,165,326,33,351,341,817,110,901,342,128,365,36,14,4,16,457,308,401,18,494,8,48,32,59,64,82,352,22,475,10,217,386,730,317,28,93,37,3,373,854,453,719,752,31,615,24,44,30,421,291,11,210,221,39,899,99,96,961,55,86,98,40,116,177,402,922,160,898,244,203,35,576,17,569,117,509,144,391,90,49,372,704,349,153,873,285,498,253,275,125,89,143,300,196,72,247,67,95,629,127 }, -{ 5,45,17,14,46,2,50,48,186,181,227,61,29,38,155,281,54,52,80,106,400,209,21,58,3,171,243,487,540,32,328,311,103,218,133,430,255,62,67,12,828,454,36,56,536,236,27,1,207,496,787,119,697,366,114,37,19,108,6,760,513,541,600,587,592,84,745,842,99,920,96,502,151,76,13,26,270,583,263,86,221,115,83,832,666,51,23,136,34,334,65,10,290,72,308,137,663,869,739,361,514,25,721,738,794,4,659,543,89,401,667,11,64,576,378,148,22,24,834,0,474,357,73,483,754,516,41,53 }, -{ 18,16,35,60,68,121,265,158,159,24,329,105,9,132,167,252,327,709,101,55,286,39,21,71,146,49,7,109,374,23,22,126,604,107,419,333,271,14,28,1,48,0,191,120,92,212,20,310,272,890,553,118,5,326,137,199,260,455,51,95,446,320,13,32,450,259,170,627,621,639,2,10,195,647,128,98,364,301,557,463,43,37,239,77,576,848,64,100,351,82,102,125,65,285,202,12,354,6,363,346,178,344,197,165,493,407,147,29,523,242,907,96,538,932,403,33,279,916,97,704,36,31,402,520,318,156,912,846 }, -{ 467,650,389,108,283,56,412,123,177,216,670,619,349,269,33,475,899,775,453,503,789,401,678,65,543,51,196,403,730,128,84,23,194,523,13,421,719,576,457,11,597,153,880,141,249,847,3,801,117,817,57,133,18,0,202,114,59,24,150,32,386,64,40,95,291,4,183,450,130,524,162,5,554,152,90,22,9,361,134,236,102,17,27,120,304,19,961,629,210,432,21,770,86,16,14,10,77,165,46,28,594,381,377,240,137,26,229,494,947,372,602,342,318,275,125,98,630,743,701,605,184,103,97,63,50,49,958,444 }, -{ 514,11,377,328,361,3,4,880,507,403,485,57,130,14,757,152,38,102,300,211,556,215,54,176,236,62,229,56,494,40,585,555,266,34,183,59,342,12,162,440,453,548,51,37,77,402,488,305,184,196,542,421,775,471,123,527,210,369,313,33,457,136,719,23,202,231,13,128,153,381,629,452,803,543,129,412,157,17,248,339,111,84,139,497,475,205,99,119,32,828,188,177,961,349,383,117,46,89,79,730,216,504,277,401,161,134,308,291,322,76,249,283,72,65,64,21,2,22,670,503,241,41,257,90,108,618,472,94 }, -{ 3,555,62,266,507,215,130,440,99,514,229,152,471,40,57,139,403,12,56,548,305,33,475,38,313,775,361,14,123,211,880,328,196,102,23,556,381,184,136,757,377,77,277,54,183,494,453,421,4,11,205,349,291,129,162,452,34,236,84,17,369,37,59,485,497,111,401,402,51,153,157,477,585,13,670,128,117,339,176,161,41,488,248,202,383,300,457,249,119,76,432,46,342,134,79,188,89,214,2,474,72,527,961,21,32,308,719,543,165,177,257,730,412,133,413,64,283,216,210,245,106,618,803,90,15,629,115,460 }, -{ 120,318,450,260,77,15,202,13,817,51,269,5,33,494,922,128,1,326,102,23,403,523,137,141,21,177,351,40,342,48,291,82,854,153,125,64,7,615,32,196,22,704,210,402,98,4,475,12,373,115,93,2,96,453,285,44,275,349,36,61,31,116,216,859,197,117,49,28,16,899,678,203,165,59,90,180,139,50,24,6,144,217,95,898,692,170,110,45,18,17,10,0,730,352,72,37,207,457,576,341,237,35,20,9,661,372,194,961,223,214,958,949,811,805,791,551,424,391,365,244,242,221,208,160,127,99,89,76 }, -{ 23,1,15,51,13,2,5,0,7,6,180,12,9,115,21,3,197,165,4,457,386,120,141,33,202,453,14,730,523,719,401,37,40,32,341,8,31,403,260,82,450,352,16,48,110,269,317,77,217,308,44,137,22,102,18,365,318,901,93,351,421,117,475,752,11,326,28,391,49,98,153,498,128,99,64,30,569,10,899,509,36,196,961,24,221,59,39,89,177,758,854,134,494,116,17,629,90,817,670,468,86,247,72,95,35,105,96,203,482,55,373,125,372,873,144,210,922,291,38,244,237,898,54,50,20,349,615,65 }, -{ 15,180,351,317,82,115,365,217,141,898,10,854,901,197,143,77,23,752,341,352,33,110,13,36,64,102,51,4,1,260,253,244,120,9,21,5,22,40,498,55,165,137,117,28,11,873,372,922,482,134,59,0,72,153,196,160,32,48,202,3,2,961,90,12,35,811,164,291,177,349,31,86,30,308,7,125,509,642,450,128,6,139,17,96,210,237,89,951,523,342,457,93,730,57,37,39,661,16,83,437,373,546,269,49,18,14,531,8,717,318,111,45,24,569,247,76,533,719,221,67,326,282,468,386,203,52,44,38 }, -{ 104,289,707,66,712,173,97,214,90,64,426,20,874,414,568,43,65,32,194,715,7,204,312,560,74,500,192,835,324,0,38,376,819,861,147,319,95,636,22,86,729,21,470,879,288,5,107,526,52,81,178,2,751,49,10,519,142,595,427,247,77,356,232,249,4,750,237,597,28,885,784,36,889,858,51,202,802,14,135,298,115,13,59,524,808,1,330,325,23,92,180,359,392,31,24,583,681,61,18,259,172,48,177,123,825,798,37,357,12,208,33,174,387,362,140,102,35,76,40,17,137,198,11,216,600,16,671,91 }, -{ 84,65,56,18,194,249,0,108,123,643,847,554,63,524,416,141,453,24,26,403,22,511,467,630,475,128,73,137,33,9,80,899,95,64,370,76,45,16,133,42,289,19,650,214,27,240,730,719,210,196,119,114,49,494,402,304,102,90,32,11,10,588,561,283,235,202,523,183,25,736,609,580,576,500,457,433,357,349,343,209,124,60,57,39,28,3,1,757,150,23,368,670,51,597,947,813,667,659,529,431,291,287,243,236,233,216,179,177,153,134,122,117,112,89,85,72,31,30,6,421,389,165,125,895,874,619,519,361 }, -{ 21,350,308,13,346,197,826,352,101,841,570,68,165,509,23,115,100,694,749,569,903,51,212,401,9,0,221,734,391,154,777,252,88,124,610,265,237,39,558,125,48,30,217,230,421,35,289,468,64,55,535,475,213,546,175,909,1,403,382,166,589,28,645,812,419,180,32,706,98,593,410,703,759,141,317,629,65,241,83,194,818,773,22,321,752,689,923,341,962,96,671,699,158,95,16,329,429,854,264,724,190,439,31,722,316,72,900,144,10,93,247,49,831,676,372,24,223,36,553,269,293,69,365,490,191,5,639,251 }, -{ 92,16,60,24,7,71,126,18,35,140,330,14,246,46,50,267,121,146,236,108,75,220,199,571,394,68,309,150,132,107,314,448,230,54,232,633,5,366,118,2,21,9,278,38,388,37,87,64,1,181,328,12,641,55,70,672,582,726,48,526,0,622,172,516,563,86,69,32,103,10,133,36,156,167,28,65,101,135,195,52,171,950,149,22,830,189,99,649,191,451,67,13,29,262,294,606,83,545,58,517,462,271,23,572,95,163,696,128,675,594,620,392,514,77,785,45,155,192,217,653,335,279,522,212,237,51,177,565 }, -{ 15,82,898,365,33,77,341,180,115,901,21,10,102,197,55,5,4,351,13,165,117,36,11,1,217,23,317,141,40,752,120,153,450,134,253,12,2,260,143,196,873,51,89,457,32,3,177,352,349,854,372,244,160,59,7,719,961,64,202,96,6,110,291,137,523,498,111,0,210,482,28,31,30,17,951,125,318,22,128,509,139,811,730,386,169,304,9,391,37,164,48,326,269,203,93,373,237,148,535,342,72,569,704,308,247,38,533,49,98,922,86,734,109,14,45,275,216,95,817,403,44,437,57,899,661,41,39,968 }, -{ 16,24,35,71,18,68,108,140,189,69,103,60,267,50,149,118,230,7,1,133,191,92,46,167,9,75,246,0,2,443,309,236,486,335,14,54,212,330,218,516,65,67,38,394,641,21,181,55,28,101,48,83,399,366,563,412,545,114,220,696,388,51,328,13,23,5,64,458,273,124,126,12,238,487,52,345,37,537,87,121,29,915,723,150,175,32,302,154,163,361,146,375,674,22,10,171,271,96,514,251,86,433,70,336,36,571,622,223,906,796,237,726,398,602,283,39,262,115,702,565,891,58,695,562,199,128,894,49 }, -{ 60,20,16,43,7,71,18,92,118,14,35,628,608,68,154,28,375,126,175,107,0,279,150,173,22,356,97,149,566,55,153,169,49,140,69,33,13,230,117,38,23,10,362,51,2,77,783,414,421,109,298,246,359,196,125,124,446,102,104,386,722,66,21,1,601,575,621,326,439,429,12,392,134,32,882,192,74,345,551,533,419,185,336,191,4,232,37,273,595,81,189,791,314,202,158,917,576,467,570,6,5,302,48,422,115,801,319,197,165,677,535,925,420,387,9,423,399,251,517,515,403,291,199,260,694,553,64,40 }, -{ 187,258,871,295,434,489,219,201,224,268,839,384,699,940,110,261,116,160,131,44,36,574,228,144,141,93,137,567,406,244,926,120,98,253,260,373,64,442,206,269,127,908,318,55,31,911,959,855,617,10,1,531,332,523,202,613,203,661,326,352,860,217,717,367,276,21,51,143,180,96,23,105,13,450,22,385,533,284,662,197,851,86,77,251,30,115,83,9,48,816,164,282,811,317,365,39,856,165,351,843,669,473,899,341,125,922,902,752,291,817,372,918,345,417,177,728,82,293,242,951,498,968,854,386,559,15,349,49 }, -{ 66,97,7,172,192,712,232,204,324,387,74,426,448,526,104,173,107,568,560,43,356,825,808,500,729,135,359,52,707,92,32,95,330,20,636,64,65,22,140,38,138,81,298,2,289,715,885,5,802,392,29,49,14,174,0,889,91,86,226,348,90,750,861,6,357,280,314,312,126,214,246,792,353,10,36,24,380,580,21,835,37,28,414,58,230,69,222,595,362,194,673,16,278,12,77,85,33,46,874,18,819,61,60,681,147,858,888,612,600,13,241,25,501,102,48,35,67,189,87,71,40,4,583,519,779,1,237,150 }, -{ 15,1,5,341,4,13,0,3,2,134,33,12,11,7,10,77,6,9,21,23,40,197,8,32,365,37,17,901,111,102,51,117,180,317,961,153,217,165,59,14,22,16,82,141,31,457,94,202,115,291,453,403,196,57,36,372,475,318,719,28,349,18,401,72,269,99,48,386,110,498,64,494,120,352,93,351,54,139,27,509,474,177,45,44,30,670,90,421,326,76,56,89,128,898,642,629,304,260,450,19,482,137,29,55,391,873,342,24,49,730,203,62,373,143,210,79,752,41,39,758,661,817,157,152,98,523,579,402 }, -{ 0,24,35,28,124,68,9,154,65,16,109,149,55,175,158,71,39,252,7,419,14,108,101,346,168,22,185,289,429,49,18,420,169,67,439,671,703,336,302,1,159,92,610,962,484,118,333,95,69,2,677,398,344,100,364,810,272,345,105,46,329,114,60,535,265,327,577,30,10,189,21,12,254,286,133,194,83,23,140,793,553,86,36,50,570,637,13,103,5,722,310,51,374,230,48,38,64,32,747,706,505,701,273,251,150,164,601,455,166,627,143,634,125,283,424,239,458,799,128,246,267,388,547,6,137,96,37,538 }, -{ 7,92,14,16,46,140,220,60,35,24,2,126,38,87,75,278,71,172,262,135,52,314,107,54,294,246,394,150,18,50,330,29,309,267,230,171,1,70,232,108,21,5,121,620,97,236,69,622,32,572,563,950,366,409,58,199,12,48,64,328,37,571,189,146,448,132,66,68,155,872,112,192,461,67,441,181,675,279,13,298,28,226,0,451,23,163,423,606,9,582,128,20,86,526,36,334,307,55,380,462,888,357,335,61,43,10,22,45,83,337,331,186,353,359,103,726,133,633,95,51,65,202,72,74,785,114,141,149 }, -{ 92,7,126,16,314,172,60,140,35,135,278,14,232,2,107,246,46,150,330,24,66,38,71,230,52,380,97,298,279,448,563,192,357,262,199,121,87,18,582,309,462,441,29,75,74,132,220,5,146,451,526,324,423,50,21,550,69,32,68,226,508,1,70,37,633,64,12,108,606,267,48,572,493,54,189,726,366,0,392,359,22,95,43,58,571,603,28,10,20,86,236,55,171,600,36,9,388,163,65,607,387,6,67,49,294,649,830,583,356,362,90,622,394,620,167,259,939,149,443,83,580,114,25,103,118,672,61,45 }, -{ 235,26,53,297,6,436,73,113,27,445,42,25,250,611,90,19,65,214,648,614,85,624,289,64,122,200,491,684,416,32,17,194,45,665,145,34,80,95,573,151,112,322,86,680,714,315,630,106,690,14,29,472,255,141,396,56,312,57,22,247,76,209,4,128,61,288,123,84,352,249,11,874,108,3,138,5,217,256,70,119,59,74,0,835,283,161,114,751,269,597,525,389,136,77,51,10,40,115,287,47,2,52,78,176,881,62,13,524,519,23,137,33,133,28,46,177,746,311,18,236,12,63,180,453,237,631,179,243 }, -{ 352,141,752,854,36,1,351,217,230,244,661,110,816,258,160,224,180,219,82,201,269,567,144,295,260,373,922,93,120,203,489,64,35,202,406,317,206,699,137,116,268,871,717,10,839,251,434,228,864,253,326,96,21,131,9,30,83,384,44,442,39,450,574,69,332,48,318,418,728,898,55,127,187,642,365,86,276,88,28,341,831,498,22,901,443,100,367,523,128,531,940,213,5,689,748,190,860,679,0,31,811,843,559,164,7,669,143,662,851,77,564,372,165,335,98,800,261,2,959,349,284,170,115,291,824,345,50,855 }, -{ 126,60,16,35,107,18,191,121,68,92,279,446,598,463,375,43,167,493,7,20,118,199,212,566,14,150,97,28,575,608,589,55,407,101,246,154,146,24,346,21,0,175,48,71,362,815,354,49,628,132,939,5,467,22,649,10,9,1,356,259,147,271,149,783,439,140,23,108,32,109,230,376,683,125,13,621,345,441,363,31,51,647,612,273,124,562,173,695,768,105,38,252,2,727,169,818,640,195,755,590,637,158,722,364,104,37,953,535,12,44,64,66,359,33,202,806,298,46,419,98,221,95,77,185,660,399,653,520 }, -{ 1,15,2,5,4,3,13,0,23,11,7,6,341,115,77,51,10,9,12,33,180,197,102,40,217,165,141,365,901,21,317,32,202,8,14,64,177,22,269,352,59,17,291,31,569,318,125,210,16,93,386,453,196,457,401,18,494,403,153,752,37,28,475,961,117,110,498,120,342,523,139,116,629,44,326,134,349,203,98,372,49,128,275,57,308,48,237,391,719,30,509,24,95,36,86,19,421,260,758,247,90,730,615,216,137,373,450,873,111,482,144,29,899,304,817,670,25,300,143,801,55,20,244,82,45,27,39,242 }, -{ 51,23,13,202,21,5,403,137,32,141,318,128,1,120,165,125,12,48,15,475,269,180,453,197,115,64,401,33,2,7,450,6,523,308,260,421,221,4,494,37,386,99,16,14,196,457,730,237,93,817,102,77,61,82,352,9,719,98,110,10,20,899,326,19,18,3,117,90,17,391,402,95,0,341,31,11,217,25,961,629,351,96,134,72,49,153,30,26,569,801,203,372,40,509,24,50,317,285,27,758,116,349,342,70,59,58,76,39,44,291,89,57,45,29,854,28,22,144,177,35,194,576,86,670,54,365,678,247 }, -{ 131,716,371,224,737,385,219,254,616,924,836,187,258,98,761,916,944,127,39,105,442,578,9,49,272,31,688,44,116,242,137,871,908,159,395,518,890,28,293,284,574,202,623,51,160,23,0,201,276,36,827,938,839,22,333,125,456,299,286,144,109,438,158,13,95,910,64,30,829,228,327,166,101,1,860,926,613,96,86,512,846,310,21,295,10,406,55,318,252,320,93,843,128,301,627,567,203,165,48,662,492,100,268,37,531,457,221,190,434,403,68,384,421,239,393,261,902,35,533,169,170,120,110,260,244,308,5,506 }, -{ 15,5,1,2,3,4,7,0,6,11,13,10,180,197,12,217,341,141,33,134,77,17,165,9,352,40,365,32,317,64,498,752,102,21,117,901,59,14,237,8,23,291,349,36,864,269,372,153,57,37,82,961,22,115,569,196,120,509,873,342,202,48,51,351,110,16,93,45,31,457,125,19,76,72,111,244,27,260,128,143,318,79,546,56,139,28,18,86,44,98,90,391,94,61,55,854,95,38,386,29,482,898,49,99,89,253,210,177,137,730,450,35,221,84,25,304,954,758,326,922,474,403,203,20,373,50,247,523 }, -{ 66,74,192,173,222,226,174,7,29,712,52,204,353,43,20,500,2,138,145,97,104,673,426,355,6,64,560,87,0,580,331,172,414,90,32,25,337,65,22,49,135,825,861,112,280,5,287,81,95,525,86,21,707,42,38,792,415,85,750,889,356,36,324,819,10,632,232,45,526,330,1,107,544,91,319,140,746,151,294,194,58,92,28,14,67,289,4,636,115,37,17,12,262,715,470,16,155,59,27,61,233,387,298,18,376,568,216,26,122,69,77,113,24,23,888,70,13,114,51,75,448,729,11,609,102,348,312,33 }, -{ 786,259,5,534,590,493,465,929,581,21,279,941,49,13,612,132,32,362,23,147,61,48,35,121,939,626,683,146,178,107,771,687,408,347,713,345,58,427,126,70,18,60,4,197,878,150,344,640,379,1,195,841,33,120,263,356,51,509,522,260,28,22,0,115,55,10,376,663,207,350,199,16,423,142,407,221,156,246,623,595,241,105,31,903,298,11,71,68,95,92,64,17,40,450,441,90,167,308,165,518,44,783,316,247,953,360,351,98,30,102,82,65,159,955,290,87,817,134,20,182,39,24,230,117,59,501,315,569 }, -{ 278,14,135,2,140,16,267,69,92,24,7,46,35,189,38,52,71,29,60,75,357,172,87,309,66,380,262,74,324,230,462,220,1,451,150,335,226,571,108,18,97,50,443,606,563,103,67,246,550,6,641,126,330,70,388,366,5,83,149,68,21,486,48,314,25,12,54,565,298,394,600,622,32,423,294,232,37,582,236,222,572,28,65,251,603,36,192,64,58,145,0,171,331,55,950,853,95,133,86,22,10,114,112,399,620,138,448,26,163,353,508,500,583,96,45,877,238,42,726,9,785,121,279,181,696,72,19,223 }, -{ 165,13,308,391,197,23,401,509,758,457,569,51,629,734,180,115,873,317,901,961,3,453,719,29,46,546,80,34,2,482,217,468,181,867,48,106,45,341,52,17,14,287,297,5,730,445,386,552,428,62,221,186,15,11,171,56,50,12,38,365,250,328,133,61,211,540,153,215,119,53,41,903,670,58,743,311,99,305,231,176,27,236,4,54,130,881,403,151,6,600,57,136,84,40,764,787,114,475,862,472,469,73,32,26,33,400,227,137,21,1,255,196,270,281,155,65,752,635,440,405,326,161,110,549,477,430,396,592 }, -{ 1,14,22,2,28,7,67,168,65,24,49,0,35,46,55,50,95,69,12,159,36,105,16,114,109,158,5,83,194,103,38,133,239,169,9,289,164,185,18,424,6,21,10,708,124,170,320,283,312,389,29,68,51,23,420,143,189,347,505,336,37,175,835,892,86,149,108,64,874,54,13,577,251,48,32,654,756,547,96,71,115,301,286,128,154,202,236,344,160,253,484,638,52,75,208,230,747,610,308,39,218,533,137,140,267,141,374,3,345,31,127,237,799,98,601,597,244,272,323,125,398,401,118,17,327,99,412,101 }, -{ 34,453,130,196,322,3,14,236,361,47,51,377,11,730,514,711,4,412,153,57,161,440,485,102,176,59,162,108,17,62,283,757,202,56,136,38,328,880,77,494,184,12,719,128,402,403,200,23,78,117,27,475,21,300,40,381,54,472,33,53,183,152,129,99,2,714,452,13,585,803,80,210,862,555,383,73,46,123,37,139,84,670,556,503,548,6,507,421,5,111,527,29,19,342,229,457,26,775,134,318,469,133,115,90,106,257,277,401,250,497,205,1,543,266,211,542,629,899,45,488,215,217,65,72,275,339,432,32 }, -{ 48,18,23,21,35,60,16,24,156,51,13,71,121,221,5,132,46,141,163,7,1,43,271,202,115,92,411,178,340,137,447,308,32,363,150,698,125,223,195,781,541,318,147,142,28,22,0,108,360,621,401,241,2,463,354,49,658,586,67,303,269,97,20,761,50,296,146,70,65,763,867,691,638,182,647,93,82,10,767,167,31,914,670,290,128,107,75,61,225,98,64,4,120,14,12,758,110,29,949,457,316,165,105,95,293,30,668,932,180,39,446,724,743,666,421,391,372,351,114,96,86,66,591,352,33,942,922,459 }, -{ 13,165,629,457,961,569,23,197,341,401,41,758,901,719,17,509,51,115,38,421,62,54,157,12,32,45,117,57,37,339,328,106,188,14,365,734,99,546,488,477,76,873,2,453,308,542,248,72,10,184,40,721,214,211,4,386,305,479,474,152,3,243,90,139,11,5,1,153,313,21,468,134,471,217,148,129,123,179,77,89,670,255,162,130,94,7,391,136,59,102,111,536,196,828,247,237,743,428,6,514,277,556,128,33,475,155,266,229,29,528,209,720,413,241,64,361,476,183,9,0,519,405,317,202,181,805,775,431 }, -{ 77,141,2,102,33,1,64,6,5,3,7,269,202,128,180,23,318,14,0,10,13,291,352,153,40,197,165,137,237,51,17,177,15,217,117,115,196,9,86,4,139,134,11,19,22,12,210,403,16,342,95,125,36,457,317,21,498,752,349,275,143,59,341,120,27,93,82,18,28,111,494,110,164,38,25,365,901,475,391,57,8,203,509,260,31,961,49,453,386,48,678,351,326,56,37,719,402,99,401,546,372,569,44,65,304,864,32,730,300,194,26,45,244,873,277,29,285,41,208,597,20,253,160,523,24,98,54,312 }, -{ 212,68,154,124,562,101,191,0,9,375,118,520,167,149,818,65,16,722,302,21,777,35,24,71,604,350,100,806,252,478,346,264,664,841,1,759,265,48,13,695,429,55,701,329,51,23,724,398,589,18,936,115,882,484,755,88,749,69,903,125,189,410,22,221,535,382,108,308,166,917,411,39,28,223,67,92,509,32,10,197,64,5,694,650,114,558,95,246,60,909,7,83,241,96,165,363,391,593,98,230,321,103,364,826,553,925,639,49,458,734,628,419,336,447,768,399,140,105,175,37,886,682,905,674,821,404,109,812 }, -{ 48,23,51,98,125,541,598,259,293,13,807,126,21,115,221,493,963,223,35,31,670,386,121,0,107,770,165,144,90,203,116,719,949,783,727,279,590,197,32,326,10,284,146,49,401,407,132,64,199,16,955,342,97,39,834,1,194,453,191,522,427,114,105,92,30,14,7,465,393,763,271,50,725,615,195,108,22,77,44,9,640,291,20,202,269,941,767,671,591,498,467,360,147,128,28,704,551,389,289,33,150,141,60,43,697,534,362,589,58,325,621,523,475,403,260,237,218,210,140,137,127,109,102,87,83,46,36,867 }, -{ 21,23,13,5,1,586,32,48,167,51,781,31,647,33,271,165,49,141,591,44,115,522,77,197,221,22,360,18,93,146,391,558,105,932,217,447,118,153,961,352,60,900,317,761,196,459,0,363,260,241,82,4,12,698,463,7,291,98,27,247,815,156,120,36,623,35,10,191,628,95,65,46,17,50,922,341,202,45,411,64,521,372,102,16,934,308,269,663,410,351,326,14,116,686,349,225,110,457,29,2,509,71,621,854,701,475,354,342,159,158,132,127,24,478,446,321,246,199,640,848,777,759,371,318,316,273,223,126 }, -{ 2,29,61,52,7,1,5,14,58,70,45,425,6,290,112,738,32,207,46,72,66,186,87,76,655,38,243,263,74,151,21,75,16,227,25,50,135,17,148,64,89,255,292,128,24,106,155,141,315,476,209,226,90,26,833,19,113,27,306,115,48,454,549,592,18,4,163,307,0,20,119,77,10,86,36,270,54,177,35,171,720,22,65,137,496,202,40,887,59,179,95,294,790,23,69,269,220,172,631,334,9,67,449,28,408,318,483,311,145,13,97,845,84,287,240,214,51,37,43,241,405,33,49,102,663,80,12,180 }, -{ 39,265,9,333,100,310,411,254,363,101,447,404,18,272,98,639,264,166,1,286,203,327,682,676,31,905,156,520,821,16,93,656,593,30,625,354,105,24,438,44,664,688,23,116,51,557,0,326,329,21,812,195,49,190,159,35,759,60,478,125,118,121,48,364,132,627,13,167,33,110,921,242,68,274,158,96,127,252,137,668,77,5,731,578,692,102,795,865,131,435,165,22,604,586,271,473,455,382,146,120,10,88,144,65,64,966,212,71,67,128,83,691,897,160,576,551,36,724,615,223,82,50,647,7,95,197,621,115 }, -{ 6,26,2,25,74,1,29,19,42,138,51,108,114,70,324,14,23,386,133,103,5,96,85,13,719,75,453,52,27,66,730,602,220,38,309,65,388,457,58,17,112,122,50,128,323,357,64,235,280,238,670,421,135,165,150,475,7,523,197,32,145,278,87,500,899,401,550,3,218,273,758,208,113,86,83,603,532,222,115,711,12,137,21,895,394,46,24,163,53,45,97,67,125,283,28,458,236,117,34,11,262,294,90,36,801,792,141,516,484,341,302,33,802,297,204,57,95,4,756,594,226,256,134,480,891,545,99,450 }, -{ 20,43,356,414,49,595,858,359,819,107,392,319,97,7,422,470,376,612,173,5,246,0,427,14,683,147,197,22,660,95,230,347,945,713,32,344,92,61,830,362,325,259,33,31,21,12,4,904,707,623,126,509,18,2,77,357,232,165,140,105,102,729,196,153,426,117,408,841,518,98,64,10,17,16,501,663,560,76,44,104,38,558,125,391,23,324,178,134,46,54,29,13,40,51,330,120,493,279,168,581,263,180,158,116,241,455,159,81,28,903,298,90,900,66,465,441,423,202,198,30,534,237,58,24,3,52,887,845 }, -{ 68,35,0,101,65,9,124,154,175,114,336,67,28,69,149,189,103,133,1,24,39,83,50,230,55,345,16,429,251,7,283,218,252,346,18,389,547,71,118,364,100,2,238,140,646,109,46,22,12,439,166,289,36,23,49,484,30,399,14,51,732,13,86,930,532,398,64,96,54,323,694,88,21,722,158,265,5,75,38,48,329,181,705,212,194,952,480,361,419,443,208,302,868,782,520,10,95,108,503,128,191,115,246,237,335,267,637,37,167,160,137,723,702,141,806,565,309,105,264,831,826,701,604,535,60,330,562,375 }, -{ 23,13,51,115,15,5,202,12,1,165,2,0,21,197,453,457,4,318,269,10,32,7,141,9,6,401,3,180,14,403,37,11,341,77,22,719,120,569,217,475,308,177,33,18,260,365,17,961,64,59,99,16,317,237,48,28,629,128,450,730,90,117,137,386,352,523,31,40,494,291,102,247,8,421,509,72,24,498,125,391,196,76,49,44,57,221,36,93,468,203,326,30,45,153,210,899,89,304,216,482,372,38,110,95,82,19,275,134,402,758,342,139,349,98,901,678,752,670,873,546,734,27,56,351,65,817,61,86 }, -{ 121,195,407,126,60,271,146,199,167,16,107,493,98,132,191,223,35,279,1,212,20,362,727,92,48,43,18,21,150,522,446,259,393,467,5,783,590,598,360,640,612,939,649,354,71,246,7,156,834,68,49,125,293,24,0,147,55,608,591,163,14,376,534,31,660,541,463,683,807,97,13,345,589,23,953,668,562,22,32,818,221,108,955,118,284,96,581,595,10,50,28,470,765,695,575,346,116,2,37,61,356,535,566,95,12,51,105,101,70,281,64,273,423,230,202,441,44,9,755,75,697,653,465,38,768,173,175,77 }, -{ 31,44,299,116,393,492,144,268,918,367,456,434,105,489,22,948,127,384,963,9,98,28,0,49,125,242,293,206,395,940,36,512,55,51,203,1,855,93,911,617,159,95,272,23,959,332,763,301,137,21,13,141,64,109,86,282,10,170,120,286,320,551,202,417,599,239,165,685,7,2,616,5,128,730,143,457,352,719,48,39,8,253,160,37,692,326,327,386,450,421,158,269,12,276,18,506,791,473,115,24,16,244,391,164,558,318,403,338,623,131,219,14,523,401,284,30,197,499,900,951,308,479,221,260,728,169,910,935 }, -{ 23,457,51,401,13,758,719,165,629,453,961,730,197,901,386,569,308,670,391,3,29,14,12,739,231,34,52,153,832,828,115,341,2,40,46,514,176,365,5,21,33,0,838,181,4,328,45,54,555,130,509,494,540,734,552,583,215,196,507,227,11,211,99,117,361,180,38,10,1,351,894,134,27,26,186,50,48,543,152,749,369,202,62,236,421,102,600,468,403,171,161,155,57,9,528,17,880,753,36,477,19,440,903,488,377,22,585,108,37,7,6,697,899,757,523,475,576,326,67,479,469,281,867,805,801,659,657,587 }, -{ 105,131,22,36,127,115,180,341,201,219,272,31,365,169,98,1,44,317,9,64,239,187,141,197,498,143,873,320,752,286,901,352,86,164,160,258,327,244,224,185,109,159,217,13,535,253,538,144,116,0,374,276,261,776,170,28,83,634,531,2,569,533,269,616,95,896,251,824,482,165,37,55,128,282,10,5,578,49,546,654,947,913,371,384,295,208,8,860,21,137,202,954,312,284,30,23,567,509,125,574,39,285,318,268,206,203,843,623,33,708,12,77,716,385,837,7,638,120,237,301,254,308,293,16,951,3,395,15 }, -{ 6,1,2,29,14,25,52,38,74,66,26,65,67,114,42,19,108,5,69,83,46,388,75,86,324,135,103,7,17,27,85,380,36,24,70,150,278,87,138,97,594,886,357,267,50,51,18,484,650,23,458,45,646,21,732,398,95,208,64,96,273,13,238,0,124,22,711,550,12,532,323,302,28,220,160,37,335,63,32,194,421,133,262,451,602,283,386,309,730,10,172,467,453,235,168,3,401,782,115,610,670,48,719,81,145,16,20,500,137,226,58,280,165,603,244,866,141,308,222,197,189,112,547,53,99,73,475,180 }, -{ 51,453,386,23,719,730,670,13,758,6,457,401,899,475,629,19,2,29,569,47,26,165,14,894,421,130,801,236,197,108,412,27,74,1,308,754,5,50,17,961,133,45,52,285,523,711,657,78,324,196,128,137,65,34,115,25,99,138,357,59,480,42,114,46,361,867,53,739,58,4,743,403,603,366,11,859,38,262,12,594,202,22,235,153,64,391,218,0,516,487,10,145,200,3,33,444,70,117,901,57,223,134,54,745,390,112,283,95,123,309,96,21,66,803,220,86,341,18,365,402,176,37,328,77,488,73,322,250 }, -{ 252,121,18,101,16,9,167,132,271,60,146,419,364,35,265,363,212,0,158,604,329,682,68,647,109,848,907,191,520,463,39,24,333,28,446,159,821,55,621,553,118,126,593,411,49,71,407,23,286,634,105,195,354,107,404,857,13,676,374,310,259,22,538,562,92,100,31,10,21,793,199,1,327,639,108,48,98,806,51,7,709,346,522,932,166,147,5,590,96,137,254,465,272,20,150,694,64,706,12,14,203,169,95,36,124,77,2,116,360,44,865,402,125,154,128,33,627,576,185,810,455,156,822,777,37,326,127,842 }, -{ 283,503,128,432,269,529,63,26,275,789,193,678,318,389,102,122,291,77,59,177,256,6,862,342,25,18,235,57,216,445,27,4,573,605,349,65,11,85,403,523,643,84,813,630,494,397,233,40,56,73,475,202,138,416,210,718,42,32,133,415,381,736,453,412,511,19,619,91,240,255,80,22,64,114,23,289,194,0,17,123,561,87,174,152,343,81,436,66,300,297,148,95,78,3,217,51,803,510,370,341,139,137,130,49,45,119,396,372,90,237,544,141,74,476,129,86,21,650,421,378,352,209,196,33,288,247,402,701 }, -{ 2,75,29,52,87,74,226,69,220,1,278,135,46,262,70,267,14,380,6,66,324,38,357,294,7,394,222,140,145,97,331,25,335,189,24,67,92,16,112,853,571,26,42,309,163,50,138,35,550,582,103,172,83,96,337,451,71,108,150,5,58,486,785,537,21,60,298,19,462,583,600,461,171,32,230,48,65,366,45,500,606,54,774,12,18,36,149,223,114,37,443,641,133,632,287,563,64,409,85,22,764,388,314,238,151,950,95,61,27,307,155,86,28,415,565,17,246,423,43,572,113,0,186,609,251,396,10,802 }, -{ 97,298,172,140,69,66,7,189,267,92,501,314,60,423,135,24,232,81,71,16,43,150,462,74,14,330,192,517,173,426,733,149,251,35,885,273,6,279,38,18,221,67,278,508,83,607,2,91,380,52,125,448,124,29,387,458,87,20,36,443,230,861,108,915,711,302,104,21,568,526,723,324,12,68,48,5,362,1,336,335,0,28,22,46,541,126,357,103,25,451,877,726,246,398,565,50,138,879,175,963,65,86,165,809,391,715,197,705,191,118,117,42,712,386,204,160,823,674,54,107,467,399,441,633,831,572,563,236 }, -{ 475,421,805,899,403,453,958,615,817,51,801,523,120,401,670,730,450,326,494,23,576,202,386,629,569,260,115,365,697,77,165,110,153,351,318,24,117,13,317,0,341,221,16,704,137,5,196,342,308,757,543,22,719,197,11,4,457,20,9,302,484,758,300,10,7,217,6,193,901,391,91,361,1,791,515,862,291,273,118,102,66,38,36,2,402,125,114,661,643,352,474,134,82,33,133,756,642,511,48,373,240,847,735,608,480,172,135,52,43,21,14,859,244,116,29,370,124,754,180,35,42,898,886,851,842,811,770,558 }, -{ 7,128,20,14,177,97,16,112,43,202,269,77,107,66,415,318,2,135,141,275,147,38,18,58,35,52,307,173,10,356,298,29,210,414,172,32,6,0,137,192,24,291,70,22,102,494,9,87,334,13,104,60,115,64,40,678,342,46,49,186,33,217,5,121,48,90,23,21,4,155,86,232,403,59,28,74,132,37,227,324,319,61,362,402,36,126,95,92,431,337,178,400,609,1,376,71,51,294,665,631,392,151,549,105,81,359,353,304,230,196,67,349,15,134,544,311,285,278,884,352,259,76,427,262,194,50,496,171 }, -{ 24,14,7,28,2,16,0,22,124,1,65,35,108,168,149,67,109,69,71,18,46,55,158,49,289,12,92,95,185,38,6,169,5,420,83,10,189,154,159,584,140,150,36,68,429,164,21,671,484,50,398,60,105,175,29,302,143,703,239,103,86,23,64,344,424,32,51,9,336,251,230,273,577,114,747,133,37,118,194,66,13,48,267,97,128,835,505,52,170,137,320,892,253,115,236,570,388,347,374,125,286,54,20,345,202,458,314,638,246,654,610,25,75,708,17,172,312,96,135,677,141,19,221,3,650,799,547,601 }, -{ 26,80,122,73,27,25,42,684,19,209,445,573,667,17,680,690,106,6,255,297,611,483,4,495,59,119,250,45,84,378,113,469,65,436,128,311,85,64,29,53,200,56,648,396,235,61,742,11,136,76,383,77,0,86,32,161,62,22,814,361,256,14,12,5,137,123,40,389,194,491,503,813,283,269,862,21,3,95,112,454,179,63,141,129,33,177,233,57,202,803,2,102,70,10,34,240,402,18,416,624,275,145,605,614,52,358,504,665,527,343,133,114,108,139,50,881,151,58,205,51,790,24,210,38,174,49,216,285 }, -{ 107,259,465,362,376,595,534,660,683,470,581,147,612,20,858,43,427,49,5,178,246,786,0,35,97,356,279,878,21,423,929,61,142,14,230,126,70,132,146,904,590,325,319,493,22,199,48,32,501,392,298,953,95,77,414,640,347,345,359,798,31,13,198,7,173,58,64,121,105,711,28,125,150,344,12,518,10,941,713,603,4,60,33,450,1,481,92,202,98,120,687,55,207,23,16,18,626,197,102,522,819,163,232,771,113,577,17,318,37,65,357,263,40,324,422,260,623,59,44,663,408,702,494,441,68,455,845,237 }, -{ 131,30,190,856,228,406,224,530,88,863,219,778,274,944,613,539,816,258,187,100,435,871,39,160,321,840,44,116,31,166,93,625,137,36,957,531,127,442,213,669,466,716,385,1,144,839,492,202,827,829,96,382,908,242,662,731,9,254,120,367,276,456,371,960,203,795,201,98,730,574,83,13,924,410,800,926,326,21,217,851,318,523,836,717,268,473,931,352,533,418,23,49,141,28,260,110,77,22,86,310,567,494,457,64,10,55,244,737,251,373,728,128,299,125,105,0,51,48,679,822,489,5,616,265,295,284,615,102 }, -{ 113,311,611,6,491,80,667,25,209,45,26,27,684,42,122,73,85,396,255,145,106,17,614,29,648,297,690,19,454,61,64,624,4,5,416,445,112,32,2,138,76,65,74,151,483,90,174,66,665,119,22,287,1,59,86,378,128,833,194,573,881,141,70,52,0,525,742,214,315,243,544,680,14,87,216,469,11,746,179,250,495,887,95,12,10,222,21,348,814,289,280,204,84,72,436,77,123,56,33,114,177,235,53,137,102,81,161,631,136,46,790,503,58,240,292,208,200,153,36,202,63,7,186,50,135,57,49,37 }, -{ 15,0,1,5,23,9,51,13,2,7,12,120,115,77,260,82,180,341,202,4,450,141,10,8,351,197,21,901,6,817,403,137,102,14,64,22,165,342,457,269,93,16,3,32,11,110,37,128,318,177,401,40,494,18,365,523,854,453,33,36,421,352,475,217,28,210,922,31,569,898,317,125,44,719,30,730,59,86,144,24,48,203,961,17,49,373,116,98,99,308,326,117,752,386,576,153,55,291,39,629,899,95,221,196,139,642,661,402,237,143,244,134,160,90,509,670,391,65,498,349,89,54,127,57,805,275,253,758 }, -{ 219,127,258,98,395,924,421,276,293,697,944,567,201,284,453,401,242,512,308,51,860,475,23,105,295,131,137,272,770,301,843,670,116,299,578,386,935,125,261,13,763,31,576,456,791,115,44,492,403,221,662,268,9,730,801,269,202,49,365,964,55,805,616,159,699,943,22,141,506,224,327,206,541,21,551,144,39,393,165,326,0,842,535,203,36,743,910,28,170,332,318,282,494,949,716,253,569,197,1,143,10,341,533,5,160,615,457,391,916,317,911,187,737,286,384,93,24,599,109,371,180,900,783,244,352,12,623,48 }, -{ 15,352,752,317,180,217,854,141,351,82,1,898,36,341,260,115,23,13,365,21,120,110,10,33,291,922,64,901,372,77,349,160,143,244,51,137,32,498,661,269,5,4,202,304,197,48,253,40,237,102,450,457,373,318,11,22,35,482,251,67,55,9,719,165,59,117,72,153,177,196,12,83,28,961,579,247,326,45,96,17,864,69,523,2,468,125,0,86,730,811,128,817,134,93,90,148,144,437,37,111,403,342,76,57,546,230,704,345,308,139,89,58,873,29,203,164,531,50,30,3,275,559,127,855,629,473,8,56 }, -{ 129,123,257,184,162,17,205,249,183,769,80,119,497,229,106,5,45,130,84,90,59,152,3,99,128,4,618,27,57,77,245,40,62,452,556,378,19,214,460,136,14,12,240,56,26,2,202,432,6,33,61,266,11,209,402,403,64,21,269,102,381,25,141,29,504,76,139,318,54,73,305,34,217,619,179,1,10,32,177,38,361,207,475,383,37,483,22,210,255,115,494,58,196,524,65,23,710,775,53,306,153,742,86,180,421,36,469,137,117,15,51,216,48,134,313,0,111,72,161,285,288,7,757,250,880,503,151,372 }, -{ 102,33,128,64,77,23,51,202,141,269,13,137,40,10,196,22,0,86,117,153,403,318,342,210,65,1,115,139,15,95,134,475,453,180,165,2,177,217,14,6,494,291,197,99,36,4,59,49,28,5,7,11,402,120,12,114,194,3,18,9,19,31,125,237,82,352,17,16,21,110,275,401,44,260,24,285,719,349,25,93,326,457,164,351,111,300,216,27,317,421,133,26,37,203,143,312,116,108,8,277,498,730,365,678,341,98,244,20,386,523,308,105,29,752,372,32,485,450,901,391,361,57,283,48,30,208,96,38 }, -{ 7,14,172,107,92,2,16,135,46,35,232,294,60,97,87,5,278,24,126,29,220,52,38,21,262,66,192,202,58,20,70,48,43,171,359,54,32,448,356,337,37,353,226,112,75,298,1,526,18,12,872,132,64,409,140,22,155,387,334,128,121,392,357,318,307,461,331,0,150,314,49,146,61,415,86,69,71,620,673,230,494,380,324,6,362,355,330,45,259,77,888,137,10,13,246,95,186,141,74,23,50,279,147,194,28,25,51,9,4,609,151,177,55,849,145,199,31,115,102,550,597,59,36,216,90,17,441,222 }, -{ 576,403,615,805,523,475,326,817,494,421,120,51,450,859,137,202,453,260,670,402,77,23,551,401,386,33,958,318,704,342,269,197,196,0,165,480,373,323,65,153,899,753,629,10,803,697,102,7,569,59,4,2,351,90,12,13,962,677,110,9,801,118,40,6,95,5,128,28,143,730,446,124,122,114,14,917,306,207,82,621,407,86,16,164,115,154,64,842,886,848,735,661,484,397,302,247,174,149,141,71,60,1,719,216,104,81,925,628,457,208,168,49,25,22,844,824,685,338,175,109,259,810,236,933,932,854,804,788 }, -{ 141,352,202,269,137,217,180,372,349,9,18,0,51,115,23,13,16,365,221,318,165,317,2,494,752,7,125,120,77,98,20,10,64,49,341,291,22,901,95,260,854,351,308,55,30,28,403,144,93,44,922,873,326,223,82,48,39,35,21,14,197,203,24,153,33,102,753,498,473,156,88,65,386,32,717,275,268,31,196,177,817,730,704,678,661,482,450,437,393,373,288,241,195,132,121,118,110,105,101,36,1,947,475,237,5,253,244,206,201,168,164,158,143,128,961,954,864,751,615,576,551,546,523,509,489,453,442,421 }, -{ 23,202,51,141,13,165,1,21,5,180,197,269,318,137,48,128,15,7,403,120,12,102,125,64,2,33,14,326,523,450,260,93,37,16,386,32,9,4,237,6,115,352,77,203,457,153,196,82,18,117,0,110,421,494,453,401,40,24,817,98,351,475,99,221,730,144,391,31,3,44,96,291,30,719,308,36,39,341,342,11,217,35,8,899,50,20,402,854,615,922,116,160,72,28,17,22,45,10,373,317,89,88,61,59,285,509,752,365,372,58,19,901,46,139,70,349,25,177,65,86,293,90,247,498,54,576,758,898 }, -{ 25,151,145,6,122,174,29,138,74,665,42,416,113,614,45,746,525,287,348,311,396,544,85,66,26,81,280,243,624,355,52,222,32,64,65,680,4,59,19,0,491,2,22,90,7,204,194,104,77,216,112,445,1,61,5,128,86,177,651,91,214,17,95,209,611,141,648,297,80,415,21,102,87,233,454,33,27,43,881,503,20,137,636,573,10,18,14,117,289,76,58,869,202,153,337,496,186,196,789,106,315,11,40,28,135,49,667,269,192,36,13,57,12,115,134,750,70,208,63,72,73,46,597,529,51,48,684,173 }, -{ 166,190,382,254,30,100,731,829,438,264,274,88,795,131,613,578,716,625,9,93,921,616,435,404,265,1,530,203,31,44,960,36,39,827,160,127,272,326,98,924,96,473,224,23,410,116,252,77,144,310,137,856,105,219,101,33,83,0,863,110,800,13,812,51,128,406,478,228,125,521,120,639,21,49,836,102,593,217,242,28,897,772,931,5,688,957,286,115,64,141,691,269,656,317,321,10,494,159,187,197,291,86,363,576,944,67,22,450,201,523,55,411,373,82,822,557,260,456,704,329,367,225,276,48,202,268,213,32 }, -{ 132,21,379,5,32,13,23,195,626,51,48,121,70,1,850,296,687,883,156,771,61,49,407,95,146,125,105,55,652,4,98,761,77,58,33,518,260,18,623,586,349,340,120,82,523,522,354,163,24,16,0,293,45,87,786,165,929,75,64,888,763,535,308,102,31,698,40,269,202,159,37,35,9,845,622,207,663,153,117,900,608,386,817,591,351,347,310,241,221,199,170,158,115,76,65,59,28,22,706,223,774,640,629,461,415,116,101,71,303,60,941,638,427,421,401,391,372,197,196,127,299,937,854,768,475,453,450,403 }, -{ 254,9,272,0,49,688,39,101,578,131,159,518,158,327,333,105,286,68,716,224,252,28,890,344,616,310,846,829,219,827,228,613,24,35,364,16,30,18,938,371,406,166,419,65,455,22,95,627,793,709,98,910,124,154,51,100,31,127,48,1,21,385,190,23,320,242,137,187,374,347,258,36,44,13,301,404,109,856,116,170,125,118,96,160,442,656,424,865,438,931,67,168,64,55,239,623,128,737,265,924,553,221,202,10,71,677,86,83,88,916,60,329,293,538,7,577,512,5,761,395,912,421,212,144,816,944,506,346 }, -{ 16,35,60,20,7,18,126,68,14,43,92,107,118,101,55,71,28,121,9,154,0,97,109,24,621,150,2,191,419,252,5,202,279,363,917,22,21,124,364,169,439,604,199,49,346,446,175,158,12,167,575,48,38,13,493,246,185,10,362,32,95,51,259,375,1,39,598,628,932,566,421,6,23,64,29,108,146,925,61,46,356,494,318,132,140,345,694,149,359,147,65,407,329,376,125,403,697,273,302,212,96,69,137,50,848,25,467,298,77,453,173,230,570,826,221,66,70,143,677,535,265,608,551,58,815,128,907,100 }, -{ 15,1,13,2,341,5,0,11,4,3,10,7,33,23,12,6,117,21,9,40,17,901,197,8,134,77,22,37,365,14,32,165,317,153,102,180,217,457,202,51,961,569,141,128,115,318,38,31,64,19,16,291,137,269,196,372,111,59,44,36,25,352,349,57,99,18,509,72,30,27,752,120,93,54,45,41,342,48,110,49,453,498,79,177,28,719,94,403,402,386,89,82,474,29,285,139,86,482,56,237,361,95,55,391,26,277,116,873,34,210,76,758,326,50,39,143,90,328,260,308,247,125,898,164,24,494,401,421 }, -{ 78,444,47,19,26,390,813,130,108,453,711,27,412,730,65,122,680,283,690,113,51,235,236,73,128,630,196,297,14,250,123,53,194,183,200,133,64,445,368,90,719,3,381,42,23,389,269,6,472,650,249,56,475,32,59,4,57,45,34,648,605,624,503,114,17,25,736,256,22,803,141,318,153,315,95,214,0,684,119,99,18,432,216,899,85,289,46,457,243,33,11,436,480,50,322,177,29,152,129,54,13,657,304,285,84,52,401,117,881,255,714,202,665,597,2,961,12,339,38,361,77,524,115,58,24,145,670,402 }, -{ 2,29,7,52,66,61,45,112,738,113,74,14,5,151,6,315,20,592,70,128,32,425,16,25,1,222,87,135,177,43,64,491,186,59,38,655,21,72,76,46,290,90,243,141,115,77,631,58,106,19,337,207,145,137,4,24,454,833,97,0,26,40,227,311,402,192,36,27,89,210,35,292,269,48,86,10,202,209,496,18,217,22,102,226,138,17,887,204,122,65,318,33,28,104,172,51,255,13,23,42,148,644,216,790,307,287,174,180,92,69,291,95,49,415,75,416,483,549,179,275,263,270,107,9,334,869,214,155 }, -{ 145,112,74,66,26,6,29,70,396,287,138,87,135,222,226,25,644,151,42,19,122,307,651,624,635,337,648,45,2,113,294,58,85,632,849,5,416,75,52,172,61,573,445,27,1,315,884,665,64,7,53,204,32,461,95,17,97,297,174,163,436,220,280,525,192,65,792,73,14,186,86,609,881,353,36,311,549,72,243,22,194,331,148,500,235,80,69,46,680,278,38,312,48,90,21,106,37,409,491,128,10,114,614,631,209,67,415,227,50,108,237,250,580,155,76,141,171,544,262,24,620,12,43,133,611,4,334,389 }, -{ 92,126,60,16,7,24,35,232,71,14,150,140,121,246,314,146,172,132,199,107,18,267,46,278,572,230,108,451,330,236,380,388,462,135,68,38,830,633,392,279,97,2,448,309,649,517,672,32,357,21,5,75,9,118,22,55,167,87,582,192,526,594,366,156,359,298,191,195,64,653,28,50,189,324,563,13,220,0,1,66,467,12,10,423,441,149,733,52,262,877,48,29,70,95,49,516,133,36,54,508,407,360,354,598,550,101,69,37,58,65,271,640,711,212,571,86,345,895,696,273,125,522,23,90,603,72,739,163 }, -{ 13,115,569,734,219,341,127,365,197,509,629,23,98,538,873,901,286,762,55,206,258,165,253,332,170,169,638,535,180,391,116,276,844,31,44,12,546,0,395,164,1,293,10,752,911,36,964,143,282,37,384,512,237,498,308,616,301,740,5,141,352,8,261,9,2,943,654,317,120,284,38,338,913,601,295,244,105,7,3,201,468,924,125,923,910,144,239,21,4,479,482,242,6,86,131,417,961,185,22,64,758,374,110,841,533,401,93,160,15,944,434,82,951,567,843,268,14,564,837,299,272,719,28,860,109,11,351,935 }, -{ 151,58,396,53,287,74,27,73,297,549,29,651,145,70,445,112,113,315,436,26,331,6,573,250,75,45,334,52,307,17,5,34,80,163,2,138,19,491,61,881,220,409,631,262,1,614,632,226,171,106,611,186,32,200,66,50,62,311,25,46,845,767,500,21,135,644,243,223,87,14,48,42,64,3,472,108,324,76,122,161,635,684,65,294,56,38,136,95,72,255,114,849,780,278,209,37,90,852,84,714,7,51,89,148,624,237,383,36,207,236,502,22,12,133,86,322,659,227,119,69,222,11,4,96,309,263,179,33 }, -{ 214,289,90,874,104,751,64,835,312,249,204,65,750,288,875,348,519,174,247,194,74,715,81,138,32,280,524,784,192,636,319,437,879,0,95,85,6,681,217,173,954,91,29,177,86,597,792,77,317,671,422,22,115,864,888,52,202,752,216,673,588,712,18,123,180,233,306,43,355,304,352,20,76,693,579,66,4,5,25,51,21,343,59,237,2,28,61,426,235,577,33,10,397,316,707,287,145,370,24,102,49,291,17,108,84,945,222,97,57,208,56,401,42,526,560,13,730,40,402,23,117,207,474,7,484,72,494,36 }, -{ 9,39,166,28,35,158,49,30,101,175,439,0,346,1,364,64,88,274,100,168,36,67,404,310,333,952,159,55,345,505,190,706,254,420,86,237,23,336,68,22,251,344,51,69,194,114,164,131,570,208,180,756,10,799,143,399,109,83,50,115,141,967,438,768,584,868,128,752,105,95,103,189,286,252,352,5,323,2,230,65,596,289,137,498,7,702,165,13,12,577,503,535,160,125,202,48,547,455,244,610,96,21,16,253,169,857,217,154,797,646,656,228,197,530,747,149,810,124,930,272,865,597,98,185,31,24,389,625 }, -{ 341,901,15,1,365,10,569,0,2,5,180,4,3,115,6,31,7,197,9,13,22,317,951,165,44,629,143,23,253,401,116,244,762,55,93,242,479,752,30,217,51,37,141,28,873,137,638,36,202,203,12,21,86,386,421,77,24,758,11,268,453,318,269,110,33,576,64,811,352,326,164,16,494,506,498,308,670,82,717,642,351,206,120,338,170,261,32,125,40,851,805,260,102,859,8,403,54,661,961,291,144,105,965,98,35,898,482,391,373,153,509,492,958,117,17,499,615,38,824,559,456,384,854,457,282,89,564,237 }, -{ 202,450,120,77,260,318,494,128,102,817,15,269,51,13,342,403,23,291,5,523,137,326,21,141,33,1,922,32,82,351,48,854,177,859,402,64,196,70,615,31,475,40,4,153,285,59,0,12,22,10,2,9,95,98,61,90,28,210,30,17,453,194,117,139,8,352,96,49,275,35,678,899,113,349,165,65,180,6,730,93,692,115,58,704,217,37,203,719,116,576,125,50,457,75,44,421,163,216,36,134,7,39,3,416,14,67,197,25,373,110,341,207,112,86,386,87,56,127,99,11,223,551,365,300,105,16,19,237 }, -{ 241,32,13,115,197,180,165,316,64,288,125,21,23,237,247,141,95,16,22,92,167,522,191,546,498,391,341,28,752,177,586,4,48,509,447,118,459,90,5,352,59,901,264,225,304,350,35,199,126,363,18,217,24,410,468,691,246,841,744,10,478,102,77,649,386,117,86,49,317,308,302,212,146,33,71,954,156,72,46,674,93,31,0,640,411,923,903,645,686,271,698,2,521,140,602,591,120,36,375,68,12,864,321,695,873,758,340,336,318,269,179,143,65,897,772,446,880,839,682,366,190,57,30,818,781,303,953,388 }, -{ 16,24,35,71,60,14,267,18,46,140,69,1,7,108,189,2,92,50,75,230,309,68,236,38,335,220,394,54,366,52,486,21,150,149,246,48,29,87,67,5,571,388,9,181,133,0,103,443,28,163,537,171,55,223,126,545,121,70,12,96,262,328,565,83,32,118,65,516,58,218,37,191,330,563,64,167,22,114,13,51,23,238,251,622,281,278,487,294,399,99,696,115,36,10,582,135,514,86,6,128,517,950,675,674,273,98,101,594,172,49,72,146,95,314,451,155,45,409,212,433,221,345,141,66,247,97,733,125 }, -{ 15,898,180,197,901,341,638,165,33,10,115,77,365,1,4,217,317,5,102,117,253,13,951,752,3,134,2,762,153,569,37,21,0,196,40,11,244,23,6,82,7,120,143,291,32,141,137,51,31,873,55,12,351,44,260,349,352,401,372,479,177,93,22,342,116,36,9,629,308,59,758,450,386,210,854,139,110,111,482,457,164,17,922,421,961,202,719,269,203,373,247,523,28,125,160,48,437,64,326,242,57,704,509,304,14,318,730,498,403,506,148,817,670,8,90,453,494,282,144,72,127,275,579,221,206,899,54,89 }, -{ 523,193,18,84,730,817,90,56,65,240,214,475,453,196,33,719,4,233,202,32,51,153,289,152,123,421,11,194,403,129,99,96,386,249,135,102,40,27,23,361,847,352,59,511,91,457,177,370,134,128,117,510,13,561,75,753,643,388,278,247,204,115,494,450,415,304,77,524,217,216,64,6,5,3,174,701,880,659,609,437,433,432,381,287,260,257,165,139,120,111,87,74,66,1,402,372,318,269,21,899,183,63,141,650,605,770,743,735,718,667,629,611,569,544,543,348,306,288,209,207,162,95,93,86,61,57,49,48 }, -{ 151,29,112,74,222,66,145,2,287,624,52,6,416,45,7,113,186,25,122,665,549,337,87,204,243,5,135,644,311,58,884,226,138,396,61,32,192,70,42,525,415,614,315,19,64,491,651,26,4,227,174,609,544,20,21,43,14,27,128,22,172,632,0,59,209,65,353,97,631,72,1,85,580,86,17,445,80,454,307,104,90,334,81,496,177,46,635,141,255,48,37,77,75,10,155,869,659,76,294,106,49,73,11,95,38,36,115,673,69,18,216,712,148,173,792,33,331,102,280,12,16,24,137,881,89,297,91,28 }, -{ 13,2,23,0,77,5,217,7,1,6,33,3,15,51,10,115,141,102,180,64,4,9,40,317,11,197,14,117,165,153,341,22,352,237,17,365,134,269,291,125,16,202,12,196,372,59,349,177,752,498,128,28,18,32,318,8,36,95,457,19,86,49,210,143,391,901,24,342,21,304,569,31,509,137,139,120,27,386,57,25,164,98,29,111,401,403,45,26,244,864,482,546,110,44,961,308,38,275,453,37,35,93,48,402,247,629,20,50,46,719,873,55,475,65,56,30,72,579,203,523,99,253,494,468,170,54,116,76 }, -{ 28,67,0,65,1,114,103,83,69,50,9,55,2,109,124,46,133,24,14,35,22,154,36,68,38,547,389,218,7,283,323,16,54,18,12,160,194,420,49,251,175,5,75,185,238,39,289,429,158,96,208,168,532,29,86,480,505,531,484,189,503,169,149,797,782,361,21,101,570,52,346,71,181,336,927,533,48,95,37,108,51,596,10,252,23,159,128,799,105,285,418,64,118,535,335,398,732,6,70,803,419,137,220,13,866,171,756,394,30,32,309,328,140,115,87,60,230,433,345,141,58,439,831,402,610,366,99,754 }, -{ 121,271,132,167,146,18,363,101,411,621,354,212,520,60,9,647,932,446,806,16,195,407,463,777,364,562,35,360,522,68,55,1,98,118,31,252,706,694,191,0,24,107,936,664,676,604,199,48,126,781,23,590,156,28,591,150,21,447,39,125,5,109,264,49,759,265,96,22,404,33,13,10,100,44,51,905,259,71,346,857,682,116,223,848,941,7,92,154,93,105,108,478,77,467,286,821,166,64,638,907,765,691,628,279,178,14,203,102,12,30,120,393,158,159,593,834,724,419,147,50,293,163,815,786,367,70,634,2 }, -{ 26,6,85,122,396,624,42,25,573,445,174,416,665,19,680,648,138,145,348,881,64,436,214,113,235,65,297,544,194,90,45,746,525,280,112,289,74,233,32,53,27,355,29,222,287,389,17,151,86,80,95,813,81,73,256,5,249,141,283,91,597,0,343,76,22,66,87,204,415,874,209,312,690,524,611,255,288,63,644,123,243,70,614,216,4,128,2,77,119,61,370,106,52,491,315,58,10,56,651,21,12,519,18,14,835,59,250,352,247,114,49,179,636,205,684,619,311,57,84,28,337,667,177,108,11,208,503,240 }, -{ 146,16,199,24,71,18,126,60,92,121,271,156,360,953,640,108,132,674,35,246,118,273,32,354,195,649,7,314,150,458,522,95,517,167,446,191,21,140,340,463,22,388,68,107,566,575,241,727,10,345,591,359,296,48,586,14,407,28,5,608,149,672,594,602,660,1,467,363,212,13,9,823,49,267,101,225,124,55,232,37,653,0,392,877,50,447,330,702,12,809,462,441,230,508,46,668,189,77,303,236,733,23,698,621,115,423,411,399,298,97,350,247,72,796,451,64,658,217,69,589,309,51,928,264,168,102,163,133 }, -{ 51,23,13,453,475,730,719,899,403,202,401,21,15,64,523,115,95,457,33,12,141,308,32,102,4,128,40,19,11,421,5,117,386,3,99,22,153,125,26,817,120,25,6,961,165,1,180,196,17,197,494,57,134,221,0,194,2,237,260,7,670,48,27,365,37,629,450,49,170,65,14,569,137,342,236,38,352,10,56,29,20,16,468,316,241,402,391,77,177,350,84,34,283,269,217,82,9,247,546,351,318,42,59,372,903,841,558,317,129,86,47,46,41,28,18,326,615,341,90,291,164,801,509,119,76,63,54,24 }, -{ 151,396,53,113,73,445,145,6,27,297,573,26,287,315,112,436,74,58,138,491,45,70,881,19,614,34,250,61,29,549,611,80,17,631,632,5,307,2,200,644,32,222,64,25,52,106,42,1,243,87,66,75,845,226,311,186,334,849,95,122,472,322,294,21,651,714,255,684,48,171,331,194,65,161,209,14,128,86,72,141,46,624,50,135,22,635,262,227,85,108,136,7,220,90,76,163,235,176,114,312,280,62,409,10,337,4,148,56,454,283,237,12,469,37,51,780,214,667,236,3,767,133,36,89,495,155,0,23 }, -{ 223,774,1,888,385,260,98,863,202,269,421,730,96,349,697,453,141,393,622,834,318,751,87,418,791,765,801,922,163,21,335,352,5,7,120,13,291,854,64,23,717,851,293,30,284,372,31,678,371,217,947,351,70,51,32,137,48,77,128,82,442,450,44,49,36,752,125,386,541,931,304,873,0,498,22,2,201,276,807,317,10,670,180,102,6,75,237,39,373,33,69,770,144,177,95,17,16,160,116,100,842,203,197,968,949,221,115,275,165,494,475,127,898,58,963,523,403,12,954,537,45,50,433,872,652,526,268,241 }, -{ 60,16,126,92,121,35,150,246,7,598,279,199,191,167,441,107,71,97,146,195,271,18,298,24,407,356,517,230,1,14,98,508,423,140,674,132,359,223,653,212,48,68,399,783,345,21,314,108,607,43,467,232,362,649,118,392,189,20,5,0,149,702,727,55,22,695,28,446,672,69,66,49,493,10,50,388,809,273,2,522,31,46,640,293,125,9,13,95,101,267,173,501,393,834,877,38,575,67,32,75,37,796,346,779,608,12,156,589,236,566,163,96,221,104,360,375,535,64,711,463,23,175,755,172,414,562,953,354 }, -{ 22,105,28,1,239,95,55,170,320,301,127,36,98,31,49,109,9,2,0,168,35,67,185,169,12,14,86,512,7,44,395,159,5,194,293,312,114,64,83,928,713,740,65,24,23,623,21,299,10,338,16,51,242,50,125,141,933,420,13,237,37,164,844,286,143,69,175,584,892,202,48,6,46,371,103,133,269,116,685,39,916,137,115,160,599,208,272,128,96,284,158,737,762,638,180,244,276,187,763,308,165,841,761,479,505,401,347,424,318,389,30,352,870,18,131,32,197,219,965,327,538,54,456,900,506,253,385,874 }, -{ 2,292,6,119,29,207,76,61,306,45,5,790,17,240,32,58,106,1,151,476,710,14,214,209,25,179,84,52,70,64,90,7,112,26,311,19,618,72,128,129,27,255,123,655,460,59,249,141,86,4,80,40,113,22,115,46,10,245,464,205,145,243,263,358,77,56,36,74,65,315,504,454,148,3,186,95,0,519,50,177,75,202,21,269,38,257,66,42,137,23,16,769,51,738,48,136,33,162,18,184,62,241,99,227,24,318,194,87,491,37,11,12,57,425,833,180,402,49,237,89,287,216,13,720,102,54,631,138 }, -{ 51,221,23,115,254,438,48,421,530,541,13,21,401,613,308,39,688,386,125,840,228,551,453,960,827,1,166,96,406,326,393,627,670,158,49,697,656,829,846,770,333,856,404,5,180,30,863,190,202,669,518,890,219,83,159,98,50,131,33,102,310,217,165,137,743,77,32,101,31,752,679,15,105,615,468,391,341,317,0,224,9,498,352,258,286,455,364,187,778,197,344,44,865,539,457,482,272,128,116,37,28,949,403,876,385,963,373,709,931,719,64,574,68,35,160,274,268,616,345,442,95,492,450,293,843,839,22,261 }, -{ 5,1,22,21,2,12,14,36,48,0,54,86,32,10,28,50,65,37,38,23,51,17,7,208,3,9,114,45,281,13,4,137,323,46,24,6,99,95,18,49,58,55,115,480,72,202,96,745,285,194,181,67,64,16,270,89,133,218,83,168,403,11,430,29,61,155,128,160,503,361,540,223,77,244,221,389,318,757,164,103,141,283,76,402,502,401,59,859,920,40,341,543,290,31,803,269,513,735,124,165,308,33,75,253,421,143,838,754,69,90,180,197,125,102,19,494,453,475,966,105,27,289,109,584,576,569,765,148 }, -{ 182,23,363,284,296,447,340,98,1,291,698,367,93,668,658,156,144,21,269,70,433,379,31,318,478,354,203,44,691,335,180,13,223,125,116,937,586,411,326,110,107,48,18,421,664,724,273,197,141,51,692,195,87,5,67,914,687,486,759,349,551,386,375,268,232,149,102,60,35,33,115,795,251,69,65,49,415,364,77,771,626,163,453,281,165,127,121,24,10,360,806,791,393,336,39,475,372,217,850,662,942,682,518,484,361,359,221,196,146,133,128,117,75,64,22,12,7,883,591,457,132,16,647,153,120,68,801,670 }, -{ 45,498,17,106,546,115,32,62,873,41,197,180,509,54,129,468,243,255,123,752,165,155,38,341,13,241,292,217,720,449,57,136,536,734,569,148,51,476,248,428,214,139,76,369,221,482,328,237,542,365,72,89,339,181,23,227,350,64,90,211,117,11,519,270,290,405,721,587,457,21,901,50,128,741,710,141,552,313,430,162,2,540,130,202,15,102,528,247,488,317,209,157,77,48,14,3,391,152,431,308,629,4,618,743,281,179,5,183,33,40,12,37,358,361,266,46,86,961,828,471,773,372,421,543,249,507,119,10 }, -{ 32,95,64,237,92,180,246,22,241,197,125,115,312,652,126,638,49,316,13,21,5,165,288,534,7,4,48,0,28,23,498,392,296,107,888,340,90,303,658,626,247,70,441,10,16,365,953,468,260,230,546,18,24,774,12,379,883,98,490,482,863,31,877,508,391,141,51,830,933,354,9,517,347,150,314,385,177,132,65,146,645,40,653,76,33,2,341,217,14,269,44,698,263,156,195,850,649,633,199,120,360,359,563,923,509,216,128,86,60,733,873,267,35,1,442,168,330,293,929,545,11,622,591,87,77,641,437,660 }, -{ 15,33,341,217,13,77,141,4,317,102,23,40,115,180,365,351,117,21,5,352,854,1,137,197,11,10,153,51,82,901,32,134,59,64,202,196,36,244,269,22,922,165,2,291,260,177,752,143,0,120,898,48,3,318,12,9,372,253,128,457,31,569,28,37,160,30,247,86,139,55,44,72,7,57,349,110,90,237,498,342,304,111,719,579,450,96,8,730,403,308,811,49,523,164,386,35,125,482,437,17,6,14,961,39,98,494,116,93,275,642,401,210,95,221,76,277,105,717,373,203,216,38,873,899,18,817,326,509 }, -{ 120,260,1,15,141,217,352,13,77,82,93,351,110,23,180,317,349,51,202,21,854,326,165,64,269,128,137,5,291,304,752,36,373,372,922,450,318,177,203,197,115,48,457,10,342,2,0,898,102,160,12,16,901,22,125,386,86,9,144,32,96,35,719,28,7,365,341,244,275,494,210,730,18,95,83,661,4,403,237,523,498,247,143,864,473,90,14,961,437,33,817,40,37,8,678,482,253,579,569,98,72,24,50,475,391,67,69,954,717,288,164,65,49,6,206,216,55,17,134,947,899,576,308,76,316,196,490,402 }, -{ 23,13,51,115,77,217,141,177,33,202,4,64,269,102,0,128,10,2,7,318,40,59,32,14,6,11,352,22,9,291,90,247,180,237,137,1,165,16,317,21,210,197,117,153,196,18,125,49,403,3,95,15,17,349,341,304,12,372,216,365,342,19,36,134,453,86,98,28,308,24,31,244,494,93,275,143,475,57,401,44,48,5,498,457,241,120,203,20,8,105,144,221,25,326,110,752,29,65,523,164,37,55,30,719,421,402,139,39,160,27,116,260,26,96,35,300,437,961,82,569,38,45,901,99,72,253,678,316 }, -{ 478,264,724,520,682,98,1,772,905,664,759,821,9,223,21,48,411,604,909,447,363,23,265,100,13,410,897,166,5,907,293,31,88,329,252,39,101,0,51,125,639,848,32,167,96,647,691,807,781,541,686,382,284,521,44,321,777,393,621,274,118,212,18,676,116,163,69,271,936,834,221,593,812,16,24,914,30,10,127,765,115,37,49,354,335,217,144,68,93,386,105,404,586,22,33,4,83,70,806,165,553,697,932,60,77,50,744,463,71,64,286,421,254,281,435,102,35,12,656,371,191,225,963,446,121,213,201,763 }, -{ 29,20,128,7,43,77,174,74,2,23,32,416,52,102,66,491,104,113,81,33,13,6,51,342,222,202,173,14,0,21,525,59,137,45,192,141,319,5,318,64,10,210,22,291,631,18,72,122,90,145,269,196,151,86,61,58,16,665,4,177,40,355,204,153,134,402,28,285,42,738,544,135,48,216,25,275,115,85,24,65,217,9,12,87,76,833,415,226,179,198,38,138,114,49,97,84,243,337,315,311,287,36,426,869,422,172,89,255,17,209,784,112,454,317,425,35,349,117,95,27,494,208,91,194,503,232,30,11 }, -{ 2,1,5,14,58,7,52,29,46,61,290,45,75,38,592,425,50,270,70,16,32,163,24,155,21,186,171,72,6,227,69,334,263,207,220,17,243,663,48,18,89,76,0,67,400,655,738,35,408,54,112,87,148,36,64,449,66,23,106,22,307,10,262,128,292,74,409,115,119,135,9,476,90,65,141,278,37,767,103,83,86,28,720,140,95,780,255,96,25,405,27,77,3,241,51,12,13,306,20,97,666,179,223,40,19,177,4,428,92,151,496,209,172,26,502,113,84,202,790,137,60,431,833,240,659,331,217,324 }, -{ 80,483,209,106,6,26,17,495,255,833,378,469,113,742,27,25,19,814,119,445,161,887,45,42,76,667,61,64,491,151,90,573,73,235,84,29,65,32,136,614,179,383,128,112,145,297,122,2,527,396,214,62,56,240,85,5,53,862,194,648,123,311,611,624,207,141,58,86,315,95,14,22,306,292,34,4,454,436,59,684,790,0,1,289,440,250,129,738,205,70,416,361,3,249,245,57,269,287,665,52,108,402,202,46,12,177,11,114,216,21,137,36,10,200,33,115,72,180,74,138,50,28,318,247,312,51,585,148 }, -{ 98,223,393,834,1,354,195,791,697,447,293,284,360,541,781,807,51,664,591,156,421,411,48,801,163,883,948,668,765,386,18,586,132,121,23,963,363,125,21,446,551,759,31,621,949,770,407,777,271,658,146,730,167,670,13,116,936,453,5,367,296,478,144,371,221,96,70,9,44,202,105,719,127,687,379,49,118,55,60,698,101,842,626,318,771,217,647,212,691,137,281,638,340,165,75,522,463,706,724,32,93,401,39,364,269,16,520,562,35,141,77,50,265,914,450,33,203,197,268,498,264,69,857,335,22,317,103,905 }, -{ 679,876,36,816,141,144,93,137,752,406,669,228,180,269,96,251,332,21,1,48,352,203,351,202,855,160,831,318,345,498,83,5,116,187,120,617,201,64,317,902,258,261,840,23,839,613,473,110,864,466,190,574,219,32,860,13,873,418,450,326,539,926,748,856,260,44,51,384,704,143,50,295,531,197,489,843,661,206,10,944,778,530,217,567,871,88,82,268,901,800,128,822,125,372,365,86,957,31,30,165,37,442,244,728,224,768,851,373,854,505,625,863,386,367,276,55,827,237,115,922,349,420,274,523,223,169,72,61 }, -{ 15,13,2,1,341,5,23,3,0,4,7,11,10,6,51,12,14,9,33,165,115,569,197,180,17,365,217,153,77,64,196,102,22,21,40,453,317,8,32,901,141,457,117,961,134,31,18,37,16,386,629,291,719,110,28,44,475,177,120,93,269,202,86,237,372,24,95,19,125,59,49,403,57,401,352,318,48,349,730,36,111,326,137,128,98,38,82,391,27,139,65,30,873,275,242,203,54,260,29,45,494,55,25,342,210,450,99,56,46,116,509,498,482,752,373,50,351,899,523,308,247,90,143,35,437,76,72,26 }, -{ 202,13,23,51,403,21,494,5,141,128,48,269,450,125,120,523,64,12,318,180,165,453,95,475,15,33,817,32,197,1,137,115,102,7,260,899,4,37,10,99,2,98,326,93,49,196,730,719,221,457,77,16,237,9,31,22,401,6,421,14,386,308,0,117,134,18,352,40,82,20,19,177,615,59,44,61,402,17,391,203,116,110,27,25,90,341,351,153,30,28,285,105,217,3,291,8,958,854,96,24,50,805,922,54,961,758,576,39,26,801,247,347,509,46,757,342,317,365,498,11,194,72,670,210,38,139,275,170 }, -{ 16,24,71,146,60,18,92,199,126,118,246,35,121,108,140,167,132,230,649,271,360,267,7,9,640,388,150,156,232,191,133,522,273,68,236,101,107,212,0,672,55,446,953,14,149,458,674,330,46,67,314,566,95,189,602,633,392,562,195,64,591,103,21,467,39,354,69,463,407,114,247,98,32,5,50,172,10,1,733,399,278,366,49,36,653,309,412,65,823,22,28,915,288,877,316,124,75,345,340,264,37,12,594,516,135,563,598,451,225,86,38,572,830,125,31,30,359,517,115,571,363,164,726,398,48,237,116,251 }, -{ 269,141,177,678,202,77,318,947,128,349,33,291,40,102,352,210,498,137,954,120,205,864,216,64,196,597,304,275,217,494,461,23,402,115,342,90,13,403,450,300,95,49,197,111,14,326,22,139,237,10,0,125,873,372,182,751,86,117,615,7,44,195,36,31,83,67,752,356,153,98,46,96,59,252,109,97,800,357,285,774,523,550,208,609,569,546,391,247,116,93,66,24,19,18,17,15,6,5,3,2,30,922,414,373,180,159,147,105,20,485,75,859,854,392,376,317,298,288,277,260,143,134,107,39,28,735,415,409 }, -{ 16,71,24,92,35,60,18,191,167,108,246,126,150,118,140,68,7,273,121,149,212,21,388,14,399,314,517,267,796,230,48,146,823,199,271,458,1,467,189,695,877,674,345,9,55,97,46,702,101,575,602,594,733,841,0,350,22,375,107,95,232,28,236,462,32,566,69,298,50,672,13,2,5,727,133,451,154,302,125,653,463,23,446,124,10,589,223,132,64,67,175,38,37,49,98,65,354,423,398,103,649,172,562,755,75,66,336,221,197,903,508,915,809,363,359,51,380,411,309,608,237,330,412,241,12,640,509,36 }, -{ 2,14,75,46,29,52,1,70,171,69,163,220,58,38,112,24,16,7,409,67,262,223,35,334,155,186,5,151,267,394,54,307,87,140,103,309,50,45,83,189,400,18,71,60,92,335,760,227,502,48,21,181,108,61,96,537,12,820,25,278,6,852,113,549,66,357,366,32,287,587,17,37,19,536,27,606,36,150,135,97,74,64,26,380,486,65,0,552,583,28,230,281,600,294,787,582,849,68,149,133,675,22,315,311,236,72,474,243,114,10,324,571,238,86,226,764,9,55,780,218,145,209,80,462,328,95,430,767 }, -{ 265,166,252,100,404,9,329,382,520,593,812,39,88,274,604,101,264,0,553,1,639,676,438,865,664,333,310,68,30,656,167,821,118,363,411,96,23,682,18,158,48,21,478,364,190,105,286,51,98,49,254,435,759,724,647,13,212,16,907,272,124,921,159,31,223,419,125,905,557,5,447,93,154,321,44,393,83,410,327,455,848,35,67,621,293,271,127,191,71,530,354,344,32,24,60,625,213,418,242,109,131,36,69,33,221,144,765,28,121,806,65,50,777,116,22,238,960,146,834,781,897,697,778,165,163,466,115,948 }, -{ 16,35,60,18,24,68,158,71,0,7,55,118,109,14,49,22,159,105,9,28,329,126,344,92,20,107,10,154,553,265,2,191,101,95,424,23,21,5,327,121,13,1,286,239,43,747,51,419,48,455,108,374,168,39,272,677,137,169,124,149,12,199,310,150,46,128,38,279,320,37,709,170,346,6,64,98,167,202,31,185,252,67,810,65,36,125,917,175,577,97,212,32,942,44,518,29,925,628,86,301,69,146,375,132,538,575,913,890,566,403,634,439,333,61,33,50,326,147,165,120,66,446,102,273,421,96,493,116 }, -{ 13,15,23,51,0,1,2,5,77,4,10,115,3,6,9,197,7,177,202,165,961,22,11,12,457,318,217,180,31,14,21,141,33,403,40,102,32,120,453,269,8,341,59,18,16,28,44,17,64,291,93,210,719,37,352,401,110,569,49,317,134,117,90,203,475,260,365,30,450,386,494,36,730,523,125,326,196,153,24,498,98,275,901,111,99,421,308,137,349,817,48,139,752,82,72,95,116,237,86,304,391,247,873,19,509,76,372,216,482,629,57,342,899,128,373,39,758,89,65,864,351,437,105,55,221,38,144,96 }, -{ 160,251,137,93,317,36,180,1,345,120,352,752,617,318,217,332,202,96,365,531,269,498,10,901,141,83,851,341,55,143,64,816,35,968,679,800,260,473,351,230,144,21,373,244,717,82,831,201,876,533,110,372,295,559,258,418,206,203,50,28,704,855,237,349,22,669,86,261,48,898,115,860,253,926,482,9,406,748,197,67,854,873,574,7,434,564,839,69,661,450,15,902,164,228,2,219,843,268,125,187,98,5,728,16,922,165,221,613,335,109,224,442,367,384,868,77,539,840,871,291,822,417,579,116,31,918,44,326 }, -{ 42,25,6,59,85,611,233,128,122,26,4,27,19,343,91,269,614,318,45,177,283,503,138,680,77,80,73,11,216,573,145,102,445,297,0,402,235,210,275,209,174,63,202,389,84,14,803,311,18,33,529,396,255,648,416,280,40,65,256,483,10,64,2,57,678,1,667,624,250,81,24,348,304,17,196,76,194,5,544,454,114,789,151,285,133,90,74,106,51,29,690,12,349,141,61,123,119,152,137,32,355,9,52,56,7,153,525,21,237,28,13,881,36,22,87,436,111,576,300,117,605,495,370,361,291,53,23,494 }, -{ 95,64,81,91,32,237,51,65,180,7,347,74,343,207,204,511,498,577,38,197,348,56,312,128,23,20,370,49,104,43,18,138,22,233,124,86,0,90,554,28,10,681,453,21,14,280,87,750,202,141,25,546,561,29,306,115,63,16,636,241,172,165,147,85,52,24,11,467,650,580,353,192,84,6,13,713,194,673,500,283,9,368,718,151,145,72,57,33,355,263,19,544,475,412,324,318,269,235,173,140,125,108,102,4,933,174,899,519,42,643,879,751,525,403,278,247,221,217,148,123,120,112,111,97,75,73,61,59 }, -{ 326,202,120,817,260,450,494,318,403,137,704,859,128,523,77,576,5,615,553,51,342,291,23,13,1,421,234,475,142,15,48,269,178,968,147,16,21,33,639,922,285,20,49,351,7,854,682,70,58,363,265,373,198,252,402,401,158,82,416,60,132,55,455,354,0,68,102,24,2,329,141,35,101,64,18,6,121,43,95,325,165,31,9,848,798,341,36,12,805,195,32,14,411,10,146,107,75,912,569,116,96,793,424,374,167,156,98,125,17,670,692,163,604,465,25,965,629,349,115,907,427,61,457,65,621,86,71,520 }, -{ 43,20,107,356,362,595,126,92,7,359,319,858,392,493,422,246,441,259,173,683,414,49,97,5,819,279,21,104,60,16,230,35,945,232,0,612,376,48,660,121,32,199,147,132,649,22,18,71,14,663,61,423,470,13,146,672,81,623,298,1,105,693,125,159,408,58,427,98,51,165,501,263,729,95,68,4,24,12,325,779,140,55,23,953,426,28,560,72,804,715,241,581,767,314,939,885,202,118,40,204,102,33,37,17,955,192,713,70,221,598,397,77,2,387,251,344,64,44,31,10,941,75,6,465,603,534,46,761 }, -{ 42,25,6,77,210,483,690,29,102,33,122,342,0,27,4,59,177,40,19,91,300,680,18,21,648,153,196,26,475,202,117,494,128,119,790,48,22,2,343,85,145,56,36,24,32,757,81,1,684,106,292,269,28,833,9,814,151,402,137,84,45,134,70,64,23,139,112,464,396,73,655,115,52,20,614,14,10,403,50,216,63,13,358,233,370,86,7,5,76,37,17,12,485,72,65,397,476,291,57,51,80,611,209,881,665,491,179,99,74,49,416,11,667,624,453,174,148,113,95,235,138,275,61,742,544,341,510,746 }, -{ 31,44,299,116,599,393,456,144,492,125,22,268,242,367,28,963,9,0,105,489,948,434,301,918,36,127,384,1,95,55,49,170,98,512,109,506,206,51,320,23,940,93,558,13,900,86,203,2,10,239,64,5,959,457,141,395,143,7,293,282,855,911,137,202,12,253,165,8,417,159,338,21,24,332,115,401,498,327,551,286,719,197,352,16,791,617,269,391,128,120,870,37,763,244,180,479,14,168,386,308,65,164,39,421,473,160,6,18,692,841,403,276,499,326,730,48,951,272,685,523,713,365,169,903,450,424,559,35 }, -{ 410,521,686,367,321,662,201,772,144,335,88,934,1,98,96,921,264,284,897,274,435,443,909,744,692,203,225,551,120,393,33,960,639,44,418,382,190,217,260,93,64,523,442,197,77,9,100,30,237,166,102,948,244,31,326,765,475,438,165,615,82,10,791,473,717,351,238,206,125,12,805,498,466,213,69,842,617,268,778,899,576,127,116,110,37,5,318,187,0,699,530,303,230,855,854,822,817,613,403,269,39,35,32,21,2,489,141,23,291,704,160,478,131,966,539,905,851,768,730,352,272,247,180,175,137,36,22,922 }, -{ 878,142,178,234,786,132,195,929,416,202,146,147,77,639,522,259,687,167,271,450,481,771,626,212,590,465,49,534,455,427,198,5,315,407,120,0,360,318,48,640,325,23,125,329,113,35,883,22,562,163,346,70,581,13,21,31,98,591,1,61,121,199,107,798,279,150,818,159,20,260,379,668,354,446,44,557,494,269,43,32,10,371,293,95,55,105,141,386,58,33,344,884,64,158,467,116,768,102,93,18,16,362,342,817,60,30,518,191,296,128,711,99,223,39,535,87,170,291,777,97,51,75,402,783,7,156,363,347 }, -{ 254,39,131,578,272,9,716,310,827,829,0,224,518,166,616,333,613,846,228,938,101,30,49,252,105,890,100,219,404,406,371,159,190,265,98,286,158,688,127,68,438,385,455,931,327,910,31,242,856,1,187,709,28,924,737,258,23,329,16,21,557,51,137,96,656,625,125,44,442,116,24,18,48,35,36,13,160,88,65,731,124,863,274,22,95,293,344,395,5,93,109,553,816,128,299,627,530,916,364,761,836,301,154,284,871,118,202,676,201,144,83,276,165,419,944,456,203,10,55,512,32,7,320,724,520,60,115,593 }, -{ 699,854,230,855,473,450,831,704,351,137,217,498,352,800,251,202,160,144,253,203,201,418,206,317,332,752,443,141,1,96,36,180,326,82,822,372,93,244,83,494,335,35,365,817,69,859,237,689,898,21,617,864,318,901,44,702,384,922,954,349,345,341,98,10,48,64,824,367,187,128,295,873,284,120,67,531,579,269,7,86,5,22,678,268,2,261,840,927,957,930,28,735,13,291,31,559,947,116,143,30,851,669,373,723,23,16,260,959,661,125,868,717,403,9,748,437,110,50,213,115,223,539,55,615,466,946,285,533 }, -{ 403,475,202,453,77,318,51,402,494,23,13,33,342,102,128,576,269,141,137,450,120,899,421,523,196,4,117,40,90,275,153,365,349,59,177,291,65,210,64,217,84,0,134,670,15,372,95,197,401,817,1,180,805,341,237,96,260,194,3,285,139,114,99,18,873,326,615,503,393,386,317,293,125,24,11,389,165,70,216,800,752,745,730,719,697,678,657,277,115,108,87,83,69,36,32,21,859,111,457,901,788,323,300,283,266,130,118,86,76,57,12,352,351,9,7,6,2,842,725,541,361,329,312,221,168,124,49,945 }, -{ 144,23,291,268,197,182,202,116,98,44,264,284,415,96,70,100,125,367,141,203,39,110,905,411,1,107,93,363,120,180,296,658,82,310,447,692,897,238,361,190,77,664,260,105,88,520,48,478,166,682,118,576,340,30,18,966,51,865,13,349,379,403,795,551,921,326,687,301,254,581,223,101,676,457,404,156,812,195,242,213,208,9,165,364,323,269,65,60,615,498,21,765,621,271,137,128,917,914,890,855,481,217,154,102,68,232,883,593,523,354,131,948,318,219,691,842,846,771,272,252,0,626,382,149,87,824,822,791 }, -{ 15,23,13,77,1,51,202,120,180,115,141,260,5,0,21,9,137,450,269,128,12,2,318,365,7,197,326,351,48,102,341,177,342,352,523,217,291,403,165,6,64,110,32,373,4,317,18,16,37,36,901,22,14,10,494,90,457,28,854,453,82,24,386,817,40,33,308,8,11,475,401,752,96,922,93,3,244,30,275,719,730,349,210,421,86,160,99,17,898,285,31,961,50,39,569,44,221,59,704,49,117,35,372,237,153,55,143,899,391,253,203,116,134,615,576,144,196,402,65,125,629,98,247,482,83,20,873,509 }, -{ 0,95,18,577,32,207,64,193,29,784,65,887,715,102,52,61,671,138,49,91,74,180,104,701,237,693,474,280,403,241,804,847,22,263,6,174,344,583,453,862,475,77,85,643,500,397,38,37,306,498,494,312,289,2,81,33,5,681,942,510,370,27,283,422,316,192,25,155,347,84,901,319,113,576,24,835,355,348,43,933,814,353,72,194,240,204,42,19,298,650,523,125,86,718,173,247,51,721,389,124,879,490,707,291,153,141,58,54,17,889,202,97,402,1,546,342,134,482,36,511,421,805,750,673,426,196,120,117 }, -{ 101,9,0,252,68,364,166,100,265,124,154,329,39,16,419,212,24,404,71,118,191,676,158,35,88,18,274,553,520,382,65,562,694,28,962,677,671,60,55,30,333,302,706,149,167,604,375,49,109,857,21,703,967,917,865,1,264,593,806,344,310,438,346,190,48,254,96,105,439,23,22,701,812,13,125,175,777,67,925,51,159,656,83,589,570,7,455,95,628,289,108,98,31,286,10,5,221,429,69,810,826,336,36,435,92,131,557,639,722,32,168,793,638,272,273,14,44,128,126,114,50,170,146,37,238,127,484,634 }, -{ 16,24,191,71,167,118,212,18,35,68,149,375,101,108,302,589,60,92,755,9,21,562,674,124,154,246,0,273,48,1,126,363,398,411,55,7,447,146,458,350,841,695,140,65,818,150,388,199,628,345,478,264,22,13,189,647,95,271,602,32,69,823,267,121,28,50,67,796,14,346,23,650,49,175,5,621,520,664,51,882,399,10,903,133,815,777,252,98,100,197,649,64,115,781,46,847,314,517,566,221,509,223,103,575,12,953,125,114,236,230,354,37,336,2,39,96,107,308,640,749,463,936,165,724,462,886,604,237 }, -{ 69,14,2,24,46,267,71,189,38,29,67,278,52,35,135,1,103,108,149,75,309,16,388,83,150,7,60,87,18,236,74,66,220,335,68,251,262,6,50,140,582,357,451,324,133,28,226,366,238,516,172,565,65,36,25,486,114,70,336,0,92,55,594,5,443,458,273,175,54,418,96,571,97,394,906,733,21,26,124,380,12,118,9,218,58,22,154,641,606,398,86,230,48,222,160,37,19,705,42,596,331,550,112,10,412,138,95,45,399,181,294,171,163,145,64,462,32,831,600,603,345,696,517,711,602,545,894,302 }, -{ 13,23,1,4,115,51,2,0,5,3,11,180,33,7,77,10,15,9,341,141,6,365,12,102,217,202,197,317,40,22,165,269,352,318,59,403,64,901,17,21,14,32,752,28,31,49,177,308,457,401,498,453,8,18,873,128,291,494,16,125,117,475,569,196,95,509,36,93,237,153,24,98,372,137,961,386,349,37,139,44,30,326,210,134,342,48,719,482,391,90,120,55,111,86,110,247,203,39,421,116,523,304,260,450,19,546,629,65,105,734,730,27,275,57,468,402,758,143,35,864,351,38,54,144,244,216,300,373 }, -{ 447,1,698,411,125,98,31,21,363,5,919,848,48,44,691,144,759,293,225,914,459,120,13,478,354,156,4,116,922,32,23,127,64,668,163,857,371,202,49,82,30,839,284,586,70,17,223,93,865,664,621,340,165,87,51,39,421,321,260,897,110,551,88,724,330,264,335,318,221,77,3,2,821,772,744,442,190,242,195,634,520,360,201,682,963,916,898,854,685,372,351,349,291,269,217,180,141,105,102,96,95,75,59,40,686,622,949,938,687,658,228,909,100,931,867,638,446,407,761,558,463,456,342,310,237,197,166,90 }, -{ 854,351,180,82,217,352,141,752,898,317,15,244,1,922,21,36,10,64,77,115,260,372,365,35,110,22,291,28,13,341,40,48,120,901,349,4,864,5,661,32,23,160,304,498,237,137,33,11,269,51,202,143,373,93,144,59,164,96,326,98,83,450,318,165,203,102,253,230,55,45,197,2,247,201,67,128,579,17,125,86,76,177,69,37,57,0,16,31,44,728,117,72,27,9,52,116,251,482,342,817,457,7,523,811,367,559,50,719,12,134,961,717,494,187,127,105,49,3,90,873,569,899,418,196,18,316,6,61 }, -{ 13,1,5,0,4,10,33,23,9,2,82,11,3,77,120,6,21,7,40,12,102,8,51,31,117,260,351,134,22,16,153,110,64,450,93,32,196,457,523,115,28,165,18,719,98,59,44,730,30,17,326,386,116,197,898,854,217,961,180,177,291,36,49,817,125,48,342,95,141,90,317,341,922,57,758,202,373,899,139,14,365,352,349,24,203,37,372,901,801,615,128,275,318,269,210,453,39,144,111,237,401,391,72,55,137,105,752,403,86,38,569,494,642,704,99,475,509,498,661,304,811,277,61,247,65,873,308,551 }, -{ 51,403,475,23,13,21,12,494,453,115,99,1,5,523,817,202,7,421,49,22,64,450,899,95,221,32,0,120,308,730,6,180,37,141,48,2,20,10,401,128,44,31,14,753,125,402,3,719,260,11,9,318,801,40,33,19,17,4,386,289,237,105,90,86,16,457,326,36,361,269,170,102,76,39,38,30,165,26,25,961,341,958,576,365,247,240,197,117,98,89,77,61,35,34,350,137,93,82,805,782,756,701,671,670,569,503,484,468,413,405,352,317,241,217,216,214,208,179,134,8,281,316,270,144,83,68,945,901 }, -{ 752,180,352,864,498,317,141,217,237,39,365,115,901,30,88,930,579,230,0,83,101,9,197,372,482,873,128,546,64,100,341,36,1,166,437,927,702,35,213,96,23,13,175,285,68,252,269,349,251,28,689,190,69,868,443,735,304,21,562,723,457,137,399,759,509,244,831,419,10,274,77,321,539,165,818,67,530,201,219,194,228,840,418,345,410,93,131,144,86,570,143,48,154,854,247,646,224,866,49,12,699,669,402,596,954,212,203,208,160,158,800,31,177,694,358,24,117,51,957,406,382,202,22,346,134,7,438,16 }, -{ 16,24,35,71,7,0,18,28,60,14,22,158,109,68,154,118,124,92,168,2,55,149,159,49,747,185,169,424,1,108,105,95,10,577,150,344,175,126,20,239,65,9,677,69,5,67,302,6,12,21,671,46,329,38,107,97,164,23,51,43,286,375,170,48,50,125,140,327,64,320,39,420,29,36,701,374,289,83,101,273,570,37,143,32,13,347,137,191,345,189,230,86,66,553,265,638,128,202,429,455,252,54,272,703,403,246,535,103,52,221,421,654,398,279,98,194,121,114,310,336,467,584,298,165,25,453,346,96 }, -{ 15,341,23,13,0,51,77,1,141,202,33,4,137,9,260,115,120,180,102,269,351,40,11,291,5,318,82,7,2,21,10,901,197,12,22,128,854,922,165,450,16,117,352,59,8,177,217,28,3,64,457,349,90,32,36,403,37,110,18,30,14,401,6,17,523,134,898,365,317,453,48,752,57,31,719,386,817,308,196,421,153,93,24,244,139,86,143,475,730,569,39,99,494,961,373,55,642,44,49,498,285,96,210,253,275,661,125,342,35,237,203,372,95,899,326,144,402,247,629,160,98,391,61,304,576,221,216,208 }, -{ 68,35,24,149,18,71,16,118,189,108,14,7,101,154,0,9,230,175,140,336,69,124,65,267,28,114,67,133,302,46,55,398,251,375,345,2,1,236,458,103,388,83,399,596,60,50,283,38,92,346,732,412,602,36,22,212,309,21,273,39,650,722,246,12,109,48,172,429,29,218,191,906,75,52,364,443,5,86,167,547,54,10,135,252,49,64,238,95,330,37,278,723,96,23,705,516,520,439,628,891,13,51,366,565,158,915,930,232,562,30,868,6,335,637,696,150,952,194,451,484,32,220,100,694,702,886,389,168 }, -{ 308,13,197,115,391,165,546,509,125,629,569,237,749,468,23,9,558,28,903,338,217,801,734,317,352,401,740,254,341,49,36,180,22,386,51,39,159,901,873,95,365,490,506,530,168,961,498,131,166,438,64,482,247,219,579,83,185,109,93,752,656,187,345,439,613,857,457,688,316,101,86,21,158,627,258,843,89,829,637,312,10,55,679,105,967,224,170,251,574,332,406,221,175,228,48,758,902,261,960,505,44,31,876,116,37,12,868,840,72,424,347,1,371,98,15,518,274,141,32,827,333,77,190,892,816,272,253,143 }, -{ 90,64,217,32,115,128,141,216,77,312,86,597,95,59,4,33,247,875,13,172,352,197,147,237,177,288,102,437,210,22,97,5,194,137,202,37,57,11,182,208,153,76,61,14,304,134,117,65,40,751,23,291,947,10,864,342,196,21,362,49,356,178,60,45,874,317,0,54,48,612,165,107,51,259,588,752,324,192,819,298,275,180,20,678,372,307,289,173,43,120,112,415,285,207,164,72,36,35,707,44,7,359,89,46,802,414,156,2,789,729,579,168,123,104,98,92,55,24,712,524,125,87,70,66,470,387,465,148 }, -{ 1,22,28,105,36,95,67,49,2,55,239,0,5,12,83,170,50,9,159,312,86,109,7,114,320,21,208,14,103,69,35,168,301,31,164,64,194,23,892,127,169,323,160,654,98,51,141,65,48,158,10,96,143,133,37,505,13,218,584,38,6,46,751,54,115,24,185,244,347,128,424,44,824,202,253,503,597,16,269,32,237,238,39,137,286,180,512,420,3,352,740,533,29,646,165,638,251,242,318,338,623,175,125,4,18,776,395,797,480,285,713,197,531,116,532,30,928,68,341,401,293,371,99,933,124,789,844,272 }, -{ 18,9,16,101,159,68,252,35,24,105,0,60,310,265,49,39,890,329,320,71,455,118,272,557,7,55,167,28,327,121,286,1,137,170,98,364,271,100,518,333,301,65,14,520,51,23,254,13,212,553,21,604,5,363,109,202,938,128,239,709,30,31,127,95,419,64,22,125,578,846,132,191,616,2,154,158,146,124,371,48,647,395,92,67,621,12,242,627,10,916,411,344,424,116,44,403,32,108,512,338,446,737,374,326,166,86,149,793,36,120,688,421,69,827,318,93,293,126,346,731,20,463,37,260,639,450,848,264 }, -{ 129,123,249,618,214,257,460,205,769,184,17,5,245,162,106,45,90,119,76,183,128,2,209,229,61,80,179,497,6,59,130,1,64,202,99,3,152,27,77,19,710,14,207,84,4,306,40,12,29,141,255,57,240,62,26,452,10,790,58,25,269,177,619,556,21,524,38,266,32,742,217,56,136,86,102,519,7,137,115,432,318,33,292,311,11,151,22,402,48,0,216,51,37,378,288,23,210,54,655,667,381,95,36,34,113,65,72,194,403,139,50,305,111,361,504,483,46,833,285,15,494,180,475,317,112,16,263,275 }, -{ 51,719,23,453,899,457,730,13,475,386,670,4,523,15,401,961,11,12,196,99,153,403,32,3,57,117,21,33,450,59,775,165,40,115,130,421,236,77,308,202,128,120,134,758,108,6,65,391,217,90,64,125,177,197,0,361,5,34,26,260,2,19,1,629,300,183,47,216,54,141,328,817,78,123,22,17,180,342,801,7,95,27,37,241,210,214,269,221,14,10,56,237,275,242,194,494,317,558,412,25,743,73,38,247,48,102,28,488,381,318,9,82,29,326,291,711,288,137,53,304,129,46,277,402,339,283,266,24 }, -{ 173,192,66,204,104,74,636,560,426,825,20,7,43,289,750,707,712,97,861,414,214,348,65,715,81,500,90,138,95,64,835,32,312,174,319,22,526,194,280,874,792,52,0,580,91,681,232,29,6,819,330,889,673,879,5,888,86,77,568,519,422,85,376,288,135,729,387,172,370,2,222,33,38,61,10,21,784,355,49,353,107,249,324,25,69,24,18,42,36,577,226,28,356,102,140,76,448,59,92,751,207,115,671,40,325,4,237,31,359,247,524,343,180,470,145,147,397,16,392,153,117,13,120,26,177,597,125,45 }, -{ 23,51,13,202,21,141,5,1,165,120,269,180,48,12,197,32,15,2,318,115,403,125,128,260,450,137,7,9,523,64,82,33,352,93,386,326,0,6,308,4,453,401,421,102,237,37,457,475,31,14,110,351,77,16,3,221,341,391,99,494,30,44,18,117,8,11,817,203,98,730,17,217,39,719,153,899,373,40,196,24,10,61,498,402,72,365,509,50,90,854,569,317,116,28,144,247,134,19,291,59,96,752,45,285,961,89,615,922,342,58,49,25,35,36,22,349,177,20,546,241,57,670,88,54,29,105,576,65 }, -{ 200,78,34,322,472,27,390,714,161,136,19,59,283,444,250,128,236,176,862,108,47,62,527,14,57,412,53,813,73,3,381,17,453,711,56,585,210,4,46,361,77,196,440,26,65,129,51,153,130,432,383,730,216,183,297,803,690,402,401,45,469,202,133,389,123,529,5,495,162,33,90,275,318,754,194,12,378,177,291,32,257,102,38,719,117,184,114,789,480,13,23,11,106,48,503,814,2,61,629,84,684,54,475,245,21,657,555,231,40,678,152,99,300,507,137,119,80,0,436,113,457,369,650,6,403,86,22,523 }, -{ 347,33,204,498,66,546,681,56,174,5,426,95,135,348,97,172,353,864,49,22,928,923,873,808,73,263,241,10,568,370,27,197,180,77,554,207,81,580,102,21,42,237,368,32,751,526,192,134,117,19,0,350,86,63,715,448,468,115,380,123,76,25,4,29,64,44,31,36,6,91,7,511,40,645,387,85,74,861,408,298,80,736,69,173,872,13,501,355,108,712,138,153,87,61,28,17,901,18,467,72,673,59,620,343,232,161,233,312,800,509,324,278,125,45,30,14,650,636,90,3,451,415,577,500,65,561,165,70 }, -{ 131,224,219,187,385,442,258,836,371,944,871,908,737,924,254,127,98,31,827,716,574,44,39,829,116,201,613,276,839,616,242,860,926,284,137,228,395,144,293,36,96,9,1,578,406,30,456,0,299,567,93,21,13,125,202,23,843,160,166,49,51,64,856,105,846,902,203,761,935,938,662,492,128,295,159,83,48,916,438,268,190,100,115,269,5,403,310,272,318,489,367,110,77,141,931,28,10,531,55,326,165,918,688,32,86,576,22,699,88,158,120,717,530,261,244,143,421,341,434,217,2,512,197,960,625,164,37,333 }, -{ 1,4,5,2,13,180,3,15,7,141,6,115,23,352,901,341,51,0,217,317,197,77,752,365,33,21,11,165,12,269,32,9,202,102,291,177,318,93,40,372,247,10,137,31,349,498,22,120,8,308,403,44,17,873,569,110,401,203,116,59,125,36,457,28,326,196,48,304,14,37,494,386,373,98,144,134,153,128,90,64,117,475,758,260,509,72,18,16,206,55,49,523,86,237,210,95,961,629,421,482,453,30,391,253,450,951,719,342,139,638,730,576,39,864,275,268,579,241,19,82,221,24,546,437,89,57,127,811 }, -{ 370,91,681,636,397,718,510,74,81,240,355,66,84,582,278,289,214,511,701,138,90,18,782,6,104,288,5,65,64,32,693,117,247,77,63,192,56,0,814,306,750,673,312,233,85,40,453,847,671,415,11,643,317,207,134,72,61,42,33,102,4,942,519,343,123,115,27,1,86,25,348,249,22,580,537,461,396,352,153,75,484,784,475,403,304,194,21,10,235,29,3,193,119,583,287,196,114,76,59,52,319,256,124,26,23,13,874,579,389,610,462,302,238,17,710,817,597,353,129,96,51,48,217,164,89,835,804,751 }, -{ 15,13,23,4,197,51,165,1,2,120,180,341,0,260,386,5,8,82,12,7,9,3,141,450,317,153,11,10,391,217,6,351,326,115,64,77,14,457,117,901,498,523,854,509,291,110,134,730,401,758,33,961,237,352,22,202,898,125,922,93,21,365,308,196,31,44,615,269,128,817,99,453,801,28,203,899,116,373,873,752,629,18,40,55,349,137,98,37,318,372,403,36,49,475,569,32,38,86,546,95,16,661,143,704,102,719,30,342,59,39,35,17,642,304,494,482,48,24,638,144,177,300,194,139,958,29,54,492 }, -{ 32,76,292,2,5,476,45,214,72,29,1,241,14,519,464,460,21,179,48,129,290,90,17,710,148,205,123,263,249,50,58,358,52,425,186,243,408,46,257,618,207,38,245,184,89,227,155,769,162,270,171,350,3,7,288,119,61,6,106,57,316,64,54,400,449,128,183,229,255,75,4,141,36,496,115,152,524,655,99,209,720,334,497,62,12,202,59,77,37,86,10,405,0,56,51,221,130,666,23,25,40,592,22,181,237,269,11,247,432,137,16,217,454,84,27,452,428,24,663,619,19,513,318,177,659,26,67,341 }, -{ 13,569,115,165,509,197,629,734,17,873,23,659,106,457,180,45,41,32,961,901,38,536,341,428,62,155,587,474,391,54,21,431,99,546,255,51,243,528,308,365,136,241,37,468,405,89,123,129,14,482,181,2,211,401,139,72,12,148,542,719,221,117,794,214,76,749,498,449,350,317,292,157,743,540,29,758,328,152,552,188,162,11,3,119,720,488,339,770,413,237,227,179,50,248,48,209,697,313,90,741,476,130,4,477,128,1,773,519,277,40,421,507,46,266,57,249,33,245,361,137,153,202,453,369,471,64,133,358 }, -{ 68,101,24,35,71,16,154,124,9,0,149,118,175,65,302,18,108,375,346,28,55,92,252,364,212,429,191,7,439,60,694,39,520,14,398,806,100,22,109,329,166,167,484,273,336,604,67,69,419,189,562,21,826,589,1,701,695,345,95,140,230,265,246,49,10,264,48,158,114,637,755,168,103,917,133,46,628,2,64,722,126,650,399,88,404,535,125,768,570,289,150,458,13,706,83,30,50,36,388,32,420,23,267,12,185,5,882,674,818,96,169,51,676,925,37,363,283,602,86,105,38,221,333,967,159,286,942,553 }, -{ 0,9,68,35,1,65,101,230,69,28,124,23,83,39,141,154,67,13,21,352,212,217,51,30,100,252,88,16,336,115,48,175,864,103,24,317,189,5,180,114,166,128,96,443,36,399,10,12,238,64,329,562,264,478,177,32,18,265,752,77,55,22,321,372,291,218,160,702,149,520,167,50,437,304,202,498,247,137,118,269,99,49,596,365,589,221,759,486,349,197,165,382,346,323,410,2,664,480,223,419,213,777,604,433,418,75,7,4,335,482,15,547,532,37,251,363,237,125,936,72,143,755,341,553,308,190,109,201 }, -{ 909,265,100,410,382,812,88,593,321,213,1,30,252,166,676,639,264,435,466,230,689,39,9,48,724,352,478,21,98,553,96,329,190,223,101,23,274,51,217,13,83,5,921,310,699,438,795,125,69,821,905,530,293,752,759,35,36,656,557,128,144,393,443,520,0,541,284,521,604,137,419,32,682,831,141,455,317,418,664,855,854,251,31,165,772,221,404,386,93,201,180,203,33,686,421,335,539,840,115,55,127,44,957,160,285,158,28,344,68,67,367,77,202,345,254,697,102,669,562,897,807,702,765,286,10,351,64,269 }, -{ 113,61,904,43,0,204,848,453,389,315,788,198,174,5,22,899,222,59,37,102,33,207,422,290,288,128,97,329,306,46,31,30,77,470,817,523,159,58,40,942,122,65,725,690,324,291,104,64,263,450,426,20,54,337,304,247,205,196,153,134,117,105,95,49,408,757,615,351,326,194,115,82,28,18,9,177,137,32,350,887,372,347,331,325,217,90,48,2,701,344,342,320,316,158,317,804,376,341,819,319,849,685,666,600,580,579,553,501,498,403,392,365,357,349,330,301,270,262,242,237,180,112,76,44,39,36,7,147 }, -{ 24,16,141,71,18,0,352,269,75,108,140,7,60,35,330,12,199,217,65,9,486,28,498,864,87,246,64,92,68,50,318,267,126,954,118,115,55,230,70,5,146,177,950,545,13,372,197,752,271,101,98,14,133,77,180,641,349,317,99,36,726,458,23,537,487,156,102,437,22,10,622,165,21,563,516,832,202,2,341,149,48,565,86,457,304,273,220,237,116,44,674,526,117,100,39,33,120,49,37,365,360,830,58,137,103,291,135,522,181,166,121,88,54,51,412,167,284,223,46,15,394,1,696,852,463,361,264,212 }, -{ 271,167,121,60,199,146,191,463,18,446,212,132,575,126,598,354,407,16,955,727,640,566,1,608,195,35,562,279,522,21,48,107,98,71,118,783,223,493,150,467,68,589,24,5,360,781,92,156,363,591,411,668,447,55,13,534,818,101,23,9,108,346,581,647,777,590,49,621,0,259,125,362,936,664,939,7,273,28,31,22,51,163,32,807,10,535,834,221,147,520,246,33,293,541,50,37,586,14,815,375,393,4,116,12,105,96,70,2,44,77,39,93,252,149,281,441,46,158,75,61,759,154,97,649,95,423,364,140 }, -{ 15,115,217,317,365,341,180,13,141,33,23,260,120,4,82,110,102,351,51,40,854,77,372,137,352,21,64,1,5,32,36,10,197,117,898,752,11,901,269,202,922,165,59,9,160,244,0,661,373,134,2,143,22,48,457,349,153,253,450,12,386,196,318,482,247,326,128,308,177,55,72,90,498,523,7,125,961,719,93,28,37,86,3,291,811,509,237,96,57,873,16,437,89,579,391,730,111,203,31,864,18,6,615,35,468,210,216,14,569,275,139,164,304,17,342,76,899,403,221,494,642,316,817,251,30,531,717,95 }, -{ 173,97,356,7,43,387,107,426,104,729,414,359,232,20,560,392,595,885,858,861,707,819,66,81,612,5,49,22,362,319,126,192,230,32,660,330,0,74,357,92,246,147,784,715,14,324,298,172,470,879,95,263,2,422,259,16,427,38,314,207,683,61,376,140,21,681,35,6,29,397,91,60,18,241,10,279,28,64,52,77,24,830,500,493,31,636,33,37,501,12,4,86,779,204,135,58,577,370,65,568,441,40,199,48,526,13,98,581,712,105,534,125,325,17,102,72,44,347,750,138,120,70,59,46,465,25,45,30 }, -{ 15,23,13,82,120,51,110,93,31,33,116,98,95,196,453,4,165,40,197,260,117,0,386,2,180,217,12,1,351,11,77,5,8,134,102,9,141,326,457,115,341,291,3,153,10,401,21,450,317,523,854,202,352,14,7,391,898,6,64,961,373,719,22,125,475,901,28,922,615,403,18,177,269,498,203,237,44,349,99,758,509,32,30,318,128,37,817,16,899,629,308,57,365,670,36,421,49,139,275,661,730,111,569,137,24,39,48,86,704,144,801,752,35,17,65,109,494,342,558,38,372,551,221,216,170,46,55,638 }, -{ 100,9,120,260,30,827,795,373,264,77,137,166,202,326,127,578,1,39,254,82,704,318,217,450,18,101,395,737,351,0,731,291,265,317,156,349,341,31,716,105,102,93,141,197,55,33,968,98,269,5,296,128,478,131,24,851,252,371,342,32,859,938,921,44,616,411,403,404,385,924,144,109,165,40,456,274,180,10,494,836,16,512,854,410,299,195,110,68,28,7,518,442,36,438,286,242,13,244,167,96,363,850,379,656,521,284,95,523,125,64,658,615,340,116,67,922,212,115,447,187,937,935,916,724,936,856,822,372 }, -{ 14,24,2,67,69,46,28,108,1,65,38,83,7,398,18,0,124,154,114,103,36,50,267,133,29,55,236,189,149,35,16,547,52,68,429,175,283,71,336,9,160,118,309,22,302,251,109,458,646,75,6,140,388,86,135,484,278,412,12,596,5,389,650,172,531,54,238,60,218,420,602,96,21,66,208,87,886,220,194,505,782,150,185,169,92,64,10,891,168,95,25,101,797,335,289,533,570,532,74,906,37,230,48,357,49,273,262,323,366,696,346,158,23,516,443,39,32,799,70,565,58,705,137,51,13,439,418,128 }, -{ 66,69,14,267,189,24,71,7,150,172,140,97,149,16,60,380,135,462,2,35,67,74,388,92,38,18,451,278,108,29,83,68,251,6,357,52,46,1,230,443,36,324,423,298,458,65,273,28,336,517,314,823,232,192,398,330,711,118,594,103,87,0,75,565,175,55,335,399,705,124,22,86,25,21,603,448,906,568,204,95,48,12,50,236,5,563,309,43,550,10,154,138,64,32,345,302,37,596,893,20,133,572,54,467,114,126,607,42,26,160,246,220,733,375,809,226,429,526,501,723,9,895,49,808,70,500,602,915 }, -{ 15,1,13,5,2,341,4,365,3,0,23,10,11,7,12,180,6,117,9,17,33,21,134,115,77,14,32,217,197,102,317,165,8,141,457,153,64,40,901,37,51,128,22,961,569,291,202,196,16,31,269,177,352,36,137,38,873,372,28,93,19,351,59,55,349,111,44,509,342,498,752,18,48,125,318,99,304,139,120,386,143,237,116,308,72,401,86,391,110,30,95,54,629,27,482,210,76,45,164,24,89,79,29,90,453,403,25,719,57,275,203,216,82,98,41,758,579,277,247,46,260,49,523,244,26,285,326,144 }, -{ 1,22,12,5,28,36,0,21,2,86,49,48,95,55,37,23,10,50,9,7,96,13,202,32,51,105,14,54,208,168,65,115,128,24,83,16,160,67,4,141,137,31,64,99,318,3,269,194,109,6,323,18,164,159,17,114,35,170,239,281,402,285,180,11,238,745,69,584,103,197,165,480,158,45,341,181,169,403,77,244,44,46,38,218,143,98,433,289,401,30,223,58,717,125,657,503,352,217,851,33,177,185,29,946,597,757,708,39,365,312,317,72,800,253,75,789,102,678,124,418,133,237,59,956,90,127,308,430 }, -{ 123,605,630,63,108,736,444,65,650,368,19,561,619,389,122,216,25,114,183,177,26,53,27,813,133,42,102,194,84,445,249,899,297,56,421,349,90,401,33,597,588,250,137,78,73,130,11,730,51,283,45,524,629,235,59,57,14,141,196,153,32,40,343,255,719,134,117,467,304,119,76,17,13,0,152,6,436,77,390,4,323,511,678,475,457,136,64,594,342,23,403,256,12,129,503,218,208,86,62,61,5,416,233,372,52,3,469,184,275,381,106,947,789,554,214,112,680,450,95,309,217,18,9,529,432,291,269,80 }, -{ 127,39,9,254,98,395,371,31,0,385,836,44,1,30,299,284,100,166,116,578,131,187,272,28,935,49,293,276,21,125,23,16,219,310,599,51,737,442,827,48,242,616,137,18,101,908,5,144,13,846,24,265,456,716,35,512,96,252,93,88,202,22,201,68,159,36,158,7,77,55,224,924,938,141,492,203,128,190,688,269,518,258,32,333,64,37,318,228,2,65,829,326,274,244,761,165,12,115,67,286,120,931,217,110,367,404,105,839,33,102,567,83,268,916,662,95,438,14,86,50,944,109,574,557,69,327,625,10 }, -{ 2,29,61,45,151,6,655,112,207,52,25,425,32,833,76,7,70,106,1,113,14,119,292,790,58,26,72,5,887,64,209,128,17,90,255,315,66,19,145,4,186,306,243,476,115,59,483,27,77,74,21,177,311,38,87,86,40,263,141,738,46,290,36,23,148,454,287,10,240,95,42,22,84,16,137,0,179,202,135,33,631,491,814,75,227,51,269,89,50,210,65,214,20,12,80,222,48,318,24,28,49,13,11,216,18,155,358,102,99,56,464,122,37,644,138,549,710,54,180,337,205,117,496,67,172,869,123,720 }, -{ 2,17,5,29,27,3,6,401,45,58,51,26,23,19,53,52,14,34,46,453,151,133,366,13,61,236,50,218,114,1,73,99,308,487,603,108,21,25,181,670,287,421,297,80,115,396,48,74,56,137,171,412,764,445,202,38,281,62,457,42,65,629,516,480,475,341,113,549,64,573,600,386,57,403,894,250,106,730,54,436,651,491,86,145,12,334,208,155,832,128,328,614,361,262,165,283,84,32,719,323,745,200,90,141,37,36,711,657,631,67,760,754,583,739,635,569,7,594,488,315,161,10,285,59,402,758,243,430 }, -{ 22,170,31,301,127,1,98,44,28,36,239,105,55,299,512,293,86,395,116,685,242,841,9,95,125,338,599,900,2,0,5,654,23,320,169,109,13,456,870,49,64,185,763,10,51,7,237,12,141,144,164,479,143,965,312,35,137,923,21,268,115,14,933,492,128,168,393,284,506,67,286,762,276,83,37,244,6,114,202,160,180,928,24,352,634,194,367,201,197,159,308,165,269,253,558,844,401,538,48,65,208,272,935,391,584,50,420,341,365,131,203,913,318,16,498,3,489,327,96,4,457,374,317,892,386,32,434,638 }, -{ 14,21,50,48,5,2,1,32,270,46,38,290,76,72,45,155,54,17,263,181,408,207,425,281,29,430,221,67,36,96,292,89,449,52,428,37,476,513,241,83,103,119,0,171,7,541,720,528,3,12,10,24,227,148,22,58,179,61,536,502,214,243,655,6,413,90,9,350,23,218,106,51,16,86,69,129,65,186,28,133,115,114,99,431,552,400,760,794,464,64,474,128,433,123,328,460,18,405,137,487,306,84,108,477,245,710,35,236,205,4,13,787,27,238,308,587,309,770,141,540,19,56,790,240,95,223,488,202 }, -{ 17,119,106,378,240,383,136,84,62,80,306,790,56,504,742,3,440,207,209,128,255,483,123,45,5,667,61,32,57,64,179,27,129,14,205,548,297,4,245,2,214,311,141,90,11,76,833,655,184,151,29,361,59,469,152,249,26,38,162,19,58,215,328,257,73,495,161,34,54,229,269,202,250,266,292,21,12,402,514,555,216,113,194,887,130,1,445,503,507,183,6,25,318,237,186,72,52,814,710,618,99,10,86,211,148,452,263,243,65,137,37,40,41,23,36,33,155,497,13,403,53,95,313,227,494,180,77,738 }, -{ 13,1,2,15,23,5,115,0,51,10,4,3,6,341,7,11,365,217,180,317,9,33,197,77,165,40,22,12,14,102,64,141,117,153,196,453,457,8,202,901,17,21,269,18,128,28,125,569,31,386,59,318,32,16,134,349,352,291,372,237,36,719,403,752,475,873,961,730,509,391,177,137,24,401,95,57,44,37,93,498,120,308,139,494,110,98,326,111,247,86,304,30,482,49,143,48,55,629,210,260,758,523,19,351,65,450,72,116,46,76,342,29,275,203,50,170,105,164,89,82,734,242,27,38,54,144,899,90 }, -{ 772,335,662,96,367,744,897,1,303,686,264,521,652,340,116,520,141,31,919,201,966,260,888,203,44,64,905,321,144,225,269,98,691,658,349,284,410,698,692,363,120,88,848,717,863,187,551,914,909,418,576,202,646,443,850,639,523,69,404,336,958,293,128,730,131,615,274,382,296,166,960,948,258,228,224,219,751,486,160,125,82,411,191,765,244,223,475,453,352,326,100,318,676,596,67,351,899,703,403,389,435,947,589,498,102,33,954,291,265,156,922,854,402,93,759,664,447,372,212,137,478,329,724,562,530,286,217,942 }, -{ 1,28,5,0,36,24,65,83,50,14,67,22,12,96,2,48,218,114,281,54,18,21,9,133,55,103,46,181,37,58,160,38,16,7,99,10,223,69,238,32,430,433,502,45,35,51,766,49,108,86,23,124,361,155,487,765,532,283,75,137,270,115,17,838,163,109,480,95,13,61,6,543,154,754,513,70,29,72,202,540,822,657,323,920,398,89,68,64,141,966,3,221,208,285,128,290,956,547,488,269,236,175,168,429,194,474,800,646,171,39,412,775,52,308,531,866,149,880,389,4,180,403,318,842,834,402,217,185 }, -{ 138,174,348,42,25,6,145,81,544,280,525,74,85,26,648,204,355,287,396,91,233,66,636,104,122,746,416,29,64,65,90,45,0,235,194,681,87,22,222,651,95,624,573,32,214,289,750,415,343,445,192,52,112,86,17,370,19,5,135,881,7,151,2,337,113,605,243,63,389,256,49,59,10,4,673,680,77,18,297,61,312,76,614,97,72,249,283,11,524,70,353,33,27,28,216,114,874,173,311,57,43,21,14,597,36,1,141,102,58,24,217,12,436,665,80,172,715,792,148,123,619,56,133,20,491,75,784,117 }, -{ 24,16,35,68,0,18,158,28,71,159,49,7,55,154,109,14,22,60,105,124,344,65,118,424,9,239,95,1,320,2,149,577,286,170,92,169,108,347,12,21,327,374,175,185,67,10,272,5,101,51,48,23,302,455,39,6,671,301,46,13,69,310,20,518,64,150,36,346,50,32,137,202,709,677,191,126,98,125,375,168,538,289,164,38,37,128,638,30,703,747,890,273,127,634,31,419,140,143,439,86,403,114,252,83,962,654,221,762,623,338,115,29,212,103,701,570,308,107,512,189,54,97,167,230,479,345,312,913 }, -{ 854,699,230,352,93,689,144,251,160,137,855,202,617,203,217,36,669,332,450,120,473,351,831,201,213,752,326,800,206,141,258,748,82,418,345,30,180,816,957,318,840,190,443,228,44,35,863,968,10,1,219,871,704,317,64,22,679,83,466,539,498,224,55,96,898,31,116,406,851,384,86,244,295,28,873,98,817,531,187,822,864,373,494,131,559,372,530,901,574,365,69,127,839,735,128,268,67,533,442,868,860,922,88,269,927,859,9,367,613,253,564,930,567,261,260,728,39,237,109,284,276,164,730,489,166,926,125,776 }, -{ 15,13,5,1,2,23,3,0,317,51,115,4,10,11,7,6,217,33,9,77,17,14,341,165,102,117,180,365,134,40,197,153,64,22,12,32,196,21,8,141,391,110,752,372,291,498,352,125,569,16,36,901,202,59,260,28,237,482,349,18,269,457,961,120,318,93,57,509,37,29,128,177,49,31,19,401,48,453,342,38,719,873,45,55,629,111,24,44,143,468,386,50,54,403,86,139,27,308,304,95,210,546,730,475,46,137,98,247,35,72,90,99,82,76,437,494,864,30,326,758,96,52,275,116,402,277,164,56 }, -{ 104,173,20,319,43,66,426,355,712,77,97,0,202,7,198,74,580,204,174,500,32,5,59,2,102,337,90,325,226,234,4,52,22,450,904,155,222,376,861,21,750,33,192,414,194,147,324,342,889,58,544,636,18,291,416,112,784,81,334,64,707,95,331,422,639,715,36,400,14,141,560,792,65,29,177,49,37,315,427,28,57,10,120,24,1,40,48,107,673,11,494,318,230,61,524,128,196,16,12,470,632,232,138,115,329,455,113,142,186,153,819,294,17,525,526,70,117,87,25,247,587,105,269,583,588,158,171,348 }, -{ 23,13,51,5,15,1,2,115,0,141,12,7,4,21,6,165,32,3,269,9,10,457,202,180,197,14,77,11,37,453,22,318,352,120,33,719,217,341,401,403,16,961,17,40,308,18,31,28,8,48,64,475,569,730,260,365,59,128,247,317,137,177,90,93,237,102,99,629,523,44,386,117,36,450,110,153,30,752,899,38,349,72,134,98,509,498,49,326,901,125,24,391,196,421,57,82,291,76,95,19,203,494,89,45,817,304,468,221,139,210,758,351,546,65,373,372,96,54,482,734,144,116,86,39,29,216,402,288 }, -{ 15,1,13,0,2,5,4,23,3,317,115,51,7,6,341,9,8,365,217,22,10,33,77,31,457,197,44,901,18,12,28,180,11,120,165,202,961,102,719,569,40,308,21,730,20,260,351,523,141,36,401,64,482,82,55,49,450,453,403,269,93,318,16,30,498,468,342,14,372,352,110,61,817,125,137,386,117,70,899,25,898,291,509,196,494,475,24,629,854,39,153,349,98,32,134,221,391,416,234,758,59,37,237,95,86,19,91,48,27,177,247,326,903,17,734,873,89,128,421,105,922,57,111,143,638,300,304,90 }, -{ 15,1,3,2,0,4,10,5,9,13,82,12,8,11,16,7,31,23,351,898,365,93,44,854,22,64,21,457,217,180,6,141,317,730,110,318,18,752,719,352,341,51,961,28,269,33,260,77,922,120,202,291,98,55,372,197,349,901,105,165,30,450,14,817,494,523,403,899,128,125,453,95,36,115,116,475,386,326,49,401,111,94,811,642,758,479,474,391,373,203,201,187,153,144,137,38,37,24,102,59,421,282,206,48,569,342,275,216,210,864,846,801,795,692,661,597,559,442,253,244,230,196,177,170,143,127,123,89 }, -{ 2,5,14,1,29,50,38,46,45,17,52,58,114,133,171,218,21,181,48,186,36,6,155,3,19,65,487,12,32,54,27,61,480,323,70,22,51,86,361,137,96,0,208,115,285,227,283,151,23,412,10,281,28,108,37,236,112,328,7,334,163,400,25,4,223,26,67,75,657,194,18,103,128,24,13,514,745,99,401,202,308,532,59,803,389,16,760,11,243,72,64,80,106,9,502,83,832,113,453,56,552,421,403,503,402,95,735,341,956,69,124,782,366,90,141,409,77,57,160,822,433,89,209,244,40,76,177,484 }, -{ 68,101,0,9,212,124,154,65,149,35,16,100,118,24,252,71,562,589,189,336,114,167,265,191,39,329,398,88,67,429,1,264,478,69,166,484,55,30,777,18,399,520,759,13,818,722,175,419,230,48,283,664,796,115,23,28,375,724,346,140,133,103,410,21,705,806,64,51,701,604,83,246,7,345,158,389,60,36,382,302,14,2,108,50,755,5,695,694,237,702,547,917,92,639,411,936,732,213,267,238,32,404,190,10,364,321,289,49,180,553,447,247,650,72,218,46,593,925,468,458,96,905,596,217,95,546,223,439 }, -{ 14,2,1,22,46,67,7,65,28,24,0,69,38,168,50,36,83,289,5,12,16,29,35,55,86,114,103,133,109,49,18,158,95,108,6,194,584,124,185,610,52,169,10,159,189,105,51,23,21,484,283,9,505,389,236,128,239,267,420,164,13,547,143,54,32,64,71,115,149,75,37,140,251,68,48,208,160,253,708,309,137,96,154,244,312,170,782,202,320,412,577,175,308,424,25,141,336,429,218,344,60,892,835,874,347,398,401,531,230,17,278,388,92,135,797,638,732,237,3,323,39,19,286,99,747,4,66,403 }, -{ 23,13,51,15,0,10,115,1,4,2,9,961,457,77,11,5,453,12,33,3,403,14,40,102,197,7,22,165,59,475,64,6,37,401,21,569,719,18,308,99,32,17,177,730,16,141,523,8,341,31,629,217,180,117,386,202,153,196,120,57,28,49,111,125,95,139,899,494,128,421,72,65,210,317,36,342,391,90,19,93,89,44,86,269,365,24,291,237,110,76,318,873,509,482,54,48,300,498,247,134,450,82,275,260,352,98,27,137,326,38,304,758,148,50,79,817,45,670,372,30,179,29,203,734,152,116,349,216 }, -{ 15,1,0,2,5,9,7,23,13,51,901,8,6,12,3,4,180,10,719,341,120,14,31,115,22,141,898,197,82,260,93,21,28,44,457,37,217,125,202,16,153,351,64,110,401,18,11,33,36,961,569,30,77,49,352,450,98,269,139,317,117,116,32,40,453,326,308,128,523,318,365,203,137,730,24,629,854,403,102,39,237,165,55,291,99,475,95,196,48,86,498,134,752,899,373,391,817,244,38,105,242,421,922,59,144,386,57,143,35,349,54,509,482,372,65,253,221,177,304,494,247,638,17,170,72,127,164,114 }, -{ 100,252,265,88,724,101,382,410,48,676,213,909,321,9,593,0,812,329,553,21,352,1,30,230,166,39,419,520,23,51,264,217,221,478,689,435,190,664,13,604,466,677,694,125,752,777,36,98,699,639,83,759,96,35,158,68,128,562,141,223,344,274,310,69,455,115,5,180,404,317,656,364,203,293,831,438,175,308,443,401,333,31,144,570,154,854,105,137,212,346,49,857,530,418,840,855,201,55,921,28,539,421,557,806,821,127,124,67,251,10,634,165,936,22,610,795,16,286,957,167,541,32,962,905,682,686,241,44 }, -{ 58,171,2,46,5,50,14,29,186,1,52,45,334,151,400,38,155,61,103,96,67,227,502,281,223,54,48,17,83,181,552,69,70,309,75,163,24,549,21,311,27,366,80,536,243,113,218,787,106,36,112,433,765,430,209,133,12,6,236,487,19,780,675,394,766,238,587,545,32,37,767,807,834,7,108,114,328,287,315,65,262,820,16,496,583,26,18,454,513,0,3,600,220,25,474,86,307,73,28,35,255,869,537,631,22,72,89,491,409,357,64,270,828,267,189,845,160,221,10,592,137,119,99,659,128,516,541,785 }, -{ 23,202,120,141,51,13,318,269,21,128,260,165,137,197,180,326,1,450,5,77,33,82,15,48,93,64,110,351,32,125,403,203,102,523,854,386,352,457,922,115,7,2,12,494,373,817,615,196,342,153,221,217,16,6,210,144,402,453,36,4,391,14,37,730,9,96,475,291,98,0,99,901,3,421,551,177,18,40,401,237,752,349,31,898,86,719,341,24,704,285,117,11,308,393,116,35,61,160,8,30,65,90,59,44,275,10,241,50,39,216,509,372,67,72,961,247,22,899,28,569,293,83,139,801,473,76,95,46 }, -{ 341,197,901,10,13,569,23,638,15,479,8,873,961,180,165,143,12,115,0,1,951,509,116,37,642,365,499,498,242,253,5,36,898,4,752,2,352,141,268,206,51,55,401,391,7,22,3,417,506,492,82,9,93,11,137,456,338,244,457,64,317,120,110,629,351,546,431,33,21,386,31,86,260,217,164,6,758,965,28,762,474,918,661,326,551,153,125,14,719,94,421,854,203,801,373,269,44,16,730,202,615,237,844,791,811,523,450,40,18,128,864,282,117,111,148,824,940,102,959,17,139,559,170,32,958,867,968,38 }, -{ 23,1,21,51,202,13,15,141,120,5,180,2,197,165,7,269,352,48,12,318,260,326,137,33,386,403,9,450,0,32,6,4,115,128,14,16,523,457,102,37,110,82,93,18,217,3,64,221,752,421,203,453,237,125,77,153,351,494,308,475,196,401,719,31,44,391,373,817,24,730,8,342,30,36,11,40,341,901,96,50,99,615,98,116,117,39,10,22,498,317,17,59,35,160,144,86,28,20,854,961,291,244,177,899,72,402,509,90,922,350,349,95,29,247,285,19,127,661,365,372,49,569,758,65,576,241,898,61 }, -{ 2,29,58,50,262,52,53,27,6,151,14,1,171,5,287,34,324,17,74,46,26,113,309,396,45,223,61,334,96,73,635,445,583,38,19,75,67,103,80,357,70,331,181,573,112,785,236,675,163,281,549,145,366,54,108,315,760,218,220,491,453,297,12,138,62,250,133,436,51,409,200,487,600,128,502,37,64,106,114,651,48,83,394,24,25,820,433,59,766,307,23,155,36,614,311,65,66,137,57,4,765,186,69,21,99,202,56,13,3,587,165,767,7,631,238,86,780,115,283,161,322,545,221,42,32,739,400,47 }, -{ 13,51,23,141,202,115,217,77,317,4,269,33,5,11,318,352,0,102,180,2,64,10,341,7,21,9,137,3,40,128,32,6,22,291,752,15,197,12,365,1,165,31,125,28,498,177,16,403,494,237,18,308,44,59,372,98,349,24,93,48,244,386,49,90,30,342,95,901,475,39,120,196,14,117,457,116,453,17,247,391,153,8,143,482,36,304,203,110,509,326,450,260,37,134,144,210,468,523,86,221,401,569,873,546,719,139,253,35,160,127,285,105,373,421,961,864,576,82,367,437,351,55,579,19,216,275,402,164 }, -{ 1,24,67,50,69,103,35,18,16,14,28,0,5,83,9,54,223,2,96,58,181,12,46,68,48,65,108,133,71,281,149,22,7,163,21,114,36,75,38,55,155,502,238,37,189,99,70,218,45,10,430,433,236,60,765,251,171,61,175,540,23,820,32,51,418,270,29,487,513,52,124,118,336,17,64,49,920,154,13,141,115,545,72,267,221,537,745,290,86,488,309,128,335,39,227,89,328,160,95,834,361,6,101,486,514,543,112,137,474,394,186,202,388,109,150,140,552,807,412,283,307,345,87,780,366,398,77,516 }, -{ 13,23,51,141,202,115,77,269,64,217,102,128,318,33,32,291,177,180,137,10,352,4,21,16,197,0,11,22,9,7,165,90,40,494,125,2,210,247,14,18,153,49,59,31,6,95,317,28,196,349,24,304,5,341,403,342,98,237,117,120,372,44,3,275,35,86,48,1,93,752,36,15,241,12,475,144,30,19,17,216,110,365,260,116,326,134,82,105,143,308,203,20,39,402,386,221,901,127,72,498,437,244,453,76,401,65,38,96,285,316,160,55,351,25,288,482,164,57,139,457,678,490,201,523,509,391,83,817 }, -{ 115,365,180,317,873,498,752,482,341,569,217,901,13,197,352,546,468,1,864,457,509,579,165,23,143,21,15,2,185,36,7,148,12,134,332,22,351,9,261,51,16,5,10,0,346,93,30,141,868,734,372,253,345,116,474,94,77,876,76,28,896,679,384,203,160,39,37,6,98,14,391,109,530,187,843,177,86,629,33,637,11,437,18,4,902,574,434,144,120,44,31,837,72,613,295,169,349,505,228,190,102,95,49,48,706,406,405,96,83,961,617,597,254,237,926,903,717,531,420,258,164,110,860,268,661,477,464,449 }, -{ 184,257,229,205,432,497,152,619,452,17,381,57,266,524,5,45,90,106,313,471,245,32,128,129,59,4,214,2,339,119,769,77,369,12,123,21,14,99,157,3,202,38,710,1,618,216,64,217,292,188,162,76,11,40,249,141,62,51,33,19,372,102,179,37,209,23,27,6,111,318,29,61,403,86,460,349,207,54,269,402,10,48,139,115,36,136,79,137,7,255,72,80,177,519,291,453,529,401,288,58,0,153,475,377,247,306,25,56,26,94,210,22,84,494,50,790,89,775,474,361,328,148,241,588,285,317,678,277 }, -{ 13,23,1,2,0,51,10,5,115,4,15,3,365,7,9,33,11,180,77,6,217,341,22,102,317,40,197,14,12,64,141,165,18,8,17,31,202,28,125,16,269,21,117,901,453,196,177,59,153,36,128,475,318,569,32,24,352,291,403,134,93,401,98,44,752,237,391,372,49,509,457,961,873,308,498,386,95,342,349,116,137,37,139,494,19,30,210,247,143,304,86,629,48,203,111,55,57,719,523,110,482,546,120,38,65,54,326,421,216,730,50,99,899,758,402,260,105,275,39,72,450,96,144,35,25,242,29,437 }, -{ 626,70,687,771,379,767,846,518,878,49,937,591,82,761,31,786,481,407,845,195,590,351,98,44,163,557,13,120,125,48,87,883,371,623,360,817,450,260,178,522,21,5,854,523,116,326,105,291,142,4,296,929,884,259,127,0,132,922,615,77,713,293,217,197,165,22,146,64,931,608,465,457,349,196,32,941,455,279,621,315,202,201,126,110,40,16,11,10,391,666,467,446,373,354,346,144,58,33,581,763,512,916,535,795,768,658,558,447,344,150,92,51,28,24,9,265,212,93,586,562,180,156,147,134,117,1,783,663 }, -{ 264,909,410,897,772,1,686,521,478,914,98,335,96,284,691,639,382,44,744,321,724,100,765,438,223,662,88,144,475,367,31,265,125,116,921,9,682,656,166,363,127,225,21,201,842,0,447,905,393,48,443,421,5,82,329,252,120,805,411,51,821,13,919,69,834,948,934,664,33,23,435,551,274,77,217,131,268,7,93,854,418,520,340,110,30,213,141,453,165,101,39,791,260,922,403,238,698,898,351,102,593,433,64,203,83,303,286,293,197,32,960,812,697,523,466,285,180,692,404,658,35,873,254,163,352,553,190,615 }, -{ 13,23,2,51,1,5,115,0,10,77,15,217,7,6,180,33,3,317,40,4,141,102,9,197,11,341,14,64,165,22,365,17,117,196,352,202,12,269,153,16,291,237,453,128,457,498,752,32,18,134,177,59,21,125,386,318,901,28,8,372,31,349,391,403,95,475,36,137,569,49,308,961,401,509,482,143,98,19,24,44,730,86,120,719,139,546,402,342,93,304,110,29,210,421,873,45,38,629,57,260,326,247,111,275,30,523,55,90,450,46,116,253,50,37,244,65,494,105,99,468,758,25,170,48,96,216,35,27 }, -{ 141,269,77,115,13,318,64,202,177,23,137,217,102,291,5,51,180,48,21,352,0,32,7,16,33,18,11,2,197,128,4,15,10,752,24,244,14,494,317,165,96,9,3,349,247,237,93,35,28,12,6,49,44,1,421,60,20,403,36,341,95,22,475,372,326,308,275,196,144,90,40,39,117,31,678,954,901,304,284,268,221,203,110,98,89,68,46,365,153,134,76,67,576,453,432,402,381,342,179,125,118,86,72,71,69,59,50,17,498,160,164,143,120,111,82,961,873,851,401,377,335,288,285,241,223,210,121,116 }, -{ 23,13,51,15,0,10,453,2,115,1,40,961,33,11,14,4,9,457,22,401,77,102,7,5,569,475,197,12,64,3,21,165,59,719,629,6,196,18,177,386,37,32,17,111,153,57,117,139,31,16,28,730,308,99,38,141,8,403,36,128,670,391,217,210,72,90,523,79,482,341,202,237,45,474,180,125,41,509,46,494,304,275,48,54,95,94,899,29,277,134,120,76,758,65,44,247,498,24,291,148,89,468,86,49,437,82,56,30,402,143,365,349,317,93,50,757,269,734,342,98,352,450,678,62,188,19,152,328 }, -{ 1,22,36,5,12,0,105,28,2,49,31,21,95,9,86,55,13,23,128,7,141,98,170,44,115,239,37,48,127,83,160,4,180,164,51,202,10,269,3,96,6,208,159,137,67,244,320,197,312,50,318,352,64,285,301,125,341,32,165,109,116,217,14,402,708,39,365,16,654,35,30,242,317,169,168,99,253,15,678,11,69,751,569,54,531,752,8,901,947,338,735,77,24,238,143,323,498,158,65,401,17,237,293,946,18,717,740,597,93,512,638,286,403,395,892,144,347,308,299,424,457,185,418,713,194,221,757,824 }, -{ 100,252,101,88,265,0,382,759,329,410,724,9,213,321,553,676,419,593,166,39,21,30,909,694,562,520,68,13,812,264,23,435,677,230,35,352,478,48,190,154,689,212,1,217,570,51,466,639,124,221,83,806,604,175,699,826,703,125,98,308,55,671,664,346,32,158,610,706,96,962,274,31,317,289,344,69,438,49,28,831,917,115,656,455,936,404,165,116,208,777,310,5,854,857,16,201,128,36,333,752,194,67,24,71,144,795,391,197,589,141,818,364,921,131,44,86,203,251,748,105,65,22,180,557,149,702,350,855 }, -{ 539,88,840,190,30,321,530,957,435,748,669,778,144,96,100,466,418,863,410,203,228,213,382,274,795,406,613,131,36,822,1,83,326,856,219,352,335,494,251,230,679,31,224,960,44,831,855,141,859,944,217,9,367,160,201,137,625,128,166,93,258,662,120,800,521,403,116,98,187,28,576,752,816,269,202,557,39,931,21,265,686,616,443,921,10,180,731,438,689,523,473,125,871,317,23,77,197,457,827,55,264,35,617,692,254,33,719,260,86,966,817,32,829,206,276,127,242,475,456,284,51,615,252,0,854,238,492,551 }, -{ 7,97,173,92,232,298,314,107,387,729,356,43,359,126,246,140,362,441,501,426,392,230,560,20,14,707,885,104,16,66,330,779,172,683,60,35,493,861,22,357,5,0,95,49,81,279,38,568,18,24,21,74,192,71,414,830,423,259,324,2,121,526,125,633,508,32,672,52,319,10,150,48,28,147,29,46,715,347,6,64,199,380,189,61,858,69,660,33,204,135,649,713,36,595,1,98,37,879,31,146,132,75,819,263,784,443,408,607,448,54,12,663,138,68,58,117,102,70,13,267,65,55,712,91,153,77,399,165 }, -{ 14,2,7,58,46,1,38,16,75,5,70,52,24,155,29,45,220,35,163,69,50,171,61,186,87,227,18,270,92,48,666,54,32,290,140,21,278,592,513,307,67,112,262,6,66,60,37,0,135,243,97,767,64,425,23,89,71,72,409,400,128,845,113,17,334,36,22,172,20,10,315,115,76,141,9,28,51,12,663,103,86,74,77,207,13,65,177,90,263,83,267,202,95,137,43,269,151,294,189,27,25,431,19,49,428,430,68,40,223,536,852,106,738,324,226,655,474,780,96,502,496,217,114,108,318,230,102,148 }, -{ 447,411,664,363,647,478,936,621,354,271,98,781,759,223,777,1,360,18,691,668,48,932,167,156,132,121,212,195,591,446,724,520,118,586,146,21,23,463,31,293,9,264,393,16,51,914,13,125,807,101,49,834,284,44,60,163,682,24,848,221,658,541,5,105,35,71,68,55,96,39,116,562,407,32,905,604,22,252,772,0,33,765,522,69,10,963,67,191,93,100,638,676,166,340,364,120,281,698,608,286,821,404,50,115,382,144,77,265,697,64,28,102,909,126,410,30,628,82,662,95,367,7,815,127,744,335,40,296 }, -{ 14,2,1,46,67,65,38,7,69,36,29,24,83,28,50,0,22,103,5,6,52,124,108,484,168,12,114,86,75,133,208,18,16,194,236,283,289,389,21,610,10,109,756,160,25,267,35,23,51,95,32,309,55,505,135,584,71,13,185,66,547,128,189,37,732,54,96,48,169,646,17,49,412,9,420,158,87,19,323,115,278,244,26,64,218,164,70,143,253,74,238,140,220,398,172,45,137,58,149,262,797,141,92,308,4,3,503,302,202,60,68,388,154,159,118,650,531,90,516,366,150,285,105,532,335,251,671,429 }, -{ 386,421,51,791,801,697,958,730,453,23,165,551,221,670,615,326,401,391,576,403,13,102,457,899,805,523,842,770,48,24,450,475,0,203,125,949,541,719,566,77,193,115,308,197,21,18,398,153,33,393,317,117,43,202,137,743,120,300,7,124,467,5,91,108,9,71,342,291,118,42,32,16,97,134,85,279,61,260,173,289,281,517,494,14,859,817,196,60,809,758,692,36,882,25,194,388,20,373,302,140,65,547,429,273,851,717,458,412,122,104,95,509,233,81,492,318,6,362,832,110,69,92,49,149,35,508,298,608 }, -{ 319,104,945,422,81,20,715,43,0,879,693,681,306,32,784,74,173,207,61,7,22,52,397,671,414,904,887,636,240,95,6,115,835,192,5,707,91,426,18,2,76,29,819,330,316,263,56,85,138,84,28,232,577,365,64,97,113,519,312,725,526,17,344,370,204,49,202,214,329,24,38,560,403,750,66,494,10,804,500,241,25,105,289,718,159,587,523,77,124,102,86,861,348,498,450,292,51,288,90,117,140,65,899,510,168,347,158,16,448,45,817,237,107,324,33,9,194,180,120,318,92,790,40,280,21,356,320,874 }, -{ 2,29,70,1,52,262,75,112,26,145,46,163,309,58,103,67,14,50,6,220,96,74,38,394,223,331,357,19,83,238,45,69,5,324,171,287,27,409,151,25,366,307,24,583,218,537,133,108,632,42,267,396,451,53,36,433,87,114,65,17,113,635,186,764,550,545,226,600,138,675,388,66,37,21,61,54,48,181,122,516,12,606,294,236,418,73,35,189,18,80,86,486,487,651,135,155,150,7,32,16,137,644,243,739,281,222,445,334,278,380,573,149,849,106,227,582,603,160,335,34,64,283,696,648,765,624,297,72 }, -{ 771,929,786,941,590,626,687,259,465,178,70,878,132,5,13,21,534,146,49,518,279,48,107,35,379,493,31,147,125,767,105,108,87,195,221,481,126,121,44,163,22,623,23,127,61,581,407,362,0,150,165,937,427,58,846,345,371,142,883,467,167,761,120,33,10,640,98,75,591,360,391,1,663,271,77,30,199,4,845,763,522,60,185,102,291,7,349,159,156,137,128,246,450,51,308,296,293,239,32,11,158,423,558,557,342,269,116,39,260,112,17,386,232,502,441,281,196,153,95,37,12,783,953,612,535,401,197,15 }, -{ 5,186,45,2,61,29,50,227,52,400,58,17,46,48,171,209,14,155,106,243,80,311,38,1,430,281,496,54,502,536,255,181,454,513,103,96,592,760,3,334,207,21,666,67,119,552,587,869,663,62,151,541,27,32,583,309,721,84,56,37,659,218,133,366,221,136,83,540,6,834,72,36,223,270,667,290,738,12,328,34,807,89,287,263,474,19,487,262,236,238,148,76,75,115,69,425,240,378,99,26,394,24,766,433,483,128,114,306,70,549,65,324,600,675,828,357,764,53,780,108,545,73,137,161,7,833,90,765 }, -{ 0,95,453,64,32,389,494,817,342,207,312,365,577,690,194,403,848,237,202,316,180,671,5,482,757,61,490,805,102,289,498,450,65,835,475,523,113,49,401,241,887,115,120,263,329,21,17,18,576,22,33,137,344,13,318,402,77,3,1,899,11,48,347,4,210,141,118,125,90,51,933,942,260,23,645,874,306,308,117,134,597,615,27,247,12,196,24,122,19,6,2,751,697,743,317,468,291,25,16,288,177,730,629,28,86,84,349,770,421,214,611,592,491,483,476,425,56,36,670,300,275,153,217,621,350,39,71,60 }, -{ 23,13,51,202,115,15,5,1,12,4,2,77,403,165,0,21,10,318,453,32,457,33,128,197,9,7,6,141,3,401,475,59,177,269,14,11,308,17,37,494,22,719,217,99,64,341,180,117,18,90,40,102,120,16,317,730,961,569,48,365,28,421,386,352,629,8,38,523,450,237,31,291,402,125,210,137,247,216,19,391,196,57,221,36,509,326,260,72,93,24,349,275,153,203,49,95,498,342,304,899,45,134,82,44,76,30,468,372,98,89,27,817,25,139,86,110,758,65,54,29,111,546,351,116,241,46,20,482 }, -{ 119,292,6,45,306,76,2,26,240,209,17,61,710,106,5,80,29,19,27,25,214,84,113,32,64,618,129,255,128,1,179,90,123,4,59,65,151,14,58,667,40,460,311,56,504,22,245,86,249,207,0,790,141,205,42,95,77,483,3,833,10,112,115,202,7,23,18,887,137,194,11,52,57,36,62,136,269,476,177,162,99,33,491,21,257,73,769,454,12,70,38,28,402,13,24,145,16,48,72,318,184,196,614,445,122,102,53,114,49,117,153,210,548,285,46,54,464,134,180,51,396,50,297,183,315,243,237,814 }, -{ 15,1,23,13,51,180,0,2,120,5,7,9,450,523,33,12,115,260,197,102,165,6,202,77,4,21,141,14,457,351,403,341,16,901,8,326,82,308,365,3,269,18,36,137,93,318,48,128,386,59,31,37,719,217,453,401,730,817,22,110,44,475,64,317,352,10,32,28,421,494,40,30,116,98,11,899,342,373,752,196,24,615,221,177,86,291,49,854,203,39,99,509,961,96,144,569,898,55,922,35,391,210,117,244,629,125,349,498,873,17,50,247,372,89,160,758,237,670,300,95,127,143,153,65,285,402,90,801 }, -{ 6,138,222,280,74,85,66,226,337,87,42,204,235,25,145,294,64,135,95,174,609,29,112,415,256,26,65,525,792,461,353,32,580,22,52,122,746,172,630,544,289,70,348,416,237,287,19,278,49,312,86,605,75,10,108,2,0,194,192,5,620,1,7,21,90,97,736,220,63,45,632,500,114,214,61,355,36,151,233,396,180,58,69,24,125,141,72,28,14,648,27,519,673,889,872,624,241,444,288,18,343,197,48,426,33,207,133,665,263,232,113,73,347,91,17,568,448,316,103,208,165,128,104,53,380,12,81,498 }, -{ 39,9,333,101,0,158,252,310,254,272,455,68,49,627,327,344,159,286,419,364,18,16,709,329,24,688,105,265,109,30,100,553,118,374,35,557,166,124,190,154,677,131,65,578,912,71,793,22,60,518,1,538,51,167,21,23,98,28,212,48,95,438,604,625,13,404,7,31,96,55,127,520,36,731,137,890,857,125,320,616,694,656,806,716,44,577,5,10,170,224,67,83,829,168,242,219,228,128,191,14,239,827,88,86,301,347,12,424,160,747,810,37,115,64,846,346,371,613,69,910,221,33,149,2,562,93,865,676 }, -{ 21,32,14,5,38,76,72,2,48,54,270,45,1,17,50,46,221,290,181,89,36,430,3,741,428,218,408,155,37,540,281,449,0,10,12,148,179,90,241,263,207,29,292,133,425,22,477,328,99,51,697,421,114,67,770,487,115,476,23,4,528,227,65,28,6,119,243,488,214,720,552,541,86,474,24,52,350,64,61,7,9,137,11,186,103,536,401,129,745,413,106,58,83,96,920,308,236,13,57,513,123,18,842,464,543,361,245,160,56,59,205,128,655,431,514,358,828,285,171,108,460,55,62,400,27,16,453,40 }, -{ 137,269,141,202,120,450,260,318,494,922,351,291,82,77,5,326,678,352,704,854,128,523,1,817,21,15,64,349,180,342,32,13,475,90,177,947,7,372,61,51,49,23,165,95,403,11,207,115,312,102,4,48,197,237,402,719,203,50,96,308,30,6,2,373,205,86,70,69,67,36,210,241,105,898,859,851,615,208,194,217,901,285,25,453,216,182,163,87,65,46,45,8,0,457,31,307,139,112,58,37,12,3,117,968,158,127,20,730,386,273,199,178,168,147,126,108,60,28,18,16,10,9,954,795,597,275,247,134 }, -{ 16,68,71,24,149,35,191,118,167,212,18,124,101,246,108,399,189,154,140,92,267,9,60,375,65,458,695,302,133,67,398,589,7,0,69,230,114,562,702,1,705,103,55,915,755,283,21,388,602,336,412,48,14,175,273,650,50,345,823,674,411,46,121,146,28,363,236,447,39,10,64,672,22,664,478,796,264,309,330,271,100,520,647,37,95,218,199,12,906,23,565,36,83,32,252,777,88,166,628,126,5,13,125,49,75,2,366,51,96,86,732,486,346,54,815,237,733,429,98,891,759,516,633,818,115,443,723,238 }, -{ 28,109,0,9,67,22,1,55,65,114,103,158,39,49,83,194,168,69,35,420,185,289,36,50,208,24,68,133,2,124,505,251,218,175,86,46,7,389,323,154,95,169,159,346,12,547,160,14,756,101,646,16,570,105,30,5,799,189,533,38,531,96,503,238,596,252,128,64,535,23,54,18,21,344,51,782,272,336,610,419,283,532,345,333,480,13,100,10,37,137,327,115,789,584,149,286,230,361,48,75,285,181,202,29,254,374,164,429,927,141,71,896,143,671,930,577,32,237,140,810,244,484,439,31,131,601,402,310 }, -{ 325,147,427,198,178,142,798,202,259,5,376,20,534,43,465,450,904,318,234,470,858,77,725,455,120,581,329,315,70,97,61,929,105,878,786,113,362,260,58,557,481,403,660,14,639,21,173,0,170,49,159,494,319,269,48,23,344,523,128,107,301,595,1,845,518,416,33,884,817,324,320,13,326,199,22,475,402,158,37,270,132,51,40,38,35,32,7,95,590,121,4,422,239,141,104,66,146,347,112,615,263,230,126,75,28,307,76,207,704,414,360,265,195,9,922,453,356,298,19,17,137,72,342,290,102,87,50,395 }, -{ 28,0,65,109,9,35,55,175,124,67,289,24,39,158,68,114,14,336,570,154,420,1,22,7,185,168,69,133,194,49,16,429,149,101,46,505,83,189,2,103,169,346,50,252,484,36,547,389,610,283,18,756,95,419,159,535,345,251,86,71,105,12,108,398,100,230,30,140,439,333,533,344,584,703,21,208,272,286,671,38,5,327,267,10,64,601,23,254,51,96,118,810,13,48,164,782,265,128,364,236,29,143,160,837,329,374,677,54,577,218,310,637,399,60,37,962,797,92,166,323,793,705,32,238,732,75,6,596 }, -{ 141,180,115,269,13,23,4,1,352,5,202,318,51,317,2,217,21,752,365,77,3,7,165,341,197,32,0,137,11,308,10,6,901,33,15,9,31,22,177,102,403,64,401,12,30,44,498,237,291,48,143,244,93,349,569,40,494,28,8,39,253,125,372,90,221,98,453,304,386,482,873,509,203,120,110,116,18,59,49,457,144,128,95,247,391,864,326,117,16,421,37,153,14,196,475,36,629,134,105,210,260,961,373,160,164,55,719,546,437,216,734,35,468,350,201,17,139,96,89,579,473,72,758,717,111,24,743,275 }, -{ 15,0,1,2,9,23,13,5,7,51,12,6,4,8,901,33,3,180,14,197,10,341,115,77,102,93,120,141,260,22,21,82,457,899,31,64,453,28,165,16,450,18,523,11,351,475,202,36,110,37,203,401,125,30,352,898,44,403,961,730,719,116,128,569,421,365,196,49,40,98,32,217,137,373,269,39,308,237,144,55,854,153,177,318,317,86,326,24,17,117,95,629,48,817,752,59,300,670,498,99,391,494,386,291,134,38,105,90,642,342,922,873,242,143,244,253,393,473,221,50,247,372,57,349,139,65,111,661 }, -{ 6,74,138,66,75,85,25,324,42,380,278,135,26,500,87,226,1,220,97,29,70,222,889,841,52,350,19,606,280,235,294,394,112,571,69,853,21,38,145,335,903,267,582,65,550,309,14,172,792,509,32,2,197,64,749,262,237,174,241,357,122,95,461,486,808,67,337,256,537,96,103,115,774,546,204,63,125,27,391,22,558,462,83,451,7,238,630,5,308,802,24,165,108,734,46,163,140,950,648,641,92,45,13,298,189,416,583,525,150,72,923,86,600,48,114,53,331,221,388,12,620,180,468,426,90,645,746,348 }, -{ 51,23,13,453,12,115,403,4,457,401,165,475,15,0,1,10,11,37,59,5,99,40,3,308,64,197,32,2,33,202,17,9,719,77,629,730,7,14,22,6,961,21,569,523,494,421,386,18,120,141,57,125,177,318,269,102,237,128,90,38,899,341,45,450,111,76,16,180,217,19,36,31,134,117,247,49,670,139,72,28,210,95,291,196,402,153,41,25,24,89,509,216,260,8,93,86,54,221,82,137,65,468,758,26,56,44,27,317,391,352,817,365,304,62,349,123,498,48,34,326,275,152,775,342,114,372,300,757 }, -{ 788,180,319,21,5,83,32,498,314,547,526,17,693,61,817,48,11,4,27,510,33,12,848,77,288,104,24,160,0,814,120,64,3,804,153,134,117,56,519,342,196,102,207,725,326,690,523,450,69,40,403,95,899,306,60,958,90,961,942,801,500,232,174,155,84,43,38,115,945,457,386,595,475,615,247,887,715,671,494,482,365,192,13,312,202,165,10,9,81,51,566,65,71,119,113,861,835,802,770,757,756,746,743,729,692,683,629,587,583,551,550,525,449,426,422,418,414,324,291,260,221,217,214,186,170,125,123,105 }, -{ 15,1,2,13,23,4,5,3,0,11,7,6,341,51,10,9,12,33,77,115,102,40,217,14,197,180,165,141,365,901,569,317,202,64,22,21,8,16,59,32,403,31,17,269,177,318,475,18,196,386,453,352,153,93,401,120,125,117,28,291,457,494,210,110,37,961,629,326,128,391,237,260,139,49,44,349,98,372,116,719,342,36,523,95,57,86,111,137,19,24,203,450,308,752,30,275,38,730,134,90,509,304,373,247,300,144,48,498,27,45,20,758,482,65,143,72,105,55,99,35,670,76,873,402,615,82,29,817 }, -{ 101,520,18,167,9,118,212,604,364,16,60,694,252,0,264,917,24,68,146,55,363,562,35,191,121,166,265,806,329,71,676,100,706,647,411,271,39,907,628,621,925,21,419,848,404,28,682,942,48,1,815,154,777,446,109,132,124,5,821,463,49,857,158,13,199,905,967,23,932,126,88,108,22,346,96,382,354,759,51,575,125,105,98,92,32,522,65,286,333,31,447,812,639,7,553,664,566,727,159,593,30,10,149,150,865,156,375,14,897,936,407,95,638,274,478,175,439,272,67,221,634,302,50,2,12,107,144,44 }, -{ 13,23,51,115,33,217,77,141,64,0,4,102,202,9,2,317,7,269,180,21,291,352,32,16,10,128,5,11,318,6,177,40,341,3,18,22,165,197,137,15,14,153,247,237,125,28,24,12,59,196,365,31,349,117,90,752,49,403,372,98,221,93,308,17,95,44,86,342,48,494,1,304,210,498,30,36,120,475,453,134,401,241,244,386,143,275,19,391,901,72,110,35,39,203,144,326,116,260,164,20,437,457,37,402,509,421,8,482,55,523,105,82,96,316,65,350,450,864,139,216,25,76,285,29,27,579,546,127 }, -{ 66,135,172,74,97,204,278,6,138,324,7,174,87,192,85,448,140,353,29,232,280,620,500,52,802,92,25,226,808,38,568,380,889,42,298,69,426,580,792,314,571,330,2,872,348,95,26,572,622,43,563,32,526,222,893,22,14,65,5,21,81,64,673,24,75,267,950,1,355,885,220,70,357,726,145,104,86,63,888,91,387,189,16,46,289,294,126,71,501,20,107,233,60,19,48,462,335,67,173,28,45,194,49,241,550,235,230,37,90,0,312,83,18,415,61,58,36,262,12,35,112,633,10,72,150,712,246,343 }, -{ 97,24,2,69,66,423,298,6,29,7,267,172,74,52,14,189,67,38,25,607,150,149,83,71,1,36,18,135,733,467,81,0,140,501,426,517,21,33,398,278,160,118,124,809,42,154,26,19,462,85,273,92,20,46,429,302,117,60,336,568,508,204,28,192,715,232,770,705,165,65,16,153,596,173,102,279,50,91,87,175,43,23,448,45,12,861,386,37,13,63,421,104,48,51,324,388,314,197,134,711,138,32,531,526,330,681,712,443,22,451,75,608,185,4,949,697,221,882,636,236,370,196,54,420,5,309,885,458 }, -{ 158,9,0,68,39,333,109,344,49,101,24,16,35,159,124,154,254,272,310,793,252,327,419,65,627,286,71,22,364,455,18,374,105,577,747,28,30,168,912,118,677,55,95,185,709,100,688,149,60,175,671,131,190,346,166,265,518,578,538,329,169,703,424,1,212,21,7,694,962,289,706,439,347,191,108,51,810,48,10,634,23,67,14,616,239,553,170,302,557,98,320,125,31,2,570,857,625,13,5,36,12,128,375,86,137,127,114,37,716,88,44,913,420,92,83,69,96,50,64,224,638,562,242,301,167,890,731,160 }, -{ 15,10,33,77,197,4,180,341,365,115,13,102,23,317,141,117,217,5,1,901,11,40,253,165,134,153,21,752,244,143,32,36,352,51,638,137,2,196,12,55,3,873,569,951,372,82,37,120,291,177,7,59,898,349,6,64,0,509,31,342,269,22,351,498,260,308,160,93,14,139,854,44,202,28,86,48,457,17,482,90,401,450,111,719,72,203,116,125,110,523,128,961,164,57,304,922,9,386,318,38,730,326,49,762,535,275,391,277,629,210,242,373,99,98,148,96,734,817,95,89,237,717,247,30,479,45,758,54 }, -{ 100,382,166,478,265,264,404,274,593,438,88,39,921,724,98,639,682,1,363,411,447,435,905,812,821,9,96,30,897,31,656,23,223,252,254,310,664,410,116,190,51,144,329,691,21,520,393,44,127,101,0,909,48,125,13,625,333,284,557,521,418,286,367,960,772,5,93,77,321,118,105,83,948,616,272,530,33,293,203,795,156,765,676,68,466,102,67,551,131,604,120,242,49,35,16,354,848,421,18,32,553,730,69,158,335,165,759,791,110,731,914,163,613,115,10,386,217,24,36,778,834,65,395,4,578,238,842,364 }, -{ 19,283,436,297,53,26,813,122,42,432,503,27,605,25,736,73,390,235,389,128,630,123,250,529,63,256,80,65,108,445,690,573,269,789,106,444,216,113,381,412,6,14,133,680,200,78,318,650,177,678,17,194,57,114,619,368,4,349,84,472,59,112,85,275,291,56,18,378,714,40,32,396,183,102,11,152,33,416,136,495,341,236,46,403,130,161,90,243,561,255,184,24,129,597,0,742,86,45,469,76,145,862,401,285,249,141,947,665,13,179,51,524,287,50,527,803,233,117,684,12,304,148,205,29,719,23,139,61 }, -{ 202,128,494,141,33,269,137,36,51,0,13,102,180,6,2,1,196,65,4,86,402,95,29,475,403,117,59,40,457,77,450,15,210,177,134,49,22,21,18,291,153,12,3,260,114,90,817,386,318,120,25,16,32,23,11,961,922,576,237,217,194,165,115,14,7,453,342,216,873,373,197,164,64,719,874,854,789,757,751,704,597,558,391,372,326,304,301,300,285,275,208,203,159,133,110,105,99,93,81,74,70,66,52,48,47,42,41,34,28,26,24,10,5,139,76,958,899,801,730,615,551,160,963,901,752,657,584,421 }, -{ 18,60,16,68,167,191,101,118,212,121,35,126,199,146,647,520,55,9,628,806,621,71,24,107,575,346,363,132,446,463,364,0,566,92,562,28,271,411,252,1,727,21,815,48,407,150,604,598,694,279,932,154,608,49,589,493,439,22,5,7,124,109,706,419,10,108,13,354,14,23,640,467,375,96,273,158,848,302,955,535,175,195,39,818,534,105,125,100,221,522,676,264,777,12,51,50,159,329,32,265,65,259,362,917,98,20,826,783,149,37,31,581,95,169,43,67,97,46,223,147,907,166,590,64,246,36,2,967 }, -{ 352,230,531,160,36,748,854,217,93,669,728,137,251,689,871,699,373,228,574,258,202,752,351,717,559,120,144,268,318,260,219,203,269,201,831,533,839,567,539,187,840,213,816,489,679,82,1,317,851,332,44,141,55,295,855,206,30,617,863,418,83,345,926,96,180,443,800,473,116,10,143,326,110,35,406,564,131,224,22,860,276,64,450,28,98,9,21,190,957,466,822,968,244,164,31,434,856,169,384,661,69,898,0,365,730,824,284,125,442,253,128,372,873,498,88,530,922,776,261,165,494,48,237,86,68,940,39,927 }, -{ 15,13,51,23,0,77,8,4,5,1,202,33,10,11,165,180,82,22,12,110,115,9,102,197,40,59,342,403,141,120,351,326,7,453,373,31,386,18,93,457,260,49,2,401,318,475,128,28,901,64,269,291,44,494,36,854,719,21,177,14,30,523,961,16,898,57,3,349,421,125,922,99,341,32,730,98,137,203,56,217,317,450,117,615,76,391,498,275,24,352,569,365,95,6,105,308,144,37,196,899,86,65,153,39,535,90,210,629,116,704,247,83,208,237,48,661,752,638,509,17,758,402,133,551,143,139,817,244 }, -{ 101,9,100,0,88,217,252,68,39,35,352,562,175,30,115,230,752,213,265,419,13,317,197,166,180,154,237,83,212,158,124,64,321,777,382,208,1,336,410,65,194,759,329,694,36,141,826,289,23,365,724,341,429,128,509,69,165,570,345,676,909,96,346,756,553,21,593,372,854,702,498,55,799,264,399,67,86,190,28,468,589,768,51,364,308,144,677,755,689,323,125,722,482,610,547,391,333,137,789,812,189,546,49,32,952,310,247,274,131,72,16,344,98,10,671,351,435,386,251,478,285,244,901,167,160,484,706,164 }, -{ 32,64,95,147,288,21,90,5,519,470,49,61,0,356,22,48,115,362,97,247,312,141,835,387,560,57,56,4,182,128,20,237,178,59,18,11,31,13,107,214,202,28,298,217,44,76,316,7,65,43,259,180,819,874,51,40,23,216,173,330,207,197,150,25,2,86,729,324,120,376,279,140,612,392,595,104,72,66,29,6,352,37,12,210,678,414,172,683,779,490,482,317,291,165,134,102,81,77,58,45,33,26,195,864,795,304,858,87,54,660,427,707,878,465,357,501,232,753,205,177,170,126,117,91,19,597,230,212 }, -{ 24,16,14,35,7,18,69,1,50,46,75,5,2,58,163,67,54,70,0,71,28,502,60,48,38,12,9,21,189,103,155,140,267,223,281,108,37,171,430,92,394,65,68,22,230,513,83,10,23,181,32,55,309,87,45,36,236,51,335,29,220,149,307,99,61,133,112,141,64,13,780,52,6,115,128,227,270,72,89,852,537,328,17,150,474,49,807,114,767,221,552,186,96,290,95,20,246,366,77,443,400,137,202,86,269,486,666,388,237,540,25,278,477,217,4,536,218,765,177,19,125,180,165,126,113,318,251,39 }, -{ 195,18,354,265,252,411,39,9,363,167,101,682,271,132,16,121,60,1,333,203,21,593,35,146,520,156,364,447,639,360,212,5,24,327,23,627,668,310,404,13,48,664,286,100,538,0,777,676,77,98,821,7,68,33,692,446,865,93,158,576,159,116,115,647,966,883,551,407,272,107,51,687,120,591,463,326,137,71,102,857,31,781,421,37,586,30,44,329,379,50,125,374,166,105,92,96,621,709,142,65,36,127,562,475,109,403,14,126,118,70,346,223,479,199,805,450,190,43,20,191,936,905,656,128,254,12,2,202 }, -{ 4,115,13,5,23,141,51,180,2,202,1,217,11,269,318,3,77,341,7,6,317,33,365,0,21,12,352,197,165,9,15,32,102,10,137,40,177,308,752,64,291,31,22,901,349,372,28,8,59,403,90,494,30,237,498,44,120,37,401,125,48,39,14,93,17,244,49,457,569,509,128,153,16,386,98,143,304,36,873,475,196,391,117,482,342,253,210,203,110,453,116,247,373,221,326,24,216,18,144,72,421,260,95,55,134,450,961,576,86,139,719,105,468,35,164,82,57,127,160,89,864,678,523,351,88,275,67,546 }, -{ 7,71,24,14,16,35,140,92,189,149,150,108,60,68,18,230,97,69,66,314,273,267,458,388,336,38,2,65,232,251,175,399,118,46,398,172,67,28,462,246,36,55,375,0,705,1,21,124,154,22,298,302,135,95,451,733,877,126,594,423,345,64,467,101,9,74,517,29,48,86,602,236,6,20,191,83,596,52,330,380,32,357,43,5,10,674,50,12,133,49,429,723,103,711,212,346,104,192,114,107,915,278,167,387,37,443,324,309,121,823,54,125,96,633,566,221,796,484,75,109,547,603,13,23,289,809,575,607 }, -{ 1,22,31,5,36,12,105,44,2,86,21,170,98,180,127,0,55,141,64,23,7,352,28,13,9,128,116,125,164,239,4,301,49,115,6,95,197,37,3,160,242,51,341,752,202,83,498,269,10,96,165,144,48,253,244,285,901,217,320,365,208,569,137,8,338,299,318,395,293,109,654,93,512,143,32,50,237,317,159,402,864,11,15,708,776,873,169,201,14,35,99,67,638,39,954,30,844,531,479,678,77,69,456,740,533,16,403,308,268,120,751,951,33,961,947,457,286,238,401,276,482,203,601,17,506,312,509,18 }, -{ 97,66,192,7,560,52,20,2,135,74,43,173,324,104,580,414,226,107,147,750,204,29,174,500,376,568,825,707,222,0,356,470,77,32,331,194,90,38,729,16,819,298,92,172,355,22,60,64,888,595,357,232,24,18,259,712,202,353,426,81,5,362,262,874,427,526,49,330,14,178,95,885,387,21,10,138,37,861,142,6,33,102,86,28,889,4,359,65,312,36,858,126,59,1,112,792,673,337,58,151,177,91,35,113,319,291,9,115,145,13,636,501,342,448,278,140,12,87,61,71,583,294,751,465,237,246,230,325 }, -{ 101,0,68,9,252,154,124,364,166,35,39,100,24,65,419,16,149,694,71,265,329,28,439,158,346,88,30,289,212,404,55,671,703,562,570,49,274,175,429,21,706,589,18,553,118,375,1,722,67,302,22,109,962,190,677,382,333,108,60,23,967,191,168,95,69,48,344,14,51,336,114,254,676,610,484,13,398,10,83,92,7,520,310,857,818,125,264,593,189,64,133,185,826,438,12,32,159,865,221,103,535,50,194,695,286,105,36,604,96,169,420,230,283,701,167,241,131,140,2,350,656,115,272,5,239,637,812,98 }, -{ 39,100,127,30,737,836,9,254,856,31,166,190,98,395,0,385,88,931,625,131,373,264,863,93,827,28,228,120,44,125,1,219,116,137,110,382,371,55,13,101,731,299,260,144,908,442,21,77,265,23,456,64,203,51,599,242,33,187,49,326,310,22,224,578,202,5,450,36,272,18,276,16,141,795,82,105,916,284,165,274,318,48,95,512,944,35,716,478,24,935,258,201,616,851,32,557,102,96,252,109,68,269,128,351,435,492,83,724,86,67,7,10,704,293,772,59,921,329,846,156,924,286,197,438,717,4,291,244 }, -{ 17,5,45,21,14,2,48,3,32,155,106,227,186,181,38,29,61,209,62,46,328,133,400,80,243,54,56,52,1,51,832,23,19,50,99,255,114,430,6,84,543,536,12,514,401,236,27,37,137,361,552,453,119,136,34,311,58,218,171,221,76,72,4,754,115,281,108,13,285,496,65,454,629,513,41,207,308,540,421,26,290,805,480,541,488,920,657,202,475,11,487,787,128,86,89,569,57,739,151,838,502,36,270,59,403,208,90,10,7,721,474,22,263,745,576,0,457,659,592,663,587,25,161,129,165,148,323,894 }, -{ 131,613,224,856,228,406,716,274,827,30,100,219,190,39,166,863,88,931,924,829,944,31,382,44,625,9,127,1,442,385,187,98,116,731,93,578,258,254,530,816,137,871,160,616,960,96,36,310,265,0,371,203,144,836,410,438,264,435,795,125,242,21,202,120,201,531,276,908,51,921,128,23,101,49,839,846,28,737,48,326,5,83,778,13,110,64,284,105,35,492,272,10,557,33,938,115,299,77,252,158,456,367,268,669,217,260,165,213,32,177,22,800,352,473,86,102,69,197,574,321,318,567,141,935,593,403,55,180 }, -{ 352,217,752,141,954,864,64,372,437,269,180,115,498,177,349,776,579,291,317,247,77,947,873,717,304,318,678,237,179,23,197,128,33,0,35,165,13,275,68,210,457,341,459,1,67,410,32,143,365,65,244,202,102,9,160,140,137,225,569,12,36,18,125,75,51,134,93,751,15,546,509,86,708,482,928,713,330,312,201,164,144,100,10,7,521,268,246,44,24,21,16,558,55,851,682,342,260,245,120,117,101,98,39,28,726,363,116,110,30,189,72,478,83,744,953,841,824,672,563,358,166,114,92,31,5,386,196,69 }, -{ 141,217,317,180,352,365,115,341,5,372,23,13,752,498,253,244,15,1,237,2,51,197,269,0,7,165,21,202,64,349,77,6,137,143,4,318,3,9,901,546,33,177,308,11,32,10,160,12,48,49,482,30,22,125,468,98,373,247,120,102,93,31,864,110,509,260,531,391,28,44,494,437,36,450,569,90,40,490,453,326,221,219,203,16,128,96,82,386,164,72,873,291,251,224,187,117,403,401,210,39,131,116,24,18,473,144,86,37,629,148,105,8,533,951,758,475,421,228,139,170,134,95,65,35,734,704,617,275 }, -{ 5,2,45,17,14,29,48,1,21,58,181,38,50,61,3,133,46,155,171,186,114,52,32,27,281,19,6,218,36,236,227,54,361,151,51,12,754,209,26,400,80,137,514,243,65,106,552,487,13,480,334,23,285,86,412,328,108,4,283,502,311,37,56,99,323,22,745,657,208,202,25,62,72,128,115,838,760,59,430,7,34,536,64,70,454,11,76,10,28,255,119,803,194,787,67,421,0,576,57,859,496,103,84,96,18,532,75,165,89,453,389,223,24,920,401,163,73,113,308,828,402,77,739,112,287,148,457,513 }, -{ 6,25,2,119,790,29,113,76,26,45,483,655,887,42,292,32,19,4,59,128,151,207,1,306,84,17,814,106,240,90,112,209,61,145,14,177,77,64,65,52,833,27,122,179,491,210,70,0,72,311,115,40,255,58,614,74,85,7,214,202,710,22,5,57,469,21,141,11,123,80,476,95,36,396,33,10,24,269,38,137,102,66,425,23,416,49,194,86,275,504,13,216,56,402,318,46,358,18,138,28,460,624,9,148,50,174,129,618,51,205,87,75,16,291,186,12,217,249,222,287,454,20,54,99,243,315,117,114 }, -{ 23,13,51,115,2,4,5,0,141,180,7,11,217,3,33,77,6,1,202,9,317,10,102,197,21,269,40,352,341,32,12,165,16,22,64,318,365,28,128,15,14,18,752,137,59,24,291,308,177,125,31,17,403,498,237,494,372,98,49,117,901,93,196,30,44,153,457,349,8,37,120,134,90,116,247,342,36,482,401,95,35,210,143,221,86,453,260,203,144,475,326,48,244,110,391,386,55,304,873,39,19,569,961,421,105,509,719,546,450,253,864,216,20,402,29,523,72,57,50,139,25,730,373,468,275,65,82,629 }, -{ 23,13,51,202,21,141,115,5,165,318,32,12,403,197,453,1,269,120,15,128,2,180,475,125,308,457,401,7,48,6,386,64,0,730,4,9,719,137,3,10,523,18,33,14,37,421,16,99,494,11,260,450,341,221,17,196,93,77,40,217,22,117,90,95,237,899,31,391,247,352,326,28,24,102,19,153,30,317,98,961,817,134,82,44,25,59,8,241,110,49,365,20,26,291,27,61,177,36,351,498,509,569,402,39,203,758,29,72,57,45,629,350,54,116,316,96,752,50,38,349,67,901,65,46,342,304,285,58 }, -{ 39,9,100,30,31,127,44,88,0,276,98,131,1,385,254,442,166,49,908,116,187,190,935,201,219,284,827,299,28,224,144,829,96,228,36,274,137,141,101,21,265,716,382,48,51,258,202,23,352,22,125,836,93,856,613,128,839,158,371,264,578,395,13,55,16,180,662,244,269,252,217,567,492,110,310,35,64,77,272,83,268,410,931,203,120,326,752,260,68,318,18,489,293,574,625,160,24,33,115,86,159,924,242,373,165,438,5,450,69,102,616,213,197,918,863,321,295,717,291,82,731,177,456,317,406,7,599,737 }, -{ 22,109,49,28,159,185,95,9,105,131,272,327,254,1,67,286,36,39,35,168,86,83,55,169,505,158,224,374,420,127,584,208,98,219,312,578,31,347,535,601,0,69,708,424,44,114,103,30,160,627,346,64,141,194,187,518,175,96,239,345,616,892,10,128,164,143,896,116,137,50,12,5,2,237,228,913,533,13,23,7,21,371,320,597,688,538,751,912,352,323,251,716,165,115,634,202,258,197,498,637,37,531,180,797,874,51,253,768,48,101,890,16,189,201,613,24,752,385,14,170,285,365,406,789,244,218,46,133 }, -{ 5,1,21,2,48,14,12,32,22,36,0,17,54,10,38,3,37,86,50,45,65,28,51,72,281,23,4,6,58,114,89,46,137,13,270,99,430,11,7,208,76,202,181,61,115,403,155,9,133,18,540,64,361,221,29,323,480,285,49,128,24,95,218,401,657,421,290,745,19,576,194,55,308,754,59,453,513,920,148,880,96,341,502,52,16,475,77,67,842,40,283,859,318,197,402,494,171,141,474,244,543,757,165,775,90,541,27,33,180,57,83,227,164,217,428,328,269,108,425,569,514,207,31,143,223,263,102,503 }, -{ 141,352,269,372,351,217,854,82,752,922,318,180,954,260,317,15,349,1,202,64,120,898,717,77,67,35,864,291,69,365,137,851,437,36,22,5,247,86,373,4,457,450,244,165,189,163,140,68,13,237,901,115,128,304,23,21,341,98,125,177,51,93,32,28,961,160,96,494,110,95,10,0,719,253,661,523,326,767,83,730,275,44,386,418,40,12,817,210,19,17,102,59,45,18,7,579,498,482,615,403,144,11,6,3,203,76,822,475,49,48,31,33,293,284,268,228,187,947,899,587,583,485,474,367,342,300,245,100 }, -{ 144,613,203,406,669,418,326,137,228,96,679,494,160,816,1,817,822,36,317,859,840,83,856,876,855,217,251,219,863,831,944,202,576,365,539,93,800,5,345,530,77,128,44,957,748,141,13,839,30,23,21,778,143,341,115,473,617,332,201,64,120,190,492,456,829,531,349,367,716,258,98,48,578,116,180,924,403,187,31,515,966,692,574,442,131,86,931,719,523,450,9,224,351,291,860,752,82,28,10,244,51,371,22,276,39,102,125,730,261,50,851,269,827,335,318,871,704,916,268,110,898,69,67,498,206,177,615,805 }, -{ 15,13,23,51,202,1,21,33,5,269,180,217,2,141,308,12,120,0,352,165,7,221,115,117,48,32,6,318,197,4,153,9,260,82,196,453,134,457,3,40,386,523,730,110,14,719,77,401,31,403,450,137,326,37,102,341,16,351,8,128,752,11,475,93,18,498,317,44,365,391,64,30,98,237,72,10,49,421,22,99,901,494,509,28,24,899,17,125,39,817,569,854,116,203,59,291,177,89,961,95,36,244,629,758,105,247,90,372,241,864,349,546,670,898,96,35,144,86,65,350,373,50,139,304,61,160,922,615 }, -{ 23,115,13,51,77,0,1,4,365,2,141,341,5,33,202,217,11,10,317,9,180,102,3,7,6,15,269,22,318,197,165,64,352,12,40,494,403,21,28,31,128,308,125,32,453,59,177,18,291,16,401,475,901,14,24,752,237,93,342,137,349,457,569,44,8,17,372,30,153,98,120,95,49,210,36,498,196,117,110,509,482,421,116,247,386,873,304,37,391,39,629,244,48,139,90,203,143,134,55,86,523,450,326,468,260,275,57,961,144,719,65,35,402,216,730,221,19,253,373,46,50,734,437,678,576,96,758,551 }, -{ 531,373,728,160,943,559,717,260,93,269,332,206,533,244,352,384,261,535,964,564,120,110,10,253,295,137,365,318,141,55,143,959,180,617,36,851,911,843,197,661,203,873,282,1,752,940,341,699,968,901,82,417,326,21,144,450,22,351,317,434,64,642,498,855,824,574,202,926,473,860,800,896,164,23,28,898,8,51,13,258,15,116,35,816,567,127,187,237,776,9,951,219,601,268,115,811,165,217,201,864,131,98,406,854,77,523,251,902,922,125,48,345,44,31,16,704,96,499,86,83,489,871,367,299,177,72,817,24 }, -{ 1,31,36,170,55,86,22,44,127,5,301,64,98,164,2,116,740,105,299,12,10,242,237,125,169,338,9,0,21,143,7,512,23,28,841,128,141,13,239,51,395,180,654,208,293,685,37,144,870,923,95,6,599,83,197,115,160,456,900,352,67,498,506,253,165,638,49,3,268,492,137,965,4,479,14,393,763,269,244,185,708,202,109,341,96,365,50,762,509,933,276,48,284,951,367,505,864,751,752,546,320,601,597,35,8,569,634,312,323,217,558,201,391,824,317,401,308,901,457,32,837,159,535,93,873,54,114,38 }, -{ 13,23,51,115,32,141,77,177,202,33,64,269,90,4,102,318,128,40,59,21,217,291,137,180,352,210,95,10,48,0,22,5,196,494,15,7,237,14,117,49,18,216,197,125,342,98,31,304,11,9,165,153,403,317,247,86,752,134,28,275,349,16,24,116,365,341,2,6,76,44,453,17,12,20,30,300,221,93,39,143,139,36,1,19,3,402,326,386,312,105,457,65,244,194,8,576,498,901,308,110,99,72,372,120,401,203,50,25,241,144,61,26,208,96,678,450,160,615,421,391,127,114,57,46,37,35,27,947 }, -{ 202,260,120,450,318,51,269,77,23,351,1,326,13,128,82,137,141,21,33,15,494,102,523,817,5,403,110,165,922,64,203,197,854,125,32,180,177,291,48,153,196,93,116,12,342,98,352,373,40,4,115,7,475,144,349,36,217,90,2,453,386,16,0,285,95,44,615,237,59,49,31,457,704,6,898,210,24,58,96,86,30,719,117,70,401,216,8,275,28,22,14,402,17,247,50,39,29,18,421,99,37,20,10,391,304,61,25,752,341,730,678,9,365,859,576,473,139,45,961,692,293,661,498,317,214,132,35,76 }, -{ 899,523,102,730,33,153,196,117,719,23,475,51,817,13,15,403,453,5,4,342,77,494,40,120,21,11,450,202,421,59,457,12,805,165,139,134,26,19,17,2,1,300,386,801,961,57,32,27,7,6,3,880,197,99,361,757,670,128,125,72,58,56,48,45,37,14,318,64,49,770,247,82,576,260,884,775,635,629,509,485,456,402,391,180,177,141,95,89,84,76,70,62,61,54,53,38,29,25,758,401,269,262,583,409,365,341,331,217,52,968,967,966,965,964,963,962,960,959,958,957,956,955,954,953,952,951,950,949 }, -{ 202,494,403,475,523,817,453,450,318,402,120,576,51,13,77,102,342,33,260,128,23,326,5,899,15,4,82,615,210,269,137,351,291,59,196,141,90,730,40,386,285,214,177,21,719,389,49,11,65,61,30,22,48,153,117,457,114,12,3,98,64,44,39,31,1,922,194,216,84,349,165,95,32,28,10,0,757,197,421,474,123,38,961,887,805,690,629,551,401,283,263,207,139,125,118,113,58,848,503,115,41,880,275,24,17,422,319,104,942,854,803,801,704,671,509,416,400,393,372,334,237,227,217,186,180,151,134,96 }, -{ 2,29,52,112,66,87,70,151,135,7,226,58,74,307,186,294,172,287,549,644,334,5,14,97,46,75,45,227,331,113,145,6,25,315,155,337,222,1,61,192,32,243,163,311,64,220,38,400,43,262,171,69,21,37,624,461,20,884,122,849,631,416,26,16,48,86,27,24,42,22,19,278,138,92,353,635,36,609,232,0,128,140,10,500,324,50,17,72,665,59,12,95,76,90,409,209,35,4,396,491,614,65,18,496,415,54,721,568,592,67,632,49,141,137,80,28,89,204,659,869,60,106,426,845,448,177,207,115 }, -{ 1,349,652,5,260,291,77,39,342,102,120,23,100,888,13,269,64,340,264,51,303,698,32,2,202,21,9,296,33,98,70,385,163,638,318,137,327,87,293,58,50,128,48,195,69,774,141,75,121,7,658,850,326,96,371,284,223,931,863,759,132,126,92,71,221,678,203,82,551,961,937,615,575,563,494,105,83,67,55,36,30,27,17,771,418,115,90,31,156,914,687,393,372,12,6,3,622,144,922,898,854,731,691,478,403,367,363,352,351,333,310,286,170,146,0,950,230,93,95,49,919,954,947,865,851,765,751,719 }, -{ 1,5,2,13,4,23,7,3,15,0,6,180,51,115,141,341,11,77,269,352,21,901,217,197,365,33,12,32,177,752,317,202,318,165,40,9,102,10,291,93,8,569,31,22,349,498,120,90,44,110,401,59,37,304,326,48,17,64,372,403,196,117,16,98,14,457,210,453,125,494,28,36,386,629,247,153,475,30,308,260,134,873,116,253,373,450,18,237,244,482,203,49,128,961,275,137,144,216,509,523,421,391,143,342,24,719,105,95,55,72,76,89,39,206,437,139,468,57,579,758,730,864,546,127,221,96,734,19 }, -{ 14,7,16,46,24,2,35,70,92,58,5,38,75,18,140,60,87,171,220,54,1,155,69,307,50,21,163,48,71,32,112,0,37,12,23,278,780,502,126,9,61,52,186,172,135,45,28,64,29,13,67,227,20,107,22,115,97,513,51,10,267,72,68,270,128,230,89,314,666,330,246,141,6,232,189,36,400,177,66,108,290,150,17,309,55,430,767,334,77,474,121,262,103,243,409,223,137,83,43,113,202,592,217,461,49,95,315,571,65,181,394,357,86,281,269,774,294,236,380,852,536,845,76,90,25,102,298,4 }, -{ 226,135,87,2,29,66,74,52,294,278,222,220,75,7,172,145,331,70,324,262,97,6,25,112,138,337,140,42,1,92,461,26,69,38,500,58,357,14,380,5,287,16,46,571,232,620,808,632,267,163,32,24,35,583,853,774,43,314,609,45,171,21,298,353,19,802,95,60,151,415,448,409,64,67,192,22,65,396,85,525,37,174,307,189,872,204,20,71,50,12,330,86,622,61,48,27,36,186,394,764,113,54,335,563,114,108,309,150,950,72,155,17,10,572,122,635,544,103,96,606,28,893,246,18,49,230,550,334 }, -{ 15,33,77,117,134,153,102,4,40,196,1,217,21,11,291,13,32,5,177,202,51,115,3,23,141,2,48,317,180,349,59,137,372,128,17,269,342,210,341,96,57,64,365,120,247,12,216,82,221,139,318,110,6,260,93,90,352,898,450,165,10,36,31,197,275,523,7,37,72,494,203,244,457,56,351,579,125,111,8,237,817,326,403,0,752,98,922,961,901,160,277,22,719,730,144,44,206,14,386,899,86,45,482,437,304,373,143,89,569,9,116,453,475,308,253,300,61,105,76,27,638,164,95,49,490,29,18,94 }, -{ 217,15,317,82,351,141,260,854,13,77,23,120,51,922,115,1,21,180,110,137,365,341,352,372,269,349,898,291,36,202,64,5,32,450,318,373,177,128,752,96,304,523,93,33,48,165,326,197,102,0,10,40,901,9,4,160,498,247,90,244,661,203,22,59,482,2,12,143,86,437,386,83,457,28,473,30,67,253,961,11,35,16,221,24,125,117,391,39,7,811,494,88,37,8,69,719,559,3,817,704,237,216,76,72,61,14,873,403,18,642,31,899,210,164,45,730,717,49,179,134,139,851,475,421,251,223,100,56 }, -{ 190,373,31,30,863,908,120,88,110,127,260,442,856,318,254,326,717,935,131,836,228,93,187,44,39,385,299,100,968,274,219,203,82,166,224,197,116,661,276,77,1,217,98,269,86,450,51,371,36,128,180,829,137,372,341,160,704,141,64,435,202,49,395,144,9,23,918,410,28,22,730,778,244,242,351,55,737,523,827,177,851,625,944,382,272,530,317,115,349,352,96,613,492,291,954,32,931,744,716,125,268,258,284,253,686,48,615,515,367,247,21,33,456,165,321,795,10,567,466,225,83,839,102,578,521,919,817,752 }, -{ 23,13,308,115,401,51,165,9,391,21,629,254,125,159,773,197,743,569,49,468,217,438,656,627,341,89,39,558,221,32,317,386,509,350,28,95,530,228,457,867,109,166,406,876,679,48,669,364,219,158,365,346,168,912,810,101,170,105,72,64,143,30,347,258,967,237,148,90,688,274,131,670,272,185,749,843,33,12,10,187,55,175,141,4,734,758,242,196,190,453,261,518,224,902,747,286,482,164,37,333,241,2,439,102,0,424,420,393,706,613,338,153,67,372,351,68,40,310,120,816,634,332,840,35,320,88,86,289 }, -{ 49,5,165,125,21,173,43,623,104,193,422,102,13,7,91,18,95,22,0,192,141,64,48,197,900,693,558,105,51,23,32,232,391,387,314,98,31,116,20,779,202,81,92,319,408,241,16,126,38,77,494,33,784,643,474,11,221,28,712,138,862,663,595,403,350,879,29,510,27,633,180,140,729,397,172,44,4,858,237,61,718,501,359,71,60,58,511,448,370,356,750,490,482,347,344,316,308,177,93,37,24,498,293,115,158,145,72,65,40,830,246,207,63,85,107,841,569,468,414,352,330,326,269,203,69,14,12,2 }, -{ 4,1,2,5,13,23,77,115,15,3,0,341,7,51,6,11,33,202,102,217,12,180,10,141,9,40,21,317,318,177,365,901,197,269,32,165,352,22,59,8,64,31,291,14,494,403,93,17,401,569,752,16,453,37,342,210,110,153,275,18,475,44,125,196,90,28,308,326,386,98,120,117,116,372,457,128,349,36,95,629,49,421,237,48,139,203,260,244,450,498,137,134,304,30,24,523,144,247,373,719,216,57,391,961,86,482,143,253,39,730,509,111,55,221,817,96,615,19,65,873,351,758,99,670,437,72,50,734 }, -{ 843,295,93,120,160,206,36,943,567,373,384,332,268,137,261,141,201,260,110,10,203,531,144,55,64,617,434,197,258,699,116,244,282,318,559,564,964,269,44,352,911,717,253,860,202,180,31,326,533,1,940,143,473,417,728,661,276,351,959,187,22,341,851,535,219,871,855,28,367,127,82,131,115,450,365,86,901,752,926,317,21,51,98,48,77,165,23,105,224,96,968,662,217,13,8,902,574,489,125,817,349,800,523,515,83,704,49,811,498,164,494,39,5,393,228,32,291,251,128,9,12,898,642,576,69,67,873,839 }, -{ 192,81,43,173,426,879,7,715,172,104,712,91,636,526,232,825,568,97,560,5,95,681,448,66,49,861,32,387,370,74,20,750,33,204,22,707,330,729,718,140,61,0,6,356,397,69,21,117,422,347,135,359,38,92,102,263,348,64,174,4,414,153,888,237,138,319,76,298,40,13,885,52,2,107,86,500,25,196,784,595,77,819,241,180,134,58,207,85,29,42,31,355,65,577,72,18,28,1,343,48,392,23,10,126,89,324,37,189,344,233,314,11,933,71,14,511,16,408,115,673,46,498,45,671,125,60,858,246 }, -{ 475,453,403,51,33,102,494,23,196,13,202,153,117,77,0,318,128,757,421,22,342,730,899,817,18,805,65,15,958,450,134,4,402,24,36,59,269,40,49,210,401,1,28,697,670,64,11,114,291,48,16,576,108,386,523,141,57,177,21,20,86,165,133,95,90,120,365,317,326,260,221,180,137,31,10,115,752,99,498,457,391,361,352,70,50,32,349,113,9,6,3,864,838,770,743,373,351,338,268,242,206,125,116,109,5,283,253,84,17,961,801,791,546,372,341,237,217,214,205,194,163,143,96,72,69,68,30,14 }, -{ 141,269,260,318,352,202,120,351,349,137,854,82,1,851,922,5,180,372,291,64,32,947,21,15,77,752,494,13,48,304,33,7,51,717,23,217,373,177,128,678,450,115,237,326,317,70,898,36,403,704,312,4,160,102,86,90,968,247,95,87,196,49,275,244,197,22,165,67,96,35,288,203,817,735,125,342,144,93,16,216,163,50,44,31,83,954,2,69,597,457,241,59,153,961,221,110,98,39,30,9,8,901,661,551,523,473,442,386,367,284,210,864,117,61,12,0,800,29,24,863,859,730,719,475,453,385,316,293 }, -{ 15,1,2,13,5,4,3,0,23,7,6,115,217,12,180,197,9,51,21,11,352,961,8,10,165,77,457,341,141,317,22,14,901,33,31,117,93,120,102,40,134,752,202,365,260,16,37,269,569,110,32,44,28,318,64,18,17,48,351,719,153,386,177,82,291,36,196,98,873,450,49,125,59,128,498,403,72,326,482,30,523,401,99,854,308,203,24,453,89,137,95,391,509,111,349,86,139,730,372,247,144,55,210,116,342,494,304,475,373,148,922,90,105,237,661,35,579,899,143,221,39,19,629,275,421,758,244,468 }, -{ 166,39,274,404,101,252,190,30,333,9,310,0,100,438,656,158,265,88,68,625,329,530,553,419,344,539,254,455,793,778,21,48,759,228,49,676,1,131,960,709,557,731,520,154,23,35,382,13,124,364,604,677,105,28,272,16,286,406,212,31,51,18,613,219,224,593,840,159,167,125,36,98,65,518,669,865,118,24,44,96,213,748,264,777,115,83,175,22,86,538,957,221,127,55,327,5,10,857,694,688,137,258,795,410,806,627,95,71,577,289,128,116,578,32,50,242,69,724,187,352,562,346,616,67,33,827,846,191 }, -{ 28,0,1,9,22,65,12,83,67,55,109,50,24,5,36,49,39,96,35,238,16,18,2,21,114,124,69,37,7,218,48,23,323,103,158,160,168,54,51,128,285,154,13,68,185,137,14,194,99,141,95,169,181,418,289,420,202,433,86,30,75,480,175,10,505,105,115,32,402,281,223,389,269,208,646,503,745,64,133,46,180,657,159,800,531,547,251,956,101,429,4,318,31,149,163,6,70,346,58,532,822,533,484,757,797,165,335,252,197,735,570,352,283,361,71,98,29,118,3,535,927,766,221,217,38,799,237,308 }, -{ 15,1,2,0,23,5,51,13,7,6,9,180,12,115,3,457,197,8,719,21,730,4,120,901,141,202,14,33,165,341,453,386,82,31,260,351,365,523,308,64,37,22,44,401,450,32,40,16,93,77,110,10,98,961,403,36,102,899,28,217,11,125,352,196,48,318,137,317,475,153,18,269,49,569,116,752,99,326,421,128,24,30,221,95,39,203,117,873,144,817,629,758,177,55,86,35,494,509,898,373,59,237,105,17,65,291,96,89,498,670,482,247,253,134,468,38,143,54,244,72,90,372,160,854,127,210,391,801 }, -{ 9,39,166,49,30,28,0,158,22,131,180,100,219,35,352,190,345,228,1,752,88,498,115,141,274,317,482,109,83,128,930,251,36,217,95,365,230,55,101,160,254,165,224,159,168,23,341,13,105,31,208,187,258,927,310,197,69,137,333,901,864,364,64,185,269,86,344,505,252,202,404,68,286,873,539,372,96,669,438,51,10,164,67,5,868,346,244,637,439,2,7,21,748,323,406,418,318,16,237,44,272,50,840,706,420,265,127,98,946,735,793,768,579,169,125,530,175,148,327,857,702,678,238,116,12,48,533,335 }, -{ 61,311,80,209,45,29,5,58,2,151,454,106,17,6,667,243,255,738,52,592,70,496,287,74,483,1,833,112,549,27,207,119,26,315,32,227,378,19,64,14,138,25,84,263,75,742,186,631,113,21,136,56,48,887,62,46,7,307,469,72,76,145,50,73,66,161,128,495,148,425,814,651,491,4,34,95,869,86,38,87,3,334,240,290,383,396,845,42,53,306,12,171,65,141,163,445,135,155,11,22,54,297,90,331,179,226,655,632,37,614,361,292,663,89,400,13,36,23,10,137,294,666,99,659,250,220,59,51 }, -{ 31,44,299,22,125,599,456,685,116,28,492,393,170,242,144,268,963,301,506,1,95,558,367,36,239,55,489,0,918,109,206,23,105,9,10,434,127,51,384,13,86,286,948,479,98,64,841,5,338,2,93,12,203,498,164,7,512,168,21,143,165,49,903,940,320,401,391,137,8,37,900,417,352,141,115,128,546,253,457,959,237,14,185,197,308,169,202,395,282,421,374,911,180,740,332,293,386,6,24,312,855,538,509,752,244,473,65,928,762,160,638,617,341,269,961,867,949,730,654,403,551,499,965,523,48,719,16,453 }, -{ 187,258,926,839,574,860,93,219,406,228,871,160,531,224,137,902,201,120,116,36,203,144,669,268,318,131,442,567,816,295,434,908,851,533,843,44,384,717,202,800,559,373,489,728,141,332,855,206,261,276,1,260,269,251,617,326,180,317,385,940,110,613,217,959,55,31,450,352,968,365,115,197,64,699,679,244,98,96,83,23,10,840,341,77,492,473,899,856,831,661,143,127,190,918,752,539,21,284,418,13,943,748,662,911,564,530,48,165,291,523,704,128,345,125,822,351,169,954,86,349,367,922,776,535,177,51,824,22 }, -{ 7,107,24,60,349,232,16,51,18,75,9,291,87,23,71,269,92,126,77,141,64,177,307,150,461,35,220,14,330,37,121,0,46,279,115,947,267,132,32,12,172,55,112,309,13,10,448,278,202,21,70,2,372,210,852,678,441,304,28,5,328,217,147,54,48,786,660,259,359,318,155,90,334,181,180,140,872,108,22,163,102,31,409,314,394,352,341,281,171,68,30,622,294,236,20,423,49,626,33,760,186,58,687,415,50,39,407,128,43,771,365,197,237,1,400,929,498,888,590,366,342,270,192,135,100,76,61,675 }, -{ 15,1,2,0,5,7,13,6,3,4,115,23,180,9,12,901,51,8,341,961,365,197,10,22,141,82,33,351,14,11,77,120,31,202,457,165,217,308,134,352,28,64,102,21,269,569,110,18,260,317,40,44,16,37,36,719,93,318,237,137,99,177,450,30,125,128,386,49,752,153,55,498,17,391,98,24,111,403,32,39,196,117,401,116,373,898,730,523,326,291,453,95,854,509,304,247,86,59,372,546,482,349,143,475,899,203,244,494,139,35,48,642,253,811,144,105,210,160,758,421,148,629,221,90,164,65,127,638 }, -{ 23,51,13,202,5,12,115,21,141,165,1,32,2,318,197,15,403,180,453,7,6,3,401,269,4,0,128,308,37,10,99,457,14,11,9,120,64,22,48,341,137,386,494,475,17,77,16,719,18,217,125,31,352,523,421,59,730,90,153,365,391,237,177,317,28,40,450,260,72,221,33,8,569,93,509,961,44,19,89,102,291,98,247,326,498,76,24,49,817,899,758,30,57,629,117,61,36,110,29,139,20,210,402,82,304,196,95,45,351,752,38,285,116,203,134,349,241,96,468,54,216,901,482,576,546,25,275,342 }, -{ 2,1,77,64,141,6,3,7,0,33,102,5,10,13,23,14,269,180,15,217,165,291,352,40,117,197,9,17,115,202,237,4,128,11,22,341,12,153,349,134,196,16,51,86,318,317,177,36,19,125,137,95,342,18,752,8,28,365,31,210,457,143,139,498,59,372,21,164,57,304,82,120,45,27,38,275,24,49,110,391,386,111,93,44,244,901,260,509,56,32,41,450,98,65,99,351,30,961,55,37,403,864,569,494,29,678,48,312,453,326,546,203,20,25,54,401,79,373,402,61,253,26,46,62,719,76,475,523 }, -{ 345,531,332,269,717,260,373,317,728,752,351,180,352,533,10,365,498,82,160,251,244,36,901,143,217,341,93,55,1,141,873,864,898,35,9,564,64,851,951,22,417,137,253,28,617,169,67,69,120,559,854,197,601,482,318,546,115,768,21,96,83,661,261,876,110,372,237,164,144,535,574,203,800,206,16,86,349,31,824,699,50,48,831,902,843,860,434,968,125,221,579,959,700,679,384,926,922,295,7,51,23,291,148,418,230,202,24,943,468,896,201,5,776,77,839,44,258,954,816,13,811,940,844,637,473,868,822,308 }, -{ 92,16,189,7,77,60,388,140,33,153,196,102,35,117,230,134,150,733,314,24,14,71,21,915,246,1,108,594,97,18,32,48,66,126,69,517,121,462,64,22,98,13,399,723,65,5,291,95,67,451,674,267,232,217,653,298,2,23,38,223,104,711,83,0,197,90,36,423,149,46,125,49,167,28,68,195,20,172,120,251,86,12,289,214,508,115,386,633,236,133,10,50,350,458,191,165,330,51,107,31,260,6,43,55,271,841,450,457,273,326,796,146,509,221,603,380,237,702,9,194,4,202,199,103,52,357,29,74 }, -{ 234,142,178,202,639,5,49,450,77,70,786,416,929,48,259,455,21,0,878,147,315,481,198,329,427,318,1,125,105,120,61,113,534,846,58,344,12,132,95,518,465,325,22,31,163,557,494,13,159,32,761,767,128,590,146,37,798,195,269,711,371,291,402,265,50,342,158,362,260,39,98,221,884,687,30,64,279,137,2,167,10,771,165,35,640,626,522,403,293,310,102,23,817,347,170,28,581,99,141,236,127,150,107,51,271,87,763,623,845,212,7,18,423,194,17,523,112,345,663,33,44,376,239,199,121,391,116,75 }, -{ 81,715,192,712,681,636,104,173,750,91,370,0,74,95,718,22,7,825,879,20,49,560,43,64,422,172,397,66,138,207,784,86,500,65,28,18,707,204,414,10,577,174,319,426,32,38,312,888,348,330,4,526,289,52,355,61,511,861,347,33,237,29,102,232,448,31,21,353,835,124,5,6,2,643,36,85,97,117,153,77,306,59,134,819,140,673,671,24,40,120,165,729,568,240,135,280,324,105,125,98,344,519,233,387,194,288,196,693,474,241,214,701,44,107,583,314,260,450,847,287,69,25,872,587,343,84,9,817 }, -{ 23,13,51,15,0,10,9,115,1,453,2,961,4,77,5,457,11,40,33,401,3,7,475,197,102,14,569,165,22,59,12,6,719,32,64,21,99,730,57,17,177,18,37,8,217,386,403,196,28,308,16,31,141,139,111,341,523,120,125,180,153,117,629,391,210,36,45,237,72,899,49,95,202,128,485,247,38,482,24,48,44,509,90,27,260,450,30,19,137,317,365,41,65,291,269,89,134,342,86,304,498,421,474,82,79,148,54,277,758,318,352,46,76,56,326,468,29,670,349,494,275,351,437,300,93,50,546,873 }, -{ 64,297,5,80,445,61,95,311,250,312,472,34,237,86,45,180,738,17,151,58,22,667,869,247,2,14,73,288,194,106,53,21,128,197,352,177,32,29,186,469,833,217,52,165,287,255,3,1,495,391,396,243,176,137,90,546,125,56,161,141,136,592,48,10,209,27,0,231,76,751,62,11,437,315,119,887,115,334,179,23,84,498,651,207,77,4,864,145,13,881,389,304,6,59,49,631,372,65,16,240,164,153,112,378,549,483,584,527,316,26,862,509,409,752,51,7,875,18,933,171,269,196,457,283,241,148,114,19 }, -{ 71,16,24,18,60,35,7,92,118,154,68,149,150,14,175,28,124,55,302,97,0,273,126,108,429,140,230,43,375,2,246,109,20,628,69,336,189,9,101,66,38,298,107,65,439,22,517,346,279,345,1,467,419,21,67,169,399,49,48,46,158,847,420,10,570,185,232,251,6,653,29,252,441,314,12,566,637,191,5,535,51,52,508,423,364,533,722,36,32,398,172,74,882,674,917,168,121,95,39,23,621,83,221,159,105,50,505,356,13,701,96,37,484,694,962,173,608,604,135,267,86,104,64,826,329,103,363,236 }, -{ 195,360,156,591,687,771,163,626,70,883,146,132,586,371,407,379,354,48,846,121,293,13,296,31,761,98,18,767,49,105,385,44,279,522,668,21,1,55,23,125,5,518,271,127,590,878,340,10,608,223,33,807,167,259,77,447,116,75,60,658,102,446,265,929,115,128,35,457,221,87,786,301,284,4,95,51,165,395,39,481,698,541,781,291,178,664,372,150,252,777,557,64,30,24,16,153,120,40,558,535,281,107,465,763,638,783,663,393,101,937,9,467,58,196,217,144,61,401,212,199,117,299,941,32,22,817,260,118 }, -{ 13,77,202,318,23,51,33,269,141,64,137,32,291,0,128,102,21,494,4,10,403,217,177,342,5,196,9,349,117,22,153,134,98,95,115,59,31,120,753,18,16,40,48,28,90,372,317,237,49,450,1,86,65,244,352,475,194,11,180,165,142,100,44,125,76,12,116,93,523,275,127,121,24,20,453,365,341,61,859,401,144,82,402,210,198,178,147,88,37,17,2,351,234,105,7,6,326,197,110,30,203,143,922,854,851,427,325,259,118,107,101,72,55,704,421,260,114,36,208,329,265,38,164,864,752,717,558,498 }, -{ 192,81,172,173,7,426,97,232,861,715,43,879,66,712,104,387,330,568,825,74,526,893,91,298,885,448,636,681,140,92,49,560,6,204,135,779,22,5,95,572,707,64,125,726,750,14,370,563,314,20,324,10,362,29,174,246,713,0,718,356,107,138,25,397,85,63,18,38,71,21,441,98,58,500,230,31,501,32,319,408,69,729,189,13,663,422,24,784,359,241,858,165,16,347,263,77,357,623,673,26,888,2,12,353,900,141,23,52,126,37,33,622,278,830,197,48,233,40,443,355,44,42,45,267,87,19,61,237 }, -{ 14,2,1,67,6,24,69,66,7,29,38,108,36,65,83,124,46,52,150,86,25,484,28,302,74,22,388,18,267,398,458,103,50,273,168,97,12,5,16,0,650,135,26,19,160,75,172,189,21,10,208,32,289,278,380,547,782,95,610,140,51,602,118,37,114,451,429,357,42,71,23,324,505,194,149,420,48,143,92,87,17,13,421,115,60,54,70,35,584,96,756,462,20,238,109,185,27,164,64,45,220,244,253,594,3,154,99,138,43,283,335,701,133,309,128,403,797,49,58,732,550,202,169,646,401,423,218,847 }, -{ 202,77,33,13,102,128,51,318,23,64,494,4,141,196,59,0,115,403,40,22,269,210,177,153,137,117,32,90,10,475,291,21,342,15,11,134,352,95,18,65,49,217,86,16,180,36,197,453,165,275,57,1,402,9,194,48,24,341,719,28,105,6,123,349,317,285,523,125,120,372,216,14,450,365,20,457,2,237,7,82,576,98,3,421,12,5,260,247,110,730,116,44,31,901,752,300,8,208,30,498,351,96,93,139,678,164,46,19,401,386,308,817,615,214,50,35,961,758,859,326,160,17,503,391,293,242,221,203 }, -{ 269,318,141,291,77,202,349,217,947,304,33,177,102,851,372,352,753,260,351,120,5,137,854,752,494,275,403,32,922,22,180,475,21,317,30,10,954,31,64,44,418,365,49,28,48,450,39,23,95,341,661,373,82,11,4,36,93,13,61,128,7,6,3,2,859,51,0,197,800,576,96,59,901,69,165,40,203,144,247,1,86,898,12,76,70,160,498,437,342,237,125,9,433,330,238,103,98,67,453,312,864,367,326,253,87,58,361,221,99,90,888,717,678,579,65,774,241,115,50,45,968,951,704,615,473,277,244,134 }, -{ 6,74,138,85,66,222,226,87,42,280,25,135,26,792,500,294,75,29,220,204,70,174,337,145,235,112,278,853,461,19,52,97,1,32,122,38,808,2,256,172,64,889,69,324,380,774,620,802,609,525,7,95,353,21,571,5,65,580,746,415,22,108,140,96,14,241,24,331,63,45,544,287,67,237,267,125,262,92,394,348,103,86,163,632,426,90,194,606,165,630,550,58,53,36,233,76,91,192,357,28,27,17,141,189,416,72,582,486,81,49,114,16,622,113,78,115,10,928,444,537,872,462,46,605,83,350,335,150 }, -{ 9,0,105,39,101,18,16,68,310,24,333,272,252,127,98,518,846,938,28,371,1,916,35,158,286,737,455,31,301,265,327,100,395,616,49,30,254,7,578,55,23,827,118,512,109,44,329,21,65,890,60,320,242,116,137,709,170,51,385,125,48,761,166,14,5,2,13,71,293,131,520,627,154,159,299,557,344,836,12,553,364,93,202,96,167,88,623,128,36,124,506,64,688,212,604,924,910,931,120,284,50,144,10,419,22,165,219,32,37,95,77,110,121,326,67,403,404,203,442,197,187,6,141,676,276,260,239,33 }, -{ 2,14,1,67,46,24,108,29,83,69,38,103,52,75,133,236,309,36,114,28,50,18,398,135,6,65,458,278,7,238,74,87,160,388,124,220,732,0,267,262,66,149,532,335,283,25,412,71,16,5,96,55,547,154,70,273,602,22,302,418,429,218,516,366,646,150,336,357,86,696,175,26,189,54,12,68,118,226,35,172,324,58,582,19,486,208,9,21,594,109,531,112,45,484,140,596,251,60,95,323,17,10,32,37,194,394,64,650,48,168,163,145,42,571,97,222,23,420,505,27,181,92,389,533,606,171,361,99 }, -{ 22,1,28,105,95,49,55,67,168,159,239,65,14,320,35,0,2,36,114,7,170,109,83,12,169,347,194,50,301,69,9,24,5,424,164,185,103,133,654,46,312,420,16,127,10,175,158,64,584,21,23,51,98,143,31,86,286,13,37,289,6,336,389,48,283,505,96,124,68,38,638,512,160,208,39,141,202,18,115,189,128,395,54,623,874,338,237,713,547,44,272,308,740,137,149,371,125,251,32,30,518,345,844,535,180,3,293,928,756,916,242,29,835,165,538,708,327,323,99,737,484,221,401,218,533,374,253,154 }, -{ 66,7,172,97,232,92,314,568,298,140,192,380,135,330,74,324,387,448,357,14,526,126,38,246,204,16,426,107,572,52,2,808,712,501,359,60,69,278,29,230,32,779,441,500,35,95,550,5,21,22,893,6,43,563,392,104,267,46,24,150,362,64,726,138,189,423,173,65,825,71,356,20,462,279,0,12,802,87,86,174,560,10,81,18,49,37,226,830,633,25,48,28,90,289,58,36,67,75,707,91,508,241,312,1,85,451,220,70,443,199,214,636,50,108,83,61,54,222,121,353,262,125,280,45,888,750,237,42 }, -{ 2,29,52,50,46,14,5,1,6,26,133,114,58,218,366,70,19,108,45,27,112,17,236,137,75,38,262,25,74,13,283,516,53,487,223,151,145,208,96,48,51,412,287,163,23,401,323,285,86,65,171,61,36,220,21,480,594,42,128,80,331,73,103,754,181,115,12,739,113,3,532,4,194,54,602,635,186,99,202,409,675,745,34,308,583,307,357,309,782,396,150,57,361,7,764,165,66,735,324,64,966,457,453,90,24,386,445,11,484,32,389,141,629,59,87,244,155,956,711,670,421,22,545,832,758,334,328,573 }, -{ 6,74,1,25,29,42,75,26,66,2,70,138,52,19,85,220,103,388,38,14,226,87,135,324,67,357,108,112,235,69,238,603,222,65,550,500,96,114,145,594,83,309,133,516,27,36,150,451,218,294,262,532,711,51,58,602,280,13,163,50,380,63,137,97,802,23,122,278,458,64,5,394,86,53,606,696,792,46,891,160,461,267,732,12,7,204,582,113,308,453,24,545,889,386,331,45,21,165,398,486,391,115,32,423,401,95,337,758,632,17,208,3,853,457,256,537,335,78,630,141,307,189,641,37,646,444,670,10 }, -{ 22,28,109,49,9,105,131,95,1,36,159,39,86,185,31,98,272,169,127,55,44,219,83,254,286,208,141,128,35,327,352,160,30,180,116,0,224,202,115,239,13,535,187,137,5,96,12,374,317,269,2,244,837,312,752,67,531,21,533,253,237,197,64,217,51,143,168,158,578,251,318,505,37,258,165,285,365,10,7,23,498,201,538,371,901,320,50,424,347,678,48,69,164,776,708,601,341,597,616,345,228,170,873,238,634,6,947,3,482,93,125,144,518,242,946,913,864,716,4,735,8,627,221,420,100,688,910,323 }, -{ 203,822,77,859,326,576,23,403,39,817,137,100,102,473,494,691,411,291,33,177,704,70,523,217,447,96,367,478,18,373,160,13,363,265,1,658,615,93,966,520,310,144,30,692,800,578,342,182,180,120,90,51,254,296,40,158,682,333,9,354,921,349,273,127,121,101,83,60,59,24,731,264,115,821,364,44,268,260,752,857,810,272,196,166,153,131,118,48,16,457,156,67,506,481,450,415,230,15,0,593,968,914,212,937,829,395,365,351,242,225,224,219,194,187,146,141,132,117,110,87,82,49,36,35,22,905,901,656 }, -{ 15,33,117,77,102,134,153,4,115,196,13,40,217,11,341,1,23,5,317,3,365,2,291,21,32,12,349,569,177,59,51,342,0,6,372,139,7,37,901,210,10,180,17,90,111,629,48,275,82,120,197,244,304,141,14,253,137,57,202,247,401,638,308,457,300,9,719,961,482,437,260,277,351,579,31,44,93,216,165,269,36,125,450,72,523,453,89,38,352,94,730,854,116,752,18,817,143,98,386,64,56,96,318,16,468,55,160,148,61,54,76,22,485,110,403,99,221,922,19,474,79,127,65,105,588,27,490,128 }, -{ 15,13,23,51,0,8,197,180,1,165,9,33,82,5,4,10,12,120,2,102,386,115,260,475,7,351,141,110,77,901,326,14,21,18,11,217,22,457,40,93,898,453,373,36,450,341,16,6,125,31,64,854,352,719,401,117,32,391,28,730,3,291,177,203,24,961,523,202,59,317,403,99,49,44,210,922,615,37,237,111,801,153,128,498,342,629,196,509,30,899,569,421,304,752,48,758,817,276,258,137,269,130,393,98,365,57,116,65,338,144,55,704,134,349,105,206,661,551,308,242,38,95,494,275,86,546,318,56 }, -{ 23,51,1,13,21,141,5,180,15,2,202,120,7,0,197,165,12,9,6,4,115,48,352,269,403,386,33,260,318,93,3,32,457,110,37,137,14,450,475,16,82,128,523,453,102,31,18,326,125,421,8,77,44,221,391,64,308,730,401,341,217,153,11,117,98,719,498,196,30,351,99,40,752,494,24,237,317,39,72,28,36,10,59,203,49,373,365,17,116,817,90,899,96,509,22,569,35,901,144,961,615,342,45,50,291,177,86,89,244,661,55,134,20,54,854,65,873,801,402,160,95,247,38,350,629,127,105,29 }, -{ 15,1,0,2,5,3,7,4,6,8,13,10,341,23,9,180,51,82,120,77,31,110,197,961,115,12,22,93,116,165,569,730,202,217,365,752,457,453,719,102,125,44,351,30,403,141,352,33,11,260,523,317,291,475,28,21,450,318,64,898,401,98,899,386,203,36,210,40,177,269,16,242,638,421,326,153,349,372,18,817,494,854,117,275,342,59,111,196,14,137,629,49,134,55,39,143,70,32,37,139,95,758,244,958,498,801,87,24,922,86,670,253,144,170,208,90,105,615,373,873,391,308,247,482,216,61,393,304 }, -{ 559,661,922,564,373,141,260,533,244,332,269,317,642,143,10,93,110,295,728,752,261,876,531,351,206,843,120,345,203,352,180,811,253,384,36,197,144,434,717,901,959,365,498,55,567,1,943,9,28,535,817,22,160,873,902,341,326,911,35,82,601,860,39,30,679,489,824,704,417,926,217,251,940,699,574,137,617,854,201,816,116,282,898,115,44,372,855,258,237,473,662,509,187,169,864,499,349,284,125,31,468,224,21,669,64,318,164,546,951,395,964,839,450,8,219,170,776,638,268,851,23,131,98,482,367,299,48,730 }, -{ 15,5,1,2,23,0,13,7,6,51,3,180,12,9,115,4,165,719,197,457,21,8,14,33,901,22,37,141,82,341,120,10,730,202,16,110,32,31,386,11,317,153,117,752,260,351,453,217,401,18,352,77,308,93,961,48,28,44,134,569,365,391,49,269,102,523,128,98,196,758,137,99,498,36,40,30,450,64,403,17,318,509,24,89,95,475,629,854,72,125,221,177,86,873,326,247,96,899,817,898,39,38,421,139,116,291,482,55,494,59,105,203,210,144,65,468,29,20,237,54,349,90,148,372,244,734,35,45 }, -{ 198,234,5,0,325,77,416,202,61,32,147,49,639,20,43,21,315,22,450,113,95,455,142,427,48,318,230,207,342,18,494,13,329,904,577,725,64,178,28,10,70,58,344,470,102,403,128,819,269,263,104,137,1,319,112,246,17,23,347,291,7,65,887,798,120,12,241,4,36,858,107,237,66,76,376,817,39,422,316,72,97,33,945,105,2,51,90,141,290,884,557,253,9,518,251,671,11,173,86,31,115,27,159,158,194,3,24,312,289,362,260,259,192,859,414,426,16,14,306,523,37,126,475,712,576,310,453,98 }, -{ 447,411,264,363,676,9,664,682,821,812,759,478,897,166,100,905,354,156,1,382,98,265,404,724,39,18,691,656,668,101,520,195,23,144,223,21,865,271,438,593,639,848,31,96,13,5,51,521,125,586,48,127,604,88,909,30,252,765,393,647,360,77,33,121,167,781,367,44,621,132,93,0,410,274,286,118,203,254,120,272,105,102,293,446,116,83,32,658,68,310,371,284,777,115,364,4,834,16,948,69,333,163,24,212,190,40,340,329,551,914,117,49,110,153,70,165,146,35,296,418,10,67,842,242,883,326,697,238 }, -{ 24,71,35,14,69,149,189,108,267,18,16,68,46,2,7,67,140,388,60,38,236,83,251,1,133,118,309,230,336,52,103,29,458,278,28,65,135,175,150,50,172,92,273,55,0,154,75,443,114,9,705,124,399,66,565,398,412,602,335,366,36,101,823,596,451,74,220,345,375,302,594,330,696,516,87,238,6,891,21,218,5,12,54,262,48,96,86,22,582,357,324,97,191,64,70,232,283,723,95,10,37,160,831,732,346,246,563,380,32,25,109,486,733,167,58,314,212,226,192,13,429,99,547,23,181,126,572,394 }, -{ 35,16,7,20,14,60,18,121,24,43,107,68,109,126,199,326,92,120,77,907,2,147,23,259,265,475,403,260,553,1,13,523,132,252,12,146,71,55,33,0,5,859,191,318,817,38,6,450,82,202,848,402,9,286,51,21,329,159,494,419,351,28,465,327,102,10,158,48,682,374,576,198,178,97,32,421,272,621,269,615,590,279,128,941,22,446,167,142,70,493,4,310,604,581,19,105,640,463,453,407,153,694,64,810,150,108,90,29,534,427,212,346,285,709,638,557,793,137,101,39,37,25,291,165,118,95,58,50 }, -{ 30,131,276,187,613,442,44,228,39,31,190,839,935,224,116,856,219,88,9,406,201,908,574,100,244,127,567,137,36,98,110,144,1,93,202,863,258,141,829,260,28,284,49,120,269,295,318,716,21,827,254,661,166,160,203,373,299,55,385,0,22,662,352,944,13,82,530,77,253,86,268,23,96,717,489,64,180,51,326,274,778,918,48,351,492,5,752,197,83,206,125,128,450,115,217,860,32,242,931,578,293,213,102,924,494,851,95,10,101,836,105,272,143,291,699,371,35,434,165,843,864,367,403,159,177,418,261,68 }, -{ 98,223,1,393,812,834,421,697,48,265,593,791,51,410,100,382,293,284,21,23,125,96,541,213,656,88,801,453,31,321,230,765,730,386,221,13,689,9,264,670,639,163,217,5,909,807,116,144,44,352,137,286,551,30,770,948,39,252,699,466,438,435,201,401,127,93,842,475,203,165,921,478,180,166,949,724,367,963,831,36,128,404,455,805,141,676,854,202,2,317,318,772,840,190,32,418,251,855,105,35,333,77,83,197,102,335,49,443,576,957,719,351,539,308,69,55,82,310,115,0,120,557,752,329,403,269,686,669 }, -{ 98,616,219,127,258,51,293,512,924,395,105,421,272,276,308,201,401,284,763,116,23,301,295,453,327,567,944,31,44,843,261,13,268,860,170,770,115,125,569,900,131,386,144,935,456,55,578,365,320,143,341,662,137,109,28,403,434,242,221,36,203,670,286,141,10,326,22,629,21,943,95,9,743,685,160,384,623,506,180,49,206,949,533,719,734,558,282,299,185,159,244,64,8,0,110,964,911,169,32,4,224,551,202,475,11,187,910,617,492,901,253,841,716,1,489,269,959,940,165,699,615,374,855,332,237,713,86,371 }, -{ 253,951,352,110,811,244,206,141,180,332,854,642,282,10,143,638,417,752,559,533,498,260,55,661,911,499,717,120,351,959,535,93,564,160,873,531,137,341,269,197,922,384,373,36,365,728,261,617,901,8,44,82,116,165,31,317,164,64,203,217,509,824,115,473,968,268,144,326,704,434,295,601,86,15,345,851,864,237,943,251,450,169,1,843,201,762,13,372,22,258,308,125,898,96,98,202,127,855,940,4,33,489,21,28,187,9,40,546,117,83,569,338,964,51,5,32,479,391,276,23,102,318,482,349,219,153,128,817 }, -{ 49,254,272,159,9,158,627,131,327,39,518,688,0,578,28,286,68,105,101,347,424,374,364,344,224,22,333,616,65,219,35,24,124,154,716,890,95,577,16,371,320,109,810,538,228,168,310,793,747,127,30,419,613,829,827,187,385,239,846,170,21,1,98,18,36,71,938,406,910,252,31,55,346,175,23,289,51,190,48,258,86,185,83,912,100,623,301,166,128,149,125,67,118,96,44,137,64,242,13,737,857,160,703,671,694,455,202,442,169,60,856,10,761,924,221,709,116,706,634,114,439,677,194,479,7,570,212,395 }, -{ 105,272,22,131,327,374,286,320,109,224,219,28,239,95,98,578,9,169,127,185,538,159,187,616,55,258,371,36,634,623,64,164,49,713,86,910,716,385,168,654,170,420,424,1,10,312,737,201,35,254,293,284,51,23,143,13,44,761,141,601,160,395,933,31,928,916,276,301,924,208,116,67,346,237,137,347,535,39,194,242,0,442,836,83,762,165,584,338,638,505,892,244,251,175,345,114,740,12,391,944,837,128,158,202,197,479,261,253,908,352,912,125,531,96,308,295,144,24,21,30,7,269,268,2,751,323,228,5 }, -{ 691,478,340,724,658,914,698,1,363,744,772,156,411,447,682,909,303,284,296,264,354,919,335,98,9,21,686,664,225,223,586,410,96,367,382,897,51,13,521,33,848,765,125,144,23,32,120,759,48,69,662,260,44,31,166,40,93,77,5,4,551,668,35,269,30,82,191,167,163,318,351,87,404,371,102,88,812,438,165,70,39,385,293,116,65,64,656,364,101,622,286,948,254,271,393,321,141,75,11,18,854,842,443,433,118,100,418,274,202,421,16,774,67,326,329,905,149,922,110,37,386,201,12,197,127,49,203,907 }, -{ 16,24,71,35,18,108,140,60,92,267,68,189,7,230,191,246,149,14,118,167,388,46,69,236,458,399,674,212,273,9,133,1,126,150,21,309,330,50,101,55,2,48,103,121,67,906,602,5,0,345,723,412,232,172,271,146,565,28,516,696,702,75,38,65,451,32,796,12,37,594,633,154,278,733,375,366,302,199,124,314,36,336,398,443,823,64,695,54,135,114,29,22,95,97,462,915,52,563,582,251,705,575,891,589,175,10,83,566,572,13,220,223,23,467,218,830,163,363,394,66,562,132,107,446,641,517,49,86 }, -{ 9,127,0,395,371,98,39,31,737,49,512,385,272,44,28,293,299,101,836,761,158,252,254,16,242,1,284,159,116,18,518,35,276,310,333,24,187,51,21,599,137,30,301,22,131,68,286,23,219,327,202,125,616,48,442,935,456,578,916,5,109,166,685,55,265,7,65,100,688,128,105,201,36,890,623,96,144,13,908,329,12,2,846,64,37,95,141,344,455,318,403,124,93,492,154,32,404,14,203,269,938,627,67,258,118,224,170,244,326,110,268,165,367,763,86,60,827,221,716,160,924,553,120,419,489,662,10,83 }, -{ 16,18,60,68,35,101,252,0,118,71,9,419,28,24,109,364,604,191,126,167,55,121,329,92,7,158,265,39,212,22,346,14,925,49,107,694,185,169,621,146,439,333,628,124,199,150,942,21,159,48,154,553,706,175,108,575,279,677,10,962,20,105,100,848,917,815,446,363,907,132,5,793,271,375,43,149,23,65,13,566,520,806,286,810,95,166,593,374,302,51,1,97,634,598,404,407,12,31,2,272,493,46,467,727,463,562,589,125,326,327,310,50,967,96,682,168,37,344,140,608,203,98,38,647,821,246,362,67 }, -{ 116,268,203,692,93,206,940,31,551,417,473,959,499,44,202,523,559,8,137,120,450,728,299,494,403,22,51,576,0,326,564,817,10,260,13,23,127,1,899,9,105,421,125,615,318,492,638,98,386,918,141,393,341,269,253,21,791,5,28,2,144,64,37,244,805,762,373,180,128,401,599,55,901,242,352,30,165,197,453,642,730,475,170,873,115,49,569,36,4,859,7,143,391,498,86,48,308,922,752,39,395,719,365,951,285,6,457,456,958,12,110,402,704,384,367,95,512,949,18,24,16,515,479,221,32,948,801,282 }, -{ 225,1,744,919,21,459,914,48,691,284,330,385,141,96,98,335,622,166,5,293,51,32,120,223,948,340,260,443,203,88,286,30,831,372,50,363,351,269,82,64,934,70,658,9,190,127,403,352,13,115,418,682,411,371,87,144,393,909,521,922,776,272,102,90,69,61,839,23,15,4,774,349,327,321,268,244,202,197,100,93,551,75,848,662,523,442,478,373,206,201,180,125,76,59,45,36,33,963,538,410,274,237,163,156,821,303,264,772,724,450,382,367,958,954,899,898,865,864,859,854,765,752,730,668,664,506,494,475 }, -{ 5,1,14,2,36,50,28,0,48,281,21,67,24,54,22,83,218,12,38,18,65,181,58,45,114,133,430,32,17,46,96,10,9,103,37,160,502,61,155,99,270,55,72,7,29,513,16,51,108,487,238,23,543,745,86,3,290,6,540,89,361,115,834,13,52,202,221,433,842,488,480,137,236,76,69,328,223,64,838,514,49,532,35,666,474,128,171,283,766,536,227,124,966,308,75,19,552,95,70,208,775,141,323,27,541,822,697,425,754,765,4,285,207,148,657,109,318,412,243,263,77,592,832,663,741,186,807,576 }, -{ 450,137,704,202,326,120,260,851,318,968,494,269,457,182,403,291,351,349,77,678,141,23,310,373,817,859,576,661,523,890,60,128,82,64,795,110,854,70,515,96,5,159,285,1,961,341,13,717,9,421,922,203,180,95,244,55,379,658,577,347,105,75,49,822,687,115,363,800,557,301,160,36,937,475,411,67,59,237,18,16,354,195,864,771,615,520,424,415,344,83,68,51,28,0,805,447,386,364,268,232,107,101,90,86,7,668,481,342,271,786,735,901,897,846,751,731,719,638,621,586,518,402,296,253,239,208,197,165 }, -{ 15,4,33,77,40,13,102,11,23,5,32,21,110,117,217,51,93,153,59,1,247,134,115,141,64,202,120,2,372,180,3,10,12,31,82,291,177,116,139,125,269,196,8,317,17,22,165,137,98,351,318,36,44,128,203,197,28,0,352,48,260,349,898,144,57,403,450,437,6,719,341,72,304,111,457,523,90,365,494,9,326,49,37,730,7,210,39,86,30,14,475,95,386,453,638,961,854,373,76,401,901,237,277,752,56,342,160,817,244,758,402,308,899,143,89,206,216,569,421,615,61,535,45,18,316,127,164,579 }, -{ 23,13,51,1,15,5,2,7,0,21,180,6,115,12,141,9,165,3,197,457,202,4,14,352,719,48,33,32,16,269,37,217,341,8,11,401,120,318,308,22,386,77,31,18,128,752,40,110,260,10,28,453,730,93,137,498,901,403,391,153,82,317,365,117,44,102,17,523,961,569,64,450,509,72,99,49,134,36,758,59,98,221,24,629,89,30,351,475,196,326,125,177,494,291,90,421,237,29,899,203,35,39,247,864,817,95,372,96,349,20,116,854,65,38,54,160,19,144,57,86,244,304,873,55,342,373,350,316 }, -{ 219,258,127,276,98,944,395,201,567,284,131,293,935,860,116,662,295,224,737,105,578,576,242,403,843,371,137,551,272,456,512,421,51,31,475,716,202,697,261,44,492,187,924,616,268,9,49,326,206,254,144,299,39,385,22,115,916,805,93,699,308,203,943,159,160,761,836,763,125,23,13,0,332,453,401,386,36,120,28,770,141,21,327,615,384,393,282,958,221,318,494,367,365,143,217,128,434,64,692,940,10,244,110,617,301,911,55,964,730,320,5,966,523,86,719,623,457,96,95,1,269,317,24,670,197,859,842,286 }, -{ 16,35,60,18,7,92,20,14,118,0,68,126,71,28,154,24,107,43,158,22,2,109,49,55,677,168,185,1,97,6,121,12,21,175,10,5,159,703,150,202,169,105,191,942,95,38,494,279,37,137,23,13,9,329,230,140,628,48,69,420,32,553,124,326,167,128,403,120,747,101,74,51,108,925,31,65,66,621,246,475,29,46,36,576,344,52,419,25,575,81,104,98,375,173,570,421,346,39,265,199,86,50,671,269,424,362,58,318,54,450,44,149,125,143,817,566,615,302,61,439,260,453,170,165,493,402,67,286 }, -{ 728,531,160,93,373,574,559,717,120,860,533,295,269,260,318,926,851,434,258,36,902,137,251,332,617,141,201,261,699,206,384,940,968,843,816,345,352,244,187,839,564,55,776,661,144,959,871,116,64,219,44,473,489,268,535,203,10,567,31,911,498,143,896,110,679,450,523,224,824,800,197,164,276,601,351,406,662,202,873,752,943,317,365,169,855,228,704,282,131,180,253,326,82,954,1,669,125,854,367,901,98,217,165,417,817,341,86,442,831,8,898,642,284,13,127,876,237,21,947,864,22,83,23,748,418,115,946,868 }, -{ 28,9,0,1,22,109,49,39,83,55,12,158,67,96,69,5,35,30,65,95,168,323,159,128,185,238,21,50,36,105,2,24,160,23,194,208,103,7,68,169,137,218,141,48,37,505,16,420,51,13,202,86,251,285,18,114,269,31,115,531,124,10,289,418,101,402,797,154,433,32,99,175,64,866,735,252,180,646,272,100,286,480,503,54,333,533,244,14,344,131,352,44,318,127,98,327,6,346,217,570,254,197,237,181,657,800,535,745,374,4,335,75,317,165,281,756,143,584,757,419,532,345,956,365,223,831,403,341 }, -{ 23,13,51,5,141,21,1,165,202,2,15,32,12,197,115,180,7,0,48,269,120,9,4,6,453,386,403,318,308,401,37,457,14,33,137,352,64,3,125,128,523,16,31,93,391,260,730,719,475,341,450,237,99,18,82,110,11,10,44,77,326,421,8,217,494,40,28,90,102,59,49,17,117,36,98,30,221,899,247,317,22,365,72,153,509,24,196,351,39,498,569,629,752,89,116,134,177,203,20,373,96,961,901,372,817,241,291,45,86,57,19,61,76,304,38,758,468,65,50,160,105,144,55,402,29,244,216,25 }, -{ 5,21,13,49,23,43,32,20,48,14,7,51,97,107,61,115,38,713,22,24,1,12,70,46,652,955,142,58,16,590,0,626,197,2,640,147,64,279,581,132,350,150,121,303,81,493,340,888,841,104,36,60,87,18,95,345,92,241,296,221,509,98,349,308,622,91,202,195,638,141,125,35,408,407,156,379,269,146,66,28,31,9,786,534,17,128,903,929,518,178,29,354,4,108,105,263,522,687,247,65,259,850,126,44,237,199,54,774,535,271,260,50,347,6,446,318,159,90,10,288,137,783,360,76,223,598,55,586 }, -{ 9,28,0,39,101,30,49,35,68,1,67,166,175,83,22,158,100,252,141,55,88,69,65,109,36,23,180,217,323,115,64,269,345,103,21,124,10,317,13,251,289,238,364,498,154,352,230,5,419,131,190,31,7,51,194,48,50,346,96,128,439,159,160,105,202,24,274,143,952,95,16,168,12,646,341,254,752,86,868,365,637,596,244,127,137,570,433,318,418,114,864,208,44,37,503,404,372,2,32,344,197,333,116,532,218,77,98,187,237,164,125,723,535,443,480,169,265,901,189,310,221,420,336,873,797,403,402,285 }, -{ 260,120,450,351,854,82,269,922,5,32,13,125,33,23,202,291,165,21,197,77,137,1,141,203,457,349,318,51,4,326,177,144,180,753,730,275,386,523,817,237,116,217,373,719,403,98,93,31,372,128,241,115,12,899,704,341,304,196,102,44,40,391,48,2,342,898,954,864,801,494,284,208,110,76,59,365,352,285,207,947,758,663,615,599,558,492,482,456,408,350,263,210,201,160,64,57,49,19,18,16,14,11,10,7,6,961,317,361,37,968,752,661,498,475,453,402,323,300,293,268,244,206,154,127,105,96,95,86 }, -{ 121,16,60,363,35,18,101,20,167,68,621,259,126,191,604,407,107,132,55,364,43,146,199,252,7,14,92,419,590,147,212,71,9,326,5,463,520,21,694,917,465,24,354,446,647,109,13,271,682,0,28,22,120,203,10,97,806,821,48,169,77,279,727,362,2,346,195,581,640,932,178,589,118,115,102,125,23,202,51,439,941,907,848,411,450,33,857,427,634,165,553,154,108,180,39,494,325,185,373,329,142,475,265,818,49,342,158,967,403,260,1,523,374,612,110,962,12,534,955,37,615,376,150,793,692,562,137,638 }, -{ 23,13,51,5,1,12,2,141,15,21,115,0,202,180,7,32,197,3,165,4,6,9,401,37,269,14,308,457,352,11,318,453,341,386,120,403,10,16,33,22,8,719,18,391,40,31,77,48,217,28,137,17,99,365,523,475,569,128,730,44,93,59,260,102,498,450,90,49,509,24,30,317,110,752,421,64,247,125,72,82,237,221,177,629,98,351,961,494,153,36,89,19,117,758,901,373,196,326,57,38,39,29,20,65,546,304,134,116,95,899,817,139,372,76,35,55,316,241,291,468,482,203,144,210,45,402,873,54 }, -{ 201,144,206,443,418,332,203,435,330,96,494,326,473,372,335,269,434,268,187,403,822,817,459,1,88,498,564,384,839,382,617,367,83,264,934,559,295,276,30,717,344,521,141,831,321,274,44,202,576,31,9,686,709,190,100,921,699,812,252,55,230,137,208,450,616,457,284,180,128,93,28,859,410,966,228,265,456,352,69,523,318,244,158,795,961,747,735,662,584,531,421,855,213,168,960,225,478,959,899,716,578,577,489,466,417,291,223,116,36,35,23,13,954,952,237,800,349,285,77,744,866,772,752,346,197,166,98,32 }, -{ 44,276,31,116,201,284,662,567,131,489,144,268,295,434,918,30,9,39,98,137,187,219,299,224,935,367,49,384,385,36,93,22,28,0,244,261,141,127,492,699,203,110,254,1,202,836,160,442,253,258,105,96,64,269,393,51,128,371,125,23,716,55,86,318,326,10,908,120,206,940,855,77,143,190,827,13,21,228,352,217,100,35,159,48,165,115,272,944,373,948,260,617,829,102,197,166,578,737,83,16,332,293,95,717,450,24,523,88,180,403,109,18,177,37,164,5,899,242,959,613,730,285,291,15,7,616,911,473 }, -{ 520,664,478,604,759,264,167,1,724,777,9,647,411,682,48,806,936,363,101,223,265,410,21,68,118,252,100,907,848,447,772,98,96,781,0,212,88,905,16,821,39,925,917,23,329,909,382,18,166,942,125,191,639,221,13,24,51,676,124,932,321,897,621,628,521,5,71,154,69,31,30,815,686,293,541,49,284,271,60,593,765,55,32,812,404,435,335,807,163,562,44,834,553,35,691,65,364,763,105,83,146,28,127,274,10,158,7,190,393,64,238,213,419,67,701,421,354,33,22,254,697,149,116,272,201,115,77,144 }, -{ 70,23,87,21,60,75,163,182,267,92,291,120,115,107,146,379,195,132,446,795,937,246,126,121,98,71,48,18,7,415,931,566,232,133,51,24,125,371,821,668,535,411,401,340,318,308,221,116,77,44,40,32,11,4,281,850,293,563,537,407,273,217,202,199,140,13,5,807,197,64,591,385,33,883,386,626,687,891,823,820,770,766,754,743,670,658,633,627,615,598,551,545,541,458,394,392,372,364,361,349,342,338,333,330,301,284,283,268,264,216,210,105,102,100,95,49,35,31,866,774,597,498,335,244,238,237,160,2 }, -{ 39,9,737,127,0,310,98,827,846,395,100,31,371,916,254,265,385,105,272,101,18,30,836,1,242,166,44,512,16,557,116,252,131,578,938,931,137,93,301,28,125,68,333,24,51,404,23,120,286,616,856,35,299,21,55,13,64,202,593,716,128,96,48,326,329,219,260,158,7,110,264,5,688,456,77,203,165,36,49,373,924,761,442,118,863,639,144,518,318,284,228,88,438,60,327,363,12,450,33,190,82,10,411,731,102,65,293,109,455,95,170,908,599,623,494,115,478,187,141,2,14,22,812,685,276,403,935,197 }, -{ 107,126,279,20,43,356,362,92,7,359,16,598,683,595,246,441,60,392,939,653,399,35,199,319,125,649,97,259,414,71,0,493,121,858,230,150,140,232,191,49,48,14,702,173,575,68,95,298,422,674,18,64,98,590,147,22,612,118,28,24,672,104,819,407,345,146,77,660,695,10,953,375,423,31,945,314,293,33,640,23,115,93,158,44,167,149,132,154,21,783,5,175,81,807,508,376,105,109,59,13,40,391,779,387,237,124,589,470,55,426,4,330,727,729,51,427,169,120,796,223,91,189,446,117,153,541,463,755 }, -{ 206,417,93,959,728,559,499,473,137,120,8,564,141,244,260,253,450,31,44,10,269,352,203,318,373,143,341,202,638,116,752,180,144,951,940,326,268,110,160,851,115,922,127,98,717,642,384,125,434,64,13,36,51,282,615,704,365,661,197,498,23,901,817,30,762,489,276,692,15,873,165,22,968,86,1,854,128,386,299,105,217,811,55,0,242,421,317,351,523,367,237,911,21,170,49,77,9,349,391,28,509,479,187,177,82,201,576,285,164,898,492,401,96,456,291,569,494,800,338,33,32,5,39,372,12,261,295,293 }, -{ 259,465,147,581,534,132,590,687,146,427,199,279,941,195,955,640,786,107,178,522,798,121,929,362,150,5,198,325,626,142,35,21,878,376,407,360,167,48,271,1,423,10,70,20,13,126,77,22,125,98,493,31,163,49,212,202,0,105,43,783,33,14,156,345,883,102,612,767,28,97,660,346,470,221,23,450,60,12,771,92,191,379,120,591,2,467,318,9,32,61,4,535,128,153,117,116,562,95,953,18,115,595,159,494,17,371,44,293,818,58,165,51,7,68,354,246,234,269,87,342,845,196,260,72,6,134,481,93 }, -{ 523,403,817,202,15,899,450,120,51,730,494,421,719,128,457,453,13,23,342,102,401,318,64,196,33,475,141,180,49,5,115,269,308,197,237,221,165,99,4,77,137,95,260,0,757,576,365,316,125,65,48,615,402,326,159,11,671,389,312,289,283,247,210,203,194,148,105,22,21,386,835,12,958,749,743,697,485,351,350,341,300,177,170,158,155,151,136,133,129,127,123,122,119,114,113,112,90,89,86,84,80,72,62,61,59,58,56,45,40,34,27,26,25,19,17,3,901,752,153,134,117,961,922,968,967,966,965,964 }, -{ 141,559,244,10,661,253,564,143,365,533,752,180,55,110,901,160,922,373,341,317,93,535,352,206,260,531,36,197,332,269,82,642,282,964,498,911,717,261,728,873,943,351,137,64,417,854,120,1,811,9,115,217,898,169,28,165,164,86,384,203,22,15,83,21,959,96,617,499,318,35,31,8,482,295,951,251,345,372,902,5,473,601,144,32,546,843,800,237,13,864,44,509,109,824,67,268,450,391,308,349,23,258,77,567,851,291,202,116,949,615,125,926,954,638,551,569,457,51,326,102,59,434,817,418,958,719,629,523 }, -{ 219,258,276,127,284,98,935,860,943,843,567,201,137,295,964,131,261,116,535,662,492,44,160,253,31,224,206,203,615,268,144,332,293,692,924,918,384,244,944,326,36,128,434,395,716,737,367,456,187,55,96,403,551,318,911,617,616,385,699,533,115,940,202,365,10,836,576,966,523,959,77,28,21,93,9,120,489,141,1,260,48,371,531,217,143,282,564,125,110,180,51,704,421,299,39,23,64,363,254,393,442,242,494,417,105,822,473,317,578,269,272,697,22,855,102,805,475,13,948,341,0,373,33,285,82,49,932,574 }, -{ 422,319,0,945,207,887,32,577,693,43,95,20,904,22,344,61,104,804,707,306,426,124,5,725,7,241,153,325,316,49,715,414,113,671,115,239,263,329,173,198,180,102,18,365,117,83,24,33,376,510,942,355,324,140,134,69,21,9,232,77,76,240,237,196,189,177,160,158,36,10,835,292,341,526,334,331,168,92,48,16,330,37,25,204,64,901,595,416,392,347,858,362,244,174,164,149,97,86,60,58,39,31,30,27,790,770,222,65,2,350,40,11,4,814,13,933,424,159,819,397,697,623,610,491,403,387,315,288 }, -{ 1,22,12,5,2,0,36,21,28,49,105,86,95,37,55,9,7,48,23,32,141,83,10,51,31,96,269,202,13,128,50,4,160,239,208,318,14,168,159,6,3,170,44,67,164,54,115,285,99,35,109,98,244,180,64,137,402,65,24,127,16,352,320,18,197,69,323,30,158,11,169,301,708,678,238,312,77,717,597,39,143,165,584,194,125,17,253,217,341,735,281,114,116,218,654,181,403,237,424,103,347,317,185,177,45,401,15,776,242,29,46,72,68,418,498,433,223,33,569,901,480,531,40,657,365,800,851,8 }, -{ 15,13,2,1,5,23,3,0,4,7,6,51,115,9,10,12,197,11,14,77,22,217,269,8,165,31,961,33,457,202,32,180,21,341,40,141,120,102,177,16,569,453,28,318,317,17,260,291,44,365,93,37,117,134,110,30,352,18,403,719,153,196,49,401,59,475,901,36,326,98,64,304,386,125,498,730,349,494,450,137,48,247,95,90,523,308,752,24,128,210,111,99,82,139,372,203,873,57,76,116,237,342,72,629,351,391,482,509,19,421,39,144,373,35,55,216,89,275,437,817,20,86,105,56,899,96,38,65 }, -{ 23,202,77,51,13,120,1,141,15,326,180,269,260,137,318,102,450,5,128,21,110,217,291,165,197,352,115,317,373,2,48,12,7,0,523,33,203,386,403,9,96,64,93,342,6,351,82,32,14,457,177,16,36,817,349,752,494,37,4,475,18,210,901,854,341,285,615,59,275,90,498,50,244,160,391,453,99,308,86,10,365,401,22,719,922,8,221,24,730,28,704,402,421,11,125,83,67,237,661,3,40,898,30,153,35,961,31,196,65,253,39,576,17,44,247,20,569,300,95,49,899,116,509,473,117,143,70,372 }, -{ 15,1,0,2,51,13,23,5,7,180,9,6,12,4,115,33,197,523,21,120,3,8,14,457,901,165,351,141,450,260,202,365,341,82,16,40,730,31,37,308,719,401,77,93,44,18,10,899,64,453,403,32,137,317,386,217,36,48,110,98,475,102,326,28,22,128,269,30,11,116,569,421,352,318,817,752,24,196,961,221,99,39,49,144,153,629,55,89,17,203,373,35,117,59,801,898,291,873,177,509,86,125,494,244,95,160,482,134,498,854,72,372,96,615,349,468,38,143,758,237,90,127,391,54,342,670,734,247 }, -{ 16,24,18,92,35,71,60,7,75,126,140,108,50,132,9,21,68,121,14,246,13,0,146,23,267,1,48,128,220,107,70,230,150,32,12,199,118,5,394,181,87,137,537,46,51,133,269,189,141,54,64,22,167,10,202,156,2,330,281,820,171,77,99,291,774,217,177,349,58,65,39,37,103,69,163,28,95,67,622,318,309,633,86,236,101,360,372,6,563,36,195,304,115,38,641,314,30,149,522,232,20,591,352,354,49,545,55,98,571,271,317,526,649,407,672,278,100,640,586,45,223,114,31,678,430,237,388,328 }, -{ 180,341,901,15,1,365,5,2,0,4,197,7,6,115,3,752,10,13,569,317,873,23,165,8,55,141,9,143,44,93,31,498,217,51,638,253,509,308,352,12,22,401,244,36,116,33,21,11,206,64,144,120,951,391,629,137,16,37,86,372,269,125,734,386,134,110,351,40,18,421,417,260,77,282,117,326,268,499,102,457,164,318,482,373,237,203,170,127,95,35,661,642,82,202,177,559,468,261,201,196,160,221,105,961,32,28,854,551,169,24,349,811,762,728,564,338,14,242,717,291,109,153,139,128,403,312,437,851 }, -{ 9,0,101,175,35,28,39,68,364,67,252,65,124,289,158,336,154,166,83,55,100,114,439,103,419,69,49,194,346,1,30,189,345,570,109,88,22,168,64,251,50,16,547,36,230,96,596,133,389,868,265,238,149,86,429,24,694,21,128,218,637,399,141,703,23,646,51,826,13,671,208,677,159,706,95,137,7,797,505,610,237,12,115,756,10,404,484,131,768,190,2,333,71,164,18,799,329,323,344,967,283,202,274,420,782,930,48,105,286,140,217,702,480,143,212,54,37,962,269,14,857,185,310,532,254,535,197,118 }, -{ 64,115,180,197,237,165,391,247,217,352,386,316,304,32,90,13,21,468,95,72,317,76,498,89,365,291,141,125,22,509,349,288,179,86,546,98,372,23,341,225,437,49,116,569,645,796,923,459,18,411,308,177,48,640,4,586,490,16,5,12,591,312,241,933,117,35,65,134,482,752,672,269,164,77,156,302,71,1,264,873,410,321,118,446,360,271,102,59,24,682,674,246,953,88,149,751,51,521,92,823,447,144,864,37,7,11,695,702,166,781,698,662,647,588,458,403,401,363,283,239,216,194,170,153,57,33,28,17 }, -{ 15,13,1,2,5,23,0,4,7,3,115,6,51,217,9,12,197,10,141,21,11,961,457,180,8,341,77,33,165,22,14,32,31,317,202,120,40,37,177,260,16,102,93,269,901,365,352,28,44,247,318,18,117,110,134,17,386,569,372,719,752,59,48,30,36,498,153,403,196,49,450,291,82,72,125,137,304,128,453,391,730,401,98,873,349,373,523,139,509,24,64,326,39,90,475,111,99,308,899,116,95,89,482,203,351,210,86,922,144,437,629,55,57,421,148,494,342,854,35,76,20,179,817,758,275,105,237,216 }, -{ 132,199,146,121,407,60,493,279,640,598,534,522,195,581,590,955,360,126,259,107,150,783,362,35,5,156,271,49,167,939,18,16,147,612,941,591,467,21,883,465,423,929,0,10,191,92,22,298,441,356,446,13,70,48,7,31,626,28,77,24,32,296,178,97,212,33,354,108,608,786,623,68,345,586,727,660,71,649,687,102,163,125,9,105,115,683,55,4,463,379,75,23,87,98,14,953,293,159,50,44,818,761,376,61,246,40,64,763,713,109,1,120,117,767,359,427,95,101,20,344,58,43,607,221,575,663,142,153 }, -{ 28,1,0,22,9,24,65,55,12,5,67,36,96,83,114,50,18,16,2,14,35,103,21,109,49,48,7,218,160,54,124,69,433,37,281,238,23,10,181,51,223,133,137,39,154,745,68,58,99,480,202,13,95,86,75,128,657,115,283,532,285,46,32,163,323,822,38,141,175,547,30,389,766,108,45,168,646,64,194,429,158,169,185,155,361,505,418,70,420,800,531,105,208,502,269,430,6,101,71,866,318,765,402,289,838,398,149,31,251,221,29,484,757,543,4,3,533,308,180,503,17,403,72,754,171,118,217,89 }, -{ 93,120,957,968,459,77,30,160,352,217,473,110,102,372,202,373,613,291,137,260,190,752,704,141,317,31,318,961,269,177,44,326,203,851,330,863,450,264,321,265,228,224,728,457,304,247,88,924,116,840,800,219,144,365,197,115,28,187,717,49,39,944,559,908,829,406,934,349,213,916,244,131,64,225,36,98,82,9,730,403,342,275,210,180,109,100,86,33,938,855,55,831,521,367,719,10,661,165,922,935,258,839,918,864,669,539,351,274,196,166,83,341,15,959,822,772,617,285,897,531,410,716,686,478,871,251,901,836 }, -{ 15,0,1,13,9,23,2,5,51,7,12,6,120,4,8,10,102,197,523,901,341,180,14,260,115,82,77,141,33,165,3,16,21,18,202,59,450,22,403,457,110,817,93,475,64,351,11,453,137,37,401,898,421,128,28,40,719,31,961,217,36,48,569,365,30,125,269,308,318,373,203,317,210,32,494,98,44,116,730,352,24,86,49,326,386,117,342,854,95,629,17,153,144,55,391,177,922,899,99,291,237,143,196,39,805,134,221,96,576,670,139,752,35,253,244,661,300,50,57,127,402,65,638,349,19,498,206,111 }, -{ 206,417,244,499,141,253,44,8,137,559,269,144,93,10,31,728,116,564,203,143,268,352,717,638,120,260,160,752,951,318,384,341,180,282,373,959,434,127,110,197,202,125,851,64,36,901,642,473,498,326,332,115,165,450,201,98,873,242,922,23,22,1,217,261,276,762,55,13,489,86,661,51,317,365,15,940,898,811,82,855,854,704,9,295,0,21,372,164,351,37,968,187,569,367,911,5,576,28,617,401,237,170,615,128,776,349,7,48,105,421,479,386,16,96,95,299,291,12,258,824,864,308,817,2,30,403,49,692 }, -{ 530,840,254,228,406,829,669,613,827,96,21,48,51,31,23,960,137,224,219,1,166,131,39,98,679,438,310,190,856,116,93,403,274,221,144,127,258,846,36,202,180,938,688,120,318,765,421,385,931,317,475,13,77,816,876,105,44,187,30,115,5,625,203,125,752,442,141,32,367,308,365,284,924,778,341,842,50,28,268,333,242,217,860,160,100,22,616,539,110,88,871,159,37,345,9,165,33,839,332,299,83,574,351,576,68,404,371,10,518,326,82,748,716,863,492,578,401,265,456,102,269,656,128,926,557,531,498,494 }, -{ 15,13,197,457,0,719,23,8,730,1,82,165,120,134,9,10,5,180,2,141,7,12,115,51,260,901,4,899,351,6,341,352,33,3,22,386,450,31,202,11,117,569,523,269,128,93,18,898,44,110,758,28,752,373,365,64,30,961,77,318,498,873,21,854,111,49,102,37,16,40,99,137,125,317,14,391,55,217,24,116,326,98,403,474,36,494,482,817,509,372,35,661,277,139,922,615,38,801,203,143,291,153,475,86,453,253,629,304,148,437,402,237,48,642,954,564,864,431,244,95,242,144,39,401,72,17,196,958 }, -{ 68,0,16,24,35,9,252,71,419,18,28,101,154,158,109,124,118,60,39,55,329,364,333,49,65,677,346,22,7,185,265,149,159,175,169,191,810,302,553,100,14,92,344,108,439,671,703,793,105,168,375,286,272,327,374,21,694,706,1,10,67,126,254,634,310,95,212,289,701,2,48,167,150,455,166,627,577,30,747,420,273,538,46,69,962,36,51,23,424,13,12,64,857,429,593,96,5,570,925,86,917,199,37,125,31,50,83,826,628,912,107,239,604,98,638,114,688,221,967,131,709,137,170,336,140,20,589,128 }, -{ 51,1,23,13,15,180,120,2,5,197,202,141,0,7,21,165,260,326,33,9,4,450,12,102,6,523,48,386,115,403,269,137,457,352,14,318,16,128,110,77,3,40,196,32,18,93,217,82,317,37,341,8,817,96,31,401,453,36,752,342,351,44,719,203,901,28,475,221,421,365,64,730,24,391,153,30,308,373,10,494,22,615,59,11,39,99,98,50,116,899,498,961,177,372,291,35,854,144,509,244,17,49,922,569,86,72,247,65,349,125,160,210,482,127,117,402,20,134,55,873,38,83,898,67,275,88,285,237 }, -{ 535,253,352,564,365,110,82,180,854,341,10,533,873,55,244,898,752,901,143,642,141,559,498,36,317,951,638,160,661,115,197,282,964,137,531,165,634,351,64,308,164,217,169,206,417,811,86,499,482,28,332,125,373,509,15,569,93,546,83,728,762,965,96,22,468,601,260,911,269,717,9,349,922,109,345,800,291,734,31,23,338,170,1,372,538,629,221,943,8,120,261,44,21,318,743,494,401,128,202,13,822,579,403,251,617,959,719,770,67,864,219,185,127,117,48,286,384,299,730,475,453,402,350,69,421,391,98,39 }, -{ 31,125,44,116,338,64,242,55,164,36,299,1,237,86,456,10,22,558,506,144,498,492,13,23,762,170,268,143,206,685,93,870,180,844,599,5,903,546,197,115,2,203,509,169,479,165,141,127,0,352,253,393,752,740,8,137,12,51,28,341,391,638,7,244,9,457,160,367,873,98,128,384,951,963,282,202,918,21,269,37,6,105,569,629,434,365,120,301,4,708,318,3,417,489,923,901,719,317,308,401,386,535,217,14,15,734,95,551,634,499,208,533,332,49,758,83,824,961,730,239,776,601,523,751,948,717,864,654 }, -{ 23,13,51,4,115,202,5,217,77,141,1,11,180,2,317,0,3,7,33,269,318,15,365,341,21,9,102,10,32,6,40,12,352,177,22,197,403,64,165,128,901,59,752,31,494,137,308,291,28,8,18,349,401,16,125,90,30,14,237,498,372,93,37,98,153,49,453,17,36,873,44,475,457,39,342,196,210,24,48,326,569,386,421,247,95,203,120,509,275,116,391,961,117,244,110,143,57,304,144,216,482,719,134,139,468,86,523,55,221,450,67,76,50,253,35,105,260,65,437,373,730,72,859,629,46,692,576,111 }, -{ 39,9,166,364,68,101,158,333,0,154,562,28,404,30,65,124,252,35,175,274,344,310,190,706,49,289,570,100,168,438,694,419,346,703,826,55,16,24,439,21,88,149,254,577,429,810,109,159,962,857,671,212,455,656,22,610,95,194,1,336,747,13,125,67,36,131,530,865,48,71,625,793,10,589,23,64,841,265,484,539,86,224,558,350,69,237,420,51,835,96,272,105,406,677,165,228,83,18,31,141,114,286,557,221,347,115,137,169,722,778,7,391,98,818,816,308,840,634,709,44,185,128,960,777,143,258,669,60 }, -{ 15,341,13,33,23,77,141,4,0,351,1,260,102,51,82,9,40,349,854,11,115,217,269,137,180,202,922,5,901,22,10,117,21,365,318,197,120,352,64,12,7,153,177,59,291,32,128,2,165,196,372,36,403,317,457,28,18,8,16,304,30,14,450,31,898,37,3,752,48,134,139,494,421,6,453,401,719,90,86,569,523,110,24,55,475,210,49,44,386,17,730,95,247,244,961,143,125,308,342,817,629,98,498,93,96,76,39,275,509,326,99,285,373,57,237,35,402,160,111,253,105,391,221,116,899,72,127,661 } diff --git a/external/bc7enc/test.cpp b/external/bc7enc/test.cpp deleted file mode 100644 index 48a29f65..00000000 --- a/external/bc7enc/test.cpp +++ /dev/null @@ -1,955 +0,0 @@ -// test.cpp - Command line example/test app -#ifdef _MSC_VER -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "bc7enc.h" -#include "lodepng.h" -#include "dds_defs.h" -#include "bc7decomp.h" - -#define RGBCX_IMPLEMENTATION -#include "rgbcx.h" - -const int MAX_UBER_LEVEL = 5; - -inline int iabs(int i) { if (i < 0) i = -i; return i; } -inline uint8_t clamp255(int32_t i) { return (uint8_t)((i & 0xFFFFFF00U) ? (~(i >> 31)) : i); } -template inline S clamp(S value, S low, S high) { return (value < low) ? low : ((value > high) ? high : value); } - -static int print_usage() -{ - fprintf(stderr, "bc7enc\n"); - fprintf(stderr, "Reads PNG files (with or without alpha channels) and packs them to BC1-5 or BC7/BPTC (default) using\nmodes 1, 6 (opaque blocks) or modes 1, 5, 6, and 7 (alpha blocks).\n"); - fprintf(stderr, "By default, a DX10 DDS file and a unpacked PNG file will be written to the current\ndirectory with the .dds/_unpacked.png/_unpacked_alpha.png suffixes.\n\n"); - fprintf(stderr, "Usage: bc7enc [-apng_filename] [options] input_filename.png [compressed_output.dds] [unpacked_output.png]\n\n"); - fprintf(stderr, "-apng_filename Load G channel of PNG file into alpha channel of source image\n"); - fprintf(stderr, "-g Don't write unpacked output PNG files (this disables PSNR metrics too).\n"); - fprintf(stderr, "-y Flip source image along Y axis before packing\n"); - fprintf(stderr, "-o Write output files to the current directory\n"); - fprintf(stderr, "-1 Encode to BC1. -u[0,5] controls quality vs. perf. tradeoff for RGB.\n"); - fprintf(stderr, "-3 Encode to BC3. -u[0,5] controls quality vs. perf. tradeoff for RGB.\n"); - fprintf(stderr, "-4 Encode to BC4\n"); - fprintf(stderr, "-5 Encode to BC5\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "-X# BC4/5: Set first color channel (defaults to 0 or red)\n"); - fprintf(stderr, "-Y# BC4/5: Set second color channel (defaults to 1 or green)\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "-l BC7: Use linear colorspace metrics instead of perceptual\n"); - fprintf(stderr, "-uX BC1/3/7: Higher quality levels, X ranges from [0,4] for BC7, or [0,5] for BC1-3\n"); - fprintf(stderr, "-pX BC7: Scan X partitions in mode 1, X ranges from [0,64], use 0 to disable mode 1 entirely (faster)\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "-b BC1: Enable 3-color mode for blocks containing black or very dark pixels. (Important: engine/shader MUST ignore decoded texture alpha if this flag is enabled!)\n"); - fprintf(stderr, "-c BC1: Disable 3-color mode for solid color blocks\n"); - fprintf(stderr, "-n BC1: Encode/decode for NVidia GPU's\n"); - fprintf(stderr, "-m BC1: Encode/decode for AMD GPU's\n"); - fprintf(stderr, "-r BC1: Encode/decode using ideal BC1 formulas with rounding for 4-color block colors 2,3 (same as AMD Compressonator)\n"); - fprintf(stderr, "-LX BC1: Set encoding level, where 0=fastest and 19=slowest but highest quality\n"); - fprintf(stderr, "-f Force writing DX10-style DDS files (otherwise for BC1-5 it uses DX9-style DDS files)\n"); - fprintf(stderr, "\nBy default, this tool encodes to BC1 without rounding 4-color block colors 2,3, which may not match the output of some software decoders.\n"); - fprintf(stderr, "\nFor BC4 and BC5: Not all tools support reading DX9-style BC4/BC5 format files (or BC4/5 files at all). AMD Compressonator does.\n"); - - return EXIT_FAILURE; -} - -struct color_quad_u8 -{ - uint8_t m_c[4]; - - inline color_quad_u8(uint8_t r, uint8_t g, uint8_t b, uint8_t a) - { - set(r, g, b, a); - } - - inline color_quad_u8(uint8_t y = 0, uint8_t a = 255) - { - set(y, a); - } - - inline color_quad_u8 &set(uint8_t y, uint8_t a = 255) - { - m_c[0] = y; - m_c[1] = y; - m_c[2] = y; - m_c[3] = a; - return *this; - } - - inline color_quad_u8 &set(uint8_t r, uint8_t g, uint8_t b, uint8_t a) - { - m_c[0] = r; - m_c[1] = g; - m_c[2] = b; - m_c[3] = a; - return *this; - } - - inline uint8_t &operator[] (uint32_t i) { assert(i < 4); return m_c[i]; } - inline uint8_t operator[] (uint32_t i) const { assert(i < 4); return m_c[i]; } - - inline int get_luma() const { return (13938U * m_c[0] + 46869U * m_c[1] + 4729U * m_c[2] + 32768U) >> 16U; } // REC709 weightings -}; -typedef std::vector color_quad_u8_vec; - -class image_u8 -{ -public: - image_u8() : - m_width(0), m_height(0) - { - } - - image_u8(uint32_t width, uint32_t height) : - m_width(width), m_height(height) - { - m_pixels.resize(width * height); - } - - inline const color_quad_u8_vec &get_pixels() const { return m_pixels; } - inline color_quad_u8_vec &get_pixels() { return m_pixels; } - - inline uint32_t width() const { return m_width; } - inline uint32_t height() const { return m_height; } - inline uint32_t total_pixels() const { return m_width * m_height; } - - inline color_quad_u8 &operator()(uint32_t x, uint32_t y) { assert(x < m_width && y < m_height); return m_pixels[x + m_width * y]; } - inline const color_quad_u8 &operator()(uint32_t x, uint32_t y) const { assert(x < m_width && y < m_height); return m_pixels[x + m_width * y]; } - - image_u8& clear() - { - m_width = m_height = 0; - m_pixels.clear(); - return *this; - } - - image_u8& init(uint32_t width, uint32_t height) - { - clear(); - - m_width = width; - m_height = height; - m_pixels.resize(width * height); - return *this; - } - - image_u8& set_all(const color_quad_u8 &p) - { - for (uint32_t i = 0; i < m_pixels.size(); i++) - m_pixels[i] = p; - return *this; - } - - image_u8& crop(uint32_t new_width, uint32_t new_height) - { - if ((m_width == new_width) && (m_height == new_height)) - return *this; - - image_u8 new_image(new_width, new_height); - - const uint32_t w = std::min(m_width, new_width); - const uint32_t h = std::min(m_height, new_height); - - for (uint32_t y = 0; y < h; y++) - for (uint32_t x = 0; x < w; x++) - new_image(x, y) = (*this)(x, y); - - return swap(new_image); - } - - image_u8 &swap(image_u8 &other) - { - std::swap(m_width, other.m_width); - std::swap(m_height, other.m_height); - std::swap(m_pixels, other.m_pixels); - return *this; - } - - inline void get_block(uint32_t bx, uint32_t by, uint32_t width, uint32_t height, color_quad_u8 *pPixels) - { - assert((bx * width + width) <= m_width); - assert((by * height + height) <= m_height); - - for (uint32_t y = 0; y < height; y++) - memcpy(pPixels + y * width, &(*this)(bx * width, by * height + y), width * sizeof(color_quad_u8)); - } - - inline void set_block(uint32_t bx, uint32_t by, uint32_t width, uint32_t height, const color_quad_u8 *pPixels) - { - assert((bx * width + width) <= m_width); - assert((by * height + height) <= m_height); - - for (uint32_t y = 0; y < height; y++) - memcpy(&(*this)(bx * width, by * height + y), pPixels + y * width, width * sizeof(color_quad_u8)); - } - - image_u8 &swizzle(uint32_t r, uint32_t g, uint32_t b, uint32_t a) - { - assert((r | g | b | a) <= 3); - for (uint32_t y = 0; y < m_height; y++) - { - for (uint32_t x = 0; x < m_width; x++) - { - color_quad_u8 tmp((*this)(x, y)); - (*this)(x, y).set(tmp[r], tmp[g], tmp[b], tmp[a]); - } - } - - return *this; - } - -private: - color_quad_u8_vec m_pixels; - uint32_t m_width, m_height; -}; - -static bool load_png(const char *pFilename, image_u8 &img) -{ - img.clear(); - - std::vector pixels; - unsigned int w = 0, h = 0; - unsigned int e = lodepng::decode(pixels, w, h, pFilename); - if (e != 0) - { - fprintf(stderr, "Failed loading PNG file %s\n", pFilename); - return false; - } - - img.init(w, h); - memcpy(&img.get_pixels()[0], &pixels[0], w * h * sizeof(uint32_t)); - - return true; -} - -static bool save_png(const char *pFilename, const image_u8 &img, bool save_alpha) -{ - const uint32_t w = img.width(); - const uint32_t h = img.height(); - - std::vector pixels; - if (save_alpha) - { - pixels.resize(w * h * sizeof(color_quad_u8)); - memcpy(&pixels[0], &img.get_pixels()[0], w * h * sizeof(color_quad_u8)); - } - else - { - pixels.resize(w * h * 3); - unsigned char *pDst = &pixels[0]; - for (uint32_t y = 0; y < h; y++) - for (uint32_t x = 0; x < w; x++, pDst += 3) - pDst[0] = img(x, y)[0], pDst[1] = img(x, y)[1], pDst[2] = img(x, y)[2]; - } - - return lodepng::encode(pFilename, pixels, w, h, save_alpha ? LCT_RGBA : LCT_RGB) == 0; -} - -class image_metrics -{ -public: - double m_max, m_mean, m_mean_squared, m_root_mean_squared, m_peak_snr; - - image_metrics() - { - clear(); - } - - void clear() - { - memset(this, 0, sizeof(*this)); - } - - void compute(const image_u8 &a, const image_u8 &b, uint32_t first_channel, uint32_t num_channels) - { - const bool average_component_error = true; - - const uint32_t width = std::min(a.width(), b.width()); - const uint32_t height = std::min(a.height(), b.height()); - - assert((first_channel < 4U) && (first_channel + num_channels <= 4U)); - - // Histogram approach originally due to Charles Bloom. - double hist[256]; - memset(hist, 0, sizeof(hist)); - - for (uint32_t y = 0; y < height; y++) - { - for (uint32_t x = 0; x < width; x++) - { - const color_quad_u8 &ca = a(x, y); - const color_quad_u8 &cb = b(x, y); - - if (!num_channels) - hist[iabs(ca.get_luma() - cb.get_luma())]++; - else - { - for (uint32_t c = 0; c < num_channels; c++) - hist[iabs(ca[first_channel + c] - cb[first_channel + c])]++; - } - } - } - - m_max = 0; - double sum = 0.0f, sum2 = 0.0f; - for (uint32_t i = 0; i < 256; i++) - { - if (!hist[i]) - continue; - - m_max = std::max(m_max, i); - - double x = i * hist[i]; - - sum += x; - sum2 += i * x; - } - - // See http://richg42.blogspot.com/2016/09/how-to-compute-psnr-from-old-berkeley.html - double total_values = width * height; - - if (average_component_error) - total_values *= clamp(num_channels, 1, 4); - - m_mean = clamp(sum / total_values, 0.0f, 255.0f); - m_mean_squared = clamp(sum2 / total_values, 0.0f, 255.0f * 255.0f); - - m_root_mean_squared = sqrt(m_mean_squared); - - if (!m_root_mean_squared) - m_peak_snr = 100.0f; - else - m_peak_snr = clamp(log10(255.0f / m_root_mean_squared) * 20.0f, 0.0f, 100.0f); - } -}; - -struct block8 -{ - uint64_t m_vals[1]; -}; - -typedef std::vector block8_vec; - -struct block16 -{ - uint64_t m_vals[2]; -}; - -typedef std::vector block16_vec; - -static bool save_dds(const char *pFilename, uint32_t width, uint32_t height, const void *pBlocks, uint32_t pixel_format_bpp, DXGI_FORMAT dxgi_format, bool srgb, bool force_dx10_header) -{ - (void)srgb; - - FILE *pFile = NULL; - pFile = fopen(pFilename, "wb"); - if (!pFile) - { - fprintf(stderr, "Failed creating file %s!\n", pFilename); - return false; - } - - fwrite("DDS ", 4, 1, pFile); - - DDSURFACEDESC2 desc; - memset(&desc, 0, sizeof(desc)); - - desc.dwSize = sizeof(desc); - desc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS; - - desc.dwWidth = width; - desc.dwHeight = height; - - desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE; - desc.ddpfPixelFormat.dwSize = sizeof(desc.ddpfPixelFormat); - - desc.ddpfPixelFormat.dwFlags |= DDPF_FOURCC; - - desc.lPitch = (((desc.dwWidth + 3) & ~3) * ((desc.dwHeight + 3) & ~3) * pixel_format_bpp) >> 3; - desc.dwFlags |= DDSD_LINEARSIZE; - - desc.ddpfPixelFormat.dwRGBBitCount = 0; - - if ( (!force_dx10_header) && - ((dxgi_format == DXGI_FORMAT_BC1_UNORM) || - (dxgi_format == DXGI_FORMAT_BC3_UNORM) || - (dxgi_format == DXGI_FORMAT_BC4_UNORM) || - (dxgi_format == DXGI_FORMAT_BC5_UNORM)) ) - { - if (dxgi_format == DXGI_FORMAT_BC1_UNORM) - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', 'T', '1'); - else if (dxgi_format == DXGI_FORMAT_BC3_UNORM) - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', 'T', '5'); - else if (dxgi_format == DXGI_FORMAT_BC4_UNORM) - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('A', 'T', 'I', '1'); - else if (dxgi_format == DXGI_FORMAT_BC5_UNORM) - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('A', 'T', 'I', '2'); - - fwrite(&desc, sizeof(desc), 1, pFile); - } - else - { - desc.ddpfPixelFormat.dwFourCC = (uint32_t)PIXEL_FMT_FOURCC('D', 'X', '1', '0'); - - fwrite(&desc, sizeof(desc), 1, pFile); - - DDS_HEADER_DXT10 hdr10; - memset(&hdr10, 0, sizeof(hdr10)); - - // Not all tools support DXGI_FORMAT_BC7_UNORM_SRGB (like NVTT), but ddsview in DirectXTex pays attention to it. So not sure what to do here. - // For best compatibility just write DXGI_FORMAT_BC7_UNORM. - //hdr10.dxgiFormat = srgb ? DXGI_FORMAT_BC7_UNORM_SRGB : DXGI_FORMAT_BC7_UNORM; - hdr10.dxgiFormat = dxgi_format; // DXGI_FORMAT_BC7_UNORM; - hdr10.resourceDimension = D3D10_RESOURCE_DIMENSION_TEXTURE2D; - hdr10.arraySize = 1; - - fwrite(&hdr10, sizeof(hdr10), 1, pFile); - } - - fwrite(pBlocks, desc.lPitch, 1, pFile); - - if (fclose(pFile) == EOF) - { - fprintf(stderr, "Failed writing to DDS file %s!\n", pFilename); - return false; - } - - return true; -} - -static void strip_extension(std::string &s) -{ - for (int32_t i = (int32_t)s.size() - 1; i >= 0; i--) - { - if (s[i] == '.') - { - s.resize(i); - break; - } - } -} - -static void strip_path(std::string& s) -{ - for (int32_t i = (int32_t)s.size() - 1; i >= 0; i--) - { - if ((s[i] == '/') || (s[i] == ':') || (s[i] == '\\')) - { - s.erase(0, i + 1); - break; - } - } -} - -int main(int argc, char *argv[]) -{ - if (argc < 2) - return print_usage(); - - std::string src_filename; - std::string src_alpha_filename; - std::string dds_output_filename; - std::string png_output_filename; - std::string png_alpha_output_filename; - - bool no_output_png = false; - bool out_cur_dir = false; - - int uber_level = 0; - int max_partitions_to_scan = BC7ENC_MAX_PARTITIONS1; - bool perceptual = true; - bool y_flip = false; - uint32_t bc45_channel0 = 0; - uint32_t bc45_channel1 = 1; - - rgbcx::bc1_approx_mode bc1_mode = rgbcx::bc1_approx_mode::cBC1Ideal; - bool use_bc1_3color_mode = true; - bool use_bc1_3color_mode_for_black = false; - int bc1_quality_level = 2; - - DXGI_FORMAT dxgi_format = DXGI_FORMAT_BC7_UNORM; - uint32_t pixel_format_bpp = 8; - bool force_dx10_dds = false; - - for (int i = 1; i < argc; i++) - { - const char *pArg = argv[i]; - if (pArg[0] == '-') - { - switch (pArg[1]) - { - case '1': - { - dxgi_format = DXGI_FORMAT_BC1_UNORM; - pixel_format_bpp = 4; - printf("Compressing to BC1\n"); - break; - } - case '3': - { - dxgi_format = DXGI_FORMAT_BC3_UNORM; - pixel_format_bpp = 8; - printf("Compressing to BC3\n"); - break; - } - case '4': - { - dxgi_format = DXGI_FORMAT_BC4_UNORM; - pixel_format_bpp = 4; - printf("Compressing to BC4\n"); - break; - } - case '5': - { - dxgi_format = DXGI_FORMAT_BC5_UNORM; - pixel_format_bpp = 8; - printf("Compressing to BC5\n"); - break; - } - case 'y': - { - y_flip = true; - break; - } - case 'a': - { - src_alpha_filename = pArg + 2; - break; - } - case 'X': - { - bc45_channel0 = atoi(pArg + 2); - if ((bc45_channel0 < 0) || (bc45_channel0 > 3)) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - } - case 'Y': - { - bc45_channel1 = atoi(pArg + 2); - if ((bc45_channel1 < 0) || (bc45_channel1 > 3)) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - } - case 'f': - { - force_dx10_dds = true; - break; - } - case 'u': - { - uber_level = atoi(pArg + 2); - if ((uber_level < 0) || (uber_level > MAX_UBER_LEVEL)) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - - } - case 'L': - { - bc1_quality_level = atoi(pArg + 2); - if (((int)bc1_quality_level < (int)rgbcx::MIN_LEVEL) || ((int)bc1_quality_level > (int)(rgbcx::MAX_LEVEL + 1))) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - - } - case 'g': - { - no_output_png = true; - break; - } - case 'l': - { - perceptual = false; - break; - } - case 'p': - { - max_partitions_to_scan = atoi(pArg + 2); - if ((max_partitions_to_scan < 0) || (max_partitions_to_scan > BC7ENC_MAX_PARTITIONS1)) - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - break; - } - case 'n': - { - bc1_mode = rgbcx::bc1_approx_mode::cBC1NVidia; - break; - } - case 'm': - { - bc1_mode = rgbcx::bc1_approx_mode::cBC1AMD; - break; - } - case 'r': - { - bc1_mode = rgbcx::bc1_approx_mode::cBC1IdealRound4; - break; - } - case 'o': - { - out_cur_dir = true; - break; - } - case 'b': - { - use_bc1_3color_mode_for_black = true; - break; - } - case 'c': - { - use_bc1_3color_mode = false; - break; - } - default: - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - } - } - else - { - if (!src_filename.size()) - src_filename = pArg; - else if (!dds_output_filename.size()) - dds_output_filename = pArg; - else if (!png_output_filename.size()) - png_output_filename = pArg; - else - { - fprintf(stderr, "Invalid argument: %s\n", pArg); - return EXIT_FAILURE; - } - } - } - - const uint32_t bytes_per_block = (16 * pixel_format_bpp) / 8; - assert(bytes_per_block == 8 || bytes_per_block == 16); - - if (!src_filename.size()) - { - fprintf(stderr, "No source filename specified!\n"); - return EXIT_FAILURE; - } - - if (!dds_output_filename.size()) - { - dds_output_filename = src_filename; - strip_extension(dds_output_filename); - if (out_cur_dir) - strip_path(dds_output_filename); - dds_output_filename += ".dds"; - } - - if (!png_output_filename.size()) - { - png_output_filename = src_filename; - strip_extension(png_output_filename); - if (out_cur_dir) - strip_path(png_output_filename); - png_output_filename += "_unpacked.png"; - } - - png_alpha_output_filename = png_output_filename; - strip_extension(png_alpha_output_filename); - png_alpha_output_filename += "_alpha.png"; - - image_u8 source_image; - if (!load_png(src_filename.c_str(), source_image)) - return EXIT_FAILURE; - - printf("Source image: %s %ux%u\n", src_filename.c_str(), source_image.width(), source_image.height()); - - if (src_alpha_filename.size()) - { - image_u8 source_alpha_image; - if (!load_png(src_alpha_filename.c_str(), source_alpha_image)) - return EXIT_FAILURE; - - printf("Source alpha image: %s %ux%u\n", src_alpha_filename.c_str(), source_alpha_image.width(), source_alpha_image.height()); - - const uint32_t w = std::min(source_alpha_image.width(), source_image.width()); - const uint32_t h = std::min(source_alpha_image.height(), source_image.height()); - - for (uint32_t y = 0; y < h; y++) - for (uint32_t x = 0; x < w; x++) - source_image(x, y)[3] = source_alpha_image(x, y)[1]; - } - -#if 0 - // HACK HACK - for (uint32_t y = 0; y < source_image.height(); y++) - for (uint32_t x = 0; x < source_image.width(); x++) - source_image(x, y)[3] = 254; -#endif - - const uint32_t orig_width = source_image.width(); - const uint32_t orig_height = source_image.height(); - - if (y_flip) - { - image_u8 temp; - temp.init(orig_width, orig_height); - - for (uint32_t y = 0; y < orig_height; y++) - for (uint32_t x = 0; x < orig_width; x++) - temp(x, (orig_height - 1) - y) = source_image(x, y); - - temp.swap(source_image); - } - - source_image.crop((source_image.width() + 3) & ~3, (source_image.height() + 3) & ~3); - - const uint32_t blocks_x = source_image.width() / 4; - const uint32_t blocks_y = source_image.height() / 4; - - block16_vec packed_image16(blocks_x * blocks_y); - block8_vec packed_image8(blocks_x * blocks_y); - - bc7enc_compress_block_params pack_params; - bc7enc_compress_block_params_init(&pack_params); - if (!perceptual) - bc7enc_compress_block_params_init_linear_weights(&pack_params); - pack_params.m_max_partitions_mode = max_partitions_to_scan; - pack_params.m_uber_level = std::min(BC7ENC_MAX_UBER_LEVEL, uber_level); - - if (dxgi_format == DXGI_FORMAT_BC7_UNORM) - { - printf("Max mode 1 partitions: %u, uber level: %u, perceptual: %u\n", pack_params.m_max_partitions_mode, pack_params.m_uber_level, perceptual); - } - else - { - printf("Level: %u, use 3-color mode: %u, use 3-color mode for black: %u, bc1_mode: %u\n", - bc1_quality_level, use_bc1_3color_mode, use_bc1_3color_mode_for_black, (int)bc1_mode); - } - - bc7enc_compress_block_init(); - rgbcx::init(bc1_mode); - - bool has_alpha = false; - - clock_t start_t = clock(); - uint32_t bc7_mode_hist[8]; - memset(bc7_mode_hist, 0, sizeof(bc7_mode_hist)); - - for (uint32_t by = 0; by < blocks_y; by++) - { - for (uint32_t bx = 0; bx < blocks_x; bx++) - { - color_quad_u8 pixels[16]; - - source_image.get_block(bx, by, 4, 4, pixels); - if (!has_alpha) - { - for (uint32_t i = 0; i < 16; i++) - { - if (pixels[i].m_c[3] < 255) - { - has_alpha = true; - break; - } - } - } - - switch (dxgi_format) - { - case DXGI_FORMAT_BC1_UNORM: - { - block8* pBlock = &packed_image8[bx + by * blocks_x]; - - rgbcx::encode_bc1(bc1_quality_level, pBlock, &pixels[0].m_c[0], use_bc1_3color_mode, use_bc1_3color_mode_for_black); - break; - } - case DXGI_FORMAT_BC3_UNORM: - { - block16* pBlock = &packed_image16[bx + by * blocks_x]; - - rgbcx::encode_bc3(bc1_quality_level, pBlock, &pixels[0].m_c[0]); - break; - } - case DXGI_FORMAT_BC4_UNORM: - { - block8* pBlock = &packed_image8[bx + by * blocks_x]; - - rgbcx::encode_bc4(pBlock, &pixels[0].m_c[bc45_channel0], 4); - break; - } - case DXGI_FORMAT_BC5_UNORM: - { - block16* pBlock = &packed_image16[bx + by * blocks_x]; - - rgbcx::encode_bc5(pBlock, &pixels[0].m_c[0], bc45_channel0, bc45_channel1, 4); - break; - } - case DXGI_FORMAT_BC7_UNORM: - { - block16* pBlock = &packed_image16[bx + by * blocks_x]; - - bc7enc_compress_block(pBlock, pixels, &pack_params); - - uint32_t mode = ((uint8_t *)pBlock)[0]; - for (uint32_t m = 0; m <= 7; m++) - { - if (mode & (1 << m)) - { - bc7_mode_hist[m]++; - break; - } - } - break; - } - default: - { - assert(0); - break; - } - } - } - - if ((by & 127) == 0) - printf("."); - } - - clock_t end_t = clock(); - - printf("\nTotal time: %f secs\n", (double)(end_t - start_t) / CLOCKS_PER_SEC); - - if (dxgi_format == DXGI_FORMAT_BC7_UNORM) - { - printf("BC7 mode histogram:\n"); - for (uint32_t i = 0; i < 8; i++) - printf("%u: %u\n", i, bc7_mode_hist[i]); - } - - if (has_alpha) - printf("Source image had an alpha channel.\n"); - - bool failed = false; - if (!save_dds(dds_output_filename.c_str(), orig_width, orig_height, (bytes_per_block == 16) ? (void*)&packed_image16[0] : (void*)&packed_image8[0], pixel_format_bpp, dxgi_format, perceptual, force_dx10_dds)) - failed = true; - else - printf("Wrote DDS file %s\n", dds_output_filename.c_str()); - - if ((!no_output_png) && (png_output_filename.size())) - { - image_u8 unpacked_image(source_image.width(), source_image.height()); - - bool punchthrough_flag = false; - for (uint32_t by = 0; by < blocks_y; by++) - { - for (uint32_t bx = 0; bx < blocks_x; bx++) - { - void* pBlock = (bytes_per_block == 16) ? (void *)&packed_image16[bx + by * blocks_x] : (void*)&packed_image8[bx + by * blocks_x]; - - color_quad_u8 unpacked_pixels[16]; - for (uint32_t i = 0; i < 16; i++) - unpacked_pixels[i].set(0, 0, 0, 255); - - switch (dxgi_format) - { - case DXGI_FORMAT_BC1_UNORM: - rgbcx::unpack_bc1(pBlock, unpacked_pixels, true, bc1_mode); - break; - case DXGI_FORMAT_BC3_UNORM: - if (!rgbcx::unpack_bc3(pBlock, unpacked_pixels, bc1_mode)) - punchthrough_flag = true; - break; - case DXGI_FORMAT_BC4_UNORM: - rgbcx::unpack_bc4(pBlock, &unpacked_pixels[0][0], 4); - break; - case DXGI_FORMAT_BC5_UNORM: - rgbcx::unpack_bc5(pBlock, &unpacked_pixels[0][0], 0, 1, 4); - break; - case DXGI_FORMAT_BC7_UNORM: - bc7decomp::unpack_bc7((const uint8_t*)pBlock, (bc7decomp::color_rgba*)unpacked_pixels); - break; - default: - assert(0); - break; - } - - unpacked_image.set_block(bx, by, 4, 4, unpacked_pixels); - } // bx - } // by - - if ((punchthrough_flag) && (dxgi_format == DXGI_FORMAT_BC3_UNORM)) - fprintf(stderr, "Warning: BC3 mode selected, but rgbcx::unpack_bc3() returned one or more blocks using 3-color mode!\n"); - - if ((dxgi_format != DXGI_FORMAT_BC4_UNORM) && (dxgi_format != DXGI_FORMAT_BC5_UNORM)) - { - image_metrics y_metrics; - y_metrics.compute(source_image, unpacked_image, 0, 0); - printf("Luma Max error: %3.0f RMSE: %f PSNR %03.02f dB\n", y_metrics.m_max, y_metrics.m_root_mean_squared, y_metrics.m_peak_snr); - - image_metrics rgb_metrics; - rgb_metrics.compute(source_image, unpacked_image, 0, 3); - printf("RGB Max error: %3.0f RMSE: %f PSNR %03.02f dB\n", rgb_metrics.m_max, rgb_metrics.m_root_mean_squared, rgb_metrics.m_peak_snr); - - image_metrics rgba_metrics; - rgba_metrics.compute(source_image, unpacked_image, 0, 4); - printf("RGBA Max error: %3.0f RMSE: %f PSNR %03.02f dB\n", rgba_metrics.m_max, rgba_metrics.m_root_mean_squared, rgba_metrics.m_peak_snr); - } - - for (uint32_t chan = 0; chan < 4; chan++) - { - if (dxgi_format == DXGI_FORMAT_BC4_UNORM) - { - if (chan != bc45_channel0) - continue; - } - else if (dxgi_format == DXGI_FORMAT_BC5_UNORM) - { - if ((chan != bc45_channel0) && (chan != bc45_channel1)) - continue; - } - - image_metrics c_metrics; - c_metrics.compute(source_image, unpacked_image, chan, 1); - static const char *s_chan_names[4] = { "Red ", "Green", "Blue ", "Alpha" }; - printf("%s Max error: %3.0f RMSE: %f PSNR %03.02f dB\n", s_chan_names[chan], c_metrics.m_max, c_metrics.m_root_mean_squared, c_metrics.m_peak_snr); - } - - if (bc1_mode != rgbcx::bc1_approx_mode::cBC1Ideal) - printf("Note: BC1/BC3 RGB decoding was done with the specified vendor's BC1 approximations.\n"); - - if (!save_png(png_output_filename.c_str(), unpacked_image, false)) - failed = true; - else - printf("Wrote PNG file %s\n", png_output_filename.c_str()); - - if (png_alpha_output_filename.size()) - { - image_u8 unpacked_image_alpha(unpacked_image); - for (uint32_t y = 0; y < unpacked_image_alpha.height(); y++) - for (uint32_t x = 0; x < unpacked_image_alpha.width(); x++) - unpacked_image_alpha(x, y).set(unpacked_image_alpha(x, y)[3], 255); - - if (!save_png(png_alpha_output_filename.c_str(), unpacked_image_alpha, false)) - failed = true; - else - printf("Wrote PNG file %s\n", png_alpha_output_filename.c_str()); - } - } - - return failed ? EXIT_FAILURE : EXIT_SUCCESS; -} diff --git a/external/gli/gli/CMakeLists.txt b/external/gli/gli/CMakeLists.txt deleted file mode 100644 index 46d803d1..00000000 --- a/external/gli/gli/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -set(NAME gli_dummy) - -file(GLOB ROOT_SOURCE *.cpp) -file(GLOB ROOT_INLINE *.inl) -file(GLOB ROOT_HEADER *.hpp) -file(GLOB ROOT_TEXT ../*.txt) -file(GLOB ROOT_MD ../*.md) -file(GLOB ROOT_KMG ../doc/spec/*.html) - -file(GLOB_RECURSE CORE_SOURCE ./core/*.cpp) -file(GLOB_RECURSE CORE_INLINE ./core/*.inl) -file(GLOB_RECURSE CORE_HEADER ./core/*.hpp) - -file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp) -file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl) -file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp) - -source_group("KMG Spec" FILES ${ROOT_KMG}) -source_group("Text Files" FILES ${ROOT_TEXT} ${ROOT_MD}) -source_group("Core Files" FILES ${CORE_SOURCE}) -source_group("Core Files" FILES ${CORE_INLINE}) -source_group("Core Files" FILES ${CORE_HEADER}) -source_group("GTX Files" FILES ${GTX_SOURCE}) -source_group("GTX Files" FILES ${GTX_INLINE}) -source_group("GTX Files" FILES ${GTX_HEADER}) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) - -add_executable(${NAME} ${ROOT_TEXT} ${ROOT_MD} ${ROOT_KMG} - ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} - ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER} - ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}) diff --git a/external/gli/gli/clear.hpp b/external/gli/gli/clear.hpp deleted file mode 100644 index db5a98f8..00000000 --- a/external/gli/gli/clear.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/// @brief Include to copy textures or a subset of either textures. These operations are performed without memory allocations. -/// @file gli/clear.hpp - -#pragma once - -namespace gli -{ - /// Clear a complete texture - template - void clear(texture_type& Texture); - - /// Clear a complete texture - template - void clear(texture_type& Texture, gen_type const& BlockData); - - /// Clear a specific image of a texture - template - void clear(texture_type& Texture, size_t Layer, size_t Face, size_t Level, gen_type const& BlockData); - - // Clear an entire level of a texture - template - void clear_level(texture_type& Texture, size_t BaseLevel, gen_type const& BlockData); - - // Clear multiple levels of a texture - template - void clear_level(texture_type& Texture, size_t BaseLevel, size_t LevelCount, gen_type const& BlockData); - - // Clear an entire face of a texture - template - void clear_face(texture_type& Texture, size_t BaseFace, gen_type const& BlockData); - - // Clear multiple faces of a texture - template - void clear_face(texture_type& Texture, size_t BaseFace, size_t FaceCount, gen_type const& BlockData); - - // Clear an entire layer of a texture - template - void clear_layer(texture_type& Texture, size_t BaseLayer, gen_type const& BlockData); - - // Clear multiple layers of a texture - template - void clear_layer(texture_type& Texture, size_t BaseLayer, size_t LayerCount, gen_type const& BlockData); -}//namespace gli - -#include "./core/clear.inl" - diff --git a/external/gli/gli/comparison.hpp b/external/gli/gli/comparison.hpp deleted file mode 100644 index 687cca4e..00000000 --- a/external/gli/gli/comparison.hpp +++ /dev/null @@ -1,30 +0,0 @@ -/// @brief Include to use operators to compare whether two textures or images are equal -/// @file gli/comparison.hpp - -#pragma once - -#include "image.hpp" -#include "texture1d.hpp" -#include "texture1d_array.hpp" -#include "texture2d.hpp" -#include "texture2d_array.hpp" -#include "texture3d.hpp" -#include "texture_cube.hpp" -#include "texture_cube_array.hpp" - -namespace gli -{ - /// Compare two images. Two images are equal when the date is the same. - bool operator==(image const& ImageA, image const& ImageB); - - /// Compare two images. Two images are equal when the date is the same. - bool operator!=(image const& ImageA, image const& ImageB); - - /// Compare two textures. Two textures are the same when the data, the format and the targets are the same. - bool operator==(texture const& A, texture const& B); - - /// Compare two textures. Two textures are the same when the data, the format and the targets are the same. - bool operator!=(texture const& A, texture const& B); -}//namespace gli - -#include "./core/comparison.inl" diff --git a/external/gli/gli/convert.hpp b/external/gli/gli/convert.hpp deleted file mode 100644 index 21d90d9a..00000000 --- a/external/gli/gli/convert.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/// @brief Include to copy textures, images or a subset of either textures or an images. These operations will cause memory allocations. -/// @file gli/convert.hpp - -#pragma once - -#include "texture1d.hpp" -#include "texture1d_array.hpp" -#include "texture2d.hpp" -#include "texture2d_array.hpp" -#include "texture3d.hpp" -#include "texture_cube.hpp" -#include "texture_cube_array.hpp" - -namespace gli -{ - /// Convert texture data to a new format - /// - /// @param Texture Source texture, the format must be uncompressed. - /// @param Format Destination Texture format, it must be uncompressed. - template - texture_type convert(texture_type const& Texture, format Format); -}//namespace gli - -#include "./core/convert.inl" diff --git a/external/gli/gli/copy.hpp b/external/gli/gli/copy.hpp deleted file mode 100644 index ec32f87a..00000000 --- a/external/gli/gli/copy.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/// @brief Include to copy textures or a subset of either textures. These operations are performed without memory allocations. -/// @file gli/copy.hpp - -#pragma once - -#include "type.hpp" - -namespace gli -{ - /// Copy a specific image of a texture - template - void copy( - texture_src_type const& TextureSrc, size_t LayerSrc, size_t FaceSrc, size_t LevelSrc, - texture_dst_type& TextureDst, size_t LayerDst, size_t FaceDst, size_t LevelDst); - - /// Copy a texture - template - void copy( - texture_src_type const& TextureSrc, - texture_dst_type& TextureDst); - - // Copy an entire level of a texture - template - void copy_level( - texture_src_type const& TextureSrc, size_t BaseLevelSrc, - texture_dst_type& TextureDst, size_t BaseLevelDst); - - // Copy multiple levels of a texture - template - void copy_level( - texture_src_type const& TextureSrc, size_t BaseLevelSrc, - texture_dst_type& TextureDst, size_t BaseLevelDst, - size_t LevelCount); - - // Copy an entire face of a texture - template - void copy_face( - texture_src_type const& TextureSrc, size_t BaseFaceSrc, - texture_dst_type& TextureDst, size_t BaseFaceDst); - - // Copy multiple faces of a texture - template - void copy_face( - texture_src_type const& TextureSrc, size_t BaseFaceSrc, - texture_dst_type& TextureDst, size_t BaseFaceDst, - size_t FaceCount); - - // Copy an entire layer of a texture - template - void copy_layer( - texture_src_type const& TextureSrc, size_t BaseLayerSrc, - texture_dst_type& TextureDst, size_t BaseLayerDst); - - // Copy multiple layers of a texture - template - void copy_layer( - texture_src_type const& TextureSrc, size_t BaseLayerSrc, - texture_dst_type& TextureDst, size_t BaseLayerDst, - size_t LayerCount); -}//namespace gli - -#include "./core/copy.inl" diff --git a/external/gli/gli/core/bc.hpp b/external/gli/gli/core/bc.hpp deleted file mode 100644 index 4ca974d2..00000000 --- a/external/gli/gli/core/bc.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/// @brief Include to compress and decompress the BC compression scheme -/// @file gli/bc.hpp - -#pragma once - -#include "./s3tc.hpp" - -namespace gli -{ - namespace detail - { - typedef dxt1_block bc1_block; - typedef dxt3_block bc2_block; - typedef dxt5_block bc3_block; - - struct bc4_block { - glm::uint8 Red0; - glm::uint8 Red1; - glm::uint8 Bitmap[6]; - }; - - struct bc5_block { - glm::uint8 Red0; - glm::uint8 Red1; - glm::uint8 RedBitmap[6]; - glm::uint8 Green0; - glm::uint8 Green1; - glm::uint8 GreenBitmap[6]; - }; - - glm::vec4 decompress_bc1(const bc1_block &Block, const extent2d &BlockTexelCoord); - texel_block4x4 decompress_dxt1_block(const dxt1_block &Block); - - glm::vec4 decompress_bc2(const bc2_block &Block, const extent2d &BlockTexelCoord); - texel_block4x4 decompress_dxt3_block(const bc2_block &Block); - - glm::vec4 decompress_bc3(const bc3_block &Block, const extent2d &BlockTexelCoord); - texel_block4x4 decompress_bc3_block(const dxt5_block &Block); - - glm::vec4 decompress_bc4unorm(const bc4_block &Block, const extent2d &BlockTexelCoord); - glm::vec4 decompress_bc4snorm(const bc4_block &Block, const extent2d &BlockTexelCoord); - texel_block4x4 decompress_bc4unorm_block(const bc4_block &Block); - texel_block4x4 decompress_bc4snorm_block(const bc4_block &Block); - - glm::vec4 decompress_bc5unorm(const bc5_block &Block, const extent2d &BlockTexelCoord); - glm::vec4 decompress_bc5snorm(const bc5_block &Block, const extent2d &BlockTexelCoord); - texel_block4x4 decompress_bc5unorm_block(const bc5_block &Block); - texel_block4x4 decompress_bc5snorm_block(const bc5_block &Block); - }//namespace detail -}//namespace gli - -#include "./bc.inl" diff --git a/external/gli/gli/core/bc.inl b/external/gli/gli/core/bc.inl deleted file mode 100644 index fac7bc82..00000000 --- a/external/gli/gli/core/bc.inl +++ /dev/null @@ -1,242 +0,0 @@ -#include -#include - -namespace gli -{ - namespace detail - { - inline glm::vec4 decompress_bc1(const bc1_block &Block, const extent2d &BlockTexelCoord) - { - return decompress_dxt1(Block, BlockTexelCoord); - } - - inline texel_block4x4 decompress_bc1_block(const bc1_block &Block) - { - return decompress_dxt1_block(Block); - } - - inline glm::vec4 decompress_bc2(const bc2_block &Block, const extent2d &BlockTexelCoord) - { - return decompress_dxt3(Block, BlockTexelCoord); - } - - inline texel_block4x4 decompress_bc2_block(const bc2_block &Block) - { - return decompress_dxt3_block(Block); - } - - inline glm::vec4 decompress_bc3(const bc3_block &Block, const extent2d &BlockTexelCoord) - { - return decompress_dxt5(Block, BlockTexelCoord); - } - - inline texel_block4x4 decompress_bc3_block(const bc3_block &Block) - { - return decompress_dxt5_block(Block); - } - - inline void create_single_channel_lookup_table(bool Interpolate6, float Min, float *LookupTable) - { - if(Interpolate6) - { - LookupTable[2] = (6.0f / 7.0f) * LookupTable[0] + (1.0f / 7.0f) * LookupTable[1]; - LookupTable[3] = (5.0f / 7.0f) * LookupTable[0] + (2.0f / 7.0f) * LookupTable[1]; - LookupTable[4] = (4.0f / 7.0f) * LookupTable[0] + (3.0f / 7.0f) * LookupTable[1]; - LookupTable[5] = (3.0f / 7.0f) * LookupTable[0] + (4.0f / 7.0f) * LookupTable[1]; - LookupTable[6] = (2.0f / 7.0f) * LookupTable[0] + (5.0f / 7.0f) * LookupTable[1]; - LookupTable[7] = (1.0f / 7.0f) * LookupTable[0] + (6.0f / 7.0f) * LookupTable[1]; - } - else - { - LookupTable[2] = (4.0f / 5.0f) * LookupTable[0] + (1.0f / 5.0f) * LookupTable[1]; - LookupTable[3] = (3.0f / 5.0f) * LookupTable[0] + (2.0f / 5.0f) * LookupTable[1]; - LookupTable[4] = (2.0f / 5.0f) * LookupTable[0] + (3.0f / 5.0f) * LookupTable[1]; - LookupTable[5] = (1.0f / 5.0f) * LookupTable[0] + (4.0f / 5.0f) * LookupTable[1]; - LookupTable[6] = Min; - LookupTable[7] = 1.0f; - } - } - - inline void single_channel_bitmap_data_unorm(glm::uint8 Channel0, glm::uint8 Channel1, const glm::uint8 *ChannelBitmap, float *LookupTable, glm::uint64 &ContiguousBitmap) - { - LookupTable[0] = Channel0 / 255.0f; - LookupTable[1] = Channel1 / 255.0f; - - create_single_channel_lookup_table(Channel0 > Channel1, 0.0f, LookupTable); - - ContiguousBitmap = ChannelBitmap[0] | (ChannelBitmap[1] << 8) | (ChannelBitmap[2] << 16); - ContiguousBitmap |= glm::uint64(ChannelBitmap[3] | (ChannelBitmap[4] << 8) | (ChannelBitmap[5] << 16)) << 24; - } - - inline void single_channel_bitmap_data_snorm(glm::uint8 Channel0, glm::uint8 Channel1, const glm::uint8 *ChannelBitmap, float *LookupTable, glm::uint64 &ContiguousBitmap) - { - LookupTable[0] = (Channel0 / 255.0f) * 2.0f - 1.0f; - LookupTable[1] = (Channel1 / 255.0f) * 2.0f - 1.0f; - - create_single_channel_lookup_table(Channel0 > Channel1, -1.0f, LookupTable); - - ContiguousBitmap = ChannelBitmap[0] | (ChannelBitmap[1] << 8) | (ChannelBitmap[2] << 16); - ContiguousBitmap |= glm::uint64(ChannelBitmap[3] | (ChannelBitmap[4] << 8) | (ChannelBitmap[5] << 16)) << 24; - } - - inline void single_channel_bitmap_data_snorm(glm::uint8 Channel0, glm::uint32 Channel1, bool Interpolate6, const glm::uint8 *ChannelBitmap, float *LookupTable, glm::uint64 &ContiguousBitmap) - { - LookupTable[0] = (Channel0 / 255.0f) * 2.0f - 1.0f; - LookupTable[1] = (Channel1 / 255.0f) * 2.0f - 1.0f; - - create_single_channel_lookup_table(Interpolate6, -1.0f, LookupTable); - - ContiguousBitmap = ChannelBitmap[0] | (ChannelBitmap[1] << 8) | (ChannelBitmap[2] << 16); - ContiguousBitmap |= glm::uint64(ChannelBitmap[3] | (ChannelBitmap[4] << 8) | (ChannelBitmap[5] << 16)) << 24; - } - - inline glm::vec4 decompress_bc4unorm(const bc4_block &Block, const extent2d &BlockTexelCoord) - { - float RedLUT[8]; - glm::uint64 Bitmap; - - single_channel_bitmap_data_unorm(Block.Red0, Block.Red1, Block.Bitmap, RedLUT, Bitmap); - - glm::uint8 RedIndex = (Bitmap >> ((BlockTexelCoord.y * 4 + BlockTexelCoord.x) * 3)) & 0x7; - return glm::vec4(RedLUT[RedIndex], 0.0f, 0.0f, 1.0f); - } - - inline glm::vec4 decompress_bc4snorm(const bc4_block &Block, const extent2d &BlockTexelCoord) - { - float RedLUT[8]; - glm::uint64 Bitmap; - - single_channel_bitmap_data_snorm(Block.Red0, Block.Red1, Block.Bitmap, RedLUT, Bitmap); - - glm::uint8 RedIndex = (Bitmap >> ((BlockTexelCoord.y * 4 + BlockTexelCoord.x) * 3)) & 0x7; - return glm::vec4(RedLUT[RedIndex], 0.0f, 0.0f, 1.0f); - } - - inline texel_block4x4 decompress_bc4unorm_block(const bc4_block &Block) - { - float RedLUT[8]; - glm::uint64 Bitmap; - - single_channel_bitmap_data_unorm(Block.Red0, Block.Red1, Block.Bitmap, RedLUT, Bitmap); - - texel_block4x4 TexelBlock; - for(glm::uint8 Row = 0; Row < 4; ++Row) - { - for(glm::uint8 Col = 0; Col < 4; ++Col) - { - glm::uint8 RedIndex = (Bitmap >> ((Row * 4 + Col) * 3)) & 0x7; - TexelBlock.Texel[Row][Col] = glm::vec4(RedLUT[RedIndex], 0.0f, 0.0f, 1.0f); - } - } - - return TexelBlock; - } - - inline texel_block4x4 decompress_bc4snorm_block(const bc4_block &Block) - { - float RedLUT[8]; - glm::uint64 Bitmap; - - single_channel_bitmap_data_snorm(Block.Red0, Block.Red1, Block.Bitmap, RedLUT, Bitmap); - - texel_block4x4 TexelBlock; - for(glm::uint8 Row = 0; Row < 4; ++Row) - { - for(glm::uint8 Col = 0; Col < 4; ++Col) - { - glm::uint8 RedIndex = (Bitmap >> ((Row * 4 + Col) * 3)) & 0x7; - TexelBlock.Texel[Row][Col] = glm::vec4(RedLUT[RedIndex], 0.0f, 0.0f, 1.0f); - } - } - - return TexelBlock; - } - - inline glm::vec4 decompress_bc5unorm(const bc5_block &Block, const extent2d &BlockTexelCoord) - { - float RedLUT[8]; - glm::uint64 RedBitmap; - - single_channel_bitmap_data_unorm(Block.Red0, Block.Red1, Block.RedBitmap, RedLUT, RedBitmap); - glm::uint8 RedIndex = (RedBitmap >> ((BlockTexelCoord.y * 4 + BlockTexelCoord.x) * 3)) & 0x7; - - float GreenLUT[8]; - glm::uint64 GreenBitmap; - - single_channel_bitmap_data_unorm(Block.Green0, Block.Green1, Block.GreenBitmap, GreenLUT, GreenBitmap); - glm::uint8 GreenIndex = (GreenBitmap >> ((BlockTexelCoord.y * 4 + BlockTexelCoord.x) * 3)) & 0x7; - - return glm::vec4(RedLUT[RedIndex], GreenLUT[GreenIndex], 0.0f, 1.0f); - } - - inline glm::vec4 decompress_bc5snorm(const bc5_block &Block, const extent2d &BlockTexelCoord) - { - float RedLUT[8]; - glm::uint64 RedBitmap; - - single_channel_bitmap_data_snorm(Block.Red0, Block.Red1, Block.RedBitmap, RedLUT, RedBitmap); - glm::uint8 RedIndex = (RedBitmap >> ((BlockTexelCoord.y * 4 + BlockTexelCoord.x) * 3)) & 0x7; - - float GreenLUT[8]; - glm::uint64 GreenBitmap; - - single_channel_bitmap_data_snorm(Block.Green0, Block.Green1, Block.GreenBitmap, GreenLUT, GreenBitmap); - glm::uint8 GreenIndex = (GreenBitmap >> ((BlockTexelCoord.y * 4 + BlockTexelCoord.x) * 3)) & 0x7; - - return glm::vec4(RedLUT[RedIndex], GreenLUT[GreenIndex], 0.0f, 1.0f); - } - - inline texel_block4x4 decompress_bc5unorm_block(const bc5_block &Block) - { - float RedLUT[8]; - glm::uint64 RedBitmap; - - single_channel_bitmap_data_unorm(Block.Red0, Block.Red1, Block.RedBitmap, RedLUT, RedBitmap); - - float GreenLUT[8]; - glm::uint64 GreenBitmap; - - single_channel_bitmap_data_unorm(Block.Green0, Block.Green1, Block.GreenBitmap, GreenLUT, GreenBitmap); - - texel_block4x4 TexelBlock; - for(glm::uint8 Row = 0; Row < 4; ++Row) - { - for(glm::uint8 Col = 0; Col < 4; ++Col) - { - glm::uint8 RedIndex = (RedBitmap >> ((Row * 4 + Col) * 3)) & 0x7; - glm::uint8 GreenIndex = (GreenBitmap >> ((Row * 4 + Col) * 3)) & 0x7; - TexelBlock.Texel[Row][Col] = glm::vec4(RedLUT[RedIndex], GreenLUT[GreenIndex], 0.0f, 1.0f); - } - } - - return TexelBlock; - } - - inline texel_block4x4 decompress_bc5snorm_block(const bc5_block &Block) - { - float RedLUT[8]; - glm::uint64 RedBitmap; - - single_channel_bitmap_data_snorm(Block.Red0, Block.Red1, Block.RedBitmap, RedLUT, RedBitmap); - - float GreenLUT[8]; - glm::uint64 GreenBitmap; - - single_channel_bitmap_data_snorm(Block.Green0, Block.Green1, Block.Red0 > Block.Red1, Block.GreenBitmap, GreenLUT, GreenBitmap); - - texel_block4x4 TexelBlock; - for(glm::uint8 Row = 0; Row < 4; ++Row) - { - for(glm::uint8 Col = 0; Col < 4; ++Col) - { - glm::uint8 RedIndex = (RedBitmap >> ((Row * 4 + Col) * 3)) & 0x7; - glm::uint8 GreenIndex = (GreenBitmap >> ((Row * 4 + Col) * 3)) & 0x7; - TexelBlock.Texel[Row][Col] = glm::vec4(RedLUT[RedIndex], GreenLUT[GreenIndex], 0.0f, 1.0f); - } - } - - return TexelBlock; - } - - }//namespace detail -}//namespace gli diff --git a/external/gli/gli/core/clear.hpp b/external/gli/gli/core/clear.hpp deleted file mode 100644 index 1570f71f..00000000 --- a/external/gli/gli/core/clear.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include "convert_func.hpp" - -namespace gli{ -namespace detail -{ - template - struct clear - { - static void call(textureType & Texture, typename convert::writeFunc Write, vec<4, T, P> const& Color) - { - GLI_ASSERT(Write); - - texture const ConvertTexel(Texture.target(), Texture.format(), texture::extent_type(1), 1, 1, 1); - textureType Texel(ConvertTexel); - Write(Texel, typename textureType::extent_type(0), 0, 0, 0, Color); - - size_t const BlockSize(block_size(Texture.format())); - for(size_t BlockIndex = 0, BlockCount = Texture.size() / BlockSize; BlockIndex < BlockCount; ++BlockIndex) - memcpy(static_cast(Texture.data()) + BlockSize * BlockIndex, Texel.data(), BlockSize); - } - }; -}//namespace detail -}//namespace gli diff --git a/external/gli/gli/core/clear.inl b/external/gli/gli/core/clear.inl deleted file mode 100644 index d7c682d8..00000000 --- a/external/gli/gli/core/clear.inl +++ /dev/null @@ -1,71 +0,0 @@ -namespace gli -{ - template - inline void clear(texture_type& Texture) - { - Texture.clear(); - } - - template - inline void clear(texture_type& Texture, gen_type const& BlockData) - { - Texture.clear(BlockData); - } - - template - inline void clear(texture_type& Texture, size_t Layer, size_t Face, size_t Level, gen_type const& BlockData) - { - Texture.clear(Layer, Face, Level, BlockData); - } - - template - inline void clear_level(texture_type& Texture, size_t BaseLevel, size_t LevelCount, gen_type const& BlockData) - { - for(size_t LayerIndex = 0, LayerCount = Texture.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_t FaceIndex = 0, FaceCount = Texture.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_t LevelIndex = 0; LevelIndex < LevelCount; ++LevelIndex) - { - Texture.template clear(LayerIndex, FaceIndex, BaseLevel + LevelIndex, BlockData); - } - } - - template - inline void clear_level(texture_type& Texture, size_t BaseLevel, gen_type const& BlockData) - { - clear_level(Texture, BaseLevel, 1, BlockData); - } - - template - inline void clear_face(texture_type& Texture, size_t BaseFace, size_t FaceCount, gen_type const& BlockData) - { - for(size_t LayerIndex = 0, LayerCount = Texture.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_t FaceIndex = 0; FaceIndex < FaceCount; ++FaceIndex) - for(size_t LevelIndex = 0, LevelCount = Texture.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - Texture.template clear(LayerIndex, BaseFace + FaceIndex, LevelIndex, BlockData); - } - } - - template - inline void clear_face(texture_type& Texture, size_t BaseFace, gen_type const& BlockData) - { - clear_face(Texture, BaseFace, 1, BlockData); - } - - template - inline void clear_layer(texture_type& Texture, size_t BaseLayer, size_t LayerCount, gen_type const& BlockData) - { - for(size_t LayerIndex = 0; LayerIndex < LayerCount; ++LayerIndex) - for(size_t FaceIndex = 0, FaceCount = Texture.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_t LevelIndex = 0, LevelCount = Texture.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - Texture.template clear(LayerIndex + BaseLayer, FaceIndex, LevelIndex, BlockData); - } - } - - template - inline void clear_layer(texture_type& Texture, size_t BaseLayer, gen_type const& BlockData) - { - clear_layer(Texture, BaseLayer, 1, BlockData); - } -}//namespace gli diff --git a/external/gli/gli/core/comparison.inl b/external/gli/gli/core/comparison.inl deleted file mode 100644 index 20fabb46..00000000 --- a/external/gli/gli/core/comparison.inl +++ /dev/null @@ -1,101 +0,0 @@ -#include - -namespace gli{ -namespace detail -{ - inline bool equalData(texture const & TextureA, texture const & TextureB) - { - GLI_ASSERT(TextureA.size() == TextureB.size()); - - if(TextureA.data() == TextureB.data()) - return true; - - for(texture::size_type LayerIndex = 0, LayerCount = TextureA.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(texture::size_type FaceIndex = 0, FaceCount = TextureA.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(texture::size_type LevelIndex = 0, LevelCount = TextureA.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - void const* PointerA = TextureA.data(LayerIndex, FaceIndex, LevelIndex); - void const* PointerB = TextureB.data(LayerIndex, FaceIndex, LevelIndex); - GLI_ASSERT(TextureA.size(LevelIndex) == TextureB.size(LevelIndex)); - if(std::memcmp(PointerA, PointerB, TextureA.size(LevelIndex)) != 0) - return false; - } - - return true; - } -}//namespace detail - - inline bool operator==(image const & ImageA, image const & ImageB) - { - if(!glm::all(glm::equal(ImageA.extent(), ImageB.extent()))) - return false; - if(ImageA.size() != ImageB.size()) - return false; - - return std::memcmp(ImageA.data(), ImageB.data(), ImageA.size()) == 0; - } - - inline bool operator!=(image const & ImageA, image const & ImageB) - { - if(!glm::all(glm::equal(ImageA.extent(), ImageB.extent()))) - return true; - if(ImageA.size() != ImageB.size()) - return true; - - return std::memcmp(ImageA.data(), ImageB.data(), ImageA.size()) != 0; - } - - inline bool equal(texture const & TextureA, texture const & TextureB) - { - if(TextureA.empty() && TextureB.empty()) - return true; - if(TextureA.empty() != TextureB.empty()) - return false; - if(TextureA.target() != TextureB.target()) - return false; - if(TextureA.layers() != TextureB.layers()) - return false; - if(TextureA.faces() != TextureB.faces()) - return false; - if(TextureA.levels() != TextureB.levels()) - return false; - if(TextureA.format() != TextureB.format()) - return false; - if(TextureA.size() != TextureB.size()) - return false; - - return detail::equalData(TextureA, TextureB); - } - - inline bool notEqual(texture const & TextureA, texture const & TextureB) - { - if(TextureA.empty() && TextureB.empty()) - return false; - if(TextureA.empty() != TextureB.empty()) - return true; - if(TextureA.target() != TextureB.target()) - return true; - if(TextureA.layers() != TextureB.layers()) - return true; - if(TextureA.faces() != TextureB.faces()) - return true; - if(TextureA.levels() != TextureB.levels()) - return true; - if(TextureA.format() != TextureB.format()) - return true; - if(TextureA.size() != TextureB.size()) - return true; - - return !detail::equalData(TextureA, TextureB); - } - - inline bool operator==(texture const & A, texture const & B) - { - return gli::equal(A, B); - } - - inline bool operator!=(texture const & A, texture const & B) - { - return gli::notEqual(A, B); - } -}//namespace gli diff --git a/external/gli/gli/core/convert.inl b/external/gli/gli/core/convert.inl deleted file mode 100644 index adddd937..00000000 --- a/external/gli/gli/core/convert.inl +++ /dev/null @@ -1,46 +0,0 @@ -#include "../core/convert_func.hpp" - -namespace gli -{ - template - inline texture_type convert(texture_type const& Texture, format Format) - { - typedef float T; - typedef typename texture::extent_type extent_type; - typedef typename texture_type::size_type size_type; - typedef typename extent_type::value_type component_type; - typedef typename detail::convert::fetchFunc fetch_type; - typedef typename detail::convert::writeFunc write_type; - - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(has_decoder(Texture.format()) || !is_compressed(Texture.format())); - GLI_ASSERT(!is_compressed(Format)); - - fetch_type Fetch = detail::convert::call(Texture.format()).Fetch; - write_type Write = detail::convert::call(Format).Write; - - texture Storage(Texture.target(), Format, Texture.texture::extent(), Texture.layers(), Texture.faces(), Texture.levels(), Texture.swizzles()); - texture_type Copy(Storage); - - for(size_type Layer = 0; Layer < Texture.layers(); ++Layer) - for(size_type Face = 0; Face < Texture.faces(); ++Face) - for(size_type Level = 0; Level < Texture.levels(); ++Level) - { - extent_type const& Dimensions = Texture.texture::extent(Level); - - for(component_type k = 0; k < Dimensions.z; ++k) - for(component_type j = 0; j < Dimensions.y; ++j) - for(component_type i = 0; i < Dimensions.x; ++i) - { - typename texture_type::extent_type const Texelcoord(extent_type(i, j, k)); - Write( - Copy, Texelcoord, Layer, Face, Level, - Fetch(Texture, Texelcoord, Layer, Face, Level)); - } - } - - return texture_type(Copy); - } - -}//namespace gli - diff --git a/external/gli/gli/core/convert_func.hpp b/external/gli/gli/core/convert_func.hpp deleted file mode 100644 index 8f3e7a88..00000000 --- a/external/gli/gli/core/convert_func.hpp +++ /dev/null @@ -1,1088 +0,0 @@ -#pragma once - -#include "../type.hpp" -#include "../texture1d.hpp" -#include "../texture1d_array.hpp" -#include "../texture2d.hpp" -#include "../texture2d_array.hpp" -#include "../texture3d.hpp" -#include "../texture_cube.hpp" -#include "../texture_cube_array.hpp" -#include "./s3tc.hpp" -#include "./bc.hpp" -#include -#include -#include - -namespace gli{ -namespace detail -{ - enum convertMode - { - CONVERT_MODE_DEFAULT, - CONVERT_MODE_CAST, - CONVERT_MODE_NORM, - CONVERT_MODE_SRGB, - CONVERT_MODE_HALF, - CONVERT_MODE_RGB9E5, - CONVERT_MODE_RG11B10F, - CONVERT_MODE_RGB10A2UNORM, - CONVERT_MODE_RGB10A2SNORM, - CONVERT_MODE_RGB10A2USCALE, - CONVERT_MODE_RGB10A2SSCALE, - CONVERT_MODE_RGB10A2UINT, - CONVERT_MODE_RGB10A2SINT, - CONVERT_MODE_44UNORM, - CONVERT_MODE_44SCALED, - CONVERT_MODE_4444UNORM, - CONVERT_MODE_4444SCALED, - CONVERT_MODE_565UNORM, - CONVERT_MODE_565SCALED, - CONVERT_MODE_5551UNORM, - CONVERT_MODE_5551SCALED, - CONVERT_MODE_332UNORM, - CONVERT_MODE_DXT1UNORM, - CONVERT_MODE_DXT3UNORM, - CONVERT_MODE_DXT5UNORM, - CONVERT_MODE_BC1UNORM = CONVERT_MODE_DXT1UNORM, - CONVERT_MODE_BC2UNORM = CONVERT_MODE_DXT3UNORM, - CONVERT_MODE_BC3UNORM = CONVERT_MODE_DXT5UNORM, - CONVERT_MODE_BC4UNORM, - CONVERT_MODE_BC4SNORM, - CONVERT_MODE_BC5UNORM, - CONVERT_MODE_BC5SNORM - }; - - template - struct accessFunc - {}; - - template - struct accessFunc - { - static genType load(texture1d const & Texture, texture1d::extent_type const & TexelCoord, texture1d::size_type Layer, texture1d::size_type Face, texture1d::size_type Level) - { - GLI_ASSERT(Layer == 0 && Face == 0); - return Texture.load(TexelCoord, Level); - } - - static void store(texture1d & Texture, texture1d::extent_type const & TexelCoord, texture1d::size_type Layer, texture1d::size_type Face, texture1d::size_type Level, genType const & Texel) - { - GLI_ASSERT(Layer == 0 && Face == 0); - Texture.store(TexelCoord, Level, Texel); - } - }; - - template - struct accessFunc - { - static genType load(texture1d_array const& Texture, texture1d_array::extent_type const& TexelCoord, texture1d_array::size_type Layer, texture1d_array::size_type Face, texture1d_array::size_type Level) - { - GLI_ASSERT(Face == 0); - return Texture.load(TexelCoord, Layer, Level); - } - - static void store(texture1d_array& Texture, texture1d_array::extent_type const& TexelCoord, texture1d_array::size_type Layer, texture1d_array::size_type Face, texture1d_array::size_type Level, genType const& Texel) - { - GLI_ASSERT(Face == 0); - Texture.store(TexelCoord, Layer, Level, Texel); - } - }; - - template - struct accessFunc - { - static genType load(texture2d const & Texture, texture2d::extent_type const & TexelCoord, texture2d::size_type Layer, texture2d::size_type Face, texture2d::size_type Level) - { - GLI_ASSERT(Layer == 0 && Face == 0); - return Texture.load(TexelCoord, Level); - } - - static void store(texture2d & Texture, texture2d::extent_type const & TexelCoord, texture2d::size_type Layer, texture2d::size_type Face, texture2d::size_type Level, genType const & Texel) - { - GLI_ASSERT(Layer == 0 && Face == 0); - Texture.store(TexelCoord, Level, Texel); - } - }; - - template - struct accessFunc - { - static genType load(texture2d_array const & Texture, texture2d_array::extent_type const & TexelCoord, texture2d_array::size_type Layer, texture2d_array::size_type Face, texture2d_array::size_type Level) - { - GLI_ASSERT(Face == 0); - return Texture.load(TexelCoord, Layer, Level); - } - - static void store(texture2d_array & Texture, texture2d_array::extent_type const & TexelCoord, texture2d_array::size_type Layer, texture2d_array::size_type Face, texture2d_array::size_type Level, genType const & Texel) - { - GLI_ASSERT(Face == 0); - Texture.store(TexelCoord, Layer, Level, Texel); - } - }; - - template - struct accessFunc - { - static genType load(texture3d const & Texture, texture3d::extent_type const & TexelCoord, texture3d::size_type Layer, texture3d::size_type Face, texture3d::size_type Level) - { - GLI_ASSERT(Layer == 0 && Face == 0); - return Texture.load(TexelCoord, Level); - } - - static void store(texture3d & Texture, texture3d::extent_type const & TexelCoord, texture3d::size_type Layer, texture3d::size_type Face, texture3d::size_type Level, genType const & Texel) - { - GLI_ASSERT(Layer == 0 && Face == 0); - Texture.store(TexelCoord, Level, Texel); - } - }; - - template - struct accessFunc - { - static genType load(texture_cube const& Texture, texture_cube::extent_type const& TexelCoord, texture_cube::size_type Layer, texture_cube::size_type Face, texture_cube::size_type Level) - { - GLI_ASSERT(Layer == 0); - return Texture.load(TexelCoord, Face, Level); - } - - static void store(texture_cube& Texture, texture_cube::extent_type const& TexelCoord, texture_cube::size_type Layer, texture_cube::size_type Face, texture_cube::size_type Level, genType const& Texel) - { - GLI_ASSERT(Layer == 0); - Texture.store(TexelCoord, Face, Level, Texel); - } - }; - - template - struct accessFunc - { - static genType load(texture_cube_array const & Texture, texture_cube_array::extent_type const & TexelCoord, texture_cube_array::size_type Layer, texture_cube_array::size_type Face, texture_cube_array::size_type Level) - { - return Texture.load(TexelCoord, Layer, Face, Level); - } - - static void store(texture_cube_array & Texture, texture_cube_array::extent_type const & TexelCoord, texture_cube_array::size_type Layer, texture_cube_array::size_type Face, texture_cube_array::size_type Level, genType const & Texel) - { - Texture.store(TexelCoord, Layer, Face, Level, Texel); - } - }; - - // convertFunc class - - template - struct convertFunc - { - typedef accessFunc > access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return make_vec4(vec(access::load(Texture, TexelCoord, Layer, Face, Level))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - access::store(Texture, TexelCoord, Layer, Face, Level, vec(Texel)); - } - }; - - template - struct convertFunc - { - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return vec<4, retType, P>(0, 0, 0, 1); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - {} - }; - - template - struct convertFunc - { - typedef accessFunc > access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_NORM requires a float sampler"); - return make_vec4(compNormalize(access::load(Texture, TexelCoord, Layer, Face, Level))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_NORM requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, compScale(vec(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc > access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_SRGB requires a float sampler"); - return make_vec4(convertSRGBToLinear(compNormalize(access::load(Texture, TexelCoord, Layer, Face, Level)))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_SRGB requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, gli::compScale(convertLinearToSRGB(vec(Texel)))); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB9E5 requires a float sampler"); - return vec<4, retType, P>(unpackF3x9_E1x5(access::load(Texture, TexelCoord, Layer, Face, Level)), static_cast(1)); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB9E5 requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packF3x9_E1x5(vec<3, float, P>(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RG11B10F requires a float sampler"); - return vec<4, retType, P>(unpackF2x11_1x10(access::load(Texture, TexelCoord, Layer, Face, Level)), static_cast(1)); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RG11B10F requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packF2x11_1x10(vec<3, float, P>(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc > access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_HALF requires a float sampler"); - return make_vec4(vec(unpackHalf(access::load(Texture, TexelCoord, Layer, Face, Level)))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_HALF requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packHalf(vec(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_44UNORM requires a float sampler"); - return vec<4, retType, P>(vec<2, retType, P>(unpackUnorm2x4(access::load(Texture, TexelCoord, Layer, Face, Level))), static_cast(0), static_cast(1)); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_44UNORM requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packUnorm2x4(vec<2, float, P>(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_4444UNORM requires a float sampler"); - return vec<4, retType, P>(unpackUnorm4x4(access::load(Texture, TexelCoord, Layer, Face, Level))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_4444UNORM requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packUnorm4x4(vec<4, float, P>(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_565UNORM requires a float sampler"); - return vec<4, retType, P>(unpackUnorm1x5_1x6_1x5(access::load(Texture, TexelCoord, Layer, Face, Level)), static_cast(1)); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_565UNORM requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packUnorm1x5_1x6_1x5(vec<3, float, P>(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_5551UNORM requires a float sampler"); - return vec<4, retType, P>(unpackUnorm3x5_1x1(access::load(Texture, TexelCoord, Layer, Face, Level))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_5551UNORM requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packUnorm3x5_1x1(vec<4, float, P>(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_332UNORM requires a float sampler"); - return vec<4, retType, P>(unpackUnorm2x3_1x2(access::load(Texture, TexelCoord, Layer, Face, Level)), static_cast(1)); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_332UNORM requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packUnorm2x3_1x2(vec<3, float, P>(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB10A2UNORM requires a float sampler"); - return vec<4, retType, P>(unpackUnorm3x10_1x2(access::load(Texture, TexelCoord, Layer, Face, Level))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB10A2UNORM requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packUnorm3x10_1x2(vec<4, float, P>(Texel))); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB10A2SNORM requires a float sampler"); - return vec<4, retType, P>(unpackSnorm3x10_1x2(access::load(Texture, TexelCoord, Layer, Face, Level))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB10A2SNORM requires a float sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packSnorm3x10_1x2(Texel)); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB10A2USCALE requires a float sampler"); - glm::detail::u10u10u10u2 Unpack; - Unpack.pack = access::load(Texture, TexelCoord, Layer, Face, Level); - return vec<4, retType, P>(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB10A2USCALE requires a float sampler"); - glm::detail::u10u10u10u2 Unpack; - Unpack.data.x = static_cast(Texel.x); - Unpack.data.y = static_cast(Texel.y); - Unpack.data.z = static_cast(Texel.z); - Unpack.data.w = static_cast(Texel.w); - access::store(Texture, TexelCoord, Layer, Face, Level, Unpack.pack); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB10A2SSCALE requires a float sampler"); - glm::detail::i10i10i10i2 Unpack; - Unpack.pack = access::load(Texture, TexelCoord, Layer, Face, Level); - return vec<4, retType, P>(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_RGB10A2SSCALE requires a float sampler"); - glm::detail::i10i10i10i2 Unpack; - Unpack.data.x = static_cast(Texel.x); - Unpack.data.y = static_cast(Texel.y); - Unpack.data.z = static_cast(Texel.z); - Unpack.data.w = static_cast(Texel.w); - access::store(Texture, TexelCoord, Layer, Face, Level, Unpack.pack); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_integer, "CONVERT_MODE_RGB10A2UINT requires an integer sampler"); - return vec<4, retType, P>(unpackU3x10_1x2(access::load(Texture, TexelCoord, Layer, Face, Level))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_integer, "CONVERT_MODE_RGB10A2UINT requires an integer sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packU3x10_1x2(Texel)); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_integer, "CONVERT_MODE_RGB10A2SINT requires an integer sampler"); - return vec<4, retType, P>(unpackI3x10_1x2(access::load(Texture, TexelCoord, Layer, Face, Level))); - } - - static void write(textureType & Texture, typename textureType::extent_type const & TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_integer, "CONVERT_MODE_RGB10A2SINT requires an integer sampler"); - access::store(Texture, TexelCoord, Layer, Face, Level, packI3x10_1x2(Texel)); - } - }; - - template - struct convertFunc - { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent1d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent2d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - gli::extent3d TexelCoord3d(TexelCoord, 0); - return fetch(Texture, TexelCoord3d, Layer, Face, Level); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent3d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_DXT1UNORM requires an float sampler"); - - if(Texture.target() == gli::TARGET_1D || Texture.target() == gli::TARGET_1D_ARRAY) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - const dxt1_block *Data = Texture.template data(Layer, Face, Level); - const gli::extent3d &BlockExtent = block_extent(Texture.format()); - int WidthInBlocks = glm::max(1, Texture.extent(Level).x / BlockExtent.x); - int BlocksInSlice = glm::max(1, Texture.extent(Level).y / BlockExtent.y) * WidthInBlocks; - gli::extent3d BlockCoord(TexelCoord / BlockExtent); - glm::ivec2 TexelCoordInBlock(TexelCoord.x - (BlockCoord.x * BlockExtent.x), TexelCoord.y - (BlockCoord.y * BlockExtent.y)); - - const dxt1_block &Block = Data[BlockCoord.z * BlocksInSlice + (BlockCoord.y * WidthInBlocks + BlockCoord.x)]; - - return decompress_dxt1(Block, TexelCoordInBlock); - } - - static void write(textureType& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_DXT1UNORM requires an float sampler"); - - GLI_ASSERT("Writing to single texel of a DXT1 compressed image is not supported"); - } - }; - - template - struct convertFunc { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent1d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent2d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - gli::extent3d TexelCoord3d(TexelCoord, 0); - return fetch(Texture, TexelCoord3d, Layer, Face, Level); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent3d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_DXT3UNORM requires an float sampler"); - - if(Texture.target() == gli::TARGET_1D || Texture.target() == gli::TARGET_1D_ARRAY) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - const dxt3_block *Data = Texture.template data(Layer, Face, Level); - const gli::extent3d &BlockExtent = block_extent(Texture.format()); - int WidthInBlocks = glm::max(1, Texture.extent(Level).x / BlockExtent.x); - int BlocksInSlice = glm::max(1, Texture.extent(Level).y / BlockExtent.y) * WidthInBlocks; - gli::extent3d BlockCoord(TexelCoord / BlockExtent); - glm::ivec2 TexelCoordInBlock(TexelCoord.x - (BlockCoord.x * BlockExtent.x), TexelCoord.y - (BlockCoord.y * BlockExtent.y)); - - const dxt3_block &Block = Data[BlockCoord.z * BlocksInSlice + (BlockCoord.y * WidthInBlocks + BlockCoord.x)]; - - return decompress_dxt3(Block, TexelCoordInBlock); - } - - static void write(textureType& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_DXT3UNORM requires an float sampler"); - - GLI_ASSERT("Writing to single texel of a DXT3 compressed image is not supported"); - } - }; - - template - struct convertFunc { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent1d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent2d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - gli::extent3d TexelCoord3d(TexelCoord, 0); - return fetch(Texture, TexelCoord3d, Layer, Face, Level); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent3d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_DXT5UNORM requires an float sampler"); - - if(Texture.target() == gli::TARGET_1D || Texture.target() == gli::TARGET_1D_ARRAY) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - const dxt5_block *Data = Texture.template data(Layer, Face, Level); - const gli::extent3d &BlockExtent = block_extent(Texture.format()); - int WidthInBlocks = glm::max(1, Texture.extent(Level).x / BlockExtent.x); - int BlocksInSlice = glm::max(1, Texture.extent(Level).y / BlockExtent.y) * WidthInBlocks; - gli::extent3d BlockCoord(TexelCoord / BlockExtent); - glm::ivec2 TexelCoordInBlock(TexelCoord.x - (BlockCoord.x * BlockExtent.x), TexelCoord.y - (BlockCoord.y * BlockExtent.y)); - - const dxt5_block &Block = Data[BlockCoord.z * BlocksInSlice + (BlockCoord.y * WidthInBlocks + BlockCoord.x)]; - - return decompress_dxt5(Block, TexelCoordInBlock); - } - - static void write(textureType& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_DXT5UNORM requires an float sampler"); - - GLI_ASSERT("Writing to single texel of a DXT5 compressed image is not supported"); - } - }; - - template - struct convertFunc { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent1d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent2d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - gli::extent3d TexelCoord3d(TexelCoord, 0); - return fetch(Texture, TexelCoord3d, Layer, Face, Level); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent3d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_BC4UNORM requires an float sampler"); - - if(Texture.target() == gli::TARGET_1D || Texture.target() == gli::TARGET_1D_ARRAY) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - const bc4_block *Data = Texture.template data(Layer, Face, Level); - const gli::extent3d &BlockExtent = block_extent(Texture.format()); - int WidthInBlocks = glm::max(1, Texture.extent(Level).x / BlockExtent.x); - int BlocksInSlice = glm::max(1, Texture.extent(Level).y / BlockExtent.y) * WidthInBlocks; - gli::extent3d BlockCoord(TexelCoord / BlockExtent); - glm::ivec2 TexelCoordInBlock(TexelCoord.x - (BlockCoord.x * BlockExtent.x), TexelCoord.y - (BlockCoord.y * BlockExtent.y)); - - const bc4_block &Block = Data[BlockCoord.z * BlocksInSlice + (BlockCoord.y * WidthInBlocks + BlockCoord.x)]; - - return decompress_bc4unorm(Block, TexelCoordInBlock); - } - - static void write(textureType& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_BC4UNORM requires an float sampler"); - - GLI_ASSERT("Writing to single texel of a BC4 compressed image is not supported"); - } - }; - - template - struct convertFunc { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent1d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent2d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - gli::extent3d TexelCoord3d(TexelCoord, 0); - return fetch(Texture, TexelCoord3d, Layer, Face, Level); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent3d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_BC4SNORM requires an float sampler"); - - if(Texture.target() == gli::TARGET_1D || Texture.target() == gli::TARGET_1D_ARRAY) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - const bc4_block *Data = Texture.template data(Layer, Face, Level); - const gli::extent3d &BlockExtent = block_extent(Texture.format()); - int WidthInBlocks = glm::max(1, Texture.extent(Level).x / BlockExtent.x); - int BlocksInSlice = glm::max(1, Texture.extent(Level).y / BlockExtent.y) * WidthInBlocks; - gli::extent3d BlockCoord(TexelCoord / BlockExtent); - glm::ivec2 TexelCoordInBlock(TexelCoord.x - (BlockCoord.x * BlockExtent.x), TexelCoord.y - (BlockCoord.y * BlockExtent.y)); - - const bc4_block &Block = Data[BlockCoord.z * BlocksInSlice + (BlockCoord.y * WidthInBlocks + BlockCoord.x)]; - - return decompress_bc4snorm(Block, TexelCoordInBlock); - } - - static void write(textureType& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_BC4SNORM requires an float sampler"); - - GLI_ASSERT("Writing to single texel of a BC4 compressed image is not supported"); - } - }; - - template - struct convertFunc { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent1d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent2d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - gli::extent3d TexelCoord3d(TexelCoord, 0); - return fetch(Texture, TexelCoord3d, Layer, Face, Level); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent3d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_BC5UNORM requires an float sampler"); - - if(Texture.target() == gli::TARGET_1D || Texture.target() == gli::TARGET_1D_ARRAY) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - const bc5_block *Data = Texture.template data(Layer, Face, Level); - const gli::extent3d &BlockExtent = block_extent(Texture.format()); - int WidthInBlocks = glm::max(1, Texture.extent(Level).x / BlockExtent.x); - int BlocksInSlice = glm::max(1, Texture.extent(Level).y / BlockExtent.y) * WidthInBlocks; - gli::extent3d BlockCoord(TexelCoord / BlockExtent); - glm::ivec2 TexelCoordInBlock(TexelCoord.x - (BlockCoord.x * BlockExtent.x), TexelCoord.y - (BlockCoord.y * BlockExtent.y)); - - const bc5_block &Block = Data[BlockCoord.z * BlocksInSlice + (BlockCoord.y * WidthInBlocks + BlockCoord.x)]; - - return decompress_bc5unorm(Block, TexelCoordInBlock); - } - - static void write(textureType& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_BC5UNORM requires an float sampler"); - - GLI_ASSERT("Writing to single texel of a BC5 compressed image is not supported"); - } - }; - - template - struct convertFunc { - typedef accessFunc access; - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent1d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent2d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - gli::extent3d TexelCoord3d(TexelCoord, 0); - return fetch(Texture, TexelCoord3d, Layer, Face, Level); - } - - static vec<4, retType, P> fetch(textureType const& Texture, gli::extent3d const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_BC5SNORM requires an float sampler"); - - if(Texture.target() == gli::TARGET_1D || Texture.target() == gli::TARGET_1D_ARRAY) - { - return glm::vec<4, retType, P>(0, 0, 0, 1); - } - - const bc5_block *Data = Texture.template data(Layer, Face, Level); - const gli::extent3d &BlockExtent = block_extent(Texture.format()); - int WidthInBlocks = glm::max(1, Texture.extent(Level).x / BlockExtent.x); - int BlocksInSlice = glm::max(1, Texture.extent(Level).y / BlockExtent.y) * WidthInBlocks; - gli::extent3d BlockCoord(TexelCoord / BlockExtent); - glm::ivec2 TexelCoordInBlock(TexelCoord.x - (BlockCoord.x * BlockExtent.x), TexelCoord.y - (BlockCoord.y * BlockExtent.y)); - - const bc5_block &Block = Data[BlockCoord.z * BlocksInSlice + (BlockCoord.y * WidthInBlocks + BlockCoord.x)]; - - return decompress_bc5snorm(Block, TexelCoordInBlock); - } - - static void write(textureType& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, retType, P> const & Texel) - { - static_assert(std::numeric_limits::is_iec559, "CONVERT_MODE_BC5SNORM requires an float sampler"); - - GLI_ASSERT("Writing to single texel of a BC5 compressed image is not supported"); - } - }; - - template - struct convert - { - typedef vec<4, samplerValType, P>(*fetchFunc)(textureType const& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level); - typedef void(*writeFunc)(textureType & Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, samplerValType, P> const & Texel); - - template - struct conv - { - static vec<4, samplerValType, P> fetch(textureType const& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level) - { - return convertFunc::is_iec559>::fetch(Texture, TexelCoord, Layer, Face, Level); - } - - static void write(textureType& Texture, typename textureType::extent_type const& TexelCoord, typename textureType::size_type Layer, typename textureType::size_type Face, typename textureType::size_type Level, vec<4, samplerValType, P> const & Texel) - { - convertFunc::is_iec559>::write(Texture, TexelCoord, Layer, Face, Level, Texel); - } - }; - - struct func - { - fetchFunc Fetch; - writeFunc Write; - }; - - static func call(format Format) - { - static func Table[] = - { - {conv<2, u8, CONVERT_MODE_44UNORM>::fetch, conv<2, u8, CONVERT_MODE_44UNORM>::write}, // FORMAT_RG4_UNORM - {conv<4, u8, CONVERT_MODE_4444UNORM>::fetch, conv<4, u8, CONVERT_MODE_4444UNORM>::write}, // FORMAT_RGBA4_UNORM - {conv<4, u8, CONVERT_MODE_4444UNORM>::fetch, conv<4, u8, CONVERT_MODE_4444UNORM>::write}, // FORMAT_BGRA4_UNORM - {conv<3, u8, CONVERT_MODE_565UNORM>::fetch, conv<3, u8, CONVERT_MODE_565UNORM>::write}, // FORMAT_R5G6B5_UNORM - {conv<3, u8, CONVERT_MODE_565UNORM>::fetch, conv<3, u8, CONVERT_MODE_565UNORM>::write}, // FORMAT_B5G6R5_UNORM - {conv<4, u8, CONVERT_MODE_5551UNORM>::fetch, conv<4, u8, CONVERT_MODE_5551UNORM>::write}, // FORMAT_RGB5A1_UNORM - {conv<4, u8, CONVERT_MODE_5551UNORM>::fetch, conv<4, u8, CONVERT_MODE_5551UNORM>::write}, // FORMAT_BGR5A1_UNORM - {conv<4, u8, CONVERT_MODE_5551UNORM>::fetch, conv<4, u8, CONVERT_MODE_5551UNORM>::write}, // FORMAT_A1RGB5_UNORM - - {conv<1, u8, CONVERT_MODE_NORM>::fetch, conv<1, u8, CONVERT_MODE_NORM>::write}, // FORMAT_R8_UNORM - {conv<1, i8, CONVERT_MODE_NORM>::fetch, conv<1, i8, CONVERT_MODE_NORM>::write}, // FORMAT_R8_SNORM - {conv<1, u8, CONVERT_MODE_CAST>::fetch, conv<1, u8, CONVERT_MODE_CAST>::write}, // FORMAT_R8_USCALED - {conv<1, i8, CONVERT_MODE_CAST>::fetch, conv<1, i8, CONVERT_MODE_CAST>::write}, // FORMAT_R8_SSCALED - {conv<1, u8, CONVERT_MODE_CAST>::fetch, conv<1, u8, CONVERT_MODE_CAST>::write}, // FORMAT_R8_UINT - {conv<1, i8, CONVERT_MODE_CAST>::fetch, conv<1, i8, CONVERT_MODE_CAST>::write}, // FORMAT_R8_SINT - {conv<1, u8, CONVERT_MODE_SRGB>::fetch, conv<1, u8, CONVERT_MODE_SRGB>::write}, // FORMAT_R8_SRGB - - {conv<2, u8, CONVERT_MODE_NORM>::fetch, conv<2, u8, CONVERT_MODE_NORM>::write}, // FORMAT_RG8_UNORM - {conv<2, i8, CONVERT_MODE_NORM>::fetch, conv<2, i8, CONVERT_MODE_NORM>::write}, // FORMAT_RG8_SNORM - {conv<2, u8, CONVERT_MODE_CAST>::fetch, conv<2, u8, CONVERT_MODE_CAST>::write}, // FORMAT_RG8_USCALED - {conv<2, i8, CONVERT_MODE_CAST>::fetch, conv<2, i8, CONVERT_MODE_CAST>::write}, // FORMAT_RG8_SSCALED - {conv<2, u8, CONVERT_MODE_CAST>::fetch, conv<2, u8, CONVERT_MODE_CAST>::write}, // FORMAT_RG8_UINT - {conv<2, i8, CONVERT_MODE_CAST>::fetch, conv<2, i8, CONVERT_MODE_CAST>::write}, // FORMAT_RG8_SINT - {conv<2, u8, CONVERT_MODE_SRGB>::fetch, conv<2, u8, CONVERT_MODE_SRGB>::write}, // FORMAT_RG8_SRGB - - {conv<3, u8, CONVERT_MODE_NORM>::fetch, conv<3, u8, CONVERT_MODE_NORM>::write}, // FORMAT_RGB8_UNORM - {conv<3, i8, CONVERT_MODE_NORM>::fetch, conv<3, i8, CONVERT_MODE_NORM>::write}, // FORMAT_RGB8_SNORM - {conv<3, u8, CONVERT_MODE_CAST>::fetch, conv<3, u8, CONVERT_MODE_CAST>::write}, // FORMAT_RGB8_USCALED - {conv<3, i8, CONVERT_MODE_CAST>::fetch, conv<3, i8, CONVERT_MODE_CAST>::write}, // FORMAT_RGB8_SSCALED - {conv<3, u8, CONVERT_MODE_CAST>::fetch, conv<3, u8, CONVERT_MODE_CAST>::write}, // FORMAT_RGB8_UINT - {conv<3, i8, CONVERT_MODE_CAST>::fetch, conv<3, i8, CONVERT_MODE_CAST>::write}, // FORMAT_RGB8_SINT - {conv<3, u8, CONVERT_MODE_SRGB>::fetch, conv<3, u8, CONVERT_MODE_SRGB>::write}, // FORMAT_RGB8_SRGB - - {conv<3, u8, CONVERT_MODE_NORM>::fetch, conv<3, u8, CONVERT_MODE_NORM>::write}, // FORMAT_BGR8_UNORM - {conv<3, i8, CONVERT_MODE_NORM>::fetch, conv<3, i8, CONVERT_MODE_NORM>::write}, // FORMAT_BGR8_SNORM - {conv<3, u8, CONVERT_MODE_CAST>::fetch, conv<3, u8, CONVERT_MODE_CAST>::write}, // FORMAT_BGR8_USCALED - {conv<3, i8, CONVERT_MODE_CAST>::fetch, conv<3, i8, CONVERT_MODE_CAST>::write}, // FORMAT_BGR8_SSCALED - {conv<3, u32, CONVERT_MODE_CAST>::fetch, conv<3, u32, CONVERT_MODE_CAST>::write}, // FORMAT_BGR8_UINT - {conv<3, i32, CONVERT_MODE_CAST>::fetch, conv<3, i32, CONVERT_MODE_CAST>::write}, // FORMAT_BGR8_SINT - {conv<3, u8, CONVERT_MODE_SRGB>::fetch, conv<3, u8, CONVERT_MODE_SRGB>::write}, // FORMAT_BGR8_SRGB - - {conv<4, u8, CONVERT_MODE_NORM>::fetch, conv<4, u8, CONVERT_MODE_NORM>::write}, // FORMAT_RGBA8_UNORM - {conv<4, i8, CONVERT_MODE_NORM>::fetch, conv<4, i8, CONVERT_MODE_NORM>::write}, // FORMAT_RGBA8_SNORM - {conv<4, u8, CONVERT_MODE_CAST>::fetch, conv<4, u8, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA8_USCALED - {conv<4, i8, CONVERT_MODE_CAST>::fetch, conv<4, i8, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA8_SSCALED - {conv<4, u8, CONVERT_MODE_CAST>::fetch, conv<4, u8, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA8_UINT - {conv<4, i8, CONVERT_MODE_CAST>::fetch, conv<4, i8, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA8_SINT - {conv<4, u8, CONVERT_MODE_SRGB>::fetch, conv<4, u8, CONVERT_MODE_SRGB>::write}, // FORMAT_RGBA8_SRGB - - {conv<4, u8, CONVERT_MODE_NORM>::fetch, conv<4, u8, CONVERT_MODE_NORM>::write}, // FORMAT_BGRA8_UNORM - {conv<4, i8, CONVERT_MODE_NORM>::fetch, conv<4, i8, CONVERT_MODE_NORM>::write}, // FORMAT_BGRA8_SNORM - {conv<4, u8, CONVERT_MODE_CAST>::fetch, conv<4, u8, CONVERT_MODE_CAST>::write}, // FORMAT_BGRA8_USCALED - {conv<4, i8, CONVERT_MODE_CAST>::fetch, conv<4, i8, CONVERT_MODE_CAST>::write}, // FORMAT_BGRA8_SSCALED - {conv<4, u8, CONVERT_MODE_CAST>::fetch, conv<4, u8, CONVERT_MODE_CAST>::write}, // FORMAT_BGRA8_UINT - {conv<4, i8, CONVERT_MODE_CAST>::fetch, conv<4, i8, CONVERT_MODE_CAST>::write}, // FORMAT_BGRA8_SINT - {conv<4, u8, CONVERT_MODE_SRGB>::fetch, conv<4, u8, CONVERT_MODE_SRGB>::write}, // FORMAT_BGRA8_SRGB - - {conv<4, u8, CONVERT_MODE_NORM>::fetch, conv<4, u8, CONVERT_MODE_NORM>::write}, // FORMAT_ABGR8_UNORM - {conv<4, i8, CONVERT_MODE_NORM>::fetch, conv<4, i8, CONVERT_MODE_NORM>::write}, // FORMAT_ABGR8_SNORM - {conv<4, u8, CONVERT_MODE_CAST>::fetch, conv<4, u8, CONVERT_MODE_CAST>::write}, // FORMAT_ABGR8_USCALED - {conv<4, i8, CONVERT_MODE_CAST>::fetch, conv<4, i8, CONVERT_MODE_CAST>::write}, // FORMAT_ABGR8_SSCALED - {conv<4, u8, CONVERT_MODE_CAST>::fetch, conv<4, u8, CONVERT_MODE_CAST>::write}, // FORMAT_ABGR8_UINT - {conv<4, i8, CONVERT_MODE_CAST>::fetch, conv<4, i8, CONVERT_MODE_CAST>::write}, // FORMAT_ABGR8_SINT - {conv<4, u8, CONVERT_MODE_SRGB>::fetch, conv<4, u8, CONVERT_MODE_SRGB>::write}, // FORMAT_ABGR8_SRGB - - {conv<4, u8, CONVERT_MODE_RGB10A2UNORM>::fetch, conv<4, u8, CONVERT_MODE_RGB10A2UNORM>::write}, // FORMAT_RGB10A2_UNORM - {conv<4, i8, CONVERT_MODE_RGB10A2SNORM>::fetch, conv<4, i8, CONVERT_MODE_RGB10A2SNORM>::write}, // FORMAT_RGB10A2_SNORM - {conv<4, u8, CONVERT_MODE_RGB10A2USCALE>::fetch, conv<4, u8, CONVERT_MODE_RGB10A2USCALE>::write}, // FORMAT_RGB10A2_USCALED - {conv<4, i8, CONVERT_MODE_RGB10A2SSCALE>::fetch, conv<4, i8, CONVERT_MODE_RGB10A2SSCALE>::write}, // FORMAT_RGB10A2_SSCALED - {conv<4, u8, CONVERT_MODE_RGB10A2UINT>::fetch, conv<4, u8, CONVERT_MODE_RGB10A2UINT>::write}, // FORMAT_RGB10A2_UINT - {conv<4, i8, CONVERT_MODE_RGB10A2SINT>::fetch, conv<4, i8, CONVERT_MODE_RGB10A2SINT>::write}, // FORMAT_RGB10A2_SINT - - {conv<4, u8, CONVERT_MODE_RGB10A2UNORM>::fetch, conv<4, u8, CONVERT_MODE_RGB10A2UNORM>::write}, // FORMAT_BGR10A2_UNORM - {conv<4, i8, CONVERT_MODE_RGB10A2SNORM>::fetch, conv<4, i8, CONVERT_MODE_RGB10A2SNORM>::write}, // FORMAT_BGR10A2_SNORM - {conv<4, u8, CONVERT_MODE_RGB10A2USCALE>::fetch, conv<4, u8, CONVERT_MODE_RGB10A2USCALE>::write}, // FORMAT_BGR10A2_USCALED - {conv<4, i8, CONVERT_MODE_RGB10A2SSCALE>::fetch, conv<4, i8, CONVERT_MODE_RGB10A2SSCALE>::write}, // FORMAT_BGR10A2_SSCALED - {conv<4, u8, CONVERT_MODE_RGB10A2UINT>::fetch, conv<4, u8, CONVERT_MODE_RGB10A2UINT>::write}, // FORMAT_BGR10A2_UINT - {conv<4, i8, CONVERT_MODE_RGB10A2SINT>::fetch, conv<4, i8, CONVERT_MODE_RGB10A2SINT>::write}, // FORMAT_BGR10A2_SINT - - {conv<1, u16, CONVERT_MODE_NORM>::fetch, conv<1, u16, CONVERT_MODE_NORM>::write}, // FORMAT_R16_UNORM_PACK16 - {conv<1, i16, CONVERT_MODE_NORM>::fetch, conv<1, i16, CONVERT_MODE_NORM>::write}, // FORMAT_R16_SNORM_PACK16 - {conv<1, u16, CONVERT_MODE_CAST>::fetch, conv<1, u16, CONVERT_MODE_CAST>::write}, // FORMAT_R16_USCALED_PACK16 - {conv<1, i16, CONVERT_MODE_CAST>::fetch, conv<1, i16, CONVERT_MODE_CAST>::write}, // FORMAT_R16_SSCALED_PACK16 - {conv<1, u16, CONVERT_MODE_CAST>::fetch, conv<1, u16, CONVERT_MODE_CAST>::write}, // FORMAT_R16_UINT_PACK16 - {conv<1, i16, CONVERT_MODE_CAST>::fetch, conv<1, i16, CONVERT_MODE_CAST>::write}, // FORMAT_R16_SINT_PACK16 - {conv<1, u16, CONVERT_MODE_HALF>::fetch, conv<1, u16, CONVERT_MODE_HALF>::write}, // FORMAT_R16_SFLOAT_PACK16 - - {conv<2, u16, CONVERT_MODE_NORM>::fetch, conv<2, u16, CONVERT_MODE_NORM>::write}, // FORMAT_RG16_UNORM_PACK16 - {conv<2, i16, CONVERT_MODE_NORM>::fetch, conv<2, i16, CONVERT_MODE_NORM>::write}, // FORMAT_RG16_SNORM_PACK16 - {conv<2, u16, CONVERT_MODE_CAST>::fetch, conv<2, u16, CONVERT_MODE_CAST>::write}, // FORMAT_RG16_USCALED_PACK16 - {conv<2, i16, CONVERT_MODE_CAST>::fetch, conv<2, i16, CONVERT_MODE_CAST>::write}, // FORMAT_RG16_SSCALED_PACK16 - {conv<2, u16, CONVERT_MODE_CAST>::fetch, conv<2, u16, CONVERT_MODE_CAST>::write}, // FORMAT_RG16_UINT_PACK16 - {conv<2, i16, CONVERT_MODE_CAST>::fetch, conv<2, i16, CONVERT_MODE_CAST>::write}, // FORMAT_RG16_SINT_PACK16 - {conv<2, u16, CONVERT_MODE_HALF>::fetch, conv<2, u16, CONVERT_MODE_HALF>::write}, // FORMAT_RG16_SFLOAT_PACK16 - - {conv<3, u16, CONVERT_MODE_NORM>::fetch, conv<3, u16, CONVERT_MODE_NORM>::write}, // FORMAT_RGB16_UNORM_PACK16 - {conv<3, i16, CONVERT_MODE_NORM>::fetch, conv<3, i16, CONVERT_MODE_NORM>::write}, // FORMAT_RGB16_SNORM_PACK16 - {conv<3, u16, CONVERT_MODE_CAST>::fetch, conv<3, u16, CONVERT_MODE_CAST>::write}, // FORMAT_RGB16_USCALED_PACK16 - {conv<3, i16, CONVERT_MODE_CAST>::fetch, conv<3, i16, CONVERT_MODE_CAST>::write}, // FORMAT_RGB16_SSCALED_PACK16 - {conv<3, u16, CONVERT_MODE_CAST>::fetch, conv<3, u16, CONVERT_MODE_CAST>::write}, // FORMAT_RGB16_UINT_PACK16 - {conv<3, i16, CONVERT_MODE_CAST>::fetch, conv<3, i16, CONVERT_MODE_CAST>::write}, // FORMAT_RGB16_SINT_PACK16 - {conv<3, u16, CONVERT_MODE_HALF>::fetch, conv<3, u16, CONVERT_MODE_HALF>::write}, // FORMAT_RGB16_SFLOAT_PACK16 - - {conv<4, u16, CONVERT_MODE_NORM>::fetch, conv<4, u16, CONVERT_MODE_NORM>::write}, // FORMAT_RGBA16_UNORM_PACK16 - {conv<4, i16, CONVERT_MODE_NORM>::fetch, conv<4, i16, CONVERT_MODE_NORM>::write}, // FORMAT_RGBA16_SNORM_PACK16 - {conv<4, u16, CONVERT_MODE_CAST>::fetch, conv<4, u16, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA16_USCALED_PACK16 - {conv<4, i16, CONVERT_MODE_CAST>::fetch, conv<4, i16, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA16_SSCALED_PACK16 - {conv<4, u16, CONVERT_MODE_CAST>::fetch, conv<4, u16, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA16_UINT_PACK16 - {conv<4, i16, CONVERT_MODE_CAST>::fetch, conv<4, i16, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA16_SINT_PACK16 - {conv<4, u16, CONVERT_MODE_HALF>::fetch, conv<4, u16, CONVERT_MODE_HALF>::write}, // FORMAT_RGBA16_SFLOAT_PACK16 - - {conv<1, u32, CONVERT_MODE_CAST>::fetch, conv<1, u32, CONVERT_MODE_CAST>::write}, // FORMAT_R32_UINT_PACK32 - {conv<1, i32, CONVERT_MODE_CAST>::fetch, conv<1, i32, CONVERT_MODE_CAST>::write}, // FORMAT_R32_SINT_PACK32 - {conv<1, f32, CONVERT_MODE_CAST>::fetch, conv<1, f32, CONVERT_MODE_CAST>::write}, // FORMAT_R32_SFLOAT_PACK32 - - {conv<2, u32, CONVERT_MODE_CAST>::fetch, conv<2, u32, CONVERT_MODE_CAST>::write}, // FORMAT_RG32_UINT_PACK32 - {conv<2, i32, CONVERT_MODE_CAST>::fetch, conv<2, i32, CONVERT_MODE_CAST>::write}, // FORMAT_RG32_SINT_PACK32 - {conv<2, f32, CONVERT_MODE_CAST>::fetch, conv<2, f32, CONVERT_MODE_CAST>::write}, // FORMAT_RG32_SFLOAT_PACK32 - - {conv<3, u32, CONVERT_MODE_CAST>::fetch, conv<3, u32, CONVERT_MODE_CAST>::write}, // FORMAT_RGB32_UINT_PACK32 - {conv<3, i32, CONVERT_MODE_CAST>::fetch, conv<3, i32, CONVERT_MODE_CAST>::write}, // FORMAT_RGB32_SINT_PACK32 - {conv<3, f32, CONVERT_MODE_CAST>::fetch, conv<3, f32, CONVERT_MODE_CAST>::write}, // FORMAT_RGB32_SFLOAT_PACK32 - - {conv<4, u32, CONVERT_MODE_CAST>::fetch, conv<4, u32, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA32_UINT_PACK32 - {conv<4, i32, CONVERT_MODE_CAST>::fetch, conv<4, i32, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA32_SINT_PACK32 - {conv<4, f32, CONVERT_MODE_CAST>::fetch, conv<4, f32, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA32_SFLOAT_PACK32 - - {conv<1, u64, CONVERT_MODE_CAST>::fetch, conv<1, u64, CONVERT_MODE_CAST>::write}, // FORMAT_R64_UINT_PACK64 - {conv<1, i64, CONVERT_MODE_CAST>::fetch, conv<1, i64, CONVERT_MODE_CAST>::write}, // FORMAT_R64_SINT_PACK64 - {conv<1, f64, CONVERT_MODE_CAST>::fetch, conv<1, f64, CONVERT_MODE_CAST>::write}, // FORMAT_R64_SFLOAT_PACK64 - - {conv<2, u64, CONVERT_MODE_CAST>::fetch, conv<2, u64, CONVERT_MODE_CAST>::write}, // FORMAT_RG64_UINT_PACK64 - {conv<2, i64, CONVERT_MODE_CAST>::fetch, conv<2, i64, CONVERT_MODE_CAST>::write}, // FORMAT_RG64_SINT_PACK64 - {conv<2, f64, CONVERT_MODE_CAST>::fetch, conv<2, f64, CONVERT_MODE_CAST>::write}, // FORMAT_RG64_SFLOAT_PACK64 - - {conv<3, u64, CONVERT_MODE_CAST>::fetch, conv<3, u64, CONVERT_MODE_CAST>::write}, // FORMAT_RGB64_UINT_PACK64 - {conv<3, i64, CONVERT_MODE_CAST>::fetch, conv<3, i64, CONVERT_MODE_CAST>::write}, // FORMAT_RGB64_SINT_PACK64 - {conv<3, f64, CONVERT_MODE_CAST>::fetch, conv<3, f64, CONVERT_MODE_CAST>::write}, // FORMAT_RGB64_SFLOAT_PACK64 - - {conv<4, u64, CONVERT_MODE_CAST>::fetch, conv<4, u64, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA64_UINT_PACK64 - {conv<4, i64, CONVERT_MODE_CAST>::fetch, conv<4, i64, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA64_SINT_PACK64 - {conv<4, f64, CONVERT_MODE_CAST>::fetch, conv<4, f64, CONVERT_MODE_CAST>::write}, // FORMAT_RGBA64_SFLOAT_PACK64 - - {conv<1, u32, CONVERT_MODE_RG11B10F>::fetch, conv<1, u32, CONVERT_MODE_RG11B10F>::write}, // FORMAT_RG11B10_UFLOAT - {conv<1, u32, CONVERT_MODE_RGB9E5>::fetch, conv<1, u32, CONVERT_MODE_RGB9E5>::write}, // FORMAT_RGB9E5_UFLOAT - - {conv<1, u16, CONVERT_MODE_DEFAULT>::fetch, conv<1, u16, CONVERT_MODE_DEFAULT>::write}, // FORMAT_D16_UNORM_PACK16 - {conv<1, u32, CONVERT_MODE_DEFAULT>::fetch, conv<1, u32, CONVERT_MODE_DEFAULT>::write}, // FORMAT_D24_UNORM - {conv<1, f32, CONVERT_MODE_DEFAULT>::fetch, conv<1, f32, CONVERT_MODE_DEFAULT>::write}, // FORMAT_D32_SFLOAT_PACK32 - {conv<1, u8, CONVERT_MODE_DEFAULT>::fetch, conv<1, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_S8_UINT_PACK8 - {conv<2, u16, CONVERT_MODE_DEFAULT>::fetch, conv<2, u16, CONVERT_MODE_DEFAULT>::write}, // FORMAT_D16_UNORM_S8_UINT_PACK32 - {conv<2, u32, CONVERT_MODE_DEFAULT>::fetch, conv<2, u32, CONVERT_MODE_DEFAULT>::write}, // FORMAT_D24_UNORM_S8_UINT_PACK32 - {conv<2, u32, CONVERT_MODE_DEFAULT>::fetch, conv<2, u32, CONVERT_MODE_DEFAULT>::write}, // FORMAT_D32_SFLOAT_S8_UINT_PACK64 - - {conv<3, u8, CONVERT_MODE_DXT1UNORM>::fetch, conv<3, u8, CONVERT_MODE_DXT1UNORM>::write}, // FORMAT_RGB_DXT1_UNORM_BLOCK8 - {conv<3, u8, CONVERT_MODE_DXT1UNORM>::fetch, conv<3, u8, CONVERT_MODE_DXT1UNORM>::write}, // FORMAT_RGB_DXT1_SRGB_BLOCK8 - {conv<4, u8, CONVERT_MODE_DXT1UNORM>::fetch, conv<4, u8, CONVERT_MODE_DXT1UNORM>::write}, // FORMAT_RGBA_DXT1_UNORM_BLOCK8 - {conv<4, u8, CONVERT_MODE_DXT1UNORM>::fetch, conv<4, u8, CONVERT_MODE_DXT1UNORM>::write}, // FORMAT_RGBA_DXT1_SRGB_BLOCK8 - {conv<4, u8, CONVERT_MODE_DXT3UNORM>::fetch, conv<4, u8, CONVERT_MODE_DXT3UNORM>::write}, // FORMAT_RGBA_DXT3_UNORM_BLOCK16 - {conv<4, u8, CONVERT_MODE_DXT3UNORM>::fetch, conv<4, u8, CONVERT_MODE_DXT3UNORM>::write}, // FORMAT_RGBA_DXT3_SRGB_BLOCK16 - {conv<4, u8, CONVERT_MODE_DXT5UNORM>::fetch, conv<4, u8, CONVERT_MODE_DXT5UNORM>::write}, // FORMAT_RGBA_DXT5_UNORM_BLOCK16 - {conv<4, u8, CONVERT_MODE_DXT5UNORM>::fetch, conv<4, u8, CONVERT_MODE_DXT5UNORM>::write}, // FORMAT_RGBA_DXT5_SRGB_BLOCK16 - {conv<1, u8, CONVERT_MODE_BC4UNORM>::fetch, conv<1, u8, CONVERT_MODE_BC4UNORM>::write}, // FORMAT_R_ATI1N_UNORM_BLOCK8 - {conv<1, u8, CONVERT_MODE_BC4SNORM>::fetch, conv<1, i8, CONVERT_MODE_BC4SNORM>::write}, // FORMAT_R_ATI1N_SNORM_BLOCK8 - {conv<2, u8, CONVERT_MODE_BC5UNORM>::fetch, conv<2, u8, CONVERT_MODE_BC5UNORM>::write}, // FORMAT_RG_ATI2N_UNORM_BLOCK16 - {conv<2, u8, CONVERT_MODE_BC5SNORM>::fetch, conv<2, i8, CONVERT_MODE_BC5SNORM>::write}, // FORMAT_RG_ATI2N_SNORM_BLOCK16 - {conv<3, f32, CONVERT_MODE_DEFAULT>::fetch, conv<3, f32, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_BP_UFLOAT_BLOCK16 - {conv<3, f32, CONVERT_MODE_DEFAULT>::fetch, conv<3, f32, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_BP_SFLOAT_BLOCK16 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_BP_UNORM_BLOCK16 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_BP_SRGB_BLOCK16 - - {conv<3, u8, CONVERT_MODE_DEFAULT>::fetch, conv<3, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_ETC2_UNORM_BLOCK8 - {conv<3, u8, CONVERT_MODE_DEFAULT>::fetch, conv<3, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_ETC2_SRGB_BLOCK8 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_ETC2_A1_UNORM_BLOCK8 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_ETC2_A1_SRGB_BLOCK8 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_ETC2_UNORM_BLOCK16 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_ETC2_SRGB_BLOCK16 - {conv<1, u8, CONVERT_MODE_DEFAULT>::fetch, conv<1, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_R_EAC_UNORM_BLOCK8 - {conv<1, u8, CONVERT_MODE_DEFAULT>::fetch, conv<1, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_R_EAC_SNORM_BLOCK8 - {conv<2, u8, CONVERT_MODE_DEFAULT>::fetch, conv<2, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RG_EAC_UNORM_BLOCK16 - {conv<2, u8, CONVERT_MODE_DEFAULT>::fetch, conv<2, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RG_EAC_SNORM_BLOCK16 - - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_4x4_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_4x4_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_5x4_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_5x4_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_5x5_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_5x5_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_6x5_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_6x5_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_6x6_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_6x6_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_8x5_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_8x5_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_8x6_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_8x6_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_8x8_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_8x8_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_10x5_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_10x5_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_10x6_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_10x6_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_10x8_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_10x8_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_10x10_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_10x10_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_12x10_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_12x10_SRGB - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_12x12_UNORM - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_ASTC_12x12_SRGB - - {conv<3, u8, CONVERT_MODE_DEFAULT>::fetch, conv<3, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_PVRTC1_8X8_UNORM_BLOCK32 - {conv<3, u8, CONVERT_MODE_DEFAULT>::fetch, conv<3, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_PVRTC1_8X8_SRGB_BLOCK32 - {conv<3, u8, CONVERT_MODE_DEFAULT>::fetch, conv<3, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_PVRTC1_16X8_UNORM_BLOCK32 - {conv<3, u8, CONVERT_MODE_DEFAULT>::fetch, conv<3, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_PVRTC1_16X8_SRGB_BLOCK32 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_PVRTC1_8X8_UNORM_BLOCK32 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_PVRTC1_8X8_SRGB_BLOCK32 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_PVRTC1_16X8_UNORM_BLOCK32 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_PVRTC1_16X8_SRGB_BLOCK32 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_PVRTC2_4X4_UNORM_BLOCK8 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_PVRTC2_4X4_SRGB_BLOCK8 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_PVRTC2_8X4_UNORM_BLOCK8 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_PVRTC2_8X4_SRGB_BLOCK8 - - {conv<3, u8, CONVERT_MODE_DEFAULT>::fetch, conv<3, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_ETC_UNORM_BLOCK8 - {conv<3, u8, CONVERT_MODE_DEFAULT>::fetch, conv<3, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGB_ATC_UNORM_BLOCK8 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_ATCA_UNORM_BLOCK16 - {conv<4, u8, CONVERT_MODE_DEFAULT>::fetch, conv<4, u8, CONVERT_MODE_DEFAULT>::write}, // FORMAT_RGBA_ATCI_UNORM_BLOCK16 - - {conv<1, u8, CONVERT_MODE_NORM>::fetch, conv<1, u8, CONVERT_MODE_NORM>::write}, // FORMAT_L8_UNORM_PACK8 - {conv<1, u8, CONVERT_MODE_NORM>::fetch, conv<1, u8, CONVERT_MODE_NORM>::write}, // FORMAT_A8_UNORM_PACK8 - {conv<2, u8, CONVERT_MODE_NORM>::fetch, conv<2, u8, CONVERT_MODE_NORM>::write}, // FORMAT_LA8_UNORM_PACK8 - {conv<1, u16, CONVERT_MODE_NORM>::fetch, conv<1, u16, CONVERT_MODE_NORM>::write}, // FORMAT_L16_UNORM_PACK16 - {conv<1, u16, CONVERT_MODE_NORM>::fetch, conv<1, u16, CONVERT_MODE_NORM>::write}, // FORMAT_A16_UNORM_PACK16 - {conv<2, u16, CONVERT_MODE_NORM>::fetch, conv<2, u16, CONVERT_MODE_NORM>::write}, // FORMAT_LA16_UNORM_PACK16 - - {conv<4, u8, CONVERT_MODE_NORM>::fetch, conv<4, u8, CONVERT_MODE_NORM>::write}, // FORMAT_BGRX8_UNORM - {conv<4, u8, CONVERT_MODE_SRGB>::fetch, conv<4, u8, CONVERT_MODE_SRGB>::write}, // FORMAT_BGRX8_SRGB - - {conv<3, u8, CONVERT_MODE_332UNORM>::fetch, conv<3, u8, CONVERT_MODE_332UNORM>::write} // FORMAT_RG3B2_UNORM - }; - static_assert(sizeof(Table) / sizeof(Table[0]) == FORMAT_COUNT, "Texel functions need to be updated"); - - return Table[Format - FORMAT_FIRST]; - } - }; -}//namespace detail -}//namespace gli diff --git a/external/gli/gli/core/coord.hpp b/external/gli/gli/core/coord.hpp deleted file mode 100644 index 3509fa3f..00000000 --- a/external/gli/gli/core/coord.hpp +++ /dev/null @@ -1,87 +0,0 @@ -#pragma once - -#include "../type.hpp" - -namespace gli{ -namespace detail -{ - template - inline vec in_interval(vec const& Value, vec const& Min, vec const& Max) - { - return greaterThanEqual(Value, Min) && lessThanEqual(Value, Max); - } - - template - struct coord_nearest - { - extent_type Texel; - typename extent_type::bool_type UseTexel; - }; - - template - inline coord_nearest make_coord_nearest(extent_type const& TexelExtent, normalized_type const& SampleCoord) - { - normalized_type const TexelLast(normalized_type(TexelExtent) - normalized_type(1)); - - coord_nearest Coord; - Coord.Texel = extent_type(round(SampleCoord * TexelLast)); - Coord.UseTexel = in_interval(Coord.Texel, extent_type(0), TexelExtent - 1); - return Coord; - } - - template - struct coord_linear - { - extent_type TexelFloor; - extent_type TexelCeil; - normalized_type Blend; - }; - - template - struct coord_linear_border : public coord_linear - { - typename extent_type::bool_type UseTexelFloor; - typename extent_type::bool_type UseTexelCeil; - }; - - template - GLI_FORCE_INLINE coord_linear make_coord_linear(extent_type const& TexelExtent, normalized_type const& SampleCoord) - { - coord_linear Coord; - - normalized_type const TexelExtentF(TexelExtent); - normalized_type const TexelLast = TexelExtentF - normalized_type(1); - normalized_type const ScaledCoord(SampleCoord * TexelLast); - normalized_type const ScaledCoordFloor = normalized_type(extent_type(ScaledCoord)); - normalized_type const ScaledCoordCeil = normalized_type(extent_type(ScaledCoord + normalized_type(0.5))); - //normalized_type const ScaledCoordFloor(floor(ScaledCoord)); - //normalized_type const ScaledCoordCeil(ceil(ScaledCoord)); - - Coord.Blend = ScaledCoord - ScaledCoordFloor; - Coord.TexelFloor = extent_type(ScaledCoordFloor); - Coord.TexelCeil = extent_type(ScaledCoordCeil); - - return Coord; - } - - template - GLI_FORCE_INLINE coord_linear_border make_coord_linear_border(extent_type const& TexelExtent, normalized_type const& SampleCoord) - { - coord_linear_border Coord; - - normalized_type const TexelExtentF(TexelExtent); - normalized_type const TexelLast = TexelExtentF - normalized_type(1); - normalized_type const ScaledCoord(SampleCoord * TexelLast); - normalized_type const ScaledCoordFloor(floor(ScaledCoord)); - normalized_type const ScaledCoordCeil(ceil(ScaledCoord)); - - Coord.Blend = ScaledCoord - ScaledCoordFloor; - Coord.TexelFloor = extent_type(ScaledCoordFloor); - Coord.TexelCeil = extent_type(ScaledCoordCeil); - Coord.UseTexelFloor = in_interval(Coord.TexelFloor, extent_type(0), TexelExtent - 1); - Coord.UseTexelCeil = in_interval(Coord.TexelCeil, extent_type(0), TexelExtent - 1); - - return Coord; - } -}//namespace detail -}//namespace gli diff --git a/external/gli/gli/core/copy.inl b/external/gli/gli/core/copy.inl deleted file mode 100644 index 9aea05d9..00000000 --- a/external/gli/gli/core/copy.inl +++ /dev/null @@ -1,112 +0,0 @@ -#include "../type.hpp" -#include - -namespace gli -{ - template - void copy - ( - texture_src_type const& TextureSrc, size_t LayerSrc, size_t FaceSrc, size_t LevelSrc, - texture_dst_type& TextureDst, size_t LayerDst, size_t FaceDst, size_t LevelDst - ) - { - TextureDst.copy(TextureSrc, LayerSrc, FaceSrc, LevelSrc, LayerDst, FaceDst, LevelDst); - } - - template - void copy - ( - texture_src_type const& TextureSrc, - texture_dst_type& TextureDst - ) - { - copy_layer(TextureSrc, 0, TextureDst, 0, TextureDst.layers()); - } - - template - void copy_level - ( - texture_src_type const& TextureSrc, size_t BaseLevelSrc, - texture_dst_type& TextureDst, size_t BaseLevelDst, - size_t LevelCount - ) - { - for(size_t LayerIndex = 0, LayerCount = TextureSrc.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_t FaceIndex = 0, FaceCount = TextureSrc.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_t LevelIndex = 0; LevelIndex < LevelCount; ++LevelIndex) - { - TextureDst.copy( - TextureSrc, - LayerIndex, FaceIndex, BaseLevelSrc + LevelIndex, - LayerIndex, FaceIndex, BaseLevelDst + LevelIndex); - } - } - - template - void copy_level - ( - texture_src_type const& TextureSrc, size_t BaseLevelSrc, - texture_dst_type& TextureDst, size_t BaseLevelDst - ) - { - copy_level(TextureSrc, BaseLevelSrc, TextureDst, BaseLevelDst, 1); - } - - template - void copy_face - ( - texture_src_type const& TextureSrc, size_t BaseFaceSrc, - texture_dst_type& TextureDst, size_t BaseFaceDst, - size_t FaceCount - ) - { - for(size_t LayerIndex = 0, LayerCount = TextureSrc.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_t FaceIndex = 0; FaceIndex < FaceCount; ++FaceIndex) - for(size_t LevelIndex = 0, LevelCount = TextureSrc.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - TextureDst.copy( - TextureSrc, - LayerIndex, BaseFaceSrc + FaceIndex, LevelIndex, - LayerIndex, BaseFaceDst + FaceIndex, LevelIndex); - } - } - - template - void copy_face - ( - texture_src_type const& TextureSrc, size_t BaseFaceSrc, - texture_dst_type& TextureDst, size_t BaseFaceDst - ) - { - copy_face(TextureSrc, BaseFaceSrc, TextureDst, BaseFaceDst, 1); - } - - template - void copy_layer - ( - texture_src_type const& TextureSrc, size_t BaseLayerSrc, - texture_dst_type& TextureDst, size_t BaseLayerDst, - size_t LayerCount - ) - { - for(size_t LayerIndex = 0; LayerIndex < LayerCount; ++LayerIndex) - for(size_t FaceIndex = 0, FaceCount = TextureSrc.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_t LevelIndex = 0, LevelCount = TextureSrc.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - TextureDst.copy( - TextureSrc, - BaseLayerSrc + LayerIndex, FaceIndex, LevelIndex, - BaseLayerDst + LayerIndex, FaceIndex, LevelIndex); - } - } - - template - void copy_layer - ( - texture_src_type const& TextureSrc, size_t BaseLayerSrc, - texture_dst_type& TextureDst, size_t BaseLayerDst - ) - { - copy_layer(TextureSrc, BaseLayerSrc, TextureDst, BaseLayerDst, 1); - } -}//namespace gli diff --git a/external/gli/gli/core/dummy.cpp b/external/gli/gli/core/dummy.cpp deleted file mode 100644 index 0395e23b..00000000 --- a/external/gli/gli/core/dummy.cpp +++ /dev/null @@ -1,4 +0,0 @@ -int main() -{ - -} diff --git a/external/gli/gli/core/duplicate.inl b/external/gli/gli/core/duplicate.inl deleted file mode 100644 index fd280d9e..00000000 --- a/external/gli/gli/core/duplicate.inl +++ /dev/null @@ -1,267 +0,0 @@ -namespace gli{ -namespace detail -{ - inline void duplicate_images - ( - texture const & Src, texture & Dst, - texture::size_type BaseLayer, texture::size_type MaxLayer, - texture::size_type BaseFace, texture::size_type MaxFace, - texture::size_type BaseLevel, texture::size_type MaxLevel - ) - { - GLI_ASSERT(BaseLayer >= 0 && BaseLayer <= MaxLayer && MaxLayer < Src.layers()); - GLI_ASSERT(BaseFace >= 0 && BaseFace <= MaxFace && MaxFace < Src.faces()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel <= MaxLevel && MaxLevel < Src.levels()); - - texture::size_type LevelsSize = 0; - for(texture::size_type LevelIndex = 0; LevelIndex < MaxLevel - BaseLevel + 1; ++LevelIndex) - { - GLI_ASSERT(Dst.size(LevelIndex) == Src.size(LevelIndex)); - LevelsSize += Dst.size(LevelIndex); - } - - for(texture::size_type LayerIndex = 0, LayerCount = MaxLayer - BaseLayer + 1; LayerIndex < LayerCount; ++LayerIndex) - for(texture::size_type FaceIndex = 0, FaceCount = MaxFace - BaseFace + 1; FaceIndex < FaceCount; ++FaceIndex) - { - memcpy(Dst.data(LayerIndex, FaceIndex, BaseLevel), Src.data(BaseLayer + LayerIndex, BaseFace + FaceIndex, BaseLevel), LevelsSize); - } - } -}//namespace detail - - inline image duplicate(image const & Image) - { - image Result(Image.format(), Image.extent()); - - memcpy(Result.data(), Image.data(), Image.size()); - - return Result; - } - - template <> - inline texture duplicate(texture const & Texture) - { - texture Duplicate( - Texture.target(), - Texture.format(), - Texture.extent(), - Texture.layers(), - Texture.faces(), - Texture.levels()); - - detail::duplicate_images( - Texture, Duplicate, - 0, Texture.layers() - 1, - 0, Texture.faces() - 1, - 0, Texture.levels() - 1); - - return Duplicate; - } - - template - inline texture duplicate(texType const & Texture) - { - texture Duplicate( - Texture.target(), - Texture.format(), - Texture.texture::extent(), - Texture.layers(), - Texture.faces(), - Texture.levels()); - - detail::duplicate_images( - Texture, Duplicate, - 0, Texture.layers() - 1, - 0, Texture.faces() - 1, - 0, Texture.levels() - 1); - - return Duplicate; - } - - template - inline texture duplicate(texType const & Texture, typename texType::format_type Format) - { - GLI_ASSERT(block_size(Texture.format()) == block_size(Format)); - - texture Duplicate( - Texture.target(), - Format, - Texture.extent(), - Texture.layers(), - Texture.faces(), - Texture.levels()); - - detail::duplicate_images( - Texture, Duplicate, - 0, Texture.layers() - 1, - 0, Texture.faces() - 1, - 0, Texture.levels() - 1); - - return Duplicate; - } - - inline texture duplicate - ( - texture1d const & Texture, - texture1d::size_type BaseLevel, texture1d::size_type MaxLevel - ) - { - GLI_ASSERT(BaseLevel <= MaxLevel); - GLI_ASSERT(BaseLevel < Texture.levels()); - GLI_ASSERT(MaxLevel < Texture.levels()); - - texture1d Duplicate( - Texture.format(), - Texture.extent(BaseLevel), - MaxLevel - BaseLevel + 1); - - memcpy(Duplicate.data(), Texture.data(0, 0, BaseLevel), Duplicate.size()); - - return Duplicate; - } - - inline texture duplicate - ( - texture1d_array const & Texture, - texture1d_array::size_type BaseLayer, texture1d_array::size_type MaxLayer, - texture1d_array::size_type BaseLevel, texture1d_array::size_type MaxLevel - ) - { - GLI_ASSERT(BaseLevel <= MaxLevel); - GLI_ASSERT(BaseLevel < Texture.levels()); - GLI_ASSERT(MaxLevel < Texture.levels()); - GLI_ASSERT(BaseLayer <= MaxLayer); - GLI_ASSERT(BaseLayer < Texture.layers()); - GLI_ASSERT(MaxLayer < Texture.layers()); - - texture1d_array Duplicate( - Texture.format(), - Texture[BaseLayer].extent(BaseLevel), - MaxLayer - BaseLayer + 1, - MaxLevel - BaseLevel + 1); - - for(texture1d_array::size_type Layer = 0; Layer < Duplicate.layers(); ++Layer) - memcpy(Duplicate.data(Layer, 0, 0), Texture.data(Layer + BaseLayer, 0, BaseLevel), Duplicate[Layer].size()); - - return Duplicate; - } - - inline texture duplicate - ( - texture2d const & Texture, - texture2d::size_type BaseLevel, texture2d::size_type MaxLevel - ) - { - GLI_ASSERT(BaseLevel <= MaxLevel); - GLI_ASSERT(BaseLevel < Texture.levels()); - GLI_ASSERT(MaxLevel < Texture.levels()); - - texture2d Duplicate( - Texture.format(), - Texture.extent(BaseLevel), - MaxLevel - BaseLevel + 1); - - memcpy(Duplicate.data(), Texture.data(0, 0, BaseLevel), Duplicate.size()); - - return Duplicate; - } - - inline texture duplicate - ( - texture2d_array const & Texture, - texture2d_array::size_type BaseLayer, texture2d_array::size_type MaxLayer, - texture2d_array::size_type BaseLevel, texture2d_array::size_type MaxLevel - ) - { - GLI_ASSERT(BaseLevel <= MaxLevel); - GLI_ASSERT(BaseLevel < Texture.levels()); - GLI_ASSERT(MaxLevel < Texture.levels()); - GLI_ASSERT(BaseLayer <= MaxLayer); - GLI_ASSERT(BaseLayer < Texture.layers()); - GLI_ASSERT(MaxLayer < Texture.layers()); - - texture2d_array Duplicate( - Texture.format(), - Texture.extent(BaseLevel), - MaxLayer - BaseLayer + 1, - MaxLevel - BaseLevel + 1); - - for(texture2d_array::size_type Layer = 0; Layer < Duplicate.layers(); ++Layer) - memcpy(Duplicate.data(Layer, 0, 0), Texture.data(Layer + BaseLayer, 0, BaseLevel), Duplicate[Layer].size()); - - return Duplicate; - } - - inline texture duplicate - ( - texture3d const & Texture, - texture3d::size_type BaseLevel, texture3d::size_type MaxLevel - ) - { - GLI_ASSERT(BaseLevel <= MaxLevel); - GLI_ASSERT(BaseLevel < Texture.levels()); - GLI_ASSERT(MaxLevel < Texture.levels()); - - texture3d Duplicate( - Texture.format(), - Texture.extent(BaseLevel), - MaxLevel - BaseLevel + 1); - - memcpy(Duplicate.data(), Texture.data(0, 0, BaseLevel), Duplicate.size()); - - return Duplicate; - } - - inline texture duplicate - ( - texture_cube const & Texture, - texture_cube::size_type BaseFace, texture_cube::size_type MaxFace, - texture_cube::size_type BaseLevel, texture_cube::size_type MaxLevel - ) - { - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < Texture.levels() && BaseLevel <= MaxLevel && MaxLevel < Texture.levels()); - GLI_ASSERT(BaseFace <= MaxFace); - GLI_ASSERT(BaseFace < Texture.faces()); - GLI_ASSERT(MaxFace < Texture.faces()); - - texture_cube Duplicate( - Texture.format(), - Texture[BaseFace].extent(BaseLevel), - MaxLevel - BaseLevel + 1); - - for(texture_cube::size_type Face = 0; Face < Duplicate.faces(); ++Face) - memcpy(Duplicate[Face].data(), Texture[Face + BaseFace][BaseLevel].data(), Duplicate[Face].size()); - - return Duplicate; - } - - inline texture duplicate - ( - texture_cube_array const & Texture, - texture_cube_array::size_type BaseLayer, texture_cube_array::size_type MaxLayer, - texture_cube_array::size_type BaseFace, texture_cube_array::size_type MaxFace, - texture_cube_array::size_type BaseLevel, texture_cube_array::size_type MaxLevel - ) - { - GLI_ASSERT(BaseLevel <= MaxLevel); - GLI_ASSERT(BaseLevel < Texture.levels()); - GLI_ASSERT(MaxLevel < Texture.levels()); - GLI_ASSERT(BaseFace <= MaxFace); - GLI_ASSERT(BaseFace < Texture.faces()); - GLI_ASSERT(MaxFace < Texture.faces()); - GLI_ASSERT(BaseLayer <= MaxLayer); - GLI_ASSERT(BaseLayer < Texture.layers()); - GLI_ASSERT(MaxLayer < Texture.layers()); - - texture_cube_array Duplicate( - Texture.format(), - Texture[BaseLayer][BaseFace].extent(BaseLevel), - MaxLayer - BaseLayer + 1, - MaxLevel - BaseLevel + 1); - - for(texture_cube_array::size_type Layer = 0; Layer < Duplicate.layers(); ++Layer) - for(texture_cube_array::size_type Face = 0; Face < Duplicate[Layer].faces(); ++Face) - memcpy(Duplicate[Layer][Face].data(), Texture[Layer + BaseLayer][Face + BaseFace][BaseLevel].data(), Duplicate[Layer][Face].size()); - - return Duplicate; - } -}//namespace gli diff --git a/external/gli/gli/core/dx.inl b/external/gli/gli/core/dx.inl deleted file mode 100644 index 086440e0..00000000 --- a/external/gli/gli/core/dx.inl +++ /dev/null @@ -1,311 +0,0 @@ -#include - -namespace gli -{ - inline dx::dx() - { - static format const Table[] = - { - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RG4_UNORM_GLI, glm::u32vec4(0x000F, 0x00F0, 0x0000, 0x0000)}, //FORMAT_RG4_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA4_UNORM_GLI, glm::u32vec4(0x000F, 0x00F0, 0x0F00, 0xF000)}, //FORMAT_RGBA4_UNORM, - {DDPF_FOURCC, D3DFMT_A4R4G4B4, DXGI_FORMAT_B4G4R4A4_UNORM, glm::u32vec4(0x0F00, 0x00F0, 0x000F, 0xF000)}, //FORMAT_BGRA4_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R5G6B5_UNORM_GLI, glm::u32vec4(0x001f, 0x07e0, 0xf800, 0x0000)}, //FORMAT_R5G6B5_UNORM, - {DDPF_FOURCC, D3DFMT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM, glm::u32vec4(0xf800, 0x07e0, 0x001f, 0x0000)}, //FORMAT_B5G6R5_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R5G5B5A1_UNORM_GLI, glm::u32vec4(0x001f, 0x03e0, 0x7c00, 0x8000)}, //FORMAT_RGB5A1_UNORM, - {DDPF_FOURCC, D3DFMT_A1R5G5B5, DXGI_FORMAT_B5G5R5A1_UNORM, glm::u32vec4(0x7c00, 0x03e0, 0x001f, 0x8000)}, //FORMAT_BGR5A1_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_A1B5G5R5_UNORM_GLI, glm::u32vec4(0x7c00, 0x03e0, 0x001f, 0x8000)}, //FORMAT_A1RGB5_UNORM, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8_UNORM, glm::u32vec4(0x00FF0000, 0x00000000, 0x00000000, 0x00000000)}, //FORMAT_R8_UNORM, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8_SNORM, glm::u32vec4(0)}, //FORMAT_R8_SNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8_USCALED_GLI, glm::u32vec4(0x00FF0000, 0x00000000, 0x00000000, 0x00000000)}, //FORMAT_R8_USCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8_SSCALED_GLI, glm::u32vec4(0)}, //FORMAT_R8_SSCALED, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8_UINT, glm::u32vec4(0)}, //FORMAT_R8_UINT, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8_SINT, glm::u32vec4(0)}, //FORMAT_R8_SINT, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_R8_SRGB, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8G8_UNORM, glm::u32vec4(0x00FF0000, 0x0000FF00, 0x00000000, 0x00000000)}, //FORMAT_RG8_UNORM, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8G8_SNORM, glm::u32vec4(0)}, //FORMAT_RG8_SNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8_USCALED_GLI, glm::u32vec4(0x00FF0000, 0x0000FF00, 0x00000000, 0x00000000)}, //FORMAT_RG8_USCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8_SSCALED_GLI, glm::u32vec4(0)}, //FORMAT_RG8_SSCALED, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8G8_UINT, glm::u32vec4(0)}, //FORMAT_RG8_UINT, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8G8_SINT, glm::u32vec4(0)}, //FORMAT_RG8_SINT, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RG8_SRGB, - - {DDPF_RGB, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8_UNORM_GLI, glm::u32vec4(0x000000FF, 0x0000FF00, 0x00FF0000, 0x00000000)}, //FORMAT_RGB8_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8_SNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGB8_SNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8_USCALED_GLI, glm::u32vec4(0)}, //FORMAT_RGB8_USCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8_SSCALED_GLI, glm::u32vec4(0)}, //FORMAT_RGB8_SSCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8_UINT_GLI, glm::u32vec4(0)}, //FORMAT_RGB8_UINT, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8_SINT_GLI, glm::u32vec4(0)}, //FORMAT_RGB8_SINT, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGB8_SRGB, - - {DDPF_RGB, D3DFMT_R8G8B8, DXGI_FORMAT_B8G8R8_UNORM_GLI, glm::u32vec4(0x00FF0000, 0x0000FF00, 0x000000FF, 0x00000000)}, //FORMAT_BGR8_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8_SNORM_GLI, glm::u32vec4(0)}, //FORMAT_BGR8_SNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8_USCALED_GLI, glm::u32vec4(0)}, //FORMAT_BGR8_USCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8_SSCALED_GLI, glm::u32vec4(0)}, //FORMAT_BGR8_SSCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8_UINT_GLI, glm::u32vec4(0)}, //FORMAT_BGR8_UINT, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8_SINT_GLI, glm::u32vec4(0)}, //FORMAT_BGR8_SINT, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_BGR8_SRGB, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8G8B8A8_UNORM, glm::u32vec4(0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000)}, //FORMAT_RGBA8_UNORM, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8G8B8A8_SNORM, glm::u32vec4(0)}, //FORMAT_RGBA8_SNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8A8_USCALED_GLI, glm::u32vec4(0)}, //FORMAT_RGBA8_USCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8A8_SSCALED_GLI, glm::u32vec4(0)}, //FORMAT_RGBA8_SSCALED, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8G8B8A8_UINT, glm::u32vec4(0)}, //FORMAT_RGBA8_UINT, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8G8B8A8_SINT, glm::u32vec4(0)}, //FORMAT_RGBA8_SINT, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, glm::u32vec4(0)}, //FORMAT_RGBA8_SRGB, - - {DDPF_RGBA, D3DFMT_A8R8G8B8, DXGI_FORMAT_B8G8R8A8_UNORM, glm::u32vec4(0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000)}, //FORMAT_BGRA8_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8A8_SNORM_GLI, glm::u32vec4(0)}, //FORMAT_BGRA8_SNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8A8_USCALED_GLI, glm::u32vec4(0)}, //FORMAT_BGRA8_USCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8A8_SSCALED_GLI, glm::u32vec4(0)}, //FORMAT_BGRA8_SSCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8A8_UINT_GLI, glm::u32vec4(0)}, //FORMAT_BGRA8_UINT, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B8G8R8A8_SINT_GLI, glm::u32vec4(0)}, //FORMAT_BGRA8_SINT, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, glm::u32vec4(0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000)}, //FORMAT_BGRA8_SRGB, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8A8_PACK_UNORM_GLI, glm::u32vec4(0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000)}, //FORMAT_ABGR8_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8A8_PACK_SNORM_GLI, glm::u32vec4(0)}, //FORMAT_ABGR8_SNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8A8_PACK_USCALED_GLI, glm::u32vec4(0)}, //FORMAT_ABGR8_USCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8A8_PACK_SSCALED_GLI, glm::u32vec4(0)}, //FORMAT_ABGR8_SSCALED, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8A8_PACK_UINT_GLI, glm::u32vec4(0)}, //FORMAT_ABGR8_UINT, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8A8_PACK_SINT_GLI, glm::u32vec4(0)}, //FORMAT_ABGR8_SINT, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R8G8B8A8_PACK_SRGB_GLI, glm::u32vec4(0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000)}, //FORMAT_ABGR8_SRGB, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R10G10B10A2_UNORM, glm::u32vec4(0x000003FF, 0x000FFC00, 0x3FF00000, 0xC0000000)}, //FORMAT_RGB10A2_UNORM_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R10G10B10A2_SNORM_GLI, glm::u32vec4(0x000003FF, 0x000FFC00, 0x3FF00000, 0xC0000000)}, //FORMAT_RGB10A2_SNORM_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R10G10B10A2_USCALED_GLI, glm::u32vec4(0x000003FF, 0x000FFC00, 0x3FF00000, 0xC0000000)}, //FORMAT_RGB10A2_USCALED_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R10G10B10A2_SSCALED_GLI, glm::u32vec4(0x000003FF, 0x000FFC00, 0x3FF00000, 0xC0000000)}, //FORMAT_RGB10A2_SSCALED_PACK32, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R10G10B10A2_UINT, glm::u32vec4(0x000003FF, 0x000FFC00, 0x3FF00000, 0xC0000000)}, //FORMAT_RGB10A2_UINT_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R10G10B10A2_SINT_GLI, glm::u32vec4(0x000003FF, 0x000FFC00, 0x3FF00000, 0xC0000000)}, //FORMAT_RGB10A2_SINT_PACK32, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B10G10R10A2_UNORM_GLI, glm::u32vec4(0x3FF00000, 0x000FFC00, 0x000003FF, 0xC0000000)}, //FORMAT_BGR10A2_UNORM_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B10G10R10A2_SNORM_GLI, glm::u32vec4(0x3FF00000, 0x000FFC00, 0x000003FF, 0xC0000000)}, //FORMAT_BGR10A2_SNORM_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B10G10R10A2_USCALED_GLI, glm::u32vec4(0x3FF00000, 0x000FFC00, 0x000003FF, 0xC0000000)}, //FORMAT_BGR10A2_USCALED_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B10G10R10A2_SSCALED_GLI, glm::u32vec4(0x3FF00000, 0x000FFC00, 0x000003FF, 0xC0000000)}, //FORMAT_BGR10A2_SSCALED_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B10G10R10A2_UINT_GLI, glm::u32vec4(0x3FF00000, 0x000FFC00, 0x000003FF, 0xC0000000)}, //FORMAT_BGR10A2_UINT_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_B10G10R10A2_SINT_GLI, glm::u32vec4(0x3FF00000, 0x000FFC00, 0x000003FF, 0xC0000000)}, //FORMAT_BGR10A2_SINT_PACK32, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16_UNORM, glm::u32vec4(0x0000FFFF, 0x00000000, 0x00000000, 0x00000000)}, //FORMAT_R16_UNORM_PACK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16_SNORM, glm::u32vec4(0x0000FFFF, 0x00000000, 0x00000000, 0x00000000)}, //FORMAT_R16_SNORM_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16_USCALED_GLI, glm::u32vec4(0x0000FFFF, 0x00000000, 0x00000000, 0x00000000)}, //FORMAT_R16_USCALED_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16_SSCALED_GLI, glm::u32vec4(0x0000FFFF, 0x00000000, 0x00000000, 0x00000000)}, //FORMAT_R16_SSCALED_PACK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16_UINT, glm::u32vec4(0x0000FFFF, 0x00000000, 0x00000000, 0x0000000)}, //FORMAT_R16_UINT_PACK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16_SINT, glm::u32vec4(0x0000FFFF, 0x00000000, 0x00000000, 0x0000000)}, //FORMAT_R16_SINT_PACK16, - {DDPF_FOURCC, D3DFMT_R16F, DXGI_FORMAT_R16_FLOAT, glm::u32vec4(0x0000FFFF, 0x00000000, 0x00000000, 0x0000000)}, //FORMAT_R16_SFLOAT_PACK16, - - {DDPF_FOURCC, D3DFMT_G16R16, DXGI_FORMAT_R16G16_UNORM, glm::u32vec4(0x0000FFFF, 0xFFFF0000, 0x00000000, 0x00000000)}, //FORMAT_RG16_UNORM_PACK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16G16_SNORM, glm::u32vec4(0x0000FFFF, 0xFFFF0000, 0x00000000, 0x00000000)}, //FORMAT_RG16_SNORM_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16_USCALED_GLI, glm::u32vec4(0x0000FFFF, 0xFFFF0000, 0x00000000, 0x00000000)}, //FORMAT_RG16_USCALED_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16_SSCALED_GLI, glm::u32vec4(0x0000FFFF, 0xFFFF0000, 0x00000000, 0x00000000)}, //FORMAT_RG16_SSCALED_PACK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16G16_UINT, glm::u32vec4(0x0000FFFF, 0xFFFF0000, 0x00000000, 0x00000000)}, //FORMAT_RG16_UINT_PACK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16G16_SINT, glm::u32vec4(0x0000FFFF, 0xFFFF0000, 0x00000000, 0x00000000)}, //FORMAT_RG16_SINT_PACK16, - {DDPF_FOURCC, D3DFMT_G16R16F, DXGI_FORMAT_R16G16_FLOAT, glm::u32vec4(0x0000FFFF, 0xFFFF0000, 0x00000000, 0x00000000)}, //FORMAT_RG16_SFLOAT_PACK16, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16B16_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGB16_UNORM_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16B16_SNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGB16_SNORM_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16B16_USCALED_GLI, glm::u32vec4(0)}, //FORMAT_RGB16_USCALED_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16B16_SSCALED_GLI, glm::u32vec4(0)}, //FORMAT_RGB16_SSCALED_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16B16_UINT_GLI, glm::u32vec4(0)}, //FORMAT_RGB16_UINT_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16B16_SINT_GLI, glm::u32vec4(0)}, //FORMAT_RGB16_SINT_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16B16_FLOAT_GLI, glm::u32vec4(0)}, //FORMAT_RGB16_SFLOAT_PACK16, - - {DDPF_FOURCC, D3DFMT_A16B16G16R16, DXGI_FORMAT_R16G16B16A16_UNORM, glm::u32vec4(0)}, //FORMAT_RGBA16_UNORM_PACK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16G16B16A16_SNORM, glm::u32vec4(0)}, //FORMAT_RGBA16_SNORM_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16B16A16_USCALED_GLI, glm::u32vec4(0)}, //FORMAT_RGBA16_USCALED_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R16G16B16A16_SSCALED_GLI, glm::u32vec4(0)}, //FORMAT_RGBA16_SSCALED_PACK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16G16B16A16_UINT, glm::u32vec4(0)}, //FORMAT_RGBA16_UINT_PACK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R16G16B16A16_SINT, glm::u32vec4(0)}, //FORMAT_RGBA16_SINT_PACK16, - {DDPF_FOURCC, D3DFMT_A16B16G16R16F, DXGI_FORMAT_R16G16B16A16_FLOAT, glm::u32vec4(0)}, //FORMAT_RGBA16_SFLOAT_PACK16, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R32_UINT, glm::u32vec4(0)}, //FORMAT_R32_UINT_PACK32, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R32_SINT, glm::u32vec4(0)}, //FORMAT_R32_SINT_PACK32, - {DDPF_FOURCC, D3DFMT_R32F, DXGI_FORMAT_R32_FLOAT, glm::u32vec4(0xFFFFFFFF, 0x0000000, 0x0000000, 0x0000000)}, //FORMAT_R32_SFLOAT_PACK32, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R32G32_UINT, glm::u32vec4(0)}, //FORMAT_RG32_UINT_PACK32 - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R32G32_SINT, glm::u32vec4(0)}, //FORMAT_RG32_SINT_PACK32, - {DDPF_FOURCC, D3DFMT_G32R32F, DXGI_FORMAT_R32G32_FLOAT, glm::u32vec4(0)}, //FORMAT_RG32_SFLOAT_PACK32, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R32G32B32_UINT, glm::u32vec4(0)}, //FORMAT_RGB32_UINT_PACK32, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R32G32B32_SINT, glm::u32vec4(0)}, //FORMAT_RGB32_SINT_PACK32, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R32G32B32_FLOAT, glm::u32vec4(0)}, //FORMAT_RGB32_SFLOAT_PACK32, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R32G32B32A32_UINT, glm::u32vec4(0)}, //FORMAT_RGBA32_UINT_PACK32, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R32G32B32A32_SINT, glm::u32vec4(0)}, //FORMAT_RGBA32_SINT_PACK32, - {DDPF_FOURCC, D3DFMT_A32B32G32R32F, DXGI_FORMAT_R32G32B32A32_FLOAT, glm::u32vec4(0)}, //FORMAT_RGBA32_SFLOAT_PACK32, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64_UINT_GLI, glm::u32vec4(0)}, //FORMAT_R64_UINT_PACK64, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64_SINT_GLI, glm::u32vec4(0)}, //FORMAT_R64_SINT_PACK64, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64_FLOAT_GLI, glm::u32vec4(0)}, //FORMAT_R64_SFLOAT_PACK64, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64G64_UINT_GLI, glm::u32vec4(0)}, //FORMAT_RG64_UINT_PACK64, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64G64_SINT_GLI, glm::u32vec4(0)}, //FORMAT_RG64_SINT_PACK64, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64G64_FLOAT_GLI, glm::u32vec4(0)}, //FORMAT_RG64_SFLOAT_PACK64, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64G64B64_UINT_GLI, glm::u32vec4(0)}, //FORMAT_RGB64_UINT_PACK64, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64G64B64_SINT_GLI, glm::u32vec4(0)}, //FORMAT_RGB64_SINT_PACK64, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64G64B64_FLOAT_GLI, glm::u32vec4(0)}, //FORMAT_RGB64_SFLOAT_PACK64, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64G64B64A64_UINT_GLI, glm::u32vec4(0)}, //FORMAT_RGBA64_UINT_PACK64, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64G64B64A64_SINT_GLI, glm::u32vec4(0)}, //FORMAT_RGBA64_SINT_PACK64, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R64G64B64A64_FLOAT_GLI, glm::u32vec4(0)}, //FORMAT_RGBA64_SFLOAT_PACK64, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R11G11B10_FLOAT, glm::u32vec4(0)}, //FORMAT_RG11B10_UFLOAT, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, glm::u32vec4(0)}, //FORMAT_RGB9E5_UFLOAT, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_D16_UNORM, glm::u32vec4(0)}, //FORMAT_D16_UNORM_PACK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_D24_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_D24_UNORM, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_D32_FLOAT, glm::u32vec4(0)}, //FORMAT_D32_SFLOAT_PACK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_S8_UINT_GLI, glm::u32vec4(0)}, //FORMAT_S8_UINT_PACK8, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_D16_UNORM_S8_UINT_GLI, glm::u32vec4(0)}, //FORMAT_D16_UNORM_S8_UINT_PACK32, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_D24_UNORM_S8_UINT, glm::u32vec4(0)}, //FORMAT_D24_UNORM_S8_UINT_PACK32, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, glm::u32vec4(0)}, //FORMAT_D32_SFLOAT_S8_UINT_PACK64, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_BC1_RGB_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGB_DXT1_UNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_BC1_RGB_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGB_DXT1_SRGB_BLOCK8, - {DDPF_FOURCC, D3DFMT_DXT1, DXGI_FORMAT_BC1_UNORM, glm::u32vec4(0)}, //FORMAT_RGBA_DXT1_UNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_BC1_UNORM_SRGB, glm::u32vec4(0)}, //FORMAT_RGBA_DXT1_SRGB_BLOCK8, - {DDPF_FOURCC, D3DFMT_DXT3, DXGI_FORMAT_BC2_UNORM, glm::u32vec4(0)}, //FORMAT_RGBA_DXT3_UNORM_BLOCK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_BC2_UNORM_SRGB, glm::u32vec4(0)}, //FORMAT_RGBA_DXT3_SRGB_BLOCK16, - {DDPF_FOURCC, D3DFMT_DXT5, DXGI_FORMAT_BC3_UNORM, glm::u32vec4(0)}, //FORMAT_RGBA_DXT5_UNORM_BLOCK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_BC3_UNORM_SRGB, glm::u32vec4(0)}, //FORMAT_RGBA_DXT5_SRGB_BLOCK16, - {DDPF_FOURCC, D3DFMT_ATI1, DXGI_FORMAT_BC4_UNORM, glm::u32vec4(0)}, //FORMAT_R_ATI1N_UNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_AT1N, DXGI_FORMAT_BC4_SNORM, glm::u32vec4(0)}, //FORMAT_R_ATI1N_SNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_ATI2, DXGI_FORMAT_BC5_UNORM, glm::u32vec4(0)}, //FORMAT_RG_ATI2N_UNORM_BLOCK16, - {DDPF_FOURCC, D3DFMT_AT2N, DXGI_FORMAT_BC5_SNORM, glm::u32vec4(0)}, //FORMAT_RG_ATI2N_SNORM_BLOCK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_BC6H_UF16, glm::u32vec4(0)}, //FORMAT_RGB_BP_UFLOAT_BLOCK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_BC6H_SF16, glm::u32vec4(0)}, //FORMAT_RGB_BP_SFLOAT_BLOCK16, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_BC7_UNORM, glm::u32vec4(0)}, //FORMAT_RGB_BP_UNORM, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_BC7_UNORM_SRGB, glm::u32vec4(0)}, //FORMAT_RGB_BP_SRGB, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGB_ETC2_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGB_ETC2_UNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGB_ETC2_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGB_ETC2_SRGB_BLOCK8, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_ETC2_A1_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_ETC2_A1_UNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_ETC2_A1_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_ETC2_A1_SRGB_BLOCK8, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_ETC2_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_ETC2_UNORM_BLOCK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_ETC2_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_ETC2_SRGB_BLOCK16, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R11_EAC_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_R_EAC_UNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R11_EAC_SNORM_GLI, glm::u32vec4(0)}, //FORMAT_R_EAC_SNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RG11_EAC_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RG_EAC_UNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RG11_EAC_SNORM_GLI, glm::u32vec4(0)}, //FORMAT_RG_EAC_SNORM_BLOCK8, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_4X4_UNORM, glm::u32vec4(0)}, //FORMAT_ASTC_4x4_UNORM, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_4X4_UNORM_SRGB, glm::u32vec4(0)}, //FORMAT_ASTC_4x4_SRGB, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_5X4_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_5x4, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_5X4_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_5x4, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_5X5_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_5x5, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_5X5_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_5x5, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_6X5_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_6x5, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_6X5_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_6x5, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_6X6_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_6x6, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_6X6_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_6x6, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_8X5_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_8x5, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_8X5_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_8x5, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_8X6_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_8x6, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_8X6_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_8x6, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_8X8_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_8x8, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_8X8_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_8x8, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_10X5_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_10x5, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_10X5_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_10x5, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_10X6_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_10x6, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_10X6_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_10x6, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_10X8_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_10x8, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_10X8_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_10x8, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_10X10_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_10x10, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_10X10_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_10x10, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_12X10_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_12x10, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_12X10_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_12x10, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_12X12_UNORM, glm::u32vec4(0)}, //RGBA_ASTC_12x12, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_ASTC_12X12_UNORM_SRGB, glm::u32vec4(0)}, //SRGB_ALPHA_ASTC_12x12, - - {DDPF_FOURCC, D3DFMT_POWERVR_4BPP, DXGI_FORMAT_RGB_PVRTC1_8X8_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGB_PVRTC1_8X8_UNORM_BLOCK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGB_PVRTC1_8X8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGB_PVRTC1_8X8_SRGB_BLOCK32, - {DDPF_FOURCC, D3DFMT_POWERVR_2BPP, DXGI_FORMAT_RGB_PVRTC1_16X8_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGB_PVRTC1_16X8_UNORM_BLOCK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGB_PVRTC1_16X8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGB_PVRTC1_16X8_SRGB_BLOCK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_PVRTC1_8X8_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_PVRTC1_8X8_UNORM_BLOCK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_PVRTC1_8X8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_PVRTC1_8X8_SRGB_BLOCK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_PVRTC1_16X8_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_PVRTC1_16X8_UNORM_BLOCK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_PVRTC1_16X8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_PVRTC1_16X8_SRGB_BLOCK32, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_PVRTC2_8X8_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_PVRTC2_8X8_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_PVRTC2_8X8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_PVRTC2_8X8_SRGB, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_PVRTC2_16X8_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_PVRTC2_16X8_UNORM, - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_RGBA_PVRTC2_16X8_SRGB_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_PVRTC2_16X8_SRGB, - - {DDPF_FOURCC, D3DFMT_ETC, DXGI_FORMAT_RGB_ETC_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGB_ETC_UNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_ATC, DXGI_FORMAT_RGB_ATC_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGB_ATC_UNORM_BLOCK8, - {DDPF_FOURCC, D3DFMT_ATCA, DXGI_FORMAT_RGBA_ATCA_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_ATCA_UNORM_BLOCK16, - {DDPF_FOURCC, D3DFMT_ATCI, DXGI_FORMAT_RGBA_ATCI_UNORM_GLI, glm::u32vec4(0)}, //FORMAT_RGBA_ATCI_UNORM_BLOCK16, - - {DDPF_LUMINANCE, D3DFMT_L8, DXGI_FORMAT_L8_UNORM_GLI, glm::u32vec4(0x000000FF, 0x00000000, 0x00000000, 0x00000000)}, //L8_UNORM, - {DDPF_ALPHA, D3DFMT_A8, DXGI_FORMAT_A8_UNORM_GLI, glm::u32vec4(0x00000000, 0x00000000, 0x00000000, 0x000000FF)}, //A8_UNORM, - {DDPF_LUMINANCE_ALPHA, D3DFMT_A8L8, DXGI_FORMAT_LA8_UNORM_GLI, glm::u32vec4(0x000000FF, 0x00000000, 0x00000000, 0x0000FF00)}, //LA8_UNORM, - {DDPF_LUMINANCE, D3DFMT_L16, DXGI_FORMAT_L16_UNORM_GLI, glm::u32vec4(0x0000FFFF, 0x00000000, 0x00000000, 0x00000000)}, //L16_UNORM, - {DDPF_ALPHA, D3DFMT_GLI1, DXGI_FORMAT_A16_UNORM_GLI, glm::u32vec4(0x00000000, 0x00000000, 0x00000000, 0x0000FFFF)}, //A16_UNORM, - {DDPF_LUMINANCE_ALPHA, D3DFMT_GLI1, DXGI_FORMAT_LA16_UNORM_GLI, glm::u32vec4(0x0000FFFF, 0x00000000, 0x00000000, 0xFFFF0000)}, //LA16_UNORM, - - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_B8G8R8X8_UNORM, glm::u32vec4(0x00FF0000, 0x0000FF00, 0x000000FF, 0x00000000)}, //FORMAT_BGR8_UNORM_PACK32, - {DDPF_FOURCC, D3DFMT_DX10, DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, glm::u32vec4(0x00FF0000, 0x0000FF00, 0x000000FF, 0x00000000)}, //FORMAT_BGR8_SRGB_PACK32, - - {DDPF_FOURCC, D3DFMT_GLI1, DXGI_FORMAT_R3G3B2_UNORM_GLI, glm::u32vec4(0x70, 0x38, 0xC0, 0x00)}, //FORMAT_RG3B2_UNORM, - }; - static_assert(sizeof(Table) / sizeof(Table[0]) == FORMAT_COUNT, "GLI error: format descriptor list doesn't match number of supported formats"); - - std::copy(&Table[0], &Table[0] + FORMAT_COUNT, this->Translation.begin()); - } - - inline dx::format const& dx::translate(gli::format Format) const - { - GLI_ASSERT(Format >= FORMAT_FIRST && Format <= FORMAT_LAST); - return Translation[Format - FORMAT_FIRST]; - } - - inline gli::format dx::find(dx::d3dfmt FourCC) const - { - gli::format FormatResult = gli::FORMAT_UNDEFINED; - for(int FormatIndex = FORMAT_FIRST; FormatIndex <= FORMAT_LAST; ++FormatIndex) - { - if(this->Translation[FormatIndex - FORMAT_FIRST].D3DFormat != FourCC) - continue; - - FormatResult = static_cast(FormatIndex); - break; - } - return FormatResult; - } - - inline gli::format dx::find(dx::d3dfmt FourCC, dx::dxgiFormat Format) const - { - GLI_ASSERT(FourCC == D3DFMT_DX10 || FourCC == D3DFMT_GLI1); - - gli::format FormatResult = gli::FORMAT_UNDEFINED; - for(int FormatIndex = FORMAT_FIRST; FormatIndex <= FORMAT_LAST; ++FormatIndex) - { - gli::format CurrentFormat = static_cast(FormatIndex); - detail::formatInfo const & FormatInfo = detail::get_format_info(CurrentFormat); - - dx::format const & DXFormat = this->Translation[FormatIndex - FORMAT_FIRST]; - - if(FourCC == D3DFMT_GLI1 && (FormatInfo.Flags & detail::CAP_DDS_GLI_EXT_BIT) && DXFormat.DXGIFormat.GLI == Format.GLI) - { - FormatResult = static_cast(FormatIndex); - break; - } - - if(FourCC == D3DFMT_DX10 && !(FormatInfo.Flags & detail::CAP_DDS_GLI_EXT_BIT) && DXFormat.DXGIFormat.DDS == Format.DDS) - { - FormatResult = static_cast(FormatIndex); - break; - } - } - return FormatResult; - } - - inline bool is_dds_ext(target Target, format Format) - { - dx DX; - dx::format const & DXFormat = DX.translate(Format); - - bool const UseDDSExt = detail::get_format_info(Format).Flags & detail::CAP_DDS_GLI_EXT_BIT ? true : false; - - return ((DXFormat.DDPixelFormat & dx::DDPF_FOURCC) && DXFormat.D3DFormat == dx::D3DFMT_GLI1) || ((is_target_array(Target) || is_target_1d(Target)) && UseDDSExt); - } -}//namespace gli diff --git a/external/gli/gli/core/file.hpp b/external/gli/gli/core/file.hpp deleted file mode 100644 index b61e7ba9..00000000 --- a/external/gli/gli/core/file.hpp +++ /dev/null @@ -1,15 +0,0 @@ -/// @brief File helper functions -/// @file gli/core/file.hpp - -#pragma once - -#include - -namespace gli{ -namespace detail -{ - FILE* open_file(const char *Filename, const char *mode); -}//namespace detail -}//namespace gli - -#include "./file.inl" diff --git a/external/gli/gli/core/file.inl b/external/gli/gli/core/file.inl deleted file mode 100644 index 018358fa..00000000 --- a/external/gli/gli/core/file.inl +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include - -namespace gli{ -namespace detail -{ - inline FILE* open_file(const char *Filename, const char *Mode) - { -# if GLM_COMPILER & GLM_COMPILER_VC - FILE *File = nullptr; - fopen_s(&File, Filename, Mode); - return File; -# else - return std::fopen(Filename, Mode); -# endif - } -}//namespace detail -}//namespace gli diff --git a/external/gli/gli/core/filter.hpp b/external/gli/gli/core/filter.hpp deleted file mode 100644 index 5176ae98..00000000 --- a/external/gli/gli/core/filter.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @brief Include to use filter enum, to select filtering methods. -/// @file gli/core/filter.hpp - -#pragma once - -namespace gli -{ - /// Texture filtring modes - enum filter - { - FILTER_NONE = 0, - FILTER_NEAREST, FILTER_FIRST = FILTER_NEAREST, - FILTER_LINEAR, FILTER_LAST = FILTER_LINEAR - }; - - enum - { - FILTER_COUNT = FILTER_LAST - FILTER_FIRST + 1, - FILTER_INVALID = -1 - }; -}//namespace gli - -#include "filter.inl" diff --git a/external/gli/gli/core/filter.inl b/external/gli/gli/core/filter.inl deleted file mode 100644 index fd0ab9b0..00000000 --- a/external/gli/gli/core/filter.inl +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -namespace gli{ -namespace detail -{ - -}//namespace detail -}//namespace gli diff --git a/external/gli/gli/core/filter_compute.hpp b/external/gli/gli/core/filter_compute.hpp deleted file mode 100644 index a3956e53..00000000 --- a/external/gli/gli/core/filter_compute.hpp +++ /dev/null @@ -1,390 +0,0 @@ -#pragma once - -#include "filter.hpp" -#include "coord.hpp" -#include - -namespace gli{ -namespace detail -{ - enum dimension - { - DIMENSION_1D, - DIMENSION_2D, - DIMENSION_3D - }; - - template - struct interpolate - { - typedef float type; - }; - - template <> - struct interpolate - { - typedef double type; - }; - - template <> - struct interpolate - { - typedef long double type; - }; - - template - struct filterBase - { - typedef typename texture_type::size_type size_type; - typedef typename texture_type::extent_type extent_type; - - typedef texel_type(*filterFunc)( - texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, - size_type Layer, size_type Face, interpolate_type Level, - texel_type const & BorderColor); - }; - - template - struct nearest : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_nearest coord_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, size_type Level, texel_type const & BorderColor) - { - extent_type const TexelDim(Texture.extent(Level)); - normalized_type const TexelLast(normalized_type(TexelDim) - normalized_type(1)); - - //extent_type const TexelCoord(SampleCoordWrap * TexelLast + interpolate_type(0.5)); - extent_type const TexelCoord = extent_type(round(SampleCoordWrap * TexelLast)); - typename extent_type::bool_type const UseTexelCoord = in_interval(TexelCoord, extent_type(0), TexelDim - 1); - - texel_type Texel(BorderColor); - if(all(UseTexelCoord)) - Texel = Fetch(Texture, TexelCoord, Layer, Face, Level); - - return Texel; - } - }; - - template - struct nearest : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_nearest coord_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, size_type Level, texel_type const & BorderColor) - { - normalized_type const TexelLast(normalized_type(Texture.extent(Level)) - normalized_type(1)); - extent_type const TexelCoord(SampleCoordWrap * TexelLast + interpolate_type(0.5)); - //extent_type const TexelCoord = extent_type(round(SampleCoordWrap * TexelLast)); - - return Fetch(Texture, TexelCoord, Layer, Face, Level); - } - }; - - template - struct linear : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, size_type Level, texel_type const& BorderColor) - { - return texel_type(0); - } - }; - - template - struct linear : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear_border coord_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, size_type Level, texel_type const & BorderColor) - { - coord_type const& Coord = make_coord_linear_border(Texture.extent(Level), SampleCoordWrap); - - texel_type Texel0(BorderColor); - if(Coord.UseTexelFloor.s) - Texel0 = Fetch(Texture, extent_type(Coord.TexelFloor.s), Layer, Face, Level); - - texel_type Texel1(BorderColor); - if(Coord.UseTexelCeil.s) - Texel1 = Fetch(Texture, extent_type(Coord.TexelCeil.s), Layer, Face, Level); - - return mix(Texel0, Texel1, Coord.Blend.s); - } - }; - - template - struct linear : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear coord_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, size_type Level, texel_type const & BorderColor) - { - coord_type const& Coord = make_coord_linear(Texture.extent(Level), SampleCoordWrap); - - texel_type const Texel0 = Fetch(Texture, extent_type(Coord.TexelFloor.s), Layer, Face, Level); - texel_type const Texel1 = Fetch(Texture, extent_type(Coord.TexelCeil.s), Layer, Face, Level); - - return mix(Texel0, Texel1, Coord.Blend.s); - } - }; - - template - struct linear : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear_border coord_type; - - static texel_type call(texture_type const& Texture, fetch_type Fetch, normalized_type const& SampleCoordWrap, size_type Layer, size_type Face, size_type Level, texel_type const& BorderColor) - { - coord_type const& Coord = make_coord_linear_border(Texture.extent(Level), SampleCoordWrap); - - texel_type Texel00(BorderColor); - if(Coord.UseTexelFloor.s && Coord.UseTexelFloor.t) - Texel00 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelFloor.t), Layer, Face, Level); - - texel_type Texel10(BorderColor); - if(Coord.UseTexelCeil.s && Coord.UseTexelFloor.t) - Texel10 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelFloor.t), Layer, Face, Level); - - texel_type Texel11(BorderColor); - if(Coord.UseTexelCeil.s && Coord.UseTexelCeil.t) - Texel11 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelCeil.t), Layer, Face, Level); - - texel_type Texel01(BorderColor); - if(Coord.UseTexelFloor.s && Coord.UseTexelCeil.t) - Texel01 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelCeil.t), Layer, Face, Level); - - texel_type const ValueA(mix(Texel00, Texel10, Coord.Blend.s)); - texel_type const ValueB(mix(Texel01, Texel11, Coord.Blend.s)); - return mix(ValueA, ValueB, Coord.Blend.t); - } - }; - - template - struct linear : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear coord_type; - - static texel_type call(texture_type const& Texture, fetch_type Fetch, normalized_type const& SampleCoordWrap, size_type Layer, size_type Face, size_type Level, texel_type const& BorderColor) - { - coord_type const& Coord = make_coord_linear(Texture.extent(Level), SampleCoordWrap); - - texel_type const& Texel00 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelFloor.t), Layer, Face, Level); - texel_type const& Texel10 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelFloor.t), Layer, Face, Level); - texel_type const& Texel11 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelCeil.t), Layer, Face, Level); - texel_type const& Texel01 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelCeil.t), Layer, Face, Level); - - texel_type const ValueA(mix(Texel00, Texel10, Coord.Blend.s)); - texel_type const ValueB(mix(Texel01, Texel11, Coord.Blend.s)); - return mix(ValueA, ValueB, Coord.Blend.t); - } - }; - - template - struct linear : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear_border coord_type; - - static texel_type call(texture_type const& Texture, fetch_type Fetch, normalized_type const& SampleCoordWrap, size_type Layer, size_type Face, size_type Level, texel_type const& BorderColor) - { - coord_type const& Coord = make_coord_linear_border(Texture.extent(Level), SampleCoordWrap); - - texel_type Texel000(BorderColor); - if(Coord.UseTexelFloor.s && Coord.UseTexelFloor.t && Coord.UseTexelFloor.p) - Texel000 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelFloor.t, Coord.TexelFloor.p), Layer, Face, Level); - - texel_type Texel100(BorderColor); - if(Coord.UseTexelCeil.s && Coord.UseTexelFloor.t && Coord.UseTexelFloor.p) - Texel100 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelFloor.t, Coord.TexelFloor.p), Layer, Face, Level); - - texel_type Texel110(BorderColor); - if(Coord.UseTexelCeil.s && Coord.UseTexelCeil.t && Coord.UseTexelFloor.p) - Texel110 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelCeil.t, Coord.TexelFloor.p), Layer, Face, Level); - - texel_type Texel010(BorderColor); - if(Coord.UseTexelFloor.s && Coord.UseTexelCeil.t && Coord.UseTexelFloor.p) - Texel010 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelCeil.t, Coord.TexelFloor.p), Layer, Face, Level); - - texel_type Texel001(BorderColor); - if (Coord.UseTexelFloor.s && Coord.UseTexelFloor.t && Coord.UseTexelCeil.p) - Texel001 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelFloor.t, Coord.TexelCeil.p), Layer, Face, Level); - - texel_type Texel101(BorderColor); - if(Coord.UseTexelCeil.s && Coord.UseTexelFloor.t && Coord.UseTexelCeil.p) - Texel101 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelFloor.t, Coord.TexelCeil.p), Layer, Face, Level); - - texel_type Texel111(BorderColor); - if(Coord.UseTexelCeil.s && Coord.UseTexelCeil.t && Coord.UseTexelCeil.p) - Texel111 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelCeil.t, Coord.TexelCeil.p), Layer, Face, Level); - - texel_type Texel011(BorderColor); - if(Coord.UseTexelFloor.s && Coord.UseTexelCeil.t && Coord.UseTexelCeil.p) - Texel011 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelCeil.t, Coord.TexelCeil.p), Layer, Face, Level); - - texel_type const ValueA(mix(Texel000, Texel100, Coord.Blend.s)); - texel_type const ValueB(mix(Texel010, Texel110, Coord.Blend.s)); - - texel_type const ValueC(mix(Texel001, Texel101, Coord.Blend.s)); - texel_type const ValueD(mix(Texel011, Texel111, Coord.Blend.s)); - - texel_type const ValueE(mix(ValueA, ValueB, Coord.Blend.t)); - texel_type const ValueF(mix(ValueC, ValueD, Coord.Blend.t)); - - return mix(ValueE, ValueF, Coord.Blend.p); - } - }; - - template - struct linear : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear coord_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, size_type Level, texel_type const & BorderColor) - { - coord_type const & Coord = make_coord_linear(Texture.extent(Level), SampleCoordWrap); - - texel_type const & Texel000 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelFloor.t, Coord.TexelFloor.p), Layer, Face, Level); - texel_type const & Texel100 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelFloor.t, Coord.TexelFloor.p), Layer, Face, Level); - texel_type const & Texel110 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelCeil.t, Coord.TexelFloor.p), Layer, Face, Level); - texel_type const & Texel010 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelCeil.t, Coord.TexelFloor.p), Layer, Face, Level); - texel_type const & Texel001 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelFloor.t, Coord.TexelCeil.p), Layer, Face, Level); - texel_type const & Texel101 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelFloor.t, Coord.TexelCeil.p), Layer, Face, Level); - texel_type const & Texel111 = Fetch(Texture, extent_type(Coord.TexelCeil.s, Coord.TexelCeil.t, Coord.TexelCeil.p), Layer, Face, Level); - texel_type const & Texel011 = Fetch(Texture, extent_type(Coord.TexelFloor.s, Coord.TexelCeil.t, Coord.TexelCeil.p), Layer, Face, Level); - - texel_type const ValueA(mix(Texel000, Texel100, Coord.Blend.s)); - texel_type const ValueB(mix(Texel010, Texel110, Coord.Blend.s)); - - texel_type const ValueC(mix(Texel001, Texel101, Coord.Blend.s)); - texel_type const ValueD(mix(Texel011, Texel111, Coord.Blend.s)); - - texel_type const ValueE(mix(ValueA, ValueB, Coord.Blend.t)); - texel_type const ValueF(mix(ValueC, ValueD, Coord.Blend.t)); - - return mix(ValueE, ValueF, Coord.Blend.p); - } - }; - - template - struct nearest_mipmap_nearest : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear_border coord_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, interpolate_type Level, texel_type const & BorderColor) - { - return nearest::call(Texture, Fetch, SampleCoordWrap, Layer, Face, glm::iround(Level), BorderColor); - } - }; - - template - struct nearest_mipmap_linear : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear_border coord_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, interpolate_type Level, texel_type const & BorderColor) - { - texel_type const MinTexel = nearest::call(Texture, Fetch, SampleCoordWrap, Layer, Face, static_cast(floor(Level)), BorderColor); - texel_type const MaxTexel = nearest::call(Texture, Fetch, SampleCoordWrap, Layer, Face, static_cast(ceil(Level)), BorderColor); - return mix(MinTexel, MaxTexel, fract(Level)); - } - }; - - template - struct linear_mipmap_nearest : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear_border coord_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, interpolate_type Level, texel_type const & BorderColor) - { - return linear::call(Texture, Fetch, SampleCoordWrap, Layer, Face, glm::iround(Level), BorderColor); - } - }; - - template - struct linear_mipmap_linear : public filterBase - { - typedef filterBase base_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::extent_type extent_type; - typedef coord_linear_border coord_type; - - static texel_type call(texture_type const & Texture, fetch_type Fetch, normalized_type const & SampleCoordWrap, size_type Layer, size_type Face, interpolate_type Level, texel_type const & BorderColor) - { - size_type const FloorLevel = static_cast(floor(Level)); - size_type const CeilLevel = static_cast(ceil(Level)); - texel_type const MinTexel = linear::call(Texture, Fetch, SampleCoordWrap, Layer, Face, FloorLevel, BorderColor); - texel_type const MaxTexel = linear::call(Texture, Fetch, SampleCoordWrap, Layer, Face, CeilLevel, BorderColor); - return mix(MinTexel, MaxTexel, fract(Level)); - } - }; - - template - inline filter_type get_filter(filter Mip, filter Min, bool Border) - { - static filter_type Table[][FILTER_COUNT][2] = - { - { - { - nearest_mipmap_nearest::is_iec559, false>::call, - nearest_mipmap_nearest::is_iec559, true>::call - }, - { - linear_mipmap_nearest::is_iec559, false>::call, - linear_mipmap_nearest::is_iec559, true>::call - } - }, - { - { - nearest_mipmap_linear::is_iec559, false>::call, - nearest_mipmap_linear::is_iec559, true>::call - }, - { - linear_mipmap_linear::is_iec559, false>::call, - linear_mipmap_linear::is_iec559, true>::call - } - } - }; - static_assert(sizeof(Table) / sizeof(Table[0]) == FILTER_COUNT, "GLI ERROR: 'Table' doesn't match the number of supported filters"); - - GLI_ASSERT(Table[Mip - FILTER_FIRST][Min - FILTER_FIRST][Border ? 1 : 0]); - - return Table[Mip - FILTER_FIRST][Min - FILTER_FIRST][Border ? 1 : 0]; - } -}//namespace detail -}//namespace gli - diff --git a/external/gli/gli/core/flip.hpp b/external/gli/gli/core/flip.hpp deleted file mode 100644 index f2885425..00000000 --- a/external/gli/gli/core/flip.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include - -#include "../texture2d.hpp" -#include "../texture2d_array.hpp" -#include "../texture_cube.hpp" -#include "../texture_cube_array.hpp" - -namespace gli -{ - template - texture flip(texture const & Texture); - -}//namespace gli - -#include "flip.inl" diff --git a/external/gli/gli/core/flip.inl b/external/gli/gli/core/flip.inl deleted file mode 100644 index 580b6c43..00000000 --- a/external/gli/gli/core/flip.inl +++ /dev/null @@ -1,298 +0,0 @@ -#include "./s3tc.hpp" - -namespace gli{ -namespace detail -{ - inline void flip(image ImageDst, image ImageSrc, size_t BlockSize) - { - size_t const LineSize = BlockSize * ImageDst.extent().x; - - for(int y = 0; y < ImageDst.extent().y; ++y) - { - size_t OffsetDst = LineSize * y; - size_t OffsetSrc = ImageSrc.size() - (LineSize * (y + 1)); - - memcpy( - ImageDst.data() + OffsetDst, - ImageSrc.data() + OffsetSrc, - LineSize); - } - } - - inline void flip_block_s3tc(uint8* BlockDst, uint8* BlockSrc, format Format, bool HeightTwo) - { - // There is no distinction between RGB and RGBA in DXT-compressed textures, - // it is used only to tell OpenGL how to interpret the data. - // Moreover, in DXT1 (which does not contain an alpha channel), transparency can be emulated - // using Color0 and Color1 on a per-compression-block basis. - // There is no difference in how textures with and without transparency are laid out in the file, - // so they can be flipped using the same method. - if(Format == FORMAT_RGB_DXT1_UNORM_BLOCK8 || Format == FORMAT_RGB_DXT1_SRGB_BLOCK8 - || Format == FORMAT_RGBA_DXT1_UNORM_BLOCK8 || Format == FORMAT_RGBA_DXT1_SRGB_BLOCK8) - { - dxt1_block* Src = reinterpret_cast(BlockSrc); - dxt1_block* Dst = reinterpret_cast(BlockDst); - - if(HeightTwo) - { - Dst->Color0 = Src->Color0; - Dst->Color1 = Src->Color1; - Dst->Row[0] = Src->Row[1]; - Dst->Row[1] = Src->Row[0]; - Dst->Row[2] = Src->Row[2]; - Dst->Row[3] = Src->Row[3]; - - return; - } - - Dst->Color0 = Src->Color0; - Dst->Color1 = Src->Color1; - Dst->Row[0] = Src->Row[3]; - Dst->Row[1] = Src->Row[2]; - Dst->Row[2] = Src->Row[1]; - Dst->Row[3] = Src->Row[0]; - - return; - } - - // DXT3 - if(Format == FORMAT_RGBA_DXT3_UNORM_BLOCK16 || Format == FORMAT_RGBA_DXT3_SRGB_BLOCK16) - { - dxt3_block* Src = reinterpret_cast(BlockSrc); - dxt3_block* Dst = reinterpret_cast(BlockDst); - - if(HeightTwo) - { - Dst->AlphaRow[0] = Src->AlphaRow[1]; - Dst->AlphaRow[1] = Src->AlphaRow[0]; - Dst->AlphaRow[2] = Src->AlphaRow[2]; - Dst->AlphaRow[3] = Src->AlphaRow[3]; - Dst->Color0 = Src->Color0; - Dst->Color1 = Src->Color1; - Dst->Row[0] = Src->Row[1]; - Dst->Row[1] = Src->Row[0]; - Dst->Row[2] = Src->Row[2]; - Dst->Row[3] = Src->Row[3]; - - return; - } - - Dst->AlphaRow[0] = Src->AlphaRow[3]; - Dst->AlphaRow[1] = Src->AlphaRow[2]; - Dst->AlphaRow[2] = Src->AlphaRow[1]; - Dst->AlphaRow[3] = Src->AlphaRow[0]; - Dst->Color0 = Src->Color0; - Dst->Color1 = Src->Color1; - Dst->Row[0] = Src->Row[3]; - Dst->Row[1] = Src->Row[2]; - Dst->Row[2] = Src->Row[1]; - Dst->Row[3] = Src->Row[0]; - - return; - } - - // DXT5 - if(Format == FORMAT_RGBA_DXT5_UNORM_BLOCK16 || Format == FORMAT_RGBA_DXT5_SRGB_BLOCK16) - { - dxt5_block* Src = reinterpret_cast(BlockSrc); - dxt5_block* Dst = reinterpret_cast(BlockDst); - - if(HeightTwo) - { - Dst->Alpha[0] = Src->Alpha[0]; - Dst->Alpha[1] = Src->Alpha[1]; - // operator+ has precedence over operator>> and operator<<, hence the parentheses. very important! - // the values below are bitmasks used to retrieve alpha values according to the DXT specification - // 0xF0 == 0b11110000 and 0xF == 0b1111 - Dst->AlphaBitmap[0] = ((Src->AlphaBitmap[1] & 0xF0) >> 4) + ((Src->AlphaBitmap[2] & 0xF) << 4); - Dst->AlphaBitmap[1] = ((Src->AlphaBitmap[2] & 0xF0) >> 4) + ((Src->AlphaBitmap[0] & 0xF) << 4); - Dst->AlphaBitmap[2] = ((Src->AlphaBitmap[0] & 0xF0) >> 4) + ((Src->AlphaBitmap[1] & 0xF) << 4); - Dst->AlphaBitmap[3] = Src->AlphaBitmap[3]; - Dst->AlphaBitmap[4] = Src->AlphaBitmap[4]; - Dst->AlphaBitmap[5] = Src->AlphaBitmap[5]; - Dst->Color0 = Src->Color0; - Dst->Color1 = Src->Color1; - Dst->Row[0] = Src->Row[1]; - Dst->Row[1] = Src->Row[0]; - Dst->Row[2] = Src->Row[2]; - Dst->Row[3] = Src->Row[3]; - - return; - } - - Dst->Alpha[0] = Src->Alpha[0]; - Dst->Alpha[1] = Src->Alpha[1]; - // operator+ has precedence over operator>> and operator<<, hence the parentheses. very important! - // the values below are bitmasks used to retrieve alpha values according to the DXT specification - // 0xF0 == 0b11110000 and 0xF == 0b1111 - Dst->AlphaBitmap[0] = ((Src->AlphaBitmap[4] & 0xF0) >> 4) + ((Src->AlphaBitmap[5] & 0xF) << 4); - Dst->AlphaBitmap[1] = ((Src->AlphaBitmap[5] & 0xF0) >> 4) + ((Src->AlphaBitmap[3] & 0xF) << 4); - Dst->AlphaBitmap[2] = ((Src->AlphaBitmap[3] & 0xF0) >> 4) + ((Src->AlphaBitmap[4] & 0xF) << 4); - Dst->AlphaBitmap[3] = ((Src->AlphaBitmap[1] & 0xF0) >> 4) + ((Src->AlphaBitmap[2] & 0xF) << 4); - Dst->AlphaBitmap[4] = ((Src->AlphaBitmap[2] & 0xF0) >> 4) + ((Src->AlphaBitmap[0] & 0xF) << 4); - Dst->AlphaBitmap[5] = ((Src->AlphaBitmap[0] & 0xF0) >> 4) + ((Src->AlphaBitmap[1] & 0xF) << 4); - Dst->Color0 = Src->Color0; - Dst->Color1 = Src->Color1; - Dst->Row[0] = Src->Row[3]; - Dst->Row[1] = Src->Row[2]; - Dst->Row[2] = Src->Row[1]; - Dst->Row[3] = Src->Row[0]; - - return; - } - - // invalid format specified (unknown S3TC format?) - assert(false); - } - - inline void flip_s3tc(image ImageDst, image ImageSrc, format Format) - { - if(ImageSrc.extent().y == 1) - { - memcpy(ImageDst.data(), - ImageSrc.data(), - ImageSrc.size()); - return; - } - - std::size_t const XBlocks = ImageSrc.extent().x <= 4 ? 1 : ImageSrc.extent().x / 4; - if(ImageSrc.extent().y == 2) - { - for(std::size_t i_block = 0; i_block < XBlocks; ++i_block) - flip_block_s3tc(ImageDst.data() + i_block * block_size(Format), ImageSrc.data() + i_block * block_size(Format), Format, true); - - return; - } - - std::size_t const MaxYBlock = ImageSrc.extent().y / 4 - 1; - for(std::size_t i_row = 0; i_row <= MaxYBlock; ++i_row) - for(std::size_t i_block = 0; i_block < XBlocks; ++i_block) - flip_block_s3tc(ImageDst.data() + (MaxYBlock - i_row) * block_size(Format) * XBlocks + i_block * block_size(Format), ImageSrc.data() + i_row * block_size(Format) * XBlocks + i_block * block_size(Format), Format, false); - } - -}//namespace detail - -/* -template <> -inline image flip(image const & Image) -{ - -} -*/ - -template <> -inline texture2d flip(texture2d const& Texture) -{ - GLI_ASSERT(!gli::is_compressed(Texture.format()) || gli::is_s3tc_compressed(Texture.format())); - - texture2d Flip(Texture.format(), Texture.extent(), Texture.levels()); - - if(!is_compressed(Texture.format())) - { - texture2d::size_type const BlockSize = block_size(Texture.format()); - - for(texture2d::size_type Level = 0; Level < Flip.levels(); ++Level) - detail::flip(Flip[Level], Texture[Level], BlockSize); - } - else - for(texture2d::size_type Level = 0; Level < Flip.levels(); ++Level) - detail::flip_s3tc(Flip[Level], Texture[Level], Texture.format()); - - return Flip; -} - -template <> -inline texture2d_array flip(texture2d_array const& Texture) -{ - GLI_ASSERT(!gli::is_compressed(Texture.format()) || gli::is_s3tc_compressed(Texture.format())); - - texture2d_array Flip(Texture.format(), Texture.extent(), Texture.layers(), Texture.levels()); - - if(!gli::is_compressed(Texture.format())) - { - texture2d_array::size_type const BlockSize = block_size(Texture.format()); - - for(texture2d_array::size_type Layer = 0; Layer < Flip.layers(); ++Layer) - for(texture2d_array::size_type Level = 0; Level < Flip.levels(); ++Level) - detail::flip(Flip[Layer][Level], Texture[Layer][Level], BlockSize); - } - else - for(texture2d_array::size_type Layer = 0; Layer < Flip.layers(); ++Layer) - for(texture2d_array::size_type Level = 0; Level < Flip.levels(); ++Level) - detail::flip_s3tc(Flip[Layer][Level], Texture[Layer][Level], Texture.format()); - - return Flip; -} - -template <> -inline texture_cube flip(texture_cube const & Texture) -{ - GLI_ASSERT(!gli::is_compressed(Texture.format()) || gli::is_s3tc_compressed(Texture.format())); - - texture_cube Flip(Texture.format(), Texture.extent(), Texture.levels()); - - if(!gli::is_compressed(Texture.format())) - { - texture_cube::size_type const BlockSize = block_size(Texture.format()); - - for(texture_cube::size_type Face = 0; Face < Flip.faces(); ++Face) - for(texture_cube::size_type Level = 0; Level < Flip.levels(); ++Level) - detail::flip(Flip[Face][Level], Texture[Face][Level], BlockSize); - } - else - for(texture_cube::size_type Face = 0; Face < Flip.faces(); ++Face) - for(texture_cube::size_type Level = 0; Level < Flip.levels(); ++Level) - detail::flip_s3tc(Flip[Face][Level], Texture[Face][Level], Texture.format()); - - return Flip; -} - -template <> -inline texture_cube_array flip(texture_cube_array const & Texture) -{ - assert(!is_compressed(Texture.format()) || is_s3tc_compressed(Texture.format())); - - texture_cube_array Flip(Texture.format(), Texture.extent(), Texture.layers(), Texture.levels()); - - if(!is_compressed(Texture.format())) - { - gli::size_t const BlockSize = block_size(Texture.format()); - - for(std::size_t Layer = 0; Layer < Flip.layers(); ++Layer) - for(std::size_t Face = 0; Face < Flip.faces(); ++Face) - for(std::size_t Level = 0; Level < Flip.levels(); ++Level) - detail::flip(Flip[Layer][Face][Level], Texture[Layer][Face][Level], BlockSize); - } - else - for(std::size_t Layer = 0; Layer < Flip.layers(); ++Layer) - for(std::size_t Face = 0; Face < Flip.faces(); ++Face) - for(std::size_t Level = 0; Level < Flip.levels(); ++Level) - detail::flip_s3tc(Flip[Layer][Face][Level], Texture[Layer][Face][Level], Texture.format()); - - return Flip; -} - -template <> -inline texture flip(texture const & Texture) -{ - switch(Texture.target()) - { - case TARGET_2D: - return flip(texture2d(Texture)); - - case TARGET_2D_ARRAY: - return flip(texture2d_array(Texture)); - - case TARGET_CUBE: - return flip(texture_cube(Texture)); - - case TARGET_CUBE_ARRAY: - return flip(texture_cube_array(Texture)); - - default: - assert(false && "Texture target does not support flipping."); - return Texture; - } -} - -}//namespace gli diff --git a/external/gli/gli/core/format.inl b/external/gli/gli/core/format.inl deleted file mode 100644 index 180bf4f7..00000000 --- a/external/gli/gli/core/format.inl +++ /dev/null @@ -1,398 +0,0 @@ -namespace gli{ -namespace detail -{ - enum - { - CAP_COMPRESSED_BIT = (1 << 0), - CAP_COLORSPACE_SRGB_BIT = (1 << 1), - CAP_NORMALIZED_BIT = (1 << 2), - CAP_SCALED_BIT = (1 << 3), - CAP_UNSIGNED_BIT = (1 << 4), - CAP_SIGNED_BIT = (1 << 5), - CAP_INTEGER_BIT = (1 << 6), - CAP_FLOAT_BIT = (1 << 7), - CAP_DEPTH_BIT = (1 << 8), - CAP_STENCIL_BIT = (1 << 9), - CAP_SWIZZLE_BIT = (1 << 10), - CAP_LUMINANCE_ALPHA_BIT = (1 << 11), - CAP_PACKED8_BIT = (1 << 12), - CAP_PACKED16_BIT = (1 << 13), - CAP_PACKED32_BIT = (1 << 14), - CAP_DDS_GLI_EXT_BIT = (1 << 15), - CAP_DECODER_BIT = (1 << 16) - }; - - struct formatInfo - { - glm::uint8 BlockSize; - glm::u8vec3 BlockExtent; - glm::uint8 Component; - swizzles Swizzles; - glm::uint32 Flags; - }; - - inline formatInfo const & get_format_info(format Format) - { - GLI_ASSERT(Format >= FORMAT_FIRST && Format <= FORMAT_LAST); - - static formatInfo const Table[] = - { - { 1, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_PACKED8_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R4G4_UNORM, - { 2, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_PACKED16_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA4_UNORM, - { 2, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_PACKED16_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_BGRA4_UNORM, - { 2, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_PACKED16_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R5G6B5_UNORM, - { 2, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_PACKED16_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_B5G6R5_UNORM, - { 2, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_PACKED16_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB5A1_UNORM, - { 2, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_PACKED16_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_BGR5A1_UNORM, - { 2, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_ALPHA, SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE), CAP_PACKED16_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_A1RGB5_UNORM, - - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_R8_UNORM, - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT}, //FORMAT_R8_SNORM, - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R8_USCALED, - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R8_SSCALED, - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_R8_UINT, - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_R8_SINT, - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R8_SRGB, - - { 2, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RG8_UNORM, - { 2, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT}, //FORMAT_RG8_SNORM, - { 2, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG8_USCALED, - { 2, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG8_SSCALED, - { 2, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RG8_UINT, - { 2, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_RG8_SINT, - { 2, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG8_SRGB, - - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB8_UNORM, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB8_SNORM, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB8_USCALED, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB8_SSCALED, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB8_UINT, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB8_SINT, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB8_SRGB, - - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR8_UNORM, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR8_SNORM, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR8_USCALED, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR8_SSCALED, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR8_UINT, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR8_SINT, - { 3, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR8_SRGB, - - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA8_UNORM, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT}, //FORMAT_RGBA8_SNORM, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA8_USCALED, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA8_SSCALED, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA8_UINT, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_RGBA8_SINT, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_COLORSPACE_SRGB_BIT}, //FORMAT_RGBA8_SRGB, - - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT}, //FORMAT_BGRA8_UNORM, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGRA8_SNORM, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGRA8_USCALED, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGRA8_SSCALED, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGRA8_UINT, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGRA8_SINT, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_SWIZZLE_BIT}, //FORMAT_BGRA8_SRGB, - - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA8_UNORM_PACK32, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_SWIZZLE_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA8_SNORM_PACK32, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA8_USCALED_PACK32, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_SWIZZLE_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA8_SSCALED_PACK32, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA8_UINT_PACK32, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_SWIZZLE_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA8_SINT_PACK32, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_SWIZZLE_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA8_SRGB_PACK32, - - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_PACKED32_BIT}, //FORMAT_RGB10A2_UNORM, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB10A2_SNORM, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB10A2_USCALE, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB10A2_SSCALE, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_PACKED32_BIT}, //FORMAT_RGB10A2_UINT, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_PACKED32_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB10A2_SINT, - - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_PACKED32_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR10A2_UNORM, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_PACKED32_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR10A2_SNORM, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_PACKED32_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR10A2_USCALE, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_PACKED32_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR10A2_SSCALE, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_PACKED32_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR10A2_UINT, - { 4, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_PACKED32_BIT | CAP_SWIZZLE_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_BGR10A2_SINT, - - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_R16_UNORM_PACK16, - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT}, //FORMAT_R16_SNORM_PACK16, - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R16_USCALE, - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R16_SSCALE, - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_R16_UINT_PACK16, - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_R16_SINT_PACK16, - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_FLOAT_BIT | CAP_SIGNED_BIT}, //FORMAT_R16_SFLOAT_PACK16, - - { 4, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RG16_UNORM_PACK16, - { 4, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT}, //FORMAT_RG16_SNORM_PACK16, - { 4, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG16_USCALE, - { 4, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG16_SSCALE, - { 4, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RG16_UINT_PACK16, - { 4, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_RG16_SINT_PACK16, - { 4, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_FLOAT_BIT | CAP_SIGNED_BIT}, //FORMAT_RG16_SFLOAT_PACK16, - - { 6, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB16_UNORM_PACK16, - { 6, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB16_SNORM_PACK16, - { 6, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB16_USCALE, - { 6, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB16_SSCALE, - { 6, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB16_UINT_PACK16, - { 6, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB16_SINT_PACK16, - { 6, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_FLOAT_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB16_SFLOAT_PACK16, - - { 8, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA16_UNORM_PACK16, - { 8, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_NORMALIZED_BIT | CAP_SIGNED_BIT}, //FORMAT_RGBA16_SNORM_PACK16, - { 8, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA16_USCALE, - { 8, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_SCALED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA16_SSCALE, - { 8, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA16_UINT_PACK16, - { 8, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_RGBA16_SINT_PACK16, - { 8, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_FLOAT_BIT | CAP_SIGNED_BIT}, //FORMAT_RGBA16_SFLOAT_PACK16, - - { 4, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_R32_UINT_PACK32, - { 4, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_R32_SINT_PACK32, - { 4, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_FLOAT_BIT | CAP_SIGNED_BIT}, //FORMAT_R32_SFLOAT_PACK32, - - { 8, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RG32_UINT_PACK32, - { 8, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_RG32_SINT_PACK32, - { 8, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_FLOAT_BIT | CAP_SIGNED_BIT}, //FORMAT_RG32_SFLOAT_PACK32, - - { 12, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGB32_UINT_PACK32, - { 12, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_RGB32_SINT_PACK32, - { 12, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_FLOAT_BIT | CAP_SIGNED_BIT}, //FORMAT_RGB32_SFLOAT_PACK32, - - { 16, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA32_UINT_PACK32, - { 16, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_SIGNED_BIT}, //FORMAT_RGBA32_SINT_PACK32, - { 16, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_FLOAT_BIT | CAP_SIGNED_BIT}, //FORMAT_RGBA32_SFLOAT_PACK32, - - { 8, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R64_UINT_PACK64, - { 8, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R64_SINT_PACK64, - { 8, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_FLOAT_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R64_SFLOAT_PACK64, - - { 16, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG64_UINT_PACK64, - { 16, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG64_SINT_PACK64, - { 16, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_FLOAT_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG64_SFLOAT_PACK64, - - { 24, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB64_UINT_PACK64, - { 24, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB64_SINT_PACK64, - { 24, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_FLOAT_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB64_SFLOAT_PACK64, - - { 32, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA64_UINT_PACK64, - { 32, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_INTEGER_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA64_SINT_PACK64, - { 32, glm::u8vec3(1, 1, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_FLOAT_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA64_SFLOAT_PACK64, - - { 4, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_PACKED32_BIT | CAP_FLOAT_BIT | CAP_SIGNED_BIT}, //FORMAT_RG11B10_UFLOAT_PACK32, - { 4, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_PACKED32_BIT | CAP_FLOAT_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGB9E5_UFLOAT_PACK32, - - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_DEPTH_BIT | CAP_INTEGER_BIT}, //FORMAT_D16_UNORM_PACK16, - { 4, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_DEPTH_BIT | CAP_INTEGER_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_D24_UNORM_PACK32, - { 4, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_DEPTH_BIT | CAP_FLOAT_BIT}, //FORMAT_D32_UFLOAT_PACK32, - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_DEPTH_BIT | CAP_STENCIL_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_S8_UNORM_PACK8, - { 3, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_DEPTH_BIT | CAP_INTEGER_BIT | CAP_STENCIL_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_D16_UNORM_S8_UINT_PACK32, - { 4, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_DEPTH_BIT | CAP_INTEGER_BIT | CAP_STENCIL_BIT}, //FORMAT_D24_UNORM_S8_UINT_PACK32, - { 5, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_DEPTH_BIT | CAP_FLOAT_BIT | CAP_STENCIL_BIT}, //FORMAT_D32_SFLOAT_S8_UINT_PACK64, - - { 8, glm::u8vec3(4, 4, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_DXT1_UNORM_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_DXT1_SRGB_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_DXT1_UNORM_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_DXT1_SRGB_BLOCK8, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_DXT3_UNORM_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_DXT3_SRGB_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_DXT5_UNORM_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_DXT5_SRGB_BLOCK16, - { 8, glm::u8vec3(4, 4, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_R_ATI1N_UNORM_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_NORMALIZED_BIT | CAP_SIGNED_BIT}, //FORMAT_R_ATI1N_SNORM_BLOCK8, - { 16, glm::u8vec3(4, 4, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RG_ATI2N_UNORM_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_DECODER_BIT | CAP_NORMALIZED_BIT | CAP_SIGNED_BIT}, //FORMAT_RG_ATI2N_SNORM_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_FLOAT_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGB_BP_UFLOAT_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_FLOAT_BIT | CAP_SIGNED_BIT}, //FORMAT_RGB_BP_SFLOAT_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_BP_UNORM_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_BP_SRGB_BLOCK16, - - { 8, glm::u8vec3(4, 4, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_ETC2_UNORM_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_ETC2_SRGB_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_ETC2_UNORM_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_ETC2_SRGB_BLOCK8, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_ETC2_UNORM_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_ETC2_SRGB_BLOCK16, - { 8, glm::u8vec3(4, 4, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R_EAC_UNORM_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_R_EAC_SNORM_BLOCK8, - { 16, glm::u8vec3(4, 4, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG_EAC_UNORM_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_ZERO, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_SIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG_EAC_SNORM_BLOCK16, - - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_4X4_UNORM_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_4X4_SRGB_BLOCK16, - { 16, glm::u8vec3(5, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_5X4_UNORM_BLOCK16, - { 16, glm::u8vec3(5, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_5X4_SRGB_BLOCK16, - { 16, glm::u8vec3(5, 5, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_5X5_UNORM_BLOCK16, - { 16, glm::u8vec3(5, 5, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_5X5_SRGB_BLOCK16, - { 16, glm::u8vec3(6, 5, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_6X5_UNORM_BLOCK16, - { 16, glm::u8vec3(6, 5, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_6X5_SRGB_BLOCK16, - { 16, glm::u8vec3(6, 6, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_6X6_UNORM_BLOCK16, - { 16, glm::u8vec3(6, 6, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_6X6_SRGB_BLOCK16, - { 16, glm::u8vec3(8, 5, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_8X5_UNORM_BLOCK16, - { 16, glm::u8vec3(8, 5, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_8X5_SRGB_BLOCK16, - { 16, glm::u8vec3(8, 6, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_8X6_UNORM_BLOCK16, - { 16, glm::u8vec3(8, 6, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_8X6_SRGB_BLOCK16, - { 16, glm::u8vec3(8, 8, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_8X8_UNORM_BLOCK16, - { 16, glm::u8vec3(8, 8, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_8X8_SRGB_BLOCK16, - { 16, glm::u8vec3(10, 5, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_10X5_UNORM_BLOCK16, - { 16, glm::u8vec3(10, 5, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_10X5_SRGB_BLOCK16, - { 16, glm::u8vec3(10, 6, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_10X6_UNORM_BLOCK16, - { 16, glm::u8vec3(10, 6, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_10X6_SRGB_BLOCK16, - { 16, glm::u8vec3(10, 8, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_10X8_UNORM_BLOCK16, - { 16, glm::u8vec3(10, 8, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_10X8_SRGB_BLOCK16, - { 16, glm::u8vec3(10, 10, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_10X10_UNORM_BLOCK16, - { 16, glm::u8vec3(10, 10, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_10X10_SRGB_BLOCK16, - { 16, glm::u8vec3(12, 10, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_12X10_UNORM_BLOCK16, - { 16, glm::u8vec3(12, 10, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_12X10_SRGB_BLOCK16, - { 16, glm::u8vec3(12, 12, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_12X12_UNORM_BLOCK16, - { 16, glm::u8vec3(12, 12, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT}, //FORMAT_RGBA_ASTC_12X12_SRGB_BLOCK16, - - { 32, glm::u8vec3(8, 8, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_PVRTC1_8X8_UNORM_BLOCK32, - { 32, glm::u8vec3(8, 8, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_PVRTC1_8X8_SRGB_BLOCK32, - { 32, glm::u8vec3(16, 8, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_PVRTC1_16X8_UNORM_BLOCK32, - { 32, glm::u8vec3(16, 8, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_PVRTC1_16X8_SRGB_BLOCK32, - { 32, glm::u8vec3(8, 8, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_PVRTC1_8X8_UNORM_BLOCK32, - { 32, glm::u8vec3(8, 8, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_PVRTC1_8X8_SRGB_BLOCK32, - { 32, glm::u8vec3(16, 8, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_PVRTC1_16X8_UNORM_BLOCK32, - { 32, glm::u8vec3(16, 8, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_PVRTC1_16X8_SRGB_BLOCK32, - { 8, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_PVRTC2_4X4_UNORM_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_PVRTC2_4X4_SRGB_BLOCK8, - { 8, glm::u8vec3(8, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_PVRTC2_8X4_UNORM_BLOCK8, - { 8, glm::u8vec3(8, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_COLORSPACE_SRGB_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_PVRTC2_8X4_SRGB_BLOCK8, - - { 8, glm::u8vec3(4, 4, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_ETC_UNORM_BLOCK8, - { 8, glm::u8vec3(4, 4, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGB_ATC_UNORM_BLOCK8, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_ATCA_UNORM_BLOCK16, - { 16, glm::u8vec3(4, 4, 1), 4, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA), CAP_COMPRESSED_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RGBA_ATCI_UNORM_BLOCK16, - - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_RED, SWIZZLE_RED, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_LUMINANCE_ALPHA_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_L8_UNORM_PACK8, - { 1, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_RED), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_LUMINANCE_ALPHA_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_A8_UNORM_PACK8, - { 2, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_RED, SWIZZLE_RED, SWIZZLE_GREEN), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_LUMINANCE_ALPHA_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_LA8_UNORM_PACK8, - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_RED, SWIZZLE_RED, SWIZZLE_RED, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_LUMINANCE_ALPHA_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_L16_UNORM_PACK16, - { 2, glm::u8vec3(1, 1, 1), 1, swizzles(SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_RED), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_LUMINANCE_ALPHA_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_A16_UNORM_PACK16, - { 4, glm::u8vec3(1, 1, 1), 2, swizzles(SWIZZLE_RED, SWIZZLE_RED, SWIZZLE_RED, SWIZZLE_GREEN), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_LUMINANCE_ALPHA_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_LA16_UNORM_PACK16, - - { 4, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT}, //FORMAT_BGR8_UNORM_PACK32, - { 4, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_BLUE, SWIZZLE_GREEN, SWIZZLE_RED, SWIZZLE_ONE), CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_SWIZZLE_BIT | CAP_COLORSPACE_SRGB_BIT}, //FORMAT_BGR8_SRGB_PACK32, - - { 1, glm::u8vec3(1, 1, 1), 3, swizzles(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ONE), CAP_PACKED8_BIT | CAP_NORMALIZED_BIT | CAP_UNSIGNED_BIT | CAP_DDS_GLI_EXT_BIT}, //FORMAT_RG3B2_UNORM_PACK8, - }; - - GLM_STATIC_ASSERT(sizeof(Table) / sizeof(Table[0]) == FORMAT_COUNT, "GLI error: format descriptor list doesn't match number of supported formats"); - GLI_ASSERT(Format != FORMAT_UNDEFINED); - - return Table[Format - FORMAT_FIRST]; - }; - - inline std::uint32_t bits_per_pixel(format Format) - { - detail::formatInfo const & Info = detail::get_format_info(Format); - - return Info.BlockSize * 8 / (Info.BlockExtent.x * Info.BlockExtent.y * Info.BlockExtent.z); - } -}//namespace detail - - inline bool has_decoder(format Format) - { - return detail::get_format_info(Format).Flags & detail::CAP_DECODER_BIT ? true : false; - } - - inline bool is_compressed(format Format) - { - return detail::get_format_info(Format).Flags & detail::CAP_COMPRESSED_BIT ? true : false; - } - - inline bool is_s3tc_compressed(format Format) - { - return Format >= FORMAT_RGB_DXT1_UNORM_BLOCK8 && Format <= FORMAT_RGBA_DXT5_SRGB_BLOCK16; - } - - inline bool is_srgb(format Format) - { - return detail::get_format_info(Format).Flags & detail::CAP_COLORSPACE_SRGB_BIT ? true : false; - } - - inline size_t block_size(format Format) - { - return detail::get_format_info(Format).BlockSize; - } - - inline ivec3 block_extent(format Format) - { - return gli::ivec3(detail::get_format_info(Format).BlockExtent); - } - - inline size_t component_count(format Format) - { - return detail::get_format_info(Format).Component; - } - - inline bool is_unsigned(format Format) - { - return detail::get_format_info(Format).Flags & detail::CAP_UNSIGNED_BIT ? true : false; - } - - inline bool is_signed(format Format) - { - return detail::get_format_info(Format).Flags & detail::CAP_SIGNED_BIT ? true : false; - } - - inline bool is_integer(format Format) - { - return detail::get_format_info(Format).Flags & detail::CAP_INTEGER_BIT ? true : false; - } - - inline bool is_signed_integer(format Format) - { - return is_integer(Format) && is_signed(Format); - } - - inline bool is_unsigned_integer(format Format) - { - return is_integer(Format) && is_unsigned(Format); - } - - inline bool is_float(format Format) - { - return detail::get_format_info(Format).Flags & detail::CAP_FLOAT_BIT ? true : false; - } - - inline bool is_normalized(format Format) - { - return detail::get_format_info(Format).Flags & detail::CAP_NORMALIZED_BIT ? true : false; - } - - inline bool is_unorm(format Format) - { - return is_normalized(Format) && is_unsigned(Format); - } - - inline bool is_snorm(format Format) - { - return is_normalized(Format) && is_signed(Format); - } - - inline bool is_packed(format Format) - { - gli::uint16 flags = detail::get_format_info(Format).Flags; - - return (flags & detail::CAP_PACKED8_BIT) != 0 || (flags & detail::CAP_PACKED16_BIT) != 0 || (flags & detail::CAP_PACKED32_BIT) != 0; - } - - inline bool is_depth(format Format) - { - return (detail::get_format_info(Format).Flags & detail::CAP_DEPTH_BIT) ? true : false; - } - - inline bool is_stencil(format Format) - { - return (detail::get_format_info(Format).Flags & detail::CAP_STENCIL_BIT) ? true : false; - } - - inline bool is_depth_stencil(format Format) - { - return is_depth(Format) && is_stencil(Format); - } - -}//namespace gli diff --git a/external/gli/gli/core/generate_mipmaps.inl b/external/gli/gli/core/generate_mipmaps.inl deleted file mode 100644 index e91dca22..00000000 --- a/external/gli/gli/core/generate_mipmaps.inl +++ /dev/null @@ -1,127 +0,0 @@ -#include "../sampler1d.hpp" -#include "../sampler1d_array.hpp" -#include "../sampler2d.hpp" -#include "../sampler2d_array.hpp" -#include "../sampler3d.hpp" -#include "../sampler_cube.hpp" -#include "../sampler_cube_array.hpp" - -namespace gli -{ - inline texture1d generate_mipmaps( - texture1d const& Texture, - texture1d::size_type BaseLevel, texture1d::size_type MaxLevel, - filter Minification) - { - fsampler1D Sampler(Texture, WRAP_CLAMP_TO_EDGE); - Sampler.generate_mipmaps(BaseLevel, MaxLevel, Minification); - return Sampler(); - } - - inline texture1d_array generate_mipmaps( - texture1d_array const& Texture, - texture1d_array::size_type BaseLayer, texture1d_array::size_type MaxLayer, - texture1d_array::size_type BaseLevel, texture1d_array::size_type MaxLevel, - filter Minification) - { - fsampler1DArray Sampler(Texture, WRAP_CLAMP_TO_EDGE); - Sampler.generate_mipmaps(BaseLayer, MaxLayer, BaseLevel, MaxLevel, Minification); - return Sampler(); - } - - inline texture2d generate_mipmaps( - texture2d const& Texture, - texture2d::size_type BaseLevel, texture2d::size_type MaxLevel, - filter Minification) - { - fsampler2D Sampler(Texture, WRAP_CLAMP_TO_EDGE); - Sampler.generate_mipmaps(BaseLevel, MaxLevel, Minification); - return Sampler(); - } - - inline texture2d_array generate_mipmaps( - texture2d_array const& Texture, - texture2d_array::size_type BaseLayer, texture2d_array::size_type MaxLayer, - texture2d_array::size_type BaseLevel, texture2d_array::size_type MaxLevel, - filter Minification) - { - fsampler2DArray Sampler(Texture, WRAP_CLAMP_TO_EDGE); - Sampler.generate_mipmaps(BaseLayer, MaxLayer, BaseLevel, MaxLevel, Minification); - return Sampler(); - } - - inline texture3d generate_mipmaps( - texture3d const& Texture, - texture3d::size_type BaseLevel, texture3d::size_type MaxLevel, - filter Minification) - { - fsampler3D Sampler(Texture, WRAP_CLAMP_TO_EDGE); - Sampler.generate_mipmaps(BaseLevel, MaxLevel, Minification); - return Sampler(); - } - - inline texture_cube generate_mipmaps( - texture_cube const& Texture, - texture_cube::size_type BaseFace, texture_cube::size_type MaxFace, - texture_cube::size_type BaseLevel, texture_cube::size_type MaxLevel, - filter Minification) - { - fsamplerCube Sampler(Texture, WRAP_CLAMP_TO_EDGE); - Sampler.generate_mipmaps(BaseFace, MaxFace, BaseLevel, MaxLevel, Minification); - return Sampler(); - } - - inline texture_cube_array generate_mipmaps( - texture_cube_array const& Texture, - texture_cube_array::size_type BaseLayer, texture_cube_array::size_type MaxLayer, - texture_cube_array::size_type BaseFace, texture_cube_array::size_type MaxFace, - texture_cube_array::size_type BaseLevel, texture_cube_array::size_type MaxLevel, - filter Minification) - { - fsamplerCubeArray Sampler(Texture, WRAP_CLAMP_TO_EDGE); - Sampler.generate_mipmaps(BaseLayer, MaxLayer, BaseFace, MaxFace, BaseLevel, MaxLevel, Minification); - return Sampler(); - } - - template <> - inline texture1d generate_mipmaps(texture1d const& Texture, filter Minification) - { - return generate_mipmaps(Texture, Texture.base_level(), Texture.max_level(), Minification); - } - - template <> - inline texture1d_array generate_mipmaps(texture1d_array const& Texture, filter Minification) - { - return generate_mipmaps(Texture, Texture.base_layer(), Texture.max_layer(), Texture.base_level(), Texture.max_level(), Minification); - } - - template <> - inline texture2d generate_mipmaps(texture2d const& Texture, filter Minification) - { - return generate_mipmaps(Texture, Texture.base_level(), Texture.max_level(), Minification); - } - - template <> - inline texture2d_array generate_mipmaps(texture2d_array const& Texture, filter Minification) - { - return generate_mipmaps(Texture, Texture.base_layer(), Texture.max_layer(), Texture.base_level(), Texture.max_level(), Minification); - } - - template <> - inline texture3d generate_mipmaps(texture3d const& Texture, filter Minification) - { - return generate_mipmaps(Texture, Texture.base_level(), Texture.max_level(), Minification); - } - - template <> - inline texture_cube generate_mipmaps(texture_cube const& Texture, filter Minification) - { - return generate_mipmaps(Texture, Texture.base_face(), Texture.max_face(), Texture.base_level(), Texture.max_level(), Minification); - } - - template <> - inline texture_cube_array generate_mipmaps(texture_cube_array const& Texture, filter Minification) - { - return generate_mipmaps(Texture, Texture.base_layer(), Texture.max_layer(), Texture.base_face(), Texture.max_face(), Texture.base_level(), Texture.max_level(), Minification); - } -}//namespace gli diff --git a/external/gli/gli/core/gl.inl b/external/gli/gli/core/gl.inl deleted file mode 100644 index 60849039..00000000 --- a/external/gli/gli/core/gl.inl +++ /dev/null @@ -1,366 +0,0 @@ -#include - -namespace gli{ -namespace detail -{ - inline gl::swizzles translate(gli::swizzles const& Swizzles) - { - static gl::swizzle const Table[] = - { - gl::SWIZZLE_RED, - gl::SWIZZLE_GREEN, - gl::SWIZZLE_BLUE, - gl::SWIZZLE_ALPHA, - gl::SWIZZLE_ZERO, - gl::SWIZZLE_ONE - }; - static_assert(sizeof(Table) / sizeof(Table[0]) == SWIZZLE_COUNT, "GLI error: swizzle descriptor list doesn't match number of supported swizzles"); - - return gl::swizzles(Table[Swizzles.r], Table[Swizzles.g], Table[Swizzles.b], Table[Swizzles.a]); - } - - enum format_property - { - FORMAT_PROPERTY_BGRA_FORMAT_BIT = (1 << 0), - FORMAT_PROPERTY_BGRA_TYPE_BIT = (1 << 1) - }; -}//namespace detail - - inline gl::gl(profile Profile) - : Profile(Profile) - { - bool const HasSwizzle = has_swizzle(Profile); - external_format const ExternalBGR = HasSwizzle ? EXTERNAL_RGB : EXTERNAL_BGR; - external_format const ExternalBGRA = HasSwizzle ? EXTERNAL_RGBA : EXTERNAL_BGRA; - external_format const ExternalBGRInt = HasSwizzle ? EXTERNAL_RGB_INTEGER : EXTERNAL_BGR_INTEGER; - external_format const ExternalBGRAInt = HasSwizzle ? EXTERNAL_RGBA_INTEGER : EXTERNAL_BGRA_INTEGER; - - external_format const ExternalSRGB8 = Profile != PROFILE_ES20 ? EXTERNAL_RGB : EXTERNAL_SRGB_EXT; - external_format const ExternalSRGB8_A8 = Profile != PROFILE_ES20 ? EXTERNAL_RGBA : EXTERNAL_SRGB_ALPHA_EXT; - - internal_format const InternalBGRA = Profile == PROFILE_ES20 ? INTERNAL_BGRA8_UNORM : INTERNAL_RGBA8_UNORM; - internal_format const InternalRGBETC = Profile == PROFILE_ES20 ? INTERNAL_RGB_ETC : INTERNAL_RGB_ETC2; - - internal_format const InternalLuminance8 = HasSwizzle ? INTERNAL_R8_UNORM : INTERNAL_LUMINANCE8; - internal_format const InternalAlpha8 = HasSwizzle ? INTERNAL_R8_UNORM : INTERNAL_ALPHA8; - internal_format const InternalLuminanceAlpha8 = HasSwizzle ? INTERNAL_RG8_UNORM : INTERNAL_LUMINANCE8_ALPHA8; - - internal_format const InternalLuminance16 = HasSwizzle ? INTERNAL_R16_UNORM : INTERNAL_LUMINANCE16; - internal_format const InternalAlpha16 = HasSwizzle ? INTERNAL_R16_UNORM : INTERNAL_ALPHA16; - internal_format const InternalLuminanceAlpha16 = HasSwizzle ? INTERNAL_RG16_UNORM : INTERNAL_LUMINANCE16_ALPHA16; - - external_format const ExternalLuminance = HasSwizzle ? EXTERNAL_RED : EXTERNAL_LUMINANCE; - external_format const ExternalAlpha = HasSwizzle ? EXTERNAL_RED : EXTERNAL_ALPHA; - external_format const ExternalLuminanceAlpha = HasSwizzle ? EXTERNAL_RG : EXTERNAL_LUMINANCE_ALPHA; - - type_format const TypeF16 = Profile == PROFILE_ES20 ? TYPE_F16_OES : TYPE_F16; - - format_desc const Table[] = - { - {INTERNAL_RG4_EXT, EXTERNAL_RG, TYPE_UINT8_RG4_REV_GTC, 0}, //FORMAT_R4G4_UNORM, - {INTERNAL_RGBA4, EXTERNAL_RGBA, TYPE_UINT16_RGBA4_REV, 0}, //FORMAT_RGBA4_UNORM, - {INTERNAL_RGBA4, EXTERNAL_RGBA, TYPE_UINT16_RGBA4, detail::FORMAT_PROPERTY_BGRA_TYPE_BIT}, //FORMAT_BGRA4_UNORM, - {INTERNAL_R5G6B5, EXTERNAL_RGB, TYPE_UINT16_R5G6B5_REV, 0}, //FORMAT_R5G6B5_UNORM, - {INTERNAL_R5G6B5, EXTERNAL_RGB, TYPE_UINT16_R5G6B5, detail::FORMAT_PROPERTY_BGRA_TYPE_BIT}, //FORMAT_B5G6R5_UNORM, - {INTERNAL_RGB5A1, EXTERNAL_RGBA, TYPE_UINT16_RGB5A1_REV, 0}, //FORMAT_RGB5A1_UNORM, - {INTERNAL_RGB5A1, EXTERNAL_RGBA, TYPE_UINT16_RGB5A1, detail::FORMAT_PROPERTY_BGRA_TYPE_BIT}, //FORMAT_BGR5A1_UNORM, - {INTERNAL_RGB5A1, EXTERNAL_RGBA, TYPE_UINT16_A1RGB5_GTC, 0}, //FORMAT_A1RGB5_UNORM, - - {INTERNAL_R8_UNORM, EXTERNAL_RED, TYPE_U8, 0}, //FORMAT_R8_UNORM, - {INTERNAL_R8_SNORM, EXTERNAL_RED, TYPE_I8, 0}, //FORMAT_R8_SNORM, - {INTERNAL_R8_USCALED_GTC, EXTERNAL_RED, TYPE_U8, 0}, //FORMAT_R8_USCALED, - {INTERNAL_R8_SSCALED_GTC, EXTERNAL_RED, TYPE_I8, 0}, //FORMAT_R8_SSCALED, - {INTERNAL_R8U, EXTERNAL_RED_INTEGER, TYPE_U8, 0}, //FORMAT_R8_UINT, - {INTERNAL_R8I, EXTERNAL_RED_INTEGER, TYPE_I8, 0}, //FORMAT_R8_SINT, - {INTERNAL_SR8, EXTERNAL_RED, TYPE_U8, 0}, //FORMAT_R8_SRGB, - - {INTERNAL_RG8_UNORM, EXTERNAL_RG, TYPE_U8, 0}, //FORMAT_RG8_UNORM, - {INTERNAL_RG8_SNORM, EXTERNAL_RG, TYPE_I8, 0}, //FORMAT_RG8_SNORM, - {INTERNAL_RG8_USCALED_GTC, EXTERNAL_RG, TYPE_U8, 0}, //FORMAT_RG8_USCALED, - {INTERNAL_RG8_SSCALED_GTC, EXTERNAL_RG, TYPE_I8, 0}, //FORMAT_RG8_SSCALED, - {INTERNAL_RG8U, EXTERNAL_RG_INTEGER, TYPE_U8, 0}, //FORMAT_RG8_UINT, - {INTERNAL_RG8I, EXTERNAL_RG_INTEGER, TYPE_I8, 0}, //FORMAT_RG8_SINT, - {INTERNAL_SRG8, EXTERNAL_RG, TYPE_U8, 0}, //FORMAT_RG8_SRGB, - - {INTERNAL_RGB8_UNORM, EXTERNAL_RGB, TYPE_U8, 0}, //FORMAT_RGB8_UNORM, - {INTERNAL_RGB8_SNORM, EXTERNAL_RGB, TYPE_I8, 0}, //FORMAT_RGB8_SNORM, - {INTERNAL_RGB8_USCALED_GTC, EXTERNAL_RGB, TYPE_U8, 0}, //FORMAT_RGB8_USCALED, - {INTERNAL_RGB8_SSCALED_GTC, EXTERNAL_RGB, TYPE_I8, 0}, //FORMAT_RGB8_SSCALED, - {INTERNAL_RGB8U, EXTERNAL_RGB_INTEGER, TYPE_U8, 0}, //FORMAT_RGB8_UINT, - {INTERNAL_RGB8I, EXTERNAL_RGB_INTEGER, TYPE_I8, 0}, //FORMAT_RGB8_SINT, - {INTERNAL_SRGB8, ExternalSRGB8, TYPE_U8, 0}, //FORMAT_RGB8_SRGB, - - {INTERNAL_RGB8_UNORM, ExternalBGR, TYPE_U8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGR8_UNORM_PACK8, - {INTERNAL_RGB8_SNORM, ExternalBGR, TYPE_I8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGR8_SNORM_PACK8, - {INTERNAL_RGB8_USCALED_GTC, ExternalBGR, TYPE_U8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGR8_USCALED_PACK8, - {INTERNAL_RGB8_SSCALED_GTC, ExternalBGR, TYPE_I8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGR8_SSCALED_PACK8, - {INTERNAL_RGB8U, ExternalBGRInt, TYPE_U8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGR8_UINT_PACK8, - {INTERNAL_RGB8I, ExternalBGRInt, TYPE_I8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGR8_SINT_PACK8, - {INTERNAL_SRGB8, ExternalBGR, TYPE_U8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGR8_SRGB_PACK8, - - {INTERNAL_RGBA8_UNORM, EXTERNAL_RGBA, TYPE_U8, 0}, //FORMAT_RGBA8_UNORM_PACK8, - {INTERNAL_RGBA8_SNORM, EXTERNAL_RGBA, TYPE_I8, 0}, //FORMAT_RGBA8_SNORM_PACK8, - {INTERNAL_RGBA8_USCALED_GTC, EXTERNAL_RGBA, TYPE_U8, 0}, //FORMAT_RGBA8_USCALED_PACK8, - {INTERNAL_RGBA8_SSCALED_GTC, EXTERNAL_RGBA, TYPE_I8, 0}, //FORMAT_RGBA8_SSCALED_PACK8, - {INTERNAL_RGBA8U, EXTERNAL_RGBA_INTEGER, TYPE_U8, 0}, //FORMAT_RGBA8_UINT_PACK8, - {INTERNAL_RGBA8I, EXTERNAL_RGBA_INTEGER, TYPE_I8, 0}, //FORMAT_RGBA8_SINT_PACK8, - {INTERNAL_SRGB8_ALPHA8, ExternalSRGB8_A8, TYPE_U8, 0}, //FORMAT_RGBA8_SRGB_PACK8, - - {InternalBGRA, ExternalBGRA, TYPE_U8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGRA8_UNORM_PACK8, - {INTERNAL_RGBA8_SNORM, ExternalBGRA, TYPE_I8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGRA8_SNORM_PACK8, - {INTERNAL_RGBA8_USCALED_GTC, ExternalBGRA, TYPE_U8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGRA8_USCALED_PACK8, - {INTERNAL_RGBA8_SSCALED_GTC, ExternalBGRA, TYPE_I8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGRA8_SSCALED_PACK8, - {INTERNAL_RGBA8U, ExternalBGRAInt, TYPE_U8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGRA8_UINT_PACK8, - {INTERNAL_RGBA8I, ExternalBGRAInt, TYPE_I8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGRA8_SINT_PACK8, - {INTERNAL_SRGB8_ALPHA8, ExternalBGRA, TYPE_U8, detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT}, //FORMAT_BGRA8_SRGB_PACK8, - - {INTERNAL_RGBA8_UNORM, EXTERNAL_RGBA, TYPE_UINT32_RGBA8_REV, 0}, //FORMAT_ABGR8_UNORM_PACK32, - {INTERNAL_RGBA8_SNORM, EXTERNAL_RGBA, TYPE_UINT32_RGBA8_REV, 0}, //FORMAT_ABGR8_SNORM_PACK32, - {INTERNAL_RGBA8_USCALED_GTC, EXTERNAL_RGBA, TYPE_UINT32_RGBA8_REV, 0}, //FORMAT_ABGR8_USCALED_PACK32, - {INTERNAL_RGBA8_SSCALED_GTC, EXTERNAL_RGBA, TYPE_UINT32_RGBA8_REV, 0}, //FORMAT_ABGR8_SSCALED_PACK32, - {INTERNAL_RGBA8U, EXTERNAL_RGBA_INTEGER, TYPE_UINT32_RGBA8_REV, 0}, //FORMAT_ABGR8_UINT_PACK32, - {INTERNAL_RGBA8I, EXTERNAL_RGBA_INTEGER, TYPE_UINT32_RGBA8_REV, 0}, //FORMAT_ABGR8_SINT_PACK32, - {INTERNAL_SRGB8_ALPHA8, EXTERNAL_RGBA, TYPE_UINT32_RGBA8_REV, 0}, //FORMAT_ABGR8_SRGB_PACK32, - - {INTERNAL_RGB10A2_UNORM, EXTERNAL_RGBA, TYPE_UINT32_RGB10A2_REV, 0}, //FORMAT_RGB10A2_UNORM_PACK32, - {INTERNAL_RGB10A2_SNORM_EXT, EXTERNAL_RGBA, TYPE_UINT32_RGB10A2_REV, 0}, //FORMAT_RGB10A2_SNORM_PACK32, - {INTERNAL_RGB10A2_USCALED_GTC, EXTERNAL_RGBA, TYPE_UINT32_RGB10A2_REV, 0}, //FORMAT_RGB10A2_USCALE_PACK32, - {INTERNAL_RGB10A2_SSCALED_GTC, EXTERNAL_RGBA, TYPE_UINT32_RGB10A2_REV, 0}, //FORMAT_RGB10A2_SSCALE_PACK32, - {INTERNAL_RGB10A2U, EXTERNAL_RGBA_INTEGER, TYPE_UINT32_RGB10A2_REV, 0}, //FORMAT_RGB10A2_UINT_PACK32, - {INTERNAL_RGB10A2I_EXT, EXTERNAL_RGBA_INTEGER, TYPE_UINT32_RGB10A2_REV, 0}, //FORMAT_RGB10A2_SINT_PACK32, - - {INTERNAL_RGB10A2_UNORM, EXTERNAL_RGBA, TYPE_UINT32_RGB10A2, detail::FORMAT_PROPERTY_BGRA_TYPE_BIT}, //FORMAT_BGR10A2_UNORM_PACK32, - {INTERNAL_RGB10A2_SNORM_EXT, EXTERNAL_RGBA, TYPE_UINT32_RGB10A2, detail::FORMAT_PROPERTY_BGRA_TYPE_BIT}, //FORMAT_BGR10A2_SNORM_PACK32, - {INTERNAL_RGB10A2_USCALED_GTC, EXTERNAL_RGBA, TYPE_UINT32_RGB10A2, detail::FORMAT_PROPERTY_BGRA_TYPE_BIT}, //FORMAT_BGR10A2_USCALE_PACK32, - {INTERNAL_RGB10A2_SSCALED_GTC, EXTERNAL_RGBA, TYPE_UINT32_RGB10A2, detail::FORMAT_PROPERTY_BGRA_TYPE_BIT}, //FORMAT_BGR10A2_SSCALE_PACK32, - {INTERNAL_RGB10A2U, EXTERNAL_RGBA_INTEGER, TYPE_UINT32_RGB10A2, detail::FORMAT_PROPERTY_BGRA_TYPE_BIT}, //FORMAT_BGR10A2_UINT_PACK32, - {INTERNAL_RGB10A2I_EXT, EXTERNAL_RGBA_INTEGER, TYPE_UINT32_RGB10A2, detail::FORMAT_PROPERTY_BGRA_TYPE_BIT}, //FORMAT_BGR10A2_SINT_PACK32, - - {INTERNAL_R16_UNORM, EXTERNAL_RED, TYPE_U16, 0}, //FORMAT_R16_UNORM_PACK16, - {INTERNAL_R16_SNORM, EXTERNAL_RED, TYPE_I16, 0}, //FORMAT_R16_SNORM_PACK16, - {INTERNAL_R16_USCALED_GTC, EXTERNAL_RED, TYPE_U16, 0}, //FORMAT_R16_USCALED_PACK16, - {INTERNAL_R16_SSCALED_GTC, EXTERNAL_RED, TYPE_I16, 0}, //FORMAT_R16_SSCALED_PACK16, - {INTERNAL_R16U, EXTERNAL_RED_INTEGER, TYPE_U16, 0}, //FORMAT_R16_UINT_PACK16, - {INTERNAL_R16I, EXTERNAL_RED_INTEGER, TYPE_I16, 0}, //FORMAT_R16_SINT_PACK16, - {INTERNAL_R16F, EXTERNAL_RED, TypeF16, 0}, //FORMAT_R16_SFLOAT_PACK16, - - {INTERNAL_RG16_UNORM, EXTERNAL_RG, TYPE_U16, 0}, //FORMAT_RG16_UNORM_PACK16, - {INTERNAL_RG16_SNORM, EXTERNAL_RG, TYPE_I16, 0}, //FORMAT_RG16_SNORM_PACK16, - {INTERNAL_RG16_USCALED_GTC, EXTERNAL_RG, TYPE_U16, 0}, //FORMAT_RG16_USCALED_PACK16, - {INTERNAL_RG16_SSCALED_GTC, EXTERNAL_RG, TYPE_I16, 0}, //FORMAT_RG16_SSCALED_PACK16, - {INTERNAL_RG16U, EXTERNAL_RG_INTEGER, TYPE_U16, 0}, //FORMAT_RG16_UINT_PACK16, - {INTERNAL_RG16I, EXTERNAL_RG_INTEGER, TYPE_I16, 0}, //FORMAT_RG16_SINT_PACK16, - {INTERNAL_RG16F, EXTERNAL_RG, TypeF16, 0}, //FORMAT_RG16_SFLOAT_PACK16, - - {INTERNAL_RGB16_UNORM, EXTERNAL_RGB, TYPE_U16, 0}, //FORMAT_RGB16_UNORM_PACK16, - {INTERNAL_RGB16_SNORM, EXTERNAL_RGB, TYPE_I16, 0}, //FORMAT_RGB16_SNORM_PACK16, - {INTERNAL_RGB16_USCALED_GTC, EXTERNAL_RGB, TYPE_U16, 0}, //FORMAT_RGB16_USCALED_PACK16, - {INTERNAL_RGB16_SSCALED_GTC, EXTERNAL_RGB, TYPE_I16, 0}, //FORMAT_RGB16_USCALED_PACK16, - {INTERNAL_RGB16U, EXTERNAL_RGB_INTEGER, TYPE_U16, 0}, //FORMAT_RGB16_UINT_PACK16, - {INTERNAL_RGB16I, EXTERNAL_RGB_INTEGER, TYPE_I16, 0}, //FORMAT_RGB16_SINT_PACK16, - {INTERNAL_RGB16F, EXTERNAL_RGB, TypeF16, 0}, //FORMAT_RGB16_SFLOAT_PACK16, - - {INTERNAL_RGBA16_UNORM, EXTERNAL_RGBA, TYPE_U16, 0}, //FORMAT_RGBA16_UNORM_PACK16, - {INTERNAL_RGBA16_SNORM, EXTERNAL_RGBA, TYPE_I16, 0}, //FORMAT_RGBA16_SNORM_PACK16, - {INTERNAL_RGBA16_USCALED_GTC, EXTERNAL_RGBA, TYPE_U16, 0}, //FORMAT_RGBA16_USCALED_PACK16, - {INTERNAL_RGBA16_SSCALED_GTC, EXTERNAL_RGBA, TYPE_I16, 0}, //FORMAT_RGBA16_SSCALED_PACK16, - {INTERNAL_RGBA16U, EXTERNAL_RGBA_INTEGER, TYPE_U16, 0}, //FORMAT_RGBA16_UINT_PACK16, - {INTERNAL_RGBA16I, EXTERNAL_RGBA_INTEGER, TYPE_I16, 0}, //FORMAT_RGBA16_SINT_PACK16, - {INTERNAL_RGBA16F, EXTERNAL_RGBA, TypeF16, 0}, //FORMAT_RGBA16_SFLOAT_PACK16, - - {INTERNAL_R32U, EXTERNAL_RED_INTEGER, TYPE_U32, 0}, //FORMAT_R32_UINT_PACK32, - {INTERNAL_R32I, EXTERNAL_RED_INTEGER, TYPE_I32, 0}, //FORMAT_R32_SINT_PACK32, - {INTERNAL_R32F, EXTERNAL_RED, TYPE_F32, 0}, //FORMAT_R32_SFLOAT_PACK32, - - {INTERNAL_RG32U, EXTERNAL_RG_INTEGER, TYPE_U32, 0}, //FORMAT_RG32_UINT_PACK32, - {INTERNAL_RG32I, EXTERNAL_RG_INTEGER, TYPE_I32, 0}, //FORMAT_RG32_SINT_PACK32, - {INTERNAL_RG32F, EXTERNAL_RG, TYPE_F32, 0}, //FORMAT_RG32_SFLOAT_PACK32, - - {INTERNAL_RGB32U, EXTERNAL_RGB_INTEGER, TYPE_U32, 0}, //FORMAT_RGB32_UINT_PACK32, - {INTERNAL_RGB32I, EXTERNAL_RGB_INTEGER, TYPE_I32, 0}, //FORMAT_RGB32_SINT_PACK32, - {INTERNAL_RGB32F, EXTERNAL_RGB, TYPE_F32, 0}, //FORMAT_RGB32_SFLOAT_PACK32, - - {INTERNAL_RGBA32U, EXTERNAL_RGBA_INTEGER, TYPE_U32, 0}, //FORMAT_RGBA32_UINT_PACK32, - {INTERNAL_RGBA32I, EXTERNAL_RGBA_INTEGER, TYPE_I32, 0}, //FORMAT_RGBA32_SINT_PACK32, - {INTERNAL_RGBA32F, EXTERNAL_RGBA, TYPE_F32, 0}, //FORMAT_RGBA32_SFLOAT_PACK32, - - {INTERNAL_R64F_EXT, EXTERNAL_RED, TYPE_U64, 0}, //FORMAT_R64_UINT_PACK64, - {INTERNAL_R64F_EXT, EXTERNAL_RED, TYPE_I64, 0}, //FORMAT_R64_SINT_PACK64, - {INTERNAL_R64F_EXT, EXTERNAL_RED, TYPE_F64, 0}, //FORMAT_R64_SFLOAT_PACK64, - - {INTERNAL_RG64F_EXT, EXTERNAL_RG, TYPE_U64, 0}, //FORMAT_RG64_UINT_PACK64, - {INTERNAL_RG64F_EXT, EXTERNAL_RG, TYPE_I64, 0}, //FORMAT_RG64_SINT_PACK64, - {INTERNAL_RG64F_EXT, EXTERNAL_RG, TYPE_F64, 0}, //FORMAT_RG64_SFLOAT_PACK64, - - {INTERNAL_RGB64F_EXT, EXTERNAL_RGB, TYPE_U64, 0}, //FORMAT_RGB64_UINT_PACK64, - {INTERNAL_RGB64F_EXT, EXTERNAL_RGB, TYPE_I64, 0}, //FORMAT_RGB64_SINT_PACK64, - {INTERNAL_RGB64F_EXT, EXTERNAL_RGB, TYPE_F64, 0}, //FORMAT_RGB64_SFLOAT_PACK64, - - {INTERNAL_RGBA64F_EXT, EXTERNAL_RGBA, TYPE_U64, 0}, //FORMAT_RGBA64_UINT_PACK64, - {INTERNAL_RGBA64F_EXT, EXTERNAL_RGBA, TYPE_I64, 0}, //FORMAT_RGBA64_SINT_PACK64, - {INTERNAL_RGBA64F_EXT, EXTERNAL_RGBA, TYPE_F64, 0}, //FORMAT_RGBA64_SFLOAT_PACK64, - - {INTERNAL_RG11B10F, EXTERNAL_RGB, TYPE_UINT32_RG11B10F_REV, 0}, //FORMAT_RG11B10_UFLOAT_PACK32, - {INTERNAL_RGB9E5, EXTERNAL_RGB, TYPE_UINT32_RGB9_E5_REV, 0}, //FORMAT_RGB9E5_UFLOAT_PACK32, - - {INTERNAL_D16, EXTERNAL_DEPTH, TYPE_NONE, 0}, //FORMAT_D16_UNORM_PACK16, - {INTERNAL_D24, EXTERNAL_DEPTH, TYPE_NONE, 0}, //FORMAT_D24_UNORM, - {INTERNAL_D32F, EXTERNAL_DEPTH, TYPE_NONE, 0}, //FORMAT_D32_UFLOAT, - {INTERNAL_S8_EXT, EXTERNAL_STENCIL, TYPE_NONE, 0}, //FORMAT_S8_UNORM, - {INTERNAL_D16S8_EXT, EXTERNAL_DEPTH, TYPE_NONE, 0}, //FORMAT_D16_UNORM_S8_UINT_PACK32, - {INTERNAL_D24S8, EXTERNAL_DEPTH_STENCIL, TYPE_NONE, 0}, //FORMAT_D24_UNORM_S8_UINT_PACK32, - {INTERNAL_D32FS8X24, EXTERNAL_DEPTH_STENCIL, TYPE_NONE, 0}, //FORMAT_D32_SFLOAT_S8_UINT_PACK64, - - {INTERNAL_RGB_DXT1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_DXT1_UNORM_BLOCK8, - {INTERNAL_SRGB_DXT1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_DXT1_SRGB_BLOCK8, - {INTERNAL_RGBA_DXT1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_DXT1_UNORM_BLOCK8, - {INTERNAL_SRGB_ALPHA_DXT1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_DXT1_SRGB_BLOCK8, - {INTERNAL_RGBA_DXT3, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_DXT3_UNORM_BLOCK16, - {INTERNAL_SRGB_ALPHA_DXT3, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_DXT3_SRGB_BLOCK16, - {INTERNAL_RGBA_DXT5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_DXT5_UNORM_BLOCK16, - {INTERNAL_SRGB_ALPHA_DXT5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_DXT5_SRGB_BLOCK16, - {INTERNAL_R_ATI1N_UNORM, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_R_ATI1N_UNORM_BLOCK8, - {INTERNAL_R_ATI1N_SNORM, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_R_ATI1N_SNORM_BLOCK8, - {INTERNAL_RG_ATI2N_UNORM, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RG_ATI2N_UNORM_BLOCK16, - {INTERNAL_RG_ATI2N_SNORM, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RG_ATI2N_SNORM_BLOCK16, - {INTERNAL_RGB_BP_UNSIGNED_FLOAT, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_BP_UFLOAT_BLOCK16, - {INTERNAL_RGB_BP_SIGNED_FLOAT, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_BP_SFLOAT_BLOCK16, - {INTERNAL_RGB_BP_UNORM, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_BP_UNORM, - {INTERNAL_SRGB_BP_UNORM, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_BP_SRGB, - - {InternalRGBETC, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_ETC2_UNORM_BLOCK8, - {INTERNAL_SRGB8_ETC2, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_ETC2_SRGB_BLOCK8, - {INTERNAL_RGBA_PUNCHTHROUGH_ETC2, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ETC2_PUNCHTHROUGH_UNORM, - {INTERNAL_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ETC2_PUNCHTHROUGH_SRGB, - {INTERNAL_RGBA_ETC2, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ETC2_UNORM_BLOCK16, - {INTERNAL_SRGB8_ALPHA8_ETC2_EAC, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ETC2_SRGB_BLOCK16, - {INTERNAL_R11_EAC, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_R11_EAC_UNORM, - {INTERNAL_SIGNED_R11_EAC, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_R11_EAC_SNORM, - {INTERNAL_RG11_EAC, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RG11_EAC_UNORM, - {INTERNAL_SIGNED_RG11_EAC, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RG11_EAC_SNORM, - - {INTERNAL_RGBA_ASTC_4x4, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC4X4_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_4x4, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC4X4_SRGB, - {INTERNAL_RGBA_ASTC_5x4, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC5X4_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_5x4, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC5X4_SRGB, - {INTERNAL_RGBA_ASTC_5x5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC5X5_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_5x5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC5X5_SRGB, - {INTERNAL_RGBA_ASTC_6x5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC6X5_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_6x5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC6X5_SRGB, - {INTERNAL_RGBA_ASTC_6x6, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC6X6_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_6x6, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC6X6_SRGB, - {INTERNAL_RGBA_ASTC_8x5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC8X5_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_8x5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC8X5_SRGB, - {INTERNAL_RGBA_ASTC_8x6, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC8X6_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_8x6, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC8X6_SRGB, - {INTERNAL_RGBA_ASTC_8x8, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC8X8_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_8x8, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC8X8_SRGB, - {INTERNAL_RGBA_ASTC_10x5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC10X5_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_10x5, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC10X5_SRGB, - {INTERNAL_RGBA_ASTC_10x6, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC10X6_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_10x6, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC10X6_SRGB, - {INTERNAL_RGBA_ASTC_10x8, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC10X8_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_10x8, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC10X8_SRGB, - {INTERNAL_RGBA_ASTC_10x10, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC10X10_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_10x10, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC10X10_SRGB, - {INTERNAL_RGBA_ASTC_12x10, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC12X10_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_12x10, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC12X10_SRGB, - {INTERNAL_RGBA_ASTC_12x12, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC12X12_UNORM, - {INTERNAL_SRGB8_ALPHA8_ASTC_12x12, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ASTC12X12_SRGB, - - {INTERNAL_RGB_PVRTC_4BPPV1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_PVRTC1_8X8_UNORM_BLOCK32, - {INTERNAL_SRGB_PVRTC_2BPPV1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_PVRTC1_8X8_SRGB_BLOCK32, - {INTERNAL_RGB_PVRTC_2BPPV1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_PVRTC1_16X8_UNORM_BLOCK32, - {INTERNAL_SRGB_PVRTC_4BPPV1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_PVRTC1_16X8_SRGB_BLOCK32, - {INTERNAL_RGBA_PVRTC_4BPPV1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_PVRTC1_8X8_UNORM_BLOCK32, - {INTERNAL_SRGB_ALPHA_PVRTC_2BPPV1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_PVRTC1_8X8_SRGB_BLOCK32, - {INTERNAL_RGBA_PVRTC_2BPPV1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_PVRTC1_16X8_UNORM_BLOCK32, - {INTERNAL_SRGB_ALPHA_PVRTC_4BPPV1, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_PVRTC1_16X8_SRGB_BLOCK32, - {INTERNAL_RGBA_PVRTC_4BPPV2, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_PVRTC2_4X4_UNORM_BLOCK8, - {INTERNAL_SRGB_ALPHA_PVRTC_4BPPV2, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_PVRTC2_4X4_SRGB_BLOCK8, - {INTERNAL_RGBA_PVRTC_2BPPV2, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_PVRTC2_8X4_UNORM_BLOCK8, - {INTERNAL_SRGB_ALPHA_PVRTC_2BPPV2, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_PVRTC2_8X4_SRGB_BLOCK8, - - {INTERNAL_RGB_ETC, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_ETC_UNORM_BLOCK8, - {INTERNAL_ATC_RGB, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGB_ATC_UNORM_BLOCK8, - {INTERNAL_ATC_RGBA_EXPLICIT_ALPHA, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ATCA_UNORM_BLOCK16, - {INTERNAL_ATC_RGBA_INTERPOLATED_ALPHA, EXTERNAL_NONE, TYPE_NONE, 0}, //FORMAT_RGBA_ATCI_UNORM_BLOCK16, - - {InternalLuminance8, ExternalLuminance, TYPE_U8, 0}, //FORMAT_L8_UNORM_PACK8, - {InternalAlpha8, ExternalAlpha, TYPE_U8, 0}, //FORMAT_A8_UNORM_PACK8, - {InternalLuminanceAlpha8, ExternalLuminanceAlpha, TYPE_U8, 0}, //FORMAT_LA8_UNORM_PACK8, - {InternalLuminance16, ExternalLuminance, TYPE_U16, 0}, //FORMAT_L16_UNORM_PACK16, - {InternalAlpha16, ExternalAlpha, TYPE_U16, 0}, //FORMAT_A16_UNORM_PACK16, - {InternalLuminanceAlpha16, ExternalLuminanceAlpha, TYPE_U16, 0}, //FORMAT_LA16_UNORM_PACK16, - - {INTERNAL_RGB8_UNORM, ExternalBGRA, TYPE_U8, 0}, //FORMAT_BGRX8_UNORM, - {INTERNAL_SRGB8, ExternalBGRA, TYPE_U8, 0}, //FORMAT_BGRX8_SRGB, - - {INTERNAL_RG3B2, EXTERNAL_RGB, TYPE_UINT8_RG3B2_REV, 0}, //FORMAT_RG3B2_UNORM, - }; - - static_assert(sizeof(Table) / sizeof(Table[0]) == FORMAT_COUNT, "GLI error: format descriptor list doesn't match number of supported formats"); - - std::copy(&Table[0], &Table[0] + FORMAT_COUNT, this->FormatDesc.begin()); - } - - inline gl::target const& gl::translate(gli::target Target) const - { - static gl::target const Table[] = - { - gl::TARGET_1D, - gl::TARGET_1D_ARRAY, - gl::TARGET_2D, - gl::TARGET_2D_ARRAY, - gl::TARGET_3D, - gl::TARGET_RECT, - gl::TARGET_RECT_ARRAY, - gl::TARGET_CUBE, - gl::TARGET_CUBE_ARRAY - }; - static_assert(sizeof(Table) / sizeof(Table[0]) == TARGET_COUNT, "GLI error: target descriptor list doesn't match number of supported targets"); - - return Table[Target]; - } - - inline gl::format gl::translate(gli::format Format, gli::swizzles const& Swizzles) const - { - GLI_ASSERT(Format >= FORMAT_FIRST && Format <= FORMAT_LAST); - - gl::format_desc const& FormatDesc = this->FormatDesc[Format - FORMAT_FIRST]; - - gl::format FormatGL; - FormatGL.Internal = FormatDesc.Internal; - FormatGL.External = FormatDesc.External; - FormatGL.Type = FormatDesc.Type; - FormatGL.Swizzles = this->compute_swizzle(FormatDesc, Swizzles); - return FormatGL; - } - - inline gli::format gl::find(gl::internal_format InternalFormat, gl::external_format ExternalFormat, gl::type_format Type) - { - for(int FormatIndex = FORMAT_FIRST; FormatIndex <= FORMAT_LAST; ++FormatIndex) - { - std::size_t const Index = FormatIndex - FORMAT_FIRST; - if (this->FormatDesc[Index].Internal != InternalFormat) - continue; - if (this->FormatDesc[Index].External != ExternalFormat) - continue; - if (this->FormatDesc[Index].Type != Type) - continue; - - return static_cast(FormatIndex); - } - return gli::FORMAT_UNDEFINED; - } - - inline gl::swizzles gl::compute_swizzle(format_desc const& FormatDesc, gli::swizzles const& Swizzles) const - { - if (!this->has_swizzle(this->Profile)) - return swizzles(gl::SWIZZLE_RED, gl::SWIZZLE_GREEN, gl::SWIZZLE_BLUE, gl::SWIZZLE_ALPHA); - - bool const IsExternalBGRA = ((FormatDesc.Properties & detail::FORMAT_PROPERTY_BGRA_FORMAT_BIT) && !has_swizzle(this->Profile)) || (FormatDesc.Properties & detail::FORMAT_PROPERTY_BGRA_TYPE_BIT); - - return detail::translate(IsExternalBGRA ? gli::swizzles(Swizzles.b, Swizzles.g, Swizzles.r, Swizzles.a) : Swizzles); - } -}//namespace gli diff --git a/external/gli/gli/core/image.inl b/external/gli/gli/core/image.inl deleted file mode 100644 index 061c20b4..00000000 --- a/external/gli/gli/core/image.inl +++ /dev/null @@ -1,251 +0,0 @@ -namespace gli{ -namespace detail -{ - inline size_t texel_linear_addressing - ( - extent1d const& Extent, - extent1d const& TexelCoord - ) - { - GLI_ASSERT(glm::all(glm::lessThan(TexelCoord, Extent))); - - return static_cast(TexelCoord.x); - } - - inline size_t texel_linear_addressing - ( - extent2d const& Extent, - extent2d const& TexelCoord - ) - { - GLI_ASSERT(TexelCoord.x < Extent.x); - GLI_ASSERT(TexelCoord.y < Extent.y); - - return static_cast(TexelCoord.x + Extent.x * TexelCoord.y); - } - - inline size_t texel_linear_addressing - ( - extent3d const& Extent, - extent3d const& TexelCoord - ) - { - GLI_ASSERT(TexelCoord.x < Extent.x); - GLI_ASSERT(TexelCoord.y < Extent.y); - GLI_ASSERT(TexelCoord.z < Extent.z); - - return static_cast(TexelCoord.x + Extent.x * (TexelCoord.y + Extent.y * TexelCoord.z)); - } - - inline size_t texel_morton_addressing - ( - extent1d const& Extent, - extent1d const& TexelCoord - ) - { - GLI_ASSERT(TexelCoord.x < Extent.x); - - return TexelCoord.x; - } - - inline size_t texel_morton_addressing - ( - extent2d const& Extent, - extent2d const& TexelCoord - ) - { - GLI_ASSERT(TexelCoord.x < Extent.x && TexelCoord.x >= 0 && TexelCoord.x < std::numeric_limits::max()); - GLI_ASSERT(TexelCoord.y < Extent.y && TexelCoord.y >= 0 && TexelCoord.y < std::numeric_limits::max()); - - glm::u32vec2 const Input(TexelCoord); - - return static_cast(glm::bitfieldInterleave(Input.x, Input.y)); - } - - inline size_t texel_morton_addressing - ( - extent3d const& Extent, - extent3d const& TexelCoord - ) - { - GLI_ASSERT(TexelCoord.x < Extent.x); - GLI_ASSERT(TexelCoord.y < Extent.y); - GLI_ASSERT(TexelCoord.z < Extent.z); - - glm::u32vec3 const Input(TexelCoord); - - return static_cast(glm::bitfieldInterleave(Input.x, Input.y, Input.z)); - } -}//namespace detail - - inline image::image() - : Format(gli::FORMAT_UNDEFINED) - , BaseLevel(0) - , Data(nullptr) - , Size(0) - {} - - inline image::image - ( - format_type Format, - extent_type const& Extent - ) - : Storage(std::make_shared(Format, Extent, 1, 1, 1)) - , Format(Format) - , BaseLevel(0) - , Data(Storage->data()) - , Size(compute_size(0)) - {} - - inline image::image - ( - std::shared_ptr Storage, - format_type Format, - size_type BaseLayer, - size_type BaseFace, - size_type BaseLevel - ) - : Storage(Storage) - , Format(Format) - , BaseLevel(BaseLevel) - , Data(compute_data(BaseLayer, BaseFace, BaseLevel)) - , Size(compute_size(BaseLevel)) - {} - - inline image::image - ( - image const & Image, - format_type Format - ) - : Storage(Image.Storage) - , Format(Format) - , BaseLevel(Image.BaseLevel) - , Data(Image.Data) - , Size(Image.Size) - { - GLI_ASSERT(block_size(Format) == block_size(Image.format())); - } - - inline bool image::empty() const - { - if(this->Storage.get() == nullptr) - return true; - - return this->Storage->empty(); - } - - inline image::size_type image::size() const - { - GLI_ASSERT(!this->empty()); - - return this->Size; - } - - template - inline image::size_type image::size() const - { - GLI_ASSERT(sizeof(genType) <= this->Storage->block_size()); - - return this->size() / sizeof(genType); - } - - inline image::format_type image::format() const - { - return this->Format; - } - - inline image::extent_type image::extent() const - { - GLI_ASSERT(!this->empty()); - - storage_linear::extent_type const& SrcExtent = this->Storage->extent(this->BaseLevel); - storage_linear::extent_type const& DstExtent = SrcExtent * block_extent(this->format()) / this->Storage->block_extent(); - - return glm::max(DstExtent, storage_linear::extent_type(1)); - } - - inline void* image::data() - { - GLI_ASSERT(!this->empty()); - - return this->Data; - } - - inline void const* image::data() const - { - GLI_ASSERT(!this->empty()); - - return this->Data; - } - - template - inline genType* image::data() - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(this->Storage->block_size() >= sizeof(genType)); - - return reinterpret_cast(this->data()); - } - - template - inline genType const* image::data() const - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(this->Storage->block_size() >= sizeof(genType)); - - return reinterpret_cast(this->data()); - } - - inline void image::clear() - { - GLI_ASSERT(!this->empty()); - - memset(this->data(), 0, this->size()); - } - - template - inline void image::clear(genType const& Texel) - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(this->Storage->block_size() == sizeof(genType)); - - for(size_type TexelIndex = 0; TexelIndex < this->size(); ++TexelIndex) - *(this->data() + TexelIndex) = Texel; - } - - inline image::data_type* image::compute_data(size_type BaseLayer, size_type BaseFace, size_type BaseLevel) - { - size_type const BaseOffset = this->Storage->base_offset(BaseLayer, BaseFace, BaseLevel); - - return this->Storage->data() + BaseOffset; - } - - inline image::size_type image::compute_size(size_type Level) const - { - GLI_ASSERT(!this->empty()); - - return this->Storage->level_size(Level); - } - - template - genType image::load(extent_type const& TexelCoord) - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(!is_compressed(this->format())); - GLI_ASSERT(this->Storage->block_size() == sizeof(genType)); - GLI_ASSERT(glm::all(glm::lessThan(TexelCoord, this->extent()))); - - return *(this->data() + detail::texel_linear_addressing(this->extent(), TexelCoord)); - } - - template - void image::store(extent_type const& TexelCoord, genType const& Data) - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(!is_compressed(this->format())); - GLI_ASSERT(this->Storage->block_size() == sizeof(genType)); - GLI_ASSERT(glm::all(glm::lessThan(TexelCoord, this->extent()))); - - *(this->data() + detail::texel_linear_addressing(this->extent(), TexelCoord)) = Data; - } -}//namespace gli diff --git a/external/gli/gli/core/levels.inl b/external/gli/gli/core/levels.inl deleted file mode 100644 index 0356c0d2..00000000 --- a/external/gli/gli/core/levels.inl +++ /dev/null @@ -1,24 +0,0 @@ -#include -#define GLM_ENABLE_EXPERIMENTAL -#include - -namespace gli -{ - template - inline T levels(vec const& Extent) - { - return glm::log2(compMax(Extent)) + static_cast(1); - } - - template - inline T levels(T Extent) - { - return static_cast(glm::log2(Extent) + static_cast(1)); - } -/* - inline int levels(int Extent) - { - return glm::log2(Extent) + static_cast(1); - } -*/ -}//namespace gli diff --git a/external/gli/gli/core/load.inl b/external/gli/gli/core/load.inl deleted file mode 100644 index dc47722f..00000000 --- a/external/gli/gli/core/load.inl +++ /dev/null @@ -1,55 +0,0 @@ -#include "../load_dds.hpp" -#include "../load_kmg.hpp" -#include "../load_ktx.hpp" -#include "file.hpp" - -namespace gli -{ - /// Load a texture (DDS, KTX or KMG) from memory - inline texture load(char const * Data, std::size_t Size) - { - { - texture Texture = load_dds(Data, Size); - if(!Texture.empty()) - return Texture; - } - { - texture Texture = load_kmg(Data, Size); - if(!Texture.empty()) - return Texture; - } - { - texture Texture = load_ktx(Data, Size); - if(!Texture.empty()) - return Texture; - } - - return texture(); - } - - /// Load a texture (DDS, KTX or KMG) from file - inline texture load(char const * Filename) - { - FILE* File = detail::open_file(Filename, "rb"); - if(!File) - return texture(); - - long Beg = std::ftell(File); - std::fseek(File, 0, SEEK_END); - long End = std::ftell(File); - std::fseek(File, 0, SEEK_SET); - - std::vector Data(static_cast(End - Beg)); - - std::fread(&Data[0], 1, Data.size(), File); - std::fclose(File); - - return load(&Data[0], Data.size()); - } - - /// Load a texture (DDS, KTX or KMG) from file - inline texture load(std::string const & Filename) - { - return load(Filename.c_str()); - } -}//namespace gli diff --git a/external/gli/gli/core/load_dds.inl b/external/gli/gli/core/load_dds.inl deleted file mode 100644 index d8258bfb..00000000 --- a/external/gli/gli/core/load_dds.inl +++ /dev/null @@ -1,326 +0,0 @@ -#include "../dx.hpp" -#include "file.hpp" -#include -#include - -namespace gli{ -namespace detail -{ - static char const FOURCC_DDS[] = {'D', 'D', 'S', ' '}; - - enum dds_cubemap_flag - { - DDSCAPS2_CUBEMAP = 0x00000200, - DDSCAPS2_CUBEMAP_POSITIVEX = 0x00000400, - DDSCAPS2_CUBEMAP_NEGATIVEX = 0x00000800, - DDSCAPS2_CUBEMAP_POSITIVEY = 0x00001000, - DDSCAPS2_CUBEMAP_NEGATIVEY = 0x00002000, - DDSCAPS2_CUBEMAP_POSITIVEZ = 0x00004000, - DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x00008000, - DDSCAPS2_VOLUME = 0x00200000 - }; - - enum - { - DDSCAPS2_CUBEMAP_ALLFACES = DDSCAPS2_CUBEMAP_POSITIVEX | DDSCAPS2_CUBEMAP_NEGATIVEX | DDSCAPS2_CUBEMAP_POSITIVEY | DDSCAPS2_CUBEMAP_NEGATIVEY | DDSCAPS2_CUBEMAP_POSITIVEZ | DDSCAPS2_CUBEMAP_NEGATIVEZ - }; - - enum dds_flag - { - DDSD_CAPS = 0x00000001, - DDSD_HEIGHT = 0x00000002, - DDSD_WIDTH = 0x00000004, - DDSD_PITCH = 0x00000008, - DDSD_PIXELFORMAT = 0x00001000, - DDSD_MIPMAPCOUNT = 0x00020000, - DDSD_LINEARSIZE = 0x00080000, - DDSD_DEPTH = 0x00800000 - }; - - enum dds_surface_flag - { - DDSCAPS_COMPLEX = 0x00000008, - DDSCAPS_MIPMAP = 0x00400000, - DDSCAPS_TEXTURE = 0x00001000 - }; - - struct dds_pixel_format - { - std::uint32_t size; // 32 - dx::ddpf flags; - dx::d3dfmt fourCC; - std::uint32_t bpp; - glm::u32vec4 Mask; - }; - - struct dds_header - { - std::uint32_t Size; - std::uint32_t Flags; - std::uint32_t Height; - std::uint32_t Width; - std::uint32_t Pitch; - std::uint32_t Depth; - std::uint32_t MipMapLevels; - std::uint32_t Reserved1[11]; - dds_pixel_format Format; - std::uint32_t SurfaceFlags; - std::uint32_t CubemapFlags; - std::uint32_t Reserved2[3]; - }; - - static_assert(sizeof(dds_header) == 124, "DDS Header size mismatch"); - - enum d3d10_resource_dimension - { - D3D10_RESOURCE_DIMENSION_UNKNOWN = 0, - D3D10_RESOURCE_DIMENSION_BUFFER = 1, - D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2, - D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3, - D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4 - }; - - enum d3d10_resource_misc_flag - { - D3D10_RESOURCE_MISC_GENERATE_MIPS = 0x01, - D3D10_RESOURCE_MISC_SHARED = 0x02, - D3D10_RESOURCE_MISC_TEXTURECUBE = 0x04, - D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x10, - D3D10_RESOURCE_MISC_GDI_COMPATIBLE = 0x20, - }; - - enum dds_alpha_mode - { - DDS_ALPHA_MODE_UNKNOWN = 0x0, - DDS_ALPHA_MODE_STRAIGHT = 0x1, - DDS_ALPHA_MODE_PREMULTIPLIED = 0x2, - DDS_ALPHA_MODE_OPAQUE = 0x3, - DDS_ALPHA_MODE_CUSTOM = 0x4 - }; - - struct dds_header10 - { - dds_header10() : - Format(dx::DXGI_FORMAT_UNKNOWN), - ResourceDimension(D3D10_RESOURCE_DIMENSION_UNKNOWN), - MiscFlag(0), - ArraySize(0), - AlphaFlags(DDS_ALPHA_MODE_UNKNOWN) - {} - - dx::dxgiFormat Format; - d3d10_resource_dimension ResourceDimension; - std::uint32_t MiscFlag; // D3D10_RESOURCE_MISC_GENERATE_MIPS - std::uint32_t ArraySize; - dds_alpha_mode AlphaFlags; // Should be 0 whenever possible to avoid D3D utility library to fail - }; - - static_assert(sizeof(dds_header10) == 20, "DDS DX10 Extended Header size mismatch"); - - inline target get_target(dds_header const& Header, dds_header10 const& Header10) - { - if((Header.CubemapFlags & detail::DDSCAPS2_CUBEMAP) || (Header10.MiscFlag & detail::D3D10_RESOURCE_MISC_TEXTURECUBE)) - { - if(Header10.ArraySize > 1) - return TARGET_CUBE_ARRAY; - else - return TARGET_CUBE; - } - else if(Header10.ArraySize > 1) - { - if(Header.Flags & detail::DDSD_HEIGHT) - return TARGET_2D_ARRAY; - else - return TARGET_1D_ARRAY; - } - else if(Header10.ResourceDimension == D3D10_RESOURCE_DIMENSION_TEXTURE1D) - return TARGET_1D; - else if(Header10.ResourceDimension == D3D10_RESOURCE_DIMENSION_TEXTURE3D || Header.Flags & detail::DDSD_DEPTH || Header.CubemapFlags & detail::DDSCAPS2_VOLUME) - return TARGET_3D; - else - return TARGET_2D; - } - - // Some formats have multiple fourcc values. This function allows remapping to the default fourcc value of a format - inline dx::d3dfmt remap_four_cc(dx::d3dfmt FourCC) - { - switch(FourCC) - { - default: - return FourCC; - case dx::D3DFMT_BC4U: - return dx::D3DFMT_ATI1; - case dx::D3DFMT_BC4S: - return dx::D3DFMT_AT1N; - case dx::D3DFMT_BC5U: - return dx::D3DFMT_ATI2; - case dx::D3DFMT_BC5S: - return dx::D3DFMT_AT2N; - } - } -}//namespace detail - - inline texture load_dds(char const * Data, std::size_t Size) - { - GLI_ASSERT(Data && (Size >= sizeof(detail::FOURCC_DDS))); - - if(strncmp(Data, detail::FOURCC_DDS, 4) != 0) - return texture(); - std::size_t Offset = sizeof(detail::FOURCC_DDS); - - GLI_ASSERT(Size >= sizeof(detail::dds_header)); - - detail::dds_header const & Header(*reinterpret_cast(Data + Offset)); - Offset += sizeof(detail::dds_header); - - detail::dds_header10 Header10; - if((Header.Format.flags & dx::DDPF_FOURCC) && (Header.Format.fourCC == dx::D3DFMT_DX10 || Header.Format.fourCC == dx::D3DFMT_GLI1)) - { - std::memcpy(&Header10, Data + Offset, sizeof(Header10)); - Offset += sizeof(detail::dds_header10); - } - - dx DX; - - gli::format Format(gli::FORMAT_UNDEFINED); - if((Header.Format.flags & (dx::DDPF_RGB | dx::DDPF_ALPHAPIXELS | dx::DDPF_ALPHA | dx::DDPF_YUV | dx::DDPF_LUMINANCE)) && Format == gli::FORMAT_UNDEFINED && Header.Format.bpp > 0 && Header.Format.bpp < 64) - { - switch(Header.Format.bpp) - { - default: - GLI_ASSERT(0); - break; - case 8: - { - if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_RG4_UNORM_PACK8).Mask))) - Format = FORMAT_RG4_UNORM_PACK8; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_L8_UNORM_PACK8).Mask))) - Format = FORMAT_L8_UNORM_PACK8; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_A8_UNORM_PACK8).Mask))) - Format = FORMAT_A8_UNORM_PACK8; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_R8_UNORM_PACK8).Mask))) - Format = FORMAT_R8_UNORM_PACK8; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_RG3B2_UNORM_PACK8).Mask))) - Format = FORMAT_RG3B2_UNORM_PACK8; - else - GLI_ASSERT(0); - break; - } - case 16: - { - if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_RGBA4_UNORM_PACK16).Mask))) - Format = FORMAT_RGBA4_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_BGRA4_UNORM_PACK16).Mask))) - Format = FORMAT_BGRA4_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_R5G6B5_UNORM_PACK16).Mask))) - Format = FORMAT_R5G6B5_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_B5G6R5_UNORM_PACK16).Mask))) - Format = FORMAT_B5G6R5_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_RGB5A1_UNORM_PACK16).Mask))) - Format = FORMAT_RGB5A1_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_BGR5A1_UNORM_PACK16).Mask))) - Format = FORMAT_BGR5A1_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_LA8_UNORM_PACK8).Mask))) - Format = FORMAT_LA8_UNORM_PACK8; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_RG8_UNORM_PACK8).Mask))) - Format = FORMAT_RG8_UNORM_PACK8; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_L16_UNORM_PACK16).Mask))) - Format = FORMAT_L16_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_A16_UNORM_PACK16).Mask))) - Format = FORMAT_A16_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_R16_UNORM_PACK16).Mask))) - Format = FORMAT_R16_UNORM_PACK16; - else - GLI_ASSERT(0); - break; - } - case 24: - { - if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_RGB8_UNORM_PACK8).Mask))) - Format = FORMAT_RGB8_UNORM_PACK8; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_BGR8_UNORM_PACK8).Mask))) - Format = FORMAT_BGR8_UNORM_PACK8; - else - GLI_ASSERT(0); - break; - } - case 32: - { - if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_BGR8_UNORM_PACK32).Mask))) - Format = FORMAT_BGR8_UNORM_PACK32; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_BGRA8_UNORM_PACK8).Mask))) - Format = FORMAT_BGRA8_UNORM_PACK8; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_RGBA8_UNORM_PACK8).Mask))) - Format = FORMAT_RGBA8_UNORM_PACK8; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_RGB10A2_UNORM_PACK32).Mask))) - Format = FORMAT_RGB10A2_UNORM_PACK32; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_LA16_UNORM_PACK16).Mask))) - Format = FORMAT_LA16_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_RG16_UNORM_PACK16).Mask))) - Format = FORMAT_RG16_UNORM_PACK16; - else if(glm::all(glm::equal(Header.Format.Mask, DX.translate(FORMAT_R32_SFLOAT_PACK32).Mask))) - Format = FORMAT_R32_SFLOAT_PACK32; - else - GLI_ASSERT(0); - break; - } - } - } - else if((Header.Format.flags & dx::DDPF_FOURCC) && (Header.Format.fourCC != dx::D3DFMT_DX10) && (Header.Format.fourCC != dx::D3DFMT_GLI1) && (Format == gli::FORMAT_UNDEFINED)) - { - dx::d3dfmt const FourCC = detail::remap_four_cc(Header.Format.fourCC); - Format = DX.find(FourCC); - } - else if(Header.Format.fourCC == dx::D3DFMT_DX10 || Header.Format.fourCC == dx::D3DFMT_GLI1) - Format = DX.find(Header.Format.fourCC, Header10.Format); - - GLI_ASSERT(Format != gli::FORMAT_UNDEFINED); - - size_t const MipMapCount = (Header.Flags & detail::DDSD_MIPMAPCOUNT) ? Header.MipMapLevels : 1; - size_t FaceCount = 1; - if(Header.CubemapFlags & detail::DDSCAPS2_CUBEMAP) - FaceCount = int(glm::bitCount(Header.CubemapFlags & detail::DDSCAPS2_CUBEMAP_ALLFACES)); - else if(Header10.MiscFlag & detail::D3D10_RESOURCE_MISC_TEXTURECUBE) - FaceCount = 6; - - size_t DepthCount = 1; - if(Header.CubemapFlags & detail::DDSCAPS2_VOLUME) - DepthCount = Header.Depth; - - texture Texture( - get_target(Header, Header10), Format, - texture::extent_type(Header.Width, Header.Height, DepthCount), - std::max(Header10.ArraySize, 1), FaceCount, MipMapCount); - - std::size_t const SourceSize = Offset + Texture.size(); - GLI_ASSERT(SourceSize == Size); - - std::memcpy(Texture.data(), Data + Offset, Texture.size()); - - return Texture; - } - - inline texture load_dds(char const * Filename) - { - FILE* File = detail::open_file(Filename, "rb"); - if(!File) - return texture(); - - long Beg = std::ftell(File); - std::fseek(File, 0, SEEK_END); - long End = std::ftell(File); - std::fseek(File, 0, SEEK_SET); - - std::vector Data(static_cast(End - Beg)); - - std::fread(&Data[0], 1, Data.size(), File); - std::fclose(File); - - return load_dds(&Data[0], Data.size()); - } - - inline texture load_dds(std::string const & Filename) - { - return load_dds(Filename.c_str()); - } -}//namespace gli diff --git a/external/gli/gli/core/load_kmg.inl b/external/gli/gli/core/load_kmg.inl deleted file mode 100644 index e2b8a111..00000000 --- a/external/gli/gli/core/load_kmg.inl +++ /dev/null @@ -1,103 +0,0 @@ -#include "file.hpp" -#include -#include - -namespace gli{ -namespace detail -{ - static unsigned char const FOURCC_KMG100[] = {0xAB, 0x4B, 0x49, 0x4D, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A}; - - struct kmgHeader10 - { - std::uint32_t Endianness; - std::uint32_t Format; - std::uint32_t Target; - std::uint32_t SwizzleRed; - std::uint32_t SwizzleGreen; - std::uint32_t SwizzleBlue; - std::uint32_t SwizzleAlpha; - std::uint32_t PixelWidth; - std::uint32_t PixelHeight; - std::uint32_t PixelDepth; - std::uint32_t Layers; - std::uint32_t Levels; - std::uint32_t Faces; - std::uint32_t GenerateMipmaps; - std::uint32_t BaseLevel; - std::uint32_t MaxLevel; - }; - - inline texture load_kmg100(char const * Data, std::size_t Size) - { - detail::kmgHeader10 const & Header(*reinterpret_cast(Data)); - - size_t Offset = sizeof(detail::kmgHeader10); - - texture Texture( - static_cast(Header.Target), - static_cast(Header.Format), - texture::extent_type(Header.PixelWidth, Header.PixelHeight, Header.PixelDepth), - Header.Layers, - Header.Faces, - Header.Levels, - texture::swizzles_type(Header.SwizzleRed, Header.SwizzleGreen, Header.SwizzleBlue, Header.SwizzleAlpha)); - - for(texture::size_type Layer = 0, Layers = Texture.layers(); Layer < Layers; ++Layer) - for(texture::size_type Level = 0, Levels = Texture.levels(); Level < Levels; ++Level) - { - texture::size_type const FaceSize = static_cast(Texture.size(Level)); - for(texture::size_type Face = 0, Faces = Texture.faces(); Face < Faces; ++Face) - { - std::memcpy(Texture.data(Layer, Face, Level), Data + Offset, FaceSize); - - Offset += FaceSize; - GLI_ASSERT(Offset <= Size); - } - } - - return texture( - Texture, Texture.target(), Texture.format(), - Texture.base_layer(), Texture.max_layer(), - Texture.base_face(), Texture.max_face(), - Header.BaseLevel, Header.MaxLevel, - Texture.swizzles()); - } -}//namespace detail - - inline texture load_kmg(char const * Data, std::size_t Size) - { - GLI_ASSERT(Data && (Size >= sizeof(detail::kmgHeader10))); - - // KMG100 - { - if(memcmp(Data, detail::FOURCC_KMG100, sizeof(detail::FOURCC_KMG100)) == 0) - return detail::load_kmg100(Data + sizeof(detail::FOURCC_KMG100), Size - sizeof(detail::FOURCC_KMG100)); - } - - return texture(); - } - - inline texture load_kmg(char const * Filename) - { - FILE* File = detail::open_file(Filename, "rb"); - if(!File) - return texture(); - - long Beg = std::ftell(File); - std::fseek(File, 0, SEEK_END); - long End = std::ftell(File); - std::fseek(File, 0, SEEK_SET); - - std::vector Data(static_cast(End - Beg)); - - std::fread(&Data[0], 1, Data.size(), File); - std::fclose(File); - - return load_kmg(&Data[0], Data.size()); - } - - inline texture load_kmg(std::string const & Filename) - { - return load_kmg(Filename.c_str()); - } -}//namespace gli diff --git a/external/gli/gli/core/load_ktx.inl b/external/gli/gli/core/load_ktx.inl deleted file mode 100644 index 46c7f6e7..00000000 --- a/external/gli/gli/core/load_ktx.inl +++ /dev/null @@ -1,137 +0,0 @@ -#include "../gl.hpp" -#include "file.hpp" -#include -#include - -namespace gli{ -namespace detail -{ - static unsigned char const FOURCC_KTX10[] = {0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A}; - static unsigned char const FOURCC_KTX20[] = {0xAB, 0x4B, 0x54, 0x58, 0x20, 0x32, 0x30, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A}; - - struct ktx_header10 - { - std::uint32_t Endianness; - std::uint32_t GLType; - std::uint32_t GLTypeSize; - std::uint32_t GLFormat; - std::uint32_t GLInternalFormat; - std::uint32_t GLBaseInternalFormat; - std::uint32_t PixelWidth; - std::uint32_t PixelHeight; - std::uint32_t PixelDepth; - std::uint32_t NumberOfArrayElements; - std::uint32_t NumberOfFaces; - std::uint32_t NumberOfMipmapLevels; - std::uint32_t BytesOfKeyValueData; - }; - - inline target get_target(ktx_header10 const& Header) - { - if(Header.NumberOfFaces > 1) - { - if(Header.NumberOfArrayElements > 0) - return TARGET_CUBE_ARRAY; - else - return TARGET_CUBE; - } - else if(Header.NumberOfArrayElements > 0) - { - if(Header.PixelHeight == 0) - return TARGET_1D_ARRAY; - else - return TARGET_2D_ARRAY; - } - else if(Header.PixelHeight == 0) - return TARGET_1D; - else if(Header.PixelDepth > 0) - return TARGET_3D; - else - return TARGET_2D; - } - - inline texture load_ktx10(char const* Data, std::size_t Size) - { - detail::ktx_header10 const & Header(*reinterpret_cast(Data)); - - size_t Offset = sizeof(detail::ktx_header10); - - // Skip key value data - Offset += Header.BytesOfKeyValueData; - - gl GL(gl::PROFILE_KTX); - gli::format const Format = GL.find( - static_cast(Header.GLInternalFormat), - static_cast(Header.GLFormat), - static_cast(Header.GLType)); - GLI_ASSERT(Format != gli::FORMAT_UNDEFINED); - - texture::size_type const BlockSize = block_size(Format); - - texture Texture( - detail::get_target(Header), - Format, - texture::extent_type( - Header.PixelWidth, - std::max(Header.PixelHeight, 1), - std::max(Header.PixelDepth, 1)), - std::max(Header.NumberOfArrayElements, 1), - std::max(Header.NumberOfFaces, 1), - std::max(Header.NumberOfMipmapLevels, 1)); - - for(texture::size_type Level = 0, Levels = Texture.levels(); Level < Levels; ++Level) - { - Offset += sizeof(std::uint32_t); - - for(texture::size_type Layer = 0, Layers = Texture.layers(); Layer < Layers; ++Layer) - for(texture::size_type Face = 0, Faces = Texture.faces(); Face < Faces; ++Face) - { - texture::size_type const FaceSize = Texture.size(Level); - - std::memcpy(Texture.data(Layer, Face, Level), Data + Offset, FaceSize); - - Offset += std::max(BlockSize, glm::ceilMultiple(FaceSize, static_cast(4))); - } - } - - return Texture; - } -}//namespace detail - - inline texture load_ktx(char const* Data, std::size_t Size) - { - GLI_ASSERT(Data && (Size >= sizeof(detail::ktx_header10))); - - // KTX10 - { - if(memcmp(Data, detail::FOURCC_KTX10, sizeof(detail::FOURCC_KTX10)) == 0) - return detail::load_ktx10(Data + sizeof(detail::FOURCC_KTX10), Size - sizeof(detail::FOURCC_KTX10)); - } - - return texture(); - } - - inline texture load_ktx(char const* Filename) - { - FILE* File = detail::open_file(Filename, "rb"); - if(!File) - return texture(); - - long Beg = std::ftell(File); - std::fseek(File, 0, SEEK_END); - long End = std::ftell(File); - std::fseek(File, 0, SEEK_SET); - - std::vector Data(static_cast(End - Beg)); - - std::fread(&Data[0], 1, Data.size(), File); - std::fclose(File); - - return load_ktx(&Data[0], Data.size()); - } - - inline texture load_ktx(std::string const& Filename) - { - return load_ktx(Filename.c_str()); - } -}//namespace gli diff --git a/external/gli/gli/core/make_texture.inl b/external/gli/gli/core/make_texture.inl deleted file mode 100644 index f0eb84de..00000000 --- a/external/gli/gli/core/make_texture.inl +++ /dev/null @@ -1,72 +0,0 @@ -namespace gli -{ - inline gli::texture make_texture1d(format Format, extent1d const& Extent, size_t Levels) - { - return gli::texture(TARGET_1D, Format, texture::extent_type(Extent.x, 1, 1), 1, 1, Levels); - } - - inline gli::texture make_texture1d(format Format, extent1d const& Extent) - { - return gli::texture(TARGET_1D, Format, texture::extent_type(Extent.x, 1, 1), 1, 1, gli::levels(texture::extent_type(Extent.x, 1, 1))); - } - - inline gli::texture make_texture1d_array(format Format, extent1d const& Extent, size_t Layers, size_t Levels) - { - return gli::texture(TARGET_1D_ARRAY, Format, texture::extent_type(Extent.x, 1, 1), Layers, 1, Levels); - } - - inline gli::texture make_texture1d_array(format Format, extent1d const& Extent, size_t Layers) - { - return gli::texture(TARGET_1D_ARRAY, Format, texture::extent_type(Extent.x, 1, 1), Layers, 1, gli::levels(texture::extent_type(Extent.x, 1, 1))); - } - - inline gli::texture make_texture2d(format Format, extent2d const& Extent, size_t Levels) - { - return gli::texture(TARGET_2D, Format, texture::extent_type(Extent, 1), 1, 1, Levels); - } - - inline gli::texture make_texture2d(format Format, extent2d const& Extent) - { - return gli::texture(TARGET_2D, Format, texture::extent_type(Extent, 1), 1, 1, gli::levels(texture::extent_type(Extent, 1))); - } - - inline gli::texture make_texture2d_array(format Format, extent2d const& Extent, size_t Layer, size_t Levels) - { - return gli::texture(TARGET_2D_ARRAY, Format, texture::extent_type(Extent, 1), Layer, 1, Levels); - } - - inline gli::texture make_texture2d_array(format Format, extent2d const& Extent, size_t Layer) - { - return gli::texture(TARGET_2D_ARRAY, Format, texture::extent_type(Extent, 1), Layer, 1, gli::levels(texture::extent_type(Extent, 1))); - } - - inline gli::texture make_texture3d(format Format, extent3d const& Extent, size_t Levels) - { - return gli::texture(TARGET_3D, Format, texture::extent_type(Extent), 1, 1, Levels); - } - - inline gli::texture make_texture3d(format Format, extent3d const& Extent) - { - return gli::texture(TARGET_3D, Format, texture::extent_type(Extent), 1, 1, gli::levels(texture::extent_type(Extent))); - } - - inline gli::texture make_texture_cube(format Format, extent2d const& Extent, size_t Levels) - { - return gli::texture(TARGET_CUBE, Format, texture::extent_type(Extent, 1), 1, 6, Levels); - } - - inline gli::texture make_texture_cube(format Format, extent2d const& Extent) - { - return gli::texture(TARGET_CUBE, Format, texture::extent_type(Extent, 1), 1, 6, gli::levels(texture::extent_type(Extent, 1))); - } - - inline gli::texture make_texture_cube_array(format Format, extent2d const& Extent, size_t Layer, size_t Levels) - { - return gli::texture(TARGET_CUBE_ARRAY, Format, texture::extent_type(Extent, 1), Layer, 6, Levels); - } - - inline gli::texture make_texture_cube_array(format Format, extent2d const& Extent, size_t Layer) - { - return gli::texture(TARGET_CUBE_ARRAY, Format, texture::extent_type(Extent, 1), Layer, 6, gli::levels(texture::extent_type(Extent, 1))); - } -}//namespace gli diff --git a/external/gli/gli/core/mipmaps_compute.hpp b/external/gli/gli/core/mipmaps_compute.hpp deleted file mode 100644 index 3c025e86..00000000 --- a/external/gli/gli/core/mipmaps_compute.hpp +++ /dev/null @@ -1,116 +0,0 @@ -#pragma once - -#include "filter_compute.hpp" - -namespace gli{ -namespace detail -{ - template - inline void generate_mipmaps_1d - ( - texture_type & Texture, fetch_func Fetch, write_func Write, - typename texture_type::size_type BaseLayer, typename texture_type::size_type MaxLayer, - typename texture_type::size_type BaseFace, typename texture_type::size_type MaxFace, - typename texture_type::size_type BaseLevel, typename texture_type::size_type MaxLevel, - filter Min - ) - { - typedef typename detail::interpolate::type interpolate_type; - typedef typename texture_type::extent_type extent_type; - typedef typename texture_type::size_type size_type; - typedef typename extent_type::value_type component_type; - typedef typename detail::filterBase::filterFunc filter_func; - - filter_func const Filter = detail::get_filter(FILTER_NEAREST, Min, false); - GLI_ASSERT(Filter); - - for(size_type Layer = BaseLayer; Layer <= MaxLayer; ++Layer) - for(size_type Face = BaseFace; Face <= MaxFace; ++Face) - for(size_type Level = BaseLevel; Level < MaxLevel; ++Level) - { - extent_type const& ExtentDst = Texture.extent(Level + 1); - normalized_type const& Scale = normalized_type(1) / normalized_type(max(ExtentDst - extent_type(1), extent_type(1))); - - for(component_type i = 0; i < ExtentDst.x; ++i) - { - normalized_type const& SamplePosition(normalized_type(static_cast(i)) * Scale); - texel_type const& Texel = Filter(Texture, Fetch, SamplePosition, Layer, Face, static_cast(Level), texel_type(0)); - Write(Texture, extent_type(i), Layer, Face, Level + 1, Texel); - } - } - } - - template - inline void generate_mipmaps_2d - ( - texture_type & Texture, fetch_func Fetch, write_func Write, - typename texture_type::size_type BaseLayer, typename texture_type::size_type MaxLayer, - typename texture_type::size_type BaseFace, typename texture_type::size_type MaxFace, - typename texture_type::size_type BaseLevel, typename texture_type::size_type MaxLevel, - filter Min - ) - { - typedef typename detail::interpolate::type interpolate_type; - typedef typename texture_type::extent_type extent_type; - typedef typename texture_type::size_type size_type; - typedef typename extent_type::value_type component_type; - typedef typename detail::filterBase::filterFunc filter_func; - - filter_func const Filter = detail::get_filter(FILTER_NEAREST, Min, false); - GLI_ASSERT(Filter); - - for(size_type Layer = BaseLayer; Layer <= MaxLayer; ++Layer) - for(size_type Face = BaseFace; Face <= MaxFace; ++Face) - for(size_type Level = BaseLevel; Level < MaxLevel; ++Level) - { - extent_type const& ExtentDst = Texture.extent(Level + 1); - normalized_type const& Scale = normalized_type(1) / normalized_type(max(ExtentDst - extent_type(1), extent_type(1))); - - for(component_type j = 0; j < ExtentDst.y; ++j) - for(component_type i = 0; i < ExtentDst.x; ++i) - { - normalized_type const& SamplePosition(normalized_type(i, j) * Scale); - texel_type const& Texel = Filter(Texture, Fetch, SamplePosition, Layer, Face, static_cast(Level), texel_type(0)); - Write(Texture, extent_type(i, j), Layer, Face, Level + 1, Texel); - } - } - } - - template - inline void generate_mipmaps_3d - ( - texture_type & Texture, fetch_func Fetch, write_func Write, - typename texture_type::size_type BaseLayer, typename texture_type::size_type MaxLayer, - typename texture_type::size_type BaseFace, typename texture_type::size_type MaxFace, - typename texture_type::size_type BaseLevel, typename texture_type::size_type MaxLevel, - filter Min - ) - { - typedef typename detail::interpolate::type interpolate_type; - typedef typename texture_type::extent_type extent_type; - typedef typename texture_type::size_type size_type; - typedef typename extent_type::value_type component_type; - typedef typename detail::filterBase::filterFunc filter_func; - - filter_func const Filter = detail::get_filter(FILTER_NEAREST, Min, false); - GLI_ASSERT(Filter); - - for(size_type Layer = BaseLayer; Layer <= MaxLayer; ++Layer) - for(size_type Face = BaseFace; Face <= MaxFace; ++Face) - for(size_type Level = BaseLevel; Level < MaxLevel; ++Level) - { - extent_type const& ExtentDst = Texture.extent(Level + 1); - normalized_type const& Scale = normalized_type(1) / normalized_type(max(ExtentDst - extent_type(1), extent_type(1))); - - for(component_type k = 0; k < ExtentDst.z; ++k) - for(component_type j = 0; j < ExtentDst.y; ++j) - for(component_type i = 0; i < ExtentDst.x; ++i) - { - normalized_type const& SamplePosition(normalized_type(i, j, k) * Scale); - texel_type const& Texel = Filter(Texture, Fetch, SamplePosition, Layer, Face, static_cast(Level), texel_type(0)); - Write(Texture, extent_type(i, j, k), Layer, Face, Level + 1, Texel); - } - } - } -}//namespace detail -}//namespace gli diff --git a/external/gli/gli/core/reduce.inl b/external/gli/gli/core/reduce.inl deleted file mode 100644 index fd127212..00000000 --- a/external/gli/gli/core/reduce.inl +++ /dev/null @@ -1,533 +0,0 @@ -#include "../sampler1d.hpp" -#include "../sampler1d_array.hpp" -#include "../sampler2d.hpp" -#include "../sampler2d_array.hpp" -#include "../sampler3d.hpp" -#include "../sampler_cube.hpp" -#include "../sampler_cube_array.hpp" - -namespace gli -{ - template - struct binary_func - { - typedef vec<4, val_type>(*type)(vec<4, val_type> const& A, vec<4, val_type> const& B); - }; - -namespace detail -{ - inline bool are_compatible(texture const& A, texture const& B) - { - return all(equal(A.extent(), B.extent())) && A.levels() == B.levels() && A.faces() == B.faces() && A.layers() == B.layers(); - } - - template - struct compute_sampler_reduce_1d - { - typedef typename binary_func::type func_type; - typedef texture1d::size_type size_type; - typedef texture1d::extent_type extent_type; - - static vec<4, val_type> call(texture1d const& A, texture1d const& B, binary_func TexelFunc, binary_func ReduceFunc) - { - GLI_ASSERT(are_compatible(A, B)); - - sampler1d const SamplerA(A, gli::WRAP_CLAMP_TO_EDGE), SamplerB(B, gli::WRAP_CLAMP_TO_EDGE); - extent_type TexelIndex(0); - vec<4, val_type> Result(TexelFunc(SamplerA.template fetch(TexelIndex, 0), SamplerB.template fetch(TexelIndex, 0))); - - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - SamplerA.template fetch(TexelIndex, LevelIndex), - SamplerB.template fetch(TexelIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_sampler_reduce_1d_array - { - typedef typename binary_func::type func_type; - typedef texture1d_array::size_type size_type; - typedef texture1d_array::extent_type extent_type; - - static vec<4, val_type> call(texture1d_array const& A, texture1d_array const& B, binary_func TexelFunc, binary_func ReduceFunc) - { - GLI_ASSERT(are_compatible(A, B)); - - sampler1d_array const SamplerA(A, gli::WRAP_CLAMP_TO_EDGE), SamplerB(B, gli::WRAP_CLAMP_TO_EDGE); - extent_type TexelIndex(0); - vec<4, val_type> Result(TexelFunc(SamplerA.template fetch(TexelIndex, 0, 0), SamplerB.template fetch(TexelIndex, 0, 0))); - - for(size_type LayerIndex = 0, LayerCount = A.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - SamplerA.template fetch(TexelIndex, LayerIndex, LevelIndex), - SamplerB.template fetch(TexelIndex, LayerIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_sampler_reduce_2d - { - typedef typename binary_func::type func_type; - typedef texture2d::size_type size_type; - typedef texture2d::extent_type extent_type; - - static vec<4, val_type> call(texture2d const& A, texture2d const& B, binary_func TexelFunc, binary_func ReduceFunc) - { - GLI_ASSERT(are_compatible(A, B)); - - sampler2d const SamplerA(A, gli::WRAP_CLAMP_TO_EDGE), SamplerB(B, gli::WRAP_CLAMP_TO_EDGE); - extent_type TexelIndex(0); - vec<4, val_type> Result(TexelFunc(SamplerA.template fetch(TexelIndex, 0), SamplerB.template fetch(TexelIndex, 0))); - - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - SamplerA.template fetch(TexelIndex, LevelIndex), - SamplerB.template fetch(TexelIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_sampler_reduce_2d_array - { - typedef typename binary_func::type func_type; - typedef texture2d_array::size_type size_type; - typedef texture2d_array::extent_type extent_type; - - static vec<4, val_type> call(texture2d_array const& A, texture2d_array const& B, binary_func TexelFunc, binary_func ReduceFunc) - { - GLI_ASSERT(are_compatible(A, B)); - - sampler2d_array const SamplerA(A, gli::WRAP_CLAMP_TO_EDGE), SamplerB(B, gli::WRAP_CLAMP_TO_EDGE); - extent_type TexelIndex(0); - vec<4, val_type> Result(TexelFunc(SamplerA.template fetch(TexelIndex, 0, 0), SamplerB.template fetch(TexelIndex, 0, 0))); - - for(size_type LayerIndex = 0, LayerCount = A.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - SamplerA.template fetch(TexelIndex, LayerIndex, LevelIndex), - SamplerB.template fetch(TexelIndex, LayerIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_sampler_reduce_3d - { - typedef typename binary_func::type func_type; - typedef texture3d::size_type size_type; - typedef texture3d::extent_type extent_type; - - static vec<4, val_type> call(texture3d const& A, texture3d const& B, binary_func TexelFunc, binary_func ReduceFunc) - { - GLI_ASSERT(are_compatible(A, B)); - - sampler3d const SamplerA(A, gli::WRAP_CLAMP_TO_EDGE), SamplerB(B, gli::WRAP_CLAMP_TO_EDGE); - extent_type TexelIndex(0); - vec<4, val_type> Result(TexelFunc(SamplerA.template fetch(TexelIndex, 0), SamplerB.template fetch(TexelIndex, 0))); - - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.z = 0; TexelIndex.z < TexelCount.z; ++TexelIndex.z) - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - SamplerA.template fetch(TexelIndex, LevelIndex), - SamplerB.template fetch(TexelIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_sampler_reduce_cube - { - typedef typename binary_func::type func_type; - typedef texture_cube::size_type size_type; - typedef texture_cube::extent_type extent_type; - - static vec<4, val_type> call(texture_cube const& A, texture_cube const& B, binary_func TexelFunc, binary_func ReduceFunc) - { - GLI_ASSERT(are_compatible(A, B)); - - sampler_cube const SamplerA(A, gli::WRAP_CLAMP_TO_EDGE), SamplerB(B, gli::WRAP_CLAMP_TO_EDGE); - extent_type TexelIndex(0); - vec<4, val_type> Result(TexelFunc(SamplerA.template fetch(TexelIndex, 0, 0), SamplerB.template fetch(TexelIndex, 0, 0))); - - for(size_type FaceIndex = 0, FaceCount = A.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - SamplerA.template fetch(TexelIndex, FaceIndex, LevelIndex), - SamplerB.template fetch(TexelIndex, FaceIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_sampler_reduce_cube_array - { - typedef typename binary_func::type func_type; - typedef texture_cube_array::size_type size_type; - typedef texture_cube_array::extent_type extent_type; - - static vec<4, val_type> call(texture_cube_array const& A, texture_cube_array const& B, binary_func TexelFunc, binary_func ReduceFunc) - { - GLI_ASSERT(are_compatible(A, B)); - - sampler_cube_array const SamplerA(A, gli::WRAP_CLAMP_TO_EDGE), SamplerB(B, gli::WRAP_CLAMP_TO_EDGE); - extent_type TexelIndex(0); - vec<4, val_type> Result(TexelFunc(SamplerA.template fetch(TexelIndex, 0, 0, 0), SamplerB.template fetch(TexelIndex, 0, 0, 0))); - - for(size_type LayerIndex = 0, LayerCount = A.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_type FaceIndex = 0, FaceCount = A.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - SamplerA.template fetch(TexelIndex, LayerIndex, FaceIndex, LevelIndex), - SamplerB.template fetch(TexelIndex, LayerIndex, FaceIndex, LevelIndex))); - } - } - - return Result; - } - }; -}//namespace detail - -namespace detail -{ - template - struct compute_reduce_1d - { - typedef typename reduce_func::type func_type; - typedef texture1d::size_type size_type; - typedef texture1d::extent_type extent_type; - - static vec_type call(texture1d const& A, texture1d const& B, func_type TexelFunc, func_type ReduceFunc) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - extent_type TexelIndex(0); - vec_type Result(TexelFunc( - A.template load(TexelIndex, 0), - B.template load(TexelIndex, 0))); - - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - A.template load(TexelIndex, LevelIndex), - B.template load(TexelIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_reduce_1d_array - { - typedef typename reduce_func::type func_type; - typedef texture1d_array::size_type size_type; - typedef texture1d_array::extent_type extent_type; - - static vec_type call(texture1d_array const& A, texture1d_array const& B, func_type TexelFunc, func_type ReduceFunc) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - extent_type TexelIndex(0); - vec_type Result(TexelFunc( - A.template load(TexelIndex, 0), - B.template load(TexelIndex, 0))); - - for(size_type LayerIndex = 0, LayerCount = A.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - A.template load(TexelIndex, LayerIndex, LevelIndex), - B.template load(TexelIndex, LayerIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_reduce_2d - { - typedef typename reduce_func::type func_type; - typedef texture2d::size_type size_type; - typedef texture2d::extent_type extent_type; - - static vec_type call(texture2d const& A, texture2d const& B, func_type TexelFunc, func_type ReduceFunc) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - extent_type TexelIndex(0); - vec_type Result(TexelFunc( - A.template load(TexelIndex, 0), - B.template load(TexelIndex, 0))); - - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - A.template load(TexelIndex, LevelIndex), - B.template load(TexelIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_reduce_2d_array - { - typedef typename reduce_func::type func_type; - typedef texture2d_array::size_type size_type; - typedef texture2d_array::extent_type extent_type; - - static vec_type call(texture2d_array const& A, texture2d_array const& B, func_type TexelFunc, func_type ReduceFunc) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - extent_type TexelIndex(0); - vec_type Result(TexelFunc( - A.template load(TexelIndex, 0, 0), - B.template load(TexelIndex, 0, 0))); - - for(size_type LayerIndex = 0, LayerCount = A.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - A.template load(TexelIndex, LayerIndex, LevelIndex), - B.template load(TexelIndex, LayerIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_reduce_3d - { - typedef typename reduce_func::type func_type; - typedef texture3d::size_type size_type; - typedef texture3d::extent_type extent_type; - - static vec_type call(texture3d const& A, texture3d const& B, func_type TexelFunc, func_type ReduceFunc) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - extent_type TexelIndex(0); - vec_type Result(TexelFunc( - A.template load(TexelIndex, 0), - B.template load(TexelIndex, 0))); - - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.z = 0; TexelIndex.z < TexelCount.z; ++TexelIndex.z) - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - A.template load(TexelIndex, LevelIndex), - B.template load(TexelIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_reduce_cube - { - typedef typename reduce_func::type func_type; - typedef texture_cube::size_type size_type; - typedef texture_cube::extent_type extent_type; - - static vec_type call(texture_cube const& A, texture_cube const& B, func_type TexelFunc, func_type ReduceFunc) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - extent_type TexelIndex(0); - vec_type Result(TexelFunc( - A.load(TexelIndex, 0, 0), - B.load(TexelIndex, 0, 0))); - - for(size_type FaceIndex = 0, FaceCount = A.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - A.template load(TexelIndex, FaceIndex, LevelIndex), - B.template load(TexelIndex, FaceIndex, LevelIndex))); - } - } - - return Result; - } - }; - - template - struct compute_reduce_cube_array - { - typedef typename reduce_func::type func_type; - typedef texture_cube_array::size_type size_type; - typedef texture_cube_array::extent_type extent_type; - - static vec_type call(texture_cube_array const& A, texture_cube_array const& B, func_type TexelFunc, func_type ReduceFunc) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - extent_type TexelIndex(0); - vec_type Result(TexelFunc( - A.load(TexelIndex, 0, 0, 0), - B.load(TexelIndex, 0, 0 ,0))); - - for(size_type LayerIndex = 0, LayerCount = A.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_type FaceIndex = 0, FaceCount = A.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Result = ReduceFunc(Result, TexelFunc( - A.template load(TexelIndex, LayerIndex, FaceIndex, LevelIndex), - B.template load(TexelIndex, LayerIndex, FaceIndex, LevelIndex))); - } - } - - return Result; - } - }; -}//namepsace detail - -template -inline vec_type reduce(texture1d const& In0, texture1d const& In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc) -{ - return detail::compute_reduce_1d::call(In0, In1, TexelFunc, ReduceFunc); -} - -template -inline vec_type reduce(texture1d_array const& In0, texture1d_array const& In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc) -{ - return detail::compute_reduce_1d_array::call(In0, In1, TexelFunc, ReduceFunc); -} - -template -inline vec_type reduce(texture2d const& In0, texture2d const& In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc) -{ - return detail::compute_reduce_2d::call(In0, In1, TexelFunc, ReduceFunc); -} - -template -inline vec_type reduce(texture2d_array const& In0, texture2d_array const& In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc) -{ - return detail::compute_reduce_2d_array::call(In0, In1, TexelFunc, ReduceFunc); -} - -template -inline vec_type reduce(texture3d const& In0, texture3d const& In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc) -{ - return detail::compute_reduce_3d::call(In0, In1, TexelFunc, ReduceFunc); -} - -template -inline vec_type reduce(texture_cube const& In0, texture_cube const& In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc) -{ - return detail::compute_reduce_cube::call(In0, In1, TexelFunc, ReduceFunc); -} - -template -inline vec_type reduce(texture_cube_array const& In0, texture_cube_array const& In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc) -{ - return detail::compute_reduce_cube_array::call(In0, In1, TexelFunc, ReduceFunc); -} -}//namespace gli - diff --git a/external/gli/gli/core/s3tc.hpp b/external/gli/gli/core/s3tc.hpp deleted file mode 100644 index fea44111..00000000 --- a/external/gli/gli/core/s3tc.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/// @brief Include to compress and decompress s3tc blocks -/// @file gli/s3tc.hpp - -#pragma once - -#include - -namespace gli -{ - namespace detail - { - struct dxt1_block { - glm::uint16 Color0; - glm::uint16 Color1; - glm::uint8 Row[4]; - }; - - struct dxt3_block { - glm::uint16 AlphaRow[4]; - glm::uint16 Color0; - glm::uint16 Color1; - glm::uint8 Row[4]; - }; - - struct dxt5_block { - glm::uint8 Alpha[2]; - glm::uint8 AlphaBitmap[6]; - glm::uint16 Color0; - glm::uint16 Color1; - glm::uint8 Row[4]; - }; - - struct texel_block4x4 { - // row x col - glm::vec4 Texel[4][4]; - }; - - glm::vec4 decompress_dxt1(const dxt1_block &Block, const extent2d &BlockTexelCoord); - texel_block4x4 decompress_dxt1_block(const dxt1_block &Block); - - glm::vec4 decompress_dxt3(const dxt3_block &Block, const extent2d &BlockTexelCoord); - texel_block4x4 decompress_dxt3_block(const dxt3_block &Block); - - glm::vec4 decompress_dxt5(const dxt5_block &Block, const extent2d &BlockTexelCoord); - texel_block4x4 decompress_dxt5_block(const dxt5_block &Block); - - }//namespace detail -}//namespace gli - -#include "./s3tc.inl" diff --git a/external/gli/gli/core/s3tc.inl b/external/gli/gli/core/s3tc.inl deleted file mode 100644 index 5bcaf854..00000000 --- a/external/gli/gli/core/s3tc.inl +++ /dev/null @@ -1,208 +0,0 @@ -#include -#include - -namespace gli -{ - namespace detail - { - inline glm::vec4 decompress_dxt1(const dxt1_block &Block, const extent2d &BlockTexelCoord) - { - glm::vec4 Color[4]; - - Color[0] = glm::vec4(unpackUnorm1x5_1x6_1x5(Block.Color0), 1.0f); - std::swap(Color[0].r, Color[0].b); - Color[1] = glm::vec4(unpackUnorm1x5_1x6_1x5(Block.Color1), 1.0f); - std::swap(Color[1].r, Color[1].b); - - if(Block.Color0 > Block.Color1) - { - Color[2] = (2.0f / 3.0f) * Color[0] + (1.0f / 3.0f) * Color[1]; - Color[3] = (1.0f / 3.0f) * Color[0] + (2.0f / 3.0f) * Color[1]; - } - else - { - Color[2] = (Color[0] + Color[1]) / 2.0f; - Color[3] = glm::vec4(0.0f); - } - - glm::uint8 ColorIndex = (Block.Row[BlockTexelCoord.y] >> (BlockTexelCoord.x * 2)) & 0x3; - return Color[ColorIndex]; - } - - inline texel_block4x4 decompress_dxt1_block(const dxt1_block &Block) - { - glm::vec4 Color[4]; - - Color[0] = glm::vec4(unpackUnorm1x5_1x6_1x5(Block.Color0), 1.0f); - std::swap(Color[0].r, Color[0].b); - Color[1] = glm::vec4(unpackUnorm1x5_1x6_1x5(Block.Color1), 1.0f); - std::swap(Color[1].r, Color[1].b); - - if(Block.Color0 > Block.Color1) - { - Color[2] = (2.0f / 3.0f) * Color[0] + (1.0f / 3.0f) * Color[1]; - Color[3] = (1.0f / 3.0f) * Color[0] + (2.0f / 3.0f) * Color[1]; - } - else - { - Color[2] = (Color[0] + Color[1]) / 2.0f; - Color[3] = glm::vec4(0.0f); - } - - texel_block4x4 TexelBlock; - for(glm::uint8 Row = 0; Row < 4; ++Row) - { - for(glm::uint8 Col = 0; Col < 4; ++Col) - { - glm::uint8 ColorIndex = (Block.Row[Row] >> (Col * 2)) & 0x3; - TexelBlock.Texel[Row][Col] = Color[ColorIndex]; - } - } - - return TexelBlock; - } - - inline glm::vec4 decompress_dxt3(const dxt3_block &Block, const extent2d &BlockTexelCoord) - { - glm::vec3 Color[4]; - - Color[0] = glm::vec3(unpackUnorm1x5_1x6_1x5(Block.Color0)); - std::swap(Color[0].r, Color[0].b); - Color[1] = glm::vec3(unpackUnorm1x5_1x6_1x5(Block.Color1)); - std::swap(Color[1].r, Color[1].b); - - Color[2] = (2.0f / 3.0f) * Color[0] + (1.0f / 3.0f) * Color[1]; - Color[3] = (1.0f / 3.0f) * Color[0] + (2.0f / 3.0f) * Color[1]; - - glm::uint8 ColorIndex = (Block.Row[BlockTexelCoord.y] >> (BlockTexelCoord.x * 2)) & 0x3; - float Alpha = ((Block.AlphaRow[BlockTexelCoord.y] >> (BlockTexelCoord.x * 4)) & 0xF) / 15.0f; - - return glm::vec4(Color[ColorIndex], Alpha); - } - - inline texel_block4x4 decompress_dxt3_block(const dxt3_block &Block) - { - glm::vec3 Color[4]; - - Color[0] = glm::vec3(unpackUnorm1x5_1x6_1x5(Block.Color0)); - std::swap(Color[0].r, Color[0].b); - Color[1] = glm::vec3(unpackUnorm1x5_1x6_1x5(Block.Color1)); - std::swap(Color[1].r, Color[1].b); - - Color[2] = (2.0f / 3.0f) * Color[0] + (1.0f / 3.0f) * Color[1]; - Color[3] = (1.0f / 3.0f) * Color[0] + (2.0f / 3.0f) * Color[1]; - - texel_block4x4 TexelBlock; - for(glm::uint8 Row = 0; Row < 4; ++Row) - { - for(glm::uint8 Col = 0; Col < 4; ++Col) - { - glm::uint8 ColorIndex = (Block.Row[Row] >> (Col * 2)) & 0x3; - float Alpha = ((Block.AlphaRow[Row] >> (Col * 4)) & 0xF) / 15.0f; - TexelBlock.Texel[Row][Col] = glm::vec4(Color[ColorIndex], Alpha); - } - } - - return TexelBlock; - } - - inline glm::vec4 decompress_dxt5(const dxt5_block &Block, const extent2d &BlockTexelCoord) - { - glm::vec3 Color[4]; - float Alpha[8]; - - Color[0] = glm::vec3(unpackUnorm1x5_1x6_1x5(Block.Color0)); - std::swap(Color[0].r, Color[0].b); - Color[1] = glm::vec3(unpackUnorm1x5_1x6_1x5(Block.Color1)); - std::swap(Color[1].r, Color[1].b); - - Color[2] = (2.0f / 3.0f) * Color[0] + (1.0f / 3.0f) * Color[1]; - Color[3] = (1.0f / 3.0f) * Color[0] + (2.0f / 3.0f) * Color[1]; - - glm::uint8 ColorIndex = (Block.Row[BlockTexelCoord.y] >> (BlockTexelCoord.x * 2)) & 0x3; - - Alpha[0] = Block.Alpha[0] / 255.0f; - Alpha[1] = Block.Alpha[1] / 255.0f; - - if(Alpha[0] > Alpha[1]) - { - Alpha[2] = (6.0f / 7.0f) * Alpha[0] + (1.0f / 7.0f) * Alpha[1]; - Alpha[3] = (5.0f / 7.0f) * Alpha[0] + (2.0f / 7.0f) * Alpha[1]; - Alpha[4] = (4.0f / 7.0f) * Alpha[0] + (3.0f / 7.0f) * Alpha[1]; - Alpha[5] = (3.0f / 7.0f) * Alpha[0] + (4.0f / 7.0f) * Alpha[1]; - Alpha[6] = (2.0f / 7.0f) * Alpha[0] + (5.0f / 7.0f) * Alpha[1]; - Alpha[7] = (1.0f / 7.0f) * Alpha[0] + (6.0f / 7.0f) * Alpha[1]; - } - else - { - Alpha[2] = (4.0f / 5.0f) * Alpha[0] + (1.0f / 5.0f) * Alpha[1]; - Alpha[3] = (3.0f / 5.0f) * Alpha[0] + (2.0f / 5.0f) * Alpha[1]; - Alpha[4] = (2.0f / 5.0f) * Alpha[0] + (3.0f / 5.0f) * Alpha[1]; - Alpha[5] = (1.0f / 5.0f) * Alpha[0] + (4.0f / 5.0f) * Alpha[1]; - Alpha[6] = 0.0f; - Alpha[7] = 1.0f; - } - - glm::uint64 Bitmap; - Bitmap = Block.AlphaBitmap[0] | (Block.AlphaBitmap[1] << 8) | (Block.AlphaBitmap[2] << 16); - Bitmap |= glm::uint64(Block.AlphaBitmap[3] | (Block.AlphaBitmap[4] << 8) | (Block.AlphaBitmap[5] << 16)) << 24; - - glm::uint8 AlphaIndex = (Bitmap >> ((BlockTexelCoord.y * 4 + BlockTexelCoord.x) * 3)) & 0x7; - - return glm::vec4(Color[ColorIndex], Alpha[AlphaIndex]); - } - - inline texel_block4x4 decompress_dxt5_block(const dxt5_block &Block) - { - glm::vec3 Color[4]; - float Alpha[8]; - - Color[0] = glm::vec3(unpackUnorm1x5_1x6_1x5(Block.Color0)); - std::swap(Color[0].r, Color[0].b); - Color[1] = glm::vec3(unpackUnorm1x5_1x6_1x5(Block.Color1)); - std::swap(Color[1].r, Color[1].b); - - Color[2] = (2.0f / 3.0f) * Color[0] + (1.0f / 3.0f) * Color[1]; - Color[3] = (1.0f / 3.0f) * Color[0] + (2.0f / 3.0f) * Color[1]; - - Alpha[0] = Block.Alpha[0] / 255.0f; - Alpha[1] = Block.Alpha[1] / 255.0f; - - if(Alpha[0] > Alpha[1]) - { - Alpha[2] = (6.0f / 7.0f) * Alpha[0] + (1.0f / 7.0f) * Alpha[1]; - Alpha[3] = (5.0f / 7.0f) * Alpha[0] + (2.0f / 7.0f) * Alpha[1]; - Alpha[4] = (4.0f / 7.0f) * Alpha[0] + (3.0f / 7.0f) * Alpha[1]; - Alpha[5] = (3.0f / 7.0f) * Alpha[0] + (4.0f / 7.0f) * Alpha[1]; - Alpha[6] = (2.0f / 7.0f) * Alpha[0] + (5.0f / 7.0f) * Alpha[1]; - Alpha[7] = (1.0f / 7.0f) * Alpha[0] + (6.0f / 7.0f) * Alpha[1]; - } - else - { - Alpha[2] = (4.0f / 5.0f) * Alpha[0] + (1.0f / 5.0f) * Alpha[1]; - Alpha[3] = (3.0f / 5.0f) * Alpha[0] + (2.0f / 5.0f) * Alpha[1]; - Alpha[4] = (2.0f / 5.0f) * Alpha[0] + (3.0f / 5.0f) * Alpha[1]; - Alpha[5] = (1.0f / 5.0f) * Alpha[0] + (4.0f / 5.0f) * Alpha[1]; - Alpha[6] = 0.0f; - Alpha[7] = 1.0f; - } - - glm::uint64 Bitmap; - Bitmap = Block.AlphaBitmap[0] | (Block.AlphaBitmap[1] << 8) | (Block.AlphaBitmap[2] << 16); - Bitmap |= glm::uint64(Block.AlphaBitmap[3] | (Block.AlphaBitmap[4] << 8) | (Block.AlphaBitmap[5] << 16)) << 24; - - texel_block4x4 TexelBlock; - for(glm::uint8 Row = 0; Row < 4; ++Row) - { - for(glm::uint8 Col = 0; Col < 4; ++Col) - { - glm::uint8 ColorIndex = (Block.Row[Row] >> (Col * 2)) & 0x3; - glm::uint8 AlphaIndex = (Bitmap >> ((Row * 4 + Col) * 3)) & 0x7; - TexelBlock.Texel[Row][Col] = glm::vec4(Color[ColorIndex], Alpha[AlphaIndex]); - } - } - - return TexelBlock; - } - }//namespace detail -}//namespace gli diff --git a/external/gli/gli/core/sampler.inl b/external/gli/gli/core/sampler.inl deleted file mode 100644 index e0b64631..00000000 --- a/external/gli/gli/core/sampler.inl +++ /dev/null @@ -1,35 +0,0 @@ -#define GLM_ENABLE_EXPERIMENTAL -#include - -namespace gli{ -namespace detail -{ - template - inline T passThrought(T const & SampleCoord) - { - return SampleCoord; - } -}//namespace detail - - inline sampler::sampler(wrap Wrap, filter Mip, filter Min) - : Wrap(get_func(Wrap)) - , Mip(Mip) - , Min(Min) - {} - - inline sampler::wrap_type sampler::get_func(wrap WrapMode) const - { - static wrap_type Table[] = - { - glm::clamp, - detail::passThrought, - glm::repeat, - glm::mirrorRepeat, - glm::mirrorClamp, - glm::mirrorClamp - }; - static_assert(sizeof(Table) / sizeof(Table[0]) == WRAP_COUNT, "Table needs to be updated"); - - return Table[WrapMode]; - } -}//namespace gli diff --git a/external/gli/gli/core/sampler1d.inl b/external/gli/gli/core/sampler1d.inl deleted file mode 100644 index 7047cc51..00000000 --- a/external/gli/gli/core/sampler1d.inl +++ /dev/null @@ -1,82 +0,0 @@ -#include "clear.hpp" -#include - -namespace gli -{ - template - inline sampler1d::sampler1d(texture_type const & Texture, wrap Wrap, filter Mip, filter Min, texel_type const & BorderColor) - : sampler(Wrap, Texture.levels() > 1 ? Mip : FILTER_NEAREST, Min) - , Texture(Texture) - , Convert(detail::convert::call(this->Texture.format())) - , BorderColor(BorderColor) - , Filter(detail::get_filter(Mip, Min, is_border(Wrap))) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(!is_compressed(Texture.format())); - GLI_ASSERT((!std::numeric_limits::is_iec559 && Mip == FILTER_NEAREST && Min == FILTER_NEAREST) || std::numeric_limits::is_iec559); - } - - template - inline typename sampler1d::texture_type const & sampler1d::operator()() const - { - return this->Texture; - } - - template - inline typename sampler1d::texel_type sampler1d::texel_fetch(extent_type const & TexelCoord, size_type const & Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Fetch); - - return this->Convert.Fetch(this->Texture, TexelCoord, 0, 0, Level); - } - - template - inline void sampler1d::texel_write(extent_type const & TexelCoord, size_type const & Level, texel_type const & Texel) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - this->Convert.Write(this->Texture, TexelCoord, 0, 0, Level, Texel); - } - - template - inline void sampler1d::clear(texel_type const & Color) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - detail::clear::call(this->Texture, this->Convert.Write, Color); - } - - template - inline typename sampler1d::texel_type sampler1d::texture_lod(normalized_type const & SampleCoord, level_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(std::numeric_limits::is_iec559); - GLI_ASSERT(this->Filter && this->Convert.Fetch); - - normalized_type const SampleCoordWrap(this->Wrap(SampleCoord.x)); - return this->Filter(this->Texture, this->Convert.Fetch, SampleCoordWrap, size_type(0), size_type(0), Level, this->BorderColor); - } - - template - inline void sampler1d::generate_mipmaps(filter Minification) - { - this->generate_mipmaps(this->Texture.base_level(), this->Texture.max_level(), Minification); - } - - template - inline void sampler1d::generate_mipmaps(size_type BaseLevel, size_type MaxLevel, filter Minification) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(!is_compressed(this->Texture.format())); - GLI_ASSERT(this->Texture.base_level() <= BaseLevel && BaseLevel <= MaxLevel && MaxLevel <= this->Texture.max_level()); - GLI_ASSERT(this->Convert.Fetch && this->Convert.Write); - GLI_ASSERT(Minification >= FILTER_FIRST && Minification <= FILTER_LAST); - - detail::generate_mipmaps_1d( - this->Texture, this->Convert.Fetch, this->Convert.Write, 0, 0, 0, 0, BaseLevel, MaxLevel, Minification); - } -}//namespace gli - diff --git a/external/gli/gli/core/sampler1d_array.inl b/external/gli/gli/core/sampler1d_array.inl deleted file mode 100644 index 3ff9b68f..00000000 --- a/external/gli/gli/core/sampler1d_array.inl +++ /dev/null @@ -1,83 +0,0 @@ -#include "clear.hpp" -#include - -namespace gli -{ - template - inline sampler1d_array::sampler1d_array(texture_type const & Texture, gli::wrap Wrap, filter Mip, filter Min, texel_type const & BorderColor) - : sampler(Wrap, Texture.levels() > 1 ? Mip : FILTER_NEAREST, Min) - , Texture(Texture) - , Convert(detail::convert::call(this->Texture.format())) - , BorderColor(BorderColor) - , Filter(detail::get_filter(Mip, Min, is_border(Wrap))) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(!is_compressed(Texture.format())); - GLI_ASSERT((!std::numeric_limits::is_iec559 && Mip == FILTER_NEAREST && Min == FILTER_NEAREST) || std::numeric_limits::is_iec559); - } - - template - inline typename sampler1d_array::texture_type const & sampler1d_array::operator()() const - { - return this->Texture; - } - - template - inline typename sampler1d_array::texel_type sampler1d_array::texel_fetch(extent_type const & TexelCoord, size_type layer, size_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Fetch); - - return this->Convert.Fetch(this->Texture, TexelCoord, layer, 0, Level); - } - - template - inline void sampler1d_array::texel_write(extent_type const & TexelCoord, size_type layer, size_type Level, texel_type const & Texel) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - this->Convert.Write(this->Texture, TexelCoord, layer, 0, Level, Texel); - } - - template - inline void sampler1d_array::clear(texel_type const & Color) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - detail::clear::call(this->Texture, this->Convert.Write, Color); - } - - template - inline typename sampler1d_array::texel_type sampler1d_array::texture_lod(normalized_type const & SampleCoord, size_type Layer, level_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(std::numeric_limits::is_iec559); - GLI_ASSERT(this->Filter && this->Convert.Fetch); - - normalized_type const SampleCoordWrap(this->Wrap(SampleCoord.x)); - return this->Filter(this->Texture, this->Convert.Fetch, SampleCoordWrap, Layer, size_type(0), Level, this->BorderColor); - } - - template - inline void sampler1d_array::generate_mipmaps(filter Minification) - { - this->generate_mipmaps(this->Texture.base_layer(), this->Texture.max_layer(), this->Texture.base_level(), this->Texture.max_level(), Minification); - } - - template - inline void sampler1d_array::generate_mipmaps(size_type BaseLayer, size_type MaxLayer, size_type BaseLevel, size_type MaxLevel, filter Minification) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(!is_compressed(this->Texture.format())); - GLI_ASSERT(this->Texture.base_layer() <= BaseLayer && BaseLayer <= MaxLayer && MaxLayer <= this->Texture.max_layer()); - GLI_ASSERT(this->Texture.base_level() <= BaseLevel && BaseLevel <= MaxLevel && MaxLevel <= this->Texture.max_level()); - GLI_ASSERT(this->Convert.Fetch && this->Convert.Write); - GLI_ASSERT(Minification >= FILTER_FIRST && Minification <= FILTER_LAST); - - detail::generate_mipmaps_1d( - this->Texture, this->Convert.Fetch, this->Convert.Write, BaseLayer, MaxLayer, 0, 0, BaseLevel, MaxLevel, Minification); - } -}//namespace gli - diff --git a/external/gli/gli/core/sampler2d.inl b/external/gli/gli/core/sampler2d.inl deleted file mode 100644 index 3dbd2478..00000000 --- a/external/gli/gli/core/sampler2d.inl +++ /dev/null @@ -1,103 +0,0 @@ -#include "clear.hpp" -#include -#include -#include - -namespace gli -{ - template - inline sampler2d::sampler2d(texture_type const & Texture, wrap Wrap, filter Mip, filter Min, texel_type const & BorderColor) - : sampler(Wrap, Texture.levels() > 1 ? Mip : FILTER_NEAREST, Min) - , Texture(Texture) - , Convert(detail::convert::call(this->Texture.format())) - , BorderColor(BorderColor) - , Filter(detail::get_filter(Mip, Min, is_border(Wrap))) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT((!std::numeric_limits::is_iec559 && Mip == FILTER_NEAREST && Min == FILTER_NEAREST) || std::numeric_limits::is_iec559); - } - - template - inline typename sampler2d::texture_type const & sampler2d::operator()() const - { - return this->Texture; - } - - template - inline typename sampler2d::texel_type sampler2d::texel_fetch(extent_type const & TexelCoord, size_type const & Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Fetch); - - return this->Convert.Fetch(this->Texture, TexelCoord, 0, 0, Level); - } - - template - inline void sampler2d::texel_write(extent_type const & TexelCoord, size_type const & Level, texel_type const & Texel) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - this->Convert.Write(this->Texture, TexelCoord, 0, 0, Level, Texel); - } - - template - inline void sampler2d::clear(texel_type const & Color) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - detail::clear::call(this->Texture, this->Convert.Write, Color); - } - - template - inline typename sampler2d::texel_type sampler2d::texture_lod(normalized_type const & SampleCoord, level_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(std::numeric_limits::is_iec559); - GLI_ASSERT(this->Filter && this->Convert.Fetch); - - normalized_type const SampleCoordWrap(this->Wrap(SampleCoord.x), this->Wrap(SampleCoord.y)); - return this->Filter(this->Texture, this->Convert.Fetch, SampleCoordWrap, size_type(0), size_type(0), Level, this->BorderColor); - } - - template - inline typename sampler2d::texel_type sampler2d::texture_grad(normalized_type const & SampleCoord, normalized_type const& dPdx, normalized_type const& dPdy) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(std::numeric_limits::is_iec559); - GLI_ASSERT(this->Filter && this->Convert.Fetch); - - normalized_type const SampleCoordWrap(this->Wrap(SampleCoord.x), this->Wrap(SampleCoord.y)); - - extent_type const TextureSize = this->Texture.extent(0); - - int const LevelCount = glm::log2(max(TextureSize.x, TextureSize.y)); - T const d = max(dot(dPdx, dPdx), dot(dPdy, dPdy)); - T const Clamped = clamp(d, static_cast(1), static_cast(pow(2, (LevelCount - 1) * 2))); - - T const Level = static_cast(0.5) * glm::log2(Clamped); - - return this->Filter(this->Texture, this->Convert.Fetch, SampleCoordWrap, size_type(0), size_type(0), Level, this->BorderColor); - } - - template - inline void sampler2d::generate_mipmaps(filter Minification) - { - this->generate_mipmaps(this->Texture.base_level(), this->Texture.max_level(), Minification); - } - - template - inline void sampler2d::generate_mipmaps(size_type BaseLevel, size_type MaxLevel, filter Minification) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(!is_compressed(this->Texture.format())); - GLI_ASSERT(this->Texture.base_level() <= BaseLevel && BaseLevel <= MaxLevel && MaxLevel <= this->Texture.max_level()); - GLI_ASSERT(this->Convert.Fetch && this->Convert.Write); - GLI_ASSERT(Minification >= FILTER_FIRST && Minification <= FILTER_LAST); - - detail::generate_mipmaps_2d( - this->Texture, this->Convert.Fetch, this->Convert.Write, 0, 0, 0, 0, BaseLevel, MaxLevel, Minification); - } -}//namespace gli - diff --git a/external/gli/gli/core/sampler2d_array.inl b/external/gli/gli/core/sampler2d_array.inl deleted file mode 100644 index c0affb6e..00000000 --- a/external/gli/gli/core/sampler2d_array.inl +++ /dev/null @@ -1,83 +0,0 @@ -#include "clear.hpp" -#include - -namespace gli -{ - template - inline sampler2d_array::sampler2d_array(texture_type const & Texture, gli::wrap Wrap, filter Mip, filter Min, texel_type const & BorderColor) - : sampler(Wrap, Texture.levels() > 1 ? Mip : FILTER_NEAREST, Min) - , Texture(Texture) - , Convert(detail::convert::call(this->Texture.format())) - , BorderColor(BorderColor) - , Filter(detail::get_filter(Mip, Min, is_border(Wrap))) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(!is_compressed(Texture.format())); - GLI_ASSERT((!std::numeric_limits::is_iec559 && Mip == FILTER_NEAREST && Min == FILTER_NEAREST) || std::numeric_limits::is_iec559); - } - - template - inline typename sampler2d_array::texture_type const & sampler2d_array::operator()() const - { - return this->Texture; - } - - template - inline typename sampler2d_array::texel_type sampler2d_array::texel_fetch(extent_type const & TexelCoord, size_type layer, size_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Fetch); - - return this->Convert.Fetch(this->Texture, TexelCoord, layer, 0, Level); - } - - template - inline void sampler2d_array::texel_write(extent_type const & TexelCoord, size_type layer, size_type Level, texel_type const & Texel) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - this->Convert.Write(this->Texture, TexelCoord, layer, 0, Level, Texel); - } - - template - inline void sampler2d_array::clear(texel_type const & Color) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - detail::clear::call(this->Texture, this->Convert.Write, Color); - } - - template - inline typename sampler2d_array::texel_type sampler2d_array::texture_lod(normalized_type const & SampleCoord, size_type Layer, level_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(std::numeric_limits::is_iec559); - GLI_ASSERT(this->Filter && this->Convert.Fetch); - - normalized_type const SampleCoordWrap(this->Wrap(SampleCoord.x), this->Wrap(SampleCoord.y)); - return this->Filter(this->Texture, this->Convert.Fetch, SampleCoordWrap, Layer, size_type(0), Level, this->BorderColor); - } - - template - inline void sampler2d_array::generate_mipmaps(filter Minification) - { - this->generate_mipmaps(this->Texture.base_layer(), this->Texture.max_layer(), this->Texture.base_level(), this->Texture.max_level(), Minification); - } - - template - inline void sampler2d_array::generate_mipmaps(size_type BaseLayer, size_type MaxLayer, size_type BaseLevel, size_type MaxLevel, filter Minification) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(!is_compressed(this->Texture.format())); - GLI_ASSERT(this->Texture.base_layer() <= BaseLayer && BaseLayer <= MaxLayer && MaxLayer <= this->Texture.max_layer()); - GLI_ASSERT(this->Texture.base_level() <= BaseLevel && BaseLevel <= MaxLevel && MaxLevel <= this->Texture.max_level()); - GLI_ASSERT(this->Convert.Fetch && this->Convert.Write); - GLI_ASSERT(Minification >= FILTER_FIRST && Minification <= FILTER_LAST); - - detail::generate_mipmaps_2d( - this->Texture, this->Convert.Fetch, this->Convert.Write, BaseLayer, MaxLayer, 0, 0, BaseLevel, MaxLevel, Minification); - } -}//namespace gli - diff --git a/external/gli/gli/core/sampler3d.inl b/external/gli/gli/core/sampler3d.inl deleted file mode 100644 index 7dda214e..00000000 --- a/external/gli/gli/core/sampler3d.inl +++ /dev/null @@ -1,82 +0,0 @@ -#include "clear.hpp" -#include - -namespace gli -{ - template - inline sampler3d::sampler3d(texture_type const & Texture, wrap Wrap, filter Mip, filter Min, texel_type const & BorderColor) - : sampler(Wrap, Texture.levels() > 1 ? Mip : FILTER_NEAREST, Min) - , Texture(Texture) - , Convert(detail::convert::call(this->Texture.format())) - , BorderColor(BorderColor) - , Filter(detail::get_filter(Mip, Min, is_border(Wrap))) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(!is_compressed(Texture.format())); - GLI_ASSERT((!std::numeric_limits::is_iec559 && Mip == FILTER_NEAREST && Min == FILTER_NEAREST) || std::numeric_limits::is_iec559); - } - - template - inline typename sampler3d::texture_type const & sampler3d::operator()() const - { - return this->Texture; - } - - template - inline typename sampler3d::texel_type sampler3d::texel_fetch(extent_type const & TexelCoord, size_type const & Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Fetch); - - return this->Convert.Fetch(this->Texture, TexelCoord, 0, 0, Level); - } - - template - inline void sampler3d::texel_write(extent_type const & TexelCoord, size_type const & Level, texel_type const & Texel) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - this->Convert.Write(this->Texture, TexelCoord, 0, 0, Level, Texel); - } - - template - inline void sampler3d::clear(texel_type const & Color) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - detail::clear::call(this->Texture, this->Convert.Write, Color); - } - - template - GLI_FORCE_INLINE typename sampler3d::texel_type sampler3d::texture_lod(normalized_type const & SampleCoord, level_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(std::numeric_limits::is_iec559); - GLI_ASSERT(this->Filter && this->Convert.Fetch); - - normalized_type const SampleCoordWrap(this->Wrap(SampleCoord.x), this->Wrap(SampleCoord.y), this->Wrap(SampleCoord.z)); - return this->Filter(this->Texture, this->Convert.Fetch, SampleCoordWrap, size_type(0), size_type(0), Level, this->BorderColor); - } - - template - inline void sampler3d::generate_mipmaps(filter Minification) - { - this->generate_mipmaps(this->Texture.base_level(), this->Texture.max_level(), Minification); - } - - template - inline void sampler3d::generate_mipmaps(size_type BaseLevel, size_type MaxLevel, filter Minification) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(!is_compressed(this->Texture.format())); - GLI_ASSERT(this->Texture.base_level() <= BaseLevel && BaseLevel <= MaxLevel && MaxLevel <= this->Texture.max_level()); - GLI_ASSERT(this->Convert.Fetch && this->Convert.Write); - GLI_ASSERT(Minification >= FILTER_FIRST && Minification <= FILTER_LAST); - - detail::generate_mipmaps_3d( - this->Texture, this->Convert.Fetch, this->Convert.Write, 0, 0, 0, 0, BaseLevel, MaxLevel, Minification); - } -}//namespace gli - diff --git a/external/gli/gli/core/sampler_cube.inl b/external/gli/gli/core/sampler_cube.inl deleted file mode 100644 index 46bf92ef..00000000 --- a/external/gli/gli/core/sampler_cube.inl +++ /dev/null @@ -1,84 +0,0 @@ -#include "clear.hpp" -#include - -namespace gli -{ - template - inline sampler_cube::sampler_cube(texture_cube const & Texture, gli::wrap Wrap, filter Mip, filter Min, texel_type const & BorderColor) - : sampler(Wrap, Texture.levels() > 1 ? Mip : FILTER_NEAREST, Min) - , Texture(Texture) - , Convert(detail::convert::call(this->Texture.format())) - , BorderColor(BorderColor) - , Filter(detail::get_filter(Mip, Min, is_border(Wrap))) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(!is_compressed(Texture.format())); - GLI_ASSERT((!std::numeric_limits::is_iec559 && Mip == FILTER_NEAREST && Min == FILTER_NEAREST) || std::numeric_limits::is_iec559); - } - - template - inline texture_cube const & sampler_cube::operator()() const - { - return this->Texture; - } - - template - inline typename sampler_cube::texel_type sampler_cube::texel_fetch(extent_type const & TexelCoord, size_type Face, size_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Fetch); - - return this->Convert.Fetch(this->Texture, TexelCoord, 0, Face, Level); - } - - template - inline void sampler_cube::texel_write(extent_type const & TexelCoord, size_type Face, size_type Level, texel_type const & Texel) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - this->Convert.Write(this->Texture, TexelCoord, 0, Face, Level, Texel); - } - - template - inline void sampler_cube::clear(texel_type const & Color) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - detail::clear::call(this->Texture, this->Convert.Write, Color); - } - - template - inline typename sampler_cube::texel_type sampler_cube::texture_lod(normalized_type const & SampleCoord, size_type Face, level_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(std::numeric_limits::is_iec559); - GLI_ASSERT(this->Filter && this->Convert.Fetch); - - normalized_type const SampleCoordWrap(this->Wrap(SampleCoord.x), this->Wrap(SampleCoord.y)); - - return this->Filter(this->Texture, this->Convert.Fetch, SampleCoordWrap, size_type(0), Face, Level, this->BorderColor); - } - - template - inline void sampler_cube::generate_mipmaps(filter Minification) - { - this->generate_mipmaps(this->Texture.base_face(), this->Texture.max_face(), this->Texture.base_level(), this->Texture.max_level(), Minification); - } - - template - inline void sampler_cube::generate_mipmaps(size_type BaseFace, size_type MaxFace, size_type BaseLevel, size_type MaxLevel, filter Minification) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(!is_compressed(this->Texture.format())); - GLI_ASSERT(this->Texture.base_face() <= BaseFace && BaseFace <= MaxFace && MaxFace <= this->Texture.max_face()); - GLI_ASSERT(this->Texture.base_level() <= BaseLevel && BaseLevel <= MaxLevel && MaxLevel <= this->Texture.max_level()); - GLI_ASSERT(this->Convert.Fetch && this->Convert.Write); - GLI_ASSERT(Minification >= FILTER_FIRST && Minification <= FILTER_LAST); - - detail::generate_mipmaps_2d( - this->Texture, this->Convert.Fetch, this->Convert.Write, 0, 0, BaseFace, MaxFace, BaseLevel, MaxLevel, Minification); - } -}//namespace gli - diff --git a/external/gli/gli/core/sampler_cube_array.inl b/external/gli/gli/core/sampler_cube_array.inl deleted file mode 100644 index 4c0b79ab..00000000 --- a/external/gli/gli/core/sampler_cube_array.inl +++ /dev/null @@ -1,84 +0,0 @@ -#include "clear.hpp" -#include - -namespace gli -{ - template - inline sampler_cube_array::sampler_cube_array(texture_type const & Texture, gli::wrap Wrap, filter Mip, filter Min, texel_type const & BorderColor) - : sampler(Wrap, Texture.levels() > 1 ? Mip : FILTER_NEAREST, Min) - , Texture(Texture) - , Convert(detail::convert::call(this->Texture.format())) - , BorderColor(BorderColor) - , Filter(detail::get_filter(Mip, Min, is_border(Wrap))) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(!is_compressed(Texture.format())); - GLI_ASSERT((!std::numeric_limits::is_iec559 && Mip == FILTER_NEAREST && Min == FILTER_NEAREST) || std::numeric_limits::is_iec559); - } - - template - inline typename sampler_cube_array::texture_type const & sampler_cube_array::operator()() const - { - return this->Texture; - } - - template - inline typename sampler_cube_array::texel_type sampler_cube_array::texel_fetch(extent_type const & TexelCoord, size_type layer, size_type Face, size_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Fetch); - - return this->Convert.Fetch(this->Texture, TexelCoord, layer, Face, Level); - } - - template - inline void sampler_cube_array::texel_write(extent_type const & TexelCoord, size_type layer, size_type Face, size_type Level, texel_type const & Texel) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - this->Convert.Write(this->Texture, TexelCoord, layer, Face, Level, Texel); - } - - template - inline void sampler_cube_array::clear(texel_type const & Color) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(this->Convert.Write); - - detail::clear::call(this->Texture, this->Convert.Write, Color); - } - - template - inline typename sampler_cube_array::texel_type sampler_cube_array::texture_lod(normalized_type const & SampleCoord, size_type Layer, size_type Face, level_type Level) const - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(std::numeric_limits::is_iec559); - GLI_ASSERT(this->Filter && this->Convert.Fetch); - - normalized_type const SampleCoordWrap(this->Wrap(SampleCoord.x), this->Wrap(SampleCoord.y)); - return this->Filter(this->Texture, this->Convert.Fetch, SampleCoordWrap, Layer, Face, Level, this->BorderColor); - } - - template - inline void sampler_cube_array::generate_mipmaps(filter Minification) - { - this->generate_mipmaps(this->Texture.base_layer(), this->Texture.max_layer(), this->Texture.base_face(), this->Texture.max_face(), this->Texture.base_level(), this->Texture.max_level(), Minification); - } - - template - inline void sampler_cube_array::generate_mipmaps(size_type BaseLayer, size_type MaxLayer, size_type BaseFace, size_type MaxFace, size_type BaseLevel, size_type MaxLevel, filter Minification) - { - GLI_ASSERT(!this->Texture.empty()); - GLI_ASSERT(!is_compressed(this->Texture.format())); - GLI_ASSERT(this->Texture.base_layer() <= BaseLayer && BaseLayer <= MaxLayer && MaxLayer <= this->Texture.max_layer()); - GLI_ASSERT(this->Texture.base_face() <= BaseFace && BaseFace <= MaxFace && MaxFace <= this->Texture.max_face()); - GLI_ASSERT(this->Texture.base_level() <= BaseLevel && BaseLevel <= MaxLevel && MaxLevel <= this->Texture.max_level()); - GLI_ASSERT(this->Convert.Fetch && this->Convert.Write); - GLI_ASSERT(Minification >= FILTER_FIRST && Minification <= FILTER_LAST); - - detail::generate_mipmaps_2d( - this->Texture, this->Convert.Fetch, this->Convert.Write, BaseLayer, MaxLayer, BaseFace, MaxFace, BaseLevel, MaxLevel, Minification); - } -}//namespace gli - diff --git a/external/gli/gli/core/save.inl b/external/gli/gli/core/save.inl deleted file mode 100644 index 0d4b44ff..00000000 --- a/external/gli/gli/core/save.inl +++ /dev/null @@ -1,22 +0,0 @@ -#include "../save_dds.hpp" -#include "../save_kmg.hpp" -#include "../save_ktx.hpp" - -namespace gli -{ - inline bool save(texture const & Texture, char const * Path) - { - return save(Texture, std::string(Path)); - } - - inline bool save(texture const & Texture, std::string const & Path) - { - if(Path.rfind(".dds") != std::string::npos) - return save_dds(Texture, Path); - if(Path.rfind(".kmg") != std::string::npos) - return save_kmg(Texture, Path); - if(Path.rfind(".ktx") != std::string::npos) - return save_ktx(Texture, Path); - return false; - } -}//namespace gli diff --git a/external/gli/gli/core/save_dds.inl b/external/gli/gli/core/save_dds.inl deleted file mode 100644 index 62ab305f..00000000 --- a/external/gli/gli/core/save_dds.inl +++ /dev/null @@ -1,151 +0,0 @@ -#include -#include "../load_dds.hpp" -#include "file.hpp" - -namespace gli{ -namespace detail -{ - inline d3d10_resource_dimension get_dimension(gli::target Target) - { - static d3d10_resource_dimension Table[] = //TARGET_COUNT - { - D3D10_RESOURCE_DIMENSION_TEXTURE1D, //TARGET_1D, - D3D10_RESOURCE_DIMENSION_TEXTURE1D, //TARGET_1D_ARRAY, - D3D10_RESOURCE_DIMENSION_TEXTURE2D, //TARGET_2D, - D3D10_RESOURCE_DIMENSION_TEXTURE2D, //TARGET_2D_ARRAY, - D3D10_RESOURCE_DIMENSION_TEXTURE3D, //TARGET_3D, - D3D10_RESOURCE_DIMENSION_TEXTURE2D, //TARGET_RECT, - D3D10_RESOURCE_DIMENSION_TEXTURE2D, //TARGET_RECT_ARRAY, - D3D10_RESOURCE_DIMENSION_TEXTURE2D, //TARGET_CUBE, - D3D10_RESOURCE_DIMENSION_TEXTURE2D //TARGET_CUBE_ARRAY - }; - static_assert(sizeof(Table) / sizeof(Table[0]) == TARGET_COUNT, "Table needs to be updated"); - - return Table[Target]; - } - - inline dx::d3dfmt get_fourcc(bool RequireDX10Header, gli::format Format, dx::format const& DXFormat) - { - if(RequireDX10Header) - { - detail::formatInfo const & FormatInfo = detail::get_format_info(Format); - - if(FormatInfo.Flags & detail::CAP_DDS_GLI_EXT_BIT) - return dx::D3DFMT_GLI1; - else - return dx::D3DFMT_DX10; - } - else - { - return (DXFormat.DDPixelFormat & dx::DDPF_FOURCC) ? DXFormat.D3DFormat : dx::D3DFMT_UNKNOWN; - } - } -}//namespace detail - - inline bool save_dds(texture const& Texture, std::vector& Memory) - { - if(Texture.empty()) - return false; - - dx DX; - dx::format const& DXFormat = DX.translate(Texture.format()); - - bool const RequireDX10Header = DXFormat.D3DFormat == dx::D3DFMT_GLI1 || DXFormat.D3DFormat == dx::D3DFMT_DX10 || is_target_array(Texture.target()) || is_target_1d(Texture.target()); - - Memory.resize(Texture.size() + sizeof(detail::FOURCC_DDS) + sizeof(detail::dds_header) + (RequireDX10Header ? sizeof(detail::dds_header10) : 0)); - - memcpy(&Memory[0], detail::FOURCC_DDS, sizeof(detail::FOURCC_DDS)); - std::size_t Offset = sizeof(detail::FOURCC_DDS); - - detail::dds_header& Header = *reinterpret_cast(&Memory[0] + Offset); - Offset += sizeof(detail::dds_header); - - detail::formatInfo const& Desc = detail::get_format_info(Texture.format()); - - std::uint32_t Caps = detail::DDSD_CAPS | detail::DDSD_WIDTH | detail::DDSD_PIXELFORMAT | detail::DDSD_MIPMAPCOUNT; - Caps |= !is_target_1d(Texture.target()) ? detail::DDSD_HEIGHT : 0; - Caps |= Texture.target() == TARGET_3D ? detail::DDSD_DEPTH : 0; - //Caps |= Storage.levels() > 1 ? detail::DDSD_MIPMAPCOUNT : 0; - Caps |= (Desc.Flags & detail::CAP_COMPRESSED_BIT) ? detail::DDSD_LINEARSIZE : detail::DDSD_PITCH; - - std::uint32_t PitchInBytes = 0u; - if( ( Desc.Flags & detail::CAP_COMPRESSED_BIT ) ) - { - PitchInBytes = static_cast(Texture.size() / Texture.faces()); - } - else - { - const texture::extent_type& TextureExtent = Texture.extent(); - const std::uint32_t BitsPerPixel = detail::bits_per_pixel( Texture.format() ); - PitchInBytes = ( TextureExtent.x * BitsPerPixel ) / 8u; - } - - memset(Header.Reserved1, 0, sizeof(Header.Reserved1)); - memset(Header.Reserved2, 0, sizeof(Header.Reserved2)); - Header.Size = sizeof(detail::dds_header); - Header.Flags = Caps; - Header.Width = static_cast(Texture.extent().x); - Header.Height = static_cast(Texture.extent().y); - Header.Pitch = PitchInBytes; - Header.Depth = static_cast(Texture.extent().z > 1 ? Texture.extent().z : 0); - Header.MipMapLevels = static_cast(Texture.levels()); - Header.Format.size = sizeof(detail::dds_pixel_format); - Header.Format.flags = RequireDX10Header ? dx::DDPF_FOURCC : DXFormat.DDPixelFormat; - Header.Format.fourCC = detail::get_fourcc(RequireDX10Header, Texture.format(), DXFormat); - Header.Format.bpp = static_cast(detail::bits_per_pixel(Texture.format())); - Header.Format.Mask = DXFormat.Mask; - //Header.surfaceFlags = detail::DDSCAPS_TEXTURE | (Storage.levels() > 1 ? detail::DDSCAPS_MIPMAP : 0); - Header.SurfaceFlags = detail::DDSCAPS_TEXTURE | detail::DDSCAPS_MIPMAP; - Header.CubemapFlags = 0; - - // Cubemap - if(Texture.faces() > 1) - { - GLI_ASSERT(Texture.faces() == 6); - Header.CubemapFlags |= detail::DDSCAPS2_CUBEMAP_ALLFACES | detail::DDSCAPS2_CUBEMAP; - } - - // Texture3D - if(Texture.extent().z > 1) - Header.CubemapFlags |= detail::DDSCAPS2_VOLUME; - - if(RequireDX10Header) - { - detail::dds_header10& Header10 = *reinterpret_cast(&Memory[0] + Offset); - Offset += sizeof(detail::dds_header10); - - Header10.ArraySize = static_cast(Texture.layers()); - Header10.ResourceDimension = detail::get_dimension(Texture.target()); - Header10.MiscFlag = Texture.faces() > 1 ? detail::D3D10_RESOURCE_MISC_TEXTURECUBE : 0;//Storage.levels() > 0 ? detail::D3D10_RESOURCE_MISC_GENERATE_MIPS : 0; - Header10.Format = DXFormat.DXGIFormat; - Header10.AlphaFlags = detail::DDS_ALPHA_MODE_UNKNOWN; - } - - std::memcpy(&Memory[0] + Offset, Texture.data(), Texture.size()); - - return true; - } - - inline bool save_dds(texture const& Texture, char const* Filename) - { - if(Texture.empty()) - return false; - - FILE* File = detail::open_file(Filename, "wb"); - if(!File) - return false; - - std::vector Memory; - bool const Result = save_dds(Texture, Memory); - - std::fwrite(&Memory[0], 1, Memory.size(), File); - std::fclose(File); - - return Result; - } - - inline bool save_dds(texture const& Texture, std::string const& Filename) - { - return save_dds(Texture, Filename.c_str()); - } -}//namespace gli diff --git a/external/gli/gli/core/save_kmg.inl b/external/gli/gli/core/save_kmg.inl deleted file mode 100644 index f03d976d..00000000 --- a/external/gli/gli/core/save_kmg.inl +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include -#include "../load_kmg.hpp" -#include "filter.hpp" -#include "file.hpp" - -namespace gli -{ - inline bool save_kmg(texture const & Texture, std::vector & Memory) - { - if(Texture.empty()) - return false; - - Memory.resize(sizeof(detail::FOURCC_KMG100) + sizeof(detail::kmgHeader10) + Texture.size()); - - std::memcpy(&Memory[0], detail::FOURCC_KMG100, sizeof(detail::FOURCC_KMG100)); - - std::size_t Offset = sizeof(detail::FOURCC_KMG100); - - texture::swizzles_type Swizzle = Texture.swizzles(); - - detail::kmgHeader10 & Header = *reinterpret_cast(&Memory[0] + Offset); - Header.Endianness = 0x04030201; - Header.Format = Texture.format(); - Header.Target = Texture.target(); - Header.SwizzleRed = Swizzle[0]; - Header.SwizzleGreen = Swizzle[1]; - Header.SwizzleBlue = Swizzle[2]; - Header.SwizzleAlpha = Swizzle[3]; - Header.PixelWidth = static_cast(Texture.extent().x); - Header.PixelHeight = static_cast(Texture.extent().y); - Header.PixelDepth = static_cast(Texture.extent().z); - Header.Layers = static_cast(Texture.layers()); - Header.Levels = static_cast(Texture.levels()); - Header.Faces = static_cast(Texture.faces()); - Header.GenerateMipmaps = FILTER_NONE; - Header.BaseLevel = static_cast(Texture.base_level()); - Header.MaxLevel = static_cast(Texture.max_level()); - - Offset += sizeof(detail::kmgHeader10); - - for(texture::size_type Layer = 0, Layers = Texture.layers(); Layer < Layers; ++Layer) - for(texture::size_type Level = 0, Levels = Texture.levels(); Level < Levels; ++Level) - { - texture::size_type const FaceSize = Texture.size(Level); - for(texture::size_type Face = 0, Faces = Texture.faces(); Face < Faces; ++Face) - { - std::memcpy(&Memory[0] + Offset, Texture.data(Layer, Face, Level), FaceSize); - - Offset += FaceSize; - GLI_ASSERT(Offset <= Memory.size()); - } - } - - return true; - } - - inline bool save_kmg(texture const & Texture, char const * Filename) - { - if(Texture.empty()) - return false; - - FILE* File = detail::open_file(Filename, "wb"); - if(!File) - return false; - - std::vector Memory; - bool const Result = save_kmg(Texture, Memory); - - std::fwrite(&Memory[0], 1, Memory.size(), File); - std::fclose(File); - - return Result; - } - - inline bool save_kmg(texture const & Texture, std::string const & Filename) - { - return save_kmg(Texture, Filename.c_str()); - } -}//namespace gli diff --git a/external/gli/gli/core/save_ktx.inl b/external/gli/gli/core/save_ktx.inl deleted file mode 100644 index 4bb4d603..00000000 --- a/external/gli/gli/core/save_ktx.inl +++ /dev/null @@ -1,114 +0,0 @@ -#include -#include -#include "../load_ktx.hpp" -#include "file.hpp" - -namespace gli{ -namespace detail -{ - inline texture::size_type compute_ktx_storage_size(texture const & Texture) - { - texture::size_type const BlockSize = block_size(Texture.format()); - texture::size_type TotalSize = sizeof(detail::FOURCC_KTX10) + sizeof(detail::ktx_header10); - - for(texture::size_type Level = 0, Levels = Texture.levels(); Level < Levels; ++Level) - { - TotalSize += sizeof(std::uint32_t); - - for(texture::size_type Layer = 0, Layers = Texture.layers(); Layer < Layers; ++Layer) - for(texture::size_type Face = 0, Faces = Texture.faces(); Face < Faces; ++Face) - { - texture::size_type const FaceSize = Texture.size(Level); - texture::size_type const PaddedSize = std::max(BlockSize, glm::ceilMultiple(FaceSize, static_cast(4))); - - TotalSize += PaddedSize; - } - } - - return TotalSize; - } -}//namespace detail - - inline bool save_ktx(texture const& Texture, std::vector& Memory) - { - if(Texture.empty()) - return false; - - gl GL(gl::PROFILE_KTX); - gl::format const& Format = GL.translate(Texture.format(), Texture.swizzles()); - target const Target = Texture.target(); - - detail::formatInfo const& Desc = detail::get_format_info(Texture.format()); - - Memory.resize(detail::compute_ktx_storage_size(Texture)); - - std::memcpy(&Memory[0], detail::FOURCC_KTX10, sizeof(detail::FOURCC_KTX10)); - - std::size_t Offset = sizeof(detail::FOURCC_KTX10); - - detail::ktx_header10& Header = *reinterpret_cast(&Memory[0] + Offset); - Header.Endianness = 0x04030201; - Header.GLType = Format.Type; - Header.GLTypeSize = Format.Type == gl::TYPE_NONE ? 1 : Desc.BlockSize; - Header.GLFormat = Format.External; - Header.GLInternalFormat = Format.Internal; - Header.GLBaseInternalFormat = Format.External; - Header.PixelWidth = static_cast(Texture.extent().x); - Header.PixelHeight = !is_target_1d(Target) ? static_cast(Texture.extent().y) : 0; - Header.PixelDepth = Target == TARGET_3D ? static_cast(Texture.extent().z) : 0; - Header.NumberOfArrayElements = is_target_array(Target) ? static_cast(Texture.layers()) : 0; - Header.NumberOfFaces = is_target_cube(Target) ? static_cast(Texture.faces()) : 1; - Header.NumberOfMipmapLevels = static_cast(Texture.levels()); - Header.BytesOfKeyValueData = 0; - - Offset += sizeof(detail::ktx_header10); - - for(texture::size_type Level = 0, Levels = Texture.levels(); Level < Levels; ++Level) - { - std::uint32_t& ImageSize = *reinterpret_cast(&Memory[0] + Offset); - Offset += sizeof(std::uint32_t); - - for(texture::size_type Layer = 0, Layers = Texture.layers(); Layer < Layers; ++Layer) - for(texture::size_type Face = 0, Faces = Texture.faces(); Face < Faces; ++Face) - { - texture::size_type const FaceSize = Texture.size(Level); - - std::memcpy(&Memory[0] + Offset, Texture.data(Layer, Face, Level), FaceSize); - - texture::size_type const PaddedSize = glm::ceilMultiple(FaceSize, static_cast(4)); - - ImageSize += static_cast(PaddedSize); - Offset += PaddedSize; - - GLI_ASSERT(Offset <= Memory.size()); - } - - ImageSize = glm::ceilMultiple(ImageSize, static_cast(4)); - } - - return true; - } - - inline bool save_ktx(texture const& Texture, char const* Filename) - { - if(Texture.empty()) - return false; - - FILE* File = detail::open_file(Filename, "wb"); - if(!File) - return false; - - std::vector Memory; - bool const Result = save_ktx(Texture, Memory); - - std::fwrite(&Memory[0], 1, Memory.size(), File); - std::fclose(File); - - return Result; - } - - inline bool save_ktx(texture const& Texture, std::string const& Filename) - { - return save_ktx(Texture, Filename.c_str()); - } -}//namespace gli diff --git a/external/gli/gli/core/storage_linear.hpp b/external/gli/gli/core/storage_linear.hpp deleted file mode 100644 index 3abda42f..00000000 --- a/external/gli/gli/core/storage_linear.hpp +++ /dev/null @@ -1,95 +0,0 @@ -#pragma once - -// STD -#include -#include -#include -#include -#include -#include -#include - -#include "../type.hpp" -#include "../format.hpp" - -// GLM -#include -#include -#include - -static_assert(GLM_VERSION >= 99, "GLI requires at least GLM 0.9.9"); - -namespace gli -{ - class storage_linear - { - public: - typedef extent3d extent_type; - typedef size_t size_type; - typedef gli::format format_type; - typedef gli::byte data_type; - - public: - storage_linear(); - - storage_linear( - format_type Format, - extent_type const & Extent, - size_type Layers, - size_type Faces, - size_type Levels); - - bool empty() const; - size_type size() const; // Express is bytes - size_type layers() const; - size_type levels() const; - size_type faces() const; - - size_type block_size() const; - extent_type block_extent() const; - extent_type block_count(size_type Level) const; - extent_type extent(size_type Level) const; - - data_type* data(); - data_type const* const data() const; - - /// Compute the relative memory offset to access the data for a specific layer, face and level - size_type base_offset( - size_type Layer, - size_type Face, - size_type Level) const; - - size_type image_offset(extent1d const& Coord, extent1d const& Extent) const; - - size_type image_offset(extent2d const& Coord, extent2d const& Extent) const; - - size_type image_offset(extent3d const& Coord, extent3d const& Extent) const; - - /// Copy a subset of a specific image of a texture - void copy( - storage_linear const& StorageSrc, - size_t LayerSrc, size_t FaceSrc, size_t LevelSrc, extent_type const& BlockIndexSrc, - size_t LayerDst, size_t FaceDst, size_t LevelDst, extent_type const& BlockIndexDst, - extent_type const& BlockCount); - - size_type level_size( - size_type Level) const; - size_type face_size( - size_type BaseLevel, size_type MaxLevel) const; - size_type layer_size( - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel) const; - - private: - size_type const Layers; - size_type const Faces; - size_type const Levels; - size_type const BlockSize; - extent_type const BlockCount; - extent_type const BlockExtent; - extent_type const Extent; - std::vector Data; - }; -}//namespace gli - -#include "storage_linear.inl" diff --git a/external/gli/gli/core/storage_linear.inl b/external/gli/gli/core/storage_linear.inl deleted file mode 100644 index de966372..00000000 --- a/external/gli/gli/core/storage_linear.inl +++ /dev/null @@ -1,186 +0,0 @@ -namespace gli -{ - inline storage_linear::storage_linear() - : Layers(0) - , Faces(0) - , Levels(0) - , BlockSize(0) - , BlockCount(0) - , BlockExtent(0) - , Extent(0) - {} - - inline storage_linear::storage_linear(format_type Format, extent_type const& Extent, size_type Layers, size_type Faces, size_type Levels) - : Layers(Layers) - , Faces(Faces) - , Levels(Levels) - , BlockSize(gli::block_size(Format)) - , BlockCount(glm::ceilMultiple(Extent, gli::block_extent(Format)) / gli::block_extent(Format)) - , BlockExtent(gli::block_extent(Format)) - , Extent(Extent) - { - GLI_ASSERT(Layers > 0); - GLI_ASSERT(Faces > 0); - GLI_ASSERT(Levels > 0); - GLI_ASSERT(glm::all(glm::greaterThan(Extent, extent_type(0)))); - - this->Data.resize(this->layer_size(0, Faces - 1, 0, Levels - 1) * Layers, 0); - } - - inline bool storage_linear::empty() const - { - return this->Data.empty(); - } - - inline storage_linear::size_type storage_linear::layers() const - { - return this->Layers; - } - - inline storage_linear::size_type storage_linear::faces() const - { - return this->Faces; - } - - inline storage_linear::size_type storage_linear::levels() const - { - return this->Levels; - } - - inline storage_linear::size_type storage_linear::block_size() const - { - return this->BlockSize; - } - - inline storage_linear::extent_type storage_linear::block_extent() const - { - return this->BlockExtent; - } - - inline storage_linear::extent_type storage_linear::block_count(size_type Level) const - { - GLI_ASSERT(Level >= 0 && Level < this->Levels); - - return glm::ceilMultiple(this->extent(Level), BlockExtent) / BlockExtent; - } - - inline storage_linear::extent_type storage_linear::extent(size_type Level) const - { - GLI_ASSERT(Level >= 0 && Level < this->Levels); - - return glm::max(this->Extent >> storage_linear::extent_type(static_cast(Level)), storage_linear::extent_type(1)); - } - - inline storage_linear::size_type storage_linear::size() const - { - GLI_ASSERT(!this->empty()); - - return static_cast(this->Data.size()); - } - - inline storage_linear::data_type* storage_linear::data() - { - GLI_ASSERT(!this->empty()); - - return &this->Data[0]; - } - - inline storage_linear::data_type const* const storage_linear::data() const - { - GLI_ASSERT(!this->empty()); - - return &this->Data[0]; - } - - inline storage_linear::size_type storage_linear::base_offset(size_type Layer, size_type Face, size_type Level) const - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(Layer >= 0 && Layer < this->layers() && Face >= 0 && Face < this->faces() && Level >= 0 && Level < this->levels()); - - size_type const LayerSize = this->layer_size(0, this->faces() - 1, 0, this->levels() - 1); - size_type const FaceSize = this->face_size(0, this->levels() - 1); - size_type BaseOffset = LayerSize * Layer + FaceSize * Face; - - for(size_type LevelIndex = 0, LevelCount = Level; LevelIndex < LevelCount; ++LevelIndex) - BaseOffset += this->level_size(LevelIndex); - - return BaseOffset; - } - - inline storage_linear::size_type storage_linear::image_offset(extent1d const& Coord, extent1d const& Extent) const - { - GLI_ASSERT(glm::all(glm::lessThan(Coord, Extent))); - return static_cast(Coord.x); - } - - inline storage_linear::size_type storage_linear::image_offset(extent2d const& Coord, extent2d const& Extent) const - { - GLI_ASSERT(glm::all(glm::lessThan(Coord, Extent))); - return static_cast(Coord.x + Coord.y * Extent.x); - } - - inline storage_linear::size_type storage_linear::image_offset(extent3d const& Coord, extent3d const& Extent) const - { - GLI_ASSERT(glm::all(glm::lessThan(Coord, Extent))); - return static_cast(Coord.x + Coord.y * Extent.x + Coord.z * Extent.x * Extent.y); - } - - inline void storage_linear::copy( - storage_linear const& StorageSrc, - size_t LayerSrc, size_t FaceSrc, size_t LevelSrc, extent_type const& BlockIndexSrc, - size_t LayerDst, size_t FaceDst, size_t LevelDst, extent_type const& BlockIndexDst, - extent_type const& BlockCount) - { - storage_linear::size_type const BaseOffsetSrc = StorageSrc.base_offset(LayerSrc, FaceSrc, LevelSrc); - storage_linear::size_type const BaseOffsetDst = this->base_offset(LayerDst, FaceDst, LevelDst); - storage_linear::data_type const* const ImageSrc = StorageSrc.data() + BaseOffsetSrc; - storage_linear::data_type* const ImageDst = this->data() + BaseOffsetDst; - - for(size_t BlockIndexZ = 0, BlockCountZ = BlockCount.z; BlockIndexZ < BlockCountZ; ++BlockIndexZ) - for(size_t BlockIndexY = 0, BlockCountY = BlockCount.y; BlockIndexY < BlockCountY; ++BlockIndexY) - { - extent_type const BlockIndex(0, BlockIndexY, BlockIndexZ); - gli::size_t const OffsetSrc = StorageSrc.image_offset(BlockIndexSrc + BlockIndex, StorageSrc.extent(LevelSrc)) * StorageSrc.block_size(); - gli::size_t const OffsetDst = this->image_offset(BlockIndexDst + BlockIndex, this->extent(LevelDst)) * this->block_size(); - storage_linear::data_type const* const DataSrc = ImageSrc + OffsetSrc; - storage_linear::data_type* DataDst = ImageDst + OffsetDst; - memcpy(DataDst, DataSrc, this->block_size() * BlockCount.x); - } - } - - inline storage_linear::size_type storage_linear::level_size(size_type Level) const - { - GLI_ASSERT(Level >= 0 && Level < this->levels()); - - return this->BlockSize * glm::compMul(this->block_count(Level)); - } - - inline storage_linear::size_type storage_linear::face_size(size_type BaseLevel, size_type MaxLevel) const - { - GLI_ASSERT(MaxLevel >= 0 && MaxLevel < this->levels()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < this->levels()); - GLI_ASSERT(BaseLevel <= MaxLevel); - - size_type FaceSize(0); - - // The size of a face is the sum of the size of each level. - for(storage_linear::size_type Level(BaseLevel); Level <= MaxLevel; ++Level) - FaceSize += this->level_size(Level); - - return FaceSize; - } - - inline storage_linear::size_type storage_linear::layer_size( - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel) const - { - GLI_ASSERT(MaxFace >= 0 && MaxFace < this->faces()); - GLI_ASSERT(BaseFace >= 0 && BaseFace < this->faces()); - GLI_ASSERT(MaxLevel >= 0 && MaxLevel < this->levels()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < this->levels()); - - // The size of a layer is the sum of the size of each face. - // All the faces have the same size. - return this->face_size(BaseLevel, MaxLevel) * (MaxFace - BaseFace + 1); - } -}//namespace gli diff --git a/external/gli/gli/core/texture.inl b/external/gli/gli/core/texture.inl deleted file mode 100644 index 8d416f9e..00000000 --- a/external/gli/gli/core/texture.inl +++ /dev/null @@ -1,412 +0,0 @@ -#include - -namespace gli -{ - inline texture::texture() - : Storage(nullptr) - , Target(static_cast(TARGET_INVALID)) - , Format(gli::FORMAT_UNDEFINED) - , BaseLayer(0), MaxLayer(0) - , BaseFace(0), MaxFace(0) - , BaseLevel(0), MaxLevel(0) - , Swizzles(SWIZZLE_ZERO) - , Cache(cache::DEFAULT) - {} - - inline texture::texture - ( - target_type Target, - format_type Format, - extent_type const& Extent, - size_type Layers, - size_type Faces, - size_type Levels, - swizzles_type const& Swizzles - ) - : Storage(std::make_shared(Format, Extent, Layers, Faces, Levels)) - , Target(Target) - , Format(Format) - , BaseLayer(0), MaxLayer(Layers - 1) - , BaseFace(0), MaxFace(Faces - 1) - , BaseLevel(0), MaxLevel(Levels - 1) - , Swizzles(Swizzles) - , Cache(*Storage, Format, this->base_layer(), this->layers(), this->base_face(), this->max_face(), this->base_level(), this->max_level()) - { - GLI_ASSERT(Target != TARGET_CUBE || (Target == TARGET_CUBE && Extent.x == Extent.y)); - GLI_ASSERT(Target != TARGET_CUBE_ARRAY || (Target == TARGET_CUBE_ARRAY && Extent.x == Extent.y)); - } - - inline texture::texture - ( - texture const& Texture, - target_type Target, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles - ) - : Storage(Texture.Storage) - , Target(Target) - , Format(Format) - , BaseLayer(BaseLayer), MaxLayer(MaxLayer) - , BaseFace(BaseFace), MaxFace(MaxFace) - , BaseLevel(BaseLevel), MaxLevel(MaxLevel) - , Swizzles(Swizzles) - , Cache(*Storage, Format, this->base_layer(), this->layers(), this->base_face(), this->max_face(), this->base_level(), this->max_level()) - { - GLI_ASSERT(block_size(Format) == block_size(Texture.format())); - GLI_ASSERT(Target != TARGET_1D || (Target == TARGET_1D && this->layers() == 1 && this->faces() == 1 && this->extent().y == 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_1D_ARRAY || (Target == TARGET_1D_ARRAY && this->layers() >= 1 && this->faces() == 1 && this->extent().y == 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_2D || (Target == TARGET_2D && this->layers() == 1 && this->faces() == 1 && this->extent().y >= 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_2D_ARRAY || (Target == TARGET_2D_ARRAY && this->layers() >= 1 && this->faces() == 1 && this->extent().y >= 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_3D || (Target == TARGET_3D && this->layers() == 1 && this->faces() == 1 && this->extent().y >= 1 && this->extent().z >= 1)); - GLI_ASSERT(Target != TARGET_CUBE || (Target == TARGET_CUBE && this->layers() == 1 && this->faces() >= 1 && this->extent().y >= 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_CUBE_ARRAY || (Target == TARGET_CUBE_ARRAY && this->layers() >= 1 && this->faces() >= 1 && this->extent().y >= 1 && this->extent().z == 1)); - } - - inline texture::texture - ( - texture const& Texture, - target_type Target, - format_type Format, - swizzles_type const& Swizzles - ) - : Storage(Texture.Storage) - , Target(Target) - , Format(Format) - , BaseLayer(Texture.base_layer()), MaxLayer(Texture.max_layer()) - , BaseFace(Texture.base_face()), MaxFace(Texture.max_face()) - , BaseLevel(Texture.base_level()), MaxLevel(Texture.max_level()) - , Swizzles(Swizzles) - , Cache(*Storage, Format, this->base_layer(), this->layers(), this->base_face(), this->max_face(), this->base_level(), this->max_level()) - { - if(this->empty()) - return; - - GLI_ASSERT(Target != TARGET_1D || (Target == TARGET_1D && this->layers() == 1 && this->faces() == 1 && this->extent().y == 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_1D_ARRAY || (Target == TARGET_1D_ARRAY && this->layers() >= 1 && this->faces() == 1 && this->extent().y == 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_2D || (Target == TARGET_2D && this->layers() == 1 && this->faces() == 1 && this->extent().y >= 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_2D_ARRAY || (Target == TARGET_2D_ARRAY && this->layers() >= 1 && this->faces() == 1 && this->extent().y >= 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_3D || (Target == TARGET_3D && this->layers() == 1 && this->faces() == 1 && this->extent().y >= 1 && this->extent().z >= 1)); - GLI_ASSERT(Target != TARGET_CUBE || (Target == TARGET_CUBE && this->layers() == 1 && this->faces() >= 1 && this->extent().y >= 1 && this->extent().z == 1)); - GLI_ASSERT(Target != TARGET_CUBE_ARRAY || (Target == TARGET_CUBE_ARRAY && this->layers() >= 1 && this->faces() >= 1 && this->extent().y >= 1 && this->extent().z == 1)); - } - - inline bool texture::empty() const - { - if(this->Storage.get() == nullptr) - return true; - - return this->Storage->empty(); - } - - inline texture::format_type texture::format() const - { - return this->Format; - } - - inline texture::swizzles_type texture::swizzles() const - { - swizzles_type const FormatSwizzle = detail::get_format_info(this->format()).Swizzles; - swizzles_type const CustomSwizzle = this->Swizzles; - - swizzles_type ResultSwizzle(SWIZZLE_ZERO); - ResultSwizzle.r = is_channel(CustomSwizzle.r) ? FormatSwizzle[CustomSwizzle.r] : CustomSwizzle.r; - ResultSwizzle.g = is_channel(CustomSwizzle.g) ? FormatSwizzle[CustomSwizzle.g] : CustomSwizzle.g; - ResultSwizzle.b = is_channel(CustomSwizzle.b) ? FormatSwizzle[CustomSwizzle.b] : CustomSwizzle.b; - ResultSwizzle.a = is_channel(CustomSwizzle.a) ? FormatSwizzle[CustomSwizzle.a] : CustomSwizzle.a; - return ResultSwizzle; - } - - inline texture::size_type texture::base_layer() const - { - return this->BaseLayer; - } - - inline texture::size_type texture::max_layer() const - { - return this->MaxLayer; - } - - inline texture::size_type texture::layers() const - { - if(this->empty()) - return 0; - return this->max_layer() - this->base_layer() + 1; - } - - inline texture::size_type texture::base_face() const - { - return this->BaseFace; - } - - inline texture::size_type texture::max_face() const - { - return this->MaxFace; - } - - inline texture::size_type texture::faces() const - { - if(this->empty()) - return 0; - return this->max_face() - this->base_face() + 1; - } - - inline texture::size_type texture::base_level() const - { - return this->BaseLevel; - } - - inline texture::size_type texture::max_level() const - { - return this->MaxLevel; - } - - inline texture::size_type texture::levels() const - { - if(this->empty()) - return 0; - return this->max_level() - this->base_level() + 1; - } - - inline texture::size_type texture::size() const - { - GLI_ASSERT(!this->empty()); - - return this->Cache.get_memory_size(); - } - - template - inline texture::size_type texture::size() const - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(block_size(this->format()) == sizeof(gen_type)); - - return this->size() / sizeof(gen_type); - } - - inline texture::size_type texture::size(size_type Level) const - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(Level >= 0 && Level < this->levels()); - - return this->Cache.get_memory_size(Level); - } - - template - inline texture::size_type texture::size(size_type Level) const - { - GLI_ASSERT(block_size(this->format()) == sizeof(gen_type)); - - return this->size(Level) / sizeof(gen_type); - } - - inline void* texture::data() - { - GLI_ASSERT(!this->empty()); - - return this->Cache.get_base_address(0, 0, 0); - } - - inline void const* texture::data() const - { - GLI_ASSERT(!this->empty()); - - return this->Cache.get_base_address(0, 0, 0); - } - - template - inline gen_type* texture::data() - { - GLI_ASSERT(block_size(this->format()) >= sizeof(gen_type)); - - return reinterpret_cast(this->data()); - } - - template - inline gen_type const* texture::data() const - { - GLI_ASSERT(block_size(this->format()) >= sizeof(gen_type)); - - return reinterpret_cast(this->data()); - } - - inline void* texture::data(size_type Layer, size_type Face, size_type Level) - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(Layer >= 0 && Layer < this->layers() && Face >= 0 && Face < this->faces() && Level >= 0 && Level < this->levels()); - - return this->Cache.get_base_address(Layer, Face, Level); - } - - inline void const* const texture::data(size_type Layer, size_type Face, size_type Level) const - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(Layer >= 0 && Layer < this->layers() && Face >= 0 && Face < this->faces() && Level >= 0 && Level < this->levels()); - - return this->Cache.get_base_address(Layer, Face, Level); - } - - template - inline gen_type* texture::data(size_type Layer, size_type Face, size_type Level) - { - GLI_ASSERT(block_size(this->format()) >= sizeof(gen_type)); - - return reinterpret_cast(this->data(Layer, Face, Level)); - } - - template - inline gen_type const* const texture::data(size_type Layer, size_type Face, size_type Level) const - { - GLI_ASSERT(block_size(this->format()) >= sizeof(gen_type)); - - return reinterpret_cast(this->data(Layer, Face, Level)); - } - - inline texture::extent_type texture::extent(size_type Level) const - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(Level >= 0 && Level < this->levels()); - - return this->Cache.get_extent(Level); - } - - inline void texture::clear() - { - GLI_ASSERT(!this->empty()); - - memset(this->data(), 0, this->size()); - } - - template - inline void texture::clear(gen_type const& Texel) - { - GLI_ASSERT(!gli::is_compressed(this->format())); - GLI_ASSERT(!this->empty()); - GLI_ASSERT(block_size(this->format()) == sizeof(gen_type)); - - gen_type* Data = this->data(); - size_type const BlockCount = this->size(); - - for(size_type BlockIndex = 0; BlockIndex < BlockCount; ++BlockIndex) - *(Data + BlockIndex) = Texel; - } - - template - inline void texture::clear(size_type Layer, size_type Face, size_type Level, gen_type const& BlockData) - { - GLI_ASSERT(!gli::is_compressed(this->format())); - GLI_ASSERT(!this->empty()); - GLI_ASSERT(block_size(this->format()) == sizeof(gen_type)); - GLI_ASSERT(Layer >= 0 && Layer < this->layers() && Face >= 0 && Face < this->faces() && Level >= 0 && Level < this->levels()); - - size_type const BlockCount = this->Storage->level_size(Level) / sizeof(gen_type); - gen_type* Data = this->data(Layer, Face, Level); - for(size_type BlockIndex = 0; BlockIndex < BlockCount; ++BlockIndex) - *(Data + BlockIndex) = BlockData; - } - - template - inline void texture::clear - ( - size_type Layer, size_type Face, size_type Level, - extent_type const& TexelOffset, extent_type const& TexelExtent, - gen_type const& BlockData - ) - { - storage_type::size_type const BaseOffset = this->Storage->base_offset(Layer, Face, Level); - storage_type::data_type* const BaseAddress = this->Storage->data() + BaseOffset; - - extent_type BlockOffset(TexelOffset / this->Storage->block_extent()); - extent_type const BlockExtent(TexelExtent / this->Storage->block_extent() + BlockOffset); - for(; BlockOffset.z < BlockExtent.z; ++BlockOffset.z) - for(; BlockOffset.y < BlockExtent.y; ++BlockOffset.y) - for(; BlockOffset.x < BlockExtent.x; ++BlockOffset.x) - { - gli::size_t const Offset = this->Storage->image_offset(BlockOffset, this->extent(Level)) * this->Storage->block_size(); - gen_type* const BlockAddress = reinterpret_cast(BaseAddress + Offset); - *BlockAddress = BlockData; - } - } - - inline void texture::copy - ( - texture const& TextureSrc, - size_t LayerSrc, size_t FaceSrc, size_t LevelSrc, - size_t LayerDst, size_t FaceDst, size_t LevelDst - ) - { - GLI_ASSERT(this->size(LevelDst) == TextureSrc.size(LevelSrc)); - GLI_ASSERT(LayerSrc < TextureSrc.layers()); - GLI_ASSERT(LayerDst < this->layers()); - GLI_ASSERT(FaceSrc < TextureSrc.faces()); - GLI_ASSERT(FaceDst < this->faces()); - GLI_ASSERT(LevelSrc < TextureSrc.levels()); - GLI_ASSERT(LevelDst < this->levels()); - - memcpy( - this->data(LayerDst, FaceDst, LevelDst), - TextureSrc.data(LayerSrc, FaceSrc, LevelSrc), - this->size(LevelDst)); - } - - inline void texture::copy - ( - texture const& TextureSrc, - size_t LayerSrc, size_t FaceSrc, size_t LevelSrc, texture::extent_type const& OffsetSrc, - size_t LayerDst, size_t FaceDst, size_t LevelDst, texture::extent_type const& OffsetDst, - texture::extent_type const& Extent - ) - { - storage_type::extent_type const BlockExtent = this->Storage->block_extent(); - this->Storage->copy( - *TextureSrc.Storage, - LayerSrc, FaceSrc, LevelSrc, OffsetSrc / BlockExtent, - LayerDst, FaceDst, LevelDst, OffsetDst / BlockExtent, - Extent / BlockExtent); - } - - template - inline void texture::swizzle(gli::swizzles const& Swizzles) - { - for(size_type TexelIndex = 0, TexelCount = this->size(); TexelIndex < TexelCount; ++TexelIndex) - { - gen_type& TexelDst = *(this->data() + TexelIndex); - gen_type const TexelSrc = TexelDst; - for(typename gen_type::length_type Component = 0; Component < TexelDst.length(); ++Component) - { - GLI_ASSERT(static_cast(Swizzles[Component]) < TexelDst.length()); - TexelDst[Component] = TexelSrc[Swizzles[Component]]; - } - } - } - - template - inline gen_type texture::load(extent_type const& TexelCoord, size_type Layer, size_type Face, size_type Level) const - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(!is_compressed(this->format())); - GLI_ASSERT(block_size(this->format()) == sizeof(gen_type)); - - size_type const ImageOffset = this->Storage->image_offset(TexelCoord, this->extent(Level)); - GLI_ASSERT(ImageOffset < this->size(Level)); - - return *(this->data(Layer, Face, Level) + ImageOffset); - } - - template - inline void texture::store(extent_type const& TexelCoord, size_type Layer, size_type Face, size_type Level, gen_type const& Texel) - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(!is_compressed(this->format())); - GLI_ASSERT(block_size(this->format()) == sizeof(gen_type)); - GLI_ASSERT(glm::all(glm::lessThan(TexelCoord, this->extent(Level)))); - - size_type const ImageOffset = this->Storage->image_offset(TexelCoord, this->extent(Level)); - GLI_ASSERT(ImageOffset < this->size(Level)); - - *(this->data(Layer, Face, Level) + ImageOffset) = Texel; - } -}//namespace gli - diff --git a/external/gli/gli/core/texture1d.inl b/external/gli/gli/core/texture1d.inl deleted file mode 100644 index 152fbb9e..00000000 --- a/external/gli/gli/core/texture1d.inl +++ /dev/null @@ -1,79 +0,0 @@ -#include "../levels.hpp" - -namespace gli -{ - inline texture1d::texture1d() - {} - - inline texture1d::texture1d(format_type Format, extent_type const& Extent, swizzles_type const& Swizzles) - : texture(TARGET_1D, Format, texture::extent_type(Extent.x, 1, 1), 1, 1, gli::levels(Extent), Swizzles) - {} - - inline texture1d::texture1d(format_type Format, extent_type const& Extent, size_type Levels, swizzles_type const& Swizzles) - : texture(TARGET_1D, Format, texture::extent_type(Extent.x, 1, 1), 1, 1, Levels, Swizzles) - {} - - inline texture1d::texture1d(texture const& Texture) - : texture(Texture, TARGET_1D, Texture.format()) - {} - - inline texture1d::texture1d - ( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles - ) - : texture( - Texture, TARGET_1D, - Format, - BaseLayer, MaxLayer, - BaseFace, MaxFace, - BaseLevel, MaxLevel, - Swizzles) - {} - - inline texture1d::texture1d - ( - texture1d const& Texture, - size_type BaseLevel, size_type MaxLevel - ) - : texture( - Texture, TARGET_1D, - Texture.format(), - Texture.base_layer(), Texture.max_layer(), - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel) - {} - - inline image texture1d::operator[](texture1d::size_type Level) const - { - GLI_ASSERT(Level < this->levels()); - - return image( - this->Storage, - this->format(), - this->base_layer(), - this->base_face(), - this->base_level() + Level); - } - - inline texture1d::extent_type texture1d::extent(size_type Level) const - { - return extent_type(this->texture::extent(Level)); - } - - template - inline gen_type texture1d::load(extent_type const& TexelCoord, size_type Level) const - { - return this->texture::load(texture::extent_type(TexelCoord.x, 0, 0), 0, 0, Level); - } - - template - inline void texture1d::store(extent_type const& TexelCoord, size_type Level, gen_type const& Texel) - { - this->texture::store(texture::extent_type(TexelCoord.x, 0, 0), 0, 0, Level, Texel); - } -}//namespace gli diff --git a/external/gli/gli/core/texture1d_array.inl b/external/gli/gli/core/texture1d_array.inl deleted file mode 100644 index 9c1c7a36..00000000 --- a/external/gli/gli/core/texture1d_array.inl +++ /dev/null @@ -1,81 +0,0 @@ -#include "../levels.hpp" - -namespace gli -{ - inline texture1d_array::texture1d_array() - {} - - inline texture1d_array::texture1d_array(format_type Format, extent_type const& Extent, size_type Layers, swizzles_type const& Swizzles) - : texture(TARGET_1D_ARRAY, Format, texture::extent_type(Extent.x, 1, 1), Layers, 1, gli::levels(Extent), Swizzles) - {} - - inline texture1d_array::texture1d_array(format_type Format, extent_type const& Extent, size_type Layers, size_type Levels, swizzles_type const& Swizzles) - : texture(TARGET_1D_ARRAY, Format, texture::extent_type(Extent.x, 1, 1), Layers, 1, Levels, Swizzles) - {} - - inline texture1d_array::texture1d_array(texture const& Texture) - : texture(Texture, TARGET_1D_ARRAY, Texture.format()) - {} - - inline texture1d_array::texture1d_array - ( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles - ) - : texture( - Texture, TARGET_1D_ARRAY, Format, - BaseLayer, MaxLayer, - BaseFace, MaxFace, - BaseLevel, MaxLevel, - Swizzles) - {} - - inline texture1d_array::texture1d_array - ( - texture1d_array const& Texture, - size_type BaseLayer, size_type MaxLayer, - size_type BaseLevel, size_type MaxLevel - ) - : texture( - Texture, TARGET_1D_ARRAY, - Texture.format(), - Texture.base_layer() + BaseLayer, Texture.base_layer() + MaxLayer, - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel) - {} - - inline texture1d texture1d_array::operator[](size_type Layer) const - { - GLI_ASSERT(!this->empty()); - GLI_ASSERT(Layer < this->layers()); - - return texture1d( - *this, this->format(), - this->base_layer() + Layer, this->base_layer() + Layer, - this->base_face(), this->max_face(), - this->base_level(), this->max_level()); - } - - inline texture1d_array::extent_type texture1d_array::extent(size_type Level) const - { - return extent_type(this->texture::extent(Level)); - } - - template - inline gen_type texture1d_array::load(extent_type const& TexelCoord, size_type Layer, size_type Level) const - { - return this->texture::load(texture::extent_type(TexelCoord.x, 0, 0), Layer, 0, Level); - } - - template - inline void texture1d_array::store(extent_type const& TexelCoord, size_type Layer, size_type Level, gen_type const& Texel) - { - this->texture::store(texture::extent_type(TexelCoord.x, 0, 0), Layer, 0, Level, Texel); - } -}//namespace gli - - diff --git a/external/gli/gli/core/texture2d.inl b/external/gli/gli/core/texture2d.inl deleted file mode 100644 index 0fc077e5..00000000 --- a/external/gli/gli/core/texture2d.inl +++ /dev/null @@ -1,77 +0,0 @@ -#include "../levels.hpp" - -namespace gli -{ - inline texture2d::texture2d() - {} - - inline texture2d::texture2d(format_type Format, extent_type const& Extent, swizzles_type const& Swizzles) - : texture(TARGET_2D, Format, texture::extent_type(Extent, 1), 1, 1, gli::levels(Extent), Swizzles) - {} - - inline texture2d::texture2d(format_type Format, extent_type const& Extent, size_type Levels, swizzles_type const& Swizzles) - : texture(TARGET_2D, Format, texture::extent_type(Extent, 1), 1, 1, Levels, Swizzles) - {} - - inline texture2d::texture2d(texture const& Texture) - : texture(Texture, TARGET_2D, Texture.format()) - {} - - inline texture2d::texture2d - ( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles - ) - : texture( - Texture, TARGET_2D, Format, - BaseLayer, MaxLayer, - BaseFace, MaxFace, - BaseLevel, MaxLevel, - Swizzles) - {} - - inline texture2d::texture2d - ( - texture2d const& Texture, - size_type BaseLevel, size_type MaxLevel - ) - : texture( - Texture, TARGET_2D, Texture.format(), - Texture.base_layer(), Texture.max_layer(), - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel) - {} - - inline image texture2d::operator[](size_type Level) const - { - GLI_ASSERT(Level < this->levels()); - - return image( - this->Storage, - this->format(), - this->base_layer(), - this->base_face(), - this->base_level() + Level); - } - - inline texture2d::extent_type texture2d::extent(size_type Level) const - { - return extent_type(this->texture::extent(Level)); - } - - template - inline gen_type texture2d::load(extent_type const& TexelCoord, size_type Level) const - { - return this->texture::load(texture::extent_type(TexelCoord, 0), 0, 0, Level); - } - - template - inline void texture2d::store(extent_type const& TexelCoord, size_type Level, gen_type const& Texel) - { - this->texture::store(texture::extent_type(TexelCoord, 0), 0, 0, Level, Texel); - } -}//namespace gli diff --git a/external/gli/gli/core/texture2d_array.inl b/external/gli/gli/core/texture2d_array.inl deleted file mode 100644 index 2243344e..00000000 --- a/external/gli/gli/core/texture2d_array.inl +++ /dev/null @@ -1,79 +0,0 @@ -#include "../levels.hpp" - -namespace gli -{ - inline texture2d_array::texture2d_array() - {} - - inline texture2d_array::texture2d_array(format_type Format, extent_type const& Extent, size_type Layers, swizzles_type const& Swizzles) - : texture(TARGET_2D_ARRAY, Format, texture::extent_type(Extent, 1), Layers, 1, gli::levels(Extent), Swizzles) - {} - - inline texture2d_array::texture2d_array(format_type Format, extent_type const& Extent, size_type Layers, size_type Levels, swizzles_type const& Swizzles) - : texture(TARGET_2D_ARRAY, Format, texture::extent_type(Extent, 1), Layers, 1, Levels, Swizzles) - {} - - inline texture2d_array::texture2d_array(texture const& Texture) - : texture(Texture, TARGET_2D_ARRAY, Texture.format()) - {} - - inline texture2d_array::texture2d_array - ( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles - ) - : texture( - Texture, TARGET_2D_ARRAY, - Format, - BaseLayer, MaxLayer, - BaseFace, MaxFace, - BaseLevel, MaxLevel, - Swizzles) - {} - - inline texture2d_array::texture2d_array - ( - texture2d_array const& Texture, - size_type BaseLayer, size_type MaxLayer, - size_type BaseLevel, size_type MaxLevel - ) - : texture( - Texture, TARGET_2D_ARRAY, - Texture.format(), - Texture.base_layer() + BaseLayer, Texture.base_layer() + MaxLayer, - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel) - {} - - inline texture2d texture2d_array::operator[](size_type Layer) const - { - GLI_ASSERT(Layer < this->layers()); - - return texture2d( - *this, this->format(), - this->base_layer() + Layer, this->base_layer() + Layer, - this->base_face(), this->max_face(), - this->base_level(), this->max_level()); - } - - inline texture2d_array::extent_type texture2d_array::extent(size_type Level) const - { - return extent_type(this->texture::extent(Level)); - } - - template - inline gen_type texture2d_array::load(extent_type const& TexelCoord, size_type Layer, size_type Level) const - { - return this->texture::load(texture::extent_type(TexelCoord, 0), Layer, 0, Level); - } - - template - inline void texture2d_array::store(extent_type const& TexelCoord, size_type Layer, size_type Level, gen_type const& Texel) - { - this->texture::store(texture::extent_type(TexelCoord, 0), Layer, 0, Level, Texel); - } -}//namespace gli diff --git a/external/gli/gli/core/texture3d.inl b/external/gli/gli/core/texture3d.inl deleted file mode 100644 index 96faf4f8..00000000 --- a/external/gli/gli/core/texture3d.inl +++ /dev/null @@ -1,77 +0,0 @@ -#include "../levels.hpp" - -namespace gli -{ - inline texture3d::texture3d() - {} - - inline texture3d::texture3d(format_type Format, extent_type const& Extent, swizzles_type const& Swizzles) - : texture(TARGET_3D, Format, Extent, 1, 1, gli::levels(Extent), Swizzles) - {} - - inline texture3d::texture3d(format_type Format, extent_type const& Extent, size_type Levels, swizzles_type const& Swizzles) - : texture(TARGET_3D, Format, Extent, 1, 1, Levels, Swizzles) - {} - - inline texture3d::texture3d(texture const& Texture) - : texture(Texture, TARGET_3D, Texture.format()) - {} - - inline texture3d::texture3d - ( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles - ) - : texture( - Texture, TARGET_3D, Format, - BaseLayer, MaxLayer, - BaseFace, MaxFace, - BaseLevel, MaxLevel, - Swizzles) - {} - - inline texture3d::texture3d - ( - texture3d const& Texture, - size_type BaseLevel, size_type MaxLevel - ) - : texture( - Texture, TARGET_3D, Texture.format(), - Texture.base_layer(), Texture.max_layer(), - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel) - {} - - inline image texture3d::operator[](size_type Level) const - { - GLI_ASSERT(Level < this->levels()); - - return image( - this->Storage, - this->format(), - this->base_layer(), - this->base_face(), - this->base_level() + Level); - } - - inline texture3d::extent_type texture3d::extent(size_type Level) const - { - return extent_type(this->texture::extent(Level)); - } - - template - inline gen_type texture3d::load(extent_type const& TexelCoord, size_type Level) const - { - return this->texture::load(texture::extent_type(TexelCoord), 0, 0, Level); - } - - template - inline void texture3d::store(extent_type const& TexelCoord, size_type Level, gen_type const& Texel) - { - this->texture::store(texture::extent_type(TexelCoord), 0, 0, Level, Texel); - } -}//namespace gli diff --git a/external/gli/gli/core/texture_cube.inl b/external/gli/gli/core/texture_cube.inl deleted file mode 100644 index 4c9fa783..00000000 --- a/external/gli/gli/core/texture_cube.inl +++ /dev/null @@ -1,75 +0,0 @@ -namespace gli -{ - inline texture_cube::texture_cube() - {} - - inline texture_cube::texture_cube(format_type Format, extent_type const& Extent, swizzles_type const& Swizzles) - : texture(TARGET_CUBE, Format, texture::extent_type(Extent, 1), 1, 6, gli::levels(Extent), Swizzles) - {} - - inline texture_cube::texture_cube(format_type Format, extent_type const& Extent, size_type Levels, swizzles_type const& Swizzles) - : texture(TARGET_CUBE, Format, texture::extent_type(Extent, 1), 1, 6, Levels, Swizzles) - {} - - inline texture_cube::texture_cube(texture const& Texture) - : texture(Texture, TARGET_CUBE, Texture.format()) - {} - - inline texture_cube::texture_cube - ( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles - ) - : texture( - Texture, TARGET_CUBE, Format, - BaseLayer, MaxLayer, - BaseFace, MaxFace, - BaseLevel, MaxLevel, - Swizzles) - {} - - inline texture_cube::texture_cube - ( - texture_cube const& Texture, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel - ) - : texture( - Texture, TARGET_CUBE, Texture.format(), - Texture.base_layer(), Texture.max_layer(), - Texture.base_face() + BaseFace, Texture.base_face() + MaxFace, - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel) - {} - - inline texture2d texture_cube::operator[](size_type Face) const - { - GLI_ASSERT(Face < this->faces()); - - return texture2d( - *this, this->format(), - this->base_layer(), this->max_layer(), - this->base_face() + Face, this->base_face() + Face, - this->base_level(), this->max_level()); - } - - inline texture_cube::extent_type texture_cube::extent(size_type Level) const - { - return extent_type(this->texture::extent(Level)); - } - - template - inline gen_type texture_cube::load(extent_type const& TexelCoord, size_type Face, size_type Level) const - { - return this->texture::load(texture::extent_type(TexelCoord, 0), 0, Face, Level); - } - - template - inline void texture_cube::store(extent_type const& TexelCoord, size_type Face, size_type Level, gen_type const& Texel) - { - this->texture::store(texture::extent_type(TexelCoord, 0), 0, Face, Level, Texel); - } -}//namespace gli diff --git a/external/gli/gli/core/texture_cube_array.inl b/external/gli/gli/core/texture_cube_array.inl deleted file mode 100644 index fea68d6b..00000000 --- a/external/gli/gli/core/texture_cube_array.inl +++ /dev/null @@ -1,77 +0,0 @@ -namespace gli -{ - inline texture_cube_array::texture_cube_array() - {} - - inline texture_cube_array::texture_cube_array(format_type Format, extent_type const& Extent, size_type Layers, swizzles_type const& Swizzles) - : texture(TARGET_CUBE_ARRAY, Format, texture::extent_type(Extent, 1), Layers, 6, gli::levels(Extent), Swizzles) - {} - - inline texture_cube_array::texture_cube_array(format_type Format, extent_type const& Extent, size_type Layers, size_type Levels, swizzles_type const& Swizzles) - : texture(TARGET_CUBE_ARRAY, Format, texture::extent_type(Extent, 1), Layers, 6, Levels, Swizzles) - {} - - inline texture_cube_array::texture_cube_array(texture const& Texture) - : texture(Texture, gli::TARGET_CUBE_ARRAY, Texture.format()) - {} - - inline texture_cube_array::texture_cube_array - ( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles - ) - : texture( - Texture, TARGET_CUBE_ARRAY, - Format, - BaseLayer, MaxLayer, - BaseFace, MaxFace, - BaseLevel, MaxLevel, - Swizzles) - {} - - inline texture_cube_array::texture_cube_array - ( - texture_cube_array const& Texture, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel - ) - : texture( - Texture, TARGET_CUBE_ARRAY, Texture.format(), - Texture.base_layer() + BaseLayer, Texture.base_layer() + MaxLayer, - Texture.base_face() + BaseFace, Texture.base_face() + MaxFace, - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel) - {} - - inline texture_cube texture_cube_array::operator[](size_type Layer) const - { - GLI_ASSERT(Layer < this->layers()); - - return texture_cube( - *this, this->format(), - this->base_layer() + Layer, this->base_layer() + Layer, - this->base_face(), this->max_face(), - this->base_level(), this->max_level()); - } - - inline texture_cube_array::extent_type texture_cube_array::extent(size_type Level) const - { - return extent_type(this->texture::extent(Level)); - } - - template - inline gen_type texture_cube_array::load(extent_type const& TexelCoord, size_type Layer, size_type Face, size_type Level) const - { - return this->texture::load(texture::extent_type(TexelCoord, 0), Layer, Face, Level); - } - - template - inline void texture_cube_array::store(extent_type const& TexelCoord, size_type Layer, size_type Face, size_type Level, gen_type const& Texel) - { - this->texture::store(texture::extent_type(TexelCoord, 0), Layer, Face, Level, Texel); - } -}//namespace gli diff --git a/external/gli/gli/core/transform.inl b/external/gli/gli/core/transform.inl deleted file mode 100644 index d93e3355..00000000 --- a/external/gli/gli/core/transform.inl +++ /dev/null @@ -1,257 +0,0 @@ -namespace gli{ -namespace detail -{ - template - struct compute_transform_1d - { - typedef typename transform_func::type func_type; - typedef texture1d::size_type size_type; - typedef texture1d::extent_type extent_type; - - static void call(texture1d& Output, texture1d const& A, texture1d const& B, func_type Func) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - extent_type TexelIndex(0); - - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Output.store(TexelIndex, LevelIndex, Func( - A.load(TexelIndex, LevelIndex), - B.load(TexelIndex, LevelIndex))); - } - } - } - }; - - template - struct compute_transform_1d_array - { - typedef typename transform_func::type func_type; - typedef texture1d_array::size_type size_type; - typedef texture1d_array::extent_type extent_type; - - static void call(texture1d_array& Output, texture1d_array const& A, texture1d_array const& B, func_type Func) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.layers() == B.layers()); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - for(size_type LayerIndex = 0, LayerCount = A.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - extent_type TexelIndex(0); - - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Output.store(TexelIndex, LayerIndex, LevelIndex, Func( - A.load(TexelIndex, LayerIndex, LevelIndex), - B.load(TexelIndex, LayerIndex, LevelIndex))); - } - } - } - }; - - template - struct compute_transform_2d - { - typedef typename transform_func::type func_type; - typedef texture2d::size_type size_type; - typedef texture2d::extent_type extent_type; - - static void call(texture2d& Output, texture2d const& A, texture2d const& B, func_type Func) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - extent_type TexelIndex(0); - - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Output.store(TexelIndex, LevelIndex, Func( - A.load(TexelIndex, LevelIndex), - B.load(TexelIndex, LevelIndex))); - } - } - } - }; - - template - struct compute_transform_2d_array - { - typedef typename transform_func::type func_type; - typedef texture2d_array::size_type size_type; - typedef texture2d_array::extent_type extent_type; - - static void call(texture2d_array& Output, texture2d_array const& A, texture2d_array const& B, func_type Func) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.layers() == B.layers()); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - for(size_type LayerIndex = 0, LayerCount = A.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - extent_type TexelIndex(0); - - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Output.store(TexelIndex, LayerIndex, LevelIndex, Func( - A.load(TexelIndex, LayerIndex, LevelIndex), - B.load(TexelIndex, LayerIndex, LevelIndex))); - } - } - } - }; - - template - struct compute_transform_3d - { - typedef typename transform_func::type func_type; - typedef texture3d::size_type size_type; - typedef texture3d::extent_type extent_type; - - static void call(texture3d& Output, texture3d const& A, texture3d const& B, func_type Func) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - extent_type TexelIndex(0); - - for(TexelIndex.z = 0; TexelIndex.z < TexelCount.z; ++TexelIndex.z) - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Output.store(TexelIndex, LevelIndex, Func( - A.load(TexelIndex, LevelIndex), - B.load(TexelIndex, LevelIndex))); - } - } - } - }; - - template - struct compute_transform_cube - { - typedef typename transform_func::type func_type; - typedef texture_cube::size_type size_type; - typedef texture_cube::extent_type extent_type; - - static void call(texture_cube& Output, texture_cube const& A, texture_cube const& B, func_type Func) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.faces() == B.faces()); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - for(size_type FaceIndex = 0, FaceCount = A.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - extent_type TexelIndex(0); - - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Output.store(TexelIndex, FaceIndex, LevelIndex, Func( - A.load(TexelIndex, FaceIndex, LevelIndex), - B.load(TexelIndex, FaceIndex, LevelIndex))); - } - } - } - }; - - template - struct compute_transform_cube_array - { - typedef typename transform_func::type func_type; - typedef texture_cube_array::size_type size_type; - typedef texture_cube_array::extent_type extent_type; - - static void call(texture_cube_array& Output, texture_cube_array const& A, texture_cube_array const& B, func_type Func) - { - GLI_ASSERT(all(equal(A.extent(), B.extent()))); - GLI_ASSERT(A.layers() == B.layers()); - GLI_ASSERT(A.levels() == B.levels()); - GLI_ASSERT(A.size() == B.size()); - - for(size_type LayerIndex = 0, LayerCount = A.layers(); LayerIndex < LayerCount; ++LayerIndex) - for(size_type FaceIndex = 0, FaceCount = A.faces(); FaceIndex < FaceCount; ++FaceIndex) - for(size_type LevelIndex = 0, LevelCount = A.levels(); LevelIndex < LevelCount; ++LevelIndex) - { - extent_type const TexelCount(A.extent(LevelIndex)); - extent_type TexelIndex(0); - - for(TexelIndex.y = 0; TexelIndex.y < TexelCount.y; ++TexelIndex.y) - for(TexelIndex.x = 0; TexelIndex.x < TexelCount.x; ++TexelIndex.x) - { - Output.store(TexelIndex, LayerIndex, FaceIndex, LevelIndex, Func( - A.load(TexelIndex, LayerIndex, FaceIndex, LevelIndex), - B.load(TexelIndex, LayerIndex, FaceIndex, LevelIndex))); - } - } - } - }; -}//namepsace detail - - template - inline void transform(texture1d& Out, texture1d const& In0, texture1d const& In1, typename transform_func::type Func) - { - detail::compute_transform_1d::call(Out, In0, In1, Func); - } - - template - inline void transform(texture1d_array& Out, texture1d_array const& In0, texture1d_array const& In1, typename transform_func::type Func) - { - detail::compute_transform_1d_array::call(Out, In0, In1, Func); - } - - template - inline void transform(texture2d& Out, texture2d const& In0, texture2d const& In1, typename transform_func::type Func) - { - detail::compute_transform_2d::call(Out, In0, In1, Func); - } - - template - inline void transform(texture2d_array& Out, texture2d_array const& In0, texture2d_array const& In1, typename transform_func::type Func) - { - detail::compute_transform_2d_array::call(Out, In0, In1, Func); - } - - template - inline void transform(texture3d& Out, texture3d const& In0, texture3d const& In1, typename transform_func::type Func) - { - detail::compute_transform_3d::call(Out, In0, In1, Func); - } - - template - inline void transform(texture_cube& Out, texture_cube const& In0, texture_cube const& In1, typename transform_func::type Func) - { - detail::compute_transform_cube::call(Out, In0, In1, Func); - } - - template - inline void transform(texture_cube_array& Out, texture_cube_array const& In0, texture_cube_array const& In1, typename transform_func::type Func) - { - detail::compute_transform_cube_array::call(Out, In0, In1, Func); - } -}//namespace gli diff --git a/external/gli/gli/core/view.inl b/external/gli/gli/core/view.inl deleted file mode 100644 index 2b057b9f..00000000 --- a/external/gli/gli/core/view.inl +++ /dev/null @@ -1,169 +0,0 @@ -namespace gli -{ - inline image view(image const& Image) - { - return Image; - } - - inline texture view(texture const& Texture) - { - return Texture; - } - - template - inline texture view(texType const& Texture) - { - return Texture; - } - - inline texture view - ( - texture const& Texture, - texture::size_type BaseLayer, texture::size_type MaxLayer, - texture::size_type BaseFace, texture::size_type MaxFace, - texture::size_type BaseLevel, texture::size_type MaxLevel - ) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < Texture.levels() && MaxLevel >= 0 && MaxLevel < Texture.levels() && BaseLevel <= MaxLevel); - GLI_ASSERT(BaseFace >= 0 && BaseFace < Texture.faces() && MaxFace >= 0 && MaxFace < Texture.faces() && BaseFace <= MaxFace); - GLI_ASSERT(BaseLayer >= 0 && BaseLayer < Texture.layers() && MaxLayer >= 0 && MaxLayer < Texture.layers() && BaseLayer <= MaxLayer); - - return texture( - Texture, Texture.target(), Texture.format(), - Texture.base_layer() + BaseLayer, Texture.base_layer() + MaxLayer, - Texture.base_face() + BaseFace, Texture.base_face() + MaxFace, - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel); - } - - template - inline texture view(texType const& Texture, format Format) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(block_size(Texture.format()) == block_size(Format)); - - return texture(Texture, Texture.target(), Format); - } - - inline texture view - ( - texture1d const& Texture, - texture1d::size_type BaseLevel, texture1d::size_type MaxLevel - ) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < Texture.levels() && MaxLevel >= 0 && MaxLevel < Texture.levels() && BaseLevel <= MaxLevel); - - return texture( - Texture, TARGET_1D, Texture.format(), - Texture.base_layer(), Texture.max_layer(), - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel); - } - - inline texture view - ( - texture1d_array const & Texture, - texture1d_array::size_type BaseLayer, texture1d_array::size_type MaxLayer, - texture1d_array::size_type BaseLevel, texture1d_array::size_type MaxLevel - ) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < Texture.levels() && MaxLevel >= 0 && MaxLevel < Texture.levels() && BaseLevel <= MaxLevel); - GLI_ASSERT(BaseLayer >= 0 && BaseLayer < Texture.layers() && MaxLayer >= 0 && MaxLayer < Texture.layers() && BaseLayer <= MaxLayer); - - return texture( - Texture, TARGET_1D_ARRAY, Texture.format(), - Texture.base_layer() + BaseLayer, Texture.base_layer() + MaxLayer, - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel); - } - - inline texture view - ( - texture2d const & Texture, - texture2d::size_type BaseLevel, texture2d::size_type MaxLevel - ) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < Texture.levels() && MaxLevel >= 0 && MaxLevel < Texture.levels() && BaseLevel <= MaxLevel); - - return texture( - Texture, TARGET_2D, Texture.format(), - Texture.base_layer(), Texture.max_layer(), - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel); - } - - inline texture view - ( - texture2d_array const & Texture, - texture2d_array::size_type BaseLayer, texture2d_array::size_type MaxLayer, - texture2d_array::size_type BaseLevel, texture2d_array::size_type MaxLevel - ) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < Texture.levels() && MaxLevel >= 0 && MaxLevel < Texture.levels() && BaseLevel <= MaxLevel); - GLI_ASSERT(BaseLayer >= 0 && BaseLayer < Texture.layers() && MaxLayer >= 0 && MaxLayer < Texture.layers() && BaseLayer <= MaxLayer); - - return texture( - Texture, TARGET_2D_ARRAY, Texture.format(), - Texture.base_layer() + BaseLayer, Texture.base_layer() + MaxLayer, - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel); - } - - inline texture view - ( - texture3d const & Texture, - texture3d::size_type BaseLevel, texture3d::size_type MaxLevel - ) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < Texture.levels() && MaxLevel >= 0 && MaxLevel < Texture.levels() && BaseLevel <= MaxLevel); - - return texture( - Texture, TARGET_3D, Texture.format(), - Texture.base_layer(), Texture.max_layer(), - Texture.base_face(), Texture.max_face(), - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel); - } - - inline texture view - ( - texture_cube const & Texture, - texture_cube::size_type BaseFace, texture_cube::size_type MaxFace, - texture_cube::size_type BaseLevel, texture_cube::size_type MaxLevel - ) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < Texture.levels() && MaxLevel >= 0 && MaxLevel < Texture.levels() && BaseLevel <= MaxLevel); - GLI_ASSERT(BaseFace >= 0 && BaseFace < Texture.faces() && MaxFace >= 0 && MaxFace < Texture.faces() && BaseFace <= MaxFace); - - return texture( - Texture, TARGET_CUBE, Texture.format(), - Texture.base_layer(), Texture.max_layer(), - Texture.base_face(), Texture.base_face() + MaxFace, - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel); - } - - inline texture view - ( - texture_cube_array const & Texture, - texture_cube_array::size_type BaseLayer, texture_cube_array::size_type MaxLayer, - texture_cube_array::size_type BaseFace, texture_cube_array::size_type MaxFace, - texture_cube_array::size_type BaseLevel, texture_cube_array::size_type MaxLevel - ) - { - GLI_ASSERT(!Texture.empty()); - GLI_ASSERT(BaseLevel >= 0 && BaseLevel < Texture.levels() && MaxLevel >= 0 && MaxLevel < Texture.levels() && BaseLevel <= MaxLevel); - GLI_ASSERT(BaseFace >= 0 && BaseFace < Texture.faces() && MaxFace >= 0 && MaxFace < Texture.faces() && BaseFace <= MaxFace); - GLI_ASSERT(BaseLayer >= 0 && BaseLayer < Texture.layers() && MaxLayer >= 0 && MaxLayer < Texture.layers() && BaseLayer <= MaxLayer); - - return texture( - Texture, TARGET_CUBE_ARRAY, Texture.format(), - Texture.base_layer() + BaseLayer, Texture.base_layer() + MaxLayer, - Texture.base_face() + BaseFace, Texture.base_face() + MaxFace, - Texture.base_level() + BaseLevel, Texture.base_level() + MaxLevel); - } -}//namespace gli diff --git a/external/gli/gli/duplicate.hpp b/external/gli/gli/duplicate.hpp deleted file mode 100644 index 7fb673ba..00000000 --- a/external/gli/gli/duplicate.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @brief Include to duplicate textures, images or a subset of either textures or an image. These operations will cause memory allocations. -/// @file gli/duplicate.hpp - -#pragma once - -#include "image.hpp" -#include "texture1d.hpp" -#include "texture1d_array.hpp" -#include "texture2d.hpp" -#include "texture2d_array.hpp" -#include "texture3d.hpp" -#include "texture_cube.hpp" -#include "texture_cube_array.hpp" - -namespace gli -{ - /// Duplicate an image and create a new image with a new storage_linear allocation. - image duplicate(image const & Image); - - /// Duplicate a texture and create a new texture with a new storage_linear allocation. - template - texture duplicate(texType const& Texture); - - /// Duplicate a texture and create a new texture with a new storage_linear allocation but a different format. - /// The format must be a compatible format, a format which block size match the original format. - template - texture duplicate(texType const& Texture, format Format); - - /// Duplicate a subset of a texture and create a new texture with a new storage_linear allocation. - texture duplicate( - texture1d const& Texture, - texture1d::size_type BaseLevel, texture1d::size_type MaxLevel); - - /// Duplicate a subset of a texture and create a new texture with a new storage_linear allocation. - texture duplicate( - texture1d_array const& Texture, - texture1d_array::size_type BaseLayer, texture1d_array::size_type MaxLayer, - texture1d_array::size_type BaseLevel, texture1d_array::size_type MaxLevel); - - /// Duplicate a subset of a texture and create a new texture with a new storage_linear allocation. - texture duplicate( - texture2d const& Texture, - texture2d::size_type BaseLevel, texture2d::size_type MaxLevel); - - /// Duplicate a subset of a texture and create a new texture with a new storage_linear allocation. - texture duplicate( - texture2d_array const& Texture, - texture2d_array::size_type BaseLayer, texture2d_array::size_type MaxLayer, - texture2d_array::size_type BaseLevel, texture2d_array::size_type MaxLevel); - - /// Duplicate a subset of a texture and create a new texture with a new storage_linear allocation. - texture duplicate( - texture3d const& Texture, - texture3d::size_type BaseLevel, texture3d::size_type MaxLevel); - - /// Duplicate a subset of a texture and create a new texture with a new storage_linear allocation. - texture duplicate( - texture_cube const& Texture, - texture_cube::size_type BaseFace, texture_cube::size_type MaxFace, - texture_cube::size_type BaseLevel, texture_cube::size_type MaxLevel); - - /// Duplicate a subset of a texture and create a new texture with a new storage_linear allocation. - texture duplicate( - texture_cube_array const& Texture, - texture_cube_array::size_type BaseLayer, texture_cube_array::size_type MaxLayer, - texture_cube_array::size_type BaseFace, texture_cube_array::size_type MaxFace, - texture_cube_array::size_type BaseLevel, texture_cube_array::size_type MaxLevel); -}//namespace gli - -#include "./core/duplicate.inl" diff --git a/external/gli/gli/dx.hpp b/external/gli/gli/dx.hpp deleted file mode 100644 index c3f0d454..00000000 --- a/external/gli/gli/dx.hpp +++ /dev/null @@ -1,490 +0,0 @@ -/// @brief Include to translate GLI enums to DirectX enums -/// @file gli/dx.hpp - -#pragma once - -#include "format.hpp" -#include "target.hpp" -#include - -namespace gli -{ - /// Translation class to convert GLI enums into DirectX enums - class dx - { - public: - #define GLI_MAKEFOURCC(ch0, ch1, ch2, ch3) \ - (std::uint32_t)( \ - (((std::uint32_t)(std::uint8_t)(ch3) << 24) & 0xFF000000) | \ - (((std::uint32_t)(std::uint8_t)(ch2) << 16) & 0x00FF0000) | \ - (((std::uint32_t)(std::uint8_t)(ch1) << 8) & 0x0000FF00) | \ - ((std::uint32_t)(std::uint8_t)(ch0) & 0x000000FF) ) - - enum d3dfmt - { - D3DFMT_UNKNOWN = 0, - - D3DFMT_R8G8B8 = 20, - D3DFMT_A8R8G8B8 = 21, - D3DFMT_X8R8G8B8 = 22, - D3DFMT_R5G6B5 = 23, - D3DFMT_X1R5G5B5 = 24, - D3DFMT_A1R5G5B5 = 25, - D3DFMT_A4R4G4B4 = 26, - D3DFMT_R3G3B2 = 27, - D3DFMT_A8 = 28, - D3DFMT_A8R3G3B2 = 29, - D3DFMT_X4R4G4B4 = 30, - D3DFMT_A2B10G10R10 = 31, - D3DFMT_A8B8G8R8 = 32, - D3DFMT_X8B8G8R8 = 33, - D3DFMT_G16R16 = 34, - D3DFMT_A2R10G10B10 = 35, - D3DFMT_A16B16G16R16 = 36, - - D3DFMT_A8P8 = 40, - D3DFMT_P8 = 41, - - D3DFMT_L8 = 50, - D3DFMT_A8L8 = 51, - D3DFMT_A4L4 = 52, - - D3DFMT_V8U8 = 60, - D3DFMT_L6V5U5 = 61, - D3DFMT_X8L8V8U8 = 62, - D3DFMT_Q8W8V8U8 = 63, - D3DFMT_V16U16 = 64, - D3DFMT_A2W10V10U10 = 67, - - D3DFMT_UYVY = GLI_MAKEFOURCC('U', 'Y', 'V', 'Y'), - D3DFMT_R8G8_B8G8 = GLI_MAKEFOURCC('R', 'G', 'B', 'G'), - D3DFMT_YUY2 = GLI_MAKEFOURCC('Y', 'U', 'Y', '2'), - D3DFMT_G8R8_G8B8 = GLI_MAKEFOURCC('G', 'R', 'G', 'B'), - D3DFMT_DXT1 = GLI_MAKEFOURCC('D', 'X', 'T', '1'), - D3DFMT_DXT2 = GLI_MAKEFOURCC('D', 'X', 'T', '2'), - D3DFMT_DXT3 = GLI_MAKEFOURCC('D', 'X', 'T', '3'), - D3DFMT_DXT4 = GLI_MAKEFOURCC('D', 'X', 'T', '4'), - D3DFMT_DXT5 = GLI_MAKEFOURCC('D', 'X', 'T', '5'), - - D3DFMT_ATI1 = GLI_MAKEFOURCC('A', 'T', 'I', '1'), - D3DFMT_AT1N = GLI_MAKEFOURCC('A', 'T', '1', 'N'), - D3DFMT_ATI2 = GLI_MAKEFOURCC('A', 'T', 'I', '2'), - D3DFMT_AT2N = GLI_MAKEFOURCC('A', 'T', '2', 'N'), - - D3DFMT_BC4U = GLI_MAKEFOURCC('B', 'C', '4', 'U'), - D3DFMT_BC4S = GLI_MAKEFOURCC('B', 'C', '4', 'S'), - D3DFMT_BC5U = GLI_MAKEFOURCC('B', 'C', '5', 'U'), - D3DFMT_BC5S = GLI_MAKEFOURCC('B', 'C', '5', 'S'), - - D3DFMT_ETC = GLI_MAKEFOURCC('E', 'T', 'C', ' '), - D3DFMT_ETC1 = GLI_MAKEFOURCC('E', 'T', 'C', '1'), - D3DFMT_ATC = GLI_MAKEFOURCC('A', 'T', 'C', ' '), - D3DFMT_ATCA = GLI_MAKEFOURCC('A', 'T', 'C', 'A'), - D3DFMT_ATCI = GLI_MAKEFOURCC('A', 'T', 'C', 'I'), - - D3DFMT_POWERVR_2BPP = GLI_MAKEFOURCC('P', 'T', 'C', '2'), - D3DFMT_POWERVR_4BPP = GLI_MAKEFOURCC('P', 'T', 'C', '4'), - - D3DFMT_D16_LOCKABLE = 70, - D3DFMT_D32 = 71, - D3DFMT_D15S1 = 73, - D3DFMT_D24S8 = 75, - D3DFMT_D24X8 = 77, - D3DFMT_D24X4S4 = 79, - D3DFMT_D16 = 80, - - D3DFMT_D32F_LOCKABLE = 82, - D3DFMT_D24FS8 = 83, - - D3DFMT_L16 = 81, - - D3DFMT_VERTEXDATA = 100, - D3DFMT_INDEX16 = 101, - D3DFMT_INDEX32 = 102, - - D3DFMT_Q16W16V16U16 = 110, - - D3DFMT_MULTI2_ARGB8 = GLI_MAKEFOURCC('M','E','T','1'), - - D3DFMT_R16F = 111, - D3DFMT_G16R16F = 112, - D3DFMT_A16B16G16R16F = 113, - - D3DFMT_R32F = 114, - D3DFMT_G32R32F = 115, - D3DFMT_A32B32G32R32F = 116, - - D3DFMT_CxV8U8 = 117, - - D3DFMT_DX10 = GLI_MAKEFOURCC('D', 'X', '1', '0'), - - D3DFMT_GLI1 = GLI_MAKEFOURCC('G', 'L', 'I', '1'), - - D3DFMT_FORCE_DWORD = 0x7fffffff - }; - - enum dxgi_format_dds - { - DXGI_FORMAT_UNKNOWN = 0, - DXGI_FORMAT_R32G32B32A32_TYPELESS = 1, - DXGI_FORMAT_R32G32B32A32_FLOAT = 2, - DXGI_FORMAT_R32G32B32A32_UINT = 3, - DXGI_FORMAT_R32G32B32A32_SINT = 4, - DXGI_FORMAT_R32G32B32_TYPELESS = 5, - DXGI_FORMAT_R32G32B32_FLOAT = 6, - DXGI_FORMAT_R32G32B32_UINT = 7, - DXGI_FORMAT_R32G32B32_SINT = 8, - DXGI_FORMAT_R16G16B16A16_TYPELESS = 9, - DXGI_FORMAT_R16G16B16A16_FLOAT = 10, - DXGI_FORMAT_R16G16B16A16_UNORM = 11, - DXGI_FORMAT_R16G16B16A16_UINT = 12, - DXGI_FORMAT_R16G16B16A16_SNORM = 13, - DXGI_FORMAT_R16G16B16A16_SINT = 14, - DXGI_FORMAT_R32G32_TYPELESS = 15, - DXGI_FORMAT_R32G32_FLOAT = 16, - DXGI_FORMAT_R32G32_UINT = 17, - DXGI_FORMAT_R32G32_SINT = 18, - DXGI_FORMAT_R32G8X24_TYPELESS = 19, - DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20, - DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21, - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22, - DXGI_FORMAT_R10G10B10A2_TYPELESS = 23, - DXGI_FORMAT_R10G10B10A2_UNORM = 24, - DXGI_FORMAT_R10G10B10A2_UINT = 25, - DXGI_FORMAT_R11G11B10_FLOAT = 26, - DXGI_FORMAT_R8G8B8A8_TYPELESS = 27, - DXGI_FORMAT_R8G8B8A8_UNORM = 28, - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29, - DXGI_FORMAT_R8G8B8A8_UINT = 30, - DXGI_FORMAT_R8G8B8A8_SNORM = 31, - DXGI_FORMAT_R8G8B8A8_SINT = 32, - DXGI_FORMAT_R16G16_TYPELESS = 33, - DXGI_FORMAT_R16G16_FLOAT = 34, - DXGI_FORMAT_R16G16_UNORM = 35, - DXGI_FORMAT_R16G16_UINT = 36, - DXGI_FORMAT_R16G16_SNORM = 37, - DXGI_FORMAT_R16G16_SINT = 38, - DXGI_FORMAT_R32_TYPELESS = 39, - DXGI_FORMAT_D32_FLOAT = 40, - DXGI_FORMAT_R32_FLOAT = 41, - DXGI_FORMAT_R32_UINT = 42, - DXGI_FORMAT_R32_SINT = 43, - DXGI_FORMAT_R24G8_TYPELESS = 44, - DXGI_FORMAT_D24_UNORM_S8_UINT = 45, - DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46, - DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47, - DXGI_FORMAT_R8G8_TYPELESS = 48, - DXGI_FORMAT_R8G8_UNORM = 49, - DXGI_FORMAT_R8G8_UINT = 50, - DXGI_FORMAT_R8G8_SNORM = 51, - DXGI_FORMAT_R8G8_SINT = 52, - DXGI_FORMAT_R16_TYPELESS = 53, - DXGI_FORMAT_R16_FLOAT = 54, - DXGI_FORMAT_D16_UNORM = 55, - DXGI_FORMAT_R16_UNORM = 56, - DXGI_FORMAT_R16_UINT = 57, - DXGI_FORMAT_R16_SNORM = 58, - DXGI_FORMAT_R16_SINT = 59, - DXGI_FORMAT_R8_TYPELESS = 60, - DXGI_FORMAT_R8_UNORM = 61, - DXGI_FORMAT_R8_UINT = 62, - DXGI_FORMAT_R8_SNORM = 63, - DXGI_FORMAT_R8_SINT = 64, - DXGI_FORMAT_A8_UNORM = 65, - DXGI_FORMAT_R1_UNORM = 66, - DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67, - DXGI_FORMAT_R8G8_B8G8_UNORM = 68, - DXGI_FORMAT_G8R8_G8B8_UNORM = 69, - DXGI_FORMAT_BC1_TYPELESS = 70, - DXGI_FORMAT_BC1_UNORM = 71, - DXGI_FORMAT_BC1_UNORM_SRGB = 72, - DXGI_FORMAT_BC2_TYPELESS = 73, - DXGI_FORMAT_BC2_UNORM = 74, - DXGI_FORMAT_BC2_UNORM_SRGB = 75, - DXGI_FORMAT_BC3_TYPELESS = 76, - DXGI_FORMAT_BC3_UNORM = 77, - DXGI_FORMAT_BC3_UNORM_SRGB = 78, - DXGI_FORMAT_BC4_TYPELESS = 79, - DXGI_FORMAT_BC4_UNORM = 80, - DXGI_FORMAT_BC4_SNORM = 81, - DXGI_FORMAT_BC5_TYPELESS = 82, - DXGI_FORMAT_BC5_UNORM = 83, - DXGI_FORMAT_BC5_SNORM = 84, - DXGI_FORMAT_B5G6R5_UNORM = 85, - DXGI_FORMAT_B5G5R5A1_UNORM = 86, - DXGI_FORMAT_B8G8R8A8_UNORM = 87, - DXGI_FORMAT_B8G8R8X8_UNORM = 88, - DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89, - DXGI_FORMAT_B8G8R8A8_TYPELESS = 90, - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91, - DXGI_FORMAT_B8G8R8X8_TYPELESS = 92, - DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93, - DXGI_FORMAT_BC6H_TYPELESS = 94, - DXGI_FORMAT_BC6H_UF16 = 95, - DXGI_FORMAT_BC6H_SF16 = 96, - DXGI_FORMAT_BC7_TYPELESS = 97, - DXGI_FORMAT_BC7_UNORM = 98, - DXGI_FORMAT_BC7_UNORM_SRGB = 99, - DXGI_FORMAT_AYUV = 100, - DXGI_FORMAT_Y410 = 101, - DXGI_FORMAT_Y416 = 102, - DXGI_FORMAT_NV12 = 103, - DXGI_FORMAT_P010 = 104, - DXGI_FORMAT_P016 = 105, - DXGI_FORMAT_420_OPAQUE = 106, - DXGI_FORMAT_YUY2 = 107, - DXGI_FORMAT_Y210 = 108, - DXGI_FORMAT_Y216 = 109, - DXGI_FORMAT_NV11 = 110, - DXGI_FORMAT_AI44 = 111, - DXGI_FORMAT_IA44 = 112, - DXGI_FORMAT_P8 = 113, - DXGI_FORMAT_A8P8 = 114, - DXGI_FORMAT_B4G4R4A4_UNORM = 115, - - DXGI_FORMAT_P208 = 130, - DXGI_FORMAT_V208 = 131, - DXGI_FORMAT_V408 = 132, - DXGI_FORMAT_ASTC_4X4_TYPELESS = 133, - DXGI_FORMAT_ASTC_4X4_UNORM = 134, - DXGI_FORMAT_ASTC_4X4_UNORM_SRGB = 135, - DXGI_FORMAT_ASTC_5X4_TYPELESS = 137, - DXGI_FORMAT_ASTC_5X4_UNORM = 138, - DXGI_FORMAT_ASTC_5X4_UNORM_SRGB = 139, - DXGI_FORMAT_ASTC_5X5_TYPELESS = 141, - DXGI_FORMAT_ASTC_5X5_UNORM = 142, - DXGI_FORMAT_ASTC_5X5_UNORM_SRGB = 143, - DXGI_FORMAT_ASTC_6X5_TYPELESS = 145, - DXGI_FORMAT_ASTC_6X5_UNORM = 146, - DXGI_FORMAT_ASTC_6X5_UNORM_SRGB = 147, - DXGI_FORMAT_ASTC_6X6_TYPELESS = 149, - DXGI_FORMAT_ASTC_6X6_UNORM = 150, - DXGI_FORMAT_ASTC_6X6_UNORM_SRGB = 151, - DXGI_FORMAT_ASTC_8X5_TYPELESS = 153, - DXGI_FORMAT_ASTC_8X5_UNORM = 154, - DXGI_FORMAT_ASTC_8X5_UNORM_SRGB = 155, - DXGI_FORMAT_ASTC_8X6_TYPELESS = 157, - DXGI_FORMAT_ASTC_8X6_UNORM = 158, - DXGI_FORMAT_ASTC_8X6_UNORM_SRGB = 159, - DXGI_FORMAT_ASTC_8X8_TYPELESS = 161, - DXGI_FORMAT_ASTC_8X8_UNORM = 162, - DXGI_FORMAT_ASTC_8X8_UNORM_SRGB = 163, - DXGI_FORMAT_ASTC_10X5_TYPELESS = 165, - DXGI_FORMAT_ASTC_10X5_UNORM = 166, - DXGI_FORMAT_ASTC_10X5_UNORM_SRGB = 167, - DXGI_FORMAT_ASTC_10X6_TYPELESS = 169, - DXGI_FORMAT_ASTC_10X6_UNORM = 170, - DXGI_FORMAT_ASTC_10X6_UNORM_SRGB = 171, - DXGI_FORMAT_ASTC_10X8_TYPELESS = 173, - DXGI_FORMAT_ASTC_10X8_UNORM = 174, - DXGI_FORMAT_ASTC_10X8_UNORM_SRGB = 175, - DXGI_FORMAT_ASTC_10X10_TYPELESS = 177, - DXGI_FORMAT_ASTC_10X10_UNORM = 178, - DXGI_FORMAT_ASTC_10X10_UNORM_SRGB = 179, - DXGI_FORMAT_ASTC_12X10_TYPELESS = 181, - DXGI_FORMAT_ASTC_12X10_UNORM = 182, - DXGI_FORMAT_ASTC_12X10_UNORM_SRGB = 183, - DXGI_FORMAT_ASTC_12X12_TYPELESS = 185, - DXGI_FORMAT_ASTC_12X12_UNORM = 186, - DXGI_FORMAT_ASTC_12X12_UNORM_SRGB = 187, - - DXGI_FORMAT_FORCE_UINT = 0xffffffffUL - }; - - enum dxgi_format_gli - { - DXGI_FORMAT_R64_UINT_GLI = 1, - DXGI_FORMAT_R64_SINT_GLI, - DXGI_FORMAT_R64_FLOAT_GLI, - DXGI_FORMAT_R64G64_UINT_GLI, - DXGI_FORMAT_R64G64_SINT_GLI, - DXGI_FORMAT_R64G64_FLOAT_GLI, - DXGI_FORMAT_R64G64B64_UINT_GLI, - DXGI_FORMAT_R64G64B64_SINT_GLI, - DXGI_FORMAT_R64G64B64_FLOAT_GLI, - DXGI_FORMAT_R64G64B64A64_UINT_GLI, - DXGI_FORMAT_R64G64B64A64_SINT_GLI, - DXGI_FORMAT_R64G64B64A64_FLOAT_GLI, - - DXGI_FORMAT_RG4_UNORM_GLI, - DXGI_FORMAT_RGBA4_UNORM_GLI, - DXGI_FORMAT_R5G6B5_UNORM_GLI, - DXGI_FORMAT_R5G5B5A1_UNORM_GLI, - DXGI_FORMAT_A1B5G5R5_UNORM_GLI, - - DXGI_FORMAT_R8_SRGB_GLI, - DXGI_FORMAT_R8_USCALED_GLI, - DXGI_FORMAT_R8_SSCALED_GLI, - - DXGI_FORMAT_R8G8_SRGB_GLI, - DXGI_FORMAT_R8G8_USCALED_GLI, - DXGI_FORMAT_R8G8_SSCALED_GLI, - - DXGI_FORMAT_R8G8B8_UNORM_GLI, - DXGI_FORMAT_R8G8B8_SNORM_GLI, - DXGI_FORMAT_R8G8B8_USCALED_GLI, - DXGI_FORMAT_R8G8B8_SSCALED_GLI, - DXGI_FORMAT_R8G8B8_UINT_GLI, - DXGI_FORMAT_R8G8B8_SINT_GLI, - DXGI_FORMAT_R8G8B8_SRGB_GLI, - - DXGI_FORMAT_B8G8R8_UNORM_GLI, - DXGI_FORMAT_B8G8R8_SNORM_GLI, - DXGI_FORMAT_B8G8R8_USCALED_GLI, - DXGI_FORMAT_B8G8R8_SSCALED_GLI, - DXGI_FORMAT_B8G8R8_UINT_GLI, - DXGI_FORMAT_B8G8R8_SINT_GLI, - DXGI_FORMAT_B8G8R8_SRGB_GLI, - - DXGI_FORMAT_R8G8B8A8_USCALED_GLI, - DXGI_FORMAT_R8G8B8A8_SSCALED_GLI, - - DXGI_FORMAT_B8G8R8A8_SNORM_GLI, - DXGI_FORMAT_B8G8R8A8_USCALED_GLI, - DXGI_FORMAT_B8G8R8A8_SSCALED_GLI, - DXGI_FORMAT_B8G8R8A8_UINT_GLI, - DXGI_FORMAT_B8G8R8A8_SINT_GLI, - - DXGI_FORMAT_R8G8B8A8_PACK_UNORM_GLI, - DXGI_FORMAT_R8G8B8A8_PACK_SNORM_GLI, - DXGI_FORMAT_R8G8B8A8_PACK_USCALED_GLI, - DXGI_FORMAT_R8G8B8A8_PACK_SSCALED_GLI, - DXGI_FORMAT_R8G8B8A8_PACK_UINT_GLI, - DXGI_FORMAT_R8G8B8A8_PACK_SINT_GLI, - DXGI_FORMAT_R8G8B8A8_PACK_SRGB_GLI, - - DXGI_FORMAT_R10G10B10A2_SNORM_GLI, - DXGI_FORMAT_R10G10B10A2_USCALED_GLI, - DXGI_FORMAT_R10G10B10A2_SSCALED_GLI, - DXGI_FORMAT_R10G10B10A2_SINT_GLI, - - DXGI_FORMAT_B10G10R10A2_UNORM_GLI, - DXGI_FORMAT_B10G10R10A2_SNORM_GLI, - DXGI_FORMAT_B10G10R10A2_USCALED_GLI, - DXGI_FORMAT_B10G10R10A2_SSCALED_GLI, - DXGI_FORMAT_B10G10R10A2_UINT_GLI, - DXGI_FORMAT_B10G10R10A2_SINT_GLI, - - DXGI_FORMAT_R16_USCALED_GLI, - DXGI_FORMAT_R16_SSCALED_GLI, - DXGI_FORMAT_R16G16_USCALED_GLI, - DXGI_FORMAT_R16G16_SSCALED_GLI, - - DXGI_FORMAT_R16G16B16_UNORM_GLI, - DXGI_FORMAT_R16G16B16_SNORM_GLI, - DXGI_FORMAT_R16G16B16_USCALED_GLI, - DXGI_FORMAT_R16G16B16_SSCALED_GLI, - DXGI_FORMAT_R16G16B16_UINT_GLI, - DXGI_FORMAT_R16G16B16_SINT_GLI, - DXGI_FORMAT_R16G16B16_FLOAT_GLI, - - DXGI_FORMAT_R16G16B16A16_USCALED_GLI, - DXGI_FORMAT_R16G16B16A16_SSCALED_GLI, - - DXGI_FORMAT_S8_UINT_GLI, - DXGI_FORMAT_D16_UNORM_S8_UINT_GLI, - DXGI_FORMAT_D24_UNORM_GLI, - - DXGI_FORMAT_L8_UNORM_GLI, - DXGI_FORMAT_A8_UNORM_GLI, - DXGI_FORMAT_LA8_UNORM_GLI, - DXGI_FORMAT_L16_UNORM_GLI, - DXGI_FORMAT_A16_UNORM_GLI, - DXGI_FORMAT_LA16_UNORM_GLI, - - DXGI_FORMAT_R3G3B2_UNORM_GLI, - - DXGI_FORMAT_BC1_RGB_UNORM_GLI, - DXGI_FORMAT_BC1_RGB_SRGB_GLI, - DXGI_FORMAT_RGB_ETC2_UNORM_GLI, - DXGI_FORMAT_RGB_ETC2_SRGB_GLI, - DXGI_FORMAT_RGBA_ETC2_A1_UNORM_GLI, - DXGI_FORMAT_RGBA_ETC2_A1_SRGB_GLI, - DXGI_FORMAT_RGBA_ETC2_UNORM_GLI, - DXGI_FORMAT_RGBA_ETC2_SRGB_GLI, - DXGI_FORMAT_R11_EAC_UNORM_GLI, - DXGI_FORMAT_R11_EAC_SNORM_GLI, - DXGI_FORMAT_RG11_EAC_UNORM_GLI, - DXGI_FORMAT_RG11_EAC_SNORM_GLI, - - DXGI_FORMAT_RGB_PVRTC1_8X8_UNORM_GLI, - DXGI_FORMAT_RGB_PVRTC1_8X8_SRGB_GLI, - DXGI_FORMAT_RGB_PVRTC1_16X8_UNORM_GLI, - DXGI_FORMAT_RGB_PVRTC1_16X8_SRGB_GLI, - DXGI_FORMAT_RGBA_PVRTC1_8X8_UNORM_GLI, - DXGI_FORMAT_RGBA_PVRTC1_8X8_SRGB_GLI, - DXGI_FORMAT_RGBA_PVRTC1_16X8_UNORM_GLI, - DXGI_FORMAT_RGBA_PVRTC1_16X8_SRGB_GLI, - DXGI_FORMAT_RGBA_PVRTC2_8X8_UNORM_GLI, - DXGI_FORMAT_RGBA_PVRTC2_8X8_SRGB_GLI, - DXGI_FORMAT_RGBA_PVRTC2_16X8_UNORM_GLI, - DXGI_FORMAT_RGBA_PVRTC2_16X8_SRGB_GLI, - - DXGI_FORMAT_RGB_ETC_UNORM_GLI, - DXGI_FORMAT_RGB_ATC_UNORM_GLI, - DXGI_FORMAT_RGBA_ATCA_UNORM_GLI, - DXGI_FORMAT_RGBA_ATCI_UNORM_GLI, - }; - - union dxgiFormat - { - dxgiFormat() - : DDS(DXGI_FORMAT_UNKNOWN) - {} - - dxgiFormat(dxgi_format_dds DDS) - : DDS(DDS) - {} - - dxgiFormat(dxgi_format_gli GLI) - : GLI(GLI) - {} - - dxgi_format_dds DDS; - dxgi_format_gli GLI; - }; - - enum ddpf - { - DDPF_ALPHAPIXELS = 0x1, - DDPF_ALPHA = 0x2, - DDPF_FOURCC = 0x4, - DDPF_RGB = 0x40, - DDPF_YUV = 0x200, - DDPF_LUMINANCE = 0x20000, - DDPF_LUMINANCE_ALPHA = DDPF_LUMINANCE | DDPF_ALPHA, - DDPF_RGBAPIXELS = DDPF_RGB | DDPF_ALPHAPIXELS, - DDPF_RGBA = DDPF_RGB | DDPF_ALPHA, - DDPF_LUMINANCE_ALPHAPIXELS = DDPF_LUMINANCE | DDPF_ALPHAPIXELS, - - }; - - struct format - { - ddpf DDPixelFormat; - d3dfmt D3DFormat; - dxgiFormat DXGIFormat; - glm::u32vec4 Mask; - }; - - public: - dx(); - - /// Convert GLI formats into Direct3D formats - format const& translate(gli::format Format) const; - - /// Convert a Direct3D 9 format into a GLI format - gli::format find(d3dfmt FourCC) const; - - /// Convert a Direct3D 10 format into a GLI format - gli::format find(d3dfmt FourCC, dxgiFormat Format) const; - - private: - std::array Translation; - }; - - /// Evaluate whether a target and format combinaison is only supported by the DDS container through GLI DDS extension. - bool is_dds_ext(target Target, format Format); -}//namespace gli - -#include "./core/dx.inl" diff --git a/external/gli/gli/format.hpp b/external/gli/gli/format.hpp deleted file mode 100644 index 12a6ffcd..00000000 --- a/external/gli/gli/format.hpp +++ /dev/null @@ -1,348 +0,0 @@ -/// @brief Include to use the format enum and query properties of formats. -/// @file gli/format.hpp - -#pragma once - -#include "type.hpp" -#include - -namespace gli -{ - /// Texture data format - enum format - { - FORMAT_UNDEFINED = 0, - - FORMAT_RG4_UNORM_PACK8, FORMAT_FIRST = FORMAT_RG4_UNORM_PACK8, - FORMAT_RGBA4_UNORM_PACK16, - FORMAT_BGRA4_UNORM_PACK16, - FORMAT_R5G6B5_UNORM_PACK16, - FORMAT_B5G6R5_UNORM_PACK16, - FORMAT_RGB5A1_UNORM_PACK16, - FORMAT_BGR5A1_UNORM_PACK16, - FORMAT_A1RGB5_UNORM_PACK16, - - FORMAT_R8_UNORM_PACK8, - FORMAT_R8_SNORM_PACK8, - FORMAT_R8_USCALED_PACK8, - FORMAT_R8_SSCALED_PACK8, - FORMAT_R8_UINT_PACK8, - FORMAT_R8_SINT_PACK8, - FORMAT_R8_SRGB_PACK8, - - FORMAT_RG8_UNORM_PACK8, - FORMAT_RG8_SNORM_PACK8, - FORMAT_RG8_USCALED_PACK8, - FORMAT_RG8_SSCALED_PACK8, - FORMAT_RG8_UINT_PACK8, - FORMAT_RG8_SINT_PACK8, - FORMAT_RG8_SRGB_PACK8, - - FORMAT_RGB8_UNORM_PACK8, - FORMAT_RGB8_SNORM_PACK8, - FORMAT_RGB8_USCALED_PACK8, - FORMAT_RGB8_SSCALED_PACK8, - FORMAT_RGB8_UINT_PACK8, - FORMAT_RGB8_SINT_PACK8, - FORMAT_RGB8_SRGB_PACK8, - - FORMAT_BGR8_UNORM_PACK8, - FORMAT_BGR8_SNORM_PACK8, - FORMAT_BGR8_USCALED_PACK8, - FORMAT_BGR8_SSCALED_PACK8, - FORMAT_BGR8_UINT_PACK8, - FORMAT_BGR8_SINT_PACK8, - FORMAT_BGR8_SRGB_PACK8, - - FORMAT_RGBA8_UNORM_PACK8, - FORMAT_RGBA8_SNORM_PACK8, - FORMAT_RGBA8_USCALED_PACK8, - FORMAT_RGBA8_SSCALED_PACK8, - FORMAT_RGBA8_UINT_PACK8, - FORMAT_RGBA8_SINT_PACK8, - FORMAT_RGBA8_SRGB_PACK8, - - FORMAT_BGRA8_UNORM_PACK8, - FORMAT_BGRA8_SNORM_PACK8, - FORMAT_BGRA8_USCALED_PACK8, - FORMAT_BGRA8_SSCALED_PACK8, - FORMAT_BGRA8_UINT_PACK8, - FORMAT_BGRA8_SINT_PACK8, - FORMAT_BGRA8_SRGB_PACK8, - - FORMAT_RGBA8_UNORM_PACK32, - FORMAT_RGBA8_SNORM_PACK32, - FORMAT_RGBA8_USCALED_PACK32, - FORMAT_RGBA8_SSCALED_PACK32, - FORMAT_RGBA8_UINT_PACK32, - FORMAT_RGBA8_SINT_PACK32, - FORMAT_RGBA8_SRGB_PACK32, - - FORMAT_RGB10A2_UNORM_PACK32, - FORMAT_RGB10A2_SNORM_PACK32, - FORMAT_RGB10A2_USCALED_PACK32, - FORMAT_RGB10A2_SSCALED_PACK32, - FORMAT_RGB10A2_UINT_PACK32, - FORMAT_RGB10A2_SINT_PACK32, - - FORMAT_BGR10A2_UNORM_PACK32, - FORMAT_BGR10A2_SNORM_PACK32, - FORMAT_BGR10A2_USCALED_PACK32, - FORMAT_BGR10A2_SSCALED_PACK32, - FORMAT_BGR10A2_UINT_PACK32, - FORMAT_BGR10A2_SINT_PACK32, - - FORMAT_R16_UNORM_PACK16, - FORMAT_R16_SNORM_PACK16, - FORMAT_R16_USCALED_PACK16, - FORMAT_R16_SSCALED_PACK16, - FORMAT_R16_UINT_PACK16, - FORMAT_R16_SINT_PACK16, - FORMAT_R16_SFLOAT_PACK16, - - FORMAT_RG16_UNORM_PACK16, - FORMAT_RG16_SNORM_PACK16, - FORMAT_RG16_USCALED_PACK16, - FORMAT_RG16_SSCALED_PACK16, - FORMAT_RG16_UINT_PACK16, - FORMAT_RG16_SINT_PACK16, - FORMAT_RG16_SFLOAT_PACK16, - - FORMAT_RGB16_UNORM_PACK16, - FORMAT_RGB16_SNORM_PACK16, - FORMAT_RGB16_USCALED_PACK16, - FORMAT_RGB16_SSCALED_PACK16, - FORMAT_RGB16_UINT_PACK16, - FORMAT_RGB16_SINT_PACK16, - FORMAT_RGB16_SFLOAT_PACK16, - - FORMAT_RGBA16_UNORM_PACK16, - FORMAT_RGBA16_SNORM_PACK16, - FORMAT_RGBA16_USCALED_PACK16, - FORMAT_RGBA16_SSCALED_PACK16, - FORMAT_RGBA16_UINT_PACK16, - FORMAT_RGBA16_SINT_PACK16, - FORMAT_RGBA16_SFLOAT_PACK16, - - FORMAT_R32_UINT_PACK32, - FORMAT_R32_SINT_PACK32, - FORMAT_R32_SFLOAT_PACK32, - - FORMAT_RG32_UINT_PACK32, - FORMAT_RG32_SINT_PACK32, - FORMAT_RG32_SFLOAT_PACK32, - - FORMAT_RGB32_UINT_PACK32, - FORMAT_RGB32_SINT_PACK32, - FORMAT_RGB32_SFLOAT_PACK32, - - FORMAT_RGBA32_UINT_PACK32, - FORMAT_RGBA32_SINT_PACK32, - FORMAT_RGBA32_SFLOAT_PACK32, - - FORMAT_R64_UINT_PACK64, - FORMAT_R64_SINT_PACK64, - FORMAT_R64_SFLOAT_PACK64, - - FORMAT_RG64_UINT_PACK64, - FORMAT_RG64_SINT_PACK64, - FORMAT_RG64_SFLOAT_PACK64, - - FORMAT_RGB64_UINT_PACK64, - FORMAT_RGB64_SINT_PACK64, - FORMAT_RGB64_SFLOAT_PACK64, - - FORMAT_RGBA64_UINT_PACK64, - FORMAT_RGBA64_SINT_PACK64, - FORMAT_RGBA64_SFLOAT_PACK64, - - FORMAT_RG11B10_UFLOAT_PACK32, - FORMAT_RGB9E5_UFLOAT_PACK32, - - FORMAT_D16_UNORM_PACK16, - FORMAT_D24_UNORM_PACK32, - FORMAT_D32_SFLOAT_PACK32, - FORMAT_S8_UINT_PACK8, - FORMAT_D16_UNORM_S8_UINT_PACK32, - FORMAT_D24_UNORM_S8_UINT_PACK32, - FORMAT_D32_SFLOAT_S8_UINT_PACK64, - - FORMAT_RGB_DXT1_UNORM_BLOCK8, - FORMAT_RGB_DXT1_SRGB_BLOCK8, - FORMAT_RGBA_DXT1_UNORM_BLOCK8, - FORMAT_RGBA_DXT1_SRGB_BLOCK8, - FORMAT_RGBA_DXT3_UNORM_BLOCK16, - FORMAT_RGBA_DXT3_SRGB_BLOCK16, - FORMAT_RGBA_DXT5_UNORM_BLOCK16, - FORMAT_RGBA_DXT5_SRGB_BLOCK16, - FORMAT_R_ATI1N_UNORM_BLOCK8, - FORMAT_R_ATI1N_SNORM_BLOCK8, - FORMAT_RG_ATI2N_UNORM_BLOCK16, - FORMAT_RG_ATI2N_SNORM_BLOCK16, - FORMAT_RGB_BP_UFLOAT_BLOCK16, - FORMAT_RGB_BP_SFLOAT_BLOCK16, - FORMAT_RGBA_BP_UNORM_BLOCK16, - FORMAT_RGBA_BP_SRGB_BLOCK16, - - FORMAT_RGB_ETC2_UNORM_BLOCK8, - FORMAT_RGB_ETC2_SRGB_BLOCK8, - FORMAT_RGBA_ETC2_UNORM_BLOCK8, - FORMAT_RGBA_ETC2_SRGB_BLOCK8, - FORMAT_RGBA_ETC2_UNORM_BLOCK16, - FORMAT_RGBA_ETC2_SRGB_BLOCK16, - FORMAT_R_EAC_UNORM_BLOCK8, - FORMAT_R_EAC_SNORM_BLOCK8, - FORMAT_RG_EAC_UNORM_BLOCK16, - FORMAT_RG_EAC_SNORM_BLOCK16, - - FORMAT_RGBA_ASTC_4X4_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_4X4_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_5X4_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_5X4_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_5X5_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_5X5_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_6X5_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_6X5_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_6X6_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_6X6_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_8X5_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_8X5_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_8X6_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_8X6_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_8X8_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_8X8_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_10X5_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_10X5_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_10X6_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_10X6_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_10X8_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_10X8_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_10X10_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_10X10_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_12X10_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_12X10_SRGB_BLOCK16, - FORMAT_RGBA_ASTC_12X12_UNORM_BLOCK16, - FORMAT_RGBA_ASTC_12X12_SRGB_BLOCK16, - - FORMAT_RGB_PVRTC1_8X8_UNORM_BLOCK32, - FORMAT_RGB_PVRTC1_8X8_SRGB_BLOCK32, - FORMAT_RGB_PVRTC1_16X8_UNORM_BLOCK32, - FORMAT_RGB_PVRTC1_16X8_SRGB_BLOCK32, - FORMAT_RGBA_PVRTC1_8X8_UNORM_BLOCK32, - FORMAT_RGBA_PVRTC1_8X8_SRGB_BLOCK32, - FORMAT_RGBA_PVRTC1_16X8_UNORM_BLOCK32, - FORMAT_RGBA_PVRTC1_16X8_SRGB_BLOCK32, - FORMAT_RGBA_PVRTC2_4X4_UNORM_BLOCK8, - FORMAT_RGBA_PVRTC2_4X4_SRGB_BLOCK8, - FORMAT_RGBA_PVRTC2_8X4_UNORM_BLOCK8, - FORMAT_RGBA_PVRTC2_8X4_SRGB_BLOCK8, - - FORMAT_RGB_ETC_UNORM_BLOCK8, - FORMAT_RGB_ATC_UNORM_BLOCK8, - FORMAT_RGBA_ATCA_UNORM_BLOCK16, - FORMAT_RGBA_ATCI_UNORM_BLOCK16, - - FORMAT_L8_UNORM_PACK8, - FORMAT_A8_UNORM_PACK8, - FORMAT_LA8_UNORM_PACK8, - FORMAT_L16_UNORM_PACK16, - FORMAT_A16_UNORM_PACK16, - FORMAT_LA16_UNORM_PACK16, - - FORMAT_BGR8_UNORM_PACK32, - FORMAT_BGR8_SRGB_PACK32, - - FORMAT_RG3B2_UNORM_PACK8, FORMAT_LAST = FORMAT_RG3B2_UNORM_PACK8 - }; - - /// Represent the source of a channel - enum swizzle - { - SWIZZLE_RED, SWIZZLE_FIRST = SWIZZLE_RED, SWIZZLE_CHANNEL_FIRST = SWIZZLE_RED, - SWIZZLE_GREEN, - SWIZZLE_BLUE, - SWIZZLE_ALPHA, SWIZZLE_CHANNEL_LAST = SWIZZLE_ALPHA, - SWIZZLE_ZERO, - SWIZZLE_ONE, SWIZZLE_LAST = SWIZZLE_ONE - }; - - /// Determine whether the Swizzle value represent a channel - inline bool is_channel(swizzle Swizzle) - { - return Swizzle >= SWIZZLE_CHANNEL_FIRST && Swizzle <= SWIZZLE_CHANNEL_LAST; - } - - enum - { - FORMAT_COUNT = FORMAT_LAST - FORMAT_FIRST + 1, - SWIZZLE_COUNT = SWIZZLE_LAST - SWIZZLE_FIRST + 1 - }; - - /// Evaluate whether a format value is value or not - inline bool is_valid(format Format) - { - return Format >= FORMAT_FIRST && Format <= FORMAT_LAST; - } - - typedef glm::vec<4, swizzle> swizzles; - - /// Evaluate whether a format is compressed - bool is_compressed(format Format); - - /// Evaluate whether a format is compressed with an S3TC algorithm. - bool is_s3tc_compressed(format Format); - - /// Evaluate whether a format stores sRGB color space values - bool is_srgb(format Format); - - /// Return the size in bytes of a block for a format. - size_t block_size(format Format); - - /// Return the dimensions in texels of the block for a format - ivec3 block_extent(format Format); - - /// Return the number of components of a format - size_t component_count(format Format); - - /// Evaluate whether a format is unsigned - bool is_unsigned(format Format); - - /// Evaluate whether a format is signed - bool is_signed(format Format); - - /// Evaluate whether the format is an integer format - bool is_integer(format Format); - - /// Evaluate whether the format is a signed integer format - bool is_signed_integer(format Format); - - /// Evaluate whether the format is an unsigned integer format - bool is_unsigned_integer(format Format); - - /// Evaluate whether the format is an float format - bool is_float(format Format); - - /// Evaluate whether the format is normalized - bool is_normalized(format Format); - - /// Evaluate whether the format is an unsigned normalized format - bool is_unorm(format Format); - - /// Evaluate whether the format is a signed normalized format - bool is_snorm(format Format); - - /// Evaluate whether the format is packed - bool is_packed(format Format); - - /// Evaluate whether the format is a depth format - bool is_depth(format Format); - - /// Evaluate whether the format has a stencil component - bool is_stencil(format Format); - - /// Evaluate whether the format has depth and stencil components - bool is_depth_stencil(format Format); - -}//namespace gli - -#include "./core/format.inl" diff --git a/external/gli/gli/generate_mipmaps.hpp b/external/gli/gli/generate_mipmaps.hpp deleted file mode 100644 index 9810fb10..00000000 --- a/external/gli/gli/generate_mipmaps.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/// @brief Include to generate mipmaps of textures. -/// @file gli/generate_mipmaps.hpp - -#pragma once - -#include "texture1d.hpp" -#include "texture1d_array.hpp" -#include "texture2d.hpp" -#include "texture2d_array.hpp" -#include "texture3d.hpp" -#include "texture_cube.hpp" -#include "texture_cube_array.hpp" -#include "sampler.hpp" - -namespace gli -{ - /// Allocate a texture and generate all the mipmaps of the texture using the Minification filter. - template - texture_type generate_mipmaps(texture_type const& Texture, filter Minification); - - /// Allocate a texture and generate the mipmaps of the texture from the BaseLevel to the MaxLevel included using the Minification filter. - texture1d generate_mipmaps( - texture1d const& Texture, - texture1d::size_type BaseLevel, texture1d::size_type MaxLevel, - filter Minification); - - /// Allocate a texture and generate the mipmaps of the texture from the BaseLayer to the MaxLayer and from the BaseLevel to the MaxLevel included levels using the Minification filter. - texture1d_array generate_mipmaps( - texture1d_array const& Texture, - texture1d_array::size_type BaseLayer, texture1d_array::size_type MaxLayer, - texture1d_array::size_type BaseLevel, texture1d_array::size_type MaxLevel, - filter Minification); - - /// Allocate a texture and generate the mipmaps of the texture from the BaseLevel to the MaxLevel included using the Minification filter. - texture2d generate_mipmaps( - texture2d const& Texture, - texture2d::size_type BaseLevel, texture2d::size_type MaxLevel, - filter Minification); - - /// Allocate a texture and generate the mipmaps of the texture from the BaseLayer to the MaxLayer and from the BaseLevel to the MaxLevel included levels using the Minification filter. - texture2d_array generate_mipmaps( - texture2d_array const& Texture, - texture2d_array::size_type BaseLayer, texture2d_array::size_type MaxLayer, - texture2d_array::size_type BaseLevel, texture2d_array::size_type MaxLevel, - filter Minification); - - /// Allocate a texture and generate the mipmaps of the texture from the BaseLevel to the MaxLevel included using the Minification filter. - texture3d generate_mipmaps( - texture3d const& Texture, - texture3d::size_type BaseLevel, texture3d::size_type MaxLevel, - filter Minification); - - /// Allocate a texture and generate the mipmaps of the texture from the BaseLayer to the MaxLayer, from the BaseFace to the MaxFace and from the BaseLevel to the MaxLevel included levels using the Minification filter. - texture_cube generate_mipmaps( - texture_cube const& Texture, - texture_cube::size_type BaseFace, texture_cube::size_type MaxFace, - texture_cube::size_type BaseLevel, texture_cube::size_type MaxLevel, - filter Minification); - - /// Allocate a texture and generate the mipmaps of the texture from the BaseLayer to the MaxLayer and from the BaseLevel to the MaxLevel included levels using the Minification filter. - texture_cube_array generate_mipmaps( - texture_cube_array const& Texture, - texture_cube_array::size_type BaseLayer, texture_cube_array::size_type MaxLayer, - texture_cube_array::size_type BaseFace, texture_cube_array::size_type MaxFace, - texture_cube_array::size_type BaseLevel, texture_cube_array::size_type MaxLevel, - filter Minification); -}//namespace gli - -#include "./core/generate_mipmaps.inl" diff --git a/external/gli/gli/gl.hpp b/external/gli/gli/gl.hpp deleted file mode 100644 index 5be5f44b..00000000 --- a/external/gli/gli/gl.hpp +++ /dev/null @@ -1,373 +0,0 @@ -/// @brief Include to translate GLI enums to OpenGL enums -/// @file gli/gl.hpp - -#pragma once - -#include "format.hpp" -#include "target.hpp" -#include - -namespace gli -{ - /// Translation class to convert GLI enums into OpenGL values - class gl - { - public: - enum internal_format - { - INTERNAL_RGB_UNORM= 0x1907, //GL_RGB - INTERNAL_BGR_UNORM = 0x80E0, //GL_BGR - INTERNAL_RGBA_UNORM = 0x1908, //GL_RGBA - INTERNAL_BGRA_UNORM = 0x80E1, //GL_BGRA - INTERNAL_BGRA8_UNORM = 0x93A1, //GL_BGRA8_EXT - - // unorm formats - INTERNAL_R8_UNORM = 0x8229, //GL_R8 - INTERNAL_RG8_UNORM = 0x822B, //GL_RG8 - INTERNAL_RGB8_UNORM = 0x8051, //GL_RGB8 - INTERNAL_RGBA8_UNORM = 0x8058, //GL_RGBA8 - - INTERNAL_R16_UNORM = 0x822A, //GL_R16 - INTERNAL_RG16_UNORM = 0x822C, //GL_RG16 - INTERNAL_RGB16_UNORM = 0x8054, //GL_RGB16 - INTERNAL_RGBA16_UNORM = 0x805B, //GL_RGBA16 - - INTERNAL_RGB10A2_UNORM = 0x8059, //GL_RGB10_A2 - INTERNAL_RGB10A2_SNORM_EXT = 0xFFFC, - - // snorm formats - INTERNAL_R8_SNORM = 0x8F94, //GL_R8_SNORM - INTERNAL_RG8_SNORM = 0x8F95, //GL_RG8_SNORM - INTERNAL_RGB8_SNORM = 0x8F96, //GL_RGB8_SNORM - INTERNAL_RGBA8_SNORM = 0x8F97, //GL_RGBA8_SNORM - - INTERNAL_R16_SNORM = 0x8F98, //GL_R16_SNORM - INTERNAL_RG16_SNORM= 0x8F99, //GL_RG16_SNORM - INTERNAL_RGB16_SNORM= 0x8F9A, //GL_RGB16_SNORM - INTERNAL_RGBA16_SNORM = 0x8F9B, //GL_RGBA16_SNORM - - // unsigned integer formats - INTERNAL_R8U = 0x8232, //GL_R8UI - INTERNAL_RG8U = 0x8238, //GL_RG8UI - INTERNAL_RGB8U = 0x8D7D, //GL_RGB8UI - INTERNAL_RGBA8U = 0x8D7C, //GL_RGBA8UI - - INTERNAL_R16U = 0x8234, //GL_R16UI - INTERNAL_RG16U = 0x823A, //GL_RG16UI - INTERNAL_RGB16U = 0x8D77, //GL_RGB16UI - INTERNAL_RGBA16U = 0x8D76, //GL_RGBA16UI - - INTERNAL_R32U = 0x8236, //GL_R32UI - INTERNAL_RG32U = 0x823C, //GL_RG32UI - INTERNAL_RGB32U = 0x8D71, //GL_RGB32UI - INTERNAL_RGBA32U = 0x8D70, //GL_RGBA32UI - - INTERNAL_RGB10A2U = 0x906F, //GL_RGB10_A2UI - INTERNAL_RGB10A2I_EXT = 0xFFFB, - - // signed integer formats - INTERNAL_R8I = 0x8231, //GL_R8I - INTERNAL_RG8I = 0x8237, //GL_RG8I - INTERNAL_RGB8I = 0x8D8F, //GL_RGB8I - INTERNAL_RGBA8I = 0x8D8E, //GL_RGBA8I - - INTERNAL_R16I = 0x8233, //GL_R16I - INTERNAL_RG16I = 0x8239, //GL_RG16I - INTERNAL_RGB16I = 0x8D89, //GL_RGB16I - INTERNAL_RGBA16I = 0x8D88, //GL_RGBA16I - - INTERNAL_R32I = 0x8235, //GL_R32I - INTERNAL_RG32I = 0x823B, //GL_RG32I - INTERNAL_RGB32I = 0x8D83, //GL_RGB32I - INTERNAL_RGBA32I = 0x8D82, //GL_RGBA32I - - // Floating formats - INTERNAL_R16F = 0x822D, //GL_R16F - INTERNAL_RG16F = 0x822F, //GL_RG16F - INTERNAL_RGB16F = 0x881B, //GL_RGB16F - INTERNAL_RGBA16F = 0x881A, //GL_RGBA16F - - INTERNAL_R32F = 0x822E, //GL_R32F - INTERNAL_RG32F = 0x8230, //GL_RG32F - INTERNAL_RGB32F = 0x8815, //GL_RGB32F - INTERNAL_RGBA32F = 0x8814, //GL_RGBA32F - - INTERNAL_R64F_EXT = 0xFFFA, //GL_R64F - INTERNAL_RG64F_EXT = 0xFFF9, //GL_RG64F - INTERNAL_RGB64F_EXT = 0xFFF8, //GL_RGB64F - INTERNAL_RGBA64F_EXT = 0xFFF7, //GL_RGBA64F - - // sRGB formats - INTERNAL_SR8 = 0x8FBD, //GL_SR8_EXT - INTERNAL_SRG8 = 0x8FBE, //GL_SRG8_EXT - INTERNAL_SRGB8 = 0x8C41, //GL_SRGB8 - INTERNAL_SRGB8_ALPHA8 = 0x8C43, //GL_SRGB8_ALPHA8 - - // Packed formats - INTERNAL_RGB9E5 = 0x8C3D, //GL_RGB9_E5 - INTERNAL_RG11B10F = 0x8C3A, //GL_R11F_G11F_B10F - INTERNAL_RG3B2 = 0x2A10, //GL_R3_G3_B2 - INTERNAL_R5G6B5 = 0x8D62, //GL_RGB565 - INTERNAL_RGB5A1 = 0x8057, //GL_RGB5_A1 - INTERNAL_RGBA4 = 0x8056, //GL_RGBA4 - - INTERNAL_RG4_EXT = 0xFFFE, - - // Luminance Alpha formats - INTERNAL_LA4 = 0x8043, //GL_LUMINANCE4_ALPHA4 - INTERNAL_L8 = 0x8040, //GL_LUMINANCE8 - INTERNAL_A8 = 0x803C, //GL_ALPHA8 - INTERNAL_LA8 = 0x8045, //GL_LUMINANCE8_ALPHA8 - INTERNAL_L16 = 0x8042, //GL_LUMINANCE16 - INTERNAL_A16 = 0x803E, //GL_ALPHA16 - INTERNAL_LA16 = 0x8048, //GL_LUMINANCE16_ALPHA16 - - // Depth formats - INTERNAL_D16 = 0x81A5, //GL_DEPTH_COMPONENT16 - INTERNAL_D24 = 0x81A6, //GL_DEPTH_COMPONENT24 - INTERNAL_D16S8_EXT = 0xFFF6, - INTERNAL_D24S8 = 0x88F0, //GL_DEPTH24_STENCIL8 - INTERNAL_D32 = 0x81A7, //GL_DEPTH_COMPONENT32 - INTERNAL_D32F = 0x8CAC, //GL_DEPTH_COMPONENT32F - INTERNAL_D32FS8X24 = 0x8CAD, //GL_DEPTH32F_STENCIL8 - INTERNAL_S8_EXT = 0x8D48, //GL_STENCIL_INDEX8 - - // Compressed formats - INTERNAL_RGB_DXT1 = 0x83F0, //GL_COMPRESSED_RGB_S3TC_DXT1_EXT - INTERNAL_RGBA_DXT1 = 0x83F1, //GL_COMPRESSED_RGBA_S3TC_DXT1_EXT - INTERNAL_RGBA_DXT3 = 0x83F2, //GL_COMPRESSED_RGBA_S3TC_DXT3_EXT - INTERNAL_RGBA_DXT5 = 0x83F3, //GL_COMPRESSED_RGBA_S3TC_DXT5_EXT - INTERNAL_R_ATI1N_UNORM = 0x8DBB, //GL_COMPRESSED_RED_RGTC1 - INTERNAL_R_ATI1N_SNORM = 0x8DBC, //GL_COMPRESSED_SIGNED_RED_RGTC1 - INTERNAL_RG_ATI2N_UNORM = 0x8DBD, //GL_COMPRESSED_RG_RGTC2 - INTERNAL_RG_ATI2N_SNORM = 0x8DBE, //GL_COMPRESSED_SIGNED_RG_RGTC2 - INTERNAL_RGB_BP_UNSIGNED_FLOAT = 0x8E8F, //GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT - INTERNAL_RGB_BP_SIGNED_FLOAT = 0x8E8E, //GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT - INTERNAL_RGB_BP_UNORM = 0x8E8C, //GL_COMPRESSED_RGBA_BPTC_UNORM - INTERNAL_RGB_PVRTC_4BPPV1 = 0x8C00, //GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG - INTERNAL_RGB_PVRTC_2BPPV1 = 0x8C01, //GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG - INTERNAL_RGBA_PVRTC_4BPPV1 = 0x8C02, //GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG - INTERNAL_RGBA_PVRTC_2BPPV1 = 0x8C03, //GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG - INTERNAL_RGBA_PVRTC_4BPPV2 = 0x9137, //GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG - INTERNAL_RGBA_PVRTC_2BPPV2 = 0x9138, //GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG - INTERNAL_ATC_RGB = 0x8C92, //GL_ATC_RGB_AMD - INTERNAL_ATC_RGBA_EXPLICIT_ALPHA = 0x8C93, //GL_ATC_RGBA_EXPLICIT_ALPHA_AMD - INTERNAL_ATC_RGBA_INTERPOLATED_ALPHA = 0x87EE, //GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD - - INTERNAL_RGB_ETC = 0x8D64, //GL_COMPRESSED_RGB8_ETC1 - INTERNAL_RGB_ETC2 = 0x9274, //GL_COMPRESSED_RGB8_ETC2 - INTERNAL_RGBA_PUNCHTHROUGH_ETC2 = 0x9276, //GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 - INTERNAL_RGBA_ETC2 = 0x9278, //GL_COMPRESSED_RGBA8_ETC2_EAC - INTERNAL_R11_EAC = 0x9270, //GL_COMPRESSED_R11_EAC - INTERNAL_SIGNED_R11_EAC = 0x9271, //GL_COMPRESSED_SIGNED_R11_EAC - INTERNAL_RG11_EAC = 0x9272, //GL_COMPRESSED_RG11_EAC - INTERNAL_SIGNED_RG11_EAC = 0x9273, //GL_COMPRESSED_SIGNED_RG11_EAC - - INTERNAL_RGBA_ASTC_4x4 = 0x93B0, //GL_COMPRESSED_RGBA_ASTC_4x4_KHR - INTERNAL_RGBA_ASTC_5x4 = 0x93B1, //GL_COMPRESSED_RGBA_ASTC_5x4_KHR - INTERNAL_RGBA_ASTC_5x5 = 0x93B2, //GL_COMPRESSED_RGBA_ASTC_5x5_KHR - INTERNAL_RGBA_ASTC_6x5 = 0x93B3, //GL_COMPRESSED_RGBA_ASTC_6x5_KHR - INTERNAL_RGBA_ASTC_6x6 = 0x93B4, //GL_COMPRESSED_RGBA_ASTC_6x6_KHR - INTERNAL_RGBA_ASTC_8x5 = 0x93B5, //GL_COMPRESSED_RGBA_ASTC_8x5_KHR - INTERNAL_RGBA_ASTC_8x6 = 0x93B6, //GL_COMPRESSED_RGBA_ASTC_8x6_KHR - INTERNAL_RGBA_ASTC_8x8 = 0x93B7, //GL_COMPRESSED_RGBA_ASTC_8x8_KHR - INTERNAL_RGBA_ASTC_10x5 = 0x93B8, //GL_COMPRESSED_RGBA_ASTC_10x5_KHR - INTERNAL_RGBA_ASTC_10x6 = 0x93B9, //GL_COMPRESSED_RGBA_ASTC_10x6_KHR - INTERNAL_RGBA_ASTC_10x8 = 0x93BA, //GL_COMPRESSED_RGBA_ASTC_10x8_KHR - INTERNAL_RGBA_ASTC_10x10 = 0x93BB, //GL_COMPRESSED_RGBA_ASTC_10x10_KHR - INTERNAL_RGBA_ASTC_12x10 = 0x93BC, //GL_COMPRESSED_RGBA_ASTC_12x10_KHR - INTERNAL_RGBA_ASTC_12x12 = 0x93BD, //GL_COMPRESSED_RGBA_ASTC_12x12_KHR - - // sRGB formats - INTERNAL_SRGB_DXT1 = 0x8C4C, //GL_COMPRESSED_SRGB_S3TC_DXT1_EXT - INTERNAL_SRGB_ALPHA_DXT1 = 0x8C4D, //GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT - INTERNAL_SRGB_ALPHA_DXT3 = 0x8C4E, //GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT - INTERNAL_SRGB_ALPHA_DXT5 = 0x8C4F, //GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT - INTERNAL_SRGB_BP_UNORM = 0x8E8D, //GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM - INTERNAL_SRGB_PVRTC_2BPPV1 = 0x8A54, //GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT - INTERNAL_SRGB_PVRTC_4BPPV1 = 0x8A55, //GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT - INTERNAL_SRGB_ALPHA_PVRTC_2BPPV1 = 0x8A56, //GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT - INTERNAL_SRGB_ALPHA_PVRTC_4BPPV1 = 0x8A57, //GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT - INTERNAL_SRGB_ALPHA_PVRTC_2BPPV2 = 0x93F0, //COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG - INTERNAL_SRGB_ALPHA_PVRTC_4BPPV2 = 0x93F1, //GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG - INTERNAL_SRGB8_ETC2 = 0x9275, //GL_COMPRESSED_SRGB8_ETC2 - INTERNAL_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277, //GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 - INTERNAL_SRGB8_ALPHA8_ETC2_EAC = 0x9279, //GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC - INTERNAL_SRGB8_ALPHA8_ASTC_4x4 = 0x93D0, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_5x4 = 0x93D1, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_5x5 = 0x93D2, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_6x5 = 0x93D3, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_6x6 = 0x93D4, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_8x5 = 0x93D5, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_8x6 = 0x93D6, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_8x8 = 0x93D7, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_10x5 = 0x93D8, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_10x6 = 0x93D9, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_10x8 = 0x93DA, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_10x10 = 0x93DB, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_12x10 = 0x93DC, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR - INTERNAL_SRGB8_ALPHA8_ASTC_12x12 = 0x93DD, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR - - INTERNAL_ALPHA8 = 0x803C, - INTERNAL_ALPHA16 = 0x803E, - INTERNAL_LUMINANCE8 = 0x8040, - INTERNAL_LUMINANCE16 = 0x8042, - INTERNAL_LUMINANCE8_ALPHA8 = 0x8045, - INTERNAL_LUMINANCE16_ALPHA16 = 0x8048, - - INTERNAL_R8_USCALED_GTC = 0xF000, - INTERNAL_R8_SSCALED_GTC, - INTERNAL_RG8_USCALED_GTC, - INTERNAL_RG8_SSCALED_GTC, - INTERNAL_RGB8_USCALED_GTC, - INTERNAL_RGB8_SSCALED_GTC, - INTERNAL_RGBA8_USCALED_GTC, - INTERNAL_RGBA8_SSCALED_GTC, - INTERNAL_RGB10A2_USCALED_GTC, - INTERNAL_RGB10A2_SSCALED_GTC, - INTERNAL_R16_USCALED_GTC, - INTERNAL_R16_SSCALED_GTC, - INTERNAL_RG16_USCALED_GTC, - INTERNAL_RG16_SSCALED_GTC, - INTERNAL_RGB16_USCALED_GTC, - INTERNAL_RGB16_SSCALED_GTC, - INTERNAL_RGBA16_USCALED_GTC, - INTERNAL_RGBA16_SSCALED_GTC, - }; - - enum external_format - { - EXTERNAL_NONE = 0, //GL_NONE - EXTERNAL_RED = 0x1903, //GL_RED - EXTERNAL_RG = 0x8227, //GL_RG - EXTERNAL_RGB= 0x1907, //GL_RGB - EXTERNAL_BGR = 0x80E0, //GL_BGR - EXTERNAL_RGBA = 0x1908, //GL_RGBA - EXTERNAL_BGRA = 0x80E1, //GL_BGRA - EXTERNAL_RED_INTEGER = 0x8D94, //GL_RED_INTEGER - EXTERNAL_RG_INTEGER = 0x8228, //GL_RG_INTEGER - EXTERNAL_RGB_INTEGER = 0x8D98, //GL_RGB_INTEGER - EXTERNAL_BGR_INTEGER = 0x8D9A, //GL_BGR_INTEGER - EXTERNAL_RGBA_INTEGER = 0x8D99, //GL_RGBA_INTEGER - EXTERNAL_BGRA_INTEGER = 0x8D9B, //GL_BGRA_INTEGER - EXTERNAL_DEPTH = 0x1902, //GL_DEPTH_COMPONENT - EXTERNAL_DEPTH_STENCIL = 0x84F9, //GL_DEPTH_STENCIL - EXTERNAL_STENCIL = 0x1901, //GL_STENCIL_INDEX - - EXTERNAL_LUMINANCE = 0x1909, //GL_LUMINANCE - EXTERNAL_ALPHA = 0x1906, //GL_ALPHA - EXTERNAL_LUMINANCE_ALPHA = 0x190A, //GL_LUMINANCE_ALPHA - - EXTERNAL_SRGB_EXT = 0x8C40, //SRGB_EXT - EXTERNAL_SRGB_ALPHA_EXT = 0x8C42 //SRGB_ALPHA_EXT - }; - - enum type_format - { - TYPE_NONE = 0, //GL_NONE - TYPE_I8 = 0x1400, //GL_BYTE - TYPE_U8 = 0x1401, //GL_UNSIGNED_BYTE - TYPE_I16 = 0x1402, //GL_SHORT - TYPE_U16 = 0x1403, //GL_UNSIGNED_SHORT - TYPE_I32 = 0x1404, //GL_INT - TYPE_U32 = 0x1405, //GL_UNSIGNED_INT - TYPE_I64 = 0x140E, //GL_INT64_ARB - TYPE_U64 = 0x140F, //GL_UNSIGNED_INT64_ARB - TYPE_F16 = 0x140B, //GL_HALF_FLOAT - TYPE_F16_OES = 0x8D61, //GL_HALF_FLOAT_OES - TYPE_F32 = 0x1406, //GL_FLOAT - TYPE_F64 = 0x140A, //GL_DOUBLE - TYPE_UINT32_RGB9_E5_REV = 0x8C3E, //GL_UNSIGNED_INT_5_9_9_9_REV - TYPE_UINT32_RG11B10F_REV = 0x8C3B, //GL_UNSIGNED_INT_10F_11F_11F_REV - TYPE_UINT8_RG3B2 = 0x8032, //GL_UNSIGNED_BYTE_3_3_2 - TYPE_UINT8_RG3B2_REV = 0x8362, //GL_UNSIGNED_BYTE_2_3_3_REV - TYPE_UINT16_RGB5A1 = 0x8034, //GL_UNSIGNED_SHORT_5_5_5_1 - TYPE_UINT16_RGB5A1_REV = 0x8366, //GL_UNSIGNED_SHORT_1_5_5_5_REV - TYPE_UINT16_R5G6B5 = 0x8363, //GL_UNSIGNED_SHORT_5_6_5 - TYPE_UINT16_R5G6B5_REV = 0x8364, //GL_UNSIGNED_SHORT_5_6_5_REV - TYPE_UINT16_RGBA4 = 0x8033, //GL_UNSIGNED_SHORT_4_4_4_4 - TYPE_UINT16_RGBA4_REV = 0x8365, //GL_UNSIGNED_SHORT_4_4_4_4_REV - TYPE_UINT32_RGBA8 = 0x8035, //GL_UNSIGNED_SHORT_8_8_8_8 - TYPE_UINT32_RGBA8_REV = 0x8367, //GL_UNSIGNED_SHORT_8_8_8_8_REV - TYPE_UINT32_RGB10A2 = 0x8036, //GL_UNSIGNED_INT_10_10_10_2 - TYPE_UINT32_RGB10A2_REV = 0x8368, //GL_UNSIGNED_INT_2_10_10_10_REV - - TYPE_UINT8_RG4_REV_GTC = 0xFFFD, - TYPE_UINT16_A1RGB5_GTC = 0xFFFC - }; - - enum target - { - TARGET_1D = 0x0DE0, - TARGET_1D_ARRAY = 0x8C18, - TARGET_2D = 0x0DE1, - TARGET_2D_ARRAY = 0x8C1A, - TARGET_3D = 0x806F, - TARGET_RECT = 0x84F5, - TARGET_RECT_ARRAY = 0x84F5, // Not supported by OpenGL - TARGET_CUBE = 0x8513, - TARGET_CUBE_ARRAY = 0x9009 - }; - - enum swizzle - { - SWIZZLE_RED = 0x1903, //GL_RED - SWIZZLE_GREEN = 0x1904, //GL_GREEN - SWIZZLE_BLUE = 0x1905, //GL_BLUE - SWIZZLE_ALPHA = 0x1906, //GL_ALPHA - SWIZZLE_ZERO = 0x0000, //GL_ZERO - SWIZZLE_ONE = 0x0001, //GL_ONE - }; - - enum profile - { - PROFILE_ES20, - PROFILE_ES30, - PROFILE_GL32, - PROFILE_GL33, - PROFILE_KTX - }; - - typedef glm::vec<4, int> swizzles; - - struct format - { - internal_format Internal; - external_format External; - type_format Type; - swizzles Swizzles; - }; - - gl(profile Profile); - - /// Convert GLI targets into OpenGL texture targets - target const& translate(gli::target Target) const; - - /// Convert GLI formats into OpenGL texture formats - format translate(gli::format Format, gli::swizzles const& Swizzle) const; - - /// Convert an OpenGL format into a GLI format - gli::format find(internal_format InternalFormat, external_format ExternalFormat, type_format Type); - - private: - struct format_desc - { - internal_format Internal; - external_format External; - type_format Type; - unsigned int Properties; - }; - - bool has_swizzle(profile Profile) const - { - return Profile == PROFILE_ES30 || Profile == PROFILE_GL33; - } - - gl::swizzles compute_swizzle(format_desc const& FormatDesc, gli::swizzles const& Swizzle) const; - - std::array FormatDesc; - profile Profile; - }; -}//namespace gli - -#include "./core/gl.inl" diff --git a/external/gli/gli/gli.hpp b/external/gli/gli/gli.hpp deleted file mode 100644 index 9a808d4d..00000000 --- a/external/gli/gli/gli.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/// @brief Include to include everything in GLI which is not recommendated due to compilation time cost. -/// @file gli/gli.hpp -/// @mainpage OpenGL Image (GLI) -/// -/// [OpenGL Image](http://gli.g-truc.net/) (*GLI*) is a header only C++ image library for graphics software. -/// (*GLI*) provides classes and functions to load image files ([KTX](https://www.khronos.org/opengles/sdk/tools/KTX/) and [DDS](https://msdn.microsoft.com/en-us/library/windows/desktop/bb943990%28v=vs.85%29.aspx)), -/// facilitate graphics APIs texture creation, compare textures, access texture texels, sample textures, convert textures, generate mipmaps, etc. -/// -/// This library works perfectly with [OpenGL](https://www.opengl.org) or [Vulkan](https://www.khronos.org/vulkan) but it also ensures interoperability with other third party libraries and SDK. -/// It is a good candidate for software rendering (raytracing / rasterisation), image processing, image based software testing or any development context that requires a simple and convenient image library. -/// -/// *GLI* is written in C++11. It is a platform independent library with no dependence and it supports the following compilers: -/// - [Apple Clang 4.0](https://developer.apple.com/library/mac/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher -/// - [GCC](http://gcc.gnu.org/) 4.6 and higher -/// - [Intel C++ Composer](https://software.intel.com/en-us/intel-compilers) XE 2013 and higher -/// - [LLVM](http://llvm.org/) 3.2 and higher -/// - [Visual C++](http://www.visualstudio.com/) 2010 and higher -/// - Any conform C++11 compiler -/// -/// For more information about *GLI*, please have a look at the [API reference documentation](http://gli.g-truc.net/0.8.0/api/index.html). -/// The source code and the documentation are licensed under the [Happy Bunny License (Modified MIT) or the MIT License](copying.md). -/// -/// Thanks for contributing to the project by [submitting issues](https://github.com/g-truc/gli/issues) for bug reports and feature requests. Any feedback is welcome at [gli@g-truc.net](mailto://gli@g-truc.net). - -#pragma once - -#define GLI_VERSION 84 -#define GLI_VERSION_MAJOR 0 -#define GLI_VERSION_MINOR 8 -#define GLI_VERSION_PATCH 4 -#define GLI_VERSION_REVISION 0 - -/// Namespace where all the classes and functions provided by GLI are exposed -namespace gli -{ - -}//namespace gli - -#include "format.hpp" -#include "target.hpp" -#include "levels.hpp" - -#include "image.hpp" -#include "texture.hpp" -#include "texture1d.hpp" -#include "texture1d_array.hpp" -#include "texture2d.hpp" -#include "texture2d_array.hpp" -#include "texture3d.hpp" -#include "texture_cube.hpp" -#include "texture_cube_array.hpp" - -#include "sampler1d.hpp" -#include "sampler1d_array.hpp" -#include "sampler2d.hpp" -#include "sampler2d_array.hpp" -#include "sampler3d.hpp" -#include "sampler_cube.hpp" -#include "sampler_cube_array.hpp" - -#include "duplicate.hpp" -#include "convert.hpp" -#include "view.hpp" -#include "comparison.hpp" - -#include "reduce.hpp" -#include "transform.hpp" - -#include "load.hpp" -#include "save.hpp" - -#include "gl.hpp" -#include "dx.hpp" - -#include "./core/flip.hpp" diff --git a/external/gli/gli/image.hpp b/external/gli/gli/image.hpp deleted file mode 100644 index b01e6181..00000000 --- a/external/gli/gli/image.hpp +++ /dev/null @@ -1,111 +0,0 @@ -/// @brief Include to use images, a representation of a single texture level. -/// @file gli/image.hpp - -#pragma once - -#include "./core/storage_linear.hpp" - -namespace gli -{ - /// Image, representation for a single texture level - class image - { - private: - friend class texture1d; - friend class texture2d; - friend class texture3d; - - public: - typedef size_t size_type; - typedef gli::format format_type; - typedef storage_linear::extent_type extent_type; - typedef storage_linear::data_type data_type; - - /// Create an empty image instance - image(); - - /// Create an image object and allocate an image storoge for it. - explicit image(format_type Format, extent_type const& Extent); - - /// Create an image object by sharing an existing image storage_linear from another image instance. - /// This image object is effectively an image view where format can be reinterpreted - /// with a different compatible image format. - /// For formats to be compatible, the block size of source and destination must match. - explicit image(image const& Image, format_type Format); - - /// Return whether the image instance is empty, no storage_linear or description have been assigned to the instance. - bool empty() const; - - /// Return the image instance format. - format_type format() const; - - /// Return the dimensions of an image instance: width, height and depth. - extent_type extent() const; - - /// Return the memory size of an image instance storage_linear in bytes. - size_type size() const; - - /// Return the number of blocks contained in an image instance storage_linear. - /// genType size must match the block size conresponding to the image format. - template - size_type size() const; - - /// Return a pointer to the beginning of the image instance data. - void* data(); - - /// Return a pointer to the beginning of the image instance data. - void const* data() const; - - /// Return a pointer of type genType which size must match the image format block size. - template - genType* data(); - - /// Return a pointer of type genType which size must match the image format block size. - template - genType const* data() const; - - /// Clear the entire image storage_linear with zeros - void clear(); - - /// Clear the entire image storage_linear with Texel which type must match the image storage_linear format block size - /// If the type of genType doesn't match the type of the image format, no conversion is performed and the data will be reinterpreted as if is was of the image format. - template - void clear(genType const& Texel); - - /// Load the texel located at TexelCoord coordinates. - /// It's an error to call this function if the format is compressed. - /// It's an error if TexelCoord values aren't between [0, dimensions]. - template - genType load(extent_type const& TexelCoord); - - /// Store the texel located at TexelCoord coordinates. - /// It's an error to call this function if the format is compressed. - /// It's an error if TexelCoord values aren't between [0, dimensions]. - template - void store(extent_type const& TexelCoord, genType const& Data); - - private: - /// Create an image object by sharing an existing image storage_linear from another image instance. - /// This image object is effectively an image view where the layer, the face and the level allows identifying - /// a specific subset of the image storage_linear source. - /// This image object is effectively a image view where the format can be reinterpreted - /// with a different compatible image format. - explicit image( - std::shared_ptr Storage, - format_type Format, - size_type BaseLayer, - size_type BaseFace, - size_type BaseLevel); - - std::shared_ptr Storage; - format_type const Format; - size_type const BaseLevel; - data_type* Data; - size_type const Size; - - data_type* compute_data(size_type BaseLayer, size_type BaseFace, size_type BaseLevel); - size_type compute_size(size_type Level) const; - }; -}//namespace gli - -#include "./core/image.inl" diff --git a/external/gli/gli/levels.hpp b/external/gli/gli/levels.hpp deleted file mode 100644 index fdaac28b..00000000 --- a/external/gli/gli/levels.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/// @brief Include to compute the number of mipmaps levels necessary to create a mipmap complete texture. -/// @file gli/levels.hpp - -#pragma once - -#include "type.hpp" - -namespace gli -{ - /// Compute the number of mipmaps levels necessary to create a mipmap complete texture - /// - /// @param Extent Extent of the texture base level mipmap - /// @tparam vecType Vector type used to express the dimensions of a texture of any kind. - /// @code - /// #include - /// #include - /// ... - /// gli::texture2d::extent_type Extent(32, 10); - /// gli::texture2d Texture(gli::levels(Extent)); - /// @endcode - template - T levels(vec const& Extent); -/* - /// Compute the number of mipmaps levels necessary to create a mipmap complete texture - /// - /// @param Extent Extent of the texture base level mipmap - /// @code - /// #include - /// #include - /// ... - /// gli::texture2d Texture(32); - /// @endcode - size_t levels(size_t Extent); - - /// Compute the number of mipmaps levels necessary to create a mipmap complete texture - /// - /// @param Extent Extent of the texture base level mipmap - /// @code - /// #include - /// #include - /// ... - /// gli::texture2d Texture(32); - /// @endcode - int levels(int Extent); -*/ -}//namespace gli - -#include "./core/levels.inl" diff --git a/external/gli/gli/load.hpp b/external/gli/gli/load.hpp deleted file mode 100644 index 2b6c9b04..00000000 --- a/external/gli/gli/load.hpp +++ /dev/null @@ -1,27 +0,0 @@ -/// @brief Include to load DDS, KTX or KMG textures from files or memory. -/// @file gli/load.hpp - -#pragma once - -#include "texture.hpp" - -namespace gli -{ - /// Loads a texture storage_linear from file. Returns an empty storage_linear in case of failure. - /// - /// @param Path Path of the file to open including filaname and filename extension - texture load(char const* Path); - - /// Loads a texture storage_linear from file. Returns an empty storage_linear in case of failure. - /// - /// @param Path Path of the file to open including filaname and filename extension - texture load(std::string const& Path); - - /// Loads a texture storage_linear from memory. Returns an empty storage_linear in case of failure. - /// - /// @param Data Data of a texture - /// @param Size Size of the data - texture load(char const* Data, std::size_t Size); -}//namespace gli - -#include "./core/load.inl" diff --git a/external/gli/gli/load_dds.hpp b/external/gli/gli/load_dds.hpp deleted file mode 100644 index 7ac57f57..00000000 --- a/external/gli/gli/load_dds.hpp +++ /dev/null @@ -1,27 +0,0 @@ -/// @brief Include to load DDS textures from files or memory. -/// @file gli/load_dds.hpp - -#pragma once - -#include "texture.hpp" - -namespace gli -{ - /// Loads a texture storage_linear from DDS file. Returns an empty storage_linear in case of failure. - /// - /// @param Path Path of the file to open including filaname and filename extension - texture load_dds(char const* Path); - - /// Loads a texture storage_linear from DDS file. Returns an empty storage_linear in case of failure. - /// - /// @param Path Path of the file to open including filaname and filename extension - texture load_dds(std::string const& Path); - - /// Loads a texture storage_linear from DDS memory. Returns an empty storage_linear in case of failure. - /// - /// @param Data Pointer to the beginning of the texture container data to read - /// @param Size Size of texture container Data to read - texture load_dds(char const* Data, std::size_t Size); -}//namespace gli - -#include "./core/load_dds.inl" diff --git a/external/gli/gli/load_kmg.hpp b/external/gli/gli/load_kmg.hpp deleted file mode 100644 index 05e250fa..00000000 --- a/external/gli/gli/load_kmg.hpp +++ /dev/null @@ -1,27 +0,0 @@ -/// @brief Include to load KMG textures from files or memory. -/// @file gli/load_kmg.hpp - -#pragma once - -#include "texture.hpp" - -namespace gli -{ - /// Loads a texture storage_linear from KMG (Khronos Image) file. Returns an empty storage_linear in case of failure. - /// - /// @param Path Path of the file to open including filaname and filename extension - texture load_kmg(char const* Path); - - /// Loads a texture storage_linear from KMG (Khronos Image) file. Returns an empty storage_linear in case of failure. - /// - /// @param Path Path of the file to open including filaname and filename extension - texture load_kmg(std::string const& Path); - - /// Loads a texture storage_linear from KMG (Khronos Image) memory. Returns an empty storage_linear in case of failure. - /// - /// @param Data Pointer to the beginning of the texture container data to read - /// @param Size Size of texture container Data to read - texture load_kmg(char const* Data, std::size_t Size); -}//namespace gli - -#include "./core/load_kmg.inl" diff --git a/external/gli/gli/load_ktx.hpp b/external/gli/gli/load_ktx.hpp deleted file mode 100644 index 9928e640..00000000 --- a/external/gli/gli/load_ktx.hpp +++ /dev/null @@ -1,27 +0,0 @@ -/// @brief Include to load KTX textures from files or memory. -/// @file gli/load_ktx.hpp - -#pragma once - -#include "texture.hpp" - -namespace gli -{ - /// Loads a texture storage_linear from KTX file. Returns an empty storage_linear in case of failure. - /// - /// @param Path Path of the file to open including filaname and filename extension - texture load_ktx(char const* Path); - - /// Loads a texture storage_linear from KTX file. Returns an empty storage_linear in case of failure. - /// - /// @param Path Path of the file to open including filaname and filename extension - texture load_ktx(std::string const& Path); - - /// Loads a texture storage_linear from KTX memory. Returns an empty storage_linear in case of failure. - /// - /// @param Data Pointer to the beginning of the texture container data to read - /// @param Size Size of texture container Data to read - texture load_ktx(char const* Data, std::size_t Size); -}//namespace gli - -#include "./core/load_ktx.inl" diff --git a/external/gli/gli/make_texture.hpp b/external/gli/gli/make_texture.hpp deleted file mode 100644 index 6c2a157a..00000000 --- a/external/gli/gli/make_texture.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/// @brief Helper functions to create generic texture -/// @file gli/make_texture.hpp - -#pragma once - -namespace gli -{ - // Helper function to create a 1d texture with a specific number of levels - gli::texture make_texture1d(format Format, extent1d const& Extent, size_t Levels); - - // Helper function to create a 1d texture with a complete mipmap chain - gli::texture make_texture1d(format Format, extent1d const& Extent); - - // Helper function to create a 1d array texture with a specific number of levels - gli::texture make_texture1d_array(format Format, extent1d const& Extent, size_t Layers, size_t Levels); - - // Helper function to create a 1d array texture with a complete mipmap chain - gli::texture make_texture1d_array(format Format, extent1d const& Extent, size_t Layers); - - // Helper function to create a 2d texture with a specific number of levels - gli::texture make_texture2d(format Format, extent2d const& Extent, size_t Levels); - - // Helper function to create a 2d texture with a complete mipmap chain - gli::texture make_texture2d(format Format, extent2d const& Extent); - - // Helper function to create a 2d array texture with a specific number of levels - gli::texture make_texture2d_array(format Format, extent2d const& Extent, size_t Layer, size_t Levels); - - // Helper function to create a 2d array texture with a complete mipmap chain - gli::texture make_texture2d_array(format Format, extent2d const& Extent, size_t Layer); - - // Helper function to create a 3d texture with a specific number of levels - gli::texture make_texture3d(format Format, extent3d const& Extent, size_t Levels); - - // Helper function to create a 3d texture with a complete mipmap chain - gli::texture make_texture3d(format Format, extent3d const& Extent); - - // Helper function to create a cube texture with a specific number of levels - gli::texture make_texture_cube(format Format, extent2d const& Extent, size_t Levels); - - // Helper function to create a cube texture with a complete mipmap chain - gli::texture make_texture_cube(format Format, extent2d const& Extent); - - // Helper function to create a cube array texture with a specific number of levels - gli::texture make_texture_cube_array(format Format, extent2d const& Extent, size_t Layer, size_t Levels); - - // Helper function to create a cube array texture with a complete mipmap chain - gli::texture make_texture_cube_array(format Format, extent2d const& Extent, size_t Layer); -}//namespace gli - -#include "./core/make_texture.inl" diff --git a/external/gli/gli/reduce.hpp b/external/gli/gli/reduce.hpp deleted file mode 100644 index bb3d7100..00000000 --- a/external/gli/gli/reduce.hpp +++ /dev/null @@ -1,95 +0,0 @@ -/// @brief Include to perform reduction operations. -/// @file gli/reduce.hpp - -#pragma once - -#include "texture1d.hpp" -#include "texture1d_array.hpp" -#include "texture2d.hpp" -#include "texture2d_array.hpp" -#include "texture3d.hpp" -#include "texture_cube.hpp" -#include "texture_cube_array.hpp" - -namespace gli -{ - template - struct reduce_func - { - typedef vec_type(*type)(vec_type const & A, vec_type const & B); - }; - - /// Compute per-texel operations using a user defined function. - /// - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function for per texel operation. - /// @param ReduceFunc Pointer to a binary function to reduce texels. - template - vec_type reduce(texture1d const & In0, texture1d const & In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function for per texel operation. - /// @param ReduceFunc Pointer to a binary function to reduce texels. - template - vec_type reduce(texture1d_array const & In0, texture1d_array const & In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function for per texel operation. - /// @param ReduceFunc Pointer to a binary function to reduce texels. - template - vec_type reduce(texture2d const & In0, texture2d const & In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function for per texel operation. - /// @param ReduceFunc Pointer to a binary function to reduce texels. - template - vec_type reduce(texture2d_array const & In0, texture2d_array const & In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function for per texel operation. - /// @param ReduceFunc Pointer to a binary function to reduce texels. - template - vec_type reduce(texture3d const & In0, texture3d const & In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function for per texel operation. - /// @param ReduceFunc Pointer to a binary function to reduce texels. - template - vec_type reduce(texture_cube const & In0, texture_cube const & In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function for per texel operation. - /// @param ReduceFunc Pointer to a binary function to reduce texels. - template - vec_type reduce(texture_cube_array const & In0, texture_cube_array const & In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function for per texel operation. - /// @param ReduceFunc Pointer to a binary function to reduce texels. - template - vec_type reduce(texture_type const & In0, texture_type const & In1, typename reduce_func::type TexelFunc, typename reduce_func::type ReduceFunc); -}//namespace gli - -#include "./core/reduce.inl" diff --git a/external/gli/gli/sampler.hpp b/external/gli/gli/sampler.hpp deleted file mode 100644 index a1bbcdb6..00000000 --- a/external/gli/gli/sampler.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/// @brief Include to use wrap modes and the sampler base class. -/// @file gli/sampler.hpp - -#pragma once - -#include "core/filter.hpp" - -namespace gli -{ - /// Texture coordinate wrapping mode - enum wrap - { - WRAP_CLAMP_TO_EDGE, WRAP_FIRST = WRAP_CLAMP_TO_EDGE, - WRAP_CLAMP_TO_BORDER, - WRAP_REPEAT, - WRAP_MIRROR_REPEAT, - WRAP_MIRROR_CLAMP_TO_EDGE, - WRAP_MIRROR_CLAMP_TO_BORDER, WRAP_LAST = WRAP_MIRROR_CLAMP_TO_BORDER - }; - - enum - { - WRAP_COUNT = WRAP_LAST - WRAP_FIRST + 1 - }; - - /// Evaluate whether the texture coordinate wrapping mode relies on border color - inline bool is_border(wrap Wrap) - { - return Wrap == WRAP_CLAMP_TO_BORDER || Wrap == WRAP_MIRROR_CLAMP_TO_BORDER; - } - - /// Genetic sampler class. - class sampler - { - public: - sampler(wrap Wrap, filter Mip, filter Min); - virtual ~sampler() = default; - - protected: - typedef float(*wrap_type)(float const & SamplerCoord); - - wrap_type get_func(wrap WrapMode) const; - - wrap_type Wrap; - filter Mip; - filter Min; - }; -}//namespace gli - -#include "./core/sampler.inl" diff --git a/external/gli/gli/sampler1d.hpp b/external/gli/gli/sampler1d.hpp deleted file mode 100644 index ceb4d4a2..00000000 --- a/external/gli/gli/sampler1d.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/// @brief Include to sample 1d textures. -/// @file gli/sampler1d.hpp - -#pragma once - -#include "sampler.hpp" -#include "texture1d.hpp" -#include "core/mipmaps_compute.hpp" -#include "core/convert_func.hpp" - -namespace gli -{ - /// 1d texture sampler - /// @tparam T Sampler can fetch, write and interpret any texture format but will expose and process the data through type T conversions. - /// @tparam P Precision in term of ULPs - template - class sampler1d : public sampler - { - private: - typedef typename detail::interpolate::type interpolate_type; - - public: - typedef texture1d texture_type; - typedef typename texture_type::size_type size_type; - typedef typename texture_type::extent_type extent_type; - typedef interpolate_type level_type; - typedef vec<1, interpolate_type, P> normalized_type; - typedef vec<4, T, P> texel_type; - - sampler1d(texture_type const& Texture, wrap Wrap, filter Mip = FILTER_NEAREST, filter Min = FILTER_NEAREST, texel_type const& BorderColor = texel_type(0, 0, 0, 1)); - - /// Access the sampler texture object - texture_type const& operator()() const; - - /// Fetch a texel from the sampler texture - texel_type texel_fetch(extent_type const& TexelCoord, size_type const& Level) const; - - /// Write a texel in the sampler texture - void texel_write(extent_type const& TexelCoord, size_type const& Level, texel_type const& Texel); - - /// Clear the sampler texture with a uniform texel - void clear(texel_type const& Texel); - - /// Sample the sampler texture at a specific level - texel_type texture_lod(normalized_type const& SampleCoord, level_type Level) const; - - /// Generate all the mipmaps of the sampler texture from the texture base level - void generate_mipmaps(filter Minification); - - /// Generate the mipmaps of the sampler texture from the texture base level to the texture max level included - void generate_mipmaps(size_type BaseLevel, size_type MaxLevel, filter Minification); - - private: - typedef typename detail::convert::func convert_type; - typedef typename detail::convert::fetchFunc fetch_type; - typedef typename detail::convert::writeFunc write_type; - typedef typename detail::filterBase::filterFunc filter_type; - - texture_type Texture; - convert_type Convert; - texel_type BorderColor; - filter_type Filter; - }; - - typedef sampler1d fsampler1D; - typedef sampler1d dsampler1D; - typedef sampler1d usampler1D; - typedef sampler1d isampler1D; -}//namespace gli - -#include "./core/sampler1d.inl" diff --git a/external/gli/gli/sampler1d_array.hpp b/external/gli/gli/sampler1d_array.hpp deleted file mode 100644 index 96234a72..00000000 --- a/external/gli/gli/sampler1d_array.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/// @brief Include to sample 1d array textures. -/// @file gli/sampler1d_array.hpp - -#pragma once - -#include "sampler.hpp" -#include "texture1d_array.hpp" -#include "core/mipmaps_compute.hpp" -#include "core/convert_func.hpp" - -namespace gli -{ - /// 1d array texture sampler - /// @tparam T Sampler can fetch, write and interpret any texture format but will expose and process the data through type T conversions. - /// @tparam P Precision in term of ULPs - template - class sampler1d_array : public sampler - { - private: - typedef typename detail::interpolate::type interpolate_type; - - public: - typedef texture1d_array texture_type; - typedef typename texture_type::size_type size_type; - typedef typename texture_type::extent_type extent_type; - typedef interpolate_type level_type; - typedef vec<1, interpolate_type, P> normalized_type; - typedef vec<4, T, P> texel_type; - - sampler1d_array(texture_type const& Texture, wrap Wrap, filter Mip = FILTER_NEAREST, filter Min = FILTER_NEAREST, texel_type const& BorderColor = texel_type(0, 0, 0, 1)); - - /// Access the sampler texture object - texture_type const& operator()() const; - - /// Fetch a texel from the sampler texture - texel_type texel_fetch(extent_type const& TexelCoord, size_type layer, size_type Level) const; - - /// Write a texel in the sampler texture - void texel_write(extent_type const& TexelCoord, size_type layer, size_type Level, texel_type const & Texel); - - /// Clear the sampler texture with a uniform texel - void clear(texel_type const& Texel); - - /// Sample the sampler texture at a specific level - texel_type texture_lod(normalized_type const& SampleCoord, size_type layer, level_type Level) const; - - /// Generate all the mipmaps of the sampler texture from the texture base level - void generate_mipmaps(filter Minification); - - /// Generate the mipmaps of the sampler texture from the texture base level to the texture max level included - void generate_mipmaps(size_type BaseLayer, size_type MaxLayer, size_type BaseLevel, size_type MaxLevel, filter Minification); - - private: - typedef typename detail::convert::func convert_type; - typedef typename detail::convert::fetchFunc fetch_type; - typedef typename detail::convert::writeFunc write_type; - typedef typename detail::filterBase::filterFunc filter_type; - - texture_type Texture; - convert_type Convert; - texel_type BorderColor; - filter_type Filter; - }; - - typedef sampler1d_array fsampler1DArray; - typedef sampler1d_array dsampler1DArray; - typedef sampler1d_array usampler1DArray; - typedef sampler1d_array isampler1DArray; - -}//namespace gli - -#include "./core/sampler1d_array.inl" diff --git a/external/gli/gli/sampler2d.hpp b/external/gli/gli/sampler2d.hpp deleted file mode 100644 index 05aaa39d..00000000 --- a/external/gli/gli/sampler2d.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/// @brief Include to sample 2d textures. -/// @file gli/sampler2d.hpp - -#pragma once - -#include "sampler.hpp" -#include "texture2d.hpp" -#include "core/mipmaps_compute.hpp" -#include "core/convert_func.hpp" - -namespace gli -{ - /// 2d texture sampler - /// @tparam T Sampler can fetch, write and interpret any texture format but will expose and process the data through type T conversions. - /// @tparam P Precision in term of ULPs - template - class sampler2d : public sampler - { - private: - typedef typename detail::interpolate::type interpolate_type; - - public: - typedef texture2d texture_type; - typedef typename texture_type::size_type size_type; - typedef typename texture_type::extent_type extent_type; - typedef interpolate_type level_type; - typedef vec<2, interpolate_type, P> normalized_type; - typedef vec<4, T, P> texel_type; - - sampler2d(texture_type const& Texture, wrap Wrap, filter Mip = FILTER_NEAREST, filter Min = FILTER_NEAREST, texel_type const& BorderColor = texel_type(0, 0, 0, 1)); - - /// Access the sampler texture object - texture_type const& operator()() const; - - /// Fetch a texel from the sampler texture - texel_type texel_fetch(extent_type const& TexelCoord, size_type const& Level) const; - - /// Write a texel in the sampler texture - void texel_write(extent_type const& TexelCoord, size_type const& Level, texel_type const& Texel); - - /// Clear the sampler texture with a uniform texel - void clear(texel_type const& Texel); - - /// Sample a texture at a specific level - texel_type texture_lod(normalized_type const& SampleCoord, level_type Level) const; - - /// Sample a texture using specified gradiants - texel_type texture_grad(normalized_type const& SampleCoord, normalized_type const& dPdx, normalized_type const& dPdy) const; - - /// Generate all the mipmaps of the sampler texture from the texture base level - void generate_mipmaps(filter Minification); - - /// Generate the mipmaps of the sampler texture from the texture base level to the texture max level included - void generate_mipmaps(size_type BaseLevel, size_type MaxLevel, filter Minification); - - private: - typedef typename detail::convert::func convert_type; - typedef typename detail::convert::fetchFunc fetch_type; - typedef typename detail::convert::writeFunc write_type; - typedef typename detail::filterBase::filterFunc filter_type; - - texture_type Texture; - convert_type Convert; - texel_type BorderColor; - filter_type Filter; - }; - - typedef sampler2d fsampler2D; - typedef sampler2d dsampler2D; - typedef sampler2d usampler2D; - typedef sampler2d isampler2D; - -}//namespace gli - -#include "./core/sampler2d.inl" diff --git a/external/gli/gli/sampler2d_array.hpp b/external/gli/gli/sampler2d_array.hpp deleted file mode 100644 index 9c1faeba..00000000 --- a/external/gli/gli/sampler2d_array.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/// @brief Include to sample 2d array textures. -/// @file gli/sampler2d_array.hpp - -#pragma once - -#include "sampler.hpp" -#include "texture2d_array.hpp" -#include "core/mipmaps_compute.hpp" -#include "core/convert_func.hpp" - -namespace gli -{ - /// 2d array texture sampler - /// @tparam T Sampler can fetch, write and interpret any texture format but will expose and process the data through type T conversions. - /// @tparam Q Precision in term of ULPs - template - class sampler2d_array : public sampler - { - private: - typedef typename detail::interpolate::type interpolate_type; - - public: - typedef texture2d_array texture_type; - typedef typename texture_type::size_type size_type; - typedef typename texture_type::extent_type extent_type; - typedef interpolate_type level_type; - typedef vec<2, interpolate_type, P> normalized_type; - typedef vec<4, T, P> texel_type; - - sampler2d_array(texture_type const& Texture, wrap Wrap, filter Mip = FILTER_NEAREST, filter Min = FILTER_NEAREST, texel_type const& BorderColor = texel_type(0, 0, 0, 1)); - - /// Access the sampler texture object - texture_type const& operator()() const; - - /// Fetch a texel from the sampler texture - texel_type texel_fetch(extent_type const& TexelCoord, size_type layer, size_type Level) const; - - /// Write a texel in the sampler texture - void texel_write(extent_type const& TexelCoord, size_type layer, size_type Level, texel_type const& Texel); - - /// Clear the sampler texture with a uniform texel - void clear(texel_type const& Texel); - - /// Sample the sampler texture at a specific level - texel_type texture_lod(normalized_type const& SampleCoord, size_type layer, level_type Level) const; - - /// Generate all the mipmaps of the sampler texture from the texture base level - void generate_mipmaps(filter Minification); - - /// Generate the mipmaps of the sampler texture from the texture base level to the texture max level included - void generate_mipmaps(size_type BaseLayer, size_type MaxLayer, size_type BaseLevel, size_type MaxLevel, filter Minification); - - private: - typedef typename detail::convert::func convert_type; - typedef typename detail::convert::fetchFunc fetch_type; - typedef typename detail::convert::writeFunc write_type; - typedef typename detail::filterBase::filterFunc filter_type; - - texture_type Texture; - convert_type Convert; - texel_type BorderColor; - filter_type Filter; - }; - - typedef sampler2d_array fsampler2DArray; - typedef sampler2d_array dsampler2DArray; - typedef sampler2d_array usampler2DArray; - typedef sampler2d_array isampler2DArray; - -}//namespace gli - -#include "./core/sampler2d_array.inl" diff --git a/external/gli/gli/sampler3d.hpp b/external/gli/gli/sampler3d.hpp deleted file mode 100644 index cc6dc6c7..00000000 --- a/external/gli/gli/sampler3d.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/// @brief Include to sample 3d textures. -/// @file gli/sampler3d.hpp - -#pragma once - -#include "sampler.hpp" -#include "texture3d.hpp" -#include "core/mipmaps_compute.hpp" -#include "core/convert_func.hpp" - -namespace gli -{ - /// 3d texture sampler - /// @tparam T Sampler can fetch, write and interpret any texture format but will expose and process the data through type T conversions. - /// @tparam P Precision in term of ULPs - template - class sampler3d : public sampler - { - private: - typedef typename detail::interpolate::type interpolate_type; - - public: - typedef texture3d texture_type; - typedef typename texture_type::size_type size_type; - typedef typename texture_type::extent_type extent_type; - typedef interpolate_type level_type; - typedef vec<3, interpolate_type, P> normalized_type; - typedef vec<4, T, P> texel_type; - - sampler3d(texture_type const& Texture, wrap Wrap, filter Mip = FILTER_NEAREST, filter Min = FILTER_NEAREST, texel_type const& BorderColor = texel_type(0, 0, 0, 1)); - - /// Access the sampler texture object - texture_type const& operator()() const; - - /// Fetch a texel from the sampler texture - texel_type texel_fetch(extent_type const& TexelCoord, size_type const& Level) const; - - /// Write a texel in the sampler texture - void texel_write(extent_type const& TexelCoord, size_type const & Level, texel_type const& Texel); - - /// Clear the sampler texture with a uniform texel - void clear(texel_type const& Texel); - - /// Sample the sampler texture at a specific level - texel_type texture_lod(normalized_type const& SampleCoord, level_type Level) const; - - /// Generate all the mipmaps of the sampler texture from the texture base level - void generate_mipmaps(filter Minification); - - /// Generate the mipmaps of the sampler texture from the texture base level to the texture max level included - void generate_mipmaps(size_type BaseLevel, size_type MaxLevel, filter Minification); - - private: - typedef typename detail::convert::func convert_type; - typedef typename detail::convert::fetchFunc fetch_type; - typedef typename detail::convert::writeFunc write_type; - typedef typename detail::filterBase::filterFunc filter_type; - - texture_type Texture; - convert_type Convert; - texel_type BorderColor; - filter_type Filter; - }; - - typedef sampler3d fsampler3D; - typedef sampler3d dsampler3D; - typedef sampler3d usampler3D; - typedef sampler3d isampler3D; -}//namespace gli - -#include "./core/sampler3d.inl" diff --git a/external/gli/gli/sampler_cube.hpp b/external/gli/gli/sampler_cube.hpp deleted file mode 100644 index 9a84effb..00000000 --- a/external/gli/gli/sampler_cube.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/// @brief Include to sample cube map textures. -/// @file gli/sampler_cube.hpp - -#pragma once - -#include "sampler.hpp" -#include "texture_cube.hpp" -#include "core/mipmaps_compute.hpp" -#include "core/convert_func.hpp" - -namespace gli -{ - /// Cube map texture sampler - /// @tparam T Sampler can fetch, write and interpret any texture format but will expose and process the data through type T conversions. - /// @tparam P Precision in term of ULPs - template - class sampler_cube : public sampler - { - private: - typedef typename detail::interpolate::type interpolate_type; - - public: - typedef texture_cube texture_type; - typedef typename texture_type::size_type size_type; - typedef typename texture_type::extent_type extent_type; - typedef interpolate_type level_type; - typedef vec<2, interpolate_type, P> normalized_type; - typedef vec<4, T, P> texel_type; - - sampler_cube(texture_type const& Texture, wrap Wrap, filter Mip = FILTER_NEAREST, filter Min = FILTER_NEAREST, texel_type const& BorderColor = texel_type(0, 0, 0, 1)); - - /// Access the sampler texture object - texture_type const& operator()() const; - - /// Fetch a texel from the sampler texture - texel_type texel_fetch(extent_type const& TexelCoord, size_type Face, size_type Level) const; - - /// Write a texel in the sampler texture - void texel_write(extent_type const& TexelCoord, size_type Face, size_type Level, texel_type const& Texel); - - /// Clear the sampler texture with a uniform texel - void clear(texel_type const& Texel); - - /// Sample the sampler texture at a specific level - texel_type texture_lod(normalized_type const& SampleCoord, size_type Face, level_type Level) const; - - /// Generate all the mipmaps of the sampler texture from the texture base level - void generate_mipmaps(filter Minification); - - /// Generate the mipmaps of the sampler texture from the texture base level to the texture max level included - void generate_mipmaps(size_type BaseFace, size_type MaxFace, size_type BaseLevel, size_type MaxLevel, filter Minification); - - private: - typedef typename detail::convert::func convert_type; - typedef typename detail::convert::fetchFunc fetch_type; - typedef typename detail::convert::writeFunc write_type; - typedef typename detail::filterBase::filterFunc filter_type; - - texture_type Texture; - convert_type Convert; - texel_type BorderColor; - filter_type Filter; - }; - - typedef sampler_cube fsamplerCube; - typedef sampler_cube dsamplerCube; - typedef sampler_cube usamplerCube; - typedef sampler_cube isamplerCube; - -}//namespace gli - -#include "./core/sampler_cube.inl" diff --git a/external/gli/gli/sampler_cube_array.hpp b/external/gli/gli/sampler_cube_array.hpp deleted file mode 100644 index 48cb72d7..00000000 --- a/external/gli/gli/sampler_cube_array.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/// @brief Include to sample cube map array textures. -/// @file gli/sampler_cube_array.hpp - -#pragma once - -#include "sampler.hpp" -#include "texture_cube_array.hpp" -#include "core/mipmaps_compute.hpp" -#include "core/convert_func.hpp" - -namespace gli -{ - /// Cube map array texture sampler - /// @tparam T Sampler can fetch, write and interpret any texture format but will expose and process the data through type T conversions. - /// @tparam P Precision in term of ULPs - template - class sampler_cube_array : public sampler - { - private: - typedef typename detail::interpolate::type interpolate_type; - - public: - typedef texture_cube_array texture_type; - typedef typename texture_type::size_type size_type; - typedef typename texture_type::extent_type extent_type; - typedef interpolate_type level_type; - typedef vec<2, interpolate_type, P> normalized_type; - typedef vec<4, T, P> texel_type; - - sampler_cube_array(texture_type const& Texture, wrap Wrap, filter Mip = FILTER_NEAREST, filter Min = FILTER_NEAREST, texel_type const& BorderColor = texel_type(0, 0, 0, 1)); - - /// Access the sampler texture object - texture_type const& operator()() const; - - /// Fetch a texel from the sampler texture - texel_type texel_fetch(extent_type const& TexelCoord, size_type layer, size_type Face, size_type Level) const; - - /// Write a texel in the sampler texture - void texel_write(extent_type const& TexelCoord, size_type layer, size_type Face, size_type Level, texel_type const& Texel); - - /// Clear the sampler texture with a uniform texel - void clear(texel_type const& Texel); - - /// Sample the sampler texture at a specific level - texel_type texture_lod(normalized_type const& SampleCoord, size_type layer, size_type Face, level_type Level) const; - - /// Generate all the mipmaps of the sampler texture from the texture base level - void generate_mipmaps(filter Minification); - - /// Generate the mipmaps of the sampler texture from the texture base level to the texture max level included - void generate_mipmaps(size_type BaseLayer, size_type MaxLayer, size_type BaseFace, size_type MaxFace, size_type BaseLevel, size_type MaxLevel, filter Minification); - - private: - typedef typename detail::convert::func convert_type; - typedef typename detail::convert::fetchFunc fetch_type; - typedef typename detail::convert::writeFunc write_type; - typedef typename detail::filterBase::filterFunc filter_type; - - texture_type Texture; - convert_type Convert; - texel_type BorderColor; - filter_type Filter; - }; - - typedef sampler_cube_array fsamplerCubeArray; - typedef sampler_cube_array dsamplerCubeArray; - typedef sampler_cube_array usamplerCubeArray; - typedef sampler_cube_array isamplerCubeArray; - -}//namespace gli - -#include "./core/sampler_cube_array.inl" diff --git a/external/gli/gli/save.hpp b/external/gli/gli/save.hpp deleted file mode 100644 index a17ecd3d..00000000 --- a/external/gli/gli/save.hpp +++ /dev/null @@ -1,28 +0,0 @@ -/// @brief Include to save DDS, KTX or KMG textures to files or memory. -/// @file gli/save.hpp - -#pragma once - -#include "save_dds.hpp" -#include "save_ktx.hpp" - -namespace gli -{ - /// Save a texture storage_linear to file. - /// - /// @param Texture Source texture to save - /// @param Path Path for where to save the file. It must include the filaname and filename extension. - /// The function use the filename extension included in the path to figure out the file container to use. - /// @return Returns false if the function fails to save the file. - bool save(texture const & Texture, char const * Path); - - /// Save a texture storage_linear to file. - /// - /// @param Texture Source texture to save - /// @param Path Path for where to save the file. It must include the filaname and filename extension. - /// The function use the filename extension included in the path to figure out the file container to use. - /// @return Returns false if the function fails to save the file. - bool save(texture const & Texture, std::string const & Path); -}//namespace gli - -#include "./core/save.inl" diff --git a/external/gli/gli/save_dds.hpp b/external/gli/gli/save_dds.hpp deleted file mode 100644 index d8637e99..00000000 --- a/external/gli/gli/save_dds.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/// @brief Include to save DDS textures to files or memory. -/// @file gli/save_dds.hpp - -#pragma once - -#include "texture.hpp" - -namespace gli -{ - /// Save a texture storage_linear to a DDS file. We're assuming that the pixel data is tighty packed - /// - /// @param Texture Source texture to save - /// @param Path Path for where to save the file. It must include the filaname and filename extension. - /// This function ignores the filename extension in the path and save to DDS anyway but keep the requested filename extension. - /// @return Returns false if the function fails to save the file. - bool save_dds(texture const & Texture, char const* Path); - - /// Save a texture storage_linear to a DDS file. We're assuming that the pixel data is tighty packed - /// - /// @param Texture Source texture to save - /// @param Path Path for where to save the file. It must include the filaname and filename extension. - /// This function ignores the filename extension in the path and save to DDS anyway but keep the requested filename extension. - /// @return Returns false if the function fails to save the file. - bool save_dds(texture const & Texture, std::string const & Path); - - /// Save a texture storage_linear to a DDS file. We're assuming that the pixel data is tighty packed - /// - /// @param Texture Source texture to save - /// @param Memory Storage for the DDS container. The function resizes the containers to fit the necessary storage_linear. - /// @return Returns false if the function fails to save the file. - bool save_dds(texture const & Texture, std::vector & Memory); -}//namespace gli - -#include "./core/save_dds.inl" diff --git a/external/gli/gli/save_kmg.hpp b/external/gli/gli/save_kmg.hpp deleted file mode 100644 index 55e56ee5..00000000 --- a/external/gli/gli/save_kmg.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/// @brief Include to save KMG textures to files or memory. -/// @file gli/save_kmg.hpp - -#pragma once - -#include "texture.hpp" - -namespace gli -{ - /// Save a texture storage_linear to a KMG (Khronos Image) file. - /// - /// @param Texture Source texture to save - /// @param Path Path for where to save the file. It must include the filaname and filename extension. - /// This function ignores the filename extension in the path and save to KMG anyway but keep the requested filename extension. - /// @return Returns false if the function fails to save the file. - bool save_kmg(texture const & Texture, char const * Path); - - /// Save a texture storage_linear to a KMG (Khronos Image) file. - /// - /// @param Texture Source texture to save - /// @param Path Path for where to save the file. It must include the filaname and filename extension. - /// This function ignores the filename extension in the path and save to KMG anyway but keep the requested filename extension. - /// @return Returns false if the function fails to save the file. - bool save_kmg(texture const & Texture, std::string const & Path); - - /// Save a texture storage_linear to a KMG (Khronos Image) file. - /// - /// @param Texture Source texture to save - /// @param Memory Storage for the KMG container. The function resizes the containers to fit the necessary storage_linear. - /// @return Returns false if the function fails to save the file. - bool save_kmg(texture const & Texture, std::vector & Memory); -}//namespace gli - -#include "./core/save_kmg.inl" diff --git a/external/gli/gli/save_ktx.hpp b/external/gli/gli/save_ktx.hpp deleted file mode 100644 index f70ba5de..00000000 --- a/external/gli/gli/save_ktx.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/// @brief Include to save KTX textures to files or memory. -/// @file gli/save_ktx.hpp - -#pragma once - -#include "texture.hpp" - -namespace gli -{ - /// Save a texture storage_linear to a KTX file. - /// - /// @param Texture Source texture to save - /// @param Path Path for where to save the file. It must include the filaname and filename extension. - /// This function ignores the filename extension in the path and save to KTX anyway but keep the requested filename extension. - /// @return Returns false if the function fails to save the file. - bool save_ktx(texture const & Texture, char const * Path); - - /// Save a texture storage_linear to a KTX file. - /// - /// @param Texture Source texture to save - /// @param Path Path for where to save the file. It must include the filaname and filename extension. - /// This function ignores the filename extension in the path and save to KTX anyway but keep the requested filename extension. - /// @return Returns false if the function fails to save the file. - bool save_ktx(texture const & Texture, std::string const & Path); - - /// Save a texture storage_linear to a KTX file. - /// - /// @param Texture Source texture to save - /// @param Memory Storage for the KTX container. The function resizes the containers to fit the necessary storage_linear. - /// @return Returns false if the function fails to save the file. - bool save_ktx(texture const & Texture, std::vector & Memory); -}//namespace gli - -#include "./core/save_ktx.inl" diff --git a/external/gli/gli/target.hpp b/external/gli/gli/target.hpp deleted file mode 100644 index b102de3e..00000000 --- a/external/gli/gli/target.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/// @brief Include to use the target enum and query properties of targets. -/// @file gli/target.hpp - -#pragma once - -namespace gli -{ - /// Texture target: type/shape of the texture storage_linear - enum target - { - TARGET_1D = 0, TARGET_FIRST = TARGET_1D, - TARGET_1D_ARRAY, - TARGET_2D, - TARGET_2D_ARRAY, - TARGET_3D, - TARGET_RECT, - TARGET_RECT_ARRAY, - TARGET_CUBE, - TARGET_CUBE_ARRAY, TARGET_LAST = TARGET_CUBE_ARRAY - }; - - enum - { - TARGET_COUNT = TARGET_LAST - TARGET_FIRST + 1, - TARGET_INVALID = -1 - }; - - /// Check whether a target is a 1D target - inline bool is_target_1d(target Target) - { - return Target == TARGET_1D || Target == TARGET_1D_ARRAY; - } - - /// Check whether a target is an array target - inline bool is_target_array(target Target) - { - return Target == TARGET_1D_ARRAY || Target == TARGET_2D_ARRAY || Target == TARGET_CUBE_ARRAY; - } - - /// Check whether a target is a cube map target - inline bool is_target_cube(target Target) - { - return Target == TARGET_CUBE || Target == TARGET_CUBE_ARRAY; - } - - /// Check whether a target is a rectangle target - inline bool is_target_rect(target Target) - { - return Target == TARGET_RECT || Target == TARGET_RECT_ARRAY; - } -}//namespace gli diff --git a/external/gli/gli/texture.hpp b/external/gli/gli/texture.hpp deleted file mode 100644 index ed8349f5..00000000 --- a/external/gli/gli/texture.hpp +++ /dev/null @@ -1,297 +0,0 @@ -/// @brief Include to use generic textures which can represent any texture target but they don't have target specific built-in caches making accesses slower. -/// @file gli/texture.hpp - -#pragma once - -#include "image.hpp" -#include "target.hpp" -#include "levels.hpp" -#include - -namespace gli -{ - /// Genetic texture class. It can support any target. - class texture - { - public: - typedef size_t size_type; - typedef gli::target target_type; - typedef gli::format format_type; - typedef gli::swizzles swizzles_type; - typedef storage_linear storage_type; - typedef storage_type::data_type data_type; - typedef storage_type::extent_type extent_type; - - /// Create an empty texture instance - texture(); - - /// Create a texture object and allocate a texture storage for it - /// @param Target Type/Shape of the texture storage_linear - /// @param Format Texel format - /// @param Extent Size of the texture: width, height and depth. - /// @param Layers Number of one-dimensional or two-dimensional images of identical size and format - /// @param Faces 6 for cube map textures otherwise 1. - /// @param Levels Number of images in the texture mipmap chain. - /// @param Swizzles A mechanism to swizzle the components of a texture before they are applied according to the texture environment. - texture( - target_type Target, - format_type Format, - extent_type const& Extent, - size_type Layers, - size_type Faces, - size_type Levels, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture object by sharing an existing texture storage_type from another texture instance. - /// This texture object is effectively a texture view where the layer, the face and the level allows identifying - /// a specific subset of the texture storage_linear source. - /// This texture object is effectively a texture view where the target and format can be reinterpreted - /// with a different compatible texture target and texture format. - texture( - texture const& Texture, - target_type Target, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture object by sharing an existing texture storage_type from another texture instance. - /// This texture object is effectively a texture view where the target and format can be reinterpreted - /// with a different compatible texture target and texture format. - texture( - texture const& Texture, - target_type Target, - format_type Format, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - virtual ~texture(){} - - /// Return whether the texture instance is empty, no storage_type or description have been assigned to the instance. - bool empty() const; - - /// Return the target of a texture instance. - target_type target() const{return this->Target;} - - /// Return the texture instance format - format_type format() const; - - swizzles_type swizzles() const; - - /// Return the base layer of the texture instance, effectively a memory offset in the actual texture storage_type to identify where to start reading the layers. - size_type base_layer() const; - - /// Return the max layer of the texture instance, effectively a memory offset to the beginning of the last layer in the actual texture storage_type that the texture instance can access. - size_type max_layer() const; - - /// Return max_layer() - base_layer() + 1 - size_type layers() const; - - /// Return the base face of the texture instance, effectively a memory offset in the actual texture storage_type to identify where to start reading the faces. - size_type base_face() const; - - /// Return the max face of the texture instance, effectively a memory offset to the beginning of the last face in the actual texture storage_type that the texture instance can access. - size_type max_face() const; - - /// Return max_face() - base_face() + 1 - size_type faces() const; - - /// Return the base level of the texture instance, effectively a memory offset in the actual texture storage_type to identify where to start reading the levels. - size_type base_level() const; - - /// Return the max level of the texture instance, effectively a memory offset to the beginning of the last level in the actual texture storage_type that the texture instance can access. - size_type max_level() const; - - /// Return max_level() - base_level() + 1. - size_type levels() const; - - /// Return the size of a texture instance: width, height and depth. - extent_type extent(size_type Level = 0) const; - - /// Return the memory size of a texture instance storage_type in bytes. - size_type size() const; - - /// Return the number of blocks contained in a texture instance storage_type. - /// genType size must match the block size conresponding to the texture format. - template - size_type size() const; - - /// Return the memory size of a specific level identified by Level. - size_type size(size_type Level) const; - - /// Return the memory size of a specific level identified by Level. - /// genType size must match the block size conresponding to the texture format. - template - size_type size(size_type Level) const; - - /// Return a pointer to the beginning of the texture instance data. - void* data(); - - /// Return a pointer of type genType which size must match the texture format block size - template - gen_type* data(); - - /// Return a pointer to the beginning of the texture instance data. - void const* data() const; - - /// Return a pointer of type genType which size must match the texture format block size - template - gen_type const* data() const; - - /// Return a pointer to the beginning of the texture instance data. - void* data(size_type Layer, size_type Face, size_type Level); - - /// Return a pointer to the beginning of the texture instance data. - void const* const data(size_type Layer, size_type Face, size_type Level) const; - - /// Return a pointer of type genType which size must match the texture format block size - template - gen_type* data(size_type Layer, size_type Face, size_type Level); - - /// Return a pointer of type genType which size must match the texture format block size - template - gen_type const* const data(size_type Layer, size_type Face, size_type Level) const; - - /// Clear the entire texture storage_linear with zeros - void clear(); - - /// Clear the entire texture storage_linear with Texel which type must match the texture storage_linear format block size - /// If the type of gen_type doesn't match the type of the texture format, no conversion is performed and the data will be reinterpreted as if is was of the texture format. - template - void clear(gen_type const& Texel); - - /// Clear a specific image of a texture. - template - void clear(size_type Layer, size_type Face, size_type Level, gen_type const& BlockData); - - /// Clear a subset of a specific image of a texture. - template - void clear(size_type Layer, size_type Face, size_type Level, extent_type const& TexelOffset, extent_type const& TexelExtent, gen_type const& BlockData); - - /// Copy a specific image of a texture - void copy( - texture const& TextureSrc, - size_t LayerSrc, size_t FaceSrc, size_t LevelSrc, - size_t LayerDst, size_t FaceDst, size_t LevelDst); - - /// Copy a subset of a specific image of a texture - void copy( - texture const& TextureSrc, - size_t LayerSrc, size_t FaceSrc, size_t LevelSrc, extent_type const& OffsetSrc, - size_t LayerDst, size_t FaceDst, size_t LevelDst, extent_type const& OffsetDst, - extent_type const& Extent); - - /// Reorder the component in texture memory. - template - void swizzle(gli::swizzles const& Swizzles); - - /// Fetch a texel from a texture. The texture format must be uncompressed. - template - gen_type load(extent_type const & TexelCoord, size_type Layer, size_type Face, size_type Level) const; - - /// Write a texel to a texture. The texture format must be uncompressed. - template - void store(extent_type const& TexelCoord, size_type Layer, size_type Face, size_type Level, gen_type const& Texel); - - protected: - std::shared_ptr Storage; - target_type Target; - format_type Format; - size_type BaseLayer; - size_type MaxLayer; - size_type BaseFace; - size_type MaxFace; - size_type BaseLevel; - size_type MaxLevel; - swizzles_type Swizzles; - - // Pre compute at texture instance creation some information for faster access to texels - struct cache - { - public: - enum ctor - { - DEFAULT - }; - - explicit cache(ctor) - {} - - cache - ( - storage_type& Storage, - format_type Format, - size_type BaseLayer, size_type Layers, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel - ) - : Faces(MaxFace - BaseFace + 1) - , Levels(MaxLevel - BaseLevel + 1) - { - GLI_ASSERT(static_cast(gli::levels(Storage.extent(0))) < this->ImageMemorySize.size()); - - this->BaseAddresses.resize(Layers * this->Faces * this->Levels); - - for(size_type Layer = 0; Layer < Layers; ++Layer) - for(size_type Face = 0; Face < this->Faces; ++Face) - for(size_type Level = 0; Level < this->Levels; ++Level) - { - size_type const Index = index_cache(Layer, Face, Level); - this->BaseAddresses[Index] = Storage.data() + Storage.base_offset( - BaseLayer + Layer, BaseFace + Face, BaseLevel + Level); - } - - for(size_type Level = 0; Level < this->Levels; ++Level) - { - extent_type const& SrcExtent = Storage.extent(BaseLevel + Level); - extent_type const& DstExtent = SrcExtent * block_extent(Format) / Storage.block_extent(); - - this->ImageExtent[Level] = glm::max(DstExtent, extent_type(1)); - this->ImageMemorySize[Level] = Storage.level_size(BaseLevel + Level); - } - - this->GlobalMemorySize = Storage.layer_size(BaseFace, MaxFace, BaseLevel, MaxLevel) * Layers; - } - - // Base addresses of each images of a texture. - data_type* get_base_address(size_type Layer, size_type Face, size_type Level) const - { - return this->BaseAddresses[index_cache(Layer, Face, Level)]; - } - - // In texels - extent_type get_extent(size_type Level) const - { - return this->ImageExtent[Level]; - }; - - // In bytes - size_type get_memory_size(size_type Level) const - { - return this->ImageMemorySize[Level]; - }; - - // In bytes - size_type get_memory_size() const - { - return this->GlobalMemorySize; - }; - - private: - size_type index_cache(size_type Layer, size_type Face, size_type Level) const - { - return ((Layer * this->Faces) + Face) * this->Levels + Level; - } - - size_type Faces; - size_type Levels; - std::vector BaseAddresses; - std::array ImageExtent; - std::array ImageMemorySize; - size_type GlobalMemorySize; - } Cache; - }; -}//namespace gli - -#include "./core/texture.inl" - diff --git a/external/gli/gli/texture1d.hpp b/external/gli/gli/texture1d.hpp deleted file mode 100644 index bf456251..00000000 --- a/external/gli/gli/texture1d.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/// @brief Include to use 1d textures. -/// @file gli/texture1d.hpp - -#pragma once - -#include "texture.hpp" -#include "image.hpp" - -namespace gli -{ - /// 1d texture - class texture1d : public texture - { - public: - typedef extent1d extent_type; - - /// Create an empty texture 1D - texture1d(); - - /// Create a texture1d and allocate a new storage_linear - texture1d( - format_type Format, - extent_type const& Extent, - size_type Levels, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture1d and allocate a new storage_linear with a complete mipmap chain - texture1d( - format_type Format, - extent_type const& Extent, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture1d view with an existing storage_linear - explicit texture1d( - texture const& Texture); - - /// Create a texture1d view with an existing storage_linear - texture1d( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture1d view, reference a subset of an existing texture1d instance - texture1d( - texture1d const& Texture, - size_type BaseLevel, size_type MaxLevel); - - /// Create a view of the image identified by Level in the mipmap chain of the texture - image operator[](size_type Level) const; - - /// Return the width of a texture instance - extent_type extent(size_type Level = 0) const; - - /// Fetch a texel from a texture. The texture format must be uncompressed. - template - gen_type load(extent_type const& TexelCoord, size_type Level) const; - - /// Write a texel to a texture. The texture format must be uncompressed. - template - void store(extent_type const& TexelCoord, size_type Level, gen_type const& Texel); - }; -}//namespace gli - -#include "./core/texture1d.inl" diff --git a/external/gli/gli/texture1d_array.hpp b/external/gli/gli/texture1d_array.hpp deleted file mode 100644 index 51902d5e..00000000 --- a/external/gli/gli/texture1d_array.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @brief Include to use 1d array textures. -/// @file gli/texture1d_array.hpp - -#pragma once - -#include "texture1d.hpp" - -namespace gli -{ - /// 1d array texture - class texture1d_array : public texture - { - public: - typedef extent1d extent_type; - - public: - /// Create an empty texture 1D array - texture1d_array(); - - /// Create a texture1d_array and allocate a new storage_linear - texture1d_array( - format_type Format, - extent_type const& Extent, - size_type Layers, - size_type Levels, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture1d_array and allocate a new storage_linear with a complete mipmap chain - texture1d_array( - format_type Format, - extent_type const& Extent, - size_type Layers, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture1d_array view with an existing storage_linear - explicit texture1d_array( - texture const& Texture); - - /// Create a texture1d_array view with an existing storage_linear - texture1d_array( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture view, reference a subset of an exiting storage_linear - texture1d_array( - texture1d_array const& Texture, - size_type BaseLayer, size_type MaxLayer, - size_type BaseLevel, size_type MaxLevel); - - /// Create a view of the texture identified by Layer in the texture array - texture1d operator[](size_type Layer) const; - - /// Return the width of a texture instance - extent_type extent(size_type Level = 0) const; - - /// Fetch a texel from a texture. The texture format must be uncompressed. - template - gen_type load(extent_type const& TexelCoord, size_type Layer, size_type Level) const; - - /// Write a texel to a texture. The texture format must be uncompressed. - template - void store(extent_type const& TexelCoord, size_type Layer, size_type Level, gen_type const& Texel); - }; -}//namespace gli - -#include "./core/texture1d_array.inl" diff --git a/external/gli/gli/texture2d.hpp b/external/gli/gli/texture2d.hpp deleted file mode 100644 index 3c57ea00..00000000 --- a/external/gli/gli/texture2d.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/// @brief Include to use 2d textures. -/// @file gli/texture2d.hpp - -#pragma once - -#include "texture.hpp" -#include "image.hpp" - -namespace gli -{ - /// 2d texture - class texture2d : public texture - { - public: - typedef extent2d extent_type; - - /// Create an empty texture 2D. - texture2d(); - - /// Create a texture2d and allocate a new storage_linear. - texture2d( - format_type Format, - extent_type const& Extent, - size_type Levels, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture2d and allocate a new storage_linear with a complete mipmap chain. - texture2d( - format_type Format, - extent_type const& Extent, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture2d view with an existing storage_linear. - explicit texture2d( - texture const& Texture); - - /// Create a texture2d view with an existing storage_linear. - texture2d( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture2d view, reference a subset of an existing texture2d instance. - texture2d( - texture2d const& Texture, - size_type BaseLevel, size_type MaxLevel); - - /// Create a view of the image identified by Level in the mipmap chain of the texture. - image operator[](size_type Level) const; - - /// Return the dimensions of a texture instance: width and height. - extent_type extent(size_type Level = 0) const; - - /// Fetch a texel from a texture. The texture format must be uncompressed. - template - gen_type load(extent_type const& TexelCoord, size_type Level) const; - - /// Write a texel to a texture. The texture format must be uncompressed. - template - void store(extent_type const& TexelCoord, size_type Level, gen_type const& Texel); - }; -}//namespace gli - -#include "./core/texture2d.inl" diff --git a/external/gli/gli/texture2d_array.hpp b/external/gli/gli/texture2d_array.hpp deleted file mode 100644 index 8ad9a333..00000000 --- a/external/gli/gli/texture2d_array.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @brief Include to use 2d array textures. -/// @file gli/texture2d_array.hpp - -#pragma once - -#include "texture2d.hpp" - -namespace gli -{ - /// 2d array texture - class texture2d_array : public texture - { - public: - typedef extent2d extent_type; - - public: - /// Create an empty texture 2D array - texture2d_array(); - - /// Create a texture2d_array and allocate a new storage_linear - texture2d_array( - format_type Format, - extent_type const& Extent, - size_type Layers, - size_type Levels, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture2d_array and allocate a new storage_linear with a complete mipmap chain - texture2d_array( - format_type Format, - extent_type const& Extent, - size_type Layers, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture2d_array view with an existing storage_linear - explicit texture2d_array( - texture const& Texture); - - /// Create a texture2d_array view with an existing storage_linear - texture2d_array( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture view, reference a subset of an exiting texture2d_array instance - texture2d_array( - texture2d_array const& Texture, - size_type BaseLayer, size_type MaxLayer, - size_type BaseLevel, size_type MaxLevel); - - /// Create a view of the texture identified by Layer in the texture array - texture2d operator[](size_type Layer) const; - - /// Return the dimensions of a texture instance: width and height - extent_type extent(size_type Level = 0) const; - - /// Fetch a texel from a texture. The texture format must be uncompressed. - template - gen_type load(extent_type const& TexelCoord, size_type Layer, size_type Level) const; - - /// Write a texel to a texture. The texture format must be uncompressed. - template - void store(extent_type const& TexelCoord, size_type Layer, size_type Level, gen_type const& Texel); - }; -}//namespace gli - -#include "./core/texture2d_array.inl" diff --git a/external/gli/gli/texture3d.hpp b/external/gli/gli/texture3d.hpp deleted file mode 100644 index 71ba9539..00000000 --- a/external/gli/gli/texture3d.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/// @brief Include to use 3d textures. -/// @file gli/texture3d.hpp - -#pragma once - -#include "texture.hpp" -#include "image.hpp" - -namespace gli -{ - /// 3d texture - class texture3d : public texture - { - public: - typedef extent3d extent_type; - - public: - /// Create an empty texture 3D - texture3d(); - - /// Create a texture3d and allocate a new storage_linear - texture3d( - format_type Format, - extent_type const& Extent, - size_type Levels, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture3d and allocate a new storage_linear with a complete mipmap chain - texture3d( - format_type Format, - extent_type const& Extent, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture3d view with an existing storage_linear - explicit texture3d( - texture const & Texture); - - /// Create a texture3d view with an existing storage_linear - texture3d( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture3d view, reference a subset of an existing texture3d instance - texture3d( - texture3d const & Texture, - size_type BaseLevel, size_type MaxLevel); - - /// Create a view of the image identified by Level in the mipmap chain of the texture - image operator[](size_type Level) const; - - /// Return the dimensions of a texture instance: width, height and depth - extent_type extent(size_type Level = 0) const; - - /// Fetch a texel from a texture. The texture format must be uncompressed. - template - gen_type load(extent_type const& TexelCoord, size_type Level) const; - - /// Write a texel to a texture. The texture format must be uncompressed. - template - void store(extent_type const& TexelCoord, size_type Level, gen_type const& Texel); - }; -}//namespace gli - -#include "./core/texture3d.inl" diff --git a/external/gli/gli/texture_cube.hpp b/external/gli/gli/texture_cube.hpp deleted file mode 100644 index 7fad58b5..00000000 --- a/external/gli/gli/texture_cube.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/// @brief Include to use cube map textures. -/// @file gli/texture_cube.hpp - -#pragma once - -#include "texture2d.hpp" - -namespace gli -{ - /// Cube map texture - class texture_cube : public texture - { - public: - typedef extent2d extent_type; - - public: - /// Create an empty texture cube - texture_cube(); - - /// Create a texture_cube and allocate a new storage_linear - texture_cube( - format_type Format, - extent_type const & Extent, - size_type Levels, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture_cube and allocate a new storage_linear with a complete mipmap chain - texture_cube( - format_type Format, - extent_type const & Extent, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture_cube view with an existing storage_linear - explicit texture_cube( - texture const& Texture); - - /// Create a texture_cube view with an existing storage_linear - texture_cube( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture_cube view, reference a subset of an existing texture_cube instance - texture_cube( - texture_cube const& Texture, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel); - - /// Create a view of the texture identified by Face in the texture cube - texture2d operator[](size_type Face) const; - - /// Return the dimensions of a texture instance: width and height where both should be equal. - extent_type extent(size_type Level = 0) const; - - /// Fetch a texel from a texture. The texture format must be uncompressed. - template - gen_type load(extent_type const& TexelCoord, size_type Face, size_type Level) const; - - /// Write a texel to a texture. The texture format must be uncompressed. - template - void store(extent_type const& TexelCoord, size_type Face, size_type Level, gen_type const& Texel); - }; -}//namespace gli - -#include "./core/texture_cube.inl" diff --git a/external/gli/gli/texture_cube_array.hpp b/external/gli/gli/texture_cube_array.hpp deleted file mode 100644 index af0e37b7..00000000 --- a/external/gli/gli/texture_cube_array.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/// @brief Include to use cube map array textures. -/// @file gli/texture_cube_array.hpp - -#pragma once - -#include "texture_cube.hpp" - -namespace gli -{ - /// Cube map array texture - class texture_cube_array : public texture - { - public: - typedef extent2d extent_type; - - public: - /// Create an empty texture cube array - texture_cube_array(); - - /// Create a texture_cube_array and allocate a new storage_linear - texture_cube_array( - format_type Format, - extent_type const& Extent, - size_type Layers, - size_type Levels, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture_cube_array and allocate a new storage_linear with a complete mipmap chain - texture_cube_array( - format_type Format, - extent_type const& Extent, - size_type Layers, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture_cube_array view with an existing storage_linear - explicit texture_cube_array( - texture const& Texture); - - /// Reference a subset of an exiting storage_linear constructor - texture_cube_array( - texture const& Texture, - format_type Format, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel, - swizzles_type const& Swizzles = swizzles_type(SWIZZLE_RED, SWIZZLE_GREEN, SWIZZLE_BLUE, SWIZZLE_ALPHA)); - - /// Create a texture view, reference a subset of an exiting texture_cube_array instance - texture_cube_array( - texture_cube_array const& Texture, - size_type BaseLayer, size_type MaxLayer, - size_type BaseFace, size_type MaxFace, - size_type BaseLevel, size_type MaxLevel); - - /// Create a view of the texture identified by Layer in the texture array - texture_cube operator[](size_type Layer) const; - - /// Return the dimensions of a texture instance: width and height where both should be equal. - extent_type extent(size_type Level = 0) const; - - /// Fetch a texel from a texture. The texture format must be uncompressed. - template - gen_type load(extent_type const & TexelCoord, size_type Layer, size_type Face, size_type Level) const; - - /// Write a texel to a texture. The texture format must be uncompressed. - template - void store(extent_type const& TexelCoord, size_type Layer, size_type Face, size_type Level, gen_type const& Texel); - }; -}//namespace gli - -#include "./core/texture_cube_array.inl" - diff --git a/external/gli/gli/transform.hpp b/external/gli/gli/transform.hpp deleted file mode 100644 index 1ee90e54..00000000 --- a/external/gli/gli/transform.hpp +++ /dev/null @@ -1,87 +0,0 @@ -/// @brief Include to perform arithmetic per texel between two textures. -/// @file gli/transform.hpp - -#pragma once - -#include "texture1d.hpp" -#include "texture1d_array.hpp" -#include "texture2d.hpp" -#include "texture2d_array.hpp" -#include "texture3d.hpp" -#include "texture_cube.hpp" -#include "texture_cube_array.hpp" - -namespace gli -{ - template - struct transform_func - { - typedef vec_type(*type)(vec_type const & A, vec_type const & B); - }; - - /// Compute per-texel operations using a user defined function. - /// - /// @param Out Output texture. - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function. - template - void transform(texture1d & Out, texture1d const & In0, texture1d const & In1, typename transform_func::type TexelFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param Out Output texture. - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function. - template - void transform(texture1d_array & Out, texture1d_array const & In0, texture1d_array const & In1, typename transform_func::type TexelFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param Out Output texture. - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function. - template - void transform(texture2d & Out, texture2d const & In0, texture2d const & In1, typename transform_func::type TexelFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param Out Output texture. - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function. - template - void transform(texture2d_array & Out, texture2d_array const & In0, texture2d_array const & In1, typename transform_func::type TexelFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param Out Output texture. - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function. - template - void transform(texture3d & Out, texture3d const & In0, texture3d const & In1, typename transform_func::type TexelFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param Out Output texture. - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function. - template - void transform(texture_cube & Out, texture_cube const & In0, texture_cube const & In1, typename transform_func::type TexelFunc); - - /// Compute per-texel operations using a user defined function. - /// - /// @param Out Output texture. - /// @param In0 First input texture. - /// @param In1 Second input texture. - /// @param TexelFunc Pointer to a binary function. - template - void transform(texture_cube_array & Out, texture_cube_array const & In0, texture_cube_array const & In1, typename transform_func::type TexelFunc); - -}//namespace gli - -#include "./core/transform.inl" diff --git a/external/gli/gli/type.hpp b/external/gli/gli/type.hpp deleted file mode 100644 index 6b88cede..00000000 --- a/external/gli/gli/type.hpp +++ /dev/null @@ -1,66 +0,0 @@ -/// @brief Include to use basic GLI types. -/// @file gli/type.hpp - -#pragma once - -// STD -#include - -// GLM -#define GLM_FORCE_EXPLICIT_CTOR -#include -#include -#include - -#if GLM_COMPILER & GLM_COMPILER_VC -# define GLI_FORCE_INLINE __forceinline -#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM) -# define GLI_FORCE_INLINE inline __attribute__((__always_inline__)) -#else -# define GLI_FORCE_INLINE inline -#endif//GLM_COMPILER - -#define GLI_DISABLE_ASSERT 0 - -#if defined(NDEBUG) || GLI_DISABLE_ASSERT -# define GLI_ASSERT(test) -#else -# define GLI_ASSERT(test) assert((test)) -#endif - -namespace gli -{ - using namespace glm; - - using std::size_t; - typedef glm::uint8 byte; - - typedef ivec1 extent1d; - typedef ivec2 extent2d; - typedef ivec3 extent3d; - typedef ivec4 extent4d; - - template - inline vec<4, T, P> make_vec4(vec<1, T, P> const & v) - { - return vec<4, T, P>(v.x, static_cast(0), static_cast(0), static_cast(1)); - } - - template - inline vec<4, T, P> make_vec4(vec<2, T, P> const & v) - { - return vec<4, T, P>(v.x, v.y, static_cast(0), static_cast(1)); - } - - template - inline vec<4, T, P> make_vec4(vec<3, T, P> const & v) - { - return vec<4, T, P>(v.x, v.y, v.z, static_cast(1)); - } - - template - inline vec<4, T, P> make_vec4(vec<4, T, P> const & v) - { - return v; - } -}//namespace gli diff --git a/external/gli/gli/view.hpp b/external/gli/gli/view.hpp deleted file mode 100644 index 9dcdd026..00000000 --- a/external/gli/gli/view.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/// @brief Include create views of textures, either to isolate a subset or to reinterpret data without memory copy. -/// @file gli/view.hpp - -#pragma once - -#include "image.hpp" -#include "texture.hpp" -#include "texture1d.hpp" -#include "texture1d_array.hpp" -#include "texture2d.hpp" -#include "texture2d_array.hpp" -#include "texture3d.hpp" -#include "texture_cube.hpp" -#include "texture_cube_array.hpp" - -namespace gli -{ - /// Create an image view of an existing image, sharing the same memory storage_linear. - image view(image const & Image); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear. - texture view(texture const & Texture); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear but giving access only to a subset of layers, levels and faces. - texture view( - texture const & Texture, - texture::size_type BaseLayer, texture::size_type MaxLayer, - texture::size_type BaseFace, texture::size_type MaxFace, - texture::size_type BaseLevel, texture::size_type MaxLevel); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear. - template - texture view(texType const & Texture); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear but a different format. - /// The format must be a compatible format, a format which block size match the original format. - template - texture view(texType const & Texture, format Format); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear but giving access only to a subset of levels. - texture view( - texture1d const & Texture, - texture1d::size_type BaseLevel, texture1d::size_type MaxLevel); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear but giving access only to a subset of levels and layers. - texture view( - texture1d_array const & Texture, - texture1d_array::size_type BaseLayer, texture1d_array::size_type MaxLayer, - texture1d_array::size_type BaseLevel, texture1d_array::size_type MaxLevel); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear but giving access only to a subset of levels. - texture view( - texture2d const & Texture, - texture2d::size_type BaseLevel, texture2d::size_type MaxLevel); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear but giving access only to a subset of levels and layers. - texture view( - texture2d_array const & Texture, - texture2d_array::size_type BaseLayer, texture2d_array::size_type MaxLayer, - texture2d_array::size_type BaseLevel, texture2d_array::size_type MaxLevel); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear but giving access only to a subset of levels. - texture view( - texture3d const & Texture, - texture3d::size_type BaseLevel, texture3d::size_type MaxLevel); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear but giving access only to a subset of levels and faces. - texture view( - texture_cube const & Texture, - texture_cube::size_type BaseFace, texture_cube::size_type MaxFace, - texture_cube::size_type BaseLevel, texture_cube::size_type MaxLevel); - - /// Create a texture view of an existing texture, sharing the same memory storage_linear but giving access only to a subset of layers, levels and faces. - texture view( - texture_cube_array const & Texture, - texture_cube_array::size_type BaseLayer, texture_cube_array::size_type MaxLayer, - texture_cube_array::size_type BaseFace, texture_cube_array::size_type MaxFace, - texture_cube_array::size_type BaseLevel, texture_cube_array::size_type MaxLevel); -}//namespace gli - -#include "./core/view.inl" diff --git a/external/gli/manual.md b/external/gli/manual.md deleted file mode 100644 index 31ed0711..00000000 --- a/external/gli/manual.md +++ /dev/null @@ -1,295 +0,0 @@ -![Alt](/doc/manual/logo-mini.png "GLI Logo") - -# GLI 0.8.3 Manual - -![Alt](/doc/manual/g-truc.png "G-Truc Logo") - ---- -## Table of Contents -+ [0. Licenses](#section0) -+ [1. Getting started](#section1) -+ [1.1. Setup](#section1_1) -+ [1.2. Dependencies](#section1_2) -+ [2. Code samples](#section2) -+ [2.1. Generating mipmaps and converting float textures to rgb9e5](#section2_1) -+ [2.2. Creating an OpenGL texture object from file](#section2_2) -+ [3. References](#section3) -+ [3.1. Equivalent for other languages](#section3_1) - ---- -## Licenses - -### The Happy Bunny License (Modified MIT License) - -Copyright (c) 2010 - 2020 G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -Restrictions: By making use of the Software for military purposes, you -choose to make a Bunny unhappy. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -![](https://github.com/g-truc/glm/blob/manual/doc/manual/frontpage1.png) - -### The MIT License - -Copyright (c) 2010 - 2020 G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -![](https://github.com/g-truc/glm/blob/manual/doc/manual/frontpage2.png) - ---- -## 1. Getting started -### 1.1. Setup - -GLI is a header only library. Hence, there is nothing to build to use it. To use GLI, merely include <gli/gli.hpp> header. - -Core GLI features can be included using individual headers to allow faster user program compilations. - -```cpp -#include // clear, clear_level, clear_layer -#include // == and != operators on textures and images -#include // convert a texture from a format to another -#include // copy a texture or subset of a texture to another texture -#include // duplicate the data of a texture, allocating a new texture storage -#include // facilitate the use of GLI with Direct3D API -#include // list of the supported formats -#include // generating the mipmaps of a texture -#include // translate GLI enums to OpenGL enums -#include // use images, a representation of a single texture level. -#include // compute the number of mipmaps levels necessary to create a mipmap complete texture. -#include // load DDS, KTX or KMG textures from files or memory. -#include // load DDS textures from files or memory. -#include // load KMG textures from files or memory. -#include // load KTX textures from files or memory. -#include // helper functions to create generic texture -#include // include to perform reduction operations. -#include // enumations for texture sampling -#include // class to sample cube texture -#include // class to sample cube array texture -#include // class to sample 1d texture -#include // class to sample 1d array texture -#include // class to sample 2d texture -#include // class to sample 2d array texture -#include // class to sample 3d texture -#include // save either a DDS, KTX or KMG file -#include // save a DDS texture file -#include // save a KMG texture file -#include // save a KTX texture file -#include // helper function to query property of a generic texture -#include // generic texture class that can represent any kind of texture -#include // representation of a cube texture -#include // representation of a cube array texture -#include // representation of a 1d texture -#include // representation of a 1d array texture -#include // representation of a 2d texture -#include // representation of a 2d array texture -#include // representation of a 3d texture -#include // perform operation on source data to destination data -#include // extent*d types -#include // create a texture view, same storage but a different scope or interpretation of the data -``` - -### 1.2. Dependencies - -GLI does not depend on external libraries or headers such as ``, [``](http://www.opengl.org/registry/api/GL/glcorearb.h), ``, ``, or ``. - ---- -## 2. Code samples - -### 2.1. Generating mipmaps and converting float textures to rgb9e5 - -```cpp -#include -#include -#include - -bool convert_rgb32f_rgb9e5(const char* FilenameSrc, const char* FilenameDst) -{ - if(FilenameDst == NULL) - return false; - if(std::strstr(FilenameDst, ".dds") > 0 || std::strstr(FilenameDst, ".ktx") > 0) - return false; - - gli::texture2d TextureSource(gli::load(FilenameSrc)); - if(TextureSource.empty()) - return false; - if(TextureSource.format() != gli::FORMAT_RGB16_SFLOAT_PACK16 && TextureSource.format() != gli::FORMAT_RGB32_SFLOAT_PACK32) - return false; - - gli::texture2d TextureMipmaped = gli::generate_mipmaps(TextureSource, gli::FILTER_LINEAR); - - gli::texture2d TextureConverted = gli::convert(TextureMipmaped, gli::FORMAT_RGB9E5_UFLOAT_PACK32); - - gli::save(TextureConverted, FilenameDst); - - return true; -} -``` - -### 2.2. Creating an OpenGL texture object from file - -```cpp -#include - -/// Filename can be KTX or DDS files -GLuint create_texture(char const* Filename) -{ - gli::texture Texture = gli::load(Filename); - if(Texture.empty()) - return 0; - - gli::gl GL(gli::gl::PROFILE_GL33); - gli::gl::format const Format = GL.translate(Texture.format(), Texture.swizzles()); - GLenum Target = GL.translate(Texture.target()); - - GLuint TextureName = 0; - glGenTextures(1, &TextureName); - glBindTexture(Target, TextureName); - glTexParameteri(Target, GL_TEXTURE_BASE_LEVEL, 0); - glTexParameteri(Target, GL_TEXTURE_MAX_LEVEL, static_cast(Texture.levels() - 1)); - glTexParameteri(Target, GL_TEXTURE_SWIZZLE_R, Format.Swizzles[0]); - glTexParameteri(Target, GL_TEXTURE_SWIZZLE_G, Format.Swizzles[1]); - glTexParameteri(Target, GL_TEXTURE_SWIZZLE_B, Format.Swizzles[2]); - glTexParameteri(Target, GL_TEXTURE_SWIZZLE_A, Format.Swizzles[3]); - - glm::tvec3 const Extent(Texture.extent()); - GLsizei const FaceTotal = static_cast(Texture.layers() * Texture.faces()); - - switch(Texture.target()) - { - case gli::TARGET_1D: - glTexStorage1D( - Target, static_cast(Texture.levels()), Format.Internal, Extent.x); - break; - case gli::TARGET_1D_ARRAY: - case gli::TARGET_2D: - case gli::TARGET_CUBE: - glTexStorage2D( - Target, static_cast(Texture.levels()), Format.Internal, - Extent.x, Texture.target() == gli::TARGET_2D ? Extent.y : FaceTotal); - break; - case gli::TARGET_2D_ARRAY: - case gli::TARGET_3D: - case gli::TARGET_CUBE_ARRAY: - glTexStorage3D( - Target, static_cast(Texture.levels()), Format.Internal, - Extent.x, Extent.y, - Texture.target() == gli::TARGET_3D ? Extent.z : FaceTotal); - break; - default: - assert(0); - break; - } - - for(std::size_t Layer = 0; Layer < Texture.layers(); ++Layer) - for(std::size_t Face = 0; Face < Texture.faces(); ++Face) - for(std::size_t Level = 0; Level < Texture.levels(); ++Level) - { - GLsizei const LayerGL = static_cast(Layer); - glm::tvec3 Extent(Texture.extent(Level)); - Target = gli::is_target_cube(Texture.target()) - ? static_cast(GL_TEXTURE_CUBE_MAP_POSITIVE_X + Face) - : Target; - - switch(Texture.target()) - { - case gli::TARGET_1D: - if(gli::is_compressed(Texture.format())) - glCompressedTexSubImage1D( - Target, static_cast(Level), 0, Extent.x, - Format.Internal, static_cast(Texture.size(Level)), - Texture.data(Layer, Face, Level)); - else - glTexSubImage1D( - Target, static_cast(Level), 0, Extent.x, - Format.External, Format.Type, - Texture.data(Layer, Face, Level)); - break; - case gli::TARGET_1D_ARRAY: - case gli::TARGET_2D: - case gli::TARGET_CUBE: - if(gli::is_compressed(Texture.format())) - glCompressedTexSubImage2D( - Target, static_cast(Level), - 0, 0, - Extent.x, - Texture.target() == gli::TARGET_1D_ARRAY ? LayerGL : Extent.y, - Format.Internal, static_cast(Texture.size(Level)), - Texture.data(Layer, Face, Level)); - else - glTexSubImage2D( - Target, static_cast(Level), - 0, 0, - Extent.x, - Texture.target() == gli::TARGET_1D_ARRAY ? LayerGL : Extent.y, - Format.External, Format.Type, - Texture.data(Layer, Face, Level)); - break; - case gli::TARGET_2D_ARRAY: - case gli::TARGET_3D: - case gli::TARGET_CUBE_ARRAY: - if(gli::is_compressed(Texture.format())) - glCompressedTexSubImage3D( - Target, static_cast(Level), - 0, 0, 0, - Extent.x, Extent.y, - Texture.target() == gli::TARGET_3D ? Extent.z : LayerGL, - Format.Internal, static_cast(Texture.size(Level)), - Texture.data(Layer, Face, Level)); - else - glTexSubImage3D( - Target, static_cast(Level), - 0, 0, 0, - Extent.x, Extent.y, - Texture.target() == gli::TARGET_3D ? Extent.z : LayerGL, - Format.External, Format.Type, - Texture.data(Layer, Face, Level)); - break; - default: assert(0); break; - } - } - return TextureName; -} -``` - ---- -## 3. References - -### 3.1. Equivalent for other languages - -* [JVM OpenGL Image (GLI)](https://github.com/kotlin-graphics/gli) diff --git a/external/gli/readme.md b/external/gli/readme.md deleted file mode 100644 index 856496f0..00000000 --- a/external/gli/readme.md +++ /dev/null @@ -1,279 +0,0 @@ -![gli](/doc/manual/logo-mini.png) - -[OpenGL Image](http://gli.g-truc.net/) (*GLI*) is a header only C++ image library for graphics software. - -*GLI* provides classes and functions to load image files (*[KTX](https://www.khronos.org/opengles/sdk/tools/KTX/)* and *[DDS](https://msdn.microsoft.com/en-us/library/windows/desktop/bb943990%28v=vs.85%29.aspx)*), facilitate graphics APIs texture creation, compare textures, access texture texels, sample textures, convert textures, generate mipmaps, etc. - -This library works perfectly with *[OpenGL](https://www.opengl.org)* or *[Vulkan](https://www.khronos.org/vulkan)* but it also ensures interoperability with other third party libraries and SDK. -It is a good candidate for software rendering (raytracing / rasterisation), image processing, image based software testing or any development context that requires a simple and convenient image library. - -*GLI* is written in C++11. It is a platform independent library with no dependence and it supports the following compilers: -- [Apple Clang 6.0](https://developer.apple.com/library/mac/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher -- [GCC](http://gcc.gnu.org/) 4.7 and higher -- [Intel C++ Composer](https://software.intel.com/en-us/intel-compilers) XE 2013 and higher -- [LLVM](http://llvm.org/) 3.4 and higher -- [Visual C++](http://www.visualstudio.com/) 2013 and higher -- Any C++11 compiler - -For more information about *GLI*, please have a look at the [manual](manual.md) and the [API reference documentation](http://gli.g-truc.net/0.8.2/api/index.html). -The source code and the documentation are licensed under the [Happy Bunny License (Modified MIT) or the MIT License](manual.md#section0). - -Thanks for contributing to the project by [submitting pull requests](https://github.com/g-truc/glm/pulls). - -```cpp -#include - -GLuint CreateTexture(char const* Filename) -{ - gli::texture Texture = gli::load(Filename); - if(Texture.empty()) - return 0; - - gli::gl GL(gli::gl::PROFILE_GL33); - gli::gl::format const Format = GL.translate(Texture.format(), Texture.swizzles()); - GLenum Target = GL.translate(Texture.target()); - assert(gli::is_compressed(Texture.format()) && Target == gli::TARGET_2D); - - GLuint TextureName = 0; - glGenTextures(1, &TextureName); - glBindTexture(Target, TextureName); - glTexParameteri(Target, GL_TEXTURE_BASE_LEVEL, 0); - glTexParameteri(Target, GL_TEXTURE_MAX_LEVEL, static_cast(Texture.levels() - 1)); - glTexParameteriv(Target, GL_TEXTURE_SWIZZLE_RGBA, &Format.Swizzles[0]); - glTexStorage2D(Target, static_cast(Texture.levels()), Format.Internal, Extent.x, Extent.y); - for(std::size_t Level = 0; Level < Texture.levels(); ++Level) - { - glm::tvec3 Extent(Texture.extent(Level)); - glCompressedTexSubImage2D( - Target, static_cast(Level), 0, 0, Extent.x, Extent.y, - Format.Internal, static_cast(Texture.size(Level)), Texture.data(0, 0, Level)); - } - - return TextureName; -} -``` - -## [Lastest release](https://github.com/g-truc/gli/releases/latest) - -## Project Health - -| Service | System | Compiler | Status | -| ------- | ------ | -------- | ------ | -| [Travis CI](https://travis-ci.org/g-truc/gli)| Linux 64 bits | Clang 3.9, Clang 7, Clang 9, Clang 10, GCC 4.8, GCC 7.4, GCC 9, GCC 10 | [![Travis CI](https://travis-ci.org/g-truc/gli.svg?branch=master)](https://travis-ci.org/g-truc/gli) -| [AppVeyor](https://ci.appveyor.com/project/Groovounet/gli)| Windows 32 and 64 | Visual Studio 2013 | [![AppVeyor](https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true)](https://ci.appveyor.com/project/Groovounet/gli) - -## Release notes -### [GLI 0.8.3.0](https://github.com/g-truc/gli/releases/latest) - 2017-XX-XX -#### Features: -- Added decompression and sampling of DXT1, DXT3, DXT5, ATI1N and ATI2N #110 #119 -- Added depth and stencil format queries #119 -- Added texture_grad to samplers - -#### Fixes: -- Fixed R8 SRGB #120 - ---- -### [GLI 0.8.2.0](https://github.com/g-truc/gli/releases/tag/0.8.2.0) - 2016-11-13 -#### Features: -- Extend flip() for S3TC compressed textures #94 -- Added format property queries #102 - -#### Improvements: -- Fixed texture operator= -- Added initial manual - -#### Fixes: -- Fixed ATI2N swizzle parameters #121 - ---- -### [GLI 0.8.1.1](https://github.com/g-truc/gli/releases/tag/0.8.1.1) - 2016-09-11 -#### Improvements: -- Updated GLM to 0.9.8.0 release - -#### Fixes: -- Fixed KTX cube maps saving -- Fixed texture::clear build - ---- -### [GLI 0.8.1.0](https://github.com/g-truc/gli/releases/tag/0.8.1.0) - 2016-03-16 -#### Features: -- Added texture copy, no allocation involved, only transfer -- Added sub-image copy -- Added non-member clear -- Added make_texture* helper functions - -#### Improvements: -- Added compressed npot textures support #73 -- Added image access cache to generic textures -- Added luminance alpha format translation to OpenGL 3.3+ through RG swizzling. #93 -- Improved performance when sampling using mipmaps -- Improved nearest filter without border using texture_lod performance (~2.5x faster with texture2d) -- Improved texture::data() (~18x with cube array, ~68x with 2D) -- Improved texture::size() (~3.1x with cube array, ~3.9x with 2D) -- Improved simultanous texture::size() and texture::extent() calls (~2.1x with cube array, ~2.3x with 2D) - -#### Fixes: -- Fixed DX10 DDS saving of 3D textures #91 -- Fixed BGRX translation with PROFILE_GL33 profile #92 -- Fixed DDS9 loading of 3D texture detected as 2D texture #93 - ---- -### [GLI 0.8.0.0](https://github.com/g-truc/gli/releases/tag/0.8.0.0) - 2016-02-16 -#### Features: -- Added texture swizzle support #79 -- Added texture memory swizzle support -- Added texture conversion from any uncompressed format to any uncompressed format -- Added texture lod -- Added texture mipmaps generation for uncompressed formats -- Added support for load and store -- Added support for many new formats -- Added sampler 1D, 2D, 3D, array and cube map -- Added sampler texel fetch and texel write -- Added sampler clear -- Added transform algorithm to compute arithmetic between texels -- Added reduce algorithm to compare all texels within an image - -#### Improvements: -- Reordered formats to match Vulkan formats -- Improved OpenGL translation with for multiple profiles: KTX, ES2.0, ES3.0, GL3.2 and GL3.3 -- Improved Doxygen documentation - -#### Fixes: -- Fixed PVRTC2 support -- Fixed luminance and alpha translation to OpenGL #56 -- Fixed DXGI_FORMAT_B8G8R8X8_UNORM_SRGB support #59 -- Fixed FORMAT_RGBA8_UNORM DDS loading using DDPF_RGBA mode #60 -- Fixed handling of DDS DDPF_ALPHAPIXELS #68 -- Fixed images, better matching names and formats #78 #81 #80 -- Fixed BC4U and BC5U files generated from MS DDS loader #82 - -#### Work in progress: -- Added KMG container support and spec proposal - ---- -### [GLI 0.7.0.0](https://github.com/g-truc/gli/releases/tag/0.7.0.0) - 2015-09-01 -- Added KTX loading and saving -- Added gli::load for generic file loading, either DDS or KTX files depending on filename extensions -- Added gli::save for generic file saving, either DDS or KTX files depending on filename extensions -- Added texture views using different texture format, including compressed texture formats -- Added fine granularity includes -- Improved API documentation -- Much faster texture comparisons is non optimal cases. (Measured ~21x faster on Intel IVB) -- Explicitly handling of texture targets: fixed various cases of cubemap and texture arrays failing to load with DDS -- Fixed GCC build -- Fixed warnings -- Fixed saved DDS header size on #52 - ---- -### [GLI 0.6.1.1](https://github.com/g-truc/gli/releases/tag/0.6.1.1) - 2015-07-18 -- Updated API documentation -- Fixed link error - ---- -### [GLI 0.6.1.0](https://github.com/g-truc/gli/releases/tag/0.6.1.0) - 2015-07-18 -- Fixed interface inconsistencies -- Improved clear(), data() and size() performance using caching -- Removed internal dependence to std::fstream -- Added FORMAT_BGRX8_UNORM and FORMAT_BGRX8_SRGB support #48, #43 -- Improved FORMAT_RGB8_UNORM loading - ---- -### [GLI 0.6.0.0](https://github.com/g-truc/gli/releases/tag/0.6.0.0) - 2015-06-28 -- Large refactoring -- Added loading DDS from memory -- Added saving DDS to memory -- Improved DDS coverage for R, RG, RGB and RGBA formats -- Added DDS ASTC, PVRTC, ATC and ETC support -- Added DDS alpha, luminance and alpha luminance support -- Added PVRTC2, ETC2 and EAC formats - ---- -### [GLI 0.5.1.1](https://github.com/g-truc/gli/releases/tag/0.5.1.1) - 2014-01-20 -- Fixed swizzled RGB channel when reading back a DDS -- Fixed getMask* link error - ---- -### [GLI 0.5.1.0](https://github.com/g-truc/gli/releases/tag/0.5.1.0) - 2014-01-18 -- Added flip function -- Added level_count function -- Fixed interaction with std::map (#33) -- Added texelFetch and texelWrite functions - ---- -### [GLI 0.5.0.0](https://github.com/g-truc/gli/releases/tag/0.5.0.0) - 2013-11-24 -- Essencially a rewrite of the library -- Added explicit copies -- Added single memory allocation per texture storage -- Added texture views -- Added texture copies -- Added comparison operators -- Added clear - ---- -### GLI 0.4.1.0: 2013-03-10 -- Added DDS saving -- Fixed GCC build -- Fixed XCode build - ---- -### GLI 0.4.0.0: 2013-01-28 -- Large API refactoring -- Performance improvements at loading: 50x in debug and 50% in release build -- Added texture2DArray -- Added textureCube and textureCubeArray -- Added texture3D -- Added texture1D and texture1DArray -- Improved DDS loading support - ---- -### GLI 0.3.0.3: 2011-04-05 -- Fixed bugs - ---- -### GLI 0.3.0.2: 2011-02-08 -- Fixed bugs - ---- -### GLI 0.3.0.1: 2010-10-15 -- Fixed bugs - ---- -### GLI 0.3.0.0: 2010-10-01 -- Added DDS10 load and store (BC1 - BC7) -- Added extension system -- Added automatic OpenGL texture object creation from file - ---- -### GLI 0.2.2.0: 2010-09-07 -- Added DDS exporter - ---- -### GLI 0.2.1.1: 2010-05-12 -- Fixed GCC build - ---- -### GLI 0.2.1.0: 2010-02-15 -- Added texelWrite function -- Fixed Visual Studio 2010 warnings -- Added readme.txt and copying.txt - ---- -### GLI 0.2.0.0: 2010-01-10 -- Updated API -- Removed Boost dependency - ---- -### GLI 0.1.1.0: 2009-09-18 -- Fixed DDS loader -- Added RGB8 to DDS loader -- Added component swizzle operation -- Added 32 bits integer components support -- Fixed texel fetch - ---- -### GLI 0.1.0.0: 2009-03-28 -- Added TGA loader -- Added DDS loader -- Added duplicate, crop, partial copy -- Added mipmaps generation. - diff --git a/external/glm/copying.txt b/external/glm/copying.txt deleted file mode 100644 index 4ff49c7a..00000000 --- a/external/glm/copying.txt +++ /dev/null @@ -1,54 +0,0 @@ -================================================================================ -OpenGL Mathematics (GLM) --------------------------------------------------------------------------------- -GLM can be distributed and/or modified under the terms of either -a) The Happy Bunny License, or b) the MIT License. - -================================================================================ -The Happy Bunny License (Modified MIT License) --------------------------------------------------------------------------------- -Copyright (c) 2005 - 2015 G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -Restrictions: By making use of the Software for military purposes, you choose -to make a Bunny unhappy. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================================ -The MIT License --------------------------------------------------------------------------------- -Copyright (c) 2005 - 2015 G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/external/glm/glm/CMakeLists.txt b/external/glm/glm/CMakeLists.txt deleted file mode 100644 index 4ff51c81..00000000 --- a/external/glm/glm/CMakeLists.txt +++ /dev/null @@ -1,70 +0,0 @@ -file(GLOB ROOT_SOURCE *.cpp) -file(GLOB ROOT_INLINE *.inl) -file(GLOB ROOT_HEADER *.hpp) -file(GLOB ROOT_TEXT ../*.txt) -file(GLOB ROOT_MD ../*.md) -file(GLOB ROOT_NAT ../util/glm.natvis) - -file(GLOB_RECURSE CORE_SOURCE ./detail/*.cpp) -file(GLOB_RECURSE CORE_INLINE ./detail/*.inl) -file(GLOB_RECURSE CORE_HEADER ./detail/*.hpp) - -file(GLOB_RECURSE EXT_SOURCE ./ext/*.cpp) -file(GLOB_RECURSE EXT_INLINE ./ext/*.inl) -file(GLOB_RECURSE EXT_HEADER ./ext/*.hpp) - -file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp) -file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl) -file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp) - -file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp) -file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl) -file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp) - -file(GLOB_RECURSE SIMD_SOURCE ./simd/*.cpp) -file(GLOB_RECURSE SIMD_INLINE ./simd/*.inl) -file(GLOB_RECURSE SIMD_HEADER ./simd/*.h) - -source_group("Text Files" FILES ${ROOT_TEXT} ${ROOT_MD}) -source_group("Core Files" FILES ${CORE_SOURCE}) -source_group("Core Files" FILES ${CORE_INLINE}) -source_group("Core Files" FILES ${CORE_HEADER}) -source_group("EXT Files" FILES ${EXT_SOURCE}) -source_group("EXT Files" FILES ${EXT_INLINE}) -source_group("EXT Files" FILES ${EXT_HEADER}) -source_group("GTC Files" FILES ${GTC_SOURCE}) -source_group("GTC Files" FILES ${GTC_INLINE}) -source_group("GTC Files" FILES ${GTC_HEADER}) -source_group("GTX Files" FILES ${GTX_SOURCE}) -source_group("GTX Files" FILES ${GTX_INLINE}) -source_group("GTX Files" FILES ${GTX_HEADER}) -source_group("SIMD Files" FILES ${SIMD_SOURCE}) -source_group("SIMD Files" FILES ${SIMD_INLINE}) -source_group("SIMD Files" FILES ${SIMD_HEADER}) - -add_library(glm INTERFACE) -target_include_directories(glm INTERFACE ../) - -if(BUILD_STATIC_LIBS) -add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT} - ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} - ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER} - ${EXT_SOURCE} ${EXT_INLINE} ${EXT_HEADER} - ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER} - ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER} - ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER}) - target_link_libraries(glm_static PUBLIC glm) - add_library(glm::glm_static ALIAS glm_static) -endif() - -if(BUILD_SHARED_LIBS) -add_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT} - ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} - ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER} - ${EXT_SOURCE} ${EXT_INLINE} ${EXT_HEADER} - ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER} - ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER} - ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER}) - target_link_libraries(glm_shared PUBLIC glm) - add_library(glm::glm_shared ALIAS glm_shared) -endif() diff --git a/external/glm/glm/common.hpp b/external/glm/glm/common.hpp deleted file mode 100644 index 0328dc91..00000000 --- a/external/glm/glm/common.hpp +++ /dev/null @@ -1,539 +0,0 @@ -/// @ref core -/// @file glm/common.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.3 Common Functions -/// -/// @defgroup core_func_common Common functions -/// @ingroup core -/// -/// Provides GLSL common functions -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/qualifier.hpp" -#include "detail/_fixes.hpp" - -namespace glm -{ - /// @addtogroup core_func_common - /// @{ - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam genType floating-point or signed integer; scalar or vector types. - /// - /// @see GLSL abs man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x); - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL abs man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec abs(vec const& x); - - /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sign man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec sign(vec const& x); - - /// Returns a value equal to the nearest integer that is less then or equal to x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floor man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floor(vec const& x); - - /// Returns a value equal to the nearest integer to x - /// whose absolute value is not larger than the absolute value of x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL trunc man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec trunc(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// This includes the possibility that round(x) returns the - /// same value as roundEven(x) for all values of x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL round man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec round(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// A fractional part of 0.5 will round toward the nearest even - /// integer. (Both 3.5 and 4.5 for x will return 4.0.) - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL roundEven man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// @see New round to even technique - template - GLM_FUNC_DECL vec roundEven(vec const& x); - - /// Returns a value equal to the nearest integer - /// that is greater than or equal to x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL ceil man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec ceil(vec const& x); - - /// Return x - floor(x). - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fract man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType fract(genType x); - - /// Return x - floor(x). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL fract man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec fract(vec const& x); - - template - GLM_FUNC_DECL genType mod(genType x, genType y); - - template - GLM_FUNC_DECL vec mod(vec const& x, T y); - - /// Modulus. Returns x - y * floor(x / y) - /// for each component in x using the floating point value y. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL mod man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec mod(vec const& x, vec const& y); - - /// Returns the fractional part of x and sets i to the integer - /// part (as a whole number floating point value). Both the - /// return value and the output parameter will have the same - /// sign as x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL modf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType modf(genType x, genType& i); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, T y); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, vec const& y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, T y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal); - - /// If genTypeU is a floating scalar or vector: - /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of - /// x and y using the floating-point value a. - /// The value for a is not restricted to the range [0, 1]. - /// - /// If genTypeU is a boolean scalar or vector: - /// Selects which vector each returned component comes - /// from. For a component of 'a' that is false, the - /// corresponding component of 'x' is returned. For a - /// component of 'a' that is true, the corresponding - /// component of 'y' is returned. Components of 'x' and 'y' that - /// are not selected are allowed to be invalid floating point - /// values and will have no effect on the results. Thus, this - /// provides different functionality than - /// genType mix(genType x, genType y, genType(a)) - /// where a is a Boolean vector. - /// - /// @see GLSL mix man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// - /// @param[in] x Value to interpolate. - /// @param[in] y Value to interpolate. - /// @param[in] a Interpolant. - /// - /// @tparam genTypeT Floating point scalar or vector. - /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. - /// - /// @code - /// #include - /// ... - /// float a; - /// bool b; - /// glm::dvec3 e; - /// glm::dvec3 f; - /// glm::vec4 g; - /// glm::vec4 h; - /// ... - /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. - /// glm::vec4 s = glm::mix(g, h, b); // Returns g or h; - /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. - /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. - /// @endcode - template - GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a); - - template - GLM_FUNC_DECL vec mix(vec const& x, vec const& y, vec const& a); - - template - GLM_FUNC_DECL vec mix(vec const& x, vec const& y, U a); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType step(genType edge, genType x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec step(T edge, vec const& x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec step(vec const& edge, vec const& x); - - /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and - /// performs smooth Hermite interpolation between 0 and 1 - /// when edge0 < x < edge1. This is useful in cases where - /// you would want a threshold function with a smooth - /// transition. This is equivalent to: - /// genType t; - /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); - /// return t * t * (3 - 2 * t); - /// Results are undefined if edge0 >= edge1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL smoothstep man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x); - - template - GLM_FUNC_DECL vec smoothstep(T edge0, T edge1, vec const& x); - - template - GLM_FUNC_DECL vec smoothstep(vec const& edge0, vec const& edge1, vec const& x); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// /!\ When using compiler fast math, this function may fail. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL isnan man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec isnan(vec const& x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL isinf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec isinf(vec const& x); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floating-point - /// value's bit-level representation is preserved. - /// - /// @see GLSL floatBitsToInt man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL int floatBitsToInt(float const& v); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floatBitsToInt man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floatBitsToInt(vec const& v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @see GLSL floatBitsToUint man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL uint floatBitsToUint(float const& v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floatBitsToUint man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floatBitsToUint(vec const& v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see GLSL intBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL float intBitsToFloat(int const& v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL intBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec intBitsToFloat(vec const& v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see GLSL uintBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL float uintBitsToFloat(uint const& v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL uintBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec uintBitsToFloat(vec const& v); - - /// Computes and returns a * b + c. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fma man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c); - - /// Splits x into a floating-point significand in the range - /// [0.5, 1.0) and an integral exponent of two, such that: - /// x = significand * exp(2, exponent) - /// - /// The significand is returned by the function and the - /// exponent is returned in the parameter exp. For a - /// floating-point value of zero, the significant and exponent - /// are both zero. For a floating-point value that is an - /// infinity or is not a number, the results are undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL frexp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType frexp(genType x, int& exp); - - template - GLM_FUNC_DECL vec frexp(vec const& v, vec& exp); - - /// Builds a floating-point number from x and the - /// corresponding integral exponent of two in exp, returning: - /// significand * exp(2, exponent) - /// - /// If this product is too large to be represented in the - /// floating-point type, the result is undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL ldexp man page; - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp); - - template - GLM_FUNC_DECL vec ldexp(vec const& v, vec const& exp); - - /// @} -}//namespace glm - -#include "detail/func_common.inl" - diff --git a/external/glm/glm/detail/_features.hpp b/external/glm/glm/detail/_features.hpp deleted file mode 100644 index b0cbe9ff..00000000 --- a/external/glm/glm/detail/_features.hpp +++ /dev/null @@ -1,394 +0,0 @@ -#pragma once - -// #define GLM_CXX98_EXCEPTIONS -// #define GLM_CXX98_RTTI - -// #define GLM_CXX11_RVALUE_REFERENCES -// Rvalue references - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html - -// GLM_CXX11_TRAILING_RETURN -// Rvalue references for *this - GCC not supported -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm - -// GLM_CXX11_NONSTATIC_MEMBER_INIT -// Initialization of class objects by rvalues - GCC any -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html - -// GLM_CXX11_NONSTATIC_MEMBER_INIT -// Non-static data member initializers - GCC 4.7 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm - -// #define GLM_CXX11_VARIADIC_TEMPLATE -// Variadic templates - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf - -// -// Extending variadic template template parameters - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf - -// #define GLM_CXX11_GENERALIZED_INITIALIZERS -// Initializer lists - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm - -// #define GLM_CXX11_STATIC_ASSERT -// Static assertions - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html - -// #define GLM_CXX11_AUTO_TYPE -// auto-typed variables - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf - -// #define GLM_CXX11_AUTO_TYPE -// Multi-declarator auto - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf - -// #define GLM_CXX11_AUTO_TYPE -// Removal of auto as a storage-class specifier - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm - -// #define GLM_CXX11_AUTO_TYPE -// New function declarator syntax - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm - -// #define GLM_CXX11_LAMBDAS -// New wording for C++0x lambdas - GCC 4.5 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf - -// #define GLM_CXX11_DECLTYPE -// Declared type of an expression - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf - -// -// Right angle brackets - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html - -// -// Default template arguments for function templates DR226 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226 - -// -// Solving the SFINAE problem for expressions DR339 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html - -// #define GLM_CXX11_ALIAS_TEMPLATE -// Template aliases N2258 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf - -// -// Extern templates N1987 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm - -// #define GLM_CXX11_NULLPTR -// Null pointer constant N2431 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf - -// #define GLM_CXX11_STRONG_ENUMS -// Strongly-typed enums N2347 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf - -// -// Forward declarations for enums N2764 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf - -// -// Generalized attributes N2761 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf - -// -// Generalized constant expressions N2235 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf - -// -// Alignment support N2341 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf - -// #define GLM_CXX11_DELEGATING_CONSTRUCTORS -// Delegating constructors N1986 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf - -// -// Inheriting constructors N2540 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm - -// #define GLM_CXX11_EXPLICIT_CONVERSIONS -// Explicit conversion operators N2437 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf - -// -// New character types N2249 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html - -// -// Unicode string literals N2442 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm - -// -// Raw string literals N2442 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm - -// -// Universal character name literals N2170 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html - -// #define GLM_CXX11_USER_LITERALS -// User-defined literals N2765 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf - -// -// Standard Layout Types N2342 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm - -// #define GLM_CXX11_DEFAULTED_FUNCTIONS -// #define GLM_CXX11_DELETED_FUNCTIONS -// Defaulted and deleted functions N2346 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm - -// -// Extended friend declarations N1791 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf - -// -// Extending sizeof N2253 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html - -// #define GLM_CXX11_INLINE_NAMESPACES -// Inline namespaces N2535 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm - -// #define GLM_CXX11_UNRESTRICTED_UNIONS -// Unrestricted unions N2544 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf - -// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS -// Local and unnamed types as template arguments N2657 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm - -// #define GLM_CXX11_RANGE_FOR -// Range-based for N2930 GCC 4.6 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html - -// #define GLM_CXX11_OVERRIDE_CONTROL -// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm - -// -// Minimal support for garbage collection and reachability-based leak detection N2670 No -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm - -// #define GLM_CXX11_NOEXCEPT -// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only) -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html - -// -// Defining move special member functions N3053 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html - -// -// Sequence points N2239 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html - -// -// Atomic operations N2427 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html - -// -// Strong Compare and Exchange N2748 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html - -// -// Bidirectional Fences N2752 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm - -// -// Memory model N2429 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm - -// -// Data-dependency ordering: atomics and memory model N2664 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm - -// -// Propagating exceptions N2179 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html - -// -// Abandoning a process and at_quick_exit N2440 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm - -// -// Allow atomics use in signal handlers N2547 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm - -// -// Thread-local storage N2659 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm - -// -// Dynamic initialization and destruction with concurrency N2660 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm - -// -// __func__ predefined identifier N2340 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm - -// -// C99 preprocessor N1653 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm - -// -// long long N1811 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf - -// -// Extended integral types N1988 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf - -#if(GLM_COMPILER & GLM_COMPILER_GCC) - -# define GLM_CXX11_STATIC_ASSERT - -#elif(GLM_COMPILER & GLM_COMPILER_CLANG) -# if(__has_feature(cxx_exceptions)) -# define GLM_CXX98_EXCEPTIONS -# endif - -# if(__has_feature(cxx_rtti)) -# define GLM_CXX98_RTTI -# endif - -# if(__has_feature(cxx_access_control_sfinae)) -# define GLM_CXX11_ACCESS_CONTROL_SFINAE -# endif - -# if(__has_feature(cxx_alias_templates)) -# define GLM_CXX11_ALIAS_TEMPLATE -# endif - -# if(__has_feature(cxx_alignas)) -# define GLM_CXX11_ALIGNAS -# endif - -# if(__has_feature(cxx_attributes)) -# define GLM_CXX11_ATTRIBUTES -# endif - -# if(__has_feature(cxx_constexpr)) -# define GLM_CXX11_CONSTEXPR -# endif - -# if(__has_feature(cxx_decltype)) -# define GLM_CXX11_DECLTYPE -# endif - -# if(__has_feature(cxx_default_function_template_args)) -# define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS -# endif - -# if(__has_feature(cxx_defaulted_functions)) -# define GLM_CXX11_DEFAULTED_FUNCTIONS -# endif - -# if(__has_feature(cxx_delegating_constructors)) -# define GLM_CXX11_DELEGATING_CONSTRUCTORS -# endif - -# if(__has_feature(cxx_deleted_functions)) -# define GLM_CXX11_DELETED_FUNCTIONS -# endif - -# if(__has_feature(cxx_explicit_conversions)) -# define GLM_CXX11_EXPLICIT_CONVERSIONS -# endif - -# if(__has_feature(cxx_generalized_initializers)) -# define GLM_CXX11_GENERALIZED_INITIALIZERS -# endif - -# if(__has_feature(cxx_implicit_moves)) -# define GLM_CXX11_IMPLICIT_MOVES -# endif - -# if(__has_feature(cxx_inheriting_constructors)) -# define GLM_CXX11_INHERITING_CONSTRUCTORS -# endif - -# if(__has_feature(cxx_inline_namespaces)) -# define GLM_CXX11_INLINE_NAMESPACES -# endif - -# if(__has_feature(cxx_lambdas)) -# define GLM_CXX11_LAMBDAS -# endif - -# if(__has_feature(cxx_local_type_template_args)) -# define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS -# endif - -# if(__has_feature(cxx_noexcept)) -# define GLM_CXX11_NOEXCEPT -# endif - -# if(__has_feature(cxx_nonstatic_member_init)) -# define GLM_CXX11_NONSTATIC_MEMBER_INIT -# endif - -# if(__has_feature(cxx_nullptr)) -# define GLM_CXX11_NULLPTR -# endif - -# if(__has_feature(cxx_override_control)) -# define GLM_CXX11_OVERRIDE_CONTROL -# endif - -# if(__has_feature(cxx_reference_qualified_functions)) -# define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS -# endif - -# if(__has_feature(cxx_range_for)) -# define GLM_CXX11_RANGE_FOR -# endif - -# if(__has_feature(cxx_raw_string_literals)) -# define GLM_CXX11_RAW_STRING_LITERALS -# endif - -# if(__has_feature(cxx_rvalue_references)) -# define GLM_CXX11_RVALUE_REFERENCES -# endif - -# if(__has_feature(cxx_static_assert)) -# define GLM_CXX11_STATIC_ASSERT -# endif - -# if(__has_feature(cxx_auto_type)) -# define GLM_CXX11_AUTO_TYPE -# endif - -# if(__has_feature(cxx_strong_enums)) -# define GLM_CXX11_STRONG_ENUMS -# endif - -# if(__has_feature(cxx_trailing_return)) -# define GLM_CXX11_TRAILING_RETURN -# endif - -# if(__has_feature(cxx_unicode_literals)) -# define GLM_CXX11_UNICODE_LITERALS -# endif - -# if(__has_feature(cxx_unrestricted_unions)) -# define GLM_CXX11_UNRESTRICTED_UNIONS -# endif - -# if(__has_feature(cxx_user_literals)) -# define GLM_CXX11_USER_LITERALS -# endif - -# if(__has_feature(cxx_variadic_templates)) -# define GLM_CXX11_VARIADIC_TEMPLATES -# endif - -#endif//(GLM_COMPILER & GLM_COMPILER_CLANG) diff --git a/external/glm/glm/detail/_fixes.hpp b/external/glm/glm/detail/_fixes.hpp deleted file mode 100644 index a503c7c0..00000000 --- a/external/glm/glm/detail/_fixes.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#include - -//! Workaround for compatibility with other libraries -#ifdef max -#undef max -#endif - -//! Workaround for compatibility with other libraries -#ifdef min -#undef min -#endif - -//! Workaround for Android -#ifdef isnan -#undef isnan -#endif - -//! Workaround for Android -#ifdef isinf -#undef isinf -#endif - -//! Workaround for Chrone Native Client -#ifdef log2 -#undef log2 -#endif - diff --git a/external/glm/glm/detail/_noise.hpp b/external/glm/glm/detail/_noise.hpp deleted file mode 100644 index 5a874a02..00000000 --- a/external/glm/glm/detail/_noise.hpp +++ /dev/null @@ -1,81 +0,0 @@ -#pragma once - -#include "../common.hpp" - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER T mod289(T const& x) - { - return x - floor(x * (static_cast(1.0) / static_cast(289.0))) * static_cast(289.0); - } - - template - GLM_FUNC_QUALIFIER T permute(T const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } -}//namespace detail -}//namespace glm - diff --git a/external/glm/glm/detail/_swizzle.hpp b/external/glm/glm/detail/_swizzle.hpp deleted file mode 100644 index 87896ef4..00000000 --- a/external/glm/glm/detail/_swizzle.hpp +++ /dev/null @@ -1,804 +0,0 @@ -#pragma once - -namespace glm{ -namespace detail -{ - // Internal class for implementing swizzle operators - template - struct _swizzle_base0 - { - protected: - GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast(_buffer))[i]; } - GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast(_buffer))[i]; } - - // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. - // The size 1 buffer is assumed to aligned to the actual members so that the - // elem() - char _buffer[1]; - }; - - template - struct _swizzle_base1 : public _swizzle_base0 - { - }; - - template - struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()() const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); } - }; - - template - struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()() const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); } - }; - - template - struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()() const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } - }; - - // Internal class for implementing swizzle operators - /* - Template parameters: - - T = type of scalar values (e.g. float, double) - N = number of components in the vector (e.g. 3) - E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec - - DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles - containing duplicate elements so that they cannot be used as r-values). - */ - template - struct _swizzle_base2 : public _swizzle_base1::value> - { - struct op_equal - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; } - }; - - struct op_minus - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; } - }; - - struct op_plus - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; } - }; - - struct op_mul - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; } - }; - - struct op_div - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; } - }; - - public: - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t) - { - for (int i = 0; i < N; ++i) - (*this)[i] = t; - return *this; - } - - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec const& that) - { - _apply_op(that, op_equal()); - return *this; - } - - GLM_FUNC_QUALIFIER void operator -= (vec const& that) - { - _apply_op(that, op_minus()); - } - - GLM_FUNC_QUALIFIER void operator += (vec const& that) - { - _apply_op(that, op_plus()); - } - - GLM_FUNC_QUALIFIER void operator *= (vec const& that) - { - _apply_op(that, op_mul()); - } - - GLM_FUNC_QUALIFIER void operator /= (vec const& that) - { - _apply_op(that, op_div()); - } - - GLM_FUNC_QUALIFIER T& operator[](size_t i) - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - GLM_FUNC_QUALIFIER T operator[](size_t i) const - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - - protected: - template - GLM_FUNC_QUALIFIER void _apply_op(vec const& that, const U& op) - { - // Make a copy of the data in this == &that. - // The copier should optimize out the copy in cases where the function is - // properly inlined and the copy is not necessary. - T t[N]; - for (int i = 0; i < N; ++i) - t[i] = that[i]; - for (int i = 0; i < N; ++i) - op( (*this)[i], t[i] ); - } - }; - - // Specialization for swizzles containing duplicate elements. These cannot be modified. - template - struct _swizzle_base2 : public _swizzle_base1::value> - { - struct Stub {}; - - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; } - - GLM_FUNC_QUALIFIER T operator[] (size_t i) const - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - }; - - template - struct _swizzle : public _swizzle_base2 - { - typedef _swizzle_base2 base_type; - - using base_type::operator=; - - GLM_FUNC_QUALIFIER operator vec () const { return (*this)(); } - }; - -// -// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros -// -#define GLM_SWIZZLE_TEMPLATE1 template -#define GLM_SWIZZLE_TEMPLATE2 template -#define GLM_SWIZZLE_TYPE1 _swizzle -#define GLM_SWIZZLE_TYPE2 _swizzle - -// -// Wrapper for a binary operator (e.g. u.yy + v.zy) -// -#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ - { \ - return a() OPERAND b(); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec& b) \ - { \ - return a() OPERAND b; \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const vec& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz) -// -#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b) \ - { \ - return a() OPERAND b; \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Macro for wrapping a function taking one argument (e.g. abs()) -// -#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a) \ - { \ - return FUNCTION(a()); \ - } - -// -// Macro for wrapping a function taking two vector arguments (e.g. dot()). -// -#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b) \ - { \ - return FUNCTION(a(), b); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a, b()); \ - } - -// -// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()). -// -#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ - { \ - return FUNCTION(a(), b, c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a, b(), c); \ - } - -}//namespace detail -}//namespace glm - -namespace glm -{ - namespace detail - { - GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) - GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) - } - - // - // Swizzles are distinct types from the unswizzled type. The below macros will - // provide template specializations for the swizzle types for the given functions - // so that the compiler does not have any ambiguity to choosing how to handle - // the function. - // - // The alternative is to use the operator()() when calling the function in order - // to explicitly convert the swizzled type to the unswizzled type. - // - - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); - - //GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); - //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); - //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); - //GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); -} - -#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; }; - -#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; - -#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; - -#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \ - struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; - -#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \ - struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; - -#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \ - struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; - -#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; }; - -#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; }; - -#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; }; diff --git a/external/glm/glm/detail/_swizzle_func.hpp b/external/glm/glm/detail/_swizzle_func.hpp deleted file mode 100644 index d93c6afd..00000000 --- a/external/glm/glm/detail/_swizzle_func.hpp +++ /dev/null @@ -1,682 +0,0 @@ -#pragma once - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B) \ - vec<2, T, Q> A ## B() CONST \ - { \ - return vec<2, T, Q>(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C) \ - vec<3, T, Q> A ## B ## C() CONST \ - { \ - return vec<3, T, Q>(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D) \ - vec<4, T, Q> A ## B ## C ## D() CONST \ - { \ - return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ - } - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B) \ - template \ - vec vec::A ## B() CONST \ - { \ - return vec<2, T, Q>(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C) \ - template \ - vec<3, T, Q> vec::A ## B ## C() CONST \ - { \ - return vec<3, T, Q>(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D) \ - template \ - vec<4, T, Q> vec::A ## B ## C ## D() CONST \ - { \ - return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ - } - -#define GLM_MUTABLE - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B) - -#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q) - diff --git a/external/glm/glm/detail/_vectorize.hpp b/external/glm/glm/detail/_vectorize.hpp deleted file mode 100644 index 1fcaec31..00000000 --- a/external/glm/glm/detail/_vectorize.hpp +++ /dev/null @@ -1,162 +0,0 @@ -#pragma once - -namespace glm{ -namespace detail -{ - template class vec, length_t L, typename R, typename T, qualifier Q> - struct functor1{}; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v) - { - return vec<1, R, Q>(Func(v.x)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v) - { - return vec<2, R, Q>(Func(v.x), Func(v.y)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v) - { - return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v) - { - return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w)); - } - }; - - template class vec, length_t L, typename T, qualifier Q> - struct functor2{}; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b) - { - return vec<1, T, Q>(Func(a.x, b.x)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b) - { - return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); - } - }; - - template class vec, length_t L, typename T, qualifier Q> - struct functor2_vec_sca{}; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b) - { - return vec<1, T, Q>(Func(a.x, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b) - { - return vec<2, T, Q>(Func(a.x, b), Func(a.y, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b) - { - return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b) - { - return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b)); - } - }; - - template - struct functor2_vec_int {}; - - template - struct functor2_vec_int<1, T, Q> - { - GLM_FUNC_QUALIFIER static vec<1, int, Q> call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, Q> const& b) - { - return vec<1, int, Q>(Func(a.x, b.x)); - } - }; - - template - struct functor2_vec_int<2, T, Q> - { - GLM_FUNC_QUALIFIER static vec<2, int, Q> call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, Q> const& b) - { - return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y)); - } - }; - - template - struct functor2_vec_int<3, T, Q> - { - GLM_FUNC_QUALIFIER static vec<3, int, Q> call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, Q> const& b) - { - return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); - } - }; - - template - struct functor2_vec_int<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, Q> const& b) - { - return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); - } - }; -}//namespace detail -}//namespace glm diff --git a/external/glm/glm/detail/compute_common.hpp b/external/glm/glm/detail/compute_common.hpp deleted file mode 100644 index cc24b9e6..00000000 --- a/external/glm/glm/detail/compute_common.hpp +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include "setup.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_abs - {}; - - template - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || std::numeric_limits::is_signed, - "'abs' only accept floating-point and integer scalar or vector inputs"); - - return x >= genFIType(0) ? x : -x; - // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff; - } - }; - -#if GLM_COMPILER & GLM_COMPILER_CUDA - template<> - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x) - { - return fabsf(x); - } - }; -#endif - - template - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) - { - GLM_STATIC_ASSERT( - (!std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'abs' only accept floating-point and integer scalar or vector inputs"); - return x; - } - }; -}//namespace detail -}//namespace glm diff --git a/external/glm/glm/detail/compute_vector_relational.hpp b/external/glm/glm/detail/compute_vector_relational.hpp deleted file mode 100644 index 167b6345..00000000 --- a/external/glm/glm/detail/compute_vector_relational.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -//#include "compute_common.hpp" -#include "setup.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) - { - return a == b; - } - }; -/* - template - struct compute_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) - { - return detail::compute_abs::is_signed>::call(b - a) <= static_cast(0); - //return std::memcmp(&a, &b, sizeof(T)) == 0; - } - }; -*/ -}//namespace detail -}//namespace glm diff --git a/external/glm/glm/detail/func_common.inl b/external/glm/glm/detail/func_common.inl deleted file mode 100644 index 4b5f1441..00000000 --- a/external/glm/glm/detail/func_common.inl +++ /dev/null @@ -1,792 +0,0 @@ -/// @ref core -/// @file glm/detail/func_common.inl - -#include "../vector_relational.hpp" -#include "compute_common.hpp" -#include "type_vec1.hpp" -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include "_vectorize.hpp" -#include - -namespace glm -{ - // min - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return (y < x) ? y : x; - } - - // max - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType max(genType x, genType y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - - return (x < y) ? y : x; - } - - // abs - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR int abs(int x) - { - int const y = x >> (sizeof(int) * 8 - 1); - return (x ^ y) - y; - } - - // round -# if GLM_HAS_CXX11_STL - using ::std::round; -# else - template - GLM_FUNC_QUALIFIER genType round(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); - - return x < static_cast(0) ? static_cast(int(x - static_cast(0.5))) : static_cast(int(x + static_cast(0.5))); - } -# endif - - // trunc -# if GLM_HAS_CXX11_STL - using ::std::trunc; -# else - template - GLM_FUNC_QUALIFIER genType trunc(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); - - return x < static_cast(0) ? -std::floor(-x) : std::floor(x); - } -# endif - -}//namespace glm - -namespace glm{ -namespace detail -{ - template - struct compute_abs_vector - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec call(vec const& x) - { - return detail::functor1::call(abs, x); - } - }; - - template - struct compute_mix_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); - } - }; - - template - struct compute_mix_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) - { - vec Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = a[i] ? y[i] : x[i]; - return Result; - } - }; - - template - struct compute_mix_scalar - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, U const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); - } - }; - - template - struct compute_mix_scalar - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, bool const& a) - { - return a ? y : x; - } - }; - - template - struct compute_mix - { - GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return static_cast(static_cast(x) * (static_cast(1) - a) + static_cast(y) * a); - } - }; - - template - struct compute_mix - { - GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a) - { - return a ? y : x; - } - }; - - template - struct compute_sign - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return vec(glm::lessThan(vec(0), x)) - vec(glm::lessThan(x, vec(0))); - } - }; - -# if GLM_ARCH == GLM_ARCH_X86 - template - struct compute_sign - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - T const Shift(static_cast(sizeof(T) * 8 - 1)); - vec const y(vec::type, Q>(-x) >> typename detail::make_unsigned::type(Shift)); - - return (x >> Shift) | y; - } - }; -# endif - - template - struct compute_floor - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::floor, x); - } - }; - - template - struct compute_ceil - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::ceil, x); - } - }; - - template - struct compute_fract - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return x - floor(x); - } - }; - - template - struct compute_trunc - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(trunc, x); - } - }; - - template - struct compute_round - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(round, x); - } - }; - - template - struct compute_mod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mod' only accept floating-point inputs. Include for integer inputs."); - return a - b * floor(a / b); - } - }; - - template - struct compute_min_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) - { - return detail::functor2::call(min, x, y); - } - }; - - template - struct compute_max_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) - { - return detail::functor2::call(max, x, y); - } - }; - - template - struct compute_clamp_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& minVal, vec const& maxVal) - { - return min(max(x, minVal), maxVal); - } - }; - - template - struct compute_step_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& edge, vec const& x) - { - return mix(vec(1), vec(0), glm::lessThan(x, edge)); - } - }; - - template - struct compute_smoothstep_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& edge0, vec const& edge1, vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); - vec const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast(0), static_cast(1))); - return tmp * tmp * (static_cast(3) - static_cast(2) * tmp); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType abs(genFIType x) - { - return detail::compute_abs::is_signed>::call(x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec abs(vec const& x) - { - return detail::compute_abs_vector::value>::call(x); - } - - // sign - // fast and works for any type - template - GLM_FUNC_QUALIFIER genFIType sign(genFIType x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'sign' only accept signed inputs"); - - return detail::compute_sign<1, genFIType, defaultp, - std::numeric_limits::is_iec559, detail::is_aligned::value>::call(vec<1, genFIType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec sign(vec const& x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'sign' only accept signed inputs"); - - return detail::compute_sign::is_iec559, detail::is_aligned::value>::call(x); - } - - // floor - using ::std::floor; - template - GLM_FUNC_QUALIFIER vec floor(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'floor' only accept floating-point inputs."); - return detail::compute_floor::value>::call(x); - } - - template - GLM_FUNC_QUALIFIER vec trunc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); - return detail::compute_trunc::value>::call(x); - } - - template - GLM_FUNC_QUALIFIER vec round(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); - return detail::compute_round::value>::call(x); - } - -/* - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - - return genType(int(x + genType(int(x) % 2))); - } -*/ - - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - - int Integer = static_cast(x); - genType IntegerPart = static_cast(Integer); - genType FractionalPart = fract(x); - - if(FractionalPart > static_cast(0.5) || FractionalPart < static_cast(0.5)) - { - return round(x); - } - else if((Integer % 2) == 0) - { - return IntegerPart; - } - else if(x <= static_cast(0)) // Work around... - { - return IntegerPart - static_cast(1); - } - else - { - return IntegerPart + static_cast(1); - } - //else // Bug on MinGW 4.5.2 - //{ - // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0)); - //} - } - - template - GLM_FUNC_QUALIFIER vec roundEven(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - return detail::functor1::call(roundEven, x); - } - - // ceil - using ::std::ceil; - template - GLM_FUNC_QUALIFIER vec ceil(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ceil' only accept floating-point inputs"); - return detail::compute_ceil::value>::call(x); - } - - // fract - template - GLM_FUNC_QUALIFIER genType fract(genType x) - { - return fract(vec<1, genType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec fract(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fract' only accept floating-point inputs"); - return detail::compute_fract::value>::call(x); - } - - // mod - template - GLM_FUNC_QUALIFIER genType mod(genType x, genType y) - { -# if GLM_COMPILER & GLM_COMPILER_CUDA - // Another Cuda compiler bug https://github.com/g-truc/glm/issues/530 - vec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y)); - return Result.x; -# else - return mod(vec<1, genType, defaultp>(x), y).x; -# endif - } - - template - GLM_FUNC_QUALIFIER vec mod(vec const& x, T y) - { - return detail::compute_mod::value>::call(x, vec(y)); - } - - template - GLM_FUNC_QUALIFIER vec mod(vec const& x, vec const& y) - { - return detail::compute_mod::value>::call(x, y); - } - - // modf - template - GLM_FUNC_QUALIFIER genType modf(genType x, genType & i) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'modf' only accept floating-point inputs"); - return std::modf(x, &i); - } - - template - GLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i) - { - return vec<1, T, Q>( - modf(x.x, i.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i) - { - return vec<2, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i) - { - return vec<3, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i) - { - return vec<4, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z), - modf(x.w, i.w)); - } - - //// Only valid if (INT_MIN <= x-y <= INT_MAX) - //// min(x,y) - //r = y + ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT - 1))); - //// max(x,y) - //r = x - ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT - 1))); - - // min - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return detail::compute_min_vector::value>::call(a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, vec const& b) - { - return detail::compute_min_vector::value>::call(a, b); - } - - // max - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - return detail::compute_max_vector::value>::call(a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, vec const& b) - { - return detail::compute_max_vector::value>::call(a, b); - } - - // clamp - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return min(max(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector::value>::call(x, vec(minVal), vec(maxVal)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector::value>::call(x, minVal, maxVal); - } - - template - GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a) - { - return detail::compute_mix::call(x, y, a); - } - - template - GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, U a) - { - return detail::compute_mix_scalar::value>::call(x, y, a); - } - - template - GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, vec const& a) - { - return detail::compute_mix_vector::value>::call(x, y, a); - } - - // step - template - GLM_FUNC_QUALIFIER genType step(genType edge, genType x) - { - return mix(static_cast(1), static_cast(0), x < edge); - } - - template - GLM_FUNC_QUALIFIER vec step(T edge, vec const& x) - { - return detail::compute_step_vector::value>::call(vec(edge), x); - } - - template - GLM_FUNC_QUALIFIER vec step(vec const& edge, vec const& x) - { - return detail::compute_step_vector::value>::call(edge, x); - } - - // smoothstep - template - GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); - - genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1))); - return tmp * tmp * (genType(3) - genType(2) * tmp); - } - - template - GLM_FUNC_QUALIFIER vec smoothstep(T edge0, T edge1, vec const& x) - { - return detail::compute_smoothstep_vector::value>::call(vec(edge0), vec(edge1), x); - } - - template - GLM_FUNC_QUALIFIER vec smoothstep(vec const& edge0, vec const& edge1, vec const& x) - { - return detail::compute_smoothstep_vector::value>::call(edge0, edge1, x); - } - -# if GLM_HAS_CXX11_STL - using std::isnan; -# else - template - GLM_FUNC_QUALIFIER bool isnan(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::isnan(x); -# elif GLM_COMPILER & GLM_COMPILER_VC - return _isnan(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# if GLM_PLATFORM & GLM_PLATFORM_WINDOWS - return _isnan(x) != 0; -# else - return ::isnan(x) != 0; -# endif -# elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L - return _isnan(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_CUDA - return ::isnan(x) != 0; -# else - return std::isnan(x); -# endif - } -# endif - - template - GLM_FUNC_QUALIFIER vec isnan(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = glm::isnan(v[l]); - return Result; - } - -# if GLM_HAS_CXX11_STL - using std::isinf; -# else - template - GLM_FUNC_QUALIFIER bool isinf(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::isinf(x); -# elif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC) -# if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) - return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; -# else - return ::isinf(x); -# endif -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L) - return _isinf(x) != 0; -# else - return std::isinf(x); -# endif -# elif GLM_COMPILER & GLM_COMPILER_CUDA - // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab - return ::isinf(double(x)) != 0; -# else - return std::isinf(x); -# endif - } -# endif - - template - GLM_FUNC_QUALIFIER vec isinf(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = glm::isinf(v[l]); - return Result; - } - - GLM_FUNC_QUALIFIER int floatBitsToInt(float const& v) - { - union - { - float in; - int out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec floatBitsToInt(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v) - { - union - { - float in; - uint out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec floatBitsToUint(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER float intBitsToFloat(int const& v) - { - union - { - int in; - float out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec intBitsToFloat(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v) - { - union - { - uint in; - float out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec uintBitsToFloat(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - -# if GLM_HAS_CXX11_STL - using std::fma; -# else - template - GLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c) - { - return a * b + c; - } -# endif - - template - GLM_FUNC_QUALIFIER genType frexp(genType x, int& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); - - return std::frexp(x, &exp); - } - - template - GLM_FUNC_QUALIFIER vec frexp(vec const& v, vec& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = std::frexp(v[l], &exp[l]); - return Result; - } - - template - GLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); - - return std::ldexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER vec ldexp(vec const& v, vec const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = std::ldexp(v[l], exp[l]); - return Result; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_common_simd.inl" -#endif diff --git a/external/glm/glm/detail/func_common_simd.inl b/external/glm/glm/detail/func_common_simd.inl deleted file mode 100644 index ce0032d3..00000000 --- a/external/glm/glm/detail/func_common_simd.inl +++ /dev/null @@ -1,231 +0,0 @@ -/// @ref core -/// @file glm/detail/func_common_simd.inl - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#include "../simd/common.h" - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_abs_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_abs(v.data); - return result; - } - }; - - template - struct compute_abs_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) - { - vec<4, int, Q> result; - result.data = glm_ivec4_abs(v.data); - return result; - } - }; - - template - struct compute_floor<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_floor(v.data); - return result; - } - }; - - template - struct compute_ceil<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_ceil(v.data); - return result; - } - }; - - template - struct compute_fract<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_fract(v.data); - return result; - } - }; - - template - struct compute_round<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_round(v.data); - return result; - } - }; - - template - struct compute_mod<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { - vec<4, float, Q> result; - result.data = glm_vec4_mod(x.data, y.data); - return result; - } - }; - - template - struct compute_min_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - vec<4, float, Q> result; - result.data = _mm_min_ps(v1.data, v2.data); - return result; - } - }; - - template - struct compute_min_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - vec<4, int, Q> result; - result.data = _mm_min_epi32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_min_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - vec<4, uint, Q> result; - result.data = _mm_min_epu32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - vec<4, float, Q> result; - result.data = _mm_max_ps(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - vec<4, int, Q> result; - result.data = _mm_max_epi32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - vec<4, uint, Q> result; - result.data = _mm_max_epu32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& minVal, vec<4, float, Q> const& maxVal) - { - vec<4, float, Q> result; - result.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& x, vec<4, int, Q> const& minVal, vec<4, int, Q> const& maxVal) - { - vec<4, int, Q> result; - result.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& x, vec<4, uint, Q> const& minVal, vec<4, uint, Q> const& maxVal) - { - vec<4, uint, Q> result; - result.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_mix_vector<4, float, bool, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y, vec<4, bool, Q> const& a) - { - __m128i const Load = _mm_set_epi32(-static_cast(a.w), -static_cast(a.z), -static_cast(a.y), -static_cast(a.x)); - __m128 const Mask = _mm_castsi128_ps(Load); - - vec<4, float, Q> Result; -# if 0 && GLM_ARCH & GLM_ARCH_AVX - Result.data = _mm_blendv_ps(x.data, y.data, Mask); -# else - Result.data = _mm_or_ps(_mm_and_ps(Mask, y.data), _mm_andnot_ps(Mask, x.data)); -# endif - return Result; - } - }; -/* FIXME - template - struct compute_step_vector - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge, vec<4, float, Q> const& x) - { - vec<4, float, Q> Result; - result.data = glm_vec4_step(edge.data, x.data); - return result; - } - }; -*/ - template - struct compute_smoothstep_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge0, vec<4, float, Q> const& edge1, vec<4, float, Q> const& x) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/detail/func_exponential.inl b/external/glm/glm/detail/func_exponential.inl deleted file mode 100644 index 2040d41f..00000000 --- a/external/glm/glm/detail/func_exponential.inl +++ /dev/null @@ -1,152 +0,0 @@ -/// @ref core -/// @file glm/detail/func_exponential.inl - -#include "../vector_relational.hpp" -#include "_vectorize.hpp" -#include -#include -#include - -namespace glm{ -namespace detail -{ -# if GLM_HAS_CXX11_STL - using std::log2; -# else - template - genType log2(genType Value) - { - return std::log(Value) * static_cast(1.4426950408889634073599246810019); - } -# endif - - template - struct compute_log2 - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'log2' only accept floating-point inputs. Include for integer inputs."); - - return detail::functor1::call(log2, v); - } - }; - - template - struct compute_sqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::sqrt, x); - } - }; - - template - struct compute_inversesqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return static_cast(1) / sqrt(x); - } - }; - - template - struct compute_inversesqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - vec tmp(x); - vec xhalf(tmp * 0.5f); - vec* p = reinterpret_cast*>(const_cast*>(&x)); - vec i = vec(0x5f375a86) - (*p >> vec(1)); - vec* ptmp = reinterpret_cast*>(&i); - tmp = *ptmp; - tmp = tmp * (1.5f - xhalf * tmp * tmp); - return tmp; - } - }; -}//namespace detail - - // pow - using std::pow; - template - GLM_FUNC_QUALIFIER vec pow(vec const& base, vec const& exponent) - { - return detail::functor2::call(pow, base, exponent); - } - - // exp - using std::exp; - template - GLM_FUNC_QUALIFIER vec exp(vec const& x) - { - return detail::functor1::call(exp, x); - } - - // log - using std::log; - template - GLM_FUNC_QUALIFIER vec log(vec const& x) - { - return detail::functor1::call(log, x); - } - -# if GLM_HAS_CXX11_STL - using std::exp2; -# else - //exp2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType exp2(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'exp2' only accept floating-point inputs"); - - return std::exp(static_cast(0.69314718055994530941723212145818) * x); - } -# endif - - template - GLM_FUNC_QUALIFIER vec exp2(vec const& x) - { - return detail::functor1::call(exp2, x); - } - - // log2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType log2(genType x) - { - return log2(vec<1, genType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec log2(vec const& x) - { - return detail::compute_log2::is_iec559, detail::is_aligned::value>::call(x); - } - - // sqrt - using std::sqrt; - template - GLM_FUNC_QUALIFIER vec sqrt(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sqrt' only accept floating-point inputs"); - return detail::compute_sqrt::value>::call(x); - } - - // inversesqrt - template - GLM_FUNC_QUALIFIER genType inversesqrt(genType x) - { - return static_cast(1) / sqrt(x); - } - - template - GLM_FUNC_QUALIFIER vec inversesqrt(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'inversesqrt' only accept floating-point inputs"); - return detail::compute_inversesqrt::value>::call(x); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_exponential_simd.inl" -#endif - diff --git a/external/glm/glm/detail/func_exponential_simd.inl b/external/glm/glm/detail/func_exponential_simd.inl deleted file mode 100644 index fb789517..00000000 --- a/external/glm/glm/detail/func_exponential_simd.inl +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref core -/// @file glm/detail/func_exponential_simd.inl - -#include "../simd/exponential.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_sqrt<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> Result; - Result.data = _mm_sqrt_ps(v.data); - return Result; - } - }; - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - struct compute_sqrt<4, float, aligned_lowp, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& v) - { - vec<4, float, aligned_lowp> Result; - Result.data = glm_vec4_sqrt_lowp(v.data); - return Result; - } - }; -# endif -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/detail/func_geometric.inl b/external/glm/glm/detail/func_geometric.inl deleted file mode 100644 index 9cde28fe..00000000 --- a/external/glm/glm/detail/func_geometric.inl +++ /dev/null @@ -1,243 +0,0 @@ -#include "../exponential.hpp" -#include "../common.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_length - { - GLM_FUNC_QUALIFIER static T call(vec const& v) - { - return sqrt(dot(v, v)); - } - }; - - template - struct compute_distance - { - GLM_FUNC_QUALIFIER static T call(vec const& p0, vec const& p1) - { - return length(p1 - p0); - } - }; - - template - struct compute_dot{}; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<1, T, Q> const& a, vec<1, T, Q> const& b) - { - return a.x * b.x; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& a, vec<2, T, Q> const& b) - { - vec<2, T, Q> tmp(a * b); - return tmp.x + tmp.y; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - vec<3, T, Q> tmp(a * b); - return tmp.x + tmp.y + tmp.z; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> tmp(a * b); - return (tmp.x + tmp.y) + (tmp.z + tmp.w); - } - }; - - template - struct compute_cross - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); - - return vec<3, T, Q>( - x.y * y.z - y.y * x.z, - x.z * y.x - y.z * x.x, - x.x * y.y - y.x * x.y); - } - }; - - template - struct compute_normalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return v * inversesqrt(dot(v, v)); - } - }; - - template - struct compute_faceforward - { - GLM_FUNC_QUALIFIER static vec call(vec const& N, vec const& I, vec const& Nref) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return dot(Nref, I) < static_cast(0) ? N : -N; - } - }; - - template - struct compute_reflect - { - GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N) - { - return I - N * dot(N, I) * static_cast(2); - } - }; - - template - struct compute_refract - { - GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N, T eta) - { - T const dotValue(dot(N, I)); - T const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); - vec const Result = - (k >= static_cast(0)) ? (eta * I - (eta * dotValue + std::sqrt(k)) * N) : vec(0); - return Result; - } - }; -}//namespace detail - - // length - template - GLM_FUNC_QUALIFIER genType length(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); - - return abs(x); - } - - template - GLM_FUNC_QUALIFIER T length(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); - - return detail::compute_length::value>::call(v); - } - - // distance - template - GLM_FUNC_QUALIFIER genType distance(genType const& p0, genType const& p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance' accepts only floating-point inputs"); - - return length(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T distance(vec const& p0, vec const& p1) - { - return detail::compute_distance::value>::call(p0, p1); - } - - // dot - template - GLM_FUNC_QUALIFIER T dot(T x, T y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return x * y; - } - - template - GLM_FUNC_QUALIFIER T dot(vec const& x, vec const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); - } - - // cross - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - return detail::compute_cross::value>::call(x, y); - } -/* - // normalize - template - GLM_FUNC_QUALIFIER genType normalize(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return x < genType(0) ? genType(-1) : genType(1); - } -*/ - template - GLM_FUNC_QUALIFIER vec normalize(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return detail::compute_normalize::value>::call(x); - } - - // faceforward - template - GLM_FUNC_QUALIFIER genType faceforward(genType const& N, genType const& I, genType const& Nref) - { - return dot(Nref, I) < static_cast(0) ? N : -N; - } - - template - GLM_FUNC_QUALIFIER vec faceforward(vec const& N, vec const& I, vec const& Nref) - { - return detail::compute_faceforward::value>::call(N, I, Nref); - } - - // reflect - template - GLM_FUNC_QUALIFIER genType reflect(genType const& I, genType const& N) - { - return I - N * dot(N, I) * genType(2); - } - - template - GLM_FUNC_QUALIFIER vec reflect(vec const& I, vec const& N) - { - return detail::compute_reflect::value>::call(I, N); - } - - // refract - template - GLM_FUNC_QUALIFIER genType refract(genType const& I, genType const& N, genType eta) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); - genType const dotValue(dot(N, I)); - genType const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); - return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast(k >= static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER vec refract(vec const& I, vec const& N, T eta) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); - return detail::compute_refract::value>::call(I, N, eta); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_geometric_simd.inl" -#endif diff --git a/external/glm/glm/detail/func_geometric_simd.inl b/external/glm/glm/detail/func_geometric_simd.inl deleted file mode 100644 index 2076dae0..00000000 --- a/external/glm/glm/detail/func_geometric_simd.inl +++ /dev/null @@ -1,163 +0,0 @@ -/// @ref core -/// @file glm/detail/func_geometric_simd.inl - -#include "../simd/geometric.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_length<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) - { - return _mm_cvtss_f32(glm_vec4_length(v.data)); - } - }; - - template - struct compute_distance<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) - { - return _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data)); - } - }; - - template - struct compute_dot, float, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { - return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); - } - }; - - template - struct compute_cross - { - GLM_FUNC_QUALIFIER static vec<3, float, Q> call(vec<3, float, Q> const& a, vec<3, float, Q> const& b) - { - __m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x); - __m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x); - __m128 const xpd0 = glm_vec4_cross(set0, set1); - - vec<4, float, Q> Result; - Result.data = xpd0; - return vec<3, float, Q>(Result); - } - }; - - template - struct compute_normalize<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_normalize(v.data); - return Result; - } - }; - - template - struct compute_faceforward<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& N, vec<4, float, Q> const& I, vec<4, float, Q> const& Nref) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_faceforward(N.data, I.data, Nref.data); - return Result; - } - }; - - template - struct compute_reflect<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_reflect(I.data, N.data); - return Result; - } - }; - - template - struct compute_refract<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N, float eta) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta)); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#elif GLM_ARCH & GLM_ARCH_NEON_BIT -namespace glm{ -namespace detail -{ - template - struct compute_length<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) - { - return sqrt(compute_dot, float, true>::call(v, v)); - } - }; - - template - struct compute_distance<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) - { - return compute_length<4, float, Q, true>::call(p1 - p0); - } - }; - - - template - struct compute_dot, float, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - float32x4_t v = vmulq_f32(x.data, y.data); - return vaddvq_f32(v); -#else // Armv7a with Neon - float32x4_t p = vmulq_f32(x.data, y.data); - float32x2_t v = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); - v = vpadd_f32(v, v); - return vget_lane_f32(v, 0); -#endif - } - }; - - template - struct compute_normalize<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - float32x4_t p = vmulq_f32(v.data, v.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - p = vpaddq_f32(p, p); - p = vpaddq_f32(p, p); -#else - float32x2_t t = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); - t = vpadd_f32(t, t); - p = vcombine_f32(t, t); -#endif - - float32x4_t vd = vrsqrteq_f32(p); - vec<4, float, Q> Result; - Result.data = vmulq_f32(v.data, vd); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/detail/func_integer.inl b/external/glm/glm/detail/func_integer.inl deleted file mode 100644 index 091e1e0c..00000000 --- a/external/glm/glm/detail/func_integer.inl +++ /dev/null @@ -1,372 +0,0 @@ -/// @ref core - -#include "_vectorize.hpp" -#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) -# include -# pragma intrinsic(_BitScanReverse) -#endif//(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) -#include - -#if !GLM_HAS_EXTENDED_INTEGER_TYPE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic ignored "-Wlong-long" -# endif -# if (GLM_COMPILER & GLM_COMPILER_CLANG) -# pragma clang diagnostic ignored "-Wc++11-long-long" -# endif -#endif - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER T mask(T Bits) - { - return Bits >= static_cast(sizeof(T) * 8) ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); - } - - template - struct compute_bitfieldReverseStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) - { - return v; - } - }; - - template - struct compute_bitfieldReverseStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) - { - return (v & Mask) << Shift | (v & (~Mask)) >> Shift; - } - }; - - template - struct compute_bitfieldBitCountStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) - { - return v; - } - }; - - template - struct compute_bitfieldBitCountStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) - { - return (v & Mask) + ((v >> Shift) & Mask); - } - }; - - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - if(Value == 0) - return -1; - - return glm::bitCount(~Value & (Value - static_cast(1))); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; - -# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; -# endif -# endif//GLM_HAS_BITSCAN_WINDOWS - - template - struct compute_findMSB_step_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, T Shift) - { - return x | (x >> Shift); - } - }; - - template - struct compute_findMSB_step_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, T) - { - return x; - } - }; - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - vec x(v); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 1)); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 2)); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 4)); - x = compute_findMSB_step_vec= 16>::call(x, static_cast( 8)); - x = compute_findMSB_step_vec= 32>::call(x, static_cast(16)); - x = compute_findMSB_step_vec= 64>::call(x, static_cast(32)); - return vec(sizeof(T) * 8 - 1) - glm::bitCount(~x); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(compute_findMSB_32, x); - } - }; - -# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template - GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(compute_findMSB_64, x); - } - }; -# endif -# endif//GLM_HAS_BITSCAN_WINDOWS -}//namespace detail - - // uaddCarry - GLM_FUNC_QUALIFIER uint uaddCarry(uint const& x, uint const& y, uint & Carry) - { - detail::uint64 const Value64(static_cast(x) + static_cast(y)); - detail::uint64 const Max32((static_cast(1) << static_cast(32)) - static_cast(1)); - Carry = Value64 > Max32 ? 1u : 0u; - return static_cast(Value64 % (Max32 + static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER vec uaddCarry(vec const& x, vec const& y, vec& Carry) - { - vec Value64(vec(x) + vec(y)); - vec Max32((static_cast(1) << static_cast(32)) - static_cast(1)); - Carry = mix(vec(0), vec(1), greaterThan(Value64, Max32)); - return vec(Value64 % (Max32 + static_cast(1))); - } - - // usubBorrow - GLM_FUNC_QUALIFIER uint usubBorrow(uint const& x, uint const& y, uint & Borrow) - { - Borrow = x >= y ? static_cast(0) : static_cast(1); - if(y >= x) - return y - x; - else - return static_cast((static_cast(1) << static_cast(32)) + (static_cast(y) - static_cast(x))); - } - - template - GLM_FUNC_QUALIFIER vec usubBorrow(vec const& x, vec const& y, vec& Borrow) - { - Borrow = mix(vec(1), vec(0), greaterThanEqual(x, y)); - vec const YgeX(y - x); - vec const XgeY(vec((static_cast(1) << static_cast(32)) + (vec(y) - vec(x)))); - return mix(XgeY, YgeX, greaterThanEqual(y, x)); - } - - // umulExtended - GLM_FUNC_QUALIFIER void umulExtended(uint const& x, uint const& y, uint & msb, uint & lsb) - { - detail::uint64 Value64 = static_cast(x) * static_cast(y); - msb = static_cast(Value64 >> static_cast(32)); - lsb = static_cast(Value64); - } - - template - GLM_FUNC_QUALIFIER void umulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) - { - vec Value64(vec(x) * vec(y)); - msb = vec(Value64 >> static_cast(32)); - lsb = vec(Value64); - } - - // imulExtended - GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int& msb, int& lsb) - { - detail::int64 Value64 = static_cast(x) * static_cast(y); - msb = static_cast(Value64 >> static_cast(32)); - lsb = static_cast(Value64); - } - - template - GLM_FUNC_QUALIFIER void imulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) - { - vec Value64(vec(x) * vec(y)); - lsb = vec(Value64 & static_cast(0xFFFFFFFF)); - msb = vec((Value64 >> static_cast(32)) & static_cast(0xFFFFFFFF)); - } - - // bitfieldExtract - template - GLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits) - { - return bitfieldExtract(vec<1, genIUType>(Value), Offset, Bits).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldExtract(vec const& Value, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldExtract' only accept integer inputs"); - - return (Value >> static_cast(Offset)) & static_cast(detail::mask(Bits)); - } - - // bitfieldInsert - template - GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); - - return bitfieldInsert(vec<1, genIUType>(Base), vec<1, genIUType>(Insert), Offset, Bits).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldInsert(vec const& Base, vec const& Insert, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); - - T const Mask = static_cast(detail::mask(Bits) << Offset); - return (Base & ~Mask) | ((Insert << static_cast(Offset)) & Mask); - } - - // bitfieldReverse - template - GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); - - return bitfieldReverse(glm::vec<1, genIUType, glm::defaultp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldReverse(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); - - vec x(v); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 2>::call(x, static_cast(0x5555555555555555ull), static_cast( 1)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 4>::call(x, static_cast(0x3333333333333333ull), static_cast( 2)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 8>::call(x, static_cast(0x0F0F0F0F0F0F0F0Full), static_cast( 4)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 16>::call(x, static_cast(0x00FF00FF00FF00FFull), static_cast( 8)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 32>::call(x, static_cast(0x0000FFFF0000FFFFull), static_cast(16)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 64>::call(x, static_cast(0x00000000FFFFFFFFull), static_cast(32)); - return x; - } - - // bitCount - template - GLM_FUNC_QUALIFIER int bitCount(genIUType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); - - return bitCount(glm::vec<1, genIUType, glm::defaultp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec bitCount(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable : 4310) //cast truncates constant value -# endif - - vec::type, Q> x(*reinterpret_cast::type, Q> const *>(&v)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned::type(0x5555555555555555ull), typename detail::make_unsigned::type( 1)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned::type(0x3333333333333333ull), typename detail::make_unsigned::type( 2)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned::type( 4)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned::type( 8)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned::type(16)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned::type(0x00000000FFFFFFFFull), typename detail::make_unsigned::type(32)); - return vec(x); - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif - } - - // findLSB - template - GLM_FUNC_QUALIFIER int findLSB(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - - return detail::compute_findLSB::call(Value); - } - - template - GLM_FUNC_QUALIFIER vec findLSB(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - - return detail::functor1::call(findLSB, x); - } - - // findMSB - template - GLM_FUNC_QUALIFIER int findMSB(genIUType v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - - return findMSB(vec<1, genIUType>(v)).x; - } - - template - GLM_FUNC_QUALIFIER vec findMSB(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - - return detail::compute_findMSB_vec::call(v); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_integer_simd.inl" -#endif - diff --git a/external/glm/glm/detail/func_integer_simd.inl b/external/glm/glm/detail/func_integer_simd.inl deleted file mode 100644 index 8be6c9ce..00000000 --- a/external/glm/glm/detail/func_integer_simd.inl +++ /dev/null @@ -1,65 +0,0 @@ -#include "../simd/integer.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_bitfieldReverseStep<4, uint, Q, true, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) - { - __m128i const set0 = v.data; - - __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); - __m128i const and1 = _mm_and_si128(set0, set1); - __m128i const sft1 = _mm_slli_epi32(and1, Shift); - - __m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1)); - __m128i const and2 = _mm_and_si128(set0, set2); - __m128i const sft2 = _mm_srai_epi32(and2, Shift); - - __m128i const or0 = _mm_or_si128(sft1, sft2); - - return or0; - } - }; - - template - struct compute_bitfieldBitCountStep<4, uint, Q, true, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) - { - __m128i const set0 = v.data; - - __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); - __m128i const and0 = _mm_and_si128(set0, set1); - __m128i const sft0 = _mm_slli_epi32(set0, Shift); - __m128i const and1 = _mm_and_si128(sft0, set1); - __m128i const add0 = _mm_add_epi32(and0, and1); - - return add0; - } - }; -}//namespace detail - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template<> - GLM_FUNC_QUALIFIER int bitCount(uint x) - { - return _mm_popcnt_u32(x); - } - -# if(GLM_MODEL == GLM_MODEL_64) - template<> - GLM_FUNC_QUALIFIER int bitCount(detail::uint64 x) - { - return static_cast(_mm_popcnt_u64(x)); - } -# endif//GLM_MODEL -# endif//GLM_ARCH - -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/detail/func_matrix.inl b/external/glm/glm/detail/func_matrix.inl deleted file mode 100644 index d980c6d3..00000000 --- a/external/glm/glm/detail/func_matrix.inl +++ /dev/null @@ -1,398 +0,0 @@ -#include "../geometric.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_matrixCompMult - { - GLM_FUNC_QUALIFIER static mat call(mat const& x, mat const& y) - { - mat Result; - for(length_t i = 0; i < Result.length(); ++i) - Result[i] = x[i] * y[i]; - return Result; - } - }; - - template - struct compute_transpose{}; - - template - struct compute_transpose<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) - { - mat<2, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - return Result; - } - }; - - template - struct compute_transpose<2, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 2, T, Q> call(mat<2, 3, T, Q> const& m) - { - mat<3,2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - return Result; - } - }; - - template - struct compute_transpose<2, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 2, T, Q> call(mat<2, 4, T, Q> const& m) - { - mat<4, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - return Result; - } - }; - - template - struct compute_transpose<3, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 3, T, Q> call(mat<3, 2, T, Q> const& m) - { - mat<2, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - return Result; - } - }; - - template - struct compute_transpose<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) - { - mat<3, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - return Result; - } - }; - - template - struct compute_transpose<3, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 3, T, Q> call(mat<3, 4, T, Q> const& m) - { - mat<4, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - return Result; - } - }; - - template - struct compute_transpose<4, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 4, T, Q> call(mat<4, 2, T, Q> const& m) - { - mat<2, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - return Result; - } - }; - - template - struct compute_transpose<4, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 4, T, Q> call(mat<4, 3, T, Q> const& m) - { - mat<3, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - return Result; - } - }; - - template - struct compute_transpose<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) - { - mat<4, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - Result[3][3] = m[3][3]; - return Result; - } - }; - - template - struct compute_determinant{}; - - template - struct compute_determinant<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<2, 2, T, Q> const& m) - { - return m[0][0] * m[1][1] - m[1][0] * m[0][1]; - } - }; - - template - struct compute_determinant<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<3, 3, T, Q> const& m) - { - return - + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - } - }; - - template - struct compute_determinant<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<4, 4, T, Q> const& m) - { - T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - vec<4, T, Q> DetCof( - + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - return - m[0][0] * DetCof[0] + m[0][1] * DetCof[1] + - m[0][2] * DetCof[2] + m[0][3] * DetCof[3]; - } - }; - - template - struct compute_inverse{}; - - template - struct compute_inverse<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) - { - T OneOverDeterminant = static_cast(1) / ( - + m[0][0] * m[1][1] - - m[1][0] * m[0][1]); - - mat<2, 2, T, Q> Inverse( - + m[1][1] * OneOverDeterminant, - - m[0][1] * OneOverDeterminant, - - m[1][0] * OneOverDeterminant, - + m[0][0] * OneOverDeterminant); - - return Inverse; - } - }; - - template - struct compute_inverse<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) - { - T OneOverDeterminant = static_cast(1) / ( - + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2])); - - mat<3, 3, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant; - Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant; - Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant; - Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant; - Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant; - Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant; - Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant; - Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant; - Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant; - - return Inverse; - } - }; - - template - struct compute_inverse<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) - { - T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - vec<4, T, Q> Fac0(Coef00, Coef00, Coef02, Coef03); - vec<4, T, Q> Fac1(Coef04, Coef04, Coef06, Coef07); - vec<4, T, Q> Fac2(Coef08, Coef08, Coef10, Coef11); - vec<4, T, Q> Fac3(Coef12, Coef12, Coef14, Coef15); - vec<4, T, Q> Fac4(Coef16, Coef16, Coef18, Coef19); - vec<4, T, Q> Fac5(Coef20, Coef20, Coef22, Coef23); - - vec<4, T, Q> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); - vec<4, T, Q> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); - vec<4, T, Q> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); - vec<4, T, Q> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); - - vec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); - vec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); - vec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); - vec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); - - vec<4, T, Q> SignA(+1, -1, +1, -1); - vec<4, T, Q> SignB(-1, +1, -1, +1); - mat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB); - - vec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); - - vec<4, T, Q> Dot0(m[0] * Row0); - T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w); - - T OneOverDeterminant = static_cast(1) / Dot1; - - return Inverse * OneOverDeterminant; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER mat matrixCompMult(mat const& x, mat const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'matrixCompMult' only accept floating-point inputs"); - return detail::compute_matrixCompMult::value>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'outerProduct' only accept floating-point inputs"); - - typename detail::outerProduct_trait::type m; - for(length_t i = 0; i < m.length(); ++i) - m[i] = c * r[i]; - return m; - } - - template - GLM_FUNC_QUALIFIER typename mat::transpose_type transpose(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'transpose' only accept floating-point inputs"); - return detail::compute_transpose::value>::call(m); - } - - template - GLM_FUNC_QUALIFIER T determinant(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'determinant' only accept floating-point inputs"); - return detail::compute_determinant::value>::call(m); - } - - template - GLM_FUNC_QUALIFIER mat inverse(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'inverse' only accept floating-point inputs"); - return detail::compute_inverse::value>::call(m); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_matrix_simd.inl" -#endif - diff --git a/external/glm/glm/detail/func_matrix_simd.inl b/external/glm/glm/detail/func_matrix_simd.inl deleted file mode 100644 index f67ac66a..00000000 --- a/external/glm/glm/detail/func_matrix_simd.inl +++ /dev/null @@ -1,249 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#include "type_mat4x4.hpp" -#include "../geometric.hpp" -#include "../simd/matrix.h" -#include - -namespace glm{ -namespace detail -{ -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template - struct compute_matrixCompMult<4, 4, float, Q, true> - { - GLM_STATIC_ASSERT(detail::is_aligned::value, "Specialization requires aligned"); - - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& x, mat<4, 4, float, Q> const& y) - { - mat<4, 4, float, Q> Result; - glm_mat4_matrixCompMult( - *static_cast(&x[0].data), - *static_cast(&y[0].data), - *static_cast(&Result[0].data)); - return Result; - } - }; -# endif - - template - struct compute_transpose<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - mat<4, 4, float, Q> Result; - glm_mat4_transpose(&m[0].data, &Result[0].data); - return Result; - } - }; - - template - struct compute_determinant<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(mat<4, 4, float, Q> const& m) - { - return _mm_cvtss_f32(glm_mat4_determinant(&m[0].data)); - } - }; - - template - struct compute_inverse<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - mat<4, 4, float, Q> Result; - glm_mat4_inverse(&m[0].data, &Result[0].data); - return Result; - } - }; -}//namespace detail - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_lowp> outerProduct<4, 4, float, aligned_lowp>(vec<4, float, aligned_lowp> const& c, vec<4, float, aligned_lowp> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_lowp> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } - - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_mediump> outerProduct<4, 4, float, aligned_mediump>(vec<4, float, aligned_mediump> const& c, vec<4, float, aligned_mediump> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_mediump> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } - - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_highp> outerProduct<4, 4, float, aligned_highp>(vec<4, float, aligned_highp> const& c, vec<4, float, aligned_highp> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_highp> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } -# endif -}//namespace glm - -#elif GLM_ARCH & GLM_ARCH_NEON_BIT - -namespace glm { -#if GLM_LANG & GLM_LANG_CXX11_FLAG - template - GLM_FUNC_QUALIFIER - typename std::enable_if::value, mat<4, 4, float, Q>>::type - operator*(mat<4, 4, float, Q> const & m1, mat<4, 4, float, Q> const & m2) - { - auto MulRow = [&](int l) { - float32x4_t const SrcA = m2[l].data; - - float32x4_t r = neon::mul_lane(m1[0].data, SrcA, 0); - r = neon::madd_lane(r, m1[1].data, SrcA, 1); - r = neon::madd_lane(r, m1[2].data, SrcA, 2); - r = neon::madd_lane(r, m1[3].data, SrcA, 3); - - return r; - }; - - mat<4, 4, float, aligned_highp> Result; - Result[0].data = MulRow(0); - Result[1].data = MulRow(1); - Result[2].data = MulRow(2); - Result[3].data = MulRow(3); - - return Result; - } -#endif // CXX11 - - template - struct detail::compute_inverse<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - float32x4_t const& m0 = m[0].data; - float32x4_t const& m1 = m[1].data; - float32x4_t const& m2 = m[2].data; - float32x4_t const& m3 = m[3].data; - - // m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - float32x4_t Fac0; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac0 = w0 * w1 - w2 * w3; - } - - // m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - float32x4_t Fac1; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac1 = w0 * w1 - w2 * w3; - } - - // m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - float32x4_t Fac2; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - Fac2 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - float32x4_t Fac3; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac3 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - float32x4_t Fac4; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - Fac4 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - float32x4_t Fac5; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - Fac5 = w0 * w1 - w2 * w3; - } - - float32x4_t Vec0 = neon::copy_lane(neon::dupq_lane(m0, 0), 0, m1, 0); // (m[1][0], m[0][0], m[0][0], m[0][0]); - float32x4_t Vec1 = neon::copy_lane(neon::dupq_lane(m0, 1), 0, m1, 1); // (m[1][1], m[0][1], m[0][1], m[0][1]); - float32x4_t Vec2 = neon::copy_lane(neon::dupq_lane(m0, 2), 0, m1, 2); // (m[1][2], m[0][2], m[0][2], m[0][2]); - float32x4_t Vec3 = neon::copy_lane(neon::dupq_lane(m0, 3), 0, m1, 3); // (m[1][3], m[0][3], m[0][3], m[0][3]); - - float32x4_t Inv0 = Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2; - float32x4_t Inv1 = Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4; - float32x4_t Inv2 = Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5; - float32x4_t Inv3 = Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5; - - float32x4_t r0 = float32x4_t{-1, +1, -1, +1} * Inv0; - float32x4_t r1 = float32x4_t{+1, -1, +1, -1} * Inv1; - float32x4_t r2 = float32x4_t{-1, +1, -1, +1} * Inv2; - float32x4_t r3 = float32x4_t{+1, -1, +1, -1} * Inv3; - - float32x4_t det = neon::mul_lane(r0, m0, 0); - det = neon::madd_lane(det, r1, m0, 1); - det = neon::madd_lane(det, r2, m0, 2); - det = neon::madd_lane(det, r3, m0, 3); - - float32x4_t rdet = vdupq_n_f32(1 / vgetq_lane_f32(det, 0)); - - mat<4, 4, float, Q> r; - r[0].data = vmulq_f32(r0, rdet); - r[1].data = vmulq_f32(r1, rdet); - r[2].data = vmulq_f32(r2, rdet); - r[3].data = vmulq_f32(r3, rdet); - return r; - } - }; -}//namespace glm -#endif diff --git a/external/glm/glm/detail/func_packing.inl b/external/glm/glm/detail/func_packing.inl deleted file mode 100644 index 234b093c..00000000 --- a/external/glm/glm/detail/func_packing.inl +++ /dev/null @@ -1,189 +0,0 @@ -/// @ref core -/// @file glm/detail/func_packing.inl - -#include "../common.hpp" -#include "type_half.hpp" - -namespace glm -{ - GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v) - { - union - { - unsigned short in[2]; - uint out; - } u; - - vec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p) - { - union - { - uint in; - unsigned short out[2]; - } u; - - u.in = p; - - return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f; - } - - GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v) - { - union - { - signed short in[2]; - uint out; - } u; - - vec<2, short, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 32767.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p) - { - union - { - uint in; - signed short out[2]; - } u; - - u.in = p; - - return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v) - { - union - { - unsigned char in[4]; - uint out; - } u; - - vec<4, unsigned char, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - u.in[2] = result[2]; - u.in[3] = result[3]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p) - { - union - { - uint in; - unsigned char out[4]; - } u; - - u.in = p; - - return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f; - } - - GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v) - { - union - { - signed char in[4]; - uint out; - } u; - - vec<4, signed char, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 127.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - u.in[2] = result[2]; - u.in[3] = result[3]; - - return u.out; - } - - GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p) - { - union - { - uint in; - signed char out[4]; - } u; - - u.in = p; - - return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v) - { - union - { - uint in[2]; - double out; - } u; - - u.in[0] = v[0]; - u.in[1] = v[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v) - { - union - { - double in; - uint out[2]; - } u; - - u.in = v; - - return uvec2(u.out[0], u.out[1]); - } - - GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v) - { - union - { - signed short in[2]; - uint out; - } u; - - u.in[0] = detail::toFloat16(v.x); - u.in[1] = detail::toFloat16(v.y); - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v) - { - union - { - uint in; - signed short out[2]; - } u; - - u.in = v; - - return vec2( - detail::toFloat32(u.out[0]), - detail::toFloat32(u.out[1])); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_packing_simd.inl" -#endif - diff --git a/external/glm/glm/detail/func_packing_simd.inl b/external/glm/glm/detail/func_packing_simd.inl deleted file mode 100644 index fd0fe8b7..00000000 --- a/external/glm/glm/detail/func_packing_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -namespace glm{ -namespace detail -{ - -}//namespace detail -}//namespace glm diff --git a/external/glm/glm/detail/func_trigonometric.inl b/external/glm/glm/detail/func_trigonometric.inl deleted file mode 100644 index e129dcea..00000000 --- a/external/glm/glm/detail/func_trigonometric.inl +++ /dev/null @@ -1,197 +0,0 @@ -#include "_vectorize.hpp" -#include -#include - -namespace glm -{ - // radians - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'radians' only accept floating-point input"); - - return degrees * static_cast(0.01745329251994329576923690768489); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec radians(vec const& v) - { - return detail::functor1::call(radians, v); - } - - // degrees - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'degrees' only accept floating-point input"); - - return radians * static_cast(57.295779513082320876798154814105); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec degrees(vec const& v) - { - return detail::functor1::call(degrees, v); - } - - // sin - using ::std::sin; - - template - GLM_FUNC_QUALIFIER vec sin(vec const& v) - { - return detail::functor1::call(sin, v); - } - - // cos - using std::cos; - - template - GLM_FUNC_QUALIFIER vec cos(vec const& v) - { - return detail::functor1::call(cos, v); - } - - // tan - using std::tan; - - template - GLM_FUNC_QUALIFIER vec tan(vec const& v) - { - return detail::functor1::call(tan, v); - } - - // asin - using std::asin; - - template - GLM_FUNC_QUALIFIER vec asin(vec const& v) - { - return detail::functor1::call(asin, v); - } - - // acos - using std::acos; - - template - GLM_FUNC_QUALIFIER vec acos(vec const& v) - { - return detail::functor1::call(acos, v); - } - - // atan - template - GLM_FUNC_QUALIFIER genType atan(genType y, genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atan' only accept floating-point input"); - - return ::std::atan2(y, x); - } - - template - GLM_FUNC_QUALIFIER vec atan(vec const& a, vec const& b) - { - return detail::functor2::call(::std::atan2, a, b); - } - - using std::atan; - - template - GLM_FUNC_QUALIFIER vec atan(vec const& v) - { - return detail::functor1::call(atan, v); - } - - // sinh - using std::sinh; - - template - GLM_FUNC_QUALIFIER vec sinh(vec const& v) - { - return detail::functor1::call(sinh, v); - } - - // cosh - using std::cosh; - - template - GLM_FUNC_QUALIFIER vec cosh(vec const& v) - { - return detail::functor1::call(cosh, v); - } - - // tanh - using std::tanh; - - template - GLM_FUNC_QUALIFIER vec tanh(vec const& v) - { - return detail::functor1::call(tanh, v); - } - - // asinh -# if GLM_HAS_CXX11_STL - using std::asinh; -# else - template - GLM_FUNC_QUALIFIER genType asinh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asinh' only accept floating-point input"); - - return (x < static_cast(0) ? static_cast(-1) : (x > static_cast(0) ? static_cast(1) : static_cast(0))) * log(std::abs(x) + sqrt(static_cast(1) + x * x)); - } -# endif - - template - GLM_FUNC_QUALIFIER vec asinh(vec const& v) - { - return detail::functor1::call(asinh, v); - } - - // acosh -# if GLM_HAS_CXX11_STL - using std::acosh; -# else - template - GLM_FUNC_QUALIFIER genType acosh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acosh' only accept floating-point input"); - - if(x < static_cast(1)) - return static_cast(0); - return log(x + sqrt(x * x - static_cast(1))); - } -# endif - - template - GLM_FUNC_QUALIFIER vec acosh(vec const& v) - { - return detail::functor1::call(acosh, v); - } - - // atanh -# if GLM_HAS_CXX11_STL - using std::atanh; -# else - template - GLM_FUNC_QUALIFIER genType atanh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atanh' only accept floating-point input"); - - if(std::abs(x) >= static_cast(1)) - return 0; - return static_cast(0.5) * log((static_cast(1) + x) / (static_cast(1) - x)); - } -# endif - - template - GLM_FUNC_QUALIFIER vec atanh(vec const& v) - { - return detail::functor1::call(atanh, v); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_trigonometric_simd.inl" -#endif - diff --git a/external/glm/glm/detail/func_trigonometric_simd.inl b/external/glm/glm/detail/func_trigonometric_simd.inl deleted file mode 100644 index e69de29b..00000000 diff --git a/external/glm/glm/detail/func_vector_relational.inl b/external/glm/glm/detail/func_vector_relational.inl deleted file mode 100644 index 80c9e87f..00000000 --- a/external/glm/glm/detail/func_vector_relational.inl +++ /dev/null @@ -1,87 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] < y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] <= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] > y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] >= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] == y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] != y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool any(vec const& v) - { - bool Result = false; - for(length_t i = 0; i < L; ++i) - Result = Result || v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool all(vec const& v) - { - bool Result = true; - for(length_t i = 0; i < L; ++i) - Result = Result && v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec not_(vec const& v) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = !v[i]; - return Result; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_vector_relational_simd.inl" -#endif diff --git a/external/glm/glm/detail/func_vector_relational_simd.inl b/external/glm/glm/detail/func_vector_relational_simd.inl deleted file mode 100644 index fd0fe8b7..00000000 --- a/external/glm/glm/detail/func_vector_relational_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -namespace glm{ -namespace detail -{ - -}//namespace detail -}//namespace glm diff --git a/external/glm/glm/detail/glm.cpp b/external/glm/glm/detail/glm.cpp deleted file mode 100644 index e0755bd6..00000000 --- a/external/glm/glm/detail/glm.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/// @ref core -/// @file glm/glm.cpp - -#ifndef GLM_ENABLE_EXPERIMENTAL -#define GLM_ENABLE_EXPERIMENTAL -#endif -#include -#include -#include -#include -#include -#include - -namespace glm -{ -// tvec1 type explicit instantiation -template struct vec<1, uint8, lowp>; -template struct vec<1, uint16, lowp>; -template struct vec<1, uint32, lowp>; -template struct vec<1, uint64, lowp>; -template struct vec<1, int8, lowp>; -template struct vec<1, int16, lowp>; -template struct vec<1, int32, lowp>; -template struct vec<1, int64, lowp>; -template struct vec<1, float32, lowp>; -template struct vec<1, float64, lowp>; - -template struct vec<1, uint8, mediump>; -template struct vec<1, uint16, mediump>; -template struct vec<1, uint32, mediump>; -template struct vec<1, uint64, mediump>; -template struct vec<1, int8, mediump>; -template struct vec<1, int16, mediump>; -template struct vec<1, int32, mediump>; -template struct vec<1, int64, mediump>; -template struct vec<1, float32, mediump>; -template struct vec<1, float64, mediump>; - -template struct vec<1, uint8, highp>; -template struct vec<1, uint16, highp>; -template struct vec<1, uint32, highp>; -template struct vec<1, uint64, highp>; -template struct vec<1, int8, highp>; -template struct vec<1, int16, highp>; -template struct vec<1, int32, highp>; -template struct vec<1, int64, highp>; -template struct vec<1, float32, highp>; -template struct vec<1, float64, highp>; - -// tvec2 type explicit instantiation -template struct vec<2, uint8, lowp>; -template struct vec<2, uint16, lowp>; -template struct vec<2, uint32, lowp>; -template struct vec<2, uint64, lowp>; -template struct vec<2, int8, lowp>; -template struct vec<2, int16, lowp>; -template struct vec<2, int32, lowp>; -template struct vec<2, int64, lowp>; -template struct vec<2, float32, lowp>; -template struct vec<2, float64, lowp>; - -template struct vec<2, uint8, mediump>; -template struct vec<2, uint16, mediump>; -template struct vec<2, uint32, mediump>; -template struct vec<2, uint64, mediump>; -template struct vec<2, int8, mediump>; -template struct vec<2, int16, mediump>; -template struct vec<2, int32, mediump>; -template struct vec<2, int64, mediump>; -template struct vec<2, float32, mediump>; -template struct vec<2, float64, mediump>; - -template struct vec<2, uint8, highp>; -template struct vec<2, uint16, highp>; -template struct vec<2, uint32, highp>; -template struct vec<2, uint64, highp>; -template struct vec<2, int8, highp>; -template struct vec<2, int16, highp>; -template struct vec<2, int32, highp>; -template struct vec<2, int64, highp>; -template struct vec<2, float32, highp>; -template struct vec<2, float64, highp>; - -// tvec3 type explicit instantiation -template struct vec<3, uint8, lowp>; -template struct vec<3, uint16, lowp>; -template struct vec<3, uint32, lowp>; -template struct vec<3, uint64, lowp>; -template struct vec<3, int8, lowp>; -template struct vec<3, int16, lowp>; -template struct vec<3, int32, lowp>; -template struct vec<3, int64, lowp>; -template struct vec<3, float32, lowp>; -template struct vec<3, float64, lowp>; - -template struct vec<3, uint8, mediump>; -template struct vec<3, uint16, mediump>; -template struct vec<3, uint32, mediump>; -template struct vec<3, uint64, mediump>; -template struct vec<3, int8, mediump>; -template struct vec<3, int16, mediump>; -template struct vec<3, int32, mediump>; -template struct vec<3, int64, mediump>; -template struct vec<3, float32, mediump>; -template struct vec<3, float64, mediump>; - -template struct vec<3, uint8, highp>; -template struct vec<3, uint16, highp>; -template struct vec<3, uint32, highp>; -template struct vec<3, uint64, highp>; -template struct vec<3, int8, highp>; -template struct vec<3, int16, highp>; -template struct vec<3, int32, highp>; -template struct vec<3, int64, highp>; -template struct vec<3, float32, highp>; -template struct vec<3, float64, highp>; - -// tvec4 type explicit instantiation -template struct vec<4, uint8, lowp>; -template struct vec<4, uint16, lowp>; -template struct vec<4, uint32, lowp>; -template struct vec<4, uint64, lowp>; -template struct vec<4, int8, lowp>; -template struct vec<4, int16, lowp>; -template struct vec<4, int32, lowp>; -template struct vec<4, int64, lowp>; -template struct vec<4, float32, lowp>; -template struct vec<4, float64, lowp>; - -template struct vec<4, uint8, mediump>; -template struct vec<4, uint16, mediump>; -template struct vec<4, uint32, mediump>; -template struct vec<4, uint64, mediump>; -template struct vec<4, int8, mediump>; -template struct vec<4, int16, mediump>; -template struct vec<4, int32, mediump>; -template struct vec<4, int64, mediump>; -template struct vec<4, float32, mediump>; -template struct vec<4, float64, mediump>; - -template struct vec<4, uint8, highp>; -template struct vec<4, uint16, highp>; -template struct vec<4, uint32, highp>; -template struct vec<4, uint64, highp>; -template struct vec<4, int8, highp>; -template struct vec<4, int16, highp>; -template struct vec<4, int32, highp>; -template struct vec<4, int64, highp>; -template struct vec<4, float32, highp>; -template struct vec<4, float64, highp>; - -// tmat2x2 type explicit instantiation -template struct mat<2, 2, float32, lowp>; -template struct mat<2, 2, float64, lowp>; - -template struct mat<2, 2, float32, mediump>; -template struct mat<2, 2, float64, mediump>; - -template struct mat<2, 2, float32, highp>; -template struct mat<2, 2, float64, highp>; - -// tmat2x3 type explicit instantiation -template struct mat<2, 3, float32, lowp>; -template struct mat<2, 3, float64, lowp>; - -template struct mat<2, 3, float32, mediump>; -template struct mat<2, 3, float64, mediump>; - -template struct mat<2, 3, float32, highp>; -template struct mat<2, 3, float64, highp>; - -// tmat2x4 type explicit instantiation -template struct mat<2, 4, float32, lowp>; -template struct mat<2, 4, float64, lowp>; - -template struct mat<2, 4, float32, mediump>; -template struct mat<2, 4, float64, mediump>; - -template struct mat<2, 4, float32, highp>; -template struct mat<2, 4, float64, highp>; - -// tmat3x2 type explicit instantiation -template struct mat<3, 2, float32, lowp>; -template struct mat<3, 2, float64, lowp>; - -template struct mat<3, 2, float32, mediump>; -template struct mat<3, 2, float64, mediump>; - -template struct mat<3, 2, float32, highp>; -template struct mat<3, 2, float64, highp>; - -// tmat3x3 type explicit instantiation -template struct mat<3, 3, float32, lowp>; -template struct mat<3, 3, float64, lowp>; - -template struct mat<3, 3, float32, mediump>; -template struct mat<3, 3, float64, mediump>; - -template struct mat<3, 3, float32, highp>; -template struct mat<3, 3, float64, highp>; - -// tmat3x4 type explicit instantiation -template struct mat<3, 4, float32, lowp>; -template struct mat<3, 4, float64, lowp>; - -template struct mat<3, 4, float32, mediump>; -template struct mat<3, 4, float64, mediump>; - -template struct mat<3, 4, float32, highp>; -template struct mat<3, 4, float64, highp>; - -// tmat4x2 type explicit instantiation -template struct mat<4, 2, float32, lowp>; -template struct mat<4, 2, float64, lowp>; - -template struct mat<4, 2, float32, mediump>; -template struct mat<4, 2, float64, mediump>; - -template struct mat<4, 2, float32, highp>; -template struct mat<4, 2, float64, highp>; - -// tmat4x3 type explicit instantiation -template struct mat<4, 3, float32, lowp>; -template struct mat<4, 3, float64, lowp>; - -template struct mat<4, 3, float32, mediump>; -template struct mat<4, 3, float64, mediump>; - -template struct mat<4, 3, float32, highp>; -template struct mat<4, 3, float64, highp>; - -// tmat4x4 type explicit instantiation -template struct mat<4, 4, float32, lowp>; -template struct mat<4, 4, float64, lowp>; - -template struct mat<4, 4, float32, mediump>; -template struct mat<4, 4, float64, mediump>; - -template struct mat<4, 4, float32, highp>; -template struct mat<4, 4, float64, highp>; - -// tquat type explicit instantiation -template struct qua; -template struct qua; - -template struct qua; -template struct qua; - -template struct qua; -template struct qua; - -//tdualquat type explicit instantiation -template struct tdualquat; -template struct tdualquat; - -template struct tdualquat; -template struct tdualquat; - -template struct tdualquat; -template struct tdualquat; - -}//namespace glm - diff --git a/external/glm/glm/detail/qualifier.hpp b/external/glm/glm/detail/qualifier.hpp deleted file mode 100644 index b6c9df0c..00000000 --- a/external/glm/glm/detail/qualifier.hpp +++ /dev/null @@ -1,230 +0,0 @@ -#pragma once - -#include "setup.hpp" - -namespace glm -{ - /// Qualify GLM types in term of alignment (packed, aligned) and precision in term of ULPs (lowp, mediump, highp) - enum qualifier - { - packed_highp, ///< Typed data is tightly packed in memory and operations are executed with high precision in term of ULPs - packed_mediump, ///< Typed data is tightly packed in memory and operations are executed with medium precision in term of ULPs for higher performance - packed_lowp, ///< Typed data is tightly packed in memory and operations are executed with low precision in term of ULPs to maximize performance - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - aligned_highp, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs - aligned_mediump, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs for higher performance - aligned_lowp, // ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance - aligned = aligned_highp, ///< By default aligned qualifier is also high precision -# endif - - highp = packed_highp, ///< By default highp qualifier is also packed - mediump = packed_mediump, ///< By default mediump qualifier is also packed - lowp = packed_lowp, ///< By default lowp qualifier is also packed - packed = packed_highp, ///< By default packed qualifier is also high precision - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE && defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) - defaultp = aligned_highp -# else - defaultp = highp -# endif - }; - - typedef qualifier precision; - - template struct vec; - template struct mat; - template struct qua; - -# if GLM_HAS_TEMPLATE_ALIASES - template using tvec1 = vec<1, T, Q>; - template using tvec2 = vec<2, T, Q>; - template using tvec3 = vec<3, T, Q>; - template using tvec4 = vec<4, T, Q>; - template using tmat2x2 = mat<2, 2, T, Q>; - template using tmat2x3 = mat<2, 3, T, Q>; - template using tmat2x4 = mat<2, 4, T, Q>; - template using tmat3x2 = mat<3, 2, T, Q>; - template using tmat3x3 = mat<3, 3, T, Q>; - template using tmat3x4 = mat<3, 4, T, Q>; - template using tmat4x2 = mat<4, 2, T, Q>; - template using tmat4x3 = mat<4, 3, T, Q>; - template using tmat4x4 = mat<4, 4, T, Q>; - template using tquat = qua; -# endif - -namespace detail -{ - template - struct is_aligned - { - static const bool value = false; - }; - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - struct is_aligned - { - static const bool value = true; - }; - - template<> - struct is_aligned - { - static const bool value = true; - }; - - template<> - struct is_aligned - { - static const bool value = true; - }; -# endif - - template - struct storage - { - typedef struct type { - T data[L]; - } type; - }; - -# if GLM_HAS_ALIGNOF - template - struct storage - { - typedef struct alignas(L * sizeof(T)) type { - T data[L]; - } type; - }; - - template - struct storage<3, T, true> - { - typedef struct alignas(4 * sizeof(T)) type { - T data[4]; - } type; - }; -# endif - -# if GLM_ARCH & GLM_ARCH_SSE2_BIT - template<> - struct storage<4, float, true> - { - typedef glm_f32vec4 type; - }; - - template<> - struct storage<4, int, true> - { - typedef glm_i32vec4 type; - }; - - template<> - struct storage<4, unsigned int, true> - { - typedef glm_u32vec4 type; - }; - - template<> - struct storage<2, double, true> - { - typedef glm_f64vec2 type; - }; - - template<> - struct storage<2, detail::int64, true> - { - typedef glm_i64vec2 type; - }; - - template<> - struct storage<2, detail::uint64, true> - { - typedef glm_u64vec2 type; - }; -# endif - -# if (GLM_ARCH & GLM_ARCH_AVX_BIT) - template<> - struct storage<4, double, true> - { - typedef glm_f64vec4 type; - }; -# endif - -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) - template<> - struct storage<4, detail::int64, true> - { - typedef glm_i64vec4 type; - }; - - template<> - struct storage<4, detail::uint64, true> - { - typedef glm_u64vec4 type; - }; -# endif - -# if GLM_ARCH & GLM_ARCH_NEON_BIT - template<> - struct storage<4, float, true> - { - typedef glm_f32vec4 type; - }; - - template<> - struct storage<4, int, true> - { - typedef glm_i32vec4 type; - }; - - template<> - struct storage<4, unsigned int, true> - { - typedef glm_u32vec4 type; - }; -# endif - - enum genTypeEnum - { - GENTYPE_VEC, - GENTYPE_MAT, - GENTYPE_QUAT - }; - - template - struct genTypeTrait - {}; - - template - struct genTypeTrait > - { - static const genTypeEnum GENTYPE = GENTYPE_MAT; - }; - - template - struct init_gentype - { - }; - - template - struct init_gentype - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() - { - return genType(1, 0, 0, 0); - } - }; - - template - struct init_gentype - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() - { - return genType(1); - } - }; -}//namespace detail -}//namespace glm diff --git a/external/glm/glm/detail/setup.hpp b/external/glm/glm/detail/setup.hpp deleted file mode 100644 index 3c52c10f..00000000 --- a/external/glm/glm/detail/setup.hpp +++ /dev/null @@ -1,1135 +0,0 @@ -#ifndef GLM_SETUP_INCLUDED - -#include -#include - -#define GLM_VERSION_MAJOR 0 -#define GLM_VERSION_MINOR 9 -#define GLM_VERSION_PATCH 9 -#define GLM_VERSION_REVISION 9 -#define GLM_VERSION 999 -#define GLM_VERSION_MESSAGE "GLM: version 0.9.9.9" - -#define GLM_SETUP_INCLUDED GLM_VERSION - -/////////////////////////////////////////////////////////////////////////////////// -// Active states - -#define GLM_DISABLE 0 -#define GLM_ENABLE 1 - -/////////////////////////////////////////////////////////////////////////////////// -// Messages - -#if defined(GLM_FORCE_MESSAGES) -# define GLM_MESSAGES GLM_ENABLE -#else -# define GLM_MESSAGES GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Detect the platform - -#include "../simd/platform.h" - -/////////////////////////////////////////////////////////////////////////////////// -// Build model - -#if defined(_M_ARM64) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__) -# define GLM_MODEL GLM_MODEL_64 -#elif defined(__i386__) || defined(__ppc__) || defined(__ILP32__) || defined(_M_ARM) -# define GLM_MODEL GLM_MODEL_32 -#else -# define GLM_MODEL GLM_MODEL_32 -#endif// - -#if !defined(GLM_MODEL) && GLM_COMPILER != 0 -# error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message." -#endif//GLM_MODEL - -/////////////////////////////////////////////////////////////////////////////////// -// C++ Version - -// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A - -#define GLM_LANG_CXX98_FLAG (1 << 1) -#define GLM_LANG_CXX03_FLAG (1 << 2) -#define GLM_LANG_CXX0X_FLAG (1 << 3) -#define GLM_LANG_CXX11_FLAG (1 << 4) -#define GLM_LANG_CXX14_FLAG (1 << 5) -#define GLM_LANG_CXX17_FLAG (1 << 6) -#define GLM_LANG_CXX2A_FLAG (1 << 7) -#define GLM_LANG_CXXMS_FLAG (1 << 8) -#define GLM_LANG_CXXGNU_FLAG (1 << 9) - -#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG -#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG) -#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG) -#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG) -#define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG) -#define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG) -#define GLM_LANG_CXX2A (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG) -#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG -#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG - -#if (defined(_MSC_EXTENSIONS)) -# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG -#elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)) -# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG -#else -# define GLM_LANG_EXT 0 -#endif - -#if (defined(GLM_FORCE_CXX_UNKNOWN)) -# define GLM_LANG 0 -#elif defined(GLM_FORCE_CXX2A) -# define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX17) -# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX14) -# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX11) -# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX03) -# define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT) -#elif defined(GLM_FORCE_CXX98) -# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) -#else -# if GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG) -# if GLM_COMPILER >= GLM_COMPILER_VC15_7 -# define GLM_LANG_PLATFORM _MSVC_LANG -# elif GLM_COMPILER >= GLM_COMPILER_VC15 -# if _MSVC_LANG > 201402L -# define GLM_LANG_PLATFORM 201402L -# else -# define GLM_LANG_PLATFORM _MSVC_LANG -# endif -# else -# define GLM_LANG_PLATFORM 0 -# endif -# else -# define GLM_LANG_PLATFORM 0 -# endif - -# if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L -# define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) -# elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L -# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) -# elif __cplusplus == 201402L || __cplusplus == 201406L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L -# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) -# elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L -# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) -# elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__) -# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT) -# elif __cplusplus == 199711L -# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) -# else -# define GLM_LANG (0 | GLM_LANG_EXT) -# endif -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Has of C++ features - -// http://clang.llvm.org/cxx_status.html -// http://gcc.gnu.org/projects/cxx0x.html -// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx - -// Android has multiple STLs but C++11 STL detection doesn't always work #284 #564 -#if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED) -# define GLM_HAS_CXX11_STL 0 -#elif GLM_COMPILER & GLM_COMPILER_CLANG -# if (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED)) -# define GLM_HAS_CXX11_STL 1 -# else -# define GLM_HAS_CXX11_STL 0 -# endif -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_CXX11_STL 1 -#else -# define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)))) -#endif - -// N1720 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_STATIC_ASSERT 1 -#else -# define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC)))) -#endif - -// N1988 -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_EXTENDED_INTEGER_TYPE 1 -#else -# define GLM_HAS_EXTENDED_INTEGER_TYPE (\ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG))) -#endif - -// N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_INITIALIZER_LISTS 1 -#else -# define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_UNRESTRICTED_UNIONS 1 -#else -# define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - (GLM_COMPILER & GLM_COMPILER_VC) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA))) -#endif - -// N2346 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_DEFAULTED_FUNCTIONS 1 -#else -# define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - (GLM_COMPILER & GLM_COMPILER_CUDA))) -#endif - -// N2118 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_RVALUE_REFERENCES 1 -#else -# define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1 -#else -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_TEMPLATE_ALIASES 1 -#else -# define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_RANGE_FOR 1 -#else -# define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_ALIGNOF __has_feature(cxx_alignas) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_ALIGNOF 1 -#else -# define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf -// N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html -#if (GLM_ARCH & GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don't support constexpr... -# define GLM_HAS_CONSTEXPR 0 -#elif (GLM_COMPILER & GLM_COMPILER_CLANG) -# define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr) -#elif (GLM_LANG & GLM_LANG_CXX14_FLAG) -# define GLM_HAS_CONSTEXPR 1 -#else -# define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)))) -#endif - -#if GLM_HAS_CONSTEXPR -# define GLM_CONSTEXPR constexpr -#else -# define GLM_CONSTEXPR -#endif - -// -#if GLM_HAS_CONSTEXPR -# if (GLM_COMPILER & GLM_COMPILER_CLANG) -# if __has_feature(cxx_if_constexpr) -# define GLM_HAS_IF_CONSTEXPR 1 -# else -# define GLM_HAS_IF_CONSTEXPR 0 -# endif -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) -# define GLM_HAS_IF_CONSTEXPR 1 -# else -# define GLM_HAS_IF_CONSTEXPR 0 -# endif -#else -# define GLM_HAS_IF_CONSTEXPR 0 -#endif - -#if GLM_HAS_IF_CONSTEXPR -# define GLM_IF_CONSTEXPR if constexpr -#else -# define GLM_IF_CONSTEXPR if -#endif - -// -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_ASSIGNABLE 1 -#else -# define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ - ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49)))) -#endif - -// -#define GLM_HAS_TRIVIAL_QUERIES 0 - -// -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_MAKE_SIGNED 1 -#else -# define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// -#if defined(GLM_FORCE_INTRINSICS) -# define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT)))) -#else -# define GLM_HAS_BITSCAN_WINDOWS 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// OpenMP -#ifdef _OPENMP -# if GLM_COMPILER & GLM_COMPILER_GCC -# if GLM_COMPILER >= GLM_COMPILER_GCC61 -# define GLM_HAS_OPENMP 45 -# elif GLM_COMPILER >= GLM_COMPILER_GCC49 -# define GLM_HAS_OPENMP 40 -# elif GLM_COMPILER >= GLM_COMPILER_GCC47 -# define GLM_HAS_OPENMP 31 -# else -# define GLM_HAS_OPENMP 0 -# endif -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# if GLM_COMPILER >= GLM_COMPILER_CLANG38 -# define GLM_HAS_OPENMP 31 -# else -# define GLM_HAS_OPENMP 0 -# endif -# elif GLM_COMPILER & GLM_COMPILER_VC -# define GLM_HAS_OPENMP 20 -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# if GLM_COMPILER >= GLM_COMPILER_INTEL16 -# define GLM_HAS_OPENMP 40 -# else -# define GLM_HAS_OPENMP 0 -# endif -# else -# define GLM_HAS_OPENMP 0 -# endif -#else -# define GLM_HAS_OPENMP 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// nullptr - -#if GLM_LANG & GLM_LANG_CXX0X_FLAG -# define GLM_CONFIG_NULLPTR GLM_ENABLE -#else -# define GLM_CONFIG_NULLPTR GLM_DISABLE -#endif - -#if GLM_CONFIG_NULLPTR == GLM_ENABLE -# define GLM_NULLPTR nullptr -#else -# define GLM_NULLPTR 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Static assert - -#if GLM_HAS_STATIC_ASSERT -# define GLM_STATIC_ASSERT(x, message) static_assert(x, message) -#elif GLM_COMPILER & GLM_COMPILER_VC -# define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1] -#else -# define GLM_STATIC_ASSERT(x, message) assert(x) -#endif//GLM_LANG - -/////////////////////////////////////////////////////////////////////////////////// -// Qualifiers - -#if GLM_COMPILER & GLM_COMPILER_CUDA -# define GLM_CUDA_FUNC_DEF __device__ __host__ -# define GLM_CUDA_FUNC_DECL __device__ __host__ -#else -# define GLM_CUDA_FUNC_DEF -# define GLM_CUDA_FUNC_DECL -#endif - -#if defined(GLM_FORCE_INLINE) -# if GLM_COMPILER & GLM_COMPILER_VC -# define GLM_INLINE __forceinline -# define GLM_NEVER_INLINE __declspec((noinline)) -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) -# define GLM_INLINE inline __attribute__((__always_inline__)) -# define GLM_NEVER_INLINE __attribute__((__noinline__)) -# elif GLM_COMPILER & GLM_COMPILER_CUDA -# define GLM_INLINE __forceinline__ -# define GLM_NEVER_INLINE __noinline__ -# else -# define GLM_INLINE inline -# define GLM_NEVER_INLINE -# endif//GLM_COMPILER -#else -# define GLM_INLINE inline -# define GLM_NEVER_INLINE -#endif//defined(GLM_FORCE_INLINE) - -#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL -#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE - -/////////////////////////////////////////////////////////////////////////////////// -// Swizzle operators - -// User defines: GLM_FORCE_SWIZZLE - -#define GLM_SWIZZLE_DISABLED 0 -#define GLM_SWIZZLE_OPERATOR 1 -#define GLM_SWIZZLE_FUNCTION 2 - -#if defined(GLM_FORCE_XYZW_ONLY) -# undef GLM_FORCE_SWIZZLE -#endif - -#if defined(GLM_SWIZZLE) -# pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.") -# define GLM_FORCE_SWIZZLE -#endif - -#if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG) -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR -#elif defined(GLM_FORCE_SWIZZLE) -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION -#else -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Allows using not basic types as genType - -// #define GLM_FORCE_UNRESTRICTED_GENTYPE - -#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE -# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE -#else -# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM -// to use a clip space between 0 to 1. -// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM -// to use left handed coordinate system by default. - -#define GLM_CLIP_CONTROL_ZO_BIT (1 << 0) // ZERO_TO_ONE -#define GLM_CLIP_CONTROL_NO_BIT (1 << 1) // NEGATIVE_ONE_TO_ONE -#define GLM_CLIP_CONTROL_LH_BIT (1 << 2) // LEFT_HANDED, For DirectX, Metal, Vulkan -#define GLM_CLIP_CONTROL_RH_BIT (1 << 3) // RIGHT_HANDED, For OpenGL, default in GLM - -#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT) -#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT) -#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT) -#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT) - -#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE -# ifdef GLM_FORCE_LEFT_HANDED -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO -# else -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO -# endif -#else -# ifdef GLM_FORCE_LEFT_HANDED -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO -# else -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO -# endif -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Qualifiers - -#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)) -# define GLM_DEPRECATED __declspec(deprecated) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name -#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL) -# define GLM_DEPRECATED __attribute__((__deprecated__)) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment))) -#elif GLM_COMPILER & GLM_COMPILER_CUDA -# define GLM_DEPRECATED -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x) -#else -# define GLM_DEPRECATED -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name -#endif - -/////////////////////////////////////////////////////////////////////////////////// - -#ifdef GLM_FORCE_EXPLICIT_CTOR -# define GLM_EXPLICIT explicit -#else -# define GLM_EXPLICIT -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// SYCL - -#if GLM_COMPILER==GLM_COMPILER_SYCL - -#include -#include - -namespace glm { -namespace std { - // Import SYCL's functions into the namespace glm::std to force their usages. - // It's important to use the math built-in function (sin, exp, ...) - // of SYCL instead the std ones. - using namespace cl::sycl; - - /////////////////////////////////////////////////////////////////////////////// - // Import some "harmless" std's stuffs used by glm into - // the new glm::std namespace. - template - using numeric_limits = ::std::numeric_limits; - - using ::std::size_t; - - using ::std::uint8_t; - using ::std::uint16_t; - using ::std::uint32_t; - using ::std::uint64_t; - - using ::std::int8_t; - using ::std::int16_t; - using ::std::int32_t; - using ::std::int64_t; - - using ::std::make_unsigned; - /////////////////////////////////////////////////////////////////////////////// -} //namespace std -} //namespace glm - -#endif - -/////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////////// -// Length type: all length functions returns a length_t type. -// When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise -// length_t is a typedef of int like GLSL defines it. - -#define GLM_LENGTH_INT 1 -#define GLM_LENGTH_SIZE_T 2 - -#ifdef GLM_FORCE_SIZE_T_LENGTH -# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_SIZE_T -#else -# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_INT -#endif - -namespace glm -{ - using std::size_t; -# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T - typedef size_t length_t; -# else - typedef int length_t; -# endif -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// constexpr - -#if GLM_HAS_CONSTEXPR -# define GLM_CONFIG_CONSTEXP GLM_ENABLE - - namespace glm - { - template - constexpr std::size_t countof(T const (&)[N]) - { - return N; - } - }//namespace glm -# define GLM_COUNTOF(arr) glm::countof(arr) -#elif defined(_MSC_VER) -# define GLM_CONFIG_CONSTEXP GLM_DISABLE - -# define GLM_COUNTOF(arr) _countof(arr) -#else -# define GLM_CONFIG_CONSTEXP GLM_DISABLE - -# define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0]) -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// uint - -namespace glm{ -namespace detail -{ - template - struct is_int - { - enum test {value = 0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - typedef unsigned int uint; -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// 64-bit int - -#if GLM_HAS_EXTENDED_INTEGER_TYPE -# include -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::uint64_t uint64; - typedef std::int64_t int64; -# elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available - typedef uint64_t uint64; - typedef int64_t int64; -# elif GLM_COMPILER & GLM_COMPILER_VC - typedef unsigned __int64 uint64; - typedef signed __int64 int64; -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic ignored "-Wlong-long" - __extension__ typedef unsigned long long uint64; - __extension__ typedef signed long long int64; -# elif (GLM_COMPILER & GLM_COMPILER_CLANG) -# pragma clang diagnostic ignored "-Wc++11-long-long" - typedef unsigned long long uint64; - typedef signed long long int64; -# else//unknown compiler - typedef unsigned long long uint64; - typedef signed long long int64; -# endif -}//namespace detail -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// make_unsigned - -#if GLM_HAS_MAKE_SIGNED -# include - -namespace glm{ -namespace detail -{ - using std::make_unsigned; -}//namespace detail -}//namespace glm - -#else - -namespace glm{ -namespace detail -{ - template - struct make_unsigned - {}; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned short type; - }; - - template<> - struct make_unsigned - { - typedef unsigned int type; - }; - - template<> - struct make_unsigned - { - typedef unsigned long type; - }; - - template<> - struct make_unsigned - { - typedef uint64 type; - }; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned short type; - }; - - template<> - struct make_unsigned - { - typedef unsigned int type; - }; - - template<> - struct make_unsigned - { - typedef unsigned long type; - }; - - template<> - struct make_unsigned - { - typedef uint64 type; - }; -}//namespace detail -}//namespace glm -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Only use x, y, z, w as vector type components - -#ifdef GLM_FORCE_XYZW_ONLY -# define GLM_CONFIG_XYZW_ONLY GLM_ENABLE -#else -# define GLM_CONFIG_XYZW_ONLY GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of defaulted initialized types - -#define GLM_CTOR_INIT_DISABLE 0 -#define GLM_CTOR_INITIALIZER_LIST 1 -#define GLM_CTOR_INITIALISATION 2 - -#if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST -#elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION -#else -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Use SIMD instruction sets - -#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT) -# define GLM_CONFIG_SIMD GLM_ENABLE -#else -# define GLM_CONFIG_SIMD GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of defaulted function - -#if GLM_HAS_DEFAULTED_FUNCTIONS && GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE -# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE -# define GLM_DEFAULT = default -#else -# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE -# define GLM_DEFAULT -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of aligned gentypes - -#ifdef GLM_FORCE_ALIGNED // Legacy define -# define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -#endif - -#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -# define GLM_FORCE_ALIGNED_GENTYPES -#endif - -#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE)) -# define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE -#else -# define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of anonymous structure as implementation detail - -#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)) -# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE -#else -# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Silent warnings - -#ifdef GLM_FORCE_SILENT_WARNINGS -# define GLM_SILENT_WARNINGS GLM_ENABLE -#else -# define GLM_SILENT_WARNINGS GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Precision - -#define GLM_HIGHP 1 -#define GLM_MEDIUMP 2 -#define GLM_LOWP 3 - -#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_INT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Check inclusions of different versions of GLM - -#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION)) -# error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error." -#elif GLM_SETUP_INCLUDED == GLM_VERSION - -/////////////////////////////////////////////////////////////////////////////////// -// Messages - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED) -# define GLM_MESSAGE_DISPLAYED -# define GLM_STR_HELPER(x) #x -# define GLM_STR(x) GLM_STR_HELPER(x) - - // Report GLM version -# pragma message (GLM_STR(GLM_VERSION_MESSAGE)) - - // Report C++ language -# if (GLM_LANG & GLM_LANG_CXX2A_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 2A with extensions") -# elif (GLM_LANG & GLM_LANG_CXX2A_FLAG) -# pragma message("GLM: C++ 2A") -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 17 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) -# pragma message("GLM: C++ 17") -# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 14 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) -# pragma message("GLM: C++ 14") -# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 11 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) -# pragma message("GLM: C++ 11") -# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 0x with extensions") -# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) -# pragma message("GLM: C++ 0x") -# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 03 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) -# pragma message("GLM: C++ 03") -# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 98 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) -# pragma message("GLM: C++ 98") -# else -# pragma message("GLM: C++ language undetected") -# endif//GLM_LANG - - // Report compiler detection -# if GLM_COMPILER & GLM_COMPILER_CUDA -# pragma message("GLM: CUDA compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma message("GLM: Visual C++ compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma message("GLM: Clang compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# pragma message("GLM: Intel Compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma message("GLM: GCC compiler detected") -# else -# pragma message("GLM: Compiler not detected") -# endif - - // Report build target -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with AVX2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with AVX2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with AVX instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with AVX instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE4.2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE4.2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE4.1 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE4.1 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSSE3 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSSE3 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE3 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE3 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: ARM 64 bits with Neon instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: ARM 32 bits with Neon instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: ARM 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: ARM 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: MIPS 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: MIPS 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: PowerPC 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: PowerPC 32 bits build target") -# else -# pragma message("GLM: Unknown build target") -# endif//GLM_ARCH - - // Report platform name -# if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO) -# pragma message("GLM: QNX platform detected") -//# elif(GLM_PLATFORM & GLM_PLATFORM_IOS) -//# pragma message("GLM: iOS platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_APPLE) -# pragma message("GLM: Apple platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_WINCE) -# pragma message("GLM: WinCE platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) -# pragma message("GLM: Windows platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL) -# pragma message("GLM: Native Client detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) -# pragma message("GLM: Android platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_LINUX) -# pragma message("GLM: Linux platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_UNIX) -# pragma message("GLM: UNIX platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN) -# pragma message("GLM: platform unknown") -# else -# pragma message("GLM: platform not detected") -# endif - - // Report whether only xyzw component are used -# if defined GLM_FORCE_XYZW_ONLY -# pragma message("GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.") -# endif - - // Report swizzle operator support -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.") -# elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.") -# else -# pragma message("GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.") -# endif - - // Report .length() type -# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T -# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.") -# else -# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.") -# endif - -# if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.") -# else -# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.") -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.") -# else -# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.") -# endif - -# ifdef GLM_FORCE_SINGLE_ONLY -# pragma message("GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.") -# endif - -# if defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE) -# undef GLM_FORCE_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.") -# elif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) -# undef GLM_FORCE_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") -# endif - -# if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE -# undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") -# elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.") -# endif -# endif - -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT -# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.") -# else -# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.") -# endif - -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT -# pragma message("GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.") -# else -# pragma message("GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.") -# endif -#endif//GLM_MESSAGES - -#endif//GLM_SETUP_INCLUDED diff --git a/external/glm/glm/detail/type_float.hpp b/external/glm/glm/detail/type_float.hpp deleted file mode 100644 index c8037ebd..00000000 --- a/external/glm/glm/detail/type_float.hpp +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once - -#include "setup.hpp" - -#if GLM_COMPILER == GLM_COMPILER_VC12 -# pragma warning(push) -# pragma warning(disable: 4512) // assignment operator could not be generated -#endif - -namespace glm{ -namespace detail -{ - template - union float_t - {}; - - // https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ - template <> - union float_t - { - typedef int int_type; - typedef float float_type; - - GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {} - - GLM_CONSTEXPR float_t& operator=(float_t const& x) - { - f = x.f; - return *this; - } - - // Portable extraction of components. - GLM_CONSTEXPR bool negative() const { return i < 0; } - GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); } - GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); } - - int_type i; - float_type f; - }; - - template <> - union float_t - { - typedef detail::int64 int_type; - typedef double float_type; - - GLM_CONSTEXPR float_t(float_type Num = static_cast(0)) : f(Num) {} - - GLM_CONSTEXPR float_t& operator=(float_t const& x) - { - f = x.f; - return *this; - } - - // Portable extraction of components. - GLM_CONSTEXPR bool negative() const { return i < 0; } - GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); } - GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); } - - int_type i; - float_type f; - }; -}//namespace detail -}//namespace glm - -#if GLM_COMPILER == GLM_COMPILER_VC12 -# pragma warning(pop) -#endif diff --git a/external/glm/glm/detail/type_half.hpp b/external/glm/glm/detail/type_half.hpp deleted file mode 100644 index 40b8bec0..00000000 --- a/external/glm/glm/detail/type_half.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "setup.hpp" - -namespace glm{ -namespace detail -{ - typedef short hdata; - - GLM_FUNC_DECL float toFloat32(hdata value); - GLM_FUNC_DECL hdata toFloat16(float const& value); - -}//namespace detail -}//namespace glm - -#include "type_half.inl" diff --git a/external/glm/glm/detail/type_half.inl b/external/glm/glm/detail/type_half.inl deleted file mode 100644 index b0723e36..00000000 --- a/external/glm/glm/detail/type_half.inl +++ /dev/null @@ -1,241 +0,0 @@ -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER float overflow() - { - volatile float f = 1e10; - - for(int i = 0; i < 10; ++i) - f *= f; // this will overflow before the for loop terminates - return f; - } - - union uif32 - { - GLM_FUNC_QUALIFIER uif32() : - i(0) - {} - - GLM_FUNC_QUALIFIER uif32(float f_) : - f(f_) - {} - - GLM_FUNC_QUALIFIER uif32(unsigned int i_) : - i(i_) - {} - - float f; - unsigned int i; - }; - - GLM_FUNC_QUALIFIER float toFloat32(hdata value) - { - int s = (value >> 15) & 0x00000001; - int e = (value >> 10) & 0x0000001f; - int m = value & 0x000003ff; - - if(e == 0) - { - if(m == 0) - { - // - // Plus or minus zero - // - - detail::uif32 result; - result.i = static_cast(s << 31); - return result.f; - } - else - { - // - // Denormalized number -- renormalize it - // - - while(!(m & 0x00000400)) - { - m <<= 1; - e -= 1; - } - - e += 1; - m &= ~0x00000400; - } - } - else if(e == 31) - { - if(m == 0) - { - // - // Positive or negative infinity - // - - uif32 result; - result.i = static_cast((s << 31) | 0x7f800000); - return result.f; - } - else - { - // - // Nan -- preserve sign and significand bits - // - - uif32 result; - result.i = static_cast((s << 31) | 0x7f800000 | (m << 13)); - return result.f; - } - } - - // - // Normalized number - // - - e = e + (127 - 15); - m = m << 13; - - // - // Assemble s, e and m. - // - - uif32 Result; - Result.i = static_cast((s << 31) | (e << 23) | m); - return Result.f; - } - - GLM_FUNC_QUALIFIER hdata toFloat16(float const& f) - { - uif32 Entry; - Entry.f = f; - int i = static_cast(Entry.i); - - // - // Our floating point number, f, is represented by the bit - // pattern in integer i. Disassemble that bit pattern into - // the sign, s, the exponent, e, and the significand, m. - // Shift s into the position where it will go in the - // resulting half number. - // Adjust e, accounting for the different exponent bias - // of float and half (127 versus 15). - // - - int s = (i >> 16) & 0x00008000; - int e = ((i >> 23) & 0x000000ff) - (127 - 15); - int m = i & 0x007fffff; - - // - // Now reassemble s, e and m into a half: - // - - if(e <= 0) - { - if(e < -10) - { - // - // E is less than -10. The absolute value of f is - // less than half_MIN (f may be a small normalized - // float, a denormalized float or a zero). - // - // We convert f to a half zero. - // - - return hdata(s); - } - - // - // E is between -10 and 0. F is a normalized float, - // whose magnitude is less than __half_NRM_MIN. - // - // We convert f to a denormalized half. - // - - m = (m | 0x00800000) >> (1 - e); - - // - // Round to nearest, round "0.5" up. - // - // Rounding may cause the significand to overflow and make - // our number normalized. Because of the way a half's bits - // are laid out, we don't have to treat this case separately; - // the code below will handle it correctly. - // - - if(m & 0x00001000) - m += 0x00002000; - - // - // Assemble the half from s, e (zero) and m. - // - - return hdata(s | (m >> 13)); - } - else if(e == 0xff - (127 - 15)) - { - if(m == 0) - { - // - // F is an infinity; convert f to a half - // infinity with the same sign as f. - // - - return hdata(s | 0x7c00); - } - else - { - // - // F is a NAN; we produce a half NAN that preserves - // the sign bit and the 10 leftmost bits of the - // significand of f, with one exception: If the 10 - // leftmost bits are all zero, the NAN would turn - // into an infinity, so we have to set at least one - // bit in the significand. - // - - m >>= 13; - - return hdata(s | 0x7c00 | m | (m == 0)); - } - } - else - { - // - // E is greater than zero. F is a normalized float. - // We try to convert f to a normalized half. - // - - // - // Round to nearest, round "0.5" up - // - - if(m & 0x00001000) - { - m += 0x00002000; - - if(m & 0x00800000) - { - m = 0; // overflow in significand, - e += 1; // adjust exponent - } - } - - // - // Handle exponent overflow - // - - if (e > 30) - { - overflow(); // Cause a hardware floating point overflow; - - return hdata(s | 0x7c00); - // if this returns, the half becomes an - } // infinity with the same sign as f. - - // - // Assemble the half from s, e and m. - // - - return hdata(s | (e << 10) | (m >> 13)); - } - } - -}//namespace detail -}//namespace glm diff --git a/external/glm/glm/detail/type_mat2x2.hpp b/external/glm/glm/detail/type_mat2x2.hpp deleted file mode 100644 index 033908f4..00000000 --- a/external/glm/glm/detail/type_mat2x2.hpp +++ /dev/null @@ -1,177 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat2x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 2, T, Q> type; - typedef mat<2, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x1, T const& y1, - T const& x2, T const& y2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - U const& x1, V const& y1, - M const& x2, N const& y2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, U, Q> const& v1, - vec<2, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); -} //namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x2.inl" -#endif diff --git a/external/glm/glm/detail/type_mat2x2.inl b/external/glm/glm/detail/type_mat2x2.inl deleted file mode 100644 index fe5d1aa3..00000000 --- a/external/glm/glm/detail/type_mat2x2.inl +++ /dev/null @@ -1,536 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m[0], m[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(T scalar) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(scalar, 0), col_type(0, scalar)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(scalar, 0); - this->value[1] = col_type(0, scalar); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat - ( - T const& x0, T const& y0, - T const& x1, T const& y1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{v0, v1} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; -# endif - } - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat - ( - X1 const& x1, Y1 const& y1, - X2 const& x2, Y2 const& y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(static_cast(x1), value_type(y1)), col_type(static_cast(x2), value_type(y2)) } -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(static_cast(x1), value_type(y1)); - this->value[1] = col_type(static_cast(x2), value_type(y2)); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- mat2x2 matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 2, T, Q>::col_type const& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar) - { - this->value[0] += scalar; - this->value[1] += scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar) - { - this->value[0] -= scalar; - this->value[1] -= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar) - { - this->value[0] *= scalar; - this->value[1] *= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar) - { - this->value[0] /= scalar; - this->value[1] /= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(int) - { - mat<2, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(int) - { - mat<2, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - scalar - m[0], - scalar - m[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator* - ( - mat<2, 2, T, Q> const& m, - typename mat<2, 2, T, Q>::row_type const& v - ) - { - return vec<2, T, Q>( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator* - ( - typename mat<2, 2, T, Q>::col_type const& v, - mat<2, 2, T, Q> const& m - ) - { - return vec<2, T, Q>( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - mat<2, 2, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/external/glm/glm/detail/type_mat2x3.hpp b/external/glm/glm/detail/type_mat2x3.hpp deleted file mode 100644 index d6596e46..00000000 --- a/external/glm/glm/detail/type_mat2x3.hpp +++ /dev/null @@ -1,159 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat2x3.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 3, T, Q> type; - typedef mat<3, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, - T x1, T y1, T z1); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1); - - // -- Conversions -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, U, Q> const& v1, - vec<3, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 3, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x3.inl" -#endif diff --git a/external/glm/glm/detail/type_mat2x3.inl b/external/glm/glm/detail/type_mat2x3.inl deleted file mode 100644 index 5fec17e5..00000000 --- a/external/glm/glm/detail/type_mat2x3.inl +++ /dev/null @@ -1,510 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m.value[0], m.value[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m.value[0]; - this->value[1] = m.value[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(T scalar) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(scalar, 0, 0), col_type(0, scalar, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(scalar, 0, 0); - this->value[1] = col_type(0, scalar, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat - ( - T x0, T y0, T z0, - T x1, T y1, T z1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1), col_type(x2, y2, z2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1); - this->value[1] = col_type(x2, y2, z2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type & mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 3, T, Q>::col_type const& mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator+=(mat<2, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(mat<2, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator++(int) - { - mat<2, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator--(int) - { - mat<2, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type operator* - ( - mat<2, 3, T, Q> const& m, - typename mat<2, 3, T, Q>::row_type const& v) - { - return typename mat<2, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y, - m[0][2] * v.x + m[1][2] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::row_type operator* - ( - typename mat<2, 3, T, Q>::col_type const& v, - mat<2, 3, T, Q> const& m) - { - return typename mat<2, 3, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - T SrcA00 = m1[0][0]; - T SrcA01 = m1[0][1]; - T SrcA02 = m1[0][2]; - T SrcA10 = m1[1][0]; - T SrcA11 = m1[1][1]; - T SrcA12 = m1[1][2]; - - T SrcB00 = m2[0][0]; - T SrcB01 = m2[0][1]; - T SrcB10 = m2[1][0]; - T SrcB11 = m2[1][1]; - T SrcB20 = m2[2][0]; - T SrcB21 = m2[2][1]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/external/glm/glm/detail/type_mat2x4.hpp b/external/glm/glm/detail/type_mat2x4.hpp deleted file mode 100644 index ff03e215..00000000 --- a/external/glm/glm/detail/type_mat2x4.hpp +++ /dev/null @@ -1,161 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat2x4.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 4, T, Q> type; - typedef mat<4, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, U, Q> const& v1, - vec<4, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 4, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x4.inl" -#endif diff --git a/external/glm/glm/detail/type_mat2x4.inl b/external/glm/glm/detail/type_mat2x4.inl deleted file mode 100644 index b6d2b9dd..00000000 --- a/external/glm/glm/detail/type_mat2x4.inl +++ /dev/null @@ -1,520 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m[0], m[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat - ( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1, w1); - this->value[1] = col_type(x2, y2, z2, w2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 4, T, Q>::col_type const& mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(int) - { - mat<2, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(int) - { - mat<2, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v) - { - return typename mat<2, 4, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y, - m[0][2] * v.x + m[1][2] * v.y, - m[0][3] * v.x + m[1][3] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m) - { - return typename mat<2, 4, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - T SrcA00 = m1[0][0]; - T SrcA01 = m1[0][1]; - T SrcA02 = m1[0][2]; - T SrcA03 = m1[0][3]; - T SrcA10 = m1[1][0]; - T SrcA11 = m1[1][1]; - T SrcA12 = m1[1][2]; - T SrcA13 = m1[1][3]; - - T SrcB00 = m2[0][0]; - T SrcB01 = m2[0][1]; - T SrcB10 = m2[1][0]; - T SrcB11 = m2[1][1]; - T SrcB20 = m2[2][0]; - T SrcB21 = m2[2][1]; - T SrcB30 = m2[3][0]; - T SrcB31 = m2[3][1]; - - mat<4, 4, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; - Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; - Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; - Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21; - Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31; - Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31; - Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31; - Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/external/glm/glm/detail/type_mat3x2.hpp b/external/glm/glm/detail/type_mat3x2.hpp deleted file mode 100644 index e1665813..00000000 --- a/external/glm/glm/detail/type_mat3x2.hpp +++ /dev/null @@ -1,167 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat3x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 2, T, Q> type; - typedef mat<2, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, - T x1, T y1, - T x2, T y2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, V1, Q> const& v1, - vec<2, V2, Q> const& v2, - vec<2, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<3, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x2.inl" -#endif diff --git a/external/glm/glm/detail/type_mat3x2.inl b/external/glm/glm/detail/type_mat3x2.inl deleted file mode 100644 index b4b948b7..00000000 --- a/external/glm/glm/detail/type_mat3x2.inl +++ /dev/null @@ -1,532 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1), col_type(0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); - this->value[2] = col_type(0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0), col_type(0, s), col_type(0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0); - this->value[1] = col_type(0, s); - this->value[2] = col_type(0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat - ( - T x0, T y0, - T x1, T y1, - T x2, T y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat - ( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type & mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 2, T, Q>::col_type const& mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(mat<3, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(mat<3, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> & mat<3, 2, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator++(int) - { - mat<3, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator--(int) - { - mat<3, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v) - { - return typename mat<3, 2, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m) - { - return typename mat<3, 2, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1], - v.x * m[2][0] + v.y * m[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - const T SrcA00 = m1[0][0]; - const T SrcA01 = m1[0][1]; - const T SrcA10 = m1[1][0]; - const T SrcA11 = m1[1][1]; - const T SrcA20 = m1[2][0]; - const T SrcA21 = m1[2][1]; - - const T SrcB00 = m2[0][0]; - const T SrcB01 = m2[0][1]; - const T SrcB02 = m2[0][2]; - const T SrcB10 = m2[1][0]; - const T SrcB11 = m2[1][1]; - const T SrcB12 = m2[1][2]; - - mat<2, 2, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/external/glm/glm/detail/type_mat3x3.hpp b/external/glm/glm/detail/type_mat3x3.hpp deleted file mode 100644 index 3174872e..00000000 --- a/external/glm/glm/detail/type_mat3x3.hpp +++ /dev/null @@ -1,184 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat3x3.hpp - -#pragma once - -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 3, T, Q> type; - typedef mat<3, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, - T x1, T y1, T z1, - T x2, T y2, T z2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2, - X3 x3, Y3 y3, Z3 z3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, V1, Q> const& v1, - vec<3, V2, Q> const& v2, - vec<3, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 3, T, Q> & operator++(); - GLM_FUNC_DECL mat<3, 3, T, Q> & operator--(); - GLM_FUNC_DECL mat<3, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x3.inl" -#endif diff --git a/external/glm/glm/detail/type_mat3x3.inl b/external/glm/glm/detail/type_mat3x3.inl deleted file mode 100644 index 1ddaf99d..00000000 --- a/external/glm/glm/detail/type_mat3x3.inl +++ /dev/null @@ -1,601 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); - this->value[2] = col_type(0, 0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0); - this->value[1] = col_type(0, s, 0); - this->value[2] = col_type(0, 0, s); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat - ( - T x0, T y0, T z0, - T x1, T y1, T z1, - T x2, T y2, T z2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2, - X3 x3, Y3 y3, Z3 z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1); - this->value[1] = col_type(x2, y2, z2); - this->value[2] = col_type(x3, y3, z3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type & mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 3, T, Q>::col_type const& mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(mat<3, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(mat<3, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(mat<3, 3, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(mat<3, 3, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator++(int) - { - mat<3, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator--(int) - { - mat<3, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - scalar - m[0], - scalar - m[1], - scalar - m[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) - { - return typename mat<3, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) - { - return typename mat<3, 3, T, Q>::row_type( - m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z, - m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z, - m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA02 = m1[0][2]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA12 = m1[1][2]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA22 = m1[2][2]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB20 = m2[2][0]; - T const SrcB21 = m2[2][1]; - T const SrcB22 = m2[2][2]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - mat<3, 3, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/external/glm/glm/detail/type_mat3x4.hpp b/external/glm/glm/detail/type_mat3x4.hpp deleted file mode 100644 index 6e40b903..00000000 --- a/external/glm/glm/detail/type_mat3x4.hpp +++ /dev/null @@ -1,166 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat3x4.hpp - -#pragma once - -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 4, T, Q> type; - typedef mat<4, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1, - T x2, T y2, T z2, T w2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2, - X3 x3, Y3 y3, Z3 z3, W3 w3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, V1, Q> const& v1, - vec<4, V2, Q> const& v2, - vec<4, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 4, T, Q> & operator++(); - GLM_FUNC_DECL mat<3, 4, T, Q> & operator--(); - GLM_FUNC_DECL mat<3, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x4.inl" -#endif diff --git a/external/glm/glm/detail/type_mat3x4.inl b/external/glm/glm/detail/type_mat3x4.inl deleted file mode 100644 index 6ee416cf..00000000 --- a/external/glm/glm/detail/type_mat3x4.inl +++ /dev/null @@ -1,578 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); - this->value[2] = col_type(0, 0, s, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat - ( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1, - T x2, T y2, T z2, T w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, typename Z0, typename W0, - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat - ( - X0 x0, Y0 y0, Z0 z0, W0 w0, - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(vec<4, V1, Q> const& v0, vec<4, V2, Q> const& v1, vec<4, V3, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type & mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 4, T, Q>::col_type const& mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(mat<3, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(mat<3, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> & mat<3, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator++(int) - { - mat<3, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator--(int) - { - mat<3, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type operator* - ( - mat<3, 4, T, Q> const& m, - typename mat<3, 4, T, Q>::row_type const& v - ) - { - return typename mat<3, 4, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z, - m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::row_type operator* - ( - typename mat<3, 4, T, Q>::col_type const& v, - mat<3, 4, T, Q> const& m - ) - { - return typename mat<3, 4, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3], - v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - const T SrcA00 = m1[0][0]; - const T SrcA01 = m1[0][1]; - const T SrcA02 = m1[0][2]; - const T SrcA03 = m1[0][3]; - const T SrcA10 = m1[1][0]; - const T SrcA11 = m1[1][1]; - const T SrcA12 = m1[1][2]; - const T SrcA13 = m1[1][3]; - const T SrcA20 = m1[2][0]; - const T SrcA21 = m1[2][1]; - const T SrcA22 = m1[2][2]; - const T SrcA23 = m1[2][3]; - - const T SrcB00 = m2[0][0]; - const T SrcB01 = m2[0][1]; - const T SrcB02 = m2[0][2]; - const T SrcB10 = m2[1][0]; - const T SrcB11 = m2[1][1]; - const T SrcB12 = m2[1][2]; - const T SrcB20 = m2[2][0]; - const T SrcB21 = m2[2][1]; - const T SrcB22 = m2[2][2]; - const T SrcB30 = m2[3][0]; - const T SrcB31 = m2[3][1]; - const T SrcB32 = m2[3][2]; - - mat<4, 4, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; - Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; - Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; - Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22; - Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32; - Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32; - Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32; - Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/external/glm/glm/detail/type_mat4x2.hpp b/external/glm/glm/detail/type_mat4x2.hpp deleted file mode 100644 index 8d343527..00000000 --- a/external/glm/glm/detail/type_mat4x2.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat4x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 2, T, Q> type; - typedef mat<2, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, - T x1, T y1, - T x2, T y2, - T x3, T y3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, V1, Q> const& v1, - vec<2, V2, Q> const& v2, - vec<2, V3, Q> const& v3, - vec<2, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<4, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x2.inl" -#endif diff --git a/external/glm/glm/detail/type_mat4x2.inl b/external/glm/glm/detail/type_mat4x2.inl deleted file mode 100644 index 419c80c4..00000000 --- a/external/glm/glm/detail/type_mat4x2.inl +++ /dev/null @@ -1,574 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1), col_type(0, 0), col_type(0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); - this->value[2] = col_type(0, 0); - this->value[3] = col_type(0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0), col_type(0, s), col_type(0, 0), col_type(0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0); - this->value[1] = col_type(0, s); - this->value[2] = col_type(0, 0); - this->value[3] = col_type(0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat - ( - T x0, T y0, - T x1, T y1, - T x2, T y2, - T x3, T y3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); - this->value[3] = col_type(x3, y3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat - ( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); - this->value[3] = col_type(x3, y3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); - this->value[3] = col_type(v3); -# endif - } - - // -- Conversion -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int) - { - mat<4, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int) - { - mat<4, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar, - m[3] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar, - m[3] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar, - m[3] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar, - m[3] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v) - { - return typename mat<4, 2, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m) - { - return typename mat<4, 2, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1], - v.x * m[2][0] + v.y * m[2][1], - v.x * m[3][0] + v.y * m[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA30 = m1[3][0]; - T const SrcA31 = m1[3][1]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB03 = m2[0][3]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB13 = m2[1][3]; - - mat<2, 2, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar, - m[3] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2], - scalar / m[3]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -} //namespace glm diff --git a/external/glm/glm/detail/type_mat4x3.hpp b/external/glm/glm/detail/type_mat4x3.hpp deleted file mode 100644 index 16e42705..00000000 --- a/external/glm/glm/detail/type_mat4x3.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat4x3.hpp - -#pragma once - -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 3, T, Q> type; - typedef mat<3, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x0, T const& y0, T const& z0, - T const& x1, T const& y1, T const& z1, - T const& x2, T const& y2, T const& z2, - T const& x3, T const& y3, T const& z3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3, - typename X4, typename Y4, typename Z4> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 const& x1, Y1 const& y1, Z1 const& z1, - X2 const& x2, Y2 const& y2, Z2 const& z2, - X3 const& x3, Y3 const& y3, Z3 const& z3, - X4 const& x4, Y4 const& y4, Z4 const& z4); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, V1, Q> const& v1, - vec<3, V2, Q> const& v2, - vec<3, V3, Q> const& v3, - vec<3, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 3, T, Q>& operator++(); - GLM_FUNC_DECL mat<4, 3, T, Q>& operator--(); - GLM_FUNC_DECL mat<4, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x3.inl" -#endif //GLM_EXTERNAL_TEMPLATE diff --git a/external/glm/glm/detail/type_mat4x3.inl b/external/glm/glm/detail/type_mat4x3.inl deleted file mode 100644 index 11b1ee35..00000000 --- a/external/glm/glm/detail/type_mat4x3.inl +++ /dev/null @@ -1,598 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1), col_type(0, 0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0, 0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(T const& s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s), col_type(0, 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0); - this->value[1] = col_type(0, s, 0); - this->value[2] = col_type(0, 0, s); - this->value[3] = col_type(0, 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat - ( - T const& x0, T const& y0, T const& z0, - T const& x1, T const& y1, T const& z1, - T const& x2, T const& y2, T const& z2, - T const& x3, T const& y3, T const& z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); - this->value[3] = col_type(x3, y3, z3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, typename Z0, - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat - ( - X0 const& x0, Y0 const& y0, Z0 const& z0, - X1 const& x1, Y1 const& y1, Z1 const& z1, - X2 const& x2, Y2 const& y2, Z2 const& z2, - X3 const& x3, Y3 const& y3, Z3 const& z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); - this->value[3] = col_type(x3, y3, z3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3, vec<3, V4, Q> const& v4) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); - this->value[3] = col_type(v4); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(m[3], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); - this->value[3] = col_type(m[3], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type & mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 3, T, Q>::col_type const& mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(mat<4, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(mat<4, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator++(int) - { - mat<4, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator--(int) - { - mat<4, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] - s, - m[1] - s, - m[2] - s, - m[3] - s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type operator* - ( - mat<4, 3, T, Q> const& m, - typename mat<4, 3, T, Q>::row_type const& v) - { - return typename mat<4, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::row_type operator* - ( - typename mat<4, 3, T, Q>::col_type const& v, - mat<4, 3, T, Q> const& m) - { - return typename mat<4, 3, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2], - v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2], - v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA02 = m1[0][2]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA12 = m1[1][2]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA22 = m1[2][2]; - T const SrcA30 = m1[3][0]; - T const SrcA31 = m1[3][1]; - T const SrcA32 = m1[3][2]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB03 = m2[0][3]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB13 = m2[1][3]; - T const SrcB20 = m2[2][0]; - T const SrcB21 = m2[2][1]; - T const SrcB22 = m2[2][2]; - T const SrcB23 = m2[2][3]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] / s, - m[1] / s, - m[2] / s, - m[3] / s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - s / m[0], - s / m[1], - s / m[2], - s / m[3]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -} //namespace glm diff --git a/external/glm/glm/detail/type_mat4x4.hpp b/external/glm/glm/detail/type_mat4x4.hpp deleted file mode 100644 index 3517f9f5..00000000 --- a/external/glm/glm/detail/type_mat4x4.hpp +++ /dev/null @@ -1,189 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat4x4.hpp - -#pragma once - -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 4, T, Q> type; - typedef mat<4, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x0, T const& y0, T const& z0, T const& w0, - T const& x1, T const& y1, T const& z1, T const& w1, - T const& x2, T const& y2, T const& z2, T const& w2, - T const& x3, T const& y3, T const& z3, T const& w3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3, - typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, - X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, - X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, - X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, V1, Q> const& v1, - vec<4, V2, Q> const& v2, - vec<4, V3, Q> const& v3, - vec<4, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 4, T, Q> & operator++(); - GLM_FUNC_DECL mat<4, 4, T, Q> & operator--(); - GLM_FUNC_DECL mat<4, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x4.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/external/glm/glm/detail/type_mat4x4.inl b/external/glm/glm/detail/type_mat4x4.inl deleted file mode 100644 index e38b87f7..00000000 --- a/external/glm/glm/detail/type_mat4x4.inl +++ /dev/null @@ -1,706 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(T const& s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0), col_type(0, 0, 0, s)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); - this->value[2] = col_type(0, 0, s, 0); - this->value[3] = col_type(0, 0, 0, s); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat - ( - T const& x0, T const& y0, T const& z0, T const& w0, - T const& x1, T const& y1, T const& z1, T const& w1, - T const& x2, T const& y2, T const& z2, T const& w2, - T const& x3, T const& y3, T const& z3, T const& w3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2), - col_type(x3, y3, z3, w3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); - this->value[3] = col_type(x3, y3, z3, w3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - // -- Conversions -- - - template - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3, - typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat - ( - X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, - X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, - X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, - X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2), col_type(x3, y3, z3, w3), col_type(x4, y4, z4, w4)} -# endif - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 5th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 6th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 7th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 8th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 9th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 10th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 11th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 12th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 13th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 14th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 15th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 16th parameter type invalid."); - -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1, w1); - this->value[1] = col_type(x2, y2, z2, w2); - this->value[2] = col_type(x3, y3, z3, w3); - this->value[3] = col_type(x4, y4, z4, w4); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3, vec<4, V4, Q> const& v4) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} -# endif - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); - -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); - this->value[3] = col_type(v4); -# endif - } - - // -- Matrix conversions -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(m[3], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); - this->value[3] = col_type(m[3], 1); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type & mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 4, T, Q>::col_type const& mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary arithmetic operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, U, Q> const& m) - { - //memcpy could be faster - //memcpy(&this->value, &m.value, 16 * sizeof(valType)); - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(mat<4, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(mat<4, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(mat<4, 4, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(mat<4, 4, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator++(int) - { - mat<4, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator--(int) - { - mat<4, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] - s, - m[1] - s, - m[2] - s, - m[3] - s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - s - m[0], - s - m[1], - s - m[2], - s - m[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const & s) - { - return mat<4, 4, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator* - ( - mat<4, 4, T, Q> const& m, - typename mat<4, 4, T, Q>::row_type const& v - ) - { -/* - __m128 v0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 v1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 v2 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 v3 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(m[0].data, v0); - __m128 m1 = _mm_mul_ps(m[1].data, v1); - __m128 a0 = _mm_add_ps(m0, m1); - - __m128 m2 = _mm_mul_ps(m[2].data, v2); - __m128 m3 = _mm_mul_ps(m[3].data, v3); - __m128 a1 = _mm_add_ps(m2, m3); - - __m128 a2 = _mm_add_ps(a0, a1); - - return typename mat<4, 4, T, Q>::col_type(a2); -*/ - - typename mat<4, 4, T, Q>::col_type const Mov0(v[0]); - typename mat<4, 4, T, Q>::col_type const Mov1(v[1]); - typename mat<4, 4, T, Q>::col_type const Mul0 = m[0] * Mov0; - typename mat<4, 4, T, Q>::col_type const Mul1 = m[1] * Mov1; - typename mat<4, 4, T, Q>::col_type const Add0 = Mul0 + Mul1; - typename mat<4, 4, T, Q>::col_type const Mov2(v[2]); - typename mat<4, 4, T, Q>::col_type const Mov3(v[3]); - typename mat<4, 4, T, Q>::col_type const Mul2 = m[2] * Mov2; - typename mat<4, 4, T, Q>::col_type const Mul3 = m[3] * Mov3; - typename mat<4, 4, T, Q>::col_type const Add1 = Mul2 + Mul3; - typename mat<4, 4, T, Q>::col_type const Add2 = Add0 + Add1; - return Add2; - -/* - return typename mat<4, 4, T, Q>::col_type( - m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3], - m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3], - m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3], - m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3] * v[3]); -*/ - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator* - ( - typename mat<4, 4, T, Q>::col_type const& v, - mat<4, 4, T, Q> const& m - ) - { - return typename mat<4, 4, T, Q>::row_type( - m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3], - m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3], - m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3], - m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - typename mat<4, 4, T, Q>::col_type const SrcA0 = m1[0]; - typename mat<4, 4, T, Q>::col_type const SrcA1 = m1[1]; - typename mat<4, 4, T, Q>::col_type const SrcA2 = m1[2]; - typename mat<4, 4, T, Q>::col_type const SrcA3 = m1[3]; - - typename mat<4, 4, T, Q>::col_type const SrcB0 = m2[0]; - typename mat<4, 4, T, Q>::col_type const SrcB1 = m2[1]; - typename mat<4, 4, T, Q>::col_type const SrcB2 = m2[2]; - typename mat<4, 4, T, Q>::col_type const SrcB3 = m2[3]; - - mat<4, 4, T, Q> Result; - Result[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3]; - Result[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3]; - Result[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3]; - Result[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] / s, - m[1] / s, - m[2] / s, - m[3] / s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - s / m[0], - s / m[1], - s / m[2], - s / m[3]); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - mat<4, 4, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_mat4x4_simd.inl" -#endif diff --git a/external/glm/glm/detail/type_mat4x4_simd.inl b/external/glm/glm/detail/type_mat4x4_simd.inl deleted file mode 100644 index fb3a16f0..00000000 --- a/external/glm/glm/detail/type_mat4x4_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref core - -namespace glm -{ - -}//namespace glm diff --git a/external/glm/glm/detail/type_quat.hpp b/external/glm/glm/detail/type_quat.hpp deleted file mode 100644 index 0e60bc33..00000000 --- a/external/glm/glm/detail/type_quat.hpp +++ /dev/null @@ -1,186 +0,0 @@ -/// @ref core -/// @file glm/detail/type_quat.hpp - -#pragma once - -// Dependency: -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat4x4.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" -#include "../ext/vector_relational.hpp" -#include "../ext/quaternion_relational.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/matrix_transform.hpp" - -namespace glm -{ - template - struct qua - { - // -- Implementation detail -- - - typedef qua type; - typedef T value_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_LANG & GLM_LANG_CXXMS_FLAG - union - { -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - struct { T w, x, y, z; }; -# else - struct { T x, y, z, w; }; -# endif - - typename detail::storage<4, T, detail::is_aligned::value>::type data; - }; -# else -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - T w, x, y, z; -# else - T x, y, z, w; -# endif -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - typedef length_t length_type; - - /// Return the count of components of a quaternion - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v); - GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua const& q); - - /// Explicit conversion operators -# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - GLM_FUNC_DECL explicit operator mat<3, 3, T, Q>() const; - GLM_FUNC_DECL explicit operator mat<4, 4, T, Q>() const; -# endif - - /// Create a quaternion from two normalized axis - /// - /// @param u A first normalized axis - /// @param v A second normalized axis - /// @see gtc_quaternion - /// @see http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors - GLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v); - - /// Build a quaternion from euler angles (pitch, yaw, roll), in radians. - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles); - GLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q); - GLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q); - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator+=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator-=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(U s); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator/=(U s); - }; - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, T const& s); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(T const& s, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator/(qua const& q, T const& s); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2); -} //namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_quat.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/external/glm/glm/detail/type_quat.inl b/external/glm/glm/detail/type_quat.inl deleted file mode 100644 index 67b9310a..00000000 --- a/external/glm/glm/detail/type_quat.inl +++ /dev/null @@ -1,408 +0,0 @@ -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include "../ext/quaternion_geometric.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct genTypeTrait > - { - static const genTypeEnum GENTYPE = GENTYPE_QUAT; - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(qua const& a, qua const& b) - { - vec<4, T, Q> tmp(a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z); - return (tmp.x + tmp.y) + (tmp.z + tmp.w); - } - }; - - template - struct compute_quat_add - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) - { - return qua(q.w + p.w, q.x + p.x, q.y + p.y, q.z + p.z); - } - }; - - template - struct compute_quat_sub - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) - { - return qua(q.w - p.w, q.x - p.x, q.y - p.y, q.z - p.z); - } - }; - - template - struct compute_quat_mul_scalar - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) - { - return qua(q.w * s, q.x * s, q.y * s, q.z * s); - } - }; - - template - struct compute_quat_div_scalar - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) - { - return qua(q.w / s, q.x / s, q.y / s, q.z / s); - } - }; - - template - struct compute_quat_mul_vec4 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(qua const& q, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); - } - }; -}//namespace detail - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & qua::operator[](typename qua::length_type i) - { - assert(i >= 0 && i < this->length()); -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - return (&w)[i]; -# else - return (&x)[i]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& qua::operator[](typename qua::length_type i) const - { - assert(i >= 0 && i < this->length()); -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - return (&w)[i]; -# else - return (&x)[i]; -# endif - } - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(1), x(0), y(0), z(0) -# else - : x(0), y(0), z(0), w(1) -# endif -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(q.w), x(q.x), y(q.y), z(q.z) -# else - : x(q.x), y(q.y), z(q.z), w(q.w) -# endif - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(q.w), x(q.x), y(q.y), z(q.z) -# else - : x(q.x), y(q.y), z(q.z), w(q.w) -# endif - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T s, vec<3, T, Q> const& v) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(s), x(v.x), y(v.y), z(v.z) -# else - : x(v.x), y(v.y), z(v.z), w(s) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T _w, T _x, T _y, T _z) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(_w), x(_x), y(_y), z(_z) -# else - : x(_x), y(_y), z(_z), w(_w) -# endif - {} - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(static_cast(q.w)), x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)) -# else - : x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)), w(static_cast(q.w)) -# endif - {} - - //template - //GLM_FUNC_QUALIFIER qua::qua - //( - // valType const& pitch, - // valType const& yaw, - // valType const& roll - //) - //{ - // vec<3, valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5)); - // vec<3, valType> c = glm::cos(eulerAngle * valType(0.5)); - // vec<3, valType> s = glm::sin(eulerAngle * valType(0.5)); - // - // this->w = c.x * c.y * c.z + s.x * s.y * s.z; - // this->x = s.x * c.y * c.z - c.x * s.y * s.z; - // this->y = c.x * s.y * c.z + s.x * c.y * s.z; - // this->z = c.x * c.y * s.z - s.x * s.y * c.z; - //} - - template - GLM_FUNC_QUALIFIER qua::qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v) - { - T norm_u_norm_v = sqrt(dot(u, u) * dot(v, v)); - T real_part = norm_u_norm_v + dot(u, v); - vec<3, T, Q> t; - - if(real_part < static_cast(1.e-6f) * norm_u_norm_v) - { - // If u and v are exactly opposite, rotate 180 degrees - // around an arbitrary orthogonal axis. Axis normalisation - // can happen later, when we normalise the quaternion. - real_part = static_cast(0); - t = abs(u.x) > abs(u.z) ? vec<3, T, Q>(-u.y, u.x, static_cast(0)) : vec<3, T, Q>(static_cast(0), -u.z, u.y); - } - else - { - // Otherwise, build quaternion the standard way. - t = cross(u, v); - } - - *this = normalize(qua(real_part, t.x, t.y, t.z)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(vec<3, T, Q> const& eulerAngle) - { - vec<3, T, Q> c = glm::cos(eulerAngle * T(0.5)); - vec<3, T, Q> s = glm::sin(eulerAngle * T(0.5)); - - this->w = c.x * c.y * c.z + s.x * s.y * s.z; - this->x = s.x * c.y * c.z - c.x * s.y * s.z; - this->y = c.x * s.y * c.z + s.x * c.y * s.z; - this->z = c.x * c.y * s.z - s.x * s.y * c.z; - } - - template - GLM_FUNC_QUALIFIER qua::qua(mat<3, 3, T, Q> const& m) - { - *this = quat_cast(m); - } - - template - GLM_FUNC_QUALIFIER qua::qua(mat<4, 4, T, Q> const& m) - { - *this = quat_cast(m); - } - -# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - template - GLM_FUNC_QUALIFIER qua::operator mat<3, 3, T, Q>() const - { - return mat3_cast(*this); - } - - template - GLM_FUNC_QUALIFIER qua::operator mat<4, 4, T, Q>() const - { - return mat4_cast(*this); - } -# endif//GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) - { - this->w = q.w; - this->x = q.x; - this->y = q.y; - this->z = q.z; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) - { - this->w = static_cast(q.w); - this->x = static_cast(q.x); - this->y = static_cast(q.y); - this->z = static_cast(q.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator+=(qua const& q) - { - return (*this = detail::compute_quat_add::value>::call(*this, qua(q))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator-=(qua const& q) - { - return (*this = detail::compute_quat_sub::value>::call(*this, qua(q))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(qua const& r) - { - qua const p(*this); - qua const q(r); - - this->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z; - this->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y; - this->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z; - this->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(U s) - { - return (*this = detail::compute_quat_mul_scalar::value>::call(*this, static_cast(s))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator/=(U s) - { - return (*this = detail::compute_quat_div_scalar::value>::call(*this, static_cast(s))); - } - - // -- Unary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q) - { - return q; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q) - { - return qua(-q.w, -q.x, -q.y, -q.z); - } - - // -- Binary operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q, qua const& p) - { - return qua(q) += p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q, qua const& p) - { - return qua(q) -= p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, qua const& p) - { - return qua(q) *= p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v) - { - vec<3, T, Q> const QuatVector(q.x, q.y, q.z); - vec<3, T, Q> const uv(glm::cross(QuatVector, v)); - vec<3, T, Q> const uuv(glm::cross(QuatVector, uv)); - - return v + ((uv * q.w) + uuv) * static_cast(2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v) - { - return detail::compute_quat_mul_vec4::value>::call(q, v); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, T const& s) - { - return qua( - q.w * s, q.x * s, q.y * s, q.z * s); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(T const& s, qua const& q) - { - return q * s; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator/(qua const& q, T const& s) - { - return qua( - q.w / s, q.x / s, q.y / s, q.z / s); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2) - { - return q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2) - { - return q1.x != q2.x || q1.y != q2.y || q1.z != q2.z || q1.w != q2.w; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_quat_simd.inl" -#endif - diff --git a/external/glm/glm/detail/type_quat_simd.inl b/external/glm/glm/detail/type_quat_simd.inl deleted file mode 100644 index 3333e59f..00000000 --- a/external/glm/glm/detail/type_quat_simd.inl +++ /dev/null @@ -1,188 +0,0 @@ -/// @ref core - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ -/* - template - struct compute_quat_mul - { - static qua call(qua const& q1, qua const& q2) - { - // SSE2 STATS: 11 shuffle, 8 mul, 8 add - // SSE4 STATS: 3 shuffle, 4 mul, 4 dpps - - __m128 const mul0 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(0, 1, 2, 3))); - __m128 const mul1 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(1, 0, 3, 2))); - __m128 const mul2 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(2, 3, 0, 1))); - __m128 const mul3 = _mm_mul_ps(q1.Data, q2.Data); - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - __m128 const add0 = _mm_dp_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f), 0xff); - __m128 const add1 = _mm_dp_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f), 0xff); - __m128 const add2 = _mm_dp_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f), 0xff); - __m128 const add3 = _mm_dp_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f), 0xff); -# else - __m128 const mul4 = _mm_mul_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f)); - __m128 const add0 = _mm_add_ps(mul0, _mm_movehl_ps(mul4, mul4)); - __m128 const add4 = _mm_add_ss(add0, _mm_shuffle_ps(add0, add0, 1)); - - __m128 const mul5 = _mm_mul_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f)); - __m128 const add1 = _mm_add_ps(mul1, _mm_movehl_ps(mul5, mul5)); - __m128 const add5 = _mm_add_ss(add1, _mm_shuffle_ps(add1, add1, 1)); - - __m128 const mul6 = _mm_mul_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f)); - __m128 const add2 = _mm_add_ps(mul6, _mm_movehl_ps(mul6, mul6)); - __m128 const add6 = _mm_add_ss(add2, _mm_shuffle_ps(add2, add2, 1)); - - __m128 const mul7 = _mm_mul_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f)); - __m128 const add3 = _mm_add_ps(mul3, _mm_movehl_ps(mul7, mul7)); - __m128 const add7 = _mm_add_ss(add3, _mm_shuffle_ps(add3, add3, 1)); - #endif - - // This SIMD code is a politically correct way of doing this, but in every test I've tried it has been slower than - // the final code below. I'll keep this here for reference - maybe somebody else can do something better... - // - //__m128 xxyy = _mm_shuffle_ps(add4, add5, _MM_SHUFFLE(0, 0, 0, 0)); - //__m128 zzww = _mm_shuffle_ps(add6, add7, _MM_SHUFFLE(0, 0, 0, 0)); - // - //return _mm_shuffle_ps(xxyy, zzww, _MM_SHUFFLE(2, 0, 2, 0)); - - qua Result; - _mm_store_ss(&Result.x, add4); - _mm_store_ss(&Result.y, add5); - _mm_store_ss(&Result.z, add6); - _mm_store_ss(&Result.w, add7); - return Result; - } - }; -*/ - - template - struct compute_quat_add - { - static qua call(qua const& q, qua const& p) - { - qua Result; - Result.data = _mm_add_ps(q.data, p.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_add - { - static qua call(qua const& a, qua const& b) - { - qua Result; - Result.data = _mm256_add_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_quat_sub - { - static qua call(qua const& q, qua const& p) - { - vec<4, float, Q> Result; - Result.data = _mm_sub_ps(q.data, p.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_sub - { - static qua call(qua const& a, qua const& b) - { - qua Result; - Result.data = _mm256_sub_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_quat_mul_scalar - { - static qua call(qua const& q, float s) - { - vec<4, float, Q> Result; - Result.data = _mm_mul_ps(q.data, _mm_set_ps1(s)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_mul_scalar - { - static qua call(qua const& q, double s) - { - qua Result; - Result.data = _mm256_mul_pd(q.data, _mm_set_ps1(s)); - return Result; - } - }; -# endif - - template - struct compute_quat_div_scalar - { - static qua call(qua const& q, float s) - { - vec<4, float, Q> Result; - Result.data = _mm_div_ps(q.data, _mm_set_ps1(s)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_div_scalar - { - static qua call(qua const& q, double s) - { - qua Result; - Result.data = _mm256_div_pd(q.data, _mm_set_ps1(s)); - return Result; - } - }; -# endif - - template - struct compute_quat_mul_vec4 - { - static vec<4, float, Q> call(qua const& q, vec<4, float, Q> const& v) - { - __m128 const q_wwww = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 3, 3, 3)); - __m128 const q_swp0 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 const q_swp1 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 1, 0, 2)); - __m128 const v_swp0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 const v_swp1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 1, 0, 2)); - - __m128 uv = _mm_sub_ps(_mm_mul_ps(q_swp0, v_swp1), _mm_mul_ps(q_swp1, v_swp0)); - __m128 uv_swp0 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 uv_swp1 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 1, 0, 2)); - __m128 uuv = _mm_sub_ps(_mm_mul_ps(q_swp0, uv_swp1), _mm_mul_ps(q_swp1, uv_swp0)); - - __m128 const two = _mm_set1_ps(2.0f); - uv = _mm_mul_ps(uv, _mm_mul_ps(q_wwww, two)); - uuv = _mm_mul_ps(uuv, two); - - vec<4, float, Q> Result; - Result.data = _mm_add_ps(v.Data, _mm_add_ps(uv, uuv)); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/external/glm/glm/detail/type_vec1.hpp b/external/glm/glm/detail/type_vec1.hpp deleted file mode 100644 index 51163f14..00000000 --- a/external/glm/glm/detail/type_vec1.hpp +++ /dev/null @@ -1,308 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec1.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<1, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<1, T, Q> type; - typedef vec<1, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - T x; - T r; - T s; - - typename detail::storage<1, T, detail::is_aligned::value>::type data; -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - _GLM_SWIZZLE1_2_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, s) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, s) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, s) -# endif -*/ - }; -# else - union {T x, r, s;}; -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q) -# endif -*/ -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 1;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<1, U, P> const& v); - - // -- Swizzle constructors -- -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<1, T, Q, E0, -1,-2,-3> const& that) - { - *this = that(); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -*/ - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(vec<1, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(vec<1, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec1.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/external/glm/glm/detail/type_vec1.inl b/external/glm/glm/detail/type_vec1.inl deleted file mode 100644 index c5883ceb..00000000 --- a/external/glm/glm/detail/type_vec1.inl +++ /dev/null @@ -1,551 +0,0 @@ -/// @ref core - -#include "./compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, Q> const& v) - : x(v.x) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v) - : x(v.x) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar) - : x(scalar) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) - { - return x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const - { - return x; - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v) - { - this->x = v.x; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v) - { - this->x = static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar) - { - this->x /= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++() - { - ++this->x; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--() - { - --this->x; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int) - { - vec<1, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int) - { - vec<1, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar) - { - this->x %= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar) - { - this->x &= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar) - { - this->x |= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= U(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar) - { - this->x ^= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar) - { - this->x <<= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - return *this; - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - -v.x); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar + v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x + v2.x); - } - - //operator- - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar - v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x - v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar * v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x * v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar / v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x / v2.x); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar % v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x % v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar & v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x & v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar | v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x | v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar ^ v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x ^ v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - static_cast(v.x << scalar)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - static_cast(scalar << v.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - static_cast(v1.x << v2.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - static_cast(v.x >> scalar)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - static_cast(scalar >> v.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - static_cast(v1.x >> v2.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - ~v.x); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return detail::compute_equal::is_iec559>::call(v1.x, v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) - { - return vec<1, bool, Q>(v1.x && v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) - { - return vec<1, bool, Q>(v1.x || v2.x); - } -}//namespace glm diff --git a/external/glm/glm/detail/type_vec2.hpp b/external/glm/glm/detail/type_vec2.hpp deleted file mode 100644 index 52ef408e..00000000 --- a/external/glm/glm/detail/type_vec2.hpp +++ /dev/null @@ -1,399 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec2.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<2, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<2, T, Q> type; - typedef vec<2, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct{ T x, y; }; - struct{ T r, g; }; - struct{ T s, t; }; - - typename detail::storage<2, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t) - GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t) - GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t) -# endif - }; -# else - union {T x, r, s;}; - union {T y, g, t;}; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q) -# endif//GLM_CONFIG_SWIZZLE -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} - - GLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, B y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec<1, B, Q> const& y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that) - { - *this = that(); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec2.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/external/glm/glm/detail/type_vec2.inl b/external/glm/glm/detail/type_vec2.inl deleted file mode 100644 index 8e65d6bb..00000000 --- a/external/glm/glm/detail/type_vec2.inl +++ /dev/null @@ -1,913 +0,0 @@ -/// @ref core - -#include "./compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, Q> const& v) - : x(v.x), y(v.y) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, P> const& v) - : x(v.x), y(v.y) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T scalar) - : x(scalar), y(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T _x, T _y) - : x(_x), y(_y) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, B _y) - : x(static_cast(_x)) - , y(static_cast(_y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, B _y) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, vec<1, B, Q> const& _y) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - this->y += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - this->y -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - this->y *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar) - { - this->x /= static_cast(scalar); - this->y /= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.y); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator++() - { - ++this->x; - ++this->y; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator--() - { - --this->x; - --this->y; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator++(int) - { - vec<2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator--(int) - { - vec<2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar) - { - this->x %= static_cast(scalar); - this->y %= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= static_cast(v.x); - this->y %= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v) - { - this->x %= static_cast(v.x); - this->y %= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar) - { - this->x &= static_cast(scalar); - this->y &= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= static_cast(v.x); - this->y &= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v) - { - this->x &= static_cast(v.x); - this->y &= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar) - { - this->x |= static_cast(scalar); - this->y |= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= static_cast(v.x); - this->y |= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v) - { - this->x |= static_cast(v.x); - this->y |= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar) - { - this->x ^= static_cast(scalar); - this->y ^= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= static_cast(v.x); - this->y ^= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v) - { - this->x ^= static_cast(v.x); - this->y ^= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar) - { - this->x <<= static_cast(scalar); - this->y <<= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - this->y >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.y); - return *this; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - -v.x, - -v.y); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x + scalar, - v.y + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.y + v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar + v.x, - scalar + v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.x + v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.y + v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x - scalar, - v.y - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.y - v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar - v.x, - scalar - v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.x - v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.y - v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x * scalar, - v.y * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.y * v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar * v.x, - scalar * v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.x * v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.y * v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x / scalar, - v.y / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.y / v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar / v.x, - scalar / v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.x / v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.y / v2.y); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x % scalar, - v.y % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.y % v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar % v.x, - scalar % v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.x % v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.y % v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x & scalar, - v.y & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.y & v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar & v.x, - scalar & v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.x & v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.y & v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x | scalar, - v.y | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.y | v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar | v.x, - scalar | v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.x | v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.y | v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x ^ scalar, - v.y ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar ^ v.x, - scalar ^ v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.x ^ v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x << scalar, - v.y << scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.y << v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar << v.x, - scalar << v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.x << v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.y << v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x >> scalar, - v.y >> scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.y >> v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar >> v.x, - scalar >> v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.x >> v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.y >> v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - ~v.x, - ~v.y); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) - { - return vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) - { - return vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y); - } -}//namespace glm diff --git a/external/glm/glm/detail/type_vec3.hpp b/external/glm/glm/detail/type_vec3.hpp deleted file mode 100644 index d83cde67..00000000 --- a/external/glm/glm/detail/type_vec3.hpp +++ /dev/null @@ -1,432 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec3.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<3, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<3, T, Q> type; - typedef vec<3, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# pragma warning(disable: 4324) // structure was padded due to alignment specifier -# endif -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y, z; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct{ T x, y, z; }; - struct{ T r, g, b; }; - struct{ T s, t, p; }; - - typename detail::storage<3, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p) - GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p) - GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p) -# endif - }; -# else - union { T x, r, s; }; - union { T y, g, t; }; - union { T z, b, p; }; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q) -# endif//GLM_CONFIG_SWIZZLE -# endif//GLM_LANG - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c); - - // -- Conversion scalar constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that) - { - *this = that(); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar) - { - *this = vec(v(), scalar); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) - { - *this = vec(scalar, v()); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec3.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/external/glm/glm/detail/type_vec3.inl b/external/glm/glm/detail/type_vec3.inl deleted file mode 100644 index 6532c9e6..00000000 --- a/external/glm/glm/detail/type_vec3.inl +++ /dev/null @@ -1,1068 +0,0 @@ -/// @ref core - -#include "compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0), z(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, Q> const& v) - : x(v.x), y(v.y), z(v.z) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, P> const& v) - : x(v.x), y(v.y), z(v.z) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T scalar) - : x(scalar), y(scalar), z(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T _x, T _y, T _z) - : x(_x), y(_y), z(_z) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - , z(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, Z _z) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, B _z) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(A _x, vec<2, B, P> const& _yz) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - this->z = v.z; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - this->z = static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - this->y += static_cast(scalar); - this->z += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.x); - this->z += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.y); - this->z += static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - this->y -= static_cast(scalar); - this->z -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.x); - this->z -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.y); - this->z -= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - this->y *= static_cast(scalar); - this->z *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.x); - this->z *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.y); - this->z *= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v) - { - this->x /= static_cast(v); - this->y /= static_cast(v); - this->z /= static_cast(v); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.x); - this->z /= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.y); - this->z /= static_cast(v.z); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator++() - { - ++this->x; - ++this->y; - ++this->z; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator--() - { - --this->x; - --this->y; - --this->z; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator++(int) - { - vec<3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator--(int) - { - vec<3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar) - { - this->x %= scalar; - this->y %= scalar; - this->z %= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= v.x; - this->y %= v.x; - this->z %= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v) - { - this->x %= v.x; - this->y %= v.y; - this->z %= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar) - { - this->x &= scalar; - this->y &= scalar; - this->z &= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= v.x; - this->y &= v.x; - this->z &= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v) - { - this->x &= v.x; - this->y &= v.y; - this->z &= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar) - { - this->x |= scalar; - this->y |= scalar; - this->z |= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= v.x; - this->y |= v.x; - this->z |= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v) - { - this->x |= v.x; - this->y |= v.y; - this->z |= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar) - { - this->x ^= scalar; - this->y ^= scalar; - this->z ^= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= v.x; - this->y ^= v.x; - this->z ^= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v) - { - this->x ^= v.x; - this->y ^= v.y; - this->z ^= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar) - { - this->x <<= scalar; - this->y <<= scalar; - this->z <<= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.x); - this->z <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.y); - this->z <<= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - this->y >>= static_cast(scalar); - this->z >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.x); - this->z >>= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.y); - this->z >>= static_cast(v.z); - return *this; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - -v.x, - -v.y, - -v.z); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x + scalar, - v.y + scalar, - v.z + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x + scalar.x, - v.y + scalar.x, - v.z + scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar + v.x, - scalar + v.y, - scalar + v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x + v.x, - scalar.x + v.y, - scalar.x + v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x + v2.x, - v1.y + v2.y, - v1.z + v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x - scalar, - v.y - scalar, - v.z - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x - scalar.x, - v.y - scalar.x, - v.z - scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar - v.x, - scalar - v.y, - scalar - v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x - v.x, - scalar.x - v.y, - scalar.x - v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x - v2.x, - v1.y - v2.y, - v1.z - v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x * scalar, - v.y * scalar, - v.z * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x * scalar.x, - v.y * scalar.x, - v.z * scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar * v.x, - scalar * v.y, - scalar * v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x * v.x, - scalar.x * v.y, - scalar.x * v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x * v2.x, - v1.y * v2.y, - v1.z * v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x / scalar, - v.y / scalar, - v.z / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x / scalar.x, - v.y / scalar.x, - v.z / scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar / v.x, - scalar / v.y, - scalar / v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x / v.x, - scalar.x / v.y, - scalar.x / v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x / v2.x, - v1.y / v2.y, - v1.z / v2.z); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x % scalar, - v.y % scalar, - v.z % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x % scalar.x, - v.y % scalar.x, - v.z % scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar % v.x, - scalar % v.y, - scalar % v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x % v.x, - scalar.x % v.y, - scalar.x % v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x % v2.x, - v1.y % v2.y, - v1.z % v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x & scalar, - v.y & scalar, - v.z & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x & scalar.x, - v.y & scalar.x, - v.z & scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar & v.x, - scalar & v.y, - scalar & v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x & v.x, - scalar.x & v.y, - scalar.x & v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x & v2.x, - v1.y & v2.y, - v1.z & v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x | scalar, - v.y | scalar, - v.z | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x | scalar.x, - v.y | scalar.x, - v.z | scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar | v.x, - scalar | v.y, - scalar | v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x | v.x, - scalar.x | v.y, - scalar.x | v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x | v2.x, - v1.y | v2.y, - v1.z | v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x ^ scalar, - v.y ^ scalar, - v.z ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x ^ scalar.x, - v.y ^ scalar.x, - v.z ^ scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar ^ v.x, - scalar ^ v.y, - scalar ^ v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x ^ v.x, - scalar.x ^ v.y, - scalar.x ^ v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.y, - v1.z ^ v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x << scalar, - v.y << scalar, - v.z << scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x << scalar.x, - v.y << scalar.x, - v.z << scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar << v.x, - scalar << v.y, - scalar << v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x << v.x, - scalar.x << v.y, - scalar.x << v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x << v2.x, - v1.y << v2.y, - v1.z << v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x >> scalar, - v.y >> scalar, - v.z >> scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x >> scalar.x, - v.y >> scalar.x, - v.z >> scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar >> v.x, - scalar >> v.y, - scalar >> v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x >> v.x, - scalar.x >> v.y, - scalar.x >> v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x >> v2.x, - v1.y >> v2.y, - v1.z >> v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - ~v.x, - ~v.y, - ~v.z); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y) && - detail::compute_equal::is_iec559>::call(v1.z, v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) - { - return vec<3, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) - { - return vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z); - } -}//namespace glm diff --git a/external/glm/glm/detail/type_vec4.hpp b/external/glm/glm/detail/type_vec4.hpp deleted file mode 100644 index 4a364346..00000000 --- a/external/glm/glm/detail/type_vec4.hpp +++ /dev/null @@ -1,505 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec4.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<4, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<4, T, Q> type; - typedef vec<4, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y, z, w; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct { T x, y, z, w; }; - struct { T r, g, b, a; }; - struct { T s, t, p, q; }; - - typename detail::storage<4, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q) - GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q) - GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q) -# endif - }; -# else - union { T x, r, s; }; - union { T y, g, t; }; - union { T z, b, p; }; - union { T w, a, q; }; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q) -# endif -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - typedef length_t length_type; - - /// Return the count of components of the vector - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, Q> const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w); - - // -- Conversion scalar constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _Y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, B _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<3, B, P> const& _yzw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that) - { - *this = that(); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u) - { - *this = vec<4, T, Q>(v(), u()); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) - { - *this = vec<4, T, Q>(x, y, v()); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w) - { - *this = vec<4, T, Q>(x, v(), w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w) - { - *this = vec<4, T, Q>(v(), z, w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w) - { - *this = vec<4, T, Q>(v(), w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v) - { - *this = vec<4, T, Q>(x, v()); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<4, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec4.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/external/glm/glm/detail/type_vec4.inl b/external/glm/glm/detail/type_vec4.inl deleted file mode 100644 index 3c212d98..00000000 --- a/external/glm/glm/detail/type_vec4.inl +++ /dev/null @@ -1,1140 +0,0 @@ -/// @ref core - -#include "compute_vector_relational.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_vec4_add - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); - } - }; - - template - struct compute_vec4_sub - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); - } - }; - - template - struct compute_vec4_mul - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); - } - }; - - template - struct compute_vec4_div - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w); - } - }; - - template - struct compute_vec4_mod - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w); - } - }; - - template - struct compute_vec4_and - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w); - } - }; - - template - struct compute_vec4_or - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w); - } - }; - - template - struct compute_vec4_xor - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w); - } - }; - - template - struct compute_vec4_shift_left - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w); - } - }; - - template - struct compute_vec4_shift_right - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w); - } - }; - - template - struct compute_vec4_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y) && - detail::compute_equal::is_iec559>::call(v1.z, v2.z) && - detail::compute_equal::is_iec559>::call(v1.w, v2.w); - } - }; - - template - struct compute_vec4_nequal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return !compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - }; - - template - struct compute_vec4_bitwise_not - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - return vec<4, T, Q>(~v.x, ~v.y, ~v.z, ~v.w); - } - }; -}//namespace detail - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0), z(0), w(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, Q> const& v) - : x(v.x), y(v.y), z(v.z), w(v.w) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, P> const& v) - : x(v.x), y(v.y), z(v.z), w(v.w) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T scalar) - : x(scalar), y(scalar), z(scalar), w(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T _x, T _y, T _z, T _w) - : x(_x), y(_y), z(_z), w(_w) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - , z(static_cast(v.x)) - , w(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, Z _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, C _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, C _w) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, B _y, vec<2, C, P> const& _zw) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, B _w) - : x(static_cast(_xyz.x)) - , y(static_cast(_xyz.y)) - , z(static_cast(_xyz.z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w) - : x(static_cast(_xyz.x)) - , y(static_cast(_xyz.y)) - , z(static_cast(_xyz.z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<3, B, P> const& _yzw) - : x(static_cast(_x)) - , y(static_cast(_yzw.x)) - , z(static_cast(_yzw.y)) - , w(static_cast(_yzw.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw) - : x(static_cast(_x.x)) - , y(static_cast(_yzw.x)) - , z(static_cast(_yzw.y)) - , w(static_cast(_yzw.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - , w(static_cast(v.w)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - this->z = v.z; - this->w = v.w; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - this->z = static_cast(v.z); - this->w = static_cast(v.w); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v))); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator++() - { - ++this->x; - ++this->y; - ++this->z; - ++this->w; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator--() - { - --this->x; - --this->y; - --this->z; - --this->w; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator++(int) - { - vec<4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator--(int) - { - vec<4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v) - { - return vec<4, T, Q>(0) -= v; - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) += scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) += v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(v) += scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v2) += v1; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) += v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) -= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) -= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) *= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) *= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(v) *= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v2) *= v1; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) *= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) /= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) /= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) /= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) /= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) /= v2; - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) %= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) %= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) %= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar.x) %= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) %= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) &= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<4, T, Q>(v) &= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) &= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) &= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) &= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) |= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) |= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) |= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) |= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) |= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) ^= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) ^= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) ^= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) ^= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) ^= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) <<= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) <<= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) <<= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) <<= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) <<= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) >>= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) >>= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) >>= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) >>= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) >>= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v) - { - return detail::compute_vec4_bitwise_not::value, sizeof(T) * 8, detail::is_aligned::value>::call(v); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return detail::compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return detail::compute_vec4_nequal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) - { - return vec<4, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) - { - return vec<4, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_vec4_simd.inl" -#endif diff --git a/external/glm/glm/detail/type_vec4_simd.inl b/external/glm/glm/detail/type_vec4_simd.inl deleted file mode 100644 index 29559b53..00000000 --- a/external/glm/glm/detail/type_vec4_simd.inl +++ /dev/null @@ -1,775 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - struct _swizzle_base1<4, float, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, float, Q> operator ()() const - { - __m128 data = *reinterpret_cast<__m128 const*>(&this->_buffer); - - vec<4, float, Q> Result; -# if GLM_ARCH & GLM_ARCH_AVX_BIT - Result.data = _mm_permute_ps(data, _MM_SHUFFLE(E3, E2, E1, E0)); -# else - Result.data = _mm_shuffle_ps(data, data, _MM_SHUFFLE(E3, E2, E1, E0)); -# endif - return Result; - } - }; - - template - struct _swizzle_base1<4, int, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, int, Q> operator ()() const - { - __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - - vec<4, int, Q> Result; - Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); - return Result; - } - }; - - template - struct _swizzle_base1<4, uint, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, uint, Q> operator ()() const - { - __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - - vec<4, uint, Q> Result; - Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); - return Result; - } - }; -# endif// GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - template - struct compute_vec4_add - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_add_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_add - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_add_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_sub - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_sub_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_sub - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_sub_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_mul - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_mul_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_mul - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_mul_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_div - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_div_ps(a.data, b.data); - return Result; - } - }; - - # if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_div - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_div_pd(a.data, b.data); - return Result; - } - }; -# endif - - template<> - struct compute_vec4_div - { - static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& a, vec<4, float, aligned_lowp> const& b) - { - vec<4, float, aligned_lowp> Result; - Result.data = _mm_mul_ps(a.data, _mm_rcp_ps(b.data)); - return Result; - } - }; - - template - struct compute_vec4_and - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_and_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_and - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_and_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_or - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_or_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_or - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_or_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_xor - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_xor_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_xor - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_xor_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_shift_left - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_sll_epi32(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_shift_left - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_sll_epi64(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_shift_right - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_srl_epi32(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_shift_right - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_srl_epi64(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_bitwise_not - { - static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - vec<4, T, Q> Result; - Result.data = _mm_xor_si128(v.data, _mm_set1_epi32(-1)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_bitwise_not - { - static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - vec<4, T, Q> Result; - Result.data = _mm256_xor_si256(v.data, _mm_set1_epi32(-1)); - return Result; - } - }; -# endif - - template - struct compute_vec4_equal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return _mm_movemask_ps(_mm_cmpeq_ps(v1.data, v2.data)) != 0; - } - }; - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - template - struct compute_vec4_equal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - //return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0; - __m128i neq = _mm_xor_si128(v1.data, v2.data); - return _mm_test_all_zeros(neq, neq) == 0; - } - }; -# endif - - template - struct compute_vec4_nequal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) != 0; - } - }; - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - template - struct compute_vec4_nequal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - //return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0; - __m128i neq = _mm_xor_si128(v1.data, v2.data); - return _mm_test_all_zeros(neq, neq) != 0; - } - }; -# endif -}//namespace detail - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_lowp>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_mediump>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_highp>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} -# endif - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_lowp>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_mediump>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_highp>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} -# endif - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - -#if GLM_ARCH & GLM_ARCH_NEON_BIT -namespace glm { -namespace detail { - - template - struct compute_vec4_add - { - static - vec<4, float, Q> - call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vaddq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_add - { - static - vec<4, uint, Q> - call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vaddq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_add - { - static - vec<4, int, Q> - call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vaddq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vsubq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vsubq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, int, Q> Result; - Result.data = vsubq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vmulq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vmulq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, int, Q> Result; - Result.data = vmulq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_div - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vdivq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - uint32x4_t cmp = vceqq_f32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - uint32x4_t cmp = vceqq_u32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - uint32x4_t cmp = vceqq_s32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - -}//namespace detail - -#if !GLM_CONFIG_XYZW_ONLY - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_lowp>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_mediump>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_highp>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, float, aligned_highp>& rhs) : - data(rhs.data) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, int, aligned_highp>& rhs) : - data(vcvtq_f32_s32(rhs.data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, uint, aligned_highp>& rhs) : - data(vcvtq_f32_u32(rhs.data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_lowp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_mediump>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_highp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_lowp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_mediump>(_x, _y, _z, _w).data)) - {} - - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_highp>(_x, _y, _z, _w).data)) - {} - -#endif -}//namespace glm - -#endif diff --git a/external/glm/glm/exponential.hpp b/external/glm/glm/exponential.hpp deleted file mode 100644 index f8fb886f..00000000 --- a/external/glm/glm/exponential.hpp +++ /dev/null @@ -1,110 +0,0 @@ -/// @ref core -/// @file glm/exponential.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions -/// -/// @defgroup core_func_exponential Exponential functions -/// @ingroup core -/// -/// Provides GLSL exponential functions -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/type_vec1.hpp" -#include "detail/type_vec2.hpp" -#include "detail/type_vec3.hpp" -#include "detail/type_vec4.hpp" -#include - -namespace glm -{ - /// @addtogroup core_func_exponential - /// @{ - - /// Returns 'base' raised to the power 'exponent'. - /// - /// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @param exponent Floating point value representing the 'exponent'. - /// - /// @see GLSL pow man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec pow(vec const& base, vec const& exponent); - - /// Returns the natural exponentiation of x, i.e., e^x. - /// - /// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL exp man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec exp(vec const& v); - - /// Returns the natural logarithm of v, i.e., - /// returns the value y which satisfies the equation x = e^y. - /// Results are undefined if v <= 0. - /// - /// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL log man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec log(vec const& v); - - /// Returns 2 raised to the v power. - /// - /// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL exp2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec exp2(vec const& v); - - /// Returns the base 2 log of x, i.e., returns the value y, - /// which satisfies the equation x = 2 ^ y. - /// - /// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL log2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec log2(vec const& v); - - /// Returns the positive square root of v. - /// - /// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL sqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec sqrt(vec const& v); - - /// Returns the reciprocal of the positive square root of v. - /// - /// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL inversesqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec inversesqrt(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_exponential.inl" diff --git a/external/glm/glm/ext.hpp b/external/glm/glm/ext.hpp deleted file mode 100644 index 3249fb99..00000000 --- a/external/glm/glm/ext.hpp +++ /dev/null @@ -1,253 +0,0 @@ -/// @file glm/ext.hpp -/// -/// @ref core (Dependence) - -#include "detail/setup.hpp" - -#pragma once - -#include "glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED) -# define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED -# pragma message("GLM: All extensions included (not recommended)") -#endif//GLM_MESSAGES - -#include "./ext/matrix_clip_space.hpp" -#include "./ext/matrix_common.hpp" - -#include "./ext/matrix_double2x2.hpp" -#include "./ext/matrix_double2x2_precision.hpp" -#include "./ext/matrix_double2x3.hpp" -#include "./ext/matrix_double2x3_precision.hpp" -#include "./ext/matrix_double2x4.hpp" -#include "./ext/matrix_double2x4_precision.hpp" -#include "./ext/matrix_double3x2.hpp" -#include "./ext/matrix_double3x2_precision.hpp" -#include "./ext/matrix_double3x3.hpp" -#include "./ext/matrix_double3x3_precision.hpp" -#include "./ext/matrix_double3x4.hpp" -#include "./ext/matrix_double3x4_precision.hpp" -#include "./ext/matrix_double4x2.hpp" -#include "./ext/matrix_double4x2_precision.hpp" -#include "./ext/matrix_double4x3.hpp" -#include "./ext/matrix_double4x3_precision.hpp" -#include "./ext/matrix_double4x4.hpp" -#include "./ext/matrix_double4x4_precision.hpp" - -#include "./ext/matrix_float2x2.hpp" -#include "./ext/matrix_float2x2_precision.hpp" -#include "./ext/matrix_float2x3.hpp" -#include "./ext/matrix_float2x3_precision.hpp" -#include "./ext/matrix_float2x4.hpp" -#include "./ext/matrix_float2x4_precision.hpp" -#include "./ext/matrix_float3x2.hpp" -#include "./ext/matrix_float3x2_precision.hpp" -#include "./ext/matrix_float3x3.hpp" -#include "./ext/matrix_float3x3_precision.hpp" -#include "./ext/matrix_float3x4.hpp" -#include "./ext/matrix_float3x4_precision.hpp" -#include "./ext/matrix_float4x2.hpp" -#include "./ext/matrix_float4x2_precision.hpp" -#include "./ext/matrix_float4x3.hpp" -#include "./ext/matrix_float4x3_precision.hpp" -#include "./ext/matrix_float4x4.hpp" -#include "./ext/matrix_float4x4_precision.hpp" - -#include "./ext/matrix_int2x2.hpp" -#include "./ext/matrix_int2x2_sized.hpp" -#include "./ext/matrix_int2x3.hpp" -#include "./ext/matrix_int2x3_sized.hpp" -#include "./ext/matrix_int2x4.hpp" -#include "./ext/matrix_int2x4_sized.hpp" -#include "./ext/matrix_int3x2.hpp" -#include "./ext/matrix_int3x2_sized.hpp" -#include "./ext/matrix_int3x3.hpp" -#include "./ext/matrix_int3x3_sized.hpp" -#include "./ext/matrix_int3x4.hpp" -#include "./ext/matrix_int3x4_sized.hpp" -#include "./ext/matrix_int4x2.hpp" -#include "./ext/matrix_int4x2_sized.hpp" -#include "./ext/matrix_int4x3.hpp" -#include "./ext/matrix_int4x3_sized.hpp" -#include "./ext/matrix_int4x4.hpp" -#include "./ext/matrix_int4x4_sized.hpp" - -#include "./ext/matrix_uint2x2.hpp" -#include "./ext/matrix_uint2x2_sized.hpp" -#include "./ext/matrix_uint2x3.hpp" -#include "./ext/matrix_uint2x3_sized.hpp" -#include "./ext/matrix_uint2x4.hpp" -#include "./ext/matrix_uint2x4_sized.hpp" -#include "./ext/matrix_uint3x2.hpp" -#include "./ext/matrix_uint3x2_sized.hpp" -#include "./ext/matrix_uint3x3.hpp" -#include "./ext/matrix_uint3x3_sized.hpp" -#include "./ext/matrix_uint3x4.hpp" -#include "./ext/matrix_uint3x4_sized.hpp" -#include "./ext/matrix_uint4x2.hpp" -#include "./ext/matrix_uint4x2_sized.hpp" -#include "./ext/matrix_uint4x3.hpp" -#include "./ext/matrix_uint4x3_sized.hpp" -#include "./ext/matrix_uint4x4.hpp" -#include "./ext/matrix_uint4x4_sized.hpp" - -#include "./ext/matrix_projection.hpp" -#include "./ext/matrix_relational.hpp" -#include "./ext/matrix_transform.hpp" - -#include "./ext/quaternion_common.hpp" -#include "./ext/quaternion_double.hpp" -#include "./ext/quaternion_double_precision.hpp" -#include "./ext/quaternion_float.hpp" -#include "./ext/quaternion_float_precision.hpp" -#include "./ext/quaternion_exponential.hpp" -#include "./ext/quaternion_geometric.hpp" -#include "./ext/quaternion_relational.hpp" -#include "./ext/quaternion_transform.hpp" -#include "./ext/quaternion_trigonometric.hpp" - -#include "./ext/scalar_common.hpp" -#include "./ext/scalar_constants.hpp" -#include "./ext/scalar_integer.hpp" -#include "./ext/scalar_packing.hpp" -#include "./ext/scalar_relational.hpp" -#include "./ext/scalar_ulp.hpp" - -#include "./ext/scalar_int_sized.hpp" -#include "./ext/scalar_uint_sized.hpp" - -#include "./ext/vector_common.hpp" -#include "./ext/vector_integer.hpp" -#include "./ext/vector_packing.hpp" -#include "./ext/vector_relational.hpp" -#include "./ext/vector_ulp.hpp" - -#include "./ext/vector_bool1.hpp" -#include "./ext/vector_bool1_precision.hpp" -#include "./ext/vector_bool2.hpp" -#include "./ext/vector_bool2_precision.hpp" -#include "./ext/vector_bool3.hpp" -#include "./ext/vector_bool3_precision.hpp" -#include "./ext/vector_bool4.hpp" -#include "./ext/vector_bool4_precision.hpp" - -#include "./ext/vector_double1.hpp" -#include "./ext/vector_double1_precision.hpp" -#include "./ext/vector_double2.hpp" -#include "./ext/vector_double2_precision.hpp" -#include "./ext/vector_double3.hpp" -#include "./ext/vector_double3_precision.hpp" -#include "./ext/vector_double4.hpp" -#include "./ext/vector_double4_precision.hpp" - -#include "./ext/vector_float1.hpp" -#include "./ext/vector_float1_precision.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float2_precision.hpp" -#include "./ext/vector_float3.hpp" -#include "./ext/vector_float3_precision.hpp" -#include "./ext/vector_float4.hpp" -#include "./ext/vector_float4_precision.hpp" - -#include "./ext/vector_int1.hpp" -#include "./ext/vector_int1_sized.hpp" -#include "./ext/vector_int2.hpp" -#include "./ext/vector_int2_sized.hpp" -#include "./ext/vector_int3.hpp" -#include "./ext/vector_int3_sized.hpp" -#include "./ext/vector_int4.hpp" -#include "./ext/vector_int4_sized.hpp" - -#include "./ext/vector_uint1.hpp" -#include "./ext/vector_uint1_sized.hpp" -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_uint2_sized.hpp" -#include "./ext/vector_uint3.hpp" -#include "./ext/vector_uint3_sized.hpp" -#include "./ext/vector_uint4.hpp" -#include "./ext/vector_uint4_sized.hpp" - -#include "./gtc/bitfield.hpp" -#include "./gtc/color_space.hpp" -#include "./gtc/constants.hpp" -#include "./gtc/epsilon.hpp" -#include "./gtc/integer.hpp" -#include "./gtc/matrix_access.hpp" -#include "./gtc/matrix_integer.hpp" -#include "./gtc/matrix_inverse.hpp" -#include "./gtc/matrix_transform.hpp" -#include "./gtc/noise.hpp" -#include "./gtc/packing.hpp" -#include "./gtc/quaternion.hpp" -#include "./gtc/random.hpp" -#include "./gtc/reciprocal.hpp" -#include "./gtc/round.hpp" -#include "./gtc/type_precision.hpp" -#include "./gtc/type_ptr.hpp" -#include "./gtc/ulp.hpp" -#include "./gtc/vec1.hpp" -#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# include "./gtc/type_aligned.hpp" -#endif - -#ifdef GLM_ENABLE_EXPERIMENTAL -#include "./gtx/associated_min_max.hpp" -#include "./gtx/bit.hpp" -#include "./gtx/closest_point.hpp" -#include "./gtx/color_encoding.hpp" -#include "./gtx/color_space.hpp" -#include "./gtx/color_space_YCoCg.hpp" -#include "./gtx/compatibility.hpp" -#include "./gtx/component_wise.hpp" -#include "./gtx/dual_quaternion.hpp" -#include "./gtx/euler_angles.hpp" -#include "./gtx/extend.hpp" -#include "./gtx/extended_min_max.hpp" -#include "./gtx/fast_exponential.hpp" -#include "./gtx/fast_square_root.hpp" -#include "./gtx/fast_trigonometry.hpp" -#include "./gtx/functions.hpp" -#include "./gtx/gradient_paint.hpp" -#include "./gtx/handed_coordinate_space.hpp" -#include "./gtx/integer.hpp" -#include "./gtx/intersect.hpp" -#include "./gtx/log_base.hpp" -#include "./gtx/matrix_cross_product.hpp" -#include "./gtx/matrix_interpolation.hpp" -#include "./gtx/matrix_major_storage.hpp" -#include "./gtx/matrix_operation.hpp" -#include "./gtx/matrix_query.hpp" -#include "./gtx/mixed_product.hpp" -#include "./gtx/norm.hpp" -#include "./gtx/normal.hpp" -#include "./gtx/normalize_dot.hpp" -#include "./gtx/number_precision.hpp" -#include "./gtx/optimum_pow.hpp" -#include "./gtx/orthonormalize.hpp" -#include "./gtx/perpendicular.hpp" -#include "./gtx/polar_coordinates.hpp" -#include "./gtx/projection.hpp" -#include "./gtx/quaternion.hpp" -#include "./gtx/raw_data.hpp" -#include "./gtx/rotate_vector.hpp" -#include "./gtx/spline.hpp" -#include "./gtx/std_based_type.hpp" -#if !(GLM_COMPILER & GLM_COMPILER_CUDA) -# include "./gtx/string_cast.hpp" -#endif -#include "./gtx/transform.hpp" -#include "./gtx/transform2.hpp" -#include "./gtx/vec_swizzle.hpp" -#include "./gtx/vector_angle.hpp" -#include "./gtx/vector_query.hpp" -#include "./gtx/wrap.hpp" - -#if GLM_HAS_TEMPLATE_ALIASES -# include "./gtx/scalar_multiplication.hpp" -#endif - -#if GLM_HAS_RANGE_FOR -# include "./gtx/range.hpp" -#endif -#endif//GLM_ENABLE_EXPERIMENTAL diff --git a/external/glm/glm/ext/matrix_clip_space.hpp b/external/glm/glm/ext/matrix_clip_space.hpp deleted file mode 100644 index c3874f2f..00000000 --- a/external/glm/glm/ext/matrix_clip_space.hpp +++ /dev/null @@ -1,522 +0,0 @@ -/// @ref ext_matrix_clip_space -/// @file glm/ext/matrix_clip_space.hpp -/// -/// @defgroup ext_matrix_clip_space GLM_EXT_matrix_clip_space -/// @ingroup ext -/// -/// Defines functions that generate clip space transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_transform -/// @see ext_matrix_projection - -#pragma once - -// Dependencies -#include "../ext/scalar_constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_clip_space extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_clip_space - /// @{ - - /// Creates a matrix for projecting two-dimensional coordinates onto the screen. - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top, T const& zNear, T const& zFar) - /// @see gluOrtho2D man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( - T left, T right, T bottom, T top); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_ZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_NO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_ZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_NO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoNO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - /// @see glOrtho man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a left handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_ZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a left handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_NO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_ZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_NO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumNO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a left handed frustum matrix. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @tparam T A floating-point scalar type - /// @see glFrustum man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustum( - T left, T right, T bottom, T top, T near, T far); - - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_ZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_NO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_ZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_NO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveNO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param fovy Specifies the field of view angle in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - /// @see gluPerspective man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspective( - T fovy, T aspect, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_ZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_NO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_ZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_NO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovNO( - T fov, T width, T height, T near, T far); - - /// Builds a right handed perspective projection matrix based on a field of view. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH( - T fov, T width, T height, T near, T far); - - /// Builds a left handed perspective projection matrix based on a field of view. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFov( - T fov, T width, T height, T near, T far); - - /// Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveLH( - T fovy, T aspect, T near); - - /// Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveRH( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspective( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param ep Epsilon - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( - T fovy, T aspect, T near, T ep); - - /// @} -}//namespace glm - -#include "matrix_clip_space.inl" diff --git a/external/glm/glm/ext/matrix_clip_space.inl b/external/glm/glm/ext/matrix_clip_space.inl deleted file mode 100644 index 7e4df330..00000000 --- a/external/glm/glm/ext/matrix_clip_space.inl +++ /dev/null @@ -1,555 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top) - { - mat<4, 4, T, defaultp> Result(static_cast(1)); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(1); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = static_cast(1) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - zNear / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = static_cast(2) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - (zFar + zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(1) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - zNear / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(2) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - (zFar + zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoZO(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoNO(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# endif - - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = farVal / (farVal - nearVal); - Result[2][3] = static_cast(1); - Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = (farVal + nearVal) / (farVal - nearVal); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = farVal / (nearVal - farVal); - Result[2][3] = static_cast(-1); - Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = - (farVal + nearVal) / (farVal - nearVal); - Result[2][3] = static_cast(-1); - Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumNO(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustum(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_ZO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = zFar / (zNear - zFar); - Result[2][3] = - static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_NO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = - (zFar + zNear) / (zFar - zNear); - Result[2][3] = - static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_ZO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = zFar / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_NO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = (zFar + zNear) / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveZO(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveNO(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# endif - - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_ZO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = zFar / (zNear - zFar); - Result[2][3] = - static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_NO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = - (zFar + zNear) / (zFar - zNear); - Result[2][3] = - static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_ZO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = zFar / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_NO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = (zFar + zNear) / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovZO(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovNO(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = - static_cast(1); - Result[2][3] = - static_cast(1); - Result[3][2] = - static_cast(2) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(T(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = static_cast(1); - Result[2][3] = static_cast(1); - Result[3][2] = - static_cast(2) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspective(T fovy, T aspect, T zNear) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return infinitePerspectiveLH(fovy, aspect, zNear); -# else - return infinitePerspectiveRH(fovy, aspect, zNear); -# endif - } - - // Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = ep - static_cast(1); - Result[2][3] = static_cast(-1); - Result[3][2] = (ep - static_cast(2)) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear) - { - return tweakedInfinitePerspective(fovy, aspect, zNear, epsilon()); - } -}//namespace glm diff --git a/external/glm/glm/ext/matrix_common.hpp b/external/glm/glm/ext/matrix_common.hpp deleted file mode 100644 index 05c37991..00000000 --- a/external/glm/glm/ext/matrix_common.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_matrix_common -/// @file glm/ext/matrix_common.hpp -/// -/// @defgroup ext_matrix_common GLM_EXT_matrix_common -/// @ingroup ext -/// -/// Defines functions for common matrix operations. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_common - -#pragma once - -#include "../detail/qualifier.hpp" -#include "../detail/_fixes.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_common - /// @{ - - template - GLM_FUNC_DECL mat mix(mat const& x, mat const& y, mat const& a); - - template - GLM_FUNC_DECL mat mix(mat const& x, mat const& y, U a); - - /// @} -}//namespace glm - -#include "matrix_common.inl" diff --git a/external/glm/glm/ext/matrix_common.inl b/external/glm/glm/ext/matrix_common.inl deleted file mode 100644 index 9d508485..00000000 --- a/external/glm/glm/ext/matrix_common.inl +++ /dev/null @@ -1,16 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, U a) - { - return mat(x) * (static_cast(1) - a) + mat(y) * a; - } - - template - GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, mat const& a) - { - return matrixCompMult(mat(x), static_cast(1) - a) + matrixCompMult(mat(y), a); - } -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double2x2.hpp b/external/glm/glm/ext/matrix_double2x2.hpp deleted file mode 100644 index 94dca54b..00000000 --- a/external/glm/glm/ext/matrix_double2x2.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x2.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, double, defaultp> dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, double, defaultp> dmat2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double2x2_precision.hpp b/external/glm/glm/ext/matrix_double2x2_precision.hpp deleted file mode 100644 index 9e2c174e..00000000 --- a/external/glm/glm/ext/matrix_double2x2_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, lowp> lowp_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, mediump> mediump_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, highp> highp_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, lowp> lowp_dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, mediump> mediump_dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, highp> highp_dmat2x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double2x3.hpp b/external/glm/glm/ext/matrix_double2x3.hpp deleted file mode 100644 index bfef87a6..00000000 --- a/external/glm/glm/ext/matrix_double2x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x3.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 3, double, defaultp> dmat2x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double2x3_precision.hpp b/external/glm/glm/ext/matrix_double2x3_precision.hpp deleted file mode 100644 index 098fb604..00000000 --- a/external/glm/glm/ext/matrix_double2x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x3_precision.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, lowp> lowp_dmat2x3; - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, mediump> mediump_dmat2x3; - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, highp> highp_dmat2x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double2x4.hpp b/external/glm/glm/ext/matrix_double2x4.hpp deleted file mode 100644 index 499284bc..00000000 --- a/external/glm/glm/ext/matrix_double2x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x4.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 4, double, defaultp> dmat2x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double2x4_precision.hpp b/external/glm/glm/ext/matrix_double2x4_precision.hpp deleted file mode 100644 index 9b61ebce..00000000 --- a/external/glm/glm/ext/matrix_double2x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x4_precision.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, lowp> lowp_dmat2x4; - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, mediump> mediump_dmat2x4; - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, highp> highp_dmat2x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double3x2.hpp b/external/glm/glm/ext/matrix_double3x2.hpp deleted file mode 100644 index dd23f36c..00000000 --- a/external/glm/glm/ext/matrix_double3x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x2.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 2, double, defaultp> dmat3x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double3x2_precision.hpp b/external/glm/glm/ext/matrix_double3x2_precision.hpp deleted file mode 100644 index 068d9e91..00000000 --- a/external/glm/glm/ext/matrix_double3x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x2_precision.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, lowp> lowp_dmat3x2; - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, mediump> mediump_dmat3x2; - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, highp> highp_dmat3x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double3x3.hpp b/external/glm/glm/ext/matrix_double3x3.hpp deleted file mode 100644 index 53572b73..00000000 --- a/external/glm/glm/ext/matrix_double3x3.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x3.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, double, defaultp> dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, double, defaultp> dmat3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double3x3_precision.hpp b/external/glm/glm/ext/matrix_double3x3_precision.hpp deleted file mode 100644 index 8691e780..00000000 --- a/external/glm/glm/ext/matrix_double3x3_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x3_precision.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, lowp> lowp_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, mediump> mediump_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, highp> highp_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, lowp> lowp_dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, mediump> mediump_dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, highp> highp_dmat3x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double3x4.hpp b/external/glm/glm/ext/matrix_double3x4.hpp deleted file mode 100644 index c572d637..00000000 --- a/external/glm/glm/ext/matrix_double3x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x4.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 4, double, defaultp> dmat3x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double3x4_precision.hpp b/external/glm/glm/ext/matrix_double3x4_precision.hpp deleted file mode 100644 index f040217e..00000000 --- a/external/glm/glm/ext/matrix_double3x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x4_precision.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, lowp> lowp_dmat3x4; - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, mediump> mediump_dmat3x4; - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, highp> highp_dmat3x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double4x2.hpp b/external/glm/glm/ext/matrix_double4x2.hpp deleted file mode 100644 index 9b229f47..00000000 --- a/external/glm/glm/ext/matrix_double4x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x2.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 2, double, defaultp> dmat4x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double4x2_precision.hpp b/external/glm/glm/ext/matrix_double4x2_precision.hpp deleted file mode 100644 index 6ad18ba9..00000000 --- a/external/glm/glm/ext/matrix_double4x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x2_precision.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, lowp> lowp_dmat4x2; - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, mediump> mediump_dmat4x2; - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, highp> highp_dmat4x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double4x3.hpp b/external/glm/glm/ext/matrix_double4x3.hpp deleted file mode 100644 index dca4cf95..00000000 --- a/external/glm/glm/ext/matrix_double4x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x3.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 3, double, defaultp> dmat4x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double4x3_precision.hpp b/external/glm/glm/ext/matrix_double4x3_precision.hpp deleted file mode 100644 index f7371de8..00000000 --- a/external/glm/glm/ext/matrix_double4x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x3_precision.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, lowp> lowp_dmat4x3; - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, mediump> mediump_dmat4x3; - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, highp> highp_dmat4x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double4x4.hpp b/external/glm/glm/ext/matrix_double4x4.hpp deleted file mode 100644 index 81e1bf65..00000000 --- a/external/glm/glm/ext/matrix_double4x4.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x4.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, double, defaultp> dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, double, defaultp> dmat4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_double4x4_precision.hpp b/external/glm/glm/ext/matrix_double4x4_precision.hpp deleted file mode 100644 index 4c36a848..00000000 --- a/external/glm/glm/ext/matrix_double4x4_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x4_precision.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, lowp> lowp_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, mediump> mediump_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, highp> highp_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, lowp> lowp_dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, mediump> mediump_dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, highp> highp_dmat4x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float2x2.hpp b/external/glm/glm/ext/matrix_float2x2.hpp deleted file mode 100644 index 53df921f..00000000 --- a/external/glm/glm/ext/matrix_float2x2.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x2.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, float, defaultp> mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, float, defaultp> mat2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float2x2_precision.hpp b/external/glm/glm/ext/matrix_float2x2_precision.hpp deleted file mode 100644 index 898b6db7..00000000 --- a/external/glm/glm/ext/matrix_float2x2_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, lowp> lowp_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, mediump> mediump_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, highp> highp_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, lowp> lowp_mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, mediump> mediump_mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, highp> highp_mat2x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float2x3.hpp b/external/glm/glm/ext/matrix_float2x3.hpp deleted file mode 100644 index 6f68822d..00000000 --- a/external/glm/glm/ext/matrix_float2x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x3.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 3, float, defaultp> mat2x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float2x3_precision.hpp b/external/glm/glm/ext/matrix_float2x3_precision.hpp deleted file mode 100644 index 50c10324..00000000 --- a/external/glm/glm/ext/matrix_float2x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x3_precision.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, lowp> lowp_mat2x3; - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, mediump> mediump_mat2x3; - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, highp> highp_mat2x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float2x4.hpp b/external/glm/glm/ext/matrix_float2x4.hpp deleted file mode 100644 index 30f30de3..00000000 --- a/external/glm/glm/ext/matrix_float2x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x4.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 4, float, defaultp> mat2x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float2x4_precision.hpp b/external/glm/glm/ext/matrix_float2x4_precision.hpp deleted file mode 100644 index 079d6382..00000000 --- a/external/glm/glm/ext/matrix_float2x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x4_precision.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, lowp> lowp_mat2x4; - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, mediump> mediump_mat2x4; - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, highp> highp_mat2x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float3x2.hpp b/external/glm/glm/ext/matrix_float3x2.hpp deleted file mode 100644 index d39dd2fe..00000000 --- a/external/glm/glm/ext/matrix_float3x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x2.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core - /// @{ - - /// 3 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 2, float, defaultp> mat3x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float3x2_precision.hpp b/external/glm/glm/ext/matrix_float3x2_precision.hpp deleted file mode 100644 index 8572c2a1..00000000 --- a/external/glm/glm/ext/matrix_float3x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x2_precision.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, lowp> lowp_mat3x2; - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, mediump> mediump_mat3x2; - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, highp> highp_mat3x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float3x3.hpp b/external/glm/glm/ext/matrix_float3x3.hpp deleted file mode 100644 index 177d809f..00000000 --- a/external/glm/glm/ext/matrix_float3x3.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x3.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, float, defaultp> mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, float, defaultp> mat3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float3x3_precision.hpp b/external/glm/glm/ext/matrix_float3x3_precision.hpp deleted file mode 100644 index 8a900c16..00000000 --- a/external/glm/glm/ext/matrix_float3x3_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x3_precision.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, lowp> lowp_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, mediump> mediump_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, highp> highp_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, lowp> lowp_mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, mediump> mediump_mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, highp> highp_mat3x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float3x4.hpp b/external/glm/glm/ext/matrix_float3x4.hpp deleted file mode 100644 index 64b8459d..00000000 --- a/external/glm/glm/ext/matrix_float3x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x4.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 4, float, defaultp> mat3x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float3x4_precision.hpp b/external/glm/glm/ext/matrix_float3x4_precision.hpp deleted file mode 100644 index bc36bf13..00000000 --- a/external/glm/glm/ext/matrix_float3x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x4_precision.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, lowp> lowp_mat3x4; - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, mediump> mediump_mat3x4; - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, highp> highp_mat3x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float4x2.hpp b/external/glm/glm/ext/matrix_float4x2.hpp deleted file mode 100644 index 1ed5227b..00000000 --- a/external/glm/glm/ext/matrix_float4x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x2.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 2, float, defaultp> mat4x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float4x2_precision.hpp b/external/glm/glm/ext/matrix_float4x2_precision.hpp deleted file mode 100644 index 88fd0696..00000000 --- a/external/glm/glm/ext/matrix_float4x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, lowp> lowp_mat4x2; - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, mediump> mediump_mat4x2; - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, highp> highp_mat4x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float4x3.hpp b/external/glm/glm/ext/matrix_float4x3.hpp deleted file mode 100644 index 5dbe7657..00000000 --- a/external/glm/glm/ext/matrix_float4x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x3.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 3, float, defaultp> mat4x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float4x3_precision.hpp b/external/glm/glm/ext/matrix_float4x3_precision.hpp deleted file mode 100644 index 846ed4fc..00000000 --- a/external/glm/glm/ext/matrix_float4x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x3_precision.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, lowp> lowp_mat4x3; - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, mediump> mediump_mat4x3; - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, highp> highp_mat4x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float4x4.hpp b/external/glm/glm/ext/matrix_float4x4.hpp deleted file mode 100644 index 5ba111de..00000000 --- a/external/glm/glm/ext/matrix_float4x4.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x4.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @ingroup core_matrix - /// @{ - - /// 4 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, float, defaultp> mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, float, defaultp> mat4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_float4x4_precision.hpp b/external/glm/glm/ext/matrix_float4x4_precision.hpp deleted file mode 100644 index 597149bc..00000000 --- a/external/glm/glm/ext/matrix_float4x4_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x4_precision.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, lowp> lowp_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, mediump> mediump_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, highp> highp_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, lowp> lowp_mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, mediump> mediump_mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, highp> highp_mat4x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int2x2.hpp b/external/glm/glm/ext/matrix_int2x2.hpp deleted file mode 100644 index c6aa0686..00000000 --- a/external/glm/glm/ext/matrix_int2x2.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_int2x2 -/// @file glm/ext/matrix_int2x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x2 GLM_EXT_matrix_int2x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x2 - /// @{ - - /// Signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2 - typedef mat<2, 2, int, defaultp> imat2x2; - - /// Signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2 - typedef mat<2, 2, int, defaultp> imat2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int2x2_sized.hpp b/external/glm/glm/ext/matrix_int2x2_sized.hpp deleted file mode 100644 index 70c0c210..00000000 --- a/external/glm/glm/ext/matrix_int2x2_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_int2x2_sized -/// @file glm/ext/matrix_int2x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x2_sized GLM_EXT_matrix_int2x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x2_sized - /// @{ - - /// 8 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int8, defaultp> i8mat2x2; - - /// 16 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int16, defaultp> i16mat2x2; - - /// 32 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int32, defaultp> i32mat2x2; - - /// 64 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int64, defaultp> i64mat2x2; - - - /// 8 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int8, defaultp> i8mat2; - - /// 16 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int16, defaultp> i16mat2; - - /// 32 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int32, defaultp> i32mat2; - - /// 64 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int64, defaultp> i64mat2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int2x3.hpp b/external/glm/glm/ext/matrix_int2x3.hpp deleted file mode 100644 index aee415ca..00000000 --- a/external/glm/glm/ext/matrix_int2x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int2x3 -/// @file glm/ext/matrix_int2x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_int2x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x3 - /// @{ - - /// Signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3 - typedef mat<2, 3, int, defaultp> imat2x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int2x3_sized.hpp b/external/glm/glm/ext/matrix_int2x3_sized.hpp deleted file mode 100644 index b5526fe5..00000000 --- a/external/glm/glm/ext/matrix_int2x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int2x3_sized -/// @file glm/ext/matrix_int2x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3_sized GLM_EXT_matrix_int2x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x3_sized - /// @{ - - /// 8 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int8, defaultp> i8mat2x3; - - /// 16 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int16, defaultp> i16mat2x3; - - /// 32 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int32, defaultp> i32mat2x3; - - /// 64 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int64, defaultp> i64mat2x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int2x4.hpp b/external/glm/glm/ext/matrix_int2x4.hpp deleted file mode 100644 index 4f36331d..00000000 --- a/external/glm/glm/ext/matrix_int2x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int2x4 -/// @file glm/ext/matrix_int2x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x4 GLM_EXT_matrix_int2x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x4 - /// @{ - - /// Signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4 - typedef mat<2, 4, int, defaultp> imat2x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int2x4_sized.hpp b/external/glm/glm/ext/matrix_int2x4_sized.hpp deleted file mode 100644 index a66a5e72..00000000 --- a/external/glm/glm/ext/matrix_int2x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int2x4_sized -/// @file glm/ext/matrix_int2x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x4_sized GLM_EXT_matrix_int2x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x4_sized - /// @{ - - /// 8 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int8, defaultp> i8mat2x4; - - /// 16 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int16, defaultp> i16mat2x4; - - /// 32 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int32, defaultp> i32mat2x4; - - /// 64 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int64, defaultp> i64mat2x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int3x2.hpp b/external/glm/glm/ext/matrix_int3x2.hpp deleted file mode 100644 index 3bd563b7..00000000 --- a/external/glm/glm/ext/matrix_int3x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int3x2 -/// @file glm/ext/matrix_int3x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_int3x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x2 - /// @{ - - /// Signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2 - typedef mat<3, 2, int, defaultp> imat3x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int3x2_sized.hpp b/external/glm/glm/ext/matrix_int3x2_sized.hpp deleted file mode 100644 index 7e34c524..00000000 --- a/external/glm/glm/ext/matrix_int3x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int3x2_sized -/// @file glm/ext/matrix_int3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2_sized GLM_EXT_matrix_int3x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x2_sized - /// @{ - - /// 8 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int8, defaultp> i8mat3x2; - - /// 16 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int16, defaultp> i16mat3x2; - - /// 32 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int32, defaultp> i32mat3x2; - - /// 64 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int64, defaultp> i64mat3x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int3x3.hpp b/external/glm/glm/ext/matrix_int3x3.hpp deleted file mode 100644 index 287488da..00000000 --- a/external/glm/glm/ext/matrix_int3x3.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_int3x3 -/// @file glm/ext/matrix_int3x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x3 GLM_EXT_matrix_int3x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x3 - /// @{ - - /// Signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3 - typedef mat<3, 3, int, defaultp> imat3x3; - - /// Signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3 - typedef mat<3, 3, int, defaultp> imat3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int3x3_sized.hpp b/external/glm/glm/ext/matrix_int3x3_sized.hpp deleted file mode 100644 index 577e305a..00000000 --- a/external/glm/glm/ext/matrix_int3x3_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_int3x3_sized -/// @file glm/ext/matrix_int3x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x3_sized GLM_EXT_matrix_int3x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x3_sized - /// @{ - - /// 8 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int8, defaultp> i8mat3x3; - - /// 16 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int16, defaultp> i16mat3x3; - - /// 32 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int32, defaultp> i32mat3x3; - - /// 64 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int64, defaultp> i64mat3x3; - - - /// 8 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int8, defaultp> i8mat3; - - /// 16 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int16, defaultp> i16mat3; - - /// 32 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int32, defaultp> i32mat3; - - /// 64 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int64, defaultp> i64mat3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int3x4.hpp b/external/glm/glm/ext/matrix_int3x4.hpp deleted file mode 100644 index 08e534d9..00000000 --- a/external/glm/glm/ext/matrix_int3x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int3x4 -/// @file glm/ext/matrix_int3x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x4 GLM_EXT_matrix_int3x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x4 - /// @{ - - /// Signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4 - typedef mat<3, 4, int, defaultp> imat3x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int3x4_sized.hpp b/external/glm/glm/ext/matrix_int3x4_sized.hpp deleted file mode 100644 index 692c48c4..00000000 --- a/external/glm/glm/ext/matrix_int3x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int3x4_sized -/// @file glm/ext/matrix_int3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x4_sized GLM_EXT_matrix_int3x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x4_sized - /// @{ - - /// 8 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int8, defaultp> i8mat3x4; - - /// 16 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int16, defaultp> i16mat3x4; - - /// 32 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int32, defaultp> i32mat3x4; - - /// 64 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int64, defaultp> i64mat3x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int4x2.hpp b/external/glm/glm/ext/matrix_int4x2.hpp deleted file mode 100644 index f756ef28..00000000 --- a/external/glm/glm/ext/matrix_int4x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int4x2 -/// @file glm/ext/matrix_int4x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x2 GLM_EXT_matrix_int4x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x2 - /// @{ - - /// Signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2 - typedef mat<4, 2, int, defaultp> imat4x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int4x2_sized.hpp b/external/glm/glm/ext/matrix_int4x2_sized.hpp deleted file mode 100644 index 63a99d60..00000000 --- a/external/glm/glm/ext/matrix_int4x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int4x2_sized -/// @file glm/ext/matrix_int4x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x2_sized GLM_EXT_matrix_int4x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x2_sized - /// @{ - - /// 8 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int8, defaultp> i8mat4x2; - - /// 16 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int16, defaultp> i16mat4x2; - - /// 32 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int32, defaultp> i32mat4x2; - - /// 64 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int64, defaultp> i64mat4x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int4x3.hpp b/external/glm/glm/ext/matrix_int4x3.hpp deleted file mode 100644 index d5d97a7a..00000000 --- a/external/glm/glm/ext/matrix_int4x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int4x3 -/// @file glm/ext/matrix_int4x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x3 GLM_EXT_matrix_int4x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x3 - /// @{ - - /// Signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3 - typedef mat<4, 3, int, defaultp> imat4x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int4x3_sized.hpp b/external/glm/glm/ext/matrix_int4x3_sized.hpp deleted file mode 100644 index 55078fad..00000000 --- a/external/glm/glm/ext/matrix_int4x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int4x3_sized -/// @file glm/ext/matrix_int4x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x3_sized GLM_EXT_matrix_int4x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x3_sized - /// @{ - - /// 8 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int8, defaultp> i8mat4x3; - - /// 16 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int16, defaultp> i16mat4x3; - - /// 32 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int32, defaultp> i32mat4x3; - - /// 64 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int64, defaultp> i64mat4x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int4x4.hpp b/external/glm/glm/ext/matrix_int4x4.hpp deleted file mode 100644 index e17cff17..00000000 --- a/external/glm/glm/ext/matrix_int4x4.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_int4x4 -/// @file glm/ext/matrix_int4x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x4 GLM_EXT_matrix_int4x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x4 - /// @{ - - /// Signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4 - typedef mat<4, 4, int, defaultp> imat4x4; - - /// Signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4 - typedef mat<4, 4, int, defaultp> imat4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_int4x4_sized.hpp b/external/glm/glm/ext/matrix_int4x4_sized.hpp deleted file mode 100644 index 4a11203e..00000000 --- a/external/glm/glm/ext/matrix_int4x4_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_int4x4_sized -/// @file glm/ext/matrix_int4x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x4_sized GLM_EXT_matrix_int4x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x4_sized - /// @{ - - /// 8 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int8, defaultp> i8mat4x4; - - /// 16 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int16, defaultp> i16mat4x4; - - /// 32 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int32, defaultp> i32mat4x4; - - /// 64 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int64, defaultp> i64mat4x4; - - - /// 8 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int8, defaultp> i8mat4; - - /// 16 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int16, defaultp> i16mat4; - - /// 32 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int32, defaultp> i32mat4; - - /// 64 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int64, defaultp> i64mat4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_projection.hpp b/external/glm/glm/ext/matrix_projection.hpp deleted file mode 100644 index 51fd01bd..00000000 --- a/external/glm/glm/ext/matrix_projection.hpp +++ /dev/null @@ -1,149 +0,0 @@ -/// @ref ext_matrix_projection -/// @file glm/ext/matrix_projection.hpp -/// -/// @defgroup ext_matrix_projection GLM_EXT_matrix_projection -/// @ingroup ext -/// -/// Functions that generate common projection transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_transform -/// @see ext_matrix_clip_space - -#pragma once - -// Dependencies -#include "../gtc/constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_projection extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_projection - /// @{ - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> projectZO( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> projectNO( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition. - /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> project( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProjectZO( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProjectNO( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition. - /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProject( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Define a picking region - /// - /// @param center Specify the center of a picking region in window coordinates. - /// @param delta Specify the width and height, respectively, of the picking region in window coordinates. - /// @param viewport Rendering viewport - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluPickMatrix man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> pickMatrix( - vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport); - - /// @} -}//namespace glm - -#include "matrix_projection.inl" diff --git a/external/glm/glm/ext/matrix_projection.inl b/external/glm/glm/ext/matrix_projection.inl deleted file mode 100644 index 2f2c196a..00000000 --- a/external/glm/glm/ext/matrix_projection.inl +++ /dev/null @@ -1,106 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> projectZO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); - tmp = model * tmp; - tmp = proj * tmp; - - tmp /= tmp.w; - tmp.x = tmp.x * static_cast(0.5) + static_cast(0.5); - tmp.y = tmp.y * static_cast(0.5) + static_cast(0.5); - - tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); - tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); - - return vec<3, T, Q>(tmp); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> projectNO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); - tmp = model * tmp; - tmp = proj * tmp; - - tmp /= tmp.w; - tmp = tmp * static_cast(0.5) + static_cast(0.5); - tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); - tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); - - return vec<3, T, Q>(tmp); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> project(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return projectZO(obj, model, proj, viewport); -# else - return projectNO(obj, model, proj, viewport); -# endif - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectZO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - mat<4, 4, T, Q> Inverse = inverse(proj * model); - - vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); - tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); - tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); - tmp.x = tmp.x * static_cast(2) - static_cast(1); - tmp.y = tmp.y * static_cast(2) - static_cast(1); - - vec<4, T, Q> obj = Inverse * tmp; - obj /= obj.w; - - return vec<3, T, Q>(obj); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectNO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - mat<4, 4, T, Q> Inverse = inverse(proj * model); - - vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); - tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); - tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); - tmp = tmp * static_cast(2) - static_cast(1); - - vec<4, T, Q> obj = Inverse * tmp; - obj /= obj.w; - - return vec<3, T, Q>(obj); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProject(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return unProjectZO(win, model, proj, viewport); -# else - return unProjectNO(win, model, proj, viewport); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> pickMatrix(vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport) - { - assert(delta.x > static_cast(0) && delta.y > static_cast(0)); - mat<4, 4, T, Q> Result(static_cast(1)); - - if(!(delta.x > static_cast(0) && delta.y > static_cast(0))) - return Result; // Error - - vec<3, T, Q> Temp( - (static_cast(viewport[2]) - static_cast(2) * (center.x - static_cast(viewport[0]))) / delta.x, - (static_cast(viewport[3]) - static_cast(2) * (center.y - static_cast(viewport[1]))) / delta.y, - static_cast(0)); - - // Translate and scale the picked region to the entire window - Result = translate(Result, Temp); - return scale(Result, vec<3, T, Q>(static_cast(viewport[2]) / delta.x, static_cast(viewport[3]) / delta.y, static_cast(1))); - } -}//namespace glm diff --git a/external/glm/glm/ext/matrix_relational.hpp b/external/glm/glm/ext/matrix_relational.hpp deleted file mode 100644 index 20023ad8..00000000 --- a/external/glm/glm/ext/matrix_relational.hpp +++ /dev/null @@ -1,132 +0,0 @@ -/// @ref ext_matrix_relational -/// @file glm/ext/matrix_relational.hpp -/// -/// @defgroup ext_matrix_relational GLM_EXT_matrix_relational -/// @ingroup ext -/// -/// Exposes comparison functions for matrix types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_relational -/// @see ext_scalar_relational -/// @see ext_quaternion_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_relational - /// @{ - - /// Perform a component-wise equal-to comparison of two matrices. - /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y); - - /// Perform a component-wise not-equal-to comparison of two matrices. - /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& epsilon); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& ULPs); - - /// @} -}//namespace glm - -#include "matrix_relational.inl" diff --git a/external/glm/glm/ext/matrix_relational.inl b/external/glm/glm/ext/matrix_relational.inl deleted file mode 100644 index b2b87530..00000000 --- a/external/glm/glm/ext/matrix_relational.inl +++ /dev/null @@ -1,82 +0,0 @@ -/// @ref ext_vector_relational -/// @file glm/ext/vector_relational.inl - -// Dependency: -#include "../ext/vector_relational.hpp" -#include "../common.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b) - { - return equal(a, b, static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, T Epsilon) - { - return equal(a, b, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& Epsilon) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = all(equal(a[i], b[i], Epsilon[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y) - { - return notEqual(x, y, static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, T Epsilon) - { - return notEqual(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& Epsilon) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = any(notEqual(a[i], b[i], Epsilon[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, int MaxULPs) - { - return equal(a, b, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& MaxULPs) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = all(equal(a[i], b[i], MaxULPs[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, int MaxULPs) - { - return notEqual(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& MaxULPs) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = any(notEqual(a[i], b[i], MaxULPs[i])); - return Result; - } - -}//namespace glm diff --git a/external/glm/glm/ext/matrix_transform.hpp b/external/glm/glm/ext/matrix_transform.hpp deleted file mode 100644 index cbd187ef..00000000 --- a/external/glm/glm/ext/matrix_transform.hpp +++ /dev/null @@ -1,144 +0,0 @@ -/// @ref ext_matrix_transform -/// @file glm/ext/matrix_transform.hpp -/// -/// @defgroup ext_matrix_transform GLM_EXT_matrix_transform -/// @ingroup ext -/// -/// Defines functions that generate common transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_projection -/// @see ext_matrix_clip_space - -#pragma once - -// Dependencies -#include "../gtc/constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_transform - /// @{ - - /// Builds an identity matrix. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType identity(); - - /// Builds a translation 4 * 4 matrix created from a vector of 3 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a translation vector. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @code - /// #include - /// #include - /// ... - /// glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f)); - /// // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f - /// // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f - /// // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f - /// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f - /// @endcode - /// - /// @see - translate(mat<4, 4, T, Q> const& m, T x, T y, T z) - /// @see - translate(vec<3, T, Q> const& v) - /// @see glTranslate man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> translate( - mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); - - /// Builds a rotation 4 * 4 matrix created from an axis vector and an angle. - /// - /// @param m Input matrix multiplied by this rotation matrix. - /// @param angle Rotation angle expressed in radians. - /// @param axis Rotation axis, recommended to be normalized. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) - /// @see - rotate(T angle, vec<3, T, Q> const& v) - /// @see glRotate man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotate( - mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& axis); - - /// Builds a scale 4 * 4 matrix created from 3 scalars. - /// - /// @param m Input matrix multiplied by this scale matrix. - /// @param v Ratio of scaling for each axis. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - scale(mat<4, 4, T, Q> const& m, T x, T y, T z) - /// @see - scale(vec<3, T, Q> const& v) - /// @see glScale man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> scale( - mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); - - /// Build a right handed look at view matrix. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAtRH( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// Build a left handed look at view matrix. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAtLH( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// Build a look at view matrix based on the default handedness. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - /// @see gluLookAt man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAt( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// @} -}//namespace glm - -#include "matrix_transform.inl" diff --git a/external/glm/glm/ext/matrix_transform.inl b/external/glm/glm/ext/matrix_transform.inl deleted file mode 100644 index 01cefab6..00000000 --- a/external/glm/glm/ext/matrix_transform.inl +++ /dev/null @@ -1,153 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType identity() - { - return detail::init_gentype::GENTYPE>::identity(); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result(m); - Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - vec<3, T, Q> axis(normalize(v)); - vec<3, T, Q> temp((T(1) - c) * axis); - - mat<4, 4, T, Q> Rotate; - Rotate[0][0] = c + temp[0] * axis[0]; - Rotate[0][1] = temp[0] * axis[1] + s * axis[2]; - Rotate[0][2] = temp[0] * axis[2] - s * axis[1]; - - Rotate[1][0] = temp[1] * axis[0] - s * axis[2]; - Rotate[1][1] = c + temp[1] * axis[1]; - Rotate[1][2] = temp[1] * axis[2] + s * axis[0]; - - Rotate[2][0] = temp[2] * axis[0] + s * axis[1]; - Rotate[2][1] = temp[2] * axis[1] - s * axis[0]; - Rotate[2][2] = c + temp[2] * axis[2]; - - mat<4, 4, T, Q> Result; - Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate_slow(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - mat<4, 4, T, Q> Result; - - vec<3, T, Q> axis = normalize(v); - - Result[0][0] = c + (static_cast(1) - c) * axis.x * axis.x; - Result[0][1] = (static_cast(1) - c) * axis.x * axis.y + s * axis.z; - Result[0][2] = (static_cast(1) - c) * axis.x * axis.z - s * axis.y; - Result[0][3] = static_cast(0); - - Result[1][0] = (static_cast(1) - c) * axis.y * axis.x - s * axis.z; - Result[1][1] = c + (static_cast(1) - c) * axis.y * axis.y; - Result[1][2] = (static_cast(1) - c) * axis.y * axis.z + s * axis.x; - Result[1][3] = static_cast(0); - - Result[2][0] = (static_cast(1) - c) * axis.z * axis.x + s * axis.y; - Result[2][1] = (static_cast(1) - c) * axis.z * axis.y - s * axis.x; - Result[2][2] = c + (static_cast(1) - c) * axis.z * axis.z; - Result[2][3] = static_cast(0); - - Result[3] = vec<4, T, Q>(0, 0, 0, 1); - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result; - Result[0] = m[0] * v[0]; - Result[1] = m[1] * v[1]; - Result[2] = m[2] * v[2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale_slow(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result(T(1)); - Result[0][0] = v.x; - Result[1][1] = v.y; - Result[2][2] = v.z; - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtRH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - vec<3, T, Q> const f(normalize(center - eye)); - vec<3, T, Q> const s(normalize(cross(f, up))); - vec<3, T, Q> const u(cross(s, f)); - - mat<4, 4, T, Q> Result(1); - Result[0][0] = s.x; - Result[1][0] = s.y; - Result[2][0] = s.z; - Result[0][1] = u.x; - Result[1][1] = u.y; - Result[2][1] = u.z; - Result[0][2] =-f.x; - Result[1][2] =-f.y; - Result[2][2] =-f.z; - Result[3][0] =-dot(s, eye); - Result[3][1] =-dot(u, eye); - Result[3][2] = dot(f, eye); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtLH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - vec<3, T, Q> const f(normalize(center - eye)); - vec<3, T, Q> const s(normalize(cross(up, f))); - vec<3, T, Q> const u(cross(f, s)); - - mat<4, 4, T, Q> Result(1); - Result[0][0] = s.x; - Result[1][0] = s.y; - Result[2][0] = s.z; - Result[0][1] = u.x; - Result[1][1] = u.y; - Result[2][1] = u.z; - Result[0][2] = f.x; - Result[1][2] = f.y; - Result[2][2] = f.z; - Result[3][0] = -dot(s, eye); - Result[3][1] = -dot(u, eye); - Result[3][2] = -dot(f, eye); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAt(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { -# if (GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT) - return lookAtLH(eye, center, up); -# else - return lookAtRH(eye, center, up); -# endif - } -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint2x2.hpp b/external/glm/glm/ext/matrix_uint2x2.hpp deleted file mode 100644 index 034771ae..00000000 --- a/external/glm/glm/ext/matrix_uint2x2.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_uint2x2 -/// @file glm/ext/matrix_uint2x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x2 GLM_EXT_matrix_uint2x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x2 - /// @{ - - /// Unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2 - typedef mat<2, 2, uint, defaultp> umat2x2; - - /// Unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2 - typedef mat<2, 2, uint, defaultp> umat2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint2x2_sized.hpp b/external/glm/glm/ext/matrix_uint2x2_sized.hpp deleted file mode 100644 index 4555324d..00000000 --- a/external/glm/glm/ext/matrix_uint2x2_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_uint2x2_sized -/// @file glm/ext/matrix_uint2x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x2_sized GLM_EXT_matrix_uint2x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x2_sized - /// @{ - - /// 8 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint8, defaultp> u8mat2x2; - - /// 16 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint16, defaultp> u16mat2x2; - - /// 32 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint32, defaultp> u32mat2x2; - - /// 64 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint64, defaultp> u64mat2x2; - - - /// 8 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint8, defaultp> u8mat2; - - /// 16 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint16, defaultp> u16mat2; - - /// 32 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint32, defaultp> u32mat2; - - /// 64 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint64, defaultp> u64mat2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint2x3.hpp b/external/glm/glm/ext/matrix_uint2x3.hpp deleted file mode 100644 index 7de62f6f..00000000 --- a/external/glm/glm/ext/matrix_uint2x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint2x3 -/// @file glm/ext/matrix_uint2x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_uint2x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x3 - /// @{ - - /// Unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3 - typedef mat<2, 3, uint, defaultp> umat2x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint2x3_sized.hpp b/external/glm/glm/ext/matrix_uint2x3_sized.hpp deleted file mode 100644 index db7939c9..00000000 --- a/external/glm/glm/ext/matrix_uint2x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint2x3_sized -/// @file glm/ext/matrix_uint2x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x3_sized GLM_EXT_matrix_uint2x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x3_sized - /// @{ - - /// 8 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint8, defaultp> u8mat2x3; - - /// 16 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint16, defaultp> u16mat2x3; - - /// 32 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint32, defaultp> u32mat2x3; - - /// 64 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint64, defaultp> u64mat2x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint2x4.hpp b/external/glm/glm/ext/matrix_uint2x4.hpp deleted file mode 100644 index 0f993509..00000000 --- a/external/glm/glm/ext/matrix_uint2x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint2x4 -/// @file glm/ext/matrix_uint2x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x4 GLM_EXT_matrix_int2x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x4 - /// @{ - - /// Unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4 - typedef mat<2, 4, uint, defaultp> umat2x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint2x4_sized.hpp b/external/glm/glm/ext/matrix_uint2x4_sized.hpp deleted file mode 100644 index 5cb8e546..00000000 --- a/external/glm/glm/ext/matrix_uint2x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint2x4_sized -/// @file glm/ext/matrixu_uint2x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x4_sized GLM_EXT_matrix_uint2x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x4_sized - /// @{ - - /// 8 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint8, defaultp> u8mat2x4; - - /// 16 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint16, defaultp> u16mat2x4; - - /// 32 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint32, defaultp> u32mat2x4; - - /// 64 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint64, defaultp> u64mat2x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint3x2.hpp b/external/glm/glm/ext/matrix_uint3x2.hpp deleted file mode 100644 index 47f48737..00000000 --- a/external/glm/glm/ext/matrix_uint3x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint3x2 -/// @file glm/ext/matrix_uint3x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_uint3x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x2 - /// @{ - - /// Unsigned integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2 - typedef mat<3, 2, uint, defaultp> umat3x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint3x2_sized.hpp b/external/glm/glm/ext/matrix_uint3x2_sized.hpp deleted file mode 100644 index c81af8f9..00000000 --- a/external/glm/glm/ext/matrix_uint3x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint3x2_sized -/// @file glm/ext/matrix_uint3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x2_sized GLM_EXT_matrix_uint3x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x2_sized - /// @{ - - /// 8 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint8, defaultp> u8mat3x2; - - /// 16 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint16, defaultp> u16mat3x2; - - /// 32 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint32, defaultp> u32mat3x2; - - /// 64 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint64, defaultp> u64mat3x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint3x3.hpp b/external/glm/glm/ext/matrix_uint3x3.hpp deleted file mode 100644 index 1004c0d2..00000000 --- a/external/glm/glm/ext/matrix_uint3x3.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_uint3x3 -/// @file glm/ext/matrix_uint3x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x3 GLM_EXT_matrix_uint3x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x3 - /// @{ - - /// Unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3 - typedef mat<3, 3, uint, defaultp> umat3x3; - - /// Unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3 - typedef mat<3, 3, uint, defaultp> umat3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint3x3_sized.hpp b/external/glm/glm/ext/matrix_uint3x3_sized.hpp deleted file mode 100644 index 41a8be74..00000000 --- a/external/glm/glm/ext/matrix_uint3x3_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_uint3x3_sized -/// @file glm/ext/matrix_uint3x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x3_sized GLM_EXT_matrix_uint3x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x3_sized - /// @{ - - /// 8 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint8, defaultp> u8mat3x3; - - /// 16 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint16, defaultp> u16mat3x3; - - /// 32 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint32, defaultp> u32mat3x3; - - /// 64 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint64, defaultp> u64mat3x3; - - - /// 8 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint8, defaultp> u8mat3; - - /// 16 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint16, defaultp> u16mat3; - - /// 32 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint32, defaultp> u32mat3; - - /// 64 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint64, defaultp> u64mat3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint3x4.hpp b/external/glm/glm/ext/matrix_uint3x4.hpp deleted file mode 100644 index c6dd78c4..00000000 --- a/external/glm/glm/ext/matrix_uint3x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint3x4 -/// @file glm/ext/matrix_uint3x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x4 GLM_EXT_matrix_uint3x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x4 - /// @{ - - /// Signed integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4 - typedef mat<3, 4, uint, defaultp> umat3x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint3x4_sized.hpp b/external/glm/glm/ext/matrix_uint3x4_sized.hpp deleted file mode 100644 index 2ce28ad8..00000000 --- a/external/glm/glm/ext/matrix_uint3x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint3x4_sized -/// @file glm/ext/matrix_uint3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x4_sized GLM_EXT_matrix_uint3x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x4_sized - /// @{ - - /// 8 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint8, defaultp> u8mat3x4; - - /// 16 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint16, defaultp> u16mat3x4; - - /// 32 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint32, defaultp> u32mat3x4; - - /// 64 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint64, defaultp> u64mat3x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint4x2.hpp b/external/glm/glm/ext/matrix_uint4x2.hpp deleted file mode 100644 index 0446f574..00000000 --- a/external/glm/glm/ext/matrix_uint4x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint4x2 -/// @file glm/ext/matrix_uint4x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x2 GLM_EXT_matrix_uint4x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x2 - /// @{ - - /// Unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2 - typedef mat<4, 2, uint, defaultp> umat4x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint4x2_sized.hpp b/external/glm/glm/ext/matrix_uint4x2_sized.hpp deleted file mode 100644 index 57a66bf9..00000000 --- a/external/glm/glm/ext/matrix_uint4x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint4x2_sized -/// @file glm/ext/matrix_uint4x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x2_sized GLM_EXT_matrix_uint4x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x2_sized - /// @{ - - /// 8 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint8, defaultp> u8mat4x2; - - /// 16 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint16, defaultp> u16mat4x2; - - /// 32 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint32, defaultp> u32mat4x2; - - /// 64 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint64, defaultp> u64mat4x2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint4x3.hpp b/external/glm/glm/ext/matrix_uint4x3.hpp deleted file mode 100644 index 54c24e4e..00000000 --- a/external/glm/glm/ext/matrix_uint4x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint4x3 -/// @file glm/ext/matrix_uint4x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x3 GLM_EXT_matrix_uint4x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x3 - /// @{ - - /// Unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3 - typedef mat<4, 3, uint, defaultp> umat4x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint4x3_sized.hpp b/external/glm/glm/ext/matrix_uint4x3_sized.hpp deleted file mode 100644 index 2e61124d..00000000 --- a/external/glm/glm/ext/matrix_uint4x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint4x3_sized -/// @file glm/ext/matrix_uint4x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x3_sized GLM_EXT_matrix_uint4x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x3_sized - /// @{ - - /// 8 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint8, defaultp> u8mat4x3; - - /// 16 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint16, defaultp> u16mat4x3; - - /// 32 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint32, defaultp> u32mat4x3; - - /// 64 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint64, defaultp> u64mat4x3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint4x4.hpp b/external/glm/glm/ext/matrix_uint4x4.hpp deleted file mode 100644 index 5cc84553..00000000 --- a/external/glm/glm/ext/matrix_uint4x4.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_uint4x4 -/// @file glm/ext/matrix_uint4x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x4 GLM_EXT_matrix_uint4x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x4 - /// @{ - - /// Unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4 - typedef mat<4, 4, uint, defaultp> umat4x4; - - /// Unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4 - typedef mat<4, 4, uint, defaultp> umat4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/matrix_uint4x4_sized.hpp b/external/glm/glm/ext/matrix_uint4x4_sized.hpp deleted file mode 100644 index bb10bd2b..00000000 --- a/external/glm/glm/ext/matrix_uint4x4_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_uint4x4_sized -/// @file glm/ext/matrix_uint4x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x4_sized GLM_EXT_matrix_uint4x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x4_sized - /// @{ - - /// 8 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint8, defaultp> u8mat4x4; - - /// 16 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint16, defaultp> u16mat4x4; - - /// 32 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint32, defaultp> u32mat4x4; - - /// 64 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint64, defaultp> u64mat4x4; - - - /// 8 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint8, defaultp> u8mat4; - - /// 16 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint16, defaultp> u16mat4; - - /// 32 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint32, defaultp> u32mat4; - - /// 64 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint64, defaultp> u64mat4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/quaternion_common.hpp b/external/glm/glm/ext/quaternion_common.hpp deleted file mode 100644 index f519d559..00000000 --- a/external/glm/glm/ext/quaternion_common.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/// @ref ext_quaternion_common -/// @file glm/ext/quaternion_common.hpp -/// -/// @defgroup ext_quaternion_common GLM_EXT_quaternion_common -/// @ingroup ext -/// -/// Provides common functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_common -/// @see ext_vector_common -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_trigonometric -/// @see ext_quaternion_transform - -#pragma once - -// Dependency: -#include "../ext/scalar_constants.hpp" -#include "../ext/quaternion_geometric.hpp" -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_common - /// @{ - - /// Spherical linear interpolation of two quaternions. - /// The interpolation is oriented and the rotation is performed at constant speed. - /// For short path spherical linear interpolation, use the slerp function. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - slerp(qua const& x, qua const& y, T const& a) - template - GLM_FUNC_DECL qua mix(qua const& x, qua const& y, T a); - - /// Linear interpolation of two quaternions. - /// The interpolation is oriented. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined in the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua lerp(qua const& x, qua const& y, T a); - - /// Spherical linear interpolation of two quaternions. - /// The interpolation always take the short path and the rotation is performed at constant speed. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua slerp(qua const& x, qua const& y, T a); - - /// Spherical linear interpolation of two quaternions with multiple spins over rotation axis. - /// The interpolation always take the short path when the spin count is positive and long path - /// when count is negative. Rotation is performed at constant speed. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// @param k Additional spin count. If Value is negative interpolation will be on "long" path. - /// - /// @tparam T A floating-point scalar type - /// @tparam S An integer scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua slerp(qua const& x, qua const& y, T a, S k); - - /// Returns the q conjugate. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua conjugate(qua const& q); - - /// Returns the q inverse. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua inverse(qua const& q); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// /!\ When using compiler fast math, this function may fail. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> isnan(qua const& x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> isinf(qua const& x); - - /// @} -} //namespace glm - -#include "quaternion_common.inl" diff --git a/external/glm/glm/ext/quaternion_common.inl b/external/glm/glm/ext/quaternion_common.inl deleted file mode 100644 index 0e4a3bb2..00000000 --- a/external/glm/glm/ext/quaternion_common.inl +++ /dev/null @@ -1,144 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua mix(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mix' only accept floating-point inputs"); - - T const cosTheta = dot(x, y); - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if(cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, y.w, a), - mix(x.x, y.x, a), - mix(x.y, y.y, a), - mix(x.z, y.z, a)); - } - else - { - // Essential Mathematics, page 467 - T angle = acos(cosTheta); - return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua lerp(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'lerp' only accept floating-point inputs"); - - // Lerp is only defined in [0, 1] - assert(a >= static_cast(0)); - assert(a <= static_cast(1)); - - return x * (static_cast(1) - a) + (y * a); - } - - template - GLM_FUNC_QUALIFIER qua slerp(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'slerp' only accept floating-point inputs"); - - qua z = y; - - T cosTheta = dot(x, y); - - // If cosTheta < 0, the interpolation will take the long way around the sphere. - // To fix this, one quat must be negated. - if(cosTheta < static_cast(0)) - { - z = -y; - cosTheta = -cosTheta; - } - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if(cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, z.w, a), - mix(x.x, z.x, a), - mix(x.y, z.y, a), - mix(x.z, z.z, a)); - } - else - { - // Essential Mathematics, page 467 - T angle = acos(cosTheta); - return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua slerp(qua const& x, qua const& y, T a, S k) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'slerp' only accept floating-point inputs"); - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'slerp' only accept integer for spin count"); - - qua z = y; - - T cosTheta = dot(x, y); - - // If cosTheta < 0, the interpolation will take the long way around the sphere. - // To fix this, one quat must be negated. - if (cosTheta < static_cast(0)) - { - z = -y; - cosTheta = -cosTheta; - } - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if (cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, z.w, a), - mix(x.x, z.x, a), - mix(x.y, z.y, a), - mix(x.z, z.z, a)); - } - else - { - // Graphics Gems III, page 96 - T angle = acos(cosTheta); - T phi = angle + k * glm::pi(); - return (sin(angle - a * phi)* x + sin(a * phi) * z) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua conjugate(qua const& q) - { - return qua(q.w, -q.x, -q.y, -q.z); - } - - template - GLM_FUNC_QUALIFIER qua inverse(qua const& q) - { - return conjugate(q) / dot(q, q); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isnan(qua const& q) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - - return vec<4, bool, Q>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isinf(qua const& q) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - - return vec<4, bool, Q>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w)); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "quaternion_common_simd.inl" -#endif - diff --git a/external/glm/glm/ext/quaternion_common_simd.inl b/external/glm/glm/ext/quaternion_common_simd.inl deleted file mode 100644 index ddfc8a44..00000000 --- a/external/glm/glm/ext/quaternion_common_simd.inl +++ /dev/null @@ -1,18 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_dot, float, true> - { - static GLM_FUNC_QUALIFIER float call(qua const& x, qua const& y) - { - return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/external/glm/glm/ext/quaternion_double.hpp b/external/glm/glm/ext/quaternion_double.hpp deleted file mode 100644 index 63b24de4..00000000 --- a/external/glm/glm/ext/quaternion_double.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/// @ref ext_quaternion_double -/// @file glm/ext/quaternion_double.hpp -/// -/// @defgroup ext_quaternion_double GLM_EXT_quaternion_double -/// @ingroup ext -/// -/// Exposes double-precision floating point quaternion type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double_precision -/// @see ext_quaternion_common -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_double extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_double - /// @{ - - /// Quaternion of double-precision floating-point numbers. - typedef qua dquat; - - /// @} -} //namespace glm - diff --git a/external/glm/glm/ext/quaternion_double_precision.hpp b/external/glm/glm/ext/quaternion_double_precision.hpp deleted file mode 100644 index 8aa24a17..00000000 --- a/external/glm/glm/ext/quaternion_double_precision.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/// @ref ext_quaternion_double_precision -/// @file glm/ext/quaternion_double_precision.hpp -/// -/// @defgroup ext_quaternion_double_precision GLM_EXT_quaternion_double_precision -/// @ingroup ext -/// -/// Exposes double-precision floating point quaternion type with various precision in term of ULPs. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_double_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_double_precision - /// @{ - - /// Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua lowp_dquat; - - /// Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua mediump_dquat; - - /// Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua highp_dquat; - - /// @} -} //namespace glm - diff --git a/external/glm/glm/ext/quaternion_exponential.hpp b/external/glm/glm/ext/quaternion_exponential.hpp deleted file mode 100644 index affe2979..00000000 --- a/external/glm/glm/ext/quaternion_exponential.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/// @ref ext_quaternion_exponential -/// @file glm/ext/quaternion_exponential.hpp -/// -/// @defgroup ext_quaternion_exponential GLM_EXT_quaternion_exponential -/// @ingroup ext -/// -/// Provides exponential functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see core_exponential -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../geometric.hpp" -#include "../ext/scalar_constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_exponential extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_transform - /// @{ - - /// Returns a exponential of a quaternion. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua exp(qua const& q); - - /// Returns a logarithm of a quaternion - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua log(qua const& q); - - /// Returns a quaternion raised to a power. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua pow(qua const& q, T y); - - /// Returns the square root of a quaternion - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua sqrt(qua const& q); - - /// @} -} //namespace glm - -#include "quaternion_exponential.inl" diff --git a/external/glm/glm/ext/quaternion_exponential.inl b/external/glm/glm/ext/quaternion_exponential.inl deleted file mode 100644 index 8456c00a..00000000 --- a/external/glm/glm/ext/quaternion_exponential.inl +++ /dev/null @@ -1,85 +0,0 @@ -#include "scalar_constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua exp(qua const& q) - { - vec<3, T, Q> u(q.x, q.y, q.z); - T const Angle = glm::length(u); - if (Angle < epsilon()) - return qua(); - - vec<3, T, Q> const v(u / Angle); - return qua(cos(Angle), sin(Angle) * v); - } - - template - GLM_FUNC_QUALIFIER qua log(qua const& q) - { - vec<3, T, Q> u(q.x, q.y, q.z); - T Vec3Len = length(u); - - if (Vec3Len < epsilon()) - { - if(q.w > static_cast(0)) - return qua(log(q.w), static_cast(0), static_cast(0), static_cast(0)); - else if(q.w < static_cast(0)) - return qua(log(-q.w), pi(), static_cast(0), static_cast(0)); - else - return qua(std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity()); - } - else - { - T t = atan(Vec3Len, T(q.w)) / Vec3Len; - T QuatLen2 = Vec3Len * Vec3Len + q.w * q.w; - return qua(static_cast(0.5) * log(QuatLen2), t * q.x, t * q.y, t * q.z); - } - } - - template - GLM_FUNC_QUALIFIER qua pow(qua const& x, T y) - { - //Raising to the power of 0 should yield 1 - //Needed to prevent a division by 0 error later on - if(y > -epsilon() && y < epsilon()) - return qua(1,0,0,0); - - //To deal with non-unit quaternions - T magnitude = sqrt(x.x * x.x + x.y * x.y + x.z * x.z + x.w *x.w); - - T Angle; - if(abs(x.w / magnitude) > cos_one_over_two()) - { - //Scalar component is close to 1; using it to recover angle would lose precision - //Instead, we use the non-scalar components since sin() is accurate around 0 - - //Prevent a division by 0 error later on - T VectorMagnitude = x.x * x.x + x.y * x.y + x.z * x.z; - if (glm::abs(VectorMagnitude - static_cast(0)) < glm::epsilon()) { - //Equivalent to raising a real number to a power - return qua(pow(x.w, y), 0, 0, 0); - } - - Angle = asin(sqrt(VectorMagnitude) / magnitude); - } - else - { - //Scalar component is small, shouldn't cause loss of precision - Angle = acos(x.w / magnitude); - } - - T NewAngle = Angle * y; - T Div = sin(NewAngle) / sin(Angle); - T Mag = pow(magnitude, y - static_cast(1)); - return qua(cos(NewAngle) * magnitude * Mag, x.x * Div * Mag, x.y * Div * Mag, x.z * Div * Mag); - } - - template - GLM_FUNC_QUALIFIER qua sqrt(qua const& x) - { - return pow(x, static_cast(0.5)); - } -}//namespace glm - - diff --git a/external/glm/glm/ext/quaternion_float.hpp b/external/glm/glm/ext/quaternion_float.hpp deleted file mode 100644 index ca42a605..00000000 --- a/external/glm/glm/ext/quaternion_float.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/// @ref ext_quaternion_float -/// @file glm/ext/quaternion_float.hpp -/// -/// @defgroup ext_quaternion_float GLM_EXT_quaternion_float -/// @ingroup ext -/// -/// Exposes single-precision floating point quaternion type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_double -/// @see ext_quaternion_float_precision -/// @see ext_quaternion_common -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_float extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_float - /// @{ - - /// Quaternion of single-precision floating-point numbers. - typedef qua quat; - - /// @} -} //namespace glm - diff --git a/external/glm/glm/ext/quaternion_float_precision.hpp b/external/glm/glm/ext/quaternion_float_precision.hpp deleted file mode 100644 index f9e4f5c2..00000000 --- a/external/glm/glm/ext/quaternion_float_precision.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_quaternion_float_precision -/// @file glm/ext/quaternion_float_precision.hpp -/// -/// @defgroup ext_quaternion_float_precision GLM_EXT_quaternion_float_precision -/// @ingroup ext -/// -/// Exposes single-precision floating point quaternion type with various precision in term of ULPs. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_float_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_float_precision - /// @{ - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua lowp_quat; - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua mediump_quat; - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua highp_quat; - - /// @} -} //namespace glm - diff --git a/external/glm/glm/ext/quaternion_geometric.hpp b/external/glm/glm/ext/quaternion_geometric.hpp deleted file mode 100644 index 6d98bbe9..00000000 --- a/external/glm/glm/ext/quaternion_geometric.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_quaternion_geometric -/// @file glm/ext/quaternion_geometric.hpp -/// -/// @defgroup ext_quaternion_geometric GLM_EXT_quaternion_geometric -/// @ingroup ext -/// -/// Provides geometric functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see core_geometric -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "../ext/vector_relational.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_geometric extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_geometric - /// @{ - - /// Returns the norm of a quaternions - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL T length(qua const& q); - - /// Returns the normalized quaternion. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL qua normalize(qua const& q); - - /// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... - /// - /// @tparam T Floating-point scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL T dot(qua const& x, qua const& y); - - /// Compute a cross product. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2); - - /// @} -} //namespace glm - -#include "quaternion_geometric.inl" diff --git a/external/glm/glm/ext/quaternion_geometric.inl b/external/glm/glm/ext/quaternion_geometric.inl deleted file mode 100644 index e155ac52..00000000 --- a/external/glm/glm/ext/quaternion_geometric.inl +++ /dev/null @@ -1,36 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER T dot(qua const& x, qua const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER T length(qua const& q) - { - return glm::sqrt(dot(q, q)); - } - - template - GLM_FUNC_QUALIFIER qua normalize(qua const& q) - { - T len = length(q); - if(len <= static_cast(0)) // Problem - return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); - T oneOverLen = static_cast(1) / len; - return qua(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen); - } - - template - GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2) - { - return qua( - q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z, - q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, - q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z, - q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x); - } -}//namespace glm - diff --git a/external/glm/glm/ext/quaternion_relational.hpp b/external/glm/glm/ext/quaternion_relational.hpp deleted file mode 100644 index 7aa121da..00000000 --- a/external/glm/glm/ext/quaternion_relational.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/// @ref ext_quaternion_relational -/// @file glm/ext/quaternion_relational.hpp -/// -/// @defgroup ext_quaternion_relational GLM_EXT_quaternion_relational -/// @ingroup ext -/// -/// Exposes comparison functions for quaternion types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_vector_relational -/// @see ext_matrix_relational -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../vector_relational.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_relational - /// @{ - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon); - - /// @} -} //namespace glm - -#include "quaternion_relational.inl" diff --git a/external/glm/glm/ext/quaternion_relational.inl b/external/glm/glm/ext/quaternion_relational.inl deleted file mode 100644 index b1713e95..00000000 --- a/external/glm/glm/ext/quaternion_relational.inl +++ /dev/null @@ -1,35 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] == y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return lessThan(abs(v), vec<4, T, Q>(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] != y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); - } -}//namespace glm - diff --git a/external/glm/glm/ext/quaternion_transform.hpp b/external/glm/glm/ext/quaternion_transform.hpp deleted file mode 100644 index a9cc5c2b..00000000 --- a/external/glm/glm/ext/quaternion_transform.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/// @ref ext_quaternion_transform -/// @file glm/ext/quaternion_transform.hpp -/// -/// @defgroup ext_quaternion_transform GLM_EXT_quaternion_transform -/// @ingroup ext -/// -/// Provides transformation functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_transform - /// @{ - - /// Rotates a quaternion from a vector of 3 components axis and an angle. - /// - /// @param q Source orientation - /// @param angle Angle expressed in radians. - /// @param axis Axis of the rotation - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& axis); - /// @} -} //namespace glm - -#include "quaternion_transform.inl" diff --git a/external/glm/glm/ext/quaternion_transform.inl b/external/glm/glm/ext/quaternion_transform.inl deleted file mode 100644 index b87ecb65..00000000 --- a/external/glm/glm/ext/quaternion_transform.inl +++ /dev/null @@ -1,24 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& v) - { - vec<3, T, Q> Tmp = v; - - // Axis of rotation must be normalised - T len = glm::length(Tmp); - if(abs(len - static_cast(1)) > static_cast(0.001)) - { - T oneOverLen = static_cast(1) / len; - Tmp.x *= oneOverLen; - Tmp.y *= oneOverLen; - Tmp.z *= oneOverLen; - } - - T const AngleRad(angle); - T const Sin = sin(AngleRad * static_cast(0.5)); - - return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); - } -}//namespace glm - diff --git a/external/glm/glm/ext/quaternion_trigonometric.hpp b/external/glm/glm/ext/quaternion_trigonometric.hpp deleted file mode 100644 index 76cea27a..00000000 --- a/external/glm/glm/ext/quaternion_trigonometric.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/// @ref ext_quaternion_trigonometric -/// @file glm/ext/quaternion_trigonometric.hpp -/// -/// @defgroup ext_quaternion_trigonometric GLM_EXT_quaternion_trigonometric -/// @ingroup ext -/// -/// Provides trigonometric functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform - -#pragma once - -// Dependency: -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include "scalar_constants.hpp" -#include "vector_relational.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_trigonometric extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_trigonometric - /// @{ - - /// Returns the quaternion rotation angle. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL T angle(qua const& x); - - /// Returns the q rotation axis. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<3, T, Q> axis(qua const& x); - - /// Build a quaternion from an angle and a normalized axis. - /// - /// @param angle Angle expressed in radians. - /// @param axis Axis of the quaternion, must be normalized. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua angleAxis(T const& angle, vec<3, T, Q> const& axis); - - /// @} -} //namespace glm - -#include "quaternion_trigonometric.inl" diff --git a/external/glm/glm/ext/quaternion_trigonometric.inl b/external/glm/glm/ext/quaternion_trigonometric.inl deleted file mode 100644 index 06b7c4c3..00000000 --- a/external/glm/glm/ext/quaternion_trigonometric.inl +++ /dev/null @@ -1,34 +0,0 @@ -#include "scalar_constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T angle(qua const& x) - { - if (abs(x.w) > cos_one_over_two()) - { - return asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast(2); - } - - return acos(x.w) * static_cast(2); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua const& x) - { - T const tmp1 = static_cast(1) - x.w * x.w; - if(tmp1 <= static_cast(0)) - return vec<3, T, Q>(0, 0, 1); - T const tmp2 = static_cast(1) / sqrt(tmp1); - return vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2); - } - - template - GLM_FUNC_QUALIFIER qua angleAxis(T const& angle, vec<3, T, Q> const& v) - { - T const a(angle); - T const s = glm::sin(a * static_cast(0.5)); - - return qua(glm::cos(a * static_cast(0.5)), v * s); - } -}//namespace glm diff --git a/external/glm/glm/ext/scalar_common.hpp b/external/glm/glm/ext/scalar_common.hpp deleted file mode 100644 index aa5a1807..00000000 --- a/external/glm/glm/ext/scalar_common.hpp +++ /dev/null @@ -1,157 +0,0 @@ -/// @ref ext_scalar_common -/// @file glm/ext/scalar_common.hpp -/// -/// @defgroup ext_scalar_common GLM_EXT_scalar_common -/// @ingroup ext -/// -/// Exposes min and max functions for 3 to 4 scalar parameters. -/// -/// Include to use the features of this extension. -/// -/// @see core_func_common -/// @see ext_vector_common - -#pragma once - -// Dependency: -#include "../common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_common - /// @{ - - /// Returns the minimum component-wise values of 3 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T min(T a, T b, T c); - - /// Returns the minimum component-wise values of 4 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T min(T a, T b, T c, T d); - - /// Returns the maximum component-wise values of 3 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T max(T a, T b, T c); - - /// Returns the maximum component-wise values of 4 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T max(T a, T b, T c, T d); - - /// Returns the minimum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b); - - /// Returns the minimum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b, T c); - - /// Returns the minimum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b, T c, T d); - - /// Returns the maximum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b); - - /// Returns the maximum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b, T C); - - /// Returns the maximum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b, T C, T D); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal); - - /// Simulate GL_CLAMP OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType clamp(genType const& Texcoord); - - /// Simulate GL_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType repeat(genType const& Texcoord); - - /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord); - - /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord); - - /// @} -}//namespace glm - -#include "scalar_common.inl" diff --git a/external/glm/glm/ext/scalar_common.inl b/external/glm/glm/ext/scalar_common.inl deleted file mode 100644 index 7d9207af..00000000 --- a/external/glm/glm/ext/scalar_common.inl +++ /dev/null @@ -1,152 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER T min(T a, T b, T c) - { - return glm::min(glm::min(a, b), c); - } - - template - GLM_FUNC_QUALIFIER T min(T a, T b, T c, T d) - { - return glm::min(glm::min(a, b), glm::min(c, d)); - } - - template - GLM_FUNC_QUALIFIER T max(T a, T b, T c) - { - return glm::max(glm::max(a, b), c); - } - - template - GLM_FUNC_QUALIFIER T max(T a, T b, T c, T d) - { - return glm::max(glm::max(a, b), glm::max(c, d)); - } - -# if GLM_HAS_CXX11_STL - using std::fmin; -# else - template - GLM_FUNC_QUALIFIER T fmin(T a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return b; - return min(a, b); - } -# endif - - template - GLM_FUNC_QUALIFIER T fmin(T a, T b, T c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return fmin(b, c); - if (isnan(b)) - return fmin(a, c); - if (isnan(c)) - return min(a, b); - return min(a, b, c); - } - - template - GLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return fmin(b, c, d); - if (isnan(b)) - return min(a, fmin(c, d)); - if (isnan(c)) - return fmin(min(a, b), d); - if (isnan(d)) - return min(a, b, c); - return min(a, b, c, d); - } - - -# if GLM_HAS_CXX11_STL - using std::fmax; -# else - template - GLM_FUNC_QUALIFIER T fmax(T a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return b; - return max(a, b); - } -# endif - - template - GLM_FUNC_QUALIFIER T fmax(T a, T b, T c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return fmax(b, c); - if (isnan(b)) - return fmax(a, c); - if (isnan(c)) - return max(a, b); - return max(a, b, c); - } - - template - GLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return fmax(b, c, d); - if (isnan(b)) - return max(a, fmax(c, d)); - if (isnan(c)) - return fmax(max(a, b), d); - if (isnan(d)) - return max(a, b, c); - return max(a, b, c, d); - } - - // fclamp - template - GLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fclamp' only accept floating-point or integer inputs"); - return fmin(fmax(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord) - { - return glm::clamp(Texcoord, static_cast(0), static_cast(1)); - } - - template - GLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord) - { - return glm::fract(Texcoord); - } - - template - GLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord) - { - return glm::fract(glm::abs(Texcoord)); - } - - template - GLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord) - { - genType const Abs = glm::abs(Texcoord); - genType const Clamp = glm::mod(glm::floor(Abs), static_cast(2)); - genType const Floor = glm::floor(Abs); - genType const Rest = Abs - Floor; - genType const Mirror = Clamp + Rest; - return mix(Rest, static_cast(1) - Rest, Mirror >= static_cast(1)); - } -}//namespace glm diff --git a/external/glm/glm/ext/scalar_constants.hpp b/external/glm/glm/ext/scalar_constants.hpp deleted file mode 100644 index 74e210d9..00000000 --- a/external/glm/glm/ext/scalar_constants.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/// @ref ext_scalar_constants -/// @file glm/ext/scalar_constants.hpp -/// -/// @defgroup ext_scalar_constants GLM_EXT_scalar_constants -/// @ingroup ext -/// -/// Provides a list of constants and precomputed useful values. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_constants extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_constants - /// @{ - - /// Return the epsilon constant for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon(); - - /// Return the pi constant for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType pi(); - - /// Return the value of cos(1 / 2) for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType cos_one_over_two(); - - /// @} -} //namespace glm - -#include "scalar_constants.inl" diff --git a/external/glm/glm/ext/scalar_constants.inl b/external/glm/glm/ext/scalar_constants.inl deleted file mode 100644 index b475adf8..00000000 --- a/external/glm/glm/ext/scalar_constants.inl +++ /dev/null @@ -1,24 +0,0 @@ -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon() - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'epsilon' only accepts floating-point inputs"); - return std::numeric_limits::epsilon(); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType pi() - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'pi' only accepts floating-point inputs"); - return static_cast(3.14159265358979323846264338327950288); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType cos_one_over_two() - { - return genType(0.877582561890372716130286068203503191); - } -} //namespace glm diff --git a/external/glm/glm/ext/scalar_int_sized.hpp b/external/glm/glm/ext/scalar_int_sized.hpp deleted file mode 100644 index 8e9c511c..00000000 --- a/external/glm/glm/ext/scalar_int_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_scalar_int_sized -/// @file glm/ext/scalar_int_sized.hpp -/// -/// @defgroup ext_scalar_int_sized GLM_EXT_scalar_int_sized -/// @ingroup ext -/// -/// Exposes sized signed integer scalar types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_int_sized extension included") -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::int8_t int8; - typedef std::int16_t int16; - typedef std::int32_t int32; -# else - typedef signed char int8; - typedef signed short int16; - typedef signed int int32; -#endif// - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - - /// @addtogroup ext_scalar_int_sized - /// @{ - - /// 8 bit signed integer type. - typedef detail::int8 int8; - - /// 16 bit signed integer type. - typedef detail::int16 int16; - - /// 32 bit signed integer type. - typedef detail::int32 int32; - - /// 64 bit signed integer type. - typedef detail::int64 int64; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/scalar_integer.hpp b/external/glm/glm/ext/scalar_integer.hpp deleted file mode 100644 index a2ca8a2a..00000000 --- a/external/glm/glm/ext/scalar_integer.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref ext_scalar_integer -/// @file glm/ext/scalar_integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_scalar_integer GLM_EXT_scalar_integer -/// @ingroup ext -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../detail/type_float.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_integer - /// @{ - - /// Return true if the value is a power of two number. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL bool isPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam genIUType Integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genIUType Integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple); - - /// Returns the bit number of the Nth significant bit set to - /// 1 in the binary representation of value. - /// If value bitcount is less than the Nth significant bit, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount); - - /// @} -} //namespace glm - -#include "scalar_integer.inl" diff --git a/external/glm/glm/ext/scalar_integer.inl b/external/glm/glm/ext/scalar_integer.inl deleted file mode 100644 index efba9600..00000000 --- a/external/glm/glm/ext/scalar_integer.inl +++ /dev/null @@ -1,243 +0,0 @@ -#include "../integer.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_ceilShift - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T) - { - return v; - } - }; - - template - struct compute_ceilShift - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Shift) - { - return v | (v >> Shift); - } - }; - - template - struct compute_ceilPowerOfTwo - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); - - vec const Sign(sign(x)); - - vec v(abs(x)); - - v = v - static_cast(1); - v = v | (v >> static_cast(1)); - v = v | (v >> static_cast(2)); - v = v | (v >> static_cast(4)); - v = compute_ceilShift= 2>::call(v, 8); - v = compute_ceilShift= 4>::call(v, 16); - v = compute_ceilShift= 8>::call(v, 32); - return (v + static_cast(1)) * Sign; - } - }; - - template - struct compute_ceilPowerOfTwo - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); - - vec v(x); - - v = v - static_cast(1); - v = v | (v >> static_cast(1)); - v = v | (v >> static_cast(2)); - v = v | (v >> static_cast(4)); - v = compute_ceilShift= 2>::call(v, 8); - v = compute_ceilShift= 4>::call(v, 16); - v = compute_ceilShift= 8>::call(v, 32); - return v + static_cast(1); - } - }; - - template - struct compute_ceilMultiple{}; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source > genType(0)) - return Source + (Multiple - std::fmod(Source, Multiple)); - else - return Source + std::fmod(-Source, Multiple); - } - }; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - }; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - assert(Multiple > genType(0)); - if(Source > genType(0)) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - else - return Source + (-Source % Multiple); - } - }; - - template - struct compute_floorMultiple{}; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - std::fmod(Source, Multiple); - else - return Source - std::fmod(Source, Multiple) - Multiple; - } - }; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool isPowerOfTwo(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); - - genIUType const Result = glm::abs(Value); - return !(Result & (Result - 1)); - } - - template - GLM_FUNC_QUALIFIER genIUType nextPowerOfTwo(genIUType value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); - - return detail::compute_ceilPowerOfTwo<1, genIUType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genIUType, defaultp>(value)).x; - } - - template - GLM_FUNC_QUALIFIER genIUType prevPowerOfTwo(genIUType value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); - - return isPowerOfTwo(value) ? value : static_cast(static_cast(1) << static_cast(findMSB(value))); - } - - template - GLM_FUNC_QUALIFIER bool isMultiple(genIUType Value, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return isMultiple(vec<1, genIUType>(Value), vec<1, genIUType>(Multiple)).x; - } - - template - GLM_FUNC_QUALIFIER genIUType nextMultiple(genIUType Source, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER genIUType prevMultiple(genIUType Source, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER int findNSB(genIUType x, int significantBitCount) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); - - if(bitCount(x) < significantBitCount) - return -1; - - genIUType const One = static_cast(1); - int bitPos = 0; - - genIUType key = x; - int nBitCount = significantBitCount; - int Step = sizeof(x) * 8 / 2; - while (key > One) - { - genIUType Mask = static_cast((One << Step) - One); - genIUType currentKey = key & Mask; - int currentBitCount = bitCount(currentKey); - if (nBitCount > currentBitCount) - { - nBitCount -= currentBitCount; - bitPos += Step; - key >>= static_cast(Step); - } - else - { - key = key & Mask; - } - - Step >>= 1; - } - - return static_cast(bitPos); - } -}//namespace glm diff --git a/external/glm/glm/ext/scalar_packing.hpp b/external/glm/glm/ext/scalar_packing.hpp deleted file mode 100644 index 18b85b72..00000000 --- a/external/glm/glm/ext/scalar_packing.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_scalar_packing -/// @file glm/ext/scalar_packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_scalar_packing GLM_EXT_scalar_packing -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert scalar values to packed -/// formats. - -#pragma once - -// Dependency: -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_packing - /// @{ - - - /// @} -}// namespace glm - -#include "scalar_packing.inl" diff --git a/external/glm/glm/ext/scalar_packing.inl b/external/glm/glm/ext/scalar_packing.inl deleted file mode 100644 index e69de29b..00000000 diff --git a/external/glm/glm/ext/scalar_relational.hpp b/external/glm/glm/ext/scalar_relational.hpp deleted file mode 100644 index 3076a5e6..00000000 --- a/external/glm/glm/ext/scalar_relational.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/// @ref ext_scalar_relational -/// @file glm/ext/scalar_relational.hpp -/// -/// @defgroup ext_scalar_relational GLM_EXT_scalar_relational -/// @ingroup ext -/// -/// Exposes comparison functions for scalar types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_vector_relational -/// @see ext_matrix_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_relational extension included") -#endif - -namespace glm -{ - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison between two scalars in term of ULPs. - /// True if this expression is satisfied. - /// - /// @param x First operand. - /// @param y Second operand. - /// @param ULPs Maximum difference in ULPs between the two operators to consider them equal. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int ULPs); - - /// Returns the component-wise comparison between two scalars in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @param x First operand. - /// @param y Second operand. - /// @param ULPs Maximum difference in ULPs between the two operators to consider them not equal. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs); - - /// @} -}//namespace glm - -#include "scalar_relational.inl" diff --git a/external/glm/glm/ext/scalar_relational.inl b/external/glm/glm/ext/scalar_relational.inl deleted file mode 100644 index c85583ef..00000000 --- a/external/glm/glm/ext/scalar_relational.inl +++ /dev/null @@ -1,40 +0,0 @@ -#include "../common.hpp" -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/type_float.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon) - { - return abs(x - y) <= epsilon; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon) - { - return abs(x - y) > epsilon; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int MaxULPs) - { - detail::float_t const a(x); - detail::float_t const b(y); - - // Different signs means they do not match. - if(a.negative() != b.negative()) - return false; - - // Find the difference in ULPs. - typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); - return DiffULPs <= MaxULPs; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs) - { - return !equal(x, y, ULPs); - } -}//namespace glm diff --git a/external/glm/glm/ext/scalar_uint_sized.hpp b/external/glm/glm/ext/scalar_uint_sized.hpp deleted file mode 100644 index fd5267fa..00000000 --- a/external/glm/glm/ext/scalar_uint_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_scalar_uint_sized -/// @file glm/ext/scalar_uint_sized.hpp -/// -/// @defgroup ext_scalar_uint_sized GLM_EXT_scalar_uint_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer scalar types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_uint_sized extension included") -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::uint8_t uint8; - typedef std::uint16_t uint16; - typedef std::uint32_t uint32; -# else - typedef unsigned char uint8; - typedef unsigned short uint16; - typedef unsigned int uint32; -#endif - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - - /// @addtogroup ext_scalar_uint_sized - /// @{ - - /// 8 bit unsigned integer type. - typedef detail::uint8 uint8; - - /// 16 bit unsigned integer type. - typedef detail::uint16 uint16; - - /// 32 bit unsigned integer type. - typedef detail::uint32 uint32; - - /// 64 bit unsigned integer type. - typedef detail::uint64 uint64; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/scalar_ulp.hpp b/external/glm/glm/ext/scalar_ulp.hpp deleted file mode 100644 index 941ada3e..00000000 --- a/external/glm/glm/ext/scalar_ulp.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/// @ref ext_scalar_ulp -/// @file glm/ext/scalar_ulp.hpp -/// -/// @defgroup ext_scalar_ulp GLM_EXT_scalar_ulp -/// @ingroup ext -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_ulp -/// @see ext_scalar_relational - -#pragma once - -// Dependencies -#include "../ext/scalar_int_sized.hpp" -#include "../common.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType nextFloat(genType x); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType prevFloat(genType x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType nextFloat(genType x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType prevFloat(genType x, int ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @see ext_scalar_ulp - GLM_FUNC_DECL int floatDistance(float x, float y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @see ext_scalar_ulp - GLM_FUNC_DECL int64 floatDistance(double x, double y); - - /// @} -}//namespace glm - -#include "scalar_ulp.inl" diff --git a/external/glm/glm/ext/scalar_ulp.inl b/external/glm/glm/ext/scalar_ulp.inl deleted file mode 100644 index 308df150..00000000 --- a/external/glm/glm/ext/scalar_ulp.inl +++ /dev/null @@ -1,284 +0,0 @@ -/// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. -/// -/// Developed at SunPro, a Sun Microsystems, Inc. business. -/// Permission to use, copy, modify, and distribute this -/// software is freely granted, provided that this notice -/// is preserved. - -#include "../detail/type_float.hpp" -#include "../ext/scalar_constants.hpp" -#include -#include - -#if(GLM_COMPILER & GLM_COMPILER_VC) -# pragma warning(push) -# pragma warning(disable : 4127) -#endif - -typedef union -{ - float value; - /* FIXME: Assumes 32 bit int. */ - unsigned int word; -} ieee_float_shape_type; - -typedef union -{ - double value; - struct - { - int lsw; - int msw; - } parts; -} ieee_double_shape_type; - -#define GLM_EXTRACT_WORDS(ix0,ix1,d) \ - do { \ - ieee_double_shape_type ew_u; \ - ew_u.value = (d); \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ - } while (0) - -#define GLM_GET_FLOAT_WORD(i,d) \ - do { \ - ieee_float_shape_type gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ - } while (0) - -#define GLM_SET_FLOAT_WORD(d,i) \ - do { \ - ieee_float_shape_type sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ - } while (0) - -#define GLM_INSERT_WORDS(d,ix0,ix1) \ - do { \ - ieee_double_shape_type iw_u; \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ - } while (0) - -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER float nextafterf(float x, float y) - { - volatile float t; - int hx, hy, ix, iy; - - GLM_GET_FLOAT_WORD(hx, x); - GLM_GET_FLOAT_WORD(hy, y); - ix = hx & 0x7fffffff; // |x| - iy = hy & 0x7fffffff; // |y| - - if((ix > 0x7f800000) || // x is nan - (iy > 0x7f800000)) // y is nan - return x + y; - if(abs(y - x) <= epsilon()) - return y; // x=y, return y - if(ix == 0) - { // x == 0 - GLM_SET_FLOAT_WORD(x, (hy & 0x80000000) | 1);// return +-minsubnormal - t = x * x; - if(abs(t - x) <= epsilon()) - return t; - else - return x; // raise underflow flag - } - if(hx >= 0) - { // x > 0 - if(hx > hy) // x > y, x -= ulp - hx -= 1; - else // x < y, x += ulp - hx += 1; - } - else - { // x < 0 - if(hy >= 0 || hx > hy) // x < y, x -= ulp - hx -= 1; - else // x > y, x += ulp - hx += 1; - } - hy = hx & 0x7f800000; - if(hy >= 0x7f800000) - return x + x; // overflow - if(hy < 0x00800000) // underflow - { - t = x * x; - if(abs(t - x) > epsilon()) - { // raise underflow flag - GLM_SET_FLOAT_WORD(y, hx); - return y; - } - } - GLM_SET_FLOAT_WORD(x, hx); - return x; - } - - GLM_FUNC_QUALIFIER double nextafter(double x, double y) - { - volatile double t; - int hx, hy, ix, iy; - unsigned int lx, ly; - - GLM_EXTRACT_WORDS(hx, lx, x); - GLM_EXTRACT_WORDS(hy, ly, y); - ix = hx & 0x7fffffff; // |x| - iy = hy & 0x7fffffff; // |y| - - if(((ix >= 0x7ff00000) && ((ix - 0x7ff00000) | lx) != 0) || // x is nan - ((iy >= 0x7ff00000) && ((iy - 0x7ff00000) | ly) != 0)) // y is nan - return x + y; - if(abs(y - x) <= epsilon()) - return y; // x=y, return y - if((ix | lx) == 0) - { // x == 0 - GLM_INSERT_WORDS(x, hy & 0x80000000, 1); // return +-minsubnormal - t = x * x; - if(abs(t - x) <= epsilon()) - return t; - else - return x; // raise underflow flag - } - if(hx >= 0) { // x > 0 - if(hx > hy || ((hx == hy) && (lx > ly))) { // x > y, x -= ulp - if(lx == 0) hx -= 1; - lx -= 1; - } - else { // x < y, x += ulp - lx += 1; - if(lx == 0) hx += 1; - } - } - else { // x < 0 - if(hy >= 0 || hx > hy || ((hx == hy) && (lx > ly))){// x < y, x -= ulp - if(lx == 0) hx -= 1; - lx -= 1; - } - else { // x > y, x += ulp - lx += 1; - if(lx == 0) hx += 1; - } - } - hy = hx & 0x7ff00000; - if(hy >= 0x7ff00000) - return x + x; // overflow - if(hy < 0x00100000) - { // underflow - t = x * x; - if(abs(t - x) > epsilon()) - { // raise underflow flag - GLM_INSERT_WORDS(y, hx, lx); - return y; - } - } - GLM_INSERT_WORDS(x, hx, lx); - return x; - } -}//namespace detail -}//namespace glm - -#if(GLM_COMPILER & GLM_COMPILER_VC) -# pragma warning(pop) -#endif - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER float nextFloat(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MAX); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MAX); -# else - return nextafterf(x, FLT_MAX); -# endif - } - - template<> - GLM_FUNC_QUALIFIER double nextFloat(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafter(x, std::numeric_limits::max()); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MAX); -# else - return nextafter(x, DBL_MAX); -# endif - } - - template - GLM_FUNC_QUALIFIER T nextFloat(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for(int i = 0; i < ULPs; ++i) - temp = nextFloat(temp); - return temp; - } - - GLM_FUNC_QUALIFIER float prevFloat(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MIN); -# else - return nextafterf(x, FLT_MIN); -# endif - } - - GLM_FUNC_QUALIFIER double prevFloat(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return _nextafter(x, DBL_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MIN); -# else - return nextafter(x, DBL_MIN); -# endif - } - - template - GLM_FUNC_QUALIFIER T prevFloat(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for(int i = 0; i < ULPs; ++i) - temp = prevFloat(temp); - return temp; - } - - GLM_FUNC_QUALIFIER int floatDistance(float x, float y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - GLM_FUNC_QUALIFIER int64 floatDistance(double x, double y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } -}//namespace glm diff --git a/external/glm/glm/ext/vector_bool1.hpp b/external/glm/glm/ext/vector_bool1.hpp deleted file mode 100644 index 002c3202..00000000 --- a/external/glm/glm/ext/vector_bool1.hpp +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref ext_vector_bool1 -/// @file glm/ext/vector_bool1.hpp -/// -/// @defgroup ext_vector_bool1 GLM_EXT_vector_bool1 -/// @ingroup ext -/// -/// Exposes bvec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_bool1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_bool1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_bool1 - /// @{ - - /// 1 components vector of boolean. - typedef vec<1, bool, defaultp> bvec1; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_bool1_precision.hpp b/external/glm/glm/ext/vector_bool1_precision.hpp deleted file mode 100644 index e62d3cfb..00000000 --- a/external/glm/glm/ext/vector_bool1_precision.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/// @ref ext_vector_bool1_precision -/// @file glm/ext/vector_bool1_precision.hpp -/// -/// @defgroup ext_vector_bool1_precision GLM_EXT_vector_bool1_precision -/// @ingroup ext -/// -/// Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. -/// -/// Include to use the features of this extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_bool1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_bool1_precision - /// @{ - - /// 1 component vector of bool values. - typedef vec<1, bool, highp> highp_bvec1; - - /// 1 component vector of bool values. - typedef vec<1, bool, mediump> mediump_bvec1; - - /// 1 component vector of bool values. - typedef vec<1, bool, lowp> lowp_bvec1; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_bool2.hpp b/external/glm/glm/ext/vector_bool2.hpp deleted file mode 100644 index 52288b75..00000000 --- a/external/glm/glm/ext/vector_bool2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, bool, defaultp> bvec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_bool2_precision.hpp b/external/glm/glm/ext/vector_bool2_precision.hpp deleted file mode 100644 index 43709332..00000000 --- a/external/glm/glm/ext/vector_bool2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, highp> highp_bvec2; - - /// 2 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, mediump> mediump_bvec2; - - /// 2 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, lowp> lowp_bvec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_bool3.hpp b/external/glm/glm/ext/vector_bool3.hpp deleted file mode 100644 index 90a0b7ea..00000000 --- a/external/glm/glm/ext/vector_bool3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, bool, defaultp> bvec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_bool3_precision.hpp b/external/glm/glm/ext/vector_bool3_precision.hpp deleted file mode 100644 index 89cd2d32..00000000 --- a/external/glm/glm/ext/vector_bool3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, highp> highp_bvec3; - - /// 3 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, mediump> mediump_bvec3; - - /// 3 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, lowp> lowp_bvec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_bool4.hpp b/external/glm/glm/ext/vector_bool4.hpp deleted file mode 100644 index 18aa71bd..00000000 --- a/external/glm/glm/ext/vector_bool4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, bool, defaultp> bvec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_bool4_precision.hpp b/external/glm/glm/ext/vector_bool4_precision.hpp deleted file mode 100644 index 79786e54..00000000 --- a/external/glm/glm/ext/vector_bool4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool4_precision.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, highp> highp_bvec4; - - /// 4 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, mediump> mediump_bvec4; - - /// 4 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, lowp> lowp_bvec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_common.hpp b/external/glm/glm/ext/vector_common.hpp deleted file mode 100644 index 521ec01e..00000000 --- a/external/glm/glm/ext/vector_common.hpp +++ /dev/null @@ -1,204 +0,0 @@ -/// @ref ext_vector_common -/// @file glm/ext/vector_common.hpp -/// -/// @defgroup ext_vector_common GLM_EXT_vector_common -/// @ingroup ext -/// -/// Exposes min and max functions for 3 to 4 vector parameters. -/// -/// Include to use the features of this extension. -/// -/// @see core_common -/// @see ext_scalar_common - -#pragma once - -// Dependency: -#include "../ext/scalar_common.hpp" -#include "../common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_common - /// @{ - - /// Return the minimum component-wise values of 3 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c); - - /// Return the minimum component-wise values of 4 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Return the maximum component-wise values of 3 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z); - - /// Return the maximum component-wise values of 4 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max( vec const& x, vec const& y, vec const& z, vec const& w); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& x, T y); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& x, vec const& y); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, T b); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common - template - GLM_FUNC_DECL vec fclamp(vec const& x, T minVal, T maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common - template - GLM_FUNC_DECL vec fclamp(vec const& x, vec const& minVal, vec const& maxVal); - - /// Simulate GL_CLAMP OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec clamp(vec const& Texcoord); - - /// Simulate GL_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec repeat(vec const& Texcoord); - - /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec mirrorClamp(vec const& Texcoord); - - /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec mirrorRepeat(vec const& Texcoord); - - /// @} -}//namespace glm - -#include "vector_common.inl" diff --git a/external/glm/glm/ext/vector_common.inl b/external/glm/glm/ext/vector_common.inl deleted file mode 100644 index 82d2c902..00000000 --- a/external/glm/glm/ext/vector_common.inl +++ /dev/null @@ -1,129 +0,0 @@ -#include "../detail/_vectorize.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return glm::min(glm::min(x, y), z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z, vec const& w) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - return glm::max(glm::max(x, y), z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z, vec const& w) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return detail::functor2::call(fmin, a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return detail::functor2::call(fmin, a, b); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return fmin(fmin(a, b), c); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c, vec const& d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return fmin(fmin(a, b), fmin(c, d)); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return detail::functor2::call(fmax, a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return detail::functor2::call(fmax, a, b); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return fmax(fmax(a, b), c); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c, vec const& d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return fmax(fmax(a, b), fmax(c, d)); - } - - template - GLM_FUNC_QUALIFIER vec fclamp(vec const& x, T minVal, T maxVal) - { - return fmin(fmax(x, vec(minVal)), vec(maxVal)); - } - - template - GLM_FUNC_QUALIFIER vec fclamp(vec const& x, vec const& minVal, vec const& maxVal) - { - return fmin(fmax(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER vec clamp(vec const& Texcoord) - { - return glm::clamp(Texcoord, vec(0), vec(1)); - } - - template - GLM_FUNC_QUALIFIER vec repeat(vec const& Texcoord) - { - return glm::fract(Texcoord); - } - - template - GLM_FUNC_QUALIFIER vec mirrorClamp(vec const& Texcoord) - { - return glm::fract(glm::abs(Texcoord)); - } - - template - GLM_FUNC_QUALIFIER vec mirrorRepeat(vec const& Texcoord) - { - vec const Abs = glm::abs(Texcoord); - vec const Clamp = glm::mod(glm::floor(Abs), vec(2)); - vec const Floor = glm::floor(Abs); - vec const Rest = Abs - Floor; - vec const Mirror = Clamp + Rest; - return mix(Rest, vec(1) - Rest, glm::greaterThanEqual(Mirror, vec(1))); - } -}//namespace glm diff --git a/external/glm/glm/ext/vector_double1.hpp b/external/glm/glm/ext/vector_double1.hpp deleted file mode 100644 index 38826677..00000000 --- a/external/glm/glm/ext/vector_double1.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref ext_vector_double1 -/// @file glm/ext/vector_double1.hpp -/// -/// @defgroup ext_vector_double1 GLM_EXT_vector_double1 -/// @ingroup ext -/// -/// Exposes double-precision floating point vector type with one component. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_double1_precision extension. -/// @see ext_vector_float1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_double1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_double1 - /// @{ - - /// 1 components vector of double-precision floating-point numbers. - typedef vec<1, double, defaultp> dvec1; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_double1_precision.hpp b/external/glm/glm/ext/vector_double1_precision.hpp deleted file mode 100644 index 1d471959..00000000 --- a/external/glm/glm/ext/vector_double1_precision.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_vector_double1_precision -/// @file glm/ext/vector_double1_precision.hpp -/// -/// @defgroup ext_vector_double1_precision GLM_EXT_vector_double1_precision -/// @ingroup ext -/// -/// Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_double1 - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_double1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_double1_precision - /// @{ - - /// 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, highp> highp_dvec1; - - /// 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, mediump> mediump_dvec1; - - /// 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, lowp> lowp_dvec1; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_double2.hpp b/external/glm/glm/ext/vector_double2.hpp deleted file mode 100644 index 60e35775..00000000 --- a/external/glm/glm/ext/vector_double2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, double, defaultp> dvec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_double2_precision.hpp b/external/glm/glm/ext/vector_double2_precision.hpp deleted file mode 100644 index fa53940f..00000000 --- a/external/glm/glm/ext/vector_double2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, highp> highp_dvec2; - - /// 2 components vector of medium double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, mediump> mediump_dvec2; - - /// 2 components vector of low double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, lowp> lowp_dvec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_double3.hpp b/external/glm/glm/ext/vector_double3.hpp deleted file mode 100644 index 6dfe4c67..00000000 --- a/external/glm/glm/ext/vector_double3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, double, defaultp> dvec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_double3_precision.hpp b/external/glm/glm/ext/vector_double3_precision.hpp deleted file mode 100644 index a8cfa37a..00000000 --- a/external/glm/glm/ext/vector_double3_precision.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, highp> highp_dvec3; - - /// 3 components vector of medium double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, mediump> mediump_dvec3; - - /// 3 components vector of low double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, lowp> lowp_dvec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_double4.hpp b/external/glm/glm/ext/vector_double4.hpp deleted file mode 100644 index 87f225f6..00000000 --- a/external/glm/glm/ext/vector_double4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, double, defaultp> dvec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_double4_precision.hpp b/external/glm/glm/ext/vector_double4_precision.hpp deleted file mode 100644 index 09cafa1e..00000000 --- a/external/glm/glm/ext/vector_double4_precision.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double4_precision.hpp - -#pragma once -#include "../detail/setup.hpp" -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, highp> highp_dvec4; - - /// 4 components vector of medium double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, mediump> mediump_dvec4; - - /// 4 components vector of low double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, lowp> lowp_dvec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_float1.hpp b/external/glm/glm/ext/vector_float1.hpp deleted file mode 100644 index 28acc2c9..00000000 --- a/external/glm/glm/ext/vector_float1.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref ext_vector_float1 -/// @file glm/ext/vector_float1.hpp -/// -/// @defgroup ext_vector_float1 GLM_EXT_vector_float1 -/// @ingroup ext -/// -/// Exposes single-precision floating point vector type with one component. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_float1_precision extension. -/// @see ext_vector_double1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_float1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_float1 - /// @{ - - /// 1 components vector of single-precision floating-point numbers. - typedef vec<1, float, defaultp> vec1; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_float1_precision.hpp b/external/glm/glm/ext/vector_float1_precision.hpp deleted file mode 100644 index 6e8dad8d..00000000 --- a/external/glm/glm/ext/vector_float1_precision.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_vector_float1_precision -/// @file glm/ext/vector_float1_precision.hpp -/// -/// @defgroup ext_vector_float1_precision GLM_EXT_vector_float1_precision -/// @ingroup ext -/// -/// Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_float1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_float1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_float1_precision - /// @{ - - /// 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, highp> highp_vec1; - - /// 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, mediump> mediump_vec1; - - /// 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, lowp> lowp_vec1; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_float2.hpp b/external/glm/glm/ext/vector_float2.hpp deleted file mode 100644 index d31545dc..00000000 --- a/external/glm/glm/ext/vector_float2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, float, defaultp> vec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_float2_precision.hpp b/external/glm/glm/ext/vector_float2_precision.hpp deleted file mode 100644 index 23c0820d..00000000 --- a/external/glm/glm/ext/vector_float2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, highp> highp_vec2; - - /// 2 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, mediump> mediump_vec2; - - /// 2 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, lowp> lowp_vec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_float3.hpp b/external/glm/glm/ext/vector_float3.hpp deleted file mode 100644 index cd79a620..00000000 --- a/external/glm/glm/ext/vector_float3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, float, defaultp> vec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_float3_precision.hpp b/external/glm/glm/ext/vector_float3_precision.hpp deleted file mode 100644 index be640b53..00000000 --- a/external/glm/glm/ext/vector_float3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, highp> highp_vec3; - - /// 3 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, mediump> mediump_vec3; - - /// 3 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, lowp> lowp_vec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_float4.hpp b/external/glm/glm/ext/vector_float4.hpp deleted file mode 100644 index d84adcc2..00000000 --- a/external/glm/glm/ext/vector_float4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, float, defaultp> vec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_float4_precision.hpp b/external/glm/glm/ext/vector_float4_precision.hpp deleted file mode 100644 index aede8388..00000000 --- a/external/glm/glm/ext/vector_float4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float4_precision.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, highp> highp_vec4; - - /// 4 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, mediump> mediump_vec4; - - /// 4 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, lowp> lowp_vec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_int1.hpp b/external/glm/glm/ext/vector_int1.hpp deleted file mode 100644 index dc860389..00000000 --- a/external/glm/glm/ext/vector_int1.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_vector_int1 -/// @file glm/ext/vector_int1.hpp -/// -/// @defgroup ext_vector_int1 GLM_EXT_vector_int1 -/// @ingroup ext -/// -/// Exposes ivec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_uint1 extension. -/// @see ext_vector_int1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int1 - /// @{ - - /// 1 component vector of signed integer numbers. - typedef vec<1, int, defaultp> ivec1; - - /// @} -}//namespace glm - diff --git a/external/glm/glm/ext/vector_int1_sized.hpp b/external/glm/glm/ext/vector_int1_sized.hpp deleted file mode 100644 index de0d4cf8..00000000 --- a/external/glm/glm/ext/vector_int1_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int1_sized -/// @file glm/ext/vector_int1_sized.hpp -/// -/// @defgroup ext_vector_int1_sized GLM_EXT_vector_int1_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint1_sized - -#pragma once - -#include "../ext/vector_int1.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int1_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int1_sized - /// @{ - - /// 8 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int8, defaultp> i8vec1; - - /// 16 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int16, defaultp> i16vec1; - - /// 32 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int32, defaultp> i32vec1; - - /// 64 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int64, defaultp> i64vec1; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_int2.hpp b/external/glm/glm/ext/vector_int2.hpp deleted file mode 100644 index aef803e9..00000000 --- a/external/glm/glm/ext/vector_int2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_int2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, int, defaultp> ivec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_int2_sized.hpp b/external/glm/glm/ext/vector_int2_sized.hpp deleted file mode 100644 index 1fd57eef..00000000 --- a/external/glm/glm/ext/vector_int2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int2_sized -/// @file glm/ext/vector_int2_sized.hpp -/// -/// @defgroup ext_vector_int2_sized GLM_EXT_vector_int2_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 2 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint2_sized - -#pragma once - -#include "../ext/vector_int2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int2_sized - /// @{ - - /// 8 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int8, defaultp> i8vec2; - - /// 16 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int16, defaultp> i16vec2; - - /// 32 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int32, defaultp> i32vec2; - - /// 64 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int64, defaultp> i64vec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_int3.hpp b/external/glm/glm/ext/vector_int3.hpp deleted file mode 100644 index 4767e61e..00000000 --- a/external/glm/glm/ext/vector_int3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_int3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, int, defaultp> ivec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_int3_sized.hpp b/external/glm/glm/ext/vector_int3_sized.hpp deleted file mode 100644 index 085a3feb..00000000 --- a/external/glm/glm/ext/vector_int3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int3_sized -/// @file glm/ext/vector_int3_sized.hpp -/// -/// @defgroup ext_vector_int3_sized GLM_EXT_vector_int3_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 3 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint3_sized - -#pragma once - -#include "../ext/vector_int3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int3_sized - /// @{ - - /// 8 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int8, defaultp> i8vec3; - - /// 16 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int16, defaultp> i16vec3; - - /// 32 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int32, defaultp> i32vec3; - - /// 64 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int64, defaultp> i64vec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_int4.hpp b/external/glm/glm/ext/vector_int4.hpp deleted file mode 100644 index bb23adf7..00000000 --- a/external/glm/glm/ext/vector_int4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_int4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, int, defaultp> ivec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_int4_sized.hpp b/external/glm/glm/ext/vector_int4_sized.hpp deleted file mode 100644 index c63d4654..00000000 --- a/external/glm/glm/ext/vector_int4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int4_sized -/// @file glm/ext/vector_int4_sized.hpp -/// -/// @defgroup ext_vector_int4_sized GLM_EXT_vector_int4_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 4 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint4_sized - -#pragma once - -#include "../ext/vector_int4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int4_sized - /// @{ - - /// 8 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int8, defaultp> i8vec4; - - /// 16 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int16, defaultp> i16vec4; - - /// 32 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int32, defaultp> i32vec4; - - /// 64 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int64, defaultp> i64vec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_integer.hpp b/external/glm/glm/ext/vector_integer.hpp deleted file mode 100644 index 1304dd8d..00000000 --- a/external/glm/glm/ext/vector_integer.hpp +++ /dev/null @@ -1,149 +0,0 @@ -/// @ref ext_vector_integer -/// @file glm/ext/vector_integer.hpp -/// -/// @see core (dependence) -/// @see ext_vector_integer (dependence) -/// -/// @defgroup ext_vector_integer GLM_EXT_vector_integer -/// @ingroup ext -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_integer - /// @{ - - /// Return true if the value is a power of two number. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevPowerOfTwo(vec const& v); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isMultiple(vec const& v, T Multiple); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isMultiple(vec const& v, vec const& Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextMultiple(vec const& v, T Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevMultiple(vec const& v, T Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevMultiple(vec const& v, vec const& Multiple); - - /// Returns the bit number of the Nth significant bit set to - /// 1 in the binary representation of value. - /// If value bitcount is less than the Nth significant bit, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec findNSB(vec const& Source, vec SignificantBitCount); - - /// @} -} //namespace glm - -#include "vector_integer.inl" diff --git a/external/glm/glm/ext/vector_integer.inl b/external/glm/glm/ext/vector_integer.inl deleted file mode 100644 index 939ff5e2..00000000 --- a/external/glm/glm/ext/vector_integer.inl +++ /dev/null @@ -1,85 +0,0 @@ -#include "scalar_integer.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec isPowerOfTwo(vec const& Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); - - vec const Result(abs(Value)); - return equal(Result & (Result - vec(1)), vec(0)); - } - - template - GLM_FUNC_QUALIFIER vec nextPowerOfTwo(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); - - return detail::compute_ceilPowerOfTwo::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER vec prevPowerOfTwo(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); - - return detail::functor1::call(prevPowerOfTwo, v); - } - - template - GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return (Value % Multiple) == vec(0); - } - - template - GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return (Value % Multiple) == vec(0); - } - - template - GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::functor2::call(nextMultiple, Source, vec(Multiple)); - } - - template - GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::functor2::call(nextMultiple, Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::functor2::call(prevMultiple, Source, vec(Multiple)); - } - - template - GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::functor2::call(prevMultiple, Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec findNSB(vec const& Source, vec SignificantBitCount) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); - - return detail::functor2_vec_int::call(findNSB, Source, SignificantBitCount); - } -}//namespace glm diff --git a/external/glm/glm/ext/vector_packing.hpp b/external/glm/glm/ext/vector_packing.hpp deleted file mode 100644 index 76e5d0cc..00000000 --- a/external/glm/glm/ext/vector_packing.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_vector_packing -/// @file glm/ext/vector_packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_vector_packing GLM_EXT_vector_packing -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert vectors to packed -/// formats. - -#pragma once - -// Dependency: -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_packing - /// @{ - - - /// @} -}// namespace glm - -#include "vector_packing.inl" diff --git a/external/glm/glm/ext/vector_packing.inl b/external/glm/glm/ext/vector_packing.inl deleted file mode 100644 index e69de29b..00000000 diff --git a/external/glm/glm/ext/vector_relational.hpp b/external/glm/glm/ext/vector_relational.hpp deleted file mode 100644 index 1c2367dc..00000000 --- a/external/glm/glm/ext/vector_relational.hpp +++ /dev/null @@ -1,107 +0,0 @@ -/// @ref ext_vector_relational -/// @file glm/ext/vector_relational.hpp -/// -/// @see core (dependence) -/// @see ext_scalar_integer (dependence) -/// -/// @defgroup ext_vector_relational GLM_EXT_vector_relational -/// @ingroup ext -/// -/// Exposes comparison functions for vector types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_scalar_relational -/// @see ext_matrix_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_relational - /// @{ - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& epsilon); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& ULPs); - - /// @} -}//namespace glm - -#include "vector_relational.inl" diff --git a/external/glm/glm/ext/vector_relational.inl b/external/glm/glm/ext/vector_relational.inl deleted file mode 100644 index 7a39ab50..00000000 --- a/external/glm/glm/ext/vector_relational.inl +++ /dev/null @@ -1,75 +0,0 @@ -#include "../vector_relational.hpp" -#include "../common.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/type_float.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T Epsilon) - { - return equal(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& Epsilon) - { - return lessThanEqual(abs(x - y), Epsilon); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T Epsilon) - { - return notEqual(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& Epsilon) - { - return greaterThan(abs(x - y), Epsilon); - } - - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int MaxULPs) - { - return equal(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& MaxULPs) - { - vec Result(false); - for(length_t i = 0; i < L; ++i) - { - detail::float_t const a(x[i]); - detail::float_t const b(y[i]); - - // Different signs means they do not match. - if(a.negative() != b.negative()) - { - // Check for equality to make sure +0==-0 - Result[i] = a.mantissa() == b.mantissa() && a.exponent() == b.exponent(); - } - else - { - // Find the difference in ULPs. - typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); - Result[i] = DiffULPs <= MaxULPs[i]; - } - } - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int MaxULPs) - { - return notEqual(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& MaxULPs) - { - return not_(equal(x, y, MaxULPs)); - } -}//namespace glm diff --git a/external/glm/glm/ext/vector_uint1.hpp b/external/glm/glm/ext/vector_uint1.hpp deleted file mode 100644 index eb8a7049..00000000 --- a/external/glm/glm/ext/vector_uint1.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_vector_uint1 -/// @file glm/ext/vector_uint1.hpp -/// -/// @defgroup ext_vector_uint1 GLM_EXT_vector_uint1 -/// @ingroup ext -/// -/// Exposes uvec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_int1 extension. -/// @see ext_vector_uint1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint1 - /// @{ - - /// 1 component vector of unsigned integer numbers. - typedef vec<1, unsigned int, defaultp> uvec1; - - /// @} -}//namespace glm - diff --git a/external/glm/glm/ext/vector_uint1_sized.hpp b/external/glm/glm/ext/vector_uint1_sized.hpp deleted file mode 100644 index 2a938bba..00000000 --- a/external/glm/glm/ext/vector_uint1_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint1_sized -/// @file glm/ext/vector_uint1_sized.hpp -/// -/// @defgroup ext_vector_uint1_sized GLM_EXT_vector_uint1_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int1_sized - -#pragma once - -#include "../ext/vector_uint1.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint1_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint1_sized - /// @{ - - /// 8 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint8, defaultp> u8vec1; - - /// 16 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint16, defaultp> u16vec1; - - /// 32 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint32, defaultp> u32vec1; - - /// 64 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint64, defaultp> u64vec1; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_uint2.hpp b/external/glm/glm/ext/vector_uint2.hpp deleted file mode 100644 index 03c00f5f..00000000 --- a/external/glm/glm/ext/vector_uint2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_uint2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, unsigned int, defaultp> uvec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_uint2_sized.hpp b/external/glm/glm/ext/vector_uint2_sized.hpp deleted file mode 100644 index 620fdc6e..00000000 --- a/external/glm/glm/ext/vector_uint2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint2_sized -/// @file glm/ext/vector_uint2_sized.hpp -/// -/// @defgroup ext_vector_uint2_sized GLM_EXT_vector_uint2_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 2 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int2_sized - -#pragma once - -#include "../ext/vector_uint2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint2_sized - /// @{ - - /// 8 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint8, defaultp> u8vec2; - - /// 16 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint16, defaultp> u16vec2; - - /// 32 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint32, defaultp> u32vec2; - - /// 64 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint64, defaultp> u64vec2; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_uint3.hpp b/external/glm/glm/ext/vector_uint3.hpp deleted file mode 100644 index f5b41c40..00000000 --- a/external/glm/glm/ext/vector_uint3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_uint3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, unsigned int, defaultp> uvec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_uint3_sized.hpp b/external/glm/glm/ext/vector_uint3_sized.hpp deleted file mode 100644 index 6f96b98e..00000000 --- a/external/glm/glm/ext/vector_uint3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint3_sized -/// @file glm/ext/vector_uint3_sized.hpp -/// -/// @defgroup ext_vector_uint3_sized GLM_EXT_vector_uint3_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 3 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int3_sized - -#pragma once - -#include "../ext/vector_uint3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint3_sized - /// @{ - - /// 8 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint8, defaultp> u8vec3; - - /// 16 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint16, defaultp> u16vec3; - - /// 32 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint32, defaultp> u32vec3; - - /// 64 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint64, defaultp> u64vec3; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_uint4.hpp b/external/glm/glm/ext/vector_uint4.hpp deleted file mode 100644 index 32ced58a..00000000 --- a/external/glm/glm/ext/vector_uint4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_uint4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, unsigned int, defaultp> uvec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_uint4_sized.hpp b/external/glm/glm/ext/vector_uint4_sized.hpp deleted file mode 100644 index da992ea2..00000000 --- a/external/glm/glm/ext/vector_uint4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint4_sized -/// @file glm/ext/vector_uint4_sized.hpp -/// -/// @defgroup ext_vector_uint4_sized GLM_EXT_vector_uint4_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 4 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int4_sized - -#pragma once - -#include "../ext/vector_uint4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint4_sized - /// @{ - - /// 8 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint8, defaultp> u8vec4; - - /// 16 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint16, defaultp> u16vec4; - - /// 32 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint32, defaultp> u32vec4; - - /// 64 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint64, defaultp> u64vec4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/ext/vector_ulp.hpp b/external/glm/glm/ext/vector_ulp.hpp deleted file mode 100644 index 6210396b..00000000 --- a/external/glm/glm/ext/vector_ulp.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/// @ref ext_vector_ulp -/// @file glm/ext/vector_ulp.hpp -/// -/// @defgroup ext_vector_ulp GLM_EXT_vector_ulp -/// @ingroup ext -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_ulp -/// @see ext_scalar_relational -/// @see ext_vector_relational - -#pragma once - -// Dependencies -#include "../ext/scalar_ulp.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x, int ULPs); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x, vec const& ULPs); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x, vec const& ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "vector_ulp.inl" diff --git a/external/glm/glm/ext/vector_ulp.inl b/external/glm/glm/ext/vector_ulp.inl deleted file mode 100644 index 91565ce5..00000000 --- a/external/glm/glm/ext/vector_ulp.inl +++ /dev/null @@ -1,74 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, int ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, vec const& ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, int ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, vec const& ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = floatDistance(x[i], y[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = floatDistance(x[i], y[i]); - return Result; - } -}//namespace glm diff --git a/external/glm/glm/fwd.hpp b/external/glm/glm/fwd.hpp deleted file mode 100644 index 89177f46..00000000 --- a/external/glm/glm/fwd.hpp +++ /dev/null @@ -1,1233 +0,0 @@ -#pragma once - -#include "detail/qualifier.hpp" - -namespace glm -{ -#if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::int8_t int8; - typedef std::int16_t int16; - typedef std::int32_t int32; - typedef std::int64_t int64; - - typedef std::uint8_t uint8; - typedef std::uint16_t uint16; - typedef std::uint32_t uint32; - typedef std::uint64_t uint64; -#else - typedef signed char int8; - typedef signed short int16; - typedef signed int int32; - typedef detail::int64 int64; - - typedef unsigned char uint8; - typedef unsigned short uint16; - typedef unsigned int uint32; - typedef detail::uint64 uint64; -#endif - - // Scalar int - - typedef int8 lowp_i8; - typedef int8 mediump_i8; - typedef int8 highp_i8; - typedef int8 i8; - - typedef int8 lowp_int8; - typedef int8 mediump_int8; - typedef int8 highp_int8; - - typedef int8 lowp_int8_t; - typedef int8 mediump_int8_t; - typedef int8 highp_int8_t; - typedef int8 int8_t; - - typedef int16 lowp_i16; - typedef int16 mediump_i16; - typedef int16 highp_i16; - typedef int16 i16; - - typedef int16 lowp_int16; - typedef int16 mediump_int16; - typedef int16 highp_int16; - - typedef int16 lowp_int16_t; - typedef int16 mediump_int16_t; - typedef int16 highp_int16_t; - typedef int16 int16_t; - - typedef int32 lowp_i32; - typedef int32 mediump_i32; - typedef int32 highp_i32; - typedef int32 i32; - - typedef int32 lowp_int32; - typedef int32 mediump_int32; - typedef int32 highp_int32; - - typedef int32 lowp_int32_t; - typedef int32 mediump_int32_t; - typedef int32 highp_int32_t; - typedef int32 int32_t; - - typedef int64 lowp_i64; - typedef int64 mediump_i64; - typedef int64 highp_i64; - typedef int64 i64; - - typedef int64 lowp_int64; - typedef int64 mediump_int64; - typedef int64 highp_int64; - - typedef int64 lowp_int64_t; - typedef int64 mediump_int64_t; - typedef int64 highp_int64_t; - typedef int64 int64_t; - - // Scalar uint - - typedef unsigned int uint; - - typedef uint8 lowp_u8; - typedef uint8 mediump_u8; - typedef uint8 highp_u8; - typedef uint8 u8; - - typedef uint8 lowp_uint8; - typedef uint8 mediump_uint8; - typedef uint8 highp_uint8; - - typedef uint8 lowp_uint8_t; - typedef uint8 mediump_uint8_t; - typedef uint8 highp_uint8_t; - typedef uint8 uint8_t; - - typedef uint16 lowp_u16; - typedef uint16 mediump_u16; - typedef uint16 highp_u16; - typedef uint16 u16; - - typedef uint16 lowp_uint16; - typedef uint16 mediump_uint16; - typedef uint16 highp_uint16; - - typedef uint16 lowp_uint16_t; - typedef uint16 mediump_uint16_t; - typedef uint16 highp_uint16_t; - typedef uint16 uint16_t; - - typedef uint32 lowp_u32; - typedef uint32 mediump_u32; - typedef uint32 highp_u32; - typedef uint32 u32; - - typedef uint32 lowp_uint32; - typedef uint32 mediump_uint32; - typedef uint32 highp_uint32; - - typedef uint32 lowp_uint32_t; - typedef uint32 mediump_uint32_t; - typedef uint32 highp_uint32_t; - typedef uint32 uint32_t; - - typedef uint64 lowp_u64; - typedef uint64 mediump_u64; - typedef uint64 highp_u64; - typedef uint64 u64; - - typedef uint64 lowp_uint64; - typedef uint64 mediump_uint64; - typedef uint64 highp_uint64; - - typedef uint64 lowp_uint64_t; - typedef uint64 mediump_uint64_t; - typedef uint64 highp_uint64_t; - typedef uint64 uint64_t; - - // Scalar float - - typedef float lowp_f32; - typedef float mediump_f32; - typedef float highp_f32; - typedef float f32; - - typedef float lowp_float32; - typedef float mediump_float32; - typedef float highp_float32; - typedef float float32; - - typedef float lowp_float32_t; - typedef float mediump_float32_t; - typedef float highp_float32_t; - typedef float float32_t; - - - typedef double lowp_f64; - typedef double mediump_f64; - typedef double highp_f64; - typedef double f64; - - typedef double lowp_float64; - typedef double mediump_float64; - typedef double highp_float64; - typedef double float64; - - typedef double lowp_float64_t; - typedef double mediump_float64_t; - typedef double highp_float64_t; - typedef double float64_t; - - // Vector bool - - typedef vec<1, bool, lowp> lowp_bvec1; - typedef vec<2, bool, lowp> lowp_bvec2; - typedef vec<3, bool, lowp> lowp_bvec3; - typedef vec<4, bool, lowp> lowp_bvec4; - - typedef vec<1, bool, mediump> mediump_bvec1; - typedef vec<2, bool, mediump> mediump_bvec2; - typedef vec<3, bool, mediump> mediump_bvec3; - typedef vec<4, bool, mediump> mediump_bvec4; - - typedef vec<1, bool, highp> highp_bvec1; - typedef vec<2, bool, highp> highp_bvec2; - typedef vec<3, bool, highp> highp_bvec3; - typedef vec<4, bool, highp> highp_bvec4; - - typedef vec<1, bool, defaultp> bvec1; - typedef vec<2, bool, defaultp> bvec2; - typedef vec<3, bool, defaultp> bvec3; - typedef vec<4, bool, defaultp> bvec4; - - // Vector int - - typedef vec<1, int, lowp> lowp_ivec1; - typedef vec<2, int, lowp> lowp_ivec2; - typedef vec<3, int, lowp> lowp_ivec3; - typedef vec<4, int, lowp> lowp_ivec4; - - typedef vec<1, int, mediump> mediump_ivec1; - typedef vec<2, int, mediump> mediump_ivec2; - typedef vec<3, int, mediump> mediump_ivec3; - typedef vec<4, int, mediump> mediump_ivec4; - - typedef vec<1, int, highp> highp_ivec1; - typedef vec<2, int, highp> highp_ivec2; - typedef vec<3, int, highp> highp_ivec3; - typedef vec<4, int, highp> highp_ivec4; - - typedef vec<1, int, defaultp> ivec1; - typedef vec<2, int, defaultp> ivec2; - typedef vec<3, int, defaultp> ivec3; - typedef vec<4, int, defaultp> ivec4; - - typedef vec<1, i8, lowp> lowp_i8vec1; - typedef vec<2, i8, lowp> lowp_i8vec2; - typedef vec<3, i8, lowp> lowp_i8vec3; - typedef vec<4, i8, lowp> lowp_i8vec4; - - typedef vec<1, i8, mediump> mediump_i8vec1; - typedef vec<2, i8, mediump> mediump_i8vec2; - typedef vec<3, i8, mediump> mediump_i8vec3; - typedef vec<4, i8, mediump> mediump_i8vec4; - - typedef vec<1, i8, highp> highp_i8vec1; - typedef vec<2, i8, highp> highp_i8vec2; - typedef vec<3, i8, highp> highp_i8vec3; - typedef vec<4, i8, highp> highp_i8vec4; - - typedef vec<1, i8, defaultp> i8vec1; - typedef vec<2, i8, defaultp> i8vec2; - typedef vec<3, i8, defaultp> i8vec3; - typedef vec<4, i8, defaultp> i8vec4; - - typedef vec<1, i16, lowp> lowp_i16vec1; - typedef vec<2, i16, lowp> lowp_i16vec2; - typedef vec<3, i16, lowp> lowp_i16vec3; - typedef vec<4, i16, lowp> lowp_i16vec4; - - typedef vec<1, i16, mediump> mediump_i16vec1; - typedef vec<2, i16, mediump> mediump_i16vec2; - typedef vec<3, i16, mediump> mediump_i16vec3; - typedef vec<4, i16, mediump> mediump_i16vec4; - - typedef vec<1, i16, highp> highp_i16vec1; - typedef vec<2, i16, highp> highp_i16vec2; - typedef vec<3, i16, highp> highp_i16vec3; - typedef vec<4, i16, highp> highp_i16vec4; - - typedef vec<1, i16, defaultp> i16vec1; - typedef vec<2, i16, defaultp> i16vec2; - typedef vec<3, i16, defaultp> i16vec3; - typedef vec<4, i16, defaultp> i16vec4; - - typedef vec<1, i32, lowp> lowp_i32vec1; - typedef vec<2, i32, lowp> lowp_i32vec2; - typedef vec<3, i32, lowp> lowp_i32vec3; - typedef vec<4, i32, lowp> lowp_i32vec4; - - typedef vec<1, i32, mediump> mediump_i32vec1; - typedef vec<2, i32, mediump> mediump_i32vec2; - typedef vec<3, i32, mediump> mediump_i32vec3; - typedef vec<4, i32, mediump> mediump_i32vec4; - - typedef vec<1, i32, highp> highp_i32vec1; - typedef vec<2, i32, highp> highp_i32vec2; - typedef vec<3, i32, highp> highp_i32vec3; - typedef vec<4, i32, highp> highp_i32vec4; - - typedef vec<1, i32, defaultp> i32vec1; - typedef vec<2, i32, defaultp> i32vec2; - typedef vec<3, i32, defaultp> i32vec3; - typedef vec<4, i32, defaultp> i32vec4; - - typedef vec<1, i64, lowp> lowp_i64vec1; - typedef vec<2, i64, lowp> lowp_i64vec2; - typedef vec<3, i64, lowp> lowp_i64vec3; - typedef vec<4, i64, lowp> lowp_i64vec4; - - typedef vec<1, i64, mediump> mediump_i64vec1; - typedef vec<2, i64, mediump> mediump_i64vec2; - typedef vec<3, i64, mediump> mediump_i64vec3; - typedef vec<4, i64, mediump> mediump_i64vec4; - - typedef vec<1, i64, highp> highp_i64vec1; - typedef vec<2, i64, highp> highp_i64vec2; - typedef vec<3, i64, highp> highp_i64vec3; - typedef vec<4, i64, highp> highp_i64vec4; - - typedef vec<1, i64, defaultp> i64vec1; - typedef vec<2, i64, defaultp> i64vec2; - typedef vec<3, i64, defaultp> i64vec3; - typedef vec<4, i64, defaultp> i64vec4; - - // Vector uint - - typedef vec<1, uint, lowp> lowp_uvec1; - typedef vec<2, uint, lowp> lowp_uvec2; - typedef vec<3, uint, lowp> lowp_uvec3; - typedef vec<4, uint, lowp> lowp_uvec4; - - typedef vec<1, uint, mediump> mediump_uvec1; - typedef vec<2, uint, mediump> mediump_uvec2; - typedef vec<3, uint, mediump> mediump_uvec3; - typedef vec<4, uint, mediump> mediump_uvec4; - - typedef vec<1, uint, highp> highp_uvec1; - typedef vec<2, uint, highp> highp_uvec2; - typedef vec<3, uint, highp> highp_uvec3; - typedef vec<4, uint, highp> highp_uvec4; - - typedef vec<1, uint, defaultp> uvec1; - typedef vec<2, uint, defaultp> uvec2; - typedef vec<3, uint, defaultp> uvec3; - typedef vec<4, uint, defaultp> uvec4; - - typedef vec<1, u8, lowp> lowp_u8vec1; - typedef vec<2, u8, lowp> lowp_u8vec2; - typedef vec<3, u8, lowp> lowp_u8vec3; - typedef vec<4, u8, lowp> lowp_u8vec4; - - typedef vec<1, u8, mediump> mediump_u8vec1; - typedef vec<2, u8, mediump> mediump_u8vec2; - typedef vec<3, u8, mediump> mediump_u8vec3; - typedef vec<4, u8, mediump> mediump_u8vec4; - - typedef vec<1, u8, highp> highp_u8vec1; - typedef vec<2, u8, highp> highp_u8vec2; - typedef vec<3, u8, highp> highp_u8vec3; - typedef vec<4, u8, highp> highp_u8vec4; - - typedef vec<1, u8, defaultp> u8vec1; - typedef vec<2, u8, defaultp> u8vec2; - typedef vec<3, u8, defaultp> u8vec3; - typedef vec<4, u8, defaultp> u8vec4; - - typedef vec<1, u16, lowp> lowp_u16vec1; - typedef vec<2, u16, lowp> lowp_u16vec2; - typedef vec<3, u16, lowp> lowp_u16vec3; - typedef vec<4, u16, lowp> lowp_u16vec4; - - typedef vec<1, u16, mediump> mediump_u16vec1; - typedef vec<2, u16, mediump> mediump_u16vec2; - typedef vec<3, u16, mediump> mediump_u16vec3; - typedef vec<4, u16, mediump> mediump_u16vec4; - - typedef vec<1, u16, highp> highp_u16vec1; - typedef vec<2, u16, highp> highp_u16vec2; - typedef vec<3, u16, highp> highp_u16vec3; - typedef vec<4, u16, highp> highp_u16vec4; - - typedef vec<1, u16, defaultp> u16vec1; - typedef vec<2, u16, defaultp> u16vec2; - typedef vec<3, u16, defaultp> u16vec3; - typedef vec<4, u16, defaultp> u16vec4; - - typedef vec<1, u32, lowp> lowp_u32vec1; - typedef vec<2, u32, lowp> lowp_u32vec2; - typedef vec<3, u32, lowp> lowp_u32vec3; - typedef vec<4, u32, lowp> lowp_u32vec4; - - typedef vec<1, u32, mediump> mediump_u32vec1; - typedef vec<2, u32, mediump> mediump_u32vec2; - typedef vec<3, u32, mediump> mediump_u32vec3; - typedef vec<4, u32, mediump> mediump_u32vec4; - - typedef vec<1, u32, highp> highp_u32vec1; - typedef vec<2, u32, highp> highp_u32vec2; - typedef vec<3, u32, highp> highp_u32vec3; - typedef vec<4, u32, highp> highp_u32vec4; - - typedef vec<1, u32, defaultp> u32vec1; - typedef vec<2, u32, defaultp> u32vec2; - typedef vec<3, u32, defaultp> u32vec3; - typedef vec<4, u32, defaultp> u32vec4; - - typedef vec<1, u64, lowp> lowp_u64vec1; - typedef vec<2, u64, lowp> lowp_u64vec2; - typedef vec<3, u64, lowp> lowp_u64vec3; - typedef vec<4, u64, lowp> lowp_u64vec4; - - typedef vec<1, u64, mediump> mediump_u64vec1; - typedef vec<2, u64, mediump> mediump_u64vec2; - typedef vec<3, u64, mediump> mediump_u64vec3; - typedef vec<4, u64, mediump> mediump_u64vec4; - - typedef vec<1, u64, highp> highp_u64vec1; - typedef vec<2, u64, highp> highp_u64vec2; - typedef vec<3, u64, highp> highp_u64vec3; - typedef vec<4, u64, highp> highp_u64vec4; - - typedef vec<1, u64, defaultp> u64vec1; - typedef vec<2, u64, defaultp> u64vec2; - typedef vec<3, u64, defaultp> u64vec3; - typedef vec<4, u64, defaultp> u64vec4; - - // Vector float - - typedef vec<1, float, lowp> lowp_vec1; - typedef vec<2, float, lowp> lowp_vec2; - typedef vec<3, float, lowp> lowp_vec3; - typedef vec<4, float, lowp> lowp_vec4; - - typedef vec<1, float, mediump> mediump_vec1; - typedef vec<2, float, mediump> mediump_vec2; - typedef vec<3, float, mediump> mediump_vec3; - typedef vec<4, float, mediump> mediump_vec4; - - typedef vec<1, float, highp> highp_vec1; - typedef vec<2, float, highp> highp_vec2; - typedef vec<3, float, highp> highp_vec3; - typedef vec<4, float, highp> highp_vec4; - - typedef vec<1, float, defaultp> vec1; - typedef vec<2, float, defaultp> vec2; - typedef vec<3, float, defaultp> vec3; - typedef vec<4, float, defaultp> vec4; - - typedef vec<1, float, lowp> lowp_fvec1; - typedef vec<2, float, lowp> lowp_fvec2; - typedef vec<3, float, lowp> lowp_fvec3; - typedef vec<4, float, lowp> lowp_fvec4; - - typedef vec<1, float, mediump> mediump_fvec1; - typedef vec<2, float, mediump> mediump_fvec2; - typedef vec<3, float, mediump> mediump_fvec3; - typedef vec<4, float, mediump> mediump_fvec4; - - typedef vec<1, float, highp> highp_fvec1; - typedef vec<2, float, highp> highp_fvec2; - typedef vec<3, float, highp> highp_fvec3; - typedef vec<4, float, highp> highp_fvec4; - - typedef vec<1, f32, defaultp> fvec1; - typedef vec<2, f32, defaultp> fvec2; - typedef vec<3, f32, defaultp> fvec3; - typedef vec<4, f32, defaultp> fvec4; - - typedef vec<1, f32, lowp> lowp_f32vec1; - typedef vec<2, f32, lowp> lowp_f32vec2; - typedef vec<3, f32, lowp> lowp_f32vec3; - typedef vec<4, f32, lowp> lowp_f32vec4; - - typedef vec<1, f32, mediump> mediump_f32vec1; - typedef vec<2, f32, mediump> mediump_f32vec2; - typedef vec<3, f32, mediump> mediump_f32vec3; - typedef vec<4, f32, mediump> mediump_f32vec4; - - typedef vec<1, f32, highp> highp_f32vec1; - typedef vec<2, f32, highp> highp_f32vec2; - typedef vec<3, f32, highp> highp_f32vec3; - typedef vec<4, f32, highp> highp_f32vec4; - - typedef vec<1, f32, defaultp> f32vec1; - typedef vec<2, f32, defaultp> f32vec2; - typedef vec<3, f32, defaultp> f32vec3; - typedef vec<4, f32, defaultp> f32vec4; - - typedef vec<1, f64, lowp> lowp_dvec1; - typedef vec<2, f64, lowp> lowp_dvec2; - typedef vec<3, f64, lowp> lowp_dvec3; - typedef vec<4, f64, lowp> lowp_dvec4; - - typedef vec<1, f64, mediump> mediump_dvec1; - typedef vec<2, f64, mediump> mediump_dvec2; - typedef vec<3, f64, mediump> mediump_dvec3; - typedef vec<4, f64, mediump> mediump_dvec4; - - typedef vec<1, f64, highp> highp_dvec1; - typedef vec<2, f64, highp> highp_dvec2; - typedef vec<3, f64, highp> highp_dvec3; - typedef vec<4, f64, highp> highp_dvec4; - - typedef vec<1, f64, defaultp> dvec1; - typedef vec<2, f64, defaultp> dvec2; - typedef vec<3, f64, defaultp> dvec3; - typedef vec<4, f64, defaultp> dvec4; - - typedef vec<1, f64, lowp> lowp_f64vec1; - typedef vec<2, f64, lowp> lowp_f64vec2; - typedef vec<3, f64, lowp> lowp_f64vec3; - typedef vec<4, f64, lowp> lowp_f64vec4; - - typedef vec<1, f64, mediump> mediump_f64vec1; - typedef vec<2, f64, mediump> mediump_f64vec2; - typedef vec<3, f64, mediump> mediump_f64vec3; - typedef vec<4, f64, mediump> mediump_f64vec4; - - typedef vec<1, f64, highp> highp_f64vec1; - typedef vec<2, f64, highp> highp_f64vec2; - typedef vec<3, f64, highp> highp_f64vec3; - typedef vec<4, f64, highp> highp_f64vec4; - - typedef vec<1, f64, defaultp> f64vec1; - typedef vec<2, f64, defaultp> f64vec2; - typedef vec<3, f64, defaultp> f64vec3; - typedef vec<4, f64, defaultp> f64vec4; - - // Matrix NxN - - typedef mat<2, 2, f32, lowp> lowp_mat2; - typedef mat<3, 3, f32, lowp> lowp_mat3; - typedef mat<4, 4, f32, lowp> lowp_mat4; - - typedef mat<2, 2, f32, mediump> mediump_mat2; - typedef mat<3, 3, f32, mediump> mediump_mat3; - typedef mat<4, 4, f32, mediump> mediump_mat4; - - typedef mat<2, 2, f32, highp> highp_mat2; - typedef mat<3, 3, f32, highp> highp_mat3; - typedef mat<4, 4, f32, highp> highp_mat4; - - typedef mat<2, 2, f32, defaultp> mat2; - typedef mat<3, 3, f32, defaultp> mat3; - typedef mat<4, 4, f32, defaultp> mat4; - - typedef mat<2, 2, f32, lowp> lowp_fmat2; - typedef mat<3, 3, f32, lowp> lowp_fmat3; - typedef mat<4, 4, f32, lowp> lowp_fmat4; - - typedef mat<2, 2, f32, mediump> mediump_fmat2; - typedef mat<3, 3, f32, mediump> mediump_fmat3; - typedef mat<4, 4, f32, mediump> mediump_fmat4; - - typedef mat<2, 2, f32, highp> highp_fmat2; - typedef mat<3, 3, f32, highp> highp_fmat3; - typedef mat<4, 4, f32, highp> highp_fmat4; - - typedef mat<2, 2, f32, defaultp> fmat2; - typedef mat<3, 3, f32, defaultp> fmat3; - typedef mat<4, 4, f32, defaultp> fmat4; - - typedef mat<2, 2, f32, lowp> lowp_f32mat2; - typedef mat<3, 3, f32, lowp> lowp_f32mat3; - typedef mat<4, 4, f32, lowp> lowp_f32mat4; - - typedef mat<2, 2, f32, mediump> mediump_f32mat2; - typedef mat<3, 3, f32, mediump> mediump_f32mat3; - typedef mat<4, 4, f32, mediump> mediump_f32mat4; - - typedef mat<2, 2, f32, highp> highp_f32mat2; - typedef mat<3, 3, f32, highp> highp_f32mat3; - typedef mat<4, 4, f32, highp> highp_f32mat4; - - typedef mat<2, 2, f32, defaultp> f32mat2; - typedef mat<3, 3, f32, defaultp> f32mat3; - typedef mat<4, 4, f32, defaultp> f32mat4; - - typedef mat<2, 2, f64, lowp> lowp_dmat2; - typedef mat<3, 3, f64, lowp> lowp_dmat3; - typedef mat<4, 4, f64, lowp> lowp_dmat4; - - typedef mat<2, 2, f64, mediump> mediump_dmat2; - typedef mat<3, 3, f64, mediump> mediump_dmat3; - typedef mat<4, 4, f64, mediump> mediump_dmat4; - - typedef mat<2, 2, f64, highp> highp_dmat2; - typedef mat<3, 3, f64, highp> highp_dmat3; - typedef mat<4, 4, f64, highp> highp_dmat4; - - typedef mat<2, 2, f64, defaultp> dmat2; - typedef mat<3, 3, f64, defaultp> dmat3; - typedef mat<4, 4, f64, defaultp> dmat4; - - typedef mat<2, 2, f64, lowp> lowp_f64mat2; - typedef mat<3, 3, f64, lowp> lowp_f64mat3; - typedef mat<4, 4, f64, lowp> lowp_f64mat4; - - typedef mat<2, 2, f64, mediump> mediump_f64mat2; - typedef mat<3, 3, f64, mediump> mediump_f64mat3; - typedef mat<4, 4, f64, mediump> mediump_f64mat4; - - typedef mat<2, 2, f64, highp> highp_f64mat2; - typedef mat<3, 3, f64, highp> highp_f64mat3; - typedef mat<4, 4, f64, highp> highp_f64mat4; - - typedef mat<2, 2, f64, defaultp> f64mat2; - typedef mat<3, 3, f64, defaultp> f64mat3; - typedef mat<4, 4, f64, defaultp> f64mat4; - - // Matrix MxN - - typedef mat<2, 2, f32, lowp> lowp_mat2x2; - typedef mat<2, 3, f32, lowp> lowp_mat2x3; - typedef mat<2, 4, f32, lowp> lowp_mat2x4; - typedef mat<3, 2, f32, lowp> lowp_mat3x2; - typedef mat<3, 3, f32, lowp> lowp_mat3x3; - typedef mat<3, 4, f32, lowp> lowp_mat3x4; - typedef mat<4, 2, f32, lowp> lowp_mat4x2; - typedef mat<4, 3, f32, lowp> lowp_mat4x3; - typedef mat<4, 4, f32, lowp> lowp_mat4x4; - - typedef mat<2, 2, f32, mediump> mediump_mat2x2; - typedef mat<2, 3, f32, mediump> mediump_mat2x3; - typedef mat<2, 4, f32, mediump> mediump_mat2x4; - typedef mat<3, 2, f32, mediump> mediump_mat3x2; - typedef mat<3, 3, f32, mediump> mediump_mat3x3; - typedef mat<3, 4, f32, mediump> mediump_mat3x4; - typedef mat<4, 2, f32, mediump> mediump_mat4x2; - typedef mat<4, 3, f32, mediump> mediump_mat4x3; - typedef mat<4, 4, f32, mediump> mediump_mat4x4; - - typedef mat<2, 2, f32, highp> highp_mat2x2; - typedef mat<2, 3, f32, highp> highp_mat2x3; - typedef mat<2, 4, f32, highp> highp_mat2x4; - typedef mat<3, 2, f32, highp> highp_mat3x2; - typedef mat<3, 3, f32, highp> highp_mat3x3; - typedef mat<3, 4, f32, highp> highp_mat3x4; - typedef mat<4, 2, f32, highp> highp_mat4x2; - typedef mat<4, 3, f32, highp> highp_mat4x3; - typedef mat<4, 4, f32, highp> highp_mat4x4; - - typedef mat<2, 2, f32, defaultp> mat2x2; - typedef mat<3, 2, f32, defaultp> mat3x2; - typedef mat<4, 2, f32, defaultp> mat4x2; - typedef mat<2, 3, f32, defaultp> mat2x3; - typedef mat<3, 3, f32, defaultp> mat3x3; - typedef mat<4, 3, f32, defaultp> mat4x3; - typedef mat<2, 4, f32, defaultp> mat2x4; - typedef mat<3, 4, f32, defaultp> mat3x4; - typedef mat<4, 4, f32, defaultp> mat4x4; - - typedef mat<2, 2, f32, lowp> lowp_fmat2x2; - typedef mat<2, 3, f32, lowp> lowp_fmat2x3; - typedef mat<2, 4, f32, lowp> lowp_fmat2x4; - typedef mat<3, 2, f32, lowp> lowp_fmat3x2; - typedef mat<3, 3, f32, lowp> lowp_fmat3x3; - typedef mat<3, 4, f32, lowp> lowp_fmat3x4; - typedef mat<4, 2, f32, lowp> lowp_fmat4x2; - typedef mat<4, 3, f32, lowp> lowp_fmat4x3; - typedef mat<4, 4, f32, lowp> lowp_fmat4x4; - - typedef mat<2, 2, f32, mediump> mediump_fmat2x2; - typedef mat<2, 3, f32, mediump> mediump_fmat2x3; - typedef mat<2, 4, f32, mediump> mediump_fmat2x4; - typedef mat<3, 2, f32, mediump> mediump_fmat3x2; - typedef mat<3, 3, f32, mediump> mediump_fmat3x3; - typedef mat<3, 4, f32, mediump> mediump_fmat3x4; - typedef mat<4, 2, f32, mediump> mediump_fmat4x2; - typedef mat<4, 3, f32, mediump> mediump_fmat4x3; - typedef mat<4, 4, f32, mediump> mediump_fmat4x4; - - typedef mat<2, 2, f32, highp> highp_fmat2x2; - typedef mat<2, 3, f32, highp> highp_fmat2x3; - typedef mat<2, 4, f32, highp> highp_fmat2x4; - typedef mat<3, 2, f32, highp> highp_fmat3x2; - typedef mat<3, 3, f32, highp> highp_fmat3x3; - typedef mat<3, 4, f32, highp> highp_fmat3x4; - typedef mat<4, 2, f32, highp> highp_fmat4x2; - typedef mat<4, 3, f32, highp> highp_fmat4x3; - typedef mat<4, 4, f32, highp> highp_fmat4x4; - - typedef mat<2, 2, f32, defaultp> fmat2x2; - typedef mat<3, 2, f32, defaultp> fmat3x2; - typedef mat<4, 2, f32, defaultp> fmat4x2; - typedef mat<2, 3, f32, defaultp> fmat2x3; - typedef mat<3, 3, f32, defaultp> fmat3x3; - typedef mat<4, 3, f32, defaultp> fmat4x3; - typedef mat<2, 4, f32, defaultp> fmat2x4; - typedef mat<3, 4, f32, defaultp> fmat3x4; - typedef mat<4, 4, f32, defaultp> fmat4x4; - - typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; - typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; - typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; - typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; - typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; - typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; - typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; - typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; - typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; - - typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; - typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; - typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; - typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; - typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; - typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; - typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; - typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; - typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; - - typedef mat<2, 2, f32, highp> highp_f32mat2x2; - typedef mat<2, 3, f32, highp> highp_f32mat2x3; - typedef mat<2, 4, f32, highp> highp_f32mat2x4; - typedef mat<3, 2, f32, highp> highp_f32mat3x2; - typedef mat<3, 3, f32, highp> highp_f32mat3x3; - typedef mat<3, 4, f32, highp> highp_f32mat3x4; - typedef mat<4, 2, f32, highp> highp_f32mat4x2; - typedef mat<4, 3, f32, highp> highp_f32mat4x3; - typedef mat<4, 4, f32, highp> highp_f32mat4x4; - - typedef mat<2, 2, f32, defaultp> f32mat2x2; - typedef mat<3, 2, f32, defaultp> f32mat3x2; - typedef mat<4, 2, f32, defaultp> f32mat4x2; - typedef mat<2, 3, f32, defaultp> f32mat2x3; - typedef mat<3, 3, f32, defaultp> f32mat3x3; - typedef mat<4, 3, f32, defaultp> f32mat4x3; - typedef mat<2, 4, f32, defaultp> f32mat2x4; - typedef mat<3, 4, f32, defaultp> f32mat3x4; - typedef mat<4, 4, f32, defaultp> f32mat4x4; - - typedef mat<2, 2, double, lowp> lowp_dmat2x2; - typedef mat<2, 3, double, lowp> lowp_dmat2x3; - typedef mat<2, 4, double, lowp> lowp_dmat2x4; - typedef mat<3, 2, double, lowp> lowp_dmat3x2; - typedef mat<3, 3, double, lowp> lowp_dmat3x3; - typedef mat<3, 4, double, lowp> lowp_dmat3x4; - typedef mat<4, 2, double, lowp> lowp_dmat4x2; - typedef mat<4, 3, double, lowp> lowp_dmat4x3; - typedef mat<4, 4, double, lowp> lowp_dmat4x4; - - typedef mat<2, 2, double, mediump> mediump_dmat2x2; - typedef mat<2, 3, double, mediump> mediump_dmat2x3; - typedef mat<2, 4, double, mediump> mediump_dmat2x4; - typedef mat<3, 2, double, mediump> mediump_dmat3x2; - typedef mat<3, 3, double, mediump> mediump_dmat3x3; - typedef mat<3, 4, double, mediump> mediump_dmat3x4; - typedef mat<4, 2, double, mediump> mediump_dmat4x2; - typedef mat<4, 3, double, mediump> mediump_dmat4x3; - typedef mat<4, 4, double, mediump> mediump_dmat4x4; - - typedef mat<2, 2, double, highp> highp_dmat2x2; - typedef mat<2, 3, double, highp> highp_dmat2x3; - typedef mat<2, 4, double, highp> highp_dmat2x4; - typedef mat<3, 2, double, highp> highp_dmat3x2; - typedef mat<3, 3, double, highp> highp_dmat3x3; - typedef mat<3, 4, double, highp> highp_dmat3x4; - typedef mat<4, 2, double, highp> highp_dmat4x2; - typedef mat<4, 3, double, highp> highp_dmat4x3; - typedef mat<4, 4, double, highp> highp_dmat4x4; - - typedef mat<2, 2, double, defaultp> dmat2x2; - typedef mat<3, 2, double, defaultp> dmat3x2; - typedef mat<4, 2, double, defaultp> dmat4x2; - typedef mat<2, 3, double, defaultp> dmat2x3; - typedef mat<3, 3, double, defaultp> dmat3x3; - typedef mat<4, 3, double, defaultp> dmat4x3; - typedef mat<2, 4, double, defaultp> dmat2x4; - typedef mat<3, 4, double, defaultp> dmat3x4; - typedef mat<4, 4, double, defaultp> dmat4x4; - - typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; - typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; - typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; - typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; - typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; - typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; - typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; - typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; - typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; - - typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; - typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; - typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; - typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; - typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; - typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; - typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; - typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; - typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; - - typedef mat<2, 2, f64, highp> highp_f64mat2x2; - typedef mat<2, 3, f64, highp> highp_f64mat2x3; - typedef mat<2, 4, f64, highp> highp_f64mat2x4; - typedef mat<3, 2, f64, highp> highp_f64mat3x2; - typedef mat<3, 3, f64, highp> highp_f64mat3x3; - typedef mat<3, 4, f64, highp> highp_f64mat3x4; - typedef mat<4, 2, f64, highp> highp_f64mat4x2; - typedef mat<4, 3, f64, highp> highp_f64mat4x3; - typedef mat<4, 4, f64, highp> highp_f64mat4x4; - - typedef mat<2, 2, f64, defaultp> f64mat2x2; - typedef mat<3, 2, f64, defaultp> f64mat3x2; - typedef mat<4, 2, f64, defaultp> f64mat4x2; - typedef mat<2, 3, f64, defaultp> f64mat2x3; - typedef mat<3, 3, f64, defaultp> f64mat3x3; - typedef mat<4, 3, f64, defaultp> f64mat4x3; - typedef mat<2, 4, f64, defaultp> f64mat2x4; - typedef mat<3, 4, f64, defaultp> f64mat3x4; - typedef mat<4, 4, f64, defaultp> f64mat4x4; - - // Signed integer matrix MxN - - typedef mat<2, 2, int, lowp> lowp_imat2x2; - typedef mat<2, 3, int, lowp> lowp_imat2x3; - typedef mat<2, 4, int, lowp> lowp_imat2x4; - typedef mat<3, 2, int, lowp> lowp_imat3x2; - typedef mat<3, 3, int, lowp> lowp_imat3x3; - typedef mat<3, 4, int, lowp> lowp_imat3x4; - typedef mat<4, 2, int, lowp> lowp_imat4x2; - typedef mat<4, 3, int, lowp> lowp_imat4x3; - typedef mat<4, 4, int, lowp> lowp_imat4x4; - - typedef mat<2, 2, int, mediump> mediump_imat2x2; - typedef mat<2, 3, int, mediump> mediump_imat2x3; - typedef mat<2, 4, int, mediump> mediump_imat2x4; - typedef mat<3, 2, int, mediump> mediump_imat3x2; - typedef mat<3, 3, int, mediump> mediump_imat3x3; - typedef mat<3, 4, int, mediump> mediump_imat3x4; - typedef mat<4, 2, int, mediump> mediump_imat4x2; - typedef mat<4, 3, int, mediump> mediump_imat4x3; - typedef mat<4, 4, int, mediump> mediump_imat4x4; - - typedef mat<2, 2, int, highp> highp_imat2x2; - typedef mat<2, 3, int, highp> highp_imat2x3; - typedef mat<2, 4, int, highp> highp_imat2x4; - typedef mat<3, 2, int, highp> highp_imat3x2; - typedef mat<3, 3, int, highp> highp_imat3x3; - typedef mat<3, 4, int, highp> highp_imat3x4; - typedef mat<4, 2, int, highp> highp_imat4x2; - typedef mat<4, 3, int, highp> highp_imat4x3; - typedef mat<4, 4, int, highp> highp_imat4x4; - - typedef mat<2, 2, int, defaultp> imat2x2; - typedef mat<3, 2, int, defaultp> imat3x2; - typedef mat<4, 2, int, defaultp> imat4x2; - typedef mat<2, 3, int, defaultp> imat2x3; - typedef mat<3, 3, int, defaultp> imat3x3; - typedef mat<4, 3, int, defaultp> imat4x3; - typedef mat<2, 4, int, defaultp> imat2x4; - typedef mat<3, 4, int, defaultp> imat3x4; - typedef mat<4, 4, int, defaultp> imat4x4; - - - typedef mat<2, 2, int8, lowp> lowp_i8mat2x2; - typedef mat<2, 3, int8, lowp> lowp_i8mat2x3; - typedef mat<2, 4, int8, lowp> lowp_i8mat2x4; - typedef mat<3, 2, int8, lowp> lowp_i8mat3x2; - typedef mat<3, 3, int8, lowp> lowp_i8mat3x3; - typedef mat<3, 4, int8, lowp> lowp_i8mat3x4; - typedef mat<4, 2, int8, lowp> lowp_i8mat4x2; - typedef mat<4, 3, int8, lowp> lowp_i8mat4x3; - typedef mat<4, 4, int8, lowp> lowp_i8mat4x4; - - typedef mat<2, 2, int8, mediump> mediump_i8mat2x2; - typedef mat<2, 3, int8, mediump> mediump_i8mat2x3; - typedef mat<2, 4, int8, mediump> mediump_i8mat2x4; - typedef mat<3, 2, int8, mediump> mediump_i8mat3x2; - typedef mat<3, 3, int8, mediump> mediump_i8mat3x3; - typedef mat<3, 4, int8, mediump> mediump_i8mat3x4; - typedef mat<4, 2, int8, mediump> mediump_i8mat4x2; - typedef mat<4, 3, int8, mediump> mediump_i8mat4x3; - typedef mat<4, 4, int8, mediump> mediump_i8mat4x4; - - typedef mat<2, 2, int8, highp> highp_i8mat2x2; - typedef mat<2, 3, int8, highp> highp_i8mat2x3; - typedef mat<2, 4, int8, highp> highp_i8mat2x4; - typedef mat<3, 2, int8, highp> highp_i8mat3x2; - typedef mat<3, 3, int8, highp> highp_i8mat3x3; - typedef mat<3, 4, int8, highp> highp_i8mat3x4; - typedef mat<4, 2, int8, highp> highp_i8mat4x2; - typedef mat<4, 3, int8, highp> highp_i8mat4x3; - typedef mat<4, 4, int8, highp> highp_i8mat4x4; - - typedef mat<2, 2, int8, defaultp> i8mat2x2; - typedef mat<3, 2, int8, defaultp> i8mat3x2; - typedef mat<4, 2, int8, defaultp> i8mat4x2; - typedef mat<2, 3, int8, defaultp> i8mat2x3; - typedef mat<3, 3, int8, defaultp> i8mat3x3; - typedef mat<4, 3, int8, defaultp> i8mat4x3; - typedef mat<2, 4, int8, defaultp> i8mat2x4; - typedef mat<3, 4, int8, defaultp> i8mat3x4; - typedef mat<4, 4, int8, defaultp> i8mat4x4; - - - typedef mat<2, 2, int16, lowp> lowp_i16mat2x2; - typedef mat<2, 3, int16, lowp> lowp_i16mat2x3; - typedef mat<2, 4, int16, lowp> lowp_i16mat2x4; - typedef mat<3, 2, int16, lowp> lowp_i16mat3x2; - typedef mat<3, 3, int16, lowp> lowp_i16mat3x3; - typedef mat<3, 4, int16, lowp> lowp_i16mat3x4; - typedef mat<4, 2, int16, lowp> lowp_i16mat4x2; - typedef mat<4, 3, int16, lowp> lowp_i16mat4x3; - typedef mat<4, 4, int16, lowp> lowp_i16mat4x4; - - typedef mat<2, 2, int16, mediump> mediump_i16mat2x2; - typedef mat<2, 3, int16, mediump> mediump_i16mat2x3; - typedef mat<2, 4, int16, mediump> mediump_i16mat2x4; - typedef mat<3, 2, int16, mediump> mediump_i16mat3x2; - typedef mat<3, 3, int16, mediump> mediump_i16mat3x3; - typedef mat<3, 4, int16, mediump> mediump_i16mat3x4; - typedef mat<4, 2, int16, mediump> mediump_i16mat4x2; - typedef mat<4, 3, int16, mediump> mediump_i16mat4x3; - typedef mat<4, 4, int16, mediump> mediump_i16mat4x4; - - typedef mat<2, 2, int16, highp> highp_i16mat2x2; - typedef mat<2, 3, int16, highp> highp_i16mat2x3; - typedef mat<2, 4, int16, highp> highp_i16mat2x4; - typedef mat<3, 2, int16, highp> highp_i16mat3x2; - typedef mat<3, 3, int16, highp> highp_i16mat3x3; - typedef mat<3, 4, int16, highp> highp_i16mat3x4; - typedef mat<4, 2, int16, highp> highp_i16mat4x2; - typedef mat<4, 3, int16, highp> highp_i16mat4x3; - typedef mat<4, 4, int16, highp> highp_i16mat4x4; - - typedef mat<2, 2, int16, defaultp> i16mat2x2; - typedef mat<3, 2, int16, defaultp> i16mat3x2; - typedef mat<4, 2, int16, defaultp> i16mat4x2; - typedef mat<2, 3, int16, defaultp> i16mat2x3; - typedef mat<3, 3, int16, defaultp> i16mat3x3; - typedef mat<4, 3, int16, defaultp> i16mat4x3; - typedef mat<2, 4, int16, defaultp> i16mat2x4; - typedef mat<3, 4, int16, defaultp> i16mat3x4; - typedef mat<4, 4, int16, defaultp> i16mat4x4; - - - typedef mat<2, 2, int32, lowp> lowp_i32mat2x2; - typedef mat<2, 3, int32, lowp> lowp_i32mat2x3; - typedef mat<2, 4, int32, lowp> lowp_i32mat2x4; - typedef mat<3, 2, int32, lowp> lowp_i32mat3x2; - typedef mat<3, 3, int32, lowp> lowp_i32mat3x3; - typedef mat<3, 4, int32, lowp> lowp_i32mat3x4; - typedef mat<4, 2, int32, lowp> lowp_i32mat4x2; - typedef mat<4, 3, int32, lowp> lowp_i32mat4x3; - typedef mat<4, 4, int32, lowp> lowp_i32mat4x4; - - typedef mat<2, 2, int32, mediump> mediump_i32mat2x2; - typedef mat<2, 3, int32, mediump> mediump_i32mat2x3; - typedef mat<2, 4, int32, mediump> mediump_i32mat2x4; - typedef mat<3, 2, int32, mediump> mediump_i32mat3x2; - typedef mat<3, 3, int32, mediump> mediump_i32mat3x3; - typedef mat<3, 4, int32, mediump> mediump_i32mat3x4; - typedef mat<4, 2, int32, mediump> mediump_i32mat4x2; - typedef mat<4, 3, int32, mediump> mediump_i32mat4x3; - typedef mat<4, 4, int32, mediump> mediump_i32mat4x4; - - typedef mat<2, 2, int32, highp> highp_i32mat2x2; - typedef mat<2, 3, int32, highp> highp_i32mat2x3; - typedef mat<2, 4, int32, highp> highp_i32mat2x4; - typedef mat<3, 2, int32, highp> highp_i32mat3x2; - typedef mat<3, 3, int32, highp> highp_i32mat3x3; - typedef mat<3, 4, int32, highp> highp_i32mat3x4; - typedef mat<4, 2, int32, highp> highp_i32mat4x2; - typedef mat<4, 3, int32, highp> highp_i32mat4x3; - typedef mat<4, 4, int32, highp> highp_i32mat4x4; - - typedef mat<2, 2, int32, defaultp> i32mat2x2; - typedef mat<3, 2, int32, defaultp> i32mat3x2; - typedef mat<4, 2, int32, defaultp> i32mat4x2; - typedef mat<2, 3, int32, defaultp> i32mat2x3; - typedef mat<3, 3, int32, defaultp> i32mat3x3; - typedef mat<4, 3, int32, defaultp> i32mat4x3; - typedef mat<2, 4, int32, defaultp> i32mat2x4; - typedef mat<3, 4, int32, defaultp> i32mat3x4; - typedef mat<4, 4, int32, defaultp> i32mat4x4; - - - typedef mat<2, 2, int64, lowp> lowp_i64mat2x2; - typedef mat<2, 3, int64, lowp> lowp_i64mat2x3; - typedef mat<2, 4, int64, lowp> lowp_i64mat2x4; - typedef mat<3, 2, int64, lowp> lowp_i64mat3x2; - typedef mat<3, 3, int64, lowp> lowp_i64mat3x3; - typedef mat<3, 4, int64, lowp> lowp_i64mat3x4; - typedef mat<4, 2, int64, lowp> lowp_i64mat4x2; - typedef mat<4, 3, int64, lowp> lowp_i64mat4x3; - typedef mat<4, 4, int64, lowp> lowp_i64mat4x4; - - typedef mat<2, 2, int64, mediump> mediump_i64mat2x2; - typedef mat<2, 3, int64, mediump> mediump_i64mat2x3; - typedef mat<2, 4, int64, mediump> mediump_i64mat2x4; - typedef mat<3, 2, int64, mediump> mediump_i64mat3x2; - typedef mat<3, 3, int64, mediump> mediump_i64mat3x3; - typedef mat<3, 4, int64, mediump> mediump_i64mat3x4; - typedef mat<4, 2, int64, mediump> mediump_i64mat4x2; - typedef mat<4, 3, int64, mediump> mediump_i64mat4x3; - typedef mat<4, 4, int64, mediump> mediump_i64mat4x4; - - typedef mat<2, 2, int64, highp> highp_i64mat2x2; - typedef mat<2, 3, int64, highp> highp_i64mat2x3; - typedef mat<2, 4, int64, highp> highp_i64mat2x4; - typedef mat<3, 2, int64, highp> highp_i64mat3x2; - typedef mat<3, 3, int64, highp> highp_i64mat3x3; - typedef mat<3, 4, int64, highp> highp_i64mat3x4; - typedef mat<4, 2, int64, highp> highp_i64mat4x2; - typedef mat<4, 3, int64, highp> highp_i64mat4x3; - typedef mat<4, 4, int64, highp> highp_i64mat4x4; - - typedef mat<2, 2, int64, defaultp> i64mat2x2; - typedef mat<3, 2, int64, defaultp> i64mat3x2; - typedef mat<4, 2, int64, defaultp> i64mat4x2; - typedef mat<2, 3, int64, defaultp> i64mat2x3; - typedef mat<3, 3, int64, defaultp> i64mat3x3; - typedef mat<4, 3, int64, defaultp> i64mat4x3; - typedef mat<2, 4, int64, defaultp> i64mat2x4; - typedef mat<3, 4, int64, defaultp> i64mat3x4; - typedef mat<4, 4, int64, defaultp> i64mat4x4; - - - // Unsigned integer matrix MxN - - typedef mat<2, 2, uint, lowp> lowp_umat2x2; - typedef mat<2, 3, uint, lowp> lowp_umat2x3; - typedef mat<2, 4, uint, lowp> lowp_umat2x4; - typedef mat<3, 2, uint, lowp> lowp_umat3x2; - typedef mat<3, 3, uint, lowp> lowp_umat3x3; - typedef mat<3, 4, uint, lowp> lowp_umat3x4; - typedef mat<4, 2, uint, lowp> lowp_umat4x2; - typedef mat<4, 3, uint, lowp> lowp_umat4x3; - typedef mat<4, 4, uint, lowp> lowp_umat4x4; - - typedef mat<2, 2, uint, mediump> mediump_umat2x2; - typedef mat<2, 3, uint, mediump> mediump_umat2x3; - typedef mat<2, 4, uint, mediump> mediump_umat2x4; - typedef mat<3, 2, uint, mediump> mediump_umat3x2; - typedef mat<3, 3, uint, mediump> mediump_umat3x3; - typedef mat<3, 4, uint, mediump> mediump_umat3x4; - typedef mat<4, 2, uint, mediump> mediump_umat4x2; - typedef mat<4, 3, uint, mediump> mediump_umat4x3; - typedef mat<4, 4, uint, mediump> mediump_umat4x4; - - typedef mat<2, 2, uint, highp> highp_umat2x2; - typedef mat<2, 3, uint, highp> highp_umat2x3; - typedef mat<2, 4, uint, highp> highp_umat2x4; - typedef mat<3, 2, uint, highp> highp_umat3x2; - typedef mat<3, 3, uint, highp> highp_umat3x3; - typedef mat<3, 4, uint, highp> highp_umat3x4; - typedef mat<4, 2, uint, highp> highp_umat4x2; - typedef mat<4, 3, uint, highp> highp_umat4x3; - typedef mat<4, 4, uint, highp> highp_umat4x4; - - typedef mat<2, 2, uint, defaultp> umat2x2; - typedef mat<3, 2, uint, defaultp> umat3x2; - typedef mat<4, 2, uint, defaultp> umat4x2; - typedef mat<2, 3, uint, defaultp> umat2x3; - typedef mat<3, 3, uint, defaultp> umat3x3; - typedef mat<4, 3, uint, defaultp> umat4x3; - typedef mat<2, 4, uint, defaultp> umat2x4; - typedef mat<3, 4, uint, defaultp> umat3x4; - typedef mat<4, 4, uint, defaultp> umat4x4; - - - typedef mat<2, 2, uint8, lowp> lowp_u8mat2x2; - typedef mat<2, 3, uint8, lowp> lowp_u8mat2x3; - typedef mat<2, 4, uint8, lowp> lowp_u8mat2x4; - typedef mat<3, 2, uint8, lowp> lowp_u8mat3x2; - typedef mat<3, 3, uint8, lowp> lowp_u8mat3x3; - typedef mat<3, 4, uint8, lowp> lowp_u8mat3x4; - typedef mat<4, 2, uint8, lowp> lowp_u8mat4x2; - typedef mat<4, 3, uint8, lowp> lowp_u8mat4x3; - typedef mat<4, 4, uint8, lowp> lowp_u8mat4x4; - - typedef mat<2, 2, uint8, mediump> mediump_u8mat2x2; - typedef mat<2, 3, uint8, mediump> mediump_u8mat2x3; - typedef mat<2, 4, uint8, mediump> mediump_u8mat2x4; - typedef mat<3, 2, uint8, mediump> mediump_u8mat3x2; - typedef mat<3, 3, uint8, mediump> mediump_u8mat3x3; - typedef mat<3, 4, uint8, mediump> mediump_u8mat3x4; - typedef mat<4, 2, uint8, mediump> mediump_u8mat4x2; - typedef mat<4, 3, uint8, mediump> mediump_u8mat4x3; - typedef mat<4, 4, uint8, mediump> mediump_u8mat4x4; - - typedef mat<2, 2, uint8, highp> highp_u8mat2x2; - typedef mat<2, 3, uint8, highp> highp_u8mat2x3; - typedef mat<2, 4, uint8, highp> highp_u8mat2x4; - typedef mat<3, 2, uint8, highp> highp_u8mat3x2; - typedef mat<3, 3, uint8, highp> highp_u8mat3x3; - typedef mat<3, 4, uint8, highp> highp_u8mat3x4; - typedef mat<4, 2, uint8, highp> highp_u8mat4x2; - typedef mat<4, 3, uint8, highp> highp_u8mat4x3; - typedef mat<4, 4, uint8, highp> highp_u8mat4x4; - - typedef mat<2, 2, uint8, defaultp> u8mat2x2; - typedef mat<3, 2, uint8, defaultp> u8mat3x2; - typedef mat<4, 2, uint8, defaultp> u8mat4x2; - typedef mat<2, 3, uint8, defaultp> u8mat2x3; - typedef mat<3, 3, uint8, defaultp> u8mat3x3; - typedef mat<4, 3, uint8, defaultp> u8mat4x3; - typedef mat<2, 4, uint8, defaultp> u8mat2x4; - typedef mat<3, 4, uint8, defaultp> u8mat3x4; - typedef mat<4, 4, uint8, defaultp> u8mat4x4; - - - typedef mat<2, 2, uint16, lowp> lowp_u16mat2x2; - typedef mat<2, 3, uint16, lowp> lowp_u16mat2x3; - typedef mat<2, 4, uint16, lowp> lowp_u16mat2x4; - typedef mat<3, 2, uint16, lowp> lowp_u16mat3x2; - typedef mat<3, 3, uint16, lowp> lowp_u16mat3x3; - typedef mat<3, 4, uint16, lowp> lowp_u16mat3x4; - typedef mat<4, 2, uint16, lowp> lowp_u16mat4x2; - typedef mat<4, 3, uint16, lowp> lowp_u16mat4x3; - typedef mat<4, 4, uint16, lowp> lowp_u16mat4x4; - - typedef mat<2, 2, uint16, mediump> mediump_u16mat2x2; - typedef mat<2, 3, uint16, mediump> mediump_u16mat2x3; - typedef mat<2, 4, uint16, mediump> mediump_u16mat2x4; - typedef mat<3, 2, uint16, mediump> mediump_u16mat3x2; - typedef mat<3, 3, uint16, mediump> mediump_u16mat3x3; - typedef mat<3, 4, uint16, mediump> mediump_u16mat3x4; - typedef mat<4, 2, uint16, mediump> mediump_u16mat4x2; - typedef mat<4, 3, uint16, mediump> mediump_u16mat4x3; - typedef mat<4, 4, uint16, mediump> mediump_u16mat4x4; - - typedef mat<2, 2, uint16, highp> highp_u16mat2x2; - typedef mat<2, 3, uint16, highp> highp_u16mat2x3; - typedef mat<2, 4, uint16, highp> highp_u16mat2x4; - typedef mat<3, 2, uint16, highp> highp_u16mat3x2; - typedef mat<3, 3, uint16, highp> highp_u16mat3x3; - typedef mat<3, 4, uint16, highp> highp_u16mat3x4; - typedef mat<4, 2, uint16, highp> highp_u16mat4x2; - typedef mat<4, 3, uint16, highp> highp_u16mat4x3; - typedef mat<4, 4, uint16, highp> highp_u16mat4x4; - - typedef mat<2, 2, uint16, defaultp> u16mat2x2; - typedef mat<3, 2, uint16, defaultp> u16mat3x2; - typedef mat<4, 2, uint16, defaultp> u16mat4x2; - typedef mat<2, 3, uint16, defaultp> u16mat2x3; - typedef mat<3, 3, uint16, defaultp> u16mat3x3; - typedef mat<4, 3, uint16, defaultp> u16mat4x3; - typedef mat<2, 4, uint16, defaultp> u16mat2x4; - typedef mat<3, 4, uint16, defaultp> u16mat3x4; - typedef mat<4, 4, uint16, defaultp> u16mat4x4; - - - typedef mat<2, 2, uint32, lowp> lowp_u32mat2x2; - typedef mat<2, 3, uint32, lowp> lowp_u32mat2x3; - typedef mat<2, 4, uint32, lowp> lowp_u32mat2x4; - typedef mat<3, 2, uint32, lowp> lowp_u32mat3x2; - typedef mat<3, 3, uint32, lowp> lowp_u32mat3x3; - typedef mat<3, 4, uint32, lowp> lowp_u32mat3x4; - typedef mat<4, 2, uint32, lowp> lowp_u32mat4x2; - typedef mat<4, 3, uint32, lowp> lowp_u32mat4x3; - typedef mat<4, 4, uint32, lowp> lowp_u32mat4x4; - - typedef mat<2, 2, uint32, mediump> mediump_u32mat2x2; - typedef mat<2, 3, uint32, mediump> mediump_u32mat2x3; - typedef mat<2, 4, uint32, mediump> mediump_u32mat2x4; - typedef mat<3, 2, uint32, mediump> mediump_u32mat3x2; - typedef mat<3, 3, uint32, mediump> mediump_u32mat3x3; - typedef mat<3, 4, uint32, mediump> mediump_u32mat3x4; - typedef mat<4, 2, uint32, mediump> mediump_u32mat4x2; - typedef mat<4, 3, uint32, mediump> mediump_u32mat4x3; - typedef mat<4, 4, uint32, mediump> mediump_u32mat4x4; - - typedef mat<2, 2, uint32, highp> highp_u32mat2x2; - typedef mat<2, 3, uint32, highp> highp_u32mat2x3; - typedef mat<2, 4, uint32, highp> highp_u32mat2x4; - typedef mat<3, 2, uint32, highp> highp_u32mat3x2; - typedef mat<3, 3, uint32, highp> highp_u32mat3x3; - typedef mat<3, 4, uint32, highp> highp_u32mat3x4; - typedef mat<4, 2, uint32, highp> highp_u32mat4x2; - typedef mat<4, 3, uint32, highp> highp_u32mat4x3; - typedef mat<4, 4, uint32, highp> highp_u32mat4x4; - - typedef mat<2, 2, uint32, defaultp> u32mat2x2; - typedef mat<3, 2, uint32, defaultp> u32mat3x2; - typedef mat<4, 2, uint32, defaultp> u32mat4x2; - typedef mat<2, 3, uint32, defaultp> u32mat2x3; - typedef mat<3, 3, uint32, defaultp> u32mat3x3; - typedef mat<4, 3, uint32, defaultp> u32mat4x3; - typedef mat<2, 4, uint32, defaultp> u32mat2x4; - typedef mat<3, 4, uint32, defaultp> u32mat3x4; - typedef mat<4, 4, uint32, defaultp> u32mat4x4; - - - typedef mat<2, 2, uint64, lowp> lowp_u64mat2x2; - typedef mat<2, 3, uint64, lowp> lowp_u64mat2x3; - typedef mat<2, 4, uint64, lowp> lowp_u64mat2x4; - typedef mat<3, 2, uint64, lowp> lowp_u64mat3x2; - typedef mat<3, 3, uint64, lowp> lowp_u64mat3x3; - typedef mat<3, 4, uint64, lowp> lowp_u64mat3x4; - typedef mat<4, 2, uint64, lowp> lowp_u64mat4x2; - typedef mat<4, 3, uint64, lowp> lowp_u64mat4x3; - typedef mat<4, 4, uint64, lowp> lowp_u64mat4x4; - - typedef mat<2, 2, uint64, mediump> mediump_u64mat2x2; - typedef mat<2, 3, uint64, mediump> mediump_u64mat2x3; - typedef mat<2, 4, uint64, mediump> mediump_u64mat2x4; - typedef mat<3, 2, uint64, mediump> mediump_u64mat3x2; - typedef mat<3, 3, uint64, mediump> mediump_u64mat3x3; - typedef mat<3, 4, uint64, mediump> mediump_u64mat3x4; - typedef mat<4, 2, uint64, mediump> mediump_u64mat4x2; - typedef mat<4, 3, uint64, mediump> mediump_u64mat4x3; - typedef mat<4, 4, uint64, mediump> mediump_u64mat4x4; - - typedef mat<2, 2, uint64, highp> highp_u64mat2x2; - typedef mat<2, 3, uint64, highp> highp_u64mat2x3; - typedef mat<2, 4, uint64, highp> highp_u64mat2x4; - typedef mat<3, 2, uint64, highp> highp_u64mat3x2; - typedef mat<3, 3, uint64, highp> highp_u64mat3x3; - typedef mat<3, 4, uint64, highp> highp_u64mat3x4; - typedef mat<4, 2, uint64, highp> highp_u64mat4x2; - typedef mat<4, 3, uint64, highp> highp_u64mat4x3; - typedef mat<4, 4, uint64, highp> highp_u64mat4x4; - - typedef mat<2, 2, uint64, defaultp> u64mat2x2; - typedef mat<3, 2, uint64, defaultp> u64mat3x2; - typedef mat<4, 2, uint64, defaultp> u64mat4x2; - typedef mat<2, 3, uint64, defaultp> u64mat2x3; - typedef mat<3, 3, uint64, defaultp> u64mat3x3; - typedef mat<4, 3, uint64, defaultp> u64mat4x3; - typedef mat<2, 4, uint64, defaultp> u64mat2x4; - typedef mat<3, 4, uint64, defaultp> u64mat3x4; - typedef mat<4, 4, uint64, defaultp> u64mat4x4; - - // Quaternion - - typedef qua lowp_quat; - typedef qua mediump_quat; - typedef qua highp_quat; - typedef qua quat; - - typedef qua lowp_fquat; - typedef qua mediump_fquat; - typedef qua highp_fquat; - typedef qua fquat; - - typedef qua lowp_f32quat; - typedef qua mediump_f32quat; - typedef qua highp_f32quat; - typedef qua f32quat; - - typedef qua lowp_dquat; - typedef qua mediump_dquat; - typedef qua highp_dquat; - typedef qua dquat; - - typedef qua lowp_f64quat; - typedef qua mediump_f64quat; - typedef qua highp_f64quat; - typedef qua f64quat; -}//namespace glm - - diff --git a/external/glm/glm/geometric.hpp b/external/glm/glm/geometric.hpp deleted file mode 100644 index c068a3cb..00000000 --- a/external/glm/glm/geometric.hpp +++ /dev/null @@ -1,116 +0,0 @@ -/// @ref core -/// @file glm/geometric.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions -/// -/// @defgroup core_func_geometric Geometric functions -/// @ingroup core -/// -/// These operate on vectors as vectors, not component-wise. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_func_geometric - /// @{ - - /// Returns the length of x, i.e., sqrt(x * x). - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL length man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T length(vec const& x); - - /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL distance man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T distance(vec const& p0, vec const& p1); - - /// Returns the dot product of x and y, i.e., result = x * y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL dot man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T dot(vec const& x, vec const& y); - - /// Returns the cross product of x and y. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL cross man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - /// Returns a vector in the same direction as x but with length of 1. - /// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL normalize man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec normalize(vec const& x); - - /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL faceforward man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec faceforward( - vec const& N, - vec const& I, - vec const& Nref); - - /// For the incident vector I and surface orientation N, - /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL reflect man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec reflect( - vec const& I, - vec const& N); - - /// For the incident vector I and surface normal N, - /// and the ratio of indices of refraction eta, - /// return the refraction vector. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL refract man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec refract( - vec const& I, - vec const& N, - T eta); - - /// @} -}//namespace glm - -#include "detail/func_geometric.inl" diff --git a/external/glm/glm/glm.hpp b/external/glm/glm/glm.hpp deleted file mode 100644 index 8b610649..00000000 --- a/external/glm/glm/glm.hpp +++ /dev/null @@ -1,136 +0,0 @@ -/// @ref core -/// @file glm/glm.hpp -/// -/// @defgroup core Core features -/// -/// @brief Features that implement in C++ the GLSL specification as closely as possible. -/// -/// The GLM core consists of C++ types that mirror GLSL types and -/// C++ functions that mirror the GLSL functions. -/// -/// The best documentation for GLM Core is the current GLSL specification, -/// version 4.2 -/// (pdf file). -/// -/// GLM core functionalities require to be included to be used. -/// -/// -/// @defgroup core_vector Vector types -/// -/// Vector types of two to four components with an exhaustive set of operators. -/// -/// @ingroup core -/// -/// -/// @defgroup core_vector_precision Vector types with precision qualifiers -/// -/// @brief Vector types with precision qualifiers which may result in various precision in term of ULPs -/// -/// GLSL allows defining qualifiers for particular variables. -/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, -/// with OpenGL ES's GLSL, these qualifiers do have an effect. -/// -/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: -/// a number of typedefs that use a particular qualifier. -/// -/// None of these types make any guarantees about the actual qualifier used. -/// -/// @ingroup core -/// -/// -/// @defgroup core_matrix Matrix types -/// -/// Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. -/// These types have exhaustive sets of operators. -/// -/// @ingroup core -/// -/// -/// @defgroup core_matrix_precision Matrix types with precision qualifiers -/// -/// @brief Matrix types with precision qualifiers which may result in various precision in term of ULPs -/// -/// GLSL allows defining qualifiers for particular variables. -/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, -/// with OpenGL ES's GLSL, these qualifiers do have an effect. -/// -/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: -/// a number of typedefs that use a particular qualifier. -/// -/// None of these types make any guarantees about the actual qualifier used. -/// -/// @ingroup core -/// -/// -/// @defgroup ext Stable extensions -/// -/// @brief Additional features not specified by GLSL specification. -/// -/// EXT extensions are fully tested and documented. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions at once by -/// including . Otherwise, each extension needs to be included a specific file. -/// -/// -/// @defgroup gtc Recommended extensions -/// -/// @brief Additional features not specified by GLSL specification. -/// -/// GTC extensions aim to be stable with tests and documentation. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions at once by -/// including . Otherwise, each extension needs to be included a specific file. -/// -/// -/// @defgroup gtx Experimental extensions -/// -/// @brief Experimental features not specified by GLSL specification. -/// -/// Experimental extensions are useful functions and types, but the development of -/// their API and functionality is not necessarily stable. They can change -/// substantially between versions. Backwards compatibility is not much of an issue -/// for them. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions -/// at once by including . Otherwise, each extension needs to be -/// included a specific file. -/// -/// @mainpage OpenGL Mathematics (GLM) -/// - Website: glm.g-truc.net -/// - GLM API documentation -/// - GLM Manual - -#include "detail/_fixes.hpp" - -#include "detail/setup.hpp" - -#pragma once - -#include -#include -#include -#include -#include -#include "fwd.hpp" - -#include "vec2.hpp" -#include "vec3.hpp" -#include "vec4.hpp" -#include "mat2x2.hpp" -#include "mat2x3.hpp" -#include "mat2x4.hpp" -#include "mat3x2.hpp" -#include "mat3x3.hpp" -#include "mat3x4.hpp" -#include "mat4x2.hpp" -#include "mat4x3.hpp" -#include "mat4x4.hpp" - -#include "trigonometric.hpp" -#include "exponential.hpp" -#include "common.hpp" -#include "packing.hpp" -#include "geometric.hpp" -#include "matrix.hpp" -#include "vector_relational.hpp" -#include "integer.hpp" diff --git a/external/glm/glm/gtc/bitfield.hpp b/external/glm/glm/gtc/bitfield.hpp deleted file mode 100644 index 084fbe75..00000000 --- a/external/glm/glm/gtc/bitfield.hpp +++ /dev/null @@ -1,266 +0,0 @@ -/// @ref gtc_bitfield -/// @file glm/gtc/bitfield.hpp -/// -/// @see core (dependence) -/// @see gtc_bitfield (dependence) -/// -/// @defgroup gtc_bitfield GLM_GTC_bitfield -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#include "../detail/setup.hpp" - -#pragma once - -// Dependencies -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "type_precision.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_bitfield extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_bitfield - /// @{ - - /// Build a mask of 'count' bits - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType mask(genIUType Bits); - - /// Build a mask of 'count' bits - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec mask(vec const& v); - - /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift); - - /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldRotateRight(vec const& In, int Shift); - - /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift); - - /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldRotateLeft(vec const& In, int Shift); - - /// Set to 1 a range of bits. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount); - - /// Set to 1 a range of bits. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount); - - /// Set to 0 a range of bits. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount); - - /// Set to 0 a range of bits. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint16 bitfieldInterleave(u8vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u8vec2 bitfieldDeinterleave(glm::uint16 x); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(u16vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u16vec2 bitfieldDeinterleave(glm::uint32 x); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(u32vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w); - - /// @} -} //namespace glm - -#include "bitfield.inl" diff --git a/external/glm/glm/gtc/bitfield.inl b/external/glm/glm/gtc/bitfield.inl deleted file mode 100644 index 06cf1889..00000000 --- a/external/glm/glm/gtc/bitfield.inl +++ /dev/null @@ -1,626 +0,0 @@ -/// @ref gtc_bitfield - -#include "../simd/integer.h" - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y); - - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z); - - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w); - - template<> - GLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave(glm::uint8 x, glm::uint8 y) - { - glm::uint16 REG1(x); - glm::uint16 REG2(y); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555); - - return REG1 | static_cast(REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint16 x, glm::uint16 y) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x33333333); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x33333333); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x55555555); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x55555555); - - return REG1 | (REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x0000FFFF0000FFFFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x0000FFFF0000FFFFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF00FF00FFull); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF00FF00FFull); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333333333333333ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333333333333333ull); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555555555555555ull); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555555555555555ull); - - return REG1 | (REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - glm::uint32 REG3(z); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0xFF0000FFu); - REG2 = ((REG2 << 16) | REG2) & static_cast(0xFF0000FFu); - REG3 = ((REG3 << 16) | REG3) & static_cast(0xFF0000FFu); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x0F00F00Fu); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x0F00F00Fu); - REG3 = ((REG3 << 8) | REG3) & static_cast(0x0F00F00Fu); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0xC30C30C3u); - REG2 = ((REG2 << 4) | REG2) & static_cast(0xC30C30C3u); - REG3 = ((REG3 << 4) | REG3) & static_cast(0xC30C30C3u); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x49249249u); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x49249249u); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x49249249u); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - - REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); - REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); - REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); - REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); - REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); - REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); - REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y, glm::uint32 z) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - - REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); - REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); - REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); - REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); - REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); - REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); - REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - glm::uint32 REG3(z); - glm::uint32 REG4(w); - - REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000Fu); - REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000Fu); - REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000Fu); - REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000Fu); - - REG1 = ((REG1 << 6) | REG1) & static_cast(0x03030303u); - REG2 = ((REG2 << 6) | REG2) & static_cast(0x03030303u); - REG3 = ((REG3 << 6) | REG3) & static_cast(0x03030303u); - REG4 = ((REG4 << 6) | REG4) & static_cast(0x03030303u); - - REG1 = ((REG1 << 3) | REG1) & static_cast(0x11111111u); - REG2 = ((REG2 << 3) | REG2) & static_cast(0x11111111u); - REG3 = ((REG3 << 3) | REG3) & static_cast(0x11111111u); - REG4 = ((REG4 << 3) | REG4) & static_cast(0x11111111u); - - return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z, glm::uint16 w) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - glm::uint64 REG4(w); - - REG1 = ((REG1 << 24) | REG1) & static_cast(0x000000FF000000FFull); - REG2 = ((REG2 << 24) | REG2) & static_cast(0x000000FF000000FFull); - REG3 = ((REG3 << 24) | REG3) & static_cast(0x000000FF000000FFull); - REG4 = ((REG4 << 24) | REG4) & static_cast(0x000000FF000000FFull); - - REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000F000F000Full); - REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000F000F000Full); - REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000F000F000Full); - REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000F000F000Full); - - REG1 = ((REG1 << 6) | REG1) & static_cast(0x0303030303030303ull); - REG2 = ((REG2 << 6) | REG2) & static_cast(0x0303030303030303ull); - REG3 = ((REG3 << 6) | REG3) & static_cast(0x0303030303030303ull); - REG4 = ((REG4 << 6) | REG4) & static_cast(0x0303030303030303ull); - - REG1 = ((REG1 << 3) | REG1) & static_cast(0x1111111111111111ull); - REG2 = ((REG2 << 3) | REG2) & static_cast(0x1111111111111111ull); - REG3 = ((REG3 << 3) | REG3) & static_cast(0x1111111111111111ull); - REG4 = ((REG4 << 3) | REG4) & static_cast(0x1111111111111111ull); - - return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER genIUType mask(genIUType Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); - - return Bits >= sizeof(genIUType) * 8 ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); - } - - template - GLM_FUNC_QUALIFIER vec mask(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); - - return detail::functor1::call(mask, v); - } - - template - GLM_FUNC_QUALIFIER genIType bitfieldRotateRight(genIType In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); - - int const BitSize = static_cast(sizeof(genIType) * 8); - return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldRotateRight(vec const& In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); - - int const BitSize = static_cast(sizeof(T) * 8); - return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER genIType bitfieldRotateLeft(genIType In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); - - int const BitSize = static_cast(sizeof(genIType) * 8); - return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldRotateLeft(vec const& In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); - - int const BitSize = static_cast(sizeof(T) * 8); - return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount) - { - return Value | static_cast(mask(BitCount) << FirstBit); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount) - { - return Value | static_cast(mask(BitCount) << FirstBit); - } - - template - GLM_FUNC_QUALIFIER genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount) - { - return Value & static_cast(~(mask(BitCount) << FirstBit)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount) - { - return Value & static_cast(~(mask(BitCount) << FirstBit)); - } - - GLM_FUNC_QUALIFIER int16 bitfieldInterleave(int8 x, int8 y) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y; - - union sign16 - { - int16 i; - uint16 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(uint8 x, uint8 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(u8vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER u8vec2 bitfieldDeinterleave(glm::uint16 x) - { - uint16 REG1(x); - uint16 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x5555); - REG2 = REG2 & static_cast(0x5555); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0xFFFF); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0xFFFF); - - return glm::u8vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int16 x, int16 y) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint16 x, uint16 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(u16vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER glm::u16vec2 bitfieldDeinterleave(glm::uint32 x) - { - glm::uint32 REG1(x); - glm::uint32 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x55555555); - REG2 = REG2 & static_cast(0x55555555); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x33333333); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x33333333); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF); - - return glm::u16vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y) - { - union sign32 - { - int32 i; - uint32 u; - } sign_x, sign_y; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(u32vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER glm::u32vec2 bitfieldDeinterleave(glm::uint64 x) - { - glm::uint64 REG1(x); - glm::uint64 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x5555555555555555ull); - REG2 = REG2 & static_cast(0x5555555555555555ull); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333333333333333ull); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333333333333333ull); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF00FF00FFull); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF00FF00FFull); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF0000FFFFull); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF0000FFFFull); - - REG1 = ((REG1 >> 16) | REG1) & static_cast(0x00000000FFFFFFFFull); - REG2 = ((REG2 >> 16) | REG2) & static_cast(0x00000000FFFFFFFFull); - - return glm::u32vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y, sign_z; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y, sign_z; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y, int32 z) - { - union sign16 - { - int32 i; - uint32 u; - } sign_x, sign_y, sign_z; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u32vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y, sign_z, sign_w; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - sign_w.i = w; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w) - { - return detail::bitfieldInterleave(x, y, z, w); - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec4 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y, sign_z, sign_w; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - sign_w.i = w; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w) - { - return detail::bitfieldInterleave(x, y, z, w); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec4 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); - } -}//namespace glm diff --git a/external/glm/glm/gtc/color_space.hpp b/external/glm/glm/gtc/color_space.hpp deleted file mode 100644 index cffd9f09..00000000 --- a/external/glm/glm/gtc/color_space.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/// @ref gtc_color_space -/// @file glm/gtc/color_space.hpp -/// -/// @see core (dependence) -/// @see gtc_color_space (dependence) -/// -/// @defgroup gtc_color_space GLM_GTC_color_space -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../exponential.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_color_space extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_color_space - /// @{ - - /// Convert a linear color to sRGB color using a standard gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear); - - /// Convert a linear color to sRGB color using a custom gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear, T Gamma); - - /// Convert a sRGB color to linear color using a standard gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB); - - /// Convert a sRGB color to linear color using a custom gamma correction. - // IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma); - - /// @} -} //namespace glm - -#include "color_space.inl" diff --git a/external/glm/glm/gtc/color_space.inl b/external/glm/glm/gtc/color_space.inl deleted file mode 100644 index 2a900044..00000000 --- a/external/glm/glm/gtc/color_space.inl +++ /dev/null @@ -1,84 +0,0 @@ -/// @ref gtc_color_space - -namespace glm{ -namespace detail -{ - template - struct compute_rgbToSrgb - { - GLM_FUNC_QUALIFIER static vec call(vec const& ColorRGB, T GammaCorrection) - { - vec const ClampedColor(clamp(ColorRGB, static_cast(0), static_cast(1))); - - return mix( - pow(ClampedColor, vec(GammaCorrection)) * static_cast(1.055) - static_cast(0.055), - ClampedColor * static_cast(12.92), - lessThan(ClampedColor, vec(static_cast(0.0031308)))); - } - }; - - template - struct compute_rgbToSrgb<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorRGB, T GammaCorrection) - { - return vec<4, T, Q>(compute_rgbToSrgb<3, T, Q>::call(vec<3, T, Q>(ColorRGB), GammaCorrection), ColorRGB.w); - } - }; - - template - struct compute_srgbToRgb - { - GLM_FUNC_QUALIFIER static vec call(vec const& ColorSRGB, T Gamma) - { - return mix( - pow((ColorSRGB + static_cast(0.055)) * static_cast(0.94786729857819905213270142180095), vec(Gamma)), - ColorSRGB * static_cast(0.07739938080495356037151702786378), - lessThanEqual(ColorSRGB, vec(static_cast(0.04045)))); - } - }; - - template - struct compute_srgbToRgb<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorSRGB, T Gamma) - { - return vec<4, T, Q>(compute_srgbToRgb<3, T, Q>::call(vec<3, T, Q>(ColorSRGB), Gamma), ColorSRGB.w); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear) - { - return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(0.41666)); - } - - // Based on Ian Taylor http://chilliant.blogspot.fr/2012/08/srgb-approximations-for-hlsl.html - template<> - GLM_FUNC_QUALIFIER vec<3, float, lowp> convertLinearToSRGB(vec<3, float, lowp> const& ColorLinear) - { - vec<3, float, lowp> S1 = sqrt(ColorLinear); - vec<3, float, lowp> S2 = sqrt(S1); - vec<3, float, lowp> S3 = sqrt(S2); - return 0.662002687f * S1 + 0.684122060f * S2 - 0.323583601f * S3 - 0.0225411470f * ColorLinear; - } - - template - GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear, T Gamma) - { - return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(1) / Gamma); - } - - template - GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB) - { - return detail::compute_srgbToRgb::call(ColorSRGB, static_cast(2.4)); - } - - template - GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma) - { - return detail::compute_srgbToRgb::call(ColorSRGB, Gamma); - } -}//namespace glm diff --git a/external/glm/glm/gtc/constants.hpp b/external/glm/glm/gtc/constants.hpp deleted file mode 100644 index 99f21286..00000000 --- a/external/glm/glm/gtc/constants.hpp +++ /dev/null @@ -1,165 +0,0 @@ -/// @ref gtc_constants -/// @file glm/gtc/constants.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_constants GLM_GTC_constants -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Provide a list of constants and precomputed useful values. - -#pragma once - -// Dependencies -#include "../ext/scalar_constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_constants extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_constants - /// @{ - - /// Return 0. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType zero(); - - /// Return 1. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one(); - - /// Return pi * 2. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi(); - - /// Return square root of pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi(); - - /// Return pi / 2. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi(); - - /// Return pi / 2 * 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi(); - - /// Return pi / 4. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi(); - - /// Return 1 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi(); - - /// Return 1 / (pi * 2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi(); - - /// Return 2 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi(); - - /// Return 4 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi(); - - /// Return 2 / sqrt(pi). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi(); - - /// Return 1 / sqrt(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two(); - - /// Return sqrt(pi / 2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi(); - - /// Return sqrt(2 * pi). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi(); - - /// Return sqrt(ln(4)). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four(); - - /// Return e constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType e(); - - /// Return Euler's constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType euler(); - - /// Return sqrt(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_two(); - - /// Return sqrt(3). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_three(); - - /// Return sqrt(5). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_five(); - - /// Return ln(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two(); - - /// Return ln(10). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten(); - - /// Return ln(ln(2)). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two(); - - /// Return 1 / 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType third(); - - /// Return 2 / 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds(); - - /// Return the golden ratio constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio(); - - /// @} -} //namespace glm - -#include "constants.inl" diff --git a/external/glm/glm/gtc/constants.inl b/external/glm/glm/gtc/constants.inl deleted file mode 100644 index bb98c6bf..00000000 --- a/external/glm/glm/gtc/constants.inl +++ /dev/null @@ -1,167 +0,0 @@ -/// @ref gtc_constants - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType zero() - { - return genType(0); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one() - { - return genType(1); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_pi() - { - return genType(6.28318530717958647692528676655900576); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_pi() - { - return genType(1.772453850905516027); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType half_pi() - { - return genType(1.57079632679489661923132169163975144); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType three_over_two_pi() - { - return genType(4.71238898038468985769396507491925432); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType quarter_pi() - { - return genType(0.785398163397448309615660845819875721); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_pi() - { - return genType(0.318309886183790671537767526745028724); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_two_pi() - { - return genType(0.159154943091895335768883763372514362); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_pi() - { - return genType(0.636619772367581343075535053490057448); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType four_over_pi() - { - return genType(1.273239544735162686151070106980114898); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_root_pi() - { - return genType(1.12837916709551257389615890312154517); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_root_two() - { - return genType(0.707106781186547524400844362104849039); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_half_pi() - { - return genType(1.253314137315500251); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two_pi() - { - return genType(2.506628274631000502); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_ln_four() - { - return genType(1.17741002251547469); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType e() - { - return genType(2.71828182845904523536); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType euler() - { - return genType(0.577215664901532860606); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two() - { - return genType(1.41421356237309504880168872420969808); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_three() - { - return genType(1.73205080756887729352744634150587236); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_five() - { - return genType(2.23606797749978969640917366873127623); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_two() - { - return genType(0.693147180559945309417232121458176568); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ten() - { - return genType(2.30258509299404568401799145468436421); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ln_two() - { - return genType(-0.3665129205816643); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType third() - { - return genType(0.3333333333333333333333333333333333333333); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_thirds() - { - return genType(0.666666666666666666666666666666666666667); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType golden_ratio() - { - return genType(1.61803398874989484820458683436563811); - } - -} //namespace glm diff --git a/external/glm/glm/gtc/epsilon.hpp b/external/glm/glm/gtc/epsilon.hpp deleted file mode 100644 index 640439b1..00000000 --- a/external/glm/glm/gtc/epsilon.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtc_epsilon -/// @file glm/gtc/epsilon.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_epsilon GLM_GTC_epsilon -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Comparison functions for a user defined epsilon values. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_epsilon extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_epsilon - /// @{ - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL vec epsilonEqual(vec const& x, vec const& y, T const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL bool epsilonEqual(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is not satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL bool epsilonNotEqual(genType const& x, genType const& y, genType const& epsilon); - - /// @} -}//namespace glm - -#include "epsilon.inl" diff --git a/external/glm/glm/gtc/epsilon.inl b/external/glm/glm/gtc/epsilon.inl deleted file mode 100644 index 508b9f89..00000000 --- a/external/glm/glm/gtc/epsilon.inl +++ /dev/null @@ -1,80 +0,0 @@ -/// @ref gtc_epsilon - -// Dependency: -#include "../vector_relational.hpp" -#include "../common.hpp" - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER bool epsilonEqual - ( - float const& x, - float const& y, - float const& epsilon - ) - { - return abs(x - y) < epsilon; - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonEqual - ( - double const& x, - double const& y, - double const& epsilon - ) - { - return abs(x - y) < epsilon; - } - - template - GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, T const& epsilon) - { - return lessThan(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, vec const& epsilon) - { - return lessThan(abs(x - y), vec(epsilon)); - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonNotEqual(float const& x, float const& y, float const& epsilon) - { - return abs(x - y) >= epsilon; - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonNotEqual(double const& x, double const& y, double const& epsilon) - { - return abs(x - y) >= epsilon; - } - - template - GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon) - { - return greaterThanEqual(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, vec const& epsilon) - { - return greaterThanEqual(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonEqual(qua const& x, qua const& y, T const& epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return lessThan(abs(v), vec<4, T, Q>(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonNotEqual(qua const& x, qua const& y, T const& epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); - } -}//namespace glm diff --git a/external/glm/glm/gtc/integer.hpp b/external/glm/glm/gtc/integer.hpp deleted file mode 100644 index 64ce10bb..00000000 --- a/external/glm/glm/gtc/integer.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/// @ref gtc_integer -/// @file glm/gtc/integer.hpp -/// -/// @see core (dependence) -/// @see gtc_integer (dependence) -/// -/// @defgroup gtc_integer GLM_GTC_integer -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../common.hpp" -#include "../integer.hpp" -#include "../exponential.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_integer - /// @{ - - /// Returns the log2 of x for integer values. Usefull to compute mipmap count from the texture size. - /// @see gtc_integer - template - GLM_FUNC_DECL genIUType log2(genIUType x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam T floating point scalar types. - /// - /// @see GLSL round man page - /// @see gtc_integer - template - GLM_FUNC_DECL vec iround(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam T floating point scalar types. - /// - /// @see GLSL round man page - /// @see gtc_integer - template - GLM_FUNC_DECL vec uround(vec const& x); - - /// @} -} //namespace glm - -#include "integer.inl" diff --git a/external/glm/glm/gtc/integer.inl b/external/glm/glm/gtc/integer.inl deleted file mode 100644 index f0a8b4f2..00000000 --- a/external/glm/glm/gtc/integer.inl +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtc_integer - -namespace glm{ -namespace detail -{ - template - struct compute_log2 - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - //Equivalent to return findMSB(vec); but save one function call in ASM with VC - //return findMSB(vec); - return vec(detail::compute_findMSB_vec::call(v)); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - struct compute_log2<4, int, Q, false, Aligned> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) - { - vec<4, int, Q> Result; - _BitScanReverse(reinterpret_cast(&Result.x), v.x); - _BitScanReverse(reinterpret_cast(&Result.y), v.y); - _BitScanReverse(reinterpret_cast(&Result.z), v.z); - _BitScanReverse(reinterpret_cast(&Result.w), v.w); - return Result; - } - }; -# endif//GLM_HAS_BITSCAN_WINDOWS -}//namespace detail - template - GLM_FUNC_QUALIFIER int iround(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); - assert(static_cast(0.0) <= x); - - return static_cast(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER vec iround(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); - assert(all(lessThanEqual(vec(0), x))); - - return vec(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER uint uround(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); - assert(static_cast(0.0) <= x); - - return static_cast(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER vec uround(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); - assert(all(lessThanEqual(vec(0), x))); - - return vec(x + static_cast(0.5)); - } -}//namespace glm diff --git a/external/glm/glm/gtc/matrix_access.hpp b/external/glm/glm/gtc/matrix_access.hpp deleted file mode 100644 index 4935ba75..00000000 --- a/external/glm/glm/gtc/matrix_access.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtc_matrix_access -/// @file glm/gtc/matrix_access.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_access GLM_GTC_matrix_access -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines functions to access rows or columns of a matrix easily. - -#pragma once - -// Dependency: -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_access extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_access - /// @{ - - /// Get a specific row of a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL typename genType::row_type row( - genType const& m, - length_t index); - - /// Set a specific row to a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL genType row( - genType const& m, - length_t index, - typename genType::row_type const& x); - - /// Get a specific column of a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL typename genType::col_type column( - genType const& m, - length_t index); - - /// Set a specific column to a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL genType column( - genType const& m, - length_t index, - typename genType::col_type const& x); - - /// @} -}//namespace glm - -#include "matrix_access.inl" diff --git a/external/glm/glm/gtc/matrix_access.inl b/external/glm/glm/gtc/matrix_access.inl deleted file mode 100644 index 09fcc10d..00000000 --- a/external/glm/glm/gtc/matrix_access.inl +++ /dev/null @@ -1,62 +0,0 @@ -/// @ref gtc_matrix_access - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType row - ( - genType const& m, - length_t index, - typename genType::row_type const& x - ) - { - assert(index >= 0 && index < m[0].length()); - - genType Result = m; - for(length_t i = 0; i < m.length(); ++i) - Result[i][index] = x[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER typename genType::row_type row - ( - genType const& m, - length_t index - ) - { - assert(index >= 0 && index < m[0].length()); - - typename genType::row_type Result(0); - for(length_t i = 0; i < m.length(); ++i) - Result[i] = m[i][index]; - return Result; - } - - template - GLM_FUNC_QUALIFIER genType column - ( - genType const& m, - length_t index, - typename genType::col_type const& x - ) - { - assert(index >= 0 && index < m.length()); - - genType Result = m; - Result[index] = x; - return Result; - } - - template - GLM_FUNC_QUALIFIER typename genType::col_type column - ( - genType const& m, - length_t index - ) - { - assert(index >= 0 && index < m.length()); - - return m[index]; - } -}//namespace glm diff --git a/external/glm/glm/gtc/matrix_integer.hpp b/external/glm/glm/gtc/matrix_integer.hpp deleted file mode 100644 index d7ebdc71..00000000 --- a/external/glm/glm/gtc/matrix_integer.hpp +++ /dev/null @@ -1,433 +0,0 @@ -/// @ref gtc_matrix_integer -/// @file glm/gtc/matrix_integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_integer GLM_GTC_matrix_integer -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_integer - /// @{ - - /// High-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, highp> highp_imat2; - - /// High-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, highp> highp_imat3; - - /// High-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, highp> highp_imat4; - - /// High-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, highp> highp_imat2x2; - - /// High-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, highp> highp_imat2x3; - - /// High-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, highp> highp_imat2x4; - - /// High-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, highp> highp_imat3x2; - - /// High-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, highp> highp_imat3x3; - - /// High-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, highp> highp_imat3x4; - - /// High-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, highp> highp_imat4x2; - - /// High-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, highp> highp_imat4x3; - - /// High-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, highp> highp_imat4x4; - - - /// Medium-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, mediump> mediump_imat2; - - /// Medium-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, mediump> mediump_imat3; - - /// Medium-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, mediump> mediump_imat4; - - - /// Medium-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, mediump> mediump_imat2x2; - - /// Medium-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, mediump> mediump_imat2x3; - - /// Medium-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, mediump> mediump_imat2x4; - - /// Medium-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, mediump> mediump_imat3x2; - - /// Medium-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, mediump> mediump_imat3x3; - - /// Medium-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, mediump> mediump_imat3x4; - - /// Medium-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, mediump> mediump_imat4x2; - - /// Medium-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, mediump> mediump_imat4x3; - - /// Medium-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, mediump> mediump_imat4x4; - - - /// Low-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, lowp> lowp_imat2; - - /// Low-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, lowp> lowp_imat3; - - /// Low-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, lowp> lowp_imat4; - - - /// Low-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, lowp> lowp_imat2x2; - - /// Low-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, lowp> lowp_imat2x3; - - /// Low-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, lowp> lowp_imat2x4; - - /// Low-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, lowp> lowp_imat3x2; - - /// Low-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, lowp> lowp_imat3x3; - - /// Low-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, lowp> lowp_imat3x4; - - /// Low-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, lowp> lowp_imat4x2; - - /// Low-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, lowp> lowp_imat4x3; - - /// Low-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, lowp> lowp_imat4x4; - - - /// High-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, highp> highp_umat2; - - /// High-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, highp> highp_umat3; - - /// High-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, highp> highp_umat4; - - /// High-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, highp> highp_umat2x2; - - /// High-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, highp> highp_umat2x3; - - /// High-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, highp> highp_umat2x4; - - /// High-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, highp> highp_umat3x2; - - /// High-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, highp> highp_umat3x3; - - /// High-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, highp> highp_umat3x4; - - /// High-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, highp> highp_umat4x2; - - /// High-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, highp> highp_umat4x3; - - /// High-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, highp> highp_umat4x4; - - - /// Medium-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, mediump> mediump_umat2; - - /// Medium-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, mediump> mediump_umat3; - - /// Medium-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, mediump> mediump_umat4; - - - /// Medium-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, mediump> mediump_umat2x2; - - /// Medium-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, mediump> mediump_umat2x3; - - /// Medium-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, mediump> mediump_umat2x4; - - /// Medium-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, mediump> mediump_umat3x2; - - /// Medium-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, mediump> mediump_umat3x3; - - /// Medium-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, mediump> mediump_umat3x4; - - /// Medium-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, mediump> mediump_umat4x2; - - /// Medium-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, mediump> mediump_umat4x3; - - /// Medium-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, mediump> mediump_umat4x4; - - - /// Low-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, lowp> lowp_umat2; - - /// Low-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, lowp> lowp_umat3; - - /// Low-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, lowp> lowp_umat4; - - - /// Low-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, lowp> lowp_umat2x2; - - /// Low-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, lowp> lowp_umat2x3; - - /// Low-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, lowp> lowp_umat2x4; - - /// Low-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, lowp> lowp_umat3x2; - - /// Low-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, lowp> lowp_umat3x3; - - /// Low-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, lowp> lowp_umat3x4; - - /// Low-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, lowp> lowp_umat4x2; - - /// Low-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, lowp> lowp_umat4x3; - - /// Low-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, lowp> lowp_umat4x4; - - - - /// Signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, defaultp> imat2; - - /// Signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, defaultp> imat3; - - /// Signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, defaultp> imat4; - - /// Signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, defaultp> imat2x2; - - /// Signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, defaultp> imat2x3; - - /// Signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, defaultp> imat2x4; - - /// Signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, defaultp> imat3x2; - - /// Signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, defaultp> imat3x3; - - /// Signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, defaultp> imat3x4; - - /// Signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, defaultp> imat4x2; - - /// Signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, defaultp> imat4x3; - - /// Signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, defaultp> imat4x4; - - - - /// Unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, defaultp> umat2; - - /// Unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, defaultp> umat3; - - /// Unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, defaultp> umat4; - - /// Unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, defaultp> umat2x2; - - /// Unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, defaultp> umat2x3; - - /// Unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, defaultp> umat2x4; - - /// Unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, defaultp> umat3x2; - - /// Unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, defaultp> umat3x3; - - /// Unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, defaultp> umat3x4; - - /// Unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, defaultp> umat4x2; - - /// Unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, defaultp> umat4x3; - - /// Unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, defaultp> umat4x4; - - /// @} -}//namespace glm diff --git a/external/glm/glm/gtc/matrix_inverse.hpp b/external/glm/glm/gtc/matrix_inverse.hpp deleted file mode 100644 index a1900adc..00000000 --- a/external/glm/glm/gtc/matrix_inverse.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/// @ref gtc_matrix_inverse -/// @file glm/gtc/matrix_inverse.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines additional matrix inverting functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../matrix.hpp" -#include "../mat2x2.hpp" -#include "../mat3x3.hpp" -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_inverse extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_inverse - /// @{ - - /// Fast matrix inverse for affine matrix. - /// - /// @param m Input matrix to invert. - /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. - /// @see gtc_matrix_inverse - template - GLM_FUNC_DECL genType affineInverse(genType const& m); - - /// Compute the inverse transpose of a matrix. - /// - /// @param m Input matrix to invert transpose. - /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. - /// @see gtc_matrix_inverse - template - GLM_FUNC_DECL genType inverseTranspose(genType const& m); - - /// @} -}//namespace glm - -#include "matrix_inverse.inl" diff --git a/external/glm/glm/gtc/matrix_inverse.inl b/external/glm/glm/gtc/matrix_inverse.inl deleted file mode 100644 index c004b9e1..00000000 --- a/external/glm/glm/gtc/matrix_inverse.inl +++ /dev/null @@ -1,118 +0,0 @@ -/// @ref gtc_matrix_inverse - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> affineInverse(mat<3, 3, T, Q> const& m) - { - mat<2, 2, T, Q> const Inv(inverse(mat<2, 2, T, Q>(m))); - - return mat<3, 3, T, Q>( - vec<3, T, Q>(Inv[0], static_cast(0)), - vec<3, T, Q>(Inv[1], static_cast(0)), - vec<3, T, Q>(-Inv * vec<2, T, Q>(m[2]), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> affineInverse(mat<4, 4, T, Q> const& m) - { - mat<3, 3, T, Q> const Inv(inverse(mat<3, 3, T, Q>(m))); - - return mat<4, 4, T, Q>( - vec<4, T, Q>(Inv[0], static_cast(0)), - vec<4, T, Q>(Inv[1], static_cast(0)), - vec<4, T, Q>(Inv[2], static_cast(0)), - vec<4, T, Q>(-Inv * vec<3, T, Q>(m[3]), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> inverseTranspose(mat<2, 2, T, Q> const& m) - { - T Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; - - mat<2, 2, T, Q> Inverse( - + m[1][1] / Determinant, - - m[0][1] / Determinant, - - m[1][0] / Determinant, - + m[0][0] / Determinant); - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> inverseTranspose(mat<3, 3, T, Q> const& m) - { - T Determinant = - + m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) - - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) - + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); - - mat<3, 3, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); - Inverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); - Inverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); - Inverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); - Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); - Inverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); - Inverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - Inverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); - Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); - Inverse /= Determinant; - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> inverseTranspose(mat<4, 4, T, Q> const& m) - { - T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - T SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - T SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - T SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - T SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - T SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - T SubFactor11 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - T SubFactor12 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - T SubFactor13 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - T SubFactor14 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - T SubFactor15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - T SubFactor16 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - T SubFactor17 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - mat<4, 4, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02); - Inverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04); - Inverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05); - Inverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05); - - Inverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02); - Inverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04); - Inverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05); - Inverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05); - - Inverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08); - Inverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10); - Inverse[2][2] = + (m[0][0] * SubFactor07 - m[0][1] * SubFactor09 + m[0][3] * SubFactor11); - Inverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor11); - - Inverse[3][0] = - (m[0][1] * SubFactor12 - m[0][2] * SubFactor13 + m[0][3] * SubFactor14); - Inverse[3][1] = + (m[0][0] * SubFactor12 - m[0][2] * SubFactor15 + m[0][3] * SubFactor16); - Inverse[3][2] = - (m[0][0] * SubFactor13 - m[0][1] * SubFactor15 + m[0][3] * SubFactor17); - Inverse[3][3] = + (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][2] * SubFactor17); - - T Determinant = - + m[0][0] * Inverse[0][0] - + m[0][1] * Inverse[0][1] - + m[0][2] * Inverse[0][2] - + m[0][3] * Inverse[0][3]; - - Inverse /= Determinant; - - return Inverse; - } -}//namespace glm diff --git a/external/glm/glm/gtc/matrix_transform.hpp b/external/glm/glm/gtc/matrix_transform.hpp deleted file mode 100644 index 612418fa..00000000 --- a/external/glm/glm/gtc/matrix_transform.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtc_matrix_transform -/// @file glm/gtc/matrix_transform.hpp -/// -/// @see core (dependence) -/// @see gtx_transform -/// @see gtx_transform2 -/// -/// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines functions that generate common transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. - -#pragma once - -// Dependencies -#include "../mat4x4.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../ext/matrix_projection.hpp" -#include "../ext/matrix_clip_space.hpp" -#include "../ext/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_transform extension included") -#endif - -#include "matrix_transform.inl" diff --git a/external/glm/glm/gtc/matrix_transform.inl b/external/glm/glm/gtc/matrix_transform.inl deleted file mode 100644 index 15b46bc9..00000000 --- a/external/glm/glm/gtc/matrix_transform.inl +++ /dev/null @@ -1,3 +0,0 @@ -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" diff --git a/external/glm/glm/gtc/noise.hpp b/external/glm/glm/gtc/noise.hpp deleted file mode 100644 index ab1772e7..00000000 --- a/external/glm/glm/gtc/noise.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtc_noise -/// @file glm/gtc/noise.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_noise GLM_GTC_noise -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines 2D, 3D and 4D procedural noise functions -/// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": -/// https://github.com/ashima/webgl-noise -/// Following Stefan Gustavson's paper "Simplex noise demystified": -/// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_noise.hpp" -#include "../geometric.hpp" -#include "../common.hpp" -#include "../vector_relational.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_noise extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_noise - /// @{ - - /// Classic perlin noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T perlin( - vec const& p); - - /// Periodic perlin noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T perlin( - vec const& p, - vec const& rep); - - /// Simplex noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T simplex( - vec const& p); - - /// @} -}//namespace glm - -#include "noise.inl" diff --git a/external/glm/glm/gtc/noise.inl b/external/glm/glm/gtc/noise.inl deleted file mode 100644 index 30d0b274..00000000 --- a/external/glm/glm/gtc/noise.inl +++ /dev/null @@ -1,807 +0,0 @@ -/// @ref gtc_noise -/// -// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": -// https://github.com/ashima/webgl-noise -// Following Stefan Gustavson's paper "Simplex noise demystified": -// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf - -namespace glm{ -namespace gtc -{ - template - GLM_FUNC_QUALIFIER vec<4, T, Q> grad4(T const& j, vec<4, T, Q> const& ip) - { - vec<3, T, Q> pXYZ = floor(fract(vec<3, T, Q>(j) * vec<3, T, Q>(ip)) * T(7)) * ip[2] - T(1); - T pW = static_cast(1.5) - dot(abs(pXYZ), vec<3, T, Q>(1)); - vec<4, T, Q> s = vec<4, T, Q>(lessThan(vec<4, T, Q>(pXYZ, pW), vec<4, T, Q>(0.0))); - pXYZ = pXYZ + (vec<3, T, Q>(s) * T(2) - T(1)) * s.w; - return vec<4, T, Q>(pXYZ, pW); - } -}//namespace gtc - - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position) - { - vec<4, T, Q> Pi = glm::floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - vec<4, T, Q> Pf = glm::fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation - vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); - vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); - vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); - vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); - - vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); - - vec<4, T, Q> gx = static_cast(2) * glm::fract(i / T(41)) - T(1); - vec<4, T, Q> gy = glm::abs(gx) - T(0.5); - vec<4, T, Q> tx = glm::floor(gx + T(0.5)); - gx = gx - tx; - - vec<2, T, Q> g00(gx.x, gy.x); - vec<2, T, Q> g10(gx.y, gy.y); - vec<2, T, Q> g01(gx.z, gy.z); - vec<2, T, Q> g11(gx.w, gy.w); - - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); - T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); - T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); - T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); - - vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); - vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); - T n_xy = mix(n_x.x, n_x.y, fade_xy.y); - return T(2.3) * n_xy; - } - - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position) - { - vec<3, T, Q> Pi0 = floor(Position); // Integer part for indexing - vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = detail::mod289(Pi0); - Pi1 = detail::mod289(Pi1); - vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(vec<2, T, Q>(Pi0.y), vec<2, T, Q>(Pi1.y)); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 * T(1.0 / 7.0); - vec<4, T, Q> gy0 = fract(floor(gx0) * T(1.0 / 7.0)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); - gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); - gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 * T(1.0 / 7.0); - vec<4, T, Q> gy1 = fract(floor(gx1) * T(1.0 / 7.0)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = detail::fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - /* - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& P) - { - vec<3, T, Q> Pi0 = floor(P); // Integer part for indexing - vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = mod(Pi0, T(289)); - Pi1 = mod(Pi1, T(289)); - vec<3, T, Q> Pf0 = fract(P); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = permute(permute(ix) + iy); - vec<4, T, Q> ixy0 = permute(ixy + iz0); - vec<4, T, Q> ixy1 = permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 / T(7); - vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); - gx0 -= sz0 * (step(0.0, gx0) - T(0.5)); - gy0 -= sz0 * (step(0.0, gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 / T(7); - vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix( - vec<2, T, Q>(n_z.x, n_z.y), - vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - */ - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position) - { - vec<4, T, Q> Pi0 = floor(Position); // Integer part for indexing - vec<4, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = mod(Pi0, vec<4, T, Q>(289)); - Pi1 = mod(Pi1, vec<4, T, Q>(289)); - vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - vec<4, T, Q> iw0(Pi0.w); - vec<4, T, Q> iw1(Pi1.w); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); - vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); - vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); - vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); - - vec<4, T, Q> gx00 = ixy00 / T(7); - vec<4, T, Q> gy00 = floor(gx00) / T(7); - vec<4, T, Q> gz00 = floor(gy00) / T(6); - gx00 = fract(gx00) - T(0.5); - gy00 = fract(gy00) - T(0.5); - gz00 = fract(gz00) - T(0.5); - vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0.0)); - gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); - gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); - - vec<4, T, Q> gx01 = ixy01 / T(7); - vec<4, T, Q> gy01 = floor(gx01) / T(7); - vec<4, T, Q> gz01 = floor(gy01) / T(6); - gx01 = fract(gx01) - T(0.5); - gy01 = fract(gy01) - T(0.5); - gz01 = fract(gz01) - T(0.5); - vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); - gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); - gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); - - vec<4, T, Q> gx10 = ixy10 / T(7); - vec<4, T, Q> gy10 = floor(gx10) / T(7); - vec<4, T, Q> gz10 = floor(gy10) / T(6); - gx10 = fract(gx10) - T(0.5); - gy10 = fract(gy10) - T(0.5); - gz10 = fract(gz10) - T(0.5); - vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0)); - gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); - gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); - - vec<4, T, Q> gx11 = ixy11 / T(7); - vec<4, T, Q> gy11 = floor(gx11) / T(7); - vec<4, T, Q> gz11 = floor(gy11) / T(6); - gx11 = fract(gx11) - T(0.5); - gy11 = fract(gy11) - T(0.5); - gz11 = fract(gz11) - T(0.5); - vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(0.0)); - gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); - gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); - - vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); - vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); - vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); - vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); - vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); - vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); - vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); - vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); - vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); - vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); - vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); - vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); - vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); - vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); - vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); - vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); - - vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - T n0000 = dot(g0000, Pf0); - T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); - T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); - T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); - T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); - T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); - T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); - T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); - T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); - T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); - T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); - T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); - T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); - T n1111 = dot(g1111, Pf1); - - vec<4, T, Q> fade_xyzw = detail::fade(Pf0); - vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); - vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); - vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); - vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); - T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); - return T(2.2) * n_xyzw; - } - - // Classic Perlin noise, periodic variant - template - GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position, vec<2, T, Q> const& rep) - { - vec<4, T, Q> Pi = floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - vec<4, T, Q> Pf = fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, vec<4, T, Q>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period - Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation - vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); - vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); - vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); - vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); - - vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); - - vec<4, T, Q> gx = static_cast(2) * fract(i / T(41)) - T(1); - vec<4, T, Q> gy = abs(gx) - T(0.5); - vec<4, T, Q> tx = floor(gx + T(0.5)); - gx = gx - tx; - - vec<2, T, Q> g00(gx.x, gy.x); - vec<2, T, Q> g10(gx.y, gy.y); - vec<2, T, Q> g01(gx.z, gy.z); - vec<2, T, Q> g11(gx.w, gy.w); - - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); - T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); - T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); - T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); - - vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); - vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); - T n_xy = mix(n_x.x, n_x.y, fade_xy.y); - return T(2.3) * n_xy; - } - - // Classic Perlin noise, periodic variant - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position, vec<3, T, Q> const& rep) - { - vec<3, T, Q> Pi0 = mod(floor(Position), rep); // Integer part, modulo period - vec<3, T, Q> Pi1 = mod(Pi0 + vec<3, T, Q>(T(1)), rep); // Integer part + 1, mod period - Pi0 = mod(Pi0, vec<3, T, Q>(289)); - Pi1 = mod(Pi1, vec<3, T, Q>(289)); - vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - vec<3, T, Q>(T(1)); // Fractional part - 1.0 - vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 / T(7); - vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0)); - gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); - gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 / T(7); - vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(T(0))); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000 = vec<3, T, Q>(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100 = vec<3, T, Q>(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010 = vec<3, T, Q>(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110 = vec<3, T, Q>(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001 = vec<3, T, Q>(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101 = vec<3, T, Q>(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011 = vec<3, T, Q>(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111 = vec<3, T, Q>(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = detail::fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - - // Classic Perlin noise, periodic version - template - GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position, vec<4, T, Q> const& rep) - { - vec<4, T, Q> Pi0 = mod(floor(Position), rep); // Integer part modulo rep - vec<4, T, Q> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep - vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - vec<4, T, Q> iw0(Pi0.w); - vec<4, T, Q> iw1(Pi1.w); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); - vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); - vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); - vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); - - vec<4, T, Q> gx00 = ixy00 / T(7); - vec<4, T, Q> gy00 = floor(gx00) / T(7); - vec<4, T, Q> gz00 = floor(gy00) / T(6); - gx00 = fract(gx00) - T(0.5); - gy00 = fract(gy00) - T(0.5); - gz00 = fract(gz00) - T(0.5); - vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0)); - gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); - gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); - - vec<4, T, Q> gx01 = ixy01 / T(7); - vec<4, T, Q> gy01 = floor(gx01) / T(7); - vec<4, T, Q> gz01 = floor(gy01) / T(6); - gx01 = fract(gx01) - T(0.5); - gy01 = fract(gy01) - T(0.5); - gz01 = fract(gz01) - T(0.5); - vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); - gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); - gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); - - vec<4, T, Q> gx10 = ixy10 / T(7); - vec<4, T, Q> gy10 = floor(gx10) / T(7); - vec<4, T, Q> gz10 = floor(gy10) / T(6); - gx10 = fract(gx10) - T(0.5); - gy10 = fract(gy10) - T(0.5); - gz10 = fract(gz10) - T(0.5); - vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0.0)); - gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); - gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); - - vec<4, T, Q> gx11 = ixy11 / T(7); - vec<4, T, Q> gy11 = floor(gx11) / T(7); - vec<4, T, Q> gz11 = floor(gy11) / T(6); - gx11 = fract(gx11) - T(0.5); - gy11 = fract(gy11) - T(0.5); - gz11 = fract(gz11) - T(0.5); - vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(T(0))); - gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); - gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); - - vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); - vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); - vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); - vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); - vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); - vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); - vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); - vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); - vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); - vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); - vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); - vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); - vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); - vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); - vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); - vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); - - vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - T n0000 = dot(g0000, Pf0); - T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); - T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); - T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); - T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); - T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); - T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); - T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); - T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); - T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); - T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); - T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); - T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); - T n1111 = dot(g1111, Pf1); - - vec<4, T, Q> fade_xyzw = detail::fade(Pf0); - vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); - vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); - vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); - vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); - T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); - return T(2.2) * n_xyzw; - } - - template - GLM_FUNC_QUALIFIER T simplex(glm::vec<2, T, Q> const& v) - { - vec<4, T, Q> const C = vec<4, T, Q>( - T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 - T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0) - T(-0.577350269189626), // -1.0 + 2.0 * C.x - T( 0.024390243902439)); // 1.0 / 41.0 - - // First corner - vec<2, T, Q> i = floor(v + dot(v, vec<2, T, Q>(C[1]))); - vec<2, T, Q> x0 = v - i + dot(i, vec<2, T, Q>(C[0])); - - // Other corners - //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 - //i1.y = 1.0 - i1.x; - vec<2, T, Q> i1 = (x0.x > x0.y) ? vec<2, T, Q>(1, 0) : vec<2, T, Q>(0, 1); - // x0 = x0 - 0.0 + 0.0 * C.xx ; - // x1 = x0 - i1 + 1.0 * C.xx ; - // x2 = x0 - 1.0 + 2.0 * C.xx ; - vec<4, T, Q> x12 = vec<4, T, Q>(x0.x, x0.y, x0.x, x0.y) + vec<4, T, Q>(C.x, C.x, C.z, C.z); - x12 = vec<4, T, Q>(vec<2, T, Q>(x12) - i1, x12.z, x12.w); - - // Permutations - i = mod(i, vec<2, T, Q>(289)); // Avoid truncation effects in permutation - vec<3, T, Q> p = detail::permute( - detail::permute(i.y + vec<3, T, Q>(T(0), i1.y, T(1))) - + i.x + vec<3, T, Q>(T(0), i1.x, T(1))); - - vec<3, T, Q> m = max(vec<3, T, Q>(0.5) - vec<3, T, Q>( - dot(x0, x0), - dot(vec<2, T, Q>(x12.x, x12.y), vec<2, T, Q>(x12.x, x12.y)), - dot(vec<2, T, Q>(x12.z, x12.w), vec<2, T, Q>(x12.z, x12.w))), vec<3, T, Q>(0)); - m = m * m ; - m = m * m ; - - // Gradients: 41 points uniformly over a line, mapped onto a diamond. - // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) - - vec<3, T, Q> x = static_cast(2) * fract(p * C.w) - T(1); - vec<3, T, Q> h = abs(x) - T(0.5); - vec<3, T, Q> ox = floor(x + T(0.5)); - vec<3, T, Q> a0 = x - ox; - - // Normalise gradients implicitly by scaling m - // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h ); - m *= static_cast(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h); - - // Compute final noise value at P - vec<3, T, Q> g; - g.x = a0.x * x0.x + h.x * x0.y; - //g.yz = a0.yz * x12.xz + h.yz * x12.yw; - g.y = a0.y * x12.x + h.y * x12.y; - g.z = a0.z * x12.z + h.z * x12.w; - return T(130) * dot(m, g); - } - - template - GLM_FUNC_QUALIFIER T simplex(vec<3, T, Q> const& v) - { - vec<2, T, Q> const C(1.0 / 6.0, 1.0 / 3.0); - vec<4, T, Q> const D(0.0, 0.5, 1.0, 2.0); - - // First corner - vec<3, T, Q> i(floor(v + dot(v, vec<3, T, Q>(C.y)))); - vec<3, T, Q> x0(v - i + dot(i, vec<3, T, Q>(C.x))); - - // Other corners - vec<3, T, Q> g(step(vec<3, T, Q>(x0.y, x0.z, x0.x), x0)); - vec<3, T, Q> l(T(1) - g); - vec<3, T, Q> i1(min(g, vec<3, T, Q>(l.z, l.x, l.y))); - vec<3, T, Q> i2(max(g, vec<3, T, Q>(l.z, l.x, l.y))); - - // x0 = x0 - 0.0 + 0.0 * C.xxx; - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; - vec<3, T, Q> x1(x0 - i1 + C.x); - vec<3, T, Q> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y - vec<3, T, Q> x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y - - // Permutations - i = detail::mod289(i); - vec<4, T, Q> p(detail::permute(detail::permute(detail::permute( - i.z + vec<4, T, Q>(T(0), i1.z, i2.z, T(1))) + - i.y + vec<4, T, Q>(T(0), i1.y, i2.y, T(1))) + - i.x + vec<4, T, Q>(T(0), i1.x, i2.x, T(1)))); - - // Gradients: 7x7 points over a square, mapped onto an octahedron. - // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) - T n_ = static_cast(0.142857142857); // 1.0/7.0 - vec<3, T, Q> ns(n_ * vec<3, T, Q>(D.w, D.y, D.z) - vec<3, T, Q>(D.x, D.z, D.x)); - - vec<4, T, Q> j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7) - - vec<4, T, Q> x_(floor(j * ns.z)); - vec<4, T, Q> y_(floor(j - T(7) * x_)); // mod(j,N) - - vec<4, T, Q> x(x_ * ns.x + ns.y); - vec<4, T, Q> y(y_ * ns.x + ns.y); - vec<4, T, Q> h(T(1) - abs(x) - abs(y)); - - vec<4, T, Q> b0(x.x, x.y, y.x, y.y); - vec<4, T, Q> b1(x.z, x.w, y.z, y.w); - - // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; - // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; - vec<4, T, Q> s0(floor(b0) * T(2) + T(1)); - vec<4, T, Q> s1(floor(b1) * T(2) + T(1)); - vec<4, T, Q> sh(-step(h, vec<4, T, Q>(0.0))); - - vec<4, T, Q> a0 = vec<4, T, Q>(b0.x, b0.z, b0.y, b0.w) + vec<4, T, Q>(s0.x, s0.z, s0.y, s0.w) * vec<4, T, Q>(sh.x, sh.x, sh.y, sh.y); - vec<4, T, Q> a1 = vec<4, T, Q>(b1.x, b1.z, b1.y, b1.w) + vec<4, T, Q>(s1.x, s1.z, s1.y, s1.w) * vec<4, T, Q>(sh.z, sh.z, sh.w, sh.w); - - vec<3, T, Q> p0(a0.x, a0.y, h.x); - vec<3, T, Q> p1(a0.z, a0.w, h.y); - vec<3, T, Q> p2(a1.x, a1.y, h.z); - vec<3, T, Q> p3(a1.z, a1.w, h.w); - - // Normalise gradients - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - - // Mix final noise value - vec<4, T, Q> m = max(T(0.6) - vec<4, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), vec<4, T, Q>(0)); - m = m * m; - return T(42) * dot(m * m, vec<4, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); - } - - template - GLM_FUNC_QUALIFIER T simplex(vec<4, T, Q> const& v) - { - vec<4, T, Q> const C( - 0.138196601125011, // (5 - sqrt(5))/20 G4 - 0.276393202250021, // 2 * G4 - 0.414589803375032, // 3 * G4 - -0.447213595499958); // -1 + 4 * G4 - - // (sqrt(5) - 1)/4 = F4, used once below - T const F4 = static_cast(0.309016994374947451); - - // First corner - vec<4, T, Q> i = floor(v + dot(v, vec<4, T, Q>(F4))); - vec<4, T, Q> x0 = v - i + dot(i, vec<4, T, Q>(C.x)); - - // Other corners - - // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) - vec<4, T, Q> i0; - vec<3, T, Q> isX = step(vec<3, T, Q>(x0.y, x0.z, x0.w), vec<3, T, Q>(x0.x)); - vec<3, T, Q> isYZ = step(vec<3, T, Q>(x0.z, x0.w, x0.w), vec<3, T, Q>(x0.y, x0.y, x0.z)); - // i0.x = dot(isX, vec3(1.0)); - //i0.x = isX.x + isX.y + isX.z; - //i0.yzw = static_cast(1) - isX; - i0 = vec<4, T, Q>(isX.x + isX.y + isX.z, T(1) - isX); - // i0.y += dot(isYZ.xy, vec2(1.0)); - i0.y += isYZ.x + isYZ.y; - //i0.zw += 1.0 - vec<2, T, Q>(isYZ.x, isYZ.y); - i0.z += static_cast(1) - isYZ.x; - i0.w += static_cast(1) - isYZ.y; - i0.z += isYZ.z; - i0.w += static_cast(1) - isYZ.z; - - // i0 now contains the unique values 0,1,2,3 in each channel - vec<4, T, Q> i3 = clamp(i0, T(0), T(1)); - vec<4, T, Q> i2 = clamp(i0 - T(1), T(0), T(1)); - vec<4, T, Q> i1 = clamp(i0 - T(2), T(0), T(1)); - - // x0 = x0 - 0.0 + 0.0 * C.xxxx - // x1 = x0 - i1 + 0.0 * C.xxxx - // x2 = x0 - i2 + 0.0 * C.xxxx - // x3 = x0 - i3 + 0.0 * C.xxxx - // x4 = x0 - 1.0 + 4.0 * C.xxxx - vec<4, T, Q> x1 = x0 - i1 + C.x; - vec<4, T, Q> x2 = x0 - i2 + C.y; - vec<4, T, Q> x3 = x0 - i3 + C.z; - vec<4, T, Q> x4 = x0 + C.w; - - // Permutations - i = mod(i, vec<4, T, Q>(289)); - T j0 = detail::permute(detail::permute(detail::permute(detail::permute(i.w) + i.z) + i.y) + i.x); - vec<4, T, Q> j1 = detail::permute(detail::permute(detail::permute(detail::permute( - i.w + vec<4, T, Q>(i1.w, i2.w, i3.w, T(1))) + - i.z + vec<4, T, Q>(i1.z, i2.z, i3.z, T(1))) + - i.y + vec<4, T, Q>(i1.y, i2.y, i3.y, T(1))) + - i.x + vec<4, T, Q>(i1.x, i2.x, i3.x, T(1))); - - // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope - // 7*7*6 = 294, which is close to the ring size 17*17 = 289. - vec<4, T, Q> ip = vec<4, T, Q>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0)); - - vec<4, T, Q> p0 = gtc::grad4(j0, ip); - vec<4, T, Q> p1 = gtc::grad4(j1.x, ip); - vec<4, T, Q> p2 = gtc::grad4(j1.y, ip); - vec<4, T, Q> p3 = gtc::grad4(j1.z, ip); - vec<4, T, Q> p4 = gtc::grad4(j1.w, ip); - - // Normalise gradients - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - p4 *= detail::taylorInvSqrt(dot(p4, p4)); - - // Mix contributions from the five corners - vec<3, T, Q> m0 = max(T(0.6) - vec<3, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), vec<3, T, Q>(0)); - vec<2, T, Q> m1 = max(T(0.6) - vec<2, T, Q>(dot(x3, x3), dot(x4, x4) ), vec<2, T, Q>(0)); - m0 = m0 * m0; - m1 = m1 * m1; - return T(49) * - (dot(m0 * m0, vec<3, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + - dot(m1 * m1, vec<2, T, Q>(dot(p3, x3), dot(p4, x4)))); - } -}//namespace glm diff --git a/external/glm/glm/gtc/packing.hpp b/external/glm/glm/gtc/packing.hpp deleted file mode 100644 index 8e416b3f..00000000 --- a/external/glm/glm/gtc/packing.hpp +++ /dev/null @@ -1,728 +0,0 @@ -/// @ref gtc_packing -/// @file glm/gtc/packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_packing GLM_GTC_packing -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert vertors to packed -/// formats. - -#pragma once - -// Dependency: -#include "type_precision.hpp" -#include "../ext/vector_packing.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_packing - /// @{ - - /// First, converts the normalized floating-point value v into a 8-bit integer value. - /// Then, the results are packed into the returned 8-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm1x8: round(clamp(c, 0, +1) * 255.0) - /// - /// @see gtc_packing - /// @see uint16 packUnorm2x8(vec2 const& v) - /// @see uint32 packUnorm4x8(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint8 packUnorm1x8(float v); - - /// Convert a single 8-bit integer to a normalized floating-point value. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x8(uint16 p) - /// @see vec4 unpackUnorm4x8(uint32 p) - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackUnorm1x8(uint8 p); - - /// First, converts each component of the normalized floating-point value v into 8-bit integer values. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm2x8: round(clamp(c, 0, +1) * 255.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint8 packUnorm1x8(float const& v) - /// @see uint32 packUnorm4x8(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const& v); - - /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackUnorm1x8(uint8 v) - /// @see vec4 unpackUnorm4x8(uint32 p) - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p); - - /// First, converts the normalized floating-point value v into 8-bit integer value. - /// Then, the results are packed into the returned 8-bit unsigned integer. - /// - /// The conversion to fixed point is done as follows: - /// packSnorm1x8: round(clamp(s, -1, +1) * 127.0) - /// - /// @see gtc_packing - /// @see uint16 packSnorm2x8(vec2 const& v) - /// @see uint32 packSnorm4x8(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint8 packSnorm1x8(float s); - - /// First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. - /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm1x8: clamp(f / 127.0, -1, +1) - /// - /// @see gtc_packing - /// @see vec2 unpackSnorm2x8(uint16 p) - /// @see vec4 unpackSnorm4x8(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackSnorm1x8(uint8 p); - - /// First, converts each component of the normalized floating-point value v into 8-bit integer values. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x8: round(clamp(c, -1, +1) * 127.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint8 packSnorm1x8(float const& v) - /// @see uint32 packSnorm4x8(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const& v); - - /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm2x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackSnorm1x8(uint8 p) - /// @see vec4 unpackSnorm4x8(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p); - - /// First, converts the normalized floating-point value v into a 16-bit integer value. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm1x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// @see gtc_packing - /// @see uint16 packSnorm1x16(float const& v) - /// @see uint64 packSnorm4x16(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packUnorm1x16(float v); - - /// First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. - /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm1x16: f / 65535.0 - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x16(uint32 p) - /// @see vec4 unpackUnorm4x16(uint64 p) - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackUnorm1x16(uint16 p); - - /// First, converts each component of the normalized floating-point value v into 16-bit integer values. - /// Then, the results are packed into the returned 64-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm4x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint16 packUnorm1x16(float const& v) - /// @see uint32 packUnorm2x16(vec2 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const& v); - - /// First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnormx4x16: f / 65535.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackUnorm1x16(uint16 p) - /// @see vec2 unpackUnorm2x16(uint32 p) - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p); - - /// First, converts the normalized floating-point value v into 16-bit integer value. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion to fixed point is done as follows: - /// packSnorm1x8: round(clamp(s, -1, +1) * 32767.0) - /// - /// @see gtc_packing - /// @see uint32 packSnorm2x16(vec2 const& v) - /// @see uint64 packSnorm4x16(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packSnorm1x16(float v); - - /// First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm1x16: clamp(f / 32767.0, -1, +1) - /// - /// @see gtc_packing - /// @see vec2 unpackSnorm2x16(uint32 p) - /// @see vec4 unpackSnorm4x16(uint64 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackSnorm1x16(uint16 p); - - /// First, converts each component of the normalized floating-point value v into 16-bit integer values. - /// Then, the results are packed into the returned 64-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x8: round(clamp(c, -1, +1) * 32767.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint16 packSnorm1x16(float const& v) - /// @see uint32 packSnorm2x16(vec2 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const& v); - - /// First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x16: clamp(f / 32767.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackSnorm1x16(uint16 p) - /// @see vec2 unpackSnorm2x16(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p); - - /// Returns an unsigned integer obtained by converting the components of a floating-point scalar - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing this 16-bit value into a 16-bit unsigned integer. - /// - /// @see gtc_packing - /// @see uint32 packHalf2x16(vec2 const& v) - /// @see uint64 packHalf4x16(vec4 const& v) - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packHalf1x16(float v); - - /// Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, - /// interpreted as a 16-bit floating-point number according to the OpenGL Specification, - /// and converting it to 32-bit floating-point values. - /// - /// @see gtc_packing - /// @see vec2 unpackHalf2x16(uint32 const& v) - /// @see vec4 unpackHalf4x16(uint64 const& v) - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackHalf1x16(uint16 v); - - /// Returns an unsigned integer obtained by converting the components of a four-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these four 16-bit values into a 64-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see uint16 packHalf1x16(float const& v) - /// @see uint32 packHalf2x16(vec2 const& v) - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packHalf4x16(vec4 const& v); - - /// Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see float unpackHalf1x16(uint16 const& v) - /// @see vec2 unpackHalf2x16(uint32 const& v) - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p); - - /// Returns an unsigned integer obtained by converting the components of a four-component signed integer vector - /// to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, - /// and then packing these four values into a 32-bit unsigned integer. - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see uint32 packI3x10_1x2(uvec4 const& v) - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see ivec4 unpackI3x10_1x2(uint32 const& p) - GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const& v); - - /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); - /// @see uvec4 unpackI3x10_1x2(uint32 const& p); - GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p); - - /// Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector - /// to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, - /// and then packing these four values into a 32-bit unsigned integer. - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see uint32 packI3x10_1x2(ivec4 const& v) - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see ivec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const& v); - - /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); - /// @see uvec4 unpackI3x10_1x2(uint32 const& p); - GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p); - - /// First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. - /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) - /// packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0) - /// - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see uint32 packI3x10_1x2(ivec4 const& v) - GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) - /// unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p)) - /// @see uvec4 unpackI3x10_1x2(uint32 const& p) - /// @see uvec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p); - - /// First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. - /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) - /// packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0) - /// - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see uint32 packI3x10_1x2(ivec4 const& v) - GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) - /// unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see vec4 unpackInorm3x10_1x2(uint32 const& p)) - /// @see uvec4 unpackI3x10_1x2(uint32 const& p) - /// @see uvec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p); - - /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. - /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The first vector component specifies the 11 least-significant bits of the result; - /// the last component specifies the 10 most-significant bits. - /// - /// @see gtc_packing - /// @see vec3 unpackF2x11_1x10(uint32 const& p) - GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . - /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packF2x11_1x10(vec3 const& v) - GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p); - - - /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. - /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The first vector component specifies the 11 least-significant bits of the result; - /// the last component specifies the 10 most-significant bits. - /// - /// packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format - /// - /// @see gtc_packing - /// @see vec3 unpackF3x9_E1x5(uint32 const& p) - GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . - /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data - /// - /// @see gtc_packing - /// @see uint32 packF3x9_E1x5(vec3 const& v) - GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p); - - /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& p) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb); - - /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see vec<4, T, Q> packRGBM(vec<3, float, Q> const& v) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm); - - /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see vec unpackHalf(vec const& p) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec packHalf(vec const& v); - - /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see vec packHalf(vec const& v) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec unpackHalf(vec const& p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec unpackUnorm(vec const& p); - template - GLM_FUNC_DECL vec packUnorm(vec const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see vec packUnorm(vec const& v) - template - GLM_FUNC_DECL vec unpackUnorm(vec const& v); - - /// Convert each component of the normalized floating-point vector into signed integer values. - /// - /// @see gtc_packing - /// @see vec unpackSnorm(vec const& p); - template - GLM_FUNC_DECL vec packSnorm(vec const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see vec packSnorm(vec const& v) - template - GLM_FUNC_DECL vec unpackSnorm(vec const& v); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x4(uint8 p) - GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint8 packUnorm2x4(vec2 const& v) - GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm4x4(uint16 p) - GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm4x4(vec4 const& v) - GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec3 unpackUnorm1x5_1x6_1x5(uint16 p) - GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm1x5_1x6_1x5(vec3 const& v) - GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm3x5_1x1(uint16 p) - GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm3x5_1x1(vec4 const& v) - GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec3 unpackUnorm2x3_1x2(uint8 p) - GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint8 packUnorm2x3_1x2(vec3 const& v) - GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p); - - - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i8vec2 unpackInt2x8(int16 p) - GLM_FUNC_DECL int16 packInt2x8(i8vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int16 packInt2x8(i8vec2 const& v) - GLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u8vec2 unpackInt2x8(uint16 p) - GLM_FUNC_DECL uint16 packUint2x8(u8vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint16 packInt2x8(u8vec2 const& v) - GLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i8vec4 unpackInt4x8(int32 p) - GLM_FUNC_DECL int32 packInt4x8(i8vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int32 packInt2x8(i8vec4 const& v) - GLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u8vec4 unpackUint4x8(uint32 p) - GLM_FUNC_DECL uint32 packUint4x8(u8vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint32 packUint4x8(u8vec2 const& v) - GLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i16vec2 unpackInt2x16(int p) - GLM_FUNC_DECL int packInt2x16(i16vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packInt2x16(i16vec2 const& v) - GLM_FUNC_DECL i16vec2 unpackInt2x16(int p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i16vec4 unpackInt4x16(int64 p) - GLM_FUNC_DECL int64 packInt4x16(i16vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int64 packInt4x16(i16vec4 const& v) - GLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u16vec2 unpackUint2x16(uint p) - GLM_FUNC_DECL uint packUint2x16(u16vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint packUint2x16(u16vec2 const& v) - GLM_FUNC_DECL u16vec2 unpackUint2x16(uint p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u16vec4 unpackUint4x16(uint64 p) - GLM_FUNC_DECL uint64 packUint4x16(u16vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint64 packUint4x16(u16vec4 const& v) - GLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i32vec2 unpackInt2x32(int p) - GLM_FUNC_DECL int64 packInt2x32(i32vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packInt2x16(i32vec2 const& v) - GLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u32vec2 unpackUint2x32(int p) - GLM_FUNC_DECL uint64 packUint2x32(u32vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packUint2x16(u32vec2 const& v) - GLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p); - - /// @} -}// namespace glm - -#include "packing.inl" diff --git a/external/glm/glm/gtc/packing.inl b/external/glm/glm/gtc/packing.inl deleted file mode 100644 index 8c906e16..00000000 --- a/external/glm/glm/gtc/packing.inl +++ /dev/null @@ -1,938 +0,0 @@ -/// @ref gtc_packing - -#include "../ext/scalar_relational.hpp" -#include "../ext/vector_relational.hpp" -#include "../common.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../detail/type_half.hpp" -#include -#include - -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((f >> 16) & 0x8000) | // sign - ((((f & 0x7f800000) - 0x38000000) >> 13) & 0x7c00) | // exponential - ((f >> 13) & 0x03ff); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 float2packed11(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x000007c0 => 00000000 00000000 00000111 11000000 - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((f & 0x7f800000) - 0x38000000) >> 17) & 0x07c0) | // exponential - ((f >> 17) & 0x003f); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 packed11ToFloat(glm::uint32 p) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x000007c0 => 00000000 00000000 00000111 11000000 - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential - ((p & 0x003f) << 17); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 float2packed10(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x0000001F => 00000000 00000000 00000000 00011111 - // 0x0000003F => 00000000 00000000 00000000 00111111 - // 0x000003E0 => 00000000 00000000 00000011 11100000 - // 0x000007C0 => 00000000 00000000 00000111 11000000 - // 0x00007C00 => 00000000 00000000 01111100 00000000 - // 0x000003FF => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((f & 0x7f800000) - 0x38000000) >> 18) & 0x03E0) | // exponential - ((f >> 18) & 0x001f); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 packed10ToFloat(glm::uint32 p) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x0000001F => 00000000 00000000 00000000 00011111 - // 0x0000003F => 00000000 00000000 00000000 00111111 - // 0x000003E0 => 00000000 00000000 00000011 11100000 - // 0x000007C0 => 00000000 00000000 00000111 11000000 - // 0x00007C00 => 00000000 00000000 01111100 00000000 - // 0x000003FF => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential - ((p & 0x001f) << 18); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint half2float(glm::uint h) - { - return ((h & 0x8000) << 16) | ((( h & 0x7c00) + 0x1C000) << 13) | ((h & 0x03FF) << 13); - } - - GLM_FUNC_QUALIFIER glm::uint floatTo11bit(float x) - { - if(x == 0.0f) - return 0u; - else if(glm::isnan(x)) - return ~0u; - else if(glm::isinf(x)) - return 0x1Fu << 6u; - - uint Pack = 0u; - memcpy(&Pack, &x, sizeof(Pack)); - return float2packed11(Pack); - } - - GLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x) - { - if(x == 0) - return 0.0f; - else if(x == ((1 << 11) - 1)) - return ~0;//NaN - else if(x == (0x1f << 6)) - return ~0;//Inf - - uint Result = packed11ToFloat(x); - - float Temp = 0; - memcpy(&Temp, &Result, sizeof(Temp)); - return Temp; - } - - GLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x) - { - if(x == 0.0f) - return 0u; - else if(glm::isnan(x)) - return ~0u; - else if(glm::isinf(x)) - return 0x1Fu << 5u; - - uint Pack = 0; - memcpy(&Pack, &x, sizeof(Pack)); - return float2packed10(Pack); - } - - GLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x) - { - if(x == 0) - return 0.0f; - else if(x == ((1 << 10) - 1)) - return ~0;//NaN - else if(x == (0x1f << 5)) - return ~0;//Inf - - uint Result = packed10ToFloat(x); - - float Temp = 0; - memcpy(&Temp, &Result, sizeof(Temp)); - return Temp; - } - -// GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z) -// { -// return ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) | ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22); -// } - - union u3u3u2 - { - struct - { - uint x : 3; - uint y : 3; - uint z : 2; - } data; - uint8 pack; - }; - - union u4u4 - { - struct - { - uint x : 4; - uint y : 4; - } data; - uint8 pack; - }; - - union u4u4u4u4 - { - struct - { - uint x : 4; - uint y : 4; - uint z : 4; - uint w : 4; - } data; - uint16 pack; - }; - - union u5u6u5 - { - struct - { - uint x : 5; - uint y : 6; - uint z : 5; - } data; - uint16 pack; - }; - - union u5u5u5u1 - { - struct - { - uint x : 5; - uint y : 5; - uint z : 5; - uint w : 1; - } data; - uint16 pack; - }; - - union u10u10u10u2 - { - struct - { - uint x : 10; - uint y : 10; - uint z : 10; - uint w : 2; - } data; - uint32 pack; - }; - - union i10i10i10i2 - { - struct - { - int x : 10; - int y : 10; - int z : 10; - int w : 2; - } data; - uint32 pack; - }; - - union u9u9u9e5 - { - struct - { - uint x : 9; - uint y : 9; - uint z : 9; - uint w : 5; - } data; - uint32 pack; - }; - - template - struct compute_half - {}; - - template - struct compute_half<1, Q> - { - GLM_FUNC_QUALIFIER static vec<1, uint16, Q> pack(vec<1, float, Q> const& v) - { - int16 const Unpack(detail::toFloat16(v.x)); - u16vec1 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<1, float, Q> unpack(vec<1, uint16, Q> const& v) - { - i16vec1 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<1, float, Q>(detail::toFloat32(v.x)); - } - }; - - template - struct compute_half<2, Q> - { - GLM_FUNC_QUALIFIER static vec<2, uint16, Q> pack(vec<2, float, Q> const& v) - { - vec<2, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y)); - u16vec2 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<2, float, Q> unpack(vec<2, uint16, Q> const& v) - { - i16vec2 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<2, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y)); - } - }; - - template - struct compute_half<3, Q> - { - GLM_FUNC_QUALIFIER static vec<3, uint16, Q> pack(vec<3, float, Q> const& v) - { - vec<3, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z)); - u16vec3 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<3, float, Q> unpack(vec<3, uint16, Q> const& v) - { - i16vec3 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<3, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z)); - } - }; - - template - struct compute_half<4, Q> - { - GLM_FUNC_QUALIFIER static vec<4, uint16, Q> pack(vec<4, float, Q> const& v) - { - vec<4, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z), detail::toFloat16(v.w)); - u16vec4 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<4, float, Q> unpack(vec<4, uint16, Q> const& v) - { - i16vec4 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<4, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z), detail::toFloat32(v.w)); - } - }; -}//namespace detail - - GLM_FUNC_QUALIFIER uint8 packUnorm1x8(float v) - { - return static_cast(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - } - - GLM_FUNC_QUALIFIER float unpackUnorm1x8(uint8 p) - { - float const Unpack(p); - return Unpack * static_cast(0.0039215686274509803921568627451); // 1 / 255 - } - - GLM_FUNC_QUALIFIER uint16 packUnorm2x8(vec2 const& v) - { - u8vec2 const Topack(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - - uint16 Unpack = 0; - memcpy(&Unpack, &Topack, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x8(uint16 p) - { - u8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return vec2(Unpack) * float(0.0039215686274509803921568627451); // 1 / 255 - } - - GLM_FUNC_QUALIFIER uint8 packSnorm1x8(float v) - { - int8 const Topack(static_cast(round(clamp(v ,-1.0f, 1.0f) * 127.0f))); - uint8 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackSnorm1x8(uint8 p) - { - int8 Unpack = 0; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - static_cast(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packSnorm2x8(vec2 const& v) - { - i8vec2 const Topack(round(clamp(v, -1.0f, 1.0f) * 127.0f)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec2 unpackSnorm2x8(uint16 p) - { - i8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - vec2(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packUnorm1x16(float s) - { - return static_cast(round(clamp(s, 0.0f, 1.0f) * 65535.0f)); - } - - GLM_FUNC_QUALIFIER float unpackUnorm1x16(uint16 p) - { - float const Unpack(p); - return Unpack * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 - } - - GLM_FUNC_QUALIFIER uint64 packUnorm4x16(vec4 const& v) - { - u16vec4 const Topack(round(clamp(v , 0.0f, 1.0f) * 65535.0f)); - uint64 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x16(uint64 p) - { - u16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return vec4(Unpack) * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 - } - - GLM_FUNC_QUALIFIER uint16 packSnorm1x16(float v) - { - int16 const Topack = static_cast(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackSnorm1x16(uint16 p) - { - int16 Unpack = 0; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - static_cast(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint64 packSnorm4x16(vec4 const& v) - { - i16vec4 const Topack(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); - uint64 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec4 unpackSnorm4x16(uint64 p) - { - i16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - vec4(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packHalf1x16(float v) - { - int16 const Topack(detail::toFloat16(v)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackHalf1x16(uint16 v) - { - int16 Unpack = 0; - memcpy(&Unpack, &v, sizeof(Unpack)); - return detail::toFloat32(Unpack); - } - - GLM_FUNC_QUALIFIER uint64 packHalf4x16(glm::vec4 const& v) - { - i16vec4 const Unpack( - detail::toFloat16(v.x), - detail::toFloat16(v.y), - detail::toFloat16(v.z), - detail::toFloat16(v.w)); - uint64 Packed = 0; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER glm::vec4 unpackHalf4x16(uint64 v) - { - i16vec4 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec4( - detail::toFloat32(Unpack.x), - detail::toFloat32(Unpack.y), - detail::toFloat32(Unpack.z), - detail::toFloat32(Unpack.w)); - } - - GLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const& v) - { - detail::i10i10i10i2 Result; - Result.data.x = v.x; - Result.data.y = v.y; - Result.data.z = v.z; - Result.data.w = v.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER ivec4 unpackI3x10_1x2(uint32 v) - { - detail::i10i10i10i2 Unpack; - Unpack.pack = v; - return ivec4( - Unpack.data.x, - Unpack.data.y, - Unpack.data.z, - Unpack.data.w); - } - - GLM_FUNC_QUALIFIER uint32 packU3x10_1x2(uvec4 const& v) - { - detail::u10u10u10u2 Result; - Result.data.x = v.x; - Result.data.y = v.y; - Result.data.z = v.z; - Result.data.w = v.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER uvec4 unpackU3x10_1x2(uint32 v) - { - detail::u10u10u10u2 Unpack; - Unpack.pack = v; - return uvec4( - Unpack.data.x, - Unpack.data.y, - Unpack.data.z, - Unpack.data.w); - } - - GLM_FUNC_QUALIFIER uint32 packSnorm3x10_1x2(vec4 const& v) - { - ivec4 const Pack(round(clamp(v,-1.0f, 1.0f) * vec4(511.f, 511.f, 511.f, 1.f))); - - detail::i10i10i10i2 Result; - Result.data.x = Pack.x; - Result.data.y = Pack.y; - Result.data.z = Pack.z; - Result.data.w = Pack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackSnorm3x10_1x2(uint32 v) - { - detail::i10i10i10i2 Unpack; - Unpack.pack = v; - - vec4 const Result(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w); - - return clamp(Result * vec4(1.f / 511.f, 1.f / 511.f, 1.f / 511.f, 1.f), -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint32 packUnorm3x10_1x2(vec4 const& v) - { - uvec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(1023.f, 1023.f, 1023.f, 3.f))); - - detail::u10u10u10u2 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm3x10_1x2(uint32 v) - { - vec4 const ScaleFactors(1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 3.f); - - detail::u10u10u10u2 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactors; - } - - GLM_FUNC_QUALIFIER uint32 packF2x11_1x10(vec3 const& v) - { - return - ((detail::floatTo11bit(v.x) & ((1 << 11) - 1)) << 0) | - ((detail::floatTo11bit(v.y) & ((1 << 11) - 1)) << 11) | - ((detail::floatTo10bit(v.z) & ((1 << 10) - 1)) << 22); - } - - GLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 v) - { - return vec3( - detail::packed11bitToFloat(v >> 0), - detail::packed11bitToFloat(v >> 11), - detail::packed10bitToFloat(v >> 22)); - } - - GLM_FUNC_QUALIFIER uint32 packF3x9_E1x5(vec3 const& v) - { - float const SharedExpMax = (pow(2.0f, 9.0f - 1.0f) / pow(2.0f, 9.0f)) * pow(2.0f, 31.f - 15.f); - vec3 const Color = clamp(v, 0.0f, SharedExpMax); - float const MaxColor = max(Color.x, max(Color.y, Color.z)); - - float const ExpSharedP = max(-15.f - 1.f, floor(log2(MaxColor))) + 1.0f + 15.f; - float const MaxShared = floor(MaxColor / pow(2.0f, (ExpSharedP - 15.f - 9.f)) + 0.5f); - float const ExpShared = equal(MaxShared, pow(2.0f, 9.0f), epsilon()) ? ExpSharedP + 1.0f : ExpSharedP; - - uvec3 const ColorComp(floor(Color / pow(2.f, (ExpShared - 15.f - 9.f)) + 0.5f)); - - detail::u9u9u9e5 Unpack; - Unpack.data.x = ColorComp.x; - Unpack.data.y = ColorComp.y; - Unpack.data.z = ColorComp.z; - Unpack.data.w = uint(ExpShared); - return Unpack.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackF3x9_E1x5(uint32 v) - { - detail::u9u9u9e5 Unpack; - Unpack.pack = v; - - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * pow(2.0f, Unpack.data.w - 15.f - 9.f); - } - - // Based on Brian Karis http://graphicrants.blogspot.fr/2009/04/rgbm-color-encoding.html - template - GLM_FUNC_QUALIFIER vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb) - { - vec<3, T, Q> const Color(rgb * static_cast(1.0 / 6.0)); - T Alpha = clamp(max(max(Color.x, Color.y), max(Color.z, static_cast(1e-6))), static_cast(0), static_cast(1)); - Alpha = ceil(Alpha * static_cast(255.0)) / static_cast(255.0); - return vec<4, T, Q>(Color / Alpha, Alpha); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm) - { - return vec<3, T, Q>(rgbm.x, rgbm.y, rgbm.z) * rgbm.w * static_cast(6); - } - - template - GLM_FUNC_QUALIFIER vec packHalf(vec const& v) - { - return detail::compute_half::pack(v); - } - - template - GLM_FUNC_QUALIFIER vec unpackHalf(vec const& v) - { - return detail::compute_half::unpack(v); - } - - template - GLM_FUNC_QUALIFIER vec packUnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(round(clamp(v, static_cast(0), static_cast(1)) * static_cast(std::numeric_limits::max()))); - } - - template - GLM_FUNC_QUALIFIER vec unpackUnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())); - } - - template - GLM_FUNC_QUALIFIER vec packSnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(round(clamp(v , static_cast(-1), static_cast(1)) * static_cast(std::numeric_limits::max()))); - } - - template - GLM_FUNC_QUALIFIER vec unpackSnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return clamp(vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())), static_cast(-1), static_cast(1)); - } - - GLM_FUNC_QUALIFIER uint8 packUnorm2x4(vec2 const& v) - { - u32vec2 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); - detail::u4u4 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x4(uint8 v) - { - float const ScaleFactor(1.f / 15.f); - detail::u4u4 Unpack; - Unpack.pack = v; - return vec2(Unpack.data.x, Unpack.data.y) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm4x4(vec4 const& v) - { - u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); - detail::u4u4u4u4 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x4(uint16 v) - { - float const ScaleFactor(1.f / 15.f); - detail::u4u4u4u4 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm1x5_1x6_1x5(vec3 const& v) - { - u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(31.f, 63.f, 31.f))); - detail::u5u6u5 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackUnorm1x5_1x6_1x5(uint16 v) - { - vec3 const ScaleFactor(1.f / 31.f, 1.f / 63.f, 1.f / 31.f); - detail::u5u6u5 Unpack; - Unpack.pack = v; - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm3x5_1x1(vec4 const& v) - { - u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(31.f, 31.f, 31.f, 1.f))); - detail::u5u5u5u1 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm3x5_1x1(uint16 v) - { - vec4 const ScaleFactor(1.f / 31.f, 1.f / 31.f, 1.f / 31.f, 1.f); - detail::u5u5u5u1 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint8 packUnorm2x3_1x2(vec3 const& v) - { - u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(7.f, 7.f, 3.f))); - detail::u3u3u2 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackUnorm2x3_1x2(uint8 v) - { - vec3 const ScaleFactor(1.f / 7.f, 1.f / 7.f, 1.f / 3.f); - detail::u3u3u2 Unpack; - Unpack.pack = v; - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER int16 packInt2x8(i8vec2 const& v) - { - int16 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i8vec2 unpackInt2x8(int16 p) - { - i8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint16 packUint2x8(u8vec2 const& v) - { - uint16 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u8vec2 unpackUint2x8(uint16 p) - { - u8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int32 packInt4x8(i8vec4 const& v) - { - int32 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i8vec4 unpackInt4x8(int32 p) - { - i8vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint32 packUint4x8(u8vec4 const& v) - { - uint32 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u8vec4 unpackUint4x8(uint32 p) - { - u8vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int packInt2x16(i16vec2 const& v) - { - int Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i16vec2 unpackInt2x16(int p) - { - i16vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int64 packInt4x16(i16vec4 const& v) - { - int64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i16vec4 unpackInt4x16(int64 p) - { - i16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint packUint2x16(u16vec2 const& v) - { - uint Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u16vec2 unpackUint2x16(uint p) - { - u16vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint64 packUint4x16(u16vec4 const& v) - { - uint64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u16vec4 unpackUint4x16(uint64 p) - { - u16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int64 packInt2x32(i32vec2 const& v) - { - int64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i32vec2 unpackInt2x32(int64 p) - { - i32vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint64 packUint2x32(u32vec2 const& v) - { - uint64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u32vec2 unpackUint2x32(uint64 p) - { - u32vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } -}//namespace glm - diff --git a/external/glm/glm/gtc/quaternion.hpp b/external/glm/glm/gtc/quaternion.hpp deleted file mode 100644 index 359e072b..00000000 --- a/external/glm/glm/gtc/quaternion.hpp +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref gtc_quaternion -/// @file glm/gtc/quaternion.hpp -/// -/// @see core (dependence) -/// @see gtc_constants (dependence) -/// -/// @defgroup gtc_quaternion GLM_GTC_quaternion -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines a templated quaternion type and several quaternion operations. - -#pragma once - -// Dependency: -#include "../gtc/constants.hpp" -#include "../gtc/matrix_transform.hpp" -#include "../ext/vector_relational.hpp" -#include "../ext/quaternion_common.hpp" -#include "../ext/quaternion_float.hpp" -#include "../ext/quaternion_float_precision.hpp" -#include "../ext/quaternion_double.hpp" -#include "../ext/quaternion_double_precision.hpp" -#include "../ext/quaternion_relational.hpp" -#include "../ext/quaternion_geometric.hpp" -#include "../ext/quaternion_trigonometric.hpp" -#include "../ext/quaternion_transform.hpp" -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat4x4.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_quaternion extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_quaternion - /// @{ - - /// Returns euler angles, pitch as x, yaw as y, roll as z. - /// The result is expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> eulerAngles(qua const& x); - - /// Returns roll value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T roll(qua const& x); - - /// Returns pitch value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T pitch(qua const& x); - - /// Returns yaw value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T yaw(qua const& x); - - /// Converts a quaternion to a 3 * 3 matrix. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL mat<3, 3, T, Q> mat3_cast(qua const& x); - - /// Converts a quaternion to a 4 * 4 matrix. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL mat<4, 4, T, Q> mat4_cast(qua const& x); - - /// Converts a pure rotation 3 * 3 matrix to a quaternion. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL qua quat_cast(mat<3, 3, T, Q> const& x); - - /// Converts a pure rotation 4 * 4 matrix to a quaternion. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL qua quat_cast(mat<4, 4, T, Q> const& x); - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> lessThan(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> greaterThan(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y); - - /// Build a look at quaternion based on the default handedness. - /// - /// @param direction Desired forward direction. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAt( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - - /// Build a right-handed look at quaternion. - /// - /// @param direction Desired forward direction onto which the -z-axis gets mapped. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAtRH( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - - /// Build a left-handed look at quaternion. - /// - /// @param direction Desired forward direction onto which the +z-axis gets mapped. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAtLH( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - /// @} -} //namespace glm - -#include "quaternion.inl" diff --git a/external/glm/glm/gtc/quaternion.inl b/external/glm/glm/gtc/quaternion.inl deleted file mode 100644 index 06f9f020..00000000 --- a/external/glm/glm/gtc/quaternion.inl +++ /dev/null @@ -1,202 +0,0 @@ -#include "../trigonometric.hpp" -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "epsilon.hpp" -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> eulerAngles(qua const& x) - { - return vec<3, T, Q>(pitch(x), yaw(x), roll(x)); - } - - template - GLM_FUNC_QUALIFIER T roll(qua const& q) - { - return static_cast(atan(static_cast(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z)); - } - - template - GLM_FUNC_QUALIFIER T pitch(qua const& q) - { - //return T(atan(T(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z)); - T const y = static_cast(2) * (q.y * q.z + q.w * q.x); - T const x = q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z; - - if(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon()))) //avoid atan2(0,0) - handle singularity - Matiis - return static_cast(static_cast(2) * atan(q.x, q.w)); - - return static_cast(atan(y, x)); - } - - template - GLM_FUNC_QUALIFIER T yaw(qua const& q) - { - return asin(clamp(static_cast(-2) * (q.x * q.z - q.w * q.y), static_cast(-1), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat3_cast(qua const& q) - { - mat<3, 3, T, Q> Result(T(1)); - T qxx(q.x * q.x); - T qyy(q.y * q.y); - T qzz(q.z * q.z); - T qxz(q.x * q.z); - T qxy(q.x * q.y); - T qyz(q.y * q.z); - T qwx(q.w * q.x); - T qwy(q.w * q.y); - T qwz(q.w * q.z); - - Result[0][0] = T(1) - T(2) * (qyy + qzz); - Result[0][1] = T(2) * (qxy + qwz); - Result[0][2] = T(2) * (qxz - qwy); - - Result[1][0] = T(2) * (qxy - qwz); - Result[1][1] = T(1) - T(2) * (qxx + qzz); - Result[1][2] = T(2) * (qyz + qwx); - - Result[2][0] = T(2) * (qxz + qwy); - Result[2][1] = T(2) * (qyz - qwx); - Result[2][2] = T(1) - T(2) * (qxx + qyy); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat4_cast(qua const& q) - { - return mat<4, 4, T, Q>(mat3_cast(q)); - } - - template - GLM_FUNC_QUALIFIER qua quat_cast(mat<3, 3, T, Q> const& m) - { - T fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2]; - T fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2]; - T fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1]; - T fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2]; - - int biggestIndex = 0; - T fourBiggestSquaredMinus1 = fourWSquaredMinus1; - if(fourXSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourXSquaredMinus1; - biggestIndex = 1; - } - if(fourYSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourYSquaredMinus1; - biggestIndex = 2; - } - if(fourZSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourZSquaredMinus1; - biggestIndex = 3; - } - - T biggestVal = sqrt(fourBiggestSquaredMinus1 + static_cast(1)) * static_cast(0.5); - T mult = static_cast(0.25) / biggestVal; - - switch(biggestIndex) - { - case 0: - return qua(biggestVal, (m[1][2] - m[2][1]) * mult, (m[2][0] - m[0][2]) * mult, (m[0][1] - m[1][0]) * mult); - case 1: - return qua((m[1][2] - m[2][1]) * mult, biggestVal, (m[0][1] + m[1][0]) * mult, (m[2][0] + m[0][2]) * mult); - case 2: - return qua((m[2][0] - m[0][2]) * mult, (m[0][1] + m[1][0]) * mult, biggestVal, (m[1][2] + m[2][1]) * mult); - case 3: - return qua((m[0][1] - m[1][0]) * mult, (m[2][0] + m[0][2]) * mult, (m[1][2] + m[2][1]) * mult, biggestVal); - default: // Silence a -Wswitch-default warning in GCC. Should never actually get here. Assert is just for sanity. - assert(false); - return qua(1, 0, 0, 0); - } - } - - template - GLM_FUNC_QUALIFIER qua quat_cast(mat<4, 4, T, Q> const& m4) - { - return quat_cast(mat<3, 3, T, Q>(m4)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThan(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] < y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] <= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThan(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] > y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] >= y[i]; - return Result; - } - - - template - GLM_FUNC_QUALIFIER qua quatLookAt(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return quatLookAtLH(direction, up); -# else - return quatLookAtRH(direction, up); -# endif - } - - template - GLM_FUNC_QUALIFIER qua quatLookAtRH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { - mat<3, 3, T, Q> Result; - - Result[2] = -direction; - vec<3, T, Q> const& Right = cross(up, Result[2]); - Result[0] = Right * inversesqrt(max(static_cast(0.00001), dot(Right, Right))); - Result[1] = cross(Result[2], Result[0]); - - return quat_cast(Result); - } - - template - GLM_FUNC_QUALIFIER qua quatLookAtLH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { - mat<3, 3, T, Q> Result; - - Result[2] = direction; - vec<3, T, Q> const& Right = cross(up, Result[2]); - Result[0] = Right * inversesqrt(max(static_cast(0.00001), dot(Right, Right))); - Result[1] = cross(Result[2], Result[0]); - - return quat_cast(Result); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "quaternion_simd.inl" -#endif - diff --git a/external/glm/glm/gtc/quaternion_simd.inl b/external/glm/glm/gtc/quaternion_simd.inl deleted file mode 100644 index e69de29b..00000000 diff --git a/external/glm/glm/gtc/random.hpp b/external/glm/glm/gtc/random.hpp deleted file mode 100644 index 9a859580..00000000 --- a/external/glm/glm/gtc/random.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/// @ref gtc_random -/// @file glm/gtc/random.hpp -/// -/// @see core (dependence) -/// @see gtx_random (extended) -/// -/// @defgroup gtc_random GLM_GTC_random -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Generate random number from various distribution methods. - -#pragma once - -// Dependency: -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_random extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_random - /// @{ - - /// Generate random numbers in the interval [Min, Max], according a linear distribution - /// - /// @param Min Minimum value included in the sampling - /// @param Max Maximum value included in the sampling - /// @tparam genType Value type. Currently supported: float or double scalars. - /// @see gtc_random - template - GLM_FUNC_DECL genType linearRand(genType Min, genType Max); - - /// Generate random numbers in the interval [Min, Max], according a linear distribution - /// - /// @param Min Minimum value included in the sampling - /// @param Max Maximum value included in the sampling - /// @tparam T Value type. Currently supported: float or double. - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec linearRand(vec const& Min, vec const& Max); - - /// Generate random numbers in the interval [Min, Max], according a gaussian distribution - /// - /// @see gtc_random - template - GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation); - - /// Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<2, T, defaultp> circularRand(T Radius); - - /// Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<3, T, defaultp> sphericalRand(T Radius); - - /// Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<2, T, defaultp> diskRand(T Radius); - - /// Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<3, T, defaultp> ballRand(T Radius); - - /// @} -}//namespace glm - -#include "random.inl" diff --git a/external/glm/glm/gtc/random.inl b/external/glm/glm/gtc/random.inl deleted file mode 100644 index 70485098..00000000 --- a/external/glm/glm/gtc/random.inl +++ /dev/null @@ -1,303 +0,0 @@ -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "../trigonometric.hpp" -#include "../detail/type_vec1.hpp" -#include -#include -#include -#include - -namespace glm{ -namespace detail -{ - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call(); - }; - - template - struct compute_rand<1, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<1, uint8, P> call() - { - return vec<1, uint8, P>( - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<2, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<2, uint8, P> call() - { - return vec<2, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<3, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<3, uint8, P> call() - { - return vec<3, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<4, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<4, uint8, P> call() - { - return vec<4, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(8)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(16)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(32)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max); - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER genType linearRand(genType Min, genType Max) - { - return detail::compute_linearRand<1, genType, highp>::call( - vec<1, genType, highp>(Min), - vec<1, genType, highp>(Max)).x; - } - - template - GLM_FUNC_QUALIFIER vec linearRand(vec const& Min, vec const& Max) - { - return detail::compute_linearRand::call(Min, Max); - } - - template - GLM_FUNC_QUALIFIER genType gaussRand(genType Mean, genType Deviation) - { - genType w, x1, x2; - - do - { - x1 = linearRand(genType(-1), genType(1)); - x2 = linearRand(genType(-1), genType(1)); - - w = x1 * x1 + x2 * x2; - } while(w > genType(1)); - - return static_cast(x2 * Deviation * Deviation * sqrt((genType(-2) * log(w)) / w) + Mean); - } - - template - GLM_FUNC_QUALIFIER vec gaussRand(vec const& Mean, vec const& Deviation) - { - return detail::functor2::call(gaussRand, Mean, Deviation); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> diskRand(T Radius) - { - assert(Radius > static_cast(0)); - - vec<2, T, defaultp> Result(T(0)); - T LenRadius(T(0)); - - do - { - Result = linearRand( - vec<2, T, defaultp>(-Radius), - vec<2, T, defaultp>(Radius)); - LenRadius = length(Result); - } - while(LenRadius > Radius); - - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> ballRand(T Radius) - { - assert(Radius > static_cast(0)); - - vec<3, T, defaultp> Result(T(0)); - T LenRadius(T(0)); - - do - { - Result = linearRand( - vec<3, T, defaultp>(-Radius), - vec<3, T, defaultp>(Radius)); - LenRadius = length(Result); - } - while(LenRadius > Radius); - - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> circularRand(T Radius) - { - assert(Radius > static_cast(0)); - - T a = linearRand(T(0), static_cast(6.283185307179586476925286766559)); - return vec<2, T, defaultp>(glm::cos(a), glm::sin(a)) * Radius; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> sphericalRand(T Radius) - { - assert(Radius > static_cast(0)); - - T theta = linearRand(T(0), T(6.283185307179586476925286766559f)); - T phi = std::acos(linearRand(T(-1.0f), T(1.0f))); - - T x = std::sin(phi) * std::cos(theta); - T y = std::sin(phi) * std::sin(theta); - T z = std::cos(phi); - - return vec<3, T, defaultp>(x, y, z) * Radius; - } -}//namespace glm diff --git a/external/glm/glm/gtc/reciprocal.hpp b/external/glm/glm/gtc/reciprocal.hpp deleted file mode 100644 index c7d13303..00000000 --- a/external/glm/glm/gtc/reciprocal.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/// @ref gtc_reciprocal -/// @file glm/gtc/reciprocal.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_reciprocal GLM_GTC_reciprocal -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Define secant, cosecant and cotangent functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_reciprocal extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_reciprocal - /// @{ - - /// Secant function. - /// hypotenuse / adjacent or 1 / cos(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType sec(genType angle); - - /// Cosecant function. - /// hypotenuse / opposite or 1 / sin(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType csc(genType angle); - - /// Cotangent function. - /// adjacent / opposite or 1 / tan(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType cot(genType angle); - - /// Inverse secant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType asec(genType x); - - /// Inverse cosecant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acsc(genType x); - - /// Inverse cotangent function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acot(genType x); - - /// Secant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType sech(genType angle); - - /// Cosecant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType csch(genType angle); - - /// Cotangent hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType coth(genType angle); - - /// Inverse secant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType asech(genType x); - - /// Inverse cosecant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acsch(genType x); - - /// Inverse cotangent hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acoth(genType x); - - /// @} -}//namespace glm - -#include "reciprocal.inl" diff --git a/external/glm/glm/gtc/reciprocal.inl b/external/glm/glm/gtc/reciprocal.inl deleted file mode 100644 index d88729e8..00000000 --- a/external/glm/glm/gtc/reciprocal.inl +++ /dev/null @@ -1,191 +0,0 @@ -/// @ref gtc_reciprocal - -#include "../trigonometric.hpp" -#include - -namespace glm -{ - // sec - template - GLM_FUNC_QUALIFIER genType sec(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point values"); - return genType(1) / glm::cos(angle); - } - - template - GLM_FUNC_QUALIFIER vec sec(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point inputs"); - return detail::functor1::call(sec, x); - } - - // csc - template - GLM_FUNC_QUALIFIER genType csc(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point values"); - return genType(1) / glm::sin(angle); - } - - template - GLM_FUNC_QUALIFIER vec csc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point inputs"); - return detail::functor1::call(csc, x); - } - - // cot - template - GLM_FUNC_QUALIFIER genType cot(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point values"); - - genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); - return glm::tan(pi_over_2 - angle); - } - - template - GLM_FUNC_QUALIFIER vec cot(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point inputs"); - return detail::functor1::call(cot, x); - } - - // asec - template - GLM_FUNC_QUALIFIER genType asec(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point values"); - return acos(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec asec(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point inputs"); - return detail::functor1::call(asec, x); - } - - // acsc - template - GLM_FUNC_QUALIFIER genType acsc(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point values"); - return asin(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec acsc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point inputs"); - return detail::functor1::call(acsc, x); - } - - // acot - template - GLM_FUNC_QUALIFIER genType acot(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point values"); - - genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); - return pi_over_2 - atan(x); - } - - template - GLM_FUNC_QUALIFIER vec acot(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point inputs"); - return detail::functor1::call(acot, x); - } - - // sech - template - GLM_FUNC_QUALIFIER genType sech(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point values"); - return genType(1) / glm::cosh(angle); - } - - template - GLM_FUNC_QUALIFIER vec sech(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point inputs"); - return detail::functor1::call(sech, x); - } - - // csch - template - GLM_FUNC_QUALIFIER genType csch(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point values"); - return genType(1) / glm::sinh(angle); - } - - template - GLM_FUNC_QUALIFIER vec csch(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point inputs"); - return detail::functor1::call(csch, x); - } - - // coth - template - GLM_FUNC_QUALIFIER genType coth(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point values"); - return glm::cosh(angle) / glm::sinh(angle); - } - - template - GLM_FUNC_QUALIFIER vec coth(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point inputs"); - return detail::functor1::call(coth, x); - } - - // asech - template - GLM_FUNC_QUALIFIER genType asech(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point values"); - return acosh(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec asech(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point inputs"); - return detail::functor1::call(asech, x); - } - - // acsch - template - GLM_FUNC_QUALIFIER genType acsch(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point values"); - return asinh(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec acsch(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point inputs"); - return detail::functor1::call(acsch, x); - } - - // acoth - template - GLM_FUNC_QUALIFIER genType acoth(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point values"); - return atanh(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec acoth(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point inputs"); - return detail::functor1::call(acoth, x); - } -}//namespace glm diff --git a/external/glm/glm/gtc/round.hpp b/external/glm/glm/gtc/round.hpp deleted file mode 100644 index 56edbbca..00000000 --- a/external/glm/glm/gtc/round.hpp +++ /dev/null @@ -1,160 +0,0 @@ -/// @ref gtc_round -/// @file glm/gtc/round.hpp -/// -/// @see core (dependence) -/// @see gtc_round (dependence) -/// -/// @defgroup gtc_round GLM_GTC_round -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Rounding value to specific boundings - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_round extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_round - /// @{ - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec ceilPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec floorPowerOfTwo(vec const& v); - - /// Return the power of two number which value is the closet to the input value. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType v); - - /// Return the power of two number which value is the closet to the input value. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec roundPowerOfTwo(vec const& v); - - /// Higher multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType ceilMultiple(genType v, genType Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec ceilMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType floorMultiple(genType v, genType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec floorMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType roundMultiple(genType v, genType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec roundMultiple(vec const& v, vec const& Multiple); - - /// @} -} //namespace glm - -#include "round.inl" diff --git a/external/glm/glm/gtc/round.inl b/external/glm/glm/gtc/round.inl deleted file mode 100644 index 48411e41..00000000 --- a/external/glm/glm/gtc/round.inl +++ /dev/null @@ -1,155 +0,0 @@ -/// @ref gtc_round - -#include "../integer.hpp" -#include "../ext/vector_integer.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_roundMultiple {}; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - std::fmod(Source, Multiple); - else - { - genType Tmp = Source + genType(1); - return Tmp - std::fmod(Tmp, Multiple) - Multiple; - } - } - }; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; -}//namespace detail - - ////////////////// - // ceilPowerOfTwo - - template - GLM_FUNC_QUALIFIER genType ceilPowerOfTwo(genType value) - { - return detail::compute_ceilPowerOfTwo<1, genType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genType, defaultp>(value)).x; - } - - template - GLM_FUNC_QUALIFIER vec ceilPowerOfTwo(vec const& v) - { - return detail::compute_ceilPowerOfTwo::is_signed>::call(v); - } - - /////////////////// - // floorPowerOfTwo - - template - GLM_FUNC_QUALIFIER genType floorPowerOfTwo(genType value) - { - return isPowerOfTwo(value) ? value : static_cast(1) << findMSB(value); - } - - template - GLM_FUNC_QUALIFIER vec floorPowerOfTwo(vec const& v) - { - return detail::functor1::call(floorPowerOfTwo, v); - } - - /////////////////// - // roundPowerOfTwo - - template - GLM_FUNC_QUALIFIER genIUType roundPowerOfTwo(genIUType value) - { - if(isPowerOfTwo(value)) - return value; - - genIUType const prev = static_cast(1) << findMSB(value); - genIUType const next = prev << static_cast(1); - return (next - value) < (value - prev) ? next : prev; - } - - template - GLM_FUNC_QUALIFIER vec roundPowerOfTwo(vec const& v) - { - return detail::functor1::call(roundPowerOfTwo, v); - } - - ////////////////////// - // ceilMultiple - - template - GLM_FUNC_QUALIFIER genType ceilMultiple(genType Source, genType Multiple) - { - return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec ceilMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(ceilMultiple, Source, Multiple); - } - - ////////////////////// - // floorMultiple - - template - GLM_FUNC_QUALIFIER genType floorMultiple(genType Source, genType Multiple) - { - return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec floorMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(floorMultiple, Source, Multiple); - } - - ////////////////////// - // roundMultiple - - template - GLM_FUNC_QUALIFIER genType roundMultiple(genType Source, genType Multiple) - { - return detail::compute_roundMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec roundMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(roundMultiple, Source, Multiple); - } -}//namespace glm diff --git a/external/glm/glm/gtc/type_aligned.hpp b/external/glm/glm/gtc/type_aligned.hpp deleted file mode 100644 index 5403abf6..00000000 --- a/external/glm/glm/gtc/type_aligned.hpp +++ /dev/null @@ -1,1315 +0,0 @@ -/// @ref gtc_type_aligned -/// @file glm/gtc/type_aligned.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_type_aligned GLM_GTC_type_aligned -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Aligned types allowing SIMD optimizations of vectors and matrices types - -#pragma once - -#if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) -# error "GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types." -#endif - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_aligned extension included") -#endif - -#include "../mat4x4.hpp" -#include "../mat4x3.hpp" -#include "../mat4x2.hpp" -#include "../mat3x4.hpp" -#include "../mat3x3.hpp" -#include "../mat3x2.hpp" -#include "../mat2x4.hpp" -#include "../mat2x3.hpp" -#include "../mat2x2.hpp" -#include "../gtc/vec1.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" - -namespace glm -{ - /// @addtogroup gtc_type_aligned - /// @{ - - // -- *vec1 -- - - /// 1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_highp> aligned_highp_vec1; - - /// 1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_mediump> aligned_mediump_vec1; - - /// 1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_lowp> aligned_lowp_vec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_highp> aligned_highp_dvec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_mediump> aligned_mediump_dvec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_lowp> aligned_lowp_dvec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_highp> aligned_highp_ivec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_mediump> aligned_mediump_ivec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_lowp> aligned_lowp_ivec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_highp> aligned_highp_uvec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_mediump> aligned_mediump_uvec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_lowp> aligned_lowp_uvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_highp> aligned_highp_bvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_mediump> aligned_mediump_bvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_lowp> aligned_lowp_bvec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, packed_highp> packed_highp_vec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, packed_mediump> packed_mediump_vec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, packed_lowp> packed_lowp_vec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, packed_highp> packed_highp_dvec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, packed_mediump> packed_mediump_dvec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, packed_lowp> packed_lowp_dvec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_highp> packed_highp_ivec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_mediump> packed_mediump_ivec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_lowp> packed_lowp_ivec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_highp> packed_highp_uvec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_mediump> packed_mediump_uvec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_lowp> packed_lowp_uvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_highp> packed_highp_bvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_mediump> packed_mediump_bvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_lowp> packed_lowp_bvec1; - - // -- *vec2 -- - - /// 2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_highp> aligned_highp_vec2; - - /// 2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_mediump> aligned_mediump_vec2; - - /// 2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_lowp> aligned_lowp_vec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_highp> aligned_highp_dvec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_mediump> aligned_mediump_dvec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_lowp> aligned_lowp_dvec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_highp> aligned_highp_ivec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_mediump> aligned_mediump_ivec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_lowp> aligned_lowp_ivec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_highp> aligned_highp_uvec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_mediump> aligned_mediump_uvec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_lowp> aligned_lowp_uvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_highp> aligned_highp_bvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_mediump> aligned_mediump_bvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_lowp> aligned_lowp_bvec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, float, packed_highp> packed_highp_vec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, float, packed_mediump> packed_mediump_vec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, float, packed_lowp> packed_lowp_vec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, double, packed_highp> packed_highp_dvec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, double, packed_mediump> packed_mediump_dvec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, double, packed_lowp> packed_lowp_dvec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_highp> packed_highp_ivec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_mediump> packed_mediump_ivec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_lowp> packed_lowp_ivec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_highp> packed_highp_uvec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_mediump> packed_mediump_uvec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_lowp> packed_lowp_uvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_highp> packed_highp_bvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_mediump> packed_mediump_bvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_lowp> packed_lowp_bvec2; - - // -- *vec3 -- - - /// 3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_highp> aligned_highp_vec3; - - /// 3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_mediump> aligned_mediump_vec3; - - /// 3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_lowp> aligned_lowp_vec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_highp> aligned_highp_dvec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_mediump> aligned_mediump_dvec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_lowp> aligned_lowp_dvec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_highp> aligned_highp_ivec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_mediump> aligned_mediump_ivec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_lowp> aligned_lowp_ivec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_highp> aligned_highp_uvec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_mediump> aligned_mediump_uvec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_lowp> aligned_lowp_uvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_highp> aligned_highp_bvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_mediump> aligned_mediump_bvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_lowp> aligned_lowp_bvec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, float, packed_highp> packed_highp_vec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, float, packed_mediump> packed_mediump_vec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, float, packed_lowp> packed_lowp_vec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, double, packed_highp> packed_highp_dvec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, double, packed_mediump> packed_mediump_dvec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, double, packed_lowp> packed_lowp_dvec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_highp> packed_highp_ivec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_mediump> packed_mediump_ivec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_lowp> packed_lowp_ivec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_highp> packed_highp_uvec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_mediump> packed_mediump_uvec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_lowp> packed_lowp_uvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_highp> packed_highp_bvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_mediump> packed_mediump_bvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_lowp> packed_lowp_bvec3; - - // -- *vec4 -- - - /// 4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_highp> aligned_highp_vec4; - - /// 4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_mediump> aligned_mediump_vec4; - - /// 4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_lowp> aligned_lowp_vec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_highp> aligned_highp_dvec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_mediump> aligned_mediump_dvec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_lowp> aligned_lowp_dvec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_highp> aligned_highp_ivec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_mediump> aligned_mediump_ivec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_lowp> aligned_lowp_ivec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_highp> aligned_highp_uvec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_mediump> aligned_mediump_uvec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_lowp> aligned_lowp_uvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_highp> aligned_highp_bvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_mediump> aligned_mediump_bvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_lowp> aligned_lowp_bvec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, float, packed_highp> packed_highp_vec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, float, packed_mediump> packed_mediump_vec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, float, packed_lowp> packed_lowp_vec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, double, packed_highp> packed_highp_dvec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, double, packed_mediump> packed_mediump_dvec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, double, packed_lowp> packed_lowp_dvec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_highp> packed_highp_ivec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_mediump> packed_mediump_ivec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_lowp> packed_lowp_ivec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_highp> packed_highp_uvec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_mediump> packed_mediump_uvec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_lowp> packed_lowp_uvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_highp> packed_highp_bvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_mediump> packed_mediump_bvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_lowp> packed_lowp_bvec4; - - // -- *mat2 -- - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_highp> packed_highp_mat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_highp> packed_highp_dmat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2; - - // -- *mat3 -- - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_highp> packed_highp_mat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_highp> packed_highp_dmat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3; - - // -- *mat4 -- - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_highp> packed_highp_mat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_highp> packed_highp_dmat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4; - - // -- *mat2x2 -- - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2x2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2x2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_highp> packed_highp_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_highp> packed_highp_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2x2; - - // -- *mat2x3 -- - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_highp> aligned_highp_mat2x3; - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_mediump> aligned_mediump_mat2x3; - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_lowp> aligned_lowp_mat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_highp> aligned_highp_dmat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_mediump> aligned_mediump_dmat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_lowp> aligned_lowp_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_highp> packed_highp_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_mediump> packed_mediump_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_lowp> packed_lowp_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_highp> packed_highp_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_mediump> packed_mediump_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_lowp> packed_lowp_dmat2x3; - - // -- *mat2x4 -- - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_highp> aligned_highp_mat2x4; - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_mediump> aligned_mediump_mat2x4; - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_lowp> aligned_lowp_mat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_highp> aligned_highp_dmat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_mediump> aligned_mediump_dmat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_lowp> aligned_lowp_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_highp> packed_highp_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_mediump> packed_mediump_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_lowp> packed_lowp_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_highp> packed_highp_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_mediump> packed_mediump_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_lowp> packed_lowp_dmat2x4; - - // -- *mat3x2 -- - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_highp> aligned_highp_mat3x2; - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_mediump> aligned_mediump_mat3x2; - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_lowp> aligned_lowp_mat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_highp> aligned_highp_dmat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_mediump> aligned_mediump_dmat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_lowp> aligned_lowp_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_highp> packed_highp_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_mediump> packed_mediump_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_lowp> packed_lowp_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_highp> packed_highp_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_mediump> packed_mediump_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_lowp> packed_lowp_dmat3x2; - - // -- *mat3x3 -- - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3x3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3x3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_highp> packed_highp_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_highp> packed_highp_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3x3; - - // -- *mat3x4 -- - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_highp> aligned_highp_mat3x4; - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_mediump> aligned_mediump_mat3x4; - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_lowp> aligned_lowp_mat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_highp> aligned_highp_dmat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_mediump> aligned_mediump_dmat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_lowp> aligned_lowp_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_highp> packed_highp_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_mediump> packed_mediump_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_lowp> packed_lowp_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_highp> packed_highp_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_mediump> packed_mediump_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_lowp> packed_lowp_dmat3x4; - - // -- *mat4x2 -- - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_highp> aligned_highp_mat4x2; - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_mediump> aligned_mediump_mat4x2; - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_lowp> aligned_lowp_mat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_highp> aligned_highp_dmat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_mediump> aligned_mediump_dmat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_lowp> aligned_lowp_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_highp> packed_highp_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_mediump> packed_mediump_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_lowp> packed_lowp_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_highp> packed_highp_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_mediump> packed_mediump_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_lowp> packed_lowp_dmat4x2; - - // -- *mat4x3 -- - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_highp> aligned_highp_mat4x3; - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_mediump> aligned_mediump_mat4x3; - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_lowp> aligned_lowp_mat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_highp> aligned_highp_dmat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_mediump> aligned_mediump_dmat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_lowp> aligned_lowp_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_highp> packed_highp_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_mediump> packed_mediump_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_lowp> packed_lowp_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_highp> packed_highp_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_mediump> packed_mediump_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_lowp> packed_lowp_dmat4x3; - - // -- *mat4x4 -- - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4x4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4x4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_highp> packed_highp_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_highp> packed_highp_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4x4; - - // -- default -- - -#if(defined(GLM_PRECISION_LOWP_FLOAT)) - typedef aligned_lowp_vec1 aligned_vec1; - typedef aligned_lowp_vec2 aligned_vec2; - typedef aligned_lowp_vec3 aligned_vec3; - typedef aligned_lowp_vec4 aligned_vec4; - typedef packed_lowp_vec1 packed_vec1; - typedef packed_lowp_vec2 packed_vec2; - typedef packed_lowp_vec3 packed_vec3; - typedef packed_lowp_vec4 packed_vec4; - - typedef aligned_lowp_mat2 aligned_mat2; - typedef aligned_lowp_mat3 aligned_mat3; - typedef aligned_lowp_mat4 aligned_mat4; - typedef packed_lowp_mat2 packed_mat2; - typedef packed_lowp_mat3 packed_mat3; - typedef packed_lowp_mat4 packed_mat4; - - typedef aligned_lowp_mat2x2 aligned_mat2x2; - typedef aligned_lowp_mat2x3 aligned_mat2x3; - typedef aligned_lowp_mat2x4 aligned_mat2x4; - typedef aligned_lowp_mat3x2 aligned_mat3x2; - typedef aligned_lowp_mat3x3 aligned_mat3x3; - typedef aligned_lowp_mat3x4 aligned_mat3x4; - typedef aligned_lowp_mat4x2 aligned_mat4x2; - typedef aligned_lowp_mat4x3 aligned_mat4x3; - typedef aligned_lowp_mat4x4 aligned_mat4x4; - typedef packed_lowp_mat2x2 packed_mat2x2; - typedef packed_lowp_mat2x3 packed_mat2x3; - typedef packed_lowp_mat2x4 packed_mat2x4; - typedef packed_lowp_mat3x2 packed_mat3x2; - typedef packed_lowp_mat3x3 packed_mat3x3; - typedef packed_lowp_mat3x4 packed_mat3x4; - typedef packed_lowp_mat4x2 packed_mat4x2; - typedef packed_lowp_mat4x3 packed_mat4x3; - typedef packed_lowp_mat4x4 packed_mat4x4; -#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) - typedef aligned_mediump_vec1 aligned_vec1; - typedef aligned_mediump_vec2 aligned_vec2; - typedef aligned_mediump_vec3 aligned_vec3; - typedef aligned_mediump_vec4 aligned_vec4; - typedef packed_mediump_vec1 packed_vec1; - typedef packed_mediump_vec2 packed_vec2; - typedef packed_mediump_vec3 packed_vec3; - typedef packed_mediump_vec4 packed_vec4; - - typedef aligned_mediump_mat2 aligned_mat2; - typedef aligned_mediump_mat3 aligned_mat3; - typedef aligned_mediump_mat4 aligned_mat4; - typedef packed_mediump_mat2 packed_mat2; - typedef packed_mediump_mat3 packed_mat3; - typedef packed_mediump_mat4 packed_mat4; - - typedef aligned_mediump_mat2x2 aligned_mat2x2; - typedef aligned_mediump_mat2x3 aligned_mat2x3; - typedef aligned_mediump_mat2x4 aligned_mat2x4; - typedef aligned_mediump_mat3x2 aligned_mat3x2; - typedef aligned_mediump_mat3x3 aligned_mat3x3; - typedef aligned_mediump_mat3x4 aligned_mat3x4; - typedef aligned_mediump_mat4x2 aligned_mat4x2; - typedef aligned_mediump_mat4x3 aligned_mat4x3; - typedef aligned_mediump_mat4x4 aligned_mat4x4; - typedef packed_mediump_mat2x2 packed_mat2x2; - typedef packed_mediump_mat2x3 packed_mat2x3; - typedef packed_mediump_mat2x4 packed_mat2x4; - typedef packed_mediump_mat3x2 packed_mat3x2; - typedef packed_mediump_mat3x3 packed_mat3x3; - typedef packed_mediump_mat3x4 packed_mat3x4; - typedef packed_mediump_mat4x2 packed_mat4x2; - typedef packed_mediump_mat4x3 packed_mat4x3; - typedef packed_mediump_mat4x4 packed_mat4x4; -#else //defined(GLM_PRECISION_HIGHP_FLOAT) - /// 1 component vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec1 aligned_vec1; - - /// 2 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec2 aligned_vec2; - - /// 3 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec3 aligned_vec3; - - /// 4 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec4 aligned_vec4; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec1 packed_vec1; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec2 packed_vec2; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec3 packed_vec3; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec4 packed_vec4; - - /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2 aligned_mat2; - - /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3 aligned_mat3; - - /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4 aligned_mat4; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2 packed_mat2; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3 packed_mat3; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4 packed_mat4; - - /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x2 aligned_mat2x2; - - /// 2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x3 aligned_mat2x3; - - /// 2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x4 aligned_mat2x4; - - /// 3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x2 aligned_mat3x2; - - /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x3 aligned_mat3x3; - - /// 3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x4 aligned_mat3x4; - - /// 4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x2 aligned_mat4x2; - - /// 4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x3 aligned_mat4x3; - - /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x4 aligned_mat4x4; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x2 packed_mat2x2; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x3 packed_mat2x3; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x4 packed_mat2x4; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x2 packed_mat3x2; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x3 packed_mat3x3; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x4 packed_mat3x4; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x2 packed_mat4x2; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x3 packed_mat4x3; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x4 packed_mat4x4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef aligned_lowp_dvec1 aligned_dvec1; - typedef aligned_lowp_dvec2 aligned_dvec2; - typedef aligned_lowp_dvec3 aligned_dvec3; - typedef aligned_lowp_dvec4 aligned_dvec4; - typedef packed_lowp_dvec1 packed_dvec1; - typedef packed_lowp_dvec2 packed_dvec2; - typedef packed_lowp_dvec3 packed_dvec3; - typedef packed_lowp_dvec4 packed_dvec4; - - typedef aligned_lowp_dmat2 aligned_dmat2; - typedef aligned_lowp_dmat3 aligned_dmat3; - typedef aligned_lowp_dmat4 aligned_dmat4; - typedef packed_lowp_dmat2 packed_dmat2; - typedef packed_lowp_dmat3 packed_dmat3; - typedef packed_lowp_dmat4 packed_dmat4; - - typedef aligned_lowp_dmat2x2 aligned_dmat2x2; - typedef aligned_lowp_dmat2x3 aligned_dmat2x3; - typedef aligned_lowp_dmat2x4 aligned_dmat2x4; - typedef aligned_lowp_dmat3x2 aligned_dmat3x2; - typedef aligned_lowp_dmat3x3 aligned_dmat3x3; - typedef aligned_lowp_dmat3x4 aligned_dmat3x4; - typedef aligned_lowp_dmat4x2 aligned_dmat4x2; - typedef aligned_lowp_dmat4x3 aligned_dmat4x3; - typedef aligned_lowp_dmat4x4 aligned_dmat4x4; - typedef packed_lowp_dmat2x2 packed_dmat2x2; - typedef packed_lowp_dmat2x3 packed_dmat2x3; - typedef packed_lowp_dmat2x4 packed_dmat2x4; - typedef packed_lowp_dmat3x2 packed_dmat3x2; - typedef packed_lowp_dmat3x3 packed_dmat3x3; - typedef packed_lowp_dmat3x4 packed_dmat3x4; - typedef packed_lowp_dmat4x2 packed_dmat4x2; - typedef packed_lowp_dmat4x3 packed_dmat4x3; - typedef packed_lowp_dmat4x4 packed_dmat4x4; -#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE)) - typedef aligned_mediump_dvec1 aligned_dvec1; - typedef aligned_mediump_dvec2 aligned_dvec2; - typedef aligned_mediump_dvec3 aligned_dvec3; - typedef aligned_mediump_dvec4 aligned_dvec4; - typedef packed_mediump_dvec1 packed_dvec1; - typedef packed_mediump_dvec2 packed_dvec2; - typedef packed_mediump_dvec3 packed_dvec3; - typedef packed_mediump_dvec4 packed_dvec4; - - typedef aligned_mediump_dmat2 aligned_dmat2; - typedef aligned_mediump_dmat3 aligned_dmat3; - typedef aligned_mediump_dmat4 aligned_dmat4; - typedef packed_mediump_dmat2 packed_dmat2; - typedef packed_mediump_dmat3 packed_dmat3; - typedef packed_mediump_dmat4 packed_dmat4; - - typedef aligned_mediump_dmat2x2 aligned_dmat2x2; - typedef aligned_mediump_dmat2x3 aligned_dmat2x3; - typedef aligned_mediump_dmat2x4 aligned_dmat2x4; - typedef aligned_mediump_dmat3x2 aligned_dmat3x2; - typedef aligned_mediump_dmat3x3 aligned_dmat3x3; - typedef aligned_mediump_dmat3x4 aligned_dmat3x4; - typedef aligned_mediump_dmat4x2 aligned_dmat4x2; - typedef aligned_mediump_dmat4x3 aligned_dmat4x3; - typedef aligned_mediump_dmat4x4 aligned_dmat4x4; - typedef packed_mediump_dmat2x2 packed_dmat2x2; - typedef packed_mediump_dmat2x3 packed_dmat2x3; - typedef packed_mediump_dmat2x4 packed_dmat2x4; - typedef packed_mediump_dmat3x2 packed_dmat3x2; - typedef packed_mediump_dmat3x3 packed_dmat3x3; - typedef packed_mediump_dmat3x4 packed_dmat3x4; - typedef packed_mediump_dmat4x2 packed_dmat4x2; - typedef packed_mediump_dmat4x3 packed_dmat4x3; - typedef packed_mediump_dmat4x4 packed_dmat4x4; -#else //defined(GLM_PRECISION_HIGHP_DOUBLE) - /// 1 component vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec1 aligned_dvec1; - - /// 2 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec2 aligned_dvec2; - - /// 3 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec3 aligned_dvec3; - - /// 4 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec4 aligned_dvec4; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec1 packed_dvec1; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec2 packed_dvec2; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec3 packed_dvec3; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec4 packed_dvec4; - - /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2 aligned_dmat2; - - /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3 aligned_dmat3; - - /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4 aligned_dmat4; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2 packed_dmat2; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3 packed_dmat3; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4 packed_dmat4; - - /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x2 aligned_dmat2x2; - - /// 2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x3 aligned_dmat2x3; - - /// 2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x4 aligned_dmat2x4; - - /// 3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x2 aligned_dmat3x2; - - /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x3 aligned_dmat3x3; - - /// 3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x4 aligned_dmat3x4; - - /// 4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x2 aligned_dmat4x2; - - /// 4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x3 aligned_dmat4x3; - - /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x4 aligned_dmat4x4; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x2 packed_dmat2x2; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x3 packed_dmat2x3; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x4 packed_dmat2x4; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x2 packed_dmat3x2; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x3 packed_dmat3x3; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x4 packed_dmat3x4; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x2 packed_dmat4x2; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x3 packed_dmat4x3; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x4 packed_dmat4x4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_INT)) - typedef aligned_lowp_ivec1 aligned_ivec1; - typedef aligned_lowp_ivec2 aligned_ivec2; - typedef aligned_lowp_ivec3 aligned_ivec3; - typedef aligned_lowp_ivec4 aligned_ivec4; -#elif(defined(GLM_PRECISION_MEDIUMP_INT)) - typedef aligned_mediump_ivec1 aligned_ivec1; - typedef aligned_mediump_ivec2 aligned_ivec2; - typedef aligned_mediump_ivec3 aligned_ivec3; - typedef aligned_mediump_ivec4 aligned_ivec4; -#else //defined(GLM_PRECISION_HIGHP_INT) - /// 1 component vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec1 aligned_ivec1; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec2 aligned_ivec2; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec3 aligned_ivec3; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec4 aligned_ivec4; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec1 packed_ivec1; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec2 packed_ivec2; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec3 packed_ivec3; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec4 packed_ivec4; -#endif//GLM_PRECISION - - // -- Unsigned integer definition -- - -#if(defined(GLM_PRECISION_LOWP_UINT)) - typedef aligned_lowp_uvec1 aligned_uvec1; - typedef aligned_lowp_uvec2 aligned_uvec2; - typedef aligned_lowp_uvec3 aligned_uvec3; - typedef aligned_lowp_uvec4 aligned_uvec4; -#elif(defined(GLM_PRECISION_MEDIUMP_UINT)) - typedef aligned_mediump_uvec1 aligned_uvec1; - typedef aligned_mediump_uvec2 aligned_uvec2; - typedef aligned_mediump_uvec3 aligned_uvec3; - typedef aligned_mediump_uvec4 aligned_uvec4; -#else //defined(GLM_PRECISION_HIGHP_UINT) - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec1 aligned_uvec1; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec2 aligned_uvec2; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec3 aligned_uvec3; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec4 aligned_uvec4; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec1 packed_uvec1; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec2 packed_uvec2; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec3 packed_uvec3; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec4 packed_uvec4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_BOOL)) - typedef aligned_lowp_bvec1 aligned_bvec1; - typedef aligned_lowp_bvec2 aligned_bvec2; - typedef aligned_lowp_bvec3 aligned_bvec3; - typedef aligned_lowp_bvec4 aligned_bvec4; -#elif(defined(GLM_PRECISION_MEDIUMP_BOOL)) - typedef aligned_mediump_bvec1 aligned_bvec1; - typedef aligned_mediump_bvec2 aligned_bvec2; - typedef aligned_mediump_bvec3 aligned_bvec3; - typedef aligned_mediump_bvec4 aligned_bvec4; -#else //defined(GLM_PRECISION_HIGHP_BOOL) - /// 1 component vector aligned in memory of bool values. - typedef aligned_highp_bvec1 aligned_bvec1; - - /// 2 components vector aligned in memory of bool values. - typedef aligned_highp_bvec2 aligned_bvec2; - - /// 3 components vector aligned in memory of bool values. - typedef aligned_highp_bvec3 aligned_bvec3; - - /// 4 components vector aligned in memory of bool values. - typedef aligned_highp_bvec4 aligned_bvec4; - - /// 1 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec1 packed_bvec1; - - /// 2 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec2 packed_bvec2; - - /// 3 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec3 packed_bvec3; - - /// 4 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec4 packed_bvec4; -#endif//GLM_PRECISION - - /// @} -}//namespace glm diff --git a/external/glm/glm/gtc/type_precision.hpp b/external/glm/glm/gtc/type_precision.hpp deleted file mode 100644 index 775e2f48..00000000 --- a/external/glm/glm/gtc/type_precision.hpp +++ /dev/null @@ -1,2094 +0,0 @@ -/// @ref gtc_type_precision -/// @file glm/gtc/type_precision.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_type_precision GLM_GTC_type_precision -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines specific C++-based qualifier types. - -#pragma once - -// Dependency: -#include "../gtc/quaternion.hpp" -#include "../gtc/vec1.hpp" -#include "../ext/vector_int1_sized.hpp" -#include "../ext/vector_int2_sized.hpp" -#include "../ext/vector_int3_sized.hpp" -#include "../ext/vector_int4_sized.hpp" -#include "../ext/scalar_int_sized.hpp" -#include "../ext/vector_uint1_sized.hpp" -#include "../ext/vector_uint2_sized.hpp" -#include "../ext/vector_uint3_sized.hpp" -#include "../ext/vector_uint4_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/type_vec2.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" -#include "../detail/type_mat2x2.hpp" -#include "../detail/type_mat2x3.hpp" -#include "../detail/type_mat2x4.hpp" -#include "../detail/type_mat3x2.hpp" -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat3x4.hpp" -#include "../detail/type_mat4x2.hpp" -#include "../detail/type_mat4x3.hpp" -#include "../detail/type_mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_precision extension included") -#endif - -namespace glm -{ - /////////////////////////// - // Signed int vector types - - /// @addtogroup gtc_type_precision - /// @{ - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_int8; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_int16; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_int32; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_int64; - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_int8_t; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_int16_t; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_int32_t; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_int64_t; - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_i8; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_i16; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_i32; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_i64; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_int8; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_int16; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_int32; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_int64; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_int8_t; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_int16_t; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_int32_t; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_int64_t; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_i8; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_i16; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_i32; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_i64; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_int8; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_int16; - - /// High qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_int32; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_int64; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_int8_t; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_int16_t; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_int32_t; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_int64_t; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_i8; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_i16; - - /// High qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_i32; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_i64; - - -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::int8_t; - using std::int16_t; - using std::int32_t; - using std::int64_t; -#else - /// 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 int8_t; - - /// 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 int16_t; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 int32_t; - - /// 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 int64_t; -#endif - - /// 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 i8; - - /// 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 i16; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 i32; - - /// 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 i64; - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_uint8; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_uint16; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_uint32; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_uint64; - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_uint8_t; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_uint16_t; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_uint32_t; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_uint64_t; - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_u8; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_u16; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_u32; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_u64; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_uint8; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_uint16; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_uint32; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_uint64; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_uint8_t; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_uint16_t; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_uint32_t; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_uint64_t; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_u8; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_u16; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_u32; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_u64; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_uint8; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_uint16; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_uint32; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_uint64; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_uint8_t; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_uint16_t; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_uint32_t; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_uint64_t; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_u8; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_u16; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_u32; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_u64; - -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::uint8_t; - using std::uint16_t; - using std::uint32_t; - using std::uint64_t; -#else - /// Default qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 uint8_t; - - /// Default qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 uint16_t; - - /// Default qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 uint32_t; - - /// Default qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 uint64_t; -#endif - - /// Default qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 u8; - - /// Default qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 u16; - - /// Default qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 u32; - - /// Default qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 u64; - - - - - - ////////////////////// - // Float vector types - - /// Single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float float32; - - /// Double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef double float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_float32; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_float64; - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_float32_t; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_float64_t; - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_f32; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_f64; - - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_float32; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_float64; - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_float32_t; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_float64_t; - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_f32; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_f64; - - -#if(defined(GLM_PRECISION_LOWP_FLOAT)) - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_float32_t float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_float64_t float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_f32 f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_f64 f64; - -#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float32 float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float64 float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float32 f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float64 f64; - -#else//(defined(GLM_PRECISION_HIGHP_FLOAT)) - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float32_t float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float64_t float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float32_t f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float64_t f64; -#endif - - - /// Low single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, lowp> lowp_fvec1; - - /// Low single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, lowp> lowp_fvec2; - - /// Low single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, lowp> lowp_fvec3; - - /// Low single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, lowp> lowp_fvec4; - - - /// Medium single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, mediump> mediump_fvec1; - - /// Medium Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, mediump> mediump_fvec2; - - /// Medium Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, mediump> mediump_fvec3; - - /// Medium Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, mediump> mediump_fvec4; - - - /// High single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, highp> highp_fvec1; - - /// High Single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, float, highp> highp_fvec2; - - /// High Single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, float, highp> highp_fvec3; - - /// High Single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, float, highp> highp_fvec4; - - - /// Low single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, lowp> lowp_f32vec1; - - /// Low single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, f32, lowp> lowp_f32vec2; - - /// Low single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, f32, lowp> lowp_f32vec3; - - /// Low single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, f32, lowp> lowp_f32vec4; - - /// Medium single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, mediump> mediump_f32vec1; - - /// Medium single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, f32, mediump> mediump_f32vec2; - - /// Medium single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, f32, mediump> mediump_f32vec3; - - /// Medium single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, f32, mediump> mediump_f32vec4; - - /// High single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, highp> highp_f32vec1; - - /// High single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f32, highp> highp_f32vec2; - - /// High single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f32, highp> highp_f32vec3; - - /// High single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f32, highp> highp_f32vec4; - - - /// Low double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, lowp> lowp_f64vec1; - - /// Low double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, lowp> lowp_f64vec2; - - /// Low double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, lowp> lowp_f64vec3; - - /// Low double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, lowp> lowp_f64vec4; - - /// Medium double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, mediump> mediump_f64vec1; - - /// Medium double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, mediump> mediump_f64vec2; - - /// Medium double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, mediump> mediump_f64vec3; - - /// Medium double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, mediump> mediump_f64vec4; - - /// High double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, highp> highp_f64vec1; - - /// High double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, highp> highp_f64vec2; - - /// High double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, highp> highp_f64vec3; - - /// High double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, highp> highp_f64vec4; - - - - ////////////////////// - // Float matrix types - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_f32 lowp_fmat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, lowp> lowp_fmat2x2; - - /// Low single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, lowp> lowp_fmat2x3; - - /// Low single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, lowp> lowp_fmat2x4; - - /// Low single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, lowp> lowp_fmat3x2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, lowp> lowp_fmat3x3; - - /// Low single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, lowp> lowp_fmat3x4; - - /// Low single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, lowp> lowp_fmat4x2; - - /// Low single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, lowp> lowp_fmat4x3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, lowp> lowp_fmat4x4; - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_fmat1x1 lowp_fmat1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_fmat2x2 lowp_fmat2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_fmat3x3 lowp_fmat3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_fmat4x4 lowp_fmat4; - - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_f32 mediump_fmat1x1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, mediump> mediump_fmat2x2; - - /// Medium single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, mediump> mediump_fmat2x3; - - /// Medium single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, mediump> mediump_fmat2x4; - - /// Medium single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, mediump> mediump_fmat3x2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, mediump> mediump_fmat3x3; - - /// Medium single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, mediump> mediump_fmat3x4; - - /// Medium single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, mediump> mediump_fmat4x2; - - /// Medium single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, mediump> mediump_fmat4x3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, mediump> mediump_fmat4x4; - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_fmat1x1 mediump_fmat1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_fmat2x2 mediump_fmat2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_fmat3x3 mediump_fmat3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_fmat4x4 mediump_fmat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_f32 highp_fmat1x1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, highp> highp_fmat2x2; - - /// High single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, highp> highp_fmat2x3; - - /// High single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, highp> highp_fmat2x4; - - /// High single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, highp> highp_fmat3x2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, highp> highp_fmat3x3; - - /// High single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, highp> highp_fmat3x4; - - /// High single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, highp> highp_fmat4x2; - - /// High single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, highp> highp_fmat4x3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, highp> highp_fmat4x4; - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_fmat1x1 highp_fmat1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_fmat2x2 highp_fmat2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_fmat3x3 highp_fmat3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_fmat4x4 highp_fmat4; - - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 lowp_f32mat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; - - /// Low single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; - - /// Low single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; - - /// Low single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; - - /// Low single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; - - /// Low single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; - - /// Low single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 lowp_f32mat1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat2x2 lowp_f32mat2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat3x3 lowp_f32mat3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat4x4 lowp_f32mat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 mediump_f32mat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; - - /// Medium single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; - - /// Medium single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; - - /// Medium single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; - - /// Medium single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; - - /// Medium single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; - - /// Medium single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat2x2 mediump_f32mat2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat3x3 mediump_f32mat3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat4x4 mediump_f32mat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 highp_f32mat1x1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, highp> highp_f32mat2x2; - - /// High single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, highp> highp_f32mat2x3; - - /// High single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, highp> highp_f32mat2x4; - - /// High single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, highp> highp_f32mat3x2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, highp> highp_f32mat3x3; - - /// High single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, highp> highp_f32mat3x4; - - /// High single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, highp> highp_f32mat4x2; - - /// High single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, highp> highp_f32mat4x3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, highp> highp_f32mat4x4; - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_f32mat2x2 highp_f32mat2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_f32mat3x3 highp_f32mat3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_f32mat4x4 highp_f32mat4; - - - /// Low double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 lowp_f64mat1x1; - - /// Low double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; - - /// Low double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; - - /// Low double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; - - /// Low double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; - - /// Low double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; - - /// Low double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; - - /// Low double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; - - /// Low double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; - - /// Low double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; - - /// Low double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_f64mat1x1 lowp_f64mat1; - - /// Low double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat2x2 lowp_f64mat2; - - /// Low double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat3x3 lowp_f64mat3; - - /// Low double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat4x4 lowp_f64mat4; - - - /// Medium double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 Highp_f64mat1x1; - - /// Medium double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; - - /// Medium double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; - - /// Medium double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; - - /// Medium double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; - - /// Medium double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; - - /// Medium double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; - - /// Medium double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; - - /// Medium double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; - - /// Medium double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; - - /// Medium double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_f64mat1x1 mediump_f64mat1; - - /// Medium double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat2x2 mediump_f64mat2; - - /// Medium double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat3x3 mediump_f64mat3; - - /// Medium double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat4x4 mediump_f64mat4; - - /// High double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 highp_f64mat1x1; - - /// High double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, highp> highp_f64mat2x2; - - /// High double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, highp> highp_f64mat2x3; - - /// High double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, highp> highp_f64mat2x4; - - /// High double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, highp> highp_f64mat3x2; - - /// High double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, highp> highp_f64mat3x3; - - /// High double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, highp> highp_f64mat3x4; - - /// High double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, highp> highp_f64mat4x2; - - /// High double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, highp> highp_f64mat4x3; - - /// High double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, highp> highp_f64mat4x4; - - /// High double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_f64mat1x1 highp_f64mat1; - - /// High double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_f64mat2x2 highp_f64mat2; - - /// High double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_f64mat3x3 highp_f64mat3; - - /// High double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_f64mat4x4 highp_f64mat4; - - - ///////////////////////////// - // Signed int vector types - - /// Low qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, lowp> lowp_ivec1; - - /// Low qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, lowp> lowp_ivec2; - - /// Low qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, lowp> lowp_ivec3; - - /// Low qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, lowp> lowp_ivec4; - - - /// Medium qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, mediump> mediump_ivec1; - - /// Medium qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, mediump> mediump_ivec2; - - /// Medium qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, mediump> mediump_ivec3; - - /// Medium qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, mediump> mediump_ivec4; - - - /// High qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, highp> highp_ivec1; - - /// High qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, highp> highp_ivec2; - - /// High qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, highp> highp_ivec3; - - /// High qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, highp> highp_ivec4; - - - /// Low qualifier 8 bit signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, i8, lowp> lowp_i8vec1; - - /// Low qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, lowp> lowp_i8vec2; - - /// Low qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, lowp> lowp_i8vec3; - - /// Low qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, lowp> lowp_i8vec4; - - - /// Medium qualifier 8 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i8, mediump> mediump_i8vec1; - - /// Medium qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, mediump> mediump_i8vec2; - - /// Medium qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, mediump> mediump_i8vec3; - - /// Medium qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, mediump> mediump_i8vec4; - - - /// High qualifier 8 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i8, highp> highp_i8vec1; - - /// High qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, highp> highp_i8vec2; - - /// High qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, highp> highp_i8vec3; - - /// High qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, highp> highp_i8vec4; - - - /// Low qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, lowp> lowp_i16vec1; - - /// Low qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, lowp> lowp_i16vec2; - - /// Low qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, lowp> lowp_i16vec3; - - /// Low qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, lowp> lowp_i16vec4; - - - /// Medium qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, mediump> mediump_i16vec1; - - /// Medium qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, mediump> mediump_i16vec2; - - /// Medium qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, mediump> mediump_i16vec3; - - /// Medium qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, mediump> mediump_i16vec4; - - - /// High qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, highp> highp_i16vec1; - - /// High qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, highp> highp_i16vec2; - - /// High qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, highp> highp_i16vec3; - - /// High qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, highp> highp_i16vec4; - - - /// Low qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, lowp> lowp_i32vec1; - - /// Low qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, lowp> lowp_i32vec2; - - /// Low qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, lowp> lowp_i32vec3; - - /// Low qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, lowp> lowp_i32vec4; - - - /// Medium qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, mediump> mediump_i32vec1; - - /// Medium qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, mediump> mediump_i32vec2; - - /// Medium qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, mediump> mediump_i32vec3; - - /// Medium qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, mediump> mediump_i32vec4; - - - /// High qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, highp> highp_i32vec1; - - /// High qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, highp> highp_i32vec2; - - /// High qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, highp> highp_i32vec3; - - /// High qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, highp> highp_i32vec4; - - - /// Low qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, lowp> lowp_i64vec1; - - /// Low qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, lowp> lowp_i64vec2; - - /// Low qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, lowp> lowp_i64vec3; - - /// Low qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, lowp> lowp_i64vec4; - - - /// Medium qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, mediump> mediump_i64vec1; - - /// Medium qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, mediump> mediump_i64vec2; - - /// Medium qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, mediump> mediump_i64vec3; - - /// Medium qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, mediump> mediump_i64vec4; - - - /// High qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, highp> highp_i64vec1; - - /// High qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, highp> highp_i64vec2; - - /// High qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, highp> highp_i64vec3; - - /// High qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, highp> highp_i64vec4; - - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, lowp> lowp_uvec1; - - /// Low qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, lowp> lowp_uvec2; - - /// Low qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, lowp> lowp_uvec3; - - /// Low qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, lowp> lowp_uvec4; - - - /// Medium qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, mediump> mediump_uvec1; - - /// Medium qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, mediump> mediump_uvec2; - - /// Medium qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, mediump> mediump_uvec3; - - /// Medium qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, mediump> mediump_uvec4; - - - /// High qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, highp> highp_uvec1; - - /// High qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, highp> highp_uvec2; - - /// High qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, highp> highp_uvec3; - - /// High qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, highp> highp_uvec4; - - - /// Low qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, lowp> lowp_u8vec1; - - /// Low qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, lowp> lowp_u8vec2; - - /// Low qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, lowp> lowp_u8vec3; - - /// Low qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, lowp> lowp_u8vec4; - - - /// Medium qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, mediump> mediump_u8vec1; - - /// Medium qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, mediump> mediump_u8vec2; - - /// Medium qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, mediump> mediump_u8vec3; - - /// Medium qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, mediump> mediump_u8vec4; - - - /// High qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, highp> highp_u8vec1; - - /// High qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, highp> highp_u8vec2; - - /// High qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, highp> highp_u8vec3; - - /// High qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, highp> highp_u8vec4; - - - /// Low qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, lowp> lowp_u16vec1; - - /// Low qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, lowp> lowp_u16vec2; - - /// Low qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, lowp> lowp_u16vec3; - - /// Low qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, lowp> lowp_u16vec4; - - - /// Medium qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, mediump> mediump_u16vec1; - - /// Medium qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, mediump> mediump_u16vec2; - - /// Medium qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, mediump> mediump_u16vec3; - - /// Medium qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, mediump> mediump_u16vec4; - - - /// High qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, highp> highp_u16vec1; - - /// High qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, highp> highp_u16vec2; - - /// High qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, highp> highp_u16vec3; - - /// High qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, highp> highp_u16vec4; - - - /// Low qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, lowp> lowp_u32vec1; - - /// Low qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, lowp> lowp_u32vec2; - - /// Low qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, lowp> lowp_u32vec3; - - /// Low qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, lowp> lowp_u32vec4; - - - /// Medium qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, mediump> mediump_u32vec1; - - /// Medium qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, mediump> mediump_u32vec2; - - /// Medium qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, mediump> mediump_u32vec3; - - /// Medium qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, mediump> mediump_u32vec4; - - - /// High qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, highp> highp_u32vec1; - - /// High qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, highp> highp_u32vec2; - - /// High qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, highp> highp_u32vec3; - - /// High qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, highp> highp_u32vec4; - - - /// Low qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, lowp> lowp_u64vec1; - - /// Low qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, lowp> lowp_u64vec2; - - /// Low qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, lowp> lowp_u64vec3; - - /// Low qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, lowp> lowp_u64vec4; - - - /// Medium qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, mediump> mediump_u64vec1; - - /// Medium qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, mediump> mediump_u64vec2; - - /// Medium qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, mediump> mediump_u64vec3; - - /// Medium qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, mediump> mediump_u64vec4; - - - /// High qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, highp> highp_u64vec1; - - /// High qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, highp> highp_u64vec2; - - /// High qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, highp> highp_u64vec3; - - /// High qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, highp> highp_u64vec4; - - - ////////////////////// - // Float vector types - - /// 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 float32_t; - - /// 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 f32; - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 float64_t; - - /// 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 f64; -# endif//GLM_FORCE_SINGLE_ONLY - - /// Single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, defaultp> fvec1; - - /// Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, defaultp> fvec2; - - /// Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, defaultp> fvec3; - - /// Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, defaultp> fvec4; - - - /// Single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, defaultp> f32vec1; - - /// Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f32, defaultp> f32vec2; - - /// Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f32, defaultp> f32vec3; - - /// Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f32, defaultp> f32vec4; - -# ifndef GLM_FORCE_SINGLE_ONLY - /// Double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, defaultp> f64vec1; - - /// Double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, defaultp> f64vec2; - - /// Double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, defaultp> f64vec3; - - /// Double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, defaultp> f64vec4; -# endif//GLM_FORCE_SINGLE_ONLY - - - ////////////////////// - // Float matrix types - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 fmat1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> fmat2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> fmat3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> fmat4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 fmat1x1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> fmat2x2; - - /// Single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, defaultp> fmat2x3; - - /// Single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, defaultp> fmat2x4; - - /// Single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, defaultp> fmat3x2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> fmat3x3; - - /// Single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, defaultp> fmat3x4; - - /// Single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, defaultp> fmat4x2; - - /// Single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, defaultp> fmat4x3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> fmat4x4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> f32mat2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> f32mat3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> f32mat4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 f32mat1x1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> f32mat2x2; - - /// Single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, defaultp> f32mat2x3; - - /// Single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, defaultp> f32mat2x4; - - /// Single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, defaultp> f32mat3x2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> f32mat3x3; - - /// Single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, defaultp> f32mat3x4; - - /// Single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, defaultp> f32mat4x2; - - /// Single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, defaultp> f32mat4x3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> f32mat4x4; - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f64mat1; - - /// Double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, defaultp> f64mat2; - - /// Double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, defaultp> f64mat3; - - /// Double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, defaultp> f64mat4; - - - /// Double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 f64mat1x1; - - /// Double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, defaultp> f64mat2x2; - - /// Double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, defaultp> f64mat2x3; - - /// Double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, defaultp> f64mat2x4; - - /// Double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, defaultp> f64mat3x2; - - /// Double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, defaultp> f64mat3x3; - - /// Double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, defaultp> f64mat3x4; - - /// Double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, defaultp> f64mat4x2; - - /// Double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, defaultp> f64mat4x3; - - /// Double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, defaultp> f64mat4x4; - -# endif//GLM_FORCE_SINGLE_ONLY - - ////////////////////////// - // Quaternion types - - /// Single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua f32quat; - - /// Low single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua lowp_f32quat; - - /// Low double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua lowp_f64quat; - - /// Medium single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua mediump_f32quat; - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Medium double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua mediump_f64quat; - - /// High single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua highp_f32quat; - - /// High double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua highp_f64quat; - - /// Double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua f64quat; - -# endif//GLM_FORCE_SINGLE_ONLY - - /// @} -}//namespace glm - -#include "type_precision.inl" diff --git a/external/glm/glm/gtc/type_precision.inl b/external/glm/glm/gtc/type_precision.inl deleted file mode 100644 index ae809120..00000000 --- a/external/glm/glm/gtc/type_precision.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtc_precision - -namespace glm -{ - -} diff --git a/external/glm/glm/gtc/type_ptr.hpp b/external/glm/glm/gtc/type_ptr.hpp deleted file mode 100644 index d7e625aa..00000000 --- a/external/glm/glm/gtc/type_ptr.hpp +++ /dev/null @@ -1,230 +0,0 @@ -/// @ref gtc_type_ptr -/// @file glm/gtc/type_ptr.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_type_ptr GLM_GTC_type_ptr -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Handles the interaction between pointers and vector, matrix types. -/// -/// This extension defines an overloaded function, glm::value_ptr. It returns -/// a pointer to the memory layout of the object. Matrix types store their values -/// in column-major order. -/// -/// This is useful for uploading data to matrices or copying data to buffer objects. -/// -/// Example: -/// @code -/// #include -/// #include -/// -/// glm::vec3 aVector(3); -/// glm::mat4 someMatrix(1.0); -/// -/// glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector)); -/// glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix)); -/// @endcode -/// -/// need to be included to use the features of this extension. - -#pragma once - -// Dependency: -#include "../gtc/quaternion.hpp" -#include "../gtc/vec1.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_ptr extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_type_ptr - /// @{ - - /// Return the constant address to the data of the input parameter. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, defaultp> make_vec2(T const * const ptr); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, defaultp> make_vec3(T const * const ptr); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, defaultp> make_vec4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 3, T, defaultp> make_mat2x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 4, T, defaultp> make_mat2x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 2, T, defaultp> make_mat3x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 4, T, defaultp> make_mat3x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 2, T, defaultp> make_mat4x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 3, T, defaultp> make_mat4x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4(T const * const ptr); - - /// Build a quaternion from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL qua make_quat(T const * const ptr); - - /// @} -}//namespace glm - -#include "type_ptr.inl" diff --git a/external/glm/glm/gtc/type_ptr.inl b/external/glm/glm/gtc/type_ptr.inl deleted file mode 100644 index 71df4d30..00000000 --- a/external/glm/glm/gtc/type_ptr.inl +++ /dev/null @@ -1,386 +0,0 @@ -/// @ref gtc_type_ptr - -#include - -namespace glm -{ - /// @addtogroup gtc_type_ptr - /// @{ - - template - GLM_FUNC_QUALIFIER T const* value_ptr(vec<2, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<2, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const * value_ptr(vec<3, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<3, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(vec<4, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<4, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T * value_ptr(mat<4, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const * value_ptr(qua const& q) - { - return &(q[0]); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(qua& q) - { - return &(q[0]); - } - - template - inline vec<1, T, Q> make_vec1(vec<1, T, Q> const& v) - { - return v; - } - - template - inline vec<1, T, Q> make_vec1(vec<2, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - inline vec<1, T, Q> make_vec1(vec<3, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - inline vec<1, T, Q> make_vec1(vec<4, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - inline vec<2, T, Q> make_vec2(vec<1, T, Q> const& v) - { - return vec<2, T, Q>(v.x, static_cast(0)); - } - - template - inline vec<2, T, Q> make_vec2(vec<2, T, Q> const& v) - { - return v; - } - - template - inline vec<2, T, Q> make_vec2(vec<3, T, Q> const& v) - { - return vec<2, T, Q>(v); - } - - template - inline vec<2, T, Q> make_vec2(vec<4, T, Q> const& v) - { - return vec<2, T, Q>(v); - } - - template - inline vec<3, T, Q> make_vec3(vec<1, T, Q> const& v) - { - return vec<3, T, Q>(v.x, static_cast(0), static_cast(0)); - } - - template - inline vec<3, T, Q> make_vec3(vec<2, T, Q> const& v) - { - return vec<3, T, Q>(v.x, v.y, static_cast(0)); - } - - template - inline vec<3, T, Q> make_vec3(vec<3, T, Q> const& v) - { - return v; - } - - template - inline vec<3, T, Q> make_vec3(vec<4, T, Q> const& v) - { - return vec<3, T, Q>(v); - } - - template - inline vec<4, T, Q> make_vec4(vec<1, T, Q> const& v) - { - return vec<4, T, Q>(v.x, static_cast(0), static_cast(0), static_cast(1)); - } - - template - inline vec<4, T, Q> make_vec4(vec<2, T, Q> const& v) - { - return vec<4, T, Q>(v.x, v.y, static_cast(0), static_cast(1)); - } - - template - inline vec<4, T, Q> make_vec4(vec<3, T, Q> const& v) - { - return vec<4, T, Q>(v.x, v.y, v.z, static_cast(1)); - } - - template - inline vec<4, T, Q> make_vec4(vec<4, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> make_vec2(T const *const ptr) - { - vec<2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> make_vec3(T const *const ptr) - { - vec<3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, defaultp> make_vec4(T const *const ptr) - { - vec<4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2x2(T const *const ptr) - { - mat<2, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, defaultp> make_mat2x3(T const *const ptr) - { - mat<2, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, defaultp> make_mat2x4(T const *const ptr) - { - mat<2, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, defaultp> make_mat3x2(T const *const ptr) - { - mat<3, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3x3(T const *const ptr) - { - mat<3, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, defaultp> make_mat3x4(T const *const ptr) - { - mat<3, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, defaultp> make_mat4x2(T const *const ptr) - { - mat<4, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, defaultp> make_mat4x3(T const *const ptr) - { - mat<4, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4x4(T const *const ptr) - { - mat<4, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2(T const *const ptr) - { - return make_mat2x2(ptr); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3(T const *const ptr) - { - return make_mat3x3(ptr); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4(T const *const ptr) - { - return make_mat4x4(ptr); - } - - template - GLM_FUNC_QUALIFIER qua make_quat(T const *const ptr) - { - qua Result; - memcpy(value_ptr(Result), ptr, sizeof(qua)); - return Result; - } - - /// @} -}//namespace glm - diff --git a/external/glm/glm/gtc/ulp.hpp b/external/glm/glm/gtc/ulp.hpp deleted file mode 100644 index 0d80a758..00000000 --- a/external/glm/glm/gtc/ulp.hpp +++ /dev/null @@ -1,152 +0,0 @@ -/// @ref gtc_ulp -/// @file glm/gtc/ulp.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_ulp GLM_GTC_ulp -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType next_float(genType x); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType prev_float(genType x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType next_float(genType x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType prev_float(genType x, int ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @see gtc_ulp - GLM_FUNC_DECL int float_distance(float x, float y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @see gtc_ulp - GLM_FUNC_DECL int64 float_distance(double x, double y); - - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x, int ULPs); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x, vec const& ULPs); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x, vec const& ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "ulp.inl" diff --git a/external/glm/glm/gtc/ulp.inl b/external/glm/glm/gtc/ulp.inl deleted file mode 100644 index 4ecbd3f4..00000000 --- a/external/glm/glm/gtc/ulp.inl +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref gtc_ulp - -#include "../ext/scalar_ulp.hpp" - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER float next_float(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MAX); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MAX); -# else - return nextafterf(x, FLT_MAX); -# endif - } - - template<> - GLM_FUNC_QUALIFIER double next_float(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafter(x, std::numeric_limits::max()); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MAX); -# else - return nextafter(x, DBL_MAX); -# endif - } - - template - GLM_FUNC_QUALIFIER T next_float(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for (int i = 0; i < ULPs; ++i) - temp = next_float(temp); - return temp; - } - - GLM_FUNC_QUALIFIER float prev_float(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MIN); -# else - return nextafterf(x, FLT_MIN); -# endif - } - - GLM_FUNC_QUALIFIER double prev_float(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return _nextafter(x, DBL_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MIN); -# else - return nextafter(x, DBL_MIN); -# endif - } - - template - GLM_FUNC_QUALIFIER T prev_float(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for (int i = 0; i < ULPs; ++i) - temp = prev_float(temp); - return temp; - } - - GLM_FUNC_QUALIFIER int float_distance(float x, float y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - GLM_FUNC_QUALIFIER int64 float_distance(double x, double y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x, int ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x, vec const& ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x, int ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x, vec const& ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = float_distance(x[i], y[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = float_distance(x[i], y[i]); - return Result; - } -}//namespace glm - diff --git a/external/glm/glm/gtc/vec1.hpp b/external/glm/glm/gtc/vec1.hpp deleted file mode 100644 index 63697a21..00000000 --- a/external/glm/glm/gtc/vec1.hpp +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref gtc_vec1 -/// @file glm/gtc/vec1.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_vec1 GLM_GTC_vec1 -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Add vec1, ivec1, uvec1 and bvec1 types. - -#pragma once - -// Dependency: -#include "../ext/vector_bool1.hpp" -#include "../ext/vector_bool1_precision.hpp" -#include "../ext/vector_float1.hpp" -#include "../ext/vector_float1_precision.hpp" -#include "../ext/vector_double1.hpp" -#include "../ext/vector_double1_precision.hpp" -#include "../ext/vector_int1.hpp" -#include "../ext/vector_int1_sized.hpp" -#include "../ext/vector_uint1.hpp" -#include "../ext/vector_uint1_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_vec1 extension included") -#endif - diff --git a/external/glm/glm/gtx/associated_min_max.hpp b/external/glm/glm/gtx/associated_min_max.hpp deleted file mode 100644 index d1a41c06..00000000 --- a/external/glm/glm/gtx/associated_min_max.hpp +++ /dev/null @@ -1,207 +0,0 @@ -/// @ref gtx_associated_min_max -/// @file glm/gtx/associated_min_max.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_associated_min_max GLM_GTX_associated_min_max -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Min and max functions that return associated values not the compared onces. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_associated_min_max extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_associated_min_max - /// @{ - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec<2, U, Q> associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - T x, const vec& a, - T y, const vec& b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, U a, - vec const& y, U b); - - /// Minimum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin( - T x, U a, - T y, U b, - T z, U c); - - /// Minimum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin( - T x, U a, - T y, U b, - T z, U c, - T w, U d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec<2, U, Q> associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax( - T x, U a, - T y, U b, - T z, U c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax( - T x, U a, - T y, U b, - T z, U c, - T w, U d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d); - - /// @} -} //namespace glm - -#include "associated_min_max.inl" diff --git a/external/glm/glm/gtx/associated_min_max.inl b/external/glm/glm/gtx/associated_min_max.inl deleted file mode 100644 index 5186c471..00000000 --- a/external/glm/glm/gtx/associated_min_max.inl +++ /dev/null @@ -1,354 +0,0 @@ -/// @ref gtx_associated_min_max - -namespace glm{ - -// Min comparison between 2 variables -template -GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b) -{ - return x < y ? a : b; -} - -template -GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? a[i] : b[i]; - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - T x, const vec& a, - T y, const vec& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x < y ? a[i] : b[i]; - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, U a, - vec const& y, U b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? a : b; - return Result; -} - -// Min comparison between 3 variables -template -GLM_FUNC_QUALIFIER U associatedMin -( - T x, U a, - T y, U b, - T z, U c -) -{ - U Result = x < y ? (x < z ? a : c) : (y < z ? b : c); - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]); - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER U associatedMin -( - T x, U a, - T y, U b, - T z, U c, - T w, U d -) -{ - T Test1 = min(x, y); - T Test2 = min(z, w); - U Result1 = x < y ? a : b; - U Result2 = z < w ? c : d; - U Result = Test1 < Test2 ? Result1 : Result2; - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = min(x[i], y[i]); - T Test2 = min(z[i], w[i]); - U Result1 = x[i] < y[i] ? a[i] : b[i]; - U Result2 = z[i] < w[i] ? c[i] : d[i]; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d -) -{ - T Test1 = min(x, y); - T Test2 = min(z, w); - - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - U Result1 = x < y ? a[i] : b[i]; - U Result2 = z < w ? c[i] : d[i]; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = min(x[i], y[i]); - T Test2 = min(z[i], w[i]); - U Result1 = x[i] < y[i] ? a : b; - U Result2 = z[i] < w[i] ? c : d; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b) -{ - return x > y ? a : b; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? a[i] : b[i]; - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x > y ? a[i] : b[i]; - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? a : b; - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER U associatedMax -( - T x, U a, - T y, U b, - T z, U c -) -{ - U Result = x > y ? (x > z ? a : c) : (y > z ? b : c); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER U associatedMax -( - T x, U a, - T y, U b, - T z, U c, - T w, U d -) -{ - T Test1 = max(x, y); - T Test2 = max(z, w); - U Result1 = x > y ? a : b; - U Result2 = z > w ? c : d; - U Result = Test1 > Test2 ? Result1 : Result2; - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = max(x[i], y[i]); - T Test2 = max(z[i], w[i]); - U Result1 = x[i] > y[i] ? a[i] : b[i]; - U Result2 = z[i] > w[i] ? c[i] : d[i]; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d -) -{ - T Test1 = max(x, y); - T Test2 = max(z, w); - - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - U Result1 = x > y ? a[i] : b[i]; - U Result2 = z > w ? c[i] : d[i]; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = max(x[i], y[i]); - T Test2 = max(z[i], w[i]); - U Result1 = x[i] > y[i] ? a : b; - U Result2 = z[i] > w[i] ? c : d; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} -}//namespace glm diff --git a/external/glm/glm/gtx/bit.hpp b/external/glm/glm/gtx/bit.hpp deleted file mode 100644 index 60a7aef1..00000000 --- a/external/glm/glm/gtx/bit.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/// @ref gtx_bit -/// @file glm/gtx/bit.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_bit GLM_GTX_bit -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../gtc/bitfield.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_bit extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_bit - /// @{ - - /// @see gtx_bit - template - GLM_FUNC_DECL genIUType highestBitValue(genIUType Value); - - /// @see gtx_bit - template - GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value); - - /// Find the highest bit set to 1 in a integer variable and return its value. - /// - /// @see gtx_bit - template - GLM_FUNC_DECL vec highestBitValue(vec const& value); - - /// Return the power of two number which value is just higher the input value. - /// Deprecated, use ceilPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value); - - /// Return the power of two number which value is just higher the input value. - /// Deprecated, use ceilPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoAbove(vec const& value); - - /// Return the power of two number which value is just lower the input value. - /// Deprecated, use floorPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value); - - /// Return the power of two number which value is just lower the input value. - /// Deprecated, use floorPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoBelow(vec const& value); - - /// Return the power of two number which value is the closet to the input value. - /// Deprecated, use roundPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value); - - /// Return the power of two number which value is the closet to the input value. - /// Deprecated, use roundPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoNearest(vec const& value); - - /// @} -} //namespace glm - - -#include "bit.inl" - diff --git a/external/glm/glm/gtx/bit.inl b/external/glm/glm/gtx/bit.inl deleted file mode 100644 index 621b6262..00000000 --- a/external/glm/glm/gtx/bit.inl +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref gtx_bit - -namespace glm -{ - /////////////////// - // highestBitValue - - template - GLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value) - { - genIUType tmp = Value; - genIUType result = genIUType(0); - while(tmp) - { - result = (tmp & (~tmp + 1)); // grab lowest bit - tmp &= ~result; // clear lowest bit - } - return result; - } - - template - GLM_FUNC_QUALIFIER vec highestBitValue(vec const& v) - { - return detail::functor1::call(highestBitValue, v); - } - - /////////////////// - // lowestBitValue - - template - GLM_FUNC_QUALIFIER genIUType lowestBitValue(genIUType Value) - { - return (Value & (~Value + 1)); - } - - template - GLM_FUNC_QUALIFIER vec lowestBitValue(vec const& v) - { - return detail::functor1::call(lowestBitValue, v); - } - - /////////////////// - // powerOfTwoAbove - - template - GLM_FUNC_QUALIFIER genType powerOfTwoAbove(genType value) - { - return isPowerOfTwo(value) ? value : highestBitValue(value) << 1; - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoAbove(vec const& v) - { - return detail::functor1::call(powerOfTwoAbove, v); - } - - /////////////////// - // powerOfTwoBelow - - template - GLM_FUNC_QUALIFIER genType powerOfTwoBelow(genType value) - { - return isPowerOfTwo(value) ? value : highestBitValue(value); - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoBelow(vec const& v) - { - return detail::functor1::call(powerOfTwoBelow, v); - } - - ///////////////////// - // powerOfTwoNearest - - template - GLM_FUNC_QUALIFIER genType powerOfTwoNearest(genType value) - { - if(isPowerOfTwo(value)) - return value; - - genType const prev = highestBitValue(value); - genType const next = prev << 1; - return (next - value) < (value - prev) ? next : prev; - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoNearest(vec const& v) - { - return detail::functor1::call(powerOfTwoNearest, v); - } - -}//namespace glm diff --git a/external/glm/glm/gtx/closest_point.hpp b/external/glm/glm/gtx/closest_point.hpp deleted file mode 100644 index de6dbbff..00000000 --- a/external/glm/glm/gtx/closest_point.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref gtx_closest_point -/// @file glm/gtx/closest_point.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_closest_point GLM_GTX_closest_point -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Find the point on a straight line which is the closet of a point. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_closest_point extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_closest_point - /// @{ - - /// Find the point on a straight line which is the closet of a point. - /// @see gtx_closest_point - template - GLM_FUNC_DECL vec<3, T, Q> closestPointOnLine( - vec<3, T, Q> const& point, - vec<3, T, Q> const& a, - vec<3, T, Q> const& b); - - /// 2d lines work as well - template - GLM_FUNC_DECL vec<2, T, Q> closestPointOnLine( - vec<2, T, Q> const& point, - vec<2, T, Q> const& a, - vec<2, T, Q> const& b); - - /// @} -}// namespace glm - -#include "closest_point.inl" diff --git a/external/glm/glm/gtx/closest_point.inl b/external/glm/glm/gtx/closest_point.inl deleted file mode 100644 index 0a39b042..00000000 --- a/external/glm/glm/gtx/closest_point.inl +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_closest_point - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> closestPointOnLine - ( - vec<3, T, Q> const& point, - vec<3, T, Q> const& a, - vec<3, T, Q> const& b - ) - { - T LineLength = distance(a, b); - vec<3, T, Q> Vector = point - a; - vec<3, T, Q> LineDirection = (b - a) / LineLength; - - // Project Vector to LineDirection to get the distance of point from a - T Distance = dot(Vector, LineDirection); - - if(Distance <= T(0)) return a; - if(Distance >= LineLength) return b; - return a + LineDirection * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> closestPointOnLine - ( - vec<2, T, Q> const& point, - vec<2, T, Q> const& a, - vec<2, T, Q> const& b - ) - { - T LineLength = distance(a, b); - vec<2, T, Q> Vector = point - a; - vec<2, T, Q> LineDirection = (b - a) / LineLength; - - // Project Vector to LineDirection to get the distance of point from a - T Distance = dot(Vector, LineDirection); - - if(Distance <= T(0)) return a; - if(Distance >= LineLength) return b; - return a + LineDirection * Distance; - } - -}//namespace glm diff --git a/external/glm/glm/gtx/color_encoding.hpp b/external/glm/glm/gtx/color_encoding.hpp deleted file mode 100644 index 96ded2a2..00000000 --- a/external/glm/glm/gtx/color_encoding.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/// @ref gtx_color_encoding -/// @file glm/gtx/color_encoding.hpp -/// -/// @see core (dependence) -/// @see gtx_color_encoding (dependence) -/// -/// @defgroup gtx_color_encoding GLM_GTX_color_encoding -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../vec3.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTC_color_encoding extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_encoding - /// @{ - - /// Convert a linear sRGB color to D65 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB); - - /// Convert a linear sRGB color to D50 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB); - - /// Convert a D65 YUV color to linear sRGB. - template - GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ); - - /// Convert a D65 YUV color to D50 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ); - - /// @} -} //namespace glm - -#include "color_encoding.inl" diff --git a/external/glm/glm/gtx/color_encoding.inl b/external/glm/glm/gtx/color_encoding.inl deleted file mode 100644 index e50fa3ef..00000000 --- a/external/glm/glm/gtx/color_encoding.inl +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_color_encoding - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB) - { - vec<3, T, Q> const M(0.490f, 0.17697f, 0.2f); - vec<3, T, Q> const N(0.31f, 0.8124f, 0.01063f); - vec<3, T, Q> const O(0.490f, 0.01f, 0.99f); - - return (M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB) * static_cast(5.650675255693055f); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB) - { - vec<3, T, Q> const M(0.436030342570117f, 0.222438466210245f, 0.013897440074263f); - vec<3, T, Q> const N(0.385101860087134f, 0.716942745571917f, 0.097076381494207f); - vec<3, T, Q> const O(0.143067806654203f, 0.060618777416563f, 0.713926257896652f); - - return M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ) - { - vec<3, T, Q> const M(0.41847f, -0.091169f, 0.0009209f); - vec<3, T, Q> const N(-0.15866f, 0.25243f, 0.015708f); - vec<3, T, Q> const O(0.0009209f, -0.0025498f, 0.1786f); - - return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ) - { - vec<3, T, Q> const M(+1.047844353856414f, +0.029549007606644f, -0.009250984365223f); - vec<3, T, Q> const N(+0.022898981050086f, +0.990508028941971f, +0.015072338237051f); - vec<3, T, Q> const O(-0.050206647741605f, -0.017074711360960f, +0.751717835079977f); - - return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; - } - -}//namespace glm diff --git a/external/glm/glm/gtx/color_space.hpp b/external/glm/glm/gtx/color_space.hpp deleted file mode 100644 index a6343921..00000000 --- a/external/glm/glm/gtx/color_space.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/// @ref gtx_color_space -/// @file glm/gtx/color_space.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_color_space GLM_GTX_color_space -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Related to RGB to HSV conversions and operations. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_color_space extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_space - /// @{ - - /// Converts a color from HSV color space to its color in RGB color space. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> rgbColor( - vec<3, T, Q> const& hsvValue); - - /// Converts a color from RGB color space to its color in HSV color space. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> hsvColor( - vec<3, T, Q> const& rgbValue); - - /// Build a saturation matrix. - /// @see gtx_color_space - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> saturation( - T const s); - - /// Modify the saturation of a color. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> saturation( - T const s, - vec<3, T, Q> const& color); - - /// Modify the saturation of a color. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<4, T, Q> saturation( - T const s, - vec<4, T, Q> const& color); - - /// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. - /// @see gtx_color_space - template - GLM_FUNC_DECL T luminosity( - vec<3, T, Q> const& color); - - /// @} -}//namespace glm - -#include "color_space.inl" diff --git a/external/glm/glm/gtx/color_space.inl b/external/glm/glm/gtx/color_space.inl deleted file mode 100644 index f698afe1..00000000 --- a/external/glm/glm/gtx/color_space.inl +++ /dev/null @@ -1,141 +0,0 @@ -/// @ref gtx_color_space - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgbColor(const vec<3, T, Q>& hsvColor) - { - vec<3, T, Q> hsv = hsvColor; - vec<3, T, Q> rgbColor; - - if(hsv.y == static_cast(0)) - // achromatic (grey) - rgbColor = vec<3, T, Q>(hsv.z); - else - { - T sector = floor(hsv.x * (T(1) / T(60))); - T frac = (hsv.x * (T(1) / T(60))) - sector; - // factorial part of h - T o = hsv.z * (T(1) - hsv.y); - T p = hsv.z * (T(1) - hsv.y * frac); - T q = hsv.z * (T(1) - hsv.y * (T(1) - frac)); - - switch(int(sector)) - { - default: - case 0: - rgbColor.r = hsv.z; - rgbColor.g = q; - rgbColor.b = o; - break; - case 1: - rgbColor.r = p; - rgbColor.g = hsv.z; - rgbColor.b = o; - break; - case 2: - rgbColor.r = o; - rgbColor.g = hsv.z; - rgbColor.b = q; - break; - case 3: - rgbColor.r = o; - rgbColor.g = p; - rgbColor.b = hsv.z; - break; - case 4: - rgbColor.r = q; - rgbColor.g = o; - rgbColor.b = hsv.z; - break; - case 5: - rgbColor.r = hsv.z; - rgbColor.g = o; - rgbColor.b = p; - break; - } - } - - return rgbColor; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> hsvColor(const vec<3, T, Q>& rgbColor) - { - vec<3, T, Q> hsv = rgbColor; - float Min = min(min(rgbColor.r, rgbColor.g), rgbColor.b); - float Max = max(max(rgbColor.r, rgbColor.g), rgbColor.b); - float Delta = Max - Min; - - hsv.z = Max; - - if(Max != static_cast(0)) - { - hsv.y = Delta / hsv.z; - T h = static_cast(0); - - if(rgbColor.r == Max) - // between yellow & magenta - h = static_cast(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta; - else if(rgbColor.g == Max) - // between cyan & yellow - h = static_cast(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta; - else - // between magenta & cyan - h = static_cast(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta; - - if(h < T(0)) - hsv.x = h + T(360); - else - hsv.x = h; - } - else - { - // If r = g = b = 0 then s = 0, h is undefined - hsv.y = static_cast(0); - hsv.x = static_cast(0); - } - - return hsv; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> saturation(T const s) - { - vec<3, T, defaultp> rgbw = vec<3, T, defaultp>(T(0.2126), T(0.7152), T(0.0722)); - - vec<3, T, defaultp> const col((T(1) - s) * rgbw); - - mat<4, 4, T, defaultp> result(T(1)); - result[0][0] = col.x + s; - result[0][1] = col.x; - result[0][2] = col.x; - result[1][0] = col.y; - result[1][1] = col.y + s; - result[1][2] = col.y; - result[2][0] = col.z; - result[2][1] = col.z; - result[2][2] = col.z + s; - - return result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> saturation(const T s, const vec<3, T, Q>& color) - { - return vec<3, T, Q>(saturation(s) * vec<4, T, Q>(color, T(0))); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> saturation(const T s, const vec<4, T, Q>& color) - { - return saturation(s) * color; - } - - template - GLM_FUNC_QUALIFIER T luminosity(const vec<3, T, Q>& color) - { - const vec<3, T, Q> tmp = vec<3, T, Q>(0.33, 0.59, 0.11); - return dot(color, tmp); - } -}//namespace glm diff --git a/external/glm/glm/gtx/color_space_YCoCg.hpp b/external/glm/glm/gtx/color_space_YCoCg.hpp deleted file mode 100644 index dd2b7716..00000000 --- a/external/glm/glm/gtx/color_space_YCoCg.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_color_space_YCoCg -/// @file glm/gtx/color_space_YCoCg.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// RGB to YCoCg conversions and operations - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_color_space_YCoCg extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_space_YCoCg - /// @{ - - /// Convert a color from RGB color space to YCoCg color space. - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCg( - vec<3, T, Q> const& rgbColor); - - /// Convert a color from YCoCg color space to RGB color space. - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> YCoCg2rgb( - vec<3, T, Q> const& YCoCgColor); - - /// Convert a color from RGB color space to YCoCgR color space. - /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCgR( - vec<3, T, Q> const& rgbColor); - - /// Convert a color from YCoCgR color space to RGB color space. - /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> YCoCgR2rgb( - vec<3, T, Q> const& YCoCgColor); - - /// @} -}//namespace glm - -#include "color_space_YCoCg.inl" diff --git a/external/glm/glm/gtx/color_space_YCoCg.inl b/external/glm/glm/gtx/color_space_YCoCg.inl deleted file mode 100644 index 83ba857c..00000000 --- a/external/glm/glm/gtx/color_space_YCoCg.inl +++ /dev/null @@ -1,107 +0,0 @@ -/// @ref gtx_color_space_YCoCg - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCg - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.x/*Y */ = rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4); - result.y/*Co*/ = rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2); - result.z/*Cg*/ = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4); - return result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCg2rgb - ( - vec<3, T, Q> const& YCoCgColor - ) - { - vec<3, T, Q> result; - result.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z; - result.g = YCoCgColor.x + YCoCgColor.z; - result.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z; - return result; - } - - template - class compute_YCoCgR { - public: - static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.x/*Y */ = rgbColor.g * static_cast(0.5) + (rgbColor.r + rgbColor.b) * static_cast(0.25); - result.y/*Co*/ = rgbColor.r - rgbColor.b; - result.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) * static_cast(0.5); - return result; - } - - static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - vec<3, T, Q> result; - T tmp = YCoCgRColor.x - (YCoCgRColor.z * static_cast(0.5)); - result.g = YCoCgRColor.z + tmp; - result.b = tmp - (YCoCgRColor.y * static_cast(0.5)); - result.r = result.b + YCoCgRColor.y; - return result; - } - }; - - template - class compute_YCoCgR { - public: - static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.y/*Co*/ = rgbColor.r - rgbColor.b; - T tmp = rgbColor.b + (result.y >> 1); - result.z/*Cg*/ = rgbColor.g - tmp; - result.x/*Y */ = tmp + (result.z >> 1); - return result; - } - - static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - vec<3, T, Q> result; - T tmp = YCoCgRColor.x - (YCoCgRColor.z >> 1); - result.g = YCoCgRColor.z + tmp; - result.b = tmp - (YCoCgRColor.y >> 1); - result.r = result.b + YCoCgRColor.y; - return result; - } - }; - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - return compute_YCoCgR::is_integer>::rgb2YCoCgR(rgbColor); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - return compute_YCoCgR::is_integer>::YCoCgR2rgb(YCoCgRColor); - } -}//namespace glm diff --git a/external/glm/glm/gtx/common.hpp b/external/glm/glm/gtx/common.hpp deleted file mode 100644 index 254ada2d..00000000 --- a/external/glm/glm/gtx/common.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/// @ref gtx_common -/// @file glm/gtx/common.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_common GLM_GTX_common -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Provide functions to increase the compatibility with Cg and HLSL languages - -#pragma once - -// Dependencies: -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../gtc/vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_common extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_common - /// @{ - - /// Returns true if x is a denormalized number - /// Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. - /// This format is less precise but can represent values closer to zero. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL isnan man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL typename genType::bool_type isdenormal(genType const& x); - - /// Similar to 'mod' but with a different rounding and integer support. - /// Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)' - /// - /// @see GLSL mod vs HLSL fmod - /// @see GLSL mod man page - template - GLM_FUNC_DECL vec fmod(vec const& v); - - /// Returns whether vector components values are within an interval. A open interval excludes its endpoints, and is denoted with square brackets. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_relational - template - GLM_FUNC_DECL vec openBounded(vec const& Value, vec const& Min, vec const& Max); - - /// Returns whether vector components values are within an interval. A closed interval includes its endpoints, and is denoted with square brackets. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_relational - template - GLM_FUNC_DECL vec closeBounded(vec const& Value, vec const& Min, vec const& Max); - - /// @} -}//namespace glm - -#include "common.inl" diff --git a/external/glm/glm/gtx/common.inl b/external/glm/glm/gtx/common.inl deleted file mode 100644 index 4ad2126d..00000000 --- a/external/glm/glm/gtx/common.inl +++ /dev/null @@ -1,125 +0,0 @@ -/// @ref gtx_common - -#include -#include "../gtc/epsilon.hpp" -#include "../gtc/constants.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_fmod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - return detail::functor2::call(std::fmod, a, b); - } - }; - - template - struct compute_fmod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - return a % b; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool isdenormal(T const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::fpclassify(x) == FP_SUBNORMAL; -# else - return epsilonNotEqual(x, static_cast(0), epsilon()) && std::fabs(x) < std::numeric_limits::min(); -# endif - } - - template - GLM_FUNC_QUALIFIER typename vec<1, T, Q>::bool_type isdenormal - ( - vec<1, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<1, T, Q>::bool_type( - isdenormal(x.x)); - } - - template - GLM_FUNC_QUALIFIER typename vec<2, T, Q>::bool_type isdenormal - ( - vec<2, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<2, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y)); - } - - template - GLM_FUNC_QUALIFIER typename vec<3, T, Q>::bool_type isdenormal - ( - vec<3, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<3, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y), - isdenormal(x.z)); - } - - template - GLM_FUNC_QUALIFIER typename vec<4, T, Q>::bool_type isdenormal - ( - vec<4, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<4, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y), - isdenormal(x.z), - isdenormal(x.w)); - } - - // fmod - template - GLM_FUNC_QUALIFIER genType fmod(genType x, genType y) - { - return fmod(vec<1, genType>(x), y).x; - } - - template - GLM_FUNC_QUALIFIER vec fmod(vec const& x, T y) - { - return detail::compute_fmod::is_iec559>::call(x, vec(y)); - } - - template - GLM_FUNC_QUALIFIER vec fmod(vec const& x, vec const& y) - { - return detail::compute_fmod::is_iec559>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER vec openBounded(vec const& Value, vec const& Min, vec const& Max) - { - return greaterThan(Value, Min) && lessThan(Value, Max); - } - - template - GLM_FUNC_QUALIFIER vec closeBounded(vec const& Value, vec const& Min, vec const& Max) - { - return greaterThanEqual(Value, Min) && lessThanEqual(Value, Max); - } -}//namespace glm diff --git a/external/glm/glm/gtx/compatibility.hpp b/external/glm/glm/gtx/compatibility.hpp deleted file mode 100644 index f1b00a6b..00000000 --- a/external/glm/glm/gtx/compatibility.hpp +++ /dev/null @@ -1,133 +0,0 @@ -/// @ref gtx_compatibility -/// @file glm/gtx/compatibility.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_compatibility GLM_GTX_compatibility -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Provide functions to increase the compatibility with Cg and HLSL languages - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_compatibility extension included") -# endif -#endif - -#if GLM_COMPILER & GLM_COMPILER_VC -# include -#elif GLM_COMPILER & GLM_COMPILER_GCC -# include -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) -# undef isfinite -# endif -#endif//GLM_COMPILER - -namespace glm -{ - /// @addtogroup gtx_compatibility - /// @{ - - template GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, const vec<2, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, const vec<3, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, const vec<4, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> saturate(const vec<2, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> saturate(const vec<3, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> saturate(const vec<4, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> atan2(const vec<2, T, Q>& x, const vec<2, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> atan2(const vec<3, T, Q>& x, const vec<3, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> atan2(const vec<4, T, Q>& x, const vec<4, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - - template GLM_FUNC_DECL bool isfinite(genType const& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<1, bool, Q> isfinite(const vec<1, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<2, bool, Q> isfinite(const vec<2, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<3, bool, Q> isfinite(const vec<3, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<4, bool, Q> isfinite(const vec<4, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - - typedef bool bool1; //!< \brief boolean type with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, bool, highp> bool2; //!< \brief boolean type with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, bool, highp> bool3; //!< \brief boolean type with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, bool, highp> bool4; //!< \brief boolean type with 4 components. (From GLM_GTX_compatibility extension) - - typedef bool bool1x1; //!< \brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, bool, highp> bool2x2; //!< \brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, bool, highp> bool2x3; //!< \brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, bool, highp> bool2x4; //!< \brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, bool, highp> bool3x2; //!< \brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, bool, highp> bool3x3; //!< \brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, bool, highp> bool3x4; //!< \brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, bool, highp> bool4x2; //!< \brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, bool, highp> bool4x3; //!< \brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, bool, highp> bool4x4; //!< \brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef int int1; //!< \brief integer vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, int, highp> int2; //!< \brief integer vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, int, highp> int3; //!< \brief integer vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, int, highp> int4; //!< \brief integer vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef int int1x1; //!< \brief integer matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, int, highp> int2x2; //!< \brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, int, highp> int2x3; //!< \brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, int, highp> int2x4; //!< \brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, int, highp> int3x2; //!< \brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, int, highp> int3x3; //!< \brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, int, highp> int3x4; //!< \brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, int, highp> int4x2; //!< \brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, int, highp> int4x3; //!< \brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, int, highp> int4x4; //!< \brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef float float1; //!< \brief single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, float, highp> float2; //!< \brief single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, float, highp> float3; //!< \brief single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, float, highp> float4; //!< \brief single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef float float1x1; //!< \brief single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, float, highp> float2x2; //!< \brief single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, float, highp> float2x3; //!< \brief single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, float, highp> float2x4; //!< \brief single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, float, highp> float3x2; //!< \brief single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, float, highp> float3x3; //!< \brief single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, float, highp> float3x4; //!< \brief single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, float, highp> float4x2; //!< \brief single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, float, highp> float4x3; //!< \brief single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, float, highp> float4x4; //!< \brief single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef double double1; //!< \brief double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, double, highp> double2; //!< \brief double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, double, highp> double3; //!< \brief double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, double, highp> double4; //!< \brief double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef double double1x1; //!< \brief double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, double, highp> double2x2; //!< \brief double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, double, highp> double2x3; //!< \brief double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, double, highp> double2x4; //!< \brief double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, double, highp> double3x2; //!< \brief double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, double, highp> double3x3; //!< \brief double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, double, highp> double3x4; //!< \brief double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, double, highp> double4x2; //!< \brief double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, double, highp> double4x3; //!< \brief double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, double, highp> double4x4; //!< \brief double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - /// @} -}//namespace glm - -#include "compatibility.inl" diff --git a/external/glm/glm/gtx/compatibility.inl b/external/glm/glm/gtx/compatibility.inl deleted file mode 100644 index 1d49496b..00000000 --- a/external/glm/glm/gtx/compatibility.inl +++ /dev/null @@ -1,62 +0,0 @@ -#include - -namespace glm -{ - // isfinite - template - GLM_FUNC_QUALIFIER bool isfinite( - genType const& x) - { -# if GLM_HAS_CXX11_STL - return std::isfinite(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_VC - return _finite(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_GCC && GLM_PLATFORM & GLM_PLATFORM_ANDROID - return _isfinite(x) != 0; -# else - if (std::numeric_limits::is_integer || std::denorm_absent == std::numeric_limits::has_denorm) - return std::numeric_limits::min() <= x && std::numeric_limits::max() >= x; - else - return -std::numeric_limits::max() <= x && std::numeric_limits::max() >= x; -# endif - } - - template - GLM_FUNC_QUALIFIER vec<1, bool, Q> isfinite( - vec<1, T, Q> const& x) - { - return vec<1, bool, Q>( - isfinite(x.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, bool, Q> isfinite( - vec<2, T, Q> const& x) - { - return vec<2, bool, Q>( - isfinite(x.x), - isfinite(x.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, bool, Q> isfinite( - vec<3, T, Q> const& x) - { - return vec<3, bool, Q>( - isfinite(x.x), - isfinite(x.y), - isfinite(x.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isfinite( - vec<4, T, Q> const& x) - { - return vec<4, bool, Q>( - isfinite(x.x), - isfinite(x.y), - isfinite(x.z), - isfinite(x.w)); - } - -}//namespace glm diff --git a/external/glm/glm/gtx/component_wise.hpp b/external/glm/glm/gtx/component_wise.hpp deleted file mode 100644 index 34a2b0a3..00000000 --- a/external/glm/glm/gtx/component_wise.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/// @ref gtx_component_wise -/// @file glm/gtx/component_wise.hpp -/// @date 2007-05-21 / 2011-06-07 -/// @author Christophe Riccio -/// -/// @see core (dependence) -/// -/// @defgroup gtx_component_wise GLM_GTX_component_wise -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Operations between components of a type - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_component_wise extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_component_wise - /// @{ - - /// Convert an integer vector to a normalized float vector. - /// If the parameter value type is already a floating qualifier type, the value is passed through. - /// @see gtx_component_wise - template - GLM_FUNC_DECL vec compNormalize(vec const& v); - - /// Convert a normalized float vector to an integer vector. - /// If the parameter value type is already a floating qualifier type, the value is passed through. - /// @see gtx_component_wise - template - GLM_FUNC_DECL vec compScale(vec const& v); - - /// Add all vector components together. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compAdd(genType const& v); - - /// Multiply all vector components together. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMul(genType const& v); - - /// Find the minimum value between single vector components. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMin(genType const& v); - - /// Find the maximum value between single vector components. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMax(genType const& v); - - /// @} -}//namespace glm - -#include "component_wise.inl" diff --git a/external/glm/glm/gtx/component_wise.inl b/external/glm/glm/gtx/component_wise.inl deleted file mode 100644 index cbbc7d41..00000000 --- a/external/glm/glm/gtx/component_wise.inl +++ /dev/null @@ -1,127 +0,0 @@ -/// @ref gtx_component_wise - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_compNormalize - {}; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - floatType const Min = static_cast(std::numeric_limits::min()); - floatType const Max = static_cast(std::numeric_limits::max()); - return (vec(v) - Min) / (Max - Min) * static_cast(2) - static_cast(1); - } - }; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return vec(v) / static_cast(std::numeric_limits::max()); - } - }; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return v; - } - }; - - template - struct compute_compScale - {}; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - floatType const Max = static_cast(std::numeric_limits::max()) + static_cast(0.5); - vec const Scaled(v * Max); - vec const Result(Scaled - static_cast(0.5)); - return Result; - } - }; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return vec(vec(v) * static_cast(std::numeric_limits::max())); - } - }; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return v; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER vec compNormalize(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compNormalize' accepts only floating-point types for 'floatType' template parameter"); - - return detail::compute_compNormalize::is_integer, std::numeric_limits::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER vec compScale(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compScale' accepts only floating-point types for 'floatType' template parameter"); - - return detail::compute_compScale::is_integer, std::numeric_limits::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER T compAdd(vec const& v) - { - T Result(0); - for(length_t i = 0, n = v.length(); i < n; ++i) - Result += v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMul(vec const& v) - { - T Result(1); - for(length_t i = 0, n = v.length(); i < n; ++i) - Result *= v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMin(vec const& v) - { - T Result(v[0]); - for(length_t i = 1, n = v.length(); i < n; ++i) - Result = min(Result, v[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMax(vec const& v) - { - T Result(v[0]); - for(length_t i = 1, n = v.length(); i < n; ++i) - Result = max(Result, v[i]); - return Result; - } -}//namespace glm diff --git a/external/glm/glm/gtx/dual_quaternion.hpp b/external/glm/glm/gtx/dual_quaternion.hpp deleted file mode 100644 index 6a51ab7d..00000000 --- a/external/glm/glm/gtx/dual_quaternion.hpp +++ /dev/null @@ -1,274 +0,0 @@ -/// @ref gtx_dual_quaternion -/// @file glm/gtx/dual_quaternion.hpp -/// @author Maksim Vorobiev (msomeone@gmail.com) -/// -/// @see core (dependence) -/// @see gtc_constants (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_dual_quaternion GLM_GTX_dual_quaternion -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines a templated dual-quaternion type and several dual-quaternion operations. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_dual_quaternion extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_dual_quaternion - /// @{ - - template - struct tdualquat - { - // -- Implementation detail -- - - typedef T value_type; - typedef qua part_type; - - // -- Data -- - - qua real, dual; - - // -- Component accesses -- - - typedef length_t length_type; - /// Return the count of components of a dual quaternion - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} - - GLM_FUNC_DECL part_type & operator[](length_type i); - GLM_FUNC_DECL part_type const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real); - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& orientation, vec<3, T, Q> const& translation); - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real, qua const& dual); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat const& q); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<2, 4, T, Q> const& holder_mat); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<3, 4, T, Q> const& aug_mat); - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m) GLM_DEFAULT; - - template - GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m); - template - GLM_FUNC_DECL tdualquat & operator*=(U s); - template - GLM_FUNC_DECL tdualquat & operator/=(U s); - }; - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL tdualquat operator+(tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator-(tdualquat const& q); - - // -- Binary operators -- - - template - GLM_FUNC_DECL tdualquat operator+(tdualquat const& q, tdualquat const& p); - - template - GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, tdualquat const& p); - - template - GLM_FUNC_DECL vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q); - - template - GLM_FUNC_DECL vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, T const& s); - - template - GLM_FUNC_DECL tdualquat operator*(T const& s, tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator/(tdualquat const& q, T const& s); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(tdualquat const& q1, tdualquat const& q2); - - template - GLM_FUNC_DECL bool operator!=(tdualquat const& q1, tdualquat const& q2); - - /// Creates an identity dual quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dual_quat_identity(); - - /// Returns the normalized quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat normalize(tdualquat const& q); - - /// Returns the linear interpolation of two dual quaternion. - /// - /// @see gtc_dual_quaternion - template - GLM_FUNC_DECL tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a); - - /// Returns the q inverse. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat inverse(tdualquat const& q); - - /// Converts a quaternion to a 2 * 4 matrix. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x); - - /// Converts a quaternion to a 3 * 4 matrix. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x); - - /// Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dualquat_cast(mat<2, 4, T, Q> const& x); - - /// Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dualquat_cast(mat<3, 4, T, Q> const& x); - - - /// Dual-quaternion of low single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_dualquat; - - /// Dual-quaternion of medium single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_dualquat; - - /// Dual-quaternion of high single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_dualquat; - - - /// Dual-quaternion of low single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_fdualquat; - - /// Dual-quaternion of medium single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_fdualquat; - - /// Dual-quaternion of high single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_fdualquat; - - - /// Dual-quaternion of low double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_ddualquat; - - /// Dual-quaternion of medium double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_ddualquat; - - /// Dual-quaternion of high double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_ddualquat; - - -#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - /// Dual-quaternion of floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_fdualquat dualquat; - - /// Dual-quaternion of single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_fdualquat fdualquat; -#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - typedef highp_fdualquat dualquat; - typedef highp_fdualquat fdualquat; -#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - typedef mediump_fdualquat dualquat; - typedef mediump_fdualquat fdualquat; -#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT)) - typedef lowp_fdualquat dualquat; - typedef lowp_fdualquat fdualquat; -#else -# error "GLM error: multiple default precision requested for single-precision floating-point types" -#endif - - -#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - /// Dual-quaternion of default double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_ddualquat ddualquat; -#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef highp_ddualquat ddualquat; -#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef mediump_ddualquat ddualquat; -#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef lowp_ddualquat ddualquat; -#else -# error "GLM error: Multiple default precision requested for double-precision floating-point types" -#endif - - /// @} -} //namespace glm - -#include "dual_quaternion.inl" diff --git a/external/glm/glm/gtx/dual_quaternion.inl b/external/glm/glm/gtx/dual_quaternion.inl deleted file mode 100644 index fad07ea8..00000000 --- a/external/glm/glm/gtx/dual_quaternion.inl +++ /dev/null @@ -1,352 +0,0 @@ -/// @ref gtx_dual_quaternion - -#include "../geometric.hpp" -#include - -namespace glm -{ - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type & tdualquat::operator[](typename tdualquat::length_type i) - { - assert(i >= 0 && i < this->length()); - return (&real)[i]; - } - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type const& tdualquat::operator[](typename tdualquat::length_type i) const - { - assert(i >= 0 && i < this->length()); - return (&real)[i]; - } - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat() -# if GLM_CONFIG_DEFAULTED_FUNCTIONS != GLM_DISABLE - : real(qua()) - , dual(qua(0, 0, 0, 0)) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) - : real(d.real) - , dual(d.dual) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) - : real(d.real) - , dual(d.dual) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r) - : real(r), dual(qua(0, 0, 0, 0)) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& q, vec<3, T, Q> const& p) - : real(q), dual( - T(-0.5) * ( p.x*q.x + p.y*q.y + p.z*q.z), - T(+0.5) * ( p.x*q.w + p.y*q.z - p.z*q.y), - T(+0.5) * (-p.x*q.z + p.y*q.w + p.z*q.x), - T(+0.5) * ( p.x*q.y - p.y*q.x + p.z*q.w)) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r, qua const& d) - : real(r), dual(d) - {} - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& q) - : real(q.real) - , dual(q.dual) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<2, 4, T, Q> const& m) - { - *this = dualquat_cast(m); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<3, 4, T, Q> const& m) - { - *this = dualquat_cast(m); - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) - { - this->real = q.real; - this->dual = q.dual; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) - { - this->real = q.real; - this->dual = q.dual; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator*=(U s) - { - this->real *= static_cast(s); - this->dual *= static_cast(s); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator/=(U s) - { - this->real /= static_cast(s); - this->dual /= static_cast(s); - return *this; - } - - // -- Unary bit operators -- - - template - GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q) - { - return q; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator-(tdualquat const& q) - { - return tdualquat(-q.real, -q.dual); - } - - // -- Binary operators -- - - template - GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q, tdualquat const& p) - { - return tdualquat(q.real + p.real,q.dual + p.dual); - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& p, tdualquat const& o) - { - return tdualquat(p.real * o.real,p.real * o.dual + p.dual * o.real); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v) - { - vec<3, T, Q> const real_v3(q.real.x,q.real.y,q.real.z); - vec<3, T, Q> const dual_v3(q.dual.x,q.dual.y,q.dual.z); - return (cross(real_v3, cross(real_v3,v) + v * q.real.w + dual_v3) + dual_v3 * q.real.w - real_v3 * q.dual.w) * T(2) + v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& q, T const& s) - { - return tdualquat(q.real * s, q.dual * s); - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(T const& s, tdualquat const& q) - { - return q * s; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator/(tdualquat const& q, T const& s) - { - return tdualquat(q.real / s, q.dual / s); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(tdualquat const& q1, tdualquat const& q2) - { - return (q1.real == q2.real) && (q1.dual == q2.dual); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(tdualquat const& q1, tdualquat const& q2) - { - return (q1.real != q2.real) || (q1.dual != q2.dual); - } - - // -- Operations -- - - template - GLM_FUNC_QUALIFIER tdualquat dual_quat_identity() - { - return tdualquat( - qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)), - qua(static_cast(0), static_cast(0), static_cast(0), static_cast(0))); - } - - template - GLM_FUNC_QUALIFIER tdualquat normalize(tdualquat const& q) - { - return q / length(q.real); - } - - template - GLM_FUNC_QUALIFIER tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a) - { - // Dual Quaternion Linear blend aka DLB: - // Lerp is only defined in [0, 1] - assert(a >= static_cast(0)); - assert(a <= static_cast(1)); - T const k = dot(x.real,y.real) < static_cast(0) ? -a : a; - T const one(1); - return tdualquat(x * (one - a) + y * k); - } - - template - GLM_FUNC_QUALIFIER tdualquat inverse(tdualquat const& q) - { - const glm::qua real = conjugate(q.real); - const glm::qua dual = conjugate(q.dual); - return tdualquat(real, dual + (real * (-2.0f * dot(real,dual)))); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x) - { - return mat<2, 4, T, Q>( x[0].x, x[0].y, x[0].z, x[0].w, x[1].x, x[1].y, x[1].z, x[1].w ); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x) - { - qua r = x.real / length2(x.real); - - qua const rr(r.w * x.real.w, r.x * x.real.x, r.y * x.real.y, r.z * x.real.z); - r *= static_cast(2); - - T const xy = r.x * x.real.y; - T const xz = r.x * x.real.z; - T const yz = r.y * x.real.z; - T const wx = r.w * x.real.x; - T const wy = r.w * x.real.y; - T const wz = r.w * x.real.z; - - vec<4, T, Q> const a( - rr.w + rr.x - rr.y - rr.z, - xy - wz, - xz + wy, - -(x.dual.w * r.x - x.dual.x * r.w + x.dual.y * r.z - x.dual.z * r.y)); - - vec<4, T, Q> const b( - xy + wz, - rr.w + rr.y - rr.x - rr.z, - yz - wx, - -(x.dual.w * r.y - x.dual.x * r.z - x.dual.y * r.w + x.dual.z * r.x)); - - vec<4, T, Q> const c( - xz - wy, - yz + wx, - rr.w + rr.z - rr.x - rr.y, - -(x.dual.w * r.z + x.dual.x * r.y - x.dual.y * r.x - x.dual.z * r.w)); - - return mat<3, 4, T, Q>(a, b, c); - } - - template - GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<2, 4, T, Q> const& x) - { - return tdualquat( - qua( x[0].w, x[0].x, x[0].y, x[0].z ), - qua( x[1].w, x[1].x, x[1].y, x[1].z )); - } - - template - GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<3, 4, T, Q> const& x) - { - qua real; - - T const trace = x[0].x + x[1].y + x[2].z; - if(trace > static_cast(0)) - { - T const r = sqrt(T(1) + trace); - T const invr = static_cast(0.5) / r; - real.w = static_cast(0.5) * r; - real.x = (x[2].y - x[1].z) * invr; - real.y = (x[0].z - x[2].x) * invr; - real.z = (x[1].x - x[0].y) * invr; - } - else if(x[0].x > x[1].y && x[0].x > x[2].z) - { - T const r = sqrt(T(1) + x[0].x - x[1].y - x[2].z); - T const invr = static_cast(0.5) / r; - real.x = static_cast(0.5)*r; - real.y = (x[1].x + x[0].y) * invr; - real.z = (x[0].z + x[2].x) * invr; - real.w = (x[2].y - x[1].z) * invr; - } - else if(x[1].y > x[2].z) - { - T const r = sqrt(T(1) + x[1].y - x[0].x - x[2].z); - T const invr = static_cast(0.5) / r; - real.x = (x[1].x + x[0].y) * invr; - real.y = static_cast(0.5) * r; - real.z = (x[2].y + x[1].z) * invr; - real.w = (x[0].z - x[2].x) * invr; - } - else - { - T const r = sqrt(T(1) + x[2].z - x[0].x - x[1].y); - T const invr = static_cast(0.5) / r; - real.x = (x[0].z + x[2].x) * invr; - real.y = (x[2].y + x[1].z) * invr; - real.z = static_cast(0.5) * r; - real.w = (x[1].x - x[0].y) * invr; - } - - qua dual; - dual.x = static_cast(0.5) * ( x[0].w * real.w + x[1].w * real.z - x[2].w * real.y); - dual.y = static_cast(0.5) * (-x[0].w * real.z + x[1].w * real.w + x[2].w * real.x); - dual.z = static_cast(0.5) * ( x[0].w * real.y - x[1].w * real.x + x[2].w * real.w); - dual.w = -static_cast(0.5) * ( x[0].w * real.x + x[1].w * real.y + x[2].w * real.z); - return tdualquat(real, dual); - } -}//namespace glm diff --git a/external/glm/glm/gtx/easing.hpp b/external/glm/glm/gtx/easing.hpp deleted file mode 100644 index 57f3d61b..00000000 --- a/external/glm/glm/gtx/easing.hpp +++ /dev/null @@ -1,219 +0,0 @@ -/// @ref gtx_easing -/// @file glm/gtx/easing.hpp -/// @author Robert Chisholm -/// -/// @see core (dependence) -/// -/// @defgroup gtx_easing GLM_GTX_easing -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Easing functions for animations and transitons -/// All functions take a parameter x in the range [0.0,1.0] -/// -/// Based on the AHEasing project of Warren Moore (https://github.com/warrenm/AHEasing) - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_easing extension included") -# endif -#endif - -namespace glm{ - /// @addtogroup gtx_easing - /// @{ - - /// Modelled after the line y = x - /// @see gtx_easing - template - GLM_FUNC_DECL genType linearInterpolation(genType const & a); - - /// Modelled after the parabola y = x^2 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseIn(genType const & a); - - /// Modelled after the parabola y = -x^2 + 2x - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseOut(genType const & a); - - /// Modelled after the piecewise quadratic - /// y = (1/2)((2x)^2) ; [0, 0.5) - /// y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseInOut(genType const & a); - - /// Modelled after the cubic y = x^3 - template - GLM_FUNC_DECL genType cubicEaseIn(genType const & a); - - /// Modelled after the cubic y = (x - 1)^3 + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType cubicEaseOut(genType const & a); - - /// Modelled after the piecewise cubic - /// y = (1/2)((2x)^3) ; [0, 0.5) - /// y = (1/2)((2x-2)^3 + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType cubicEaseInOut(genType const & a); - - /// Modelled after the quartic x^4 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseIn(genType const & a); - - /// Modelled after the quartic y = 1 - (x - 1)^4 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseOut(genType const & a); - - /// Modelled after the piecewise quartic - /// y = (1/2)((2x)^4) ; [0, 0.5) - /// y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseInOut(genType const & a); - - /// Modelled after the quintic y = x^5 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseIn(genType const & a); - - /// Modelled after the quintic y = (x - 1)^5 + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseOut(genType const & a); - - /// Modelled after the piecewise quintic - /// y = (1/2)((2x)^5) ; [0, 0.5) - /// y = (1/2)((2x-2)^5 + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseInOut(genType const & a); - - /// Modelled after quarter-cycle of sine wave - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseIn(genType const & a); - - /// Modelled after quarter-cycle of sine wave (different phase) - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseOut(genType const & a); - - /// Modelled after half sine wave - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseInOut(genType const & a); - - /// Modelled after shifted quadrant IV of unit circle - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseIn(genType const & a); - - /// Modelled after shifted quadrant II of unit circle - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseOut(genType const & a); - - /// Modelled after the piecewise circular function - /// y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) - /// y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseInOut(genType const & a); - - /// Modelled after the exponential function y = 2^(10(x - 1)) - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseIn(genType const & a); - - /// Modelled after the exponential function y = -2^(-10x) + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseOut(genType const & a); - - /// Modelled after the piecewise exponential - /// y = (1/2)2^(10(2x - 1)) ; [0,0.5) - /// y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseInOut(genType const & a); - - /// Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseIn(genType const & a); - - /// Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseOut(genType const & a); - - /// Modelled after the piecewise exponentially-damped sine wave: - /// y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) - /// y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseInOut(genType const & a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseIn(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseOut(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseInOut(genType const& a); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseIn(genType const& a, genType const& o); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseOut(genType const& a, genType const& o); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseInOut(genType const& a, genType const& o); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseIn(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseOut(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseInOut(genType const& a); - - /// @} -}//namespace glm - -#include "easing.inl" diff --git a/external/glm/glm/gtx/easing.inl b/external/glm/glm/gtx/easing.inl deleted file mode 100644 index 4b7d05b7..00000000 --- a/external/glm/glm/gtx/easing.inl +++ /dev/null @@ -1,436 +0,0 @@ -/// @ref gtx_easing - -#include - -namespace glm{ - - template - GLM_FUNC_QUALIFIER genType linearInterpolation(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a; - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a; - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return -(a * (a - static_cast(2))); - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(2) * a * a; - } - else - { - return (-static_cast(2) * a * a) + (4 * a) - one(); - } - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = a - one(); - return f * f * f + one(); - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if (a < static_cast(0.5)) - { - return static_cast(4) * a * a * a; - } - else - { - genType const f = ((static_cast(2) * a) - static_cast(2)); - return static_cast(0.5) * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = (a - one()); - return f * f * f * (one() - a) + one(); - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(8) * a * a * a * a; - } - else - { - genType const f = (a - one()); - return -static_cast(8) * f * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = (a - one()); - return f * f * f * f * f + one(); - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(16) * a * a * a * a * a; - } - else - { - genType const f = ((static_cast(2) * a) - static_cast(2)); - return static_cast(0.5) * f * f * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType sineEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sin((a - one()) * half_pi()) + one(); - } - - template - GLM_FUNC_QUALIFIER genType sineEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sin(a * half_pi()); - } - - template - GLM_FUNC_QUALIFIER genType sineEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return static_cast(0.5) * (one() - cos(a * pi())); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return one() - sqrt(one() - (a * a)); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sqrt((static_cast(2) - a) * a); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(0.5) * (one() - std::sqrt(one() - static_cast(4) * (a * a))); - } - else - { - return static_cast(0.5) * (std::sqrt(-((static_cast(2) * a) - static_cast(3)) * ((static_cast(2) * a) - one())) + one()); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a <= zero()) - return a; - else - { - genType const Complementary = a - one(); - genType const Two = static_cast(2); - - return glm::pow(Two, Complementary * static_cast(10)); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a >= one()) - return a; - else - { - return one() - glm::pow(static_cast(2), -static_cast(10) * a); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - return static_cast(0.5) * glm::pow(static_cast(2), (static_cast(20) * a) - static_cast(10)); - else - return -static_cast(0.5) * glm::pow(static_cast(2), (-static_cast(20) * a) + static_cast(10)) + one(); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return std::sin(static_cast(13) * half_pi() * a) * glm::pow(static_cast(2), static_cast(10) * (a - one())); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return std::sin(-static_cast(13) * half_pi() * (a + one())) * glm::pow(static_cast(2), -static_cast(10) * a) + one(); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - return static_cast(0.5) * std::sin(static_cast(13) * half_pi() * (static_cast(2) * a)) * glm::pow(static_cast(2), static_cast(10) * ((static_cast(2) * a) - one())); - else - return static_cast(0.5) * (std::sin(-static_cast(13) * half_pi() * ((static_cast(2) * a - one()) + one())) * glm::pow(static_cast(2), -static_cast(10) * (static_cast(2) * a - one())) + static_cast(2)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType z = ((o + one()) * a) - o; - return (a * a * z); - } - - template - GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType n = a - one(); - genType z = ((o + one()) * n) + o; - return (n * n * z) + one(); - } - - template - GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType s = o * static_cast(1.525); - genType x = static_cast(0.5); - genType n = a / static_cast(0.5); - - if (n < static_cast(1)) - { - genType z = ((s + static_cast(1)) * n) - s; - genType m = n * n * z; - return x * m; - } - else - { - n -= static_cast(2); - genType z = ((s + static_cast(1)) * n) + s; - genType m = (n*n*z) + static_cast(2); - return x * m; - } - } - - template - GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a) - { - return backEaseIn(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a) - { - return backEaseOut(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a) - { - return backEaseInOut(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(4.0 / 11.0)) - { - return (static_cast(121) * a * a) / static_cast(16); - } - else if(a < static_cast(8.0 / 11.0)) - { - return (static_cast(363.0 / 40.0) * a * a) - (static_cast(99.0 / 10.0) * a) + static_cast(17.0 / 5.0); - } - else if(a < static_cast(9.0 / 10.0)) - { - return (static_cast(4356.0 / 361.0) * a * a) - (static_cast(35442.0 / 1805.0) * a) + static_cast(16061.0 / 1805.0); - } - else - { - return (static_cast(54.0 / 5.0) * a * a) - (static_cast(513.0 / 25.0) * a) + static_cast(268.0 / 25.0); - } - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return one() - bounceEaseOut(one() - a); - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(0.5) * (one() - bounceEaseOut(a * static_cast(2))); - } - else - { - return static_cast(0.5) * bounceEaseOut(a * static_cast(2) - one()) + static_cast(0.5); - } - } - -}//namespace glm diff --git a/external/glm/glm/gtx/euler_angles.hpp b/external/glm/glm/gtx/euler_angles.hpp deleted file mode 100644 index 27236973..00000000 --- a/external/glm/glm/gtx/euler_angles.hpp +++ /dev/null @@ -1,335 +0,0 @@ -/// @ref gtx_euler_angles -/// @file glm/gtx/euler_angles.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_euler_angles GLM_GTX_euler_angles -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build matrices from Euler angles. -/// -/// Extraction of Euler angles from rotation matrix. -/// Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_euler_angles extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_euler_angles - /// @{ - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX( - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY( - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ( - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleX( - T const & angleX, T const & angularVelocityX); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleY( - T const & angleY, T const & angularVelocityY); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleZ( - T const & angleZ, T const & angularVelocityZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY( - T const& angleX, - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX( - T const& angleY, - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ( - T const& angleX, - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX( - T const& angle, - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ( - T const& angleY, - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY( - T const& angleZ, - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ( - T const& t1, - T const& t2, - T const& t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ( - T const& yaw, - T const& pitch, - T const& roll); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYZ( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXZ( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll( - T const& yaw, - T const& pitch, - T const& roll); - - /// Creates a 2D 2 * 2 rotation matrix from an euler angle. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle); - - /// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle); - - /// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<3, 3, T, Q> orientate3(vec<3, T, Q> const& angles); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, Q> orientate4(vec<3, T, Q> const& angles); - - /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * X * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Z * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Y * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * X * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * Z * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * Y * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * X * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Z * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * Z * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * Y * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * X * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// @} -}//namespace glm - -#include "euler_angles.inl" diff --git a/external/glm/glm/gtx/euler_angles.inl b/external/glm/glm/gtx/euler_angles.inl deleted file mode 100644 index 68c50124..00000000 --- a/external/glm/glm/gtx/euler_angles.inl +++ /dev/null @@ -1,899 +0,0 @@ -/// @ref gtx_euler_angles - -#include "compatibility.hpp" // glm::atan2 - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleX - ( - T const& angleX - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - - return mat<4, 4, T, defaultp>( - T(1), T(0), T(0), T(0), - T(0), cosX, sinX, T(0), - T(0),-sinX, cosX, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleY - ( - T const& angleY - ) - { - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, T(0), -sinY, T(0), - T(0), T(1), T(0), T(0), - sinY, T(0), cosY, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZ - ( - T const& angleZ - ) - { - T cosZ = glm::cos(angleZ); - T sinZ = glm::sin(angleZ); - - return mat<4, 4, T, defaultp>( - cosZ, sinZ, T(0), T(0), - -sinZ, cosZ, T(0), T(0), - T(0), T(0), T(1), T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleX - ( - T const & angleX, - T const & angularVelocityX - ) - { - T cosX = glm::cos(angleX) * angularVelocityX; - T sinX = glm::sin(angleX) * angularVelocityX; - - return mat<4, 4, T, defaultp>( - T(0), T(0), T(0), T(0), - T(0),-sinX, cosX, T(0), - T(0),-cosX,-sinX, T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleY - ( - T const & angleY, - T const & angularVelocityY - ) - { - T cosY = glm::cos(angleY) * angularVelocityY; - T sinY = glm::sin(angleY) * angularVelocityY; - - return mat<4, 4, T, defaultp>( - -sinY, T(0), -cosY, T(0), - T(0), T(0), T(0), T(0), - cosY, T(0), -sinY, T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleZ - ( - T const & angleZ, - T const & angularVelocityZ - ) - { - T cosZ = glm::cos(angleZ) * angularVelocityZ; - T sinZ = glm::sin(angleZ) * angularVelocityZ; - - return mat<4, 4, T, defaultp>( - -sinZ, cosZ, T(0), T(0), - -cosZ, -sinZ, T(0), T(0), - T(0), T(0), T(0), T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXY - ( - T const& angleX, - T const& angleY - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, -sinX * -sinY, cosX * -sinY, T(0), - T(0), cosX, sinX, T(0), - sinY, -sinX * cosY, cosX * cosY, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYX - ( - T const& angleY, - T const& angleX - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, 0, -sinY, T(0), - sinY * sinX, cosX, cosY * sinX, T(0), - sinY * cosX, -sinX, cosY * cosX, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZ - ( - T const& angleX, - T const& angleZ - ) - { - return eulerAngleX(angleX) * eulerAngleZ(angleZ); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZX - ( - T const& angleZ, - T const& angleX - ) - { - return eulerAngleZ(angleZ) * eulerAngleX(angleX); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZ - ( - T const& angleY, - T const& angleZ - ) - { - return eulerAngleY(angleY) * eulerAngleZ(angleZ); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZY - ( - T const& angleZ, - T const& angleY - ) - { - return eulerAngleZ(angleZ) * eulerAngleY(angleY); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYZ - ( - T const& t1, - T const& t2, - T const& t3 - ) - { - T c1 = glm::cos(-t1); - T c2 = glm::cos(-t2); - T c3 = glm::cos(-t3); - T s1 = glm::sin(-t1); - T s2 = glm::sin(-t2); - T s3 = glm::sin(-t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2 * c3; - Result[0][1] =-c1 * s3 + s1 * s2 * c3; - Result[0][2] = s1 * s3 + c1 * s2 * c3; - Result[0][3] = static_cast(0); - Result[1][0] = c2 * s3; - Result[1][1] = c1 * c3 + s1 * s2 * s3; - Result[1][2] =-s1 * c3 + c1 * s2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] =-s2; - Result[2][1] = s1 * c2; - Result[2][2] = c1 * c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXZ - ( - T const& yaw, - T const& pitch, - T const& roll - ) - { - T tmp_ch = glm::cos(yaw); - T tmp_sh = glm::sin(yaw); - T tmp_cp = glm::cos(pitch); - T tmp_sp = glm::sin(pitch); - T tmp_cb = glm::cos(roll); - T tmp_sb = glm::sin(roll); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; - Result[0][1] = tmp_sb * tmp_cp; - Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; - Result[0][3] = static_cast(0); - Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; - Result[1][1] = tmp_cb * tmp_cp; - Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; - Result[1][3] = static_cast(0); - Result[2][0] = tmp_sh * tmp_cp; - Result[2][1] = -tmp_sp; - Result[2][2] = tmp_ch * tmp_cp; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2; - Result[0][1] = c1 * s2; - Result[0][2] = s1 * s2; - Result[0][3] = static_cast(0); - Result[1][0] =-c3 * s2; - Result[1][1] = c1 * c2 * c3 - s1 * s3; - Result[1][2] = c1 * s3 + c2 * c3 * s1; - Result[1][3] = static_cast(0); - Result[2][0] = s2 * s3; - Result[2][1] =-c3 * s1 - c1 * c2 * s3; - Result[2][2] = c1 * c3 - c2 * s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2; - Result[0][1] = s1 * s2; - Result[0][2] =-c1 * s2; - Result[0][3] = static_cast(0); - Result[1][0] = s2 * s3; - Result[1][1] = c1 * c3 - c2 * s1 * s3; - Result[1][2] = c3 * s1 + c1 * c2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s2; - Result[2][1] =-c1 * s3 - c2 * c3 * s1; - Result[2][2] = c1 * c2 * c3 - s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - c2 * s1 * s3; - Result[0][1] = s2* s3; - Result[0][2] =-c3 * s1 - c1 * c2 * s3; - Result[0][3] = static_cast(0); - Result[1][0] = s1 * s2; - Result[1][1] = c2; - Result[1][2] = c1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s3 + c2 * c3 * s1; - Result[2][1] =-c3 * s2; - Result[2][2] = c1 * c2 * c3 - s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2 * c3 - s1 * s3; - Result[0][1] = c3 * s2; - Result[0][2] =-c1 * s3 - c2 * c3 * s1; - Result[0][3] = static_cast(0); - Result[1][0] =-c1 * s2; - Result[1][1] = c2; - Result[1][2] = s1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s1 + c1 * c2 * s3; - Result[2][1] = s2 * s3; - Result[2][2] = c1 * c3 - c2 * s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYZ - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2 * c3 - s1 * s3; - Result[0][1] = c1 * s3 + c2 * c3 * s1; - Result[0][2] =-c3 * s2; - Result[0][3] = static_cast(0); - Result[1][0] =-c3 * s1 - c1 * c2 * s3; - Result[1][1] = c1 * c3 - c2 * s1 * s3; - Result[1][2] = s2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s2; - Result[2][1] = s1 * s2; - Result[2][2] = c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXZ - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - c2 * s1 * s3; - Result[0][1] = c3 * s1 + c1 * c2 * s3; - Result[0][2] = s2 *s3; - Result[0][3] = static_cast(0); - Result[1][0] =-c1 * s3 - c2 * c3 * s1; - Result[1][1] = c1 * c2 * c3 - s1 * s3; - Result[1][2] = c3 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = s1 * s2; - Result[2][1] =-c1 * s2; - Result[2][2] = c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2 * c3; - Result[0][1] = s1 * s3 + c1 * c3 * s2; - Result[0][2] = c3 * s1 * s2 - c1 * s3; - Result[0][3] = static_cast(0); - Result[1][0] =-s2; - Result[1][1] = c1 * c2; - Result[1][2] = c2 * s1; - Result[1][3] = static_cast(0); - Result[2][0] = c2 * s3; - Result[2][1] = c1 * s2 * s3 - c3 * s1; - Result[2][2] = c1 * c3 + s1 * s2 *s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2; - Result[0][1] = s2; - Result[0][2] =-c2 * s1; - Result[0][3] = static_cast(0); - Result[1][0] = s1 * s3 - c1 * c3 * s2; - Result[1][1] = c2 * c3; - Result[1][2] = c1 * s3 + c3 * s1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s1 + c1 * s2 * s3; - Result[2][1] =-c2 * s3; - Result[2][2] = c1 * c3 - s1 * s2 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2; - Result[0][1] = c2 * s1; - Result[0][2] =-s2; - Result[0][3] = static_cast(0); - Result[1][0] = c1 * s2 * s3 - c3 * s1; - Result[1][1] = c1 * c3 + s1 * s2 * s3; - Result[1][2] = c2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = s1 * s3 + c1 * c3 * s2; - Result[2][1] = c3 * s1 * s2 - c1 * s3; - Result[2][2] = c2 * c3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - s1 * s2 * s3; - Result[0][1] = c3 * s1 + c1 * s2 * s3; - Result[0][2] =-c2 * s3; - Result[0][3] = static_cast(0); - Result[1][0] =-c2 * s1; - Result[1][1] = c1 * c2; - Result[1][2] = s2; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s3 + c3 * s1 * s2; - Result[2][1] = s1 * s3 - c1 * c3 * s2; - Result[2][2] = c2 * c3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> yawPitchRoll - ( - T const& yaw, - T const& pitch, - T const& roll - ) - { - T tmp_ch = glm::cos(yaw); - T tmp_sh = glm::sin(yaw); - T tmp_cp = glm::cos(pitch); - T tmp_sp = glm::sin(pitch); - T tmp_cb = glm::cos(roll); - T tmp_sb = glm::sin(roll); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; - Result[0][1] = tmp_sb * tmp_cp; - Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; - Result[0][3] = static_cast(0); - Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; - Result[1][1] = tmp_cb * tmp_cp; - Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; - Result[1][3] = static_cast(0); - Result[2][0] = tmp_sh * tmp_cp; - Result[2][1] = -tmp_sp; - Result[2][2] = tmp_ch * tmp_cp; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> orientate2 - ( - T const& angle - ) - { - T c = glm::cos(angle); - T s = glm::sin(angle); - - mat<2, 2, T, defaultp> Result; - Result[0][0] = c; - Result[0][1] = s; - Result[1][0] = -s; - Result[1][1] = c; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> orientate3 - ( - T const& angle - ) - { - T c = glm::cos(angle); - T s = glm::sin(angle); - - mat<3, 3, T, defaultp> Result; - Result[0][0] = c; - Result[0][1] = s; - Result[0][2] = 0.0f; - Result[1][0] = -s; - Result[1][1] = c; - Result[1][2] = 0.0f; - Result[2][0] = 0.0f; - Result[2][1] = 0.0f; - Result[2][2] = 1.0f; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orientate3 - ( - vec<3, T, Q> const& angles - ) - { - return mat<3, 3, T, Q>(yawPitchRoll(angles.z, angles.x, angles.y)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientate4 - ( - vec<3, T, Q> const& angles - ) - { - return yawPitchRoll(angles.z, angles.x, angles.y); - } - - template - GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][1], M[2][2]); - T C2 = glm::sqrt(M[0][0]*M[0][0] + M[1][0]*M[1][0]); - T T2 = glm::atan2(-M[2][0], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[0][2] - C1*M[0][1], C1*M[1][1] - S1*M[1][2 ]); - t1 = -T1; - t2 = -T2; - t3 = -T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][0], M[2][2]); - T C2 = glm::sqrt(M[0][1]*M[0][1] + M[1][1]*M[1][1]); - T T2 = glm::atan2(-M[2][1], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[1][2] - C1*M[1][0], C1*M[0][0] - S1*M[0][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][2], M[0][1]); - T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(S2, M[0][0]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[1][2] - S1*M[1][1], C1*M[2][2] - S1*M[2][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][1], -M[0][2]); - T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(S2, M[0][0]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-C1*M[2][1] - S1*M[2][2], C1*M[1][1] + S1*M[1][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][0], M[1][2]); - T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(S2, M[1][1]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[2][0] - S1*M[2][2], C1*M[0][0] - S1*M[0][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][2], -M[1][0]); - T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(S2, M[1][1]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-S1*M[0][0] - C1*M[0][2], S1*M[2][0] + C1*M[2][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][1], M[2][0]); - T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); - T T2 = glm::atan2(S2, M[2][2]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[0][1] - S1*M[0][0], C1*M[1][1] - S1*M[1][0]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][0], -M[2][1]); - T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); - T T2 = glm::atan2(S2, M[2][2]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-C1*M[1][0] - S1*M[1][1], C1*M[0][0] + S1*M[0][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][2], M[1][1]); - T C2 = glm::sqrt(M[0][0]*M[0][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(-M[1][0], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[0][1] - C1*M[0][2], C1*M[2][2] - S1*M[2][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(-M[0][2], M[0][0]); - T C2 = glm::sqrt(M[1][1]*M[1][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(M[0][1], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[1][0] + C1*M[1][2], S1*M[2][0] + C1*M[2][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][1], M[0][0]); - T C2 = glm::sqrt(M[1][2]*M[1][2] + M[2][2]*M[2][2]); - T T2 = glm::atan2(-M[0][2], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[2][0] - C1*M[2][1], C1*M[1][1] - S1*M[1][0]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(-M[1][0], M[1][1]); - T C2 = glm::sqrt(M[0][2]*M[0][2] + M[2][2]*M[2][2]); - T T2 = glm::atan2(M[1][2], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[2][0] + S1*M[2][1], C1*M[0][0] + S1*M[0][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } -}//namespace glm diff --git a/external/glm/glm/gtx/extend.hpp b/external/glm/glm/gtx/extend.hpp deleted file mode 100644 index 28b7c5c0..00000000 --- a/external/glm/glm/gtx/extend.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/// @ref gtx_extend -/// @file glm/gtx/extend.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_extend GLM_GTX_extend -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extend a position from a source to a position at a defined length. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extend extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_extend - /// @{ - - /// Extends of Length the Origin position using the (Source - Origin) direction. - /// @see gtx_extend - template - GLM_FUNC_DECL genType extend( - genType const& Origin, - genType const& Source, - typename genType::value_type const Length); - - /// @} -}//namespace glm - -#include "extend.inl" diff --git a/external/glm/glm/gtx/extend.inl b/external/glm/glm/gtx/extend.inl deleted file mode 100644 index 32128eb2..00000000 --- a/external/glm/glm/gtx/extend.inl +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_extend - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType extend - ( - genType const& Origin, - genType const& Source, - genType const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> extend - ( - vec<2, T, Q> const& Origin, - vec<2, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> extend - ( - vec<3, T, Q> const& Origin, - vec<3, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> extend - ( - vec<4, T, Q> const& Origin, - vec<4, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } -}//namespace glm diff --git a/external/glm/glm/gtx/extended_min_max.hpp b/external/glm/glm/gtx/extended_min_max.hpp deleted file mode 100644 index 025eda29..00000000 --- a/external/glm/glm/gtx/extended_min_max.hpp +++ /dev/null @@ -1,137 +0,0 @@ -/// @ref gtx_extended_min_max -/// @file glm/gtx/extended_min_max.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_extended_min_max GLM_GTX_extented_min_max -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Min and max functions for 3 to 4 parameters. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../ext/vector_common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extented_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extented_min_max extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_extended_min_max - /// @{ - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T min( - T const& x, - T const& y, - T const& z); - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - typename C::T const& y, - typename C::T const& z); - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - C const& y, - C const& z); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T min( - T const& x, - T const& y, - T const& z, - T const& w); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - C const& y, - C const& z, - C const& w); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T max( - T const& x, - T const& y, - T const& z); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - typename C::T const& y, - typename C::T const& z); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - C const& y, - C const& z); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T max( - T const& x, - T const& y, - T const& z, - T const& w); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - C const& y, - C const& z, - C const& w); - - /// @} -}//namespace glm - -#include "extended_min_max.inl" diff --git a/external/glm/glm/gtx/extended_min_max.inl b/external/glm/glm/gtx/extended_min_max.inl deleted file mode 100644 index de5998fa..00000000 --- a/external/glm/glm/gtx/extended_min_max.inl +++ /dev/null @@ -1,138 +0,0 @@ -/// @ref gtx_extended_min_max - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T min( - T const& x, - T const& y, - T const& z) - { - return glm::min(glm::min(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - typename C::T const& y, - typename C::T const& z - ) - { - return glm::min(glm::min(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - C const& y, - C const& z - ) - { - return glm::min(glm::min(x, y), z); - } - - template - GLM_FUNC_QUALIFIER T min - ( - T const& x, - T const& y, - T const& z, - T const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - C const& y, - C const& z, - C const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template - GLM_FUNC_QUALIFIER T max( - T const& x, - T const& y, - T const& z) - { - return glm::max(glm::max(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - typename C::T const& y, - typename C::T const& z - ) - { - return glm::max(glm::max(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - C const& y, - C const& z - ) - { - return glm::max(glm::max(x, y), z); - } - - template - GLM_FUNC_QUALIFIER T max - ( - T const& x, - T const& y, - T const& z, - T const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - C const& y, - C const& z, - C const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } -}//namespace glm diff --git a/external/glm/glm/gtx/exterior_product.hpp b/external/glm/glm/gtx/exterior_product.hpp deleted file mode 100644 index 5522df78..00000000 --- a/external/glm/glm/gtx/exterior_product.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_exterior_product -/// @file glm/gtx/exterior_product.hpp -/// -/// @see core (dependence) -/// @see gtx_exterior_product (dependence) -/// -/// @defgroup gtx_exterior_product GLM_GTX_exterior_product -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_exterior_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_exterior_product - /// @{ - - /// Returns the cross product of x and y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see Exterior product - template - GLM_FUNC_DECL T cross(vec<2, T, Q> const& v, vec<2, T, Q> const& u); - - /// @} -} //namespace glm - -#include "exterior_product.inl" diff --git a/external/glm/glm/gtx/exterior_product.inl b/external/glm/glm/gtx/exterior_product.inl deleted file mode 100644 index 93661fd3..00000000 --- a/external/glm/glm/gtx/exterior_product.inl +++ /dev/null @@ -1,26 +0,0 @@ -/// @ref gtx_exterior_product - -#include - -namespace glm { -namespace detail -{ - template - struct compute_cross_vec2 - { - GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& v, vec<2, T, Q> const& u) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); - - return v.x * u.y - u.x * v.y; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER T cross(vec<2, T, Q> const& x, vec<2, T, Q> const& y) - { - return detail::compute_cross_vec2::value>::call(x, y); - } -}//namespace glm - diff --git a/external/glm/glm/gtx/fast_exponential.hpp b/external/glm/glm/gtx/fast_exponential.hpp deleted file mode 100644 index 6fb72865..00000000 --- a/external/glm/glm/gtx/fast_exponential.hpp +++ /dev/null @@ -1,95 +0,0 @@ -/// @ref gtx_fast_exponential -/// @file glm/gtx/fast_exponential.hpp -/// -/// @see core (dependence) -/// @see gtx_half_float (dependence) -/// -/// @defgroup gtx_fast_exponential GLM_GTX_fast_exponential -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of exponential based functions. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_exponential extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_exponential - /// @{ - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL genType fastPow(genType x, genType y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastPow(vec const& x, vec const& y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastPow(vec const& x); - - /// Faster than the common exp function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastExp(T x); - - /// Faster than the common exp function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastExp(vec const& x); - - /// Faster than the common log function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastLog(T x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastLog(vec const& x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastExp2(T x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastExp2(vec const& x); - - /// Faster than the common log2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastLog2(T x); - - /// Faster than the common log2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastLog2(vec const& x); - - /// @} -}//namespace glm - -#include "fast_exponential.inl" diff --git a/external/glm/glm/gtx/fast_exponential.inl b/external/glm/glm/gtx/fast_exponential.inl deleted file mode 100644 index f139e505..00000000 --- a/external/glm/glm/gtx/fast_exponential.inl +++ /dev/null @@ -1,136 +0,0 @@ -/// @ref gtx_fast_exponential - -namespace glm -{ - // fastPow: - template - GLM_FUNC_QUALIFIER genType fastPow(genType x, genType y) - { - return exp(y * log(x)); - } - - template - GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) - { - return exp(y * log(x)); - } - - template - GLM_FUNC_QUALIFIER T fastPow(T x, int y) - { - T f = static_cast(1); - for(int i = 0; i < y; ++i) - f *= x; - return f; - } - - template - GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = x.length(); i < n; ++i) - Result[i] = fastPow(x[i], y[i]); - return Result; - } - - // fastExp - // Note: This function provides accurate results only for value between -1 and 1, else avoid it. - template - GLM_FUNC_QUALIFIER T fastExp(T x) - { - // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. - // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); - T x2 = x * x; - T x3 = x2 * x; - T x4 = x3 * x; - T x5 = x4 * x; - return T(1) + x + (x2 * T(0.5)) + (x3 * T(0.1666666667)) + (x4 * T(0.041666667)) + (x5 * T(0.008333333333)); - } - /* // Try to handle all values of float... but often shower than std::exp, glm::floor and the loop kill the performance - GLM_FUNC_QUALIFIER float fastExp(float x) - { - const float e = 2.718281828f; - const float IntegerPart = floor(x); - const float FloatPart = x - IntegerPart; - float z = 1.f; - - for(int i = 0; i < int(IntegerPart); ++i) - z *= e; - - const float x2 = FloatPart * FloatPart; - const float x3 = x2 * FloatPart; - const float x4 = x3 * FloatPart; - const float x5 = x4 * FloatPart; - return z * (1.0f + FloatPart + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)); - } - - // Increase accuracy on number bigger that 1 and smaller than -1 but it's not enough for high and negative numbers - GLM_FUNC_QUALIFIER float fastExp(float x) - { - // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. - // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); - float x2 = x * x; - float x3 = x2 * x; - float x4 = x3 * x; - float x5 = x4 * x; - float x6 = x5 * x; - float x7 = x6 * x; - float x8 = x7 * x; - return 1.0f + x + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)+ (x6 * 0.00138888888888f) + (x7 * 0.000198412698f) + (x8 * 0.0000248015873f);; - } - */ - - template - GLM_FUNC_QUALIFIER vec fastExp(vec const& x) - { - return detail::functor1::call(fastExp, x); - } - - // fastLog - template - GLM_FUNC_QUALIFIER genType fastLog(genType x) - { - return std::log(x); - } - - /* Slower than the VC7.1 function... - GLM_FUNC_QUALIFIER float fastLog(float x) - { - float y1 = (x - 1.0f) / (x + 1.0f); - float y2 = y1 * y1; - return 2.0f * y1 * (1.0f + y2 * (0.3333333333f + y2 * (0.2f + y2 * 0.1428571429f))); - } - */ - - template - GLM_FUNC_QUALIFIER vec fastLog(vec const& x) - { - return detail::functor1::call(fastLog, x); - } - - //fastExp2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType fastExp2(genType x) - { - return fastExp(0.69314718055994530941723212145818f * x); - } - - template - GLM_FUNC_QUALIFIER vec fastExp2(vec const& x) - { - return detail::functor1::call(fastExp2, x); - } - - // fastLog2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType fastLog2(genType x) - { - return fastLog(x) / 0.69314718055994530941723212145818f; - } - - template - GLM_FUNC_QUALIFIER vec fastLog2(vec const& x) - { - return detail::functor1::call(fastLog2, x); - } -}//namespace glm diff --git a/external/glm/glm/gtx/fast_square_root.hpp b/external/glm/glm/gtx/fast_square_root.hpp deleted file mode 100644 index 9fb3f2fc..00000000 --- a/external/glm/glm/gtx/fast_square_root.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref gtx_fast_square_root -/// @file glm/gtx/fast_square_root.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_fast_square_root GLM_GTX_fast_square_root -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of square root based functions. -/// - Sqrt optimisation based on Newton's method, -/// www.gamedev.net/community/forums/topic.asp?topic id=139956 - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../exponential.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_square_root extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_square_root - /// @{ - - /// Faster than the common sqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastSqrt(genType x); - - /// Faster than the common sqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL vec fastSqrt(vec const& x); - - /// Faster than the common inversesqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastInverseSqrt(genType x); - - /// Faster than the common inversesqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL vec fastInverseSqrt(vec const& x); - - /// Faster than the common length function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastLength(genType x); - - /// Faster than the common length function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL T fastLength(vec const& x); - - /// Faster than the common distance function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastDistance(genType x, genType y); - - /// Faster than the common distance function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL T fastDistance(vec const& x, vec const& y); - - /// Faster than the common normalize function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastNormalize(genType const& x); - - /// @} -}// namespace glm - -#include "fast_square_root.inl" diff --git a/external/glm/glm/gtx/fast_square_root.inl b/external/glm/glm/gtx/fast_square_root.inl deleted file mode 100644 index 4e6c6de9..00000000 --- a/external/glm/glm/gtx/fast_square_root.inl +++ /dev/null @@ -1,75 +0,0 @@ -/// @ref gtx_fast_square_root - -namespace glm -{ - // fastSqrt - template - GLM_FUNC_QUALIFIER genType fastSqrt(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastSqrt' only accept floating-point input"); - - return genType(1) / fastInverseSqrt(x); - } - - template - GLM_FUNC_QUALIFIER vec fastSqrt(vec const& x) - { - return detail::functor1::call(fastSqrt, x); - } - - // fastInversesqrt - template - GLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x) - { - return detail::compute_inversesqrt<1, genType, lowp, detail::is_aligned::value>::call(vec<1, genType, lowp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec fastInverseSqrt(vec const& x) - { - return detail::compute_inversesqrt::value>::call(x); - } - - // fastLength - template - GLM_FUNC_QUALIFIER genType fastLength(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); - - return abs(x); - } - - template - GLM_FUNC_QUALIFIER T fastLength(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); - - return fastSqrt(dot(x, x)); - } - - // fastDistance - template - GLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y) - { - return fastLength(y - x); - } - - template - GLM_FUNC_QUALIFIER T fastDistance(vec const& x, vec const& y) - { - return fastLength(y - x); - } - - // fastNormalize - template - GLM_FUNC_QUALIFIER genType fastNormalize(genType x) - { - return x > genType(0) ? genType(1) : -genType(1); - } - - template - GLM_FUNC_QUALIFIER vec fastNormalize(vec const& x) - { - return x * fastInverseSqrt(dot(x, x)); - } -}//namespace glm diff --git a/external/glm/glm/gtx/fast_trigonometry.hpp b/external/glm/glm/gtx/fast_trigonometry.hpp deleted file mode 100644 index 2650d6e4..00000000 --- a/external/glm/glm/gtx/fast_trigonometry.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/// @ref gtx_fast_trigonometry -/// @file glm/gtx/fast_trigonometry.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of trigonometric functions. - -#pragma once - -// Dependency: -#include "../gtc/constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_trigonometry extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_trigonometry - /// @{ - - /// Wrap an angle to [0 2pi[ - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T wrapAngle(T angle); - - /// Faster than the common sin function but less accurate. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastSin(T angle); - - /// Faster than the common cos function but less accurate. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastCos(T angle); - - /// Faster than the common tan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastTan(T angle); - - /// Faster than the common asin function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAsin(T angle); - - /// Faster than the common acos function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAcos(T angle); - - /// Faster than the common atan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAtan(T y, T x); - - /// Faster than the common atan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAtan(T angle); - - /// @} -}//namespace glm - -#include "fast_trigonometry.inl" diff --git a/external/glm/glm/gtx/fast_trigonometry.inl b/external/glm/glm/gtx/fast_trigonometry.inl deleted file mode 100644 index 1a710cbc..00000000 --- a/external/glm/glm/gtx/fast_trigonometry.inl +++ /dev/null @@ -1,142 +0,0 @@ -/// @ref gtx_fast_trigonometry - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER vec taylorCos(vec const& x) - { - return static_cast(1) - - (x * x) * (1.f / 2.f) - + ((x * x) * (x * x)) * (1.f / 24.f) - - (((x * x) * (x * x)) * (x * x)) * (1.f / 720.f) - + (((x * x) * (x * x)) * ((x * x) * (x * x))) * (1.f / 40320.f); - } - - template - GLM_FUNC_QUALIFIER T cos_52s(T x) - { - T const xx(x * x); - return (T(0.9999932946) + xx * (T(-0.4999124376) + xx * (T(0.0414877472) + xx * T(-0.0012712095)))); - } - - template - GLM_FUNC_QUALIFIER vec cos_52s(vec const& x) - { - return detail::functor1::call(cos_52s, x); - } -}//namespace detail - - // wrapAngle - template - GLM_FUNC_QUALIFIER T wrapAngle(T angle) - { - return abs(mod(angle, two_pi())); - } - - template - GLM_FUNC_QUALIFIER vec wrapAngle(vec const& x) - { - return detail::functor1::call(wrapAngle, x); - } - - // cos - template - GLM_FUNC_QUALIFIER T fastCos(T x) - { - T const angle(wrapAngle(x)); - - if(angle < half_pi()) - return detail::cos_52s(angle); - if(angle < pi()) - return -detail::cos_52s(pi() - angle); - if(angle < (T(3) * half_pi())) - return -detail::cos_52s(angle - pi()); - - return detail::cos_52s(two_pi() - angle); - } - - template - GLM_FUNC_QUALIFIER vec fastCos(vec const& x) - { - return detail::functor1::call(fastCos, x); - } - - // sin - template - GLM_FUNC_QUALIFIER T fastSin(T x) - { - return fastCos(half_pi() - x); - } - - template - GLM_FUNC_QUALIFIER vec fastSin(vec const& x) - { - return detail::functor1::call(fastSin, x); - } - - // tan - template - GLM_FUNC_QUALIFIER T fastTan(T x) - { - return x + (x * x * x * T(0.3333333333)) + (x * x * x * x * x * T(0.1333333333333)) + (x * x * x * x * x * x * x * T(0.0539682539)); - } - - template - GLM_FUNC_QUALIFIER vec fastTan(vec const& x) - { - return detail::functor1::call(fastTan, x); - } - - // asin - template - GLM_FUNC_QUALIFIER T fastAsin(T x) - { - return x + (x * x * x * T(0.166666667)) + (x * x * x * x * x * T(0.075)) + (x * x * x * x * x * x * x * T(0.0446428571)) + (x * x * x * x * x * x * x * x * x * T(0.0303819444));// + (x * x * x * x * x * x * x * x * x * x * x * T(0.022372159)); - } - - template - GLM_FUNC_QUALIFIER vec fastAsin(vec const& x) - { - return detail::functor1::call(fastAsin, x); - } - - // acos - template - GLM_FUNC_QUALIFIER T fastAcos(T x) - { - return T(1.5707963267948966192313216916398) - fastAsin(x); //(PI / 2) - } - - template - GLM_FUNC_QUALIFIER vec fastAcos(vec const& x) - { - return detail::functor1::call(fastAcos, x); - } - - // atan - template - GLM_FUNC_QUALIFIER T fastAtan(T y, T x) - { - T sgn = sign(y) * sign(x); - return abs(fastAtan(y / x)) * sgn; - } - - template - GLM_FUNC_QUALIFIER vec fastAtan(vec const& y, vec const& x) - { - return detail::functor2::call(fastAtan, y, x); - } - - template - GLM_FUNC_QUALIFIER T fastAtan(T x) - { - return x - (x * x * x * T(0.333333333333)) + (x * x * x * x * x * T(0.2)) - (x * x * x * x * x * x * x * T(0.1428571429)) + (x * x * x * x * x * x * x * x * x * T(0.111111111111)) - (x * x * x * x * x * x * x * x * x * x * x * T(0.0909090909)); - } - - template - GLM_FUNC_QUALIFIER vec fastAtan(vec const& x) - { - return detail::functor1::call(fastAtan, x); - } -}//namespace glm diff --git a/external/glm/glm/gtx/float_notmalize.inl b/external/glm/glm/gtx/float_notmalize.inl deleted file mode 100644 index 8cdbc5aa..00000000 --- a/external/glm/glm/gtx/float_notmalize.inl +++ /dev/null @@ -1,13 +0,0 @@ -/// @ref gtx_float_normalize - -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec floatNormalize(vec const& v) - { - return vec(v) / static_cast(std::numeric_limits::max()); - } - -}//namespace glm diff --git a/external/glm/glm/gtx/functions.hpp b/external/glm/glm/gtx/functions.hpp deleted file mode 100644 index 9f4166c4..00000000 --- a/external/glm/glm/gtx/functions.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/// @ref gtx_functions -/// @file glm/gtx/functions.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_functions GLM_GTX_functions -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// List of useful common functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/type_vec2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_functions extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_functions - /// @{ - - /// 1D gauss function - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL T gauss( - T x, - T ExpectedValue, - T StandardDeviation); - - /// 2D gauss function - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL T gauss( - vec<2, T, Q> const& Coord, - vec<2, T, Q> const& ExpectedValue, - vec<2, T, Q> const& StandardDeviation); - - /// @} -}//namespace glm - -#include "functions.inl" - diff --git a/external/glm/glm/gtx/functions.inl b/external/glm/glm/gtx/functions.inl deleted file mode 100644 index 29cbb20b..00000000 --- a/external/glm/glm/gtx/functions.inl +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref gtx_functions - -#include "../exponential.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T gauss - ( - T x, - T ExpectedValue, - T StandardDeviation - ) - { - return exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast(6.28318530717958647692528676655900576))); - } - - template - GLM_FUNC_QUALIFIER T gauss - ( - vec<2, T, Q> const& Coord, - vec<2, T, Q> const& ExpectedValue, - vec<2, T, Q> const& StandardDeviation - ) - { - vec<2, T, Q> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation); - return exp(-(Squared.x + Squared.y)); - } -}//namespace glm - diff --git a/external/glm/glm/gtx/gradient_paint.hpp b/external/glm/glm/gtx/gradient_paint.hpp deleted file mode 100644 index 6f85bf48..00000000 --- a/external/glm/glm/gtx/gradient_paint.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/// @ref gtx_gradient_paint -/// @file glm/gtx/gradient_paint.hpp -/// -/// @see core (dependence) -/// @see gtx_optimum_pow (dependence) -/// -/// @defgroup gtx_gradient_paint GLM_GTX_gradient_paint -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions that return the color of procedural gradient for specific coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/optimum_pow.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_gradient_paint extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_gradient_paint - /// @{ - - /// Return a color from a radial gradient. - /// @see - gtx_gradient_paint - template - GLM_FUNC_DECL T radialGradient( - vec<2, T, Q> const& Center, - T const& Radius, - vec<2, T, Q> const& Focal, - vec<2, T, Q> const& Position); - - /// Return a color from a linear gradient. - /// @see - gtx_gradient_paint - template - GLM_FUNC_DECL T linearGradient( - vec<2, T, Q> const& Point0, - vec<2, T, Q> const& Point1, - vec<2, T, Q> const& Position); - - /// @} -}// namespace glm - -#include "gradient_paint.inl" diff --git a/external/glm/glm/gtx/gradient_paint.inl b/external/glm/glm/gtx/gradient_paint.inl deleted file mode 100644 index 4c495e62..00000000 --- a/external/glm/glm/gtx/gradient_paint.inl +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_gradient_paint - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T radialGradient - ( - vec<2, T, Q> const& Center, - T const& Radius, - vec<2, T, Q> const& Focal, - vec<2, T, Q> const& Position - ) - { - vec<2, T, Q> F = Focal - Center; - vec<2, T, Q> D = Position - Focal; - T Radius2 = pow2(Radius); - T Fx2 = pow2(F.x); - T Fy2 = pow2(F.y); - - T Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x)); - T Denominator = Radius2 - (Fx2 + Fy2); - return Numerator / Denominator; - } - - template - GLM_FUNC_QUALIFIER T linearGradient - ( - vec<2, T, Q> const& Point0, - vec<2, T, Q> const& Point1, - vec<2, T, Q> const& Position - ) - { - vec<2, T, Q> Dist = Point1 - Point0; - return (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist); - } -}//namespace glm diff --git a/external/glm/glm/gtx/handed_coordinate_space.hpp b/external/glm/glm/gtx/handed_coordinate_space.hpp deleted file mode 100644 index 3c859689..00000000 --- a/external/glm/glm/gtx/handed_coordinate_space.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/// @ref gtx_handed_coordinate_space -/// @file glm/gtx/handed_coordinate_space.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// To know if a set of three basis vectors defines a right or left-handed coordinate system. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_handed_coordinate_space extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_handed_coordinate_space - /// @{ - - //! Return if a trihedron right handed or not. - //! From GLM_GTX_handed_coordinate_space extension. - template - GLM_FUNC_DECL bool rightHanded( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal); - - //! Return if a trihedron left handed or not. - //! From GLM_GTX_handed_coordinate_space extension. - template - GLM_FUNC_DECL bool leftHanded( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal); - - /// @} -}// namespace glm - -#include "handed_coordinate_space.inl" diff --git a/external/glm/glm/gtx/handed_coordinate_space.inl b/external/glm/glm/gtx/handed_coordinate_space.inl deleted file mode 100644 index e43c17bd..00000000 --- a/external/glm/glm/gtx/handed_coordinate_space.inl +++ /dev/null @@ -1,26 +0,0 @@ -/// @ref gtx_handed_coordinate_space - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool rightHanded - ( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal - ) - { - return dot(cross(normal, tangent), binormal) > T(0); - } - - template - GLM_FUNC_QUALIFIER bool leftHanded - ( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal - ) - { - return dot(cross(normal, tangent), binormal) < T(0); - } -}//namespace glm diff --git a/external/glm/glm/gtx/hash.hpp b/external/glm/glm/gtx/hash.hpp deleted file mode 100644 index 05dae9f4..00000000 --- a/external/glm/glm/gtx/hash.hpp +++ /dev/null @@ -1,142 +0,0 @@ -/// @ref gtx_hash -/// @file glm/gtx/hash.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_hash GLM_GTX_hash -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add std::hash support for glm types - -#pragma once - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_hash extension included") -# endif -#endif - -#include - -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../gtc/vec1.hpp" - -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" - -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" - -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" - -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" - -#if !GLM_HAS_CXX11_STL -# error "GLM_GTX_hash requires C++11 standard library support" -#endif - -namespace std -{ - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<1, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<2, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<3, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<4, T, Q> const& v) const; - }; - - template - struct hash> - { - GLM_FUNC_DECL size_t operator()(glm::qua const& q) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::tdualquat const& q) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 4, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 4, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 4, T,Q> const& m) const; - }; -} // namespace std - -#include "hash.inl" diff --git a/external/glm/glm/gtx/hash.inl b/external/glm/glm/gtx/hash.inl deleted file mode 100644 index ff71ca9f..00000000 --- a/external/glm/glm/gtx/hash.inl +++ /dev/null @@ -1,184 +0,0 @@ -/// @ref gtx_hash -/// -/// @see core (dependence) -/// -/// @defgroup gtx_hash GLM_GTX_hash -/// @ingroup gtx -/// -/// @brief Add std::hash support for glm types -/// -/// need to be included to use the features of this extension. - -namespace glm { -namespace detail -{ - GLM_INLINE void hash_combine(size_t &seed, size_t hash) - { - hash += 0x9e3779b9 + (seed << 6) + (seed >> 2); - seed ^= hash; - } -}} - -namespace std -{ - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<1, T, Q> const& v) const - { - hash hasher; - return hasher(v.x); - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<2, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<3, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - glm::detail::hash_combine(seed, hasher(v.z)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<4, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - glm::detail::hash_combine(seed, hasher(v.z)); - glm::detail::hash_combine(seed, hasher(v.w)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::qua const& q) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(q.x)); - glm::detail::hash_combine(seed, hasher(q.y)); - glm::detail::hash_combine(seed, hasher(q.z)); - glm::detail::hash_combine(seed, hasher(q.w)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::tdualquat const& q) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(q.real)); - glm::detail::hash_combine(seed, hasher(q.dual)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 2, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 3, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 2, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 3, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 2, T,Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 3, T,Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } -} diff --git a/external/glm/glm/gtx/integer.hpp b/external/glm/glm/gtx/integer.hpp deleted file mode 100644 index d0b4c61a..00000000 --- a/external/glm/glm/gtx/integer.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/// @ref gtx_integer -/// @file glm/gtx/integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_integer GLM_GTX_integer -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add support for integer for core functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/integer.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_integer extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_integer - /// @{ - - //! Returns x raised to the y power. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int pow(int x, uint y); - - //! Returns the positive square root of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int sqrt(int x); - - //! Returns the floor log2 of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL unsigned int floor_log2(unsigned int x); - - //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int mod(int x, int y); - - //! Return the factorial value of a number (!12 max, integer only) - //! From GLM_GTX_integer extension. - template - GLM_FUNC_DECL genType factorial(genType const& x); - - //! 32bit signed integer. - //! From GLM_GTX_integer extension. - typedef signed int sint; - - //! Returns x raised to the y power. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint pow(uint x, uint y); - - //! Returns the positive square root of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint sqrt(uint x); - - //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint mod(uint x, uint y); - - //! Returns the number of leading zeros. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint nlz(uint x); - - /// @} -}//namespace glm - -#include "integer.inl" diff --git a/external/glm/glm/gtx/integer.inl b/external/glm/glm/gtx/integer.inl deleted file mode 100644 index 956366b2..00000000 --- a/external/glm/glm/gtx/integer.inl +++ /dev/null @@ -1,185 +0,0 @@ -/// @ref gtx_integer - -namespace glm -{ - // pow - GLM_FUNC_QUALIFIER int pow(int x, uint y) - { - if(y == 0) - return x >= 0 ? 1 : -1; - - int result = x; - for(uint i = 1; i < y; ++i) - result *= x; - return result; - } - - // sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387 - GLM_FUNC_QUALIFIER int sqrt(int x) - { - if(x <= 1) return x; - - int NextTrial = x >> 1; - int CurrentAnswer; - - do - { - CurrentAnswer = NextTrial; - NextTrial = (NextTrial + x / NextTrial) >> 1; - } while(NextTrial < CurrentAnswer); - - return CurrentAnswer; - } - -// Henry Gordon Dietz: http://aggregate.org/MAGIC/ -namespace detail -{ - GLM_FUNC_QUALIFIER unsigned int ones32(unsigned int x) - { - /* 32-bit recursive reduction using SWAR... - but first step is mapping 2-bit values - into sum of 2 1-bit values in sneaky way - */ - x -= ((x >> 1) & 0x55555555); - x = (((x >> 2) & 0x33333333) + (x & 0x33333333)); - x = (((x >> 4) + x) & 0x0f0f0f0f); - x += (x >> 8); - x += (x >> 16); - return(x & 0x0000003f); - } -}//namespace detail - - // Henry Gordon Dietz: http://aggregate.org/MAGIC/ -/* - GLM_FUNC_QUALIFIER unsigned int floor_log2(unsigned int x) - { - x |= (x >> 1); - x |= (x >> 2); - x |= (x >> 4); - x |= (x >> 8); - x |= (x >> 16); - - return _detail::ones32(x) >> 1; - } -*/ - // mod - GLM_FUNC_QUALIFIER int mod(int x, int y) - { - return ((x % y) + y) % y; - } - - // factorial (!12 max, integer only) - template - GLM_FUNC_QUALIFIER genType factorial(genType const& x) - { - genType Temp = x; - genType Result; - for(Result = 1; Temp > 1; --Temp) - Result *= Temp; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> factorial( - vec<2, T, Q> const& x) - { - return vec<2, T, Q>( - factorial(x.x), - factorial(x.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> factorial( - vec<3, T, Q> const& x) - { - return vec<3, T, Q>( - factorial(x.x), - factorial(x.y), - factorial(x.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> factorial( - vec<4, T, Q> const& x) - { - return vec<4, T, Q>( - factorial(x.x), - factorial(x.y), - factorial(x.z), - factorial(x.w)); - } - - GLM_FUNC_QUALIFIER uint pow(uint x, uint y) - { - if (y == 0) - return 1u; - - uint result = x; - for(uint i = 1; i < y; ++i) - result *= x; - return result; - } - - GLM_FUNC_QUALIFIER uint sqrt(uint x) - { - if(x <= 1) return x; - - uint NextTrial = x >> 1; - uint CurrentAnswer; - - do - { - CurrentAnswer = NextTrial; - NextTrial = (NextTrial + x / NextTrial) >> 1; - } while(NextTrial < CurrentAnswer); - - return CurrentAnswer; - } - - GLM_FUNC_QUALIFIER uint mod(uint x, uint y) - { - return x - y * (x / y); - } - -#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC)) - - GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) - { - return 31u - findMSB(x); - } - -#else - - // Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt - GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) - { - int y, m, n; - - y = -int(x >> 16); // If left half of x is 0, - m = (y >> 16) & 16; // set n = 16. If left half - n = 16 - m; // is nonzero, set n = 0 and - x = x >> m; // shift x right 16. - // Now x is of the form 0000xxxx. - y = x - 0x100; // If positions 8-15 are 0, - m = (y >> 16) & 8; // add 8 to n and shift x left 8. - n = n + m; - x = x << m; - - y = x - 0x1000; // If positions 12-15 are 0, - m = (y >> 16) & 4; // add 4 to n and shift x left 4. - n = n + m; - x = x << m; - - y = x - 0x4000; // If positions 14-15 are 0, - m = (y >> 16) & 2; // add 2 to n and shift x left 2. - n = n + m; - x = x << m; - - y = x >> 14; // Set y = 0, 1, 2, or 3. - m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp. - return unsigned(n + 2 - m); - } - -#endif//(GLM_COMPILER) - -}//namespace glm diff --git a/external/glm/glm/gtx/intersect.hpp b/external/glm/glm/gtx/intersect.hpp deleted file mode 100644 index 3c78f2b8..00000000 --- a/external/glm/glm/gtx/intersect.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref gtx_intersect -/// @file glm/gtx/intersect.hpp -/// -/// @see core (dependence) -/// @see gtx_closest_point (dependence) -/// -/// @defgroup gtx_intersect GLM_GTX_intersect -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add intersection functions - -#pragma once - -// Dependency: -#include -#include -#include "../glm.hpp" -#include "../geometric.hpp" -#include "../gtx/closest_point.hpp" -#include "../gtx/vector_query.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_closest_point extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_intersect - /// @{ - - //! Compute the intersection of a ray and a plane. - //! Ray direction and plane normal must be unit length. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRayPlane( - genType const& orig, genType const& dir, - genType const& planeOrig, genType const& planeNormal, - typename genType::value_type & intersectionDistance); - - //! Compute the intersection of a ray and a triangle. - /// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/ - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRayTriangle( - vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, - vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2, - vec<2, T, Q>& baryPosition, T& distance); - - //! Compute the intersection of a line and a triangle. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectLineTriangle( - genType const& orig, genType const& dir, - genType const& vert0, genType const& vert1, genType const& vert2, - genType & position); - - //! Compute the intersection distance of a ray and a sphere. - //! The ray direction vector is unit length. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRaySphere( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, typename genType::value_type const sphereRadiusSquered, - typename genType::value_type & intersectionDistance); - - //! Compute the intersection of a ray and a sphere. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRaySphere( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadius, - genType & intersectionPosition, genType & intersectionNormal); - - //! Compute the intersection of a line and a sphere. - //! From GLM_GTX_intersect extension - template - GLM_FUNC_DECL bool intersectLineSphere( - genType const& point0, genType const& point1, - genType const& sphereCenter, typename genType::value_type sphereRadius, - genType & intersectionPosition1, genType & intersectionNormal1, - genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType()); - - /// @} -}//namespace glm - -#include "intersect.inl" diff --git a/external/glm/glm/gtx/intersect.inl b/external/glm/glm/gtx/intersect.inl deleted file mode 100644 index 54ecb4d9..00000000 --- a/external/glm/glm/gtx/intersect.inl +++ /dev/null @@ -1,200 +0,0 @@ -/// @ref gtx_intersect - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool intersectRayPlane - ( - genType const& orig, genType const& dir, - genType const& planeOrig, genType const& planeNormal, - typename genType::value_type & intersectionDistance - ) - { - typename genType::value_type d = glm::dot(dir, planeNormal); - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - - if(glm::abs(d) > Epsilon) // if dir and planeNormal are not perpendicular - { - typename genType::value_type const tmp_intersectionDistance = glm::dot(planeOrig - orig, planeNormal) / d; - if (tmp_intersectionDistance > static_cast(0)) { // allow only intersections - intersectionDistance = tmp_intersectionDistance; - return true; - } - } - - return false; - } - - template - GLM_FUNC_QUALIFIER bool intersectRayTriangle - ( - vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, - vec<3, T, Q> const& vert0, vec<3, T, Q> const& vert1, vec<3, T, Q> const& vert2, - vec<2, T, Q>& baryPosition, T& distance - ) - { - // find vectors for two edges sharing vert0 - vec<3, T, Q> const edge1 = vert1 - vert0; - vec<3, T, Q> const edge2 = vert2 - vert0; - - // begin calculating determinant - also used to calculate U parameter - vec<3, T, Q> const p = glm::cross(dir, edge2); - - // if determinant is near zero, ray lies in plane of triangle - T const det = glm::dot(edge1, p); - - vec<3, T, Q> Perpendicular(0); - - if(det > std::numeric_limits::epsilon()) - { - // calculate distance from vert0 to ray origin - vec<3, T, Q> const dist = orig - vert0; - - // calculate U parameter and test bounds - baryPosition.x = glm::dot(dist, p); - if(baryPosition.x < static_cast(0) || baryPosition.x > det) - return false; - - // prepare to test V parameter - Perpendicular = glm::cross(dist, edge1); - - // calculate V parameter and test bounds - baryPosition.y = glm::dot(dir, Perpendicular); - if((baryPosition.y < static_cast(0)) || ((baryPosition.x + baryPosition.y) > det)) - return false; - } - else if(det < -std::numeric_limits::epsilon()) - { - // calculate distance from vert0 to ray origin - vec<3, T, Q> const dist = orig - vert0; - - // calculate U parameter and test bounds - baryPosition.x = glm::dot(dist, p); - if((baryPosition.x > static_cast(0)) || (baryPosition.x < det)) - return false; - - // prepare to test V parameter - Perpendicular = glm::cross(dist, edge1); - - // calculate V parameter and test bounds - baryPosition.y = glm::dot(dir, Perpendicular); - if((baryPosition.y > static_cast(0)) || (baryPosition.x + baryPosition.y < det)) - return false; - } - else - return false; // ray is parallel to the plane of the triangle - - T inv_det = static_cast(1) / det; - - // calculate distance, ray intersects triangle - distance = glm::dot(edge2, Perpendicular) * inv_det; - baryPosition *= inv_det; - - return true; - } - - template - GLM_FUNC_QUALIFIER bool intersectLineTriangle - ( - genType const& orig, genType const& dir, - genType const& vert0, genType const& vert1, genType const& vert2, - genType & position - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - - genType edge1 = vert1 - vert0; - genType edge2 = vert2 - vert0; - - genType Perpendicular = cross(dir, edge2); - - float det = dot(edge1, Perpendicular); - - if (det > -Epsilon && det < Epsilon) - return false; - typename genType::value_type inv_det = typename genType::value_type(1) / det; - - genType Tengant = orig - vert0; - - position.y = dot(Tengant, Perpendicular) * inv_det; - if (position.y < typename genType::value_type(0) || position.y > typename genType::value_type(1)) - return false; - - genType Cotengant = cross(Tengant, edge1); - - position.z = dot(dir, Cotengant) * inv_det; - if (position.z < typename genType::value_type(0) || position.y + position.z > typename genType::value_type(1)) - return false; - - position.x = dot(edge2, Cotengant) * inv_det; - - return true; - } - - template - GLM_FUNC_QUALIFIER bool intersectRaySphere - ( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadiusSquered, - typename genType::value_type & intersectionDistance - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - genType diff = sphereCenter - rayStarting; - typename genType::value_type t0 = dot(diff, rayNormalizedDirection); - typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; - if( dSquared > sphereRadiusSquered ) - { - return false; - } - typename genType::value_type t1 = sqrt( sphereRadiusSquered - dSquared ); - intersectionDistance = t0 > t1 + Epsilon ? t0 - t1 : t0 + t1; - return intersectionDistance > Epsilon; - } - - template - GLM_FUNC_QUALIFIER bool intersectRaySphere - ( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadius, - genType & intersectionPosition, genType & intersectionNormal - ) - { - typename genType::value_type distance; - if( intersectRaySphere( rayStarting, rayNormalizedDirection, sphereCenter, sphereRadius * sphereRadius, distance ) ) - { - intersectionPosition = rayStarting + rayNormalizedDirection * distance; - intersectionNormal = (intersectionPosition - sphereCenter) / sphereRadius; - return true; - } - return false; - } - - template - GLM_FUNC_QUALIFIER bool intersectLineSphere - ( - genType const& point0, genType const& point1, - genType const& sphereCenter, typename genType::value_type sphereRadius, - genType & intersectionPoint1, genType & intersectionNormal1, - genType & intersectionPoint2, genType & intersectionNormal2 - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - genType dir = normalize(point1 - point0); - genType diff = sphereCenter - point0; - typename genType::value_type t0 = dot(diff, dir); - typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; - if( dSquared > sphereRadius * sphereRadius ) - { - return false; - } - typename genType::value_type t1 = sqrt( sphereRadius * sphereRadius - dSquared ); - if( t0 < t1 + Epsilon ) - t1 = -t1; - intersectionPoint1 = point0 + dir * (t0 - t1); - intersectionNormal1 = (intersectionPoint1 - sphereCenter) / sphereRadius; - intersectionPoint2 = point0 + dir * (t0 + t1); - intersectionNormal2 = (intersectionPoint2 - sphereCenter) / sphereRadius; - return true; - } -}//namespace glm diff --git a/external/glm/glm/gtx/io.hpp b/external/glm/glm/gtx/io.hpp deleted file mode 100644 index 8d974f00..00000000 --- a/external/glm/glm/gtx/io.hpp +++ /dev/null @@ -1,201 +0,0 @@ -/// @ref gtx_io -/// @file glm/gtx/io.hpp -/// @author Jan P Springer (regnirpsj@gmail.com) -/// -/// @see core (dependence) -/// @see gtc_matrix_access (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_io GLM_GTX_io -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// std::[w]ostream support for glm types -/// -/// std::[w]ostream support for glm types + qualifier/width/etc. manipulators -/// based on howard hinnant's std::chrono io proposal -/// [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html] - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_io extension included") -# endif -#endif - -#include // std::basic_ostream<> (fwd) -#include // std::locale, std::locale::facet, std::locale::id -#include // std::pair<> - -namespace glm -{ - /// @addtogroup gtx_io - /// @{ - - namespace io - { - enum order_type { column_major, row_major}; - - template - class format_punct : public std::locale::facet - { - typedef CTy char_type; - - public: - - static std::locale::id id; - - bool formatted; - unsigned precision; - unsigned width; - char_type separator; - char_type delim_left; - char_type delim_right; - char_type space; - char_type newline; - order_type order; - - GLM_FUNC_DECL explicit format_punct(size_t a = 0); - GLM_FUNC_DECL explicit format_punct(format_punct const&); - }; - - template > - class basic_state_saver { - - public: - - GLM_FUNC_DECL explicit basic_state_saver(std::basic_ios&); - GLM_FUNC_DECL ~basic_state_saver(); - - private: - - typedef ::std::basic_ios state_type; - typedef typename state_type::char_type char_type; - typedef ::std::ios_base::fmtflags flags_type; - typedef ::std::streamsize streamsize_type; - typedef ::std::locale const locale_type; - - state_type& state_; - flags_type flags_; - streamsize_type precision_; - streamsize_type width_; - char_type fill_; - locale_type locale_; - - GLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&); - }; - - typedef basic_state_saver state_saver; - typedef basic_state_saver wstate_saver; - - template > - class basic_format_saver - { - public: - - GLM_FUNC_DECL explicit basic_format_saver(std::basic_ios&); - GLM_FUNC_DECL ~basic_format_saver(); - - private: - - basic_state_saver const bss_; - - GLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&); - }; - - typedef basic_format_saver format_saver; - typedef basic_format_saver wformat_saver; - - struct precision - { - unsigned value; - - GLM_FUNC_DECL explicit precision(unsigned); - }; - - struct width - { - unsigned value; - - GLM_FUNC_DECL explicit width(unsigned); - }; - - template - struct delimeter - { - CTy value[3]; - - GLM_FUNC_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ','); - }; - - struct order - { - order_type value; - - GLM_FUNC_DECL explicit order(order_type); - }; - - // functions, inlined (inline) - - template - FTy const& get_facet(std::basic_ios&); - template - std::basic_ios& formatted(std::basic_ios&); - template - std::basic_ios& unformattet(std::basic_ios&); - - template - std::basic_ostream& operator<<(std::basic_ostream&, precision const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, width const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, delimeter const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, order const&); - }//namespace io - - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, qua const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<1, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 4, T, Q> const&); - - template - GLM_FUNC_DECL std::basic_ostream & operator<<(std::basic_ostream &, - std::pair const, mat<4, 4, T, Q> const> const&); - - /// @} -}//namespace glm - -#include "io.inl" diff --git a/external/glm/glm/gtx/io.inl b/external/glm/glm/gtx/io.inl deleted file mode 100644 index a3a1bb6c..00000000 --- a/external/glm/glm/gtx/io.inl +++ /dev/null @@ -1,440 +0,0 @@ -/// @ref gtx_io -/// @author Jan P Springer (regnirpsj@gmail.com) - -#include // std::fixed, std::setfill<>, std::setprecision, std::right, std::setw -#include // std::basic_ostream<> -#include "../gtc/matrix_access.hpp" // glm::col, glm::row -#include "../gtx/type_trait.hpp" // glm::type<> - -namespace glm{ -namespace io -{ - template - GLM_FUNC_QUALIFIER format_punct::format_punct(size_t a) - : std::locale::facet(a) - , formatted(true) - , precision(3) - , width(1 + 4 + 1 + precision) - , separator(',') - , delim_left('[') - , delim_right(']') - , space(' ') - , newline('\n') - , order(column_major) - {} - - template - GLM_FUNC_QUALIFIER format_punct::format_punct(format_punct const& a) - : std::locale::facet(0) - , formatted(a.formatted) - , precision(a.precision) - , width(a.width) - , separator(a.separator) - , delim_left(a.delim_left) - , delim_right(a.delim_right) - , space(a.space) - , newline(a.newline) - , order(a.order) - {} - - template std::locale::id format_punct::id; - - template - GLM_FUNC_QUALIFIER basic_state_saver::basic_state_saver(std::basic_ios& a) - : state_(a) - , flags_(a.flags()) - , precision_(a.precision()) - , width_(a.width()) - , fill_(a.fill()) - , locale_(a.getloc()) - {} - - template - GLM_FUNC_QUALIFIER basic_state_saver::~basic_state_saver() - { - state_.imbue(locale_); - state_.fill(fill_); - state_.width(width_); - state_.precision(precision_); - state_.flags(flags_); - } - - template - GLM_FUNC_QUALIFIER basic_format_saver::basic_format_saver(std::basic_ios& a) - : bss_(a) - { - a.imbue(std::locale(a.getloc(), new format_punct(get_facet >(a)))); - } - - template - GLM_FUNC_QUALIFIER - basic_format_saver::~basic_format_saver() - {} - - GLM_FUNC_QUALIFIER precision::precision(unsigned a) - : value(a) - {} - - GLM_FUNC_QUALIFIER width::width(unsigned a) - : value(a) - {} - - template - GLM_FUNC_QUALIFIER delimeter::delimeter(CTy a, CTy b, CTy c) - : value() - { - value[0] = a; - value[1] = b; - value[2] = c; - } - - GLM_FUNC_QUALIFIER order::order(order_type a) - : value(a) - {} - - template - GLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios& ios) - { - if(!std::has_facet(ios.getloc())) - ios.imbue(std::locale(ios.getloc(), new FTy)); - - return std::use_facet(ios.getloc()); - } - - template - GLM_FUNC_QUALIFIER std::basic_ios& formatted(std::basic_ios& ios) - { - const_cast&>(get_facet >(ios)).formatted = true; - return ios; - } - - template - GLM_FUNC_QUALIFIER std::basic_ios& unformatted(std::basic_ios& ios) - { - const_cast&>(get_facet >(ios)).formatted = false; - return ios; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, precision const& a) - { - const_cast&>(get_facet >(os)).precision = a.value; - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, width const& a) - { - const_cast&>(get_facet >(os)).width = a.value; - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, delimeter const& a) - { - format_punct & fmt(const_cast&>(get_facet >(os))); - - fmt.delim_left = a.value[0]; - fmt.delim_right = a.value[1]; - fmt.separator = a.value[2]; - - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, order const& a) - { - const_cast&>(get_facet >(os)).order = a.value; - return os; - } -} // namespace io - -namespace detail -{ - template - GLM_FUNC_QUALIFIER std::basic_ostream& - print_vector_on(std::basic_ostream& os, V const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - - length_t const& components(type::components); - - if(fmt.formatted) - { - io::basic_state_saver const bss(os); - - os << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left; - - for(length_t i(0); i < components; ++i) - { - os << std::setw(fmt.width) << a[i]; - if(components-1 != i) - os << fmt.separator; - } - - os << fmt.delim_right; - } - else - { - for(length_t i(0); i < components; ++i) - { - os << a[i]; - - if(components-1 != i) - os << fmt.space; - } - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, qua const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<1, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<2, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<3, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<4, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - -namespace detail -{ - template class M, length_t C, length_t R, typename T, qualifier Q> - GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_on(std::basic_ostream& os, M const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - - length_t const& cols(type >::cols); - length_t const& rows(type >::rows); - - if(fmt.formatted) - { - os << fmt.newline << fmt.delim_left; - - switch(fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < rows; ++i) - { - if (0 != i) - os << fmt.space; - - os << row(a, i); - - if(rows-1 != i) - os << fmt.newline; - } - } - break; - - case io::row_major: - { - for(length_t i(0); i < cols; ++i) - { - if(0 != i) - os << fmt.space; - - os << column(a, i); - - if(cols-1 != i) - os << fmt.newline; - } - } - break; - } - - os << fmt.delim_right; - } - else - { - switch (fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < cols; ++i) - { - os << column(a, i); - - if(cols - 1 != i) - os << fmt.space; - } - } - break; - - case io::row_major: - { - for (length_t i(0); i < rows; ++i) - { - os << row(a, i); - - if (rows-1 != i) - os << fmt.space; - } - } - break; - } - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<3, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - -namespace detail -{ - template class M, length_t C, length_t R, typename T, qualifier Q> - GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_pair_on(std::basic_ostream& os, std::pair const, M const> const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - M const& ml(a.first); - M const& mr(a.second); - length_t const& cols(type >::cols); - length_t const& rows(type >::rows); - - if(fmt.formatted) - { - os << fmt.newline << fmt.delim_left; - - switch(fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < rows; ++i) - { - if(0 != i) - os << fmt.space; - - os << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i); - - if(rows-1 != i) - os << fmt.newline; - } - } - break; - case io::row_major: - { - for(length_t i(0); i < cols; ++i) - { - if(0 != i) - os << fmt.space; - - os << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i); - - if(cols-1 != i) - os << fmt.newline; - } - } - break; - } - - os << fmt.delim_right; - } - else - { - os << ml << fmt.space << mr; - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<( - std::basic_ostream & os, - std::pair const, - mat<4, 4, T, Q> const> const& a) - { - return detail::print_matrix_pair_on(os, a); - } -}//namespace glm diff --git a/external/glm/glm/gtx/log_base.hpp b/external/glm/glm/gtx/log_base.hpp deleted file mode 100644 index ba28c9d7..00000000 --- a/external/glm/glm/gtx/log_base.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_log_base -/// @file glm/gtx/log_base.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_log_base GLM_GTX_log_base -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Logarithm for any base. base can be a vector or a scalar. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_log_base extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_log_base - /// @{ - - /// Logarithm for any base. - /// From GLM_GTX_log_base. - template - GLM_FUNC_DECL genType log( - genType const& x, - genType const& base); - - /// Logarithm for any base. - /// From GLM_GTX_log_base. - template - GLM_FUNC_DECL vec sign( - vec const& x, - vec const& base); - - /// @} -}//namespace glm - -#include "log_base.inl" diff --git a/external/glm/glm/gtx/log_base.inl b/external/glm/glm/gtx/log_base.inl deleted file mode 100644 index 4bbb8e89..00000000 --- a/external/glm/glm/gtx/log_base.inl +++ /dev/null @@ -1,16 +0,0 @@ -/// @ref gtx_log_base - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType log(genType const& x, genType const& base) - { - return glm::log(x) / glm::log(base); - } - - template - GLM_FUNC_QUALIFIER vec log(vec const& x, vec const& base) - { - return glm::log(x) / glm::log(base); - } -}//namespace glm diff --git a/external/glm/glm/gtx/matrix_cross_product.hpp b/external/glm/glm/gtx/matrix_cross_product.hpp deleted file mode 100644 index 1e585f9a..00000000 --- a/external/glm/glm/gtx/matrix_cross_product.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/// @ref gtx_matrix_cross_product -/// @file glm/gtx/matrix_cross_product.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build cross product matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_cross_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_cross_product - /// @{ - - //! Build a cross product matrix. - //! From GLM_GTX_matrix_cross_product extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> matrixCross3( - vec<3, T, Q> const& x); - - //! Build a cross product matrix. - //! From GLM_GTX_matrix_cross_product extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> matrixCross4( - vec<3, T, Q> const& x); - - /// @} -}//namespace glm - -#include "matrix_cross_product.inl" diff --git a/external/glm/glm/gtx/matrix_cross_product.inl b/external/glm/glm/gtx/matrix_cross_product.inl deleted file mode 100644 index 3a153977..00000000 --- a/external/glm/glm/gtx/matrix_cross_product.inl +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref gtx_matrix_cross_product - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> matrixCross3 - ( - vec<3, T, Q> const& x - ) - { - mat<3, 3, T, Q> Result(T(0)); - Result[0][1] = x.z; - Result[1][0] = -x.z; - Result[0][2] = -x.y; - Result[2][0] = x.y; - Result[1][2] = x.x; - Result[2][1] = -x.x; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> matrixCross4 - ( - vec<3, T, Q> const& x - ) - { - mat<4, 4, T, Q> Result(T(0)); - Result[0][1] = x.z; - Result[1][0] = -x.z; - Result[0][2] = -x.y; - Result[2][0] = x.y; - Result[1][2] = x.x; - Result[2][1] = -x.x; - return Result; - } - -}//namespace glm diff --git a/external/glm/glm/gtx/matrix_decompose.hpp b/external/glm/glm/gtx/matrix_decompose.hpp deleted file mode 100644 index acd7a7f0..00000000 --- a/external/glm/glm/gtx/matrix_decompose.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/// @ref gtx_matrix_decompose -/// @file glm/gtx/matrix_decompose.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_decompose GLM_GTX_matrix_decompose -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Decomposes a model matrix to translations, rotation and scale components - -#pragma once - -// Dependencies -#include "../mat4x4.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../geometric.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtc/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_decompose extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_decompose - /// @{ - - /// Decomposes a model matrix to translations, rotation and scale components - /// @see gtx_matrix_decompose - template - GLM_FUNC_DECL bool decompose( - mat<4, 4, T, Q> const& modelMatrix, - vec<3, T, Q> & scale, qua & orientation, vec<3, T, Q> & translation, vec<3, T, Q> & skew, vec<4, T, Q> & perspective); - - /// @} -}//namespace glm - -#include "matrix_decompose.inl" diff --git a/external/glm/glm/gtx/matrix_decompose.inl b/external/glm/glm/gtx/matrix_decompose.inl deleted file mode 100644 index 694f5eca..00000000 --- a/external/glm/glm/gtx/matrix_decompose.inl +++ /dev/null @@ -1,186 +0,0 @@ -/// @ref gtx_matrix_decompose - -#include "../gtc/constants.hpp" -#include "../gtc/epsilon.hpp" - -namespace glm{ -namespace detail -{ - /// Make a linear combination of two vectors and return the result. - // result = (a * ascl) + (b * bscl) - template - GLM_FUNC_QUALIFIER vec<3, T, Q> combine( - vec<3, T, Q> const& a, - vec<3, T, Q> const& b, - T ascl, T bscl) - { - return (a * ascl) + (b * bscl); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> scale(vec<3, T, Q> const& v, T desiredLength) - { - return v * desiredLength / length(v); - } -}//namespace detail - - // Matrix decompose - // http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp - // Decomposes the mode matrix to translations,rotation scale components - - template - GLM_FUNC_QUALIFIER bool decompose(mat<4, 4, T, Q> const& ModelMatrix, vec<3, T, Q> & Scale, qua & Orientation, vec<3, T, Q> & Translation, vec<3, T, Q> & Skew, vec<4, T, Q> & Perspective) - { - mat<4, 4, T, Q> LocalMatrix(ModelMatrix); - - // Normalize the matrix. - if(epsilonEqual(LocalMatrix[3][3], static_cast(0), epsilon())) - return false; - - for(length_t i = 0; i < 4; ++i) - for(length_t j = 0; j < 4; ++j) - LocalMatrix[i][j] /= LocalMatrix[3][3]; - - // perspectiveMatrix is used to solve for perspective, but it also provides - // an easy way to test for singularity of the upper 3x3 component. - mat<4, 4, T, Q> PerspectiveMatrix(LocalMatrix); - - for(length_t i = 0; i < 3; i++) - PerspectiveMatrix[i][3] = static_cast(0); - PerspectiveMatrix[3][3] = static_cast(1); - - /// TODO: Fixme! - if(epsilonEqual(determinant(PerspectiveMatrix), static_cast(0), epsilon())) - return false; - - // First, isolate perspective. This is the messiest. - if( - epsilonNotEqual(LocalMatrix[0][3], static_cast(0), epsilon()) || - epsilonNotEqual(LocalMatrix[1][3], static_cast(0), epsilon()) || - epsilonNotEqual(LocalMatrix[2][3], static_cast(0), epsilon())) - { - // rightHandSide is the right hand side of the equation. - vec<4, T, Q> RightHandSide; - RightHandSide[0] = LocalMatrix[0][3]; - RightHandSide[1] = LocalMatrix[1][3]; - RightHandSide[2] = LocalMatrix[2][3]; - RightHandSide[3] = LocalMatrix[3][3]; - - // Solve the equation by inverting PerspectiveMatrix and multiplying - // rightHandSide by the inverse. (This is the easiest way, not - // necessarily the best.) - mat<4, 4, T, Q> InversePerspectiveMatrix = glm::inverse(PerspectiveMatrix);// inverse(PerspectiveMatrix, inversePerspectiveMatrix); - mat<4, 4, T, Q> TransposedInversePerspectiveMatrix = glm::transpose(InversePerspectiveMatrix);// transposeMatrix4(inversePerspectiveMatrix, transposedInversePerspectiveMatrix); - - Perspective = TransposedInversePerspectiveMatrix * RightHandSide; - // v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix, perspectivePoint); - - // Clear the perspective partition - LocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast(0); - LocalMatrix[3][3] = static_cast(1); - } - else - { - // No perspective. - Perspective = vec<4, T, Q>(0, 0, 0, 1); - } - - // Next take care of translation (easy). - Translation = vec<3, T, Q>(LocalMatrix[3]); - LocalMatrix[3] = vec<4, T, Q>(0, 0, 0, LocalMatrix[3].w); - - vec<3, T, Q> Row[3], Pdum3; - - // Now get scale and shear. - for(length_t i = 0; i < 3; ++i) - for(length_t j = 0; j < 3; ++j) - Row[i][j] = LocalMatrix[i][j]; - - // Compute X scale factor and normalize first row. - Scale.x = length(Row[0]);// v3Length(Row[0]); - - Row[0] = detail::scale(Row[0], static_cast(1)); - - // Compute XY shear factor and make 2nd row orthogonal to 1st. - Skew.z = dot(Row[0], Row[1]); - Row[1] = detail::combine(Row[1], Row[0], static_cast(1), -Skew.z); - - // Now, compute Y scale and normalize 2nd row. - Scale.y = length(Row[1]); - Row[1] = detail::scale(Row[1], static_cast(1)); - Skew.z /= Scale.y; - - // Compute XZ and YZ shears, orthogonalize 3rd row. - Skew.y = glm::dot(Row[0], Row[2]); - Row[2] = detail::combine(Row[2], Row[0], static_cast(1), -Skew.y); - Skew.x = glm::dot(Row[1], Row[2]); - Row[2] = detail::combine(Row[2], Row[1], static_cast(1), -Skew.x); - - // Next, get Z scale and normalize 3rd row. - Scale.z = length(Row[2]); - Row[2] = detail::scale(Row[2], static_cast(1)); - Skew.y /= Scale.z; - Skew.x /= Scale.z; - - // At this point, the matrix (in rows[]) is orthonormal. - // Check for a coordinate system flip. If the determinant - // is -1, then negate the matrix and the scaling factors. - Pdum3 = cross(Row[1], Row[2]); // v3Cross(row[1], row[2], Pdum3); - if(dot(Row[0], Pdum3) < 0) - { - for(length_t i = 0; i < 3; i++) - { - Scale[i] *= static_cast(-1); - Row[i] *= static_cast(-1); - } - } - - // Now, get the rotations out, as described in the gem. - - // FIXME - Add the ability to return either quaternions (which are - // easier to recompose with) or Euler angles (rx, ry, rz), which - // are easier for authors to deal with. The latter will only be useful - // when we fix https://bugs.webkit.org/show_bug.cgi?id=23799, so I - // will leave the Euler angle code here for now. - - // ret.rotateY = asin(-Row[0][2]); - // if (cos(ret.rotateY) != 0) { - // ret.rotateX = atan2(Row[1][2], Row[2][2]); - // ret.rotateZ = atan2(Row[0][1], Row[0][0]); - // } else { - // ret.rotateX = atan2(-Row[2][0], Row[1][1]); - // ret.rotateZ = 0; - // } - - int i, j, k = 0; - T root, trace = Row[0].x + Row[1].y + Row[2].z; - if(trace > static_cast(0)) - { - root = sqrt(trace + static_cast(1.0)); - Orientation.w = static_cast(0.5) * root; - root = static_cast(0.5) / root; - Orientation.x = root * (Row[1].z - Row[2].y); - Orientation.y = root * (Row[2].x - Row[0].z); - Orientation.z = root * (Row[0].y - Row[1].x); - } // End if > 0 - else - { - static int Next[3] = {1, 2, 0}; - i = 0; - if(Row[1].y > Row[0].x) i = 1; - if(Row[2].z > Row[i][i]) i = 2; - j = Next[i]; - k = Next[j]; - - root = sqrt(Row[i][i] - Row[j][j] - Row[k][k] + static_cast(1.0)); - - Orientation[i] = static_cast(0.5) * root; - root = static_cast(0.5) / root; - Orientation[j] = root * (Row[i][j] + Row[j][i]); - Orientation[k] = root * (Row[i][k] + Row[k][i]); - Orientation.w = root * (Row[j][k] - Row[k][j]); - } // End if <= 0 - - return true; - } -}//namespace glm diff --git a/external/glm/glm/gtx/matrix_factorisation.hpp b/external/glm/glm/gtx/matrix_factorisation.hpp deleted file mode 100644 index 5a975d60..00000000 --- a/external/glm/glm/gtx/matrix_factorisation.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/// @ref gtx_matrix_factorisation -/// @file glm/gtx/matrix_factorisation.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_factorisation GLM_GTX_matrix_factorisation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions to factor matrices in various forms - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_factorisation extension included") -# endif -#endif - -/* -Suggestions: - - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances. - - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc... -*/ - -namespace glm -{ - /// @addtogroup gtx_matrix_factorisation - /// @{ - - /// Flips the matrix rows up and down. - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL mat flipud(mat const& in); - - /// Flips the matrix columns right and left. - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL mat fliplr(mat const& in); - - /// Performs QR factorisation of a matrix. - /// Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in. - /// Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m). - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r); - - /// Performs RQ factorisation of a matrix. - /// Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in. - /// Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left. - /// Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m). - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q); - - /// @} -} - -#include "matrix_factorisation.inl" diff --git a/external/glm/glm/gtx/matrix_factorisation.inl b/external/glm/glm/gtx/matrix_factorisation.inl deleted file mode 100644 index c479b8ad..00000000 --- a/external/glm/glm/gtx/matrix_factorisation.inl +++ /dev/null @@ -1,84 +0,0 @@ -/// @ref gtx_matrix_factorisation - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat flipud(mat const& in) - { - mat tin = transpose(in); - tin = fliplr(tin); - mat out = transpose(tin); - - return out; - } - - template - GLM_FUNC_QUALIFIER mat fliplr(mat const& in) - { - mat out; - for (length_t i = 0; i < C; i++) - { - out[i] = in[(C - i) - 1]; - } - - return out; - } - - template - GLM_FUNC_QUALIFIER void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r) - { - // Uses modified Gram-Schmidt method - // Source: https://en.wikipedia.org/wiki/GramSchmidt_process - // And https://en.wikipedia.org/wiki/QR_decomposition - - //For all the linearly independs columns of the input... - // (there can be no more linearly independents columns than there are rows.) - for (length_t i = 0; i < (C < R ? C : R); i++) - { - //Copy in Q the input's i-th column. - q[i] = in[i]; - - //j = [0,i[ - // Make that column orthogonal to all the previous ones by substracting to it the non-orthogonal projection of all the previous columns. - // Also: Fill the zero elements of R - for (length_t j = 0; j < i; j++) - { - q[i] -= dot(q[i], q[j])*q[j]; - r[j][i] = 0; - } - - //Now, Q i-th column is orthogonal to all the previous columns. Normalize it. - q[i] = normalize(q[i]); - - //j = [i,C[ - //Finally, compute the corresponding coefficients of R by computing the projection of the resulting column on the other columns of the input. - for (length_t j = i; j < C; j++) - { - r[j][i] = dot(in[j], q[i]); - } - } - } - - template - GLM_FUNC_QUALIFIER void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q) - { - // From https://en.wikipedia.org/wiki/QR_decomposition: - // The RQ decomposition transforms a matrix A into the product of an upper triangular matrix R (also known as right-triangular) and an orthogonal matrix Q. The only difference from QR decomposition is the order of these matrices. - // QR decomposition is GramSchmidt orthogonalization of columns of A, started from the first column. - // RQ decomposition is GramSchmidt orthogonalization of rows of A, started from the last row. - - mat tin = transpose(in); - tin = fliplr(tin); - - mat tr; - mat<(C < R ? C : R), C, T, Q> tq; - qr_decompose(tin, tq, tr); - - tr = fliplr(tr); - r = transpose(tr); - r = fliplr(r); - - tq = fliplr(tq); - q = transpose(tq); - } -} //namespace glm diff --git a/external/glm/glm/gtx/matrix_interpolation.hpp b/external/glm/glm/gtx/matrix_interpolation.hpp deleted file mode 100644 index 7d5ad4cd..00000000 --- a/external/glm/glm/gtx/matrix_interpolation.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_matrix_interpolation -/// @file glm/gtx/matrix_interpolation.hpp -/// @author Ghenadii Ursachi (the.asteroth@gmail.com) -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_interpolation GLM_GTX_matrix_interpolation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Allows to directly interpolate two matrices. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_interpolation extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_interpolation - /// @{ - - /// Get the axis and angle of the rotation from a matrix. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL void axisAngle( - mat<4, 4, T, Q> const& Mat, vec<3, T, Q> & Axis, T & Angle); - - /// Build a matrix from axis and angle. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> axisAngleMatrix( - vec<3, T, Q> const& Axis, T const Angle); - - /// Extracts the rotation part of a matrix. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> extractMatrixRotation( - mat<4, 4, T, Q> const& Mat); - - /// Build a interpolation of 4 * 4 matrixes. - /// From GLM_GTX_matrix_interpolation extension. - /// Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results. - template - GLM_FUNC_DECL mat<4, 4, T, Q> interpolate( - mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const Delta); - - /// @} -}//namespace glm - -#include "matrix_interpolation.inl" diff --git a/external/glm/glm/gtx/matrix_interpolation.inl b/external/glm/glm/gtx/matrix_interpolation.inl deleted file mode 100644 index de40b7d7..00000000 --- a/external/glm/glm/gtx/matrix_interpolation.inl +++ /dev/null @@ -1,129 +0,0 @@ -/// @ref gtx_matrix_interpolation - -#include "../gtc/constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER void axisAngle(mat<4, 4, T, Q> const& m, vec<3, T, Q> & axis, T& angle) - { - T epsilon = static_cast(0.01); - T epsilon2 = static_cast(0.1); - - if((abs(m[1][0] - m[0][1]) < epsilon) && (abs(m[2][0] - m[0][2]) < epsilon) && (abs(m[2][1] - m[1][2]) < epsilon)) - { - if ((abs(m[1][0] + m[0][1]) < epsilon2) && (abs(m[2][0] + m[0][2]) < epsilon2) && (abs(m[2][1] + m[1][2]) < epsilon2) && (abs(m[0][0] + m[1][1] + m[2][2] - static_cast(3.0)) < epsilon2)) - { - angle = static_cast(0.0); - axis.x = static_cast(1.0); - axis.y = static_cast(0.0); - axis.z = static_cast(0.0); - return; - } - angle = static_cast(3.1415926535897932384626433832795); - T xx = (m[0][0] + static_cast(1.0)) * static_cast(0.5); - T yy = (m[1][1] + static_cast(1.0)) * static_cast(0.5); - T zz = (m[2][2] + static_cast(1.0)) * static_cast(0.5); - T xy = (m[1][0] + m[0][1]) * static_cast(0.25); - T xz = (m[2][0] + m[0][2]) * static_cast(0.25); - T yz = (m[2][1] + m[1][2]) * static_cast(0.25); - if((xx > yy) && (xx > zz)) - { - if(xx < epsilon) - { - axis.x = static_cast(0.0); - axis.y = static_cast(0.7071); - axis.z = static_cast(0.7071); - } - else - { - axis.x = sqrt(xx); - axis.y = xy / axis.x; - axis.z = xz / axis.x; - } - } - else if (yy > zz) - { - if(yy < epsilon) - { - axis.x = static_cast(0.7071); - axis.y = static_cast(0.0); - axis.z = static_cast(0.7071); - } - else - { - axis.y = sqrt(yy); - axis.x = xy / axis.y; - axis.z = yz / axis.y; - } - } - else - { - if (zz < epsilon) - { - axis.x = static_cast(0.7071); - axis.y = static_cast(0.7071); - axis.z = static_cast(0.0); - } - else - { - axis.z = sqrt(zz); - axis.x = xz / axis.z; - axis.y = yz / axis.z; - } - } - return; - } - T s = sqrt((m[2][1] - m[1][2]) * (m[2][1] - m[1][2]) + (m[2][0] - m[0][2]) * (m[2][0] - m[0][2]) + (m[1][0] - m[0][1]) * (m[1][0] - m[0][1])); - if (glm::abs(s) < T(0.001)) - s = static_cast(1); - T const angleCos = (m[0][0] + m[1][1] + m[2][2] - static_cast(1)) * static_cast(0.5); - if(angleCos - static_cast(1) < epsilon) - angle = pi() * static_cast(0.25); - else - angle = acos(angleCos); - axis.x = (m[1][2] - m[2][1]) / s; - axis.y = (m[2][0] - m[0][2]) / s; - axis.z = (m[0][1] - m[1][0]) / s; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> axisAngleMatrix(vec<3, T, Q> const& axis, T const angle) - { - T c = cos(angle); - T s = sin(angle); - T t = static_cast(1) - c; - vec<3, T, Q> n = normalize(axis); - - return mat<4, 4, T, Q>( - t * n.x * n.x + c, t * n.x * n.y + n.z * s, t * n.x * n.z - n.y * s, static_cast(0.0), - t * n.x * n.y - n.z * s, t * n.y * n.y + c, t * n.y * n.z + n.x * s, static_cast(0.0), - t * n.x * n.z + n.y * s, t * n.y * n.z - n.x * s, t * n.z * n.z + c, static_cast(0.0), - static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> extractMatrixRotation(mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0][0], m[0][1], m[0][2], static_cast(0.0), - m[1][0], m[1][1], m[1][2], static_cast(0.0), - m[2][0], m[2][1], m[2][2], static_cast(0.0), - static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> interpolate(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const delta) - { - mat<4, 4, T, Q> m1rot = extractMatrixRotation(m1); - mat<4, 4, T, Q> dltRotation = m2 * transpose(m1rot); - vec<3, T, Q> dltAxis; - T dltAngle; - axisAngle(dltRotation, dltAxis, dltAngle); - mat<4, 4, T, Q> out = axisAngleMatrix(dltAxis, dltAngle * delta) * m1rot; - out[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]); - out[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]); - out[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]); - return out; - } -}//namespace glm diff --git a/external/glm/glm/gtx/matrix_major_storage.hpp b/external/glm/glm/gtx/matrix_major_storage.hpp deleted file mode 100644 index 8c6bc22d..00000000 --- a/external/glm/glm/gtx/matrix_major_storage.hpp +++ /dev/null @@ -1,119 +0,0 @@ -/// @ref gtx_matrix_major_storage -/// @file glm/gtx/matrix_major_storage.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build matrices with specific matrix order, row or column - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_major_storage extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_major_storage - /// @{ - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( - mat<2, 2, T, Q> const& m); - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( - mat<3, 3, T, Q> const& m); - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( - vec<4, T, Q> const& v1, - vec<4, T, Q> const& v2, - vec<4, T, Q> const& v3, - vec<4, T, Q> const& v4); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( - mat<4, 4, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( - mat<2, 2, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( - mat<3, 3, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( - vec<4, T, Q> const& v1, - vec<4, T, Q> const& v2, - vec<4, T, Q> const& v3, - vec<4, T, Q> const& v4); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( - mat<4, 4, T, Q> const& m); - - /// @} -}//namespace glm - -#include "matrix_major_storage.inl" diff --git a/external/glm/glm/gtx/matrix_major_storage.inl b/external/glm/glm/gtx/matrix_major_storage.inl deleted file mode 100644 index 279dd343..00000000 --- a/external/glm/glm/gtx/matrix_major_storage.inl +++ /dev/null @@ -1,166 +0,0 @@ -/// @ref gtx_matrix_major_storage - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2 - ( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2 - ) - { - mat<2, 2, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2( - const mat<2, 2, T, Q>& m) - { - mat<2, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( - const vec<3, T, Q>& v1, - const vec<3, T, Q>& v2, - const vec<3, T, Q>& v3) - { - mat<3, 3, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[2][0] = v1.z; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - Result[2][1] = v2.z; - Result[0][2] = v3.x; - Result[1][2] = v3.y; - Result[2][2] = v3.z; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( - const mat<3, 3, T, Q>& m) - { - mat<3, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( - const vec<4, T, Q>& v1, - const vec<4, T, Q>& v2, - const vec<4, T, Q>& v3, - const vec<4, T, Q>& v4) - { - mat<4, 4, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[2][0] = v1.z; - Result[3][0] = v1.w; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - Result[2][1] = v2.z; - Result[3][1] = v2.w; - Result[0][2] = v3.x; - Result[1][2] = v3.y; - Result[2][2] = v3.z; - Result[3][2] = v3.w; - Result[0][3] = v4.x; - Result[1][3] = v4.y; - Result[2][3] = v4.z; - Result[3][3] = v4.w; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( - const mat<4, 4, T, Q>& m) - { - mat<4, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - Result[3][3] = m[3][3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( - const vec<2, T, Q>& v1, - const vec<2, T, Q>& v2) - { - return mat<2, 2, T, Q>(v1, v2); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( - const mat<2, 2, T, Q>& m) - { - return mat<2, 2, T, Q>(m); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( - const vec<3, T, Q>& v1, - const vec<3, T, Q>& v2, - const vec<3, T, Q>& v3) - { - return mat<3, 3, T, Q>(v1, v2, v3); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( - const mat<3, 3, T, Q>& m) - { - return mat<3, 3, T, Q>(m); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( - const vec<4, T, Q>& v1, - const vec<4, T, Q>& v2, - const vec<4, T, Q>& v3, - const vec<4, T, Q>& v4) - { - return mat<4, 4, T, Q>(v1, v2, v3, v4); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( - const mat<4, 4, T, Q>& m) - { - return mat<4, 4, T, Q>(m); - } -}//namespace glm diff --git a/external/glm/glm/gtx/matrix_operation.hpp b/external/glm/glm/gtx/matrix_operation.hpp deleted file mode 100644 index de6ff1f8..00000000 --- a/external/glm/glm/gtx/matrix_operation.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/// @ref gtx_matrix_operation -/// @file glm/gtx/matrix_operation.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_operation GLM_GTX_matrix_operation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build diagonal matrices from vectors. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_operation extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_operation - /// @{ - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> diagonal2x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 3, T, Q> diagonal2x3( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 4, T, Q> diagonal2x4( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 2, T, Q> diagonal3x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> diagonal3x3( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 4, T, Q> diagonal3x4( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 2, T, Q> diagonal4x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 3, T, Q> diagonal4x3( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> diagonal4x4( - vec<4, T, Q> const& v); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m); - - /// @} -}//namespace glm - -#include "matrix_operation.inl" diff --git a/external/glm/glm/gtx/matrix_operation.inl b/external/glm/glm/gtx/matrix_operation.inl deleted file mode 100644 index 9de83f82..00000000 --- a/external/glm/glm/gtx/matrix_operation.inl +++ /dev/null @@ -1,176 +0,0 @@ -/// @ref gtx_matrix_operation - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> diagonal2x2 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> diagonal2x3 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> diagonal2x4 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> diagonal3x2 - ( - vec<2, T, Q> const& v - ) - { - mat<3, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> diagonal3x3 - ( - vec<3, T, Q> const& v - ) - { - mat<3, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> diagonal3x4 - ( - vec<3, T, Q> const& v - ) - { - mat<3, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> diagonal4x4 - ( - vec<4, T, Q> const& v - ) - { - mat<4, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - Result[3][3] = v[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> diagonal4x3 - ( - vec<3, T, Q> const& v - ) - { - mat<4, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> diagonal4x2 - ( - vec<2, T, Q> const& v - ) - { - mat<4, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - +m[1][1], -m[1][0], - -m[0][1], +m[0][0]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m) - { - T const m00 = determinant(mat<2, 2, T, Q>(m[1][1], m[2][1], m[1][2], m[2][2])); - T const m01 = determinant(mat<2, 2, T, Q>(m[0][1], m[2][1], m[0][2], m[2][2])); - T const m02 = determinant(mat<2, 2, T, Q>(m[0][1], m[1][1], m[0][2], m[1][2])); - - T const m10 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][2], m[2][2])); - T const m11 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][2], m[2][2])); - T const m12 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][2], m[1][2])); - - T const m20 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][1], m[2][1])); - T const m21 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][1], m[2][1])); - T const m22 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][1], m[1][1])); - - return mat<3, 3, T, Q>( - +m00, -m01, +m02, - -m10, +m11, -m12, - +m20, -m21, +m22); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m) - { - T const m00 = determinant(mat<3, 3, T, Q>(m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); - T const m01 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); - T const m02 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][1], m[3][3])); - T const m03 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); - - T const m10 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); - T const m11 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); - T const m12 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3])); - T const m13 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); - - T const m20 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[3][1], m[3][2], m[3][3])); - T const m21 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[3][0], m[3][2], m[3][3])); - T const m22 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3])); - T const m23 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[3][0], m[3][1], m[3][2])); - - T const m30 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3])); - T const m31 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3])); - T const m32 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3])); - T const m33 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2])); - - return mat<4, 4, T, Q>( - +m00, -m01, +m02, -m03, - -m10, +m11, -m12, +m13, - +m20, -m21, +m22, -m23, - -m30, +m31, -m32, +m33); - } -}//namespace glm diff --git a/external/glm/glm/gtx/matrix_query.hpp b/external/glm/glm/gtx/matrix_query.hpp deleted file mode 100644 index 8011b2b1..00000000 --- a/external/glm/glm/gtx/matrix_query.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/// @ref gtx_matrix_query -/// @file glm/gtx/matrix_query.hpp -/// -/// @see core (dependence) -/// @see gtx_vector_query (dependence) -/// -/// @defgroup gtx_matrix_query GLM_GTX_matrix_query -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Query to evaluate matrix properties - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/vector_query.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_query extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_query - /// @{ - - /// Return whether a matrix a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is an identity matrix. - /// From GLM_GTX_matrix_query extension. - template class matType> - GLM_FUNC_DECL bool isIdentity(matType const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is an orthonormalized matrix. - /// From GLM_GTX_matrix_query extension. - template class matType> - GLM_FUNC_DECL bool isOrthogonal(matType const& m, T const& epsilon); - - /// @} -}//namespace glm - -#include "matrix_query.inl" diff --git a/external/glm/glm/gtx/matrix_query.inl b/external/glm/glm/gtx/matrix_query.inl deleted file mode 100644 index 77bd2310..00000000 --- a/external/glm/glm/gtx/matrix_query.inl +++ /dev/null @@ -1,113 +0,0 @@ -/// @ref gtx_matrix_query - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isIdentity(mat const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m[0].length() ; ++i) - { - for(length_t j = 0; result && j < i ; ++j) - result = abs(m[i][j]) <= epsilon; - if(result) - result = abs(m[i][i] - 1) <= epsilon; - for(length_t j = i + 1; result && j < m.length(); ++j) - result = abs(m[i][j]) <= epsilon; - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<2, 2, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<3, 3, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<4, 4, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isOrthogonal(mat const& m, T const& epsilon) - { - bool result = true; - for(length_t i(0); result && i < m.length() - 1; ++i) - for(length_t j(i + 1); result && j < m.length(); ++j) - result = areOrthogonal(m[i], m[j], epsilon); - - if(result) - { - mat tmp = transpose(m); - for(length_t i(0); result && i < m.length() - 1 ; ++i) - for(length_t j(i + 1); result && j < m.length(); ++j) - result = areOrthogonal(tmp[i], tmp[j], epsilon); - } - return result; - } -}//namespace glm diff --git a/external/glm/glm/gtx/matrix_transform_2d.hpp b/external/glm/glm/gtx/matrix_transform_2d.hpp deleted file mode 100644 index 5f9c5402..00000000 --- a/external/glm/glm/gtx/matrix_transform_2d.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/// @ref gtx_matrix_transform_2d -/// @file glm/gtx/matrix_transform_2d.hpp -/// @author Miguel Ángel Pérez Martínez -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_transform_2d GLM_GTX_matrix_transform_2d -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines functions that generate common 2d transformation matrices. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../vec2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_transform_2d extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_transform_2d - /// @{ - - /// Builds a translation 3 * 3 matrix created from a vector of 2 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a translation vector. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v); - - /// Builds a rotation 3 * 3 matrix created from an angle. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param angle Rotation angle expressed in radians. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( - mat<3, 3, T, Q> const& m, - T angle); - - /// Builds a scale 3 * 3 matrix created from a vector of 2 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a scale vector. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v); - - /// Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param y Shear factor. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( - mat<3, 3, T, Q> const& m, - T y); - - /// Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param x Shear factor. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( - mat<3, 3, T, Q> const& m, - T x); - - /// @} -}//namespace glm - -#include "matrix_transform_2d.inl" diff --git a/external/glm/glm/gtx/matrix_transform_2d.inl b/external/glm/glm/gtx/matrix_transform_2d.inl deleted file mode 100644 index a68d24dc..00000000 --- a/external/glm/glm/gtx/matrix_transform_2d.inl +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_matrix_transform_2d -/// @author Miguel Ángel Pérez Martínez - -#include "../trigonometric.hpp" - -namespace glm -{ - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v) - { - mat<3, 3, T, Q> Result(m); - Result[2] = m[0] * v[0] + m[1] * v[1] + m[2]; - return Result; - } - - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( - mat<3, 3, T, Q> const& m, - T angle) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - mat<3, 3, T, Q> Result; - Result[0] = m[0] * c + m[1] * s; - Result[1] = m[0] * -s + m[1] * c; - Result[2] = m[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v) - { - mat<3, 3, T, Q> Result; - Result[0] = m[0] * v[0]; - Result[1] = m[1] * v[1]; - Result[2] = m[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( - mat<3, 3, T, Q> const& m, - T y) - { - mat<3, 3, T, Q> Result(1); - Result[0][1] = y; - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( - mat<3, 3, T, Q> const& m, - T x) - { - mat<3, 3, T, Q> Result(1); - Result[1][0] = x; - return m * Result; - } - -}//namespace glm diff --git a/external/glm/glm/gtx/mixed_product.hpp b/external/glm/glm/gtx/mixed_product.hpp deleted file mode 100644 index b242e357..00000000 --- a/external/glm/glm/gtx/mixed_product.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/// @ref gtx_mixed_product -/// @file glm/gtx/mixed_product.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_mixed_product GLM_GTX_mixed_producte -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Mixed product of 3 vectors. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_mixed_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_mixed_product - /// @{ - - /// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) - template - GLM_FUNC_DECL T mixedProduct( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - /// @} -}// namespace glm - -#include "mixed_product.inl" diff --git a/external/glm/glm/gtx/mixed_product.inl b/external/glm/glm/gtx/mixed_product.inl deleted file mode 100644 index e5cdbdb4..00000000 --- a/external/glm/glm/gtx/mixed_product.inl +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref gtx_mixed_product - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T mixedProduct - ( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3 - ) - { - return dot(cross(v1, v2), v3); - } -}//namespace glm diff --git a/external/glm/glm/gtx/norm.hpp b/external/glm/glm/gtx/norm.hpp deleted file mode 100644 index dfaebb7a..00000000 --- a/external/glm/glm/gtx/norm.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/// @ref gtx_norm -/// @file glm/gtx/norm.hpp -/// -/// @see core (dependence) -/// @see gtx_quaternion (dependence) -/// @see gtx_component_wise (dependence) -/// -/// @defgroup gtx_norm GLM_GTX_norm -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Various ways to compute vector norms. - -#pragma once - -// Dependency: -#include "../geometric.hpp" -#include "../gtx/quaternion.hpp" -#include "../gtx/component_wise.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_norm extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_norm - /// @{ - - /// Returns the squared length of x. - /// From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T length2(vec const& x); - - /// Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). - /// From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T distance2(vec const& p0, vec const& p1); - - //! Returns the L1 norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the L1 norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& v); - - //! Returns the L2 norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the L2 norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x); - - //! Returns the L norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth); - - //! Returns the L norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, unsigned int Depth); - - //! Returns the LMax norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the LMax norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x); - - /// @} -}//namespace glm - -#include "norm.inl" diff --git a/external/glm/glm/gtx/norm.inl b/external/glm/glm/gtx/norm.inl deleted file mode 100644 index 6db561b3..00000000 --- a/external/glm/glm/gtx/norm.inl +++ /dev/null @@ -1,95 +0,0 @@ -/// @ref gtx_norm - -#include "../detail/qualifier.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_length2 - { - GLM_FUNC_QUALIFIER static T call(vec const& v) - { - return dot(v, v); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER genType length2(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); - return x * x; - } - - template - GLM_FUNC_QUALIFIER T length2(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); - return detail::compute_length2::value>::call(v); - } - - template - GLM_FUNC_QUALIFIER T distance2(T p0, T p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); - return length2(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T distance2(vec const& p0, vec const& p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); - return length2(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z); - } - - template - GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& v) - { - return abs(v.x) + abs(v.y) + abs(v.z); - } - - template - GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b - ) - { - return length(b - a); - } - - template - GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& v) - { - return length(v); - } - - template - GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth) - { - return pow(pow(abs(y.x - x.x), T(Depth)) + pow(abs(y.y - x.y), T(Depth)) + pow(abs(y.z - x.z), T(Depth)), T(1) / T(Depth)); - } - - template - GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& v, unsigned int Depth) - { - return pow(pow(abs(v.x), T(Depth)) + pow(abs(v.y), T(Depth)) + pow(abs(v.z), T(Depth)), T(1) / T(Depth)); - } - - template - GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return compMax(abs(b - a)); - } - - template - GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& v) - { - return compMax(abs(v)); - } - -}//namespace glm diff --git a/external/glm/glm/gtx/normal.hpp b/external/glm/glm/gtx/normal.hpp deleted file mode 100644 index 068682f7..00000000 --- a/external/glm/glm/gtx/normal.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/// @ref gtx_normal -/// @file glm/gtx/normal.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_normal GLM_GTX_normal -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Compute the normal of a triangle. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_normal extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_normal - /// @{ - - /// Computes triangle normal from triangle points. - /// - /// @see gtx_normal - template - GLM_FUNC_DECL vec<3, T, Q> triangleNormal(vec<3, T, Q> const& p1, vec<3, T, Q> const& p2, vec<3, T, Q> const& p3); - - /// @} -}//namespace glm - -#include "normal.inl" diff --git a/external/glm/glm/gtx/normal.inl b/external/glm/glm/gtx/normal.inl deleted file mode 100644 index 74f9fc99..00000000 --- a/external/glm/glm/gtx/normal.inl +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref gtx_normal - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> triangleNormal - ( - vec<3, T, Q> const& p1, - vec<3, T, Q> const& p2, - vec<3, T, Q> const& p3 - ) - { - return normalize(cross(p1 - p2, p1 - p3)); - } -}//namespace glm diff --git a/external/glm/glm/gtx/normalize_dot.hpp b/external/glm/glm/gtx/normalize_dot.hpp deleted file mode 100644 index 51958023..00000000 --- a/external/glm/glm/gtx/normalize_dot.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref gtx_normalize_dot -/// @file glm/gtx/normalize_dot.hpp -/// -/// @see core (dependence) -/// @see gtx_fast_square_root (dependence) -/// -/// @defgroup gtx_normalize_dot GLM_GTX_normalize_dot -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Dot product of vectors that need to be normalize with a single square root. - -#pragma once - -// Dependency: -#include "../gtx/fast_square_root.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_normalize_dot extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_normalize_dot - /// @{ - - /// Normalize parameters and returns the dot product of x and y. - /// It's faster that dot(normalize(x), normalize(y)). - /// - /// @see gtx_normalize_dot extension. - template - GLM_FUNC_DECL T normalizeDot(vec const& x, vec const& y); - - /// Normalize parameters and returns the dot product of x and y. - /// Faster that dot(fastNormalize(x), fastNormalize(y)). - /// - /// @see gtx_normalize_dot extension. - template - GLM_FUNC_DECL T fastNormalizeDot(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "normalize_dot.inl" diff --git a/external/glm/glm/gtx/normalize_dot.inl b/external/glm/glm/gtx/normalize_dot.inl deleted file mode 100644 index 7bcd9a53..00000000 --- a/external/glm/glm/gtx/normalize_dot.inl +++ /dev/null @@ -1,16 +0,0 @@ -/// @ref gtx_normalize_dot - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T normalizeDot(vec const& x, vec const& y) - { - return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER T fastNormalizeDot(vec const& x, vec const& y) - { - return glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y)); - } -}//namespace glm diff --git a/external/glm/glm/gtx/number_precision.hpp b/external/glm/glm/gtx/number_precision.hpp deleted file mode 100644 index 3a606bda..00000000 --- a/external/glm/glm/gtx/number_precision.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtx_number_precision -/// @file glm/gtx/number_precision.hpp -/// -/// @see core (dependence) -/// @see gtc_type_precision (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_number_precision GLM_GTX_number_precision -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defined size types. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/type_precision.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_number_precision extension included") -# endif -#endif - -namespace glm{ -namespace gtx -{ - ///////////////////////////// - // Unsigned int vector types - - /// @addtogroup gtx_number_precision - /// @{ - - typedef u8 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u16 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u32 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u64 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - - ////////////////////// - // Float vector types - - typedef f32 f32vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - - ////////////////////// - // Float matrix types - - typedef f32 f32mat1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f32 f32mat1x1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64mat1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64mat1x1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - - /// @} -}//namespace gtx -}//namespace glm - -#include "number_precision.inl" diff --git a/external/glm/glm/gtx/number_precision.inl b/external/glm/glm/gtx/number_precision.inl deleted file mode 100644 index b39d71c3..00000000 --- a/external/glm/glm/gtx/number_precision.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_number_precision - -namespace glm -{ - -} diff --git a/external/glm/glm/gtx/optimum_pow.hpp b/external/glm/glm/gtx/optimum_pow.hpp deleted file mode 100644 index 9284a474..00000000 --- a/external/glm/glm/gtx/optimum_pow.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/// @ref gtx_optimum_pow -/// @file glm/gtx/optimum_pow.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_optimum_pow GLM_GTX_optimum_pow -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Integer exponentiation of power functions. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_optimum_pow extension included") -# endif -#endif - -namespace glm{ -namespace gtx -{ - /// @addtogroup gtx_optimum_pow - /// @{ - - /// Returns x raised to the power of 2. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow2(genType const& x); - - /// Returns x raised to the power of 3. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow3(genType const& x); - - /// Returns x raised to the power of 4. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow4(genType const& x); - - /// @} -}//namespace gtx -}//namespace glm - -#include "optimum_pow.inl" diff --git a/external/glm/glm/gtx/optimum_pow.inl b/external/glm/glm/gtx/optimum_pow.inl deleted file mode 100644 index a26c19c1..00000000 --- a/external/glm/glm/gtx/optimum_pow.inl +++ /dev/null @@ -1,22 +0,0 @@ -/// @ref gtx_optimum_pow - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType pow2(genType const& x) - { - return x * x; - } - - template - GLM_FUNC_QUALIFIER genType pow3(genType const& x) - { - return x * x * x; - } - - template - GLM_FUNC_QUALIFIER genType pow4(genType const& x) - { - return (x * x) * (x * x); - } -}//namespace glm diff --git a/external/glm/glm/gtx/orthonormalize.hpp b/external/glm/glm/gtx/orthonormalize.hpp deleted file mode 100644 index 3e004fb0..00000000 --- a/external/glm/glm/gtx/orthonormalize.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref gtx_orthonormalize -/// @file glm/gtx/orthonormalize.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_orthonormalize GLM_GTX_orthonormalize -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Orthonormalize matrices. - -#pragma once - -// Dependency: -#include "../vec3.hpp" -#include "../mat3x3.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_orthonormalize extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_orthonormalize - /// @{ - - /// Returns the orthonormalized matrix of m. - /// - /// @see gtx_orthonormalize - template - GLM_FUNC_DECL mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m); - - /// Orthonormalizes x according y. - /// - /// @see gtx_orthonormalize - template - GLM_FUNC_DECL vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - /// @} -}//namespace glm - -#include "orthonormalize.inl" diff --git a/external/glm/glm/gtx/orthonormalize.inl b/external/glm/glm/gtx/orthonormalize.inl deleted file mode 100644 index cb553ba6..00000000 --- a/external/glm/glm/gtx/orthonormalize.inl +++ /dev/null @@ -1,29 +0,0 @@ -/// @ref gtx_orthonormalize - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m) - { - mat<3, 3, T, Q> r = m; - - r[0] = normalize(r[0]); - - T d0 = dot(r[0], r[1]); - r[1] -= r[0] * d0; - r[1] = normalize(r[1]); - - T d1 = dot(r[1], r[2]); - d0 = dot(r[0], r[2]); - r[2] -= r[0] * d0 + r[1] * d1; - r[2] = normalize(r[2]); - - return r; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - return normalize(x - y * dot(y, x)); - } -}//namespace glm diff --git a/external/glm/glm/gtx/perpendicular.hpp b/external/glm/glm/gtx/perpendicular.hpp deleted file mode 100644 index 72b77b6e..00000000 --- a/external/glm/glm/gtx/perpendicular.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/// @ref gtx_perpendicular -/// @file glm/gtx/perpendicular.hpp -/// -/// @see core (dependence) -/// @see gtx_projection (dependence) -/// -/// @defgroup gtx_perpendicular GLM_GTX_perpendicular -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Perpendicular of a vector from other one - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/projection.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_perpendicular extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_perpendicular - /// @{ - - //! Projects x a perpendicular axis of Normal. - //! From GLM_GTX_perpendicular extension. - template - GLM_FUNC_DECL genType perp(genType const& x, genType const& Normal); - - /// @} -}//namespace glm - -#include "perpendicular.inl" diff --git a/external/glm/glm/gtx/perpendicular.inl b/external/glm/glm/gtx/perpendicular.inl deleted file mode 100644 index 1e72f334..00000000 --- a/external/glm/glm/gtx/perpendicular.inl +++ /dev/null @@ -1,10 +0,0 @@ -/// @ref gtx_perpendicular - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType perp(genType const& x, genType const& Normal) - { - return x - proj(x, Normal); - } -}//namespace glm diff --git a/external/glm/glm/gtx/polar_coordinates.hpp b/external/glm/glm/gtx/polar_coordinates.hpp deleted file mode 100644 index 76beb82b..00000000 --- a/external/glm/glm/gtx/polar_coordinates.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_polar_coordinates -/// @file glm/gtx/polar_coordinates.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Conversion from Euclidean space to polar space and revert. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_polar_coordinates extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_polar_coordinates - /// @{ - - /// Convert Euclidean to Polar coordinates, x is the latitude, y the longitude and z the xz distance. - /// - /// @see gtx_polar_coordinates - template - GLM_FUNC_DECL vec<3, T, Q> polar( - vec<3, T, Q> const& euclidean); - - /// Convert Polar to Euclidean coordinates. - /// - /// @see gtx_polar_coordinates - template - GLM_FUNC_DECL vec<3, T, Q> euclidean( - vec<2, T, Q> const& polar); - - /// @} -}//namespace glm - -#include "polar_coordinates.inl" diff --git a/external/glm/glm/gtx/polar_coordinates.inl b/external/glm/glm/gtx/polar_coordinates.inl deleted file mode 100644 index 371c8ddd..00000000 --- a/external/glm/glm/gtx/polar_coordinates.inl +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_polar_coordinates - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> polar - ( - vec<3, T, Q> const& euclidean - ) - { - T const Length(length(euclidean)); - vec<3, T, Q> const tmp(euclidean / Length); - T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z)); - - return vec<3, T, Q>( - asin(tmp.y), // latitude - atan(tmp.x, tmp.z), // longitude - xz_dist); // xz distance - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> euclidean - ( - vec<2, T, Q> const& polar - ) - { - T const latitude(polar.x); - T const longitude(polar.y); - - return vec<3, T, Q>( - cos(latitude) * sin(longitude), - sin(latitude), - cos(latitude) * cos(longitude)); - } - -}//namespace glm diff --git a/external/glm/glm/gtx/projection.hpp b/external/glm/glm/gtx/projection.hpp deleted file mode 100644 index 678f3ad5..00000000 --- a/external/glm/glm/gtx/projection.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/// @ref gtx_projection -/// @file glm/gtx/projection.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_projection GLM_GTX_projection -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Projection of a vector to other one - -#pragma once - -// Dependency: -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_projection extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_projection - /// @{ - - /// Projects x on Normal. - /// - /// @param[in] x A vector to project - /// @param[in] Normal A normal that doesn't need to be of unit length. - /// - /// @see gtx_projection - template - GLM_FUNC_DECL genType proj(genType const& x, genType const& Normal); - - /// @} -}//namespace glm - -#include "projection.inl" diff --git a/external/glm/glm/gtx/projection.inl b/external/glm/glm/gtx/projection.inl deleted file mode 100644 index f23f884f..00000000 --- a/external/glm/glm/gtx/projection.inl +++ /dev/null @@ -1,10 +0,0 @@ -/// @ref gtx_projection - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType proj(genType const& x, genType const& Normal) - { - return glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal; - } -}//namespace glm diff --git a/external/glm/glm/gtx/quaternion.hpp b/external/glm/glm/gtx/quaternion.hpp deleted file mode 100644 index 5c2b5ad0..00000000 --- a/external/glm/glm/gtx/quaternion.hpp +++ /dev/null @@ -1,174 +0,0 @@ -/// @ref gtx_quaternion -/// @file glm/gtx/quaternion.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_quaternion GLM_GTX_quaternion -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extented quaternion types and functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/quaternion.hpp" -#include "../ext/quaternion_exponential.hpp" -#include "../gtx/norm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_quaternion extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_quaternion - /// @{ - - /// Create an identity quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL GLM_CONSTEXPR qua quat_identity(); - - /// Compute a cross product between a quaternion and a vector. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> cross( - qua const& q, - vec<3, T, Q> const& v); - - //! Compute a cross product between a vector and a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> cross( - vec<3, T, Q> const& v, - qua const& q); - - //! Compute a point on a path according squad equation. - //! q1 and q2 are control points; s1 and s2 are intermediate control points. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua squad( - qua const& q1, - qua const& q2, - qua const& s1, - qua const& s2, - T const& h); - - //! Returns an intermediate control point for squad interpolation. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua intermediate( - qua const& prev, - qua const& curr, - qua const& next); - - //! Returns quarternion square root. - /// - /// @see gtx_quaternion - //template - //qua sqrt( - // qua const& q); - - //! Rotates a 3 components vector by a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> rotate( - qua const& q, - vec<3, T, Q> const& v); - - /// Rotates a 4 components vector by a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<4, T, Q> rotate( - qua const& q, - vec<4, T, Q> const& v); - - /// Extract the real component of a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL T extractRealComponent( - qua const& q); - - /// Converts a quaternion to a 3 * 3 matrix. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL mat<3, 3, T, Q> toMat3( - qua const& x){return mat3_cast(x);} - - /// Converts a quaternion to a 4 * 4 matrix. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL mat<4, 4, T, Q> toMat4( - qua const& x){return mat4_cast(x);} - - /// Converts a 3 * 3 matrix to a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua toQuat( - mat<3, 3, T, Q> const& x){return quat_cast(x);} - - /// Converts a 4 * 4 matrix to a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua toQuat( - mat<4, 4, T, Q> const& x){return quat_cast(x);} - - /// Quaternion interpolation using the rotation short path. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua shortMix( - qua const& x, - qua const& y, - T const& a); - - /// Quaternion normalized linear interpolation. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua fastMix( - qua const& x, - qua const& y, - T const& a); - - /// Compute the rotation between two vectors. - /// @param orig vector, needs to be normalized - /// @param dest vector, needs to be normalized - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua rotation( - vec<3, T, Q> const& orig, - vec<3, T, Q> const& dest); - - /// Returns the squared length of x. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL GLM_CONSTEXPR T length2(qua const& q); - - /// @} -}//namespace glm - -#include "quaternion.inl" diff --git a/external/glm/glm/gtx/quaternion.inl b/external/glm/glm/gtx/quaternion.inl deleted file mode 100644 index d125bccc..00000000 --- a/external/glm/glm/gtx/quaternion.inl +++ /dev/null @@ -1,159 +0,0 @@ -/// @ref gtx_quaternion - -#include -#include "../gtc/constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua quat_identity() - { - return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& v, qua const& q) - { - return inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(qua const& q, vec<3, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER qua squad - ( - qua const& q1, - qua const& q2, - qua const& s1, - qua const& s2, - T const& h) - { - return mix(mix(q1, q2, h), mix(s1, s2, h), static_cast(2) * (static_cast(1) - h) * h); - } - - template - GLM_FUNC_QUALIFIER qua intermediate - ( - qua const& prev, - qua const& curr, - qua const& next - ) - { - qua invQuat = inverse(curr); - return exp((log(next * invQuat) + log(prev * invQuat)) / static_cast(-4)) * curr; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotate(qua const& q, vec<3, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotate(qua const& q, vec<4, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER T extractRealComponent(qua const& q) - { - T w = static_cast(1) - q.x * q.x - q.y * q.y - q.z * q.z; - if(w < T(0)) - return T(0); - else - return -sqrt(w); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T length2(qua const& q) - { - return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w; - } - - template - GLM_FUNC_QUALIFIER qua shortMix(qua const& x, qua const& y, T const& a) - { - if(a <= static_cast(0)) return x; - if(a >= static_cast(1)) return y; - - T fCos = dot(x, y); - qua y2(y); //BUG!!! qua y2; - if(fCos < static_cast(0)) - { - y2 = -y; - fCos = -fCos; - } - - //if(fCos > 1.0f) // problem - T k0, k1; - if(fCos > (static_cast(1) - epsilon())) - { - k0 = static_cast(1) - a; - k1 = static_cast(0) + a; //BUG!!! 1.0f + a; - } - else - { - T fSin = sqrt(T(1) - fCos * fCos); - T fAngle = atan(fSin, fCos); - T fOneOverSin = static_cast(1) / fSin; - k0 = sin((static_cast(1) - a) * fAngle) * fOneOverSin; - k1 = sin((static_cast(0) + a) * fAngle) * fOneOverSin; - } - - return qua( - k0 * x.w + k1 * y2.w, - k0 * x.x + k1 * y2.x, - k0 * x.y + k1 * y2.y, - k0 * x.z + k1 * y2.z); - } - - template - GLM_FUNC_QUALIFIER qua fastMix(qua const& x, qua const& y, T const& a) - { - return glm::normalize(x * (static_cast(1) - a) + (y * a)); - } - - template - GLM_FUNC_QUALIFIER qua rotation(vec<3, T, Q> const& orig, vec<3, T, Q> const& dest) - { - T cosTheta = dot(orig, dest); - vec<3, T, Q> rotationAxis; - - if(cosTheta >= static_cast(1) - epsilon()) { - // orig and dest point in the same direction - return quat_identity(); - } - - if(cosTheta < static_cast(-1) + epsilon()) - { - // special case when vectors in opposite directions : - // there is no "ideal" rotation axis - // So guess one; any will do as long as it's perpendicular to start - // This implementation favors a rotation around the Up axis (Y), - // since it's often what you want to do. - rotationAxis = cross(vec<3, T, Q>(0, 0, 1), orig); - if(length2(rotationAxis) < epsilon()) // bad luck, they were parallel, try again! - rotationAxis = cross(vec<3, T, Q>(1, 0, 0), orig); - - rotationAxis = normalize(rotationAxis); - return angleAxis(pi(), rotationAxis); - } - - // Implementation from Stan Melax's Game Programming Gems 1 article - rotationAxis = cross(orig, dest); - - T s = sqrt((T(1) + cosTheta) * static_cast(2)); - T invs = static_cast(1) / s; - - return qua( - s * static_cast(0.5f), - rotationAxis.x * invs, - rotationAxis.y * invs, - rotationAxis.z * invs); - } -}//namespace glm diff --git a/external/glm/glm/gtx/range.hpp b/external/glm/glm/gtx/range.hpp deleted file mode 100644 index 93bcb9a6..00000000 --- a/external/glm/glm/gtx/range.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/// @ref gtx_range -/// @file glm/gtx/range.hpp -/// @author Joshua Moerman -/// -/// @defgroup gtx_range GLM_GTX_range -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines begin and end for vectors and matrices. Useful for range-based for loop. -/// The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements). - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_range extension included") -# endif -#endif - -#include "../gtc/type_ptr.hpp" -#include "../gtc/vec1.hpp" - -namespace glm -{ - /// @addtogroup gtx_range - /// @{ - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable : 4100) // unreferenced formal parameter -# endif - - template - inline length_t components(vec<1, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<2, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<3, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<4, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(genType const& m) - { - return m.length() * m[0].length(); - } - - template - inline typename genType::value_type const * begin(genType const& v) - { - return value_ptr(v); - } - - template - inline typename genType::value_type const * end(genType const& v) - { - return begin(v) + components(v); - } - - template - inline typename genType::value_type * begin(genType& v) - { - return value_ptr(v); - } - - template - inline typename genType::value_type * end(genType& v) - { - return begin(v) + components(v); - } - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif - - /// @} -}//namespace glm diff --git a/external/glm/glm/gtx/raw_data.hpp b/external/glm/glm/gtx/raw_data.hpp deleted file mode 100644 index 86cbe77d..00000000 --- a/external/glm/glm/gtx/raw_data.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/// @ref gtx_raw_data -/// @file glm/gtx/raw_data.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_raw_data GLM_GTX_raw_data -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Projection of a vector to other one - -#pragma once - -// Dependencies -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_raw_data extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_raw_data - /// @{ - - //! Type for byte numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint8 byte; - - //! Type for word numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint16 word; - - //! Type for dword numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint32 dword; - - //! Type for qword numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint64 qword; - - /// @} -}// namespace glm - -#include "raw_data.inl" diff --git a/external/glm/glm/gtx/raw_data.inl b/external/glm/glm/gtx/raw_data.inl deleted file mode 100644 index c740317d..00000000 --- a/external/glm/glm/gtx/raw_data.inl +++ /dev/null @@ -1,2 +0,0 @@ -/// @ref gtx_raw_data - diff --git a/external/glm/glm/gtx/rotate_normalized_axis.hpp b/external/glm/glm/gtx/rotate_normalized_axis.hpp deleted file mode 100644 index 2103ca08..00000000 --- a/external/glm/glm/gtx/rotate_normalized_axis.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_rotate_normalized_axis -/// @file glm/gtx/rotate_normalized_axis.hpp -/// -/// @see core (dependence) -/// @see gtc_matrix_transform -/// @see gtc_quaternion -/// -/// @defgroup gtx_rotate_normalized_axis GLM_GTX_rotate_normalized_axis -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Quaternions and matrices rotations around normalized axis. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/epsilon.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_rotate_normalized_axis - /// @{ - - /// Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. - /// - /// @param m Input matrix multiplied by this rotation matrix. - /// @param angle Rotation angle expressed in radians. - /// @param axis Rotation axis, must be normalized. - /// @tparam T Value type used to build the matrix. Currently supported: half (not recommended), float or double. - /// - /// @see gtx_rotate_normalized_axis - /// @see - rotate(T angle, T x, T y, T z) - /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) - /// @see - rotate(T angle, vec<3, T, Q> const& v) - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotateNormalizedAxis( - mat<4, 4, T, Q> const& m, - T const& angle, - vec<3, T, Q> const& axis); - - /// Rotates a quaternion from a vector of 3 components normalized axis and an angle. - /// - /// @param q Source orientation - /// @param angle Angle expressed in radians. - /// @param axis Normalized axis of the rotation, must be normalized. - /// - /// @see gtx_rotate_normalized_axis - template - GLM_FUNC_DECL qua rotateNormalizedAxis( - qua const& q, - T const& angle, - vec<3, T, Q> const& axis); - - /// @} -}//namespace glm - -#include "rotate_normalized_axis.inl" diff --git a/external/glm/glm/gtx/rotate_normalized_axis.inl b/external/glm/glm/gtx/rotate_normalized_axis.inl deleted file mode 100644 index b2e9278c..00000000 --- a/external/glm/glm/gtx/rotate_normalized_axis.inl +++ /dev/null @@ -1,58 +0,0 @@ -/// @ref gtx_rotate_normalized_axis - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotateNormalizedAxis - ( - mat<4, 4, T, Q> const& m, - T const& angle, - vec<3, T, Q> const& v - ) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - vec<3, T, Q> const axis(v); - - vec<3, T, Q> const temp((static_cast(1) - c) * axis); - - mat<4, 4, T, Q> Rotate; - Rotate[0][0] = c + temp[0] * axis[0]; - Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; - Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; - - Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; - Rotate[1][1] = c + temp[1] * axis[1]; - Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; - - Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; - Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; - Rotate[2][2] = c + temp[2] * axis[2]; - - mat<4, 4, T, Q> Result; - Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER qua rotateNormalizedAxis - ( - qua const& q, - T const& angle, - vec<3, T, Q> const& v - ) - { - vec<3, T, Q> const Tmp(v); - - T const AngleRad(angle); - T const Sin = sin(AngleRad * T(0.5)); - - return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); - //return gtc::quaternion::cross(q, tquat(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin)); - } -}//namespace glm diff --git a/external/glm/glm/gtx/rotate_vector.hpp b/external/glm/glm/gtx/rotate_vector.hpp deleted file mode 100644 index dcd5b95a..00000000 --- a/external/glm/glm/gtx/rotate_vector.hpp +++ /dev/null @@ -1,123 +0,0 @@ -/// @ref gtx_rotate_vector -/// @file glm/gtx/rotate_vector.hpp -/// -/// @see core (dependence) -/// @see gtx_transform (dependence) -/// -/// @defgroup gtx_rotate_vector GLM_GTX_rotate_vector -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Function to directly rotate a vector - -#pragma once - -// Dependency: -#include "../gtx/transform.hpp" -#include "../gtc/epsilon.hpp" -#include "../ext/vector_relational.hpp" -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_rotate_vector extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_rotate_vector - /// @{ - - /// Returns Spherical interpolation between two vectors - /// - /// @param x A first vector - /// @param y A second vector - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @see gtx_rotate_vector - template - GLM_FUNC_DECL vec<3, T, Q> slerp( - vec<3, T, Q> const& x, - vec<3, T, Q> const& y, - T const& a); - - //! Rotate a two dimensional vector. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<2, T, Q> rotate( - vec<2, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around an axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotate( - vec<3, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal); - - //! Rotate a four dimensional vector around an axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotate( - vec<4, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal); - - //! Rotate a three dimensional vector around the X axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateX( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around the Y axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateY( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around the Z axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateZ( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the X axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateX( - vec<4, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the Y axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateY( - vec<4, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the Z axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateZ( - vec<4, T, Q> const& v, - T const& angle); - - //! Build a rotation matrix from a normal and a up vector. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> orientation( - vec<3, T, Q> const& Normal, - vec<3, T, Q> const& Up); - - /// @} -}//namespace glm - -#include "rotate_vector.inl" diff --git a/external/glm/glm/gtx/rotate_vector.inl b/external/glm/glm/gtx/rotate_vector.inl deleted file mode 100644 index f8136e76..00000000 --- a/external/glm/glm/gtx/rotate_vector.inl +++ /dev/null @@ -1,187 +0,0 @@ -/// @ref gtx_rotate_vector - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> slerp - ( - vec<3, T, Q> const& x, - vec<3, T, Q> const& y, - T const& a - ) - { - // get cosine of angle between vectors (-1 -> 1) - T CosAlpha = dot(x, y); - // get angle (0 -> pi) - T Alpha = acos(CosAlpha); - // get sine of angle between vectors (0 -> 1) - T SinAlpha = sin(Alpha); - // this breaks down when SinAlpha = 0, i.e. Alpha = 0 or pi - T t1 = sin((static_cast(1) - a) * Alpha) / SinAlpha; - T t2 = sin(a * Alpha) / SinAlpha; - - // interpolate src vectors - return x * t1 + y * t2; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> rotate - ( - vec<2, T, Q> const& v, - T const& angle - ) - { - vec<2, T, Q> Result; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotate - ( - vec<3, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal - ) - { - return mat<3, 3, T, Q>(glm::rotate(angle, normal)) * v; - } - /* - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateGTX( - const vec<3, T, Q>& x, - T angle, - const vec<3, T, Q>& normal) - { - const T Cos = cos(radians(angle)); - const T Sin = sin(radians(angle)); - return x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin; - } - */ - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotate - ( - vec<4, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal - ) - { - return rotate(angle, normal) * v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateX - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result(v); - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.y = v.y * Cos - v.z * Sin; - Result.z = v.y * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateY - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos + v.z * Sin; - Result.z = -v.x * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateZ - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateX - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.y = v.y * Cos - v.z * Sin; - Result.z = v.y * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateY - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos + v.z * Sin; - Result.z = -v.x * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateZ - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientation - ( - vec<3, T, Q> const& Normal, - vec<3, T, Q> const& Up - ) - { - if(all(equal(Normal, Up, epsilon()))) - return mat<4, 4, T, Q>(static_cast(1)); - - vec<3, T, Q> RotationAxis = cross(Up, Normal); - T Angle = acos(dot(Normal, Up)); - - return rotate(Angle, RotationAxis); - } -}//namespace glm diff --git a/external/glm/glm/gtx/scalar_multiplication.hpp b/external/glm/glm/gtx/scalar_multiplication.hpp deleted file mode 100644 index 496ba193..00000000 --- a/external/glm/glm/gtx/scalar_multiplication.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/// @ref gtx -/// @file glm/gtx/scalar_multiplication.hpp -/// @author Joshua Moerman -/// -/// Include to use the features of this extension. -/// -/// Enables scalar multiplication for all types -/// -/// Since GLSL is very strict about types, the following (often used) combinations do not work: -/// double * vec4 -/// int * vec4 -/// vec4 / int -/// So we'll fix that! Of course "float * vec4" should remain the same (hence the enable_if magic) - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_scalar_multiplication extension included") -# endif -#endif - -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../mat2x2.hpp" -#include - -namespace glm -{ - template - using return_type_scalar_multiplication = typename std::enable_if< - !std::is_same::value // T may not be a float - && std::is_arithmetic::value, Vec // But it may be an int or double (no vec3 or mat3, ...) - >::type; - -#define GLM_IMPLEMENT_SCAL_MULT(Vec) \ - template \ - return_type_scalar_multiplication \ - operator*(T const& s, Vec rh){ \ - return rh *= static_cast(s); \ - } \ - \ - template \ - return_type_scalar_multiplication \ - operator*(Vec lh, T const& s){ \ - return lh *= static_cast(s); \ - } \ - \ - template \ - return_type_scalar_multiplication \ - operator/(Vec lh, T const& s){ \ - return lh *= 1.0f / static_cast(s); \ - } - -GLM_IMPLEMENT_SCAL_MULT(vec2) -GLM_IMPLEMENT_SCAL_MULT(vec3) -GLM_IMPLEMENT_SCAL_MULT(vec4) - -GLM_IMPLEMENT_SCAL_MULT(mat2) -GLM_IMPLEMENT_SCAL_MULT(mat2x3) -GLM_IMPLEMENT_SCAL_MULT(mat2x4) -GLM_IMPLEMENT_SCAL_MULT(mat3x2) -GLM_IMPLEMENT_SCAL_MULT(mat3) -GLM_IMPLEMENT_SCAL_MULT(mat3x4) -GLM_IMPLEMENT_SCAL_MULT(mat4x2) -GLM_IMPLEMENT_SCAL_MULT(mat4x3) -GLM_IMPLEMENT_SCAL_MULT(mat4) - -#undef GLM_IMPLEMENT_SCAL_MULT -} // namespace glm diff --git a/external/glm/glm/gtx/scalar_relational.hpp b/external/glm/glm/gtx/scalar_relational.hpp deleted file mode 100644 index 8be9c57b..00000000 --- a/external/glm/glm/gtx/scalar_relational.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_scalar_relational -/// @file glm/gtx/scalar_relational.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extend a position from a source to a position at a defined length. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extend extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_scalar_relational - /// @{ - - - - /// @} -}//namespace glm - -#include "scalar_relational.inl" diff --git a/external/glm/glm/gtx/scalar_relational.inl b/external/glm/glm/gtx/scalar_relational.inl deleted file mode 100644 index c2a121cf..00000000 --- a/external/glm/glm/gtx/scalar_relational.inl +++ /dev/null @@ -1,88 +0,0 @@ -/// @ref gtx_scalar_relational - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool lessThan - ( - T const& x, - T const& y - ) - { - return x < y; - } - - template - GLM_FUNC_QUALIFIER bool lessThanEqual - ( - T const& x, - T const& y - ) - { - return x <= y; - } - - template - GLM_FUNC_QUALIFIER bool greaterThan - ( - T const& x, - T const& y - ) - { - return x > y; - } - - template - GLM_FUNC_QUALIFIER bool greaterThanEqual - ( - T const& x, - T const& y - ) - { - return x >= y; - } - - template - GLM_FUNC_QUALIFIER bool equal - ( - T const& x, - T const& y - ) - { - return detail::compute_equal::is_iec559>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER bool notEqual - ( - T const& x, - T const& y - ) - { - return !detail::compute_equal::is_iec559>::call(x, y); - } - - GLM_FUNC_QUALIFIER bool any - ( - bool const& x - ) - { - return x; - } - - GLM_FUNC_QUALIFIER bool all - ( - bool const& x - ) - { - return x; - } - - GLM_FUNC_QUALIFIER bool not_ - ( - bool const& x - ) - { - return !x; - } -}//namespace glm diff --git a/external/glm/glm/gtx/spline.hpp b/external/glm/glm/gtx/spline.hpp deleted file mode 100644 index 731c979e..00000000 --- a/external/glm/glm/gtx/spline.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/// @ref gtx_spline -/// @file glm/gtx/spline.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_spline GLM_GTX_spline -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Spline functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/optimum_pow.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_spline extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_spline - /// @{ - - /// Return a point from a catmull rom curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType catmullRom( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s); - - /// Return a point from a hermite curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType hermite( - genType const& v1, - genType const& t1, - genType const& v2, - genType const& t2, - typename genType::value_type const& s); - - /// Return a point from a cubic curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType cubic( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s); - - /// @} -}//namespace glm - -#include "spline.inl" diff --git a/external/glm/glm/gtx/spline.inl b/external/glm/glm/gtx/spline.inl deleted file mode 100644 index c3fd0565..00000000 --- a/external/glm/glm/gtx/spline.inl +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_spline - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType catmullRom - ( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s - ) - { - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); - - typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s; - typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2); - typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s; - typename genType::value_type f4 = s3 - s2; - - return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2); - - } - - template - GLM_FUNC_QUALIFIER genType hermite - ( - genType const& v1, - genType const& t1, - genType const& v2, - genType const& t2, - typename genType::value_type const& s - ) - { - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); - - typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1); - typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2; - typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s; - typename genType::value_type f4 = s3 - s2; - - return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2; - } - - template - GLM_FUNC_QUALIFIER genType cubic - ( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s - ) - { - return ((v1 * s + v2) * s + v3) * s + v4; - } -}//namespace glm diff --git a/external/glm/glm/gtx/std_based_type.hpp b/external/glm/glm/gtx/std_based_type.hpp deleted file mode 100644 index cd3be8cb..00000000 --- a/external/glm/glm/gtx/std_based_type.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_std_based_type -/// @file glm/gtx/std_based_type.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_std_based_type GLM_GTX_std_based_type -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Adds vector types based on STL value types. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_std_based_type extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_std_based_type - /// @{ - - /// Vector type based of one std::size_t component. - /// @see GLM_GTX_std_based_type - typedef vec<1, std::size_t, defaultp> size1; - - /// Vector type based of two std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<2, std::size_t, defaultp> size2; - - /// Vector type based of three std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<3, std::size_t, defaultp> size3; - - /// Vector type based of four std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<4, std::size_t, defaultp> size4; - - /// Vector type based of one std::size_t component. - /// @see GLM_GTX_std_based_type - typedef vec<1, std::size_t, defaultp> size1_t; - - /// Vector type based of two std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<2, std::size_t, defaultp> size2_t; - - /// Vector type based of three std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<3, std::size_t, defaultp> size3_t; - - /// Vector type based of four std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<4, std::size_t, defaultp> size4_t; - - /// @} -}//namespace glm - -#include "std_based_type.inl" diff --git a/external/glm/glm/gtx/std_based_type.inl b/external/glm/glm/gtx/std_based_type.inl deleted file mode 100644 index 9c34bdb6..00000000 --- a/external/glm/glm/gtx/std_based_type.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_std_based_type - -namespace glm -{ - -} diff --git a/external/glm/glm/gtx/string_cast.hpp b/external/glm/glm/gtx/string_cast.hpp deleted file mode 100644 index 27846bf8..00000000 --- a/external/glm/glm/gtx/string_cast.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/// @ref gtx_string_cast -/// @file glm/gtx/string_cast.hpp -/// -/// @see core (dependence) -/// @see gtx_integer (dependence) -/// @see gtx_quaternion (dependence) -/// -/// @defgroup gtx_string_cast GLM_GTX_string_cast -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Setup strings for GLM type values -/// -/// This extension is not supported with CUDA - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/type_precision.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" -#include -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_string_cast extension included") -# endif -#endif - -#if(GLM_COMPILER & GLM_COMPILER_CUDA) -# error "GLM_GTX_string_cast is not supported on CUDA compiler" -#endif - -namespace glm -{ - /// @addtogroup gtx_string_cast - /// @{ - - /// Create a string from a GLM vector or matrix typed variable. - /// @see gtx_string_cast extension. - template - GLM_FUNC_DECL std::string to_string(genType const& x); - - /// @} -}//namespace glm - -#include "string_cast.inl" diff --git a/external/glm/glm/gtx/string_cast.inl b/external/glm/glm/gtx/string_cast.inl deleted file mode 100644 index f67751d4..00000000 --- a/external/glm/glm/gtx/string_cast.inl +++ /dev/null @@ -1,492 +0,0 @@ -/// @ref gtx_string_cast - -#include -#include - -namespace glm{ -namespace detail -{ - template - struct cast - { - typedef T value_type; - }; - - template <> - struct cast - { - typedef double value_type; - }; - - GLM_FUNC_QUALIFIER std::string format(const char* msg, ...) - { - std::size_t const STRING_BUFFER(4096); - char text[STRING_BUFFER]; - va_list list; - - if(msg == GLM_NULLPTR) - return std::string(); - - va_start(list, msg); -# if (GLM_COMPILER & GLM_COMPILER_VC) - vsprintf_s(text, STRING_BUFFER, msg, list); -# else// - std::vsprintf(text, msg, list); -# endif// - va_end(list); - - return std::string(text); - } - - static const char* LabelTrue = "true"; - static const char* LabelFalse = "false"; - - template - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%d";} - }; - - template - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%f";} - }; - -# if GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - template<> - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} - }; - - template<> - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} - }; -# endif//GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - - template - struct prefix{}; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "d";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "b";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u8";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i8";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u16";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i16";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u64";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i64";} - }; - - template - struct compute_to_string - {}; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<1, bool, Q> const& x) - { - return detail::format("bvec1(%s)", - x[0] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<2, bool, Q> const& x) - { - return detail::format("bvec2(%s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<3, bool, Q> const& x) - { - return detail::format("bvec3(%s, %s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse, - x[2] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<4, bool, Q> const& x) - { - return detail::format("bvec4(%s, %s, %s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse, - x[2] ? detail::LabelTrue : detail::LabelFalse, - x[3] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<1, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec1(%s)", - PrefixStr, - LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec2(%s, %s)", - PrefixStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec3(%s, %s, %s)", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1]), - static_cast::value_type>(x[2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec4(%s, %s, %s, %s)", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1]), - static_cast::value_type>(x[2]), - static_cast::value_type>(x[3])); - } - }; - - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x2((%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x3((%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x4((%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x2((%s, %s), (%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x2((%s, %s), (%s, %s), (%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2]), static_cast::value_type>(x[3][3])); - } - }; - - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(qua const& q) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%squat(%s, {%s, %s, %s})", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(q.w), - static_cast::value_type>(q.x), - static_cast::value_type>(q.y), - static_cast::value_type>(q.z)); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(tdualquat const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%sdualquat((%s, {%s, %s, %s}), (%s, {%s, %s, %s}))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x.real.w), - static_cast::value_type>(x.real.x), - static_cast::value_type>(x.real.y), - static_cast::value_type>(x.real.z), - static_cast::value_type>(x.dual.w), - static_cast::value_type>(x.dual.x), - static_cast::value_type>(x.dual.y), - static_cast::value_type>(x.dual.z)); - } - }; - -}//namespace detail - -template -GLM_FUNC_QUALIFIER std::string to_string(matType const& x) -{ - return detail::compute_to_string::call(x); -} - -}//namespace glm diff --git a/external/glm/glm/gtx/texture.hpp b/external/glm/glm/gtx/texture.hpp deleted file mode 100644 index 20585e68..00000000 --- a/external/glm/glm/gtx/texture.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/// @ref gtx_texture -/// @file glm/gtx/texture.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_texture GLM_GTX_texture -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Wrapping mode of texture coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/integer.hpp" -#include "../gtx/component_wise.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_texture extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_texture - /// @{ - - /// Compute the number of mipmaps levels necessary to create a mipmap complete texture - /// - /// @param Extent Extent of the texture base level mipmap - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - template - T levels(vec const& Extent); - - /// @} -}// namespace glm - -#include "texture.inl" - diff --git a/external/glm/glm/gtx/texture.inl b/external/glm/glm/gtx/texture.inl deleted file mode 100644 index 593c8261..00000000 --- a/external/glm/glm/gtx/texture.inl +++ /dev/null @@ -1,17 +0,0 @@ -/// @ref gtx_texture - -namespace glm -{ - template - inline T levels(vec const& Extent) - { - return glm::log2(compMax(Extent)) + static_cast(1); - } - - template - inline T levels(T Extent) - { - return vec<1, T, defaultp>(Extent).x; - } -}//namespace glm - diff --git a/external/glm/glm/gtx/transform.hpp b/external/glm/glm/gtx/transform.hpp deleted file mode 100644 index 0279fc8b..00000000 --- a/external/glm/glm/gtx/transform.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_transform -/// @file glm/gtx/transform.hpp -/// -/// @see core (dependence) -/// @see gtc_matrix_transform (dependence) -/// @see gtx_transform -/// @see gtx_transform2 -/// -/// @defgroup gtx_transform GLM_GTX_transform -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add transformation matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_transform extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_transform - /// @{ - - /// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> translate( - vec<3, T, Q> const& v); - - /// Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotate( - T angle, - vec<3, T, Q> const& v); - - /// Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> scale( - vec<3, T, Q> const& v); - - /// @} -}// namespace glm - -#include "transform.inl" diff --git a/external/glm/glm/gtx/transform.inl b/external/glm/glm/gtx/transform.inl deleted file mode 100644 index 48ee6801..00000000 --- a/external/glm/glm/gtx/transform.inl +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref gtx_transform - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(vec<3, T, Q> const& v) - { - return translate(mat<4, 4, T, Q>(static_cast(1)), v); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(T angle, vec<3, T, Q> const& v) - { - return rotate(mat<4, 4, T, Q>(static_cast(1)), angle, v); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(vec<3, T, Q> const& v) - { - return scale(mat<4, 4, T, Q>(static_cast(1)), v); - } - -}//namespace glm diff --git a/external/glm/glm/gtx/transform2.hpp b/external/glm/glm/gtx/transform2.hpp deleted file mode 100644 index 0d8ba9d9..00000000 --- a/external/glm/glm/gtx/transform2.hpp +++ /dev/null @@ -1,89 +0,0 @@ -/// @ref gtx_transform2 -/// @file glm/gtx/transform2.hpp -/// -/// @see core (dependence) -/// @see gtx_transform (dependence) -/// -/// @defgroup gtx_transform2 GLM_GTX_transform2 -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add extra transformation matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_transform2 extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_transform2 - /// @{ - - //! Transforms a matrix with a shearing on X axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T y); - - //! Transforms a matrix with a shearing on Y axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T x); - - //! Transforms a matrix with a shearing on X axis - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T y, T z); - - //! Transforms a matrix with a shearing on Y axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T x, T z); - - //! Transforms a matrix with a shearing on Z axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T x, T y); - - //template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(const mat<4, 4, T, Q> & m, shearPlane, planePoint, angle) - // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0 - // - dot(PointOnPlane, normal) * OnPlaneVector 1 - - // Reflect functions seem to don't work - //template mat<3, 3, T, Q> reflect2D(const mat<3, 3, T, Q> & m, const vec<3, T, Q>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) - //template mat<4, 4, T, Q> reflect3D(const mat<4, 4, T, Q> & m, const vec<3, T, Q>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) - - //! Build planar projection matrix along normal axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> proj2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal); - - //! Build planar projection matrix along normal axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> proj3D(mat<4, 4, T, Q> const & m, vec<3, T, Q> const& normal); - - //! Build a scale bias matrix. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(T scale, T bias); - - //! Build a scale bias matrix. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias); - - /// @} -}// namespace glm - -#include "transform2.inl" diff --git a/external/glm/glm/gtx/transform2.inl b/external/glm/glm/gtx/transform2.inl deleted file mode 100644 index 2b53198b..00000000 --- a/external/glm/glm/gtx/transform2.inl +++ /dev/null @@ -1,125 +0,0 @@ -/// @ref gtx_transform2 - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T s) - { - mat<3, 3, T, Q> r(1); - r[1][0] = s; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T s) - { - mat<3, 3, T, Q> r(1); - r[0][1] = s; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[0][1] = s; - r[0][2] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[1][0] = s; - r[1][2] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[2][0] = s; - r[2][1] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> reflect2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal) - { - mat<3, 3, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; - r[0][1] = -static_cast(2) * normal.x * normal.y; - r[1][0] = -static_cast(2) * normal.x * normal.y; - r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> reflect3D(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& normal) - { - mat<4, 4, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; - r[0][1] = -static_cast(2) * normal.x * normal.y; - r[0][2] = -static_cast(2) * normal.x * normal.z; - - r[1][0] = -static_cast(2) * normal.x * normal.y; - r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; - r[1][2] = -static_cast(2) * normal.y * normal.z; - - r[2][0] = -static_cast(2) * normal.x * normal.z; - r[2][1] = -static_cast(2) * normal.y * normal.z; - r[2][2] = static_cast(1) - static_cast(2) * normal.z * normal.z; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> proj2D( - const mat<3, 3, T, Q>& m, - const vec<3, T, Q>& normal) - { - mat<3, 3, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - normal.x * normal.x; - r[0][1] = - normal.x * normal.y; - r[1][0] = - normal.x * normal.y; - r[1][1] = static_cast(1) - normal.y * normal.y; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> proj3D( - const mat<4, 4, T, Q>& m, - const vec<3, T, Q>& normal) - { - mat<4, 4, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - normal.x * normal.x; - r[0][1] = - normal.x * normal.y; - r[0][2] = - normal.x * normal.z; - r[1][0] = - normal.x * normal.y; - r[1][1] = static_cast(1) - normal.y * normal.y; - r[1][2] = - normal.y * normal.z; - r[2][0] = - normal.x * normal.z; - r[2][1] = - normal.y * normal.z; - r[2][2] = static_cast(1) - normal.z * normal.z; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(T scale, T bias) - { - mat<4, 4, T, Q> result; - result[3] = vec<4, T, Q>(vec<3, T, Q>(bias), static_cast(1)); - result[0][0] = scale; - result[1][1] = scale; - result[2][2] = scale; - return result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias) - { - return m * scaleBias(scale, bias); - } -}//namespace glm - diff --git a/external/glm/glm/gtx/type_aligned.hpp b/external/glm/glm/gtx/type_aligned.hpp deleted file mode 100644 index 2ae522c1..00000000 --- a/external/glm/glm/gtx/type_aligned.hpp +++ /dev/null @@ -1,982 +0,0 @@ -/// @ref gtx_type_aligned -/// @file glm/gtx/type_aligned.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_type_aligned GLM_GTX_type_aligned -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines aligned types. - -#pragma once - -// Dependency: -#include "../gtc/type_precision.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_type_aligned extension included") -# endif -#endif - -namespace glm -{ - /////////////////////////// - // Signed int vector types - - /// @addtogroup gtx_type_aligned - /// @{ - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8); - - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8); - - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); - - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4); - - /// Default qualifier 32 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8); - - /// Default qualifier 32 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16); - - /// Default qualifier 32 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); - - /// Default qualifier 8 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2); - - /// Default qualifier 8 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4); - - /// Default qualifier 8 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4); - - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2); - - /// Default qualifier 16 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4); - - /// Default qualifier 16 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8); - - /// Default qualifier 16 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8); - - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4); - - /// Default qualifier 32 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8); - - /// Default qualifier 32 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16); - - /// Default qualifier 32 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16); - - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8); - - /// Default qualifier 64 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16); - - /// Default qualifier 64 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32); - - /// Default qualifier 64 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32); - - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8); - - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8); - - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); - - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4); - - /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8); - - /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16); - - /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); - - /// Default qualifier 8 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2); - - /// Default qualifier 8 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4); - - /// Default qualifier 8 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4); - - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2); - - /// Default qualifier 16 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4); - - /// Default qualifier 16 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8); - - /// Default qualifier 16 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8); - - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4); - - /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8); - - /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16); - - /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16); - - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8); - - /// Default qualifier 64 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16); - - /// Default qualifier 64 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32); - - /// Default qualifier 64 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32); - - - ////////////////////// - // Float vector types - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4); - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4); - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4); - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8); - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8); - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); - -# endif//GLM_FORCE_SINGLE_ONLY - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16); - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16); - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); - - - /// Double-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8); - - /// Double-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16); - - /// Double-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32); - - /// Double-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32); - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); - - /// Double-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16); - - /// Double-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32); - - /// Double-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - ////////////////////// - // Float matrix types - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1 mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 fmat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f32 fmat1x1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16); - - /// Single-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16); - - /// Single-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16); - - /// Single-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16); - - /// Single-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16); - - /// Single-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16); - - /// Single-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 f32mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f32 f32mat1x1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16); - - /// Single-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16); - - /// Single-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16); - - /// Single-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16); - - /// Single-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16); - - /// Single-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16); - - /// Single-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16); - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 f64mat1; - - /// Double-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32); - - /// Double-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32); - - /// Double-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32); - - - /// Double-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f64 f64mat1x1; - - /// Double-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32); - - /// Double-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32); - - /// Double-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32); - - /// Double-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32); - - /// Double-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32); - - /// Double-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32); - - /// Double-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32); - - /// Double-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32); - - /// Double-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - - ////////////////////////// - // Quaternion types - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16); - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16); - - /// Double-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32); - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - /// @} -}//namespace glm - -#include "type_aligned.inl" diff --git a/external/glm/glm/gtx/type_aligned.inl b/external/glm/glm/gtx/type_aligned.inl deleted file mode 100644 index 54c1b818..00000000 --- a/external/glm/glm/gtx/type_aligned.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtc_type_aligned - -namespace glm -{ - -} diff --git a/external/glm/glm/gtx/type_trait.hpp b/external/glm/glm/gtx/type_trait.hpp deleted file mode 100644 index 56685c8c..00000000 --- a/external/glm/glm/gtx/type_trait.hpp +++ /dev/null @@ -1,85 +0,0 @@ -/// @ref gtx_type_trait -/// @file glm/gtx/type_trait.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_type_trait GLM_GTX_type_trait -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines traits for each type. - -#pragma once - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_type_trait extension included") -# endif -#endif - -// Dependency: -#include "../detail/qualifier.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" - -namespace glm -{ - /// @addtogroup gtx_type_trait - /// @{ - - template - struct type - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = false; - static length_t const components = 0; - static length_t const cols = 0; - static length_t const rows = 0; - }; - - template - struct type > - { - static bool const is_vec = true; - static bool const is_mat = false; - static bool const is_quat = false; - static length_t const components = L; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = true; - static bool const is_quat = false; - static length_t const components = C; - static length_t const cols = C; - static length_t const rows = R; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = true; - static length_t const components = 4; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = true; - static length_t const components = 8; - }; - - /// @} -}//namespace glm - -#include "type_trait.inl" diff --git a/external/glm/glm/gtx/type_trait.inl b/external/glm/glm/gtx/type_trait.inl deleted file mode 100644 index 045de959..00000000 --- a/external/glm/glm/gtx/type_trait.inl +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtx_type_trait - -namespace glm -{ - template - bool const type::is_vec; - template - bool const type::is_mat; - template - bool const type::is_quat; - template - length_t const type::components; - template - length_t const type::cols; - template - length_t const type::rows; - - // vec - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - - // mat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - template - length_t const type >::cols; - template - length_t const type >::rows; - - // tquat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - - // tdualquat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; -}//namespace glm diff --git a/external/glm/glm/gtx/vec_swizzle.hpp b/external/glm/glm/gtx/vec_swizzle.hpp deleted file mode 100644 index 1c49abcb..00000000 --- a/external/glm/glm/gtx/vec_swizzle.hpp +++ /dev/null @@ -1,2782 +0,0 @@ -/// @ref gtx_vec_swizzle -/// @file glm/gtx/vec_swizzle.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions to perform swizzle operation. - -#pragma once - -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vec_swizzle extension included") -# endif -#endif - -namespace glm { - // xx - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - // xy - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - // xz - template - GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.z); - } - - // xw - template - GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.w); - } - - // yx - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - // yy - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - // yz - template - GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.z); - } - - // yw - template - GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.w); - } - - // zx - template - GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.x); - } - - // zy - template - GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.y); - } - - // zz - template - GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.z); - } - - // zw - template - GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.w); - } - - // wx - template - GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.x); - } - - // wy - template - GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.y); - } - - // wz - template - GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.z); - } - - // ww - template - GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.w); - } - - // xxx - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - // xxy - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - // xxz - template - GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.z); - } - - // xxw - template - GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.w); - } - - // xyx - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - // xyy - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - // xyz - template - GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.z); - } - - // xyw - template - GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.w); - } - - // xzx - template - GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.x); - } - - // xzy - template - GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.y); - } - - // xzz - template - GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.z); - } - - // xzw - template - GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.w); - } - - // xwx - template - GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.x); - } - - // xwy - template - GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.y); - } - - // xwz - template - GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.z); - } - - // xww - template - GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.w); - } - - // yxx - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - // yxy - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - // yxz - template - GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.z); - } - - // yxw - template - GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.w); - } - - // yyx - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - // yyy - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - // yyz - template - GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.z); - } - - // yyw - template - GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.w); - } - - // yzx - template - GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.x); - } - - // yzy - template - GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.y); - } - - // yzz - template - GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.z); - } - - // yzw - template - GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.w); - } - - // ywx - template - GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.x); - } - - // ywy - template - GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.y); - } - - // ywz - template - GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.z); - } - - // yww - template - GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.w); - } - - // zxx - template - GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.x); - } - - // zxy - template - GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.y); - } - - // zxz - template - GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.z); - } - - // zxw - template - GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.w); - } - - // zyx - template - GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.x); - } - - // zyy - template - GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.y); - } - - // zyz - template - GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.z); - } - - // zyw - template - GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.w); - } - - // zzx - template - GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.x); - } - - // zzy - template - GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.y); - } - - // zzz - template - GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.z); - } - - // zzw - template - GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.w); - } - - // zwx - template - GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.x); - } - - // zwy - template - GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.y); - } - - // zwz - template - GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.z); - } - - // zww - template - GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.w); - } - - // wxx - template - GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.x); - } - - // wxy - template - GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.y); - } - - // wxz - template - GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.z); - } - - // wxw - template - GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.w); - } - - // wyx - template - GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.x); - } - - // wyy - template - GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.y); - } - - // wyz - template - GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.z); - } - - // wyw - template - GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.w); - } - - // wzx - template - GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.x); - } - - // wzy - template - GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.y); - } - - // wzz - template - GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.z); - } - - // wzw - template - GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.w); - } - - // wwx - template - GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.x); - } - - // wwy - template - GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.y); - } - - // wwz - template - GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.z); - } - - // www - template - GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.w); - } - - // xxxx - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - // xxxy - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - // xxxz - template - GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); - } - - // xxxw - template - GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w); - } - - // xxyx - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - // xxyy - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - // xxyz - template - GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); - } - - // xxyw - template - GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w); - } - - // xxzx - template - GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); - } - - // xxzy - template - GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); - } - - // xxzz - template - GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); - } - - // xxzw - template - GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w); - } - - // xxwx - template - GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x); - } - - // xxwy - template - GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y); - } - - // xxwz - template - GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z); - } - - // xxww - template - GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w); - } - - // xyxx - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - // xyxy - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - // xyxz - template - GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); - } - - // xyxw - template - GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w); - } - - // xyyx - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - // xyyy - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - // xyyz - template - GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); - } - - // xyyw - template - GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w); - } - - // xyzx - template - GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); - } - - // xyzy - template - GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); - } - - // xyzz - template - GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); - } - - // xyzw - template - GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w); - } - - // xywx - template - GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x); - } - - // xywy - template - GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y); - } - - // xywz - template - GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z); - } - - // xyww - template - GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w); - } - - // xzxx - template - GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); - } - - // xzxy - template - GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); - } - - // xzxz - template - GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); - } - - // xzxw - template - GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w); - } - - // xzyx - template - GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); - } - - // xzyy - template - GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); - } - - // xzyz - template - GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); - } - - // xzyw - template - GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w); - } - - // xzzx - template - GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); - } - - // xzzy - template - GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); - } - - // xzzz - template - GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); - } - - // xzzw - template - GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w); - } - - // xzwx - template - GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x); - } - - // xzwy - template - GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y); - } - - // xzwz - template - GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z); - } - - // xzww - template - GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w); - } - - // xwxx - template - GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x); - } - - // xwxy - template - GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y); - } - - // xwxz - template - GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z); - } - - // xwxw - template - GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w); - } - - // xwyx - template - GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x); - } - - // xwyy - template - GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y); - } - - // xwyz - template - GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z); - } - - // xwyw - template - GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w); - } - - // xwzx - template - GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x); - } - - // xwzy - template - GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y); - } - - // xwzz - template - GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z); - } - - // xwzw - template - GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w); - } - - // xwwx - template - GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x); - } - - // xwwy - template - GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y); - } - - // xwwz - template - GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z); - } - - // xwww - template - GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w); - } - - // yxxx - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - // yxxy - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - // yxxz - template - GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); - } - - // yxxw - template - GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w); - } - - // yxyx - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - // yxyy - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - // yxyz - template - GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); - } - - // yxyw - template - GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w); - } - - // yxzx - template - GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); - } - - // yxzy - template - GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); - } - - // yxzz - template - GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); - } - - // yxzw - template - GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w); - } - - // yxwx - template - GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x); - } - - // yxwy - template - GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y); - } - - // yxwz - template - GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z); - } - - // yxww - template - GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w); - } - - // yyxx - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - // yyxy - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - // yyxz - template - GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); - } - - // yyxw - template - GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w); - } - - // yyyx - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - // yyyy - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - // yyyz - template - GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); - } - - // yyyw - template - GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w); - } - - // yyzx - template - GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); - } - - // yyzy - template - GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); - } - - // yyzz - template - GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); - } - - // yyzw - template - GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w); - } - - // yywx - template - GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x); - } - - // yywy - template - GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y); - } - - // yywz - template - GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z); - } - - // yyww - template - GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w); - } - - // yzxx - template - GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); - } - - // yzxy - template - GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); - } - - // yzxz - template - GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); - } - - // yzxw - template - GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w); - } - - // yzyx - template - GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); - } - - // yzyy - template - GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); - } - - // yzyz - template - GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); - } - - // yzyw - template - GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w); - } - - // yzzx - template - GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); - } - - // yzzy - template - GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); - } - - // yzzz - template - GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); - } - - // yzzw - template - GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w); - } - - // yzwx - template - GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x); - } - - // yzwy - template - GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y); - } - - // yzwz - template - GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z); - } - - // yzww - template - GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w); - } - - // ywxx - template - GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x); - } - - // ywxy - template - GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y); - } - - // ywxz - template - GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z); - } - - // ywxw - template - GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w); - } - - // ywyx - template - GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x); - } - - // ywyy - template - GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y); - } - - // ywyz - template - GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z); - } - - // ywyw - template - GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w); - } - - // ywzx - template - GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x); - } - - // ywzy - template - GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y); - } - - // ywzz - template - GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z); - } - - // ywzw - template - GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w); - } - - // ywwx - template - GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x); - } - - // ywwy - template - GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y); - } - - // ywwz - template - GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z); - } - - // ywww - template - GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w); - } - - // zxxx - template - GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); - } - - // zxxy - template - GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); - } - - // zxxz - template - GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); - } - - // zxxw - template - GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w); - } - - // zxyx - template - GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); - } - - // zxyy - template - GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); - } - - // zxyz - template - GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); - } - - // zxyw - template - GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w); - } - - // zxzx - template - GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); - } - - // zxzy - template - GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); - } - - // zxzz - template - GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); - } - - // zxzw - template - GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w); - } - - // zxwx - template - GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x); - } - - // zxwy - template - GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y); - } - - // zxwz - template - GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z); - } - - // zxww - template - GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w); - } - - // zyxx - template - GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); - } - - // zyxy - template - GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); - } - - // zyxz - template - GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); - } - - // zyxw - template - GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w); - } - - // zyyx - template - GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); - } - - // zyyy - template - GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); - } - - // zyyz - template - GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); - } - - // zyyw - template - GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w); - } - - // zyzx - template - GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); - } - - // zyzy - template - GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); - } - - // zyzz - template - GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); - } - - // zyzw - template - GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w); - } - - // zywx - template - GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x); - } - - // zywy - template - GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y); - } - - // zywz - template - GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z); - } - - // zyww - template - GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w); - } - - // zzxx - template - GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); - } - - // zzxy - template - GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); - } - - // zzxz - template - GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); - } - - // zzxw - template - GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w); - } - - // zzyx - template - GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); - } - - // zzyy - template - GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); - } - - // zzyz - template - GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); - } - - // zzyw - template - GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w); - } - - // zzzx - template - GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); - } - - // zzzy - template - GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); - } - - // zzzz - template - GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); - } - - // zzzw - template - GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w); - } - - // zzwx - template - GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x); - } - - // zzwy - template - GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y); - } - - // zzwz - template - GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z); - } - - // zzww - template - GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w); - } - - // zwxx - template - GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x); - } - - // zwxy - template - GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y); - } - - // zwxz - template - GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z); - } - - // zwxw - template - GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w); - } - - // zwyx - template - GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x); - } - - // zwyy - template - GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y); - } - - // zwyz - template - GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z); - } - - // zwyw - template - GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w); - } - - // zwzx - template - GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x); - } - - // zwzy - template - GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y); - } - - // zwzz - template - GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z); - } - - // zwzw - template - GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w); - } - - // zwwx - template - GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x); - } - - // zwwy - template - GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y); - } - - // zwwz - template - GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z); - } - - // zwww - template - GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w); - } - - // wxxx - template - GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x); - } - - // wxxy - template - GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y); - } - - // wxxz - template - GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z); - } - - // wxxw - template - GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w); - } - - // wxyx - template - GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x); - } - - // wxyy - template - GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y); - } - - // wxyz - template - GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z); - } - - // wxyw - template - GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w); - } - - // wxzx - template - GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x); - } - - // wxzy - template - GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y); - } - - // wxzz - template - GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z); - } - - // wxzw - template - GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w); - } - - // wxwx - template - GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x); - } - - // wxwy - template - GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y); - } - - // wxwz - template - GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z); - } - - // wxww - template - GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w); - } - - // wyxx - template - GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x); - } - - // wyxy - template - GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y); - } - - // wyxz - template - GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z); - } - - // wyxw - template - GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w); - } - - // wyyx - template - GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x); - } - - // wyyy - template - GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y); - } - - // wyyz - template - GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z); - } - - // wyyw - template - GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w); - } - - // wyzx - template - GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x); - } - - // wyzy - template - GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y); - } - - // wyzz - template - GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z); - } - - // wyzw - template - GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w); - } - - // wywx - template - GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x); - } - - // wywy - template - GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y); - } - - // wywz - template - GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z); - } - - // wyww - template - GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w); - } - - // wzxx - template - GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x); - } - - // wzxy - template - GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y); - } - - // wzxz - template - GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z); - } - - // wzxw - template - GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w); - } - - // wzyx - template - GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x); - } - - // wzyy - template - GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y); - } - - // wzyz - template - GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z); - } - - // wzyw - template - GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w); - } - - // wzzx - template - GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x); - } - - // wzzy - template - GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y); - } - - // wzzz - template - GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z); - } - - // wzzw - template - GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w); - } - - // wzwx - template - GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x); - } - - // wzwy - template - GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y); - } - - // wzwz - template - GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z); - } - - // wzww - template - GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w); - } - - // wwxx - template - GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x); - } - - // wwxy - template - GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y); - } - - // wwxz - template - GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z); - } - - // wwxw - template - GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w); - } - - // wwyx - template - GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x); - } - - // wwyy - template - GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y); - } - - // wwyz - template - GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z); - } - - // wwyw - template - GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w); - } - - // wwzx - template - GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x); - } - - // wwzy - template - GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y); - } - - // wwzz - template - GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z); - } - - // wwzw - template - GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w); - } - - // wwwx - template - GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x); - } - - // wwwy - template - GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y); - } - - // wwwz - template - GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z); - } - - // wwww - template - GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w); - } - -} diff --git a/external/glm/glm/gtx/vector_angle.hpp b/external/glm/glm/gtx/vector_angle.hpp deleted file mode 100644 index 9ae43712..00000000 --- a/external/glm/glm/gtx/vector_angle.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/// @ref gtx_vector_angle -/// @file glm/gtx/vector_angle.hpp -/// -/// @see core (dependence) -/// @see gtx_quaternion (dependence) -/// @see gtx_epsilon (dependence) -/// -/// @defgroup gtx_vector_angle GLM_GTX_vector_angle -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Compute angle between vectors - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/epsilon.hpp" -#include "../gtx/quaternion.hpp" -#include "../gtx/rotate_vector.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vector_angle extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_vector_angle - /// @{ - - //! Returns the absolute angle between two vectors. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T angle(vec const& x, vec const& y); - - //! Returns the oriented angle between two 2d vectors. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y); - - //! Returns the oriented angle between two 3d vectors based from a reference axis. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref); - - /// @} -}// namespace glm - -#include "vector_angle.inl" diff --git a/external/glm/glm/gtx/vector_angle.inl b/external/glm/glm/gtx/vector_angle.inl deleted file mode 100644 index a1f957a5..00000000 --- a/external/glm/glm/gtx/vector_angle.inl +++ /dev/null @@ -1,44 +0,0 @@ -/// @ref gtx_vector_angle - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType angle - ( - genType const& x, - genType const& y - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); - return acos(clamp(dot(x, y), genType(-1), genType(1))); - } - - template - GLM_FUNC_QUALIFIER T angle(vec const& x, vec const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); - return acos(clamp(dot(x, y), T(-1), T(1))); - } - - //! \todo epsilon is hard coded to 0.01 - template - GLM_FUNC_QUALIFIER T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); - T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); - - if(all(epsilonEqual(y, glm::rotate(x, Angle), T(0.0001)))) - return Angle; - else - return -Angle; - } - - template - GLM_FUNC_QUALIFIER T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); - - T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); - return mix(Angle, -Angle, dot(ref, cross(x, y)) < T(0)); - } -}//namespace glm diff --git a/external/glm/glm/gtx/vector_query.hpp b/external/glm/glm/gtx/vector_query.hpp deleted file mode 100644 index 77c7b974..00000000 --- a/external/glm/glm/gtx/vector_query.hpp +++ /dev/null @@ -1,66 +0,0 @@ -/// @ref gtx_vector_query -/// @file glm/gtx/vector_query.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_vector_query GLM_GTX_vector_query -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Query informations of vector types - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vector_query extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_vector_query - /// @{ - - //! Check whether two vectors are collinears. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areCollinear(vec const& v0, vec const& v1, T const& epsilon); - - //! Check whether two vectors are orthogonals. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon); - - //! Check whether a vector is normalized. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool isNormalized(vec const& v, T const& epsilon); - - //! Check whether a vector is null. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool isNull(vec const& v, T const& epsilon); - - //! Check whether a each component of a vector is null. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL vec isCompNull(vec const& v, T const& epsilon); - - //! Check whether two vectors are orthonormal. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon); - - /// @} -}// namespace glm - -#include "vector_query.inl" diff --git a/external/glm/glm/gtx/vector_query.inl b/external/glm/glm/gtx/vector_query.inl deleted file mode 100644 index d1a5c9be..00000000 --- a/external/glm/glm/gtx/vector_query.inl +++ /dev/null @@ -1,154 +0,0 @@ -/// @ref gtx_vector_query - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_areCollinear{}; - - template - struct compute_areCollinear<2, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<2, T, Q> const& v0, vec<2, T, Q> const& v1, T const& epsilon) - { - return length(cross(vec<3, T, Q>(v0, static_cast(0)), vec<3, T, Q>(v1, static_cast(0)))) < epsilon; - } - }; - - template - struct compute_areCollinear<3, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, T const& epsilon) - { - return length(cross(v0, v1)) < epsilon; - } - }; - - template - struct compute_areCollinear<4, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v0, vec<4, T, Q> const& v1, T const& epsilon) - { - return length(cross(vec<3, T, Q>(v0), vec<3, T, Q>(v1))) < epsilon; - } - }; - - template - struct compute_isCompNull{}; - - template - struct compute_isCompNull<2, T, Q> - { - GLM_FUNC_QUALIFIER static vec<2, bool, Q> call(vec<2, T, Q> const& v, T const& epsilon) - { - return vec<2, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon)); - } - }; - - template - struct compute_isCompNull<3, T, Q> - { - GLM_FUNC_QUALIFIER static vec<3, bool, Q> call(vec<3, T, Q> const& v, T const& epsilon) - { - return vec<3, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon), - (abs(v.z) < epsilon)); - } - }; - - template - struct compute_isCompNull<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, bool, Q> call(vec<4, T, Q> const& v, T const& epsilon) - { - return vec<4, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon), - (abs(v.z) < epsilon), - (abs(v.w) < epsilon)); - } - }; - -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool areCollinear(vec const& v0, vec const& v1, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areCollinear' only accept floating-point inputs"); - - return detail::compute_areCollinear::call(v0, v1, epsilon); - } - - template - GLM_FUNC_QUALIFIER bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areOrthogonal' only accept floating-point inputs"); - - return abs(dot(v0, v1)) <= max( - static_cast(1), - length(v0)) * max(static_cast(1), length(v1)) * epsilon; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNormalized' only accept floating-point inputs"); - - return abs(length(v) - static_cast(1)) <= static_cast(2) * epsilon; - } - - template - GLM_FUNC_QUALIFIER bool isNull(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNull' only accept floating-point inputs"); - - return length(v) <= epsilon; - } - - template - GLM_FUNC_QUALIFIER vec isCompNull(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isCompNull' only accept floating-point inputs"); - - return detail::compute_isCompNull::call(v, epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<2, bool, Q> isCompNull(vec<2, T, Q> const& v, T const& epsilon) - { - return vec<2, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<3, bool, Q> isCompNull(vec<3, T, Q> const& v, T const& epsilon) - { - return vec<3, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon, - abs(v.z) < epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isCompNull(vec<4, T, Q> const& v, T const& epsilon) - { - return vec<4, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon, - abs(v.z) < epsilon, - abs(v.w) < epsilon); - } - - template - GLM_FUNC_QUALIFIER bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon) - { - return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon); - } - -}//namespace glm diff --git a/external/glm/glm/gtx/wrap.hpp b/external/glm/glm/gtx/wrap.hpp deleted file mode 100644 index ad4eb3fc..00000000 --- a/external/glm/glm/gtx/wrap.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref gtx_wrap -/// @file glm/gtx/wrap.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_wrap GLM_GTX_wrap -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Wrapping mode of texture coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../ext/scalar_common.hpp" -#include "../ext/vector_common.hpp" -#include "../gtc/vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_wrap extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_wrap - /// @{ - - /// @} -}// namespace glm - -#include "wrap.inl" diff --git a/external/glm/glm/gtx/wrap.inl b/external/glm/glm/gtx/wrap.inl deleted file mode 100644 index 4be3b4c3..00000000 --- a/external/glm/glm/gtx/wrap.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_wrap - -namespace glm -{ - -}//namespace glm diff --git a/external/glm/glm/integer.hpp b/external/glm/glm/integer.hpp deleted file mode 100644 index 8817db3f..00000000 --- a/external/glm/glm/integer.hpp +++ /dev/null @@ -1,212 +0,0 @@ -/// @ref core -/// @file glm/integer.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.8 Integer Functions -/// -/// @defgroup core_func_integer Integer functions -/// @ingroup core -/// -/// Provides GLSL functions on integer types -/// -/// These all operate component-wise. The description is per component. -/// The notation [a, b] means the set of bits from bit-number a through bit-number -/// b, inclusive. The lowest-order bit is bit 0. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/qualifier.hpp" -#include "common.hpp" -#include "vector_relational.hpp" - -namespace glm -{ - /// @addtogroup core_func_integer - /// @{ - - /// Adds 32-bit unsigned integer x and y, returning the sum - /// modulo pow(2, 32). The value carry is set to 0 if the sum was - /// less than pow(2, 32), or to 1 otherwise. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL uaddCarry man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec uaddCarry( - vec const& x, - vec const& y, - vec & carry); - - /// Subtracts the 32-bit unsigned integer y from x, returning - /// the difference if non-negative, or pow(2, 32) plus the difference - /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL usubBorrow man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec usubBorrow( - vec const& x, - vec const& y, - vec & borrow); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL umulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL void umulExtended( - vec const& x, - vec const& y, - vec & msb, - vec & lsb); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL imulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL void imulExtended( - vec const& x, - vec const& y, - vec & msb, - vec & lsb); - - /// Extracts bits [offset, offset + bits - 1] from value, - /// returning them in the least significant bits of the result. - /// For unsigned data types, the most significant bits of the - /// result will be set to zero. For signed data types, the - /// most significant bits will be set to the value of bit offset + base - 1. - /// - /// If bits is zero, the result will be zero. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used - /// to store the operand. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL bitfieldExtract man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldExtract( - vec const& Value, - int Offset, - int Bits); - - /// Returns the insertion the bits least-significant bits of insert into base. - /// - /// The result will have bits [offset, offset + bits - 1] taken - /// from bits [0, bits - 1] of insert, and all other bits taken - /// directly from the corresponding bits of base. If bits is - /// zero, the result will simply be base. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used to - /// store the operand. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldInsert man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldInsert( - vec const& Base, - vec const& Insert, - int Offset, - int Bits); - - /// Returns the reversal of the bits of value. - /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, - /// where bits is the total number of bits used to represent value. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldReverse man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldReverse(vec const& v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam genType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitCount man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int bitCount(genType v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitCount man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitCount(vec const& v); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see GLSL findLSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int findLSB(genIUType x); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL findLSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec findLSB(vec const& v); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see GLSL findMSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int findMSB(genIUType x); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL findMSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec findMSB(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_integer.inl" diff --git a/external/glm/glm/mat2x2.hpp b/external/glm/glm/mat2x2.hpp deleted file mode 100644 index 96bec96b..00000000 --- a/external/glm/glm/mat2x2.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat2x2.hpp - -#pragma once -#include "./ext/matrix_double2x2.hpp" -#include "./ext/matrix_double2x2_precision.hpp" -#include "./ext/matrix_float2x2.hpp" -#include "./ext/matrix_float2x2_precision.hpp" - diff --git a/external/glm/glm/mat2x3.hpp b/external/glm/glm/mat2x3.hpp deleted file mode 100644 index d68dc25e..00000000 --- a/external/glm/glm/mat2x3.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat2x3.hpp - -#pragma once -#include "./ext/matrix_double2x3.hpp" -#include "./ext/matrix_double2x3_precision.hpp" -#include "./ext/matrix_float2x3.hpp" -#include "./ext/matrix_float2x3_precision.hpp" - diff --git a/external/glm/glm/mat2x4.hpp b/external/glm/glm/mat2x4.hpp deleted file mode 100644 index b04b7387..00000000 --- a/external/glm/glm/mat2x4.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat2x4.hpp - -#pragma once -#include "./ext/matrix_double2x4.hpp" -#include "./ext/matrix_double2x4_precision.hpp" -#include "./ext/matrix_float2x4.hpp" -#include "./ext/matrix_float2x4_precision.hpp" - diff --git a/external/glm/glm/mat3x2.hpp b/external/glm/glm/mat3x2.hpp deleted file mode 100644 index c8531537..00000000 --- a/external/glm/glm/mat3x2.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat3x2.hpp - -#pragma once -#include "./ext/matrix_double3x2.hpp" -#include "./ext/matrix_double3x2_precision.hpp" -#include "./ext/matrix_float3x2.hpp" -#include "./ext/matrix_float3x2_precision.hpp" - diff --git a/external/glm/glm/mat3x3.hpp b/external/glm/glm/mat3x3.hpp deleted file mode 100644 index fd4fa31c..00000000 --- a/external/glm/glm/mat3x3.hpp +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref core -/// @file glm/mat3x3.hpp - -#pragma once -#include "./ext/matrix_double3x3.hpp" -#include "./ext/matrix_double3x3_precision.hpp" -#include "./ext/matrix_float3x3.hpp" -#include "./ext/matrix_float3x3_precision.hpp" diff --git a/external/glm/glm/mat3x4.hpp b/external/glm/glm/mat3x4.hpp deleted file mode 100644 index 6342bf5b..00000000 --- a/external/glm/glm/mat3x4.hpp +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref core -/// @file glm/mat3x4.hpp - -#pragma once -#include "./ext/matrix_double3x4.hpp" -#include "./ext/matrix_double3x4_precision.hpp" -#include "./ext/matrix_float3x4.hpp" -#include "./ext/matrix_float3x4_precision.hpp" diff --git a/external/glm/glm/mat4x2.hpp b/external/glm/glm/mat4x2.hpp deleted file mode 100644 index e013e46b..00000000 --- a/external/glm/glm/mat4x2.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat4x2.hpp - -#pragma once -#include "./ext/matrix_double4x2.hpp" -#include "./ext/matrix_double4x2_precision.hpp" -#include "./ext/matrix_float4x2.hpp" -#include "./ext/matrix_float4x2_precision.hpp" - diff --git a/external/glm/glm/mat4x3.hpp b/external/glm/glm/mat4x3.hpp deleted file mode 100644 index 205725ab..00000000 --- a/external/glm/glm/mat4x3.hpp +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref core -/// @file glm/mat4x3.hpp - -#pragma once -#include "./ext/matrix_double4x3.hpp" -#include "./ext/matrix_double4x3_precision.hpp" -#include "./ext/matrix_float4x3.hpp" -#include "./ext/matrix_float4x3_precision.hpp" diff --git a/external/glm/glm/mat4x4.hpp b/external/glm/glm/mat4x4.hpp deleted file mode 100644 index 3515f7f3..00000000 --- a/external/glm/glm/mat4x4.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat4x4.hpp - -#pragma once -#include "./ext/matrix_double4x4.hpp" -#include "./ext/matrix_double4x4_precision.hpp" -#include "./ext/matrix_float4x4.hpp" -#include "./ext/matrix_float4x4_precision.hpp" - diff --git a/external/glm/glm/matrix.hpp b/external/glm/glm/matrix.hpp deleted file mode 100644 index 6badf538..00000000 --- a/external/glm/glm/matrix.hpp +++ /dev/null @@ -1,161 +0,0 @@ -/// @ref core -/// @file glm/matrix.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions -/// -/// @defgroup core_func_matrix Matrix functions -/// @ingroup core -/// -/// Provides GLSL matrix functions. -/// -/// Include to use these core features. - -#pragma once - -// Dependencies -#include "detail/qualifier.hpp" -#include "detail/setup.hpp" -#include "vec2.hpp" -#include "vec3.hpp" -#include "vec4.hpp" -#include "mat2x2.hpp" -#include "mat2x3.hpp" -#include "mat2x4.hpp" -#include "mat3x2.hpp" -#include "mat3x3.hpp" -#include "mat3x4.hpp" -#include "mat4x2.hpp" -#include "mat4x3.hpp" -#include "mat4x4.hpp" - -namespace glm { -namespace detail -{ - template - struct outerProduct_trait{}; - - template - struct outerProduct_trait<2, 2, T, Q> - { - typedef mat<2, 2, T, Q> type; - }; - - template - struct outerProduct_trait<2, 3, T, Q> - { - typedef mat<3, 2, T, Q> type; - }; - - template - struct outerProduct_trait<2, 4, T, Q> - { - typedef mat<4, 2, T, Q> type; - }; - - template - struct outerProduct_trait<3, 2, T, Q> - { - typedef mat<2, 3, T, Q> type; - }; - - template - struct outerProduct_trait<3, 3, T, Q> - { - typedef mat<3, 3, T, Q> type; - }; - - template - struct outerProduct_trait<3, 4, T, Q> - { - typedef mat<4, 3, T, Q> type; - }; - - template - struct outerProduct_trait<4, 2, T, Q> - { - typedef mat<2, 4, T, Q> type; - }; - - template - struct outerProduct_trait<4, 3, T, Q> - { - typedef mat<3, 4, T, Q> type; - }; - - template - struct outerProduct_trait<4, 4, T, Q> - { - typedef mat<4, 4, T, Q> type; - }; -}//namespace detail - - /// @addtogroup core_func_matrix - /// @{ - - /// Multiply matrix x by matrix y component-wise, i.e., - /// result[i][j] is the scalar product of x[i][j] and y[i][j]. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL matrixCompMult man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL mat matrixCompMult(mat const& x, mat const& y); - - /// Treats the first parameter c as a column vector - /// and the second parameter r as a row vector - /// and does a linear algebraic matrix multiply c * r. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL outerProduct man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r); - - /// Returns the transposed matrix of x - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL transpose man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename mat::transpose_type transpose(mat const& x); - - /// Return the determinant of a squared matrix. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL determinant man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL T determinant(mat const& m); - - /// Return the inverse of a squared matrix. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL inverse man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL mat inverse(mat const& m); - - /// @} -}//namespace glm - -#include "detail/func_matrix.inl" diff --git a/external/glm/glm/packing.hpp b/external/glm/glm/packing.hpp deleted file mode 100644 index ca83ac1d..00000000 --- a/external/glm/glm/packing.hpp +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref core -/// @file glm/packing.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions -/// @see gtc_packing -/// -/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions -/// @ingroup core -/// -/// Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. -/// -/// These functions do not operate component-wise, rather as described in each case. -/// -/// Include to use these core features. - -#pragma once - -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float4.hpp" - -namespace glm -{ - /// @addtogroup core_func_packing - /// @{ - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packUnorm2x16(vec2 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packSnorm2x16(vec2 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packUnorm4x8(vec4 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packSnorm4x8(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm2x16: f / 65535.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm2x16: clamp(f / 32767.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p); - - /// Returns a double-qualifier value obtained by packing the components of v into a 64-bit value. - /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. - /// Otherwise, the bit- level representation of v is preserved. - /// The first vector component specifies the 32 least significant bits; - /// the second component specifies the 32 most significant bits. - /// - /// @see GLSL packDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL double packDouble2x32(uvec2 const& v); - - /// Returns a two-component unsigned integer vector representation of v. - /// The bit-level representation of v is preserved. - /// The first component of the vector contains the 32 least significant bits of the double; - /// the second component consists the 32 most significant bits. - /// - /// @see GLSL unpackDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uvec2 unpackDouble2x32(double v); - - /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these two 16- bit integers into a 32-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the second component specifies the 16 most-significant bits. - /// - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packHalf2x16(vec2 const& v); - - /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the second component is obtained from the 16 most-significant bits of v. - /// - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackHalf2x16(uint v); - - /// @} -}//namespace glm - -#include "detail/func_packing.inl" diff --git a/external/glm/glm/simd/common.h b/external/glm/glm/simd/common.h deleted file mode 100644 index 9b017cb4..00000000 --- a/external/glm/glm/simd/common.h +++ /dev/null @@ -1,240 +0,0 @@ -/// @ref simd -/// @file glm/simd/common.h - -#pragma once - -#include "platform.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_add(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_add_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_add(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_add_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sub(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_sub_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sub(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_sub_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_mul(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_mul_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_mul(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_mul_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_div_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_div(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_div_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div_lowp(glm_f32vec4 a, glm_f32vec4 b) -{ - return glm_vec4_mul(a, _mm_rcp_ps(b)); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_swizzle_xyzw(glm_f32vec4 a) -{ -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - return _mm_permute_ps(a, _MM_SHUFFLE(3, 2, 1, 0)); -# else - return _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 2, 1, 0)); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) -{ -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) - return _mm_fmadd_ss(a, b, c); -# else - return _mm_add_ss(_mm_mul_ss(a, b), c); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) -{ -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) - return _mm_fmadd_ps(a, b, c); -# else - return glm_vec4_add(glm_vec4_mul(a, b), c); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_abs(glm_f32vec4 x) -{ - return _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF))); -} - -GLM_FUNC_QUALIFIER glm_ivec4 glm_ivec4_abs(glm_ivec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSSE3_BIT - return _mm_sign_epi32(x, x); -# else - glm_ivec4 const sgn0 = _mm_srai_epi32(x, 31); - glm_ivec4 const inv0 = _mm_xor_si128(x, sgn0); - glm_ivec4 const sub0 = _mm_sub_epi32(inv0, sgn0); - return sub0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sign(glm_vec4 x) -{ - glm_vec4 const zro0 = _mm_setzero_ps(); - glm_vec4 const cmp0 = _mm_cmplt_ps(x, zro0); - glm_vec4 const cmp1 = _mm_cmpgt_ps(x, zro0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(-1.0f)); - glm_vec4 const and1 = _mm_and_ps(cmp1, _mm_set1_ps(1.0f)); - glm_vec4 const or0 = _mm_or_ps(and0, and1); - return or0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_round(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_round_ps(x, _MM_FROUND_TO_NEAREST_INT); -# else - glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); - glm_vec4 const and0 = _mm_and_ps(sgn0, x); - glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); - glm_vec4 const add0 = glm_vec4_add(x, or0); - glm_vec4 const sub0 = glm_vec4_sub(add0, or0); - return sub0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_floor(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_floor_ps(x); -# else - glm_vec4 const rnd0 = glm_vec4_round(x); - glm_vec4 const cmp0 = _mm_cmplt_ps(x, rnd0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); - glm_vec4 const sub0 = glm_vec4_sub(rnd0, and0); - return sub0; -# endif -} - -/* trunc TODO -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_trunc(glm_vec4 x) -{ - return glm_vec4(); -} -*/ - -//roundEven -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_roundEven(glm_vec4 x) -{ - glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); - glm_vec4 const and0 = _mm_and_ps(sgn0, x); - glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); - glm_vec4 const add0 = glm_vec4_add(x, or0); - glm_vec4 const sub0 = glm_vec4_sub(add0, or0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_ceil(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_ceil_ps(x); -# else - glm_vec4 const rnd0 = glm_vec4_round(x); - glm_vec4 const cmp0 = _mm_cmpgt_ps(x, rnd0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); - glm_vec4 const add0 = glm_vec4_add(rnd0, and0); - return add0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fract(glm_vec4 x) -{ - glm_vec4 const flr0 = glm_vec4_floor(x); - glm_vec4 const sub0 = glm_vec4_sub(x, flr0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mod(glm_vec4 x, glm_vec4 y) -{ - glm_vec4 const div0 = glm_vec4_div(x, y); - glm_vec4 const flr0 = glm_vec4_floor(div0); - glm_vec4 const mul0 = glm_vec4_mul(y, flr0); - glm_vec4 const sub0 = glm_vec4_sub(x, mul0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_clamp(glm_vec4 v, glm_vec4 minVal, glm_vec4 maxVal) -{ - glm_vec4 const min0 = _mm_min_ps(v, maxVal); - glm_vec4 const max0 = _mm_max_ps(min0, minVal); - return max0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mix(glm_vec4 v1, glm_vec4 v2, glm_vec4 a) -{ - glm_vec4 const sub0 = glm_vec4_sub(_mm_set1_ps(1.0f), a); - glm_vec4 const mul0 = glm_vec4_mul(v1, sub0); - glm_vec4 const mad0 = glm_vec4_fma(v2, a, mul0); - return mad0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_step(glm_vec4 edge, glm_vec4 x) -{ - glm_vec4 const cmp = _mm_cmple_ps(x, edge); - return _mm_movemask_ps(cmp) == 0 ? _mm_set1_ps(1.0f) : _mm_setzero_ps(); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4 edge1, glm_vec4 x) -{ - glm_vec4 const sub0 = glm_vec4_sub(x, edge0); - glm_vec4 const sub1 = glm_vec4_sub(edge1, edge0); - glm_vec4 const div0 = glm_vec4_sub(sub0, sub1); - glm_vec4 const clp0 = glm_vec4_clamp(div0, _mm_setzero_ps(), _mm_set1_ps(1.0f)); - glm_vec4 const mul0 = glm_vec4_mul(_mm_set1_ps(2.0f), clp0); - glm_vec4 const sub2 = glm_vec4_sub(_mm_set1_ps(3.0f), mul0); - glm_vec4 const mul1 = glm_vec4_mul(clp0, clp0); - glm_vec4 const mul2 = glm_vec4_mul(mul1, sub2); - return mul2; -} - -// Agner Fog method -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_nan(glm_vec4 x) -{ - glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer - glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit - glm_ivec4 const t3 = _mm_set1_epi32(int(0xFF000000)); // exponent mask - glm_ivec4 const t4 = _mm_and_si128(t2, t3); // exponent - glm_ivec4 const t5 = _mm_andnot_si128(t3, t2); // fraction - glm_ivec4 const Equal = _mm_cmpeq_epi32(t3, t4); - glm_ivec4 const Nequal = _mm_cmpeq_epi32(t5, _mm_setzero_si128()); - glm_ivec4 const And = _mm_and_si128(Equal, Nequal); - return _mm_castsi128_ps(And); // exponent = all 1s and fraction != 0 -} - -// Agner Fog method -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_inf(glm_vec4 x) -{ - glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer - glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit - return _mm_castsi128_ps(_mm_cmpeq_epi32(t2, _mm_set1_epi32(int(0xFF000000)))); // exponent is all 1s, fraction is 0 -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/simd/exponential.h b/external/glm/glm/simd/exponential.h deleted file mode 100644 index bc351d01..00000000 --- a/external/glm/glm/simd/exponential.h +++ /dev/null @@ -1,20 +0,0 @@ -/// @ref simd -/// @file glm/simd/experimental.h - -#pragma once - -#include "platform.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sqrt_lowp(glm_f32vec4 x) -{ - return _mm_mul_ss(_mm_rsqrt_ss(x), x); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sqrt_lowp(glm_f32vec4 x) -{ - return _mm_mul_ps(_mm_rsqrt_ps(x), x); -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/simd/geometric.h b/external/glm/glm/simd/geometric.h deleted file mode 100644 index 07d7cbcc..00000000 --- a/external/glm/glm/simd/geometric.h +++ /dev/null @@ -1,124 +0,0 @@ -/// @ref simd -/// @file glm/simd/geometric.h - -#pragma once - -#include "common.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_DECL glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2); -GLM_FUNC_DECL glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2); - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_length(glm_vec4 x) -{ - glm_vec4 const dot0 = glm_vec4_dot(x, x); - glm_vec4 const sqt0 = _mm_sqrt_ps(dot0); - return sqt0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_distance(glm_vec4 p0, glm_vec4 p1) -{ - glm_vec4 const sub0 = _mm_sub_ps(p0, p1); - glm_vec4 const len0 = glm_vec4_length(sub0); - return len0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2) -{ -# if GLM_ARCH & GLM_ARCH_AVX_BIT - return _mm_dp_ps(v1, v2, 0xff); -# elif GLM_ARCH & GLM_ARCH_SSE3_BIT - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const hadd0 = _mm_hadd_ps(mul0, mul0); - glm_vec4 const hadd1 = _mm_hadd_ps(hadd0, hadd0); - return hadd1; -# else - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1)); - glm_vec4 const add0 = _mm_add_ps(mul0, swp0); - glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3)); - glm_vec4 const add1 = _mm_add_ps(add0, swp1); - return add1; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2) -{ -# if GLM_ARCH & GLM_ARCH_AVX_BIT - return _mm_dp_ps(v1, v2, 0xff); -# elif GLM_ARCH & GLM_ARCH_SSE3_BIT - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const had0 = _mm_hadd_ps(mul0, mul0); - glm_vec4 const had1 = _mm_hadd_ps(had0, had0); - return had1; -# else - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const mov0 = _mm_movehl_ps(mul0, mul0); - glm_vec4 const add0 = _mm_add_ps(mov0, mul0); - glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, 1); - glm_vec4 const add1 = _mm_add_ss(add0, swp1); - return add1; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_cross(glm_vec4 v1, glm_vec4 v2) -{ - glm_vec4 const swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1)); - glm_vec4 const swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2)); - glm_vec4 const swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1)); - glm_vec4 const swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2)); - glm_vec4 const mul0 = _mm_mul_ps(swp0, swp3); - glm_vec4 const mul1 = _mm_mul_ps(swp1, swp2); - glm_vec4 const sub0 = _mm_sub_ps(mul0, mul1); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_normalize(glm_vec4 v) -{ - glm_vec4 const dot0 = glm_vec4_dot(v, v); - glm_vec4 const isr0 = _mm_rsqrt_ps(dot0); - glm_vec4 const mul0 = _mm_mul_ps(v, isr0); - return mul0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_faceforward(glm_vec4 N, glm_vec4 I, glm_vec4 Nref) -{ - glm_vec4 const dot0 = glm_vec4_dot(Nref, I); - glm_vec4 const sgn0 = glm_vec4_sign(dot0); - glm_vec4 const mul0 = _mm_mul_ps(sgn0, _mm_set1_ps(-1.0f)); - glm_vec4 const mul1 = _mm_mul_ps(N, mul0); - return mul1; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_reflect(glm_vec4 I, glm_vec4 N) -{ - glm_vec4 const dot0 = glm_vec4_dot(N, I); - glm_vec4 const mul0 = _mm_mul_ps(N, dot0); - glm_vec4 const mul1 = _mm_mul_ps(mul0, _mm_set1_ps(2.0f)); - glm_vec4 const sub0 = _mm_sub_ps(I, mul1); - return sub0; -} - -GLM_FUNC_QUALIFIER __m128 glm_vec4_refract(glm_vec4 I, glm_vec4 N, glm_vec4 eta) -{ - glm_vec4 const dot0 = glm_vec4_dot(N, I); - glm_vec4 const mul0 = _mm_mul_ps(eta, eta); - glm_vec4 const mul1 = _mm_mul_ps(dot0, dot0); - glm_vec4 const sub0 = _mm_sub_ps(_mm_set1_ps(1.0f), mul0); - glm_vec4 const sub1 = _mm_sub_ps(_mm_set1_ps(1.0f), mul1); - glm_vec4 const mul2 = _mm_mul_ps(sub0, sub1); - - if(_mm_movemask_ps(_mm_cmplt_ss(mul2, _mm_set1_ps(0.0f))) == 0) - return _mm_set1_ps(0.0f); - - glm_vec4 const sqt0 = _mm_sqrt_ps(mul2); - glm_vec4 const mad0 = glm_vec4_fma(eta, dot0, sqt0); - glm_vec4 const mul4 = _mm_mul_ps(mad0, N); - glm_vec4 const mul5 = _mm_mul_ps(eta, I); - glm_vec4 const sub2 = _mm_sub_ps(mul5, mul4); - - return sub2; -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/simd/integer.h b/external/glm/glm/simd/integer.h deleted file mode 100644 index 93814183..00000000 --- a/external/glm/glm/simd/integer.h +++ /dev/null @@ -1,115 +0,0 @@ -/// @ref simd -/// @file glm/simd/integer.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave(glm_uvec4 x) -{ - glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); - glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); - glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); - glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); - glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); - - glm_uvec4 Reg1; - glm_uvec4 Reg2; - - // REG1 = x; - // REG2 = y; - //Reg1 = _mm_unpacklo_epi64(x, y); - Reg1 = x; - - //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); - //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); - Reg2 = _mm_slli_si128(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask4); - - //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); - //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); - Reg2 = _mm_slli_si128(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask3); - - //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); - //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); - Reg2 = _mm_slli_epi32(Reg1, 4); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask2); - - //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); - //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); - Reg2 = _mm_slli_epi32(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask1); - - //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); - //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask0); - - //return REG1 | (REG2 << 1); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg2 = _mm_srli_si128(Reg2, 8); - Reg1 = _mm_or_si128(Reg1, Reg2); - - return Reg1; -} - -GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave2(glm_uvec4 x, glm_uvec4 y) -{ - glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); - glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); - glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); - glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); - glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); - - glm_uvec4 Reg1; - glm_uvec4 Reg2; - - // REG1 = x; - // REG2 = y; - Reg1 = _mm_unpacklo_epi64(x, y); - - //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); - //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); - Reg2 = _mm_slli_si128(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask4); - - //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); - //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); - Reg2 = _mm_slli_si128(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask3); - - //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); - //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); - Reg2 = _mm_slli_epi32(Reg1, 4); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask2); - - //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); - //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); - Reg2 = _mm_slli_epi32(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask1); - - //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); - //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask0); - - //return REG1 | (REG2 << 1); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg2 = _mm_srli_si128(Reg2, 8); - Reg1 = _mm_or_si128(Reg1, Reg2); - - return Reg1; -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/simd/matrix.h b/external/glm/glm/simd/matrix.h deleted file mode 100644 index b6c42ea4..00000000 --- a/external/glm/glm/simd/matrix.h +++ /dev/null @@ -1,1028 +0,0 @@ -/// @ref simd -/// @file glm/simd/matrix.h - -#pragma once - -#include "geometric.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER void glm_mat4_matrixCompMult(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_mul_ps(in1[0], in2[0]); - out[1] = _mm_mul_ps(in1[1], in2[1]); - out[2] = _mm_mul_ps(in1[2], in2[2]); - out[3] = _mm_mul_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER void glm_mat4_add(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_add_ps(in1[0], in2[0]); - out[1] = _mm_add_ps(in1[1], in2[1]); - out[2] = _mm_add_ps(in1[2], in2[2]); - out[3] = _mm_add_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER void glm_mat4_sub(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_sub_ps(in1[0], in2[0]); - out[1] = _mm_sub_ps(in1[1], in2[1]); - out[2] = _mm_sub_ps(in1[2], in2[2]); - out[3] = _mm_sub_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_mul_vec4(glm_vec4 const m[4], glm_vec4 v) -{ - __m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(m[0], v0); - __m128 m1 = _mm_mul_ps(m[1], v1); - __m128 m2 = _mm_mul_ps(m[2], v2); - __m128 m3 = _mm_mul_ps(m[3], v3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - return a2; -} - -GLM_FUNC_QUALIFIER __m128 glm_vec4_mul_mat4(glm_vec4 v, glm_vec4 const m[4]) -{ - __m128 i0 = m[0]; - __m128 i1 = m[1]; - __m128 i2 = m[2]; - __m128 i3 = m[3]; - - __m128 m0 = _mm_mul_ps(v, i0); - __m128 m1 = _mm_mul_ps(v, i1); - __m128 m2 = _mm_mul_ps(v, i2); - __m128 m3 = _mm_mul_ps(v, i3); - - __m128 u0 = _mm_unpacklo_ps(m0, m1); - __m128 u1 = _mm_unpackhi_ps(m0, m1); - __m128 a0 = _mm_add_ps(u0, u1); - - __m128 u2 = _mm_unpacklo_ps(m2, m3); - __m128 u3 = _mm_unpackhi_ps(m2, m3); - __m128 a1 = _mm_add_ps(u2, u3); - - __m128 f0 = _mm_movelh_ps(a0, a1); - __m128 f1 = _mm_movehl_ps(a1, a0); - __m128 f2 = _mm_add_ps(f0, f1); - - return f2; -} - -GLM_FUNC_QUALIFIER void glm_mat4_mul(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - { - __m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[0] = a2; - } - - { - __m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[1] = a2; - } - - { - __m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[2] = a2; - } - - { - //(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3)) - __m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[3] = a2; - } -} - -GLM_FUNC_QUALIFIER void glm_mat4_transpose(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44); - __m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE); - __m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44); - __m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE); - - out[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88); - out[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD); - out[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88); - out[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_highp(glm_vec4 const in[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - return Det0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_lowp(glm_vec4 const m[4]) -{ - // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128( - - //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - // First 2 columns - __m128 Swp2A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 1, 1, 2))); - __m128 Swp3A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(3, 2, 3, 3))); - __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); - - // Second 2 columns - __m128 Swp2B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(3, 2, 3, 3))); - __m128 Swp3B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(0, 1, 1, 2))); - __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); - - // Columns subtraction - __m128 SubE = _mm_sub_ps(MulA, MulB); - - // Last 2 rows - __m128 Swp2C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 0, 1, 2))); - __m128 Swp3C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(1, 2, 0, 0))); - __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); - __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); - - //vec<4, T, Q> DetCof( - // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - __m128 SubFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubE), _MM_SHUFFLE(2, 1, 0, 0))); - __m128 SwpFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(0, 0, 0, 1))); - __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); - - __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); - __m128 SubFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpB), _MM_SHUFFLE(3, 1, 1, 0)));//SubF[0], SubE[3], SubE[3], SubE[1]; - __m128 SwpFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(1, 1, 2, 2))); - __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); - - __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); - - __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); - __m128 SubFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpC), _MM_SHUFFLE(3, 3, 2, 0))); - __m128 SwpFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(2, 3, 3, 3))); - __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); - - __m128 AddRes = _mm_add_ps(SubRes, MulFacC); - __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); - - //return m[0][0] * DetCof[0] - // + m[0][1] * DetCof[1] - // + m[0][2] * DetCof[2] - // + m[0][3] * DetCof[3]; - - return glm_vec4_dot(m[0], DetCof); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant(glm_vec4 const m[4]) -{ - // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(add) - - //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - // First 2 columns - __m128 Swp2A = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 1, 1, 2)); - __m128 Swp3A = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(3, 2, 3, 3)); - __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); - - // Second 2 columns - __m128 Swp2B = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(3, 2, 3, 3)); - __m128 Swp3B = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(0, 1, 1, 2)); - __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); - - // Columns subtraction - __m128 SubE = _mm_sub_ps(MulA, MulB); - - // Last 2 rows - __m128 Swp2C = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 0, 1, 2)); - __m128 Swp3C = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(1, 2, 0, 0)); - __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); - __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); - - //vec<4, T, Q> DetCof( - // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - __m128 SubFacA = _mm_shuffle_ps(SubE, SubE, _MM_SHUFFLE(2, 1, 0, 0)); - __m128 SwpFacA = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(0, 0, 0, 1)); - __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); - - __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); - __m128 SubFacB = _mm_shuffle_ps(SubTmpB, SubTmpB, _MM_SHUFFLE(3, 1, 1, 0));//SubF[0], SubE[3], SubE[3], SubE[1]; - __m128 SwpFacB = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(1, 1, 2, 2)); - __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); - - __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); - - __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); - __m128 SubFacC = _mm_shuffle_ps(SubTmpC, SubTmpC, _MM_SHUFFLE(3, 3, 2, 0)); - __m128 SwpFacC = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(2, 3, 3, 3)); - __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); - - __m128 AddRes = _mm_add_ps(SubRes, MulFacC); - __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); - - //return m[0][0] * DetCof[0] - // + m[0][1] * DetCof[1] - // + m[0][2] * DetCof[2] - // + m[0][3] * DetCof[3]; - - return glm_vec4_dot(m[0], DetCof); -} - -GLM_FUNC_QUALIFIER void glm_mat4_inverse(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - __m128 Rcp0 = _mm_div_ps(_mm_set1_ps(1.0f), Det0); - //__m128 Rcp0 = _mm_rcp_ps(Det0); - - // Inverse /= Determinant; - out[0] = _mm_mul_ps(Inv0, Rcp0); - out[1] = _mm_mul_ps(Inv1, Rcp0); - out[2] = _mm_mul_ps(Inv2, Rcp0); - out[3] = _mm_mul_ps(Inv3, Rcp0); -} - -GLM_FUNC_QUALIFIER void glm_mat4_inverse_lowp(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - __m128 Rcp0 = _mm_rcp_ps(Det0); - //__m128 Rcp0 = _mm_div_ps(one, Det0); - // Inverse /= Determinant; - out[0] = _mm_mul_ps(Inv0, Rcp0); - out[1] = _mm_mul_ps(Inv1, Rcp0); - out[2] = _mm_mul_ps(Inv2, Rcp0); - out[3] = _mm_mul_ps(Inv3, Rcp0); -} -/* -GLM_FUNC_QUALIFIER void glm_mat4_rotate(__m128 const in[4], float Angle, float const v[3], __m128 out[4]) -{ - float a = glm::radians(Angle); - float c = cos(a); - float s = sin(a); - - glm::vec4 AxisA(v[0], v[1], v[2], float(0)); - __m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x); - __m128 AxisC = detail::sse_nrm_ps(AxisB); - - __m128 Cos0 = _mm_set_ss(c); - __m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Sin0 = _mm_set_ss(s); - __m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0)); - - // vec<3, T, Q> temp = (valType(1) - c) * axis; - __m128 Temp0 = _mm_sub_ps(one, CosA); - __m128 Temp1 = _mm_mul_ps(Temp0, AxisC); - - //Rotate[0][0] = c + temp[0] * axis[0]; - //Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; - //Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; - __m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 TmpA0 = _mm_mul_ps(Axis0, AxisC); - __m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0)); - __m128 TmpA1 = _mm_add_ps(CosA0, TmpA0); - __m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f); - __m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3)); - __m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2); - __m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3); - - //Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; - //Rotate[1][1] = c + temp[1] * axis[1]; - //Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; - __m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 TmpB0 = _mm_mul_ps(Axis1, AxisC); - __m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1)); - __m128 TmpB1 = _mm_add_ps(CosA1, TmpB0); - __m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f); - __m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2)); - __m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2); - __m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3); - - //Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; - //Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; - //Rotate[2][2] = c + temp[2] * axis[2]; - __m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 TmpC0 = _mm_mul_ps(Axis2, AxisC); - __m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1)); - __m128 TmpC1 = _mm_add_ps(CosA2, TmpC0); - __m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f); - __m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1)); - __m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2); - __m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3); - - __m128 Result[4]; - Result[0] = TmpA4; - Result[1] = TmpB4; - Result[2] = TmpC4; - Result[3] = _mm_set_ps(1, 0, 0, 0); - - //mat<4, 4, valType> Result; - //Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - //Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - //Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - //Result[3] = m[3]; - //return Result; - sse_mul_ps(in, Result, out); -} -*/ -GLM_FUNC_QUALIFIER void glm_mat4_outerProduct(__m128 const& c, __m128 const& r, __m128 out[4]) -{ - out[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0))); - out[1] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(1, 1, 1, 1))); - out[2] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(2, 2, 2, 2))); - out[3] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(3, 3, 3, 3))); -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/simd/neon.h b/external/glm/glm/simd/neon.h deleted file mode 100644 index f85947f5..00000000 --- a/external/glm/glm/simd/neon.h +++ /dev/null @@ -1,155 +0,0 @@ -/// @ref simd_neon -/// @file glm/simd/neon.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_NEON_BIT -#include - -namespace glm { - namespace neon { - static inline float32x4_t dupq_lane(float32x4_t vsrc, int lane) { - switch(lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - case 0: return vdupq_laneq_f32(vsrc, 0); - case 1: return vdupq_laneq_f32(vsrc, 1); - case 2: return vdupq_laneq_f32(vsrc, 2); - case 3: return vdupq_laneq_f32(vsrc, 3); -#else - case 0: return vdupq_n_f32(vgetq_lane_f32(vsrc, 0)); - case 1: return vdupq_n_f32(vgetq_lane_f32(vsrc, 1)); - case 2: return vdupq_n_f32(vgetq_lane_f32(vsrc, 2)); - case 3: return vdupq_n_f32(vgetq_lane_f32(vsrc, 3)); -#endif - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); - } - - static inline float32x2_t dup_lane(float32x4_t vsrc, int lane) { - switch(lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - case 0: return vdup_laneq_f32(vsrc, 0); - case 1: return vdup_laneq_f32(vsrc, 1); - case 2: return vdup_laneq_f32(vsrc, 2); - case 3: return vdup_laneq_f32(vsrc, 3); -#else - case 0: return vdup_n_f32(vgetq_lane_f32(vsrc, 0)); - case 1: return vdup_n_f32(vgetq_lane_f32(vsrc, 1)); - case 2: return vdup_n_f32(vgetq_lane_f32(vsrc, 2)); - case 3: return vdup_n_f32(vgetq_lane_f32(vsrc, 3)); -#endif - } - assert(!"Unreachable code executed!"); - return vdup_n_f32(0.0f); - } - - static inline float32x4_t copy_lane(float32x4_t vdst, int dlane, float32x4_t vsrc, int slane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - switch(dlane) { - case 0: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 0, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 0, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 0, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 0, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 1: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 1, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 1, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 1, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 1, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 2: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 2, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 2, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 2, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 2, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 3: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 3, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 3, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 3, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 3, vsrc, 3); - } - assert(!"Unreachable code executed!"); - } -#else - - float l; - switch(slane) { - case 0: l = vgetq_lane_f32(vsrc, 0); break; - case 1: l = vgetq_lane_f32(vsrc, 1); break; - case 2: l = vgetq_lane_f32(vsrc, 2); break; - case 3: l = vgetq_lane_f32(vsrc, 3); break; - default: - assert(!"Unreachable code executed!"); - } - switch(dlane) { - case 0: return vsetq_lane_f32(l, vdst, 0); - case 1: return vsetq_lane_f32(l, vdst, 1); - case 2: return vsetq_lane_f32(l, vdst, 2); - case 3: return vsetq_lane_f32(l, vdst, 3); - } -#endif - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); - } - - static inline float32x4_t mul_lane(float32x4_t v, float32x4_t vlane, int lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - switch(lane) { - case 0: return vmulq_laneq_f32(v, vlane, 0); break; - case 1: return vmulq_laneq_f32(v, vlane, 1); break; - case 2: return vmulq_laneq_f32(v, vlane, 2); break; - case 3: return vmulq_laneq_f32(v, vlane, 3); break; - default: - assert(!"Unreachable code executed!"); - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); -#else - return vmulq_f32(v, dupq_lane(vlane, lane)); -#endif - } - - static inline float32x4_t madd_lane(float32x4_t acc, float32x4_t v, float32x4_t vlane, int lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT -#ifdef GLM_CONFIG_FORCE_FMA -# define FMADD_LANE(acc, x, y, L) do { asm volatile ("fmla %0.4s, %1.4s, %2.4s" : "+w"(acc) : "w"(x), "w"(dup_lane(y, L))); } while(0) -#else -# define FMADD_LANE(acc, x, y, L) do { acc = vmlaq_laneq_f32(acc, x, y, L); } while(0) -#endif - - switch(lane) { - case 0: - FMADD_LANE(acc, v, vlane, 0); - return acc; - case 1: - FMADD_LANE(acc, v, vlane, 1); - return acc; - case 2: - FMADD_LANE(acc, v, vlane, 2); - return acc; - case 3: - FMADD_LANE(acc, v, vlane, 3); - return acc; - default: - assert(!"Unreachable code executed!"); - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); -# undef FMADD_LANE -#else - return vaddq_f32(acc, vmulq_f32(v, dupq_lane(vlane, lane))); -#endif - } - } //namespace neon -} // namespace glm -#endif // GLM_ARCH & GLM_ARCH_NEON_BIT diff --git a/external/glm/glm/simd/packing.h b/external/glm/glm/simd/packing.h deleted file mode 100644 index 609163eb..00000000 --- a/external/glm/glm/simd/packing.h +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref simd -/// @file glm/simd/packing.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/simd/platform.h b/external/glm/glm/simd/platform.h deleted file mode 100644 index ad25cc15..00000000 --- a/external/glm/glm/simd/platform.h +++ /dev/null @@ -1,398 +0,0 @@ -#pragma once - -/////////////////////////////////////////////////////////////////////////////////// -// Platform - -#define GLM_PLATFORM_UNKNOWN 0x00000000 -#define GLM_PLATFORM_WINDOWS 0x00010000 -#define GLM_PLATFORM_LINUX 0x00020000 -#define GLM_PLATFORM_APPLE 0x00040000 -//#define GLM_PLATFORM_IOS 0x00080000 -#define GLM_PLATFORM_ANDROID 0x00100000 -#define GLM_PLATFORM_CHROME_NACL 0x00200000 -#define GLM_PLATFORM_UNIX 0x00400000 -#define GLM_PLATFORM_QNXNTO 0x00800000 -#define GLM_PLATFORM_WINCE 0x01000000 -#define GLM_PLATFORM_CYGWIN 0x02000000 - -#ifdef GLM_FORCE_PLATFORM_UNKNOWN -# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN -#elif defined(__CYGWIN__) -# define GLM_PLATFORM GLM_PLATFORM_CYGWIN -#elif defined(__QNXNTO__) -# define GLM_PLATFORM GLM_PLATFORM_QNXNTO -#elif defined(__APPLE__) -# define GLM_PLATFORM GLM_PLATFORM_APPLE -#elif defined(WINCE) -# define GLM_PLATFORM GLM_PLATFORM_WINCE -#elif defined(_WIN32) -# define GLM_PLATFORM GLM_PLATFORM_WINDOWS -#elif defined(__native_client__) -# define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL -#elif defined(__ANDROID__) -# define GLM_PLATFORM GLM_PLATFORM_ANDROID -#elif defined(__linux) -# define GLM_PLATFORM GLM_PLATFORM_LINUX -#elif defined(__unix) -# define GLM_PLATFORM GLM_PLATFORM_UNIX -#else -# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN -#endif// - -/////////////////////////////////////////////////////////////////////////////////// -// Compiler - -#define GLM_COMPILER_UNKNOWN 0x00000000 - -// Intel -#define GLM_COMPILER_INTEL 0x00100000 -#define GLM_COMPILER_INTEL14 0x00100040 -#define GLM_COMPILER_INTEL15 0x00100050 -#define GLM_COMPILER_INTEL16 0x00100060 -#define GLM_COMPILER_INTEL17 0x00100070 - -// Visual C++ defines -#define GLM_COMPILER_VC 0x01000000 -#define GLM_COMPILER_VC12 0x01000001 -#define GLM_COMPILER_VC14 0x01000002 -#define GLM_COMPILER_VC15 0x01000003 -#define GLM_COMPILER_VC15_3 0x01000004 -#define GLM_COMPILER_VC15_5 0x01000005 -#define GLM_COMPILER_VC15_6 0x01000006 -#define GLM_COMPILER_VC15_7 0x01000007 -#define GLM_COMPILER_VC15_8 0x01000008 -#define GLM_COMPILER_VC15_9 0x01000009 -#define GLM_COMPILER_VC16 0x0100000A - -// GCC defines -#define GLM_COMPILER_GCC 0x02000000 -#define GLM_COMPILER_GCC46 0x020000D0 -#define GLM_COMPILER_GCC47 0x020000E0 -#define GLM_COMPILER_GCC48 0x020000F0 -#define GLM_COMPILER_GCC49 0x02000100 -#define GLM_COMPILER_GCC5 0x02000200 -#define GLM_COMPILER_GCC6 0x02000300 -#define GLM_COMPILER_GCC7 0x02000400 -#define GLM_COMPILER_GCC8 0x02000500 - -// CUDA -#define GLM_COMPILER_CUDA 0x10000000 -#define GLM_COMPILER_CUDA75 0x10000001 -#define GLM_COMPILER_CUDA80 0x10000002 -#define GLM_COMPILER_CUDA90 0x10000004 - -// SYCL -#define GLM_COMPILER_SYCL 0x00300000 - -// Clang -#define GLM_COMPILER_CLANG 0x20000000 -#define GLM_COMPILER_CLANG34 0x20000050 -#define GLM_COMPILER_CLANG35 0x20000060 -#define GLM_COMPILER_CLANG36 0x20000070 -#define GLM_COMPILER_CLANG37 0x20000080 -#define GLM_COMPILER_CLANG38 0x20000090 -#define GLM_COMPILER_CLANG39 0x200000A0 -#define GLM_COMPILER_CLANG40 0x200000B0 -#define GLM_COMPILER_CLANG41 0x200000C0 -#define GLM_COMPILER_CLANG42 0x200000D0 - -// Build model -#define GLM_MODEL_32 0x00000010 -#define GLM_MODEL_64 0x00000020 - -// Force generic C++ compiler -#ifdef GLM_FORCE_COMPILER_UNKNOWN -# define GLM_COMPILER GLM_COMPILER_UNKNOWN - -#elif defined(__INTEL_COMPILER) -# if __INTEL_COMPILER >= 1700 -# define GLM_COMPILER GLM_COMPILER_INTEL17 -# elif __INTEL_COMPILER >= 1600 -# define GLM_COMPILER GLM_COMPILER_INTEL16 -# elif __INTEL_COMPILER >= 1500 -# define GLM_COMPILER GLM_COMPILER_INTEL15 -# elif __INTEL_COMPILER >= 1400 -# define GLM_COMPILER GLM_COMPILER_INTEL14 -# elif __INTEL_COMPILER < 1400 -# error "GLM requires ICC 2013 SP1 or newer" -# endif - -// CUDA -#elif defined(__CUDACC__) -# if !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA) -# include // make sure version is defined since nvcc does not define it itself! -# endif -# if CUDA_VERSION >= 8000 -# define GLM_COMPILER GLM_COMPILER_CUDA80 -# elif CUDA_VERSION >= 7500 -# define GLM_COMPILER GLM_COMPILER_CUDA75 -# elif CUDA_VERSION >= 7000 -# define GLM_COMPILER GLM_COMPILER_CUDA70 -# elif CUDA_VERSION < 7000 -# error "GLM requires CUDA 7.0 or higher" -# endif - -// SYCL -#elif defined(__SYCL_DEVICE_ONLY__) -# define GLM_COMPILER GLM_COMPILER_SYCL - -// Clang -#elif defined(__clang__) -# if defined(__apple_build_version__) -# if (__clang_major__ < 6) -# error "GLM requires Clang 3.4 / Apple Clang 6.0 or higher" -# elif __clang_major__ == 6 && __clang_minor__ == 0 -# define GLM_COMPILER GLM_COMPILER_CLANG35 -# elif __clang_major__ == 6 && __clang_minor__ >= 1 -# define GLM_COMPILER GLM_COMPILER_CLANG36 -# elif __clang_major__ >= 7 -# define GLM_COMPILER GLM_COMPILER_CLANG37 -# endif -# else -# if ((__clang_major__ == 3) && (__clang_minor__ < 4)) || (__clang_major__ < 3) -# error "GLM requires Clang 3.4 or higher" -# elif __clang_major__ == 3 && __clang_minor__ == 4 -# define GLM_COMPILER GLM_COMPILER_CLANG34 -# elif __clang_major__ == 3 && __clang_minor__ == 5 -# define GLM_COMPILER GLM_COMPILER_CLANG35 -# elif __clang_major__ == 3 && __clang_minor__ == 6 -# define GLM_COMPILER GLM_COMPILER_CLANG36 -# elif __clang_major__ == 3 && __clang_minor__ == 7 -# define GLM_COMPILER GLM_COMPILER_CLANG37 -# elif __clang_major__ == 3 && __clang_minor__ == 8 -# define GLM_COMPILER GLM_COMPILER_CLANG38 -# elif __clang_major__ == 3 && __clang_minor__ >= 9 -# define GLM_COMPILER GLM_COMPILER_CLANG39 -# elif __clang_major__ == 4 && __clang_minor__ == 0 -# define GLM_COMPILER GLM_COMPILER_CLANG40 -# elif __clang_major__ == 4 && __clang_minor__ == 1 -# define GLM_COMPILER GLM_COMPILER_CLANG41 -# elif __clang_major__ == 4 && __clang_minor__ >= 2 -# define GLM_COMPILER GLM_COMPILER_CLANG42 -# elif __clang_major__ >= 4 -# define GLM_COMPILER GLM_COMPILER_CLANG42 -# endif -# endif - -// Visual C++ -#elif defined(_MSC_VER) -# if _MSC_VER >= 1920 -# define GLM_COMPILER GLM_COMPILER_VC16 -# elif _MSC_VER >= 1916 -# define GLM_COMPILER GLM_COMPILER_VC15_9 -# elif _MSC_VER >= 1915 -# define GLM_COMPILER GLM_COMPILER_VC15_8 -# elif _MSC_VER >= 1914 -# define GLM_COMPILER GLM_COMPILER_VC15_7 -# elif _MSC_VER >= 1913 -# define GLM_COMPILER GLM_COMPILER_VC15_6 -# elif _MSC_VER >= 1912 -# define GLM_COMPILER GLM_COMPILER_VC15_5 -# elif _MSC_VER >= 1911 -# define GLM_COMPILER GLM_COMPILER_VC15_3 -# elif _MSC_VER >= 1910 -# define GLM_COMPILER GLM_COMPILER_VC15 -# elif _MSC_VER >= 1900 -# define GLM_COMPILER GLM_COMPILER_VC14 -# elif _MSC_VER >= 1800 -# define GLM_COMPILER GLM_COMPILER_VC12 -# elif _MSC_VER < 1800 -# error "GLM requires Visual C++ 12 - 2013 or higher" -# endif//_MSC_VER - -// G++ -#elif defined(__GNUC__) || defined(__MINGW32__) -# if __GNUC__ >= 8 -# define GLM_COMPILER GLM_COMPILER_GCC8 -# elif __GNUC__ >= 7 -# define GLM_COMPILER GLM_COMPILER_GCC7 -# elif __GNUC__ >= 6 -# define GLM_COMPILER GLM_COMPILER_GCC6 -# elif __GNUC__ >= 5 -# define GLM_COMPILER GLM_COMPILER_GCC5 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 9 -# define GLM_COMPILER GLM_COMPILER_GCC49 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 8 -# define GLM_COMPILER GLM_COMPILER_GCC48 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 7 -# define GLM_COMPILER GLM_COMPILER_GCC47 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 6 -# define GLM_COMPILER GLM_COMPILER_GCC46 -# elif ((__GNUC__ == 4) && (__GNUC_MINOR__ < 6)) || (__GNUC__ < 4) -# error "GLM requires GCC 4.6 or higher" -# endif - -#else -# define GLM_COMPILER GLM_COMPILER_UNKNOWN -#endif - -#ifndef GLM_COMPILER -# error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message." -#endif//GLM_COMPILER - -/////////////////////////////////////////////////////////////////////////////////// -// Instruction sets - -// User defines: GLM_FORCE_PURE GLM_FORCE_INTRINSICS GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2 GLM_FORCE_AVX2 - -#define GLM_ARCH_MIPS_BIT (0x10000000) -#define GLM_ARCH_PPC_BIT (0x20000000) -#define GLM_ARCH_ARM_BIT (0x40000000) -#define GLM_ARCH_ARMV8_BIT (0x01000000) -#define GLM_ARCH_X86_BIT (0x80000000) - -#define GLM_ARCH_SIMD_BIT (0x00001000) - -#define GLM_ARCH_NEON_BIT (0x00000001) -#define GLM_ARCH_SSE_BIT (0x00000002) -#define GLM_ARCH_SSE2_BIT (0x00000004) -#define GLM_ARCH_SSE3_BIT (0x00000008) -#define GLM_ARCH_SSSE3_BIT (0x00000010) -#define GLM_ARCH_SSE41_BIT (0x00000020) -#define GLM_ARCH_SSE42_BIT (0x00000040) -#define GLM_ARCH_AVX_BIT (0x00000080) -#define GLM_ARCH_AVX2_BIT (0x00000100) - -#define GLM_ARCH_UNKNOWN (0) -#define GLM_ARCH_X86 (GLM_ARCH_X86_BIT) -#define GLM_ARCH_SSE (GLM_ARCH_SSE_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_X86) -#define GLM_ARCH_SSE2 (GLM_ARCH_SSE2_BIT | GLM_ARCH_SSE) -#define GLM_ARCH_SSE3 (GLM_ARCH_SSE3_BIT | GLM_ARCH_SSE2) -#define GLM_ARCH_SSSE3 (GLM_ARCH_SSSE3_BIT | GLM_ARCH_SSE3) -#define GLM_ARCH_SSE41 (GLM_ARCH_SSE41_BIT | GLM_ARCH_SSSE3) -#define GLM_ARCH_SSE42 (GLM_ARCH_SSE42_BIT | GLM_ARCH_SSE41) -#define GLM_ARCH_AVX (GLM_ARCH_AVX_BIT | GLM_ARCH_SSE42) -#define GLM_ARCH_AVX2 (GLM_ARCH_AVX2_BIT | GLM_ARCH_AVX) -#define GLM_ARCH_ARM (GLM_ARCH_ARM_BIT) -#define GLM_ARCH_ARMV8 (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM | GLM_ARCH_ARMV8_BIT) -#define GLM_ARCH_NEON (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM) -#define GLM_ARCH_MIPS (GLM_ARCH_MIPS_BIT) -#define GLM_ARCH_PPC (GLM_ARCH_PPC_BIT) - -#if defined(GLM_FORCE_ARCH_UNKNOWN) || defined(GLM_FORCE_PURE) -# define GLM_ARCH GLM_ARCH_UNKNOWN -#elif defined(GLM_FORCE_NEON) -# if __ARM_ARCH >= 8 -# define GLM_ARCH (GLM_ARCH_ARMV8) -# else -# define GLM_ARCH (GLM_ARCH_NEON) -# endif -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_AVX2) -# define GLM_ARCH (GLM_ARCH_AVX2) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_AVX) -# define GLM_ARCH (GLM_ARCH_AVX) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE42) -# define GLM_ARCH (GLM_ARCH_SSE42) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE41) -# define GLM_ARCH (GLM_ARCH_SSE41) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSSE3) -# define GLM_ARCH (GLM_ARCH_SSSE3) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE3) -# define GLM_ARCH (GLM_ARCH_SSE3) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE2) -# define GLM_ARCH (GLM_ARCH_SSE2) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE) -# define GLM_ARCH (GLM_ARCH_SSE) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_INTRINSICS) && !defined(GLM_FORCE_XYZW_ONLY) -# if defined(__AVX2__) -# define GLM_ARCH (GLM_ARCH_AVX2) -# elif defined(__AVX__) -# define GLM_ARCH (GLM_ARCH_AVX) -# elif defined(__SSE4_2__) -# define GLM_ARCH (GLM_ARCH_SSE42) -# elif defined(__SSE4_1__) -# define GLM_ARCH (GLM_ARCH_SSE41) -# elif defined(__SSSE3__) -# define GLM_ARCH (GLM_ARCH_SSSE3) -# elif defined(__SSE3__) -# define GLM_ARCH (GLM_ARCH_SSE3) -# elif defined(__SSE2__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86_FP) -# define GLM_ARCH (GLM_ARCH_SSE2) -# elif defined(__i386__) -# define GLM_ARCH (GLM_ARCH_X86) -# elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8) -# define GLM_ARCH (GLM_ARCH_ARMV8) -# elif defined(__ARM_NEON) -# define GLM_ARCH (GLM_ARCH_ARM | GLM_ARCH_NEON) -# elif defined(__arm__ ) || defined(_M_ARM) -# define GLM_ARCH (GLM_ARCH_ARM) -# elif defined(__mips__ ) -# define GLM_ARCH (GLM_ARCH_MIPS) -# elif defined(__powerpc__ ) || defined(_M_PPC) -# define GLM_ARCH (GLM_ARCH_PPC) -# else -# define GLM_ARCH (GLM_ARCH_UNKNOWN) -# endif -#else -# if defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86) || defined(__i386__) -# define GLM_ARCH (GLM_ARCH_X86) -# elif defined(__arm__) || defined(_M_ARM) -# define GLM_ARCH (GLM_ARCH_ARM) -# elif defined(__powerpc__) || defined(_M_PPC) -# define GLM_ARCH (GLM_ARCH_PPC) -# elif defined(__mips__) -# define GLM_ARCH (GLM_ARCH_MIPS) -# else -# define GLM_ARCH (GLM_ARCH_UNKNOWN) -# endif -#endif - -#if GLM_ARCH & GLM_ARCH_AVX2_BIT -# include -#elif GLM_ARCH & GLM_ARCH_AVX_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE42_BIT -# if GLM_COMPILER & GLM_COMPILER_CLANG -# include -# endif -# include -#elif GLM_ARCH & GLM_ARCH_SSE41_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSSE3_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE3_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE2_BIT -# include -#elif GLM_ARCH & GLM_ARCH_NEON_BIT -# include "neon.h" -#endif//GLM_ARCH - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - typedef __m128 glm_f32vec4; - typedef __m128i glm_i32vec4; - typedef __m128i glm_u32vec4; - typedef __m128d glm_f64vec2; - typedef __m128i glm_i64vec2; - typedef __m128i glm_u64vec2; - - typedef glm_f32vec4 glm_vec4; - typedef glm_i32vec4 glm_ivec4; - typedef glm_u32vec4 glm_uvec4; - typedef glm_f64vec2 glm_dvec2; -#endif - -#if GLM_ARCH & GLM_ARCH_AVX_BIT - typedef __m256d glm_f64vec4; - typedef glm_f64vec4 glm_dvec4; -#endif - -#if GLM_ARCH & GLM_ARCH_AVX2_BIT - typedef __m256i glm_i64vec4; - typedef __m256i glm_u64vec4; -#endif - -#if GLM_ARCH & GLM_ARCH_NEON_BIT - typedef float32x4_t glm_f32vec4; - typedef int32x4_t glm_i32vec4; - typedef uint32x4_t glm_u32vec4; -#endif diff --git a/external/glm/glm/simd/trigonometric.h b/external/glm/glm/simd/trigonometric.h deleted file mode 100644 index 739b796e..00000000 --- a/external/glm/glm/simd/trigonometric.h +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref simd -/// @file glm/simd/trigonometric.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/external/glm/glm/simd/vector_relational.h b/external/glm/glm/simd/vector_relational.h deleted file mode 100644 index f7385e97..00000000 --- a/external/glm/glm/simd/vector_relational.h +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref simd -/// @file glm/simd/vector_relational.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/external/glm/glm/trigonometric.hpp b/external/glm/glm/trigonometric.hpp deleted file mode 100644 index 51d49c13..00000000 --- a/external/glm/glm/trigonometric.hpp +++ /dev/null @@ -1,210 +0,0 @@ -/// @ref core -/// @file glm/trigonometric.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions -/// -/// @defgroup core_func_trigonometric Angle and Trigonometry Functions -/// @ingroup core -/// -/// Function parameters specified as angle are assumed to be in units of radians. -/// In no case will any of these functions result in a divide by zero error. If -/// the divisor of a ratio is 0, then results will be undefined. -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. -/// -/// @see ext_vector_trigonometric - -#pragma once - -#include "detail/setup.hpp" -#include "detail/qualifier.hpp" - -namespace glm -{ - /// @addtogroup core_func_trigonometric - /// @{ - - /// Converts degrees to radians and returns the result. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL radians man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec radians(vec const& degrees); - - /// Converts radians to degrees and returns the result. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL degrees man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec degrees(vec const& radians); - - /// The standard trigonometric sine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec sin(vec const& angle); - - /// The standard trigonometric cosine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL cos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec cos(vec const& angle); - - /// The standard trigonometric tangent function. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL tan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec tan(vec const& angle); - - /// Arc sine. Returns an angle whose sine is x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// Results are undefined if |x| > 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL asin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec asin(vec const& x); - - /// Arc cosine. Returns an angle whose cosine is x. - /// The range of values returned by this function is [0, PI]. - /// Results are undefined if |x| > 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL acos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec acos(vec const& x); - - /// Arc tangent. Returns an angle whose tangent is y/x. - /// The signs of x and y are used to determine what - /// quadrant the angle is in. The range of values returned - /// by this function is [-PI, PI]. Results are undefined - /// if x and y are both 0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atan(vec const& y, vec const& x); - - /// Arc tangent. Returns an angle whose tangent is y_over_x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atan(vec const& y_over_x); - - /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec sinh(vec const& angle); - - /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL cosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec cosh(vec const& angle); - - /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL tanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec tanh(vec const& angle); - - /// Arc hyperbolic sine; returns the inverse of sinh. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL asinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec asinh(vec const& x); - - /// Arc hyperbolic cosine; returns the non-negative inverse - /// of cosh. Results are undefined if x < 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL acosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec acosh(vec const& x); - - /// Arc hyperbolic tangent; returns the inverse of tanh. - /// Results are undefined if abs(x) >= 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atanh(vec const& x); - - /// @} -}//namespace glm - -#include "detail/func_trigonometric.inl" diff --git a/external/glm/glm/vec2.hpp b/external/glm/glm/vec2.hpp deleted file mode 100644 index cd4e0708..00000000 --- a/external/glm/glm/vec2.hpp +++ /dev/null @@ -1,14 +0,0 @@ -/// @ref core -/// @file glm/vec2.hpp - -#pragma once -#include "./ext/vector_bool2.hpp" -#include "./ext/vector_bool2_precision.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float2_precision.hpp" -#include "./ext/vector_double2.hpp" -#include "./ext/vector_double2_precision.hpp" -#include "./ext/vector_int2.hpp" -#include "./ext/vector_int2_sized.hpp" -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_uint2_sized.hpp" diff --git a/external/glm/glm/vec3.hpp b/external/glm/glm/vec3.hpp deleted file mode 100644 index f5a927db..00000000 --- a/external/glm/glm/vec3.hpp +++ /dev/null @@ -1,14 +0,0 @@ -/// @ref core -/// @file glm/vec3.hpp - -#pragma once -#include "./ext/vector_bool3.hpp" -#include "./ext/vector_bool3_precision.hpp" -#include "./ext/vector_float3.hpp" -#include "./ext/vector_float3_precision.hpp" -#include "./ext/vector_double3.hpp" -#include "./ext/vector_double3_precision.hpp" -#include "./ext/vector_int3.hpp" -#include "./ext/vector_int3_sized.hpp" -#include "./ext/vector_uint3.hpp" -#include "./ext/vector_uint3_sized.hpp" diff --git a/external/glm/glm/vec4.hpp b/external/glm/glm/vec4.hpp deleted file mode 100644 index c6ea9f1f..00000000 --- a/external/glm/glm/vec4.hpp +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref core -/// @file glm/vec4.hpp - -#pragma once -#include "./ext/vector_bool4.hpp" -#include "./ext/vector_bool4_precision.hpp" -#include "./ext/vector_float4.hpp" -#include "./ext/vector_float4_precision.hpp" -#include "./ext/vector_double4.hpp" -#include "./ext/vector_double4_precision.hpp" -#include "./ext/vector_int4.hpp" -#include "./ext/vector_int4_sized.hpp" -#include "./ext/vector_uint4.hpp" -#include "./ext/vector_uint4_sized.hpp" - diff --git a/external/glm/glm/vector_relational.hpp b/external/glm/glm/vector_relational.hpp deleted file mode 100644 index a0fe17eb..00000000 --- a/external/glm/glm/vector_relational.hpp +++ /dev/null @@ -1,121 +0,0 @@ -/// @ref core -/// @file glm/vector_relational.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions -/// -/// @defgroup core_func_vector_relational Vector Relational Functions -/// @ingroup core -/// -/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to -/// operate on scalars and produce scalar Boolean results. For vector results, -/// use the following built-in functions. -/// -/// In all cases, the sizes of all the input and return vectors for any particular -/// call must match. -/// -/// Include to use these core features. -/// -/// @see ext_vector_relational - -#pragma once - -#include "detail/qualifier.hpp" -#include "detail/setup.hpp" - -namespace glm -{ - /// @addtogroup core_func_vector_relational - /// @{ - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL lessThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL lessThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL greaterThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL greaterThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point, integer or bool scalar type. - /// - /// @see GLSL equal man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point, integer or bool scalar type. - /// - /// @see GLSL notEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y); - - /// Returns true if any component of x is true. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL any man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec const& v); - - /// Returns true if all components of x are true. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL all man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec const& v); - - /// Returns the component-wise logical complement of x. - /// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL not man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec not_(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_vector_relational.inl" diff --git a/external/readme.txt b/external/readme.txt new file mode 100644 index 00000000..c2273f79 --- /dev/null +++ b/external/readme.txt @@ -0,0 +1,4 @@ +DirectXTex +From https://github.com/microsoft/DirectXTex/releases +Release October 2024 (tag oct2024) +It is specifically just the contents of the folder "DirectXTex" in that repo. \ No newline at end of file diff --git a/gigi.sln b/gigi.sln index 0b9e38aa..b12b7a94 100644 --- a/gigi.sln +++ b/gigi.sln @@ -11,46 +11,57 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GigiCompiler", "GigiCompile EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GigiCompilerLib", "GigiCompilerLib\GigiCompilerLib.vcxproj", "{6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectXTex", "external\DirectXTex\DirectXTex_Desktop_2022_Win10.vcxproj", "{371B9FA9-4C90-4AC6-A123-ACED756D6C77}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 + Profile|x64 = Profile|x64 Release|x64 = Release|x64 - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Debug|x64.ActiveCfg = Debug|x64 {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Debug|x64.Build.0 = Debug|x64 - {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Debug|x86.ActiveCfg = Debug|x64 - {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Debug|x86.Build.0 = Debug|x64 + {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Profile|x64.ActiveCfg = Release|x64 + {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Profile|x64.Build.0 = Release|x64 {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Release|x64.ActiveCfg = Release|x64 {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Release|x64.Build.0 = Release|x64 - {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Release|x86.ActiveCfg = Release|x64 - {1F5B2508-B07B-45DF-9F72-25282DEBB153}.Release|x86.Build.0 = Release|x64 {1429871E-D51B-493F-8B78-1C230B0D9D00}.Debug|x64.ActiveCfg = Debug|x64 {1429871E-D51B-493F-8B78-1C230B0D9D00}.Debug|x64.Build.0 = Debug|x64 - {1429871E-D51B-493F-8B78-1C230B0D9D00}.Debug|x86.ActiveCfg = Debug|x64 - {1429871E-D51B-493F-8B78-1C230B0D9D00}.Debug|x86.Build.0 = Debug|x64 + {1429871E-D51B-493F-8B78-1C230B0D9D00}.Profile|x64.ActiveCfg = Release|x64 + {1429871E-D51B-493F-8B78-1C230B0D9D00}.Profile|x64.Build.0 = Release|x64 {1429871E-D51B-493F-8B78-1C230B0D9D00}.Release|x64.ActiveCfg = Release|x64 {1429871E-D51B-493F-8B78-1C230B0D9D00}.Release|x64.Build.0 = Release|x64 - {1429871E-D51B-493F-8B78-1C230B0D9D00}.Release|x86.ActiveCfg = Release|x64 - {1429871E-D51B-493F-8B78-1C230B0D9D00}.Release|x86.Build.0 = Release|x64 {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Debug|x64.ActiveCfg = Debug|x64 {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Debug|x64.Build.0 = Debug|x64 - {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Debug|x86.ActiveCfg = Debug|x64 - {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Debug|x86.Build.0 = Debug|x64 + {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Profile|x64.ActiveCfg = Release|x64 + {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Profile|x64.Build.0 = Release|x64 {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Release|x64.ActiveCfg = Release|x64 {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Release|x64.Build.0 = Release|x64 - {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Release|x86.ActiveCfg = Release|x64 - {6A151F4E-EFD3-4A58-A6F5-E07ED189A6F5}.Release|x86.Build.0 = Release|x64 {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Debug|x64.ActiveCfg = Debug|x64 {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Debug|x64.Build.0 = Debug|x64 - {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Debug|x86.ActiveCfg = Debug|x64 - {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Debug|x86.Build.0 = Debug|x64 + {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Profile|x64.ActiveCfg = Release|x64 + {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Profile|x64.Build.0 = Release|x64 {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Release|x64.ActiveCfg = Release|x64 {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Release|x64.Build.0 = Release|x64 - {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Release|x86.ActiveCfg = Release|x64 - {97C3AB97-49A6-4FB8-BBAD-D7F06CDD6A1D}.Release|x86.Build.0 = Release|x64 + {2ADCC8CA-795D-4555-8858-71FF7667C39F}.Debug|x64.ActiveCfg = Debug|x64 + {2ADCC8CA-795D-4555-8858-71FF7667C39F}.Debug|x64.Build.0 = Debug|x64 + {2ADCC8CA-795D-4555-8858-71FF7667C39F}.Profile|x64.ActiveCfg = Release|x64 + {2ADCC8CA-795D-4555-8858-71FF7667C39F}.Profile|x64.Build.0 = Release|x64 + {2ADCC8CA-795D-4555-8858-71FF7667C39F}.Release|x64.ActiveCfg = Release|x64 + {2ADCC8CA-795D-4555-8858-71FF7667C39F}.Release|x64.Build.0 = Release|x64 + {905C1F30-A0FB-4FBF-994F-39F2B69D4580}.Debug|x64.ActiveCfg = Debug|x64 + {905C1F30-A0FB-4FBF-994F-39F2B69D4580}.Debug|x64.Build.0 = Debug|x64 + {905C1F30-A0FB-4FBF-994F-39F2B69D4580}.Profile|x64.ActiveCfg = Release|x64 + {905C1F30-A0FB-4FBF-994F-39F2B69D4580}.Profile|x64.Build.0 = Release|x64 + {905C1F30-A0FB-4FBF-994F-39F2B69D4580}.Release|x64.ActiveCfg = Release|x64 + {905C1F30-A0FB-4FBF-994F-39F2B69D4580}.Release|x64.Build.0 = Release|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|x64.ActiveCfg = Debug|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Debug|x64.Build.0 = Debug|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|x64.ActiveCfg = Profile|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Profile|x64.Build.0 = Profile|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|x64.ActiveCfg = Release|x64 + {371B9FA9-4C90-4AC6-A123-ACED756D6C77}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/gigihelp.html b/gigihelp.html index fb985aec..9aa92552 100644 --- a/gigihelp.html +++ b/gigihelp.html @@ -310,6 +310,8 @@

    Enums

    D24_Unorm_S824 bit depth, 8 bit stencil BC7_UnormRGB, alpha optional BC7_Unorm_sRGBRGB, alpha optional. sRGB +BC6_UF16RGB, 16 bit float unsigned +BC6_SF16RGB, 16 bit float signed
    @@ -322,15 +324,6 @@

    Enums


    -GGUserFile_ImportedTexture_BinaryType : The basic data type within the binary file

    - - - - - -
    GGUserFile_ImportedTexture_BinaryType
    FloatFloating point 32 bits
    ByteUnsigned 8 bits
    Count
    -
    - GGUserFile_TLASBuildFlags : D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE etc

    @@ -647,6 +640,7 @@

    Structs

    +
    GGUserFile_TLASBuildFlags
    StructReference typeStruct{}The data type of the buffer if a struct type
    bool rawfalseIf true, will be viewed raw in the shader (E.g. DX12 ByteAddressBuffer)
    bool PODAsStructuredBuffertrueSet this to true if you want it to be StructuredBuffer instead of a Buffer, for non structure typed buffers.
    bool globallyCoherentfalseSet this to true if you want the resource to be declared as globallycoherent.

    @@ -655,6 +649,7 @@

    Structs

    ShaderResourceTexture TextureDimensionType dimensionTextureDimensionType::Texture2DThe dimensionality of the texture TextureViewType viewTypeTextureViewType::Float4The dimensionality of the texture +bool globallyCoherentfalseSet this to true if you want the resource to be declared as globallycoherent.
    @@ -1274,8 +1269,7 @@

    Structs

    float color[4]{ 1 , 1 , 1 , 1}The color of the image to create, or the tint of the loaded file TextureFormat formatTextureFormat::RGBA8_Unorm_sRGBThe format of the texture to create int binaryDims[3]{0 , 0 , 1}The size of the image in the binary file -GGUserFile_ImportedTexture_BinaryType binaryTypeGGUserFile_ImportedTexture_BinaryType::FloatThe basic data type within the binary file -int binaryChannels4How many channels there are in the file +TextureFormat binaryFormatTextureFormat::RGBA8_Unorm_sRGBThe format of the binary file
    @@ -1355,6 +1349,9 @@

    Structs

    std::string CameraAltitudeAzimuth_varName"CameraAltitudeAzimuth" std::string CameraChanged_varName"CameraChanged" std::string CameraJitter_varName"CameraJitter" +std::string CameraFOV_varName"CameraFOV" +std::string CameraNearPlane_varName"CameraNearPlane" +std::string CameraFarPlane_varName"CameraFarPlane" std::string ShadingRateImageTileSize_varName"ShadingRateImageTileSize" std::string KeyState_bufferName""256 entries for the keys this frame, and 256 entries for the keys last frame. 512 entries total. diff --git a/gigischema.json b/gigischema.json index d7752686..41d18f8f 100644 --- a/gigischema.json +++ b/gigischema.json @@ -248,6 +248,10 @@ "PODAsStructuredBuffer": { "description": "Set this to true if you want it to be StructuredBuffer instead of a Buffer, for non structure typed buffers.", "type": "boolean" + }, + "globallyCoherent": { + "description": "Set this to true if you want the resource to be declared as globallycoherent.", + "type": "boolean" } } }, @@ -264,6 +268,10 @@ "description": "The dimensionality of the texture", "type": "string", "enum": ["Int", "Int4", "Uint", "Uint4", "Float", "Float2", "Float3", "Float4"] + }, + "globallyCoherent": { + "description": "Set this to true if you want the resource to be declared as globallycoherent.", + "type": "boolean" } } }, @@ -711,7 +719,7 @@ "format": { "description": "A specific format can be specified", "type": "string", - "enum": ["Any", "R8_Unorm", "RG8_Unorm", "RGBA8_Unorm", "RGBA8_Unorm_sRGB", "R8_Snorm", "RG8_Snorm", "RGBA8_Snorm", "R8_Uint", "RG8_Uint", "RGBA8_Uint", "R8_Sint", "RG8_Sint", "RGBA8_Sint", "R16_Float", "RG16_Float", "RGBA16_Float", "RGBA16_Unorm", "RGBA16_Snorm", "R32_Float", "RG32_Float", "RGBA32_Float", "R32_Uint", "RGBA32_Uint", "R11G11B10_Float", "D32_Float", "D16_Unorm", "D32_Float_S8", "D24_Unorm_S8", "BC7_Unorm", "BC7_Unorm_sRGB"] + "enum": ["Any", "R8_Unorm", "RG8_Unorm", "RGBA8_Unorm", "RGBA8_Unorm_sRGB", "R8_Snorm", "RG8_Snorm", "RGBA8_Snorm", "R8_Uint", "RG8_Uint", "RGBA8_Uint", "R8_Sint", "RG8_Sint", "RGBA8_Sint", "R16_Float", "RG16_Float", "RGBA16_Float", "RGBA16_Unorm", "RGBA16_Snorm", "R32_Float", "RG32_Float", "RGBA32_Float", "R32_Uint", "RGBA32_Uint", "R11G11B10_Float", "D32_Float", "D16_Unorm", "D32_Float_S8", "D24_Unorm_S8", "BC7_Unorm", "BC7_Unorm_sRGB", "BC6_UF16", "BC6_SF16"] }, "variable": { "description": "The variable that holds the texture format. Assumed to be a uint32.", diff --git a/packages/WinPixEventRuntime.1.0.230302001/.signature.p7s b/packages/WinPixEventRuntime.1.0.230302001/.signature.p7s deleted file mode 100644 index c4a07bd9..00000000 Binary files a/packages/WinPixEventRuntime.1.0.230302001/.signature.p7s and /dev/null differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEvents.h b/packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEvents.h deleted file mode 100644 index ec5f2ed5..00000000 --- a/packages/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEvents.h +++ /dev/null @@ -1,661 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: PIXEvents.h - * Content: PIX include file - * Don't include this file directly - use pix3.h - * - ****************************************************************************/ -#pragma once - -#ifndef _PixEvents_H_ -#define _PixEvents_H_ - -#ifndef _PIX3_H_ -# error Do not include this file directly - use pix3.h -#endif - -#include "PIXEventsCommon.h" - -#if _MSC_VER < 1800 -# error This version of pix3.h is only supported on Visual Studio 2013 or higher -#elif _MSC_VER < 1900 -# ifndef constexpr // Visual Studio 2013 doesn't support constexpr -# define constexpr -# define PIX3__DEFINED_CONSTEXPR -# endif -#endif - -// Xbox does not support CPU events for retail scenarios -#if defined(USE_PIX) || !defined(PIX_XBOX) -#define PIX_CONTEXT_EMIT_CPU_EVENTS -#endif - -namespace PIXEventsDetail -{ - template - struct PIXEventTypeInferer - { - static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_VarArgs; } - static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_VarArgs; } - static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } - static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } - - // Xbox and Windows store different types of events for context events. - // On Xbox these include a context argument, while on Windows they do - // not. It is important not to change the event types used on the - // Windows version as there are OS components (eg debug layer & DRED) - // that decode event structs. -#ifdef PIX_XBOX - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } -#else - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_VarArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_VarArgs; } -#endif - }; - - template<> - struct PIXEventTypeInferer<> - { - static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_NoArgs; } - static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_NoArgs; } - static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } - static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } - -#ifdef PIX_XBOX - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } -#else - static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_NoArgs; } - static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_NoArgs; } -#endif - }; - - inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit) - { - // nothing - UNREFERENCED_PARAMETER(destination); - UNREFERENCED_PARAMETER(limit); - } - - template - void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) - { - PIXCopyEventArgument(destination, limit, arg); - PIXCopyEventArguments(destination, limit, args...); - } - - template - __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::Begin()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXBeginEvent(UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::Begin()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXBeginEventAllocate(threadInfo, color, formatString, args...); - } - } - } - - template - __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarker()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXSetMarker(UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarker()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXSetMarkerAllocate(threadInfo, color, formatString, args...); - } - } - } - - template - __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::BeginOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - UNREFERENCED_PARAMETER(context); - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXBeginEventOnContextCpu(void* context, UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::BeginOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXBeginEventOnContextCpuAllocate(threadInfo, context, color, formatString, args...); - } - } - } - - template - void PIXBeginEvent(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS - PIXBeginEventOnContextCpu(context, color, formatString, args...); -#endif - - // TODO: we've already encoded this once for the CPU event - figure out way to avoid doing it again - UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; - UINT64* destination = buffer; - UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; - - *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuBeginOnContext()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - *destination = 0ull; - - PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); - } - - template - __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(false); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, false); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarkerOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - UNREFERENCED_PARAMETER(context); - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - template - void PIXSetMarkerOnContextCpu(void* context, UINT64 color, STR formatString, ARGS... args) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEventTypeInferer::SetMarkerOnContext()); - *destination++ = color; - -#ifdef PIX_XBOX - PIXCopyEventArguments(destination, limit, formatString, args...); -#else - PIXCopyEventArguments(destination, limit, context, formatString, args...); -#endif - - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXSetMarkerOnContextCpuAllocate(threadInfo, context, color, formatString, args...); - } - } - } - - template - void PIXSetMarker(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) - { -#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS - PIXSetMarkerOnContextCpu(context, color, formatString, args...); -#endif - - UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; - UINT64* destination = buffer; - UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; - - *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuSetMarkerOnContext()); - *destination++ = color; - - PIXCopyEventArguments(destination, limit, formatString, args...); - *destination = 0ull; - - PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); - } - - __declspec(noinline) inline void PIXEndEventAllocate(PIXEventsThreadInfo* threadInfo) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(true); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, true); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent); - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - inline void PIXEndEvent() - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent); - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXEndEventAllocate(threadInfo); - } - } - } - - __declspec(noinline) inline void PIXEndEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context) - { -#ifdef PIX_XBOX - UINT64 time = PIXEventsReplaceBlock(true); -#else - UINT64 time = PIXEventsReplaceBlock(threadInfo, true); -#endif - if (!time) - return; - - UINT64* destination = threadInfo->destination; - UINT64* limit = threadInfo->biasedLimit; - - if (destination >= limit) - return; - - limit += PIXEventsSafeFastCopySpaceQwords; - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent_OnContext); -#ifdef PIX_XBOX - UNREFERENCED_PARAMETER(context); -#else - PIXCopyEventArgument(destination, limit, context); -#endif - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - - inline void PIXEndEventOnContextCpu(void* context) - { - PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); - UINT64* limit = threadInfo->biasedLimit; - if (limit != nullptr) - { - UINT64* destination = threadInfo->destination; - if (destination < limit) - { - limit += PIXEventsSafeFastCopySpaceQwords; - UINT64 time = PIXGetTimestampCounter(); - *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent_OnContext); -#ifndef PIX_XBOX - PIXCopyEventArgument(destination, limit, context); -#endif - *destination = PIXEventsBlockEndMarker; - threadInfo->destination = destination; - } - else - { - PIXEndEventOnContextCpuAllocate(threadInfo, context); - } - } - } - - template - void PIXEndEvent(CONTEXT* context) - { -#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS - PIXEndEventOnContextCpu(context); -#endif - PIXEndGPUEventOnContext(context); - } -} - -#if defined(USE_PIX) - -template -void PIXBeginEvent(UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(color, formatString, args...); -} - -template -void PIXBeginEvent(UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(color, formatString, args...); -} - -template -void PIXSetMarker(UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(color, formatString, args...); -} - -template -void PIXSetMarker(UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(color, formatString, args...); -} - -template -void PIXBeginEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXBeginEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXSetMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -template -void PIXSetMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -inline void PIXEndEvent() -{ - PIXEventsDetail::PIXEndEvent(); -} - -template -void PIXEndEvent(CONTEXT* context) -{ - PIXEventsDetail::PIXEndEvent(context); -} - -#else // USE_PIX_RETAIL - -inline void PIXBeginEvent(UINT64, _In_ PCSTR, ...) {} -inline void PIXBeginEvent(UINT64, _In_ PCWSTR, ...) {} -inline void PIXBeginEvent(void*, UINT64, _In_ PCSTR, ...) {} -inline void PIXBeginEvent(void*, UINT64, _In_ PCWSTR, ...) {} -inline void PIXEndEvent() {} -inline void PIXEndEvent(void*) {} -inline void PIXSetMarker(UINT64, _In_ PCSTR, ...) {} -inline void PIXSetMarker(UINT64, _In_ PCWSTR, ...) {} -inline void PIXSetMarker(void*, UINT64, _In_ PCSTR, ...) {} -inline void PIXSetMarker(void*, UINT64, _In_ PCWSTR, ...) {} - -#endif // USE_PIX - -template -void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); -} - -template -void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -template -void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) -{ - PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); -} - -template -void PIXEndRetailEvent(CONTEXT* context) -{ - PIXEventsDetail::PIXEndEvent(context); -} - -template -class PIXScopedEventObject -{ - CONTEXT* m_context; - -public: - template - PIXScopedEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginEvent(m_context, color, formatString, args...); - } - - template - PIXScopedEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginEvent(m_context, color, formatString, args...); - } - - ~PIXScopedEventObject() - { - PIXEndEvent(m_context); - } -}; - -template -class PIXScopedRetailEventObject -{ - CONTEXT* m_context; - -public: - template - PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginRetailEvent(m_context, color, formatString, args...); - } - - template - PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) - : m_context(context) - { - PIXBeginRetailEvent(m_context, color, formatString, args...); - } - - ~PIXScopedRetailEventObject() - { - PIXEndRetailEvent(m_context); - } -}; - -template<> -class PIXScopedEventObject -{ -public: - template - PIXScopedEventObject(UINT64 color, PCWSTR formatString, ARGS... args) - { - PIXBeginEvent(color, formatString, args...); - } - - template - PIXScopedEventObject(UINT64 color, PCSTR formatString, ARGS... args) - { - PIXBeginEvent(color, formatString, args...); - } - - ~PIXScopedEventObject() - { - PIXEndEvent(); - } -}; - -#define PIXConcatenate(a, b) a ## b -#define PIXGetScopedEventVariableName(a, b) PIXConcatenate(a, b) -#define PIXScopedEvent(context, ...) PIXScopedEventObject::Type> PIXGetScopedEventVariableName(pixEvent, __LINE__)(context, __VA_ARGS__) - -#ifdef PIX3__DEFINED_CONSTEXPR -#undef constexpr -#undef PIX3__DEFINED_CONSTEXPR -#endif - -#endif // _PIXEvents_H__ diff --git a/packages/WinPixEventRuntime.1.0.230302001/WinPixEventRuntime.1.0.230302001.nupkg b/packages/WinPixEventRuntime.1.0.230302001/WinPixEventRuntime.1.0.230302001.nupkg deleted file mode 100644 index 0033034a..00000000 Binary files a/packages/WinPixEventRuntime.1.0.230302001/WinPixEventRuntime.1.0.230302001.nupkg and /dev/null differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.dll b/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.dll deleted file mode 100644 index 236c67ba..00000000 Binary files a/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.dll and /dev/null differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.dll b/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.dll deleted file mode 100644 index 46a7e8f4..00000000 Binary files a/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.dll and /dev/null differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.dll b/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.dll deleted file mode 100644 index 0e2f75c5..00000000 Binary files a/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.dll and /dev/null differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.dll b/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.dll deleted file mode 100644 index a69e26cd..00000000 Binary files a/packages/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.dll and /dev/null differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/license.txt b/packages/WinPixEventRuntime.1.0.230302001/license.txt deleted file mode 100644 index 50976a56..00000000 --- a/packages/WinPixEventRuntime.1.0.230302001/license.txt +++ /dev/null @@ -1,78 +0,0 @@ -MICROSOFT SOFTWARE LICENSE TERMS - -PIX EVENT RUNTIME FOR WINDOWS - -IF YOU LIVE IN (OR ARE A BUSINESS WITH A PRINCIPAL PLACE OF BUSINESS IN) THE UNITED STATES, PLEASE READ THE “BINDING ARBITRATION AND CLASS ACTION WAIVER” SECTION BELOW. IT AFFECTS HOW DISPUTES ARE RESOLVED. - -These license terms are an agreement between you and Microsoft Corporation (or one of its affiliates). They apply to the software named above and any Microsoft services or software updates (except to the extent such services or updates are accompanied by new or additional terms, in which case those different terms apply prospectively and do not alter your or Microsoft’s rights relating to pre-updated software or services). IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. - -1. INSTALLATION AND USE RIGHTS. - a. General. You may install and use any number of copies of the software to design, develop and test your Microsoft Windows programs. - b. Third Party Software. The software may include third party applications that are licensed to you under this agreement or under their own terms. License terms, notices, and acknowledgements, if any, for the third party applications may be accessible online at http://aka.ms/thirdpartynotices or in an accompanying notices file. Even if such applications are governed by other agreements, the disclaimer, limitations on, and exclusions of damages below also apply to the extent allowed by applicable law. - -2. DISTRIBUTABLE CODE. - a. Distributable Code. The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in programs you develop if you comply with the terms below. - (i) Right to Use and Distribute. - * You may copy and distribute the object code form of the software. - * Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. - (ii) Distribution Requirements. For any Distributable Code you distribute, you must - * add significant primary functionality to it in your programs; - * require distributors and external end users to agree to terms that protect it at least as much as this agreement; - * display your valid copyright notice on your programs; and - * indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your programs. - (iii) Distribution Restrictions. You may not - * alter any copyright, trademark or patent notice in the Distributable Code; - * use Microsoft’s trademarks in your programs’ names or in a way that suggests your programs come from or are endorsed by Microsoft; - * distribute Distributable Code to run on a platform other than a Windows platform; - * include Distributable Code in malicious, deceptive or unlawful programs; or - * modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that - * the code be disclosed or distributed in source code form; or - * others have the right to modify it. - -3. SCOPE OF LICENSE. The software is licensed, not sold. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you will not (and have no right to): - a. work around any technical limitations in the software that only allow you to use it in certain ways; - b. reverse engineer, decompile or disassemble the software; - c. remove, minimize, block, or modify any notices of Microsoft or its suppliers in the software; - d. use the software in any way that is against the law or to create or propagate malware; or - e. share, publish, distribute, or lend the software, provide the software as a stand-alone hosted solution for others to use, or transfer the software or this agreement to any third party. - -4. EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit http://aka.ms/exporting. - -5. SUPPORT SERVICES. Microsoft is not obligated under this agreement to provide any support services for the software. Any support provided is “as is”, “with all faults”, and without warranty of any kind. - -6. BINDING ARBITRATION AND CLASS ACTION WAIVER. This Section applies if you live in (or, if a business, your principal place of business is in) the United States. If you and Microsoft have a dispute, you and Microsoft agree to try for 60 days to resolve it informally. If you and Microsoft can’t, you and Microsoft agree to binding individual arbitration before the American Arbitration Association under the Federal Arbitration Act (“FAA”), and not to sue in court in front of a judge or jury. Instead, a neutral arbitrator will decide. Class action lawsuits, class-wide arbitrations, private attorney-general actions, and any other proceeding where someone acts in a representative capacity are not allowed; nor is combining individual proceedings without the consent of all parties. The complete Arbitration Agreement contains more terms and is at http://aka.ms/arb-agreement-1. You and Microsoft agree to these terms. - -7. ENTIRE AGREEMENT. This agreement, and any other terms Microsoft may provide for supplements, updates, or third-party applications, is the entire agreement for the software. - -8. APPLICABLE LAW AND PLACE TO RESOLVE DISPUTES. If you acquired the software in the United States or Canada, the laws of the state or province where you live (or, if a business, where your principal place of business is located) govern the interpretation of this agreement, claims for its breach, and all other claims (including consumer protection, unfair competition, and tort claims), regardless of conflict of laws principles, except that the FAA governs everything related to arbitration. If you acquired the software in any other country, its laws apply, except that the FAA governs everything related to arbitration. If U.S. federal jurisdiction exists, you and Microsoft consent to exclusive jurisdiction and venue in the federal court in King County, Washington for all disputes heard in court (excluding arbitration). If not, you and Microsoft consent to exclusive jurisdiction and venue in the Superior Court of King County, Washington for all disputes heard in court (excluding arbitration). - -9. CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state, province, or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state, province, or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: - a. Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. - b. Canada. If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. - c. Germany and Austria. - (i) Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However, Microsoft gives no contractual guarantee in relation to the licensed software. - (ii) Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable according to the statutory law. - Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence. - -10. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. - -11. LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. -This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, warranty, guarantee, or condition; strict liability, negligence, or other tort; or any other claim; in each case to the extent permitted by applicable law. -It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state, province, or country may not allow the exclusion or limitation of incidental, consequential, or other damages. - - -[Please note: As this software is distributed in Canada, some of the clauses in this agreement are provided below in French. - -Remarque: Ce logiciel étant distribué au Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français. - -EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d’adéquation à un usage particulier et d’absence de contrefaçon sont exclues. - -LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices. - -Cette limitation concerne: - * tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers; et - * les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d’une autre faute dans la limite autorisée par la loi en vigueur. - -Elle s’applique également, même si Microsoft connaissait ou devrait connaître l’éventualité d’un tel dommage. Si votre pays n’autorise pas l’exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l’exclusion ci-dessus ne s’appliquera pas à votre égard. - -EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d’autres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas.] diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/.signature.p7s b/packages/WinPixEventRuntime.1.0.240308001/.signature.p7s similarity index 51% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/.signature.p7s rename to packages/WinPixEventRuntime.1.0.240308001/.signature.p7s index c4a07bd9..cc172c02 100644 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/.signature.p7s and b/packages/WinPixEventRuntime.1.0.240308001/.signature.p7s differ diff --git a/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEvents.h b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEvents.h new file mode 100644 index 00000000..1a9fdf0d --- /dev/null +++ b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEvents.h @@ -0,0 +1,1578 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Don't include this file directly - use pix3.h + +#pragma once + +#ifndef _PixEvents_H_ +#define _PixEvents_H_ + +#ifndef _PIX3_H_ +# error Do not include this file directly - use pix3.h +#endif + +#include "PIXEventsCommon.h" + +#if _MSC_VER < 1800 +# error This version of pix3.h is only supported on Visual Studio 2013 or higher +#elif _MSC_VER < 1900 +# ifndef constexpr // Visual Studio 2013 doesn't support constexpr +# define constexpr +# define PIX3__DEFINED_CONSTEXPR +# endif +#endif + + // Xbox does not support CPU events for retail scenarios +#if defined(USE_PIX) || !defined(PIX_XBOX) +#define PIX_CONTEXT_EMIT_CPU_EVENTS +#endif + +namespace PIXEventsDetail +{ + inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit) + { + // nothing + UNREFERENCED_PARAMETER(destination); + UNREFERENCED_PARAMETER(limit); + } + + template + void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) + { + PIXCopyEventArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); + } + + template + void PIXCopyStringArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) + { + PIXCopyStringArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); + } + + template + void PIXCopyStringArgumentsWithContext(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, void* context, ARG const& arg, ARGS const&... args) + { +#ifdef PIX_XBOX + UNREFERENCED_PARAMETER(context); + PIXCopyStringArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); +#else + PIXCopyEventArgument(destination, limit, context); + PIXCopyStringArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); +#endif + } + + inline UINT8 PIXGetEventSize(const UINT64* end, const UINT64* start) + { + const UINT64 actualEventSize = end - start; + + return static_cast(actualEventSize > PIXEventsSizeMax ? PIXEventsSizeMax : actualEventSize); + } + + template + inline UINT8 PIXEncodeStringIsAnsi() + { + return PIX_EVENT_METADATA_NONE; + } + + template<> + inline UINT8 PIXEncodeStringIsAnsi() + { + return PIX_EVENT_METADATA_STRING_IS_ANSI; + } + + template<> + inline UINT8 PIXEncodeStringIsAnsi() + { + return PIX_EVENT_METADATA_STRING_IS_ANSI; + } + + template + __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_HAS_COLOR | + PIXEncodeStringIsAnsi(); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEvent(UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_HAS_COLOR | + PIXEncodeStringIsAnsi(); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEvent(UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarker(UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarker(UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; + + PIXCopyStringArguments(destination, limit, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerAllocate(threadInfo, color, formatString, args...); + } + } + } + + template + __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEventOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXBeginEvent(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXBeginEventOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_BeginEvent, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeBeginEventForContext(buffer, color, formatString, args...); + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + template + __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXBeginEventOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXBeginEventOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXBeginEvent(CONTEXT* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXBeginEventOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_BeginEvent, eventSize, eventMetadata); + + PIXInsertGPUMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeBeginEventForContext(buffer, color, formatString, args...); + PIXBeginGPUEventOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + template + __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarkerOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT64 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXSetMarker(CONTEXT* context, UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXSetMarkerOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + *destination++ = color; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIX_EVENT_METADATA_HAS_COLOR; + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_SetMarker, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeSetMarkerForContext(buffer, color, formatString, args...); + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + template + __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, false); + if (!time) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + { + eventDestination = nullptr; + return; + } + + limit += PIXEventsSafeFastCopySpaceQwords; + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + + template + void PIXSetMarkerOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT8 color, STR formatString, ARGS... args) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit == nullptr) + { + eventDestination = nullptr; + return; + } + + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = PIXEventsBlockEndMarker; + + eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata); + + threadInfo->destination = destination; + } + else + { + PIXSetMarkerOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...); + } + } + + template + void PIXSetMarker(CONTEXT* context, UINT8 color, STR formatString, ARGS... args) + { + UINT64* destination = nullptr; + UINT8 eventSize = 0u; + +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + PIXSetMarkerOnContextCpu(destination, eventSize, context, color, formatString, args...); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(destination), eventSize * sizeof(UINT64)); + } + else +#endif + { + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + +#ifdef PIX_USE_GPU_MARKERS_V2 + destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + UINT64* eventDestination = destination++; + + PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...); + *destination = 0ull; + + eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = + PIX_EVENT_METADATA_ON_CONTEXT | + PIXEncodeStringIsAnsi() | + PIXEncodeIndexColor(color); + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_SetMarker, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + destination = PixEventsLegacy::EncodeSetMarkerForContext(buffer, color, formatString, args...); + PIXSetGPUMarkerOnContext(context, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#endif + } + } + + __declspec(noinline) inline void PIXEndEventAllocate(PIXEventsThreadInfo* threadInfo) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, true); + if (!time) + return; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return; + + limit += PIXEventsSafeFastCopySpaceQwords; + const UINT8 eventSize = 1; + const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + *destination = PIXEventsBlockEndMarker; + + threadInfo->destination = destination; + } + + inline void PIXEndEvent() + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + const UINT8 eventSize = 1; + const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE; + *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + *destination = PIXEventsBlockEndMarker; + + threadInfo->destination = destination; + } + else + { + PIXEndEventAllocate(threadInfo); + } + } + } + + __declspec(noinline) inline UINT64* PIXEndEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context) + { + UINT64 time = PIXEventsReplaceBlock(threadInfo, true); + if (!time) + return nullptr; + + UINT64* destination = threadInfo->destination; + UINT64* limit = threadInfo->biasedLimit; + + if (destination >= limit) + return nullptr; + + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64* eventDestination = destination++; +#ifdef PIX_XBOX + UNREFERENCED_PARAMETER(context); +#else + PIXCopyEventArgument(destination, limit, context); +#endif + * destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = PIX_EVENT_METADATA_ON_CONTEXT; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + + return eventDestination; + } + + inline UINT64* PIXEndEventOnContextCpu(void* context) + { + PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo(); + UINT64* limit = threadInfo->biasedLimit; + if (limit != nullptr) + { + UINT64* destination = threadInfo->destination; + if (destination < limit) + { + limit += PIXEventsSafeFastCopySpaceQwords; + UINT64 time = PIXGetTimestampCounter(); + UINT64* eventDestination = destination++; +#ifndef PIX_XBOX + PIXCopyEventArgument(destination, limit, context); +#endif + * destination = PIXEventsBlockEndMarker; + + const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination); + const UINT8 eventMetadata = PIX_EVENT_METADATA_ON_CONTEXT; + *eventDestination = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata); + + threadInfo->destination = destination; + + return eventDestination; + } + else + { + return PIXEndEventOnContextCpuAllocate(threadInfo, context); + } + } + + return nullptr; + } + + template + void PIXEndEvent(CONTEXT* context) + { + UINT64* destination = nullptr; +#ifdef PIX_CONTEXT_EMIT_CPU_EVENTS + destination = PIXEndEventOnContextCpu(context); +#endif + +#ifdef PIX_USE_GPU_MARKERS_V2 + if (destination != nullptr) + { + PIXInsertTimingMarkerOnContextForEndEvent(context, PIXEvent_EndEvent); + } + else +#endif + { +#ifdef PIX_USE_GPU_MARKERS_V2 + UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords]; + destination = buffer; + + UINT64* eventDestination = destination++; + + const UINT8 eventSize = static_cast(destination - buffer); + const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE; + *eventDestination = PIXEncodeEventInfo(0, PIXEvent_EndEvent, eventSize, eventMetadata); + PIXInsertGPUMarkerOnContextForEndEvent(context, PIXEvent_EndEvent, static_cast(buffer), static_cast(reinterpret_cast(destination) - reinterpret_cast(buffer))); +#else + PIXEndGPUEventOnContext(context); +#endif + } + } +} + +#if defined(USE_PIX) + +template +void PIXBeginEvent(UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXBeginEvent(UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXBeginEvent(UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXBeginEvent(UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(color, formatString, args...); +} + +template +void PIXSetMarker(UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXSetMarker(UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXSetMarker(UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXSetMarker(UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginEvent(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetMarker(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +inline void PIXEndEvent() +{ + PIXEventsDetail::PIXEndEvent(); +} + +template +void PIXEndEvent(CONTEXT* context) +{ + PIXEventsDetail::PIXEndEvent(context); +} + +#else // USE_PIX_RETAIL + +inline void PIXBeginEvent(UINT64, _In_ PCSTR, ...) {} +inline void PIXBeginEvent(UINT64, _In_ PCWSTR, ...) {} +inline void PIXBeginEvent(void*, UINT64, _In_ PCSTR, ...) {} +inline void PIXBeginEvent(void*, UINT64, _In_ PCWSTR, ...) {} +inline void PIXEndEvent() {} +inline void PIXEndEvent(void*) {} +inline void PIXSetMarker(UINT64, _In_ PCSTR, ...) {} +inline void PIXSetMarker(UINT64, _In_ PCWSTR, ...) {} +inline void PIXSetMarker(void*, UINT64, _In_ PCSTR, ...) {} +inline void PIXSetMarker(void*, UINT64, _In_ PCWSTR, ...) {} + +#endif // USE_PIX + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, static_cast(color), formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXBeginRetailEvent(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, static_cast(color), formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXSetRetailMarker(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) +{ + PIXEventsDetail::PIXSetMarker(context, color, formatString, args...); +} + +template +void PIXEndRetailEvent(CONTEXT* context) +{ + PIXEventsDetail::PIXEndEvent(context); +} + +template +class PIXScopedEventObject +{ + CONTEXT* m_context; + +public: + template + PIXScopedEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + template + PIXScopedEventObject(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginEvent(m_context, color, formatString, args...); + } + + ~PIXScopedEventObject() + { + PIXEndEvent(m_context); + } +}; + +template +class PIXScopedRetailEventObject +{ + CONTEXT* m_context; + +public: + template + PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + template + PIXScopedRetailEventObject(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args) + : m_context(context) + { + PIXBeginRetailEvent(m_context, color, formatString, args...); + } + + ~PIXScopedRetailEventObject() + { + PIXEndRetailEvent(m_context); + } +}; + +template<> +class PIXScopedEventObject +{ +public: + template + PIXScopedEventObject(UINT64 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT64 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT32 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT32 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(INT32 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(INT32 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(DWORD color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(DWORD color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT8 color, PCWSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + template + PIXScopedEventObject(UINT8 color, PCSTR formatString, ARGS... args) + { + PIXBeginEvent(color, formatString, args...); + } + + ~PIXScopedEventObject() + { + PIXEndEvent(); + } +}; + +#define PIXConcatenate(a, b) a ## b +#define PIXGetScopedEventVariableName(a, b) PIXConcatenate(a, b) +#define PIXScopedEvent(context, ...) PIXScopedEventObject::Type> PIXGetScopedEventVariableName(pixEvent, __LINE__)(context, __VA_ARGS__) + +#ifdef PIX3__DEFINED_CONSTEXPR +#undef constexpr +#undef PIX3__DEFINED_CONSTEXPR +#endif + +#endif // _PIXEvents_H__ + diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEventsCommon.h b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsCommon.h similarity index 61% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEventsCommon.h rename to packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsCommon.h index a9c21d97..ff26230c 100644 --- a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/PIXEventsCommon.h +++ b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsCommon.h @@ -1,29 +1,12 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; -* -* Copyright (C) Microsoft Corporation. All Rights Reserved. -* -* File: PIXEventsCommon.h -* Content: PIX include file -* Don't include this file directly - use pix3.h -* -****************************************************************************/ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Don't include this file directly - use pix3.h + #pragma once #ifndef _PIXEventsCommon_H_ #define _PIXEventsCommon_H_ -#if defined(XBOX) || defined(_XBOX_ONE) || defined(_DURANGO) || defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT) -#define PIX_XBOX -#endif - -#include - -#if defined(_M_X64) || defined(_M_IX86) -#include -#endif - // // The PIXBeginEvent and PIXSetMarker functions have an optimized path for // copying strings that work by copying 128-bit or 64-bits at a time. In some @@ -73,32 +56,29 @@ struct PIXEventsThreadInfo UINT64* destination; }; -#ifdef PIX_XBOX -extern "C" UINT64 WINAPI PIXEventsReplaceBlock(bool getEarliestTime) noexcept; -#else extern "C" UINT64 WINAPI PIXEventsReplaceBlock(PIXEventsThreadInfo * threadInfo, bool getEarliestTime) noexcept; + +#define PIX_EVENT_METADATA_NONE 0x0 +#define PIX_EVENT_METADATA_ON_CONTEXT 0x1 +#define PIX_EVENT_METADATA_STRING_IS_ANSI 0x2 +#define PIX_EVENT_METADATA_HAS_COLOR 0xF0 + +#ifndef PIX_GAMING_XBOX +#include "PIXEventsLegacy.h" #endif -enum PIXEventType +enum PIXEventType : UINT8 { - PIXEvent_EndEvent = 0x000, - PIXEvent_BeginEvent_VarArgs = 0x001, - PIXEvent_BeginEvent_NoArgs = 0x002, - PIXEvent_SetMarker_VarArgs = 0x007, - PIXEvent_SetMarker_NoArgs = 0x008, - - PIXEvent_EndEvent_OnContext = 0x010, - PIXEvent_BeginEvent_OnContext_VarArgs = 0x011, - PIXEvent_BeginEvent_OnContext_NoArgs = 0x012, - PIXEvent_SetMarker_OnContext_VarArgs = 0x017, - PIXEvent_SetMarker_OnContext_NoArgs = 0x018, + PIXEvent_EndEvent = 0x00, + PIXEvent_BeginEvent = 0x01, + PIXEvent_SetMarker = 0x02, }; static const UINT64 PIXEventsReservedRecordSpaceQwords = 64; //this is used to make sure SSE string copy always will end 16-byte write in the current block //this way only a check if destination < limit can be performed, instead of destination < limit - 1 //since both these are UINT64* and SSE writes in 16 byte chunks, 8 bytes are kept in reserve -//so even if SSE overwrites 8 extra bytes, those will still belong to the correct block +//so even if SSE overwrites 8-15 extra bytes, those will still belong to the correct block //on next iteration check destination will be greater than limit //this is used as well for fixed size UMD events and PIXEndEvent since these require less space //than other variable length user events and do not need big reserved space @@ -109,20 +89,43 @@ static const UINT64 PIXEventsGraphicsRecordSpaceQwords = 64; //Bits 7-19 (13 bits) static const UINT64 PIXEventsBlockEndMarker = 0x00000000000FFF80; -//Bits 10-19 (10 bits) -static const UINT64 PIXEventsTypeReadMask = 0x00000000000FFC00; -static const UINT64 PIXEventsTypeWriteMask = 0x00000000000003FF; -static const UINT64 PIXEventsTypeBitShift = 10; -//Bits 20-63 (44 bits) -static const UINT64 PIXEventsTimestampReadMask = 0xFFFFFFFFFFF00000; +// V2 events + +// Bits 00..06 (7 bits) - Size in QWORDS +static const UINT64 PIXEventsSizeWriteMask = 0x000000000000007F; +static const UINT64 PIXEventsSizeBitShift = 0; +static const UINT64 PIXEventsSizeReadMask = PIXEventsSizeWriteMask << PIXEventsSizeBitShift; +static const UINT64 PIXEventsSizeMax = (1ull << 7) - 1ull; + +// Bits 07..11 (5 bits) - Event Type +static const UINT64 PIXEventsTypeWriteMask = 0x000000000000001F; +static const UINT64 PIXEventsTypeBitShift = 7; +static const UINT64 PIXEventsTypeReadMask = PIXEventsTypeWriteMask << PIXEventsTypeBitShift; + +// Bits 12..19 (8 bits) - Event Specific Metadata +static const UINT64 PIXEventsMetadataWriteMask = 0x00000000000000FF; +static const UINT64 PIXEventsMetadataBitShift = 12; +static const UINT64 PIXEventsMetadataReadMask = PIXEventsMetadataWriteMask << PIXEventsMetadataBitShift; + +// Buts 20..63 (44 bits) - Timestamp static const UINT64 PIXEventsTimestampWriteMask = 0x00000FFFFFFFFFFF; static const UINT64 PIXEventsTimestampBitShift = 20; +static const UINT64 PIXEventsTimestampReadMask = PIXEventsTimestampWriteMask << PIXEventsTimestampBitShift; + +inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType, UINT8 eventSize, UINT8 eventMetadata) +{ + return + ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | + (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift) | + (((UINT64)eventMetadata & PIXEventsMetadataWriteMask) << PIXEventsMetadataBitShift) | + (((UINT64)eventSize & PIXEventsSizeWriteMask) << PIXEventsSizeBitShift); +} -inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType) +inline UINT8 PIXEncodeIndexColor(UINT8 color) { - return ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | - (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift); + // There are 8 index colors, indexed 0 (default) to 7 + return (color & 0x7) << 4; } //Bits 60-63 (4) @@ -145,12 +148,13 @@ static const UINT64 PIXEventsStringIsShortcutWriteMask = 0x0000000000000001; static const UINT64 PIXEventsStringIsShortcutReadMask = 0x0020000000000000; static const UINT64 PIXEventsStringIsShortcutBitShift = 53; -inline UINT64 PIXEncodeStringInfo(UINT64 alignment, UINT64 copyChunkSize, BOOL isANSI, BOOL isShortcut) +inline void PIXEncodeStringInfo(UINT64*& destination, BOOL isANSI) { - return ((alignment & PIXEventsStringAlignmentWriteMask) << PIXEventsStringAlignmentBitShift) | - ((copyChunkSize & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | - (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift) | - (((UINT64)isShortcut & PIXEventsStringIsShortcutWriteMask) << PIXEventsStringIsShortcutBitShift); + const UINT64 encodedStringInfo = + ((sizeof(UINT64) & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | + (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift); + + *destination++ = encodedStringInfo; } template @@ -239,10 +243,10 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& desti } } -//unsigned char has to be cast to a longer unsigned integer type +//UINT8 has to be cast to a longer unsigned integer type //this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier template<> -inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, unsigned char argument) +inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT8 argument) { if (destination < limit) { @@ -263,61 +267,60 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& desti } } -inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +inline void PIXCopyEventStringArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) { - *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); while (destination < limit) { - UINT64 c = static_cast(argument[0]); + UINT64 c = static_cast(argument[0]); if (!c) { *destination++ = 0; return; } UINT64 x = c; - c = static_cast(argument[1]); + c = static_cast(argument[1]); if (!c) { *destination++ = x; return; } x |= c << 8; - c = static_cast(argument[2]); + c = static_cast(argument[2]); if (!c) { *destination++ = x; return; } x |= c << 16; - c = static_cast(argument[3]); + c = static_cast(argument[3]); if (!c) { *destination++ = x; return; } x |= c << 24; - c = static_cast(argument[4]); + c = static_cast(argument[4]); if (!c) { *destination++ = x; return; } x |= c << 32; - c = static_cast(argument[5]); + c = static_cast(argument[5]); if (!c) { *destination++ = x; return; } x |= c << 40; - c = static_cast(argument[6]); + c = static_cast(argument[6]); if (!c) { *destination++ = x; return; } x |= c << 48; - c = static_cast(argument[7]); + c = static_cast(argument[7]); if (!c) { *destination++ = x; @@ -329,37 +332,42 @@ inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& dest } } +template inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) { -#if PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<8>(argument)) + PIXEncodeStringInfo(destination, TRUE); + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +template<> +inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + +inline void PIXCopyEventStringArgumentFast(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + constexpr UINT64 mask1 = 0x0101010101010101ULL; + constexpr UINT64 mask2 = 0x8080808080808080ULL; + UINT64* source = (UINT64*)argument; + + while (destination < limit) { - *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); - UINT64* source = (UINT64*)argument; - while (destination < limit) + UINT64 qword = *source++; + *destination++ = qword; + + //check if any of the characters is a terminating zero + UINT64 isTerminated = (qword - mask1) & (~qword & mask2); + + if (isTerminated) { - UINT64 qword = *source++; - *destination++ = qword; - //check if any of the characters is a terminating zero - if (!((qword & 0xFF00000000000000) && - (qword & 0xFF000000000000) && - (qword & 0xFF0000000000) && - (qword & 0xFF00000000) && - (qword & 0xFF000000) && - (qword & 0xFF0000) && - (qword & 0xFF00) && - (qword & 0xFF))) - { - break; - } + break; } } - else -#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY - { - PIXCopyEventArgumentSlowest(destination, limit, argument); - } } +#endif template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) @@ -369,43 +377,15 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& dest if (argument != nullptr) { #if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<16>(argument)) + if (PIXIsPointerAligned<8>(argument)) { - *destination++ = PIXEncodeStringInfo(0, 16, TRUE, FALSE); - __m128i zero = _mm_setzero_si128(); - if (PIXIsPointerAligned<16>(destination)) - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_store_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi8(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 16; - } - } - else - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_storeu_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi8(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 16; - } - } + PIXEncodeStringInfo(destination, TRUE); + PIXCopyEventStringArgumentFast(destination, limit, argument); } else #endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY { - PIXCopyEventArgumentSlow(destination, limit, argument); + PIXCopyEventArgumentSlow(destination, limit, argument); } } else @@ -415,39 +395,64 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& dest } } +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) +{ + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + PIXCopyEventStringArgumentFast(destination, limit, argument); + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } +} + template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) { PIXCopyEventArgument(destination, limit, (PCSTR)argument); } -inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) +{ + PIXCopyStringArgument(destination, limit, (PCSTR)argument); +} + +inline void PIXCopyEventStringArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) { - *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); while (destination < limit) { - UINT64 c = static_cast(argument[0]); + UINT64 c = static_cast(argument[0]); if (!c) { *destination++ = 0; return; } UINT64 x = c; - c = static_cast(argument[1]); + c = static_cast(argument[1]); if (!c) { *destination++ = x; return; } x |= c << 16; - c = static_cast(argument[2]); + c = static_cast(argument[2]); if (!c) { *destination++ = x; return; } x |= c << 32; - c = static_cast(argument[3]); + c = static_cast(argument[3]); if (!c) { *destination++ = x; @@ -459,34 +464,39 @@ inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& dest } } +template inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) { -#if PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<8>(argument)) + PIXEncodeStringInfo(destination, FALSE); + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +template<> +inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + PIXCopyEventStringArgumentSlow(destination, limit, argument); +} + +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY +inline void PIXCopyEventStringArgumentFast(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + UINT64* source = (UINT64*)argument; + while (destination < limit) { - *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); - UINT64* source = (UINT64*)argument; - while (destination < limit) + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + //TODO: check if reversed condition is faster + if (!((qword & 0xFFFF000000000000) && + (qword & 0xFFFF00000000) && + (qword & 0xFFFF0000) && + (qword & 0xFFFF))) { - UINT64 qword = *source++; - *destination++ = qword; - //check if any of the characters is a terminating zero - //TODO: check if reversed condition is faster - if (!((qword & 0xFFFF000000000000) && - (qword & 0xFFFF00000000) && - (qword & 0xFFFF0000) && - (qword & 0xFFFF))) - { - break; - } + break; } } - else -#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY - { - PIXCopyEventArgumentSlowest(destination, limit, argument); - } } +#endif template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) @@ -496,43 +506,15 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& des if (argument != nullptr) { #if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY - if (PIXIsPointerAligned<16>(argument)) + if (PIXIsPointerAligned<8>(argument)) { - *destination++ = PIXEncodeStringInfo(0, 16, FALSE, FALSE); - __m128i zero = _mm_setzero_si128(); - if (PIXIsPointerAligned<16>(destination)) - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_store_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi16(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 8; - } - } - else - { - while (destination < limit) - { - __m128i mem = _mm_load_si128((__m128i*)argument); - _mm_storeu_si128((__m128i*)destination, mem); - //check if any of the characters is a terminating zero - __m128i res = _mm_cmpeq_epi16(mem, zero); - destination += 2; - if (_mm_movemask_epi8(res)) - break; - argument += 8; - } - } + PIXEncodeStringInfo(destination, FALSE); + PIXCopyEventStringArgumentFast(destination, limit, argument); } else #endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY { - PIXCopyEventArgumentSlow(destination, limit, argument); + PIXCopyEventArgumentSlow(destination, limit, argument); } } else @@ -542,12 +524,38 @@ inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& des } } +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) +{ + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + PIXCopyEventStringArgumentFast(destination, limit, argument); + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } +} + template<> inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PWSTR argument) { PIXCopyEventArgument(destination, limit, (PCWSTR)argument); }; +inline void PIXCopyStringArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PWSTR argument) +{ + PIXCopyStringArgument(destination, limit, (PCWSTR)argument); +}; + #if defined(__d3d12_x_h__) || defined(__d3d12_xs_h__) || defined(__d3d12_h__) inline void PIXSetGPUMarkerOnContext(_In_ ID3D12GraphicsCommandList* commandList, _In_reads_bytes_(size) void* data, UINT size) @@ -594,12 +602,9 @@ template<> struct PIXInferScopedEventType { typedef void Type; }; template<> struct PIXInferScopedEventType { typedef void Type; }; template<> struct PIXInferScopedEventType { typedef void Type; }; template<> struct PIXInferScopedEventType { typedef void Type; }; - - -#if PIX_ENABLE_BLOCK_ARGUMENT_COPY_SET -#undef PIX_ENABLE_BLOCK_ARGUMENT_COPY -#endif - -#undef PIX_ENABLE_BLOCK_ARGUMENT_COPY_SET +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; +template<> struct PIXInferScopedEventType { typedef void Type; }; #endif //_PIXEventsCommon_H_ diff --git a/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsLegacy.h b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsLegacy.h new file mode 100644 index 00000000..b5b08bea --- /dev/null +++ b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/PIXEventsLegacy.h @@ -0,0 +1,565 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +// Don't include this file directly - use pix3.h +// This file encodes PIX events in the legacy PIX event format. + +#ifndef _PIXEventsLegacy_H_ +#define _PIXEventsLegacy_H_ + +#include + +#if defined(_M_X64) || defined(_M_IX86) +#include +#endif + +namespace PixEventsLegacy +{ + enum PIXEventType + { + PIXEvent_EndEvent = 0x000, + PIXEvent_BeginEvent_VarArgs = 0x001, + PIXEvent_BeginEvent_NoArgs = 0x002, + PIXEvent_SetMarker_VarArgs = 0x007, + PIXEvent_SetMarker_NoArgs = 0x008, + + PIXEvent_EndEvent_OnContext = 0x010, + PIXEvent_BeginEvent_OnContext_VarArgs = 0x011, + PIXEvent_BeginEvent_OnContext_NoArgs = 0x012, + PIXEvent_SetMarker_OnContext_VarArgs = 0x017, + PIXEvent_SetMarker_OnContext_NoArgs = 0x018, + }; + + static const UINT64 PIXEventsReservedRecordSpaceQwords = 64; + static const UINT64 PIXEventsReservedTailSpaceQwords = 2; + static const UINT64 PIXEventsSafeFastCopySpaceQwords = PIXEventsReservedRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + static const UINT64 PIXEventsGraphicsRecordSpaceQwords = 64; + + //Bits 7-19 (13 bits) + static const UINT64 PIXEventsBlockEndMarker = 0x00000000000FFF80; + + //Bits 10-19 (10 bits) + static const UINT64 PIXEventsTypeReadMask = 0x00000000000FFC00; + static const UINT64 PIXEventsTypeWriteMask = 0x00000000000003FF; + static const UINT64 PIXEventsTypeBitShift = 10; + + //Bits 20-63 (44 bits) + static const UINT64 PIXEventsTimestampReadMask = 0xFFFFFFFFFFF00000; + static const UINT64 PIXEventsTimestampWriteMask = 0x00000FFFFFFFFFFF; + static const UINT64 PIXEventsTimestampBitShift = 20; + + inline UINT64 PIXEncodeEventInfo(UINT64 timestamp, PIXEventType eventType) + { + return ((timestamp & PIXEventsTimestampWriteMask) << PIXEventsTimestampBitShift) | + (((UINT64)eventType & PIXEventsTypeWriteMask) << PIXEventsTypeBitShift); + } + + //Bits 60-63 (4) + static const UINT64 PIXEventsStringAlignmentWriteMask = 0x000000000000000F; + static const UINT64 PIXEventsStringAlignmentReadMask = 0xF000000000000000; + static const UINT64 PIXEventsStringAlignmentBitShift = 60; + + //Bits 55-59 (5) + static const UINT64 PIXEventsStringCopyChunkSizeWriteMask = 0x000000000000001F; + static const UINT64 PIXEventsStringCopyChunkSizeReadMask = 0x0F80000000000000; + static const UINT64 PIXEventsStringCopyChunkSizeBitShift = 55; + + //Bit 54 + static const UINT64 PIXEventsStringIsANSIWriteMask = 0x0000000000000001; + static const UINT64 PIXEventsStringIsANSIReadMask = 0x0040000000000000; + static const UINT64 PIXEventsStringIsANSIBitShift = 54; + + //Bit 53 + static const UINT64 PIXEventsStringIsShortcutWriteMask = 0x0000000000000001; + static const UINT64 PIXEventsStringIsShortcutReadMask = 0x0020000000000000; + static const UINT64 PIXEventsStringIsShortcutBitShift = 53; + + inline UINT64 PIXEncodeStringInfo(UINT64 alignment, UINT64 copyChunkSize, BOOL isANSI, BOOL isShortcut) + { + return ((alignment & PIXEventsStringAlignmentWriteMask) << PIXEventsStringAlignmentBitShift) | + ((copyChunkSize & PIXEventsStringCopyChunkSizeWriteMask) << PIXEventsStringCopyChunkSizeBitShift) | + (((UINT64)isANSI & PIXEventsStringIsANSIWriteMask) << PIXEventsStringIsANSIBitShift) | + (((UINT64)isShortcut & PIXEventsStringIsShortcutWriteMask) << PIXEventsStringIsShortcutBitShift); + } + + template + inline bool PIXIsPointerAligned(T* pointer) + { + return !(((UINT64)pointer) & (alignment - 1)); + } + + // Generic template version slower because of the additional clear write + template + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, T argument) + { + if (destination < limit) + { + *destination = 0ull; + *((T*)destination) = argument; + ++destination; + } + } + + // int32 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, INT32 argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } + } + + // unsigned int32 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT32 argument) + { + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } + } + + // int64 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, INT64 argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = argument; + ++destination; + } + } + + // unsigned int64 specialization to avoid slower double memory writes + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, UINT64 argument) + { + if (destination < limit) + { + *destination = argument; + ++destination; + } + } + + //floats must be cast to double during writing the data to be properly printed later when reading the data + //this is needed because when float is passed to varargs function it's cast to double + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, float argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } + } + + //char has to be cast to a longer signed integer type + //this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, char argument) + { + if (destination < limit) + { + *reinterpret_cast(destination) = static_cast(argument); + ++destination; + } + } + + //unsigned char has to be cast to a longer unsigned integer type + //this is due to printf not ignoring correctly the upper bits of unsigned long long for a char format specifier + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, unsigned char argument) + { + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } + } + + //bool has to be cast to an integer since it's not explicitly supported by string format routines + //there's no format specifier for bool type, but it should work with integer format specifiers + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, bool argument) + { + if (destination < limit) + { + *destination = static_cast(argument); + ++destination; + } + } + + inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) + { + *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); + while (destination < limit) + { + UINT64 c = static_cast(argument[0]); + if (!c) + { + *destination++ = 0; + return; + } + UINT64 x = c; + c = static_cast(argument[1]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 8; + c = static_cast(argument[2]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 16; + c = static_cast(argument[3]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 24; + c = static_cast(argument[4]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 32; + c = static_cast(argument[5]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 40; + c = static_cast(argument[6]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 48; + c = static_cast(argument[7]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 56; + *destination++ = x; + argument += 8; + } + } + + inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) + { +#if PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 8, TRUE, FALSE); + UINT64* source = (UINT64*)argument; + while (destination < limit) + { + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + if (!((qword & 0xFF00000000000000) && + (qword & 0xFF000000000000) && + (qword & 0xFF0000000000) && + (qword & 0xFF00000000) && + (qword & 0xFF000000) && + (qword & 0xFF0000) && + (qword & 0xFF00) && + (qword & 0xFF))) + { + break; + } + } + } + else +#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlowest(destination, limit, argument); + } + } + + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCSTR argument) + { + if (destination < limit) + { + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<16>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 16, TRUE, FALSE); + __m128i zero = _mm_setzero_si128(); + if (PIXIsPointerAligned<16>(destination)) + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_store_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi8(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 16; + } + } + else + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_storeu_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi8(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 16; + } + } + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } + } + } + + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PSTR argument) + { + PIXCopyEventArgument(destination, limit, (PCSTR)argument); + } + + inline void PIXCopyEventArgumentSlowest(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) + { + *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); + while (destination < limit) + { + UINT64 c = static_cast(argument[0]); + if (!c) + { + *destination++ = 0; + return; + } + UINT64 x = c; + c = static_cast(argument[1]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 16; + c = static_cast(argument[2]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 32; + c = static_cast(argument[3]); + if (!c) + { + *destination++ = x; + return; + } + x |= c << 48; + *destination++ = x; + argument += 4; + } + } + + inline void PIXCopyEventArgumentSlow(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) + { +#if PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<8>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 8, FALSE, FALSE); + UINT64* source = (UINT64*)argument; + while (destination < limit) + { + UINT64 qword = *source++; + *destination++ = qword; + //check if any of the characters is a terminating zero + //TODO: check if reversed condition is faster + if (!((qword & 0xFFFF000000000000) && + (qword & 0xFFFF00000000) && + (qword & 0xFFFF0000) && + (qword & 0xFFFF))) + { + break; + } + } + } + else +#endif // PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlowest(destination, limit, argument); + } + } + + template<> + inline void PIXCopyEventArgument(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, _In_ PCWSTR argument) + { + if (destination < limit) + { + if (argument != nullptr) + { +#if (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + if (PIXIsPointerAligned<16>(argument)) + { + *destination++ = PIXEncodeStringInfo(0, 16, FALSE, FALSE); + __m128i zero = _mm_setzero_si128(); + if (PIXIsPointerAligned<16>(destination)) + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_store_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi16(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 8; + } + } + else + { + while (destination < limit) + { + __m128i mem = _mm_load_si128((__m128i*)argument); + _mm_storeu_si128((__m128i*)destination, mem); + //check if any of the characters is a terminating zero + __m128i res = _mm_cmpeq_epi16(mem, zero); + destination += 2; + if (_mm_movemask_epi8(res)) + break; + argument += 8; + } + } + } + else +#endif // (defined(_M_X64) || defined(_M_IX86)) && PIX_ENABLE_BLOCK_ARGUMENT_COPY + { + PIXCopyEventArgumentSlow(destination, limit, argument); + } + } + else + { + *destination++ = 0ull; + } + } + } + + inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit) + { + // nothing + UNREFERENCED_PARAMETER(destination); + UNREFERENCED_PARAMETER(limit); + } + + template + void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args) + { + PIXCopyEventArgument(destination, limit, arg); + PIXCopyEventArguments(destination, limit, args...); + } + + template + struct PIXEventTypeInferer + { + static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_VarArgs; } + static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_VarArgs; } + static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } + static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } + static constexpr PIXEventType End() { return PIXEvent_EndEvent; } + + // Xbox and Windows store different types of events for context events. + // On Xbox these include a context argument, while on Windows they do + // not. It is important not to change the event types used on the + // Windows version as there are OS components (eg debug layer & DRED) + // that decode event structs. +#ifdef PIX_XBOX + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_VarArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_VarArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent_OnContext; } +#else + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_VarArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_VarArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent; } +#endif + }; + + template<> + struct PIXEventTypeInferer<> + { + static constexpr PIXEventType Begin() { return PIXEvent_BeginEvent_NoArgs; } + static constexpr PIXEventType SetMarker() { return PIXEvent_SetMarker_NoArgs; } + static constexpr PIXEventType BeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } + static constexpr PIXEventType SetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } + static constexpr PIXEventType End() { return PIXEvent_EndEvent; } + +#ifdef PIX_XBOX + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_OnContext_NoArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_OnContext_NoArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent_OnContext; } +#else + static constexpr PIXEventType GpuBeginOnContext() { return PIXEvent_BeginEvent_NoArgs; } + static constexpr PIXEventType GpuSetMarkerOnContext() { return PIXEvent_SetMarker_NoArgs; } + static constexpr PIXEventType GpuEndOnContext() { return PIXEvent_EndEvent; } +#endif + }; + + + template + UINT64* EncodeBeginEventForContext(UINT64 (&buffer)[size], UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuBeginOnContext()); + *destination++ = color; + + PIXCopyEventArguments(destination, limit, formatString, args...); + *destination = 0ull; + + return destination; + } + + template + UINT64* EncodeSetMarkerForContext(UINT64 (&buffer)[size], UINT64 color, STR formatString, ARGS... args) + { + UINT64* destination = buffer; + UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords; + + *destination++ = PIXEncodeEventInfo(0, PIXEventTypeInferer::GpuSetMarkerOnContext()); + *destination++ = color; + + PIXCopyEventArguments(destination, limit, formatString, args...); + *destination = 0ull; + + return destination; + } +} + +#endif //_PIXEventsLegacy_H_ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3.h b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3.h similarity index 84% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3.h rename to packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3.h index 9007765e..b13e8bc7 100644 --- a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3.h +++ b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3.h @@ -1,13 +1,6 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: pix3.h - * Content: PIX include file - * - ****************************************************************************/ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + #pragma once #ifndef _PIX3_H_ @@ -46,6 +39,7 @@ #define PIX_CAPTURE_SYSTEM_MONITOR_COUNTERS (1 << 6) #define PIX_CAPTURE_VIDEO (1 << 7) #define PIX_CAPTURE_AUDIO (1 << 8) +#define PIX_CAPTURE_GPU_TRACE (1 << 9) #define PIX_CAPTURE_RESERVED (1 << 15) union PIXCaptureParameters @@ -53,6 +47,8 @@ union PIXCaptureParameters enum PIXCaptureStorage { Memory = 0, + MemoryCircular = 1, // Xbox only + FileCircular = 2, // PC only }; struct GpuCaptureParameters @@ -77,8 +73,19 @@ union PIXCaptureParameters BOOL CaptureVirtualAllocEvents; BOOL CaptureHeapAllocEvents; BOOL CaptureXMemEvents; // Xbox only - BOOL CapturePixMemEvents; // Xbox only + BOOL CapturePixMemEvents; + BOOL CapturePageFaultEvents; + BOOL CaptureVideoFrames; // Xbox only } TimingCaptureParameters; + + struct GpuTraceParameters // Xbox Series and newer only + { + PWSTR FileName; + UINT32 MaximumToolingMemorySizeMb; + + BOOL CaptureGpuOccupancy; + + } GpuTraceParameters; }; typedef PIXCaptureParameters* PPIXCaptureParameters; @@ -89,6 +96,19 @@ typedef PIXCaptureParameters* PPIXCaptureParameters; #include "pix3_win.h" #endif +#if defined(XBOX) || defined(_XBOX_ONE) || defined(_DURANGO) || defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT) +#define PIX_XBOX +#if defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT) +#define PIX_GAMING_XBOX +#endif +#endif + +#if !defined(PIX_USE_GPU_MARKERS_V2) +#ifdef PIX_GAMING_XBOX +#define PIX_USE_GPU_MARKERS_V2 +#endif +#endif + #if defined(USE_PIX_SUPPORTED_ARCHITECTURE) && (defined(USE_PIX) || defined(USE_PIX_RETAIL)) #define PIX_EVENTS_ARE_TURNED_ON @@ -168,8 +188,8 @@ inline void PIXScopedEvent(void*, UINT64, _In_ PCWSTR, ...) {} // Use PIX_COLOR() to specify a particular color for an event. // Or, use PIX_COLOR_INDEX() to specify a set of unique event categories, and let PIX choose // the colors to represent each category. -inline UINT PIX_COLOR(BYTE r, BYTE g, BYTE b) { return 0xff000000 | (r << 16) | (g << 8) | b; } -inline UINT PIX_COLOR_INDEX(BYTE i) { return i; } -const UINT PIX_COLOR_DEFAULT = PIX_COLOR_INDEX(0); +inline UINT32 PIX_COLOR(UINT8 r, UINT8 g, UINT8 b) { return 0xff000000u | ((UINT32)r << 16) | ((UINT32)g << 8) | (UINT32)b; } +inline UINT8 PIX_COLOR_INDEX(UINT8 i) { return i; } +const UINT8 PIX_COLOR_DEFAULT = PIX_COLOR_INDEX(0); #endif // _PIX3_H_ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3_win.h b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3_win.h similarity index 77% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3_win.h rename to packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3_win.h index 2c7d0a53..9fd7baff 100644 --- a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/Include/WinPixEventRuntime/pix3_win.h +++ b/packages/WinPixEventRuntime.1.0.240308001/Include/WinPixEventRuntime/pix3_win.h @@ -1,14 +1,6 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: PIX3_win.h - * Content: PIX include file - * Don't include this file directly - use pix3.h - * - ****************************************************************************/ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +// Don't include this file directly - use pix3.h #pragma once @@ -44,13 +36,19 @@ inline void PIXRecordMemoryFreeEvent(USHORT, void*, size_t, UINT64) {} #endif -// The following defines denote the different metadata values that have been used -// by tools to denote how to parse pix marker event data. The first two values -// are legacy values. +// The following WINPIX_EVENT_* defines denote the different metadata values that have +// been used by tools to denote how to parse pix marker event data. The first two values +// are legacy values used by pix.h in the Windows SDK. #define WINPIX_EVENT_UNICODE_VERSION 0 #define WINPIX_EVENT_ANSI_VERSION 1 + +// These values denote PIX marker event data that was created by the WinPixEventRuntime. +// In early 2023 we revised the PIX marker format and defined a new version number. #define WINPIX_EVENT_PIX3BLOB_VERSION 2 +#define WINPIX_EVENT_PIX3BLOB_V2 6345127 // A number that other applications are unlikely to have used before +// For backcompat reasons, the WinPixEventRuntime uses the older PIX3BLOB format when it passes data +// into the D3D12 runtime. It will be updated to use the V2 format in the future. #define D3D12_EVENT_METADATA WINPIX_EVENT_PIX3BLOB_VERSION __forceinline UINT64 PIXGetTimestampCounter() @@ -324,8 +322,6 @@ extern "C" __forceinline HRESULT WINAPI PIXBeginCapture2(DWORD captureFlags, _I extern "C" __forceinline HRESULT WINAPI PIXEndCapture(BOOL discard) { - UNREFERENCED_PARAMETER(discard); - // We can't tell if the user wants to end a GPU Capture or a Timing Capture. // The user shouldn't have both WinPixGpuCapturer and WinPixTimingCapturer loaded in the process though, // so we can just look for one of them and call it. @@ -436,4 +432,78 @@ __forceinline HINSTANCE WINAPI PIXOpenCaptureInUI(PCWSTR) #endif // USE_PIX_SUPPORTED_ARCHITECTURE || USE_PIX +#if defined(__d3d12_h__) + +inline void PIXInsertTimingMarkerOnContextForBeginEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForBeginEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForSetMarker(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForSetMarker(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertTimingMarkerOnContextForEndEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->EndEvent(); +} + +inline void PIXInsertTimingMarkerOnContextForEndEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->EndEvent(); +} + +inline void PIXInsertGPUMarkerOnContextForBeginEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForBeginEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->BeginEvent(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForSetMarker(_In_ ID3D12GraphicsCommandList* commandList, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandList->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForSetMarker(_In_ ID3D12CommandQueue* commandQueue, UINT8 eventType, _In_reads_bytes_(size) void* data, UINT size) +{ + UNREFERENCED_PARAMETER(eventType); + commandQueue->SetMarker(WINPIX_EVENT_PIX3BLOB_V2, data, size); +} + +inline void PIXInsertGPUMarkerOnContextForEndEvent(_In_ ID3D12GraphicsCommandList* commandList, UINT8, void*, UINT) +{ + commandList->EndEvent(); +} + +inline void PIXInsertGPUMarkerOnContextForEndEvent(_In_ ID3D12CommandQueue* commandQueue, UINT8, void*, UINT) +{ + commandQueue->EndEvent(); +} + +#endif + #endif //_PIX3_WIN_H_ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/ThirdPartyNotices.txt b/packages/WinPixEventRuntime.1.0.240308001/ThirdPartyNotices.txt similarity index 82% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/ThirdPartyNotices.txt rename to packages/WinPixEventRuntime.1.0.240308001/ThirdPartyNotices.txt index 70b55bbb..45f4d538 100644 --- a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/ThirdPartyNotices.txt +++ b/packages/WinPixEventRuntime.1.0.240308001/ThirdPartyNotices.txt @@ -23,6 +23,10 @@ The Microsoft Program includes the following third-party software: 12. Newtonsoft.Json (https://www.newtonsoft.com/json) 13. WIX (https://wixtoolset.org/) 14. Moq (https://github.com/moq/moq) +15. FluentAssertions (https://github.com/fluentassertions/fluentassertions) +16. .NET Community Toolkit (https://github.com/CommunityToolkit/dotnet) +17. LiveCharts (https://lvcharts.com) +18. NVIDIA PIX Plugin As the recipient of the above third-party software, Microsoft sets forth a copy of the notices and other information below. @@ -133,7 +137,7 @@ AMD NOTICES AND INFORMATION BEGIN HERE ====================================== AMD copyrighted code (MIT) -Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved. +Copyright (c) 2017-2023 Advanced Micro Devices, Inc. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -444,6 +448,7 @@ purpose and non-infringement. END OF WIX NOTICES AND INFORMATION ================================= + MOQ NOTICES AND INFORMATION BEGIN HERE ====================================== MIT License @@ -470,3 +475,105 @@ SOFTWARE. END OF MOQ NOTICES AND INFORMATION ================================== + + +FLUENTASSERTIONS NOTICES AND INFORMATION BEGIN HERE +=================================================== +Copyright [2010-2021] [Dennis Doomen] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +END OF FLUENTASSERTIONS NOTICES AND INFORMATION +=============================================== + +.NET COMMUNITY TOOLKIT NOTICES AND INFORMATION BEGIN HERE +====================================== +MIT License + +Copyright © .NET Foundation and Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +END OF .NET COMMUNITY TOOLKIT NOTICES AND INFORMATION +================================== + +LIVE CHARTS NOTICES AND INFORMATION BEGIN HERE +====================================== +MIT License + +Copyright (c) 2021 Alberto Rodriguez Orozco + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +END OF LIVE CHARTS NOTICES AND INFORMATION +================================== + +NVIDIA PIX PLUGIN NOTICES AND INFORMATION BEGIN HERE +====================================== +Copyright (c) Microsoft Corporation. +Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +END OF NVIDIA PIX PLUGIN NOTICES AND INFORMATION +================================== \ No newline at end of file diff --git a/packages/WinPixEventRuntime.1.0.240308001/WinPixEventRuntime.1.0.240308001.nupkg b/packages/WinPixEventRuntime.1.0.240308001/WinPixEventRuntime.1.0.240308001.nupkg new file mode 100644 index 00000000..305ccad5 Binary files /dev/null and b/packages/WinPixEventRuntime.1.0.240308001/WinPixEventRuntime.1.0.240308001.nupkg differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/WinPixEventRuntimeIcon.png b/packages/WinPixEventRuntime.1.0.240308001/WinPixEventRuntimeIcon.png similarity index 100% rename from packages/WinPixEventRuntime.1.0.230302001/WinPixEventRuntimeIcon.png rename to packages/WinPixEventRuntime.1.0.240308001/WinPixEventRuntimeIcon.png diff --git a/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.lib b/packages/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime.lib similarity index 91% rename from packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.lib rename to packages/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime.lib index fc17386b..04198a54 100644 Binary files a/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime.lib and b/packages/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime.lib differ diff --git a/packages/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.dll b/packages/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.dll new file mode 100644 index 00000000..0c16945d Binary files /dev/null and b/packages/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.dll differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.lib b/packages/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.lib similarity index 91% rename from packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.lib rename to packages/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.lib index 9b46fbb9..6dc8a054 100644 Binary files a/packages/WinPixEventRuntime.1.0.230302001/bin/ARM64/WinPixEventRuntime_UAP.lib and b/packages/WinPixEventRuntime.1.0.240308001/bin/ARM64/WinPixEventRuntime_UAP.lib differ diff --git a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.lib b/packages/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime.lib similarity index 90% rename from _GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.lib rename to packages/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime.lib index d5628599..7a909a87 100644 Binary files a/_GeneratedCode/UnitTests/DX12/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime.lib and b/packages/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime.lib differ diff --git a/packages/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.dll b/packages/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.dll new file mode 100644 index 00000000..0b1226c0 Binary files /dev/null and b/packages/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.dll differ diff --git a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.lib b/packages/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.lib similarity index 91% rename from GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.lib rename to packages/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.lib index e3f6f641..cc2156f7 100644 Binary files a/GigiCompilerLib/Backends/DX12/templates/Application/WinPixEventRuntime.1.0.230302001/bin/x64/WinPixEventRuntime_UAP.lib and b/packages/WinPixEventRuntime.1.0.240308001/bin/x64/WinPixEventRuntime_UAP.lib differ diff --git a/packages/WinPixEventRuntime.1.0.230302001/build/WinPixEventRuntime.targets b/packages/WinPixEventRuntime.1.0.240308001/build/WinPixEventRuntime.targets similarity index 100% rename from packages/WinPixEventRuntime.1.0.230302001/build/WinPixEventRuntime.targets rename to packages/WinPixEventRuntime.1.0.240308001/build/WinPixEventRuntime.targets diff --git a/packages/WinPixEventRuntime.1.0.240308001/license.txt b/packages/WinPixEventRuntime.1.0.240308001/license.txt new file mode 100644 index 00000000..63447fd8 --- /dev/null +++ b/packages/WinPixEventRuntime.1.0.240308001/license.txt @@ -0,0 +1,21 @@ +Copyright (c) Microsoft Corporation. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/readme/OSS.md b/readme/OSS.md index 731ceaca..4582fa30 100644 --- a/readme/OSS.md +++ b/readme/OSS.md @@ -16,9 +16,8 @@ tinyobjloader | https://github.com/tinyobjloader/tinyobjloader/ | Load .obj mode OpenFBX | https://github.com/nem0/OpenFBX/ | For loading FBX model. tinyexr | https://github.com/syoyo/tinyexr | Load HDR .exr image files in viewer. stb | https://github.com/nothings/stb/ | read and write png, jpg, etc. -gli | https://github.com/g-truc/gli/ | Load dds files. -bc7enc | https://github.com/richgel999/bc7enc/ | Decode BC data into pixels. spdlog | https://github.com/gabime/spdlog/ | Prettier output for the compiler. nativefiledialog | https://github.com/mlabbe/nativefiledialog/ | For opening native file selection windows. rapidjson | https://github.com/Tencent/rapidjson/ | Read/write json files. Nearly every data file is stored as json. tinyxml2 | https://github.com/leethomason/tinyxml2 | Read/write xml files. +DiretcXTex | https://github.com/microsoft/DirectXTex | Load, encode and decode dds files. \ No newline at end of file diff --git a/readme/tutorial/tutorial.md b/readme/tutorial/tutorial.md index 7f98ded6..c82bf556 100644 --- a/readme/tutorial/tutorial.md +++ b/readme/tutorial/tutorial.md @@ -50,7 +50,7 @@ The editor controls in the central grid render graph area are: We are going to make a technique which takes in an input texture, blurs it, and gives the result as an output texture. First we'll make the textures. -Right click in the center area (that has a grid) to bring up the "Create Node" menu and choose "resourceTexture" to create a new texture. +Right click in the center area (that has a grid) to bring up the "Create Node" menu and choose "Texture" to create a new "resourceTexture" node. ![](createtex.png) @@ -62,7 +62,7 @@ We will leave the rest of the settings alone. Not setting the format or size is ![](createdtex.png) -Our input texture is created. To create our output texture, right click on an empty space, and create another "resourceTexture" node. Then: +Our input texture is created. To create our output texture, right click on an empty space, and create another "Texture" node. Then: 1. Set the name to "Output" 2. Set the visibility to "Exported" meaning that the texture is managed by the technique, but is made available outside of the technique after execution. 3. Under the "Format" section, set the "Node" drop down to "Input", meaning that this texture will have the same format as "Input", whatever format that is. @@ -86,7 +86,7 @@ Lastly, scroll to the bottom, click "Create Shader File", and name it "BoxBlurCS ![](createshader.png) -Click the edit button to open the shader file in your default shader editor. For me that is VSCode. +Click the edit button (near the top of the "Shaders" tab) to open the shader file in your default shader editor. For me that is VSCode, for you it will be whatever app Windows is configured to open .hlsl files with. In the skeleton shader file that Gigi made for you, you'll notice a couple strange looking tokens. Before sending your shader to the shader compiler, Gigi processes the shader file for string replacement. @@ -124,7 +124,7 @@ Shader Resources: */ ``` -Now that we have our shader written, we need to create a compute shader action node. In the editor, right click and create an "actionComputeShader" node. Then: +Now that we have our shader written, we need to create a compute shader action node. In the editor, right click and select "Compute Shader" to create a new "actionComputeShader" node. Then: 1. Set the name to "DoBlur" 2. In the "Shader" drop down, choose our new shader "DoBlurCS". After this, our resources "input" and "output" will appear as pins.

    =; +T6221*=Pkx`fjtwzʏ}M ! !!! !!"""##"""!!!"""#$#""#"#&)*('%$$##%%$#$#$$%$%$#$%%%$%$%$%%$$$&&&%&%$%&&'())*)((''&'&''('&%%Tʿ׾߄ȷɿޓó爟¼󀅄©삟ڴ´ȾǷ׿շس􀎅ݴ®ϻĸܑ󫯷ލڻɼǕƹɧҸ߉Ӄ񑌃╒ҿмԚǓ툏蔸埞жժښ爙ĵȕ舋굃ӆ탎󚨝إ̂ױ䟣ỳ۰оŠκǖ쀂ŭȞ¬¡ò³ÀĀ̌Ґֈ򃘧Ɠߊ£ֱ޸“̏ဟ:څƙлށULpC@BRXPJ>[c46aRdkbGD@?@=9;;RE84&-1B]D[D@,,5>;C-'7O]W7>MJDH?ADOV^/0OTOTJV^^CD_`FMOG^;9YIU@?995gvJP:0CYE%)(+/W4TMKhh[C#(/UVY^M),bkJMLKGIDu}?AHJG>@IIMPQMPVPSUTZQXDETpcX[oY][`ri^feosJCLRRPVM\\bZRVZjxczfcbss_\e\WVUZMJ"3.%./AE9P]WD)CwBk}VpSSIIleCsTw`L>IYOUID9J3m;?Mi/'&(@KZ>KRH:0EJ>C\Y`CN]CF/gWbz><===:::>?;:>D@;9542141/168987;??>=>===@BBB@?A<<>/.51,TTTWW6?3,-+.NNUX/^`ca]_a^.../12124:<=>=<;:66741/++***)(%%),/-53+,***/A0.92MH)I)6'=B &1/20<90BK7.*),+):585d]TIOJJ(&$*-*)%C=7+*.83,()%F::95789#%$$)*%)++)3(3ML301)%%$$.('(.++/06-06+%,,53AB83;NDA=3,@BE91*CA3$&/I-5@;?8=+1;+*'&3&$&$#&'&)&$&+52) %&+**.'&('((*()((%%"! ! !"!93I&%,#22RJ@1++4+-7-2560L==&B;UA-/-$.(MAWAc\XYFZ}f[GCzkh6gDsCY;]9:7;eegTsvRXmsys[J:qxIgPqbYMN|pvLoRMZYBB-92YEvi\^u?UHwfC\:K>FC8MFFaK]1.+'<4F>5<9=;3849951C4*B3//X]RR0245/WVXSM70YPD1P.43448555,EQLMFNOX26?D9650?GFI<7-PWX-H=DD-3G<5(R:964410+OGMQ=:GA.2=:755473.0OHA*RUSYOIGMKKGOSHHIEBHEEL6,=HEFKA2c;>?@E?A:9927:4>=;<;==ABQKHFKF;879ABHJSKbWRQHXSJA>J`di5MMMQ;HB``41K=779=VIKA2Q?=B#;4)!+'2JG6V:;.0('"#'",@A?@?<;66510&7<7745354-,264757457394/221320//35160/-1145587222NMJKKQSOX,/62445/*..-.42-8:220,QQ,,OXLF?KM+"!$(#! "D:209>9478:<@7867/--''$"#'&&&'+(!%%(*+/5+)/298::1Q".LLJE@5J0'LGJOHIJC8=JWbfPOdZT5BEEABE?>@?>;856G;C%,2&"JM:H<4kl<+374/5BQKHFeLYM*$*JMZTJ\E0U/@2M[H\`VWNL:LSR]ibWULIK_97-*B'$(251-%546-662)$$. +$,,"(&#&!!!'*+%-')).-*5%()%.,(-4=%',D' ?)IGEeaM*!KROG.WCDCDDIIAAIHE?FPQUWYSV]EVYYUYMSA?Lj]SUgNLJOfaWabik@7AMKIPL_dnf]fkxyxptpgnhccgw%ÿ¿(„UĄǀٍ`irۇѐɷiƐЈƋË򬇏Ъ䌖yropzћޠl,:DKab8=FtF64Bt΂͙xFAH6уԑ8)+„­ϯѓ +   +  $?zL3yBmI^dBT^5. :;(MS3C + 4\ + !% ^<6E2,2+%"* %(!)0*$)#7 3 @URQSM~􍑒Q xeI;2'H?PKI.*)9=B??=<|WZwUKLOMIHKO\MGZ,&176BFkQbWFB7%2-6EO̜XruYJCREpn\kuzax}mO2+0;}h/+.byv1)5+&,3&""!(Dw.$%_pyv/59 #$(""$#O$"#"#'&$%$,+.-%()&UG20*+(-@/1='0@W07:?h7CGPԢυ}~{ilԐzy}roplgnmo~q^`jonhaccZ]YTXYTWYVRXIFBD@DCGW}{yrquigiebgdcfhgqgfd___\^Z[\ZVQNTKNQMTSPLGIMMF?>DCDAEEHGH@ENMA=9:G5_];9//4.2[WX[Z[[1V/13=8752010116?FLLKDyrldc]/11/020023883/01-'$!"#$$)/23234213311-+,'&&"%#F,C&*!66:=#FJLOQTVR('&'&%"##'(()(''&" !f! *&"41/#!%(%(.!*%(%FC=153.)$$*)!+&'%""&))'!! $ 41 !#"/("!"$ + "   +      + + !- 1,#! /!$.';( !'.74 !'    + ")"  =0"  +   !(+&&'&'%#'%#$%'#&%+"'' ##!$$ &((,&! #""!&(! !!$!! #! ! !! !%&)(/(4/./)30*&%-:<9'""'($!//#&!$ )"#&  %%&%$'% &#""'!    $ !2053-,2*&(06<<*)-(%(13022--/.+*(#$/$*!)#&%#01!',(#)6D??18(9015?B]B;ZTMZuDMRKQSFGDMPJHLUQE%7#)--Yd301=Nc]it~GJZFYOIek\D-I9/3!&2"*--',('*206;842,,-9 ~ ~}}~}~}~}~}|}~|,~~}|{{zz}~~}}|}|{z}~{}}|{~}{{|||{zz{||~~~}|{||{||{|}~ }~}}}~~~}|}~}~~ }}~~~}~}|~|}~}~~~}}{}}~}}|}~}~}}}{{||}}|||}||}}~~}~~}|{|{{|}}||}|}~}}}~}}|}~~}}|||}~ }~~~~~}}|{}с}|}|{|{|}|} |||}|||{{|}| }|}|}}}|}}}|}}}|||}||}}}|}~}}~}~~}~}~~}~~~}~}~}~}|}|}|}|}|}|}|}|} ||}|}}}||}|}|}|}|{|}|}|}|}|{z yyyzz{zz{z{z{z{{zzz{zzyyzz{{zzz{z{{{z{z{|{|~}}}~}~~~} ~~~}~}|} ~~}}~}~~~~}|} ~~~}}~~|}|~ ޸ǽ՞Ⱦ탱瘐فˌцͷαź´ƅ幵ʼ[Ȯӵӷɠ +      !#(173:<@FC@AJURND:9:@A;56:=ADHGHO[qZYD{KQtq跎]{Մadffczkx⡛Z^Ӟ[i[e_]~SRUTSSTTRPPQQLI@517C@?>;830220-,,,/20.%7%1B<>3&&'#!6?:#%%QPpÎjLA$$$6,08:>=FKPjZ}κտx0/<%3>ȋC.5-0U2+"$SσҘƸ뎛K76]ivݴ򡍇̌㒃ΥԸ۞㝨̦a٠܀ׅ͐ꍘϻـᲊݖˎ稺⩃Өԉnk56)/   (    !    !! ! !! !! !#"!"!!!"!!"!!"!"#!""##"""##"""###%#"#$##$ %%%&%%%&%%%$%&%$%%%&;ѽĢΓͻȽ̠ወŴ͌煳h֬߰遑ܺ÷٩ǣT;?>B%9'1'#!F52&1KlSyC& ! !3""##""!!"""!"!#$#"##!!"#$(**(%$$#$#$%&$$#$&%$%%&%&&% $##%%$$%$&$% &&''%%%&%&&')()(('&(''(()(%&bϻĴ􎑗ŻýǴÀ􅈆Ί􀈟懢ǿ󂆊􅛜δ凂ꀉıӶ않󀅐ѿԶʳĺȽ瀏댕ⱗƼŻ˿︓߼ѹ«ƂĬȢֈ٤͞됌ܯϿˠٳ˩ǭ㎂ɋʾݦЁ䄅ㄇυ妤ʽђʸݙмʑŽéݓ֮¸ˇ̹Ⱦݺ􉹛ˮߺè֗οǾ⑞ӭ̴܀ɀ؏樂ķו郎􄑝ױ߻Ľۄ@쏶灍˲݀ҤʼúڀXQLlbLM[QKMSbW`:_\fhbFEA@=>:60KHL;c*,ebHY<9/29<:J:=8H2N37DGD?CIOOP33^HV[GAW36L>ATLSDK58]OI;JC:8:79J3[OSUJ')",13.cKFjjn\Q"#VTQP=(n1VJMNFCJ|x=AGIFCGKKSTSVYWSV[_NIMHYrg^ZpRYZ[jbcfgijbAJTTOVcMcc`PT_b}{eR`Z_c}~h[bVUY]biNSSSTTTUUVVUTUVVVTVUUVUXVUUWVUWVWVWVWWXWXWWXXWWXWWXWWWYXXWXWXXXYZYYXYXXXYYXYYWYZYZYXYYXYXYYZY[ZYZYYZYZZYYYXYXYYZYYXXYZYYZZYZYZYYXYZYYYXXYZYZYXZYZXYXYXXYYXXYWYXXYYXXYZ\`d]bbcgfcgovqpia_^_`b`_`\]^begc\\`ca[\[[^afghil0LpηUdc?gygذƹeДڒ|mÈn s@cbcccdedcbceide`[Y]ca`__][[[\[YXXXYZXUJuNcpKlW[z*KXZ_^]IGCVWUVV[mvqǙI<"n^_]ade[XZYXWZ[]^adfdcfmsnyt~zxY~iq|`le¥lGYRX\bc_a\RRRQG`qqNOOOQbCw{Z@zxOLI]LRXX[W`ahyjYSC97(374\_PJh[tiyŌRN`?pcGFMq`E4bzJP0"3B(,A)3->DS8,>3-=WE++f3ch.eQANInk;\MKSQ2DM?aJRm8t_@7@[@[l3vN7:'+.5>+W9Kg;4VN1'#@>KUVQQJ1'44_?$&:BRJR=kmVfQml>;J7 A=PX\a >B[b_\Q6hBh]}c{LPNONJHG +FGGFGGGHFFG HGGHHGHHIHGH GHHGGHHGGHGHHHGGHHGGHHIHHHIHGHGHHHGH"IHIHHGHHIHGGGHHHGHGGFGGHHGHHGFGFGGFGGFEDDEDEDEDCDDCDEDCDCDDCDDECDCDDCEDEDDFDDEFEEEFEFGGGFFFGGFGFFFGGFGHHGHIHIJJIIIKJJIJJKKKJKKKJK-LLKLKLMMLLMLLMKMMLLMMNNNMMMNNONNONONOOPONOPOOPOPQP QQQRQPQRRRQQRSRSTS RSSTTUSSTSSTUUVUVVTUTUVVUVWWWVVXVVWVWWXWXXZYYYZYYYZZYZ[\\Z[\]aQbbPF;]ODjTX;7'GNIQNGCELSUsQSDFEbOGF100MYYcgjyzdijdcRXdMQnlLPԹwtfN5sz|oteazX²efHC4C9Pxo234mws:3u-DG9).05793137T{>G;`qssAQO.-,,(':?;655346879887:;:9:=:?BI>E:01M[>NBHwEYTmKDM^LHEDCBBCDFHGDCDCBCBCABCCCBBCmgyyxuqyw{uquwqospkhh~zXHGHHIJIJKML&KMLMLMMLLLMMNNORSTTRQNOQPNPOPPPOPOOQRRQPQQQRSPQQRQRQQRRSTRQRSRSSTSTSSRSSSRRSRRSRRRSYxmgrmcjhhmkjsqsr|mfjdbgjswibknnjebdggjiic`ce\PNQNQST[abexstssnoqxtyzvnjfbhqp]_fj_c__\\YTU[ZQVZXTVZTPRWW^SaTSYPDFCAvHOKS\FMcDimposw<=><;:<>;77;@?6445457239869:6<;;8899::==<=@CC@=;6774-*UPWY4<98763+GJSZZ^addc55653210/..0346999;:;8530.-+++/,(&&..+/.-.,-.4=6,0&G%/-(*"#)!$)1TQ?6)/*.710)-/3=:7AV[>;=BCF,",=?#(BEB:46>$;;2/=/>62F,'450.5051/,')H>6546#&($'&)+&&+1.*301047-,/-'&'1#$$07--.<64KR=:96773\C8AZ2/.VRP1/5.0-RWU?VOS[.C0Q-237703682GNHLJORS967D>52-S@>I19,+2QJDJG>023/-*P9:874-.,OHOM?HEJ7::836.551/.RFN)RRRQKIJRKJGIIGCGB@IB;<$EMQLLK69EFDBHEC9=9=;742121.37658:8883258;;6411407643/20/4QO2724/.1-1.21343378[JPMLFCOT/V-57+.-.35,54590OMO=@I+UQOMNKF;/1-++&"%$*('#@/EQ*Q;J=@EVTOHIIJHMHE#%)./,(,OSACE=B/3$HFGF:?GDGEDFRGC;7!*(IECCDBBAB?==63J*4B'+-9>:TI/%3cM;=+6XNL`[JMDTcaU3:=2LE<6\V^WYTMIGHDPGR +bjbcaMJOWZ1-+A7+-60-/18/5!13973 $%,"76, +$$%$ !#'&%-&./"(!.(+%&++*#%')6?" VF?jljK-?GK;%J?CE@BLBCGDAFKORY\[`a^Y[a_MFGAPkaYUkJJIK\W[``bcY5;ILIO^Mimn_fruw\hamy{hiaahp}Āŀ¿Ƃ\asϱ{z핏شġﻝ蟦毿맖sxm8-H(:AK@D^åOUD/ēޤ龎Pxj`瘕{:%#ҭ̈ĎƋÅσ  +   $?! a1<:ťlhH"Ly644 )#+)32*   1  +! $&%" % :<-'.#  &$;p)"!'?HBE?.bBâ΅ky !5ýqdL?3PE<]LL-'1;6><;=CMYZhIPHJIaTLH,&'?IJRZcrmX_^ZVHQ^LVăfISۋcE0yirb^y[{tL5$09Nrx.-/gyr/# 1-$"22& !"&I}-#%\rtq679" ('$#$!""#"##$#$&%$%%*+,)%*2s[10+'(,4-0*"*DI046?;;i?qA;AI8?S8WXYUSX,*.03:58535610109?CGHF}}yupe022//0//.031--+-,$"!  #!!%'$,./--/221/0/.+(&!#%'##EDJF$(&''$$348>?DINSV--.-++('#"!#%&'(&&'%%"   !(%,34" "!(,&1;=(%'*,* &+-%!#&!,!!&    &!,4" ("*#  & ?  +   +    +  ", #.; 2%3,'*)  *&7;   #$  !!,    $,')+2!..(&%$'&(#%+$$$(&(()$# "!"$##!"$$'&('#!"'!"!! !$!#$ !  !!! "" 1(#!%'*%'%70.-.2,101::1"*/.)+$ 137* #$ +/##" (&+$('($ '$$$!"%###"  $(() !+-;>0<16>PNH=<==8;4. $0/21'(-,,++)5..%10./1.../-)'!!3*)0&.''. s))/5*,8:==6)-+-7-@?#.&*4e5FqHOYorBHJRR?YKI_]LF2474, (!)&+)+(&&#$!(-18;789,+.42~~}}~}~}~}|}}|~~|{{zz|~}}|~| zz|~z{||~~}}}|zz|||}}~~}~}~||{|||}}~~~}~| }}}~~~}}}~~~|}~~}~~~}}~~|}{}}~~}~~~|||}|||}}}~,}}}~}}~~}}}}||}|}~~z|{{|{}||}~~||}||{|~|||{|{{{|{|}}~~}}}|}{|{}}|||}~}~} ||}}~}~~~~| {|{{{|}~́}|}|}|||{|}|}}||{{{|}|}}|}}}|||}|||}}}|||}||}}}|}~}~}}}~}~~}~}~}~~|}|}~~~~}~}~}||}}|}|}|}|}|}|}|}|}|}|}}}||}}|}|}|{|}|}|}|}}}|}|||{|{|{zyyz{{{z{ zzzyyzzz{zyz yyzzz{zzz{|{z{{z{|{|{|}  ~~~}}}~~~}|}|}~~~}~}~~}|} +~~}}|}~~~}|}|||}|}~~~~~}~|{|}|} ^Ҹͱɽ֟״ļɷ񉎚Ʀƴㄊ骐״؉ۚ褭w刞ůԺڈ̾󃎛þϼ        +    +!     #$"$%/?D>=?ADEBAGRSUPJIFDDEEGGDDGIMMKB=;:88:=ADGKMQSPWfq[d{{pRU[gݏܽsSsaݰśXuiclxtl8^igVBgBhNQSTQPPPOPUXXRPG718CC<985101/.,+)*,.-++,,+*=!?<,<2GUQJ=5::6H]O8H(*,)%&&$!Gxzл׃~~XJEKQTMA:===>BGKPXUOJLPRootlƉܙJuW?7FEDFEA<6650.11*'" 1h\Qޏp-QC%"%>D5==87J0`wl;^䕏ŰjckٝO>$0.9+&-̶Ú6ҘJM+\KcL՚^}Ϝ̸̔ʽڭǑ還гߟ˸˜ۣߝ∑¦̚ƶХ%̂挽ֶʕF*L'$  (     !   ! ! !  "!! !!!"!!#"#""#"#$"""#$#$$$#$ %%&&&%&%%&%$%$&$$%%%&;߽淞ұရʑՀ㗱΃ꂪ􅓊kźՀ倶º݂Ŗժ˻I,.)*$;+//-%2.=8[Xm|ɡƷլIH# ! !!"#$$$"!"#"#"!!"##$##"""#$()+*(&$$###$%%%&%'(('&%%&%%%&%%$%%$%$%$%&&'''&%&&&%&'&'''(*))'('&%&&'&(((L]êށ슏ϴϷƺ鈣ؼ̳݊ĸ܇Ъꄓ²ֺçԻƵҹ䄋ݳDZ׽ɹǵܴýͬڰ±Ć˫ˬѼِŬءի֩͛ժ웭څކũބʛ괸ܪ𿛴ϵŎΖܨϴӾ·ŀתȘ޸éʺݷ㶀ͧҩ،ü˵弼÷ᮒξя񇒅ռӼ͹ꄌ訟֕Պ䀫=򀅕ذ̎刞ĵĺӀUTF]qYHV^TYT^dWh=@9/2_RFJRL;JOCM_8W446;;4R@FZWJ@GJNJMSNIN[34@CSWUU][_80M_VIN[74U7YBB=9=>=9F6;:kM@=0&5,*,aDRieeiT-.+\ZG=Y0]AGIICDK~>AIJIDGJNSSVVYWXUW]`CIJYpi`]uWbYWj[^hggY_OEMRNYc\fddUS[fypZH``azzh\YPL]eo\ITTUVVVWVWWVVWXWXWWWXWWWVVVWWXVWWXXWXXYXWYXWXWXWXYYYXYYXYYZXYZYZY XYXXZYYZYYZZYZYYYZYYZ"[ZZYZY[ZZZY[Z[YYZZ[[[ZZYZZYZZZYZZ[Z[ZYYZYZ[ZYZ[ZZYZY ZYZZYZZZ[ZYYZY-ZYZYYYZXYYYZZXYYYXXZYX[\_hjcbbbehfglsruslheba_\\^bded^]_a_]\Z[^`gkmlgeq~hm^ngqvj\Mnןmިbӈǀz[czj^acdcb```bgkmhgd]Y]bb^^`][Z[ZYXXYXXXWVWXYXSqKp`LuvrxAkZf[J|UYZXVVWY_fymk±<(&kgegjnpmf_^][Z[_bgplf``fo|pkrqcd^r\Pccbegca]^]YUUNKQPySl{`aTHxLOOlmR[ZYWuD3W3R:1-A;50?JmzjjqQ|BWKuLEjYVI--+3$##6(I26+,DC0.'7SynG%;yHzUhViWaǤWzyuy]jaRyVKHOnfEn{PMSHLCTBQYB!0=)C16;+?>GdgR5;KBQ2]X("!9E+39"!4D05,BTJ55IfIU*!U.QT]}IH@7%L=/1l/i9:3168Y}@G?.ot>OVP[-,,((&E>64545458;:97:;<:9;BAD%(DHFzR?9:=A=?IAON4FUFEdFZXsȃLNKOHDRWVWKFCCCDFHGEDCCDC>BDEp}vpprz|w{zgnps~ЬaJIKLMLLLMLMNOOOQSTTSQPOPOPQRRPPQRQQPQQPRQRQRSRRSRSRSRSTUTTSRUohjjebeghihmknih{kddbgedkyvibfmpkjjffdcjkma`bZWMMJMMQW\W\`}~~wtrmosqyt}ynhikxryoj`ee\XWVTVVRXd]YSSQQU`TLRRYZ\WTPOOR[OG~{y}wxegediisz:=BCFNJFFGED>@EEKLNQQQ?AB;?@<;:;@DA?<>;72477545;?<<8:9;87578777:87q:=?==<:<<82/[UW+-2A77==7-EHRUZ]135:::75431/.-..014459::887676300.**'&)++*QP/520.463-('*-?,'3971+1B;.5,!"##$+,/483;-N[KH:8:GA:30S@?.(,I='@7.@@:?5>9?=941)5/*-.+1-**+(%?997!##%*%))+-,*.1+$'(*1*61)):.(*2%$+)%/52=@D3,90+HBG*D)@%",F98DM#,<06(B;3+)&##&-5/237!4593" '3;01''*+'&$! ## "&*)(()%)%%#'('(%&&&! "#!!&#&#%:+=$(21,24"*510D@*-0?20JTW "2/,%(.41EJGSo\K]b|ZmU:ysY>f5Y=E=]:=rjo`OFbjx{ULXTdL=I39COPvgmz\VvczU[c:BJWPkOKFE9K^FEVS;VFDZJY9XLK84M/385#T?6;0?>6;83:7::+BE5V0[VTY]14/,RRTQPPJO;:0RV/14;522695LFJKKPPQAME<@12-1JLIS70.QKMJJFP1W4L40B49:8.PY-SLILJB:B9J574/-2811QQL86KXVJRHMH?FHHJIIGECBBB;GE;@G<=,/ULOBK5DCHGUcQYZN[MZKPc`b[__rCF:P[JBBWYWVE5;@:493YJ2>%?>=<:GPJ<:853/23/(3787988?>89<;5/2769;BFA?;4VJR\e4]NOSTROY]cjnp{?==p:9832,+,%#0!JLFLSB-[*&&JJI+8CE?@ED@@MN>hQ#1DIHGDHB89CAA26;'4AJ*-1<7CE6: CD090+22B:3:=:CH1^S323?IZQaZ=Mcq}xrKJ?GQPLZGR8_QIB2cgVX8>;?K2\Y_/RVRJFKE@GQHPkdci_TMRT.0(7C3,48251790:!1:34. )($*.&%#$+%!&'%$()*&&('''*#,+'")*/"/+&)-+, "B8$#O:Kmjf_@IH* J7==@?DSDFLGB@IOUX[^_a]_[^`_@DEPid\ZoUVKEWOR_`_SYI7AIGP[[jnsfgoz~`Jcip|lc[Ypy€ƀ[טؔp̯ڽڶՔ׉ɨ裇~oΟԳΎa`V77@xaF3>b҂㼷,BKBقΊ#=ѹbj㝏훔i   ! ?΀QgxрWڔyR;:-&+'+-;1=_1 0/9 +  +'$!# + +$ +  -!! +4  3),+(8L9D#'*;BA377;Ek7 #þgcNA7.L8C**$$&$$!"#$$%$$&&%$%++)'+,_J0)'(,-/45{:D05517Y}9AEdܸCߝÏv}himpz۱䊎&ײzpownhhekgehpwpg_Z^ejggf`]YTY[_TSVPPtr@@>BBGLSPVZ{{{~|xuxwonjbabagbkvtppf`aetmrc]XYUNJIIFEEDLUNHA@>>@JB:@?ECGCCBDFIPFBvrlmomrnfhX]YWZVZ])*,,1856677720218:>BBE||~xwt543.0.,+*+0431++)&!""!#'%&&))++*),-1//]//.+*'#$')&%HEH#"!+$%*,) 36=>BE&'*-./0.--+'%$$$##$#$&&&$""$&#!!@?!# "!'$!)%!% )5D10#$'0.,%#3&".##$' ' '")'#  "" $*!2*! $',$$"")(,"  ! +      $  '" )!!49;"%=1 #1,:)    +!& (#"&  '!!!(+'&*)%&&$$$ #$(!$&'')() %""#!"!!"'!#&%"##$%#$**#' $! ! ! #%!#(%!!$# $$##!  "!#$!##$#()/4*./)3)3,/749698@&&(,""-!/,*!+'! "!' &!$6 *-&+)'&+((*$!$#)"#"#&  20"/-2,$(*+11:;974.J=@OZ.QCBFHHFOS]hjow=:;k661+,$# *021%*-&'+)((38&6* -2//.2.')/)$&+2#,(,*%0! '(62*.0.78#H<$! *6HDQO9Pgs|KG;HMOGNLGKFvwcPG$.0 NAIOlD[jxA@HQPKXCO6eT&D279-/ !))+'+)%$'""',-=78<5.+//~}~}~}~}|}}}{{{z.{||~~}|{zz{zzz{}~}~~}|}}{z}z{|}}|{~}}~}~ |||{|||}~~~~~}}~~~|~| ~~~}~~~}|}}}|~~~}~}|~~}|}||{|||}~~||||}|}}}~}~}}~~}~}}}|~||{|{}}|{|}|}}|{ |{|{||{{|{{}|} |}}|||}~|||}~}}~}}|}~~}{| {{|{{{}~Ɓ}|}|}}|{|}|}|}}||{|{|{|}||}|}}|}}}|{||}||}}}|||}|}|}|}~}~~}}}~~}~}~}}~~}~}~}~}|}|}|}|}|}|}|}|}}}||}|}|{|}|}|}|}|}|}|}|{{zzzyyyz +{zzz{{{z{{zyzyyzzyz{z{zzz{z{|{|{|{|~~~} +~~~~~~~}|}|}}}|}~ ~~}}}~~}~}|} ~~}|}~}|}|}~~}}}|{{|}|} + ֿۿ㗞怆Լͷ靋͋éℊ̲ѵ翷͔ㄺصYɶİƵ       !         !  *   "%/.''*;MOIEEDEEC:CHIJNRUUOJ[wKPuxrf'}ˠu[F؃ťHteܤtyjx[^ZPHiLOQOLLMNQRUUUQME98>D@76740.-,++*)*++*('$>B!(_YSK.58X\a0E?Q[2@KLTA667/(%# 3Hxļm[ceWKHELT^XOICBBDHLOYaXQLPUYVbXtȳovuxȽϯZWOrBMKLJGDBA=;6:;20;M3OO54*lݕ溡ۭۑ˯U1N+.68ş莠ю҃K擞cXVx^|ոĩᬻÁ鲔ďݑ󀒛拊ҍ́٠yЍ㡀Հ၂ƝѠ΂-1-*$      +     ! ! ! ! !"#"""#""#" +#"##"###"#"#"##$"""##%$%%%$$$#$%$%%$$$&&&%&%&'%&&%'&%'Fؑڵă꘤cƺٍ󅿀ƿٮۭ|SS?):<!"### M709Bp|ɪ˞ԖJ" !!"##%%$"!"#-""##$$###"#%&))+)'%$$#%$$%&(()-032*'%&&%&'&%$%$$%%&%$$%%&%%&%&&&%''())*((('&%&''&((&(&*Q{´ִľö¹šȩƾ⏬ϫĸڂùŬ̔끛Ͼչ܎ީ¯ɼԯЬӿŀ޹ѩюϬ³Ȼх㺎镠ܕ̇Ȫُ㨊ڳׁЈˆᕘ孁󀄌෌ǩޖ۔򕱦ðȭٿͰ̹˽瑈㱁ٷဎųစƘ򿩆ʷȀƼ݃֩ӎ͹¼θ±߁Ӧ֓Ꚁ򌊉ߜWʦ߇ꇻޛϲѪЂȡ̽ЀPTNB]^VCX\^QZn[`86b_^ik@A=4K/22WRKJXKDL^F6.M5216@?=63-11E0Y:IKMDKXG[32JDLW_C>XfeXZXNNIU<5eX5LD?<===fA/AECLFCMH>@SQEEGGKQMVSNYUWW]`BLNRcf]aquda[jb`fYbVYXBFQO`]eghhXTVex|lyFOeLqmm_NOLYitR?UVUVUUVVVWVVVWWXVXYXWYXWWXXXWXWYXWWYYXYYYXXYXYYYZYYYZYYZZY[ZZZYZ +YZZ[ZZ[ZZYZ [[[ZYYZ[Z[Z[[Z[Z[Z[YZZ\\[[[Z[\\Z[%Z\[[[Z[[\Z[[Z[ZZ[ZYZ[[Z[ZZZ[ZZZ[[Z[ZZ[ZZ[\[Z[[Z[ZZY[Z[Z[\Z[Y[ZYZY[[YZZZYZ-[ZYYYZY\c_YZ^hrpgbdddehbdkjmpnnlhc\Z\[[[_adef^[^\^bbbhlnmf^aɫlI]vӢhۚv~‚侠~śؼڸrgȔmd|^adb^^_^cdhghfca[[_cc^_`\ZYZZYYYXXVXXWWOChaYFPgX]O_dgva[\_[WWYg{tƹJ#emmfebadmurmd__\]_deowme_eillQfkvu}h~xr~ɥkja\ffeggebc`_[[\][XUQNaZwTlw|SGQRY\ZUVay\]ISiRfx<1+-E4(7eS1p\ZoU:::9JTJSNNRPVbNZS[ysTZswX^gkkqxZmfögj>,>\|uBv667u{r3-8?M=g.0/i;;5375a}BH>09uAP-Q,,/*'()%E343556657868;==:<@DEJ($G)Rko:9;;<8FKXI+?RIFCZF]gxzdKDDHIJKJHEDDEFEDDCCCDOCCCcv}yly|mJHIJJJKLMNNMLLMLMMMNMMMNOPQTVTRPPOOPQQPPOQQKIJMORSSRQR SRQRQSSRQQRRPRS RSRRRSUUUTTTSRRSRQSUVlnnpgb^^dhhffikrehwpceabacjv~{pbbhnokea]`ih`]`]ZZTMLNKSXXU[Z{yzturvwlx}jdhhiqllib[^VUTZZTTWX]mjleVXWSTQUNOWSQYTQMHKPUrZLKunqrlmjdgffa_dbgos:;@ENKFGHF@>BFGJHLOPN|BGFA=FEB>AGTC?>?:357874;@=?;;59577532354355j7n:98:<:=?;ojeb0/,4666IIF8W@IOS,03589:9866321b`00./-.10478988<911.,,)'),,*RNL+904001').,.B5)-(10,.)'"%('$%,+*.3F5V0H@ARTB:6>:+=4@57K6D>)%"E353//.06A-)-A:H968F*4'47+57.E:/$7+;458=$994-5 "#'#%' !$''&!*.#! #&&&*&'&&'%!(%))**&$ $(#!!&" ! ):C/)0%/3,4?VPD9)!(>97719-2QOUCLZTV2;X]ebXZxv[RNQ\b53?@DHSC`L@K<>;6793QF`9@*@<9;*0ADZ@8)2,)&(#'(-,'&$%CA<<:7551/.')2:94:;==@><;:==@<414243'5152Q.YL.S-332144540.S4552442203ZQOKNJIRSWH.FDHJ0KHJLEQKSRH6?@13W-$#979?Ks66?P_97.)4TN]nZg`npR>F_]PgDLMSNFztrzdvHVN<-3K`qBUh{@FAC>S[TiEgdOM=Wh_O69=6CD56PTNRTNIKLB@LSE VVYai;f`P,/+%683)79;04A3666496!')&'-$#,!%4!'&'#-2%,#"'*)*4/'')),()4-%3!:B4! :Se^[[]=%?!4:7AABOPFDVO;9HOUXT]]Wa\__dcBFJL]bY[lrZUHWQT\TZPSQ8MJTMIJFM]N[XnymX`蟝xQ`nljnu]xs{}ͤ3.Y{u@y3/2s}o) (+3#!_2' #%X~,&$(6t@F"9/!$#&$##"!###%'&%&(,,()5mQa-)&')(57C[804504>I:DPbꅒBwmlrzriifgccinrokbWY_gjfa^VU\YRPQPQQukB<<@?JPRNOP|z{{sqw{|{pjicgh]ipnob]`bciei_VRRJKIKJEDILR_[[TFFDAB>A;=B?>D?<<:>GMgPGG}qiif__^W\\[WUVSUWU)&).4215795234587:<@"%&'),..-.0-+)RQ'&"#! ""$#$%&'(%! !"!FDD"& *""0$5/++77*&$)''$$,+$)# #.!$""" '! !'+$)" !#"!* )&    +    +    + +    % +:2,$$!3"$C*'  (%      +" %#%0$( + + ."&!' +&((((%'&&)*"&)&((,!$"'""$$!'$&(!$#!%&!&+)#"!$#"""  ((#!$&%!!#"$$#! # "&#(')$*2---04624EE40./7;#( 1('&%4""   !,! &+#'$-+*((&$*((''%)! !!#### + $&8& *+$49563982338?773100//359;=?B?=@@BB<,"!!(&  !!"# 33/+.')*+2--3 "" " +5*23$ '')E/5'5D=P6:Fwj0.2AL0-"'A;GWOacqxO9=@EHJMOMD<ACD4)$4-zup˲p\peha\ZVSMILU\XSOLIHGJPR_aTWY]acQ^X[TUWurèsȎp`ZYMUSURLFGECA>DCEHC?:/*,-HU1'&HCHLݧχѷ󖫋MD4#A])7AϿΏߊǭ×Uku^~nFN}sj{a~_oNӶڅߘޤ؊眡ʾ§{ʖ/όݑԿ엽pH9*Z?0#          !!! !""! ! ! !"#""#"""!"""##$##"!"# +""#"#$%$%$#$$%$$$%$%$%%%&&%%%&&%&&&'%&%&&'&SŬބ뇀엠Ä邅叉恁𠟅ҙƾ놌ז焂횦νc埆҂ᷓ㥥áŞ̹¸CEC.   /1.aw»ø楎S# !##$##$$#"""###"##%')'$$$%,((+*((&%%%$%&&(,9G9iaivg+(&%$%&%%&&%&%&''())('''&&'(''(&T³ˮȸŵƼţ󆛲˻ǽۿ󀃋󛰲׷ľϻ̀ʺٿ»¯൞ƹ½攃㋖󀄍˰պǽŀ񄇖֛Ƹªʹ˫ֽͯةȗ߀گ؈׸݉鑵ʹ̹释ꄁ􅐐ހ󁄄퀓̉ӈ郈Ѕ濰㚣ϻş鸽͵ʧƀȹߊҌ‚˿膯Ĵƭώɼ޹žþľ텈ݮ̇ÿ˽׵Չ҉ܶӷ‚̺͟Љȑҭ⯼܆䕚ǎƓ†;싖Ѻځҧ³SQRP]eaJOQKUReoP:=95d[9o==6F44741SMTYLGN\i`bY]11<@><303[J@92?77BXV4>^85QGLQ>:R]h8bMMJB=IU36T5NE?=;;ic[FGQC#/277*)04+Oc`UR\b^?GUF[=*:FEEEDHLC?AKOPH3?L@30A:'3*|f9RB3*^S6n)#>&C2@D(gqJ3=u}4uG=qniw~sF!MJ:/93R9"3J*V`^U[WnE`KdMR\[\_aKBvoJJIHIJIJIIIJJIJJJIIJJIJJJIIJIKJIJIKJIIJIIJIIJIIJIJIJKJIJIIHIIHHIHGHHHIHGFGFGF EEFFEFFEFFFEFEEEFEEEFFEFEEEFFEEFEF GGFGGGFFFGHHHGHI JIJKKJJJKJKJKLLLKLLKLLMMMLLMLMNMMNMNOPPOPOPOOPPQ RSQQRRRQRRSQTSRRTSTSTUUTU +VUVVVUVVVWVWWWVWVVXW +XXYXYXXYYXYZYYZ [[Y[Z[\\Z[\]\][]^^]]]\azdZ@:92W]IKhLP/.@BWAEILOPJDIDEHI[0)>X^42_35SLOQVRU^TYL\S~lUUȴznU\Qqmlujlendlb8+?5xBB745sv70[=CIA130h<:>/A,FIO*6.0F,>C(*/3540>F<3<13..*'8<+''(%#@>:886 ! #))!-2++(%(!###,/,8-'4)-6//3-0D5-253751(2?$$'&;$H?/"6*2*)$.7C:,-+((!!&02++;;>"1*OJ;HFV\HjDN|BmnHeXC142?X#P9JziJwmz\xmVQhlGIQ@vf[[@Wh9Ov^`e^J@QSa:K^hekRceqsCrojGFH8=<=k`/#%$))0)<5:5>@2=57885QV>Z2Ia^^TY.00/-UU-..TN,/E2-,Q.U224425W,8PJOOKRTN,Z6<0.5,1,LR11TGVTUNR01D)DI7ELFA?=;PH70_jK6g:4A3ec]YVURQ^Y`4HQHHMUaC27%7i@PUizuqBKQ__lJ_^SQS=lbIc86?9J67HSMTTPNKJE=;@0GQUdggjmf,,-/7;:,12.40;?, 92!:(',/'"&-*+.(')%"!$-1"/'#&($,3+!&($ $%+%41. +&:[aYT]^V-1A-*78<>@HRKCCMPJ1=MUUU\febcehehRIKCU[ZZb}ahKPMS^^^YVU7:BE^]ekxzfdfswwuYQ[}nhq|.Ʉ̄Ʉ ʄ;ɆʀЛeӛx}|ħ׍η´ҋɘ語ǡ‟ይאՑ؊Nj^g񑑓}qDHZ__ߌϊʴ웎"6X  K+ ?΀萓MA)-#)%mޘLls(߿ +  +  +  *" J  #'%4!w#"!""'>(,!)"&4;<7BFbDfJj}ٚN3 +ÿ½rY:10(DTFF\>B&$33C2@=88DCPQOQ&!4TZ1/W-2SWYSSNNXSWPk]zj][ۓuQaWskjuqxtyt,,1zfBB802rt-#*-.&$c0+ #&c/(+5v@E:%##$$#$#"##$%'%&'--.&+-I\ZO+&&(),483W7V/8716S{:HZb٘ۑzҍ={}qlmr{}}pfeccedglquqfZU\chf]]XWYIHINNRRHFHx9G;=A@NN~yyz}wspgaadnhdflija`b`fkcb_QLKKIJJHHM]nmilSJJMCzu=C?BA<;:=JLIDFDGDBDxokmkcde^Z[\ZX_XUWT'&*.40-245484689:;887jmt|}QUB=85772/01:)%%$!" $)(&,+*)*()..,))(&'))')*,+)()%(+,SUT(('"%!&-)"86;8;A<89,15 %$/("%& + 11+/!%%).05361"#$*()187624#).17((,,.,&9-  +CFdt{PJBPXVVA@MHMNG}tqlHmI(.17.33|GRVl~{sCIOZYfDbaXP@#54%5 #%$(*('%%"&-1:;<<=8 ~}~}|}|}}}|}~{z}}{{{}~{z|{{z{{|{}|{z||zzz||}}|z{|}}}~~|}~|}||{{{|{{||}~~}~~}|~~~~}~}}~|}}}~}}~~~}1|{|{z{{|{||~}}||}}}||}}}~~}}~~}}||}||}}}~~}||}~~~{{{z{|||{z{{z|z{z}{|{||{||{||{{|{| }|}|}~}}|}~} }}~}}}~}~}~~|}|}|{|}}~|}} ||}}|||}}|||}|{| +}}}||}}|}}|} |}|||}}||{{{|{| }}|}}}|}}| }}|}}}|||}|} ||}~}}}|}}~}~}~~}}}~~}~~}~~}}}|~}~~}~}~~~}}~}}}~~}|}|}|}|}|}|}|}|}|}|||}|}||}|{|}}|}}|}|}|}|}|{|{z{z{{z{z{z{{zzzy +zzyzzyyzzzyz{z{z{|{|~ ~~~}~~~~}~~}~}{{|||}~~~}|}|}|}|}}~~~}|{|}|~ ٲޏƷꆌᴺ̻ןƑęپڻkȻɣþ݄                 + !!  !  ! !      ( !!! !!! !    !!    !  ! ! ! ! !"(19CA=CO[ebjb[[UOHC@9;?@CGHF=99>BFEGIGJRKCC@??CHJNVYUQNJHJeLOn|^tğXmTutƭǍk¸ۼӄ̺ѥtSuS^g6HHFFFGHQSRPOLHBAAC?7210-)(**,//0/-)'%!4B6;Um6FYftCECECBDFHGjCJJM<-!Jt{mņbVY[dZVX^``][XQOV[YURMJLLNRR][Zglkhc^XUTRUUU‹l̤j\bQ\Z\WRNMKGEFHIMPMIԝíŁ߹>#,/5=<70(E3J*2)(*9C#;jխΙԕ˒V/  +&'  !!  !  !! ! !!!"!!"!!"!!!"!""!""!"!""#"$$#$#"""#$%$#$$##$%$$#$%%$%%$%$%&%&%$%&''&&&%%&'&'(&'+>Ν󍧩͇鐈ư̸ڬʈ؋܀삏񖲷^Ñɸم݄́ܔΠ˭ĚP9G% <a 3HrmŷΫx[!""#$$#$#"!""#*"#$$)($$&'61*+*)&%$%%&&'+7R|M-(&&%$%&&%&%&&$%&&%&%&&'&%&%&&&'')**)'('(('(('&aȽæɶʴijµϡٯڄѿ·ӽûّ܀ƾɳ؈߃޿ȭֿˮ᭣ݾ̀ҽπ§䈈дȼŲøǾ͢׺⵩˕꫏ӯ钆ヒ喍Қےƾ͢ʱߞƛͺ䂀񇍍ԛҏϟʅƥ􌐍ǩ𠔦шƺـɷ􍎋Ѷ򐡒ϳ؉̵܂ǢýʼՖȿ€񂉌Ÿþ寉Ҿֿ۶Üƾ؀͎Ϝ㺗˿𓦰ޭؗǮՅέĺB葑ԥ냛쇏כȹ諕쇃벥ĻhTXRT_:aHOJWVa9_g?>8H7W>\j;2/1982WKMQXRX&D`ILa33/8=;73/QDMPLNIEB7X[Zbe:5JJHLROWYW59;:8bbY:JG839;<5&*-,.25WTZ]YXAMWWAI9GFEEDFKEIIJLPD3B<6;`=jZa%mty2S>1<\deb~R~%MWG"[ra7G PQNMJIIJKJKKIJJKJJJKJKKJK LLKKJJKJJKJKJJKJKKJJKJJJKJIJK +JJKKJJJKJKJ IJKKIJIIIJIHIIHIHGHGHGGFFGFGFEFGFFGFEFGFEFGFGFEGGFEFGF GGFFGFFGGFGGH GHHHIHIHHIHIIJIKIIJIKJK JKKLLLKLKLKLMNMNMONNOONONOPPPOPPPOOPPQQPQPQQPQRQRSTRSTSSSRTUUUTTSUUTVUUUVUVWV WWVWWVWXWWWXYYXZZYYZ +YY[[YYZ[ZZ[\\[[\[\\]^^\\]]\]]]^^]]_]^^^]dLjRA=42//#;8LAHQDI\aNPUOPUnYQQ\\RCa]\Qkms[^shpym^xranb8.@:tG75kty767?G:5;1lBM<666q@I&I4;x?X-Q++('#&,%($7445779:==<<<;<>A?'*&I&MJs`T88657>FIFFc^G6<<;<;955441141045786688;??wvrp45344*)866330R@GLRTW.1479:;:8856663301/.//2357::654242/-)-+*,T*130670;<<;53<:DC0:-7@?:,*/3AO39+@><<:3`C>746=:>2H,PA2.-'Q-0?&$?SE68/-2D8,'*/0,*-61+,.%%A@>2.1E>2>/.0*#(6$9/5,%$86I%/)%+=<@)37.$+&$&/4*/=:/46376<8>,A0)-00&#,*++"(&%*,&$+,+)(('%!!'&&&$"!$!$.4#! !"! $4737/CL.(83-/-#'&%.5MM+"6+JW@Jjn^XfLVLfH8A)9ET;H_]Ojt[^]VbIQMtnJ=QGGq653dc3b8iV\\[XJJY:a;DOJ.F>646312OB<$??BAB=766677676723:::04464V010QV468;:8;><751222124573HGLIHMONNLPEDZQNP5$?7,85*,^MEPIZGSTO37/>FDRELHB@JJY\_UYZTMOYL;A8K:<,.328><5'"BR;>?EIKEEPWRRZ[XL8) $*);EGGH5+4A>@CCJIEGJ?+>@CHIGG@H835<=>=G.9>;:=J?wJXI>@>KFKR_hrr?=H]I[_B@EFov^DpyGHNYaY^SADNLPufjgd}OZjNO<_0D;$6>JKiwhl@EA]cgGaf[RaND1XY42-RR57VPQZUSSRMIF:=9-KGSZ[T]l9-0.07"7+.-448"59"!"-#06($'+0--)""+% &)')%""/45:2%&$%#!',+ 6#&01(",UT^bZT5:A&*&789;=CMKKHINO?3DOWXV^kbeijeidPQESUTS`odl\MMT^ae`]T34:AX_fmt~fYbkv}vn`^lfz~~i}eXˆ΄̀٤Ͱή˝Ğzѩ̱ŪöٳͿɋ⤇ޛڀཀ句֌ٲ˗ֶۻպTf2eX[\Nrj٠P (?)?'=ƥr   DBw.5 ◼𙦌󝛡͹eglBWT2$'67kB\dh4&H·        B+1 HcJE  5K% *"4,P9M<3)( &#0#'BAHJgNܹ񈒗J6C ¼ÿwP;7,$#5R>J@AQ?.0:*=9>B)33=;@%0/G@DJ@CW_WZZNLOgVOQhmXAdfaUⅱ|Xbuelwĭvnuv,+2tH61euw-'$',!$&e31"!"(p>+,)7w7HE@G>>ww|>Dxplmlbfd^_Y[ad_[cVL(().21*00-463689<<973b_gt|IHB@<:521N10/%  #"%'),-.-,*++,0/,*(($$(&%(*,+()*((++TTTQ%&$&#&"$#$";3=?CGF#$')*,-.-))&&%#"!!#&&'(&$"!"!$I""$!$&&&%# $#*)'),#!-7!&(#%)$?2(!!#!'&,$3 $$1)( *(#!" !  $ ''$$!   +  $!%' +       + + + + + (,  "32*# $  ( -+""%?#;!%#   +! k$&$#5/ % " (4''())))%%$(&*$'+'"(-'0'' '()#)*"(%%#$$ !&!%'#"#"$%$!%"%''""!!#(!$#$###$! # !#*3107-1201(M)/ 2*""'"!# !&!$& )+&($%(%#&&%'%&*%"# '$ $!'"% &#! !%$,)-)+-)((-% #)+(3+-/36%",#"$#"(,++-,(#  )./0!$),34/#! 0/1599906#%%.) /+2",2+*+6)C&,!#29E@GN[fom<:FQAX]A>DFpwX@v~JKLTXQWPDFLINuloplJIJ0/8 1)(?CMOjyhm?B@[^dBeh[PY/!/0)#'#&+'((('&#&$/4515= ~}|}}}~|{zz{z~~}{zzzy{|{zz{|z |{zzyz{||{ }}|}~~}~}|}~~~||{{{|||~~~~}}}{~~~~}~}~}|}}}~~~}~}|{|z{|}}~}~~}|}~}~~~}}~}|{{{||}||}~~~|~z||{|||{{{}{||{{{}}}|{{|{{{|}|}~}}~}~} |~~~}~}}}~~~|}|{{z{}~|}~|}|}|}}}||{|}|} |}|}}||{{|{| }}|}}}|}}|}|}}|}|} |}}~}}}|}}~}~} ~~~}~}~}} ~~}|}~}}|}~~}~}~}|||}}||}|||}}|}|}|}|}|}|}|}|}|}||}}|{|}}|}|}|}}}|||}|}|}|{|{|{z{|{zyzyzyzyyyz{z{|{|~~}~~}~~}~} |}}}{{|||}~~}|}|} +|||}}|||}|}|}~~~|}| ~~ 툂அˇ񋍎Ӛ⤊˸Ծ΅ױ[ĽΩ,       !  !!    ! !  ! !  !"  !  !  ! ! !!"!  !!"!"!  !! !  ! !  !!! ! ! ! !! !!&*2;CDDMN[dggebc^[XPG?><81-,,*),/0221/.,('&$")Iozձ_aSfBFHIKNiTOKJ>-@[pxznfocFMKLNSW[_bba^TQVZWURMLNMS[Z]`emnjb\WVUVWYXVTsla_g¢]e[R`\\YVTSQLJLMPTTUVm|ۛшŧJ-,3A/AXS8)O4CE2L4Y5,2a띒ϵʼ2$U@#K<^kU٥ِүԛ̭m{mcRjjC:EXyolrlH3㔀v¶ͥȔذ΍əXR׫ϳCRM@301WB8:3LGHTW,[XPH??=ST49789[:ZFd;6k9kH8-.37==90($),7+a@T_]VQ=^\OIADEFEEGJG>OONQQ>=ELMPQTWQW^ZXWYXIWaXRYyblraSUbksoi^>C?KYdbY_y`DMmelj`PSQT\ec^c^oiYZWXXXY XXXYYZZZXZ[[ZYZZZ[ZZZ[[Z[ZZZ[[Z[Z\\Z[\ [\\]\]\\\][\]\]\\]\]\[]^\\\]]^]^]]\]\]\]\\]^]^]^^]^^]^^^]]]\]]^\]^]]]\\]^]]\]\]]\]^]\]]]\]\]\]]]\\[\\]]\[\]]\[\]^aeilnkqkt|~~zx|yyxrlggedcdeaWRQUW\acgffijge`\ZZ]_gknhbd`_[t(_}1fXhZBNɎӀȧѧײ΍rYXYYY\_aba^[]`^\\[\[[[\\]\[\\[YYZY[Vr}l^Ɍ\dYabekiecejjflyskrYlV`_behmpruwuqjjmomlidccahmmorx|wsljjkklkjfwjzγڑɷnvgbqoonlkkifbabeijmorqvxaуpmROSfG_eK|^_|_XfWR[bn;//T7D164<6-2cYP:M]>dLuy~=++>&+D3M4/3-=3+,0,1=Q42G2uHzTeeS[ltuuI^nsa|dwO7T6Dm]tdh^lh\\yifA.8&3$"',/1:@@! #+*%9B *DQ5)TwAIE[F-9=DkR>@}b\Q[dNpgqoajhoX2/>9A?>><:867634844533757:wpprpn659?1/-03*6--H=EQRX.145458:8879:96633421-/0/2754664333511+*-NOSOSQE':I3-*-5@FC3$"CCE#$&&%GPIG?@DG9*&'-70:4(5.(;0**F=>>?$&*%&&7*'!$%!#'447-34./:B*2>(#C<@;8B:0-286=.;%@ 9;871%"$#9H'@)%@B>HDC,/'!$,/.,.-.0=%3+4H34:$">=;;@3-'0,'')&&(&'''(($()%(++6,'&'" %($"!& +3=91!/#%&*-(+6!'&)%4)*=6-Q7W]snXOEQHRRE*5+1+0%FKqv_Q^g\mZhHUNb@=MmYYGxu_irNex\pMVbgmORPL4]GT9>UW6)>0'*U?,65<: Nk9=??>3;=74760/7[_Q-40T[.10/-XXZ./LHPQ/0VS-R-S-2-0-0[.03/UCRM.SN1JW@94,-0/.,./XVPLNZ0SH<962HI-<82,-,0@-TC@;L%\822+)./-IJ>?<@8EAF-/1TD9303>221Z56iWI`febdSh3?MJHD<;>H3DC9/Z:0//WGM479959<KSSNB8(2,0+*(%',+,+&!=B@?;961)089;829:988:;:=?>?@=<;7864534565560XN230.//48;;??@@:78989544574[NFFMMMKKOQMPPPWWL>I8@-MU2U/S=%T.,+./0/,,XSFLF=BDEMWUOOKLO[[IFNWSQCBl^9C8E`DBUUGIQLPMPSQOOTUWVUWWH^L5@U((%&290'578?AFJB0ZO1=D8CE>EFC,29;B 0>)+6D<;GJNQCAL/V4AS[_f78;=>;]j2XInkedg]XCLoa~CPZb[c_RJMGMDobjlpsS[@KQeJHAbz5JLTcv=AFF[\eD`jb[N:P:5ZLc/R2=60LSacYS^"'(Ka<6%79,&CgS    +  " !V"J??% +,yu, %+V 3#UѳzfNI95=?=1%EB.5=>=V狆񤄜a:Nw`A,A! DM;614V632-@A=;::<%*B:?G"#/DNFGNF?BRUUXXNOCQKG]oJIuse⬑\g}lkvå˄r}t(1.i}53nzw/'$&&!*(f2-% ")v=-+fu@F*%"##$#""#"%%'((',''&C`_@)&'O-17>87;a-H553~VIuȕюĶ{uix茒 Ɲޗ|uxtz~xknjrsyxv||vnvpead^]gksoi\SS[ffdYWXWTRLGKOTPJGAEKEyvn><<>}z{{{||q}wiog\fbb`osgdbba_^]bZY]cbMF\WMRIGHHJHLJICu9>>?@==<677<@@@uqr7?wvosqgfd]\UX]`[U]UKM)+-2-*---121569?>=:4_[aflp|CGA>>=:431/+# #$*,+-00/,,,..--,**(()&'*))''(*'(+WRQSOK&$&(! ' 309ABF%&''&(),--+.//,,**+'% """%$$%$!#CEGADA7*7#$*,,%*)*0*(#%'.)58=/!!! % """()0,+2-&"! %,$$$"$ (""! %#"&#$    !, $ %"##&     + + +   # (!/$1"! #&A.2,# #&$#%!&  4 /-$%)(((" #'&%%%(*!(%*'&,")($#$+(#!&&(!"'$#"# %$!$##%!'!#$$$ !!!%&#$% !!#*3-&34435+7($# !"!)("#  !#% ' *%+%$%)''&%()&&&%()#"&%'#'&"" %))&&$%&-.#$(++*%$91%"-!#()!#'%'%')()*+,-++*+#+" (#, !$,2/(%+0%/40641#(*.)(6-,5781!!'B):GPR[248;<:WY*QFoljknd`EHmgFOSWQ\[QIJDMDvkxuxtOE*..DB>=yMPXgv?AHPYVJJLKOPT4oPnԌICstvӒ׋hvb~|tn~JkGg}fEWl}=>==@ADFIIHD?>=94,*,/01477730/-,+*+&!MSⴜuVzByLmaPJBoNWhswC?=AEKPSW[`b_[USSSQRQLJMQV[]`fgjjh`\YYXY]b`Z[a\cfhhic؋ppfcSc^[YXWTSPNPSVWX]fݡ{X[..-/-+/R4W;8+//yF:kj쬘Ţ2%B*:=]ɋ𶿃βىŽ֠˟RNhT3s;?#<%W玂ЮÔȈ渎T8^̈نK?o瘪8L'&0!0NlѨ҂,=++)4CSȣF%         ! !! ! !!!"!"!!"!"!!"""#""!"!"#""!!"!!"# +"###"#$##$# $#$$#$$#$$$%$%$$%%$$%$$%%$%$%&%%%'&%%%&&'&%'&&&'&&'&&''&$使¼Ĺص߉ĤӁ߅癴[źɴߔя߆π٭𐢬ί>:;4AͰƿ­T$#$$###$#!"'&#$$##$$##$#%&)**)'%$$%&'&(/Z*(&'&%%&$%&'&&&'('&'&%$%''&%&'&&(()))())'''))(('NǼįҀι˿Ǽϯߧ¿¿㟟ŧ񃋄񅑗һӃՁ¿ũȱżل⸟켷΀硄޳ĸӻй״⨧˸گŪڡռƌą㉍Ú϶܆͎󀔑ԊݿɎꁈʽ߸䣟Ҭ⁈Զ;ĸ˺ĸЅό샲ϮɌ¾ýû·¢Շ䘈ƝِѱѵȾ¿Ʒñ̗ǺһÏ稨«ÖհɰӱÔ膝h؁ϱϡ꧚ŵ¾ϼڜĘмҗ𾠌δ؄Ʊ酉ӀDHP:6^`oXQ]Y^kdf_OU][5;e^=j52M4B;55bR#<00>?^IJ-=Y6147581.9)CP]W^KLHF>GHAqMRNNPKB?NNPX_aYXU[TUMSQ]h[XPunnV_QLY`mtn^DF>KUg]\]j_=Je}tej]QUQT]_[b^fagtZXYZZ[ZYZZZ[[[\[[ZZ\[\[[\[[Z[Z[\[[[]\\]]]\]]\]\^]\\\]]\]\]^]^]]\]]]^]]\]\\^]^\]\]^]^^]^]J^]^_^]^\^]]]_^^_^^_^^^]]]^]^^_^]]^]___]]_^_^__]^^^_^^^_^^_^]]^_^_^__^^]^^^]^]\^^]^]^]\]]]\]\]^_abcgllhkhmrustv||~|qnmjgda_YTPQSVZaefeeiigd_ZY[]bgkl`^^\`a`"r^{c{pSvazz傌|~zԆj\eXYYY[\]^``__]]^^]\\\]^]^_^^]\[[[ZY[^ZslteVuTd|c\qmhhn҇|rlyQW[[\^cejmpuwtoklljhhgb_`dglnqwx{ywqpnonmpurjlqirutx\Svz}wrarppnmkhgddfghlpwy}~|ϡN}nPPIKLZdN[ZOUP`_y]v5+1O"5795.2)-0Y_zHCoizPASA25F+2-JVY&6N1?83aJ{K.`C2G7]tfJR%m=M|1`?iS;/93?w5ee7TM\ADT-0*.+ 39989<9$*-*%'52-mL( :>9M.E<*M_gݿzX^tSzXN|liE}POGl8OxE8I804;7R:SN,NQP]#VJkXXzqrruRKJKJLKKLLLKLLKLKKKLKKLKLKLLMLKLMLMLMLKKLKKL KLMKLLLKLKJJMKJKJKJJJKKKJKKKIIJJJKJIJIIHHIHHIHIHHIHHHGHHGHHGGHGHGHGHGHHGGGFG9HHGHGHGHGGGHGHHIGHHIJHIIHHIIHIIIJIIJJHJIIJJKKJKLKKKJJLLKKL +MNMMLLMMMNMNNMMNMNONMMOONPOPPOOPOPOPQPQRQRRSRSRRSTUTTSTUVTUUUVVUVVWVUVVUWWVWWWXWXWXWWXXYXWYZYXYYYZYYZYYZZZ[ +\\[\Z[\]][\[]\]^^]^]^^_^_`]^`^___^^PotYV/,1IL=?50A;9:9=MJHLIGFR:7SEF?B}x>S6<'CIOLOJEGNYTURGPHOIFQeAdemZχU:ttowZmd^cd72D1dcgljrvu359644/41iFH<895zDN',BHA5?NHf8CL7ەC DDDEDEFEEFFFEFGFDDDEE_ykm~}~|ŝzLMLNLMMMNNNURMMMONOOPOPPPRRSUTSRQQQSUTQPӇVVRSSRSSRRSRTSTSSSTTUTSSTTTSTST +VTVUUTUTTTSUzpȿXV_`c]ZaZ]fegaZ`jomrqrn}r[RVVXY_gkyo]]ayse][c_dc^YRVX_[YWRUP}GKHvr}}{}qqorpnghghmjtuoghk_R[qo^__YT_^YUY[[PVOVYYWWRQOKJMW[OCKJywsnmgdfjhmjlmwh^b=ADID@DDCGKHNNNOLJJurruy~ZPJKLLGDC@;731/-*).264699;??>>?:1+)PNMPMFESRHFJ+H9%(&#!#"$%##"!##F@=@F+/44?D96/444./1/2=J?IJ;?D<(8:0+.*+11;654/%.65&:2?:0+.% @5:5@ "%(!'"$$"#%')-+*==,)./3.3524K51CJ.,7:8*=='@;6&;%5%.83%=J,5&0G=H,/ '!#!)&-239./$,8A@2.?C3,54NDG*+E2$EOB:;M=6L00H?11;)::;>???0<=6779X7KU4112Y-121,WV.-./.:FTM4[UTT-/=3-PO.1021/.45D?OL6-I;3.///3/+KDN/TSNINI*-*+-,1,RH86>%LMS-XURE@FKPPMJKPWPF?BJHBCJC?C@AEED;>O,0XH?:77E94Tf_9<3O698559>==<42379JG6@@.0,*+)(((+,.,,%*>>?<76406:<>=:6;=<>64/22-,11//1218788:;>EA=:88:4241.115T?DJJKNP?4?O_^VTKSIB,23[I+$60:1---?124/WH;H:P\URKRWSOMNMJJNQGLJD@:KIE>9JMGKJVLYXSWMUaV7GS;]IFJNNUT]QTJ;M;Z*'#*(47>$%J9VM6GD78//7:6.HJMR639Q\b4775;:=e5RHJhJVQKKHlMDZmDAHW`cX\]VOIJzofgwfmsuzGC>JG8.6|CGRUuz?FLZa`U1:?mPGhL64GQFK>2E3GC9/,,Y7>FD91953;^LSSX'*. 57A30636<586-264"95!4 .)$('"-1,0&$$)'''(,,)!"##/2/(,+::;  ,AEU]UD8")&86:6ADFRRMMMF<;RW[dkpki`b[YNUPYdURKlihRYIBPWcjcS;85BPc[[_qeBTz{|g[dbhptoxszx˅L˄̀¿Ȍ܅닠ۓnmty都s~{uЖpYMrJmƾߋӓ;MtTK>hD*AcЎ߂4a􌌁օ㐖э㤂pHߴ?*A +!$8} '!L#29#%-w͸҂:G*"">*'!%H4)+     + + = + :˦);iޟ57() N1Ҡم얗wD5393TCV@";49eԄΛvnۚ +bĿƄǀļ}uRK$"EL98-)<96513E@:>:96?*&DBE?DAA$*;BGCDB@AFQLNOIQHNJFXmDyvv^Y>tmtbvrvv+!3,dqihv~w*&& $'+a/% '.{=,+nx@B,.'$$#%$#%%$%&(()%.+(%'ZZG+))OU335=928@3K452}yUüQɨvzy鑖/ឩ컚˗qq}}skifjklwxzyzoytc[_]^]`fdjpmbSSVkj`YX]UXVPLFJNVPKGDHG{uvnw<><}~||~{}rmx~rljoueecidc]_`^`_ed_WWZOCI[YNNMIHNLHEJMM@A=BEGC@<;;78:AB:hha2:?~ttohea_^^__^^Y_ULL+,.2.+.,,//,/37=><>o`[Y^_bhF=:A#%%%&'),-*+--.,/.-+)*$## "$#$#" "$!$#=CAC?<7>>7433%&"!#* #$-.$" '0%/2&+/&"%"  "$!   .%+Q !# ''&  +  "!&(# 4,('"   !       + + + +   &() """/",48/6+"  +  %   (## !! '$+)((%$*%&'##$'$('"+'(#)+!$ (,(")!'("!#%&" $"#!#'%#!#$"!!#'#  ! $& (2/('"' 3   +  ($&&()*! &..**#'+" (! "(&&#',)(&&%#"&)"###"#!"0,&,*,%--*,$'1,$+9&$&&&**0(-&'"3  &'#&3)0#.2&)!!%('%, "-2,4=:-&#./))0ENU.022979X*>CKfM]ZSSPoJ@XsEAHPTXPXZRLFI~zor~mxseX,(0DF/9EMWWxw>EJX][O29?<96679<>CCEA?BFIJFA>@CHNUVTWNKLNmfl{ɷK=lsEmt}ß׷}eqv_}Yj^_PBdm;:=ACDC=;=<950/5;9;=<8864221/.)F@bǽņ᠎tupVMVSh{ڵ\pVh>7:!'ƶQ@!,䝖Ҙΐ馔ƟHhb6P_3 64S]F憘ꃐ焊ҘߎƭېD(4ըדſʭ@ $6GԾŸY"1=/SȂW'          ! ! !! ! !!"" !! !"!! !"!"""!""!"#""##""##"""##""###$$#""##$#%%##$$$#$$%$$#$% $#%%%$%$$%$%&%&&%%'(%&&&''('&'('(('&&&'(')'Bõ퉕Ǟ陗֥ĐǬ테z«Ճ도҄㝲_ړ猍ݷ̹ͻn#8:F/+\쪋[*#$ #$""#%%$$$#$ #$$%'***)&$$%'1yurL.+''((&''&&%&'''&'&%%&&'&%%&&'')*(()))'''**)))H}úƹʼǽÿλ¬ާЃƻ굳ބ)ƲȿʵՀչŻ徵̬녀Чÿ򅋓焂ֆۡ˵ξּƵ˳ȬꂚٴƵ¹Ţɺ֘򀏧Ԧϒ݀Ύ쾘ͺ›Ų؀ѲĢΖʂؑ󂄆҆͸΂ϳ̚ʿ窋ٺúɻݰ񈌊󂌆Ѷƿ¾żĺįڿŽǑ摛շ𪅬ӵݩퟪ޾ꊔˀ䃋󣅵Δ̳݃ȹ؃Ժ狘х1䊛㘕֘Ņ̍˻؀LIH\8`W^u[[_^h85fT]]`g[h^cRc52U:=731X2]>*3ZNW>;2<`825;=:4QC4De>V[KGWkL?V;<`LLNV[L9IJN826H2F=9EA\`gGJ9[;jimrJ888=@!(/I>&2B1ZBVXSBg8K15IGF?BG>DIQPQMKJ=DKNP^gd^[[X[MNLM_^_[enl][ZKNR`fi^ERIEOh`VXmcJD[jfo`RXRR\_T_[_`i@YXZZZXZ[[[ZZZ[[\[]\\\]\]\]]\]^]]]\]]]^_\]^^]^]^^]]^^^] ^]^_^^^]^]^]]^ +_^^^_^^]^^_^]^_ ^___^^_^_^__^_`__acfc__^_]_^^_`__^_`^_^__^_^_]_^_^___^_ ^^__^`^_^^]^]^ __^]]]^_]^__^^`aegkroecehklmpw{}~~trpnhb`[WTSRSVY`bedbeffd`YXZ]`bgjfib\^_~TxYs|f`yz喽؟ߺ~PΌjZ\ZYZZ[]``_\\]___]\_b`ba`_^]\\\[Z[VagjLwjxͧm`lوr~to V(AZYYY[^`cgjmolifedb``_]^adghmsuz{yutsspnmqwrknsuwtrvxÌyitrhqppmlkifghiimpwȏ|菪_kkvՀuUSSSV\}~al}gW--<:*3J>+2&:/LkwU[X?]l)7),4>'40U,&+HzeET|+L1?AR=/Zv~"[V{oNxZQnNpfLRPJzLLZOux@Ffe;Z,JY330[ee%((!)*)?>?!8#0,+,23Y'ERSJa\bZRMNZ+ekVIވCRAv7ucsLKKLHKMAId@412fe_NJQKGN@?@<=>@?<(0<(CHLLQMJJO+01YMHEMOQYtYicdp_JFZ|pxq[~pca^cS67@6bylBgis}s34822/.._9IE>E@l~A'),;nuAP.-+,)%$0%%?48::;;9;<;@;==<=APCI(LJ+Wu[C5h6]n;:BQ`^a-A]9?RD|ZDEEEDEFFEFGFGFGFFEGF~nmxzr}||cjLMMNMNNRONOOOPOOPOPQQRTTUTRQRSRQV|y\YUVUUSRSRSTTUTTTSSTUTSTTSUTVVUWVUUTTTUSTSSVWnqnb`TX[\ZW\_YZ\ccdbY_giqponyt_TPSXY^etzob]bokedb^`ad`]a]aZVXRTUNyLIK~}n|uxuojqvmpmhoijifqqinicW[kriYUYVPY]WSOSwecYWUQPLINJQQLKBFPQywvpokhhiilimmpg_7?CFKE@CCCEHGPQSTONK|sptrrw}BJKLMLGFDB:600/6.+0864688:=?@???@<;;9976540/,-,,+-..]\jfjqssq8;?D42540,)2.,@?IQS-0223476655:;8;778752011011..,027DNQD=6/,..,+,34QJGG(LG#"" @ !!""##!!$ED?<;@7CC99877?A36!$'#%'%)$ !"()00+**''(+)'+:<1<73/-37B*'f*A2DIlL:sWxxlCKF&(0C)4B7:GdsrddX^Qhce`JAM3Y)Mj\sw[a{oZYbEHeuoqrY`UVQ9`PLFUW>HFC;6'NM2SAS.A 65:<@AA;;=;8;47W6CT843.Y0210+XW///0S"[W2\VTVW[@C0+XJT0-11ZY1XZSMOND?1C<44U?/2/^RRJWPJKPG?+/>@LQA9:11*WNDDGIJOAGC:2/++,1/,G;>CHGL.X<88<>B?4T^:[5858:99;;<::>=6@=>?><;9<=8568:<::87634331541242345676:;F?8558;8751202442X[ZQIQRG:7CIJLFRUOJXW60=8'J5QVUI14/J<83>BUKNSR:.@E>CJDFFG<9S[MG@B>b_D%-\16??NY]NM^bbg=ChUl:4<>=;8;Q23D8I]3DGBCGHHEI:78=#4;K,0:8CFI=BMu*)bH2HHao568?AAd7[IUVJQBBQ\AQF>XDHECM`dQSWZTMLGyxutKXCH>OMX*vH\fqAHFISdj8=C66g>V0=CLaS6gC-"*).21/28JGE^[TO]1[MRX+,(4627G5685;:0:9:<5=65)+&)5&,%()!3*.&#,9( *.%&')("&(!% !/25!,:9;=$   5,OYQ6-0496:B?HPSNNLHE/,$E蔅zjW)$#6Ԝ+¿}w\VJH;3'=<452/15>898787<$#<7<>?=;=?@8 '3;A?A?=@C#(*QNIEKMOb|lفrg⁓eMJh{mn`uqouX)%20_sCeivs)$%#%&Y64$"+/e9(kw;:'#%$$%$!"$$'#&('('0(,)&.eH7/U,Rd424?NFM%,I55;o`渜}w~yjU杒vmuz}}rhbehkspwzv{xvpu~zse]YZ^]]_gkhaWUZeb`a_[[XXQORPXQKICEIDxo{@x;;;96/+& $#$')+-032//01--.,-,,-,)&$%$##%%$IKVPRWURM##&( &#"339;=!#%%'(*+*))-+(.,--,+('(%#%#"! #"$*+,($ !"#$;;956-"&%!!!&"*-!##" ',"&$"!/$+&!''$&!!%!!&  $ &,##&!"! +   " &(-- + +         +  +   !'#%$"!((- * $.017 1(%B+" "  0! ( /*# +  ""(#-')(( *(,&%(',)!&*)),(%&$ '/''#*&##'$$%'%!! #%)##&$$"$&#$!(#$&$ !5 !$" !$$  ! &(/ -),*,3, #"&"6 +),,(&*,' "$$% '($ ((%"%%"% ""!!$""#$&,'$ 20 !6#"#'.1-'3;69"#5.<  ! %#'.B0 +  ,/31386655*')0 #&4#,)458/'&N;)<=Wd/03;;9W,EDUTKTEGT`BL?8TCGEAIW[JMSSNJKG~|}GD+,1GFF2Ndlq@FEGO\a6;?2$,D%*#*7-- +  %#".+)(30,14~~~~ ~~~}||}}{zz{|||/|{{{|{{{zzz{{{|zzz|zyyy{}zzz{zzz|~||{|}{{{}}}}|{{|{{}~}~~|{||~ ~}||~~}~~~~}~~~} }|||~}~~}}~~} ||{}~}C}}|||{{||}||~~}{||{{|{}~~~||}~|}~}{{||{{|{|{{|||{|}}||{|}}|}~}|{||~~~}~~}}|}}|}~~|{|}}|{|~}|}|}}|}|}|}|}}}|||} |}||}||}}}||{|}|}|}|}|} ||}~~~}||}}~} ~}}~}}}|}||}~ }}}}}}}~~~~}}~}~}~}~~}|}|}|}|}|}|}|}|}||}|}|}|{|}|}}|}}}|}|}|{|{|{|{zzyz{z{|{zzz{{{zyyzyyzzyyzzzyyzyz{z{{{z{|{||}~~~~} ~~~~~Ё~~~~}~~~}|}~}}|}~}|}|}| }~~}}}|{{{|}~~ ͻډ뾀ݳ볼áՈ쐊Ȱ昔΃ܦә̭݋۸򍤓Ⱥmжļ µE$  !  ! !!!  !   ! !""!!! ""! !! !"! ""! !"!!!"#!"""!#!"!""!"!"! !!!"""! !!"%/:<5)#"!""!!"!"!!! !!! !"!##!!" !"!"! "! !"!$%$"!!"!##$&(5@JSLDDBACGHINW_diaVROHDB@<:8889<>A@DC=AGLJGB@BFIMS\adSKNPPi4Z猐u_b\vy|[΀넏û~mjNxo{bfoa9[X<]8;8359;<=;78<;8;<>CD@??:78:85421/F3GΣɛ䔹ѰhOKe닆m_l~ғkde@5569?BBEHLPOMJIGDAAABCEIOPV[`chjge`^ZXXWY]YX[[^`abcb^xmwڄYbb`\\YUTRRTUVXZZb{܂Ś偗ljO;[47E3xyֵ݂ҫ3?5{o."xG541 .mʋɬӄт󄙇31.M#()#5)..#Iߋgš鋂ťꡑKGG3e(AŇűʪ ʖϳ@,":9EsͰџHϤǭG)  +     ! !  !! !! !!"!! !"!!""!  !"""!"#"#""#"#$$$#"$#$$##$$#$###$%&$$%$%$$&%%$$%%%$%#%&%%&&&'((&&''&(('''((()(''(''())&3ݍ鰏̊צ靝ؓ߈ᦻ]₇ЖǦ򓎕ϻȻɵN89:Y+C˫䥚G$###$#$"##$$%%$#$#$%')+,*(%2&%%&'/pvx{~xwP8/)'())(''&&%&'&&''%&&'&&''&'&&'&'&&('***)))('(')))(Xt¶ò˶Źخ݋ƹþľƭ񽶻ۍ˻īʹƱźҋɹ˴Ҙу׎Ѐگ̈𹽚Ժھ슎ͷгՠ׊Ϥ˽⽽ݷIJϵխ򚤙Ӥ䌀Ԃݦթ١ǎѾߏ떍闙Ѳɻ〣˭당߄󅄇ףǶ듔Ӭ౺ʍр㈠ϵسʰͅ٨洇֫ÿȽ΍猇Ǜ˿Ԟǹǻșݍ溩еÙ僻스ȱݙǯQƾͦƚ팑⚖ڡ˧ǾО⠫ۀYTLMgkSNcj_WW`ph_\YWf[Jfc^8W443.;94//XG0@+4gNNGEL7Z724;:7/^=7#%80KWNU[J@Z;8UNNQU'2_Dko9M5HFB;@@;lhk]1.D\jdqJP78?D$*-1@3;N/>=PRTWaK;5/:FJIG?:@KISVNNNF>IKJSkoec[UXTOOWR]bfblkqge[TIXXbW>[S?Pie\TkhOgpz`ohMRRXW_[TZcdhaFUYZ[ZZ[[\\[\-]\^]\]]]\]\]^\]^^]^]]\^]]^^]]]^^^]\^_]]]^]^^_^ ]^^]^]^_]^ +`__^^_^]]^_^___`__^_^```^^_^%__``_``^_^``_`^_```a`_`gnqkb`b`_`_^`_a_`a`^_^_``a_^__`_`^``_aa``^`^__^_ ^__^_^_]^_^_`_``__``ejoskbabcegikpx|}qrrmkda\[XVVUWY_befadgge`YX[^^`emqse]^bbT"uamaqWpiymxÒꆬȅï̠xt݇xmqt`Z[ZYZY[\\]\\]_`aaacda`_^\\]]][[[\ew^x^V^eSqls\kHlckzsupʿ1XUUTTXZZ^bdfgfba_\ZYXXXY\`cimpu{|ywuspmkklqmlonprqrru{pzՀ_jprpnpnjjhghhjnqwZy}mrupq~q[T_mTj_SHdjzwDv>L.*c@>#@079*3=)7Uy\{W[Ng35D3:'DEJLL`fh|Uj_4B9(%4;^C@_s4=GWgunUI>i|D_YHHKFl>}CC4eZY4W6/bc@%!$# 3#7>;% &/&-/:F@+PB]Abr{pJfTUhiGgD/w`C4bktpYz ntuK5LKKKMOztJZ560LHB:=_DNxdJDT9JJLJRdTMMLMMLLMMMNM +NNMMNMMMNNMNMMMNMNMNNMMMNMNONNNMMMNMLMLMLML4KLLKLLLKLKKKIKJKJKKJJKKJJJIJJJIIJJIJIIJIIHIIHJIIIJJIHIHIIHHIIHIIIHHJIIIJHHIHIJIJJJKJJJKKKJKLKLKJKKLMLLMMLMMKLLLNMMMNNNMOOMONOPNOOOPOPPPQOPQQPQPQPQRRQQRQSSRSSSR SSTTRTTTSTSTST +VUTUUVVUUVUVVVWWVWVWXWWXWWWYXXXWXXXYXYXYZY ZZZ[[Z[Z[[[Z[ \[\]\\\]]]^^]^^__^]^^_^``_a`_`_`a`bZxztYc87BOM>@RC>n889<:@ECFGEECF1*F<<@=;<=AG.(1.rwCN()8nqCR1..*'$)-I'#?<<:<<<>=>C:=?>@ELFNOMJRdq0gagd::>EQat7'{2=RpdpDEDEDEFEFFFGGGFGFGGGFIEFFFEF~{yvtyzŝvMNOOPOPQOPOPPPQQSUUUSQ(RQRRYՋzg]VVXXWTSSTTSRTSSTSRTTUTUTTTSUUTUUTTUWUWWXUUUTUUTSTUYoja^^e`YX[YSYZYWXWbegh[`ecjqnisrdVUTQU^esyxqigehiinf_]^_`Y_ZUTUUTONP}OHJw~xqtvjglpgacm|jlcmypnpi]\fmk`XW\WNQPSNNXdVSSNKRORMGHRGHGDHRZO~zzonlldgiihjiocc:AAFKC@CDFEFEJNVSQRMwtwtnovBGHJMMIGKHH?;5213,-58769;:<<=>=<:>:;:8575421/..-,,--*.-abhlpnjk7210+(0C6*)++','$#!!#"!"#"$##%#!$C<5;N5M (&)(*(!'%#-&! $(',44D;6:/1DI:6*23#$=:I4$.##-)8+,/098!0(FC&(&#-/04$,4#$ 0),'))@?1*!"',.-/0(0A+("J=;+.&"$&64.1&"13$$!"&$#0, "%"!! !.5'! .$ &#(5+''#+ 293$!9-A>R_RFjMcfO9O,(?@Bg;@9cNQ[ZPE9>M|}biyywUTPLOd_T`Sn=VFOB3JWJIC5FT$P<7;BBA<=<9::25L3(D=4/W.4242.VW0//14MZ/01UVXTN+X,/ZAM_U.[PYFS?B>MNIKOQ6334.-/H7VN;?QBFG/%KEKFF,S+7450.SH<886/[/4433WR2/34CG@96153 >Y9<&""=//('&))*,/*)*' 3<:86215::;;679;<>@C@@>>@?A<46:98<;9968?=74345475688425577888;::E?697:9<854111320//32MIJ>57TCRUZa^bYTPT]TTNG/@PT*4/0897-FM,OMS.3K.D71=a`]cV`FL''5`=<)6;5:AMQ0JR5LZV03#&4H=ODd2FVgXWFWFEI[y?FVWG9tDDCJY`VML[cKFM{rz~t`iH:bOm,qyPIZvDDFIPnk98DZGE`7A.*Wf=;C)46944660./985 +:VLMYCF0PZ42-*:<--=?6328A96665>5+>96&)%&2!" "%3%,&*.' *(&(((+$:,"%758/0<6?($  !5ITT*0'%>";_I6RK5+)E:H~XKA#)*.89x\^/)8LJ74D>;k5101/5;8988977#638<;98776,8>AC;99=A&'KEULLMJ`ntfYoXSRzmo_xwtvc.*54]Ahup+"$?&"Q85&.1t}9('kp89/(&C$#&%$"##& &)'(*.+/.+)2@rY,^U\^5237?V[f$a.:>m}{ܪ}{΃~֓Îzx|vru{yt}}zrg\eglwotvnswskpz|qi`^[VW\_gkke]^^__`gb\WUSRMRNMGHGFCDItG;ss|JSFCB>8=:<955>332Y-.6?=mqqrikgiacb^[YQVLN,..13/,//0-+*,.679<3ITERGUCFH\x?FPM?3uCD@IUXPGGT[FFM|w}RI/,YCZ6VRd}DBCELd`44=F1,?/9"  *#&/%$/5~~~~~~}|}~~|{{zz|{|z~~{{{z{z{z{zzz{z {{zzz{~|z{}}{~}}~}|{||{{{|~~~}}}{|} ~~~|}~~}~}}~~~}|}}~~}~} |}~}&~|}|{z{}}}|}~~~{|{|{|{|}{}~{z{ +|{||{}}|{{|}~}}|~}~}{{}~}~||}~}|}|}}~~}{|{|||{{{|}|||{{{|{{{|||}|}}|}|||{|}|}|}}|||}|}||}||}|{{|}|}}}|}|}|}|}}|}}}~}}||}}~~}||}}~}~~}~}|}~~ +}}}}~}~~~~}~}~}}~}}~~}|}|}|}|}|}|}|}|}|}|}}|}|}|{|} |||}}||}}}|}|}|}|}|{|}|{|{|{|{| }|||{{{|{zz{{z{|{zz{{z{zyyyzzzy z{zyyyz{{{z{z{|}~~~~}~~Ձ~}}}~~~~~~}~~}{|}~~}|}|}|}| }~~}}}|{{{|} ~~~ Ӯƾÿվįηǐ啕밄ۢ܉͉aȟ̿ƶo!!  !"! ! !"!"!! !. !"""!! !""!"!!"""!!"! ! !!""!!!"""!""!""##"!"#""#" !"""!!"!!"""!"#"!""!"!"""#"#!""$%%.@CMY`ki]ZURNMFA?=<;:;>@AGIDHPMFBBDEGKLSZdeZUSUSIib͟‰ݠ``Qviݸہu·ڊıрsxci SVPl7598225445338@=8;AFHA<<=:99;9520/-H%Jc뽤xlowq{owϢ|nnOA54458=?@ACDHIGEDB@>=<;>AEHKPU[addb_ZVUTTTWXXTRRUW[[][Ywmل˒v\`]]Z[XTSPORVWZ\fbd⃕s]v^0//#6ض̇㵺0B4c<;2*'((''&&% &&'&&&%%%'('&')*+++***)))(((&>nùëҧêͶЦ剨Ź¾Ŀ䓩倀ݭ񂈐􁆊Ĺʞʳ϶̓ݸ׺Ǫȼ̙ÃހŃѲՁǷ惺йźԩɷdzƵ䜠ĐƺˮÝχԭ└؎ꅘ׽ͳ∨၂ÈǕ赾ܻƟԨ՘􇍐ضрǿȮ½󈌏ڒ±뱉䥣İŻżӺϾ͐򒩆¸垾Ҷ󂆋Ө뮂巳ǠĹԨʰۚՒ˵܈ըPŽ̮ك冕Ʉƣǰ㦐ƚݘ醖bVYYY\XEVipYSQ_`UX\[W_YffagE77450;:602`G2F6L:87'-Ka524761X^[h+$?OT[[YJB\70SQSTF>:jgbe@6.[WchM859A$(-1I240,1EHV4O\XOD86RLANkeZ_fiR8,O4H4#Gdf>6202(=HP8=!'8&-l6%"FEO]*8<68?QOHBIIONMNMNNMMNMN ONNONNMNNONNONONNOONOONONNMNMNNMNNMMNMMNNLMLLMNMLMLMLKLKKLJKJKJKJJKIJJJIJJJIIJJIJI HIHIJJIIIJIIJJIJKJKJKLKLLKLMMNNMLMMMLNMMNNMN +OPOOOPONOOPOPPPOQPQPQRRSRRSRS +RSSTSUTTTST UTUUTTUUVUVVVUVWWXVWXWVXYXXYYXXY ZYXZYZZZYYYZ +[[[\[[[\[\][\]\\]]\\^]]]^^^]^^^_`a`a_`_abaabbbabgytpV_;3CNGA>?D=ln78==?>@@DBBEAB+J@7?<8<>D),,%-AFIHLK*KJR2+NK^SNFdli[ctwuQTG~ur`fdgYb_@9Hsw|~}<<.6. I212DOFLS@mxCP$)6m~K-3-,(%"&&K'$@;<<=>@BB""DBA@CHIKR'(KDIZ6c`_l9TU77=A732<@6K;?%HIKUN=3.1**6:0143.')895?K@C"$>D99P71<14:5?>.4(6'0A74$ :90288$#$#*&'./,7*&&',10514487.#%-,$&*.A@%ED+/+'2/@4@6& -(>;(3+*=# "( $'%"!*69(/1FQF*#7+/0*)&*297%2CF%#C52.)&&&0E)'$#-#'!##%&%%'$$ $##,/$&!)*4)(1C7?3JP))8V9?BGaJKCtUf_RY6KD.H[H9K,Q=GxhSZSZpzNUG.]I[LPazP^TICL8WfW}~fVoReKKH^OExqHED=>A>?71=JFB:4?BB>@>:<<750-3+9:2..011.00-[S..1*1ZV1[URT:C;VQ.YMN.\WPYQIK@E7,OIPTT40/9,0,6ZYF7MYVK2&@CRTQUMOL7751XLA@@QLOV6H<]-/+/*-+S342.SOSEY.101-,+SG?.TGJQRQOJDHOKIHJHMNMGCDDCBEG9BDGD=C<==DDDKHNWICB9I"W2448;;89775021WZ^T,/820V2[1116=S5/2)(9=B=W=-11/4H*('')+***(()':?<954126;9<;:=:;=A???@AA?;;966;=??<;:7533408767781.879:7839;;<97D=99;>;7155320XW-0.XRJADPUVT]UHLPSPGDJMQHHE9(=/4S+9(BPP+NCQB24IA76X8JB9KFJQ>1)&$%&&%#D&(()N!#'&'(&-*&#&(-81.EWBbI^d>N0!'&))C%%%&,51@USK$B<:DI@FMHG29=I?03899BJ<<96Uh-9/,3Q>M;>ABIAQhfVO\RHNhBGOZ^AB@DLO[VPL[`Q?BFEr?I]|Z??\U:)m|LRW^>GGNL^W?=QNaL<@Y=,3c9U5Q=+668:6-,./68#PS3&>B;;ʒ}?4.))5s킢#¿逎}wZ_4)@< ;?D*#FCWOKCt~cd|STMtvpxvwfoi:+99e?s|9-$B'$*U96&-:6n7'&ix<6(%%&%#$$$&(*(*,,/1(*;wH2]WZe345:l3Wl8in79ogk}ɽ +~}ututtu|yzriadjkimy}quxsiky}om`\[ZYXX\^eljc[X_^chd\ZYPQQOMEDGIGHC{wrur|}y{}}||yznpt|mc^^`\acaahab\`YU[Y\YPM6NTYROMLNKCCE?;<==;v}FG>HH::<6<:487350-005=4faclhlhf`cgb_aXUNN),.141.124--++,2476:gjffgec]//../03765960Q<%&&'''&'*+/.../0.+++,.-)((&%#" '(#IPSVV(KK%%/,!%"-/(93:A@!!!"$%&%&'+-*,*+-++,,-,.,UOLLI$!#&!*  "$!!2&!"-1284("$% "%%%0''"( 1 (!"##   #!('"!#" + '/( #("++  $      + +     ,%. 3:%;!$'"*!* )A/! )& .QJG1*& +  + "    !" -'(',&$'&"*&#+)&,'!%$%!&('/+"&)'&)(')#$"($+(02#(%#"$'$( $$"" $"! ! #$#w ! #"(# !/)+-))-* $'# ('*'#!$+.-*0+#%)+'! "#& "!# #  -'#**'+*) %0$9(05!0'  '/4-#/-.42+2944$*060!$)+-5=1/+&;@) +A6D447:@7DTSUNZOIPjAEMTT;==BJMSNHEQYL>FFs>L@gvD).WL23SYch?EDJGVP:8A3=/$%*6-"* $%"&'2~~~~~~}|}}{zz{{{zyzz~{|{z{{zy{}zyzyyz{{zz{{z{|||}}|~~}~}}}|}}|||{|}}|}~}~~~~}~}~}}|}|}~}}~~}|{~|},~}||{|}}}|{}~}{{{}{|}|{|~~|{ |{||{{}|{{{|}|}~}}}||}}}~{{}}}~~|}|}~}~~~~~}|{|{{|{|}||}|}|||{{|}|}| }|||}}|||}}}|}||}||{|}|}|}|} +||}}~~}||}~}~~}~}~~}}~}}|}~~~}}~~~}~~~}|}|}|}|}|}||}|}|}|}|}|}|}|{|}||}||}| }}}||}}|}|}|}|}|{|{z{ |||{|{{{zzz{zyz{{zzz{z{zzz{{{|||{{|{{{|||{|~~~~~ ~~~~с~}~~}~~}|} ~~~}}}|||}|}|}|}|}| +~~}}~|{{{|}~~~ ½繹ٕهŶڑͰѹǡ㺖ſБ`ʱŽļìDz  ! ! ""!! !!!"!""! !!!""!!!"!!"##"!"!"!"""!"!!"#""!"##"""!"#""##$"""#"""###"$##$$#""##$$##"!!"#"!"!##$#""$'*+,2:DE;/'#"!""##""#"###!"###""###!"$#""#"!""!""!!!#""!"!"###$$%%$$#$%%%'*1/,)-5>BGHFB>820699>GT[cgddgaWTQKLKLB=<>AGLMLQSKBBGIHIKLNQVYVTRSR{ysixvwvhԊw orwyJZn+MogH24/1235=EA><>CD>;<<;98:961.-( F͞˱s]trËsbL964667;=<>?AEECB@A@>æ…陔򌢖ۈꉊݓȺ\ۤ֒̔Ό򈐗¥走퉟єܤϔ}5;i $eؑ/$$$##$###$$$#$$#%$%%%()++*)('%$&'/))*,-,-.0.-,.*((()'&&&%%&&&'&'&&%%&')(()'()('()'(+**+*+-,-,-++('r˾ϼۼ򈑃йɿЇëû̯׃괓οн욖ҁó݈밝Ցàʪنľɷ˰ʬαʡ౉—ǻτƅ㈐ô傧蔪،ö͙̇醃ˎŐݼސǏǓ݀䳿ҋ􃊇۬½ȴ곌霖ԡ̒Ȏ轵Юç٧ƭ⍶򕁘ϕ؋ݧꄚϚꉇɹ֍׳OǽήՄны􊓥̈̀ˈƿԈT]X]SWWQNe=C*,% !"L9S424317DEbff65I>Y_^aOEZ0XSMVODWC5X[T/Sc/))0?28k_cfP4CVanW627E$.?P.5>:I@:S>6\YNLA78A=D@9:?KNRTQUVMHRSQRcmk[]V_RMNJWc_\_gpe_c[YR^^TCJHCJdbXdjfSKN\nnddiZPM]T`_]^]agf_@\\\]\]^_^^^_^___^^__^_ `__`^^__`_`_`aa_```_aa_a___`a`a```_` a_a```aa_`aa`'a``aba``a`aa`a`ababa`aa`bcfgejmsvpicaabababa`abca"bcaa`_aabaabba_`a`cbaabaaabb`aba`ba`a@b`_ba``a`aahecachkhgca`ac^[]_adhou{}}vspkkjib^]^eimkhlmc[Y[^^`ekmigdddn{@iM_{fT̐hѩӊ񑫾tPv_\Z[Z[[\\]^cbb_]_`\Z[\\[\]]\Z[\XPisMGE?^bVHIIDcetqegkhdqje'm[SRSTRRSTTWXY[\ZYXYYVTVY]bcejnonmfdcccegkhdbceefgikxvt}sjjkhfghhozKqidlĉo侀MNJUUT^_.)&?=,7+/B3S.&)($!0+);2*,)#H1@>'%J-?O:c2;-(1=523+D/oXE.gbNH_LI`VM+^]ϪmgDW!%Xm@trFP]ied|\SLOa~A?kgB=9MWYPOdQS"!$)9$!)2nCethpKKx{N'ISO?FnTNNMN ONONNMNOONNMPONONPOOONOOPPPONONONONONNONOONNNMN/MNNMNMMMNMMMLMLLLMLLMLLLMKLKKMLLLKKKJKJKLKKKJJKJIJJJKIJJIIJKJJKJKJJJKJKJJKJJJKKJKJKKJJK LLKKLLLKLLMLNMNNMNMONMNOOOMNNNPPOOOPPPOPPPQOPQPQQRQRQ)RQRRSTSTSSTTSSSTTTUSTTTUUUVTTTUVUUTVUUVVWV +WWVWVWWXXXWXVXYXXXWWWZXXZYYXZYZZYZZ[YZ[Z[Z[[[\\][\[\\]^\\\]]]\\]^]^]]^]_``aa__a`_`baba`ababkY{boVo6KVB?8BF;hhe5;A@CAAPWAP4,uu?)%*:n@M-0-)#$ 'HO'$=;>=@BDCC%$%BCKBFDIP*(+HKs+k``cm7=AEFUaz5IR>L%DDDEFEEFFFGFFFHGHHGHHGfFFIt~o}u{|s~Ú~KMNONMNNOOPQPOQPPPOQQQTUVUUSSRSRS%TSVWYY[Y[[^]\[]ZWVUUTSUUUVUTSTTUTTUTVUVTTUTUUVUVVWVWXWWWVUW[lg_]afe^XXOMPRTSV]^`b\YYX^_lpqko{{xnXTOTQT`fenx~uh_enz}hbb_^fbXUXOVWSQNzy{zxz{nogdbcigkscfcgmipkcfgVRwna\ZW`_\RXQULKJKHMPWOPHNPXQNNORLGFCCFJMQDtquxrrnnljpligkqhi8@AFMEGGC???<@DLLPLMuuxtqol=BCDGEFEBBB:j[]9;???<998899:9998<;<<:<:88:74831/.-10-)TWZ]13e66?H`E7;??@6275/G=GNP*,-.11/12764611346769;96gd^\\^.+02)1,,(((*)&22/*PK*($'D=+I818><653;I14<-*1.'-983B9@.0+,'3-% &##(##!%$%3=8).5&G-$:5!4/*6(1,&(*7@2 )B.) $#06'!"* /$!#$$$$*&&"%$%()-+!*0./Eqodeg\Dnuj]O_HWN^Q?Bq}g`akWpe>\KY[NpIgBl^SoPf:OB|wwu~qoTNZ>|orqEa{wkc^j7:890=EB>9>>>;=@<9;:65L047F60-//-0-10.SUYURA[-S+RSIQ=C>M:20QR-2[LQPOA=:DZZROYG4:/731X=7/LLQYD0>9NMWZUKK-V-811UOH?Q?;6O4B:511/.00/.)230-P,<\-0.VU,TOK90MLNPOOLFDKLHFCJGFEFFDDCCHIF@??EFB>:9ACGFKLTT@315;B?:5K"3.113:7/[Z[Y@VJP]OI93551;/00==<74cKWWT3#0.)>G.J6+&(&)+,)&())#(B<:5/63398:<<:=9<>>?@@??>?tD@@=;>?<:?@C@A6332-/26345554-46;;77695:>76<5=81<;/.8;4/31YX/.YYTYS?>IMJIEIHNONKOVWXNKHQU4.C;7-MOY-SDO+1KN0'6G$%%&$''&%%(()'%'%#"$$%''%%$$#&''&'&''%8+#3B?@%()((*,+(! %,##17D;\?>K<_:62U\VMTeFKU^[JA@wxxKI]SPNXJ_cPrigBFFol_l]=R;IQlERROvDFNQUQKAR]9QW:T6;12;10S=.,;:50..--.LRE1AA773JU@24?SϺҘ폁djggьx셈ωWf녍–㓋prThD! $)  +  +   +4 + + AšŒn57) "8D/㬲࠻𡘔ރyŸA,%+(!/)$9      -+%HLҤn(%?H2 7ORR,*."-?Io͑uI3&4`@,;$!1H5;926.!->9AC:%$6H(#FD3PN~{xymg⊝\VrwvxɳnC(A;oBy;-!' 0A,(+:4i*.88u|3'k>:.;&%&&'%&%$'*0(-+02)@[&b[[`h35::FgKL[)4A<:A౗x}yȲȍ|}|tqtlmrtvtnjddfdejkokstsnnuuqm_\UXTU^a]ckmf^W[ansc_]VSZUKIHCGHEDB}p{otkzy{w|s}wtprstk_^WXXZa]dj]`WZ`]^XSRQB:YVOMLJPMJAC>A9;;;9?sDI@B8<;B=;::;7440/00270WY^ccgegdcfdb\XZNK'+,16/220.h--+*+03646cadgggcX-.,-/,,.,/2.TGJ*(***'('&(**,,.-,0/0/+.-*,.-+-((&&"$%$!DINQ((N(&')4# ! " $$"63=>A !!!$%*,+-()*+-,+-/.,UQOOLK#!" ;6(!'335"%#"-!&'(&!#1$$$!'++,('""&%&#'! B   !+" !$!#  F  !' %! &  &      + + + +  +   + + *&#." &)58?3,%4#)*#4" %(50V04  +% + + !    " '''&&+&'' '#&'*#'&%#.+&$,)$%', #'#-,(""&&%#(  -"*$$$"!$""#"!!!" "   !#!$%#,*,)/$&.&#4'0.-* !+  !h(&)(&+'!&(&&#%%(('&&+*+&$"%&& #" "!%   ##" %'. .*.23.'1425%*-%#'/+LD=7?=#-)"1&!%&+&2455A4N-,/Z]XRYhFISWSD??zzwGGRJIFOZ]MsvmAGGumPM?IC9526?EGNPTKA>BBE<8>KTX_dhkrrfa[SUZ[QIC@BJPRUXUHCDHJKNMJGFGKKIJNMHтӅ_hb`nTʀȣ|ÒŘjqxbF_>PM/:/,,.25679>CEC@>?@=::;;98886310(4fʫ—ctRKlν^LA8779779:;;=@CEEDA>A?=qloottPRTSQNJGHKLIJKMMNNNMNpspZQMOOLPqi{d[UQUŷtuV2?&'*+Ħқ«řʵۺ̏ཎ=7.37D3‚ύ؛μA>)7Pvs77 DGFFI244/b1O氍ڜǕ獏ýӍֹQ5hE8'3 'tē܎܂ܪ +$0(!6Wţt'!-MĺO   + +       !  !" !!! !!! !>" !!! """!!""#"!"!!"!!!"""###"#""$$"""#""#$##"""###$##$$##"###$###$$%$%%$$%&%%%&%%%&%&%&'&'&''&&'''('('('(()()))*)*)(()*)**)0P槡Ј٭ٛ󁘜|Ԁ㍊TĆњܐ؂õdz𶃥A:V 75Æ6($$$#$#%%&$$%%$B&(**+*''&%%&'&'''(()))**)***))(())('''&%&'(('&&&'''(''(()))(&'('(('))*+,,1:?=?E?706~ɼʼIJܯ򃌉Ůĵú݊͞򃃅ҿϽۼʺȼڣԅո򈐅ސꀇϹɆܭ˯òࠣôǮօϷĀǵ©ڨĊވϪб†ޮⴤ΂۳𔖒㕬ƅ͈̭܀ʾσ̯հ鵔̼Ġ٠꽣Бûžɏ޺ƶø煖񔜒ؒ䯔ي̎˅ijOĸϺ䏋煙ŸĘд͓ɜ񅐕3SDZ_PU\JVga:DFU]WRUfe6ebaa93Y489/9=;868_;=EGV "9>DQSRQTSTQJGPSNXhk^\ZUXMJO_lbffbinpl^WW`\POXGCI\eT`eaVPQ_xhe]kXTOOJba^`_]ecVg]]]\\]^]]^_^_^_^ __``___`_``_`_`aa___`a`a``aaa`aaa``ba`ab`ab`ba`a baabcbaabbababcacbabcbbcbbccbbbcccehffgffjjjgcbcbcbaabbccbcbbbccdccbbbcbcbaabbcbabaaababdcba`acb`d_bbcdmvsjfffkkjmjojddhhja_emosw}}vsswvpidcflnnnol_ZZ]`aba^\\]`a^_abZ$YzXdxgm)yyδ˝ᅔyzrdy][[[\^_^^_acc_]]^\ZZ]\[[\][]^aRUpED@CSUPGTGCqzp3˫d`NWy~p*mXWTTWXTRRQRTUVYZZ\XWYVTj^ggdb_\]_``a_]^_b`bbachzv~}hdbeghkjhӮogfcdȬSjzEnSUUVSN<5=5',TV:D1)/'0;$,16)/B>7594**#-+$!,%EG;19&/37bz>qNGc^iUHBB'5.Zm?\EE=uoLs]tz<~}puuRxPgK_lP[]@W\xW1522& .0 $)<&&6$,.09Gbjik{WHUKjNGV)S\k]vS8BIR{bwFYrgdYLMMMNMNNMNNM"NMOjZ.2/'P>PgGO~mRSOQIZ?:=<=@@BHKI04-A>-F;=7OI@MFGC@2LMWUO-BRK|alhl_`Wi`\y~|~~\amacN01Az}~|846:3@eH445JOKIG;yv=G?K8uxF+*+*&$ *GS(":<>>>@EBE&$%BCJFIDAL)(-+a&a[Zc448A:iwbT]SDWNh.}DEDEEEFEFGFFGGFGHGH}GHHFG~vw|yxu~}{{u~r]NONONNNOPPPQRQQPPPQQRSTVUUSRSSSRTSSTUTVUVWXXYXXXYXWWV TTTVUVUTTUUUVUTUUVTUVUVVVWVVVXWWVTT\TT_YV[Wthc^Zcha\VQMOPSUQX^ab\X\\VV[jopkmxz{t_RPU[ZX\eq}ykcglmoidd]da]WVVNSTQPM{Hz{~wwlt{yx}|tnhf`^\ccfljfntwhhheijHbqhd^YY][Y]cNRXIJKPPMQWQOFKMLHBCDFFIKAqpuunspqpquronqrjs>@?@BDHFHGJ@rwywpqu>ABCCAB???97`c7;=A@?>;::898;986689:<>=::8982231./.02-(P[./01a239=SO87:;:5;586-FAIOQ(+,0/.-/242411125659<;;65jff30--,*,+&'))**'*9/*('*JISHIHJD#"#B?@=25<>=?JC=;=3+.112:>=;4.922:66C;BK0D,#'CH94?811242/.4.->>=##&%%$.999C4?FD58C70?(?F:D*>85)%:<$>@C@*=<*E&-%:/.A9M>J(0))(&* ")./1+//?28>9).M9.'9''+.3,1?77-+"*.//$)#"#0'! ($#%#"$$'+$$&&$$&-$ +$$!,1/,<,#&1.(0. !&7UPJe@JNRRBhyKc_OEZK[^F^R=9,:AC,71FVT.2XQPOLKLQTNLS-O\55864..0-RL:.)6BM\SURQHYWUO532.,MRN40'FNBRd141,1.-T7.5/J>.F\--UWT0TIDn:6OMHLTQLGHEEJKIHHHGHHGIGFFGC?>?EGE96745:63M101Y31[0UKE:2.MT^M;NB1497;8:4<:=895WRNG7;;;=<==>>=@?@>?@@???B@;?CCGB@98<43245437547278999888::=40G0@;9483-254642-.100.[]0M2FLJJJRRQOLZTWN\\SRSXSR_H.+42AI9=/:JJHN1I.++)'''&''$#"$((*'''&$%&$$&%#"24$!-#%&%%$%&&'((*,(()++-+/C/0-++&*46HBEK 0":K7055+-2]_XRP7HEJ;&M8@,138,7===EHQZVTJI[EV\LV<8R17AJAnMI9)-410..-+D^Q/4:7CMD-&66-37+3>:$*+36304>;!=976-/!#&&' + + +###,7+-10.,"#%('(,+0/%$&(*!$6.3"%$-484+  %*7,O;+%(*/2/7>KPOPRRTQLJRZZnsrma`PMQ_nagkgmqngYRR[WJGP>:@UcWcme[VZh|osp|b[UVWstrtss|πҀC`XctkuΡβǵԷހגڷ덛Ģe9224CEʆʧΏ™rξm̅٦?0)"(/!* +   +   )PA' ,3&+􁯑˷ׅͣߧk3OZ&.3C  + + 4!*/U;@8pʲ؏WGf3;2K= +%0*259a̰J2!7,\UU坣J>2,2?> ~S\ɶmWacLJ@5->!!$##!#&)(+)***-,+,/00+*WVU*&"%!32<3697,%#''%#%&##+%$%' #&%"&&!",%)/ '$. $)"+%"#"+'#"%*#!!"#""#*", * + 0!"" *!"  +   +     + +   +  % *.*&$*'0<%$$!DDZ(0 + f  %  0""&-)&()%'#&%$$&',)%)&%f'*)$#&#))& &.&('&!+(($#'%&) #+$+%%$%$"!$#! !! !"!!"   "%*++&#&+/'#!,)&#%'*"#$  $*+$#'%%&,,,*'0*+%..)'')&%-!  "   + + +  -#$! ,-25 #3'#()!"$FNMFC/>>B12*5$)))",222<4J+*/V_UV[ayINTRM6sl|F@QLJJKW[OJpzHIH3,4M0:[{QR[uD?>EFNTP(NA<=(04*.&#*)>)$  ("!'!~~~~~}"~|{{z{{{z{{|zz{zz~~{{{}}{|}||zyzyzyzyyzz{{yz{{zz{{{}~~}~~|~}| +}|}~}|{z{{}|}|}~~}||}~~~~~}~}~~}|}|}~~~}|} ~~}|{{||}}}|{ ~~|{{~~~~}|{|z{zz{|{|}}|}~}~}}}}}~}}}~}|}}}~}~} ~~~}~~}|{{~}~}}}|}|||{{{|}}}||}|}|}|}|}|{|{|}|}}}|}|}|}|}||}~}}~~}~}~}|}}}}~}~~~}~}|}}}||}|}|}|}|}|}|}|}|}|}|}}}|}|{|}| }|||}}||}|}}}|}|}|}|{|{|}|{{{z{z{zyyz xxxyyzyyzz{{z{{{zz{zyyyz{|{{|}~~~ ~ā~}~}||}~}|}|}~}|}~~}|}|}|||}}| }~}}~}{{|}~~ ջݨ焅腐ٲ͎Őԕм檜Ůܫ]缵Ϋ¼ǶƸȲɳ)' !"!# "#" !"""!"#$#""!"#""#"!###""###""#"##!#$#!""##"#$$#$#"!$#"###$"#%%#$$$%$###"$$#"#$##"#"#$&''&%%)+)(&###$$##$#$#$#$##$#%$$%###$%%%#$$##"#$&'&%%$###"#""#$$$##'()))8VXPUHGDAEUZRHEBHS_fiaa]QPVQJ<9ANUX[_einspog]XX]\VPKHM\`[_YOGFJLNOJGCBBBC@BDCb[wuʦϳ끍Ɗۅux߸UŽU4t_YUTd7 ),*-3yl?jXGT{x[lDAAACCCBBDIKJHIHGH㡃ڮHKObc^QPV[^~~vƄN2,&&(,[僲ϩћɲ𖗪ꋚȮ鄃X6($!K$ALʨ૷l87Ao*>Cl`'(GU6*(C^fȉյҁ񒒀ъ@7/G!04ʆֿקŁy{SD 0#3̧e8g# !:      !! !!  ! !!   !! !!!"!!!"!""!"""!"!"""!"#"###"!!"#""##$$#"# +$#""#$$$##$%$$$#$%#$#%%&%&&%%&%%&&%%&&&%&'&'('&''&''(('&'(('''(''('('())((*))+,+))**)*()+()n劆񺮒ɵږѱċòߕ򏳞ο޻ò߀`隬¤մҥᩐ򄉁򃃂ʁ⧏霵ھ7= Y  0:ϸ¯ڋR*$$$%$#$%&%$%!$%&(*+*)(''&&'&(1*''(()()((())(('(''&'( +'&&''(('''()('(&'(*,-25:MajĪ삑ŰܹƮѼ˽¾Ǽن񄕘Ӭ߁ݾз؅괳ޑ܇ԂӘә⵲̰ͮǂܬɅ̒ɼĺþϽ϶씣ɛ򥳞箔â׃ݱӛ̯ٳљˎʘӄˊ퐚󕗒χ򧎑芉ݶ΀Źʸĺտ̩ͥς򦷤˓Ŀ¼ηӺ͛Ɲ㓏迻桘ߍٕΎ΍ʊƧݍԜ܄J̸LJۣÀԵݲ񥋥Ѡ񴻿Ľ݈A5SKl]WXLLW]C4<;:78V9AG[P;H5.0/;1800FF*]JV^5896J_beKHb02QRTNUY`H.S=1(785//18:;=7Xd4Zbb_h`lK:5FNP,&O81/*H:^S+_P=>=A976?GPQQSUUTSJ@NXOS_lfZ`Y[PQSZjaicflqqo^\_f^R`oP@ERbWU`_ZIN^aTnXmTKPNHi_Y`_UflN^^]_]]^__^_^_!^___``_``___```_``aaabaa``aaba`__ababa`aabbbaaabcaaababcbabcaabbcb ccbdcbbbcdddbc-bdcbbcdbbdedddbebbedbdcddcddccbdddccdddcedccbcbccdccbbccdbccddecabdbcccbbcccbdfdcbk|tqoor~|srqs|~||rqvnl`^clqsvy~zvuvxsokhmvyqsoc[\_cbc][YXXXYWXZYo)PUWwºueq⑤3cjmolǦЯz{ѼnӪspfo`U\[\]`eecaabdf_ZZ\[Z[\]]^_```a^_̯ZIOm`d]HZCGkjtEkyd^WS[rmfc[[WZ`cXQRQRTUZ[_b_YUUT^VpЎgYWVVXXYWVX]``__Z\_¡|۔{ƽafmqoj`eeiima|sjLXXPUVVKV04?A;-'DD?' ( )! 1F`4*7.&0I:9.31 %'='%1+?-1LwsJ\hdRsUA@@39"/A0&C#5WPf~b`briSkKooh@EtvaΛb_Z;G,"/4*!&&.=&%%-=7?P@VjtJMhYgap[tArI~^gAljxJltTwXuT^utrlQLMNONONNNON"OIO5J859shK?vEeUHOPB9MIATWPQPOPQPQPOPQPOPPQPQPOPOP OOQPQQQPOP OOPOPPPOPOPOOPPOONNONONONMMMNNM NLMMLMLMMLMKLLLMLKLLKKLLKJLKJKKLKLLKLKLMLLMMMLLLMMMNMMNMMNNMNMMONONNONNOPOPONPOOPOPQPQQQRQQRQRQRQRRQRSSSRSTUUTSUUTUVUVUWVWVWWWYXXWVWXWXYYXXYXXYXZZYYXYZ[[[Z[ZZ\][\]*\\\]]]\]]]^^]]^]^]]^]^__^^__```_```aa`aaabacbbcbbcdcdcddcedcccfTffhnO__fGD@7]CE=kmd26878FINFEBAI;PNT/3IPxTmcavyZ_Ip}~ivuZldk_WY6m3?zy|}86;<6'(=>5FLIDApzq9J?I<>@?A@%$##CIKJLCC(+',,vX[Q^sXJRTa`cYHOPiܚvDDFEFEFEGHGGHIHAGHHHGHGIotnq{}m{|}{zۀzi|3hMKOONONPOOPPQPPPQQQRRTUVVUSRSSSTUUbWTUUUVVWXWVVWVWVUUUVUVVUVUUVVUUVVUWV WUVUVVWVVWVWS`Ҙxwh`]`gfNS]V[]ZUSX][WU^hooijx{xcSPRYW^ly}n^bblyldb]]YUTNQNOPRRJw{{{vuryuyyhkzppll^`a`aZ\dmktjc^`c^h\SjjeeZ\\_X[QSRZ_JFHKQFFNKTQMDEGKGCNGCBEI@qpuuptwyuy}xtpqtip9=CDEA:=@=>>IP?EEDCC?uxyxrrs=B?@AA>:721[3<=?@ECA?;9:996;987689;;=<;;==:3233220360+U\-Z[^[]].5KP:5A;6>TTPOF4CDNS++,,/,,-0113c_114869@<<86667542\+,,,*))(./*186/..1HIPGFB@=#"CA!!=>@???C@6F:1252-2;=;3H4960,E?84,0:7?9;6:8#)7(/06;F(+36<*J<;84**)H'#!  " "&3(Q-12'BQ?,$)&D<:B*,.=/5+-)%*% ./52F%IB9%0%3);+*=/J/')-5(#0*6:%'(!%' &-(!"$ %*$$(.'"#$$ "/* 4'." !>A7EG7^7:}GtYqUUWH^37>G_K:43ou~inmgaz`HU~{NoxgUrcQxYc[Wmmjz^pai`VIaBvtgxbpRXG_wpcn\U5?SU>>@:>C==:B;6<9830 2]352..XPK0T/YSPOQNHPRPVPJ1+1/JGEIID>AAD?>?ABB?:9b3A<:@HCLG@5>:4-252XHP>GHV@DZD6UJ2/386RSU2UQJD64.+26O1*++((**.*)*)''!A<<71..6689::<<= >>@@???>@B+AABBEGB?=;<9765785888979:99759;:<:637;@97015b32400122-WUMLDDI@HJMMMRNSV[UOT\VHNRTUT]aYQ:*H0F31ES0C?/1-)&%$$&###&**'&%$'%#"#3232!"''&"!"$'%&&*)+HM^33-4864(0AFK(+),3>ULNTVXNUbA;BO:;Z2?I4DP28>>BH5;91b\aOLRkDPWU]Ajeu~FORQSJMYa]VFcdBIy}lJO?h=*4M(F\ejBHBHKSY]Xj]H;FNaGPEF_73@[=MgSZBE +011.+[0428(<1BI!..@434--58'#%,/107<=;7<., #%2'  +',/".24%",(*-)+/2#) ,2(-3173:"!/WL3*(00217@ILNRSTSPIAN[Vfx}orjfWVX[mbmjlqtrlYWY^YLVcF4;K]WVa`ZNWgeXsd|^SUTPxrjrrg|(҄ӄ;ՄǽkWOWⲵvs{blώǗЛޅƈζ߸ũZ6<\JH$$.N䭐R92+>頦x¿ǀȕzqqL[Z^CB=2S=@9deZ,.-)+;>6587:9<8:3#$(&$$8243"3FAA>:9*DFL*/GOwVjb`eOmxve{t|m^W+)9yz{2*-*""+)*62+.5n}t*&"2193-9%'(('&&#)-.-0-+aa\]T[eF6BGLOniBG3;>Vޓӧ||lw|}還m}Ĵp?螚Șy|~gpwmkf^ZX`hhfeglpqlitptqe]YY\VZdmokcZ_^ftf__XSNGGCDBBADE@tdz|vu{{wpzysxuummiqlrp`_jca[YPTVTWPS[a_g]YVXXOSG:NOMNFGIMI~K@@>BF9:nwzy=>B77>8==;33485392.+.2,OPUVUZ_cafkeea`aXZ--/./-)+./0.69+...-.+V^cecdg45101.*$!8 '*.15320+)*,-)+(('&)*/1/-,+---&')&%'#!EM(NNOMOM#!,0"" 0011-,29>!!"#$!!!#&&*SQ*)./,-2/.**+,+))'D  "" &&"" $;>E;;5/'&#%$#""$&#+$ #$$,"!3.# "$!$/"&-#" ) 0'+# %"'# %3% +$"   )$"Q!& 1$  + +      + + + +  + + +   +    %%) '1S:+(/%(4g7#)    -      % !"/*'$&'%$#$# &'$)'% $(%%%'('%+) ((+'' " "',&($%*&!%&&()(%#$"$ $%!" $!"#! #" !"+")'#+-&-$')& )($!,  +}(&"" #$&'((,)+,.*&).*"%())(,/+' ! &      >DO*)"),((*/7 "$/A;;?EMGGQ83:D04O,6;)0?'.447:(+)-hbcPNSjBLNMS=ki|FJIIKGISZWTGnnDJ}zOO8K'$-C+F_di@HCGLOTWRaQ>%.0/8).(%,$3+.7*+ )$ +~~~~~~}||||{z{|{ zzz}}zzy|}{|z{{{yz{{z {{{zzyyyz{ |{z{{~~|~~||~}}}| +~~|{|{ }~,||~~~}}|}||~}}}~}~~~}}~~}~~~}|}~}||}}}~~}}}~~}}~| +{{{|}||}}|{~~|{|~}~}}~~|{zzz|z{{|{|{|})~}}~}~~~}||}}z}}|}}{|}}~~~~~}}}~}|}}~~||{{{}}|}|}|{|}|}|}|||}|}|}}||{|}|}|}|}~}~~~}~}~}|}~~~~}}}~}|}|}~₄~}~}~}|}|}|}|}||}|}|}|}|}|}}||}}}|}|}|{|}|}|}|}|}}|}|}|}|}|}|||}|}|{|{z{{z{zzz{z{zyzzzyyxxxyyyzz{z{{z{z{zzyzz{|~ځ~}|||}}~|}|{|||}|}|}||}~~~}|}|} +||}}|||}}}~}|}~~ + κҼዂ򐋦怄򌚞Ȝß헵ʥΤ򋄸꼎ȮꀚZ๽Ăͳ=&!"#"""!!"##""#"""###"#$#" ##$#$#!"$$##"# $#"#""##"#$# +$$$""#%$$$#$##$$%%)6HVO>,&%&%$$%###$##$$$#$$#$$$##$$#$%$%$&,-(&%##"#"#%$#$# $$###$%%###$%#$%&%%'&%$$%$$##$$%%%'(/8AQcliga]WUWWYTJIORYjjjfcdcfiXB;?HQRSUU[bfhjlig]\_^\ZSOU^]ZYXQJIKNPNHFDB>>=<;=AxZڭ،ɀW|™͸߅ƄmFarwjoZy?a0,,0;DJKHEDDFD@;989;;=A?@?@BDFFIdaнߓ|xcјǖ{hNG?CKKB;;<=>>ADIOJCB~ynSR~QImehF~}||~>>{zIswo‚ԨиѦo}fLRy]}|hPQXwc\cqX((&$$'A񢲻ÔϤȩʺЮg&25i'4i`уǖвaK@6kוp/+"+1賌c^:к挈Ʈ/¯CPE0-酀휹dYiҠݏЂܜןzT$1$.v=j75@GEA54ebe=7@[12Z3<::974L>?GXk?78821377M6R\C39''DK[CIY63IJQMOVeYY@>228410.7<<=8Y]g4dmfiZM[:@NNC)4-+2-G<\4X3cI=@?A$(;LOMLPTTUVPAR[OGWhf]gbYVKPXidihponpc]]_h]Z^hU?DR[^Ua\YSS\i`hZt`WWRGi]\a\O]ojb_^]_`_`__```a``aaa_`aa`a```aaabaa`ab abcacbabbcbbc bbddbbcccbbcbcbc adaY^_a`aabbcbcdddccdedcdcedc edddiheedddcedbccd!eeddfeededcdecddcddedeccdedeefdddceddcdejmry~{|~{}|utvpmtgcfinomqrux|~~yxyywtnjovsnlkf_]`beb][YWUVVUTUWIUCsvw}͹cK_pǴblv&mÀׅҔcẉ[\\\aejjeb^YY[\\^`b_babcghghqf7VQGR/IeNGO{vymWW_Uyzdr^_W[ef[SSSTTUVX^c^YWno^k~ZUU]hkuzhuҫmǭctbchƵ|littrhLWVVV]fIJC8BB6/J:(2#&$=QF6&>687$;G810:&*'(-D-,D+;S7_ySWĊA;(&"+V:$ENa>@/@0fp{DŽqqro~_~]XL[Xh\ocy .+-$ "!,,14#!/5OLP@J294CYQOqz\+JϞ5<{g}aTg7YWok}}zYNNOPO$NPOOPOP.DC=^]>}tozOPHp@HBUTRQQPQPQPPPQRPQPQQPQRQPPQRQQQRQPQQQRQQRPQQQRQRQPQPPPQPPPQQQPQPPQPOPOPPOOOPPOPOPONNONOONMNMNNMMLMMLMLKLMLKKLLMML KLLKLMLLMLMMLMNMNNONONOOPOPOPQPQPPPQRRQRRSRSSSRSSSTSTTTSTTTUVUVWWVWVWXYXXXYZZZYYZZZYZYZ[Z[ZZZ[[\[[Z\[\\\[\'[]]^]]^]]^^]^^^]^_^^__^^__`_`_a``aaa__`abcbcdcccddcdddefedeghs[kXcD@7]CD;h42338988B=9:<=GKT_VGK.,0OCN)(//BHJFDBC3+MVQaMK~DWgjmagVsleThfgrdaic^e4,Fwe:6:;8..??=C$ECEGPPKIAJ+**-,q3WVg>VL^MXIXa_pBb5LIPdьDEFFEFGHIHIIHIIHGLw{t}{}}n|r{{{sz|yOPPPQPQRRSSUVVUTTSSTTUVX\VUVUUWVUVWXWWWUV +UUVUUVVWVUVWVWVWWWVWVX{Ѣ̓sylc`[[]QMRTVS_]]]ZSV\\[XV^fmojlw|}cSU[auztg_[amned`]YTSOLKLKP[MCyK~|t}z{mw{vvxvzpvte]`g_YZ[junoeb_^YacK^kbc`\[ZWQOSTPOOJHGMODJPKRONKMHGGAADCCEI?rsyyyvxwtx~xsrssik8<>>CDEDB?sqpnnly?BA@@=85/+-.8==?AB@?>>=@<<<;77646898:;=;;:85553012560URTYXYZVUV+7GN=>J?;EIX\UXM5MKV,+,--*++23.0]_2cbgab26:865567863\/240)MP*-049600+-FCBCFF#!" !E#!:>)97:=7.=H>7E/=SC)071I D<56659:5::F<92,&-%*479'JNAB681+TOJJ%%$'052-$2DB=/FL-&!&(2*102/7/-83?84)$7AH48!"*1(,*)(!+,#-8.&-82?J57>)6'%)/2,%+D)"(6<A<961DbTF1BkveOWZ_{]U\SmcWpDL^RfwypZRZKIKVro[GACInqHD>:J11/F>A>;:@?;8@@576*8-/@b]110TVR8S-W4YUZWRQRPIH^3-,TO,=U8:410///XQRWYWSOQXOW-SNLE0`75*-,-C>0;HNKMQPQWQPRRKT3643T*QFO-49=W/7?;30./--T-5A3100.-RT,/*IFFN>JJMPYTQLFCEJDBJFCCEDA?GJ441MEWGNR1441>2.763;IG77GB946;DG9ZSC=1>/+),---,+,**)*)%#!RE?5.256945:89;:;<>?>??@@@>>=>A?@@@BCEFFCA?>;:9779446989:;9667:;9898687<>A?2/121453330100.[URPNSTKIGBBCBUB219KED[QJJOUSQQSPWWPR=>571F3<730-)&" !$" " ! 75:=:3ECM866-_]XhTOaIMSU\U5bc|HSUPNQ[^HZYLndvyJL>V0.Y&F`hjqRBIG:[V/33:KKgGJHP%)42/2`:6K2-BNYB#"69342-76.3-<""%$"::;#*&&#!#.4"'*. #0"%)$%+((,421 -14.867/(+!D+XB/-.5 $3BFFGLQQRSL?PYSRi~}szuibTV[jfmnvutubWTW`XTYbL49HU[Sa`\W[fqdlch]]YNxmmrm`tЀ«ԀkRR=u܂gxqhkç֬ɂpu|ծˁݢȺg+;=== 6N59S攺đWHCI뚅ۜމǾߦƂRVymZ(A5T>:PFº˷탿μޚՃϘGF6  +(" ,#    %N + (! )&6c0-.+-.-.<74336>?FJF76 'HAB"6BFED?:'"CGDVHIyI_灂jf[sfWxhiuomyref+$B|x}0',,%")*)6.+.5q}p*'&129/.?(6=(&('%%#&''*)01..-2_,\T`3HAK<=;:syrt;>=49>8<8:9:434/./.-/1+PSXWXX[\\aebadbcZY,.0151.0,+-.+,+.-,..-VUVUWZf323441(" %'-/11211/1..-*''%%(+--,-..-,+&&&%$%&&'#CBFMLMOMKI #-4%%,%%'3848- 03< #$"""&'$'LO)TV]VW+-/+*+++,-+(G$%&#:? !#%(&##$97661.&#!"$")2$!( &8/ '*%# #!"("" 04++/,,+ %%"#& $$+$%      )!,'+*/% +  + +   + + + + +  +   + + $ * !# +  /:D8@2(4"%*4!2*"!," + ,*" ,  +  + + ! !!4/**)*'('*($%(&"!-(&%)%%(*(&%'*$*&#%$-"$#%'%%(#$%%"&%#''###$! "$'%$# !##" !  !" %"% (!,!&("!# $+*"! + ' *(%$#&(#"! ! *%% .'&#&)('&''+*%&  +   "#$)/33-# +  +U]WM)*-,,*(*'9$$#(,+:@I`$'H0Kbgi:=:FFPYT^c`&RI0H/&,* -*'0,7#%$() "' ~~~~}~}|~|||{|}zz}zz{yyzzyz~}|{zz{{z{z{z{{{||z{zz{{~~}}{z}}{{{||{| +}}||}|}| }}}}||{{|{} ~}|~|}}~}}}|}|}~~~~}}}~~~~~~}~~~}||}}~~}~}}}~}~}|}}{|{{|}|}|||{{|{|{}~~{||~~{z}|}~~~~#~}}~}}~}}|{}~~~}}~~}~}~}~}~}}|}}}||{{{|}|~} ||}}}|||}|}}|{|}}}|||}|}|}}|||}|||}}||}|}}}|{|}|}}}|}|}~}}}~~~}~}~}|||}}~~}}|}|}~~߂~}~}~}~}|}|}|}|}|}||}|}|}|}|}|}}}||}|}|}|}|{|}|}|}|}|{|{z{z{zyzyyyxyzyz{z{z{|{|~~~~ف~}}}~}~}|}|}|}|}~~~}|}|}|}~~~}|}~~ ܀⭝֯ʹDž¿Ң܃ۊ㞲闊۾¸»ƻ['!"""!""#"""#""#$#$#""#$###$%$"$##$$$%&%D##$$###$##$$$##$#$###$$$"##$#$$$%#"#$$#$#$##$#"#%$%%%$'D觘E3(&%G$%%$%%$$%$$%$$$%$#$$&$%#$%%'--)'&$$##$%&$%$$%&%$#$&'%$#$%%&%##$$%%%&%$#$%%$&%#$#$$##$$%%$$&0FTW^efee_YUYZ\TMOZh\`abUWY_afX;6BMUSPNLTZ\^befbM\\[ZVONQSTROONKJJKMJFEDB=99;99Gw]XWWfnዀ岯s3jgѵnehY瀎RpZh>:349AGJHGDCBCB@<::?CCED@BKKNSUUQoq݄ՆÂnՆwps{]SDDLKGBABDDDEFHJIFFEuqW[_nnfyzxyurps|jVF|ffҤgΧ¶{ߧk{fzfLU\bbd`XQ7),''&#:ע݉͝࿶рӦĎ虌DRBMӠӁ~rq̓7",1$֛d<4x۾ݛ4炝Qν۬6=2LΣڝW9+$\Әav4A%)                  !! ! !"!"! !!! !! !"!##! !""$#"""#"""###"###"#$$#""##"##$$$#"$###$%$%%$%&%&%&&%$$%%$%&&%&&%&&&'&&''('(('&'''&'(((''&'))(()()()(*()**) **)**++*+++*+,++,+/=乥꺳޺ӄ݈ȹ؋Ő{{򇱯ūï򓎉۞ۂZϹÈĶΑ悉쏓잚ľpA     M75ǣĹ쥞ʚF$%%%$$%$%$%%%'(*,,+)''&&%%&(('( +)(('))**('('(*)(()((''((()(*)()*)))*+-@bVfwwpy~˔󃍆ţ򀂁;ĺ;سֺ􊚭ƾ׀ſյʺ񃆂􁃂򃓣ƭƅƷֵʰݽ퀎ƴĬ郑ݛڿᇞǙʻɵ̼Ҝ«ĴǪɻױŻߨњꃑ炠ۻИʭӢɷրꪻۖˡϦ뎞㭘גǷǻǾüϯཝ廯Ꜵׯ䥟⏶׌ɿºǗǿͻ˽ô񋐕¹ݖUǟ¾ȿ΀ݍ凒αܹғяπ1FG0Aa8kZ[T]`J><=>>?DKKC>9ad68^MUWWW;@<:972?IRV\iKGK49:VSQMPW[e]9;DL0YM1/-6??=7RUZ\Tl8ibj<;DB10-R52I8C^>0J60,?<1>,4=0%-;$BBM9{\QrtͫVv?,$E=* 'HJF-rb\2@ZpskPj`opM`VqZQoSyi^7'$0*'*)16-#2<#:#5JhgA>EcLש~ܦ2gɵS8aGgX]uLRn\rt?ULOOPPQQPPQPPPOPOs(==vsrRaLOk[UPOQ8CBC_sTQPQRRQQPQQQRRQRQ+RRQRQQRRSQRQRQQRRSRRRQRQRQRRRQRQRQQQPRRQQQRQPQPQPPQPOPOPOOOPONOONMN MMNMMNMNMMLMLMLMKLMLMKLLMMLMMLMMLMNMNMLMNNNONMNOONNNOOOPOPPOPOOPOPQPQQRQRRRQRRSRSRSSRSRSSTTTSTSTUTUTVVUVVUVUUVWWVVUVVUVVWX +WWXXXWXYYXYZYZ[ZZ[[Z[\Z[[][Z\[\\\[[Z\]\]]\]^^]^__^___^_$``___```a`a``aaabaabcbbbcbbcccdbddccdeddefdefefcjheA[]~A7]AD<158325::75HRT^l7\SQ@;<@(7S7DP/H/P=JFDA@@/JNU6THseahhkceWoqd_b}xsahxpjf^gUJue~kG@7<<A@A%$CENQNMMFJ*))+0`FOf>CE^KOjyJPnxU-EJQӆEFEFGFGGGHHGGGHIJyIJIIIJHIv{e΁~|Ȃwxyk~xlqv}pPjOOPPOQQPPQQQPQRSSTTWUVUUTSSTSTVUUVTUVWWWVWV WWWVVUVUWWXVWVWWVVWWVVWWWVXXWWWVWVVWWXmhvvsi]XYXWYOPWPP]_][WVZ[Y\\Z]epmlky}dTKTUQUclx{gXW]gkif`VTOJKKN[_E}K|}zwuwlnsz|~ytotqnfjcilxv``lpgf`_`[VVTFch_\VV[V\SOSNOKHJWKLUIMQMRNRJKOMOKIHGEGDCEC?A@>:=<9=>AA@C>4fjjlnr>ABBAA=72W-178;<>ADEEFCAB;<<84775699798754548<9525641-XV[ZYYXXW-/DG=6JF@INZWOGKGQAIQW++-.VWU//--ZZZY[a\]`1;61aad2684_a2.-QOPO(/35610*VCDH$%##!""" "#"@"',*#,$&(+2119113421//--1"'(>)(.%+KQPB?4@0285+,B+OPI;-,./,WSNPFM$"/158.%'330$#"%$ #0)1-'%#2%%)'%G)2FN22>3+D6,.=-6KK*718/+%'**(''!,+-(+*>(.)7+("'010C6 ,(--IVZg@OJ65"$,125(&.# %%$!"!  $"'0"-$#' #(#'4&) 27AEkQsHyOD9m\msˡVgrxBUOP8R`ghnD[sgLghuqi5BS]qNGcZYJD`VkaD{n{kf[SJ0>>%B<:>B<:6>:21X6:33S2V][^/T@O3].4XV=)I[HPHV0CN1;F2F;<<141./WXSR[]]SGUQWWMW-\BV>3;2.,+GPG5GVLOLPNTRLQNLL/660/.SMD9&+"`633>30Q../+/GA5--0+*Q,.+NJKHLAOPMLRTULFAGI@EHF@IJGIHBF@A@BFCAA=CP>49=FAIDO?4QZ+.0XC8.B:=TcQZW2=E?9=7=C8=?C=K9D@A42BI@5WF3M.-+++/.,)(&$"2;):F/MHE?2268;<02858:;<;=>?>@?=>=@@?B@@B@?CEFE@@>>=:767636:848574679=<:797963:=AF1043.1212214/`_\XXVUSQMIHB=6\L2'OYdi>@EFHLTYdmhePRHIHBBi@SU@>2MKOWmIE3(%31;>@)B+6SNEE"#'8<6516:,( !!!#'($!:;-%)('%$+---3  1# +&&%+-*')-/72!& ,,,+'5737#0:),T7(-3)(?BEEGLPOOPEO[VR]qpvzkcXWX^igjqwfpfXQPU[WZ]K9;JXZ[gg]Xexwy\yp]^Yamg_nqqq{Ƙc5(>ׄӄՀŽoPeͮᑼVVʱӓsh}á~cǭ{{׬M735 :nO316`PȋLpcV\Q斢睢ϹňvtdfnY(##!F(+=ܹN@#"" '* '&" *@1      +"ĚʐJ +  !X7.BskrqI&")|A)\ސÝS=̮b  +  07-Q(@^C^Ї{]W&14+ 5B!;"S򁞝G81afgKPL4/Gx½¾ͪрe@WY|<0Q8=7./3.,+-,,/>BBM^/NC>2210.O;FC#3&?9FDD@;7&>?H1PEpgg׃ng\g`jsaj~zztb[FCqi~A.(+-).)'('2+,04z|l1'&15/21450)C;&&#%%%('-/10100KSN\235J::LF8APV\9$68AsӢ脄~nZ掉ې{tuxmptxvk! ͈̒yvsrlnhjslhppke]Z^bchkfhhnkkkswyxd\VUUPQY^emocXW]beda[FEEAw??BKN8h?yutvrx|{uplkhjdfhoxz~rlchaZRTPVX`cTVcf]]WWXTPOG9NQLLFDGCIEAC=>:9q:Ewno:8?7;<8<8<778795230-/.)QSVVTVVUW\_ab__c[]^022300/,-/-*--.+*-,%NPPOR\1103560)"6#&*+0246543/00*&)&$&+,,+(((&$$$&$"!&&$%"GGLMLMIMJ"!.3,%4/()*21-(+'2&,59!#CEF'&$%JIIKQVSTT+2-)TQP)+-*MN'! >??="#&&## E62/) ##133((*(240)1.,0''  ,"38!$!'##.-"M  !"!!2'5DLY390   + + +  +  + +    +   +   !'(%#  5+"()P<'+%39-('  !)&!  "# $  "*(+1/0('-)*#+!&$.' )*(',,-(!)%()$*- & %!!'#%#%$'$#%#!!t$!+ #!!! ###!"$&&" !$" !" "!$  $#*( "!)1',)!!9   $,$) "u./,)()(%%#"!((3-.*#!$')-("$!! "&(+%$$"*.*253(** + + ;NY][0Z.F,2/54/..))3,(LUD>@DJNKV5:35;CGJ<7,B4D&2=?@)(',kj^b`bR?HIGKU>nUgmcIOOTORFOGxxPAX4D;(3S\fl<>@@CIOT\c`_KG4.,'%8"('.,,0<&#$!~}}~~}~||{z}}~{|}}{z}}z{{zyz{|y{}z{zz{|z{z{z||{|zz{}~~~|zz{|}} }||}||}}|}}|~~||{{{|{|||zzz{z}|{}}{}~}~}~}~}|||}| +~}}|{~~ |}}~~~~~}~~}~} |}~}{|{|{|}|z{||{{|{|}~{{||}||zzyz~}||}}|}|}||}}~~}}~}~}}}~}}|}}~~~~}~ +}|~}~|}~}}}||~|{{|~}||||}}}|}|}|}|}|}|}|||}}}|||}|||}}|}||}}}|{|}}}||}|}|}~~}}~}}}~}~}~|} ~~~}~~~~}}|}}}||}|}~݂~}~}~}~}~}~}|}}|||}|}|}|}|}|}|}|}|}||}}}|}|}|}|}|}|{|}|}||}}|}}||}||}|}}}||}|}|}|{|{z{z{zyzzyyzzyzyyzyyyz{z{z{z{|~~؁~~~}~}}~}~~}}~}|}|}|}|}~~~}|}|}|}|}|~~}~|}~~~ ߉рЁ⁑眇ꪄӼ֏ĺ䎒lý»ǸȼŻO&"!"#""##""#$$#"#"#$#'$%%$$%$$$%%&%$$$#$$$%%$$$%$$$#$###$%%#$%$###$$%%%$$$%%%&%*8˷Y9(&&%&6%$&%$$%$&&%%$%&&%$%$$$%((('&%&'$%%&%%&&&%%%$%&'&%$%&&&%&%&%&%&%%&%%&&&%$$%%%$%C$&(6KROS]`ddcaVUTwtupbVaMZMNTSRR>7BS]_XOLU[XV\][ZqKKLLLIFFGGDEGHIGDBB@:65899PгцIJbk;$Vr؀˲PLJŰuŸaPu~\Uvk}IC<=?BDFDBA@ABCDB>CJLJJzlYUZXVZSSc`ӳǸ琖|pŌrngNLLKKIGIJJJKIFGIIJKKHd~sy嬭dcfqqnfilc`m|`_bks}{≀љ黮|ńsIEwj|vzoSXY\``[RKh962/20?͏쥓݌ʐðƼҔӔJ6=iՌԶҖ댐ڀ兗ȿ阝/8+:Tā}Pۇݒ爥ͲϖÁщД„M@)K䁡ۈݚcX5'$ "\݈o:#7Ԇ)                           !     !! ! ! !!"!! !!""!!!"!!"!"""!!"""!"!"#"##"#$#$$##$$#"$$##$$#$$$#$##$#$%%%$$%&%&%&% +&&'&%&$$%$&%&''('&'(('('''('()() *+*)**)**+++*+,+**+,+,-,/Xѝͺǻ||聂¯ɿòؕߕϝ刭Y۹ħٳƖ߆꺳ĂښǹA   ! _18놝¾ƈA+%$$%%$$$%&&%%&&(*,-,+)' &'(('()((()(()*()(()( +)((())((()()()*+.:?CJP=>=;89ZAO^[`481:652=A*9U!" #/@ZQO('3(7NIRfY5>SNKNROZW.NTTW.I11-4<>AB9/BNOLIMOSRUOK]ZUPEW]am[WPMT[aa`oakh^dT[XYXPQCHJOUQWe]RS|kmtjsfVRZc^[R[Y^cmtN]a``abbabbabbdbbbcbcdcbccdcdcbcccdddcbcdcccececdddcdedddeddedeeedededdcd&ecddcdbK>f4X3QT—g8QTonCWQxgJYiMNn_m(=)&L$,!"/<<9#5MSZk}SYerYgT]xr~^5Pby\dpQZSr5m\bSPQPPQ(PPPQHxSid|]gNKDSPMRQOSb>A=XQ[YQRRRQSSSRSRSRSRRSRSRSRSRRSRRS RRSRRRSRSRSSRSR QQQRQRQQRQ OPQQQPQPPQQPOPOPOPPOPOPPOOONNNOONONMNMLLLMNMNMMNM!NNMMMNMNMNMMMNNMNNNOOONNOOONONOOOPOPQQRPQRRQRRRSRRRSSRSRRRSTTSTSSTTUTUUTTTUUVUUVVVUVVVWVWWVWVXWXXXWXYXYYXXYZYZYYYZYZYZ[Z[[[\[\\[\[[\[\\[]\[\\\]]_]^]^^]]]_^^__^_``__```_a`aa`a_`abbbaaccbbbcdccdccdcdeedffeeffeeeffgkriP9hBhTFC@;693659;9:YL\ZLLIJKA;7=4:/Tt|:>?>@A@??BDDE@>7bdijp<;975683101345:8333597/YVW\aa00-0FA;2/:=APQNLKBDAJ>NLPU,.,VZWX-W-WY[[\_]^a26[XWY[]ba^[Z[[ZSW,**-143/.*)GF%#"#$"#$##%$# "!?#461');#+.=>00+6;5)-,(2P;#$LB>F2-,//00-VMLK&'1!"#%);1'! (:9.78%&##!%'(-A9>.H@&3@=-4;G3+%(CUgeW\R87.&'#)&!%*$$#"!$"1JH1)/;+" $!#$!',##'%+FGSKKQRUJLie^fc5E+KA1QRQDLlͻw~[tHGOaLgVcbsso]xgwXiOxI8]J?GZ{hiN9ANg;5EWMowvZ89a/B01d:9>A95<=97/6<:65PccSD0SOKW0\\F/8W;;5LQ8OGTC8@/I/:;9152,/ZWSMXUMXKU^YRU..,%;C=4940,+,R+EWQQQSUUNLQKMSS16.)T+MA>8V?<6,2570P/-1/OQ;:--.+,,,)TKJDPP8SPROPTUSIKH@HEEIFFKIFGIG??=CD@?:g<47IB1218;6<79:/YXX; 2>P3:;95855=@:549278@A><;>CGG3>HC>fE/4"!(-?9JJOY4AJOVYWTW15:,3?3/396=/7958<::;<=?>><@AABE@AB?BCCB@@==:<;7;96895262345:9==;:87867:=>=007/-,/233ZQXTL@HJOSRNG@>@9;<5XSiL0@0:,40D;B00ZXP>IMS]9B9TJA-'9%)..,*-+/2878=CA?@<<:?KOIFBDEHNKLMM'&&&@9:228 543*"$$)),/^chbh88=;8BKECB;:647;Tb^]FJHNQQ`LMPU\Hb_lxtJ[XZULY_GWOvvtsqgw@iAO45-MMQTvj=DGCQY_aHBIFh~LIFBUO65MIVcc\\mAGLS2/M?8+E78>527""!"""!#'(!$#''(-&/7/0' .*! &%'-*".+)*+)/*!$#% 6-/*/ "537$! -S?)(-/%)9?ADJLLLNMJ]YPNOesyke[V]`egiziqm]_MTTVUOM;?AJQQ[kcY_yxzpwp^\bjeaZhgiuZȧ43.3?;OPׄۀøâވ􀚦beHĞԶ򶑊Ͳ؜ՁgastܙŎyeֻܿrE3+(',+BD\qԣޗx`f󄋉⺂ዡ穵硎J|i8!#)5LZg逌Ć菜QC<$ ##(&) $&& "*.     Q +7+".a&w-(Bי-1m3 )(Cc9썈Џcz   +   #(3F9.,Bgoq5 ,UkwMؔL!&&! #+*&,'QČy_pCogLGARtB.AL"n\(ĿÀѰuhM5a>[I;;:4/1-/-.--1L=JJAE@>=8824,2,Z:?#5;D@;;5%="$8OFiKYօむskde[fl\Q_{{p`{Y<&FgX{A2*,'*1%%!(+#**jzx04023,212))9/)4U8%$$%$&(+*,-010,.,?N[047.4768>8FG4_H8;9Aaƀn𰷢su~wЀudt}vuqmouskp~exwxunegkkiegnlif`]^[dhggihqppuootuh]^YRQTQRY^ilkaX[afc]OONE|x@>BFH8k??~{smt~}vmgpmrr`\eknuszqka^WTVXU^ffjUVaYYXVYWQO?=NVQJHEDDFF?;<9:uqtumj7=<526<:<=A@=<995120-..OMORVVVU]\dda`\]_Z\b4554/+.//21/.-/-,/--*LMNOX/00/350)A'!#%(*//11224433.,*&$%)&$"!#$&('&$" "$()&IJLPST*(%#30/&"**+1.,**#$$-$)+/5 BFGK%H$IJKMQTQRS,.QRPPPRTSQMJGDFAD" "$"!!4/' !$(##/,!#35: "#%*4)%- 1-)$     +$&/&"!&&#% #)0/>VYLAOU%.DZZLK:     2/#     + + +     +*#%&   "*!ED@8;%))(%%!  +   +  0!$01+($"*--!,#&)#)+*)$*($*"*-)&)&!*'&&'((#!$ "%"#" * !%$!"$$'#%#$&&&!"!# "!"" ''(+&8 "#$ 2# %%&,#&).,'&,&+($ #%$#!.'5',(+!&&).'$$% !!#'&$#%$ !'1/)%"$$).,---! )Y`e_g533.*06.--(&#"(1IWUS?CBHLKS26949GIF>?46*<"-6A=-($0Anmnltp=FDFKUBhcvxHRMQNHQXRM}t>a7?&+9RRXYyk:?CAMSV]DAFAOS/,*&0($%1;:55<"##'"%#~}|}~ށ|{{{|{{}}}~~|{{z|}}~||zzy{yyz|}{|z{{||z{}~}~}|{{{z|}|}|{|}{|{zzz{|}}}~|{{}|}~~~|}|}||}}|||}|}|}||~}~}~~~ +~}~~~~}~}|~~| {{|||{zzz{|{{}|{|}|{|~|{zzz{{{|||}|{{|}~~~}~}}}~~}}}|~|}~~~}~~~}|}~~~|}|{}}}|||}|||}| +}}}|{{{||}|}|} ||}}|||}}|}|}|}}}||}}}|}|||}}~}~}~}~||}}}~~}}~~}}~}~}|}|}~ +~~~}}~~~}~}~}~}~}~~}|}|}|}|}|}|}|}|}|}|}|}|}|}|}}}|}|{|}|||}|}|}|{|{z{zyzyz {{{zzz{{z{ +z{zzz{{{zz{||{|||~ ~؁~~~~}~}~}~}|}|}|}~~~}}|}|}|}|}~~~|}~ +~~~ ޒ᯿ԇʩυטڅƻȒقůŀ`򅣼Ɩ񏌤&$"#$$%%#$%$# +$%$%%$%%$$% +$#$%%%&%$#%$%%$$$%%%$%&$%%$#$%&%$$$%&%$1؇뀋űV*&%%&%&%&%:&$%%&&&%%&'&&&%%&%%'('&''&''&'&'(&&&%%%&'()'&&&'&$%%%&%%''& +%%''&%&%%%&'5(,8HPPPRY`cok^TpCpk>@ALJIGIOD??A=>@CCCDBA~A@94379|Xҁ݇U^`/_Cin>RelNg}{Ƙ{w܀wٌ2dbmgMExJMJFC>>?BEC@@?@CEFIHGMNOPGsK^gbSZU‘ƀ஖n|ď؉nvԨbl{QKKIHIHGIJJLNONHQhpfz^u_@^KVIlVWbZa誗ҫż􇄂ziqpjgvfNGOtLJOV[`[VOJFB===>mѾߩÛÀ㌫ѢŹǒꯂـ񜋯쮟偏ْƎݘΚc YFZMϣט񕦗źEG~͔Ŋo$/  "WŢX +;;  !   !!    !! !        ! !         !      !! ! !!! !! ! !$"! !! !!"!"!! !"""! !!"#"!""!!!"""!"#" #"""!"###"""#$##$$#$# $$#$##$#%$#$ +%$$%%$%$$$%%$&&&''&$$$%''&%&&%%&&&''&&'&''&'''(('(''&' ((('('''())()(()))*)))**))+**++,+*++,,+,+,-+,+,-@㋛Ӹӱ̑챶ٞóۇz{Ƹƹڽ򅐻ڿRƵϩԽٲ萓ԁ냗Лᛅ˺@?  !    `! ,#򁑴ѿ»-%$&%$$%%&%%%'')+*(&&('( '()(()*))*)()**)*)())*)(() ***)))())++*)*,-..//0/.*-Ϳ¡ȶѯ´ùŷλջꌥŴƲ숞ڿ½̽Ϊșᾦڌو缕ƛȿʝ¼݆ٟŻո蠽ֈϲޑƦͮDzˬί򒙓Şĝ􂩥ҧЏ㆓ٟɬ܃ţ̖͝댓ی󄇆Ŀ˗ԩ꒱ƒʽɺ¸㏍¸䎢먕ܣȴƩӷŌٝᡷयب犁ľ밷у쇞唗ýOʾνȺэ׫ÿՅۿή2PYF4Lnemenc_pCGEA@?@BABFH@<>984CaLTU_6:;;:9SERVV[b4614(3!"HB|:*=/RnU3./&GFIN179B<9=ECFT:@@<1W2330/7<9;ZVWW6:9plglkF>@=@93*<*]J*DNNT?;>B;?@CQMINNPTSTP]_YQVK^`i`dZMYMbcckhij^cQ[]Z\XLKCEOUNK\[SNilcpsg\XTUjYTUZ_ZYeojRbaaabacbbbcdcdccbcbdedddeddcddccdceddeddecddfefffe +degfefeffdeffgefeeffef?66TQ_h^5EHgCCN_deegfgfffgfgggfegghhgffggffgeggfgggfhghiggihhhggjigfghgffhgfffghgggffggfffgfffhgeegfgghilrpllmqyz~rNezY_Ynlijntj]bj~vhgrukiutpkpjhefggca_b^^\\\[ZXWX[^aaaWl)Ajv`Fb`jc`@rY__TȈ䃔䄨Ÿrumidceba\[^^a`^`_``bcfhglkmkdx`s]ŻnW|F1$+&LeN|swvrvŀyj>zfulc^]\]\[[]]\]`aa\alysXpisafuΌpsGtwiZQlmgYY[Z`gmplkfb_\Z]_dZ\PI@6A*/,(#%2SJ>JED=B.T.C4B=?G>,6Q3?''J1B;F)/<;!+-+1)82"8eUkk<1G?>P<:0!++,lN_cHMUoqZMr`;jnscvAFJɗh}_|bOth_z)y{k`}TRRPRRRQR2QRRRQQPQRH|@M`fbP@;QНISRRQWI=>K]VNRSRRRSTSSSTSSTS RTSSSRTTSRTSTSSTTSRSRSSTSTS!TSTRRSRSSSRRSRQSRRRSRRSRRSRQQRSRRQPQPPQQPQQQPOPPPOPONNOPOOONMNNLNMNMMNNMNMNNNMNMMNNONNOONLMNNNOPOPOPOPQPQPQQQPQRRQRSRRSSRSSRSTTSTRSTTSSTUTUVUWVVVWUWWVXWWWXWWVVVWXYWYWYYXYZYYZYY[\ZZYZZXZ[Z[[Z\[[[Z\\[][]\]\\] _]^^^__]^_]^!`^``_`aa`aa``abbabbaabbaaabacbbbcdcecceddedeefdefeefffghfgdfgghk_ehod@:O=bPID?=695678::BNH_QD=CFKA<4N:82cy?.9(FA=@B),)0IRD>KRgfqj]jX}aY_|wr`XI{{{]gZRqF2Q~\B:EG<@C945836:6ook9LGOD=>OCA3E^MIPRF'%&& >==@??BAB#FDIJGA'-+)+J|&7BGO()23G7?IF76DK:2+0B/<*!."2204(3<+M6HB(,0E(!'-2=8<50/0K1-:5/ZNHO"$#  !"'#"=11%#&(1"%%327D/5AC(8154,IF9G:8?-O7=.4H670>.-*1*%!&"'$,>-(()(M\8k;BD=lsE4IWG[bQ.941*''%%$*2"&4*+(."#!!4##)- !"#&"!#&# %G<.=A2E;J[tomN51LdU'44]H^INA=zvhp`vRSsHLQZ}ivwwk`at{hdS^dy[XgeC>U1awuZySNWJRFGDMzbLvf7E=D7<3;6>=77:>=7+98;81P3d?@<.-/YYS' G?9850WCDIU.]R15J/3;8260//HQRT[MEWRW//..320@E<5G<53/-*N7Q\TPIQRQKWWRQ/1J8+K+3R@A5]-;\C7@86B@A6S9>B3C9>\6;;;;9=?>>@??>>A@BF@CE@B@B@=>?<<;<:<;866323356:99;?>=;7:6799551*--SNUG?=56-026;>NUSI>2]]YVOF/1FYM7f\>Z9LDBT%*+>7W3@N&:797?CD@?CFFCEF@0&8!D-1bgnor;A>:>FCCB>9555IMXbhCJKONPQi4ECLWVQOW/41L*4DXM;8/7Bjm;;AADLPOUc]bZ_{PLQa[PSRZ_XC`usrkrpPzBe2F9:(EvM]mj^^KXcSQPJ=PnC?=7@BN9O:\Y]VSV[FGHOMOLZ\TGUQmu|oseTbVhhkxusp_`LTXVVUFF=?GQNOc`YVtwiv{obb]^te^`gndg{̈́ԄQκt$+(26/$&2%EۅڀȽԅ؜ւ২?9\Ԍȥ醨ģжnZs椖}bwro[}zݡ⋎ʝÒډd.;e;{~kԑڦ݉ߑՑɳɐ˥𭇪߆kT^F<206 /)A  ]蛣Ǜϰ]UID*!2,$2*' %&!*   +   =3N3  Fi!:{^9=2 +Cd"%Ac4-   + +    +?"-6*839!)JQ;TK=tZ\@%*'' 5! +'G>əәM㩈l^\J85LٶX57T^̈́̀əx͵iqc:8P:WD>:9910,././.6>7MF<;>@A<8.H31.e:%=86=8 "$?OB:KX愀hm^㡖e\fk^N~kzgTvE+Gt^}~1<.//(+-(%"& !$(uyk*5+11+)2'%1J:2?E5#"!$$%)*.--(4\'-27:2@.1-+22C@S:":9EeyО~~utr}v~}vkfqymrqqknqptrw}ћtv~|{ldeiebcgmjljebZW]fhjprtxzogkswqc_YTYY]iiif[[a`_YTTNJyz=>CFD8n?~|qy~yOyna^hinv[`kehjlqke][VV`fV_lh[W[^YYTUTKI;=KWMIIEEDEC;9<=y>vskpp::>548?>AGKH>9981//+**TMNORUSQPTZ^dgd`ae\`e66264310221/,,/20/3;8QQTRU,+,,.-+#&,%&'')(**,-/257540,'$ !#%%"!#--.($"%$#EHL.YWNME.,(($#$+02121$&'%*%*/"!$&$%GKRRSWTORQUUSTTSSTRQNKJ%$$&$ $#"2."%(+ **%,*'!"1#)&,"%,#&  !6 #2'$(  + ! !*%),)%.&#/! +" #.C/^5:<6^a7)ECBC@BA?FRfmlYRUUKHNPMNP_?><97797:=<;<>?===<<=>=612::En偏plAH\F2(akJE3k6bicu|{ԄĘ񃕆zнՌݿuIpFILKEDC?>ACA@?@BEFIKMLNORSvbVQ}nayxcdȹ|y|kvbءQ|bgHFGIKLOPONKnhЋwԋbIsFVI|׆tЄ࿑χ⣖Яɦ^SuBKn{HIJMU[YTNJIECCB@{κ׺ބɔ³ȝ򸡃˅ќβ򹞗]I܂ŝإْgXTBiȨۊф슀ω+]OfĤʞɪ㧦;)  ! !&6Hٽ{T +"9,  ! ! ! ! ! !!   !!  ! !!! ! ! ! !! !!!    !   !!! !!!    ! ! ! !!" ! ! !!! !"""!!""!"!"!!!"""!!#"#"!!"""#"#""##$#$$##$$$%##"#$#$%$$%$% &%&&%$%%$%%&%$%%&'&'&'''&'&('(''(()((&'('''(()+''())()))(**+)(*)**+)))+,+)**+*+++,,+,+,+,,-,-1Y񉂇Ĩ¬틌׳߰~|囐橮ʫ׻􀂉SƊɈ҅舜̮ȧ;> !  ! e! !! $LĹL+%&&%%%&&&%&'*+,+*)('()(()('()()*)*)*()***()*)*)))(())**()*)((**)())**)*)()+,,--...-*(\ʵꂁ«ӻ÷ڿ冥øȻƹ񁈋Dz買梭ή즛èʲdzѮ胖ϼٲɁ򴻬շ瑎氵ͨî㒤—ijܙջǾ؛ɣƱ싸ߗꐬĿު֦Ѵᙊ胈ß됈րՏ⎖ⴈ֚ےįױǻɶ󒤨ڇ߀Ɣ줨»ýХǺ߂ŢƑ»֝ѶϧҘÿ҈ƚՃᓔYݵùū܌ك脪薓ɹʸ򋞢Ƥ͉ʈȹ𚑍ȸͥ/4S=]LMW_\[`_ddDr>@?@@=?CDC<:8_7665LN^39=;834UDOQQVb`1IDE[>;:637:422077>8[ZTR_8gmnei;4HGB14D@Iv>38VZMM>"AE*4=><<991[QRRY]_QXVTYdhc]LNPa`Sahun_]SZea_bLMH=U\ZXT[MDLV_agoaNRS^]URP\][^f_Dbbbdccaccdccdddccddedddeedeedefegffedefgeffeeefeefefgfgfeffgf(geefkyn8G5=FIJHCE=?A<<;;`fgghghhfhhgggiih8ihghhhihfghhihhhihghhhgggijjjkljjiiihhhijhggghhighhihgfghgfhgffgghihiijqtmionmpu}{xw{m`vf`hffllnh_aj|ohlogdlmkkj`feffdecbda_]\ZXWVUUWY\_`cdXVb@HY{puΐ𱏝쁛~ƴgח|r膙gggfdaa[[\^^^__abbdfihhhmmzkdx|224-w]9[e}}gɳkktg_ʑN›dZYZYYZ[\\_a`a]{owˤ}_jzk͏xm`KrEfXM`DǼxlWb\]_ahmliea`^\\]^QV]GE;:_/%,'$)QI)DR85=W=U39=;3T^cT1R^53E"E>>2D$.)($<"73%'?8ANHF@T.#ED=cQI]!2(0B|w;EM<:eNOUX{SH;~iqFArspn`djX2A<7%+, 1%"*+ 3825%1<`433cNvR:63-EFD'%+>QR~BEʻgeknơhbxtXbo`XNEqpaW\dW6S{d`}IC:JI?@B9064.8>6mt=ILL'HJ=?99BdZMLMJ$-+&&! ""D?BDF#%$EJHFE'+*)+6[,?JOR;UACCDFHKRt{>@<>=>@A=@C?c_eefh8=A?><:3;.FH><::;;@?CDDCFABC<85221331.,/25=>DFACB@8730/W,0ba0_^2][.YWV1>JDHG:C@A>?1PIN*---./10.0YYZYZ`\X\\aa]Z[[[^a][^0010021.+-572+'PEB>=? $(&%%$#$$"')B"*2-+??F:@ALCWekKP0?M,2CJ,;+.*-+G?9L@6HF5CZ2'')05=A7724A907>0XQRP&')%()5,('",, "$#%4*(*&"!%(''D9;I5'NL;DJ,1(,1-:3/-,;2:%!'-! -"-%!#%$()$-*%:;F]h7WM:EE?GD?N7((('!.572'%$+-"$./,+50+$&(#!$!%"" "  +"&9%G/)+')+>)E1;KM7C%:94(&JiTAR`Fv~Zhp[uju`a^qutnux\NbPWVh_UjgRwuco=L6`siskvsju[NTydtT?b82PI?687<=;19>><556866T32a))<6.W-132/>65511.1R12.I?(8S43;86713-SU--,PURU.4212383.751/F51/.+UJVY-NPPQVPV.U,15H14,31T@HP:/R7;8I80+.+.+F;45/NR-***,+OJJVUFIQX[WWTPHEGC@GHDGT\ZRPI?DI?;==?81./600.38:>A>O;*$J@IEC;;7=IB;4263>7?7\[9>=GC=E<=EDBEKK1C.JKOSTWXYXZ\]YWWXRRQPSR^31221TNPS[KR0A,7S;>7=<9;@@BA?>?@@ADHCAAB><:<=>989::744158;73:;;8<@=9888740823222QIJHJGHFESWXPTYL;*S2F:A>11))'G8F,?89*&<1DELLYVJH2BO>5%8@@DN]5YTI6?(>5/1056==<731/0669=>B>?AFISNB>;945=:799>8!9F0(<!.%/4956::<<(?!!!"" !#$$ 4%$)+(+))+/*  + +( !1&(##$,<%+ &#$+ .0-+148:45..3>*"& &'$&(+'LIKNTZ^MRU\kx|vkS[^ih\pxvc]QR`\Z\HIC7KSVZ[aRKT]djnwhTYZkmca_lijsՀV!!!!,؀ڍꜦK@TȪΑamԱ{s÷bwhrve|~L~ؾ܁оȟ܈~g{B8q댆h҇ֈ־݈԰ɮ郂Ŗ§؅ր㇫WI[4& #:;Zʥ삅UUU:2!.6.$+0#0-33,+/ + +   -?5&# 4($) "Hyu=z?-)I*4:;e2Ȝ~0- ]ҧWB7+  + +    + %1( ),.nWE42N1c*&.028&5 FM .:.\ѣǮeQFFPT\?4UhS!ÿ¿Ą+΄̀;}go~FvZI9Q@;9753/,.0-,.8B9659:79A>:7Z/./^YA#"! 3930HR{?Eofէx[jn^SKt€p^aiZ1Hr`w|F@42/*+,& #"%(.u|943.,,#$ -PI:39;&#%%'(,++)!;&/4:;.;1-++-/-=U]m5;FdUpquxq}vzvrmdhq|kqsqintwt{ӝ葎*pvztvffegbggipppld]^dlmqvsloqmhlttj_XTV]\W\blgh_\\\YVLEBB<==BAG7r>|{vzvxx~prmnllsa\igipnlie\][URmb]]XY[eic\[XSRMJELB=HOLIIBCBA>7=<;xplfr:>D@A>EH??CF>:51WVT+,*RQKJNUTIDB@ADHJPRPRKLGLD4;:75101-/-/1/*02/JLROON'(+(('$&-.+-*))')(+*+.2023-)%"!" "$*+00-/,+%%$#"C#(VT*QQ,SO'JJE&,1,/*!'%&""&$) #$$%GLQQUURMOOUTSQSSRVVQON'&%##$#  "$#91+($"&#"*!&%-%/9(*6 ''/"&2( /*&;!%)+$%$$,&&*7--*  &!#,21 )2"l      &3LT-G<+553:91<)  +  ! +  + +       + +  + +   *"      + (%@70##*%&0 0    +     '0()#$&($'&($ '("$#"'#'&$ "$ !#" &'$'+))'% "" &))&$! ##$#!--!"!!"%$ $$%()**,+---,+++')(()'*&$$&*#%&! %'(#$(!%$!!+ "!"%!*'/,'&#( !(1/-$%'&&)*/18772+$"$$!#''&##%(+40&" !!%$1=A6*!#-,/004ll684+,.-++(#!"'6"MRf;ELRTY^[7==?@EFJI3*9!%9&2-)#9c7878@ICJHGNRZ;c]xKTFJQTOQN@iAv}|>fr@\JL.,8I~W`kB;5APYHZS?;;:H(,+$4() /106406:0! ~~}}~}|}ہ|}}~{||{{||{}~~}~|{}}||z{{{z yyzyyzyyzzzyyz{{{|{{|}~{~}|~~~}{{|}|}|}}~~~{|{z{{||~~z{{{|~~;~||}}|{}}~}~~~}{{}}|~~~|}|}||}||}|}|||}~}|}}}~~}~~~}~}~~}}}| {{{|||}}|||{{zzz{z|~{|z{z{||{|}}|{|{}{|||{{}}}~{z{||}|}|}}~~~}}~~}}~~~||~}|}}}|} ~~~{|}}|}~~~~|{z{}~~|}}~}|}|}}}|}}}||{|}|}||}}| }}}|}||}}|{|}|}|}~}~}~}~}~} ~~}}}~~}|}~~~~~~}}~}~}~}~}~}~}~}|}|||}}}|}|}|}}||}||}||}|||}|}|}|}|}|}}||}|}|{|}|}||}|}|}}}|{|{||{{{|}|{z{zzz{ zzzyyyz{{zyz{z{zz{{{z{||{| +~}~~~~~~}|}|} |||}}}~}~~~}|}|}|}|}|||~~||{{{|||}~ ȼƽűے䄟߀Ü陲旎jɞמ⩯Ü탖ûù>&$$#$$$&&$%%%$%%&%&&&%%&%&&%&%$$%&%%%$%%&'&&%%&%%%'&%&&''&%&'T((''(&&(퓞íރO)('(%&&&((''&'&&'(**+,*)(**('(()('')*,2.)(''***+*+))*'(&'&'&(&'W&&'&('&&''*33W834]415)+>9KNFO{7𵨴P񆊕ف|Ìǐ{[M)dOWrPQkCDCBBAABBCEEGIJMNNPTM`sUi{\X[гŐlXkfɧrj~`hygvDDEEGHKLNPPNMOOsyWvtZyjеΞ䦮ˆĉmuttEoYE^bxDCCEKQNKJIJJFFDYϘӎ˃ݟߥ܂ٙǧʥƟ *DÌ2eղʨ՘T0a8]墍ߊԽڀ掁אጲN/ !! !   #'.e̴=" $%7 !  ! !!   ! !!! ! ! !! ! ! !!  !!! !! !"! !! ! !  !! !! ! !!! ! !!! !!! !!  ! !"!!"! !!"!!  !! !! ! !"#"""##"!""!"""#"!"#!""#"# +$$#$$##"""#$$#%##%$#"#$%&&%$$%%$%$$%&&$%%$$%&&&%%%&'&%%&''&8'&&%&''&&'('&&''&''((&'((''(((&(')))('()))())()*)()))(()*+,)*+,+*+))*+*+*+**++*+,-,,--,---,--.-,+-.+-.z¬ÈƂѽ͆㑟ɿƟ폌ؿ֌꣮닜킉òȲ@!"! !!!"" !! !! !!"" 36wꆌ랥̾ǵK*&&&%%&''(&(*++*))(''()(('((('()**+)+)***)()+* *()**)*)))*)*))*))()*)'()*))*)+,.,---,,)>k󁍍ƹŷ򁅆̿Ŀɼ°´ƻɿ¿牘Ү㎤¶ׅ··ȼ􇊄򇇈ϫӾ؉ȽͰ۪ޣ̎ހ䧒ː킎ìܹؾȤဣѲ㌒ؽɌբʵブ؀䉪°ƀ𬢰ʸУ̙̃ԗہףɷřľغ񌍢ΉޑÀ포ꔑłВ䀍ۆʝ󓘔¿ʾſѺɬٓ勉İĻĹʼ܇—طޒЩϭƽ׫ŎڗìýƸ뻫샙嘯ᑓҗOǿی璤ҷ䍢ƣŵ݋䵓힄;0*Eb]8IWW^ac]hE]l?CC?;=A>?B95AZ`Xb`8Jb8=86353IFPNMVc];8IS",55$.%&$# 58V21NE19H-?Ej)EKP58>65*,11[ARS\[ZYW\_NRiiaaJ[aMclula^USefc[VLIIBLWbY`Q?]^\[VqmINRag[PX[`Yd\]tdbcdcdccededfedeefefeeffgefhggffeffgffefgfggfgfghgh fghfhghggghhg%fflI_>@AWTTTUSUT +SUUUTUTVTTUTWVU TTUUUVUUUTVUVUTUTTUSTUUTTUTSTSTSRSRRRSTQQRQRQPQPQPQQPQQQPPOPPPOPNOONOPNPOPPONPPO'PPOPPPOPOOPPOOPQPPOPPQQPPQQQPPQQRQQRRQSRSSRRRSTSSTSTUUTUUTUVUUTUUUVWUWWWVUWXWYXYZYXYXYYZYXXXZY ZYZZZ[Z\Z[\Z[\\\[\[\=[\\\]\]]]\]]]\]]]^]^^___^__`_^___^_aa`_`_a```aab`aaabbbcbabccbcdcdeddefefggffeffggghgfhhgghhhggh`zqiowZV@4JGB8p85676998DKBC@B??>@@;R832a__J748<=A@+$1:RQDHFhûhkoȮblV_|^rdXuUPGkynob[^ggS\zmCA9IH9??76:6-:<6rw=KP,*D;==8IhjPQ-SH+,)' "$" CCC#$'%'*,*)(,+),8D*4FNNO*5CCCDBBFR[th;MUxŒHHIIHIJKLKfJKKKOzoil~xɎir}wwpyywupgdq}~dahohiwpsjSRQSRRSRRTRTUUWWVTTUTTU VWXWVVWWXWWVWXYYXWXXXWYXYXXYZYYYXYXYYZXYXZ[\[ZZ_zoqkbT[\RUXQSPOMNPQRamhoiggabe\^bfajrqejtrm\LQU[_`_hw{si\Z^bb_\W^IGLSSDDHwww{wl`heheglefnpprjjrlensxsrmb`ac]\SLJWYQZ]W[XTQSPPPOJHKYVpXON[RJcKKMFDF~wnklmlj_^VVXSUYUWUVXUSeiadmAGKLG@?>?AC@=>CD?<7:67;3ML?>:<9:?=???BFDF@=81.546:<@>=:7<<>A==;<8851.,-04212`ad21]RQY27;B3,4:4Z300OMQ,,+..11.20]XYYb[^^_a`Z[]]acc_]`1/064<54/.55/'(,JB=>"%*'$"""!*32"?4)(+/$G6?16GC[Q[H>5>6+:.WT=ECf>PWE\/XK8RS:326LO4;T/-1W),222:#8% $ *B664"&2.$*#(.A08=,6=#ICM88???9567943J7ZBK$]>H/6O!]31511.L;FLTPM*DC-1:@;;;3../+-Z-ZLW\/30+53;:B-2?EIP/42-.+.+-STPVX,/,Z--5I+:4--1QH0?H./9@E8/.,-+CN641-Q+++,U,SSKIVPRNQVWPNKJHGFFFLCGNVVGFEB<>@==8=;5484336.;7<>8:;44@SMDE;79?=G?4O856G1:3T24>EL@@?4:>BDII=1WPMMNQOSWYZ\/00^[_]ZWRV[2442_\VTSTTLKSF:S,/638=<7;=@@A=DC@@A?9:;:6<:416745866;>:@CB=36896.097551+QK?D,PQQVQVTPQB406&/''/N2.P-G&%"$&&&%(&)-.H&7<)9,39%;94LA>=P8>62>Sdd[cQQ2Q1M/18>=873ZNNQ539>IMUE75331/-.22507?PUKG=::7:9678;@C@554:?@<406CIS\\fMCOY\gp=DEIEFRWYWIAA18U8G78Sam>>>@=IIKPR_`]Z>`fvGNKS^[RURI;DECCFjgAfNP8m=EaqSmACG>;_ZaU"4,-.,*417884=%7:"$# !" "#%33064!*&%+)')-)$%  + ( " (= +% (,"110.*+87;41 | #//$&8+?GVY[ZVXbZd~qlZgjVsyte^SM_a^UPHEC9@Ob`fVFdfca[yvORZnxoblnpj{yք׀$.,م؀°ͼ嘄򎊃憂]§ơv뜀z߅Ӷfljnubqr{q`StÉԇ̂ԊнÖaCc\=KwЉ亩x|㛫ֱȖ܀ƅήςߴgc?FdƢ~+# !09E6l{€ӪOJI90*-(3)&&/'" !/!!%.&'*-   +  + v#0 4( "qVsG:!"XP Vw.J闾F!   +  + +  % "@B{:2Dƀm7!nd'"$+*!'A\39?A4\WEwGpǵʕncU\W`󖤫F6%¿ɀ̫rs\[<.?@<6m50/./.,-9?:=:;888>>7L4-.[Za[Ƚ0)&%$,+$/MQABC{Ȇmo]xmtd_`XOm~pceupRQuk?=52-%+'!!%#(+2v}964%/PXD8:3$%$, (1354$.-++)*--=XO9<>mávsxpyy}}wphbky~jhmsmqzsr|ءxpyyllncb_cdegdbo{{~snnffmhklkbjstkknif^WUX\^\Y[fmkeZYYYXULGL=t;>BF78<wwumpyy{tvhqpe[ca`^^c^]abbd\]cbZ^aiegbXVY[SPIB?IGAIKHJIECC>;:;89wv|tgMB:K:;;422WRJJKLKKDFDEECFFAB@@A=8>A?CK069;94333252//42.-OOEGLIKM'''%""#11-0./+*+()&&(++-*+(!##&(*-+-*()),.,,)*&'%" !&+*)*TX[++RIEG%'(- "%2%$)!!$#MNOQVQSQRVRMMQRVWWTQR(&%(&+&$#"4)$" -#'$,$&"#;=-+ )#"&""97'++@$48*?#B4':;(##$4:$.E  6 "  ! #-(2&%&  + + +    7.@8&5P^43 +#%#  + +  +               @U'9 &!-)%  .&!   +'  ", $)& +-%"&'%!))!)- !$$%"&&'" *'"$### %#$"$&&$"!!!% $&&($ #"( # !$$+(%$$'&(**,-.,..,*&)+++)('''$"%%!""!&#&%"#  #)%%&*(33/4)(*M'*58632,M=A='$&,24:- ")A(-'B'$"1"3/2,,.7;3)"! +~~~~~ ~~~~}|}ځ~~}|{ }}{}~~}}zyy{y{zy +zyyzyyzzy{z{}|{ |}|~~}||}}}|||}~~{ z{{{|}z{{{}~|~~|}}}}}}|}}|}|~}}}~}~}}}~}|}~ ~}~~}~~}}}~}~}~~~}}}|{|}}|{zz{||zzz{{~~{z{}|{{{|{}|||{|||}{~|||z{{zzz|||} ~}}~}}~}}}|||}$~~}|}}}|~}||{||}~}~~~~||{{{z{{}}|}}}}|}||}|}|}}|{|}|{|}|}}}|}|||}}||}||}}}|{|}|}|}||}}}~~}~}}~}~}~} ~}}}~~}|}|}~~}~}~}~}~}~}|}|}|}|||}}|}|}}}|||}|}|}|}|}|}|}|{|}|{|}||}|}|}|}||{{{|{|{z{z{ zzzyyzz{{zyz +{{{zz{zz{z{|~ĀÁ~~~}~~~}|}|} |||}}}~}~~}||}|} +|||}|||}~|{|} |}~~~~ Ԑպ搷ɕʨ”ٛ뇖ˑԱϰ҅킋_֎̓ܶАʹɿʻĵɷ/&%%$$&%$%&'&%&&''&&&%$%&&%&&'&&%&'&''&(('&'&'('& '''&&'(('&&(('H5񖞙O-((&''('''('&'(),.10/009<5-*++,+)*.19IF4,(())()))(''('((()*)'(((''&')(R*2F]`aXE2))*)()-7>BKNSUOLIECC6]p>F<4K2D*^J65+>/5ACE?:8;>m`Gse3($(?.2+,5OVFI빶ߐrҤ׊qwrsghKZHnGJLIFAACCDFGHLMNPRTUrXwqn}s蚆2ŎospGԷҢȭxigˮWxDDFHKMMOQOLn8߲y몁Բ䨂ͺЪܺګȻwZNyJUfL\ABDGLGEJHHGEBEf΋Ҡކǎ¾匂ɺ˚ԃ½m:+cWf⇦Hg钢軼Ѕx]h􉩂,i?픢դаs_*/ !! !! !! !  ( *Tºǥ( ! &- !!! !! ! ! !""" !!" !!"!!"!! !""!"! !! """!!! !"!!!"""! !!""! !!!""! "! ""! !!! !!! ! !! !!!"! !!"! !"!!!" !!""" """!""!!"!!!""!!""!""!"#"###""#""#"##"#$$##$$%$$$#%$#"$$$%$##%%$ %%%&&&$%%&%$%$$$&'''&%%''%&'&' &(('&&&''&'&'(('((())(*)()))*))()))***)*)*)*+++*+++,+++,+-,+,,+,.--.,---...-+(ˬ¶ڭꆗņ~󊟄ڨۃΪ툅վYƬڇӆť㐢Ӯ̊G !!!""! ! ! !"! !O +J{ìȿT&''(')*++)('''()))(()(**+***))**))*+)))*)*+**)*+++)(()*)+*))*)+,,-,,,-+(Yȶҿν윒Ǧķꃎހ񀂉ö఺ʱ×֠󀍕傀㾳òĶºѱ̷ϺݓǺՀöĹķڼᆂլِ۶ĿጝȯȦúçą䟅Ҡΰʘ…ϸ艔؈̘⅋ƿȱĹބóۈΧ拾̡␉ۋŵ淚ʼ̋ª聏ƿٷܧ񁓡՟曰Ƀ_̗Ƚ퉉͂ɮϿijΝˀM/3@DKBCDA>E?7Qa6PTZ[8C53688640I7=BKUS9PMB3*7J(0?#&&%"&7757857==5_`_VT:6m5aa7:<31335|T/=.^C_-F2>4.2.XCEAGIHZU^_YNej^PLZgh[c\d[aidTgcdddeddffdegffefffgfhgfgffhghfgggig fhghgfggghihghggghlihhhihihihhhghihiihihkZ:B>AA>@=:473NFB&69D`ghihhijjjijjiijkllonmlkqtnkkkllkjlmmp}zmjijkkkllkjjjkiiijjjiiijjkjjiiijkjjkjjjiijlz|miijijjklifjmosllopokS_\[wdKMPNca`bit}xuqmxurocfbcUpkgedebacdeebfgebbefccggfwh]upǒvTQ\TgOUuyGءrsܪuтzZmykhdgb_\[^^^_acbegiijjmװ̐zox[,]REowdԍvxΤjzYmEWWXY\]_acb`a_\aڑᶮwjϘvy{^XINKhkjZrbzY[]_b\\`^`_]]fKULFD'+SeK,($!23L*ZWN.@KH>"24'342712>E8KhY!&80'+.%$/+*=?9& BEI:RA2:RN`oob]akpd]~r͏}ZVTRUTTTSTTTSUUTSSSTSTSXi\ceUS[]VTSSTSSz8DzmXSTUUVUUVUVUVUVVUUVUUTUVUVUVUUUVVWUVUUVVUVUWVUVUVUUVTTTUUTUTUVTSTSRS +RRQRRPQRQRQPQQQPPQPOPPPOPQPOQPQPOPQPPOOPQQPPQPQPQRQRSRRSTSTTTSTUTSTTUTUTUTVVUUVUUUVWWVWVWWXXWXWXXYYWXYWXXYXY[ZYZZ[\[ \\]\\[\[[\[\]\]\]^]^^]]_^_``_`a`a_``_aa`ba`abaabaababbdbbccbccdcdcbdcccddedeffegfg +hihgghhiigikihihijTfocgyl_=`J?E8qn6778979FMLNPPIKF?9Ig4/b^`]U}o<<:IJL&&GBBBCBAEUDaXCPSs|ܤI JIIIJKJKJJKLWKKKJKLSxtvzmidmyo܉tho~ufthoxxz{upshm{}i`psgkv|uyRRRSUWVUVWWXWVVXWXXWXXYXYXYXXYXYYZYZYXYYYZZYYYXYZZYYZY[\[]\[ZZ\[re^]YQSORSRPPQQY^c_\caa^\`f``b_`ijhainqk\KP]^chtywmbXY`dda]ZWQPOKILOKCEE~nuywyzx{onnbofcd`^`irlpnkffbgvlgeeZm_WVaSS[[[WOXWZ[XUXQTOOJLGIIIjgXSQIMNXX\OJHFBCECByskjc`ZXTQRPTPWW[chsKCCFKQNKHC?@??@>>>?CFD@`WZ`[UW[f788762984RMBB><;:;;;9<@A?<9689=><=?>?;978<:<>68766620[WX3421a^^`b2ZQT,./061MPRVNSWQQJN+++--11/00^`_Z_Z]__10\]^_b\^^\_0./3276810;8.,(*%J"$'%''&##HJ%##"""$--H9',/@76HWzva2;ZACE:J<:=NH17F?KL>>?n>RsSQ2RZ&>$0:KB_UD0(0.L;G1*(-*$5$,!"/:3-9.E.74G5*;7.'308/,1dnqZPA52< -$,A3'"#.-&/&6%4'1$8;/*%"!#"" (% +#+., ++(3&4" <95:.():-'$%% &HRHVfvxaTle_Sbe]gPLcM[fkIRIsjg|ciSeUEWL:6;<;8527::64I4HJM3R;/3O3?943410.06BW/+/A:>-4=@:<:0./1,,W/WT[./3X-3899+6JAGIBPZ0,2//-3.,X+-1-VUN.1,O5425:.S0@@142AC:0,*,OJ.12.+++U,.,5.+PNUTWSRTQMOLOGEGKJFGKRLH>O<>D?=1D@:?365;:588345649AE@ONPOICC<8:;A<\5XW07A=/bEB=;94:HLJHECaYSPNNSRTVYZ]01001a^]`0]XWWWUTUVUTSTSPOQL0219,1<=>><>@>=+1W+<<^O=N'$ "$%$%%%&#$&$#$%&('$'K6X5BQ@:T?.JH?KLCLPNV\34A7X8HU238:<;o\WVSWXMQM(NMHNSRWV*5D7ELGF=77h33hde9=A@6687<@>537D>Wail_@KSV`q>@HKMSSV[``XArFCLTU^VNRRD>BBCGHtqG@;_eg?TPk]e9GIGNK[^V6b?:>?JAhnjIPGW5L6RMLPMROZSCA.J?@5<2J"!1358>9:<8#!" %$" % ,7+023%!!%*'!  +  -1,.8(+$'012/*932%) 2!+!#"&((6)NZ]_][^\_twvX\gnTqw{k`VRX`_SSMI?H:@ammYD[hg`SiseWTcuzlxqxmvXֶ,5ބۀ˷۴҄ܚ֔Ļ||_Ό񝎔֨𜸜ĝlavǦfc\`{e0_ikȨ@ݺD88I߅冯e~kуΟͮ略˳~z82?ndSZ/&"9:L=htם獩PUI?5*2%""3-5(!#!%3+ +   .2   % tniú$%  ,/1%4'9-   +    =L䧤C59!zӉ<;b=3}AQ.3/`B;vaҍ𦬬ybaPQG>­NSz€ʒyup|sg>@krҼނӷz|wru{~듎ypuu}rs{z}|qmqfjzojtxjqxzqs|˪蚚|tuujhbbb`beefklrrqxmhb_cmklkfafjlinmif^VV`\_^djje^WWYXVROOHAAA?<=?<699twurdp{|opzutllcfxh[h_[]WTW^c^bda[ZZ[tg_ZY[Q`VPNTGHMNNKBIIKLIFF=>897:6<:54//11.VULGBAAEDCCCD@DBCIGK1,.17><:742556644103331SLMOHEGJL%%$!10/321.-+(&#"##" !%',//00..,+)*+(+-()'&&&#"A>>&*('QSUVW-OIH#"""%144712/'&"$"#GLNLRPRSR+)NNPQSORRQS*&&&$'$% '$215*'$ $$!$$'L/*+$0)%%0."*)/0)(*I&8Q64"8A$/+%!$/)&F##$!$*< ! )'$ &-%<4%*%  + ''#! !WbjN?*" ++   + +  +     +  + +    +  F=5''&!#(&%! "%+-  .   $"$'#&) '&%+(! #('%%  $"$#"%$&%%%$"$"$ !$$""#&"O!%$%%"**(/ !#&$#!/*(&%$((()++-//-,.*)))**+)*))()(%##!&"! -0,!.40!()%$$#%(%(/1)7&+0697dVNHEEC9=5583;<=CE.'5=;;613a./b^`6876-,,*,,( !$..NX^`T=?DED=,4%(C*9")/,ch899=EEHONPRTVP=xGCJNMUOGJL@;?ADHIyyG=9ZaZ0M}ef7BCB*KIYYS6T+#%'.'CC:#'"1%2102..,1*   ~~~~~~ ~}|}ځ~|{|}{~|{zyz{zzzyzzyyz{ |~~}~~~ ~~~~~||}|~~|~{z{{{||~z{{{|~~~||{{}}{{|}}||}|}|}|} +~}}}~~~}~~~}~~~ +~~~}}}~}|{{|}{{{zzz{||{zz}~~~z||}||}|{||{{||{{z|{{}z{{{z{||}|}~}}~}|}}}||}}~}}|}~}~~}}~||}}~~}}|{|{{{|{|}~~|{}}}||}}|}|}|}|{|}|{|}| }}||}}|}}}||{|}|{|}|}|}|||}}}~~}~}~}~}~}~}~}}|}|}߂~}}~~}~}}~~}}~}~}|}|}|}|}|}|||}|}|}|}|}|}|}|{|}|}|}|{|}|}|}}}|}|}|||{{|{|{|}|{zyyyz{{zyz{{zz{{z{|~~ ~}~~}|}|}||}|}}|||}|} ||}}}~}~~}}||}|} +||}}}||}~|{|}|~ +~~ +~ ݙҞ凔Ňºձ탿ڊӃ艣\蠼ƽшԸŶϾI(%%& +$&'&%$$'''& +'&'%%&'&%%&%'&''%&&&$&((())(&''(&&'&'&((('(Q&''()(('*yڌÓ;*()())'()())(*-16637@MIA9.,//.+*2=>EQM<+))('('()&))('((()*,,***('))++))0DQVMLST@+)((')-3506/CH;05&R>C^T;Jl630;@FNVUVUUbUCQG\fL^D@<71-+,...137:@EGMORPKHII{Ė׷i7V4'+Y#%*.$EY}rv؀rٌlQN¶篎HILFEPR4]Yboe]lkb6;B?AANE@IJ9fbcQ1gY84l8876443Y1S78OTL`Q=()RZ03"3""%''08A&Eeh3H?1BD;KK:C,.TRQ/6.6:89<<96q3e_Z[e@:fj__c6?=8758;Y2F`GL7IWJACA=56-/11N54Z\a_]_Ypdmdh^QSW`Liopffe[ZYcb]VSX7XMD\gl]OK^d^ZOi^QOTMkeZScZ]hemideeefggfhgegeg fhhhggghhgiih ihhhihhihhhjgihiiji]hjjjihhjjjijjikiijijiihjO4859@ECBggjkjkkiikjkjjlmnqrqrv|yvslknnonloxuxujjljjlklkkmlkkkijklnmljkkjjkklkkkllkkiknzyjjjkkjjjieggjqopmmkhl[|f]rPsh|YazljdhdfioorqpvWs_~hbjtjffcbffeegijkjpstqqnles{orpJrdvV`V#~^LLItccвlډqp}sǫ͍rNxqlkskYfgkjd\]^_```cdegknh؝ڭƯJTH/nhn`clwvuyO\h`AxXXZZZ\]__`a__bfeg}ʹLé”͒^[{XQxxxy`^ib`H}ghԁՅzâen|uZ\]]^^^]\]]ƖhLD@?9F94XA/.&#!:8+L[+N+*N335/#8-*)GD/*:7@50';(.?/D:+!)=*#jFEG5?8,;*9LKPc_JaPus7UVBI=<>L8M@8\vV>}hM0T=6 -1())I/+,<#%))5>78FR=Cmc]qoSo~xIizeggLK;eG`dnЭpq>nrYש|euTUT-UTUSVT\VTUTUTTTPiifQTlm]WUTUTVbDqLYVVVWVVUVUVWUWWVWUVVWWXXVWXWVVVWVWWVVWXWVWVUVWVVUV WVVUTUUUVUTUTTTUTTSTTTSSSTSTTSSSRSRSRSRRRQRRRQQRRQRQRQRQRQPQPQPQPQPQPPPQRQRSQQRQRRQRRQRSSRSSRSSRRSTSSSTTTSTUVWWUW$XXXVXXYYXYXXXYXXYZYZZZYYZZYZYZZZYZZ[\ZY[Z\[\[\\]\[\\\][\]^]]^]^^]_^^___^__```__```a`aa``bababba`bcbabedcbcd cdecdddcdefeghhgihiikjjjiijjijijkklfj\dk}i`r_N3=onm678:::8HMABCDHKHBA`82//YYZZXymB7CHH%+DWTAEBllicbRobxPZwPdeV~W\demmrnSdm??>~9;E:6?9:887;2fpu9F)$@HH;D[m^RM+*(+-))%#$$!! $&$#&'(()+'+,+))#37?HJK(,FBBBCBCDKNYo:LQI{JwKKJJKKLKLLLMMLLLKLKKJKLR|xzzvvytzkuvz­zvrgxoohklfkssqwjkvxqjvkmlywSRSSSTTUSUVXXYWVVUVWXWWWXWXYX +YYXYYYXXYXYZYZYXZ[YZYZZ\^acb^]ZYY`l_^YQWPUQWWUZ^TST_\V\^a^b\`_Z\XW\afb^dnqk_JN_bjru|reZW^ehf\ZUVQJGKQNHJF}uiuurpqwnpxujkii^ojT`ikhklpm^a`dajh``][i^VT`^\ZWVVPTW^e_MVQRQUQUKHKcxOPIKMMIPCCDC>BBAA@=sqnli]]dc`aZ^`csAHKIHIKNHKEA@A@B???>AEDD>>?:967;8:945434840ZWXa100]^]`a2[XUQ-,*00,*-VQFIFGFFN)*+-1/-/..0//aZ]b13/][Z^]]^[XY^//11866-.641,**&%#$$G%'(%DGRL$!" %&QD4$:!7@00@]L3(00R@0*##!E7'"5",-+2??F1.:N=E722@A<5^7),&A4=?;&&- +,(#%4/>6.&*"!8.,5)'*12=<*6IGbJBHT9,61*!"$2/, %#&:)6>=/<:90C4 "%, &%(#"0&(-*'!)/2;%<%-)B3E2)#P%$!#CRNqGNifomkTb~UJQht\hSDoiWq`xsoU|WGhVdUfhzbdNHNSYL^ra{oJJ?27278=:26?;9343;;:7;8cZ3' 7;/0L3423301PC1J14@>84G/>?@<>6/133-WU0]-YKWQW481=OD=Z83I3412/XUT,/.SUP.0*V.99781,-.,S;,=904,(OKVM06M=:25=3?=:;9724:9@DIHLQJGK>C:=:7B>91Y^9F>D:;:-4887658@GNMFM\/WUSRRTSTUWX/10112200_^\^__]\YXXXWXVXWVTUVXWVZY/IH/539;>6<=AA?>>>ABECABDCEFA<56887745599<:9=><7:944546@:>:>MHH&')EDF2SZHA=;9;-.1/:/a:/-*)%')'$#$%&%%$$%&%%%'&$DJHD8=KREGGOAHNFWV0_WE:_>B51;A?;trhcaa\X[_gtvv;BKFVJ2CEB==t9;7naVb59?:5876<=98=@0W_6;9?KU^\b9<7D=HMTXVPK:F,7X5/F7GK[m=?>@CNOPUYX]U\S4HNFRTW\XPPB9F;CKMFDAh]_Sa=6BdzRVXvIMHLWZOX%@xGfQAJE7nIIHC[?NL_RGBGE90>;B7RHAT?Z^!!%&448>83<94 #!#$,&#((967-<12).()".!%& + + +264'" ++*%#52./2"45211,/$%#*"''S[aa__YrmwuwfV]^gRrz{snhZVS\]VQNT5QF9UjtbUPfleaUsfXX\W{vkhxms܀β( +ڀʹƮ巈ތ꬗u~π֎Ŀĥua͘ʱsw[CarZ/[wϖ꡺4?=i}ǻДotpx˩Ƚʉހͳݘs'Rw~txf@S>8,:6_kyy "qPxwۿͳċRE?>36#+!'%,41$$!$ +      + ./Dڐp8<>Ӕ1,'  + B(Tzn3(  + +  3 YM'>,K-K iĆmfcdg0ű؍祭}kiX`l@ )1ˀ~|er}unr[K1TT=<<ɤuiT~anNauRdi[Zmsr|~yPk:8;|1(-%#% !!$%gy{3."'((F[QG=#',//-()(%&&(*,)1V59=;pnnkdrmihiohfkhb|fbcUc]KV_b]_cfbVXWZV^^VTQO^TMIRPPMNLLDGIMTO?E>?:?>A77:LqdAC<>?>9>E'  +      +         $  +!R@0%* "(,"026%&3$!%.)2 # !  ! +5* (&##&'/+#(%)$,&&%%% %)! '#(%###%$"#&%"%##&!!'&$#&!$"#'"!$*.#!"&&"%,)*('()(()+*M.,-//-,,+++,++)+++**)*)'*' #*2)00*$" *!/!) !'"% )'0-"6" %+2;=8olaa`_ZPT\cpkm5>EAI>)8>;99j474h\R`349401,)*'#$(,&NT.22;ENUPW32#)6<;BGF@;)7 (A)#2)4B[k999=@IIMRSRTLTK4IODMKNSOHJ=7C:CLMGFCja_QS/3kY_^uFEBGRUMZCA1,*)()(()*))''())()**))+/12.+**)''()))+..,-7D?40/?ND-*())),2<=?EKONJH+,--,6)k9$)3@BLNevy99TM9@ABEHJqeiLT~dNP=O2 ,/23103:CBDEHNQTUWdQ{svg;B7&!%+7&'(=7M->gpaMaɨ癜ccTaLoseLKRTOHJNQPLJJMKLT[j]jϬYr|oӸcyz\^uZrd{iSN}`wFGHIHJLLKLNPQRQSTr{iOgw”䞍ꍢ㟱iZUKudgr򛫣m׋錑􋑒NJů׀ҍڣ촙nٝͷ#lδϞp񌠚왝Ꟗҹ̰O173B*% !!!#꩗㾄# !! )Bلb !"#""!!"!"""!""!"#"!!"###"!"#""!"!"##""###""#"!"""!!!"#""#"""!"!!"!")!"""!!"!"!"#""!!"""##"! !"#""!!""#"!!"###" !!""###""###"#"##"#"#""#$#%$#$$$#$#""##$$%%$$#$%%%$%%%&%%%&&%%%$%%%&%-#%&%$$%&&'&&&%%%&&'&%&&&'&%%%&&'''&'''&&&()(('!()('')(())'((())''())((*((())**))*)**)**)*+***+**,-,,-+,,,+,--,,,+,---.-..-./0...-.-/0.-./...--/@蓔ߊ׷Ŵ殨͓Éɦ˫݁ڈ񇌊ŹݕŻ؅􉙆˞؀=!"""!"""!! ! !"!Q42yƓ񏇐ǿ?,'()*,-,*)((''((())())**) +***+*)**)*)***))**++**+++*+*,++*++*++))NC5`TgEHY0*Lf탅䵭Ľèج®٭퇖̪ӂ˒مƲ¼󄈀큊ޅ񳤖℗腋Ƕŭ쥴ﴪɼް蔩Ϳųְ̮ݻĜն슌¼ʀŅȹĻǯ܏ٯΣއ݇ԨۭͳᏐ򋌎Ű훧э͑䐓㎵Ƀ㮶рɺ꒘ጯӐĞƽͽ¦璡½ŽЁἪɍ۱޻Ԇ縨鐽ԺӠ·ؐ^ϕ򄌤ȱݮ⒠ѽʄ߿ഛ񇙡ܰ,:]SJIGPT6KWegYa?:59?E=@HHCGL=89d`;_W:DC><976995SGG0AGQB25>,=LWR9d$9$(**4:F)8QfgFBS[X6@D(<<.?CGX.-4;9648;.V2465dTfMB@<7bW\_8AA@:[4DcY4RQ=>RbE>SNLE<28:<;R]5_bbho^jfeWekQPUfPgkxmkc[VV`c[UQRER[Q[acbXIYZYXn[OORb^TYW^ekHgef>ghgffghhhgfgghghihhihijgiigijijhjiiihiiijjijjjiiijjkikjijijjjkj_ikkjjkjkjjkjkkje97X@1>[U7>7/=<8=9;?:::<KA,)@%A/$8H-'CBD+#P`ET9QGsRH67[5SNjPoHazKy19N90=I\U9PbPxVTs}K`2/Z,,WXY\XWV}XU>JF34CRP?D<~þitjlqhbXefBVHsgX]|H_`dflinibj><EJ(/%CCDCAEDDFML]7Md[dNJKKKLKLMLML\KKN}kq|uqhj{vtrp̿tilsojqitpogcqu~yquvuvwpjjxss\TSTSUTTUVXWVVUVWVWWWVWWXZYYXZYYYXYYXXYYYZYZYYZZ[[[Z[ZZZ[Y\b}cf~\]d^]RRPPRSQYZUURPPX_geaa^_ZUYX\\ZSW_ga^clokcTOMN\]anxvk_YV_aee`WZSJFHJDKqs`zwusqpx}eadzif__hhhefhmkkacb_d`aajcf]^T``\[PSTWVZUWPRTLOOOKMRYhbKNMLH{CDC?@AA==AGEFAfXVSVVYW]2314-.0(2IMDD>>=:92+$%*07;=ABDFFDBDB@<<889676121/.35\ZYYc3320^`^120XVV,-+(/302XF@C<6>@LP()+0/..-/000112220\[ZZ^``]XY^00148;;7001/-*)*&'%'()*)*IR;I($"PCH>B5,48Q7hktnl]OP:FR`fcEAAVdLO`z|vdU}ZPmFK[^^y~uhXFFQMLX[^rwxqLG2U77:;<647?86748<;98:,J6. ?:*$$C=7751304@;=-4E=35:J@?ABA:/1443-..-SS0YXNHLGG-24-M?G=>AEQ876742.WVT-//W-/.0/XO8436-.S6J/A6=*7Y,KNLG0H>1---*.420,ROVTUUMPSPMGB7EKMMFFIKGF:8>:@67@C?@85=8:/66=@:?=1E];:<98<:BMVMJZ[XURSXVVSUYXZ\1/1223330`\]]^\\[[\ZZ[ZYZXVVRTTY^.0/0.3/7;>><98?CFECBDFGG?;876868575259:88><;8013254277=<7.QN;)+J=GVQMB96:9.-PS9F.*=*)('()(''%"#$#$#$%%"EAFGJFC?>@I1..0TA9EXMVV-XTQTRO3RSZNF@8;=6AZ-88<=;;omg24ggox:9;?GE;66=;=;p;<9ikc42M',Z;AA8k^NEDA<>QR81TXF_/<)$$'/4:906# "%"%**&(*!77 <0 "'&&#&+!()0 &33%%,1.&!"$4*3'#3.//[.+&&&/#%$# -;,[aejnYfih`orTQXhUntwrfYRSZ\VOLLCNYLTaig^NadcbyeWUXnhblkwքׅـɞ0)+"!~$څۀȶ½Ϣ݄Ŧ؜ŁÿӢDzݬ𩲁ټΠ嵎brmcgƉϲgbtPs^*s榕ˌ땅LJۭ뎮\2Haۃک툍oR_t߃䑅Ϝɨ咔x++4GcDPM81>0/72\jC.7#<+!#Q}W6]˨擄̿B>"5A@ !*,!%.1+*/%$' %! +   + +#,  $1H:Q:d  ;?*-TWॡ5 +   +  +    76젵푀N \>Qh504rȱw[i]sθkA@{eľƄ ̈́΅̀ͱvËnw6[:vjp^//00.406C;rLY*&L&'PSXdbhqδ[K;C7#$?RQ<=7}˔zj]za>=:phm6440./.+-,ZUSO*ONSWVXWOQT/012211542351/14B3779957;873VPMIKJKJI$#! *.,/,+*(&!"'(+/35577501--.-,*'&))FFCAI&&%%LQP)*)LIH$# "@5.-%##'' #$%')*PQOPPPQOKLN&$%'**)& !#" /"7=2,..$&* ;'57-3d)(!4'IKNJJ>53)3@IJF,,,'**$"+218(!!"$*=/&!$%&. *+   +  7 $ "% *+'!@TR6*CO3%' + +  + +   & +   )'$#EO:# !'',3"'<2  +#a!!  " ' !#&&+,&#%" !%''%(% '#% #!%$#&$$%!#$#" #$$ ## !$ %%"%&%#% !,%*$",+))((+++(),,--0.10.--,+-.,-+*-,++('''&&&)*4"%!"$& $&,/31-) "'"+#()*)'('&%'*""$1,2888;qid12bcjq857wGCILKSPAEA5?9EIMEMlUKMVP/5Zo{POdECADNUArT51,*14=F#E%6!##;71,,)&%/(%%(~~~~~~~}|}|}}}|}ف~~~~~~~{{{zzz|||}~~~~|~{}{{zz{}|zzzyzyzzz{{{|{|~}}~}~~| }~}~{z{z{{{|~ +}{{{}~~~}|{}}||{|{|}| }~~}}~||}||}|}|}}~}}}~~ }}}~~}}}~~}~~~~~~~~}~}~~}}~~}|{{z{|{}|}|}|}|~~|{{|{ +zzz||{z|||}|}|{8|}}~}~||}||}}~}}}|}~}}~~~}~}~~}}~~|||{{{|||~|}}~|}|~|}} }}|||}}}|}||{| {{||}}|}}|{|}|}}}|}||}||{|}|{{||}|}|}|}~}~}~}~}~}|}~т~}~}~}~~~}}~}~}}~}|}|}|}|}|}|} |||}}}|||}|}|}|}|}|{|}|}|}|}| {{{|{{{|{|{|}||}|{|}|}|}|{{|{zyzyzyyzz{z{z{{z{||| ~~}~~~}|||}}|}|}}}|||}|}|~}~}~}|}| }~}{{{|{|||}||}~~  ̈Ϛل딲ѺˆΣΡc䪾ӀͽνóϻȴƹK,%'('&''(('('(('''()('('''(((')(((&'(' ((('&('''((()''()('(&(((*)3ȅN-+*)*-/269<>@CA?60..,,-11.-/4:6.**)(**()))*(+.,**+/33.*+**+)))*+/3/.1:82-,-2:?2+)*++,1>;;=CDBAE26',)+<<+WA?OQ?1I9;<>DQ^^WKHB?eKFYb 5,08?>@AHTQJHFHLOQ[e~tky3@DU'0X:%##*0KW+AZkY¢I{zԤܚʵ籰~~դrp_fMLOIIJLPVZXUVZ[XTOKKKMRU|{}gevy_zp֬džx٘~\t`^)[ɴru`}v`b^__ݗWJILONMNONPSVZVyIuӔґᄈëށŠȌb\SŲمʭӸ開ח耎˄Ό䀇ÚʨμژvyۇԩIIۗێܣֻռҞΠيPQO:fMaہyNգ7[Top`gf߈PJ1%j[0"!"!"!!"!"#7hPf$#4 "&ڬTIJU6!""!(U׀!!#"#""!!"##"##"""#"#""#"#"#"!""#"""#"#"#"###""#"""##"""##"""###"!"#"#"#"!""##""#"""###"#"#"##$#$#"#"#"#$##""##$#$$#"$$#$#%$%$##$$$%&'''&&&'%&%&%%$%&%%$%&%%&&&%%#$%%&&%&'&%%' &'''&'&'&'B((''(((''((('('(()))*)((''((())(()))()*())*)**)))*+*)))+***+***))*+,+,,+++,-,,-.-,-,,--,./.,-///./.-.0///-,-.110,.//0/.-0dĪ聇Ѡнɇ駁ư俓ήӆ悇Ƚȶ¡Ǽl"! """!"!"[!"!!#""!  \ěڀ덫ñǻv-'())++,+)((''())()()*)+***+**+***)))***))*+**+++*+,+*+*(bp݀X2K򋐠Ե׳ȯ󉜨胏텓ýŊ҅ǯ򃄂۹󃊌腈񓝃ӷ主僊σȮȹ򉥡ʜָ᷺֪ܴ̫݅Χͬδξ؃ւɶʀγĝ̚ʊȹǓ䧒겶̹е߬ũӀڞǖ˝ŷҴҢӕ򠭠Ʉ٥ȗ߬ȼôȾ𖎒ǻũ큗ƍᱭеˏ牏ڑ㾴俧⛍ŋDzۻ妛`ȷҸ󈙮܆ƃ䖔ڠ򞘤⹫ׂ͈ꨀHW[TMMLIOH0O[ei4=D9a8B==RJNLLC38<7]Pl_GYO=9:;544_@:N;?EA>\F=>OONZnh092'9494++D6H^ER^<./HY[`fvfkoiYfj`RZ]ak_}wpfZLXbc[Y^TNKZYZhhaWFWMXZTfVMIUKVWTUWX]dmWgfgfgghghhjiihgijiihjjij&kkjjijikkkjjkikjkkjjjkkjlkljklkkjllmklk?llkklka1-+73./T'5<;27397+S.%)08;jimlllmnlmllpoprsroputusonnonmllmttom nmnmmmllmlmnmpsrololmnmmmnnoqnnntrpnmlmuzpllkj]Y[bfdgo_tacPOdWT[|y[eXXa]x^Sn_^__bmz{pt'su5mjlonqpr|ymhikmmnqsȈrof}[olXogbzthhQ02_wZTyljb_Ŏ⽀ƻ烖kANzvhdc_bbdhlommlqtolgbcccihizоqQm^}k˳`louoKwkk1܀ppmnpx]Z\_ba``b``dghikli\d|qcznYOa16W-(1;(K)5'9]\[B/R5/;$@26F0#O0/>,--&,"+H;&+',9JT>(#$'+$#%%%&.& %+/6=:;4F`ah:awtyzCb`zal@I{~nwxkqW[gPzT;EVVWUVWWVVWT^e[kUNZWVParxycLS[{\XWWZ]PF_ZVWWXWWXWWWXXWXWXYYYXYXYXYXYYX +YXXYYXYXXWXWXWXXWXWXXWWWVWVWVWVWWWVVWWVUUVUVUUUVUTUUUTSTSRSSTSSRSRSTRRSSSRQQSRSSSRRSRSSSR SSSTSSSRTSSTSTVUVVUVVVWVWWVWVVXWXXWWWXWWWXWXWYYYXYZYZYZYY[YZ[ZZ[[\[\[]]\[]\\]\]\]^_]^]_]__^ _`_`^^`^_``a`^___```_aa```baaa``babcbbcdddcdccdcdddeeffegefeedeeeghgfggghggghgghhijjhihijjkkjjklkijklkjlkllmmlrogxuq};dMgai689::;<;HBCA@r~S[/\LO)+.___KQR^C>'2&LNLB>B=tĵgrnomo[\iyS=\yeVg~>B\Y`jkghgei=99@BH@89419??@<>;v:;:ugekpmpprxADCDFECCDGIKOIEDEBCAAABFHFC?bVTWYb[[3432(*.*5GND@<<663/-47669;<=@ACFEDGEB=<:79562.0\YX^/[WUTa531^]`^/00ZZWW.0S(.)'I?CA678;GN&(+-.*-..0/14445373YZ[^_//]/110020332./2..)(*'MDKMFHHKEL$>C"#EGOA9H*,">:58@cgt21I&*-'@D29B>66%P>^qs>7eaU=]P^ZaC87;88GB64373/,./YP?511,&%%-9"#/>544>E6.B38?F:H?, '%#:847..,/.-6.40.01#/!$(('88?*.2@FaI-86)!;JW]GBGHbkvu{i~E>,E@;8?=3/B?9<;39<:886E.;N0])+;@;55544289BH7H@-57;+?>BC?5.3421.-,.VW00K?DBIJV02+--F18?EA,77764/,+,./0-,.0.0DC6946+1T*H8<7G54C5@K5+M=40.-/-/350-(SQLVRKNJVN8<@IKKJCFFJFB8ACC@<7AGBFC@9:GEEF7`=E>EFABINLIFDE?8<><,0207:=58035a29:A;?@>GPTMAYXW[[ZXWTXY[[ZZ[/010261^\Y\]YW\\[Z]Z[\\]]\\[ZZYY\[[[TV/3-1*66-L1*.79BC@BCFFA98767979975469:45:9833;5485:<>B26-.M+4/QG;IME.*06%BS`I?9((*)+*('((&''!""!"! =<9CDJKKF?>LJL0121WI>I73WT[0L23GWV0,64;B68716;A[::5/34/F>22---/32.-,&$35&2767<<67;EPONM65?B8:>=CD-1535=LMSUW]ecNh^mGGDX5B=9:bPNEEChWCEV>6R5S3%'" #!0379"&5% $1+.++%!53<2$)'*!!- $($!$ !,:7 +  !/")1! + )#& 00.'"!82-/2 -&&%&$###-"2MUajwbbmg[jrbPY\epf}wjXHS\\XSXNMH]ZVflg[L`Yeg_paVP[Tbcadinw؀ֹW ! ̹݀毪ؤغ־۾½޲€︵ܮҧԛЙpvˢjکqcbwH)>ֱrّʨԔsrF\|piH˳׋ǾyK^,0*=2_0#19A;"! *4F("DE*:iV$Sm8"##.7걒[mT܃ʻܟ׬}Fπyć܇|6[Hqf{\././/477A;=<=zQO&MCE"%)[dhYmoȠ_?<"EML@8;:z˓~ejipK:\zbTkADBfco}u}{nj735=AG;0,$ " ("$!$+jvp.($!#'" ARNHD>&% - &,/2''&%&%&&')*Fe78Hc`v̰݀q|xwooksojxport~tx~zznTgsotzyuglcfjhfhdmsjgdjiojinllfb_^]bjoj][bccfkmldc^_]XXPSX^b`\RDNVUXZTNE::=86tnilnfl`ywlhgbh~llvufjdZiYQUb[\[[c^X\gVYUXZ[USfT\WPPQPQFDJID@EF?EHGOA7347CI??A?;9<=mq:630./.-*,+W+,*VPQV]X]]Y\341211/-,//361/./035768E@C*&$&4-$!/,! "$@0  +"$%#!&(*!  +  +  & )1I4 %5EJ-Ye>BCLN>3# 3@'AA?$*:;9=ELLPwiQ~iJK;>@%./8DIKJLPVTMIJKKPҞZM^Z\4N/D`faYY&3 )#,GA,)6P.80b[ƴlV͸ԋjꍉȘQxNMMMKILRVYZZ\`]\ZWSMLPPQ}ꞚhuVȌbZq`{rX]T̽ܝ{Vz~qkllkȀbTOPRQOPRORVWUTSSPm`}ʺĮΈ͘Ʊ̞֫ќgx]ȳׁۤſ摇ᑾ禀ŀм؅އ𤒕Ԛ֝١͂뇖ʴ㒚~ZɕėٱƘгʼʻogªص[u΋§t?C1RIPr\$+"7>:#"""#"""#"!$JY2@92 )J˴O;$9D!""(KՎ'!"#"#""##""#"#"#$###"#$#$#$###"$$##$$##"#"#"#$$# $###""#""#"#"##$#$$#""###"#"##"###"# ""###"#""##"###$#"#$#$#"###$###"#$$$##"$$$#"#$#$(%%$%%&&$$$%%$#$$&%),/,*++*&&'%%&%'%&%%&&%&'%&'''&&&'Z&&&'('((('&'''&'((('''('()(()))((()((('((*+*)))()***)***)***)(()))**++**+++*+)*+**+,+++*)*+*,,,--,,--,,,..,-.//-./.0///./000//.011/0.0//.1Lןʃ˶퐔駀˼ӳ愉Yλ􎌈ߣ﬇J#!"!!#"!"!"l!" +G̯ǧɼz0''(())+++*)''&'()''((()**++**+++*+*++*++)))*++,+*+,++,++,+,+*))D쁉ɽű¨Ƚǹ̈Įꀈ타ֻӭꀆȣη庣Ŷ攗Ԉ؆ѽ׎ѳ׀¤ۼԼׇʓɩſざЫϴĚ𞢞׺ּžʖҒ̮瑛퀚܏ꁐ࡬ɯחˆ˼ض‡͂İۤ¥¿낐椮ܖ陙ٌۣӴŵɼŷȾύ񖬱¼ٍ̈܀ب񠠕ȎݼشӼۨѷ΋삑cɿߤݢ䆟놌⦚]..XROOJITJ/H]9hc?@h6DCfHFHJLO>8:6gBsUMP5]889863WL<=l;ib?EHV.UXR>Fe75YD@/7*+%'!+/>6IMVJ]?#+@&(4:7+G@1=GR14WFQ17WeagC`FFC;=ZVVZ5_bcwldol_YlkXa\jp`~rl`TWZ`^]`QRIUZ`loo\GQ\gL[\QLVP[YU_hfsAbhhgghhhiiijiijjkjjkjkkkljlkjklklllkkklklm1nllmmnlllmlnllmli9357744D%FF]4820;98>?>;><3/1}dlm4nnonnmproknqoqrponnpuomnomlqrnnmonnonooopnnomnoqqonnonnoonoppopptpnouvpnrqmmmlf\XP_cbNYQQoUdJe}SMqla|nuuYod\`^`hoopwljkYKZSmkpruqpquqkijighǠ|~~]o]qQQH?lMdhIV6BsHnW\BKfϕ{j}鎔wUwsheefdceilnpopsrqolicdhhe߄rqkkS^{mkmqhlnƭidUʊZfI{yzz~Ʋ4`bcedbdecehkkljki͓s׀ȇěutzjiqIHY\)rpfN{JXE{nlUhc|~yg?5@WR8>1Z83Y8#;Q/;6G;0J.,7/KUQ3&A.[O86;28D$;4DA_;CfWSXKl{~C,19HW42::J::8?acoo6ABA$*=3Z\OJFR-)'$((&'&#'#CAB"$%%#&&)*(,++,%=+3A:p99qnljktC{@A>=@CC?:;BGILMOFDGDCCDBDEFGC>\UWYRQVY6740*-)06EL@:762035998869::;==@ACDIGD@?<;9562[[WWXZ[UQTQZg3ead31154.YZXY26N(,'KCC?2879AJ%)).,*...1-.44324731002`0/]^/02779<=;658324/-NMFHJFE&'H"#"#%F?EA=89E%"826@@e[K[`nMM"&)UHO0N?LCB7j7XnSQWNM<33)A5P]TMA2//<1='&0$! !'!",4 &4%A+H%%@Oh]R`hHs@A;5;;A532?>;<95;:9762F@3DDE(*54566570?:E7,(:5<;:>CA;5220.1//0VX001B@>DJMS.2OS1Q2;AIBDH89650,--...-/-V,.E=J84-,-W4.D;GD3P05C2M$e:61-..---11-),NQTPJOKPF=IGLGJGAGDFKE9B?E??@MHHG@@=DI@?4;4BA;CDAEIPIHHCC?39=1E6:Y:@6-538:VY8@C@B>BJVSNKZ-000]W[YZ]][\11434200100[YWXVYXVY[]^000``a11a^abab121344420/132+0-75;9@=CA<:<99;966745676447859,66024378:7.6)M;;=?@CCDGIG;YWVU-0.3.I6;T-RDM0O6HQZNN994583451/ETe;?9ZOLM;@?A;7bXMM]f8:9Cd@rDK5-=(#-T))MOG<;IE:<<=>(45661BGHPV[bVI%33BR0;U2&5DC=JAOKOs9<:8l:M39GCANOc\ln=kdpe\GarIW;I;;msBK9\9?9=9aDBIG9>BYMY'$"!  (#)575##8%$8*')*,.#<&G+((*&$!"="<9"#"$"2( +''-)4 %( +517%5&#! 0-+.#"&&"#! ,-M^buk]ji\XmlYc\krdwo`PRTZYX[LMCUY\iuucM`lvVdf[S\Xgg`pҁ3հ:$lѹɚܑ焋仢뭑񱰊ڃЧ΃ֺĖ옡޲Ĭο~]miusyY>}刌绣̙ճìh\fϞÅ]YQሬ┑οΝ鄇ڍzi=$%7y9%"$ + @%%%$-f'6CN.(:vbc3&#-. *2*. +'OQ/!1=20#&.! 7#!/"! /*% ')  +   6iBY+?`ǝz +   % &l     6}4?05T凘t9%3=YѤȳ"1&3 ?٣ՍZSOԥŒ󬯰´ꇁȆó{uDŽH9Sd҄ӀӴqyʖ|7/Nqje_1/./3577><;:wzJTIEB>?H&%SS^fu׾NF? LJK927߼yю}rtPN<]ymVdCCIzi|}yxyp636:0@D82,#!#*!"!+Ucpn.)%#!"GMFE>9$"#='!%)/11((&%$##$$'(+8JB6Sjyijx}~zɣxolrkxt}szvndrpzt󖛞xsrqmi_`giilkmpkjmhƻbda`ailfhb`^[bhpdX[acakmfgdeaZWVYTXXZ\[TMPX[\\\ZHA:9849plmgelpqx{pgdefnlah}vheX[ZYZ`]Z[Y^\PP]^VTWVZUSWWZ_VPPMOMKGgWDBCGFFDUF@@?=8:=834')+)'#%!!"%4/2:5=6+'#=;*6//'N(=S??=33(!"+;B."".% %  !>#:-!+-)#+"   +  + +   ;4B0"&%1#)+*AND8( #    + + + + +  !&    %!" 837& - +HC,( "+   +  ! $% !&'"!"%#%!$$ &* $"$$ 2!#%" " #! #!#"" "  %!""!#!!!"!"'##"***  %+(#!*-*,*,..,,--,.--,,,-.00111/12/0M # ! +"%%%&(*),--011,&''#*%$$"',&$ +4 .'&( "!"20*,32!1$A),' #62431372,,,+.*+--3N=STXR1.4 2<;@BHM@m8%$/<%.=%'3@4D=>LROSNMTVPMM4uHF>LEDG58;?:G@OIPt:743Y,>9>EDBQQd`so=hdpaZ>=;+<'-'-JG$%4!$!"!;,,/-$*I"'' ~~}|}||}}}~ց~~}}~~|}}}~~~}~ |~{)z{~|~|~||}~|~||~}|{zzz|{zzy zzzyzyyzzyyyz{||}} ~~~}|{}~~|{}|{ zz{z{{||}~{{{}}}}{|}|||}}~} ~}}~~}}}~}|}|}||}~~}|}~~~}~~~~}~~}~~}~}}}~~~}~~~~}~}}}~}}}|||{{{||{|||{{{|||~}|||}}|{~|{|{zyy{||}|||}}}|}|{|||}||{||{|||}|||}||}~}~}~}~~ +}|}~}{}{~~|}{|~}~~||}|||~|}|}}|||}}|}|||}}|{|{|}|{|}| }||}}||}}||{{|}|}|}~}~}~} +}}~~}|}|}~΂}}~}~}~}~}~}|}|}|}}|}|}||{|}|}|||}|}}|}}}|}|}}||}|}}|}|}|{||}}}|}|}|{|{|}|}|{|{|{|}|}||}|}|}|}|}|}|}}|}||}|{|}|{zyzzzyyyzyzzyxyz{z{{zzz{z{zzz{z{||} + ~~}~~}~}|}}}~}~~}~}|}|}~}|}|}~~~~~~ 򀅁퇇¯͋㧮޼԰Ѿҫοěo򬗊Ԯƽ{(''('''('')*))(('(*(('()* )()*))*,..+*()*(()()()()())***)**)')*)**+)(**5ޙ󅟙Q,*+*)+,*+,++*-...-../.+,,,-00//.011/,+++,,.,,+-,-,+*,.35.+,,+,+-020//-.--081/3;81../..,,---,/0+03363+&)/^30LdL|0DH9SAGc}uF36<9BEJHJEI/FG4<3.BI5-9FHJJNYa^TQKGMŹkUFTkz.;EH]n?JI86<(7:>D4N2KxgO𢎑~IqMNRRMMPRVVX\`cb``^eUKJLPgjw䂴djI^bWɾ˨vwMux^c̘jTvjvqmkd`or`VTTSRSQRVXUQNLOp}gZέۜ嵤ܜ񊫻Ƭ֋ȃҪ缭Zݥʩ𜶪ͭ󚿁ڽdẓй֑͸޵Xi˳ϙД䇂ԝڋԻ犄ɚeߊ؛ywꌣ܎y0K0>-4\jh+)/!$"##"#"###$#ZvfJI\&%'HU!!.:"!!#'7ݐ6!#$#$#$$$$###$""$%%%#$$%##"$#$$$##$%$$###""# $$$#"##$$#$%$##$$#$#$#$%###$$#$%%#$$#$%$#$##$#$##$$# $###$$#$$$#"$$#$$###$##$$##$%##$$%$#$%%%$$$%&'%$%%%&%$%&%&&%$$$%&%%&((+..+**)('(&''&%& ''(&&(('''('('('((()()*)()()*)(*+*)((+*%+)*+++)))***+++,+++*+*+*+**,,--,+,+,+-,+.-.-!.--..+-.-..--//.0/0//0/000100//02010011105@ρ񄆊ۢрȶć宄̥ɐ׽鄈[脭׿۴ưͣI# +"#!!!###"!"d!"""#"!Ln˴؜ˣʯW)&'(*+,+*(')))((()*)*)*+*)*+*++*)**+**,,,+**++,,,++,,,*+,,+,+*)0ҏ􀉇ܾǼ¿Ѱڰ傒ӀٺӮ𖩎ոſջ̵ۇι֪–ͮȼǵۀѭȸɝ쏵ήƷ≊ʅǴѮŰϻ҈֡̆Ԯޫũܿ™ùяΰۿك׌Џќ¼˙ρ߄ܑ̖ܰ捇߶ᠤ³ؘޱûϵǺ噬쏵öɻǽɚю揎¹̧Ɯƞuׇވқ馲苝턉잍ꀃзՂ€W,.-QPQQPT^A8R898:=8:;FfCEED@IH>@<6[Rh;YP<;C<;:2WL4D;BC;IEPPVLVO5>SEX7;<=57%%*#8-F%:4?;26:9?@59=Jinnoomnonpoooponkknopqponppponopmmoommonnpoonpponpponopuvqoponoopnmllpnooonsqop{wprppoonnomnfb`W_deeZSKYVVCigToWdlrfXRcYgiooifdWyq]ufZzFvnrqpnpw|woniacin|spYow8ubml{,{}kh:pu^OZSkY׮̐𸋡tyyjggifhkjljlrsusqqnwl`acaqٳǢfUmr`Vfoz}q˃{e|od^Z]xy_Wtv{wqn5hgffedfefijjjmqmʝjќڼv}pvtvoat_vUUiac}GuW{t~ߠCnoRŊbrشoZR+RU~7;P;gDSHPGIAF]TA\B70JYBQbFO0]E:3GWA=F$&9%1IF,0/3$@6U/A=7HN2_F1@)A:*5-,'K'#.$/+$@AOZ5`KeqdJEDbWeu9SJZ943WOJ80Al:NHP[bF'%D%)++%(' '*4>61X>l_Xg69:8;<{|CBB=Ka6VDDEBDJ-RYS[]BK+-"/PIJ95fùcsni˾ibZvyt~PSciir[`<:Eg]nhgbc_9987@It:C;377E89==2cqo6BEC&(54TVKGG+*%%&'%)(&#(%"#""&'$#)',('**++#:,7=FG&%@;>AAB>>?DFLygQcL MMLMNNNMNNNMNnMNNOT~wynrxphn^tgmsbliwsx~y|nsnvbWlp{kUTSUVVWYXVUVWVWWXWWWXYXYZYZYZ[Z[ZZ[\[[ZZYY[[ZZYZ[Z[Z[[[]\[][[\]\]\]cXg_]_bebYQOVȳ]\ZTVVUX^b]SMMPQWa]V[WYVSW[ZONR[_aa^\glmbQUVZ_afdkqxwpeadhmliʹSJHDABzzrqxv}mlsrpyunv~k^[aegefcb^lbOMSce_dfnf]]glf]a[OMQQSQMLUidUTW^XQVXPv][ZIFMGKIJIEA@BCC>>=66772,)RMMFEB@H'(%"# #$BBQH?>?8I$96,>.20/4'44<>5#!//00319.+-0(#&"21),./0-(!3.?99+"$.-5201=@87.6BA50#lfYWAM.$M=>;<;56;87644[+PL,3..\3144536864@-351B+99F@=A@=64510/2.,/,-3.V@F;JMELO0/PNOGUWL99GP:841/00./0,0VZ0Q/:275RRM/N(GM;>^TO/93<2C650+,/0++//*R)MQSMKKPFEJFDIHIGDEAHKX@>E?C?AIGGECDIA>?::>=DC?AEB>JNMFG@FB92?828=AJBCECFRRF[/0210/.///0100337655520_UY[\\][[]\220_1442eah5767:8974a\UX\/01.J5F-<;4><;C?:>?;99787886579755-)*,./-..078)J?:TTC?93/ @6J\J/G@&)(()+*'&&&$#$<76:>;E;FUL_@=B?JTtlXJQc::>;8YPKAER.]fiA6:PB#!"&-!,! '7%%&&$**$$!266/%%#&"''#("&$%$ *"* + +!()074  %) ")+)'$),#&! ;.2)+3##$ & $!&7%Z^imjsmgPklbd_irzzwcRTN[[\]TIFOXZcrqiWgkvkdkd[SSeb^kk|݀ع6*$ !;ź睚Ľ߬־ґᓂ˴e֞⢴撢恷͍ʟ{lhsyɖhi{ŒԒ^cb}o[SNXŀˁƠӪ^"(+.+#$I +7%4,$G7vN4&07#UsN}UQ;*/N#. <#,#'"$%'7,"/%$*6!.6'(8(#-3+$' " ( !$+! +   + +   +XM%Λ(9/Ba}"( + +SP!2:/:  + + +&&bKF8H:/" 22%oƃxy'6G%B̑řWxؓăܣ͛ԧەΫ㍣}ЙEޯ&?=¿ÿ+Ʉ͈̀zmvbI<1*H=whZc212/48s|C=>|=JY*I?CA>BF)KZ[oP="#"JHJ61eޛwƔ|tfNUgmqsZfC% &(..&"%%###$&(+1iN9Y|wxlpazmp|lop~wwttdSasgxԄޜxjccdd`YSS[qppjidchijge_]^\akjdhbb]X_gi\XY]`ceebfcd`Z[WXZY[RTV[^]Z[abda]B8843kkg5eichvs{jijgdnjfmrcVS[]]\]]XVd]NHJUZUXY`]TV^b]UZSHFJLNLIGKZUKIIOHAED;YGII;8w@un::8;=:63431//]Y,+)O))+XVSc3531/0/,-+*($(+-0108.,/*-/0036<<::_WWRQNLJL'##"&//  #'+,+,+,,*)&&%'*-32323233.-*KNIHKILEDA=EOPPLIH$#'"A@A<$*  55.())$*---!"&$"#&%LOQNNMN&'%&*)'##'&$B@;45723'+71'""*("&$$!-$3).D')"-&)0%4233VDEMJHKL86-%#7>?A5&"' $*+%!"-<8/' !1)&"-"$   + + + + '"  &*"#%/*(+"9.* # ! + +    %)" ""   + ('!&%' *!I4:';' *%% &G:5!, &"    $ !! -'$ -&"%%##""#&'!"&)#%&#'$%v.)# # $%"!!$" ""#!! # "!!! $  "!$&%!!( # "!#((*k/*-.-./.-//0516.-+-.%# +&,#" ""&*(*,/.//-0531(+'$'" !%#"$&#()*&-+),6 #!!##'&%! ,&/@ =0$7+.&(02569(.1,.C(*)22\;MPYOW*-#*"9<;>GKB:'*(7>,:*2*I9C@9(1(&((2?H;'!09 "!!51.)-8$986$~~~~~~~}|}|}Ձ~||{~~~~ }~{}|{|{{}~||}}|}|zzz|}zzzyyz{{zyz{z|~~~~}}|{{{|~~}|}| z}{z{||}z{| ~}}}{|}|}|}|}~~}}~~}~~~}~}~}}|}}||||}~}}~~}~~~~ }}~~}~~}~~} ~}||}~~}~}~} +||{{{||{{|{||}{{|||~~|||{}{|{|z{zz{}|}||{{|}|}%|||{||~|~}|~~~~|||}~}||zz{{{|}~||}{{{}~}}||}||{|}| +}}}|}}}||}|{| {{|||{{|||}|}|{|}|}||}}||}}}|{{{|}|}|}|}~}~}~}~}}}|}|}̂}~}~}~}~}~}}}~}|}||} ||}}}|}}}|}|}|}|}|}|}|}|}|{|||}|}|{|}||}|{|{|{|{{|}|}|}|}|{|{|}|{zyzyzyyzyyzzy +z{{zzz{zzz{zyz{|||~~~~}~~~}|}|}}~}~}~||}|}}|}|}~}|}}}|||}~~~~~~ Þӯԙ߮琑ӥ˾̤ɫ٢ⴽl銎ѧů򗋁ƻ¶˽ɴ퉃%''(()))(()*()*(()*()$*)))**)*))*-230-*)((*))()***))()))()*++)**)())*,*+***);ݛ“Ö9++**,,,+,,++-/21.,..0--.-.147327GNA4.-.17?<50335531/,/3/-,-...-.-8ZgfZ@7438=C:::920021240-+,--0/1(0>wyWPEOT?FMHcZ6:VZr:HOA}c]aFMOSTQJM5FK2><1.0>,E1:==H[knfXSLKTaùA`USNMr7EM|wgGݴA!"#%Aʅ=$%%$$###$#$$##$ #$$$%$#$%%%$#$ #$%$$#$$%###$#$ #$$##$$$%%$$$#$$###$%%$#"##$##$%%$##$%&$##$$$###$ #$$$%$$##$$#$ %##%$$$##%$#$%%$#$$%$$$%%#$$$#$%%%$%%%''&''&%&&&%&'&&$&&&%&&'(''&'&(('''&''&&'&'''&&''(&%'''(('&((('( '())('&'''()()(()*) *)((()))*)*+*+'-,,,++,++*++,,+*+++,--+,-.--.-.-.,,--/.-./...-,-.-//./1///00//10022101012101227ځɘ㕨ۄҏ޴󊒺Ń䵀ܥ暡ſ󄐦\վμ҅ūဟɪޘfD#"!"#"f!"###"!+3ͫ匛님ՇƭʦÑZ.(***,,*)()('(()))((()))*))**,++**++,++*++*+ ,,,-++,--.-,*+++*+*))k®풚öŽǷͺڱ񊍊ȶϻ򄘥ſԼð©ѭ꽼ڽـ󀈋ǫ訥ݿӣǹғⶫзͶĻ̓Ӽԫɖ셌ŧְհԢئռۊ󀣳ߢ􍘐Ȭ߂򌞈֐⏛츇ВƺþƮšꎡ򉋑̴򅇅ӲŸőȝʅ񀄈Ժρƽ־黷׫߬Ǭㆩ^݌ɰȗصëǹɈ212/+TSSTRWTF?X5??>=<;98FHCCFGG???;N>HY9:87jK(:&&((%?6NL[aaXU5--CE?>@.-,20.Q3@'.#3006 2R0GCM&%:7<*6I:2'8MNQ5'($C78)8*!1J:TMSYMJvn``{|i_VeXspm`fdA~X6O91Q{@J60%#*0(#"1%-.&/6<0=]RT`butVmcmol;?FW=7pvriqiJUYQ@[MXtOi~pwYXYXXYXXWYYXNqhjY{~`WcrY^Zk=lvre[Y[}-BkSZYYZZYZ[ZZ[ZYZYZ[ZZ[[YZ[Z[Z[Z[\[[\[\[[[Z[ZZ[[[Z[[YZYYZ[YYXXYYYXYZYXYXXWXXXWXW VWVWVVVUWVUVUTUTUTUVUT UTUVUUTVTTTUTUTUUVVVUVUVVUUUVWVWVVWWVVWXWXWWXYXXYZYXYXXXYZY$Z[[[Z[Z[ZZZ[[[ZZ[[\[\\\[[]\]]]\\]\\^]^]^__^_ ^_``^__`__`_`aa`ababcbcdcdddcddeeeddcdeefeegfgghgfgggfhghhgghihihiijiikkjijkkkjkklklklllmllmomnonomnwxnpncTxl33IkcY\m=<9;?}uz>xp@[95HBCEEEGLRZY]g[QN'0$'5NJJ;q[~ļZzkdm`YqykggzsbkK9@Nk\kdfae`:7<>?H}Yp>932/<;9=<8`ln6BB"(%3=SMHEJ+)(*')'+%!D###'&)*)&%''+&'**))@409?E%03">;?@?==@BBANaU஄LMNMMNNNOjNONOONNOR|{q}tzvqj_d[pzrfidnwpu~|}|nxhU_vtjdQUUVVWXXWWVVVWXWXXYXYYWYXYYZ[ZZYZ[ZZ[ ZZZ[[\[[[Z[[\[]]\[\\]\^eia\TTX]WSONTjUWPU[^[OQSRZ`XYXUSTR]QONRW]cd__fmjaRX\[[_^ht~rd`gkklŪPJIG}~}y|spuwpijopuqn{}s_^\\_`cfdbddWNMYpd_cilc`^j`ZUVRLUTSSTSToiTURTPNccWLLYNM~wFHKKFA?BCDA@us?>:9881,*4:;=?@><<;<<9877869:@ACACB@>:96/^\WYWXROKJPgca]^a5465/.TTQ-=<+,.KEI71562?HEHN))*,/0..-12535<722210/_[YXY-22:???90/0/)PPMLDI&I%%IG"#$#HDBAa6-L)/<2.CUaKe`[X2+8B'6IAOH;=:EVYUZSM>&7=40'5-*6A?6.)4:6"$T&>%#+27+.6/20 '&#!!,'7<$*?*/'F.5.%<;::4.!@*0D (#- '!("&0+1;-0M)GD,-99=E386?/M0=J<0d;I^w_lwcvYoyʝbuZb}|bcaFC:NchexsZj\Q_fW`GzPpCNQejSPA>ohblwgUSSlIL9648>?:89A;79;1:;7853-P=Xc#'[N,*44+51/783.D@,6+?>@J3A;A>94232..0--/021,UMKKKSTQU/0URTK.U=,39M16740//.-.-RT7;0:V9-80,R.V.I,QFVVRU5<42A45/+d.././-,)RPMRMHHGGCHHDCIIIGFHFHD?ED9@EEJFHFCA?81=6AE8GA>?7;AMLGED?M>:8<3XTa;656239=G:U674FOY^16/0W\[V011^[QD3178=@@@DB!!?MSX,+-US,QH:=HPQUU,0,S9Q\R@.Y.2160/0YAFB%379;6:>ACFCDFHHOND<>=7^LTS[[TT\O:04+$.NJP(L=>@>/W4bb6lSOcicVPSE^6s?GOZaVQ5)C-WQ3[2+K3GFJLFPVUQWZWY[b^UYzQf;VL98_ghAKOCHU$ !$"('%-! &%$&())$$#!##!'#*%, !$+)(!# ")0" + +  ))032/+#%)#'+#+-,3%" 6,,)*-*%$% #/<&*+]fasjmjmnd`akruy|twbRSNWZZ\MCBIWS]unjU^gtv[heb``kafmpx ك%-# !y܀ϿŬܺҠ؟ћ䎅󔬪Ћݘφԕ^sС㖴ȇډ߀٨wydpvz{lmepǬьօͺZK/Zށ՗nrk[Ƅ瓔†ݍ܆X>5'&'',+"%:(^GP삔mX<('@DaKDsp95FFFJ>,/&-!$25:(!0$H22'+.>X7".*      1,,:6Qwo454<81")$mu|rau^Dcޙ߅馈ր9eo׷toDD +?ʄˀyrxs[r^*)Bwmc_f5204;zx?C@ACFHR[sxfO#*IGF8i^ސj›}xpcpoku]nP)$!!')+!#%$#%&)(*+CG=b{󇉉zw|vtad_uxnoʫjy|~nwiORll~~zjaWVW[WUQT\xjjdajdd_^_\dicfg`[YXf][YZ[^dgdcfea]WWYWUTNQZcd_YZab__~;777cdghcahbf{rskdehefufftvjVSSTXY\_\X^`SJFM`YUWY[XXWbXSMKF?GJKJLLMaz|]HIGGDARMD;@<606623-,,+@&," .=.4/*&"(%1/<3)(B-.*:5600*#%%.)!3   + +  ! $#  &$!&"  %$#)FCP@;%!2!$) #,(%'.13,","$!a  .     &.2 ," !!&#!##&&$&%"%&#$#&(%+%+!**%%]#! #" !!"""!!"!" " !"  !" &&" #+)-!( "# &+,.01210,20.//'%*.(,-,-,&  " $ ""%'&&&(*,0..10$'(*'&&"!%$&&(#-& -)"*, #!!#$&-+#2'--21-/3*&))0.34./01'H-UY0aKJW]WK=)++;?=DK@m=$-=7'B' A,B?DF@IMKINOMNOWTM^Pb=SI96Yeg?GK:KROTE22C2F#JUD[Z166`p}A?=F:8Bdsa]fmmdVJ>489;53551-/./<:<6D`VfS]h]6874S[;[H!mYbhC;46dH??C??EDE9955743.$SN+&147BUiieYUR`kΘhczJKJGLQog^\D8@_EK^_V0XD-K@ONB=9;=4g*.H62`dalm<<:<:\iopqrqpqpprqqruyxvrpqrrttw|wx}pwzuvz}yytqqxupqrtw}qr{{tnrrwsstsrpqppvfoe]}e~r\iPG{Bm[@sto\[Ind]efhmmohikopnnhTxkigiu{poko{gwpjjjlj}OkfjfT$kpi~Ardnzo՝ʊm؟nlnlmooknsvz{~|{p^[Ytftz~t5[Y)L:G\=\2UHsuARS-e:;\DnGVRHMX@HL0#' ""*J.'"K:<$#;9?h3>9/QS^Xr}]kYOەgIzWN?@atv_\@"FF'ЛXf<=>#*+0' %++(''0889OBUwP?xMQkfToCF]FPJ8PImOWVSJum=TeYZXWPLD3zDMu9~aUqm9YAZYYY[VHkJRc|KaIF~UY:Ymr`ZZMG{FPYZ[[ZZ\\\[[\Z\[[\[[Z\[[]\[Z[[\\[\\[\[\\[Z[[Z\Z[[Z[Z[Z[ZZ[[YZYZYZZYXYXXXWXW"VWWVVWVWWVVWVUVUUVUVUUUVUVUVUUUTUTU WVUUVVVUUVWVWVWVWVWVWXYYYXYYX[ZYYXYZYZ[\ZZZ\[!\]\\[\\[\[\[\\]^\]]\]]\]^]]^]^_^^_"^_`_^`___`_a``_a`aa`aab`a`aaab`abcb(dddcccbccdcdccdcdedbeededdfeeddfegfeefffghghfghhhiihhgkijkjiikj +kkmllkkklkm nnlnlmlnmnomopoopponoymuuz751N`\]^`=?;AB{}upeIm;B?>BBDCEGKX\WZYZ`SIL-D-:LJF<9i[T|l]VYerpoptv[dY>?J\Xj`bcA9a?A:?=8com7D&%.)0CQIGDM,+%$1'$&&"F&%$'*)))'&)))%*+*)&93,9>E&0-##:??>;=@AA?xOR`{thLLMNMMMNNOmPPOONNONNPV~|{jieWZhYxlplY_c}{yz|}s{ypcZ\djs|}{~zgeUUWWXXWWVVWVXWXWXY +XZYYZZZ[ZZ[Z[Z\[\][\]\][]\][`qj_[^`daVOM`UWURUZ\\ZZVUSTXPOPU\_`^__hidUWUYdlotkfljg¾SQPOIyxwqtxuyzvtrnpztmpjg_h][^`ddbfa]YSMX^]aanif][^\W\[dPWVWZ[YSpvifUTLUOPXfaLIJIytEKPNJF@ADDFD>:n=:8647:>:JV<;GPLIFD?>655+69:=2'/444:<=?@>>;<<9:565455;9==AAA@=;:gd_X[XXSRMKJ10[[]24663-+NN(*?P>1;996./K331-.# 0++.+/)+# +.1;E90%'+',(.E=:F>D-2=7A=4F23#. -3..*)201D3+"4*'=5"*')0/2+-.45<7),$&*AA4?94+%D.5%,)-= <(<* # 0A*!+;1&;B@=X,*HQ5:DKH3:94HU8KR91dGQ\{sYhXụr_zM[FwK[PROGch[L{}\qtwWRLH{DEWgppLL{GU_[mp|EJh\le\SMqEAP;37??6;<=?7924<98:62RXT;O'.:=K14WR62354/,MF+0K5X3<8>>?;35214/-,/-152T-ZLJQQQ../-.-TTMRRRX0,XD/974210/+*Q2F:?;>ZI=52J+0EN=$43SO,.&:Q<460+0111--,,*P)UJHHJFDGJFBIGHFDIIDADF;3JHGCDBB;8197;B=5T]87;Z78?1=:CI36@E@>:@BBEK24214/12010110..0132/1010012/0///01131012231[ZV888:=>???>@@@CB.,:R[U/--T+PTNFD73+2./2.14/1X0Z21V/12>9531L0%;a9;<@;=ACCCBB?>Q\V>7776aI9ZX]JCG18AGJ+AJ)Q=?AB5S[fZS\;Hb^`VAUN7HFE@ecDI_Q=EUqGQE!#& 0"#""! $&$$#"'')"#+9 5(+#!'#'"(11+%*0- &+.-/!&!,,$""%"0-#1 ())/" #! 2"/*)SZXff778jbUVhoqz|qnWMTMQ[_[DB??JGNmlmTqNosdgelzxeijjx|5#$#!)?!  7܀ϯŲũȒߴɺݘۥǝŘ蘝r뼧ב쬢퇲o{حv~xrKUZ΋~󡗩ܸi$,c̓ȓllhi򃋛ց܂Ɨs{2#%'6L'& +!3Y"wBWHtr#C$+).gAKE."#5DGUU]/$%#-)7<,'2$878PR(8636'?$0-"&+#  '  ! + +- ,1^9}K:!yvW% /ky;  ЫW  + +D #8Q4A/01y[-7!!. #51H8HE?/nƵꔭƂ̐ׄꮸʉ؆ғ+%1RuΆvsΈE'BCӄԀuwƒ߰w1,'Cbgjd^632>;>ABMTaqvlnWB>%8#1HGA96mi`ǟ|j\`{v{Vf[@ALde{svtB7620;Gl5)!!%$),0`mk/*3FDE@>,""(**"&#%$&(),*h4:{`plʵvqm^Zj^yvs_dn|{|}~qaTS[el~}uw~żÿw{pc[]_a`WTVo̽ikƯ˽icdfdccge_[Y_[YXX\`aab_a_^VULJQUX_\]c]Y@:9:9cdcc^cnfi{ruoljfdkxlfleaS\RQVX`_Y\[XTOGMOOTRZWZTUWTNPMUBFIMORRMeka[IGBJBCHRK<887ingbl7;A@<83244760+M+%$#$),.34X-12-WSL*'))'16##+21/-,)'*-,+,2598:_UXRVKMLI,'"!"#%'! !')+,-,./1/-/*)'%&&*()*-./1122[WQMQONHDA><'&LLN)(&##75(,"333&'(*#.1026"!   !#GHE%$'&'*&"!!%!:750*06>>,0+0,*('*#1%3&:0(; 9"57A9;8W6'./64Y=DAKK<-/A2'0-.) !5).##" "(70(798A7)$+"      +   + +  +$-# 0*'-&+%!+'.  $"#"   "   +()!('$(! $& "( $!=-\A ?#;8 ,%+'"0,* +# %! +   '&  %+*% &$%$"*$+! &%$&%!$%'+)&" )  %($' $ " "!#!"! "" #"! ""#&$!!(,)"  !.-,$#'&%$'",*(*(""#%  + L %$%&'*())**./022&+''%(% (+*$,! ! !2;22' 304'$&/7>;#/5-/01+GR`VPT3CYSTI!)#*2CCCNH=2&<!%L)*1=N@E=EGNPNTPLJSOR1jKAlGuU6aT`=BM>98:?C;632873'(/>!*,3:I[bgbZe岖GvUFFEFMQLQ7/2:4/2eK09I>G5[Dsᅚ֊꓋ˉѦSCZ`YX]]ZY[\_bdihkkkSB@=zKxo~hPvݠïeөs`kѲaWY]ab^^_[Y[ycW]_^ab^XPNZwɑҏՙ̿қƥ˃ָᰜв׃ԛDžĀ➰㡝䖧ûʌ䚫Œç˾폓oL˚QiЃ茧WPu񴨦ܝM̀鴶ēΫkw>/'7&19%#%+5>:O=RaT08E$%8"%$%$%$%$(5Ncռ̑j##I巭0!9_bˡ3$$$/v8$%%$%$$&%$%$%&&%$$% &$$%&%%&&%$%&%&% $%$&&%%%&&%&&%&%%&&%$#$%$%%$%&&'&%&%$%%%$%%%&%&%%%&&%&%$%%$%&%&%%%&%&&%&&$%%%&'&&%&%&'%%&&&'&'&'&%&&''(''&&'((''('(('(((''&&&%&'''((')( +''(()(')*)(#)()()**)()(*))()++*+***+*+*+++*)+++) +,,++*+,,+,+*+,-++,+,,+++,+-...-,---,,-./ ..././/../0/0//0.///010/220/02212122232233122112332=a߰ӆ֊栅ճζ叞~傈~ɳ˃¹׻いž匑ջȺƩ\E"###$$$#":#"#"""!40˫􉍄;ϯݿ{_/,,,*))(())*+**+++**++*+*)*+*,,,+++,+++,,++,+,-,.,(D򀅄끄ýĪǵᱠ󃀁ðًă辱ڂȶ;뛏㒢칪̃潶戒ծܾĽʽƺ漬𰠅≣Ƚ߆ϥȟєĺǺǣ숄եեҰ؊̙劈񀕢ܾדłТ؃͑Ƽ÷톋ٙƚꘛՒ膝蘈¦ܲƦݚ݂䲅ΈϽ߂ɰ³ڝ瀪ǚޘΧWЈӁ ȦĿ߃悿ղ柹DU574/-XK?LV=45>>?>;>CMdRX6R973.GCJ9/gEOOICN[1^VFCCH1Z9873aXgb7$=$#!-=DLUUS\8=;VNHD:*4+;@CBRai-U3^/]UV:>98;jRYYUHG12.032S\F.+TPLWWNE@LF=E3-1>833bj9;<8klY\dptrzrjZX\U_`c_LNIANDIoheR>UYrXPYV[fi]^][YbltRNllkmmllnnnmmnpnooonmnppnoppopqpoopooqqpoqpqoqppqqqpppqrqpqEprqqppqqpqqsR4335>F939iLB367E)7@6[*1\5A14<7>>;qrrsrrqsrsssttusustuutsvx||zyrv{~{|}wrvvuqqpq{r`l~fg}wnTbv^WqjVeEifi~^gcfeefkpooporqn`[\\1\vkjely{|wquq~`msllnng!YYcg]VO(F_trY{^'_쥇Ƕ䇋zpɋvuuonrppmpqqsuy{z{{hYYVZ֙tpP;\m}yV|eqfhқhfimoqnmmjmxBminnpttpnjNˣbtVKKaki>Mi|Ykwj6mBdp}orkq^;4\hմɢW*ciZHcYLGSWVJM5d:dWR87c@={H_nw|~sF@y88?DoA=8D5.2eJFK46X:0;?7(42E4PNB^5/G+)C>H:3<:4-+;.`.::WNV@{{[wQm^|MaATinAG|i?:fESYc?"*&-,'#""#'*$!-$+39WLAaytD>7@9RatmvcMR?W6MXDJSbn_|gY>WwF`YZ^_PZxPQN{H[[ZZYY[Y[[YsԻFDTϭbZtPaan>Gr +b[ZXI^~\[\ [[\[\\\]\]^]\]]\]\\]\]\\][]\\]]\]\[ \\[[Z[[\[\\\[ZY[Z[Z[ZZZ[[ZZ[ZZZYZYZZYZXYXWXWXWXWVWXWVVWWVVWVVVWVVVUVWWVWWWVWWXWWVWWVXVVWWWVXVWVW XWXYXXXYXYZYZ[[[ZZ[[[\[]\[\\]\\\]]\]\]^^\^^_]]_^]_^^_^_^^__``_a```_`aa`a`a`abbabcaaaccbcbbcbccbcdcdcddeedddcdedddef gfffgfhhhgigghgihhiighhihiiijjklkljkkkmmlmlmlllnnloonmmnpnononnpqpqwwni~852T=]^\a:<>>w{~wKOLLEB8pľYykƸd_\T}x{hug{`\_AGFUSja_QF>B?BIHHw;;7W/.5B@C?@don5B%&/'-HLGGDR,*$ 8)**)%F"$%&())())+,-,++*)%23-9=DI)$"";;?<;=@?=APJLoZsoNLM NMNNNOPOOOPPO^NSdq{zacaVgiikpeWclwxx{z}{ustlanqonmt{{zujXXXYXW +XXWYYYXYYZYZZ[Z [[Z\\\][\[\\\]\]]]^]]^^^]]^]^^^_]_mieZ_][[VJ^`YYUUSOTU\\ZYSOTXWNMPSX^`^Z]big_ZflqrnbgcUURPPKvqjimklu|zwqqojmr}rolid^abdfdaaZaebYOOWW^hiswja\Z]VYTOX^[Z[RPPPQMMZYOOLQ\feTRIJIIJNMGC@?ABD@=?;>DC7689gnqcholnopr>=:76BK>;GOHD?>;=?DDBGKKIHKwxZ[XZYWUS6:75418;8-'/415799<>>;==?=;;7632537587M:rdbDP_O12GLMWORF?;HUN<:@HBpWOXSvKeC9RrH:[ecJ6`PD31=A=G.E*4^C-=2<3(<)#35.8:26@MP/=7+,4;-E//(0,$,&!(@;&,6A@$G8LT/K1F11-700/,'29.,+*)1(-26D*)!)@7.#07(3'$341(>'1$?6!(4' !9%;--/9CQ,,PC:EHG1@89.X328Q>UX|zn~lq|lzt[Ivpp}J}\glTSXykcWqFFPY_e}aRycpkmRP7TYVYlG='657:::3;=:<996;<9:783W-A@.3-[ZK1/9.1154310M@&.4K=,;5;A>713303///1225/SXWTRTRSX.-VUU-,.PJKQQPT-H-76552-++I?626<52=,86/03INE.L5<45.1ZA975635/01+,--,*,SLJHJKEGIGEIFIHFIJHDEC<>D?<@=<<853@<=9;ABD??>;GLJJDAC;BF@<8Y5693P;B<79;?P:8>A:=DBBGNK25223/10../01001532 1222310020110132223202[YZ\Zbbb02g?,GCUTU./.1275ZK@W4PC03<;6:>;7684511/.Q./,N(L)-.0/./,*+*/'E*7H/'%!B<8QPQ=2'&.,+***(# ;><:999==>@?@CEDFC6:@;732/U0-*2.,./7+.:,SRP.QE--XY]\1238543433OOB0ED/949@BA><5jD[cM;5473^6VX`SKFEKBIRJ(,>(F>:=D@MO\]RRCOR^b1/U2OO,9LR`aQN%)2W1<5XH4B`;HLCKMIQZXY^]XYXW7V=CXZc5<[lCIc80]jalh75cXH.KAvEGNhHN''!'("!"" !%!&$"#! "##'E'.:*((C&./*%'**& */*2-  #,,+.'$.5",0046+10,$#'#%!'&##!%" *+,.Xa5773ejWX_mpotkdUTYR[]_XCD?8C9AkgfR?andVdfny{mnomly'ۿ23! -(ʼրȭ洶֠γݚӁ散ιŸ퀩´ŦѰ˃ޕԻbƽiduI?TώߓȘۮׄҐK,Ls۟؏tnjσؤ{ݒBB  #,!-' +(%C7.3l2HYj1;+'U5cw}<;<2-~Ys{>1-571+1854/!!9'+X.=RPTI;#=%)7! #8&&++ #(' *    +   /ںրGp9酉Z/06N&5P/!BSa +  + + "<(+Ak "4>D??%(,*%/#+7G^Ħɻ̓䚓腫Ȁ֚Ы"#\ߪ{fsԭz歳 +b@ÄEՄрǵɵq{ո}4.(G8gk]^659<{~}LyN5?6:::;<>BCAC*JT/UmU@K^E'8HJ?<4qeᜀuodXOw~t_`bDFF\^|vuơXD6508BGIq/*"&$))5akh-+9DBC><. (+-("$%$#%''*+D65^Fj燊֎ŧ}ԾedcYelmrumZhtz{{|yuwtbjnhhiopzz~p{{Ɋ՛zohZ]XWYVLirklkν͹gg^bacbbc^XX\\WVVWY^_a^^]``^NX[]_`Y[UE@9898bb`Z\a_`jtqpjjideishhgbYRVUW]]\]SW]ZRJJLKQY[bd\XTRTMNFBHNMNPKJLJLJGNLDDABJSVFB78:nlq{::AA<5424241-.)*,,%&(+OZ\LKNMOPPO-+&$")-%#-2/*&'&'*-.,.2455:bRWSVTQOJ(&"! #$"#'*+,-,)+-0/-.,,(&(&)&'F&)*,,-00^YTPQRSKE@=9BF#%%()(*''%"*&/13*#$#"!.135856" !!B"$ !#$%('%" !:91,3748171/,)$/63J+*#3?5+%1A=..16/TF?AAZ9M4+=U6)@MR=)N?7)'153;!+"I1!",-2;07:<@A+@   +      +   +   )$#!# +:>'""* " $!(!44,( " +  . &$+0(-:*3:&!$B#&*''):.32$"$("*&#  "/   (-)!$#&('&%'&%'&&'$ !$$$' !!$>!,&" !"!! #!"!!"!  9 #%$$  *% ' !!"$ .../.2344!(%%)"&%" # &%& "$$$&')()-++-//30 ''&$%++--)(%$ "!:*=?*1305-*'&55:C=&*,,.12AFVYOJ;FOSQ('(';A>JL>;?!%%B5)83BE]=CC?FQPQROKMNP1T=E\`c39Yg:EMMEKWVVD4.4*KfT_Pi6fk:m|i:DB>d>R7+0)''&.*(-:?7=; 74-'<(H&+/:%" ~~~~}~}|}ԁ~~}~}}~}{| +|{{{~}|~~{{z{{zzyyzyz{zyyyzzz{|{{}~~}}}~~||}}{{| z{|{}|~{ +z{{zzz{{}{{||}|||{|||}}}|}~~~~}}}~|}|{|{{|}}||}{{{||~~}|{{zzz|~~~}|}~~~}~~}~ ~~~}}}~~}{|{|{~~{{z{|||}~~||}| {|{z{z|||{z|{{|}|{|{{{|}||}}}|{| +}} ~}~{}}|}|{|{|}|||}~||~}|||~}|}| +}}}||{z{{{|{|{{|}|}|}|}|}|||}|{| }}}|||}||}|}|||}}~}~}~}~}~} +~}}~}~}|}|}|}ɂ~}~~}~}~}}~~~}~}~}~~}}~}|}|}|}|}|||}|}|}|}|||}|}|{|}|}|}|}| {|{{||{{{|{|{|{|{|}|}|||}}}|}|}|}|}|}}}||}|}|}||}}|{|}}|}|}}}||{{zyzyxxyzyzyz{z{zzz{z{zzz{||| ~~~}}~}|}|}}~}~}~} +|}}|||}}||}~}{{|}||}|||}|}|~~~ ܐѧڢψĶ”Џώ̻Ƒȴޥހ쵯煄IJ䰜̥뼐ý¹̻¿Ȱڍ$))()+++)(()*++,,+++,,,**,+++,,,.,,++**+++*,-+,,,---,,--,-.-++.-,-+,-,++,+-.--,)^ʏƶƪ֒ۀǖ󲷨=--,,+./-,/01221/.247668548@HP\aVKN]figecccYEADKSVVZ\\\bhksx{uptxkghfj{wpaNIFG@4=KWSl_dj_lvMSg_66C44-?M8IZ< [GB7C@@?969@EB=8883//.3/A<2-16?IWfe`ghފliAFEDDEse|ӹzstg,-;<-3qXtZo'G)?VΗlꭒpȂ刉ͽCXVYVSTYZUXX\_cacfllhOEC>>mIcWקuz擾WzҐc_dl􌆎ۅuZWWYWRQRSRV`\Z[[ad\VQJ|yiͯЎ쁝ߧǻ翾ϪԁЦڂቹ󦱉೷ϨҖԦčȇӒLJ벷ƍɣӥՅⓚqwIP{1Pۅ΃؂xLU̩ʦ՜͔ʾًݑ!P&D;T@!F?2&33'5:-A.Y&/*(%$$%L#%:2N<",L}ʾA4<=ڲ;#$$3u4#%%%&%%&&%%$&'%&%&&%%%&%%$%%&%&%&%&%&&%'%&%&%&'&&&%%%'&&%&&%%& +%%&%%%&'&&%#%&&&%$&'&''&%%&%%%&&&'&&%%&&$%&%&%%&'&%%$%%%&%&'%&%&%&''&''('&'('&&'&''((''('((()('&'))('(()(''((('( &'('()(()*))(#)))*))**)**)*(())()*)***+)))+*,*)**+,,-,,,+,+**+,+*@,.-,++,,,+--,+,-,+-,-.--+,,+..-.0.---..,--,..-,.--./000//00//.-0/./0//000111//101123212 132232322112442>P⡤Â׷̎Í돖򃄶ϐņǵ򀋃Xֻ׀Ѹ􇒎ë󅆌차A"#$#""#"##"]#GLJNP[UTXOL82I68752_`iopB(+++K;=OaXYd7=;[E=69?''?A?48Ot]0^Ol6Do@<8::YT[jaDC//.10.M-*M5AJTPMO\ACA@%>\J77aq:t:lsoX\knmmpjc]`aX`ae`KOJEHFOh\HDzXWetXWWac^^bbabctTMnmlnmmnnonpoooponooqqpnoqpoqqqopppqqppUqpqpqrqrrqqrrqrqsrrrpqprqrssrssrrssrtrqsrqrstS7JNE1+/MG8cCHLKcJeN8B__dr0D74P@>]?=14NL4EIC;?-BQHB4LDB18,*, 6+2LSHNAQ=x_nqJbpVSsUt>|[cpGRY(ACRA7(++$($$#&'+&*/7kjxrJ;90OSD3IG46dE2AqHIlfJS]Vy]Tp\}ClJ~UrptnL[ZZZ[\[[_QVfwsAWmX^w9i^ns9rcZZ\jJv_^\\]\]^]]]\]^^\]]^]^_^]'^]]]^]]\^^^_]\\]]\]\]]]\\^]\]]\]\\\]]\[\[\[[Z[\[ ZZ[[Z[Z[ZY[ZY +XYWXYXYXXYX YYXXXWXWXYXXXW XWVWWWXXWWYXWVVWWWXXYWWXWXWXWXWXZYXXYZZYZYZYZZZYZ[ \\\[\[\]\] \]]\^^^_^^^_^`^^__^_`_^___```aa`abb`aaababbcdcbcdcdcbcccd5cdeddedffeeegfefeeffggfgeggfighgggihiijihggjiihjkjjjkj kkklkklkkllklmnmmnnnmmnnponpoppnopoqprqpssrrqprw_jrnko52YF^W^fhx;=z}~wqHaSCA@@ACDBCCGL0PFD&W\FdTTBOQKL8yȼYTeɻe^Ts{hsozlfaB@AiSadF?@>@ADIA<74124CGHE@eom4?%*.&7RJEFFU+)#9&72(+%L$&$&(('('()+---,*)"-/1;>FG%!##@==:;<=9@LDFFDBFHEDBD{_cc^[W[Zd1320-e6-G$257679<:==<8;@70ZQRPN*48KHJH@83478CDADG'('-)(,ST-/10295./-,-...-*//4::4/154,*OH%CABD##$$D@FE@c>d[_:ueT-0E?CaTF[mFL&=21KKAINQB5DM8-5/9, IBkx6!0'/0!/"! )% ,7$HE8890/!1BF:57;>CF(32$5E>)<;9799;8:77--1)#20*AWV.KU1-064225J(@KSLD,;8>A;5554331.1000/+MTSUPKPRQLTT./-U,-JQKIHF+T*Y4+OL/2,+,/-439:Q%664-1MSDM0fD-93-N:986322.1/+.-,+-,*LKFJHGHILIHIHHFHGKDBB>DC==@:=<98>ABKMHD?;CC@IB<;65dA4aAE/1DK:?81.:<@E=FG@:73322/0../,-111232//21231211/00/25324320-303][[\YY\V_00V71/2I/0./76681MP*-PWCI=8+22/.441030,QIT..02+)*/*)OF+-571.16X0C4I.N76<\7/+"+..-+*+&>79=<9:9:=@@@ABDFGICI?8>234358=J:3;55832DPPTMPQG:0KPSP//133553565/H9LLU@=865:97eWQ>eA65e564D9OWTN;>;CBMNI<,GCD<7@A.QK]K]@_FZf^-T6K[-$LpM[cVP1'8Q:-*.M2GGC^NJHPS[WXY]^VSI:c8aUXtsAUh5GGQFJY[\WLFJ=W)OZ_Zpef;<3/)"4%"""%$),,.,1)')$ /-144 !%2,,2) &?7-$3&; 0,093$$$ "&$#$)!%)"83.2Xh6k4`hjVWfhhhje]W]]V\Z`ZBC>9;7CveZEC~blx_agrvqpstuxzټ- %"ȾļǹٶӸĺԀѩxϋь淆ݖЅi\nsе\Vc(0?08C%. I%B(2-#&-*$"" +  +  +%̕ȉĜU.-IT7+7KL" &/́    +  + Rev*)2/.&C"414ڥܽռʔ~}s.'m?tրLNp공}sϱ¾ÿɀnj~}s{ɣ|g-+L@hkopio7;}{uHXG7:::9:<;??BA"90+"u{MhSQ?MMFE2cZvtiZxxkfdEADq\uzұB523:=BH=3'%'**/^ki/+>B@@>;!0 *+/*"%&%%&')10uC6t{c㈉›qxjcyeoflo`yxv|}sr{~sBj`doztmsw{upqˎrZIWPQSO_vmheƩfa^\X\_a]\_ZW[Z\VSSV[`]\]``[X\ad`]W\SNJD?:789aVVRVYX\r|mldbbllijj}mgr]eh`_]\XY`[SPJUTX]fc_l]`QPFLDCGHHIHJKJIFLLbUHDAAEIIG[G?7oomp7*JKP0bUG%#958M@,Ea0+$),,/2$IGXGS6OCSUH&'4@;DNCCENMMMNOJJC6\6eZ^tl>Sc3AENCHTVXRG?>.E53V\][k`f8SQJ_ZJ;_j\3;<964:FJJHFG=3/0..-29(;4.4=JZ]V¿HkisfFEA@BJVs^jwGfY/*/7.>*5dQPAD4/gPv҄{^hl†Āф񤻏ιݎL`MNJKOTVRSW]cd^^bgieWSJC?{~vPӉȋeԃ|wzOp\}ջҼkx~ig^bdb`]WPO`hjçӊͺɥ򚕂ᅵַмÖ¥禁焇Î〈ǎ爝Йٰ͍̹쪅{{rc>03>ՓuhLJ켟ͿƄ˂뚂+'+3E718O/9 %%$=%#$$2͆.$%&&&%&'&&%%&'&&%%&&%%&%%&%&'&'&&%%&&'&&%&'&&'&('&&&%&%&%&&&%%&&&%%&' %&'&&&'&&%%&'& '&&&'&%%%&%%&&&'&&'''&%&%%&' &&%&%%&%&' &%$''&'''&%&''&'''&'&''&'''(('(&'()(&&'&&'''&'(('()('()(''(())((()('('))()()()*)*+**)***)* )**)*+*+*)*+ *+*+*+,,-,,,+$,,++,+,.-+,+,,,*,--,,-,,---.--.-.../.---..--...//..-...010/.0 101110011221232211212223344433323433542;׶ӊǿ㹪ɡ֌ËݦҺ鎉t䔮кӁȯȾشԞC#$%%$#$#t$$###$###".Iո؊ᮢŽK0,**)()))**++**+,+,,++,+ +,+*+,,-+++,-.//-,,-,-..-/,,-.-+IX쁁󍠤󺨨ԼɽðǼűƪ돩ѵͶɸӭҁ􊠭脘ɨ񂁅ôՓϤ햄»Իܨ۽˵Ɏכծκǵ۷ŋ񇦠܃犌а˛誐Ƨ싖ۅ߂Ћ䂬̟®ǧ·ÉǷŸ֑톏큃҆׆􌔔琓ɣړ뛙ɠꀛ偤ҭåĴ⢭􌠡ͼ큊뀃謾љþԀ󇚩؎ڙΐ߇Ɣɾµ˃Ժ󌟜ۂ䫬̆kݔ׹͵ɏלϲހ?HIZ532000-ILbh]RVH00567C6FEA?X:dB6<1]m<><<S=629<>=2qoNQ_hiomh[[_ha^]f_MMJEHDNsfXJLdSX[vRQTZh_^a^`fgpXHnnnoooqqpopqpqrqqqrqqqrqrsrrqrrsqprsrrrtssrtrsrssrrssttrsrtttstttutuusstsssttsrt@E5-ACG>K-7DB::*=7G9:/.E8;F6)60=;=J\rtutttuuttuutttuuwvvx{}xwv}|z~suy}{xzwyytz{vx{{zxgkʘlXmtlYQ_izm\P]pnmpmmrvxvuxtpppnpoq{Eyvcbbivvpe{slgdgdv6}qAǎi_]j_lF_TNfMrqޓzht㲈霴olmb{l|꣔rjeegjlihkptsppty{yjib[Vg†svw8Zwz{kcߜriʭȵwlode>lursrpmkoʓsw{_lDzem^`X\Kf{J<_B]s5DxzpekhvFXVEIeǨif@0B=SQomsdE|IQJK8EWAT_W9sRW_\dSYMH^I;bLZJJ2c:;@?S2;9:,8HO+.GGH1Q@T(eExQBAQ9YTia[MbZ_oXNMJr]S]\Q}ufWsnZjG^\]\]^_Oiuv\]mͦ?K[T[W@VCv/d[c\\^Mhiu`]]^^^]]]^ +]^^^_^^^__^]^]_^^^]^^]^_^^]^]]\^]]]^^^]]]^^^\]^^]\.]\]\\\]]]\[[][[[]\\Z[\[[\[[[\[\ZZ[ZZ[[ZZZYYZZZYXYXXYXYXWXYW XWWXXYXXWXYXYXYXYXXXYYXXXYXYZZZYYZ[[Z[Z[Z[ZZ[\[[[\\]]]\]\\]^']]^]]^^^_^^_^^_`^^^__`__```a`_`aa`a``a`a`aabbcbc bdcccddcdccdedefefefegfggfgfghhghhhihihhghiiihiijjiijjkkjjk +jkkllkkllmlmoonmoqopopqppqqpqsqrqssqrsrrpekwzjaXYXoUZbVw|?z{wtSbBB@A>@ADCCDEJT2`HZ%`SJbdOHPWSM1{ºYTgkϾže]V|lmv`HF@s~ch???AJD>,8668=@KMH>kup6>&+.H>RHECG*,(& %,/(*$M+'$&'(%'*,+,,+*!-)4>?GD;A"A??98;DH}aHO[vMN ONNNOOOPOPPPQPcOR}rwtfdi]nd˪cgqz~~}vuŰytdfokh_gmo~xzzu_lYYXXWXXXYXYZZ[ZZYZZ[\\[Z[\[[\[\\\]^\]\\]\\\]^_^^]^^^_^^__^_^_eqod[YYWTQV`QUQTQRXWZWVXWWRSRMLOT]\VW`ggea\\bbhqnhd]dggaZUTROL|kb^urenuskpp|utzusx}vwjjplg`aebe`OW_iopw}pbfUZX^dRQPRSUSOQPOPYbQJMNLONSXm^DCHKJIFB@@>?@@><=?HDFIGCCEFFDCA9<<4dd789AC89HLJC?B>=?==>==@<:;phgfa]]\[X/.-))ME179:;9:9:8;;:8:8=><<9965537654646997006<=AH%"$&*)(-)KTSSY./0062-,,-,,+*+,.,+/53640+.1-)KICC$$%%#$$$>?E???C<534.*(,)(3:pfIJCIinVS^eXMQDLhCMJ^e@u~\?PPvS?FE;aIO[EMVekjT3>OBOg>8X.E;-#+';G===AG:@D>.325!?,!Awt]2$%7)"1 #&$'1"-9567 6?CD8-(.%59614/>HHKKZDFB.(..@ 0/&/3,(<:/+;4&9',587KB4:*D95/%2%59(& //69(-LO-0>8,9A,,A,.+3!178'%">#)027!.B5FHA)Q5<23:@@65270/\//53JH{IePa^oz``}rTNsyP]XWZlnTONTh~`W_xX_nz_PqVvlhcfnp`SM\W]B22Z37942;?<>;428:7::70P//7/+/0L5W0K@/VQ132263.1/TJH409@>5622132002/.-,PONOTPKLLMNRX/--MPSLTSLJDN,N0DR>IV35.2.-33<9I*Q84-01,A5#2V*:)/*M297400./0-*0,+-.QPMKJHJKIOLIKHFKHKK8BCADBB=<;:9;>>I979BEHA<AFEBG8052212/0001/0111231//13212100/0001212345d402220^`^^^TIJ\X]V;BJ97T+,0343.,/./54/Q/581>C?:GMKHOOBB<:/=DD'+2('KI()(/'*-2+RNU7ADRU=0-+'(./0.)*$?;:;::<>BA?@BDFGHGL;;76/.+/197806512-/8JMP/7?C=2.2218\1510A44?499X2GV:25492_\\:[Ubhbk_c33X3I]TP:cF=FFJMJC=##JB5/=RLV]39<ScKGQMNRSXXK:>@XIfESX_f?9;7Bk`UGKg[lnY\`h{pqsps|~ը'"5ĹÿƀĽōߨ˦ꝡȾʗƅǿώ绯Ԇ찀Wۆڤ㒃ϱ޴́Ȟy̸zmuEA>5;EYM񿦄ߏҐ⋬R-d聄ʆЪճ֋´Շݎ򬂠A/:+, +;)#Jf3(sFJ3 6)3/-@hI$( />Px?D9$O&()((1)1F3!N3/;3//%,*,2'/$'6 ,  ('$#%0 + +$NIeٓќ{~jwGb%ilL %Fe' + +   + + vʮhY ' + B- #+43HMϑ񭒢ä˞䀩ز·ڗ!LAOѹԷ'Zte`W>…܀ֻyqǥ{bXPQQtemt`zx>}~{}QV997;8;;>>>BBAB$A,;0s^pjNGNUND)c[y~te\zvbOME|wڶ;358::=G?1"+(+)+^lk/)+'@??>;1")*/+"#""%'*41jI:I{Nvrz~xofmbtIJhҹektyxȴ{vhjrmibcko}tv|zs~ul{teYWTRPPYkgĻc^^ZY]]a^]`^\V[ZUTQT[ZXZ_b^ZXZWYVW]ZX[QSQPJEA=:89aWQPdbV^urjicfjvnnrmkps|hm]]a^^XY\WWWJRX`geiqdW\KMIOSECBDCFFDGIIIPXICEDBDBxEFSF4km8;>>=9420/120,)*,2/5741567530-(,*#CD$$#&&#121-)-*+,)('&'(%$(OU]^YVVUPH!,$!#%$'*,,,+,*+*,-+-,/.,-+.,*((&(((*-+)UUTUSJ<&((')&#%"A=;=:8#+$"#&%&)!;A>?> "!%$&$#!!65//,+/-..0& !;.*)# 67+0CPE591\@/1:0N9D(I;&#9-,!6 ,04OJE?>9A@BAs[;U51*--+7*&0&"''U90---518~~}|}|}ԁ +偅 ~~~~}~ +|{{{|~~~|{}!||~}||}{zzyz}{{zyyyzyyzyzz{||}~}{{|{{||{|{}}|~}{||}}{{z{{z{{{~ +z{{~||{ |||}}||}}|~}|}~~~~~}|}}||{{|}{{||}~~~}{{|{|}~}z{z{} ~~~}}}~~}}~~}~~}}||~~}}}~~~}|{{||{{|}y~|}}~~~|}|{|{}}||{z|{z{|}{{|}{|}|{|~~~ ~}||{|~~||{{}~{|||{|}~|}}|}||}}|}|{z{{{|{|}~~}|}|}|}}|}|}}}|{|}|}|||}}~~~}~}~}~} +~~}~~}~~}||}|}|}|}~~ǂ~}~}~}~}~}~}~}|}|}|}|}|}|}|}|}|}|}|{|}|}|}|}|{|~}|{|}|}|}|}|}|}|}}||}||}}|}||}}||}}}|}||{{{|{|}|}||{{zyzzzyzyzyzzz{z{z{zyz{||~ ~}~~~}~}|}}}|||}~~~}}}~}~}}~}|}}||}~}{{|}||~~~~~}~ ѡۋ썃ϨҜ։۔ޅԦ߫kל򃇓ג⯍乤ļҪ>++*++,,+,+,,---+,+-,--+,,.../.-+--+-,+---,--.E---.--,---,-,,..-,-/-,,,+--.I׊ұ˱ıމR-././/.010/100/09AJLMI?:@@=BGEGLNRRNMMHKNIDBBA;:A&9>:;=Dc zQ+(+/,/0710MmCAI|tĜub:1LdiO׵ψ煓ma_JxENSTRRW\ac^Z\^\YVRKE@>~lM}ί⇥aqCX\z̈Û̴|łf_aZSN`b_ÃɥǾüꙂ퀩҅Ēֽ٠栞ޕߞèܜ׌ԥѣ틀ˢȒዺ\@]R(?%3Ԭ޷qʛʳǮs󑄜̾ǿڏǀʔ#.&%6pN10_DJA%&&;@\D^AIVV\M1.MLO1^Z=>JDCDXNPPSSWTJG,8652``e4gih48[CEHLTaVQXYdd_QMORH2-(4>3,]DJg@ab9<=>>==fcfpT33@?>0nmUNWbdigkXZ`g]WQbZQMICFCFPgNIRiKWYqYONPVd__c_bjnhY~ponppprqrqrqprqrrrqqstqrrrstuststttsss tttsrrttutuutstuuutttuvuuuvvuuutuuwtttvttsLP-AAJC0B-AG>xtuvvuuwvvvyvuuwvvuw}{w|vqvwrpsvzyuuxv{zwrmsswupwyvuw}zux}~zx}{nZ˟^n{z^hxa`ag~Rq+D}xyvvuu{zyzyvvuqtwr}R{sepeŘxVuWfQtngb`_{#zhnQsohjlm{XpxAZe^s̪rYde_淡yYlξ]x{mbghiggkortpoqsplkfb]ZV^mnpkp@4;jrfnUwz_Y}‡ssw˝e\_pzveʎurtokpxw}fa?wmuDDiiuofECUnO[z[40dv\LkoUMug~Ø~h4Arko=u]X=MA<;FRV)@?amUUNofrVrVa{kdVzlO`.FEDbJ40(,LW>FKK^610NQ\3T3C<149>"BL<'-"!5*.912@C.HqYuzٹsxYUQKżXgK|uUcXmpc9+)&+6+&%!('*48D86YTfG%.7gKBBE;>.X?aZ@fCc:VZbx`UpLQThSNXQh{toxorUXea^Z[glϬVuTcpN\[\xV4V:qjd]]aMeqNf_^_^^___`__`_`_^_^_^_]_^_ ^_`^^^_^`_^_^]^]^^^]]]^]^^^]\\]\^\\\[]\[\[ZZ[\[[\[Z[Z[ZYZYXXYXYZYZYXXYYXXYZYYZZYXYZXY[Y[ZZYZYZZ[[ZZZ[[[ZZ[*Z[\\\[[\][\\]\]\]]\]^]]^\^\^^__^^__^___^^_`aa_a`acbababcbcdcddcdfedfdffdfgeffgggffegfgghigghgghihhihhhihghhjijijkikjkjkjjklmlllkmlmnmnnononopponopoppqprqqpqrqrsrqsrssrrtsrssrtsshs`uűgYNKILM`Y]\ev}y||suJgR;DCAABDCCCGIHR+;sE*]piWFUUPL\Ȼ}Tkfπg\[]rtSRTGF|l_kD><;=ACIJJ?;9@FG2258=<7:86n???AA>FGHIDBCDDD;7D>;6@D3466?@:=>=9?G@crohgbZ[WRVZSPOLD3H=??>:9888999657:<9;9:768575200-/^148;865jg^.0;;<89[TRPQRUWUR_SNJR,0HBA.+Y15=D),$&'))),*N,USY-//262.-,-,,+*++---0434523780&BE!#$%%$"""?7B@?DDA;6750/,-.&/GFcS=B8jiIUXZC5HSJoFmZbfkgkUCePIwlUXe|KMR|dt|{w\HXMU^\A5,C*'A(0(.2.,;-8#9-% ##>2+:&2)5/8=>&4-%2GZ6>34=@7./3K253\Q^TKVvhV]GGN^SkkmPO^gWO|zARZxd`oh`r}vmnR_xqOj\bw]PscQnj`krgR?AEvj@;HI88;4H=;9<736973885,W0T,.*.-49000-W1130331../-,USVNOMQTTY-TSQHLKIV.-SJPQ1DCT^6a66440202:;@.516-,1*N7?4B%@+0Q6T<620200S+//+*-.)OKKIJMNNPLLHCJNIIF<@ABB=D:<9:>@DEEKC>>@;8;\96B>93026NV5(2'>C:%F?MQ+.03)**(N-*,'/-/)GDE9D*>H2*'&'-011-)$GFA<<:898;:>AA@ABDGHGEK:;787+/.-027:87/+19C366E:51,+.211/VQ23:B78;<:B02/?B.KI<2FR?,`4klia]Nk3\2A[ZO?^REEICPQHI%$%&F.E0RL[35=DANY2jvFK26k#NV11R18.8815*N)02@XYROHKT`ghbhggdYLOOG`SlG\3]ARVRSQU[]O9?=cRgfl:;@ADDCA[EJBBAs@jQLGIJI^[G>d61@SA:!(49hWH]XUMTQZ;!$-!')+-'5-!#+#!%(::%!)9,9"%%+/##% *."$*'''/%&%'&'#+.1023)&0-(,-53-$ +"%6 )2  635:,'('(!' )!9%+!6.),973&^eSLV_aedeUUZcZQJ\WJB=597BR"J@a;'2)!(/4$":G/01=--%=&$#-ACg8=%5%+/%'$./..$#   +8FYϗ؎ՌIJߴF)paDKؼL'"I؋qC   + + +C?R2 - 1':'(]ɜ􍓀冒͔s牗ꒀY'(:t刊4`h\dMĄ܀رv{şmTJEEIMhjtuos~v||I^H4<;<:;=<>=CEAE!)K\3D܌v\DRRJCP[~ytcalЉUW[POyrҶ>56e67:;C?0"!&'.*-cnk.&*)E?AA;(/%')+- !"#(('*()X386DGGQJggއw𶞔||wndmIJg˼]_xusiq{wuts^ekonzx}vz|熚l~z󣢢rnf[[QZZWhƴ¶_\ZXT^aaYZYTVVUST[ZZX]^[]YXWQRUZYVWTPOOMMKIC@:870RMOVMVbvklhcems|s~qtlwob_[Zb]^][ZTUXVZ^dg}s{`a]P^TKGAACB?GGFEHIGEGFEACK~wpnALE86:=A=89)#!4$%" >#EDC ! !  ##&&$$&&#./.,41-12/!&);=0,0-0=C0$8B8[9VFQTXORC4U@9UL@FXe>;A_eTgrqhQGPFMPK41:(9  %1$5/#&>(8'&+.#,  +&2j   &# ![10$7'"()'% "!%23.)*"") +  '%"%" +   !'"*")6#'#0.:  2'5'&#&96# " +(%)'" )&#'$$&')'%(#$"%'')&%%!#$"'& %& )/--$!&$#! V!##$"!"!"   !! " ##! " ." !$ % *'$*-)'("&! $)   "" ,.+&&&'&$((+,,-..03320*!+'!#)$%% (2(4:<:42'81$2/("<408?9DGA8,,$LGQ++3;=GH($$3?B%%=#''* ?*+*6KKEB:Y?HUZ[V[YYTKBDDAcVrDV.Z>NSMOOSUPF580Msgi66==A@>n9P2.+,,,=?(/$1'&&/_H1753-214 ~}|}Ӂ~ +~}}{~ |}{~|{|}||}}~~~}|}~{{{z{z}{{z{z{}~~}|{{~}||{| {}}|}}{{{z{z{{||{ ||{{|~}z}{{|}~~|{||}|||}~}}~-}~}}}||}}}|~}}|}|||}~~}}~~}{zzz{~~~|{{{zz{}~~}~~}}}~}}}~}~}}||}~~~~~~ ~~~~}|}}|{{|{z~~}z|~|{|{||{ ||{zz{{~z{{|}|}|{|||}|}|{|{|||{~~~~}~|||{|}~}}|}~}||}}|{|{|{|}~|~}|}||}}|}|{z{| }~~}|{|||}|}}|}|}}}||{|}|}|}|||}}~~~}~}~}~}|}}}~}}~~~}|}|}|}|}|}~~ǂ}~}~}~}~}~~}}~}~}|}|}|}|}|}|}|{|}|}|||}|}|{|}|}|}|}|}}~}|||}|~~}}~~~|{|{|}|}|}||}||}|}|}|}|}|}|{|}|}}}|{zyxyzzyzyzzzyz{z{z{{zz{z{||~  ~}~~ ~~~~~}~}|||}}}| }~}}~~}~~}~}||}|||}}}|}~}{{{||}|}|}~ +~~~}}~ 臝􌕙➸צ언وg墳Ӳ裸宎֯¾̤6,+,,--,,,++,+, +--..--,-,,-,--,,-.-..,,-.>--.,./..//.//0-,---.02뜆ʻΨξ㦉ȍq00/.../.0/0/3?EFDEJD==967=GGIFCFIGEBFOTMD@?;9;GTUSSWYXUVUV_cdb^^X[_a`diQdhicbcb`]ZTGD[eq[hlLnmsPMi:WOcw;iSJa__t`OVIS)36PlGuW?>D>%I9M?_ɡtLj}ݎJ=V9%13434D\bb]?8"+./.-2+07?md*$1JFyrxm;jKj⍉ߧ뇄s@PoOTTTVVX\\WQMOLFCByosqĎϒݾТ~pRJKu߹ŀҳ{f]YVXgihmh˹ԝۜٸѥ摦ق܆ЄĿܕ󦥦Ð⼎х䥈η꣮Ɨئ飢ޖëھھB<`4FELYmȠ̱ï𜜍ʠ맅沜ǷٝɇR34:13IJ?EH49"4=B0)T؊ɽuF.!.>B6uj΂Ɓ(ԿzA1(''',4X&.4MO08EP@~xwvwwwvwwwxyxvvwwwx}~zwx}yzsoquwrusrrtrqry~tnuxywy{vrpqrpopnox}}{uwrty{x~}d~i[wimfheXWZ~oq}Zvthɪyo{]vmsȋljwxy\ug^[]aAU{OsoonnmeZi]krW}Z^7Ӻup~}L{Az\biUbj{phiihijkmojfdeecfb_\[wšٯnY^eLY@5GK_<-hbfrzoȕN\ttOYXNRRp~Mpqnnnςy{ŰdxdmX^iNnlptfqfx]=::KU^Tn^SCfbP_mCg_h苋yshRk9TborSy1BOP[+8&2DdH`IR`LGS@\bTgJq_?9<*PSD7\OFzXC+C>V;:>FF4L'AR<:48435F%(69GAI>24)E8F60:E>So]?|b_ϤzXx}ac|vffwŎIP@ie~gz,$%$-()")$&$"!!/.;4AH+QZ6Ung>13=868,F<34LwdW^5/aAPAd~i~eNGst]y_rBQ|PZȥkXLkkfȘx|ىPbq`]]^\W]T[3ue^]WFdoze`_```^___`aa_```a`_a```_`a``_``a`C`a__```_`__`^``a`_``_```_`_`a``_```___^^^___^__`__]^_^]^]]__]]^^^]\]\\]\[\\\[\[Z[Z:YZZYZYZZ[ZZ[ZYYZYZZZ[[ZZYYZZYYZYZZ[ZYZZZ[Z[[ZZZ\[[ZZ\\[]Z[\[]\\\]]^]^]^_``_``_`_``_`a```b`abaabacbaaabbbacbcbcbcccdccdefeffeddeefffeeeffgffggfg hhgihhghhijihihijkjijijjlkjjjkkklkllklkklmmlmnmnoonoqpoqpq +prqqsqrrsqstssstswY]`}aRPNKLZ>j]^Xw~z}|qGa[C>DC>?ADCDDEHIUN1C`XZQW]c\{WPLH6{ïla``ZXxwx~ZpF`hh?::;=DCEKCC:V8AFJFSHp+$&037wUTjN<}XfoqPOPQRQ^RWxxsy~xry_eg_bk}twxurmadolcaxwt}wls{VYZYZ[ZZ[[Z[\[[\\\]\]]]\]]^\]\]]\^]^_]^__^^``^_^^___eȾkdVO\dYXQONPX[VWPOOQRSX[WTZ\jpf[^[\_gqrkf^__`cdc^URPOHB>oijeg|yxlsv~wyrxxtsnwwnlnfg]]hnjdqciocewcVUTRXQPPRTYhURNQOMLKMMRSK}{b]HPMUWPJCIBB?BCB@>>=AGGHFBFB<764;C8:7?DB656<>969IN@;><>@>==?DF9;988:88867978:9:867686200../..4;9;><841T\VSRNRT))RQNNLJNQ)LFA<754dJWJs|zTJDFN;IF<3Y-DK;;2..A?*AOH:<7%(:ToTyd}yA6 0*4.+*($%))..1;),##.<+.,//*.434386jVF5/8<,1+BFH2?85IGB4?9*-8->(A,984b:EOMR<-1*;39-+-6-.(75#6#"#6/3/*-$#'4$07=B?Rd491,5<=/1/P_91OOVYkpVt`zrqdITZ{pZUWPcv|^evj|]`YuvnzclXPgrk@U}^ieURZRaS71341d2,21.,+./)OLNMJNQQPMLGGKGIKF@?;?>@D?>;1=BAF@:6AHED=90=AHFBBJ?CFJMM5;?A=E>Zc<=7718:@B:.BCBITV555321/./0/0022/10/310.0//0.///1200/041Z10/0ZTVR.1[./21[MDCCKJTS,*06>06<,-.S20.V/_VA:)8/A&@-O&/838=G6MJ&,.53-+GA35<<::=@@::IE:9H66324026751[JS189B<==D=1./*%5%-,K@,9(3BC7ZZRMTh=TRRHKO@OI.CH?FFEJM&%#G>G)QZ254?b50+quVl;=;=A>D@>BKCBCGDNmWGGGK:2RMP`=Y.5<6Z[:CCjbX_\UW[7 *-)+!# "=9""$&#$%#B"; @>)1?"&*4#*')*')$'$ "%+!'"&$&$+/1 .+3$+11"  +'1 ;$$!"!!8/.9 &)!))$!%"+/.4-4!":/+130*1WKPVdfeabVTQ[YLEVRGA@<>>?I_IBS@`lwi[Z]gppsuy|~4'&&" !!&#ɾÿ΀ƾƹ;ͷێɴտΡ߇۩䳿ѡ앣xr鮾ŵfܚʰٸ♰ۏǂᕃꄜغ><%,$26S_-"1-4&*ކ䓇S]ooGNNHKP{|Q{ӧϔ5 (! +'.#m2 !#2  %492-D6():1%<*#9kWRaSC0@DDQU?O"#!(6#4(;''.!%$/( 2/("6.'D*!"#/!!$'* +  SD9Дé!0kG?ZjD:Ogn     !+'Hf*+:"<4њϛҵ傤抇ۋ\ҭZtw¯ϓ:uTT`۷ Ä!ʄ ̈́̀ɅrɤqƹfPKIGIV:qowfw{vyHYP:8?=;:4578:79>0%%'.,+fst2('**A???=!'3!&)*,1/9&H&+*0iyE@T;HlGYgcՇ쟎~~r{bd¢ifesuyyxsqfgoncat}vu}z1nsy̑kbVNYbWZŽ]ZVW]`[[RPWVVTYYXUYYa_WS\UQMPUUPPMMLKKJKIC@<940.URTPTkukmdjmulrhvpollilh]_e^aXV^^ZXg\`dty]`nXKKIGLEDBBDFVGFEIFEDEDCEHBzsrt{PI8@7<55.01..+*+04474/42.(%#(.$&#(*(!"#"3.5,*+)+-*)(*-/(E)TNQLHLJJOHEB>60#**%**((**+*,+++),-*P,+,-,0-*'&%$%"!"$&%&&(,,+('GNLJJEGB BBA@;895,("!'$ >C/,;=Qj_OPXZRUOOCP6U.Ko<}H:U^celuvpNFA>F0==3+E!+3%&""#424A9+)#& -7(3.,#'#.9K%$$*YI1 %%(,*'!,(&# "+&'%A''.,."97)  ! +     #-",!(%.*&#;18&6,(& &(3&(7#25'&.#!#"%"*! N 0" ()'%#$%*))(*+*+&$'))'#%$#"$%!#&&z"+"$!!!" "$$$"" !  !" "!$ !"##"*/  "'% p))'(%*+%! %$$'/* "" !!"+"'0/++('%%'*,+,*-.000/#$-#' ""("$.0+*.5 -,0-.+$303=7><=>4(#( GQ,-+4U:HI@* ! ''/7'[80HRLI>=GR\\X\ZSML4ACDAsBOV>07DEOPONHMIC9,%5^k788:=;?=;AHA@@C?EQ6+*)/&%0('0.7;(0(<6276135 ~}|}ҁ́ ~~}~| ~~}{{{}~}{z{}~|{}}~~|}}||z||y}z{~}|{yz{{|{|{ zz{{{zz}~~~~}|}}{|{| }}|}}}|~~{z{z{| {||{{|{{{}"}}~}|~~~{{|}}|||}}~}~|~}}||}|||}}~}{|}}}~~~~{z{zz|}}|}||{{z|}~}~~}~}|}~~}}~~ ~~~}|}|{|{{z}~|{|}~~}}|{{|}{|||{||{|{ zz{z|||}}}|}||}||}||}|}}{{z{|{)~~}~~{{|{{|~}}}|||}{|~{|{|~~~}||||}~}|}|{{{z{|}}|}|}|}|{|}|}|||}}}~~}~}~}~}~}||}~}~}|}||}||}|}~ǂ}}~}~}}}~~}}}~}~}|}|}|}|}|}|}|}|}|}}|||}| }|}||}|}}|{| ~~~}}~~~}~~} ~}}||{||{{{|}|}|}|}|}||}|}|{|}||}}|{{zzzyzyzyzzzyz{z {{zzz{{zy{z{||~~ ~~}~~}~}}~~}~}|}|~}}~}~~}}}||}|}~~|{{||}~~~ Ε򇖑ĵߋĠզۃϴ卩ȇԄӌeγﮕ킉ɤǀܫƭ˾ǡ./,---,+--,.- //-../...-,.-.-.--./..,-..././../..-/..-,/.0..-...01M³ʩƜªĀB20011/00/../.0/113;?>=@FGB:634=KMH?9=?@>=BEMLBBC?:Edd^ZW]]``YOMQQQOLMNVadbee{l`cd`Y[^OiL@BhaSFf6U_gaJZlfj^^~[fSN@PQRIPP`je[XTJQM\[K::.%Y˵H %33++005>N;CL' ,00/11566>Qo]515}}szv^Pwو껔j?`H]SSRTTTUQKEDFDDGFCDq:gT@~tlѭsv{Ӧx׀ڿbXVyvrrvn哉ޘ̉臮ۖכݘȿǪÆņҴԭì͋Јґ᳀՗Ưӻ௝RILF4;T@kZ44fƋ̠߬ˣɿ揶۶Æҍ쎩SڔA8'<75G4B7,2*3PG6ֶ…/dEHFWVl򰩏ۦ[<1#'&''/9%*Fe1&'(Vڏ5%( '(('')'(((*)()('''(()(('()))'''(()(!))*('')))()))(()))(')*('''('((()('(''(''(''&'&'(('('((''('(+)*)(())''(('(')'''((''()***)))(('('()((()(()*)3*)**)*)))+***)(()***,*+***+++*+*)**++*)))++,,+*++**+,+,-,*,-+++,,--,--,++--..,-+,-.,,,-,-,-,,--.,-./--..,-..---.///00.-../..//010012011/010012 1022322201 2412343311334322344333443435655545655687765@<Ҿ򼨩ΔѺаꟛƆíضÑ`ʤʰ卓݀׽ɿ򁄒񦘊ڱE%%$%$&$%%$$%%$%%#/Moź畃񈂎Ŝļ»򏢩a0**++,,++,+,+*,,,++,,-,--,,,+,-...---,--,,-/-.-././..-..//,,<׏¾ͽ̼튅£̰Ѹ嫏ӖǾƿӀǵڼ˭­ܼ煛ɶãϭ¸ؓˀɚ钐ɿĸǬ򉬦ĸ铌̺򀅞뎊ٷ䫎ɇ™όĜ̪赆ԥәшᑓҭؒɄی燚򁄉ͭٔξυď䍜ijɱ˚م஗Ƹ꬛ǺȅÉ셈ɀڼЍʳ♢㶹ó䈊Ƭ砪߳OㄒҸˮȌŃ此Ɋåm66lVMJc<@BnOH_\Y]c61I>?A;hLIJCLMNT].06995]\\`bg3df45/2/25efWX=`65573G=>I#,!+.8)O=ngR:CCBB@ohcSW?G\RRRP?8DDP,/-UK?9AZ1O?Q6<92P?96;7mUQPXiioej\UY]^MIZRLIHNRSLW]D?IMlI\ZMXbaa`hkjlmfQwrqqrstuuttsuutsutugtuuutuvvtuuvuvvwvwwxwvwxvvvwvuwwvuvxwwwxwwvwvwvwwwvunB@AQWPIFFBIOSQN=?F1GLSI-"H6/<-7?A@5>-,% +)(_XUT1H0ZeBOyJJ?MOpj|hZHdVtouZ`UfnVlȡ__aifœzmQQ]]^^(cXZXEliklh`_YC?l}baa`baa_`abbaabaababb`a +bbbaaabbaba`abaa`bba`a`_```___`a`__`_]_`_^_^__]]^]]^]\\^^]\]\[[\][\[[[\[Z[Z[\[[ZZ[[\Z[[[ZZ\\[<\\[[Z[\[\[\[\[[[\\[\]\\]^]]\]]]\]]_^\^^__^^_^__^_^__`___`__`a`a`abbaabMccbcdcccdbccddceccdccddeffefedfefggfefffgiggffgghgghgijhihiiihhijihijiiihjjhijikkkllk(lmlnkmlmlnmnmnnoomnnopnnoonopprqoqqsqrqsrsrrtstrssttuuuttsuvvuutXczfoXYSOPZiR?XZgwy~wqU]FCCCEB??BACFGJJQT0*^Wb#][[WfTPSF:{lX`TVyoyo~fdGkz==@GIKK?<~FJ)*LCMECAM,*!C;(''COO,'&'%#&''(),,*(*&0259>BA<<^`iokXABCAA=>?DEEHA@=4478:?23<59:=443?>;<=<=9;::88:9866766776586795120.,-2>=@BF?<<<;le]UOZYWVYZ.40+OJIG--O',=BE<46DHE,,(()/.(NOQQJMTSWS-54-...-.,,S)*/0/33632/33-)'%F=AB$#"""EBCHHABEC@975///70F\JRqra\ONASRHYB?MPHjeY\[vFw]Orxuw~]l[x}geYGFWG79:VZD=G/JUD/.H7;>9'"(+x}y`p^^^YG#3// (+%#$ $.% #5>8=,3(,4,-363:B50:2>F;7?@3430GS1JCI;>A8=DH49EFA4CCEF;fD4[V--J\\79?86:=86763VXKI)+++C9I6LVCD.-29/54ME02356<40-,TR1:3488/.0/--//.,RNQSQOPOKPPRRQJKLU,-.0R2WOD;K::612/5664I@==-3320,+D,-/FAGK?ALMBI4D<>@@;7,88?G@@@ABBEF0;90-/3-0a19>=:7678-1496;9<=<<>B1,Q47JG>7>?90$;;1)M\K@ARA2@EO7PPG?;\A<_MF8_E@7WCFADRTPM)%#%B5HPZ]15;:NAJO-^F:/4k=NV\SD1<+Q7=aA=@Fa]ZNKVbpmhbb]UZ+A=9;.$'('+.""$&";(!#$$$&)+++,.0/246-/2 &<8&"" =8-2#%1*&'#" #&#'*$'!"5.-*+,aNMPYklqhiYQWZZHBSLFA@CGFBNYC>GNnTqlYfttpq}k)+% "#""' + 6рѾѕфÜŮ܊󞏆ܟתֿk~nژӳcҢ·˸ٍ𠔁ѴžgXA!L(2;rМޥ򎭀II&1-&"5'š僀݃s}o};?@>9:>;>ABDDHB$;1G-{xqkQKH9/ь]bY[ŇllTw綷z768:71.ta1%"(,-,1rzj,(12BA?=;'#"14"%(+))&sKKUVNI,:=gjQDsKTVчtЗ}|yuh]hi_her{muno|nklzvqfvxxkqw͟#ݸd`ZZfWîYTVXX[ZZTRR[WUROSWUVY\]ZTURIJKSLQNMKNMIHFB?;8424.*+TTkpklkquigbaglqoc]\ajd[PUZ_chaY\`dc^X[RHEGDFABEGKJFCDDEFCFFKDCAw{z}x;@=>>@=57952111.0++-2115/.,%$&%',!# #!%$=60--,+(*+++)-0))0RIGoBB?74>(*..'++*)*++)*-,+)+,))*(()++*.)%&%#!"$+())-('()+QJGD@MMIKJI#'$"A>=7":!##$$"8:=>>CHEGC"(%! 9!"$"! ##'"'*29773+,-,%!$@07VaRF+&/61B2/9?:ZTKQPgn8cL?UZSX_gkN[IdcYYjpVVPAAM:*.1>H/3.'*(3":@3"#:)*+& 1"(&&"1'XK4--##   &$&$*%"06&",*.6"4-2&%$!'**(*)!,*.0(A/ 1/+=B'$%%'#      !%#)#'$$"($':A'($$(&4$#$) /8*2$6'+91#$! .)* ##$) $'&&#%%#$%$!%$$%%"!"'$'% #!")s! "#'%$$! !!$#"$!!&#$! #!!%)&%%#$!(((" #&!$&#$$%'*,) + % %!/7852-('%%&%&)*''&((&'),0- %##.1,+/$ %!$#)*+&$ 0"!407'4%*$<386;DEC8%$@EQV*-13E1!*g=*$,46725;RMMB>GTa]ZVVOGN':ADJDETTL/<>FMPUNKLH@6M)6;M`:898?81011/11100/00/012667:@CD?95549>??85366457:?A>=;98Jca[[XW[bcZNJIEDDCFJQV\_WSdQZ_^TSRU:K?27EJ;:VP>YpNc?K>Q]uMA>=m7XaJ7;G>*ff%&,;9PUZӿ.2@q%!-9:99/Z860,]i/+-/KhGmIxS{mop۩t{MLLONOKFBBCFCCDDCCuWd\}硆΢àŲ`攠񍼘mr􈏑Ɵ{VY[˜էڎꋤҷ²١斘Ñ͛Ӯž򁕄Ŕ̏۩݂󙣛ؐ喍궊Ӑ썧Цꖜڴ|XyI.?).AWMapQNʏ潞Ƞ䄁􄜔ϨſkwչƮզE$,)#'$&#)"++.lhKS|홞ŏrf>|ۆI]09&('((''"+Ea~J'0h둄r"'(((')**)() ()(')))**)$*)'()()())())**((())**)**+)*+))(()**)**))()**)((*)))()()'(/)()((('((()(())()**)()))((()*)(''(()()'(***)))*)((()('())())*)))*)((()***)*+***+++*+*+**))*)*+++,+,+++*++*+,,,++**+++,++.-,+++,...-,-,,-.&-.--+,-0.--./..---,,--..-.//..-..-,---./0./0/%00100011021/011031/001022311211332221233223434344454564456565446777656776676Ap׷ՙֹڝȹ̨ܜ惢ı‚շ{ҁߊѪγ󔙅ℊ旚̷ſëꔬӅصϩF%&%$$#$$%$%l$"7MܱͿ݁oX-+**+,---,+,++,-,-...-.,-,---./.-./.../00//136602WþǿȠũ뇟Ǻ􄆋끎ĮǼɱĿǷƶϱDzĉԀ۸LJαΥͲɼ߯Ⱥķ׻艐ٮí䀁󃇅ٵι扌ӃدŕݨȘƈخԿ͇ʷƵŨ׿猛ԀÐݍ奡𕈃Լ퓡ՁǙſï넃򑈁¤鷀܎Ҡص螡ṇ•¼̷݆»օը쵎fDZ𞆌싩Үփұſ夘db766@J6;:448610.^UBHUC92de_h986@86;;e=r=cKEmo8>\aB\]SV[a`D5?=O6PJHMLJMSZ-29:6_[^]_]aaac241-.3cjebMF\`6764=/E48$".QP7[lLZ>?B@NfWACD5UUFAV@?Z:O050\ZNTNE;X=UI0J65G>846k]NNUdfdmg\MXd[QSREHHIQSON^T9G9@VNNJEE:9FEMIFFGLGK-Z?@H08$3O06:BHJyxzyxyyy{zyzzzyxyz{{wsqpoqrpnswwwsunrnmrqvyzz|{wwsrw}shdd`^^_bckrxvi`ta||zw~z}[}wk[\s[Xdkc[zYWn^ti~m|\j_Y{wtyogaU]yHY|yQYcsmiPRdm~~gRfN{`gk{xrqpZssk^"vXKkzQLZn|g~bwigXIeoT˂Ŧöebacdca^ZZ[__]^_][huR-<5P`R-CqWþιkgp[Do]JD@S`r>@49DRUQGEA:;@SYQg`frϜÐmJjohjY^IIRKJq?6')' 2'$.(&'&%!+:=54+*r$&GhtKel[Z];R?ʬ<4AYUJ]WudKLLUOXKe`Wrt}tyǐ_]q:||xd~sofXa`a^cTSP`ɁoRdcdFH\a_abbbabccbcbbcaacabccbbacbbcbabaaabbaabababbaaabbab`aa`aabaa`a```__`_``___a`^__`_^_^^^_^]]]^^] \]]]\]^\^]]\[\\[\[]]\[\ ]][]\]\\\]\]\\\]\]^\]!^^__^_^^^__^^^`__`_``_`a```_abba`abcbcccdcdcccbdbccddcddeddefeggffgfgfgghhghgghhghhgghihhgjjijjiij +kjkjklkjklkllklmmnlnmnoonp ooqppqppqprqrrsrsrrststsstssttuvtuutuuvuvwvuuvvv~ehzəpHNOPPXRSHaTUTquwusVMEGCBHB>?ACFGDJLPa;1`r]E^`Y\KLF<ȱm^VcW`zfynvtcQuYWCC<=BDM@IOG:?AJHJND:CIO*OQEPHCBP/,#<(&#AVK-*(()'()('(,,+()!,36:=DA9NSUahv:(uhf?>A?@;=;?GE87@QFDEA225;F>V\I??=;99===9;9:;::963356544456788:<;86789:952111dikfee5[[__11243VPLJJGSPSL*+GGEE>CG*.+'((-,)+TQSNNSSVT+52,,-..-,*+(+/--0361-+//,'EFB>@#()&&HGJDHLCAJB@=974GMdLH\YC?2A7A98//+!Wtek|VZu~dnB(  -($91"#('!3=C=C/&.W@C8KQM7A*.JJ=RGPMKSHCG=^_\/05=1^:24SCaSMH011=&50)357/:,*$90/(9.J3%*/0%%0#&:/1-?-*"";J)P.0-S.WXPY.SBJV1KSTX_e|wnSU\T`qmi}n\aonx\a~wU[siuZtUId]aycw^Xzw]laWT~mZCz\rX%(Djd4IQ$11:<96:8>;38:8662-SW1KOMR0/4;,/MD/255:=7/.--Y\9:2465.,.2//111.PPQRSNPPMRWRQIBLLTU---PV1Q/55R71+113;731B9BLV62LQO*16/7<-S/m<3410222/-..,.-+PNtRWTQOIIGJHIFDJF/BACHA/=??A=8=>DJFDDBBB=6@ACEC>HHF>FF>>AD?=S7>@E;>CAFIHIE5>P//.\010//\...///ZW-00022212200.///-./1000/-,-.//.00210/.0../3884472/-ROPR3/*-463.2*383XUSOTSQQ\ZNA5R;$2:'1)1.+,+.-.,P:EK3(3Y6+///100%#)*('%!!?A@>:;<:;>>><=@AA=F<;7550[RD+)+6RI^:4UV/28;;76;7664/*/F@?30U:K0!_OFE:F\B@@]_[RJSW^hiece_[^;79HQL?Tf]Q7KVYXZV\YQD3X8$>@BAjr8=HGGGJNMLNPEP:H=Im1bQV\?7GLIDHGDFFDC==@=^o74!,(%) 7:6: $ 7#C%>-*<<$55 )*%))+,#$"*'#"%$#$%(++.--*,-..0772'$/1 %*/8"(!")0"%*.+" &-%(*$'% 0"+-/0.)%,bVKNZiljrh\IVaYKKM?AA@FHB@TN5E9@?C>::<<@A?CFIS-%DB55zvgFD80ϚijqYf[f}|gX{bd⫳B956711)i1(!$(*0./tw8+'/73EC@<;"'>2#$&)/+&6.CIkS`y39wb{oUFTvMOŻʘzsukZ[edbukmwvyse΂}~s[eikrt󠣣ݹ^`T\UWVUUYX]QSTUWRNSSUYWYWVPPRVRMHDGLMNQMJLIHGECB=7460+,,]^ltplkonfb``cfn^`hmlg^a\\]^Xa]dhiYTJIHEDCCACEGGA@DIOGF@CEFECyu}}}wyrs><<;7467411/34222/.,*-,.**(*0-$$&*%$&$ )%;@3,-+*''*++,-12//4TKG|rw<759CPQ,-10+.-*(++,-*(()(%&%$&)(((*,,+,,-,,,)&%$#DJNJFE&EKNM(('((E@?><6@8:6'%#& ""77<=AGHHE#)%"!!" "$ !!--,(,15=487.,5+*&"(/F5/E?.,(: (,368;;@D7DgRViVXUXWYKUPRL[Uqwl`LCX]eRV_doUB/#9&4%" +  "''"(##*!)(%$"".%(2$$5#," $')3(!8+-9%#%/!$#  #()5$'%&"),$$$#%$%$"%($$ "!&'"&'# &#"(-!!!""$('$#\  !!%#!!   ""  &"" "$"$!!'*)&.$)((%&'%$-,''  #, #$""!'(&$%'&'#"#('!-'#)$.,(%'" "%$%##$&($&'' 1*&&!'0),91.8E2479@LC<0$MIGPVV-//07GJ(.$00(<$>AG?8"-6+*%664;86OPLA;BOYZVVUPKP458DKF;N\VN7IPQPRNQMJ@80N.5=DDgl69;A==DCEFHIEDFG63",%/G'?.*.#&%#&&%&&%%"!#"3~}|||}|||}с́~~}~~~~~|{}~}||}~~}|}|||~~}{z{}}}{{{~~}|~~}|~}{{{|~|{~~|{z{ +zzz{{} ~~~}|{||{|{|~}{ z{{{zzz{{{||{|}{{|||~~}}|}~~~~}~}.~~{{{}}~~~~}|{{z{|}||{z|||}{{}~~}~~}}}|}|{{{|~~~|}|.}|{}{{|||~~~|||{}~~}}||}|{|{{{zzzyz{|}}}|}| {{{|{|}~|{|}||{{{|{|{|~}||{{||}|{||{|{|{{}~||}{|}{~} ~||}}~}}|{{{z{| }}~}|||{||}| +}||}||}}|}|{|}|}|}|}||}}}~}~}~~~}}}~}~~}|~}~~~~}||}}|}|}|}~ł}}}~}~}~ }}~}~~~}~~~}~}~}|}|}|}|{|}|}|}|}|}|}|}|{|}~}~~~}}}~}|}|||}|}|}|}|}|}}}|}|}|}|{zyzzz{zyyzyyzyyz{zzyyz{z{||~~~~}~}~ ~}}~~~}|}|||}}~}~}|}}}~}|}~}|}~~~ ˹숐Ô鍯º⅋􆸳놕ɰ۶脌Ñvзˋ¾ޠźĠɠԼ|5,./.../1001100//./.-..020//0&///..///1000//0010/011/11000100/01000102112SȱЈ񹥸Ǿ^/021001120/110021236;AAB?83343566433443246::97549I[XVNGFJPQOEA>=>?@BEJINXVAekPGsVLm]M[6[:/9G264<.3L9N(:Vs\hfnԥ8C;==8>B:4.5>/&16+>0KB@2:v]N1`InjHû2DzV;<7G@f၆ƾŻՁW7***+,--,,,-,,-,-,--.,-.-,-..//.--.-/.//...0../.-.0/126DmoY󓔒򂄇ñز̾ӹ􍗢ծπȺہĦȹƻĹܭԑͪӃ򗘼ȑľ㥠ۼѯؾкɺ撀Ѕһɯ󄥠ҹƱũư؏̌ۂƅ艮輄÷ݦÑŸҪ؏ƩޕሲےƻԪúꝞ֪ð䄂遀畣ꁊּƽᢏɠŘѐꈓ꾫ʪʱ׹Ǽ־–¹Ăƅ͉dǼ﹕жּۂ番Ƙ𨞕l8:m86FJ25=<6012/\[LWQMDE6\]Xe=AFA>K?78pigJ8NjYggd>.*0-4H:=:RQW@E0EC4CT>984`PLB?0?@[F844kbLJU_hcf^WSR[eLZSDEGKPVRQ^Uj@FlboPTY[heaiijsoeuuvvuvvwvvwvwxvxxxwxxxvwvxwxxxvwwwxxyyyxyyzyzxyxzzxyxzzwzz{{zyyzzyz3yzyyzzyzjki:?h;XMFEJGF@>7BD?@IOH?J3SM(4HYK:BOMQ?Lr|{z{{z|{{zzwrlmnmnuxwtrrqttuz{z|z|{{|{z|~ytkdchllh`\[Z[]]]agilqqErmd|zymb\k]kn}YKi]xTXl|pluysto%Y_yz~~xmjwdTswW_<^wc(^HVwyasаvZtxspYiccXkCaj3x~rwrQvnfchR^Tvh]\\^a``]]]afa^`a\[cˉuM-=k_BLVBaS\|`r[wlV$TiypCMdB7foC?j;/%.8<1p\“rfijNyi_[T9XNdkz8igPrUfagmXQiihsʁ^ms92<L]10^^S_LG<|íc_KdWukf{qj|Wxķ?G>=BDPDBRRL;>DJHNNQBBMV)?GEPIEE(/+"#'@($AOLK,)'((&&%&&)*+*(&9(569=C?6[k"g\/q;]lhPOQPPQQQPQRRRSRRTu}tzqujZ\fa]jqs|oάklmekx}wx|lVcigax`[[ZZ[[\[\\][\\[]\^]]\]]]__]]^^^``^^^__`_ `__^``__``__`^anh^XX[UNQPQWYNOILVYYZ\^dd\ZYVWZ[`gonpia\abeebZWQLGD?ursrlx}zvstiikliqtqfu|}|jgzgcov~th{|c]^]YoXUVTWTPNNIQUZUKMjQY^NKQMHJJJFIKRJDFFE==@AFDB@?>@BDEFB=@EGC>n`9XKNLL7347BL[L>==;:;;=>??A@@EGIt^TNZe8986<;BH?BD>;<;<;9<:6457833553146979:966421]XTRR)+Z^e5<7\dj3550.TOSNHGHJIRSMRNDEGDEF*.)%()+,*++UVRORVZTU01/WX./--**).*),/032)(-.-,)PM&&'*)&%JELLOPDFGEKE<98-VNI[I64;BNKBebgSIMTSHESb``ViqP\\T`\\gcfsjrusejdGg\_D8L4:6B@8<:.43747@E=?:4BL<+KUh~\Xx\bngy>>=92,&')1I71738H67:(/4$+>@LI4;,69/38) .)04)#19CD@KKIXMTSDIIRVFFDT3BQ_APdR[RbSj]gAWOqeµclyM@TZUc}~uu]Nr^^fNvrI?+:FG@:AA<>ABB@BB?C85:;<<;AGA?A>AC>AF<62.?AEHA;=CBB>I8";0[]]b[QL..V[\[][TFM+,./332100//-//.,/0/../0../--.-/-,-11//124//24842675444XTQZ\VVU.URLD/533_WQUQGOIMUW025465R?4I'0*1./))R8>/*1:1(,//245-$-+'#"%'%$"!:< A>B "$'$)U2'3E5(. +#C $^=0O7C?1?LCWJ@RFBB>EMOOOL@MPYUKE@HRZOQ*6YO@J;IFEQIKGDA:Q[_\Xa256g8>CK0BA=?J7LTP]TI"E<7WD?A?C=@X`YQMQX_fhirh]\E<?BCIMFCRQd>EjarZǸ\cl~yvގE11,! "' #  #5Ƹހʼ̴ڜͅzx3.〾˶⡗ӈn}V[㣫wÂ蘭ԚǕ߄塅Ăڹzz`K9, $*'73qeׁޞ֕nyf6%EC3t|F@剂Çc~yɢꎛӼȸ_Mod,.)$;Kkv|dQB  B&1$,5!$)DC8&!'JGd%.AA&'F7.Kg:ZM?WTPLA7 ..*%'F,?,9 + "/   +  + !,&##. $ +     %s¡V̛θu:( + + + +   +G`ᣠP*6h|;gXmP+/2zW-?fᨡ譍ÍzO+AhA'}Dt퓉ԡvѥlAu鸼!/Ą#ʆȀ؅{\h>EIJHQPSD:dba^lt|yzP=;==8<@BADCCDGL+)&-65uybaE82̧uԪrߵOh\㉀{rli۬><410*/)37)#%&*-31ms:-)%14DC@9I%!8=4$%&*.)#DrjCHD7y\CPWj`Њ򞦠ztshX[eccĻq{~xܻprnfkwjQX\\]ȣքr^ZWYTïùWWURYZUUOORRWZ\WUQLQXRNJCADJJNNLILKJHHED>854/[Z^_\krokjlddcb`gje[jpppc`kZS\bjaZo}s^ZXXTfLHHFGFBBB>FGKH@?YENPC@EBBECBJO'*+(%CBEA>;996;947.&%%#" 6;;=BDGEE&&$BE%%!!"" <:43?=<9,/2060 "753E6$$+2;6%$#  .$( )"!%# !6$,,03;4+**$=/%9,3531/#1 #%.7.,!!  "    $%$%' !*',"0?<$)' $8:M6?2%+"'1+'5+$06E4"&(1!"1  * # $-)'"!(&# &)&'$#(&#$""$&&%(! #&!$ !!!!"#&(%#!#Z "  !  !!!#!"!"(&'**'!&)))*)& [)'%*+(&$## .*''$$ #()   + + + + !#$$ + )  +& '#'%(!!$%!)#% !%&&&'#0,./)'$)+1)."6,#'1763467C>=/# !GWYNJT-//V18@G)43t14;*5=;F@95+)?.+14:55GOH>:=GOVXXaVIL<:ABKIIGW`>cFOUOSQTMH>.K\)03MOL]9;=@7hB@;lEKFDED405/('6091&)2!%($$,(%&%"$##$ ~~~}|}}|||}|}сҁ~~~}~~}}~~}||{{~~}~}~z{z}~{{{z{{~||{z{{} ~~}~~|}}{}~|z{}|{{~~~{ +zzz{{{|~ +}}||}}}{|{| ~}{||}~}{|{||zz{{| ~}||}}|{| ~}}{{|}|}~}|}}}~~~~}}|||}|}}}~~}{{|~~}|}}|||{{}|{||{zz{ }~~~~}|}|}~|}}}|}|{||{{{|~}|}|{}{|||zy{z}}{|~}{|{|~~|||{{|{z{|}}}|}| {|{{{|z{{z{{{} +{{{||z{{||{}}~}||}}}|{}|{||{{}|{| +~~{{|||}}~}||}|}}|||~}}|}|{|}}~~}||{|||}}}| +}||}||}}|}|{|}|}||}}}~}~}~~}~}~~~}}~~}|}|}~}}Ă~~}}~}~}~}~}~}|}|}|{|}| }}|||}}}|||}|}|}}}||}|}|}|{|~~~}~}}~~}|}}}|||}|}|}|}|{zyzyzyzyyzzyyyzyz{z{z{z{~~̀~}}~~}}}~~~}~~~~~}|}}}|}|||}|}~}|}|}|}}}|}~~~ Ǿŝ釢ՊлॵŲfꫴĄΤږ虐ڭƣԹ㦒ŗ}%110./0111010/00/0/000/110010101100210121112212211100110210120112111;ɮͻ:33101333211232343447:<@;746644454335432348877645ABBCB>@8_Y][<\84BGvJT,)(36@:?,;'8Ѩdy{șвҼWA?W?Lba?%%s\ȔϦalOXr4n􄈏@[VwIMNLLHDDFMNIJLzwFTOhhѣؘiVk{aq[<7nmn:{yw~{sqg󌝥]drѥ쮤ى悩Íēšћȭ͆Ѐꅃş鮟ဆтúƀЏ䤲ܲޗ췠㟣йÀӗઋèƋݘG]e{blӣ慍]6Jڎâ֌耒D@.oԀŠA<ؤ˄ơDD9&=1*<,GT/2>+&B9\DQIyۂ퀇?67%B%%/+4ChĵÀb&Df$*()))*++,++,,,***+,+**+++*+*))*+))*)*+**+,+)*,,,*+*+++,+*+,+++,,*+**+,*+,++*)*) ++,+*++,+*8++*))***++*)*+,**))*++*+*++*+,++,*)**)*)+*)*+++,++,-./.-,+,+,++,,+-,+++,,+*,--,,-..+++,,-,--/-+,,--..--,---.-.---/././/..--//0///0/.0.../../0/0..00/0/././00///1220/011210/07112121121221222134212322122232232454223344333633343455456655777666778767887668877665A[߼ퟯнζږੋ×ɕؑ〃񏈅rإ훿ĢӰԀǴׇĨöԟףǑuB'&%|&&''&%%%$$%%&%&&&5?Ħ턒3+++,,--,,--,,-,-.,,.- +./..-,,.//.///..///..0/..1172Y_]kBEB8j9/$8d\7EF2JY6N3DE:0U9342ZSRGE@AEKRC=G>55HASI:GGDFMy|{|}|{}|}|||{xokmkmovzyywyz{z|{z{|~}}|{tkcc`\\\^\[[YY[[^bbacb_^SsQe[hjnlNccwpwqrn`}soll?SI~y1Ltxwvvvtvwywxjtuu[eoGqKXWxYw.Y\_k{zrup}csnsUk`QE}[|ɻ߁\ӃĎ|mMezeon]U{qtwbcdeca]\`gjedbacfPŇ~ˣ`QUBL`4mQrJ>spZsp~klACQQQ\azn6gkBLY^`tzZijYfZAkwE|egViTLSp`BE[9{l~G[qdbu\}EWQ@[J5B8@CI35&@^Q~XTGqcSWTJielZJhTIQ6E#.$+#=6 +Jf8QepoPMDdGHAUV\]V_^6(R+'9CC+,-G)"2*+.1FAS˛G#.xPyjyv|kvhId|l_g^@>p>G@$=<)/''+#$($}+0F;F(%57B)H4a19f_^aab74A;xqΌ{wwn{oP\KV|_svH\]SGk[nrcz~fGuI>><{KZLGik\UQbdc]yDuau9S[fcdeedcddcccddedccddcdededec dddcededdccbdc dddccbdcccddcdccbbbcbacbabbcaabbabaa`a`a_`a```__``_`_ ^^__^^^_^__^__^^^_^]]^^]^^]]^^^]^_^]^_^]]^^__^_^_`__^_`_`b``a`a)`bababcaccbcccbcdccdcdcdcddcccedceeeddfedefegffghghhhghihihiihjjjijijijhikjkjkjkjjjl mklkmlmmmlmlmlnonoppooopqprqqqsrqqrqrussststututuutvvwuutvwuuuvwxxwywzzywwywph|ֻXGtDP@KLQRXJ:75ZZbjvpsFCDDECFFBABGGJFHILTY8:gO\2eXNVZiGG@BIMMC>DE@8]SV//47:869CFHRSGGGB>;#::;?@@A@ACGIkVOJO_:<><98=?EJCFE?:<;<9688:;854400134466gcgb_\YUT)(*+-.-1:4`eo6jg`^[YVSMKEDFO(JLQGKCBC%%+'$%'++)--*,TQWTSMV/YYUTVZZUR*++&(,-012/-01.+(NMI'%&)#FGIIS.<)GOTLG>?S/TMC_r>E?\U9EaaOLSZdOCA]RKBOj^SOPVQQ_gcg{}ltjcelykHD:NH?F:7;DO>B6 9;=5:AKDI;7;a9961A0?2?E,IBZ\<;CBIIICMC94.9<33:5465FLFSMRTAGIB??(%2);' %*7?81,.0,0013184010001114/2TNPX-.SRVWRQGKQQNRXXZXV2-4,I70:9+\A7*Q16-LA)K>N91-/G.LKFA2SQ:32/0422//-/-/,RPOPOS+,sTPKJFGIJ@=EHJG<>FA;47>?EAC>=@@DCC@6;@?=9A:>;?D<@PC4.;9=BG?D=:B8<;1:2-C7'/)G,WWYXVUOM.--US154310//00/..00/-,--.-,-/,,,/00/112204793233303310//XTSPM;3<3aC/8:==BP\[WROZVagjlq9b]J>HBPMLM]a]3?=8=47/ ,%(%$ 486>&&$!&&! %#/)M/;:A: ""., !)'2=""!/ %,&("%$#"(!%)%$&*,'*2#, )% $#$ 4 -#$)0#&)''"&-&',#6(*adcNPUYkirhYRUTVMJVAE@DDB<HHNMO>0/1\_bkzttA::=?DIKMMMKMMJFEDA?921-Ya[]]pmfjnti^chgokh`ija_[[eSZaY]hnzjaWUjpNNJIIDBC@C@JINOPJV]K@><>CCHEBB>ruwwyr?EB=58:84X/43653/-*+-/34-+10*%<33#(-9:1/0,)'')*.0./03369SD=7ke39!"&'('+,153441/001/--)(++-.*)''%%$%'())QRWVUTPLF#7649132)+'%!88?>>;B%EEADGIFA<!! !><34::9D"*-8@6.#%913/M_.2.IF)-BF:6>MWF;:TMF:HeYMFCFFFNOIOirpncSYMA>GWP791A;05)&'1<)0'''&!&1=6<)#(4"*/)!8.3$ F$.-$ ""#$$."',*)$0/!"'&>%$)+2347,-,)(-#"$ $62! "!)!!#$$   *% -'"$?#,7$9?7&7@]85<6''20(49*!9/)6'#200 " &!#$%"$)$$''$% #'%#$''))&$,##$%!"""m!!""$%#!  !"  ! %!  &&&'&&#!$# r(&%$#  " "!%$ &##""(#$ +  +   + + +  +       +"$&''))'&)%!!"&&$#!'"-'$!!"'$"6%%*#8.C3253@MB4&"OY..MN).,07B;M.2414;$;<BB=bBHDFD8A+&.0*()+I,*&$)&#))()-+'""#" ~ ~~~~~~}|}|}Ёʁ~~}~}}~}~~~~}~}}~~~~|}~|~}{zz{z{{{~~{|zz{|}|{{z{z~~~{{{|{~~}{z{|}~%}|{{}|{{{||{|||}||{~}{{{||~|{|{~}{|{{| +~{{{|||}|||}}~}~~~}~} |}}~}~}5~~}|||}}|{z{z{|}{{|{{|~~~}}}|}}}~~|}~}|||}~}~}}|}|{{{|}}~}|},||{}}z{{z|~||}{}||}~~~}|{||}~~}zzz{{z{{|}|||}|}}|||}||{{|||{{z}~}}|~~zzyz}{}|}}~~||{|{|{|}}~||}|}}}|{}~}|}|{|}~~}|}|}}|}||}}|}|}}||{{|}|}|}}~}~}~}~} +~~~}}}~}~~~~~}|}~}}}~ ~~~}}~}~~~}~~~}~}~}~}~}|}|}|}|{{||}|}|||}|}|}|}|}|}|}|}|{|}~~~}|}|{|}}|}|}||}|}|}}}|}|}|{zyxyzyyxxyzyzyz{z{z{zyz{z{{{z{|~ŀ~~}~}~}~}~~~~~}||}}||}|}|}~}~}||}||}|}~~ Ɨоނȯߋޢ܂ꅺƾ邏ӽλìܒЉ헚hޚ쓺ѧսʨ׮H:0///122100110 21110/01023012(1122310222131/042323234332111323322123232>݉˷˵䘴]632134421103533244459;:6459;75444333443466766546664311449:>BDED:8:@B>?41010E_C5B.VIA-[!)0(*@DCCNd卹⭊ŖU+86333232334))438@(* ,Ax6=S﯐~xE+J[S$h`'μepjN!Vdʟ݁cP]_LVQIJJDCGJIHLVKOYσ׼ތܕt{Áhm⏑ÖeXC@@>>ACFD;;>@>BHQRuŤ؝ە؝ĘȱہǍ©ۮኄĒݩξďֿ֥⋁ԃڗՉ‡恊ՊՑʜÇЏGrN]j鍊͉śN,6ڂ脋̤ȞVXw֌YLztoBYķ7K(/**7T?@A;0&=9aSqtEx}Дhf'4>%C-LgrTۃ2+*+,-,+*+*+,,++,,+-,,+++,,+ +,++,++**++,+*,#+-,,,++**+++,,--,,-++,*++,-+,-,+,-,+,+,-,+,+,++*)++,***+++*+,,,+,,+++,*+++**+,,,++*+,-,+*)+ +,,,--.//-+-,,,-, -+--,+-,,--,-,--.-,-.-,--,,,-/-.-./..-./0/100/01200../0/../000///0/00111/0//1/0/00100//122/01/0110121232322212324/2431354434435455643544476676656657676776878678787668998764;˳ŝͻω˗ה쪭𐌉ϴ׌ܤhеɾ⇕ڿѭ⽊ࠄjD&'&'&%%(''&f'&&%&-Ѽ􊊉62,-.-,-.-,,..--.,-.--.--/0/./..//././../00/.01014:Kzk엒ο䀊·􆍀ֽ̲úᑚԲۅ߀øӔƑ怄뀋ѿƻγŽǦˠƎѼһñ˲Ǿůҙȷ╩şֿŠҵ󌋫ԥ청ݢϵրµȻ˰땇߿ңġҙӳ抳ϗԀ񚊍榐챂׃ӱ񊉂сր䢞ۨ݋稥Կ릣ٹ˵툋ьŦȸĵпƽå˽ήŀ갎н툅؁橇׼ۀΰù󄃌¾䄔§ñǼϮω؊{ݧ˂㵾ܑ啃ۻɢրƊ⏌>i6``iPe@J=::26550YJIDHJD=:cU__];==@FD=ZkKF=U8QIW@T;D:d`c8MQMIFBMT,22;=K4/14.K5?4O]J.BAEZ8T7_9CT[-0X?R7<>:6@D@<54;;qKCe&H%-L;ZPU3AA<8M^3^SIFcX[F18B3:A5N2H:5vtjLMRRY[`c`WV^_LP\HGHHPKJN`SDLM}|h_U__c[jhopf|vwxyxxyxyxzyxzz{zzyz{zz|{{{zz{z{|{}}||}{|{|z|{}{|||{|{}~}|}{|}|}}||{{}{pleloeBL9GTSMMLH?=DHDFFJJLJCP894T+G9:DEGKQw}|}}~}~}}}|{}}~}~}}zvqmkjlv{z{|}~~}|~}||}|}}~~|smhfd_]^``cdfii][_ghdcXVTURk|haSki_MYmsZSskbĔnI[v=upmlK^myUD53QKAɇW}zyzyxzyyyzfV{x{r7_m`G]OtV\jdRlegwճ{ptkj}eO|ds:=Ckrnnc}qsZbMjtfldPY`ڎ|nnlbdb_]bfgefhieav|ufa>3=G5Vtoq|]urF`^ϩeE_[ZZUVY\^[TSVYWZ^gfqfT~]AEUP|ԧpxh_YvXf[iG@n[MhDo@Zhrcqc12h`UXeZcjbQ8HĒ]nIt;g9??2XE(CXGEOKWdVKW^kϔ{[^ayr, 7%$ )5R* 8JgANR$hNC8QAVGfm>h?IVTcc39QA '***79>45,7P:( %Zbxcpx4m_kdh{iZ9M=):D)9+++-*((')-2C:=$*:AEE3:>2$G:Uz٢26BA(tm_x~sz^lV?Hjvfqm^TrbsmrxݟjICBDIJ;WRJ9VvWL[DqyͧĈ]km~idY>_Ogdfeefedddeedeeffefdeffeeffdefefedeeceefeeddeeedcdeecdedeed +cddeddcbdbcbcdc bcbbcbbaabab`a``aaa`b`a```a``a`__```_^^`_`_4^_^__]^^]^_^a__^__^^^_^^__`^^^``a__a``a`a`a_a`aa_bbbacbcbcbbbcdccdededceeefeefffefggfegfffgifghggihihggighihiihijjjkjlkikjlnjlllkklmkllkmmklmlmmmlmomnonopnlopqpprqpqoqqprrrsssrsttusrtutustuvuuvvvwvwwxwxwxxyyxxzzyyy{zywx{{ycz^QFBFkQ>3Teomth;E<<@?AC@@BDGIGGJLUZ5N@OG1]QZ`cN=C7lbegde`UZN{gjhkdNlM|2GGKD@JJFFNSOMUW\`[TYGDJULROFLOFN*.+**'A%BWVCO)*)''(')&'*)+'835826:<>CA8DLJDAH&RRXqfFFQ]fQPQRSRSSRSSTTTSTjSSTW_|~sou~{pm_kruiesgdkqrejhqwpxuyxo|~e__[V^[]]\\]\]^]^_```_^^_^``^_`a```aa^_`a``_`abaaa_al|i]RZTTKHNSUOOMRUTY`_\XTYVS^cbjqrjbYY[`^]ZFCBKUI>;8B;<62B>:@6@BI9&mrybjVrsgZ^`KoVOA7>=IWJQ564.335,)*$90&("'@?D449$7I))88E'BSG-EFV2:4A13D;A4+7F4W45A@K@PHRJ@72%)>8441-756FLDPRMDCJJH?>84+41-96/)&')B?5<`E8^FaVI<@9421M2EQTK`q}sssQxѵg~ezrNvUOTo|u}^mBy{}|^HdYMc[F;V55SQB/1+O2/P;87),*<./,)<=53221221/0/2.-,TPRQPW--YSKKFEF?9AEFJKF@A;@C;:=ILBHQF=7;?CB?LHACBC<:= ?1#'  +:=OSWSR??NV+++-6641//,.0..--.0/.-Y-++,-V,+.-+/0.00121/-950/20./000//+-STMLKFVW,+WQ<-+)>9;:FG>FFFJQ14D?9O2 //0/0-%+,16213+#&&"&(($ !   + #%/C@0CVMD=:4H@EELSWYPHFE:AKUOIE6.5gHEDB=^H894=Nc6YQ\G0EEEGJVTJI;-QW21\_Z42:AL>[8BC?B9KDP[WPP2>E928N)*)2HDFFH:@NMGOLRCQIPHG^/FHG\:,BKGAMOMKPPOC@@?"846:(3!("#!#" 72946""!#&>#/.*I7;=8#(#($#-#5"&769''$$#"%#  #* !+//&*'"#"8(/''",*%! -*.#$ $'(-*,qphNS[X`fild[Z_aLLYDBCCIC@CXRFQQ}júj`mmuo l3.583!"''$"!  $# $4ƿޗҊۭけ̙⫍_<89"SOIF!&JM٤lR_\bC$#'  + ,/.-";4 )(##,^UPA' ;N[A*!'fSHkF6.  + + + + +    !#mʥ?>GQי˿ΕproC,1<*'$9f`Ʉk=MXh`K9,v ԄgzͺmUC:@cH6JHHMD//2/P_knyi:=5688<:;<=>BFLSM&3&3+*`[_caH650|˰qpwwldZ_RzaOkI֝%40.%+25+&#%+.)&00o3*,'5;8AG=;$"<>BCEDED=9:tulmrFED>IPI66.795321.,,)+.4/*+F=217! !!%$$$%(-4;4/,,($&')+/,*,/612BADCEHIIB> "&"%%"9605<@C:528EY=5B$/4&,62F=>,@4@&6CLFZe_RLHGVW;F_?CH>J-PMIBHf_\F8BPQD:<5JDF?ED*)2-*)",*'4*)$"32-7*113 ,# "&&'5FAL-*& +($'",#"-'2+)(0#*#'C.#:E5A;1)+'!)#"&&)#$&&" "!0(0'2*!)!(+$0"%E&*D>1%((+/RWO/1* 'B5*4'8) =4-057/.@ &  # # -)$! $%A%%%$%')(%# $$&&%(&+)'$$#$ #!#""%'%!  !  " "# !& ##  !  !#&$$"''%T#$!!!&&&$" !#  +# +   +  $$! $(),($#!"%+'#!%<(&#"":-# )5?"2.9/"24479FD7-"$JN.+OQN-+29@7O,2234.?8>EE=?%//$%*6+38FJHD=SFQTX^..)PN6<@IJBJLJU9;MIRRQSSOBFIB3;3E@BBE9?IICD94+1-/,)>$0&&+#&$!),**+++#~~~ +~~~~~~}|}ρԁ}}|}~~|~~~}~|||~~}|||}|}}}||}}}|{z{~}{z{z {{|}z{zzz{{z{z +|~}z{{||}{~}{ z{{{zz{{|}~ }|{||{|||}||z}||}{{|~~{z{{z{{~{{{||{|{{{zzz{|{|}}||}~~}}~}}}~~{{||{|~~||{{~}|||{|~~zz{{}~~|}~}}~~}~}|}}~}|}|}|}}}|{}~~ ~}|}||}|}}}|{ +z~}|{|~||{|{||{~~~z{zz|}|}|} |||}}|{{}}~}|}}}|}~~{"|~~~~}{|}{|z{zzz|{{{|{{}}~~}}}|{|{{|}||{}}|||{||}|{|}}~}|}|}}|}}|}}|}|}}||{{|}|}|}~}~}~}~~}}}~}}}~~~~}~~~~}|||}}}|}~}}~~~}~~}~}}~~}~}~}~}~}}}~~~}|}|}|}|}|}|}|}}}|}||}|}|}}|}|}|}|{| }~~}}|}}}||}|}|{|}|||}|}}||}|}|}}|}|}|{zzyxyzzzyyyx yyyzzzyyzz{zyyzyz{z{zyyz +{{{zzz{{zz{||{~~~~Ā~~~}~}|}|}~~~~~~~~~}~}||}}|||}|}|}~}~}|}~~ 쓤ŶѰˇꓔⅎކքѦꁆ򁏙^󇤎څřDZÛԹޜℌF5/01 232321012421232332233343334311222332102345655432353134224443^4ԠǭԨõI6535434323555335457;<:768:=<8554233345554654455754659>GIHF=966775753021Tlv=G<"8)?,V/&''>&A7kqatՑƁ䁄?642233223325563->S+;*G=2C}~'E׷qjVl]!JJpnŀͪ#<:KQ>]A&!ҲDX|Q˿ʪ􌻶-nFP]GLPLKKEwFKQiNPS୘У̷|㫣~TѵƆmyGVGDEEDGGGD@AEHHHJIEG~Z\؇ֽۀ͈戢ؤגˣDž᷹ûˆʮ˔ê߽هȘ흅ʢ陏̊Ȯ̙ۗuH؆Էӫ~븖̱ӂk٧Ŭ酄ra>ER€f_9$@D2;8B6M(,(/2LDFZ8?-ѻ쀅ׁu@K)0hMEMUMy٩ﷳ=*+,+,,+,++,,+*,,---+,,,--,+,,-,,--,,,+++,,--+++,-,-,,,+,-..--,+,---,,-,-+,,,+,--,+,-, -,+-,,-,+,***++,,,--,,+++,+,+++,,-,+, -.-+,,-,+, +,.-,,+---.-,-!,-,-,---./-.-,,---...-.--.-///.-,.-,,-.//.--..--/./-../..0/ --/0///0/0<11001210//0//0/10/0/001//011221/1211122211101222322211122333233323 54433213455545445554 +5556556655676675676877889988789897788975;ׯݹ򃎚Υ¥ņߓ؋뎔ӌʼÿշሸ`޷־ㄑąŃʋqC&''&'&&'(('o('&'''&%$9]ʻY5---.../-,,.-...//..-..-,./0.//00/0110/1337Cd¶ڀҾз񅝰ŷ󄟵ӽܢՔıƿ􊊄ῬԾᲜԻɷǸԾƪր顾녅؀ΤŪçνå̻рøŷɫģ؅ὐռž̊֩끜˹砕vˈᘑ㠷ꁉ򴓮ԼұՀƺϵ¸߸ų̛ѬǺù߿ݠ͕ĖրijɰȰܪ胂䍕бЋ°ܗ޹Σu꛽߯꽵鞭ңዽӿÙ稦Ӌ@?67beW^=?H8:32011LA@@A>81:2YU[T[hdp;9kRNn:N?K^Z__j<@C;A>;88?Iv,2B!-2]TM-2DT[THL;XSWN9>?409<@F85trkN[WYVVWRLUYHD@L]QPO_PL~qfQV[WckorntQrwxzzyyz{zyzzz{|zy|{{|{{||}|{|{}{{~}}|}||~}~}}|||} ~~}~}~~}~}~}-~a:2p^UYHKLMOJOGAD@@DFFCCEHIENH=3)0F?.v|vCz:xR\wK=66A_YV8^[anSHB\nWf?K&3&|xȨ^MVG>cmŇQRH#4BB:&**.&%&)'.(6J07+G7'3=(+$ 6J7>˰L9F&(>5hdv}cvp|[aQq{|\UaV\bu\redg{|u>;?K?`dXFr(\R~qs}_vvERifefffgfffeefefggfegffegfgfgfefffeefefgfeeefdefeeffgededeecdcdcbbddccbcbccbdbcaabababa`___a``a_`__` _``_a``a``_`a`aa`aaa`aaabbbaabbabcabbccbccdeddeedddefefeeeffggfggfggghfgghghghihiikiikiijjkkjkljlklljl&kmklnlllmlnllnmnmnmnmmnnmnmoonopopnpoopopqqqrrqrtrrpqrqsrttts rtuuuvttvtuvwvuvxvwwxxxwyxxzxyzz{zzzy{z{z||zz{{|{vdlͯRLIgh6XO?HNXGI4R^7=@>qf9u|@BAA?BEHIPTGFSRZ043REl69fZ[VS%++2IE=ADG7^mzIMhdXSQSSSTSSST:UUVUTTT\zrׅj}{}ss[hjouxmfѵmbbjp}}~uu|}{Agh_t]\\]\]\^]]^^]^_^^_]^^^___`___``a`aa`b``a`bbaeelleXKKNOLMLMRTRX\]YXOS\]]dmnjaYUXZZYTGDtnrvnt}vptwohqitmhgjj_jrmlfgxkwsivpgudZOMPVR_\Vgx`aV[WGJLMJIS]TILPMHCAGIEDKRPXNF~x?EIFEDA@?=;F^H_UNLLQY-2:?DIKGDCEEJNOE?>A>9989;=<;?BGF>=dTVRLGIY;99:;;;:8:7686423531a``c2332845233fc^\XU+))(LHNN'PQ_fjkhe]UQNKIECDL))#'../)+(F()%&&((%-,(0-,0--S*2VVSRUXZOU*&&&*+/1221/1/,)KOKH$%'+//36_8S^USX^]ZSPPOQT^_HFKHD05CQZhd]lcheXGQV>VvSFGHY[Zeff^lXC>ERHYPNYh^SOQEA6.:B7:94BZB466/@;983<=BC2QgseWIFZvSNGLOz[K*59C>HNC8(%.22.&"- /&,=F6,-E7*2.241*&3CQGV4J\3:EHB=jcloFEFDHRHAP=@<<:A5/=:@C>=852>8EGCLC580#3)./1369=MPIJGA@D?D81322+,:BB83-+),8W=ffrLP)%8.1R:3:5==?==7979943021Q'F 25C,_3@NM--79833247977::92S112/.321545540-.0/0342SWVSX//YWYMDPUPSQMRWXS/204.U8+8CM?@K4210-,-P2JSC8@JK9@R1C#<6423023///0./-*+ROOPU,.YRKKEE@;ADGKPOJ?A@C?CCCBEIF@BEFEFA?C@D>@@A??@ABJIINNBC:>B@.AKEDCC;L&-K@?FHE@DIPJa^5P7A;9:=YG,\@EeV9O@ceO=4cl5@24)IHGHJLKHM3VNZ0a[ZZY}484NM08AD?>BK8GTUYR4=K727Z8-''/>DK\TTOTZ^hl871`^:MMMJ7FUWXEoi@WY[^`ZXXHH19:7+"VP_Tk\?EF?8MJIMPwNI?SKGE8^G^Y]V2C@DOMNHGKOCA<>#"58.1!!22428=8? @20@"1)7E767?#$#$..)+9#!%<;#+)$# $$ '0)+.'%.,'!#5/+&#$+& !! % 2," (*( (')&"-!#!.).oojSeab]Z[VMUXF@1yn47]P&!&ۡ̀ެᲽוZwiڑ˃ķφɺ˓౮ݤMN΁O4$)&',Zgx^醊ʎaFY`j`;"/Jo|IUu{_lcႷ߂?B@|fff@.2 C* "()&$' !;@32<]0$++(OSCS40&,9A\659SSD12@?09#66( <0+&E*7#+(7/Oj@ .'(0+1 +#&8 (((/"4%(+-9 1  +  Ű9$w#@:DmZ(&   + +  + #  + E  ZSKIeQł繧pvS]<9))#!>* WЁl;UjoT2EiᴺÄ¿хЀܽvvVHB[_.FD9DFG27*HR27<3>C>:&-O?9,"#"#%(),+#(&"%)/,LT_fEFXMQħr|vtaggktxtjukfmvyzdaVҟofXNLOPMNMNPPQUSNKKB?DBADGGFHIHHDACAxq64XZ`e`htmgimidl{{dneccdbZci`]WXj`jg`jd^k]THCDHBKKGVcPRHMJz=>?@>=EKHBEGA<649=9:AGEM}Cm7`]/2221/-,+(&+?0B>9536;"&'$%&'(.470+)*)%&&)(*(')-31,-MDDA;75>&$$$#%+-141463222--+),**)*,)(QOPO('(&*'&%$&PQOMIA89=800>HOOOLJDCB??:557$5">A@DFII@?"%$#"##!583/#"&*D,AI@BISPJAD;429EL=::1.%4?IXZSd\faVDNS7LjF;;7GJJOLLI[F/*+:4E?;CME?@A84+%+"('$0C/'*' 2/,*$..1,&0 %&,*$(64BH:)  %+ %.&3 )3"/2-*G:%).2447?1CB<6HEFIGR/.(4-+*)F/3*-)# #**+(')+$# !~~ +~~~~~}|}|}|}|}}}|}|}~΁Ӂ~||~~~~|}~~~}|{{{||}{{{|~~~}~{zz{~{z{z{z ~}{}~}{z|{{{|||}{|~~{z{| }|{|{|~z|z{|z{|}~z{z{{{ }{{|{|||{ }|||{||{{| +}}|}~}~}~}*~~}|}{zzz{{{|}~|{{z{{{|{{|~{z{|}~}}}~~}}}}~}}~~}}~~}|||}}~}}}~~}}|~~~}|}|||{{{}~}~|}~||}||}|}|z{y{z{|}|}|}|||}}|||}}}|{{z||~~zz{|{}} ~}~|||{{zz{|{{|{||~~}{}}|}||{{|{{|}|}}|||{|||}}}||}|{|{{|{{|}}}~}}|}|}}|}}|}}|}||}||{{|}|}|}~}~}~}~~}~}~~~}}}|}|}|}|}~}~}~}~}~}~}}}~~}|}|}|}|}||}|}|}|}|}|}|}|}|}}|}|}|}|}~~}|}|}||{|}|{|}||}|}|}|{zzyzy xxyyzzyyyzyz{z{zyz {zzz{z{{{z{|||~~~€ ~} ~~~~}|||}|}|}|}~}~}|}|}~~} ʕվνڤϜ֪񂙚݉ư튆ψƸ甕e؅Ė۷Ѷ؃p//21224223213412244234(354434211334434211435457899876784334344540?ޠŵټ셗ɼɿɃn874645455645659==966788;964553343545565654656769;?==;::756348532467GRZr?@-8H/2+3/FDD`Dn˳ਡҺ޻ڊõB3235443542467+*>.$">GaRK*86Ɍ^ubSZD.>?fG.&ci2#$56Cb.T.YaZ*gے춝߮ե\lc[pKNTSQP{[zJ[RUdvԭ`ۑ߀hntuMFGCBDC?>=?DDEFEGCCC|VXکݰ̾Ƌܢ煂Ãχ ۦ˒秵۷ī͟؝đٍƓ˜ؾ޻荂Ɠ޶Ο͇ࡺҿ„ȸܬ„իͩƽ§瀆ᠵɫϽƓ뒭ͫ╤c}_QF/(60-2"+)-&-B(=RaDcx㈋൶YV4&^eNbk,YY҉؂',.,+--+,--,,,-,,--,,./-,,-.,-. -,--,,,..,-.-+,...--...-+ +,,--.---*,./.++-./-,-/--..,,-,--,,,-.-,..--,,-..--,-,-,F--,,-,,-,,-/-,---,-,-...,,-.-,--,-,+,-,,,---/.-,-..---..-,-.//.-1//-.0/...-./.-.///.-/././0///././0/-..//.///0001//022210/211001100100010012201112332221024113332 3233322354232323334544334 555656565355565676667867877667876667887898:9:989899ʣɀLj愙ĵؿʱᩧ׍܀깺ςgֺ̣䇑Ѳʆ쌹Ħԧ߀NE%&&(''&'((('(()(('u&6H八˹ıŶԃջp/-,,--.0-.,--./.000//.//.0///011//000//-/01100212114:>>Xq򄉅öɶ¾ĝͳǵɵ󈛫ҽϗ啓ȹ󄉈Űᶐ޶ϱӻɗ̓Ϧꏄ͟暶ѿռނ˿ɶ¬¬Ϸҍ鵚͘ҫѡ㇟ŕ۝ƁޑϷԐ扃ԟ܏ˎà׿󡀰߬ۉɉϱúػ©ڲߢܑȵ狇;пƻ¼񒬻̗׮؆͂绣ސَۦƛہ٧Ἶ󺎘ʢܚ˴Ģ怗@HE=665ad?EK>;6.00F=?>06F888:XZSSPXgdi]eCg]>:WM[djde7AA:D5;_2m?=G>\Y8?LLCDFFCU/-//C53VUYZZ\\^213bKR4$H^Xc2WK\2Z\014><<c*<$IMJH->@?>;RMUSW1;SUZV/TL;H;9XJ:poacTY]^RTMJQMPNQRYZ\{ygiT]bpnmO\xyz{{|>{}|{|{||}{}}}|}~}~}}~}~~~|~}}}~~}}}~~|~}~~~~<:R{||{|{|{lHTEZ`1YIrYsNs8^tƧ|folV`n~zm2nHveNnmSa"Vΰ^$0eXomeVRDbZ\]^ǎۗzgfklkeexhdxiv_WcNXvztuэʍxo[di"\]_]\^]YWVY]^__``[^ex8\euQ{Hm .9IDZZ`kZ\V6gO_H'c_%/U!*?>WAQ8::>=9P@ITFB#,G@67>H1"/1+F2B"/739!BB[a;2sC9.:9F=O7=QcX_TɠT0(!%#!.*&/**&$".',(>BBFm2!( 5FZDTwƿbLhLniegKa`gRW{Rgt@}~}ÿrrkWowl9;|qvL|le>YdWfgfggfhghg ihgghhgihggghghgghgggfghghfffgggfegefgfgggffefeeffeffefgfeefefedededddcdcecdccddcccbcbaba`aba +``ba`aa`b`abaa`a`babbbab`aa`a`ababba`bbbabbacbaacccbbccddcddbcdedeedddedddefedef eeegffggfhhg igghghhiihiiikjiijjiihkilljjk +jkmljkmlmmlmnononmlnonmnnno nnnonnoqooopooqqr#qrrssrrtttutrsttssuusutsuvwvwvvwwwuvwxwuvwwxwwyyyxz{zzy{zz|y{{z{||{{}||{||~hhjzqTONfOb3.[NXaN@)[^38K<::>{|CABAEFMSRHIL@wptIUptfSSSTSSTUnVUUTUWmphyzxp_nt}fomino{zyvxtw}~\deRM[[\\^^]]^_`^`^^^__`__`a`b`a`aaa`aabaa`a`abaabbcmlfwuaczIHMNLHMMQQNRVY\WURXZZdjlm^TYWTE@wtxpkputnrxqiosbp|hio}qzsyxvlwWtwopeV_\_X^dhluc`^q[[XWTHHMOTLXSiROMNLKGVTOXtfJ|DAy@EEFDA@?=<@P\GKLJLTW-3:@EIHFEFCDJRMLE??A<9878:<<<=@CGHL`NONEO\8799:=BBHLCD@;:;63<:876521332a```ffhiga320.^_^Y[[WRMMMHG%&&(TZaaccb_XROLGFCK)'&(-LDT+PEM)$%%)(%+()/,*,.0./600TPUUTR-'$('-021120,./3,OJII&(J'00Xe\RY49ZJ`dXL=UYb`YfOHAG<:?RIKCJRWPY`RJBMlUuSBKKYxj]]a`fD;F`YXQ?L[<"*84/C>i|aQac?CC?FLG?J9<:IECA92+-%-744276:<=LGIHAAF::.&.1'+*'-AB0.+% 0/1hK?>vkG>af9RhRQIFVGRAVzhhlU~hz]oΔyHY[XPrbmµbvZfbOcqUiLvcPXJG|KMqPQqL@8MM%$/*BD3.:69==>=59:7965414SA8600-OI68AH5:9<<654778:8:981,0320/10044574/+/,/1542.,XX1-TUVNDHMYNPMIN^RV^0117.S1<AGHIEB>AJNPNE:7;=00@DIBC>U)#PJA>?757CEOYBOYQIUN /;QR*23-.O9E010/...Y,---,WUSPOPRQ*++///-.--3/..4./3*+,.**++0VNJM+RLQQPSJ@:HGHHCQNSPOP[-0X,QQXIJLNZW76^0)P69:8/( !),0.-01,++(()(('%$$%%&##%% !3-**-,+,-/..W0*))')***(%%$%$!7;6W:T6S7NM98,=ZW6?F>QEFFJOVKM:RSZ/X[}::1D083-@@;JWI?OWSV;=I943aC++%"*8C\SQUUQY]g9:6_cFEBNHAGNUUDaeKY``g`\[PCF,16:6-;,KUQ`X{>EJEOLGMRXCAcE@:Q1LLCZM]V?FKJJMNGILFA@C"(% 35 "#1310/3<9<9@*A7(&>:8:>:<#" 0; $!55!%% ""!$'&())*+,2&(&0*-(!))(2:%#6!3"$$!&#'')&'++-, ' /.-fl_d[`chYWPJPLNLMNTZ^j{dùjsʹ$.!.*/!,%#   '"-ٷ̸ʜzOM22BGCSgZ>-nw7? ׼ȋٌ磿瀹̡WbyʘⅫ̕³͛ыٱZqp9634`tq.!( !*jd|Ŏ݈̂XFDФC,:a͏ɑyxt]쒦È񈜐cg=kaYqvk2Y %0D   52 +!G# HX[)#! /[9''(8sfE9=54V75^9:>%='%1-E;>:$Q%06,1G +-,,#/4 "4  26% + . ($$*! +     +! + !  +,49a;r)   +  d &*$/D3DګfU˄‹֟~fDA2<0&)*/9պ{Ca[R&=O}ÿ¿ÿ¿ÿ N¾þՀۣ{ӄXLG\GT)&PDLJ91$RR.0D7667mr=;<<>@FHD8>=<$AG@: $&&&'%%-13dXaRDGH|^u˳wvl{{{rbns{ivuquu}xx?X^\܉ɔbbLIMNMKMIMNMQSTOIH}?BCBEFDFDDA@?}zu71]_d^\ckkcgokdjq\luachujoeiie]jLfjadYNWVXNPSZ[cRON]MLHHH>?ABG@IDXEGEEA>6BA@G`U?vklm31\0122/-,**'(6B47:7797"&&%%((*/611-*)+(&%%()*)(*-.137F?@>k6;C%$&$$%**.1-0j,)31/-,,*(**(RRVRWXYXXP'%!!GKMLMIEB<<<986?FDFGGEBA?<9847.)4(#+ "">ADEB<$!!$3.+*0 %FTC7A+0F;PWI<1AELHASC:2:/,2D8<6@INENXNE=JXC`C5:7DcTFDFFP0&,>;=?2=J+'�#!$"&'9+%)5)&/%2& '(0+#*  *2#&&1 )3E3- .,0 $,#((4&30%+'@WA1;:(-+""$!(02('}    =*'"D'#1..   +#&  '(%&(#!$)#&$!#+$','$#%#!!!"- !""#"! #%'%#" #"$!! !""!!  !$$$!!% ,#"!(($*% '%#"!'%%$"T%!!"$$"$#!&#"#*'#"(%""#,'+  + + + +    + " ! "&-!& $".,1"22&(*;6 $*(:3447>JA=-IMR*NRRRP1|1(5#.*"/54AMD4?DAD,-8&&'M5!$0JBBBECHKS.1,NR@B?ID?EJNN?biLUWU[UPNH<=%.230!$ E[Vg]{=DG@IHEINE+(>+&%3"69%*%10"#&&'*,'(*&" #~ ~~~~}|}|}||}|}΁~~Ӂ ~||}}}~~~}~}|}|{}~}||{||{{{|}}||{|zzz{{z{|{|}}~}~~~}}z{z}|{}|}}{{zzzyz{z{{z{z{{|~ ~}|{~~{| {{z}~|z{|}~~|{z{{|{{{z{|{{{z{{|||{{{||}|}||}}}|~}~|}}}~}{{{zzz{}|{zz{{|~}{{|||}}}~~}~}||} ~}||}~~~~} +~||}||{|||~ +~~}~~ ~}}|}|{{|}}||{zz{{{|{|z{zz{{{}}}||}||}~}{|}||{|}}}|||{|||zz{{z}}~~~~}}}{{|zz{||{||{{|~}}~~|~|{{~|{{{|{{|~}|}}||{{|}|}}}|||}}|{|{|}}~~}}}|}|}|}|}|{|}|}~}~}~}~}~} ~~}}~~~~~}}|}|}~}~}~~}~}~}~ }}}~~~}}}~~}|}|}}|}|}|{|||}|}|}|}|||}|||}|}|}}|}}}|}|{|}~~}|}|}}|{{{|}|}|}|}|}| {zzzyzyyyz +yyxyyyxyyxyzyz{z{zzyyzzyzz{z{{z{{z{|~ ~~~~~~}|}~~~~~}|||}|}|}~}~}|}|}|}~~~~ ӀΦРѽ􍚐⥊皩Ծ͖Ѓh裹ۙ酾ƥ룚ѱހߓ(232324323323432444245797665445454323234 +544465667;=Z<;84443445566521Dᕲɽٜ͇;75656857567875879<=976558475657656434555678656765556887686538/:-!AC'4hlC1MS8E.@3>060#.2>]a秄־̘ٝ;55667565547/A)=.#K35UsH%WNuga|M76QAO8YL6.#CK9<:8=#+]HdN[YUbs{Ö҅țԍuSKxJNUTPOUWFj}zicԷ^ת{褅nќqsPEE?<>9669;=<==??>ACjWpS~tũ̠䚀ݦ׎Ҝփݍҽ˒–ʣɋ̘͐˄˙ႀڢ֮ɩ㲰١Njܾ埦ࡸڮӂӔ\Mޗ󠒃ڮŽbim^<#( 4#--1,E6/'+&?E*=JڬяͮLJ̶`H?YBkSңƒ9,-/.-..--.--,-.-..--./.--..,,,-,.-+-.//..,,,--/.-/..-,,--../.,,,-..-./-..-...-./.-.///.,-.-../. +--.-./..//.,./.-.---./.-.,,,--./0/-.././../00/..0.--///00.&-/1/0./0//00121/..00/0121/00//100/00010/0100111/02211102332210221102221&2211101102112212232232113234542443334436543434443454545554554344565676665568776667879988788987889:9:;::<;;:;999:;<ŧ􁉎խୂ݊꫰֎򏎍뛀ʾbݳѼ쿬原ʻؙȱƶ`E&'s(((''(('(''((%6Gꏼʯʥ퇕H0--.-.---.//0100///0/000100110///122100113444854326;>Uozn{¾񊘙ˀ񅐏ijĵ쌖©гƺ¯ᆞĽ̒◓¸䁇腉źųûܼ°«̴̀ݠޕ픝䞷Ϙց逆ʾـƾǭȾƾۑֆƱɾҰŽՐѲ흒ɆǏ͋顟ꂍ艀׿􄏍߰噸䛪ާ󖛖􁈃аˮн۩ɷʷԆȣſΆ̔ҿš᮴λ…̋퀅䋌㶷Àͥï譚ꇊ椃ꎩ@BHF=:7i]bACR10W.,5AH9.==>9BC57O>Ohfghj;?7GYUU^2WJLK7Kb@?;OLe8mle]QT\XZVLPNKFIV[a[~}jplirbK{z{||~|}}}||}~~}|}~~~~~}~}}~~[~~~~~}r\(-+03R]ZNM5A>F@DCDFB@A>>BKDEFF>FP7>,55;AQULr}~}{~~~[yPYGsJfsirfKALgbWqvfCNFWlvJYE=DT>1I}}}~}~~~}~}{[NS_Oxbs]zɀ5el9hks|hhnp`m=cYsJg{jJqtLYMWvcMtb`OzZDIJH~MTZP`jqj\HfXkbpm~.H788zDfSW2-Z}geMW9OO[cSrbk?*4 '4.=rSBG@cMG2`<9!&!>M()7516@=;C3)G0M=!+2F27J*53KOGCK_3::@H1,$AQ87<> !:%#(0)#((#)*+-E:7Ye}fb/#&B-'&.7IZ^k^\OZ=O|RLwd{?to^bN~MgfIhZdkNWOkkSwkwܸvujUNs^PE?y~]^mQ}aY}pE:|ilg hhhghhihhhihihhgihiihhiiihhhiihgh ghhhighgghgghgffggffeggfefefffgge +feeefedddedec2bccdcccbbccbbcbbccbcccbbabaabbcbbbaabbbabbcaccbabcbcabbbcdccddcbdceddccddedddcdefeffe ffgffefghgeffg ihghihihihikjiijij%ijjkjjjkkkjklkjkklkjlllmlllmnmmlmloomnmnonopooopqpqqqrqqqprrrpqqpprsrssrrqrtusuutsutuuuvuvvuuvvvxwwwxxwwwxyxyyyzyzz{zzz{{{z{}|}|}||}|}}~e_r|hc\RKG]JGMUYe;4H7,\_:7DA:9;y|DBA?C;94_eJQv±[ooV`^|Y{igjvt}XEIJJ:523PfiTRZa^PL^100\RLRLXOZeO@JGJS)+&!%*BS`PBJ)+**((&)((*)),%5;<<=AA4KHGGEIS-39?CFHHDBCB@CLPJLIDBC?8:<=<>BEG@D`KKIJUX75559<>@GKFGE=95:;;96665334gcbc^[[ZYW[Z,+0972`^\WWSONKK'&&%&IOX[abb`[YROKHIKJ('%(DDTQLIHKJM'**&-,+0,+/0320528TPSQQ,*$$(*,.2013/7C610*JJIC*-.AWYf[[QWhYUOTb_YW^YhgwUOGKHR@K@BGNSE3H23H>aYQ^WNGBQvSbQIO>37>nkQ>FZI1)%+0/-6.S07434;682L52A;F=8ABCND^bW\DGJxQZHO_W,NaL=U6[Z_X19:812$$%<[?,S.:YE( /*2..98;JY7-Q14N]1=;=kzjXQcA?JKADL<<;879757=:)9BAFCD1@>6;GCF==7'$0/*/,3/9:;@DC:BDEC8>4$(*##))*/)))&'$ 264;F=?8:=::75333-N1.,/;=@:(*J;-A?>81548;75L,121/2311555732--...36450--.XSSSGLJRTTMMQV^YU[/0/420J88R0<>A>2.PP4R376:>AS+.+?m131321/--,-.NPQSOPRV-0.PJILFFDAFLRVVJ>DCAFD@EAGD@BDHBAD>=>>6EQJ?@IHPRKBRKD=32=88I?CA;<`9.NMNFA@?AB:::GJMMIJQNIPKLGF-56411U.0/,,,YW,.---WTQPOOSQ,++./--/0011.+-3.-00.//-.--+NO--+PXNJFH>MHEBF?OQILRLLIIFFRNOCKR/3):<.1$#" $'--.-,./.,,))(&&%$%$"$""!!#"!#$#"660023965530.6303544864523.*+& +R.S51+'83BKRUNRF65090/CTZ1^5_ULHFa=KF.65TQQR?IJ690/BGHIKMOLJ-R]42b\349=G4K:bININT;[@=63%*0.*O15?>>=>"" 4&<#$&5$"$($%"%!""( $%%('(()*-#/40/.5=5*5;)!) )&%*)"%%#/!!"+(?,aigaVag`a\OROLDGR[dbo{ùQ)+(  %)$ٮ庈㇁譕ͩ߷ʮC/.$7ARkZRCZt)1%$(ޢ­٠ƽ͡ہKgnٸ긚̖ѽϱɺ{Q=PZH:(&% 5*#yst흜؊彁~SSm]왦PKxcxʴtmju|vԅτZIFG><<73%& '%  +& H(@.+G=@:. "O+(&!;Ei[_Sbn% S5K>714FF + 5=#8E1#;   "'7 #'# &!5$4(! - +     !   + + +0_Y   + +9QV6+.#9Z:0gQU-Ɵ咱Ą҇iԜXX4>\=&!/'=bj͟{>L-=EQeO)*a-þ„?¿Ȅ̄̀ܠsudSIBRB?DJPZ3*8,'UU3/;:444nu>=;::424=7#6LF=6"""! #"%049?hMX.JGJRadȠv}xx{ung}|}npw}~G{RVY༦νa\HMNMJJKHKLLRSXVLHKCA>>DECEEGu75cab\Vhkn`dmmho{pbjgn[`pdbikgolaZTZYVQJLIWS\TRSRTKGOGIGH>?@>@A?BB>CEFJgVKF?Gzvrym111-/100/,*,,"3766134!"$%(&&(&&+15.//,+,*&%%&)++),/00,1F<:9n;B@&#%#%&'&,0.01.,(/24210.-+*-ZVWXWRSSROOI '(&NQMGF?9;873;ABDDECB?=<:8653*,6/*()+)+ ! %:=>:9$$#$ #*# +)'&/>HXLF=FUJHEJPNKGRM\XeEA8>7A28-.9BL>)8&)A7RH)&2-7.'1419+43-&!%21 8A5,=(C@B< !%1%2*%"!&'*5&&&BOD5-5')/*! (*.'&   +   +!$)#*.4.)A15913'%+2182% #*+(F<0/)'I;' ",24 @J2<*F:9&%(*12<3568# + ",~# !!'%%& #"''(##%(+)&*!'"" '#2!##$""$&$ ! "%%! !"!#%"!!%&#'#!$ ,'$$! $%&'$%'&$(#$ $('&%"!! +"%$G!!"("! "##!$"$!  %##!# +  + +   ! +$# #('$% (+/20.)&4 .,"#::==,10!! $.4668AD<8&MT.-ZV/-03062SSP-/3B+&3=H=C+*+*!'K;MH3+BHRY./+S>LC=DF78@LSAE$)/1..%3=GUXVjB>@ECBLIYK5$)- /$C61!"'4 %$%%,(()$$#& ~  ~~~}|}|}΁~Ł +~}|}~~~~~}~}|}|}}|||}|{}~~}{zzyzz{}}{z{ |}~~}}~}|z{~~{~~{z||{{|{z{{z{{{z{{zz{{{~~|{}}{}| ~}}~|z{|}~{z{{{ }{{}}{|}}}{{||}|}|}||}~~}~|}|}|~}{z{}~}|{z{~~|{{| +{}~~||} ~|}}}|}}~~~}~~~|}||{|}~}}~~~}}}~ ~~~~}|}~}}}|{|}|{||{{|}}||{|}}||}|||~~|{|}|{{||}}||{{||{{{|{}{}}~{{z{zzz{{||{{|{|||{{{|||}||}}|~~|{{{||{{|||}|}|}|}}|||{{|{|}}~~}||}}|}|}||}|{|}|}~}~}~}~} ~~}}~~~}}}|}|}~} +}}~~}~}~}~}~}~}~~}|}|}|}|{|||}|}|}|}|}|}|}|{|}~~~}|}{||{|}||}}|}}|}}||}|}|}||}}|{zzzyzyyxxyxy zzyyzyyxyyz{{zyz{zzz{{{z{|~~~~~~}~}~}~~~~~}~~~~~}||}}||}|}~~}}|||}~}|}|}~~}~ ⁓̞亨ގӪ쇣ܥע˺݅邁э݁iŅ芻Ÿ߈Dzȭ򈌆Կʓ482232443465664m545556;DKG@<8655464555455575667768668:<<>>EFA98967646898655>𚘷ր嬳®<8778,666896877897898849(47875578784/3576778768985655766787638;A8C.:/HCJT0N`RV^-F#Z'_: &1@OB]ϳčٜDzO87656655778>J:8>73dV.X}]i( ѬX7i4J|\D%(ACqa/8~:.31AZ@-=;;:::<=ﴓ؆ò݊ևբ蒏tʿ怆ļփع輰׵ؒeF()'&'&'(())(x'((=X]耘䈋\3--.///././..0/1110/0K120121200114842221235;DE;76458?dǚusׁпɄǀ聉遇տŪȼڽͱֳ躼Ƹ욌哏Ŷ􅗟₁兂˶ܸӨײۀ֢Սɩ韔糲иԋ񔮿ѼلѲϿêû݊վȼɅޜ倢骠ʰ։䐋͈Ã앂Ͽ䈃ޒ拌ۓ׉Ҋ򄊓񃉌өʌԽ킈Ҹ̻ǻþȧƹϼً͈爃ݶȳݠ̶ƺĿڸŹҘĪ矧ںdž狙ȬӇ֞ǂ2ގ鍦CABJGB5h^\4;@EP;_dbIH=I@?9?=:=?=7CJKNGC=<68AEGF%w_rv Hsjhx_wXhu]^zaV9X^ckv^gmcOtPAuiuurVdNKIH,AAv{}~~~z_otl{D9|he_dQPYftsH<{Q X_P\@Yjqovx<9f$6Tle9^LojfgW~AQ|oܖ|ghk_uw{rujozptoJUAQ@MwYh}gebjllpt|}BXXXTQRQOOQOPRSSVWWYZm7tmcM9:8$GL?RY:lHuna(nS`AId.3![MTVyP?3^?BQMZGhd4c?Gsjڳo0`bU`@\bHm>0Ri]x^yPiXdO_x|Sj̼V!(D0#"KLHY<=m=?2M=VIR:H6bAMK;_N9B 4+)U06EB3,LE5:8"=741/ ,'$#96HB?%@#EFR07+0<,E;362<6"9.+,'*!(++&+,3DE&>88>gtJJkbi_UTTTUUUVTUUVVWlVVW}{ua~_xkwvivx{ck|z}{{vuunv~zwz}rvnflzz|^[`]_\]^__^]_``_`a`abbaacbbcbcccdcegddeecddcizzmiheeegݵzq{uDFIMKGHHMQOPRS^_\RNQOOWaihaVWUVVTQKFBqlhdpxs`kt|z{xyuhizssxnaqp`Xp\TU]QUaY]PXX\ZXcZTFMIHJLKJJHJOOPS`c`RNY]c{~|x;?:G<`LJEDLU06;AEGJHDCDDEBHNTJNJB>?<7879<==<>@DD?AmNPLEPY[64569:;>GKFFE94<@;<:86787ihhf__\XY[XSSX+26703_]ZYUVW(('&'"!"CLRUY_\a_\WQMNP+'''&'%=WXPKGDEGL,,&-300.+.1342444VSQQ-'C?L*(-//0340/2632/'(M>G$),K_^Gc\RLZaYXZ`Nb`lec`LKGPVEEXO@IGCPK>*:L?jLc_hI<9VuOVBK?G$QWDtXm|vh9 +$;%,G)^3396_/,*-@ECAA.IUhVWYjViML]eX-'RVB#13S32ES9D"';%6XS8C62?65*4$1:03G:Rb6;;Q45;Z4g@AutsVZc;;B>CB4:a7434415238>:9?HF?08ID;;;:6#*(0,11379?AB88@EB<9:6;/0-*'&%0)$%%%##" 1@1C9D]YCCq;n`UPYKSM?`Iymkb^\ZnyQGMiY[bsj@P]MqhgG><>=9;66213XY.0E*&!LD/:/*@>@@879:<;8;;45.K./3-043+2876253./2/0455241.,X.SNIPNOKWPS^WS]RX.0007"4.>FF5;GPT9848EA/,U+6:,28<3;,>"X32/0T-/0-P,,SNSRS-/-QMMLJFCBGOQXRK?EHBCBEKDC@BCDBAFC>ADB;ANFFDOEGRG:B?<:+2/<2FDHOIC>=DF@@EEGHIDHRPNROGAFH085112220YUXF%2J/u.--VUWSSU+,---1//12203335230.1.//110+*),Q+SQROQPGLTM:EHE=5;86'-N.A')@<>;874<><=<:NG87Z43?G;QO\dAa3]ZM?LSBIagE)0;2NQSUU,4>F@EGIIKMNNGII-`c3cci978=A;Qp[[_Y6:;>LVOTH26K=e6^HEQ_PC8?^TRRPQRZfq961T?>HFD@EMSA8nHUbfeb[\NRY'X13.'32RMSNMNknbAC>DOU\CiiEfI?64+Z40-Ga= (04&!##$-!37%&'(%!#'&!(&%(''&+11*27-.&%*)0280+0-!&)+' &$!&$*%$&(8)ecf[TNOQfb]XNSUHM\a^tfh~}":.'! !  폮ⓢ؊ێΞnY?@##ES`VIN[_\+4"!XߺсէŊˇTdƌǎXۇ凁¾ңܳ{CeP\k-)*6*0)8 GXkwkׅȵ霳uV_i{e91G{Sߧ쑯Ħc]mr{䩛{`Q;9=7.+#+'+]'. + 4-%% #Y/#,@M +,;& ; &5'' &VmeJ2537=CE'3#-7'1 5;% 54!$Od + -(8 # )"!*#    +   +     + + +   + + -` MHUv:0Yl>#[{A7==QX㾞꺓zxa^!EW$GGIٺDCC9%-H/'GÿƄ+¿¿ÿL.XɄSۄڄ܀ڝsjMH9E=@HDEH*>-1'UQ137310e7s;<:772269?B?EIFCF$ #<2;<82528}ж|xljc{ՅHjſδUN0/CTSF8/,(!!-&2/,+>J90<>;-IID;4 !!SC=165X[i2>YPPs[thfvku|nzy{jp~{yvxx|v{sinz{|WOQT泥Ķƪw³JGIMKJIGILHLQQZVPGDB|>>BDEABCC:9BED(%&'-1/.-'%-235542421_^^^VWTPRSQJFD %(#&KMHGEA;/;:999)<A0N7IUQJ$$+4"$*(G"3>368<+,*1.->E')"&,!&J33)"8.7. %!5( #+*-( &6 B,,LLE-.3H!"  "       ()!)3/+)D$=/,',#*%""!$@54 #") @6/!+F:4""/7$(?I:(*&+$%*'$") %##"v)+! !'%# $$%"*%).('+%) $#"# &#"" ##%#"""!""&#!!!%%!$$ "$$!$!"#"!"$%#%*)&'%!!'$& P&%%%&'""#%"$$!%"%  +  + +    + +   &(#%!"##''&%"  + .%   %#) *!,(-0 /-.'!*1$*9>-!(#6:?@=#'*(42688;>B867'WY/\^d2/0252OjTVUP/201:B;A6'(7+)H=HNXD,$,KCA>-%$#),9 $*(+()()*%$~~~~}|}}}|}|}|}́}}}~~%~~}|~~}||}}~~}}~|{}|{{{|||{} +~}{z y}|z{z{|{{{zz{.||{{{z|~{z|z{{z|~|~|}||~}~}|{|{z{{zzyyzz|{{{|{ +}}~}|}}|||~ |{}~}~~z{|~ +}{{~z{|~}~{{z{|||}||}}~~~}||}}||}{}z{#||~~}|{{zzz{{{|}}|{z{z{zzz}~}|}~}|}~~~~~~}~~}}|${|{~}}}~~~}}|||}}~~}~~~}||}}~}|{{{||}|}|}|||}|{|}||}|{|}||{{{||{|||}}|}{{z{~}{{zz{|{z|||{|{|~}|}{||{|{|||{|}|}|}|{|{|{|}}}~}|}|{|}|}~}~}~}~} ~}}~}~~~}}}|}|}|}~}}~}~}~}~}~}~}~}|||}|}|}|}|}|}|}|}|}|}}|||}|||}}}|{|||}|{||{{{|{|}~~~}|}}}||{z{|}|{|}|}||{| }}}|}}}|}|}}|}|}||}}|}| {{zzzyyxyzyxxyxyzyxxyzz{{zyz{z{{z{{z{ +||{||~~}~ ~~~~}~}~}~~~~~}~~~~}||}|||}|}~}}|}~}|}|}|}~~~~~~ 􎓚ȵФ񌑀։ς򺩰Șޓܜ݀Ԋ㚮Ǭƞι;@345453589776454455668:DRW[UI=776655766567778867899889:999=DJG@;<<:9879:9887E岪䃶÷=984,888756788868777898:9=&567;:76887-G7-6;7676898:9678667E667794=-9>E8Z+IYL4@R5U@W&>CI;=):CC6@MI9,>??@M}_ʾ߄磸ч`AGNdBZeV7?NOn]@L?pÎpmvϣN{kXkZǃ䔜ļr>:99754533579::;:987sBvVzas䉐実ƞҟӯ靕ସŪ݂ŤЛהω϶ʄռک讂Ԕѵ̱̇Ӷ杻ŠѲϓ˻£䀏¹ƽꨁȯoo?J⯒ňj2O:,,H2444%+,7'&;6Hm_cWͺ̏ܒD-Eb񒚒L.,.///000..///../../0/.///./.01000.///..//..//.-/0/001000/00...///000/"010010//../0.//0//..0/...///../0/0/.0/./)000../00/0//./..000/001011//.011100/./0//0//1110//0/011/01110002011002121231013312221222331222110121101122112332224432232332224323112234543343554549345445454544455655654555764556454457887876565676566677897899778988899989::89;;989::;:;:;;;:;:;<;;<;9:;=?==<;<:GGAO=@IC159ULLT3V6TigYF\a^YPLJPO}^VQOWPGQ_W}muufu{{^}~~~~~a6+0%LPEHFRP+3743249/6=@>=<>BBEI=F=@<;>=?B?yxj^v_zwl{o~zD`{hr~kbZqczS{eXxqç9EoVgb4EO'cDA=1PQO~~wW[akk[vW\p[^ؚov[fba4rXYcZKquaa&M{]nhk]q=W;Gr~rqSLqg}]aal;UFqwp~poeJwt\`}_llZu|͗QfS;Shc^kzsr{knV\fhoMIWTUTVVSQQQPQSSUUTUUVU_rqgek_f[~2Hk;@4Af=6SZrkvJ;ixhGS9UG>g3UGFcYRUfms>EC?Z?=b8=]P<5rvyEORm}d}vlpQ]H\xF7sjijij6ijkkjkklklkjjjkjjjikklkkjjkjikjjjkkjjijjkkjijjiihkjkkkijjiihijjjiihihihghgiiihhghgfhf eggfefeffe +deefdedddcdeeecdedededeeededefgfffgfffggfgfhhghhighhhihiijjiiijihjjijkjlmmklmmmlmmmklmmnmlnnmnoponpoppooopqop)qpqooqrqqrrqqqrsqrrtrrrssrrstsrttsttsssuututuvuvuvuw +vwxxwxyxyyxyzzz{yz{{z|y{{{z{{{z}{{}}|||~}~~}~~~ʹoeLK\JGHGGI^6OWbVKH'('(%&'()'%((*'7>> !#')*/.)L?09=?CEN/Gcj^gdZUSTUUUVVWVWrXXWWY_rzu{b{^lyn{zyodh}|~|}xszxws||~rqxzw{mvzedcZ_]^]__^__`_`ab`bbccbcceegfeeffkkhggfmqlkjhggivxzHIJMFLOMPPLV][YWNNT]fdc[TTTSRUL|poksyo_nrwby{nkonmhpihjvZX]YYUSgIOWeVUQV[[m^LHIGMUUQPQRWd]VPUbKQV`hxtw{vzBA9:EFDA?:;;;nlgokdeeb^^^UWYVUU0-.TTW^]\YWVS-0/,*&%%#DHMSQU+-YYXXVTZ13-*''&9;MK[F@?DK.0-+600.+./110203WQT*)E>F*Q+023155+//2864-/*C&!$+K>TSITSXQ\c^[VPRYVcSLI;=NWUFDUKH@/IaA?FFGRM`EHE;@KK-:0*N:/IA<1;6J80H35>8@C6=C:;Z=@8@CH-$&5-H'+E=:>9>9=>:8;84010-Y1-I08!CUQV+)?>=:;;:;;:<@820P-.14.353/25685531/401333.154.-1QMHPLLFRVQSLQWTY..//36.QWR=IEGDDJACDCEBEBAFCCF>9EOMMMC=?D@:8;F8487BID?;55K+.ELHIIF@9>HCCJNOEDPOMNQZ[WULKMV/.O>=BOSM0ZYLC.YXWWV,XUT+-.,-./0113130452562..-/2/+,-+*,SVPPSPMEOHC;I:*-.+*-4,@I+E25E!2*$;04222320../,+(('()))&('&%%%$#$#" !"#')))('()%"BE@=>>=B&MC@ADC###%#! EZ9JHA-3%.)),-+4F)&,2.CE(>/2-0?NA/MGDFENQOQSUW)OTEGIIIMJMDDO3]bdcX\6868?C_kn66d6HIGNLRQW*1I>_\9;HXbhT(5EWSSRTSV]ho73Z95=_Bx"+-Y]^JeߍԢɢ쉧E,Dt_שcVWhvwWf̢K:?@b*/G*%)G' +)%6d .)7@+28%$%6B+9Ap`y@<>:1+!/,?:-*E% /*2#'+$6*VA*$!0/ !",  $ "!9$3     +   + +  + +   + + + + +   dgWP@Il펏3vʵl3/LG/);r}鑄̘ƫR++$'53-@-&q^77")%< nÀĿ¿Vń"τЀޡpղLFO@?@ABAN(8-1/*('+42-0476;;p65316:<=8EAAB=!5:B/53.45K|Ůڶwsdgevw׃nѸWgQQ\ZVNA6,(#&-*.**'?F6,@?;#=LID;!(*04256<8L^lEVkeo{p~}|qh¹ly~w~{|}vu}||mvx~b\WOڨΊ{óJHIQFJKHJLKRVOLL@{y;>AE?ACA?>>AGAtlf]]W`hudWgkpnredhbb]fzbcepUTWQQOJ_DIOXJHEHKGQF;:>;?EEBBA@CLGE?AK:@CIUygdgh``20*)3210.,47GK?;65!%&(**)')+,,.22,1.++,+'%%')()'(*--'-M=99:?GF)(('(()(,1,)'&*.1255ecchd^]\YUVTMPQOKE#!@@BIIGDCA=.7=>=;;;9;<ALJ\I@8-+7=>2/@42/!=P008;; .=<*1./H#%4&@QA4 +"#"3$!;2c-"' /#'!#( )E '$-/-!%'/)0/OF?72)?8-$" !  "  + +  + + $(#"22!($!6+$#-$%"$&U@14#'($'*2B5.45<=%$-& Q@M,L)L-&! ;/5*-' $ +#  $$&!$"#"#')&(#')&)"'$% #"'$#"!! !"'&!"!   %##$!# ! %(###" $ #%'$!)(&&(++*'#!#&$ ##!(("''&&%'&'.#%#"$###" + +  +  + +   +  + ''#"%$ $3.))(& + '   "-(54./.58:<>?@33,/698:9@54=+V\`]RW120047Paa11Z/<:567>?G"&g;.LI1=GW]Y>&6FC@>?AELW\,'J55:_Bx;?M@4>LGWWPJJOKSN'U.03C4-,?KcX\kmkiwM@WRL=(H#.*//3;#$&'))(,+)$~~~~~ +}|}}|}|}́~}}~~~3~}}~~}{{}~~~~~{~~~{{|}}{|{{zz{|||}~~}|z{zy}}z{z{"zz{{~~}{{{z}~~}{z{{~|} ~~|}|}{z{z{3}~~~~~~}{|{{|}}~||}}|||}~}|}}~|{zz{z{{| |{{~{ +z{{}}}|{z{|}}}~}~}{{|{}}~}|{z{{{||{{|~~~}|z{||{z {}~}}~}~||} |||}}~~~~ +}~~~~}||{|~}~}|}~}|{{{|||}}|}|}|}|}||}}}|#}||{}{{|{~}}|||{{|||}}|{{| }|}|{|{||{{{|||{|{~}{|{|}||{|||}}|}|{|}~~}|}|{|}~}~}~}~}~~} ~~}}~~~~~}}}|}|}|}|}~}~~}~}~}~}~}~}}~}~}|}|}|}|}|}|}|}|}|}|} +|||}}|||}|}|}| {||}|||}}|{|||{|{|}}~~~}|{|}|{|}|}|}||}}}|}|}|{zyzyxyyyxyyxyzyyxzz{zz{zyyz {{{z{{{z{zz{|~~~~}~~~~~}~}~}~~~~}~}|}|||}}|}|}~}|}|}|}}}||}}|}}}~~~~~~ ̸ڥ䯿ƤÎ瀭ʫؔðɉճʾ󀠮ʍױݹڍƳʶ>7776657>?;8556665669;?INRVWPE=8877889977987998:<@DF@>:;@CFC><;i98::888qľ雱냐ϞĶD83&;::98799:5397999:989:: 27967087741B<3UA0479:899868789666798P20,H97,BYe\)98ieW76MQ]o6A45(,\أ̆ں•方o?7887789769::9;G:984"\Im֫ێWA B55-=V7/K5FMheaNMO974B>OT&S2NC3&A70+$%'G.9OFaQFbWWs񞸈׾칥M".//012100/0$./0/010/.,00///00/1/000-0100./0///0/0$/001010001210///0010//0///121210101/0"//10110.//010/0/./1//01/.00110//010./110=211//00211200//122120/11011102210112001222110101211131133211121M312324321321332323122323322345212113213423313322354433455543323345344544322345444545444556766355457657456565876868876656 8877876788998787898999::;99:989:::9<<:;;;<:;::<=;<;=>>>=75gd5k=G7<9G@>U;C@5KEN@>?G4QBMB>BQXS\\ZXTTTYZLTMIRY-8;>:7;;F=R@A><687426fraZ2ZE37629<=;;;9;NBCCQ?KEROQ5^>ddVRW,NWZNKZQOJRUPUwvTYcTYXidjqrx}U(50I8A9DS.2/(),3422554:966:9BK?7@?ABDDB3(.Kqt^{tOpzxphhkMv{sae\pbU`ÎFai_cts~W]RWϙg?hmrZuo4fiYo:4`mIQYu!xzo;l\XCw|kfkh?Rqebqۢ~urwtYaZgrO{-1)$.1C*:9CG;7;=:!3"##*()":%*/-05J0%-1:GB+.= 3CDC\uumnY\hnyysI_`cqui~jorToYbZLVT[wge}sosiy_xs\TIK_fpo?I:nIoh^gEM}iuL`OOg5>[nkllkklmjkkkjklkllkllkmmmlkljlmlml'klkkljkjkjlkkjkllkkjlkkikjjljkijlljiikji jjihhghiiggghgigghhghhgfgfggfgegf'edffggeefgfgeefeefeeefegfefeeefffeefgeefefgf>gghfhffgghgghihghghihhjiighhhjihhjjjikjlkljjklkjjkkklllmllklmmlmmnllmmonmmknmnmnopnonoop&oqqrorppooqqqpqqrqrrqpqrqtpssrqsrqtrststssuvutu +tuttvwvuuuvxxvwwwxwxxzyxyxzyxyxxyy{y|{}| }|~~~|~~}~}~~~pœpcO@KFFA=GHU\SA@OK>636F?78:CDA=;:;;=BGOMXIHV/1/++W]dR8@)56BwbiYacnlo]fkqrxWyw}mW{uz{sk_X__^Z\^.0303aOXWFeXLAOPR*+$ #H9`\TJK*'')('&'('''&)":>< "'+++,++0N9>?A_A>KQV?k[TTUTVWXtWXXWW[noiscxpwzrk[]m}rzows~sss||wr~wqkwy}xpuot{omf[a^___`a_aa`bacbbbddcdefggfggjikjghihhhgghjiihix{ܴ֯|xDGHGIJINQU\^WSKRNLJS[``_\PRNNqyrtyk[pritvkkpzfn~ebXWZZUVP^SNTTa_WWZVQQULKQTNTcb]`jjRM`\KYniHpqp;CEHJMKKNECCF@EOOJQIB?>=958578:8;>@A>B=VMIJTZ[45566789@H>;?<9==9<:rnklhbcc`]\\XWVTPU.SOTQUWX0[UYW.;?3-(('&'GILNN((*,.[Y\475.-))(B9?GQL@;>F.--38331/211001/0RT,()EE)+,1704261057/46'LOU+*# LA+FEFMeU_]]MORFHT?@7L2/6@F@915.784FLE72;OJ>a_K?DhT{JYJ<@99U\}_r_LJ7''E6<&!COR5924C3C>DJQ=>vesWTT`GKSrg{g-$ '$+T;KDHFT2ADH234,4AK?FNJE>PWG:*"/Ge[llrsISd56>C@>tvqJWW[kcb5Ub]aUVVK*(&-3-,-67;?561/$4@828I.!('1"*36+15=;4>A@>98314,36)'47.*)#$$%''"$408;42-867\^TNYVN@a]QfqysPdsqdvnPfbOuwoaJ]p^mnr_nomvhFjsPP5;)>3J4/70FJG,D>9*>::9>>9@980241./0D'7"!4RS-/N.A?:8;:9:;9>?31,K0,051/34/0173354/.10/0.1-/55-U,MMKRRNMJTTSPRSZY[//-14-T,+MD7>DM173590215T(F7:GJ0K155B4./-,)MNT-14-..OMNJVY0-ULLGHD@MONVYSKJEEDGGEF6A@8AEE=AFEDJ8IKNSPG<>@=>=BGB4;=6EKCC@Zk4?$5CIIN9R+0/./.XVVNRVQ,*+-PMP[-/0330031/031././10../01+QQOVZUPTIJKB=.1?3;BJ.9EKGJ@B9''(),/10100//0/-+---**)()((%&%##"##  #"!&*)'&'$%"#%!9#&$>?CF"%$$%"!!AV<*/13010/0031.-+')(%!#$%$###$&'(NIOLJDMSWTW*'))(MHILKQZML@0bfk55987:+495;J9/0?>$. <:-%94%!&#"#$!%2 $$'"' "!'" "'*&,*++-/&)%#&*!31.1"!!%# ''%,43,). DUZQO`VTRZ`Z_^`kX^^uxn5 0%@ӱ՜ć̓{FvHoGD7TF1( $/֪ȝ¼~y΃ϰxwwՁзÈھJ/:HJpdWF4-YHP5L30Hk寵੔렬篕ч㕦V->91"+%/,>ϡ«szbdgvnsf}WǤʿijTo^_b\RD><1*&),0),,%E@7-BC:,#EKJD9 411..M)*4692T݊̋|tυ{j{twxsk_as}u{xwzxtq|ztnz|qsrs}+hc[T֭㺯HFGGHHEHLRURJGBB;97=?@=?BA~~DAAxtt`e_djvbUkn_ei_cir]csq\^UUTSOOJTJHLIPQJFFB:=D?FSQKLVVF>KF:HXU=^iqpulVV+,514//-09.JK?<7"$)*+,-0))+.*-20-40-**+(%%%&'(%'*--*.,D;::@GE((')(()(,/&%('&-/.44fggjfa^\YUSTPPQMEB">?B=BEG$C=<;%&3:==;9:;!$"(%*06.'&&( ""#:8 "!(!%&'"%( $'1:;.).08CQ@KUYB<9/1B06+@& "&*(&" %!5:6)%1A:-GG737U;[f2A8**#(9;UZ:G6%$ (")  &26&,(*5%/05;@1 * Q51'#% $#HT0:#$ 2$!&$4!208!" #(#(.)%",82"*<-6,(*$&4 *.//ZWN+/+*72. "! +   #  +    !"# 31'!)( # '+&6@?""$#%1)29@>[)?=3'1=B86797>G=93+\cd2253/3176D/2ZM/<@<24==J(.;CF6:JYX]_l1*$FHA=A@CDJPNJH,ZV]pw>_BPIJLKXUSQRQMPK&SX/02:%,-A:eZ_c^YmmqJJHS@>&)#1&?'19# $&')--.*~ +~}|}}|}|}}|}}}|}́~}~~~}~%~|{}}}~}~}}}|{|~~~~{{|}| {{z{|~~~{zzyz|zzz{{{z{ ~}{!~}{{z}||~~~||}||{z{z{|{~~{}~~}}~}}~||}}|||~~~~~}~}{z{||~~{{~}~{ zz{{||}|{|}|}|}}|}||}{{}{{{|{|{z{{||z|~~{{{zzz{{{|{zyyzz{|{{~}}|}}}~}~~~~}~}}}|{ +|||}~~~|}| +}|}}~~}|||}|}|}|}|}}}|||}|}|}|}|}|{{z}zz{}~~|}|{{z|{}~|{{~}}~}|{|{|||{|{{{zz{{}|||{{{|}|}||}|}~}|}|{|}~}~}~}~}~}~~~~}}|}}|}|}|}~}}~}~}~}~ }}}~}}~~~}|}|}|}|}|}|}|}|}|}|}|}|}||}}}||}|}|{{{||{|{|}~}|{|{{||}|}||}|}|}|{{{zzzyyyzzzyyzzyxwxyxyzyxyz{zyyyz{z{|~~}}~}~}~}~~}~}|}|}}||}|}|}|} ||}}}||}}|}|}~ ~~~ 댴þ˥熉ኋ咯ٺӄľщݲɻ􏯮i׼Ӌ훔рпռꁏo2<876869?BB<98988;?EJLGEFEA<998788;:79:9::99>GT_eaYNHC=<;>A@>;;;:;;:999:9cۍ芇ó­j4.=;::<=:8:9*06788:<:889<088;/%879F8wm9O>+B4675:99;988778:97668883,*53URtbP1=/I;T[H3?95Jؘszgǚᅔs.PPpnG0|gTMKe;NFWrOAe`NY긁wǃ}tle}]>L<تxW?>>=<;7889;<=?CD>72245p__zWmマ۫Ҿɻ⟿ҵը̸ب屲ߋր݇ǮىҎĴĄޒվօʊǤ̓żԀׄҶԞɩ֚r[D[i}دUC++.S6D85+)-E1Z(P`hMV]o䃅ݛӂҮV=-12113221100102210//120//0101221001P0111011101112011100/01110100021211100/.01120100120110001011100010100/.01/.110/001x011102120/101/02221121221121113334320221123122122232125323221112234332442123454223233234344334334433233234454445443222343o4533443454556555653434655455653324477754655865556645677667678867675665656878866787799766777889978879:9:<;999899:;;;:;<989::;;;:;9::;<;;:;<;<==<<;:<=;<=?>?=<<=<>rޮųʹʫdz˻􎂜ټӊǼݾǺºŹbĴꄉοͱ­/&*)*)***+*m)))*)+6-lX7-/-./0/0122432133234445346776555644556565668B[e=B[ͻ˹ļȹü¼򄓑ֳ󋨒ʽ·邔腏߷遄ɤ򂉉Ϲ۽動Ǵťͻϥμ⇰ӌ땹ظǹ쀎Αɩ͌ĄĶ÷ʻ̤Û킂狰ĵ˫·̀DZȿ·ໝ̷巖ޱׂ⑺گ՚ǟݑِ팝ʨܓ샍ާɾǓ䲻Ȁʬ脂ȻǷˮɭ͸ܚټʴ˹黼ēǾя˜gǪ§ЁňҜnHEAAAAke87\\sibcfh<<`\e7C:\;ESK;G8>K_U534KWLGQFEI3TCQKBITVPVYHAFO[JSTINOTZW29>;6.B-<>BB:67855bWZHQ14::?@@=9B<80JKJ]G_ULOV<;0Y`P78P9.SUEJY_XUZYPSUZVQTR~vr_omlM]4J3YL3LTOLLNHOyx|dCfWhMvWdepaxytiMXKu[m͘hN]VzF@qkCicScy}VlE]RForPWFclhJVRWgl|pd\XpMv}Pcwx`kfFSvʎjcqhìH.2\{ikhgjg[VUXYXXZ`c_XRPPRzithXOTSK.&y]?ABJTLt[C[aYVXN^upoN@F67CWeMM30>KNhe)QAWιa_dL/S6\GFZdTDp,*0*,;zW@?r,5nXvejWidTfdokqtnw}o|xs|vfvzxqdYLN[^Z/..//02_Q\UGcWJ>OPQ*)"@MJ7W[RHQ+''***(')()('):;: "$'))(&%'*=:==?ObDMNQPXhvXUUVVWVWWXYZXYXjZfsnkrro}errqe][c{sսykjdt}s{vrkr|}wn{uxqnsycldW[`__^``a`bcdeeddffghgghiiijihiiijhijijirpӵ}}~}{}HLPLZ]]UNKPONLQZ]^]]WQOK|~yyeq|~nsj|}jkeZfti^TSVXQONPQVKKWgUVbYLVUSMNLOVZ[UOOQOLNX^_YRNv{}|uy|ts=DH?FCBABA3^^WX,-5:?DEHHLLJLIEEGBCGLFNA<;<:66879:;:<=?B>B=XJJIPVZ`4356788?HP@:8===u=wrjjlifa_]][Z[VVSUW,POOOZVW2X),/[/5131,&'&GGIK'(()+*T-05861/+((&>=GRUH::F*-.54232.0/0/.0),)*+))$*--+/,./21/331+1/,'V].*HH+Z2JJJ]]OTVRSOXHBC:JHMJ93430',*56587029BHRB3@RC58P^xnRFL<8Tal{zejZW:*98rR2/H77>//>0Q;PABC]ige\[;x^kd_ejMO6/AFb,:=0R2MK1,,@GCBCMHTBIP=4U?21:5jECqct|@A&@>649>==>??=65/462,1\L%D0@NO.2OC9?96:;:'8?;51*Q03050.442035156-P/0/.+.10/25.T.NSQLT[PVSORXYY.ZY0.+*+*,-N@9J@6536.1341I2<>JND9D6?M--,+,SS,+-24-.-QNJLRUY-RPPFJEFQJO--NKRCAIIF@;8A;>FHF@BGGIIDNLTHI;?D<>=DJ<<7B>:UJWi;@C>?GJNPPm(&"" $&$ <8557 $&!0121%:69:(&$<968IBA@@<$":69& 4&& &'52&,%#' !!$*'!%*,(*-%#$(0',-#&&%(%0+.$'"#!* .*!$&*1'' HODLW_\Y__UY]a]X\^~s #% %4'/'䡽ҀߘߑϭؑݣˈƖ驱ہ\L:%FD?,"(,'! #!8ܖ̓єÇ{tp׹뱰ςؐΤ׼ﻀ`:'>RҬB3'AF;G !%9Htx̏ȥ󂤌婁סwT@BC?9::F@6-).( !64341*1EA?O:>?@EB<1(@@8$1/$DNJ@; ()*)'>9-0278=Vxxuvxshropebbh|rtgxqxunq|rzvwrltyZaYRݝҧ༬~DGIKXVQIBCC=968>><GJIC?>AB@>AGLJCAenljcf.e]Z.26/4/..02'IIA@ $'**+--/,*-.++,0*3*((*)')*+()+*,+/.D877??=GCE&A ;/6<=5 "" &'167-&%)"!  %#"%#!!;B!++7"19;JK:GPNG;:.-3+<9:5) $" )7;C1%/?5*/>HWp`P@58*%?ELWQ>>0+ #.)5-(&-"$/$<.?3124% :6.3,1*$! B]#'6)$(> !'5?%+/*)#)(1#$)* 6( "/.2%D21UJVY .$70,)' + !  + + +    +-+00!& I;:%"F,.$''K:7><6.4"K)@5M?0#/ %:2$% '!!+ "-& """%#%"&%%%&"&*$)'%'))()'#!!#"$$! "%'(#"# %""! %   ""&#' !"!2-" '&"%#%%'%$%&&'()*,&*,*(()(((,0+(%%$%# J&#$&#$$''*'"! %"!.  + + +  + + + +   +  +  # + + + + + 037;;97567==>9:+0457bY[Z3036)S`QS.8A>=5:777889;<<:777:99<;;=<<::;=<<:9:62+988:;::99>49'="E<7;,Psto"88)879848:899:98=099<6>:*0;A[Q`^C[Y01P,A?ّ蹬Sg'FCQƳȷƷٵH;::;;=;9::79=7>=6K4;Ȁegjހ :/s/pj*.DC0%d>=Qᝆ LgP118mN*@O6+CTP6*4aw澟qu[mֽۇT_~JTePJ7?_SGG8eBoCbqž}cd؀글ΐRU>><=AD>>@DDFKOQNC4/.22ddhΊs礔ɡ֢ܹ܁蔽ƋÐƿը딊姈ѫ֤ܕꣁтȾڞԳƹ锜͈ҝƝޡ̙΂ӝ»񖜞Ŏju򈐵oxK\P፜jC5+OCY1;8b.K?1,OJC9NwrϹˮܔd߆3-1223211212221222102443112'4202211321113221223323432321011211321112101021212212$1121101221000/02100211122332102220012123233212*333433443342322423422246311532134223323445323455324443213532434554343353235545334545434555645675465677645787787767877998 7767988989889:999898&9:;999888:;;:8::<;;;::;:9:<:;<;;::;;;><;<<;<<>?<<<>>=<==???>=>?>=>>=>>=9zͩ ڽ˰ɗÿۻۿȯŰò։Ϧ˾ͼкɰƣƷҿׂȽ>()***+,+***++*d).Jn°񅍈󅊒̺Ԍ3/#100101222123343324234555454677634445876457;?Wo@UoѾŹӼƸʸǹ݀퇏иǞ؃¹÷Ķ卑ピɳ廬²Ǭ񋐢ױǩʖń԰ʹͫϚ؇î闻Ě矦ӛ݋ŬʹƸΘӵ˾ſȿξӾǽ˾ӬƠ͕ѩǹÿޮ񘧩𦧠ſ󴱢恎Ϸѷܒ߰žƿ䀇ӻϿʲηƽƹéƿŵد߂Ⱦ䈅޹̉ɿĹʼ إ߄яf솠瀈Š籮߃ц׀NA>BAACC?7d\\[Uh?KI=CF?)XSIR]]YWZQPN;[_>FH4BK\T\`Zl>52237B77?X[GS34H@^942IYLITRDM80?;AOMA@;?J>AEH`TISPRSW128;><9;CE;45102OQa`QZ8<93gV\b]?UABI?:0^[VZYIVTTZ[Z~y\rrerbaU8E"#@>=1>9%#-*?BQ:3HHb;5D5+CLOYF^H/<3+,D)+*&+ '+!+2#'*%+)',(`8/7eRCE8P1O@M-]]XE;6<@GUB410-,62H436AT^X]WMVPKC>PIVKD=855>0/7FpSp_)54Lj~akgiigtlrtewxqouQ^qvxxo_XMHY_c0_P^`01\T`SRbWIANNQ*(EJ*H7Z_SKQ*(''+*()+**)(#678988>AEHGE@CH83#?>>B2=BMNOHP@_XVVWVWWXXXYZY[}]tqpnakqznqXonpghv|x{jmghnqjkty~wksktxvfɆ|jxa}V[bc{rX_``ababacccddbddcdecdffgfgghghghiiihihghighiiihjhiikppִwtz~yvuw|MGNNNSUVOJNOOLPY\^a^VOtJIIyl|GwlpvbcXbc`XWXTPKMNLNLMTVSW`j_WTPMMQUY]RQIKKILORPKJ{uz~yptnqGEC>DAA@=B4]`TW./7=;<9998:9;99;AMC@uRJTWRVY`eiki78:>BD?9l::xwzxqlfkhf^_\]\X[[TRPP*SPOKOUY]SS+ST+(O++2-+3&HQ))**(''*.036851.*).OAEKNJC2:K**/1-01.001/08.,)+,)*(-...-03/03/179637500ULNPT.0\QKOe^KEPHKN:5373+DKE3KF2:O*).-24'*7NNwlyi[tb[]yjgdZQIl^}~blv[_ohjfZPGpz[ZHLbLY>HAz8AI'0]^P_8-4[M_\P<>;8:1<<>=Yc35f;8*-335:kYU]MUVhJF]Ajp;a=lEO><72/P[88GEBJJMKO-$!###%%"84551;!% '%#+1/--2,((!46#$#(296;=7@"&$+'0&"1 $+$#''" '(!!!'"#%#1,$+)('$(*-#%00$(1)+.-)$-;.'$UXV\\L]^affckƆ83% !%"!""#)+oȝȳߞݫ٤ؒ˅ڪ폤}xꆽ陁[M>1XNE/$%+!#)#UջȒいɅoo§Ҁ˟ʞqׂ֧p\@Coʗ`<7L|^+4%5KrҍӯҵéʠIG[Dz4WFyfz̮_{cEP0γ꾭eqH)(,.(/%* 3EFG2>   -a2<*0&0 ='A%*2>d"'F^tyvb_oVhl?9aK:(bGNfIB&.l)#&+$.$5 + +  +   + +  % -( 0, +  +  @څH[C5(1#@-P=vo΅ѪuHQ"A?V5욏͔↪ws,9`ZU<ȋ! ."$Ƅ70Ą̈́ʀ߲ڨqkJ:4JIH:/),/4<-""&:-+.6EROVRGPMI>6@8GD<0&# $"-M7J?#&Ktq~mnnm̓~{ɸ¼O^ibae\G?7.1.)+"+-))2*1C=/*@?9(01%JTLC7 "%&%#),#&'(+"%+1178>4J€zugntuw^nkovhj{onhkrwpmy{zqslp{hÇ|jxb{NOW\z̭ѩ迮wrzOCHGKROJD?zC>:68==<=AB|@=>=muteYlt=oei}yo^aRY\[RPOJFDFGFHGHMLFGIMD@@@>>AFJM@?<@@>@AAA>@wspnopg`b][852.1--.,3'FI=@ !&(+*+.//.-+1*$-1-6+)((*++)'*+,)(*/7//\B;=?AEI=9<:,6@! /,.443-%-% "!"# *,&"&&# <36;8!?<;@TM96E?=:#")',1,-+# ' !(25<;93,"526EUT8TJDfM43CXYK-" +  $ #3$C ?'"!"+E-'22! '?2&YK1".:("$!%( '#" >P(#6!.+'%'* )%$ !.&)#!--455QLF9ZL,.'F((&"!(     + +   + + !!-"05!%541,,+>-;112;8*#,2:&YN@G1#5 &2#% " %  # )#0,$'-,&' %%(%())(1***(%($)(&&$((("# "&!($% #&(''#"!"!$##!!! "  #"!"!!  !# !!"&'#($%$"(&$#%&%&()#(5*+)*,,,*''())&%&(''(+A(! $ &) %#  + + +  + + +  +  +  +  + + +  + + + + +  + +   -)885766:;B<:0/hgda_WU/0-00PTT'39AED>;6788::;:<;;:;>EKIDDJS^ccWG@>?=;;<:;<;:@[fhzɁπ쌍V=;9;;<;;:9>6+58=*9;8989='+3;0%7;)HwtKE(28;8:5/7<8:;:96;>:;<=A*$J0ANF.)2/*?@C5əgxO\х󨘅̆zJ;<:;<;:<=83GV.>j2CMhPKjp`OT3*OMTFLob-2>1>J'@K.3LF~×Ґοۭ[Ɋԃî[1-2344333432 32233312243332334223323322334434454 222123222323212123421112444233342332233233132212332234323233113534454322334335433455546544243443446553245334535554435545453454533433433434454445664544344566553566744455565455456556677567676675467866676668977766879988778987878 9887999789::99:;:9::;;:::9989;<9:9;;;:9::;<<<::9;::;=<<;<;;=<=>=><<<=>=>>??===>===>>>?@?@@??@@?><μ϶ɤڲ״Ӿ޿Ϯ񿂑섏ɊĨʻŧý]շƷрƺ`%)*-,+,..,+}***/2Mp;料ɷݼN7//0011212322122333224345775654545677667778;;=@]ǻϸ˼ļĿzЦĚڅꉜԿѽ݀ũ翲򒂚êȯ̳􇙠ℊˉδǸℱО՘׍ꊊÒ󀀖̎ۓ׫Ɔ̽»ºǣ鄅μ䜌ʗ³IJʡἝ߆폨񏪯܋ƒ𮷪ۍ퀀ĩăąƦ⃏ŶǽͼҽνȲ¡Í½ŸĶչŚÿŹϻߏsڪˇƱî姵ܮ遽왶鴺Ŝ񏚧O?<:EFAAC6Z[OUIP\;LMAC.4aHC>>PPHEHMT>XV_BI@ZHbREIKaEOTRJ_;D9:[^>AFC@E45:5>SJ?HbNN3[DAEG;1;DA>EJHLWSURNO\3338==<<;=><:>;58DJFA=><;\^^]5<8:;>AA:;CB77764/UW7_T.9;44764_8>[CV.FLPPMP1WJ(44E+LPc*AS2X12,26^8{`K~`PZx~KgaV}rq̫xiq{oyzIODX}\LrThe^ub^Yhts|\Gwu`WlteFYZUJtA>ADLuqft}lZckqhVTCmzxme[Cg䓉Tkp\lp\cI}uxĢZpykxriLx|}|sX]}JKunlfRfpMRXdÒqҜplO_a}|hXmZKYhO^@U~wdthjyQXfe?("-"$'J$24-" +22.&!!))=J<3$G9;;=@==_YUHSA7875245?*x5Q325SigнfqZ`stzotud}|vms}Bafqqql[WIIX[\_04V`]\/[ScW\_VJ9KRW*JFPSC:YWMK)))(),(((&+.)%#9413/15469>A@=:;;97898==<>BGBBvLJTUX^`e7fjmnac23863gglssvuqpkligea[]]YWVYSPS,*)OLOOV\ROTOP(+1UO3A:D4%)*++))($&(+/4622.X+-0FC;EGJQ6BJ),.-./+/01-270-)')&)),,..-0296:4;4I06674,.FDMB=jle:\ZRlMzGGFBYYpZ. '"[wYQ%BIX))J9@)(+)%cTivXfzJHcqqkmhI<484:IDI@@90T@BOOLY\WenYfmijntKt\JO^qNb9ROTMIFD&": >()'$%"#8B0$-#'%%(240' /,**+*&42@::9:41(385-+&$! ##%(***,+08/-27467.+-OROE6-0A@`mBGtmfTpXTKxjWE~I[[~siccizUse_OWph\QbWckyvXjEGFmpAHC:D`VPX4-U0GPX>>4:3:5<9<;?=6171431K_NEFFDXTWR.N>?85579:::9<;412B1231.,588231143.-//0,0.-2520/3/,O..YY[[V\URX[WMTTVSJUY1/MUVSSX>59C.130/-1,+,>,\:=B6;?DN,0.+S-,+/20+/-QEMOURVTRKMRRNNFLRXZONIJJE;:CO^WVVTTPOH?::CZ.\[YWZ`UmWV[UTT[/SSURVWWWZYYZZQQGKW02+UT1336763322232/0//ZSGGTTQJ@D52H>(45564310//-.-+*('&&')'*+,.-+++-0..+,,+))(&#" +  #$##!!"! "#$%%&(('(''(*++***&)*+)$*!.-.,-0.,('&(*(*(%$" !"(+,...-,*)QKN)*)('''PQNNRQGI4hideha]:=49A6\^9GJNWWWPkQRP7BT3)HO\ddbSX[VWOBLAJUTXYX\2GVdpYHKRXcZZY`Tdbb\^\aUA;;67j;>\0:8hOMUTjrrM[Opi]ogG5Y931IGYi?AEDAGIIIl+"! '%#"$35+1)-3'$)'($$$'-"104#$ 1,:-)+.;'+**&6"(,-"%##$)#"-$")""#"$(&#-*-+)(+w!*+-*'(/$,,$- *%=GMRJPZcab_\edĥŽŵ~ȼ߼`% #%!!$# )#-'(',"Ş鎜τ݌óˇޔظwWglCcT33G560!'*$#8/طȶމ݀ˣ÷yʔȱґˍļԯ^HaI&*l_KE:7,%4mdɍϳыЄt $7!4<4/6 +F/'""%!,&)*@4@:FLkYMMY^G>C <470*:kpPQR8",!(5E+*6$(*8%#2-)  +9     +!   + +  ++  +  + + *q;o.CELxMmTgzz.;NO4iΌߊ{!.YNd]</3wE(+<С¾K*ȅ;քӀୟĀfxlb/K6-*'$ -#42.-;BMD<8:8:<98PFGBF/$$ %N"0$Tmt軭ۗvbguyDžv̹ǶǍ>`ea``YF@4,,+)&,,+))6-7?:.(>@;,.:<.)JNG<! "$&$%*51Z$#&'*2%'*077;:DD=>@CCA?>>yvi\^stC_egoifWZ`pxaWTONHGGBDHIIIKKIITIENXG@<=<>HKH?<=A=<=>8kmypvxtlf\\WYfi_\.1/.)+3$CE>@ !#&'(()+,/...-1+%/8-4,+*(*)'''(*-,*,2412]><@=AGJQ+QTXZRU)*,)'NLNRSWYX^^bcbaa]^ZUSOPMID;<<'1!**-3#.+-%% 4*.)0*%()*%*$$$ #+ /=?CGM/TB104B&2&""  + +   + +  +    #! "$"'2/2 +#(&:-.!!*L*,(-)%#).;*3) ,0+'2    $&)!0'! !)'(%!#**,,*.)&*,)#''('!&(#&(&&*)!" !"&$'%# !$$#% #$%%!"  h! !"& !"#"&&"# "%-()('&%&$ +++**,0**),)(&*&&'%()*)+))()%% !'"$'($$$! +  + + + + + + + + +   +  + + + + + + +   + + + + + +  5236769@@9;/dc`bf]X33-/5.WW-47?GFD=?A?*6H.+GMY_b^RY[WVH8@7>C@FHGI(=SakWEDKLUMMKSIUPTQVQUJ<:944f9>S'114:;=nWW][sxuLT=OI;LC0)!) 38"!##"()(' ~}||}}|}}ˁ~}~~}|}~~|~}}|||~~}{||~}}{~}{z|}~{z{&z{{{||{{||~~~}}~~~{z||{{}}~|{{{z{{z{|~}{zzyyyzzz{zz{z{z{}}}~~ +}{||{{{|||~|||{|}}{z{|}~~z{{{|||{|z{|}~}~~~{|{|{ +zz||{{{zyz{{}~~|{{|~~~~~~}}~~}|}|}|}|}|}|}~~~|{zz{zz{{}|||}|} ||~}~||{{|}||{|{{zz{{{}~~zyz{z{{z{~~}}|}}~}~~|}{{|{|}}{ |{{{||{{|||{||~|{||{|}||~|{|}|}|}~~~}|}}|}}|{|}~}~}~}~}~}~}|}|}~~~}~}~}~}~}~}~}~}~}|}|}|}|}|}|}|}|}}}||}|}}}|}|}|}|{|{|{|}|}|{|||~||z{|~}~~}}}|}|}|}|}}|}|}|}|{yzzzyzy xxyyxxwxxyzzyyyz{ zzyyzyzz{{zz{z{||À~~~}~}~}|}|}|}~}|}|}}|||}|}~ } ؁ۚϮ񼡼玎ĹͷǺؿفgʈ遒ڀʵ署A?89789<><:;<;>=BGNOHD@=;;9:<>=<;>EJRRE?>??@EH@===BIOTUPED@<;:;<<;;;<<;?8CQ2'?@.@TY>BPC8V}?DDt_\fPՠsR)"%H9.87u3HB62Havb:eh8?L}̃GFԎӡپv&LLAPeRB>F)UCKbQ[s鋅σˀɢKlem؇RJ_ˋkd;;@??@DGKLGDJOSRF851_[RYNLgeɋǁً҆ùڤהߏ핍ɭ̥χǶ‡̡߃Ԯʆ¨چ͸ȺɥʰŀΌݼ朩ʝԥɳY`]`=X@e݊]IQ}xద-BLIYlLnUf6D31-W옅Vr҇ʈ̄ƬV)023533235344232h3444243443433344334435455433443454553233233323444345333245545431134454434434343433432444543343434434334545432454344555455334556455545436544344554457664455544455566434575454445554666556568678777656565566557886567667%678987877789878::988779989:999889987689;:9:9;;<::;:=<;:;::;;><<=;==;;;>==<<<;;==;=>=>=;<<<>>=<=>>>?>=>@?>>>=?@@??==??>>@A?BA??A?>AA@A7ƾхֶԭضѢǕ򭅏ȧɉᾩȭºٻꁌָ#ղӽãW*-382-/41.--,++***.@]ނǼ䗩b800012122233221123322344 4343544677745347677678876640l˴øʽӲźľ򄆓憆׀އƐ־óɤ㿱ސ½Գܸĭ䅏ԐҵϾѻՁÂᆭٷʘѨ󉗹֩Ҙп˭Ǻý˼ɯݡ߷ΐ˘쏇󬡛Щղ͍󿱒ȁՃꁩ񡸬٪艎˿ނȸɩ䱮ѲĮù›͙ý¾ľϷȶ͟䮌pŬڃϿǦڊ۽ү韞զ윤E@A7AIIFLBbb_Z^ZX[5JHEB72[8R3OQCDONI9;j[Zi:3]]raPCWrIUN9_a?A7549AUZE;35@=7OL+@PWUYXCLROCI??KLHAITICDILAR1117=>>:<==65A?;8:ACFDB6E458779<:9E?8AD768;530Z[U\,49433:;8>??97>@8=:@8O1AMMMV\\YWTX[YVXTZ[QdbG~{mddbfmqyme7R-16;=?CS 1.7H*-/K=+M23RGwrOm`U!@ig:xmpy݈Y:B4`~SbP~swoSyGpR1}IOj|;M6@LNh`OaEXG:Ae:X7?;83421/+=-RADK<6GjXSBAAHNHCJ]TI8@52103A97A?I714;Sui|tmsWVv{xitqkvlr|sar^hnmg]WKMY\_^4ac`02[P^U_\PL?ISS(F=QT@=XVMO()(%('#$"$'21'>;;.13-48=AEHJKF@N]d!5?=OKCJF@BINK¦_Y_d_V\c^[Z[Z[\[\[[[ZZZy߀~|xzmyvuuvs^crxty{~}tfo_dlspkpzyur{nnouwmjkdowyru}W\ZĴpj^`aabbcdcdcdcdddfgeefgghfggghhhiijjhiihiihjkjjkjjkklkjqm{yy~w{|x~{wy|LDJGIONIGJJIQX]_^ZXRLKKOz{Xp~ql`kdxnWY\\^]EHIQPIDLNcwxOQcaQV_c`bWNOQXTNKIIIGDIJ}}yuysqehkfvx;@?<;A@5^aVT\.=AFFGHIJJJLGDDIC7>HCNB?<=@<<@AB>A>?CBE>?iKCY_`ah2jnok764733420c6qrsnkjhffc^^\ZWV]SPPX3OJPMJPQQRSN'863QPTX-1.'.1-(0(!'%&'-0200-,-,2*JBVIFK?HCyGcbh~tuUgOAA=86EI7WH[<-17G:5HP01%! 2&$+/;H>FNp;=[bTGVp}m{^H??Ga=umZ_o^'"(l}cfY7./6&!+BK*0=*,,(ne^hzgxYKk~bks[8/<5-;CJEF;-=.B;UNiTFDOri_ZDDtdGRK^IyJWuS[iXcikgp[SP`j}kqmnTchWYUhaS6;=D:BFY\['Z0HO*>?N26=;>8<KMPDVa`^[\Mc^c`]Qbk:=@<79:Aq=U>;:<=lpxcaaTNU`tPXj_aqFAL0.//*QgEGEKJ=DGC$!##&&$($99558312'!'%&&"%)'&!=64:47A7.*7B',(36&%$'4!#!(%$(%''%('#&#$$!#*$!#&*#*g()'),);@HVa_^\^bfieebig[yŶ֌M*" ##!%").#""违Հؚˌ~÷俰׫Ҵ̸䝾ϹﮔxcaU6>WHDUP(,87B. C("޲铍ԣځfװ󒪺ŰΏډÓсͯ孳UXIL*_O\PaĸYTC3.DZdݘbdcoWÙih\IL@*91=KzƢǼǖH1;V@1*%*- (HTU/&.<"8'>*/*E//B9>-#%"!@@4LYGm418jrn-% 8G3MHkUSD,=' 7 ,-!-;4+1(/ + + +   +   +   + :$!. + + +#"  +  +Ǩh9;a. 9\cަ}KG&(/2G[܅˴إӒڸ񳔖|ոy=&&>yh 2yx!$T,ɫ¿ýĽ„*¾„ÀޓjQgc]L>820((%##"!%=137/,9VGE::9@GA<=IDB-+ !&%*(Qssٛ߉}ʻb]~~Ǻ|Zn\]\\VJB5*)*)(*/,')5.;=51.<>8+,A=*-KOF=%%%  $&(*.0-*3=Vh&))?611.+1:9>׊szzyzxfis}x{erdhpxwqr}||stlȼ}rjkfnx|pz~MQRr௣ʵxvLAA@DFB>@AHE?=DDUggEEQOAEGIFG@=>9=rk4GLIKN'TW\Y-+'(&&&$"G'SVWWWY]\^][]YXVPUKIBB%:9>86:?:8:26679 #.,?2/3*(,+2 $$##!$.$!:'/&?;8=BEUB61((&02#<6J)%* .8 $$/93=Ea,+HOH:EZbM`ZC0"&6F+H?15?3   +%(@G $-$c>9@#S!*,,+'## #-3,* #"?6'-()!'%0! $! "60));7?D7BB<4A(0$" +   +    + + %  +   #"&"$$(;+"!%)8H=#*#*58)$<0)2$, E(%# -*24&a )#%$-&2-!'"" % #(**(%(+'&*(*&&&%*" #%"" '%%$$! #$##""$%% ! "! " "$  $!!"$$" "!"%&')($&'**&*()+,,.-++(+&'())%(),+)'**$%#** "!&&&#  + H + + + + + + + + + + + + + + + +  + + +  + + +  + + + +  + + + +  + + + +   69;E+<3^[`b]``14/-7.N7)47B??6+L):TMZheo\^aSUQ2D?FG==>BGIF-a89EEIKS2QNLSEWOTTVJX]5:=936:Bl3H4016:nyhc`WRWetEBIBCM/## .5#$$''!%&$~~}|}|}|}|}||}~ǁ"~}}}~~|~|}|| +}}}~|{||{}{z{{z{ zz{|~~}}}~|~}}~}}{{zz{zB|{|{|~|z{{~~|{{zz|z|}}}}}|{{{zzz{z{||z{zzz{z{z}~$~|{{{||{}||}~|{{||~}|{{{||{|~~{|{z{| }~~||}~~}~|z{|{zzz{z {}||{zz{{zyyz|~~~}|||{|}}~~~}~~~}~}}|}}}|}|}|||}|}|}~~|{|~|||}|}||~~{}{{}~~|{z{|}~}~{z{{zz{{{}|{{|||~}{}{{{}{{{zz{|}|{{||{|{|}||{|}|}~|{|}|}~}|}}||}}|{|}~}}}~~}~}~}}~}~~~}|}|}|}|}|}~}~}}~}~}~}~}~}|}|}|}||{{|}|}|}|}|}|}|}|}~|{|{|{|{{||}|}~~~}}}{|}~}~}|}|}|}||}}|}|}|}|}|{zyxwxxyzzyyz{zyyzzyyz{z{ } À~~}~}~}|}|}|}|}|}|}~} Ę߷뇉򹟗ĵꉃ˶ʹ㮽Ͽ􁦭ÌО͕⁃ͩ:<>;:;;=>;<;::=>@DS]cba\YQF=@DKPTWVJ?==<=>>=<<8=@_S&4=35&+0('=@:/H8,+7-N}l^g\I)A@\B/53;)9464M%:<=<>><@>=B5(?=7?PN/&(NXEK;6g񊄈ĸϾV@?==>A:BCc?)-).)2EFTkR_yķ}4P.xSWUKcnH7K>)H.B;DBM/AW,J7^OSGBZqJE{`4YIꔻ樺dW+Q>AMתoWh2`K=fGTs쳾D296.\Ĥ͞ux8V93[fKQ#Jc͊Xv샔͇̄:%22564 3454445554 344554435654354554334445656544353345544433535654554556553354554544344454544545444565565565545577876546566567765667645676765676577765776777545765766567776787789787899878878876768877897786688898989::9889988998:;:::;999::9;:9998:;:8999:::;;;:9:::;:;<<:<==<==;<;;===<<<=>@?==<<=>=<<==>=<= >>;=>>?>>>=?>?@A@??>>??@?@CB@A?>@A@@??@?A@@BABCBBC4ౌ邍㰘þ擇ه̗ˌご;˺εûºշýϺՐ=+.01,..0/..-i,,+++.FUjي˸Μ5121121103434456566456777677877532RĽïȿƲϺŰȿ˵ǼꇟΞ´Ќ¼Ĺܥ񆎙ԘۢԦڰĄ۫ϙٍ쮴딲̫ґՐݕԀڵ˸ғƿЛͿ慃ͺ€Ĺǣ耘ȳ󮗙儠Ʊ靮䃒ќ҃ϘÛڊϡȾ߯ȷ׃ۀIJɽ˪Źƾ쀉ڶȨņƻ½Ťнÿܽ򀏝ΏչعQ֖罌֪˿Ӽ㓑䋡796>FHJKR?_NeU^ZV]h7DR_1Q02T`eaG=<>3<75OCXc4KC5NFC;;<0>J2;RUUY9@CLIAV_YXUDLOM\DPQM;===?95<@@;78<@EICf;AO`767856:9<>;:?:6669242_[Y0=@@<4a`P:VAN:T\]XQTUVUVWZWS`SXVq[yktkbfiswJ)OC+03/47;75<7;G2C<3/G9N'CI9?@3U@ ]/7M>cM$:L:7J>R6{tnkwcbDPU{bugppX|ψNetpdyjjmP|kMvjysfZVxm˗z^yrq{sGmSpM'70+$+!3B+=?kkV>]CRE2+=Ja=93EKEH??=+14"8+L2(,F()R69'#-7;7'3G0:@CA>976;]`{MqT}xlqh|ObFC{icjލkmdSʟyf~r]dF~hp_nxwjG.=]UKI:9@Ap~z{yGxx@*HҚ^popqoppqpppqqqrrrqqqpqqrrqqpqrqpppqqpqrqpqqoppoppqpqpopqopqqqpnonoooqonnnon.mmmnmmmllkkklllmlllmllklllkklkllklkklklkkkjlkkjkjjk llkkmklllklkkmlmlml mmlmmnmnnmnnln mnmnonmmnoppqoooqppqqpqqqpqqpqrrqrqrqrqqrsrqtsttstuvuttsutttvu vuwvwvwwxwvvvxwyxxwxxyyzzxxxyzzyxz{|zyzyzz{z|z|||}|}||}|~~~~} +XpyctTLJeG5<;;:763K1B9143//_=2^15USPLKSZS:6+)*/2:65:6>38@AIEACANPTTQ:C8W;BA=ABIVM[Z\[TY[\[[ZZ[[\[[\[[\Z[xovyusmrguo_qstu~}{t|nnoftzrnw|vv~wznqggtjyvX^\frWbbbcddbdccdefeefgffegfghiiihhjjjiiihihjiijjkkljjjmoƶvz~yzpwzsyzyyv}y~{yxzEKNLJRSOJHLKQX^`[WKst}~tcvxyooepukWX\]][RTJTX[hdct|rmWT_VNNPRU]WIQZXPJIKHIFIKwuyvspfdnr}}zs;?=A@=>3][RRZ.DCCEFGIKNK=RDBNG58MKIF@???>:;78:669;?C>;_INTVX[YYl367899;8886664335hmkkhhcfc^^\Z[[VPNQPQGMP((QNOLN%-=4-NLQMIOQ%6422*$'4'F&-+-,+**--44)J?;=BB:FKK@AF1@`3BJP.47(+2,-/'>=FP@T@6vW_kXNwNrfAO*8?PWqeM=P3$/"1qYfea"#$*:=A0?r2Npb`j@kXkS_np;,8,,7BB<=@GC9USHO9BBK@HIL<<9=d`BN2;ACGOI[SKTEXWOVNXZfWM`l<2((56.)0+))'*-*)+A#)*#37C1:G&47 %/)&!#$0).=?@E@C??96<8648479<1/*$" ! $'*&%),%%&.*,4474:7/0.)*(4'*)[a5B:E2?59?U><=<;8;=@9651765N6U'U4WFWIFX.B=801769;83<<940//033130164557411.1,./43\3715/10-+V,/0..--X/VUYPUXUS.WXY,./1,P/2C23@E;030./-./+M.,G7,3D>H/3.+,,.271..0.IGMLPPOQRQOKGGHKMUZUNLMB;?HMCBCHOHHMGFH@>CBDDN>2;HRIKRFEC>:7BCC7C5K7KMNMLKIMNOMLNOPK@CTIKGM]1.07/YYUZ\`\XX[[ZVYTRQZSUUUWYZ120201]SU16450Y/.YSRK==AJQ-PQSVTMI9,C%-,-,$.110+**'#77411/0121.6 !""###"!$$$#$&$##$&"! !<:970,(&%%(**+)(('*- < !!""#%#$%(((&&&%&&'))(-,00/+$&1/32.***+./& '''&'%"&(,,.00-.///(BI()*))*)-XCVESUTbfl47=97=7\O6DFIS]\WYWQQBQUS`T]e_ehg`VHP<8\QQfvg_Ud\\RLdJEB8101.+Z;GGIJ<163148 %)"&01-" !",&/3",:>15689 428"95"*"%#"  %&&%%$#*1+''!$%#-"+*($--#*+**/.)/&1)I\a^XX]a_dfhc[h[caůű5  1) %./& +$ۤŸұ緐ˉˑηիƨީƼ̢ձzx[H=@K7;3< IE47#% @5!'9,(;(/'0E;* + +  " +    +    #   +",  + +  +  ʵQM+d%%"=z뮂汪op_n2:&-B2fڭ޳m֠ص䞮ÕuFK_xO, >605A@82*8G&.MO@:35%$"!"%'&,,+-+301F0),-D03-*028@@E?8?IIC=>B-(&')+-.0-#2((2.#%3/0/+*,,*((()*'$'*.1+*G;ADFIICCR(*,--+,(('&%%#"$%JPPRRTRYXUVTUVSNHGFCB9?>67765" 6484../! "$3.,,,.,&'), !  """(/KG:(.6"!3$>LC'=67/-*,0..)13 $<&+3<&  +.09E7B,"`GNZKAZ=aQG)0(+47F9$, + +%1%-52 !$"074;R:0-O!$0N("%%)70%5&#$)%+!  &/:/;%.5"n     (")+*(!),'('(*$&('&'((#!"!$$#$$#"" !"#"%&$"!!!"" !#"! +%%#"#"!$$%W&#(!! $,,-*+-/.++--,)+('&+())(*++,'&(&$$  %&%%&"  +  +  + + + + + + + % +  + +  + + +  +    + +    +       + ),B2>6QRQ_be0031.3.SI/76:DJHDEF??3DFJZPY_[bcb_VGK4HCDGD<>;>EF/567?DEHMKIFPNRLRWN;U\668967<@:P==3;421]ZXmwfbY_M@70G2)0%%&' #~~}|}|Ł~}||~}||~~~} ||~}}}~| +}~~}~{|||}{z{}|}}N||~~}~}~||{zz{{zz{{zzz}|~}{{|~{{}|}~|{{{z{z||{{z{z|~~~~~{{{|{{}~~~}}~}|{{|~~{|~~}|{|~}|||{z yz|||}}}~~}|z{z{z }||}zz{{{z yyz{}~~~}~}|}}}~}~~~}~~}}~~~}|}|}|}|}|}}~~}|}||{}|}}|||}|}|~}|}}z{||z|~}{|~}~~{{||{z{{z{{|{~}}}~}||{ +|||{}}|||}|{{}}||{|}}{{}~|{{{}}}|}|}}|}}|}|}}||}}|{|}|}~~}}~~}~}~}~}}~~}~~}|}|}|}|}|}~}}~}~}~}~}}~}~}|}|}}|}|}|}|}|}|}|}|}~}~~}~}|{{|{|{|{|}|{|}|}~~~}|{|}~~}}~}~}|}|}|}|}|}||}|{{zyxyz{ yyyzzyyyz{z{{zzz{ |}~ +À~~}~}~}~}~}|}|}|}|}|}~} 舩ኇ澦풺䄘愷Ÿ􋣭îӵ5AADBAABC@?><B[󂙚€ذߥQ=>>?=;<+*9VT!<=;8FELG=/=C67&NJt̅SoUj;?<:M_:'.472?:BD19=?>?>=@>'J=277Z3p/*'$ABչ>>?G6:FCYJo*QXwUuȦqHQH,Oh4#Ka6C04BS8921a](;F>)1&1UE>;==>>@???>>?@?>>==>?>>=<>??>>>?@?@??@A?@B???@A@@@?@A@AAABBAA@>?@A??ABABCCEDCCBBB4͗帼񐛚곘үûـ򔋅êχ؆ǐԽþȅ˾Ʒ܄-׾۾³{A*../)../.|--.--,+,-LPt񄇒󇑣ʁԫ݃݇[2111222111.016973433345665456665545467788778897637i¸ʻȺ·ù̿ȸиȹĹ덖ȶ劗Ǹ돢ױڭų€ðᅅ邙ݞÜԾ򨑷ݸє튓×ͺǒ⊬԰䒙̺⎮ɮ񝶰秕ݪɆʎŲھIJĵݯÿ􏈍żܽھ۹݄Ε䰍ǍՉ˧򬵹͕ϊҌĒ碷녇Ȩ悖ނޕԅؽɿܾʶษϚۏ뿠쾰艔ƻķ삌³ 삨˹򂘧̾^ˑܼחƾቌ<7BAA<=OEAc5VMIcSU\c9RW430ZPCOVJ<4d;>>96f_7M4_OqeYgp@M>97e`;BfRd?=:<<:;@@4898<:57;9==;;9.4297166225;EHD=9<:;;::==8<;><>@<:<=6fcLc;SWVWSRW[XSZURVWXYV[rwpiijpw}.24)+.132467:+6> J(=32.,4*+0A)PF3./0gW`zsTYcyiUpiQogQoɈgqdevmTjvqdpg`sXg^`cZb\UU˦m^viyɮz̀BCK}OZuf*HOQOLVP{jWW^BZXaZkL~dmrU +ndQSpxmZ zybA)ytdvQ|Eaa`vkuՐ[{KZnw򘡦tXlm[fҒZQjgF|zΜaB70NIRASLB/_S|naa_`b]ajYxsٍvkS811F?%B3H+!5$#%%c_h]KgzR[t]NOD^P`bSOpbozr^hblnh3ik/<=bzaIi{8.Csi[4JsKr}>am`zAKyTQEBQ=V`]ztNr\G1.8'7#=;&::?3M>NcfnU=7#4526F&==7== 2b(A8'+''$1'=P(%2)E*+-=07%0*(e1LF9D470:eL/9=aW>=3%&'.0!$>A+"+02;Tft{?f~;OLK_pr_{|ugZn}^nME\{yxolXty~~Lv"GeYYؘhjkwa?;*AuOB?ELD7Wx{hy}HALV52=qwspqqrrqrqrtsrprrsqrrtsrrrssrrtsrtrrsrsqstqrsrssqqrsqrrqqqrrqqrqsrpqqpqppopqpopooqqooppoonoqonmlnmlmnnmmlm lllmmllmllmlklmmlsklmlmolmmmnonmmmlllmnmmlmnmnnlmnnnmnnnknnmonpopponmooonooppnoooqonnmppooopqsprrqqrrsrrqssqsqsrsrsrsuttssrrsssvtsutsuwvswuvvvwwwvwxxyyxyyxzyxxzzwz|z{z{z{|z{{{yzy{{zyz|}|{7z}}}|}}}|}|~}~~~~}~~~.\~XPG`@58<<>?;?=XDY3WM;=?B92ZTY=?;M\Z_`R.*'68! #/CtQ±_ַŌiojk^omnwvnj~opzEh?OGRdb_XQJVWRVf46bb2\QLRS^TJA9NORS=IMX'>8VRPOC()''(%%"#%*5/?73+,238:<@CE??BE'&),+;>[qAB89ABfrP\Z[ZP[\[\[[\[\z[]\\\]zvr}tqpuzoeszvxzs|xvrʣmovwptqr~tomlpdqkoxyV[[\m|WbbbacdddefhnmefgfgffgfghihhiijjhijiijkkklmljjnrȾzy{zpw~x~~v{yvuu~{}zut}}DILGJNOPLHHNPNSTVXUVz|{|zthoxrejqdovZUU\_\X\ZVVkmhgqqqbOLHOMOUWXMZWMNJHE}EJ}|vyvwumlimjlpqoo;>CC<9<6\XVTZ/CEGIIJJLD/>SCIXI8ATNGF@??>96767:778:=A9:UALZdmfa`tdeg87=A95256534575giihefhd_b^[ZXSUQOKJMNP.,*-)&&!87.,SSOLOU)%275/,3/1%IM*(*))*)++.2.P?8LMPNLRNR.,8X^DGDaVQEnj:71B=-/.)'''&+'',M*$((@;?#7A%&#!!1.(":HK*6672EA:56./>@=86;BG5()  #',)%)-3$#%$#-19/521/.+)+(ISQb\KEfuenuTg_|bAk@=2*#&MkE@HaPpNaP]g\ZamYWFlaTh5VMTTIR%D=DF,,4a>0?@3@6<;7:;>=877477.4:.63:WWQUR:B9.4423)554?;:303/./345.3503396/1,1WX-4/W26430.10///0322/,W0XVURV.-R,-UP-0+200/3ED7;B;P,4/.-1/OG*+*-.1XC020..00271-.0,HHQNGNTSQUPILJJNUT.TOPK=@ONFCAHOMBGNJAEE?@CPOH:C:?>:1@/?BQIQOMQQONOOPTRO3D[U[UQTZZ/127\ST^a]hZ[Y\_\SXZTSUUY[]X^/22//0011231563./005WVWPRPPW05&C, (*"$$"!.'+) #$'&,/0+4543326647!#"" =<:;<977650+,,+$!$%')(%&((.4953 !!###$#$&'&&%&'&%&'&"/3-)'',12.+((*+1+##!&&''&$$##$&',%*//.100//0*&(,---..-W-V/]\eol4:@=6::_FY@BGQ[ZWQONOFLL>ZOVbl_rteXQ?7=EPVNGWFFGMXaWOURVZ^]A_Tn?3479:88mZd]6EG=>5NTUpjaH}`p]rV\bT(:;5216RLc;DJI?8@<#"!+&#<(7-*;//15&&&"#(#4!#!81%70C53;?#) 79!&7/9$")&&&$!+0!($*&%# #$'++'')((/*+/- "+,*31%4%HQZZWX\ab`aXY]bbebʳ)ſι /( +!霐Θүϒއء̢˖뀫ˇxD=Ypqr{oRyjUF*E(0G>;' &-ڷݠwX˿ZiȓĚ֋󵸬̶⥎ʘ淓bqt؇\NK=;5/ZTj[ҀֺŌlNLfrwګ<,'B;?7NEJɂǽւа洓UG7  %",/"2.hL2315*$D3H]_D_C312 +,34D9T^&5|e}g"'F2-!UAdh+@J6Q_$'L8K"6&655RjT/<'!  +   $   +  + + 3## +  " -4(   (lt]3ۄ,iŘhxSS,&-3,uVѩiilt}ǃδƔǕ‡d\C + ;B@0('*#ăAĿ„7Ņ ˄)ׄրГ—XJ?M4)+.-/10/1,0.A1B(JB4689/'C>C.42>KKOM=" %$ 8]y}ٯ{ykyڮzy~ĤE];KCLXWXMB0+'#'3,****,0A>8,'??96*CD*,LK?3.#! ! !"$(),)**,*'JP44*)/0OM=d𓗇{ytptxqgt}~}{wuѨuv|{rwtoloeonozzORQTأozАꤩսzyz{ADC@FHED>:>HHFIHHGBEz{y~mhfnqzzjchpi[v[bXflUPMQOJFKIFEUVSU_`dWC@=E?>CEHAKH>?>=;trwn;>mpplojmldbZ`]Y\][W,*//)*-%>@?=A.+++,,./*$4(.9/%,:1/1-+,,(&&&(*'&'*.1+)@5@MV[TMO_URS,(.0*&$%$#"#&'%HJMLJKQROSNQSQLMGDDABCC""$ <:6554!""68-'*S++(%)+, ! %)(' ,0-J>%H, )7#&*+B13.%**&-  +/"-+ " " (-)*?%=BaVG?BhXBQW9%)6$()+;-0*% + 0@!#(  +25G.8";9Sj/G24-38@0,=6W.:0+=(#+13  ')#!*  - ()%)%)*)')('%'&%#"$$ ($"#&%#$#!""!$&$$"! d##""$!""%$!%"!"!( $##&&%$#$&)'' ,&)&%(+)+)(.0.-.,,.-'*,))()*++).J))+))&&*  + +  +      + +   +     +$   +  + + +  + + +  ! ?@+ZXbke1474/10T?K48:AIHCCB=>9?B7SIR`i^oqbXN:27=BGA:F808@43778??BIOIFKIMNPR=_L[80135777fKOM0<;251PUYqkfF|`kQV88@4#(8 %&' "́~}||}||}}}|ā}|}~||}~~}~||}}~||}}~| +}~~~{{||~|{{z{{z{zzz{{|}~}~}||}}{~~}y{z |z~{~~({{{}|~}{}z{zzyy{z}~{z{{{z{{}~*~~|{||{{{~}}}~||{||}{|||{|||{||}~~|~}{{|||~|{{z{z{zz|||}~}~}{{{||{z{zzz{|{zzz{z|~~}}~|z{,zyyyz{}}~~}~|{|{|}}}||}}}~~}~~~~~}~~~}}~} +|}||}|}}||}|||}|}|}~}~}~}~}|}|{|}}|||}|}|}~||zz|zz|{{|z{~zz{|zz{zz{{{zzz{{{||{zz{{|~|~}|~~{|{}}{{}~~{{|}|}|{{{|{{|}}{|}}|{{{|}}}|}|}|}}}||}|}}||}}|{|}|}~~}}~}~}~}~}}~}~~}|}|}|}}|}~}}~}~}~}~}|}|}|}|}|}|}|}|}|}|||{|}~}~~}}| {||{{{zzz{|{|{| }}~~~}}}~}{||}}~~~~}|}~~~|}|}|}|}|}|||}||}|}|{zyxyyzyyyxyxyyz{zyyyz{z{|||~ ~~~~}~}~}~}~}~}~}}|}|}|}|}|}|}|}~ ӣبđܒ߹ћ󂢧۷ࣷ𦜗]JFGILMNLJGC@@BHWfiicb`aege^XYafegnZpkkic]WVURMHJKLQONLLQUWZZSGBBCQiЌܘƮʟ춭ٽՉ㒓i@>6MbAQl3);ms|o[.*C,^LnmԸi̚νÅJNNKTKhR((3)C4L1U-9>>??A@B/E'(0T:J6_H*>9;A^NT؃ƭΊ៾ʍɬΧֿJ??AESSvz__Rbhπ̥XF7DTiDDZ1:>9A@K#*H99D6YQ34:N?4/>h:?G:Uáw}qJ&r̽׉.B1DXcH15C.t~h/V78@DhrzRUgQb3DA;h_UH·̎ʲ%ޓ]J#467766866678777867887776776678887P66766677787877887668768876555667786777677578767678877676767556866556665667896767657877878 6889:976789887 8::9755668898 9888789998 :9898988999:989878::8%9788899:99987997898789899978:99:89:;:9;;:;:;<:;;:;;;9:;::;;;<:999;;99:C;;;:<;==99;<;<<<==>>;:<<;;:<;<==>=<=>=<<>>?><=>?@?=>>==??>==??@A?>>?==??@A?>?@BBA@A@?@??@@B @ABBCDDCCACDCDDEDDEDDEFFEDB>خԔ틑Ϭζ͐Ӏƅ܄ǺnƊڼŵݱ߆ķǶ7+-.,)...//.-{.---.LBo׫󄍕򎕨ĸʤ~F42122342.-OXOTa<33456566676665665687886864[K¾ǽɿƽ񅎐󀃀¹ʸƜ񅚫ųǼҀż삓Ը۪Ųޏ쀈Ҡ쀍֧钨ޚÁ༴۴Ϡ䳂퇷ڒɹݾñҩɌۣ̎ŔÂÎ߮˝«ĺ݋۰žċ􈕪璌󁅈εȺȺʹ׬۵砪㙅Φۊ됔􀟭񓚖ܹ򳮬Ɗ̛ǁӻõ۱ԥͿےĻ⅃޿˷ѷǺʾ³댡劵lıӺ޾򇆎Ʈ񎑗ŅԾ=5838><74C@?A@?:.-78;>B=368>=<;99;><<87922630363:3FGFC?A=;;<;==8HMFYNQMW[dFRkQVWTR_c[½T}|||usoqtz{}~mcA/:>J.266898782-(5/9I21*(UA=:UBb_?PFW=GTN!)$\(S2/3~rhjXer]at^Ů̓БŨjo{O\nVatMX}YiJYfflS^Dtb́t¾fzo;tʄzjFA\OWVNjhpYWGJtw̎}az[UZ^uxǻƝ{[t{Xe.JXxuaȉeFg`]v,p}XUXʽ\VvGgPiݥtlnacp}Z}wyTDzuSq^mwԘE=]:=ED_gT\\zd\Z[^g~|~qrkfL/KNY`*3#0Sy6'(HbRuDaRFaEg@`pbsujkVYmoZ`awrx=W:BhLh]ivUbxz<3W:){_DkLS/7/W;ELMo[ALC?F*{BsȫX0WbHږW]\nU~Wy{˘gs=zITdrnzvj΂l]`|cy_|hnhh5I3NUK?=>?=7.:_91LSSYVO@:68:;7Hs;<:878431/3;6/.*(&&>l{xů`pejndrimje~[iovunplnsUHAMSq]a]SNHYVQUa56b_[XSPES[MIA;IONB9WUME@B?eYy^[[XP\\\]\\]dqzosqpupu{xltvyiowosԆ|}pĶxrcfhjmkv{wV]\Rgab"deekihXkgfghhhgghghhjjkjjkijjijkklkjjjqj˷vxstzs}~urqv~}~z~vvvttFILHJU\ZZTKMMJOLPSS|z~mhvrghsrw|v]YZaYdf[feid[cdaellhiYT^WU\SLRLFNOHJzxBJ{yxvrmqfclrpsqvxt?FFA<<>:0c^]56AEGCEIC40>DPOMUK7?SLGF?>99:8:8998:8;=@>J\HQQ[dejlccbd68?@83/00-+,/__bcbihegb_`a^YVQ`\ULIHIJGI*+(("370PMLJMLLQL$-6196412,MK*+3)++%)-,50)MEO>>:@kF]F3=X\N6KSSJjVCG^?>/<<59>?=92Bgnl}Xqj;*/96@"Zgp`zu|zhYjx{rejOS}%.,,/9>?=450/X@_h3@CF?AJ@98]05T;3%'" !%&$'.3-'" #*3040533.(&%).0ZPMP3@@;T*7<5;;?<779585-865;751ZSP<055048441247>:934210335/156533851.W...130-323/.200/00.2140-W/UZWWX-,SU0,,.0030212Q79;=?H@/..31/QNIK"$(!;49.031124341--.+JIMKHITTUVOEHLNNPVTMMQGGHPCFDFHNECIMCFGKDAMLOMQMOKQMIKVG>=D=BB53<<4@HGNPPRSPMPPT[_V9NRR[SOWZZ./-33ZXaa]]_^\[`TUZYTUSUU[]]0[00/0014331243320//UMLGA4,,J5:=BGH>3\LIa;7?CED?=TNRSPK2:I?60D579:70../.*%*-269:;:<8775/110.-+($$%#"!!"#$##%&-22756456324 !!"$$&%&'%$#""!"#9-+('().-*(*))+'&# ')''%#"#$&%%'$%(,..//0./--+'(../.,+U,Gd]fjg:??>7970U0G>JOX[WKMQMIHOD`RNbkaT`jaf<5b4:JOD<9A?LF=9:;<=DFRYUIRVT^]Q8:Nv<47::97m_Z76;DNG2J.)19Xd^뤐ǹԎ|Q|XTL@-#"* +'8S" +!63 Y; 5-HDHD*,*!VO\Jd@6?4+"/*752'2*Ioo68 F;)SL7:0&-/#BU-  '&7A=1(3 + +    .   + +  + +  ) /) +    + +   + yll)f)%'U֊‹wݨdC$#ȿĺ栀֋]KUށV殝jq  "!)"4昝 Ž¿ׄ؀䳽٭K;(7),,0.*22234.$,I-&?FFJE@50,*)+)=e2541/1-,*'+0.)&*k͌tu~ty{unls|þN;>HOgSUTJ@.,'"'2,-,./0&7C<8-)9@6*'I>2/0GE728#!" %&',-+*+..*+-J4982/0/0CC􂔎ttqqxuztz|lry|Յ򈆐t˾yghjjįklyzLUU{؄̾̔ꨪ©vvDDD?DNQKGE@GFBEABDE{}xnrklmspbamk`bifjnhRRT[T]]PYUUOJTQMPSTVXMKVLIPJ><>xwvki8?unniigaeYW\d`^Y\]W,10-)*-'!HDD&&,,,'*,)'*2005/#+:2/1-,)*)'))*+)**,.0,4@:DFRTSSWPSQO*)/0*%#$! $KJIGJKGFKKHJILIMJSKGA@??<40%$@=867456.$#""86#)*'O')%&**" &(&%%*#$2--(&"**#("6/%!(),0@ )22!6/&# #3#&$-Q3L9)2HI>*BBA:T?/,@)%(%!## .*(8=&,/2. ".-!%*G27)2()M/IE..'-;>('!-6#%&%&! !!! ")1 6-7=,;0>"'/5)  +    +  &$#"  +  + +  /'' 8@\4?:-"-8&H5;6+ /:2(   ($%C(  +#% +'&)(&)'()&'$$"!  "! !'%&'#!#$$#%$!!"# $"!!!#!$##" " ! #%5#$$(-/+'(%)&$)+*,,21..00,,/)*,*')((',-,*I($$" # #"*#)!$"# +#$&&% /# )"##$$   +  + + + +#  +  +  + + + + +  + + + + + < 7^Zbec6655//-(K*<6>AHKI@@B?;=C:UKM]f[R_f__81\.2>B:2064;323676;@6tiH?~ToBՁCJR_zX|檐t{䐇`Ls6JdEB8%JNVUGg.E:@>?AI17GxY?<;A[,377'=@K}ZeTx[gϯѪġ˜ֻiDCFNj_{h{~K>4-=M_&GL**6C5^2>,)*Pb8#7?CGXeP)#EUS>#;9OỦ长duatJ;V?7UIqzRfUuRNn>aWNdbNMi\̀bkE5EL@>;;68=>><:9:<=> =>=<=>=<=>#<<=?>>=>><==>>?@?@?===??>>>A@@A???@?>>@@A*BAA@?@BAABAACCBBDEBBBDDCDDBBBCBBCDFFFGFDEDFDCDv֯ٮҭ零ᆼŧݕۙт́ؿ査䚛ϳʫgʿϦネڻüŦA,.1*-.///0/.--.-../1QLuŻ^<332232.N[{{[F6;434455445666566456767778:778876bXɶǾźԿ삇ހ˷þϿļთ釢ο徼çױ²珓녊ͥ굈ќٰٱӼѫŷȥŁǢꠃǦ̯ٮ˜ƠƲ삯ѥ̝󐛑招ĿǷļԤƌ϶ϻܺޗт뉐񦲮ћꍏͰ΀ҥאõƿÿҩūɸͱ玀륙ϙŴ|ȼ꒖ʿԤߞよϚݗ큀``ba1:B;8I[bJ736DIGCKFD;F^;;cq8=HHRQ[Tp>iMR`=PINNC@UU55EW/2.0SA:7SXZZZ03-57[6\OW/UIXZY147;??;=;8235406<0M:=@AE=79>?==<;:;<=<98<978/052_06GHGEDA@==?<:75789<;:::<;88=@@@<^<>7_L>[PibRZ;@ZR[ke]zhgdSzuwy|~|wtsz|zumjlmt~vuuvrsqtvy~ZP-253+..9:897779DaJNgh22J:EE90/HhqogTre\sǕ|u֋wdbkcvd|^~T\it}bg]LdpJ{nD~hdl}h_ E7B9FJ9RPYa^PQnŦ|oXyYY[xtb]kf̰`kw^]GqymlVX^T[Wqcdv2{QveʝqU`bm^tOTs|snɰ]pW}hw:8:zjpDulv`yR{[z9)*ftawjzmf\YXZ]fak||rar^uH@/XH?M^4Ne5%0TzvM1NTKgs~V[mCEKeRjAi=PWpmO]cczqk'9Fg>^ZK\lm/RZDT4=GX;IV50+T|SEbas>AaFxPRt6d8sM8.(+55,9?6/?y_ql]eGL-SJO?`&/INBg5A//;=)$MC=;?.->),*"=*60P2Q=2"0,aE:91-AA?>O997! ?#4'(/.&&K?53)/-:7>pKHOutZx+horKPK~wvpcU^|eGr}C\rrbo~x^ƛhlgmmܶdHa,O28hhQCCIm69@kb`peJ=Q0O|{z`wstustuvuuvvutututuvuuttvvtussusttsststsstuttssuttuuusstsrst-srsutsstssrsrqrssqprrqrqqpqqppqprqqrpqpoonooop qooopnonnooop omononnonooppopnqoopoponooopoopponopqqoopqrqpqqqrq2rppqppoprqqpqqrrppqrpqsrrrstrrsutsvssvvtvuuuvusttuv0uvvvwxwwwxwwxxyxwwyywyyxyxzyyxy{z{zy{zyz{yzyz||}{||{|}{}~ }~~~~~ p~kDP>832363.=D:@SM_G8250-T..R5?Y9KNCPjGI9=::73//9JRKG@6,/;;`|zĨbϤhjljypY}n|tstpqrkmzaH6>LSiX]YQHJ[OQS\1/^[UYVQJVTHK?>EMF>6QOEE?PMOYN(%&%%'($"$*4#5031.4579@=BFCCG&H&++G>CY46BC9??TDމ]ZZSW]\\]]\]]]^^^_^]]]\v~is{|y~~u{usvrsʺqu~~rtlŴ®ifnjioʼfcb}VW}dbcccedhqk]XmhhhghiihjiijkkkiijjkkkjjkjlkkjptwѸml}z~{sz||}twqsvzwxzx||yuzOOJMQTOSX[XTKL}~NMNOxxwxikgdpmgztphaX`^fffKYif]`\\e\[``UOKONFOLFFutGuxtqslmgknpiikpop=;=;>84db:;CEEDE<+9EDFBCDQI9@QJGE??<<<9977:9:9?<:;6+0&*".4CO=4%8dAAD;BCVVehS77\q_Z0;=1-3=7)8+(+almbosVXL5uoubgqzh\^_vf~WaKGCS}742053671-/0f@zd5L=8A>H5@624-'&'$*YSVZG>?ZkKBcC[EHTI><%%#!-')*(!$#GZV;I;M18+-'1*-;8,6:.(! "$$%'+..+' "'2'A-.552*%)+-.`VT?d8Ei~_pn{d]WXF1:'2*,JxwtXSFX@HFUWXZQsf_|otQb^A8(*,:[[O=EF@Z5M<@>A69577:65+;/*G?7.2ZW6)U65459432224<8734/12552332552454.SU.21317230100522211-01000+/SYW,V-URT+TR,0,11/0.,B7;4<>:@+/500(MD22@.^38C33211234//..,LLLIIFQSUNOFJPPPQTIJMIGNBKGDGF>FBCGLIGCFDLNFSRMHIESHLMQK@DDAAB4C?0?NLMOPUVNNPURWaaU:3WP[\RVSTX,..4\YXX_Y[b]Y`\SZZVTV\VY0_\Y10/01232//0404100`YRI;G3?POIJNKUWNFOB37<<6a;1^74[\XTTJ`1_[^]7ZHUgD3;"3.(.32+.6@<67758654467882341/--)*))&FA<"#$*+/.0023.05764667 ! !!#$##"" &(5,)'''+*()')'"!%*'%$#!#$"#%&#$#$(,,.0/1-,-.'%-/0+QM,Z3dfkj;?:><:9:0+C1CHTXWOYYJEJWJ\[C]drOM^od\i6B2:EA[T99=65:<;;DDORNILFLXYC>ACi@:88;;9q-Y286?EOWDADC=<:;eOGIIEFWG?PWo4QX2V,Y+WZB?86d51131$**.1#25-12#&##!"')/!$%$"%! -; 5=!&%*)22@#<-67 *'))"",.!!)%*+-,*+0(//"++) + /!6/+>/;95M/2LO`vrl»|~|½ȿ0#" %8%,9)(.:)#$ԑП}~ט̤Ր㇅ǢԞҾɼ؎VCgYmf[uwmUa7& E%),,$:ō഼~ʍnedyc߃Ű߼ƆԇΑЈţɷU`r;q{D?>%-@}wrm|ڳ韅ٷن.&+glޔꄀɇZn.#'6;k˖怋r~eBF5C.)5+ 7$3!Oqn<&#%0-1%/%D(,$-)WGQLRC=JLKL&=2=Bfw.7*36060B;Ic>@36343/-.;KQKH=/$);Buoy{~z~`rƂe>-:FPfRUOH>00#$&0..+23/,BJyu@?A~{z|vsdpqtgilbgc`gc^slih_[SZW^_aCLZUKNMNUKJKOHD|}{~~~>A?otyCBDDGKD(G@@??=8$#F?<544542#$! "$&!& "&$%&"()* #%!&)(+0/%2*-$#* +#5"*.7$")-*:*-# (3 !K..8065EDUWD,+JU?!#( %! ?J0E-';0" /""IXPG"%1!+%@'@%!=,"(#.9+*!#   + $"##.;#<#:-095*(/2$# 4    + )(#   + D  5/1"3!6L-7(9661@<5+)1.! +%,#"  D)(,=$+#"   "!%"!!+,)&'2&(('&$%%#! 0 !%&&##!$#$$% !#   ! !#%%" $ '"##%''""%(&)/1+,$*,()'((-,+*/+,2/-1.'+*((),(*-+(-+)%!*)%&(&,+& $5.(''%' ,,+.+( *4%' !#$,+')')*$$%$'&()%%#! .+"  + + +  + + + + + + + + + + + + :9A,`beg581741.0)#5*:9>HAOSAY_jMM\k[Ud4;+1;:PM2.2-J.3555<HQ<8:;7869^LEEA1)1&%,6%'%'11$ 5~~~}~~}|}~}~}}}~|||~ ~}$||~|{|}}{{||}|}~~~}|{{|||}|||}}||}~ ~}~~~||}|{|{{z{{~~}~~~|{}~|z|}zzz{z{zzz{}~~~~{{|}}|{{{zyz }~||}}|zyzz{{z +{|||~~|}}}~~|{zz}~~}|~}|{|{|}~$}~}|~~~}}||{{}}|}|{zy{{{|{z{z{zzz{zzz||{{z{z|~{{z{|{zz|~~~}}|}||}||~}|}}~}}}~}}~~~~~~}|||}|}|}~}|~~}~}~}~}~~}}|}}~{|{{|}|}}}||}|~|zyyyz|{z~~~~~~zz|||}~||z{zzz{{}&}{||{z|{{z|~}~}|{|~|{{}{|}}}|{ +||}||}|}|~}|{{||}|{{{|}|}}||{z|}|}}|{| }|}}}||}}|{|}~}~} +~}~~~}}}~~}~}~}}|}|}|}|}|}~}~}}~}}~}~}}}~}~}}}~~~}|}}}|||}|}|}|}|}}}|||}|}|}|}|} ~~~}}}~~}}~~}|}|}}}|}|{|{|}~}}}~~}}|}~}~~~}|}|}|}||}|}|}|}|}|}|}|{{zyyyxyxyz{z{ +zyyyzz{{{z{z{|||~~ ~~€~~~}|}~}~}}~}}|}|}|}|}||}}}~ + 숟̳ڔ͠ƭȆ刦Ô񆚢ƒ喝}Ȼŵβ娰ZfUUZbcc_[VTPKKRYWTUKDEIMMMQSQPNIHIHECBDDJKKIHCDGJHFFJJLPPIF[͋ɉا߃sRJE@+E^Rku֠Ѕ橷|ռZv3V;p]^8=XHcXIR8*D;CGO7jVzoE/Ke.eR*HG5<#F\g:Q=zdRעґƚοPGKPgx}nfJh_삄~F*7IR*X7J$&;UD,9&<>7[h',je՜m>;T9GZs]WrR?SbQgfVCh犀Dc__D61BA888i5DVy퍛ԥ⚍嚄ȉ薬ΐҔݮӏ哂膲򃁖˶ŀ̊ڎ𐫢ށčǛޥѦ㬭ퟄϪܮ򐤴ǿѝǍɻwjA^٠t\E89_;:0GqbG::<@XMFk`׎^4BUͬEoڧŌف̸˜+7899:989;;:89:9+::9898989998:9989:877998:9889;9988989::;99:9!89988988999877887:;9:;:98:989899;:9:997999:9::;:9:9:999:::;:999::<;:8:H;;:;;;:89:;;:99::89;<;;::;;<<;;:;;;99;;::;::;<<<;;;:::9::<=<<<;;<;::<<;<=<;9;<==<;<;<==<<<=<<:<;<<<=?>=<=<=v??>><:<>?@?>>>?>>>??>@?=?>?>?>=??>?>??=>>??A?@@@>?@BAA@AAABBAAABAABA??@ABCBABA@ACBCCDDCBCBBCDCDCCDEDCCDEDDEDDFHGEFFFDEFGFE@xѷخܔ߱ǻѶόԞ҃ƕйĺƣǼԵԻ넉ռüߌʒiQ-/1O///./0//./000249?;;lYtf颬ڈʹy>33111-)Aeƭw86456555676787779977886\fûĶùˀҼ¯ŷǣƳ鏔↡ýɸôߺñш񄎑ʾۀ攱ӿ񊏘䧦۪ý裦εϼӀЕשʩȃ۹­ʟř߹²ደһ߁շۺĻĸŧܤӌս∶ٴȝշه򩢡ߏޢ񞟐ùπևެטŭݻϽĿʲѼ逃遆㴔ǴǻϽֱ¤żu庰κ竫݅˻߯ހ̋䃋>BDF:WXS1=QFnk?:b99<:47;G`ME9(LLOBKO=5]5d7>?:=A?>=<:7:<<<:9:9:8644303>JHHFFD@>@??<8:9;=9769<<999<>=6_\VRIFLVMWKTRaN`qf^_h[w|x}rkkorprwxvyupolmkmpqptuv}qmorpppuwzXK@Q.1)ON-/167;70.37(3%(-/JMP>0-DA(CF0pN|[[(BT)"Q;CA><.G,3auoxߐ|҂~t每h\fvuhuWY]~m[]Qe}ouXaxP[Q6P<*Z>;6>217:AOXWhs}jT~kgrPyzT]jlx{~Wc~Utrkne}!XybSt`xwuZRfTYo›^uV@U|}qȞ|ib_f}ukϧfJ1HU`*i@ՍejŦ]VoF@;5=NNjntsj_so]XW\xxTCQDbLNT\//D('=FFEygyMzWY`]nJm>WdeYT}fXZKVQPOK\Oob=g8P@7=CqC`@Ia>AO^ozllB_Hnyri:06D\HGK.^GLhnw[bA'&E88?;+>@L-+-/?7;5RNB<)+RXAW(/H;L,,$'482',213=($%12=1E.a9K]qťmbZSRcwkag^a@jx~}YJzolrpp~~{kWjHoq䨦w{PqͣS;pppqpqrqoqppopqppqpqrrspppqppqpqqpqqpqrqrrrqqrpqqrrrqqrsrsrrrqrpqsrstsrssqrssstsuvuuttuuuvutvuvuwvw xwxyxxyyxyyzzzyxx{zzyyyzzzyzz{{}{zz{z|z|}}|}}~}|{}~~}}}~}/~~~~kφōS^>9:><;;AH5Ypn=87/3-[0XP@6FZb\aWTDA;HFCB4@OMOLN(&%&%&%##$(-413239<><=:CDAB$*''*+E?\`N#OR;>\rt[[Z[]\[]]\^\^_adjaahw~p}{{w}xlqػyxvzzur­ijf_jeƮ^]YU~}zxz{z}]ieaccfejeog̶Xghhhiih kkjkjljijkkklkloҹ|gp}wxx{z~{|wv~~|yzw~y}}WXJMOPMNTSUML~KOxzzl[[]ep_gvnhdmn_g[hjZZRV|ZMJNNJGNMKx|wrKutrrrmjhnjmcieou=@><;;;:<;53598CED@84DLJGJPMJMI;ARMHGA?;;969::<8:9<>AEV^FY[YY[VYe769b^eBC93-../_a`c]_d3``003a^_\^_[ZTR'*,)()*($,,UQOJHHKKGIO%),89843470).<50.*$B"#%1,(!FJBA=?=9AC$%&*-,(03.**)-223+,48:7;;85;@;Mxmslup`RKQ=uzy}JJQQ=8--(*KT,%,,BAJET>@FJLVSGVP_MKPe>2K7RZ59D)#):31.Hiqng]n|:&+#&?xZqd[k{mNM\`gX8..'$!2.025beYg`:G-<S,,61()-,+(' #"!!""-''&/,-.-+21,1O)S+0%F>IMTZI>U@IDFqMmTMWib\)00. "&)DXjroOWuO;r^XUxwcqb]YP^aQ?-1AA:638925,:Z+>>3,1Z>>Z_8J;2<:9*.05:5552232244621251022ZUY/112120/1.//223321.10/.+./WX,.+++-T.+,/2--00//+L:5CG?1E023.1+MK7.169W8A-34431155.110.)OKJKJPQMNONMNOPMPGKMGKK?BCILIBDBDAFHE8NLJVGSCJKMJQGIKIHAGFHFHCC<+6MNOMNRRKIKSRV]\GI?KVVUW]VT-/-W1ZZUW]ZZ_b\b[Y^ZWZ]_/0^W\00^^02010///2-SOU04T?06CUTNB@KOOQQNVXOJHMUHRORYIAQULJELZ0TTUWLSO>X5TDRPC>@GJA<4G@9C55336;<=<=<:9876341/,,-.,)+MGGCGF ! $'(-//-+2443327< !!! (!)!&'##(%$(&&&**$$%&''&%&%&'&$%#%%# $)-.--,+--,*#'/.-R+/;2gi68@9;@;?=4EK7;ETWP4AJZNC=:8=;=;W46>@CLUQCM^oobZW`PNS1E/U5:66=7!#$%-,&,0@;" 7 '(&+#!"%%&"+2!/5 &('.:;C.":$&&-!#0*!!"*('& &*((,,&%&045-&(+''.%!5--,($"'-(0(--IRG٦Q\3&.Fffƀ𳝘>%0'5)(.4".' ++ (88* 18RG+)I.$&%1."A'4.&)VLOQf9V?:;K.+'4d!*gk!6!4*-2YAS(+12EE>KJ'?1P[@.%a654E  !$5  63/" +*%%5C?&/  +$#*'   + +  +  + + + $1):RǾ`L,%/wߝ+09Pئѵλ;q<Уؘgdñf.,"7'Du醺rĽ¾¿Z%ཁˬUX140.-,-3:,Pkh7.*%(#@$HB62ETXU^VV?95B>=<)'7YHDMHF=73qX┠lؿ~{u{hx;730'')/0*3214625=A;7,(-6)".D7/.4E?A?8!#((-,)'+,?Lyn<>skwsker@rjhhfga`_c^\TUNUZ..+)('''()&%&((.,-)!(.-,,1/01/&+60.1/.++*')*+-))*,..1@D:PQNKIBGQ)(,NLR3/(%!!KNPQKLP(JI"<>@>ADBEA? ! EFD>6435221 !""'"."%$"%%$')"'(&+*'&-3..EGVV[Uf^2bS5<3/2^We650-.232;8>A847?KOG1?HXM?:85;9;8R0289=HPJ:3=<><<F@H@@49!(/881,+-#"#.! ~Ɓ~}|}|}}}|~~|{|{||~}}~}}}}{|{|{|{|||{|{|}}|}}~~~~}~}~~|}}{~}{{~~{{z{{}}~~|{|}|{|~~{{{z{{{z{{{z}|~~|{~|~|~~~}{zz||z {~{{}|{{zyz{{z{)|}~~~~~~}|{|||{||}~~~~}}|{|{{{}~~~'}}}|}~~~~~}~}{{}|}~|{{yz|}~|}{zzyyzz{zzz{|{{z{z{z{}~{z~}|||{{| +}}||}|||}}~ }}~}|||} +~|{|}}||{|}~~~}}|||}}|}||} |}~}~} +~~||{{{|}|}}}|}||}{zzyzzz}z|{'z{}~}~z{{||}}{}{{zz{z|}{|{{z{~||{{z{{{z~}}|~~|}||{{|}}|||{||}}|} }|||{{z|}|{{{|}|}|{|}~}~~||{|}}}||}}|{|}~}~}}}~~~}}~}}~}|}|}|||}|}|}~}~}}~}~}~}~}~}~}~}||}|||}|}}}||}|}|}|}}}|||}|}||}}}|}|}|}|}~} +~~}}}~}}}{|}~|}|{|}~}~}~}|}~}~}}}~~~}|}|}|}|}|}}}|}|}|}|}}}|{{zzzyxxyyxxxyz{z{zz{z{{yyyzz{|~܀ ~}|}~}|}~}~~}}||}|}||}|}|}|}~ Αê̝ݼ񻜠ׁٰ┥ƢՉíɜ½óܐÈ̷ogPQSWVUTWVTTRWaeYJ>:><>@A@GLNWZYZZ^fi_WTNKIHHIHIBBGA?=AJOLLKIR㊖ސ؀Ȋǫ屛ȖʚՂpZRB8A҉Ǵȏv|r-WK_?YlAJH[Y=-<4H=ENjjkGG<:=L+=??S+TEaAI>@===<=<;;=;<=> <<;==>==?=J>=>==<<>=<<==?>>@?>=>@@??A?>?>>>??>?>???>??>?>@?>@AAA@@A@A@@?>>@@?@??@?@AA@9BBAABBA@BABCBBBEECCBCB@ABBBCCDCAACCDCCCDDFFDDEEGIFHFFCEEEFEGGHGFGHHFGHIIHHIJIFȴТяîހۊحܴŁӰʾՉЀLjžãˬ񁅊ƶ˱˜O+.,1Q/.00/10/0147:>GQ`dknpuĴЇ򈋞г̪751./1\Eή^ohE5 787547657787867899962Dȳųſ۾Ƽѻۏ̨Ѿ懠ñʷҺ썕ڍ򍇆󆟯򂉥ֽƹҬ˦ߓǸDzò˖ǣ˜ʹꏯۀҗ걉ײȘ⳺Ԯ؎᤭ٿñ떕ūϪᛆҾݯ՟샓ιſ·ʳǕ捑ѡԶ󶥧ȝ둔ۓºŝ붴݋㺹Ѷܔʼȼɼͩоϸ׺ðϽͻǰຸ ԬΣҝʥˠ񆓓҆p弿Ԟُ߉ɸطʨ󍤀=DDE:Qf8`:9K@:;:aYTgEB2561OAUM?DP>6?>FBHLH3T5;;7bh9FSG9O_=[EGRY=DIV@T4I7#M3UXW.VCAHLLOUPVY38<:1af`08a1]158:77;>6213`Y2J3457A4$J=C>B?<@B?=<@<::;<<;99987:785`2EGLHGFFB@?@?<;9:?<:8:;;?=>;:<<<769aRNRaB;dx_dŽ{yv|}|rgdhefgiiots}spslikpyFKIH,/..,***.366257987H!@G0FC+d68>5,L=Kejop2K@"+wVRD4X9TVIHf^K\{^NfseleX{b*KNNXFKm[y'Wc:$$\LYKWi[F?7YaIP7uQ`EyUo]!)lx\YwW(&1>-,@&/P934D>*7)>hEGAQPA,;<6FQ]}pHL/J@E2.F8.<89))+0@C@L?4>;D $7*5e]&L7 /G]D=?79laOYJc\73B5Ajׂm^yvwvxxvwvuvvvwwwvuvvuvwwwvuuvxwwv +wwvvvuwvwxwv'utuvuvvwvxvuuvwvuuvuuwvuututtstsuststutstrqqrrrqsrrrsqqqrqqpqrqrqrqqqoqqrqprsrpqrqrsrqrqqrqrqqosrpppoqpqsrqrrtssrrsrqrrsrstrutrrqrrrsrsstsustsErssstuuvuvwuwvvwwvvwvwuvxwxwwywyxwxyxyxyywzyxzz{z{zyzy{{y{{{|||{{}{{|}{|~}|}|}~}}|~~ }~~xxU;A@@?<>>=<>:EFvseg3MMMUPE9.H:eYVst>>MQKEH`|F}ozPXI[wjjyiĀidkbi_}vez|wzukbjkzqHB:7h758CC>2/?JJHFKOOLOK61151/1deb_a2_0/4;3`^`b82./*)-+)(()),.KKMJGIKGBGL'*0016887322643042*$A;"-*#0$CFF?A9AEJ'(,.,*53/41/1-10*,6<=978=2Z:3)_oqsa_}at|]&}sg?grFDB0D1:KsGXw{obSYHBZB-%!8gshzB9P6)0/C>@AB3;8O:?BA<;697833267K;R-UHPRXYLHF67:;.,/486988452/2221122WQ0@P;V.0/20-0..-/221//0-R.23..0-W../-**OE/-0-20-221,.,TNP9;=6.-2.2-@;H?9/F=8OG3643314414211.*OONOMKPMLMKHGKMKIKMNS?BCLMJGDADEBBEH?HGMO>KCVNEKOJIKGMQJQJIRF69/EOONNSMKLEANW^\JKOCKTVZW\\/100]TY.0]]^ a4f]2^11[Y./1_00[Y]1301a2252/4_Y^bCK>VUUQNFOMHJPRXYLOAL734-DECBBV@>O[L>@&2034=AA=<;852100-.//--,.230./+OI&'%&)1/.,.-136524321256.+0 &=-"""#%$$')$$''&$&'%&$%$$$%&&'% $)*0/-,,--,)?%-/++0H1ad637>9H=8?AKCD:LV[[QZZ\CH6=QY:BBA`W;OP70AWE;RA>qi;<>mek7?CCMRUH;>9WMKD:F=Ldn?]CNZ^[GWNUKOGG=Kbce;G%##*9-(#2/-:&"#$%!!!$$/48(-%.7"3+941!$%0 '&%%(&&%(&&)%('2650)+* 5 -0'%&-$'QrelɰĽúĽŐ$ ! ('&*=Qgj+$+*)"OѲӡҽ]khq{pum{ɻӅѠ۬DZرҥ́ͧ϶Уm$WfapsueV2 (,9$"1ĹשԨδӮ|Өxg}阡䆩Ǜͺ˖Დ酨tk~\nQLe¥TVDT40*$.Ept`spt뷸ݷoP$-8Pkͧȹ8*."%+{G$<㵍hZ[*3',33A( !<4$(11 2.:1+2: :?N=,.!7A4.<&$J24(,$%1;B2V'Yr(7@Sy/05$ G08=TV8! &'+4Q=;)NC]AhHI5#2# % +  BXMD*!'&*"  +#*MG,  +    ' 5)  +  +  + + & %&ng5)*6aݢƻʗ7t|A6rٔݟ̈́gJ4ni̓5}jIъ!"F 8<"\|¾0Ԅрެ۲э٬N25120/110..+1?knZV)=>=DB<1)C7aSU}m77HJD=5>J2cUS8@6^h^dݍֻsýypznqj׻uzϵz>88`LFYMMNP=60-,).+*0747::6>;jmloekrD`igcb^[\Y\\\ZXT-0+)*)()'')+'I'%&.-)&-.-*+,./30',6.*+,-+,.+--,-*)(*,/0=:@HOSRLEIOR,*'(OH0/'#!"$)SUTRP)N'"##<<>@$ !! !=CD@:522011 " #!*$!$""%!'),"$**('(,&D0*@2&)* ) 2('"&/$$8)"-*+%"&7 )'*,#+D%?9H72?;J=?>?"25.#&7$"!5#?G7    +/:,2(.!0%%%)#xCK#$I1=  < +    + !La*EPD6A'&!'/8  + + + +    ! +   +  +  !-$". (&82-$#!&:'487G6BFT+>+ ! '# 4),/[,  & +" &#''&)*"$!'%)("("%$&"!"!!!#"!$#!!  !  #!# !!""%" " !!##$$"#$&$!"$).,$#) #'(+)-+,'*,,-/3.,*).+*-.@0*+/$()'%% &&"$)),,$%!!$&%%!"$&$$'%%"#!$#*#c ,! )/$ %##/3300-*'&$$&""%%$$$'(($"" =6 +  + + + + + + + + + + + + + + +  + $6-Z[2/271=2-.,0,2/?HJHAJKL6;,2AXR@=\W]ajb98MX6:4WWph@?:4/Za2:9=9WT8EE0,=QA:P>=sj9;;e`b4;>>ILO$@130JCD?7B8?@< 0!&-0.!)%) " .865$~ ~}|~}|~~}~|{|||}}}}}~~~{{{z{|{|{|{|||}|||}||}~~~}~~~||}~~~}~|}}||}~|{z||~}~}~}||~}}}{{z{z{z{}~}}|{| +}~}~{|{zzz{{z||zy{zyzz{{|~ }}~~~}}|{|||}|}}|||}}||}{|{|{|~ ~}}}|~~}~}~~~}}}{{||~~|{{zz~ }z{{zzyzzz{{z{z{z{ zzz{{|~|{{z{zz~~~}|~}}|{|||}}~|}~|}}}|}}}~~}|}~~~||}}}||{z{z{}~~~}}|}|{{{||}|}~~ }}}||~||{|}|}}}||}+||z|zzyz}{{~}{||{{{z{~~||~yz|{|{|{{z{z|}{||}z{||}{zzz{|}|||}|}}}{{{zz{|{ |}|}}|}{|}}|{{z|{|{{{|}|{|{{{|}~ ~~~~~||{|}}||}}|{|}~}~}}~~~~~}}|}|}|}|}|}|}~~}}}~}~}~}~}~}~}~~}|}|}|}}|||}|}|}|}|}|}|}|}|}|}|}|}|}~}~~|{{{|}~}|{|}|}|}}|{| +~~~}}}~~}~}|}~}~~}}~}~}~~}|}~}|}|}|}|}|}|}|}|{{{zyzzyxyz{z{z{{zyyzz{||{||ڀ ~}|}~ +}}}~~~}}}|~}~}}||}|}}||}}}|}|}|}||}}}|||}~ 􈐛͟焉ےǼވ׼ሧڙӴױμꜦ¬Ĺð؇JQJLMIIJNOOQPS]XMC87;<>@@@GORQWZ[[\][XRRQJEFFGHHFDB=<:>CHKIHFYجƓ錫ޞэ‚e\XOqԧ哨̱牅臀Zz؊f>>g|yllC\tOedN83C35NOْfO5>GF*6O4-V/b6T::M]T߅􉖀̎ڭ}cVVVUSMEB\j7fVaQw{qkni];,J55\?+37>3KP|&@FBCT`Y$QGr8N:lyNҘ픇U2DVg9cݾҞƒɗԃ㪘݈̭R568:;:;9:;=<===<<=<<;:;<=>==<<::;<;:;:::<<;: ;<=;;;<<<; <;:;<;;89;;<;:::;<;<;;;::;<<=<;;;<<;;<=<;;<;<= +<<<==;;==;<=<==><:<=< ;==<==>=>?===<;;=>===>>===<<<=><=<=<=<=<;==>>?><=>?==>=?=>>???>=>>?A@@?>??>>>?><>>@@?>???@BB??BEFCAA@7A@>@?@@AA??@@@??@@@?@BB@ACDBBA?@AAB@AAABACCABCA@ADCCCDBCDBCCEEDCCBBBDEDDCDDEEFEEEDEDEEEGGFGHLWWTLHFFFEFHKJJIIHGGGHHIJJKKIMQSTTּΤӄȡ݄ڀΦ悁ͺڽ·᧳ڷ»Ȩٺ閏ƥX*..0@-/1/11200249>GQYizep񉑕ñ/͉D7/Uobϰp~a;55668776798777666567786Igеüκʺʺ̀ˈږĜij߆炙ʾµķ舗炇뉉恞®ǽǸҎʞՙпدޒ׎ǎ֔銫䀑ՁЈ٥մӱ𒼄ᗞꄏӅѶîシڭ󋍡낀·իʷ殼ܖó򹘠Ìőτրهʮꢲ󘮂Ʊѕ˔怌ҁᅘЄ¹繭ַă󗟚ɵŲɾ˵ԺϷмΛɫĺހн񅞠䎐wзȼܫÿԋǻ顙ĪN;7<4;@8O9LI:A66F@Q0/.)1L52>PK2]V88668;>AA@==;;=<;88899:9733;BHIKJJIHDA@<:=<:;:9::<;<@><;:;;;<<<@<59)/K.SG]ZQ]3R0P<-`5c1MR,.2x}jݺN]lxdto||~yڙvkk|tuc]dxۍrqs`ybacL{e`Zvwmx{~nTP7HSH7X65G:G2.402=N|}zxxtkc_~uWpfuz]hj»kv\b\Tszg$'Yi\5de\zLXzRtK{}gz}iewn}ĺ{r{jhh]hw~|ʩwvnx~zՓfL.=3TJMGy~TzډDU74>A={vX`cn^syvu}Z`XVfT?MwfZITT'8q^eQ@NQvPA?:(1,!;33.bQdIE7CPI?859.ySN!L>%C*2,MP18A8/& M=2-D38>93P8!($)8@5/0,%?)$&-2<+/& *54<5JW>L06u{qy}A9NTztcxuyPтbzwwrdavff:hDYeĭ\񩽸mfW:R]oacBWXPTb_\P),C<⧭zwvwwxxwwxwxwwyxwxwx#wvxvwvxxzwwxxywwxwxwvwxxyxxxwuvwwwvwvwwxv.wvwvvwvvvuvuuuvututtvttsutttsttrsttstssrrtssrrsrrrstssrsrttrtsrstssrqqststrrpqqrnpyvnkqrtsrsrst5sttusuustuvuuuvuuuvvusutttuutuutuutvuutuvvvuuvvwxywwwx'wxxyyyzyzyzyzyzyz{yz{zyz{|{|}|||{|{|zz{}||}}}~~}}~~~~~!zvuT=<<=:>A;;=A?GUik]U1VC40BFP7Bc]XxxnzOHCN`>p\ex>@XGbmn~_iacQjVrbturkjniug>][fNCYPNP]IRQUVJNQP>NPXYNJJKFKHCAC@5KPBIGCJHAMNKI%$#%$&()*/%.06@@><=>?@E$%$$(*)**DFwNv[`>;d\ZW{Z\[Y\\__`adinyxyxzyzǺxwuthaZjjkssrngpmomvzxzqskputsyvuz|cfceku¿ͳonhghiijijkjijjljjjkmkllkjjlsyūĶyx{t{}\FLQJFOOOUNGzquzXXU{qttsz{xZU`ejbXUNJDHKGDyuquxIxtpgd_ffgkqvt:;9n9><:97::96i66;B6-,5>EDGJLKIINJ?BOMIHCA<;;898:;::9:>A?x[^dZZ_\ZX\cm796_W\5:445536jfda2110..//.-]]//054-0+)).+(1XKMKKK+*MEH&,,++,7972/775*3;10$$"&(*-/.&#E@A;OZICP13A]U/,/03,55+'"+))(%)&$-"%GMI((#GFH44=@@Qbu]leqUd]0EKKIYQdkqRQMuK\>$*7Spyd^J+39[;??A=;884595;77H$Z4SYOO-Y,J<3>98:750,5763252441050PTQN?JS&/OD.0/UC-43//1430--00.-+650,/XT+,,,RF-2031/200,0020,QL:8=1J1N+/PK:6M;88B/QM4644345635101.*))QPJHLKHONFLOMKLLNOJDFIKIIGGDDJH@BILD9LOEJOTHFLPNHCDMHEKIKNILMOEKRY[TODPMQIHM5L=G:64R8@DFHSI?'0!""#"&$#$&%"#%$#$$#"!#%%&$" #$&&*-,+-.--+$+--3<0f4539@=F>FLNH@F?KRZ\ZY]aKB:BH^[IAL\VQ\dfB^Y;SIAC>t>@A=@=95^68>@`i:RF:BJKFq=@;uq=A@;9:=@EDOXUPC>5<3ja^uHatoDXHA<>CPMTZL=32.)4&&.22!(&(%(%"#)*0*0()  +*!"..0Uѱý¿ۘ!%%,+^;P:<#/(8&A!!‡ռ~DReua}pzjyz܇ڑ䮩ҫ͗ٓП쏬̪ؐթ҈}9[\]\]ZjD-)*%&&;Ɇ긟́okshuymڨĤͬüŷ]HQmm=Q^PK01O-,@ZldirlÌޢ}h+7;Bc{zjޫh4<+!-wJ+9uDh좚€g88/*,'#/S;Z<)5%  AM '&L(964!K++*9(@g&""F6*.C3&""KF)!3bA+)50pB:33?-^@LbA* K$%3bME1Ap&lSVCm<%&6?J1!  CXa8.7%%% 6KV  +   ($"  +     )]bҤ4*4;~իuXa>B0PVbއщjDO,Nr^aBp13Be$$kB +! zգΝ„ƀߠֹՉmL52-.,02./0207L_gSI'E7**:;E3A]ZWlnwIB97=%B8AK'(:;Z\sڑ̱ivnoWsayqМT{ʦm8UVbJAWNGHU82/0/(,/."118;67;A;61**2/-CA1889B?8952.!"%()**0]6|^Hzji]5+͈͆ޒ~Ź{wtqga[lmmtvxxv}wutႆuvmºy~z|.`lқڀѮƗֵҶķzz~]ADFCAIHGKC=||qqs{zIIE}|||xumsmddceppmt}|xxxrRKOSWTKK~}~r~~~~A>vop7:;75jgheki?~kgc]\U\]_ab[S++*Q(*(&&%&''&K%&(,"',+,*-20+-5300//-.-,-,+++-01_IOUKOSLHHKQV*)'KHL*,%#""&,[ZZV)&('$ 99!$" %E>B?<6645!"  &$#$ #'* "!(*%%(*CJ(&2927,:8 "% (5/%//'!%(4)#1F'8BEGFG?-3%" 2B4CJ==7DCB%!;*08& ')0$&!1)+2=95( !&#%H)C3%!'-O$<:*.I;`0&!7# )0%$!;A:H8>BDG9>+.$!%3$;4        +   !(0$)&#6%;9."*&B?0R?C5<+C=. "#'5/!''  &/:5[ /!## s'# !% +$)$$(!&(%#")%&($%$#!"##" !"!!"" "  !!  " ! ! !!#!#!$$"#"!" " *$$"$$%#&!"&**(()&#(***-'*,(.%)(-.+*.#%&'""%&'R%&)%&#'$%! ##% #&*)%$%"&"!#" &!#)#"&%$$# ,2..11/--.,.*)()('&$&(**,&##   + !!  + + + +   +    +  1,_01/392:25530*20;AHHJILM;5.5=RRG>J[VPU[^=WT7?7;:oBdDZc7La3D1ZYwʍ޳̍۝n`cb^_[b]PAcYfby܀ȓu=XAAf|AGE:75Edc%EV6FC[N5<`<=ZCv⛮d_󪸓ɰzk|{uփфΊ̋Q]˘񘅊̄ԍࣜṖ踸˲ıނλփνΗ΄֬ؽػ܇۫խʜ󪉕ԱϽई԰ŷúʀ鹬æLvՅXƺǮRT2S4S.A,ax\;A뛚sxGdjtOLo΢Ёֲغ򍵦ŵѵ݀31;<>=;;:<>??>=??>=<<;<:;:=>>@>;<<<=><"==<<;;=<;9;=<<=<;==>==<;><=<;;;:;<=<=<<<;;;==<=<<<=<;<=<;:<==><=<=<=><<<= >==>=<=??<<=>=>>?@/BAA?=@ER[QMSTZ^WJA>>>==>>?=>>A@>>?AA@??>>>===>@?+>=>?@@?=<>=>?=<=>?@@A@AA@>=>>=>?>>?@>>=?>>>?R>>>??@@@BBCDBAA@@A@@@>AAEGDABAADGFAADHIFBA?AABA@??@AAABB@AA@ABBCA>ADCBACECBB@AABA@A,BBBABDCBBDDCCCDDEEDECDEEDDCDBADDEDFEEDEFGGDDEFJKMKKQY\WMIJJKJKOTUTOLKGIHIIJMMNMMSYXZXŹª⻚ߕֱۻԀё˅ˣۃƀȫĢ㖼ڧՖިƾγܮ󇎐ƻ󂔟󰀦_*/3YB,0/+1,21135:AIPTW[kƼ芍ꅋ前İɀr7Aeɀźu|?666567756657787;<>@?==;77/kƵعªк킔μؼͿӪʱǷֳ݀޿±Ď扎Ǹ汣ⱞƾ덇Ĩ֠蒮ãޙǀα㧊ꆧ򋹗󅇚╝𼣵Ƽʀ൬ÐֻǷħĶҾŷգ܂仭ԌՇɲĜ񪤾ϙڜȚ󪭟ႉȂ웒̲ǥ𐙕ʾħͽƼҀʺûɳع˭浬؀гҊµǺꆥ톍ϴ笐 Ώץꊫ닅Ƚݦ »C6iggZ>[^899;:499C8\]i6541H=b5YIAHZM/#48aCLCPFYX6904@IPOVY3>af28>Q]AJZW=Cm5#8.,-Q\]TF=EFN\257<;98;5SFNG01344:9:=;67772c8TP5889316@*65D@DM7--?A=<;;86699;:9665:;ELLMMMLIC>=<=::==;;:;;<99;9:;:@CACBICVx{|}nfdcegillpu}y{}y +wsuz|6O*,.065.5886/(45566423783:M(T4EAA+>K_gkMD>7b.OZ@gF$2*+/27=#'-%/2/90Sog#5GViˁdz10sp֫n`LtmvujaWmJk`hf>Dnuő~ͅ]:?7npktԱTsxph<;%FSLԸljzxzvxyyxyyzxxwyxwwxyzyzxxw +wxywxyyxwxy!zwwxxzyyxxzxwyzxwvvwxxxyxyxwwxxwvw+vwwwuuvuvwuvwvwwwuutuvvusuuussstturuuttsrsututtuutsrststutstutsqrplopprpu|qmqotxtmnqtu +tututttsqsuevvwvuuvvwwwvwvuuutttuutvuvwvwuuvwwxvwwxxxy{xyywxwxxzxzzz{zyz{{{z{{zz{|z{|{|}{}|||~|{{~|}~~~~~1~ȾBE@BB@7BG;<@?;0Xa@>Tg[G?nXpRK^pdWkH{}H@c^v<\l[;=c&4qY~jǧ`ieQzIxrjƁzvgfp~`F`^hdOBUJGENGKMONGTXTdUGMNJGIIEGD?BBH>KOHKI=IJHLNKG%##%$'((*/%114>==659=?C#D@#(,.-+?BM?~\KQx[AQf\\z[\ZU^V_``abgp{Ƣxzyçr|yphPbkhfrtinmvnnnmrurjt|ytu|ytz|vz{TYo؀Ƚ¶ojhjjijijjkjkjjlprhcdfimmjn^siv~v{x|}}~~}}CHIGKPSQI{tnzW~qy}}mikfSYebVPvwy||BFKIDC}xux~qxwifgdhienss:>nmn<=<;;;:?;omj5/+*09ADDNMKLKLNJ:AOOJHA>;;;8:8::79:;>A@bQPRR`d^ZZT]l430100126;669kjec2021/.*.530..03846XQ-/4**.RNLO'&''JJH&+'&,3:63)5:62.=5%!+421-++!13!%1%!AD@9AL(+,*+/3655-('-.)&)189;=7ea125+ptwkyWSQjhHwtz[e159>UmX]3W~s@3+4@DF:A9DN>?TonvM1B>:-''+EJ{}sm[ke`Ty+>>XTtvMPAkgu~ZWsdOyCIQROHzq[>>EA@::<;hJ<@H8;R-'+''-/,:21'.-.-&%64*%&&OK>;E?<>:87B?8D> 20(*,* !#%**(-% '(%.20/+/311QRR@;7OHL\_bUKE:;i8JY}Z|ek[|lBjhllYTql^qQgmWUvNDeZuqZOCGL;?H39OQRLcM3+=U=@==@;M=<7,>D998837>8:53.0:PWSSZ/-UK+.442D93318226665442/RL2F33SK6K_@533/R,176123+--0--.46300,./++-NN10220)411/3320K+H+BG3&%]*DGKAWN0435675545/.1-***(PMKQMJPJKOTLMOIQOFKKHGDFCEFKDFEEJC>>>BH4LMCJKII?6AGEEKNJNGF@4TQOORJLOODJ\_LPMQ?TTY]]Z^02]20`\/460Y0_15`3242W055231/211122021Z0]/1320`\YYQPOQGISSQLOMMNOKHEFGB@MI[YMGIQ=?=EGIR^\[XW^XJ@NAY]F?DW[EGYR?aPPE<=GF@=C?EGGD>;::?Y\7C7^>:DUdlD>pr?CCA>>A?GBJWVTD"=63J_ONMH;ARY9]cb5#88:3$55 "149% (%# !+("1/"&+*0/&77 -$14%'2+"4#*,(! !#**#$!,($+ "#')QӼƺùؑ#%"'6CXx[B"%4A'=)5""#&(W_ȕJ@2F^z[etkuKTw~emttnj˦БǴĨδ܉ӡԓҀՋ膙{Oktv~po"#!*&sƼþɈ{߬ǭȿ_]ߊʾ񐊺˴ب‡π62Yqh339OI98214(1BIZi|Κʃ~*27P?B+-&JG?.t`-vlSZvWs]gLX&'('&!1?PvB*fX"=M4)%/  +#"#5G."*!'!#,I84,("-&  5h?)%1W?d2SqjQ]ux)("80 !#=!UlZ>.PiuCFHSC+F9(!*>)/<  B=Q)>.0?7+ +(*F%    +  +   +)#** +   + +  %C:  'Wڳon%bvs̕ŸuSm=2B->M`q[U!;kɑt𬮭J3)|;SirVFΣf$F4AW8!;Vؘ¿iÿEְʅ=<5320*48.142-'LY=;L\P>9gUjMIZh\UhCr}B7F9@"5A4"#='ddӓ|ǫg»vؾoVQutۘ|ڄmEYYc`KBTJ@?F2,.1.*262=6-3565;55ihhkjsqflj]ZYW[[W]\U),NON+)))(((.,SRJ# (*)0-+,+.0.&,7532.-,-.-.-.-*+,,-12NDDGJTQHGFCLU'&%'%&%$$(%).\`\V(%(%$! ":6" &E><<451#"!!$ ##!"(!"++,-,TM'*($#&<. ##( ,"++M7)57;=;G ";HR51,& *04,3/:G66D3200LBE1 (&'/(.36'#&-4# )"-?%,@+@F@FB3 "'#$>- ! " + 4%82TN?4=-$"#). !1     +    !-0/ .+1=FF<2(:6K>I\j`(4-0%:2# ,B?9++4! !3):4  $ "I""#)&&)&"!$$$'#&.#$# ! ! 2 '!!!$ " "# #"!   "  ! "" !""'$$#%!"#% *-#&%%)&(*,+,-.,+--(,+.+))%'$% "'&&#%#""$# #% +,$ #"&%&"$! #l!""$!!*& !$#"& '#&'+#(5&-$.4400./0+)))%'&'+---+,+)%$7+% + +  +  + '   + + +   + '[3114466438:+/,17:BLKMKJNI<2A7MO@=@TWBCQM;ZML<16AA=:B=CDD=53459QT0uu?@A?;:<9@;DOOM<5,*6cdjfA3+$# &2''&#"%375~ ~ȁ~}|} ~}}}| ~~~||}}||}~z{|{z{|{|||{'||}}||}}~}}}~~~}~~~~~||}~}}~~~}~~||{z{|zyyz{|}|}~}}~| }~{{{z{z{zyz}{ +|{}~{|~~}}{{{|{{}{{zzz}{zyzy{{zyz{|{{|}}~~|}}|}}~}|}~{|{|}~~}}|{{|}~{{~~~~}{zy|}{||{|{zzz{{|~}{|{|{{||~|{|}{zz{|{{z${{}~}~~}}~~~{|{||~~~~}|}|}}}|}||}}|{{zzz{{|||{{{| ~|zz{||}~}~}~} ~~}}}|{|||}|}|}}|zzyy}}|{||{|{{z{z{yyzzy{{z{{{z.{~~~}{|}~z|z{{||~}}|{zz{|~~|||{|}|zz{|{{|{{||{|}|{{|{|}|{{||}|{|{|{|}|||}}}}~}||{|}|}|{|{|}~}~}}~}~~~~}|}|||}}}|}|}|}||}|}~}~}~~~}~}~}~}|}|}|}}|||}|}|{|}|}|}|}|}|}|}~} ||}|}~~~~|||{|}|||}~}}}| }~~~}}~}{{{|}~}~}}~}}}|}|}~}|~~}}}|}|}||}|}|}|}|}}}|}|}|}|}}||}|{{yzzyxy zzz{z{{{zzz{zzyyz{z{||րҀ~~}|}~}}|}}}~}|}|}|||}||}}}|}}}|||}}||}|}~ ѕ혡ݪ擒୼ؒւʩƁſ͒Ĉô߁ʍ웦îµʺӊ~|dTONNPTTRSOF@855678:;@@@DKNPTUQMHJKJLLJHHGHGFHEFHHNRQQQOQāןό茴â龴zia耀eE3RwEybmNfhMmLqUPzsQbPYOOC@6t}߸Ɯ䤀˜Ùꨛlebb`txr]\|̒퐜⿷چzitfԨu,s{_hT5FN5=Fbe9F06EGr`N?V=vPBWm=Ö͹򖕹ƦԎگ˿ۓبxEtʋͭlӊǥʅۿڿ˛쒽ՈŇɀ戟ōͭցêπ͇〯ȉàăшϩ׭㉆Ѻ򧍕췓ܝ⼚׍죖Ɍ»銌ëؠʠͰʠùՉtל긭οڝϊ]a݈۟N50?IIM1^r8@lNeyC`߭d`ŴȈϽϠຣŠ瘅΄֠dWB>==<>??>?>=>=<:;<>#<=>?@?>=>>>==<<==>>=>><<=<;=@?==>=>=0;;;<<>>==<==><>=<=<<<=<>??><<=??==<=>>===>>?>=>?> ==??=>>>=???>@">@BCAA@BEVWKINOROIEC@@>???A@@ABBAA@??>>>@A?@?@AA@?>>???@@?@BFIKMQRIDAABA@A@\AA@@DDCCBB@A@?@ABCDCDFJIFDECBDFCBCCEFEDCDCCDDDBCFFEDBAACCCAA?@BBBCBCCCABDCDCBBDEDBBDDCCDCDACBCCEDFEDABBCDEFEFDFEFHFEDEEFEFFFGGEDGHHGGHGHGGGHKNONLNPTSMLNPOMLOQPPPLLKLONRQOOQRPRBɿƀгêЁͧޣ݄҇׻ĈĨքݍĘ⌽ҫŽǷùҧ΋〺ȝR03SK.0)-2T,1348]ſŶλ˱»ڵ̷ʾ÷牋ҸЀɯźרνؾׂ߰䃐򄐙ͼĒ߂숔呡񍗔򂑖¹ʤ곑ڳόϥ˵ଋȯܑΘ੡޵əׇ̯Ĩɖ個䮀ْǺҳрë냒΀ֺϰǸ۽ɴºۿпùꈵ֜ ⼔تLj񷋏ˌᛎ肋˾ϓͺ나δ˺лý԰ϼҭƾɼ´̪Ѽӫɶ͹ǾĽٜӯŀ愇xȴھ议ʛᗧκۭ̎߂ÚC7\\bV8MQh847c7>II7e\g44:)B'"[EC8;FCBCA><=<9:::988688:>EHOSQPNIB?>@?::;><==::<::9:;:;<<;:::;;>>===@?@CGe@]qi~rmd`aaabdgqtuz{z}|yAUU+,,.21.26:655747797333755#E'(P327KrCJZs~Lz\D=aReSIIVWLQSUULQz}vj\Og|ye[sZvĹtqx쏭vak_q{ghsb}ٴ{ha|ukʆļoxb|Ȱyierg8CPL.F(F-G4TpA3//56437op{psl}`tr|z2L~pyW{f[jhhjwTr|mfYZU|҇xki[Gcrfghpns{|a{͒tʢߌײL,)3,:'͒o~Xa&[U81M :-JfY\PNMyo>6GTo^_ct997TBggqae}aq}RTt¨et,8g33rCF^PSk&7/Hczhz(L>)4 vMCZ_\ZufSZ_m>CUITe`pywz{i>sbfeglyOZWmrXnP_xZ{[9irYpK,"1YXb2"2-,'7u|v]syQVJbyLVT+6PS7fvU)G))4-*+)*&AR)O/8:@EC3S/2;JJGP-#=:8J9H1AK8"4/4=5)#*//-67*9+0E&342~|ckb`wbHXf}djדnkmkbq|Satdzsnzl×yʧdckXIwD{Dz}23TAɋ~yyyzzyzxyyy?zxxyyz{zzy{{yzyzzx{z{zzzyy{|z{y{zzz{zzxyyzyzyzzxxzyyzyxxwyyyxyxyxxxvwwwxywvwwywwvxvvuwvvvuttusuvuuttuvu,vwwuuuttvvwvuuuvvspmjjlllopliroefinqpnrtvvuvuvuurqvvuvuwwvwvwxvwvwxyw%vttsuwvvvwwyxwvuuxyyzvwxxyzxyzzz{zz{y{z{{}|{{}{yz{}{}|||~}}{~} ~~~}~&c}rHj@DCHB6AD>=>>[D[O[`jt_SOHwHOSpni_NPRHbnWF>UNdC\tac>X+#8YOZȦgke]YIvmWpqw~~~eòjfYdkicQAWJBALOHMKKKLJ@DPMGFA?<<=8979:9:;<>?=dURN[ceda_gc420/22125239necb03.00-+*049/02263`R2335)4PNQ)416.%GGE&%#*35)(,/622778+,/4;75-,*+81#.1$?:;9^upMRfre8TZE:@BCFOQQHcaRqL),*7Fvh~S^hEJTRH=7lqYknyMQjjR[OOPL[^L}^V;JataSN^bYQRBH:7@AaJ=2=EHXCG13>),*,/2443.'KR+ &#()2-3=QgQ`aKQN;POF?ASI)BC)0%*,,031373/-20/-64;, %@CD@M7;9BS[0>5<><<=@4+6?>0>A79:7789::1P=%8XSW/01EDJPQ15124/2771.02-58650-VI45/1K1;I@831+*35731./1..UQ*,S+.113/.+-/,.,K./01/02301/11.,,2..TA@<46+MBABOZ.CSZKRS+658744341-//-**'N''O)LOPLPOSOMMKPLHME=>ABCAEGFEJLHA=9=AJ?AK>DC:@>EJNEE>BJQQJ2IWSOSLLLKPJSWZLKLM@NZZX[^]1100_/005322455677962/47523133231232_VYZ^][1]Y\HNULLKLFEOSPMIHMKPI9HOJ?EFIJSJKK9;RH?LC;8753586:=;;:;:::8620-+RML&&KB#$## 993 ## #YM&I5 *,0! # !""&'##" "$%'*)+*+,.0/(0GUZd6758=C@?CL>s>?FJHMX^\ZWVYRC-@QYBHPRNIRSS]STM@E@@HF>qCFHIKE?898`V>D869;qYS/%($92<)&( '%'('#'%+,*#$ "0",  +"!"!   !$3%Y݅Ƚ&%%$$5(4=`jGUPnKoZ΀܂E%4܊vPnF뀃48%$) ">7//$$[{Z,&(9P4J2; )*6 9ABA1AR5#'(7%$7L\#  + + + & $ "  +  + + q_g^TnP4>SeGm]ѕvZqFd͚ܐ˷۳hQy荗DZdR4A0,././16372+-/76=@CGJHC=|xvptx~~z||xtpw]fwuvytypeg`]O?OUUIB}zys|srttwxwvx{wzovrpnl:=;;89gmut8Aoe_b\_Z]Y]\ba.-+)T*-,*)()),,ND?8!%'/1+.,,,..)-6421..+-.+.,--,,-,/1/TLJBMSUQKNTN(%%!##"!$%'-YXWR&'$%$! #8/"*E@=% #/1-##!!%%( (**,/./-'J3!;1-"1$.!' #6*,-&&./6)4(#>/)0926&=L7048;:FKI.66<[7 4-"&BG6?/*"$ (* $"+R /X<#)'"%2(!!"+,/$($&:,!!,"  + !+7G6A?-/) 33,#%5)$&      +  + -8)#./&%!.*;C<712/!(-/:O:;I@9-59*14$ &2&.',0 + '"2%)7 #)''!!#%#9,$" &(%%!'!(/ %)!$& ! !! #"#! ! " !  ##! !$ !$$!'%$&!"$"%!&()$###$*+*)++./)**,++,*, #'"#"# %&&#$"$"$"&&)" "!!#!%" $!  ")###&!$"#"!"#"%&*()((16938:!":5%*7'*09752/.,-0.1542134230.+$ ?76/. +  $!.  +    2NV^24024:767>30/28:@HNMKKKLB7&5EOi?Scug[ơ׿ɡƾϪÆͬឩӆmä۷ꙉ綼Ղ꛹ʛٳࡘ莮ȈͻѪĊǷԎѣ뀍݅숍Ӏ݋瓊˸ǡ܇Ƚмꄎˈīxۧ̕٥ϗhтv[~#i-le~a[vbjisncz`ye槍 ܮ⏍鈑𵞹d5=?@?@??A@@@ABA???>>=>@?>>@?@@A?@??>==<>???@?BA@>??>???@A=>@^>>??A@?>??@@?@>?=@><=?>=>>@B@?>@AA@>>???>??>@@AA?>?>?=>@@>>?@@??>?@B@??@?@?@@ABB??CDCAACCEECBDGBA@@>@A@???@@ABBBA@@A@6ABBB@??@?@AA@AB@?@@A@@AACKZjmo}iPJJJFFEABCCBDEISXOKIFC BDFFEGJRPJIHHIMLDFFDEDDEHIGDDCBDF9EDDDFEDCDCCDFDCCDCDCEEDCDCEEGEDDDEEFEEDCAAECBCEFGGFEFEDEED GFGFFFGIJHGFGFGGGHHIIIHHHJJJHGIIKMNMKKMNOMLKKMNMNMNONQSQRRTUTTZ^\SZS粪سݿЀ¹ֈԭٓ˖ϲзѤþԳȹųάǫ󀃉ʵ͏P^4KO^VQ/5QX4559=BACD{Ċבʼn󐗃숋녚Ӿʚg]6347635787766=iƫrkoϵԱȹýϿƾѽʼ׻󁄀ѿܾ˿ױ³Ǭ폢֢׬ߊҀʹƚ舧ǽþɸ€兔񇎎ɂ۬ꅏŶ̧ݸڧ푿ڛȩŁഡʬՂږ؋ŧ秺ǫҟ饭ű臏ѿ򌝯žŶŸ˝±IJȌɴˀ̑ӞڳÛ􇓣ϒĀϞڅޢ飖ሙߑʶʮԑڈ϶ɽϷŭֶôβƾεѾúϽ˩ǟ֮堣郏΍ʿ~ƞìћ鈈ɂúǏựԍό6ffV`RHIOXe5dd1$ZUDTSELWC1F#('-LiT8.0]Q;NM>5=`_>LR?4RRfd8G[rwLd89AHVU/40SPXUTLX/35:>=:=86^b;^W25878>EHB;8632cO:M877;:6722><4=?XA>,?B9FHECC?;=<;;;:89:9639::3FRTOKJFB@AA>;:<=>=::=98:::;;::;:9;><>A><2,P-<>@AL[GfljisršeCNkwܪyoWzA`|j?fqݏ_qwkZTIUPUkx6<]SrgVvjyi^6&,"@vluIW_@4EC6#-ku[TaIS[EZBl\_tmPSFu[ZbnWMAiJmVQRso]]^VaWXb\Xmq|[kqi?-=v.jKPqfd|kh\m_uH;OYSa-piۥ|`PUBhc}Y^pY&?@?L2=6fLE+Q@C@L-SlH,$,%$Dalz]jKY\QqF7D1*#1NIBLG9Q+#(+867@JFE9/.4IBm/ID,9CSP('*-2/7A.$%!*,-;6-pXPIG%f9cNuKumAiVZxVoHg{wwL㉓a[sԹfuzXr9Lj[PlcvVRVVP$%W@uOp|zzy{z{zzz{zzzx{{y{zyzz{{|{zzy{{yz{||{{yy{z{yzzz|{zy{zz|zC|{{zzyzyzwxyyyxyzzwxxxyywwwyyxvwwvvxwyvvwwwvwwuuvxwwwvvvwuuvtuvuvwwv^wwwvwxxwvvuroossuutpjhfgjnqttutwwwuuuvvvwusqtvywwwxwwxxyywwxwyzyyxxxvwxwxxyzyxxxzxzxwxx{ |{{zy|z}{}}}{||{}|||~{{}{|~}~}9z u~en~e?>?@A=DB>:;;QThfdka>fgbSzIqve?Zkr_Y^W;`=KP]̩p£d_ZrcJlp}v~a}aaghgZTCRK?7QDFFFB>DLJIF>:CGHGHFIFD;>KEHMLQGBIKNMPJM&$$$'&(,/,"586875649=;@CD%$(%))$B<>@BtW>GlaoUW\ccceilikh~ww|kq|tfnmapTDVZi[njfjlhgflv~ra˯v{{zwsq{~rtzttwtllonnmjkklkpsa}yno~npxywps{uvw}zronu}su||{wqurqpowFEG{~LN~uxnphnjfdbcSH^igVPy}zuz}zvI|DJKJ}Mygshtqpldchmw9<=9;8877:8;<==?::5&GDD#%5+CM-.0437<43677;@865/(07,#22%<9C;86B&),0/.5564-0'&&#*Z5jjhgA>?50Y`j`pwSSoŏcaSǶzXigSOKB7EFD3Se:Qm_yw`a77/QnondwgHwPcjiIrbb~ZX|{LBadwhD`RcR\rYFoB84<""&$!" ! "&)'*&*-*/*)(&,,/1540-FB5.IN,G>4B6>IDASQN1`PCSiX`}QfVlEsB[mgvXgSnn>BPO[PlRsPxmPa[64@YT?fyO&&`;CA;<>=,-AB>8?=67:77:<<8,RC37TXM/[*44/3.871C6+-30M08640-3,N@:>A-ESF4P9078885230--0/,+,+)))()O((MNQ)PNKMIIEIE<>ACBA@EHHHJJGC=AGH,E=;=GE<=>GJA+6HAMQS0XXTSQPI3BUUOVGHNILHQUVZ[\Z/^Y]Z0223427;:7;<9921-35224341112220^XZWZW]b^PGGKNNGILNFMORALG>BLFHJGEHJL?DAfA7/0;;=;8;<@?>=>>??>;;<==;:53001*&&(N(JID=9 !" :=B&D?,-:))44<!$#$%"  "  !"&'&)(+./2!0;.3c64b5=>B?@C9CHIIHKV\[YTINSG6BQYRQWL\DKLLQ]a^O>HCFHIGCGDIKLJIA@;\b::k^aaXWR:IA>DJKLHD@AAB>JWRKLKH'4>mj9bjX>6V\\^JBr:F?FI=45IM9M256907.)+.4644""4>- #%)0, '% 74)*&47;7$0??(3"$(%%%)''#(.-.'"#/) #>&!"+#;1ƵԱK$!  "'--ihM0=27-!E#,+50*&!!,P˩ňVrmic]slʿط̮֗Ҋ†¼Ɣӌǘ}Ў{yyJZLlY!)&( ,*ovoovs̝тٷz|귊ĦćՅծȅҹ˼~JKZcgwN2,'*"*mB< %:9Qox;]KAVx귋_}K5|uƊå3q=(&! + *8"#"-;Z[U6:+H9BucM*ScE1tqon9:=?uxpuosAh]fv^kaa^YXY[^,,*T*--*)(-*,,PGD"!  (21*--,--0.)-5401-,-+-+,+--+-/./21WQP~CINRTSWPRPL$#!#$&"$*TRQ++#$#!!-5.-%#@?::0''!/-(!04 #"'"""%%$' ! !G*SUVX811)&((*#+'&7)$MA,,->F*%517M.#/+A'=-3?";+ !?MA:7;6+;=9(?U*.'Q./5;! !J(3)*,SE!$!2 0" +@71@9(#%=,#"03&&-*-&$ )!'! + "%:KFGI..& +$ 20*4622//      +  *( 23(!&!00.9408,+8>,4WEA?. *,?;(>,(/&?$/!$ $$11' + $ 1%"%+!*)+ $V,%#*$%((!$#"'#! !""" ! ""!!    !"##%&&'%# &&#' !'"#!%)+-,-+.*,+0+,)*),.,% "##!"#% $$&$!$ ! " #!"#%$ ! &#!")#$###!%'&)!' ## '24886:801<5/*!$9!%7431047:978656877:54224532.,*)' 720,' +2-   + +  + +     1+-Z21Y056;888/56346@B?B@EGFDC883UZ43`Z]ZRRP;I@?CGHJEB>>=>9EPKHIH@,;kf1ME."/401($<#$$"#!~~Ɂ~|}}(}}~}}|}||}{|||}}}|}}||}|}~}{}{}}{z{{|{{||{{||{|{|~}|}|}(~~~~~}}~}}~~|{~}~|{z{{|{{|~~}~~~}{z{z||{{{zz{{{|~~||}~}zzz}~{zzz{zyzz{{z{zzz{|}}|}|{|}}|||{{{|}~}}~~|~}|}}||{)|||}~~~~}}|||}||}~~~~{{}~~~}}~}~*~~}~~}~~~}||{}}}~~~}|{z{{{z{{zz{|}}|}~}~|}|}~|}|~|}~}|zz|}|{z{{z{{z{{||~}{zzz|}}}|}~}}~}}||{zzz{|}|} ~}{{||{{|{{{z{z{8zzyyy{yyyz{zz{z{{{z}~}|~~}|~~{z|}}|}|||}|}}}{~|{{z{|{{zz{z|zz{ |}}||{|{{||||{|}|{|||}|}}|~}|}|}|{z|{|}~}~} ~~}~~~~}|}|}|}||}|}|}|}~}~}~~}~}~}|}|}|}|}|}}}|}|}|{|}|}|}|}|}|}|}|}|}~}~~}}}~~}~}~}~}}~~~}~}|{{||~~}~~~}|~}}}~}|}|}}|}~}~}|}|}|}|}|}|}||}|}|}|{z{{zyyxxyyyzyzyyyxyy{zyzz{zz{z{||~}|}|}~}|}~}}}|}}|}|}||}}|}||}}~ ɵߌ͝ثڍڑ̇͵ԏɚѪƫϽҹ̂dxttzz|jid]I@A?DHHLPQPNNLLJFGNPU_da___^\YXVSQROMMNTdxz{vrߦΏ֒ДbTbԁ̽ӹͽ]RDTdaDaQSLWIDO~Cb;_{kRqVKi\pʍLffƮ뇔Σ|`^W^gæߎɰ؊biIWXYcfi}V{VP6DNDHhKkE7E5GIxq(9WLVfK_ɋ򾾷ҿի誝ȶʳÉہŅϘp¦݀Ԅ􄈐ۇꏃϛٵǙ΂֢Թ̉񲔵ࢍӼɻؠ㤍ݔǕޏꋸ⍡ញỾ󦂒۱Υ뒮ٰԐ̅ܵѸ񋏭뇾磫⧴ħÀŠ鄱c[ږۼ^t:<;ihnm΀is{Έ︉緃Ǻɘʳc2=@?ABA@A@?@@"AABCB??AA@@AA@>?ABA@AAAB@A@@@?@?>@A7BBABAAA@>?AB??AABA?@AA@AA@BABAA@A@?@>>?BB?@?@@@A@ABCA@?@?A@??AA???@AAAB@@ABBB@AACCB?>@BA BBCCBEFDCCDF DDECCDBCCBA?@BA@BCDCBCCBBDCBB@BCDCAA@ABABBBA@A@@@ABCEEGN^dbj|y[PUVHIGDDDFILNUfj`ZTMGEDEHIFEFFIKMNMOOMLJHEEGFDEEGKLGEDFDHJMPQLHHGGHGEEDEFFECCCBCDFEEDDEEFEFEEEF6GGMHFEEEFGGHFGFGGFGGFFHJJLIHHGGGIHHGGIJJIJKIIJKLJIIKLJLKKLLKLLMLLKJKMMLMOPQPPOORSWTSUZ[WUox翤ැٿнϦĴԶޚӤ̨ļˮп©ۂϰH8wTM:RW8FA_9;?FDSgpz鮛鏰ꎂ慄̀ƫفƿn>YLJGX?::;:6KOIJgkrrg˯ɺǽȫ¿ȸʴһŲȸ燄êù۹ȶİс⋠٨鈎ܒ̹ž܂󊕗ՃƼɸ߅܄©ԮѼʇցꇉ٤ձгҺЭذɏʉŝ撳ΠѨ֑莌ɻ˷πރøقī⒁썕öŹʦ縺нӻ߻ϸͺ䗎ϳ֔݌삵Ħ͇׃ڋޏↃԱţ۔爜ɷ΀̂Ĭʼ܂ݳѳɾƸǀýŨĿ۶‹ւɡޤೃՂȲޅѵܿͭ绺৾툈1ը˹఑X\9RLKIYJ=\:847BE?==25?99]`8]\LSPNWTPG1)-/2G<;XS;RNFIBRZc[*^mZHS;JZ_sRV>=39NK[962JZYRXM[235;<57=;65;2a7137899BC:432cS5:4667;;98756:>8;AI=)C,6;ELIFA@>><;<<<9894379;4U3HQOOMJFB@A?=<9:<<;;:888:<<<:;>97<@;>?=;=@EHEFtyvlqmlintvV+U,-,P*11.242144259:;878655=FM@TL4;''vV˘K5.F2#47@;po\DRRGSfVt{q_{rdpJYz^7,=iZoahPBW``^^^TVYFzG[~lYtA4=(8$Fhnu0RV8phpxsbXyQ{iffRmxxE=LGBPRZ_Yzi_SS>^VKpk\IIx65A]vqF?,L2J;D7`Knx3-#,.$-\hyu^m]_t34M='$+,0NJJ%?/&0(G@C@KH<:080DGA>EBFeZx{yuTLh^dT~|;jfi_cgieczopg4CiX0b`7Gz9TFCWdʠ}pİhx{ewxøzuazkY]b_WRDPM?6SDCBBAEJJG?9<=ABEGHGEC=?FKC@GMKIGIQMKNK(%$#''$&*-,E78655666576EEAE$'(**$#?;>?EFLc@=.Kc_]gieehroz~x~i|pwϦ^j[uLJ]ejggxyemkeqwpekidѡqu}zpo~wzzqryxz~mbqz|onWwûkwroomqrthѷjqz|pá{~srurrov{u~|mrny}xv|nvvvlov{||~w}svwpruv}|I{LJPLvwql_fei`IN\diYQ~~}}xuwu{L|~EIIH|{|L~kho`cedf`bfjq<<<;<>=8c^^9=:9DIKNJHHHGFGJGBCNMFDA?:9;897;;9==>>?>g^XN[[Z[_hgehf2356654231cc8372/,--,.,320-8QRNO*-10/QS.*N//+'('&"")3-((-.+,.74509:87<=8865709'.42%><<66/;$',/014562**%(%+QZmg[Q[+$%''),3-F185[\_VPDCPI05* ".,/1\bN:ZL'*&M@FGLQ<4@, "CK%"#$%$&"!!#&)'+,/)!).86.+"-./214.H=0--:]A?<:@96SM==LE'A@RDl\Zcw|RK[SL1ZwPRqpaIUbV=aiQ^ZSZP}wLkC_mzX:`orsc4$T4>B:9;@7-:FD@>=@8:999:>;612/::FMHAELO4ZF187765361-/.0.,,-*(O),**+((+)LPOKKBCFIB>>@>BBFGIMPOMIHHN->=9GE@:;?CIJB?LFBOONF.ZRDNR:6WZ]^YOMKIRQTQT[[WY\]VWY`aa3889:355642Z123643135753221/^XY\V.Yc[RBLJLICLPOQRMKFIGFLIDIJJIMJIFBBCEEI<.=GCTEB@59@;9@FNOSMNSA;<6>GKMOLJIEEK6I-9A@UZ[Z]ZQ=LNNN[>6GLE\L4P,:059?A>=C?>>@@DABCA@A>>;645210.+(%A<%('IP--::?1(,- 8'$0:767" !!  "#(,.**31245576<;A??H4CJICGKUXZWULOReJ>EMU]NU\EEEDKQ^WQAL?EHIKFFHNJHLOOE9njktB3/4".)(,5+!1"#  /3*1-""$#"  --(&#&.193AB9(.$/2;--%"& *)%'!(+ 1'7  ! "%##$ 01Ak¿a¿mҦ˿ͨ}xc^lj?766209<98:268"!!##%'&%'%-+()#')*.+9M12\%9ރܺyo}x}ﷀ\cXs{LJ^emkkyirvq}}dllh񆄋wrzszxtftvw{R~©ďҚށԀsoty{|~~|}t}~y|}}txzvxyvxsw?{wwwxDBw{CA~xxqnfjtigz[bce\B@LQTIFyxutst}zsryztrrquzttBwrmm9;=>nrslnx@k\\dX]\[YWXUSV---.-/-+*+..,+MHC'&"$(,1.-,-,,.0.+-73///0-..+-,0-./24YWQCLMKJKVUYVQ%!"$%##"$%LQ/)'#$##  +0+* 9;;>;88::=;;;979651,+*(&# '"  ,+-#  +     + +  + + 0/.//01066<98=*572/4:EFkIHHCDC=37BJSHPS=>=?EIVPL;@4<>?B@ADIGDGJG<4kghn@8`YU28h?;<>=>BGDBE>@:EJH=FOK8$6hgଽ߆օƩIOAt^[WWPq2eb^oMGaEISu_dWzcSUzc_Zr|케ݦ邑Ҷ҅㝦had{̶̛c2c3?EHSXTbtv囬׎wq5Pu4DIHigPI7HF1wFKMErWѪȰ¡ ֎߃~x֧Ӄȁ𛿇腷甚ᩅ͐ڻȎ٧‚Ĩężԟ׭Ƣր՘Ԕזˌö熔ӗ틏ԭȿڥǐ萶ȫ需߈ެͰ݈qZ芒ؒsBqFIk[〰ЗUɃZVw\ښΉ塁ی㹈맦E5>@@CA@@BB@?A!BCCDBABCBBDDCB@BCCABBCCCBAA@@BA@@B CCCBCCBAAABCCB9}>nwIcSsGLKTPKaXڊ󉞑遈Ͼ¾Ǹ¸ӒxkfopPXWɰw}}IJʽƳ̽ý˸ſǺ낋ȴǾݼиֽۅ嵨򂌎ʼ݅Ͷ荢⊐ýĻ³ָȀäЀdz೵ҝȯۓԡƥνɦʖѦЁ鮧ړˀĭє޿׾󏊦ȉɟչŤو׿ŪԽǢʯИǔ𚎚ǒˇϼցﶱ߈ބčᄁՉՍѸŲϸþӸ煁νźгκ̴ȳ̸ϼεæ支Ԯª瑆hֽݽҞʶĴ͟싞ضכЀ:Mo?6mLUP-r=;67CJKON76?@TY0#)/C+4@;38EGEASI[LHRLAPLf>AIZr@<:A43K?K289-PYR;9_U\99;:0@;99:72;964584343124aM>G857:;;8999744;>;<@ED=2*2=FHD@@@?===<:9978779;A?AB=E?BAB}Iz}w}~~x^X/0..,T-120325740,-7852356534@$B@ET)IO=oi_&fxeiNOMUQ=3@6?p/l[`iˆ`vvzyejXTssrζpxmrityƖWcawoktg|_{e_{nʚ|ɉ{hwiiZwJ{28CM6OeDG)PE"*2/_;8ZYF{g|I^tVp8\MRmLF6ACO97*L.2GNO3=+%33_9GEGC9?66:v4:Z1+;761. ,*835;3 -)*++0&:7NM/%X3^HYarU{sJ26C-=A37l^uӒo~}|}||{|}||} ~}{||{{{|}}}~,|}~}}||~}}~}~|}~}}}~}}|}}}|}~|}}~~}{|}||}~{|{z{{|{|}||zzy|{{z{zyzzyzyzxyxyxyyyzyxy xyyyzyywwxyzyy|zzyzxzywzwyyzzwyyywvsqxwxywyyzyx{z{z{y{{z{{{z|{|{|{|zzzyzzyzyy|{zvqlhimkow~wy{|yzyz}}{yxv{}}~~}~!gOb}}pKB=;=:>FXa_cRRJm`ZKpefTIpz9g`ed^ered~Opnp<7Bv>3kTBW\T[CZc}zɬe|cqyv}zxdmxhX[[VMDPNB6VD@AC>FLH?0:B<:BBLGHFB@BHIC>DQOIGGLMIKM('&%(+,+A6765244544>;<8778qbYe5978JQMHFEEFFFELIADOLIDA?;;<889;<:<>>==xfbX^^SUdnhgji49733vgIOMQG^:M>6=f?FIY^MQGN@>+-($'+)1.&,.16=:cVI][Q?NL7$&%'0-1OG@MJ?&$')+%4F@A>K/1GGKD;J=4AAJJPJFQ-)22+5/'/()+#!2/8%.((M()**'*('&%$&%&)+.93'223=84/+,7-15,$>912*:E?*9A>HHBCB3YJ<)4'FZOu[NwtXl\;BO@8SiQyuYjVRvVFCOVIVLMHIDfyW}gyGvZhngW[n^ZL,XR@B=>?A84AFD>>=?:<::<99;23B<\Y<EDIK3880B,/04423,*/2+2134774201,0,-*RS00-4212142-1203535542324432///+-01-/S@@D17.I0.*PHFLL10A287762341+./21-+,*)**,)++)*-)L)PJLBHGIFF?;JIGSASE?;81@AAEGNCB@EERHMQFEMOPZkaHQD;7@AHONgDFA7=@?@=<>=@>@ECHKLGFHDBCCC?<:98674/-.,#%(#=1O2!>@2,,56814%3-8;503! "%*/(C5245669899@;:DAFJHEEHV\]V[WJGUHKJX2\a85\W\^WSOI?CQKEGEHCJKPPJXVPBFAUF\DHGLOOq+@"A-6/;!%&*) !'/'?3,"""!#!!+&6+)42'0,:!!%19' %!#($-*(.$  (#i"  !!! A5ݔʺȽt8(!#()QP?arwyLXF&D4+#> TBImxutmbjR}Rnrhˏ򉗂ݣ۽΁˜ҐԒۋ̀ɒl8:O84%0F!# +40!Zΰҩptvoet˂܄jqąʔȤ|Z~ᓸ㶳䞋\/Bxrjqj?A6#-. 4 3,,OgPB(5A|FfVvVAOpB"/qozxq,ۿ`};% ( # 07?#.4$`>Q9Kn~)UH U.%)(++# :<3#:0+  "E5(* f W8eRQHZ@L7o_ '!$$M 0$ ! :zhZw5Y='!"38F?n@zL%A9 42%#'9URQ{ +;FZ6VEg;O`{mS]UF  + +-" < /   + +    .53$!UwvE2@";MXMQ&S4֕BAReZXl^ˌ䣠i88/AUfw{{{E"%2;!97R|7C1N;  *1FG¾¾Ҁ˲ǒӼoB763438APZXcONF|j]WHiabVJqt4^VZZWXe[^xKfd700K"!K7+75,8Q̒_qפ̸Խiw_y{􆛙ÂcSWYUOEOL7/O8''+-76.&"-,-37DC>4.2::411:BA@A=<905<!##!$&&#$'+)*%%'*,0:be0J 'dۄޒƅ{}~}z{~иWaLELHYfrxqysxopzxsqphchejiyko}{~xuy{y~{x}vvkxygTz{|ֿݘђ׽₇ojsuprjwzz|~~vyz}|t|}{svrwA|zEB@~}EHECDCAv|yphrwmnZcb}CHNUKHI}||zvmv{pup/rswosz{uu|roqn69@?:jnjnq;u_[_ZZ`\ZUX_00/.+-,+*)PIEI%&#!)//-+*,,-//41,.632/11//.*,.//-011/2gZ\R}RPDFQZUY\W&'#"#(,$"$NZR##%"!"''%0'),**8::"B88:5 "! ""!#! $!%&1ETRMEHWXUG'%"8'+53!25 "/9 (6&2+!,! @0BF7=;E71422-%5*-6>X2'@><5&,57* .Je)5T*!~]) "&95'@Q(#' +  $%.-8+*-.#  +  2*&0-)1//.61+.,&1&$!*(.++/ + +  + + + + + #!!%+$&))+-;.#e2=4F6&9-$+A("%%")2 %!/! )$ -,  ###'!$ %" !! ! !! $%#""####  " !""& "&%"!#!,(+**%$%#)'((-/-++&-',,,*(+0+)"&$## $#&&# !&$&$! ! "(#  ("! "#!() !!$!!!&3##,$'*$$*)(.60#+##$)*(6)(,.7:8968:;;:<@=BEFA?>;98;<65330,+)$!!34%!(('!"    + + +  )1.0.0}/2235<7395750/15DGJFKI?;;=JE>DAC?EGMLGVRJ5H3@C;*(*0,+))3!07 #%$1)4%%"&%$ ~~~~~|}|| ~~}|||}}|{z{}}||~}|~|{|{|{{zz}|z{|{{|{|{|{{{|~||{||~}||}~}}~~|}~~~}}~~~}~|{{{zz{ |}~~~~ }~}}{zyzzz{}z{z{{{z{{z{#{|{|~||~|}{}~{~~{{zz{|}z{{{|{}z{|{z{zzz{||{)||{{||{|}~}}}}~}~~}|||}||}|||{||{{|{||}~~}|||}||}}{||}~||}}|'}|}~}}~~}|}||}|{{|}||}~~~z{|}{}{{|}~~{z +yyz||}|||}~ }~~}}~} +~}}~}|zyy{}||{zyzyzzz{}|{|}~~} ~|||}~}~}||{}|}~~~}|}|||{zz{{zzzyyzz{|}z{{zyyzyyy{{{zzyyz{{{z||~{{{zz{|||z|{z~}||{|~{z|||}}|{|{{{z{zz{|||}|{|~ʁ~݁~||{|}|}|{|}|}|}~}|}|{|{{{|{|}~}~} ~}~~}~}|}|}}}|}|}}|}|}|}~} ~}}}~~~}~}~}~}~~~}}}~}||}}|}|}|}|{|}|}|{|}|}|}}}|||}|}|}|}|}~}~}~}}}~}~}|}~~~}~}}~}~}~}}}||}|}~~}~~~}~}~}|}|}|}|}|||}|}}|}|{|{yxy xxyyyz{{{zzzyz{z{{{zyz{z{|}΀~}~~}|}|}~}}}~}|||}||}}|}|}|}|}}}~ ޜͭńӂԿ񇧱Ž؉߀ɻͼǴ̳։qnpoonmrtod]VUVWaig`[TSRSPOOOPQKPW\]TOTZXWUQTVVWX]VQ\s󊀑ퟤ頁輻Ѳ̀˫߸ȅq톙ýSVgmoljbtJIIIHIIHHIIGE=Pj:g!>;FI:8IHGGIJJJMMLKKIJKNNOPONLLMMLMOPTZXY[SNMNNOOMKLJMMKLLMPOQRRRQRRPPPOOQROONPQRSQPPOQP\߳ɡDZ¼گ̽ƛοϪ巤œȾˮپĽӾɶߊ൫牴ưkntOhcRJHHDDKQjȣوħºӘƾɴĀκǰ`ѺɼĻľĹįӽ㹲°ӿýꇋꀇǻ쾹ںϴƵ;ЃϵĸۀȴƼ܃􈓎񅙝Ƽð㉟Ǫʛ𴊒롎߃ӽö٤蟿뻾ӷե؝ʹ˵֭ۏáþَӔԺƺ׀¹ܻ󂺶ȳ˳Π¤ˬ흞é4垓ƫݸ̆ٞů敋ﮢ쉍δ»ӧʗƹùƲƶż˸̛ؤ¯ϿØ렦⻪ٹŞȳʺݗߣﶘƿYƻŻöÒ򏮯ڀ0NmR`_9_H2Q9@6AHFKNNL>_;^QPPZ_EO4<^WVTXDM\OQ1IL*CH@5@=87>5Var7;;5GVc6BESN<6=G5AE:M.:<-0.<:OU[<9:96>=889@=747645746954bXMT/=:69<<=<;<:986677<>>AD=1#0KLHCB@?=;987988895-?MPMMLGCBAA@><<;<<:::78::8:9==;:@==AC@=>>DBMP}n̰l}}|{}}|v|T]e6,22406<63.J8;DCBB83537/-122S,@H^B%,(bZ>X^H==&7)AK1.l7_1hf~zqȯ|ld_ZXartqarϏeotn}w~Ooamgfi܃kcq~vtHJWJ@P./KGFMV>A/@*V2F+6nyj~mly[qspXymn}q7a-qTnjqrZ}lwCwvQ]`iԇo]IeCYv_O@JeZSV`zdQPj}_A@A95O[99H?>GDHW3;I<-154=)'(")&-;cGaTE@5*'MVmVJOPPbNW^abPZQ[pQVhLrq_TxXu]vԊwvh\PdZv}Yz°gMz^b\6;\mZ:gb\-|^S7;33)@:*-21:AhvL]g宀~||}|ywxxxywwwvvtuz}|~~}~~}~}~~}}~~}~~~~}}}~~~}~|}|}|}|}|~~}}}||{|}{zyzzyzzyyyzzyzzy{zz{z{|{z{{{|zzy{{{}|{ |{z{{||{{{|{yyxz{z{|{{~||zyz{}}}|{"}|}|}|{|zz{zz||}|{{|{xwstwyxy{}~|}~;}}~~}}~|}~~$rfGvqmfٟ[EABYfojg\Mxd]\XYvxee[gFt:;:;9t:9;887:;:=<=>1,*'EH(LP-RK^aWU/51-,KGGH%,0))'+03+',3107986967:76241'&6722+&<=542-8!(*/3370*(*+'D63[bf^\lyu8m|spvvVmocixavodhlxtc_yl[jMpmgaL^XPJL5;Hv[q[uhk|{Yn[t_cYb]OZpYOdlxjtcmYpYwMLiP]N?^CxzR_g=qQQ2?jer@BV\MM]FA53A.(-5;C<:;0S\4;.TRc]]JLI)&%"$'*(-,QAKSQDB))+IHHPOJEDG@EHDRM>F=2>?R[W_AAIU20/21**%5/&&(26@$&&0$%'*('&'')+$&*.2/53.31=5.+-450/0*F?(6:A70>FFFB7J?;QHRS2,V|dA]a]yxfR:A;_QNMWhg^knjegrnfLHGx`RMrU_vtL[DVXLQWSSH/>37BA>AA;<;AD?;;>;<>6777376`61:66443644;86466,MH>3L4/*.002652.)00.242/26300//WPW+U-.Q/21-3.2-MTWGU73CXKL.1./22231/011/0.SMIJ8/O-0/U-UE<.6S09646333/0/111.,,**+**,,*)-.)LRLKLHKGJIDA@FBCEKOQLKHKI>U34LPK0D?ADGJJIIDFBFSHMPPPUWPNZ_^YW]WOMOMOUZ]_YZ5\5301112256621152[2/34445412471301/^__]1]Z\_\UPNONOLOQVPPLJKOLIEAABGFKI?BHKJCCIFBC;GOHLC<9=L37>AAKJNN6@99:7BBPF?J7MO:9HDJSSNUXR]QNKS^]JD5P>d?;9433.*%",R32B(;84864c5:9:@<@IGJMJCAGPXY[^NLTVMGAX21^[]0YP.3310-:EFBCEDGLJCGHHIOWWDC?BKE@A<:S@jGQHDGRKIHGEDAIOSNOPPJ927L_y\ZOOKGEHIJ6ZNXaN9Ij(&("-7nhsZq|T#B9V>,## ",$(%%*91=5Hb4>19+!07"(2+8;/N 2 $ $4 'OX 9:LhZ]F^f&A0$&,FB'\LDeN0 !"@o_V8-*'/$3RFFC<)0%/- &<5@Y~5  "@TANUsqlX[VfZYF>B*&2 +  + 2.,!$+)  + + + R6!6,# (CfP=/&$20?C?G0>*Qqj6?Mp_o٥ؼqigpwgjMPUTKBNI8,L8)('+55%!%+/253,@B>515:6522<!+*,++,.-.042-.543/1/...,--00.10/12lYWVsVXURZ`U[[QP,+(#$$ %##&PO#$'% .+!'),,,,;912!%" !;873  "  " !! $& !%#$FPUNIWjf`*I7(!*%%I)!DH,+?) !!'.*%<* !/3$# "& ,>GCDFEAB?>=@>?@=:77561.)&#%$5K-&*&'"!((#!    + + + + +$/3/10.Z/225;68>;981..3?DJKNBDHEA=9K+,RR*MD',+)'%09<8:;<>BAIF<7845P=kHQE??HDBCAA@>FKNIKKJE2,1@FH1.+-))')))0%.6,#+7 &#%+~ ~}߁~|}~}}|*{|{z{zz{}|}~~{|}|{{zz{z|{{z{~}z{|z{{{|{|||{{|~}}{{||}|}~}}}~}~}}~~~~{}~~{z{~~}~~~}~}}~||{z +{zz{z{}~}}{{{z{|{{}}|}{}|z|~|{{}~{~~}}|{{zz{z +|z{{z||{zz{ +|||{z{{zzz{z{{}|{|}|||~~}}~}|}}}|}}}|}}|{{|{|||}~~}{{{||}||{{}~{|}~}|}||}}|~}|{|{|}~|{{{}}{zz|}z{zzz|}}~~}zyyzyzz|~}}|}~~~~~}}}|}}}|{z|}|||{{zyzyzz{}|||}}~}~}~}||{|~~~|}}|}|} ~~~~}||{||{z||{z}|z{{{zz{}}}~zzyzyyyz|{}{z{}}{{{}||{~}|||}}||}|}|{}}{|||}}| {{||}|}~Ɓ~~܁}|{|{|}|}}|||}}}|||}}~~~~}}|{|{{{|{|}~}~}~~~~}}|}|}}|}|}|}}}||}|}~}~}~}~}~}~}|}|}|{|}|}|{|}|}||}||}|}|}|}|}}|}~}~}~}}~}~}~}|}~}~}~}~|}|}}|}~} ~}}~}~}}~}|}||}}}|}|}|}|}|{|{{{zxy xxyyyz{{{zyz{zyz{||~̀}~}|}~}|} +|||}}||}||}|}|}~ 닏󐁲И㐢᩾閯⇋¸ϽԿuaggkhdba^WWVRU]di`YTUX]`b_\`[UXSVMMLHHNTTVTTRURVVWNAKةүȴؒދ؊谫ȻݵҀ槸驧buwـnqcr~inWvSHEPpKF~a@abL{hPsQl쾄˥Ƕ诬ۘĚЇ՝`v6xYy{o}⑎icLH:y|`餍{{Kxpd{܋ʭݿ֬߃򵺏㐾Ǣ齘°ّ˪ˀ㬋͐ɘݤֈܭڌ՗Ϊ׵Ȑ̿Ҧ阫ȵ󤟔ံڪ¢җ⅒샱ڭӖǻގdz㻞塐҆٘Ӈʹ큞ߚ痲ʚÖ˷v/XKrQhNbx{ᢹة?Ϥȝ儂sm2ABECDEFFDFE)FIJIHFD@ACEA?BCEEEFEDCCEEDCDFEFEBCEFDFFEEF3EDEFDEFDEFFGDDEECCDDDEFEECBCEDFDFFEFFFEEEFFFGHHFEGFEqDFEEFEEEFEGDEEEGEFEDDEFFEEDDFFDDFEGEFFFEDEFFEEEFGFGGFGHEFFFGEEFGFEGFGGFGHHGFFFGFHHIGGGHGFEFEFFEEGIIHGGFFEFGGGEEFFGHIIGHGGGFGIIJKLPUZULKLLIGHJKKKIGHGGHGGFGHIHFGHHIIHIHJJKMMKJKJKKIIIHHIKJMKIHJJIIJHHJIHILIJ7]665L2K5?76^QJLKMNMMRWRMKIMPX[[XQNNPPTXYanvfRNMNPQPMLLMNOOMOUXa^YUUY\VRRQNQUUTSRSSTROQPQQZc׽Ӛńȵȇ鰻ȅ΄ל̽ͫڀ㢖˿Й𔛤нɽλƽ􏚟Զ􅌓ჸpӲsdxW]ZQ@B@{dIJ򁂉с̀Ň;؃ħ؀ɵȺĿǽȵ˼ƹٱȺ뀉ހᅎì߽ԍκڴȹǹˇӸ֡㈛ـǿIJ搜넙⁃ǽԶù͏˞ȣܐʾʒ䷔ى۷ܹ֏ƛ۔椭耄ސބ哸ʽÌݝߚ̙窨Í϶ะѣ؀仴洹ƿЭ挣ƼϬεɿԾӐʨ״ɽǐڅԔʽҿǻ〣򊈖遀к┇ߩخ܀􄊈ýƹ´Ĭ꟞аŴǀ˯炈ϱʲ͎ȼĸϾ꒜ɩӆŁ耄ļȚ߇܋ĺ JPZUi^>T\6./ ;9BHSOOMG6^I1QI)GK;L24<`4/7EVR[0XU@9I0I47L;Y=HT`6@[TKQWd=HDB>44IG19HFN2:9006>854<;9;:<;;88;D776733766844YUR015<89:<=<;;;89:8648@CCDDB@-BGHDA@@?=?<:9897779:0:MQOPMLGCAABFC<;<;:<779:999;>=<:;:9ACE@=CD?IJpgΟs^r|||w||~|y|olVHgF^^5/0[4<9;<:ZAD>>6778?@>+)'02/:0=6J@>1U\?g{=YVW7W6U@3F=MF;"jG^݅pyrx8uao\k[anpevv~nbzœwضm{}ƀxrsyb]msfbmmncnpcnorktk}}VAUD]?{;UIG=8M35F25;"/B34J\yvþuec[pɓ|gwž|Te}{DgMլ{E[okwɿဠηi{wYNV[_t}vF|~|t8pfhd_G?^xiMLX`?xfMPUrmW^y5*=@M4=jX[A[8Xgc@8')6G=6U9S]3$$1%3*SjRHl>b\H^v@EuWVVq\[B?@-QfcvWpDsFTFBRS9Kuaekszp@GTOUE%V38_K:6t^|sQm^Q:dM]\\[SSRf^ݳ֊p4!\BWf?Rxnyh/{0206I<6S?t[uf]./Orc/Ph~\rz͉^nr}Ávp}Hm^rj_]kȌWvŐw_rD:h8?@>swOu?6o}LYb|?&8]Ibh\ȕzunrbŸxEgNQWUM?QKC4KAA@<@EJ?BCDCABE;7CFDCCEEAC?KNLKIOKPOGR()(&(*+,.4*?8687:54366;H%#$%&')'#B>BBGHPQ7_uM+<Մѳ{}vpaeh8zszl}oovҬT]QIO]^nuqjlcŶʻgca`f׿qfp}{xkkvz{}uhfl½neippflnqsruUrvvx}Ŵкd~}sppprunx}ntx}znqxxvu~|GJVSRSNKLMMPKt}v|la_dwpMX\`d\TQy|xttqpytMyLYJ?Asmknz}cabfdcb`cbdir;;?<<;;887:kVVa[146FJCFEGEFDCFHFCDQNHC@>99:998:;;=<}a\\TFafdfirgeghge6<5646:1181Y.648121-),RRE'+(K*MDIW\2356:3XSPOL)+*(),71,+*/0-589+8746:7657'"8732.)(>99:2.2;$%&+/-+)P),H,;2XWnr^c~sq;~ieabVcnyyxsybjtjހwldP[D~~Qa]qWT;<0@-j[uybĢ{uagv]NUbizNJ~RM`Ttun]@QqYyjX`r^f]nNELZt`SOWZrbnOH]GjevGLT>@ObA8.5@+/>ILE3F@911093-UTYPTOG+*)'(),*+M<3+'0;2.08)8E??4""#($ ""'$%'--*+,1/-.--757<./.25.0*'I( ")4I?;VO=BHXK5BV^KTARXS^PK:VazMoZM`POQCKqnosE{hoJBllI;`^TPwYPEde[fR53=0)57/@BBAB3;98DB;>6;29;=?;79771:&.5/G4=975:456554526:/19<4-[25;<1,M0-244//./3130-)443200+L-TOO,+,0/++000,YVY1[L]486997-21+121/0.OSIL-UT523,/-*-.-F>H7/R977521222/201/..++*T.10+/.0*(*))ONHEHEECBA!5FMS<9EE?ILDMFGHJJEPEPSTVWZXRU[_YS^XSTTTPX_Z]V]3Z23124554555.121223/203535.032]_/..]\_]__Y\[TOMPMQQNLLQRQQLIHEDA@:8H76F,4C,8>SQL;65:E<><257D<1,+:,*AG>CIKKU.0UOM_[VI@7b^Cf]/9FE:RCZ8VnO]CX=HFHEAA<;8:;<9=<;9569>;92-'$(.4,*+,46@WE,D943.5EEED=>41+>;,)!&*689;:78  &)9883743^\79;:<@KPFKJBAEFNkKZ_R?TTP.;/33ZS--.V0;2CBFDHFBEHAHKCCE?EKP[`LIHDMJHFEBIEmnHNMJIIKEB?=;FJMNKOOLI?7=K^c>^``PMD6M:EEXcE/@]]/gGځhzj,m[hTcUZkiamrr]Rsŧҙ怏ڌɇ϶ܰ⯠ÔϏֶk}>OMA./2;3))D*3( *H}э˫zd}caѿ⎴񀸯—ք`VmʰƗćВ()1-,7;916GIyJ5AF5",$;7098#-53-26EA2uFr2!!&>/92u?$5B:* , + + (# 1!X0[X0-)>-!(:7F2?#G+R & " , =Z#Kq 9HW8.1,92&71'&*9Uia:.$.F{wijI 1 ! 4@_BIGhBB#'0#>Z>NJ) X6\@Or~uL,GH2AAk;8;,) +   + ( "%     -:2+=#24,3-,=FB%KH2BBC@B79><8"!#%&'##"%')-%$&(-.65&CV2%8}בqxv{޺ÐU_QIMY_swslofmeedjԴ΅wzsmx~sooldfpymmxwkpntvuzMnkmlrŹexpoorsn|u|ux~yDENKLNDCE|BJJ~xyyC}ymeqluf]]bl?DIOPKFC{xyytwwwuppnjltovrzA|hAJ>47_^\[gjWXY^]`_Z^\Z[^103-,+--+*)+*+PA@E@"!)-(*),+/./1320/96520/.-/-/.01/21110gWVVF:Y\ZZ`g\\[WSP(+%'##& !'%G"%#'$#  ;6).-(.65$$&">>::9 !  ! "!'%%#0!&#HK^\HMmqe_+CB9< - $#8+.$$*%89&(F).1&#(1 )$..'2",(.(cH1#)$_2%5):$7._)YAF1(#% +! ) ( %('=,( ##!# %$"'",0+&$!(+0,)1'%))09>%*/*?%-.6..*&&";/42/@772++n07A@LME8FB@&2',,LD%&&G%-'4376;:8;>6<@=<=9>EELUHFC>D?=;<;FCmqKMIB>?C><:88BFIHFHHEB718=:3144+*$ -(%06&'23!')'~~~~~~~ā}|}~|*}}||{{|{{{zz{|~~~~}{|~}|||z{{{zz{z}||{||{|||{{{}}|z{|}{|}}~~ }|~~}~|{{{|{ |~}|{|~~~||~}|||{{{z +{{zzz}{0}}|{zzz|~{{}~~{{{zz}}}~}zzzy}{|}|{{{z{z{{|{|||{z{z||{|{|}}|}~~}|{{|}}}{|||}|||{|}~}|{| }|{|}~}~}~}|{{~}{{}}}z{{{|~{z{{{zzyzz{}}}~}{yz{|}}||}~~~}~}|}}||~}{z{|~}|zzyzzyzyzz||z|}}}||}}~}~}|}||{{{}~}}|}|~}|}||}%~|{{{|||{{zzzyzyzzz{zz{{|z{z|z{}}~}zy {z{}|~}{|{zzyz{|{{{}{| {{~|}||}|}{ |||}}~|||{{|{|{||}}~ǁ }}}ց}|{ +||}}|||}||{|}|}}}|}||}|}}~~~}~~}}|{|{|}~}~} ~~~~|}|}}}|}||}|}|}|}}|}|}~}~}|}~}}~~~}~}~}~}|}|}|||}|}|}|{|}|}|||}}}|}|}|}|}|}}|}}}|}~} |}}}~~~}}~~}~}~}}}~~}~}|||}}|}}~}~~~}}~~}}}~~~}||}}}~~}~~~}~}|||}|}}}~}~~~}~}~}~}|}|||}|}|}|}|}| {{{zyyxxyxxxy z{z{zz{{{zyzyz{zyz{{zzz{||~~} ~}~}}}~}|}~}~}|} +|}}}||}}}|}|}~ ͊탬؋ؙخϫ݊脡څŶŹ޶ૅygadcbaUMMLMLPUTTPIFKRamlgdmpic[WUSRQTY]`_YUVYYX\oeXҮЗЇΓݭݗ߃͇͆Ւؙ֋ˌڛ׸şϬZdنuyskYRfucPQdzh[giloLOJ\e^Uoj魡Ňڌ§ݼڒ~󭧳LRMnlYczzv}ЁkqR^u߇Rk|sn*rVg֌ĉ̵ֳڂNJώ涙뀸ڢۻɼ̿ΩǕ參ȐæΣ޵lj؜םպ귃򐓎㮂ȯ󣑢¸ˇͅɫ̓Ƭᶘ˩ܠފɠȁĮց̟㶇ϑ֏ψ򢶰y򎞅ЗԗTtSi̓}(L,Kf֥ἱcmw{mTVvվ؉ŏӠჰ)^BBACEGFGIJIIHJHHGGGFEGFCCDFHEEEFFFEDEFGFGGFGGIGGF DGGFFGHFEFGGFFHFFGGFFEFFGHHIH IHHIKJJJIJIKLKIJJJKJDIIHIHIHHIFGGFGFFHGHGHGGHHHGHHHKJHHGHIIHHGGGFHHHGFGIJKIGGGIHHHIJIHHIJKNIHHHFGGFGGFGIJIGGGFFFHIHGHGHGGHGHHIIGEGGHIJJJLLKLMMJIIIHHJJHHHIJIIJIGIJIJKKJIIJLLOQWXPOMMPPNLJIJKLMNNLKJJKKKJJJMKJLKMDf?FHD=M[G@AKRQRRQPPOPMNLMOSZ\\UPPQTYestyoVPPRWYUSPPQOOPPRTTTVk{gV\ms`USTTV^md^UTTTUSTSQPJЀ̎ºܯあ쫶ːۗľƵЮڼ⑖㍇íݾ͹Է¯ƺ͵낋𕓩wwjwSjb~psWr~¦߽ĮɾƵϦŷ̀ɳĨۿֻ􄇃Ƴ灋ԀɼĶ̂ɾㅏϷ¡툜ƿðꦇȾ肆ǻŻƾٗܗެҳ􏩢ۉ󃦇ǡ͎ԧ׎Ϡƍ͓ӻ͸쎄ƀȻÍ󯟙ĻᰯŨؾNjυμѿη񶓑ּɞ̈́垂¡տƲȼǬ򁇀߹چ킆В՚ľǤĿо˶ƴ佩񅖒õˍ׀Әܶ띃Й󫧇՗ǽ񀆍ғڌnȾԖ­ϯÿ»хњ΀KPXTi\X5IMln61IB;@MLIC:\WWJ752p@IY<<2B>=@9CPZXVX@@CRHIWB]GPQSDE6M;JM_5AGMSA`3E;AHFO.6973/6;9877699?><::=>4]63;:843632]Z0374=:99:j<==<<<==:;9668,=KIDA@=>AB@>>=;:9997:?84BNPPNRWE@ACJG><;;::8889:9::;<;::99>E@?CBA>9.77*7)29^Ep==->-E0N.A@F,6WUF<-R(<"$L:;HS[DAm]KHm}wBnm7_hR;VPKpM>ZXNbT`FH}JldLVEIZ_f%ntaWsUh\BCyVSbr;jttpKN:)O=:LXSeb\Z6:2'?LzTL|48C`RKO\Rm8D;tO@Q(25[S{DgLZx#=+G"'5J*NI#1():377;Hn^PmA%"/7(TT22'*YC!)-+::43!*"**56';,<[X<7/T6WO\/$*4)U/>' SRpiQZwseszp~wXI{ۃbv\zpluvzUhܵ{PE;0ALѡcYu=>dlgSp.D'B71^E>\=dUqnklkllkmlmoppoptuupqsw{z{~~~z|~~~ +~~}~~}|}~}{yzyxxwwxwvwywywyxy z{zy{{z{{zz|{| }{{|{}|||}}}{| +}}}|}~~}|{}~{|}}}~}}}}~|y{}~~~~~|}~~~~~|}$sre~{oqj{r{ƲaY}kf~\nrn_ceM>thhmNBBE@>DEKLKSZQISHMLPhcSi^ENVObfQƣ|x^vm|ρubt_DjKNTVJ9IF<3DA;>6;AG?CCD?BGGDDDFFF>BHDEBENMMKQTMHCO*(*%'--+.0D97567894466:F###&')*'">?CFFIMM\dk*;mݸtȼ{zr{~}uӁz{]nWUWRjagupmu^f_dflڼrwryyuytiipxrkheia_ngeechmmntwwuvus\{rkkrktqmwxyurt{sxtlUo}ez{w~pHLMMJKJOm|y}JNIw{{v{efi_lL][\bbVQ}x{{uutqtuyNKNMD|ursr{rgihgdddcbfcltt;><;=>=<;9:9>k^Zb_13AHEEDECBDBBGIFBFONFB>;:9;q;8:;:<4KO=H5=KVDA1.6QW398ANBMMEIH>BNO-6H:0(<<83;M@>?1.5'6$#$&&$'*)$"&-,.+0+#&(/24A<<610*$$#;+")'!&#@GWSWELO=34>JKKebN@QtY`Z=:wS`VNpjUiPfH|JMubOTE`_@QBWkMGiZRMj^N=?M#P,7??DA:>>:A@==<78<684e;=93<76575655246017:80RHV485-*223321213310.--233321IJUNW/-,+./,P+.,/PPSXWRX345654365111,OG2BLTTUMFE/4.R,..0QO@:75?:7:6130.1/200-+,++,+++,./,0..,,*OL;KMG@AB=?DCHJLKREFD44JHORQHEEBHGJQFLKIKJGGZ\URV\[[Z[[V[Y\VPRVT^YUVV_20444576422311123a^.1/01/0/\./a^[[ZX]\[YTXWYYSNMLNUTMIMPTROE=DIHFHIALJNDGB=A>?<6/-;?=6>6079=82B8H7JPID05;LR?6?/:<1N,4273,[WN3b?>B=F?eP@HIPGAGGhXKM`74dH;ihMe=d=;46;33'#%*03008 !!%>5883546WT6:<<;DJLIKKDEIBG>?GECFOJ@JD@EGDAMRXMFLILLJDBCFA@B}JWFJKE<;7;EGURNVQOJIE7KCL=]TdbiW/46!.-:;"##"105)$%@ &/ %%$& $-"2)3-/%( 7&-,5!"%)"3# # $***!&$#! "$+,J?j߾úȸ>=,(+"%D$AE3/3c(+#0 %=/%#<.(P/Ntȵ~JT]WFR2CIRnqlenqwqyNjɩ󒒧󵞠ΟÉ߻׫𚚪ℚҭek=A6,,/;ABD-!->-.+=E (;JqNjއɸҗHȆˍ^LmJX̀ևծ}QN) .),2Kp(!) ,#)5+'+&:*+&&%A22#"%M]1L4B6i$/5G3$(   -''D!F@ .2&/#!%.(<17$#L1BL' + > +%0"#,%&*@ MfS:!-T\&"6YH5I  >#-76WC½Gq½ÿӄbʣʌȫԶпIJdWvegaqvqaecM:ia`cH:9;77=@EGDPYNEO?>>5@68F@,9HUkbP⌽j’wonyyɢ@_GKRTG6G@2)?7"#*4/%*,007;<54/&//!"  + + + }  &$$  +  +#0-1%*,'5>:RJ4/ilAa7BJ3"71'4(2(@ !8. '1'(#  %B /1&!( '$($#$'))%'$ "&&&##%&"!! ## "$$" !"'!#& $%#$" ')&%%()+,+*(,**'%&))-+))(-0-+.-,+**,,+*&('*+(%##%('# "&(('! ##!$& $#% #!!$ !$$","1.(4 "$!7*"'(*&%*)>2+,= 8%<8+:"9!A>;;86="$*#8,"'#!%7-7#"$ (05./-,+&'*  +  + + +  &033./.1PM/3665;>t>:73-.11;1?HMBI@@/4R**,'&)+(,/*.-.1:;78A?5?=7=>:;ACIFBEBA?=99;B@BC~HP=?A=6738ACQLGNJICB?2<*).+649.&+5F.9-"!0)&42-~~~~~~}||}||||~}|}}}{{{}}~~~}||~~~{ z|y{z{{{|{|{|{||{{{}}|zz{|{{|}!~~~~~~}~~{~|{{z{||}}~||}|{||{z|~}!~{}{zzz{{|}{{|{{zyz{||z +y}{|{|{z{{z{||{|{{{zz{z{zzzyz{{{||{{|{{{|~}}}~|{||}}|~|||{|}}}|{{||{{{|||}~)~~~|}|||}}~}}~~~}}}~~~~|{|}{||~}~|{}|{zz{{{z|}|~~~}zy{|}|}}~~}}}~~}|}}}||{{{|z|~}|{zyz{z|}|}~}~}}}|~ }|{{{|~~||}|}||} ~~{{{|||{{z{||{zz{z {~|{}~~|{}{yz ~~|{{zzyyz{{{~}}|{z~}|||}}|}{{{|{|}~||}}|}|||{{|||{{|||}Ł ~}~~ց +||{{{|{||}|{|}|}|}~~}}~}}|}|{|{|}~}~}~|} |}}}|||}}|}|}|}|}|}|}|}~}~}~}~}~}|}|}}|||}}}|}|}|}|{|}|||}|||}}}|}|}|}|}|}}~~}~}}~~}~} ~~~}}}~~~}~}~~~}~}~}|}}~~~~}|}~}~}~}|}|}|}|}|{|{|{|||}|}| {{{zzyyzzxxyzyyz{{{zz{|{{zzyyz{zyzz{{zzz{||€~}}}~}~}|}|}|}~~ ի֍ʲ֤亿ǥɁ鶨­玲͉Ư넚ȾýϼLjZaYVPNSQMKJJIILMOQSOPRY\ZXWdmli`YW]]]cjy~}gYURQP^ƺѢǬð򥨸ß̱ˈËᥧ웇ޤ͎خԍż݀֠}w_YXghaHbaMDJEjquffJmPtp^AM޷܅ŗ̚ŵ̸ގηaS\hOyXv]OaVqKonx^rwQgn^b@h{?gPʰ󳵆ˤʦ߱°噆框Ťϵ˱ʊ־Ҽȷȑķ޾㿭܉Õ󛡉ţؗ厗۩|ꛬݳס߽̀ƥ˭тԉ盃ȽŠٌ肩񪉎߱ʾ€ˊԣ怣鄫ءʇѭeΚύEe=GtyˆĔHD爒uk߷lzzSvz֗ޮृ򉯜o\eDDCHIJHIHD9CDFFEFDBCHIIGHGGIIHHGGGHIEEGGGFEFFGGGHEFGHHGGGHHHGEFGGGIIHFGIIGFIHGGGIIHIJJIJKMNLKNNNLLNNQPOOPSRQPNNNMNOPPNNOONMLJKKLLJKJIHGHHIIIKLKJMKMJJLMNONNONLMKLKHIIIKLKJJMMLKJJKLNLLNONOMLLMMLLKKLIKHIKJHHJ&IIIKIJIHGHGHIIGGHHHIIHIIIKIIJIILLKJKJKJIJIIKKKJIIKLLJLJHJKKKMLKJIKMMLMMMPSW[TRRPQRQNMLKNLMMNLKKLMLMMLKMMMKJ7^JfrgHtLXvJUib`YZYWRQOPNPONQPRTXSRSU\cjkb_mnloti^XUVYgg_VSSROPTWPWa\zr^WW[a]VWUVW^yz^VWUUVSUSUn܊ϸè޿΍罁ǞԼӹϻǀ̫twþդ°֝ԯσ϶{tqjge_]{gx~χõ򒓘ʸƪƹ÷ŶƵŸռʻۀֺ僊ʺŤɵҕ󽬭Ķ׾텘Ϳ젂پ鄂􆈁뇅瀜ýŸõ􋛯ԺخҸŶ甑ɴĩֻ㐮鋀Յ⾃ˉǠ臩Ѕ㨟ਲض·庵ڦ߀пة㟍р߄ōλ£Ǘŝե®نįқޖȑ䕣嶸񃅕ބڄ􊐁ʼnȾةͿظϩǾͻǫɥ;ƤӶȬ˒ǵ㍫ͼν܃ѷ˷Ծƪݮ߱ʀ猐ˠ탂ʰȿҕ άʗÀMNR=VW`KAV[mI5fA@1?ND=>cP>H3C)EwEVS\G@D1-,@JOXX\U0T5+S>@2JYRKWLA5cGEJP8HUQG:4D?@@KQU.5=806<==;6255:?<::==:629:=<8:876418;<9@==<=';;8:>;;;8688:9:<=;;::@C@?>>@HSS^ogr}vrwvsrqqrtvuxyzwywlm^mHC?RF@F3FILP*UHA.41/9<=8;AW0HYbQKXMa]a3dM;I:66M;+:[JREE\cuqnhpr`mSk1psStbhqsøgvqs|uio~Vj]mzМzcfuLecۉ[cygMZWcnlfjz[nmyBB>TC1`W;`6'y|x}{mxtƾqyk½lr~pl|Qw (dpTHxnymhfyogRFSG\k_EIRHmF^bhzRNcSxOU{WOOLW@HIU7Pf[KLDOh$@50) C<8ISJ+Gc4k]8e6=5)>J8?40,6=*13>Q36eZR>9Xo~t@TDhFLJG3aKJG14*SM>upAQ[MnGD`SUVmarcgRh, +murg,#mSH[*S#I[NSfLOELyk6==F\mc5SˉKXN+KhadaO|ixB[LM?//(&*26N9*$^HKGD 8A;B`/2S*A[)-M+B;#SBFW畉wcQs_bzcrdUWbuh|sAYTH8KBQ|Nd`dZe^YA(%G@/XaKP[kkknoomnmihkmljjkjkqruvxyx~~}~~&~}~}~ }}~}|~}}~} ~|}}{}{{{|~{{|} ~~}}}}~}}~}}}~}|}|}~}}~~}*~|}~~~~~|~~~~~}~|~~\kc}nu}isƷxɲQRnpnsiaYL{xw;mjhZxISYYQQVScRIHFrHmm8hdZ_ rQeT`wkyͶ~vcżgdxBcJKTQIHNC95EA8:*9CKJBA?>GHG=CBKGDDDGGF=:JONMOQJ@G(+(('(1.///D:4246672468=<==<::;;9ic]c`34@=IEECCBBB?GHDBENMG@>:99;q:9;;:>=>=>}`YZWekghoscadd53[Z1//0//2210/0-+**+**QML&%#&JDHL02U.=_ZqQYTI+.(*/301/232/048444;;912440%$14653310)PA>651+5B$&.'%'FH*..:>?8bndSWgisiVUx[ќW[qfcǂjtdeqlvVaަqbpWfoot}ihY_[rT{axp_bW|dl_kH>gCR{hV~}y_b~vNSgZbT\lI]_I\v6STD<>@aN|JQhO?Fo`47]R8RG334@G45FLIC?1>1(7.-/&7!'NIKT;69.*+"?E%9\MD4CP071;552=HHj?8?EIC7pbe?rDK7<@AF^U9:C@:;8B9:5MIE:5''',$#&$$(+,",/1+1353+)+/>3=9:;=;;=:8:=97;>998845<4k9;4<9/:>874478642231313692+/12-2,X01430/033.01-223200/0QS,,41,.R.-T2..6PF-/J.-314523314255.546314/57.S11,MX-1UO??<25(8474131-301.0--/.-,+*+,/.-2.--,*MKILPFCCGBFGIBLSMOSM79>JJHI1SB;FJLMO=KHILB?S]XMU_0\VWSQWYXVTSMRW[]YW]015676:;5542100214gZRZ/2.]WT^VXYU\]WVYUVTTUWUYODAFGNROKQMTK@>=J>K4%(LDHD9*7<>GK;EF8:FTEF+E>@-2G0;0G1AIG>6$8;2&&&/53363858 9+454935dG[789<BGGDURPURRKLLCMamZ>LTY_6LMQETR\N:`NQ:N]M--0"53;-'73:$.$!!4+#,("3B#.*.'&(#!!)1.'0*'#?)')+$)'#"!"%(  !&-,3exԌžʀέqF,4 "'!  !!!*1@83A;LNT!*'!& ":8=-(6=Zsja[_V_?O!XaCumhgZ\tk_ǞՋծþήԐ͇Ĵຏذ􈡥PKn[\.4+29Cr?:39]62': 4@)9- |ovi񲗥πRayĘϮċT=bby׎գ. +vUG6uxj'#3 %+ #52"##3dC)'#'*./0$5744 %  ( ).D#P7"-"/*BA'( ( +-,. %!#/'$5: IXNV%%L`4.799)/(,V\NLXbmdA"3'B2"R{ȕP\S(84@1([bI<$  +JKH]~O*  + + &rQ.    +@h: +    !!C 1*8%&#     "* ''; '  ,$-"*Cњɮv`h4B;HOZgՄR>/$()*7hT.L! A|˱jiLFPQ5!  !(3'FR矤y#˄̀ď߷諹ӯ±LMktuwiaZL|qk5b_^RkAGPQLMROaNB?9U8SbD!E>?4i_ɒcPfݬŝ~jϿǕyĐ;=425741448FGD@@=<64$ !"$"#!#&'(+ !&)+,015>`D~{z}{tgdsëhrnmzdknj{p\\aḭ]fh~~suyor{؁~llfhjjiosuox_gjgTŮϿz~{qpnquny{|xlvy{uonh_`utr~~svE{pxy}|E|}zqmkp|EI|tse`pqpub_^Y~IJEMOGAzvvuurquowtonsnqzI>xwqu7gffgge^cdlljd^aa_]b[_^b03/--+,,++-+)JGBFB! '$-*+*,-,--36224:7511/0//[//01033324jVREH[c`afk\YZT,)KI&!! !! ! ;740+,/0%68K2:4- "! &'"  3*'!!  '.-#)*'HXODGWT]YKD92PxG!r7. +"$ .%!" 1L)!":$9-73(Q+!,.H##.#420."==*)IS6)&7!57 ;#'% 0+C. + +#..!/74/'($$(#%B40)3"$-1K)"#12/&PHN,_;2#%+&*:/#   + + +  p$!(+  + ,!/ )#)E???=<2@;F@HABB>@<=>BB@PKILJKDFE;=@=.%,-0'14,=.0*!=-. ,4+~ ~~~}}||} +}|}|~}|{|}|}}}}~~~}}|}~}|~~|{z{{|{|{{{|{zz{{|{|{{{}{}%~}~~~|}~~}}~~~||~}|{{{z{z{z{ |}}~|}~}|{z>{z~~}~{|zzz|~{{|}{z{|{{zzyz{|z{}~zyzz~}||{z{|||{z{{z{z{||{||{{{|||}~}}}|{|{{}|{|~||{|||}~~}|~}|}~~~~~~~}|{~~}|}~y{}zzz{zyz {y|~~}zzy1zzz{}~~~~~}}||}~}||}||}|{{}}{zzz|~}}|}}|||{z{|{z|}|}~}|}~~|||~}}{{{|}~}~~~}|}|}<|}}}~~|{{|||{{zzz{{{|~||{{{zyz|}}~||}zzyyzyyy{zzz~~|{z<{{|~|{}|{z}{{~||}}||z}{|{~}}}||}}{{{|}}|||{{||{{|||~Ɓ }}}~~~~||{||}|{|{||}|}|}||}~~}}~}}}|}|{|{{|||{|}~}~}~}~}~}~~~}~}|}}}|}|}|}|}~}~}~}~}~}|}|}|}|}|}|}|{|}}||}|}|}}|}}|}|}|}|}~~~}}|}~}~~}|}~~~}}|}|}~}~}~}|}|~} |}}}~~~~}|||}~}||}}||}|}}|}|{{{||{|{||}|}|}| +{|{{zyyzz{y{{zz{ ||{zyyzzz{zzzyyz{{{z{||~~}}~}|}}|}~}}~}|}|}||}|||}~~~~~ æ댕񰫰ŧα°г򟥣刢úGǽ˽­yZUFFELPNJFDDDFGIPUVUPMORPNQVY^`^\i}q\VUShЩ녕ʉŅƏك腑ݾȜߑ⸉嘑׹̽Ȗ亢M[U^urcaRJRCtwtU]E3g\׻_aYހǷ菒úƻΫ㜢˵oncGF@h=?_A]PYYtbkmu}LvҊθôiܥjѮݗƢ폡۶֮􃡕ۖ˲ʟĜ٨ݛ귾񭢎֎ƧǦ⑯ﲧ􀋑ؠ}يƓ﵌߆⥘㈄ۼɑبӎ־٢ÞġщΞ깒ˎц̈́ۉƫؼđ뜗Ŝ܎y葙󁏣 ch[mMᲬςڴ莬rhx򂾛ʫp\m{İ€喧솏ۇšsWPLLRWVWTMLIGEJMJILSWVSQPNNNLKKKLIIIHGIIHIHIHHHIIHGGHJIIJKKJHIIIKMMKJKMLKKKLJJKrLKKJIIHHIGHIJIHIIHIJJKKLNMLLLNOONNOPPRQQQNOUTTTQQSRTRQQQOOONPQPPQRQQPQQPRSTTVXWVVTONOMNNMOPPQSURRROPRTVUTVSRQRRTRQPONPNMOMLKJKJLJK#LIIIJIHGJLIIKJKIIJKMKKMLKJJLKKKLKLMLKLJILM LLNLLLMOOLJMOPOPPRQOOQPOOONNONMN%KMMMNONOOMNOMJM/FUE\vEDXTDnf^\_a]WRQOQSTTW[YX][\^ZXW\b__fohhda``aa^XVWVQQWuДǵfXXY[ZX[_dabrwwm`YXWWXVVT`MʊͺͤۼӉ򙗞􏋃Ʋԟ̝ɿͳܾڠuzͽπžаĮ޺勭¸뉛µƳ׊ͱP]dhpFy熌þóٴö옜ö²мȪĵſɾ¡ǻ͸ųһ߅ٺտ郊Ŀ䉢⊘놃􇖓ـȾğ˃ӎ씤㉘Ɂ虂ߕĦ͕˸ѿ򙳇ȴΉʏڗןܟͼπݳӮɶڬװʓǯ񇦻Ծ͹ֱϼŅ˜ܛԫ߳ЃĶÆսʒ׾ҧȿ߻жǫ߇¼ƽɺȵѷ;ڿģķ򮦌䇇Ę̺Ϲ߹ҔăɀП΋͍ʵϯŠߊɥԴжͷ/ìŸѥܾجΞ}ORQFDPQVG:1=JQU5/HKKB9Z;SIJBE*LIIQUS\?>CIB5>@@OKKQ/9:8:?B?@=6346:<;9:<<87<;<>=:78=;56:;=@?A@>>=;::9=ACCEED?97;0:GGEC@CEBA?<:;:889;<;=>;98788:::9:=;:;<<GKOudwummlqtqqljkknoqw{{zxtx{zxzxRTacV?+2.=,>JH,2358;<>9,-V(%N8;^=K3XNUV21mZCX)Z7BGD9,2C[@MDkHfmhqks7dk\RXaYdnz{f~Xqpvuqhz_dјƷiyi[ws˭|nmxK|GR[dqyddjmRduRTWwvhsjf}wtle_Mg`xxFXQqqk`Cq^ji~x}OXIBKBg[rz]n:mOWjUkpeEUa`JANJTUl>B?B:EI|TMlT6lH,p<&&41//:AB342O39BX1Q.8/**:7H02424D`FZND@IQdzUKMQc;JU!XkOJ[?I.UCXNj:Jle^b[Zid}xbyt|^UljWo0}o}mV3DB5P' /iD[~FD}R݄Ӈ>5Pk$7!%:]F00KyDXKF|@8b706H'8086w^8RSniNV\X[D4+!&,3,0.##*./2@.&(AQcOO<8FH/Y2./Xj=? }H'|HMi4>ZrSbρۈjng~h~yjjdsxOɻ]Kt{.N'f{̅sj}ƫRQ6\-/F*59^GIM@?5CHFD?FAHC?@HJFBab:PMLNWG@K(*&''+//11.=88544782378?J$9A')+*" ?CFIKM()-Cdm)sx׿zt}_zwuqwuкaiŻcgnqmchfbbbuda`^]cuszq{spsyrmtifnohougdncX^acjnoZmstmXsw~}~yomreqtqvwzxzvkjrqenfa\fcgvziyjtem|yoz}|pq~{}{vyp}|~ysquyPK}{rtvzMy~~}ubgaacSUWZQJ~w|}}|yR{xEA}xrmp|ukjkgdekebe`jow<<>?;;::89o]\b`636@HMIB=:q:<9:9;;9=;<?;<4+5?C#)?$M&UW18@:8o^emd\egpdbRW[d[r^l]rVigx^wv{la€`P]TgjfZSVLZbqrb}yscam`]grnflx~PlzZf{exa{ZcKBgvjujzJIKPM89=igXqAPMN9qdT7WUnt9J9^.OPPCIB@HA<.;2-6/4./*)&)??FB;,6-@?&&;/4aWG-6OF<6=1?77-'Z9E0D[O:jY_KTJ;A[B733==E<8EEKEFAF<4?B@+)(+& . #(-*+00-034/-,'/1<5:>;:=2)!(#'(&3><:-J51GA7F?`^YJ"9mF?NcTn^SU|Vqh[gkCvXDOYQoL?PEQ=NSWmQ:QN=J4/8'&+:=.>=CA?@==:A><@?6:>@734;<97861>JJ392B669;831028530203-11,682.2.)[:7,?121.S1412302302310#WS-04.M+*+-/0001./1-,2/21674111335527341585443.,->@?\X,RCFDG9?2882320-0.00-,0-..-,,+,---0/.-.,ONELHECHL?EDFIRUQQ.J;AEJFD4-RDBJOONOEIGJJ;:9/(1?A?AG>=BC9B@>:635B=;9?NBAH/>E@KB9'1&DD3PAV37<6V;OHGKCB:.622-//,H;7,+!+//61#%*T_ig9>3bZVW6><=?DEGDJFMKHJFIV]bQX\PABPY0030//67459?A@@JM,JKEAEIJHTDOYWQRHLJGKIIFH9mN=GKJBBKEBDXOQNKLLNHE__H=aEXb2g;;8/AeJ9KIY=ThL+,.()026-&37!0'$-)4!*4HN$ *,&"" .+&'#)7,)-/-0! '$ &$#& #!#'+JKnكǿۜ;68/'##+( +  8'5!BALL!6*"+5&-?.72C/BQWRIbz)FFaLHSaYabj[\pkhzy_zfbhɶ˦زˬӀʦ먌೒ށޝǑBU(G13\OeO'ASwsqj{&4D 8`F*$,K(4}4(MN& + B +"<@/-E71  + OC  + (.  +  .B.  +,- + -2  +   +   1+",+3 " ;K&Fh(<1b܇䈈\{jBJFJPBdԮՃA6/-'*32|ܱICkͥNxӕʰz3#1 e2_[Ğ.Ѕ=NJ윤ۄ܀ㅵ影mI~exdcU{trq?_RVdc[bFGPFIHK_iS<=<7R@$AP,.U01C8pޛZIZ¨xڲջƨcfѷyػpA.CIOKGVL9-,B6".536+*$7=<:7B971-175/5\^5GCAAE<53#!#"!!#$"$(()+!#'*,-.*HLGꃤ{wx~|ݽdjekpungijfdg|gfgǫb`gut{~zroyqwwvujsj]dfinqrNlXdedSĺрȸz~~urvitxs||}suz{qwmgbqptousyzmz}uz|q}wt{{|jmss~EC~}~vkotwFzyjujpsqk\c]^axGFJKC@|wwwpuysxvnrtv~yGrpmn71dggcc`ifdcea]`ea]`\_]c240.-,.+++,))SCDE@#$,*++,,.-.3742477520/_01..022010004iVHKL^ecbff]ZXQ+/+&%"#!! "!  ! 6753!"<96<+!!  #'$! !! -$&$$!$'*497!*('MDP[TLRT\UQF$<<79 9NI%.&#!?$ $%3A,%!3%4:  31$52$$/(*$'(+E"(2''*#.(MA8aA3C++ *"!$59:9, &%($#" 2# KYcb69/\SOP/65578>@>D8n:9=D?=AOFGFEEFG@:C;(!2$/16!&$#(2'#/+2 .7)}~~~}~}}|}~}}~}|{|%}~~}}}}}||}}{|{{|{{zz}|||{|{|{|{|{{{|}}|{7}}~~~|}~~~~}|~|}}~~}}~~~|~||}~}||{{|{|{{z{{zzz{z{}~}{|{zz{{{zzyz%~~|}}~~|{}~{zzz|||{~}{{|{ ||{zzz{{}{{|{z{|||{{{||{z{z{{|{|}|}|{|{ +||{|}}}|{|}~}{|}~~~}}~~~~~~}||~{z{{zz{zyzzyzzz{~~{{{z{{}~ ~~}|}}|}|}}|||}||zz{|}}}|}}|||{zz{{|{|||{ zzyy{||}}||}~}~}{ |}}|{|{{{~}|} +||}~~~~}|{z|}|}|{|{zz{||~~y{{zzyzzz|}{z{*~||{~{{z~~}}|||z}||{~~||}}|{{||}}| +{|||{||}}ā}||~~}~~||{|{|{|}|}|}~~}~~}|}|{|{{|||{|}|}~}~}}~}~}}}||}|}}||}}|}|}}}|}|}|}~}~}|}~}~}|}|}|}|}|}|}|{|}|}|}|}|}|}}|}|}||}|}~}~~}}~~~}|} |||}}}~}~}|}~}~}~}|}~} ~~}}}~}}||}}|}}}|}|}|}|{{||{|}|}|}|{!zyyzz{zyzyzzyyyz{zz{{zz{|{{zyz{z{zyz{|||~~ +~~}}~}|}|}|}|}|}}||}~~~ ƨ鼓ݟ鼰䜚Ԯ膑ƼŽÿ̸̺PUMMV^YVQKIPPX]\YYVQOOOQTLFDDEIL_~d[Y؜ˇѼ鉚ǾꇂԆݽ˦ޓɜÕ䳰楂܉xֱӿͧǢπÊǮŠlvs\gv}nqyvDaGiªnlq3f\ڵhsoۏؽփЬȷJƅ)ji^Jkg;E`_|̷Ąʏ뀄묫ПΞث†ۅɡϱϢ׼ֻ҂̧ǴǜЉٚ؍골ޯɮҘܲ殐򹁻ۊ׾̕Ԅ싗ꑎܧ̂ÞƆِγ߉ٽʺڐȌěͽޅʷכ踀ȅۃ林뢭釰ØʹóɵᾶȒߚ󀉬yS]5O6‘ĪޓTSnjLPdmopϯۼܔ渁fkhi]Y`bbc[OREQOMRYTX[]^[XTSRRRPNKMLJJNLMLJJLKKJIIJLLKKKLLMMNOMLKLNORRPOPQRRPOQOOQPNSPNNKJKJLIHHJIIIHIHHIIJKKLMKJJMOPNPQRTSTUVVY\]^`_`a`b__^_`^\Z\^]YZ[\ZYY[\]_^_`a_\][WX(VXZZX\_[ZYWWW[]][[YXYVWZXY[ZYXWVWVUVUTRPOPONONM4NNKLLMMMNMMLLLNMLLLNLKMKLLNNONNMMMLMMMNMMMNNLNLLMOOONMONPPONNMOMPQRMMOMNOPOOPONOPPOOPOMLJBCROTLZqHnDLgcmkaaoymaXSRSTUX][[\[ZZ^\[YVUU[`__o|}mkklkghdaed]Xcf|Ɉoqwukkogfcdd`^\YWUWUc^֓˲Ʌ󷫭ߓꐘ˕ʌȚ┘ƶūǎrӹڄȻϥѼ굩ξހſƺ􁅆ߐmi_tbȢl_rf݊ɧ¼жɽѹɩú˷þĸ˷ɧ¿ܾ丵򇅂ػͬļ񋗠㈔ӵʌ߀̳νѲԁ̶ȸڲۉ؃ȁπèˡ᎜ʮ񈜰ކˍœƼԲʞܕ܊ۓ͗𝖓ۂ񊋕庿К̱鞑ŭʿνҀʾ㵚ׁѨغƂŞޒ˸€琉Զݶꏠߺıʿñȳ􅕢ס񶽳IJЯɧӻ僅޷πŽͽ˻ǻ枹֬ųǮ]ȿöĶ÷滙٢ڣČǀUTSQFIAS1-GA3BYKYSL5%>5@97X[8MYYEETYXZH)C83'3:/4>L881&0>A?0WSA/=2b7^XWUV481d?ADD@LCMY39;;@CDCC>55669:=;:<;;<;=<>@<9=@98:>??A;8::;;99:=?CFEB?BCCA@A?CKHDDB@A@=<<:8;;9:@?GPONMHC@??>=>>>=:8859;999<;:9:<<;=BJHAAHR^tWtvw~~{zrpyx|www{vpprqsw|9KY`x[YO\67/fWKUIP0:@529:/H-Q3/@E,.4/-747>;2;'K#6*WHidMl-I*HJC(8[7KQ ["\JHTVIR~z~xzqkyhyhr~abmlpʐt]}YliڋdaǿːPStNc^To}dqAo~»|}GCXom`gfL>ZsiwĿшAK:B<;[J?G12D[A3C7/,@KFPF>/IFB>@D>EC?7GJ5=;=>NNKLOCH'))&('*--1/*;28634886277?J%=A%*--$"DCCHII%');7qwzʹȾ`pm}|~uxqxmnllĨm]XTWUhfegdr~ahfimvx{szt~|rqzifgmoc`hggmd]`fegnpmnni`~pszvvjb_kqlmaorwtmq}zqanegc`g^agskmqhw|n~wwtruy}o{ztu~|uputv~{vstpPt{z{~wnn~S{s}}yucbbcQ\^aTI~yysvuD?@}xsjp~ofhkfcflcac`hqs;==<<>?;:89::k[^ebj\6?IDECBBCA@BEB=@DFJB>=uptmp9::9=<<>AYSW[gmifhg_afk765[Z-,U,-/,/-.-+,,.,0+)Z0PQ.5=0IKLXI,5INLQ8=Z7;:534321355-02435:78610034',5/566310*DBE=5515>BKTC-+U34133gnobdj_XjcjRTCRbx|fiP_f`Rg[UNXba}V_q`\cs]aWH]]nsxtl\d~kfc`cl}XyG~q}]xPQ}UnaQ?^ISRsAGCCA;ND94/11/+##'%#?>I0 %B*'/+Q^dD'5F>%";:1<149U>>6X[P8_N?[fE6@VFIG0=B?A?KMF:DEK=:=GL@3)%,)$+0,+00.30/'.)!"-7=88RZI4%@8B!H:+H@@@BG;@:@?@@>5?>=8765:8764,I>E&44@06894L-O3:3203/0/.120734633TROJS5321VW2345204/32+T2NLU07*1UNS/11100./-/32122574111345434/.5576752/M.F}8PeG3+URO79S+5223731.+11-,/01//-*,.,,*01/.,+SOFEGG55=6;FA:4@H=@A*39CL>@5<)91?7=A?H77FQUJSD9FMPNC/-1RWVTXMT23^>=_L42GWPISSMILKS[Y^^ZSRKLX]^[XM_YXPMQ?K@E:aH8=02;6%-$==6TYF2=@7:5c?JMFA6:741310)-10.4,!$M.ekqkjn<?=VFJJEOROK@bYEMZNN`>89~ۜ|jʨ魥򃼶ЋfJnm=;%'(.Q[ͮ|vsO>^tM<776?P 18$   8 +  +E)$>  +"*; $ !+!2")! "A.%".-!"52!- +/*:R@1 +0Q]$6!"!"94d:8$pOo& -#!Y9"3##*&!$UFtakiw]0+?G ,4)`3,R#@K3>K4O28ZhsgcjA  +    +    +  = '62     %  !14  8" + +#/YW8EWk\EK8K7CZEfΗ`L<7518EVslL1vgO`Ƀ{" -+p䛉?N9#  .,߲À©񹳢܀ރٻ؀ѕѵ㕪׾dMb`xysoH`YbhsW_Z>HBDDHV~;a8I6>FF,2*>="E9o[H˸|Իga\ݦyt_D0FIPLDNF7))@4071:1(!<:518?32.+'32$5566GD?>B83%$" #$&$((+,!!')(,,-$e[(R׾yq~~v}xttpoѱpaYSWWjliihtgӮmi}~t|xz{y{ztv}tpuvno{tosjbfjjjprr^`_`\΀Ѳϫuy||{ofdoslphw|rvzkvnnkgmlot~qsyrxzyurv{wzu}wsqzzz|wnkqn{~Hzq}ypjkyKypywtpkiksiZ]_bzGNNOE@~xuztpo|uxvqsxxhkfn402ifd_ak`]ae`]ag_\_]^_a12.---/+**,-,SEEIBC5 (.*,,,-/..16525768421a_aZ\020030118mQIJQ_fc`bbZ^^_,**JG"<   != 47%*.13<.",302 #0 ""!!!" !$$&% ## '%(&  %(.5.!>'%!!$KQSHOWOJYRWCA72%+60'!/!5#/.A ! IB"&-)(!'  4' #%.1)0+#;/&(3&D?*2(5&D6MJB).B3-,*+E('3&&#!  +   + # (-$! + + + +  &10"" 3-(+#'&H_\A5V30J8; &'6)"?[D5#%y!--*"  !! ##!!%%#"&(('%#'%"$" '0#&%%$! !"!$#$#" " '&!#& %(#!!$"##(&'(*(()#%+-)%''('1,*,()+&)%"#&(,,.,)*+--+#%)*'#"$#$'$$#!"'$&))" "!$$%# &  $ %'!&#$"%)('-),- 2%&/+'+,($'',1.//,*)%%.0101)50/('& &$2'&-+.$!!?,7D<6,/,)''&'!"&'$&! :'Vemhhh97[Y_aWX7976;>C::42/--+/BKR=OP@8HBM)++),[/./+"$020?P:'+027>7>$ #C?BAAA>C==?F=6575h4A:-3798?:;9L:wwnU~ܨֱء簩a_Q\b祇ޡC>TWZYXVTVWTU[ZZZ]^1][YYYWXWTRSSRRQQRQQQRQPONNLOQPOPOPRQQQPPOQSRTSRRRSTUUTTSQQPPQPPOPQQSPONPNNONMNLLMMNNMNOQQRSQRUTUVWX]]]_```ccb_`cdefggehgfgihfdegghlmmmlkijjklllnnmllnnmmjifdaccdefeeaa``^\]\^]```ac`ba`\ZXVWWYYXXWXVWVWXYVUUSUTRQRRQQPPOOOPOOPOOPQPQQPPPOOQPOONONPOONOMORRPPPOQPQOPPOMNPOOPSQNMNOPPOPQQSQPQOOPQRQPQCG:IUXg>GMKb:U_HqylX]bjkd\UUUWX\d]_^[[ZY[[XWWVX]cfejebbdhllkw}xurrtqڄƧyxprv~shc[ZXWalř䡹Ț߀ܩڎʭԔظƯ⥖~uԯ‰Ƿą̸Ǟ߻ǾWgWOIp~~]g̋ȃ艍ì̵ľįŽųǼѽƨɀµ¸̼ǷǺ¸̃ݼ􃒗̿ई򃐇넌ÿ϶ij݁悃ѵ߶ЭȨçƈгŗʳӘձҸ׿և҂ʲĭڈϞȡޭ뇐ꪠ׎ʰۏǠȳ¼ٴՓБϳٻ٪͹󽊎К͉ק☭ͅĀ삑Čԕؖ𽀳ĽٿǺƶ򀕦Ӧŷ狂øDzȺ齸ͷļõӴ€حѼٹ܃ʳ+ͼ̼įđ~6bS87<061VDJB8RXLDE>D>MJZ[`5796`4CKIGCFV/7??BEFDCD?:869=??>>>==>=<==;<=A?>>?@?95;=@=;=<<;;::9=?CFGFFECCEFLJGDDB@?=<;<;><===<=;9779::;:<;:;:;;;A<=9=N@D@YI`T7BN'+Hvd`Zά`xytuwz|nǏJumԫݙp̶|f}}ɽpwΕɬTXUdrM[sյбzlv˕zwpKjitnlv䭉qȰeD΍CvczcN;6eDuvoKIvm^_pTX7PieVVU\bZVLSɮ%qF?D41JQ79ehDji+356LZ/9r<=HE5M*^oA#)%u'' (;)80'(44-900>01=C51+NPBxG>2G4A_8Tk4ZYYTZeoRAKKS:DJEI_3PT;[yhR?09BVV;=oWEdEf1dEnjէjqvnf;,6,DZITn?^Z~kN|20X^t;QW@-/6/KNc|fB\a4َIr1S9jgTLJNxVMrVj-9;' 164&, ,.% &",,*3B&3D5E&";$+*""$0/.uZYR>;(~ )4+X-'2/7:;<#,##-4*-27P,18?.+'>:"?(`HfXSjr}_bdT~LT8KFFMvkjVn=/43:pfbޗuhT;mn_bO:433HL^i8\>MVgzk}~zz~(~~~}~~}~}}~~|~}|{zxz{|}~~~/wvnsi]uuدĽ쮭fܘӾԭsg`YVW^Ykurmj\}{sz|icaglMG{DwH@QntXhFMTLZymXcw{ͺ_ZaUȐ|kdifkkKB8PMNMHMI@0/E?8//>GASG8"CE?9KB?AB7/F;,@8;>284478:7366;JE;@&.+)$#FDDFIFG&(2URdnkp|Ƌum|nttgpuzytooujv߻eYZS_YVhemoip|ˬıgwjjou|wmssv|{xqhiniijii\Za]afbW]_chknqhfehɿÜ}wxogdtqjebpqrssyyvhghaf`dbYYZeZolniq}sskj{}zpozz}v}}usx|}vwqr|Q{xntsm~qxzuqe\NUX`UNCDCBCzx}FEB@{pkt|lnhfheƿb`_gpr;>?=>?A=;;=:=r`_[]Z48BJECA?A?>=?D@<>Bx?>=?C~hcXXN[jmkjol`bfji42]WX-,-,0,--00,,,+,,/O1`02R04PA?HJXRQY_F4G?`z=>ad0ih\Xj8/11667747612551#+4/4531121A,Q@>:02NRKkFKU;a]dEnCE8E@3EB5OLF,#'%" ";<7A".1'6:'-,0908,DUXNB%&91/4;A\MJ;@9F5C5YZAs3A<7ITD?E;;@LL>8>CF@BEDHD;4-/00(&'".1/23725256-,3.5=:?<8@.,,-+-+-+)&0*+447+;?7V'BG8AC=-2>:9#/VYbYhcjimZmWV]cOeOOyunWHC>OZ>4*#"(,@/.EQ#M6A:B<@@EB9<=?>>:8:@?<998128435-VVR2<:/378;-118953-,O=*,,/.9335974/.2.XMR-R//1/2123423+AR)IUA.50+)JJ,.4020-.-01./005621355445321352637752KDW>'L:4.,*TC80.732284--/3/+**/0//-,+-*--12/.,*OMLJLKCNOIJIMOMOSQNVC@DHJN1RTRKJEQQEDLCQHBNU/WQXX[WZ\TX[XUKMNRSV[WXY[Z/6<<=:8533/1_/-0265120ZUUNIU[^_11^Z^\SXYSTXWWSQQPQUQOP<;?C@;/531V2.ZXVTQ/F@C9@>46C@@AA)6E;EAI/4@GEABTRDCDH?<>2+/108055?2=<7=>LGAGGONLT-LKH44002\XY03;NOJD;WOKPA@MWJHKKNPNIKMROJJNPDBBJIPOHEOKIC4=1CcbXaXWIDJFGOOI36C@Am;8qYF?9<;755222731/2=B7.\26<@@@p7:>;kp;6cMT]gHObSG@FW2212158=<::9CC9DW\L6>:LGK11.,10/_^QPOQLCFJI;=>@=?KVYGBFDB???W3L: bmV* 8B+"$-M'EnJ   +       +  B*0aZ3  +  +      ( +5+7-&'*$6)=*0l;LhmǘϒˌUHFe3yHF.<10>`QL@bЯ#G>M`R3VjFI+    _{ˤ΄ɓƢԄӀԳZ~ןڣod[WXYbw|xuoaypflosu^YTYbEA}vl5W-+6NN;U:+)14riPiֻpdɴe^榔{|L72IKMLFJF7$&@3.3,A3%66/*A=0-,$!1& 61578A>>8690$$! #$%'%'()-' )+,,.+*=:EX̀ɂyjqu}xrz{rϸ̆f[ZR[YWllnsnuƻܾ˸r}z~|ovw~|xuqlilttrpqpeepjilf]bcfkllh{\`\`ÿìʹd}tuz|tlhurmil~xw}~{oppglhkjbegrevqvs|~rskj|{zxy}zpsx{xz~tplny|I~|~x{~{ojzznv{}wxjrvwhgaYxFJKQHB}twyyvuy;=;;=~{}tnih9413jjb^fkbfcbb`\\]]__/20.-.1--,0-0XFC>=7")/,,++-,-.16524;e54eaa_b/a24234345:n`^TODRdgfdhg\^`c[*'LEA 5#B!!3 !0(*./6328=-"($7H#'=@;A<;D$ #$%#"$$! "" $.'&#$*-"8GNQWA((HNWSSMKX\IPLJ:.5-3)/"%<:5'=0F-BhT@%'#,&))&?:#2 !+0/-W==(#5*<111!(!")";JsM1"&#!", 2:1@>80.%F!*?4! >@H4Q32(1( #  # + %$#58*%*(1B-%#/+5 '$>@)L(&)$ #")'$(  %+#5  ()$1+ 2ZCOF\8OOB.:5#!,2"(=48!!.:!   +%! *)&"("'$+)&*  )%&  !" ! #$"#"!!&!&(''$$&& $&"&&&$))*')*')*)(#$%&'*-,-1+**++((&!),./.,//(++'())(%$&$$&%'*(''&#   ! #! &% "" %$"&!#"-..''%# .)&)""'.%%'())'%''*)&%'*$%$)&+(%"(%&#"!10(0,.%%"$()'# !=%"DE;7131-**&((-))')37-'O-2:?>?l5597fo72\7<63KVln{ogxYԾ𣉇Ĉά±dzɆP_eQKx_үem^^Wkwpܘ͘جۃұנԴ񃂏⟄ߒթᄟ́ʚK׀˝ׅĵηِՐ듮ްꨁ슮Êڼװٴ܈ڬ󥔙̎󯘀܍盖ʽבЍݓ̼鋐鎧փ뮟ⱻ䣽Âĥцz֪ܟ׃ݢǻ̹᱁llcmܧ㱝ᣠƒەJoQϕ緢ԚftRVXYYZ[]acdfikiljkigfffghdaa```]\WYXYZ[[ZYVUUSSVVTUTTUTSSTUTTVUUSQRPRTWYYXWURQMMQSUVXXVXZ[\]\[XWYZ\\[USQOOONNOOOSTRRQPPOPQSVZZYZ\^\]][Z%[]__``hhjffigfbfjljhoquqnnnpvvxqr{}z|,}zxutqrsrqrsrllmlkiefhhkjijhfghheedcbeghhfghfQklljeghfb`aa`a_][][[Y[ZWUWUSTTSSSTSUUTRQSQRQRSSOQPTRQPPRSRQRSQPQQPQQRRQQPQRSSQQSRQRQQTTTR><;Nyjj.de:JFIWSMDSUUWXYVUVUXWYYWXYZ\[[[][ZXVWZ^^[YYZ[^dkunpwyv}bҵwga`\[~ʀܮŭ߄򀃈䅒᪂üƺ񆁂͙ۡyĻϒȲ̸ŴͦĦȿù}fSitzͼԽյб㩒¾уɵ׹ӺˁɺɸѶտѱ»幭̹ªزʳō¿ûõ¾态͜«傀ۈفڕٻп뀂Ɛɯ𦀣鞰̬򾝈󠡡ټ²󫺪ۘ׿ͪɲəΊ󅏥ۋ슄䊎ߺ̪ϱœї眏ŮĭπƱǔ鞔ۮĔ˻ݘ䯧İїǂ샊򌕏󅋗됦킑ɿڀͶҤ튆ȻĭεŻϞϔºʰޠݼ㪺˶󁋌ŽĭT̵ԒѶ˽ɾÝN3N+]5&.7>;1bnUf]WIQ^T[`47<3VKA70>K)47HKJ77fVP^f;9PHL_09=75c10=JCIJSV,:@DFHFDBC?=:89=?@?>?A?=@A?===>&@??A@?=?@==>;:=>;<<;=>@@BEF=<<;>A>=>BDJOMKE><<;;<;<<<9889;<;;<<<;;<<;>DBISJNMWScr`[htGXmz~tgd-30]\Fh8OH/9B_8H[4_YOG=N1.3[65**-2436ABV24Q2682/03<3;3],9V=wM>fVcN>FA/?8U292)8A-I0LKQ^LC6\xYgRkUosuzlog]pcqV}j{vlNlfsuz}Ʊsѣ}{‰TzXhHPCVW|lffrλ]ke>?pu_aoeĝvt@ks;@UoWIS4Y1pe]n_CPWRKcpWA5:ADQJOWFn}ͳ4s<]430+5EJX?-?a$$2*2]dD[DKM\x%_@45$Ob0=8$9Q0aD30HKg9725&%3?D70(E8@9S`CL?FR^9jhYTFU[LZL':d)]YHFWYpZKP<`1C8W@>\Kh[g[c9Q\KjY]R7\`bk\~a@'ZE0AS[T^_cC2WwzMSFx}`22TIQAHBEM:3Z?p˂q~m^?=Lm>dC.ESW@EQ[iE53@-4)>38 ,.'#$'!"/,.'7G&+--K)L81($@RWOgZA?yh06:.(#43><<-,'-.#-2-02CEL^Z02.!3A.$@<%]k!TZbSFZWIQzumF^JQ\vz_SQϐ̅unwQS{s=KS3+4G-U=J?EoF?+f2$WICnhw˰?_dCd:T<60B1U`J]LVf ~}~}}~|}~~|{wwsrw|||}|}~}|{|~~~}{zxxwtrtrrttsuvvutvtwxyywzz{zxxzyxz|zyz~~~|y}~~*)e\iam\otc|ㅵ̺{wpe`]jJW}gt}nxmeoisrmr|^eZkKNROskj6CP?Y8OZku@M_g\_{aWadbbYcXojejgi]zHFCC;>K@B=8*<@/:E:5=>DEHAMMJ)))().1.&$H984768;<88849LC9A*60&"$%IBDBEHIMZ.lSl}FLώqnnpqnz¦mjnǴĮuS\\h\UdnjǹÀ˛eYUgopt}|npqzs{~xspnhijg^beZ]^[]\]aghhqtUvXt~̽g~uznksr_atzogluvlkeajb`\`dX_]\]dxejo_jrumtswyt~~rqww}v|~xzy~{sjxz~qiowhs}|ps~x~heZYKRRVQNMFFDEBEG~~BAE|qmstbhhejlfda^aflp:<>=??A;;<<9Am_ROY5<;CKC@>>>=;9;B=vvojjjlgty?=<=<>><;;t}vh`TOZkmlloib`chh12^W[421412//210.SZ3112^V89Z?>4P1O.=O/K??N78brzg_c]21-354647553410",2.2420.1.='KDDB80TJ\Tjc}jCC;A>0KN*VC0N<:"2!.2<9#.'%"#09136>96OKXL=E5;0)7C4;,?4O7I7(-_IaD6<=?@A@;98206238PYY?@A3+;3:/.S198/,MR0591204<8515545430.P,1XJ/O05//4*K1AI3=Ie8824,I5Y3001UNOO0HIE>EC;;@?=;<3>E>C?75IPLK>NO?NB7?JMCB@>>579BAEC?;RE:=8/1XYQNTV[;LZI@OREA;@FCZMKXD[95::789655:;?D<5aan>FGG>9=@>j:@=:EC;9GBCBQLJMIHJ>BFSTB_YPMFO^10bc7=<<>@FMBAQ]^JMHEQ-1d0+10600ZSSQMGGKI>:AE@DLTPfQ?IA?DAPQ@BCITUKG:BM_U;::?>:?W5W\@99BX[VZS_)(C","(681-;#"  JL452+$',&*-&5,)13+)+44%$#'(  !!$! $-'++G1By_R[W9QmNa9F,<#0)(M #)+(#,("&''8/)L@Ip1%0*(5$)"*!+,+_I3(}t0&)tQ?XB^e{ziٛRTg^Whz}n{foiODF;H>{ܩpjʦOrDF5F*D{HiQii@C[dqTMHCGogxʭ׊üƿ_qX3:wāۨn򇜪τŞ1iƏe>TuX<6 8SK?49WtQHSSCNepuK1#'52.##C٨!  X + ;?(!&0 *+&-59!  +    +" ? %.7'1*(3B2#   + + 0(-,!,#jt &!,("64@?#6!9Txt)  + +   +    + (* xYH     +  -' + + /1611,,+ ;#2*0=J[/:1/ſۣu``{8;c,))'*(('A*!˴娿>Buqnssp|ˤustɀӹsTYZf\Wgunܫl\Wj}|rpv~}qpmnpprtnbipζace^`a`figcgqV\8hŷԻ]ƨmpr~xxxpoxucgtrxzppkhohgbfj^geginlqzltyzptqtws{~~wz||}ru~~yr|xvlel~zjtxx~~y~~~||xiyvra_VUDIHKFA>sz|sy>=<=<:WiqpmE""#$##"$##"" !,)+,$&24?MIFU@HA=DKXSIOQ4?PD/&1:1#%//#*7&!5A.@)$!9E&&,3*' &#F*6<4(<), ,+)007%( (71243(UNI'*4#!"%33  )5GAYK30(+$#'( " + % #*&&11<-"0'*-!!/!. ;-?*!()#(#%   $#(+$  %=!<# ):1$-*'7!GPTKQS0J89K)34=$. )!-*6KR". %,   + #$,* $#%$'#"'5"$%&$.%%!   !! "!#!!'!'''%#!%%" !!$! #''')(*)))'&)*''%+)'),-++*)*-.,*'(&%(*./02+,/(''!")*'$##$"&## !$'%*)%"" !"! "#!$"#$"! "$ ! #(*!"%!!!%+(*) #!'+'( *+)" &(#!!!$#%#!*" ++%$)*/&-# (+$# !#$1/05*:.031..0.-,113229=62Y[j=DBD:56;;f:=96??65B6EQ*)UX1445536?86?HF393 *6#O$ !#IFD@>9:AB85:>:;AC>Q=/956<00/5."" !" $8%BD& '2+/.+~~~~~} ~}}~~~|{|!}}}|||}}||}}~}{z}~~{z{}||}||{|{z{z{~1|{{||}~~}~}~{||~}~~~~||~{{|~|||}}|}}|{zz{{zyz{z{|~"{z}~~}{z{{~}|{|{zz|}|{{{z{|||{yyzz{zyz{{z{ zzz{{}}{{{|{|{}|{zz{z{ +zzz{{{|{{|{|}~|{|{|{ |}}|}~|}|{ }~|{{{}|||}}}|+}|}~~~~~}~~~||y{|{{{|{{|||}|{{zzz{{{zyz}~}~~zz|zz{|~~~|}}~}}|{{{}{{{zz|}|{|}|||{|{{{|||{zzz||}~}|{|||{|{|{z{{|~}{{|}|}6~~~|||{{|{|}|{}~}~|~}~}||}{zz{{zzz{{|z{yzzz}~||zyzz{{{|{{{||{|}}||{|}}}|{{|~|~|||{|}|{|} }~}}|~}~} +~~~}|}|{|{|}|}~~}}~~~}}|}|}}}|{|}|}~}~}~}~~~~~~}|}|}|}||}|||}|}|}~}}|}|}|}|{|}|}|}|{{||{|}}|||}|}||}}|}}}|}|}}|}}}||}}|{|}|}|}|}~}|}~}|}|}|}~}~}}}~}||}}}||}~}}|}~~}|}|}|}||}|}}|}|}|{|}|}|}|{||{{{z{{{yzyyyz{{z{zzz{z{zz{||~}}}À~~}|}|}|||}}||}~~}~}~~~}}~ Ԗ䭩ܐɬϩĞ򖝓ӼеӲvvtdeec^`\Vhiծڐ؀ހ댰˂ɽ݃邙ۉǡ։ՏϜ߭ߊ;džʲЪɚץ촬璃xTx_svm|vʺϦǵ۾̟诪oY{Erq[z9oYƯ󉼐ݕ٣଒܆§oāГ̀޷˪ܹꁰۄ󒒕ɳͭ׀ʮہ㳀𑰳񰶫ݡ촮ܵÁċϒ¼ꍧԁ؎ë՚⠀պ֔߀ԂͯݶԆ׀ϖο̉ڕܥʤӫ򊝢ϼ̢ـȒƝ򪹈휔مҦك>IʔۇĪۘޢ֧ՒخﮣД˟VOQSX[^__a``aaacfgffklkfaaceghhgedfd[TSTW[][YXXRT]\YXXUSPQPRUTSVWTSQPOPQWWVVXXWWYZ\YYY]\WWXZ\_^ZZVUUZd[SONLLNONQPPRSNMLKMKLNNORSQSUWWW[XTUXWUZZ^bcadc]afjjgccggjjijkmkorqqvx|||}}|}zz|zvvyyvsqpmnnnoliiikiigffimtqhigfffehikkjlnpppqqoqomnnpqpnmljhe`^^_]]]^]`\YY[Y[ZYXWWTSTRSSQSTUTSTTRRSTSSUTUTSTSTRRTUUSVUVWAEUjYOSXuNsvf?hqISH9WTVUVVWWVWVWVUUW\_[YXY[YYX[\[ZZY\_d``eib^`a`eijǟᅦķǾ~vkm⦗ýϠúȪ􁏏ډ׈þ䊆ʛ翶ñ՞z濼؎íɭ䷀ǮϽʹþʷ聕ҙRmzmrkShjٳڂǶʹ멕熋􉈌ŏөþĿӠë䚑Ɠ胈ȿ˸üŮŬ¿ſȩƪõ擯ӳüŮޒǹٹ􊍆Ƿ󆗅߅՜űʶƵ܀ݲ˩ٌԶ败ӛĴ뉞҇Ί흖Ŋ΋݁ᣨކ̴󥙺ዋЮĔݸȠ熣ѽ葥ЂóȬހм¼ ڷ芼ïмꏵ΁ϻ˃樲酅ꁐТ򾪰սнĿ݀ūĩ筃ġĬ²¦籈ݺٱӽ􉉏Ǹּߖ]и녂÷ʼқє箑ה9RM54[]DDmgZNcb1;JW1.,1& );6+4myafaURWW`114764b[PGEP,25?S--H=>>BAbDiULWZ;=756132K=AKKUY2>DFIFEDDEC>;9;=>?@=>@?<;=@?>@AA@=<<<;;;<><;::=<==??=>ADIMNMG@<<=<;;;:<:88;<==<=<=?=@=>@??IQKJNMVhFM5;/1766LaqpvuzDL-ɛz,,SQ.KD;IKIQ5z4AK31OGC@?/_ET]M\PS/423;<>N/5,148;34257@=5-N=`aj_k7F>.L$7?mO>:TI@Ig4gf`F(`\QKh]RiVT[R`lje~ILpYxֻu݅_wsȜq~~x`9p;`WlNetr^h{essxjY{Xfb}v_vⶡt]bЈ܋|ڋuk>`gxr>*3gZI[>R>Ia^`[~Z?ewÂulQfFlT^D;D=k|l1S:g5],.cB3\tt[\N&YBC5ZMQwnKd:&,!>[S!5TPdGWaD97GE'8'220,)%.HBS/;OYLFM=t[UTMRW],DC=A/Y+!^CSVZbfqJ?EK1)FSepPPbJXXp]xzROzbjӹygYaIr>P44+BA5-.15911O?60P:Va7lClocD|pԞjHA19B5k:cLHQxxyw{~Z~wvwy}~}|zzvx}~}zvssrstttuxvvtrprtwtuuwxwvvwzxxw{|vuvy{|{xxtsru}yrnnllnomnnmoolkOjklllmnmoorprusppqporrwyzvxvtwy}{{wxzy{{|}~}- knxv^xv_ͮǬhDžíˇzqdedlmYe~b_zogicypmpwomhbX}FNSOsn652}ZaFc?h`rvqd`pbZUfffWa\ohepfflNI=PJLOKIGA5-E;8,.?@BPE19??3FF?:6.0N=7AE=8>8=GFAQDK((''(.*'*+@4525689:8:649OB9!(23&#FIGEBCDFGHS[Mt墚jnPZLi}fpuwnxpirpճ˜kT``f\W¶a\i´pw|ps}{}snmm€gab`¸\^^nb\]bdlnldxsyȏyzzwv_]hpgdf}|l`anfdild^^_bl^af_i_eheW^jWaclu}|qvwu}vmrv~|zvqsmfxtzqty{~x}{}tfbbbfNRQYZPOIIIEGILLE{DJxrktojqgjrmmbca``flqt=@=;>A==<;=?k\^=1<=;CJEBA??<;9=A*D4CK>8<@K=A:39;=9?>=>:AC;:873-S09Y/[S[U\5506.00982/253542287599756343801X]L..X-6.S13651/0LO<=A=8CD<9C;;c7744377>AABE@INB>@ONDCGLMUXEFQWNKMSCa>CC8B;OPOG8::9::7:8<@;>@CC><7ls@MPF@=9>Amn>tl=:=?CEHFQJEHF?C8AKRWJ]XSO/P\\Ycm9A?=ADNRCFP_ZYHFPEGF+*Z1L(."*/ZVUUTKGIFBHBDAGRH85-'-9U]tZL^ow]IW=qRX\3-kV + + #"$,"'G5#< /+-+;+4Eo6$)%    + + %## ! &2\?: %!(  <v+$'6B-+"mv#%*K,) %-! + +#6;JXYPUgQ< :* >31Dh^K.ZJ89AIP0 +&+H3]<   + + + +   +  0"''"$F<=2  + +   + 6; $)/-30('0'4 ! &,2,>A+X=$sr抁MvY=>7\&/ * ..05"[}qF)moԥk,# +5B椙Ŋ੶˃޿Ơ{[s}ֻ՚teif~hj_kmgtok`trb^_dab^WMs>EKJxb[+("XN;<0@(?7CDF`rdS[ƽsvwbʡlc՟~}uG>3HHMNGGG;'$A*,).?1*0+";A6&!:,)6=6383;A>3902% ! "$%%(&%%/( (+)(&(')*-461WϔRI>y_ygs}~pwqs|y׳ţiT``f]YͶh_ostxsolosrffjfffsgadihjhd\zihyóƼ~grfYmxmb`y{}xvbbnpgejxhdqkiqtldedipdfnitimpnaft^hfms{yptwt~|uwyyyx~wztm{||}pv~nt}y~}}{v|}~xr}qi^[Z\cFGEMMC@@CHE>twupqvugohsi39hba^fdbhcdkhf`_][Y\__b352./0+---./PCC*%&%*/.,-/1011374gogfhjiceklnllglkkhhe|o`\O>>Vilchld^[[kkIMKEEF?NGJD!#"#A:7@&-%AF;:5=7.-4/2#4A05)?MMJOQ>STdc_cc?# #"$%$! !"  ! !#,00052/07,6@'ORTIABFFMIHUMKQG=AI.(12+2)0",**7-&*T,7(*X,!)# -1+,8   # 0#$&  ',"'+*$&-SFD,2):%8R/0+* 0:R5+' ;5F($&>*&!6!- +)3K=N>P)'$#  ! +$'&4(&:@.326'',#)0 ,#1$#&-  #"  $%(2.5% .3 9NNk1adlmY:H<6 ,/(&%$/76$)%7"'1*!$*) $(,).(*)")%!$#(("$ $)(%+$& %W !!! ##$$!!$ %$%' #""'$"#&"!"&(()')('&&%(('''*+))+))(&**+*0+//,'''$()(),++.+,.+*'$'*('&%%%#""!,((! $"*##%"!!&"""" "" !%*! ##$%$%*3$5.102/"#!! $2!#$#$!%(!!"%)! "%%+/#$)-'&(.%3!#$&#/0342320232415;579==:94en?LLC>;6:?kn>qh:589=>A=@711-+l1'29?JAOE?=#DORPX`287597?D99IDD53;.,*>!*CFECA98<;:A<68;@CDIUI>83:;BJ=*-:CKCB42.&3 %% $'- vhfl\UWY10^dd5e3Q:>S03*,/.;0GGK@^Ke=_Za4:@:589:1@F;9>UVY5@DFECBDEF@<;;=>@B@?=?A@@BCCBA@=?AACDEDB@?=<=><<<;>==;;:9=ACEGGHHKMLLONVROGEB?A@@?<<=><;=BHHIPIB=;<<;:;:<;89;;=<<=<==DD<@D>U7OHG@-'#@Q]]AK@E$8d[]PThl8=@aCYYA-C3aKjbjqfM=YJXszv\mZaXTKjdneks;CJ}scvuzmjjYHIςai{δȼ|S=w}W@]LmS[uwx_~fru뒇MlIv{Wptnqʵͨ|uq7Hrv!2XCKkrrIWOyRsoXQ~qghbOqYUeTG^6zuyoK@U]932_=1WLfq{4my_J_Ac<>XO;1."1A@+.HU7\ARR;RiB&5*09.R+:/ANHG\:EZDNamr_kTL]V5';;EW6GcRn9BAKaRS+U9(DpGMPQ7;eUN@WJ:3WW/J[bsz7i^6 +ApU?=>Ib`GAW6[Mw{z9MkG<<:%`7(359V_`MjhoCuB>i@Fy805Q/6^LUn`2; 9.6*37,!#*+'$#"&!&! !"P#E);',5'*=.,.:%-)1;#OEE?@pcxu{OMA$-7;>@)&*1.#"+(%<,B+VjQ5>5)*KOTc:=AjGZ/^XUk9+KfInd:m]\Sw]wWMw;?ϐparc<760.A/SD:<'AB;B[G2.}UcOGBKOH[k7xw]@?Zru~xvI>Y~[X:uEDGUɉlrnqtwzxusqqsrqrvzwpntz}~|stuutromjoqutrssxwrqomoorpmkmrvttsquurqoonptqpprtqstuwtqnppnlklllkjkkklonmpomkghihijiijhhiijihiihhhjlnyprurnjmmssqnnpsuyxy{{~{{|~}{}hqvwq~njizZ͑Dzmŗp»~ummnu|lZSrWopqgalrjd]lmxgdcxvyO}rj:72X\ST=;ieQAV?Ahkc\KfcigXaa͢tmeqj~aNH=MHNPOKFC4RF?9,/B:BK?/979>IC?84+8N86BG@=@DCB>CPAM'))()+*,--8332979<<8753=G=6B'+.(GGJG"""EEFEK/Nx]{sþ\Cotrogp{nmwfZdbWXdeƾʾ¬½g{rop}vqjmpnjec]\a\eakiafhsitp{TNiVf͊˅y|יƮYu^^nmky~kfjaakk_ah\^`__^q`]ZYRg\Wcqtvqsliltxylppzuzulpwzvw{us{n}|z{vvt~~|~}uqtsccKST_^NMLNKJFJKIGB}~~|rssoy|dhmmjghadfgops:?:<=><>@>?=lhh:2A@:=H@;02673(%$./11.2.)''*34;95=154?336//061:304<958@8991DRC)B.&*;LD+;:^ueMXk\aPhoSvnrUp;Q`RxE`S\ls]aDU@-&?:9D_3 N>N6;DGC>;=735?=?=>@=<>@A9971V008TB`VW\15545$675454256237761497924571I'KJ19145/K-61-SK0YH/18/=,A:K.-103-VLDW1-.,:864356344223,06221254+LK)LB4*S/.42-JG53104311-..2121//-*.00/-,00/,-*KRPHDDQONUINGMLN+,ML@979510011/0^2ec_ZTNKMSUVSUVNY_1_\[XZY]][TQNSMKIDE<:><%3<,\2^]XTNKUSXGK@2@Q339==@>>:0505;3?5>=GNBC28<4?4=1B?ED:AECCD@=JFDKGNFILLCJDKVWWXVB;S\Y1S>?ACAACA?;<=ulDKCB=o>tsp{}Wu7>?EGJDKKHGF5:GPROZLRZQO>GWXX^i9DEDJLOIEK\/1SKLIK)9-9*&%H(@QVTOTRLHGKKE;;4JM )'81(%@9M?Te>+$wI7;1 %/2>~PEDm1s|lcuRdbeW{hqZH!'UfuZnbdnf]~cF-fƂҏܲ^hnr<+Ue6+<0O;mE_pdU:PB^Uf`ɂx|èWjzIv{QsktɃܾ޺Ѳ݋n"ٖɠ,)<$*Z`U'$.6(IkNRq`^hKyWPO**|s3)  '% '!'2"03 + + $476DO+\5E,      + !+$81 +-+  " +:!!  Q!4580 (=6C-)`.)! _&')DZqTVYZt& ! 31+CkZdkr}F+,)(  '*3=/W     +   + + - M>{ShLI *    + 5H' +,C(&)2(&= +1H+*N&86 ";/+'v|w_[y_C!J $/!aAP@6.,,,=A"epk;+=83703 #!$(&$%&#(*%!%**&$$')-0aQ4ty}ur|voq~vx~eYc`WXeiʽϺsron΁rpplqwxvpnb_gdkkrpfhej`hgsDB]QdhlpcfPci_|lU}u``mpvvlkektndfoehhffg|mhdc[of]fru}smqlmmw~vxw{yrimy~{~y{q|yz{}|~hz{yx|{{yxwyt~u|{}oiegg]_@EHROCAA}u}FAA>CECA;ossrsvrmsloonmkfbfefsu_cfgebc[_ce261100,.0..+OMM( )''+1.+235523fljkfb`a``]^^a`fd^fmgnolyj^bg_ZIGZehag`WXVZ^eDLIFA>?B>Q*.$BD::=:>E93:<676$42518(!%9HBI-7KWWMW=[mrobbZ5 #$%'&&$## !! --...+*-5-2>$+VP]EPE?EI:AIEEPOWRB#-/(>@+!!<#3;(A;32.:: 1&K]22'%#!$ #) ;V+-& + +,K7?[V986;./.-3(C=:XH>('6;8I5%"K/2") !-&*6"ALSD*>&*# + + "&''&(5%(40-211*"+#;#%% &!"    ) ")3'& ):1+0PlYDuaL&<;W/?=) !!./"("  !$$*8D>15+7#$  &%1)*,""!$!* "'$ ,"""%!T##"! %% "!! ")$$"$((&""$!"&$%%()&''&&&'&())**-+(*)''*f+42/+'$#%')*((*$+./,+*)())+&%#'""  %0-,+'%# &$( $'"$ !%""'!$ #" '((()'.,)*$374160  !*+'%3#) %&)&&2#! $#&,'%%%2)#$'$7%/!):8:5652187878<=;;>=;7::njCIAA45:?@DGMPE;439:LB<(2?DDG@:=C-""(3% 5@7G*!,5)$(~}~~}}~}~ }}||}}}~|{ +}}{||}}|}!|||{|||{||{zzz{{|||}}}||{{|||{|{|{|{z{~~}|{{|{|||}}}|~~}|~}~||{||{|||{z{zyzzzyzyzyzyz|||{6|{{|}{{}}}{z{{{}}|zz{{}|{||~|z|||{z}|z{z{{|{{zxzxzzzxyxxyzzz{{z{zzz||}z{{{|{{{|~}~~}~}||{{{zzyzyxz{z{|}|{|||{ |}~}~}}{ |}}|~}}}{|}|.}|}}|}}|~~~~~||}{|}{||}|||}||}|{zzz{{|||{{z|~} +~~{{z {||}~~}}}|{|}|{{{z|}~}}}|||}||{|{{{|{|}~}|}{{|{{|{{{|}}~~}|}~~~}~|||{{|}}~|z|}}|~|}~|}|{|{{{|{{{z{|{zz{}}|{z{|||}}|}|}|}|||}}||{~}}}|||}||}||}|{|~Á~}}~~}}~}}~}~}|{|{|}|}~~~~}|}}|}}}|{|{|{|}|}|}~}~}~}~}|~~~}|}|}}}|}|}|}|}|}~}|}|}|}|}|}|}|}|}|}|}|}|}|}|{|}|}|}~}~}~}~}|}|}}|}}||}|}|}}~~}~}~~~}~}}}|}}~}|}~}~}}}|}|}|}}}|}|}}||}|||}| }|}}}|}||} |||}||}}}|{zyyxyyyzyyzz{z{z{z{||}}}~π~}|}|}|}|}~}~}}}~~~}~~~~}}~ ɮڽ݄ʑފţ򃀉Ų끧ú¯ɰ롵䡍t󄿶ТКƂ􈣘ĒȔ߉ȤǢĒؗᖠķߤ⏲Ћ܏賚׷ŗظ޼ʶŚrxmmii`İ۽ˠ‘ނ㷭趧殈ꟗlj֭٨Ǔ艃oc^YÜً}Ǭލ^݃亮ȼɷͧЅ̲Ġᜈъةƚ䷳텅ǰɪʐՕ󆓥שʾź웧ʲࠅЕ㼠ӠƬջЋخ˄³ʖÀʮĄ腿ȋِ͆ݾغܓֻ͛џʲ𦠢ŤㅨŕnρPluѐŘ똓䠴[MNMMKNRUTRQNdNNOPRV\\[WVX][_ZQPWWPQPNKJIHJMNNNOUSOIHGFFHKJKLORQPQPSROLJKLMNMJJIJMNMMKIIJKMKJHFDDFFHIJJMQV[VTMIHGKLvMMLKJJIIJKMMOQQRPNOMLLOSUWUSSTW^`]\^abc_]_abflpswsmkijhjjjimtxxy{{{wtwvqspmlpuwsuwyzy{wuxyusssqrswvuwy|yuurmjhgfinoonpqrromhffggiiijmmmnmhfedcdkmnrsuWvwywrolmkheeffeghihedba^^_`a`_^^_^\[WWZYZZZ[Z[[[IPKCISfpsSwJ>ACUFAXVVVXZ[ZWWWYWYX[\ZYXZY\\\^^cca^][]]^[`ykYZneۙԜ΋ȺĮϢ捁،ᥘ򫟦~ޅĪߕãޅ׻ھҷ􇔗䣅]Hps΢ƆŚω߀򆊎ͻ큁뀈׭啩Ƕ񉒍ϥȻƒވ̽ؽѿɴľ½׵уôꁍѶྶ둚ŲŮɲ̱Ϲ鈐֮œս̲Ĝʹֿ̭᪠ĕ؅ɂ忁ʭ۴ǶڄǑł馘һأĜ̿Ŵрĺ¸ɸך瘳Йȃ΀ݳۀɫ鵛ž񝂍߂ㅐ󉑂г܂㙞ѷ܀ɾ·Ƶ޸úƶƯ􄋁ꅄ۹‰Ն¹þƻ؍ԋԈ˟캸Ǵһ!ɾҡͪ끴¤JN@WBOX5WN?:M\hRX9EB5RD/&,.40,R5?ioqrq^ZU[0WZ[`bdccXIFMM.,-78.TPRL>;N;9>><==>?AAA@?@@@ACCCAABB@>?ACEEC=?;;>???<<<==<<>?<=<;@DA~UL{YA-;>A8:6TB9GUcguqS?i7PiE>;9H[=K>_`HZ4/-gID>LTHBGDF8ELDbG9F7L%A:102V(6EE;LYR.G/,)4D9Vfnjq~G7]|CL@35D`=@G^^o^Yy|NuxUUxQrg_`dUbNYusno@D=JxTuzrUHt=OĠzuo|szpRjXUg[nɻe||Įʹӡ{fsu[pIrsRŻq{˻0.<|hf^V8E+u|ck[ODsOllkzZgV\vQjٝ7QFU;YAO?QQPSrcacwr[AYH7:h=?C=, 4+S6'%a738bw~4XNIT@*"=00-:/MN?DA]NSUW``=;_MTLNAgFl[;Lqce44=NJBN]>DDHHx'9M; 097MKtUkWd>6m}Dv]w>H5`{S`qrd3doOhHG!@ZPX`zx섐3E.M?NH:XISqQVM[>5IbRgEb5.=B3k9{SZP08 :&8)%7'*92#"*!,)/(&"!!.,5V$ 5)F2/%7C'9).57?., %.GP?MX'#/1585,*++#$&# @+0@!^{#:47YKJq@F@5:4VXCQ$XI}JLB^Z[Ikf~y_hI>QGlkY|Y=BECA47GF/BD6-<3A@I6T26;(>L|6w3avfi|`I[8beEh5]Z\EvjJKZytommlmqtsppopru{xxrttyvzzrrwwrsqponmkjmmopptspmmlkjjmkjloqoppnqpokjjjknlkiijkkjkihiihjjjgeeefgghhikmqwroifegihhhgghfffeddegggikkkihgfeehjmoombklosvutuuvwustuuw{|||z{{}|{{~}{;rz|zrʥ{]apeht~~wwl|žǾʻrorqy|k]Pj|pTWolhief`_ZXiypY_nuwMQR}{|}l6318`GBm?uvoUJAeriaV_lji^a}pgwhd~YSK7NJLLKOF@3XG@4+2CANH?*8371)>E=7CE?CIKDGVUD=@4,@J1D!/297NT9B>5851.0;5:466698EA8-6/-.R6,4;$2U6M35;qReT[|cfcRmNS]tlJHQFuapOJDP`CIGFGWH0,4=FZ-(=44C8D>AA>;:T;@>=8=987411100[00a7d\WRLKMMPPPU[SX^0\].[-\20^^VSRPLHHEEA?DD39/?\[\ZQSNQLPVEL>/@?DHB:<:-?BAEC<7FRFHJO>KCUO-ZZPCC=./VM[13.1U`USY554`45A99579602H4@4TX<=>B6O4[9AL[1FGNIGD7@KHFFJA9MI@99U<5?8I?_::I7=;W_@e9?IJGJLICD5R@OUW4;.+()&*+-.111**)+&&!# " "$!!(((J "#!  #!B/-:%!" &3"*!25&1D:"!#7))"  '),# ! $-CC>]0#Eb0"*,.%*4EkV[CLSN;kl{2 1!&#>8LFnPud,6xgdgethmeWs{RX#!&ZRƸtvjbGAses&.ΣШdgheZ]jU9I88E>`WdSPN`T`ur[ea҇͏h|rjTdGФ|SȬʈǘ /X<"'gRM)"79pgiy\fO=3'uѼB:   -0 #=(&%" + &6Efq2?`=06/   +   + 9%6/&?4- , )!"*= .98:X9/*18*0+%7+")!"!'"! +(.:S#1DVGFI_C  !#Mwv}li  + *>$)/      +  #f>JW;[OV   +   6XQ +F5g0"% #U +<,&, >" DONnq>&.,,! !  .*fkaԏuM/C'EY(51G[:A MhUn+ėڷ͕㌉篖ɖp}|bwh΀ϫsqtr}|mbUqtX[sqnnb_TRMJYhePUbhhCGLwpjiX)%"%;.(C(CLD4-L7w}n^WļlxƲufhǑ}ǗUG>1IJOMIMH:$HA)* 1.<;+'(.BC>0!/:30?@95=>:;/6.2""%#%%$$"%"(& ')&*8ñ;@Gznz~}mr{}z沦Xd^_JJ`gμky{{ngimxsgjeelf`bebbcptkkgha`fPPY`p{Z`aqcoHde^lajmxvooj{oueoftlm·_pfdy\`^^od_xzz|osdknoq|}oyusppifwx~yxz}~rhoruyxtuwsmomokprtj|}xuutv~vx|||rifp[V]BGIMTRED@?}A?=BDusryoxzwrokflcfjia`cad`[cb_aca_\Y[\bf44/0/1//001*MHF'!(().2/1-53hb`bhe``_dfeabb`aejgbag`ca_hgeddeUMQX^^Y`ZUPOONWDFIE@A?@;N?TE=F><3;;87@:8<<36749?&+,B&LPLQ;4NLUIK:_CxQke7"@=&%%$#  #;=1.+,-1,,/.8@HRRFONPBG@I?==9>IX29=3/@F3,16$%,*8>p@6&/>QRQE%=6,%#"# +7'?4@$DHAE>A'"   !, #GI:(&+.;00/&(-.#*2.$&%$ !*$"6& @'9#'0bKtRC:<*'7J%A',,3X *3)0"-%+,3.4$$ $+$/*)J %##&&#''&%+.$" "%!$#!#!#!"!"#&(' !$!())&$#%! $ !&'''%$$%%(*()(++(/*%)(,-(-1,*&!!$#%%%)-').,,*)*-(&%$"!! ! * **+)$&"$!$) %"## ""!! #( !$!&#))$($-*2+*.1!&$'+ #&,"$,'#&%%"$#"$)#(&","! $0?3766778>=<>=B==?:8tpj;A?B@9;mpo=[`=a57@FA?:524+H3=A@&,2*9<88IQZ\k:6;?>A=68@PEHG@@A<3-#";IL&5FEAA?=??=<===@JOKIC7504FB>8+8CCDD=0)&0" '."#"8A<#,$)(!#~}~~~ +~}| ~}} ~}~~}~}}|{}|}~||}~|||{{{||{zz{{zz{|{|}|{{||{z{{{zz{|~~}||{{|}|}}~~~~}~{zyzyzzzyzzyz{zyzzzyzz{{||{|}}{||{{{|{|{~~~{{||{{z|}~|{yzxxy{yyyxyxyxy{yz{z}~}{|{|||{|}}~~~}~}|||{{{zzyyyz{z{||}|{|{|{ |}~~}}{ |~}~~}}~|{|||}{{|}~~~}}~|}}~||}}}~}|}|}|{{z{{|}|}}{zyzzzyzz{|}}}~~|zyyyz {|}~}|||{|{|}{z{{{|}~}}}|||}||{|{{{||{|}~}|{{|{|}~}~~}}|||{{|}|}{|{{|}}|{{|{|{|{z{|}|}||}||}||{|||}||}|}|||}| {|||{{|ā}}}~~||~|~}~}~}|{|}|} ~~~~}|}|}}|{|{|}|}|}~}~}~ }~~}~} |}|}}|||}|}|}|}|||} |||}|}}}|||}|}~}|}|}|}||}|}|}|}|}|}|}|}|}}}|}|{|{|}}||}|}|~}~}~}~}|}|}|}}}|||}|}|||}|}}}~}~}~}~}}}~~}}}~~}|||}}}|}~}|}||}|}}}|||}||}}}|}||}|}|}}||}}|{{{z{zyxyzzzyzyzzz{zyyz{|~}ˀ~~~~}|} |||}|||}|}|}~}|}~~}}}~ ˽ˁ؈𯮧śҒҀñּ팯ĺхۀ쀎߮ހ旀甡˸ﹻӧɋ߲ߏޥ݅욢ڋĠИԶр̾׺圌Yv&_nHRv˷ܾ҇ͨٱ㕃͖{β܏ݮԫ~䨐oюޢܩ㰔ЙĠ־ч拞ހȵۈɜĠ֘ɖ͕ʏ°ݱۅɼ޾ƀ扌喙ȓ̚ث󍋻戒級ޅϚɫகȁőܥŦқ۔¨ӽԬ薔ÞڈʩՒύ녒ȎՆݬǾڲѡ۪ޟҜعljĴ۪Ѐဌ؄޺ѯى趪zoͤe4T]l䏚ª߃ƉNORRRSTTVYWPQNPSQX]dfdgpokmjODGOQPOLJHIJNRSQPQRRMIGCABDEGIKMTVTPSTURSQNPNLKMKLLLJJHHFGJKMMMLIGFGFFGIHJHFFDDCEGIMTZWRMLJLNOQSUVWTRPPQQSTWVTSQRTSQRSRTUTTSRSVZ\aejmolidbbbdhkorsrpruuwwyurrrqnoquwux~{wwywvtrqrppqqsx~utvzwxw}~}{z|}|vsrrwzxzwvwtrqppnooosusuwyuqrqqspnmkhdfhgjmmljkmmqrorrstutzzwusrpnjgdffghgfggifa^pQ{Zs^bGMn`DtCUQPXWWXXZ\ZXYX[ZZZ\^][[][Z\]^]^\]a`_][[\^\Z_eyqȽ̿ժ駢Ѭ߰聉ԬٮŶȡىݪz𚻾˷׋мɺ۴젤ɵjy߆l̐Ӽ޿Ϯ씕·񂄉ƓȻИʥㅔϲĄ逭صзƢþ輫д߶悎̮Ϳ蔝˾ރȴٿɽ׀ӥڎ比ߍڿǧ뎌ʴ۹ŸݼΕŰ聆뇉Ԙ՗􄝏䅴ʾėɲ֫⻯ٸϰ󏖒ù웊പބ􋗅̼Ⱦޯс܃ĵ̯􏈻íεȋ׏߬ܔّ틜酊널ȅϦߌɿʵ¹炌í֫ɣ̸ʺʻ󅄕иՑޟݼީꌚ񐖛Ωʬ׉Ͻʴ̿͟*ø̾ɯɦӴ㩂ÿOURMDM25_T7?R]WUi]JFCHS:>/)*J47&0segdhiYVWZV[UU^VV`]_\+42_OOVQHRJ7BBA@A;978=PTIDJSRRT1???>?@BBDBAC@@@AEEECFFDBBCBCCDFFC?=>>AA?=>=>=<=?A>>BECEGGEEGGIIJLIKKCA@CB??==>=;;;<>ADFGFGB:;<>;<=<;:8:;<<;:<>=<<=?CFGC<<=IHX>S/57MQFHT0-XYI?PHIHMMIFOd+o@IBF@$.1;Q.NK0$87UI>S0132NKVDfGPXbYqMbAkXQK]kC^E`N`d~ZtufhqaLpZUQXugs|~=HLPbЇn~c{?ni&qmĉktmgQ`Xepiքo~njibEX_vpxި}Tvowef{pNGvrȤW9G:LR\ws`qlTgUHknqgJceWf\Db^n֥iDRB=\/"8>`2"#CA<8khOXHJYlLQ'%=.[\DP\UJP3FOKS@;_@BkSWJED1E8D1GPOZHmRhP?;p91Pce]5_2G+%#*:VKC,d^u+N:G7T6hmqq]\od@F{ZSnCUgD6:N]tgQs|^S8/.(^8,@=@Cjzy~rUL9XTRXOI[Zjf_\(:JN_WJQK-!)34( @*&)2.64%!)$- #1=)*3K9J3 /9:7!++3A8!A#/+E4>DA;;YmW"#.179&.,./*'"B)*B3+^yia>=VOlLqwS_o>]8_L;CBd;@c`upS]gxzkICOWNiCg]VZHKF>4&51.E+7A>=E&U\4V6>T:0GORyWUxe>GpF55B@7\YtVxuuyαruqqqprrtstpDprtrw{|~}oilrssrpnlkknqroorrrnkjhghhhjikluvrooqtrpomnmjjljijigf ghjjkhgedcded.ab``abddiorrmhfeehjllnppnlkljijknlllkkkjhjkkolikloqrw{|}|yvtuuxzz~~~Fϕqqha}|~tǬzMr[ežysuuzyKKvjch|yomjgrdbZY]nPBQ^s}{KgV/.5BYI=PYYKOKpubocUlgpYeonvfwfǰhedX]6QLJKHLG?5TK;/+2BQNM7)@5MHG@<5/*=>;2CCBDGE?98I@N()'))*,,-+)6236<@A??:032<726C&)*%$$$""#$#')*L4CKƽq⡣JNsutr|wnyotpѳhfYUWrkgЬѶyttwvgegfhbX^}dncnignR[fg[Wttjzwtir~{ۊ{zêɫrp|fnlts}mom|qqcqi^~dX`iSRa[`v}cslhxzktwujkiionpkkle_bboxt~xpqvflaemqu~hqzrw|{tpmVYhzcONJKKJJOH{{x|}uuqmcd\`hccf^]`gkqv<:9<=<<@KJ>lbb:7BA?@FEA87ihidehebabehgo=>=>:omkjiiggdjflfc]gqld`]ckb_^^b`5g^XVSUVQS[WZV_kW[SQTWOKOHZ_`]QNL`]Xsxw{losmWcmqqnY]sc~|ac8YUIk6754.1210RSSN*0/.,,ME>>;7>;LSNttwad_Yd_nQKLPNKJs;YzzlbjvlUfhb~wwuţlׇ`gzRIjVrQz?zoMcQgZRMNOLaktd^}SKK^r~Phao@snXpȢ}dOdX^Xha[pqPD>6uefhPMHEZrdup?E:id@fx]{]jLECL]pUN_H^V_a2ZESS?HAD=;7=D?9<8.691,83526D6('-().,9113(1143;486/318>6668765<;5)2)3?R];<>ESF0F=M>;<,?A=:5-WSI668./U396566673556376668753+45409:9;8VW-431012-35.FV-,ONHGMPQ/1230.I+.0O,/DQ/ONKJ\47-664466463612454.2940*L*/PGI;/H54K463Q)3;43022..-*/04210.020.-000/00/+,/IIQOKKMPKJYFQTSPQR@?XVSNHQTRWTQQODKEEIDBIR+2/TVVSQT[`0\ZV[^Y0[P[Z102346=:7463100///01/a_\XRQLLLNJLNSTX1/WZ^.\\0[]ZRNMH@AFDCBEB29%[WTVWQTOSHNTA<2TDF76/:<03=:391>GC9?FK7=;>A:8>=>HD?KB?=4BBBHB:C;AKOIMPE=IMQU/.NAWRQC5/01\]V0WPGLH[1X[20514081G:CJ81]>RI@D>3Z=\6=7MoLiT1=<:86>CD@@DFC>C@tox;:>A@vuhuz>dNTrb_?ICEIKHHD:.7JT\;DJ7RNM,KXcfr=9AIGWTKCL^\ZVVY^_XUMWY@[fdY2>`_XVRQKFEEEKGGHHHR[]^YJE$D9DFMNE>SNLKO=Ds^C>HQF/X8(M0NOV7CIB7,,*'"'0,!*3--6.&"!#* $I67696,*()'+'',)(-+-* +%(,*$(% !&)#"$%%$%-!!"$!&I)D'1#-3.9:/ 1,0".(&+!',$$*.0#$! $0fhB *"!  $" & '2L$4;W-C%X-;8>>KT372N3LmSH#% 8-GEE;ZF<14hsyU\hhcikMfxuxPO[[+VevpZtr['lӲϞcth]QLI5>SV4UKWPL;nVGmN~l^Pe]L}z{robXBNUto犮Ǧ~mYJ33yzÆ@!4poG$,!4AZ|tQ^y/GfirjJcj\iP>O H_u`.&$  > $ + .37.( 6 ))$#N\KM>4IsWC!       $!/(-$6(0'7A23   K ;&  +1*(,.8?eG4." !'41#*1ŋa~3&b %" ;~9B," )>6:<=65:6B>B;555B?>OQVULMTO;DFHHF5>PCSEx?9 681L%'$#!!##?<<5 83/-(%*&664WWYLNFCPQY=;@GDq{t?:c*$/&&(-$, A476@XED4CYI#0I)$wY+ !"% +" ,"/$ )"!:=-89 +""?K?6Q1' .!02'$ FLH5%1PGSJ-+<% 5&%$&0;N26C->7?<3!)* + ' "KGA.#=01/3!,>1*!,2   !$##" & $6A.)(.>5$70C5:A`29"W>?QJ7P4&#/.%50++* !&-8$*);-/ )& 'K'('%# ## (#$##07#  !!T %# !"!(#$# !$'%$# %&%((&%$# !$#%('%#'*++*')+)*#+*/-,)&$!#"$!#$''*(+,**+-*%"" "  (-('('#&#'#+ '!"" "#!$"  $'!#$ !"%#'%&.0+*&!%%.+, .'&-(' $,#" &-*  ! %.!/'# 3%3 *E-MB-980!.8>?;;??=EA72;IGD@>DJMFB:HM5M[XM$-JIDC??<87;>B@?@>CC9:3APSYWDBRWU[][3?@ACFCDGDAACDFIGFFFEE/CCBA>@BAA@?@AA@?>>=<=:=AB?@ACCGHIGHEFHJHEEFA?>>?>>=;;;<==>?@@?@><;<=>>=<::;:<<;:;<<<;:=?BKD?<8?QuOJ^3C')Oztqv}{wrwAUh~~ƌfpf_WaLENn|~zwv~qsotUOxvIWǞè؄]ӿĒnirp\^|>AQXEVd>3+g_\mjFFI\Jwidc[s8g`g~EttudW\XSL9fZAOQ^KZ}VjmEVvNktLDWXDILR_WWZ0RG&0Q&::*V^NO]WINL;bwR`4*+,.P]WM5a5V;GL?CM8=M}rQX6b>C1>BS,VP5QO:*8DJ4/>5O&+9L5WeJZ8A3N:<'j|xK@1H:>bwoipXbr6[:GBGDrFImI`[ltXdcwN;sVdTtwJ4P+'\]+[3=cIFluuyZPEZAOU>JEgJ`R2BLMK@nR8#66D/!-#"26/, %(%),%7;$L(<8>?,"*!'*#*4#)3B2*?7LW2453DJnVL --3?6+3/-)'C7,@5)pWoTZ54][MjPN^Rz{cS(MM@If??_LhpRM\IR;W[pdbi_EVKZ@fSQK-822b,NaU/3$$G?DY<9CHg?KWVV@41i3\aZxvػforrstvvxyvsrpnorw|~hfiijlkYjkpssrruywmhffghihjjlnprqpqrspqpqqpnoopqssqqonnlmprrtwwsnljjiihhhlkjllligfgfillmnkikjklmqomo pqpmljijkmmmnolpnnpqsuuutrssstuuy~|xxx|~}~}~}}~~}{|}}|}}}~}~ͱuȫgĕp}~vZ[{O⹯vv{}|PommhYmstqmibTc[QNKvIPYanjoR}q10/R,1ZEK[L[hgjdvdVibXyZY~jx{btj]pXndd\VOLII?0KG<.,3=ELG5*7=DCL''')(,.+,,+9559;;=8:8332:204D))%#$$""#$$%&(''I:]}OU@J{yu|{nwdopֱaSWacôɮ`u}qwtoglc_`cngjdrKl_nXda]Y?~ĺvxlyɿ{k˵锏qs~´rrkweet]vyulZUefTZ_gvneejnjqkvutq~uqhbdgkjptih_cba]XZbf}ov{lmkebeoqtpulfjinrv}y}qh__ioaJMQFOLQMJ|xr}|ymlncldbhf]ja``hons<:;;>@@AHC;hae84C@>?A??h>vj;sgie`^`bipo:;;;:9:;:::89ph_ccb\Y^ag``][111]1/16\XWVRPUUjhaZ_Ua_ZRUWRTOK9XSJE?Btknxoxwb\qgjxmr_Y|brsjsSe4340220.QT**-/-)'&LE?=:5:FCROVjmHWZWRTVKMtmGs^n}pZTmVVu}mRskyfc}]JpPZPqbldYLVTo|X[NP?XZE=YT}zX]`bIMlN|q\hQWfinkPLLDLOb`[hsZn;qn;8dTgfbt?A=97?AjJlYsOoQFEK@NTl>jJFU_W2.JRXO36B-&%%52.44D7-/:794,+r$.2ZC?9:;::%#7?G4---,013:066.%2254443544>;8,-/*062*!%"IBKS:VCJ\fKK7}c;I=7;(Bxvje]umaSSpoDUcL_nHR5:9aBHTF>^zY%U=,::ABA@>;@:4/?:;><898;><4<<1/340124ZST7:6764878654556559983/343-/8;;8O32522/74023,NQNIG-EJX,-1/3V-SP-242H?:87RKK?C29+6544655433542241.+00,,Q+NPXHE8E090N,;13230LBA)1.12/1/100/.002/020,,+BDDCDEA35KVRTUQSQQINE=36?302=A;=>?CD=;BHC<@>:CE@?BFG??D>7CCJHA@@D5HKREGG@BGOLP-VFK+-LLE201`XTT/1-ZT83\Z/046:=;>B<9F@@<>A][/>D@4`BI:=:=:1ZFJ><:eSH9N3??=mcL@?><@BDDAAB==UQMDKKIJPHA`j:6AG1BPD+E09;K=?1'!$$(&$+" (*)-!#!')&%+&#" '(+,')(**&  &"-QD;./!"4.%)23)(-0*%*&8'-*+#(  63#! %#$RY+ ":2 $!#&,(%E( +w2<&>('P@%46Mpb$!?&ytuDA'"6"4B*X@PI793:lbWD?RRY^wP{x{y{qvhKLFV% +?ztlkoqrmye1Dm虊XoPF=4?1'*;6DPMI@PKIFU^8a]h\4Z>>87Ed5&!!    #,73'  ,"BG;>NsNFNB*TlB=      8(! -"0%!" + 0'01 .%)2B[I.6 :"  K,/T/7 >-f%85;' +#) %* 7iU^W/   'J:0%eL +       +  +  +  (#,H2% +      C4F7+"IBC/VF0+" --%40:)@/,!&$ + (*9" "=&91"@Ԯy缀Ҫ%x>%H%(#0dÙвȠ˩ƯЀս»ȼfiB-$.9?7!,O>;@6*!*883->;94:82+020. !#$#& "" " %"'(nY^їCEutsxtcxsf{}éc½UP\dϽѹnvtxxodd_jeaes}tqko;UQeKY[ZW8smkZg{ZdWihlTPh_`fhd~nkey{{źpa^imbhnoyrfehhdolxyyvzwmffegdjrnsjjfe`]]ceykr}yxzqpneejtuzs{|geholkloux}}pth`YQW`WCDD8@wDEB@rjln~yynolrhdkjg^^c\h__ak`Yd][\ac]`20/044215.*LIF$".,,-1/1S5e\3e_fa^]^_^d`0012/.1210/-/\SKPTTROPMRNMGB$#%F#!%FFCCA>BBUPKEH>FD=;LDHQHQ?BT?JFA@._`^H%$" !"#">A :81-(%(..85=NN3@>??DF=lC|ri`pp;_*&/  =4*H%+H:'(&2%4@6C+0- LjD05   + !M%+$'TDc4@>C0=3++&%#9/5@fO!!+.2N/0,*%" +,.%,"//M&I.(7@:'*,% '#!!Z$H5;6/A7=)-@)313!-!  + " !/7  $  r(%/8+E1:MX@B0r[3=:50"AGGFL:%,,45&04/$//+$-!2 #"> ".("4)&*('O%$$#!"!!'%#"$!"O""$(   %""!$"%"$&"##$$"#!(&&&%!"" &'&(&&%$*&),*-*),+3/+'$!"$$"%##$(,--+)()))(*%$#  " #$'&''$&%& $! #  ! ! " !! ##)!! # "%!!"1.+++*0. '&2$&!&('#7%!! !+*! 2$).&(! 80*#:/;8(:4-28;9<=>AA?>:9;9u??gippiiWW?568k=>;4122*+j19C(&* :>;,0EU`d8:8@ED>939HC=C#?KRLQCLVBN``ZI9IHEB=??==?;C@?=@>>?>DI<65244FA<28>@BF>6DA #&,6+1 $%+/,~ ~|{{|}~}{||~*~}}||}}}|}}{{{~}~||{|}}{{}|||{{||}|{z{}~~}||}|{|{||}}|{{{|}||}~ ~{~~~~||{|{zyzyzzyzyz{{{|{|}~~~~{zzz{{{|||{{||{zzz{z{zyxxyzzzyyz{zz{{||{{|}|{zyz{zyyzzz{|{z{|{|{|{|{|||~~}}~}|||{|||{|||}~}|~~~}~ }|{zzz{{~~~}{|}~|}~||}}||}|}}}{|}}}}{{|}{{|}~}z{z{} +~~}{zy{|{z{ |~|{{z{{{}~}|{|{|}|}|}|{|{}~}|} ~~~}||{{|{||~~|{|{| +{{||}|{{{z{|}| +{{{}}}|{||{ ||}||~|}}|{|{z}{|{|}}~~}||}|}}{|}}~}|}|{|{|}| }}}|}}}~}}}|}|{|{|}||}}}|}|}~}~}~~~}~~}|}|}||}|}|}||}| }}}||}}}~}~}~~}|}|}|}|}|||}||}|}}|}}}|}|}|}|}|{|{|}|}|}||}|}|}}}|}|}|{{{|}|}|{|{|{|~~~}~}~}|}}|}|}||}|}|||}|}~}~~~}}~}|}|}}~~|}~}}}|}|}|}|}}|}||}}||}|}|}|{zyxzy zzyzzz{{{zzz{|~}} }~~}|}}|}|}~}|}~}~~}~~ 琈ԁἳ՞ǿ껟ַͲĥȮκ¾Żͼᄢ߿܏ץۂ끈ٮ򿳿򘕐ֲ׆ɿȕσ߆䤳˛ƛ߮ԣՠ؈ن˞ǠȎ͔ŭݹюyٳʹ҆ƺ啅ɸɌ§ȓҺ֝ڋ𜢉݆嗫ڍλ۱ꡑڂ̀βɯԙѵʏܱ“᪥䭆ނԉ嘎ƘҬĝ؀Εᵡ븇򢮁ˀǜ߇ުﱇᅦ§˘ܭdzȉ癁›òڿ՛鏍񛨐ܞݝԅʸٽȭȖıΩ适˞ΰƏϸ򨨉ہۊ񃘋ޒfLgeQm_`[w4Xs˨ΐÆсXGIMRV\[\ZUT1PKGEHOTV\gmfZUK@>>?@@ACCGJMSSUTTVQIB>>??ABFJPTSRST1YYTRRQQTUVUWXYUSSSQORT\bagZSROLLMKKKLNQSPOORQOMHGHIJLNRSUUTUUVUVVVWZ]][;\YW\^_aba_]\\[YZZ[[]^]__`bbeddqnloolhedfghefed`^\]_bbgjijlZmnptx{~|{{xvw|{vqmnt{xusrrruqqtuvsqopw}|}~zzwqsy{}yroopuwvy|tpkfhihheb_][[]^^_ ```a_dedcfihhhG_jbuX|z{yzewxAhS`]\[[XZfdgc\^^]^`_`^^_bcaabaaa__`__e_㋎ȣeebdiloׁ̯Ħ䝀˾ㄢЊÿ¸ځ͚ʴ~ۋðג¯ѿϹ퐓㛟|χgƼűº÷̀凎̳߁ʷٝჲܢ̷ۇ܊Ԣíُؾ򋠂ŀĹр逌²ʹèƶƶϦչ􁁎셏ہ耚󄈈ΰƷѿƸկПʧЏѽ̵ފټވ辌ґϑʼô񬊔立ּŽ̝пځĊɟʣ•̊􌕂Ǵù漀֯ǂ셣żɻ֥НؼȰэ̷ȳͻȽӃ˷ҽ԰͌򎿮ީݓ¼؁񚚜ڼڌ􊊄ꐈە򠞙ɼ郂퀂􆑓½ЪʳͺǨó°𰗌頨ڙ𘪛솠׎Ǹᛝ܅çꀎĩPϸʺƾ҂舏̉ĀЀⲀJ_V@DZQW96RP5^EFOW8UTNI<<=??ACDCEECEFHKJHGFFEFDDA@@??>@?@@>?CDA@=>@ABBB@?BEFHGFDA=;<@@BA>>><=<=<=<9:<<=;zHn_^[H.<2U;Q6?h_D^0GPCT:U5=?95/@:VM.B5V.12CDCZ8ESPRQMG@I36LniV,1B:;70YMX3T,Y+H@?39BpP<5bA7{`r_-,pN^SQ=n|<>LVìjux[_bYPnwlkgj[^zvP74/JhpstxwA[Retwd`nuur^ysZgnZIbnrSIDSlJP`sN;2HCI~zFM;DJWMoVsa^vwjn`QpSLH:BUN6/Ra4Wug`^RL`TK4>Z[;==*C4A`54&LUI,3+'c[vA`[N{@F<|QlOUI7D<4RUTeGD;JP*8*2W*9L10[P=H=2((D,o2W3[GZE'V>EI@|93bV6709ADqo^8bTa\|ij@R7o[>9ZNeStM./I^Y{\.Yi{r~YY7L&B-3F1NB#7km\m[@EFH_wQ`gxrsQURIO'SF?L+;%,/7+ -%-'1,-%"% )+!*$"F)L4?E! /3#%"$. &.5-$"*.FQ@9,!<_R= 1-68414-+7#")I) -2pkft5CdaVjO~rG9_o]nMJqOII@kG7@+EOTED;_aZBFreS8XHAT1CW9;-3Ax8H63:f$L<4F%_XPuY3}<>xpnnuiFY9KMP>1G3?k|5Uj\cQl{qklrtvwwvsspljijnttx~wuldcdffefgfhklqprrqtpidcbcdfhijmqrqrsqqqtvqppnoprssvvxrqppompqu||vnoomklkijjkllkkknmjjgefghiknppnoppopopoprsqqpqronruvvwvtrrpoooqqqrsqtrrssuvu~~}|ywwwxzyyxwutsssvwyxz|~}~}||qǂzУdlT_SUSvh˵~z~~v~KWnlnjSffqrplgeL`Pz}FSSXWVZ_OX|l75332..;H{i%)H^ae`[`RcebWpƓ{csjabrgIF[OK:TKF<-07AEJF4(7LDDD>B30><;7;C=<8ED?==;>@A@D@DGG@D`mtigd]amqmhr;;:8987:97888jeifdY[Yag`25362229@;2WWPR[W6XM^VIRd`MYWUQQOKISOTCE?Iq}{{qwujff_Ys|xTiruck``877463.,RO*,-,*.,*(MD>:86J:FCB[TWQGzayPbLUNoRPu\GboSxnȄqmhoYfaf}XQVLw~tsdNZZ?bzIIBCL`cJShjL0:nUPga^x_`n`wJemujCrpdJZcY:drrFei;_FBcmFE:lI[^HVOM.gM>5,4@AB;6,c83/h>241HK=;./00$4KA?EQI:7;4887;259;771/3CED40-.,/5<7/'.&#(/743468610;;5-,)&)6A$$3?>9CRKB8la`HRgZNDKLAOHv~qeMaoMS}wTziN_WzWF@4/`e;gGA>'$l31/9DDDBBA>50<;7A>;?9;;<;9:678401.15NQ568455497652178557776562.0.E*=;XK98945202130.-JDLGOMOK7M2/TJTC.02561LEU100.WFN4.9534023673111533264436355+/.KDREEBD65DQ<5353*;4+53452200033110/1013/,+*GQLUPLPLGQOMNVRLVOOLLKHLKU[WTRLQIMECDC?=,[R0.YSSTROSO[XU[\__\YX/0\Y/352897221//..//2002e]WSLJKILJLRNPY.\YXSNISXXWRNJGED@@AACDBnG3?UQPQMONMOB<69>7:7<5=E.D75?>BBC4:@>=BD3AMB>AKNJ:H=CC:JKB:EEGBFIQOOSU-+KTX=42ZWOR[.4834UV_169;;=;?0G./9JS?)**?05AFBcg\J]D@964<47724669088599124>IRAe:Q96BEEBDFC>==8`?FMEC>?HEKGWYV7ZOPOG-ETbo=DBBRU\PLG9RTU[aY\`^]VMV`I\_YTHQZW\ZPQRNGLLNLIJHLPMIWRGA>?:JSTIIHKGHHFL/OU73>(.7,:/b6?:1]WA&1,".),**2((-.-'$"#(())'(!,B$53=.$)'&&(&&'-,)'*)$!$*($(.* ()'%(')%$$,**+! >(:;A0%()!83#7&/!,+"! ,)!.!!#:$ "! DH2$!#, &7H' 2!T(KEXEYF?(Tg'z+a=Ck<@.'2%31VlegKNA]o[Ov{`a\rlI:BZO+ C_amsjo|oh4>Gcvw[Qm~蝑`LNRG=KR?/"+%7+MG>>?N@>lXfVSS_zs2 #20=TA47XJYm[dxyp\>1yJ-$"'8"   =#  + #  "2&FE_;ST?h+7.iFW'  + +  #&$+- *  & $ #&<+(*)1"%$%* 9?')+&*'6 7 C@M1Q)  0^S_!*  + $K"' '6D2+u      + + +  +!*  6.  ^K>=4.,65H45#;#  + + /'+8%) 8$,!( (6=LH&g$"֚ƉǍ{&5!!F#)$))EOmü󐸑Ĭ޴ǃ̷PZt@@?VXѸ׿~|}tzISjfidPckvtvwtsO]KyHOLPMKLQFPt`)#"%%$/N:1BBFStĎ\Qŧ߷ssj`¬쬖xzgo_>AXRQ4>@@+&15<3!(B8CMH)A:JC8=ND7=;;9:766;6:33-3^N_UW^fYPXTICGA?PWTh:GJI9C4FObaD&$&$'$##A<:6.+'#0$/*,A8?:6_KakFRAHCzcwJCcB6+E:, 56'+(.31J='J!1!2.!7;, %kN,  +   +#%<$ % &70`S33`K..K*% ):FL:""$% "18gXE")+&$#9L34+M' 2I')->$B>'"49,'.)! !")++$$N(##T3=5;7T0&C%-5<%!"# $! #" $  &!(5610e[ZBG[TD7DO=6/=OPA5R#:+'?QGJ.))"3&!(&;9:8A9;CDl[R@b`[E^<31Y::q<30--0/42@DC+C:;EH<88.A?>DHEHKLJE@KP>RURN?DGBDB<>@=;CBB@>@=??<:HC7303/;C@569B?@=HMRVXWVRRNKIFEFHKLPTVSMJECDBBDDEFHKMRXZXWUSNJHDDFEEFHMRTSQQRSTTVXUSTURSSSTTVUUUSSSPQUYWTURROLIJJHGGHJTVRNMNONGCCBCCEFGIJJKJIILORSUUTTTWWXZL\Z[[Z[ZZ\]]\\^]^_^]]]_`a^]^`aabhkhdgonhhijkieccbabcdca_\]`acehjiijjlpqsuvytqorw{zxrnllnljfghfgcabdefhkrw}}xnhny~{zxxvoifgeb`ccdeccedbcbeffiopmnolnzKscraoOA@N\KN;LXOCHOEPQYDM\O<{>wjeaY_YWX`UMLTWXUZ^^@:1:A81.U[_RPVZQZOPOLFUZ^ZNWRQJNYY/28AD?@CCB?>ACECDCCDFEGFE&DFGGIGFCA?=><=BD@>><=>=<=>=<<=<;;89:<=;=<;=;;:;=<;<;<;:;A=L<-+62IP.<3O105:@20EOTOLPLJMG9_=^eEP?3NJHZe!#DS@7<;T*_-]es?Q3`ZW`feXrw2|VzrLK{XOemNho[֚f__YP]}ngtjt{gj~mvY04'h{jnklxyzvbJ[slpgrkhT_QRp`QvJwsn}QL^NJxv{^Qʮkqyf{ecviPFJetyĹ{nqh{yۊ«rZTzf\`RFV]l{jZaKB4qdZaUJA\uK,p=TJ[S=6=KFKJLr]bARFgYqea|cVPZ^[[EI9UX:=}tVUUuhu@D3N9??:iRSCB;97;@AY`6A=1]J@,)7@NCH^goiFPLBLT>;1TKQSS=0VA8C=-XAI. ;=PMhRaQdbSO26()*&^bn`=FKTP>G`CRtiW5>%PKlppuJBHDnZU7B2:^7>D(9YA@A&69^T>zGe`!/8:3D:6"!*10*-3B9-.'32+ ,".\T&=`sn($3/;55218((9B+"<4sYm~E>dU8C?V><=@V}HUlLD>mjM3H\H@F5*=PM_Zngv|c1PVM;0LZb2R<;<:=EL;8^n9~Yqf/cvLYuy]hjǫzȂHXJ4+.;prf/1[pIJJiudlmqtstuqrolkijijlmoqrpnkffhgghhhijjmruussrrmjhgfgghjjloqTrsrqrusqqqpqrpqqsrqqpppoqstrppoolkhghggghhopkhhiije`abbacdeffggghghjlloonnmpoorspqorqttrssqqppqpqstsqrrswxwtw|~z{zxwwuuvxwvvusqqstvvyzy{{||~~~{|||~~|}|z{};l}gڠκǁmu|ktmcyamqkibtgySϐznpszqWLvvlQKf{sqpmhc_PpFSPOTU]a[j98565342=?mG:N=[[kZ[M`iVXhZt}ium[{l5eYMK:NOI;-4:CJI@0!<%=CD>=*9>:96@A>=6FD@?GEH''(&(,1-,,**9:379<:8<>522:249@+)'#!#&'@>A#$&&%Nf(Ix_Ǥ]s~h|vnvmuϼaƿcWcúȿpuy}s|zrkficĨemjihoZ{__g^XT`pccdѸʳǀù̩|֊ͪěc{{bn\N`rotwisg]\giebfc]cfcllZ`kywsffWVX_dm}}lij{zsla][[`ca`^c`djknx{{wypjdgmpx{zslknz{|agcXQMM{w{zxusopubcdddgcccfmu<@>==?@>=?>9ge54>;943-O*..0562.)')G=98IRSHXRXL\YHLjtJMPZJuzj_r}[vZ|wvhhxaTediIkgYVPG|}wdsDFIDEfK[VYeLbjG7soUbzbm=wQAbEcNYPJwPJ{rL[PSC?vh^S?WHdl_Sc?H:jB~IGJ@>eJ3/R[D`17du=?F;Y8EQe@b48B71B@DBJ:ADDEC;?0,=>><;"#6.)67>VLQ[USSi[[J`YteL@LCwclAMs|xPPPY^MpeVk\cKO?AEY1*>J7leNQA&b>8F19@?<:?;9:;;8:>6VZ4823ZRL4474542/463128:568643362-U-GB0971376651/3742.5O.FKDYUOY21KLLE/5234432OVKJWRRXT/,9653212134144523152445559/12P*JJQJFEUAK:32+,A3F*2334420525301/03003.,)-LHOSOMLIMTPLNTSQTLJK?BJLPX\UVQMULG?DDB7AJUT/.WSUZUUUR]XRX]0\Z^]0/]Z1422656260//000.01./[YWXQNRTMHNSTT][YWSOIHQUWPGIADBFEDA?AA@57->YUPMPOMK?>:74@3?7A=4>+?:8=A>0?26;CDGLE9>C7GC9C=7BEK=JMKQIKWW/*S/_5C=SSSV[Y72TSOV[.5><;;;J7:=ed`dF:A*! "()((*(A88GR^5:6570aW4171.96642_4N75MT1-2;;6K;EHDqVQ?=DEEEHD;>BF?BCBk>8?bhhaR8887=GLCF=?GHIGKOUkZVTSN;LYchy>@DNWTKG=IWXV`^_XFWXRU^OLYRNOSUZMPJIGIGHJMKKJJOPMGNRMA><:;RTOJFHKIFHKO/.BLF2(C-JK\:7393cK02.!%&'((1)!%.6)" #)% $(!'%+%*$ A!A=73,.***-'##&()(**'&(-()+-),*'(% ),,+")&'"%*( 'I;,#1 * 0)>/#&&)!&%)("$!"&08</") #&&   ! +. $06/'#E:FCLT!lO][k~;:fIjiA_P[7Qnlx980%) $!( KELIA]jUeBTNfaPg_zn~ZacWXfoMU^\\2 YxX[^bq{ni\H=?B-(eVTUt|a_rb;07\gsj˿osizʇǤfQNnQ-)4.)1**2;':'^`URI=3Zmu(!H-,(!':7Y8?AfF\e;]Pe8(%0483 +# ! +&, )5 ')&#(8D=0?FIA4<.  +,59' !,(? #$=!3*!$#%*:'4$%$  ,0&)0-Ihh"%2$%."#RtS( . #*#YN" + 0 /( +6*     +  ,& ;D; +   + ((LڞZrsl]pmnrpqrs}|˺ȵdȼe^eȼ}vʀ~qd```ecҶtxrorwYwOQMQPS[phg|_uedgtuǫ޲p~fsbXl}zywhqe][fijfgeaghfklY\dlkneh[[]aelyzlkiv~ww|cbbeeb`cdedifjomnvqifoomhhhjox|zogfh~VXXQJGEwwssolkt|llpdhceddehY[\]`c___`ei494202500.-)JF#"(0141845.S^67:m]g`]V0`^__///.---,,*-/SNQFHKMQRX//+()("$((&$>?=HYPN*C>?<@?AD:@A<;;964::D//2;F]VQK[c]QTWL=9;`ETW4>7DB;B?@CRRR-*-,*''#@ !#" 8/+*557-:9?:EB9=fQZ>A@GBAD@8;>D=?@@e94<]gd\O55337<<32),00106899;=AA@@AA@DB@:@B;2110/@A<86=A?:<== () ,3/34%~~~ ~~{{}~}!|~}||}}|{{{|~|{{{}{{~|||{z|{{|{||{{{zz{|}|}|{|}}||{|{|{zyzyzy{|||{z{{z{}|}}|{|}~~{z{z{{zz{||{zzyz{{{|{zyzzyzyz{{{zz{{{|}|{|{||{|{zz{z{|{|}||{{|{+|~}}|}}}~}}|||}~~~~}~}{|~~}|}}~~~|{|}|||}|}| }~|~~|}}}| }}y|~{zz|}{|}}|zyyz{| +{z{|||~|||{}~}}|}}}|{{||{{|{ +|||}||}}}|}|}|{|{||~}|{|}~} }|{{||{ z{{{|{{{zzz{|{|}||}}|}|{| {||zz{|||~}||}~~~~}~{z|zz|{| }|{{{||{{|}| ~~}}}||}|}~}|}~~}~} +~~~~|}|{||{{{|}||} +~~~~}|}||}}}|{|{|}|}||}|}~}~}~ }~~}~}~~~}|}|}|}}|}|}|}|}~~~~}~}~~}}|}|}|}}|}|}}|}}}||}|}|{{{|{{{|{|}|}||}}}|}|}|}|}|{|}|}|{|{}~}~}~}|}|{{||}|}|}||}||}|||}}}|} ~}~~}||}}||}|}|}}}|}}~}|}|||}}|{|}|}||}|}|}|{ zyyxxxyyyzzyz{zz{{{|{||~}΀~ ~~~}~~}|}}}|}|}~~~~}} ò삿潺̻͊ŝȾ倄ݾ≧ڀ턌Өӫʒؙŷو޳ƄȕܝΘѭӪȱ̸ᶻ֫ѯӂƳِƻۻżɀ͈ċ˻签璁枪ůڝ҈ۄkɷΥƺ՘䉆郤ݭۥ߃Ӝ灄ßɲ͛ѬǀȶӀБ˅Ӿ÷е߶֐ա􊜣̄ћ敫Չц۵ڛٮ؟뀒˂휺ѯԡ皪ڢ׾Ҫ×婱ވϮѣ鹁ۻ孊ބƿ駖盀ꊌѿꑞͺݬޓ\z̉іcxùی̆=;HMRTSQOLJHIIGGHIJJLNPKIIGIKJJKJJJNMOTXZZZUTRRQNONLKLNNNRROPSSVUWZYWVWTSTUWXXW\]XWTRTVXURQRVSRNLKJFGFITVNNMNNKIIGEEFGHGFGFEEDDFFHKNONQPQSTVWVWXWXYWXXXTWY\`c`]]^_`c`^adecgouqjfcaacegifba\\[ZZ^_`^`ahklnttuprux{zxsrsssqopporrrtxtpmijijida\ZUTVX\_bgotwzyx|wroiefhnt|}zzvrwux{x}|wtsortzzsUomXzz̴ts]eadƉu]{ncaabacacca`ace`_`bL}pm`xđ߀͒ڌgޅƠׅ䉝מг˭߽٪ȟ㣜픆嘺ŹѺŅԹλŋͱϴӀ􏅄ɵ񆑟Õεݚـ⥨˶쯩üŸͅµɿڱɾႈ񊔭ʀ۬ˎƲηȺȣÔɭ󄊉ǰƹ븏ֵ䳮Ŝҳ䤒Ҽࡂ̹ԔʵڕLJ咝큏̈Ȉ圪߂ʳڮҗӧհ؄ɾĽɻƽӴŕ䬜صԐ„ؾȴɍ⟗𖘢되גڒ좭豂͎կôŷŶ̽ƻ·˳€ފ۰߾饏򐲛軸³wփ۽ѮʺŻ̷݃٦ݜ~Z2]M\TU2+=SJLD?+b9N2CU``GJ@IKQLS]>N>nxdcXbQTSOYYRPOONLU]^7@76;>873/2_?FTaL9PRIXX]d_SSXX__a1156=?A><<=@BDABHCDGIHFDEDDBBCCCDCCCBA@@@?@?@BBCBBFFDFEFECCCDDEEFFCBA?>><=>A@=<=>>=;<<=><<<=<99;:;:;;;<<::;<=;=>>;8887:<;f:HmR77ZJJEQ1NNA3Lg?HYbX15]94/.41MQ0<3O//527@@HNOLNMO+*915hldON>0qDWY"8-N_<?]1ZZUapIIdTMYJY=dl>>QlFhd`fHDd_OQ\]`g[}fvwS~ee_ioaUln~iq[t_rUxscW)$BudPp{ym`qg>ejcqrqbVORI{G}zqlzhsX\zPlp]rp_iֵjԷѺú[TKK^^]_~ң^KHtg5`LTXJm>ST_sKg{ewV1/Cb;BIi[?Z-1@6%@7.8;:@2@*.5DWJBJ;QP5GYQ>ULINXJL$"/'B3;bMg9/[H#LYR[9:S'\jg}N4Q/1=<=8MT^m@KRMfu\YbM^f^NuJ/:5+YXk><8B>5THyRp>)-yXnf]Eh{\6ivU)6sAKF>,|PY+^txAh&_'2S+=$$=8%)>)(-+:4#+6-'#!Q*598,4:16845356!%:8 -'B1eM?.25;cL]I:IL?GhvuJDEa@qO}oLbXPWF3QLA-8[6Fm:8FL1518'EEON?@(83K@:w=RlOb'(,FL4BZYIgjbowJC?:.glhA?@IK\`]nprsqopnmllmlllkjiilnnkjkjjllklklmmmpsuvuuqrpqpnoolkmnmmqqpprsusruurrsrsrqrsrrvxsrportsqmmoqopljhhegghpsggfhhheeccddefeedfd;eeghiikmjlmmopopooqqpqrqnpqstwusrussussvuuuyyxwvvwzyzywurqrrsutsx{}~~}~}}yvtroprrtux}~3ӌyt˯}ouyumkbu{kg`X_skTaceWNdhXn[yώ^wpllrmxU]FGuoiQ`Pqvpqmk^y[PuJMRSTX\]_uTx?:5564598;@JGLX:GIupU~gQehYep^[Ľgqjum>rZNLqHZF>+3?CHD9+ E'?DB:02?>8k7315545632477=::*'$"#$'C;?A#&(('I06"844aՄƃunwzJ}q̺oɴbja«kqiqv{|sg`^aĻiiiWI_tmVWtDkjv|veújmxoh„ͨɺÈ֣͸prqrNZZU`imoe`Z[fa_gcksrmZ_[_mmsvtm~x|y\XYboiclotlha][ctrd^`dil{v|wplikvwyvy}wstrmol˺db^XOLLyx~{vp{ytrjieffd[bceipw;@>@>@@@?B@9ff65?CAB8?BABcd=Esabebd>>iil6:9874686548iVWTMQSSSV]`^d_[]ZXXXWY\W\daYVVSNHDINLNGRPbSTRQIJ]gLDGrorip~zmgkfoYZSXlrQNiyYTYp{~;82V+/0/141.*(QJ@78MPQTV[W\UZM]VSRQFG[JlUkPs=YnrxqkpR~ekUr_{b]wXWkpulvkxqc]nTyy~HlpSF?FNgYTfec`^U|YQ`;@ycgosLBDCGWoITgfwIxs}BGUG=aI_;pE=mbZV\yDD=e8-5JRQAUXNFaXdT=`:BQE?LURF:8'48AFGB'*16B>/B*<8G@9Cl]>;4jgN;K7[0-D5CJ<:84.&14467;7:=7221052014<>3.8/2/4'!!52B(iqqlJD@9YIJtjq{X.<.]P8;<;~Pgo\\~SqoW]k=27YY_]bJIV_bqV?( <2946ICEECA;3.2@:A;<><:;9<<;3-869;:72YSO859630K24035487419852578.LRYFB72.3434220272QDV.YMNPVXU,..QLII6444664X-RMRLNMR.UD9<7-3,01075352022/2532/7:723S,/MPGI@YY431)E:#AH/:74514443200//120/4,0,/PINTQGIJOWPKPOURJMIJ;MRKSYXRTLKPIF?AG=;CRXV[WUQR0WZWQTURUZ[N[2__[01232208974WZ./02/130/ZZ[\TTSPJKQPSW\ZYVMOOQQQRMFD:A@DBAA?A<;36JGZMPPSLID;>G5;>@97,7;B=>44@796MFBC>AAHC@5?1>CH:?EMHFB1AH>@@IPCCKFBNHIKK/--TV=QASOLUKQMOEMLRb`>A57;0LA7C9@5A@G7;bSY[2) .LKT#&%("FKNSWPWV\5033:830/Yfc]IP+/2c9:4NGE:DDBnH29CDLI<>@EBADC<;om^iir``^k4?9D;GA=CKJK@JMcWTSUO.PV\`u?BBMQVRHFM[\SYZ_]JNYJP_Q;LSJRVU[RNQIFJFHJKJIKJPQLHIORF74:?DPMHBDJKIJEIQ0CE,:.()Q=]>>@9`VXm.-$.)-*$&%&8!(//#%#$'!'-/8@76-3'))&*+(%##$"(*(.!)1+)*"**+.*%&)*--.  0(B21.%&*)*""-4 )4714)++! ! HG5%";%+ !% '1$)1)#3$?2;%G?%+@M-KNGK78TL;CEIPOEmOO&@ 1'!9*aWZTWhG6DDPaL]Fj~JYaHYAiZVrlX:P 7mTE_lk_RWK2\[R^^bTC99K)dZ0A1!,V\ZgDMf=XJE2B5+9K~UNKHwVd[cyҚN:5FY>/$?-5,!F+,2SxC\|\c@+ "%!34=6mlCXEQs:*aWO4>+ *,&5,   '  + $ +.&##;_8$!  + /-$  "'$ )72\4%*-4* 0C(:)4(, "(  22O5>:=$T4'",A?]9H! 9 #H&(9NF. +) +4;@&#  +  .S61  + +     + "   "G/& ')))4* + +# $38^ #;!$L?0sBY -*=2+߆wzetP& 03**hcՎϯ|lƀzɖ׿ӥˎ䔞ufT[^py~kMkScHVJg׺YqlhipmyVXCDqkdyL^Rnwqy{~pXNyJIKMPMKMQhOj4*#"#"&,)*(,++6%21W[f׆`Kۺu{]q|fb䤝ڒqc5nXQMe8S=(+3;4%-4=9)"7;5g:@<4*&1,*/420$*%$#! "! !## "( ey|tlswsfmnk8zyltxvs{îfreǺնs|q{x{y|m^Y[]`Ā³ytxf\Zg_LHr\B^m|}yjmkxn}[mlxikƝ||tïPZ^]juvxke][fa`hĀfhoqp^b]^jhdhlk|x}y^Y[dohbkhd[\_cŽZdxzlefiklsfkmoomlpooou{ywskkgZVVPIDE~xytv{urrmoy|ri¿hajdfab_^\`]]X]^bchh4966223231/+JG$"+/04-4438Y\6F3/2URdXLIS_[QPOIM:=:=NR66JP4/4\Q\abZ^a^\^.*%@ ## !!=:1)*877:?@>87E:pbJbDkU!$)0$51#  (-% 3 )./23)M0FB:B2+  % +":,2K'?1$hA# 3Dd_-,*Y@$-<(#<2)*9Y35-H"04=5C=90D@F?r*-!+6-#.82' %$&*&3,*8WJ0/*QK<"1%I)-.&! &"$" $' # #   0YefcB>80D6>jbp}S%(1*,+&&)0):"$& -;@+)---4$" )'#  $)c")(##$&'&# #'%#'"%#&($"% "+)O!!$$ "'#!$$&$ " ""$!&''%'#"% ! ')'(&'&&(++)'&%')*")+-+'))++-)+)&"!%%'(+)('#%'&%%%"  &)+!"$&#! # $ " #$! ! "%#" %*$((&,%*'("(%(3.!'!"" & 7244'#)"(++'++0.852'0 +Y34*.#"###>&,CA?AB<8jk[fenx[\\e/718/5.,-1/2+7B?&ENVZm;>=CEHA859DE?FIPO==@6=K@-?F=DGFNEDC=@@A@A@@EEB>?BB5+*136@?:450bd3SIMGPRYYSMNk5kWUNKIOP3FOJW>UNOW^]2@;;86867823VUU^IjNJNda^bd\[Z\^_23134:@DDC=<>?@BDDCCEDCCDEFEDEDDFCB?>==@?==<<>><;=?==<<<;;::9:;::;;==;;>><=?=;998:9:97N~ZA@MSAb:6=YQSQ\csXqn\hquGFB]vSO\MMBLXkJUhLuI8<3V12@5AH6:,<93A1//5X5$A("?> DA8,<6TH<@D8PQI=KOI167qG3Y]7b5N9BGC/6E[8a`VUJKMJESn'SIXZ506fNHJJ~bSNB+5.KmgQ0:8=LYH5@DEY>\acLS-$4jt}GSi:letvxH{3||`jFjGT8Ts%YCtLZGAI4MOD4_f[gd>@84:Y]IA=u^]SYZ2<5?3a]10#49 +#!;&%!<8&%&40,34B1'=8=68B3,'4,8EA,43+$!$51+$!>*7X623.;5<::1'&;q4>6D\8p3:7PDZB82PFX^=AMd\mJ3MhaQ3?SR`j]r>0H,CQhCek}Uiẻh[08=.ZU_p/2BDCG&(&%%*+,)*,):931233386435748;>,'"('&'!>A""%()(?3M!5F?~xqx}yNM}̹ӴghaҲqìeovsw{ztm^\j²Ǽ]jvib_\mtlkgjyefokguȢqĩzͱdX`jsuhY[baYqi`_UUZ^anwqouovxnl_UYh_XWZ[eqokhc]YY[kp{xnjdefiqssstpos{nndnvtprksöbb\RKIz|~}usuu{orgqsjbikmg`a`cejpsx=B@??BDB?>=7ae55@CBB/BJ8BHOBFC;904CEEFF>?FL00<4..7160:I7AD>;8:64.5468976>;6421050486.../,)+-:)5""326ZGK`R;UKW]zdrUpA6F.JHO8]QXz}_h|kZcNYJ7D<`WR[PA/HJLhK**>F6388;CF>FD;:<=<;/44;888;50GWQ727821113.543354589/-19;4+MZWXGKMG27:78/-0cVV00Z,UQU?..-+-Q+X,/08;<>5Q3UIQPQMUXPC798./+.13133922110074558;:4/,-0+E0GIWT/61I8*ZDE<8865436641./02340/,.NONSG?WORVINVQQNKNJKIGTOSUVQRKMKE@>FH>BIVVUYWVOT/\VVUQ[ZVXZT.10[[0\Z.0/3895\WY-./11240[WXZXSSTOLLQPRPTVWXRNOQSTQJJECEEFB=?A>;9:9?7668;<=;252=?5IN@>A9@69D=@F9DEQGBA8>JDEA;G=;HL>A7`8@cENEFGK<@4TK8O?73U]XY3a413857Z0_YTUHL-0027<=7=A:>>DH8`OJHCHD><@C?DA@vhjegjziXad7?@E=@<:@HIK?EH`\OKOI/NWbcq>CEINNWOIMWbTZ_a^SUbTDFUWOKNHJNRWTNMKGHHILJKHJJKTQMJNQI976?ENPICEJSMKGHMOVZUAC4B2O:7B;O]YWY(!+%&&1..)$$ %&(*'"%/5.-(%#'+"%#+&$&++)*+*.'.'%%1/-.-)*,++,!!!! .-A*!)$$+!1)8&#!+*.#+-#%$(  %)7<"3'?9<1.;##%!>7,LN,_Y$*`T@>83DKbT4X7K1@73.~N9`^O[32+%&2)(,4PH^X[Rd^M%.WZU+6JgoB6@>sVFVaVU[AC$ !fxxGHPW^YID9=CMNKMB5+B=6LND..#;dtxlIDZE@xF04AG@vr~irxaStHwUd~wPiZsդXfHJH*'/*#!,,/+'/YnXoW;{ċ̐VF1/ $)0/?IZ?f{9(@41B)$(# '    + "-#-*  >'/, -  *"?U,%(,3#,@,(3. "5#3! #  & B@O$,1&$+&*.P4M^H4$515 <)N, :;"%   *49#* +        +  +% +     +#  ! 6' # )75- +.'!.-$(0.89) NV5-!*,TR`#uF!(+*=$hhӋH^~&bʏlF  !7]7Xۂƕ㥂ۆ⚑Piᨾҽ޿ӯɧʸʓᆄzwlSB|bv}{yo~O,cRE9OXXfo_hfwTRYEFru@vM_Lsy{|}yZPzLKKLOTPLSq~3-*'%(*,&*,?J='?!L??h~cQԾ۞~۳ifĨǝ{۝ᓈuU:yXS37\='+4:0" 8>8$-886e?B90'%1**1341&'$$$" $!!!!## "!.)*xsjvoq~{c\\5:v|~lrhÿʚ|ոkw{yxtx{a]UYlǺiy{wvltlmrXtaZoZavjiqmgm~f{y~y]}dxtУc[iq{}qa]cd[ofbc[Z^^]akilsmuvkh]UXf_ZY\^ck`YZ_`aa]in|vrkiiikheipqpqsef]iuwvwmo̻ZWQICA{noursqropkmokspsm׾_aV^b\Xabed\[\^`effi7;8424642/,(GH$",02/W35/^Z_cZTbf`b3101/+/.+,,V--WUS.WHCHDNLNMMMTOMLMGF@#$#'SSMJC=?:<==8;499:7CGA75@D80-Pkb\RHIQURNHMMGMC=LM@:T@..&7`TOSVRQUSZX)$C#%$!! 9;;1-+1;CHAJ?FH70>;EG>;9BAt]_i{hYI5.3(" +**+)&E)D((,$@8?+VKeoFD(#  +"/M!2&()%* +%.?6!;L\b3P,3+FA3'/:?-HD2388U.16E$2?*=HC6<10*R/qt,%3+531)+'%)6,3*0'BCBF=7:OCM?DIPOHFOB8GKC@B;<>EMKFDC???BCAC@AAAIEABDC9,+,5:CD>659C<;89;:;9,) !-0--~~ ~|}|{{||{}|{{|}|}~|{ zz{|||{~~~|{z|{ +zzz|}|}}~~}| {z{{|||{{{|{|}||{|{z{{zyxyyzzz{||{{{z{{z{z{{zz{|{|}~~~|{{z{ zyyyz{|||{z{{{zyyzzzyz +{{{zzz{{zz{|{||{|{||{{|{z{}|{|{|{|~~}~}{||}~~~|{zzz{|}||}~~|{zz{}~~~}~~} ~~|||}}|}||{}~~|}~~}z{{|}}|}| {{{}~}}||}|{{|||{|}|}|{||{|{|}|}~}|{|{z{{{z{zz{|{|}|}|{{{|{|{z}}{zz{{|~}||}}~~}|{~}{{{|}{{z{||~{|||}|{|}~~~}~} {|{{{||{||~}}~}}}~~~| +}}}|}}}~~} ~}~~}|}||}|}||{||{{|} +~~~}|}|{|{|}|}||}|}~}~}~}~}~}|}||}}| }|||}|}}}|}|}|}|||}~~}~}|}}}|}|}|}}||} |||}}}|||}|}|}|}|{|{|}|}|}}}|}|}}|||}|}|}}|}|{|~~}~}~~~}~~}~}}}|}|}|}|}~}}|}~}|}|}~}~}}}|||}|}}}|}||}|||}|}}}|}}}|} |}|}|||}|||}|}}|{zyxz{{{zz{||~΀~}~~}|}|} ~~~~~ 萗І혳ԥƬ肉ـ¼ጚʩ抓ٰǨꢥșNJ؋μ’㫛쾰ŭǗɕְ񔷖៨Ѝݸڌꙻ®Ȥľ­ݫ͢Ĭߙـꮻ׎ꦦ所Թꌣ̹Ԑ׍ƌǶņʂٜۚж֐עԸɏ¡ҞƧۏ⿻Ɵҋ؃ìܞכ򖗻Э򄓣ݳݿ䑒Ұ濵쯪尀ա͇ƣ傣Ǭ񣪐ߐȼŵЦިǧ̯~ʜ㘘ʿۈǭނΗҶ־ָʳݪ娋Ţ˾ȇ]IlyoJ?B@AAABABCDBABDDEG4FFFGGHIHHHIKKMNMMNMMMOOLJIGGGHIIHIIJLMMONMOPQQOQQQSUT,SSRQRUYYUQNMMNMLLJGFGGHIIKKJJIHFFDCCA@@A@???A@ABBBCCA@?ACCBABCDFHGGHHGEFFHLORRPPU[]`_`^\\][XVXXUSSQPRSUXYYZ\cecdddijklompw}|xwvquyxyuqrsqplnjfcdegecdqxlbbhrusstnnpnmsv{xrnmkms{zqp{z|~΁[tkz㼩޶trq|ۙꞒźǯpb_c^ZkHhMx}ɬo􆨭ˮڢ獯Ϳ؀եʚ󑣪쩅ňǧ𴂄ƛՖي胹›낞µܳ燎ݽÊⴴ蒌ն̵ڀ쉘}ıᩐ眍œѾݍЧû˸؄Φ蕧䇥ЩӾǿȶ樿ٿܽ׸ȶْ􅏏ŷϳѳՎɸɻʷ朷Ϧĺ»Ÿ跬޿河žŎΌΔ桚犊۪ѷڋՇñقϺјɻ͙ᡚͼθ˲ʶ╃ّ֞ƏʗҼֲ‹㙢Ό톜텉߅ܹ±񀉅Ż˿ų̱Ƿᷴïƺ܀Йǵˑ凸ʗおδ󀸓߂Ƽ־o輄ǹļ쇨㼀aE;=84Kb;<;Y_YVO[8<@MSc\UPMNRSUY9Dfac6\WVWWO=AIH>I.@^TQY25;;8>4+46774][[\_JQLUada^e^SV]\`22U_58@BFFEHMLMKJKLH@>=>???@ADDGEGHLJHGHHIJIDEEGFEEFFCCCBAA@>@??=ACEFHFDACDEAAA?@DEEDEDD@?=>>===<:<=<:<;>>=<<::778::9::>==?>?=B@=<(jm`xTECCVTK[\h&7B>2dQ/SAH?Q[PP{pLSaGBcliT^[gRHuZVP_gNzQ҈NyoOZ_cUlTdaFXUUiwjjjcor~sh\|3,6.8VUfnmfUSZCO[NvfomfefmsbcfWIHYQ_^h{sՔyƻg]wzeVg{^Wzplruma3_9gedSchndEKOkW^5icfoKbbNWwg9[ZV>jnR9:JFH;GDAK@676Fl\Es_Pi/49L\[aTEKX^j?2>:c@N;6mBWF@WyVK;>6.'VwJZUM&6)6:j:7C>ACkqwm /;CCB^WvSAW~U]nL2NVIi01buT`koFRI9OL/EAM6qwTD>49_SLJ@SiD+_>;OX3C4<]<+!F &2% B/%)'1!()3"#*#%*2J,$9%%C6)73F:1.1?./AD79+"%0'CA72&2/B/?8;3(29#3 -# C<68!%:=0../L>FCN;ft==@?"2)>?G>-/h*cBG*j],CGgZhxU8Z/:CYg9lJlWPK\F7IKafaֈvÀc4:8,kdkes?wibhghighhiihih/jjkjkiijjjkmmllnmllnmnnnmnppmkljjjkklikkklmmnonopoqrrqrq$ptvvromlkkkjkhhhihhhghgggfgdccbcca`a` _`a`_abccbbaccabeecfffeeefeeedehkmnlkpssutwsrqoppnlmjjllnqpprquvvutuzz{{|}~}{yyy{zzzzz}}yڨւ}\yUVbW㨱ˌtʝyȹΰbVd^ah~BVZVXXkfQUaTq;chȷfnʯSVZNMg?ECSNtrrpxzs_LIQUUYLoD@>DB3399?kUwI8NFVoPm_Y{hiez]a^giksl^yM7Q{kV:E<0/9BG=-%'(0ACA6-9?<;jzE@:56J?:DCAL'''#$*,.)++(:4./002083248??A87*"!*&%$# $$#&*(D9Q(FQrF~`llmWPT{pλЫǵgm«sq{~}ymeYhTofc`bf\MKu\zoUoxa||z_|lkg_~xœoahxXV]w`fpfmSWWVaii[WZ\]]]bdrxv_YVRQ\op_UXZ\]mmmicbchq{tqrxhaccfgktzsrruxjd\hkfl̤`d\SKJ{y{}~ymfptt~|ض˳~mfpscbfblmc^dlksryy@DB?>?B==>=92378DBE@?DF=f]ff``gkzD?;:65396j65mlk6gejg_WYmbXYTMUcVVVZ[;9:D;2,,a^_b\UQQMQSRSPQPPNJZFu]M_|ueXftxxqpjstfachqr^Zd^JRQpmdmhgw}vioqwsqohe1/0002/.+UKRF=NUVJ[`]LNbS@bei^_MulyZRlVKxunpmft^aZixf|]is~yXNnokrQQQ^jIHsuaT^D?R\UobfgrIj:S#:KfuE\EmeIt`kErkXFIIJDCK@O_^\9gVEE=?plXVy:>FlkPZWu;LMCM<:0:q;I8<:B14GWMC8+'+L0D027<@HA83=LTAE/BaVKB?>,22B9U0=3?9E<82>=6?NGND>E:::.7@9BC>7AKE;RG=J><9BF,D9<AIk154EAA5:63CAB8=;+>>B<@;@?<;:5;973->*1211V,TQS02/-,LUV//,15>=5014LOQURYXP,8Q+1,//3662696140005324:;896/.0/IAGOG[*5LC;04988656962112/01/111330--,+O)*PCRSMSSPQQIKQPUKIGJWUUSPRSKGJA=GAFFJKUVWQZRLY/XQTWU[[\^[W.21Y0_XUY0/2122.[XS1/0/00VVYSVRMOQQMMKNROSSVUUPOOQQMIHGENIGEBA?<>>?@B:@A>H@OFC@2>U>??G=6GPCKE2.D12\SMWL:.R339>A8KD8=5FHBGILNUWQPT]Y]1^_XVZYSOTQOMJLLOUPOMIIFHIJJHHGHJMQRPLNE<4.CGNMMHEJOKCEIPSR7N7KI;eGMNKbGm0"%5!06210/#'-(('%%&((- ,+,.-/-+)!$""! -('***-./%(#)-12,.+'(+*+')@ !    "3*+,*'$ !!*#14"' /).#!"!$49BX<) *5/56>)' -%#,1D:%.M'*9GD>;?aS;7XDE;D@7]l6twc\`z0$+--JsE=%fT3*# !,/0OlO>D@JSnf[hkJ;G/Jsz>ELRQ<8:2Bq|kL@+I$87*"7uj(2(ROYѥ݃P,^vM …ꙉǂݚnNaEWB>õøڏ騬ƊۭnwiXUr[trihosV?YX>U=USŽµҸbmݸXUWJG\:@>MLxwvwz]JFMMMREW3-,/0%',-/C1@)"./7G`y]U˪ݏxzl̾fjen}stI5U`E5>')57+'8:7&1988jC5,%%1'*3566(%!! # ""!#!%$/+?W9w]gkdKJU<9>}~~x洯oηɥ¹|Ѹ}||{rm}l^\Tl[pljqypgGbPme\GY^P}fwrpkbsx]yojZCo]lĹŨ^Zazckxov]`ZZagi]]a_\YTVXktt_WTSQ\mraXZ[__i_[Y^cjmo}xuvzphggfdcionrstp`\UcjkhƠWVNHC@xkglqqppskebjgdnonɬn^XcdYZ_]fh`Z`hgmlln:=9535821-+($$&%0/31245.XU\]UW_eo9410-+).+T,+Y[X,UVZSMGHXQMLGDKVIGFHF-)(.&!J KONI@>=<)&'1#H?,# A4"(#$(:! x'' #&(&%'#('!$%(%)(#" # '!W""$$"&&%$% "%#&! !'&'&&''!!!!"##())%)%!((&(*')()*)'(-)'(((%3)**((%"#%&$$#%&#%$%&&$$#$#! $   #'!""%!$!!"!!&!)!#'$ $&""##  !#$#$+/.0-!)+!7*!.)*$"!$!##%(+'/-.-23.0,+0*$3,.36820""%41+.6?969snB{vuifgdcc^XeI478;.22*'002>;8NQ67>6+OTT\e:>@@@BDE==BGED$JMJGHFDBEEC@==;AIFECAB4@A@BAAA@?>AEFFCC9/&$99;A<346;;<"1 !(<*5$~~ ~~ }|}{{||{{|{|~}{{{zz{{}}{}~~|{|{{{|{||{z{||}~|{|||{|}}|{}}}||{|{{{||{zyxxxzyz{{|{{{|{z{|{|}~ ~~~|{{zzz{zzyy{}|||{{{zzz{{zyyyzzyz{z{z{{{|{|{|{z{|{|{ |}}~}}}~}{|~~}|{zzyz|}|}~}}~}|{ +}~}~|~}||}~|{}||{}}~{z{{|}{{}| {{}~~}|||}}}|{|||{|||}|}|}||{{{|}}|||{} ~}}|}~~~|{||{{{z{ z{z{{zz{|{{{|{|}||{{}|~}{{zzz{{||}}}|{|||}}|{{{|||{{|~~~~|||}|{|{|}~}~}}|{|{}{|{|{|}~}~~~~}~~}| +}|||}}}~~~} ~}~~}|{{|}|}|}|{|{|}|} ~}|}|{|{{{|{|}|}|}~}~}~}~}~}|}|}|}|}||}||}|}|||}|}}~~}|~~~}|}~}~}~}|}| }}}||}}||}|}|}|}|}|}|{|{|}|}|}}|||}|}|}|{|{|}|{}}}~}~}~}|}|||}|{||}||}||}}|||}}|}~~}|||}}||}}|}}}|}|}~}|}|}|}|}|}}}|}|}|}|{|{zyxxz{zyzzz{z{||~Ā~}~}||}|}|}~}~~ ʈɦމ嘻ޑ낀ɺ9þĽ銴؀؀㤜Ւޕ֖萏󋠃βƛ٠ĨށޯϩƤՃȚôȤ큧Ľ˕돣Ľ߾̰ԀӴƨ݋˦ꔱИ􅓙˹錔»Ƹыސդ̹ۓȴʚ쎥ƀ𥏬ոʘڤꇒö݄ઍَƅʶޜƟފƲϹÞłՒƄ׊̲Ņ߈肏煌Ҝ۞Ĵ竍ɐϨт⚪ҋݖ݃ʷߩټ¥ոӉ׭̽ŠKݵ矌ң{췃굄Ӣnl>n>@>==>===>??>?>>=>@@@BCDEDDFDEFFHHIHGIIIHFEEDDCBCDCDCFHGIJIKMMNOONOOONNNLKKJIIKLKJJIJJHGGECAAACEDDCCCABBBABBABBDBA@CFGFEDCA@??>>=>@?>>=<;>@BBA@@=?=<;=?@ACCBFFEJQUURQOPQQONNPPMLLLMOOOPRSW]ab_begjghhkknqsttspmqstsomknolgffddded^[Y^ihb^enrqpqoklmnouytrowuoqmlmprjghfiw~vhktt߃ۂ߃wvxy}ʔleޑژǀŠɰҷoԄuqlsv遈͈ȑإֳ퉒ЦĔׂï±י񘢨ۃūŶȮ兎廭³ۊ걤􈔕ʺ}ܻ̻ܾ󆍟ゆ̮̏ڥ̀͹ʬƭƽèʳӴϻ݊햲Ӱͫɻ㾀䄍ꂏ˨ׅ̀ہ灀ͼ;έ݌͏Żֶ䍊ǾۙȦ۝🀖ϖœǯ薽ߕٔƬא˝ٶʉ򵖖ʷͿ¾ـ´񋘛߽̺ÎļӂѮ퐛Ըի㈳岏׉ø单򅌌ѹ󝖡Կ􁊈ػˀƸ˯ò̽ȿ̸̰گԐìʓĀۇҳșө딓犭ߎ낅Ի󍓦ՍI˲Ƽۗ回6EFA89I8;:_K<5/82T3A9HTX9bTTRTWBOccZ_3b[TTVONPY>>aJLR\4539932138<6]UX]b[PU_YZYY[R[320a`^357ADBFGHJLLKEBJNKFA@AA??ABDCCFIKJGIJLMOQQLKIHGGGHJHFFGFGGECA@???=ABCDFIJGCCDC@AACDDECECBBA?>=>???=<==>;;;<<;<<;9;<;99:;;>>><;>?>A=>97:9=@o@LP_3>FEIFFFDE_^BEhG7nI]:C@>=]I-66YX^616VAJ-RR>>R%=mJRTfy{`SxWR[:@w94-4C5V4@AVcT[IAsH@RY2cVhqa{`]Idi fZL`XjrroγsL^\_GV_f]c_݁OsscxwynhidGQytvl\_GM&37:vN[R^ZN>iADJ^dT|{mcRrilxly`pm]Oum}Ǝa{{cm{~cs|UgYeFfyephc:=GxwcSUuRN`prANWk\b=BD?1QL@:TJP/)C9>'1-0)760DP/(.$/(.):1121[P]J]EbJJcON6GLH8J6?Q69ZMN:DJSm*wbv\]LtQ#$chYK@OGPMLsknqMIBPOgZBi`-,IC7I=>8<[b;J*1'99-C69',45';!&+7..0)%"'03"-;.90'30,/#,B#4hV]z\Y..<6}<4+@JB4J:H;31WW/S^ON8DWIQd82OR>Y3A)5B9$(1N6 $CNpFHABd?R5?'HJiUYO\I`TA979KppZXdjtp<`HMPC;D|~3UH82>98gmni֬]^ffeeeddeegeffeffg-hhiiijkjiijkjjijjjkjkkjihhhihiihihiiikkkmnlknm#nooommnmlkjjkllkjkiiijggeddecefdcbbcbbcbbbcbbaceedcccbbba_`abbba``_a_`abbaa_`___`abcddcefdgknolkklmkkjjjihghhhjiikmlostvtvwz~|{z{}~|~}}{|zz{yvurv{w|~~|~ڀ|yРvriͨll>}tA`pُٜ˻bgbif_c^y>KFXXbP^HKIXK@Dgitjeeb`cUTIBuzzLNVOLrvzvvzqy^NPUTaAIC?EE2/38;2UU}2Q?PFMXfb\{ĸwVq`UYoymrrg`bXLPvcT=C>0+4??5('*.4?EB8.=>:;qpCC?69L:I%%@;( ')&"###"#$%')*&*A"&KJsvzvflMZ[ZwkorĽſkЭƴŶrnmͱr|nk~y|vykp}`WYtrlajj_[Ymaezrrw{}vqsqivrȩsoseşͭګaPjhla\T`l`YNLMLOSUXXWTQWW_fjbWXaZ[_egeknjmwzr{nheidkaaboswvsnigmdYTXcjô]j\PLH}y~}mgfgn}}zumif^[cahkf`cgiopx}AD?<=?@<:346;ECDEAEG?gipkfflroh;:888g7kj545higahoddUSTSRQYSW`][ZW`57;@20.._X-TUYOPSXXMMROMOOWZ?DsZ:CE}TWquisvp}g[`qrlTUXZPRN{^ZVWnd`jgforumhc101/.-++PRMZSXT_\fhf\U\XWPgR^N`xdlz\LmYa~}^ue~VuxnssejkkhvcMW[^sbmGwsEBGhKMNrlN\KEbOteXiuOoljN>QNY3jkRXPGD\VBETLI|ICXLME??FEOU?R^^5,>@:;4GOL694>H>A91>CB;;>RO@DC;39G/<943H231.+5JD;>GD@89:6616:;9487;565886;<99862.62470'$$#4B0/6BAXC?HeiYalWZ>TNLW_cdzVs[~{ZLFhj>B?VgUD_81R3<bF05<+DCCA?>;00>>=<:<=A<:=<;34;9345879K;X7..451210224425568;9/-379741.,TOQQLM0<<1.;9P3130.XXVY0///VK.X./225>89501-OIBAUXQRVFKU+.-545+,866324353446::9;3/0-TEKF9WK/HAU=3677433873350,,R,123210,-.+P,*PPTFMTSILQLPKNSHBPSRVSOQTLFPE@A;==B>D@gKKKHGI>=D>0@8/=:A;<<6<786@8=G><=>I@GF?@;1>DA?ENFD;.IFHJRNMIQ-2K+.G;W(GEFMN05GYNT`3128:OC2@S8>>B7?NA8faS89c4=O@9Da2JKKB>JOWNY_ce5294bJ3Y>I5*24689<>Mj=:2BE@8a4KL:GL.33d`Zht>>ccl[[VTj<:C94;@;@@HP[NOhOHSQ4O[^fo<@DIIOQTMSQ[02c]`XVXXRSSOMNJJKBOTUSFEHCGJJIHGKLLQQQMLJ?+-7?CJLPJFCMDFFEQNS;h<&$^64+)+")($@IT?:B=+6ba`P@?,) !3ios585ED7&;)7@SW?eL?0/2%4015)60Nvx_J:-jx}tkSGnۙvu_k{w]pPcN]Dizdtedw4213()(3$!%##2$)C#0RUop +& 2 ;95vMZ2"%3      + +  + (    + ++Fw80 (*4)=<+-$  +  !--*F29<.--09$/G:;0#% D_8 &0)"("-#@)! (;8(   !-$(K&2W5>(L!)%2  + 3?#&!=6;  "   +     +     + +   + +    + 1,6E%# $ + '0&&  *"'=!4%0++&%22(Rn|NiOL7SDC78EnW~y{t]eʪTQE=gprEHPNO{|}z|ty^JLOM\350,25%!$')!43L1)0*[graV̸ܕצ_|ĩj\bĆ}uaYNT~XB8;'*40!#.7<7)#7;68tt>4-%'1&-1164'"#! " '("!$.5Unp~un_eCR5>>?{p|zsķu۴ʲʵ|uٺuwtxwkbh^fya]d~qpw|stkuZskPRnxxiwov{uWR\V^s_fO̦eWomrjcZ_i^[UOKIHKPV[YVQYY_gkfZZc[]`a^V[dhpzyqynnltloedclmnmopkffZOLR`eTYNGC@zurqlhkmb_]chmfhƿi`__WV^]ceb\`ddjimq9<624762/.-*%&&)0136357/V[a_Z^dhc[30...S+TU,+,XXVRX\SRGFHJLHKGJSPLIDJ'')-"!D@ :=>9=AJG>=?=899?>,0O>(/0Y=@X\PW`_USZLDKZUN=BEF<@:gQUiF>7;I@;B@@KLOKHI$#""# 9:3BxpV{cVYeB8XGA5&$&6&5 $2! $"".7'<^=&!"!"4$  &4313XK <6,%(,T0$$#6= !$;D5G+,@(QC@USUW\KH.7G*:4FR//",c[G:## 1*0',"1!# &#(%Z<35IPL(,,'*$159 #%)!! $%#.1&& &%+%#*# "! "$ +$09[`Q`lPS9NA:?;/(9)(%'-6'4/!"(091!1! )'#"#"#$((()&#*# ''""&#'&!)!&#!"#&"&& "$!#!"$"$#%$#&'$#"$%$+*%''##'((*)'&%'())(+,+'((*'&'! !#%!$#$&%&$# !%#!! 9$%#  !$"! # !#!%# %#"# '%"#&($.'+2'" * !$2-!84+5)!$2%'&&#().(/5575(4%) (//2357:;!"!5-,$-0'00`\Zhq:;^z`j\]VRe73:1-/0*/.2:E<@T:3>A,ITV\f7:BBB;:2BIJI=<@=ACCAA@CB@EGFBC?2"-38AEF@::@7743;8:5" & $ +~ +~~}{||{+|~|zz{{z{|~~~}}}|}~{{{zz|{{}{||~{|}|{{|{z{{{z{| +{|}}|{{|}~}|{||}}||{|{zyz{|{z{|}|~~~~}{ zzyyyz|{z{z{z{z{zyyzzyyzz{z{|{|{||{{|{|{zzzyzz{z{{z{|{|||{{|{|~~}~||{{{|}|~~~{{z{}~~}~}|}|}}}~}~~}}|}|z||zz{|~~}{z{{|}|}zz|}| {{}~~~}||}}}|{|}|||}|{{|}|{|}~}~}|~|||z{z{z||{|{|} +~~~~}}~~~}|}}|}{z{|~~||{}|}|}{{||{|}|{|{}}}}|}||}||{3|}~~}~}~}~~}~}}}~~}~~~}}~~~}|||}||}}||}~}}}~}~}~~~~}|{|}|||}}|||{|{|} +~}}|{|}|}|}~}~~}}~}|}~}||}|}|}|}}}||}|}|}|}}}||}~}|}|}}~}~}|}| }}}||}}|||}}|}|}|}|}|{|{|{|}|}|}||}}}|}||}|}}||}}}|{|}|{{|{}~}~~~}}}|}}|}||}|}|}|}||}||}~}~~}|}}|}|}|}}}|}||{|}|}|}|||{|{zyxyz{zzz{z{{zz{|||΀ +~~~}~}|}|}|}~}~ ιԀւ۹ъ䂋҃ف倉너̼ǹƽɿɅμځˍŸ┫˕誗ܫꮏֶǾג㱘ː䕶݈ف˳ꕳĜیǷʫߜ򓘠ȞւǦѩĭԽܹܸ̳肅ų̢򱩴̀Ljn񑺩ޮ鏭͏兲Ό񛕔Օʧǣى߀ܭ׽᥸Dzσɬʹֻ͓ӗ턀܉äěӵɔɪ陀Вٻ솣ʡ逖Ī볊򭈞ӊǔ؛{ҝեݞᴇ܁󌂃ĶÇùĦȴ߽ےӾٜ䙗\O]@@?=;::;;;<;<<<;:<<=???@A@ABBBCCBAGCCCEDEDCBBB@???>==>>@ACBCDDCDDFHJJIJJJKIHIFDDCBB??ABA@ABBBAB@@?@??@@@==>>>@ +ACCCBCA?<;8m542.ZWXYTSU[WWVSQZYOLNQTU_2cb6ACHKJECEEFGGGFGHJGFHJLJIKPQUWWXYZ^__]_`fdfghhhgfefijjgiigfbcedbecdbZURPPQW\bjmjadfgekrhiotidba`ekmror{zxoicvӈǐцƎzrtrwuuv}wvttrmgۣdᎭꩫףʖ˵ѱԷӧ߶𚐤֓ȶ֡̊򉛠ѡͦɿǀҮ覆ؑť؃ىŵѸɱ˭ŵ܈ĒѪȯкŪ鐋ِ袧هź޳֍ۯѽ˱ꊖӎ셠¿˺И۠ǾųعЁ􂓒₏쀇ͰҸ׻Ҵڒ€ߴʷ»ճÂٿ䘊ӑƨ񟠉ƪ圜Ď񅄋나䇆ܷဂմ𜡏܃ӋƵڶĿǻĠאϹɻ鼫܈ܡ𼫷̶߬멨쉅쁂Α׈ƛƽр芉઺þûķǨųĻҧ̾ö󄖍Ѿ态Ήᣅ←ԁ֦ǀ誟㗟ᰞִֹԄԼ숗ؖ½ʼøŷƄߦ3HQH1I45;61-;8W7@LCRIHLUb26YSPP6GHH@U25_XVVR,NSJHOPQ38^GJLOW0395-N089<84[Y\_ZSUTTZ[35435264118?BBDFGHKKHC>AJNLJJGCA?@ABEGECHJKFFHILOQTSQQPNNKJHHIIHFGFDCDDCCABAA@@BDDILJECCAABCBBACGDC@??>=ADBEB>=>><;=>=?<==;;:8:;9:;<=<<=><<=:;;;<9< +ZzOFEmB@LzTIJ0X=<3<[4Y]c]n|qajTjeptpzhm~NQvqU@@=.,7;<8qkrE@A5AJ?A?:?P&%%"%+*)).+(<1-+./149446:DG#>6&!)('!%"""#$&&''"(A%$Y_Vuw|bgcfLEZOcituquθʿkiͳ±ʷǫtztpw}wmrrbZUWUmqh_ZQ`YhbdY`{mh}zk͋|vsvpomz|xx{_h`\kn^XO]`\ebTSVRRYS[]`afV_jke^\XUXYZ]^cq~umlrujfgdlillpgcprswunvniRR^ľ[i_QKEz{zwedgkw΁Ѐgig`]X`gbb`bblsruzBEA==?:87>?<215=FGDBC?B8hp:Bnjif[[ggceem654346i3kc8?cZOVTQTNKLJRb6;5V1/-,/34/MHQRSXRNJIMPRVzFCoymYdtgjtxgP]neMNZ~vaz}T_g^Ghiknu|ve\\010-**)NSX]I[X\^degfbj_LTlWKvry]lJtR?AAiZ[jjxif]ZqaplTUtXjwDXSUYŅPEGks:];LKMDO_`SP@vVExg^XuonqE^iiP7ZWvU]A_O=CA:MGiVHg;FAIVOsVi?C@Z@9B=A:=JKBT2.548ENIJB<:2UX=83`JJB`Me7;<=L+0P=E?I4@KIFC8=FC?JCC>86>/383;@A:@AJ;=EMDOMD?:2;D24/&B,643/8G?:DL;@:9<.714:787;:47<:;966C;9=8/,/-48-#&,%$8.GJFN.3A7{lKftZ:IB?l[X_ZUW}e[OS>LNhIV;BV8]=]H>2<.:DE>=@A<5>>===<<<=<==;<48>V/79985N4.7.52615010.333596865233594z840SNXSQN.-6>6LI/P868./0TPO61/-.3.022325=<9831.TRW[T,.-V*UV22-111-8<:75643:4:95764:31/K0EMA/OF0T7:82765514654432//34232430.D++)*WWFNQOBTUROILNTTUUFVWPULDEICAKFIQUXSPPNNOPQQ0[VWYZXX]X[^Z/./.\ZO0,1/XZW.YWUGBO#:9&4:1>FPOPLPMNOOSJEDGJNLDC@CCDCBACB@>;>>;BAE;J8ODFDCC<0B02BCD1=04C827M<@=K@>4@EBNJFB?=?/CAD@D?MDF@4@EJESUIELR/M*1/Z9YMTCLD82CPYV1101?CU209P<81UB.B;?RM>XVX;AIiW5`PE4K?;KVKI2c][caZ8J<3/-1W796789>;0Y_Ti9F487;liA=gYlZ^v_Zm<>E9\2ADDBIMHOONQGJO8F]fkss;AFHNNYNPRX..a[_QSULOVWMNMPI?A@PJKJKJJ  !*cj>@H_^f4FrO3q[CI7H#KRS<)M5>ZAMxCV^sg6 8#D:<,, 3'"4"!,03FLBG?7;9B_S@ER8-`e^IxD@GK=nM@+?[Kn8?=HG.A)'? ,(MjsDfU:)/{FzWmiP@ӝZ]YNwuxorly_pg_HE04HV^1743"*1 1%'!(+J끡/3A? %& + $',*6.!/   + +   +'+   "H! +  *oj2*2<^B+;3) %/ +  + +)  (+8(7H2UDI&:2'',1! +"  :/, +,+*J&= +D  7# .oS-%J)^j %9< 4F% F#7$ %        + +   +    !1$,7-" #F 74"C  (/-U4 ! '1,!5 09H+&( %A' $"!XE  +! + &-jo|}h{iʼ̂䐧Ւ^eOBQcfv|[5>7vFI9UqMoabRx]UTqzzzyxVLNUQPmF6/)-26"#%/F6E;61#3fgcYsDzЀէȺ}mľtZǷᛏnqPUgF<6',2-$,+;D9,+996lps;.,",1+11484#!  "!"$&$ $69AbqkQS>=0-@9souio~پwx۹˿Ҷٺ񆐃z|Ѫwttziajub[W]]wԃ{pncVPYTUIKj`{\k~pǓuXUT_ec|erwz|}z~ϱ~_fc_pte[O\`\bbTWTNKOHRW^biYakmh_]ZWZYZ_\[bjhjqyzkfgeqqvstjdnmkorqwlbIJZʿSXQIB={|tmpjfhgX\^cjmnӲqź[baZXT[_^]\^`hmkkp:=74560.,//.'$%)1564414+Ua2:`_\XOQZXSXWX*)*++,W,ZV05TNDPKIKG@<9?K(-'=#!! 20=@DC?;87999>V1a0N[deaOAN_TVnd`UWI:H^O;=Jqeq_OAZbhY:DI=)A<>BLRNC?> !#" <@@C4FAFJPLPNOYO=DND;[UbL|vb:]?121K83(%  " + 6'-#3( %+$= O+! % + $!,"9AFC)/2#.!,"((8-'5$&66F-,!"1&!+%.LP@JYUM`HZ$-C:*1`.(;-@S686'#&$-*#3*3+&9;-*(TA>8S>R*++,6"8,/'0%-*(! " $")&62"$ "' (. !%# !  + ===G)-;3vcGdsQ2?-*'07&.P+7!-%-+(5"<.#&$)&#)%$"" "%#$C&$(+&%'&") &&'$%%%%$"!""&&%$&'#(" # $&('%&$$%%&%('(*('&)&*+)+("&'&(&%  $"! "!"##% !#!!"&  $! " &##!! !#%! '% "&'  "!(+&-"&##(/, +(*"(( #/,"1// "(:/3,&*#!*/'%731594!<12012573"&84")!462D%$,4;je@;dTk\`^Ym97;4U*312.265?>><27?.AV^aml58<;AAG??=A""ILOCBD<=DC=AAD:10:0@=A@@?A7A?@BA@DAGJCFDB>'#*''7>MFA>@H=;??5-" B"%!7'"~ +~~~}~}|{{||zz{}|{zzz{|~}|||~}}||~|{ zzz}}||}|{|zz{{{z{| {|||~}|}}}~}|{ ||}}|{{{|{{|{{|||{||{|||{{|{{|{z{zyyzyz{{z{|{|}~~{||{|zzzyyz{z{zyz{zz{}|{z{z{|{|}|||{{|z{ ||{{{zzzyyyz{z{|{|}~{zz{|~~~~~}zzzyz{}~}>|}}||~}}||}~}}}|{{|{{{z{{}~}~~~~|z{{{||}}~|zz{|{z}| {{|~~~}||}|{zz{{|}|}|{|}|}|{|}|}}}~}||}}}}|~}||{z{|||}| {|{{|}}~}~~~}||{{{zz{ }~}|{{|{|~|{|||{{|{|{||~} ~~~}~ }{{||}{{}{|~~~}||}}~}}}~~~~}~~}}|}~~} }~}~}}|}||}|||}|{|{|} ~}|{|{|{|}|}|}~}~}}~}~}|}|}|}||}|}|}}}|}|||}~}}}||}|}|}|~}|}|}}||}| }}|||}|}}||}|}||}}}|}|{{|{|}||}}|}|}||}}|||{{{|{{|}}}|}|}|}|{|}|{{{|{|{|~}|}~}| }}}|}}}||}|}|}||}}|{|||}||}~}||}|}~}~}~}|}|}|}|}|}|}|}|{{|{zyz{z{z{z{|~~~΀~}~ +~~~}~~}||}}|}|}|}~}~~~~~~ ݝ씪ÛɼҶҜÏĽ—ſŽľûУɪ狀ݥ܂櫠岗Ϫ鎍܋꧱ϡ𲗠ΓƤИՉ˹ﳔс犛ǛĉډϾδŦ缄˔蔻ҭ™遇튤ī𖨀Ł֛Ӂԑꌮ¤ѽ֯ӏǃޔ݊ɳς㮯㫛ɶ䗶׫πĵ׀ާ˺솓ڿɁۦⷆǝƫ̓和Цѿ샔ˌ綒쩜現̾٧兩ÚׅܧӖˇǂٲĈȓ͉怊ࠐЖʩt燰ՠƒꐋӵ儓̍֋ֹӖܗ،ɪ徰ʢٔͪ槀si\P:=<<;=<;:;<;989;;;=<<=>=>?@??@??>>>===?AA@?>=<;:;<;;:9::;>>==>@@@?BEEGFE>::8==8669:877::989:9;:97589899:87543420..-+WYWTUVWVWTSVTNNMH]JIKHDDCCEEDB?BAABB@BEEFDDCDGJLLKPZZ_eabddjhhggkop889;<=<=>>??@@@BEKMLNRQOQUUX^\XW[[[\]][\ZZ^_a_b`^\[\\`cekjiddfedgfhmurni^\^^^dhpsohs}ymhq{ЊЙރ˭̄zzxzwidehmjfjsvef{aZwrܝŁß́硳܋rاķ꣞ϝ粒Ӹ؄ףŬƾ܌䀍օ׿뮈Ƭ匩ݐȶΫԶǻ낍ѝڌůט䔕ʼy}ކꙞً䕻ݶұؤلʂ䅜ɴ˿öø̽ȫʖ׵ɺπ䏨ʹλٶ̯皡ϲگҴկǿ˧埃·睏㻍߻ݙʢڊ͓ï؟Ğ܅ӟů冿޳˰ղݠǟʴ̼ɼ嶫Ը܀鸩ɁẐޏㅅژ􏳣򄍎ʠɏҸ℆դ㿰¾̴ǻʩƶƶƮΫíĨ遍ǖ鷤뵀ݪ⌖߁̽ҢߟڷМ񄅉ĿŸż%ųڮϊEKUJ4LF7]7X7^@KNIHLPBBCFGJKK>>DGKIGGHIFEB@BBBFHHIKKJHFGFJJLLLNMNPPOMJGIIHIHGIGDBCDCBA@A?>=?BGJIIGDEDEEDBDEFB@@A@ACGFDGA==<=>==@BB@@><;;;9::;:;<==@<<::;<*O2uO4104D46B799OJ[e`]NMAqhF\UpRxhW;ML?J;bxlC1\@QAMV>#%BEGvZ63OX172O4$C&=A@F1-2:>47@-:/='/#2-8F4-XaIwrJVuc\8>5/.-@Q.#6!'#,;0-&lG??=yTJoRnqVKo-t1eD>,)0&M '#"7*J_ArPE@++-y;#?aA^4K9\b#ROE?\[_szvFpc47>E6qEdBFO`laUT-k?^F9UGa4b`:/")!8/$$;;1**-.3/3 )%'-,16.<=03?;)/;31)*%:;8 $'PKA)5*8*,1; 1302.9AR]EC1S6`:90H^QVZK2QKND+@=E}Ydcbbcbbbaabaabbbcbddeeeffgfgfefeefedeeccdddbccdedeedffed^ZXVZ[YXWZ]^^_aaa``a_^^^]\ZYnVVUVTSRQPONM~~TTUVWZYYXWYZ\\[]]dfhkplkmrqtvssrvuvvuuxxyxxyx{wvvwyxz|||{}~xyx|}~}idsd~yrqeuwxŕpvqo×ʓېg[e7ihf[QHVT>CALaqe_`Vkz~olrYTtb[F[LUlFUELCLnY[[cib}GdKpJEeVJYVaIbb͵_aXNON|`}u{\yxt~x|xVKOPQSiOHG=8=F0-,/5;;C`xyZQ3Yki\utsTXsT}~vvtszfhu}R{nYF;8/.488-19;90:EC==><9mppFAC;ABF<:qB(%&%#(+)++-+'<2-.0116;46:=D!"@9""'%&"%#""#$&'')&)>-"\9XR}uVSssTZRW~uupsujoռȾft˩ýsoqʶԾտw}|tbmgfe^^VRր|khieppYmpga϶usxfklpuowl̯ƎȢʙµ_gkdolh_]^fVWX\QYXTYTVUX_efa`svnkgahqvleg\WUV\cr|txqfe[\ddgnrnhkdacehmpv|ugVTU`\W_[RIBwoq{vszvv|w߀lloicf\`rbajfoxu{DC<;<:@=BA:226?GEB@@EDA6fkpccf`Y[hmhho<74456676ge5r[ROMSXj9=966900,-PADAHSWSTNEADQOehuI{oq]`mkzxxd^ZTV}dz`^^]UZo]Z][_ag\_33.V,,*PQR\QP_cmi]_WPYbQVZJzeqiv~wxcBP?][pV{\{|cZegth`tP}d||n|\bwiIPSY_GIG]eVQLKRNrNDJEKO៑_xvOYl]UQe_XiRRbLFIOTnsENN=ENCXkOgEqGEixo?A@hfrj|}fle>W*.CWI|3BGhU;;C_>B6GE1@.CC9HFFBA:7=GFHI??:3642@9<NA@BL@7JZ;B/1-E>4/454AIB5>:<;:66%+*076<9>:093;8835?5::;0*62)*($&&##J(%$1#8?I@@CC8^QmvO{psTQIlh^smz]}^DJc>CLHMKLX4)TBA7<&<=A?AAB@@>;4:===<9<=<<=;4;2B8:96891Z1536,///2205857895848656876651-SZXU.OBV990VZ2A9511,-U/4...-+-2300.24:87221.+UTT[,.2THO-01+2105=96965482785772333.*0NH@400ND1;026524354431.O-/44531331./..-+*+-.LMLNITQOLNIROSRQRNPQOF>IM@LRPPSOFKIOYRQKUS^[RZYZYXWUWNO01Y/[ST./0.//W./T,[aNX>5"?L>8AHU,OPRPQPSOIFFHMIABEEDC@CCAAA>=>=:AAC>567JJBDA?4??,@A<45599=8B?98FQ]22162GMBS04e8KRPU`O7?5CSUXMB:7XY]`a]F>BGHPWdbd99<=>2d9>86:9W])aV\OZCm<`DINDDzxmblimhZr<9DD07HJJGONGNS:IHHL9AYwo==?BDFKMYQMSLSWTOMOMNNSSQMJSQJBA0FKNQRMLA?0IDGHGFKLSOOPNHA10,02;M\RKEDIKMLHFQA3;=(-]B4CE5KFV"#(!*%/-0"%'$"$&(!"))*'$& !'#'-%!&()**'(/)%'$"#',,),/...,] !"#$#"!   "!   !!!#  0!6,.,4.)0**!2;A'#4,4+%(+!-.1'%$ &(35@KlP6HeegT_q=#! + "Fi6h]|Ii=)+J7[UKX:DG2#8K8M2d9Xd:MBT^PkBS0`Y89;1$2//+C>#0/('#GBE><=9Q9;B.YJ1+# CnlK@@LG@AJGBD?&8YOCHOPFa91,%(**4A__;;'!\?\h\WsjOSZLf`JBuwkwnúLG@bMHNRX4549;5GG& ! !*1#\2/" !  +    0, 0   +   %'    #'    "KT5AV<"+oA*G5) 80 + +  + + +" +$;:/1OT;EqaKo65  ++?@N/Xz^.'!:?7?B1#A`?,>03&)Un5B19FNS     +  +    +         +   +  +   + +5$004,%+( J4)  ,b-+!   ++4*6?/RR'62<'/!,!! .7.** +#!%/   L³(3fPVTrscYUrza`⪂ܘЍ◮UIV'S`dm`7;AG7%4h|pJMJXxt}UAd^M7b^YbO9T;AXGFshcbΈciʛ`_UHHEmUxnqW{{z}|y~UINPQReI=90--2!(')N8GE610fvlYw¶¦Xa~\ጩlmyUdJA2&+.%'//)6>7/3;87kys:/,%*+3-/h6"!!#"$#!#4"?ExoemJ=LE8;9?v}x|vxvzxwٳ¾ᄂ}ؿx{trxm^iiffbd`^rm|{Pu[[USuxƽ{os{~wSli[TxTcgfe[\b`_hZ]Z^PVWTXRS]Z]^_WUjsnnkdiqyrij`ZYW]doylbjmkmcbfdfnwytwjddcfju}s`GGJZ[öOPMIA:tvmbbioe`ehijtsfpڱĶc»\b_^\W[i\^fbipmrz;:33304264-&%%+26753643,Z`fZZYRMOZ^Z[^1-,)*+,-,VU,`LGBABET,/,(&'.&(%-:@?<70-2;9HHT4c`eZOZ\OEKVVbkbbVWGFFIJ~kjh[Ge]CoECA9?""!? ! A?>B6;DJTOEIC@MUBIH;bKXRh`c``mK4<0D,8'!$/%+*0R $&!$"23'+-7!% + +  !F$"?$.%(eOB7'+'&4&%"'*+><#,-$ %%BL-4 8%&:F9$'+HHQJY]ISO2@,D6c#/6SF-m,)@&'+!3@5("'2ECG,,jPI;3EU1'86E+3$,&')*+%!# $!"$($*2#'("&!*$"!!"! #!/&-:55;;3oXKenNxqtOK9L5@-$%'*(;9#.(,& -9"+")%)(%#&''''&&*$#! !!t!#"#!&##"$ $"%"#%#%&& ##&#$%#!$)&%!&%*(%**)''%$'""'*%%&%)-"' + ! $!"$##$%"  !# ##   %#$!!  ##"! !$! $ #'$'" ""&$'"$).#$!(5&,+06+$!'...'$120068'$'((-0758 #((%5%( 2942677 7  .37.7+1*@!3(1CBAxvj^ihjfXo84=>-05463653>B-7359/@9?BAABDBECDDDE@=FE@85#6:BEFAB;;B?AA@@BCHCCDDA9'&!%&-BPJD?=BBDB@=@( ?>>?823421/-27657721132578750+-.*'',2b0/157898j7788741/.,&F#$IEGEEDECBAAOYTW^bbYZTVYPGEFHHIMLIGFCDDCGLHDEC>>>CEA?;<>BAA=?>AEEC@DCGDA?@CBEGHFEEHRRTUSZ[Y\[^\b`]]`cc``aaab2d234g655577wVSUVSQRRRSRRW]^[[XWX_hmqh^cgefaflqkcds{v~skjsmѠlacklox܅˞roniiedhkpqx}wWds{tdʅƙݲۗƽ湳xjٗϜ铫е܌񓇀⌗箒߼ý䉇ڿɯãݖʈᄰЕطоɿη및۪ܒ˷æýʈֻե鉅熁󅗂Èޡꅂд̨޶էǴ̜Ӷʿ҃ſķف鍧ˣһͽ޾ĸǣٹ׹˒󀆏삌żɷҪĸ޳耨ܽ񂈆ǰȥ퍙ėѰͻȭ㴥ڈݛƯԊˠġϹф܎߿쁝ԢïĤ򋫇Ŷ񈞄ɼѸʥ݂ųюˠӷ뗠򂕶ƨΒ劙ⓨڄȿ䆀ͫ딳ʾŴƼ¨ɘɲʴʽˀզ􅒓󈚉ʋކ󋥳Ȯ򙪱űלڇρvᇒˮ񇈄¾нꇆô⇦ɽ޸VGYV:O?Nd??@BDC?><:9:;89=@<;=<;=<::>>7>=p=nUG[m;O6Y8N^mQ+Oo_:503^:EN10FU,/TMYE+C+8?&+Q%T[sswtmYKNU3?=N(CeapUR}n_kha>ngrkk=qNTB\=_n\8tei\_}_}hxvQcljdR}|xvXQqIFdSCrwVQyW_^m?QH{?=:0&XjYLRcyIV~Td;LhjN^U``OXCD9@xbbERxXbM`hdxxQdj}h[hcFLkQLhr[ZfkSvmb[SP?C>=>?DCJUlUgpj_q|X~t}|\&.'OT&;2=8+b5F>rL344.:TM@|O>Rcm-ga>alKLIBr`WnOLMARfo6;22BDT6N>2 .:V1=[i_D@9;'-A#J#-8961!?.QP2:;:97 *D=F7?kDxxN^RqO5H9[`4SZL:hH@R,*/0?=9DE$"(,&1.&/&OU[[SQ_}o~[Y@rRd-1-"5)#"5#3;0:GNug`L\XVc\*bGgg1gOp3*nX62JaS|!3%%9g8/RMM<61;DB@A@=pht9H@>?CAC66oF&&'&&)+*,+,+'1,-/1.6>9;=F%!! < &&%% #$"###%%%'')-)%WFfSQM\XDoS[ys}xvjfwŵhrtǨ͸ιrٹր~~natsna\\aabixrosjsszl^~atxp̺jqyxdcvwjrr~tɕ~j\RqpsXVb\Oa[VVi]T[aoxm{wmnfkouxgcm^U[akiq|xwmf_[[l̶eq}wioa^[[qJUWTLE{opE{?G|yv߂nxyt_gb_k\b`akqx|x<9v:>?;>:;347@GA?<>AFF:pjcabcc^`ondfp=:87756l7559vRMMMYn68554=7,K)N@:O,/^VQLBBGeYd~ul`]sytwqt]WLn||nM`sVjYWVcZQY_Xd42210,VRPY]ckxoffT`QcqaUMMMxpn_r|NW\JG=q~oxy^xamejczkXSps}dsXUue]UHF>VWYVfHJqmXUfCAwyzre|cVT^}HaILsiwUZCGW?=KEPJdKYa>=XOJeurq;FArpmfYllay6%0;ON\[9O\GOr9YAQ]Hm:9P%(9>'<7]_>A7AF\]TZ/@qH?>>Ay28SNXBL=651]4<@AGA5BL5@JC>=F>BA/A<5/5I3D()7:BJD;<8;3953I')'039>=+31;21156495714595.211.VX,0IHK07QHK5:945424-11//.,W/24V,-208993/04S-//.,/././NS-.*-,R376488574173783426300+OF42*^=/4<32542342*+,-111221//1200.1,R,-/LN\QNSVPJJKSRMQTORJNILGJFKOLHILDED>>>9@GI>5:=5?AD@>9>C2:<7=9A=>@3;:@AA;<L?BHPCDMD;?@HID?<5k9<:;8<7S88SR8FR4;6g5595QdiA9@@7?KLJHPMGHSGLJJKAK[oo??:ADFFMVQTNTMKTTSLKGGNORROLPGFHHDBJIOVMTNHTC>FKLHJMOOQOOG@L//2.5M\RHIKBJLIRT)17KWaCPC6F<3`DJ54U=D@K,71M'JZ{H6?OvX8Et\=91ZbERLVVCF+"%!4+,(RC8!$F=_YmE[d}pUEUT?C\BDy_mWWacUrm_VKGt0A+61#  + + +    +       + + +   >.5):4!-2$   (* ,->+M@76A4GW +. ) (3*.% j  2'& +"   Kйɀݢꂄt^gY@YOCcҿx]k啝∡ͫty;H=]}>41U:D,l}eeǼ捣bhAM?l7L?SS53/()'.3: K?%:=dpY|UZĀ`g֨vbr`MD1")+!*/1-+5;72:?83,+1K>EXT\e`bi]a^MHH\^\b^URVEB=utuwnigX^v^Wx==BEIR^UQMCOBV`QGB@Da[UG[fhbysBDC626+&+DL()"',"&)$1) ##0**"$7! +% +  +- )*QRMK?NPK`($9Eg?,=G:B`*;-2;(C$ @D',&-AE>D%6fA5798f$*E@E-9,0"%!$+-&"%!"'#"!$$" $-#! )$)%-'!$!!.! !$! #:<./=@+08a[;yuRz8SB81()**9#!"- +$6,"$s') # '&&"$$!/#!"*$#$&#!!!%$!"%$%!$!" !"$# # ((%!(',+''(()&"#'$)&*()&&"""##'$%%##""!! "$ !" & !"!"%#"&!%%!!! !&$ #"%&$+-*#(-.""''4042#%0+(&:407 4.42&6)-+&((" !(4!#63460_390"(-*".!!;-DS:8qv:s]cplb::4;:37:6657228C7;7896DUhf::5:<>>CGA=O@;;CAB<>=AGGIIEAH@@BC;6::@GAID@K>;@DC>A@CCFEC>7=&%%!(@OK@?C=DEBID()5#'!$ *(}~~~|{{z|~|{}}|z{{zzz{|~|}~~}|{|}|||{zz{{yzz{{{|{{|}~~}}|~~}~~~}{|{ |||{||}}||{{|{{||{{|{||{|{z{zzz{{{zzzyzyyzzz{z{|{|~~~~}|{z{|{|||{|{{zzzyyz{{{z{}~~|{|{zz{{|{|}|z{{{z{zzyyz{|{zyzzz{zzyyz{{|{&|||}}}~}}~~~}}~~{{|~yzzz{{{zzyyyz{|~~}~} ~~}~~}{|{||~{}{|~~}||{{zz{{{z +{}z{{{|{|{}|{{{|~|}{{{}}|||{|||{z{{|}}}|}}||}}~||}}|}|}|||}}|} +||}~~}~~}| {~}|{{||{|}|{|||},}}|{|}}}|}~|{{||{||}}}|{{|~~}||}|||{|{|{|||}~}~~~}}}}}}~}~}}~~|{|{|{{{||~}|||}}|}~}~}|}}||}}||}}~~~~~~~}}}~}|}|}||}|{|{|}~~}|{|{|}|}|}~}~}~}~}~}|}|}|}|}|}||}}~~}|}|}|}}~}}}~}~~|||}}}|}|}|}|}|}|}|}|}|}}|{|||{{|{|}}|}|}|}|{|}|}|}|{|}|{| }~~~}}~}}~}~}|}|}|}}}| }}|}}}~}}|} +~~~}|}~~}}|}|}}~~}|}|}|}|}|}|}|}|}|{|{{|{zzyxzyz{z{||| ~~~}}~~~~~}|}}}~~}}}||}|}|}|}~ ЍꁋϢý¾ÿꀋʄ텊؟ՂۣӀƭᨦܼꉋސѯגϙŶ𮆝ڦ륯ˀ燏԰ߟ젡琻֦Ҽ΄µۋȺ≊聀ޝɫ˘ʖ􀣬͆ˬѲކͷޯะ»кҺ鷅֒ʰ郑̌ƹƯѝÐĉĀԔﱔΒ惈⒮ꢈ؋՗έ󛍰Ū仧ͨ䣞˅ƅ͟੉Ʊ͞ѭ؅ȍ釘ɨ̋ĂҖԼڍӍۦڎʳ瓓ꀀ㵰յȼḽт쇲羬Ь̭ڋݸɭǤވ誫񝧥¡폺٬˴ǘۙ˳˷ԁ݅踄ղ{{9<9u1,,/k7622546/Y[.,17.''MZ4,KU63//,'%'+*,/.,)*+*''&'+035e10ak743c11/,,*QNIEDDECHIDFIOMLIEHKRY\]YQJDMVPGDEJMKMJLLKHIIGDDC@>;>@>><<=?@@??>?DKGAAABCCA@CBBADFECDEFFEJPTSVURRSRRRTUUSSUWWVUVTUYUWURRXZSr{|:<=CDFJOYa]VSZ֨kkɚ뇩ڴ纒ʴгܖļrmjkotwqmotwum{kb~ˊ鿇yyꔒ򪫦nprϛҰˮʡypl܂໼ﻗш򅋍Ӗ됓ʹֶɼ񴖀ꐢŹףûँ耂̀Ϻzُ놊¡ڼǽշѼѓЎʁ͹٨ήĿ¨흧ڶ膅ָރԊـƻοĽƶ𴸺ž㇌ĸٵӺՋ趟󯔂Æز򲠍ޛا€зɁīఓ倉ۘѐ侾űؘ酆ض̿ì暪Ʃҋأ񆎛ڥ阒Ӽlj֞߃퐓ꅑϿܽ؄⊘½ȯƌħǴлʾÿ㏐ͳ̙݇拨ˣԈ؀ԀΏʤ釗ֳ׷ŸſʼȽH6SQ"0L3C9HA1?EFDJEJGJKGKP\3541b`Uj<9751^]^[VX\XM9b3\\_bb[[VOU\6553+L%)59:;63]Rd4`b499:9:8548;=?ABBFGFEFFFDFHGEFGFFHGEEDCCGIJJJLLHHHJJKMKJIJKKLMKIGHGGEFEC@@A@==?@CEHGECEGFFFDBAAA?>@@BDC@@C?=<=>>>ACABCCB@==<;=::;>==@A;=<><:=?A>f\e95T1h8`oV]5_;34R3:5348/EL22OU-1/GT5SB9=7M,^aMz{|nyRMHJ>WH?.,<9(@03.2H>.DlK^o;.&#4F F$Z6f/': 9W-$FaG76>M2J5R{Z:qvYgH7"AgwpvPmfohiddR*:UC-ZGk=Tvy~KxnMLv^L9$)*7%  ##1D*.,&)$,$'5($*%''#+ !<"1.4.$$"7D:+5`+'"-559I+)64+459<-56.3/336;PNI4AX8=GN\^d?Q56"E0M@D[7@FJ. 86';@56ID3Q;3R1TN]s%APh<=Va70LDHrDULEMMHYk8Y:c[59OQRWUNKKLPONNQRUOKILRKFFOJdRNMOMIJLPNMONLJKLKHIIIKLNOLKOMNMMLKKH~~~~}}~~}}|{{}~}}wႆZ[]cdeimt|zwyxꢛԘ|vw✎tꌵmyaTq~rmvvЖw¶ܳ|x^a|~HIfxFZQfx|efekjb^K~^dmZqrLO8\yDHF@\|ZMsPq@DU>]ZhLUOX{Nuro\VwnmWJsglvy{}yQLQ[cgnrWEAC;-3))+(*28sMn]~PHUUn[si[Uy[VjxyuokmNG~kaI72+,2=/;=99704=G@=:rmgit;H=9B9@787:L'''&&),(*,-+'<4/1436>D@=@H&#" %!$$$##"&%$&&))+9`C@LHL{BEhew}jdij¶msڸԼ̺r¼ǝr~}xqjbltnoa^Xtuͽlklsunokwi\aUMTpiehĭ|yztigxou[rmijġkW~Vk~T\eeNZe_r[MOPTbw]VSOXirtozxlkjkjmsghpjfcld^epptsmia]jz{ǰSNNyRSWPH~qll}C@FGvmupmWa_eple^`dnquvA@===s>9KL8UR]ev>x@C^o~ykbcmmq^TfABoeh`F:NmWTPKLdaGRJTE[DH.I0'<$'90J4:B?YjQNbAr@V9?QF3;NmMGJIF4E:C@;8<>JA5>9J7DD??8CLK<4?.:,,)-Q0.@;?DD<9F5*33*O-/%((,798/-*5//4433:=:.-*,,%&"&%'$&,*!=+;;:?=DGC86l=ndmpvUPfsp]fvcq\s=KJW\OQH=:<-QR1,lD?58+?@@B2@?@B?.//378:8;;9:47969E>952<<=9/23/6742351/410/2+0-51,210.35.71/2.-0/-,.-.2-.WTVY-B8524986935448937/4001,CI7$Z63753342112100,I+002+/1/--444210..*++.TSTNTJRQQOT-RQYSMRMIO*PJKNLJKKFJ<9TOVRNHIU\][LUYZ2VW=O\[Y[XXWYYU.Q-/\T_U2H+;<-A631;;01-/,TVV+++UWRJHNMGIGGEHHGDBCEDD@?=CGH>38;:;A@:>89D35A5C=D8;>*:@;:=F?9CHDJHFADB?I@BA?CDKHKE@FCCDJEEGDVPFDBHRMOO..000:LQ[aaMX_U878=;ND1\2KHA9WQ4?F\\Q8Wa755ae\cX[<=@JD:C.;=RZc3^c286==Y:4@CA>99985^89bQ4dbU8YW99?NMVD;9=?>cmqlug9>=>C7;B?RKONK>NTNMLPFSclu>?p>CEFIOZMPWMQ[WRMPQPKKMLJJHEHGEHHEGKRSONE@@DIWVWTPOPMRMH?0627,3N`XSSPNMOX[$$(]D.215$'(+$&# !400Pnu^bXLZc]kdT&%)%"+Uj\pNWqkb6 +{KYmdA[eY.=7u^/ypz_HFIhimcOL4JM30(76-@HA$&IK7=IRGDS@:SM13).# ,-RGDHJJ{=177Y@6&QWBJNKQMHB6/7)*I,:''4`_wR_oq|r^r\LphQK*4IAqZQMqAHze{{r~e^TKDh73^>JHBEG/- & "6 1&VU" - '/$.  #(.#   8*  + + 0C.  + +!/"H +  + +!%60+8+)367B  "% !  + ;L<)HL-;0471#*/7( V;/6#F$70   ) + + +   +  +    +     + + + '("1$*/.2 % #&!')%1 U& + &78  + ."*#+':Ef &)=0$: 3     + "Y,focgkuƫؓՠjz򞁆jǂLRA>~emYO{gbn_ݏȃ﫮ø摡콌ȋOX\0:XU0GdqvyoeDvio`GSQ39-IZ12/,KaWA;Y=Z2/;*GJV]uaS^CǤѦ[R{p~hhSIvkry{~{QJOYejw~R=54) "I.@;O/*9asWòy`Zʇc^~t{QGaXD,! (-&+/0)-6?769uqkly40"#-&-3&+/23 !!"#$4))S547W.,??htohcjkx|f_ejȷzͱ׬u~spkhcmupqghl݊qptpveTYQ>9T{ijkĻ뀇zlCVkvIXB7:Dw||_{?ogvJMV89ec?dblLPTcViXMORS\q[XWS[ipqitunpprmosjkulffmgbele``bhgcûmy{ƯDCF}tGFJE?zukcdr<8;=llj`ſƼŷewj_[sP[W[ggbZ[`jonl8755d2278k92O)(056:65560+\[]YTWSPT][SX`4]-UVWYTPP),]@=st|pndb:LQ,)%(+4! ,# :83//" ;;=>=?LX\[UM[QPCF@JJJx_aVace}nh}<7/?" *";/4')?/2C*.,'Q!"'#(/2$,43   +    +)&-/&!&!'1%''$!,A3',(/!+/.,"'* @)EA$#'+H.I:-:HGS&.ai+-<;<=sSF00+/*2!!)"2!+(?O=<_kqlue6988=3680=7525.@B;99=:I[ek:@BG<>D;=DB>;?CDBBECCDAACB@A>;;@GIDE=;;>BKEGDABEAFDA8)+&)&AWNHKKHGFJE1$!$,"*4 ~ }~|}{{z{zz{z|{~~||{z {{{}~}{~}}|{}}||{zzz{{zy{z{{{z{|}~}|}}}~~}}~}{|{|}}||{|{|{|{{{|{|{z{z{{||{z{|{{||{|}~~~~~|{|{|{|{{{z{zzyz {{zzz{|{{|~~}{z{z{|{|{|{z{z{z{|}~}|~z|} |}|}||{{|}~}||{{~~~|}~~{zyz}}{{{|{zz{}|{{z{|~~}{{{|}|||{{||{y{{|}}||}|||}|}}||}~}|}}|} |}}}~|{||~|~| }}~}{~|{{{|{|}}|{}|{||}|}|{{}~|}}~||{{| {|{{|||{}} ~~~~~~~~}}~~}~}}~ +}}}~}~|}~}{z{|||~~|}~~|}|||}~}|}}}||} ~}}}~~~}}}~~| }}}|||}|||}|{|{|} ~~}|{|{|}||}|}|}~}~}~~~}~~}|}|}|}|}}}|}~}|}~~}}~}|}|~}}}|}~~~~~~~}|}}}|}}|}|}|}|||}}}|}|}|{|||{{{|{|}|}|}}|}|}|}|}}|||{|}|}|{|}|{|}~~}||}~}}}|}~}||}|}|}|}| +}|}}}~}~}}|}~~~}}~~}}}|}||}|}| }}~~~}}}|}|}|||}|||}|}}|}|}}}|}}}~}|}|{|{zzxyzyz{||| ~~~}}~Ā~~} +}|}|}}|}~ ̹τ롮䑦􁌉勒Ƥ蓆ż½⊅Р񀓆Ю˚쬤ʿ钥ڎٔɵ𶇛Ɔˈͳجֽʊ˕Ư舯䝌Ƭ؀ޯݙȶ݀ʓ҈Üܐ⧦َܨų̋馪ÁÌݵȽ¬殐Ķ헹˚۳阼ʔĚ󃉋ƉŶݫŷ֎݂ΫŇ뿰ث׿ܓΖßӅ͌ӹʚˏ⣴ԽƠ؞ӂ曣٥֭낾ʢϧ〨«Α͎¼֫ЈۛȚΓҿ򜼈̣Е퓨Ұ⒖ķ߭ɦwgeW\Zey?<><==@AAAELNPQSQJHGFDCHHD;;@=>?>?>ACC@@@?OVMDBDCCBABDC??BDDBBA@??DIHHGHGHGJJKKLLMNOQPPQPPPNTOMPUZL萷׭xgpliiw{~습Ӏž둀߅оՠփvmirwxxohmxr}f|pbnse|y|vxzҍ爽rە܈݂Žׅզ̵||ΰພǁέ͂˥Ÿdzɀϴ萧ػ沮ΐٻy|杮捒޻煂ʇߩѦDZڈ穲ם˼݀䉐ȹǐհվϴ胈ĕͱހ̀Մӻёǭɼ剓̮Ġ±ߘ˽ĀɻĿ٪򈁂ǻĎъƃτ㉮߸ԷòګȚۉʐײ擛􌝨º̘Ԥ¤ݽʼɣȱŝއ󘲶Ă鉥䗕ЧجϾڇ櫈օ􂂁ÿоIJݴΡİȸŻֱ˷θ鋍ż⚙ذ ʞ򪛦殩ݷώ倪ٸ¾¸۲4;TF+,m?D99878:>@BABCDFEEEDEFHHKIHIHGFFFEEGGGCILMLGCDGFHIJIHHJHIHHIKKJKIIHJHGEDBCB@>?>>=@BCCEIIGEEDCEEDB@@ADFECA?<>>??>@BBCEDCCC@@=:<><9?>>DC===>9:?;;e~vbUdxdKPvaZOmn29@58DX(?=f377EdzT{VNmSOW7XG@`F=olkBZCMPeVŴD9O-D/GC3.;D*!3C%#)M`[5R,%+2,C#QC8,GBF-9\)E8@\X:=39I(?)>-5OvR>jbgOcKBG{z}|}fs\IT]\T[GN5JPUapgbE5iAHYnF[iC^DnBW[;LG?EgOVR[tPfhz|η[f^Nxohlnwu{lsRQeorluw~Pv?<)*-+!967SK]D@HEXF{foZuecIybbUuh{zu{dr{KvH|h`E73.)2<3:86//9;H:8qlibig?C=4?5@6:6CL('%&&+.(+.--&6314329=CC:>AD"#!''&&&%%(%#!!$&$$%*).JUDQu|dmstPc\hsnzn|ssۧſrѶĩݿ߼tΧ}~wi_gpusnmb[lxtihr~{ueYl_bHjb}g\nfx{sreklLKvn\HL|{´WM^\dcR}x{~_TQ_jhSVUYOUOZbeu|Ujgkopxlsutkbcihkqmsj`]]_X`fjpvpfcu|ݳK}|}LPWRIC{ju{EF{ٽxwkz~`ehsrneejdmnnnr?=ru=GG<>;02721QEMPac|p||}mvnk]W]]upolm^aS]biv{no~avmjh^XYWTZXUY]]\]a_[[TVZUdaZhg]^Y`cSS`^]bcaOiOILSLel>qde`ZQggd][Fׁ]JOj[UW]TSNr\4f{fyppnKN1@Bq~|v[QNUrF>?`NMS[15N?X@O\hA8_QP6>N7F/G@E)2;+*;P@>?FHC>A>=;:C?==:H9C>>@78AM=><.Q*KLS'4.1+252)O',*/)3./570+/+&%#&"'&''&MH%%3,07B:;><<8=AxoknuckPyUT]KoXv_iZemFGB>Q+G@TB/J)"0FEI.//.085/0-,-TT-+*-,TTRQMIGHGIJIFB@@J@AEB?9@CDB23B:9<<7;83H4<=69?D;;A4;<:=DCB?EJABGDF?/F?L77ALF;@4TT[B[43>5;hVULK6/9LJY`8i63^Wbc24;@:Y8;CAC:@1ICI=@YNU<:B6@?@DFEQXSKVPTX]TVUFLFLGHHHIJFHCABDDJHJKKROFCQTYXTTOOOQROLE?2=5+)7KWbWRRNVm,:=>A439=[>C;:T*"8"$ * "# ##"&%"&(+0*.0,--1,#!&'+-.-+,-''&! !#$#   !  !   !!! !  /2=(68/09+(,++( $) :|M^zqxkv>EmYltR71:T34(;ANIDdUDEwK ML*LKI`2ODCKIXSAiPWTu]p_YXaS7V6*>*C4)F}C:/$8<601)@NL<<1L0G..;uHK*6QDDBTI|EA*.$'2!K5$'*9[TNbSkhMtZNV+QKN1<=-09r`UF.?Fgaqgqh[~Y>HFUga:l1)5*$&#"/"/&6Gh݉0#% "'  ("'8,")($ 61) + +   + ,C<' $)#-#58    #,(B5  $=KW* '!#&0  ( )C;UL  +  + WC>  !<2*?]2!/A4#8M&,1 :WEgWS^B<>55K+"0MKA,#',"-//'&03>45qnlfpi5* -&-'-*0/ ""#$ (,0sx>kRU;AECPOIRPJJGKM>DQTO{VUM?Y|D#> (!%!1@+4",2!!    + )$ #9(9 !!  R2*+5$2NKXZ0L6GFv/15R25426%0''%*)%" $%#"#!%!$!%/""0:'@0*)%)$%&&*+/9& +,#+%+0.,.8AACCCAA>=?@@B?BCBHF?=GGEB@A@DDDFFE>7*1&)?NWNKKGJR!#!,!'~~~~| ||{zyz{z{|~~}|{{z{{z{{~~~{~|~~|}|}{||{{{yzz{{zzz{{|{{{|{{||~}}}~}{z{{{|{ |{|{||}}|||{|{||}|{|||{z{zz{z{z{z {zzz{{|||{z{|{{|{|{|} ~~~~|{|{z{|zyz{|{{{zzz{{zzzyyz{z{ }|}}}~}|{{zz{z{|{|{zyzz{z{z{zyz{{{|}~~|{~~{z{zz{|}~}}}|z{zz{}}{~~|}}|||{{}}~{zzyz{{~{zz{{zz{{zz{||{zz{|~~}{z{{}|{||{z{|}}||}||}||}}}|}~}|}~} ~}}}~~~}|{| {{||{|{||{||}2|{{{|||}{{{z}}|}|{z{{}|{{z|||}|{~~~~}~~|{|||}|}|} }}}~~~~}~~~}~~~~}~~}~~}~}}~~ |||~}||{|{|}~~~~|}|}~}~~~}~~~}~}}|}|}|{|{{|{|||}|}| }~}|}|||{z{|}||}|}|}~}~}}}~}~}|}|}|}|}|}~}~}}}|||} ~~}~~~}}|}~~~|}}}~~ +~~}}~}}}~|}|}|}|}|}|}|}|}|{|{{{|}}||}|}|}}|||{|}|}|{|{|}|~}}~}~}~~}}{|~}|}}||}~}{|}|}|}~~}~~}|}|}~}|}}||}|||}|}|||}|}}|}|}|}|||}|}||}}|{zzyxzyzyz{|{||~~~}}~À~}~~~}|}|} +~}}}~ оĸͼ˃׼쏋ľ՛ݢ̓Ӓ򽮴޷ꐛ݆ܖ驇ðԳ–ӢޛӀٕᣵՃŌۯεЬ޴ħɳꁀ녅󚴴΁ú͙ѷ퉗գδӑȱҩ럔΢б˽·劇Й˷Ȋڧӽ룴Ƨ³嘁ͦ⻪ɹՉ퉛Ш֝ίͳ튉䤒Ѹ̊Եȗƀ꧞ꊇ舻Գʗ鰬ŵƐ􀻜񺠦嵺Ԅ󊵫ޝղéށȎʡɻɮٿé݊嫀xp]^frhh3W/d`XSSOMPQMIGFFFHLMM+QJFIMOKKHGIPPIHHKOOPNHIPSQJGKKKIJPPGFGFGHMNLLNOMPOOMKEDDDFGGGDAA?:CCBACHJIEEA?AANb`SIDDB@A??@CCCBAADBCCCBCBBDIIJKNOLNJIHHFGGJH<{˥ب숉ؗ򉊕ȇ闍Ŏ뒯І~ё•˨Гko`]c`d\i{|ݦՐѤvuödxݮ劗∺ā~пÕ؎ҝ铅Ղقߐμǰ~ŶեĀܹ𪺷ȭ֤Ոͷľһ¹ƃ۝ʾࣛМüؤ򈗚ս¿׺˽{yـǡ҂øăԹ˖Էѡѫزح͖ڏʱ馰ʍ؛ϸՆԧŽ׈ƛѯ¥в۪֣ב·ڪнźǰˬ⃂¼ȀꅧӹњʦϒߝÆބϿ僾ȓٙøً܊ё텠ĥο񿶣غĕ򉏞畟ئδܸꞆӟ˝Ȅ΂窲パDzʚϽߩꋆɷŻ̻ħȵݰ̤ǵ׷Ӏ״ۇӲ߁½ȰހƬ邹󆌝ҸԆVҿŸľı҈¼==J0#Q\FGKGEk5KPJCHXRKILLEHMSc6<75UQ9:7VPDBOGT82SP`201a13bbb43a4426963024,B3L.QMV865338:;99:;9:>ABCCBABDEEDHGGHHJJHGFGGFGGGHFFHJKJGDFJLJIJHJJKKIJIJIGEGHIHGFDBA@?>>=<==?ACEEECBBEKLHBABCBCAA=<==>?BBDDAAEGGFGFA>>===@<:?>><7:88;<=:8;s;WF58CdXY05T^ :86356\QY25TQ[.XR?604\Q3K7pMxss[dYWexz6^0bTEEbZd>f^`^\R7A_]]>m^Vrb\e|yydmoe_K532;hD;@;fellcHrST`Z+E6T@?TXTUSVR]SRRcl\F>Z[\WgNPH0K9PRUGtfw|ojaNXXTVpuqsqxMDMOLPc]6^voX.4FxwtrxA<@^T]=?OQ\yX]djw]Des'8.0,2(*%1=48-)/(&lS{b4ngP;<5h]DDMNGyYHT@;:9nysjW=6D80*NH,4@6:$*=%8O4>*!C=H0.3YJH:K;%Q84-@HMH;dG64:=90c\{_bc`1'2')=:hG0K;59Dh>9.;RY]1Q<8C2&)JM)=6;70IKVCNff^SQfLod)Ydr<4k$/ :FED1~DH-(VO,n`MG.2dF7_1Q]Z`KX^R_>%7@AA;KJAvZJsxA<@BA>tfkq?=@KH*H~~}xy{yz}~{{{x|}{~}~~|{{|~}|}}|{|}|~~~~~^٬ˠfPX_OSq{wwsmqfmjXf}ƕudf~{{f}זvdTSfPV|_ae\z]Fhx޶{ܠﵤׇǀԭzŶkwsl9UInMIHHqdkw}jl|fVfTnh6U]CH]zZOAhOsKQnE}MP~Ki;k?uClKmfCuI_U;?fwrDZwgzeSMI{pgmtwmn}qv~sx}uo7..7@6*+BG:>GuL;<1_Pq\rǩrieHjgZUmw}|fkn_}N~Cx}\uC6-0&7=:421-166C=6955bnbHB8/?5:2@AEH&)&()/20,,,.+$2.1/7>?@D@=99:="'%!'###!$%%!!('*GW{wgNZitsnȹuotrƼŻoÇkvojvqnqsh`|{tpm{YZjnaaohQe|ob]uq~oYu\kcWoT{xgm^Yoai\`QoaalR]ktwzzp|UahhCyTVR_[ZZWSgdx^cbfndkruri_cc^hjmi`^U[WZcpmqtne~ڲQSsvxuu{yyEQXRIDFF}GHG~~{wjnilkntkffhdnfimyC>>AABBDCFO?ah8?KPA<;97ieeecade`]Z`nifm8l6jjd^ah758rM{zztcitNjgk5935XTJ2A-2262.LXWnpyyotv{wrrn]YORgmhywciX}hw||{olg}fnf\SXSX][UZVSQTWW.1_]ZTNPXV[OXkJGfZ[^^cRxdx}KIICGNNcjk;xjbnMўgPjrrPgZIYz\QOJ\QZNPjKByƚir>>>pBEPMMzil~o9~\MjcqmuXMAW|VI@b|@H=GHBf^?>VITOMLV@H`Rc;VN;?AD6>@=ArAsXyxumihUXG9:jQGWbbMeHkuQ;7G00RIUJ7\3$iDB8767>>7AAD:777645674313/+T?;.$%R4654520013/-.++S-0M0..0-**.11.+,..-,.0ZRXTOQNOOTUSW/RTLOLPWPUNSJEPMI@CWTURJINNV-0WLT]SOZQ9YR\VMQR/VWV1U\X.-\W\LX-CB LR/-/011.WW,-VTW-,-.-,,XSRSKFDJMLIGCDF>AGC=:>FEA36<:?;78:62C4;5=9><<:?3:D:CEDA?D?DHC67<7;7>99EH@?C6+=@D?>C?CC<ADCHIPTZKQTSUXWVPC?EIFCEFGDFBDC=ADEIFGNSSLMKICPVKPLN#ROLGDB7?4*>?HY]VUPUChB2;K6@QLHC>=?;` #1-"!#!#3$($#+'$"$$!"#&,()#$#('$-*/.-,#!#  !"" ,!"!     %'# ! "##!$$  8!8) $7,.*0$1*-,*/--'8"hlqnvyYT[c_fR3foxmE03?T]6>*)>DrikKpM[9;bPBO>_1+05]@E{3hQLl[Yd}rw^UA&5+BA,{l,$N/"$+0?IA055590 :55DEAEFH=JBCG[\>$$HKLM^Fwq=+ "(,13Q33." #4AISj}JCWTV[A+jd/5659IG&NigO&-Cutsmv?8P' #;1#+C 6UaC;k<-248 (bg?(MK +'# 0 *F+F2      *$      *"*/.$%#'+( +$!       &$$ H6<AMQ$B + & > !6, @1," 4%   2 +#GB""$"!?7:>!"(c|ŁУMlCCM0P:;[R`^¯^=HGkc.CB-3geA<5N3LLSi8X36[8K/Q-U1Q8PJ1T6B=-5h~oser`PHD}womrv}nor|trvZ)"'6:.12YI@,_VpUs̺~pLrtk_dzϒ|zc~PwAvPl=) )*,,+'#'-/972933bs`8*.'+%2/.,#""!"#"&2eph{vzmB,4F^U_]np|heuqujmӍm}}tnixvs{~uq׉酀ÕmdDGON>AC;->a\baIzvo.4).,+:*4:<;?>tpqgeλߵ¾dXa]a`ckd`bcbibefo<88:;;<>=AH6PV.19>300.,URSVXVVVQPMR]TSZ0Z+TTOJNV+')U@yuoppfVW^=SSY++$%94.## 0<:?PQN[TINHlUfk}n|hp^onYVdNNK?887:=;9>:89976<::758C@J>IV:<<6:@;?72=605 /('L6"8 + K 1*8& 9#2,-10EE;.6@1  . # 0 + =<%!1'/*++4 $1%-2."'')%%!%I-O=Yb]*AT39008@L%2196xA8%"#&0($"31".1NP^TA1),1k?H6G/C84710()$)*&(!"!!%)%! ""!! !(55%+2#&,%/#5(#&"*0121/3 +   &/*(%%#.6;)-.:kfybcSobA'4#-4$! (! ! 6""q(*)''$((&&!''&#!&#%$"#"#$&'%&!$"$"%'#&"%!%# )$$#!!##(& %)%!&#+$*'"$%&'&%('(&) ()/&'&'&&'(&%%! !!    !!!"!  "  "!&!#%!+""%!!""!$!("'.*&&""&)$($ ,"!%/ 4-.1$4/05*#$$%74+4/)((,+.,+'0"!/5:73*+%#$"3/9#/"-4'$#; 86>:?A99cej655412.7<379897;2AC::?<'RW\i678;:>>BDG:AA@BEDB=118>=;?AB??<>9>9<>>B>?EIJCD=8/;A>E@ADDEA?:-3&.0=PUOMII3A"$"#"  ~ ~}~}|{z{z{}}~}~{"zz{z{~|}}}}|{|}|}|{|{{{z{z{{yzz{|} +~}}}|zzz{{|{|{|}|{{||{z{zzz{{z{zz{|||{{{|~~~ ~~}~}||{zz{|{ zz{{{||}|{z{z{z{{|}|||{z{{z{|{|{|{|||{zyz{zzzyz{zyzyyz{{||}}~}~ }{{}}{|}{{|}|}||{z{{{|}{{}{}||{|{||~}~~~zzyz {{{|zyyzzyyz{{~~}}}|{zz{}}|}|{||{z{|}|}}|} ||}}}||}}~~}|}}~~}|}~}~}~}}}|{||{{{|{|}}}|{|{|}~|{{{|{{{|}}|}~~~|{{|~}|{|}~~~}}~'~~~~~}~~~~}~}~~~}~~~~~ }}~|}~|{||{{{|~~}|||}~}|}}|}}}~}}~~}~~~~}|{|}|{|}}}}}|}|||{z{{|}||}|}|}~}~}|}|}|}|}|}~~}~~|}~}~}~~~}||}}~~~~~|||}||}|}|}|}|}|}|||}|}}|{|}|}|}|}|}}}||{|}|}|{|}|{|}|~}~}~}~}|}|}~}|}~}|}|}|}|}|}|}|}|}|}|}||}|{zyzyyzyzyyyzzz{|{|}Ɂ~~ +~}}~쀄 ~}~~~}|}|}~~}}~~ ʜüɿ±숓ºž.ȵꛉր➄Ӛ쫬Ի㱇ӀБ명Ԓኚ∧ݦ͓弴˒˂׆ƠߋϨң꨻‘Ѫβրր͢˄ۖ՞ߐǍϧϺ献޷ᵌ֛低ţہ򬡮ɼցݬӟˠ躥Βѽڒط󂨧ٟ݅󌑊Մۗ݁ޅ䔡劁ቌĎٰͨ͝څݭƩʶ׺ĉꑸΰȚ݃ˡۀNjԘ貌ކƁҷЎֱЄىجª噅㱨ꍢ͕ڞū뀢̰ݼDŽʱռՔ˼ޭ說첒sc\a[SOHLMMJJIGEX1LFFCCEJUXRNOQLVhYQKJHIMMKIJKKPRNRWVLSWYPOU]TNKJKLJFBGDACFHQJQMJKMLHGBBFHECO_eXQQMMQRV^bhg]VRWSTPLKGKJQHELSWKGFCDFLIHFFAB@>?>>?>>@?@?@AAGJJE@A@DCA=:=EHHIPNLOQHB?=?3_Hӟ񏂥̗ό؋ٹϝzqɝܕҺ̀܌߶궤_f_VSflܮ˩ˏӡi˿ɋǧܳ쨳ѝɐ⹩푊ߙŀƸ䘄ˡߤ䮛Эڹ낃ǶĥνӾƻؗì퓥ǿ͕҂ɚބ~}۾ط¯ܢŢŠ떀롟ǀݬǭר㿱చ׀ԘŸâャͶƼ핬ヅⅈԥ$Żͼ䁣ѳ񀓜􁊐ʺܙ텄̫㙮ľүĻȳ폤ɮͼͪĹ䑋˷種իڹ쎦Ŧڄɷ֎΀ژкÏ쉾윶٘񠱩ڟⱠ؆ijȄ땂ۀ،茗˻ųЈīÓ،̆󧙕ʕ킍衵ޥٝİͳ܀رۂžķʷƵ˿ɩǸиϸô⁔Եܨٶϊ̸ɲǼ߁źö޾ͽ¿׸ڝ㞕ϼ؀낓̻Ź𬗙ū2>:cRLZPPTPD<5OOOMMSPJNPROIINRc?<:gL`9:QfWIIDLEe\]2441a^ca``2838:::;45;:5+O:EC=:<><66515<><=<:;?BCBBBACBCCDHFGDAIHGEFGGEEGHHIIJG-IJJJFEFEFHHGLLIHIHIIHIKJIHGIIGFABEGHJFC@?A@?>=>=;>?@B?>ABADECBBDEEDDGGJJFAA@B>?==:<=<<5:69A;>=<=BG]^dNV^86?2:RN<236aNS[4ZKO1jaaB@3,O,I6EV[nudjmtuUdr?h:K6EPdvW6c7}GcZW|18GFJX\1KkrQSlkhfmSby~|YdOLW8(OC4%WW>JlrK\L=I:pYnj3D)EHNXZ\_L[a[U^ocXFE5ZgYXPPQ?L,W0<1T^v?ho?xgXFkFoRbPyu~OWS:AIPGC@D@GpC10A]^rvnjbUJIR]RmDt^dDs`R[\qgZ?qp\ǘ467@5) #9H<5:9%1DfM|hK?N;7TNld[di`C.ACP@I-759/;:.';NHI5M,.1<0B+$)&HA9=>>&56YM:1VE9U.'6L:0),H5Lj/1.,24fbepdS*"'>!2;3?WT&'#(0-B@\aHQMG8"W@' ldo#i %3 +*Ck + +1>a+lwbIK=Z%>*OjkumzyY-b]u[yl]PbaTv=bWE@La>SnlVGoR]y|u$7<#$2 !.)!&,02% !%*"- ,*%;3'*5"($>;;]b:# )%+:()/! 48/37#*;>3--#&D93]DIAQZcpB@DJPUODj=$- >;21Go0D..S^RYXWss?[MOak>ABmGufuNJFCA??DB?:>;BAEEL_{zzwtqnpnkqqsyv}wtutnlghoqqpw~{ytuwy||~zxwuwxxy|ytw{~vttutwywzxxwvwxvwwxwyyyzz|||~|yyan}k`uOZLtD'Pc~sz^[bo{u^V]~kjtx\fQO|t،wvXKsNmmmtyl};RacFܧrtzstǭg}붗̯Ӥn~~|:nKC:BX_DGsysz{~QN6vi`e>pI=>^K\7VgjARGLX?Rhzx[rEAAnUi[@?BILKqVÓו˳˃mqx}aWOMKLqldyu|y}jnvqy~90+..37)9HBB@?Fz{MlzeKqafǩtopOghYYrqpkdn{{jacOjRzusy|Y?9,+)A=>455+.N47=79;?;g5NE60?88/CFJK()%&'(.0+*(((!3/53;?@>?A=8636<'&&%$%%=&&# ! "#! $&(/uX_`koL\EOowvwoȾŲֿwoqsۀúȽåjll{|}vmpkkptshnrjhȹQJvPqUP`h_MejvVN?yEzSSauytJu~ZZQ}gutnt\hZliqhneh_ql`qme|rhQibt__bY[Me[pq^_aky[RY^dcaXjmaWU_W`htnitq_r~ɴwytwruy{}zJR\YIEJKJMIJƾǷeolrkpwlgjmdkklnwAACDBCDFECxh5>=DMIMGC?8iikleecdb_gmkijlj5gd`^fk449?Iz|urldaNYn6mgU-0GF5H07778.*Mh_u~{iky~jxtqkrbSMWhpcugzla~uhw{jibw]`RNHTUT_MNRVNKQSU-.\[[SVTV]]U^jZM_ggamfWYQVovKEEKJFXlmuj^Sve{ovde~w}`_x^NQUm}KX^MLe}xzf_jO?@~@;FbzrO]=hcREX`SviYXSVQRpjP6DDF?Ki987UHV^WPVV=M>m5TTECH6Db^{Cg{AigJUM=MoA5GJH@{GN:N<>C>TG06ULPG(&HF$*ND9FhLjbM::>>]WGDPFSE[?:4:<>=FECA?BH<<@G?AB:@9;;;>?aFIC>=879BDA2[46fF16OcETHbb7ZX?CK?=>$EF>J;;@:@;?wj{hd]E~=d>STgVEqSSgAcr6fY=P1OJXP48$>DF8/6/>;??A<<:,..5=@==789;::6756503505689611-:=564921WQ2XPUT.442.3345385323111/-//,,-S.55--141.QPSQV.WOYSX1+/.47H8C97::5877973060,G1+3;$[793123611//-010,.+/01/--..,2000-12...-U-POJNJMUSPS..ROKOKNVVWOOINNJGW'TWWWL>Q./.1XW]]GQa=@ZW[\UV^_WXY\`[X\[ZT?8*" B*.-.-10.T,-VWW+++,.-,,UQWTGHHFGBA?=@@G@B<=IC=6;==<<85<3:>;A9=B:496795BACBD?=@=A97159=8,@>7FBEE9IA=KIC0NLDPK:@MKCC7;@>FDK?FOK=E8^ '4-83!@_lJBgfeg|wS|_j.J.!?+BQ,1) ::%/4261,2 M8D=3?tCJHKP?,$1!#BNV#6//)*E0O;)8(9" @!$  /mJL8"  + +'.L7  + " +'PHRN4 +B + MR5#&  2*+'1"*&-',$1F(%)LDPMVQ-%!"=%6813GW3@X/*@7"N #%0%3#%8/6?! !;-   :5=)'$#! "%$!!$!'+sýȾюΏrePT6<1K67bDTMZFNKM\ZVBF_xSdeKH^ik\CknNo8l7|fnu~yz|vmC4S=wXh[TUX`i_xcY&=^>>-j੆h}˝ͯĎ򺙵CM/-%*BPS\rnֿɒp>9RhXKX(I0(.E4>3GDFN\OF?)9P\XBU2-+RDNC1-/112Tdяؠֵ΁jpv|[UNIGF~vpi|xqs|ttl/#!&:864/,EE.BJ;`TmXh¿|Rlucdxv}qjNjRsou{O}=(0+0**' $A//6365:8i/7+#/*+#20/* !#!!"OQZW^mqO.5+4eT^_wf\hvjaԃӿsqt|w~zrsqpx~z}ysĶR>QI5HN2J-6GGB6@07EluHG$1/"&,9@A(Q^[st}vu||~TAq4eTDGJIVA?BcG|aDM?C9?683=93?<8PLFFBV9i^oYVZTZPdZjm__biz^XY^_]aȲ\jldWS]VahpdX``Y¾ƾn{}qvz{twvtCJPN@?ACDDrABzmfj;­]edlekribhhaigffl:;??==>@@=hU,3-3;8<63/+TTUZWUTTTQWZVUX[U(MMKJTW'$',9uzs}qjfaZTjADU,ZQ: ,)&"%1JBWb\aVPQY\]NXYRRLPF@;iFPXaIZOkbSm{ociUyfk^YRcEC:72876@37<>95455;<;485:CFCNVF?NSVS]XNIBqH\qjeq?79=7-/86<60.%,"!+ %3-D<&$1+%+30(&&5'(*&/$0'*%551)#1YH]V;'$*/KG;3?6@5F+""#&&'%!+#!&(!& ""3)*# F&%J5 ,;.54=9!57($)"7/,/'  .*/.5%+( #'+ *)#.&,/)326j`taZUB:T$%!&!2 .& -%("## &%($(&Y&%$&%''#($'!*X$"" ! !&%$$""#"$'&&!# ""! (%%%&##(')*!"+-'*+'',-()*+.)')))%#%')(%$('  #    "  !!&$!&$'&%& " %# !!&(,'./!%.& *##*+!$+.%-!-,*-(#$0+.''".1'?)&',$.103!+&78;4'#45#!###71%;+720;2"($6% + /=68:;@;8\\a5331ST.9D:7<585:;CC@9>>#FQV5:<:8U9=>@AB=BGFE:CFEJNRWPNLJJMPRNKKPQKPLKJKFA>9::<;8=DJGBA?<=>>?@DEDCA@ACCB=<=?B@CDIGFFDDE@OɀۂŶߐƭ쀪lu耊ᇞ΂ĸ􂈤۬m{l||dm|ڍƛĸ刉ŝ㒍їּӀíہ¯ـſ±第ͭ딭ݰġ˿¾Ӿȿղ؞ւ̺߭򅏑ԋ̏ˤ͖҃˻ȸӥ莧Ɠﱜћƶǻкˉ¤Ăºظ֊Ձ˥ëꋤż췇艙°ϵƭݷɽ˹卪˵񁈇׀숌Ĺ쐮Žºż󍚵’غ씲݀ˢʼnÿ㘟Ǻ؃ͮԂՙ憄ӿكやш󂖙ܹмç🄀‹첿엡ɂý슊ҵ޵ײNjǻ֬ф冖󈛘􃙙˼̛ΔżɨŽİؼȻĮ󌜧䨅³𤋶ꝁہ矢ٲ֋ƟՄߝٓʆ遏儓ñ·ͿƧk1,I0;`ALPOI_?bLMGLJKUTRPPNRSQPS4<>=a[c98B@<82`a`\^463bc`_b`]`434:75688751377ACBBAABCBCEFBECDDEFEFHIHIIIHIHJHFEEDDEFGFFGHGHHFGGHIHECBFFGFDFEABBCA>===>=;;;LS)'.*)&IL\XVA9HxwgYJ[\@@@Jg;ZpqdYq|TZ}[u_o_GJiI82=$-12N^R><0O(,>IcMC5R1@;6:@bLAT^C5-8C[8@[T_Ll}BsA7A0GWIDA4U@#0*)>RNSKGBB7C)-C0/6.=HVMCN5^H9=6SB I2*)-,A8DUZHS12:;jSvXC'! $C>KG39$,BC\:4PkGmljAWCZFT0,"8^[]a| <%;F83 >49#4+E!5A1&60H-CDi2PPY[VU@UjQNWUUM8FWiJ:737:>@@97:>A=?CHvpmntuv}|~~z{{~wihfkjinlmjjccfa\c\NLLKNXJGNVKNQOQTSX\]b[[[]^`bb`_]__[`]_]^[XUOQTVTTYbmqsuwtwwuxxxzz|zwxz|{xyy|}|~}|̣xZiK]`ZRXY8icbP_Wurik]t|{}[RnXmhWi~uenuׇXsj:<>voF>A7DSpwYWwMqVjrrAXw}Ī|̴~nv~xEmT?9FOUTI]JV]rdmQKt\^Yg?Na?;CKHWKfX`qHvmXFUOqqQvERxOw]ztjDDKiΡivkaidaYRktg{xx|kfx}nmwj[*-.-/&KoEwF`oamWsSIn_ezqqWWguV_}[rzmcYQ^aU{qsuuTt<9.+/==??;3!?c81:59=?9g>LG6>B6;7GAHI&%$%%&')))(*( 258<<>@?@?<<853"'%$$#%$#&%# ! " !#&'TQ@i}]c^[mOLYOfyрwtìưŷɸjjo|ytugwnex{kjihip~wYZwQN`RNOXTRmpaZRRXV^rOj`lnh^cnlhxnrY|j]u_fy_l\MS{md}LH}x|TfcoU[_\jjmxy{hoV}c\gkkvi^VOby`jmYcyqugV_`nfgicYZ`]`emolwp\dg¥p}v̹W{yuvz|z|MX`aaWRUOULyǼɺgskhjmyqlkifglpv~?ACFEE?n5?AFIFKKHH?:;;<8g`_a^cmhdf43cabacfga37rQ~{}zvq{MT\m55W14QB8I,686660,Sjozxrqkjpy~}{lk_^^SQYhs{`]ns~wbiqpihuTVHBJLP]XSQQKGGPUWUUQQQPRMX\GLZN]llfsioeUNOHwlzik[8GC-C`kac\>|qwamSy`XtmvXVgs]YyrFQYPK@?{nrairgOIzsE=?bd[l=imScKDZh^cUJ_nfpf2?ESG98_IEWYXTPUBVHfhSW@F>D=EC@8974k>7D;KM7e>haj7@31f;7`3A7I98QHMFNaEQJCOIIKHNINV72,(+GI2T) *$>:>A2 C@KM8#"@ECFC6B8565i[pZnICHEZymfLHh`ql|KiKB:zeGCJ;IQISVO$5CD=4@/E:B@;2DID?>9A6?:@?>;64379799-;86:;;@I/73)=;:765697:934623/.166791/,,I/544430127//PS14RRQ11/504762220/30+,01WP/45*-02,SW.-+U+-U0T/Y-/.6;N/>949;88:852213-,KM-C1S6441/L13221/.020,.+211/).00021-0-/0--/.T-RF@LQL+VRW0.SHNSTX1YUPKJYHF=';.ZZZNIVW00.^][PFPXM3UZ[[WZYYTZY[YV\^\O5/O$"47=89;?G@;C@B;9893:;4AECE;9@8?A97<::A@6B:@CNI7?BADGCKAEC>GTEDBF<8@77CBKQHJH@BB9GO-27/LV]V<09@PXa=MPP3LFJKYB9D0@5S^E8.be;35]+>?QMAOM99_G6;A0MX\[ZYQ]LKW^KG99@?b];d_=DGHJQQUQNQQRQXUVNBIHA0CEBNQUSUYUSPJIKHKNKMPSKI?QQMLKMMMHDFKDB63ELR[]ANjkbl?Y+ - !1:EGP%+' *>H& % &> 7 <,1#%-'' "+3GII:=@:( '#++58Oh];;8/*$"3GXbhE   + +   +    #.( +  + +  +  +)< %,-#&-$  +    $ 'P_><#&##<0 *+"C ) +'  + +1% ! ! :  (2q|Ϻȿ覭}rCF2@;;6;@)JC?5C@`Tf~XYWL]gfnrduTIV?LxI?N]W}TꑔfnS)./fg=11),8LrsVL[5Pi̾|vtlŇеDI5*%5=DVVaO[dxxL:L;Klj78?)%+1/=7I@CK9koX?/=?YT:W1:We?YD[QG.,Y@hƜh|t|e`d_]SNmxfyi{upgUE8[(,+.+0763:5A;HCCPDYtt|vvqNk~NZ=P44LQQLMMKMFH[=6WaHI-:8>.233;:AA~~?4[*31586:755/...11YSRSOS\VUS*'GGKNQUPG$&R@rxr||ookfm|ACGT*)=!#3&' "#5MR^_SOPQPRY\]`YNOEEGB?wJPZ^CHU{gos^OT\YYzZdA=20214=:9<=;8668978664371:6W.5/V0-2355737=9;976=DE?99EHNP38;55;==>QAB>=?@?>EDG@7><7*<>87<;::D??@><:=675312560[\Vqn]EJ⇗Έˎփ޲ە́Ոć򰈋̽ـ~鄡ų艏ǁۋܯ܅񈓆􅂎z`bjix逦栭ּ芙…ς؂쥀ࠃ늉džݾڤϓľȬۮ򜯧兩󃑘ΠƺȷĿڎ컶ݕނ膸ëᾃԮû۔ׯ굀Ѝ݅ȧs̽뙷ͪʬ랖ۿǺ㳋ǘ”Ɨ膊Ӕėɲ̬󡗾Ϊ®ꕊ玟꫎ǀӲ㓞μҽDZĶ݀䅿°璪ג޸ηϼ竓񡟧πé֯Ɖ߇̻־؇®цƼٕĥߜ۰ۄɀѕլうĎ㇌ͥȠȈ֝ҬԱ쎔놌Հז涸˯ɮႌ솉谶Ѿۓ޼Ӭ򼰄􀊡łۨ̽鹜䎓끏Ӌ얦֓ᙟ끎ŵ킃ك͕ӁғʡĿƶ§ЮʼƼ䇗Ⓡ▫пԗʚȓķþȽ÷զ׎S?LF"7L>MNA9CEQQRRQST[XVXUWXZSMP];;8cX:8:<>95_25VUW]22d3aad`]b16@:61148:7314?=<>==I=64799747<@BBBAA@BBCDCCDFFEEEDBCDCCDDDFFHJHGJKLLKKKIHCCEEFHECDDDEEGFGGGEDFEFGIGHFDCCEDEA@CB>=>>?=<=@@?@EDB@@ABCDA>>@ABDGFJMGECEFCABADIMKGGD@>==@?68>?:99=?@@:<@_oK^T_B9os{;R;7gimW@h9MeB^XP1?<:4IOM>*U~wpeugvo|R=JUHYw}‘OravTyXp2\DU_Lf5}g6NCMcpqcjVbsaz~k`RnQI{E?34=POOe?8QrD?BY@wmjdO--(/,+,-/WP?LbLKL_ircm{fWVEGN5Q9ml\UrUd[cFcab[NDECWJ3(9J ==PgKcTKXclkf;XT340W4b^TZ]NB82J?>9PJBCVdXX>tD*,/*1mKS]M37K-3:88;-?Q;-6&1'2/2/&+"!+7*R?DE0SAINTY0I.<&7,@2LB\PB`;6_KT/.)) 7/@)_SpVtash59f&'4gL% St@d !,0W $O+8+C4l~*T>Z+)qWvXLWa~_t\OxaBa|musz|[h`J*2?L}gPNKvHjQ9vqnj{yodB3$$ +&39101(6 *-.,(%%,%%K4_OVWA#&#M_[Kf-G.')?8:'@G+9:'*)#2-D N68*`Q<8$^3RONdQV4[XM%#.]Q0OUEKPlwa]d5/O?1.EL'5(E9+L85C4KI[VU4T$%/.B6A<2=2EGNKe`R@8a\RR45NJG0:yrC@>DOE@>;d_ee43d94<=AGHA|qdhplkibdkmsrsttpurb\\~~||pp`cdecaagabe`]Z]WZXUSTPRMn\lz{af}yHoIwHfdCH9)41hvXwGJJoKaŎ̂Ye]S36GXS:\}_O_riyٷؼww|STW_\ZQPOeq]GGiNeq:atDo_hp]u}ǍǗip|r{vCpF`><]s>RVVbb^WbFdyby>Kb:EB8dJ0]n@=A9a^PDLzwxVqAB`mUlnMLiyOʶРʻ~pvf`n^YVJwitvs~hj{tg^gs^\U*,.*'AMa|hG=sESevFu`Zqt`sTzo|of]}rfuprt;b?>1-.3?A;61@AB>;773'%%%$#$#"&&%! "$ !$(%D~`bdXPb\RyfhĂ׽̵fmdnѾmԿȼko^jZpSzowkqli\eds{zygosz^T_loqz{VQLpWHQv\i{dWg^`bsynizJ~Vepf]LcF|]_ZMZzzyiz~hmOjh]xeQ]fUOXW\][ad`EZQk\O^gzyp^SQikoqkmzqvehgakhkZded[`gecfonmvm_eifžrnUROQ{RO^idcX[`JMRyyʾdzb_p`mrpunlkjioquxuy?A|sn?C:DCOMKJD>;;96`]^]aZdf^fdcedebegj345fIxxyLPX_pg_V@Q@LL4Sq>ZiN4}@BHT]gCl[LHAG=mJGGM^_E:45841B1'&%6K=%'3+P?V[JDNgFH:GcMQHM5TC\L38K:E;BCBB@FFB@9652feb7iI=:9f95\E\>@:Q7F3LF7<`5C49;gEBOOQL9CFJ`LFRBF>;O]H*-,J5OLKG.":-7"2"&(+84%$D&@Q6?;396bq[SWGQQ13a`TqF~^v_DoBrhF_/3@I/*dDC67;2<;>7.BNCB@=:@>?=0GI8736989<-5>47>?D5,51T1:16>9456478345/,J3343:6JZY,+51246412-4.00-2UMW-00435127356.--.NP,22).,.+8?0/.,-,.V1/TX-Z/02AL3=388::<741271+VF1-0#Y?300,@46101/./01*+-420,,,+*,13.2.-*-110+-R;@CFE?>=77:6;@B=@:A<<82B;==;8CEFD8EE@A?HG<:4:IKN>A8B?B<>ICEHONJB89F?M-155`1RJ?5.[778>EN?a^QRVQ:J38TSOXSVC9>2A4O.>>G4?A:2/+38#85X\WUXa879F=96;G?5A@fa68iZOIafNY9?7l8Vdi9=P,BFHGA.2":=90 789( 8&2,4:& #" +*CXWPuerPNTkiG;I_]RxNW^\wD*7?51BBYff:UFR3O4S]GE3Z/@2Mf)npN"=;I\oxcnSaqU\T?6Rkw@2a3)%2,3E*"S5&+?IRKL<'97RE]QKKOVWUnoW[QK>UQN8/'LL285/3536a@*B2:H'@3=M]Zq[WOeA"" &%$$""%%'C;/BW@EF]gm]dw_OH87>)6'3& (!##302;R*# 0:0O&!( + + +!  +       +  8(-0 4%.BJ>   EOb]l3 + +'** )70*"$&!$ + P-9_i)? @)%!LEA"" 3 +#;%13! )A7|>=JB=U3$&+^nZC8<]8>/'+++Dgmtf? +  (    +#" + ,6.#8"   + + +,$#+-(,7#'  %$   + 75& $0EKC%  &"<-('!! + + +  ?;#,&"2/322"&&&TS쀍½Ŀրorf>X6R1=:%(% &CL7Q58:T9Jo}ɉ^d[X*$+600WeOJ\phv놆bLAB:=jJG?\;D9/Agf1?C&;L,PDjRUD\nÑɝޚʵ✲BI-@*,Sa@XTTwtmaa8Lws<9D(0+"@3$CM('.=UOJ37_[Xn~WpSa'$E(0>QVuXY¼e|Բ]zfqcnpxy7[7/+12276623-/(70(,11+,+ "##" 1WFKJh>28;@p^{zfqcTl[Ȑvqdlٱ߀ԼttcdZru=riY{}ȼcx~~rlXaaw\QO@BEK:.085A9?8?()$;842=28A0%/*-/8:49@2UM=.G6w^CQ[OyhoToD0Er8895-1/56:>8:>;<<<:8655/4816F?Ve[ZeV\J9%ZZ6lca@/+!2;#582.42) ,-0]fBYmTAO98&2C<'B5B/ !*%%%!!&/%. '++)#986 9- 31 D3?//+8(2"13#(A!+$"8''2258$',4F.*5!"".'01/+ !(;(2/),*UkNCC:EE,/c`HW'A6=02.',*,  +4$"#$  +)%"'!#'&('!*1#%#""! %/0!""# ('*+"$$!(('$"#"#&)()%'#()),/2)*&/$&$(%%&'')%"%%(*)'&($! !& ! !    !"$"% !!%$#!))%!0!'21)*,&(//0614&#&-#+") ))  +/20-.22B9'! $ ! 6584-(69)4"%8,6;!&1#:<>>;9dDW6/M408940/24;;6977?B!>69?DONb67:=>;=;?B=<<=@:HJCF>8:;53;:HKJKLOPNMIDGFGNNHCILGA?C%>HBBCCEBAGLG3(%?@9#"34)5# *"#%M}~~~~}~~}|{zyyz{||{z{zzz{~~}|}~}|{{||{{||{{zzyz{|{||{{||}{{{zz{|||{{|{||{|{|}~}||{{{|}|{z{z{z{{z{|{|{{}~~ ~}~~~~~~}|{zyyyz{|{zz{{{z{z{z{{|{|{z{|{|{|{zzz{z{{zzyzyz{{||}~{}~}~}}}}{{|~{{|~}|||{||}{|||{{{zzz{|{}|{{z{{}}|~~ +~~}}{zzyyxyzz{{zzzyzyzyzzz{{{zzyzzz{~~~}~}{zz{|}|{z|}|}|}|z{{{|}}||~~~}}||}~}~}}}~~}}}||{{{}||}~~~||}}~||{|{|{{| }}}|}~~|{{{|{ ||{{{z{{{||} +||~~~}}||}|{|}}~~~}|}}|}~~~~~}|}~}|}}}|||}~~}}~~}}|{{|{z{|{|}~}~}}~~}}|}}}}~~~~~~}|{|{|{|{|{|}| ~}|{|{|{|}||}|}~}~~~}|}|}|}||}}~}}}~}}|||}|}~~~~}}}||}|}}~}}|}~~~|}|}}|||}|}|}~}|}|}|}}|{|}|}|}}}||{|}|||}|{zzz{z{|}}}{{|{|~}|}|}|}|}|}|||}|||}|}||}}||}|}}}|}|}}||}}}~}}~~~}~}~}|}|}|}|}|}|}~}|}|||}|}|}}|} |}}}|}}}|}}}|}|}|}}|||}}|}||}}|}|{z{{z{{zyzzzyz{z{||| ~~~怄~~~~}}~~~}~}|||}}|}~}}}|}~~~~~} 恈􂙮ǜûʋٺ􄌱ЋʮԼωԃۅفߗ㕈ꋷ̽‚⣎߶Ͳ˔Ϻï񟣡쇌ŤɺȨ߱˜Ɋ֓߶ܝŪℊˀͪǯ̊񄇗Ӹէܑ滪ڱӾëӮۖƂŦڥ㟩ζ㵷ىԆϜޱ׶Ϗ犌±ء퇏ޫ蒠ǑǤظåޠϏҗ奔ʁГٸ樣£Ք˾Ъ͑иԡίֽã㉙ɓѣʵЯĩƙ؝σrqnmʷûz{}jefjsmpsrvxwqnurir{p^LLMJKPNOLQSPPQQVZYYY`c[}Ю䍚풵ŵٌɓ‚εͶɣ񶶴º|Ο̻ȗ׻ޒīy~upvg]O\sԒڼȻϋΎƭ߁»ĺ▼Ϩîȡ͝͹܉Ϲ򇷸ǬǍƸⓝ¿ײȇv銾ͳԇꆴřϛļ׵־À򭭫젨˼ĭȞǰɴ傊𑣭ਗҶұ̬ぜŽ俳肀Ʋʰ퇄󍙊Ļ焇їľೡ옾߂ȍȽЈ̀ΉÕ̐ǓיĎд覌߀傏̯ύӹᥫ郁խڂ͟񇛳ҡ↼߂ЌюڎѥӝጛȲФٱԂǟЫ؃瀇ͮ咚֓ٻƁ󄅈㇠ݛ侬ôϩϸ̰®ʽ»ູƷֻͿû󓏉݁ëƍڌêƍх񀲛LJё蔓憋Ѻľǹȷ淪⚳ȨkD>A@@<;<=@BC@@?@?BB>=?>?AAELIIIGFHBCECBEIKMJD@>==?=8779=;8;@9TNmkVhgggqO9iqrjha,WrhrgsZ~SEF6>MWT`5NT>ywwUqloufZS|xtkxHtkww[P]eXosealALqd=quKDCcF@VQ}Z{{[vkj\?OUykH"BMT:8^W;ZKFHk7A\cQ;(BV8O}JGZbc`e_eaoh`^[TW=oNH[L>5B,-Hh6 47P:8:A\GvZZkVA9AkdkxЁs`32//2351/10033^]bhdikn>jLMB>;BXiUULKjXp[^Mcci_e=Dehxm5.''J^FP_d[$GA4+7"Nc#\ryl{TpPDh]]ZgiimzmunD9/+6EGC:bSiDpB:fgS]^uMM*#+  &,;:5;,$$/,/*58)/"*%R8VhR<^/W<( B_Y+@0$!!&<<1.>-1:11(""10->/)I.3.N<1?*MC60PLPRS,-;$6RRHo9#.%I8/0A--T87&++$.''A@=$0IT':/JH3A.Q5U`[^_:<-13J-E/P@-#0H6^9:g#:-;UM7@QL6lWA\:>6T5P/:/AL)<^LqICA?=DDA:B@733g_G>;:=9>=;@Bxbÿqrnozz|~~||rrsrrvsrrwvtrvvwywvzupϞqznv_^qvlBSZWFK?ndcc87YVSTHwdll^KWpfuBChBant`|riaJvmzXshGRMBGNVNA96B@@Q\I]\rhf`cZf}ͫƌ}|̾ztn]dlWVAJ`JNkpVTVYJO___dCF\A;=mmpY]a|_QsYAosYowjh;CfqhkrkSOfRKly퉚o^TZ[YgYO|s~wh[VZZihjdhoUeLOML*)H?WzyBMJ@bNM?FtaRspeuTx{vkvkgZre{qtoshhBA0+.4A>7/1AI<2-469A:8;MB?=F<6?>???@A:;;78&'&&$###@"'%! !%!!%(%`z~}M\dqy~yy{}~nlյ~onzɽűo˿̼_z[^sucQUPs\`twkxnu_sPTjw{{|rmax{mvfyubocrgZX`T[b[[knnq|yq_nilyZaBebeu]c`jgW{txii_hPbvd{{bZilpbZ\[UOWXMTWovWVkhqlih_smnppxvwkdv^]^jnjr]W_[aiaaenqorkcsmgdęr{^ZUVOTSdj`]Y``JPTzxñεúÿvr{tnprtnjefemnjqsy?>tgn?C9?8GKLJE>::;?;ihhfdhlehgieecd]`75\2dQx~~QX\dkaZ0;=B158:?>>87523srhaiwblvvla`j{zo]UYcgrj_qxzCtqvhU`qFADBPQIIKLKHD@>BACADEEHGIKQYehiy[TbgokW_y|hcAyeTE/5CGT<>?BMG\x\wjUmSPRzqTQLMQQytoy^IT\piVVvVmwgCHJt}tDWJvDuTur==M_b^FJKKPhh75W\QMU`LwWrlybhmDhJR=Ed=9<6=WBZgOBiF;f=3fZ/44JC3')2<^-95SYKJQN^Ji3;YDf?fr7DP4UPS;@?KFH=8DFB?=544[T]6g==65UhkmCAi5:79;@\c;:emeg69J93WXJ:EU80?BD@Z?=C4;>==GC?B-NL<=;GM+"7 "$OF%>59?=#ATA4361<=ngR\L,+E9,9H@66sOFbYlEaBvn\S;=W, =BFA4;*=8==,B_[AC><>>?::1>?6654::8:5=8/<>?B63/02242:=859::845612-3767492BC:951<=6D=ADH9AA>77?:?6:ACA==51-7;X68@XMYVH5@6W>BG;A-DFKC;>7b5D8?66iTN\Q\Z\\aRP94YW:77,?CKG:fi^;5@39>8:7638CUQJJNLZ[-VJLTL[b;;=@CEDGEGOKOQLPIVVJHKCE?>FHUWTSSRQSTTQKJNXVPNSVPQZUVUSQPKGMMOTJ@31DPDga@CmFM;+3F?7380-S_)/+6 #$!" !$'*+)--*+,**./.,*((*2+//+''+-.+-1.*-++! "#!"   !!  #! %###!!# "!!"&'(%",6 ,1K?07577:+@;=:62.=570F9X0)&+,)(#ORO=YIbgJ@;4MIonVTXW\k=f^JSSid@}15P8HMAFEzV4@\?l)U_A7tt-K81ICpV}wZvkhX=MSeZR6*15 <<,@039Q'.DL=#7b<8NSYVXR\[md[XRE.`@7=.& #2P#8,(,0@7gI@P>2/,5,:FB\pcPP)''),++))+(())OOV^\cbd8Zf;:^CE4+),0.7$+&'1.#(0B7#$209&$    +   +    '=-+$-@BT   '"5:ID5('   0"-M, YPG&! *@N*%NH& ( ~ &DG2 $ .10.%$0.+9!JLLJYZ;$+43+Kh+!.+"*`lG  +  +  +*08*14" +   + +   !((%* ),";#  !' #  +/6 "5 #*$0#0 $ +   +  ##8"! !'$ " 50'"&Zc̾оþɾπܞuhtmMIS\OF(275,1'E>;=$#<9582de_=H[GM+*@.KUojYű˾gBYK]QtnA;1+.6CX/#!*(%/80HZned]aUfMxj̫󊉵Ϣ?8*1BKJb~wiefcUWhjkg43C-&'JRYNIFXDWd\LSSDRTJM).Z\hP`lreLPFUpܖukYRXWU`RJ}w{qcZ[WdemefoRY>@?<1.Jnr0/+":-+(Py[Po]yt^wb}juwuae@2 (3/)!&6G9,'-25:5642,-,3*',74'+,"  "!Jjgic4<;F[Ya_gcdfvrl`cwrm{uԻbaan|mA=Vud6,(B}xYR`W}S]~ьmuSVDvr|8@GJJNJF5F=>4<0972;-FPPL=62-/(,1,*3456886.GG<>DI5eOYA1LG>J69Y_7A=2KCC9<19*6E9KVN<9Q>>>8444/+02*0VV3>GUgeWUe`eb`e^nhyikhz}stxldsZUVdmjq]V`[^f^agni_[QPt\]`aɫFPAGHLJNN^cVTQZ[GKIrsrfcɽѵjcmf`efkihaaaklgnpq:9xzz{{}xreUU13-4/97763-+,-40VUUQPUYSTSTNMKLIK*&="E;grvqtDILSZI9(%&"&&'$%" !RQJBJTHX_\QHBM\Y_lQHE~KPjKVLL^bb0PPUI=p|KjU125064134:<<;88879676210237;EIO[hGHQUR202...cL3&'88C*((.87/+,74,3:7*;&!%#&%0/(9Y2?()$VG$4') (?+.#&3- .-17A1W:V|zeQ]PWT^*@/9*0B((*#';$<#/$J6*4K(1;:84LR>/0E1]I5acT408,3700.-+/5=9h6796@>=5<@==B;?@=?:GI>=@895876%21")?#&&%!&#!;~~~|~|{|}}~ |{{zzz{{zyyzyz {{{z|}}|}~}{{|{|{zyz{|{|{|}|z{|{|}}}|{{{|{{||{ +z{{z{{z{zz{zyz{|{|{{||{}~}}~~}~~~}|{|{zyz{z{z{zz{{{z{|{|{|{| {{{z{||{|{zz{zyzyz{|||}|}{|}|~||}{|}{yz{{}~ }}}|}{{{|~{|{z{|{~|{ z{|||~~}|}|zyxxyxyz{{{zyzyz{{{zz{zzz{}~~}~}{{z{|}|{|}|} |}|}}{{{||}~}~}|}}|}~}~}}~}|{{{|} ~~}~}|}}~|{|}{|}~|{{{}}}|{|{|{|{|{||}}|||}~~}}}~}}}|}||}|{|{|}}} ~}}~~~}~~}|}~~~~~}}}|}~}}~~}}~~~~|{z{{z{|{{{|~}|} +~~}~}}~~~~}}~~}||{z{z{{{|{|}| ~}|{|{|}|}~}~}~}|}|}|}|}~~}}}~~}}}|||}}||}|}~~}~~ +}~~~~~}~~~~}|} |}}|}}}||}|~}|}|}|}}|{{||{|}|}|}}|}||{|}}||}|{|{|{zzz{{|{z{z{|}~~}|{| }}}~}}}||}}}~}|}|}|}| }}}|}|||}}}|}|}~}|}|}}|}|}|} |}}||}}}|||}|}|}|}|||}|}|}}|}|}||}}|}|}|}}|}||}|}|{ +zz{zz{{{z{yzzyyyzz{z{{{||~~~瀄~~~~~}~~~~}~ ~~~~}|}~}}}|}~} ߥ·ƶϼ܈Ҫ؜ǿҫƿ「ًɗÿİ۱ðωЈӆ㚄ԏıꭺƃթգ䵜úҘօ쥲́ܢж݉򄉉ꋌ͞谶ݞ羴Ͽšꗊ节ܻƆ٤ډ㊭˚鷶֜ĺų¼źɶЎ⬖ΩǃϗڝϚɒ؊œˢ˓䉟ȳ߈ЕϤ獩׋ݱүހЗєґŹƓߝ✉ᲚةÊ𻓬粽辸ާljا״ۄׇáο󇇆ٻýՀzyx˺}~|z|z|}~rxvoɵ~tvsu{vvzuwg]^punwtnowpz~~qmeqolefb][]_]^_ZZXY[^hf^hqйӵŖؖҘ˳搫~Ěݠݎɿgϒ⋞ݹ最ɫπ󕤍}w}fWYOjk賲´ǩ́ҙ᫨ˢꛥ͝댼˹셍ö鋻ܚ˫ϼ˾ꑳȹÀՈƮϋشЯĺ󓻿İȴĀ}߇괣܄è٘력лۤ֏ݾޞեԿԭ蚟ˊÚڢӿʬ΋샀ꍞՉХۺƭӿµܹ󋠮ƽϣ̰Ѽñ׶偁߂Ƽ򀅂ჀㅦŊȴþӒ嗒ևʧ䁊ǃɠ҄ڝ☗ܵ䖗ǽ􎂈̐霘刐ˠʥ׫껠dzɼɯ㖤ӿĘؕ卙炍뒣熄ԌĽŭ帎򄇀ڙł܃씟¨ӿ©̳簤𙯏ڴ߷ߘѻɕنƽ꒕ډ灃Əʤêڕ󉕔ܭܩΞͿ؀ӗʮһĭ˹Ƶ⁙ס߁њ݋ʿ𰘖։烞Ö֑יЙʓ׷ʏbԆùбƾʴ˯jBf@6@IMHELLFK>8FOZTX[^``a_^]\]^YYWS^6db6c8:88624351_W\Z^```_]^__5?B>:774589>>?ABEHGLF>:779<9137>@@>=?@ACDCDED@AEBC$FGFGKJHIHIIJMKKJGFGFDGHGGFFEDDBDEEFDA??DEBABDIEBAABAAA@??=:;>>=?=;?A@?>@AA???A>>AAACEFDILHCDCBADHGHEBA>>>BC968=?4=B:Yd]D[lf]op{`]cHil_>a^LI8RP$7aDY6=8@6@2*5E'0U;G.O9?,7Xc80[XACB.#!?,/A@*/=?D<`g0!"7>'CQR9EQ&B_791`T7ZSYl91/-*;;1+'%9%N>D/.XTS=$.P521F!F1&;;FUFV2/_KI;IR7?0<54(-6D?}NF=Nh~uqhipӎp`ǐ{ɶncl\teqGRESKT[}ZijÜU\[q=KDMD8=Z@CIWH`lJ\XUDmkxweuk@hPeS怍؍ڃl_MGDF\g_v~yt|^RTTMRQZUa[aZGJIJ(*E;Zr{gRXde_dGZpHbVqzjf__t{tdjjbar{mjtue[A@4+09B<6+0AP81/559D<4CJ;4EA>59JODL))$#&'(((#88=@>@@>;??82203#&&&%%#!=%%!$$$')(]o[[PhAtadUVttyfy~isrkήlih]KKp|mtRfofPviKVsun`ihJa[MjuVX^qf[eihqchdzTzNFKsjbf`\^dVXUWO`xxWf~[wyiteQ]aSVQ]W_sa\W^SW}qi~nvXtwb[OQNYQuyjoYWYY|pgiooay{xnrlz{vqnsjldrrqjjZT[Y^b^^eoqokmf_^}rmf닔sj]ZYVZZhf]]]c\VOO}zȮ³ovzrouu{sqllfimlmqu==?}AGG}zlfe<<8>:?DIPIGCEAB7ff44bdkdffbcjc[\YVR,25^powORW]c`TR46:-888<@@@:9456eliqglgagabkw~rbnndbhupzW}gF[J`irGC=8=GFKKI>wusvtzvt7>ECCFT_chyet[`mOpbx`rB>U;%-@WD6)4G:5=l]H|=hZDWuoxgTGEE?hr;g8:[aISO@GN:7XEMd:jb5:3,::*%4F>3C/=C7BLE3[U32La6/TR\U{]?J?OCQRB<7=AFKLC=A53JMP/;9&.DJ=2N6=A2A47/5(*A/CF7?2?&$%#$"#9B@R<@350{ueF:C/0-*e133i\_eHSWXP7\BSY"@ECF9A6A3>>8AC6F4493<9621H1.33032078853-/-/01,Q,-/Q+T621///ORSWX]..\/.1.36WVFFRD/644141222,HB))4f5,0415-/12101/.004221..31.+/.210/.2---,*,-QVUQQ.101+--,Y0-50RUQOHHI5'4XX1\XUQTTYYLWZKNKWHLQURTNKPORT7'C5YJ34X?1JND>GONNUVOONHOQSOCJLP\YIHESR++-0222WHBHIHAC>=B986;BC>?:FJH=9@AAH7CA=?:67A;98?>=877W14:FBS+;;9;4E@BDABFK+353B;92N[G?4SaP15]^YQWPPO3Y;aQ;eNGPM6BP]8.*<8[LYYXRL+HHOKG+(+3 +*;6W<:fjUg:_[W4AQ79[j7`?24S:>ENOLLRRX.,TKN0Qdm:<>@@EFFHIJMHTLGEMXE?INFB>A@EOTVWSROGNVSSTJISZYWQPQSWROSUV[TIKMPRNG@6+NIUD5[gFZOGGL48,J@2TG"/  "$! $%!&#'.(,..///.--,-/,-)(,/20*(+*,../.,.-+O"!!" !    "$#!!"!!#$$$" !!%0,"1A@5;=CMSO8BYVNQ;(>KEEBG3eF&%8@# =F; 27s@=:KPHWn`eLXbr~IvU5=ij@(@#GAG~`+d8uW>[aA8IKSaZ3B;]tuhM9:;`7,+C)#3/#,+=/+1481( 6<3fQYZZYRWVojb5 :c;   W +IPn;F5uufM;"C=69<97-U+UNzxmSDqe?X=.,IN7O5Uh‘yWH'6V}A>2?3@PUFbG>B6(!,Dv|ccaafz_Inő~䆗Һخԋ[05*20CShɻedcu87-60%)@28V[ALQ=S`Tf2RPWWJRL:S~BڿVC݁畘~i\ICACYc[ygYXTMRR^WaXYL:=;<1p-PivPGA<28)1FS^Sy}ojļkt|ihpzeeyp[Y?1!!,4.& )9P2)%-/4=7/40('5.,%*71%- !"#! Hj[RP5>+OHMeqGMadg]e̅pvriybEAmö߃xi^:F&?TUKMWZK@3,.YVJMpiOTk{rjpuV?H?4mLSl654B<6>@7B;D.A3.A->&$J(RI+1D3ELB7?9[3e>6RD-//2H06AMM43-3-0IBZZLY?MK?C3FWK:4*/-85BTG`MUQWWTpe_elm]nooile{}txtrpsfcXjopki[T]W[^]_gml`TROU`rzuX[jP[KSPPTPUUb^UUV\YTMKphlӵŹƬײfqbjb\eiponjidkmkjmn77:txD1>;h.2<,*LIIpU63qt]5%, %W%=LGAF&$&$!"" $#  #'% "##'%'&)*-,'(%! 0!"#!#&"#""%&(('%(())!(*!$"+!"&'%(%"##$(' )((!###('#$$ #$&#!#$,+##%#(   #!#!+!'!" "'! (%!!!!+. +3&.0-)-))(/!60!7)'+-!)29 !B;>9`6>)FYa469:9=2%;/- 0?'.(''%)#A1.~~~|{{{|~|{{}~|{zzz{{zyyyzyz {{|{}~}~}{}~||{||{|}|||{|{z|{|{ +zz{{||}}z{|}~}||{{| {{{|}{{||{z{zz{zz{{z{{zz{z{|{|{ ||{|{{{}~~~}}~}~~}}}|{||{{{|{z{{zzz{{|{zz{{z{zzz{zz{z{|{|{| +{{{zz{{z{{|z{zyz{|{{|{|{|{{{|}{||~~ +~}|{}}|{{z{{{~|{!|~~~}~~}}~~~}}}|{xxxyyyxy{{z{zyzz{z{{z{z {}~~}}}|{{{|}|}|||}}{|~~~~}~|}}}|||}|}~~}~}{|{|~}}}~}|~|}~~~}}|{z||}~}}|||}}||{{||}|{|||}}||{z{|{| }|}}}~~}~}|}|}~~}~~~~}}|||}}}~~~~}|}||}}|}}~~}}}~} +||}~}||{{|{z{zz{z{| +~~~~}}|}~}}~~~~}}~}|~||{z{zzz{{|{|{|}| +}}}|{|{|}|}~}~}~~}~~}~}||{{{|||}|}}||}|}~~~ }}~}}|}|||}||} ~~~~~~~}~~}|||}|}}}||}|||}~}|}|}|{|}}}||}}}|}||}}|}}}|{|}||}|{|{||{zz{{{|{{|{{zzz{{z{|{|{|{|||}~~}}~~}}|{{|}~}~}|}|} ||}}}||}}|}|}|}|}||}}|}||}|}|}|}|}||}||}|}|}|||}}|||}}}|}||}}}||}|{|}|{|||{z{z{z{yzyz{z{{{|~~~~~~}~} ~~~}~~~}~ ~}~~~}|}~}|}~~~~}}}~ ǡ턃ǜɵ跒ĩ͖϶ޣ痹ٖӿׄȜόϭώ͊鯭ʿЀ䯘׎꣣ϯ񿙰ʰѥ݅⅍ϥ削ϥշҨϩꈌ׶߂πߺÏ傛Ҿ򚮳ҊǬģԈϲծ򉐉ڝ锯㖽׫⼗זײ´ɃȨčѠܩРޙϐӴӸⰈêз؋ߺ㑠ŭŶҿ韒ͱ͚Łƭֺ݃瀅ٻ玛斧՟Ñ폘òѧ縒ʔ󁇈򈉀׳ؼ~qwz~~xv~~{yqoq{~uqnnvڣ}viccjknmuppsvrz}v|rgހȊ²íҁƇǾޱ礇tֺѸ斩Đgagkŀ悞ͪúϻzƔǎܻo~_olÁĭдɹ߱Ҽҥ⋈ҿƟʢٴŠɳůʿݚŹԻ߼͹μԈŴʝ֠λܦŌϷȝՆьɊӀȎÙϲ߲Ɲάܹش»ǧɳăᎩۭ􀄄񄛙DzמǧހƏ÷ϻڅѸ恘΅ցýȺċȿ¯ʹɽ؄ˍДՐ󚺴̀ɏ嵞ȥ㾹ϩÇԖ䁗ܦ≥Ĥϩƴ¾ΙǂȪ脅ᖤ巎߯˖난ϒ壊冋؉;􎃋͵̷څ򼓏ݿʠ詸ᴫ䓗톍ǣ珚ŽɒǬـȚ𢎳ղ׾άۉʲǶ좾¯Ǭ³ŵȿƠުᦄĸʸᅕ˧՚䃍ʆ㧕ɋȒǝԥۋվژǷͳɸ·򯕧ՀecRA:CLIKXTNM6=FGVUQZ[ifdaa_`_][W[ZW^j7b\678876761U21/`\_`^_[[ec9?>>@ABEE>=;99::666:<@@>=?@@BCCCACCDB@BABCBBDFFEGIKHHJKLHJNHHECEFEEHIFEFHIGGIHCBAABBA??ABA@@A@@?A?=;;::<<<==>>>?<=<>@CCDB?=>=BCKIHLJLGDB@BCBDEHDD@?@F@;979e4@@1b_h=_Lcbe^bcdR$Vx~wsssgXg3+colc!YHR4C;B2PiTbThzƵh|yoqprzl^ihl{ŹqtNL^YR`t<9oy9bT[UTOs^lEteP^\n}`m[eSMPfA3PKOJHMLSMYLWJDCDE75(0<**O\a^ZWbZbj[¿J`Q<9(?3>/;//7l5663LbHmbWgwbLIONEtYlvdswpZu6549::968:9::>???<;<5L0FA=AYF(5F74-763(7 #0-&#)!$('3&DD=CCB;K[B7K%C6.F:48016MDA{fijpA=3255KB9G1%) /91$('B. 9-%$6!.AuWtlmE!+TVi4Q;2QK0.+LB20%.R6a1.&C5 6/68)210+#1(@!*1%?&85&81[JB=I@-$4>+UBSJ)E$=CA3#AJ9 JO(/222L<3(7BO:=840,AE:&32MR+]:SD1ID-O087PaY#48Q68U5p]^SYB.79*=>+(:>>@=DD;9{~zwuyx{||zvyzz|}}~}yŪ}uy{~{y~|zxvu{}Т~uqqqtuw}y{~}zuĮ{}yl]w^j^g[KGZAYW_8>BE69eJn?H9U9eJgE8.2>@<6.2BE40152:A98FL>9H:<<>;751.3"%%%$#!"">?#$ #%&(+'-dnjm`dmhbT`hejoynll}Ѽg{fRkTbaR{c|O|QWDsugx[g^XuVSSqYQWjdtsaWTor\q]Auh|ie_etiw}tgtU]Z\UVdMWJJ?Vhisls^stjswN\Tgynf{wjWeluzbRLUVPkn|xdojguuGLXMmmyi_pzQc{qedfhjwx{mwfxuuwnkosmvg[ZYZU^]TZdmnknlfaihy]}rvvp[TW\X\^eig\\bVN¸rkkvphnvxqiechdeloww|}|~Fvvjik;EBAAGDHJEEBA=>6`f6;87k`dfcadec[S\4423]GR]QRSU[b`PFJA>-5?<9<>?>873:tonlqfbhpu{pkzx}wxizkai_\w}BTrXGaVDNdk}JKCKPNWQOLB>strvqro;EBBEIPQS_OYZ]Y^^[pF2316TMG<:=@<77G^`h{omjln_YW\W]dNUfQ^uYTKgO]MNgsAAIJm|ti>VmVm\X;30%GX|Ha{}qsBIzONH3_mOGQ_]5K-@BCUZER>kMCH?=S?ZChSh]63,,72&.$?G0.8E0EAI5TcSG_Q/;CpUlA;5CDI.BB;;e6?9779DBH??>a78733a4<79=9A?B4NC9>,$103/%05+DFLGC>;3I=% #((EEAI;920(JE;6=D0+\`\gO'90(/Q39RaYe]@HjOQN1.3=;85B>?>EOF>;??B@50EF?9899347978624;=D3U:8/V589<9867=92/-4105<68343656E10506;+055798652062.37541.18141,0+2.-OSX1YS1R80T-30XSPUVY/ZY[Z01/UUPKS/T-00533524130 +1Q>32+1kY/515420,0..-.2220.10T++,,321/.20/.-0,0,VUTL/223RY-WVT.0/,SOQFD?2?1/-0XUOQRTPPPRH:UNINQSORNMDPQG+:KV34JEaB&73AL9BJOCJYRMOHUSM=0;QVQE598I./--23241TJMRJKL@?AD;?@FCB;AKJC>5=DBEAD<<<97:=<:<:<=7W1S[U:ELO@CJKG@FNE?MGD;>T\FlPaSf[Z?@W[LW\6;33^4]EQ0^[?4GF8W;LA>5TBM,IGGBIlA<>774A?>?@Oc)/.( #!#*(%%""*)',,2000/../.-*--*-2.-$,--.--++1,   # !    "!"$$%"  "$!! "/+,33,6371443*=IMIALL>4;UumI8>63#,-1315[QVPMEHAGUcQ=HMw{MnTH0m06?2;Ef!Yls$A/IPRHb@N4YdYlP9DIq}]k\bDxw::Q+,A(6,69586B2<5223. 5n?lUSTPZS[eY90/,!!M 9I=_FBVtjN3,07/C0<5.dO]YULg1/04323045467::98667/:$8431J5T@)_18+.-"+'% +#=GC)mf3! *(*0BV9<(%         /.&./)%5.!- + <1+D8:#"#72+4# '#  !qWCbWbM ++1?LL'  + + FdU*!69n*:2&' !(YB@E1,E82 42(@RLN>3DMSN+.38"+oeG!  + + +     +  $)$)%%+-     + +   .% ",*  -' $)  -  ' $)0/%& + )#1 + #/'# +  + +LH4-0 #%$86! #!!$#Tpx}{z|{|||{w{z{|}~zмǽľ¶ͻɹ¬΃uqo^gVTNB=K1FKQ*-.+#$B1G'-%5"$,D48I;0Tto|eqMQVO8?d_O4P:KlFBXOKD8**ZF_}^Ϣןɮ逿젥מV+J39CN|iþмfdbe@<+E4B(<;,Pt@RUPM^NaT@LHUX5R^=SlȨ[d{нvpeQEAwQOtZRUb]aijPPGD:79:702Zks|O>)(3"5x9KeR^}Tfǂ~u|r]pakpeQ]=5&$01,%#+;E.&'/,5:3133+,5*2)*6-$ " ! ! "KQcW;;JKD:DgkWX_dlhfr~flR:Jkry{O@D-/0.dOM5N5K')(NVqXaFuHvkEwBxccuC;:O=47B>HJ<4*68-5-64?50/3DGDALL(,80_A>ECC`M]n~f`aceblkpgq`txtsrvokijboeZZZ[SYVQ[elh]ULLS`YeP~sʹXI\\PUNLRZQX\`daWX]SLjĽƾkhgvrhdYbktrlfbaiaaeeihmqptB}niXWX07433757722-.-0+NR+/,.XQUWPLOLLC;@$$"!C=KSIKNMQVP<0/'#%"!$&'($%!(QLMIMDCKTX^UQ]ldc^X`_gp]ZSe[QJQHhFb^0RZi><4585=<<:44fjjlhg_.1/..0546>3aeA<<*J!"113H!*D=8/+25/*&1-3&7:<4,'7,-"$0$")#XdA,97?9710% !'  +(A:&083<3!4;/(/42 ECC=mqZ4<-5?;S,'$@+K*0-*$2&&.<=+:-W9.7/-@0M8Q?O@# %.&%&5#8+,=UF:I@%37ko`Ic9-&+*./*E"!! -+,##"2!"8!#*"2)-027*2C)>>+**;2.5+4/4$'.(//21!%33 ('"4"0$/$/7798@d@75..*211105725065798<=7;A0EOa57;9:=9=AB=A??LG<>7F98;?AD;3::BNPQOKKIILMOQMGHOSQOKKIJJJIJIHI@BCCFIE8,&=)4(+(."$+*(0}~}~{||~~{{||}~}|||{{{|zzyyzyzy z{|}~~~|~|{}~}|||{{|}||{{|||{ z{|}}}~{{|{|{|}~}|{{{|{ ||{|||{{{z{zyz{{{z{zyz{|{|{{|{|||}~~~}~~}}|{|{z{{{|{z{z {{zzz{{{|{|{||{|{zzz{|{{{z{zyz{'||{|||{{z{{|{{{zz{{{||{{{}}~~~}|{{{|}}~|{{{z{z{{~}{||}~~}~}|zyyxyyzyyz{{zzzyzzz{{z{{zzz{z{|~~~}~||{{|}|}|}|}| {|||~~}~ ~}}||}|}~~~}~}~}}}|}|}}}~~~}}~}~~~|{z }}~~|||}}}|{|{|}}{{{|{{{z{{|{{{|{||{|}~}}}~}}~~}~}|||}|}~~~}}}~}}~}~~~~ ~}||}~~~ ~}| }|||}}}|||}|}~~}}}~~~}|}|{|||{z{|~~}}|}~~}}~~~}}}~~}|~}|||{ zzz|||{{{z{{|{|{{{||{||{{| }~}|{|{|}|}~}~}~~}| +{|}}||}}}|}|}}~~~~~~~~~~~}}~~~}|}|}|}}}~~~}|}|||}|}|}|}~}|}|||}|}|{|{|{|}|}|}|}||{{|{|}|{||{{|{zzz{{{|{|{| }~~~}}}~}|}|}~~}~}~~}}|}|}}||}}|}|}|}|}~}}}~}|}|||}}}|}|}|} |}}}||}}|}}}|}|}|}|}||}|||}}}|}||}}}|}|}|{z{zyzyz{|}~~~  ~~ ~~~~~~~~~ ~~~~}|}~}|}~ ս񇈇ǾĽ삜ۯӯ󟀖ᛌҊѣЯӚ뗄̴ٞÖܘӞŔ́ի􋅣בÌɤЦЩɥֵْƋ٫żιȘ𬮹ㄆ쁓ؤ맗Ǟᝅ셉֛珪ߑڳ۠𵺚܌Ȏ𨻣ݗܾԉꚒήDŽ¼ݵ߇扒װȣ…ǤǤޒǑҐ؋ԫ͑۽׭퀳瓺癙Ӑ߀ҢП㳒¹ٸضܵ末̢ڇͿ𢦃ۆз݌熒ۉʮ擣®Ɓ؆鰍ҋĉωֿ֘гҪќ⸓ʒ׋˟ֆȰϽ¤ȸ֩t`gkuzͬ}ZT[`]_aedceglmos|~t~vpwDZޠڝ˜ᇓɧ橋ћݴЖɯ؁̯ȣɄˇǛ렟~sʼn~wxpxcvǙ˨~ȶސ݋낗껰қ؍Ƹ堋۹ȯὲʸ醠ߛ²žϳĽͳӸŜۭ߀»ĺҷ˻ ۊᶉռѺΏԡ騥۽å⯚ĵ˯ͻηӺ̿޽þȯ©Ƀ™Өϫѵ؀ܛ莲ȿԿðۃ䇛󃆇·Ƿ¦􅄀ݦ㒒ˀȸ􎦊ߠ򵲏Ԙ枲õ男ьԊ╦ƫø⎢ءȀۈΏ였Ž죕׀퓝ں՜Ƙ廊ꋙߗѺꦄ筫ѥаƖĈ޴ȩ鍊ӸǸ˦řۃⰈގ뒟􏓛ĸՀʕق߽Ȍٸ݋ӅľꈍǻĻŢþŽΪ½Ɓęݭб䉋Ĭנ²ᒐDZ̸ꃆҍƼûϕ⵽ƀUTNH8@JQSUWRH@HJS\b]^fef`[ccaa_]^Y\][]gb9967;97677WXVV7ZWY\ahac28=BFDB?;79768>A@>==@@<==<<:898867<>?=?@ACDDB@AABBCCAA@@BEDCEGIHG4IHIKKHJHFECCFDBFEDEDEDCCCEFEDCFIHCBBCBDDBA?@??ABA??>=<<=>?>?@==@@>=;;?ACCBB@@ADJHEHLKHC@?ACBBEAGOIDGEDA<;d^3A=3chC=eWbdYDvX>fFT.>ue;:tarJA:-2EY$ -TUQm~hpo^TpedmTb;v;dyrh]CXNVUYRb?PI:Ess>sV&lp`lkXhu{UZbOc`c%0>rXdG>QOLM2BVIMM@+)-FP3!`J{]^S^Ta]adVŌN+2-A/***#@Eo92-*,/VBhO[ju_SXb_D`\jRejrSv:8;;<<:77;=<:<9-2.JEFR9D5FC158?CA^q`eXNU~NBUOpO>+=!'(!()-*-&(7 +"(!6(,$$5 ++Z0QJ*!l^')Z) iKi^bQ]TPXDT9ev~Zn~yocDTjCbQPufiX\GDnXd9ECzN|Pv{HI8*%'.# $1!+?,0)":(&,;"-%JBlDRgXL]RGZ_=E:;A=Q5JNVX + B:"<77 ,6:5.$6'2%*S9~Fr;[)4C'NWYq''*[MV7e@?")(5[6A8L&=/(4*(D9ZOD=UlULK5$7HK+;-%64T+D@]80<\F3/()[O'4JF,|=NjZO^MMUIFRF3B4[D==:F+/9@3-40::L`6OpQau?ggi8g;fcTP:=::7796b9AE@Gf=.drd57]U?A`irTq吓uxŊ͆}w~—nz~xThQQTSzDZ]`b^Q`b@?oCFC5YesVWDSE9Obhn=IO{Vfuwȓ̄뺰rmVTN~\lbP]gfbfhaQNJEFHFCC=M_o9LQzReNgEiUTjoOS{}ewswgehSrnwtp8I^}A=78?D<3548F72175>@7>CG;CC9A=7P&%'*)"$()$&*-,*,+::85==<===8751/2#(&%# "#:; "$$%(-()YM`aftuZupphtz|sµʫVYUEG\__ZOZsogepiUQVcY\ocVO~nYjUR]]qfyraHdn@oBAGupe``e|yvrmuwfGXZZKRXMJQayijpqaWmvluxqeTij|yzwiZdgcdgLFOLSdmzxudQTUcSGJGdNKpY{K]nefk[mtxuw{}xsnugmltiqomnncjfZYUVhVX_oz]GnobSjrkzeyဖp]X[\^WZ^ii\RW\OǼ±nxozvkjlwqmlccjnppwqrwC{wmniwA?==HFBFEC@CAA?57@E??97=<=7949ynja[YYs|l[owtlp|{rlp~xunlpo`y@n88+ZYJSYtDFGQT]LEGC{rklpoki6<=EHTQOFEKwZKXVtUpbw|,2+;VYT@[??=@XZ[^DJbw}q\eSkfVaZeT{\\z}pf][h^k\MWZ`ruPNe~\oQMEmrRUY\kYeO?C-0|i|BbatnKj]9KgpH_I>GCBmGk~J=OPOY?K=\QC;6<VdHCcMMeC7M)NTIC9D94;79=9?><>==1:=1/`\X4;657.I9@B`@F4dDA2F(?701EG,7.62>3'(*+JCU8B450-@2.+);30?JCHRO0"3-)$*8WV]jes;6FT]G$#1$BCEFC;:B76;@C>=CB?:=>=?/5>>=<98:087856549:@?;96/-99<<9758936100*545123641KG6J379;521818;7041274/8756429<3331//V-.DT21W,4R10ZT^1\WTV^].W\VUX2LKNPPSVOR423244551201OE5&&^\U4354416340-1/.+1122..*,-**.0722-.111.Q,,/0,NRFR223RQMNPV,,,.SNKDAF4?2..-YZRNIOJFJNFHPHJQNRPPSLPPH*9RPPF/PRNI*,:SJ;DJQJM[UPBKPP'21./RDLIH@?563:E:4B==<47MFFR13FMJ28LF84?@BHM:B>8B1?EA@HHHECF3AM:/,GFCAFMO15]1:>-15><30BGKD33I\RKThI7.NWRJRSGK90ID;?2,<7787UUYWZ:;6/;>9?E36?GJ[[g56<567Y6T[HOZaYQI>B61/B?7V:639HDHCF=8E>E7EOMNGJX.-WPK0IYh:>@BAFDDGIMFNFKOG@MF?GIFIM>=JFGQSUVPPNQSORPIKORYYU(RQMMNPSSOSNKKJOQTSIBB2UIRP]7MJM6"R?kROQT.('&$ "''((& $%*.0./411-.31110..+-.,+2.5%&#$(')+.2-.! !!  #" "$$! " $*&"""!,)+/"3,480!>IS1!?"0 #NC("4xZX/,"!//)2F/PbtiEGMnh;2MTJIc|{r73'şLN INS>:W$@)E{F>-X53O@-0RR+R= SQHei[qozSyRYHOJG"*1UAK>3;334)@8:9*' >>eSSMZLVV\]Uw2/K'H=X7>SdRBIFD5h]>54&WP9COBj659766756524799672&,)<5:@+3.@:(,2;<6+8!)  + ;$'JJ#*"  !),ULa!.B   + !   + + +  #96*,46* !"*  %4I(7? *5.., &+$0 %"!"  + * 45G^+  s9F+@@;,,!,lf3"9$#5nvva=.%=O.B6[,AYDRIOB>a9F3"?/RDQ**"  + + +  + +  S8@5(7)&25# !"*&(0)   +  + + R"J0 +*1@)'651%4 C$+   +" -3 +   +  =+" +5*!*O*?*$4$).)    "+14355210(&1""4RXblsyzyzrƸʵ윛˧Ⲩx|mʿn‰‘rYnAHP9@.0(&>IN.-6<% %&%-2!&%"!-'4"@=bXP7C,;-#(&.L2IU:FE޼>*A<-1CTX+IQE)3H;++ADL4`\~~~}ь͙ӈ~߅鎻ΓݓU[ABFPðjhjeECB,)F,.,)RlSQ7uOP3'7GKO+48b[ΰ`y}Қ؋񽫙tgQQM_skYdomchibLFD<::9264FXk34/H,9.AOhQVSZȊ}vlQqinnj3@_z2)%)/4*$*-2@.%&0/880523,3-'0-(4!   !?6T@tiQC?9PWrC9F83:6D;KG>+1-.152..2AMC>G;;AXG='314*06-,M1>??3,6<7F@@QB9-4/9<<8C2*01/18($,+1;?WZLTUGPIK?155>5,.,WU;1-@;uJUvqc_]_PfZino|prwuplsgkfk`imkni`geYWUSZO[almwI2PZYVjfllWUaUZVPPTWYQUZddYOSWLl÷ɳǿhqiriǼ`benliic_ccfahfkp~?qj\\Vc7200952442.2231*,26141W]YU++(JC'0/&B(aGP[LLJMOOK:0-""3 $'%!%&(%'!'TNKEA>AVcd\RDXhZZ_QRVd_XTXaXYURSSIl`\+G&!043?Mb776;*U> 8,;,"(%%B.Slqqd0'7540%0):6)$#*+F)4=!#.67,20C:)16.F&KE]AHC#4* )$:>G:)/C@,hH0=:~vOAEQ5*1196/"*"$"&"(&!!!$&93+!0&+,!&&/?,;C1MDR13%:6D@#2"&=%"* 9*37S38"G-/$/1$!%,,<#*!$ %'#$*44:<1)*-2Oi\20'+% + +!!#! !! '&&%+'*+*(*.+)/+**$%&&&('$&! 0)'"!$"!"!"!%! !&(%$ $! !# %!%$&%%&"#$ &$%"%$!$!!$!#*'$!$%$!%"! %"""$ !  $"#  '#!'#%$%!#'  "! $ "!'#$'#%1+&+8#,30,/)&'! -% !-+./1  !!$"$'-17/++&12-*)%($%!',&6;:2:bW90-.71504/+708,388:7:@:9=*>M[379:9<;9?BF?D@?DG65A>BLOPNKLJLNKMKFGHKSPLIIG%HHIKJDIFB??EFIC6.*#$(5 +&'1/=%%&( ~}|||{|}}||{~|{{}|||zyyzzzyyzyz{{zyzz{}~~~~{|{|||~~||{| }||z|||{|{zzz}|{}~}{{|||{|}~}||{|{|{z{z{zyz{|{| ~~~~}||}|{|}|{ z{{zzzyzz{|||{zyz{{z{|||{|{|{||{{|{{|{zyyzyyzzz{||{{|{|{{{|||{||{{|}{zzyz{{{~|}~~}z{{zz{~{|||~~~~} ~}}}~~}}}~~{zyzzyz{zzz{zz{{}~~}~}|{{|}|}|}| {{{|}}~}}~~|}~&}}}~}}}~}~|||{~}~~|||}~}}~~|{ zyzz}|~}|}|z{|}|{{|{{{|{{{zz||{|}}|{{|}{{{| }}~}~~~}|}}}|}|||{{| }||~~|}~}}}~}|}~~~~~}}}|}~~~~~}| +~~~}}~~~~}|}||{|{{|{{||{{z{z{z{zz{|~~~|} ~~|}}}| ~}|{||{{{zz{|{zz{{||{|{|{|||{{|}~}|{{{z{{{|}|}|}~}~}~}|{||}}|}|}|}~~~~}~}~~~~~~~~~|}|}~~}}}||}~} |}|||}|||}|}|}|{|{|{|}|}|}}}||}|}||{{|{|}|{{{|{|||{z{|{| {{|{||~~~}| }}}~~~}}}~~}|}}~}}|}~|}||}}|}}}||}|}}}~~~}~}}|||}|}|||}}}|}|}||}|}||}||}|}|}}|}||}|}|}}||}}}||}|||}|}|}|{|}|{|{{|{z{zz{{{zyyxyz{||~~~~~~~~ ~~~~}|}~}|}~~~} SȯӼ¾טă黩缀밴縎滥݃ړʚـĥӓᷠ큁ֈȥퟮˁ܍۾Ņٕ˟Ǖ⑟؅ϓɽͅɮɅկ⇆욠ܖť̶Βحꅦձ烒óŻáうɤ܉ՊԵ•˶۲ݼДⲬসϗϻό᥄ڋѡՅꉀß뤃ÝѨﯝղ踪٨ƻויǾ͖ư㖜֭ƁƟΟ޿ӅíχΛƹߔ´ȹ芎㵊Ү͸ujoyqmjfn_WWelknwΔԠʹ·Ǵ蒍۫ȉޅ첽ɪpփѤьڻܟ~˛ţຶ聈{oszųxjۄӻ₆ό휥Ǩև誅־ɵ~ƣᑊӮ🞢дĿӰƼŶ﹖Ěøƽư¼¶쁇˔ڬͮǸɟۦ˿Ǫ֊Ǫ濒եۄÑ앦ŶβȰ׵͸ʓ劄˽ݮ䵿㿍釾ζˢÿւ󕜩⽞̾ƶ혘鐟里퀁脜򈛕蒨ٹƸʼާ񁆂횻¢߫Ҩ鈒艨яݶ븽ؤ׻쑠袷嗲儐ȶٱҒℯΕڿʾ׃ǽ׵՞ƖɒÑß鄈󂚉뛯ㄍ𢊪ޯɆϟʾۼ˱ͦڻdz̨Ƌ٘ԋ傡ل₈;픇ױ狓󈓛݀ÿÞІ뉵ؿڤþҶï̤ܴ㉒ğϘ瀘Ê̋ߙɸʻ腆ï)ĿɂَǀUSPSJ:IPKPTOFCJUYWdc^bdeicbgebaabbcb`c`f6=?878965554654V13^Z^ef26@CDBBBA;;>;99:=>==?>>>A>??=<86658;>=?A@ADC@?@A@ABCDEDCECCCBDEGFG+HGFGECECDDCEFECEEEFFFDBBA@ADDDEEEFECCBBABBCA?@@>==<=??>?>==?AA>>?>??ABFE@BCCBCDHKHDDABDFGBCIRNACJC><8dbc8BA7d6msF_LJbiyv_[UX]eoPYrcasYWJ/QCIQ7=;3;|slfywkgb^hg|fRy|jaU&e^wR@VHdD7Vw0TV^WfAx`g`DOPL\ndqbABFZ15D0ljF`fgTUPLZN@-I?;IH)3+NF{TZNU_TxA4,+<(%**;@Sy.A(,*!Vc]_GXBm]_VQRHcv`XsReZnr:9:;mf35666:8`883*-VJGBEE>8eV#2B4?9A`og58VuflehW[v~yOy}x(KF::E?9fQXvrZlC-1G@0.223086,5.M>@D-?gFPRC53686bpZAN@lgQ8=BpWB-dFGQJ< -*?<457-%$%(BG<,*?70M:D.5+#A/!1362Z^6FJDCGQ20,@>@%&"/**#%%%!##!%*'+** 3.- ) %8=;A)!')'w\%\gZtahFtFxZRTs>v`bxC10J,WnYaNV]Pz^~\HuZG'AD_U|obnpF[;Lv[>N4[Jnoqs;,!-% 2<%G1254#$%:$7!TFsT^3$/3F\7UB;\8QRUJjA8?'?C+!#;CH>,$:!@>mZYQg8FoB)3JS<)(.B!3'-94(6HQB)6A5>J@98SL&A(2(?(20J'4./%F@1X2-Fi.B2@9U]LO:>FSDQہڡӶ±xxsl|x|fYkd`_UEAEEFIGCCAOsruoqwWPkqmGFRtT>plVUwjonqlheRoonpB_Tv~A<@77A>@?E;;@>F_LdOVG:M8b\:mkDJTAFBKLGJAbjBCCJd<_Bf@WeVQBD89*,9+62OC.6&Q37FcV@@6LKPG?=DQNPRQI;>48:<;<=CK78C75B4102R/.661152CP*;43cWJAW0Za:`Y;@XINVhW8]ecb5LY[PO>2FFhG;Ut40@0(;0+@I253=VR69KRGI;9.,)+2022)0BHAQ_^S?%'0:NfpcfdlT=<062T!-;468538:931536/3271245=954431.]4YJ-1-/-.X./TSWTZY[[.20Z[ZS.^HGKMQQLKM4--1235411-0+E &%v`144733.3051/2,*.0.1/*.O-+M+/2640/-0110RU-,/.SMNV350TRMIQNSV,-RNJGFOHES/-YWURMHFDBDOVOLKLLFKMPQLE4<.NMPRS.HP4@":HVJ>IOQIQWQLKLNL1//-.KKXWVU1.0,U-124521PKLCBBCEHC@;:ADFGC>?EAEFCA=?67:?<97=<>41^H_4@>@@E>/IMELMA>E@6J=N95@GS>HDEK.13(S0=769MS\76;H;4JHHEF6;:2+.3Q,6G*P\6M?=:9@<7-J^TPQOMKI-:B35^\`98SZb675>6748_G2Y:4:e\`B:WS7@e;aMN=IAd8:8<<7BFCNEF@:DHLEJOMLHJX.,VOJUQYg;=?EBDKJFBLMNSLIQAGJEABCCBBC@BLKGKMPPKORQORNLJJNQYZVSPOQOPQOPPMNMMOSXWOKUZQUCLC?INHJV6ARSNS/'&'($$&"&'$$)**20-012510330010110/0.2')(+00 !  !""!  ##!!%-) $ --,/7>&5)%5:>A 3(+68DM9Diz{JDC)*6#,PM[Z[[`Y_^tDEpdPNao[DAJ85IfAYSH1+A9C.%9W%TPUFH.SEC@+<<=]{`xkb|@81h9!'0!RS>LNI572-@@1$'5( 6>rrRTBISQ_*!!:S'KYPI3Go7[QHD?B7`g;E-'=N9KCck6667gb0122253\43*"%F;9512-0^F*5081(!%63- +!-!$%)'#  + + )$/EC8E' + +   +* + +    +  +  $7@?G18*)    *D-,+!#"     +GF6NBOGOfR BEB83C=45I* -2F3")@loxK]'>0,$'@7CM>AG{|ö~~~{|vw|xtvrorqutpqnمyvuo}JS}_hvzĒn~[@BG>EB?9689Jmk|q?0=@?*/csO?{[[ē}yhSqjel=RLy~5*-',7/-.))E,)*269615,./0&(0.+3 ! "GR!5E;b6PRVc_RdgV|X[]VT[gP]E>SALHXnɱBqYVMIHB9Q>)1.,58657=?<@BAC?B@4<>CD;[DJ@na>:.5?/629?A6:/.(*3(068K@<;:7?;H@):)3220796+4EQI?>>@6<>94599HH>03*1641;:,*+576-%))6?AU\UGPN3S205MN2,00HF64.JCTeH>Rnp^RY[R6imqdtrtstrpteihgcejnolmroaZQBhX:n>ZisDd9c[XqrnxzwcW__STOɕ^XUY_`XKUUK~vtu`^Xc^^]`bmagluumg_\Ya510X17533310,13,,/2/11SUOM(''&I+,%?'6dKMLPZKMEKPI94.#!/#%(#$((%%$HVLEC>DIL_\`U[cpj^TTFEENLDBC>=A>@>jdY\3,&6=GFWaj9;?9=C7pmbYYUX-.,+**.-#,,1+"A8'+$/5$1C547BA7&$<".1<:;@#+,35$:.,?G 9# 8 5,;4# $KCF&-($-$%.)785&&@5>_reJ)/@.+-/*6"=;)LF,.4&)&02/-+PW122:P-L2P8PR8/'% *&%C8%&9+0=SE14-{>,0:+4B% 23(.3>7W1436528618241-4693578779A98:IG\LZ358=;;?>=7;GFBGIKKFJLKJLHHDGHKPPLKJHLHJIEFHEDABEHGD=2'$ $#.)('&+ %$(|~}}{| {}}}~~}{}|||zyzzyyzyyy{{{y +zz{|~|{|}~|}|}|{|{{{zz{z{|}~}{{{||{|{| {{|||~~}||{{{|{|{z{z{z{|{|{|{|{{||{|}~}}~~}| {{{|}}}||{z{||{zyxyz{|{|{|{{|||{|{{z{zz{zyzzz{|{|{|{z{zz{{}~{|}}z{ }~}}~}{{|||~~~~}}z {z{zz{{zzyzyzz{z +{}~~}~~||{|{|}|||{zzz{||{|}}}~~}||}~}||}|~~~}}|{{}~}}~}{z||~}|{zz{|{|}|{{{|}|||}}|||~~}|{| }}}~~|}|~}~}||}||{|~~~~~~}|||}}~~~|}~~~}| +}~~}~ +~}|||{|{z{|}|}|}~~~}}}~|}|{{|{{{z{zz{{{|{|{{{||{|||{{|~}|{|{|}|}|}~}~}~~}~} +|||{||}}}|}|~}}|}~~~~~~~~~~~}~}~~}~~~}~}|}|}|||}|{|{|{|}}}|}|}|}}}|}}|{|}|{|{|{|{|}~~~}||}|}| }}|}}~}}}~~~}||}~~}~~|} +|||}}}|}||}~}}}~}~~}}~}}||}|}||}||}|}|}~}|}|}|} |||}}}||}||}}|}|{|{|{|{z{z{z{zyz{|~~~~~ ~~~}}~~}}}|}~~}}}|}~ ǿŀ􁊉рᏄ׏񫍢铒ќ뗎ꋐ᭞֌ἚẝۃӠ᭲ҹװ굽߀؀Л覗ؖ͞»ʱܤŜ؂혼֚ӦՂư肾鐘ΡɩŦէںΞĨꂬ³恁崘ғι΃𤼱Ѐζ孤ٹԃͅ ̹脍⎿݀ƞŐ҆۵᧓좉Äʚ푴”ƺтθи̥Տ̫ޥђϹЊƿⲎ̫ףLj⃎̑кϘ­Ĭ¬ԗٜ򇻋橕ʛҊ̝ȴ퇍巃եɳʳ~~{~xywzokkϻӘgdpƔé䢍Ľ酚٧ϼځ؄ɕȃե{~ރӏݲȳֻ҃ˬ}з}uvt|{n{{űj󒍈ϼ䊗ˣ׆럙Ϊ羮ݹﱭ乥ꨩڊтã왨ڷʵԀҤȜƷ©ξ􃏏ɽ􅇄ܬ駃ī񀮦۞հڎ󌑓𢞭͓хȴ놣ݡøěԺҷòīҰϤ𖔟ƍَڃ蓢뀻羢辭πվΡȹͻʒۉʲɿ׵ĺلǼꔨᖊވ눏׾苌ݔ̔ܖȆꌕڔƏꌵ۷օԌܘޓٕ퇊糗؆Ӣ׹ՙ놄ғ鴘鑍򑟔樜ϒヒʨȟଖȩڰ͵ږ򻉡̚Ϣ򛟢񛞐Շ񍄍ݻߌ¼ūĺ̤ށѴ舘ׁDZ臃ȨÖĴ¿Ȳȳάྻّ܇…푠ㄐǴœʅýѐ򆀻߃􇉍Щ⍈ֆگȩۀb\WTRNKIQUQQJOKXWX]`e`_bikk5ieecbc`bafgi57=;9778744655632]36aab34@FECDGE@<:<><:98;<<=>?@AA??>=;::9<=:<>?@@A@@@AAABCDDCEEDBBCBCEF +HGEFFFDECCDCDDFDCCEDBBBABA@@DCA@CDCA@A??@BA?@??A@CAB>><<<=?>>AA@>=>>=<<<@DDBBDCDBAAEIIDC@ACGKIHYfKCEA=\DZ.K1)!)1!-$'*57X_^H6?>JL0367754!)'&# !!%#%&+$(&.4,+* ,BD;))'" +;d#~@ 0GbCc{BVh m^sJ1L8s@7/-.::ug|{kAKgAUZH1DLJ?K=c56PG. 1:*=U:#$FEME.$>++5J7=6,0=;wI,??<83'##%,;I"2"V.[_HcY97OH<;L1&0*#)qJd^`aUĜ~䷤ᚍ``df\fpehlmQ~lpB>CEHMEDFMaomsz{a?`vFQSy`n}sebO_uqrkj`WYuktuAYh{B8D81>;>:."9;83;BA76A?9AC:@?;CK&04/%"'%$ (*(,)-*9868?<:7365434215@!" > # ;<!&')*+(;[<^VJYn~rl~oɗk^bunstXRvrluncVdYtN[MfydjQU\RTY]P\MMacafnlxWTMSU`[W^]tmPMdLM]JJFR`s=vjcqwyWpyr~rywlkcb]^OZffPW[Lf\PIflRnw`igtciaWXWguiKbXae^\bwd_Uika^HQLem{zi_vLKU]PPUSXIIz~tOv[O[Rp\jzy]WxrsqrrrndmtlnlstpqnmnieKP[X{Xw{zyv~esm}}~yᅘjb^dèxoj]Z\_daQGWTLzȸѲŸsμqusdehX_pou}}tumlrvED@t6AIKHFCE?@D87=@5;ndcZ00c37882b;EHtTY[ZiU]XORVQIAA4=K,7:;<2418:85ZOnhgbUK]||kvvgjod_WOLOUVkgJOH?68;5441TTgx|>ANOUPHJnjedf14_qB<7=EAAMWZSG^aizrrmT|´d^aM?FJLLDKA>@EPPvHCBVP_;A>cVaE>bA8?B(OUI0S1=3647AR31<5]@ZW/Q,27:0(,537AE9172/O5C=1<:\@@>a6`U\UK9b]X5C?;BG,KI=SB9<;3:?:RM;:;67756WMQ9:448=?C51=>68886:@E<639<8-545482167:6Q?14489GEC:AB=??79;7?:9;?VAAGKFF261@?7CCRZ0VYC@231>711BB/94F-3T49BH947;8Q?88B69?IGTNFKBNKF==4^111/526544?686<5MaHG7?HL7H]ROR[U=Sd1:C=3:D48B;DC;IKC>CDDHIEBEHMRTX>AHC>@BBB@?BGBFIEHHJLORQOMJHHHMPQXXWRPTPTVRQPOPPLMUTXT1:@DYBQfKPTKDXLSNSW+&'M&$(*&&"$#+(*/.1/02554312213110325),-. +   "" !$%$%1:&" 1,2%(,"%**$:E;E35#+Yp{gXpL6A8%2*+H-SfscXOheUWgZn]JLFfcRE]UI?>Uq967E8DIKJVmf38rixhd0T..6i21#&)@;4!:1(L?,YW/MI.! &02 %1 + )$+Q&' + + + + + + 63    +   +    #;&XM3H,6/ + + ! !+H$%#  + +"   +*& + ; Yw)-K! +i=S 9h8 I@=- 9 !*5H-=">A@IWFhXRI$-25\F9CGJLZ;DUEN@4(!>>0#.J6S   6N)7Ii]>"*;"*,# '&%7(#  # +    H   $2 +15):/,@4&1<   + ' +   +/71<&$+,*!-& B+4((2!" /1   + +1$-&,+..-10/%!(/! !"$-DJHŽƸqqompzrmjikɾǘpbo~r|y~QY]RM]PJnmc]xlޖu[]W@5S'+-2"=MfO;&&2"&! 93. (,-)%)8QdUU9+=#-.7BEPʽâRb99A*AEENYYTLqEBId1hsoֽɳ٪կȦʈΎ֓⼤aHUȷ⃂oii_I757/J.,*CW82-%)*1$'+N3D;Mŷeᶣ㗈zfilniov{{еPxfm?9>=>B989B[ib~zH(9RD*8gvZhxiTiy{d[]jpo:683.0gmaWpzxk@Ad?[?GESLQ-U1UL;))5()('&-)$%,3%8D>B6:;561536)115*180E>0,@E0AF47.4+23..0.+&7?89)/+=AJJU\NM;K4H-.5<50X936+,@=?F0PbBI+7/^PU03;::Ejrqrpssqogorecbjpnohhhc^=l9A?R@RTUSS^cM\Tsvs~|YjZemXUTaukgXTSV\\NDSPG~tsfqÀn˹ddY\bUYhcjuxxw{kf\]fg;64^,3786623-26,+02*/XOND$$M'**)$I08>bNRRSaLKFLLI>2. &*#%'' $&%":4JB?=73C_``\dlgccbg[P]^PQSJD<436Zd@BOI293)35IY`36<7>;9=v\VPMN%')&";N*%$)&&&11& "$$&-0H.*7B(,.12(+#!"%2AF;(:31 #(6:/F4*)-4'2 4 8*+$*,?@",!1 -. +/jfE6=7 %.-,;9>8.+(" 2!! "#'#&!"$i&$'**+**(++($$%$%%$#$&"#! % #$$!%&"&"! !%"#!$$!!! +# '&$ "$(' %#(#")&%#"!#$#%"#! !'''"))#)%% !    !   %  "" $'#""!$&(""#!',+/"!#/#( ("""&$,*&(!*(#.'1#"&+!3C6/-1,")45:5-0:-1;385.992,/68@<>7749=>678B-NT378;>=>?<<>AEIIK38=969<<;<;?=@=AD@CCGHKLMKHFDDDJMKPQPMIMINNIIGFIEABHCD<%!-JD-)'&")~||{z{|{{|}{{}~~}}~~~|z +yyxxyyzyzyzyyyz{yzzz{|~||{{{|}}}||{{}}|}|{|{zz{|}|~}{{}|{|||}|{|~~}|{{{|{|{z|{z{z +{{{zy{{{||{|{|||{|{|{{|{{|{{|||}}~~~|}~~}| {||}~~}}|{ |{zzzyz{|{z{zyyyxxyz{z{z{ +|{{||{|||}|{|{ +|||{{|||{z{zyzz{|{||{|||{z{"}|{{}|{}}}~~~}|~~~~}}~~}|{ |~~~|{z{{{zzyzzz{zyz{z +{|~~}}~}|{|{|{||}}||}}}|||zyzz{{zz{}~~~~}|}~}~>}}~}}}|{{|{|||}}|{{{||~}~}}|~~|{{{zzyyz{||}}|||}{zz{{|{|{||{{||}|}|~~}|}~}}}|}| }}|{|{{||}|}|} ~~}~~~~~~~}}|||}}}|}~~}}~~}}|}~~~~}|} }~~~~~}| +{{|{||{|||{z{{||{{z{||}}|}|}~~~~~|}|||{zzz{{{z{|{|{{{| }~}|||{|}|{|{|}|}|}~}~}~~~}}~~}|}|}~}~}~~}}||}}~}}|}}~~~~~~~~~~~ +}}~}~~~}}}~}~}~~~~}|}|||}|}|}}||}|{|{{|{|{|}}}|}|}}|}|}}}|}|{|{|{|{|}|~|||}}~~}|}||}}~~}|}|}}~~}||}~}~}}~}|{|~~~}~~~}|~}|}|}~}~~}~~~}~~}}}|||}|} |||}}||}|}|||}|} |}}}|}}||}|}|}||}|}|} |}}}|}|||}}}|{|{|{{| {|||{|{{z{z +y{{zyyy{zz{|| ~~~~~~~ ~}~~} ~~}}}|}||}~ ξĺ򄄓ðЍɽ붅ȀӅƥ­ƺ¸“ƍ󡞬갵ʒ짏êŠ𥢢ÓԧƃϜΈ̏ټǘځ얍懕ȥϵ⥽Ͷ􇐠ʿʀί윻Є׼Ӆמס˳빾ǷÊâ޼ؐߝÅ豁î󊏍қȗ՝ޟ̦荖̲䘗򭍵┗Ҿ㾥ŸӶ鵒ԝրךͨ™̸٩셧窗򟈖żҕ͍æȍފ䶭⳵݀ҞŊɄк ҽ헖ȹ͹ͧέ˽¿ƵÚ醃ȉߏ碠ֹõεކ𕉞憙ʮ삞҂ʹֽ}ၦυʺμܵ姬Ϊ{dpuȷĜrڅzjp{o՚ق¾ݔԑƱh䁖ꋁӾЍاҚ̶µˀė˚ʹѿͺ삄ʽۀѥ싒˖ڹ׀Əʾʴ㇓ճƻȇŪ۽¬ѡǀ・犅ɾέށĿ繭̯ҌσƷìƅ؀ΦоĊæ݂ƾͽۊڿɌ̿ꋘԛȸ˰苇ـȎȘ㿱Չּ沵۟߶ջ羧ߧʙ΅ބţږ뀇Ƞ̚矇ಹ͵ϓ햴󇎄犅쉊ͧ򑒠ʶ׃ʨܘ˜ؚÞŎЍȟ⚰О蔓ᒇĩ❬ɽɵ˿ҼٿꅚνŽë놛ûƽȷɲɝĘϰس熮ǬԮȷú覙ȞǯȫƽDŽ󅌗țȿѬZZUWZ^ZNOSKOOTVUW[]]c`^^`g77lkkjfebejlj56::;::;9754775432a1442__2=GFHHDEGAA@A=::98999;>??><=@?=<9:<@@?>??>@A@AA@ACDEDDEDC@ABDCDE +HGEEEFGHDCDCEDEEFEEFDDDEEB@ABB@B@@??@?@@?@@AABB@@?@@AA@?@A?>;;<=??@?>>??>?A??BCDABEEC@DIFEJMGFMOHEDMbZFDAC>:78mg76>97=?fb`kMqcKIȔujwPnPSQ`r`PXUMQmcv2;:89"!6S")NRKC)0-5NSZ_\ZgkfKNSL_vyxcIz]NWdsrMtn=UIIKY6X=:EDG??NCN\6g\S[\6=ESZA89?DmH6C4-'+(72)!(*?G)<@7UH^7;R1;0X4D'5&=;64G@UZ<8bYVKfd'"-) C*#0:",.+.4%/RQD3TZAA\4<>G(6+A^4 6OWWV0*"%**L0% 9#+.23VF";.V3X1\]N!!:*UEj+A;1PX=,'#F,(>-5:&?GS0 )'8("M2EO4%>'7Wag8L|a#B(L(6881KLA>?02m\]BaKCqP\A==UCQTIRU7-H6;>21.9:45:@lYWzƷvv}zanf]onhvbplj]x}~VNe:EM]znp4TW5=`;4@?fQcK^XN]:HP3@CQiJWI;rU7W58ECV¦zhKdlLaNRjYĻrtq㸜諾Ԯ~n|Ġ~rtzMJVbhmyoch\oJwHPn^s[sacrhG\[JUAEACJfnmlҭごϸt{ccdgspo}}lɴq`{sto>C@KQHHPK[i@h/)GsXTQy`I]rfar]Isot{kg]hfvrBOYuvzA:F8$8@B6'1@=979A@47><5H8<@:9FJ).ZQ#""('"(**--.(9845C!<867446667;B# !>><99 "&()++,1n{ACO|f|U_Tdobcהbd\bmoedmfotjhlP\[cxwlPVKMTTmo]rNFIA]bVKE|EVQWYQasOz{ywQIEzl;`Slb_bomj^]krwkw{kTTT[fnzhTPMQV]cbqpzriZ_^_U[]YL[VWYRNWgZYRYWdTyKIq|rl|}jopheRnMkJKEJJE{ndntqolT`yxrnnngdjkionttqokvJ\{n]me{{l\ZTYrZwztpypeRbõlvmkcga`d^NGOVKμͶ{ukpjiihiú^`huxx|z~qqmnpxD@<;=F??;=?B@AB84:A6;jed8::^`gc60=BDJrYZWY[HBBCEMQ,38;3'2.5964_LT[^aSLXVwxwvp{|trhYe]VQPPLN{~BMB49<6::;9:<9VBhL]b]U%%(+('&)-A4+>BVA/7@0KZX_=GCTGZKZs8EF.&-PWK>1?Q5202:D225h^7XRSBL/3,-G&59:8<88?QVKWWC@E8J.(453OJ08,.2:,3!(-)(<-BFG34'D=K*)!4?%<38A\K<;(&"8gS_uVeH6A;hV"I6)2!bDFE@C?8/>BC?BB@A@?7;=<3><::8:96.2..299866=?6N85748:;5702642;;549862:6997:<::451:3/--0-577958427302004211/314/,YSXTXY-/3SW\1_[[USLIMUSHLOM6/,244111,-.M)(+(9i;=8857;67E;-+)+,.0/*,P,2Q+0322232105001-/S+0/,[[.5.QQ+RQJFPOHJRGLKVQNKLRPDDHDBHLICBSGENMMLSGPJ-A>(MNNWXVKE<17;DRKFFGGHOEKPMM?GMXXRPURLQVQW/-U[[OQTUL-74-VPLHB=CA?98AIGC;:ADKA;:I;8<5<:6>3;70Q0;99984515298:9:<<<9=D43B@BHC97LJDIICM>KOLNK7:E=>B1/;450=<=>83:FIIICIDGJVC;0145799871878767>;7K>KEHMZ6JLAY]_RHM6H;?<>FJ;>IEAA8D/IHIDKSS\\]LJMQUY*POK,5`_6;DEHHDGJDECHOT_V9GFB>?@>AH;DMKGEJMONJKFDGFKMNPPUUTTQRTZWRRSSRLPV[:ReHCFYpDtcLVVTUZPEJB'&#&)-+%()$&%()(*+--/.155574324665;-**  !# #%"!&(%##(6/#! 5/ 75;F7`Yf%$eYUq\zbFAVZC*B64-1 #7# H]p~whiaVdSmuXLS\FwotŒpdzQ1/XC?2R,(/%4$QUM8F=xR='/^DC>J[AZapYf{Yh[5\vTsR$)*@NHH !P2.2=>@(74iTKROGLlco%% & +#+<(#&IFLzOF@FD@,++-TdchAQNec>A3:jRHS`npNrk:L=;=Q/I/+38=3*72>O2]PHRP284% ", &&(##<!&, #%2 $    .'! +   3 + + + +!'E>R,'1#'E  70@;('   +      +"2# 4 )WMf`QiN-H0DDXY'+!5J[!;K^ +7G*9;@KCGA@40;qQi^`D03o˶TXJBmJ+:!",)OǯɻW`}Q8E=L~TBjdliiѭҸگƳݷ鎸퇁ͶȲ|84ew{}nqdo;V08\CN>JDLXG1>>/6)/+-1FMmˢ«˭–Ӭ儇ntrqtv~lvnlgy:>;?B:=EDW^|;E+K57cz[Gexl}jVw{ldqwyoJ/$("./)'(H*T<8@D;FO3GIKEG,A@%$C?')##"%&%$(68.:.5=9*-,19:72().W4S38?;C>KCI4C/)/040586)2--,&#+7**'02?7H.)FJEBLRLK=BD?@2K4DT00),*&DACB?>68?@PF58==B=88]?qlwqpnojhnkdhfoqpkdw_;L`WMAJAQS[YSQG?XFj?F^Nn~iduf_Nermb]XK`fqih\^WVZXKCJQG}vvt˿Ŵįxp¹^e`_cceZZahkpurwveb_bch9421281/,./2035,).3+1VQM*))FLQJ&"188@cRTPRQ?63.,//!%&#&$#?3789:41<<7868da[gnS/4* !$$)K2613476*&$#! !!"%&+*%$#$$,9%;8,0 +U,,+1,<848.3F+D1FSocIZZ;--% 4):=$?<)&  +V1?J-),)' 91+E -/+0:1&.H($("9"3>>2.6-GKII'0CU^H8 %)?*%&05>/E2+*(+&&5l:0596(A7WEUR>42',4K8%',$>KGM2=9E7LBQ^/76>F6'->#%/4/)$%!!#'%)2( #+@+2#56A@*./'0@5%0/$%%D="% ')M&154$#34N-3&9,4+#1 )3/--B2# %;)-K>@L%%E22 3#! $(*')&()%),,*+(&$%&*("&%"&. "#"''!!!" $%!$!%#! "#!# (!%#$#(!%#$""&'(!$! $!$###)(%%('$&(%'(**$$'&!$"!!! $%%  #" "!$##W"""!!$"!#!1", '(,(," *!,%*#/.."#!  %'&'$'#%&*"Y&"$ "%/.=+642-*.'56259=14?824-697838=;DDE658>A@<=A<><@GJQI3?=98:>;C7AHEB@GGJJGGBBDCGJIILONMLFIJOLIFHHF@DEC!$'%6$B=,,(('*  +~~||~}{z{ +|}~~~~~{zyzy{yyyz{}~|}z{||}}~||{|}|{|{zzz{}|{~~~}||{|{| +~~}||{{|{{|{|{ +zzz|{z{zyz{z{|{{|{|{|{| }}}|}||}~}}}|}~~}|}}}|z {{zz{|{zz{z{zyxy{z{zyzz{|}}}| +{{{|{{|{{z{||z{{|||{zyzzz{|{|{|{zy{|||}{{}}zz{{}~~~~~}|{ +z{}~~~{z yyyxxyyyzz{{z{{zzz{zzz{~~~}~}}|{|{|}}}||{z{zzz{}~~}~}~}}}|{|~~}}|||}}~}|}|}~{zzyyzz{|}}|||}{||{z{{{|{| ~~|~~}|}|}|}~~~}|{{z{{||}}|}}~}}}|}}}~}~ ~~~~~ +}~~}|}~~ }}}~~}|}~}| }}}~~}}~~}~~}}}||}|{|{{zz{z{z{| }~}}||}|||} ~~~}|{|{z{z{|{{{||{|{| }}}~~}|{|||}||{|}|}|}~~}}~}~}~}}~~}}}~~~}~}|}~~}}}||}~~~~~~~~~~~~~~~~}~}|}~~~~~}}}~}}|||}~}||}|}|}|}}||}|{|{|{|}|||}}}|}|{|}|{|{|{|}|}}|}~}}}|||}~}||{|}~} |{|~~}}~~}}|}|} ~~}}}~}~~}~~}~}}|}|}|}}}|}|}~}|}}|}||}|}|}|}|}|}|{|{|}|{|{zzzyy{{zzyyzzz{{|{|~ ~~~~}~}~}|}~ ƿƾɼǫ끎¶ܽʺӞڇۋ夒¢×ԠݷÊ䴗߆É͜ή킅ÿީɚ񠪺ۈጏƗ͋Ҽڦ梴€標ϭёߵȅէ“ӷû㺹Ӡߜ֫ʡڂՂݍ椨ޡԼޣ⇊ٛГ˔碁¬ƠαܴیۡфҘء낃LJ轱ώ矘؅ܱ϶͂󍷨ẫ߻󤓃ԧݱ⦭ո쾨׳ͮĕʄ޵æմ򼕜ƶ̯׊炣æꆐʫÂ˭˼ǧŸě}~}x{{yxvvvup}t獖vu|}󎅍æ댂ŀȷƒ˪əӺɟ捫еƢᖑѼ뇓䥹ؐ΍ɚڵƒÂދ౷彴ږU{pk͹ޝ򄹗`Ø{~s~sp{woSO[dɭޗʌ҆ɀskfeȀ̽䟶ԉʠҺƽ䣬Dž̿ߌβƷż˸Ű޲ˀΘضٍ┖흃̊ԕ̯˿㱖羧肅£ؼ攅ưŻӌ纻론ѧоѳ󌓊υ€ݤ򍏦ư𼰰邊ũ耐¾˵µͼĺҏǶؤLjрȷݟۢ􅈥䗩ЩꨄĔޡ޿咆獿㒱􂔭ऩ肎ʓ땊ߪӻԑ쩱Ԃ̭ʅ둢׹éå٫ԛ芞뉐Ŕĝ摔ǭ°ʲ潶Ġ듣§ū򐩒Ԓκε¹ƺūǼȹ¾ɯѻͅు헕׭՛ž倂λϕȆȌǵݴٺހZYWLVhd_TMRMLHVXM[ZYZ`ba^ig557jkljjeh88:5h596:>><9786546663114;4.:EDINFCHFGGB>;<:9:99:;??<;>?@>=;;<>@@?@@?@@@BABAAACCCBCAA@ACBCD7FEBEEFGHFBBBCCDEEEDFEFDDFEEDBACBCDEBCC?==>@?@AAA@AA@?@?>A@@@??><;=@@@???==?AA@@ACCBCCCBNYKDDMVSKHMHBFSXFDF=<@k>of6;>:?_>`;_|siVq~{yn^YPSF~]WCyxrkiouuhn_nqNpH0x`gfUaCoXSlgM[qFjED\zjcuJPPm]s_`E,>'VIH^8T5+5!+1-aEIWLVQ)4'8R]Mg{USRP|zd?0H((FB;PF?XoL?0Ff|{bJ\VTNRFxw;;HIV\ywfsqn\ddi^^ggxZJ>.5UH9/039O^MH&A.Td8p7;:979Cnls%L@3"#&3>/?/@;Zub;1)L8Mx.):/0&7")!'-1AT9,/V>*)>]#g5<1G!+6NOG0B[A4FCA?KR>3)'1!!"$##')# .$!%%-?;)" +n9fz/8+!,Jf+$`:\D*_^Ab;2-0*E"!*Zc15Wy,gS.&`J402bBD{|'=(& $ =3 "?'%-#)6!50?/0qݥꌶtdVpI?Gc8rQXB/IW8=G.FG):.#i9>Ta^574!.IAJ/4/0X/:H*(C^BY9%!643;=?7A'.)@+D37,.M?M8$$A%%%7&B,$/!(FG-2>89>-<!~lm5+/4G*&10VS@717AF<0\8XW8@ABCFIFBE~un6nm]]D>MJz^LT{vpkiHwL}mlrfcv`BVRxP2;=67:C=/6<88E8@B7B9/,ID;66IC>:3596:1jX^nN[/M,UGSJDQ(<<6C/<030:84EA82?712c=+7@5@. @D*5H22"6@%=B3)0T9ED=2'2dzmVND;;570!":BFGCB?B0CBA@@DBD>@:88>7F9>:96<830332197::;>?[0249:<85497N643=94::9360L.78>2N2325>=88679=:9924::00/06,6449982342263172071101,--.UW.-03.LT`^XYWQUOIPVQJKIA91/7:200.+1+2I%+&964;586E:1-*V/01-SOV11H00142254226.1.+/++01,.[-7/NQ+VUFFLEKJNFMOUQOJJPVQJMH=EGRLJJ@JMMNJRPM@6?FCYPPVWVDCR/GDLMGGBAQFGFLLLKKSXWSSQRLLPRSW.\POB6NKNJFH2;-UKID6BB@<>GGHC5;DFLA6<9>;<>?:272698T3@49><6H67778<38=;B6KIM?LETJEPHAIH@5==]<4[86:?D??;47<9?;AEBBaBCNNUE==;HXVYT3]M\$LMEKC?>JIB?4?HIGFMQONQ\ROQQTW)MLIK0W^8=AGHEBBHHGFEKSZ\8>ICED@@?@A?AB==INOBDJMGFEEBCDGKLLLNTTWXg5aZNTWTQSST8EX7@PCM_LfaTQPWX\XWQWf&&% )0-.+')%$!)(#,*,+.0/-12455673629',$ $+*$"&% "*/"!" 28/+5?spl@WUUjJ[xnP6YQgg\6qi/9,ZED&DXlck__KL`SZ]tQeKehOTchbF7F(aVBAM:]/g8D3=XSAJY%A07Lb_asAFI`aybW; Jf'@05D*?#B59B8?2$FYB\rQQNMvv}nP,!"# +"4Y2("5ZtrS@G@8( ..#-2BJnt`D+%B_^PZ[aRYccpS@5)H;)!!-@K973&KZ1e2443("  4"%."?/$&35$(#)    ! +    -"!4;     O:;<)(  $V3Z(# +  +       +!:5 ;) }a  !1 8";.#"*(L1N (M(G/%5&,5;504>oogh=B!'=-#);?).!'- !(% 3 %/'  $ + '/!+ #    /0@+  +  +PHJ.Q(#!; +! + +  #-' 4'$(4)..,+"$ '.+*#!'/#%'I;w}j_qnhwXSmehboǷifjb?gWG[r^:OGEOlWrLT]ʾߥ˧ĮTFB*4X}\I&99)0$$><=2//..#+#:/',4PdANPi@4%*28A{ځʻrOg^E^`lf^s@\慔~wx棽΋ŋٴع̀sA=Ⱥy{pedj}PI1BO<.S?-G[9@@+%6..746KD¹ǯjuސ~·wrpuprv_įQz^rp|9>:899:=|xwl/J<2D'(3WzYK\rK|Wx{zssc?PRtN{/--&):9+3(,0*.5>5(,-&(0%-0&-0->4/#! %[N586\lnJUmVnn[XLTUOHE>J)?6P8,GKcMcrbEGBbJrm>LACEKKJYK@3WVUPVK.(-^<4;E>86 ' $:;G<:784]=A?cg9;IE$BD<:;3:"#& #()+8C9-,.7:;9&#(GG*(:F9EKGA?D>1)B)*/0:96C/%*SFCO?6.&-)0XZQ+>RC@>KGH@4B/5.=GBfN@?.&%+?<-<@%&;<=B47>T]7:^xtnofmjjjknj{OZd?IYJUMRZX[ZSDGJ9nvEKGmIi]n`q]cqfvxwprOOh[i^`_dX^WKSMC?CKyyynpt۷vt]aifac\Zfjbflit@sflf_h7:2014303152114,,//N0YLN)0+)*T))-9;'05.A*)?&N,8A9;",$+:3.0-=VM-'1RE(+37A!A' (25#7%1  , *1* +03&2C!&A&04-18;B6QM="+7AAQA6O6@"<@(C?*48-3/*"(4NBL-6>#/CV:k-N0=P//2*74)$&83/)!!%#$>/5>#*!(&,&"( !!,(.%"/",210"3.#<$$&(>EA(53( % (7T&")' $#!21*#.$$,X+,/&.)(%3%"$-#/)$B'/+)#"=ATGC\Q91-&)! ""!(!!$&%")/,')(&(&%)+'#%#" !!$""%( "#$$#"#""#!! %" !  #""%"""#!&%#",%$''' &""!'#"#!"%((&'%'"#%'&'+&%%%$%!  "!"  % '!! %# $$("&  """ $ #! !""%&$1'/(#" ($1#(-.+""'#'!,+! !3$"##)"!..020/!A)2=?:>732=;63+5;:978==@BI><==@=6:9;)JO16>B@;98?@??>CINP37?:=::;::<>=::FHI;@BFBCBB?@ADGGGHILMLJM%CE@GGEDFDA%#) 465/'((+((#'ǁ}|{z{z +{{{|~~~}}{zyzy{yyyz{~~}}{||}~|~||{{z{{|}|{{{|||{z{}~{|{|{||{{{|~~}}|{|{|{||{z{z{{{|{z{z{|{|{{|{|}|{|||}|}}~~~}|}~}|{{{zz{zz{|{zzz{zyz{z{zzyyyzzz{{{zz{zz{||}|{|{||{z{|{{{||{z{{zyzz{|{{|{yy{{|||}}||yzzz{{|}$||}~}|}~}}}|{zz{{z{{{zz{}}}~}{z{{z{zyz{z{{{z{{zzz{}~~}~~}|}|||zyzz{{|~~}~~}~~}{zzz{| +~~~|{|~~{{{z {{{}}}|||}z{z{ |{|}||}|}~}| ~}|{{z{zz| }}~~}|}}|{|}~~~~~ ~}~~}~~~~}~}|}~~~|}~~~|}||}}~~|}}|||}|}|}|}}|}|}|}|{|||{{{z{z{|}}}|}}~~~~~|{zzz{{z{|{|{|{| }~~}~}|{|}|||}|}|}~}}}~}~}~~~~}|}|}~~~~~~~ ~~~~~~~~~~~~~~~}}~~}}}|||}}||}~~~~~}~~~}|}}}~}~}|}|}|{|{|}|}|}|||}|}|{|}|{|{|}}}|}||}|~}|}~}{|}}~}~~~}}}||}}}~} |~~}}}|}}|}|}|}|}~}~}|}~}~}|}|}~~~||}|}|}|}|}|}}|}|}|}|}|}|}|}|{|}|{||{|{zyz{z{{z{{||~~~~~~~ }~~~~}~}}}|}||}~}~ ƹʸ=򀃉ͧ퍙ԭּힱϚŹǔ̓ꁌۣⱓ؍ٟ璇ݴɞƷſ笍ΰ聁Զǁζ삂Ʒùٷ߀ӈȦ຾㢻ᓢیݶ迿ӛ򧭩Չɐ͊򈊓詁̤ྱ߃ѫ˧옲ڨԫĽԸԉ˙ݖч󕶻ᙡ⤉ӰԀ␗犈饳Ԓ̚Օ˺Ӝ³ǻ֎򁏅Є؈ρиܠބ˖ؽщ։Ԩ݀󅘖栅ymjfho}xz|z{}}|wx}}wpۀ|»|ۨ۞񺝠ٲ촥ʂѓ𧱊̓ŋν·ӇĜʁȿחḘ΁Ņ݇}̢݁ʊ͏|xМͷĿ۷ݝuqkrpsr~gI?GРȊǑ瑒Ԝ宗|gdfeĩčހ鋐א䆕ԹѶȿѨƿÄٗŪ̂񁷈͵ܤψ슒DZƔ☰܀éݟʭ̽熄ċ󋛣󯵦ș绯əߘț𞣬րɳ讟Δʴ􍞢􂃊鿾󕡿ԸϺ˻Ų􃍔ѴȄԎÌœ㓲Ũρ܏ÒճѪÔ𖌉Ղ㎷ڒ݅ыʿĞ՝„ڨۃ񌌣߹ķƼ⬀݁ūпصΜ򛻗ũ訜􈆂γǷޑ˽ƱتѡΨȾѽɯ„ø³īǷƼѳֆƎƮ̐¸ϿէШ֦؃þķԘ=ҁٝƓʽʢϧվebXXUa/]cYNILNKIeRZ\[]dcggigfjljmmomjgn87659>?ABA>:9988798788434878AABFKJJLLLG;:==>=<;<;;<>??>>=>>?><=?AMCCDC@@BBAABCDDCDC?CEEEDEFEDECCDEBAACEDEEEFEEDBAB@ACEEDCA?>>A@>AA@??>>A@??>;pyNVkwws}hp|waX{l\Puten\l}rseoo|fG)e}l]m^yaIa-~^LszkJ]PP;K@SObZQUDsmy{cr}fZF^MBST:>0.)7KJL;?MTD:EKVOJ6"[_YaxlTQFJG=r\O982"823>:4DRYM-2QbukpA>aNKTP@FNY_UPW}{f}r]kb^XO]3VVKF*94>E1%.04=5B<69/Bbq7:=A:428@Ia_S]RSBR'CdUNPl{rB`w|}hDJAddW!"+&#(12J2@?53*#'6(B1!"!06+&.@C}}`[T"]xtH6)6%'/*3>- +;C+)%83H;91044TE7/)//>84[KAC?:\M@JMUVbg6035$$)#1"!&*' #)$'>qHN(((US9J*!H1654SW<%+!E.-<>3SY0㷓TKWkJY7T9cKRAHXX&$-<V`23B>'/>,B<4BB(F:--A8@c`MH03P;V4G"7+ Z:13EHG57(-;4&"NA;#9=77)1*7,(;$iDG9T/2CV5&3/4+,)@*8-7:87?9=3A?*16=7>C:0478;_LemX*$,9>;/2EI`2Nk_m_p\afXYXW\QSY^`XNR3ZV4b_6>;63-6A37<>8[hihcbagls{qtztstvxwuvzvrvxzytwpmin{~xv||ŏ_qo^uo{g{o|~xӠϟuu[^Hf|j~gh]ywmű}{|}xoR;7IKdC;3R59=<_<>^xz_Kj=;CM4;gc^VaMq;Tc{r[zljcj䅹فϚmhySZSY]C@lU{m~tisȌɓ‚~ѢʖШЃ{xxzzod_nsg|_x{`bSY^ujjJW`Cn`qVJ/347(,=<2"<;>67:@80771@@BHC7?HQOHBF#%'+'#++-,.-$5639><99963444589="$$!#" !"%'('*,+(1\Y;VW[^iwujgj|dVs]^x}oxQmWW`gbbRI]gjWVLuuehw^M~\}gJWhwACggqd{wGOlyuyxjchRQjMWPQ]YfW[[[Ygpzk\IQ`mkq]hcDFLPlpbhbgtpsiSMIHvMHUWXLuvjS[PYmR`fgXciz]JQMZZUUhV^YG|@MHV_`VNPrlvY^yzdyujjlqopnlmkt\aomzzozdnrwvhagcpolhqnqrpiag]ZQMVXHAHTI{~yxIJf}seogcgfgcdjpmqquvwogglv~==8B@DBAB@?@?887=ddbZcf4266d5;97LJHPF?@B>>@"%'(" ! " !@>D?EPgef~q}NyL`ael}ktyDXZ\^ojkfq^psE/Ei[sfqutweYZPQ|UUMmoTXPax~e}iUwL^VYhRdY[b_fy`tMWKd~uBxBQGNOIU[mkd4vcg_WhlbIuYAktUVHgFP@OGQIL[;?>aHDPa9Z85>29G7>5@H65;>:7JM_STbL:=C+4)3&JXT@F?>'BK0A0),447-)/2016W)G38EM==2@+K1J3& >4+(K._*?A^H7B83_]q~SPU`D(3:0)#AOBGE@B;?6C?=DBBCB?B>;=:5V>;97;=721550488;98??65966:93785=S569=66<=607,S/9:88-0329;98:38/@=:6689H6,1:9864<;87322538557/261130+5.ZU1/*3//YYQW0MOOUQORQOIL>=12156133//5*@<&+ e>>9552614;=64,PS++0-S)-..P2/032445447-0/,0S*/1.-Z-5,PRO,XKMKHIGPNGMLC<9FTYTFGEDGJPNIBAMZQLJLM85BHL2MSMVTJ:.;FDFGIE?@E@BADKMECNTMOMMJIHKMJJRUQQPIQTRYZT.083/RG>5J=B@BF?9;==EFC<:6:0A1:1;A93=C=I76>AEFLPIHDKKF>TLSJIHB?DFJ;CFC:D6?7>IB;IB6=JJ;G-96K558WY\Md>EH7JNGd91A?3/T;?4:NR-NO6X.77FHBC8B;BEODAE`/J5598?CB?7:77;=ABFKG9T=^aQYPDY4C\dF[i>AIIAAJ:A94>CEEHLMKDMYYSSQVX,MLF(/]07:DKCBCCA??>?BB?@GKHCFDDBBAAEGJJLMNLOOT2NrBDc:]WZTQTBPW;9FNDRQ>[I`XZaYZ[\f+0%$$*%2/(%%&#!/%,---1/211124545476459# +#$!%&)""  "#"&#:/17A(;eph|pGNOgaTq_;hJTlZYw@bZRO}vJ_miyo`X7:CDLnc~X|boOKX.BVG:LAT=%WEuU8]+WYV8L@=#10GE_XOM;ypfvxdtzbU=@$.66* '746')6=6/47@2 7PV\s_JL=<;3ZG<' ! *1G;"&K[oai;4M90+%&3HJCAL{rkW2/-jD\UWNET.RN@: )%.9$ -&2+#'#6W\.021+*&#%L +0'#8./ *##34   ""4  +   $65/67GB*  +   <{1#"-0)!   "19HK)"#  +  !    &^?<66'h}" +( + + +  +&#$=?/3La.78>"( !(%"R]TTxdT]O01!R")&:%+#?`=   ]`qdh|Y3F0%/TA&5+9' ".)  +/ ',   + + +3.'$&) +  0%+(+  +  +    F$+a/#%    +   7*  +  D%1"&2-)*-+-/'*-10*%'*)20 " $#=uxҎطzgmdELlOSaYqclf^ɢliPL5BMWFfr@;:_kmwgZѻйW3&/;[F3$3 $#7# 5NO9.?$")0 $><;:CHLFlQq}fFTHHFskف~ӭvCD@>D51`l|eKsRmd`Zj~֘ń}꯸‚ո鈁΋Ǭ˹|uaK>mqabgvZN4<]=+NE1I<:Q0>::;Z[ow[r3KS@20GUc[W|uOrWr{fn{c>jboUF$##&"23++)0,17;2).*#/-/72+35:;5-+!! @v@/S5O4_yKoO\a_\xFCBB9<27a>RH.)4/2RQo:>47*@hCADGEE<3BKN@<7MPFDLZ4'HK?_^AV,20515<4IcbQ[0a7kw`:@:F968&(.%*,/=C9=86=8:7+*('ID/-87K2*OS>>7.2+/:HPD__W5@BA5?@K:PV/7X5i;;44;252$;;! 79<<30:1/349itiomnkijikjioCDLJTTJRRXQTTOKGN>]mMOTVMssDTQqbS\O`ztmryY]kedfda]`VQF@KPB=CLD~wytl˼˾̿Nqm^ecadeb__fhdhios~mf]]bkp5408443140.35.-,1SUNHNN('++P*.756;mSRMF}B|woc^42395420/$"%(*%$ :89OXR[aVURV_XUQNPRPMDGC?=nYPkg=6BJ+>""&$#%""!!2016,%$$"!"" &#)+,286'-: -9'.'&%4))/$(JM.   +I!54/5$H$$@FM;!/4. ''  !4-?=+"/)P2C7:73@JPID#<)*B,O:(1 (6 1,>-;9>2O-5#/+54=M+..L0.@M/>1=/2,"($/E-57CF;EiDD;)V,/6(+.7)+25 '08(=,$*(D%"@#0)"#!-.(.#$)'>*$'*:+-%5:#"(*'&;<9(+4%# +8HD/,))).*#&((C/($0;-*%/#5&,"6G!74H1 +$?3?GU3::Iv/&&*!" G&%%*&)+')!#$*'&('%"$-!$" "'!$!$#"!#!%"! "'$  "#"!")#" "# $%'$)'!!  #& $'#$$$""!#$##&*'(&#()'*)&%$  ! " !$&""#"'!& !! #  #!!!#),/%6 "$$%3#"1"" */+*1&%"$$ "$+$!!1$ #!---#+"):=+6E+/2457=:45=06/+38:;<:;>596%I&,17B@=<67:<<=?CLU59=A<;==<;;>=<>?@@ADFFGIHFGCA%5F&(;(ACD>=>-(#!#-%82-)'+-.4́|{zzz{z{z{{|||{zyz(yyyxy{{yyzzz{{}}~}|{~~}|}|z{|}}|{||{z{}{|}~}||{|{zz{zzz{z{|{z{|{|{|}}}|{{{|}}~~}|}{z{|{zzyz{{{zzzyz{zyzzyyzzzyyy{{||}}|{{|||{{{|{z{|{z{{|{z{||{|{|{zzyxz{|}}}||yz{||{|{}}||{z{~~|}~}{zyz{z{zzz{z{z}~~~}~}|}}|}}||{yz{}| }~~~}}}~}|}~~}~~}~}|{zz{{|}}||{|}~|z{zzz{zz{{|{{|{||{ +~~}}|||}~}|{{{zzz{| }|~~}|||}|}|{|}}~~~~~~~ ~~~}~~}}~~ ~~}|}~| +}~~}}~~~~~||}~~~}~~~}|||}|}|}|}~~}|}||}}|}|}|||{z{z{{z{{z{|}}}|}~}~~~|{|{z{z{zz{|{|{||{| }}~~}|{|}|||}~}~ ~~}~}~}}~}|}~}~~~~~}}~~~~~~~~~~~~~~ }}}||}|||}~~~~}}~}~~~}|}|}|}|{|}||{|{|}|}|}|{|{|}|}|{||{{|{|}|}|~}~}}|}|}|{|}~}||}|}~}}~~}||}}}|}|}~}}~~~}~}~~}~}|}|} |||}}~~}~}}~~}~}|}|||}|||}|}|}}|} |}}}|}}||}}|}|}|{|{|}|{|{|{|{zyyyzz{zz{{z{{{|||~ހ ~~~~~~~~ ~~~~~}~}|}~~~~~}~ 聃үPϏů䱿ăUոƌõфˀՙ觯ؽ幅؞ƮĿͪﱼ羊߾Ʈ˛꺎ͻ〧θѷɳ룲Ņ嫉ףԻљߙݔ̢ϤΆ鏲ꛀЦڒБΕᄫٮ©ԛ؋؁΂Ͻ鄥ʼnĵޏۈ͇͂ҷŽ鄬ˮΥ죤㜐Ŵʤ«ҝېّɴ،ʪڤñÖ뗤òĂ޸؀è剆Ȟ럇웆懏쎐񺧐ݸѴɗ噬؅ֶʹϳ킚瞂Ё詁oȷrxדֿ~{x풗뱴碶ػʼnˬ٫̄ߣߑѿ▗}}ޝ𴳸Ƈ򌃇܀ˣ󖩪ЩھŁтll{s䘑¿z{퍠麯kÀѐwfG?ϻӀϙʥɜͧuRL]UÐฆ†Ӄı֎ڀžΊܸٶԿٹ¦ɦوɺƻЀ耑𡞑ŵЯƎԀ񔪯񁙔ҳ啅׹ڿȡƶμϦǖ񒎋ú́鎑ƧѨϳ贾ȴఄ֭Ԩ씰ȭΨᅁճ㻧ªЉмօ텓񐔖˲úɸ聁̻̿߁ΆʃĢɧʰя۠ܕꢰԿӲʐ“寤Œ䎈ǀώҰΈ͇Ԍ̝ŧᣏہdz녖Űźȵ÷،ŘߒܱߴЫɩեĦ󋉎񕻼􅌌ǿųᕊӲȿ˻¿ʵ祯ʹſΥےǎ뿤ɾշ䍇㼓ʼnӲȾؿԪ,֗ʂܾ߯ԧ̮Ċdfib\1.PYy`IJBQTXVOHOQbbf744ejhfkgm797668i79;<>=@;;;:;=:649<:;:97<:<>@AFKLOPOOIDF?@?@?==???AACCD@?@B@?>>@@A??@BCCAAA@?AACCCDEDCDEDFEDDDBEEEFEC@ABBACBCDCCDCCDEDEECDDBC@=<=<>=?>>=>=@@@BCBA@@==>>AA@>??@@AACA@ABBCBBA??ACCFFGGA?BECDB@>BBGHGFBB>AB8inm7_8D>?}xNuUqiw|j~jvqxo`iryxt{obX`ihk}`dq_pugdxJWGqFfdV?UR=tXF[KlhHt`WDAQTM}nkJkU`XSOXOywf0@s[5.6BE4OQO^jYQWB?K[K64%)`yopnbkr}?I7iQA:C9448<52C?O3Dyg.ktsvswA>_OIPJRRVWGhVapVofr|qo]RLaK#LC&2:CMC:-3428503-@B-m9JHCA>A>>>=KcP/VP5RM.aF[DIazaiApzOfTvh^~O\T.7b!#"4N;`>6DPI.325(%  #('1<60k5z[lEvNuN<#1=.(02)"- (-+#E.'*74q;`6725$8>T))R,L9P<:@HC0[:FFVVhi540!! & / %*!$$$)%"!MF4'c6h10'K!1 %VN$ $*<1* :)$'Z,7sb6::OGOF\Jsv~o[WRrOD85;cje589rPfbbd*&.'#30#**;:08+#2QR.H@ʺpRo^`7J9L;Ga760o@$*/:?Fh:F\g:AM<.K<,<7%+@9Ck=Jh.1H:/NIW\8*D17C6A@Eh'/I)'.B<#00J73BMB85,!?16K309V,5H?:IC0!- -J(#;T?CF:7C=9<4AI`S/c5'-HD:<<_rliijχho~||}zqry~zxxxuwvlg녤IMsmdvߨnvv:syt~:3Kqf_kwhq~wѼnii{trmh{YFcwV\gBA?Olb?GQgi_zUK;8RbV[`aYUYNg3fj~Ur_d^}Ĝނv\sGLdkh}zuiq}{z痐ꖼȼꁔǚw}nwh]įef3kpvU]X__Rn^PiOmVasJWR]?@SVAn@JBGgso~x`[o\tȨwϝjyރ޶txsmqxm}JCEHHGCkf_jnit99{RDD]^Az]surnkLVZ{vrTY{~s|}ennpKQ0444**>=)*;;=99:?96960C@GJ?7BGFD>B#$&.0,%+.0-..C1239<>9:;537639:;$&%!""!!  !$''$**+*,|`N_N_gox}lkvhVgodcfĠSVcr}`qc`WXF\\W~icL^UR`Z]]dE|{skpnir|piyuq~mkvbnlpnOZvLQLVEb]vgkfpsge]FbqdwecNWNKxBKXhlFSokd\IwslRQLzmduPYIMk^MLZcVchoXu{xUTfSpQ{\qloaEAIHeuXbOOLxyhx~gljjnjmpollkpyij|~x~le|}csdkbdys͵aljpqk]bJLQTKCIPIwt{sȹypgknb`¾dikicgxpuxzwqiggusvwHFD?@@?>>?78:Ccj9gg93cdWQXWek<@=?>CD"$$%%#!"<=A?8EHJ-]p`WOd^e_McQiZ{zk`_hlp?GQNDp]xn\@krf{lh{PpdwNflOw}jZE[\bjT_|clqrqcqaROakdxvOTYPgGkJFUCzQOM?BNSHUY)T@GAE@47:!#+#-C>*6W818L\NL\Y;XvK=L4?2::I@PC@;=7E?R=8AcX7ahc6<2R)(KFALG>>4)F075<>==995>H^C4/F<494T;CJ4`gPDB4?F:+,/8OO?68<'=@4924/3:5935$):4D%6C?5;<3;-.I,@3P)4+#E*DH7'AZ:@4GrqnnSY;A)TCLU'5AFGC>?/8;AB@?@DE>A@@;>735=999;:631641248<;<=WA=95<<75;4;F9<=<9<;;>4104/09<692/66;<9:4637;799987P7558754:=:8874688:6?32453201350/-424/Z\ZYVZXHPU^[ZVQB;;DFP4415120-1/N=**+(__67/2083:8863+UPPT-/,..--,,/1/1114433000*-OT,00-,+2-[PS+.TVJHHHE=;@C?EGALHC=;9529?@D?ABLRMNJIKEHFJHHVNORPHRPSYPT13390XHCMH@?769B55>.3649539SSSAD>Q?3DI7@>B<>?>6G6<65:>?E>9FCPDEG2580S5]N]VRU4CbMD:WE;G=35-X<;363B-3D1H=FPJF9;9D:CP?ES60G66;;?=?><:69A?BAHHF83>cLc[ZNAS8KBkC<8faB:BGHECF;:?6;@EFGHLPLHIRZPXOYX,NLD&1/-568?BCC@@A>CDDHSbF?>FH=EEDA@>|?>>@GIGEAC@=BDDFHGLNRN`EW9:E[r=hV=dWMEPB>b9?CGJNA>N;Yd_SUefcW63-('>3&&*('($"$#--014413144 ! +  ! #$#"  !253*!>D7es2UEBik}loulMa=Ox}llt_UdogM?DIY[dilaK32>CFvrV^zf^epbRR@4@ dHM4Y499%dO:V&G*VG?@JQD=G;7?I1 Mzrh\O\gp05'N5.34("# (6-eR%Ycfhgk82PA:705=HM?[I]{\IL98CEPaaTGEZBB6"*:2(!((%#.1&X&)-(#!1434.!  )!0'&&%%4  + <0X6(-" + +  4%YI:H0L:=f; +   +   + +T3C!!,'B    ,8eLN'%      +  ?:[w@3##2;8=?>98<7HRl}\qqHq[LLFsupqrn=U3e:IOOgyey]qpVjtx~돃璸|{st嗰̻բ뜔ڏԉɩle.QRκbjefdMZC9JI\AAQ8C?E//::*F)0+/DQڰv}zxҜj|sw؅rnpg~yvD;>><;9`d[inim0.U6'2~@DPx[yxuNZd~UcwzaimoKO'%$$34# &(+02690,-'"1-5:2.7364., !  IjB>;,Q7@Y1AB>f^TEE5BX^Y/2_KB@@=)CJAA;699:HUMDOKJV]XQ=8B7@DEC16?< % '!! '//24':D9C.+"!%C%*08E;'+;752)KDP@AWS73/MJME:2;,2(*@RMRGl>22:?4??E7FLL:=<4" -5 "208:CGC91345=[jcnmmpmnoihgӀjopgKFPSRTJMTOJS`TQQS@Z@RU\cWDL@Gg~imJIoX}yn|xbf«\c[`dc[\AAGKF?CIDtsxyhöĻż¾÷`smdfc\\chfc]`oinru}qia]^jsdif<62011/.34,,-6NU*NL)&PQB'& 0'76=A)CJ-9,:;IU6P$?&?*% Rb(! ')>//#*,"*%*2#.35B8b?*8AK:2EG?2-$'%" 4-(F,&.>PCAPN3KhB4:(1(,+8-=2/*.+81@+)2I='>B*296:$#,  $>A."%,$(")$ !*%$" !1"5)")* %2+';$-03(:J$%$R>8G\574$"!'*07<=;78;89;;=HX?;:@A7@B@?>;:=DGD@=>=;@ABDEDHHLEJ-:!!!'3==2%<5+'.#("56+"%133́}||{z{z{zyz!yyyz{yyzzz{{||}}||~~~~|~|{}|{{||{{z{zzz{{{|}|}~}}|{|{z{|{z{|{|{|{|}}}|||{|}}|{{{zz{|{{zzzyz{{zzzyz{zyx yzyyyz{|||}}|{{{zzz{{|{{z{{{zz{|{z{{{|{zyzz{{{|{{{|||{|{|||{{|{zxy{}| +}z{{{z{{|{z{|}|{zyz {{~~{~~}{{zyzzzyz {{{zzz{{{z{z|~~~}~}|}|{||}}||}|{yyyzyyyz{|{|}~}}|}}{|}~~}~ +~~~}}~}|{|{{|}~~}{{{zzz}|}~|{zzz{{z{{{|}|{||}}|}|}~~}~} ||}}}|||{{{| }||}}}||}~}|}|{|}~~~ +~~~~~~}~~~}}}~}|||~}~} }~~~~|||}|}~~}}~~||}~~} ~}}}~~}||}}|} ~}~~~}}}~}|}||}|{| {{|||{z{{{z{z{z{|}}~~|}~~~~~|{|{ zz{{zz{{z{zz{z{{zzz{|{|{{||{| }}~~~}|{|{|{|}~}~ ~~~}~~}}}|}|}~}|}~~~}}}~~}~~~~~~~~~~}~~}}}|}|}}}~~~}~}|}|}||}|{|}|{|}||}||}}|}}||{|}|}|{||{|||{|}|}|}||~}|||}||}|{|}~}|}}}~}|}|}~}~}~}|}}|}|}|}~~}~}~}|||}|}||}|} ||}|||}}}|}}|}|}|}|{|{|}|{{{|{|{|{|{zzyyyzy{|||~~~΀~~~~~}~}|}~~ `섅´ùÿ¿񥲧ԗµȸኗੴ֑ШҚ㗒ǁ㟫Ђ˘֎兔Ӏ쨂ȦʎŻĭؕƍϹ˖̀܁Հ׈ĺԫӏ㕥ͩЧ§ˎ܀ׅɽζ΀߽讟򂂇⁂ׂƭҶ䀢Ρ҇뵤ɴϚվ΁ڊҌϾɾ胲«҄ӹꔟԍݖۿÄЊȺŹ߈鵖ɥĺɸݫɧΣ᳕ù玐澙Տ䇌Ҥ雚㌓ހî³岽⎶ނ涸ў᠜ڲʪwǿϣʎ䎨шр΀ߕ~妰ɦÛָĮvդ򔳟ץ╗Ā╰΂ݰÔgahwؚ}۳皒ˍȻ牁|_kb~ʪmıᣤ۞򈌌Úޘ…Ì݋圎쿝xRLFM͉Ɏԙ쇅Ԉ񛥰о턍Ѐ픶ۀďŭ®ٴåŊ􋏥ǺŮ􅌒ǝ𓔓țѝՇȤ͓݅ϺƼ⩲̀§İ͌݊̾醔⌊ɻÊꍍ׭˃׌ı߼ז׀ٷͱݦس䱬⿬ℝոҹȿɿޣ̀쓝Լڽع羈劫瀃􃋑Ƚܜāᖞɷͱ߮臀ñċ㶩пᾏ۔מ²ႆ˱ִ̾ӥ΃빗ƺ¬Ů僆Հ׾µ˻ڞس˺ѻƛԭڂ􇒠莊ɒꆈ۽öξȿĻý߻釕Ƹ¾Ӿŗ蜴žû䆩ƟįʯمۣϦن𰍀ų÷ջℓвۺ^ggibZX/,.`ULGKW^\YTOTa1232ac44agf77;9867;79::<<;;77:;?@BBA@AAB@CCDDEDCDEDDEDEFFGGHFEFFEDEDBA@BBDBABBDCBBAAB@?:?AABA>><==>>?>>=<?@??>?@?><<>B@C?@BCBDFCBC@@BCDBADDFECIGIFFCCEA@A@iUF9JG8,9B=C7<8?#GC,#=D;U4:E\Mv><\S3*zG#|n+M&)h  /b<#++($$(2M3]:IVU "!FJG}nk{tga{{vxMafNAN:=6\9;]koAR[]iF--"+!)]-2!7,8*51EE3Enzfɿq~vu]Y9BR:16BQ1.%#"+XG/+6BC"4A;<@Ab07w?J!PJ=U_5,(B1]?1F.:92HH0WIDJJA:SGFNSF5,gjQ2C\ACEJeNM\SsN`C7GEFURVST:=bab\ZFWf>C2:73<2;<71;47D?HH>8DB@;AB@el4;E68687B8WIM`144gm=tH}uv}LFH\,,2791.994.0.247..06A{vzxj_TNRf}obsbX|]gxzyGb]F664V88>!"!#%%$#$!@>;8;:8@B"#&#B8=A=<<>C@%)MQ+09cKkinXOiY~^YWru\?F*zsf^wv_,,ttVe_hanbWJLMRMMtcVO^mtX~lz_dl_r|^wfVKRzVl?S]\GYeKbKsAEMJJI_hX`0[}rktbfEIKQoRgFG^U\ND>I^?7KUCOB\L]fEKUE@EMQ27=?<&,47A6.=B<:5ABI<=D8C@?Q7S?_fjXZ88`PA++H;D=D>B2134A68:@=;;1AM:D56E058QHC;?B^JZJC8XL1+#7B@C>;>GF*QX3.?K9892:<-3=94B39<:9E)-%&3%I14-(##?9XS:>?D>DB>6A@=:<:9<<:7:95443760V15:9=62>9:;<:65P.>X99<:=<7<=49.825688;506<:<984;298:;97-643767884<;76:7564:)757301322324232.,210Y\ZW[1IPW]/-./\DGNJP313-)-.66*++#IT2<-534340951*.PLW.0,.,,././-,-/23521100/.VN--/-++2SSRTT*,,MLPFIEAA5QMDVVTNMKMONMMLJMLFIONNFMLMLQMTe[KOHSJFMHDIFH45TN4-5798=GNQMJIIJFHDLJIN=IMVPPMSQ=T/3493.SKLFB86@B72:E;:242?=;B;998;=56;4Z4:0=5DB98=GD:/WL:6OMEGFabJ6:4XDEEHAEF=E@?AM@6GRL?;455>MOtM683GIJJGHB3><;>@HHKKLQlQIKKSPTUXX+NJDJ)(),059?A@???=?CCDJYS==AJC?BDCC@|}|z{AFJGECC|CBEFHHLNX\W?nAsj@B>GDFuor9=J[49=BHN@=@BXTQ^]ekg*6460*$//($'+,++(%'--.-00D/    /!  !##$!"!!!50'.$.<-*-)$MbfjYdamMC@dxsb{Z_o]wmc[mBJtWi|WUZg@;a^yel}Jhlhd>+ Yc M7YU5/p]0As )40>@4Q4,A^oO73';D5'5,$$$&.716<  + + 'U~yB,Zb=.ho6ZEF6,$(+" + + /# +$. + - (--)  .1,%   $$ );$ +$)/ $ ! + > %/L) 9.% (  .!4#"!"*)+'(#20300 .4!!"2(..">bµ{Է̮ïa_q{KlLKkYGbcOtqejHgTS1010LVG7DDI`ap`XywҾиU9?VVLZIFO\-4P00ZK,L>2-4JZwÀz~~žsyʄӼytեbj^rnod6;;<;73[d_fe04311'%8;Z_Ymkv{PWtҜe|^}@=wghJ/#4555$%$&3+42,(.#%0-:;2.402,*+) )49622XX86_|T>zo953@TMK6771 F^TJPaBkZIT:8B),S3IG(EE@78A@9??>BPYVA;2+25=::M4>#5-! #$"$)2852,866:)%#-4!! %433260,++FAD;8=>N,2:PJ56-F23GQHLLH4M=HV89Y57=2RFKL721XD4MC,21$+),)*"%!-?6@8;;ZP?FB,)5WgkklpqjifhglVV2&)/3#$#).$(:0&&/;?IQI3BLD5$151,(547+-3-931B+@4LPP85&$7*#"#+')!!+$(*0/+'0?.6*.: ##*31+-*40,# 70 +-05.*/8/7@#!(/&*)"% $%0)+&&00&*"*-B@),68_H,+?;"9XOE/0eW<;%;"!   )"'#S(*)**$'+*!&!$ "$#!%($!"#$$# $ (%)'$!! !#"!"###" "!$$)4/#%"(#!%" "!$%"!#&$"!!!"##"'"#'&)$(()&!#  ,!#!$"#")##" "$$$&$'%)"! $)%)(#$"13'+!$"&#%'!'!!#+"$"!$)'! !$"'!! "0!!! .')-+,O+#!"7+76N6(%&7<:76:6+77476<CD@CBGCDCC<4865$+/6::8::77:9;@PM::=D;8>@BB?w9x?DHDB?@wz@@CDEDGGE8/&<#=8!!!%%(D=;!(-/*-*-35~|{{{z{z{zyzyzyz'yyyz{yyzzz{{|}~~}}|~}}~|~~||{{}}| {{|{{{z{{{zz{}| {{||}~}}|{||{||{z{zz{|{zzyz{|{|{|{|||{{{|{|{|{|{}|{|{zzz{{zyxyz{zyyxyyxxxyzyz{{|||}|{z{{|||{{zyz{|{{|{z{ |||{{{||{|{|{|{|{|}{||}~{{{zz{{~{ z{{z{|~}{zyz||~~{zzzyzzyxyz{z +{z{z{{zzz{z {~~~}~~}|||}|}}}|||zyyyzzyyyzzyyzz{ |~~~~~~}}|{|} ~~~}~~~}}}|{|~~~~| {{{||~}{z{|}|}}}|}~}~}|||}}}|}|}|{||}~~~|||}}}{~|{||}~ ~~~}~~}~~~}||}}}~~~}}}|}}~}}}~~}}|}~~} +~~~}~}~~}~}}~~}||}}}~~}|}||}}|}}|}~}|} ~}}}~|||}}}|}|}||{z{z{{z{|}}}~}|} +~~~|{|{zz{{zz{{z{{z{{zzz{|{{|{{{|||}}}}}}||{|{|{|}|}|}}|}~}~~~~}}~~}||}}|||{||}|}~~~}~~~} +~~}~~~~~~~~~~~~~~~~~~~~~}|}|}~~~}~~~}~}|}}|}|}|{|}|{|}|}|}}}||}||{|}|{|}|}| }}||}}}~~}|}~|{{{||}~}}~}||~}~}}~}}}|}|}}}~}~}~}~}||}|}~}~}~}|}|}|}}|||}}|}|}|}|{|{|}|{|{|{|{z{|||~́~~~~~~~~}~}}}|}|}|}~ Ϋ݀Ҵƿ¾ޡ٬۽΋恇ڊҝǂɍ箒Ʈʈ䷓㜋ԶدԣЉǤ﨣ҍڶ堈ѹڅеՂ뎡ι˷빛āʘȬ嶍ɡ灆Ϸǒ̚޲ϯ݄҂Փ◞ٱ菒Ӻ򓞢à虻ϐސؽՂԵՋ̛٤΀ƾ툶ͼسńČȶՠ«܄ؽ֌ﰭɉἁԕ݉Έ򘚨ƩǮ°҅푀۔ت԰ӂˬ۸滆ǵ۶̿ƍژᎼ򦛑÷ݗŰԈݜ׮ا섍Ϻړ{⸍Åέrsx񌐭םÆ͉·ៀߥͤŝ˺Džűֈ׳”ٓ䓔ұ޲↞Ίߏ՗􀚉ܟ勭֔NnϥԆ۱ϑрƛ}yp읇嗍㬇ݢ酏ӊЗ㛠͗sXCuȥ̿뇻ܣ莝瀋ؖ给͊ڮ¿ɿӾͽοܤ½ɐܝꀥʾ敯ˮĠտͿäő֝ғ݄ȥ¿҂ϱᵩ쑂̪ɵрƿՁѩꐓ˄̺өܞ݊̋굞站؝DZɼƶϰÊʇʞ۴ᰛ猔ر僎㾹ؾľͿ܃󄍒勘΁ɾʞ퓚ꛡжɈɄςȁˏϔ؏¸銛ɮ߃󇫃״񗲞Lj݌戀Я靦ԧӷƿ䘭̹󇞮ɡԧⲪꀄޜƐڶۏഭ߃϶❛ձ֎ǀԱnjɚҗ炊˛넌ɭɀ¼ӃäŻրҷۘ渌ꗭ̾֊؅֌䀀Ĩε鎟󏓧ֺ٠٧׌竀ͽ̴쀂␙ƢginmZE\/-V[PFEEUecXYZi4ac_bba]Z_a`369554894<=<=>>836789896697789:<<:;>@BBDLQNMMKJJKIGFDDBB@@BAA??>?ABDDEDDCBAA@@?A@@?ABCCDEFGFCB'EDEEEFFFGHHGHEFHGGHGHFFDDCBADCDDCCA?@BBCBB?==<;???===@AA?>>?BCB@==?><==?A@DMEBAADCCCDECCCDHHDCBC@CHGFEKIKE@A@IHHI}k=)82'GZ\t?>=>NE[@3RG;.5SOE00OooFWE?r{tmDgvdlkOBH>LSM@_KNrmzyiru`k_bec;5BLLA9'?2605--7-<0U8_%W?KFF6Plykwk]_m<\]6]+PLQgCA>9>-," %%#$!$0&'0-!+"-:+wN@Il=Qq) U V7;/,$-.*V9I6C9X%bLI8N1Z[4<=4P;#B82%*5&$@B/C24" ,QQGC,):C,(-$1E..1*,.9W>461+E5@TZFP>P54L9,)B"A,?U\2//"1P?C07?C1h<_OkloJ_FQUGBCIQ\^N=WPaWWURGXa8>:9<<95fba^368::?"#! ? ! "##!!#%(+)(%%*P\OTPbi]alak~{txx|Uhr~UiQR^QwbWaVikkXP|noOO?dSFuES::S_ojrM?d`vL]\KKS]^XZUFx=RXk]ZETIdVcajdeUahoujEHtdoeir]X`TTDDFlHDeZPGHHwll_XViBFdrcemloIubNNKksUHLWJj[]yRyPePvLODOV[WUZXC{vrKRRlyLofjehjieefe_j_beVwzyjo|ih~y}zgf\eokjƚwvmrl`]yqgZ[aKQOC|HLyz{xͽümxlųcigbafit|{yvngfeebm~urqCDDCEDBB>@888C=98;48aHS497<:<>?TD}~sqpqyE@FXI59:712530.*.465U46PMK:76^?@C#$%%)(()(()&'%&'$'%$$%'$%;=@!AACE%*,1-'*,-VeIYqK\hQTWZYX_b׽}q\af^E=c;YoQXKf`NGGQ0H=A7:;6-W6NC8:4><36468=98:;X53/2AA2CWk]eG,^@"+#37CF.17AI(>0A08:9021A939&1/0R2SE95)2%4%'.38.*3GeQWdTTY>VNHNQhEBUyDVWWClUU.>BECC1?5FA=/BCCDC>DF?;;;::=<<<967794561/0:7;9C385>86;6UH]98809=?;:.C><1?<`:;:CICJC=3=;53=:2EFA>KJBPUNIHB>BNQRQKRFK02[CUQC>6:B5=GJ0I5>=HSKBHOCBLH0=<3VP+C>HK6;FPW31QHNK>FGA?GHHAAA@>C?@=RC7OO49?GY\98?ABA:>CF?D??=7ab4E@:75I7UF8DZ294XATJUMIGIEG:0LU15<>?>@@A@=CCCMV@??CSI@@CGA{w|z|yE5DD}zBBHFHLaLaCCADHHEIKHMMMRV_d7:>BGF=@@YSFUg5bf-6689-")$2)"#")10+,,4,-,0.,)(,-,   " "   !  ""&#$! 68 5%-)337)"(omXXKLC~`@RW_j{yYRruY\Q[f}OWk`\P^T\FOOPVWad^R^ngE,FU(FBfS@N)3lw:`JfN$RkH!H5IU==AhXOBshce3D1:89"0,-,$$(5=9/-68<@ot\& 0RX^0+'"+*@4$:5'43/"&@B*F|n<-Mfgi?PM;JF45?8BH=4UF=E;BDKFJKQbY_\Q))4=;-$&  "&&H2HC% +-BK`Y?#   "&! +4$) 2!  #'9XRLQ>66.  +  +  + 1&8*"FCu8  + + ~RBY@>8>" + .#-9'('  + + +     +  "W>$)&:  +\7%  + + "8g"=0 %%+9>Oq>l6,Z5UwgcFM'86MNDCs/"!#,8 )*8$3     +&Uvn/IPie-ETQ;9p02Oܣ[sc-5/=?66:T\4Q^Y^Cg_dKOGCXCPG?LF(.1@NBGfEI><&*'W9]C;YSB>Ghc=f><=33ZN[W;K/:@55:>?>=;2V-48B72&/(+#""!$"##-*99=,&,&&+%( #/ 0.)#%F+KA:=:77?'(9C60558+SF[S@L450IK8fUY-,6.VE;7F.LO1AY2F+*#---))$$E<5<+43@@@D>3-5/-fZZakorhb^U]cH@=^]UR4JLJJA@F:!# 4+beN627A"+%$!)+A) +':*e(2  %$BQ;b;A958C::42$8:,B +#80(<2?IMC84$75C1:F-0M;EZ;D@A, ++!##&3.(C+ 6G=BKEP4N9*/=54'(/=2837-:1E61P3J^AA-E?) *#"'*"8#0-','0-#" %*/,+-/7# !.-(,9)4#;!  +7>$'-32-!.#%&' !& ""9$5.&"#'$0O@CH@ADBCEA<6677$7%5<$)1699::;97;<;EP<<<>L@;zv;tvxxxDCA~ywxA@EDGGLVF(2#$###$#&))+('((*+,+%.3.4Ձ{z{z{zy zzyzzzyyyz yzzzyyxz{yyz{|~}~||~~~}}}{|~}|{z{{{|{{{|}|{zz{{|{z{zyz{{||{|{z{|{|{|{{{|{|{|{|{|}}}||{z yzzyzyxxxyz{|{zz{{{zy zyyxyz{{{|}|||{{z{|zzyzyzzz{{z|||{z{zyzzz{|{{{||{|{||{|{|{{|{ |}}{||}~z|{}~{{{|{zzz{}~|zy z|}}~}zyzyyyxxyxyyxxxyyxyyz{{zz{z{}~~~}~}|}}}||{yzyzyyyz {}~~}}}}||}~~~~~}}}|{|~~~~}|{{||{z{ ||}}}|}}}|}|||{|} +|}}~~}|}|}| }}~}}|}}{ |{{|{{{|}}~~ ~~~}}}~}}}|}|} ~}}}~~}}}||} ~~~}}}|}~~}~~}|}~}|}~}~~~~} +~}|||}}}~~}~}~}}}|}}}||}}}~~~}||}~}|}}}||}|}|{z{z{zzz{z{|||{|}|}~~~~~~}|}|{|{z{z{z{z{|{|||}}~~~}|||{{|{|{|}|}~}~}~}~}|} |||}}~~~~~}~}}~ }~~~~~~~~}~~~~~~~~}~}}}~~~}~}|}|}|}}|{|{||{|}|}|{|}|}}}|{|{{{z{{{|}|||}|}|}~~}}~}|}}}||}~}|{{||}~~}~}}~~|{}~}~~}~}|}}~}|}|}~}||}|}~}|}|}|}|}|}}|}|}|}|}|}|{|{||{{|}|{||{|{zyz{z{z{|| +~~~~}~}|}|}}|}|}~ ޹ʹ:ľ߁Ö궡ֻ˂и씚΅ËĀ󺍵ʊӌųۃǾ÷肱؄𕨛ВȯؼݻŗҹیʦýЪָ̜ʓܛ…݅⧣ʲଫꀡݣչ‰Ь㑙ہ֨ӭ䋒ͤ־킇󋧟ހɱůǤnjÆиԧݕ˛ͷ½ųӅⅪɡ͖ȿ¡ߪʁʼ傰􄂉ТԈŐޤሞϟϼĢ񳹐˲ϲӒ޵դ꼄ˊ䟹ƪ俗؇գ律ǜɿ¸ܒⱕـ鎔̶Ҫ̶΄ݨϑɟŃקݯƺ{Ƴٕπܖƹ©Ђ슱؜ݕӈ􃆛Àd裺אОƼَrtso理ȞΦ˘ȱʰԙĉܼξׂ勝׉^yȊһ耟̏䝶͐Nj־ʸɶϟ񫱿ρ熈ܙȽ캣탠㞩妃ݺãၖ̍ǐՁ߷˙ဨ适ɻ̼鹱ȽЪ”؁ަƖĨ乵驭ؑ򲠅Ӷ߹Ԣܔղ탅ǹƯĀʹ҆׽ȿ򍕜Ѫؾڴ鏴ݐꇉ݂߳֨ޚʄ͕񾋤֝Ɠ쑀ǢĖɃĜɡ橼ףɉ낇ʹځޕѝꇣ몀ń¬֡έ􁕕둌󞐙ͱǤĬ˹Юڇއ詤Вꈆ֋ۅýȳ܁żԗӀ˦ºܫú񡻾خӭλ犓ƸŤ򎉤쏠ˡ٠ѾȭҦBꤡ~ifgcaRDajeaZK=?CLYZTP\efgedehddc^c778cUY\5]9=<<>>;ebh58998766679658:9>??===@@@?>?@CFC>?@=;==<>><=??@ECBCBAABCBCCDBEDEBBADHOPMHBFDAD@?@?@:hhV`efqCK$MKupfR~SKsº{qqr^hr{qcuq~P.Ibc5B_2Xko`iV<9BNVJxWT-atR8ALYuNFGI=FH?<>0607E@E@KHC54;BOI]kk47=8'>lhxE5IKGA438PBQSpzU|xxqseTQAITMGQAJEW^[xgpss]w_ZE]h>oDIGE>LH.#*)+6J2+-9:COS-cM>?H9hRI@CFETntmy01V;JkMNENpjiRTahnRra`UJ412^8:S/aGYP,HnKK&'.& .0.>*.' +K75E:PN8dkz;40>L=:FfBEI;CH:%+--) #!   ')./*/"$&)'!+A\9$;VB;O%EEA4,!" 5^_,::n>38@4oZRopifoK|DPNVMhewedm8NZVZYk:&',# '$58#**"#-@+&A'6AV}n[uY>F=WNAR4E6+<(,2*:7<6AACA/G9=KI%C=#32+4 $*:7pX.[I7F[],^1'*'+ !%)97/6!)0*#980#-8%"7 <(2F;BC4/+## (#.4&LJh>g>V4=RO3*5H2+AI,4UT.;).9-5,;?9*L;g^@:]GeI!=VfaPTJCQ=lBYf\\p[Z`YR]TAEEJWd_[d>VLUe8964c35b6YW_466;;?vLl~Ә˺gmlneas֡rȜ㉾}ZeexiwnZVh}v{dꍯskxtxJXtR_ieZ|dZcXyxxv¸☛vmʷ`cI~B^UgsdxQPPKiPUNUT]PHSLW\]lU`V[ccmpe[ivekcϖyyzjpz}sŁt䞩{Ãˍ͡␐tׂykrnuvScqiYXXUrd~CPGtIGje@r`Ci]e>oHUaۙppϹӄҦ~wt}ac`RVcfl^x;;:a`ɏau@>36B@f&~KX^oZqw|mhUu|~yrklvhjsxcqND<@o_kK44.-.J99.3:0H<7>983;5=CFG?>@@8>GJG"##&()((*+,-$/001488842389358;##!@>= "$$!!$%')'$%('&>bbD`geXpXWgl\qy[g\pmovrycMZkfdYg`LNQWN[cp`OcUUI?=SjXf=L78?mPjk\=:NeJrtfcznHBA[dNURPC[oZ?VZed_Vdbg|zCHeWlhfipg]X]i^yg~vZ^JDommvohTOjNywfrbsxgN{zVkFJUY{t~UkaQrRXgqjzYXbjSKNTDVwTRbtQSk^anwWxpd`dnbinyoXUvx|z{vwhfZjfhkli}ol]eu̢mgif]bNLHJ}̵ƾҿʳɹ~дZ[lwoskcb_]_hsuEDA?A=@:89@<:7:99ROf587;8aVFKM|wy~vusr>HS48468138/0Q25666P5:}|tgZbWd{c_QXlZrjx`xq{QJg7:@^DF$%&)'))(+*)"&),,*&&$$%##"=69>"%+/1310..3101e:~WifnLZ_USUSneOo=PF_pɥ~nN{vSczjol}cew[cr^]NAIWzQOb[c}o^iTNRLc\^hsGvsacG?WBuEFy~H>99FXlbfQkAqRCA<8ATHdTDWLP[U_HC:]G@H,;L<>UH5598W^=]MZaRLA?X>09C;=6)J\Z1>@@AV[7S`bl/!''5;-0ZDF/,59>-?M38.0;@8C+7,A?GK2>/9/(,)2(,..*&#?1@;\:UOhLnIF*L=;DAACG?BA@7AA=<:;;;99::87576567/\5::>OH8796368.T1<06-0;=?>>=;;.:<8778>?7U2==;16B?<9796?6-610:4K6:=>=7459;46:8339.003424774.XZ4w//110123VUTT/1Y0[RRLKP0/46:0101-;)/?X41I,E[Q01/,47960/-+U..,VOF*+)*+,--/1123332141,Q---+.-/-PKIMOR.,TRQ@@G>@;D9.I,NILKKMLHMLNILLLJKOTRHGMQUSJID=?98405X3_CB@4@A?ELQWNMGHGHGDJIHNOPULPNVWQPW]7E63/OG@GJI:078?ED86>959EBA=>=4=F?;8D>F>?>IIEBRIDE:DHPNKNIG8O:9J4P-HE<4+<7,?6M9DDLP:BFN:CTDR<@VCR?PCTT5;RERZIMGHG>HIOGMEEB=-F8GP;Fn<24/>:9F@88[U:SW9A@<5ZbOU\IBM=G2L=iGTVgCCmWSOMNKEE=6:@@?GGIHINMPJJJNPSW[[UQGA1J2/5=R-5;><=>BCDBBBFPFCACIRDA?CDEyy||zy~zvyzDDGIQWYxSJGHMPMJDHOMKMP]ag7:; ?C@>=bV\Ubg\d975622*",./1-$ !$,+)&-2110112/./,/.()+)3134 "! "')'""" "  00'-016 .1UOP@xp/_UthKEgw`bce`@AemPSUG@yic]#8>DkKe;N;, 1CE/`A9AQ2!5GDGPS\\QLVepiZiPlXwPl|iguu_yR^cpWyymxwņ̜ގ񓓱v~isw̭˜}WcvwѸźhjf\n\i`/;4Y64KJ.TC/J;@'F09Adkۧߡnʹֆѡ~ҾwƏieaOT_`gVr|}643Z`ї]k7+ ")a(C^^q_sy[y̒|{~}jvOA7;dWgL0' $@40%$("90/2-*#)$*4:<2282((-1/%"!(>?(;?FFEFEKIMR;+,8=0=@-52QT50:<9<2CA!&.ETFJ?JbB49>B[5=T7A84E<=623?R>E%.#&*F7EA<$!.;,GWLEFVH^h7./=@.30+"3B5:$&&!&"".-$*9/((12+&(/%3(42*/#"C=ACF@=2/D+IME5=DUaF2XX=E02:;QKRRW\U[T9H<'A1;^^@FDJ20:<)%&$2,6>,OW^47WXfQcST7/@%%'8%$ !=#?"'9GRFB&#C3W:V#L$+/.=4 4K$5/W /,9!%0&/4$L,%1HO/&-exH %7Wa77("1-'$(#&-$FS%D) !L27cmb8.)'0<@*)' "  "34 &96=NIS=1&(3B.FG-cP@[@;@8M ++*791&!:1,GF ?SNAC@M<306P:2< ,=./E;09571+,/1JO0J5?C1$!6)$+!-;9)144,'Ş).70,%#*?!$+-(9?G(%O:<$$*,(5%&)/#& .1:>=;;?>AAB@AACCD?8756)@' $*>#*16@;=>;;9=JB@>?DK><:@ABstww}wv}|vqvy~DDCCB<8C+%$$')'%#'*(''&,,- ,+/-20,4ǁ}|{{z{z{{zyxxxyzyzy/xxyz{zzyyz{||~~||~~~}~|{||{|~~}}||}|||{|{{{||}|{zzz|{z{{zz{|{z{z{z{|{{|{}~}}||{||{|}||{||}}}{{zyzzyyzzyzz{{|||{z{z{{zy{|{{z{}}}|{{{zzzyyz{{z{|||{z{z{|||{{|{|{{{|{ |}}|||~|}|{||{z{|~~|{z{z {~}}~}zyzyyyxyxyyzyz{z {|~~~}~~}|}|}||{yz {{|}|}~||{{}~~~ ~~~}}}|||{||}~ +}|{{zz{{zz{z{|||}|}|}|}~ }}{{{|}|}}|{|}}~~}~~{{zzz{{{|{{z{{|}~~}~~~ ~~~}|}||}|}|}~}|{||}~~~}~}}}~~~~~~}~~}|}|}|}}~||}|}~~}~}}}~~~~~}~}|}~}|||}}~}|}}|}}||}| }|}}}|}}|{{{|{z{ zzz{{{zzz{zz{{{||{z{|}|}~~}}|{|{zzz{z{z{zz{|{||}}}~~~}}||{{|{|{|}|||}|}~}~~~}}}~~}|}|}~~~}~~~}~~~}~ ~~~~}}}~~~~~}|||}}}~~}}~~~~~}~} ||}}|||}|}|}|}}||}}|{|{|}|}|{|}|}|}}|{|{z{{{||{|}|}|}}~} |}|}}|||}}}~}||{{{|~~}}}~}~|~}~}~}~}|}~}}|}|}}|||}|}~}}}|}|}|}}|}}|}|}|}|}||}|{|}|{|{{{|{|{{{|{{zzz{zz{|||~ ~~ǀ~}}~~}|}|}~ ϭڰ񃉊󀈔Ϩ赫󃜌ߒڰ↦Ȍӷըܙ֍̉ؠ򰝻ٛϧ̆î㮼ϏȬښڅҩϔʼֆ٩ӚӮɹʯ뙢٬ό綺′ߕɚ߂¤؆ۢǤźדق̹աˍӳғֈ񆣞抖Ҁ퐺֮٩ҕ‰㆐ם㦖гÀʧ槨۞ޭ㿟ׁǞͺƜ֝Ļڣ娴м֠Žߒ髓෗ѝĵŃÕÐʟсǩʗɉ됬߷쬏ˑ̼􈖁ձʮԕՒɃڏҮũⷵщ۲個È硳۵їϫ넢Œڥހ똠抴Ҕˉロky⢭ٌжȴݖٴƑ杅Հïáސ퀾§ۜq‘؋濟Žvef՚ewqåֽכʷŧ۠ūĤo͍ȪȝѾ߆䙓Ӧڦ㑄ʼĻṥ۪Ǝ݀脃ϿʃϷΣĀʱ藅˸ҝȹ۽⽄߹ͧՀ摡ܕ㥫ꔟʸӽɸÿֳɿЃሤǯ牙℗Üɺ✃ٽИĬ߁ކѵǮ׳Ԭ܍ٺӷŹ퇇Ĵɭɱ󎛲“斗퍛ۉ֩򋬌ȝᚥϋٱᄋŢԞڝ÷򰉗ؠٹĹϭ늀آӵ֗σ㬔ȶмԚī톞ն׺ԪӲۀꁇ㒻㢨ɯә򹰝߲͝ǤэͼӮ㉱ǫ򐚜؍͊񃖢΃ٱゃ􃆌⃇ҺـнӦüóڪ뀧ѻɰİĬֽ㞶ȁ׺ͷҲ᳄퀃袬݀˶Į炋䟰__`\XZZJHg_^c_J@HIR\^T\dhhhghebgibd78643b3888;<;<=95^c48;=;<9955975368;>ACE>8AB??ACEFEGGFDGJMKIEDBCBBCCBA'BBA@@AA@BBBCCCEEDFBDDCCEGIIHIGGEEFDDEGFH-GEFFDA?<=<>=>=>@>==>>@A@BB@?=>@?==@ADDBCKFEBCAC@ABABABBFGE@BBESTRNKIBCDDJDJJE>fb:`Ybmc>(J7piQeR^^mq\SQu~hcoqer|_gu^h8Us`:~#U~P]qAK:VG5T9?HaGVHG9a9:X6KFD)J4'"8.,-3,8@A3T]n`rYC0g9MFNH=bfVii85ONMJE1!&% (!"# '"(+/5%/,(($ !'!I/yS=. ` cm-,   6;c\S-4C"=I;FQKN{~rJtVy[ZtS[HgQitY[7N-Ckz#`LGI:,F+30ak?6;J=$-.L8C4D75+H8&7A?FC7327;5$4==#;j;fB0^;METLRNAJNAm\dn_cMP^NLUhCCA?ui_Q=Mf:;:434a45LS_ib6;?=>Nٷqlᴷ٤kGk|ir˳̥Ҭq氺kQ|\s}ho㧆sX\h\JxHxMW\[vgfhnw҃c~ryM}_ob_mozzp^je[Qe|UxZcipmX}hg^_\vl`[hicxyfflsjy{UZuqk^kSxtuȟ{~{~Ҫvī÷߇to߷ly|xrlhycfa[cUYSseUKhxnrxJUt]gX[qx`owνo}Ȯzqߗqrqxia\[`YZ_hm~yy;dC^g=CBB/IeGciU[}\X~|ojP|xnzwngxuhW}ttWxJE9_V^jF|351,9B7813/;D;9?88668@GGG<===5EMND"$$#(.0/-+) 10-.03686433326:>#!??>! !"!$$')$#%+*+7dtM\EZvw~|qPbZ\hidm[{{u[UxhSTUHH]ok_lmNjNgUTNE??z`YgAIPfBAU=4799Xz}OzITMJh_kLuYVXPU\YknfNwNTfPTid_[acioicdZihn[JU_]gtqo`aP\|ng\YelkXKwhfmflU@Mg]YtAjG^jCWexk|o_L\NkMJfH|lu}SPJKQQRwGMAt\YfnwyvS^TW_^\oVf`}vgZWdc[QY]mzjtrh}n[idnupqxpZ^fok֠efda\wvL}|v}طâswȀη|ٷlx||wyhoqia_g`cDusECBC=;A:AE=68>:446b2QW56:77VXOIPP|||ngasCP`565<<9:;7,R78688T3;zv~vh]dpdgm]V\[^o^pip~RPi=:BZC&&'))(,,/,-,/-,+,*"&&$%=<'A:?A&&(33531//24478a\v:kXcWdiVyCaPEKnu_xtlZXC0s_aswxYbt^hh[Y{Wt^\ualmTsmkJZQGfGIpj\nNaddf`S|ocMM~L}K@qf>d=E<@:?>N\l_K~gU=F.?CHG*01A"E$1>*^8GRXYHTIE9aU62374J33V\;/YII:&*-;;9->GN+=91.'F?<=(3D.+"%#+65gN>)@<018338)+=)5B@.@%BEm[)MBD9"/BbWAHx;-=Bd9T1GGKPA<:;:9988876735751VU499,:65317:73X4MI7-/7:=?===>:-89:7=6CC:XQD560A@B<238<8;6@5;4.27?:9><8:;;587/R2+5<;-9AAALC;EHA@C:7?DABLG7;7<=H>96C=HBEDH@F:HEDF4-DNIJBI0VAF?/228IK>C5@D4/=CGPAHJF9R^:L7C@\8L67?;6YTUMVVJKQEDPDTCA;IC93ebVgW^[H1O^QXld4344;E8A4>4?59lL5YolGUOJHGFBA>9:DC@EIHIJNMLJDKRSSV]],MFD3cZMGIIO/6:>@:ACEB?CDILABDFKOJFC=BF@;A>zw5v|xwy}ECCGFICM|QTNNLMNJHLKMNMIPZc79;??<84]`YUXVZ"132,-/&%3.-0/# #$)--).2322343/2211eX,T +'ca6CB/9DRR?PC&7h? 6EKHLTRR>>G>;:23/,(##),52"(+74'63$)*. .PPPS!)'''/e) *==/"$0"5PeUsD|nfwXE@)$3O:P4(36<.35,$-46-%#"  BK+/(59>A351@0(A@IB+:K7G,417C_7IT<3C=L;L,#6(((820A^KWNHRC0lbYE1?:;50--\G=B'-2H00:%!"3JI1I);85GdMU5J2.+*.1-:B<+7# *"/+'%%! (0&,/4.&'(%(-++(.&3C=<89?EB6-K@AHBF5%0F@;Q)B.@UE_g`.8AOCLXND>5A3aD22Gc2UHLG,,''*%!+"64OSUV8:873.0,%.&K`US\CVpG\_XSUfSNC;8@;5/[45AK@LNIeVdJ9_U|KFgT`\b[P~muzcXXzPSZc`Ėab^\Vtzk~rF~z}{wny̪ûrpƵ|Ωjswwnl^ef^XW\VXr;cd:613-,4-461,+0,&%&A!3:%&*)&8=86;>ntoknzg\XPY4?G&&%,.((+'8((%'&<&/dc]_TIFRWNRTDvlfm==?ANKbZ`fe=9J-%+4%! "# ! !#$%A<.#&?RD6$X<.;)/*%* +4J.G7I--1!%9$0AB></5*572M1F8=7'5+O}_.!#,[5:= ' <-?79%&(L8^?3RI.A("(5 + . + +! "),>:F?J/5*2/66ENb\Ckz]I22'*+*$**!*O*8@FI@LB?4ZJ,4>*359(4/&(F?P:[2@XS(4D2)E)I+2%%/'%"$'-&"19N+3,*G:3079%/! %%7-.5h4) ()'/8A ,*"1+,,".!\D.)%!% +)7/)2:`L"K91-)F3$G"1$,$"$(!$(')!" (&!!!#%$$''$*%)(*(#$%&&'$.!"!%"!$%'%%"#% "!#"" "" ""  !#!#%(!$%--+&'"!!/)" #"#!& !% " %"++ #) $!!" !'%$"$ "!! $!"$'!"$# !% "%, ,(!,+-&*,&'*!"*#.$#'#;6.9-32*,5,/<6 ##!$ !5(,0-&$%"!>,$GTT;C@:52256723><8:8::ttvyrtt|yCBACCD;7L+*)('&()*)'$&(*+.++.,-ȁ~{{{z{z{{zyxxxyzyzyyyzx+z|zyyy{}|~}}||~~|||}{{{~~~~}}{|{|{| }}}||{{{z|}|{z{zz{|{z{z yzz{{{zzz{|{{{z{|}~}|{|}~~|zyyzyyzyyyz{z{zzz{{z{{zzyz{{|}|||{|{z{|{z{z{z{|{ |{|||~z{|~{|{~~|z{zzz{z {{|}~~}yxxyxyxyz{zzz{{z|~~~}}~}|{|{|}||zyz{z{}}||}~~~}~~~~}}}|{|}|{z{|}|}|}|~~}~}||}}|}}}~~}||{{||{}}}|}|{{|}~|}{z {||{{zz{{|}~ ~~~}}}~}}~}|} |||}~~~~}~}}~}|}}|}~~~~~}~}}}~~~}~}}}|{| {|||}}|}}|}}}|}~}}||}|||}}}~~}}~}~}}}~}~ +}}}||}|}}|}|}|}||{|||}}|}}|{ zz{z{{{|{z{z{z{|}~~~}|}|}~~~}|||{|{z{z {zz{z{zz{z{|{||}~}~~~~}}||{{|{|}|}|}~}~~~}}}~~}}~~}||}|} +||}||}}|||}~~}~~}~~}~~~}~~}~~~~~}~~~~}||}}~}~~~~~~~~~~~}}~~~}|}|}|}|}|{|{|{|}||}|}||}|{|}|}|}}|{|{z{{{||{|}||}|} |||}}~~~}}}|}||}}~~}}~}}}|{|||}}~~}}~}~}|}|}||}}}~~}}||}}}|}|}}||}|}|}|||}||}~}||}}|}|}|}}|} |}|}}||}}|}|}||}}|}|{|}|{ |{z{z{{{zz{{|~ ƀ~}}}~}~}|}|}~ Ŷ󅊍½Ŭ㐂ןӏȡш޵晛ǭ˽낲Ʊҁ΢䞉Цھ􆗝ߍƇءϯùӳԼߑùǮɋ̻ɡƀǦ܀㢉ȮÇҡ᧾ߡϝÁŒƯ눍һϦʻٰ«盦چ삆԰ߣՈª途ꊊɪƂȴԉߓѯуԷȹʏɸ݈úȬ׀﬛ӛ݆Łف䦟ĠőЂֱЎɠŷ܍½ÔߋܸǨߪɀǒ컆ѓن掲顠ۂਜ਼ɏɳőׅ؂ﴶ惆ُ՘𩠵ͥť֍ˍܿ駭Ù펹΁̟쀁Ύܡܥ𴨰פ͆苤Խ҂Ϊ͗勪ԏݰɢŸйҁϒ稤܄܅ᾬ굽IJ񂄣ڷȷ۳퀄ǂⁿȚзׂ̱ͷ»ʬن틓ΐ콨ŵרӀƮӪڞ~Ӂꜷ¼ͮڟϹ۔ذñŵʔ腏񂟤ļ׳ȣЯҲ˪鄿Ҿϖް鎉ǧɳ􂌐ܿǎ׽Žп襺κ͠܏拂昧Ҷ׉ځ퐦熐䅖Ϧ񈄈߾אſжȶ˫ԄâႁħŽԿ˶νǼꇓо¶누í̉镖ѻ݋蘔ßôæ̈́Łٿꪧ̩؟龳çĄѢӓт皋Ϲۑꑏǵ̎֓淿ܠ†⑚̮˺°˱쒼ʤɹңӀۘĢҥőͿӈԲٸѿ꿉ʤ烂Ŵމ샙ġ؂І烓ج̵̀Ũȓ˿ĺŽݰș㈱ՆջŷʖʵŬêé޷񂊋̴TX^YYZSe?ZZ`gdTJKNRYYV^`bdk8nc^cc\`6679558648;<:<<8fdi54?@?:?@?>??BDC@A>?A?CHHDEFEHHGDCA@@AACEFEFEBBAB@?ABCCBBDCEDCDDDBEGGGFEFEDDCBDEEEFGFGEEFFGHIGDCBA@BCCEEEDCCAAAB?=??=>?@A?@??>?@???>;:;?ACB@@BDLIKHGCCJDBCCBBAACCEEBAB?AGS^OKJHCEDAHIG=:fhh`RSnp=:NQSKb[zsZYtT}ppslcpczuNsdhu59[\N_- n`jal,/UmSXo*INSM:@ILT`npiWX=A@=<831/,++:5/G5F=ABI4@B7/-D)4g[OPE*.&LA;@E:TP>L@=JF6/C1(/PL/1(0(,*HLLQ`ZP^;BV=58DL_^`d5opF=:ILO)('" %)% % $%')0$,#!(%Ő2K%5A;7(0 +.b~> ++ "/6c\u3=17JJ1-=LAwuMkH4^UVf[`Q=u~cwgNlWC'?+R9b@npe4'+'=/0%'+"+"4?G5R-Vi݀hHsQKC}DmU[UXa74Q<2<17,9=4UNMLK9LIHY@((>=0F2!)*%<1?ADtV3-=>8 %'''/(,?=4(#2&8?*.7.*M+2*=1>&'1'LD-R-*GP?V.-)UW- +4V-/43N5.&A4;-1**D:?GQ+>=KNHE""%%(,11...*>21/./342443216;;@CB@? !!"#! !$&)'$$&/+)FuQTWhpv|lzu{{QNV\TjuyxdcyZR}sgsUIft^UYMJW\am\^07::K9mGmfFECl\XZT\G^veY_FvhcNQbX_^^c{KLaMY^S]Ycailyn\bbhp\SjThouxqfdL||`UUZVXbVWqQ_E[]dY^jNfPrFG}t}lOTdmv|{eYyjIiSWyT_o|glETNQTOGSP?cJ~QRdaejr{OUWXU\_f\IWW\iY_a\SQSiewYrea^cvkxrWZ|um`^^y|uuwEI~|vʿʺľnĹ{䱷fipvvxylhod\Z[[]u@>A?BB97<k4JL4ND:?>:N1;3@FU72B>78E9L>GL;6@6:<96,YI4`1X8@aeQ:%<672=G2,A;3'A*E54,7F818)T_L6M>1*4737429()B<@=4:H8KA;^\8m_UKd9/9A('TO@[CA:AAKCDB?FEDDC=47EC?;<:<<<8975976584/X/552/V41138510/bK`^-35;:>?;=@6-6;5?A>E88ID/%7Y5:?:72:<:6AF5F?RQGGKJMKKNOMKKLJIJJMLPOJ6KHFQTSLQE<1]?N=<,?11&/6KJFIMIQJOMUZUO\WNJQZSSLWY^YZA1;<;1.TLEHIECHD@DCD:6EB99KE?DII6DICAC:@=?GFK;899:;7=:5?6GIC4FI?A?;C::/TJPWD6XIM8@273-FBBP75;,:A9A3MLUABUYNY`PJ=MAa`aWXa\Y]^5cX5SGDLAD7FLEHKBFC6>=:5`\WLe4<^??gPGDAe__7ZSXQIGEE?A<;:ABCFKKJILLLNKOQRTV[.+OECcrhcCMXY`4:;>?@BCC=@GLNFAFIKNMHGB@CE@?=hmBJwv|u{zHFGIIJHJo^UVSPPQNIOMJMROMZe4769:95fdabXKTS?)06/-/-5".+/33*%&')-,+/012780.01./213$-/!&#" !"*1($$$"#" &'%///,$%6:0X/14My|CRHEihOxMe_vLTpHag}fbADHKxlmrRnctb{rF4q:AiJ'A=2I +SEFCuM!6lL<<\j&4>'*27=AJRUVLQ{y79656/'$ $#' /(.-,! QG;EA$',;A0=;0;-*1,(#0gYshziuQKaQG=9#A! )>6+/# #<:+1 L(&I  + &&A +2 )# ))   '82yu/&"0ZcW4-   +  +  +)2?%"   + $1:2)&  #=H/#!,-&        '} d"   $4M   <4:+B0"+'QUSOam9S<%FGH_RQJ;lfYmI/5 )0(B+IK8 +  +%4llTldHJ=D$5'UL.H-4,3 + !&'$ #"  + !A. +  +  +   & +$ -/. - 08!-'$  'J """A7/, ,'-!/87/56:24C!)2+2&)0 %;3JEKG^wclevXMJX}ZE\\@@qAEoOabg_u[prTLa\fgkTdq?][ilfSS\GO_XzH]YmVg^A:,FR@BPt\fZb;RjhdVsPlrmz_cliUFJ^c_q[eeTjaWudYMLVHcCIfbLYM^_[j`fsx_kixX|J⃂ƿ㰡{v}o~rϻ㪵uqnJCW}mo[]CI\PGTE{F?N^duswu|Ēr{݈ڣ~|t~t~|㦎rfdbkYZk}q`KzPd_6<&46,54.,683, $$#!+L6306A@PA.@I1/@J5M=P+K(O,L.&EU=IKQE@A>/L2;NA,&QRMZhLRB;I\ibUTJ93<41>?CM@B 0%?.@8()%?51;371\?YTOHC';20()2-177:>% +(,%-*) "#--$%&.9438&,/21321&AF835:78;36VaL7@-28@;6E--c`V]I67BHLNQB>UM3L7?S?8\VY403C?O;diQ_CkVYG^HtcIRK{xjvmXZFtKkdnc]WWyytrcvznr@Ezw|yoȿýn|٣egnrppndaf[SUSRUm|646122*)/0475RT1&F(#!!6>'$'%A6SQYno[VS[7?HN()*./+**#-')'((?"G1_gobTQKSQXRG~ul\_;:AhQ\n^\dQV<8(%-2 ""!!!#""#'(#"53($1'!&)X(/)$&,-9456",L5'g%3- (4/3<119#5+5)P<2-AKG4178`-%0!$;j7K=1 &$,: (B?$09G<0)'3I(*!*   '!'%D(0>9(:00)68Ji]]6MNMW84&<,U$1+1) 3%&(8( 01*))(=0:?1-6*,-*%>7 6,#@>-#$" *5"-)"'.$"". EW; 2&%!"!(51+''7$;;5YO._gJ3,9!%+$%! $!)*/!.+!" + L'%%-,%)-,-*+)#,)&+%'((#  &$#$##$!#  !!! #$!! "#$"!!!  "!##!&$!)+($(" /"& &# "$ $ %$)+'#+)$"&+'(#))-.1#&!% !" " !"!& ##"#(!%) '%&"&$"'!!)"+"67;(1)%*,$*%!#.1)38+("&!2571/30-112*+" %!#'!#$"!2/.,%4'0)$#"79I*FAF@9522496439;;=?>==?<=A?@CGILHDA==:ai>Hxt{qxvFE#BV;.,,+'))%)*()-)'+,--+/+&+)ȁ|{{z{zyz {{zyxxxyyzyzyxxxy{{yyz{~~}}~|| |{|}||{~~|{|||{|{|}|{}}}||{z{{zz{z{z{|{|||{|{{{z{|~~~}~}}|||{|}}~{yyzy{{||{{z{{||{z{ |{||}}}|}||{|{z{zz{|{||{{|{|{|{~~|~{}{ }~|z{{zzz{zzz{|~~}}~}wwwxyxyxyyxxyxxz{z{zzz|~}~}||{|}||zyyyzyzzyzz{z{||{|{z{|~~||~}~}~~~}||}| {|||}~~||{ ||{{{||}}}|}}|{||}|}|}~}~~|{|}}|||{||{|}|}| {|~}~}|{|z{|}{|}~~~~}~~}~}~} |}}}~~~}|}}~}~} +~}|}}}~}}}~~}~}|}|||} {{|}||{||}~}|}~}~~~}}~}~}~}}||} ~}||}}~}}|}{{|||}|}}}|{zz{{z{|{z{{zz{{zz{{z{{{zzz{||}}}~}|}~~}~}|{z{z{zzz{zz{z +{{zz{zz{{z{z{|||}~~}~~~}|||{{|{|}|}~}~}~} |}|}|}|}}||}|}~}~}~}~}}~}~~~~}~}~}~~}~}~}~~~~}~}}~~}~~~~~~ ~~~}}~~~}|}|||}}}|}|{|{|{|}||}}|}|}|{|}|}|}|}|{|{|{|}~}|}}}~~}~}|}|}~}~~}|}|}~}~}}|||}||}}~~~}|}|}|}|}|}||}}}|}|}|}|}|}|}|}|}}|}|}|{|{|}|{z{|{z{z {|||}~~~~~ƀ~}~}~~}}}|}||}}|} ¸շžĻɿׂģѻנ½؅ⅆ¬­ݎ´ψ،﫴􃀤囦ܼ뾡㥴۰ѢɧظꋦԸυ숅ȫ񺊒njǛѨޛ틠И褖页ҜʈĊԟ֨çØ疄ܮDZҢ—ĝʴ߇݁ʉݙ㊝ꝅқήޢʒ䘲ګٓʴˊ醌ݞñɖખޭ˫؉瑽ڡӟ׽򬂃旋ˡҫ׏Ѵޅ؄튖뻩ƿ̪ϭȫעõ柪ŷ̦ȹʱ߷˔ȶߵ懄εڞlj٩횗ʰƧӨ萛УƽޜǶÙےѹᆕ׬ܷͼַ򼝢خŵ顰ܲͪҾ֟Ȓՠ؈聅dzz骭ҼԐϹԭ뉁가ni޿ʦٽ꤀ἓͿꅗͮ풉ѿػ횐͊ԑ繂Σƿ°ū뚅薇ꆏꃠ⏒Ƿ̩ɃѼ󶳱ի뼒߃ͼŒķĻƼޡͷɜÂѓ̮ۅۙѪ愍Ƿ嘗߀ṟ®쯟ӢǴλ˽ϻȵ苉·ǷؿÀͳ՟ԧʀ˺ه򳐐߃ӎ‘ъ㸚̷׶頩ݘω܂ƅԻĻ‰򶰵吳Ӥõ󖎦򬾤Ɯمۊݼկ̹ί㒽ӸٽπԀ葎̞違λϤͽࡽDz㙮ןإǘޜ܃ƻ±ؓ톐ʫ̊׫ַ̾ԱҀºʹ˜ȸɷȦǽÓɨ˿و煀筥뵎ѽ«Ιǹԣ¾tţमـȵVQ^`SN?=>?<:khgbg5885856889878:;:;:8:;=>=>>@AAA@@@>?BBBCDFFGHGGGEDBDGIIHJKLNHDDBABBB@=>?B??@CEDDEFEFFFEEDCDEEDDDCCEFFFGHJLKMJFC@>>=?CFGGEDCCBCCDDAACCBBDCCCBA@?=<;=>>>?@ACCA@BGHDCEFGEEDFB@DFCEDB@BGHVMEKQGFA=>F?9:g^\VIV:9?dH\^WRa`vo~~X^Ogy^_nob|nwu]LikU!ds98w_t+a1MbBJ#M3VckZ'|4AZHS^YRLFwcQOlqs::91.0/+($"'OP0D;>=3J'N84)F78E_"@/8)IC5FB_GVF?7=SM4$C[_xaiigfRTidSSP>|LFWLD@?358K^]d^kw~mI75-/(5!-&7<3)0NMJKH1-*K(7BF9UJ:FPDPaX\aWmmcWvW|@giNVNg>pqhIgWpHlQRA2D[?7)!5',?6#/'"&DQAjf`ZJJMSG4["B[IN$H$!3268+'65/-41,3<<31;[:RgnHl_gD",,9l%& 4Vc>-    4+Q8 .CO9:>6NvHQSZNH7%$:F^VaWJYaVOBHbT9$5A.GLf|M:C/#.% 4 ,#/*/&&+D69*A=Ctl_cbtVUn9>kWNQ2xD6G2H:<77$:oq4Y>KRR>RLHY2"*)DK>,60#,"#D+Pm$( .D%. #!!'"(3/ #1=!.+"4<3HDR8=?AM6+$7;6JR\5.;OBPC@6=a:_'B2+d2>;TSF>B:+S[E1O7DNA6Wn/QNQ`eAN852$6)>RtjabYH5UyfxR`hgck_2aMMZ]bCBHMRURLCz\LWoed4963VX\m6d5957>=ScM7r^^`wu]puZ}lpqV|}kayhob~y}ndp{~|v}~nkkpelsvgvgoomrcYg{ssiaRVh`Zilxx\b\jqimv|oTdj_Usqbx|c~o^ss~cnkƖ˃X{|Ҁzwqxxrjr_geuqtty^Vwk~pn~~xblQLfZgdeb_zقܮĬ|{no_d̪m`OelԀ{ԝzvqvfmxrzmeiuza{q{ushͥ|~zpy{{Ϧ~tq{ua^Zc]`aly}qmdy`akc~S.K<6fFj4BcMSi}ynenYXʋ|rtp_d}uig}D@3PZ^j:214(9@>;>JONF"$&',+-.,+.(711/./23/034447:8>>@?=< !!"#! #&'#"&-4-*.iZRspkHRctkpbc`VOuwx|{Loxmg^[v_qVayLIPvgaVTVLHSeB\Oj_RMMRUZXmADHJthLB?AATdicLOsdV`qkBLPkjtcECFIIGG[WLoN}lyGIRTahkt{TQtxzxgYgQRS]qruzvxgd^ZX_aj[qntli|yrq{{}wǓia]xK|nú̴ƾ貱kdlx|qngkqga]VU[g|nnmf95ea`cfji]W^gk4``]R]fbbWSZXTWXPDO[M}F^LEKMT4888;:675.1;866]Y78~ztjaj_`[prLkgkrqy;JTM@JI&**+**,.,,-++,+-+)%">## $'((-/.49555447566::8BDvL\MQPuV{fyIBhnkmy}pnt39HJO]w~yeUxz{lizH8JM`dWTKdmZiRLdSRV[UK\_VghXVQSh~upcfMW@RLXLBDHLCjQ]qmTXkuM_OSPgH_RERg@;MN[J=TCTQaC@EIyrzAZQ=ccwi@Y=&,FF7.*+%-+$)2?hJmI6TASMeMK?FL;>LL?N?>3A\aa8`Bf9lf2*IRAa-IL@I?/PB79445ATN6/=9K8U.WD;I@f9:6=?;;0@5ZN98OYNT9*1-D6!/!78FJDD>9G4+$,)-;7903:QU+D4;;/ED52?9K%;683751$6;IC[wAZxf`QGWIJ3]?E?`N;?FECEECDB?:6;EA=<==<=:886392456362410N!iR\1240^1Y/3[RV/2;><=:=>3/:39EAC==8@C8"&EM6@832:<:7519=8478:610;?>98:9+L.132/3.17703420.3-\[Z[2045/@BWV\[XWW[174[07844S).8(ajUPRE5KZS+/16I20Q.73012[<88EPM.*-0133664561300/-..W-,,RLQUUVPPNMSSOKKMTMC@7D5WRGILKLLNOMONHIDDGEGJMPMKQHGPLSRA7/G39>623//))5;DBHMLLKKITZWWKWHDKGG@.7@=41+C?EIJDIHHF<>D::BQA:78?79>H?;D8HIF6FK@A/;F::;IDOH38AMJ/8>:4.P?=K9=A0A@8?9RHJCHIRMHWGLU;@B4459Ad_dRgmhj8W:97aQa74dSd]bDB@bM9R_VMPVdOdj_;AOBDLGEFDECHGCCD8=87c_WTPf46;D?nspeLUZ26::<;?>CEBAJEIKNILJKMOPOIFC@??@@snwF|y{z{DFKNKKIKVcyURONLLMILLMVTT^476544gb``abUNT?-+88,)" (,.,.111+((%(+((*/120//.(++54412         !!+%%)## $/*)&'+(5309KOeXVKB[`bs^`UrHTI^``f76FNLqpi}uW|~kkysiT95`VHLiij443($$..,%)(%'7C#'#$B?V?D3-!!30 ;V[yqH\DWAGB3F]QF9*B0*:5/&#!"-87@p718QVhtHe.#(#($%5:999%$3  !#,# -C  /R4,%E:Cmy9 + +  + + +    "0/*!   + +  +  + 0""    +     SjwfH M H 8:  1_*&)(3KYdQ*48>3+('/MI^OEMOE;)(2,!#1/Ig="&  +   &Vt{X70+07;(.AH3##A#!#  55#&'$#$    +):    4# +# +""51%/+$%6#**7.$8/  )4"% ',AK36416-/%%.,2##)+143,&E1&-:33(,.71 -2'7W;csMb=?M^RjuK>CIW<^cIMJ:[mQSVN[N~M?Sd[\QNOQWPKQ_OHKY]f^MPFMcL^CS{\bP__YbWJ]8>LHIYdHB;?GZtvB;DL`tty~]sfywFUBxNUZU[_]RBHOJDsVg\MXYazw{rMvetuliXPVek[hQ[\]8R[\[lnoy~]xlerqiyk\dcvn]eKYNURa_d`_s^eakKEWuwt[vZaXTNa=;J?E>=AARrszᨠؿ§уs|s|kwoi?Kb}wȠsacmwi}aedffo^uf{kw¾ͪ߁ssҶhՀv聐mbY`YVXcs{mg[}][`OX3-(%@'?6IaIWn}ox]Z񠋋oyoewA9,EPWg7'&*!7H92'&.62*-*.%)'/8?>5072+.687,$$&#" C>4OD?:#),7.,/7:,---(GA@><89ATT>@IKBB<#:B4D?8;;:>SDN;Hl]5,4DA>637329A*9-C%/A@.?=OE9*.$<+=M_>8b<7U`DE/>45/)5(*,%7))-7/35%)1&%!&10 $*7/K4:-445@85.(@V-9/557Fgkd]m@`ZemweYVolVLLnsnmkZ^]]dmgijdY\puu{Cu~{lkjkԽŸতmbkuukg`dk]VRMNUao^]YO+'IFHMNRVKAFLO%BA>:BICD<8<::>B:17>7ma2E<:>>D((''++)(%#,(%&AA)+c^ildVML}PIHCzklrRTb9aPOY`bk[+6<6*.* """!!"$##$'$$%*$*3$;/SU2$%"$'2"(05%65/6</$)"! *$'8-%-3)>B/P+4 +.6(6/,f2>V==QP\61&D" .6=!  9+(.6<2=&#!(  -%0,GMDYEC8AF/,9<-8/2)4GST3T9S-UQ#5?1O 0-(0&+ "%41%,*3,<#J0*85R0-(02/,"0$6+!"5<(+ #$"+-..,&-"+%" !HA-! .0 *$4)(,%&"*-B>Si:M_G2% #&(# '+#  $5%+,)*%&& %"   * *),)*)*))#-,'$% #,$$#&#"$# #%$$!#""$$"!$" '$  !##"#"  !###)#"($'( !" !$"""! &)') (!!$" ()* &'!$ "!! "( $#"##"#!%!%%($ & %"( ""426+8;79. 4+23)537#%#3%*4/)*-6)590 ($! "!!"! !#30+)&4/)'%%!5+"=;>=954627<868<>A>>==A?>>?B@9964:hmj]CHK')..0/239<969=kdpD{wvww|BDGJIHDFFED/,((''(&(*+0-+,/-,+,1*'+Ɓ}{zyz {{{yxxyyyzyxyz{yyzz~||}}~}|{}||~}|{{|{|{|{||}|}}}||{|{|}}||{zzyz{zzz{z{zzzyzyyzz{|{|||{|{~~~~}|{||}}|zyzyxyyy{|||{{zzz{{| +{{{zz{zz{{z{{zzz|}|{|{zzz{zz{z{|{|{|{{|~}{{{|}}z{|}{ +|~~}zz{{zz{ zz{{}~|{}}|wxy zzzyyxxwxyz{z {|}~~~}~}}|{|{||}}||zyz{|{}~~~}~~}~~~}| {{|||}}|{z{|{|{{{|}}|{zz{|{{{|}}}~}|}}}|}~~~~}|{{{||{{|}}}|}|}~}|{|{zz|||{{|{{{|}~~~~~~~}}}~~}~}~}}}~~}~||}}~}~} ~~~||}}~}}}~}~}~}~|}~}||}~}}|}|}|}}}~~}~}|{{zz{{z|z{z{|}~}}|}}|}~}}}~}}|{zzyz{z +{{{z{{zz{{z{z{z{|~~~~}}||{{| +{z{{{|||{{|}|}|}~}~~}|}~}~}~}}}~}~}}}~~~}~~~}~}~}~~~}}}~~~}~}~~~} |||}||}|||}|}|{|}|}|{|}||}}|{|{|{|}|}~}~}|}}| {|}|{}~~}}}~}~}}|||{||}~}~~}}||}|} |}}}~~}}|}|}|||}|}}|}|}|}|||}|}|}|}|}|}|}||}}|{{||{|}|{|{z{{{|}~~~ꀄ +~~}~}|}|||}|}~ oµӃѷ솓DžĀʽ݂ν༬ΞÏՎ͖抚ǯ̟ѹٜ݈꯱􏕞ùܬ䢣Ħ܀І꼵«аȼǷƤɞ줓߹ͺ颙ɑ⼃ܐܲœ˜ٞႾۛΔݰ疧߁ӄއٹؤνضԵ큒čϢ竷ǠȞȠڴ۱י񊮳ͭ⑾ߒɘןՙඏѿէɽɫ噤ؓ񀴁뙉අܦˋԀť˽΂񭞆Џ͂Ɯ铙ŸݕŖׄՃށ܀戴󽚎ʗꈓ҅䆔ކڅƀћꂁ⎃قՖϭ빸߁֌ѣ🶬і鏚߁о끥¯Іφɑɧі{ȅύ܂כɀ˓ɯҁҞȨ穩ҼȿкԲ҂ó℘żΝʈᗊ筬ǫøߏۏ퀈¾띞ƀրñ̠瑩著Ԋƺ򈆈휍߬ˉ׹͵҅􉱴ܢއ󍲻Žǹȸ㝣ҼүЭևʮDzĴƺȿЀ˹î⣾ʾ͊ܵ깬ބ̤Ƃ𜸡Ϧ•ׄлЊ̶֝ꊴฏ᭟񊛮ñ̂儊ԑݽʣ뀈ڷ۹܍ߩ턍ܗᄡ۾̤蒗θ׸嗮琓Ӥ̱ڀ𝶲ûϷ肂҇¸Ѧ莊쏘ݯ꒐ϷȽ¸솆ƹƺɳºѿ¸ؙǿ׳ޔ끊عᓥ㐶ٞ䃬ɹɰ󂄄Ύ퀂ل ǽ`VRMG=8e;>BS[ZabikbZP>;>6;?><96ga_cddf5788:<::;99:;;8589;@AA@@@ABCBDCCCEEDDEFGFEEDCACAEGFEEEFIIIMNHBCCBCBBCCBAABBDFEDCCCDDCDDDEEDD@?@?A?>>?@@@>@CA@AABAEFDDCCECDDD@@CFJSPGHGMFBABFC>J@=h7:fh6aV8k^[:OZeoedIsOpou_^Qon`weqs|Ÿz|]C?S |qh=!smNWHZ`l5AE:LF[z(@D?OIDKGSKbRoORbVfea`8$((&& $IISRNURY`N@ID7U46]T "X:K:]EHrbYCN412:/K[hmc[_`[XljL\QHQ^HEOSQ[OI4(.7tYPZ^Xkm[53&:0-*+)G9@BAFJHND7NI?89B`K BR-5 y^e{tstgM:vkJJmrLvXa{ncRkXBvJE=7rapT>') ' *"D<+0''(JNj=fNUiggw>pXKA+0K*9%&))),8#8124.07@=.4NI:E]\XV/.)&! &*!:CRLB8ELE=NML:`X=GZY66$)'!!) '&&# ! ,PaRNB(A ')2[4"O41$oB)"&A&    >'vR61H`2/?=;N=MUNDagLN)51)<;<~LYa^=;/>JD5%?A3?MMvCD%"-+!,!"",/H'@E8313:\H֡_[x^^lbYfa8389=&($'*950'2!6dNE&+%JUB#2"'-Z//)33?=_Q5U2l61IBU=]P9JLLHIO=P427@14*:C1M'2AH34FY="c~<[=+/7dBx[Lq.`{lPc_@RnKpfbYWINKOZYXibo;>;mb`daTa8\`=LB@?BTOKr7MIEGKD:eRkYVTeqogdxdi|^eoVV_^Obtuhsr]p}}pRXV]_\Ybq^`fWV]VVp\J]mfxgvvvVz[Q```hi\r}lrZfYejVTUfc}MQyXSS]QVS_kYcaSmsYi}k^R`pm_lbgydi{hggV}{pmYrTuw_tsqh^k_jksxSPRqqr|~̺zqʣm_][qobQRav緕{Ԁ˃m{ԭj{Ԩox}s}³лƲWWbY]dmw~|iiUst~h_X^[:]mA["EJUA6o^Zbbuman^Rw{rvq`dnrsggE7]M\ak6423+9F805=;::=KLF"#%+-,)*,+++(=62.//12-/3543278=?A?=< !"!  #'&"#&.6/)EaXa>xurvwWUacUcWHIVixvsm^^gbVS}rLX`LE|UxXeYREEb{OGB@?coxhXNYcmKHBF>US~kvaxB{[tvxcQPNNRVPWTUNW^heHW_b^^y{mXONK>EEQrpmhtcPTX`wjJFOKNTyVXiSOQWUTRX,9OODIGv?UQ8@BTSONzqbnQGVPie?=WmmcgakyBvI[`[d`CeYlpEGMUn\vrtqhNUmMvXYLZz{jeVV]^`^\R~{eoty|eig`k~lru~sxrѪef|oQMHxyvȷcɽxccjqqpsnfeYY[Z[_od``he_aaabaaXVRXbaacc`T`aWZXNPRSVXWSj]GGbcKHLTYh:;:8,7>:365652\44moovytkdZgaTR[TFMeu{oqexjxCKQRMIBH')*+,//,-,*&++&#&%$$!!(+ %**/056676445265/5;M~k\[QjXoZxiSP<~]dcɩT@9]::wWvXMexVltkvaa7.:79Xau]|uh]XvNKkWOP_b_e^fgPHBoZQ]ulRsfNSWH~JWLTTNA@ICEC?G>6WOkqm3_EF0`k55>:0CH;J5+77<7MchOE73MB6<7]7>EA>=?<<::864691788343WJI?_US1040W^2/1_QOG406<=55<;6:=?AFB<<>IMQF-&*A=<8331;;4*;==816953M69A>569-0*-136-//37345070/^Y[0/031241@OUO[^ZQVT530[/683+LKW)9j^JAPBKG]VO1.A/`25244024X'B7BNPIN/.15576566443.///.+R.TQQRPR,URLHNTJPKKTVKD;87XPLNMMLMQRMNLHFCIKIJJQRQJPLBCID<0O8e?355/*),DHIHJNXQQML[T/0./]WKKU./TT///XS/36@=31./OXRND=IPFJHE@B<:878EKIJ@JE@A??;?NL:b6694=A@?@T7]__Yd^]b^WWa5:bgYEY;E]NKc]4LVBG_Q\ML^X[ai4BACFHNHIIFHEGKFAD>9jV]UW^V_P(BF>fXQIMJBB>cf6L<>A??=DD@?CFJLLNNNPORRiRPTX..-TOH3Pct=?gYFNZ9769<<=AC?CFFILJMJIKOQQMJCC?@B@yvw|z}zADHKHLMLOIdBXSKKSRKMNQVSSYg766455dadfZTPM,+,*#5"+-+/2661-)&*($127410,* "&4101101 % ! #*(!!!% ""& 2..-'1-.&.;MEG/G,IOJn^RWF`uPVJ`MV^ogW21 QDoF FIr+A8Cgj?L.3dj60fBd64-;;982B3/;0/796A;3"9-(*OEN)2a]wBA2 &"4(/,+030J4.#2, +-")$ !$%$' + &"<$$ 7#T7*$95SPL# + + + +  +  +"D?21P   +   +   + +  +  +!&     +    ' ;LC@! + < 7gK,Bn"*.*)3,7?1(8@-+%'4wHLRK/'&-#$#'1:k$ + + 9<ɏkq 2#3GKC@RDM[]c^BHL;[;?81crcAOMFSM>OUYNR7;;A?;:@J<>@57;W66FatiZ>V-l>e?^[c;<8COCnIFof:_N|XGR~bxtvcuXGh:ohjMb}T`>KEaQ}ZrBLdUUTbiiBtx~oydRs^unnS]s;@%HC?GG83$&..M)/-OI%#,MJ@GPS;GeIF?:5E:`7R>C0399@][Q7?K1,X4L0;4400@M4-)+-BHOB:5>BB/)$&"K51E@IK9K,M3@?D7++().1-0.0)+,00 %$ 061)')*"'',?<<9C;.W56?Ib8.-4016I6;G4/065327$46-22T,71!((9:66TQAL<3:;EB*'8D?4;3590"$&-,;?QRh-+,-=-932;2*-2.9FS/E46/55<;:993]QR^^PJSCggkT[]b\_rr`U~~PMGO|jbhg\beT[^e^dd¥aaoz~JI~D{zpooøǵ^ĸvcbgmkhkf_ZONPRV[dWROQKDDDGLLKED?@HHFFDA;EC<>=5569?AB@K=2e7FJ;<@DGP+,+()/,$(&&$#C''UUSZ^ZRLFNF<;A;2:hM[nZRZQeY^12682-$%! !"""$!#""$'0(%'+$,&MNM5.6/,)<;;*,+D( ZCFB% *$/%/**#P#E8 -S1=6?TJJWJQE;}L*M  2 ".'$8@+7E% E-%2,57 %%8<:8kJOL]P9oZUCbJWWNaU3$%>-( #)07HOB4FAUH9JC8@B0<0@21<8<83;1,KBW_Z$J/.KS)*;-=&!+.".%%&+'6PT=5%";4*0,H2?:%+C>+3.'"&! '-'5. "!  +4%!$"4(*&;+"D (, SQIRmH0+'.$-%  ! (! 1'')+-&$!$(())')$+,-@(*%)"!'1*#&$ .%! +%#" "#!#$#"#$"!#%# !%%'#!"!! !#$""!  #$&$'& !# &-!%&&$%$+$$#!*%+(!"&(%'$"'$!" !!!$#1 &$!#"! +.*.'''#$" #  !  ""!$"+!&#&$/13/73164/.526/$/#0((61+/$0+4*+60337! ""&"##"$!!$"!$!7*0*+/*/'1+($'$#&%87!1'*,575<<:8==6137;9:<>9<;>@ :87*J^m:=bS?BH+*)+,-07:5588?BCFGGHMLMHFAA=>@?t3qtxuzwz{?BEGEIJIIDM*G-*&%**')*+0-+,.-+-1,*( |{z{yzy%{{{zzz{~}||}}|{}~{|}~~~|{|{}}}|{{|||}||zzzyz{{{zzz{{z{z yyyzzyyyzzz{|{{|{|~~}}}|{|{||}}zyz yyxyy{||{{zz{|{{zz{ zzz{zzzyyz|{|}||{{|{z{|{z{|{|{|~|z{}~{|{|~{|~~{z{z{{}~~|{|}}|yxwxyzyyyxyz{z{|}~}|{||{{|{{||}}||z{zy zz{z{{}|{{{|{|}~~~~}}~~~~~~~~}}|}|}|||{|||{{z{|{|}~~}}| {{zz{{{||}}|{|}}}~ ~}{{zzz{|||}~}}| {|||}}}~~~}}}|{||{}|{||~~~~ ~~}~~~~~~}~||}}~~~~}}~~ ~~~}~~~~~||}~ +}~~~~~~~|}~|}~~}}~~~~~}||}}}~~}}|}}}~}~~~~~~~~}}}{zzz{z{|||{z{z{z{||{|} |||}|}}}|{{|}|||}|||}|||}}|{zzzyz{z{z{{z{||z{z{|}~~}~}||{{| {z{{{|||{{|{|}|}|}~}~}~~} |}}}||}}}|}}~}}}~ +}}}~~~}~~~}~}~ +~~~~~~~~}~}~}~}~}}~~~}~~~~}~}|||}}|{|}}||}|{|{|{|{|}|}}|{|{|}~}~~}~}| {{||}}~~~}~}~}}|z{}}}~}}~}~~}}|}|}|}|}|}|}|}|}}||}|||}|}|}|}}|||}|}|}|}|}|||}}}|{||{|}|}|{z{{z{z{|}~~~~ ~~~}~}|||}}|}|}}|} ݖ瑷ص݃쿁ƻܰ卌̸ܰ膒傀ޱځץ̧ѥÇ̞ڣ顡ۆٴϷŽΒܙֶѼʖґᘔַͤ־ոĻ̉Øŀ˃΋ȲŤ؟էТӖؽНѳҳڝᩗفƢȍȼӌ׿ߎߊٱ󯣟馻ޥ򠅂ڳԝǀ‘ƞـ֜Ƃˬٰ钵؋ƒ҈ݏڐάϨɕ֩ܞʣ흫肭ޢɢ⃔і뜫耫⣹Ӭ·ҷɤ׋ʂ뵮ņиك␰ڀ鍕໱àӲɸмѥЖˣެ똕İȀᐤ͂ԦdžǴ咹۔ϵۈԬؚԙ▨Эٮϭҿ۰󖣏‹պԎȡǑŚ󹧓ݸԩς٠аڈ͐Уꞥֆܯ硝ȕƸɿȄӋƽµꯅʳķ¼ų޿ـՖה􈥡ƺż綛人ܮͤσߠԸDzʽ׷Ԏ¥ѳœ섓ʓϑǾ߃…܊̇ѡҒÛ黛ŏٹ϶˳ӱ̢ԿǺȽ­ı̥ﴘځԹ툏Äσۭڑɝ߃фӫؼ̳Ř圃Òެ˿͡Ҁи؀ƧʊੱÑ󂛒ʁ˹Ȅ莍ºحڮ蔌ىݸꀙ҆љ漲Ν̻ܴŴЬ룭ˑڜΓԂԴȺԽ㐂⣭毅ځַЀɘﻠ¿׽óɾɶƭҀʷٽ޲ѮЉѽ׳ѹբпsLTUf=8]:OJZXWZcbmheaQRR[a6?<7he]_XGH\69<;8::85e]aed549775;;:<868:;TC/64.2@CBAA>@CCBCBBB@@BEEEFEEDEEDDEFFGEBDDBFHGHLLOOLGDCCBBABDECFGEFFAADFGEEECAA?>>===@@ABA@=BFDABDFGHIDDBBCGGHDACHNQYNGGLJFCCCJD@AA=<:<5565n8[rO4CodZKtZYo\}vr`YV\h{}̉bYZokX)l_D2G?6lfD#g0trn f2-7~\roZ_RD=BDaMjOYbIad[OYUI[4/+)&"$ 6/0ACFKNVB77<[f#=53)40]@FWgUPUMCyG8rv]sgddatKvGT?P\~Y\OSZWJE^ZR_mo%ssRKnYGJTe+$ +"+:+=2.8/ N83+-.>5NiRWRt~GiZBj_M?A:F=,#03=#/*/:9==9D/:7W`e2/5/'** !&D/:>SZRMJ4@A>56<96WB6:3--((%&"  /#*"(! "$#(1%"%":.K&#'! +Ttr5HQL;: + +  ?zT5](0KFLG?i}B:B+/.)1)&'3#D?4/H91GF&D".LJ;[WGA7*")/"'8*=(!&7OH;A0/*;a_bqɌ]xcyMqpYU6GXJfS_kDB>8%@6(>^A"_pIC@?WUMS.!!.(45(?/0:67S +0&$"2-.86<+&"7H8?./ '$&87),U?K,?=(0*8>>]4IdMBG..I[S|UGV]H.86ABRj)4=FGk&R51>9MO2Z"8))*X@Z&L[WtUhuLlX9MPd9o`?Ze`Zc^f\KGcKQMa[chmXRSVW`bm>IIA=@=orscTfBBELGC:<=\[RVgoW{t^rmeb}r^fxkjhidwo{idTniVOWatfR|q\|onoVcgeben~szriY^T[cptfgqlecwN_oczkcrjVrjgzvTW_xW[utVr_`dUv^Z`x{{xoXgnuRf~Rnl{x}|ljo_kSicuyxcnT}wS_udxVpmzswnzw|。uÊ̼н緭БahO_sbuooYyůwx£ژuu׹ۉzsmʤ͑È}wimdW]XScfosv{mjfHxs^RZ[,(DnXA+SXO*2ee]Svs}uexaFfw}z|vfjhsqf]FaYH``p3534-dGm/=>=510686C>@GFC>:&;;;@FFD"#(**'&'+*)+):51--/32..2233259=>!"! "%$#%(-21*'wZnejccvz[XQYKRfqpju}ztuxuzmXlexdE`XkQ}|T]RaVYIrtc_xaKFBGGKLGHIAED=:F8R>=>:;:;79574496042/KBCZPQ^052\Z1610W]PU,3.571<;:;>BBDD@>>5BW2U6 2U@B<32<9;69;78=7::4+.50:>:622/)/154+158;3244.W.^0223423742SMNR[ZZVZY7\Y13983/SBJC<5YUGGAQSPW04-KB6129;8546F?AG,T,2-09778776730.1//-VV,RUWTRU,WYOGNTQOLNTQNA>73.SNLMNMMONLLLHEEEIMGKOMJRP5;4WWTH(23/)+GPCLMETP]VXXZVUVX.U^TOPX0\W.0.0X,74985..2-OWTKFCHKCIIBA@31.68>HDEOHMBMKFCBIGJQN<36C;5:>?3<7CC>MDQKLQnjTG>397BUCBA:T<;D2;LKDVDF8AK@ADFENCKZISDEC:OW4:=>4G0QTZT[W_`egi6dhdnJgB@Y[cJi`O9G=_\`EXTSX`ecK>DGJMLEZFEKKHE>;8hhWP\6[XM1<>D?eZQHNLDgPSVU\wx[XCBGDBA?DR]]YJNPQSQIONUYY,UOIOUen==siiV?VPZ1:;;>CACFFDGPHGJLOSQMGLSQFBE||>vn}~AE&GGJKLOONJLnTIRSRURSQSSNPRm6663546ha\WOc',09+!.'%.,+-216322((&*+33.0+"#+2-133(   !" "!""()-% "%#!%# !1+7*992/?99XWL[U@QHATqWTA|k]n\hVR5 .,IbH%PgRnWSOky6%aa?p_QEQB4-57H6VBLUA]bZJPQCM-)%  #%1%**&'#74ARdG=<7"#)EaMgWFTU76<0(;RP=45WB:8&H:7E%"'//!#BX\SbBZ<88-#$'#*3- 5)'=6)) 1,)# +*    \W2*@0&3SR +   +  +   + , \A$+41  +       +  +      / +        + / +j BY8%1GD.' #J^&#"9771-Ke2&( + ,/$/#"01, -'$>@>4  "FvA\kp{%#+JU"/8!c*!#*:(58$!  +"(7(""%#  +  %    + +'     .)H&&(435 %2 $4 +6" +" !2% )13/*0.4-""3#+&2.46;-)*++/2: ()# #!;>;4,5!"'+'$!04/6DK6PZOB\LH@E[PXQ@LV\^`th\B@@@=KEOI]c]@7SU@D529>K>.HEW>L=L]`xbRByINLn_ELPYMXOgNAF_d?\;AKQJISQJDQE4YCMGZQJVJ7TMLYqccRMi=CsmbRO>_tJCQTtBYIDdHZ`ojrXidLJaCtR}mch=`E\lPccZ;RR^wmVdfUyabhbWkfYlzynɝՍ}^pYikplpRgêhׇ}ɧՙk}wyƿܦэǕvw]TZIRVPTaepquuie_CdSNI$!2J2&[5500[^bX~we{eF{uԻ{wb[@TMC[^o.++-)]F|d(242)%$*,)/-7BC<431//330*!#&$###  M5c`8;+,(MLJ+JI9C3OK@4H>41/0.2333&*!";/.J.C))($+"#039*5!&"*F+1-.,56M\HQRE?9U2-OGRA5-*,//2 (.-895MD5TbB1(/==:8/\VKTSU`RFAaYwe]QLGOVq\WLFierdbbiZXTc`ibkkuicn|FMG{u{xԿÿϿ[\bc¹zdpb]dieigci[[[UUV]ZXUSFDB@EEGD>H>:CFF%":;I<<<524;CJEC=O638CJJ@AFLO+32-($%2+'&&"%%'$$QXfj_^MplHD?89B>4?qr80TXPpQ1"*04%" "##$#$$ "&'$.+&#"/.!761B+<@5>0.K+;N/.&F*7Y*0=%.$!)0!7'?%"#3(JMG>ZN,==04:D;М]%= I!* + !'+A?+5 &5*0!+3)/- + %/WY4C:PqsUH``WON-*?"-55&&!#&#"+49E9R[I3KR5>:@?60:.F31>;94*.2167:;<;6288=??:76DRah:@CCBDCAB@>;6:763[cdcda285468:;75356157;93:>?ABDA?=>?@AA@@AABCDDBCDBBCEEFEEFDA@<:<@DB?@78=BBCDECCDCCBCCAAA@?==>>??AA@@BDEHFEDBCCDDCCDABBCB@A@@CFGHFBCFEGEB@@>>@BB@@@A@ADC@BDIFHGFDEHBBACDDAFKGB@GMGC@>;8g88=;86^^9:hlrvS]=]\ebeR~fhnioj|utvajre^ZmG?McFHGq`pEW[`;glHko&%=uUm#gO^MFEADNH_jYiVc^][CTdNd0*J%# ,+,3K+,.G?,C1!C]E3F7ICgOVZcN]ho]sqGFLJNMMIRTcT_^OQ``bI57;:cQb]VUTas.084#-#'#!@C%4aP5SBKanlj\Qtbmjoo^{ye^UsgOMOua{9ZV[JWHBFYXY4fPIssJ5TNT3!2(<'9"$74RZ[HF-1/53MTHJRG9t42k:B@,*+.8(5?4,<.%*RS]e;?C"8#FZZR4+#&4#I?44=>ELZTC?5%@&,WK,#/P?6F# !!!"", 1"!)(& "%#$'>:& 5C_b n;?lNe!A[GPsJ  mt@, 9ZI):@:1Y<@^7=D7--)*-%"0#"$&*(7Y*S%'%/(*0#2,7?M$9/S5i^yP捦SwxPcu:@.[;4pUVb6-"91*::xOTs\N)*aCBC(1,C1EEE:pjE.?O=v>/-.a882<-81/2:4:A8EECA<<=<;B?@E#$*)*(&&)')'%;10../2400213336<>>A@ !!!!$#"$%+44-'*j[zk_g\pbUPjYPPVMS}wszyzvqrwzZ|jar^te`sNa]XRQUPAhNYJI>CRf^WQ]ZMMGDFGC@=eOIG:?GXXR\Nx]x}{gdrwcTRLJR]czJW^U_YXZ`cmhU@t<{PURZWRO\RsPut{lv__GClgbQHJO)+,-0;;77=ZIDIK`s]_QNPCJEABVVQVbv[gBo]FZ`hoJCiSA0HaFkrLKESR\@H}yznF_\aduwrrjvkICwWccPtn_bvwninkiU^|tWpuw{zrwl|yzvͼbemqh»}agþdd_gekhmkjcba\YYXghcdaa``]\[Y[ZSK[j993^^a[[\]\1574e^\dJRHTgiOQVV^d::8604<;942)S494/hqymf]ORRkoNGA@??N>RGIQLF&*)*,,--10/,*,-)&&&'(*+-/-///(15<<68::88;;:;;95]gZOYScKwr~w|ldu}yu}Z?M7Z2W|ayh~cfA"/yKn|otn]XjSzfcOhZfGN^XcK@Xjga]T>RgYd__vlblhFMS^G>K`OZ=GD65//5+0K7>::AUSi]CC?DQS;G@@o8<;T<-EFI+<3>B^p&p]<]>51N;=.@SAHo!:,>:H:AbGM8>:ieg=2HFSF<=a9lGB628:;<:97765:8333Z\AKUXXW313100342.P/Z13222100179<@>AE@<72698866,,?9PUNRE1+257778956621/.+S,,+-,VMUU,SWSPMPTPKOQTKDA>**OPPLKMNPOMOKGFGIKNLLMGLK?CLG83/AG=J10-8)42;?KISSU^Z/__XUZ[ZRVRWUYYTV-VY0-275435./-,UQRMLEFAA?<;9A9,>=1,BC:B?A=HOI`IB]YOF[54@H@HIB2DL;CN>ED8DMFMVEUDEL@QQ32><1FH36]UYRNb_Uhg^aX7Y9aRV\VeeZW`cDOXS?UPOH_XfD>@ECFFOTCDMLIG?9ke7eYQ_SSDGK*CE8`SEXTKBheZVVb~i`=K>DFD>[Pp:d/HPJJQNKNGOVYX+PKWjss=A>xvmh^G25;;:=@CEEFDDJNLJILMQQMGGMRPOGFCF~|}?DEEDEGJKNPQMaHARJQX[TQRSPNO[69:63355e_^V'(**.0C%*-,22.+-.0334-+-,02*-/.1/,0100- +5  !  !" !#!!$"0)+046:)) .6KF@*OHh[\PHUSZ]|_iBYzTSh^NI[csYgWzo^XFFT.+>>+/ M_CC24>C"IjO(DL_ xL9P[@MF@;88:3IZH\Na^_W:NZ;M% 4!$ %!4+5.*8LHogCD=H8-(#!A3BJL=KNYHTD /-),2.17J=IJ9>RPP.% +&DD CM0*4B "" +(  , ! #"+$ ,$ +5$"' + LHT!>A+FOH  +   8  +         L  +   +    + +    + +  !+A>J!!H/Ui7 +:>Ib5>J# .8.$L95W.03+"  +   % (3 /;"  +  #:OW0wp|pM=C &ED^6LC#2!A/-0  $9;# ""$     + %&$#  !""(C,3@4! 2! #?7!!F # 8. +    $  '/@,.-0+)((.(,(+-0-..$ /.12./30+#!1!$.93O9>9;;@IE=?DC9;?JWV\5>E=;6:6/2574.0E@KVUDHXLMMXUNVYH@D?q@L=c?14@7,-=HNJh\/-67BA7OU]bj7bnfADQRC8EDAk>]MjBHFtI~=OYBwrvsaVjOI>IW^`pfqURWbHlzaxaKCUdjtT}OX{p^PJKUaLEVlqvLEwvJvIlcyky}OnSB2]pRb_sQ~Nu]RoEXsHrk}guZoM]yaawx˄ԫ䗗jtđpʗφɿwv}|nV^oruvT^a~ú޸njթturvyļ׀崚rlpjrd^|UzVb{ZOHMPdakkmfccZu{ƿOG9?"#*;>K)&06!SEbSpU~xI`ì鄀zwxya<8TC^acn*%)-/Xgqa+55-$$&.),.*?A?:1321.0-((! "%%#$#   G)C>@@AFPMO@@;::*D1*5=,5-0WU:JH@;8:6&?-5/.*0:E=5-8=9;62//-.,A4++!".78U3;4L][:OFKJ;2,,/##!"&?0,66@I69/.2.1-,,30A;*F>3!259=-2.'"$,3%5.&+>2DM10*,., 8?B>)846;HKIMJRF,*J;A>1MVKJCGSUWIWIJVWZH{{ztp{tpI|nfghbemd_]F\afmnjrgry|t|kȳŹſӹ^aglc{\aeb_e_d_d_`XWWSSQR]ZROJGGIFCDDEHC>>="%)&LJMJ3B;BMQCGJGIL--*("'/-'#"=&)%"MTZQKE=rusr{?>mllhSY{=3--,-7+8,.5+$$$ #$###&%#'&%"5$*"&'8-41?>#-*$',# &;<536-'1 8%7,-5> 0&,7A/R$54A + @()>9E:7).%4.-/(Eo=$ $7(*2 >$-@L.$+%'$9#( !5*(-fdidjA>Pc^r>WjhV[M:nmW2P=A,)1$## 6+-),4FDVM7;7@?77Icnm:><:6586dcc465447::9758:9:=;777<>>AB@ACCCAA@ABDAA@A@A?@BCDFFEDDECBCDBB@ACCEC@=?>?BDDDCA?BCBABAA@BDA?@><=A@A??=<;=?<>>?EJIGDCBCBCDFCDDA@??@CEFFDFFGD@A@?@>=@DDDA?==@@BDEIKGEIHFDEEEABB@BEDCABDC>@<988`3:87f_fgf:8@^\cez^Ktgiksps}uowypyxtpk|srBs~Y=[0C?DQI?-NN]pUJIcnOtIoS=yMPXkkiTRH[hYOSf\GHK?14i[`TW\aI[UY3/0+2=S*))/*0)H.a{\pUnQ][yVjlsfi\i]yOw{I\KA~~aaQER@5LCxMEsTTmL07%:D"+&;6fGSsqe@.%9G:8YR/dE6@Q1YE-7.&")!&%*331)4/8"cV+C-*+!'/"4* $,L!;644?^quQ\z||=1O]9\8,6PlI.?13'G=;L!23A;&-#%B.0:<4384F?0O-MrCB88I5AE/6A):(3K9K=79Czw|?fOZmXeV1I_`LK`ZfCEGV^XKJJFEYUYODBMLWP;2>GR^Zbb\1=7c:6YXRUe6545^59>AFJK>KkNV`c{af^lM{ptomdeZYSUSOJZJ\g]OY__akPZNO]OfjROQTTScea]chVi^SX^h]xTRHe{IYQe`vdIUQ[GNnytiZ`Jbquc]VdXi^{^u]R|ssqftyljlfYill}u`Xjot__p_WtalU^`fgcngndtq|e|[eq[PSnar^h_kdPhu|xvu[usrzvp]wixljŅӺќĀĢϧy~ⱱĭ㼚hbiйtlru{{vrwe\abg̼ħ݄zz{}ĐЦnlvib|v~ju}w|uoTy^]VV_]bbl`X\Ou}eWRKOU`=A@ !!!" !$%$$%'-7:3*%lsG9zhhuUK^h]PRNHcZkk{L{`kmwp}uqbcigaGSNIJI?D>`WE[MDMYRKPNOHEDBHMHF@CZ7G_Ee[c[VOSkn_xnjjpitrcSGFYb]}P[WaaWNOO`[g\xuCPDU]VT^^CSVkjr}Vgf_]PR*)*04@JID42>CNIQPqZaSZE{@_nC9_9GaPKm_Z8OYzxBakT^Y^DJKUuWiY^cMnTY\t]vYNYPENNNUqrtproRHXVD`FQRLn}f\_V_azkvj`e^|{pcv|elrnzuuo̜kd~{rƾр;oggltms{nfaadljmmikid^[YZXUac\``d`ab23663i^al;:0\aTd4558<;?9he^Y`WKEdU=@A>MYi:968:;;3LO0;?<52ZUXOJENQN#wrpeehn`~JIGC@<=@GEZFFE6CG@<7UZ[@~XKlHxmZUGjMUNZfOVLcahUbgziphG`:65G:IV<[9M0*9:<76WJaN:M?8QTIWF;cninU;1BO83<41RdJJL_j`jR;/M9ZE/30d1<<7;A6@76624D]D[_?J>H?m[Z^:9:N;B85Z:WJ`R=)7$.4>:7?P@;-?55?=+F<4?EC.:D:4*>^EJJKI@8<>?C667=EC@@=;;;:9888:9526\\MH2@\0a]03102131/V2556784]46:;979<@FA=-0O93.IfYWKN8C@3963677858558456712+,*+1134590Z1::3::VT[V099:77622/01NPY`RUXU4:222Y53,.,KA!IVK7@CJ0*ILXGSNX.Y\[Z/\[XOS[\WWV2/YY0[/231030/.-VTQPOIIEBCB=?C8857)HFGMMICNPOD;IGMN>7454:8`5C@4A?95IDSGRO_GD=U0A:HNH9H99<@9>ODBD=HFK>HEFDand@@ADE}FHILMOTRQRY@_bZ\UTQNNNS`8 +;<:666754c>&(('-+126/4:7,00.333/*'+3/.6!!00/0   !! !!   ..*.20 ,-*Bck=$SCYmsYmIGXiLLR^SQQNL[rs`We]ude'U^CC"TfBHYDE!+e_!6Kj\RRFyWhT/!.8 32P;"L;)-E&G1 +  +  #@0  2Wp?PoqlRFeB'KNL"(52 -8" + 3:"   +     +*>& *' 2" " $!(8-+.!0$* ?")" +   +  !# *& #';"!!*.("##""-(+%!!%$-(#(/.20+ 2/.)+4. %)-N(%,A-/5:N8@[6>*OYkHR]Kgh\K@?7514/,+6(6>6,R5<88?+N3*-60BC556789D@<;?I;JB7=DNF\;6/:I-I50??XK<+1.9,0KQOI=?3_ESTEB8.(5=2*L-'%5,79DC*H8=7@;8?=8]T62.@J-,/S6A=e564+-&;4*8639A7-3055543230..1>#+=+<=?::48]D`F;JC??C?KUM?2'@%4=:E.5-.-'!%)1+3,78$2(**''*+(.BAGTTQXWX7=>7811&+-* (+12<5J591:-T(?<( 3&7+*Q777!-+@;++))#& $'2@7>09A0<-2:E0C/*1,(..,,=BIGGH6-64*<.32.?ND?D?D@SFNFDPNxqjfstntpg[okzbdccYlf^ePX^\lgljg`~lyvsùĪżƺmcdingnze_\_eiggdcc^WURPTPNZVMNLNMOL%&*))VLLU/+#CE:E##$(,,1+NNMDIC;6MB3862765==>|ub^\OU[;_Of83/-+)&&*-5/"##$"! #%&%$(.;'!"!&'0*!)(-"."*"S]:CV;\/*#(*&I*%8 +* F* +6/LWCLZ.>(3,80/"(    &  8/B*27K2.. ,10'&$'>7$4#$9~cyGMIU`KPFYTcQ[eo`wkZ5O*%(/+79+>&. /,,)*K?P=/C51IH:K>3T]]`J1(8A+'2,)IZ>8=Q]RU8'4%D/ N%*'!).!+,*(!$9N8HI2=4:6[GHO10/9-4)'@):/?/ + + ,<.)-4+'*)6!  /"&,. "" .*'$$"1,!!"#   *+!+/-%,# 6-+"!(&%)'#$(,%&(#%! '" #"$*+(%E*%#* !#$"$#%$$!!#"#&""!$"!i##! !! "%'&$%#'%'(% !$$&, '%((*((*+)"%++((')(+%$$#"" !"" #$."  #''&0""& "%##&$"$#"%"# %#!# !"'"%#/1'$.6)0)2-512810(- %'#.-0%+.504,#())1$$""#!'!#!5,3-.((+!"/$#))&$"742++0&,5<>9=90#38:7+743405;B 79Einh8<:@@xmkrdV..,)+/689979@CF?ACFLNIDCADGIGB><==>ABw|zDDEGIJKEB73!13-/-,++)((+* ~|{z{zyyzzzyyyzyzzyzy(z|}}{|{{|}~~}|}~|{}|~|||{|{z{|{|{|{|~}}|{z{z{z{z{|{{|}~~~~~~~~~}||}|||{*||{{{z{zzzyyyxz{{{z{{|||{{zz{{{zzz{{zyyz{{z{}{zzz{|{|{||{{z{{zzz{|{z{|{|{{|||{ +|||{{{z{zz{|{|~~~}}}|~}{{zzzyyxyzz{}~}{zz|~}|zyyxwwxyz {{{zz{zyyzzzyz{{z{|}}~}|{|}}|{yzyz {{|}}|}|}~~~}~}~~~~~}||{|{|}}|{|||}~}}|{|{|}~}}}|}}~}~~~}||}|}}}{{|{{{|||}}}|{| {{}}|}{{|||}~~~~~~~~~~~~~~~}~~~~~~~~~~~~}~~~~~}| }}~~~~}}}~ +}}|{}|{z{{z|}|zz{z{z{z{{{|||{}~}|{z{zzz{z{{z{{z{{z{zz{{|{{z{{|}||}{z|}}|}~}zz{z{|}}}}||{{|{|{|{|}|}|}~}~~}|}}}|}|}~~~}~~~}~}~~~~~~~}~}~~}~}~~~~}||}}|{|{|{|{|{{|{||{|}|}|}|}|}|{|}~}~}|}|}~}|}~}|}|}|}~~}~}|}|}| }|}}|}|}|}|}||{|}|}|}|}}}|}|}|}|{|{{||}|}|||}|}| {||{{|||~~ ~~~~}}~~}}|}|}|}~ ˺愈򃓦 乯بͅ󞰑ŜڔؑԒ̋悜򭝙ټ𮱼̎ՓՑێϻè𐜜³҅ԫ΢ꋷݓƗݍḚ̈ك̐К܈ϓҀ۵߃깛󷏗῾€ϔݸًķЙIJֿ҅IJսĀųׄڤô薭㊥䌒懣ȋμӑ뇄ߍ吞ũѬⵍӅо։ߌܩۂԯȿֲɍ׼剬¾ـ˰񌬔ڽν܏Ԛ؇֋ްμܶҀϸѮ풄怳܈˾߷Հ́唆۠øż¾ϚƱЅ腇б钃ͱ̫䅄ɒǀܘِٴƫȹݴ˵Ƈߺƽعѿ̡ƒށ޻렄φʞσ᝞ԡ؅ʗvryqн{ŴЕ|磴ی‡ͼܼȣΩ𒑧߂ٖƥͽ̶Պ𐖮ȭ镧˼ôͿȱŬ֫ۇªִ͆⏲ƕ齼˰瀔߄ñϘꄃϪ͢ļŹĎВ۔䦪ҽƁϝ—ӯ١ͺ¸ûʵխ͸˺Ղлƙ־Ѽ悊Ľ큎İ˰ݼû־«̛ـښβƒÈĴԍϮڏ©ȳҳ؈فەΉɥ܀ϸݳٱٖĦѱ󿭐ڼثƾķӉӉᓗᷓͧ庹ӻѾDz݀φȺᦞ𶗄·Ө᫠ɯЙԮԝוȴŽȿʩ݋ļڀǖϽ򄸭qށ¿ࢫĹ苏_cZQLHNRWaceimkdfdahfhh^WYl855efgc77dc43`]39>BED@?>>BCA><>?76a3565434478:99:;<;=:999>@@@A@@ADEDCA@@CBCBCCEFGFECBCDAA@@@?@B@??@@BDCBBA"CCCAA@@@>>??>A@?@?@@>>?A===;=?>@BACBBCEDDCBCBBAAA@@BBCDEGD@AAACA>?B@ADB@?@??ACPHEEGHFCEIFBA@??@@@CQPJDKB;<79?B=674][\[UmcTU>fDLg]agwsr{vlq~wmoíaW`K|RtjzImsgL/Vn^Wc'mB;]o\>m`[YlNN[~RSVUzemdXT}PF@dXSGCG2%*%#(8'(.7C6WR=0rI92EGZ\uoPNF@@G;aeleSPSK]^]_fQdrJJJQXZKEUk__]K[jdSB;IR_R[`c\HV04+4$%+E12 )?<*3(Yh{jju{jNYkYtaWY|oWZgN_hgK0FYY@?g[Qlj83A%GJEIg`T_t[H* #@!=3,59HB5ANR:Q8F!6(*E:7.8?*)=7Q<*!+H+!'=+/62 #.%&J,CGC=S9;E;47IC1E0;?JR++&"##$# !#89'"!'$)'+*C$3?U4,&&-"'!()83#'9>[CgA*9-4'=N\ =v=7?;HC5>!"56%KP<9*"?,;);G@53A?1%>D:8;7AC<27FMU43,9X-(12''$;IE@F7Pe-??9*'303EA^dPSg9:.H[:K-X+F@NF9(?*GbHCIN@;H*A;Nx-O@ED506WkQY^ib`ycNmL=>Xb"Sr;QH;DA@GOWUJH>ADMQ_jPPQY_FIH<6RVXMVN1:M8oQZiXl<;587468;<8;Ds?K7hFCLKOYo|bgpq||p`^^cQ]hSzrp\YTQOWfy}pcoi\puavfHe`ajien_lyhfc[vTjTs[QycXX}JUP|XHPJQMHUVQR}Nr_qXLvpr{QQ}zhZc`cYwX`utl|jozljkvcr}vzn{xtwcS~_Z]jRQmsTZ]Z{h|ulgmmuy{vyzu||ә͇s㚋~ćwu̿bxl`Tceitq`yՏvwt{tţvytѓ嚬ډuu|{tt؞cSRV[`dfV]Y|wyϹOLLNUW\5B?TNJZ]@)^?fzv^aqf`fopvx}hĈwljuc7dSl]ilm18;7:fkab@@;6139<7>48FBAAA=::>DCBF$$*,'#"#&((($B6201122*0012124@==AA "" "'&'&&).:<7+%fP?wmuaULUVZOufHRgY}|}ZbZ[Sa]jwy{mD`nKoPHKQMFICGC<>BFMMKMHJ[HmxO[^b[UVXCQDenaY[__pohTH{pAQSgxEYL^eaV_[VXdWn{FRZFZQYMZvwpx{uH~I_WMR,.+,6a;=_B4=IbcNUfZWFOFNDMo[fkR_DTP|uChQSXeet`TX=LEHYuh|jEsgraZBV?FpdQWYVdeM:;AxsxzZMTLQc[mm]bZYzwrtl}}w~ywoqprmqrºwc兂u}оǹļ˻xjksľyhf^`ejdlnicec`a[WUT\ihiddeh5=CB><=9:@<6^Yb9746987BY[cdjbnoJW|\ns|j_rgQWGc]CKHMAQH?BF;Jkp@HRK@J]F]m?xpxaEbK]Cmn^`_gevExjS7D@659P896;75[@J?@;@LXT@KP@JT@:J<./ZBND;>O>7;73LA5?f`>]^>95hVZ+N$ 8T+P3/G3@Wj?aW2>7D9F:fnSP?I84>84<9*CbQ=*'55+DRL$0823/=4%(#@;(N8<=?F;18=;"'*5/@16JF*D.hOA4@HCY7O@7JNIJK><;<;DQMLQQIQ[ZF<4de<9<496=99=B?MENXk[CC3W6TG?MNA;O<=4A<>SODBJIEL?9?LEC:DKDGD>DGUTJYPIF58/JKUMA2_[]=RPV>D5\g`dVjTSEmh;QIPJTPQ>DBJ`Lnd6VZQ)655CEGKJBB<3``4;X[ZXMN.D2HJ:gWWWVSMGD:e[ZQPHf5FHlY:;8>k>'PNCGNIJFDPZ..RMVhvn9>vu}xpuqigbUL.49@DFECHMVTLLKELROIEHKLLLHEFB@??@|}u~GGFJKJJKRYaQ>NK\^VTWRPJRURb99;;;86988`+*'&$)*,022575131/2112-,,52650..,*. ! %  " ()#!%*))*&70(* 3lD#*e^isWSiCEZPHZ[VO}|FKANev`\tRG?>~'`9UFM2FB@a" 5{P74vGU~e,,@RoH/oX;CLhJAKgGLOLk[h`ULsH=1NEC4.. + +  .$!a5".=TXmhLB6.,2"2,''3)'J?, 3?!'8>?2,8WVUG9MRG3!'0+!" * +3#'$ +#5*,$./#&&(%9!"%0'&" & ( +'$(38mzZ= +  +      +  + #%  + + +     + +   " + +       +1 p}UCH* !0/ +#6 !-/>H-E)(=05"$ + *+'&)(  + +  +3XOX78IN?K?.D?BLOdEI=KTLMG?N=S?lTcB9WG:8KJN-R51MW8V+/-S1R/ON+IHNY\V[37ahZ23RJ2J=I\Z91RPfS\h55SSXOBKsLGX7UEL~eSUbeSkjeUXaWTkXaLSZRUN`fkjUmsejPS`WA=bKFFxzeK<>Y^b>dlKPJbaTk^[XTXY`_[`murpjV\jZipjnZnxҁ~eˁ~̀wtſQfXL?IMQUVX|uΉrộꈖвNj؃\x`f]fhvtpiR5ht_HxEJ`[QSZadhbU\V}㇄J?9p|eboc]lԋ顅puzgz2UQr_gln+01.2_g\]<8.%"$+.,4)1B?;882/...+&%$!#($#%#  Fb5+KK>M<70,325V,KG>2&-8GOMQ4L@==>KE(MJ>1/BMQJ+*3KIlOZY]Q2CK1G646=6,.*//+.35543615C2HYL1<>=;69;.6-AE;5777FGF3*B;#12@H*:+385,33+,4-5A*TM+0#2-2(.EKEMW_b^NJ-P/31-2:$&<) '/7.2#)/9647/-"*#A:/-)$)+70,0"-%'5E7LF)E4<7R8&2#)E8&087??1# DGMWPRHR:4<5f7C;GJDNGIlwqkrplpilcstedfddf]bga^_Y\\cafiq`nvs}yv˻ȱǷvffkǼyɻ_`[]dgafgc[[ZZ[USONU_ZWQNRS)043102./2-&CAK*'$%))).3+NN?BQ;<3K:H:>PU[0)&(% "8 ('*/+$A95'%.8FFCz~vpi_V]VZQG*.+*'(#!# !"$%&#"$ "# , ## -"#4(6(2)*A:0B*$,(2$-"-/)" $# 000  $8CHY&4#./'0$!# "&  .',70),&3<2B6,/5+:ON(&1,&%,'&-sxqjp\A\FX=dbO\[bam@owZ<'00,(,>((')$$G7@41.4?IB2@F:CI63C/ &S=E:13A1-1-,F<(1UN5OL+'$K=C5&B9"5)CV3F@2i=AH7:4721SOT4(3-8*4*MV;3")  + + + "(%3N@-!!6@5 ''%5"##'-!"*)( 0""*#/+  ' &"$!"#"#*'!*../-+($'/)(u)('")'&)&&'$ !#$'$$#&$""% ! %'(&a#&$%$#" "#&$##!###! "$##!%"% !#!!  &'%'*+)'(%)*)*++*)$*)(+#" "$$! !"#() 52& #*6. !&$$&'&(%$" $%!  $ !&% )#$ /.4 /,-#0825,9+,#87-&*&,()$ &6'=4)+'  ## !02,/0.%$0+*((&$#"711*+(>&;=J25#=;12524/.6=69Icrk6:mpx~tnryka]VE<$)+1677:?HI@BCB=DIIECGHGFHFCD@>==>xypzCCCDECDDGFB9'+%-.*),+,(+,'+Ɂ||{z{zyzyz{|~}|||}~}}~}}|}|~}}|{{{|||{|{|{|~}}|{|||{{zzzyyz{z{z{ ||{{|{{|~~~$~~~~~~~}~~}|}~~~}|}}|||{{{|{z +yyyz{{{z{{|{{zz{{{zz{{{zzyzz{z{{z{|{|}{z {zzz{{{z{{{||{z{z{|{|{|{|{|}~}|{|{{{zz{{{yxyzz{}~}{{{z|~}{zyyywxyzyxyxxyz{z {{|}|}~~~}|{|||{yz{|~~}}~~~}~~~~~}||{|{|{| {{|||}|}}~}|}| }}}||~~~~~|{|}~}}|}}~}||}}~~~}|{{|}||}}|{|{{{|}|}}|{|}}}~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~|||}}~~~~}~~~~}}}~}}|{{{z{|}{zz{{{z{{{z{{{z{|{}~}}~}~}|}|}}|{{||{z{{{z{{z{z{{z{ zz{{}|}}}{z{{| }{z{}}|}}}{zz{z{|} }}|{|{|{|{|}|}|}~}~~}|}|}|}~}~}~~~~~~~~~~}~~}~}}~}~~~}~}||}}|{||{{|{|{{|||{|{ +||{{{||{{{|}|}|}|}|{|}~}}~~}~}|}}|}}|}|}~} ~~}}}||}}~}~}~}|||}}|}|}|}|}~~~}}|}|}|}||}|}|}|}|}||}|}|}|}|{|}||}|{{||~~~~}}}~}~~}}|}|}|}~ Ưļא񳋅ƾтÕ״ڹޯĐģֈ낐ΪᶥΉ򍎋ܖ󌵔渄¯ώ༞ƏЭ찲֒ɺDZ޲ۀւ먺羆ֵͨ؀걔ɱĵ҃瀹ԏ茐ӭnj󓸝׬ԑឮ˿܆ݤׅ䴢ꦦ၉熙њꇓ඙ѵδÜƐᏵ␋Ӧƪ׍ᵳʐ̞괿Ϻҟ̀׍țұɭۚේϗσʼ肏၄έƭŮâΙՅڵيȸΨ߷✘摘ҧٯߋų쯩ڍ߷ܾ¢̪ӆ˻ʠռ􅄅ě㰋˯ƾᲁ񉴙ř߅׽׫Ӳʦ㱖ӫ靦ŀƺº˸}ޯְվť‰ƴҡyvrm€x|t~·ֈ∃刏“챇Ÿ주؅剡ɬŤܢퟓρد뙫Ӿ򁆉ɼ򱘝҂π堣兆Ԕ˱ϿķƸ⇒ػஓ¿ި͔҃ص勴ȺٹߦߜԪޑлӽ½򂓀ؼ̵قﺥ澹տϻڋ␠Ͷ®تۦͽ쪔Ӂ᡽ᆇڅ꥝栫ȸƬȗ窠򌘔ՄڡİLj妮쀎ۺҩᲾ׿㦉ւݸΝަƨൎɈ嶉忲ԁ½۰邭폏ނव烰ț讞ҁĤôƻ̇׾¾ꀀÓªəҳºиխⰿײܞ膂؄ߏƶ򄹳Ğøн쇃焭〃甞Ĺثʿ\97dYPHTW\_cjnkh7kbefkklc]Z_i6m_`l98755542b7?@DEB@DB?ACC@CH=:83877643f678:;===><<<::@@@ACEDCCBCCBAABCAA@=>??>=<>85:?=>??84\^ZQU}{F-9zUJLsSizfhhql\nplug:YE? eUYZ;+`qwul~aAb}fq]3lwVutGQ^m`iQIEfvjj`uZI;JIS29, & 2A"$5<$UP[P*>B>,4=AA5`Uab3"""#$9#3)-V'C@H:C@E02 &2:7+/FN1=1E?'0-&#"38'+<)+0%'1,%< B46,3E]D:=.QL64Q0FNL7W>pa8?AC'7B6812DSNL #$%% #">&*$-*)+$#$& $"*!"6@A8CL/14E&.W*`J)1%)AO8)R$+732[C[/C3UUn>%;@:2tYBJNTPOI<9;AFOJVOSSXMMPV@\K]aQOK`Xo:W\lT`ki844SVW[af_9;?C;wblYQgtbESneehbvyigtsjJVhYYXPSWNPU[QNOU\PUQMZaYuuQRJ]TszLUdO^qJUgfQalPX_UsxMMN^KKGHHLQOKGGRSUPR}[uTTZRYXSMHw|ydU[xp_[WsN_ahyzimx^e|~pbmjzjk_rhytx{piXgpx|t\Xy]lqzulhuebg\ekqtvoirifbiis_hu|utwwdd}zrbbqYU}wٓúwʑ˱Т呈~~zjijn_kjrv~Wbarrqن{xvqʾ~~pxìơkل䉅䅈߾|쏒wӢu~ѳta^JRY\bv]__pp\aKKPSUVY3:28EC@??;;9?DDCD$%((#$'%&++'&B:4/120+,/1/0021;[Wtulwi\fSunKrlnbvA2BGAHCZhsZROS]W^xqqtyprukktrrtzrojehmpuvcn`~yKXɼtzthdckecnbS_`\^][UTXmoimmifBJIGBDE@AGB80[dd52267EQ]ea_W}u^l7IHB;@(**-1//2534///,'+2,-,)**/ "..4519<=.)6.5677::6:.7;978::6=ZwVj\J_^^]Ww[~ZZ*26Gx[}pm|hboNzl("=Cnulg|~v~^N\QmYs~HPZLP`yHCU`Vmuqd]`XXRDytGMJK=JICAA@IwZQSv@DDa8@k;M/fqxm~|`_Za^Kj>WJFHaWMBCeKQaAq@8M?a`387:u@<@89>PUAFSPXY5rEB@+W{MF79N:63[8=KBIRlmQbYL7IO`6J01.`?@R0^L;ZmoKdOzUZSK78Ie;;fV8=J#&(%!1;AE07EDB)2)55;&>D" )'3, #G?  BD(=7A@KP&=;T>&$)-'K8++:2#GN>BJJC;;5=-'>LLJIC7<@;;CB>3:@FGA>><:8852/45`TP`:Q4a2^21]1223222677634304A91/01487:;=940101`2F\3E*>720[4<94/420,.W2.WUIKSIZR3265789.99863RT255798465144-U/3/YQN\W9736/.3+VN.J2(W?C^LKKNQQNNO,>7*[@686QR=)G8,10120271/269::;96550-,KPU--,+USTWVWTTX-WSNRKLPKH;2!)O*S-WOBFDILOPAKHA:@DN@DA=X?B22C'>N/KMJQG2:AGKX[]0\130]RSQJQZWSUWZVMZ1Z[/]12/,/0[,-UPNOPKIGIGAAAEIFKZUPKMBJK5MKLN@OB6qdHQfh>G:f:RZC<;UR`];@AS]`WiPd<7hOl_:S7>5^XTVTOLHD7a[[QE7IXDdgl;7rY7F.QNIGLLNEALY--UJQi<=9'S[9dNpDP~Ub_hHDv3NfbdUjO@4>@G&* + + +  ++,%(98+6'&221 &4)!.)  +*#'#(3*4.G,I5'!!-. !)01 " ' % +&-jY(   O   +    +  +    +  + + +   +  - + + + +  H  + %(- ?!4@ $*>?DBL0@2M' ! + "'<* * +    $&+^J7.7YVVJcDU4@-7->,,+*)2 + )* +) Q  ,-  + * 9  + #'  ("((%83)K  F1  +!7&48( +.   + =  + + +  9&&* #" $%*((& !&#*'*)+$'*./#0/&�*9,2;+176'*+.150%$ D8?3.1/.1D><<6FH7:IHC.8G553-01(,260U.,19/2,(37Q]5GB04/=8PlR[-6?3A[H/:KLb8\GP8775FIP3Y/0>.,(,+V/0.*('..1/1JT8NLE\4Y31*333PR,)USUZWPOJP`eLF+:>@BB+N>;.Qm6111/Bde}UbQ^aFVN6sFA=71,,*.43;:87647630/=9>=7CAB?>=4<8@B@-/2+=:>2LA9J+)1.00,?BAG?:44817IG@,25+80JJO\KFOK]`b_\B9M --,' +/89*4',*9:60<0IB':9@=J# $-+6?NE634;c`jV7[;nkLsuj]]djngif^Z_\ZhvqV]XXUTY^dhk\g\t{|AJszzθu}nij]]cjb_j]LWXVYXWPNO`]WZXRO5<:857:4494(#BKK%"$().1.(E8E'A68=EO?CLORR,,(&2;$&)&$%%@84,')/;HSLLHypylcfp[GK$/*'"" !"#!"! #!!"$$!"C#+# & (0,#.)*,6.-*)O)H  0+,% !,2/ 2/4! ++MVkW9>%"(+4 #,&1+''B.'!1& 198-::1033:]C>Cp[0..D!3&Ugn_tvZ_W\UEby9I@;BZOI?AV:;F4^3.?0FF%$)1i;45,/2FH3=KMSP.g@+QsC:,-?++(G08E23@XW?PD7'5?J!0L.+<F2!>TZ7M>jIGC?,0>Q2/TF/06N4K8K6H; % +  )+&430 "#-+, 0( *1$ )&24$&@+!:& ""!"!" -&$,%0,*2%/!!*(*) "'!)%$$%*&#+$& () !"'&#"#+#%%"$%&)*))&&&&$!#! # !#%$ !""""' &"""%" ##*,,+*&%&"'-*&'(*)$*)+-)$"""##!"$('$#!'"2%('18+- ) "%" )' ##"!#"&%$ "!)%#!#!!#:;(.;8$6 *2".-32 +/2-9(7!7(<1& %!&$# !0+1+/-.*'('&$##311+&!2D7GA7)%#@<74546/-4=:7Jb:;79kltVusqtzv|vlleTF:+1586:CKDAA=?DHHGGDDHIGHEF@<=|v|~yw@B>CEBF??4(+1(/",,**)+',.+.0Á||{z{zyyzyzyzyz}}{|}}}|~}}} |}}}|~}{|{|{|{|}~}}|{{{zzzyz{|~}|{z{|{z{|{{~~~~~}}|||}}|||}}||{{|||{zzz{{zyyz{|{{zz{||{z{z +{{|{{|||{{|{ |}|{{|{{zzz{{z{||{|{z{z{|{|{|{||{{||{|{||{}|||~}{zzyyzz{|}~}|z|{|~|zzzyxyyxxyzyzyx y{{{zz{{|}|}~}|{|{{|zyz{}~~~~~~}}}~~~}~~~}}~|{{|}||{{|{|{|{{{||{||~|}}| +~}|}}}~~~}|}~}|}}}~~}}}|{{|}|}|}}|{|{ ||}}{||}}}~~~~~~~~~~~~~~~~~~~~}}}||}}~}~}}}{{z{}|{z{zz{z{z{|{{||{{|||}}~~}~}}~~}~~~~}}||}|{{||{z{{zzz{{|{zzz{{z{{{z{|{z{|{{{|}}|}}}|}}~|z{z{|} ~}|{}|{|{|{|{|}|}|}~}~ ~}}}|}|||}|}||}|||}}}|}}}|}~~~}~}~}~~~~}~~}~}}~~}~}}~~~~}~~~}}}~}|}}}|{|}}|||{|{|{|{{||{|}|}|}}}|}|}|{|}~}~}|}|}~}~}|}~~}~~~}~}}}|}|}|} |}||}}|||}}|}|}| +}}}|}~}~~}|}| }}}|}}|||}|}|}|}|}|}}}|{|}|}}||}}}|}|}|}|}|}|{|}||}|}|{|} ~~ + ~ ~}}}~}~~}}||}|}|}~~~ 򀄃ؑᤖ֦󍃾ٜˮɢձج٫ȦďƸḲԇ䡫˪ၣǬ˯ɤڧӞ̩෡慄ع揽ĩİȞš짺ɽճܧȖѣؑ鮑ѷѹʹѕ׳؄ȧئզ؈쳣׬அە瓭ؿΛڤ齹뱷ۓʋփ떢׫üҎ𴉮Ыҗឱ̰滐۶ŽҞ횣܅‡무Āꆯܴ٢ヱՠ䢷ԫܙڏ߲Է钜ò±ڏۈАɾ빒柊Ė䕷ɵ»ҿĸضӘǷѩֶ̖ۖ擙񴱗ηȿɶڈӒݿǹնŮԊŽпĤߙ灓ϥĵΫԋ܏튝Œ戆ҋvlavkyߎˏπꉜ̣ˣ͌펜ɦҌӖݳׄ꼸ռõ隭ϹŽō󌪆̀ԍӷޟī肍۵߀ىטѺĿѱʯü´薄ׄǵ펡怂͛ƕмʾŶوÃ؀ԇރ􆈙٬ٹήÙ倉Ǭ¾Ǒ㘲础вοæ޹ϱ䥀ȰŦެփ媹ЁǭՆڱ߇҂䤳ۿɮߪٍ󅆡ڄ˞ݍĿΡۺ膀膃쨖璋૓üڢ˚ΣΣʿ슗抝㋣ş¨ǁпœ慀負ǵȾќȻž嫌돊˴ɠϘڶdz˹ԝɿ͎Ùɼϋը揔ͫ¼ޖٷĥĻɫdž©텹瀉յɕ˰R:=96cYSYX\]dj8987lffabfgeb\^eljj88478968;5=ACDF??@A@?CA>?CDEFEDCAABAAB@A?A@ADGEB?=>=A@???@BACDEDBCCBABBB@@A??AA=>=><=><===@CCBADEECCCBB@@CEEEC@BB@ABAEEBA?BB@?BCCBFCCE@A@A@@?ADEFHFFGHHGDFF@>AEB>?ABBDBA@;>58:??<:96]W_`yOH06TOxgywloyreg\rr]tksU\j`KeB*b]J1mh}xun8_fgXx-=qqe9QqePwyc^]PMb^X_R8FB?.H5$% #"P)%&"6#W_V^Fsr>79LvYLYQC/+[FdhaX&_QntY@XB@JAJ\XJCKNPNWocRMH&/@O&CER?/3@-G(& 19!*"".:3'!. )itp`WZnc[r|mdMnVjeiJQNZr{l=INWBcpNqE~DJ=+>96H|@lrL&2 !&&#*:81G6hT<1\B5C@A9C9G4%1MC&:!/%<)0!-*="A4&&#(<(XS811QFMS#;*.:6'*L=I[bXD?M28L@1)&+B>;;7.! "!!2',-(0)*#*$(60%!!?EUqB-ppG + +  9.474/6?$6  _bN=W&b,!=367&CR8Az//;52%:H`'*f4/FZB$0:3:QbtFN(0692soEJ;=G.9&!<[eOJN:DIRKG;9fe77BMOIGMSTNB68Ci=QYbJgdpKbO[Zkc{[HUJJVaP}T\W_ML`^NYNTYO^[YYHNQ{SMKYOWWW[[TVQ\EvNNLJJRIDCULUdWS{KQHIpUUaQdOWpjkcMhiRcqYc^Wcq|ZfXO}wwfpgb[Wf{{fO[ra]eb\\slQ\jdQgxm_nx\tgRWkagpqstrqpxz]ip}wrrsPVs~snmuwzĞĤ{˧ϊˉumglyxicsnkgVn|hр|xxqixov}y}Ë݂xܶx|yxvi^YIIQbkbbQyw{nodKMOQSVRU->JY|gk8SvXVzdx\]\`ZwxrwŒ~{emjm\ln}xeSbefdh|4471;=n[`@;752/:2>619:9<@EC$&$(&#&+%"%*(%?81-/10+./0///05;>DG$A;?  !!#'%%')+0995,+EfDr.rWaTttd_^aY^kt`KxN}yzt|dZdw^chup]_IIanLDLLOJA;AAEOONY:UL+(li`eglU\egZ]t]VP^V[YHGDXUK|qkwODeJZhk}iXRJUFgBglY`FIYVwqkzyrSV3)(*6IlPYeJi[HEC]UX]TGvKtE@GBtF|JAMZ=S@qfSwbOF^nfvAEdkX|NZPgE>pRSldQIdEOJ>8PTEV>Cl[`DFEuO>tocfwiMEESIyHzgZ[uMvusibznlqnmxukg_cjqkdsdh}NWUUuʶſrǾj˸yξiecgonjjdg^YUWW[VW^svpFn<>HLKH@BDBB=6bU\`]^^79795l>]Sl<9R8:;`@jaEy?Hl:<>]=FHFPPBod9K:;@ME2>M@7.J?eEWQPpfBE5;RJFIF-;=F<9B@/=($$0A11562&#.>71A4 $##AJ!?7GA)D?KR1/006-O2)(<=0EG3U?R:299(@_6JLHI@A@A=?@B>4:?EF@:==;;:98832151WLZ59?V`a^2425.6011159745655=C)43142754264\.0O\^-;_ZY0h1\007=;;467313U0.YRIZ[UWX63//4313:<:7/QP06672404.150-.22ZLRU[V8:34-,2.SNTE,.XGOYHSSQOKMLTQ-F,VN86.H@=.8,2/.20-276.0399:9976640,,/**+.00UTVVYS^U/WRSQJQJFE6? H+*TXV:4MKOGPNSLME>GICA?CD80ZZVDSN4C;6GFGBGJKMX10Z\_]ZTLRCLRXYTVXXWV\[TWZ[]/X+-/,,-SSVQKLKIDEBBB=0-?KBBPNLKVPUW-+T,X.VD8;[<:=g8_43[FCF:>_SJ6FAEY@93=?7BY:7D@K>4QUGCHLQGLMFEA>IHCDKFFCOOTSILCHD9;YVEBIO5H5ITKQ7KLheYC?@GUScQQYZ]>AbjRch\>L__g67CoYfPG>A?EIJ?:4__i\=dGXM7PBQJA6aXXTRONMH>g[ZWI=V5J>:`n7_9H=ROKJHLNIFJSY.VIPl;?;;soszxz}~zz~}}wmM]=CDFDNXWAFCCMNQKQIEEMMKKIKHB}~yCBEJHLLMMJN?YbZ*G"!-,BEYa]juYN~EFDjOAHCa=)CIB4J+;a;.{|d`EMOX_\GEO7jQ%QS[GEkZH~tXPT<6RzYT[K2=;6&<' / 35-26if3&/DrRIPL4?*. ,+!( )$0?A/#"-42>[Y@:0*5)-4"( '-"$$( *>P1;`U@9&/"$% +2  !  0!X}l6   : +    +  +49$  +    +    "   + +  4 DX) %)?9B8!,A !*?+"HT%(2#%(/T6C( &$ %  /J4I;3:YGAS^??A<6=04$+17/%%0$3  -7 +*1 B + #%  + ,$G   ++ 6(5 $  #)0A'L@#*#0 + +& <'8)#'!#)%$56"&&#"'()%)$&;.$#-%4984831--3.*.*))$3)9"#!%:,56@'L71>(7(0-:O8J3)N0'(49)N6V747++9;06+B-1-7200&+/JFRYXOK.)OPHL(51686::5806&G_U4e42.,0*'%4/4?31ICP,N0OJM(*?LROT/*6-?/Q3HEE=-^FF8D\UCHHEOW^JSC4Y[XENKJDCRd_G:H[LyIKMyvGDWSAvMTMl>tLVOBcQbN}`TABPFO[^XWWYXsngldn}xjtsbNUYa^ZZVT6?^STFTLsy}{Կ`cjvȥ޴Ωϊꛜhb^hwcYSb\YTANbcZzvƔ˳񒊎ʷᆂ|ㅒof_lLLoYIh8MK@^Z8$PPHFQci]aS܉΍oiS:=@EDFDD"-48G:;(UqYVf|]][_^ݒzfpt}o`Ojngeiw.,-'37gXZ9-$ !-)5+&5B>46921,*)(%"!!"%&'),# %5)D E191[KZ^UD;>3220*/9EY=+>I&:994/S0ISX/H2026+7QYjmhMJ{;9HVr>7;850(&-03;<9=(;7CD;59J@;7>7:;,+(U74+E<8DLK0O-?,9=AK?3.*3,9(?=7<*+;6MPSZKDQL]WbU[VF3/,D15?.B>.,*=8;=4+G3M0+2.K";?"*8#,6+"8.($8B7?!-72YP392:)'C3/>:)#."'-$1 "706++)C)$DG==JB.)+93T_-E@;_}DX;>ED29?AIKKCK$ #&'%#'%"8=@:9?>CJGENCoetoc320$$))  "$"!"#$!!!# ""$#"##.$.&13I"$H:N79!# 3 #! ,Gz[6/>& F > (-  /!&#!7L#+54 087'26<82WX>DSUn[H(FL4=&,CYj\ZT[QUZ]c_GCOR4,,LY}?EN1/E@[20E*+.G/RSAs8?X037S2>@BMF:_Y/5.5:B8&1;/*$96]@D8@\N-2)(>;96/%/ >'#0009!;,,FWX71GIF7M9'84TQ;2,('/<_IT?8   $+%2,!"3 ' , '2%!+'&&6;!(;!%##&&!! ! + (")*./+ +%.1 3,08*&+'",,(()$$("&&)#%!%'#&%%$%"#!&&#&"%(*))%*%%#$# $  %%$# "" $ ! (+* )($  #$%&,*+-*)'"%%(-,'*+)**+)&(*-,'$$&" "##!!'$(&$%'#- 00*" !/($ !"',"%'(! #$("$$!"%$ #!!%"%&!#&$ #$)/(+&)660$"#+,7+/31/"28*68.#'425"?/6*$ #-08,0!*"#" /+*''&%$$!6110)%8)<3*87/q'(B=86245325;?;6Je8<:9okr{yzyzuyztvymb@L04664=GD4>;;DFIFMHBCHKHHFFC@|}u?>ADAFDC;+((/,&)+*-+%'+)-/43+ˁ~||{{z +yzyzzzyzyyzyzyyyz{}||}}||}~~~}~~}|~}{{{|{}{|{ |~~~}|{{|{{{z{|{{|}~}{|{z{|{||{~~~|}}~~}}|}|||{ |{{zz{{zzzyzz{|{zzz{||}{z {z{z{{|{{{||}|}|{{zzz{{z{|{z{|{|{ |{{|{{|{{| {{{}}{||}z{|{z{ }}|~|z{{|~|zy zyyzzzyyyxyzyyxxyxxyxxxyxxz{{{zz{||}}|~}|{|||{yz{}|}}~~}~~|}~~}~ ~~~}}~| }|{{{||}}}||{|{|{|{ |{}~}}~}| }}||~~~|}}~}|~~~~}}}|}}}~~~}}}||{|}| }~~}|}|}|||{|~|||} ~~~~~~~~~ ~~~~~~~~~~~}~~~}~}~}~~}}|||{zz}z{{zzz{zz{zz{{z{|{|{{|}}~~}}~}}||}|{{|{z{z{ zz{zzz{{zzz{z{|{{||{ +}}|}}||}~|{z{z{| }}}~~}|{}| +{z{{{|||{{|}|}~}~}}}~~}|}}||}|}|||}~}~}~}~}}~~~~~~~~~~~~}~}~}~}~~}~ ~ ~~~~ }}~~~}}~~~}|}|{{|||}|{|{|{{|{|{|}|}|}|}|}|{|}~}~}~~~}}|}||}||}}~}~}}~}~}}||}|}|}|}|}|}||}}}~~|{|}}|}}|||} |}||}|}}|}|}|}|}|}|{| }}|||}}||}}|}|}|}|}||}|}||}}|}|  ~~}}~~}~}}||}|}|}~ 釵󭜉ͨƏ鰧ƳӾ¿Ʌꖆáյ㚎ζ함՛כààՅٖΒح߮Ķ≜菲˰ӍǼЀѐÄɾ㳕ب衣ԙ޶񴐃୕ӡɁ꛵𦨗ځׄу܄ޚڭɏӀñ߁ލ̖ಲ񑋈ĵص􁂼򨮯ﻕ͎ϸ嚔Ƈɮƶ׹؏ͳπᅔׯ݆ȝƃ쐠ꑽʓݸЃԏ꫕ǿ㜻Ѐ؈짏ˮѽГߠ䒔ϊ⧛ԡ֔Ǡ᳂䯡ijߺʒؽƳƒ۽˲偛򖙵댓±ǿᘸǹ׳θ߸̴͇ȬͲ̵շڰ߶ǃݐᨛᤀζݛ֊u~wɣ̼ꆏ̼Ъ﵅p|ngX[YX^nzx䑒ٌȡ魥څ݊ꀄՈ𨼅Ĉ޿óƹɻህ̀喒ѻɕȿ뇉󓸰ͫѭԶ啨ٮɿԢ޳푦󅠟ͅ㵻座ʿƴ䩑dz˵ʡҀڹջƵ뢅ųր댣򉏈Ǿ􇋇˛󆖩ĴļҌʋŪ⒜йͨ۳ӞՋʘԆ̸ҡ̒ŷں“̯鋄ٳÜӨ㛨钋܃獚񁁠ʂ𑌆Ѹ܁̀΀𙟄Ɋإϸ䝛ٵ܉䎐Ϡ܍Òƙ܅󃋉Ԋǻ”ԯʻᐅޟ¾цʏз;˸匩˰ꓚʲ©м֎񁇪䀵Ωۼ„ٸ끆ݙЀ󥄗ΰɿсںπ٦޼佲;=<:87f_[a]]di8::;97jifchieX[cehf4468;::7;=???FH@::@<9=>???>=;<=>;98898989:=>><===>>@@@ABABAACBBBDCA>@BDCDAA@ABAA@ABEB@>>>=<=>>>5??>@BBDEEDBDCDDDCDDCDCB@?AA?@BDDBADFFC@?>?<@CEDAA@?ABD+B@@BBECCDDBCCCBCA@A@A?A>>>?BBCBACBCFEDDAAADBCEDEEE@<==<;;><88:i][OlJ]y%XQUSjzw}uejk`{{{rȡsoazsGei@`RZvN=usjktDx?t`|lcphJ/`WKrxx>%8<=HcRO_VAH>?6?:&"'5$@1)ojrNK;]CCLohMrJ<>?&?IEdfXkq28\~?DNOHL?@CB@?=8DA35<)*&",3!"%#!%$'"%"!%&)/'64".'ocx587_^  246%$*D3J?:w46sr{!%MO! $&#*-%%%,34(7.;<*70$"$<3>SaD3/\TI80( 5?@)L&1+*$PYB2PV=KT,M8/.+1>4B;9J>F ':GC?(2F01F=B3=@;L=4WyVSOPRHjB;K3GLTGG96jkh59:DOJMOGEOR6=:=ACG&&(**+'&&$!#BF<40-..-.//,89>BF&F;=< #$(-.--19:5**0ODDFUU\nsaUScrYISHGL]DtZaXbSt]id]U}iktvzV{EEKOJHECCBDCDFU38)>OWaacZVRIcahhhRYVXNXeNJKhqnrnGrh^niiskVQAzzSaosa@PR`ugdxq||gvLr[WksMl}i{BUUWXYfH~NseTfllnTI^YSGD]a^SX>?L9VAOAD=r[W]^n_UG:?C}HmjPWy~_{szbgeaahin~ypd`bqc{lt{MeVUZżʿƀmrkktlĻcdegilgmjmhfbXWXTSWjuy}CJIKMOF;;>??<>=>@03787NwSdSU\So]ejy[txn~ffTIT`huwtqm]oVKLUSoP~]wV|{xjijEXg@dHtReVBHzo\pGyQV^_]r|~JM~FOMhbNHKO9C>ElV;DNQjT\[?68gjM=0]A2G=C88">,L'LDM:M);&;3.+'I*P%(%;)153,32&"E4!$ #/';ADIPE=MI0840=EA'A@RL=-<<;9885137aAO372=b`103420700304:727773:C<(5/.65648643TX6S/4D>SZ\/;3468<==71576.4/3YY[^UYWJYVT/2//2239752PK18421///364/-W20TKOPV35453/.2.OOQLJ=@NTNPTRVPLVSS6??4C774HCK?2J1/0131.3442327:;9952342./.+W.-//VYZZ0ZTQZYSQPDTHDC*2'G/-,\O2TSMOMOXQPFCA<=><@BC=4]ID0,U9JO0>@JULDJJRYZXU\URRIJBPRTPTRRRSTXTLTPYXUV,-0,+,,+SPOPMJDEBC<9A>EF=ZPNJFNQGW0-Q/0.2C3a`8ac];9HfJadmhTEG3=X:>:>;<4;AN<9SYRICHOCHHA:ILM7AFJG=AGKZPFIPKL5Q2FFH&,/8.8KZU1MOiYWE2AD:ZJRL8N7?=6Xd[HmjAZe]:d@eVUZ128@DJT8MI23D\C4-72BW=NA=7d\WTOOPNJDl]TRS9Z4YG<==tttr{{}~|~@A@@p8<@EIIS]J=9BKLMOKNLIEMPKMNNPI@zGCDF"GHJNr@uXleg9XUWY[_aOJKHMS_qtkj957:=/,,0--145212653--2220!)     1,+$6'0<)(16UDQTUTRt[B@A?|ryXkIFJgZnZM;:5XGYX>B/BM3G09M-(`WbD?a6iz\"fX)[D[JFbNP-$TQElxx0 *g%CaOOYMF?:0C3NW45?(*,C((*4).2 19 +./+#( C7      % / +@ *, -  %/ *)1(*8&8($!>"7#D%<($,+ J$"  + +   +  ':"'$%+!$:<9#'%&&"#)-#!$%0*',)124/1$&%*01522346*+2!"" 8"#62016?3.)##)&.):,$&BCL[SF;..),99Y0*.(B(4)BK12?>398654.)F&%'-)%%')*(%,.34KZLQ6RTQVN,))10PRUP*('OTK+;>?M8HH4THH;LFT`>[[qDXTT^WQN]P;VYZb_^dX]Q5[SUN\<9UPTRcf\eW^geobQKFWY^Z\LLDY]RS`Z\`klfJ=l]_VYIUJIa[SS[gLPDOYhZYWgra\XqbeqX\ЖsuНxvީڻ㠃؎偗Č_eY^yQR}|~򽔖縯ӣíԐߍ׹ļW`jFr\p39=zf][H}C[>F5CO[bWRz߅qfT=5?DB50'QIG3AKO?(15?KSSZE@MFOOVST]UAQI"+1(+*:E7@4R;98=JAK-3&-3X--S,78A13/411!;)%6?&?J7B &)39;A,G)BF2:=?D0'4/(./0-4""*4(/$'%H62:5;74+"&+]XP(T?=-4HK6^OSGkP^_S`[WY]ZXmec][WPPO`z]Tciwcw{~~FXJJMzɯÀȽhohitڴdcdejigdicb^[[SQSMLQaehm8?>?A@8.35[VTSF@FC?H)-*'(AJ?G@D.Q*@/;1.2:A?=>MM))#"C$&'$!8ENFB>E>A?EEOC;li5321-0 #!"%%#"""#$#"!"0 ':*!4 *+#-%'1+%\+.* -66n// =#!+ 6I@ihfU9G>)$-8)3 =&!% "),.'22!#:5#%)1(53AQ97E"06DjB=L0;+,]M6CWN=LROLs?nh^[1/B04?6C@;cO6?44`B3&4$*)/G[c?3#E/D3(2?B=G7/!('C=-)5/&.+MOJU`H1DD9@+/(/4T<81)B0>>I5/0$+!#'-%-/# /> !1',-2'#3.% &,'!"#$ "#! ".%0,%)%! *-/*++-'**"+('"!%$"$$&""$##%!$&%'%#'&' !!&&*+)(&#''#$$' ("'%"#""&#"/&"*#(!($$#(-,*)-*(' !'(+'*(('''(&!'$*)&&$""! *## $&&! 1011-  4'2385)!#) %&(+'# #'!"$%' #"!"+%!%!!! !%+*'*7.0& 0&-+!* ,72$<:"16037,*.%'##, $ 1-('%%&$#"91,,/"6&G:0*:7/$3<>=97752268@!6ASf9:;mnqp}z{~xv=v{B@@ABBDCN#7(/,0+)***-.&%'%))/8;52遅~|{zyzy +zzzyyzzyyyzyz {zz||~~~~}~~|{||{{{|||{}|{|||{|{ ||~~~}|{|{zzzyz{ +~~}|}~}{|{|{{{|{|{{~~~~}~~~~}|{|{zzyz{{{| {{zzz{|||{zzz{z{|{{||}|{||}}| +{{||{zyz{{z{|{z{|{|||{|{|{|{|}~~} +||~z{{{z{z{|{zz{|||}}|}}|{z{|~|{zyzyxyyyxxyxyz{{{zzz{|}}|}~}|}}}|{{{|||{z{}}}~|}~~~~}|}| {{{||}}}|{ |{||{{{|{|{{|{}||{{{|}}~}}~|{|}|}||}}~~~~}~}||}~}~~~||}}|{|||~~}|{||{|~ ~~~~~~~~~~~~~~~~~~~~~~}}~}|||{}}}{{|}{zz{{{zz{|{z{zz{{||{||{|}~~}~~}~}|}}|{|{z||{{z{z{z{{z{{{|{{|{{}|}{z{z{|} ~~}}{|}||}|{z{{|}|}|}|}~}~}~ }}}||}|}|}}|||}~}~}~}~~~~~~~~~~~}~~}~}~~~}}}~~~}|}|}|{|{|{|}|}|}|}|}|{|}~~~}~}~~~}}|}~~}}~}}~}~}~}}|}|}|}|}|}}|||}|}~~}|{|}|}}|}||}}|}|}|}|} |||}}}|}|}|}|}|}|}||}||}}}||}||}|}|}|}|}}|}|{|}|}}|}~  ~~~  ~~}}}~~} ~~}|||}}}|}}|}}|}|} 􋦅Ӛɮĵ쇇돋똛˟󚨻Ŕ첾וߔǵ¤؛ɨҹ㱩ë߼񤍮ā̯Ƹ愁󠡔󊖽ӇԢƧہțԱƙ䧘Єͩ֠Ȓ񠼇˚˹̬ܸքъۺ݄ޅڋΝҔՕڵɃՁ룑Ҧɀ֍ⴚ듟𬞃߿瞮ۻѧÝ鍡ؽ膉좰˦˫񅿍üǮƮá򣋚Ӈ􄃥ތ젃ᢵ®قǤ߄򴚔ĺԒӲǻ˫˦ȶñͿ󕢀򃎔焁㮙ǃۀԶӶ샇źǾ֟Ԁɽų϶ᔦͻŻ藴ϵztكԩ却򀡾ﻫtbUV_\|tfTWV[طצÍư珧뒐݌ǦҀ򻓲瀊܂طܘ᧔𗍡ËʛݴˀƏϽ򁍎ʺ݃نնµ̔Ěķŭ޽ՒʍϾٰ挾ݞāոƞ¾ɀ򴐍Ȓޖ͆먇ƹ䥻ïij߇۶퉦􌙒ှƼςإ΂λ΂·;ϽüÀɿש嶯ڼ߰߁͒욎򁍛˧Ζоׁ㪇ǽ侫ꩡ݃͜җӭ롒®ո鑅䐘ʤ݇ܘ؁ڻ◎ڭˎ纸Áͦ˷ѿϘѶȻڈ򐠢𘁤ՅꆘߢདྷɷڙŶǺ΀ʵĕž¾̻ɴñƾʱɺȼсبؕ٢ϑͽ˧ူ΄ػɵĿŲذۮסޏ儈΀ȹ$:=@><;:8kimhegj78:<<;875cbc^\`_afh46969<<:;?EA56=??:=@@?>@DB=:AD><>=<>?>>><<;9:<=@A@ABABDCBAABAACDB>=@B@ABCA?@><=>>>???AABBAB<;@AABAABBCBB@AAAB@?>?BDBFB@AEFGGGED@>?AEFED@AAECBADFDBCDCBACB?@@@?>>=<@BADCBBCCCBDCCBAAEC@ABA@>?@<<=?BAFGAEEDFC=JU9+3/1-?5:/'!(63,'%((944:kzyS`OWY^xTzFZTQcZrfo|gsW<2.B}RM^J9N79C=r?X[-+&HsBHMZ/?,*$%%5)+>2NG7<+1U7jK](PC5K5H?N103*,$(.2K%#"DD07J#./873$="#$1$$&.>(A?.<358R9;D[7bDDX[cXR2R-8BL   + + ()"3"L,51(2;5: ]NYn-2?[>"%'#),( /;1,.C.9;1 $_8:_^.[_JLD,%C, *$.&-#':/1*1LOQOaRd`rwml|cjvtmY\ev]RjQDgjSkU:(;3Xg$.ghFAXNIFW@2AO+"F@.213.#315='==BB/(+%UBA4QB>+7=5dD%%-rLH#4 $')*VMH?:;<>@@=??@@@>B\wbFNf4=<@S\OV{y\wumszl][{laV{vr{u[Yp{SOThE_QDAYPrxvohQv}DNY^kh]LUsM_wNicwMXrUTjidHWl_wlcbJ`wqiAABBEONPG 71.-.?H-.&"5.*#9J?$ #9:- @JTSMLF<*("/1A@25>nWSJ7FSF2KJ/J95IKFKNHEBB=:>?=<==:9>@A==;72332MM354SO204442256W63T2884998:<@62+017845712N3-=396TFJA^UW//2/4633+.6-/148;8055732,-..YROOU/8-393/00.TTK?@BMYPJOTTWLRKS@@O=C865_=BNP9+112341035532565;962/652-/..VUUVWTY\ZVUSTRWKDMJKHBD:4AA2/YT;MTFMRQRVNC=DA>7[:DMJJBDEKRQNGORMRI0Y;"T-K@S8@36?;FEea^_O\FBW5]A;V>2AGdebUnWLR]i[:Q?[JUI^98HQ.=3BNG22IXJ2DIT?RE@9bYQIIRNKJA9aUJSIj5ZVA?OV`?eo^5QTQTSPLGHM\/0K@Ub9=@?zvst|z|~AAty~DCy;mHCA>QYBFE@FRBTCe8JS\FS:DjRSyDRZzM,VTQT6LC;ZZIY6&UY2@X=E<*TE==6&"#( +9Q+<#&=Dahl/&4# +''()86A8@?IV[TFHPS]DP]LJ_8^Vkd]V]WEKWP^QYR_5825W33TUVLVKURKDESNXa]fXX`F\@BC?sEXfnieUn_NI_YYi^SSOVEQ]JEb`^ZbUNSNMPQO]\Wz~eiu}ώ򸞅o꠷잵˳|zbawtٻĬƴ֌ۀ´ƹÊt[HOKOLNSMmQXVTL^c`2/-K\YSTyv쁋a\H:;BIL8VSnbav:4Q(C1qeg[;2&"$#&)./++>?17:75.(% "$"#%# $!!"%'!$!!#" + + !'*!28R*MKPE8<;375LRK[E*A>=\;*1Uhdc]UVn9FbML@7;:72023/-0/2327-+-+027@6/+/55049A:75:=6/MIPHB:94DCI(&94595BC=21+3;6DA/:C@89GKSRT;BNEICINJRXGA?,J/5)/:E(6QT6H6DE@;',:MU=XT2UHG'C0 2<0+/9<9*,<)MF,:E0M(,B16+=?ILUJOQ>6.$, ""##$#$$%%$" "+$!$"!)7-.#-'!&,0-$**!0!97&-*"/99,%!#7   ".<8G)4?4"#! '/&(,4 &214'&/$#&,)Cg|mJ3,.BKj_RM?"UN$1-/+IJMHH,EPVCG3(6KV`]_e]PU[0FB>:>C:=T9<@]7A7&0"&*52];.:%;,"%2- '0'"&%JL=F(CRJ9Ca`LU9+3553S28L167/+3D>/*,08-*2$,"-  %$#&%"!.,'! &&$$ 3-(/*>&HC34@64":;%==:;<71.26@ !7:NY48<;tqorz{{}y>;ipHx??p45>>@=livGNJHJJGMEFHHJLLOKHCyy=DEFED@>//#+--*-+//,0-,(&)*1574./遈}|{{{zyyzyyzyzzyzyyyzyz!{~~}~~}{||{|}{|{|||{{|{ |||~~~~}||{{zyz{|~}|{|{|{{{}}}~~~||~~}~}||}|}|{||{}}zzz{|{{{zzyyz{||{{zzz{z{|{{| +{z{|||{|||{||{{z{|{z{|{{|{|{||{||{| }~~~|{{|~{{{z{ zz{{{||{|{z||}~}{}}{|{{|~}{zyyyzy)zzzyyzyyzyxxyxyyxyyz{{zzz{|}}|{}~~~}|||}}|{z{|}|{|}~}||}~}~ +}}|}~|||}}|{||}}|{|}}|{{{| +{}~}||~}}|{}~~|}}|}|~~}||}| }}~~}|{|||~~~}||}~}~|{|{|{{{|||}}}~~~~~~~~~~~~~~~~~~ }|||}||}{|zz{ +z{|||{z{{z{ +|{{zz{{{zz{|{|||}|}||}|}|{|{|{||{z{ zz{||}}{|}|} |}}}|{{zz{z{|} }}}||}|{|{z{{|}|}}|}|}|}~~~}~}~}}|}|}|}|}~}~}~~~~~~}~}}}~}~~~~~ }}}~~~~}}}~~}~}}}~}|}|}}}|{|{||{{|{|{|}|}}}~}}~}}~}|}}}|}||}}}|}|}~}~}}~}|}~}}~}}}~}}}||}~}}}~}|}~}||}}|}|}| }}}~~}||}|{|}}|}||}}|}}|}|}}}|}|}|}}}|}||}|}|}}||}|}|}|}||}|}|}|}|}|||}|}||}}|} ~ ~~~~}~~~}~~}|||}|}}|||}}|}|}|}~ 򃏖ρإʲ㥱اٺ¹跛̹̄Ɗ³Ԁ똧ɾؒ׆Ǧ鮐泑Ǽˑʶٌٺǰވک̂Ȅ̓ɥ剃۲ƺ㑉Ҏո׀в؃ƛ΀¾̤Ϲəѡ܀ʨڽ箰Ёڽޔľڽùǘ޾Ğ褴ƞ̝歴ށ񖢖՗҂ۤ즧˜ēꑆǂĽɨѥѕ߆☟и␇ܚסˡҿ㥓ċâٓӱ팥̭郝КѢ󖯶ɼ⃉珹¹ȷݾܮǾʑⵄƀ󐣠ķ÷ԂۿӼܫдғֿΏᲰՀ݊쳰£¶٨ϧĠһ|ᖘެ̫͸lpג챙ԎݩiQPN\[WTYzkahjZ`vۑ{ʉȖʲթ乱©΀ꁄ跙󂅒󙇌ʤμŐ̰δջЄ߀۸𗣩Ѿŭ̼뒳鳬ꂏ뀁ޅƫԠ캈ǪˀޛɜȚ䰮聨ǁþҒÞ򾅜󹆠磤“₹ΐɼմ߂懙ղǀʉơ󃚧ûǽ÷ꀦ͓ϧ䮋ӫٖ׿̇᧝򆥏ׁ·ӟ̰۲ԼǨ޻왝ኈ񾻷愖כŃª撀ܝ̨ͼԴىЗ狍򐅁؝亀ݵ獜䩍к󅕉´š؇˫۾ʨᝆا产ÿދ擛򀐈䁀ʩޥݪЩ̾瑰þԀǩʙ̼ی׺Ⱥѵ¸낂ڃ衅ɬԿ¾ǵϮܭɍؿŮȼю̭łŮƭͿ›Ťԣ΀񀄉ʧ䈔ϻþE57>?>>=?=;;<<<>@BABAA@CCBABABCCBBB@?BCDDBA?>?@@@BA@@A@A@>@CCBBCFCCBA=>ADBCBBA@@?A?>=ACCDCEEFE=?FE@?AA?CDCBDBBCADDFFDEEBBCB@>@GHCAA?>CHCDGC?>@BBA?@CCKHBB@?>=9=@?<>==;@BAEGA:>E:9><@>`4`bbVU=xXUSXg~}rb\x~xkwrxjs'`l]mmu(GpYzXw}tD5vt_j1YHwQS@*C.&17;&,8,$-&*4NJ=&/@ie[geqe_eHu}4xc~[V/`R}qdWJlRZS62148?M=Afq11(nOFed5$F)(+$(B.9<)',< AD.X6=}G4/5*C7K][pj5IEA?J0.--$="1=26O1G7;4K5*+71<*G7793A:$.2Wl60C5HT/1T<3*.>OHA373D<*/& + %*+(*# &!6;9FIAlHY5HUYB +J   + " 3+^5GQ$2qT.8V4"<0;!)04"K#+!0GE;1/5E1O7,Qtow`2@],&4B"73 !*+(,A-3B,TE>_gcMM_aia|znh^\a^]Uh~}WQ*A"A8#UL-:=g:BIJ>*RRPPPVaiSc(C4Q389"% "#-A/$)GK(BN=D/F@C(DQ/-=11(,0EH:A,Z"?:;LO51O]ckO7;7Y/YrvdfqC>89933.5855B==><::C8^5?StJ\mF7S`]^jNIh[E]W{C[fD^]F|it`DH{wdcYOYSWv>hbZI|NNZF8DDXoVGHDwtkQdqo\NlxQjo{uwnXim}|wjYyho]uyvxl_Re_Sw}t]elmm|yڄ{tutspdgfeoifXcynoeeih^[UYXW^rvsXKPQ_ujvp[NNZQGEFFWWZZ_cABBC__YY^NQN[j8643283gibRHXUOWRY\`eif\9IV*26767966:30.7/-0:;440/001,06.3.*-/+14074=>>>:59<:89?A>@B@?@@AA]dhn_QzUmTVXypju^a_r|^}|anosifNjlqxit^ZTHlOB\GuCFc^\ugYYSP`bnnYnUaOUbh`WMRljLVh_OSDN[\onmldbfhxIEFPLrmJDKMP]lPeLSkASe02^xgE_AxaWRJRL]X]QZG]dT[Y?8NK]u@>o}A9SDLNb>AH7fQgKoIwRS`=W?EDFMGApA7KJNGN277:>0?rAW5:2:=-%>*=G47(/8N80-E=D_SAR[T;a^Mi?A>A=C9E=_Nnn76SN:NBB`BQ_b15+)#E'B8#70.:?995:(.>$)&!$+B!DD)!?GN1KWIC/#0.(IB3<.VQVL=:.M=1J4NS7@CHCKHCD@C:7>;<==;:89@@@>75766334PO7051M^3/6102362341L6855998<;;2056798665246;735,/XZBWO/58635406WW542.00Z148OPTRUX-5203/4990JM/-1245124290.VO..[.RRXZ53UT54.//WVUC7(SY/QPQTVTHWOP23,G1644P6H:'/4202431164312786;86754212-,VW[[SUSYWZXVWTTPMCJPMIJF?R)08/XUQUPRTTOPOA3=CDBHFMNJA2Z@>APKLHF7-ATN@KBD??ORRCHG??KJOGBKITOQHQSX3\U\[WQ//TNTVTW,PRO?KGCVMJDCPDSQLJ.OSU[Y-T.,,1-.1X9/8@44K[K78BIGH937BD9BB<2;1=>BN9F;1=@HQYNALGDEBRE>HYWP?FKGLDPKQPKRKKMOLASSHPACKP>LE=B@XZMQQD\ei_\LOTIMNY[28DXI0;49JABSL;M1.=MGB<3YPDTUMKFA=cYSGVDB\^J23;"#*1:)$3/+%  + 4: 61#*&%2027263&$: $" !6*2-0)'.$)1,-177/4,..=;(+2/.!(!8V:OJ*/5%(",*)./&"-9;IP?."!!&-+$,:<::PM8,K22?%<<=-G=+F(#)+/*7@646A:5=:PAE)//0,=LNURK3aWMMAPUQCK.N=AB;FKEEA@\__SP095/TNY>BED95?=.7B/U`8l<=nk^SC76I>IGOGNOHGWWHd]JWbQR8bSR]SSJKNcSSYiGS[jdj_m]jcuMb_cd]xDR[eTOLlsmdd{ii^`nXjk`q߻޳܄󫀧߄ܠӏsv˭ԻՒجѵŔdžtgoTT]JkdrhXEp?K.2EUM}khtB=CKC:86**(2/+(+RNOFuxc[sjtwصĢoiB3I_n_f=71J&Llwijn:.&%&$(&-/,2?:89853,%#"!"  ""'#$" ""$%!"  + + + )0&02;INC@955/836255ACDCD@E*)-/"'((,3D0@(IX8@SH>:HSRVW_EreG:=?=<:868442/37H)0.SV.6B57S0WS1*7>;<8>D\]K9BB6431%@B?@<'&438;:Q;+;3:-$.E:8=9>HFHRQV9Q*/@?'.!(D1:5/'+4(NGQ,1&<#'.D'7?(.944Q=)%83YO86M*8?'07,PJF8)+ECMJ43H'+6.1H%<73.Q^114'/%'),QK9&,77&-7#&(5%$.&%T?KTKnYbkY_[_XSI]lPNO?Wbbf_XxzDSLB{{liILg]jn}|ہwpnrso_baaldaXcsiia_a_UTPRSSYjmdFEIJOOPF)27 !"!"  #!""!!$$"#%%$$%$".!&C( 4 $- "3,0+#'+&7++ ,0#1-:0F<-* *9s8$!'>I!!I(%:;  "$=N+'#-AFL{S^HK@D\;IX&"5YK.7!45H>HEQLV?MWINC/*58Qg9;kx;4M=FGP,$6)SEZ?a@jFIR3G289=FAa`.*AFB??>}v|EOLKELKHJFEGMKJFLKCE@;>DFFC@;837'+//+.+-..-/)+*+*-195/1}|{{{zyzyyyzyyyzyz&yyyzz{~~~}~~~|~~~}|||{|~}{|{|{ |||~~~~}|{{zyz{|}~~{|||{{{|{|{|{ |{{{|{|}}~~}}~~~}}}~|}~~|{| {{{|~~|{zz{|{z{z{{z{z{|{||}|{{z{|||{|||{z{zz{{zzz{|{||{|{|{|{||{{{z{zyyz{|{}}}~|{|~}{zyzyyyzyyyzy"xxyyxyxyyzz{zzz{}}}{|~~~}}|||}}|||{zyzz{{z{z{}~}~}}}{|}}}||}|~}~~ +}|~~||~~| }|||}|}|{|{||}}{{{||{|}||}}|}~}||{|{{|}~| }}~~~}|}|}|}~}|||~~~}}||{|}}||{|{|||~ + ~ ~~~~~~}~~~~~~~~~~~~}~}}}|{{{z|||{z{z{ |||}}}|||{{|}|{|{|}|{{z{ +z{||}{{{|}| }~}}|{zzz{{z{|} ~}}}||}|{|{|{|}|}}}|}|}~}}~}~~}|}|}~~~~~~~~~~~~~ }~}}}~~~}~ ~~~~~}}~~~~}~}~}}~~}|}| {{{||}}||{{|{|||{{{|{|{|||{{|||{{{|}~}~}~~~}|}|}~}~}}}~}|}}~~}~~}||}}}|} ~~}~}~}}}~~~}|{|}|}| {|||}||}}}~}~}|}|}}||}|}||{|}|}|}}}||}|}|}|}|}}}||}|}|}}|}|}|}|}||}|} |}}||}}|||}|̀~~~~}~}~~}|}|}|}|}~ ׶Ǫ忩ҷ摠؍ËÃ⎊؅ᣖ懪֗øБƎѵµӻڻʔ봨㑟ӹՋǼ᧫Һݍ֢͛쁗󾢢ѷƚʑ˄ρ̈֎׾ܚ禾¬ԧ‚݁ݭ򅆇ºͶِ煢֧ۋТ˾߆̨֧ŖߞلǔŇѬ޹ӥИιӂͥ֍ԕ躡΀ܘ÷ǜ׌õအʝԩڸޱƖ´߳ѪՑ‡ԁٴԹɃԖ쭣Ƕدѱƞ䕞ޣԁ쀍ǵ ෎âɉǪ͝እ߅ֻ́Ҍijﯶџٷޘ҂ǽʸ漬րɶԱܔП؍ˉǦЍţʽɾŞsrɴzĨ̌zǦoݲڧՁ෋th_ZM\UxugMJRVYs|oŏ~ݦŌݷĦ{zܧДʬʣ݉卐ʢ͢۷λ­؈耂ʼہȸϖ͹ʹἃ󹉊ꃍ朔ĚѾ뮉ϿǠ܉瀅˛π˞خջơ豯ͥʵð爭㬫¾µ򏩬ҵꔨĪŲƿ즃ԚהθþżȻƻހݯ󉦾˼ꠀƱ٬܉²ԭҀ̂±Ѧ脔ξðӭ̵̋é⁆遑̬ڕɆ䷔ه摧ř󏌇މ菢î΃ȨސƩб퐘υ냜Ԁ܎ϡ؀ߐȭĽƹǀεҸʽ샇ƦĦŲõŞ·˴袮оƠ壬亷ӸͮЌОŴ쑠̹ǹŽƴӋ庩זツ儊򂇅򍝒žUag=@B@=>:65iihhmm8889:;;=8bSfb^ih`_eh;<::99:;::;=?@@BDGBDCBA?>?=9:<=?><>=>A@@=998:;<<;L???BGKMNKGDCA?>>?BBAACBBABCEDC@>A@@ADFFEB@?@@AEBBAACA@@>>A@>ABA?@@?@AA@@CDCA@BCBDDFD>?@@>??>?CDDDB@CGFFFDFCDDEEDBAC@@BBEJ@?A??EECBCB@@BDBA?>=?FHA?=>@C@@=;9:3b`Z`]`Maeo$SR|hsr[wmYbpubno`TWlvuSZ6cL0K_9[W/U`?9?,Iq}uqpxv$[JGHA..*-#714+145%/7%()6+.+^^omvlzdi~}d`kk]fAZy}~cgXT.yXTEY4XP`?LLn^dVbA`el\L:K,-3 &*8/*+ERM3N8[V{]DsYTuh`7=C94'0/0)?3.-A&!815/0DGFB1%7$C"),1' 3,08?F'356U,EY+7A(D.)+-DKC;@7B,)%! %.,,#2*#!&/V4/6CO8\R\eCL"[    >Yjh_V4,B,)d0"#%%1 9$$#;=XA"˙:7?GegE]3CO)&&ODD&&:/600>@36JRnWmJtcwxlo]Ng_gV^d:'B';8B_=)D9Z.BDC+QA=vQJTkYv,AW#":5Y;m2$$%2(,4-@M! -6J8:&B4/#(L=02O4071/Cvc?JL,383L>785'):('7I,571A7CRFD2c1//@FH.S7He%G;b<f5PT9WV7fH*:FbLCA;h^Je>dG]_NT]`Xrx|CKUJgZVQXVMRVIDfffPjaWc]bty~nVGie]WK>B_GsmcDbUK^\oYQ__`OgfzrV{tR_iH[Kz`gcbhhAjYqIlEJkqxWMTv~~qsndUe~_krio|cs{QQX}oQtWmv{s|wrWixf^fi]u{]sfsnjTcjoXUglfxnn[_c|ֽ܏~ңwپÀɂuës悸ќx{հyqklZjby][ebevӈxs˔Ҝsz{’iƣ䮃yeOvtiwyNYbQvhF'1;=:Pj\KUIcu\Kzm|mmkt`x}okfsF5Xsk\n=88W/UjyqozB<::92493<5<%A@@=;6;9B>?72/0-*(**)*,518<:885359 %.20110/150%''B^LC>VpV||uhimzxuumt|w~shyI\NRKbwpP_qyZab\]UQqWJKMQSRSONKIDDIP98D\YOvUSWOXMx]N[[ff[]^_\HEWwvtpIxMMMSU]YJT}[Z^`iQN^\\aWjwriaaf\L[gus|~qX\\^jhC^T7g?\T\fy`LBB`[?=IBt@6@AT{DH~rvRe|FnGZMwoR`sHmELUYcAxgJSLTMNZOGSUNUKcQt?z@v\IEsjaCNM]Bza`PnBnkgZYlbfSM[Zt`ilh}xws[XOnztWVij[bX؇Yk|miomvyt~{qosqpsmmfcaUUbce`dropcW\i`]eb__j|`OVgwn`V^VYWQYPMQ\df[]^slM5qmrTSVS~J251..XZXUOJKS_OS[ZXOXd]WMY^/S0497==7043211/+5>0,.11,*/21/.24972.161/-;405?<8;34:6,8B==??@@@AFFahUns|p}sdrRUeVaV^gilnzr_vdkWSe{gPs`aFPR^IAJ?RZ[KMYUgwL~PdarYYc|a[w_w}bm\SWegOPTXpP'DHEVhcRjltbfJPA;ARHyBLSIKIQSM`4bS96A:DU{rHPa_8MHWLWruYYbjf6L<4aLkMCgbBTDIHT3.hc@TCEptR[WThG6AHECHyAiF667H433;;04bD83<6<.++6.&#-E/6:/0>L(83X7=JWfLgXTZb1TJGPQRBJ_8G:/+/)/>;0:B6,"" &"?HRO&$CM,Z@MK?5.0(*7>08JVQJ>:AM8[A4YABDDH@MJC?AA;=:;;;=:9:<@?A:7565513aO[]30_X`424114120331/1478;89::719887453315975561-2/U00/XP0Q3514CXD21221345UGO1VTU//5/1M+688,TV/01-294[].0WPMOUUY]STZ.6\JJ18200UNXC4!X]0S0ZWVSH-N13@._732^B87.8@BP04303563223675446:510/../TX0YWUVYUUQQURNMLIDQJEXIA2><:/.YVSUYSROGEHLNFJBCGJF@=/1@H?JQQE@;3\SPUNHAEG@RN58>DH>GI::EGGKVTTU]32RSSVT[PWLS0--/QWXQZUZQQJONEONJQ-V-OMXVRR./0.012^KIA`3HTDB4@ETB;<;@ED2JJHKHGEQKEPGKKJHMBGLPY8@@FLD8;>A8:I:/%B3N[`^Q_`>FO9ACc@aSaJJWejYK;IPVDAINU\1KID=7XOIOPLHC@@lXTLN?U3`YFCBRlZD71UQSR/TOGNQ00FIW^f<=>@?>{~~@@DGIJHE~FHGFNIGOOINLOT.SQSNLPHFGCEIGHIIHUuxSb7@:5ha_`a\VVXUOYZ^[`j8gd..4554430)30.553231 #%((%!!   % +  !"  ,,),+.!,6:!+UQKFX=D;@=I .*@I<{{:;; 1! +$  T7.L5I)9/>$ -7   %  +  ++ &6,(-'   +%#D!"*';$/ + "%.7/ /  ! +$."<71""$(414476;*62!8 !(3/'"$%!(#&&##'.0!!((-5/ )3/$)!!50$,9)94*(.0'8=A$)1)72/)-+"&,$&IU@28=3JC:C<66,@APM=aMTW^KV4>>V`P,P8+D176473!<6D^QZ,<)+PON@LQ;2NTW5IIP?DLPF?MRMAP]e;75/1'""%#$ !! $"$$"#! ! %!! )6!$&6C3FBAC=9::>7:;=ELFIQA5?$2'E=9SB768<>>=;:61-.28&%'54/CQ432.62`O:0::AB:9::>Z*%'80-)3"=G&'>>?(-/66*1B;8=;UB40;;9<5CLHC?=;6+6>JGLMUK9<=;D>)63!=(959@N=3()=9)(40S,$*)3K*-J?:(4EVT&:&.'6?/;I,D+/I257$H>*-(-)*1)%(,.6,;5D#E'D/$#C=:##4-,,H&?2..(#,(( !"&(#"?&@AdQIaUQOTMFAgh1Gn`^icWbJ|xESSIPIփyIRpqiddijuzw{zvllsqnlefb]]QS`ac_dmlk]QVaXV^ZYXfxpR@CPa[MCF?CC?D=9;CGKCCEJ5C-'DKA0H@8/?!'"H,%)$ =@?<7319@7>EFG4 #!$$##   %!!"$"#<$&!"$"-* "'0C &+)+2+"(*-.$!$;%18/ +#)%-/ @.("79%!O)& 9.,7$) 3>BBLG>T(UE0+:2$$E^Q,')C3  ?9?8HfnKDKXX,5,&E;]D?gV;L>wD:B#UO2H8'2' 8.1$%)-$&!) + %/=5!+;&-(  %! %' #!; -#*),(,%)$#*C( $)'' ')+-)%%')&(,&'**" %#(%($&$*.!%)))(*+('%%'&"#$!# )!'%$&(%$$ #% # " $$'("2'(*%" "()!%"#!"!%+('(-%&%'&*#)"%#&&#*&(###!"" $#"!'%#$) /%+ !!#+ ! $"% )#&'$&'("(!#!$$$&+&)%&"" '$!'!$$#"$ !!(!!%221(03&+#$6!2,7&&.58/'',/$!%'*-"#($"&&$# !9/.*-%6#GE876>F5'"">>?;88378!!4_BSX]7:<>;;w|{xy~}{=>ACFHECzDFDEMFDLKEHEIMNLNJIKCAB?AEBCCB=AF?(-0./12/+*.,',+-+.520灉~|{{zyzzyzyz4yzz{{~|~~~~~}~~||}}{{|}~}{{{|{{|{|{|||~~ +}|{{{zzzyz{|}~~|{|{{{|{|{|{|{{}~}~~!~~~}}~~|{{{|||{{{|||{{|||}| +{z|}}}{{||{z{%z{z{{|{|||}|{|||{{{zz{zzz{||}}|||{z{{|{z{|{zz{|{yz{z{|{|{|{{{|||{|{{|||{ |{{|{{|~~{zyzz{zzyyyz{|~}||~}|{{{}}}{z yyzyzyyzzzyzzyxzz{z|}}|{}~~}}}||}}}|||{z{zz{z{|||}||{z{{||{{{|}~~~~} ~~||}~~}}}|}~}|||{||{{~~}|{{{|}|~~}|}}|}}}~~}|{|}|{||{||}}~~~|}}}|}{{|||}||}|}~~}|}~~}|{ +|{{|}~~~~~~~~~~~~~~~~~~ ~~~~~~~}~}|{{z{z +{{{z{||{zz{zzz{zzz{ ||{{{|{|}}|{|{|||{{|{{|||{|{}{z{zz{{|{||{|||}||}|}~}}|z{z{|||}~}~}||}|{|{|}|}}}|}|}~~}| }}}|||}}|}}}|}~}~~~~~~~~~~~~~~~}~}~~~~~~~~}~~~~~~}~}~}|} ||{{|||}}|{{|||{{{|{|}|}~}}~~~}|}|}~~}}}~}|}~~~}~}~}}~}~}~}|}|}|}|}|}~~}}~}|}|}}|||}}|||}}}|}|}|}|}}|}|}|}|}|}|} |}}|}}|}|}}|}|}|}|}}||}|} +~~~}~~~}~}~~}|}|}|}~ 눜!߳݊ܭۇߕᠩȻ뫌捐ǭб䬶싘˴Ɓ٣囔֖Սη烐ιچʲ职ɗŨ㩶᳈ȳ߱ػΥȀﻩ˂ٻ鷥Ӆꅮ֐ڥŁڲ݁ƾ܍؀􃂋Ѻ̿䛯¥әɤᔛߊˬ҈ĝʡеք᪨ӲخʂÁǘᖁᢗɹ㌗ַׄК鈦熋ۺ劐τ􍆑в᮱뀡­ܤɼ犳曵嫧Ф׾Ɇ򿣪߂ή钕ݘסѲҽށČ͸ިɶڜФۿ́ĩۍȜѲشŽƩʶȓڠ˸՟ֿ˷ŶܬѿּƢƥд޾ڴՂʠԋüɩۡӾīî毡ٻvl{ͷn׭Ͳ}ְϻԋ홰qmfms|tƧrfgš桷ϛڢʪҨȱ}⦖˶Ƈ̱ڸчۿ̒кɻ́􄡰̚髣򏡖߆鄛񂆃馇탠ѭż٠󍎏՚櫞⃟聾񁃏ꇝ솒Ęɺظ̯ᱻ݄罜ń޶ͺށյȪ՚ηǿ֋ΑŴꀖ»ɯźɹ¹Ž͑פڀ塩塥ꨪŎ˄񌨤ݰ䔌Ȱλ貝낇熀덆͇䥬Ձ؃õ˶щӁ愀앁ޠԀك׸پޅ˟ų甓񎖟ãĊ؁Ԕ랡ה⥦çԼӇ äػְϷ߾ʿ񂏂ơǣɶ;¶öú諣ԾȎ܄޵Ⱥ̒Ж݁ťٹɮԵń˾[ij񎞑Xef;;867;>8;@@ABCECCBFB>=;<988;;99@D<:;;=@<=<<>><:;< ?DKMPQNJGA?@AN=>>@A@ABCABA@BADC@DEFGIFCDDC@?A@@@??>=;=<=>=>CB>CDEB=<=>?@>AAABDC@?AAA>?=>AA??CFDCCGEFEFCDDEDDAA@BDB@A?>@>??MRE@@BCEB<=?CCCE@??BB?<9:=B>;78=>IGE>;<<:=:86e]^ZbWNn_Y(OOhfpdZ`i_w\Zf\T^in{^gtYFE'lKOa_$[oy|cha2bf_3P_8&:iQU8E;mbXG<0+#+2@!%#+!+,1a]Kb?K4FG,U.(8A!%3"*IU[bc_U]ϦmD<3-0.0<7d0E.(#,H$#5++O$&>*>)2IM0)"))JL"!88+2(-;'<$,)2-?DF?L1EBH'E#$!.-/(*(+')-,,!!+,"# @8:#J3]Gm29(V`744- + + + C-,5,J`cPl=& =6GU(KYI4Eb7-&EoJlKRAV))-)F*(!&'.!+/'61I;QUQUAjlHWC[iixSrPR|iB@*09+E*49#gB*Q;A%FC19M?)ArfyldAle{|SbxSL(?n?Cl^!!"*-C:@CCTNC\kDA!94:;9WT]**LPmpSI+7-=?N'A#LP(&&)031+6:7KBV4M8GAC6I:MX-?*S/>'"W/g8HF*AL*HX;11I\+9`E6ODxDAC?l]5?AG_Px]_4?W:9@P97c^e677:_G<;=::KC;BILQTQG>:JERVPCdJW?CPDC:>KRQEF_w_SXbnnta{xdh~V[|Fecyjcr5aZRQrql<@:<;81208><@?G<657AB@A>51./-%((''(()(*43:<5540247;< '100134133,#&);I_2SJVOvtPJKanplquonpIJnLMJGSMvvSclc\SYQgShjOgH@FGHNNJKKIONNP*CZ\b\LOXOYT{{tuKZVf`TX^WZy_sjjk}IY`UJxOMLNHTPr|{SDf`hp^SWqhbTPXJKcmkqu~[eZQl\[wn>LBXVPZiqN:7@=KB:VPW213CHoFdyawCZU6P[rQQm]OwtmzFW|IR@s>AAa}g`]B;M?`B4VNF?HQKEX\>;ELME2AC7?:?I4C1;;OZdO^ZLi_cL1D::`eRq__^/YQR_G9=OFWS_20ZX:M9:FO41K/8C@JJH?8[SIHLKCBR[_;>?ACC|~{|DCB}AHBLIHHEGEHGGGEGPOIKNQTSTQINYOHEFEACHKML3QLZ]7>966ga^b]VWWZ^bghabm=8q0.312685064-,%-23-0!$'*)'$!3  &*! ! .)+).%":11'0O8;MQGUiCwgRDTk>:wXmN0(-;DsxpR88;QZD' =4-f?>CLvM\|LdznRt:fPHwLB$n$P,"Ur?A*;4_PG4+$") + 5/ *6:"/9jGW) + "/ !"," /  + "%+$% #(%.0#/)./5/(-62:1)0*>%,'1# " + +$%))&(-")$  )     ;7-6( %  +                 ,   +\W  - +    *-..<%!#(D$6tf=I//*,  -405.HD+2N#,@:9$jS~B?OACgd0#  + 2# +*^J;MQ04!==EB,1D0)!; #<2  +# + $2G3(#3 *2:" ! ,)  !2#"( '  ) ( %%! "> 1  +333"+%-1002(  4 &&'#'#!% "&&)+)"$!)+)"9%+%!206+%23*9--!"&5%-X\a8C75E[QKF-7Y;A@BRmPXc@,3;FG==PB>\S92BA/OmFA2#%K;I3%)545EF@?QRPCQ:-9@@S^9#04/=OI:BP3+FC7.=E3NA<1=Q_pCa9QGIH]T~^e6J8V//EQVUcQ@?^Ce\?Lhonth\aX78D=D<;ZYYWQcB`fmBS=DU=>BSphSHIGNfd\SAPHOBacgoɱ䦚ډӈـȧԙrҿԅԻإҐݾʮ~ޛÌnejryoKN>C8/+*-%#.'$" %##""##  "" ,42+3-A?@-*&-0358?@CCI(+:()$ (>>?OK&9:$;@G-).1/8e083MBK8Q6,/00;:78856456+7775+J/5.32UMNKL-64=<2385:aGE-4+'%/ -0'!708K)'(*L'J74HLH0*C=AI;27JE@615+L,>FCFFVR:B<1B:7JE$1)4509DK3$"*(4/);8: *-F-=D34"*1,4@,CR.=5+CKDL)4K/R,!=! !7@D=F:I,/7L#7I4;830*--1,,(9C7:B>;;EPC<4 "## # "%$$%$%! #) "!.# *.,)Q\(4-5A0)#-,$/%R20($*&&?2#16(HYE5 *,1$  '0!  I+(- + + .#$740>7M?I)QO#2?-LB[B2-15&(;7 L^jL<#*;1AH4%CYF>KO>.<7`d8;RT+<[HZghNWNF36G@02K@rc.3+0I7/(!'.),V63+7CQ]1&9!1TA@1D340Q8)K4;2%2$W0%,'!*1=#8' )'#*   +,<85$#.=?(+.$%$ #  -,($(&+''""#)'+%((#&*',+'&)"#$$%!(-),*"!%& .)''$')&,)!%#*(,-,,)(&%&&#! # !"($! "'''&%$# "#&"!&#(+!*, &-,% '$!!%,#/'&# ()&"'),*'))&+&'''"(('$'%&""'#""%&#!% "%/ ! "& )&+%!$&#+$%(!%"#!%+&'$& %#&"" &!&!"'#)*!""!&-5'0/&933%&38)=2352*+4& +$.).&"& #$(&!"$$ 61-''$<&FC?7798=#>. @A==176=>C#69LSV5:;=>@x{|zux}@?>w>EKEFEBECEEGDCDNLFGILLLNMFJSHCAAA=?ABE:!,#*)10/0/*,,-//23/26聉{{{zyyzyzzyzzyyzyz.{|}|~~~~}~~}|~|{{{}}{{|||{|||{|||{| ~~~}||{z{~~~|{|{|{|{{||{ +||{{{|||~~ |~~~~~~}|{{|||{ +||}}}{}}||{}{z{z{{|}~|{|{z{|}|}}|}{|}|{z{|||{||{{zzyz{|{|{{|{|{|||{|{{{|{{|}}z{zyzz{zzy{y{|~{{{|~||{{{}}}|zyzyzyzyxyy{z|}}}||}|||}}}||{{{zzz{zz{{||z{{|{{z{{z{{zyz{}~~~~~}|}}~~~~~}}}|{{||{{{|~}~}~}| +{|}}}|}}}|{|||~~}}|{|{|{||}|{|~}||}|} |||}~~}|||{|}~~}}~~~}~~~~~~~ }~~~~}~~}}{|}~}~}~}~|{z{|{zz{z{{{zz{zz{z{|{}|{|{|{z{z{zzz{{{z{{z{z{ ||{{{}}||}z{ +|{||}}~~}~}|{|{|}|}|}~~}|}}|}|}|||}}~}~~~~~~~~~}~~~~~~~~~~~}~}}}~~}~~}}}~~~|}||{{||}}|{|{|}|}|~}~}~}}~}}~~~}}~|}~}~}~}}}|||{|}~}||}}~}~}}|}~}~}~~} ||{{{||~}|}}}|}|}|}|}~~~}~~~}}~~}}||}}|}||}}||}|}}}|}||}||}}}||}|}|}||}}|}|}}|||} |}}}|}}||}|}|}|} ||}}}|||}|}|}|}  ~~~ ŀ~~}~~~~}~}|}|}}}|}|}~ ֬݊ĸǬޅ围úܾު٭뇑ǵ񤄛ϫ̷͟ϲᇎοـϝ˻ȻށۀВʭ͇΀ܗǧΘΫ԰ȯ࢝ʰƕᩞ˻ޤچݪƂɿրʡ؄ЀӂچՄҷ՜㟒ܓץ̰ަ웺з̹μ딫ƀ҃ՁՑب쾾蠌õ҃ʠڑ㴴¹­·޼܁鈚ͷ輑׉րуꐜ؞ỻˬ€ـ狪Ą޼ɜ㈋ݬŖ¸ڒ끄ȯټȭހˡ»ìٓə⣺ٷüùԿՀϹɱաɽ䳀ȓ՗㢃랅ߕ觬ہӷ܈׭σ׬ͧ㉆Ӯـ֪ٛ٣ʵ߅˶Ѐ֚¥܍䔾wėy׏uu~|ʌζzدs\_ei}葈g❥yßƋӈܲꂿ򂛫֧ʃέĞɼ귕Ŗñϲé鎢α􅗨⠍Ӿ񊙀ԩÕǚ􀌲ߗ祓ɦۨƦռ°ƻɒ􉖅ɏƎ﷗nj؋дɤν̅㈘ׁɿ̀Մ⇠ܸσၶ配»þɵ»ȸþľĻؾϛǸۉѽԇζ߀濚Ε돸כ֢̰͆ک̕р˻į®ȣ腀ɐހފ焆𓠉菢Ѫ㆏靰񎆉̙勈Ğ˛Ӥ΀ׂθݻ劤Īօ썑鑀򆕙٬ȴȯԹϳŽۦҀ׾̯ħæܔ㤩Ÿ˽ê®ƭ³½󜃍䲥ؾ؅ÈԪҴגδɷ̪w̭ڶĝʿ*8k3<;9:8::99;>?><=<=??===>=<;:<-=?CEEDB@<=@@ACABA?=@???@>?@@B@ADEGHIILIGDCDDB@*?>=>?>>>;<=?@?ABCB@???<=AADBCDBACDABCAADCBC?@EEDEEEDDDBDBDFIFCBBCCBBC@@B@>?BCBFEA>EB?JSH@B@CEC??@?<<:99:;=>87;;<FPP.$;!(]lbQD3)2@7;.>6`h`E&-!}mHm[R|J aXPY@?&/&1+-27M&&1".*,)"*)#,'!62"(7;%* %Ogam\VXyljtk_{T9s[SiY^fb^kx7ZQ8MeWJWqp[qaqhbvfZW]NZT4;,/9NOIL[v\VWid0)4,5AR75* J7>%(&D.0;57'.++%1H /30''0-+)2%E4RK0/2'5.:NILE/'3$!&.34)(XTXKXYAQ)'>ZH +  6;43!5,,EB5H<2JAG3R>0q94H2IXB^M[+AG5XMF;R+7WSr;IAFC?:@3598@9>8;B8?HB<>=8NV<8:]BLRNHJAVFDKO;-KXSdWM=5N=OdSeoIO+FINQ\]a^OdnqVex~RTCBBmrfW[f`p`eg|eniwunnx{pYcdI^EVtkGhWqm=bJ9SJZTbKX_ZRI|SRKHIISQ~Lw\\T~Jq{H`q|xhNh_Uqw~XRxPYqYZilryL{cZiqXSMKKbUQK]NTlR\Vqnu~fp~`c|n[cPZ^gmVzNtLeoeqys|ݐ|ޔش٭ˏȻ}}w}wÈ͹}潪~gptw왐vҽɦtvיƩyׯdzhsźz~FWF?@jjD^0=JgL?LNLFA\rcWoWgjriaysmktxbzFjlt`^Blf\NOVynp=?9;;7.7BG>AEDH;69A>AXD@=FKMMNS-2F:jwp]HPMOTNhnjyPJPHJV[WWnfacfnnwKSKhyNNWPqNzMGMTW[TLP[V[zXfideusX^^afjukJKWCjcq]N[NBD>loW]\CN-1C8+.D]f|[fUc[U@FRMziU=DK7=LIc@tCqzs?p>G=w|oicho~aUJAft~vIIaASGU]XZYRS:OgZdjiRkuqdL\_`Ucg\WWZ^\hrq`Ofbgpggl\]Y]lwwthX\qi^dzcɴnoz~xwvlliljjcZ[ecd`^aaimipnkd\[[_dfggmc;B?XUnpjc_TO[::;n\_f?T\V^gT{fsaYSsYiL/SPVX/YKJV]ZjfZW_X0224864:8;3556/.,/23:32.;;+/234/:8551/30&-8-./+.30388999711529B2RK9bjN]Zg^NM^\]j~JjKNJ]`hmwRU3/9aN`[[>_j?V8dX7/[[Zpg]TI@/9:`Z?78>JhK=?aAFq5D7LKTDXRgGPYrsOa:AdXbKH_ck<;JQAH7>,-:7RfB58<3/$-*0%)-49*7DBTUI/V%(P00Kb9RaWh@3TA=[U=O2>EJ>ACL@;AC@8:9<><<>???=854477321Vd5_SX[1321^345/2302678=:3356;87;<8710453464855.+4/YS\][ZLY^32?@QX/\I1941XF^402W/2.ZTQ2338=563.40Vb00ZMN2REMNPRRSTYRR6/5IX05430,-OBD*jX./[XYVPU:BPGB8531O95F>,V,/S0458865565657546;:;61//1/00Z[]SOUUUSUVPMJLOPLNPPVMD%Y1]XYVURPQL=LIIMA;@>>ML,9/R\V1aOHKB<:==]J@>YcUF/LN?@DGTWc330115X^0W\\VWY234..W.042ZZW1TWXJTRNOUSSR\[RTXW-3S1WZ465aM@@>;@T0PAE=65GFGDERCe<9BLQ@@ICLOLNQJMIOH?MCJBOPSMREC0FJKYQ4-F6DH;<4eUFC=5U5_VP@EGHPiTWNPSXOPQKHZ1O5LY`n<>?@C}~{~FDDEFHHEGGGGFDEEROMMSWTSSNOTTNIBGEECP@gEfJ`ic377954f^ab_YT_df6k]bk9A1!!57433455667+(+/..,--2,*1- !"!"!  ! ! $*#0+*(""#03- +/!?HOZ]ttjjk{_\8AHJHigZX064DwFhg=>BHOIVa09FBL[S:?CSeV[iSdipRkQIZ_*LS-C-.2w&o08agNJA=Ta?/2=: ! 78,!1-,!0)B?4 E''!*$-*+-!%#   !!9 " )%.#$'!3)=3 0%*C9##1   /= 9$-$#1 +&+( !$%"#'&!-.        +      +  +  + 1'  +  + ( +JlLm% %&  $!$&,!!)7d9/"FoSX9,1@ + + +  + &$87X=.*-B(KFEK;cRomNQMSZcWY^^% + 8#" +% -tAYBQ)BG5:.$,+)(*74'3%$(9,('(+ /$ "'<,  "&/  ")"  #&;'"(* 2 +4!  !+9+%7,6 %!  " #!$ '-0"%*&#$-"!$'&''0*%(%2&/>4!$ $%&./25/AlKD5M66( .*55jmK5?E@u7EN+ML30,(G))-.NP3Q;81A*>@'D;N]?KgYJ7OGS.h^^SX[_Tc\HqBVE;D7ADoJ\_Ji=WY8Qb6KNiGMT^Vhȼڍw̒БϿ׏Ŀ¸ȼ¢һ~饤iVrZa{cbb7.@aI-ue>L<.*C@*;+13@5FPNLE@[eYoZslg{Cdnf^?bYMD@P}ql50(*,*%3>C;>A?A5-***%"$$'&&#%$"!#$""06<;>AA!#;*"*20/&/0-2>LOCGES0)@*.$C;6@BE?H<;"/(*(,M-1NF+@D4YF6E0.+%711,15756:#."=A?5&-+.0.P@ADNQ-'.(*3765U>532*+(-9#$2(27E&=?B@D,70C2I-+02572.2;7;`YaLKV:AA==II7==<>?GD,.:,C>I@6<5,-)IN=259>AG82*';CDB%#4 -"#&! !'8()())/-$%'+C3*GH:EEN9&P56:?BKS[ZT?oLJ{KT]`\SGNn|^OR}ri\ŷilvztvxke_cbd`VXa[__]acgieige^WVUX```_cT062EBWYQJF?41&:966Z$ 3(*$- +%""+-)"2-1"1S68&- 01Ja>.07* #+,$/0C8/!63!4N.AVIU./<1TFYDRQh@PH48@O)7.J5  &0 & -- + +  +6.+/6))0B* + +$$!%($  "$'/+%)*+'#+,++"(($))(!-&)%$'/,%$'!&'')5+%%!'# 0'*(''&)(&"'#*,.)'+*(''('$"#$$""$#'#)*((&&$#%"" !$$$*.+&'#!!0#!&  !/%# /3*%'( !"")*/'+',+''(&))'#&& %#!"&$%$)'#$%'"%',#  )'!" ! '0!&)% %'%%'#$#&#&$%$'#( "&#%"$$&!((&"$#' !).)#!s360+6&0/+84&#4((;#"%&$,%!!()%"*$ ""4,%%#4$FA?58:75B47;???93FPYd8::=A}zzytyzD@DABDDCDDDDCCBCNKGHNPLMMHILKD@>B@?67'7%3"-0,1.010-)0212-04灉|{{zyzyzyyyzyzyyz{~}|}~}~} ~}}}||~|~~{{||{||{|}~~}|||{|}~~|{|{|{|{|||{|||~~~~|}~~~~}}~~}}{{{}|{ |}}}~|}}|{}~~}{zz{zzz{|}~}}|{ zyzz{||}}||}{|{|{|{{z{z{|{|{{|{| +{{{|}||{{z{zyz{z{| +}|{{{|}{|}}|||zyzyzzyzyxxyz|}|}||{{{z{z{z{z{z{{{|}~~~~~~}|}}}~}| {~}|||{||}}||{{{||~||}|}}||{|}|||{|{|{{|}}~~~}|{||~}}}|}|}}|}}}|~~~|}|{ |}~ ~~}~~~~}|}~~~~~~}}~~~~~~~~~~~~~~}~~~~~~~~~~}||{{~}~~~}{z{{z{z{zzz{{{z{||{{|||{|{|{z{z{zz{z{zzz{{{|z{|}zyz{||}~}}}~}|{|{|}|}|}||}}|}~~}|}}|}}}|}~~}~~~~~~~}~~~~ +~~~~~~~~~~}~}}}~~~~~}}}~~~}}|}|}|}|{|}|}| +}}}~}}~~}~} ~}}~~}}~}}}|}|}~}~}~}| +}|}~}||}~~}||}|}~}~}~~}}~}|}}|}~}}|}|}}}|}~ }}~~~}}}~}}}|}}}||}||}}}|}}|{|}}|||}}|||}}||}|} ||}|}}|}}||}|}|}|}|}|{{|}}|||}|}|}|}||}|}}|}|}}~ ~~ ǀ~}~}~}|}|}||}|}|}~~ 瀑⍓Ȁο닂˾°쳡ᜐރئܿ؇ʡؙ留΅ӁŘֈϏŝȜ؅˕Ʒ虞얋ôߋӻ򎆵ݎˉЎ늵Āؗڕкҗڬם¿璈˃槍ڼ􍩤Ǽ޻랒ξΣ̌ôË膩黖ںǹԀꌖ鍐ǮԶɸӸ֬͜ƪ𠹟ք͍ΕǼƫʀ고ࣆ֣ʇεϦێȈ걯ஞ̣ߢ慏ɴۻƼŹ֦̀לѮۃߵӑՅ砤坭ܔǥӠҁ̩ɣ㓍ϳ甐ۉ浙فҜۀҒ̭ڈݳвߑȼɹ😭ޜꡗ핪ߓҜڮΘ񑛮ۉ֜윎Ɔ󘚠Ԃʖ胗ǐۍ𸧸¤ƶރȀܾ닐ˉژ؏βݱȸۀΆw}vrgڅėmհqoyz֔prpgmlphꂖ}ʼm{~{郠狞膼ۉʓw҄աݱͽōǣ݅݃ȽќȑìܧЀô˂ׁ۲庫¹яے؇ҎʾȂšù݄퇍Ħ䙮ӕ脳ѽ½䭜٧߼ī̵՘ýΖˑ㍀鄒͛ŖȁՎǓڀՙ゛𢘍ôǶ臋܀匓ƭΎ¨䬷Ž¼ĽǴýùºƵüة԰п߁Þ骯ҿ茚ƥ죋ͅ塱ġij߲ҧ춼ѼšȹʾֹÕަ鬜ꇊ͛ިįڏԒՁ䎋轸ϼҘ􃆈假ԃʕޣ҈͙昊Уÿ呅̰߃߾߈焃񇌓Ͷʳց֗܎Ε󀀅ĴǼȀDZջͪವٵ克Įöž憔ȱȳȲξδλêۋՃƞ❚̹©źұ˥Ȕϱ؁밴耈ݯ䀆8d8@@@CHOJD>:;;:87lfhjjhfjh9ode766d\6]XZY:<<=<;::>?BA?@DFEBA@>;:;;:989<>ACAC@CCA>>>=;;;>@@CACA@@?@>8;=ABAA@AB@ABBABBA@??AEKSUY\YWNFDDCBBAA?<;>?BBB@?<<=>?@CBCBCBCAB@>?CDABCCBCBEEDBBCDFDCEEA@BDCCDEGEEDCCGIFFDCBCEDBBCCCA??>?D@@@JIA>AHAA@AEC?BB@==::97879>;><<<;;>>?>;A;7;?:hcTY21g_*MRGqhtan^h~bTMpYeZdnhwXL\_qghjnS{XOdy\ocl`fXhAE\h'hmcpM(&9XGcfrbmNRNNGO/-'.'" )- "BFpWFb:90hM@S=.A5%!(a]]RiztwPdT)9XQ>'&($:$0(3)$."&!'+<76*2% )/#);{zmevfJebbwl]Yz[EdJ~WPre[v^W`3WIBF5>Kdw]mrlDon{`b~|yLW^3* V/\D9DWzwlmwfwh(L0 %-93Y@(*%%$/07*)40OHE2>+-<+(-=rrR7.cKdYSVHK3J*) & # )093&KCO[TQLG<~[vi\~tȚpr.4+B)1<+@<6\f)4dE+CJ;3OCwThZQhm@WFicLeY<+f7$F"p=K.23/56IOP7@mZ>Wy/A=7K5\LN;87&"7DDRMrF4*$-+:N==e-?PFI>m<9@'CTKJiFNj{0894JeM=4D%+,8JYE:T?'7=S8=>)]>$4EUcA]kJoUM91QD?::?@ACC@GCCG'&<8C?@;;<>90++*LHMLLGGJLKP',08730202346?&**.1/00+22-%&,($S63=>_hQMQXvVMKSbjpnwOUWN~U~KIV[|ca_|Kkt{kghhi3?655?MNPQNMM6G?WkkSPNNFth_exJDGOI|IKOKceMUagltyzyk||~VVZmynBWrhdYPRL{liiqwGkhSV`h`csukqfKII=C|iqUNSD?kRRNOO@BO==L/7E>=wWY?BXEWWPZEM^PC8fsEP^Y]i]eytlpdtXHbiat@liMSQ8QHSD?EZ]TkdYLH\Tfah_UcsvkZQcS^f^UXTSiY`X}NPq^fV_y\\\`}eaYpbm{pibSY`|tai_Yrqtƽlx{notkj``]h^bhngeb`]`d_XTclgamrdehg^kE@`fAAA?q^MeAC=kT\nkonbryz`Q,01451--215-/T074727@<3315834373-.-*5IKGA@8;355/38<5113/64/+31/20/-017-/=11/,:?9=PRN?BBCNfsk^_x_n]eSv|jrqgioidoZ^`vxeYPTRyXG}Jvrt^Qpb|`pjwO]DDibwr]jt~wwYWpjIpRURhUwZfiBMSraHX;ZifgLCxjyP{MtEHPFHI@R4@=S2E\Kkib|g^_@T`ZTcqV:7l^Tpm6MJPHFWCNTRkQAnKHKpduBll{Bgg=6CN^EJ<5%59:5G:,./*)-9OT2;2/+G?C/.%$.L0NZ>k:RYB@>PMReLa0jpMf?ZO$FA2BOU??3A>*&7A6.SFD.%5++=;04?&36(,-$H=MLGD;G'(/@:YV,2@+4/648/;TWRLB<47I;=6;732768632X]55^Z_024312432372415:<;31547;88;8571364,364874.20OXYYR@VN413P>YTZ.^05ZN.///006001WXT01319A5746<3242\QTW]LINDEKQVXWKX5O>U22136/.WD;.O4/.WZUYXM3C)+O<651Y;61N?T-,.-2458856787666859>=9320//]/\Y\ZTRQWXWTSNNOKMRPTTXUOE@[R[RSSSTM@DNRIGDA9;EHPP7OCNHUEMPPA9UdPYEH5>>:7ON)XWYG.;;I7/=LXd234^365_a2\^R[_/WY210/-05/]TW0VJMJLLMLPSW_]WSOVUQ-N/2;874ZLE9_]?E@BIB2;?MML?CNAX63:712g[i_?d6Z<675j`^Z.DZVROR>?GAGHYYZQ4>@,1\EKKNYY>NAFOLF>61YMJDDE@>6lWHA<;h;_[VN>FIL=DqWVRQVPRRCT1Z1HUYc9=>@@A~~||{ELJIHEDGHHHGKMHJHGHJJEFGJNPILPXVSVTQUTc>FJMHX>EJR^Z]573c5743]Wgjd[Z\`l;9ige/$## 7467753535/1/)-,-( $))+,+)$  !     #"!.,%&/D3(-,RQ^GuQRYorA34jkshR89.0?aTZC9?;D>@AvV7SV7*AI6Qv@R9sSNms;]L,?JSTThHhY9p +0O>R]nagKMLPBB#   #&6$'$"J;--,@ +5IU&   , + 3 &0#,8? &:3 & 1 2(@,,,#0!!<,53$@*#  "!),$/#-%-*%,' ((#7(!&$2#2*,3-+ (-/ E9\km@JHY(@O%"-$9%MI1->D<1'*%(D(A_qoNOZ=XF@bH&9;HEB>$&).5;!&0609Z>?+?R*34C?;IWNGG,@ ?;>E@C;566'7IH>CG1MNGTgfcF@<9957;AB$!JOCU_haRHF>,pdʔgmd<0091;/I1/1IGUWORmWh[Zfk{tsZq@mp{[b>`TIDCPnk5/,.+(*=E?>=?9<5,(-(###"'##&"$#&" ! 55*(,9EGGACJ'EB&+'>@RGD@HF)3'$**;H6S0I6:(;FHD=NQN"%�$+"+44(''B1*QG?9>K-%%*(@*+.*F28*-+((/4230,'43>;7:C@;033>G<#3D>:42P5/]YMEEEIL-C@13;>9>HLBC=S0-.&+SFR=69.)D57345,+3'(.",&&O4/##.$4Q4M.5%)3*!6B(*953905B;4:37>:G)DGY(*',!&!)*#)+&,'("%./(/!#*5$:+)>T()K54E6/;UIV32Ka@TQWI\OViaWROCLWwmV[NIrnbjmhswilwkcVVT^WZcg`_^\[_`ZUP`ib\gl^___Ucp93IR4650TD9P350R?FXRBAG;*":/(A/)-?Q/8IQ63H3A* %'# #2! #(#,.)&$! " "##!#!**''&(!!/,?0(.>.B5# '(0 5,3%($'2;IX[\?*aIDF+ %!) "+4&H)7/37%%#>G"+45=#29$!)3KF$+ +$%&WRKj`,5/"@(FCK<@+4<9iH<:9fH;2G5.=1APM`H5eFEC`Vc8\]r>[Z5+63=>=*-K;D>:@;>C6B$G2@MSZ37:?=>|}~zzy{zCIFGDBCCDEDH>JEFEEEGGBCCDHB>FLPNMONKLE@3BF>--!$(,*++,*332-..04421 +聄{zyzyz)|{|~~~~}}|}~~~|}}||{z{|~~||{{{z{{{||{{|~ +|||{{{|{|{|{|{|||}~~~~~~ }~}~~~}||{|{}|{ +|}}}|{zyz{| {{zzz{{{|}}}|}{}|{ zyzz{||}}|||{|{|{z{z{|{|{|{||{|{z{{z{zyz{ }{{}||~}z{}{}~}zz||zyzyzyxxyz{}}|{|}|}}||}}}|||{{zyzy{z{z{}~~}|}~}~~~~}~~~}}~~}}|~}}|{|{|{|}|}|||}}{|{|{|{{|~}~~~}|{|{|{|{zz|~~~~}|{|}}~}}| ~}|||}~~}}}{ +||}~ ~~~ ~}~ }}~~~}~}}~~~~~~~}~}~~~~~~|}{z{~~~~}~}{{{zz{zz{{{z{zzz{zzz{zzz{{z{|{|{z{|{z{z{zz{z{z{z{{{z{z}{|}~{zyz{|} +~}}~~}|}|{|}|}|}~}|}~~}}|}||}}}|}|}~}~~~}|||}}~}~~~~~~~~}~~}~~~~~~~~~~~~~~}~~~}}}~~~}}|}|}|}|{|{|}}||}|}|}~}~}|}|}~}~}}~}~}~~}}}~}}||{|}}|}~~~|}~}|}||}}||~~}~~~}~}~}|}|}}~~}}|}||}|}|}}}~}~}|}|}|}|}|}|}|}}||{{|}| }|||}||}}}||}|}|}|}|}||}|}|}|}}|}|}|{|}}}|}}|}||}|}|}|}}|}|}}~ +~}~}~}|}|}~ 󅓜ӭȯ΁䮿ɪ榸؍֞нξߺۡ’ŝ멇ͷ´␫ۂŵ໾􍃐ɬ䷖𵿀ʋȓ횀ȓ蛊桡ּξͅꭃ펱𪅬♫țȄ␅ܞͫȳăųǠւ섇籺싞熑љֿʖƚþʭىڕ㘕Ѷɬܿɤš̰˔肴Й泡鿺图턬Ó}ѠʮŃܐ驀ʜϥբπ޵ئĥӽƆ΁܉ҭÇ׺ɒ䵣Ԉۋߔ߄ϱ͖ֈќݻؿ뀘Ôۍ؆ųɵݽєɱŔ¹𫚮ŗԶʲӤ뉑乕ߞȨ砣슀Ź̴η㹩񊏗ȆőŠɌ񨕟˿Àꭞ娣艸ҹimigruojgvzvqimytf}}|~frzqqʰ”{ʼn{ꊔԹԘ­’؋͜˸۝×޺΀ıڤ݀Ű擒݉Շ欸ĭ⵸앝ׅ쓧ҬԲŀτϽϠ辱􃉃␭ǘƺüׄ썢î蜬ͭ،ʱ낍ΰúƿʻÿވ态寫Ķ⼬̴ʈҽʻʏظѩˁṯǕ掕췰Ҵ˭ݓȬԯ╃ޔТؑ߆ϫۣʕلݹ܏Ԁɬʁΰү鋢ţ孞Ⱥޚ䆋텧΄􃄡񤝚䊛Ϻʮ󿧚ȃ򊐢ݩ˸ޘ鎂Ȳܗ숋Ż뇅悂犰ҹނ䆕ҍɄܑЩ숓͂ŭʀǷƸdzെ􋚚ߓ僆ݻ҄ϦɻФɵȵѵƵòγîт׸ǻñػڵ鮃ݷ󁅄לֲ݀ãBjj:AD@ABDF?=978798heiorrqmgik_`dhcaY^`d[`7:<=?>;9>AA?>>@DEEFDDBB?=;<=>>@BCCAABA=<;:;<<=<;;=ABBA@@A=>?><=>@BCCCDDCDDCCAABCFKJILRXZMJJGCACDDCB==>ADC?==?@CCCDDBB@>=>A@@@C@ADEGGEBBDCCBAABCEFDB@AABCCEGDCEGHJJPPNIEDDCBDCDCF@?@@@=@ACAA@??AC?BC>?A??AA<;:8689:>B@?>==<>CAD:79>>?<:8E^Lp[RNr]kbdjiMKNuvQ@GG2/23LVCUj?5Pj\mqXF@=6>.)(L;,0'881%$:31JKC2",OH;,29S0"#'(/ ($$+-D7"!EM/307\@@'4H(/1B 490(&-.("1.*41.6 >J~il7' #5$ -/2,%BL;I~|ab^ + FOKhq.wl]XhdhI]`k:<0$  +HF72L*$ !()$&8456;<*-3-$(),HUPIQ@[i>,W/S9QcYOMaS6.1--!&'&*#3(:*C(UDF}]}]~rxf^\eڀٖf=(@.2?3@?@7W'A`B%69&.4NvmpsscYBqg>xl\n`Rc0"TP9abg$TkG<7.4.N;=&D4M]8P6OS1QPILLAaqUK/>+=6Unl8/O>815\?-hA:6VF?GT<>P9CdWZC*^4yZZCaD:V'Zp>l7]IH1'8.95JJ>5=OP":l[TDvbGN`?>4_>ECLNnb3LdYvvGACA@@H?3AA:F=V/34]/SG9C33CMIGEC?V7>AF/HDH>EBFqk\;rt_[SWTQ-3JPEJ6rc^v~ibs}IgT~IWl\jDo[VPRbgphW`pu}~KLNJUcFpdgrqxp\VuWg_MwYVaPSQ^~~foFQrJ@GOMK]jxi]Vrhda~MPRM_JXvqnmU?H]JOUNKPP{S`XyQ`dlNeRKLklYE\qLMrvrm`|x{}qm{gvRaKfrZcrqQkcoQV_nni[cZ{wYj[S{ø𮝓῰o|xzrƩrlm}wzvƿ®ox苑|᰷ˆЏzvӄ|ڀxϷȵ׫Ğin̊~QMKMM'5d5NBp6GiA>O_WYs~}dVpsj_~um{kbN{}pjldltgaVOCag;B8;?83/FED?@9?C=98@@ABB@DDEE&$?7C>?<8::6-+TPDLIHIGIHGKS),.230+.//06:"'(.10111-''(&$NZ<4uxo`YWfl`c[TQ[y}{~{VfbcQIkQUYa^\xQkknzw[-690p6NObQRTR'iAPhjuj\[Z?uu|~ZYm{PQ`]ZIDFBDI{BKUjnltzxobku}}|}PRPWn`b}hZPkNj^YXfifH]OLV_r}qlxnqOCQ>[lRSFs@B>sbZXUTNAKM8*S9<881KlncF]tNTKULAFCpvBMP@wIVWVafXPGbxjnY]WivnTTT]Pd[JURwxShjqcUyMHfdqZY|pdj[tznwgiee^j̯UY\PRwfhkuvodrjghjidfgjvqsja_[Ygikhfgkln_hd`_tG@::CC=3_Va:;=gFGRewubRwqp~va_Wdh|Xrv6LA5412367785<6:768:314115286?31/1014?7.248/135382./432-+1.0,00364,233065531.13>?=sq^>Efvy_IwJx]m[^msw_b_yzin`Ut{}Z|iSDeM_TeomVpdqoUTtVuiS=HBJYfzrEQLHHMA;789=pjcC?Ogfpw@0.,[UT]h63K;6b_ePc_>H9?sI>?pq=EcY_;Ud?MTR42*8829ih:5>1-/(,&/.RL-5@5,R<:+.#&,C)SUq:c`AB9>6:8r?\QPC=>mkuI:;F3*>2*%9B')>;6843465544]`2411\011_[26541662679=78/2658<8685642430W4447750RUV^[XTRYU45\GEE\GU311DL0.[-223.-1.//XVK->>963<733/\WUV^WOPQFNTUPOOM//FP152144/XH-*-P4[VTTRVO.>50^3623[D<3>7E/VY-1563347;;:67/5:77987431X\VZZY\`]XQX[YYZQRQOPTSVUTQJIXTUOQ[XSWONQODJJH=?OPNSQLOFIEMEHLOK5^,1UC2T288==GG7GJA0.BP75EKWYVW252232`1a\UQ\WRR.W1.00/-0ZU.XSNSMKJMORSWZZW\\QS[//336350SE6].7L349??7CDGJAKNRC[4@FE:?FTOKA@LLJJI@;MJVQMVWPNWAHIQTISJEFFFVFIGMTJNCKECHC>FH<:E5gZJAA8bB.]ZUEBJNQVJeRUUUSSWHL_^(HR[an=BB@CCB~yz|}CFEFHJFDGJIHIJIJIILMK3^Fg\KHNQORRRPa?vDKFZUcZPRY[Z[a35cc32TFM^dgd_Z^dlkkkL54 #647:;:;8444..03/.).01+- #!#')! !   !  !"&&%" !" 04'*!(2)129hVIB@qeid23fWcfkgPq5\+=YVZ8,BAASRHSBzTLUi69#U9^v _>AHpIhIKsQXFGgCEhNOtD?BKYt\aE=C;E8 B)<>=lERM?l"-+  $ $(.E8FE'C$B$'91#   &3BvT`rQrH[__V@/!$jX}knYX}mD   '  +]WZNAI?6;'M?9$B*TO-=/*3 *(;,529 ,# +!5(, ;V).$ +6ZH=- -  !03",N`#)5** ,7+% + $ )&%(4$"4!%"&)@L0+6.4-!!!&" %00,#"!(%$! -! %+%!#&;5/0408:+'.+$')&)1[UGR[G&$$!'- 40/78>:,1D/<91N73=7<;DbdeelW_AI)2QFK+"&*&$4DOE90DPS>4Z?UKKOX-*/,7-6JEBcH1!)2E&),'%N[26U;A7L8HsRG5Z^CT733JO>,6<'&>j`_]Rjcnep\V[n[UgcvQwk:D2CM@MYV:MFR<;@HLMk?BDbcFTFm8Zgt򷰜ށֈƱ상̼󍟎ǠƸË܆~SaspzWseiaKWO<*G}f؋LE@>8!A/*C;E.DP^WZrbWq~ztshT~xnuzgjm^WNE7\c59-,/+)(AA@;?6780)'-($$"$'$%%% &%&$ "!8<5??=>>@@@AB  +/;9610.27177>@EMKCB?6A)M?H>=NL7@BE'#5&$#02D9(?%D@DDQO8"%( 27;99G++435/)'*!ACIL35BK2/41/&$&$#'JK$,'-0.33-' '.3433;>E7)0.3B:7NTA50W@d3VE<:9DG?-:.,4;EMDPEK?F3+6'6E793T--*L?;;653)11#4%&""2HC3&9M2/-40%)!)'();(/044;9?,636::37?3>;9>*4+;#AA!5 && '3*-"'/+ $(--8<*.1FH2+4B'"6NbyN?>,4PP`MXWIcfXg]ORQSQ`IHoG:@jk^gjrul_wib^^^\_`eqkld][UVbffdcbdefXa[XWl@4.v/883(I@H+//M35ANaZ7D< ;(($4:01#KA%"-26262;)$$" !"!! #!!&#%%("%/ T8+*!&#-8"3-(+6gR1%$#HJJUa.)4#!LPZJXO161:oG79hi5:]LN/GZ;KNH/>>4I<@@A>??@}{zvxxw>AACEHCAEGFEGGDFFFHHFGGCC+847.BFHFMKIBG#A:B/1*/,('*+*(+.-%"+.0/.,.17665聄~{zyzyzyz|~&}~}~~~}}~|||{| ~}||{{{z{|}~~~}~~}|{|{|{|}~}~}~ }~~~|}}|{|}|||}{|}|{zy{| {zzyyz{{{|}~||{zz{{{z|||}}|||{{{zz{|||{|{zz{{zz{z{ |||{{|{{|{|{|{|}||{|{|{z{zz{z{z{}~~~~{z{}}{zz{|zyxyyyxyz{}}|}|}}}|{{|zzzyzyyzyz{}~~~}-|~~|}}}~~~~~~}~~~~~}}~~~~~}~~||}}}||}|}|}}||}|}~}|}|||}||}~~}|{|{||{{||{{z{~~} |||}~~}}|||{|}|}}|{ +||}~~~~~~}}~}~}|}~~~~}~~~~~~~~~}}~~~~~}~}~~||}}~}|}|z{|}~}~~~}}~ +}}||{{{zz{z{z{z{z{|{|{z{zyzzz{z{{z{ z{{{z{zz{{|||{||{}|}{zyz{| }}~}}~}|{|{|||{|}~}|}~}| }|||}}||}|||}~~}}~}|}~}~}~~~~~~~~}~~~}~~}~~~~~~~~~~}~~~~}}}~~}~}|}||{||}}||}}}|||{{|{{{|{|}|||}}}|}}~}~}~}~}~~}~}|~}}~~}}}|}|||~~}~}~}}~}}~}~}}~~}}|}|}}}~}}}|}|} ~~~}|||}~~~}|}|}||}|}}||}}}||}||{{| }}||}|}}}||}|}|}|}|||}|}|}|||}}}|{|}}}|}| +}||}|||}||}|||}|}|}~~~ʀ~}~}|}|}~}~}}~ OͽƺҚگҶԛԤֹ¥˨цγѷ톜ꥨ۲Շΰҩͽ󏂀·猐𫅼ނ⪗ˡҜΦʝϚƋ臏ăꢳ݀Ë쩋җǤֶ˷Ȇ͚¨日Γꢹ􉈇Ƣ퍉炉󀅟ߕ¼ɪߠ㴈Đ̴ͣկݕܤҧŴ˺Լގ旙쵭𡽇ۄ艪僦耕Ňғڌ蠞ӄ؅оȻنؿdz̠䅚˥ץߥ떬쐁ՀߺȀ֚懜ȘΆƔ•䪒푁ۑʫɲ̙ŵؔæʓ噚π̊ڴχЈۢऱ؇焐򡓌ޒ쁘ҧցյ݄̀Қ͞ыҬǒȳ߂ߞãDž遥ّحҮrĽgh反iĤ̪~|֋v{rrhqklv}rih}l~pvވmjonʮǶtҭӌيۂâ{صْЗ򗫦ɀ鈗ыĕů䏵ލϷɛаۻɷ򃋎Цዣ̹΀ӗԗĜLJ֡ݬǦژۚл֜ꟐƯ񣚚Ɲ٢旺ƛծйͺ×̤³㈕̺ޡ؎מٿҡƪþ򋌑̰۝һεƿʿĻрʽɹɸέ鲒֝ۊȟ޼ԓŮ紃٢Ѽƒňڀզ⦷ǦƒՐۜ͡еʢ氞džߒ̜ġ↑؀Ɛ셂€򩒗ٔϴ⡌ި煇β˼󵭭󃊗ꄃ߀ςÍٌӺπϾ˳ɽ˸°µ̡κރ̺ۅʦ߀耀Եī􇉦ǿѮéȱ̻˹ɺެƕƮڳʰωæűĄѸѹ쁊훎Δ-ġսξ퀁;:ljl;A@>>?;:=<:77;;ffjnopngfgcbdafdhe``Z`h669;@??ABA?BCDED@>=<<=<==?@AAA@> +<;;<<:8:;98)=@@?><99=BABCBDDEEEFDCCCDFHKHGDDIGHJNLDCDF@KJFDCA?@B@?=??@?>=>?AA?A@@=BEDCDDBBECBDBBA?AAAB@>>@BBBEGDACDGIKKJHE DEDBBA>B?>ACDB@==??@@;<>BC<9969:=<>D@>DD<7=GFC9767?:77da76;b2F\RM|eZRPxhzotnhhKMRQa^bub}w^utdlmyWCyWPi*vVOYtsR>QKGM~UUiGD,TK<7<>`NAKK*.1*+10&"&++`39H>J&2:;#*")-/63/#.8<5iL>kAD9O)N/-*2 "?51"+'/'076+ 4D9:15$'44D0).9-'-,BE;yuhRKWa/5VKE Ehk%)TnKrUa=H491&0UVO9-[8! (6,154CAMI3!521&^QOEq]AW2RTb{Yk^?QadDWbyqaUPOXbTxMSXO|vDKF$')-110113220)$)&$.XY7GFBCH@BFCrZNSmpw^[ahvlDxz`Kl_rSskipf8Vi3)BR>n=V*+,2_U`nqqmX^Og{MTIdhjO`\dTLNFFz|Ky|eKloinvhcZaijnjvSjQzV]U~g~o^NJO`[dyGHHJSWagafX_t>;9BT:8?snqwm^XWY.,SJKM0R+,1276_RCWaR^CBRN?GGgV=LaERctw`Pbgknoiukdi][Y`Eq_jdSLP?EOA{F`jbUPR]\\q{_bhdefxwT]^[j}TcO}`TbssVP`KOgLOfzm?jv[tSP`UgloltmyhxgjyX_LUcXYlpalhkpyzrnqnrsorpohjjmvpd_ainkgknilhech_cnq}D\X6==:[KDPXfnqgauT`rl_jx[dXjkqf}lc8>@>>?9;;8=877.5,.60;<784273,005;3220-49133:=618/290-(+4=22.89276536;67705800MzdPrOfujLSqc^Pa]YvyadrbhhpRcu[zxmvjsatL^xNp`vSObfLQEXqmyC_SRORSNCnP[zGM~ELVOe]kLaltoPcnQE@wsfVLQYTZap`c9ITFVvWkqi[AFdveu:OSl^\DH9aGq|j?ABJ5>h06Ht8.07'9:P:^`99>OX+$-).0*?445F4L4;9/*%+55*]qmh6-D\`:7>7sG9?gJKf[O>53D,H+Q(#0EN@>646@??619?>:565540PNZV\][^^^YQV[\`_UQRORTWWSYQG<_XYVY[WRPMNQM@KDLDXJGOOMBHF;@9@GNH1<-%SM>:7:GGJUSb-TIM5T]-=>UKM_SU12865cfec]V[RW]W^0/0//2020/0NXMOMFKIJGBEQ/X._\/0Y[2//12\OC2>4-=:64,AEE@GKAMKKCY66E8=8JQMBHFK?IID@?PLYTMRBRXOCMMJJILEE>DRNEVL@GMOEIHD:BMF?=>D@E=H;@U47::d8cba,N_DB?@7aP6GMRFIGGCCH7GJJRUA_3>bMA5T,PT4:V:FCEIC?>:1[OF??;=ed\QIK4eN.YZXPGKNQRPU;TSWTQVPN^2#N]^bn3H+*)&*GCP+K< + + "-'-H "!=3#$)*,( )!$! (/792*'/-,'," )!.%&$))-4 + +$%&,*)5# + + +6/5B +  +`.    +  +    !-&" ( #$5(  +    1u< 1 LS +4B L1- + + 0 &+'&$2.30]H/37XR !lymWf4K} #,$ / ekOezPIAY1>-.$3?N>EE3"!"C<3!:2@&$ +*.-9=)V (OYJ/; ! &    <6'4/ 7 1$J6@ 4+:*7" + ,0:6'$##(0F*->48?0* "$!& #)/#,'# !#&$& "'0"%&.(%4&8<36*T5*5.(Oe,CgDV8@J/$YT3>4&1ARPC603=prF9KDE?KHKZ+/0'<7=="!=6'8Q5>+5/@:8^BBEBD699P//+)->C02241.5A%*'?7+$ .!8RFF@/,(*L-6FH7-NR,2/40.;/%OJJ`*:Y`SQ[Cxe`w}MltKUh\Q;DZsXz^=H]Ij]d[MWIkGlS2GetkLKvXkwy_PKCdVMTBXs|F\YbijiئѬ֎߯؊п򣎃ӭˁ|шދ{iWcGa~{YWPL,9):rzb˅A827: +"&)'8'KHMb[Y~_[yrsy|O`}rks~qecZ`NA-]|ai70/0,(*C==;:395-((*&#"$%%%#'#$#$# !!#<795=>=:??==??;;<   14@!"'""''FC?EUT88D6E.4T>XLH9EA5JMLR#@:.)_940'\KEBIA%)":$=53571/$% .>',)6=:/926,&)$%??(TOL9"14010&#"((*'8M:A.':P.G3O95ZTMVA]TI?2.2?:>N++*.33:?=B68D&'"%5$",UQPPI>8:<6/13 4!;6(4:S3<('64&**<.*:#+5AI;.257:;:C85<9<;:+B85-'.2$#%518-! '/"$''((33"@+*"#''!,;3% '2<3'&>2!'/&':TW(:8,DTNs?FNES\ZYb]mgaRaTYtKL:BLBFUf]milmwxmjolllejii`fggmh^Z\dih`ehfe`[X\UWcer7.683C?+20,E82;CTYXOHTdWX08G>RrUaa^O;@^kZq2CJhST4<3]@gv~c9<;?.8Y&+>e."!$-1C1RU225@I# 0())7'>%(&"$ Qjf]-,MT2//0j=38bDC]S@.$ )29'((#"(&*"%%"!1  + +  +6+,F.!0'$2%$-6(/ + !%$##(&&!%+) ():%''++'+(&()%,'%&)"*''))+,'$&&(&&"'' +,+'$($(,'$$%"*#&+ &')*%")'+++,++)%&(*-.(&'%')**'*%!/()()+(&$"$%#"#-#!&&$"" #($+$#"$+*3-$#,1+#&1)'0421.).')-(+!'"$%"!#"#'+)''&"  !#!!("#&$#"%## '%-)%&'+' &'##"%!"!'% *$ #%#"!%!!"&/333)4# ! 4-&),&'%%""')'$(+..$)%&!(%!241.(+<2!BCA>9<>A=8=(>=@?>B>:C$JYW\f8=?AAAB@zxy|yz<=@DEFGEBEEACIDCFIJJLKC('7%!6(+B255.!-GI:'-(%'()**1**,-0---+.003~{zyz,|~}~}~~~~~}||~|~|}{|{|~||{{z{zz{{|}~~}|{|{|||{{{||{}~}}||}~ +~}}}~~}~~ ~~~}|||{{|{}|||{}~~|zyz{{|{{zyyyz{{| +{{|}}~~~}{z{| {z{zz{{||{|{zz{z{zzyzz{|{ |||{{|{||{|}~~}{|{z{yzzz{ +z{{|}~||~{z{ |}|{{yz|{zyzyzyyxyz {|}|}||}}||{|}}}|{|{zzyzzzyzyyzzzyyzyzzyzzz{}~~~ +}|}}}~~~}}~!~}~~~~~}}||}~~~~}|}~~|{{|{|||}|~}~}|~~~||}}}|{{{z{|{||{{{|{|}}~|{||}}|}~~}|}|{|{|}}}|{|{|~~~~~~~~}}}~~~~}~~~~~~~~~~~~~ ~~~~~}~~~~}||}~~~ }zz{{}}~~|{}|{{}~} ~~}~~~}~~~}}~}}{{zzz{z{z{z{z{{{z{|{z{z{z{ z{{zz{{{}|}|{z{{}{zzzyz{|}~~~}|}|{|{|||{|}|}~}|}|}}|}}|}}}~~}~~}~~}~~}~}~}}~}~~~~~~~~~~}}~ ~~}~}~}~~~~~~~~~~}~}~}~~}|}|}|||{{||{|}|}|}}}~}|}|}~}~}~}}|}~}}}~~}|}|}~~~}||}|||}~}~}~~}||}|}}}~}|}|}}|}~}}|}~}|}||}}|}|}||{{|{| }}}|}}|}}||} |}||}}}||}|}| }}|||}}|}|}}|}|{{{|{|}|}|}|}}|}|}|} ~~ ~~À~}~}~|}|}~~ }}~~~~}~  တԢ֢Յከ鍐Ȃطʇȏԧȇ̋爢Рɔࣞƾ̔⋷ʰ܄뎜ǭŋĮĆꬴ˽٪̆Ͱ瑕Ĉ٢݃˫ڻޛʅשȷƢƵ鉉󀑓ޠю̃ս瀃⅀֎办ӷƏ̤ǭߘѪDZƞ󌒮ҦС꾋ݡË髪̇݋Ѹ㣖񛾌򒉬֏҃椈ȍ냄ҜނΕЉݗ̫甇֒ѩ鋵ֻץ򋊔Ԋ˫ΞǶÈ۾औވ߾£ɀ۳קɤ䫕¤є؞Рʶݸ䯘ց힄ή脀كրӻ㉎̀п􋁅喃􄏎Ԇ€ܢɉ物Ù򋾴ȸߏ듆Ϗҿ~z༮sɹemه~ڿ}vɶyjhgf_]f_dgYML^abbYW}vzÝjӀ݀ϡ~ճܑדըƁ͂еȼ㱬ɷ᪠ٹ²ȧęʍĽ̗Ӟ̷ǰɢ畺Ƭν¸򊂈ߔب֮ȃ팀ð䖀Àմ®áʟ؏ǐՃĵ쎎ӧʄᾣЅȿξǪֿʾȻןϺԀ՛ʅӵն׼ƒ֭Ψ֍ľөҬ茞ùퟙƯϺ撈ؒ㦺ٍ܆눣㎐Ƭߵ񀨸┚ƾLj亮Ϣ҄ū򊒎ꈏ퓕Ѐ򁍏ᔾܨ삯醑ЎƇﱭ׽ăʾĶߏɜ»򵯌ݵ󇒚ֺ恨邍ʢӨþķжħî˼ﵨûĐϿѶϴྔͻ׿ңդ쉓ÿ􊐍Smn8;<>><;<:999;;9886hefl8qomlljokfff67fceaQd8;:=>>ADB?@B==ACDEFA@?><<=?AA@AA?>??==>?,=<969;<;9:;;:;==>?<<;;>>ACBCCEDCDEDECDEGHHGFDGJJDFFEDFFGGFGEEEDCD@ACBAA@@ABA>=<>>?BEFFDBBCBBDB@AABBCBCBBCABBCEEFGEEEGGKJHHOZWQEECA@?A@AC@ACDCC>@?<>?>;@=CB>6479:::EEAJOI?8=@BA:7686da56d8;@F'/.*2/)$)*+.=wk{QH+IO>7c4S$#%(+.17BHZt{kZqhOvU$*,'! 5)#0(15$!4=44-*.)%!! -'G8(!/9$/BINlVE7?KGbunlovX{V\xoZ;a^eQ\lzrdlTQx\9$nBl@sX]qbIqZXXYcezdL>_?U,#!>;kfY;zUKYtkX~/374IFG.*,! @\t<)K+)8<>44DD8N'&@'#**.1D9)**,=)6SAJLJZaf2J+0!!%1)4>H<1!-*--+522[10&+AKizUv+ $+2.TCQZH8:k\UvaG,-,@Lj]`7lnH~MQt_XSEDI("PR9IQp@%1i4%15:+155@+,@&::ED\7GIiW.F4H6mP,AonYPE1-=(*!%)5+%(.+:%4XXxamXKPAJSaio~{||uTH-=898.CWK?NI37VHE (>0Zl]\kZTyenReKGZ+C--HWA3F<=7RP?AVA/FNU`Ht6<=6X^PMB7>2=KoOrR/KnnR.329@62B6YA8C9NFWTj[R>[d]VUQ1pb[CIjej{b@OaFPsC1BJD:83GL"'>c9MCwIjQUq;_G\XLMEOTAk^KN~ng{K?HQGQ;>E>8IIG824+>8FGE53GHLKSL<.==8Q0?:;>/2E<9MmWckkuU\Z`D>NS?[U_`qxsohgi}pXslilTjX}MgP`jRxLOlILOS`StRUxoQWfVv}OWS[UPJGreq|\_nOQ_LEIEIyWKKSVVRITTpiFMLQGMPsMQTV`pM]pzppFJ[UjSbaRerqSgTWi_j卉uxWv|`Tmj|ςc}gVc[}mmqzwaxR]aT[Ŀz~ҷtw~݋ʃwȾɛ獪|zxxuxy{ne`rnqtojùϰu턕ӥwsځس|܉ٔlrf߄χ}|~u@KWO)DC;9;70++,-4-PNH>?@@@>??ABITPMOQQ)(),.05>H%()0//023430+### /g_x`XiTYhJl\^Rb{PQT[|ghgba\h^`a|^ljVsgWyqrrnpQo@TH6if?+-1U9>Nalckra[VRVbb[@L`\RVN{st{o~j\g|Jackzn^XY\_bdpy{@Ck}bKGR`bpdccYXZGFOW[XfIACIgcKEJIQh39>56/7>;lVW8>><`FJVio955358cPocoTbhRsWcrnWUZOiPQ@==;<=85763233.0.26:>7852:=37:5/:<8(57@-2388847743.4:304^gEdMi]aWYoxiyajmh\>HAS`NU`FubZ\PRY\`bP>F;8>rNV>EF>6M\lhbdsBXkJQrL4,0LUPMNuNBC8POW_pM>=S^^GBLdkiGqzbsWPd@ljVQ9XU]Y`gwZAB3^IHWBZA/1./0>VQ@61\7;W6M,-%+*LL2/,3;;5-9/+)&$A0_AiF66)X:^8@=`[GIUAjn60<5&(-C5=Q(D;A81ZX>.>"73!8:&.E?>B:<:89::96531565687370W\4754]58T^048532346<:497034;4>988713523/Y34454.-OQ03]/^[W\232OLVVW[080YUSVDM343-/20;ZCR9755604>92472X[0.YSLLKLFEJOTQ1ZX.346433.N19Q2Q4\QRPR;M)>HT4541WQC;@37@A?:57;1]THRW\.011a]YZX[][WTRTPUTTRSWK:D1XXTXVORPLLKKJIKMFC?HIKEEAHF4=HE;46[26?K?1)JLONNA>WA>2.50VESQJKQXZ^_U`\TW]c`TT?KKHCLLUQ=R/2:2]MRD4+SLKE,?D[_R.20Z^VWY0.-ZPL=MB-=9331/?DFAFFFJFG@2_cB@C;PJKOK@ECECFJCQNOJNSVTUHHFLHBNKJCDQPNRO@FHELWKLE6CPH8;BFJ?8E=>43>866=2:jK][bLe?bD>JQLD>FKM>FEE@FJICRN]131AORaG;256:HJCKC>>:3[SK?@;6ad]UIF=VM9YUXZQIJQRSU`aTWTOXUM]54EW_blxACCFDFG|~GDFFEL[VBHDEBCJJIJKNPTGRFTP@Yq?TaIklAEHk3DxKWXRQQONRT]4_b8;889=<:gk87jf\a^aF655346887886863332010+3%)  "! !(0/+!!  "$ .-+*$/($#NBC]^4s`LHKD89?Ok<;;V=GBDA;>8:IV() y{DYO7@bUQJ;s|n2L_TE~RpcBN]d^=P/LW9yDAQ'!-.!&,;4244@;-3%$"272/V.C +  .-! ,T=.    )!" 5$".1#)& !'", ''*# %/'%*,.#$! +) $ +:(* + (D-6# +  | Wf(  + +    +   ',-  $%F  / $  +  )-<(    R4,V(8"; &!C &'")+(*."52K;!&++yf= ;7  + +    >O~rWT7T13#+-,G0386;:V@vkA %0$ ! :HzrBDvUs<.ALM88N'3(%, @'#")'"4+"  T0f#$D,B%C=$' %)'(" (GAGYB")/5"2#  4#)"/1*3.)'$*+&S>6$-IB5R^Y?P?p@^MP\|za{\?]OUEf?P^PrrqgKdSAJFeX[]hbmzoVgdx4>`F=Bf_pxoӒ˂ֵۂڒ͂غ󻺣ȰƶɨԶ~ᑕշg^tks8ls~X^SKCV1&=me딌}{pz9AIA(;%1#J?8@?EZ^rxcsvxzuqwwu|~se^V1P>/iwch3.-/.&6C@:<9;:5.$),%##!%%$$&&#$)'" !)#A?:49==;:=<>=AC>>@A> #  >299,.:3M2>0IFH@GGHK*++0A7;>9;;A50;F@BA<::.*1797AO.'),?=,*.-2A#) #+NW(C@:;6682316!#&'#4/9*;D:/F1PM2/9C3#+,*54%9:;69@B:<8<-4=B=2 (>) :AA8,70 " ,*&%!*,-,:>2(.+(%-$:<+#.5,2-#419)"'B:6[O4M>IWCJabQV=VCY_`e\`OHK_UgLVXZSQUPFHFI6;SOSX^^_ciuxttsiqnkplhbnkhkd^\ciffdjmwiZ\aZZ_^OX]/0WC?(231L56=OV-)(&&!1#1($,&0)!5E*10#GB!$%@ $&#!!"# #!"$!"!"!%"""!' 5,$!%'&8&('&.% 23&)0+!#+ FA 12!']5#7 )+!&  ,$)1!)4)J6:9?:&7)!.'5@7+.<3&9EO&!# %9DDEIpC2- 13BN`E:7HRT@>GZWX;eo\m}Q;V7gcMB(MR[U[aqP:9+QB=@.P;$# 1EC6.,N04L.>69&"&,,$&0$U@a>)J4S135YP<>P<\^- *!,%0=/$$8;'( #4,,+- $ + 09C:@#==FH>?>=B@9D)/CS[]gr=?=@?CDz|}@>>865<62>58=@B@ABC0,"(("2= *0$6;"$&:,M'*+(''&$&%+*-4322-1/0~|{{{zzzyyzyzzzyz*{z{{~~}~~~~||~~}|{|}}|{z{z{|}~|{||{{|{|{|{{|||{|}|}~ +}}~~}~}}}~1~~||{|{|{{|}|{{|||}}|~}}~~}zyzz{{{zzyyyz{|}}}|||}~}|z{| {zz{{z{||{||{|{z{{zyyyzz{{|{ |{{||{{||{{{|}}~~~||{|{||{ +zzz{{{yz{z{ +zzz{|~}|{ |}}|{zzz{}{zyzzyzyzzz{|}|}|}}}|{||zzyzzyyyzzyzyzyzz{{}~~~~~||}~~~~}}||}|~~}~ }{{|||{{{~~|}~|}|}}}~}}|}}||z{{{||{|{|{{{|{|{|{||~~}|{|}}~|{|{||{|~~~~}||}~ ~~~}}~~~~~~~~~~ ~~~~~~ ~~~~~|}~ }}|||{z{{|||~}~}|{z|}~}}~}~~}~}}~~~}~}{zz{{z{zzz{z {{zzz{z{zz{{|{|{|{{{||{z{{z{z{z{z {{{z{{{zz{{z +|}|{{||}}|{}zzzyyz{|||}}~~~}|{|{|||{|{|}|}|}~}||}~~~}|}|}}~~~}}~~}}~~ +~~~~~~~~}~~~}}~}~~}~}}~~~~~~~ ~~~}~~~}}~}~}|}}|}|}}|||}|}~}~}|}~}~}|}~ }~~~}}}|}|}|}}~~}~}|}}}~}~}~}~}}|{|}|}|||}|}|}~}| }}}|||}}}| {{|{|||{||{{| }}}|}}|||} ||}}}|}}|}|}|}|}|}|}|}|}|||{|}||}|{{||{|}|}|}}|}|}||}~~~ʀ~}~|}|}~ }~ ꂁ҇»̹άו瀉̪ͤ눸˘ܞ˫䅦ۨꤗߺ΅͸ʼnϩ͝ݷҞ܊׀ݪƼﱈ̙¦ة낢˦磴ᗓ⥡¼ɟԧ堩Έô£݀Ҙ啝Űɽ®ߗҖ幭蒐ߥښ萆Ǡɐφ睻㷗ҬÙLjȅť΀냢߰ѢěŎ󂱦ħ‚ʏۨ崥ϕᒯɂـ═󑸏ܑӰݷ۬׫ߔфĥŋ̔꧁łꍳԈ€۲Ϣħ󎌦ɗᘔڛ܎Ϸﬞ삪ʠâɕΛωػõƹΪׁĚ̎߭ғʴӻˀŠ̄蒗ʿˋйĽ׈}̾ҿxzֺ܈x߹ʬċuwxf^ZPONHGwHC@XJWOtxotfjrtyxڷ}{Ҟ߀}ǰƛ䍴ġՆ솑҂̯ĺއޙ犗̩ɨ֢׍Ǯŗ儇ׂ´͑񀆔ℊ巒ᶔ·̺ź逅Ÿ􊥾㴹磭ƌȎ롉ŤǼھ܎؊悖ͽ·Žŝ׬иȨ緅Ӷʼÿɿʙ劄Ղ˖Ūӵ񑦦Ⱦ¶˳Ⱥ˼Ļɺݥج݋Ċ±톆ѿǶ̨ϳÁۺ̋낅㥋žҔȲïբн㿗ȑ𮟚֥쿆őՉ򘝞鄴ƀޘ҉ȶݹ떀臊Ѽؾӛ׿βɔ·򃎈߀ۢ܀뀉։یꫩך€®Ѕĺą㌇²ٳ󆌇ӼմȒ긐Μ̡遃ó޵̿ʾ햮ʩлȾ䏸ʮǺ½ڽżãϽɉŴ􁌎Ľě໷ށҾ ej988;<=;:<:<<<887lkjk89:sijmoofa56678j4)If;>?A@@DECEB;;BEFF<>?>>=>?BCA@?=?>>>@@=<=:43478;;9::<<=@><;<<@@@===?BCCDDCCDC@@@CDDDCEEFECCCDEFIIIXGGFGIJIGFHDDEDDGCBEEBCA@AA@?AAAD@@BA@??BCCDB@@AABC@CACECBDHFCDEDBACDFBFHK\aedfTE@?@AA???@DBAC?=;>8???AA=137:878:<>>9C:6>=@=;<;:7548656:4^R6HTEpMm;GdY\\QAF]`o\g^aU^h`@=HEiX_$b}llqcwr^qpqT*hmmb4'$24,8>/>{Q''&#%&+./4655qNR^z_q{Y`fCa+ <(-C72'%"%'+'.!'*&('-10/!'8(0595-17=:WoDvv{ao]rZn^_IRugc_{tmeNu2TcYHEi~}mXchhYd_carI$&&&"4/:qOH(&'*-+0'% $,! NaZR_DRqG"#&.+8iCImTOInCZbm^4-EX;@^)#3zU>XCND`L >>::rd,J^JU`jfznr|GI[298K1ZX(PONnMnzgG9;90H7wKdVP9ELkSNf37';P8?>mW}j/>Wk??A>CF=89=941/+/35]U79:;;98;@?CKOSVLCBE'+-08?F%'+000/.112/)%,4*1iiOfcal]i`pqo[IHA}oa`gm|b_kgjiolTWVdFOxsfrJGkYQB[IZ>7EOFAfTMwebqncV`__]`DDfgPCtcyBFp\Z`gNUddnk^QVQUVUbjnwHEJ^]XD`^[`@PSYiUJJR^PEL[osXfbH>AFPt?PZ2383|Gt8^MPTYXV)TP*,./359JTHSDCSNC@tak=JHb\G;LXNZQJdvw>nosgb_FUJLVkqgH^rbsPTwGOOQc]TNO^ypcfwtlPa[co_larggluZqi_oqlwXXTJMM]ywVkuTimL~zkhee]jjjcgph`]W_qg`_SXL:ppnnlkgfjrxpisz}~wqjikddajdenknqqidbblmkt~Yi92WK3<;;=:;7;=;40/0341.?K:6;::7683:DGGAHgfZ[d[JYG=PVDCCLE:[=?YRGO=RRXM\BQtJfNx:HImL=\L}g|R8[blSCk:TQgghfbslhaHA@hGPB>/-'17JM/58^;<`5)+*&%'MV76254A014/&&$!'RM?gA<6Q9hDK_>O^S6[@Lv? ?.)6J>7?S2/J4>1V[A50&48>%%2:0#DS@: 9%"#97@WJHLNR@=F%0W4U371!(((BRHRRVOC?0Y>6!ALGBA;=001CBBDD==769884242176367544[Z252202551]/4954156::559344895==83403100-03575,3VV.110\SLV^9[[KNUVUMZ0.X.0HI/055012L0:57222/437>:313241/-NMLHOSKNQTZV2U.3546540K*,?RU5/TUT>44IP]43223ZPN7>AP:FQWU\]D*1758:;?A<:792STSPYY-46202]ZYZ\][XXWUTVXSUSOF7H1XWTTOLLHCADEF@@A@DEEDJJHINLFEDADD=L:B,DF8+MCAAC6?O/@^`XHY^[c`]3642]1Yb342YRUNBNQAXRX9I9508S?/5@."D@b7783VW`3/.W\WNS\XRRGB5REER[5476CIJI:JIFC=>6aX:EF:8A?:81;9=:;288`STkG_AF@kdPDEFBSRPK6G;?AIF\M\R65WSFUG=4478HLDHDB@:71UNA@:fc7_TMJBLT3[TTY\OINRSSUZ\VUR\YO\3VFSXanw>AFEECGIFCCAJSMCs^WN?]Q\e8<;W@WVPCIGGS]ceQRPCYki#xWUUWQKOIOXacc557=C8eail9998ljda 2386776=678972.5.2%>1 #05979, *(,(DD.B.:UEOOB34LS^mz8dG<70\Qbd@Bw`1+ +"Bqcw:zGIe]KcMQaEUX=NMZSH/bKUOdNWE!#*-82 &'%!9)5#-1869uJ  .6( +! 7)$*@  (   ! $$&(' ##"" ##H( + !'5++*+'$%1&)*#!!)!  2,$!'(!'4   %Y@ +    +     +26!.)>)- 0!5    (#"  YfK.08'6DC&< "0W&()2#**91!)/ ;!-?``+ ++ + +  'MgUZ_cED026860L!&*424A" + + *-#/)![KkEZFFF<:J>r:LG?$$0#-2 +2M('>=C1*0'(#2X# + B.WB"9/^E(  '(  + /7D/915"-!  +! 0*,3) "3" (>1N=#6S36+H?$5/'! '%"$,#$(# %(%0&# 515E+<>1E8A(+30"('+# $/)-EH[BIWYG>A88<4G?23K>/ARJPS:75YHKVY^uvmv®ɭ[G?BA]WYiv{ăeY@LE4C=^aHJhgC::oW_\pH`9K<_LPQ[UՂލ˯ԤŹӍŶƳ¶脆ָ͍ܺ߃˹qpmQIlQ=;SK/@*ilw}{{GKHE:..%+#2)DAEeb{^[ZZwmudy}Ss~~zrgTN1+;Mu{o41.-./(CC>8;8896+"*)&" !$%'"%,$%&-+&$#$(-/TM489<<:9:?<=>EGOF:6-##  =49 ;UY>-%GC9B#&#!X6T$;36:;;:72 "$05,ZS/($42,*HTAG'.+<9)!/8/4..;:66(4+/6@A:%!-'1$$2#%"'3)+)"$-,,,+2D02;H2I.+M0/=92 /@-'23<07')*&+.8EH>]0;:);IX[@4hmkik\VRSQa]^[blc\YRS`VONBF;,W[\YY_bdhkt|}pfptvxvkjecg^`Ya[aigkklbSLU^STWI@4:%%?6$+.R3):C'.*&$*'%%//!.$-.&<5?:13'?7:A<'+&<-"!!#!" "#,   "#"'    -  (")'/&"(""5#&"2K*(!%%,%.  +)   ='<6E0?E   + %% + + (4$%(<%(S7)0165"#*0>ToM1:-9>0"* +,A3$H16TH7:$15A>M8Nl?ZFh5BCZ<6QGv]sH+PYkS>\,KNjg`]Zi]ZU?<8R3E:+!"(6=&-1O35R*!-(+A%6$##'#&" )++%()$%*),#%'''!)'"&###!%'%&'(*)(!@!%%()%',($%%%&&*,"'''$)'+*"))(''')(*'(($"&'&'%#"#  ! %%$$&&$$"!#$% " '!  --.(!,.*/,)*)/)%)%%'*%("#0%&+%)& #(%"#%#%(,!!!" .,!!"#"'"'!" &"$"!%*,)%# !%#""&##&%)%%$# $$ %&!$ ''"# 1+-;$4#!;5)$%&$+)))(""($/$*'')!(&$441+)'#.4#C@@BH<9=@@?AFF@>?EC:D'FCOT\ir;>?>A@EEA4& #'%"?4.)-)04 /#,)(#((#),12**)".:6E+)))&$%!$),-- 1.465520{zzzyzzyzyzy +zz~|z{{~}|}~~|~}}}|{|}}|{zz{|~ +~~{{{||{|{|{{{|{|}~~~|}}|||}}~~~~~~~}|{|}}{{|}}}~}~}}~}{zz{zy|~~~}}}~}|||zyzzzyzyyz{|{zz{|{|{||{z{z{|{{{zz{| }}||}~~~}{|{ zzz{|{zyz{z {{zz{}~~}}{{z{}}||}zzzyz~~yzzzyyyzyyyzy zyyyzyyzzy zzz{|}|||}}|}|}}}|||{zyzzzyyyzyz{|}~~~~{{|}}||}|{{{|{}~}||}~~~~|{{{||{|{{~|}}~|{{{}~~}||}~|{|{{|{|{| {z{{z{{{zz{{{|}|{|{|{ |||{|||~~~~ }~}}|}||}~~~~~~~~~~~~}~~~~~ ~~~~ ~~~}|||~~}~}|{z{}~}{{{zz{|{{}}|~~}}~}|}}}|}}~}zzz||{z{z{zz{|{|||{|{ z{{zz{zzz{z{z{{z +{|||{{{|}}{ |}~~}}~}|zzyyz{| }~}~~~}|{|}|}|}~}~~~}}||}~~~~}|}}|}}| }}}~~~}~~}}}~~~~~}~~~~}~~}~}~}~}}~~}~~~~~~~~~~~~}}~}| }}}|}}||}}}|}~}~}|}~}~}}}~~~}}|}~~}~}|}|}~}~} |}~~~}||}|} ||}||}|||}}||}~}|}~}|}|}}}||}|}|{{|||{|{|}}|||}|} ||}}}|}}|}|} |}|}}}|||}}|}|}|{||{|}|}||}}|}|}|}|}~~~~}~|}|}}}~~ 􁉑ρ炎ӆȿ҉ª򾋈ȤЄ⍓탊ؑՙع碻ߏ丮˛ۥԾ¿º韓߉ʗՕ܀􌄂댇怊鐸լ˓怆ʼnʭ؏Å兀ˈš߃̶߁˩ŰϏȜ⼦۹׀鲔錴ўէ񇥦õәȭŧ͈姘󊃙Օչҏ֤рƒ޹ƕ˸疌Ň駫ˣޚ􍪷ǵÙЕܢܟdzܬ΂҃ҁŻ䘧̄򌇉߄ƒ܏瞐ѩ݀Ҏ逯Ŷᮑ瓡Ыᖛ팝ץٚދ‘֋ڻêâ֞噙ɹŭꎛѻ汹󇫝ҟܷи棡ՇŎ擤򍃰dzေՈͪ́ݽ𝓥t}{|rՁ{٫ʹɯz̹˿zsz瀱Ƨ|ubXSQOJNJ?o^u{tu{~SPfv{nppzv᷍~兄{zʬ݅լۓ᱐ㄧٰģ򃙯ܔꉩΪЛȕÂ̻ᵫ펟թ𜽳ͽĀ֑ù՛ㆣ ǟǭĉűں߁ʽ򉉧όᛨؾ̯̾ʹځš໠ĽІְȕϵǫڼℊᄀŁʿΥߒŊӇВꢋĀлǼǺʻɽ˽ڬؼ䍃ܷؗӤˆ킮éꈟIJްϡ𕙓Ω؆⎙왽уՉˆ󉅋ԦҨӬ򈄅ƣʣŀτ֖㎧񀖅ӑ꾘ߌվɻý葌ηɘܻ݊Ӡ킈գֽ݀ΦƈʀÝԽƇ̺¶蒨可𛒵􀃈µÒ糟ᆒĸΦɽƽ㿿˫ϮӻǣɿǫͲ؟ʻīڼԷ^mhimp9<=<===:9:;<;8m889qn9:<;ojllkljhgh6;?9M8.R859BFFB?=ACFB@BDC@@AB>??>==?@AB7T07-L08><=><;=>>===;<@@ACDBA@BCCDCCCBA'BCBBCDEDCDEEDCGIHIIIJJGHFFDCEHFEC@@?AA@?CDA@ACDA>@AB@AAADDBCCDDCFFGHJIEDDDEDEFEEGKTUSSF@?BCBCCDDA?@A@@AA@D@<>=<>?=<357:7AB@@@?;<:556gl:@6h^JE@CA6lT==ebnYRiGZ^_dfY}XWoO,C|SaiuHrWs`di{m0\_Z_TLO5483 (),*/2701448+++13/-LtwM@*?KubpQ,,*'+-.1/`V-/Aed^`g@bp{[rxWc751,!G,#$  27"&(.1;5!?MA0+4?=$*').1417FOxuWqWkyonEeQzuIQS`h}n~[^jXEQj6gG:F}rTfMV\i}}SV`f3?M==+86:[:BlnYmltHQ_57Y&%NwEP(=7* 3Hg\;D05M?"ALH+-4FG8@T118,.926/+0%(8QY6=L>ULQw$4J;3iSVM[bourlT{wp}k\BN~RK_D#f9abmq{tXS4=EYfAv\Yt/pK_[Xo-8-D/7*J\iAC7G[vKkL^71.*NQ_kRV>CCWlF@I]82/V66fFW_VOVm~BIB9>A94P ,#VQ0SZaB7LLXEF:]^>?N^QSo7Hh6GE?ADIRZD9HG84X@G@862m?>?2:@Fsx_^jpbj^dSVTUT43G9IbX\WtTMov[Zagnrkipdse[}jO\`dTzxaSWd_Wc^`ZVWJ@zx}c~UQfwqplUQsbUo\~MTzjWaw{acB][TjvWiuw}P}KxcdYlftu~}ta]y~TXdZsJGOK\sNWej\]o^hrvzԶнoMIiowys_`tNjziaVzqWrjsrpQT[gkr{rڇ٬ѽԿր|}tvᄶʹ}oigf``\Muibwz}𾘸ϱ扇ݺُ麖ЫǠws|膝ъ}izPQGPJhI@?=?ASD?>Ih[msNPZ\hpVSv_gxrcuvU]JxgzughjUU4SH]~=<=;;53NED>?=?BC>5??A>?B@??CE<678:;563_`n7j[FCNSYWV_`\crv=:856588759>EI&),,/0/341,$$M%'3V3e{qEz;OhLVEKlv]}z~rprirkdid|y\lQgrZqgveNrEkW`Y<`S?mAkdq]Y]XaZOak`ZWd_XEWYJyyBFDLA_]clNGG]]k]RIOONKIKUaou{IDRTDPNNxsztDqBAJDCEPRB>BY_btSS[ita<@MUo`OB58t~alkQJIU,**,.--2B_SMk\cM~JaFt|zu]dg@;>>AIBJDYGGXauBodalSTGWUHT_e_~HLNK_eH]ux^QN\ggb_moZMJRX|WTgy^dnfVv~eayicTrUY[MXLPahvTj]iR}}megjref^]`_crhkrcgfj_^RGKC@@>^;;=?{yshuoqyvtnhgnc`\[ZbkffcfMRqird^W_WyWZ31=B>=?=FDGL\EO~jLM[kUf]tKh]I68<984232206?=9472507:24==9=;;464/008@955;8C;77.4762223406/*242226JT`NLjmFv~oTJSfQ{pOQluj^ItLRKPxnZ`]xhdu{wcFtBemZYGQHHRTTFq>Qf[TKGLOhawy{\NJH;IG=F/{u[rYK{\_NTkNCz9XF?cm>PEcSI~>MH?NIJKPHqWUM_QFbvRAl8iF>>WJ5DH9=@amI`GHXL\\ctSsjph@=EHD[|z}?7h]GLXimdHA2faWh^t>=>jz|`>Z9HMG?/X?/-29P3<9G)P-%%HIF8B/+)89770,*#)49ee1:5B5PC8;BV_NLhuIhC*0##*(/29*0U>LM^HH<091=6-8+++J.XI;>$< 5(2:QG[M?7<;CJGCM2:1''-V[QPSE@E=[K4+_LFAB:0326CBBCA?97394964122445466632V^632024640[2485553566567156;66=;;994WWRUYY0167__1ZW[_`\[\WXUW[XVXRLB404WUROHD?831676<:A4\2=B92E0CB93FMMIK;:_Z4MG?CLMQ=DHJBC@IEEKRLSWPMHJGFNL@FHMKSKDKE=FMIHGJPKD2ALA8BF>A=6A=;41;7`>64::haI_LL^Xl7[PAJ?7ggQC7C:<@NRHQY-_4`28IN751:8=NHIEB@<84\ND=8ge5kYUFEc[?[WXX\^LPSSSUOUWTVZ^VVa4@Z^bjzCCFBBFRKIEIIhCheb_[XXZ\ZZZY\\[SX\WGOQHEQPU^e[NDQ>:NZF_X[VUOUWa[[bc2468974efelmo77ppmk622677;98576353344 )$)$ ++ +"%*+)*!!13*+(" ?>00PLYJET/duu\Uh5:?@:5gOk9:`Ag:^kR.A^JX0d|ooKi;bVfiCGxnHYPyMJ?D<@h$+$ $'& %!25=("!-?aYiE" $#&0 ' !) /      %!-A2  )*"&%'", <(2'-&"+##  !,.-"7 #81!*:&$#D# 0 +3XN#  +   + + + +   +&'-5,+2/6"&!  +      +) + + SO!/"! +!!"%!/ /= "#%/(#5'$2+#)!!#,9#!JG!; + SFrcF[6mhH7%@=A7P-62A@09Q~q +.0(!%DE([KWL[^onYG9`UTEAL6,J%@?/+7oC 718BKD" , 816; 5%83%%< + + !,=jO '5J#Mo0    &'  + $%=NE>DyNR!$   -8%"2 )(1%&':;#%\*0<(&9%6""!&*,"$%-!&"#-+,,+-# 7$1048ICN(4&5(*<,0&('*+)%:8>:I1/LL\?:=6=Q><:=6>86M?*./2*BG9,,652944/*1V.'IPY\^FW93?Y_`QPOPI5/I=/;2EG(-LNJ>45=@CHL65B!265LG6D0=HYQIJM0FK)KD79/:4=LGKJE94BF14:1@,F'/,4F2L7EGqEHXIPT]szlv϶L]Y/X2MNUmqldp?tNW0GREalKHZQbG]Zh`tH3[v6>GKO_􏈡Ǿ־׿ـ͵ó͙ˣ}{􋅓Ǿ}uvzzzgsH\IG) 535l▂mzKF:@5K4R& $%'0%4?Eg_p{LQ[_mza^lymˆ[aQjxzpiNL.F9Nu62011.1NB>785783+$+('"!$%$%%'$ #',.'++U[d3cZKIT[a_\`]X\mo:8402/1,-&"%$# 0M *99-LA-Q,;H5:-.>F5LFISDJFGI@C=34:30( &YbEFG8408 *?7+F9B0JL\-8-MUSRAFF*&$#&/+2*7'(577679C24)2,'1693?67?" .0,:6" $""+,"',;;/M.XB.7.-?>0+!6;,)8<:?@12,8L20/PQ+-A#*2;->?J=ikn^TVYeZZSTXZbpeeeWZYZKG;4833322266njlzoblhfolhd]]dXUPPPYa^]XV3.>JN4,)/&300 (--'"&(+*),('((.+'$)"$D6N1($.:G( -;??:?!7- -0( #" " ""  "# "" $$""%#/+!1" /.''%!)8/&*&/1 +,( + +  !!-)7=4>&>[5 8(  .""6-%15/(#"&+SE9)9%'CS.&  (#,*%05YhAO.+?8NPXlLd\bW88@A;Usrs71^UAL\kgYB6,ebR`Zk769gzqK,N1470,$A-$")/B+302@47806$+,)-%'1``*,(5,E:03@A<@@I*AUZ^gu??@>@BHHBCAC#000--+-++*);*+,--(,0-!&'$$)'(.1-&!*)1(.)+((%)*1,+.,//0447998~ }{zyzyzyyyzzz{~|}{}}~ ~~|}}~|{|}}|{{z{| }}|||~~~~ ~|{{{|{|||{{{||{|||{{|{{|{|}~~|}~~~~~}||{|}}|}}~~}}}|z{{zzyzzyy|~~~~~~~}||{zyxyy{|{{zz{|{z{||{{{|{z{||{|}}}~~}{|{|{ zzz{{{zzz{{{|{|~}{||z{{|}|{{}|{{zz|~uyzzyyyzyzyxyzyzzz|}}|}|}}}|||zyzyz{|}~~ +~{{|}}}|||{||}~~~}}}~~~}|}~}}||{{|%{|{}}|||}|~||}|||{{{|}~~~}}||}}}{{z{{|{| {z{{z{{{z{{{|{|{|{{|{| {{|}}}~~~}|||}~}~~~~}~}~~~~~~~~~~~~~}{z +{}}}~}~~~}{z{|||}|}~~~}}~}~~~~}}}||}~}}}~}{z{zz{zz{{z{{z{zzz{{|{{{||{{|{|{z{z{z{z{z{|{z{{|||}~}zyyyz{| +}}|{|}|}|}|||}|}~}~~}}}||}~~~}|||}|}~~~~~~~}~}~~}~~}~}~~~~~~~~~~~~~~}| }}}||}}}~~}~}~}~}|}}}~}~}~}}}|||}~}~}|}~}|}|}|}~~~}}}~}||~~~}|}|}}||}|}|}|||}~}}}~}~}}|}}}|}|}|{|}|}|}||} |}}}|}|}}}|||}||}}}|||}|{|}}}|}|}|}|}|}  +~~ŀ~}|}|} ξ񈛢茎Sý䍃܉Ƥ̙֓˝񌤧曣ܾΘى﷥άՍשڲځ튉򌩁怔㈣뎔ȼʰՎڢɅʌ͈⃠ءˎӌɴڜʷﱼš𹛼ƒԃθ׺ڂ뇍͸꺒ݘ읛ﳉ׏ޙېư̋˝6܋ĵ٥蝥ᇡǥۦƲȾװȹŸ俟钡닛əǻЦ̀ѐ݈󵨅É؊݂Ę˒ʯݮ垜𫂰Č߼ʾ׽֢г𬫎ݜƒݽ֜͑􀊧ڇīĺ§Ӫں銥ƴ䌦炡Ց鰿­ژ끌∗݃ӎҚڂطꞨϧޮمŃ݀ȢĒհ䣄ɞۑ뮳眕׉࿕oqlprpתو܀tmi|qXNI@@Aut~vpbcdpp}y}HN|uglnszxԶyvtr~vܡ͛󈏁͡ͺ򋺼㈞τ쉙چՀ༵֯ʷꌙ݆ѶȒҡㆌ‚̎ݗД֓Ҹ²ςĭϏ׃Șá͐큃Җȹ񐒃ѼwֱȴƁɿɮꋺڽ˿ι׎񀋟®μͼؚʽdz˻ú϶ɀ¿ʻġ䪅ܾᄤƪ㓯ԞՌ֛ܹԂڂ̈˷ͦش왑ފڒ얙斂ڭô÷Ȃő骧дစ߀ۛ蟓냖ჟ̫ԕڜЦ䞔ɲެΰ츭Ýʁؤîퟭᆋꅅᇉք˦ҹ΢ԴʇɶĖǔ夶񁅈ս޺ǬٮˁƭǴõӞĺѻ˲ɱ¶ൃ؀úѪ珅ԞÎƼڸۭ󅇎ؽˮ.ڇ񅑖pnonm9;>>?===>==;:97799:~9989;:q:sf`gl99B7.4B5T^2<<=>ABC=;>AEEB@ABA?<>BBACABDA9M[677988=ADDA>@A>=<===>=>?B=9>BACDBBCCC?>?@>>>A<=@ABCCBCEEDGGGHIJIJHHFCECDECBFDDFD@>>B@AAA??CJJEBAAA@AA@ACBBDEECCFHIJIIGHDCBCBCEDDECDFFGFB=>B>BDCCCBA??@?AACG>>=:CJGGD=7<==<=::AG=;;;634]_@=?oknLH(GA6L@=Zf|p@LOYSLyZPRQGfeMY2qOX`Tf4~Ynv_tfNe`2&a-Da9>P./&2I+708206861-#-..236[Tb|IUDPZVgXZ!,--3354,ZHWkklAVpy|G %4)14@6-$)&(%..7()--!"!0C-287H/1.55,1.5@?_agubkAS;Bpy}`Iqi4ayS=F4Y;7]NO[MD6dmey˴V$Nwd9dpA~Χkiqk~-VT))CL\rQK1#&-%0 /UvVA@1VFFH#K?553HiTINC:N?'),)5)%A51@03F@sj\L~xvJ^cWkzc{quU4='!/9:;;7BW;:2CRCz?V@eV-oMFUR[OxJw~caqMt`TMH*Dsy|WOMh:J_XrnpFPYM`]ANSW02E!@qiK@:Uf2.=5Fj74.3JBD6ch6./H*D5B6Rd_R_Oix\UGcW:FZ;OME7RNHNEj=NA<\_OUTELZTNFIMEIBFAw>G=7qgXPns[n_nw?_Qpm_7G(!A9IgsexhdacJTZWOhVZ_\^\ilgfjjm]gylscWJUZ^VVfel{TMHMJPSipOVOQNtGG`kIKwTywGKbb{{jmzUWKXtRYjI`[fIKWdv~qmUwxGJ}XEehrD}t}HN]HOPO}lokAMZuk~Xj轹ȼ~gTZ_xkhww^X]es[wzvrzbrv{޵{yspzzuȽ۬ߊwqtȠoc`UTT|wqY^}rx}ܻ}}ɟtuȾy穡̟זߥba{o}HDHRHLV(#^@Q9B,LU6>OdSpe|u{8Lem{SQppj~q_uoNX|lxxoaiRU6AQSu<=<<;0@NC?=>BDBC=9???>??@>;9:815:89669om?===ks{vtojoqqsxsm:9@CDABDC==DGK(+*.0/022-"$/y"/4qyJlmY`ldVSWZjTTXNkulstioUcjmcm_kklMuP\^CoivlfcpU^hF9;bqqhaaRLRWhlZXqfkpRM~}q}J~FQ`jbEPVXdVJCIFEA}IWYh\hqHEkdHSQTEYml?:6:j7=>B}{gHMQJkPJ@GgP>?VYy\45aKhrvYPJP)+.,0/139>\Mf|PRVKSAiuyrs_ZPWocpEH@jjrFR\WRdhgbkfWUFUcUM[m`ywfezZfr`h{t\UO]`p`XWbTMIKSuswObc_ZZn^Zgr~|fYzR{]lg{h[|zR\~ulwqfc_bach_\pneadcbcdaYZ\VKMNMJILKKIIB}}y;;>>}|DAJb[UKctc_iwH9F>@C>@>==<4:>07C?65682.7==7==-9>B>92/*794076;99;461../+039."-*-,02846=ThrMV`KyYvv~UaygQiE_eU[dowcq[KMzmga\_~LbXglZrrX^MD\RPPYI`NOIHOLQaEI]SNo~um^Uv}LcF><`[YSVs|_dI{l{jewJdhp\AJ7JQZxRGB>9JSjGECEUSWN{NE[VTDc]dVBNH__CJ:l@tbJ7k^X5:*@\SPU>E_RQItgi@S=:bEud:DaMbobYEYz_ad}m>{rc8n6YL:.<,'%9<./1,),&(Dkg[9DH6T8PJkM\1mn]Dg,(($FXF889>1J=8AX@-(7047%2>&:2T1J7?(B!! 1&)9LVO:KA:/5:6A^39./0*:=88E50X`234457856^R243313276/46654642<14564559868=?8/251P1003301.16310Z/XW\/01]U^ZXW]CWH[0,-P\TO0333W9F421.-/.69.459741,/3-SLOV]YYY[^31[Vb43421ZOBQNXdZ0FTF6J[TZb420`0_LEQ@JXL9DDZUMR\0256699;>BB?=<:92ZZ\XXZ_4163`[`]^^a``[\\][]XSSVHB>794TKE=\;:3>ED7C86=8:5-;=AA>9_90VVB)6;4??H:^To7olc^_^_eaeddfbc4786589977;<=>>;9986ighieffgbb34ghjh4jfaTGMb_[Z11411XUPSCIFKI<2N<1J5C,9BNJFHI@@DH?>78G[9LCBCEHS6CMHAH=HGFNRHOQEPGIJFE;7QMNKNQCJ@8KMKODKMLG56;8?BI;B@9A=629:51>=5A98[C9jVaRnReVSMJLZ]QA>@>)57-YT7@HR+9)-.  + #0'@H #""$iMIWT[QpBirY=V7@3W(;0_]81(1<7EH780<*1*>,(;81# 2JfXfGXHM`ZA:*.--+;-,.--/752247;25PLC=C1;:>L15C.<3B1.3=KJB@P^3DAD%(IJ3&::=$ALI>@'.3*/.-C:=<&1X?ROV9Kxyγ̶~eM?;>I`_ZoKazUG?X=DzUBPLTLS^~vRzm]r{[cāݕȸ卧ǀѿν灊ǥֆͳDžɡՐmw{}qphoW[CLs;@1d4`o{F@BG:=C=&1!04(=KdVufvu6Ojs^Y~vozf{S^mykjIL/1ANi43013+?L>9769;74*'*(&"!$$#! "!$-./-/3hf:9;>=6+'&#% XE 20"9:6:IDB@68/9QA5=-s7+732'>63+41/*%!%")!)05,'%+'%'(0/$'>;>EQ20HH@IK(@AE(3582 %**1(-"%#(1.-':DF&$!$@!'(+TRD032.@2-$'>0&&8:UN9!E:MQS<846  !%%42A]I828-7+COXSQB@69JAC*.+HII+053/7567AA65(-2/+5>3;1!.-8#,5+1;1*" ( "%+ECH;8)3USflnbXa^WWUUTUXTWmk`\^\YWNI?DIE?@>==@;ljf236302215641568<;:7'1,J?++3F#$/@%'+=P/0300+++))+,+!A5 D#,1(,ML1D1-)>+F5/*IA7%&#%'#$##" "#$#""!""#'# "#+%6&!2!$! $'+*'+$ 7# +  '&1!2:N9  1Z(.34 %!    ,2))! 8FJ7"H'-A=%  0+(3VOKE(*FAGBeZZ7E62R?m^5A[JYeZTzHU>LaDR70;|ZY]xd6pp|N)_.F<(/%..#21**9+!1%-(5!,1$'&:ebM*07+F,>AbHW,edQ=W3D/$(%,,*> $ + "2)@$0&( + +  $7B;+2.'%$1>!"*"#%#&#)!""*,+%$(&&)*&+*)',*)"+&%)#'##(.,,+-.,)0+$&#(,)&%-'+/--%#($*% *&#(,+**))+-+*+*++-,,**+,+,)'()!% +#$'% !!.+-#" 3*88711/..1-10/1/.52021231//233020-' #.+)'(&#%!&$!#  " *#'$!##!$' $$& "!&$%"%( ##""$###!" !!, 9-3)<(5--)''0/)"!#!"%"#$$&$')"!*%!t-/)(:7,AFEDEHD9=>A<=>?>?BC@@K)8PYclw>>?@=?CBCDDA58-,/21-/-,*-,,*()+*+**+"+/2&&*430)+/0/3)(('%%--+*,./68676~~ }||{{{zzzyz@yyzzzyzyyzyyzzz|~}|{}~~~~||~~||~~|}}|||{{|}}{{{z|~}|}~~~}}~~~|{|{|||{{{|{{||{|~}}~~}|||}}||}~~~~}}}|||{ |||}}||}}}|||}zzzyyz)yyzyz}}~}~~}}~~~}}|||{zyyyxyz{|}}}|||{zzz{|{|{z{{|{z{| +}}}~}~~}{zz{{{|{{|{z{z{{{y{&|~~{{z|{z{{|}}|{}}||{{|~z{zzz|yzzyyyzyxyzyzy zzz{|}}|}|}}}|||{zyzyz{{|}~ |{{}~~~|{|{{{|}~~~~|}||}~}||{{{|%{{{|}}|}||}|||}||{{{}}~}{||{{|||{zz{{|{{{||{|{|{|{{{|{ ||}|{{{~~~~}~~~~~}|~}}~~~ ~~ ~~~~~~~~~~~~~}~~~~~}~~~~~ ~~}~~~|{z {||~~~}{zz{~}{{|}~~}}}~}~~~}}| }}|}{}~}}{{z{z{z{{zz{z{|{||{|{|{z{{{zz{z{z{zzz{{z{}{{{zz{{{zz{{{}}||}|zyyyz{| }}~~~}|{|{|}|}|}|}|}~~}||}|}|}|}}}~}|}~~~~~~~}~~}~}~~}~~~}~~~}}}~~~~~~~~}|} ~~~}}~~~}~~~}~~}~}}}~}}~~}}}|}|||}~}~}~}|}~}~}~~}|}|}|}~}}~}~}|}||}|}|}|}}|}|}~|} ~~}|}||}}|||}| }|}}|}|}|||}|{|}|}|}||}}|}|}|}|||}|}|}|{|{| +}}}|}|||}|}|}|}|}~ +~~~̀~}|}|} ұ탑Ļ툇Ͻϖ䃚ݼġ緸،Âѳܫݸ󆗶ЏЩựٿŀؑ찲Ḭ̈՜ԉ҅䣼ފ⊂󍏅ų疸Ӧ櫆朲рͮ¯ф΃֙ɕƻ׍㾌ݙւϓŊ̅ـ怂֛ܛƞѤ砰ƥ哿˳߉ԠԨ肝񈁋ڝŎʈDžӃυᅨіܺӷԇ֥׉ث֐֦¾ԣȉ߀Ċ􋁴σ灅Ǭ𛍺򂤢ŖԲ݄̓֍ΌݵȊꝗٺƮꗝ뾰ʁ넛ߴ陣镡򉐿ꉟ˗迁ޅЖ􂓍أͲ̺ܙ̐ǖὧޢɌǙЌ㣻¡Ʒ{ʸhr̸iͬӲlxnllTJCp^^j`MPROTVif|\v~~nspғ޹s~ΗŃr}zÎ݈̄ƵꉐԆ؁ؑ͟ſԊ򵣱ȳܝإʷ˻ʼ􀂅ƥ񃒙ΩѢͮ迋ó邀ۿϩ߯ˆɋǹδҾɸƺΧ¯ꀗ҃ږ̹ط߉̛惆遌Ȧɷʱ׈Ƴ֮ͫǷĤӷÛʩǺҫšɳѽ݆ՉоǕט䍃冽ƽǽͺѯļĽŽùĵߍȾ̐𼤲ۼݾͣ䤯ݲδؖݡ֯Ԣٍ“٭ƾ敦뗀㥐̆כ̀™ѫьҡľٴÉظ乴ޤᑗވ܁ɬԘ˸ά듐򋗓׼҈ĵ隝˼ ۀˍ򂉇ら轸Øӹį贎݃ѿ̈́ɲ㈦ӄżفޕθʶ߅ÖͫĸϿηɾƱóíϲΥ³٭ҳҿ袐Լ㆕mmllqrom8=<=>@=<==>:988pnnn8:=?@BDAmdfd1-845t^c\38<>>=8=?=??>>?>>@CA@BDB@?<@=1S\487756978:@CAADEBABB?@?BCBB<9>?@ACBBABBACEDA=>>>=C>>@@CDECDGFGFHKKKJIHFFDCFFLDBCB?<<9;>:<<6;=?>=;?PJ@>4>CSD@h^77Uf>?9Q^nUh7lBEiK)033465/*(Eq\xhtVqVwZYQ{j_r^"((8072-4.2& 69,'"&"! %C)'+%#:SO22(/431328>^xXbSpj*09ddn}[\SeFV;XUyO:d=hZr3>zrmFCgsF|ʱlejQEz(-BFb1< *+!; %8t9>EUor=B<:vb_SnfecnJLD-*.*3! ZpIjA47U:%0j[0)-%C*%'%-XHHebBHbdYP_=CZso>.|7gF6TwImV"QZ78k9o\dQ@;g/,%Vx4; /16,M =80MOJ>HF>;`\>DPA+4-+:4U2vzNSRMM|JJIZwnxc|y_?Leja'=>eI{W\kX~n{?ooyutBIOGOZVWhg{WcUZ]We`USXeKFM]D_vjmIUZXWGNU\bERqCEFvAtIIsrJMckUipmczVrvw|GWSTUkTnbScrTZb[kSbd\_aPqc\cvrSvsLdqPGELPLKGKV?oqr|}EQpS~g_fڂhe`kolvZ`OXw{u\aWq׼ԙ黎uuվtϱμԸ½sg\Txcglcfasnptwt囊zΝȽψ|﫴q銦udɁ©syoHBBEDHR),Fc@U:&AR?8FUgLky}s?Pqfsa`Xijlnbq~Seudr|de]_`4'`oo8:;<91EG@??ADEAB6;?=?C>BB@?;63.4;84a9;=9?A@?>B?:76;CFB;>@?;4:958?;5/=14553<;::646AA94340/405<624>8<*099:84-342.4343.+14..057H@/xhtNR_eWllx][JXeTDKx|wj|~rXXS^ogrOs`KNbTNJMWmYeyRMIFFPQPENrv~b|U[}uN[K@jSEvzl~RDtxkfwdU_cCTE=ZTjrJNK>jPgJIu\lEFRFEILSNVk_ErN\>:TdLmhqY>jgCEgLi4R>H0,--.UWz9]FVsEUEqWdEXhPcg\LFXVGBdG2A6.U1Q3/-,AS50(.661391,"3,$==fL28O^276Ui;LTd?\yT,*12@-+&O3,)3=;=5+B/?271:?/9L8-20/C(F=C""16;[PTKg\.0+MAOV<73)/*faLNPKDHLK>]H4BCB9I.Z7>5FCDB?>CB=>BG6_`3444568772]\433324257645446857>>69564677731;8//33/2.33/WY/6621//0Y_X.30//`[[YRCRLW1/QMbLV002.RQ24101,.5<1U258:4/+/60WRSVUTY]^`10^\/5531[OKUPR\VRLP[PNTU\152aa\\NM:@-XI4=T[^VS\`\023569>AAA?=984^]1[\01/032`[[Z\d^a11__`_ZUSIFPGA>cFM,U:%C@S[IZlb:@2ZJCLH1:V&44A0J/4CGC;DHH2QM=F=6MESIQCNULKFFBAE6=3>B9>6id\9aQ^XN\h[RCOQPLR>82<0@CHJCTA_^^B39KWV58;@CHIGEB?962[SB85e5hcYUK:5aZZYW\^_LLRRMKOQSRT]]Tb4-L[kqzA@CEABCECDFFiPFVb\^\\c`Y][Z]__[\^aa]XTY\^PLQXZZbc\[XX`ehjfhj7668f[XW^59:<>=:98:8lnl897899638776m!$#8333##8')&"(0 #*+*&"  ""  &" )0+&/3/,.&# +$&E$I;RV.3.,F8nkL?D253/>S]eOe U'JEAu]]\xF>G0T<{ANcI;AFSQUZQ.zQOR" %/+2)V68R7*.C"$$&",..#'&  ! 4 ! *FF,'!'(&'($)-$#'/ +&-0%.=53/'  +*6!-*%3= #&) %  &5%@(1%'.!/C  .nWW    + " '-%%%SIC.961,/>""!! +   #    + +hdb}\5'7c&',' $#/b4]9#"%$+%14,&('=(, 0&,3/0  3@Y974MMB^*CI,bZ7D63503&, + "%%##E )nxNTSOPyKM@L\PDb@V;MKtc[F"kB.235 163LE!"%3.(!. /$ +  +  HYT6 +  +$ " *F5J:^dJF9EIN^)  + +$ "5+6!+25,!4:9D$JY>:+4,2"'+(&%%8$"4%$"4 !$'&!(87556S=MrS[n=E;CC7:<9325#$-%-77P_`B(*)(*!'+.3M*0:!#&>5B=B&*JKS*LT/9=.9==;OG6BNKUST,7456H9NZD8LvU<@D@fUF:FJC@F7G>CE(M.H5RB?@dwzĻqY=;?IOb̵]~MOeg:8MWTmpee9;4bpYзԹuyڀ޿͔Ͱʾݽöۀ烢ȼյ鷡ɫƱ֭˝斘Ѷryy{w|fAJEfZ~OTJ3N?eًݽ}}pE><<9=A! /@%5#$1=8CUeIpy|k;Suljj`w|qd~Whtaorn\YW+Qki11022-DE<:89;;52&*)%%%!&'&&" )01-V5785:=??@EA;726=A>:=:=?CC@=;@d8##$&  /@]2,.<.0C=:_UI6@<7%HF,*,PBE6S0A=/BFX[=5A+%#5(%F012.2/(+!%&4,#-601&3,0--*)*2-&#,'3BB8SF0=>IO@3>GFO901( "(.10+-%*,:.+.-J7( :=?ACQTVILTT*.:>@*(.%C&03-J6#!FPRZK54444 $9=4.86#4.A2]fVMHFJ?=37E?A<0FIN6"2413469)30,-(-+++2:'1&%)/2!!0*456/ '&" $ !$G(KLD=FD2:>7A>)1-26" 38;B?.:3>H45-US6E3;;-,)-JR\`[ZYUQTMVUKLU^TR]c\XXPR^POJKGDBBEBBEE@>@=>>@B?==:9:9:98788;?<7F(6:1:&09>(*&.'&?'96,/-+,*((')()&%&*<=6)&2,F?+&C&%%)A;2.!$""#! %%  "" .* 3 )'%$-'/$9$1(-$'%9%)*-*!4&  $!1# %!+:1[P:* &5#M,0' &"A ""$:@H(&fF7*I49%)!#0 C4?FKd1QANh>F*P76vD~U`Kd_Q[aEFb4CA4@?(6'3(4*$A(B)$1E-&#,+$).& 69^?%*;H$+&I`8KQ\9OmF$/<'#$' !(+"<0#&# ).%% + + &C?A?>CD?K))GZhow>>?B?{R??B@@C>H,$+0-.--0-+.+,-/.+,-/1.+(*-/(%'+,+0/+,*+0234/./.)))+897~ ||{{{zzyzzyzyz%}~||}~~~~~}~~|}~}|}|{{{zz{|~~}~}}~~~~|||{|{|{{{|{|{|}}}~~~} ~||}|{~~}~~}~ ~}~}}|||{|}|}}}||}{zzzyyzzyyzyyyz||}~~}|{zyyyz{||}}||}{zyyy{||{||{|{z{z{|}|}}~~~|{{{zz{|{z{z0{{~}{}}~}~zzz{||}}||{{|}|||{{z}}zzyz~~yzyyzyzyyyzy zyyyzyzzzyzzyzzz||}|}|}}}|||zyzyyzyyz{|}~~~~}}|{{| +{{||{{|||}~ }~}~~~|||{{{|{|{|}|||~}|{|{{|||{ |{{|{z{{{|{{{|{|{||{{zz{|{ ||{{{|}~}~~ +~~~}}|}|}~~~~~~~~~~~~~~~~~~~~~~~}~~~~}~~~~~~~~~}{z{{|~}zzz|}{{||}~}{{|}~~}}|{z{||{{{z{zz{z{z{{z{|{z{z{zz{{z{z{zzz{z{{||}|}||}}}~}zzyyz{| +}}}}|{|{|}|}|}|}~}~~}}||}}}|||}|}|||}|||}~~~}~}~~}~~~}~~~}}~~}~}~~~~~~~}|}~}~}}}~}}}~}~} ~}}~~}~}}}|||}~}|}|}~}~}~~}~~}| +}}}|}|}|||}|}}|}|}}|}}|}}}~~~}}|}||}| +}|}||}|}|}|{|}|}|}|} +||}}|||}|}|}|||{|{|}|}|||}|} ~~~~̀~}|}|} 􀇄̓ƽ»ƣܪߘؙӴ˸ԾԩÁʽų€ꎯ형ޢݗڔ쓹Օ儑݈򌅀聕Ҹ⒉忓æȡ撥ܺ󪦙ȰȢ臄t҉什æ凬ⳋآ־؇߸֐ڌ跛尀픀ſڈ셂򅁢Ʒ̠ƻוܑ̅ŷ򍩔ӳᑔހŅضƋᐒˀ͇̆Ў͉Ӫт嫂㢭ʧϛ󭯳ڡ󧭍ϕɞȥӦԒԅҊρ醉ǰ䜶㴌ٹ킌پ㣆؞؅ԴЧĊҜΠÎ̅㙉ÙŢʤ·ȹ瘇֝熱¢Ѹ֍ҡłᏔŌ㘭ܣፘ뀘އԡЊΘٓۃ˧₀ږơʗេߴ߇󨉼ȼϡ务ѵz➜k˭Ъ˞˲d_gq_GDmue^btaiUCXPsntloroyֳxȫwhƺ|Ǥ懩Ȫʺյ߱򈉸ӂꇫՊ绘徻󗀣ؼܳijϳɀħ̗Ѿ–ڮඞʽȴŦʷսȾ摿ॡπ텓٪ꀄŶɭלҽꁇИͲٵܤռ퀈üӮǁꅈ􉃕ɻӚ񼢨֬ȽýþŸڶȸӼ»ӾʪͶ̛ԋᚇ윹ɰצǹ֝٣Ӻͦ婳ܬ懂ǟ쀕񏒝؀©ŀ˦ۈֳܾۧ߼ʷʎ؆ـ󤌪Ø㴥Åù⠩ܮʊѓۆʫ΂Ϳ􌏷쑄˃ʀͨ뀇ӸŹĭͿ󌓣ɳظ˻ĻɎİûȸɽijǮܷԴ픆ûŜҾɿ뗚ͷjiihkm:<:98::;<<<>@?=<;99llp:;:9=?;;<=??qi^E(2;i6::99;;:==8=>=<>?;=?ACDDGC>738706<;78::787:<5:A@ACEECEECC@BBA@@CC=:9:;@BCCECBEC?M@A?CDE?::;:?BCCDEFGFHHJIIDJJIFJJJECCB@>;=<>A??@?@DB@BA@?@@@CBAABCDFECIOSXPHBBDFIHGGEDB?@ACGGCCA?=CDAA???@DEEDBA>=>;@><;<<:=687i<@8=;a:>?HL;7AFB@5_87b56aFp`GndPp`d!QOyiu^rJyel.H@064F:[;ST[YlD?BDXe>H -kqYhY)g`^MN`]c95:\UaU9HMch1?u/ce{>CA2;.C,$)(ce/EF:Q8FCh29L0S<*/$!= *&'*DL<0P8=02$""').$ '-863OT{NXf^qKPqflp͕I):-%@5+?<:==U:hOF>3_O&3!IU8;uPWSX[XFFJOJFH?Q^xUaX|h_1'Q=J047*8meyT3=NP^otM>TpmCFGHYN@U_evnX>+H5if`1*(5((,;316.=98D&#>UJzQWGC^>rc]mXk;SZ7P19Y>P=KPANR8;JPcRC\|0@C9:]1OpIYU8\dXW{F5>QY>5TI9FMS>c9F.B<\@MQ;OCd<[59+_B4gn8g399h@h[\uzYK`gVKR\V\vR@UAu[}IuxaWvkkOcXmHrNIG~wsLpQSUNSjP[mbUHMOQRQINpJ}PWblVNfms}uVbxtRQGWlQ\bY~qRpa|W_VIiRk{u[lXbExVqskBFjPi|ragABEDA;3===>@@@<:6422.::9lD@>8?BAAADBDB<76;DH>:@DBDEDFGYbfI-DIL()+-./0/# $#C]o*N:F{Q0YZG{~dvhT[]U\VcP[P]ikdQJZ{a]UuWk{}}hQFXf^efXc_SWYXK[r^SOJOLRHZjcQymkYqhcpk^nlhDIYOMX_}u}xkpuuEFLMXdrMbOPiEI[KSL@56ifW\`xmf|}AMh|LIHIJFHNo^mPU`Wto}vy}QCIdc`XSQPNGIM{ioovjak}_TnWGKHndhsy{Uyzej]YdKqZmW}qpskoomsadSW^Qbbh\\\`_^]Y\`WXMT]]SOXSOKMJINJKMOOMMNLQHEEGEMONQNT\`z^Z\WSOTaEAAHKBEH@?APQVSVH_|Rff_iZUMJTDGE7::?C=<<817885@66824;>:69IE1.;.*+//1113/6??3-24438.)392.=20#+32.07;8.1iqle`au^vJLf]tLIpXAMolyQWl~hdgyi^Ga[NtWSYOz`}_TwbMTsZcNZnjpgDxdQQJKrLO^qukWCbSzhg]kv\byjhUhIB0?el[\u9RH{{C,0nKJ[MJv]hc|w_zxWXJEEGOqi[Mi;>UHekryjj[ZqDQY`dRAJ*D-C3dNQ9A[_f}|_EgPiB/?4)3584+726/',AW1J@5"-87DjRBZM>DyE-'0;9)?[0,9@CE,&F01F*9,B2/L?:".,G9I=@% "";FWd`SAAC74,C:0/9.193kLLNNLLJMICY%5IE?;5Z6<0;A@D@B>FB=734583747:7312044222336566647488;3K:4674666:02:8W02^0104/L?.244311...UX02143_]\SKQ\UTZWLPPQYZZ2V/0^YX111.;9-\076:1/..70XVTVVW]a]Y^_a36830WQNXL?BOM@-3.\KTZ43^]^\QIO4=ZSL6Za[\\^YVX[13569;>@@@=<831001/3024033`]VW^``23421__XW[SIKEB9@'3XZSRauf_UYVIB>BQRZ]VQRE@EMHPLGKPKGA?O`ecj558rn[Ubggkmhi68;463[UMRF:;W7PE88,=LOQQLPPIBBFBCAZA25DIF:BH=FUDHF;:;;CB767-K@299:D6Bbh;58e\J@KO[Y^HMCKHVE23R91:@GC@AfU`B/B<#B129A@5@HDBA=51`[K=96afe`VOFD77ZYZ[\^VKXRMLQPRQQZ^T[;3OUostBAC@~yDEFBcvca]WV[]]bed`^XVYejb`^_ec`[M/Vg_ZX]UTY\`^WZ__glm65:8745^Xh99<>?>:ABGD<:;::7mk655588668 !872"&0H " < #(+.(" " 4 *#' *,22.,- 4707-C?9<30?>VGLC_=FIG$^] 4mY +I?4b_PYTOJ7cNOOEMpt,VOTqXTpXhW,CD% !""!!"+*) !(-$!#36<-"""3)%-!J-"'%)+*/ +  %-#  ",+!?K-+*(#/ ?;+!+$ 7/(#.:+ )$  & 7A0+0.5("#%  +!$/!2!;-*+ * + +[ay@  + + +  ! !"75993.//41+* "     +  +   WVU=J5(+*. +  +@N,%/3"/.$,)</#11#!(##3  +/6\6:FPRRk82@%)C300eYV   + ,-.* //5l{PXSY]XGILPFBA5=@_V;[hIHdXHd&#,0W5K'!"4H&+: + =2! + =-301=#;.20?l:  +   &G'#.;F&61!5F7S0I7?")..'#'+5#"+"$.)#0-5 4:=!0.Q4A1)B?W>%5&07,&+3,3@.#.-j{\_:P4YqlSGDqaVzE.5(:2";&#"LYZ5K[1)($+OJE1'-5.'":$$&()$'D:MG*FH/Q98SA2/9=GTN7D[QKE0/)7J8h?EBYNR6LT?hQ:??5K;GTN?Q`:;!B4>G;3 0&4C=<23"!+'&64)9A@%7+6(Ol|ɰǾi_W6>Yr^qBFqZUQ7ILCX~ƾW>[j|̾󯰯ѺӮϴÿ섏ʝέɀ㺍Œ耿ƧLjސnvdanW(A^lWlQILSLhĦE?AA=A;; 3&+!6/;jxL{J2Ob^QWZpY{[tf{phn~qb[rdtihWd]&#Wu;311322EA:56;<:4,$,*%$"$(&&#! #133`?=:5;=>@CFCEB93/4=B:7<><>??>=FLT)#&* AA!B9R9;1RSK4ifH9-12-3O/;2*-7P,DJM)UE1$$;?+81-'5#&+5<31-&/2*,1-52&'))!.A3*($%#'%3:81KFE5D:TL7C=1;;9)#"*,2-34-23-$+0".!$0)50' "C@7>@UK]aD\SR)1@M//#)3:<.:)$()*QOA12!7&952"=R%"0'**+&?IOZSG?AI923:#A<6:FB6/9/,0516@&/-E%,-,(,-:022+)-+(1279#"!#%&+,MA7>=C@7L:@.G+?."$";53J5:>(?A3:S[4/5!5:"0%;<[>NY[ZUVGNFLQKVSXQTW[YXSNNPJJAFLOIFLGB=?==A>??==;:<<@85887@A>3*F$)JA*>-5%#>'(@#,%#&'2#*($  +(%*;"& 0WR;!,3'@85$(7 )   ++!1>%%*(8046*'(" ##2?G71!T3= %$ 091<+*(Q=F3@:1!0&5**.-$+)-"#:L)92)-';aM>TD78j6&$ + +.J! )+*#(*"5##@/# ,#,#"  3>JLA0-.$!,"!:!!"" !% %!%)!&(-+*$ $,('**#$%&+,,'+()*('')(*.0.,/./'#$)#!)!',.+--'#'+&!,.**+-*)()+-((,+,*,(),)"$! -,((0<41+-+#()-0-)(!"% &%"%(%"&.214;:1/4669966:977765310/1200335010-.-,++*0+&'&*)(!)'&"&+$"#%$$ ## ,  ( " &!'""!"!#%%!($$!%#"##" &#"0542(#)(/.2#)"&$0&,  "&#.#(  )(#1532,)&&!&EDDDEGB;E??<@?AA>CD?G11MWkqsB@@=xs{A@A:?B310,*-./110/-*)+250///542,$)3/,+.)(+,..*+.,133)'.7~~ҁ}|{{{z~~{z{~~|~~~~~~~~~~~~}|~~|{{{z{|}}~}~~~}|{{{|{|{| {{||{{{|||{{|{|||}~}~}}}~~~~~}{|~~}~}}}~~}|}|{|!}||{{}|}}}{z{{zyzzyyzyyy}}|}}~}}}~}{{zyy{|||}}|||zyyxyz{|{|||{|{||{z{z{z{|||{{|}~~}||{{{z{{|||{{{||{{|{z {{|{}~}{{z{|||{|{{{||{{}}{z|~{zzz{|zyyzyzyyzyyzzyzyyyz{|}|}}}||}|||}~}|||{zyzyyzyzz{|||}~~~~~}~|||{{|}}~~}~}~||{|{|{{{|{|}}}|||{|{|{|{{zz{{{z{|{{|{||{|{||}}~~~~}~~~ ~~}}|}|}~ +~~~ +~~~}~~~~}}~~~~~~~~~~ ~~~~~~~~~~~}{z#{|{}~}|||zz{{z{|{}||}~~|zzz{}~~}|{|{z{z{zzz{{z{z{|{z{z{z{z +{{{zzz{z{{z{z{|}}|{||{{{}}}zyyyz{|}}}||}|||}|{z{|}|}|}~~}~}~~}~}}||} +|}}}|}}|||}||}}~~~}~~}~~}~}~}~}~}~~~~~~~~}|}|}~}~~}}~}}}~~}~~}~~~}~}~~~}}}~~}}|}||}~}~}}~}|}|}}|||}~}~}}~} ~~}}}~~}}|}}| +}}}||}}}||}||}|}||}|}}~~~}|}|}||}}}|}|{|{|}|}}|} +|}|}}||}|}|}|}|}|}|}~~~~ˀ~~}|}|} 򃊎̖´Ǿʥܟǚ넂®Ʃ􉬊Ӝ瑠ŷŽýˀƾߔձثξȥ򅍧񈑔׍ǀݵܕ톐ɒx˄«Ŵկℕ駁ѴӔĹ͕陦ވށ髒֘ί䈠ׯՆиɫ胥ӄʝѻʌǞϷ̃ȿى叏ʏ䬎ĄϪҴ޵ě׀ո㫣􀌛쇪鴟֞՜ʌ𵃤̂ ٭Șۄɻڔő񹴀塩ُλس쉑Ķٛ凷ӫȲŧʣȷǚʼ샟򺽰ƶͷÐބƴϰ׌ȱ僞ߴ܂ݵ̀Ȅ۲ݏݑ͏גܳгmΧ՟xiƩǯ̰ȽpԴXuaOStpgd\p[RcjiПrnoj|{tquѱ䲲ٱָ\װͲſޅ胍LJ҂ƁʨƖӯyٴբʹŷ򇐛±ؔœ嚥⛉՝Ѵ購趚׻ʱ񂺭ԖäƹƓ瑩ʻрպٌŦƿ򅏎趷ôɉ۽ŸųΒܝɵð¿۝͐Γ͐㾼ĤֵӼ챼̀ƼʳŻľ±Ŀɽ¾³􏏑݀¡幽𨄓لè؞ǣԉ񲮤փɱĶʒ䰭훪ߛԅ≰Ցገ۫ܽņɠʞò݃ǥƉɞÀ񐐎㮖挖ߑ򝾔ܫټޢ˿ʥ倎ȱוܳՊĥ𩫩ӂިóƭź̶覹ϸļͳƿ־ư̿ƸбΗΑڋ뇟¶㯀ռݽ涷ŷɺfhlkkjjq;;tnq:=>??A@??@>=;nhh8<<<=<<9;;:;88pRaEEnc^:::989;;9::9<<=?@@@DGHEA?=>>=;:988:8625:?>>??AADDDBDCCBBBA@@ABDCA>:>BA?B=:<<>(=:8>?;:99986:=@>AEHDEDBCCBJKLIHIJHJHGEBBAGFDDCAACDBC@B@?ABB@EFEACCC@>?A@BA?=??@BDBDHFA@A@EEDCDAB?=;=AA<:=;;9;86679;@::;2DDHA8;@AC?a7edh66g<:ST=5;?*LRXa4?5HODYvpsp@;K638Q`lOKPU_d627XAL03=E6471.2;f/=d:B<TTrKQinq[Y-27W?59NW?>gONA[pJPNBW:4g@?4InNR5YaxykxnN:2CHGX]68GOCB^A\60A5=V6LNbHVS=:`(&HE648AOI;62?nto|bNNdZ8JJBCMZZ[FIYasgaVjsX[lpXkT[SVX_[iptlYzofAXzlx}G]dYKNMEGJZTRXPTSOM=hh_Mh~ZjSZZ_cblspzyes`eVVOUyujKBSK[pRFoe`oLT{opHflboIYRGdo[DquBJOuxdm|༁ƥȂvmkq~ҙwynVhĻ¼qн꽫ʀƩs׫ɵtfs^d}wof`mppӞ~qx~{~rorӷ҆ᄉܳɻfپְɭq|Εvdľo}v}DIK>>A&2@CBH78>1@f@X`t{f_ZnpmYxOh~ylgeol_nhqucfXv8.Vnf:7;<;75IE>>;DBA>46>ABC?>=9973-*-<;?kUIBCGADEEEDF>9:7@?DCGEJKI8M#Qh$ H$())-/1,'# #'",;"\7meP]^uLanfo`X^^ofae[K}x~sMoqqONmhPQVSZ[lyfNPLdmj^TXQW`d\SQklgTIRKkbY\SNiln[QS`aff\Q{nQ]Xwifgdld`rBDGOe}KZKVv[VZaHGAN:^]b[\ZaXcdVpdWRIYIfuWeWr>YuT??93111-292<8<:06::12RNsdaIJP`V]\OJLjWMTXzy[wkoxVazQ|s_[{yuu[\YpfZ`QKON9F`w^_VeWhlvOcZVPzPIS]{NsWRUbYmgvksyu\lSqTNIX;]Yh]C]@EB}MEK,:@?7OJsX>GG}v_VSOdA?JTCXVI:C]@+JU-9Pt;ROrkB\BlEYIB5bJdE_{WM>3/A@86HuNEFe 41/>1/2=0/O8$';?ABG'$%! 4FACM@+O60?CR44E044&LZGFIHLIHMIJB?CA;6/;:10M???@@>??>8:D=46777556:;41443420222579774347;:=84203/133221_23_[[\b`26742`_2^][ZOC8qME3\\UUTYVOJIGF=<<:CGCC?>?>CBCFKID>DLPVagik56999okgbgliinnkl789:9:9nkihgkjiliebb\YUWTRPU[\VWVVXR_WY`Y[WURPWLJQ\Y/8A7:62\QFDED=56dOUADPVXSRWNLAAD@B@W64ADHE@9JFHL=IEDFD<9:CONIFHOGQFBJHOTTMC:@IFINGFB@?:CC<<633aZD95ccbYXLSCdHXWXZ\a\UUUOMRQQQTZ_YXJDJZfryECETE@EBBy[a`^]XWW[^^c`b[XX`gdc_VQIYMUW]g^a][[^`ipd[bikn9::96754658:77:>@?ACDD?=><;:m%33567657978 6322:*-&"3*)*   !!!"$*...0.(0'--.K@2c8;@8SQGI]C4GA` +;4cI8DxuTJGDtg_F9OXnK&:K#"!!$($"!"#!$%0--) "'*(-3*# .&".,&%*!&"*"A/!## +  + $#  +"(  -"''" '8$$@# +-,%1P(  &7#0 '7-#"&6 "F*$G $ #  #)96+#'+-'#-! !'  + U`w4  +    +  +!#)6"RdN)(%J);71."  +      +  +    @{w +-&   0ZD=:%#n_(%45348<70+&78&  !($ D  (-H:.OJKIK!(+T%:9sb'   9 .>KAyEN\_\^YSIPVWSIB?7FgEbgaie! $08?0'#! 0'Q41 "   ,#'#$1..68$E' *(]7(&    & B509"%$2O411))8.('"#*57;-8EETIFF?OVAM\QBG33/-4:487664]UHB*4L>38ADJH"-0*$(J$? ?"+)(,',.)-<:4+;MH6B69;[97:DDG@K\TZXDK;>77P//KMH2)51=).HOIO><@#D192;J+3.&8A4#9C&)+CScOFP±oĭxķhgWqEZLQiklx~Da=zPǩY|߸طŸö܁ٹïIJǢگ}v}{xbj\aX-]UF8hLCDDCE>7305;:998;;><@>7&-/e=(  *2704>Q6=E=?Nf8254;5254*@<6;%?D9VPEc9F9'6@$2C0# %##%-96,0*3761/2+*/41..AB=,&,HN*@74^75Z/@BC41/8575/%>9"--3+*+.4-'0"2;"'$/##.$(%1%;=?:;:A;DC9ND6:.41>G8A2E'6M8*,)-O;106 %@@$.0)!6.BKTDADEHCD@:<3033BC>;=#%$<.1-41).44+(G)+P.M.'1)%,("').7&%%($ 6B=)R[VD:74;X3;/:,*/>3+%/?7>E:L01?;B$-R1;4*,/,*AH8J3POK[MTERCPMEGUSVWOLMLAHOINMNHKB@>?A@@=:9=;8)"-F-/ ,82..F6/0*#?)%& +23'7#6   + :A5#-C(7A!0Ib5K>jz_9N:dDWG<3_EaAZvKA4QmmAWbljcgRfaCRka161K'5/.'!5DE/4*#*67,*=1.&4$ "365/'#(,+&AoI<>Z5PbF=&$# 150# %/#c#@"$')+ 2,-9.0*-3'*( ! !  %$%)*+'-)'(&"%#!%)(*&'((+*')*'(,,--'$$(,*%'$(),+,* #'#',-+*+-1,+*D++++*,+-,+,,,' 6&&1-(((,)&#"!!"# ## #'(/34577878;9798787977786256312-+*+)('*..*++**%-((.*+(*'%+#"$)&)% 1%+ '((%$'" * !"! !!#"#% ! #$&$ " !#   !!(!060-/-.)-*1**&&#+#!, *$&(%)( 212./(/&=3BDDBCGF@BA>>B@AC\@C?>HXbmuBAB@=x|{?9)=*0101.,*,..0/0+++0431.*'"*$)'+1.1.,,-/692,/3347~~||{{zyz|}}~~}|{|}}~~~~}}~~}~}|~~{|}~~}~~~|{||{{{|{{|{{|{|{{|{|||}}}~~}}~~|{{|}~~}{}}~ ||~~|||{{{|}|{|{zzyzzzy{~}}~~~}~ }|{{zyz{|||}|zxxxy{|{|{z +{zzyyyzzzyz{||{|}||}~~}|||{|||{{|{z {{~~}||{{{z{{zz{|z{{}{z{|}}~}|zzz{~~zzyzyyyzzyyyzyzyz{|}}|}||}||}|||{{zzzyzyz{|}~}~~}|}|{|} ~~}}|{{{|{|{||{{{||{{{|{{{}|}}||{{|{|||{{{|{|||}| {||{zzz{{z{|{|}~~~}}~~~||}}}~~~}~ ~~~~}~~~~~~~~~~~~~zzz{zz{z{|{|~~{|}zz{|{z{{|{}~}}z{|||{z{z{zzz{{z{z{|{z{zz{zzz{zzz{zz{z{z{z{z{|||}}|{{{|}}}zzyyz{|}}}|}|{|{|}|}|} ~~~}~~}~ +~}}|}}|||}|||}}||}||}}}~~~}~~}~~~~~~}~}~}~~~}}~}~~}~}~~~~~~}~~~~~}|}|}~}~~}}~}}~}~}|}~}~}~}|}~}}}|}~}|}~}~} ~|}~}}}|}|}|}|}|}|}|||}}~}|}|}}|}|{|}|}|}|{{|{|{|}}}|}|}}||}}}|}|}}||}|}|}|}|}|{|}Ł~~̀ ~~~~~~}|}|||}}~ 򁇉ڔծӞ롩خ طˈʀӪŕɟֻƪҍԙ燥Ȃ°񅞏񄇐Ͽ܇LJÑʘ퍝¯˩꜀펑濳Ћ׳ݵœӹƭ첎ԭ패؛Ҿ݋ѮڃŀŚլ΀Ɉٚ֌˪Ӏ҉·ɾρּÜڴ·ڌ臤شʣԆ垬۱ƲОʍ؊͋Ԧڎ·ׄХϻ򫫦ӳ݌n늗㉈ϐ荌ƒŸ󚦰ĿʞӉ󖉝Ղ营ԩʢ񇆞̸Ӏ򙯒뀄ă銲ѝֈۖЇÕدѓ̱ڄ狿ďə׀ҢﱛǤԼꊥֵοߩ珆śɹы֋ܿܣش۬׹ʼǨю܅нѽ릭Ņӡϝ󲠓}nqu{jw}q֨qtзԁ{zZfkojmkow}}޸kn]jgy|׺vsm{~yѧչĊe鶝ê鎛ݻ°볆ł쀂ܐȎ钸Β萈~Ӿ׭ʇ̶ìĢ馟֓βۍǑтк픥דȽԊԠϼ훹²Ëߎ٩ϋľ􀟯لģ޺Ā̷Ʉެ¡¨ɽĈ鼢埐ۡΌԪʿ·Ȫ󂖜ٞ튂Ȁʿ¼عڔ䑆ƽÿ˾Ź¾ì۷˽դŵŶʓǾϛȠ؎ꠃސⷷ燠ϸҴǔؚ뙛ΐ鋌铡瀒ᄤƟ勧򂖲ㅃՌ叡٠ߖݡȿ㽫٤Ёűꀔ߄ݰ䈣Љü¿φ햩샅᷄ڿ񇃜򛜕퀌ã뎝񂀀þֿރؿԀҸź¿Խֺ¬¾ì򢝬⃑ïȯǴޜ妘̀ͲņȽ큃żǽ>pjkkkjo:ropro9;;<>1??A@?;f:><===:98::998lpnQj9689:::<:<:678?=>???@@@BCEBBBA;8Y68;=>?@@ACCCABBEBBABEBAA@ACBDCB??B@A=<:9;<<;?@><:998778>=;>?>?ACC@ABCBBAA@>@=9977;==>BCBCA@?;???>@BF=:::86;::8:<@79D847=BGB;aZfl7:=jDhl\P"&/=54b\Be]Ok\oVZOjK=TRP*sjh;UqTj]vjbn~u[}w_wT& /&RvgKH(%('%(--*213788/1797>NK87FUHF!KG)?/6:25))zTbPX]hyjVoqcnTM^]rmumY&')! &0--,*#('6'381977%714'&'9/(&*.+-)>$'+2*@Nu\_ppau`Xid-/s}^xxEt}NCv|~S@/,LOX:HuP>xVqxUUyfyI\B=EBPrbhgaV$3?D*?=&,"kvHBD:B"0+?&*9?/#A-8-%&0-*'%B+:1@DQ82@UMZK}~`L3OhImb}E\m_bI7-%2:80(#&itvwHC(D=A[D0 .,)'H&T[SYD7^_IAH94RFk,5;CX7IN98&5$,/ [foIWTI[XLQNT`X\X^]^[SE^\FT}nca;k]:77?3248?n@>A4EE^E=>;BTa@@F7uB+ZXk=/#>\[G/:>G-5233`=G8KH#LW1C)CF^B-4giE8?5>7Axb_]TgH?CM\Q:98=>8a9@XnXoNL_pJE<[[LAyx_XMItf}rI^vm[OxmvzqvSNmbQ[U|qk|v^quPLPITRSYN@zS]YLWc{mUbeFONSaXY=__ESIXBPC[kGa}}rayjkdS@?zusVXNQlKksa}eX><:4dSIBGLFEHFFDFD>78?B;?89DBILMNAttAidWI$''*--)%%"$$B=6QMGj4URJPLVTv~svs\RvVjv__a`zdVOhX_oY[fNcdbZB=GWf]_]\VYTkbUVdb[PT_sPZXSSQ}kSt_OXQFfto_g^Pu[^`]WY\bjrr:ORlEGNKe^[]eOP@O<]KSSZUHMMIJSX\^@HXa_`OnkhdwP@GI7_/S/:54<979>:7=HB;9746;737=8405872574211/7?A>>9:8;35@CC;78301)-88DWp^_lt[mb~ib_d`meUJQEz\{zrXgp_~X~`WOPVmlQYpRUwboKTPQVchix^ZnU]RN^{WUZVMLYJMlW^nPxlPMSVXPT[’[ZCI}MtaMq\h\jO\FP9?sLWHMP4U5BdL[o|`JnP]MKPTZqu~DOK`M@>fnZrqeZ`_vN(+O3*=8*:6`3%2'0*- #-+_92EN)=*IN=DgBJ6Thb/B$?=9:55AM0+,H?121/?E=:%3%,W9%=0>A?)G)"" $FFT?4K3.1?031/?^]EB=FFGGEOJHHHB752>=>9=<,>;<;567877457:613575510010:8854246:8:16445668772236920222430ER2163300[N\T005833`>V]].00/O?-4ZYSSBI^5:5YRZXU0-7?92/138:2UQ7631-ZY[Z]/001300/SV23YPNWZ/KRW-56030/-Y-263YFR\\V]_^_Y]`e5ed33667899?98990T?;C41;4A@4B3:F7e4@778ccd\fZ6>c`\PNAMALF<021?E8WZ3J?6C9DC42RR=3?@3JFC?=:6633P8d6g>??& 736766877:;8 !0$676'3: ! !&  !"!/,00. 02'GaM1IA5B:QDA;dC6KG8?nyIMm0O3G8NGGNqYUUrM;UqYl_Kbe- .xcNHS4+#&%$!&#(32$,/ #87$"  5#3 !##8-/,+   *."!!! )&+!! # " *"" '&5,# 6(,%/( /7>-'% % 6]#$C. E   +  +")-*"6#4*.!J4 + + +H]s=  +   +  '%12NPA2"5P9*=19 ,9(*0#"  &    9\  !X,K_ P&$/:-$$(#*<&%#0)$%"2<;.!'1   ;#<"/(NWL8'!'0*@$    0 'UfBSQG[YMSSX`[^]`_`\QD_[CNr^TL-&W:" -% + +Qu2 0  + + "! #4=E% -0<. +   3PZ-4$G)$:V,')UPML.=$%&70*"$&"-*0.+0"%,!*$, +2,, /),.'6"1.&6'A(1<+'"77,'QUdoG>72MKYM^^4EfnTNB6SSFHQM?:BU51ZZBM8-CH21A<4A>>J4:BC6A>&%("<)*,0,"B/:T;36:MD2;;)(.N4>=7%;>*2(4&N5&.8*@UTI[>D:B=1 976/506BLA'OLJ6C8NE6, +B57(?$17LhQo˶ԿǰƊd@ZFxgwoJ@BVDXy☺|xxѷʖؽƿϸǗüȩ倈􌚮෪Ǧ񆊈۵ӥăխusuaIMI:@9o[SKhށçwuEBIEA(: 3!&,2'HIW-|_eyOhQr\h{iyݐڨ\po~rrWunTt`1Gio5144657:651*9:80((/+)%&('&(*%+58.TJ@8>B=>CCCAC@7/28:36.297>?@<0iJI'EG8+#.(!??424425C1H[YNK^>AVE715-`B?00/-QG1LS'';I4&7-<024"0335%"',62567.+'<=35CD:-.8P?1520M-3eTA2G;*.:1%+QA/90++,(B0;CB6TLVYUTDRGLTINUW}s}ORO@DONJLONBF?D@9=CA>@@AA=@=9:98<777=2A31P)7JLF@))!%( #!!#"+%  !%$!%(%!!%& %'##/;&0 .#4/('!!&0" (  2*)/(//3 .7K3 3"%  "** 05K,'''#C1/QY-,/#. % #&(/.'%: ))'4!8-'BH@@^,WaYCC>NfeJrSb+;eoEeUFHcGNor^MiciVLTPA;J7!*!MW58!-8!B)"-+ 3/R)#!"  V4+37&086Bb7>/EZQ#((%!  )6!,& '"%"B $'$( + 0/?+* +# %6.!$&)#*%.+++& ,,&$!,*'+(%&"(*++,'&*&%)*!$&(0%&+(')**,(*-010,+0-,-*,-.+,')'+''24,''%"&$! 1("!#2642.4258<<:675776766773332131//-,,+)(+))(+'$%$%+,&*&).'%%)&')"!$& *&""!!! ! &%,%%&$" "!% '#"## " ( _$(!$!!("!$4 024/6.!2//+,"'(% "$,1#!"!$!%33(-$,%<6%CD?@F#==@=;?@@EEA !=?;GV^iq||{>@}BA@741*-//1///-//100)-*(+,'""%##)02,/115221-/233652./ 灄 ~||{z|~~}|}~~~}~|~~|{|}~~~~~}~~~~~~}|{|{|{|{|{|}|}}}~}||}~~~}|}~ }}}}|||{|}|{|{zzyyz{}||~~~~}{zyz{{|||}|||{yxxxy{|{{{|{|{|{z{zzzyyzyyzyyyz{| }~}{|{|{z{{zz{~{z{z{zyyz{zz|}zz{|}{{}~zzz{|yzz{zyzyyzzzyzzyzzzyyzzyyz{|}}|}|} |||}}}|||{{zyz{}~~ }{{{||}}|{{|{{|||}~~|{z{||{ ||{{||{|{{{|{}~}{{{||{|{{{||{|{{{|||{|{|{|}||{|{z{|{{|}~~~~~}|}}}||}}~~ ~~~}~}}~~~~~~~~~~ +~~}~~}}~}}~~~~~~~ ~~}|{{{z{{{}}{z{||}~~~{z {z{{{zz{{z{z{z{z{|{z{z{ zzz{z{{{zz{z{zzz{z{|}|{{|}}}|zzyyz{| }}}~~~}}|}|{|{z{|}|}|}~~~}~ ~}}|}}||}|}}|}|}}~}||}}}~~~~~~}~~}~~}~}~}~}~}~}}~}~~}~~~}~~}~~~}|}~~}~}}~}~}~~}~}~}~}~}||}|}~}~}}|}~}~}~}|~}~}| }}}|}}|}|}|}}|}|||}|}| +}}~}~}}}~}|}|}}||}|}|}}}|}|{{|{{|{||{|}||}|}||}}|}}|}|}|}}||}|}||}}|||}|||}|}}|||}|}|}|}|{|}Ł~~~}~}~~}}|}}|} Ž֊쩋Ư↠՘̚剩՚誕ȶ̀İӄ榫ž֫۲ՙ㠒㈖䎋Ȁϧۭו狝әߛͺɯ֕䌵ݞ킛锕ęʾϻ݋֮¹寽ۀꆍƆ됄♿惠լ̜Ͽ㓥ڡΕȫȪ─ݿƣ܀ФݰⲩԻ鱰ɸѿڋՀ㌇؃޶쐳՟Ϡמ偐䝐ȠЂƫ䑏κуވ𯑅鍴ƈᇁߐ귇瞢էƒ︢ֈ̴Ϭ򠧶Żʉ֔Ԯđԃ䙔ߎͥ󆲆邚𷋽Ʉֺ€ӁȜǫȹvwͻɟ|kͫª샳tͲȵ}Ėpjt{ҹ{vopt|hcfvxnxw|鑣жn܊ŸϣቴƔ윴Ձ褓ӎ˞~̑Юπҿķʼnƅ٠ܑ㍊Ƿۉ݂ǝ֕ďʋ釤ݲ̬쁜򺫭ȵÀℎʹŗə鋑ȯ慏񩰨ЀҘϤ׻ˣʳ멿惎¿ۣ鍍ǀľɽע둖Ѡɸ»÷ĿüƱԿȫƦӨ՛ހދ㇅̚ϳϲք²تӂޠУۀз־ۀڻ׈֦ӫ֧;Լ݂Ƴ߃։Ⓠ󀍆ꄇũ㵅ـԭ׳̅杛􃐐󇎋߇Ӭۅ؁ꉌϲŝǃȾ۾źπ̸̿ǿ膚ĺźƽѿ೽ſߺͼȲ擏҂ݏȢݻɲͱӸ><9lkiggi:>jino:<;:=@><<<>>=>;79>?==>?<:999877m7l669879<<:<9799:?@@@A@?==?@AFGFDDED?9;96557<>?@?ABABAACB?=>=@@=::;>@@=<;=?>9879<>?AB???BDEDFGGEGFGGEACDFHEC=??@ACFCAEHFGGGFDC@???CCBBCBDBADEDCCDAB@@ABCDBABCA@A@?@B?<24>AA?<7EPKEC?EDE?B<::;:;;<:9<867=@93;>99=>AL`Qcg52>::8k9c@3*)ZMF\ocOSP^MVV[FEJP`61AO_6ciyfYn\[yl^fbaN8 $(6ogUJiM1(&"(548581/58:8=;;BGIJB@8@=JFBP8@)771Mf5Dv,qlzw`tk~PlNFDkmq]mb_O?'$4#%!# 2&!%.1)D)*+<445. "/+,.'%$+-*++&# ;=ee{ŚrcE2"&$A!= 4ergf4B;0=>62D& )4.-3"A:/;G!>30?2!&EX17/>`Xo_u\BFr?>[?ALNW``aA??+3$&'),B(Ll~=Yak:@-6/35!/"-&=1+RE8N3Q%!L2AGz;#$.4IOKUshk@?//Fb^[O?XW4^Ma[z&Sdm^BL@14*>3C8-0WM/ 8&' ")5,bmNMTE|tLSMxBX^VDeyMTSYHNYnYjBWTX0d`f2it}Di*TQ`M+22=18]_PXDU:KGcb^/06/5;Qcdd\\LFR\JWP8C@@K6[9=KjwoLQE>^_NAJm:?Oja:NxTTaQDF`53Q2R`GA?LVIYHKOPH^F@G9OHVP]`Q>B/L;4;C<>JNJ7?nVth[X;F_Qw`WMirnVip}Xz{Mwtmue`ggS|vizuJoKzKaqWifDJZ^iqritpLfmIdqQzkOT\zFzf>c_eURM`[nIHxzO]bu|{pZoB]Wz{~GUdVOxet³jͲɨa_̛d{njqzǿȪƚzȯʚ}vؽɺɅ˟yu~Ųvrlorvt~ޯronusn{㔮z菽ȸўςqiyzHHGJFE&'!(QSXG0HIrd3WaiZNl{{iehrxьjxWstmR{rc~ihjZDw8:FQaIBMKDjsBxwto^V]d`]h[g`ckRuz`hfOkP{ukQVke]yfUKuiahruWemlX[sOT^O^a\RYoQt`mOGgPvgmf]ikTjadY{WXYYUOUZ\WQQNRRNIPTSRPPQOQSMRQMP_][plZfs[tsdxaX^GLIEBCBACNK_`nch_gbROU[QVteR^aQps^RwH<6?;237?D6304;7546=5/45852/241//449585;=<6-7;36-1:;745:5/34C?965^iWhoxdVq\^^Nz~T]~fS_scW]`UpXJRQ[[}pj{`c`PGMZPHX~Hksbfh]StqO[aDMUVKCKY}lxZSjcLU_tw@vfy}YF:?v__73A@MLwunM7^;`nZenO~^ggGGo|KgI|kyiQgMZJAkH}O[dr[ajAi`oV18?XAHi>g2>=^9SVm[OA:RE0Q|xTZbz\[C6iKCX>*B';2DJSb(++()1T/016[0*/(-)/(%1*eV9*(+<57*:aaXB`4`KH389:45%?&&H7;9469LC19+)Q)#<:K@NR?M? $"AZTM7*%+*=97MH-'{yJBC?HHC6;HONI@74/^NI&>@9BA<7?=3T25610125554fec]WVZc23^c`^^a35bZVVMFC\F0@2_RONKA>6f[Q>B<6fJOGYVVU\hje*cj:88mbd4jefg6mkk68oknkljonl76787iged`_\\\]Y]ZWYWXQPRLPNTHKXQPQP_YINXYVYUNFTTQ.5:>=:7`XMJIDCDDD@B;:=@BQUXSLEJHE??>PIEID>>?JKFBBFLDG=I@EFHPRTKKIGDNJMKXUCEDFDJKENLC49?7<3/Z313:8?6139>>5=36=<5T97:8<4ba4O3<]WXP]0P;HYI2/CJPPNcZ>0=I5G@9YC0106=1,/CCB>;964]Baf:9TPFYI2dBZ[ZX^1WPOMLNQPSW\/0RS>G^ekrv}~DDDGBTNO`cakecb`a`[``^^`QT\TWRW`[b_edjl8l7liifgfaa_\_acfjkk78mi6gdj69<;=:9>??ABAAC@>=@765434458754'!!   !!  ! %! (0)3/.. 77`8AH911-:2=DTB@@EK'%&;3jDKB6I8Ajx\JDCtDyflL- +WT>3D&  !#!!%#&%)+/36/-"%*'$" #$%+0!/&* -!*+   +/ !!*!#" $#$!"&" '(#&)%/1.0-*3. + :#, +  R8.Q& /&.    +9K#L+D8C"5) ! +  9VfsL-    +    + 27HaEQ?0+?!!2%""#&+%    +        + W + +# +F7+ /h?WHD> ,+##-&3&4. 1!#DD%!"+UM0%+  +   601':A3/$& ('..    + ,   + +;^FISGwuRXPxCZbZFc{PUQVFJSaj;0# 086;R]+.(F7  "m +"6 + ' % %$ ' % )2/$ (%  +  + +5= .D;757%,8<5%:_4/83,(1)03&'"'1&-!&'(&6$!$ .)0)11(",##,984'!A.>.)-$5*?80-TNKQ>I`R@MNUIKG0CC,KOJVXaiRKHhBb5P[NF?QHYPK*R;E)@V-19-89-/NKN68GJ%>E8%<$IQ-3'%2$#-$7;B/88?C?=8*8A'58DHGKDC%/6.,>5@qbkn̯fũ–FX]Oc07LdQeɂ~DD?=62 4000'GDl]/W_hXNm{rnnp|[vd{ua}vzqfS@k6Hpw4053656630-*363+&++*'&'))')&39>0,%;:<=?;9=B@A@7697210)<=9@?AC7TM/7G&6.% "=4;+"5319H4WD<=n5.-0.002963 "!!*1?,%-++EM(EMMD.4%(!#$! ")!*%"+,!3"D>DZG47^UVB<:G<-'K@U<6;=?.698-M0@(*/(N/31+-=*>6L:,,I:YQWQGOPBUPZSvNMMOLFLRTMHFCDA>:AGGD@@@>@@;=<96<99:3"+6>?(H90/>9B(0BM118/50-)**)))($)*#;=<^;?@BDFC!!=A4CZ`emsxyAAAC82*/0/5201/11/11012)*,'(&(,).+/.33254644301/-/01346674203灄 |{{{z{z{z{{|~~}}~~~~|~~~}|}~|{z{|||}~}|}|}}~~~}}~~~~}}}~|{|{|{|{|{|}~}|} ~~}~~|}}|{|{{{|}}{zyz{z{{|{}~}}}|zzz{{{||}|||{yyyxyz{|{|{{{zz{ zyyyzzzyzzyz{|{|{||}~~~}{|{||{ +z{{z{zz{~|{z{z{}}{|z{{~~z{~~|}|zyzyzyzzyyzyyzz{|}}|}|}|{zyz{|}~}~~}~}{{|{||}|{||{|{|{{{||{|{|{| {{zz{{{zz{|{{z|{|}|{|}}}|{||{|{|}||{ |{|||{{{|||} ~~~}}}||}~~~}~~}}~~}~~~~}~~~~~~~~~~}~~~~~~~~~~~~~~~~{z{z|z{{z{{}~ }{zz{zz{zz{{{z{z +{{{zz{zz{{z{|{z{z{zz{z{z{z{z|{|{{{|||}~}{zyz{|} ~~}}|||}}|{|{|{|{z{{|}|}|} ~~~}~}|}}||}|}}| }}||}}}~}}||}|||}}}~~~~~~~~}~~}~~}~}~}|}~}}~}~~~}~~~~~~}|}~}}~}~}~} +~~}~~}}}~~}~}~}~}~}}}~}}~}}|}|}|}~}~}~} ~}}||}}~~}|} |}~}}}|}}||}~}|}}||}}}| +}}}~}}}~~}|}|}| }|}|}|}}}|{|{||{|}|}|||}|}|}|}|}|}}|}|}|}|}|}|}|}}Ł~~~}~}~~}}|}}|}}}~ ºþ򂁓ۿԿ򂬑瘯䴸ݒЎ¯تȂШʪـƊ䮆֤Ϧ̀Ģżꗠ̻ی΂玿Ф띒Ґ˛ҌѝŘ·ڇ맗ڗƢ씺񏛂˻°܈㻓ŝ˺⮱֬ŠһŁَęˋ׊αЬ螣̉ˮԊҾԦ˦ޯ醋ۛ򇦗Ɩۦ陰ɆјȯȌÅגѽݫɮƷ˪ڻ٣ҸՊڀŵ棯㛱Ғ̪癖óŁ탔ϰы򉌋ҒҨʏ饺塏˱軀͸׽쐥޶דъָՃϫԳĶ퉄⾮߃ѤÀ쇙ۊ̘zɣ٠us}z{x۬̾Ⱥ镉ulrsž瓒l}|ɞfcr{{xok³ļ̤νzv_ř䋘֐ޞߖՐفᑄݦϣ̦ўư󈑍ȼοݩΎ꜔ڸ؍ҩ烓׏ڽؼ鍔퉗ނ拑詡Ŵ½琰Şˑ偍񲙎͆˧Цɦـׯݏ˓㖿ü׍Պ훱˛€Ͽˊ֮݁򓅆̽¹¾ļȼֿûƾӍdzշȊЀǒ欕򮙧표̼󁒖ꁧիĀɯރծ僖ҟ㱘̞۽싁ճݪ㄃ϴŇ礃􍳴銀ʫ̙ϵٕό퉐ٔֆоփԴǻбʸèɢ⅏Փ􃃝ąߎ𸁌΃􄁈ζ׽廥遂높޻Ǵݸļ®ȎǵƵЄ瞫ރϪɧ֟㡺ɹؖɷЪ܄<<;7qlggdi<=ig9:pp78999;<<=@A?=88;<>=??=989998ik7776hgckn8;:6:=;=@?ABDD?:=>?CFABAAEGDDCA?=862344:=>?@B?@?:::;7899:899@AABCCDFGGGE@><<>???=:876>BBA?B@BEFFGFFHIJGA><>>DFIC?=>>>DE@CGFFFEBBB??>@AA?ABDEBCCDECBFIJHDDDECBABCA?@AABCED@??>BDBFEHCB?>DED>A>?AB945;::<B@9=B9k=`eER!,,FEk_WMLIYB>]RIKUY6;+%WTmpxcghcs\asTu '9ixEA !- (1800(9,4+2>BBABEI:FDL9=6I?JD\,+05?5[Guplhy@WyL\v|@J?T`_oZ4/%#(&$B,/ ":.=NV.!;95&4.9;(%3<9ObW4-! "".>-5B^]t`i]}`/l?M[PO`may\STrg4BSw5zF\EWcDaSBK7y_^pM_mD=0A{aumb&7'&%/)3.mxy}Y2@A4>@IEI)%'B3?.%$9 "767>3,4?G1'8*9!On;\J2G{dc3MRAQMWLYi@A#/103D:;_}=mtIPK5g^\"&!")#.*) "+1GSE^N1BN %=/2-'D1XXEHNI63FE! >n^uXwQgz3ZKH[lRC{=MRf~O0&89**ME/7?.7,A<<<:5<35)?K2UL]pN2'2./J-&&$%,/#:8&4G2GQP\gY`BF7C()94+/A%0/9198T@9#26@A%7jrQViqRjlaiYMS``HNWXYTOULYZ@iCD^N(^!_DR;^WLGcCHhqXl@/+5A669^X[GVMX6YLl]LmqDWO=@=Uf[L1_VKEL3@NVL?tORVSXSQK5N#hXHmL:*@S`EfFV]n|pYHWW]SMPTH]T~TTXUPPWeRB?rTajyXejuz]Rqa_jpc~HMIOPLpnVa~HYOQZhnxhtOxVmMMozCzwCL`ul@UIJVwxkv{}Z\^2;rebQucYYax|fe^m`XND;cpLHqqjJXqА~Է깻qɟwOYefehvϨүڪІǩxxۦʣyҹȎwrxvӶ镔x}ļyxu{nmw}|wopԷǻ˴p՟㌑ʈĺbpzKICEE=#"#bCPDNB?ZwNddUs[f{^nhryx[}sdc|jeiZmkbNt697<746:>;90;@;67;B?<77999;71,,>AB794?FNNTLFJPMLJHIH@:266JFGJIPV`TVvQltaAH"%%'()*'&$$+[PJECFGGCAAGBD_CLHLCS;NS3CO`wY<419@@=bQJ*.:AOMJKR++/124420-,SMPHH?B@FGFN*)*(Q+16?:BHB>JHG?IPvlqwM~ftQXYcXbnj_WFgzfYrmqmtZpSk\]bu\eXWzhVcm[PTYw][O\do`MviXg^oiofmj]d^Zxyb^PV^SPSSSOOOQQJMRUSRPTRONNOiQLnT{wpig[aiqm]qSmCBLE?CFFJCOnv^[rngUgYVmkVTDXU{|894/381346579542155698=6334/,,53024/21475:0/533/44.253-2:9>B0>9`eXqov|YLRIO_YaqQXrgtzamSgn~VaNN}uXgPjej_LKoDIH`]KS}|}yLcN[invlhVHqgOrZtglZqqnaKavmJU\]p}`KX|b@>cpoId\JIG=VQJTbAbSMoLXHeNsIFiBDMe[CKhDH@Q_PULM}ph_z9>DAJ:Z:/11_/U/d83=4JVNAX[2?@:8:8]HZh%,]XVMIS@RA`csS;kzbEE:s[0cV=:.<:I,CXc2N*'$'+'.V-8/]/&--'+2,%),)_I71,$$0)8X9iK6D/P=@&%!#$#(<""$+&)4=<3B?/.9<2B$!4>=?EBDCC8;8: >"CISE4%-/)3-6$&&;d\IF;CEEE98MTK084TJW\UQ9<987^5141541186[TXY4adb334755655577:7:<=<:6A1340^0^264c\\\[[]WY_]aa__4253ce_[WOFwr711__SJE?4ZF;0A Oah;:`babggeed54dheda_`4ecgihhj579qjo7pn87999887kd`_a\YZ\X[Y[Y^\Y\XVTRRUVUXPOVMVON^_PNSRXTQLJ^RS.3.B@:7_WLLKE;G??>;3^5:8=EQVEBDJC<8AS$DGD@DBIKGCGJG@31W_bZKH:XPTP=ADQJT8=KY\hEWP>F?I0BG1CA^XZ1.0.HHGJF?>:53N68;5_QPRKFS;3[YXY^WPPNGPPQSWc^02UR6@Phtz{{{CDDEH`Cec^aabcccdd]^ce]WWSXWWUX`lFBr3=H@M<D&/ +(I@ + + B) ;..9&.$"*-(&$2$:  T]a^W$     +  #C(N9#+=,,-/ %  #)7/  + +     + +  " + +F4 +%) 1b a:e3"1)<0%**/%",8*F2%(,%"     *+9478<,6*'    +  )   9q\JQafPnpdl]RWdcKNX[\ZRZQ[[;Q) +'/(284#- =2-,  +    b506, / )%7' !%.  + .    + +_E-^YDk-<,*70O+*?DD@%AE?E$)8HE(LV6/-6JKBJJU[Sc4/0>=3E-R?520/9B00+5-'"1XK:B()N@I@7I-1H;d|kͣgƝia6jvH|]TsOElrr׿Ѧڷлʼ׋ծƙƃ弋蝔ٲ敓Ṯƞ惋ԹԿ˹ĸDZ}kztqnïag_juJSO7\GMaJQxy|HE=72)A)*(><8RlNdeWv^k~gwo_tm{sns`ne]wwFp031621442.*%04/('*,+&$')(&&!#7;:,,'09?BHA:AECB;99;60*,-@:EFJ;:O4FD<(.   E<7++3@ANYQ1DLKXVKV[7h2HM`?L-C70-;.4D.'3/2JO*)$8*!#&>-%*442*.11):5;1(')36Y^WKGO@Q7/)-1A6W7>VTeX_X14?/!9@+=/Z*-2$%,)2+/1)=#-#A,(#2..--.,-+*),()*/+.&0$01#.=H5&# &//.E3,#'644/005=;<01-0-*-0 &%*(%/-,$+0IHLH,K=F-4+0!%"''$$)%5,'76@9>J3*B=ZHV`>MIVTWMRRLQOSo}vrYVHMUIFEFG?<>A?758ML$$$.265SAO`!(XTREB?3D0OWhJ4fvW6/3iS'P='$ $$14L[+;$E!,(O& +#V>0' -H3]B/;(:&& ! "#/,"'(/ +"-04,.%$ )1:,  ;, 6!$ ($'($"('$(-+'(&0**(*1$.,/-$)&('&+') '")-*'.7.*)),/-,+/+,/--.*,/-.G-0--*("96-)# )!!(03.0003101013120..3344355:8;;9631030///-...-/.,.,+*))+++,&&+%,'%./&%('+(&%#-$%)&!""!!.!'("( !   # *%!!"! %#%$ # !%!!!* "%%)01,#&+(,*"#)$,!'/.6,% " (%%#1()*'&1*&ECBBDA==<8@CDFDF!#<=0#>Memuyyv@@@C?<#20.1/021023/0372,-(*)6-1+-013206874552--,/..21266554//61|{zyz{{{~~||~}~}~| }~}~~}~}|}~|{{|~~~}||}}}~~~} +~~~~|{|{|||{{{|{|{||}~~}~}||~~~~}}}|}|||}|{}|}}|{ }}}|z{{{|}|}~}~}{yz{{{|||}|||zyz{|{{||{{{||{{zzz{z{z{{{zyyyz{|{{{| {|}~~~~~}{ ||{{{|||{{||{z{z{{z{z {{zzz{}~{z{{z{~|zzz{{~~zzz{{zzzyyzyzyyz{|}|}|}}}|}|{{zzzyz{{{|}~}~}|z{|{|{|{zz{z{zz|{|||{{{|~~~}|||{z{|{|{|{||{{{||{z{|{|{|||{{{||}}~}|||~}~}~|}~~ ~~}}}~~~~~~~}|}~~}}~~~}~~~~~~~~~~ ~{{z{{{z{z{}{|{{zz{}}~|}{{{z{z {{zzz{{{zz{{z{z{z{{z{|||{|||{z{z{zzz{z{z{|{ zzz{{{|}~}|z{}|z{|} ~}}}|||}|{|{|{|{|||{|} ~~~|} |||}}}|||}}}|}|}~~~~~~~ +~~~~~~}~~~}~~}~~}}}~}~}~}~}}}~~~ }}~~~~~~~~~~~~}|}}|}~~}~}~}|}}}~} ~~~}}}~}~~~}|}|||}}}~~}~}~~~}~}|}|}}~}|}~~}~} ~~}~}}~~~}~}~~~}}~}}}~~~}}}|||}}~}|}|||}}|}}|}|}|}~|||}~|}|}|}|}|}|}|}|}|{|{|{|}|}|}|}}}|}|} +|}||}}}|||}|}|}|}}}|}|}}|}~Ł~~~~ ~~}~~}}|} ܼ݄鴅ӶǟӔ𸀫ǿĎŰ;ʒƷғѬۀ຿ቖ̘ق냫Ƚݑ٥İލ旓ͅĬԤ禹񭘍Ƈ撗+ϼϼ܎ޱ՘ѣ긤ۉ𐀤ГĦՄϡ섄ջԶìÀϦ뺩ܔׂ朎Ӏϯ݃啍ijէצʬ們Ǜ݄͌ăҜ܏К텫ՒۉφĪŚŬ̸̼񃄁ݺԆﱊ쒤뇾ɇܣ̟運ܲ뀈Ø򑨷Ք۲ʱ񈉣ʨԳ턕סط辛䳞ֹؕϼЮ煃ְϾǀԩ˒јһzyw{̣„߆񓊿q}z}vxw׿͟ЖȀȏokȹȭt|yvᙑު߲ϝ򏟇DŽ቎ٱᐽՔ܉ۣ䶘şޜꦮѻգԑĹȵ̆ƻż¿הՂȏع䓽Ƽۖɤӵ֋䀗؀Ƃͦשǻ歌ɀ􅪹񅉄򇔤芐臌޽ ř߬Յ❆󈥠ߧţǹ߭üͽਗֿŀƿַƭ܁慔ȹºøĿǸľńҊֈΥDŽ˛߉𪰝İ珳ݞꟇȬФߞǵӥśͯс݈ɖП§炏뀅ڔΒೣَգۊդ容唖񑔑Ԯ܃ĸۂ聈˻ϼؼ꜒ϋ狊ل诰Ѽ邀ܦ̙ܓ􃋌ѿ曑涥ɽҽоèȹĺůdzԺ΀ɴ؀늝几ȐĆʿݻؕͰʽٟɯ̯턊_ײ؀T99;8lkiijl678olknpmmnk68:<:@@=988777llm8:97kkkhl7:;:?>ABDDB=<99A<=;=;<@@BA>?@<;;;?:89;<=A@A?===?@><=<=<=>><;>=8<@@=@BCCA>>><;?A?=>;?BBBDB><<>BCDFEDFDBBB@?@?@AABCB.CDBBAENLIHKMGFGHIGC@CDGGCBBBCA?=97>?AFEB@??=?<@>=:;;@@@A==><:889=:><>BCA?bQb64486k?WZ`hV@ 19>=QaZEHIAFA6Q7IE??653O?^FeF/.0*.:8euR~dn|qOaDDwnll{Ztlw~<0%+$ ""%'#!&4>8DD*.',+,=,%)%$GIHOR+%"&'./-)/44uv^uV\Njx|@Jadx(itd_m^KQHE>=96)@OTTUnR^2ToW,+"  3&&4`r]iTVSG4Y89!4-,H58]RR=CFT1b]=p_cu:E?OO[2M+1=8K5JD735-LJ< >.(6uyeW^YuMb`c]c]meXTIzT\hqc[fKUeJ+?ILO=_=cF`9qE%Q.OIF30/34;of\j`NVVhbla,AA/a5R[Z4IWCD3=H.R9>0M;*IE;H5?Be76CIA/OHMIbJukf`\5;9>WYUc7PQJH1xbfg^Y>YEQ32ZRUQSi=xe]UWlONaWxEa8UI{ewz?PIQtgzb}~myqnZ<"?zQNS|URXaTPYP[ykoXLklrjYMTXiePjKAJ4xD_RpA[uwrkXqtn|FGESbBakNsmgaRKMGCDdNGCFDFO{}KMS^xWQOFHRLQ[nuiYFrSZIzgYcbvRhu}bnzxrw=ts@WwhYv}w~݌xݳɹԫrVu|qzܻxs䶃|tt|昉ۂԿ}{{¶Ɨrqƺu€Ǎpm³λŶ}젘–͜񌞁x{v_onp|}F\p`bUgn~kmckynd{xm`rzcj[`mqcCHPiMy988=7449<<6.:=924<>==7998::42,/?ADDB@EMMOPNILOLLJIJHC>52:JFJHOV|uevnz>F^= $&()))'&%$%Zm@*msZMltzT[vXYkY~vmXg`amcQFCKLB}YGNGYmLSamYKTRWOBTUHtwTWIEM}FaUfPP_oBPumbKvwPZd^bb`gjtBJ_x~^CB.QMDFEIHFACGGHB?EHJGJ.AC>c]KPb7-[3OU^GbC>`NoFU3>?ELPG%K]dxN0.F+&*NM(-9e0(.3/+2-+.&)MGQ(!%*/$(138p9>)*.*+$ %"! #.,6%%@DT  %D@>1..8?3G:/)27E?%>.47C?>@6(6/0""4KeOHE7ACG@6ESNE@;451NB)/^>798=99>;9837535;795^02=4?0882..0234130-YNO43776/YWWO356:1T<=RGABQZPZTSVPMZ_WVT_a\89;;8753Y@LTY09:231UPRV0/YM8.F;;80+]3YGQ?;CB;c,Z024154754ddh3c246656788988999;>=::7J\6730`01354_^^^_`][]Y^`^^d>734da\WQN@P]41+@WaP;_E<+97bpB97j`YV\W]a`_bcdca]d`a5gfhegeffg79pmq8988999:LH?>8.831J-498<54=XT<:.8A?52572R2;D3^0\`aV4BXRY^Q5?IH9LJMWO[HFR;=`50>XDNNWcU3UR52*XBHCA=97U>9:4fTWTSJE]bd\Z[\UMSREIKNSTc[02WS8?VcwFAC@CFINXc``ea`_Y`gg`adb]ZXWVX[[VU\77icln::@@;445766778646644545426(B;  &%# "#"#$$$# ! ##  0(0/"&*.+'35'/0-02-7EICL =L(26K4.9GXJWakiBvU}s}F7MEoL@[u  +  &"&**'"75/+$%# "("#&"$) ++.+ $-"8'&1!$,*%  &'93""2 8?ADF!"#!%/++0#&,' 5$6R1.&9%&#= ! -2MB) '$-,.:'"'(.; +$+/#)5* +(jbT4   + +   !3-!#&  4*$+ $*)(   +     +  25,;8 I F 4:F#@!*.9$+-#"27#!,+*!)2=%$%6EB;   +'.;HR:>GuHh<      + + DZcT]YvOfegbgaph[VJYbmrbZ^5'  "33F7 )  %  + ':TN1 $  &("# + ! + 84'#LIC`:=7QK@:CJ9:THY+753SNMYM'3V'E,KFRVQGJK^S@JC@B3 STA-(/IJ//S26.)2LOM09HD[7O1*BK?YC=0L+-QP0;:,@*/>/e6Purx>fPb1b>WYrtb^jNY?.<=6@;>!;#%0^kvH+E+AN370XXSC>F?MC.5KFG;@18?BA?HHB7;)7G]B4LMM}mm{uƩdLoaEaqofZיǸȦ׏ݱѕ򇇅݄ɑļϲřק˽Ř喲̮ʴؼɴǺׇ~wvwt~c`vAfW<,M(8RM>9x|{B7I /3:<0:Rix`fWnppst}͞f|znq_mm\`lka?CQnOt65260.///-)%.0,#"*,)($()((&&7973106?AEEA>CGDB=:9:75-+3B>??DKbSAPX\HN%)<#  AL(03-5S`[R6CiWRHc2[9J66DR2J?6:,/-189(%#..RSI!A-!$)8@++4?6+4-1.%0P0R'BSYVXNMSHH4R5,'K+JJR/@L3Dbi^0,9;!F0;aB9$;A$(1,//-/06!$,5<:DP2 --&+,./-**-,+&"&&(&'&$">6#.2%)LG65'3,&. $"4306:71,+*++!(.-#)J)L/H?TRGKL7(&.,)$( %($"!(+3,+8C7:F:CRZM=8PI5J;/-0/RL(,N,63)Na9Ea6L5?V?`T?C?6KVNLdILRHSrxN{}zHM{|}RSUPKFDC?B7<>??@CC>68::64;-'B&1.7HC>KLN6/B6;2/OF?/01/*/,,0,6&*3%#6E25)<4,"F>-A#;; (K%+6%0;G2  '&!--& '' A%*#!//  2CPN0>YUJ$4552*;2)$ $]8("2.! "%")*G $.0/52(16\QXGA(2$'",  +&#%)('(K:V>9RA/>-F";A,.Za91,VS5JGcRKJ6JFBDN0bp_$#0dAJ%+(.66-:T_q@$!.<> 1W)%! *% D?@%+3h33"$ #$)>-)(  *(3  9H,+,-2'$0,+) + *3&!!$! (-*("")(($)*#',%+('*&%./'''..)*"&('%&(+%#,) &1+ 121+").-..--.-*,*./--0.-+*&&&2"),$-3: 2-*)-)+,,,./010-1..24644354498< 9942/00,-,,-+---,,-,++,+)***,'%(',#$..&%'#*$$#&-#%''# "".+ !$  " #' "!##"%$$!$%! ""$)'%#++.0)!*',1+$#&%&/*2$#)*+#!&,##$%4*-+,(.@JJEDEDB=?A:?BBDBF""AQ:-+1//2//0,/2302462/-,*+--*(+/.34965320.,,-*/.-..//./2436652.021/ށ|{z{||{|~~}~~~~~}|}|}~{|}~|||~~~}~~|{|{|{|~ ~||}~~~}|~~~~~}}}| {||}}}|||}|}|{|}{zz|{}|}~~}}~}|yyz{{| +}||{yxyyyz{| {||{{{|||{zz{{{||{zz{zzyyyzz{{z{ |}|||}|||}|}~|{|{z{z{z{{z {{||}}}{z{{z{{z{|}z{|{zyzyzzyyz|}|}| +}}|||{{zzzyzyzz{|}~}~}~~|{|}|{|||{{|{|{|{zz{ z{{|{{{z{|{z{ +|~}}|{{z{|{|||{z|{{{||{z{|{{|{|{|}~}|}}}~}}~}}}~~}~~}~~}}~~ ~~~~~~~~~~~~~}}|}|}}~}~~~}~~~~~ ~}~~~~}~~~~ |{z{{zzz{{z{z{|{|||{z{{|||}{z{z{{z{{{z {{zzz{{|{{{z{zz{|{z{z{z{ |}}}~}|{||}||z{||{||}}}|}|{{|{|{|{|||{|}||}|}|}~~}|||}|}|}|} |||}}~~}~~~~~~~~~~~~~~~~~~~~~}~}~~~}~}~}~}~}~}~}~}~~}~~~~~~~~~~~ ~~~~~~} +|||}|||}|}|}~}~}|}~}~}|}~~}~}~~}}~}~}|}|}}|}}~}~}~}~}~}~}|}~}}|||}|||{||}|}}}|||}~}||}|}||}}|}|}}|}}|||}|}||}}}|{|{|}| }}|}}}||}}}|}|}|}|}|}||}|}|}~~~~~}~~}}|} ùά¿񍙭ܴřªθϓ͢㚩ĺ˻ʫÉ̐۬ú҂ъ䁄Ŷɖ卞׀ˍކ㍽ꑢ̑򯏫ƞֵͱľťͧҝµěӒק꾖됖ù沮ϵ⬳ч‚ʴәǽѪՈ񎞮Ŷ˱ٖ̦ɄގǩۢٻԽƆ횂Į̿Ჵ׉񶕡ҋ󁑜æĮるɐܧ؍ˏݴև䬬בԢ㯐ʡ㱲ƀћ轭سԢȡ٫д͎❘ڍ§𗻏ˈ칈⻝ꇂޮŷĶ׭‰򄅔턖߁ю̇ץÒ檒ͿĽűܛϹ؝̹¥Ο|叚𓭥čͳ̶ĻxĻٽۮ̶޼떭Ƿo¡״zvz~lZXw}ѭĖҮՐ΋ѶďҗĤ҆Ц˚冟ϺީƊĺžτŲؼ̻׬˵잎퀬ڌƱɂƦָƠτអӳ蟋ұ悂èЀ擴ș󂇌ʻےꇒĬ͏吆ןڌǢ؁޼ۊɎܾʌஙǀż܌ī넊뼣ٕĻDzλĻɺɼčވׇ׺򦝾̀Ԯơ悋㶸÷۱啐ݨ؅隷Ꮜ̱ժҹݳ̣ǟ̿΁哋憐ǔҌËƜᵭǤ󁋕؍㍔􂄏ǣ聈笓À䃑ɾɸ؈𸿄ּ²ۏٴȿ¡שìʚ܂伈ɳʭń냈;–ë胊㫵ϼ9777lheggl8mllgf_gn7<8hg9;=<<;:>@??=889<986787p7::99886k68g457<@BC=><:<;<<;<<<:;=CA?AEDFGEA>>?@>>>;9=@?>?>BHKHCBBA@AB@=>==<<<;:>?;8899:=CEGHLIHFECCCBDBBBDGHFEDDBBCCEGFHKJJLJKOPKIEEEHHD@AABDBA>D@=;BE?<>AA@?@?CCDEECEFC>>9875367;:>88>>=B-B=4=0>@7-Y>1++#!)+$"8bkXoOcH\F<[\AZjfqapwWvdm|c'&#) 0*,1,+.)).*0'01!&&--D89>+(J*-2,B#3;@GjHeqhgNP\FNtZ^hol|`{xUY~AJRQqRWR^UndTRkMxRf~mTsK+ZBFd8PS";GA7'%<>?&!1`ZwkQS)J'MQ)'''))'&++*(&,A8;%4?UH3?;AC8I5<6?:.7JQkWmH-,,&!&311=*y7C^thD@_dgQ0h?s8=-%"94A2,7CGnor[7_]N94 +fJ>??5si`R?85L]kaE69<94),-33(Q+L7/*A<>**(=2CF15"C5C=<8:CQTQ29A$)&.# , %?7"9!AFag`d\>G)(9) 6)0=<<$,'6784;"$*1'3]],W'=a|skggX]]PLOP[b^[hTZY`URjXAS:$#+W729o>X0`#Y>&DRC7J?2HJi6`t`lqhZC*7<,30>/HR6M/O2\^FCH==0a>9OT7BH>=YS>>3/013/QGJPV]|cN>^KOgjD;>NIDQETJl[Z{IG\.PmdvgsSQnXw}L8<[ru]da|gjdm~iaWgzK!UaweZTX?[[h~~\bcs{dVOPjWNul~}jNGnVJHQGqzIQNGeqe[]gzfOS{shZqhntC[Y[afZeuxq\T|lw|OZsHi?mACQLPCyF?ABDBp=MJILLNEDoGELZ[cMXiFWX|`fDtnMcs{xpq`cOrGmeWWiT_}۶um_pseқͧھ̥Ĵ⍙tčͺͯоŽހŹԨԿpr׀̷wߺɺؽ{lk~怉Ь||ʬonvzjX9EGV.+ $$>T[)yxZX|[zi|biisrom|{tTe{scnosdVTfnrmHJNJkJ{9:@9206<@93/;;:18A>=96><8:941+3DJJL=?FLOPLLGKMLLKIHHBA94>GILPQYI}gYqJKpG"%)(&(%%$%>J+sIkdW}d^k|tW]x^vkmo[H=dDCq6ZYHZ_:OtqXevlWKOIyQ{xQ}kzVtPFRxvw[gpb_VfuZ\9MhjU]V[fhlm@B>Pdgdbu_L?6*.)LLKJDDDFGGGJIGIFE,2CW?QJIFU./25d_g\\10JH5V-020/-0SPX-..00YMIEED@DJ(+*+,-/016745AS@>Cw?SP`irwW}|QLWSQi\VIX\^mji_\PP]q_`hXVW~]]SumuzfXb`YSYd\g[gX^m`j^]s]`WuWRX^NTJMMYNPLT~t`\OQX\UQPTMKCMRQLMLFDHLPIPaR[vswmk\\tnLMHIBJMEEKaNac^vfcfr]hxU>GGiybbwj>;<849:91::-/740+.-4;=093452-0<;<87A<9>>78//078AA><5-.-11U\aJhuaO^liT;CD]\DudkS\^e|[Yfzc\vPyLW}~OlT_qR[b\\YcKZX]WLsp~h.[iuFR>SXey\p\Nef]gIVU}pT^[S08=YARMIbaB.]GcZIOceqkDA,3.TC:,D5GI?JJ9V_[-,KC;'MG,,:[/)'-0/(/.()&EQ$4!*+,5%5/jUDN*-Q/&0)#)&>&1BE(HB!*)@GL6>456B5)(1NAD/<3=@D34*360!"rVLL?AEKDH5@HNHH=615aQH(99238<;9?49C=6467365604:62[/224421158656488438<;93251258680X027H24560/1223522T[P68B??3/__`]\2253VTPJ<3Tf^XZRV\d4e]ZV[3568535?9882MDX^:8X87/V]Z\//R;.A2435645[\QJY58@?83[TV5\6533222fg685577767:=:8:;<>=;85i\D473_^`02585g_ee`Y[ZYMYfad582c2a^WTSE>J;3_9)BhL\2?@KEZ<;8545f\[\\^]Y[^VY`_a^a398hffijhgimnoq:9898998q:ole_Y]\VXUUUTUZ[URWZWVV[VUWQWKMRSPEO`[NRSNPMLKW2ULV1F/>930YQJII@9973^aY`^Z8292.2<>A>\L9L6JG=ADJGGGB==02[1^X[XUOOOHGFIPTY02[VSL[fyHGKHFFHPW]^afa__[`klh`[W[\YXUU]b\ST]`gjbei==>9`efhha[c\\_^`[[^_`aggiihmicbacd`^al:?AGD=c65221465664.4610 53.! !  !  !"""$"#%$%'($$!!!"#! ! "  *)-,!($'6> 71:744479AHJC 75WE> KPNLU\X\EHPE|yH5 +    ''#!%'&0%S"B4.-$0! '   &$,"&+#e=!#%   #% !#" ' 3,*."7 $)#*(01#" &:3#8 0,3,% $3,+G;6/,4 &'(I%&!)"$6'13()fN )2+&  DyCH5&&   +    # +$$!16@;I)    + +0 3 3(  +  +    + +/M +g_1$> ;'" 2''#,>0.,!1/*+@C7   >H=V:/Q`dn$  + + + + + + .#8t}pmfl_`^VQUQ\db`oWZX]PHG! %C+?1" + !  ##(!) +   5 +  <97@4 4aU`dYT17jewMcxpvR.O".m1LO\CIEPUWb]GF@ES`P?6BOd`+ +$1@@FD5//0H$13G/C@OAB8>VR=H[ZC7.*F:C%8*+;6?DN@.+8-/3:;`Z00T63`Hj\hdODHP\D./A@9-6B.13 6=@HOEHRTTB8PDQ^cJ$,9$81!")')!:"!"#;'(')')#%8((.56:,5K.*7>A=OS\UUY=D814*>&;:3;G7=VO^q˰ƦfbOUsQ<|d}x{Л˲̲ů͸ȸ盶۟ɸـ̿ി̰}{𙭺սƺؼַqutzjk_zAvjYK7IUnml)]tyxycP3:>I##7;+yrPSajylnzy}ÕUf}uv}lUScmnjF~HLIlLv77:1))014,&(1/+")1-*%#+*)'$ )>DFD@;9:;870-8?CFIHN=aeET:X\E+)F$     )M+1$:[V;0GCbYl<:^THLHW79C?E>*/04E;4H'!4&(MLA48,24".?=-7GB4(-+ELB)>:@OSV2K@L4G0S_U(K.GSNO;L@B<:5VY!0/0 748949:84+*+ $/&(.VTL*22AGEC<7" )(,.( %*41-&(!%H3829D;;_=\[64,NAB98,RIfL40QKN^5Q/1707/EP02/099DJ>YR/622,34,./1"&%'<3$<##"6/+#06D=P;)%"4J9E&@+-0 !  ! "!!#!%$!""/3#"  <:,1;<!!.8"?%+.7<1SG[5.A&!5 2%".7 )##5(  J;9*% DCS|gEvW  $ '+-"2La9)(, +AB2-EH@KHPaE5PLK1<=)0;2:>(P9D*39L7LIE^\7"O3UO!&C# $%(1/(+2%"+. + 3/6 (!*..$.467*! +  + <($&!$ $!-+" *'%)".--,+))'#+4.+-'),10-*)+#*,('+*+% ++%!),&%'10@2-++-1/1/-*,*)!*1.0/,,*)( $8* 2")!(&.0,t***,*,.-..054466645679:;873.-00+,+++*+--+*,-+,+/,*+(+$%((& &.+%''$&###)&"&'# !#,/).-)+)$#"! # '#"")&&%$#%$% #)("!%)+.)-*,%,(*1%*# "%2!#""/ #&#'+#(;-,#!$D%GDGDB>=@=@?>ABC!"?AJIWexFEGDB@@:J)-/130.0.05530.,10,,*+/2.((+,01,/1 /00220.4.././.,-,,.433206511010. ..6 "ہ}{z{|~|{|}} ~|~}||~~}|~~~|}~~}|}|}~~~~~}|{|{|{|{||{|{|}~}~~~ }~~~~~~~~~~}|}|}}}|}|}}|{}~{{z {|}}~}|{zyyz{|{yxxyz{{|{{|{z{{{|{zz{{z{{|{{{zyxyyz{|}}|}|~}~~~}|{|{|{|||{z{{{}}z{z{~yz|z{||{zyyyzzzyzyyz|}|}|}||{{{zyzz|}|}~}~~}{{}~}||{{||{{{|{{|{|{zzz{ |{{{|{{{z{|z{|}}}|zz{{|{|{|{|{|{{||{z{||{{|{|{{|||{|||~||}|}~|||}|} |}}~~~}}}~}~~~~~~~~~~~}|}~~}}}~~~~~~~}|||}}}~~~~}{{{z {{z{}~}|||z{|{z{z {{{zzz{z{{z{z{|{z{z{z{|{|{{{|{|}~}z{|}~~}|{|{{|{|{|{|{|}||}}|}|}~~~~}|}|||}}||}~}}}|}|}}|}}|}}|}}|||}}~~~~~~~~~~~~~~~~~}}~}~}~}~}~}~}~}~}}}~}~~~~~ +}~~~~~~~~~~~~}~}~}~}|}~~}~~}|}|}~}~}|}~}~}~}~}||}|}~}|}||}}|||}~}~}~}}}||}~}~}~}~}~~}|}}}~}|}|{|}|}~}|||}||}|}||}}|}}||}}||}|}|}}}|{| }}|||}||}}}|}|}||}|}}|}|}}|}|}||}}|}|} ~~}}~~~~~~}~}~~}}|} 򏔌Ó߾邐³Ǎʷі輼ᬖʐɓǟޟٓ⹘×􎤃ʷȺ絡Сƽޏͷӛ丮ǫي힅쁒֛Ϲۭ„Ԯⶩݖǵܺ爍݃ਜǷ􆅎ϻ΂岲뙻Ԋ٭̸ၩ˅˺Åëşӎݏۋͮ뷴̴ə񿾇ҭɫó튊ި愱ދְªªʸܲ盁ӆة˩˹ֈ҉℀ͶӺ֌ҞݎƳ̻¹ʑ㲭ǞƀעѳĻţ㷸僔Ȝފٞʥ銰Ɇ񛲀򔮺粘ƫ涗ǻ߿Бٌ鶐ĬԀѱξܶЄʿgchwӕȣɼ}{xzu׸xv˺ބɼϯqkwtЋpabcfu~٢{áָݑˤکד򐎑؆軅녹۬ؼ銡ⱨĴցƀȿîĩО̙ř÷Ʃ˽ͩ񂒀ʍƯ⽡مά۽ݣۋĆüׁۀꆐ—炆ת肉ȼ쑟૰̼ˈ­̺濞풜϶⁂ޙŅ㞺πǾʽ́قΫГ򯦸ƼʳƼ¾±»¸ŲٝԘâむ܊͊搏lj񶢱ϮӮڀލǻȮ߃ӆߚȖȠ߻ŔȎƮϣܽӈށLjȈ֎닉ξٶղʞ߼Ĭˊ܈ڒӊ삉ٵ˿̹㗍􇋊䋜1󌗐󃋑ɾ𬘍ӿ۵倌ƀŽ˿ϳـ¶ɫο󅀍ƵŮזļن耆Ɔҵպ繉燵ܲ􊌅Ծ䴚Լĸ傍躷ƎKũǮ򀃆ꂎ;976ljgffihhecaWZ`gjn:=<78<>??;9;=AEC=:::;;<:;:;:9::;<;;::98677656f369<=???@AB?>@DDCAABA?@@?>?BCAABCCDED@B@??>=@=89=B===:;<=<;::;==?@@BCA=<=>>=;9:==>ADGGGEEDCCA@A@?>==<>=>@>=BEHLIJGHGEFDCEDGHJJLOQOKHFEDCBBBA@@DB@@?><:;<>??A?><>><<>@?BFDAA@?=998765589;=K=2 ">?'Xvp95J)*(/'")+.+*/,*;6)0,,; 5KDF>7Y:E"H6"2Ge-"(,DwgG0'%  %05;gViiih`QcuVRwZ);:<0431g>7D~pxkjgQKPFAG)-ivC>~kdjHDHH6=T)AnJWa>7RY66>=L +6:: ,#0-+HADCG(@7F,&"CK;60F7;Ji@/V>EL%)9)% 8&'%"<-+4?;;#VMUJLTXXH42<@+&"*+#1<>G?((3407,"#*9$$)CnCPW[zgjc_cggiVj}owcYqO\mz^nPI@H06;:@;=GhZi{[KE84CiM8>36I37ZTg<7SQXPHeR:Hd?91M00;.GJMF-Z;.R>aM9Ff?GL?+E7\?.'C?C0I`DOYX/tI/GU`:EO0/=5@GBGmMc8F:X1Pdf}~wereyv|mlLAbVV_such^^}j|yy`WhhdmI7_Qwz~jfirpX~UoScnMVOy|JpZKQXlwMCbMIDUi`]\RftWxu\Xar`uQ[V^bY\7FYu`fjstgr|thJL[dsNMwsgjl|EDEBCrOL]`^hxy~EHNHa[XXTQZSQ``caiLOvgMPSrMPeqIEPMQOh\CEigDN|ܡˀè~^}qݺςָɟ{wz̹͎}s}{~xڼ񁒺ɶâj¡߀wr{ǝ˗žڞomnsۄ榪ÜƥچŀzŁtt{sF@@AHvY!96>?<<8:=978820*6HNOG@=KOQLIG>JNLKKIHF@?83FMUTPQTTP7Kc_[?G]?"%'&&%$$$"=aH8n}Kk}|iLxTUtt}rp{kw^\ELRAIFA=6D3-@lSU`PYAhv{eWLVUhv{~yLJTxgk^^yeKMvt~Xqi_ciZePPRfUV]Ygenpuk`d>KITWMAc<5+>MiDM94113/dn9_R32,4S512//0-,USU/.,c]VQF>@BHL(-;-,/;OA5:938AQ@;fkkeqhZXb^^_rLsLQWYOURKYiY[hpRW_d`iRgpnjniZc^fb|_^_dZ[viwZkavug{ZvxljvPOUPRNOTUMLKCTOLN]VPPNMLIFGGGMTTQQNMNqbb^aaa}cb}}tyidihMIMJCKKBIN?iSZowaqlZRzsUTULHjZmyizR:7;8288<56<:/55(06<=962:BB;46B>8D@52.0644+/51.<=;8991.7?Thba~~aowhzRK]HRV_QHuGNP^LPverz\MzSXNYeVtzOrSm\iUKMugOaeWRtwod?\>[>8__J=aIj^QR\G8`A0=dsTN999-Y6G)+*U=Q2,*+,'-/+&KKF(/4*9.4/&0>c8Y.0T).:.-)##:"-CS1BK,&*%(F@CH>;:JI 16ILJ?5>3*08 $%"PRKLCACIMND=HHFEF:6P^RY3$F06::=;:83?@85744557667852/\^02444586456574256=94/872273470233253/S.1122475032349=@73135[[^U^23410XQNRSJR^d63\]23_ZY_b575103<<<6XORZ384N1:20001UOOW^`TT485631^X\569<6112XRXY2231233e4769665889<<:::;<;94bc[7X0Y`2`03759:5f8h`\[X\__e4461__\^\UVUHjO51M-DQYJ5FRL202O]<2=01V13:6^3WZ1SV124[397XROZY233ON0/WBK^SG688Y]=478a`0HYOUV=WZ944V33,AIJC?=7YH==5P[WME7/B4`SWUURNKLhMFDKPW.2.TUTYcisCBCHZHVX[ZZYYXY[[USWUDWILLXTT[YX][_[`f567]5>8fb`ekhd`][ac_\acccdcfi67eYTZg7g]]begm8<<65311234332+-16560 #!"!!! ! !"#$&&&%#  !! ! !$2*-"&%#(!& 04<8:6=BBK))--"6:=XZXN=9KSUY?YJWTKt%F'XM  '0%',.)5G87)&/*%+ $   $$:(&$ "!&- .   ''& 2% !') !&("&**A> '# (+'*&%'(-2E=GW./,' ";"'0$.(8@?"=   5Wnuj_PW   + +   $!6,UF,  +  &  + ) ; 3'     + ) +  aH G!  3/32/0$0/93(&$-F**#32 + +   + */2**-,0k' +   3($`cghcdghiXlrzf]xMWiv[f=(  !IOPY:"  +   8:6U01  #1!/ , $  ' + ;SE'7!L`vsSepseqcy|gbIF51KY7@DTUC9;C<1PGA%,#DB,?.#0Z8GD&"7(&$L/;68;6SHYC]h[DDvHO>VDR20-10&& 2cWHKLLMGLNIF67BW]N8@H,/DJ>354=#!! #>'%.256@CG'KHK)-)614989=83>DJ?=()>G:*/1C/2:),A8(0Wsʿϟ~̵kGMWHzzڴփ~ѲנŴʪѪɴ˽ȹ|ҿѰtؽ侩ŧȕӘɀqjs~|qSk9R=/RACHSR9|{|p|~B99:AW4&(8!J*{o=dZ`x`j{}Vivn|ocJchshuHQF|~sk77,((321+ ,10+'./+)%&*('%"-@B<0-0BEHB<:8CFB?=;<<86.-@GRPJHKH;#4E\T>P5!,:   9'3DP6KOfNZ:G-baYO4S7JFE?;A@AB-+2G=B;9OL?[,OI,GNQ9\C<7;A6R;]SQ[IL.'+>"%)'0/35;4..%%+/*#3!'/.-,,*))&((('$!"/A,1 IP*D5"!6! !88:B?:7201--*"# !%/&&DIE>IA89B9E#%'2#.5449%/&*13#8BM-F4==C2IUKDA;5C_6L63JGME0RMWMOXY44812O:7Cd\0:O^:dCJDO6IHC?VL9@IJMHoBEC<<=9|MHDEPHAA?=;748:7;@ABA<827,*$'DAA32f=2^1A;@L;9;j2T5:2363-31*1,*"1D>%4&.1&'83"HA;,.)$1%,A#!/4!!"!"#%'$ $" !!'&%)#%(++("%."#1!" 66)%5&"")0C*f91L;B )"%#*# #!")-#$ + 6- 9( = Z??&8* G?;_sjsO.$(!     "5/7?9_L- +  + Y?@7<>U9kmh^9J-L3-RN<6Q/B03V7,+ISHI8?dXKIR9,Q6%5[jIB*$$L.<,( -??2=YR9:*-96-K:E$!#;A6!* "!5W/I&)F!! (50;+"(-'%'94 "61@+%.)!/67/#)  + *(#% "$' ".%)!--"**,&,)%&))"'.0,,.++-.(%&*#'#$*/-%%,())#'(./.,(),-01/--*,.,/,,**+'*+#3(4 #')! "#-91320,,-,-,$#,226466899;9860.-.-*+,+***-))('.+,**')*$*'')*$(*'*($ !$$,(&%'!! *,)+),(!!" #'"$"%$'(&&(&##&$#(.*,(*()))*',)%', &5,$!/0,-!)#%&&$#(")1/*($"0&H@DDB@=>AD?>?;&(+.-K.-.-.--((**,"##+((.+*-,.+-2(1001232/..10.,./0/00101+()13-.0236؁|{z{|~}|~~~}|}~|}}|~~~}|}~}}}|}|{|}~~~~~}|{|{|{{|{||}~~~~}}~~~}~}~~}|}||}}{|}||}}}|}|{zzz{|}|{{zzyyz{|{yz{{|{|{z{zzyxyz{|}}~~}}|}}~~}||{|{|||{|{z{{}~zzz{z{|z{{|||{zyzyyyzyz yyzzyzzz{}|}|}|{zyzz|}|} ~~}{|}~}}{{|{|{zz{z{|{{{z|{zz{||{|{|{|{|{|{zzz{zz{|{{||{|{|}}{| +}}~~}}~~~}~~~~~~~}~~~~}}}~~~~}~}~~~}}}~~~~~~~~~~ +~~~}}}|{{z|||}}|z{{{zz{{z{z{{{zz{zz{z{|{z{z{z{ |{{{||{{{||}|}}|z{| }}}||}}~}|{|{{|{|{|{|{|}||}|}~~}~}|||}|}|}~~~~~~~}~}~~}~}~}}~}~~}}~}}~}}}~~~}~}~~~~~~~~~~~~~~~~~~}~}|}|}~ }}}~~}}}|}~}}|}~}~}|}~~}|}}~~}~~}}~~}~}}}|}|}}~}~}||}|}|} ~}~}}|}}~}~}|||}~}|}|}|}|}|||}}|}|}|||}}}|}|}|||}}|||}|}|}}|||}|}|}|}}|}|}|} +|}|}}|}}}|}|}}|}|}|}~~}}~ ~}~~~}|} 9[㑇˛Цӥ쇰́ɬƠ򄄇ڿ߮߷Ƀ𶖏ɿDŽظ˒хȽ亹ǻݸ゘쉉𐇃ȶŃݥЦө󡟌ȹڹ́ݹ̝Ɉ׃Ӻ޷Ιꦆ۝džʼџ߸ꎬ˥。݁۳ܳ¢헊Ƌݫ̡̞Ą졖萌턤ږԳȯ̬۱εĻçݬꮤݤʖʁץ޺鬐˹Ж捅ͥᆮɺݖԒ∇̩ʜ䴉njߦԑ̍ŢƃƐꆇ浐̈Թ긇荺ɚӹܕΛ팗Ò૓жӐ΍皗ԽݚŹحλˢ׾ߛʵǡݴ܉ƈۙ،ؙ͵郉Ἢε䜋ْƀpsf|ބyҷw̹vtâԅ|ªioe٭ֲ識wƽ׀׾oz~İƶyg{}y~ԺߴДاԤڃ撳ˏ床犪ꃖøʳݿ¸ȾιβЈ喪܈΍۴ɦڀ煒ŽɥŸƮԬֵȬ̎̈́րű¿䀈懀퍦䎀Ļ耇dzθչίڏ֮՛£އπūˁ겶ձɬ򋐕ʻƙѸДϑЫۋ񾠙ͫυĿ̸ռº˕깳녅󱣌ՓݶΧܖ˭íŮ޷ެזأۯʑڐڿ၉͈ힶ٘ı쀋աߌՌޅΧӂǦĚ߻绕툘Ҝҁ֙٘˅ѯηбâѲꓧԮއꃃݢ܃ùڃūˀſɍѽȲçϮĵͯɲ񎈒迳ٹپֆگ⭳྅뇾ɲԵÚ˲くƻLǽ͠䃊48nkfejieccac_^`Y]d]gkl89;;75:CC;9=?A??><=>?><:<<<:9<;8;<;989::;95h6:;;>?BBCB@@AA@@??>@@===?@AACBBCCDEEDCEB==<<:<=C>???=:;?EB<:99=;:9:;:;<:9::>??>?>==;;?CDFIHDCDCAAA@@??@A@>???@?K::;?B?A?=;;=?<;;99<;>DHMMJGFFEEDEDDAAFKKILIHEFFFDEGCABA?BCB?=B>;9;=>?=?><;<>B@E@;9==:776357A>>MeY_wRVK I41$ 7>&,+ 6)'+0,) (A#)2o_NM'(),*,/-247:/!"04:+'*9','+/:LPE0#:JT205'G7Wh?F27,#0(=E_kUbGHSbvΜMtofvzb]: <;"G=rDLYJzhRMNOJ+)gGDswn\YTO/xJ?9%]ofYVl8?.?F2%B1\[fZXWU\a<=C63H?)%&FC/+5",\2"";?9-W?ZXYWZoCGA<,4.9)B?ED7-090*; 6615:3' Yg\LAtx|hgochfc^Yfoq]gpg\XVLazYW9H<76MpUvmQPce:#8IXGFAPHPK:1R0/PfX7Zf8>?EM?,7@1<9:4.#-V0=91\R74Ru^PIN5C7E:-LG<94.[7jT.&08_A?\69;9TSa^4[EWccmY?)OWGD~g{a[gnl`sodn|wbZLUdZb^NYkb}uYY{>GjPlp{qjlaWZXfwZcikn[kseNWbVb^mSOHNu\RRLQ\_RTf|m_ltfqOPGM_iD9Z?:fuSWXVOsaXZs|jXPkrk[dbci|]m[af}zDlltJZwnO\a\i|l}n{Qqfd]g|bYysfdvnENVx~PnpxeeDhaLZhΒ˼ダЧq\r`}vי⛎յóô}sȼvЀrɽvvƤ˹⌙qwnת՛ʾՇyķ}w֭Ѧsշ͔ǭ}Ȝntnp}w}ABAA}N$"8*(4axZ;r_hKe[\X[g[ps\OuhvkjshROiiooiersB;2729:86&;<>3;>>=9798587640.DKLLB>AJPQIH?>JMLLLIEC=>@;JOTPPPRSSUVsm]zGfP=-;B#%##""!""&RL&fZo~WhZcL}jU\VR`g|tprwggfBgH?XUIV+6Q~wX^HQQCrqvtk\mXXbb]^o^pyY|bcYX}_sippZvs\YmaZW\Un\cxGV[]dfZ[SQW]m98Q85:0K6C.31+R(NO((LNGEJN'&-65/6.,.-4M64>?C9m^Wcb]egdpvxoJRsdj~KMQWSozqbVX[\dj_gZPts_gf[`TUmss^trZ}vbTZDgrk~vmk[LPQURKKGJONtzvPTWPONKMKFDDTVKDJJQMW]^Ys`wjjrek^OJBHLGCJVdWy^Xpo|jig|~zYuS\REnanqhja]vCA9E?=<6110868@/0:7;:;<6;?8326=87::311471135;;.3:157813;OD`ZZxvoUNP{cdF_{pSU\MKTPYoMIJhm__itOTIcTsEM[LXJbfToSYHXcyDG}cP|aPbgHHF[j}Wsnsfsh^oRcojmujik[GcqOHLPCTMp~pZkAB.1@yvopijiwUO9UqBRHj;EOGDiXOUA7RR^@QA1gUr[OwHdfH4;ABT^>I\VROBK:{zSmzB@UGVBR8@wq=cC?hI@F<`HNQ;Ia-PA3-Q/FO?4F=N7_R20%=7ACB:.MJ;@1JB1,1L52;/"*aTHRCCQDGPRHEECFH<<9J8QbAKT4=?5==84=B948647677575550W01//13552228756443:@5346842626833445]:.126754587:>>632/,8441^Z05`463330[TNNMS_c372_`a1aZ\33ed049==<61R[_TZ67V197442\[011DR6646351475d32_50a\`[Y^Z`3323876531;99=>:99:9:<<5gd``^2X.Z]33^b694;97ihhf\`ecb`fcd2__][`]UTWMl;622WWYZOFIRQPQUc887kk5hgec`^a_Y^T`899646hcf54ll78por::79:;;9nqrmf_XUXUSSTSUVSVVTQOYYUTTRPTOQUUWLLKY8XSTPMDILW`OSX23?B/@6/YOFNF>9765V\43]1]]5029>==)43FBOUGC@HEG;8??;5AL;<<:<;ZU318?9XTC@;2T^+J]d7+0?>4XS;SB,Z243_OB?NUT4^UCNQV-L@EF/_TEWLFJQQ\AFWH[UC3:=68\45L,BNG?>8`RH?dWQxQVVT2WAcUSTWZRHGHGGMNV.2/WNWcbdny~BGrRSRUTUSRQSUUab`U?;>KNZXW[Z_f_fc^chji567hgd`_hjUTWOR`cgdbdddacehf^SP^69;66lmgfg99074325300112/01,.2/444#1E  "$$# !"!" !!###%#! !!!!"! !   )$"*6#"=@@D%B%'%(.5fIT7FksbGGH[Q4No3P7 !*!D$i   04*,!#)17TG$4.*1!/%$!&$*& + *+ +)*##&+& !#,-"! /&$.(#,#%%+##**/%.% (4!-#"$6.-;5!2"3NDR+XM","02!1&8! + + %/.$1G%I7^    aOa]4      +   ! '$0<$  +  +  <6-0 !.90"         +, + "4;    39L &##/!$C*:+*#,-46 )-C<(   , ,),-.S- +      + 4-%&S~zpyhiobiga^ZktvamteVQPG]i?)'Q6ahEBo?9 +   +75!G]&'   %  +#9'  + +  + +9BdL36(6irtua^goqbtisV]mraWFb<@NEI=:=p56JLP`KA~wColO!I8BJ+RBCKRTSIFB5KT.R1.?HVg[I574:C:,8<6*JW08`5;57/)&(5+&&!%05/1YFXUHCLiPETF,,*/36&(.=7A=91OF=64KMKGABEBM9<002AH7'>WPPVF;GC1.@WQ>kO-9,'   0%4NC\FH6;8X90NQI;=73>?46/;BDD6C35>9.,;/;CTT:L;>;6TN:A:=B8WND51>64\4SD6`NK-?720E%'*.0+-((+/2(#( 10-*+&&)*$*##:B!8/6 ""56;54=*??AJH7(.)%#0>+-/6/370*,+?I=0;?5<9;Q99H>19;>g91+QP/RhOKGN[3U\NTB>4VOUP-QaXQN:&:D?ATQD83+/1.-1+/"3($1=#0M5,*)7794&I1*.%-"%'#.! )#" #""  #-++0!#+* >!%-%-& $'2() %&:==L5>aB2." %$'5*/0;& >+ 4*5'= / 4"@7L7*! '1?~fYVNKL7-  + (#6-0,I0".    ;VNGF>F4ptLgs;9F;J9K/2nl7[@9P0,98^DGH0sA^%F2/PG*L^_]^.)B2"DB57)#>EFOdTG*"*4NH?$,9CB&"%%9L-$'$5)"5MH"GW,;))%`"!%/07$2#/%,&7)N?,*3.*'86**1- / 1)"'' ")(  &+$&)++*++(&&&)00,--/*+0/$+,$('**#.*-*,*),),j10./.((*,.2111-.10-,/-/+,**+,)(,(6%+*++& "((('&,332111/-/,)0'-611559;=7:<84/-,-+*++*+*)**'''--*++)))''**+$$$(+)*%% #$)-"&'&!%!*,,,+#$)!  !" $$"$%('*('&$!)'!)( !!$+"-5)&(*,% &*&-((*,'"%%6-$+$"#&#*')&&+&!2.**/23#9/LCACEGC=>?=<@?? a" @HTa]cntz{=?H)''*),,+()++230)"$+*),*/3/40/1331341/.15('*&&,/1//010/0110-'%+46432⁆}|{z{z{|~~~~}|~~}||}}}|}~|}~~}|}~~|||}~}~~~}}}~~~~}~|{|{|{|{{{|~~~~~~~~~~~~~~}|}|||}{{|{}}~}}}||{zz{|{{{zzzy{|{|{{zxyyxyz{{|{|{ zz{{||{{zyzz{ |}}~}}|||}~~~}~~}{|{||{{{||{||{{z{|||{z{{zzz{}}z{zz}}~z{|||{{zyzyz yyzzzyyzzz{}|}|}|{z{{zyyz|}|{|~~}{|{{{zyyzz{ |||{z{|{z{zzz{{||{ ||{{||{|{|{|{{{||{|||{|{{{z{{z{{|{|{{{|{|}{{|}|{|{|}~}~~}~~~~~~}}~~~~~~}~}|}~~~~}~~~}}~~~}{{z{{z{{zz{|||}}|zzz{{z{z{z{{zz{zz{z{z{|{|{z{zzz{zyz{||{||{||{|}}||}}|}{zzz{|}}}|}}}| {{|{{|||{|{|{|} ~~}}~ ~||}|||}|}|}~~~~~~~~~~~~}~~}~~}~}~}~}}~~}~}}~~}}~}~ +}}}~~}}}~~}~}~~~~~~~~~~~~~~~ +~}~~~~~}|}|}~}~}}|||}|}~~}}~~~}|}~}~}~~}~}|}~}|}|}|}}}~}|||~~}}}~}}}|}}~}|}|}}}|}|}||}|}|}||}|}|}}|||}}}|||}|}}|}|}|}|}|} |||}||}||}|}|}|}|}}}|}|}~~} ~~~~~}~~~}|} à؈©юՌʆ҅؉Ц󿣋ปϙݰմЂӿ߽ʼչ畢暭–ĖηУЁɐݯ򑐻ĸ黜􅨾¾蝚̽׸渊܀䍼Ғ␔׼Ԅ≌ܶޯۆ鈄؆Ƿ靵Ʊ؁劰ӢЄҙѽյѲͤخ잿⥆ŠԘɰΙДԇݿʰɢځĜ६ѿ䜞څ㪴ʀΆ郑ξ₃«۹ÊԊ鼓撝݁𵇝٧ǑĘַŸی˖£ȸɖقႣ솒댜܇Ūꉎܕӏ̎怓ڀ݁ݽѷІn{~rî؏½Ҩùߖx¹]ehtʿϚ˻ƫţz|wxy~~𤖝͡䑰􂄟ɌͲŬ墡󅇎Ȏ񒡀ɬᑪƧżƷємۘ탏ȆЅ߬ͩͥӍٕ³פɮ׶۲صۨѲǛ˴ؤڵ􀆀آڿ􍛏ƺDzŞՀʁޞ܄Ŭɱ۵߰Ӕ򄌓ķķӚڭ͗ΎĶ܁ĀɿקĹت΅ĽĽÿǾѝ՞ỴϜέ̀ޕɠ⚥ԥߣݵﮨε녙ȔԼʛֻڗʤމ򺯗ۍ̈́ۂ؁ȟ֍եۦꅈтƫާòں꼫ҽƾͿˑؗ޹⾁ځ˻˭޿̣芪ީŴٿ塉Ѐ񁊆›×덆ǿ۽ɽ׺⊘͵ܦŨ򃎏ѽũʯօә۞ݰɡÌ㏞ՊмԳƤ쭃ȵくö÷ް턑efgedh?@>>?>??><;<98:;<9;:=@?><;::;95jh59858:?>?@>:?AA?BBBCBAA@?>?@CA;;<;;<=BB??BE@><;??<;88>CGB>=;<=;;98999:=>ACBA???@B?>=?AB>=AA@?==CGKFB?<;;=?==><=>>@AACDDEFEEECCBACHFDGGIILJKIIGFFEBCB@?>A=<;;:=<:;<=<@B><=??@E@>=>=;;<;86455;9?C@<99:`7<>5_Y[fQEN>;611446<4<@HLS]0-raSTaRnxvb][SxTX:3RCA;<9K2b_nQyBRaE1J>IHC;CBF?mug;7836RhPUR>:F93'0372)/4qkwgoj_seZt^j\LWKGUelxLywt>&'#+/9!(*)+)*."!"%=#/*! *.55.QXP?& #"&(*-S42LC.2>IO+6ez`fm~XVGXi_|]m{USps\QAdyZc`YFsw|VkxGHOc96IyGWc~Ex~PLwms074.,+2*.)(/*% ',Xˣۆl&',/..+*6,+>/&#H1F1&<,>:IV(8)1>7LA9F78J'+$"/30H{VIWJSQZqiceZ`htD*B- * (DrsmySW\oTzFUH!,GI[ankM{I??eDd/O(K:@;22&"*-)/3*=mi@lXc_W;:5.5=D%)(!I)2K8-F5E-*#?+COCo=DN=v77;IF44"#%,+('8*'><5.(b:S^R`jJLC'&-*'9B>=#?)=245G+,=/6/2- XLAOSuލho`upt`YpMqdwuE=QR?E3[wMYNz5;<+ZQgLFY');8SP\QJM:IE;OS)6L?BE.6BVC<:7?-0B/Y?:<4HA6D]O1..*D,URNY108N>0=7;<;:97897<996*5BIMEA:HIPOGF=DJMLXQGDE@BEAJPPQQRPRQTU`RyB-O&9>!$!""$"#!";gUwrfe}`A^Eyb]V`hdg}tgPrsbFMB=@I9=FKR:2.94?DMSRSOP'(POOONS)*0@LRBoOYZ4=LYH>V.5>/-63*3uGTTSNP),)OUabf_^YX0XRV,,--:946PmkkH?cfj`^cYW[SWaeqfgmoLSLFdfr}NMuqfpR_NhxdyayXh`ai\]usxj{hhhpyx<=55538765241/4/28;;871/7:<5-207CIKzrQPacYhnus[ugR=CIQV]LXuv\NSsSopQWXX`ULY}YatWxgpbPSqrgWqGbuKk=_UdM@Sq}FUl_shvWqpH\[lMCZi_LPTOfa^|[7Dxj~|mqDV1MI9:0_53>JQiE2Z^daY_@>nA`T^yc7;^\nI7Aw9mLa4A?9V[PcfDQ;aJ]NgW^DMlQMVAHD#H1XI;6 *2JO3CTXDA>8B]KPJ'@B2L:/(*&&()+N[E$.2916.)%*]LLX_W++)!&;934! -/+>'&(E3>7?G+/B\L8;4'VOJHACXNOb`OFGEEEC==4C8ObH)8;=:5==:9C>67747669666423]\000/24511255445346;:/3436743477242`bK102.5:6859<;75875]47;302343694;341\[ZY]_cb1bZX`__1a142cc58=A?<0/]Z]WY6>4/5;840\XVOJX;:67466479:j[N\/34[\_^bRb1235646449:;;:877::9:7gb`___I7YV/3632785i95ke_ehegdeebd^ZYca^[[[U]\ReT4(4:@:74@FCGIZd57776idk4efebdbad^]964gceig44h5798omn:99:8prlf__YUURRQSQTSTZYYXXYXTUNNN^NSYWOLOQZ:ZMKFIDMOT[SO173H=I<:/ZQKMC>4^bUMSW]W[Z0568?:15-77HG:CGB<=EJOQQTT]\.1ZTNC=;/5@D?=ZJ17B56TZTQ`Q^YaJ=3@F/,F14269\QPHS_TG5.5=UX14WUT_J-`5VRKYRSK_QRTU`3Y<81;2b3[3E.MJB><4WSG9\P^dTHHiG4]USSUSNHJJFNOV.a20VDRejejzAEgQPPPQQNHDCDIHALQLDH_g\\_^`fkdhlj_beefekbacgfei]YZGAT[f4chhjj_`caZUVe7[wDOD5<022.BAPC:C87/3L?!'F&NNTJT[NmaHRa8La^S??ahgxشH_FJJgմʹxɷϺݻĬϵĩ܃Ͽ򀂇ӷƒuxȫ໕urqno~|olk}lPyA>e<]KLBSEVtfZbv{yzzx}FA>=16*Rg~IR}ujxwyeYapp`^v{^OQdepuhppp@9-.*-//)'&20-).0-))(()'*#!(8>>2/0CDJE;>8ADFANF=:937::ELLKJHEB>AFPAgeQP'3   "8/LcQEAQOGa@)>+Uc>=8AC97A?8)>I6(2*$%* *(,@B@50*G?GNDB=5,@8.=LL+#4GCDJf>916Gf[2@/L?.[7S6C0.2N3>LQ`=AAH?.0:+H3).(&/,&-3&%")05332.--.++.(.2&G054$.;.'5"'!N17642439DHKDA:8722 $*!&":DG@?C?@@858>M>::)-4%,42-0350318)-%IG.FNT[-?6`QBLsHDA>;=?D=:w|CDHHECBFA579<>89?@=<=8C+EE15DL\MM7NR@ob7WKDMH34000---/.)*+-#%&L-9-0,40&60?=1D14%;)8)/*.6/G"$ "$"!!!  #.#"#18 +6   "-%(#2&##&"!!#'80J@/BIKQIR9P)G|% <49 (22(#$7-5D ++A!@>Pbgbiw~~>>D(&&'')($"!"#"#$# "/3,,.-.47279801213241103214,+, '*002223-...*'(/321/./݁~|{||} ~}|}}|||~|}~~~}|~}|~~|}~~~}~~~~||~~}~~~~~|{|{|{|{ z{{{|||~~~~}~~~|}|{ +|}}}||}|||{|{z|{{zyxyz|{|{ zz{{zz{{|{z{|}~~~}}|{}|{ |||{|}|{{zz{z{z{z||~z{||{{zyzyzyzyzyz{}|}|{z{z{|}|}~} |{|}~|{zzz{|{|{zyyzz{|{|{z{z|{||{{|{|{|{z{z{| {{||{|{{|{|}}{{|{|||{|{|}|||}~}}|}~~}}~}}~}~~~~~~~~~~~~~~~~}~} ~}~}}}~~~~ ~~~~~}~~~~}{{zz{{z|}}~}{{z{z{zz{zz{z{{|{|||{{|{z{|{z{|{{{|||{|}||}}|}}||}}|z{ +|||}~}|}}|{{|{z|{|} ~~~}}~~|}}}||}|}~~~~~}~}~~~~}~}~}~}~}~}}}~}~~~~~}~~~~~~}|}|}~}|}|}~~}}}~~~} |}|}}~~~}~~}~}~~}}~}~} +~}}||}}}||}|}|}}}~~}|}~}}~}}~}~ }}~}}}|}|}}|}|}|}|}|}|}||}|||}}}|}|}|}}|}|}}|||}}}|}|}|}|}|}|}|}}|}|}|}|}|}}|}|}|}}}~ ~~}~~~}|} Ԯ˹ڲʈ䃇Ӥϒ׷ƺş;Ĕ׾±ʻ뺩Ʉ´ˬǨ֧¥Ƈ܀Ѕրư狝Պ݁ݟჇҒ֯͟ڒרἳ֩ø֨ձ럓бޮᄒܗяˬ߲ĿŤӹξзɸ‹뛩龳ȳ޿ϔȌ޴򂠷ҕدƭգӧ찈צ҂޾̀ԺȰ򡌗룬ΘLJ˷污ˀ콬ʸєǰэ蕣ȄǪ־䆡Ϲ߀Ȇߵ킩󕓍Ϋ͐儀ľ穚ƣɴź̃ɛނ͚IJ߯wy|}yt~٧z~۴ñԩΉ∵ηџp˜{wϲǹҝ܅ӭʸƤz􁊼ΡԵ竁ʣȫ˻ᓫ샰Ҕ遵󎇕А뎙Ѷijû̬ź𢄄킆¾Ԃԩܨ֚՝گ†²ի漤՝旼޴žנ݌蛜Ȟ۞ؾխը뢀ЛŻηҷ̵׿姸̒œಗϔۯށٛʀٛ奩䐛ޭՐ菏󡳛Ϳο˳޿з܎݄ʸ肣Ȯㅶ֠Ԓ릔ЪԾ孠򋛺ޡؚʡ吋ȼ彴ͼ÷򌈭ޘ܂օ著Ђ܀˞؎ߙřމ󤗒ڢ憓򑍒ޛξԑǮǬח끁劒€啐ǹ쁆Ҩٰꈟ̋ƿ¾¾ǽɳбڃɸ몀¸Ѽ퇌̲Ӽɚ錊񐃊ԠŪሆΐˮ;ˡ¶ɿ·傒♝ꕾؾꁈ@ghhikqif;Aogbceefhjdfhh77mkm;<=;:=>?;<<>@A@=:9:<:8;<<;<=>>;9b86hk6i688;8768:;<@@AA@@?BB@AA@@A=;=<;979:79<88;=A@>>=?@CB@=<=;::9=:9:8887<??>AC@==<>><=ACDAGFDA=::;9>AB>?AACBCEFHGDDAABABDEECBCEFFFHLIHIIIEFD@?AB?:;<>>?D@<=@=@@@AC@==;<<=:8588<@<<:5J:f>9.^rVMj`64$$$&?(388!!*!"8!.1'%!(kyzP%&%&$#&3$"/17E. ':N=G>K$).,(#&=?/"2/.J18=R8HKH?IPcZknscxfqLsw-?ENswiOPMM[V0JX87:90+1+=;>:SNksJAA?0,70+:2*"$ $T@-5'12:)%')$ E"19@?H:C:R394> T!+*'. 0-+% ;3/.57)M4OJRRP4)5')$'#*=6=K@=:<;''249& !,-47 gjjj~x{{ch|awi`SLS878O,6EeE3O&L=g-K6),LAU_=BI[M>)8+.37FI'4+81CO4354Znar;WMFD;5,42B4@?BOc/XQb:7=?,??::869>:90*<@IJBA;OJLHCDCKNMNMJGDABG@DSQPOLNRU^nWUWiJQb$6> !"&%'$!@_qXi\KcWbOXVZbsXhLUqjuG@/b8Z?I<^DJcLC@Q[f_[YgnSckNdSlPspf]_dIrOkWjFV_TOTTQT\gW]knLQzShNYRJJNJHMK]l>>RXGNK-:>38926??<:567;@PScnrxj}ux>;`TBW][hC:CM<4_4.>B:\>07<^Z:WI2>SG@B9SRBK`MNI:U<`\Qe?qoRZA\IYB9Xk>q;^rqa@8:DQALvIL7JFRJle_AThSIXL;EEBC[UL>>2:EZSV>cRKC@#ON>FEA2GO@3(+'+1+)WG&+)0-4.()4fIOKX(-)"((24*66%B35G!02BLRG@MOSS2,!3*IQR;==;7D'>0:>H;==F;6C7#&aT^ZHEVOKS[PQDDBFIE;:_Q1Q5J39:886<=<@:8544557<:766301V^0/0156203554536326?6257577431:6340Z\2310\575:4]9SK/65?77;:W3568<<69954a]\^`c2]`fSR`a[c`a12`b351?>6442^Z]^^b:5/5=60QBDR56285V77;7577:aQ>^122a__/`^3a05238;:::9;<788;<64d_][ZZ[T@BT_59577964447iedhdee_`achYYb[^```[V]VT`I RIc90U3>@?P:879;98:9nljjjhiddifld6cfdcejfghij598omo;::;<;999mcf``[WSONOTRPQOXXYWWYTUPNNMWPQXPDQNP\gWHCACDFWZ]ZM-9:^K>S?-WQGGC2ZTSHCIKOO]X346==;07:Z/:;ANAB>9@@;0V?MMIF>CF?:;EKOUVVY1/Z[UPG74448:;7.E:B2Q55VY\X814675RQ4==FH;)+1LIQ/[SH>:EPI_840Q326=QS5;d2d[VVQRPMQNINTW023R1CWfbjr~CE@CMOJPNLI<9;@<8[SL5DdTK\a[\^ghie^`fkjiijjqj\]^^%]_bc``[Y_cgffgikhdc`^`_c7::77;;5685jg%13346:43"8312323551243568 +222v  ""   !"!  "%$" ""! $- 1.1%) #"%*(&&&'((05&#c0M*IJI__S*r%D?;6;6  KX[O>M&(006+$#*!(+2,1427TN@CE$1SW]0" 0&(8?1$%#' )#* #,-(' )9=L#%) .1'  !#!#)#" &%& 55F/"1".,)0 ?8HA;( !:"$!%31FH["F7)V^($*)' ^A(%<$1U.,2+ + Wb     + 2EZUdyfl- + ",  %%,(   + +.$ 41*- ,0RH  +   *  +     +  +#$ +1)$2!# % +# + +  + + (($#$!  +    + >H5-9zuiqhwv^{cvdyzbmH5) -QcwC+2eZ6.,,*WK&HH"& &$+  + +9<$#(.#     $ "$  + !  "8/zwSgL:=`tސ?Bf`aTymytpSSAGW554/9]>7A12)ZEAI2.FK<1PA21EZK@E@B52ELMB&2'1"6?AA=4BE:9O3.?+JB<564A&%-+&(,)"=FG;:?IM::Oln=YJ:aEHqj}ƀz¼cOANat|֥ͮ~}əفغҙ͕۽ޭԱݢݼŐĨٳⴙ݊mqy\UyaMD4K?HH5SJLW8˾θrw|~y{v|:4 Tgr7u|z^qiqxglamnuq]Q_YZ}gaXhpA2#/J1*1-'320,,340-*'&%&(!18=7//3JDF@:>>FGFCA@:611;6@PNKIFE>;A=A352!'%"#'*))3=38=D8=:*+!!)'90!5305308094D:T:2O)D.B-98KKA6Q*9QJ_;FF9ItOFATFA969WMJAF?AP==L>TC9BY6@C?BFB9N5'C==I/3O29a7rOEA45:@D@9:?@}IIEFIF@===53376:=?=:98WDIIJ/)U7L5<'0V^3T)H87:,24@(,,5-0/**)'3;%*D'+F9,83)(%8M+.3&>9.>"$5&';23&%"!#!$#" #"# $%! ++ !% "!(*.!"(#"&,#5FW677+4102MH@3,&4FBI8[A7-(@K;5/0*?=4'"% L3"&(Z=;@H  *"/%270,7;DA$.36)+*0,7-&)-"%,& (-*.-#!-'$(-&(  "!(#('-)+)&"&0.-.10-/1&&0.).-.-.+),,,-(%#%0&+,*,,*- 0//-;)(,2111/10---.0)'+(),,-+).+*1*,#0&$4312332011140/1013521124679711./-+)())+)((',++)***+'%(',((+' '%&,0*$! ! !)**)#*!#$" ,,+%"$%&'/+,%(#" "$&%%&&'%! $')-*$% $$&#!!$,&# !%",%'("$'/%,**#&+"*+''+&"(%,)%/+)7(>&NEDDCFEDGEBDB@ !!>-AUd`ip{BC=@F9'%%'&&!-%",0,,-5563/15896668<5--,---.0.,,+/2114233200..0/011ځ||{|}}~~}|}}}~}|~| +}~~}|~~~~~~|~~~~~}~~~}|{|{|{|~~~~~}}~~~~~~|}|||}}}|}}~~}||}}||{{z{ ||{}}|||{{z{zzz{|{{zxz|{|{|{z{zz{{z {{|{|||{{{|||}~~|}}~~{||{|{|{|zz{{|{z{z{{}{z{z{||{{zyzyzyz{}|}|{z{}~}~}|}}z{|{|{ zyzzz{{{|{{z{|{ +zzz|{{{|{z{|||{{z{z{zzz{{{z{||{|{z{|{|||{|||{{{|{|{ }|{{|||{{~}|{|}|}~~~}}~~~~~ +~~~~~~~}~~~~~~}~~~~~~}~}}{{zzz{z{{zzz{|{z{{{zz{z{z{{{|{z{z{|{|{|{{z{zz{z{{{|{|}}~}{||{{||{|}}z{||}~}|{||{{|{|{|{|}|}~~}}}~~|}|~}||}|}|||}~~~~~~}~~~~}}~}~}~}}}~}}~~}~}~}~}~}~}}~}~~~~~~~~~}~}~~~~~~~}}||}|}||}}|}~}}}||}~}~}~}~~}~}~~~~~}~}}}||}|}~}~}}~}~~}}}|}}}|{|}}}|}|}~~}|}|~}|}~}~ }~~}~~}}}|}|}|}||}}||}|}|}}||}~}|||}|}|}}|||}|}|{|}|}}|}|}|} +|||}}}|}|}|}}}|}|}}~ ~~~~~~~~~}~~~}|} 󇍍򩒘֤ˇ弱Ⱦ폠ݔϬԓޞ̭ӯٶ̖ɟφ˰ܸІȄ񵜋ဣ·ݒşګ܀ⱝƚ́‰ܜɑҁɖݼٓיަ̻ꗉͲ㬀¨ܨę݆նžꎭߔ鷫搪ٕȏߟȆ֍ȳŶ佴œغ١ǟ܉񳳍ΝÍˀѽ۠⸈幥ï߄ه􀥚̿೽򮚆韄ﮁ꜒¶롡ҶݺىϐÈĊʚ݃ӷɆ뺲Ͱʡޞ鮧ԗ͊ӛ݈ܛ̆҄ϟ􅑂ۃѫ셋놉ˤњơɷ̦׷ɋͲڀǷےÜ˟ϐϫĊuzsqyʒ|wŃnoѻßռyη|څvzk\WWkcjÐǴ~⾳θýơm|z郡ݮÝْ哀Ęܢ͐߮Џ䄃񠧙ٷɫĪ鋦Ӽ»Ȼ͓ŋˀŻԴԔҊ퀅☇劥بЮʺڜݡ쌁Ѹςο¤؅涞죂ºǪ굓Îdz΃ǮѺƱͿ٣֑ȀǦ߹ȫ󋉗ş쟕悎ϐǹ皂н܀ƕۼ烳ؿ̉˸А䲚֭ޅĴ΀̭،ɟ얁ѢƀɵÌڵ轋ՊРêȎؿāݡ况ģ͙荙ěô܀ֲƠ̤݈趗ٯ셔ʸܕҒàμ놄ҝ˱ʮɵÓ倁􀆄񍟩Ѽ솊ղǢئ½ĿºǻиƳ󠓅ί¼ρϵʡ낊ܕ뜬άƅ›ށԀڹ幂޿ڸ蟷̸Ȳͺ󄍊͍ƾÐA5786m7llkmmkjkhhkkjkj6kik78o:;9<=<>?=>>>?>>=>>@@<<<;;<;<<:;<=:7;98Fof79=>;66889hk56:;<=>@AA@>?@<;<<99988=;8:88997;<><=?@>?A?>?><<;:9=DDA>=?>=:99:::9<>><>EIFE>=?BC@?>@?>?=;>BAACBBB@><<>?@>>ADIJC?><:>>ADC?CECBCGJLKGBCCBCAA?A>@DEDC@@CBCDIIHFGDBDB@>;:=;<=;<@DB>;;<>@;:@:6778;<;98:i8FL'8VaaUPYUc;\Q<98?=<147>MMZz]<pW\b]jm"jl,#&#(*''-0&,(50%*&%+.871)08.=2-E:3%.@LITduP9)-;2@^jZ[GJiCT}b|mqHJK@Ifc[dr]5i0l5mJ[XM:I`PVrtv|ff]6PIngyPU)c))2C2*154.D >+-""'&+17x΄L4'(#3 "$E65IB)#&*/-4)2OA:7()D7*4>B11308=DY.<:@J>BZ@]XA8aDmuBMsP=UC>[yjDwxPA4$2:=MEzEJilMMqPsxXwnfs[jsr[QXaUP_2NU:*+/0-(8JhP[D:'\GYP0*4-65!23:?,& Y8$1'LJ4*&*)+((+9876L@_35?A)7%/$("235/" ?<4*97#.B#57MG-=."4EDJJF:=9NFWFfgmOZ_JJ\y`lmT3@B|F`9MOUhCVM+@Je7.Y@X>BDJBj/Z?HG@>\61;?;8_9.831P`]b=4M6419F-25;@A@ShTYTJCKFC;HC:;@O7Y:-<;ppy7soQ[\%jwu{KSYoqfmixlrijslox^X[d_qa\hNi7^^[fbsvloap\\caRUhSu{whV\ntqTga[n}t{S{VWc|R\tmUQLOS]TVSX_YJMSlIMMRQQQLFV{^R{}JJQIWYUGOUUJkWEDFGxGG~MGQNyyzFIRQS~nnaim]\]R_vaox{krif]Zcgpp{yɪ̻Žtqӧӏȫͣ؁~ӎtɊĪѩ뀉}ɴ|shccxmoͽv{|د˜Ċpx~򌮘崟vˊ݄p܈yƫuxx~DK*%&(-+W]qs\rxmkg\b[]}\X}v~vkkbpZ|tlnRLbYT~tXKex@A/47R>5>8/6::5<@??@;:88;=;6+1>6BMGJELHJMONMMJFC?DFGNRSSTPNMOPTTURUrc]CYGhwL~O`hOaV\{tiYVtneY~UiY^d``qJXMSk}x>EPLj\V_QKNROMVLGX4Bsf^s_I:C0OQ6V/..-,-.+,++:978;Aebl6ZzL)%ARO=97?68<7:--*+)+*+*++,/]MHTOU,.142.WYUcDC>L[caSOT@YtWA@TDHNOD^SF^mHMPIHpkric_|_qprq{qgv}`ZSenavkxauucj_WujUVUgknzm~^ooous[e{W^X_r\U~ACEDKDBDEEIFAGJPMPLJMMNSXVPMNKIJHJHMNPOMLQjaxkmdWPnZPe__[a`rNcSdNGDIT[d\XfOi`]Xoc[vg{a[dfbagpzvj~;<85412888748<<<:894:<<6599;>56938==9:=?:79?;:<94768KlddnHOVgPcgS}QP[M=MTX[PY[n{fhSYoGFRhW\RlRrth_pbZWKdZ>Mk}n\NACCiUlJTtd\X[eEs`jGT@k9"HMgrfLe[]sTEBeboD/,crGSrc3W?KddsZECGGGFbFBA4?XN.S@BF2a32yZVQVWU2DH5d\V]q8^YOj{kYYHVs$?RxxT^7eN\whS?QBMY4_Z=?:eQM4SQVPb_JSWbB?, -iLDF4F]NND=MRYII=B(;83:'+,'&/)*YE0*)*7*3,IQ`ZPMIM((+4# &%!."!'9B+4-.HPT4MIGN'## 'VABF,L?H:G+-:-H61=UE8D@%,B`[JALQHQ\UFCFO;<30B-L+5]4336:7V4::2T^33977/4hf][PIgc2]1_`U15283<9<<;cC?=HQQONUWbgc6<9:==>:nn7ml6665456jeghcehe67lkn9moo8:<:989888kdeb^[XXQOQSRRSPRRVXUQSURVNJIMRRTGKRM\_RJF?CMMUZ`MTT<73[KH\VTQND6VJKH@;:MVbd`13;<@==8I/4>:BG?@<9;<9210HXOMA@C?;7ELNWXXX3_SPNK:0Q.1+15*PF68B=.C/794[40/<5T1WUYcEFP.7F[I\W]JWHGE7Y8=>1979N0LI8?/L=QZ0]]W[R_XQ36/9<8:987:6c5b>LDB=<;60[K3[L_^MY\KE1]VUSTOFFHHMVY/02JHMXi\fn{CHE=@]GWP;E=RM:;I=F97B2TSaN:64M3;:FULXQOD?W9G5V:V790/3&<=2+>  ":!!8& %#@655 #+*,B896>5'Y#2"'3I?=:INMLKFA998@AC>:MC:'8"2N   +00KboDye?=S295GG>@90*/11;=,5#$h14$?3 $!#60$#@IQ1J1;B0;1GK2HF?:5OHFS6UJN+=5;?<>>IF$B,&G,0?8E (+F:VL55)&&')*0'%/,%-*!((3"! !&==G!3I.'41$%!( #% $@92815 !7;:<&&!$$%$ #3?2,$/%! $#'"$ =323+++M<7=?CAD?;>BGKMJCAB>:98;8=>?>;9;F:TR1/2UCB^;ON3/B40>21G*K+*9%/+36/,,%&()/+L&<:''+*95_2/*9&&B5'%$%6%.33-7 !   "" # (),'  "$&,.+)&/*%-:8Y=+"@B58LG=HhxY`F32<@>SO;Oo78%8B"!#& .6Y*05"*$6-3/9+L,+ :6"6,($*=YH4.+1  "/*437-!M&<="DBBNd2RRIcq_NNFPm5KuvMO.UFWqW<.=4FV0RJ/76bG/'><>:3,8CQD=*/ 0/*,#oH+)#5NNGB@9$  # %-+5>%;89;>*,.:4:-3(.$4'&!!//#'*$(-) !!%#. ))-.*,))#/.+,.000/-2,,%+-+,,-*, ++***,% &%*44,.%"0.+++% ! 331-+)*'%%)',)..0001/+*,,"&,'))().-**,&/"1""'('&().10(4665203203514488776100/-,,))**)))()(*,*')+(+&&%&(')"$(%,.(%#%$(*-!&#)"(%##")%&$"&+240#!'##!"''%%)$#"!! +'+,28%#" ) *(, *! )%#""( ,.,*')#+)#,. ("/(54)37..%FBCD?63559:@B! !_>?B?>::;<===<<;;;=<<:9;;gCXij796iYZah:>@>:7766lmnk78989:=AA?>?==>>=;8699888:;<<9:;<=@B>>???AB@=<:9;=@>:;<;<>>9:<96<=>>=<<@=<<=?A>>??BEEA>:<>>;=CDBA?AEJJCDDCAAB?DDDBBA@???BAEIEBHCADHD@A??C>;BGDA??@FA=;:EJEB@>A<;<:8779;7::>48G:13Emf;f4='U244632-uYWdrX{rPkb_4jLku]}AG^XZ_@IA5:N;>CFh9FIGJL8`UoeSca\\XW;Z)@MHBD@:=848:1=|mOS~^|~QXX_:NG\x}~\@''%&5'(&*&+1-15=8;504684!).:>:07)/&)))Rb[)T1*>NtX=?2,:qEmn]vh_SB:99ykdkiSpczu]LF/~:`iYqap>OLXguk5v_njEFSG&/(.721-.BUZ 8):7`}rb-!!.&+1%&,?=A"G>*71-%KB8"EL$3.C9ApKS%rt_wsuB(%R m_=.)2k}qztpNJ:ZfGamfcqZh]w[dKXBJL3/$.B[G:dWJ^F;)81=%:(.8/H?BHH2--@)).*157)'&&(+3/6+.9B823+/(9- +!1/"77.!D82:A<07-F8#19'5/('%+EBI'($:??>!60B43* "2+)40%* tZh"ZmcOt_@fA=>7;gWTWXd{`5>:7MqsXV:8EEIHyDG63HNK&Bf2CN9lYP`[?CI4Tha=C7NXD3.04V-96114@?=D,D@?C^C7YRQMQZI>:1018L4K0"*6>8koDzADR'fRX`Etwn`]entt^YZywK|On3ugT~omaOWkwizmOyXxPLKTWWute`gy]QSW`_xWrpYhRJSWNR]iHFSSOLPHNUIRVOSNBPWHJZWISKFotFv]r`zKGHIVbcSEOSR^bXPSUTU[OVUSQK{KLtICbr}QwoaySt`jFnb\Vt`|zsgHVQ[Vl]ww۳ΰԾܺҥn됄ā|yߴ٨㧶ѳ~Ҏ˩ҿcb`qn̖bvΎ}ݰü~Ϩ‡yqߏ؆厩t~ƶxorv}C>I)&*-1?WZubcvZpNUlWVgz]Vzlsowyjgym}rkjzPHaV_|m\Qbm}ND=5=.*=9;:-3<=;?B?==9;6:<<:/(=B<=C76HJGLJJHLMNJKJHFDBHLOOPTUTQOMN(SQPMNKwXWFeS'69 %&#"!Kg2Ue[sQ[ebPPTX_ZdJXYGGEN@BP0/,O7FCTgbE-:AW681>M^o=]CDLVLQSYQ}XygrmJaTVJRvxjaKfQbr|us{p~jBQ^iN|gRKJHOJJBKHPUUh`>AbP`Y5WTB/5664QQ.1131-BQUN9FDAElTCF>9?K21*0:GFBhbG/0/00.-,,/-VOQUW-.//_NIWPHVGB>JkcwRpt==?n[Y8QSZVwtdF]cm}uGHsXh\Z[nR^rcfp`e_sar~hZ|Z}ggpOsZky[q\i`_Nd~ngl~gglPq^Z}{gzUKHLE<=>@GGGDEHHBILMRUKE|NPQORMLNQSQMEDHKKHJK~dvı}]f]gUj~mhhm^q_XMY|FBKX@vh|ewjgYlr\b{anicWY[JgUG5h-ZNN/]AlllUZaa^V\RD$=R`k`:@VBdYNbF1>ZEQE/`;FECd2IYMA]pLVM.O==ZU`gZXRCI5+FBdX?878KBTXVG#*+=Z9+..*$.*'-)/&/3.-0/FaZ`UUO$$+'$!"&!$++%)*;33;5+;;9;:9:9:6`V]d\\f33]cgc\T_cd67532a1314A<3a12b]VWc9984bJ?N78741NR^7:99__h`US`S\\Q1.3040456<=<;?KD9:<;_Xee_ZWRMMNPRUHRW35:75hb_c34ed`\FS\\=M144VT\`111aYS\[HcEJCBIOTWXU^ZZ\]dgci@C=;sr:787699966khhgehfg6nnmjon88789886i7446ic`ZZYWTUPOUZWRSSSTSQSQNSJDLSQL[LHMIYWQEDJMPNNU]M\:<03[MHJHABH=_K8F@ZY7[aca\[4;BI?:7=V9>=@B<5955@;Y25<[TOF?@?8;?FU[ZYU1WNIHC7,3207@:7:CF<@A-=A24Z2=?S8TVVB\a1:?.@;>IC240[PF9>>5CC?BOF26?=HA7ELHPLOYZT_[eSC]56=878687::626K;YE>?;:4aT<8WQcUa4PC7\VRNwYZ`]h;C[.1/DLL\N_ehrzAEGD?rKUQ7PVPVZYVZUWRRXWU__eaZdednpkcaghihkd[TCVT\ab`[c[\_dc366564dfffehfijihfd`ddef5535767@67 !7!,213,,006563& +  !$$   " !#"" #!#!#"6/,+%!-[_;<=LWW7RIN :c?5.O`0A=*8 ),),0+%,<,3<=[/=><>6"=TOU6T@93`?;63%$ #9;75/+-'""'(& +&(."*&$'#0<1(#!"#!$-..'#))*#&35/$+!$ =MM"J%,FjM21# +!.'!"!6 )3%4D9&-?USFHV*; $+G5IOE.>D- " # +  2+ +-N^KKtQ   +  +  +   +   ) ,#/!!B 2SF> + !   +BMJ! +  +  ' '   !!,&     + % #.2!!!"!"(##      +#*"%  +   +   +   F/7>}n^IWoh^KyH,#/[tH3j]50Y.7[2) );$<2:97-24#9J6,)$ +" +    + +  #!*4<|pQz,&/QuN"8F~yoZvWejk\>fe9\4L=/I@*5C8H.CBJVa:-IP1DAI3=4EF*W>/DD,'';>.25H501>+('+/E./-,8*8'"$$$*K.3!"%#5$!$*").(*'&*$="+*"*%"44#8;*839"""; *53'%))02*&)+)(+%-,*:!">;3# A-3<@)=E6*M!,/=3;&8300`ZQXVB8FFJHG?T(4182CFHkkjԻ̷гؤŗl{ւ|ݒƟؒϭ滯﫺ϴ|ӍϦ̻ބ넁䡎ɻڛӜh|xqoсdRwQF7EK(N@]M;QѴtrvA532LUo[papR\y\a}i]y|yoryxs|IAXP\zjYOftP=2*.""2/10$+02-030/,(*&)%#!29520'/FEBHGFCDDC>><84219@EHILJFB=569:951,O;3*>O^0  4@&>J?WH8BFB338>CFL317F;FGFEF6QqUY>=C+G8hEPcGnrpS;A:;/?OD;IM?>5E10467245486768;<7?ABCB<8pGHFEF@?>?B@<6679956/C3P0YQFH@iVR>G=C7GM8224J-78,!&>**0/;3G!7:-=C+C?J:.&//7LF3,D+K(-+4$3@ % %'( $""!!! ")"$$  !"&'#"'"0&&*'<" !&&*6$%2H%B/H+/FHZRyizCQ7G.,VSQ3K_I_* ;$&0<-!]!-%)5/"+((#$N5$,D#4-!*5 '#@! $;M=1%2*0$  # !$K4]_eRX[YRMVL@.H\hZ23F:YSDR7"/MAMA(U2=?>P 0@62O`COA"7)1MDR\MIC58%./NH0'&*>5EPD0 3N0 !! #"4QOYML7 + + #!#B5C8B6 6"*M6#/.'$&0*"0*'$("%)*! %$%* ..,++++0*-0,-2-01/*'///*-.+()/- %$&*+-30(&0'-*%!+% !0+231-+(%&%%$( ((2/.010-,&++"%%)+-)&+-#-"# !$&(+,*.**+-20.0 992210032256769712/1-,,+*+(').,)*))*)')(&*$ &)'#-#"%"++("!$$&%#(,!((" ,%$"220231.+#)'(%%&)''$\'"($#()/1 !)$"!!$&$)#%()$+'-%)#%*&-+6.5.'#ECBBCA9I&(%+,'+-+(+(*''*)'.-0-*23179700356582-((%+,-,).)*,/--/12240233322/0/0/Ӂ |{|{|~~ ~~}~~}|{|~~~}| +}~~~}~~~ ~~}}~}}~~~}|{|{|~!~~~}}|||~~~~~~~}|||}~}~ }|||{{}|{|}|{zyyyz{{|{yx +wxxxy{||{{|}|{|{|{z{{{zz{||}}|}|}|}}}~~}||}|{|{||{{{||{{{|{{{|||}{{|}}||{|{{z{zyz{z{z{z{||{z|~}|}|{z{}|}~}~}||{z{|{z{z{|{ |{{z{{{|{{|{|{z{|{{|{z{|{{{|{z{||{|{z{ }}{||{|}}|{ ||{||}}||{||}||}~~~~~~~~~~}~~ ~~~}}~~~~~~~~~~~~~ ~~~~~~~}||}}}~~~~}~~{}|{{{z{zz{zyzyyz{z{zz{z{{|{|z{{{zzz{|{|{{{|{{{zyz{{|{|{{{|{|{z{| ~}||}}}~}}}{z{|}|{{|{|{|}~}~~}}}~}|}~~~}~~~~~}~~~~}~}~~}~}~}}}~}~~~~}}~~~}~}~~}~}}}~~}|}~}}||}|}}~}~}|}~~}}}~~~}~}}~~}~}~}|}~} ~~~}}}|||}~}~}{| {|}}|}}|{|{||} ||}~}||}}}~}|}}~~~} ~}}|}|}|}||}|}}}~}|||}}|}|}|||}|}|}|}|}|}|}|}|}|}|{|}}}~~~}~~~}~~~}|} ΰΏ¼ϲ󯳦ɲيڕ̏ªӨʷمƔܠ΂ᦃ딡ꭿ˲ٷԤƳʀؔ陶ح󶓌ǻ͏ۢÁۓؼ퀖뎽ꣿ˾ȿʝ큜ţƫ푓յ鍂˧ӊӶ¾ЗȐـюǭִ譛틏¥ͷ٦âᅄ ě۟޺ܻ߆Ϝݚ׊˫ָͿþӊáȘ뵒ѥ惏ހ⭫͛􋑏Ž鏭㭹Ҿߏʅ¿߿ЂؽԟүݣŒٰʦҼǀӀ٣ųvz}v}{v໹tš|ipپ΀ʷ~յŷ攎ĶòՍσѽPJLZTM腀ױ¹{u~r󸢚̽Ǡ͹ͱ«펩ӥȎǾǾĹƧμ¿񒟨ʿлѽ󉓐ƋéμҀȺĀޑʁ䷠ȾÆگƴ؅㹬噝ۃ힊ղѷۦʱכ۞߄έǧʂåҟ򥀈񼰿鮛啅򺠩е󀌕̞옡’޼ˣ肆탉ȻǾ˾ĺʶ΀觤ֲŲ┪‰̫ȀǗٌ̌Ź䓑܀гƿݪǃ٥ɺޞ욦̖σݩЀʀᳲ̣ĚݹӌѤޮοƗخ՝Ѷ͹ݱذǺ˽荗ػБ۾΃NJ¼Њ֒ͼᆐ򄑉򄋌啐݀󇈒Ϳ뉏Ȁ³˿ʻкŴкÚĪ∞ڷΦ뀁۽£«ߘպ븧щڬÓƹß޻üâɿ、Sgfj5688ookiffhjji688678987ll688999=:9;:98:99;;:88;><<<>=:9:9eL?Z`]d5VPCGBL<9==?=@?@@B?=>=>;;;<<<=>=<=?;99:;><::<@CGFECA@>@??ACBAAA@>>?>=9:;>BDDEDEB@@ABEEFHILKGFB?@AACEBABAABCEA?A?@EFFCCA@@AA?BHHGEAABEFEEB@BCGFCAABA@BA?@?C@=@FCCBGE@?<:8869879H<57771$5@%'@2:-&*)'(&>D*:J6*;/M:A=TlafeiYhR\VhhBDNI++=:?lfw/7+#@KrS(4>MZ`eHWtHFF*+'=8?8"@.5760($$) -$-K=.ml2g^%WZrzpvj[C:X740VI_WE]eM1-C"CjxW105-A[svR4S;IQ7f|X+n[P_iX]69C>5,6+;9,2qO21<+1;J:H903>>:@F2HH)5:?8BNXOMA4AVqQFY=&6AB@?9;9@;94*.?A;A;89LKKNMHGLLKJKJFJJENNRSUUWWVS++*+,+*)(<_.81:I=3bZFM[>\JnntDDZQEI?G:X[Z\:6FK9:A5700/0--+TS+./.0-MKNHEFbUEOL_zw^bhfBgt=BAQHeWd@rtKp]Ydqx{NdseV_zypuxppo]ZorWZu{WO{iXeg`azSq`OPtkWVfRBW[Zialk|chcin_lHWGCCCDDIIIHKKFCFJKNIC@vyCEHIHIMNJIONLKHILMHIizhttskbbXU[Wyq\|klyg\VUWMKq[j^rfTJO`m\_wUZ^[SZbzRE<9:@D>?A9/721:=B?944,25;5789287;>F??;4fMCRaxd~DWvX{y\TyIRNSNVyo}kmLJQN{7phledo><,7yNLKIfoZP=aWu}[]S\KGZwOL0FE>TV>5A?B=BUr>T-.NmH;757555999425;34\[02]110036595331_45:67966632221146841145432R366935=558:::9<=4<<;98764[\c3]]386^36`]a4c<;643<92464=<74302^Z`4776Q<8:<:4_UIV49:;:5aaZWU^`ZYVU]\0[649;==<<=:7g9@;;<;TGWe_[XZXMNX[NZQHY5787h^Z`bg3fgaTQ3cXZa_24\Y[aba^b[X^LJ8MPEB@EI@>8>;<:?=1208=5R[8\BVW5Z100?9/Y2FB6Z60M83HCAD>PC5E>7YC>aR^\WR_YYYX6HL3::8424578885d`]D>.>;@<82[O:gR_SMFBXW2[VMRDCBEB`5X/39@ZN[fnmtx|@BDBQWQRUQRTRSUUVTQLPSXUZdhc]cghimd\^\fhapiR>RJTYQ[SGOLXV32e`39:66864figeeffihhfcccf1016852233443542) .-,/&$#!!61  +K "! !!  !!  !!! !  !$#  ! $0)0('*-'463-/ kHz:NLE?7hGWO?N.fL65--+#!!%99@96lr|IC8<,3BU024NKN:4755@0,24-'' #!  *! &%7!( *1(&.)(&(,%"!# !%,.$1*)2-+!)/'+! Jb+%1R+ -.$&&$&+3oZXYFPBXq|>66'>K>@. *<(=I' %2=&,6$ "$- +  ! + +DJ;fV]/ +   + +    +!     +.I++/ + @% +  +   !!B   ()   -/, #00'%(-#'*%  +   +  &F$+ + +  +      HB>8??nW^atjq{E&  1T/ #PF#>a[7!<$(&Og^26,/;D9@)+*&  C*  + +   +#'# *2)23,5N+-+P9StsYR6K?PCάPOoi̹oIUS@9P1=Q,?70M.1.L4V5=U_b<(=H?;D'#@/@>'?<#$@0>C&+*66784/6<)/%%$D,8")!%%$%:@:!!# 34:!'/L*)-0=:XI#$ $(+-++**)%##%%*SSIB]Osvj_ys`D?F7OKC238<>oӱǴİ|wܵȜ؂ٺǃٳǵڍѾծނ|˜ĹށŴ}znљfzaL49`YVYHL>:7663@AHJLHFC>4"2*1>cD/    9SDXIE2F@8A@9ED86GKF;4@CBB6:5+-1984.7+4<77H61 13:0KLT,,($!))"&&".5). !6".&A<+1:'7/DAE$&3-'-")#3@5>#!+/$%,!" 85/.30,,94&+#(-'!*((')"'%+37,,7A@;"4'0,G-jL;FOAB^UDZ;;@64A?G-.?7CSC-G_H7F/>557666;897:<769<::624bfv{<<>=<;??;9=<<;79;:4/N8>8Ya6?JDFGHH=;>3C6C(?38H;.(#-10(1$*2$BB_4UC+#K';*?06(7H(03A$$"8"'87+($! #'##$ %$"!$*#!!&!#",'!"&#!('(2!' &&##%#4(&2#5,eB{khEU;6MA=Leuj>CA$& /,$24"05;7&J8-@5)!/5%*+. !. 7 910#"%/(,),26BEK*C$J) "=C=IDNC;JTSi\pjhc]hLTF74D^a-2Po`eWPLJ0R1FD6:WC9*1>;DJ3TdKUH,2HE?922(46?//9)7E922&5.P4#!"3#%'%6AJPSP    $.(AJSWG? + "AE3-&'4;!""3 $%!'#!&''*#+1%"/,-,+"$,.0----,/-+)-"*'!)//,+'-.,*)(*)&2"!+#,20.-,,&&,+"+'!*2-+./000,($0)*.+)()-+*)-+',##$%""(+,,.//32347791"=>:22333224896+0211-/.,,-()&**)+),'))''$#(#'*'$)#&'"$$!*&(%'&'*'''!-"#+/3+)*" +&%$$  %(('% $)+*(** & !# )"5(///&)% -,-!)$4*4,*'#04%KF>/"!"%&A%C"#$6NIVckinrv=??>:F+((*(()('()*('$&)*)+.0.-143471---451<4(&')$+%#!'&,*01/-01264210./0́|{|~~~~}}|{|~}| }}}~~~~~}~~~~}~}|{{||{| {||{{{|||{z{|}|}}}~~}}~}~}}}|||~~~|}|}~}}}|}|{zyyyz{{|{zzyyyxyyz{{|}|}|{z{z{|{|} ~~}|||}~||~}|{|||{||{{||{{||}}}||{||{z{z{||{z{|||zyzyz|~}|}|{z{{zzz|}~}~}|} |||~}|{{z{z{z{{{z{z{z{z{||{||{z {{{|||{{z{|{|{ }~}}||}}{|}|{|}~ ~~~~~~~~~~~~~~~~~~~}|}~~~}| }}}~~~}~}|{z{zyzyyz{z{z{z{z{zz{z{{z{{{|{|{|{|{zyzzzyyz{|{|}}}|}{z{|}|{|||{{|{|}~~~}}~}}||}|} +~~~~~~~~~~~}~}~~}~ ~~~~~~}~}~~~}~~~~}~}~}~~}|}~}}||}~}~~}~}|}|}~}~}~~}~~~}~}|}~}~~~}}~}~}~}~ }}}~~}}|}|{{||} |||{{|{||}~}~}~}~ }}}|}~~~}|}|}|}||}~~}|}||}|}|}|}|}|}|}|}|{|{{|}} ~~~}}}~~}~~}}|} Pɦ̾ɈསԠҢς䎚˰κ迯ăؼ텿з֐ݙŃК瀺؋Ǭ߱Ѫ匫˅Ƕǥ䛖ܽ婨٪ŝ򇐓ሧ觩ѽʸ㩻ǀē̅´٢􁍆µƸл˩ͮǶ̣ήŖ״ŭȲͿ㱰򃾀󛙹ƕ¾ϞŞ吡ЅńݺꞢ̋ҞĘ͒ƭֱఫӶ€ӀܷѳвܓȾ矘ߢ͇ԗʮ΂酏璜˨肚伧ך휑𡮧慈ԭƗĻհٳЂÄЋŵϾʘ֯ˀ߱׸߱Ƹᬽ񛺑񿆼鉈rsᵜ{˂xpt~ĴĞܣ֪떹~zй¶ÇޑؿĞǵnʨ玉ՄꀘĦ䍹蒠Μ󀌽ߎ€梦ˣб۶˲ſèɿýᓧް׋ˮê隹Ô餕ܷľĀ鲰ŢߝѶʳȹīӞ–暥ƀѐԁŧѳȲڀĦʂҁƼǻ駊٘ҿՊۈ艝ҋıҹÿľĶٯӌС莒ьܾǝ݁蔟ɿѪعϼٿʫظѥøȍƳڞڴĩ£׍部ĴĖćފϙܥϚȎЭ䊱؏̳׺ㅝ򇸓뭥ůΣİۧκ󓠯֓څտܔ욮ȔɺĭЅǏ􄏏񏞡򆊏󛟕􇌏ý텒ƹǻñ̼ƾź뙟ĸ݆߫եľɾ̻ݔ煥çݰܠ僛ï~⫋ס͉㌭ۊ¾ƹԅ捅"gih75ehfj8kdbg7lifkjgjmjij8658:9898q87k7::;::98:;<;<;,:jR6U^TUAMG3:U78=;;=>@>?@>><;<9n6j6878:<=:779::9967:<<=9;CFFEFFFC?;;;?=?BA=:78889?CDEE@?>?>>>?DIFEFB>@CA@DDBA@>ADA?C@A@??BBBACCEAAFDEEELFCA@CGFB??DFDCAA@>>=;6B>>??@C6+75053-60/49920.7/-)1) ',*,30)/2A*-1%08^SBIDPMMNfb1[?MNxnzYDi~_WQTQXmhbKTCIbj^l_oJ;OUdkX[^DjkjpEnohpP;"#--!-(((FSD89+0&1!63Zlh[jvcM'),0;2$*>(+.C47(')1;G@4/15345*P*409.1(3GVbQ~qF\[2TxP?:)$?f1USM[)4,)B?SLA*3SVdN~qT:g|\_o|yOTu}XNZGD=50#,(0#!;+& *:('""'"A3>9+P$2&28+#/IGABD(()4<36@9/<90,!&($"(8<< ye#lFKD}xvrTOB\SVWQ\8OP+Q`EI2=-@;-8;=06NQcV1<=8G]c_;J121NCPOTWAb^Kha^zcemNTFl@YXhW~tjiqipycx6KgUV~xXdVlvTMTi^fURfvOZpRaehc~xn{wz{qaMnY_fcLGV[UVPPW@OJtviXopWKDRhQMX|sKWOb|FGJ|gRKIZIlS`|sQJjw`Xbi\\|_tm\]}Rd|uRhuWmSݺto{gGXj̣Ʃ~ġyФ~y|~wv볡zỻ}vwȹȡ鰷۫哀w|iaXòwznƃx̦銆Ҋzѿuhlq~IQW&)VRCyOQeWRplYJwikgVwd|fzq|ppuj`lUhdJl[NiuhVmgila>87;70U=<<;69>A==B@>86<:>;7.G9>?5:0:@OGHKLEKNMNILIJLHGOPUVYVW[-+-++--,++)3EQ64T{\|Ya"'%% #qhsXQFIQ^GHH_ZZJFK>kK\GA;EI1:3,iVF`WXK`F\E5(4WS9T3S@MRxem{^Z[nY_C^[_ONkzgmYKMEKV[SUVqeY=hxUMP`IYCCc@;BDEZ+COBCARGFk7H>E:lPmX:;<:?://?@I?0.6E=Pit>RpEcX~FBa-:nJ:N;OC6-MLBNHWG=00.200/..01/,SRPHOP^P?Ui^pkqjvyjDHUQOmwoTDCHtjVdWWc{tof[]rORVjelXsoYMbdyoKs^Ro^ye_q^XR_ZUaWWV_W`YRNlHbvi^haguTc\iXX^fSMJHJHJLMKKIFFJMLJHGA89=BCCHHIJJENPNDEEKRIORppolwS^hS]nZr^eg`og}VJNLOijfbm\n\xk\R\btgccdžqTqgn}h]_B8<>32:;843<8@638:),0010;2<05/4>@EGDEF8::777912947IkkgXmhSqeognsLDJZPJI\cTM`Xg>JDpqV\chdqhW^HL`xwwTekaYoT|LVKAfLxW^m9GiU{:Ijxf[ZfCBSI7v}_l?gSs]hp~cvqhW[[6AcYjy\F~dyDLVmjcRCGSRHJSb8<5L:UBFMc;KJR\`7NNSYSKF?XXHBXL9B"%IBGBFQK^.CO5[9(%-,1))&RO?',+'1<4-W_PCS$%%#"-"#!"'('%) &!/.3;KFJ;YLGK(2 /):K2Q%*BD9):.15<:H5.[A1?>;@FMNNMBFNUKMOA6TO9I-hQ[_49849;:=<:349357:872856530]a0021033442421037236866545214108;8713864[Y[:>>:_1;68>=9987:;=<;9884dYdc^`5678543ea355D7e1;<62456;754`_2_`32^[LV??;8;4_^]`577983bXW^a`_]TNZ\]N]_:?BA>=<72[_734<>oUU]a[VY^][ZYXUYROc975f_T\cedbba`Y[`^T^\[^^YX]^^___b\]RVPKQ4;OWVY[cdjmuxyxqok<;:88:85ghlhhijkih998;??@=:886g`:5efc^^fcXUVNSOTOPUTWST[YTRGYLJMUOTOKPJFHILJKKMWYIT9<520\3WZWNNI>KeZ`9?=9V>5CR931`WK932Q0@[1.>?;>>90:80UWLLNPKJ=:8=4ULZ^Y;;=]URO?R0;D;88335575444YUTG?C3B@;4b[F;VfOV\A_VU7RXBPMACb+Z_0281qJ^otuxz{{~}DIpTSVTQRVVYYUURNMG?NXZXaeke^fdd\XZV`th4guhgDK]M?(   #    +  +  +  + +  6 .+  /    +%3# $# +  "(  + ('&"-%0%$/.*+&  +  +" =  +  + + +  PFDe"0*DSatrnog&0RCd7/%'#$"^<'1# ")    + +    +**&($ #9/==FK>XQDf`gpsm7$c-`.15Lkkskl\\|[cghdUS73E%\bF.%Q7H@\]7@-A?0K-,93V?)/?)2152B7.3?7:B;563/33* .!$),"93!" (%!:LGO@4;;H81%+5+)2B8A&*%.A:!"$=@?P_5/,+A?"/")>?9)C#29-),1/0GNE0D=FFG8C4,(4"4-C2(",3,7,ZxrshcdrxZO.19bjsȪ{˝zy}~˵څ吇Ϸ݄ծ鵺ۮԀ࣊hZEtztiԑҰϦװ{崑{ֽtŨ~L4aOZG?:nJL_NMw[QxrapwtxwtfxWjbCdSNmtbQhdgoj;/*,'!F5420+/54//563.*-*&!1.35,.$3>KABEE>CCCB>=86656ADHJJB@=()4J;S:>  SJE;748:@011BAA759,B19(&%*+80#*(-(=+4#41)3)K/3MD?7;G541ZF8<)O99C2/?F;C3)+&(-0*+)7@40/?+(&2#0%#K;'$&(&-!-!+9&,! !+$*"/:7A<9oj`porLb;k8a9;5>952G-A;968;9:;998987864687543-+/3767;9:=;5:==554:=25-3P=d`hCF@\K8FJ69@2V?4*340KA195+''#$=08B74(:5.%(:='65,4KS,7<$E1'4-$<+,,$!"!# !"%(*()("$"#!&!*10 15/" "38Q4%&3@?%@:NE^T{KYHEgFiLOb5Cm[r17EF";<()+;K'.27-/#1:$9O;!&=1&!:H&!&$!."%"%(""6>/RLO0/I'-.J.#=DD83AFAbOfj^UYSEAE,><`J@>SXP5)2//>67H79JU4"?KS64=Y4AEELQ0ABISM?53KH51H<&1)6+988FCM#0:.N/#$'A@(#.&!FPJ;!'"C$!2133433534 0,/02/.21+++&)&+'(+*+(),+)'!,&%%(%)'$'#"""%#$$#)+ $(&('"#!$3.0('" !)*+!$%!%"(()$$ $ "1,"%)'' "#!".%,./''$!((*"*' +8*/2 405'?E)(&!g$6 IH##-,iFZjopnquvyyC8=*(+*))*++,*+)(&$',,+..31.323-)*)1>33935#4.0453,&/43112ˁ}|{ ~~}|~~}|||{|} ~}~~}|~~~}}||{|{|~}}}| {{{|{{{||}~|} +~}}||}}~~}}}|}|}}}~}~}|{|}}}||{ zzyyz{{|{{||{zyxxyyyz{{|}|{z{|}{{| +}}~~|}~~}|}}~}}|{{|||{{|{|{|}|{}|{z{z{{{zz{{{z{{|}}|{{{z{||{zyzyz|~}||{}|{z{{zz{}~}|||}~}||}{{z{z{z{zz{z{z{{z{|{{{||{{z{{|{{|{|{{z{|{|{|{ |}~}~|~~{|{|}~~~~~~~~~~~~}~~}~}|}~} +~~~~~}|||{| }}{{|~~}|{{z{z{zzz{{zyz{zyz{z{{zz{{z{z{z{|{|{{||{z {zz{zzz{{zz||{|~}|}}}|{z{ |||}}}||{|{|{|{|}|}|}~ +~~}|{|}}}~~~}~~~~}~}~~}~~~~~}~~~~~~}~}~}~}~~~}~~}|}~}~}~}~~}~}|}~~~}~}}}~}~}~~}~}}~~}~}~} ~~}}}~}}~}}~}~}~~}~}}|{{|||}}}|{||}~}~}|}||}~}~~~}~}|}~~}}|}~}}}~~~} |}|~}|}}~}|}|{|||}||}|}|}||}|}|}|}|}|}|}||}|{{|||{|}~~}~~~}}~}}~~}}|}} R¸ㆋ}ź󂅉۳dzՀ̛ώꗃ哆ɼ̄͡唋ᵐóӪ٭ܫɹ㩨ڐՈյӁۚܶ݇էقǡͻͱᝒ𶂄Շߌ 䥍謚ƥӬ𡥋ԥࢭꃈ፞ӌą׀Κڞˣ薇͙˙̭ōȥҀୋ¹ڶ׏ِǍ剐،úرăԃϻۭռަïּũǭƐҋ򛟦ɱ뉴ِͩ区Ū¦˻ȴܫȅ✄ׁϵҦηȚߚǮĿƽ榶ڒ˗vy~ˮpfz깒v€€ŽȧԱҷΰ||vhɞ䃗痋ɺҲ̿ȷ‡ٔײ؉١錝ţֲ鄵зƮ׵ſنȹ¼޸ء̴߅ӝ˔ҶƱ֊潍㝒悺٪뺗ܳܳ٫ܼ԰ͪɷʦ򉬳ͣӿЎЭܳ↉ÁӶݪৣ뿽艉풫̗Ϡ۷¾ǾȀűøƪðӀΛ؊ȼސΠŒɈǵƱˈ졠ʚƎإ۱券ܒɔ¢祼񒌩ٖⷽ̈́ԇłҳ¸ʿʴ̳ښ̻ضɸյíـӫDžႃ䓕̌ȱô݄ꙕ´ư󮷙􌋉񀄃ꁉ팒뀄񂋛ބ􋅂Żǿ̷ǻž㘠è︵Ӏ¡Ӿ紗©󍤬Ǵ羧װ񖜆ǻ̺ùФᵄʕΥºǹƴԶӤɠ(G57657865678mkjhjnlm7jnngjhi6567865777ln897go998:;77889:;>=<;97899:;<<:::877999:9:99;:==<=:B>=;=@?=??>>???=<=A@?===:9:;<:98;@DDHIJIJILIHIKJIGFCB??>;?BFGB@?@A?BEEDCCBAA@@@??BBAABB?@@?@ACDECDDJHEEDB@?@CEFB?><=>?=@@??ABB@?>@C?;85=8A>?==;=?;9;;798c1468\UQT_48<^H'89::6/,HD?I$aQZjozQIF7[]N`WONk^5mwLy}KFW~L`LAITxGAH^FMvThyZ\dk{uhO^l_h+).+*J:55;3@Hx_^vWqT\pNuq`lEgtujZ[oUp]N:A:1/+11-.-,.C;2/+55++./.(,-/5+.)$8:D5-RytQ_""6Nq.H/6FQ8MmXMWwHi;ZeWIJczōRD3,+""+,1[-,'?>=#6)**%,3*97Ae_w~^o7;B\iUqI"8--/Wq]FK;UyV|ME]ksFJYuigzRTWxhmelncRDMk5O]qRhjITJ_OLWMN]R~T=! $ %(736A#%$6%:3C%$><<9*#$ ;=405238/,"*;+3%5;& "%' A68/ ,''<=E(#'$&'"#(371<<0@?;3&#$6 ;MSR-exi3kEofelr`@14U2B37@\QogS?.,M+SXbNgv9OT_n2)bap>?pzBSFJ,:8I`Z@(GCC-=IYV77EY9,BB-4Y-VCIKIB**:JsO[LdghY@ $"%$DPV[GZQRKHER?ned16?K*&''7;93LUQ`HUEt>]Y9=>67G=AE_f{{\X]ZXYohcUbScIXNV``YLREENFROGEGW[g]LogXhIVPNEM]|I669B;)YN2I?7KRSX=KFgCphbyiU1YMTVepGN_^WFFZFZ?ELRs^D?;Q:]^]J2333221//-,0=V@luoxtR:|RMH}yrscrGGoVk`V^l|w_^VOyk`hfVKJTe[SRml\^t\MnlZWhYRNZwczbUyRQ\QnHNRNVYn[a^jk]^S]A^WSQMOLNRSSQOPQQPLJKMILLLG@ABFHKMNIJPPKLGHONWsOWapo]calQ_{kii_it_R{iVokYq\tvaYbjzYgpc^]a}qKD;:49@5479AB<>A=598>:92137<8::?FF8403936?:52386+179blmjPRfbX{lzXtjug`V]^QqHoXmY@fHQtXZY_qlSn^t`ud]_`kcLAO@JQlf>:BgBa][PtNSLXsymhu|lnYRVFAA_wcwGJXhax_iuhp}s`Ju93GqrJOHM~BVYOB|CyH@RUKR;9j8+7?DwE5D[A\A6iza[Y`\KclLKKMMeTQHQr\aq`\l^aEGSDVTXNTcVFGEK=EO[9FIAO\K?5F_/_i_UCRVABS>NIDFHJBR]KMFD:14&:4LVVBE_cD;2N.'%+2MA*&?Q0+)*%(31-[WVHR$$%&&)', #&*%('" * 0589)1XORFH &/4.'8.$)!).41$/B?B:0EhA=>D?ADJNQKDAENMEQD7Y;VAb3Obb_765;925;8536:447574853554/^Y1211233422213263158752133220^39:;9995543a`a;:679<<==<46757>=<78765gXbe]47998763d58:;6b6;-8211695321_1`]11`YVW885<>931]Y246664aVYWbaaZSWW]14;>@@A><:64]QV4658:8bYQTYQW\e\dgQUUTU_655d^XX^```^a`_a`[_X[[_ZVYa___`[\^_aXYSQNHPT^YY`kly{vlhaWNIGUQJJC?><<<6875i4kdff45558:9<@=@@:<97i45fe]MW^b[WRSURPSOOTVWY^][YUKHLKP]WPKMRNHMLKJKJO[UP9<;31\/2SaZSXNC@9de7fMNPS474884/HD9gSCO=;;<823575/08;?JPWOPH@=08KMR2WKTUVZD78G;??B@=DAIHCAA=A/;44RER5Y^[860/447X=?Y4=@?FcOJRH?H?6R3WE8bUT>6a7OVY7:.EF=;:7265443bbXQSOMNHEEA;4bUD6cWWlcI>ZAH[;TPH=W7^11bDmAFOSPSTTQPUZ_WDMNRUVW_b_afg[[\YJOI@LYJbk}AJKID=i`\^YXX456c`gb^5<9799:9893Wfebd3986605543366866524546648"2#')23" ## & "!!!!! ,(%"$)%##%$!)(!6\#5EBI0%(Q9H:/<2**6(1;+@H(&+C'B:1-8\;6'=cɶ`lS989]K1*N~?PM"5JNBJZ0.vKF"&%%=p@!"&"* +   +     &,@:32-# ".%7DTWRSrrts~whH=<.ppUiUV_t~v_jgnxptg{SOb],"/G1+/")G+W(cO$(0:20<0*563/73,/6;34%#''+./!"!#''(:77?C-60>AK8.I!&EO9(H;8GQ4T%$'$+8 ///?@E;-B)6'*0/+*8.#IG@4D?C-9.HH\y|xy~VgbdNZ|Ýԛ}yԼƩȉƹ°ʡӃԒѧyưo38+0MGWoee]YvߙмɼײݑӑԸxe^>=44C;8cMF45D[Y=87\j@p^N_qKlhw8T^41;5[aO224.13E?264<=452?*A?<;<=;>;==<<;855656643/2247<=>;9<;9;69<<'Q."/.:16H:.< ' 4&3j=+>Z5O1%,,#%4C13379UKH?GgU[nb[iVV32D9PNNCFXO?=9<KJ:@UQ3.+@#%,@-/J%'&$MJOA8 +    IDK;3 # /" "##"5#$&#!'$' (-."0-+,)+/-,4+11,/,++),('' ++)/()'--.+&((**'*1,(),(,-1.47'))()-0.*,..--,..,..,/)+*+(&).-++.*+-,.)*)&$#))/..29:CFDA:85/(($++((#32022! 2/.,$+.0-,)*+(')'&)+*+..-,)"!$%&-*'%&'%#&$$#$#%,&"(#,'%($224(+,*"2)!'"#&"$"#"$'!%%&*  (!&).,%(,!$$, 0())!%&+-)'+(&()' w3./;6'#/$(6#*'$.'I#"C==;;978:8986ikmjh9;:98898;@A>??>::978999D>9<<;>=@@?<<=>>>@A::<<>??<;=>ADGFDJHGGEFEA@CFHECCCBA@A@@?AB?@>>>??>CLKMJGGFFCDC@AA>:7=?ADBA??@ACEF@B=479B>6=A@==?B=:<::8;ib2697ldX]RZa77^'<@<8-NBDBH3nVnneFScoVPNV_no^k^gQeFLH+5@BABEF-Yd\R_eh|z<1jY1+(-1S2GC<-+-)@z_Pe~l^q^W]ixPmopn|ilZ2)7512/4371N2<=//1+ !)'-.$15/""0,1///5\exlRW=5wyH4010)2@ÀrgAUAmu|RlrcgrqQ{yiN`RZhY>QfY=BUZ<=NgMX?jB}4-DFXŚqjIN$"8701!VoV)0*B5)/4 %#+S_``eowjakH>&'-%(?")'=B;#'OVNG'-&&%&.2,7/$$3:I+@AihHU>>?SN\lM?  6:;('%"14/*77>@I=5-)5G$gbc:V_t%_Lax¥ǤolUl{M1CmHkZ`gH2,/QFW{rhh:KEz,)1,4El2SR8])43?.U5GHL0:<3E<&8Fg]<>BLAD>1` TTI6O24>/OQPLR[GRSarglVULNH`?AL=8@`ckZH^eRVUVY]Sbc9-KgxJ*fkupp~}`dttpyj~piamVGM98W7R[ltdOKZQVP{fUmTwTjgY\[Xd{XPfpnh`dgfjykb{yrmijfrwfL]^kt`]^aWq~HRsF{_MlMZ[XVS^PXIQMpu}QJNaJLBzqCEJNFyiVD[c90RqHA;z|d}|vp{OrZmY_ahVqb湟طyȀ޷ü¸{u풓vݍ{ݰغ~{zͰ֭ȯƿy{ǿ¯ւнיϲq誏f`[i]II`GyrTorazy֠uuq|jΰϡ̶ĎvziΣҴt{NPCa^~m`\R`pqm^g]bOpR~Wxu{ojdiysYgmR`cRgwwd_cQVXVgH?:?:/@;88:<;;877696/'-?F:A@a3d4;AGJ()*(+RI2.NU]dGMlsvPL;559RkjJPZruzfQPMFLU^|TEAxMROY^RRBM6BLGKF@8=GEHA8c:aLIDB5T4Z@@;:7=36dNtJeIS0001110//.//9N[GOi`DF{NTMoNKv}OFSQldkhitlpcQnjUW|P{SVYzqZQa\^^^Nrwpt[gpX\R[MVO[wYQR^g^\XTPtbZPSSRSRSUUUTSSUTSSPMNOONMMLLKNNLJELQRHNLCOM`W|zkw~cX]SuaagXzba}oWn}Zl|g[YWL|ww|kVZp\~uvs7<=:;4148?BDE?7,1:<=9638696;448368,25;:15<5>tl[k^INdp}Q~r[`G|NSngMGd[`F`^QlYyhdp|c[`jvnzaZij}WoV[daeN=nWpb]YGkZyRo_LdlZs`UhQB[B7G[mPEXOGKFAACROT8G?0Z:L-B5@LX-++"%-,Z\RT?%#!!')'!#"# (&*$>JB<>438,!VF\4KD /0=3(2-')##/%@4;?,8AFEECE?EHMNIEDIHDG>>8^DcE81W5KT25<;:6;9:34679874856731Y5530`01132430045``^`d2874514441/047=;<89:8[3_337::87:8853356899<>;54467g3aZcg78:766f49<=91591362`37813_`_1333c243a\06>;62_\_c24553`X_3b]`QQb7;=>?>>><;<4063Y^bd2673`WOVbRWd5d7e[VU\1745c\\YV[^]_b^`\_cc_WY]bZUZ_`\Z_a[ac^SW[WUNPRVWdp~zygklokIBJ@LK=;8<;:788655hf346668:7<=>A>==97554db^\\^c[VPNWWVUSRVWV]_]^VWTWKV\]VJGEDPTUNKPHGM[^<8?<^1_1UU[4`WQJE=n5@4R/Y2`W18H<\SMLH3Q@039>E32A>=9:BEN\OQSXJ646;NJO]O3aWWX=V84:CMMJJHHKG:9498>^MK\YWK17Y1?1480/[5A_ONQULPKQWP=53\YL68K9/@4BC4;5_L:dTZajSVr^hVAH]P@@-012^@=gcahmxDCAB:PVRVURUZ^^]^WQYVYb^^khmknK;CMDG`l;xFGHORYWD@j`cZY[f5g2b_bd2a148;?=>;72cecg669;:5644767714553554578423558" 47:63L!!"#  ! " m !#1+2,$'"&)*'(% ,%'$ +^QG5A@B9S<18/8)%%#/35;sEpb=U/656HRWA,%!<'-.',$-'+$!?)"13(&%&.3,-!&&!!#%#$"$#<).,  (+$!##$&*:.8-"',.2 #$ # &.K%:*/D0D)(9B!#X2$!22$.! /,"')R@A    +  #&+*05<6?lci8C.( " + +   + + +  + $CG9   B:'  " +     S\ '- ! *W    "!'.'2.8,0**    +  + +   + +   + )7*2?IVb0Et{hh~:JT%G4QpRFK-%jthV#t[ 1P!8-1%+,! ,)  !      3I^RPD;#&-*2YbkXG]fPST\lxZfP %QW\W1Xmzwr}i|sY~wa>=E$"#3=ED30*O2(-+XELIQM:)8%A8&I;2()(C(*6&&23.)$%'&)2+%//5.+*)(&/83$"',##%**21 .?&C<*8+3762-3(,&.,:=G3RP*-O0%%GIMF @:2 #%5,#).&6$% G@J6DBJ>95R'9/5389=1\gxfHFhxrڷ}~ɡ^gÆٯǵƯ׀vnو{ޱꄙЭ̛׻ǰĀȫ͇̼ⅨžڐȯmTL;91%#90F0zg>Ggn^Upuୂٮοɭ˟ؾ̲T:8GOIAHg_=Rwu~II=YVri_YScjnrkxbeTvmgtoiry]koN\`Qnun^WYJQWXiD4-1-!7U455/&60-.0444.+'##%6=277Y;L>@DC==EBAA:73114?CBD?85,, +,*F/QH;<9! AQN;fs{00EC1,)/'H#$!#%&,*+-"02<'$);B,49GGQBJ:0/,(.38U;.*O5M4/45-0".#h)&'$! %!$#6*%#+/!!"% $$, $($#!%4J&<1&:9/O>'-4A)3336/<=')/6952%9B04:=)'=/H1?*/ ",0#".89.! 83'&4.+)&,:2477;4<;0[VWPC,C78:NTc=QS8:gS8GB5/B@?=??=>@==??><978:98867559:<;59<>6:93=89/LLBF7i\_b=;R6A9Q+&"7,=/6BE)K3=)'51"17E;$'6A)$F'#8<8@;>/&*0:OB&5S:4DAC#85< # !!&()#"# $'! $*#' 27)*)35),K)#) !'$&#$"' ;!28%=/]SWe_dF8cYqkbX?OLsRSK4@;+865!!%&+#X0@.+93%70%0$*5$5%@66)! 59.'=JcUl[b,8!" ++;SKJFQvTjc|\d@K?*:W>GD8JHDER4CS:(IME<)?9"& ((0/ 1/.,-/1.+'&,++)('))*-/-/**(*#)-,*$$" &(*'$)#!$+*))%&(+'&""6!+0-'!0(%%#( &,""#&"$!#+#*%&)' "$ !   -%!+)+"'+)""#&!" #&"--#""(&,+*'&##+)#0+029,,;<;:9:;99::89788jlo8:89:8n7mkm778nlno7778;kk766787568:::;;:99865:=;:;BNMWSNHF@@<:;8::9;:9997677;;;:?EB?::;:=@B>==<;::;:99;:=@=<@><<=>CA=<:;<;::<<<;:?BDFFGEFEA?@BA?@CEFFEFHJIIJFDBBBABB@==<>>??=>@BCDGLKFBA@>=>@DDA@@@A@@BA@ACCB?@>?=@ACABCDDFFKPGBAEB@?<;:75DCB@AA@BA??BD>:A?<:<>BDC?:74;98la[16;CQzvQ:9'"<0]69X_mn[ypYKBbŏB542)-pàUd9OEwv`vVFdm^lhUu]t]nj;9@T{MC`LI9S^X~kFIq_*48X8?`jjEH9"( *50!(1F2+185CD;6$2%*0*$.YTZ8=sn!SUqfnhm~WihISx@NUPrKy@:F/CSSKmYKPyb7+K4@Iw8W=5Po^;87V%BHA),26VeCUbeXHH`BASbZy=djg[KVW:9\d`ELUgkpf_WGMMCFNeaHMRqZfZLOTLQo?iBLMTCEJnVKLC>K?841UYOCGHGDG)VUFd`SBB?>IQNRRLNIFUny``OfusiJ=cTLkK?X5NmKTkEHmFMu559O@=CsQRYBE[O@60../135EW_KRs\zHEFLKLTKRHV}DSMOTTttcxiZT}yvXg{Ut}|ghHIPXi[dV}zyfivx^~cPRZUQvwbUYmpcdUVRpj^MNRQNSSYSUTSSUWWWUSMOLNNPPNNLQSLEHHLLMTJPIgazfhW`VVa[bYS^zdegfzbY\^_kZz`^blc]hb?=>><68716A57;7334<96531+.37=95:6Zf_oByw@Gr`ndX{qQExeltezUPbtpPGVt@rehlgVdysi~[r7HhhGHJHd\TZKdfzGbdHjUxyScSLsJ:HQgv_gJKOM@rkkP^aaFF?JXDxtY{kRXQa`]DjAOR[RTf6BDa4)R7nRXPb>P_bvA{RWNhRXF[nkVPd_lPUB>CQUFMHPTr?HHFR7I:<:=>TI\R:YKSXP?JQXP@16:9PHKECMO]P@F>9DP33:B>=p;:8972274\[\dee3bVUUYXWZcce6g7gb365f_Y[Y^[\^^_[[^[32g^Z\WYZ]\YYZ[[]\_a^Z[WVUYVWV^sI}t{CDttjbTUd_42;=9768866889;>A?<:97h44ec`\[]X[YRPMURVRQRUVWX[XUTWTXQJS[OB@;D=5;=<=GHLTQJFJDG>?,?EL58JYTPJA<.725/<=188C6XCANHVQX^WE>A^aZ:O\<;?<0\`ZD?GA>;95882651aVQNKGBH6S:D>-<5[B85Vs^<0203_@>_\dnxxvvAABRSX[[\WV[]_[XW^][Z]`\`_nnh:=SX]^^^]h|FFNQPSYL=:fbRSXZ\Y]cX3c34454349===;776454478'4366546656733>!*(0-*'&"!"  !  "%!!!!  1+&0.)(&*+()(- +/ @F5-;84$@?NTq=12-JGB%+"195>G,/#1<<0-D)+0-=Z8?B>U95:8;HL:! .(%+/,0+(& *!%,$*-$*)8', *7)-.1'!*)0" +)1,('&!##?# "$)&#$*+042&J.0EJ*<$#+8&#!%./"   (C75*39(4C';:'.+%#) ( ! .#  !7  +  . + +!*%&#F`Q/18( + + +     +   +  &(%*!-!C7I0 + 'V@I%)  + +    +"(&    &I6( +;   "%(%!&" &##V= + +   + +   + )(8CHP<U-Ae]vfx|rfjQrTL(0]7{LSLcoC\"$)NVLZ2!*X:9b)9/B1%  +%%#!' +  + +    +1CYlWYOY(#.01/>Qf>_Y[>;7@WcvufDK=6FC%CW_YVBM6PUpg~elmptwth6B3-:2!E:GRK?.PEN,.-:@,@/'#()0.%%2)//*&#%&!!(&+0',+.*(+%%##-9)&!%%'""(,*+(%-*(]/F<*;*+'BT5)&#>66A*&F?O=+6:6:B5A>0118#8!-"#&.'S=:OFDJ[5/&QWA8:M+MaHGSSFymhz⩓lȽdkit׏~ͦ|ì»՗͢~ㅆۄ˜Ѧـȇϩpijn¹ƽ؆Ӻb񦥐`Y]J+3/*$,#Jdkqg\jpC9O/88_@J=?A@7CC??<42134;@C@:AQQ+H1BUBBC1N"VT425U\X[O75FGARK2D\?lMXSS`@?+[18CWQeI@pqmkr`ch]VY\zxqxPCWXC03?@>>@@@?=<9958889776;>:244767=8>0P331OTSB[fXV?31)6>F *&>DJG/>8REID)%%@F?Q<%')*6)C!>M),(+$7&N,0D81/#EY:&2O=<)!"!#$'!"!#"# !"   -+' $%#!.#',0$6!,11&A-!4( 9 "!<&'"190-J(Bc`8=BBcaZ^HNTrBWiK5CS#6@A4C)04,4'93U9( *U;J1"8#''&09)3!+((*() !%#,%*/9*3*xgOXJN+,3:158K=GK@28BSH:)),)CCG@=IIO@3:0+7># %408-/=PJ.^5K $*B-)'8H@%'O?9P+ '4""A>5-0T(7 $%"5$" "'  # +"+""(,+,-$/-/1.+/01+)-/*+,-*+*,)*)()*//./*)*-+*,/./00.L/.+,,.-..--+*-)1.+-***.-,+*++,+.,+*,()),**+1>JNR,TXRPFKKI@A#%<;4.%"+' 220-+*,*,+&%%*)*('(*+**,,+*+)*'#),&  '%&'&%'$+,+))&')(''#!*2"'+!&#"#! % (% $%$""&" )%!$#)+**,&  ' )"  #!*'($&!&#&(%!-1*$/'(#0*'&%" %&)+s1 6(027=6++ $ "!"E;=ZW`kutwqq><70*+---*),-0//.10/.14132<;9),//.--4C'(L-.025+ 1-&(+*,)+.&-~}}}|||{{{|||~~}|||{|~}|}~}| }~~}}}~~}~~}|{|{||{{{}~~~}}}|{|}}|}|}~~~~~}|{| }}}{{{z{|||{{}|{zy zyyyzyxxyyyz|}|{|}|}|}}~~}|{|||~~}}}|{ ||{{||{{{|}|{ ||{{z{{zz{ zyyzyzzz{z{zzz{{|}}}|{|}||z{{zyz|}|{|}||{z{||}~}|}~~~}zz{}}~{{zzyyz{|{|{|||{{|{|{zzz{{|{zyz{{{zzz{|{|||{{|{|{z{|{z{z {{||}~~}~~}{||}}{z{||{{{|||}~~~}~~~~~~~~~}~}|{||{|{zz{zz|{zz{|{z{zz{{{zzyzzyzzzyyzyz{z {{||{zzz{{{z{z{{|{{zzz{|}}~}|~}}|}|{zzz{{{z{{{|} |||}}}|zzz{{z{|{|{|{{|{|{|}|}|}|}~~~|||{|}~~~}~}~}~~ ~~~~~~~}~}}~} ~~~}~~~}}}~~}|}~}}~}~}~}~}||}}}~}~}|||}~~~}}~}|}~~}~}|}~}|}~}|}~~~}}~}~}~~~}~~~}~}~}~}|}|}|}}}~}|}~}|||}~}}~}}}~}}~}}~~~}}}|}}}~}|}|}~}|}|}|}|}|{|}|}|}|}|}|}|}|}|}|}~}|}}}~ ­чيˮɊو⻫جĆ܀Ĩцʱ׺௅۴ؒİõϬ烊ن܁ဧᩋ𾚄ՔԶՔ׌‰̷ܣϪ鋩ꏢݢɪ楪ݴꞴաѪʧϕ򊰽ƳㆱĹۿ앏؎Ԁì޽Ǽ霢׍ꆍ†ε블򡱣і҉偛ޖċ큀ڄƞ떪߮ỂԠòۺðϻγٹՌ¶Ǿꘜ󵋵Կ܌㤰ϤӴ£ݪݺυΗ떘󍘳ؙ˴ډǏ˻ĻϏ홒ѻ͹֠۞uҼ|~̦쭫İשҸՇ|vspn|yyrrڽ}z~wn~åԘޞ롖р¯֔Қ讬퀊Ӽi]fs|}zxz޷Φҁ։Ç׺¯킆ͯжŰƁЈĴٿȭ̢쟧ɕ󚍁܀³᥍፨הԮݲ齻ē܅㵰־͐ꃺݴƾ܁璡䍓󅔚Ƨȋ衣򪬶ȺƷ怪Ήʢ׶؏Κȿװʽº尒íބ׆硬ģܮٰۍ̳ԆԽθͿȹӼ՝Ƴʀ;ᅬ궮ѱžۖСܔ󬺊烗ʳՁꋒدݎƇżʸħ³ڇ正̎ҷҦĆռƳݒ̭ߛվ갼ě省Хۛªуњܧ↌賉쎵ɿ􂉎􈏓񃌋݀ߝǽļȼʼ̈́óȲַƪͿѶƻϮ³Ⱦ߁Р݁˫Ҝɾǹ₇Ѓ788>>=:::<;7::;:9998:89899;;9998899987ljkj776j7868:876l5665589::9879=?AGIJPXgWMPQQPJ?:;;9::;;9:;;99:98868:<>B><<<;=ADCA@@>;>A<87]9<<;<===@A@><CFGBC@AFIHFDBA?<;?CFIHECA@DDEDFDCCECC@=;=>=>>ACKEBB?<;>@ADCA>=?>=@BDBCEEAB@DB@A@BEIIIDBABlQRUi:@EHICABA>==?>@A=>=A<<=AGF@>866:=5^]036@@ia3656nZX3n/N\04+2=F|Rqw`N`?YaFg}SRTOQ~kcctN4)C8E>EY)bSh]ythvCL;+AA986AB;DCT`X,0/+BPWmS{omrQ_]]k@ZdhjypttZ/433;23+$-/+02.+G.49.11C/14:4@ankkDKWgWjUCMPGKhJwo_`ZJkQ\s^Vqqbjs͙ȟvyi}~Œҿx}tѼᣭּ˞y„ϷāɈzzuqws{ײȾzx{{qgbhy}̵Ԗ핒xT|U^R\;;gr[Zi^btS~T]{Ŏ{wyopxsѸÿ޲}Ɯvoo͡i}gZZPa]xooZavpSuiuemx{Sqj]SO{kc{jpNb`EjopeRQJX`FL:<<9/%Rd<9;@;=6::<;=:999:52)QCLC:C@:LPCGHG?PNFHGEHMOMUTXX-,+**+,./1<4(++120DNJjMesse}mi%+..:dEOY]UU]ujG8;:[`cGWMHC9PbHKOBDDFB;8==;;>:<26=06=747;@H>7;49D;;:50323;A6,),JsdXCjxOHMjoEonTir{MRsnRZMVb?LraWSk~b}zthbzw~mTraZa~I^IDFvOOT;FM\O]fmaWP31[?1e[g}BRCM?0357F64>@;=26C1\b345<=82:3072`341[^43454214454242\]_c63397873427;?=<5973346988575523253;=;96:;7856585e355;:6:5654]689;63224533:<:432]3541023343e^^4454231782a\d55eYMT_8=@><===:86356733325_^Vd^3bWKOYZZ_\\]d4469434d\WTY]^]\Z[ZYdcg__\]VYXZ[YZ`Z][XZ_^^^cZQOX`_^`h~FMKIJMIIJFyh^_\LN:;?=975788999:::96;DNOOPJFOI/A288b_XUWVS1X]c_]URKHPNA=8?FGFJMLPDIMROW[cXX[T[YZYUV\SUSTSSUVTGLV[\[][\`^XJ>>73b34458:8ULV>AICA::786164cbQMKIJFCAL5@H1M2aS=?6c6kO[k@CjbZ`ZY`^X_^_a[1246651127<=96:<966f48465354 $&%)/;2(,,,+&X! " !""3*)*7! !!)(-'1))5!- +!&HT1BC2(-VTV*+4&'E3G%H7"#  +# #/2! "/":' + +=$%612% !)    + + +  '  ,0(.-!%:"   + H   +, " +    ,0.!  + )! #*#'+-(!+'       + +   837( 87 +SFonhy_unn\bpY_oowzUE`oIHOE]EK~OAL6V9DOH[1B9& V898#,!  ,  � #3/   +2Nic6$/0%'0-?BAN29X]n:8:ARPCD 2Fi-'8A.6=9:UOjlm̯dtm_gtFNPG;?06.X1V]cU;IB7A798!,-?:1""$$-BG$+,41'!%!"73%!#!$$'(--''#'$! M%"!"*(# <857A-7;8,%*(D-#@J-&66>9726<*=XLD>39.55:8$0,)-,&*,&*=-HlKm<97-C/8J;e?:20034<=@<"gj62B.?JI@NHC!=(?:>732>S;,')&$&$"%D= 0,!-+0&(/#.?.LX8GB8.1.)*1+--009<5*0+0-))<"-71'2)%%1>&'+%$$ "&&21-,*#/,+ (*?A*0?D)<&'),3=$2*4!)17%;WL4"/*87&'554!=2J@C>;&0:8,1**G'.E !#""" ,%;;R+%>-/3,45.+#!',<8CKD91//H.PLMF7BA5;VAP5]8=K[YdMg6_][`>U\XVk{RK_piVfUd_^NnxbiCvV]]]4BlVCG5055dAN6DK^NLUjT@3# 4+N.!-$A?.3*2"K3R->&)0?))(,'$#"#0  26("0:"%)(! + %.1)/ &)*!M`Iz1A'''$&(!'?BMB=[hbWW]OKA(;0_BWWYVj%1&?I642*0=4JTG<@,5I@;'1h?G);33A=IMOPSY,$.1)7%!&7+&1=BH529YY@<9JL.3:J>=./GCJ8- *-4 $)##BP%&)! $+ '(!% *&!%!"#)!!-0.+-,-020#+*3-,,)-.)!%)--)/*-'#&,-+.+,+.0,+*,.,.-+,+*//1,-+.**)+,,,.+,*++-,++/*%$)/..29H(QV-,]UTRVT(*,)))'@4-,* 0.,I-,**+,(&%#''()(+())')*''*))('##"&%&&# %--)&('$'*-++'&$#&$!"#&"$&#&)-%'*%)&))&(*#%%&%&&%'"%(*+((()+*'!&&#! !"!"$###$!%!"&!  !!#( !!'$&)"/#",.&%$#$!! " )%28(.6!2.0'!!!D;lAUglpu|yu?;9(,,1+.-+**-,,.0.42/4992:875/-'($$ )'346C((H:)(!50+/+*-,(*()+)-́ +~~}~}{|~~}}|}}|~|}}|}~}~~~~~~}|{|{|{}~~}~~}}|{{}}~}|}||~}|}|}~~}~~~~}}~~}}|}||{|||{|{z{|}~}~|{zyzyyzzzyyzzyyyzyyz|{|}|}}~~~ +}~}|}{||}}|{|{|}|{|{z{zyzzz{zz{z|}}}|{z yyyzzyzz{}||{}||{z{|||}~}~}~}}||}}}||}~~}zz{}}~~|{{zzyzyz{|{|{|{zzz{||{zyzyyyzzz{zz{||{|{{|{z{|{||{z{{|~~}|{z{zz{|{||}}}~~~~}}~~}}~~}~~~~~~~~~~~}|}|{|{ |{{{|{{zz{|{z{zyzyzzzyyzyzy zzz{zzz{{z{{|z{z{z{{{||}~~~}}~}~}|}|{|{z{z{{{|} |||}}}{zzz{zz{z{{{|{||{|{|{|}|}|}~~|}~~~~~~~}}~~}~}~}}}~}}}~}}~~~~~~~ ~~~~~~}}~~~}~}~}~~}}~}~}||}}}~}~}~}~~~}|}~}~} |}~~~}}}|}|||}~}~~}~~}~}~} ~~~}}}|||}}}|}}}|}}|}}}~}}~~}~} |||}}}~~}}}~}~}|}|}|}||}|}|{|{|{|{|}|}|}|}}|}|}|||}}}|}|}|}|}~}|} 풖쭵̅аވʌ㷯Ӓ׳샔ᗙǺ…ݍƷթ񽁊‰ԫ򉇭Ӑ焔ɿ҃𢐀Ţĝͻ菁Ÿ֗א蜁ť¿Ӳ㰪«㮦ɤ֡򱜪ړ베ډ폭ڸɋ䆂Ј̻״֥ͷĀֱ¿Պ񭻌ս̯Φ񞖛΁μ߻Ή̆Ŷн煜⁉ȧǙᮋќ뉖Òڵ縬ݓŽͦ𥈃壓ゆиѲ˫վǻ͕鎥֭؛ҾÀƩГ塡؂ށԊ°ݷ끂ѪΊ˳´óดČ֣Ԝ򉷶߁扊Ĺ越И݄ƒҨʠɬ͹˩Կ|wqw牔꟔Ɨ|ǯ﹋Կ˴ϯĄټ󑮀ۀ뽇ǨɫІ݆κٹׁѰᾼ䀗ǤߎǃՇȏǡ詴ˁմɯ÷戙Ƀ䜣֪ڗŀƫܹ񂖃Šǯթ͍؋ษᇁހڻ̶њʵȢɳХצ󿒠ڭźĸ܈ťσֈ׶ҙ߃KʶȾжü熽ᛷȽĿӄɀȻ»̝ޝջ߉ȵˇ䛍ᖀǦ񁍎킑¿ėȅͯЦԺДýͰ鎦ŻӼݧ镇Ƥ󍀎ؐխ􏩗˷ֲ聐Ʃ򊢠ħљ쌃Ѩ郡ð≂񀎊鍥򇍡ŽӼʼ血ƹĸݽҬ¢½ȹגʟ鏑͊¼ä1Ϻ˻ɒñ348;=BA??:;98<:7987789:B8:97767776iij65hedefegj67;:89;<;9:;>@DHHGKOQRRRTRJB?<89;;:;<@B>=;;: <=<<;<>@?=<;;;?@>>@DEEE?::9::;;:<<;@???CCDHC@BABA>=@ACEEE>>CCB?ABBCEEDCCDGEBA>?>=CECB=?<<>>@CDFFDBBA@>ACGHGILLIIHIGFDCFGCFCDBA:f<9:<:<>?CDEB;:8m67ga_^^d>?j_5;976m>5uP,OD:9JGJgW_fBHpg{Kad{oRI5|WUxv~}yUzN_Gb49ob]TMYgQuJ7:@5_qSs7;61SgMbrP[:se~z`Y}shNrUlsk^.;:6(55,,3*'-)),10//'(/1:+17:pUVYTIK60QvY`OT^kif2:)!?7wFc]a;SSG4G>BRIN[{z}k{Zw$HUxmJzyz_~rus[AUNJJ@>a-`]=:RDUVamOXkpIB0?Vnw\f&@<4$9#04:=7M7.S7?Qb_[ABJjPE+;?/71/+A($<32?GO+$:525859&(5&%.175MO>HG%:92%5?G`C|oj_j~^Havp}p" "/?*D!%0D@68ZKWigHR}cHmKE7T^J[pm{FYODQKXqixo{dfgom1=.B]dfg]L5'"$'B9M#&J*$.+,3 8.,65*9MPEGKM=gp/.)%% C(08!: *- &&3)(! *6#&&""%!8*"3*'.5 :;46<@6. 9ST{>?LgI+G4Q6?cfCwq9pnܵ|]ttRL~_YpDI@nie|CDKIID?A{yK>Q7,/(1+*4RXB+C0- +**:/M7(+7:+H[%6US>88C2@R\[WQQU:=ZVL8I??>8<868]kRgy~k<>)_40./-36079Jl<bIVKFO9?ODM.YPdI8fh{}yei^d||mqzeV{/cCSiowUhm_enwJBd^obyVUaqseTZWfnowtlh`dQUVSTa^kqdJYb@SLFNL~aH~I?Yfob[]OInQNl~pGfkdnftxhb[o=cb{w_O\==`PiWMGW}]ikXas_n}q}qͻ||y}]Y~~x{|uϱw}|Ɓu{ً𨢽əzmR|uҺյ͸oƿbKOLAN@Il;;5*)-j@>FA4>:77;;<;92/L2EK7=C@?PJCGGG@VOMLIL&''MUT,++**+-.--.4>22661//6pvk~||xf))//-8m\\jh\gfeN@IjMNL;>WB=]HEnDF}zEH^rvLTXfdLRTOzj|lX\KYXm{ongOV_a^Vyel~|rqh^TcjqzzremdzqtlXq[bzsTGoxzLR[TkyvjcPLMLTXZWYSZ\ZWXTUQHLJHGIJMKFFEMMLKKp\rdc_TgydxxkcWaxhI|we|`tr~ayzo`\WiobrV^}U6;>A>?@C<>?:;B<5952:78949;>?=6775<=955:14/0@<1--2d{RBtrIKQHD~O~mViQTTpcARNc6SVKpTeUncPgUr]Rm^xMp@LMBaa`=JBYjbdU8I39>K4g{qLS{U``vvjsM~qPwXmG>og\]gstU`WZL/7xTNmo{>P@WLXdLKyt{WdUU`ZbYd?\nj=F?pVlf^B^y~gXKd`hkjzf\I@A`JXMIQV`2KTaN6'AduCk[VM63QQMAM,J=56?FiDBg9EC2DVK?MQEAGM?VTGA__F-K8A9=.1>V=H:586RV:f.&##$Q?/.1"#!!-$%?K%,)@7(75%)S7HK!&,80$8-7+0P12 !"T=F=H;7=>9669764998:527554___b\\1627654325342[[c35;76:64748:=:8565578:;85233652[2<@?::77967669;77558:;;635f678<;;546664668:43447831023abbdb444222417;7bac796a\HW6@A@>=<8552y4476244314^aXZ\c[SLPXZX]h_d3a64346`ZXYX]\_]\[ZZcegcY^\ZX]Z]WVYZ[]XW]b`UUaXLL]eifiqNNMHJHF@=ndbc\34<=<73X^349;<>?=;<;864e`__ZXUTSRPMGFE?FRROMPZWLHLQURHEJED<:08GMIKKEFHO<@KHB@HGH>DA=@MLLUUVWRD>EIWYSPSSCEC8e5i_c?>Ek;9RY91/010WCf`hjtuuzA>Ue[XX_`b[YXYZYZ[ZYYX\[]cglkicJBGZ?FUJVZi|=Hl`RjN2/1G<5DGP]10578522123558<:9979;<:635442220/034"%%$&)*,+,/.'!  +X !     365- 10*(((,.'0;'&$" )D.58#43E.8AUaJXM<(H4.A?C@A2J3C7CS_H?2*7DZKEG,PBF'-1.%*.+, %*33 2$%$" +$'#)&)3%%%55 ""%+)*+'** %!$"! %(*'1;qVSRF97  + # +7 #,   + -1&*%'$,4*+@.'1=9&&0.-,-  + ' /##!@(E +!  +  )-.##4%! "%('(        +  +$')4%).X:* +  0) ,     0C>M,%! 1/5  + +$ $'34+$!#4"  +  + +   +  +   J4%! +%;9"UL(fT}qVmpPIzZToEG@kgeyB@IGF?=?unB2/ + + 5=$   + + %!):?5   ,VjxspP'$@"%$"!&'%,0BZ9:mIH@#1T56  #&/7.@75bylg^fszYIeKLEP5-E1Qk:J@C+2627=E+$Td0*;GE8KH9?4 $((" %'))&%!##B%##(&!'" !7+"@*",-0+'.($7*,;FIJ+AD;B<@D93-+4.,<92,8+*;1-,2Kc;ZIKVNqqhYimh~~zNJPW2~trђҁ~vаz{晴Մ򀋝Ů뎡ͅ¾ֶ»g3`tծkɽV}fO+-*#- 2,'G4(0#:.D9CD96.8623543.-*&" :,>@)2:;>NB9???9LEA=413=>If]XXE@PQNMMF"J>5C>59<=-%#&'%##8":5$6%161-(1*+%/&!>73>@;=:25322589721166565F283E93(72-KMB?#'47()6@M,T0/91)%<9>>4)6Z;98E&$K5'2(56E/$3-5!8&!#"$#$"$$ ")#!"!!")% #(,"%&)) &$"5'%624**-&7*(4<,-8K6h?KK>UU[9G|DYTR`B#'!))6=;(A2;(@Q)@5H=/#+#A7C#&<" 6#*07+4CbD$)-dVkcT4=7#&#") )08ZFSHCNS\,FOP:)7an\@:T0:<,;NH8DF743@7LLF>ZV;"8-813"")B05(&+,HG4`5C8>LM! <==D2 #6,[QMO( B( #.8+!& H087 +." - ""## ' '###!,/+(-..0,..-1)1/./31-,,-*#+.**+-)&$',,*-3,--.))++.--.-,,+001.).,+)+*-**+,+,*(*.-'&-("#+/347>KSU.-,Z]TW^WLP)*M('#5/-,(&*0,--,+)(('%$"##!(('&'+)$#&')($"$!""%"$$ ! !+*)'"'#$))+((*+'&#$"#'%#$%"&&$(()&.*.(*)%((,('*)(*'**(())*(*"+*)&&)'b$($#"!! !# %$$%$''$#$%!!" "$$%%"" "!%#"&&  !$#-%# %.%"(*#1722 #,3#! !!?:^Yaeqqpu}?2.2+*+/./,,+,,,-..0/044469>=>:("#) ( '*6D"):5*5$!&ˁ~~~|~ ~~}}}}|}~~| +~~}}~~|{|}||~}~}{{{|}}|{{}~}}}|}~}}~~~~~}~~~}|{{{||{|}}||{||~~}|}~~~|{z{zyz{|{{{||{|{|}~~}|{|}|{| {{{||}~}}~~}|{zyz{z{{|}}|{zyz +{}}|}}}||{} +|}}}|{zzz|}~}~}~}|}}}|{z{}~~~{{z|}}~{{{zyzzyyzzz{|{|{|{{||{z{zz{zyz{zz{||{||{{{|{|{z{| +{{{z{{z{{{z{|} ~~}|||{{{z{z{zzz{|||}}~}~~~~~~~~~}~}~ }~~}~~~~}|}|||}}}|{{|{|{|}}{{|{{zzz{zz{|{zyz{zyyzzyzzyyyzyz{z{z{}}{{z{zzz{z{{||}~~~ }}}|{}|}|z{z{z{|}|}z{zz{z{{{|{|{{|{|{|{|}|}|}~~~}}}~~}|}~~~~~~~}~~}~}~}~}~~~~~~~~~~~~~~~~~~~~~}~~~~~}|}|}~~}~}~}~}|}~}~}}}~~}~}~} ~}}|||}}|}~}~}|||}|}~}|}~}}~}~}|}|}|} |||}}|}|}|}~}~}|}|}}}~} ~}~~~}}}|}|}|||}|}|{|{|{||{||{|{|{|}|}|}|}|}|}|}}||}}}|}}}|}||}|}~ +~}|}} úသ⒑͎Ƭ됸˟Ц͙ذטŦђ㼢ɻ­ŧŧֲǣㆹռᆢɼυщǏ簑۩Тʱŋϗ钢ؘ׋խԎׅ҆ݜ͡谆ٲ⪲հݱм집ѱɰъݘ͂ïɘضЈ큋ӄ߃؂̰ǰ˥Ψњ̀۞ϺڸƆ򘟻˛􄓩۔Ԕř⢏ȣŘɠ怬ָّ✕Ğٸݷ͑׌Ձ扣σǯ̽􏕥͹ԻվǮٿï̭߿ʾ臘ǗۄʠՐʹՏѢІێŢ󄌎ӅӲťȗ肄摸ծƂ惭x̸ډʴӝȆݓ욛ԩ䊔o}|ݑpƣu¼ͶʮΆȡ񊐕Ӥ€ѷƠڐҷضᷬ}rᓛʒ唁ɈºͻÆՅӧ듅򖨬dz݋ҿĿΨϲ̬ܰö䕳熗׿ӱϾ򊈏ңɼ툃ͣʅҒӀʽو㦵θȐݏƒϒŋݕ߼٬޻֯㹃׽īֶĸπ낎ƴ÷ƹƻ¾ĺұ݀הꏏê蓔׽Ց齺ߙ¹ʱĽܷۦ礌ҾҀʳɢ鱉릨鎒ط荜܃ƣ嵂ɚ捈夣ξӂ޺멨۽鴿ùٷdž춰٭ܭͲӸƃٝ쏬β룮؟»݀Յ򌊐₂܈ū׀ݗ􌉀䂀򁊋ޠ􄖣ͿƽȽѬ੼Ǵ倅ԿȽϮ־𑇞Ԁ뱋ߐ񅝤ûͶ虓Έ+_a3==BFA?=;=8>BD;<78889=iilk6689:98999867876555jhccabg59=989:;:;<;9:=ACFCEQW[_XURKD@>:;::;;=?@=<<<=<;:<>>>=<;<=<==>><<;;:99<<;;:99977:@@@A><=A?<9<><95=DEA98999;<>>:989:=CGID@??ADDCABCDGGB@BEECCDDCDDGJKMLJFDABAA@=?B?=>;==>@FG@:;=<@?=;<>;<:87:?><:=:7::i_\V[`5B51V6;97o>76?RT/Bp{wMccTPLKKOczYTOoXGLTiRn|j@@@:IH?$&SxfR_LPHdaq\.;:A?BDT96p_|a)G?Tnb?NvqHER/dlpC-I;aowLYXgTxIyYK]XSXq^SaGn[ah,C@E/#R5>92/<_1jCM\crO~ƆLXE_Ywzsd$4J&&.K;OWPGQKZDWTN]KwOI1+,,1=2(-9.760J*('&$"60/@0"!')-33641>N&%&:*-&fpTXQip@{\C\\4[V_qAaI?./N0%KA328]55ATRMH<[QSP__mj[\K/QMGXcbWY[[JQmp_?%ALL`cig96/@3*,F>:J8#)'N=NS@2HM@NOHPJQKO9A>5.?--/"8).),! ! * $9E3*'$.1/ '66";843738E3`?UrW"s~NMIEfRmkd_ȯ{nvl]XkLzLJMONRLynQL@^LJJRVB9%$;+20)3*;)65A37&).E=B=;C8YIIG(FP6\-6DQ_[dpb\X39TD:.?DB=:.DKQvqglod?9MG>bsgK5&KviDeqes´Rkn}haqc`{KqD;oiui`.1`:aadcAEM5O6DgB:9?>JU_iovwrSs@]e\cspcljMWblzG=ogssN[jsij{qeXhGVS}ahALZNcUJEFW\UgPCC=I??DBCE?FD<@E9<;1,3:625;?757,,.)*,-684442;T^sYmPCGOTK}QiBrfghKLIQ}KTPcTegduFTqjYz~dTnzszYkx[Zd|wsj`kjNRDh_:LNv{Uqf~pKCAbD:C:]yNqYKLsWWskw>L{KLDF\a_xiXDsDjKreqhj:P{PBc`v^hC<53/880>2B5-'(%E+ 5=17!' -IH@@6AHJJBEFHEFI>FTPB:93JBkb365eN0?>8;?<72192S2::5513:741a`]\[]_59944343335756323335739:58549;:756568;;7422dfb`[SO:AA;879786498739;:8<=86544575766579>4a`ba43479984a03fefd55464431422:71227:5[_16<==>><:;:674e_^ZUUTJPSPPLHFCGLLGHOUURMKSYYELQF7bMLAHNEJIEOERL=cZQS[S`OY00Z0^XNX\ZYRQOHQQMHLNRYXV]c^^585`6b^]_`^^`]Z\W[XZVUXYYYZ\VSOWRRXVJG:?AKLHRPTROMNHNOIQVW`RLLPYX21Y3\UGG>ODIEA=BCNH<@=<TNKa^C56ha]b88:8?^9H.010.R@Pbkq}|~~@FUaZPWXXZ]_[YZY\]YZ]ZZXX[[_]fgh\IPVX[X]YermgmG?Rp[98O7_4542_2Y`5:1\XYYZ/2:<87989:;;73'*+  4344F3300./1!""!!(./41.+%" !  !   "#    1*'$'*!3 'MSD.>7.,('')5F5/-NN>-'*:/AF4 & ?jeZQAO1:K(O+%48I2 (*4675B)+*/ (- 1(/7*7)":<0#&+%")$"F-##$!&.$!'%%$""" "$-( !=OQ=A968<)' 23/ !$%3^@> , ) +'7$.#&2'-4()$ 21L0'& $ +  H 2*9%4,"%   $(%/+$#!%)!    + + + + "*"& ! ''& +  A4'=#2#    +  +"&%    !!  #5//#6( + )"81*1# +8+--#12*/1//,*-%&   +     +V+%:,+&&K@)FL(=bltwnbtpw}i~ZUiJ~PMPQNS~M}lTO>YFDBLE% +  .  +) !)1;FI4% "  9`PXtaL ,%"(.,- HO /Q+:]ADkYMQ&24F(G$91O.'8<<%?LRH.C+%84>B6A063! ,%$)&2;6!"!%'%)1.-05/@/"252,179/WH4CUELJ"#A)&<%">8:=''$5'-3S9Yb1O\PymdCHThZpƲyuz}諰A@\9Ցyĭ؄z幭ƕ˾|j癛ԥȕ񏥚ͷԦvBf[ϴȲڻ̈́푠cM7V3.(#-@GA3;72'07GIB=6\\ynN`Uwz{ίżԾzs`reePQ?BqWͽTGhweUHMHNYm]te}{c`lWz{xkksfWyzd}bgliuf]WMCC*6/0:RO1#)'#a@@935;502455+('$ 55C?)45AEK=49=?AJE<5/1;>!9J`I?OTO+PGLC:#B=6958<5%>F-/-% ,#3*1=#*>)+*(>('24*(-&,/69:<93'(%"')BS3-+#I+%*1LC1)6/B>%&%4.(44/32,2$;>?>%'.!(.6:A>CA(=+.07<>9:.7.*#'-7B*#=AEB,49 !?/);9(S088762208*2"9A>5+-&SF_2A:)#F!'0C;#,:4O4.G=04"+*)%(&?.#! "!",%!$$%*'))$(' $'"!"$"%"& ) -1."(91 )+B9!!# +4%*8GDLxB_P6MN{{VbZub6#B2(1(6D+ &K,B."CO43( G*,)  FF&. +)H7.*3C17&-mW3&)VIpdni],48% ).4! + + '95NYVNFWRP^6oE:.:4NVZNQAP7.HEF%LDR,*A70K;QO7G@FA@>@GPC4=A>>61@O_K$0+5:-/->I:;!%"?;=M\/G?% <$)0&*'"&&2".# ; ! +Q & "#"!" ##($!3./!&./---/.010/,%!--0.+./21,-)+/0,+&$(-,-,--.('+,+-0/.,-,*/+.-,/,),.),*+,+')+)'#+(%#'*047>IO,/0.URTSXSJOT,JLI?70/1-+!!'#0,+)(('!%&%&$""!#%&#"%))(&%*,.!&)"1(#"%$"%!",(#%(#,#*'+*#),*+(('!((&$&'),*(,0-,+,*++,+,.-*,(-++'()+*))*'&#(&',*"V##$ %$''$##"""%%*#"""&&'+)"$) $" !!'#*% ""!##%#  "$$)&,/-(%""!##$($! +)31/1"2 / Y=6IZaix~xx{w:**/+*,++,.-+,+,-+,0/1101034<=B8'*..-*-)29838 )5+%)'&*(&'&%򁆀}~}~~}}} |}|||~~~~~~~~|{|{|}~~~}|}~~}~|||}}}|}}}~~ +}}~~}|{|{|{| +{|||}|}}||}~|{{z{ zyxwxyzz{|{|{{{|||{|{|~}}~}~}~}}}~}}||}|{|{|} ~}}~~}}|{{|{|{zyz{z{|}||{zyz }}|}}}|||} +||}}|{zz{|}~}~}~}|}|zyyz}~~~{zz{}}~~|{z{|{|{|{|{z{zyzzzyz{zz{{||{||{{{|{z yyz{|||{{||{|{z {|||}~}{{z{{{zz{z{{||}}~~~}~}}}~~~~~}~~~~~~~~}}}~~~}}~~~~~~~}|{|{|{}{zyz{|{|{{zyzyzzz{{zyzzyzyzyz{z{z{}|{z{z{z{z{{|}~~~~ +}}}||}}}|{z{z{z{z{||{|{{|}{|}}{z{|{|{|{|{|}|}|}|}~}~~}~|} +~~~}~~~~}~}~}}}~}~}~~}~}~~~~~~~~~~~~~~~}}~~}~~}|}~~}}~~}~}~}|}|}}~}~}}~}~}}~~}~}}}||}~}|~~~}|}}~}~~~}}}~}|}}|}~~}|}}|}||}}}|||}|{||}~~}}~}~}|}~ }}}|}}|}|||}|}|{|||}|{|{||{{|{|{{|{|{|}|}|}|}}|}|}|}|}}|||}}|}|}~~}|} 燍鎌ꄒѐ񚶨ŲȖ穽ķݖ垺Қ⛇ޅȤȄԸۈٟ􅂇ؼ􌘓̰ߌއ׌ͿݾŽі‹٦҃΢汖Ô̔ǿߏԌӲ媏ٹב¬ջʻȸ虷꽀Ӭڤ͵ܬȹ闈ҋϴĘÖڂʿЭΌġɦ⎊鈯솞ҏ놀ά㊬äȰ˟ЫߗꭇԔ냋РǶ̌ǡ϶Ҿ椲ًה찁ו⠲ߘЉ细ഴְ񄲆иҥ¯鄄ݍʄ˷Ř̬Ų󁅭븯܆޼؀ؠ愄܊ꢶ⚀ȣɩғ߇ц{zt}|w{ǶКӖƬڹƚރłѥӕѤͤ끇Ǜ}xkϪҾ񉑚隳ȶ音̹­ϭĬۇ¬󖣩űù㑵˅ιЋ낖Ճ񕄑̓ϼŻپ􇬂ԁľ狞ݓ̭ӔӠՒħүϹߦגš،Ҋƥȶ뇇ݝŨ䰜擝ϳٱþź²َؗɂب̥ˡő߻崊é»òζԥ¹ďջц᭷΂Ӄ᎚٥받Ⅸޫ‡ׇٙпӓЗ侴䉐ɍ􂟛ίϮÇд㐢լ٪ƞ̜槵õɯʯ׭㌦ꚊŦąɈӱÙҀվ闚燊ڄׂ썗ω񀉎쇛ӺƵȾ̹û僼¼ԀڻǿޅDzʰ̱Ǹƹڶ眭Ǹɾށ܁Ûԋ¸º݈>_^\^49:>A@><<;78658hfghik7799::9989:999877:8788965hed88:9;#98<<;;788<@DHGKKGIHDB@@?=?<=<:;:<;<;::=A@?@A??=>=<=^>><;;:;;;>?@A>CCA@@><==>><<=99:98987679878<;;:88==<@EJHFBAAEHHEFBAA@ABACDCDDCDCBBBCFKHC@>>>AFCA =<>?>?CEDDEFFDDGFGHFDCD?>:?GGF@<>@BBB?>?>;><;==6aegq8<<:ni_VPRV[9:52474ag?-EXaACDahnrKDE=>PI>=GjdqSxq>g5N][\XpbZ|kiiZsSQt`qwzohk\0/380,587,LQQ((+5-563-mqiOo51F'(=(++.NftiSblt=DTO]JJ(a)gIyUKFU_~mheQh^blezxQrbb`fDOYq]hL9A=g:8*PB8CAIWbvuORZx~|Tt^^nteK+I; &)=IXB8L73/*E&OycH@8(0++D'9A1*4(#F;$ENA91*$,32)+420/049667?O*,'*22B,}xRjgbX~;6fRXK]RASA/FS)/ V3-/3C86QDBG=j[iUM6`mvpm1WcQ@8URG^vpvoxbVsC@]IroiiA? &(0!%1<08A7@+*4D2DD@8AENL:;0=PLI@689&5>??7#"*/&6#)7E6%##4*)1&$2  #6741$*%5HsaQGpGc@opEI`fX>Yj-Y~{jkia~NJSh[VKKIFKXTII{EMG>mX`r>6+BO9(6>5;Q>0;3931%0W-7@Fd_R*Q*.?E*`XF|hTlkms]psToVwYZUqi~lv]XTTTUXYf{hgNLSZc`\\WHLYYK`VVU\QIKrSF[T^}PxwLIYI`/FasqgmKddSFDNK|Py|cs~cnʟnxq}{ptd\݃́onΖܖxūxڴ؜{ؽԄzw{u®xضǙ߁ÀʢgmPRfqP^fdlzXWkarzatp[yqwӾ׷nx{{̴ĥq̝srm؝Ȼ^[cpwp\T\\e]]dVulgfdnPkeoqk[ibT^vq\rwgNnhtn[\XW-(DBB@IQ5-93-oFA>8<<92:@>:9:::6/(TEOH7?9?HIGHJMENTMHG%&&%"JT++*()-//.22/61355:3/?l~qMHd|~n_tsJ*33FuMlXbeavO^\YV#&)6?7L?vgfMHOCC?Lfqj`a8Vg`gNDUW[SMTP=`~v>Dlelteq=NR?AiaRPKKffYMRVQ_gfundssrc0R0:d\]YCV`XM>?@:78?72/465,-+43077/'4IrwuV_q\SAksRImiqhYLEUZqX[Z|`R_puLOrp~xXgVaS]_f|}i`y~>]OaIGE}YMNuzI99_udN;XUMJ?new`pyT>KmGKjwhjbd^\`U;M[\-E\?c?J}<;}P^S@@K\TcFFYbVT>NRSUWSVbl;rQMCJZCE7JF=7IhR\7FaNcnUEP=C[F?AM?ZWo`0-,MTJGF;9BLE);.K@?OP`gWFIT3R4JJFS3&(2KefXJ@&"%%$--$($-'$$)(!H)"#-H;-@8;.7=("!1>%'%K?60!$?MLCA;@DEDFDECCDG@;HLE=86`Hg3e3;dK59=98:8:c052W^5973214952\0a`c^\14545431436=:4;885222458358:8:99:698=<:5322bb[POLS\8@>:9;;67668986;7:<96647;@;877997563]bc`Y[4>?;64212cde57963578356625ca338:Wa43=@@B<:72\Q^5756729862/2c`]PB^OPQX^Z]_]d234454`^[[[\ZXZ\Z_\V\d^TYW[__[]`\VZX^_[UMRVSU[`YMQ[jfgcsvKPI}<6kf\WZd20]6:555:/W6>>>@<<=<:743b`a^[YWHKMYQPIF@EFB@KSXYUPOORTJTQAjR>0IHJHMKVQJ,G2cYFJ`3VY[V\SY2XJMVYe^XTQQUQTPNOSUYbdgif<7\;:_\\]``]\WXURCQVWZ\VZYTRTI`\WUQOEBDFINVaZYYVTTOMKJJNUZRSXS\Y0]W1_PG8\9af_89EDERJK?>CMMLNGA[\]UXTQWVFAFMGEDBHW@:558<5e^Va\OIJLMJSKY263SJT4uK<;76kae:658Y_1.141-P8Degs{|}{~?xjd^[VUVW\b_a]^_^baYTPRSS[][V:_;GNW^bba\_ehnhbchcbhf[Zb4411[_0[33243]\544=35:6434973<))'(32344520/"#"$$##"  &#     ! ./1940)#!!%((,'+,-;>FC*P:,#A"4<)*50B(JE?PVK4%/LalgVIA741:81)264-('$# G=G>.54@9DH>6/18K^TSP2.AMLMA;HO11G8OC5<=5?(/.1))#D9<>PE,$&! 082.+$('1)"/381-00%9NN'*@:BB>A"-1$%?>50'.2M4+$(-(27030+2073( =<6* &$$"& "$"!+5@@5;8+*&$7R6CG.JHJ:)/-!!1;,EEGK:<>/0/;7C2./E-M5QH,(!"->B$.3*>%+DF'?@3_%=:?5141;3K./'@8>49K> :13,+6+21:1UXRRUgWKRJYt^SDaTXef^efiqTrxrVLUl7]B@4A|kVcfkEC>@:548776978<H&$,B<4>VOY&>5(31)8)302)#%,-9))=5'+I)A15&:&+C((ESNB57@FB,"-<5&JB-B?!""&#&$#"###"$ #!# !" !*5',&& J$%"!$--/$&'"*2"#&)"&&)#)@]qi}9NAZIHE]F>mk0CSF9(0.<,(3P#$CW(,+) F:2 & , +  ) HJ; 0.@3468+)$[nP@&)*:IKLHPPT^c6`A'2RF>A]Y;BD>I2?;DP50/E@5,@^MU0C\GXfSBI69S?65A5PSiX& 63EESVF5?G(B,??9@$%=ZYM?) 45% + +&#%%+ '4 *!  )$ ! !!%$+1.. 0+/ ,0/2.- 00-&'$()).0/)*,-/--(.*#)-/3+,$&&*.+,.-1.-,.--.,+-,.,)-1-(+*,.-++-,*-+,,,)$%(')*,)#&*0043@ICK+/+OLNVYYTUVTKJH?30+().($.,-+,+*!#"+&%! "#$'+,)')#)'2-$!!#"%!($  .**%')&*%((!"'&/.,*(')'('((()*12351)++,,./.-(*()&&',-)+*'&) .-+*''  !$(,())''&""! "$($%'#(')&+$!+04,# ( $!%#"# (&'#&&%'( "&" #&.+&-,&##$$"'"*$ $!612.5"!"! =2A`^jtwwuyy3D40.-+))*-1/0-.E./22.,**))/222 3#&+.000,.24:50/0.-21)')%(&''ꁄ~~~}~~~}}~|}~}}~~~}|{|{z{{z{{{|}~}|}~~}}~}||}}}||~~~~~~~~~~~~~}~~}}}||}}|}~}||}}| }}|zzzyzz{yz{|{|{|{|{|~~~}}|||}|{{|}||}}|}}}~}}}~~}}|{|{z{||zyz{z{|}}}|||zyz}|} ||}}||{z{}~}~}|}|{z}~~z }}}}{{z{|{{|||{|{|{{{z{z{|{z{zzyzzyzzz{{|||{|{ ||{{zz{{{z {||}~~|{{zyz{{z{z{|{|}~}}}~~~~~~~~~}}~~~~~~~~~}}}||{||{|{| {|||}~}}{zyz{{||{{{||{zz{{zyzyyzz{{{zyyzzzyz{z{z{zzz{zz{z{zzz{||}}~~}|}|{{zz{{z{z{z{z{|}|}{z{|{|{|{{{z{|}|}|}|}~}~~~|}}|}}|||}~~~}~~~~~}}}~~}~}~}~}~~~~~}}~~~~~~~~~~~ ~~~}~~~}}~} |}}|}}||}}||}~}~}~~}~}}~}|}~}~}~~}}~}~}|}~}|}~~}~}~}|}~}|}||}~ }}||}|||}}}|}|}}}~}~} +|||}|}~}||}~~}}|}|}~}|}|{||}}}|{|{{{|{|{|{|{|{|}|}|}|} |||}}}|||}||}|} ~~}|}~ ڀٸɻͿ֔٘ʸ݋郸ƎǪꗿ̀ӠٌҊ瘮﫩֧ѱ𕫌ק灏⎿䴥੗©ʭŶ۲ŀҹӃ񍺲ᵀ֨Ɍͳ螙хѤ֎߾ӿܤЉߦɰƼں̸醑ɗفثܰɁ慯쉄ÄÍߋ֜􊝶Ԫӷ鎍۱أ͝ݟÇщֹϴٕ冇懣ۍ̹͹ߏ㨀끎ف̽⌎͂ɵٟ٣˵ɒ耕ہ˩ޭ倀ݿ얕֛ϓٌ؇܀Ԓ¤ަ蟼Ĝ޼倸íķƻфDZ﷮י󸣣Ùޢƈ݇冋ᅎѯĀ֏ފܭꚰnnrq½~k}nŤ̞𝛡ٗñىʩ喸ֈƢ푀⣶Ŧ늜uofa{y|Ưㅌ׈®㩭Ėֹ׿ـ򈊏ɹģ퀌Ƴ¯ɞʔ˕ૂǜΡӝҁŭƸ˅ݑ޼¹ۜ÷ֺ܇ߎȨ툖΢فϼŻ党˷җ¤ނքҴ咮ꗱؗƢ򗸀֖͸ߒέþ¿ҼաȘ⊆̴߽܎ˌݔƽɮнǾԯВҚ⎏ᅡȦ޽ƀԁ􂐖󧿶Ѭڅμսålj䰞匧𚌌׽ϗӞIJ南չΗ¦Ñ܄ѓʡéѽᛃεڹ՝댘ቊՅ򌕒񀀁􆇍􁅉钛½ԴټꁁҾҼDzɭľ鉮ȳƼ݀Խ·žѺد¿㹤怪ڸĥ򁂋Ŭő۷з녌򐍏$_4639640K\.77;@A==<:;:76mlkhjk7989879J;;:<96677k89:9;:767669;==<>==;:<;:9877:?AC@>@EB@>??@?@?<9::;;:9==99=??@==:;=?>===<:988:<;>A@?;:9::=??@>;=89;9965f47<;;::98779;>::=@DEEEB@?BIKHDA?>ABFEBB>@BA?@ABEGCB@?@BCC@@A?=@@@==>=>>=;;<@DDC@@??@BBBA@AACEGIIHDEDHFDEB@>7BGFFHF@ABDCB?>>B=;:;??A=:7@;j;97eRTVMS4>:<<9-SaZ+<&KNSxwVlN(f`XHgfXf:Mq@]afYND}HHRWdfYI`yjssdebT]jZNl:+&,DA=:>>9=*93%52Cerb~F_Pat|`_wzod^mlw^_tNponzymzCG552XIL.0fHX:$<@W2`_x]W{7.7CM&)#.35LxA]Fbbqr[esq<;~gXWCAt[qZYo|RiwAijahT]8GN]s|LQgOV1OMCJLy.<1)670*]Zb{NJDK8E.2/3@:?'*'0.05A?G4+*./-&6 6:L255=ABHO%*00+$(7Df=nQgDuXx}TCanM@S!8+0IJ*'/JD3$??:A>S$~S[wcosLǎxxOT}f<:D_b[OMPQTCOD/Oa{@B<:EJU=OXuxYCWAI;N-9..!"@94+(BCX+/8<$.+ksr;"<<:8.8=::;;972,K5IJFB@<>KNJJNI8NPIF%$$$&DO*++**,.1223034-3.-1//=Vzb\mCe}{rijgl7!13"A_Ja7vqVL^mgq:I'*-9C7Xs[{ONM]6SmQfd:XPKP4hwpm^W~AHJLU[QlMc?V=D:82f\M<2_U`<\R@yBD}CFOrH{xntNFNpp\RWsXmmhv|anvz]XfeN^\ij^n^faaiak|vM^cgrf{fӰtw~ov~yYm_Y{mymUz^yqZNyfbV^bdios|RSIQWPPNKFHNPECSWZTWQRNNLPn_efughitmzqo{ZY\bwbH>CGl]ySrtoxZ\^\ac]e^BIAbHDC>B8751:?:539;:A>A>78847B9:;<8;:9)-48;245122JlMunIeyQuRrTGf^]FiSWJO_~psp@K\IUscWa`svb|Ux~R[YmqiQGF24OVSjmy`aH9_=B;EZc{gbtoXWqoV^eeTYBzVBgk`y}{cMW@RUCCG6]ES@QtMuf^]@hHRDkWFNVn_td{`TO[NXVFT?8X]OqLHM6+BSSU:Y:IQM0ELGbN]JmCH>S>nKCTVP8`m~T=:TG/<]k^OQ@ML9RXQXFHE"%C$1($/GECA;7921aa^7<;c888B48654345XXg33b13^6:80Y0024`b\235741116D=;<:4331_]34677:8:8:=;:;;7443ca]^XXTJJLRNVKH@@BFGCNRVRIHJJUUZM?N:=PJCHMSNVRR.?33_ROaYSX]YSYR]XIBX^23e^VWRSNTSPPPS]gfmGcmj8:Y]_\[[Z__YN69Q74XNLUNR^TJZIKVNPMLGGHTX_][^[VYNLNQJNPORUW^X[W]YYZPH45;B<<=_>HI\UUH68@CHOJDUZ51VRJE7WIDFDC?I[0DD<=E?9;?531;8\Y[]]XINKLQLJPZ^2aPUZI?<>4\Wb47`6X\3.274YP]4lltw?~B*+0("G )06=>7M(OFdRFJI??>36;3/?**0-1.&+" " *:(6""$*.+%"1#+*",%&,$#(%''"!&")$&&A6:"&[FP-$>,YfbYv7%(/8!!*!" 4 +))='9-/<83 )+% 6#0:*  ('".L)05"+"%  c (h+''IA0 # &+  + +#$(9$$) ))*     $    '8.$  +# + +   &C?%%  +   5#" + H   + + &0&  + + +  :[PQE"->&)7 "L:7 ,I'VgxiEQiovv_uo@gh_yGTVGMMtdlq8hdbBD?<>sDA837 "  +  GGQWK*  )8987/(0%@'4@+@Yvhi=%4'5.8"(+)&,6= & + /8?%!2:$""09EE9GBnfq`brT}feYxmFNK=iL0!,L\B1;?.*0(/F38?BG'$88<)A75NA@23"@-)4R3.+,+0,1.E!8!&&&!8$&!59>*''+253*+,&('+,0/03C7<698F1#=RFDT2DT,6E )*E2/A),+P>IguN}{xtluiqypyոwLNKWuՃ|wxæҙτy~sԤ݈Ե力|{Ҵퟦ̥̹vȻ~RKM<4B3?),$+1(4K//M6<753,Q]aQFe~淢ͺkTIy\FYAο`^`moidXRTX^gcbR^p|vŲw]iu\]sxqo^\sjsuoJJDI!(/94MJ)(*!>7239:;5-".3/*''#"7.AC;789/'$)%6#.*,(!6BB?54NG%(0/.<0C/9+/%+ 63+$!&Q;?0($++,@<(11(32613D$=4/%'(('$'$67=2)2(0/<-'9=A-4-3*.(2,*0(+%"27MP?/H6;>9985/05;32@DH@B;:6766S;,+-F+$-Jc[=N[<2,1HC72<'!!!+*35"!#.$(4>G"967)?2?BNN;=*:55;*M*B(;,LIJ((* -%%&#$ & !### & " "9!! ;% %8 ')&&-1!!:4;+#&,!/4*!)-OWTpm_[D$@-3j++,% /$ 9<#%(* (L.:BD6+6  + - 76IF$4d864:I3%!$Lif*> *(@mJo^JE&.!#'%9KZKQO@<)';/DGIU@?>6@0!!$4:(=JBUCBE:CC2?H28C0%:UVA?1 $6 ) =*+0!  $  !!"! !$+-+.,,5/.+01+,,/.//,)'&-.,*,.,-,$*--//+'-+'*'+1)(')-.0/1411/0-+)'(+))*+/.*(N*--+*)*+0,-,,+,)*.,%$'#((+''&)*100FJDJFP--OVW]B/+&3E>$0-/+-/)(..))V.-***++"##'%)"! !!"&'*'"#$#*+-%)($!#'"&$$-%#,'$&*(%*#)&!)*0/,-))&)*(.438143)-.,,--/-*&$)$$)$'.'!,"#)#&%# !)*+(),)*+""#$!$#"%&'+')&)'&'$!,$#,%'  "%#%&%%"'#!#!!)+)+,,+!%#$'$#%*+.$(+-,2/.3"!$$??R4igmp+)32.,+,)*)+1/-.246660./-.364-'"10223241$*1/$%41.501311-..&(& #}~~~}}}|{{|||~~~~~~~~~~~~~~~|{{{||{|{{|{z{| }~~}}||}}}~}} |||~}~}}~~~~~}~~~~}}}{~}}}~}|}||}~}|}|||{z|{z{{zzyz{|{|{|{{{||{|{{{}}|}~~}}}~~|}|{{{}}}{||}{{{|{|||}~}}||}}|}~|~|}|{|||{{z{|{{z{z +{{{|}}}||{z{}|} ||}}}||{|}}}~}~} |zz{zzz}~z |}}~}~{z{|{|{|{{{|{||{z{zyyz{z{z{z{zyyzyyyz{|{|||{||{}{z +|}|}~~{{zyzyz{z|{{{||}~}}|~~~}}}~~~~~~~~~ ~~~}~~~}}}|{|}|}{zyz{|{zyz{zyz +yyyzzyyzzyz{z{z{z{z{{zzz{||}~~}}}~~~~}|{{z{z {||}}|{||}|z{|{|{|{|}|}|}|}~}~~~~}}||}~}}|}|}~~~~}}~~~}~}~}~~}}}~~~~}~ ~~~~~ +}~~}}~~~}}}||}|}|}|}~}~}|}~}~~~}~}~ }}}~}}~~~}~}}| +}}}|}|}|||}~}~}|||}~~}~}~}~}}~}||}|}~}}}|}|||{|}}|}|||}|}}~ +}||{|||}}~}~}~}}|}|}|}|}|{|{{|{|}|{|{| +{|{{{||{{{|{|}|}|}|}|}|||} |}}|}||}}}  + ~~~}|}|||}} oޙإτ؀哕Č񗚘ˉϢ㶢̻ŠūɑƽłޞԶЄ˿’Η내İ؃Ğ֡͋Һ䚯ᵱæᗮʄҩ都֩Ģޜꠜ䲭܀ߒΪݐԵՖ鄬ѫ͊ש·ɷ׀ǹϐ䋧ފ󚕸ȉ٘ԃ艇ˌڍ憀նǼκٛיぎìҽپܸ炑ᒉ龜փ񁅏񀌔怂Νݲ㗅ϝȼ۠ؓ喊􁵤Ƴ݀焣忎쐠򼞟㉕еƿ΢Ԙ˾ԐʫѳăԸŴޯ퐠ŝԇʈ񸣡⯜ۄ™Ţژ񄕀ԤǫŒ«ܹ㽾Äx~zi|}~imm}pѿ{Φؾ㊹ČЋȇ΀Ưߪ򢨜~Ӓ~bc_dιʯÉʭϴݮŸȚꂢǨĎ老͐兀»ν󄐚»ö՞Ǭ۫²ň좖쥺߭􊋋Ұٿߞм䟣ʮ垽ٹ󽳀猓曆œح޸NJ󁔏̸܀ֆϚլݻ삖ĨŃï񹯒¼ýԄⵓŅ’裾ͬʼȇڥLJߑе˾ĺ՝ǭٷƷƒĺڒѓDZ켇ƚ񬓃ÑІûָѨ݉ÉϜ̌ƽ߹֮ᶥ뀄ϲΩѴΖĤ䴾鐄݋▭־Œ􊑋ꀉ܉퀤ޗ񃔏񎗟툔ǂɄѳ퇂ߋ᫱ǽ̼܁لㆴրɯ섂ûĿѴȫɷ쩑倀ºɭǻêϦձ߮ɿϺק΁ 78768442fc268=342;D?==:8766676k66877789;;;9:976kl8<999:::776579<>>>@@?>;:::<<;9;;;==<=>>=?@BD@C@>=<=>><;<=;:=;<<<==<<<>?==<;<;;:99<:::=<<::<=>9:==?=::<==;<97D:=?=>;:999;<;=<<;=A?BFCADA>?>>>?>@BCEDA>:::=?@?A>?>@>=?> +=>@AC@CB@CA??AAABCCDDECDEEDB@CBA?BD@DHF?=@CEFEKGC?@;9=>DGEE>B>98\PPVZZe81372-WXzQJX9iNHPFYG`C;P49AJXi^UbNg]<87=@[A/91-<C 8K"()(""60/'5*4@2,.$2*4 %,!$"5-8:ACudFK@0Kb Z;KAJIUU:B\ǜo`xfbuo|KDz{ELRHonzmYNYm?bfuAQF4,078E9GBTF]B-==LXfbKb]KS=498RU)6->O|fIvnz\c1EnDJ9mcpLMrYdlhkh;Qf(9/01K*/-%&'$24T6'UiD0~V^=+C62-.<8G1?aca:Z~E}}a_dnylf`[,3rUWnopoiGxNFhb]W`hzl]1VU_s_]o[GR_{hejWf`MW\WLJSM[ngSd~r{VMMbZcb_b[O[[bjog]W_ZWhu{w{{aWev_|Z^XVVTy|nս}|»ǭl{es|{y녨t}̊πÞӏ𠣔}ҩѬ|usqt~k|u{|⣆yʩͷۇ~plyMR>A=rQFcGduJUqaenqbpczh\Ʃɻı[cΒsnlpɵΰ㧑cz˪ǰciklhtldhvkxjaN[qdzXqzlbXtnqqL`br]ujpfpoSnmq{zfKYQ+#"@ICJZG919.ZF?@?<;;906;=:99641,JDKICEDHGQOIHME5UMFF$&G*+*+++.22/3201374-+D9nisegLwIkq_G[X]8'1.Fjr=o-QgVHU=%(*0:JLPaSziSP|CBGI2>]WZf`vSN@^SijcMD{BBQTMRePTV>D>/Ue8XN65;8DuCHRht_o`[xxYuiROGE[RQ>i:K=[bW@6<7:;c?BLkkrTQXUYdmaWNQ_}]SWk]XI5RM_V`_LJsj}flOa`^Z]J#PIhc^[Y[UH\VNFfQ:SE=9@;7A<:A;=EHO?Pg575659<=G><@B;.))4==:48215:?^qzjSjeQkzqNzUafXYHj`iTXxUsoHPI~d]XW[_mcco`\\Yhnp|c^ralVHFGBK[lGWbmMY>}|CADglPoqiCMuj}Xl^[GDl{mr|mGkowDk8E)-0AN;K4?G{VIWD}O>S}J5UCj.!JcRHA/F2BEanNYXJ=91+15cG8:PVQROQIQPFFPGBU[1&:>XGD='&%&',%#)$%* $ ''%+;,, ''C%3@H55BI0:B416+@>4+#UCEEB?EDEFBBGDBCDGA=>;3a]_\YVSYa[\X\a6>@966434a8;8979;958998465762db\abYP^=8458<7432dfa355665643ec453cbI/>;33689964431^YYSb4301b5;76^2^\`2P995b`_ci6jeg63fb\]\SRLKUVS]YZWZTRTW]S^YU[^]WMRWTSTEHVTXVZUW_f[VagcpzK~kBfzFDMI?n`c`5bUTT\`]YS5=963VYL=@><::;865213b^ZURKLLLKIIHCCDHEFMNOSMGHHMLN=U(;?5-1;GFO1YP-D444a[XN./1ZVVM]WM@[11be``[YVRURORUPRYVU[_^a]][_V\_]XY[WH2H_W]aYYXOXYPWO@SVX[TUQONPWX]Z\[Y_SLLJJL8LLNRQOOQTXWULH;C?ED>F_8@5DQM\@8A94>FT\\W13TKD]5OH>7FGF6GC@=<<;949:4b46ZPYbW\ORLNOLJXVWS^PNPJA>?6c^\h94bUE;0363TNUOfnvux~EkYdeb^\[VUTTWhf^b`V[PLSXWZYYX:BRSZhqhfiql]NHAXYW%UZBJQS_`f]ZKN3503445357:65<<;8:858;=;1-545 '    !   "!!*"!$''+!#%&06@#/(;=-3 ;,(&,(#."<07=F:G@<+32+,0112062-0& #&8<'$5,3*-" ,<185'#,"',*'( )5*-$% " +' ! 4%HHGe#0R}ayx7$5::7&#$,!   %*!5&'A*%'37 --6-(! '#$')G'G',3- #*("`!% !#$ + + !"  '   +"(" ,5'"! ) ',  C3  +  & ) + +    )*,   *0(     +  T_84&5O$VP!!-5/L`;s|}odOcRnZngkwzMExzHPYLtjufSHRf;MPB^_];;OQb2( +  )$ %9JUK6L@.. +  +?C;brQ@ #+D3Au-DDZABbR[_``[!"9*#%!2  ;!  +>_9#4/2%.#"$$-*7-=bb^7^|Ub\]dhURGN1=+/=J5545%>)CLJ6.3/.@6;C3 +.#)B6,:$+2@:=2&',A,5.#'&!2/3(% &93;.#:%$%#"%""!$(.,'%.--6;?ABB2=DHX8=IN7C;C@-1F0G331nZYe[wmjyl|xpnt~vw|`uLO4^ahaDAF{lghړtǀ~քšӻ瑌ulǨ駥~ɃᆣҷǦؿ¡ԓǸٍǁqxbWY65"%%<'D!2&M9B+OJ-SJ?35@G:74.%,//*%%":C0)D$" )&$+)>,&0+7=;,(IC$'Q212/@/02 #(3 2/ $WH!$(1;-3*$/0-+%,,&'%,(7#&''.!42;*$((05;3.*?+2IS@@0(0GA7,,$&*71:9(I,TECG9M:IJE;3' +*;7:5085);4.H(<2$/'!#74"-D'/*FA;"8#195**2(42'0!045679%-4=787573377;<756289;;5:(8#+)$$A3:*.H9DR+^;2573=..%>.991:#86+5:3!&"')'" % %! & !%')!.%*!#$!"!$ #*?&&,B& ,3$'&&* !)( ;*%"GIUID@>J`jAUC?'7-\b74$6? "0+'%*$0$,( =&35)#  =F?- &L;j;3>=?-(GI>L';+">JiEOf9%0,# $=$,EUuM]]E<<.iJMF_FG?&3JEA0RYFRZ+.,:FA/:I5C-6BrK7I>>?><==;<>=>>>=<<=>>>@ABA@EA=:=<;<==>=>?>=@@?><=<<;:99:998;<<:7:=>BB@=<;<;=>=<>;;==::;<>C@=>?=<:;===CCADIHBFE;;<=?A?=<>>AFFA@BDB>?>>@BHFDAAA?@A??>@@A@@?EDBBBDFECCB@A@BA?>??@CFIFFGFDFDBAABAA>EG@<:9:;?CDHGC8=;dBBA?DEDAnjWO_3`]2@=4.U2ZZ5RfgbIPa[6m=el<99>?EE[`?ESU4583@NM|Nl{ikdZbccujVD+)0[MD?D:;9>>9/2!9BFSM`bR|}Kpsg}XST[bzllodegwUd\aT{purwT-4/.(:.[Kf=,J?%5/3%,MC6=uIRLR++'!! # "-$&/#:):=3S&*;#&#$@9@A&,E>69==@#+6+65FG=s:XquF5RmJ[T?@DYJ720W]@6E9YH;[1;2@9UkZnJpbRf]LUJ\3IWV;OL;ABTii?e`a[sX#  *!1& 0'6-AJ>@CLD;FCMXc\Ckj\DK\dS=+fRWu3[Ģkh`cj}rijMU\WFDwTVRABEcaZZIgjU?>iZ[RUuSG2(Q+W6QPGKI1?ZMnGKAhLA[N?zT>84QL-32;OKjppmMZ^DMGdeWe\UNZJh?-gZ(B0G.1'## < -/,ANd=TTk .)%$*=0.)WVl=^dPfk]Iq~`VYrycrAV-1ti9:L5T?I3( .YNK-=HT^ak]GNoGRSHK`\PNZjygNBG]aUSDc`QAENwvEWUqZawaufeOTQaocwuPjn\RYT\g}hV^[cZ^[pietqoKa\nVhdguhlILi\\[YUUVYY`pibLKNP_REJRMIONRNIPQVOMMR_V^cnnRgz|sb`^{]qf`zbopi^InP\_avtzryd|dm\uTVHknrd\GQNV=@A7;4/9EILI4>lK[A5=46@CA=?:;./,3:;67?@424-:QyZwurjjq\fO{om]hb`ckjs`}sxRAyHaQignom`>lUX~snX^RvUc}adu`MxW`IFKbstUzm\GzJu;?`CRk[ywzHEfluRpW|fj5OoX\Kel@YhlQLJ*U.IedM}Zz[~LJnLSS@8Qc\YWonzw:@=<]TI#6lLtXn\D.NL>9A&[\7>G3DE@IO;aL8\5SB7cq:@PhH_RMoCFE=ITKK1G*C,S?@6?@2LH=<0:2<@+41,7HJL@DC>ADECQCECB>?BA=><8:065<948=5771c;?9\Z]251VZUWcddaa343025443486521\32_[]>854512^\_^1;9996_8=>=?82`[\XUW[]3`XYV\3:?:8753346:938::6:4988643677531a^Vb4_^_;<44327544474b2cb5975d24446Y3647:96433322aXVY]a000\W<9652_Z\Y^[a21b^fggfbdec__^X\XOOJPX^[\\XRUPUVYYS[VXUYVUQX\ZVIIPTOTRYX[_a[Xb^^jv~vgO=vLKIGte_gf3eaYRUZYZYZX7;73[WE,A?<;<;875134a^ZVSOKNLJIGGD@;:?@;9@4<^6DMOaX:L54_DQXGNL2`XEL;QF;7CHC:KKB@<;985574543]PRa]`WPIJNNOQSOPSPLvGQBD@;:^Wbbe`VP=225/OIUJ_z|ovvIdaV^`\ZYYYXVVX6bOT0E@PN?Ba`XSHZba]acvukloSFb*;AHJR]Yl9o7eai_f7946514315463634.,,+339;31044-  R "     !!!!  !!* !! 52&'((!$=9''-&,4+.!%!%JQH0CH>L[G9+76:41*,*.-(!%*"3128(%'/!0B,Q0+*#- !!/!%#& !+ #"-'  +#!JLb2)-arZG2$-8% -+2 (ccH##'&33'O5@7"$/ 4 0)4'(%$*-'65 50E&s]#?(=& + ! +"   +)%2 +  +    +&"#+'$(*( +  $7*'  +J61 + + ,* 9 $%   + +  + + :-   + +" %#&" !  + +  + + )hxVYG{%7;2'O$0 C^"-DV4yjVWVPSkxkVVFU\YGCwZYS==Ab_UTCedP<6bQSHKf;# +   "B7]AGgf|RUNE>Pw&/ XG*2 + #  + +(/5B "*$$VSh7_jVmvXNybV[ro_`*(!L.$'(#&%'!*N$ '(("%(0+)0430#!#%-0R\5-%.(! &,)%8.T3;9(2/$+'##$%*,%!-41CG=A8@;272-/60..'??B<<.:ZOHy~ufĵfbpkokl|U^}lIB5V`aXGAFNvk\jf~{uwx~v`i~۫ԗ팙됡Ŧ䡨םϭٽކƺƹ{[\ZD`Db|Y~A8.;6.;-&4>OG=7>_L<7C@:<4b6F+O8sƟkwɪ頧olyO<3BBIB:9903I8,3@AGMLO<;7*-3$9>)*7.#+/B7$?%#(2$DMOWI/*@.41*/:2+.NW;_:NH<3)(263/%/91''-D;;<++0DP'*5:2@1.0!8433)6I[CDK7#.*?-6/1(YGmSaO>$(45&E%04$   %0" 19&$&)994-!"#   ,*+/)-))141/0*++*+,/,.,,,**+,/+*'(/-'.++,1/.0'X+)*)*,)$-++*.)-.*0212/020.-,(+,%'$(+.,,,-)+'++-+(,+,)+*)',,+)$#'*%(&*+-3,212;DLFKTRZUC7-,K-)('L>3/21/.*()++,+*'''/**(%#"$#"" !!!$!  0 /#!!#'$)$.(%%)+#%&,##'**+-./-,+*)')*'*% )).+,-/)-3/.,-,*!/'&()'-.)()*+('#(.+,**)#'+(,0*!"%##!%$%%&&#% ! / $"*&%-!'+ #,)!&"! -&&-*,(&##%%'&(&&'%#& 0,3251-+' #"B?FF^zxjqr|BA3*//..-,)))*),&#B (%-,*)%.21/03BB=;@.&1 %,*561.2,. }}}|~ ~}}~~~}~ ~~~~~~|{yz{ +||{{{|~~}~~}|} ~~~}}~~~~}}~}|~~}|}||{|{ zyyzzzyz{|{|{{{z{{{|{|{ |}||}}~}}|~}|{|||}~|{|}}~}}~}}||}}}|yz{{|{|{|z{zz{{{z{ zz{z{||}}|{z{zz{}|}|}||}}~} +||}~~}~~~}~}|{zyzyz|~|zzyz|}}}~~{{zyzzz{|{|{z{z{z{|{z{|{z{zzyzzyzyyyz{||{{{||}||{|{|{|}~|{zyyyzyyyzyyzyyyz{|~}~~~~~}~}~~}~}||}~}~}}}~~}~~~~}|||{z{zz{{z{|}|{zzzyyzzz{ +|{||{||{z{z{z|}{z{zzzyyzzyyzzyzyzzyyz{z{z{zz{{|{|{|{|}~}{z{z{{||}}}|z{|{|{|||{|}|}|}|}~}~~~~~}~|}~~~~~}~}~}~}}}~~~~~~~~}~~~~~~~~~~~~~~~~}}}~}}~~}||}||}|}|}}|}|}|}~}|}|}~~~}~}~}~}}}~}~}|}}~}|}}|}|}~}~~}~~~}~}|~~~}~}~}~}~~~}|}}~}}~}}}|}| +}|}||}}|}}|}}~} |}|||}}~~}~|}}~}~}}|||}|{|}}|}|}|~}|{|{|{ +|{{||{|||{|{|{|{||{{|}|}|}|}||}}|}|} +ˀ~~}|}~ E ėՀͺ喬ȅؕػʾ̤ׅӣź­ӪȽ鋲ϼƂǡۃ܀˅ڄ󩹌³ݕ苣֧았߅ơښ䐘쨓ݾ׆Ĕ薂沂ׇů錕ҹІŗٔ􈴙Ϙԟƴ۩초ཱུߗϖ鵥̲Ÿƻ܉邚ĐуǕӷ芃ĺľ됌۾ƚ׀͞ȵɡܤ۔͞涼ظҽ寖ܳᡐީأϓĶ짏Ξݖσɛ툞نɮѱϓȳ򃒮喨݆򀀓娹˜򏑍Ķщً筃œԫ㶡ܖ𒏠ϔ䀂񋗱ߛ̵ܸߖ̱񜁃ʨ|κesyfs{nn}xuWIJuƧ׍׋ӦĢ؍ƸԽ˟zUOY_imoeډӗҁϴ®ʀå󃑩Ŭߔ㑊̖­򕫻Ѥ¿شçϫن﹏獶۵伵惊繡̴ľɀӵծ̏򃠉¶ϋ͉ʷߎ񂄛ςͬß죧ߪ۶󑆶Ƕ퀇ұ뉀뜅Ӏ阠Żꀎî􀐗ǼǾ̈Ջѐ݄ʆȖŬǵɾĚæч̜Ǔ҂˷ù݃֙̽˿ɴˀȿӳځ޽ͺՔґՂ°ℲǤۮّŻㄇ򌱘돒ހˏ̎րϰíšՈ؈ƮǢȺŬ͉ʨȮ̿򐆒׽՘ښݱˬ˼؉ƒ܃倍ÞᙍʾҀɕ﷮焊𑟱ļȸи¹͒ގ쵟ޜ¿🼴Ǹ½׬–ϠŤؘٞ%#87:;=?@?988:9AD;:9884;D?>=;;977:9:<9Z::;:::;:976776676887:78;>?=<==>??=>>><>?@??=?@AAABBDEFIIHIJIGB>?==;99;<<>>>=>>???>ACCDBA>>=:;==<;<:;<:<<;=@@>;:<<=>?@>;;<<=>=>?==>=>?ABCGHJE?:;>?A=<===?AAAB@=???=<==>?@BDEB@B@ABB@@A@AA@ACCDCAABBBHEDB@@?B@ABAADCC@CCCDEHGFECDFDD@@A<@DGB@@=:::;=@CBFAf?=;;@FC>m:?`\_`_14+KQLGJENb|@U{s9=8^`756/GI8[Z3JheKPO?:7P[lyR_EFGG[b}U6'INMIO>AG>8-1816689zuRjzUc\_{tkG{kf`Ecu]wizgdt[HjbsqbYa[xweg}[<#=8;a^W/J9Q[K5-VN.NI*XWdZ5}XsumZwwu{xWmMn\Ba*.BU5X:k^udcps=BnrVPgpWyS=<(Dc>dRs:>bbyvW2BWparB]sc{bgz580) >;R#2.") "$=3.,\b-J+''.+$!.1.&6&73*.aST(/3/ %C(21@1 CI(=.(*7)>78B3LH[}Pc/^vcI}fD?40:-&)Fu]1WEciQWd54S?RCRdqtYZxrw`Vm?T.,UG02>7JKPWPpA8XAA+2:38KAB98./,11DTTln{VPwYN^lwivmU@bbLDRO]JjYd\3)>FQT+.'9%!(+,532(&&56V\hdH*)%&" -'?N)Qy^Onez`{m~TRNC=FefYMA?D?LYF>38k=`>C>=77f4Zfdb_Y]_Ie}~TVn`{PSySGRYMD]JxDEPqzLoIuOYoVWQLHPINMT__[dn]fc]bRaTvNt|KS\U|gPrjv{~vsދoe­viftsmfvفz|eĉй|޽˚z~įߑ}}iy~mv~w~}}h}ھwҦy[txuTyuggQc@:aC@yYCKxudS\upTP`{niduȤ}ruv{|q|v_rkhgamwvv~tNQearMqcr]vw_uuyrepgZv^r_slclpqqzuL^*&>!EDHUPE8,4-XH}B<;>;7+699>:740/RpNPNJE6JMLMJKN=BLJ%&'%&&$)*+**,+*,..-0.-1)0.34+L=)=fLgrklo]ryoZ71#*?abPjdh\VM]UD=.-C0\evN|YCn@i5KGfQ\ieSWcawg`UIlUJOOOYUTfBLK@$'/UB643154DA;>BKQeeMep`thlfRF372X`K5LXFA[X=e8I:7>JqhBNPHEB>;LP^EFo}xqJVWU~yLN[sZjd]dSHDkJ^OtV5II_lkjke8XslvIt]scbhSN\yMbt}|O}Mgql}vU`KpVxJIywyfUlKyWeb~bm]ysYTeSufon[EfrIEPztla]~aj|v}FrE79AgYZQxiAF8OLsPNC4iL9JD_L00GEH5%5Q?77;ijr[:?%#''(&'*(-+2'$(&%&**7,!:$$=GJ<)%*'/UV5U=%*;/.14D;GPICA?>?CFEDCB=6>BA@;:;82548:;4`7543A@;73b]`d]d4bcME_]ac133369::<=:5aX]16319955541__^c33899987779=><841][ZSIYC;4]V[3]8;86543c4798:7787876876643c264c\\[\e`2<77524335575697ga`2584ef4`cd3`e57:;8766521211b^YUZaab[_]2<975\V^^Z[XWZYZ[ifbbacc\[ZX[ZVKHCZZZ_[[TOLVTTXTSVU]SYY[WORYRKSUWPQQW]Z]c\YX[agmviyuJCFI\XHdeina^_bed`\[XY[]_[[674`UFOD?=<;;:8433Y]2ZXWRIQKHJC>=<37HJLHU]XWMQ?GM;:>Q];GC<>>;:8547443c_RKZcb_QJJNNPLL{PQQKHPMD?;=7]RZ[d^VED125.LCEHTk|sov|CFgY[b^^_cfg]WX^hLL^a^WTb^cbSD8EMXfhhrjitkEQFFcecdc4cbcjlfddehj4f4_b5554553241+2/142.9#  !$#"#%%%" ) 2   #!  ! " !."!2)())(*G+>G+<5'* "#".'"$##2=A,1"&)I)5:Q]7X'%+;A--3+& $927!.8 %%&/*/&(&B: (&(& $ *&)67&# %++*/!-6d`P$02UoL.&?:#<;!EJ]]Ґ)#'"4"&$*( $!%.*"%! ( !!'(,--#(/8 + 1?%)+    !$    + (/&%&+! '( +3*:)5# + &^N  + 2F!A)& #"!!+ +  +   & +    + " %&1"$$     + +  )88O?ZB??7:1$ )Y2'Y7BsQQFM`rm~]Zt}~rHQIIIF]lIpSSSXZCN^U35RQ=% + +  + +!3@H>EdXH*  *F\bB7;'"6bmzqnW>[S:3HIVBhSD2 0227 "     (7,, + "8B#H~^Rsne}nT>1 .CC'"!% HS&>&'.+*&!$"'$A+,8""0'0,N_*+?*!$)"&%,,+. NER0>*#*7#0!$# '/(+)*0(0*4%H:="#*(382:.'?XBCPIhttx}kmcĿfǶ́{zcfD|cJdf>0'"A0DKVRADF8.=R>:5.,5/)Q##/:P@J)A)'61"&/ '.-")88G?94+SJ=)#,.013-= &',"%" "()0."+.%.'**$%)1% ),!+ :9"# &(2"%8DB;(,+%FC<''+81;883eNGKQMLKKEGLpсzN;;H9=>?7145;:7;B::8;<0.53,C'(D*/XN0)+#,*%@+D;&04 6!2=4&3,9&+%)B65@OE22-@)!?AQ5d8:=.6$"AL=&AJ7:0-9?3&0#!%+''%/#  )#!%1 !'!#'7''&&4#, !' *" !-( %.2?H>8{fjGDRxk\PMkICSVe^7]6#$%/% 5:CB9'.-"8-+6"  % (+I$*("H:lT.PL2)*-#;=SJD2/> )T169[N8M9U-&5;VLE' 4<,$6@2AAjME9*\@1E@VD$#?@?(*=:6(..=I8,>Rh7+C2(',Vcj6J?X5K9VH842=DA2(BN=6G !7* ")83+#DF*6"# %! ,/-./,0/1%"0./0+(,,,,00-+'!+#-((&//.,++,0,4.,12.0,+.,+)&(+,-'*)((-.,,*)+**(20/0../,,*()**$#,+),)*)&%+*+-)(*).(+++)%'*&$)(*&'&(,+,0-,,/49%)'$-.-,*..156321011.)+  }}|}~~~~}}~~~~~~}~~||{{{z{zzyyzyyzz{{{|{{|{|}~~}~~}|}}|}}~}|~~~~~}~~~|}~~}}~~~}|{}||}}}|{|{| {{{zyyyzzz{{|{{|{{{|||{|{{zzz{|{| {{|{{{|||{ +||}}~~~}||~}~~}| {{{||~z|||{| {||}~~~}}|}{z{{||{||{|||{zzz{{{z{z{{|}}|{z{{zz{{|}|}|}|}}~~}||}}~}{zyy{~~||zz|}}}~~~~{{z{|{{|{{{|{z {{{zzzyyyz{|{z{|{|{{||{ |}}}~~~}{{zyzyz{|}~~}|}~~}~}~~}}~~~~}~}}}~~~~~~~}|{z{z{|{| +}||}}}||}|{z {{{||}}|{z{{zz{|{zyzzzyyzyz{z {{{|{zz{}|||}~}{|z{{||}~}||}}}~~}|}}}|{z{zz{z{|{|}{z{| {z{|||{{|||{|}}|}|}|}|}~~~~~~~}~ +~~~~~~~}~}~}}}~~~~ ~~}~~~~~~~~~~}~~}|}}}|}}|}}}|}}}~~}~}}|}|||}||}~}|}}}||}~~~}~}~~~}~~}}~}~~}~~}~~~}~}~}~}|}~}~}}~}~}|~}~}~}~}}~~}|}~}~}|||}}}|}|}|}~}|}}~~}}}~} ~~}}~}~}}|{|}| }|||{|||}}~~}|{|{{{|||{||{|{|{|}|}||}|}}}|||}||}||}}|} ؀~}|} ï͙̄렇ij՚اꖦθƮӾҌҷ⠌僻ӝҋҞנ񌇎զɥֺ̮侥ĝ뺕ƺՄҾ̀Œ͊ޛ䲵̱͌͜Ϻ멵񆍅ЅÁϚۈӭȊ͂τ̭җаͤ垶Ǐքզ宇꿃̜Ƨ찖ի̮ӎԃ׀ʫۨՁķ槌ЏȎȟރ𼭜䗁뾈ޛ̉񞵘첓ﴀ򣮁􋐈ₕޮ᳧ٺް❬մ̎㷅݂ۤԵΎ򻒒ƯڀۀԻ꒝ݯƩڸɞߜ񤡷ߑǩᣡÁñ׃򥫽ӍŹቒǘثȂדԂϞƂˍ|ͰȌŴ̴vե͹zŐft~x~}ժ~waÝŸІ̓ϫۖɿ܁ǷΧwsSSVjp\`rqbͿ£󾩞θӹܗµʫꞀ덈Ҧ󋜩Ǽˇś舖øȽꞎơڻἴʴŀö҆޵Ը¯˽ᩛӳ͙Ţڄȍ۱̷ʀעȂɱ健딈ǻېŬӀÜ粐̏㧹Ϙ˹ᴅ˷׷懛ܺᾧ挟衕̻⇘Źͼȿߠ߃܇灐ϳѱ˞̼ߥό˾ɿ˽¸῞詭ϥäͅ钜韓ۦוϱĚ˧„爁ݞÖ𑰄кŢߠ퀇҆דлȰ餷ںьĭ􍅏Հʐꆀ򇐉ՋԄمӅբɿꀂ ѵµ鄃ﰬ򬹻뚷빈낂Ϸ̿ʀƿەŨĽ݀蘙ǎ-3798=<98;9:999;9;:9=:;@AA?<=865468:9=<8;;:98:<;;;:765558879>?==<<=???@@?>>>=>?BDAAB@@CFIIHILMOS\aYUPJEA?>;qnm9;:<<@?>;<<==<;;:<:9:<;99==<;<<===;==;:;<:<>>==5=;:=AAC?AJKA;>?@BA>>?BB@DBB?@?=;<:<=<:<>@BCA@BDDBA?BACEEABEEB>ABC?>??@AAFIFDCDCBDBA@ACEFCBCBDB?BC?9:;;=BGCECA>:GIC<G9D=[ylL|J{~UbfvNj_UgfBHG>33:.5FJD<37(LJLT`p~d|dOpRnhU\bpqtowj^XM[^smaQfl~{dN`|*Ykln{fgKiC' %& + +=(C4E(;GB:("E=F(&CF_J5.'?8(/"#1+1/-!& # $<97>/;864@?+DpHEJ^IUea.7.F{U74=OEJp}H5y^_6F]zZxa|Vuk~epIHLpkANJjBUMx@cuW5/TfaB?,3@^mG<=GiWA4FewvgF.+V+G:HDIVdH666J_{m\c{qS}VWxp{SiNZL>MclT@eI3GHGPQA6_=-,:,72+&9#70'87! 'H(7R9\i!A  %#8(EKi?nfqjty|ZiL+UZK?:?;F/.G9^FC3P[N/<[AZP067>BUCjJN`PkW}XKl<>RQZXGEK^LHNRgjU^]]ksGzgciw{YTKDST[YX[ZRWJsONefM]ucWnn~{Mgsrogy~}|Ե~y~rzd~k̕|xsـcaz|ݯy|վ|yצڇӹ|Đpʇu|͒лܹ~~pζubR_ȏndoªܵ^mrFPfTaZT_HPgZ|t^SfrIT^|{hɻŷp¸nij{ilkЭ|q^dhny~~^l_jet}Lasrud}nftgj[vqsqihxivhmU3)!!"GEMXIR8.81KB?<:<;929:79643.0HENNKHEdJKLMLIG8IM&&&%&&'$)+*),-/-,0,-04673,R(&*nzLf~qK~u,Uy,*3DUpsgnuUfSOgflO-<9aJocKXBP`^CSSEO[j\f___mm^LVEMptMGDB8KK<:^VHEG$H@-(2EHAV8>e^J7v?HNYQiXjhrgCem{pSc;gnVdinC^wwHp;LS>Zjngd>;NC:H>S}NoY`L_]ZHFeD_pn]yTuD}XhPwzrYq[Rl[grll`JLPPUJzuhxtk[NdEMuttwx{n\SZn]\dwµtagZhZU]fXTaRPQ`ljbQiEj\f^\^\ZRR\\udrhnTLIOPWVMFQUWRLLLO}|nlgcg]gYfiioakfe]fvoufiSrx|iplN\jW^hiewyxlo~D9@?845105)*1<87;2-cikjWlufQSN\[Uj^{hTB6IvyQhnhRh{vS~xXfkh\ja^]vV\jSkx]w`IaEGTm`hlwgxy~phJ58HChoT>5GdMefLp|K^ghbVKoDIRX^Xg((P@QKyHeP\SdmhKq[9P/;CHBGqDjecXlO7Au`mr]LUKZlYWJT4.JT^LJJM%<9LRB=EAVJNY7\a@Z9HVCL59KQ>+HH:?(eQ3?7F2To|vS9DD905BBH.:432C8HCNM'?HA28.SJq:04^LZI??;8>AAO;/[N4GZ<=8 !#$'%&&)'',&',5-02'0*',)#EE 4**#GQC8-B.:%'/d8EJHDC;96CA>9:6:64`8@@6K4226=@<968;:458ca_P9]dee^279<=9723686]]\4<;;951372/2325799::789><:;:732b`b[NFg;42`Z1188364543e6777;7778679867443`33bWX\d_]19>:7456544356798437:986424e49fT38;787645c12`]^a`\]]abbY4_98644aT\UWY[XZ\Zdkccab`_ZVVZZWRKAEUWZ2`[SQS]VTUSTY[`W\YXYEK\VKgZQPU[\c]]`W\V_czooq{{fCxwy{y\Uf}vsh]]^`^dadda__`Z3073aZORB><<9:96332a__\Z]VHOKII>7=9?E;?80BB>=??E=44h_AGEIIPQLGDKQ4@=7556`_[^A3611aZXRTUZZVVY22f]YSQQSPJNPUYLQRLLMTXUNRX]g^WSSPOSPRTWVZ\_]YXRTPNQRQOOQOLJLLGEDE@A@>B>?DG?D<@@>DD79g55:7`>@KS<4MAA>33UW54_TQU135.K;=HS_jq{|@e`\Z]`bfgedb`^\\\[YV[[`ba`^XX^dg?urplc/]aj[kmqnibf46gbcbcafif`ge_[X[de456889963756777:)&  !$%)/5.-*&#! 675  X      !#  E"!"! #$ ))% . B/)# ' (''%, .C6"<%DPMH2;=J-77L,65%52)"(#14,!% *.77+'5*9!1$&##"#':,$(,c. (!1+Ddhlxc_EX/4Lte|K#'*#/ F\Wr*1'$3( %+.$&3+- % ! !&*##!*(,,1)-$- +,?56"-  %/( +    +$# ()!   +   & % +:/   9 DS     #R?#N0&6"  +   +    +-   '  +%&&"%&/&&3    + +  + + +  /J,*0?2:9: %WGR( +"%IN%;52/pMlfUeRxOqhyfsKHOvi?OMe@TKq8]kN1+IOA 4E!*TA,&@_k`A +   #!DEHPxhCJG1C3Ikm|MdHP;,8WeJ3aD#-06;<,C,'# ""&422    +,FLnBpg~pw~BF'7= ,28.*9$-!"$!A*++>0@#1*b(* 3#"'(&##*&#(l7IA70DD**/*" !2'&.0'-91*09<,04.!+2WB;@9QJpneloo¿sôouyq]qnQT[VmK~D]Yy{]ff`zɮZDsUl{ǥzowyvjuµլȈĊкЍեŒ^sW8aH_D;)TK:nJy9?MN>@D8@32>/8VO{sytpWHDD-;E{v灘ū߸̈́ܥq~\gOxBvTj_ditzx_qbolT}yk}lqe|uu΄yu~nzijM)38HN@H+ +'>==610+)%,,&# 6>GGD?=^IJF?:57/A9(ER`4BOUZVI0VWP=O'3>?9>HB.;*0@::+:&=8-2$&.8"*$ +%/(.(',=D8(3&->B( ")( 4,$#!%$'#+(),(((+&.(& #'5" 2! $+0,"6&'/+K<0=<<:!/K5A7*0:;/-.4$:GC+>,/#C`caZ'" *"Z3GZR2TY@19+;;9-&9#2?35F.?&H-E<+=M@K8K171*>4D9;43/ KKI2$TL:H-/:4583WG16UTX]acZKGNhVVYlmrHLdr>FFLNSHCPGGHZ^_{O76-(:6;3.8<78.A'(."%51>,DM.1@--3 (B()##.,+'1).988=FM%PB*'1=*$;A79=;5MK.'0,/;?*&4,A$#!'%$# *2"#," ! '!)" # (+6$(A.=-&&$;%)%"9G(7$!35-$(*9CEE@\EIV|^NPTbQTZk{cQM9#*5&,.&+?2Db`F))-14;!??- )$!+ 674@1U*5KuP9SA& (;:UA07YA$3%!#  0+,';@NXFE?D'$>L<8<1C:JR/Q[;H5DN9<'9O:&@@40]F*;04!JeuhA-%'OG/AF 1"( "%!" /."5>3+," +5("  #! + ..-'0211,*-*O0./+"2.*1..(*,0-*;.+#-+*,-,*))-..&++%,)*)+\*03...-+-+)))*)($!)((-+)('.+**()+,/*-*))!$-*#4+%%'++/,,/(-+24B=?BGK<&JEFIQCD1+7E>:2+,-,*..-..**'#",++))+)$$##""61 "$#&'$!""*-+-,(&$&&()&&(0,,*)&''#%&)+#&($$$)+(&(,/4.*(('')&((*)+,0/++(*&%&&(&&'&$"$$" ! !"%*&! # "#32#$%!#"&&"*+&$&#"(-)"$+)-'$$'&%$#$($$+,0,*1!!_#"<49CO[dn~z{}78,.,.013543210//00,+./43221.-153:886554;2<7:850..-//01341.21.,)(..큃Ł +}~~|}~} ~}~}}~~~~~~~}|{z{zyz{yyz{|{{{z{}~~~~~~~~}~|}||}~}|}~~}}|~~}~}~~~}~}~~~}~|}}||{z{|}}~}}|}|{|{|{z{|{|{{zz{|{ +|{|}|||{{{| }}|~}}~~}}~~~| {{{|||}|||{| +{{|||~~~}~}|{{{|{|{z{z{|{z{}}}|z{z {}}|}}|}|}||~}~}|}~}|zyz yyz|}~~}{{} ~~~}{{z{zyz{| {|{{{|||{{|||{z{z{ +zzzyyyzzyzyz{{|{|{|||{{|{{|||}}~~|{z yyy{zyyyzzzyz{|}}}|}~ ~~~}~~}~}|}~}~~~}}~~~}}}|}}~~~}|}}|{z{z{| {zz{{zz{{z +{{||}}|{z{z{zz|||{zyyzyyyz{zyyyzyyyzzzyz{z{|{|||{|}|}{}}|}}zzz|}}|}|{|}}|{z{z{{z{z {||{|}~}{}{z{|{z|{{||{{|}|}|}|}|}~~~~~~}~ ~~~}~~}~}~~}~~~~~ ~}~~~~~~~~~~~~~~~~}}~}~~}|}}||}}|}~~}}|}|}~~~}~}|}~}~~~}}~}~ }}}~}}~}|}}~}~~~}~}~}|}~}~}||}|}~}||}}}|}|}~~~}}|}}||}}}~~}}~}}}|}}~~}~}|{|}}}||}}|{|}~}}}~}|}|{|||{||{|{|{{|{|{|{|}|}|}}|||}|} |||}}|}|}}}~~؀~}|} E끗8􎖋܁瘻‰گ̡ѯҝǢǿĊҤͯ媪ۑ󋞽ߧဪ㒒ǐڣΒշƨ҃ւ̰ř˨猎ǀ񧚈ɍ•ɣї֪ܹʠӗ楃훁ղ耒‰񍎊ߪٸ̻̣ꅓ폇ю焼ҼȌףӸ֍ùəߚᰱЀҽʘŬҐރɠ璜຀ۉռȝͩĀֹꀁޅìУ쀂ķ̞“ҍʜݘ˪˷̭큫ǀ߃˂˶ꮾƽЈ先ȸکνݶ︵彵腬µֻʐ酉،ߖļ๿̿򄎝򟧆񬀊΍ȅ耀֌ڻꎄ򝉡ާ{澛÷bigтѵvه٧ο󌵦ᯀԢ󀐳ǫ̻ޔ͕䩞蝓¡{urupzZ]ӧӒҒ߈烗ĵԐѱǺǶηꜞ톾̰ç³ݚι龫ܰսܿ̿΢̹Ҁ݁ԲҟԒ΀ƞΩƮƲȹΤʒӽ뾛ύ╅ҤٞÂн𼢥ٿơↃ񢶠ø˹ݰʾ툘̍úϊӂ͋謁ӻʔϕͼеȅͮş򻻼݋ҚνǴĽƺ馡װŋ‘ʯٸܓӛՄܹĄ􈈊ݥƲԷөꇕىˌƱȑ↵䧒ʶōũ߇ͽ񾯫ײ打ư쇂ȫҹη°焕熜򇄄p󄛙䂁而퀈ʨå񂅀̽Ӵ˓ƿĀƻºր۴ŵיـ»歡胇ʛꚚ倄ſ7851/+I)20O*0358;;99=><@>=<<:;98:=<=>>>==>>??>=>@???@@?BBA@AB@=>@?>BEGJOYha]\\`abdbTHA=;::>?@A@@B@?=>@AA>=>?@@@?<;:<;<<=<><==<::9:_;9;;>B?>>;::9::=BDBA?=?>AAEIH@CD==ACBA@@A?=<<<=>@A>=>ABB>><<=?>@BED??BABBEHGGIGDEECBABDCA@A@AAA@CBBDIIDADCFHIKEDFGGGDD@::CHE?>8<>=:>@ABEGDAAFC?@9<8e]9<60`0TT2YKTsb[;[QJ:=[6]`PCUG<6&,469i3@FBE6IDNOzpYYKN\uJ\d\uR!OKG?:>;9AI>:AEHFKzc|fF_Ywoeb@Jf>O;NvbR=-+&%)(?LcrgA/_pwWWq\akia{H;iVoDIwZ\Q0Zv\\f^QU` T[pa}fUQlux1KXPcXjZS=n7/: 3&!@8EV,6=HN(!%$&9"( '18(`(g|KE\DEFz`X`^wa+Pf%!! !!&0#\o4:OI*Z@;;A3TJEkBRZoj{}mXC^H=226bA=*+:@2@e_W6.#.%5..,9;@1+/kBIt(0$&&+ # +,4&(*,'5CE1:2R>1*KK@ZI?08!"L&,*#$0+(554!%1$('! ;!6(6"@;A/2OTUBweH{_/#"/{``_c4ID9PTZVWOOWfM~j\tpNUwICe?6?%+K,pykf>A??N=XU@Ta@^T]r[b_yvdPxWG-N@J=d`ZWL90=+A?AS_rcaNa@46cpGQ@A]Pe5}YRIB0dRPW6:Ki:5220OLNKPIB9JGHLME>9LP$&'%%(+***)+*-,-+-0)-,477038$%.eo}WQgw{qtHnNq)_^LiWfo\rw\q\70.Cje^UrXMe][G7r]aqpqs_ga`HW[XaHH9=BJ@=?]kLGCDD:8@<0--+(3=41=QZX\_\ecda_WG77::8"J`FSRipTA:82M_MHCFECnqsELl]JchyrsNbSk[^j^A`VZ[Ge\Sejlfm_OADV8]c}j~oRCLEAECUNQTq]bIiWnNT^}nphn~UJOfjeNgfeXt]SStP{sbern]`b][OYc`vYXcmsm}XNSa}NMCke`ZY^^\RPJUhbzk^g`TLMJGPSQKLJLNLU^Vynaq{_Wbigtu^hŭj]kKa`rtvZHL\]pdrxgbvj7;?VCA>Tj;?Rss~hee]uLYFuRig^eNHeL\L:f$8;%;M`dd`\ftVw[w?XfO\>\fRdT3=ilPND]?-@Q9[DD=LM>@BCA=77-9=41/GQ=2D5I"%-8QD>Pg8]:;JD[JLbJ1=C;J;.GKI?`F?J "C#!#&*%**)+...*%+*023/2+-J#6/%0))#I:+'Ah:BHJ<@:85486543445563e3689:996565U07::879623c_42]]]M\821`_\1642343d^WWLTc^^a`_dc`_]ca^ZWXZUWO=4TY_53_WQSSSTSWTZ]\^WYV]PAHHLMVTSX[^ZZ[ZYYd[memgclrcQoiye=\z~@mglgcf7deff45db]SZY01/10-8<;:89856541`^ZZRQJNJI@=TEB;3/A02D81?709=8WDBHEEIG:8>B2<>:4382Z^4YT;2^]_`[SUUR]XWb05c^WTPOPQNOQUUTHJUXT^```_\^XVSVUTQUUTXUUWZWVTQTPKNONLLKKOJDEDEG?=CK>>>CBA:A?;;:<9@@>?<<4653A@78AEIJLVc_XS^QMFHS<=:9:::98650:9236dXXLWZWWSPPNMLGCBC:9>77VE=22`Z474P:X023YEc=BM`emz|yA@l[YZZ]]bdb`ac^afgf^`c`\`bde:ffgd`camvuY\TGA>CRgc`_bfjkmiebacba`a^XQO`_cegj59;<93078788'5 $,61-,/34897.&"\ !"" !!"!   !%"  "!##  !" ",(% ",8-)& #+$$& + ,E'$-.EB1/H(+7=&485FM&410,'*%%+/%%,-"$+=&$!!1#%)/ ( 0!7$ +323 2?H-2"*#$$$%8ksq_=ix934/+)#+)($  BHHGLD<6GC=:83.1=5AL_cR95DMPHJY1H6aK/9)J7/7=0?VD.E;%@44-BL,'285 <:/665>9/;::(47G,4#& #*""3B)%# !),'))')(*+)%# -'*;9).#" "-%#$'&F#9@D&)B3,85VC==+4,=04=4%5,34+>71Y?Qc]cK4))04SAg[F6FTA0%,)%&'80)*9.7&7.8+N1:F9;57A@.&'468)X995+C8C@MR9S20:%<909`_RahqoQJPRMKBMVTknPPXbVcSzsVYwsqJ}GHUge_97/MNNKKOPOEDCRfbH+0U-[16644=@B<<;;;8>=,4+#,."550HE"+.341*P?EK0+YH6:27363)'28'7$;<%%@)I17(,- +0%*:6S59>KA+.:?*#0!/<17>8& "&(&"&!"!!702 $'$")$0&!$,.$$%,(5, @%/'$-%;&).))$$ 4M9DLy;YQ-5CE:556,3A=+C:8/6f~L7AFR.CJBFzp^51$#'+$ +$$8@/$4+A +@3#3S1F02;4MBCZD)3=35%%;CD;M*46+  &*&!3 ""70  + #6 "# "" +*'++.++/+*D--()/)*-,/-1/".+++,!*,+(.,*)#(/-,0/,+*.,,+))*(*&)+-/+(('')()(,--.*+)-&##$%*(&)+.++,*))2-95877=F:1DOI;CK7 1CE"8351/0000//-,&*(-,)*%%!$!3!, )3 " "!'*'#*)&&'%+((/.,*)&%&&%&')*+##*+).0110./+)(**(&))(*()*,**)')&$%&%%###%"  !!%   %$/,#"""##'/-($-&%!"'0)*#)*)*'%&%%#" !",.,(2!!@:X8>/,#'4300/0345311010/.//,'$*)-012 }|}~~~~~~~}}~~~~}~~~}}}|{zzyyyz{zzz{z{|||{{{z{z{{~~~~}|}||~}~}~~}|}~}~~|~~~~~|~||}~~~~}|}| }~||{z{||}|}|{|{{|||{{z{|{|{zz{|{{|||{|~|}~~||}}|{||}}}~~}~~|~|{|}~||{|{{|||}}~~~}}~~}||{{{|||{|{ z{{zzyzzz{|{zzz|}}}|z{z{}||}|}||~}|}}~ +}~}}}~}}}|zyzzyyyz|}~~}|zz|}}}~~}{{zyyzz{|{{||{|{|{|{z{{zz{zyxxyyyzyzzyzy z{{|||{z{|{ ||{||{|}}~}|{zyy{zyyyz{ ||}}|}}~}~}}}|||}||}~}~~}}}|}~~}~~~}|}|{{{z{z{|{|{{z{z{zzz{{zzz{{|||{{}}{{zyyzzzyyyz|{{z yyzzyyz|{yz +{z{{z{{{|{z|z|{{}}|{{|}{|||}{|{}}|||{||}|{z{z{z {|}||}}|}||z{| {{{|||{{{||{|}|}|}|}~ +~~~~~~}}~~~~~}~~~~}~~~~~}~~~~}| +}}||}}||}}~}|}|}~}|}~~~}~}~}~}~}|}~~}~~~}~}~} +~}~}~~}}~~}~}|||}|}|}~~~}~} |}}}~~}}}~}||}|}|}~}|}}}~~~}~}|{|}|}}}||}|}|||{|{|{|}~~}~}|{|}|{|{|{{||{{{||{{||{{{|{|}|{{{|{|}|}|||}}}|}|}|}~}|}} ሒʿꄂඛ񁖣͋ǡשƲֽÎ㧗§ځԒͩދ䣞պؓǍۖԘ¸ՖУϥҙɖ֓ڹٔ˶쾌Ω¨ݚ怠ؠրՈРΗℭ񁊙Ɔ腋Ą‡᜶ᑤ餁ײď莚ᶀځԟ߂嘪֊Ἒ˧肕ֽ⋫ےܷԲ˼ﮈŌڇʀЕԴ干ۇ됁߃âю汫ώɿȀƂӁ򆄜Ьȕ͘ӋéֱڇЃ•ȱﻊƦàΏƹ֘ցΫӿ꠽돧ዟʬ땑΁ǪмñѰԞ؞ԁƟ忭Ѳ؃ѓÀv܀‘fzrϓՠ³ѶVLU܃s|ũز͘ξȪ҉Ϳǝ̏땖ϡ|krzyt̥؊㹚򛬲ꏫɋУ󔗇Ê򃔡͵퓜ףℏɼǥѵقשڼհĂ˰Ӈö蕩ҁӼµȢű˶ȾùšíIJ׎ڏ쁜ųͻūòÜݤהʤچ½¹椖ᛟܙîǺȀ戇ڈՓĐ۷گǕΰ̀¸֕æɼ𔦔ͷ·퓋݀ۈ֤ŝ㭀뎆ƀ堠Κ̽Ѻѿ¹ѽľʫ邳߆Հ˨ϴ댔ɭ绣˿拕ʶ֍ɪ杁ӄڭ魾Ɲ˛莦ЩሗܝꀻÙêۜꙫ΁ԗ݂ґ÷Ҳ᱑ƺϝνսи˗汭ꖧʩʘͳ֫􄄆Ǜ)醢녈ٺɷک©Һ낄怳ŲنʽւרҝǼŌ垰끈S:<;75-HNU*,21241+3;;:<;?>?<679657688758779:=??>?A?=;<<==<>===>>=>@?=?@@??@@ABAA?@A=3PR/337<98?@@>>=?==?u>;::99==>=>>=<;=<<<:9:89:::<<<>>??<<;999=CGD?DGFCA=<=>=<<>?BABCCA?==@>=>??==AB@CDGDDDEACDEBDEIGFDBB@AA?>@@?B@@?ADHEILJIGJMNIEC@::9>DE=89<=><<::95AB83[g99bj>;3Z17B74=<92/?Q^7/3935e9:AX>Ax8Bzweae+UUNCE77/.=,)+54Jau?|hTrx~ldHblgPcyyY\~U|jdYmR6OwycpJ]zvtpaM84.gTGT/2''#=Q:-N=)87,-:C`]EM (,T%"LPS'"_[g?>4+?.'8+8;".32+6S=BFA->'UBjJA)1"-U("6'#,9.4162"( 1$&%!!&&%606i_p~FO]ZXHJ12KZV XdgRG>9MMeG;ky.90/*GANjԥŀckEsy|sTPtPJ<\)8=e\XA@2?JKc"4,JL89]u\FIUT7^CGNPqkL4l4!2IOdNG7G\mTLkZYEOLeJ8LLLfJILJxM\SHCzry>L~U\^aVTqgucptKLTSN~RjY{Ѵȵʳvĥv~z}tszmsvkdpghjǍr̗z}|ǀڈΟpiϖ~zҁuưxun|kmgYwRn~x̲c^bf}jwlsǩ~tm|{piw`TpguteW`MOtKi_l]RLzXcgmኍ{ǝy~}|˽ްyg©it|zXp\Xeklpz[vokx|}kp\jhoqcWtzjgnv|{`4-#2>6_`\\`_b`_XM1/07E#$1>BhRLsih_lCpq\]T_09SUJf`suvYJfZNADKHPUygqzk[OW]CvShW;iyvUaUF2IwP*7+=9Mfl_B[n_Eu|Oj=PBC8O=CwhENZ@LeA1GPWDI,M]HI]6DJLJL=:@DCEGEFC@?=:>BA=;=9854>QGF<;GBACD=JG>6=1I-6?=977.3652U55]YX3`][WQ]_XP\85]\WXSOTRPRSTSPO]a^\UZ`\YY\XSYVSPXYNT[URTSRRQSTOMLKKINRTMNMJG?9;?F@;HA?<<::8:89:BDJB>?@985?HFEBBR4e[CB@G94>JCJHQQ^eSScILWO?<4663:96431=>9446^VRUVRSNVRPNMG=BA:778BLIF.-6344aM2X-10R?I9;L_enyuz=>^[aZ[ZZ\]a]_`bkpmilkf][Z\`gegh[VYZ_klF[b`b`fgb_achgflqleljbbljaS=1eZd]e59-'6$$0 $ !-)#( +'-#!9 +2AnďiUB(/%nOEO%(Xܟm *-!'"# 7*E3 /+Lb n=!65*M?J +$8*! 4>e %4! +  $ ,    +&  ('.!   +   #-*%B>D)3'! "-   +9Nv +  +  # <*(=3(.  +   +& +  +   #6''(%%3&6# #    + + `Ygl`+&21.! +-0#&*,>+D!(lu|qUSUK;W9=GZ^T`EdUE0N=\1CNN/1XP81UB$& 4;   55,*26ooesw:TDQ>fC&E361,0L^4A11(#5*4=-.:'+0&*!%*;0 ?0  Z3'QlB>NO_][r]xsXDF!%0*&5/*(55; +'"&5*!"(&#$$%- "&.!;0/ (?*-O!-!$1"$!=,8#" &%223*&2(2+20B.-$4'>5(+Esz8523.'&&*-)%" !@]NOQKE:;H@;646(8; )JMY/55.:CLK@P0%AJd1LE1:2)>K@3'885&&E.,?5$42GE%X6>89=518(%+%)!! ("(#%0" ,)%#)''(+%"$7+$>993:$<8')&+)-&32B@D/&<5.!+C*7?V)19&?(/;!/(+332;';@:(-Ze\V/<B9-)CU3;36E2#DN>73)01'8?1(1:*0B0Q998182561;6/8@570A1I94>87E+5<.5;S-@87L5U`b`ObSZ\\LHYdJtuQP]T\jjRB=BGiV^o~{{|LQeIAB<\OKGHKPQKFDETfzvꈠE2E>L?>+48>A:669;899;4,*/+$.)690F*3:&(*,:8FUA?38R/!($73$G *4%=#B5AE.<;304K973B4.;2?(26>!+,=(%'55D:#<7%79! %(#&+&"#&4#61-)# $%%-< $' $ !&%.#/"$*('"",.%($#6(">'##(dOcc`zz8014=*$%4  %.SYP/,baJON3_@3>51"0I~nA70;132,49(=HA=4C'1/"0)3F389@TCBwT+:C13>%7@?ET #90 &" ,* "73 + +#&$$ ! !,*-.+/!//+B2/.//*-/)%+)0$.-)*.))!0.-)*-/+)( *20,,--.,*-,,+&)-($ +-..-+(%*)($(--.+0)%-(+'&!$%##,),**+/++)++245600*MPBKG@664/B"#3512.-00-///&&(&&$%$*+)##!""#/ $")!" $ "!#"$)'%*))'$++)%*++)*(%'&%'(**'%.0/.(.1.,+-*'*('%+,$',(&*)''&()'%%$$"$&&#%$" "#! %  !#!"%0, !##$"'%-/%$0 !($,('**((#'&%$#!!!$* 1(1!:7@57J[\iurr80G,-0-.,+,/2/014:=:88771...178881../08:%0200/35200243589626402796+)%+(+ˁρ + +~}|}~~~~~~~$~}}}~}}~~~~~|}~~~~~}||}}|{zyz +{|||{{{z{z{z}$~~|}}~~||}|}}||}~}}|~}}|~~}}~}~~}}~~~~|}|}~~~}|||}}|{|} |}}||{{{||{|{| {{|||{{zz{|{|{{||{|{|{|~~!|{||}~~~}}~~~}~}|{|||{|{|~}||{||{|||}}}~~~|}~~}|}||{{||{|{zzz{{zzz{{zyyzzz{|}}}|{{|z +{zzyzz|}}|}|}|}|}}||}}~}~~~}{zyz{|~{{zzz|}}}~~~~{z{|{||{|||{|{||{{||{z{zy xxxyxxyyzyyyzy zzz|||{|{|{|||{|}}~}{{||{ zzzy{zzyyz{ +|||}}|}}}~~~}|}}~~}}}~}~~~~~}}{}~~~}}~~~~~~~~}~ +~~~}}|{z{|}{|{{|||{z||{z{||z{{{|}|{{|{{zyyyzzyyyzzz{|z{zyz {{zzzyyz{}}zzyz {|z{{{||{||{z {}|zzz{{{zzz{z{z{}~}zz{{zz{zz{z{|{z{|{z{||}|{z{z{z{}}{z{|z{|{|{|{{{||{|}|}|}|}~ ~~~~}}}~~~~ +~~~~~}~~}~}~~~~~~~} +~~~~}~}~~~~~~~}}~~~}~}~}|}}||}||~~}|}~}|}|}~~}}}~}~~~}~~~}~}}~}~}|}|} ~~}~~}~}~}~}~}~~~}}}~}~}~~}}~}}}~~}}}~~}~}~}|}|}}}~~}~}|} +|}~~}}}~~ }}}|||}}}|}|}|}~~~~}|}|}}~}|}~}}||}| }}}|}}|}||{{|{{}}~~}|{|}| {|||{|{|{|{{|||{{{|{|{{{|{|}|{{||{|}|}|}|}  ~}|}}ǀ 岶˽􄓚쨗ؒ×ȢŹ΀ּ؂è҄͟ӝǰאЧㄎȪЄﮃ랑njīށӷƝ鰌턭ͫڈ递ڍ㟤ܕخȆȍΦ̴ǥÿӾ߻˂Ǽᦙ͌ث؏ᤀ񀈩罽ځԊ΄ԾҢӝк՞򿵅쌔펹纐ٖ⨲ܹۀق섀ʴͿֻ鱟šШޯΛŁ߃ꀽָҠ۴쀄х煙ʯ²馄ځšγ̈ъΕ⡩ۯ̨釖ᤈΐɩ¿𝛻Ʉ㕠̍ǽҼ󂧈ޏƤ荃џߪűǭt셀撅ۄ֚򰤗艒֌Xanub^ȁwԛȎ봡⠸ZO]⶟ިЪϴƁ瞩䪘ۀ̅ᖖقɨ͹{ޟّ֯Ð꬝𛐂ۅ熖ԥ񌔚¡…ȬصŻ¬ꏑڡ־Ⱥ쁁ԴӴì́¾ǭ̛֨ܺלԯ󃚈Ğʦ˕Ě邜Ҋ־ٻԐ׃łՋ敪跥ãLj߀ͳ燲ȥ뉧𤥄↕ތΦ͍‹ͣۮТΩƈꠞ씁˹ಲ̬ͨûه˥ї𴎇޹Ա͍إӎՔҫªǀ޼ӎЮѨүӊݘռϠ旖Ǖǿ֠џ˺ňč򣳬ݬ퀠Ɠ䁱Ȓ莞ŽʟمѴϟ˴݀႒˾į©ԋ񔄀ɼ;ĻïαƼ싐ƹƴψ㉟灆ٽϻѸЋ3==;:;<<;;789<;3/0/,-643/0559:6675641]3129:9::<BC?>=><:?>@CEB;;8R:=/W543219303.00.;;>JYpGLRJsaPHB<;:::9:;;<>=>`=>><;;<;<===>>@@@AA?=<;:<<;:99:99;;;<;:9;9;;;<=>@AB@@>>?@BDEA=@?>A>>?@DBA@BCBAAABBBGCCA@@@DBFHDCCCA>>=>@AEHIIGKJJA@AD?=>;BA<=99;=58<<<=<6k9BD>AA?6`O\3999;95:87972A@1/2/2485K;\I?BC@V=qGOR2MUIrUs]o}jtZ)D;6*''163/(*0-03`x]Z6|R`SaT}rH|qhQVLLA~~n\hwDbqmowbvx``nZLN5n\mloVK@0=%'4/<,qZTZ2&0OStl\`t}R1wZM>dUZn%KM^3JRPa_MucfN`Np'DzhA~hia[SrOT ExPpKW;HCM`NIRM7uC-,;NaMd6?Z|Ikq\z&>'1=&7'8/0"*)%?*2=B&12+0/'0@II&"9$#$&#&1<*(UAFZYNE"#!2-",&7BGwswfR7I>FP|sJ5.0,'&\aZ03gGI846593D`fm7ecPx>J>UA=OR84067DTQILfOQX*V<-&)F' IF53FQd8=7'$0 *!%F( &>1):5P%N+<226B*B-7=48- %#M('")-(,:)?&52.)(/"''$6! ";%&1-LIDkm^gcs|]`FP4$|h`BESC1Wgin^H3IQ'/HHNKE2)WB1U"3 %"*-/H?7DV:\=-ED;<[I<001.&:024C!6/5&3()W22sG&$# )n,7_gn7BKVekTpsTQA1A@2@GMM5H>H6k=CNE/74\MJZEb<0d2R<-1/4,H#$Y:1tMBRA6RLTlbYH5@#>)oSO<\d\CjtK3@FP\rJNggvRSh{C=y@DGXaSnPw|z\pwvqJRvTYMl\_Wqؾ{phrm{{izd~s|{ckzgjrjɯè}杘wq|awx{s⠜tbnzyefuv[ev{p›aYik翯ghwp|iZkءՏ}e_avttfj{|uLcVFIGMYbZ]llƶy|ƺĀ{Ŕkp|yq_jMY[bikvpd|bi~{{~xhslkitb]ujlswtrT6("DHHOXm`V:,2h}~u;=<:7866[I>BB@A;E@4=4.8AA!94:015:;<7EB2R^Xed_^\XSE19EI'0',ltD|ZRTgULTAi1lb,-73HUW_mFaOm[cI>XPLX;:AXKH=GW_pP@e9[_D8vl|rHY\9KB^`gli^dbWt=bKOFO\dNP\?HO>3E/9:1Q/?9I??GDU5WK@GXCCMNAcI+1U>7IVw`5E3-5).0I,RL]JWL+85N@\<4hn5.F2PEQbQDCQ=GHGCGL;P>!C?"!#C$##"%$&=&@"2+/1-(.&')$'.-7N"'*5;()'8UDFLDOAACKF@EFDA@?=>==:;?<8<::?=ZP6<938===79;5:>573a8:b_c784464:795432577878:>:55525675d]_7;:9:9::9777558;85445433323122dbaad3323429866767886:7520462ccb\XZ]Z:<9:8637776987775d34568;:578@<<917LMF89;:>7A4-@CDGH9@=B8K2H086424436964164[.Q70/[[Z\^XW_41__]]RQVXTTXURWPXd]TKQV`[WYWTXUPQQSVSWTRRQKUWSLMKKILOSVSQPKGEC@<>F;::<>CEIJGP[ZNEABETI>HJJNIKP\kWV_\T[^7630228:1Y;67::9165ZQNPJLGMQVQQH?7:>cDfe:3U.2994_]AF//e2-S7>F@Ughjqpt>9yaZ_a`^]]^YX^ecis~mUPW_^^acd]OLVU_gaSUbbke`ain9qonjg;u|qgcW7\4\;l86Z69=<<9?=;;:758)7$!"+9C&)-(9,": , ! ## !  ! "!" /!'$ QD4*# '.$*!1#"@,+(()"  $5B4+,"!(54 + $.3('(ShRGG3i]igkOF5'+$$l``N2$?$&(2" 9.;C+"5Be#(<&%7500 +-%+*6#"7k2!&3 #"*   + +   +   '-4!    +  + +)$%  @(2%.#$$ 9 :?[     $!-  ! + +  +   + '  + +  ***!((    +  7-7`aNQ77<02D +H>1!$1-2/#?hJ2B"~_ia^wqKDD]k_yOQMCdG3%=4;]a]C4MWP1 #5LZ_fW;)@G%=:3  + + 65..;jhgnHT11H?XA*E&7x1*-04*(3#)45.&)(%%, "  I.  V/N`h7@L\fuWpx<4$!! =;225(F5$G54ABL.3)EG),-2UNM7<0+6LB$'&6+"#" "!''! ! "$&*&$&&# "-:'G* >791=E6#$*%"++(-%*12-0*NC@?;#),=5:D75<'(+308'69 ;8WZWC09)=88*'>F=/,+,##=E!(3.<8(13(B(/*RY6@*->I=(*7)11.?.KO2,--13D/3)#8"1,*F5-..O2eJUU\\PSUZ[OGNuwW^YnF^?Q=H7k;8DngEUxtsw|ad?;<]FEDCCJJKGA?GS^qx}jzjMG@6A05F3?MI8R9%B5(4PuU)5%#+1=.0 EAP?H2$?.B--_c,#8&?;IUG68I289:38B6C&8/*+ .!!#+A(, +,!!& '#!"" P)%,.-./-. /10.0.-.,(('%- 1/,++-.)!,+,+'/*+*)(*2/--,/,/*$)+(&&-*)*.,.+''(-,%&,*.,,1))'*(!'##%&%(1*(+++*)*2+/1.!8%COLHIB?5:7@?;62111---10,.1+(("$'#!"&%&#! #$%!##!  ("*))*+((*,,+-''*,*),*'*%*3/("(*0,)**(*'%%&()'('(('$*)'$%%$#%&'*'&&$! !#!!"%$$!!### #*+& !+$##"%""%,4(',)%*+%+&%'#$ $&(%%" 4#65(.. & d<28>;;===;7:<>,:<:5::7023231M.23424/3^3;=9998:<<:;<>=>@@BDB=<;=??@=i(F;P78VD=<:@X23AK-9J030:J[m~Bq_TRQTSOID@>=>>>;;<<>AA@AB@@?>><:9:;;=?A?@A@>==;:=<;;9:::96899::;<==>;::;;?A???B@>AC FIDCDHHGEC%BA@CD@>???>>>@??@@@A??@?=?@?BCEIHOJA>??CB=:7?A@:778;>@?>=>=;=<@C>>A???<4_524==:;8879975394/544988LOAM=99?UCtvcx^arWTN_uz_;8COOK<=8;2,2973E4q{|dxT|zZVWNnqeIv~sqqD^^GOjZdkxNKsyx`;PfOSgZUN\WnbY_N8";&/$,7Y~\D'4OC>yYcxmplGZI[H1OR:_!K@{(*tThn!>KShv[f@,?A{gjCah #WCX;9Rd(+:AQbjnrSWjYN5OXlkB4:QHawRpnlJ#'E=C9+&A+!0*.+9#(56'>.N0HB8H43.;1@BC#+%,#2!%,EGQN;E"& %(414.6#).o|uB9EVD[Ln\xrdsw-}6(8i\\w]EfYG?F1/:H@[CkRR_i<8>?67?7=0lI15D@HRAD9_YbA5V8080')'GP-,PM^24.%,43MH=#7A&! "(#  40)&E,9+-,/F&*G9@?)8+#J72(&$08(34,)&&+&% ""1)!&$91LN6qiMJ`oeKuJ\.d|sGDJ%F4..7DP;G\V\:ZYmj]fihGEM48BeWRHuu=2="2D62'$BPSVTVJ2/+L*0-0BTK;7:?ly}lbHVJl73D0#%12;?c_R85B77/D'1k?CWJ(9/+% 0'*#'úDTa53Ai 7)#h([ *&OALcVj}wbWbGd68?;2OCY0YDWmj?BJRUJce^PPWop\hn~ce_lR{`KNR}cNmip|nmt\кӽr|lknwmЦqhftg`ʢzzyeǬ駏×ԫaztsqvm|er{ǃb˪Uz}r̟p\\_ى~w_cpk~OTlObhURQ]p[dffjj¼u{stmlrˬɐ}˙y}̱~~…ltrpba`VpnTa{hqldttesxrxjextm~ds]vo42$$&KHWQvYky7;Dvutq::873776;A888684bQTSOLI2YlgHvoT^Ye}SJW]\678P[_SH_]OJGOGA2K\jPfJBH^\slvaGG\b^AoA?HXhBUb[AJ3sve?MW\eiPRBm[ZppX\6j`?qc^vH_QXe`qkg[Rq^Cb]mV}kPLTovsobIA;eJMEwq}pees{vor[]_a[[SO~nb`\`]|crkeX|s}Ynmrqk`\OVXXQRST_pstzms|ebsbpn]VPLEAGLHbemhyodc}ve_pwbjb]\ygxma`{nqhT\Sjpcg^rom~p{\\biNyT]ZwabYji}eeUfHFA::FJIB:C@<<63,=89663JpggXepdZHjNHTWPGDJoWy}IPShhYkctbOuslfpYpqmb~k{V[z{zSPLSJLIHF4tJBHNKqdyzs@??t]vYxec^sp{jbxNY\kcJbRFCDk6.3I!C\FAhI,ERCIXf8T2LCCO`=IO]WV@-WsNLYyay\Wf[<1CthGLHJZ`I1IMG3HPUNK\vDMO0>E2F.5:G#F-HPGAGSU9F=6Sd:L5GJ/K=N>DDBC*P;>8-PC #D*"$#'#&)')*+*--1(*1*)(.,3P"'(*42),GGFCABDE@A><>?>;?;12??952S3?8433=<9796<=B;938:^]48;::747:84255476:8:?A<8334664R807Mi878?>6`\e64e6:8445544333cc12`ba]c32`34558746889798963]]22^[[a15:6?:97764676566998555447875478;>@:<8777544ba_b_ZU\YOX\c962\X\55112365c_[VS`a_^_b477343_USOTXUTXVRX^\[VTSUZWR]^\]\][TSIQRPOJHMPPSXVUWXWVSKSSU\XPTH\w|{Czqlpf[lcfa_]ZYZZXW`bd^TV]YUZPRLO.IFO/2204`YYSIJPNKBJMLMLFE:A;7Z84PDR@5;B@N'C=GNJFE@=;V4:;AY-T/--/./379:99X\R531U[\]]`\2311^^\VXZVUUWTTZKVXZiif]\_^WZWTXSPTRVUUSTQQOR\TNNNKJMOUURQRKFBBGFHH>8AG:?AA:?;;B;;@HHI@62DBB<=CM7ZSB=BKSWMBELOKKKSTPORU62X^Y14Q/029[I8>329=;94\RIOHJEINVKYMA36@:Tb+!*&)%'/RMC'$.#M$60,$ ,*& 7 +I8 >9Hj]n~xg[`|p0=%#,lJ'*9!/A4,22_710N!$&"! "!& +!,%#',)?'.'!$5*$"!)!($)0+1'?4"*;I8Fh_]dWS^m|tLx|°epc[nxw^sj[yYOfPw`m[Sclu]R@iyš~yd}ꞈ·Ь|t傠ӕԆហٽj^dڃۧԶطFG>Q߶f:92J_Ϲـwu`^km~qnm7d0C4DK@DB@NVgirtyㄋ~zrtz޺ïӉp⮎سhotmfgc`]inuzwɁ~y|ulː}jw\tf,&8=JHrPfp17Atxqk540,'*+&()#" #$UNSMHC<1:>55751+5 +(s?386;=;,4=3=T@CQ%EGC84513$ "&'G<'72@G/?B;/4LC@)9A;;>/>+F3$#,*J!&"  $#'!$"*""""*"!.4(<;L0749C%#)+&-2,$11*+'.)(*3@)<&%)54@;@9%'068!@' &-8*=SO:>AH9'*0157') 90.>B)572"9+)>9M#0)2U@>KF=40G:#14G>-<4H-)08<950( ,/,NLWJ??JTUgRT@DGNKKEnsA}wptykTqVQrXAb_?WQGd[OK<]R{vqlnvtzRdYXSbfSKKEJLLIMOQ]nruntxxABT)5]2>VSHB><758;2D;J@H2..((($#F6..30*<4G04S5B489C<00$H.6>-A(''E'-(75-*(6)&:01.!&4'&,*#*)/$'))&#! " .)#"3 ())&##$" '' $$03/+L>:;73 %4<'KY:F;D[A6F6~;AI")-# '30>.9 fA<@I%:((N6&-;HD,CKPGDVn>ED&9?+;%)-8/%FLB<};AH08+$@2CLGC>4E>*PyO$,..+@$ ;*.?UGS,,:B(+.\iX,Q5;)=B(F8E37774E5.G.1 !"$&>&  $ %"!!!  %*+S(%5!0-0001./1/0-+*+,*,..+,-*&-*#)*,+(+.+**'//-/.-.))&)*('*(')-,-)''(+*(.+*-,,+((#')''$$&'()*))+***)#)((-+')"1CHG%DFHEA<>6-8341.-++,-,+/13-(*,)')$&!"*('##  " "! !0(( (  $"! '&"%)"%)(+**(+*+)+,+++,*)+#+,,433++,,(,)()&%&%'(&%%&,'$$$##$%)*'&'#! #!#" #   #$&#"!!!+*%*+&"%&"""&'%'('),("&+("&"#"$*"*# !,"4 19 *#0" =V>AHJEB0*41-00,)(1.0035-4250113998 ?=67;:8..22/**+΁}|}~~~}||}}}~}~~~~}~}|}~~}}|{zyzyz{||{|||{}~~}}||~}||}|}||}}|||}~~|}~|~~}||~}|}}~}}}|~}}}||{|}}|}}{{|{|{{zzz{{|{{z{|{|||{|||{|{ |||}~~~~|}|}~~~~}~~}|~|||}||~{||{|{{{|}|}|{|{|{||{{{|{zz{{zzz{ zzyyzz{z{{zz{|}}|{|{{zz{{zzz{||}}|}|||}}}||}~}|}~}|}}~~~}{zzzyyzzzyzyyzz{{}~~~}{{|} ~~~~~{zz{{{z{ |||{{|||{{{z{z{zyyzy zyyxyz{{yyyz +{||{}|{{|{|{|{{{||}~|{z{{{yzzyz{|}}}~~~~}|~~~}|}~~~~ +~}}~~|~}}}~~~~}}~~~~~}}|{zz{{z{z{z{|{|{z{z yyzyyzzyyz{zyz{{zyz{{{zyyz{z{z{zz||{z{z{z{z{~~{z +{z||{||zz{z{||}}}|{{{zz{{{z{z{{|{z{zyzz{|{|{{{||{|{|{|}|}|}|}~}}~~}~~~~~}~}~}~}~~~~}~~}}}~~}}~}}~~~~~~ +~~~~~}~~~}||}| +}}}||}~}~~}}}~}~}|}~}~}~}}~~}~}~}~}|}}}~}~}}}~}~}~~}}}~}~~}}}~}~}}~~~}~}~}|} |||}}||}}|||}~}|}~~}}}|}|}~}~}}}|||}|}}||} +||{||}}}|}|}|}|||}|}}||{{{|}|} |||{{||{{|{|{|{|||{|{|{|{||{{|{|{|}||}}}|}|}~~݀~~~}|}} ٚزݝ튓ʗГʓøijѿŀ񪁳¹գߦ鑳ёҡѹÈᖬǮō훢Ϋʘ޺ېА쓾£қꛚƮɴѰ櫍԰Ǚù򈄚򆤮탠թ΂݀ř±뵗ۧמзחށфΑžФ쏕֐ղߵﲧן嘢ċθȝڳ䀃ʺӟǣ߃߲Ϻ̳ʍǶ©Ʀƴ᠜͵πЭлϱچܕȌϵЮؚį運ᖥųߕ䑡ԅ݋īґ卍ÀȜ򎓄ξLjԊ盝͹ņ⚛րܩٳ߉ߊ聂ˆͨ͠׺۽ɽؘќΜ̆ȉ⒮Ыԯ–cgئnavQJpvɌ騹Ѿ˲Ϫ̎yəΦׅȀ٫ţÔꚚ̼는凘慘Ӛբᆼ󌦗ㅀ􋢭Ú󋓙֔هﰏœԧñπö􈊐ܝ̚ڱ̿聁̯äخɭٽ愅Ļڟ鿀Ÿ˯㦓ӻͲ³􎆁ʷʿ伹ˀϑç҂ѿ팕˻ŞØù禎Ő聥ſٶ۟ǮٛӼ٢ŷֱݑޛ֞ôȼȵʶ΢ʙЏڲӼμ‚ᒩìãɮȍ菅傍߄ܤٱƤؿӀ֟ށͶ艣;҉ŴȱԤ󃒊ϨײϼȢ𹡔ᶯ펞󖤭뉏鯄ϻ،턏µžɽ׀ɾʾ󴫨ĽщĿƲ˲˻ʵƻ̸֋ˏ¿ӯ埚𡒿鹭ۿ̔󄈇@989<::<==:69>=:;;===;:<::51NIU2430/-YS:L:9:95:89<==>?><>?=;;<;<;=<=??>>?;99::8:9G+3L8S-3& /70<@CGJNPOKJHJNMJB?>>??AA@@>>@@?==<<=>=<=@BA@??><==<<::6dW7;<;:;;<=;::<;;:;==@@A?A@>AACBABBCDAECA@ACBA@>=>>?A@@A@A@A@@B??BAA@@BD@@AABCFHBDEKKJGEEB@AGFDDDBCBDBAA@AACCCFC=;;@CDEA;7@@>@??>>>=BGFD:<=CECIC<<<:967774523410/488:B>PN;H2H2Tkawwf]_iqNQKhK]"MCAEAC>:7425:IB8?Q2$:Na?Z[_DO9>9?nDt2:BMKLNH"(" @<772*&14%&:9$*.*9!AWG1&.24+>FTjNTpisA|ZMjvaQo*10/C=9`F87>.*4*-82")&#&'HILUCBEB4M6A1D49ZTLOP=+4T9_GE&*%IFNI<8CWK:+?6DUI[oknpsZM}=iD]^aSOX]zGHcINaR^jmbii}wǃۯ|rlniɋtrr{sup}pjyqaosȋݑtqr†ojʇ~|ֳͪݵjo˿ݫzyccrŴͳ|SogsYsӷȪhzyrsUrHFOOlOOe@rb[BShlgeſhnhhigemlȲ跑⎕٪ioim{U]hZWXeZZji{{hv}toplhwdxsRz[oj8)$(%HRJUwRtHByj@9p:75335579>44216`|SUNNI?/GKHHHF>AL(%&((('))')+++,.,+)'&*(('()./,*!#!%$%Ij``pBaR]ONXpcTPnPV2DOt`YZqcOQ=`/+ B%RDEMiJWQH|}vGKLZR`Ph{jTTC9[@NNE@<787631/657@8&&;&'%% AGHQS;l;8bfZFIOKXbMDOL_5:9U]UObrMG:=MFKEcZINMDdlVunnsMzhW@TtYr@Q8?YcXNVncS5-EQd[PCo_[BK^eUXXFaVJoSX\SXi\c_Oj]RLINXRRMS[QxrchphE@8KDIttvtutvvnkVaOLHWS|dkLXr`wu_^_Or_zPsJ}{~~WTaofjbmca`b`gr|twm}hqr`zfldWRNNORqk`jqjn|i^||cxil~ZW]Rwex{r`tX{gignS_XpemrkoZ\c_R]qgndSt`~MJgAB@B=8>DB=>@:.2/567<8=buuQSYcaOA@FD@??jdi`[n^W~h}TnWYR~p[tp\v|^MBFGHSPotj}lFQTxnSjt;OrvcmwWWWmc~bVQRYp>rP^=HFb^NA{^rDE15S+0df)XWT@XcN6a[RK8MGHHOI:_Dgl>MK^kOWNzpRFLaEWH^Y]m?C:sO4CBHRG@[`XDA7<<5BcdNaejJG:5HZ=887EE>4KD6?!C)AHE=%%#"$#":%'S'#(0-*''.'($)+.022&6HC?CBFCAA>=;<==9754=<73TcZ56768<=7:98<=><<9486c57;699868662459669=?>;96735h`E3OGFbMh9;8X6L_@NSXa69766543eb_a313`a52b55565677666898467753\Y[YTVVWb3;==;98666467865587735764897538:?><98877522111253`\ZXY\[f4ba1c]3425c[\e43a_[Z^`hca57362]YUTRUUSWUUVZZYVRSPSXVTY]\ZXWUQQOFJNLLLORTVVZVSUSR^ZPLPQNLYgge]Wuwx|xmke[TY_d[XWZZ^_^[abiWJVZbbeXXNKNJMJKYV34`XXTOSNNLIMKIHH91@:^:1>RK?B56A=[5\HBABJGC>6:>B<>>B=LTVQN**.58<=>3\G169TQXY]202310]Z\RTWSRTVWWUSXWXoolkgbhb_TSUSUWVUSTUUSRRRPQVUSPOVRUQSSVQHA?BCJHB::=?BA=5:88;E6>GG==5?<_;NDRKJMSIJD>DKUOJUIGLKS8\WJOa4Z4]0:`F5=<866@;6_XPQMMKHLOITWF]8$    &!%&%    0'  ##$! #" !!: !! ###!"! .A4C@5.2BTA'J-+:NSNT,45-*/,.+)%!%.( ,$1:+0.5%2053,"0 *3)W9)/ #* 3F + '04HsjuesPtY-%."!&2!SBn6!"# ,2'%'0#9<'143H :7" (+;$:" 'U:   $  0'(     +  $   +(.)#-4<4 .%$"()#* :?# +$,     F,-   + +  +  P(-(    '44+! + + +    +  +#(LQyOE5(552. + ++KD29# @E@,.;~alUscd9=FWkORpmtA~ZIciUMl:`i6l\ZRDNQ8i5I#*$-E5^638 + + '8/-)LKM\bjFeiZHxVE?;)):"GjT4$E) 6&5)&)/#+.%M   +3># %LXSfdt[ixs:K$-."!!2TG0565176/W)8- .  !!! %"4 !  .%!(%$#!1&!!#!-! 6 ; .0-37ASE_Wbh{ohk`d_zbstudeipbm]j\|f\Vmd||E:MiNӍ~{z~dȺb~uy{Ȫľ˧ԀâǐͲʰyxïГܱʱͺ̶ɱʼPI8ʷeNB0>W;jzzprUmEt8;6H\48D)IFA'2ZhhguzqpooiloŴٳŸ~ҲcnjmzYfo`agt]`nx}{vçuyvwwUwXi_/8C>MnJmE?sj@8o71,'&*+&'*#! &LwRSHC=1%=;4564.10 )IACH.A5?305GF:2I7>(/@2-,91+-#5.%#+;+52*IHOPBE((,10;R+@+D:/#0D/?$++EUOKE>:HGtzpnYvyN@Q`MWZf[RCAD=\MYh2rN=mpkrox|NGOYQSLYp\[Z]]gs{vzscJF;OcD:9::QJUNCA><=:>/)570,L-;6+9=H<"0.+!9@=?R$4(9#$%+0:G6%*E*BEG}?J~Sxj|GR[k01CF,"*4$(@31)=9%' :6%('&*/,F%H!,  /@OJLGz3=A08=8(**#D3KM0BAJFK"X<& ((, A%+2lL0?AEMB;UZM79213*703(D+%=,?)<+!D>7"44";,F[O6D4,@3)!*<<\S9S[Y7;/,CW92,'+A+4=3#'E5"*1+63& ? "@! ! #"  %0*-41#*&$4%4,*5!'(+-0/,.,.0+(**(*+(-++,)+-+/.-/,-**/*,+*-/30.+)))'*)(*))*,*,*('&'+,+--+,+*(&('!$'&&'')***++())'.-($%&%%,4642.@@@CA;85/*+/2.+++*,.0.118,#)+.-.((# ""#&%,)($!$!! !!!.'"*-"!! !$# (#"'(*)')'')((),+))(,+,::742.20.(()'')((%'(('%''%&*)('&*'('&&)'" $"  "!"!#!,$(##%)#%!"#)$ '!!$#%(( #+&((.*&'%$$"#'#)*#/q4&8-33 $+.$%% ;>;HOZgnnpqx=-<)-.,+.010../0121348=BFD:453...-../-01/1% 3241113430-$.13165543236*0.-}}|}~~~~~||}}|}}~~}|||}}}~ }|}|{{{zz{{zyyzz{{|||{{|{|{||~}~~~~}||}|}}~}||~~|~~~|}}}~~~~}~}|}|}|}}|{|{|}|{|{||{|{{{zz{|{|||{|{|{||}~~~}{|}~}~}~~}}~|}~~|~{|{||{|}||}|{|z{z{|}|{z {{|}}||~~}}||}|}}}||}|}~ }||}~~}}|{{zzyzzz{{|}|}~~}}}~}{{z{zz{|{|{{|{|{|{|{zyzyz{{{z{|}}{|{|{|}}~~~|{zyyyzyz{z{|}|~~~}}}~~~}}}|}|}~}~~}}}~}|}|}}~~~~~}|||{{z{{z{z{z{zzz||}}|zzzyz yzz{zz{zz{z{zz{zyyyz{{{|{z{z|~|z{}|}}|z{|{| }}|}|||}}{z{{{z{z{{||{z{{z{|{|{z{||{|{{|}|}}||}}|}|}~}~~~}~~~~}~}~}~~}~~~~~~}~~}~~}}~~~~~}|}|}}}~}}}~}}}~~~}|}|}~}~}~~}~~~}~}~}~~}}}~}~} ~~~}}}~~~}~~}|||}}}~~}~~}~}~}~~}|}}|}|||}}}|}}|}|}~} ~~~}~}|}}|}|}~}~~~}}~}~}~}|}| +}}}||{{|||}|}|}|}|}|{{|{{{|{|{|||{{{|{|{|}|}|}|}|}}|} 뀂݀~~~}|}} 稭͘ڀƙ̀ҩ«џƲѸʹ߇ꁥŀȻ̊꾝ȸęլ٦鋵【ÞؚٿՕɂ˦ʀ飉ܗʖљٶؚ݋Ѣפ֍Ŏ󑊐˱㇆逇ُᳳ۷ɮێȲԀٗɳۃ深сϳԟ×˗̲ήӟ˲߉žֽа܉ĸڍ긱Ο嘰ʦو耡ʋ¾Ǧ燗ͽĮͲڋ̫뜓Չðþɤ΋ň쯯őБ醳ؿׂႍᕰӣ݁ȥҕƂ¥ϸҕلݥɰ֗ԽƱݬ埠ǭ뛯ɟķǻԶӴȵ劥ݫ⟜ろ€׏ȂޝѢЀاƺ~пpjzzmPLhrckҍtpxݞ뼡}}Ҁ}|қѡijꏛܮʩ彺կ¾ο􋇃Űڂ䑞ϫҘøʶܺ㖚ւĊЀdz͗괾ͽǵλտέǨĉٿɴͧ۶ゎЀѲ˥ᵔº྿⚏쌢﫮Ͻګ͸÷ɱŞĻӮѾ⛛Ҍ燏٩ڂûꃶĸː⤓ĭݩё뼈ɚݙ̮ܑ۸ɽ˾½Ę쯂嘷퇢ṥϘд㪵ēߡǧɩ߅ˀƜ찘☁օϝح€ꀋآċ쳋ûȟ򌑣ɒ튥ڹϯ֋㏦ƟҒˀʌن䙊½ʁ̧톴ɿ鍖뉂∳mºƱԑ팺Dž񀆉섘킉̽̿ǺǼƻֿƲ¶Ʃ¯ü·ށȷۺ́̽˵᰼֔ƑХ876538;<:83a;<989;=83581014.QOP78F8893/3248786688<>?;<;::;:99;9<=<=;;888765`?+V.*+9;Q]8666SN[T@b:?AEC7L1 .5&-3?>>;>>=?>?@?=<;;;<<==@=::gTOA=<<:<<=;:9:;<<=;==?@DCBAAB?=?A@?@I@AB@CHCCB@?@A@>=?A?AA@?ADAABEDBCFHJCEDCBFADDFFDCGIFFCBDGHGECDEDED@CB@@BBCA?=<;A@BCDCA;:d<@CA=<>>GB><<76786367-.4336/518s;72?3]_cH[_nfkfZXVGpIII\'>DDA?=A@BC>(-Y4,03?/00.1G&#'G@L+I@TT,&#"#"&&)%'/35>pduƎyvSDHIAA6DJ')/beuxkbwnWmx[1N`RM3=Hs^[S{aSG8;ecBxP9ahfS\[B640`14>O_DZR]B8H"&"+1/,+/.""1%%5DI;F84$*)&*/.'%(++(!>3+.ASRL02)!.50>,.%7"% 046 .:(" @&8"77&;2!'7GxG>PadFu}tTdef^dx~I<;U*"X|?=O";:347;.7JX>o GTXO~\?_PX !66BBeR8H7.02=OAAWX&>AE50D,"=>4 '78/_8\9L<:4/'?7W"HJUi7TGkGYWT_.2-8F@@2JFPR?CScgxv{gTMTwt<@Sjzyufrmclwpmi_u{c_aystYmhzg|{ix}q^{jqsʼnXdhƝģtʕtcf~ʻvËm~flini}Ţ~Ӣ^erʔjwSlďӢxfeklrxLLea`p^dG~zngMuckldjc]crgżprshbcdeutigŪسϥruطȻkd`leadSRb]vfVk_|[qxoy\zяrsfzhkoUh63!%'KCEV]cPzF>xwxjyo53255656833dUOnUVOK@4*IHGHHD7JJ&&')''((*&(()+---*((')+)'()*+*' " #%$"DqblTQROR[pT}NeTY H_QAfu^=;B8&:##/GK`cIE`NA;55:97201=B?9:!91K38=++"DCUmDB@xfo]\Y:Z8J<51EYUMdXUNO@?ILLTVJVVfkgjukQCaT9]--,+8RNC=cUIDLaBEW\|YLahUwtdk`[M98V[GUV`fy}kw|]]kurXOLINHc~Ofz]Ri_P~ugXmiYTB}~LNOUWb[~exxxomknrrtfly`hnt[L{rb^ic\WKmPWbsjfpqifr^t^iz_c~TUYvtnpeq}|^rofmp`islWirqhU_QsKM\q\jXpihikPc{MdID>@80833?C943-+372U72HQ2A4?.,A?L-.*7W-[>;CJ<:=?"#%" "7$&K$'*-,E%/,&$)/01:0+@8IAAHEFE?>DD=?DCCC?B><=98787653bTYKW]28>:;:58;9A><@D=888556654653a^364548<;g^MHWc8fNH;;:9955668554445::9658>@>;9976533_`0325963_[Z[\a35b11`Z]bfgd]\W\577\[\[^\e4446a\YVWVUQMUZWYZTVRQSRRNUT\ZYVLNVRLD@TRMMMSWXW[\]YRQVX\WURUTRZPTUP[ktliudb`^a]_[YWV_hi7j_]Za[IHHPZ^\UWUONM=RMJUA>BIPLKKJJGCEC@A25$SW=;GAOA:A?;;HG2EEHQ2U,.3123<=992//96ZWQ_41101\\Z\Z[WVYTTVVWSSSRX_ip;eY_`[SQSUTVTQRSQOQPQPLNPXWRXVUSW[SMDE;6DOLLH@;>@<`@R:]7=1:EG=;:9HNI>FCV5OHSXPQPJJA?EEXZGKFPO]`5ZVSQZ_^034:0I/1=<;=@=9eYRKQQKHILEGTK:79aMhJ_EMY>3F5/4\K5233J;BZirx~stxDAKW\cca]`_hba_\`_bb_bckkmmhij`\Z\\]`bab]VY]_a_ehk8ib`AO[Zc_4jXM\^cdceolgc g6683667;:999#*  b(*#!%& +   %'$# 0' 9"  ! "  !#" !  ! ." 7 "%*!5 625$01=AR>940,#?,+I(3%-+)*(/11'(,,'*)>%*,6/0''(22 :62?-- -GC1 17!-$+G5H58 + )/O;!+!&9<(/4/26,&-$(E"0< 4  + )E/_@IGA[bwxq`up?3'/#5t+4D>069A]F1?!##%)(   "0!0-J87#%)""+'("1)3#0;0/,,(0,'-)*.3+H9Cd988VwapjRj_sdhuq\inv]qP}iZepj0@9xĝxgyp\^{z}ȹ߉ɱԸoՁŝ췯ûIGQӹȻ^L-:n٤yfdjfjj=8JHFRED2OR@AR:ibmun|rnuyskppmttoj޼쟵|̍{T_uٲɸdcam~lhp]^rfxl\porzdŸ襻qjlgN_/( >:;NSZHtC:trsjxh/)%&()'''#$EAEdVRG>.%!>82562'5' (NDcH64632:H?[0C3CY*7)28,  51+)/&DLC7:4:@+=.72=?467!$05<+*>-$  *+#0$$"*!)'"1''#*!!*,)(,#')1503::+!M81 3$+(>067-2215".?1%41*%"/*3*3'*"Ea\W\E<,+" 4)&$(M8)F90e76<;>0,GEQ16&#-RE#"%%KML.0<))56.<>4813.!04,9?BERWQ[cHHPUVGzE>=@:Sw~xn}ehRU56A;:cZNMUQI:+.C*@'L/,+47E86-2%!9BHBDMN+$0"',/9Q&'<;D7@8R.Y')9;E@,A/L5U(01189@DE%,#%3##-+"#*7'"!4%:,!"'%;).5 -.."! !"&!  7## 01+))6AB>/ABD<+794.4926*4)!%# 8/#&/1-93%(8 "4>ABD5.<%+.M9o|thqt\D;-9,&'?+7/<"%6A3G"'-"'(%!!.,6 )o/6,I[.86,#B6)!!"%3!2\3=Pe?iMPG5"B'/-(-1!"O/7RpB@G*;:VN47 *D6%: CK61&;A=2(G(95*DG3A845=&)"%?F+)1#"84<&B!L5A<:EGAE!$CKVS-CIG0%<4'?_O5B/:6<;)F7+.*.8+--+ 3 !4 -!%-  !!  s.'*!), -,3.'%)02*("* :'/!3./478#)!.*),)'&'-,,,-.,))+-0-)+.1/+-+,---,0+*)(***'%*-++,(*(')((&**/-+*%&*(%!+)''')*,++,-,*(**+)(&())/'(*(08>94>411/1/1.,,*/23510.20" #)++'('$%%%" '$! %'""! !*" ' #"  "$(&#+()')()'(+(+*()'(((,1680)..,)'(()('&'&$#%%&&$&'++(,*)(*+&$ &$%"*%* !$"!'%"'+%&%$% #"+,!" '$/-((%$(*)/*($(($"!%""*$4#;$2#*-"-' 7+1;Tcjrulmq|=,%(+/.-,/.1///.0/20012689:988/.-3.003/,-3021555410(,-1-3*&/00134841/1 ~~}}|~~~~}|}|~~}||{{|}~}}|}~~}|}}|{{z{|{|||}~}}}| }}}|~~~}~~|}|}}|}|}|{| }}}|}}{{|{||{|{{{zzz{|{z{|||{{{|{|{{{|||~}~~|}}|||}||}}}~~~~~}~~||{{{|||{||}}|{|{} |{{{|}}|{|{|{{{z{{|{zzzyyyz{|}|{z{{{|}~}|}~}}||}|}}}||}|}}}~}}~} ~~}|{|{{zzzy {{zz{{{|}}|}~|{z{|{|{|{|{zyz{{zzz{z{||{{|}{|{||{{||}}~}||{|{||zzzyzzyzz{zz{|}|}~}~ }|||{{}}~||}~}}}~~}~}|}}||{{{z{z{z{z{|{{{|{{zzz{|}|{zyz{{{z{z{z{zz{zzyz{{z{{z{zzz{{z|~{z{|}|{z{z{|~}}|}||{z{{zzz{z{z{z{|{|}}{z{|{|{z|||{|}|}|}|}~}~~~~~}~}~}~}~~~}~}~~~~~~~~~}|}|}~~~}~}~~~~||}}|}}|||}|}~}~}~}~~~}~~~}|}~}~~}~}~}|}~}~~}}|}~}~}~}~}||}}|}|}||}}}||}}|}}|}|}~}|}~}}~~}~}~}|}|}}}||{|}|||}}| {|||}}}|||}|}|||}|{{{|||{|{|{|{|}|{{|{{|{|}|}|}}|}|}~~~Ԁ~~~~}|} 蓣􈛘窋ﲽ†ĶŻžŀ½傉šՈƈDžԀħȾիŧꊙԽ׽ߢ쟊ĥœՁÇϏ߄҅̇ոՓՠ̴ǓҸƋהİУǶԐľЁүȑ눁ޘ֤һÖݙǤȵۢۙף嗏Ҩѽ䕧俬ɀ‡֖廫䚡ɎЃģښ䁘ۃ°Ё❒ʽǁαɀ刔Ƨȫ丗ؤ²棂ӎ㎣ȝ虿Ֆȿ⧝֥ٻƹ՗𝹖֌é酼ܾӰ݅ྉ燗ゅӱߊろ퀳™ɓ˩տ鱤쟀ҽz᳔eq\dTUGvknYg{rƻʆq|y{kܢǻ煟Ƭˍÿő¸ƺ󀄄򀒙ƈαĀўʦ̽䪳쑲Ǣꅒ 䔌ܓljʗہȀЌӇ󁇄ꊅϿޱȩػ킏Ƚ̽Ѻƻ˻ũѿ˵݁í腩ߡфōۤ鳎ʮξޱ҄݁۹Ãӹ˱쐌уį܀Ͱ⤔˽ȻіÜەľ퉃﹚Ҭ怇Ỉڠͷː󒋇Œ՜ԾȄùؙ֫Ɉݏȃ׾֑Ҕ܊ݾí܀֠܃ƧƇƱԃιퟦӝܒ솶٘򮐚߹琙®˘ܤ҇ݜ˲Ȝαŷ˸ۨλ냎灁ߕ薳čŲ؊ﬞÖʍ߭əȀ勇􇆀þžǹȿּľ˽׺ܿгΙȶʼn󄧝݀õ׿־˦濩ꄇ톪ϾѪƼ򃅆:4456656;;;:9::998j5hd`ca_^a^f;884YZ]VBTS58/AJUKOP,32*.15986V99877:9789::75654]\D6O4=E0:<:9;>ABB@>>>@CIABBEFGIF>6//5@ILKJLNQSROMLJHJLLLIFDB@A@?>>>=#>=<;:998::;<;:966a8>@<;<;>@?;:::;<;=>A>@A???>@?=@ADDBB@@>>@>>=?@?ACBAAAGNF>BDDIGGGJKKJFHJGEFGGDDCEEBABAHMHIHDD@A@@@B@===<=??=?@AB@:;@BCE>===@BE?;ad9:GRNEDA?9542;C>=;:872^78866875663Zd=.0-ihyJq`dQUB6K5\GQclIf$8?GEE;3:;=85@;59HD;~q{wfVbVVYr~gK[@ggujbfKb{~NnP_gwdbQmjcaKZ`pe@0!)-771S1c\Qdpof>$5EA@*/I^`o}ac_W[zMcM',.Q=`8sM}[mviSvqjlYUfzvhSP_|RnlcwH'0517(55 =*&05sgHbZF\aeGPE19cVNdI]bW3W@O@URWyD+!&*/)&&"$#$! &(':D0/C)%!)(%+383#%'-#4KI>9N.3(;=Q4,-)#!'2,)4 +;! + 4-!OClyvGA=dmePBa^fGE@94/462/6EMN?>F?;CQNP51.N,Bb=F[>Hp~jNiZLITgeb}fnuxŭ`hxg^hmuhy^ophwƀusfxz~}njuikcuͱqӣzizmvxx֮fwmsfd`vw}ėUyizsjzͲvodGaԨµgoqolqstCLQJFVdMYnMJNA`JsiegkhqnptukmsttppmmhjbdrnloǷ~twsk~|~]^_ckzTbcXf_cT^v\ckrysmzftsr~÷wgzrUr`Xg7(%'LIHacROTC>owkrs75145588*)14aX_QQID9.0MIGGHF8J$$&))(((+*)*)(+,,+(''()))(')()(#"!@?$##F=nSlJFABMOiNXZJtGe7HRh=pmi=RJ_EU:G:JK_Oz=FBB\hTBqCCslZOXMP^e4b:;R[EYJ42-*17///03AL?"2>K4K?#&.'HZr@B>}nnkqP=N=XUA4DROCaW\K?<>BFBN_RXV_i[bf_Ut\R=lNc>Nu_QJPE[hXh:OII?sotWqId@hEW8ol\_`WA@=1-29C858ZUXVNp@FF~WXP{_nGiq\iRI^emLIzsgfTmWQO}gNRX_XSNPSL[U}y|yp|^[o{qcW}vgignduvcoRXEDDEHMgOS]xe}xatztkoi_`bg}eiauisbZ~~wtuRmSb[b`mkkq~yardvwenWy_`]hyrkikbkkizicsulZ^^Ush}V`T^N{[alnesJYTUkXB>@8:50154,8;97D@_;xLZLtoaZ`ysYTVzOhOLHKPLMRNZruec`SBMqzs~`b];|DncvgwUzR{SOyf}cSTp[IOMu9;?DFTA>1:IA.N+5LTQE=?OHDG*6P.dEHA9C4:f4A7)EV35:BL/5(AB_N5P?/VS>h>@1896I@4.)SDA\@LF=*6BCBOLPE=DD8:C<@D:!!" ">$)((%-,H>00)'!(%6;5)X>C52K9KJ@@GC?@BFEAA><;:>;9995a^^ZUTTa69x;=:767?HCACFC<<:76663532224455:6icT7KHD=U79]?<2I76;M:h]kOWK<><:I;b@P4;854320]Y\233532353787757866748>:6533442\TW]g<88>;:97665456854554364778;:58>@>8884366`c\`24358531]ZW862a`00^^]`:;7ea\WWc6[^]Xbb43451^\YVUWRPPSTY^VUTLKMNJTUWZVQOJQSQJCLVSNQRSX[Y]bd\TSXW[YUS[[RROMSRXXXZc]bb[]WSUW_`_eeej`WOM>S.GXVUXZY\XWPHHFMKXQ?HMA@73>CCID@=9;:>SUSC@7K=;B919<>813557A?:NB;A33R-:5698;::*9:6860][][02./ZYTZ[][YYVTSWXWUUTSZ]bdaVU[]UVWSQQQOPQNMMOLFJPOPRWRV[VSLKEGVKA>?IE9Y17?];;9;:CHIHCWKNOSA>AAUSP[^RY^MFHGLJJcVRQTW`^XRRRTTZ3488:1SPU/>;<>@>8^ULRQSLHMFBKPA`6dITtTeJV\N`43Y\WN@/43C>>[ktw{vvxCANWX]cdcb`a`bdgc^`_]^^``cfgedaa]X\^aee`]UPdb_^dggf`gga\N\Zadf]XW[^dedklnnjfce666554655 )10//1.--.*,$&)&% !'&   !!  !..  !% 0"&!$#! !" "13&#&$( +:7E#>69P/0$'/(.3:);&(,+1.&-,/'%,&#(9$ #$",+%"!7<;3*6.-:&!-CGJ@6(+5/9  ""%2&?3jll^LX`fV5% !D,[VJ_lhe/%1-,!'($#%? "  -)5( %'0&3!U",66)B,$*F%'6   +. +&#% +  +   + +   + +   $ #( +"$**02$ #85?B9:80:CPŽwiUHQN<9<9: &+ % +KP960$,-*%(4.0&!%(37%/= &! + + &?>G|w<]GLzngaThjFA$#*C-IY/"%2(G]W.("930%'&, !,?%AS*!)')  + &-&%").%#2 )!'5;1$()##'5:0;F6GTfyS\gw{j_^em}apNodti^gccRelkk}h^_m^ZHVoͬhǢxq]mclon{{֬˷ۧˑRܕfwȿϥ̏ͷhӼɷJ>0Kխ¦ǿmqqnhlqp;??<;EP8:A-()%CApiiqyw}{}||wvrwkhrsqvžzmkmePXe]Q\aagnyXhk`nglZb{en|vxϳqwUrYP]/ @?BYYGCJA''DB9/8++5<0"$->)5,  "-,'0)+ &"(%.(+$!&+#(4+.,28/0540<4.#>,<'E+E6+'.'3?09,'*";<>0C(7#@()UaY]]C%" $20"0@).@)&(:C589@62C-MQ/.*d?!(&NSI/-D%OS29#>=1;+)467('HIDC8N8<:]K;@CIGsLDED>FRd]D{PiAI7:<@DH]CHSjWlwt^rxthjd[]][X95/:2[2NPVVP.7ilfqpidX],4 1/.+PX@0364B2,&94$/JQ=PYC084"*)J)-="7.5W70L@*8TRFM:6$D4.&&(LEE2<7+.&,F$!!46*"@(*%!1&-";()&490#1-$!!#!'3#"$ %$"*"'E?5//9&.7={Q*!2121M&&+0=2: .1*#14O@(D5%E>.T,1'.-*:9)!E:8WA4//!(8141$   + ( 0%&/$+##" 0.-,+''(.!#"Z43,))%"/2"%.$$%. 109-2-(&($'.&,)))%(+0.0*-,)&-/-,-/41-*'.*,-*/-+*))(*((')*-0*))%$$%#)+,,+''%))&$ &*)'))(*,*+/1-*)*(+*(&*-*+(',*-,+,0-10--*),+//.1003.+'%$!+*))*)+()&!"#"-'#)(& #!%"('('''$(()((('))(+*('(),-110*)*,)'%%&%%$&% "&$&'+(),('$#!"*$" (+ "!!)"#$(''$**$(+%#%$'%$1('&(*.,(%%&%&(&$'+($('($!%# $& /4%++7$-/%+/*,*&"!"275Tdlpspnq|?.()*,../1///1374011/>1455411.+,+.121/))30/.3543/330-%.,023/,,-.132679:62/. ~с~}}~}|}~~~~|}~}~~}}||}}}||~~}{zyz{|{||}~~}|}|}~~~~~~~~|}|{|}}|}||{||{|}|||}|{|{|{{{zzz{||{{{zzz{|||{||{|{|}}~~~}~}~}|}}}~ ~|}||{|{|{|||}}||{{{|{|||{{{zzz{zyyzzz{}|{z {||}}}|}~}}|}|}}}||}|||}}}~}~}{zyzz{{z{||}~|{z{|{|{|{zzzyyyz|{z{|||{||}|{ +||{|||}~|{zz{|zzyzzzyyz{{z{{{||}~}~}|{|{{{}~|||~~}}}~}~}~}|{z{z{z{|{z{ ||{{z{|||{{z{z{z{{z{zzz{|zz{{zzz{zzz{{{z{|{z{z|{z|}}|z{|}|{z {{{z{||}|||{z{|{|{{||{|}|}|}|}~ +}}~~~}~~~~~~~~~}~~}~}}}~~~}~ }~~~}}}~}~~~~}~}~~~~~~~~~}}}~~}~}|}|}~~~}}~}~} ~~~}|~}}~}|}~}|}~}~}~}~}~}}~}~~}~}|}~}~}|}}}~}~}~ }}~~}}~}}~}}~}|} +||}}||}}}~}|}}|}~}|}|}|}|}}~}~ }~~}~}}}~}|}|}||}|}|}| {{|{||{{||}|}|}|{|{|{|{|{|{|{|{|{|}|}|}~~ +ڀƀ~~~}|}̀ ׃悋݈ɪ풟ڵĹ¾ÿͯӀº텒힗ڌᝏ‚ˉŘ瑫溁ϥّ۾׉򑚆δיĻÞ򂻡彀ޝ峌ۄ臏ʉ艷҉˩ʼnЖֽ¢֏ݝ̷϶еЏ޻ƅ饚Ѕя«ێڴÂЁ耛żҰʼɈ֤񩺄ԌȻ硴ɁɹȗɪέȌ݁Ѯ߾茊Ԙǻɐ׀ģԔ橼Ӆ̀ô脂ľ߆Ѹų̪Ě٘öԔ󁘇񌲎ιȖƇ壎Ռ▶ƝȞ݊荙񕪬ĿǶ÷ŷֵȅ왲ܫɔ̺ҠӨŽ޽хʚڕµ잒؞ۃٸ핾κȇƼŁՁ񣣡񊐺ӡ̹Z[XjboXiupWv랣loӼԳ褆Θē~~aiŨƓȏط䊱޻񇃃ȷʀƥ⋉ٻ檶ɞˣӋւDŽЀ̷κۮ۝ȴ巇遁״Ϋ齮܋ޑ±ɘŁنØݶ덻̊ȌћƟ쩎烏ͭ޴ˣּꉉݾܻӂ̈́ֆநĴҹك̩ɋ뭥ݤހԩ皳ԇ寅ɘ紇ҳҾæꀆՃۏݓۀ՞݊Ʒя°˨ѽǫیᐑ骭񔠎Оʫ􆻒ȁŌրׇޓŭں̿Ϝޓëȩ֯ٓ鉤Ğܨսȷב׏˼劙ٴ儙ШȫÒ۩ñۚـ􉍇̽ɽʻɽij͹ܾîƤǰܦȻ؀ŹɿȾƼÿñָᄭʀԀՐ٤ۀTYf9:97;>@=85665fd]ee]]gg^[X]WV5fb3_KR1366[G00UV./0+HR.142/-1445548;7667:<663\SLC&,:]8=>??<<:?>?A@A@BABCEGJI7%4I9<8=GQUUQMHGDDFINKIHGHIG@?=;>=;::888:;=<3OQULGE@@>=;;>AA?<;;;><<>?>CE@?@@?BBBAACEDD@??BCAFIB@>=<>@?ABCGA@AEDA@=??@DEFHKLMKNNKHHFGEFFDEEJGEEBBEKFD@???>==?>>A??>?=:?=>@HFA?;=AFF@6QSc7=FDECA><75]2@F69559]ai9;;:9:<163:6,Z`-WooR^*AxSI;833%10b_TXuaM*%?J]6Q0YkYSa}^ofv{XDe<6-ALGIOqKw{xh^taf_viVjVRMT^fsjLSt[&%'-:*S.;)$?K"AХDOzeX=8;,5XLhH318>,3=#7A/$4WD? /-(JeljIzaanGYR|Yt9}W--%O5S4;@+6;BOaJDZ)B80H5266UBR}dDYH;>-4A3E@ZR|}JY(V].($#L'",+,&$5G-K)!#)(0.[M-"'#+(8MAFF)4)9L,)2/&/2."0'34$ "!!4<=A;?9C1tbS5IYnrxz@?zAWsdLWR~b]ma5L513.)%*: ?YaobTUi~PkGbfs\v|NEpow?uhutohOaG9_a9F7G/RQKF*>'._YTg;H(%%#$>,,-&#!*%,PX|g=8ApUJY^r_F@D**0 )JY08:@/0XQ4WcFioKG[*4b:?74S6CFJNRJLPPF]bZ\U`ZVOF>C]WCXabBLgNCnc?@>+=W;9-%1>ATWNMutSEf;_wnfyj}f|trb]qi֝r{wqs_qtkgtwӶ͹[b`|pygn듑ndY/NSֳƁwzqwq߱_]mmuonw@DOPUKQJSO6h[fgXFgtxrSIFBFLTNdD?Ms]41&4;=;8A;;5F'$(A;,Y9#:1,BKj7?0+5238HA49?HAA__j_[fR~HHkKIbP[vYLXHwUJW_OrLc>7KUWKyd}AHJAJPpdZSMNLVRTSXXJLJTwzmevFG~yh\detc]CRum[Pejba\oO[goCYdXNfhN`21%0Y<@=3\d;Y(oQ0IQFKqHOWJaea3WvjTz\wSHXk{}L}jRBbnXV@[>=EA,,-.c`HA38;D=DDG.9Q3!A^,EKTIPIDNWH:>P?KGM2D\BZ;L0R@L9$!$ "%">D@').-)F+1)(*%B-''0D6K7U6NJ=?AB:AGFC=B?;B9?>98841ab]WPX4=>:879889FCAEJE:;8665326863`a9BA6e@GC1CLWUP^I<>G?6;@CO<_N>4AAOIJ[Af[`W49:75222^\\2333124659564788:6888<965432_2]X^bd=E@=<;96886567443553563163367798;=@=;]33c5:3[Xd\5632431\_`1;531c1_`aba5he\^^_bbdcc_fg41c_ZVSTTMMRURV[RTQJMDLRSV_TORRJPYTLJTNQJ[VSVVZafg`ZUSWWXSQ\WOMNQOLLJGRXU[]^XXVZcab\[_Zb[N=MFL[U[VTTUYQ\ZURJTH?HNX_Y^c9859:9=8:BKKF>IUT03<;9:;999;:861010/01/0./Z[ZZ_^][TUYZ[XYZWWZZ^_\Y[\YXUVUSTSQOPOPOIKOSQLNUZPTVVVYXRNLMPOKIQQOLLHKKGGHMQTSTUVYaZPRRRHGFPURW\]V6VMLIHGIa4YYZVWXTUTY\VQa3234`VMKS.=:>>A<8YNKNUPKIIEBB?_ccLWURY5jGP:>ZccdT,33@:GXehjw|~B7@TUOYca_]aa__aeb\Z\[_`c`]^egfga][_]adcba]eb`__bdghgiok`[ba__afd^Ycfbbcafihiegk7657ndd\=*+.00.32/.45--+-(&-,* $!$# %" (1  !  e"#$!""$  " " !$!  "  )*/ $%)0 .. 2;=18$FN7* !6.*(*LB* 4@F9*.'%'$#';$6&'':,#)IB)6,)7601%.-.APL?_n!9* 14.=&6"+4HUyR14ANI)*(&'XVUZv\J(8H)8"27',$!!#  + A2*$+/$-C$&"!*#',/& -  + +E3 +%  + 0'     + '!     +  #(#&  )(2#*>& ?@:=@Y{tFV=eot^||NGonr=p`rle_Ha9@H3]YH.N9UE8q^IG%'F,+U^\OE3AGGJJJ<54VVWYC9@LK;/A + $,"!(7+#$%?@?%") 7=&+-962/+KC8*!M/  + + Bed0'8fQP^_x[6$  &  %!9T<)KK1r"&$ &% ! "!@4,9H"5BY= "!"#2(  &)!="84.'6-FFJKlyi{y\m]p|yh[Vie͕z}y{~wgfboaaptr}R}^|{}n]Uyyrygmy|жϪ舀Ѿį̹ՊyD24՜”Ʒ֍αƱ󻪢γ][\ضfanosmjq;1 &2)BGNbkx|z||zvowmsͮu`~V^^acbkyRUdrwkjiwgkzԊjhиozeqRxIP/&!@?D`0(>9Xwusslp71)&($&*+""%(TPjoO@76-)9<2144/$/ !$),%+>&3H@;'7<:@9J65208(3#.*%'"1@" -?2B$8(/2.#7BII5-*$&'1-?,&3KZC  %*&++&++"'+7$@0("'-'+01.),()F''BA87F-#%0;.&(,F4<'82,@$5&?KB$ &(7&V[[bR0<"1()) *)H*@1-7;5<4/8R37M`B)0%0G&1>EP;<:!=aJ;FQOE<]oG=9BPF|Dk=DFKN?pk\KCj9br:`YcUGDmvfiK]36AvhjWjQh8y6MILP^cjjmu`[[]^dkf]]UrghrvyC7860361h',Q^acjsy|w<+#($).,../I354/,..111/-.35541/-/.//012/420.-036545850-110/153/,1100214578413600-~~~}}|~ ~}~~~}}}||}~|}|}|{z{z{|{ |{|{}~~~~}|}| }~~~~}~~}~~~~|}|{|}||}}|}|{{||{|{{zzz{ +zz{{z{{{zz{|{|||{|{|||}~~}|~~}~~~ ~~~~~~|{|{{|{z|{||}}|{{{| {{{zxyyzz{zz{z{{{zyyyzz{zz{|}}|}|{z {}|}}}|}~}}||}|}}}||}||}}}~~}{yzzyzyz{}~|{{z{zz{||{{{|{|{|{{|{|{zzzyyyz|z yyz||}}|||}|}||}}}||{|}~~|{zzz|z{z{|||}~}~}~~}~}|{z{}~}}~~}~}}||}}|}}}|||{{|{z{z{z{z{|{|{z{{|{z{{{z{z{zyzz{z +|{z{|{||~|z{|z{{{z{z{||{z{|}|{z {{zz{|{||z{||{|{|{z{||{|{|}|}|}|}~}~~~}~~~~~}~}~~}}}~~}~~}~~}~}~~~~~}~~} ~~~~~~~~~~~~~ +~~}}}~~~}||}|}|}~~~}}~}~} ~~~}|~}~~}|}~}~}~}~}}|}~}~}~}~}||~}~}~~}|}~}~~}~}~}|}|}|}}||}||}~}|}~~~}~}~} ~~}~~}}}|||}|}}}|}}|}|{{||}|{||}|}|}}|}|}|{|{||{|{|{|{|}|}|}|}~~􀂁~~~}|}̀ 섎ͽ慔ォՃޣ`ƿ醜¿ߖ媏׭سɕ۷ЮɷˇǫᜯʸзɖȇҁનͶۯֈً݀ȴ٩ŖӐ໖āѕ͖č󕟡񎦸я֏þżƲǥ絢ƀߨȮǫރԖق؊Ҥ򐓆ۋ̵ꇡ񪽘ꊻƒäټ攂؜䁒񈣣ʝŒӻͮˊ܉̤⃁䴍晜´󈎷ǀߔɾ۱ތ硰׻ŰɬȣǾ֍⋪ᘡͷ
ΟľɭΖϟ亞׆׶ϒύմ΍޽ꅇ͵烆ޟаЈޚÑ񡱔޳ӏФƀӾֳ熣īλկΛӣ櫲ڛΪؤ܉跠֒}ǵWY~jje_݌ʱ|ǴǾŠǔy|{zfPjǶɾԓ֗ýר񍕲ʶз򄤫׻Ⱥ彺쥱͛ڀɽ뗇²ǁ㮈ẑ鑣§з뉣𚖭崰౻դֳߖნᜠաʎ姫΂ѽ܂ո̧Ʋֹ۲Ɏ߮ȞüՁگ҈рƼčڤȪ؂ꄖЧ̹޻ظϼܧžʽկªًӦ̕ӂղ˫񅀄Ǵ˜ۇ擀ó䏏ꗉҀʻԴྗ֙ѳDZڐو̊ݝ쇉ͬݐğ͓쫤¯ص͍Ƚ̵󆉉և˺ڲ̯ϮǕǵ톏쀇偁¿Ķûƀ¾Ͻƹ¸ڷ❝ؕ󓨗ֶ艕󁂀Ļÿµ݀ٴπĪξ醣𠙘Հ\\Xcl7n>D=>??:976emnkfhjia_b^V[ZWXag]]56958:9986:884-/10,@<?=9;9:@BB@@A@AA?>=?AAABBAACCDGKI?1%&-6?HPRRMIHGFBFHIIHHFGGGBBB>::<;<96642441KFJQ2=A@>>>=<<<>=;:9::<=>?@@CA>ABCCB@@??@ACBAA@BBB@ADB>?>=>>>?>A>>>?A@>@BEBBACJGB>==<>>??CFGKLMLJIIGFEDCHGEEFGFDFLJB??>>=>??@A@ABEB?=CA@?A91/=@:?==;2:;;?69aDQ:=B-(P>(Dh[!krHLMG:hE?F>D2>7WtmyhXq;Ttsza|]vNqB{v~uj}ml1Yg@[G|F.,,(3Q!5#4/S=FUu}oukE/5MA)BG.&f]mXTEJR[9KQnHL7F_OQmPKcQhE`m_Pwcczi|[fkXabKZdaX&K)03&(8O)/+'%&#h\^Ll`h[),*6[N-*;-<$C<(C=+%$71/%)81!=@)'463/3Q?4K.,#!"%'+8JD.139"'&8.2407! "*fj`xkiO^YP~uXZpnQ]PTnerBJOhcDb63-7f4^HG7,elb04ED*8Q*=>7(=OK@a4\)DOuqjPVH~X.-'#$#'UR4*12"+, +9 ?; *,*EO1 %*"#\CITUG@(6/'0B.,+&2+"3"5#$ .$=05""?/6X~mHhE>Znrqdba~QOsDLcIQqyWuRgz|gY`X1;2++0Azhnc=BJKCSaaK\Vj`u=Ah__CL`lfMWl?+,@V\7,FUKJa^54O9?L.3"$G\ke]`ZMGJH@@7aYĹ@BNO3H5/)5!#$(' 6C=<5LQ6-.;-@DE:9AE6cICV3YRPMBA7D31[KiWG> ,+)$ +8,-1,%"'QZf=56JDOR_s]t:9A5Q;(2:-RJKN))JEIEENLBVQ>;yTE<54IE2ITQEC@@mtDaKWeepleC[U_naAnlbFYM@e;Fi^nPT\VUl\bdeWIH<9M16CNBZ4:I8HLgAU8173deE1BO:& (DPJ6I@F@)6IASK64=6=;P>M#$&!$!>=<:996478567533323698465438:89<><=;;8335:8`XW1266_/5211224233bc2_a[Yb4dd`^[_b]_ac``454ddba\XUQPNNLSVUTTTSMNRCCLT^^UUTQNPZPJOWPOLUTST[[]cdc^XVXTRRQQQMJMHEHHBSWY]``][a^_a`b___Z[VMOTQJMNPNROMWU\ZUY_idOSMLYWRdcURO`TY\WZWSSLGCNTXHFRBC@8035`R00QHHCO@:LLP/252/257999874331222110///[X/0/1`Z[2YVXYX[^]^_\`]_YWTVSTTQPQPPMJKRSRSTNRUWVRXTUOMJKLLKMLONMMIPVUTSTRNLPQORJLFKMGISTOVW34][KKAFGI[:a`VVSRWRTVRROWRX7^ML>QW.6=??@>4PJPUSLGDFA@F:j75e^WOhkTH9F1`3;^,23>1Ifv{xz|D:zVMU_aOTW][[ZXYZ]V[[\abecdigjhabaddccgfb_`db`afgfda_`abcb`^]Zbefdgbccefjcb`_e\]gfdf_\Ze/.+.36 #2:;64667102.*,+)(,2,)"""O  "!n  "#   ## #! !& '! * +':/KX >Ri=6% 'GMQ +133,0).+$%7A,9%5120*G!<|&8)5636fL<^L/3\M&5/-')-47 $# ,3'UEl8#4$$D7EXvxfqa;''3.23.00+#7   &A@"# (,+ ,%2$2!0% R   !    %    + !% + + + + "#$&+!1-%#"2"69,S`;!+.%%(#-.;<" # + +  ) )GIB/.&<$  .2   %( + + +G&%(! +  +  +  .zm:B51S?94-.4QG+%&!2&2Sbt=4La_KYN]Vm;?c^]?I\b\DRf9#"5OR+;MDH]S--C-2A&-AWg`TXRHED?97.NMr`+-76 2'! *% 1, %' $?.+50564+-"-#&vV%&"" * +  Ev`o9+&74PahyaV#  4>#5$&%A1!#'#(-&!&.+%#+/22,)@<9E>22\f>""  #*1$)9%$8=cWFiqXosghiwixkqe|uqy|smie^aaZgutpv{NR_XpsvkZvƞ`Ǜr|}wz|wƒѲ̊χځ΂ւtF) Aǩ؉仵~Ҳ˜ʱБzpα`W\g}jrpi8?MNF:;B?)%10R^t{{yw||~yx{iFBHHSYX]deghepq|Nvwiofxsywth^iʤwm_sJX."!"EI`3.TNH\r{po52)%$&'%)+)"(-XRd!hJ>>:7+>9.132.*  '.+:,$'&::4CUN48>;)/5'#$++-4+(!+126/)20/ %,5C8$),&%),$22$$K8* ##  $-*%-.(,"&"2.7?,$,--$""($'-(""!$9;(;+3?>@;7)528B6%DA7&5,#3 '>2:2771.f47ILBygDMx^gcS|dNbYm>eIIMA#B-IQfi`[XYWRNNIMMLLI\:lrpnnvw~zskV4*+/.15UGA`;Q*Q,_3cJ~z@<:1/"&3AGRJ4;+*I6:572(-?J0:,(*"(.+F,/-*/9-&-33"9m5/3=EAEE65BRK-G4>*";4,,2%6!?2;1#, >,L :*"!-8)!B!6"&!"$%"-,6%<<.2B10#"O>6=C,;XYd:60/9# %()+*A  !/ *=>I;,$&7C;J<49(,>7%P99,Hf?l}ngfbY`IKH %I?ZBB6,V' K8C^GG1))K(1+ + 8/-,/";/ @710S*05'&=,&M7A04/1(*GHS00)/50++,GH589>@C3>%$+0/J()8#=FX-9$'&PP5'1?)8IC+;04+/G=KD0() +0J8@  +%=!$D! &&!,**,,$%%"23+#$& "&Q$"%&(+%.9A:.**&3).,10.-('.%"--*).--*+,+,/,('*,)',---0,+-230-,.0,-./-,00.,)))'&&'%)++*)((%%)#),-()*)'&,'$&,&'&+)(),+-0//.+*+)())())%&$#%$(++,,-,,0///,/.//+,)#%(($%&'%(&$((+*')-10&($#*(%-+$$"+#&)'*(&(%!%()#/('&!#$!"('*'))*+*(()*,-.,-+---+)''$&&$%'%&%""('')(%()*)'*()&%"##$#$$%$#$#$$#&*)(()(&%('&)%& $&"#)($((,.%& ###,+-(('&*)))&&%(%&)#$%&$!%(&#! "#452.(8:.%"00!!/+Car{uqsu~x>*@($)./()-,,++,./*---012225597221332144101320023210/./1221/.-2342401133634303,-4234/-,ҁ }~~~ +~}}}|}~~ ~~~~}}||~~|{{{z{zzzyz{{z{{{|||{ +||~~~~~} |}}}|}{|}|~~}}}~~~}~~}|{|||}|||{|}}|||}}|{|{||z{|{z{{zz{||{{{|{|{{{|{{{|}~~~}}~}}~~}}~}~~~|{|{|{z{z{{{||{|}}{{{|||{|{{zzyyyzzzyz{z{zyz{zz{zzz|}|||{{{z{}|}}}|}|} |}}}||~}}}|}~}}}~~}}}|{{{z{zyzzyzyz{|||}~|{{z{z{|{|{zyz{{||{{z{|{{|}|}|}~~|{zz{{z{|{{zyz{}~~~}~~|||{z{|~~} |||}~}|{{|{{{z{z{z{||{||{z{{|{z{z{z{z{zz{z {{zz{|{}|z{{zz{{z{z{zz{z{|}}}|}|{zz{z{zyz{z{|{{{|{|{|{|}|||}}|}|}~}~~~~~~~}~}}~~~}~}}~}~}~~~}~~}~~~~~~~~~~}~~~} ||}|}|}}|}~~~}~}~ }}~~~~}~}}|}|}}}|~} +~}~}}~}~}}~}~ }}}~~}~~~}~}~}~}}}|}}~~~}}~~}|}~}~}}~}~}|}|} +||}}~~}||}|}~~}}}|} |}}}~}}|}| }}~}}}|||}}|}| +}}|}}|||{|{|}}|}~}}| }}}~}|||}~}}|{|{|{|{|{|||{{{|{|{|||{|}|}|}~~ۀ ~~~~}|}}Ԁ ӃŽøɎʠƿúᒖ叝ʾŻڈ׮ЩߓϞۆē¼ˈɪ􋅋󁁋ÐƯ​ܻ«ڠʘ秞儯ňʝӆȶҺ֊ľÇөӸրĻ݀Ҽ򹇭뀨앶Ǩ涑荣̓ٹķϞԏ܅瀢ÇƹꭊͰН˄ѭ׷ɹƑ맣便Շ靿ܯۺ傂۹ϸ܁֭ռſ뱜ğɂΝżݘٵӶ˨ҵ􆁘ñͦڇ۸ҩ;֪բ䈋᎘֔ⴟµ́󁈊ٮ૶ѡٜ˹IJΪՆ—ډ劁ُȀµNJڵós~qgf{[p]퐔кkҥ{Ŵ磊|}vrfdX]w|օǒ󄑘ҏ縥֮Ʒ쏀ٶނ䈏򕣫𥅊Ղ񸄄Ҁ߹ʅܧŽ텓ȧﳈƻ̷ޑȀɬԺţ൛ѡθȦˠр酟μş۽똶񢴂ɂзǙܛαƏΖĨֵ׿֛ȼƨאʣ說´Т۴ʎ끱ؽˆʍߝȉ掻咤Ƶӿ͑ƭݢ끙ʍӳ茏ĨµĀ୧ͲμÁƆп͟רʀڡѬޮד鲌ְƲⱑ쬶ؠվϣ헥򀕎԰à½͍ޜ鴓ɫޑÒǬ稝ҷﷆɀܸʦ޷񔓞˖񊚍փ󣤙Ոò䎊豠𘞺ゆ򁌅󀄌üƼԸżƾź還 ƻԡͼȅ咒牎ƽºƼ¿ŽҺ˾݁ɴ芐Ӏƫ֏ƙר^]``bihwE`99>@BE@868;fdkrgVYYYZZW\`^WJ57:;;::898<<<=<;8/++/U+TIH,PK+O@8#Q+J=.0H7;;==>;::<===::<>?AABAB?88<@A@@AAABBCCEEFHILL@/%+T:FNKIJJIGFDDEECFECEHEFG?9>>@>5^CR582U9=A@ABCCA?A=>=>?:8999<<>?AADB?ABCC@?>?>??ACBCAABD@AAA@A@?@BTBB?>=>A@@@AEDEBDC@?>>>=?=?CDEEFKIIIE?AHKIFDEDDCCEB?<=?A@>>@B??A@C?=><FM>::=EBh[:>>@?BB6K59UWULD0&7'8uOAMSGq0++7G@EJHhGYL$9*,N:HH>9@35@C]dQka^eSfWy9ohqf[[TnlPQUVKcUmcNY9?LB.4(.1 ,T4D;BXnzoYNNLaHQ5;O?<&&*;w`|fKNUTifUINRf=;k}9LWUfx`X~ilNt}qsVqxi`FV`T}erY}d#X/.4UD$81*#")//EZYx[B,/)=/QQ5/.)'7I#D$0";+&' 30(2/345/?,>+4?7@4.M;3*=4)&K40(0>!$&%?6-(+6#!% l^d}GTCgUpd7tjafi~lKmi`ZwpSP7;:5W\054413[P4dPABG9D)'+13EEV45A4>'1ND9K,X;DIwmPOO]i "!$%E[tU&/$%-)/447(923!/3WW !&&&4rQRJILK*1+/D0+$&-A%=W 2$1&7@11;B<,7>ZjcWhb6iMPFeZpdVBOGa[sM}UdpZHN:/:=OJH*YTeZV={kXrJApWYYPCH]ZNen@@Fz\^VWE;FLAL8($3.;0!N #5FIa=1U69 !#+!>H9$:*NYK2.L5-.>JFNA2]F(AyU (.+(>;%$3-&&%"N9&;l`^gHdzT@=V?BPc]qdhjorv~[_]^n]Rrgr{orgi]lmpxw]clL65MSS]j;sesgK\tzzzt953342544638/896V^OLIJGC1HIFGIJBI%%&&&%%%&*,*+*++))()''+*''((())5,.,8EF"E$'s@E:0/.4wOgciNXimz@2?IdUQ[n_KC-N8>PQ]^MO9.PVX`YtZGHFBA>92278979ENYPS:)NWF?;+#%89.QehepjchX]SK;-;>RQEQEGP_W\ZF?0Z46;HCXQL?4=?LMmZ@KKZ`TeeW9P[f:KsWrLC>HA>f]\y=SPbc^hd]N<72;6PM.XK5FEH0<}LXWgwRQ_^MULgSh:bK]t_\dptV`|blgUXWfRo^[HDH6lTXemzq\`SGKDOOXDA~DIJJrWPaXca`NaaYgvxuV`pRhMTualjciFQQUVO;25fdbce]n]IFHC|w{yjyrjhjzqlƺajptlT`Vomuksqvzhuo}fcd^dqhakbRbps~}yjuno^l~~PtYamQixkdyWLVEEA;8LIGLYsQ:3.4540*-5<<8256?9FrwT{|dX=j_hVWOS\jZUTmTVFZM}`NG}zJ@XQiIO2_`iYNFA`dtPuBUyje^\cKxUv`{{gHtGJngV[O\XewNd|kQDf@RmWTsxBHiuvv`jhQYezPCF]_wIB8/,BB-EVSJ8GHKGJE\JiI>CFFwWYGOoVlXk\dahHpW1ehwisGF=<>DG2374:=dS=!(A=`=MGE8I=G2=L@DIYBK*.5ADJ-iOSO=?9HLPV;TI*5=C71:EMZQa]P.-<;M9R/-JN2%136OQD72+?;YRQ<4/94B>=AF#$$!$); "2%$#')++E+0// ?8AJ2=C\DB;99@@DA?<=D<8;:=955347:::8424fbb[aW7419]eZHDCK[\:9:D?eE:=30?M:2<<8fbX[;CO5d`\a3_83`a1`[\[UV454cc157967856<<=57964212\`297:@@;<;:765647776444223773434769:<;?;<@?<;04452`^38246]6541476522b^a_]^[_76]b[\be^WZ[a__365b__^cXXQMJPKLQRRTTSOMJBBGY_YY\WQPSXMLUUOJHVVOXYX\b4c^[ZYVSNMKIJJIE>CHOZVX\__[[[]^a```be\_XSONLOMNHHRRPW_SZRPZ6:]]ST[iaVTPUU30\2URLKPLQPU[U9OOOMHEG2AF\6GR5T88<6!=O>9GKGLICGJL01,KN.14531/00102232//0101/0033/Z]\^\XYVYZZ]]Z__^`]XUURTUQSSOPNKIOPPQPOSQ[UUTTSRNKHKIMQKHGFKIFONJMLLHKKLKJIJMLNMLLMNTSRPLTY\d[SIKHMC82_]WRSQJTYSTOMLW04KCIIUS10?>A=;3TSWTPFABDAD=[ieLZNDEhK;Z=a51HvX[SO;6?G:C+ 3F5]C9'1"HM3DA&@94:NRN>/;:6,06+AOxYZU*$".! 7 &&C(3' + + +"! :E?($: ,3-."RE60  *&   Kl/ ++FM]nUo{Z:($ &,&1-+2+3'CN:HCS+.,1;I./1*)+$$='1C'*.43@ (;:')4@55>-H3(&U͏Σ6=f^qϳhwuq~wwyot@HMDIO2001)D?0VkUvpl}rqppvtx~~ukr~ipu^FC:9#?d^ꁙbkklor~~dngdtdTxoӈܛmob|~{]cdD0,>DGWa6hYk^EYs|}t6.*'$5#&(*,'+"*-0SbKB<>86,@4-032*0 (/,,I$)R[5<9:/9HJQ$#+#"'61%!+',+ "#()1-@5)**%# " #*.#?D0" $#$.('%**') !& "&!(*,+5:% +(#4+%!#*.=8%--87,9:328A#,G3F.($($!:20C,.5ARfbWA%)&-&$ # K*/,4>),44).'7-SW=.*/>K<5O9C@N,0B4=;//,6,7A3(()ML<0G4ZUL>FSOCJA8;6FEP;n6b3445\HCADE>,#$HEHPM;ELD@@;xut~|[9,61106>pF?>^S.149g[P9>6$..?O5;9/V49332:@3,:@34H$:&%!*1)7G"''9)9%11*(7,"(*3, /3@D*%&)30XH//5_:H@<3?28'0;/4BJ-;*977$^NNK82'1AFJ2F<(.4)&,5?QMWK703=&:88%+ED8*%08XLE4-"%06670  + +  ($0! " *" -),|#&#311.3-!8;1(&*.6/!#)'A.(+$(1&#+-)IGC>#"&.,),+,+-),*&'.,))+)*,*,+*+*,/4-,01,)**.-,0/-,-(*&&$(%'())*))''% !+.+,.+)()-%'*+&$"*+%*++-./.,+-,*&&%%''%"!"&-**+,-+-,,+.../03-0-)&%%'&(""((&(.%,($)-,(',30'&$&')%##"'%'')-)#"$" "+#()"!"$"  T()+-+((')**,,*-...,*)'%&'&''%&$""&%$%&&'&/))((''%$!#"%'#" " %%#%%$!%#$#%%%$%)(&&$)+-3.+%&#%,,)(('#(+'(%%#'"" &$%')%&! ! !-64$/($&8&/.$ 66Ch}xuxw>-$&&*'-,)'((&*+),+--./-241158:632 14441231114530$21--10.10.0/02103013492-0'**+../111 ρ~}}}~~} ~~~}|}}~~}~~}~~}||}{z{|{|||{~~~~~~}}||}}}| +}~}|}}}~~~~~ }|{|||}}|}|}|{|{|{zzz{|{zzz{{zz{ |||{{{|{|||{|{|{|~~}}}~}~~~}~ +~~~}~|{|{{{z{ z{|{{|{{{|||}|{|{||{yyyzzyyzz{z{z{zyz{{{zz{|}}}|}|||{{{z|}|}|}|}~}|{zyzyz{{{|||} |{{{zz{z{|{|{|{zyz{{{||{||{zz|{||}|{|{{|}~~}|{{|||{zz|{zzz|{z{}~~~}}}~~~~}|}|}|{|~~}|{z{z{|{| {{zz{{zzz{zzz{z{z{{zzz{zz{|z{~{z{zzz{{z||{|{z{|}}||{{{|{||}}{{{zyz{|{|{{||{{|||{{{||{{|}|}|}|}~}~}~~~~~~}~}~}~~}~}~}~ }}~}}~}}}~~~~~~~~~~~~~~~}|}|}~~}~ }~~~~~}~}}|}|}|}~}~}}~}~}~~}}}|}~}~}}~}~}~}}}|}}||}|}}}~}~}~}}~}~~~~}|}~}~}}~~}}|} ||}|}}}||}~}|}| }~~}}|||}|} |{|||}}~~~}}|}|}|}}| {{{||{{}~~}}|~}|}}|||}}~~~|||~~}|{|{|{||{|{|{||{|||{|{|}|}|}~~}~䀂 ~~~}{|}Հ ܄⍄ꀍ2ȹƾΧߌ̴Ɲ؁︃؂ȟϹɷґ܂ٓ쬝ݿؾ쬵ѩط䐺ݎҶνˉʄ¤ıŞСŃ؈Кώɭ屿љ꽔іɁ툆Ǿ򉇌óȟǁ弎́󇖪ᾠף퉟ٮȻ𓓘˓Ͷ公ѓˤ́】ߤΟLJċûĖĸށ老Ūƹ߿ϱÔ웋ᗤ̵嗻ρǽۓۅ뀋ƯȺƼȵ«褰׈鳑䭹ή۴ƾ髱ϓ雛薈̼ҙ퀯ӁĽ˶ɸǃּܹ̌ñϛÑ吸񀋆ۂӑ峽§ـ߲ƽ킒Τ̷к̰ڀ̧]㿘ɌއΰurؚοÊ{y{fjW}٫߉ڵ㢅󄓥ȍˍٯӶ¬№ᇒ՘뇊ͩσ숔Ã򉔙Ŧɹ®΍ġķ˓ڸġՃʹ۾ѾλϽդDZՆƓ鉖❘ퟗ鐉ΐր眨悁¶ƽ梆Ćαݨّ̚߄ݞ׀Ǭÿۀı몖ֳܦՙ𑛊率ዒĠИߍɮסßňƤ⇎ֹ̖݀ȭŴɭ樬ƫɱۃ薨櫴У͡Քďԁ둰ƂĿҷٸܷﺩ“Ҥȴջҏⴌϱ箙Œݜ®׻熧Џфф虌팒ӄ޸օ˱ʻ㝌⸼٫ȓԣ„ΨLjϢ•֌򫌇ꦠ急숾ˠεګά峒Սׅ놀󄐙̿IJº̿Ⱦøټ߸̂󗠔ׂɀǽɱĹεǧ킖ɥ໴̖ĜٛJgecccgmtM.-O-4=<:;<>@@<<=><:;;:==>=@@A@8jn79:=<<=;:;<=>A@A@?@DHJFC@???>>??@?@ABCDCCCBEDBA@@@BAADECCC@A??@?BFE?ACEDCBCA@?>C>@A@@@CFGJKIEA@ABBDGGHFEDEGBC@B@??=>>@BEDB@><==@>@FFC>;:;?a\<;>>CHB@>::CA:?=;8MHK:FKRF5JB"fU@LLJ>SP1**.+)-BUSNHUlD7LS,7:FHGDGB6AuSfyP_Nx_cfOs{Z_X`ofaZdXEtm04?-1.&%7H:;)#:A=7-AUmnm[YT;JE;@54A)H(+/,*5O^[HtN_XI2MG?+3iGRPN^t44eedbYny}kXF]pzoSNYt7=1;>3H,LD!:2'S0'H<2\gqcXr1FE=)/U*;>#!K&3*Q6-=(')"11'#":&9%"/8=!DH4216@:)6""62/'")+<$#6-8=<,/.8" #RXh`sxlvi;f@kgW~Gi[nyf\[it>P:>4+*E8P/@ININPOII:=2%! ,7/2ZS??13,\>'2+)82[AvseMepG+'#<^jb*!-/-$#9C6 **YQRP+1""+.'4a>hO-52"!'(,K JYL=*/4G0#'C;/-15.1GHbocu[M>`^Y9).53863GCP\==:E:(9FFC>:1WY[lhk8:$O14=E?D4LUG;%gG"!&'"V49 &+GJ0MH61@I3/<7;T_[JWEWeO!&',&%"!521+,$!AN{Spr@M}_vs]YUX1B+C_7P;.*0-CKTLgL^B?jeiQfX`rʉn}Zf`gǾdzmgpl]ry{~|b`XqvcdhfkNTYWTbc[zmײm}}z{lv̴msgǪηȧpˏ=ecqppӦѼӟxsxiaUe~gfnzLFHMIF>frApneY6HMMQJNzmM]fwJvHOX[z^u`@IjwOY@fJLtLVhnc|_beput{Wf]S]{clndallnkQd`P31T-answsoyuw{Sin{y<:43311473ZU7-89dRnOOGHMLG4OHFGHH;K%%$%&%(+)***+('**&'(',)&-=BBDFGFOrb0/430LWWcLT\ci=9P[bLH[c`TLoaiHic`e^J/LWY^Y^Y]FDB>@897;@@A7YE.[YJ:^gX>+7(&.88MZ^e[d]_RYpOMTZY[_MGM?ALiRRG82022@6b7kuXh\BGFOQcgc[[LI_>@Beivi\MEJQnBLImR`YZ]]cS-##,K))VNGXSLFF46z]]hcpVO^vPaLCZlzJUal\TNLPLQKc`[^?HqRSJUfdc\WTHCBHVQECMNR\TQSRchro_TXp|Rv~fU}[^|ii]qK~NU>CINOPSUVXVZVQQO{bGii\NKJECAAounWk̵zubqjlY]Utnghll˟jcey{oZrĝ``~Ȍj_\tnRfbkol`[gvyby\tspi_umbilVMEK@BEWZWMiq]_Z96E9.&)1667-/08:7^MWN{ogbQzPmmXrf]RahPW|IGp^wSVr}pxL~hE[}IWs`YBKNmp^F>LRLqVRveqtv}ZQ_dXb=}GHBKgafahh[fZ\]g~KPvKwbISLzshjUm|rUAljwHR/DB=*BA>4KJ:G7AKDIWPNNEknB93Q^8:HD)ObF2:+.AfVQ:F5AD`YG;60:2F9?@348<,'-1zOTB480-1DL:<#!$& #$ED%&/F!++)-6=02-:D`'?86DZBJ:64=CHFA>=>@?@C;;<=;;6357J5OM9G>Ac;MdkWNHQ:B;`KaP@>:2?cbI;5g_WTT87f^764434dc41_aa[XWYX_72]b26;9577686<;<7876c^]]^6;?FC?<<;9765666784653113556257898::;::;;;<<4776dhcc667786863433132c`ba[[]]b93\WT_3^YWW^5a2453_ZY[a^^PIOPGDSPNSXSPMFD5E]XXXYRQOPKHJJHLLQYYYZUZcce`\YXYVKEPHEB:IB=EORTSX_``Z[_\Y\]_]ad`aa\WRSNNOLQMKNSVYTTU[e7_YX\`_cWMT^b78a^XSYOLRMNFINJ=7@GTJB4QN;C?D9G2T=^AT8;2CA7,=8H,NGU.TW+MQSUQR,-0100211123123100`\ZYXXXZ[Z\^``b`^XURRRQQQOPQNLMVOQRRQSUQVPPOPNKLLGEGFHFFIKKONJJFIKHGECHMKKGJLIHOONSSPJJJU[_YNECAF52ZSRMQNIOWWSFCAZ[2K?SLZRW.44@B??EG=_6^\^MNP:YWQTX5Z;N)02F4Pz~CDfNPQUTUYVUZ^Xdb^[\b_Y_`cbefb`acjmhihgedieabdggebabcdb__^cdbejfijklddhihbc a`[UU[]__^`dfU5322238:76322135450,)0 99@4&.&57 (!! "!  !  "# 2. !+1%+* 4`0  *,('+4+66421, 8-"%28&.=23#:8oZ(8*I+Dr=5-DLV,6@=:eW*/ 1&&$/.#!!,,&%;UruuZWK1:/((,6N$$  + + + +" *#$!$)2% !5-)4*% *$(%  #  %  $&    + +    $"(- #*#56*%.2#-2!("O')'8*&*0*b?'   + +  +    +& + + ..`^Pu9DPU.  + "62#  + +  + %'  +E"( !   8_j]pO<1[\P%1*PA+8=1%*CQkb9.NUJ&$#+/.17HQG<!&'!08\i_TE>K1oVzsVyjBE`SnQLfC>ws`fc9=BtkPDJK?G?>5+!(++)&95CO-02>.-<>830(ECJoNRW).< &+%* 31.&L+  0 * 2 =;,'4:&$)"+:C>/.<'  + +BKoESK#Ji||l5' #-&+0#4$&!977:+4,9C;?656FB{{u|zcemebqxqm]]\B47<=;1%%H=:98<79;?3I=8<# -#6&&FHJBYOU\r\hozFNQ^eahdsVjqrgjUVOe~wgSXZTYm|DIMNM\^Uuoүgwu|xpnogyqʰgh[ϥȻᴻǭHLkӄôPA'/HggqxF@CHEA9bq>YKE;%176IKK{kH]bkl?hu?AC>`]FUJ9;MI19&5(.DY5Flpfȯadhovrx}bpbZb~j֛ޕhg|zlRbZJ-(C'XgnolivpuxOnuz94+'$$%).+ND) *.[OsMI::>:9-C2-/00$/ !-/,,-.'2::5z=5:*M7@FF#*-0"#,11*%:69%80)+$#()+)0.4('&!""*%#3,/.&! +#$.4(##&")''!("!)-*,0&!&"=40)2'*"#1;@9=;'+)00=??9;3.?'&&>>F?2-'*-<$,'92?ATYUU>&*&!.,$!!G3,4/m23]AP4\vtbebC8OK9CQ^=Q7X;G0W2B5:BDA@@ABB??;985F7'OYQD?=9:;;uM=/#KR59[CpiFBL9I)1A253:A1-)+@32_H=8J2'A&6=H]0L?=Q0D8,:T<$%;3$0L./=2,#C@:<(94)56(Q#&+ $"%1+%#L2/QWv?cxBP8:929N>!+-6*^46.2_jRZb`eYx\aCV1p]j}CGm?k}P463]F`cMJ!"#;1/)0D+ I) %8*:*9\34>+A%1 +.0;CB(>>!J ( *]B0)+>4'"-4=;M'#565.8:;;@[LD7B&;74"87/*D=&5 (8<S10=7 FX>*/!7]PH0/!2=N@,*$!'%,!)-%*02"&vLK4+/"6C/+ + 0($1&&"$$",*#!+%** &"(9&27,((. # 7+92()' '>=1+'MHB?;"3-..,+,)((+),,./,-,+" 010--+,,))++-.,)-,*)(,-.,*+-+.'$'(#"+)(*-*((#" .,,--(()(%$&%#$&'++*+)-0//.-,+,,&"'""!%  %'(()-,.*l,/+)+*.-.0/01-+()&'(%(&$%()+('(*.-,*-/-/("&,,,*'#($"'#$ "%$("%( %-"% $$% # !  ,((('(&*+../--)(%&&&%&&&'%$#($&(+(*%%&'%#$$"!"!!!"#"&%#$""$"#""%##!#$##&&$')(%%$+/2/(#"!!)&&$(%"%)*( ,("(#,%&-(''&!#00/1'*+/.,.,-'!51ZLtz|||?;B(''))(+**,.+31.-.10-/0102211016744563253013543100220///1202625776225762221/)(,-034~~~}~~}~~}}|}}}~}~~~|{{}|{z{|{|}~~}|}||}~ ~~~~~}~~}|}}|}|}|||}}|{|{|{zz{{z{|{{{|{|{|{|}~~}}~~~~~}~~~}}|{{||{|{}|{{|||{|{z{z{zzz{{zzyz{z{|}}}||{||{{{zz{} |}~~}|}}~}|}~}|{zyzyyzzyyyz{ +|||}|~~|{z{zzz{|{|{|{zyz{|{||}|{|{|~}|{ zz|{|||{z{zzz|}}}~}}~~~}~}}}~~}|{}~~}|{z{z{zz{{zzz{|{|{{{z{z{z{z{z {{zz{|{zzz{z{zz{z|}||{z{{{zz{{{|{{||}~} ||{||{{|||{{|}||}|}~|{{{z{|||{||{|{{|{{{||{||{{|}}|}|}|}|}~}~~~~}~~}~}~}}~}~~}~}~~}~~~~~~~~~~~~~}~~}~~ +}~~~~}~~}~}|}~~~}}~}~}~~}~}~~}~} +~~}}~}}}~~}|}|}~}}|}~~~}~}}}~~~}~}}~}||}}}~~}~}}~~~}}}~}~}|}| }}}|}~}}}|}}~}|}|}|}~}|}}||{{|}}}~~~}}|}|}}||}|{| }}~}}}||}}||} |}}}~}||}}}|{|{|{| +{{||{{|||{|}|{{{|{||}|{||{|}||}}}|}|}~~}~ ဂ~~~}|}Հ ÁżƿϿȝ̔܆찇ʢϾóѨ폣鍰ҏѝ횔Ϲ䟿拘ΞڊըĚɫ骀޴ŨܯÐ˲Ŵ肯ІϦ棛ںݸс߂ʱ׷ɭ܄٥ʱƧ󊖺Ԭٯ晩¼ֆܑ㊪˾֡á򎘖绸􎅶ɂⷣ݁깈ϳʓМ˰ȔЀLjҡƣѭ㾹쀆ܹ㶫Ѱìʸӷؘ܄ĢֆߘLJͅ𳢣ހ΄ʫ󅘐߲̾ݑߘ⶛íヅѼĺťϤϹ׸޻鿰яۺʚπȴϼί膅խꚐХ钎͵ͱӑǥ¦ڱhܵɲژw觃xil|zkYטԒ}逼ƺĄ솱ؗՅ܅̝恛Ƀ㖓Ąዀބ򔕐ھ疅↩Ѱӫ̔Ԗ̀Ϣƽôʡ𳝯ɲ϶ſƼѾƀن뮎υى񅁋˘版ʔЪɓͻɛȋۿƺȀݴƴѪܳŮǥߊ򾍣֧ܒԑŇۣ鲀ϩҳߧ㫽̣ʌ¬ŴѼ鎚ɥ刀ܾۖ֬♻ٛɾ𪱣ǭƉҕՂαԤϧۦӹȔߏИ󞘳եĜߥǫƓȄ‡ؼފƲЅξ⤻˗󃁵ŝѵ灭Ӯǻ䂕ӬƥꂟȤڸؚ󤯧낈ƾȾĭڿӺíȚヴ̮ĿȿĽҲͷŪۋӀ˰ûӛѥ[^[U^^`m:9mgb`a5=@DG@74jledcccf_dmgzJEaL9;AA?:65:9679:8:?>;;<==;940ST.,5AA><>?@@BBB?>>=<><;<=>7g36<9lojgk8;==;:;>>AC<=DDEEGGF ILJBFIJJEDEBBEGGHLHGLJEEJB@?=f:4=<<:=A@@>>AA?<:<;>=;?><;::@>>=<>=?>>@@@DCBACABAACABBBA@A@?AB@DDCBDGC@@>???ABDBCCFKJFCCCEFC?=?A?===@HE?A@><;;=@ACAB=97:<8539=?=>CDBDCCB78>CA?.9>6,]OW11YDU>,!^uD`y/$m\L')*+,++86@FIdXE1H((GKS&HK>=wV5IvrzsufucT}cQcwZhaeZxHacbWZ88qik8@0*7034+--*G0*COO|[ZQ^:%-$95-A+-$!%$0"&vQ3@8G7e6Sc13+GLfHCZ98dl`ZKQbldkmHsRcwmfnLWyK(=3'E+`7USW7)AkcKQNrR`P4S>.>/_/@K*9Y($.8".EG,$D.++'+#//!0! I9!686+2/+*0#0 /7@!'@9<@AA@9"#)*/Zx`^|zH89fZbcUZ{~UZrnFJ9032`3A,E0OFIOMPTLF#(*5-%?(7(8C4E@3"B39B,0++.S>QW}eu:$-9.JVK@Y_&'++:(&%$-5- $B?^YP3.(! %)AASL(D0F!(,tq7)zt2]Xe:Lo!5?-;*43+FVZih\fE\:ULO,ivYPYb\DL|Xjegubk`p}QYX]W`to6;NX-[n1jM^sTbQY]Zomxe.5MtGmjPg9AHMA_E>g;=a<-Ov?NFcBJV38=(;A,-BV>1BA5@KUXI2@KaGfXES' .#A! Lmj:* +P?V3U3=?'E5IDlC47MScGE@BD^c8;Z5; 0,((& =:54.2-'!`C0FAD[:Slfy6(5;9,5B[/Q/:alkI<\{\j]GGr~ACiXsun~vu_Nrjjmka\h\SQOHC=8mmraG6ADIGKFMA4NMHA896?I4298R-NO5=IG98>AEEIS==6/4L]7V>gs\qg`j̭p\Vddtlumak|pww~shdvoerhyPQ]^]efZ[S|{}mnjrndez~u|stĴxik`̶|ǽծxȥzrtsšϑ³ŕv|yiqh{g~ޜƟsNOWZNU@973440574YNW<27:cINOKNOOE4PGHIII>K$%%&''&&%',(*)('&&%'''*+((&''&#((2>>@DEG&$LJ+'('&7qU;aHe[Q`xDe^xh^JIA:utAfl_W6Q[ZMHZcYhORJLAC;@CBEDG2ZQL2:ZE;?@F@=+!"$'MP;RbF4bgf82;#(/36RRZ_T\SYU[7<8B6FpXNBBDFMG@@6.2Ya_OYQJck=\nhlF[]TWR]P[]OWRIALun=LFR`bmFNRHdKMOV~T_^bMH$4 ^/M)GG&*2JHE(1FPbRf]UTaipoj[T~_xQjLjZVvnSelqWUnd^3:BkGCqFkc[VQJPJEONNXMFI[STTUgne_wnjx~oW~mt]dUcc`nY`]pl[Xv[fHHJJLPTXVX^`ZY]zfpUUpUPWNSTJowltϻmcZtb{xRYuniyjƟmwxeQzgnvrj^z`qzsl|wjukvnmdhwjz}kegjjsvoa\wrJeCO`p`FF`\]dapLVqn6.03.+2237>6K|{eHl}JPlcO`PejbWVHcbT`YFxXFC^<<44=-9&'4e`78/4C;==E4BE[6KGQ05ACC1B;:2JF.;0BO?APkcw:3-TcBRW9J6$>EF8""=! $(%IO"))JIFKD6'IQ%4#1/4>HD::8@ADEA8;;47?DDA:9639:453459834B>?;=@==;:AG57:7c5i;5US0A>Kako?B0KPMVXI>YJBM5\XURWfGNH_o26575j5233__\^Z]\[b`^YY268;7477577>@;9841[]b276;:AB<:;9754445<;93451/147446;@<9;AA>99<:;=649:8mnmi367997623325542`_`beZdZaZ\acaZ^`5h3653\YZ^`__VNQPOFEKBISTRMHC83^Z]_[UPTOOFI?IMSJQW\ZXX_4hb`ZTTQEGOHA@EIE:EUXPUU[db_[]`^VZY_Y^^_[ddb[[VQQNOQQLKL\UTUZ^`aUPUY^W_bRTX[bVXTXSWEDQGAIQNA5`MB=VO>7A8CDF>R7Q2J-3D8M2L?U0G40/WKP.15370K>FT.///12212343201301//]YUYZY\\\]abcaaZUQQOQRPLONOKOSRSTSTSRPOKJJJLJHFB?B@CGEHSMJIFEGEWH7?CANRSGIGJJLMNMJDJLIKNKMO@Z;i^^[[WRUUXYUUPCFONT8QKLMVySTTW.0EA=>aUSOF7;CBED\6cfNMNYfPMA4Ke1;S,/2H:`tkuy|FBVSQRVXWXTVV[U][^V[\[__`\^ab^`cejokoplfbcgdbfaikdcddgg_Z]]behghiihhfijgee`TVVcd_\V[]+-,(-./3532/-373233/073@''0$ !Q-:<863 !"/0  '! "$"  %!!  !#" +4G 4I @Tc) #/+08),!3-1#%,,&6MyB4G8'Z0F;R4A;AR]p=;%19N*22* + -"6DN}a`RXh  !/! +$%&   + +$#"*"&"#&@"+6/&!%4$ #+WLjC&)2" .#  +#% + +     "+&)/++&($$-'&4"()!/2 '@:(H)+4''"*'#2#7Y$)    + +     )$59[pGR +'4,   + +  )(- ! */   + BXfdR^9N1SF9H*6NM79+-.*$6ANLS^W ..:EX'\@QfJUJ\Y[pog*0JvGnePe9AHJ?_B:b;:[5(Mn9KF_9z~^Swxr{tWMojklk][gXSMKC<62`_dY@/5:>>@<=3 "%*3Ggy}}O}ax[[]t{\xID}NK^_ld]dxkbnxhd]WSvg]R^YkEFPSV^^TUNuvwkjfpobd}szwpwvmor`b_ʀڜٯƑŲ୞ǼXDR>a㹩rGIORGO;68C-.:;8-PJ5:LLGRg(:>J9Z83?9U\IY3GI:;:84'&9pvqnnpkijry`q^maanqĆjsnv]Yg\O,EK+^hpxh@hOeyn7.*)&$*.-PFF-%)1ZFJI??><7,@/.//.'0 '/./--.$-O<$:):<5AL'83A70'#:6!:<,*$ *-'-&%+$%"! #.+#+  #"&142#&($&!%!$?1(#"##+75/60-68#/=;>+59484<2991973.4KB",&.79>(1/*:%,.1^CUUQ9 0(#!!" .+2%4/+-9RABFJ;NaX61C;Gd6[TA,963B;OTIK.::;*(85- #[XD(#YJ+FB@>=8;52>@DQB67@;<;>rLLbA;IYBFLDID8dZR]LQAQtbTK60;%7=%.,#E+TA/'$)014:.L/37%& g$&$ &#!".# ,ZR0+527/1#,3J&@?I(-;:7)8/1*C9")#:55A``n2)=U4JD-;0;4fJ6-8"0G0NC,'2J2$""C!+=%0.-',25-'Px9A.07'6?4% ;=/113)$%" + #!a!-5/1&$.7;;"$!63;!.!./.370(:/,3'IB@?BH.'#,3--)*(+*-/,+))*+- !5772.--/2*.+0,--.-)+,1***,---)&)''"#' %,+)&#!/,/1/*'*'(#%$&)$(+-*)+.0..,)*("#(#"$!"*+%)*,..-+./,(+*,*,..,21/,+*((&&((%$$()),,+,('+,/)-0'')*-&(B&*&($!'%,$)& !%%'!!#$"&$#('%'((**)).0//.)(&&%'('%'''$%'()''(*)'&$###$""! ! !!'#"" !+# %(( ""##$%&%$"%'%%(%'()7-,)**'*)+))*'!&%&$"%%*('&&,%&&"! "-15()*.6)(#*4*"7:_qfqwz}B88*('***+)*)-(/,-(,--/./+,-/-../587::83/130/3.46100123/,-,0123434553566676431*)*10-.*+-}~~}} ~~}|||}|}~~~ {||~~~}|{|{|{zz{z{{zzz{|}~~~}}}|}|}||}|}~}~~~~}}~~~~~|} |}}~~}|}|{|||{{z{|{z{{|{{|{||{{{|{|}~~~ +||~~~~|{{|||{z{| {{z{{{|}||{{|{z{z{zz{{{z{z|} +|||{{{zz{|}|}}~~|}~~}~~|~~}}|}|{zzyyzyzyz{ |}~~|{zzz{zzz{|{|{|{|{|{zyzzyzzz{|{|||}||}|{{{||}}}|} |||}~~~||{|{ zz{zz{|{zz{{z|}~}}}~~~}|}}||}}|{| ~~}}||{zzz{z{z{z{{z{z{zz{z{z{z{z{|{z{{{z{z{z{z{{{z{z{{z{}}}|z{z{|}|{ |||}|||}}~}|}~ ~~~|{||{{|{|{||{{{|{|{|{|}||}|}|}|}|}~}~~~~~~}}}~~}~~}~}~}}~}~}~ ~}~}~~~}~}}~~~}}}~~~ +~~~~~~~~}~}~}}~~}~~}}~~}~}~~}}}~}~}~}~}}~~}~~}~~}}~}}~}|}||}|}||}~~~}~}~}~}~~~}}~}}~~}}~~}}~}||}}}~}~~}~}}|}~}~}|}}|||{|}|}|}~}}||}|}| }}}~~}~}}|}|}|!{|{|}~}}}~}}}~}|}|}}~}}}~~}||}~}|{|||{{|}|{|{||{{|{|{|||{||{|{||{|{{|{|}|}||}}}| +}}}~~~ +~~~}~ڀ ܀~~~}|}}~Հ めX㗛Ǻӊ殝κ񄇌̆ʫƥ߸Ǻȣ୧دގ퀉榻쁘ڄ΍ɯăݛ̒諟·㉍ֶ󊩮ѝʉ蒗̡ٟۜҰ蝈㳿DZ킄ؖʃҨղ܃ޔնĪīƁۇֽΏ࿚񊥵֪ͷÃČ䉮͚ӗDzȀцȰו˸ʄ솇ށ繭ѧƮȲǿĪۼӬ˟ІÂϨ𓦷¼ťĻľķ÷ڊ˾ŐѧՅ§̽ȱك̌݃оƦكϫ̬돴󈓛˶ïůıɾֺnf˪qzˈ鮱usͩ¨vbfouru洰̺ҭÿÉܗܕәԿŴǿ¼ؠ쓌뛃Ձɍļ膑׵Ǡ艘ڝ뜈ċ쉅њՠŸ٨Һؽٱهź¿һͶǹ퍙ڝ„֐ܖʀ嫘ǜҞܘº±Մ􍴬ĎŞ۟탩ʅֱɤ䉵炉޸Ə٩٘嬒DzȰů˸Վʁ٠֦΍Ęꮒ»ƼĵҼܯŒ̄ӂ֍ϙ̮ljӣח⺽ܿϪï݋яւȠԽʼnͥצ͇㙣ɾôȇоĢŅሢڀϽڇځـᱶ壋מȆ䳺ԻԾ®IJȹŽžĽ怅텃ϿහȎ٠ރýƸ˺ö©өŷߤІȿ醎$B]bX78b]dfkh`X_mgh669=>84:9gdnmifhbO_ppl]j:;==<9669;9;;;>AA8;>???@?< +@FF:<><=>@ACCA=:>=?>;<<;854f9;qighjlkk69:77;>:;>B@BCDCGGGIKLKJIFFFEBCDDFGGFGEECCEFE=]T=>=@?;;<<=<<=?>==>>?CBABA>=>=?>=;:=@@CCB?>=@?>=?AAB@A BBCCBBBACDECFCCDDECABCBDCCCA@@ABA?>@@BCGFLKLEPJCCB@?@BBFGDBDEFEB@AEDCEEEFDB@>>>@???@FBA>;:=@A@C?>=:;;;8997=?>?BCAADH<69>=7DFC1@;2<42?PZ:7!,P`vU=3fYUNXUU-./2.7>>C?jP=M4A2" #0Nx@V7O]TkWWU^WjUSjPwvpvcquslZ^LIotb<%,#6$%2:1=-/W8MDyjuA 60)*-..*#$%.{&<2P52E53/?L4A6F62?Y=c4IW^dhi=cke\ukOeq6 ,0,11]:`jcQi[w#ltdMLJl-P9+(&K-@A491,7*,GC #6"&&<8-&*$"$'-& "40)%!633=E,+$22%2 ")2="#FIF=31:;=#!'**(]VxpYkbpd}2#jkjgjVsH^}`Ou;ZE7EAM=@(*JSCLORLJRF28:E8-#&%2%"8uzaT-[eP$YMuXM,<@4.211+'5V\VK_`JSG?Ljssy54UGR_R_geqAIPO[kuWj~`EPo^\^QTatjb8mPfAPWWh[a{hxZGYsBCA~ohDbr@f?5EXl=dDZ6JiZF=,:+*/%$*--+707H?<0NN`L%/" )*(/E# ^5?4EDH[42OIIIJDIUNHC@RP>:?L7/4+0-.IM8V\f' (0*')'"?;:61/*)$)jK7*6qIkL?[`wD*78332s@BMhk}pOgr[s|zix|ryv}|zyt}t~xpquj\SXZ[cttl]XTOKB`.LnLyp{fpohedjjp{tw`msr|kcdba_QLW]`uEv@;bKd~};8135246XOJR[:_64aQOPKNNL<9KFG$$GF%%&%'('&%$*+(*)'$#$%%%&))*)(''%.',6=>BDGJ&()V*%C^P{NWaK0G[JtOLBaNApih79V;AJH:2446<>UDB3&'#0;-88>POAS7NQ\LX;:<3220/+HTQNPINPSZYJJ4?ZKTFFBAO?A8dV4LXY]wLzAdZIT[LY\XQTMLOL[NNP?pLa`g?K[RfalNSUIQPBGZ_`[]C<3E?T3?L%'&*7O&')'3bLVOHvZ~N\R`vPONBM~|wNIWy{\P^Vv=}\vF=wI_XpoZVROPWTY^WVSaVZ_^_RNXW`m^iekwONkguaY\xLnlp[W`SqtpmXJJKIMSX_hb14\ZBk|bdnjyxUMPRjqds_fskkiqsjmhWq`rmj[bleukag\`\ncmYzbdsYzmhacibxsx]\|X^yW{]nrkl`jHEzjIkR^x`ZZUMQNaD>HWc~bsXi{}gqvl{~z~mln~rbqqWktly{AbyWbzQ}pzxlij;A^HD<83)WQJJBI24[;N^XNt7G2CKutvjdc]lo`Q[InolQ9O5aBOMC9N8428H@4AH=4,-6@c2$ &6@O6F_UAEDPKIECyB:H@@9XENN34.J[X=VC2079B?DO5K>.[B:U1+)8:KF/.+Q5=GE+.DNJOY=EN>43>:.:B9 "##!"I$'JP#&)$CM@*(7AK/,#;8<;:662a_63439=;;<<::<;>@?7:CCA8==TDGU=7AAFGJA5XMV4F\Z>29;SK8GAaHM_U=988551e5;:8<;?;984466897540233243149=?==>FC==65;:868;9l58kk8989664c`b3872341a__ab]Y`\[]V]``^58:268dZRY[\[YVMMRNHCE@BMLJPID::S[_^^YSQTMIFCANMRMUTac[__b^ZVSPOJIFGFEHD@DIELSWW\365c`^\_][WY`\Z^\`iccb\VQOQROOOQSWOV^75^WPSTU_bUY]UVRYSN;DKPQPQUXH0QPM;5MTQ6:88;L>:=:V3I>759;KIFHLPT0SFQZ-511/ORTG+Q-/114224667754213424021_ZYYZ[^aa`e^_[ZUROPOOLKJHHGJMMSRQONMNJKGFLOOICA@?@@AFHVWLJJJKLJK<:HKKX[QIDFOHEKKD@IKJGFAIOOKQQFJMW`UT]_`YUNAFHIH3`R?KLQTUWVV:A@A:_ULH86EF@Aa6gh^?UT:978:76. (%-! $#%%!   #  ! 58D/$35US" 2&" - !$ 3wo>6HXZMG23%1A'K9G6H.BLFJ?9 1B-'& &#;+B@|fz~3!2    7, )#%(&(#+!22#&32 +-( + 5"C=?-C?= 6 J 30 $ !   +    +%&00*!%%%!$&% ',! ',+=.1,F'>0!D9M4#?fa!    + +  + &+3;85**% + %<- + + +  &'   + + KYSFUWBID6CcOJ?-00;NA]P*]I\;NXY|hYa}hsTEXpA@@sjC^n@c:1@Rh:[?S,EjV>2$0   ""+(.?52$28=4!$& J %(2"!#+:1-4+!!#+.'&$. 01 3? +"+('$ !bN3#)MJcH:946 #l79KfntQmu^xnx|t}zxuxlbX]^[fvtl\YRLG=W'3Ib_VLNDA6:A%# "3:+JHMnnlynl]S}WUMIEEY`drofjYlmp_]PWQPiNMPYXb]^prwHTa\Y][^ZXz|shouywr~|vnqq`Ȫw|n[ü¿ָޑӆ߈®|tlkָϿåOQJB>:D77?9'":5LV43\ajZe7dVfJA:L2)%:#(":'335:/"-CI}t{p{|jktЍezЇlaga[TGCKQYpEt|<6\Elz60(**$'+KIFID*G*,YKLKA?>;01<-,,/  *-.0..,0%;8aV3490.90L.-$7("640%4+5#&##&!&& '%" *!"' '" $'3", " !"&%!"3'+ $%!8*)47:=+A%82&.6+45403//3.9359-N5<:9%+5,<7<./.&/.&4GPPJF' !#/ ' (3HI(2R,*KBUIS.>dOX/9XRG30L.&O-Jk^GAQ,%,>=-%0,NDJ9G)"N.:5FK?@>;;@>DLIJC]H=CHINe94Y64:B^9<9@M58OQeRJm?]L.JELH[=8@6IE8:>>@ACGJA #<=&78*19Cvqf;,P..:BTRYFXbGgBMJ3@2>,.55(*..8.1**(B8I*M&8?,0'"*'KCGU51%--?&8#&(#(/&@-(%P@=HE52G?75/--J?@F1H.5/0%+"("'# !*.4);*-0!'<)*''5MFI1/#A;%5/&-.2-!".+."*'1$!1"" %C-8):8/3/<>$",,#(1=1*#;>4)&+@,*2>;@$12''JI/#[DnE*45"'.CdgpknthplVHixx?arHMb{HdVHB1;$7$5%."- $ "8!';@5G1%"0#A.:,21#76?@OH/2)'0LO6B5''-0;9;E*=4%R5-J'$,:;$8",68#&:;7=*3&"    V-,( $."%'*++'4-/#11# !0,#,(>05A9)HEAEKK(,9+$/-**(-,,./)')&,/442-+--../0-+/.-.),,+*i.*&++*)*)$$('#"# &'$(")-./0.*(+%$""'$(&*(./+-/0,+)('&$$"# " #"$')*-//-+-,,(*.,+--03010-+('((%')$),--'(()02*+,&(&-)$#$%%%'*"('$%'(&)!"" "#$$#( "& )'(&'()***0-.**(&$%&&$%$$#"##$$((&&%$%##!!%%%#  ")*#"#"}$##"*+&#!"'#"%$! %&%#" $%')+*!""'.('+-,))%""#",&#$')'('$,'##"! 1451 .)!#(&2"" 3HY]gnnv}C>F,+(.)(+,+(++,/-C*2-('(,/,57699:844322620521//.01///1/020.1012334334121++-1720*-+}}~}}~~}~}~~~}}|{||{{z{{{zyyz{{|{{| +}}|||}}||}|}}}|}~~~~~~~~~}~~~~}|}~ ~}|}|||}|{|{|{z{|{|{|}}~~~~}|}~~}~~~~|{||}{| {{zz{{|}}|{z{z{{z{zyyzzz{}%|||{{{zz|}}~}}|}}~~}}~~~}~~}|}|{z{zyz{}|{{{|{z{{{zzz{ +|||{{{|{{|{|{zzyyzzyz|{}|}}|} |}}}~~}||{|{ +z{zz{|{zz{z|}~}|{|{ |~~~}}}||{ z{zz{{zzz{zz{{{z{z{{{z{|{z{z{zz{{zzz{{z{zzz{zzz{{z{z{z{|}}|}|{|}|}~~~|{||{||{|{{||{{{|{|{|{|}|}|}|}|}}|||}~~}}~}~ +}}~~~~~~}~}~~~}~}}~}~}~}|}~~}~~}}~}~~~~~~~~~~~~~~~~}~}~~}~~}}~}~~}~~}}~}~~}~}~}}~~~}~}~}}}~}|||}~~}}}~~}~~}~}~}~~~}}~}}}~}~~}~~}~}~~}~}~}~} +~~~}}~~}}}~}}}~~}}|}|}|}|}|}~}}|{{||}||}|}|}|}|{|} ~~}}}~}}}~~~|{|{|{|{|{|{|{|}|}}||} |||}}}~~~~~~}~~~ˀ~~~}|}}~ B懒ǵ昝绚޶ϭ񲙂ȴȁ皼˹ˋ۞󺱺ɺ呎耯Әǃͮ⯲Ĉ̒ʂöߡ򆆇ӒȬڰŒӵԜ˧ÎӟؕחଟǜŸՠ􄏌⸝կԛ̚Ż̪ͰώƬ̺͌րצɴ΍Ʈ҉ÐЂۄٛƮʦ⶙ݓՏ˽żƮ怤닞ÑΘ󄴇ƈ͎耇ѯ±􃣵̽ޯƽҊן듈ژڷƎɥ݊ƶ򎾚䯞Ӂ􀈗§˼ÿĪع̙ʒǀٽҺά挓؄λխ쒓΄޿ҿ𵫩چ鄐ʼ¶pxլԀԓǭm~ǽceidfw鐔͚ª‘؊񩊈䭈ָȾѾɀȺ̿҅͑עÇƻ펉냍ɥՅ뉫ę𑜟񀏝öӄ쳙ྋϡ֒⾞ĪƵ愙緺ߔ׫ӢϾһ⍯“ߢƨ׊Հۺ˜ǫŊĉȾ֬ȷƣ檅ʁΜɿ̰ü톖ͧЊ翂϶뢠눠έ֗𩅋ˆޒ߅򙗞ɿ͍ގ뙁ѭ¦цƻȷԺյŸݏΤȼؑ켝ل麫ύšޣၪܼݐỺ̩׳Τᇃ̈́ڼ¨ʹ٣ںĂɰҟ츥̃÷ǑڤٺĄ̊́͊ÈšƦٌݻ׻ϨŇ鈊˦鉍耍ݿϹ͂ɐ֦脃ڼꅈ灈л݀Ǻ;ƾٿ˥ƲܭůĀԴù¾¸Ǽƺîָ񭰮ɻԱư򢥈򅑜:̀h?oeef^ZZ]ca`fkkg66ed655h55hifa_amlke]\]eZ69?===739976:;??<==??@@???A?@DGD>;;>>?=?@@??;>?>=?><==>==>=@9lgheabikl89nklolj=<;<>=<;:::=<>=;:=>?ABDDFGFDDFFEB?<>=CJFB>=>>@ACA@@>>=??CGGHGFEFEDDEEF@?>>ABAECCCBAAA@AB@A>@ABB?CIKNMNNHFIB>=ACBGGEFFOHFECFJGFFECEDGC?=>A?AD@;:<>A@><<>=AA>:9::@FA?C?@ACB=:43=;@I??824,10c:KCAgRPT3bVfMalj;F;9>F%%%4/045,00$'646>EAGdH,& /I[\>EE@9BH3YvTtQ{ksamWXZTJSaZncetrDK;3/*-/UzLlT8T`&.djdE^ZXHN@:%PGA<(&8*7'64a.$<#2 -2()(@-"+)0$F"-4,) 3=6%3)7?)+2&=#*)';99:219CNB63CA"$#b`^ubz\Ngv{;*:!DB}\bs{belbrsf2ZA"*V48(Ia7RPSPQRXAK?M`WS>!'%20).5P1/K)154.:2JT6S6CSM>OGfaRVNCWA4rBOeFkdnVJJWWVatfMNxcXXl^ZJ{ToT2?PmEQs[aXbtrmakrWVER[Kfl~>>mYk9?CB=Gi\ACJ:*/%(&(#()&4,#%.95.0&!#*"  ##*#9/F"'&021LeK[?4V8H#3&?CA3I8HGJ7XS4=M][O\E$( --**$ !#@?941)*#9^Rl?N*`5XhL6C=:Q60C-3VNMdhhyo[[no_djiab~rtzrm}mkgo}k_frxsuyrcjmZTXPPMDBr[x>xsqh`XPQG"4.4;J13QMG93353$'+08/+5FA77:<5:+97;358.\ZVzzXbsu`a]lmgZbbcnրfű¬zwko~~rhjkmlqZmksqxRZc]UWU`b^bvw}{tntcdjq^jgau̪Ƽp~¤žkmʯgp֯rv|rkqsٔƐɘRIF=J;@0Wkr=J~:(KV_bpGA;VF7K8kAI@HED;hYfAL`UP\XJ@>k_gg;9G93847=F?<20T6:<>Uqj6AJPla_mVH=B<@074=3.THFHKB@FNXSHF@H,71G;DLP<5ni\SgN[JImIvdzdCHeARMSZNPPOVRGHD?aC^W]WU__SWXw;QBQ?ygb`\W8K1@2@8X\^acaWXY[XYYRTL{XYWZVYsNMXTWZYny]iiKP\i\wJ|hfoNVU]MSWq{iOOQLYf^`a>Tm]Tak[hwz^if`vm}xxȡksb|y~nzgZomkep{XZcwyj]kqq^e€_^ijhscko`\\ac^XX^X~NVedZlwekdQR^GD>D`p^S^`WNoC921-1;<60&(/:nyoq^ettY~kuLXlaDYQineWXWOlYq^yrhd_Cl`VGYc`MUBqHhKDjiZ`cwRd^=Vcpk÷ht`rpohog~nkr_xZS|[buYitP]`bEC`KrE>zcaXlnN?jh_vpB92\M:;0EGN7:clZuw?_t~EtEI~ylx{PB9NtpxveXCNP1MTO=R4857?JC=@;898&;80:,*72SCCKH3Y@DXPGKv=CKD48LGFDI0CG47&%"# !#A$#?66%+*,%*!KA % Yg;7F@78;??AC@;9689335425484d66`2747>:999=>AABA;@C?=<\,,5;OYMH^HIWI=B6IZZOQL56;[[>L/\497e]UQZf757N]E^42355333c`[Yb__a]WHMZ565:;;:932:8599878977459xC?<==<:8:698864685641211444d2:;99;<>>?A?3465648675578:=><6541`_hd663c21bcbca]_ZZZYV\\49?>887cYSVWWbZ\URWSJ@?=@FFBFHIC=[Y^SNQMD==BMSVUXY_[_[\ZWUKCC=:C>FEDGGDONHT[ZZd775eb__`_]\XZ_\`^c6dbea\TNSRQMOTRRSX^33a_YVRLIWZ\`YYIMUBHQY]TN?NYZBCGIH>CHJ:83=A859UG:a@;7<:BDF:RFPYUHXDA-81+G;GX041/+-.00/24678865332142221][X\\]00___[[XUTQONMLKIIGGJMO[OQNNOONJNJKKLIE@?Gq] $ ! +(   + +*   +  +     #!+'%"*2(!+' +%/$ +7!#)#  +T3B?p:RIYPbHAA@* + +   +  # +  &-#% #+*$   $$)& +0"  + ##,#,   EDWQF6E2@Ce\MMB9G- G&/C+J>Eg,".)'-71!9a;9fH^t2)/<1;T/2Ku^?RqXaYbtqi^diOOBS_Nbh{:9dOa6:><8@b[?>>.!%! ,'"$ 2  . &4#7, +"  #%!*+(- /##45'-<& ! ,,'! .RVj<=I"bfA !`OQhnqt``st`iouhkwzxvwpzoek{vw{qemkZUWMMJA=iWq:kfg]QL@@9! + 2=60CNJKA(40SLQQE2'-' <48/1,,)'9:U~bwk~`Vca^e˂NJՖpvwr|j`bYZU6DNSgFzdY9/N2sl0+(,*&NGFMKI<'',-S>LJ<;:8*27*))4 %/001..& =aHbL#-L"#:^A<>'#)&8 !*$, .$"(+$ 4/36$!+'68!&30*;,%!! ''!"""$EB8/=/=105'?3D:%'>%/+.6/23574+.-+B+:363*97/1/D!%!-[YSNFB'$!"&577YNL:06/DMK93Z\UKB4DO4:)E(599@HH@AAB@BC@D;S<@CGGP\706/476@J7;XC28BZMY7WTHF@OJ0;:@346GTL:<@=IQFEA(7I;7J//)N5MQpqpq443/<5YRAC@CEWsZ9%3?4:D+ 0!#481%, +3(!"5"% ",70,3)#*,,-%$ &M;641#G09NF8/-!-65$&#""0<1 (BA-!2<98 **)04+,  +*4& & + +.2! /+."12-@-;,-7-$'"-51,//! 45&3#F&)(MF@@DM($$,/ -,,*)0,+,-* %*- +,/-../010//*,,,*+)0+'*+)0+.('*)& ! #! !"" .,0./00*'(&" %)*),+/+.+..*(# ! !" &&")**)./-,-.-,,**-,--21120-*&)(&%&)('&+.-.,*&$#+--0+*"%*#'**'##)+ ##;"#( -  &%(%('))')())+.++))'&%&%$#"#!!#$%,&(%%$%%"%#%$$#"  #!##%($"! &%"!!"'&% "# !%#!&" !%&''(%#'.((+.*'#!"'(0,*(!# #&.#,"E$)$# "40,":29&.&!./ !3JUPapsq}CA1@-5*((&(('('+,0..-.-,>-41/54258734454220022305310/1///.,/042230376441094//.002* +~}|}~~}} }}}|}|}}}||~~~}|{|{zyzyz{{{|}}|||}}}~~~~~}~~}|}~~~}~~}}|||{{{|}|{||{{|{|{z{{{zz{zz{{{z{|{|{|||}}~~}~~~~|~}~|}|||}||{}~|{|}||{z{yyzz{z{{{|{{{z{z{zyzz{|}}|{{{z{|}|} ~~~~~}}~~}|{z {{z{|~||{z{{{z{|{||{{{|{z{z{{||{|{}|{ +|}}}|}}|||{|}| +}}}~}|{{|{z{zzz{|{{{zz{}~~}~~}~}|{{|{{{|{|}~~~}|{|{z{{{z{zz{z{z{zz{zz{{{z{|{z{z{zz{z{{z{z{{z{zz{{z{z{z{|||{||}~~}~~}~}|}|~~~|{|||{| +{|{|{{{|{z{|}|||}}|}|}|}~~}}~}~~}~ +~~~~~~}~}~}~}|}~~~}~~}}}~}}~}~ ~~~~~~~~~}~}~ }~}}}~~~}~~~~} ~~~}}}~~~}~}~}~}~}~ }}~}||}~~~}}~}~}~}~}~~}|}~}~}~}~}|}~}~}~}~}~}}}~}~~}~} ~~}}~}}}~~}}|}|||}}|||}~~}}||}|||{|}| }}||{||}~~~}|}|}}|}}}|||}}|{|} ||}~}}}||~~~}~|{|{|{|||{|{| {|||{{{|{|}|}|}}|||}~~ ~~~~~~}~~~}~̀ހ~~~}|}}} ϴqžᦜǸ옕܄瘸ԉبťǵÞّ׺떀ѺȘ얟򢯠Қűͭ삁ѤΣּӇФγ؂ΈؙۅĪہʲ͂ˬߌЄԉ߄隯ܟՆʿݤ󫇃Ư䃠Ѥቹ̴ȐΡЌÚ́ϒüũ۸֏ŴӔ՛̪ȤʇѼиѫƺ˼οˊ́ՋᘰΥЦε։ͩɟŪɸ쁴ᔼѐٽŹ̌Ⱥ홒Рþ؃¥醔ц۸°״ҹpvzڷ󻅝݁zzvb`m‚|wϑˉʀ䥸ѐıٽªݐ愡Ńۈϗ敊̳ۥܰNjᏫȕვ데󅕥ӺฮɻȟρմŮׇ̼㼝ڑӘܶԡɀˑʁٶ⯯Μ実탊…ь榤Ԥŀ̀͢Ľ򟎠ֱ쟦󌏓ፊӏ߼ތ̇ӄ˄ǯڷ圀㦍쐄ػˏİߋ݇󧡀̱֒ˉ̸θǿŶ򅳼Ɣشǂ푀ҒӤԭտэȮ遪ʻۥꓰѳ³DŽŊǀם˄ӷ퀃ٹΜ̫᳸ߴܜDž̋š֒أӮ䌂Ԟ⺌Ȋ湲뷦γ̷ֿͮȽŊܽϙΒпݏٱ㿮ꇍ°ɽɸȺžоĽˮβӸ͈ʥţ픚ƴѻ݀ޙ߻˳÷౳Ĵ샐ʷ댗 +}_bgb_b`f^_`aeb_`ah86hg45455gec]YZXVaicTTVCd689:::5`576:::<===>@?@@?@@=<@ED?=<<>?=?@=9=A@@<=@?><=??>A?;;njgibbbdjiikonmpnp8:?BCNDHHIKGHKLJGECBBBDFEC@@AEDDDA@>>=<>=<;;=<==;<<<;=A><;=>BEGFGHHHJHHFFD@@BCCD?==>A?CB@@@???ABAABCDCBBA@AE@AB@A@@?BABB@>>>?AA@A@AAA@@?BDHIBIPPHDBDG@FGHGDCABBEECEGHFKHOF?@?>>??=<=;>A?>@?<;=;;888>@<;9>BA?==<88:@EF@81=54YE8ZM4g7%7.9.NoWbxyC7;DBJL:-+Q,-+134hc=H^Dit}kk99XPgdZ^J}scrbq}UdcW|}deRR|}thzlRG7'6332E11E$J/ImP:3J$2%6;D@BG@/,(0;<;+'%1/30$ 251+66AFWTL]RENbYASi_ntXZn_]c_lqWFKmdG5[Jqkj[1R&+'(*05q`Xi9{3Gaed|jHR;8V,C':#+-'29,A?$(17A0/;.+A"00#(@*-C''Q%<@=5..<:01 #('#;CCJFGE/%&-!"##!$VQ=UeibeZkw>0B_H\A{{@dqX>qVRP<04LbS+(!UhX?.UKRJG*!3\oǃKE:9[RP$-*F%-!-$)TC=3,0/01rok4-  # $Cfgb3EXD(3,/XS,.--01%4c|soesqdN4P_jO>.40//0@7LDZZT?N?NAnS!&5B41-,)!GG$=;9:5-,&8rWOYj\`AQ;Uc.2<14O2H̷sbqu`[XZbsnlho}qstbfyxVZ_lgfiTIOdg`WVLEFFFIAzyysoj_Z]8C5B,41LRDJ,'%235<<:8728=;=733U=+GDL5eIJoggpT]aj|jrfejgaiƿ㬫e}wxofhop`akl`ge_^vV_ZZWZOSR}zvdiV[Xvb̸jqg`egh|ijulͫѿ}ZfqsltmmZ}}p^VUQckE>BFBB<4DHELQj94;Y6EEA4BVVBHPG-NhfB6441PTfJX;4QKFICtOJteDa\ºfeVtZa`bkrswjf{~sdTNYeNEOSbFE<5\A5NAxze41155WIHLRTYP8<74bDROJKJF2>GD$$GF(%&&&'&$##'**)('%#"#$$&'(''&&%&0J2<@@DEH&&((\[DN`dYb@E>'+FpPPHHCKG[A@E[bB;454dSdEHQLONNQ=>]pkH.@:8;:9;64BLJH?djUBV4QBG8X==KWK=C>;747;;RSR>A?H@<FVKLC99AUAIRWMPDRHnhXQIFNZ]>`wi|cb`^C6?KEZbTO]4.+/.XKM>-2&Q37Ejd{PaTr\}sV`yqV_]_{aZ{ddlWeMWoSvcGjKRSE4b`[[[^\`\USUTkRNMLRSOS^c`OZPWYj\kkXJVX\aXadZ_KLMBlrUb^TTVT^:38SGMKmatijcivˣiiyl`]nch_g{hyrkyxs_Z~zfrqbazb_cme`rla}u^X_a|v`pppnN^j\whs|\jEJAKqk}qOZ][PB40398495431-4:FzLss|YjsTQIRbW\gXdbytstRZlleijRGFwW`keyn{UDIl}pc|W\jVXXHCexpwlzk_qpzjel|[TtZsiYd|[FjtaXtmafWBulHRAO^qy_g]=:VB;ViyaT:65NY@:AXgH%XL17BDQSaQ?A9*8=?:-+;M7FG=2>SR=%OBGP@>h4:=85%!& !#%%'CE8-KGIL*!;XK1MT<<8>@=>?>>?CB>;86661b1125;=7[e233989<369:8>E<>=@=CE]2-HARQ=`:>^Zeic_\^_Y\b:6YJ8\ib24884347hhcde_\\L@^h364:96467589789799;;9:8;:=<:8998877:753ab14332`6=:><9<@>?=<;7.48867968:=@B=7743aa337633a`123fd^\ZVZ[\WVab[699<7]VVWV]]UX\XSNG:??A>IGELE@OWY\_`_\RNQMF@CHRWZYW1XY[Y[TPHABJJKNQJMGBIIORMS^`]Z^e3c_c`_[]^[XZXfb_Z_`ZOPRPOGNSQWTWRXZ]`\\[ULGDGNYULKHKBKbbNQ>HYRGFEDSH?>F55=@:2\VI6W:507;9EGM7[HQW[LK6?XZ0PXQI>FP4640-+).25898:865533413230^[\]./0_[]_\YWVSQMMKKKIECLPX_YQVOQTSLJKFJEDJ<>?CIA?BEIKMHHILKEA?ADGHGEDC=?IFAGGCFGGDEINTSIONLNPRUXXVZa2_UWYXTUUSSKLNQYYLTIO7;:>@7WGG1FKJ?9wdi7\ZbMPH;=CPF7WD:-.I@ZScnz}FJEHWOWNOWSTSUU\`]a]]^\XYYXdaaWWb9>;75hehgjkih6khec`aehipofaede`\\[_gi8gghjfedggfhkmjf_Vda /141/0/2.//020322100-,**)/40))(-(86477755778:<;9;86  ""!&$! ! !  !"!$!%!    E+?[Q,1=8++ '%8<@.1+HfA6L=S!5+(8-:-81$:/++>W<6A)"%#$%$  -%$(*@(*# !D|k΄ncaak{sws}w|ip_^csmlkWIPfiaVUJC~ACBF=oqnga]OJQ0>/3"#$ 2(3RRU\MTYyvrZfSYMNXP~kIsMē^nfsteVQRUXR~VacV\YTOdwOZVTRUJMLx{rn]_HOQm^ӧϽo{nmuuosҷʼ񍻥ϻk^|ƈϺƷTfQPGMbpB:>B;1( &+&%&9-&&+"!/.&)1,/A?*#&#347&-$&C11NF\:XZȼln^z^iiy{σò؍xmz{paONV^G?JNaEA6.M9.E?{y]/)',-IBEKPPM>-0,-V?QG<866' +34(). &:)1112.- =>16BQ;84&+ ,IW.3*(!%#)!!+. )".!&%&#%))>?!!!&!$60('%) %,'# %%! !#&%#"%,-1*5553%)N ,02,<8:<#&2)+%!$)9(18=59,2*AA/1+')03!M7?BcVTJC.%*&+02)16+'+'CAS0=T8NiBa9QoP]R?5c@LF:_b<<9I85F96;.9)09%=4(8'26/!><8=;DSP`Y<.6/55E:=LB7/6;CMIchCBQ=;UVYb]X422+GP;IGAAC@D*""-.-*5)M@QWZt_tGN[W717fEzb9;J?X^7&%39IJC)' %3)25,;>/Q8@L02CB1.% *43*EJ73!#0<2 -',(#>G<=ASKYWU56G2J>;7,TA&)9)9828-B+""!"&'8&!+%271*! &8-*)%'!'@'91#%*=?;$2$9<)!", ')8$('"* ") "3$,(+&%( ##70E,-0&*,   !*.-+=!'//( 1&>*+>>0+(4,@, ;$! ++$$"+#%&#!($*,1*''.(&,-,J;K&;#!L;AGADF54=72=:5.>'-01M?6PgsQ:& ";I615GT:K>&(-1KOaM:4)&/0("5'990%.GA)E86=14[(.4/'  + 28*/.42)%+-}+/ #/($%,)*2"$'#(6D#?/,)'()10$9$,JHLMIFFGHDEE!1&,2-///01-+*".2 ..+! ,-,,0/-.,(*,,)(..*.*)))-,(+,*(&#  #" # '+-.0110*&(&# "$(+,+++,.,.*'!#%&((#$"$$'(&).-,*,0/-/--,-.-++(0..,.//..+%&(%&"&(&)(+'*),.--.*&"!#%*'$$!% $0/$%!+%!! )"#,)!( $+$(+""(&!'%! R*)())(,,+(((&%%$"""!$&*-*&*%'('$#$!$ %" !"#$# !!" $"!"!###!!#%((#('%''()++**,+&)))())'(##%&**#)"#)!##$#46/14&)% !#) ,$"5AB?@AA==>>AA:@>?;;=>=?=<@>>??;59:8hddiplmjggnijo<999=CDBBBCEFJKHHKIJJHCACDCEFDDDB@AA@?O<>A@===??<<<:;;<=><<@CA>ACDACCBDEHKIJGA?<9;===@A@??@?>@@CBBDDEEDBBA@AACB@CDDA??@0BA@>>@CDA@A@AABA@DAD??@?CA@?GDBFDGDGHIHDCDCEFJJED@CB@@A@>@@=:;=>B?=?:::>@===<98=:?A@>=E@@<.;>A>>B:3A5>eZZC,Wv=+UPFivOxrOZ:XN.0M,/1./-*+,60aVPlK>RS=9F\B=96,&$$7/33/4<;IYJo`Q5mBowbvsoS]XZWLf_@oyqgMI2cH3](*,(,01vkeleFKHKLCjcj\iwFGeb?4C*S.!""?<82=2.649%)&-/=*)!7<;\B5268QJ=E63/77248&)%$7;AD9IFDN>6?7C$=?6."(%)*$OrXtsV{bB&snvUQByylcO8JH|lIDd|2..cTbe{ DY?C^YX*VYwZТL>7@TU\39+@#686DQT<$CF);3;&@>-$&)-2:5+43C]_dHEM15;>XcE9-6,)17CST?0(+&!$!)/78+/)%&,3;FM+H8#0?EbV/C1-H4\5):&kSY:4G\627WJ7 4vIbw,P23-/,((JI#E<8<>45,*'=ckp}EeF6=c8J.,5BLSxuorm[Zrynunzuouxm_PXemgglml|zcfnkchYOFJGHFKC?iGcujMS+%9 8=-K=5G3G].,/36B70F3LLM[1@jeqeyinaxjlgegĽvn[t{z~ijp۵ĭZkf]aokd`\lUXVXUWQunZb_T^YƼrqÀmvswlopnsklޢ~n½pk~a{qtlkvyxzʕc`JR8=B<3UACCBYU^mSMGB3FMdbbnjhTdmKegJ\Sjϵe__e`]X}Ypotsنehgfw~wp[RDYeBJRRIICB93X:2EW~p43126eEIMOTVTQ;=6gYG~GKIDDA-CH#%%HJ%&&$$"$&'(((&%%##$%&&$$"<1.Q5@A>CJ''(--0eQOE?i^t7&.JtP8RasJD_xnE6><:87I9GB7=B6=@ZD=8>4+7GaOV]g[Zle[hSz{^zrNAdvwPPVI\D{ukLKIH@621`^]YV\ZTRLMRVILHWNNOPY_]s{HQPLYVWT]_Z[Sff_aXSL`p`lpzJMB_Ahf\]UUTPZVQ]AaDnm{Y`[jjeujnoynqpnqewg_^v\mcmh^eqa_liqbyysx^i~r}zpa`sU{d`[^pO]S\]camd_@>2^}zRiJISlhj+,4932053585&6TELVozeflv~tJ^_^Yxu|RaLxk]Ln~Vk|q}|sWoHhfaTlPKQqtmqgV8Qs]=KpsEdtp^yJzsiY[ozNLPYipYePuUPeZ{td4nbY[zBPr`\{QF9Tq;>G@=E2X1?L6;;+G0?,:?+9DI/+a5=\QFs5D>;:@@"#"$IVGDA8JRA/ >;/>><:8:8889=9:;;57D@48898977875222551545;;9:<;AF>=@AFCTETV[W]][ZRKQZPGFGLOSVYZaXZXKGGLSRUSTUPRTNGORSRNY^]ZX[X\U\VT^[_\O:HZ73R\d\`XaXT[UKQAQLPYV_SOTZ\VWYUKG<<@LRKJJG;FTWSTIR\TKJFGFKP>674CC613\:P4B71584@IJQRYMX!PQA38E>.51IWWU1962HN14754797787654324200//111_\[__XVVURNHIKLHHIPMT\ZWWRTTQOLIDFEAADCG=HBE>HKFHHC>FDAC@=CB@EFDEECCHHJJLCHHHEGORTPSPOSUZWXURMS`bYV``XPUMMGKMPOE@INJF_14?==6LHA?=GD2b^9.%C).1*% '[0#>>  +L5HQ@   +1 +   +      + !!!'   +" +# %! + /KL?`WK.'W_sbCBR:59ATzbODBA$EQcDDrt1*HNH/#<"-][jf{WzluLeAO('-Z@CGeO8#5'98AI6<@WZ`B=@!',.N[=- $"+5IJ1"  #)%/1$ :;.)!; "XFG,'0=(((3%A7P 0"##'$! 743,**(#%>oч/HA*) !Fꊮޅv`d~~v|v}xtbO[hqllpoo~{ehni`eW}KGEBB>C<;eC]lbGG"-!#$!)$$*+ ;C{k\Vnzo\wmfRFXLRRMwmzTe]ObginUPWPa]VYe`RQJ[|RTQRQQJ{rηfRRLDSSjn݀wus{uw|tyuːݭ㇁ʧgս˦]tԿ̃ǡYP>@%(&!%?8;0@>B#"!'%,-15&(2!#%/.27'%$ $&524854*38%69.;^IkϹlgfoiiglх~lz{pw{pmZODX\4J,I/23=*&A.<8"-+1:&% #)$%()"&163,'2-#! -:2/&! ! "#"/"6(+K.25321/#$.,)'556-,$!2'*365-17)569B27:'?#+52",G;VRUE6<+,+.57:")*(=' )4166OePX9_8Of6G<8B1_YNODV>'' &&! =<;97ABAA=<><780:029Fxm>9^3>JC\MNV55,=-GHCB>BD?C<3A,;(=16#.MHUqbf3<3G:B@A'2VB$#224qn!&*'*0'8M[r~hgmuVDlRMk\wU!j[IEDe4@AF$4E   % $%$& !+,0#++! ,' S+$:8-*@#$$4>2#!, /,*#&+ >DB,#1!/E@IH?;G7;?./59"7C -CXRXcKw2 !(J3!(<,0!GLC$-BfnK4+2+.$(,/$0#25!,9:U+0JC>h,522)(% +  >D410'08-!  *' $4$8?/991)%!%2/$BC33:*2FDHDD@=EPUOI>5/ $+*,+-+*#,2. *!# ,,-*,.//,*)+-.+(,-+/--**+++)**'%$#! ! #) ()-+..--)%'-'$#%&')*--2,.-%""&*)*))+'('%#()'(%+-+*()()'+(',).-% ($+0,/).*',(!&($$*(/'%(,-()+)$#$'###"#(+((!(,&"#! #')# %$'!(#%)'&))*-,('((&#!!"# "&$'+*')'((&&$#!"! ! "!!#$"##!" ! !!#"!#!"#% #$""$'()'*&&)*.++*'$',-'%)+(#)%%!%%&%c#&""" ""0/*&-#,)$#*(/3&' 64INcp~}>>/!0./+'")*(')(()+-,*..,1/-+,.-*-2/32102372001"3420-,-0,,./.40211444213443<8521偆~}~~~~~~~~}|{|{z{{{|{{|{|{|}|||}||}}}~}}~~~~}}~ +}||~}~}~~}|}~~~~~}}||{|{{{||{zyz{|{z{z{|{|{|~}}}/}|~~~}|}~~~~}}}~~|||}||~~}||{{}|{|{{{}~}{||}|{z +{{zzz{{{zz{z{z{zyz|}|{{|||} |~~~~~~~~~}|{z{z{z}~}~~~~|{{{z{|{|{|{|{|{|{|}}}|}}||}|{|}}|}~}~~|{{|{zzz{}|||}}~}~~}}}|{|{{||{{|{|{|}}|}}}~~~~}}|{|{z{zzz{z{z{z{zzz{{{z{|{z{z{z{z{{z{{z{{z +{{zzz{{zz{z{z|{{z{z|}{{||{{{||{{{|} + +~~~}||{{{|{|{|{{|{||{||{{z{{|{{{|{|}|}}|}|}|}~~~}}~}|||}~~~~~~~~}}}~}~}~}|}~}|}~~~~}~~~~}}~}~~~~~~}~}~~}~}~~}~}~~~}~}~~~}~}~} ~}~~}~}}}~}}~}}}~~}~}}}~}}~}~}}}~}~}}~}~}||}}|}~}~}~}~}~}~}~}~}~}~}}~}|{|}}~}|}||}|}|}|{|~}|} +~}}}|}}}||}|}| }}~}~~}}}~~~}|{{|||{|{|{|}|{|}|{|}|}}~~ ~~~}}~}}~~}~ڀ€~~~}|}}} 􀆉ſߔֳʡН뱤鐄􉩱꧲ȁՍռÎㅊֲطҩ棣nj̩ˮ镡غއ⭅Ô֣؁瀃֚²ʾґՅĄҷ㊦ͣԶĺݸ浳Ϫô闻𫜕דѢسឨ򋣆˟ނέ꾪Ƣ۟ܮȿշͧ䴸͖ڳɭʶľúľ։ɍۨ٥̱ѻܳ̾ɗ΢ôǵ򂩱ʻǧ݀Ǿ㈇쁇޵﹭Զv|yx͵Ǹħmjs~q…ڠٺы݁̐舖忟ȏ䇙ͥږĴ郇پʻā̩ʧ׹򄄃ȢȨׄퟎ廝ʮٻ±ѵɹñΗ݁˞Ұ怋˽ؑǵΫׄ咫Ŗ̬Բ耐ϗԎȼ绲݀ʬ܉¸…ǼݎݾЅ˯ںǷ˛֣í˺ʎҠ҄ⰫʛⴳߑԍꙜơڼϹϑݪɹ͚䌮ٵ⋀Ѕ캘腣Ӫ㑆򱓋󧮹ɐг۫ҋԮ⏝޴ݸ͒ǥҟĶܴİ¢󉘩¬IJᮇΛýד蝴ꐃь듳ޚ󥟦š׃̊ɧآ񂄍ŻӿǾȿجсӴøȿջ˽挥틆ûȺ¶ϫҚĶ܏㖡̞Æ̠ڹ텊^hniZajlmjd`cdba]_`aig4764556854`bca[bfcaQ[ae7879;87656673479:987:<<:67899;>@DB>>?>@@>@@?>?>>=>=N;;;:979>=oijmpromhhigkq9<;9@CCA@CDAABEGGEFHLKHGCBCDDCDB@>>??@>=;:===?>;<>?@?U=<><><<>=>@AA>@DBIKF>===<>>=??>@@@AB?@@AACDDCBBCDBCABBCEDBACB@???AAACAADBAAEEDAB@?BCBAB@?CBFFCGGDBACCBBCFFGILFCGFDDFFB??A@?=<;>=?@>B=:=:=<>A>9AB@>>>@?@DDDE99>:?A@9A9F4P50_1C&-E74LJRvD\a]::35?=;7642--.0035.850/T[XN=W]YcSD\Jweghwj7ktikqYSe|VqqSH6KDHN2:92E>+0Zx16%.6?"&,*)*)30<7(6+**+2+-!3=4**".GPABG1?fHu_DD\rgSFr+-zp{`8M5528!af*0,+'195$,,).1+#.1$&%u"0acRh|cKAVDx9PHoSu}QVs{-.'otT\Iyhk72qqeѩqM@0<=,%:Q,$.P>=?/?5/IH+20(@!3+&75490--%-,+H&C#?:7<5+$Mep`h\A9B@41;%@E5NxxZfx{}tlcbQUecUZ]\lsdYXX_nslbRNHQeaOPKIGHMBwHLM[eplUcNC6059B=@CJ>>7#::-)*0\QQNXKx|`VMTO~~}svg¼ijxvs¿lics]^jtycdhh`gbfutXRQtco_^_^VUcY_ldmjnop~vv~{unvvǧoxt{sozto{YO\jrTP6>Z9l8>>S?AgUc=BViP@3LN66:@?9>?eX7A<58JbKD?yS;?8442AlN?IWMY?DCJIIQBUPSA43A@58_7hZT4/A54@:<27:79C;5379'7;5D9`TVu]DHAlu>EFcfSJNNQP@.+5IJ=RE8[=:97EMZP[OVL\@ZLefy~afb\CWGWDa,8QW8/NGEbeM3?LJ[}kTu`hygjtXd_WzykL{EMGOLDFfRcQ`nQw@5.//\dc]VQKFDFFC`JeCjQP]g[\}MGKORF[UW[MX^c{oXTMvcWNscigKphvckT\\WUOQ<>T;]^kt^afkhZ{sskqwxln}qP{~tjmz\qyspZ}ai{mc{Vi_hh\kT_Ujbmhytebx@TzYWNH[VQTMfcf9D>1))-0:;848@@?czP[`kUQifyX\rrhaO|INKSezkx|t|Z[pXlRJ=pZZdak:olru`RgD@mQ_ODvoi_WmNXlXXlaL]mkt}vmeUs_XndYgJjworFK]DN~shpjN;tjC>_Z<=FEEG^9MTblzOIakRNGJKOLvjv~Ys`k`UhOtQ9S9=hQ=7J<>?>>703/588K+15%34+*21?3-B5HSHCWAO=6>J@@K9OA-4C=5=9??>&:959"M@1DEA@=ReV7(0>HmQT4F35C?::)%LM'*45/;e25:LW;L/hnW;=86:?   #9G+%FEFD#!dB@'6;=7DWD>A=96778222bb62[Ue87:;=<76946?=;BEEED:EF\AVESFH5;BNJ@:?Jb<;V4TWcFU>.WZ\Xf@<<><64@<569877~7:;:98775b3466566;:977:>D?:?EG:9643256dc_]a247f`_bb_eef`^ba`6i8::6^Z]c[U[WVQQLKIFAAD@?:<[\WY`[Y\Z[VNTZVOKHLNOUVYOMHGNWWUTSSQSSPRSTPOJRXY\WSUUTKGU[\YT=N2243d\b]a_c^]_UQVFJM[c[\UQPPQUWSKFB@BAHOGNJF@CIJQQTX^cKQROTGN>93^98D@58;3??>8>:><@MR[7XTLGB15DEM/;.[MTX01KMN0.+/4668566454445335432211210/]^c[ZY[WQKOORLPPPNNYXWSSQSRNMLEDEA?CGEAAC=:9@;>D6XF=8AECCCDA7=BA>9>?LIB???BACNLPQMPOTWYSQSVRUW[Z_Z[[TRLHEOHDILIJPV>KL77==2JG12FA28U?bOWMa8BR_UZQRNj{=Ip`a\adOKY^`]T`cgc_[^]][ZY\YXX\\]^dk9hcbedejk676p)iheb\^bhhhfaej6h]^aegigdeddeggb`dg;=;tljg-253,157641//110.-/141-/00+/221'+-,G7689;>>=;9;99<> %    !!  /" #%!"! !  ! ! K!"#LP04+*#5]>8:+!-<(*+*8-&-& #:*&,9<#!6) $&$1)%Q`"#!!$%*%$  + & +  * +$*" ",( + ,'!H7@%@FBL+=-  +  + #5  +'     "- &!)%$#$ !.$,) & +(6- -"@'8 `O +C^ CW%(:. -  '+  + +       +    +  + + "%  ( . ". M) + 3568[4=,@1HQDC?1''&$#&$!82-'(-$QjM:.  B⋜bx~tljWaonY__^qvj_ZYepvpcSLD|Pb_NNJHCCH@oyCHIV`fbKTB:/$(.1,./4.,('& #@9>:A8mghRJ@FrsDyi^\\T[~L~te`ZZXQcuOHO`^ZZ]_SXNPaanRLH{{lbyiƴVSTQEFYRZh_fjpmiuqu}vpyځ匉ֺÀƴsFqr¸ʹÀov~{~}qsrwyysjYN8UG=DM>DC>..,*Q8Y=nv`--*,/G;@BHGHC//4OROFG@1*--"8/041P14231+Bl[R22#K,L:(+185'/*!'0)" >'6','3! ').+..+'!)"%/%!&('("!01-/# 5/*73(*(ET--*63((..41%.6)80&@,)'$-29-6-4.7"3*9A`pTXN? J0)3(3/2!;/&&(&"*FA3M;??=9563,F4@O)H9>KZMHZ3.1//'9635.554FGAy}i>8WkF;7PGKG]6LEPCL<@CB@9:+*6 6173>)0VAP:<6*?=PRSQeE\ZM=BN@F>1M2MA8:T0-2=753:T7J&=96#H;M&5&71.9:`PE6 4. =CJQ/8Q"5@>)HQZKJIL0<+A06KR'VJ.%FQB1,F$!'"*(%0#3/#'*!6:'+*WE+F3/!$7&%"##" &+"$,*"%$+"%!!%*/"'(79EY?:R>=:71K0431"1!Q>D5'H8QN '"71%'9+buWJ_|uzfbZVDjZUkcSS1Sb]_5;O7-;4(37+ # 3$#$#"+ *+Q@6(Y* ?'.'(*=+)())"%+-5!!!-&+#5*>LB?V?J8-4B9:A+B3!'86-229:1$%<7(1+-25J[H(&:CkL>#3!'81+,<;!,,&1V$#&=C.>$YiH-23+($ +  16///25! + & ! ./*[(0 &'6".*4*&#(.-%")0@'&;%BGK05+"DEFCJ.,OX_UE8.*!+*--)+*-/ - #%6 0/+)*1/-//-100.--../-+.0*',)*''$$#" ",,*+/-,.,-+'*,+'&%''(**,,,-,('$#',+*)'(()''))*''#'))+('('($!()+)&%0+/,-,.,,.'&)!#%,1+-(&'(()+)$ #&!%#  ##'')*+-!&%$(!%- !$)&&" $!( $$)+.*)),*$"$$%!$%%$$+*(&'&''&&% !"!#" !!(# "!  %$&&%''*,.)'(('()+()&')&&$"!($ #$##'+""$"y!(!0(/(5%-0+/),)"919Hgzx6.=.--03&$,./-'/0310,---,,-.++,.--/143101004263430./15532/143../222312121462034<763 ~}~~~~~~}||{|{z{|{|}}|}~~} |}}~}||}|}|}~~}~~}|}}~}}|||{|||{{{||{zyxxz|{z{zzz{zzz{|{|{|{|}~~~~|}}|}~}~~~|~}{|~}~~|{|~~~~}{|}|{{zyz{{zz{z{z{z{zzzyyyz|}|{{|||}|~~~}~~}~~~}|{z{z {{{zz{zzz{z{}~~~}}||{z{|{|{|{{|}|{|}|}~}|{|{|{ +z{zzz{{|}|}|{{|{|{{|{|{|{|}|{|{|{z{z{z{zzz{z{|{||{|{z{z{z{z{{z{{z{z{|}{z{|z{{{}~~~~~~~~}}|{z{||{|{||{zz{{||{||{|}|}|}|}|}~~~}~}{||}~~~~~}~}~}~}|}|}~} ~~}}~~~~~~}~}~ +}}}~~}}~~~}~}~}~}~}~~}~}~}}~}~~}~}~~}}}~}|}~}}}||}~~~}~}~}}}~~}}~}}~}~~~}~}~}|}~}~~}|||{|||}~}}}|}|}}||}|}|{|}~~}|}~}}|}|}}}||}|}||}|}~}||~~~}|{|{|{|{|||{{{|}||}}| }}~~~~~~~~}}}~}~}~ـÀ~~~}|}} 󀆅􂊇ý:ݓĦ툠䩍ΛłӀÈ܀ɲؗϮܮìɮě▒纺كڒÈͰ酂‹ܭϐݶ〨پ˝ֻֻ¸եǻdzצǥƑ޹ЕӇւ샦삣DžנąѡɶԯߞęỒᘧ̜Ъ˫ľį헇⣮ےᲚљڢңЦťǷǾʰِޑñß좉߷Ɓ۹Ӽ暀Ƅ𯊘ԃۿþƷݾǴķǵ­灀􆶢蕂¦̫µӽ쇌愈|}Ҽŵ׫zcqwƨ“󈘝ɬōۣؼŸ糬ׯˮشϫ䈀͹´撢Ҭ׸ؚɮ⨄ÖזĽ򻑉èߢԇ̯պžʨі貕ƀʩꮼЈ׃֒ŀ÷ؿɭڦߟŧǛÒ¬⃌ˋŲǗѠȗÑҍԹހ׌ڕƌ֠Ѯٹʿ톅㸣̂ڐ覫ՑúևȜ溬о捚ư鯯ɚ҅չ田ڽԺ욏ܻǚՋĀ󔘻ٸ¨ܰݒŬȦݷΌ΀ՊǒъЦαُά퀗٘ȼբąˌ襰ôːגޮے֠n滮֌炃Ц͇՘Ԁƽʸȯ÷̺˴˵ſڀ̼¦烥݄οᔉǴҀǼԹ麗菃͚ΰӆˮ-:;Erdbjh7:9mgca`ddaj77h^_c569985``\\cg]PUfff58569977877652]cf354567665456:=:<:<@@?@@@A@?@CA@?>=>@A;7lkhfhnqsnlnnpu><;<A>@E?;>??CDEGHJIJIC@BDDCA@@CF@=??=:::;;;<@?>>>ABBCA??>=>=??=>?=<>@@@BDA@?>@?@@??@@BBCDHC@?@AABACECBBCB?>?ADDCAAA@@>?@AACAA@CBBCEFCCA@CBBAADCCAFFD?ABDCACDD@BLHHDEEFFEA@AEICB?>=<<==>><=H@<;88;A6;8BRLB>=GA?D:<=???DEAE>/T,Zd_F.2-7J>9akGSUJZ9AACA@=;6043640020/320./1Sg\[bkz@aK_rXT~iqgfUWwIwb`q|I\QVL53G?8EdA5(?,644#),%#-3,18(349@@B+!$(2:?>A4 &,&0M-19>%+MCbeI;X}OgnZZ\MVjxK6@257@<4&-/8'&"192#BEXiMA?gPmA/y4!3cJY;Ks_Keyg@@L#2,E)6,!/:017&0465J6<$21%.=C]P=7:JRL*(2860&'<#1#R*&564+!@:G6.78 \m9c\}mjN{X[&$:~p<1}V-qnT-)\S,z)myQd[wKJ`jxw6H=h||lmjdG^EJOR=*=E*$#)%mL&mwmVU\gfopAjepvogvUFD)1\E^=Q88aTBFo\drjRAsgKOa\C;IT]J<4,,"&:IT=?<-).4BD?<865567<8-3>>AFGD=X, '?)KTH86AX30>4U_F0:1)43(1ZO>42;10;5@,c[\=AGSI:055210.-)&&=8;9485?zdcnW;/QY*%9ESb:ujvtc{iw|qxtrnUhglqX[ienj_LjluMJaRcl{dZSZUQU\]]`G}_OWn[LP?;CXYTLGZ\cmhpivqgv{lx}kOyvOd[XZzrzidaeɷѽyp޴aluirhktdhiq]Zoksskxow]rmi`ZTh[ZWWZd\ϸkuoz|{~szpngͯoxspƴ}wxbutpgyw_jMS})?GJN:cWG=la:]k\V6B9U<;TWCY:T[5]^73<7ZUNP\e`<6fUF?W`9RINNA<{烅yܷw~stsqrew{mrk˃}k[g|^anweXJIVFKMpB@=3=615:NPtkdifh`BHKRZXZ[8=A2ZE9FJHD?@;.JH%&&'(%%%&&%$$%)+++(&$"#$#$$%#! @=(?D4==CK&(*))),9k>~STC.dJGXjIqKtTQPN7+0<6YcagXMO:87(6A4LRC''-5=>PUAO>j>cWcX_eJ>b?BBA;8IDFTTadDRtRVlp~PbceF&/*'&7SEH]c`/U.LET6EA>@E[ABgZfogyliqgyaKP{urkftwx~Div~qgpYfdQWh]X;:83/bcaZQ@KQQSQWWgcR\@OPY^jVhCKOa\TSURRTg\Zt_TylJNpe\^jf`ls}ccdZ]bJAP8DZZhhdnUsnۀqorkfnmnVWep}n}ttk\nwirpi]duph[XlsvYdTsecYli^puiz]lrvdsZH\SajUiSPCXU}hYOs<))(,??8752aVb3c^LRQZj;yB>>=64677::=:89>:3758:=<7674Z^32424<:89;99;B>=BEC>7:;ri8<=?>;:>>;8633323e]VN_43e`ffdhb]id`^a;k787;74_\XVZUX_[TPOKJHD?@<=77[bVRV__ZY[`YUZYURMKRPPUWYWYYVPKHHNQYVYXVVRQUVUTPSOOSTbVSWUQEPZXQZab^4554e\[a5c`b2_ZZWQBPXZXYTSRKPSURLGFCFEAEFOP[QJDBDKQU\abcddRQKD9>74/;BDF=7HMHC7909FJPPSRRVURSOQRSWVP23]YVROJE@GF@EGEL`XH>/37,:`@2BK93g]>8YZMbY>NSE:?8EJ*1M>DHc{{}! ! !   -  7 !#    !  !!$! !!"! "# !+'!"* %(!  0XB"#%#5[i;:;<2.')**54!7+( +#(/5.'!6(" "43+7J3%'! "'$".431&+** " + + !#! ! +  "=G"1E4(9& '"),     + +%% "  $4 #! + /$ " % ;71:@:a"6 #!`dnwmjuN<4$M7Q9K15]F59_S^kdI:mdHHWO4.@EIEII/14(M<5CE9+&*-(:. !$><,2/11B.\=O3+@-0(6I03EWoCUPI*'$410)(&/ +">56=GP>GZ=05^NOeNRRJENPP\P(7@=<8.9>=?::=GA4A+6>GNSCHT+/-663320K//:49VKxuB`Yh67jQH??LHBINY@985:=2+9%.9383@*GRW?=*E5=>J9UG|LZU`K??g@GW6V<2L-22-'-@0.;96<+;+?'8A5X17.7B)8J4Y+3/1!%0=9?1;AB<;@rI.'@6K+/1'>-8)8TG<22/264"$!$56(#%+/*,'[XbxmiZqfX_L=_VblQh|r\8=[kyFL_\6+^q9W,4( #  * ))" -9(Q$/)%15,-5*'#0.- -E9.#/4$!&)IHEH@7t{s<>8>>I-)2)&//6(B/Vg+=8/21$:KE6#..^821,-H<970+:6&14P9@J#(#3;(Q[C0791! +  +''4*&! )# *$*//"%$)1! !"0%"9;1,/:65709..%AA@BAAA@BDD@>==<8igag46;<<;97kh_`cgios:polnprqp:??>=::<:<:?<;<=<<=B=;<>>=?@AA?@ABDGKKHFDFFCBCDDBACCB"A??AAABADHHECCBA?@GFHECDBAAABBCB@BA???ABAA@ACEEDCDDCAABCDBCBCEBCB@AAAFFFBAA@DNGGCACDIECACBGBBC@?==<=@><;;?=777:<>;;8C9:A<<=>?;LM@KB:@?>A?@CA<73.M0q( '=HEqKIVD=999;=8333254501/22540050bQyiYThh`GVV|yszOM`Nivn|khZ_nLb>KWuoE@(3)1LC2$',/-(',.-6,825@B@;1'!%2#$037:9,#!%5854:9#)2`[5Ty`zGHOj8>H9V0$<)981-./:?B9664++*B6czKWRJEm7?%=Z?SKBIWJ]b<>STbhlMFM!.6,75D/-56&099/9?M/,O%$BUC+&8A>9B=:(9<3+,80/!(JcUnVp]1T9vcJ(##?E5aiiiMVebm\XMf]ZV$&C9 QZneJVgcg.- iMZwnjTlbandhjÝ{N<112/-bCO52GF*@01B"!3VRgAGjxsUfYSFA;YFCkZGHGJbKB?I@Ld^TGO6.,,30SC6@?RA>?CFIOJEEA?AAA@EHLJPJMLEM:.0QT?:Y$'*9@35FN6WP@&'*.&'6=057@5=H"1-ZtNKSnx4805541.1/'B>:#@-0O@Hc__7VN)"-7%1/Hnuxkeffoy|vjAJTQw~hi|~{vrrNPYJ?RarmX]NzDNMNjo|RWQYVL^bUW_TCKVSNGMSJGCMS]Rbo`ZXYZnk^\oqjmu\`VSMLTY^lbz}pififigkŸkɪп«p]dnlkfVba]kkoyto|ukŁZwqmWUXQT\^VYmwu{ztwrmkxn|ՄǢ{lajˍo|jqTgiFq|uI?D_9\L]U;:6[KUJdD96:<78;6Mjnghba_LJNTMR\V\8=A;8/YIKFA9;56LH&%&N'%$'+-*'''$"##""#%&%## ?=8+T5==FH&))(((RHjjjouL\IF|T|P0XCXJJOVRO77956agX\dHA8?HX62AA7DL:b]RTNP]N41?>EDVSPJ1DTO?>HDJQPEC<8?=E:ZP5eP?5<31-:83:*;E8824=BD0ZYdTGOX`\K;?:>cQ@4B^QP8bU_8638?e7;;<=/W<11;:;;?<7=I`[mFrWKzdgmmuo[TinXkAkSR[tT_nz]VTL|Xyc^wh~pMVWc[LOELDFYqLkjaas|rpuQnenqxqh~ngItdfchW|PZ?\;\JJjnqiH73KE=7A:0%1D@=utcN\WmQK?9?9_ABl\VeB>sG@bqh46CAH5=W90B7:.QNL?BOESA3HGH>E^S?97@NZ88<B@B>=@~=;953c][14fQG^c7:>=906b359<98@FC5M1I^dN976WVJliq>BAnP]<\TX[UPSZ8FNHILL>ryKajTvB:57537>?:;86433aZQLDHDc8258=:8:::9;96889<;9978:=@989;:58847747<<>8522`232334>85:=@@@=>DIEB?>?=<9::?@?AAA<768453b`\WIXe72`c464debdcffkB:<@B<5da]XXXWY`VTSMLNICAB4X5bi_XVUZZZY\^\ZZ[TOLJINMYVWZY]ZQIJNMSYZ]VUWTST[YSPPSSRV[VPXRPKYY_^UWUd<9c_YZ\23_``ba[^[TOLQSQPSQPQQOPNMKH7YB759>EBA7[A1@DJIKTNWXNNK=OFIS@6RKZ5APUR/1RQ-V,05210112216564432111334320/_1^]^\XUSXUSRQMNLHWXNVXQQMLMD>8>=;92[L4CHIJCOHEJGNGCLZQDADFKFJKKOEIQEHGEONLQVSSURSUSNRQKNR^SLS`_aSSSMHC?F=@FFP[WF5W8711EJ8?@73e\?;VdOdA)1F@SVjyAB;Xb]Z\\XUSUVXZZW[lh_fbYWYXYXXY`gh:gadgf`be_Z]_dl7788jj486=kedfeccfcdcd^acjifb`ab^bb`XUlm;:hkC5763250/1.&-2.-,.032,01021.-.,(7832351247:==89;;: !$&'$$"""   ! "! ;      ! &!"!!#"F"##"- + + +<,*."&=a;5=6/%'42)0.$ ,:H3 "!0:*#!2##+;&3<6$2(Kob4'"0& &'!$/0-*"$&&!""# !  + .   #  !&! %e% '& +           +  $ +    )*V/"( (?5+/ !#7"(:/ 1AQn?!,=:7 O &+#%+$ +   +         +       +0* %/6  " !2<66:C?SXOF;62U'*-G>FH1;*+)!  + <e*7F)8L@-*lm[LfJYsnsϠNvtVJ5=T[e7j`\[02O@@cQBCACY@35B8E^RD5;)!"!'%F4(0/C50--56;852-/20.-/778=8>=31% :9'!5&+ )0&:3'#$,.5*)#  +A3+8KUT*0&**+(&'&.,&*%CIUZZ`z߁êy|wrvsx~oihm|ذr׿r]qsZvcZIYRBGWD<81+-1.170Gk}h_[RRRA>DC=>CDI045.+$OGE5$ '+09-2  "(J-1./-&4NNSNI-=01WR7T54)8('*+))15*.6$+,0+0.0<,!($*$"!$ ")+%! #2+;.#"%2/4*%+698&""'?4& &4(+ ;5:"# "(>!%%$':((-=&)$)?78SC;968<;HF5mO>:FHQI6;>IC116>D..('";/$4#) >B=CDDBC==P37.GEEBHE>FQL)0/),23-.G;*5)[qL{mnY[[Z:[FFACEBGGUC=(082-1/)<1*-);A1LU3.7-E-68J6Y\AFE\8YBBPbn`680?I%(391%=*<2268A@(-0./<<9;+,9+1'(LG/B?D0=1)(HO64)J:;D@L1-/&)&6SC".QFN'(7:7*PF74$%%#($%.% !% $*<)>9) )%8$-"5!*+((,-!!$! $$$-$5+;#)!$ #%'?')"+&1$D0E,;09DG,H5)!-;/1<&26E=55&$##%2,;(A1+!) +YmQhhkklhTne~Y?r_{^YXGmIS6M1RAE[O?N4.0-  .:%/ #* -)(0&!--- )%5:1#86,=<@$%#>,:)FBJPDIAAE+471023,Vc,)&# 1!,"%"! !" ..,)!)/.012012323  1/-+,*+,-)))$#&$!!,12+))),,,+-.,++,)(&%$('-+,/-.+'#%(')+,/++,+*+/.+))*)(),*%*%&$.+.-)*)1{-.**,-++/0,/.+(%&(&%&%&'(&''%$#- !#%)))%%##"',+,--,('%!#%#% ("""&!%'"#"$#$ &#%"#!#*)*,+)%$(%%$$"$"!*(#(*%%##% /%"$$% &#"$"%!!($ "&"$%&(!'!$#!%%#%'%&*)(*+()'#$%+&$'+(*%&%#!#"!&.,#%$| 3-!*6)<"&*-3%%'"79HNev>:&,--,./+*)+-,--,.64/41,+,,,+,,/3231264012-*-.1534332431020112./1521101/.021,(5745~~~~~~~~~}~ +~~}}||{z{|}~}}|}}~}}|}||}~}~}}|{{|}|{|{{|{zyzywz{{|||{{{zz{|{z{|{||~}}~~}~}}|{|||{{|9~}|||}}}~~~~~~~}|{|}|~}}~|||}|~~}~~~}~~~}{|}|{zzzyyzz{{z{zz{{{z{{{z{z yzz{}|{{|||{{}~}||~~~}|{z{z{z{~~}~~~~|{|{|{|{|{|}|}||}|}|}~~~~}}|{{{|{zzz{z{|}|}~}{{{|{|}|{|{|{{{|{|{z{zzz{z{z{zz{{z{z{|{zz{{z{zzz{zz{{zz{zzz{{z{zz{{z{z{z{z{zzz{{zzz|{|}|{z{{} ~~~}~~~~}}}|{z{z{z{z{{{|{{|}|}|}~~~}~}}}|||}~}~~~~~}~}}~}~}|}|}|}|}~}~~ +}~~~~~~~~}~}~}~}~}}~}~}~}~}~}~}~~}}}~}}~~~}~}|}|}~}|}~}~}~}~}}~}||}~}~}~}~} ~~~}~~}}~}|}~}}~}~~~}~}|}||}|{|{|{|}|}~}}}||}}|}|}|}}||}|||~~}~}|{|{{||{{{|{|{|{{|{|{|{|}||}}|}}|~~~~}~}}~~~ƀ~̀~~~}|}}~ 􂇀ʺ됏ȉ偲刜ӎ򏒪ߩ͂ڱό㩴ꔯф˅睩Ľƺѹп򼛖놤‘Ѳߖț΄Ȩ̢㒫ѦꮪտȈijݐᴜ¿魃Ҿˮ缰Է֚ѠοሗװϏӿŶɝЫܪĚ׾ػ֋͂˜һʰۮáͿϦһ޼„ީݝ̼ۊоɳʟ›ϱρ̛ĦܷӒީ㎐׼馦♆֔򍗚סĔdž㉤˰盝ʋȦѻƷ߆ԭ拙Ýɶ勌{twxѫpqicۙ逨߬ߗ˸μƀÛұ䊎ߺōӮ±~캺̪ѩބڃ÷ˇ猡ʷ􌝩񂈶ˁ˓ȼƭʔ޼۽͠ҭŵҮ°℘ާŵ逗Ħ뒑ɔšůȽνꀾÜӽ󀈆Ҳ栔Ԑ狧ʻеϙԊܑ떬Ғݣ䚈߬築„рȺ◚գ؟Ģŷ݆ǥԄټ⽩ȽӺ驃ˆ׃勥㧠ɫ֑޿׿ѱ͑Ӏבғ˴ңњ€Н؋愄Ꝓݨúʥуѻس̛ѵ󐘊»ͻؗ׮Ϝѳ܀믪ņ΋ڊփү̄鎭€ƫֲ샄¹ćȼɼľı’³Ծⱳɴ㒂눆հ϶Ώ抏½뉍ſðθʺǻǻ鲪Ϋзȱꄉگ959;77im:?=>9967noihe`aeb]^cgcZ\d463c_[`ZR^cf:<89kh68;<:65764379<><;;945788:=ABCB@B@?A?AAA?>=9:?nd^n868;;;:;996kigbem>BB?;uqomo9;=A?;;9::;=;=>?@BEECFDDECCBCCA><<<=?<:9;<9;<9:?@BFB@??@A?A?@BDGEB?@A@ADCBBDCBDCA@BA@CDBABADBABBBGCACDEDCDDC@ADCBACCDHJGBBHECAB??DGGGEGEDBOF@?@?>??>=>?>;=;<;<==@>GB;5@CDB@?:5<9;;X@3+1=77Ey{FNP,588AM@1:1,8 7.'/35&{rptzwyihG,1(2`aPWghO\k!`saTwIY|]otD.Tv7[Jiw×zuluvhNw[K(813(('24H>PS.I#'F,6%5)#1(+','#$(60A<1 '! 9645?20@&+ +NaZsM>O5!!9&FIcdmvWi?zDgp} GLA4=>/<<9;:;6E@<*839IRZWPPIB7QERlxO0KEH;/ '!# # 0l_Y{T\sjj+nfNUYS}`VOEnrJ@`h@TX8G[a<&>XefgM6+BN2YbFhD3WDZU,ELO>!=J>5 2<)1MF7PSQPNIHLJN.CSUNNDL3'NN+/SLj*));J0Z(*E+2YeSF/*23Q08AC_g;XB7FQNUSKbWdz}݂x泷񁆈|~z{~paku~Ð˲~xikX\br~l`MIYNHOI@>:1?;973]\zude445LP[JHFH44U;??8545JHB<:Y]<4iO3QF=:34II9W18>5M[|RM\WO>9CA75>9819;BZFK^XLEI?2203X]0*-7:A216=GEF8FM>IEFFEFF3:eV)2EJPDA>d>Aa_f4i=5>>155>?NNJYTDFYONZOki`RZN;K,._B=PVDPFRX7G,6(*;G`.%!:<+w >A!2?FdL@OGpvJ.k>74<88+D=368.Ae92L99IDE*/@N3VLZL1@4\CV_B@@YQ:BxJ9SY6+8IMTY1TM572=>8BPB=4:#? $D?E1(UA%%S=F8!UI:93J>B@>8>:BDA?;<9:;71a]Z]\]OP]f889<9857843444:<9:<@=74233474478;;:9:>B;;@GEAC?>A@:56:=?@AA<7426:4`a^YQQae54ae579335l9jejm7:AE9`\__[[]Z[ZUTQOLJB=:H-G<;6^WUXYU^\[^^Y\[WPNLMILXSXVWWTROOMRYZZWROQOOX[ZSPQTRSUYaWYVTLS_c_YZVQ[f`WUW^a`]aa2`^b[TNJPTOQUPRUQMJGLMCKaQ=;ALSOJRWUSRGM[[UV^`[UM@N>ECGPK8<@@B>;I9-AG?BC?@BKRN9PWB<17E4A=@8:6a8@Vn@VEYNI[TOH1:+.:IYcmzD>vY[[]\^TNQUUWZa`_ejghrid``[WVV[_^]]_hmpoi_`cccehgk=(:mhfg>;d_ikk^`dg\]^^bhhg``_baa_^^H[kj:7k:45 696640.//./221-.010,/,'-/14184051146:<  <:;:9  #/7=824222,$!"  !  ""! !!##" "'  0!" + DF(*  !Lj@\+($#65*"((!.,;,0(&*"(=316;4!"=7?9!0"+eWP!#" " &2./81"*./   !)##   + +  ##";= ! + +  \$!B  + #! % +     + " "!%.DJKOh dIoK^ +!>4=9:0>*&NK`TPuBcC7]DWU+3P0.t"'6!-!F8(*2          +    +   +  "(#!0 # ')&($!-++)&/CNVQKF?7*7,4BSH5!9:6'  "Na60($25A> ebMNSRy\URFgiC;]f>OQ3?RT43O^]_H1"5B+G[Eb<.H6OI&9?D5.8-!&,!<5'?@>AA=;;;<#8FC 6 DK?@84&'D343*%&,DA/$"+G>51/ !55W.1/."BHB?La@A25X3-G0F:C-'-,82.0*'(61"%($ )'0'2J+(&%!"-%(;1("''51"")!*#,*&'$&($@3)*.$%&>(,>@D!A(!&("#(&0002..)2/7Cj>X[XFC1$ - %#%1'&#%%.35.C=621>:,1FR?@JMQC@PK9<4AJ=5!%"!!EDDFBDAA?BADF4&2;*2*-;7<68@3>7/F<331>-<77D3/5.;pMTT9\>THk`Z@HE>*%.$1;3$ <=C>-+83*5#8EQ.;,HHA !LIWE35D5'@')%)0'7D.,@NDO@A3%'*G%0+J77#EK@-4;G)!!.!(&!%.%$1(!!4/FG"&<:/8' ;,#/#/2'-%4#! #5D$!  /5$'*&1(2')(*.><1!#-><:@8#*#'5&2=+0"''5,/6)0%9&## "@7EQfW^_bYQhU;8HhrgvtLH/9?Y8^B\c?B$I66&0*!1 !   $!+5! /4DH.4M$,/&') # &&4*N:KR757VM38hD1DC$-;BNO*A:)("23/;B4-(+  + .-(/?/* ,!" .*)***#}%,.##+;8").'"55423!(/1$?@?JTHCEFHKEI(*+U\x~U@@14* *'( ', #"" !  ! !...,%'-0/155143!0...+,,++,)(&%## '$+'()*)--,-.+,+)'&%&&&,),,++)((''),,-,*()((,/0+)*+)))*.)*('$)./,+,*'(0-)(+---+,+..1-*($')&()$&)'$$"%% $.( !%)&"&+('("%-*&'+,)'% *!!&#! ! #$)$%&%$(*& #"$)((***+*('''%$##!!)$$-&%""$!!1, !!###&  $+"!"!&$,)" &"!% (%.,(&,+&#)""&*-%%)'.($*$! #(&)'! 0"+=2#0+'0+*'$!0BO[gs>+?(*,./1*%&**+-01/3635=;732-+*,.0//007::85002320325'750.2/666/.13,//.2412/0/0///./!-453ȁ }~~~}~~~|{{zzz{|{|} +~~~}}|}|}|}~}}}|{{{|||{{|{| {{z{zz{{{|{z{|{{z{z{|{|~~{||{||}~}||}~}~~}|}~~||}~|}~~~~~}}~~|}|{ }}|{{zzzyz{z {||{{|}|}}~}|}|}~}}}|}~~~~~}|{z{|~~|{z{|{|{{|{{|{|{|{|{{|||}|}|}}}~~}|{|{|{z|}~}}}|||{|}|{|{|{|{z{z{{{z{z{z{z{z{z{z{z{z{z{{z{{z{zz{}}{zz|{}}{}}z{{}~~~~~~|{|{z{zz{z{z{zz{{{|{{|}|}|}}|}|}}}~~}~}}}{||}~}~~~~~}~}|}|}|}}|||}|}|}~}~~~}~~~~}}}~}~}~}~~~}~}~}~~}~} ~}}}~}}}~}~}~~}~~~}~}|}|}~~}|}|}~}~}||}~~}}~}~ }}}||}~~}}~}~}}~}~}|}|}|}|{|{|{||{|}||~}|}~~}}}||}}|}| }}}|}}|}}}|}|~|{|{|{|{|{|}|{|{|{{|{|{{|{|}|}}}|}||}|~}~}~}~ہπ~̀~~~}|}} Ѿꅃܸ㈌ŨǴͮӡͬǖ퉗ƫȪąŀ҉Ҁ̥̼˾ߎვº䅔І㖩غڋљȇȲϖ峵̏ŷܷཋ饬鎒ƒꠜϚʩ뚳槞悓ဩ׵۔۾Ȧºŀɽɱ½Ţ￧œɓ܇ٜƽ򐘐锜‹│ڬʲȸފխɣÙɛ܄䟏݅츼ͷ¼ꪬĽ婯室ī뀓񏛘ٽҳ䇁˫塦չݿ}}t{vq_阧˞ŻӢ̐ŷ͔ŏҗ޼~򏖇덎ޝϞ݀϶̅ٻׇԨ̻݉͟ґڀʳռ΁ؾ̤ӭ숎˯ȳЍ־҅͠ȭ՟ܠ򑢵ነფž閣ϵÑҩٰ͕ʴƧѼᰘݪЩڈֲō̈󔐝؍ڒ𙠟ߍ݅ƂՎޠ݋赖׎ȴ툓逆֯Ƿǵ蕻Ȼ秭Ņۻݴįи´̃Ɛȳ똬ӯν̉Ȩ橐͊ة⼅ˆƟҺ׹䴴Ɂ೦ʽͿ脖ŦԵ¹´˞NjŀЁ݄҇ߧߚЂ⃏͞ƀˠֶ􋓍ִĻö߀Ġâƞբ楱聮ٱ勎ԴŽй¿ݻȾǻ縩ʞ޸˼煊ùԷ;97765fg:;=;789;;;hdnkdcfc`ZYYXbh84f^]_\\]_d68pjjghje46767666789;99<<==>=?>>>AABB???AA@AA?=95igg:;hcdj98kecek<<==<><9-oqp9;<;<<<:<>>??><>ECCDCCCBBCCCA?@@<998878878;S:==<=A>>@BHRapypj\Z]YXWRHC@AA@AA@AABA???>@B@@BA@ABDHGECC?>??BAAADFBCC@ABBCBDCDDDFAB@9A@BABABCAADABBABBBDCBDHMEFBECQNCACCGAAADDBBCEA@B>>?@>;=>98678:;:><>9:B>==;<9<@BCB@><>>==95C05&H>6?IbxIC77;66632475336332434687N[PF\ZPR@jMHHQFYewrixe~nywilf{gbWoG3J0*5E-10.-*2:2)-51+)6:=?CA>B6/$$'%%!$(4@MI-#" !#,*9^rDvlD4GB9OTUJVaFB24@DIvQpKJZPIVI*:+'V#.3>55)(&)?:;>#+2*;D35".5)F<3F+#%=(+1/^8W[ZxoYkAa/[OEFgrh'*>0DRhUo[\7d1I(,,'7&(,+$)&!"&-19<- """)%$(GH>2HHA,"EWm[B*`<=SGaIxe_4A^TvyjYde<;$*5R,:4<@;;B>:-;-*5<;HO?:812KysNF7>FK9.,-**4,")Mk[[\baX-Xf^euvkrqRI>i`]?^JMGHHGKhpV.'9;*$&)8?>>M`U7L\GI?D0-')20260=,..SRT/U\VYW:9_]dWr6,-+,/:]L`ZA-TP6<@2<>G6&'2:QB'6>CJB>CW?F]V/S9-07687776311+65.+/f*xBOQAJJTB6BIE[EF648:;9:h]>8T<6]bOXwn32ECGDDR54]QqA=87.0CI@=8=/HKP-%%&&%$$#$%$'+/+&"$&%%$"##%%%$"!?:6#IQb:>F&+)()(,IhNa^OZ[Gs^eddHKMLQH]BL82;mKDAKDNc38085=?TWN35`3XRF?@:?DBEOF'BJ*:XM\SNK?8<<=?804,6B<2QZXMNLCVPSTWK*))%,@:-3>>;9.53@HB=;J=761h^Y-4ABDEFCeaPMZV=?81>><79AHINYPk;B]JEJV_y[b]K>N$(DAObBn^Mc@Z6`AI+6Fi@DDClZEUQQHSKGXLa`viwI]\snQGFFsOUpZhSHJY]IO9V[RaI3ZV06785fca^YYXYR\Nq[dQcZXUWWrFPQGHLKTWTR[dXBvxqyo`gtR\\afzqjs\afayjuh[|usmvwbldtyjxlzaj`UYbyrgbfodY]ft|sclasuwab^_irlwjo^`}gVn[hw`tZnjqUgy{p{e`rbebUybiqJNHTZ__MJHUO[gtN3465<<64/HpPrgzsTnovcC^YerfBFVNP_\`ka{gkmQ~t`vhvrm]ҁ}zIZ8=@1B=?s[jlsn[^N[hyyiwlnibLM|eJjVdxv_IiOGZfHJIHb\STVm7>HFG;=KoZE6a8SO?Q5QOa]Q:_OPTS7'$*.>E03-)%5740)5*3JbVN[ZE?`c6S7a&*KU;ANk0-,@M;>9g>67>D ""2DCGF>,?28HY42B6EA.H7<@DA>DC>@::99673^_2a[YW5;===;:@=<==:=?<968;>?<;:653223a\e]UX[_^b`bh57:9976m8:7j89:96e`\Z[_`^ZXUSTSECACAGHEJ5MXD:25B;O<<=;]a78`U`AbbMPTJHK3@/-QM]mlr<:OOZY\Z\V]^^YY\^ZWX]cbbfeCbWPQRTUVXWXYY\jnGHG:7:%&KHh7/'%(?D1+'/)>54 + " GLW332-C3GG975(E;8))&%((=?4.85')$,)'$$',,276I $4-/5EJhNTJ5%($$0<'=;+;#,/%","KVRTZ=2(688/4/*9/>@PHS2A@PI2+.1O25L;@,*-.3$)+0-;-88 "##!ACDC?@A@/T<7.;:7E21/7?PZVdW[O>&(=5-$ &"2)M*0/L(=#*O0;,1,%-$2:5S7>V$%'?,*,''?.BA,><\,SFR1B3@3#*9&5$ 045##%!#."%$!-"0$&'1,A*/C6 # /!(44"!" ! !*!(?51!26)$!8))+0*#57)-5"8.1'!'(/'/%D%-)).,/&'#L<=@E.* %>%!+`>ba4R]2O1PAJ49F_" 2@/1,X4&%.1 +42.(.#$)  ,--*(w'*"--84"&23'=>$%-.,NHH@@GIHHICAEEDCC>@FFPb{E@B55+ (#$+-, -*1-*)*./2001722.,**-.-+*)&&& +/:*+1),-*+).1-.--..*('&&$%))+++((+)(&').++'''%)./-()('(**,.*($'')),,**-++))(*),*+,,/.0/-)%#'(%$+'&'&$#%$('/,+"!"""$#%&,*&,0/,&%($'!--$!$ $4("#!!$&#*)$ &$+#(,&' ()(!( !!# '(()+*('%%$#"!"$$'%$#! 2023 !!"!##'% $(,&" !$""#"#!!%%##&%&%&-*)+,#%((&).+*$'''&&'%"!! $#&(,0u0-4!54*--&%)(!HGWffn5!%$,+--.*.-/,,..-++.224897-''(**)++---.5;853443449976655343//481.//03111//-./0.1/"127~}~~~ +~~~}{zz{{{|{|}~}~}}|}|}|||~~}~}}}~~~}|{|{|{{|{z {{zz{{||{z{z{z{}~&}}|||}~~}~~~{|}}~~~~}|||}~}|}|~}~{|~~~~~}|}~|{{{|}|{zyyzz{z{z{|{{{|~~~~}}~~}}}~}}~|}}||~~~}}}||{z{} ~~~|{zzz{z{|{|{|||{{{|{||{{{|}}}~}~|{{{|{{zzz{{||~}|{|{|||}|{|{|{z{z{{{zzz{z{z{z{z{{zz{z{zz{{{z{zzz{{{z{zz{z{|{}}}zz{}~}}|z}}||}~~}}}~~~~~~~}|{||{z{{z{z{z{z{z{z{z{|}|}|}}|||}~ +}}}|{||}}}~~~ ~~~}~}~}|}|}|}~}~~~~}~~}~}~~}~}~}~}|}~}~}~}~}~}~}~~}~~}~~}|}|}~}|}~}|}}}|||}|}}}~~}}}~~}~}}}||}~}~}~}|}~} ~}}~~}~}}}~}|}|}~}|}}~}|{|{{|{|}||}}|}~~}}}||}}|}|}|~}~~|{|}|{|}|{||{||{|}|{||{|{||{{|{|}| }||~~}~}~~~Ҁ~΀~|}~ 透ȿǀ兔Dzق̈́Àğ½ɭҷÁĴ꼵̫󉔞Ɉžʑ̡úӬқ؃դDŽބҿ؇ƧŒ߇ԱŲ󝣈⊭ڀֆ븃ڇ񨛈Փœ􇇂º㬢ٕަ£ޢ᜛ߴ؁퍣ĺŀ̸̪ʝπ㹷ސౣݍӴƼںτʽν钜񅉗ҀꑑΤվμΥ˳ʲŸݣլ۲ЏΑƦ›᛹Ҹ߹΀Ƞ¬ì¿Յ􅇆𔝊Ů䃖ӽ~ԆȪ{鍆ntƍև䁏ջ٦׾紹뎰ӊʪޚ҈Ҿ|~漮悊ꈅʾ̑Ϩ쿒рɱ촧˼袴䆣葡Ṭ׳ޫԻԖɼ倏۱ޫʸً兙˂Ҕ̍ՋՂ䀑Ǹ֊⨓ÞŔۢܩхઢӹ׍ɥʶߋˡ˳냰轸¿ϳɩޑ၂ȸʬޙ۴ߑLJ񋬹襟ļ˭κϵиՁզжՙ̲ߏƘА߹跕𗮜и౎ڠĜυԸӐú㈢ιλ쇏罵߁ĭ­聵͵Ӯܦ̿ϩиˀɍĴɽ؃Ճͅ㾡ʠٍժӂŀߠƖ󃃉Ů»Ի׀ֵȫƷܿ𭂭ĄѵܶǑ‘ƿ򒚔´óƾŷκǸ紤֝׸Þ݂±ѿ򆌄̀9:98j^55877:<9879:m`bjjheb]`XT[Z_eff4c^]^^^[cdll`Z_ckji::66888658887469<=ABABA?BC9=C=<;?@?@=jok67f76i77mffnc_g88l58omdcacgk:ADCBk;9o989:<>><<<>>?=>;?DEDDCCBDADCB>@?>:99778:99::<=::?A?B?=>@=AHKS`pg][WZ^^WKCEA???@ACBDBCBC?AEGDCA@C?<@KNLHFAB??B?AC?EDEDDEEDCDDFC@@ACBCBAHDEDCFFGABFGB@CHHA>AA@AEJIJLDHDCBE@B@>>=AD?<=?==?>=<>F>>=a:DB?=<=>>==>7<35XE}ijqp`36747;<9759;;=:@G,Hwt?TbNaSTNlLk}tmr?NMpDo|{ev~s|\Zvvx`?L!28((7;..:0"%&78;-,)'2<96@F40,,$'+#10(1>,BO]e[yUx`vqrsS]]8,++,){P+(/fx`+*'LH|7/X3,3*HRf(Rx7[m_lL/92.*2PMR_\pDPA2(&&&:/NZX&#)&$"&&).% ""!8-`UI>P:6!-%|?oz[Lj6DeZh@kh~|l|aN8*Yob@@?OFCJD<:3-(&%($+Bberqv_ZYgIb[\jwt{yqrmlu[}zb\jhftDi/HP_HG>38TZDQ2F:ACN8>A7%*S-.1SJ.QOA5/:'!24::SX200\^C^T?dq3/1222R73E5WanF77>M[P42/;2;?<:$+L8A7=6J4VJjD,7Qn}!2;988577544?%76@>-`H6RtY1XO7aE>:'dDEIY}l~wkq\DVJXYCCNfquZNADJGVfej[exr[faIYhieRM\W[em\`~zxkZblnl|v||rqv|wt|evtw{nYXgmwz|ukpdanwlgrecWaQJNNK||hcnPTfȳnihiep^liomp[hiVcZ_Y`gsrq|m^n}wtrl}|sV^d]ɵf]hjɱЀywpko~|xǿ§srji{{hlnzsjp{q]:Oj1kPE:J=<4OD5<;:9:<4UPbxi3311/I>CGZ8aOSCsC<54+NDJBB4*3IIL*%%%$%%%##$#&)(%!%&&%%#""#"$$"A>8//7^3<>E&)*()((0BtMd>3dan7dT}PNkWEG6zTi0IT[YRH41;=/-6<430HHQQW=@MdPKLSGGJ>@24A!)-&80JPU;H?65?;H:06/@:=4;8/KcT@0PMAJ&,-,))':22520020-5@E@<:0-18/PT4=8;E8AqKZM6BGA79A4[5;88HC>Kv=\/)FS)`1XyhH<-3VAL[[6OU==?_;/ONU\03/WO^[d``_^^^XjhbHq[VV]k}CIMHFFOMJWTXiIp|_oamhUWUuzQgqowly^spqcwwbqgehdcptbg~ydjgZ\lkyy\}v|`jnhrrdb^{mrbSp[xzv{iqyyi[{_|_U`gtUYmwf_S_asyYORjX_eOKJWLRg^o^?Lhe]i^DG9'4.,4>458UxiX^ryzao|KVafO]TT]Re\l\fQwcŗ]sw}ykttA;=O=>qI^PFWOPw|~kceg|IH[oǢRr6_VEaxSOf\nsP^I\OGDcntOoJV?-^56F;VB+UR:Q(6)X<:_N_hNnYN]PH@VZKx?I_IUHZX`?LT=D4XTMC8}0G:*\1SfokX:\KPbO!428/-64=//>1$*84&=6POTK@=n8M7:C=D:8;ASKB78?6.VKFXKL@;533HRHSV>3;=C%"@ E<#"HMX?L(FHEA;/1JC>:@>=@??D?>?:643a823d^XZd6=?::8522241\33]U]deb^34688:;;878::8:;76gga^X_cdb^[XUURL?\.%*>vePUUWZ]YTVX_^`^YVTQPOSKNXXVYVOPNNRPPRVZWVUQONSW\OJMIMN]\[XWUQOU\b^][Z[ZWURV[Z`X[^_VYW^WYWANWSNRSUMPULCOOMFJRURC>HPHCHF@GJPTXXUWU[LB;<,AD;;@5\YO?+D8HA;BF>HHO\<=2`]RPV_cG23Z]RNOWZ[YM=WY-M:>369213,344/./1,:23/324344220122033Y0]]VWVWSNMKKLLKGEE?;`NVb=A=>?A=>?@BBGKBJMNIFE@;KQLIOHKQSUUMWVSMO[VRY\ZQQRPOVRQHA>>>HDLKB63XWC:.6A?W:;=?6`jYi\WG]Q8EOKSQ?QKS6Hdos>:bPXURY\]YXfc_\_bd_ZYc`ab]SOLHMQRRRXUR7XY`gjedekllknheaai9=996igea\]dgj^eg_`bdeejcb`^^ee[R9igi81,8137742.-/*)--01012..00.,12870-./64379914478=53468:8:9::9 "9= $+4>941./0/*#  !! !"!   + $" !!!!! #"!$""$!  !( (%A53<:,'?'Z4@.6&%*:*?H.$/'1"&+(&28R5$-(,".+-+&%"''"'-0.- )!-+/ !$,)%.1 &// +  +%!!!%$!  +"!F +%* 1    + ).   >-+'($"'%$2F?9065F-^ ',')6A #4 + + \)4:sRDG,) #"+(%!&   + +!    + '+ +   + +    ( + #!'   #/& + ,..-).#(48+&4( <;B6(3-5HL<)),C=8:4)# < 'l+ H.9@DQ|vsstwpty؄iv[Yjj`nBb*?JXEC:.1JO;D+;+15C08;+A&*+G=(JG;+%.&-,DK.-.VT?TI.OT'',-+'>('8)HNW8./9EOB)'%&(()9(2&/,,35,QR$0-.1-01.+',(#'^C5MX3(@35Agt{{rx[=>6MpV?COp}eXGFMK\pnq`n}clfL\mtnXRb^_ktej~ufenrn~}{{{{z{juxv}p\Wfmz}|vhmg`mq~}lck_]KUEt>?;9icUd[MIQ77En~w~|~x{us{wuXTSTNSI\`ecbQ]`PZUZRY_k}}xhef]QhyvuliidxymPZ_Yk_jǽkƽ׃~xȈ~~wuc!70$(5>%#7?*.3=7*=FJNGCP<>I9@X2F0&(!1.:+5%=@J[[QTahǯȶŷknwllw˂ܫײؾmybsxj_N:SDHRC8.325577/LK`tb-(%"":7<8>&BBM?j7+$"9AB62)".;20 !" /6W.41.'C,:#57@>7I2/G:*+!M2<&*/-,%"/**+-&&* %(+# *6/&2/$'$)&"!!05 '$&*&@):1"+.("%.%@#($#.%,E(.)%($*D@CAHI;#,$*G$5!+3,D8& $.6':BJBM>5+Kb_PFJ8X/E-BNQ3-&1;?.4IE*,-K).7:(( !"/(&29"0-<=IGGEECECLVCB/K@?@CFF#*0-+)-/,512A,CWHWIRnPFIEbta@PUQP<-48H=(:9G5.:?95*D/*).1[7`WN>=Z22CO9PAQlfSS\[0ITF>.%74 "(&/1:#09=$@6(90,CA2,.(K-'Oeb>M`odMSO=?@?:O9B7) $&;F:( ##%$ ,/*()--,.""#->GiA1'!*49$'=*MFIHMLG@;=AFDCGFAAI]dankD9A2/,")( $*0E'+'*/11.22/-*-.00/,+)&#! 49/%())+,*()*..0/-**(&&(%&+,++)(''&('&'(,++('&&)+0)$(%'&-,,+,*('*,...++,+*)'*,,0*+,,'**-)+-#)(%'')"&)#&%$!#'(( "(# #!!"%')*))(-#!+( !!#"$&+(#"$)0 '*$#$)*))!'$ &()%&%%$!"  0',0 ! "%!#$"!)(# "$%#""&($"'"$'((($++)%(.+)+.,&&(&%*(("!#$'&,07-7/-$3,&*(,-$0.<+=]hm;,8$*)&+-.++30/.011/-,21/43.*&"%':,+)+*/364225777844315233200457/25./010/4210/054,%334 ؁ ~~~~~}~~~~~}{|}||{|{| +}}}~~}}}|}| }||~~}~~}}}~}}{| }|||{{{||{| {{|{{{|||{{z{{zz{{{|{{|{{{|||{zzz|~~~~~~{|||~|{||}1~|||}~}{|||{||~{|||~{~{~}|}~~~~~~~~~||}|{{|}}|{z{z{z{z {|{{{||}}"~}~~}~|}|||}}}~~~~~~~}|||{z{z{|}~~{zzz{z{|{|{|{|{|||{{|{ |||{{|{{{|}|}|~~|{{|{{z{|}|{|}|{|{|{|{|{z{zz{zz{z{z{z{z{z{z{z{z{%z{{{z{{zz{zzz{zzz{{{||zz~~|z{~~}|} ~}~~}}|{{{|{|{z{{z{{z{z{z{|}|}|}|}|}~}{||}~~~~}~}~}|}|}|}|}~}~~~~}~}~~~}}}~}}~~~}~~~~~~~~}~}~}~}|}~}~}~}~}~~}}}~}~~~}~~}|}|}|}|} ~}}}~}~~~}|}|}~~}~}~~}~}|}|}~}~}}|}}~}||}|}~}~}}|}|}|{|}|}||{|{|{|{{|}}|}~}~}|}|}}|}}}|~}|{|}|}|{|}|{{||{|{{|||{{|{|}|}}||}}|||~~~~}~݁~~π~~}|}} Ƚ駬Ň򃂒ʍލيı։߱Ƕɒ׻ƹ߿Ѯ񀂃盀󵃆ҌǺ悔𫱷ф̻٘뎒ʒٝ춨ж̢‰׍ɩΎ魝亏䒊״˺ۆחՑͻœ􅘤ݿ³ŀΥޤۭݖĚ𳑁ݯųݜȢؾո耤Ͼڜֻϯ߄ˮΞ݂ƦבৎцĦ퇳ޚر갟ʽůⰬՈȠǦ𓇗к˥̿ó˽叀̶̴ֹդšЉ|wpӴňޙå拙ˏøĻָ󆔍փxЀ儇ꁉπѢ߄Њܰ͸ƺаû󢢲Œٌ鱙;Ǹ߁φțʠπȧлЂ妔믽ʪٴ䧴俶΍߽򁒠Ι󆍬ĝُ̨ҥ󆆐ΤԪؖݏԿ̿齘ϣρ㔛ͱвΥаԕм䧅ɗ؏ͭÀ飵җŽϯ鿪܏գŵȊ砫Ǹ߬čλįݚٿŕܑՔ¼œLJÞž戆۹ݮȤŤۧíѲަ޽ߏηϽҵӍꛗĨũݏ̫ͨ̿ǴùǬּ̛½݆ڸʾǾՏ¶ĸïڲ稨ŶҶӾԼoblo876ii7i68887788:7ahnm8:7mkbZUWY`_^]_^ZXVX\[`4eWY[[fgdgdabg5788464ecd348999:9><8999;74357kkkjj89:77;:8gnxjb_`_Zab__`cdfgfeoBC=889799:::=>?>><>>=>DDEEDEECDBA===>;:989;>>=>98;99<==>;;<=<<@EMOXWYURRSPKD?B@>=??A?AAA@>?@CCA>==<;BDHJLIHFGIC@BDA@@ADEHHEDB@BEDEGBCECBDDCBBBCCBA>?@B@@@A?>?@?@AACIHC@CCDGIIFC@?>?@?==?<=>?=<<;<:::999;87B@9:87g4?@A==>:991=9&JA@8NTC[hpzhL35689;:9<=<<;B)B@;wEXabQ`@G3_ouaKR[5O[lDM~io\`zoyv|Un}uadxxiC;E,4>?8;:=.0;54.*,;:7=9:9:8;1"&%# $3<72&!+158m_ah0@2" #&)*.196+c=+0.(+(-A(LoIiRfo>KPfBSejcQ?RREBSN>Evia^9?:D@BQFCEeUW{lYgz}x{?44.2yU/0;j^\`v&"#!"g\U84TXB`g{d\5+kV\]mrghx"* ';D0R]IdAJM\;-9'"'%DAISQ%%,)"$%$! $#"  ;=OODB9565$*+Vd^u{M,WYY`tHxyZb[snlxpv`0Y1<698?3KDGC=>2'83#?AD:9J^G5KNG02SLNIA=6/-3.16KgY6Nj|t_r[[|^ivwkwimw}otb~zytN-&-CXU:;]nbZ\G6@/SD6*@:9 ,6MF;;NJK4T(^Q[_001.6]A/-<4017BNKNHSc\]^W_\Ϳ{y˽u{skyȷvtйlwxsrsĤoo]}n\whcU@;YEJ}F>:;>;;>?>[AWh:561///.)D+7[HNSWhC;53)RDI>D?-6MJ&&$%%$$#$##$#&&#"!&'%%$"!!""#DC>:8(5Oc8?FN(('%&&&%32H6V*RW^C/b[i?PRZ|kXjCECGC?A8/148402;4[1DBU@CSX;JCADSJAB>B=798+b[>d58A>=827>``sQ}OaZcSNppj~pfx}mna]o}uoxp||>69DI:C8=UOmkUu}qh]kdftZZZ`?JB;D\[]pjUPprRV>pcd]IfaY\>2>Z?A3J:*SG9M2K/E:3RvcJbSNZ\QNYKO;A9WSHG@;mC9m_GJ3566D7^[g]GGReY[]=;#=A=:4@97)9:/'*54&;=JKGO9B6<6>I4D*!-!EG#JA1;;:!Ng<@:.4Y@:3:E=CBBC@=<<63ab^]37bZ^a4696?BA:4ab<69;<@NU0>:BLOA1Y8C;:8:5312331153a\cf3c5957889::766j8h:<:44f`ZR[fe`]YXXUN@CLOAAVW;IXUUWPGRXSVMKKIEFGI>@8>IRJOKXIG?LJIRU2:;7aY`dd``VY7`NONPRYXXTABX\G@KW0/343+351R-0/MP0.*4344543334641332210\XUTVSNHGFIFG@@=8bRS=CA@?CAEAB75GGOF:BDA>A?A\2XPMLMMK@DH>ENOJLGEIRTVMRRUOQSURSUZVOOQNOFCH>FA>IFOK>9@4SC>3,>A]AELB9Qb]UoOhSSJ_YYKI:01KGOaqB?UTQVQRQUUTQQRVZ^^]][_bbe]PDLMLTTRVUY\]\^egb``djk777h_]bei76e`e6lhb]^gifjbd8faagf hggf`^a]ijkfJ1675520598640,**,0/0///,-++/.02+,--34110//1../Q378967;A:5332454675678899977 6")*002-,+*'$   ! !  "! "##!! .*$')2:A4# 0*#:>;,18?6)()&%"20:J*$'#' %.)-*"&(!(*(/.0!"*&&#!&2.*0...($'  !&"  +   #(&'!$8T  [(#     "  + +  +$$ +  + /37 ##*)$ ! )' ($(!&9@HUlHWS/&!5(2-  + MO$+:)B_5>CUStR8]YindezwxtNIIrROcsjc[ZcjouxrXdkwcbdtqlh_s~x_Zb\ceov}yuwyoeoskq|tl\PklmRoMXQJQJDBE9663_XI]]IIJfeAigwzwrssjnxw}{}XVTESZ^de[LJ_[YVUNGUhsp\XPVOChhbv}[Qxjimi`RZQ]nʳɿmͲ怓߶ڋ菋ދäh*; tTMD,Q.6)7#0PE7B&%!"! )$ !#$-&  20"5!!%%*1&"!)'!.#?$&:(8A= !$# %)C>#$#)"E%5*&)7GMMFIB53)32-! 24*G:<+%"%"@)E>?5F89.NXSSKWKWVE7Q^CG,,11/;.3>P20+?7?5"")'14#BK0;*+,/#FIGFGDDEA7V0<75F86@L()(44'*.,)1'6=.PS>NcPTIB~5795.#0='F:OH-KAKXGKNH(-1)F)K(70�'ZA2('$*-;TXSJP[Z%24F6A-/&7&-+'#!%-K--%%53%>107 '9>.3$89')+&("+'&$"%! !)(9!*#'N 3'>1&(%. .*A;%$$%96G?)*,$)+83@ *+-;+(5=45:#"%,&28QE.(*#%.6,*;*%(+&1B`4>;4EVMJ\YG9ZcJG2Ys\U_IcZIF/&"' &(#!$)*(! %*3,# "4+# G3)" !! +$-/,*3)*&1" %*9=>I17&/*1/70,7/4E'/!"=5)%%*'5:,KTL+SP?yZ?I9RQcI6:RO?=?@/9C+1,Z2&6&,!<0B.(*&(  412: $2-   f..**/*,++, -1 (%*/2*"?'0+*+45.&IHEHHJG%+1,OF?ACAFQYij3SO>'1,$ *&# #-0/.0,),.03211+'+00/.-,+'# &!'#,50+,-+*++*))+,,+()(()(*(%(+*+*'&'%%)($+'+*)%''&))+'%($'$+**+-+''%*00//--,**++)*)(,+)('&)((*%"&(')%$###&#'%!!#!$&*,"+(((& %+')$#$$!! "I  % !#"!'&+(+,,*+&&+#%$&&)(('&'!%!"(%#$%$"! !"1()! " ""&#!" (%"#"%%&!$#'($%""$('($'&)&()**)*.+%%&%& #!" %# $. % &40):'#:+-)610')#!!88AYmz;(*(&*(('))*'&'*,/I.01141)"&&&))(**-//-/452//14620/2121-1762//6758/12..436676102.5464 +ׁ~}~~}~~~ ~~~~}|{{{|{| +}~~~~~}}|}|}~}}~~}~~}}|}|{|{|{|{|{|{zzz|~~}|{|||~}|||~~||||~}~||}~~~~|}|{|{z{z{||{{{|~~}}~~|||}~~~~~~~}||{z{ ||}{{{}}~~~}{z{|{|{|{|}|{| }}~}~~~}~~}|{|}|}|{|{|{|{|{zz{z{z{z{z{z{z{z{z{{{zzz{z{z{z{zz{{z{~||z{~~~{zz~~~}|{{||{|~~~}|{|{z{zzz{z{zzz{{z{z{|}|}|}}|}|}~}{||}~~~~~~~~~}~}~~}}~} |}}}|}|||}|}~}}~~}~~~~~}~}~~~~}~}~}|}~}~}}~}~}~~~}}}~}~}~~~}}~}|}|}|}|}|}~}}}~}~}~}|}~} +||}}|||}}|}~}}}|}~~}~}}|}|}|}|}|{{|{{|}~}~~}}~~~}~~~|{|}|}}||}}|~}~|}|}|}|{|||{|{|{|}}|} ||}|||~}~}~}~~΁~~~}|}~ 쀔ĹĈكɉޯ؈񙞛߃˭̴ձӤˋгզƒ͸ƬͲȀϋĹ˾֝ܡ۴ւ飚̩ӬΞݛܱʶ؋ҕޚԢжǎҚ·̀˾܆ކ􌰃ֹŨ傪Յ뭖鱡Ϸ۬ؠɥӰҁl뽵ھ񆍠Ѽ٫ЎѴ§ʙ؝؛Ű͍ÁֵرڲDŽķߋΰý¬Ϧځ¼¦ͥ홭¯ű󀏟Չʵׄ}¹}سxzѷƯɹȻɚ敏˻ߴ􏑃ƸභڃܹԿȳıꉓ¿ݤ܀€Ů醊傱ߘ掚ۄܤ⽰öֽ򍚕ԑꇖ⺶ϣ狭̯ʩܮдÝۈ̲ހۊ٠ͿƔʅ݁뾯գ܊ԏȭצ仭ҢʢФ䳪ǑЧ쮝˾夋񱨩ۍ݈ɯƶΊ觵萘̪߰ӔӵۘҺĀ怳ҹϳưȥѨܟӯ̣Ȋ马ړЩ߱ʭ¢Ж݀֗ŭҤ냪ҿ̧ͱܸߴвºŎŋțͪйȁ􎊎؆铡ǴԌ傔ꕃƏ惟ƀ΢޿񀌕ȬҦý¹ǽЀθĿƸϯžɈƞ؀ڵȮ܃閟ՀǴɾǻ˱ي׼ƮȮøchl87776kebdf66697894c`g79679:j]XVUVYZZ]YXTTTWY^`b[adba]`dj`_c6866875hgc67565547><66896j559757mh8<85fgidhprofddb__]]_]^_baffgccg=?@=89:8899:<<=t?>=AEFFDFEDB@??@?<<=@?<>@@AA@9:;;;<>=:;<;>?<=?EIMUVOJHFB@?BA@??A?B@?>ABBBA@@A@@A>><79;A@DLLKJLHEDDGBBACDJDECDBCAEHECED@AEIIFMKIEDDJFC@??DC@A@@DGGEDCGKIBCODID?DILEB?>=>A@@@=<:9:=;:9;9889;;9886;ibf4:<<HDCABA>976;@]4<;O0ARR^Z,S2Q>og^Wc\FC*?pGElFV[UAZOFFKeTspky_^_tltbGc;P34542&+1!4-4;>BD@6545:676,+.6/490%&*'(06!<21/-,033/,2-chL=:52@86-SMO}pjI_eIt|NQ]htskpJFx{SS;,=AB3:<@5OJB '.1 7H-2*";),%?0#-!*'6#(#%/!*7?kLHCj:jUY7O&\`sxdw~`nEGzu{D7hvfyV "%"!SuFGocqln]n~`p2/!2Gj>UaFE]RDKMF17%$!6,CF,.!$$&%"""!$  #@HA=CMBA:36 "$ZZ`^sVvØ`XuI|CXhzZsc|_C=?54-<69A<;<@:7;.128<9:EJH>C?+MRB=PTHKH@>6&sz:?*rIA.lA[|j{0DKX\hoXW]fn|v}JsB5#,?99LUY]fF!&0QH>=E**/@+1GK27N_h[R4,GF003BOOC8BZ=9G@Y6047\;34599223555987ART61478;:9/-9>1IIFQ06I59E?/9J?67863660.9F6J<0@00]VI`?5=FA;@=73\Dcb8540/.///05ZIHHLKWA;5.']DGDDC>>LI%%&&%%$$$""##&%&"!%&%%$$""#$$#D<<:96`4?BHM'(&%&&%'(;HC:K8@N?JF6@7;;ZN6RZ/3>?5.-9E5*6=RB1:-3=MT6W8257/0:,).,,*3/O)(;<788:EvPhi[pEGdBZQDOBv@Eywz]dcaSaK~nwqagVlOWpJLSzP_A<7olk9tqm9AQ_\8CldGMJjrKFcD?L8bheZa5:6c_im:AGCAQBrtwMPbxKB:M{s^\ehY^RsW\GGObO\\>^U=@[<A_SOPSUXjWA=@@&2:64=702;>/1*0/;-I?DIGL>,H3^YvXLoEQk>69>8.H6><6@F=?@DC>:<=93\SZ`W2<\Yd==;<;<=;]54c87;=B1&AMIdB8N3[[aTMX][WROORSQVaC]lY;\XUWZ[f=NgBzu_\UOB@>;996212210]PDBJLf`b55876456763889:>=767::788:7776557856544668998:;:897624878875757866122535756446644468;;988fba352^134`a445251396566l66eckd79?:5d^JQg4f`]YVSO>7jNm\Rb[T^b`][YYPRTUSNKWVXOQSRPSUTVTPQPLLKLG[TVVSMMSRSPNIFMMLLUTS[UIKQQTb^_bbcd`c^^[_YY[UYUUSQ\WTLMHMYURLOHHOQQLGAHL@=LFGFGNQUCHSPWRRORXbZVQNJHHJMNTORPMURTQOJPVPPWOG2:C3XXZ]gda33[JRKJTVSPI6A1YOJLSN8233L44QP0/,XT,,02344544346764244420]\TVWYVJ@FIDC>:96R5[@ABEFC@@:F@5HNIKE?;?:A@>MP13WNJNH@AGE=EHFHF:?NSSNKSNORUSNOOONNHLIG?BOJNIDNKEFHA87KB."254EPSS]9%A;988!3"&9>+4GX_NH-$65$"%2<<5*1L4-.);()--K/-..55,.-0/0653;G8*14864(!$$8?;5%30),-/+.*$#&+#% 4F30. (% 3+_+@MC=2!vp~}e\QLXx}]Ty~KS]X`es}ptov{i\RNq|vcjvs~xpwrsghjmru}qq|qrtjoocEkeJosVObEgVpFJCb_4d4^HPPDBC9;^_Shceqhsr~usmqf{skxjvNPZ[UVVef\rOXPPNXa_l|_eZIDGIAR`gwzfrsUggS`SReilmgkfcƵԼ²khgį߿}䁒톃ԉӧzBMpd9ANEVY]U\QPSS|tx^]plighdkeұȽٷs|rthrwmmortrzɡ靖~sVYkb\K=\RFb9.6@;5:71,TB]Y1*%">2?)%6%1,4#?AGA-/250:*QLUPDJ:L6:@./6UL4;=--51>TIQK;QMd^\aPL?;MTKMh=cRak[_K:.()95/5&;.4<>1?-11.,:GNA_5DMX\D?97):9/*%A%6!''4K3LR+Z,!*UygPA=GOR_E)-1$//$.;."++$9+(%1-:6))'"">%-$;?/$9>+6$&( )*%-"%*)#%"*$1C5#@' !+"92/)wZNjADP2.360X&HH$*0H0.=&%8G.'+'3 %%>.2 +&",&),&*)-(-#/5,;'#5$EIH=:ADE?@ABCEADH-=G;*GE=ADCG*0A(LA41-( *% "1..!1.,,,,412400/"%10/,+((&!6*4*#+)'.1/--+-'()))'$+,,))()((*+-*&''&&#&"-(*+*$%)'*)(%"&&$#)*(+*#$('(0--..--,-*++,**,()(('%+)*$'#%+(&$%"!$'&#"!#% !"$'( !(&(%&%%)0+*'%$""#%#$!"!$"#!!$($%)!**,+-+))!)#"(('$ &#"!%"""$#''$%%&%" "&- !!! "$&"%" ##&"!$"##"#"#"&&%$#'$%)+*''&&%&"$#")%&# &#T " ""!(&.)+* ".,92)*-)! 5FPUeyY7(&(''%%"%!&'(*,,./0//11/,&$*'(&*+,-/.+,/00-03125531/,/141.2756/-0.--./28=80202744ց}}~~}|}|} +~~~~~~~~|{| +~~~~~}}|}~~}|}}|}|}||}}}|}|{z{|{|{|{| {{zz{|{|{{z|~~~~|}|{||~|{|}~~|~ ~~|{|||{|{z{z||{||}~~~~}|}~~~~}|{}||}|}}{{{}}~~~~~{{}}{zz{zzz{|{|{|{|{||{|}|}|}}~~}|{|}~}|}}}|}|{{|{{{|{|{|{|{|||{{|{|{z{z{z{{zz{z{z{z{z{{z {{{zz{z{z{{z{z{z{zz{{{z{z|{zzz{|{|{z{zz{{{z{z{z{z{|}|}|}|}~}|}~~~~~}~~~}}}~}~~}~}}~}~}|}|}|}~}~~~~}~}~~}~~~}}}~~~}~~~}}}~}~}~}}}~}|}~}~}~}~}~}~}~}}}~}}|}|}|} |||}}}|}|||}~}}}~~~}~}~}|}~}~}|}|}~}}|}|||}~}|}|||}|}|}|{{{|{{{|}}}||} ~~}}~~~}}~}{|}{{|}|~}|}|}|{|{|{||{|{{|||{{|||{{|{{|}||}}||}}}~~~~}~}~~~ف ~ ~~}| 񂂁𐩬žӷϬόԱҁ׿иLj׎ʷѴЮȿܮ榒峂̧ϼ뀯ɭ兑üཱུij͠ĿރѮ̞􇆳뎆쓓억ּ޲Э΁ꍔ߻ھсؿҥрﹷǶ̳݃܀ɊҗÅ쿆鼦⪮Ժ±ȼھݻܵ¶Ԁ逸ҫ½󏦷ͭøɘ˘䇪Υԕ߀ҿ̼ό濱оƱ󒍙鉞˱얋ϻÇȱ¶勉ȭʺwz~}ytxn穷uŻᇀ̷ѹ܃߼Ͻʺû«߁ٺب쉩ɲ倂퉵򄐚筡ﶀɼƔ󊃂اҿථƺǼ²ĵ鄘ۗ缇҉˄ƷԁӱϽҏΡ䔀쿘ԁמ۶շ폊Ҩƭ؋ǨքѴͿڿϔ丹ˢߟ뎣׶șߕ߶dzâﯫľѻ𚗣ٍזɲɵǮۘءŦшݱΣݐȵ̔纡čǵ陨иܯ譎ݿϪӱ󁨋ҼΪɻӲ׉٥Ǟ瀟騆Ҧ؝ǭӥÃὟϒլ􋗖џȀƶι¾Ÿž;źҴѿ㐋׈򇆌­Âʿſ̲񔤝ڂխ󁂔ĸ_`ch555jliV_h43489974bccc765678:rk`UVWVXYWSRTTUX^``f4e`]^bdd]]`dgh3h7ggi9dihe6@<669;=8leh<=;96iffjg7765ijkmjeh7kebeb^]`_]`dccjkfi=DEB<99::;;q:<<==:<@CEEDDDFGGFCBAA???@?>=<=<==<@?;:;>@@@A>=<<>??@ABDDDABB?@B@ABCA=?A@@@AAACCC@=><:=:6kk7:?>>=<;7f2Z\:AECA@?>?<:56;!-=>6CBP?@)2I?=A@=<><3&"$9PL]r^XgZBDDNAp63cDpII{j_/sZWl\Yr~{Qpp}|hgdqC{kUEs@6623./7;5;@B@?ECA;82:0.00!-.-/0.$./3538::;--% #.5450+&4TXKaUO810(3720-'$'.Bj_V.*/A-A2E8*-X{KE?F^\@99FdgnhYGHT:@24A+:=9<6914XbG(,#(-1;+0) ?)$>(0,7:7+'0'A2:439RJWDBMaQvIVXdVN1#9\xjSIe_I%#"!"" !!"$sV-v1@HFH.pEKzzvaj\R[jv6$- BS@[\`PQNQULPTSCP0*4BF(!"'&$(!!! @;;?;:GE<34%!$g_]_keVr[aq\ltvu`h?/360/3385,;<592502--1/5;>EE>?>MD@I@65Q+3*+34/,;]i73YTMT5:45)DPCLTXW>96@V7IJ779;:7<42336557Hd3<27<=BA:74@FJMNAAEI4_'Y&)A@6<:73nEEDEB=EI%&'%$##"!"#'+%$" ##"!"###$"D@>;93,Qf5ACFL'&%%&(+0)*4d>RDBHrbGMOFSkmY\)B@@M1O]PU`cbZZ70/040323VUSKTP@9;GL8<9DV2=T76284U34=N(2B=-PME-\bDSK?66;8588**+./035C02-6/3808727?33@511980108QG;.8420JN5D:[NKP[dSGK)PV3O68\Euru>O]B31:gbRDA@HvicTUiWZtbainkkXSlB}Mcs_{cshE[ukq?qgFGSXADoc>N4/.7BB[7225hVZ5@3abeI=ANHGFGBPFRGFkXicY¢mQACFL\Wwsh|mhwnW^og|xwγk~fhnd~jdaa_s|x}Y]Zaffтk`[uYRX`^amlj}vq|yerZnnis~e}kTLU^ldp|{\}aO|svSYHlGikV@@>54<@??DNCWhOdegmNM_ZXUzfhiOcdnnT_X|l_yfwggsrgdo_hkZggjj@1>>RKQLAANU֒vt}dRTRL\ONBN}fjTu_kYWcYc4]uW46N3>TU8ShcxOUiggkjQQCB\5tJlI66;6YNSa5432PUb<=:><9=9ba6:;=AX8'Z3PL`IJ/[\\^TV_ZWWUV_XURX=Z`L=<<958T?kKYpNXWPIB>888531X21\\^N;Cb`4ba346975575546<:8;A<758:::9:8765536:954547::9898:<@D9632556565467785aa24354`3d3989:478::9:92`_443323542c34da113345879:9ijcd:>=:4_WMYg3c]ZXQO>4aE<^_]ecbc_[ZUSNFJIOXTW]\SJNVYSRUUTTQPNJKIOFNWWULIOOMMKMDDLQNNQOX`TQWY[V\]^c_c^Zb_[Z\\\[UXSVTOYSMJFBTbYWSQKCLMJIIB??37NMJ?DNVSJJPJ[WSVWVcYUFJFIHIKOXZNNPHJIQTZ[]STQV\13@6QSOVddbcZXKRROQPNJGMV`USMLOOAN2/T42D.20+URQ..11211322,:98867865a\[VQS1XIACEDA<4`aa6JG;;CA>JA=C?>;?EGGKCPLOOMKRLONVQLNOLMMD?GGE@>KDFFIHHIE:3BJC-6S +!+"5/& +".@0=H@3$$% ' "'(+ &%%!%#).0-.1260*$*#$&$!! " $%&*  + "$$<<"&# 4 +  #) +   + +  + +    *##$)'%!1"#P6_|XI5$%+7,    +H0/9!!NGZhTW91).. + +   +&      #$%"%"/$ <&!  %"! (*-)*&$$$&*-44+,+7/(,)74KA. 1#7,0+&<:(cF0,JgqIq}_⊙h\uqx@&97,7Ibpe^K-%%'4!&%)#"/R]3-LA>H-0)" 18.9AEC2( ,;,@>-0466191.//2223AN .98::a[r_[VYmjxsi}~|{pwkpqj_mkd{]bbTPTd^NRGbSOP]jo_IDOF?c89C|^dlouwuTgn\rjykhcjjoolpvasejʶq눁ۄ䂪رy_sdku}gfggkficiso}wց}vx~޴Ƨ䧃yydM^dXO@L`OJ|;10:>::6107RLci-'$!842&&3)(./*,*$*&#'& ! ,**(# &09!.)$$!$! !,$ ""!!#81'#0%%#JCDIPP8&$)1-1*EAB#(.!60%#! )D94'&6.6WOJ@@LRPR@;B"G/AL6SILF;<5"/DBD(E:'(/2$!=4!&%5  C;@%0$EEF2*,1.KGBA:*1(,60/03,6,2()QKD3('*:$*0-81$15:@!(<8@I;DUL/4^RTP[6$:#(:% $'#'J8O9ACID'9/YfUaQ=RbOmP7L<<1%"%& %&/"'?),(& -!$(23@-(<-"4/,,#+-#'!""!!!"),#$4"'1!%!9&(/0J317#=-&,+EHDW1D$1iE;+<&D1&%,,@C.832A*)$!3;;/(.)5F, ,+7098/6C=TF0.+*:1.)4ED85EW&9;' $&0+ 0)9,4%%/R8'5K9KUUNA5ZCLK_Z<%/-XO:J&10DD,),#ZG*:5@ -,1,1  )#&.$',.- 0!E#/,8,0"DFFE>BICABCDJGC:;'9>3((('#&2%<*0>L*--)% &*)+"/,.,# /.,/-+.0.250//+$)/1-+*'(!7#--,0/01/,,)('"$#%+*,..*%&*+((+++*('%#$"'"%***#"''$&&("!%)%%'%*/)')*+(,++.,-+),***+++,)*&)($*(%$")1+*(&#$#!""&$# $)&!$)&%(''0*( $"#"###$$ !#$'*.((%')%(&).,++')#''%&%#!#)+%%#"##!!"!"+''$"#%  ,..  #!!$"!'!#  "' $"!#"$'$$#$#'$'&+)$&'%%'!!!!% !# "! !|$%0)8+23/0$ % 855 1JU\b7%*%')&%&%$&'(+,+,.1/22/0420/)(.0.++*-..//+*,-,.03.24564200//11320.03775420.01348665412ف~}~~~}|}~~}}~}}~}}~~~~~}}~}|{|{|~~}|}~}~}|~}|}|}|{zz{|{{|{z{||{|||{z{z{||{|~}}~~}||~}}~|}}~~}~~~~~|{|{z{z{|{||}~~~~~~~|||{ }~~~}}|}}|}~ ~~~~~|{zyz{z{|{|{|||}|}|}~~~}|{||}}~}|}|{|{|{|{|{|{{||{||{|{z{ z{{z{{{zz{z{{{zz{zz{zzz{{z{z{z{z{z{z{{{z{z{|{|||{{|{{|{||{z{z{z{|}|}|}|}~}|}~~}~}~}~}}~~}~}~~}~~~}~~~}~}~~}}}~}}~~~~~ }}}~~~}}}~}~}~~}~}~}~}~}~}~}~}|}|}|}|}}|||}}|}|||}}~}}~~~}}}~~}|}}~}|}~}~}|}~}|} +|}}}~~~}}}|}|}|{{||{| }}}~~~}}~}}~}|{{|}|{|}| }||}~~~|{|{|{|{|{|{||{|{||{{|{|} ||}}||}}~ ~}~~~~}~~~}~}|} 񂁊񅇃Ⱦ,ȵꂬЕ󾸽ⅤϜ悖ӀߣԚн˾ƻüǷ´õꅢоʱ潡ë۳ܼܯëⷉ궮䦡Ƴĥ֗㙑˪ݐΫDZɽɡ򥘷ljͶߏֈ™̒ͅᬓÜ猭惎垀бʯœոļο٤媶뢃㥹őܯ垈Ƚ㯣ݔĩů½ݓыō􉠓ԧجᡅ˲˕ĢǺ̫ϥԟıհꁈְ욊뇑ؠН˿ΛʯޏˑǨ£θᇬ򇋈㌗񈚣Շнͺص˸پ͵ī툊˾ò~}tķyҾقȼㅏ¶µۿ맾űƯʿĺㄏѣÀĮѫԬʟ׆ʵ僗ŸĤĢ㹝ˠѿ·ŧ®ǿ素ĿЂƃɲ䋧߽ѢޅؓӿՅэǩ·ڼğ¢醓ݘΔ֘ټ㳽聣ƄڻŇ咒ĺ늝ɚľӏԾԝɁ脗Їږ䀉͈܁ҒԲԿ״ٖժˈځ٦Ԥ󅹧¾չĭö޿辟՛Ƿ񂍻ʝǾ˿ƾщƹŒ㖁󂩆ߧ؄暜ߠ锱ؓ󈂀拓ĆށÒ튾嚛Ԟ兀ĶȼϿȺý²̞ɸŲijڈƴijՐ󏎋঱Ӧ׬ꡧٴȺ³ƿϺ綯ֽP󃆍lebeh5c65::lnlokij56678ecie6e3679;>>86@C>8olfi9?@=85hdcb765mkkofc8^]`kjf_[W\^bcdnqpn==>A@=;87nn:;:9:;=ADCEDEEEFEFECCC>?@@?=;==<<@<9:;<@A@?AD?>ACEEDCAADEEABBA@@@?=>A@=>?>>BBCD;;<=>==9ll8n79>DJJLNNMLIGFGGGFCDBEFEFGDBED@ACFOCADECBBEOLHGDB@??@@AAEIFCAGJDECNE>A?@CFKKJV]RFKIHFA=;=<==<7650:?C8a3bSS/AFEBCB@=77=5L(+G-'%&H-fUN1<;7[2K?'HW3jg\bjNAQR52>|w]{MYPyZiZzK?HcSWr^{nfU3@GcEC:7?=;-0.,'17=G8501<790031 #248:197,21;965531.3++!"% &)47$*3#Oy(4KA-2')'.,.)%)#&$+0.46AM`B>[7&489agK$%L@^K,&8M`_gm1s9<]56,++:B=1>?26T=R/&,&,, 2%(.*7.146RVWMB5:@<>58;386253:P;7JJPMF;F5z__@MSL|slP5_TZWRem`rq16O`WOp_trjz}zmulM@gPKGG1>)?7zPSs?J`G"-NJE_Y9:>6-8>T:+H9 E665%/9.:PH+-Z;CApA3M29IA@?>;:65::EvXO49?ACGFHGBDJ>*.84;(5cL3y@enw!&JGGIQ*MJOE6>i+'(%C?9:;;LQl:5562/.01553./][[ZN@==@>7zCABF=7FIL''&$$" !!!"&%"# #"!!!AA! =<<;85+9ak=@CKO)(*))(%"! (WWOP-?i_i\QD\@SP6JCA6/RJ<>PgW6;F1.,0.,--'JHRKM>/2T,E9".2:;AE55,U3P,/44(8I;25SQQWQXK<3/578495,()**003GHDQKG{^p~hirJEEJYaxjYtslodkuojxojpmemzmxwasmi^citpgtcG`gx]`emblnt„]emnSwwY~nzf`_fpJ_MSjYnsKH~gOtDfcaav>>B>;<@<@FQQdfTjpTNTl^aZjgxVUcVjFx|ZcZ\_n[vUSe{qwgRTkrVbodt]Zjat97CGGO>BDHTloniixp_bYQnXAXh^ujkVddTJqkt]_QHKiWV7K$2NnFuw[?LK0AiE=/,6;@I^vXjJ_dXG};(<}SsR\S^ovsbz]gxg$j]V:V4JLVPRBc=j@395:C?FHOJ?732YJC./G??A8>@L91:7B25cs:@M8\4M@&<((.=BD\>U;36+ADC;3:F3TCOFPxW<7BWJU2@T4K:\32$0'Z@<=337=<;@BC=>:<<51VP\522ccTZ9:8:?9>?438=>?:F.+]X=j9J/ROT^v\_Z^\b1fc]XX2i[gR;W`ad:ZA`vSONMWNMH?=:75542a_`bRW[VJ^332bZa86687898555866=@;677766=;68767756875477>:79779<@C=755433435699l55454416368=>>;88;=9675^U]4637678644453`aZ^16;887jee_`7<:34c[OOZ`d^]YWN;imD=9_^Za``]YVXVO6.Kda`^a^[TNLSVRSVYRRNMLJJNNLMRO[LMPLKKMOHGLPOOQQRMY_`]XYU[]^]b]Y`[WUTV^ZVPQOMPPKIIDFRRU^ZVPGNNMI=H?>GJOOMGHGV\LNVT0`VZ^4aZQ;ILTWKNU`0WX\UPFW[^YRRHFQPR297UOPZ\\`d\TSMLNNNOQKAGNLKSNKOFA:7:>8;?;fJ7@BI^Q^h]?]Z\YOa@R@SN54\r+OTPONAPOOIWgcfh\[hpigWX\ZZ\bYT]haechcl86faa^\ZW\li8he7hkifcc`[^_[]^ae`^[agfc_[d`_d66:<84fk!#     +   + /8!!.($2 0%)"0 +&''.1*,,'*&()%(=,*:8>91) #7E,#$ ) ;,*&,,*I%D9O1Eft(NULl`tvqvqQEhRID@'/1/vPPg/9K709EF1%9Z'2)C=:"&="!("%$"?$745:.-"%'%BC(%CBBF+)-/)%-$%#+34.5/,++/.)0((OQ9fNQ58+3A7:::<9<60+@@RZ_bkTDHR_:;FZ;:18:=8KGGFCIfZO=@GSG^b_yQ2GMO:6RB)5=-2&!:?(=8..,;O2X?IE3Q:51YQRVI:6@>K=5,)2J),PG9@<+,$+E4?F5NR6W1/1?,I(2'Df:eeJ,/+7$ ."!(,06)V*%N5@! (%!<4(  +-&,064(##'LB;$/&"'#,2>,%0,2%*Xj6:@(?2*)+8D?D@DDD"IIDBD!>47.!6;8< /"1@.*b('.'(%.---$')& --+. #5+&).-&)300-..-%$(+/,-+*'9;#-,*/./-,*+)($31/.0/.+(&)*'*+.*)&%$#$'%$%'$+$&(&$%(*$#%'%%('&#+.-*)*)*++)-*)-+))(),*)&'&$&&$%%! '&).,*'"%$%$"#$'&%!#!*-""&#*&)*.+&#%*+#&()$&&$#)***()" &$#'&',+,./+'($$%#$#%! "! %$!$%$"&%#$ %'# "!""##! &#&!%.,!$%&'&$! !&"'%%""!%(%&%#")*'&%#  !!&!! !##&0%$/(04/"//10)3%1%22%*Se560%('(''(($-4243+,5=75+,..-072,0721/2050/0-.-,/752/1354110-/0...00/1035531-1/.136 32ځ~}}}~~~~}~}~ +|}}|}~~~}}|~~}~~}~}}}~~~|{|~~|}~~}}|}}}~~}|||}~}|}|}}~}| +{||{y{||{{|{||{|||{{zyz|{|{||}~}~}~~~}||~}~~~}| }~~~~}~~ ~|}~{|{|{zz{zzzyzzz{||{{|~~~}~~~~~~||{|{}~|{ |~~}}||}~~}~~~~~~~~~{z{z{|{|{|{|}}|||{|}| }}|}~~~~}}|}|{||}~}||{|{|}|{|{|{|{|{|{|{|{|{z{z{{{zz{z{z{z{z{z{z{z{z{zz{z{z{|{z{z{z{|}|}|}|}~}}~~}|}~~~~}~}~}}~}~}~}~}|}~}~}~~~~}|}~}~ }}}~~~~~}}~~}~}~}~}~~}}~}~}}}~~~}~~}~}}~~~}}~}|}|}|} |}}|}||}|||}~}}~~}||}}~~}~}~}|||}}~~~}~}|}|}}}~~}||}|}~}|}|}|}|{{|}|||}|{|}|}}| {{{|||{{{|}~~~}~~}~~~~~}|}|{|}|}~|{|{|{{|||}|{|}| {||{|||{{|{||{|||{|{|} ||}||}} +~~}}~~~~}~}~~~ +~~}~}||} ٷ񐉄󀂁űķ§Ϳ¾ѷѓÿԿиữ΢λߠˋ͵ʸ𷉝ףŰⅈ蒓Ƞ쉄쐫ϲ툜词ǘݾɌ؏›ۍƌʷռȌ¹ʹħػ㱖݂ʚꕓݽά傂هًۖڒ뭓˷樶Ьꃓĺ슌꿮ü؁ޥכȬާԺ傇ɹѓ蝣òЧ⁌ɵ퐡퇚ɭѻ̵Ѻ뇛ɦ耄w}z|}Χȫxòΐ錇νɺۺ򋦠酅灇낇ɽ۬гҥËâ©ȳ񉒝ɝͻƒ끒툪ٵˁʷď倃ʽ膞嫸ӻ˟ţÿյƾÊӱܪԲҹ֤ſц쯧עもӭцյ暹󈋸éտͬॺҾ忮߾唁Ǐ䂃ђԕҞ䂧䄄̢ڶĕꇑѰǎѿüıø͸NJ媖᨝䊌䢘ŧӪٌ刎ĵܣװžյʧꆏЃЩӮ̨ʖф͝񦀼Ӡşڨׁѵý±ξϹ˽ƞʩޤ˝ڀǏüոӇ£ɱɶٿͽðĽĻȿư̽ǯӺƿڃӽ˭ǹ⏕΁򐎢ۀߛׅ ⷩݵĸŽ«ųŴƫ࣢bƼڀ"o99889ki66jlijhikn8feei^cg56655578;o`[XTVX\\[[d=akb^^a_]_[YX^aigbaad5hfedah8AC=9CF?lhghj:;@DC=8fce5igehng_[`mcaaddcba_`]abedecaabfi><9;9886lo9::9:?CBBCECBDGDEDDBA?+?>=>>><==<<;;;::;<>>@BC@>h==>@?>?=>AB?>???=;8898nk69;@BDGIMMLIHHHFEHCDDAEHGEDGEDECECACFDA@DHEGGFJOKEEH?ABBGKCBIGEIPXLEA@CADFICKLEDEGB?<>=;;97767;FK=9:@@:@=:631`YX7@CCA@@??:89>UC>%&(;%(/8<[346?<@9; )00\au]:ARPHaLIW]P{|n^~yRQ}45/<6?BGB1+.-+##-) (,/4676422.:?*+!!/26=5' %2;8C,7"".-)%("-1-10&$%0,04,#%-5-()"A!045)U,)KNBVA/;AK2,HPPE!0;&03*,&(/($',GCjFI.RHE@27/. !$O6-H:'U=okzqSALvT\dLdS0+,g^hpDj%)&#$(JPt:pslghxc,7A2{fs]rT|o[Yrkglc;("67?TVRTKMHetg_df7DI*&%&#',&.1"#$ "%! )GCA4;C(+#211A7AJGBOSQJlY`fC]otdRZiVcxXRiyetnv}S\JRYat{zqr}szHi+%PQ\tcmZaPi=@56`J<3Q9?_SPa;;>7D@@HeNT6C6:977ELC>JP,DPnm\;CQ.1^TFECEH(Af35/JSGFS7+,Yz_E5:,SS^TMQ`nolZb_aazdcyvBws}V[hUXQAHif?GDSQOKC[dfVL|nAMT\Tckx{~wqgn}woolow~kqwX_ajnaYa_fs|{v|zzyocZkdT`b[OGLRNMwvuo`^\USNMH}}~vz}otgjcff[[cgapjpkfZc^WX\[\U\XK\Uqq}~o}xuno}ylfrshkkmmsudbagkxzrlqpusrzu{ṭqַ̿tzszx|twv£~z|xz~~ysttvq{mkhlpcgkwhp_cf]ghyzt{{ıouo˼nqmnjvzz|~njeck|bvptpac\FGDEUc[]}s6AA?@<<9>><<99641$Nf8=CIL'*(***))'%%%'&&&7K2ABLA|/<\GBLKYn8:D@,3TGIBR^FA4881.47*)*KCDGG,E>:SN?5\L8B+1@3FJULKD9+,3495813)!&-356&\EV\TVj`N@P4DR9SJbcP>Z/Dqj=ZA.(8QWvbU_LTSROWZ|effzXNNaZo~ZNa[eK]jfc]gz9cp>6=QCb;9BRN[K;OOg5WAQ?2cee]Z__ad9@;Dgc>9:h?INAKMD>EDRM^hOEbmdv{gciPGM[iqv]rzl_cwos|plYW`e|arvyf`^w^x|kq^WM][ffi|ȼb\anwlfzSmdif{gZQZ|\\vVWo[Z]tPcyiEnfJLhW80B7?fB=8@A:@EGELtrz{jPZ^^Sxuex`UqkgsgqOJLQKLWXRV[[a[Xwtqayjc`mfo|mi`chp>GA;FdcAL0B:N;gYMILR^.FmHY=06:+7}zjfkj{ohvQJWTPRb>RVR}xpamUZ>Dc@p;F]9T@BPMJDD`?+,8C>CJOMD7'-G\?6I=@9B/3C1-5;?94J;<6-@A?D9BC=]UTM:}RE4EB3>ieCX8-G;<8bORc.:3@7.d10DJ1;9"!:=+I9ORA=36?<3M]9<;?;<;=<71^Ya@7W]]VRU3<8><@DA89Sc]QPJ@=:G>75<:6756300^b46596564443a]P\b66888776iff574fdb]TFM_7c^[UQ3QZO<_[^bjgb_[ZVVGPCIdgd_ba^[UMEMOTVUSSNJFLMOQRQRNQYIMQOPLMRIHSSMQTMCEY\2b[T[abbba^[\VMSRQV[PONKFPOK;DFHRNWV_aVNOUIFDL4DOTRQSKGTQZZVce694[b2cVODIJGBJJQ]1c`]\[KKMOPNJHKKIQ14`XUSSUN\]VJQJHNMHJPM>?KROOLKJD8DINYOK121+,,,/VB--22-Q%17:9:99;9997SVVQOKT77;=@A@?>>@;cOB>FK6^4:^c`W]_?CKDeE-=5Ri>:ABg^[`bWVQMK[nfb;=ghnhaUW_]edb[Z_jjnn87o;;mc`^^][Z-^^cefjijgc^]a`X[Z\^bae]XVX\\][[`fabg7=954=D=pV952785756792114-024/.+)+-..-,2-51/010./-,*-/41//012223246G42204468;73.,3112654455535676533345388$ ! 88  !" ! !%""!% #" #',%! !""$ ""%(%$  +..-  m;OG9 1 + +  *!!'! !"#:3aH(,SIC 7@%V ( !/C $$$=v ):& !.$8#&DaC\-08 +   + (%  +         "  "+ ) )-!)+, *#+-)*&"%(02*0('0%#"0'/62,8=6)E<!F*$- .3-&7(-(""%50Hmpi6+@UFPX`zJb"AEWl_iTUC\8<01V?1.G2;UMIX87:25FA!00-1#=,#TcSM(!=*%(16:5B&$..69<><3$$/12.8@;//)&;:F.?75/1853/3Q*.%7?64l=#!(!2",+1+..@5$-&@DFB=CCEF(.+2HA'"$D+39.75-)-%.(/4)(O9`8198-.>39CNNR44G/C@[``^dPLOX_=I6KQY06AB=REQNY`MfN_kBUwry5*,.M>EP-=I6I0.3)'&@89A'<:29NWX>Q>=4UG?CB>+"8?7_:Q>2>;% 4E5'&L)) 6YN?:98:!8') "!.!)L^Wh=/5-'%$  "8  ! )1'+/6:-"!?Q8*5()")*6G50),>--/_?;<.+,'+082(8((#+-18-540H=;:.mC5"01&0MV9=".(..]KIU#+,=/98%)!V#(2!! )/*&* +)', ),*&%&! 7( DC>?EFA<;<89;!.5702/*'%+ 7!##!7;#0>C$**##"=/1.,*$#&'!'.,- ! -!+,/-%*-20120/-) #+-+*)))2(,+-.220.,,**%+ $242//0..*& %&*++)*&$!#%'('''$%*#&(&(&(,##))$')$+*.*'+---,,+*,*#'''(+$%%$!&&%"!"'z#))/1+&&)#!%"&)(&'"")(-,(/.(+/)& #$#$$&),*)*+#$$%''%#$" $+)('&)$.-("($"$" "%""&#$#!!!#'!"! "$%""%!!"   ! )##%%$'%&!!!$*!$#!! '"$% ! $##*&"##&*#!%1(! %0-11+03l &-'9+**H^7-%"/,,02,+''&.93136;70++0067730298876411///.-/.32032442.-//+-,,-..2/,+,../-,14112$ :ہ}~} +}~~}}} ~~}}}~~}|}|}|}|} |||}||}~~~}}|{z{|{||{|{|{{zyxyyz{ ||{{||}~}}~~~}{| +}|}~~| +~~{||}~~~ +}}}|}~ +~~{|{z{{{|||{{}}~}}~~ ~~~~~~~}{ +~~~~{|{|~}~|~~ ~~~~}|{zz{zz{|{|{|{|{|||}||{{|}|}~|}~~~}||}}|{ ||}~~~}~}|}|{||}|{|{{{|{| {{||{|||{{{|{{{|||{|{z{{zz{z{z{z{z{z{{z{z{z{z{z{z{|{{{||{z{zz{{z{z{|}|}|}~}|}~~~~~}~}~}~}}}~~~}}~}~}~~~~~}|}~~}}}~~}}~}}~}}~~}~}}~~~}~}~}~}~~~}}}~~}||}~}~}~}~}~}}~~~}|}}|||}|}|}}|}|}~}}~~~}~}}}|}|||}~}~}|}|}~~}|}|}|}}}|}|}|{|}|{|{|}|} +~}~}~~}~~~}|{|}}}~}|{|{|{{|{|{|{|} +||}||}~}~Ɂ~~}||}} 󏟝󌉆梕̀ʗͺ뺰ҙĶ˳ăѨɼΦ¨ج٭ջҮ̸̰ѴˀٽĮ촭׉ռÇՊۥ群򘲯̀šڶ؛׀ݝƝǂܴ§猘׮ޱ؂٠ħɂ㶮ųňҿҍūꦅ煠譾嚇εҰɆ̵֖֞񫚻ʊ҆À˖۪Ӫ䙌ڄ̜䁛έמ٘ąԝȍ͌Ӱ¶󂃃ʾȭѿކ܄䄘ɻíϮ{{쎀w~|xrպtssyuwxw~׵ނ쎋вļ䈅웜Ȱဓ蘢Ȫ󢯞µ셈ڒ񘜁ƘⰉξǹٵѲՐـã;גȯ񨧷ѣǶߗė󸍍Ǫ̀җé񘐚ӈЗԞ˨ʯ̭ɪᙀ聞܁Ύܤϛю撯넋Ȣ▜㮛ڻˡːо򄛈ẃͫ㽨͎ύ𾭦ê᫈τՙà䚅ɁÌݡƷۋ՜㗎݋ڈӧ˴ϢΧ׻سŰçߌ癀ؒю쪬׻ח֋ڹӀֆ˼ɶ˿ҽζƿͼǽᄍǴ´ȽŽȿ³ͲڄפùټȰȻԸ£۹±ȁǽÿ텆:@C?=@B;889olkklrmekjjhfh7kehf56kijj667:8j]YXYWZ[UXVVWVWXYZ]_\Z^h8nj`__e6::j^acb=BA<;>97hhief5>DF;pi64hc_abbco78hlig^`_^aaacgbdfddf`j=98:78;<;78986779:<;?DCCBCDEDCEC??@?>@A@><><;9:<;9lijlji8DDEGDDFDB@@@?BD?@A@@@?>>?=>==>>>=BA@?=8<@??=?@:7n79:;>AEHJONKHEDC@CDCDJIECCBCBA@BAACFCCHPHIIDDEGCBD=ADCCDDCLQJIKUOGB>???ADKGEFRIIGC>>@A?><:=C@=;97544668C>98>G:9@:942bZUPW[;@CCCA<.:@*3B>)& ,%'0aFn\MiWTa>,).>ijv[TfVM1TQ/NR[fdeZjIcdhXvyrSFa !/76:=BAA1!,BLLMJLE35";ZB 6!,&&5<328<;9:853<%GMntk`|SXmoyaqyA?(,>B)! +cm`0 -,('kuxfv_rPD8aI+7fzaX]{izytep[70%@E<0#;RT42YQ[]e5gXS9>7T1./06B1/70" !"1+?)&@#=0,8bbKrjPjmeq~vYQej}r`l{_fx >:45JB16,70.<7>9)/$ !7;B@+6eN@&B252Y;PCIKPq1FEbxZOMGGGIGGED,DY49@;0[YTA.-E_{S9=?C`irmmonXbvmwunZ}LIWklVMsyTdby?s^rxQ[ADKZcIC7AEB\ko\VSXVTfwkuyln}{b]jttx{wrn{|~yqffj`Whlyvtn]XUSZW\UPJBIENqhf__Nhhxx`glqw|{gdhbmmʱ]dWSlgomqm`cckhhdh[gwmZaqpwqz}nie]bbigpopdSSSd`ƿѿ̽tvqxwr{mՁrpyxuj~sgmvprtlrtnqoxmkqlrmlmmku}wqog}snz^e^Ƕ}styztsuqq~}qؾp{qqɸӾohifnqu~{p~}~rtcphkx_`^WFDF@bcgXp@4>?>@<:::?;ZPbo935410114452.0.13RXA>CDC:::5;2HR;8NHN<01+8B@AA41WKI,25ZM<5O7:-LOMKMH10349:08;7*!).08>?>?:7@;882:<7/.2598:8-)973//21001356755;97:<=>;:;?!0}YWUddFON6SBU:g`q|?hYV44VIhON-$&1SnXLbYQ`KUzk`S~JV|NHiCZn]asULvU`kkNagqxGI9L5HSi9KYVrEFA24.HICBDLEJ)&273;=<:Biaal`WUp~plNl~tvy\BUXVNL}prI>V}\m|}wy|óZ}dX[z|wzcdc@G?38@LC>r8J=9HG<6qcRQ/(;TCM.B4&&6?,1.3.:98L0#9E>JU>PJcK8?>L9KL44C*0&;5)zl2M;)<^9DO;9&38.2472<04"!<()8sD;V=@B>88:<<>:0^2137^VVRPQX58;>AB?;><75:)*VSUXYUSOMTR[GL;PcWE:Y9X]CV7IemliekrFGKVNGFA=;<7396454^]YHCR3\S]f`23b3564446689789849=;64456:5587>?=?:576786678563468;8:=>6775135435799;<=::9773``c43:?937:657352`31`39?:123773_\U[g76;9877665j6gbbda_WNJ[if][UM2=Q=7Z[]^Xgic^YWR?3ATcc``_]__]\WJHOPSTOPLMKMMHQUVUSVUMOUQPGGLEMPSHNG?NV\``dd`]`[``\Z\[WUOLEQ]]NI?BQJ>?SKIURWYY\WNRKDC=92GJVLQOLKOKHGS[8>>7a`_^NGEIBCCCDOWcj[VPIDBDQKG;ANPLV2\UNZVQNF[][SPJEGLCFSNA;:<=eNYSNGS<9A=@IIEAADBBB@?C>;DI8]<@::>B`6>@CBHB0ISSFAXTMQYOZSJPM7B^6ILX4Ae63-SNSU]LA386S3.6*/$)1-%E/$90( !$)04J-7='!%,%)51($%(/+M4E=EC>=[0<|?!N@;A>ECC?34J.794)KF>* 7D#b#77:568Get|zz~y^^^dybKGTdcNLlyWlf{BwcrtY]@BLacH>4>BDapr^WV\ZYlx{xhaqy{zq}~zqppe^ptyvo\USPVTVNI@p;?;>d^J@:38*HGC;?M[N=@GN]SX]^tx~a]QPuw^h}lvvRO[[N\PId_eZWZNUZbc\V[PUe^ItRthwgj`ou|p|tga`Z`_dhupqlYURdcv󀐖߉샅٪׆{|x|z}zzo~pyp˳|}}sプnt݂{wpz}yÜ~tuqu[_]VCAD=cfVl8*6879643383RK_b+$$! ##%$'%%)FP:5:=?642520120-&  4W67781-  %E08#4*H.1C7&'+$!!+"&+#"6. )*)&&(!VHGDMH.,()*79CI!62.1+;+#*=2$/*".!E,=HDA6X3B]=^0B"2?+493'@*059+=<@!BBE/--)@G)C'(-8820/&26;C6@?&%3;98020,4M=OOFH=+DaLB8711E6A3&3bPAX=67L)%.3+$U+)&''0I14HA&$%'93),3?<1K>7Y>IE$A&ED#'-N3/3aLWHsknZlOdM`C8@d@CW=<]C@2C4D;LLUA9;5+1+305 )"!gZrD7W3- M4  + (-!8<8A2+-AD4"'&*+7;I!,&8.8H0*((791,g\L@!:') 05 "!(#!&>%#/,5C.A>T@,-)8)46+))-'!q`'@;<+)%1+"/.0#+#686426:A$%&,(%$ ,-,!&*%+.,,*+-+,--)/211/00//+&#-0.**(&&*)*,'010.,*' )120/0/01..,%#'(')&'%%$%&"&(())()#'*'($%(!'&)"%"%*-.-11/*+),+***+))&$ &,,&#&"*"!(')*+-+'(%"!"#*$&$$#&$"&*+*+-&"!%!"" %',0(&$"  '$#$$!%,(%+)%$ .-,('# !#!&#!'$""$  !""&$),!'$# (""  !%. !/ !+1&"#""" &" #$* $$"%!!!%%&$""&')%"%*$+&!!.$%0143511*k($ :. '>c,/2-))+/434/,('(((,.5892-,/12272/061/0022136331-,..-.-.../230..,+-./.+/1101.-/--,-.2482110!$􁆀}~~}~~}~~}}~~~~}~}}|{|||{{|{|}|}||}}~}}}|}||}~|{z{|{{||{|||{{zyyzz{||}~}~~~~~~{{|||~~{|||~}|z{| ~z||}~~ ~~}}|} ~~~|||{|}|{||{|{|||{z{z{{z{{||}||{{|}}}|}~~~ ~~~~}{|~}~~~'}~~~~~~~~}{z{zzz{zzz{z{|{{{||{|{|}|{{|{|}|}|{|}~||~}| {{{||}}~~}~}|}|{|||{|{|{|{|{|{z {{zz{{zzz{z{zz{z{{z {{{zz{zzz{ +zzz{z{{zzz{z{z{z{{{z{z{|{zz{z{z{zz{{z{|}|}|}~}|}~~~ ~~~}~}~}}}~~~}}}~}~~~}~}~~~~~}~}~}|}|}}}~~}}}~}~~}}}~~~~}}~}}}~}}}~}}~}~}~}~}~}|}~}~}}}~}~}}}~~~}~~~}~}|}|}||} |}|}}|}}|||}}~}~}~~~}|}|||}|}||}|}~}}~~~}~}~~}|}|}~}|}|}||}|||}}|{|||}|{|}|{|{| }}}~~}}}~~}~}|{||{{|}|}~~}~|{|{|}|{{||{|{|}|}}~~~}~~~ˁ򀄁~}||}؀ 󀀀򀉗ǀĿꆚҡϥ񈅀ԅ퓦ӂيʩČ碌ηǞħǽܻዙȜ̴þڏܛƹ̓·ق𬹠쬔Ҙ嗴ۮŷѩ妻ڟ̆󙛣Äʻ΁ߗт𐔼펠ʾ܃…֟ހȻ˾ፉф񞑦ುϧяÁۀ׋֙랞ǚݑճ؈逍ߍ⟑ȃͬƤȘў闱ƵȞ’֋󁕘õóʮūø쿹̾íɣխ恔򃍎t{otpǪ|򁅎򄎔е鿰퇘ĹIJǀͷ؊넜ڙޣƍئ̼ʈ˵°펓àܻݻ˷ω엱ųʪ÷ŋɿʙ׫ӊŔͪҶȖƋ情蓘̉ꏛəîǝѾϬܑɲɩڳ׬¡ܢ˺넒Ÿ↤̍נȬݧӬ٬Π߿˱ʡσ򊠓د艑ݙ䄑ƖұڔĞۿ㦘ʩܑ䦈ĝŅ揉“悧ϽꈟΡ򊐐êȝ㜳êҖ̰ٿҼ̯Ƃ޽Ç脓úĽ棰䆈ũ۹灊󀅏ԑμŝ·۽ͿĿĽ܀úθʽúŽʷځػǽ¼Ѽǿɿõ򋊊۹ʇŲȹ遀ͻʵıĺɷԴƵ͙끟ÿ8:<<:988:<;9;;::;:978:;>>>ACBCBBC@AB@DFFGB>>=;;989:okkn8=?@>?DB9@AABD@???>?AA@=<>=@?=ADB??;9<@?AA@@@C@<9;ABBBGKJIJIKKHHGEEFGGEHECFGDFGFEDCDEDBEFEDCDFKJHDMMCABCACCDDFEFNLGEEECEGE@EDFD@@??BB?==;:>=<9:97676:79=<DA;@71bYKISU1;CDCC@=51(?-4*#> :&*NW4`e@&#&..0^cg>[FxWE=CIUPuhVKI^U:u\c\d}zpwbVnm-B6.=<91.9D`=IS>B>,")29'#:E +,&.''2,$&,9=LEI86:4<7">8:H6POoEPmVu}kXNHjcGE.=n'#!#(Z;Xszr8cb;n`l\nB7PORkv|`Yar`dYb]LMPE?I%VG44*0,abY.3C761#'3?DnM\acaec&<@$&$"" .!8RhO@so]`XyIJU_ywS{nV~\}|/219864:;565>G=DBjs>&FCEE4YLUD{X][EPhUq}VfbinrqJrl[Bi`NJJMSg^xmlplry>F>fhNRjbVL\_hOX3HVW@ME]?Rc:;`7e\4;?A`MC3@_<<6W/F.51=aYV''QTU40++^IVkx.d=KNONKKI8acFDA<;?AAG(zXzs[uP;FJSJDwXcjggjmlhMhTkzsk[\^F7dfhkEeGYbjaVJJ`b[NRDttuq\X[rpxJJXKK[XUXbnztldh^ROby}mgVXirqfp~y|}{sqwuhja_dPJNYYNRTMEBzvldiZRLIHs[[ew~qwqrs~zYX]_hjpndopopoxmkgdcsx`[\wzkwtt|{rqunumcgvqp^XLW]`Yc]d^_¼нuv{~zxqww|}}p}z϶jks’~q|ºbbca^dqroibcjnwdi}~~~}jcclmxuڀmypspusjdðbsabtx}yy|utqaqhVb]\NL?Fc`d[=::;<95ZHs935420-235640..,23,4?BCF@88?GGIILM%$$###!##%'&%$&&'#!!!"#"@>;:54/,';;>=CIII&+*'('')''&&.62=77-144011/27:86159;<< #eUTQh^LJ(0HE~}u[dezb[tSziɰnxmaXTSwt|muylnnxao}tgu{p~hWy_b[}{qfbqsdflzn]{\^f{W^lgbfiehlyslbwlwfbzdhqmTg\UafkF179H=CQ\dLtcL+(,677=:;10Deg}s[UfMQ~zah}`w}qtCNJ5AoCLQ^wr_HT|z}hoklstqerpocaeco<@BC=gΨʕvߙaS_phWstjs?e`G]eh[nUIY^LJWuKeWHV6K`?T\ICNWe[WQCGRJEj6?(@@9JW|oR`XlxRPbQKKD^ezioiVd`{Xd>J=+HW'--?Z\;@?IP\X=14209KEUP@<5?M-6XEL7637.C?D>8.(@A>89RFH9;@H9#*:,=748]/14?:?F>AA:=F?EDEYQI7=FMb586+=:@4P4[74*6E@C1k6.2'$BT-5,*2%'C%"$$=_FQ8>;W.L;<9;<57:A?@:4-29041[XaSN^5<6JJd896e\MCCFMVbjpop;?FHKMHLMLFHD?=;:544226`UI@JWcb_Z4966458854585=8cg8:99>;7744456436;>:898788877664323489:88=<9632234546:98:;==<95321a^249;8<<;:9541^_34137:467973a^_^dg776686645fgffa_^YVPMTZ_\YUM3CTi8\[]_ceghg][YF4YSX[bbba_^a_YQPKCJPWWMMONJDINXXSUWSMMQOOFGOKROOMLKRSW_b`b`_^\_^^[XXUXUPKFMQSOE=FGHP^56`YRNEGCMK;>JT]T^_\TIITTPLPU\\OJFFJGFFLG@FKKKOMHIBC8:EGV.-5/P//0ZWSQO=F123384698=<;;?:5`ZXNDB>@ACINHA<>A?>=;@@=::A7469?59\398@]2KIHHJJMDF[00KFBBEFKWPEHBCMKAPMLKFGC:GHGD89MKKGGPVYLNPKLDFHLC>><;7ZPHHK:^64A>:$1I$,!,)2$H5#,% 5"+2-&"$$!)(&"%) )'.#,)/./."@-)$(%!  +#       +  +  +  + +22  - + $         **.&$'06'?@82Q +4nC{yX_M >" &,7)"**-$1 +!#%$)$*+"8(*STv;Xs@ + +$   +,=`;==<865 + +  +  Lu11&' 92-**/)(.40--)03-)%,4).&-%# "# $ .'8G 28#0&'$)9B&-CKCDHPF@:>Oe\xxϠuu;A:`fLOgYKCSWaIR0ANS>ICT9M`88[4XQ059;TC8*3S86/G 6$+&%5=<)07! %%':(#*263a_ &#B0!2NV1J)DEJIBB:$IQAB=57;:8097OK;_4AFLTMF|amuppz|zjALJvwa_^D5baddHhK\ipe[NPegaSVDorliOPWpoxJL[LL^[X\jxrii_SOevo\\jsrfm{~vt{vkg]ZawMGITUJJLF=8owwg\UF;=1,*)(DVVYM:>HS[SKRTsspyuh_h\]olrdantpn}IGPS\_dYS]ca`esa^ZXSclSMNctrckda||rnslimcmj`aprucZO\^`Yd_fcdջр{~郒ခqlrmmtworx|vxض󋕠}snv|yۃ񄖓wusz}ssskj|ôʇ|ercRa[[LH1+4473/72;">&6" $-4$&#$ 65"=)5#"FA=@@""CDBA?42dAQJB:NN,-*7(/2)$&)+INHB,643FK;3EF37&(*   +%q.   + ,9+#))"+>7CC73!&4!.N;>)$*(+&!/31-0D=8##,6#&3N""&7-&()31 "-+246IA>/237C*/)#&0(>,N0(!-;02&b0;A %#0%&( +(.'#,2(&$01G><<>??<<839$)'//-'!!!%*.4988$%&(&(&%"%",(!"(.,*)01 +s,*)*/-.-120121/..,*'$),,*)*''.*))*.0124/-,&'!$)0//20,'(%!#&),##$%# #&,+'),(%%(&'#$*%)''&%#&(*0..0..,(*++*()'*(&$!%&'& $ !"*()+(#!)'%#$"$!! %&#$"$&) &(.--**+$!$" """%,,(&% "%%#'+&+,.*$"((&$')--$" #! #! #""%$"#& &%#"" +(+' !#  !--$%"!!#"$( !!$)#!$#&#"#!! $"#! #&)"%($#!",&"!$/!125/%##,/$E(-6*)++,,02111/-**+)))'024+-.-),.,,-)0.0//32.//00.)),+**,*-/1-,--**.41-.0122/.-+,0043-4532441149 +~~}}}|}}}~~}}~~~}~~~~~~~}~~~}|{|||{|}||}||}|}|}}~}|||}}~~~}|||}}}|}|||{||{{|{z{||{|}}~}~~~}{|||~|~~}{|||||~}}}~}~~~~|{|}~|{|{z{z{||}}|||}~ ~}~~~~}|{|{{|{ |}~~~~}}~ }}}|}~~~~~~~~~~|{z{|{|{{{|||{||{|{{|{|||{{{|}|}| ~}|}}~~}}}|~~|{|}|{|{{|{|{|{|{z{z{{z{{z{z{{z{zz{{zz{z{z{|{|{z{z{z{z{z{z{|}|}|}~}|}~~~~}~}~}~}~} +~}~~~}}~~~}~~}|}}~~~~~~~~}}~~ +~~~~~~}~} ~~~}}}~~~}~}~}~}~}~}}}~}~}}}~}}}~}~}|}|}|}||}}~}||}|}~}|}|}|}}~~~}}|}}}~~~~}|}|{|}|{|||{|}|{|}~ }}}~}}~~~} +|{z{{{}|{{|} ~~~~|{{|{|{|{|}|{|{|||{|{|{|} +~~}~~~}~}|}~Հ 񅒋܀񇑔в뎥ꐥ逭Ώ䧤ꯆ쓯ИֵĩŶ¹ėҩםϠɱ臔ˌˀۣ￱Јӭ癥Ǒ˽ٔߖ禋ϔںԢ񑴅֫ӨظЧͤހҨׁæڐе˼ɠ٩ñӾ袦؋഑Ű盀͙遌иæ쐺Սۋ֠–Ҏ܍Ͱπၖ럦ǎũڢͧۥ凥˂޾ׄ͜ϑȨ习ތШю񋊋؄˲̚瀀öɽƯرƱ̵±¾쁄Ѽ{}xt~{rʾĶĻ􅎀 ˥׽º􂈈򈅃rrw~퇅İ⯦μ€ȃƍƽž󁛔ʽ˛̾Ħǿ⻹يۅʡ̥ҧမѭװ⥼ɞܦ耗ȉش͛ފՉϹο҆񳎐Ϲۑՠ˩ňףǂѹ˔ݠĽɩŐȃ▵۬ӱ¨ºӎĚ힌é쾺֬ų뀒х러᧫Α峾ú򖐖ȞìЧ¼جӢܣŔт˺줉ا‹ȳѪҼҿƙ悐Ƹ髫껜πð񨘂Ŝ倐몖偅Ƌ׭Ի˄ӡ̩Ͷȩµ»πɼĮλǽǵɿΩÿٽʿûĿ݅才􀅍ב뎒´ۄƳԻĹ̴εʾ×Ĺʥǡžhmqtgj8;@DE:hd\`cffihd_abkok67iigd_]b_ZV^b2994ceo;;kdebZed`_afnl7g6f^^_de`b^i;C=m9c]8AD=4bf84bcj77le375effeba]chcfcegebb`a]e:88;:87:::=>@>98788:=@@BA@@ACDC>;=?>;7:=:8:7kl9AD>@@<98:CLDCEFHJJDA=>>>?==>>;??>?AB?>@A>=<;A@=8:?CDC?ABCDGJNKKJIHGHGDEBCCIKKFFDIHBBADJHHQKXcNHGGEDBBNPFA?ADAEONFKMJIMFGILMIMIGDCKA@=?<:;<<<=<8::845899:9BE>;96432aOEKNRT5@DEDGeF?@C5,&'&)0%(!%57>;>,03266,@>5-.9:5,#!!$ ,9B=2+$(4.!)93$(06*(,,2&)()%-02'$#( &4.%**DH2E;?IA4?A=8@;=F==VV#{})GEH`[yijVBWHlisliyh}czn`q\{aeoRXlblhbmyql_J]\APIq8Sdc\h_k_[Wr`;OCsm8@Eyp=DZ#$CP>QJOUYk7+ME>NHD6;(5+0:sLb&OVP^YBF@=MEHMO>Hm^JHJFBIT>4qwag~@OTZ^_a_eimlkd_lwHfV{y{Umoq|F\JQNRTckXNTOYPFkg\U]jC{mhhbF]e\Fn}KObmvyhaaN[F]q~tm\[gI[OVqacLK`tliafe`OJPJIIKCBFDCt~}whZdVOSVBt|vrkfxeFSc\pnxmbpvp`_oά_^ghoqnemswzxmjhqhy}rv^y}evngztqnmmn|snncULFGJMVZZlfp{pkabiǻ̷жxyv{xvr}y{}qwx{zoo|u~_\ega`mujgƨ[Yc|~Ʊntoƴib__ltmskioyz{w^[elj^b|q}p}q~pmeg_Y\YO:S[`bj`6;<:96554/.HQ<85730-/55731/0.,/20:>979DCIKL%&'%$$$##$$&%$!#''  !!!"<:752.,,';A=@EJGI%&+)()('&')(()((*O@PS,;,07S==OghK()'*K*,'*M,72.-)/,:MC@7++41+2+MYO&*$3(,922.10XVMJLNLLSO2IA>CGFIDH4159;;?*.,-(06632.*)2/322301352CF@?>779C>6466256429;66976:=;<;"fjXQegUS)+**@>;BVPJ/B@paLJ`..KPN5.4BHN6I_VYlmzVaPdWSCMYO8odPyqkYor:y`mPwjuU9=CMT<^;NBoTYXO~hBeRC6c;4478i5f6499mlmBOJ}~qjbjfxUvmksGHRqǥtzrmpg^mnqikwvrdphwj|va[^y_\{yb~qbpmcxbxux[_talQ]f\X^]XqrapbZoje~SXtt}kXnG{QrgZT@H=>?;BBjERXn9&&*4756<<56K?e_:EA875@K?>=E=5FC>1/.L@PY7W5E1>DB6:9S&%=A26D4AE:5D<9@:DPVHDfPO<5XH\bD1,BAN3f=@7P1>;88:@9B;527>AC?22147592b53VSg:;:]E4M-,2>[.VWbc^b0ZJE36cRnn975456`__bi6:>lj<<7322312569<=><<;?;:3_R45BDCDDDFJA;;?:1<7;3989LG865jSY:=ACG=7@ADMPMGBHJS12TMF@FEHKHJ=EKREIPKHDEC=IRGCDS?TCD3H\3QLHFKJIFI6C<=;7YKIKJ;9\dF9`gmaSDC?K;913TX}iZZ^`abgh`g_WZZXUWTRRSXY_[adb[\XXXYY[[TYhl:snnkd]ZVY\]\ZZX\WW[][Z[_bb^\\a]^]_\cb`edc^cddejh78jj;68;=56""10-//12542012885332/./10-*..01440./,3301259612./132/2/2!32)01335522576321373545864432/251220257$?76 " $!! !!#  !! !!#!!%!*1$!&'!'&!$%#"$!!"$$!$""% +" %  (.9A773/!le7AFxh8=P7E2A=GNR_15H)3=I3)(-/$.%* 8=-&%*84A:6+( &#('U.1#*)"3o).>1D;:A?,3^VHGEFBFD;dtZ:BXKRY[dcfjqxyvyomsu=VPxzQiom{J^KSSUUns_OXVaVHidRNSeB{ndifG]e\GpNPfs{zkabLZI`utl[XeHZQQj^dMM`soiccaXQDLF~DDE:9<<;hbe_hVA3=3+03$>KKVQJITJ-0>8NS[SJbl_M[YRQ\krqfxvwsu}LMVWaecW^giivrb\\c]mqfeLir[kbYv}ymgdidffwoml_YURNNPX_^row~quqqwŻϿҿͨ®ngptoo{wf_s̵ι}|uqm{p{䁀kfiwthi˶ðǛpkagbZ^XL6OVYXYL,5640--.+&&9H3-(&"#"%%&&&"!&*)23.2530+)/-12/  +  9=9731,**'*  ,#!0:>'#"'-!  /,%#'&''*("!!%'&&$* #&!# CQE@LK94(/*& #G:$+4 %!"&*(+A14=*47@9:^kd.-5073 7@D6)@;B59%=5GA-!%(.& 6.2,&:.%@3*$G+%#$&G&J('**NMO09:aaegeLB1QI4W>H3@A5LL`OX>nM;72?xXLRM>DPGUPvGIThU>7k8WT9G7N=;>Hhe]Wz_HEPB`D78,76/*-W<47'5(2.#>.#1')B315-NU1/DA?<-;]]QPA<6M0-,2(#5$%&@F<@EI26N'&0#)7((5,""'7%2"D855.'1)-=!=BGKG@@3.433/''*!(!;'"* 2*!'! 1$5:*-&5515-)!$()'0O\-P)$!&IE7DM\D>`j225: 4*(<*'%20OK/73(' *0#!#,& 121&#$=.7@)B&."" '3H.5%&/5$"/*4AI>=XA9(F>LG(,1A)V291#$&]+)9SgF+;#2 !& "!-)&/0#/ 7!@=B@?@!@901&77/0//2 65&)-(*+-(%)&'" "0,,,-*$00)/+02010-/ *),.,/102220/-*)#"+1-*'('4&---,0027!3.(#++3320001-*((('#'&&%"#!&!)$%%&(&%&''$#)(()'$%('*(+-.-,)((**'('$&('&"#"#$&&$'#)*(m' #'#%'& """# '"!%&(*&+,*,.,+-( "(%'*.((*!!&& '-')*+$"+*)&&+/#! !"#! "&!"!!!&&' '!( ")+% "$"6),!#$'%!"!&%#!" !! ! "'!%#" "' !&( *$%#!"!!(*##$$.2$-493,&)%(#( (E?E2**,..024/2.)+O,,+**--0.241,.+*,--..*,35:7662.-+-..---+,*),.-,-/12/.-1.0//.210432/22015556~~}|}~~~~~~~~|{|}|}~}~~~}||~~~}}~}~|}|{|{{{| {{zz{{{||{|{{{||}}}}~~~~||~~|}}~~{}~~~}}~~{{{||{|~}|{{|{ zz{{{||yyz{z{|}}}|||}}|~~~~}~~}}}~~ ~~~}||{}~{}||{{{}}~~~}|}~~~}~~~~{zyzz{{z{z{|||{|{ |||{{|||{{||{||{{|}}|}|}}||{{|}|||{|{{|||~}}}~}~~|}~|}|{||{|{|{|{|{|||{|{{{||{|{z{z{z{zz{z {{zz{z{{z{zz{{{z{z{z{z{{{zz{zzz{{z{z{z{z{|}|}~}|}~~~~}~}~}~}~}~}~}~}~~~~~}}}~}~}}}|||}~~~~~~~~~~~~~~}~}~}~}}}~~~}~~}}~}~}~}~}~~}~}}~}~}}~}~}~}}~}|}|}}}|}~}}}~}~}|}|}~}||}|}~~}~}|}|{|}||}}}||{|}|{{{|{{|{|~}~}||}|}}{{{|}{{{|}|} ~~~}{|{|{|{|}|}|{|{|||{{|{{||{{{|{|||{|||{|}}} ~~} +~}}}~~~}||~ ̀Պ݂ƿ‹Ŭρ瀝ѱ蕚ڛϨ۫ܚǘ˽Ŷǻīβ끅©ͺ˺ųÊྒྷ΢ӢӒ܄۸Ϋ傠ǦȚϭũܨ桔ʍ뤐‡߉˰Ńқ͡ŠÔаƸҟħƨ׈Ƨݢܼ荱ե쵩͡Τچ١ό¼猱񑓩ÞǬ΄僉ЮއȧЀ񊐅ьϝˣǵ֪莋倕ԪȠ텔揲၁ӿȿȲۭƨڭ҇􁈌z}rvz{uwv卑ջˮʮڿ}wف¹ĿʽǬ:쇋䃌ļ鈖Ȭ𓖉ĴԉϺ׼δĬ»ι󆋍ηƸޗDZ֔ޑǼφ냀삃ݧޤܵчޤ쓧ܕƦ˽˴򥍇ґ̥ΕҰ´ԟ愜ɹ޻蜿ԬdzˌƻƼɆꖈտڬĞژ÷—ճ񗘖ٺ݊ѲО޶Ʊˑݳ˴žů⇋µ嬄Ȳʛ˶ѐᣱ̰˹̥ޜʛá扙́麹؁ߘּѴ݁س؀ĿŽŽö¹ɴô͸¯АٲùϷýľƵԏޡŻDz֍滥ŲŸǨӡÖò˼򼭯콴ƬԡߔˀſBqlu?=kjm78;=<:5hfeddcdec^_eecgfff76hec`Zbbbf586ie99;;==<9habdabhoggcbd_ajfekjgp;ci8i^4DD9hbgegegg6858;97nkedhjfbbcaaaeghcecaghYZ,[?>??=<;8:==?@AA<;'A@;;:;989>9:7qjk:;=FJLLKHDA?@=@=??CB>==@CB?===<;<>BB?>:=>;9;>=?ACFGKLMMLMKIHFECCFHDCFGEEGEDFCGFFE;DJMHEED@FLLL?>KIMGGCEBA@DDIMIHCJOXHGJF?=?CA<=?9:<;:8767875697?;;865545bYXONVX_4>CA:=b$?*%('#0& )IP@;=@.KZh_d?Fd4.C=(50__hv{c{=^_]McUShq|hq}^ikb`ooRAHM?461/.'&*&*&'.40-8;//,-3/.027<8145/.<<3.)!+7>A;93%")5>:6&A!#&*%+0.((*/,$,%$-,")%&*.4)29$]FA}dSkndwUaSLZSQ9+595>;_E^VJE22$)%/7G,'0"4,! !,%3#@:@G%E=KD7(&%A6+2:_~)[LYyXad`RAr]\Tz{g, !!'-+'&;xfL`[M~tXO{Rz[Yvhpm|^X\s~wk0&np_!kU{TKLy)98F107973&+1+'9*)S9)@FZ[B7S`,"# "%2-/+%-MnoUV\OmKHSLA|p[W`i^pT{|d5879xLCMWKB;1:8=@=C<=9c\CIeksYMXlk{shhW}{yhmpjxusko(ut|yRieukn~~ylaspqrn;^_xxpYZ=s@np;Zdbjdfhh\ageqPPsm?E:a4bZ/\E=EAK91&=)0)HUfc_9Pr\Etira\FR2WSSEFSr\LTSRXWdecY;LWY`bbg`\drusrljiUQXmmRKKH>sDEI~AUbbJ>GRGSSZTHACm\yWhXQHqZiDnERaYRFIHNKUf]TH[a`To~oMTGWvjLVMT[YRMM|tk{CKFDBx~~ulcT`[\ePpggaZa`PNZwymge^YWeq^Wfch~|ɜhooibpswuywuhtdeegciyrpnpfzuxv~}zrj]SMIPW[XWbfjfecfhetvzx}tyz{u~|s~yҀ}{xߨЮ_ddUcjsraq{wxdgomekg~w|hfw|zxsvy~{z|swsҼc_Zelnvn~z}hnne|jYroic[T`_FM\ebk=;4m;83200-XVC^75653/.59733005/,020??97<6::=IJLP2KJ:NFJ;=DAE@E2MBDBH;@JG?9<52d<3%->GNQSHLXVXg_MiQN:AZ6$15TPoqUNr{_mqNawszt=eriahC?0E9@F]ZJ(+5=8s7@DAH]IoFbAaVCA8NIU;/L@8N@DS/+**PF;GL;@CBF@:@O3==8X@DEGMA:89[98:<5,35A6>C;37I56EY@>ZFF8/B\I.E2(H9?+WE*-*4=CD;CECDZ5CNG1'8CB!$H@>?A9PY;<9;<768]S7MA@915:07b`_\[^]XUN_a`^]c347766342234599779<:88846864effd88?:5888:9:6863564379;=?;9;6243335027;>6426:;9789222478;;<==;963`212238;647:73b`323369997666575ee43_XUSOQYVXROGO>qh74d]c_agfddgbQj;?YW`i75hd_^b_YVTSSRNKPTQLLOGJKMNRQNMOKLLPIKMQSUMJTTSXXVUZ[[]TSYb\[ZTUTRJOD>9>M]PPUMMCJOSPRJSQJKOIBIOE:7.F7CIOLOLNS]b[]`_aa`YYO>D>JFHKH?JU64aVZEPIFB7EEXXPPRRJ5;77A>@@>@B?@@7UJ`<7:>AE<7LEEHJOE>FNFCDKGDGC@CLF=ARPA=:^IFLQE9e7?><7gTYBYFfHd81?+quZf]cdhfhegecgfc^[VURVWSSSZai9565e^[]abacgg_dfcd^Z[Y\][ZYXXVY[_\[\\^_]\^a[[Y[Y`d`ihb]`fdegh6j9jl:7<"":88121012242/03303321331/,0//13/4010114624002/04227758241,015477527864675234333667653147///423X=979 !!!    ! !##! ##"$"%""!"$#!#',"!## +%%###&  + 1B1),-]'4_>4#.  +&%#$'-%5!86) % $)*)+%-" $" !-2)*(),'&'&(++$&$'&#)-,+%   '))1    #G7'2&#2 '$-% + + ; + +     +   #"1G -1   ++''=R + +"fZN:;Z9$ #>0)iX"%DB8$45/+H>GJ4A]O* +   " &4/8"+. + +     " # !  +)=8+H+ $" )90.,&+),-)0'"$ #I= 7 3#7/.-!7-C33=4*(-2("+7J\S)0(%#' "O{cqtumň|ojf7ZdytiRT-Q[aceiqjhrzvt[QUmkPKKH?tCDIDZfeIANUJVU^WJ@AeU}YjYOElVgClETbYRHIIMLSc\UL\a^QiwiFQ}D~}TsiKSNW^XONKwjdr97=2B=B>8>>46;MQGB`MEDt?CL?:NUUgt^_kfovai}~{S]bWTcejfmnj_i[\]\Z[h__{fhy[|riqmnwtwmiaZYSWY[ZYdjqkggnrrȲx̽uwtiq{}nwyxvsy}̿zvꇃigbkrz}wǿ{rt^olicb[b^CHV`Z_42,a61**)*'MI8O*'($!#&%%&$%)#"'*(51**.).,*,/0/+  5P975/-*(!-8*@+"6+!#$% !$   -+#!!%#('%)!7"&$$!'%!!&'#  GC<>DG@8.$5!)!!#)8:( !& #-,>4'+).BQ0_[lR->3%$4#+:/A84.>$#7):2'-#.;8 .M/.=+)@J$8D#%&&AFH(*+(PQQJJPTaQWSQF\Y7^DKKTj}BHQ7EpNKFB>;CHVTS\qoRiWPDQr[<6(((@WNG&;/>6D3!$/* /+.*HB.>U@0./@PI7;KOCJBHK+Z:30< #%')+@9=>!4C9&4*2 .3*)4+!-"3AG:249>.)"78/8-5(6&(E>10*-'#%&!!8F%,+.($'&-*" $' % !'+?@7*0=9$"$,,*03TW7=iX5II#/9<032,H-1$%6IL?3X012PF?+1-?0@/137<2WF\72aZ3L/A68)$ *'I6+*WBL8`SRX[FTLK5O:{)*6BFA17FFHTK22!*$1 +# 0%H!";M8   C/#   9>m?W;SA01)?@I.82(5.2> 1'!,2"(+)1.*.;$$8&)*,- #3K-++-%1)#" 4##5M88L90# 6I7)./4F7&,4=<<=>AE?9;<=?;=A=9;EKHB?;876686jjmlm97878=9o:;=<<>EJJEHKMEA>@@<>?>A@>??><=>=@@BA>=<<==@BCG@;<::=??@CGGHJKLMMKHGGFFDECDBCEFFFDCEIIBB@IGFEFE@??ABBHGGKI;FIFEJHDABCD>@MUH=??@>=?@>CC9:=>=>9888754437=;979423`VVNNFDZ29A_=F3<<&0%(9#!%(&XP449)WisCWBaAL@9B@::'DXf@~zfCVWtmeiVwbrqRe{QTwL>@?;=83,9IC?<@_l|L30/6D'+C1?@040221/'. /N&8:1,+GB*A"B7&rIRBsYiTQcruxxu~y>!%% &' E^\fv˅CbcT\kU<|flXpg`!AMLs\=TMECkOR]gSwMG?840-0(=1.(>;/A;Ea`QVFBKD38)=6=?@F(*9R3QX7B=PI.K-85@1425-0%G.D/YB'+=qQ])\o1b`QS:1WeZJ\TMfE`T`[_``]hekqspwytwvq`RZQG7;>HLJo?TKLO;hLBYKRMOudE~~JTNXSwdq\`lomzxttFcqVRYP`rvvkbc^_`XGQXKLQrLPh`iO\]_^WSZQmyILEKNLFDyxyzogolbEyn[aqwUZU]ntjvbRO_cYSYyyqsdrobbgvesoy}qq]_arhf{wwiykh݃nt}~pld]^^alma^`_gfheaa\^_xzզvz}usssuyvqyvyotuujϵh_igege`eUUYi`g^hxnuuttyumtzzį¸w˸̠mjq|~znlrvonjuvz}rurkvjuiecVWCgQC`ej_j?8gZa6789724`Qc4576328::7454111-222@7857=<74>GIJJ%$$%&$#!""! !$$!  !>;;72/,*))Eh<@CCIJ%$$&%(,01..-,-..0-;@T6X*5:]~/5L>)^k6FG>?C#*-OQ,0KOIT-F;3,#&(/802.,<*&./4D2(RQ?364486BB<>81389=8/(,3/-+-(0/22.215/1431.,1538@89546:<988;78!### ;==?!#=;4/Bs`X^iaX^/UF+&&'G8),-)60;>56F7/5Y7_7N56E6E}Qs[d]WLSbfspk~CTWJB9:MVUW|ZWvfz}KrfPRKskGMSIXPTt{HA:WWuuHd473fb6kk66kbakife`mgUnoaYqvcw~fV[kt›߈vun}hUipvytb|kj\Xnrh[`erus{ȡňVQsvlngp]XY`ZeoX^T|o`il~~__nTyZYgzfU]PSFQlVNV\4:oSTCayl|yR=28<\elf,Bsd562HG7Ah?E6MH4.WC6:P0H^GY:G535+;H?4B:B9K/IPJ.5:CGHK@@B\):.:59>NI18L5:A6"84[D9;K>C:SEB5;BJG7e3B8>.25AKCA9;<;=?:ADA?:4_678=@54659C64}997:gV5R+%+1CLE5T6T5\]YY1EcMiJn894f:<698876ffnice8>@PRYTV]SPKGNIHCB<4a[YLJXcdbb`hd`]^_2797773334977998:<<77643558834id:9;75<<86531;<956;;;89<3b`361332`0334:;58;223458;9996>::65232622889884ef3334457786776664e45fa[XUSQRRRPMIN9Yojbed\]Y_di^XZYJ];M[Z]Ze86d`agaZVUXVRSQQQNNUTPUSPPOOKJOIOPUNONRPSLPURSTPOVXT\MTUZa[[WR[MOKCDEEJWTPNQJH?NJLQLRYPIDA=GCJ?EX8DMMJDRTOSM/6101[0^a^\]>SBLGLVREER785XYO]NHHEGRIPKKMJBW>7@U[RPTZYG>84AFLKOQOQPMHONGEFHEUH:C>@\-.363UYbWUR[Y\/33568:8?<9:8:2^NFDGFCACDGHHE>49>@;?A=97@8SY\[?8:D<>A<@?FEIGCADIIH_93PB=?D68EHE<9<;=;3DZD49MI;_1JPRLPHRd2NF>TRQQFD<=;A;3GJNOMA7=D>:>gRX\OD=lZ^dfg_EVVYVabTOQVYY][YWUXZa\[^ZX^a]^b[\]ZW[_^^bca`]cgihjjijgQ78= B:6<75344002221131/03/-/01147536116520-02/,123///0256301/0B1442555 !5685:;:754335466875325445149%! " 88998: !  "";!   " ! #""$$"# $" %+" !)#$ !%!  @@)$%R7_@B (9.)6,+++($.( '%+.#**.0)$)&&).*A0&%+,&8 %)-,#&" + # #5+8 # #"! +    (.6I3&:B5"    (!   ! +    )!9 "X +    34A +  +  +  #&6 + C..@)'"! '$ 42 *((&)# :#/)%+''!'6'%=/; ):B'!4./( 8<5;o,9=z"$@$+ yl}gfaxa]hjchf;:@de[V3.0<]d`QX:SO[OB7c.<9?ABMA==>4:@8HPLtARJOI8hHB[LSKPreEwLUMWMph~h\^hniuupnDbrXUYN_qzxjbc]aaXDLUJKOkJOg`eL[```YOUMdoBD9?CBu>;fgfdTFKG=)CC9@JUM7978BKFUD=CHB::3+%"*&7%;,C/+,(1=FQSTd/81((-89)#=(/>.30=98>;;**&2)!%!)$(=B)03JP4E%'$HF'OR*)OFFOMONMYVAb9F;RMOE;4CL;3YFBGdOXG=525cRoJCAA7hRFOMTPSVJAOTVG9;H;7)9! 34)A3?;:B=eKU]<+-PFT@PMW]G_723%! ")3> 4/., #9/(#$,')&+@+<,$0),' ,D:7,:16:89!6*:)/*"-90/6-)#"",,%( B$#""&9(*822)2/4%<*=8Jd6gG09C<7GA/681.K?".&*:HC3N;/&2/'%.0#!K?63,03.6LZ_`TsUi2/1#60',BMDV\1#(*! +&) $ 9=*405#   N-('" .&Aj>>DTJ72-#::%B4%&61C1>"*#/%*(0'4&/'(./-"(=K-'"59&!((!;803=).*@.,$,545.,B%!00Y'3*/$+,.933,6.9!! ,2.,-1&3 6$@C?? *5'3#7023950/ ++/+,4-*&$)$%" ,*) &,/0/-31/.--2/..,0131/++)(((''&$#&(3/,.-,-+-15/,..'3&,*+)11/261,+)+*(('''#&()'*&&''&##'%((+&&'*()$',''(&%),(-#'()-)+($)"%# #(&%$&""&"$&#&*&#!$!$( &#!%&#%!),.//2% # #)&$),%+!!# &"'$$%#%',('*-.$ "!$&%&&# ## !)! (%(,&%$)()(! ! "" !',., "!" " !""*%! " )%$.$&*%'"(1# ('%%!#%$#" 5,//0'!7@&#$" /2)./0B-,+/0/+*(()+(/--,(,+-7,/6872!-,.-45+''**,/.,*()*/.-.,+//..0++--+/1321/244314453~}|~~~~}}|~~|}~~~}|{|{|{|{|{|{|}||~~~|{{|}}~}}~}}|{|}|{|{|{{|{|||{{{zz|}|||}~~}~~~~|}~~~}~}~}~~~~|}}~ +~}}}~|~|||}}|{{{zz{|z{{zz{}||}~|~~~}}~}||}|}~~~~~}}|{}~~~}{|~~~~~~~~~}~~~}~~~~}}~~~~~ ~~}~}}|{{{z{|{|{|{|{|{|}|{{|{{|{|{|{|~~}~~~}| +~~}|{|{|{{|{{|{|{|{|{|{|{|{{|||{{|{||{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{|}}|||}|}~}|}~~~}~~~}~~~}}~~}~}~}~}~}~~}~~~}~}~}~}~~~}|} +~~~~~~~~ }~~~}}~}}~~}~}~}~~~}}|}~}~}~}~}}}~~}~}}~}~~}|}}}||}|}|}}|}~}}}~}}}~}~}|}|}|}|}|}~ }}}|}}||}|}|}}}~}}}~~~~}|}|{|}|}| +}}||{{||{{|}}||}|{|}}~}~~~}~}~ ~~}}}||}|}|}~}~~~|{|{|}|}|{|{|{|{|{|{|}}~~~~~} ~~~݀~~~}}|}~ 4񄇊肐򇎊¾Ʋ̥وҹ熴ѻř򅙳ϝ䭚 ĵîԂºՀጆ¢̜׽àȵɭ׿ǹԉܳᒑͬ刽؅ÚƪДʅ圤픰߇됟щ偏̈́С怐ݖЀϸϑҗ򧝝ڐƽڄĄڿ“ȣʲł˻֍є𪭛Ӆἆ݂ýմւށ۷ȧиʊ綉ثЯፍфƅ΃摋킃뺯う쁀Ϥ闩ŲӋֵ݂۠͂񵩣芋凃ꈋꂅ󁁄􂍖ࡩ􀋍ޤ帩Ⱦ¢ѰŵᏄ³尶ۼĀ޹qx{wpprozrz~ؽtu{z킊Dzɼ~ʤx}˼ǿ݂¯Ľ͖픐ɼĠނȴ߃º¸ゆசخȫͽЀж»㨥˕򐞷뾤ΰ݁ąﯙ像Λ𯬅ԘǰۀޞמұťǹĠч߳ٴ✕ͱ֚é܀ஸ̯݀Ǔ˕ʆ誵ȩԌ苹dž༉􀜚⛞ق鄀Խ̾ОхʽɺֆмՕߠ噮쫿篹ꀤϺӴѡВԂνţɽѿӭგ󇝗봈꼏̿쀍ۇßųûüĸʸšаڀƏѮⰱ𝐩Ƴ˾㉀ĽĿƼ̉Ŷ드éĴս͐нʨѠէݗ񁄆Hʾjgd8nia^g:m54668555456lhe_aceccb__abcgk66jhecadda`cg56667jhbeklg_dbdebcilkh^\__XYY^^b659@:8:ihjmvqihkcaa`fjmkikjfc f6;EEi_eeg9;9;/99;:;:9>A?<=;:<<;;89;<<=BB@=?FFIJFA?<9976mln:8:;P98:<<==>;:>BFJLLKC@=?@=>?@A?A?:>BDCCC@>=>=<:;<>><<><;<<>><>?@BCBCEEEDEFKLKJJFDCDECCCDIMHLQVJILMNJBEIFINMJGGGC@AEJMIGFRSWKC@=AGIG@==?>><=:868:99633666875320]RKJ=LV_S42T8IGS()0<6 !)>2M1;;^gk\QA?B9L?)!84./.'+-Q,30.-,,.*!",+( (&(!*&"(%#!  (4Y8@OiC/%#1-_C^;NjYCC+17D>@: >.Z^fxrv}|]/TcI}]}hNem^V[NDqkrhjln~kmob]d^x~hdwCoJ;U3F__GECp6Wd7;:S]hhX1,`:TRY3:eVM4<5MX^5::[2288TZ4QL*&36E(,@0%A44H::@EME@1,:9,O>?EV1N?D6JXTQc^ZGxjjRe_md`ggi_Z^ejveXlqmbce`dg`]^UQTHOLMWYSLPNLHsstvnQoWW\TFRbtnVcT[ZWi^R^ccZao~vqzxe}zqϬǻgvvtyuwnc\gm_tclρp{~ts~mh\`efjhhdlnfhksk\}týŹrxzxssurrzsq|xwsrjebqi^dbi_W]]foo`afs{}{{}umo{y}zx™~gymvutw|syĭ_ru~}lo~~qzpWvnde]PX[BX`oeSa>;RKd;99:76ki\e361136:9;$76554211/.292344;@9:?GIJH$$$&'$#" ! !! @><:760-**)'K;:ADDF"##%).*((+..--0.0542H24U^TL442/148<>2.,04,/&$0661-/-+&+05838<:845599:997::78 #! <  !# ;PskU[f^`]S-`j>O.*(((*))&&%I;6U.-*N_AK^XNC@IEHxb`WJyDxo]qGP?R_[:eIawbWpEasZDtKNT]MyzFOJ@GGKGZeLjF^C13;=A>bXad:;idaig^gga_`YgfVgÓlitgZfiʀ|z~mll{hoWry}ŕ|{aZhr}cikqrv\\de}of[S|¯kmb]Y^c_ikltolk|jipht[wYy}zg[XKTWqY[mQEFD??:Fgwoe_san5,+-1@B@7S:2+=J|x{RnqNVWH\_g]{IELmpdrhaQxIiBSHrhild}kibcao^q|>PKZ}]TaCFB?>Cepo}Xbbiacqanmd]dsUNT.d\hGBDCMjMQQm]Hp3O